Re: __vmalloc with GFP_ATOMIC causes 'sleeping from invalid context'

From: Andi Kleen
Date: Mon May 22 2006 - 07:51:16 EST

Nick Piggin <nickpiggin@xxxxxxxxxxxx> writes:

> Giridhar Pemmasani wrote:
> > If __vmalloc is called in atomic context with GFP_ATOMIC flags,
> > __get_vm_area_node is called, which calls kmalloc_node with GFP_KERNEL
> > flags. This causes 'sleeping function called from invalid context at
> > mm/slab.c:2729' with 2.6.16-rc4 kernel. A simple solution is to use
> I can't see what would cause this in either 2.6.16-rc4 or 2.6.17-rc4.
> What is the line?
> > proper flags in __get_vm_area_node, depending on the context:
> I don't think that always works, you might pass in GFP_ATOMIC due to
> having hold of a spinlock, for example.
> Also, vmlist_lock isn't interrupt safe, so it still kind of goes
> against the spirit of GFP_ATOMIC (which is to allow allocation from
> interrupt context).

That's not the only problem. Allocating page table entries or flushing TLBs from
an atomic context is just not supported by the low level architecture code.

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at