From: Russell King Date: Tue, 28 Jun 2005 12:40:39 +0000 (+0100) Subject: [PATCH] ARM SMP: TLB implementations only affect local CPU X-Git-Tag: v2.6.13-rc2~63^2~10^2~3 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=603fff54420a0ccc4c3b48bfef43896fb4e33161;p=linux-2.6 [PATCH] ARM SMP: TLB implementations only affect local CPU The existing TLB flush implementations only have an effect on the local CPU. Prefix them with local_. Signed-off-by: Russell King --- 603fff54420a0ccc4c3b48bfef43896fb4e33161 diff --cc include/asm-arm/tlbflush.h index 8a864b1185,8a864b1185..9387a5e1ff --- a/include/asm-arm/tlbflush.h +++ b/include/asm-arm/tlbflush.h @@@ -235,7 -235,7 +235,7 @@@ extern struct cpu_tlb_fns cpu_tlb #define tlb_flag(f) ((always_tlb_flags & (f)) || (__tlb_flag & possible_tlb_flags & (f))) --static inline void flush_tlb_all(void) ++static inline void local_flush_tlb_all(void) { const int zero = 0; const unsigned int __tlb_flag = __cpu_tlb_flags; @@@ -253,7 -253,7 +253,7 @@@ asm("mcr%? p15, 0, %0, c8, c5, 0" : : "r" (zero)); } --static inline void flush_tlb_mm(struct mm_struct *mm) ++static inline void local_flush_tlb_mm(struct mm_struct *mm) { const int zero = 0; const int asid = ASID(mm); @@@ -282,7 -282,7 +282,7 @@@ } static inline void --flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr) ++local_flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr) { const int zero = 0; const unsigned int __tlb_flag = __cpu_tlb_flags; @@@ -313,7 -313,7 +313,7 @@@ asm("mcr%? p15, 0, %0, c8, c5, 1" : : "r" (uaddr)); } --static inline void flush_tlb_kernel_page(unsigned long kaddr) ++static inline void local_flush_tlb_kernel_page(unsigned long kaddr) { const int zero = 0; const unsigned int __tlb_flag = __cpu_tlb_flags; @@@ -384,8 -384,8 +384,24 @@@ static inline void clean_pmd_entry(pmd_ /* * Convert calls to our calling convention. */ --#define flush_tlb_range(vma,start,end) __cpu_flush_user_tlb_range(start,end,vma) --#define flush_tlb_kernel_range(s,e) __cpu_flush_kern_tlb_range(s,e) ++#define local_flush_tlb_range(vma,start,end) __cpu_flush_user_tlb_range(start,end,vma) ++#define local_flush_tlb_kernel_range(s,e) __cpu_flush_kern_tlb_range(s,e) ++ ++#ifndef CONFIG_SMP ++#define flush_tlb_all local_flush_tlb_all ++#define flush_tlb_mm local_flush_tlb_mm ++#define flush_tlb_page local_flush_tlb_page ++#define flush_tlb_kernel_page local_flush_tlb_kernel_page ++#define flush_tlb_range local_flush_tlb_range ++#define flush_tlb_kernel_range local_flush_tlb_kernel_range ++#else ++extern void flush_tlb_all(void); ++extern void flush_tlb_mm(struct mm_struct *mm); ++extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr); ++extern void flush_tlb_kernel_page(unsigned long kaddr); ++extern void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end); ++extern void flush_tlb_kernel_range(unsigned long start, unsigned long end); ++#endif /* * if PG_dcache_dirty is set for the page, we need to ensure that any