|
@@ -519,7 +519,7 @@ void machine_crash_shutdown(struct pt_regs *regs)
|
|
|
#endif
|
|
|
|
|
|
|
|
|
-#if defined(CONFIG_SMP) && defined(CONFIG_X86_LOCAL_APIC)
|
|
|
+#if defined(CONFIG_SMP)
|
|
|
|
|
|
/* This keeps a track of which one is crashing cpu. */
|
|
|
static int crashing_cpu;
|
|
@@ -568,6 +568,12 @@ static struct notifier_block crash_nmi_nb = {
|
|
|
.notifier_call = crash_nmi_callback,
|
|
|
};
|
|
|
|
|
|
+/* Halt all other CPUs, calling the specified function on each of them
|
|
|
+ *
|
|
|
+ * This function can be used to halt all other CPUs on crash
|
|
|
+ * or emergency reboot time. The function passed as parameter
|
|
|
+ * will be called inside a NMI handler on all CPUs.
|
|
|
+ */
|
|
|
void nmi_shootdown_cpus(nmi_shootdown_cb callback)
|
|
|
{
|
|
|
unsigned long msecs;
|
|
@@ -596,4 +602,9 @@ void nmi_shootdown_cpus(nmi_shootdown_cb callback)
|
|
|
|
|
|
/* Leave the nmi callback set */
|
|
|
}
|
|
|
+#else /* !CONFIG_SMP */
|
|
|
+void nmi_shootdown_cpus(nmi_shootdown_cb callback)
|
|
|
+{
|
|
|
+ /* No other CPUs to shoot down */
|
|
|
+}
|
|
|
#endif
|