diff options
author | Paul Mundt <lethal@linux-sh.org> | 2006-12-25 05:28:54 -0500 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2007-02-12 20:54:45 -0500 |
commit | ea9af69481730e3d712104dfd549ba6c8ddd29f1 (patch) | |
tree | b6b0369a186f3df1b8061791c1cbc2e7fd161104 /arch/sh | |
parent | 11c1965687b0a472add948d4240dfe65a2fcb298 (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.c | 1 | ||||
-rw-r--r-- | arch/sh/mm/init.c | 2 | ||||
-rw-r--r-- | arch/sh/mm/pg-sh4.c | 4 | ||||
-rw-r--r-- | arch/sh/mm/tlb-flush.c | 20 | ||||
-rw-r--r-- | arch/sh/mm/tlb-nommu.c | 19 | ||||
-rw-r--r-- | arch/sh/mm/tlb-sh3.c | 2 | ||||
-rw-r--r-- | arch/sh/mm/tlb-sh4.c | 2 |
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); | |||
105 | EXPORT_SYMBOL(clear_user_page); | 105 | EXPORT_SYMBOL(clear_user_page); |
106 | #endif | 106 | #endif |
107 | 107 | ||
108 | EXPORT_SYMBOL(flush_tlb_page); | ||
109 | EXPORT_SYMBOL(__down_trylock); | 108 | EXPORT_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 | ||
17 | void flush_tlb_page(struct vm_area_struct *vma, unsigned long page) | 17 | void 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 | ||
41 | void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, | 41 | void 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 | ||
80 | void flush_tlb_kernel_range(unsigned long start, unsigned long end) | 80 | void 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 | ||
108 | void flush_tlb_mm(struct mm_struct *mm) | 108 | void 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 | ||
125 | void flush_tlb_all(void) | 125 | void 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 | 16 | void local_flush_tlb_all(void) | |
17 | void flush_tlb(void) | ||
18 | { | ||
19 | BUG(); | ||
20 | } | ||
21 | |||
22 | void flush_tlb_all(void) | ||
23 | { | 17 | { |
24 | BUG(); | 18 | BUG(); |
25 | } | 19 | } |
26 | 20 | ||
27 | void flush_tlb_mm(struct mm_struct *mm) | 21 | void local_flush_tlb_mm(struct mm_struct *mm) |
28 | { | 22 | { |
29 | BUG(); | 23 | BUG(); |
30 | } | 24 | } |
31 | 25 | ||
32 | void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, | 26 | void 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 | ||
38 | void flush_tlb_page(struct vm_area_struct *vma, unsigned long page) | 32 | void local_flush_tlb_page(struct vm_area_struct *vma, unsigned long page) |
39 | { | 33 | { |
40 | BUG(); | 34 | BUG(); |
41 | } | 35 | } |
42 | 36 | ||
43 | void __flush_tlb_page(unsigned long asid, unsigned long page) | 37 | void local_flush_tlb_one(unsigned long asid, unsigned long page) |
44 | { | 38 | { |
45 | BUG(); | 39 | BUG(); |
46 | } | 40 | } |
47 | 41 | ||
48 | void flush_tlb_kernel_range(unsigned long start, unsigned long end) | 42 | void 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 | ||
15 | void __flush_tlb_page(unsigned long asid, unsigned long page) | 15 | void 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 | ||
15 | void __flush_tlb_page(unsigned long asid, unsigned long page) | 15 | void local_flush_tlb_one(unsigned long asid, unsigned long page) |
16 | { | 16 | { |
17 | unsigned long addr, data; | 17 | unsigned long addr, data; |
18 | 18 | ||