
From: "Eric W. Biederman" <ebiederm@xmission.com>

This patch should not make it to the stable kernel without a being reviewed a
lot more.  It is unclear how much a hardned kernel can take when it comes to
misconfigured apics.  So since a normal kernel has problems this patch does a
clean shutdown.

It is my expectation this patch will be dropped from future generations of the
kexec work.  But for the moment it is a crutch to keep from breaking
everything.

Signed-off-by: Eric Biederman <ebiederm@xmission.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/arch/i386/kernel/crash.c |    7 +++++++
 1 files changed, 7 insertions(+)

diff -puN arch/i386/kernel/crash.c~x86-crash_shutdown-apic-shutdown arch/i386/kernel/crash.c
--- 25/arch/i386/kernel/crash.c~x86-crash_shutdown-apic-shutdown	Wed Jan 19 15:22:28 2005
+++ 25-akpm/arch/i386/kernel/crash.c	Wed Jan 19 15:22:28 2005
@@ -23,6 +23,7 @@
 #include <asm/hardirq.h>
 #include <asm/nmi.h>
 #include <asm/hw_irq.h>
+#include <asm/apic.h>
 #include <mach_ipi.h>
 
 #define MAX_NOTE_BYTES 1024
@@ -115,6 +116,7 @@ static int crash_nmi_callback(struct pt_
 {
 	local_irq_disable();
 	crash_save_this_cpu(regs, cpu);
+	disable_local_APIC();
 	atomic_dec(&waiting_for_crash_ipi);
 	/* Assume hlt works */
 	__asm__("hlt");
@@ -153,6 +155,7 @@ static void nmi_shootdown_cpus(void)
 	}
 
 	/* Leave the nmi callback set */
+	disable_local_APIC();
 }
 #else
 static void nmi_shootdown_cpus(void)
@@ -174,5 +177,9 @@ void machine_crash_shutdown(void)
 	/* The kernel is broken so disable interrupts */
 	local_irq_disable();
 	nmi_shootdown_cpus();
+	lapic_shutdown();
+#if defined(CONFIG_X86_IO_APIC)
+	disable_IO_APIC();
+#endif
 	crash_save_self();
 }
_
