aboutsummaryrefslogtreecommitdiffstats
path: root/patches
diff options
context:
space:
mode:
authorIan.Campbell@xensource.com <Ian.Campbell@xensource.com>2006-01-11 15:51:18 +0000
committerIan.Campbell@xensource.com <Ian.Campbell@xensource.com>2006-01-11 15:51:18 +0000
commit1582d1175001a99133810c158622c53d1e3dc9ee (patch)
tree1e0149f92efff3ada536b33c03a60635f32be064 /patches
parent6bc154ed1e341a48ec3e21c08dc10fda9734aedd (diff)
downloadxen-1582d1175001a99133810c158622c53d1e3dc9ee.tar.gz
xen-1582d1175001a99133810c158622c53d1e3dc9ee.tar.bz2
xen-1582d1175001a99133810c158622c53d1e3dc9ee.zip
Factor re-enabling the IOCK line out of io_check_error()
and into a machine specific function to. Signed-off-by: Ian Campbell <Ian.Campbell@XenSource.com>
Diffstat (limited to 'patches')
-rw-r--r--patches/linux-2.6.12/i386-mach-io-check-nmi.patch43
1 files changed, 43 insertions, 0 deletions
diff --git a/patches/linux-2.6.12/i386-mach-io-check-nmi.patch b/patches/linux-2.6.12/i386-mach-io-check-nmi.patch
new file mode 100644
index 0000000000..3a6048833a
--- /dev/null
+++ b/patches/linux-2.6.12/i386-mach-io-check-nmi.patch
@@ -0,0 +1,43 @@
+--- ref-linux-2.6.12/arch/i386/kernel/traps.c 2005-12-19 09:23:44.000000000 +0000
++++ linux-2.6.12-xen0/arch/i386/kernel/traps.c 2006-01-05 15:51:52.000000000 +0000
+@@ -521,18 +521,11 @@
+
+ static void io_check_error(unsigned char reason, struct pt_regs * regs)
+ {
+- unsigned long i;
+-
+ printk("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)
+--- ref-linux-2.6.12/include/asm-i386/mach-default/mach_traps.h 2005-06-17 20:48:29.000000000 +0100
++++ linux-2.6.12-xen0/include/asm-i386/mach-default/mach_traps.h 2006-01-05 15:52:33.000000000 +0000
+@@ -15,6 +15,18 @@
+ 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);