aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/tlb_64.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/tlb_64.c')
-rw-r--r--arch/x86/kernel/tlb_64.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/arch/x86/kernel/tlb_64.c b/arch/x86/kernel/tlb_64.c
index e64a32c48825..b8bed841ad67 100644
--- a/arch/x86/kernel/tlb_64.c
+++ b/arch/x86/kernel/tlb_64.c
@@ -15,8 +15,7 @@
15#include <asm/proto.h> 15#include <asm/proto.h>
16#include <asm/apicdef.h> 16#include <asm/apicdef.h>
17#include <asm/idle.h> 17#include <asm/idle.h>
18#include <asm/uv/uv_hub.h> 18#include <asm/uv/uv.h>
19#include <asm/uv/uv_bau.h>
20 19
21DEFINE_PER_CPU_SHARED_ALIGNED(struct tlb_state, cpu_tlbstate) 20DEFINE_PER_CPU_SHARED_ALIGNED(struct tlb_state, cpu_tlbstate)
22 = { &init_mm, 0, }; 21 = { &init_mm, 0, };
@@ -206,16 +205,13 @@ void native_flush_tlb_others(const struct cpumask *cpumask,
206 struct mm_struct *mm, unsigned long va) 205 struct mm_struct *mm, unsigned long va)
207{ 206{
208 if (is_uv_system()) { 207 if (is_uv_system()) {
209 /* FIXME: could be an percpu_alloc'd thing */ 208 unsigned int cpu;
210 static DEFINE_PER_CPU(cpumask_t, flush_tlb_mask);
211 struct cpumask *after_uv_flush = &get_cpu_var(flush_tlb_mask);
212 209
213 cpumask_andnot(after_uv_flush, cpumask, 210 cpu = get_cpu();
214 cpumask_of(smp_processor_id())); 211 cpumask = uv_flush_tlb_others(cpumask, mm, va, cpu);
215 if (!uv_flush_tlb_others(after_uv_flush, mm, va)) 212 if (cpumask)
216 flush_tlb_others_ipi(after_uv_flush, mm, va); 213 flush_tlb_others_ipi(cpumask, mm, va);
217 214 put_cpu();
218 put_cpu_var(flush_tlb_uv_cpumask);
219 return; 215 return;
220 } 216 }
221 flush_tlb_others_ipi(cpumask, mm, va); 217 flush_tlb_others_ipi(cpumask, mm, va);