diff options
Diffstat (limited to 'arch/x86/kernel/tlb_64.c')
-rw-r--r-- | arch/x86/kernel/tlb_64.c | 18 |
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 | ||
21 | DEFINE_PER_CPU_SHARED_ALIGNED(struct tlb_state, cpu_tlbstate) | 20 | DEFINE_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); |