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

Christoph Lameter
2007-08-27T23:48:47Z

On Mon, 27 Aug 2007, Andrew Morton wrote:

> > kmap_atomic is a
> > function to be used in atomic context. I.e. interrupts. Nested by
> > definition. It is broken as is since it BUG()s on a legitimate nested
> > call.
>
> Is it broken? Dunno. It's a bit silly to run kmap_atomic() against a page
> which the caller *knows* cannot be a highmem page.

So far we allow running kmap_atomic against a non-highmem page and
kmap_atomic contains code to deal with that case.

> > Would that not mean leaving kmap_atomic broken on i386? Before Ingo's
> > commit things were fine. Revert the commit and there is no need
> > to change core code.
>
> If we revert the commit we lose a bit of debug support.
>
> We could move the assert to after we've checked for PageHighmem, but then
> we'd fail to detect a bug if the nested caller happened to get a lowmem
> page for a __GFP_HIGHMEM allocation.

We will ultimately detect it if he gets that type of page. Like many
other checks in the code it may only trigger sometimes. Reverting
656dad312fb41ed95ef08325e9df9bece3aacbbb will get us to a known good
situation that also triggers the bug.