x86, SGI UV: TLB shootdown using broadcast assist unit
[deliverable/linux.git] / arch / x86 / kernel / tlb_64.c
index 615d84817758f755dfd05d945fe9f1a0ef6671ba..fc132113bdabc6d14c7d0077243af2247fc2ea97 100644 (file)
 #include <asm/mtrr.h>
 #include <asm/pgalloc.h>
 #include <asm/tlbflush.h>
-#include <asm/mach_apic.h>
 #include <asm/mmu_context.h>
 #include <asm/proto.h>
 #include <asm/apicdef.h>
 #include <asm/idle.h>
+#include <asm/uv/uv_hub.h>
+#include <asm/uv/uv_bau.h>
+
+#include <mach_ipi.h>
 /*
  *     Smarter SMP flushing macros.
  *             c/o Linus Torvalds.
@@ -161,6 +164,9 @@ void native_flush_tlb_others(const cpumask_t *cpumaskp, struct mm_struct *mm,
        union smp_flush_state *f;
        cpumask_t cpumask = *cpumaskp;
 
+       if (is_uv_system() && uv_flush_tlb_others(&cpumask, mm, va))
+                       return;
+
        /* Caller has disabled preemption */
        sender = smp_processor_id() % NUM_INVALIDATE_TLB_VECTORS;
        f = &per_cpu(flush_state, sender);
@@ -190,13 +196,13 @@ void native_flush_tlb_others(const cpumask_t *cpumaskp, struct mm_struct *mm,
        spin_unlock(&f->tlbstate_lock);
 }
 
-int __cpuinit init_smp_flush(void)
+static int __cpuinit init_smp_flush(void)
 {
        int i;
 
-       for_each_cpu_mask(i, cpu_possible_map) {
+       for_each_possible_cpu(i)
                spin_lock_init(&per_cpu(flush_state, i).tlbstate_lock);
-       }
+
        return 0;
 }
 core_initcall(init_smp_flush);
This page took 0.029375 seconds and 5 git commands to generate.