diff options
author | David Howells <dhowells@redhat.com> | 2010-10-27 12:28:49 -0400 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2010-10-27 12:28:49 -0400 |
commit | 492e675116003b99dfcf0fa70084027e86bc0161 (patch) | |
tree | c799a3c3f3226700e44dfe323f7c3f1764755049 /arch/mn10300/include/asm/tlbflush.h | |
parent | 8f19e3daf3fffee9e18a8812067a6a4b538ae6c8 (diff) |
MN10300: Rename __flush_tlb*() to local_flush_tlb*()
Rename __flush_tlb*() to local_flush_tlb*() as it's more appropriate, and ready
to differentiate local from global TLB flushes when SMP is introduced.
Whilst we're at it, get rid of __flush_tlb_global() and make
local_flush_tlb_page() take an mm_struct pointer rather than VMA pointer.
Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'arch/mn10300/include/asm/tlbflush.h')
-rw-r--r-- | arch/mn10300/include/asm/tlbflush.h | 56 |
1 files changed, 35 insertions, 21 deletions
diff --git a/arch/mn10300/include/asm/tlbflush.h b/arch/mn10300/include/asm/tlbflush.h index 1a7e29281c5d..5d54bf57e6c3 100644 --- a/arch/mn10300/include/asm/tlbflush.h +++ b/arch/mn10300/include/asm/tlbflush.h | |||
@@ -13,21 +13,37 @@ | |||
13 | 13 | ||
14 | #include <asm/processor.h> | 14 | #include <asm/processor.h> |
15 | 15 | ||
16 | #define __flush_tlb() \ | 16 | /** |
17 | do { \ | 17 | * local_flush_tlb - Flush the current MM's entries from the local CPU's TLBs |
18 | int w; \ | 18 | */ |
19 | __asm__ __volatile__ \ | 19 | static inline void local_flush_tlb(void) |
20 | (" mov %1,%0 \n" \ | 20 | { |
21 | " or %2,%0 \n" \ | 21 | int w; |
22 | " mov %0,%1 \n" \ | 22 | asm volatile( |
23 | : "=d"(w) \ | 23 | " mov %1,%0 \n" |
24 | : "m"(MMUCTR), "i"(MMUCTR_IIV|MMUCTR_DIV) \ | 24 | " or %2,%0 \n" |
25 | : "cc", "memory" \ | 25 | " mov %0,%1 \n" |
26 | ); \ | 26 | : "=d"(w) |
27 | } while (0) | 27 | : "m"(MMUCTR), "i"(MMUCTR_IIV|MMUCTR_DIV) |
28 | : "cc", "memory"); | ||
29 | } | ||
28 | 30 | ||
29 | #define __flush_tlb_all() __flush_tlb() | 31 | /** |
30 | #define __flush_tlb_one(addr) __flush_tlb() | 32 | * local_flush_tlb_all - Flush all entries from the local CPU's TLBs |
33 | */ | ||
34 | #define local_flush_tlb_all() local_flush_tlb() | ||
35 | |||
36 | /** | ||
37 | * local_flush_tlb_one - Flush one entry from the local CPU's TLBs | ||
38 | */ | ||
39 | #define local_flush_tlb_one(addr) local_flush_tlb() | ||
40 | |||
41 | /** | ||
42 | * local_flush_tlb_page - Flush a page's entry from the local CPU's TLBs | ||
43 | * @mm: The MM to flush for | ||
44 | * @addr: The address of the target page in RAM (not its page struct) | ||
45 | */ | ||
46 | extern void local_flush_tlb_page(struct mm_struct *mm, unsigned long addr); | ||
31 | 47 | ||
32 | 48 | ||
33 | /* | 49 | /* |
@@ -43,14 +59,14 @@ do { \ | |||
43 | #define flush_tlb_all() \ | 59 | #define flush_tlb_all() \ |
44 | do { \ | 60 | do { \ |
45 | preempt_disable(); \ | 61 | preempt_disable(); \ |
46 | __flush_tlb_all(); \ | 62 | local_flush_tlb_all(); \ |
47 | preempt_enable(); \ | 63 | preempt_enable(); \ |
48 | } while (0) | 64 | } while (0) |
49 | 65 | ||
50 | #define flush_tlb_mm(mm) \ | 66 | #define flush_tlb_mm(mm) \ |
51 | do { \ | 67 | do { \ |
52 | preempt_disable(); \ | 68 | preempt_disable(); \ |
53 | __flush_tlb_all(); \ | 69 | local_flush_tlb_all(); \ |
54 | preempt_enable(); \ | 70 | preempt_enable(); \ |
55 | } while (0) | 71 | } while (0) |
56 | 72 | ||
@@ -59,13 +75,13 @@ do { \ | |||
59 | unsigned long __s __attribute__((unused)) = (start); \ | 75 | unsigned long __s __attribute__((unused)) = (start); \ |
60 | unsigned long __e __attribute__((unused)) = (end); \ | 76 | unsigned long __e __attribute__((unused)) = (end); \ |
61 | preempt_disable(); \ | 77 | preempt_disable(); \ |
62 | __flush_tlb_all(); \ | 78 | local_flush_tlb_all(); \ |
63 | preempt_enable(); \ | 79 | preempt_enable(); \ |
64 | } while (0) | 80 | } while (0) |
65 | 81 | ||
82 | #define flush_tlb_page(vma, addr) local_flush_tlb_page((vma)->vm_mm, addr) | ||
83 | #define flush_tlb() flush_tlb_all() | ||
66 | 84 | ||
67 | #define __flush_tlb_global() flush_tlb_all() | ||
68 | #define flush_tlb() flush_tlb_all() | ||
69 | #define flush_tlb_kernel_range(start, end) \ | 85 | #define flush_tlb_kernel_range(start, end) \ |
70 | do { \ | 86 | do { \ |
71 | unsigned long __s __attribute__((unused)) = (start); \ | 87 | unsigned long __s __attribute__((unused)) = (start); \ |
@@ -73,8 +89,6 @@ do { \ | |||
73 | flush_tlb_all(); \ | 89 | flush_tlb_all(); \ |
74 | } while (0) | 90 | } while (0) |
75 | 91 | ||
76 | extern void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr); | ||
77 | |||
78 | #define flush_tlb_pgtables(mm, start, end) do {} while (0) | 92 | #define flush_tlb_pgtables(mm, start, end) do {} while (0) |
79 | 93 | ||
80 | #endif /* _ASM_TLBFLUSH_H */ | 94 | #endif /* _ASM_TLBFLUSH_H */ |