Re: [PATCH 00/13] Re: Scalability requirements for sysv ipc

From: Nadia Derbey
Date: Tue Apr 15 2008 - 02:16:31 EST


Manfred Spraul wrote:
Nadia Derbey wrote:


Well, 1 interface changes, 1 is added and another one went away:

1) for the preload part (it becomes like the radix-tree preload part):

int idr_pre_get(struct idr *, gfp_t);
would become
int idr_pre_get(gfp_t);

Btw, that's one point I didn't understand about the idr code:
Is it interrupt-safe? It uses spin_lock_irqsave and gfp_t, this implies that it could be called from all contexts.

But the prealloc made me a bit nervous: does it handle idr_pre_get(); interrupt with another idr_pre_get(), add, pre_get_end, interrupt ends, ... correctly?

I don't know if I'm answering your question, but after allocating, idr_pre_get() calls free_layer() which is the routine that inserts the allocated memory into the idr free list. And free_layer() calls spin_lock_ir_save() to protect this free list modification. So it should be safe?


If it's only intended to be called from process context I would remove the _irqsave and perhaps add an assert(!in_interrupt())

Well, I guess it might be called from any context, since the kmem_cache_alloc is called with the gfp_mask routine's parameter?


Regards,
Nadia
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/