diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2009-06-24 14:34:36 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-06-24 14:34:36 -0700 |
commit | cfa298a4030b4f8d3f617ae19e91a8311db94d66 (patch) | |
tree | c1649ad9173f1bd3590d457358788781f89ea972 /pending | |
parent | 9649bf600e2ce9502c2e1c01d7d6c0608ec668b2 (diff) | |
download | patches-cfa298a4030b4f8d3f617ae19e91a8311db94d66.tar.gz |
fixes
Diffstat (limited to 'pending')
-rw-r--r-- | pending/panic-on-io-nmi.diff | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/pending/panic-on-io-nmi.diff b/pending/panic-on-io-nmi.diff new file mode 100644 index 00000000000000..4c134c3af9a46e --- /dev/null +++ b/pending/panic-on-io-nmi.diff @@ -0,0 +1,98 @@ +From: Kurt Garloff <garloff@suse.de> +Subject: [PATCH] X86: sysctl to allow panic on IOCK NMI error +References: bnc427979 + +This patch introduces a sysctl /proc/sys/kernel/panic_on_io_nmi., +which defaults to 0 (off). +When enabled, the kernel panics when the kernel receives an NMI +caused by an IO error. + +The IO error triggered NMI indicates a serious system condition, +which could result in IO data corruption. Rather than contiuing, +panicing and dumping might be a better choice, so one can figure +out what's causing the IO error. +This could be especially important to companies running IO intensive +applications where corruption must be avoided, e.g. a banks databases. + + +Signed-off-by: Roberto Angelino <robertangelino@gmail.com> + + +--- + arch/x86/kernel/dumpstack.c | 1 + + arch/x86/kernel/traps.c | 3 +++ + include/linux/kernel.h | 1 + + include/linux/sysctl.h | 1 + + kernel/sysctl.c | 8 ++++++++ + kernel/sysctl_check.c | 1 + + 6 files changed, 15 insertions(+) + +--- a/arch/x86/kernel/dumpstack.c ++++ b/arch/x86/kernel/dumpstack.c +@@ -22,6 +22,7 @@ + #include "dumpstack.h" + + int panic_on_unrecovered_nmi; ++int panic_on_io_nmi; + unsigned int code_bytes = 64; + int kstack_depth_to_print = 3 * STACKSLOTS_PER_LINE; + static int die_counter; +--- a/arch/x86/kernel/traps.c ++++ b/arch/x86/kernel/traps.c +@@ -346,6 +346,9 @@ io_check_error(unsigned char reason, str + printk(KERN_EMERG "NMI: IOCK error (debug interrupt?)\n"); + show_registers(regs); + ++ if (panic_on_io_nmi) ++ panic("NMI IOCK error: Not continuing"); ++ + /* Re-enable the IOCK line, wait for a few seconds */ + reason = (reason & 0xf) | 8; + outb(reason, 0x61); +--- a/include/linux/kernel.h ++++ b/include/linux/kernel.h +@@ -303,6 +303,7 @@ extern int oops_in_progress; /* If set, + extern int panic_timeout; + extern int panic_on_oops; + extern int panic_on_unrecovered_nmi; ++extern int panic_on_io_nmi; + extern const char *print_tainted(void); + extern void add_taint(unsigned flag); + extern int test_taint(unsigned flag); +--- a/include/linux/sysctl.h ++++ b/include/linux/sysctl.h +@@ -163,6 +163,7 @@ enum + KERN_MAX_LOCK_DEPTH=74, + KERN_NMI_WATCHDOG=75, /* int: enable/disable nmi watchdog */ + KERN_PANIC_ON_NMI=76, /* int: whether we will panic on an unrecovered */ ++ KERN_PANIC_ON_IO_NMI=77, /* int: whether we will panic on an io NMI */ + }; + + +--- a/kernel/sysctl.c ++++ b/kernel/sysctl.c +@@ -744,6 +744,14 @@ static struct ctl_table kern_table[] = { + .proc_handler = &proc_dointvec, + }, + { ++ .ctl_name = KERN_PANIC_ON_IO_NMI, ++ .procname = "panic_on_io_nmi", ++ .data = &panic_on_io_nmi, ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++ { + .ctl_name = KERN_BOOTLOADER_TYPE, + .procname = "bootloader_type", + .data = &bootloader_type, +--- a/kernel/sysctl_check.c ++++ b/kernel/sysctl_check.c +@@ -104,6 +104,7 @@ static const struct trans_ctl_table tran + { KERN_MAX_LOCK_DEPTH, "max_lock_depth" }, + { KERN_NMI_WATCHDOG, "nmi_watchdog" }, + { KERN_PANIC_ON_NMI, "panic_on_unrecovered_nmi" }, ++ { KERN_PANIC_ON_IO_NMI, "panic_on_io_nmi" }, + {} + }; + |