Simplify pte_offset_map() on 32 bits
Subsystems (3)
RFC 1/1 Simplify pte_offset_map() on 32 bits
Looking its implementation, I'm wondering why this macro and its sister "pte_offset_map_nested()" are so complex.
I changed their implementations as the following patch shows and my tiny 32 bits machine still boot fine.
Code size is a little bit decreased:
vmlinux => vmlinux~patched text: 3045700 3044664 -1036 0% data: 155756 155756 0 0% bss: 2269216 2269216 0 0% total: 5470672 5469636 -1036 0%
Could anybody have a look and tell me if I'm missing something ?
Thanks,
Franck
-- >8 --
include/asm-mips/pgtable-32.h +3 -4
@@ -143,6 +143,7 @@ pfn_pte(unsigned long pfn, pgprot_t prot)#define __pgd_offset (address) pgd_index(address)#define __pud_offset (address) (((address) >> PUD_SHIFT) & (PTRS_PER_PUD-1))#define __pmd_offset (address) (((address) >> PMD_SHIFT) & (PTRS_PER_PMD-1)) +#define __pte_offset (address) (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE-1))/* to find an entry in a kernel page-table-directory */ #define pgd_offset_k (address) pgd_offset(&init_mm, address)
@@ -153,17 +154,15 @@ pfn_pte(unsigned long pfn, pgprot_t prot)#define pgd_offset (mm,addr) ((mm)->pgd + pgd_index(addr))/* Find an entry in the third-level page table.. */ -#define __pte_offset (address) \ - (((address) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))#define pte_offset (dir, address) \ ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address))#define pte_offset_kernel (dir, address) \ ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address))#define pte_offset_map (dir, address) \ - ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address)) + ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address))#define pte_offset_map_nested (dir, address) \ - ((pte_t *)page_address(pmd_page(*(dir))) + __pte_offset(address)) + ((pte_t *) pmd_page_vaddr(*(dir)) + __pte_offset(address))#define pte_unmap (pte) ((void)(pte))#define pte_unmap_nested (pte) ((void)(pte))