direct-io.hg

view patches/linux-2.6.16.13/i386-mach-io-check-nmi.patch @ 11522:1fae74cd3963

[POWERPC][XEN] Fix infinite loop caused by hdec storm

This was the cause of the periodic hang on secondary processors that has
been holding back the submission of the SMP patch.

Signed-off-by: Amos Waterland <apw@us.ibm.com>
Signed-off-by: Hollis Blanchard <hollisb@us.ibm.com>
author Jimi Xenidis <jimix@watson.ibm.com>
date Thu Sep 14 22:06:15 2006 -0400 (2006-09-14)
parents ad5b833122a8
children
line source
1 diff -pruN ../pristine-linux-2.6.16.13/arch/i386/kernel/traps.c ./arch/i386/kernel/traps.c
2 --- ../pristine-linux-2.6.16.13/arch/i386/kernel/traps.c 2006-05-02 22:38:44.000000000 +0100
3 +++ ./arch/i386/kernel/traps.c 2006-05-04 17:41:34.000000000 +0100
4 @@ -567,18 +567,11 @@ static void mem_parity_error(unsigned ch
6 static void io_check_error(unsigned char reason, struct pt_regs * regs)
7 {
8 - unsigned long i;
9 -
10 printk(KERN_EMERG "NMI: IOCK error (debug interrupt?)\n");
11 show_registers(regs);
13 /* Re-enable the IOCK line, wait for a few seconds */
14 - reason = (reason & 0xf) | 8;
15 - outb(reason, 0x61);
16 - i = 2000;
17 - while (--i) udelay(1000);
18 - reason &= ~8;
19 - outb(reason, 0x61);
20 + clear_io_check_error(reason);
21 }
23 static void unknown_nmi_error(unsigned char reason, struct pt_regs * regs)
24 diff -pruN ../pristine-linux-2.6.16.13/include/asm-i386/mach-default/mach_traps.h ./include/asm-i386/mach-default/mach_traps.h
25 --- ../pristine-linux-2.6.16.13/include/asm-i386/mach-default/mach_traps.h 2006-05-02 22:38:44.000000000 +0100
26 +++ ./include/asm-i386/mach-default/mach_traps.h 2006-05-04 17:41:34.000000000 +0100
27 @@ -15,6 +15,18 @@ static inline void clear_mem_error(unsig
28 outb(reason, 0x61);
29 }
31 +static inline void clear_io_check_error(unsigned char reason)
32 +{
33 + unsigned long i;
34 +
35 + reason = (reason & 0xf) | 8;
36 + outb(reason, 0x61);
37 + i = 2000;
38 + while (--i) udelay(1000);
39 + reason &= ~8;
40 + outb(reason, 0x61);
41 +}
42 +
43 static inline unsigned char get_nmi_reason(void)
44 {
45 return inb(0x61);