Skip to content

Commit

Permalink
[PATCH] ARM SMP: TLB implementations only affect local CPU
Browse files Browse the repository at this point in the history
The existing TLB flush implementations only have an effect on
the local CPU.  Prefix them with local_.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Russell King authored and Russell King committed Jun 28, 2005
2 parents 99f95e5 + 8b22c24 commit 603fff5
Showing 1 changed file with 22 additions and 6 deletions.
28 changes: 22 additions & 6 deletions include/asm-arm/tlbflush.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -253,7 +253,7 @@ static inline void flush_tlb_all(void)
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);
Expand Down Expand Up @@ -282,7 +282,7 @@ static inline void flush_tlb_mm(struct mm_struct *mm)
}

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;
Expand Down Expand Up @@ -313,7 +313,7 @@ flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
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;
Expand Down Expand Up @@ -384,8 +384,24 @@ static inline void clean_pmd_entry(pmd_t *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
Expand Down

0 comments on commit 603fff5

Please sign in to comment.