]> err.no Git - linux-2.6/blobdiff - arch/x86/kernel/smp.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6
[linux-2.6] / arch / x86 / kernel / smp.c
index 88c1e518a203e236fe3d7ae08ffebdac05aa0ae1..0cb7aadc87cd44a5e0c2402731cadbfd8c88ce8d 100644 (file)
 #include <asm/tlbflush.h>
 #include <asm/mmu_context.h>
 #include <asm/proto.h>
-#ifdef CONFIG_X86_32
-#include <mach_apic.h>
 #include <mach_ipi.h>
-#else
-#include <asm/mach_apic.h>
-#endif
+#include <mach_apic.h>
 /*
  *     Some notes on x86 processor bugs affecting SMP operation:
  *
  */
 static void native_smp_send_reschedule(int cpu)
 {
-       WARN_ON(cpu_is_offline(cpu));
+       if (unlikely(cpu_is_offline(cpu))) {
+               WARN_ON(1);
+               return;
+       }
        send_IPI_mask(cpumask_of_cpu(cpu), RESCHEDULE_VECTOR);
 }
 
@@ -232,7 +231,8 @@ native_smp_call_function_mask(cpumask_t mask,
        wmb();
 
        /* Send a message to other CPUs */
-       if (cpus_equal(mask, allbutself))
+       if (cpus_equal(mask, allbutself) &&
+           cpus_equal(cpu_online_map, cpu_callout_map))
                send_IPI_allbutself(CALL_FUNCTION_VECTOR);
        else
                send_IPI_mask(mask, CALL_FUNCTION_VECTOR);