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

Andrew Morton
2007-08-27T21:34:59Z

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

> kmap_atomic() does:
>
> 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 */
> pagefault_disable();
>
> idx = type + KM_TYPE_NR*smp_processor_id();
> BUG_ON(!pte_none(*(kmap_pte-idx)));
>
> if (!PageHighMem(page))
> return page_address(page);
>
> vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
> set_pte(kmap_pte-idx, mk_pte(page, prot));
> arch_flush_lazy_mmu_mode();
>
> return (void*) vaddr;
> }
>
> Move the check for highmem to the beginning of the function? Why
> should kmap_atomic fail for a non highmem page?

For test coverage, mainly. If someone is testing highmem-enabled code on
a 512MB machine, we want them to get told about any highmem-handling bugs,
even though they don't have highmem.