|
@@ -21,6 +21,7 @@
|
|
#include <asm/hardirq.h>
|
|
#include <asm/hardirq.h>
|
|
#include <asm/nmi.h>
|
|
#include <asm/nmi.h>
|
|
#include <asm/hw_irq.h>
|
|
#include <asm/hw_irq.h>
|
|
|
|
+#include <asm/apic.h>
|
|
#include <mach_ipi.h>
|
|
#include <mach_ipi.h>
|
|
|
|
|
|
|
|
|
|
@@ -147,6 +148,7 @@ static int crash_nmi_callback(struct pt_regs *regs, int cpu)
|
|
regs = &fixed_regs;
|
|
regs = &fixed_regs;
|
|
}
|
|
}
|
|
crash_save_this_cpu(regs, cpu);
|
|
crash_save_this_cpu(regs, cpu);
|
|
|
|
+ disable_local_APIC();
|
|
atomic_dec(&waiting_for_crash_ipi);
|
|
atomic_dec(&waiting_for_crash_ipi);
|
|
/* Assume hlt works */
|
|
/* Assume hlt works */
|
|
halt();
|
|
halt();
|
|
@@ -186,6 +188,7 @@ static void nmi_shootdown_cpus(void)
|
|
}
|
|
}
|
|
|
|
|
|
/* Leave the nmi callback set */
|
|
/* Leave the nmi callback set */
|
|
|
|
+ disable_local_APIC();
|
|
}
|
|
}
|
|
#else
|
|
#else
|
|
static void nmi_shootdown_cpus(void)
|
|
static void nmi_shootdown_cpus(void)
|
|
@@ -210,5 +213,9 @@ void machine_crash_shutdown(struct pt_regs *regs)
|
|
/* Make a note of crashing cpu. Will be used in NMI callback.*/
|
|
/* Make a note of crashing cpu. Will be used in NMI callback.*/
|
|
crashing_cpu = smp_processor_id();
|
|
crashing_cpu = smp_processor_id();
|
|
nmi_shootdown_cpus();
|
|
nmi_shootdown_cpus();
|
|
|
|
+ lapic_shutdown();
|
|
|
|
+#if defined(CONFIG_X86_IO_APIC)
|
|
|
|
+ disable_IO_APIC();
|
|
|
|
+#endif
|
|
crash_save_self(regs);
|
|
crash_save_self(regs);
|
|
}
|
|
}
|