[openib-general] [PATCH] Convert idr's internal locking to _irqsave variant
Andrew Morton
akpm at osdl.org
Thu Jul 13 18:18:35 PDT 2006
On Thu, 13 Jul 2006 18:08:17 -0700
Roland Dreier <rdreier at cisco.com> wrote:
> > 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?
argh. Aren't you supposed to be on vacation or something?
> Having the caller hold a chunk of memory in a stack variable was the
> trick I came up with to get around that.
Yes, that certainly works.
More information about the general
mailing list