[openib-general] [PATCH] Convert idr's internal locking to _irqsave variant
Roland Dreier
rdreier at cisco.com
Thu Jul 13 18:08:17 PDT 2006
> Good point, a try-again loop would work. Do we really need the caller to
> maintain a cache? I suspect something like
>
> drat:
> if (idr_pre_get(GFP_KERNEL) == ENOMEM)
> give_up();
> spin_lock();
> ret = idr_get_new();
> spin_unlock();
> if (ret == ENOMEM)
> goto drat;
>
> would do it.
The problem (for my tiny brain at least) is that I don't know where
idr_pre_get() can put the memory it allocates if there's no lock in
the idr structure -- how do you maintain internal consistency if no
locks are held when filling the cache?
Having the caller hold a chunk of memory in a stack variable was the
trick I came up with to get around that.
- R.
More information about the general
mailing list