On Thu, 27 Mar 2008, Linus Torvalds wrote:Slab allocations can never use GFP_HIGHMEM. Slab allocators BUG if either of these bits are set (checks on the slowpaths): #define GFP_SLAB_BUG_MASK (__GFP_DMA32|__GFP_HIGHMEM|~__GFP_BITS_MASK) GFP flags are not masked/checked if either inline fallback to the page allocator occurs (SLUB for >4k allocs) or if an allocation is forwarded to the page allocator (SLOB, SLUB). They are also not checked on the fastpaths. AFAICT the check in kmap_atomic_prot is simply too strict. void *kmap_atomic_prot(struct page *page, enum km_type type, pgprot_t prot) { enum fixed_addresses idx; unsigned long vaddr; /* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */ debug_kmap_atomic_prot(type); pagefault_disable(); if (!PageHighMem(page)) return page_address(page); The check for PageHighMem(page) needs to either come before the debug_kmap_atomic_prot() or kmap_atomic_prot should only be called for HIGHMEM allocations. Otherwise any get_zeroed_page() alloc from an interrupt context may cause a false positive here. Seems to be a reoccurrence of something that I discussed with Andrew a while back. http://marc.info/?t=118790336700011&r=1&w=2 --
| Greg Kroah-Hartman | [PATCH 002/196] Chinese: rephrase English introduction in HOWTO |
| Tarkan Erimer | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Roland Dreier | Re: Integration of SCST in the mainstream Linux kernel |
git: | |
| Radu Rendec | htb parallelism on multi-core platforms |
| David Miller | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| David Miller | [GIT]: Networking |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
