aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/sh/kernel/sh_ksyms.c1
-rw-r--r--arch/sh/mm/init.c2
-rw-r--r--arch/sh/mm/pg-sh4.c4
-rw-r--r--arch/sh/mm/tlb-flush.c20
-rw-r--r--arch/sh/mm/tlb-nommu.c19
-rw-r--r--arch/sh/mm/tlb-sh3.c2
-rw-r--r--arch/sh/mm/tlb-sh4.c2
-rw-r--r--include/asm-sh/tlbflush.h38
8 files changed, 52 insertions, 36 deletions
diff --git a/arch/sh/kernel/sh_ksyms.c b/arch/sh/kernel/sh_ksyms.c
index e6106239a0fe..fe1b276c97c6 100644
--- a/arch/sh/kernel/sh_ksyms.c
+++ b/arch/sh/kernel/sh_ksyms.c
@@ -105,7 +105,6 @@ EXPORT_SYMBOL(__flush_purge_region);
105EXPORT_SYMBOL(clear_user_page); 105EXPORT_SYMBOL(clear_user_page);
106#endif 106#endif
107 107
108EXPORT_SYMBOL(flush_tlb_page);
109EXPORT_SYMBOL(__down_trylock); 108EXPORT_SYMBOL(__down_trylock);
110 109
111#ifdef CONFIG_SMP 110#ifdef CONFIG_SMP
diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c
index d172065182fb..ae957a932375 100644
--- a/arch/sh/mm/init.c
+++ b/arch/sh/mm/init.c
@@ -106,7 +106,7 @@ static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot)
106 106
107 set_pte(pte, pfn_pte(phys >> PAGE_SHIFT, prot)); 107 set_pte(pte, pfn_pte(phys >> PAGE_SHIFT, prot));
108 108
109 __flush_tlb_page(get_asid(), addr); 109 flush_tlb_one(get_asid(), addr);
110} 110}
111 111
112/* 112/*
diff --git a/arch/sh/mm/pg-sh4.c b/arch/sh/mm/pg-sh4.c
index b529d809dd4b..969efeceb928 100644
--- a/arch/sh/mm/pg-sh4.c
+++ b/arch/sh/mm/pg-sh4.c
@@ -39,7 +39,7 @@ void clear_user_page(void *to, unsigned long address, struct page *page)
39 mutex_lock(&p3map_mutex[(address & CACHE_ALIAS)>>12]); 39 mutex_lock(&p3map_mutex[(address & CACHE_ALIAS)>>12]);
40 set_pte(pte, entry); 40 set_pte(pte, entry);
41 local_irq_save(flags); 41 local_irq_save(flags);
42 __flush_tlb_page(get_asid(), p3_addr); 42 flush_tlb_one(get_asid(), p3_addr);
43 local_irq_restore(flags); 43 local_irq_restore(flags);
44 update_mmu_cache(NULL, p3_addr, entry); 44 update_mmu_cache(NULL, p3_addr, entry);
45 __clear_user_page((void *)p3_addr, to); 45 __clear_user_page((void *)p3_addr, to);
@@ -74,7 +74,7 @@ void copy_user_page(void *to, void *from, unsigned long address,
74 mutex_lock(&p3map_mutex[(address & CACHE_ALIAS)>>12]); 74 mutex_lock(&p3map_mutex[(address & CACHE_ALIAS)>>12]);
75 set_pte(pte, entry); 75 set_pte(pte, entry);
76 local_irq_save(flags); 76 local_irq_save(flags);
77 __flush_tlb_page(get_asid(), p3_addr); 77 flush_tlb_one(get_asid(), p3_addr);
78 local_irq_restore(flags); 78 local_irq_restore(flags);
79 update_mmu_cache(NULL, p3_addr, entry); 79 update_mmu_cache(NULL, p3_addr, entry);
80 __copy_user_page((void *)p3_addr, from, to); 80 __copy_user_page((void *)p3_addr, from, to);
diff --git a/arch/sh/mm/tlb-flush.c b/arch/sh/mm/tlb-flush.c
index b829c17c1d17..dcaf98e82be8 100644
--- a/arch/sh/mm/tlb-flush.c
+++ b/arch/sh/mm/tlb-flush.c
@@ -14,7 +14,7 @@
14#include <asm/tlbflush.h> 14#include <asm/tlbflush.h>
15#include <asm/cacheflush.h> 15#include <asm/cacheflush.h>
16 16
17void flush_tlb_page(struct vm_area_struct *vma, unsigned long page) 17void local_flush_tlb_page(struct vm_area_struct *vma, unsigned long page)
18{ 18{
19 unsigned int cpu = smp_processor_id(); 19 unsigned int cpu = smp_processor_id();
20 20
@@ -31,15 +31,15 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long page)
31 saved_asid = get_asid(); 31 saved_asid = get_asid();
32 set_asid(asid); 32 set_asid(asid);
33 } 33 }
34 __flush_tlb_page(asid, page); 34 flush_tlb_one(asid, page);
35 if (saved_asid != MMU_NO_ASID) 35 if (saved_asid != MMU_NO_ASID)
36 set_asid(saved_asid); 36 set_asid(saved_asid);
37 local_irq_restore(flags); 37 local_irq_restore(flags);
38 } 38 }
39} 39}
40 40
41void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, 41void local_flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
42 unsigned long end) 42 unsigned long end)
43{ 43{
44 struct mm_struct *mm = vma->vm_mm; 44 struct mm_struct *mm = vma->vm_mm;
45 unsigned int cpu = smp_processor_id(); 45 unsigned int cpu = smp_processor_id();
@@ -67,7 +67,7 @@ void flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
67 set_asid(asid); 67 set_asid(asid);
68 } 68 }
69 while (start < end) { 69 while (start < end) {
70 __flush_tlb_page(asid, start); 70 flush_tlb_one(asid, start);
71 start += PAGE_SIZE; 71 start += PAGE_SIZE;
72 } 72 }
73 if (saved_asid != MMU_NO_ASID) 73 if (saved_asid != MMU_NO_ASID)
@@ -77,7 +77,7 @@ void flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
77 } 77 }
78} 78}
79 79
80void flush_tlb_kernel_range(unsigned long start, unsigned long end) 80void local_flush_tlb_kernel_range(unsigned long start, unsigned long end)
81{ 81{
82 unsigned int cpu = smp_processor_id(); 82 unsigned int cpu = smp_processor_id();
83 unsigned long flags; 83 unsigned long flags;
@@ -86,7 +86,7 @@ void flush_tlb_kernel_range(unsigned long start, unsigned long end)
86 local_irq_save(flags); 86 local_irq_save(flags);
87 size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT; 87 size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
88 if (size > (MMU_NTLB_ENTRIES/4)) { /* Too many TLB to flush */ 88 if (size > (MMU_NTLB_ENTRIES/4)) { /* Too many TLB to flush */
89 flush_tlb_all(); 89 local_flush_tlb_all();
90 } else { 90 } else {
91 unsigned long asid; 91 unsigned long asid;
92 unsigned long saved_asid = get_asid(); 92 unsigned long saved_asid = get_asid();
@@ -97,7 +97,7 @@ void flush_tlb_kernel_range(unsigned long start, unsigned long end)
97 end &= PAGE_MASK; 97 end &= PAGE_MASK;
98 set_asid(asid); 98 set_asid(asid);
99 while (start < end) { 99 while (start < end) {
100 __flush_tlb_page(asid, start); 100 flush_tlb_one(asid, start);
101 start += PAGE_SIZE; 101 start += PAGE_SIZE;
102 } 102 }
103 set_asid(saved_asid); 103 set_asid(saved_asid);
@@ -105,7 +105,7 @@ void flush_tlb_kernel_range(unsigned long start, unsigned long end)
105 local_irq_restore(flags); 105 local_irq_restore(flags);
106} 106}
107 107
108void flush_tlb_mm(struct mm_struct *mm) 108void local_flush_tlb_mm(struct mm_struct *mm)
109{ 109{
110 unsigned int cpu = smp_processor_id(); 110 unsigned int cpu = smp_processor_id();
111 111
@@ -122,7 +122,7 @@ void flush_tlb_mm(struct mm_struct *mm)
122 } 122 }
123} 123}
124 124
125void flush_tlb_all(void) 125void local_flush_tlb_all(void)
126{ 126{
127 unsigned long flags, status; 127 unsigned long flags, status;
128 128
diff --git a/arch/sh/mm/tlb-nommu.c b/arch/sh/mm/tlb-nommu.c
index e55cfea01092..1ccca7c0532e 100644
--- a/arch/sh/mm/tlb-nommu.c
+++ b/arch/sh/mm/tlb-nommu.c
@@ -13,39 +13,33 @@
13/* 13/*
14 * Nothing too terribly exciting here .. 14 * Nothing too terribly exciting here ..
15 */ 15 */
16 16void local_flush_tlb_all(void)
17void flush_tlb(void)
18{
19 BUG();
20}
21
22void flush_tlb_all(void)
23{ 17{
24 BUG(); 18 BUG();
25} 19}
26 20
27void flush_tlb_mm(struct mm_struct *mm) 21void local_flush_tlb_mm(struct mm_struct *mm)
28{ 22{
29 BUG(); 23 BUG();
30} 24}
31 25
32void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, 26void local_flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
33 unsigned long end) 27 unsigned long end)
34{ 28{
35 BUG(); 29 BUG();
36} 30}
37 31
38void flush_tlb_page(struct vm_area_struct *vma, unsigned long page) 32void local_flush_tlb_page(struct vm_area_struct *vma, unsigned long page)
39{ 33{
40 BUG(); 34 BUG();
41} 35}
42 36
43void __flush_tlb_page(unsigned long asid, unsigned long page) 37void local_flush_tlb_one(unsigned long asid, unsigned long page)
44{ 38{
45 BUG(); 39 BUG();
46} 40}
47 41
48void flush_tlb_kernel_range(unsigned long start, unsigned long end) 42void local_flush_tlb_kernel_range(unsigned long start, unsigned long end)
49{ 43{
50 BUG(); 44 BUG();
51} 45}
@@ -55,4 +49,3 @@ void update_mmu_cache(struct vm_area_struct * vma,
55{ 49{
56 BUG(); 50 BUG();
57} 51}
58
diff --git a/arch/sh/mm/tlb-sh3.c b/arch/sh/mm/tlb-sh3.c
index 598c998dba5c..e5e76eb7ee09 100644
--- a/arch/sh/mm/tlb-sh3.c
+++ b/arch/sh/mm/tlb-sh3.c
@@ -12,7 +12,7 @@
12#include <asm/system.h> 12#include <asm/system.h>
13#include <asm/mmu_context.h> 13#include <asm/mmu_context.h>
14 14
15void __flush_tlb_page(unsigned long asid, unsigned long page) 15void local_flush_tlb_one(unsigned long asid, unsigned long page)
16{ 16{
17 unsigned long addr, data; 17 unsigned long addr, data;
18 int i, ways = MMU_NTLB_WAYS; 18 int i, ways = MMU_NTLB_WAYS;
diff --git a/arch/sh/mm/tlb-sh4.c b/arch/sh/mm/tlb-sh4.c
index 758d8dec622b..221e7095473d 100644
--- a/arch/sh/mm/tlb-sh4.c
+++ b/arch/sh/mm/tlb-sh4.c
@@ -12,7 +12,7 @@
12#include <asm/system.h> 12#include <asm/system.h>
13#include <asm/mmu_context.h> 13#include <asm/mmu_context.h>
14 14
15void __flush_tlb_page(unsigned long asid, unsigned long page) 15void local_flush_tlb_one(unsigned long asid, unsigned long page)
16{ 16{
17 unsigned long addr, data; 17 unsigned long addr, data;
18 18
diff --git a/include/asm-sh/tlbflush.h b/include/asm-sh/tlbflush.h
index 28c073b0fbab..455fb8da441e 100644
--- a/include/asm-sh/tlbflush.h
+++ b/include/asm-sh/tlbflush.h
@@ -4,7 +4,6 @@
4/* 4/*
5 * TLB flushing: 5 * TLB flushing:
6 * 6 *
7 * - flush_tlb() flushes the current mm struct TLBs
8 * - flush_tlb_all() flushes all processes TLBs 7 * - flush_tlb_all() flushes all processes TLBs
9 * - flush_tlb_mm(mm) flushes the specified mm context TLB's 8 * - flush_tlb_mm(mm) flushes the specified mm context TLB's
10 * - flush_tlb_page(vma, vmaddr) flushes one page 9 * - flush_tlb_page(vma, vmaddr) flushes one page
@@ -12,20 +11,45 @@
12 * - flush_tlb_kernel_range(start, end) flushes a range of kernel pages 11 * - flush_tlb_kernel_range(start, end) flushes a range of kernel pages
13 * - flush_tlb_pgtables(mm, start, end) flushes a range of page tables 12 * - flush_tlb_pgtables(mm, start, end) flushes a range of page tables
14 */ 13 */
14extern void local_flush_tlb_all(void);
15extern void local_flush_tlb_mm(struct mm_struct *mm);
16extern void local_flush_tlb_range(struct vm_area_struct *vma,
17 unsigned long start,
18 unsigned long end);
19extern void local_flush_tlb_page(struct vm_area_struct *vma,
20 unsigned long page);
21extern void local_flush_tlb_kernel_range(unsigned long start,
22 unsigned long end);
23extern void local_flush_tlb_one(unsigned long asid, unsigned long page);
24
25#ifdef CONFIG_SMP
15 26
16extern void flush_tlb(void);
17extern void flush_tlb_all(void); 27extern void flush_tlb_all(void);
18extern void flush_tlb_mm(struct mm_struct *mm); 28extern void flush_tlb_mm(struct mm_struct *mm);
19extern void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, 29extern void flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
20 unsigned long end); 30 unsigned long end);
21extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long page); 31extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long page);
22extern void __flush_tlb_page(unsigned long asid, unsigned long page); 32extern void flush_tlb_kernel_range(unsigned long start, unsigned long end);
33extern void flush_tlb_one(unsigned long asid, unsigned long page);
34
35#else
36
37#define flush_tlb_all() local_flush_tlb_all()
38#define flush_tlb_mm(mm) local_flush_tlb_mm(mm)
39#define flush_tlb_page(vma, page) local_flush_tlb_page(vma, page)
40#define flush_tlb_one(asid, page) local_flush_tlb_one(asid, page)
41
42#define flush_tlb_range(vma, start, end) \
43 local_flush_tlb_range(vma, start, end)
44
45#define flush_tlb_kernel_range(start, end) \
46 local_flush_tlb_kernel_range(start, end)
47
48#endif /* CONFIG_SMP */
23 49
24static inline void flush_tlb_pgtables(struct mm_struct *mm, 50static inline void flush_tlb_pgtables(struct mm_struct *mm,
25 unsigned long start, unsigned long end) 51 unsigned long start, unsigned long end)
26{ /* Nothing to do */ 52{
53 /* Nothing to do */
27} 54}
28
29extern void flush_tlb_kernel_range(unsigned long start, unsigned long end);
30
31#endif /* __ASM_SH_TLBFLUSH_H */ 55#endif /* __ASM_SH_TLBFLUSH_H */