aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/s390/Kconfig7
-rw-r--r--arch/s390/kernel/nmi.c29
2 files changed, 11 insertions, 25 deletions
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index 3f470604a89a..0a9463bea758 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -343,13 +343,6 @@ source "mm/Kconfig"
343 343
344comment "I/O subsystem configuration" 344comment "I/O subsystem configuration"
345 345
346config MACHCHK_WARNING
347 bool "Process warning machine checks"
348 help
349 Select this option if you want the machine check handler on IBM S/390 or
350 zSeries to process warning machine checks (e.g. on power failures).
351 If unsure, say "Y".
352
353config QDIO 346config QDIO
354 tristate "QDIO support" 347 tristate "QDIO support"
355 ---help--- 348 ---help---
diff --git a/arch/s390/kernel/nmi.c b/arch/s390/kernel/nmi.c
index 8d50eaf76a60..4bfdc421d7e9 100644
--- a/arch/s390/kernel/nmi.c
+++ b/arch/s390/kernel/nmi.c
@@ -59,28 +59,23 @@ void s390_handle_mcck(void)
59 59
60 if (mcck.channel_report) 60 if (mcck.channel_report)
61 crw_handle_channel_report(); 61 crw_handle_channel_report();
62 62 /*
63#ifdef CONFIG_MACHCHK_WARNING 63 * A warning may remain for a prolonged period on the bare iron.
64/* 64 * (actually until the machine is powered off, or the problem is gone)
65 * The warning may remain for a prolonged period on the bare iron. 65 * So we just stop listening for the WARNING MCH and avoid continuously
66 * (actually till the machine is powered off, or until the problem is gone) 66 * being interrupted. One caveat is however, that we must do this per
67 * So we just stop listening for the WARNING MCH and prevent continuously 67 * processor and cannot use the smp version of ctl_clear_bit().
68 * being interrupted. One caveat is however, that we must do this per 68 * On VM we only get one interrupt per virtally presented machinecheck.
69 * processor and cannot use the smp version of ctl_clear_bit(). 69 * Though one suffices, we may get one interrupt per (virtual) cpu.
70 * On VM we only get one interrupt per virtally presented machinecheck. 70 */
71 * Though one suffices, we may get one interrupt per (virtual) processor.
72 */
73 if (mcck.warning) { /* WARNING pending ? */ 71 if (mcck.warning) { /* WARNING pending ? */
74 static int mchchk_wng_posted = 0; 72 static int mchchk_wng_posted = 0;
75 /* 73
76 * Use single machine clear, as we cannot handle smp right now 74 /* Use single cpu clear, as we cannot handle smp here. */
77 */
78 __ctl_clear_bit(14, 24); /* Disable WARNING MCH */ 75 __ctl_clear_bit(14, 24); /* Disable WARNING MCH */
79 if (xchg(&mchchk_wng_posted, 1) == 0) 76 if (xchg(&mchchk_wng_posted, 1) == 0)
80 kill_cad_pid(SIGPWR, 1); 77 kill_cad_pid(SIGPWR, 1);
81 } 78 }
82#endif
83
84 if (mcck.kill_task) { 79 if (mcck.kill_task) {
85 local_irq_enable(); 80 local_irq_enable();
86 printk(KERN_EMERG "mcck: Terminating task because of machine " 81 printk(KERN_EMERG "mcck: Terminating task because of machine "
@@ -375,9 +370,7 @@ static int __init machine_check_init(void)
375{ 370{
376 ctl_set_bit(14, 25); /* enable external damage MCH */ 371 ctl_set_bit(14, 25); /* enable external damage MCH */
377 ctl_set_bit(14, 27); /* enable system recovery MCH */ 372 ctl_set_bit(14, 27); /* enable system recovery MCH */
378#ifdef CONFIG_MACHCHK_WARNING
379 ctl_set_bit(14, 24); /* enable warning MCH */ 373 ctl_set_bit(14, 24); /* enable warning MCH */
380#endif
381 return 0; 374 return 0;
382} 375}
383arch_initcall(machine_check_init); 376arch_initcall(machine_check_init);