diff options
Diffstat (limited to 'arch/arm/include/asm/tlb.h')
| -rw-r--r-- | arch/arm/include/asm/tlb.h | 10 | 
1 files changed, 9 insertions, 1 deletions
diff --git a/arch/arm/include/asm/tlb.h b/arch/arm/include/asm/tlb.h index 5d3ed7e3856..314d4664eae 100644 --- a/arch/arm/include/asm/tlb.h +++ b/arch/arm/include/asm/tlb.h @@ -198,7 +198,15 @@ static inline void __pte_free_tlb(struct mmu_gather *tlb, pgtable_t pte,  	unsigned long addr)  {  	pgtable_page_dtor(pte); -	tlb_add_flush(tlb, addr); + +	/* +	 * With the classic ARM MMU, a pte page has two corresponding pmd +	 * entries, each covering 1MB. +	 */ +	addr &= PMD_MASK; +	tlb_add_flush(tlb, addr + SZ_1M - PAGE_SIZE); +	tlb_add_flush(tlb, addr + SZ_1M); +  	tlb_remove_page(tlb, pte);  }  |