Subject: Should ppc32 use CONFIG_HIGHPTE or not?

From: Dave Hansen <[email-masked]>
Date: Fri, 01 May 2009 11:37:03 -0700

arch/powerpc/mm/pgtable_32.c has the following function:

pgtable_t pte_alloc_one(struct mm_struct *mm, unsigned long address)
{
        struct page *ptepage;

#ifdef CONFIG_HIGHPTE
        gfp_t flags = GFP_KERNEL | __GFP_HIGHMEM | __GFP_REPEAT | __GFP_ZERO;
#else
        gfp_t flags = GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO;
#endif
...

But there's no trace of CONFIG_HIGHPTE anywhere in arch/powerpc.  But,
the one and only definition on 32-bit of pte_offset_map() (in
arch/powerpc/include/asm/pgtable-ppc32.h) seems to have HIGHPTE
semantics:

#define pte_offset_map(dir, addr)               \
        ((pte_t *) kmap_atomic(pmd_page(*(dir)), KM_PTE0) + pte_index(addr))
#define pte_offset_map_nested(dir, addr)        \
        ((pte_t *) kmap_atomic(pmd_page(*(dir)), KM_PTE1) + pte_index(addr))

So, it looks like ppc32 never actually allocates highmem pte pages, but
it *does* go to the trouble of at least trying to kmap_atomic() them.
Should we just give ppc32 unconditional direct-mapped ptes?  Or, should
we remove that #ifdef and let it allocate them in highmem when it can
since we also have the code to support that?

-- Dave