diff options
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r-- | arch/arm/kernel/smp_tlb.c | 20 |
1 files changed, 5 insertions, 15 deletions
diff --git a/arch/arm/kernel/smp_tlb.c b/arch/arm/kernel/smp_tlb.c index 7dcb35285be7..02c5d2ce23bf 100644 --- a/arch/arm/kernel/smp_tlb.c +++ b/arch/arm/kernel/smp_tlb.c | |||
@@ -13,18 +13,6 @@ | |||
13 | #include <asm/smp_plat.h> | 13 | #include <asm/smp_plat.h> |
14 | #include <asm/tlbflush.h> | 14 | #include <asm/tlbflush.h> |
15 | 15 | ||
16 | static void on_each_cpu_mask(void (*func)(void *), void *info, int wait, | ||
17 | const struct cpumask *mask) | ||
18 | { | ||
19 | preempt_disable(); | ||
20 | |||
21 | smp_call_function_many(mask, func, info, wait); | ||
22 | if (cpumask_test_cpu(smp_processor_id(), mask)) | ||
23 | func(info); | ||
24 | |||
25 | preempt_enable(); | ||
26 | } | ||
27 | |||
28 | /**********************************************************************/ | 16 | /**********************************************************************/ |
29 | 17 | ||
30 | /* | 18 | /* |
@@ -87,7 +75,7 @@ void flush_tlb_all(void) | |||
87 | void flush_tlb_mm(struct mm_struct *mm) | 75 | void flush_tlb_mm(struct mm_struct *mm) |
88 | { | 76 | { |
89 | if (tlb_ops_need_broadcast()) | 77 | if (tlb_ops_need_broadcast()) |
90 | on_each_cpu_mask(ipi_flush_tlb_mm, mm, 1, mm_cpumask(mm)); | 78 | on_each_cpu_mask(mm_cpumask(mm), ipi_flush_tlb_mm, mm, 1); |
91 | else | 79 | else |
92 | local_flush_tlb_mm(mm); | 80 | local_flush_tlb_mm(mm); |
93 | } | 81 | } |
@@ -98,7 +86,8 @@ void flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr) | |||
98 | struct tlb_args ta; | 86 | struct tlb_args ta; |
99 | ta.ta_vma = vma; | 87 | ta.ta_vma = vma; |
100 | ta.ta_start = uaddr; | 88 | ta.ta_start = uaddr; |
101 | on_each_cpu_mask(ipi_flush_tlb_page, &ta, 1, mm_cpumask(vma->vm_mm)); | 89 | on_each_cpu_mask(mm_cpumask(vma->vm_mm), ipi_flush_tlb_page, |
90 | &ta, 1); | ||
102 | } else | 91 | } else |
103 | local_flush_tlb_page(vma, uaddr); | 92 | local_flush_tlb_page(vma, uaddr); |
104 | } | 93 | } |
@@ -121,7 +110,8 @@ void flush_tlb_range(struct vm_area_struct *vma, | |||
121 | ta.ta_vma = vma; | 110 | ta.ta_vma = vma; |
122 | ta.ta_start = start; | 111 | ta.ta_start = start; |
123 | ta.ta_end = end; | 112 | ta.ta_end = end; |
124 | on_each_cpu_mask(ipi_flush_tlb_range, &ta, 1, mm_cpumask(vma->vm_mm)); | 113 | on_each_cpu_mask(mm_cpumask(vma->vm_mm), ipi_flush_tlb_range, |
114 | &ta, 1); | ||
125 | } else | 115 | } else |
126 | local_flush_tlb_range(vma, start, end); | 116 | local_flush_tlb_range(vma, start, end); |
127 | } | 117 | } |