diff options
-rw-r--r-- | arch/s390/Kconfig | 7 | ||||
-rw-r--r-- | arch/s390/kernel/nmi.c | 29 |
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 | ||
344 | comment "I/O subsystem configuration" | 344 | comment "I/O subsystem configuration" |
345 | 345 | ||
346 | config 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 | |||
353 | config QDIO | 346 | config 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 | } |
383 | arch_initcall(machine_check_init); | 376 | arch_initcall(machine_check_init); |