Patch from Dave Hansen __pgd_offset() and pgd_offset() are completely different functions. __pgd_offset() is really just a helper to figure out which entry in a pgd an address would fall into. pgd_offset() does all the leg work and actually fetches the real pgd entry. pgd_index() is a much saner name for what __pgd_offset() does. In fact, we do this: #define __pgd_offset(address) pgd_index(address) The attached patch removes all instances of __pgd_offset and just replaces them with pgd_index. Compiles with and without PAE on x86. /dev/null | 0 25-akpm/arch/alpha/mm/fault.c | 6 +++--- 25-akpm/arch/arm/mm/fault-common.c | 8 ++++---- 25-akpm/arch/i386/mm/fault.c | 6 +++--- 25-akpm/arch/i386/mm/init.c | 18 +++++++++--------- 25-akpm/arch/i386/mm/pgtable.c | 4 ++-- 25-akpm/arch/um/kernel/mem.c | 4 ++-- 25-akpm/include/asm-alpha/pgtable.h | 1 - 25-akpm/include/asm-arm/pgtable.h | 1 - 25-akpm/include/asm-i386/pgtable.h | 2 -- 25-akpm/include/asm-sh/pgtable.h | 1 - 25-akpm/include/asm-um/pgtable.h | 1 - 12 files changed, 23 insertions(+), 29 deletions(-) diff -puN arch/alpha/mm/fault.c~remove-__pgd_offset arch/alpha/mm/fault.c --- 25/arch/alpha/mm/fault.c~remove-__pgd_offset Tue Mar 4 15:02:32 2003 +++ 25-akpm/arch/alpha/mm/fault.c Tue Mar 4 15:02:32 2003 @@ -232,11 +232,11 @@ do_page_fault(unsigned long address, uns else { /* Synchronize this task's top level page-table with the "reference" page table from init. */ - long offset = __pgd_offset(address); + long index = pgd_index(address); pgd_t *pgd, *pgd_k; - pgd = current->active_mm->pgd + offset; - pgd_k = swapper_pg_dir + offset; + pgd = current->active_mm->pgd + index; + pgd_k = swapper_pg_dir + index; if (!pgd_present(*pgd) && pgd_present(*pgd_k)) { pgd_val(*pgd) = pgd_val(*pgd_k); return; diff -puN arch/arm/mm/fault-common.c~remove-__pgd_offset arch/arm/mm/fault-common.c --- 25/arch/arm/mm/fault-common.c~remove-__pgd_offset Tue Mar 4 15:02:32 2003 +++ 25-akpm/arch/arm/mm/fault-common.c Tue Mar 4 15:02:32 2003 @@ -342,20 +342,20 @@ int do_translation_fault(unsigned long a struct pt_regs *regs) { struct task_struct *tsk; - unsigned int offset; + unsigned int index; pgd_t *pgd, *pgd_k; pmd_t *pmd, *pmd_k; if (addr < TASK_SIZE) return do_page_fault(addr, fsr, regs); - offset = __pgd_offset(addr); + index = pgd_index(addr); /* * FIXME: CP15 C1 is write only on ARMv3 architectures. */ - pgd = cpu_get_pgd() + offset; - pgd_k = init_mm.pgd + offset; + pgd = cpu_get_pgd() + index; + pgd_k = init_mm.pgd + index; if (pgd_none(*pgd_k)) goto bad_area; diff -puN arch/i386/mm/fault.c~remove-__pgd_offset arch/i386/mm/fault.c --- 25/arch/i386/mm/fault.c~remove-__pgd_offset Tue Mar 4 15:02:32 2003 +++ 25-akpm/arch/i386/mm/fault.c Tue Mar 4 15:02:32 2003 @@ -424,14 +424,14 @@ vmalloc_fault: * Do _not_ use "tsk" here. We might be inside * an interrupt in the middle of a task switch.. */ - int offset = __pgd_offset(address); + int index = pgd_index(address); pgd_t *pgd, *pgd_k; pmd_t *pmd, *pmd_k; pte_t *pte_k; asm("movl %%cr3,%0":"=r" (pgd)); - pgd = offset + (pgd_t *)__va(pgd); - pgd_k = init_mm.pgd + offset; + pgd = index + (pgd_t *)__va(pgd); + pgd_k = init_mm.pgd + index; if (!pgd_present(*pgd_k)) goto no_context; diff -puN arch/i386/mm/init.c~remove-__pgd_offset arch/i386/mm/init.c --- 25/arch/i386/mm/init.c~remove-__pgd_offset Tue Mar 4 15:02:32 2003 +++ 25-akpm/arch/i386/mm/init.c Tue Mar 4 15:02:32 2003 @@ -98,15 +98,15 @@ static void __init page_table_range_init { pgd_t *pgd; pmd_t *pmd; - int pgd_ofs, pmd_ofs; + int pgd_idx, pmd_ofs; unsigned long vaddr; vaddr = start; - pgd_ofs = __pgd_offset(vaddr); + pgd_idx = pgd_index(vaddr); pmd_ofs = __pmd_offset(vaddr); - pgd = pgd_base + pgd_ofs; + pgd = pgd_base + pgd_idx; - for ( ; (pgd_ofs < PTRS_PER_PGD) && (vaddr != end); pgd++, pgd_ofs++) { + for ( ; (pgd_idx < PTRS_PER_PGD) && (vaddr != end); pgd++, pgd_idx++) { if (pgd_none(*pgd)) one_md_table_init(pgd); @@ -132,13 +132,13 @@ static void __init kernel_physical_mappi pgd_t *pgd; pmd_t *pmd; pte_t *pte; - int pgd_ofs, pmd_ofs, pte_ofs; + int pgd_idx, pmd_ofs, pte_ofs; - pgd_ofs = __pgd_offset(PAGE_OFFSET); - pgd = pgd_base + pgd_ofs; + pgd_idx = pgd_index(PAGE_OFFSET); + pgd = pgd_base + pgd_idx; pfn = 0; - for (; pgd_ofs < PTRS_PER_PGD; pgd++, pgd_ofs++) { + for (; pgd_idx < PTRS_PER_PGD; pgd++, pgd_idx++) { pmd = one_md_table_init(pgd); if (pfn >= max_low_pfn) continue; @@ -214,7 +214,7 @@ void __init permanent_kmaps_init(pgd_t * vaddr = PKMAP_BASE; page_table_range_init(vaddr, vaddr + PAGE_SIZE*LAST_PKMAP, pgd_base); - pgd = swapper_pg_dir + __pgd_offset(vaddr); + pgd = swapper_pg_dir + pgd_index(vaddr); pmd = pmd_offset(pgd, vaddr); pte = pte_offset_kernel(pmd, vaddr); pkmap_page_table = pte; diff -puN arch/i386/mm/pgtable.c~remove-__pgd_offset arch/i386/mm/pgtable.c --- 25/arch/i386/mm/pgtable.c~remove-__pgd_offset Tue Mar 4 15:02:32 2003 +++ 25-akpm/arch/i386/mm/pgtable.c Tue Mar 4 15:02:32 2003 @@ -64,7 +64,7 @@ static void set_pte_pfn(unsigned long va pmd_t *pmd; pte_t *pte; - pgd = swapper_pg_dir + __pgd_offset(vaddr); + pgd = swapper_pg_dir + pgd_index(vaddr); if (pgd_none(*pgd)) { BUG(); return; @@ -104,7 +104,7 @@ void set_pmd_pfn(unsigned long vaddr, un printk ("set_pmd_pfn: pfn misaligned\n"); return; /* BUG(); */ } - pgd = swapper_pg_dir + __pgd_offset(vaddr); + pgd = swapper_pg_dir + pgd_index(vaddr); if (pgd_none(*pgd)) { printk ("set_pmd_pfn: pgd_none\n"); return; /* BUG(); */ diff -puN arch/um/kernel/mem.c~remove-__pgd_offset arch/um/kernel/mem.c --- 25/arch/um/kernel/mem.c~remove-__pgd_offset Tue Mar 4 15:02:32 2003 +++ 25-akpm/arch/um/kernel/mem.c Tue Mar 4 15:02:32 2003 @@ -154,7 +154,7 @@ static void __init fixrange_init(unsigne unsigned long vaddr; vaddr = start; - i = __pgd_offset(vaddr); + i = pgd_index(vaddr); j = __pmd_offset(vaddr); pgd = pgd_base + i; @@ -257,7 +257,7 @@ static void init_highmem(void) vaddr = PKMAP_BASE; fixrange_init(vaddr, vaddr + PAGE_SIZE*LAST_PKMAP, swapper_pg_dir); - pgd = swapper_pg_dir + __pgd_offset(vaddr); + pgd = swapper_pg_dir + pgd_index(vaddr); pmd = pmd_offset(pgd, vaddr); pte = pte_offset_kernel(pmd, vaddr); pkmap_page_table = pte; diff -puN include/asm-alpha/pgtable.h~remove-__pgd_offset include/asm-alpha/pgtable.h --- 25/include/asm-alpha/pgtable.h~remove-__pgd_offset Tue Mar 4 15:02:32 2003 +++ 25-akpm/include/asm-alpha/pgtable.h Tue Mar 4 15:02:32 2003 @@ -273,7 +273,6 @@ extern inline pte_t pte_mkyoung(pte_t pt /* to find an entry in a page-table-directory. */ #define pgd_index(address) ((address >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1)) -#define __pgd_offset(address) pgd_index(address) #define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address)) /* Find an entry in the second-level page table.. */ diff -puN include/asm-arm/pgtable.h~remove-__pgd_offset include/asm-arm/pgtable.h --- 25/include/asm-arm/pgtable.h~remove-__pgd_offset Tue Mar 4 15:02:32 2003 +++ 25-akpm/include/asm-arm/pgtable.h Tue Mar 4 15:02:32 2003 @@ -116,7 +116,6 @@ extern struct page *empty_zero_page; /* to find an entry in a page-table-directory */ #define pgd_index(addr) ((addr) >> PGDIR_SHIFT) -#define __pgd_offset(addr) pgd_index(addr) #define pgd_offset(mm, addr) ((mm)->pgd+pgd_index(addr)) diff -puN include/asm-i386/pgtable.h~remove-__pgd_offset include/asm-i386/pgtable.h --- 25/include/asm-i386/pgtable.h~remove-__pgd_offset Tue Mar 4 15:02:32 2003 +++ 25-akpm/include/asm-i386/pgtable.h Tue Mar 4 15:02:32 2003 @@ -238,8 +238,6 @@ static inline pte_t pte_modify(pte_t pte /* to find an entry in a page-table-directory. */ #define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) -#define __pgd_offset(address) pgd_index(address) - #define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address)) /* to find an entry in a kernel page-table-directory */ diff -puN include/asm-sh/pgtable.h~remove-__pgd_offset include/asm-sh/pgtable.h --- 25/include/asm-sh/pgtable.h~remove-__pgd_offset Tue Mar 4 15:02:32 2003 +++ 25-akpm/include/asm-sh/pgtable.h Tue Mar 4 15:02:32 2003 @@ -274,7 +274,6 @@ static inline pte_t pte_modify(pte_t pte /* to find an entry in a page-table-directory. */ #define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) -#define __pgd_offset(address) pgd_index(address) #define pgd_offset(mm, address) ((mm)->pgd+pgd_index(address)) /* to find an entry in a kernel page-table-directory */ diff -puN include/asm-um/pgtable.h~remove-__pgd_offset include/asm-um/pgtable.h --- 25/include/asm-um/pgtable.h~remove-__pgd_offset Tue Mar 4 15:02:32 2003 +++ 25-akpm/include/asm-um/pgtable.h Tue Mar 4 15:02:32 2003 @@ -357,7 +357,6 @@ static inline pte_t pte_modify(pte_t pte /* to find an entry in a page-table-directory. */ #define pgd_index(address) ((address >> PGDIR_SHIFT) & (PTRS_PER_PGD-1)) -#define __pgd_offset(address) pgd_index(address) /* to find an entry in a page-table-directory */ #define pgd_offset(mm, address) \ diff -puN -L linux-2.5.63-clean/arch/alpha/mm/fault.c /dev/null /dev/null diff -puN -L linux-2.5.63-clean/arch/arm/mm/fault-common.c /dev/null /dev/null diff -puN -L linux-2.5.63-clean/arch/i386/mm/fault.c /dev/null /dev/null diff -puN -L linux-2.5.63-clean/arch/i386/mm/init.c /dev/null /dev/null diff -puN -L linux-2.5.63-clean/arch/i386/mm/pgtable.c /dev/null /dev/null diff -puN -L linux-2.5.63-clean/arch/um/kernel/mem.c /dev/null /dev/null diff -puN -L linux-2.5.63-clean/include/asm-alpha/pgtable.h /dev/null /dev/null diff -puN -L linux-2.5.63-clean/include/asm-arm/pgtable.h /dev/null /dev/null diff -puN -L linux-2.5.63-clean/include/asm-i386/pgtable.h /dev/null /dev/null diff -puN -L linux-2.5.63-clean/include/asm-sh/pgtable.h /dev/null /dev/null diff -puN -L linux-2.5.63-clean/include/asm-um/pgtable.h /dev/null /dev/null _