Re: [patch 1/1] alloc_pages(): permit get_zeroed_page(GFP_ATOMIC) from interrupt context

Andrew Morton
2007-08-27T20:33:47Z

On Mon, 27 Aug 2007 13:13:16 -0700 (PDT)
Christoph Lameter <clameter@sgi.com> wrote:

> On Thu, 23 Aug 2007, akpm@linux-foundation.org wrote:
>
> > See http://bugzilla.kernel.org/show_bug.cgi?id=8928
> >
> > I think it makes sense to permit a non-BUGging get_zeroed_page(GFP_ATOMIC)
> > from interrupt context.
>
> AFAIK this works now. GFP_ATOMIC does not set __GFP_HIGHMEM and thus the
> check
>
> VM_BUG_ON((gfp_flags & __GFP_HIGHMEM) && in_interrupt());
>
> does not trigger

The crash happens in

clear_highpage
->kmap_atomic
->kmap_atomic_prot
->BUG_ON(!pte_none(*(kmap_pte-idx)));

ie: this CPU held a kmap slot when the interrupt happened.