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 _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev