aboutsummaryrefslogtreecommitdiffstats
path: root/patches/linux-2.6.16-rc5/i386-mach-io-check-nmi.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/linux-2.6.16-rc5/i386-mach-io-check-nmi.patch')
-rw-r--r--patches/linux-2.6.16-rc5/i386-mach-io-check-nmi.patch45
1 files changed, 45 insertions, 0 deletions
diff --git a/patches/linux-2.6.16-rc5/i386-mach-io-check-nmi.patch b/patches/linux-2.6.16-rc5/i386-mach-io-check-nmi.patch
new file mode 100644
index 0000000000..ebcd35207d
--- /dev/null
+++ b/patches/linux-2.6.16-rc5/i386-mach-io-check-nmi.patch
@@ -0,0 +1,45 @@
+diff -pruN ../pristine-linux-2.6.16-rc5/arch/i386/kernel/traps.c ./arch/i386/kernel/traps.c
+--- ../pristine-linux-2.6.16-rc5/arch/i386/kernel/traps.c 2006-02-27 15:46:58.000000000 +0000
++++ ./arch/i386/kernel/traps.c 2006-02-27 15:55:23.000000000 +0000
+@@ -567,18 +567,11 @@ static void mem_parity_error(unsigned ch
+
+ static void io_check_error(unsigned char reason, struct pt_regs * regs)
+ {
+- unsigned long i;
+-
+ printk(KERN_EMERG "NMI: IOCK error (debug interrupt?)\n");
+ show_registers(regs);
+
+ /* Re-enable the IOCK line, wait for a few seconds */
+- reason = (reason & 0xf) | 8;
+- outb(reason, 0x61);
+- i = 2000;
+- while (--i) udelay(1000);
+- reason &= ~8;
+- outb(reason, 0x61);
++ clear_io_check_error(reason);
+ }
+
+ static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs)
+diff -pruN ../pristine-linux-2.6.16-rc5/include/asm-i386/mach-default/mach_traps.h ./include/asm-i386/mach-default/mach_traps.h
+--- ../pristine-linux-2.6.16-rc5/include/asm-i386/mach-default/mach_traps.h 2006-01-03 03:21:10.000000000 +0000
++++ ./include/asm-i386/mach-default/mach_traps.h 2006-02-27 15:55:23.000000000 +0000
+@@ -15,6 +15,18 @@ static inline void clear_mem_error(unsig
+ outb(reason, 0x61);
+ }
+
++static inline void clear_io_check_error(unsigned char reason)
++{
++ unsigned long i;
++
++ reason = (reason & 0xf) | 8;
++ outb(reason, 0x61);
++ i = 2000;
++ while (--i) udelay(1000);
++ reason &= ~8;
++ outb(reason, 0x61);
++}
++
+ static inline unsigned char get_nmi_reason(void)
+ {
+ return inb(0x61);