[PATCH] ARM: Use top_pmd for V6 copy/clear user_page

Remove needless page table walking for v6 page operations.

Signed-off-by: Russell King <rmk@arm.linux.org.uk>

+6 -22
+6 -22
arch/arm/mm/copypage-v6.c
··· 26 26 #define to_address (0xffffc000) 27 27 #define to_pgprot PAGE_KERNEL 28 28 29 - static pte_t *from_pte; 30 - static pte_t *to_pte; 29 + #define TOP_PTE(x) pte_offset_kernel(top_pmd, x) 30 + 31 31 static DEFINE_SPINLOCK(v6_lock); 32 32 33 33 #define DCACHE_COLOUR(vaddr) ((vaddr & (SHMLBA - 1)) >> PAGE_SHIFT) ··· 74 74 */ 75 75 spin_lock(&v6_lock); 76 76 77 - set_pte(from_pte + offset, pfn_pte(__pa(kfrom) >> PAGE_SHIFT, from_pgprot)); 78 - set_pte(to_pte + offset, pfn_pte(__pa(kto) >> PAGE_SHIFT, to_pgprot)); 77 + set_pte(TOP_PTE(from_address) + offset, pfn_pte(__pa(kfrom) >> PAGE_SHIFT, from_pgprot)); 78 + set_pte(TOP_PTE(to_address) + offset, pfn_pte(__pa(kto) >> PAGE_SHIFT, to_pgprot)); 79 79 80 80 from = from_address + (offset << PAGE_SHIFT); 81 81 to = to_address + (offset << PAGE_SHIFT); ··· 114 114 */ 115 115 spin_lock(&v6_lock); 116 116 117 - set_pte(to_pte + offset, pfn_pte(__pa(kaddr) >> PAGE_SHIFT, to_pgprot)); 117 + set_pte(TOP_PTE(to_address) + offset, pfn_pte(__pa(kaddr) >> PAGE_SHIFT, to_pgprot)); 118 118 flush_tlb_kernel_page(to); 119 119 clear_page((void *)to); 120 120 ··· 129 129 static int __init v6_userpage_init(void) 130 130 { 131 131 if (cache_is_vipt_aliasing()) { 132 - pgd_t *pgd; 133 - pmd_t *pmd; 134 - 135 - pgd = pgd_offset_k(from_address); 136 - pmd = pmd_alloc(&init_mm, pgd, from_address); 137 - if (!pmd) 138 - BUG(); 139 - from_pte = pte_alloc_kernel(&init_mm, pmd, from_address); 140 - if (!from_pte) 141 - BUG(); 142 - 143 - to_pte = pte_alloc_kernel(&init_mm, pmd, to_address); 144 - if (!to_pte) 145 - BUG(); 146 - 147 132 cpu_user.cpu_clear_user_page = v6_clear_user_page_aliasing; 148 133 cpu_user.cpu_copy_user_page = v6_copy_user_page_aliasing; 149 134 } ··· 136 151 return 0; 137 152 } 138 153 139 - __initcall(v6_userpage_init); 140 - 154 + core_initcall(v6_userpage_init);