diff options
Diffstat (limited to 'arch/powerpc/include/asm/tlb.h')
| -rw-r--r-- | arch/powerpc/include/asm/tlb.h | 16 | 
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/tlb.h b/arch/powerpc/include/asm/tlb.h index 99e1397b71da..609557569f65 100644 --- a/arch/powerpc/include/asm/tlb.h +++ b/arch/powerpc/include/asm/tlb.h @@ -28,6 +28,7 @@  #define tlb_start_vma(tlb, vma)	do { } while (0)  #define tlb_end_vma(tlb, vma)	do { } while (0)  #define __tlb_remove_tlb_entry	__tlb_remove_tlb_entry +#define tlb_remove_check_page_size_change tlb_remove_check_page_size_change  extern void tlb_flush(struct mmu_gather *tlb); @@ -46,6 +47,21 @@ static inline void __tlb_remove_tlb_entry(struct mmu_gather *tlb, pte_t *ptep,  #endif  } +static inline void tlb_remove_check_page_size_change(struct mmu_gather *tlb, +						     unsigned int page_size) +{ +	if (!tlb->page_size) +		tlb->page_size = page_size; +	else if (tlb->page_size != page_size) { +		tlb_flush_mmu(tlb); +		/* +		 * update the page size after flush for the new +		 * mmu_gather. +		 */ +		tlb->page_size = page_size; +	} +} +  #ifdef CONFIG_SMP  static inline int mm_is_core_local(struct mm_struct *mm)  {  |