aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/i386/kernel/crash.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/i386/kernel/crash.c b/arch/i386/kernel/crash.c
index 1bb5dd98d1d4..59b92d217464 100644
--- a/arch/i386/kernel/crash.c
+++ b/arch/i386/kernel/crash.c
@@ -23,6 +23,7 @@
23#include <asm/hardirq.h> 23#include <asm/hardirq.h>
24#include <asm/nmi.h> 24#include <asm/nmi.h>
25#include <asm/hw_irq.h> 25#include <asm/hw_irq.h>
26#include <asm/apic.h>
26#include <mach_ipi.h> 27#include <mach_ipi.h>
27 28
28#define MAX_NOTE_BYTES 1024 29#define MAX_NOTE_BYTES 1024
@@ -115,6 +116,7 @@ static int crash_nmi_callback(struct pt_regs *regs, int cpu)
115{ 116{
116 local_irq_disable(); 117 local_irq_disable();
117 crash_save_this_cpu(regs, cpu); 118 crash_save_this_cpu(regs, cpu);
119 disable_local_APIC();
118 atomic_dec(&waiting_for_crash_ipi); 120 atomic_dec(&waiting_for_crash_ipi);
119 /* Assume hlt works */ 121 /* Assume hlt works */
120 __asm__("hlt"); 122 __asm__("hlt");
@@ -153,6 +155,7 @@ static void nmi_shootdown_cpus(void)
153 } 155 }
154 156
155 /* Leave the nmi callback set */ 157 /* Leave the nmi callback set */
158 disable_local_APIC();
156} 159}
157#else 160#else
158static void nmi_shootdown_cpus(void) 161static void nmi_shootdown_cpus(void)
@@ -174,5 +177,9 @@ void machine_crash_shutdown(void)
174 /* The kernel is broken so disable interrupts */ 177 /* The kernel is broken so disable interrupts */
175 local_irq_disable(); 178 local_irq_disable();
176 nmi_shootdown_cpus(); 179 nmi_shootdown_cpus();
180 lapic_shutdown();
181#if defined(CONFIG_X86_IO_APIC)
182 disable_IO_APIC();
183#endif
177 crash_save_self(); 184 crash_save_self();
178} 185}