aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm64/mm/mmu.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm64/mm/mmu.c')
-rw-r--r--arch/arm64/mm/mmu.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
index f557ebbe7013..f8dc7e8fce6f 100644
--- a/arch/arm64/mm/mmu.c
+++ b/arch/arm64/mm/mmu.c
@@ -203,10 +203,18 @@ static void __init alloc_init_pmd(pud_t *pud, unsigned long addr,
203 do { 203 do {
204 next = pmd_addr_end(addr, end); 204 next = pmd_addr_end(addr, end);
205 /* try section mapping first */ 205 /* try section mapping first */
206 if (((addr | next | phys) & ~SECTION_MASK) == 0) 206 if (((addr | next | phys) & ~SECTION_MASK) == 0) {
207 pmd_t old_pmd =*pmd;
207 set_pmd(pmd, __pmd(phys | prot_sect_kernel)); 208 set_pmd(pmd, __pmd(phys | prot_sect_kernel));
208 else 209 /*
210 * Check for previous table entries created during
211 * boot (__create_page_tables) and flush them.
212 */
213 if (!pmd_none(old_pmd))
214 flush_tlb_all();
215 } else {
209 alloc_init_pte(pmd, addr, next, __phys_to_pfn(phys)); 216 alloc_init_pte(pmd, addr, next, __phys_to_pfn(phys));
217 }
210 phys += next - addr; 218 phys += next - addr;
211 } while (pmd++, addr = next, addr != end); 219 } while (pmd++, addr = next, addr != end);
212} 220}