aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2006-12-25 05:28:54 -0500
committerPaul Mundt <lethal@linux-sh.org>2007-02-12 20:54:45 -0500
commitea9af69481730e3d712104dfd549ba6c8ddd29f1 (patch)
treeb6b0369a186f3df1b8061791c1cbc2e7fd161104 /arch/sh
parent11c1965687b0a472add948d4240dfe65a2fcb298 (diff)
sh: Local TLB flushing variants for SMP prep.
Rename the existing flush routines to local_ variants for use by the IPI-backed global flush routines on SMP. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh')
-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
7 files changed, 21 insertions, 29 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