aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
authorMartin Schwidefsky <schwidefsky@de.ibm.com>2006-06-29 08:57:32 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2006-06-29 08:57:32 -0400
commit06fa46a2fcb7e13386707a3eac74f11140a9f818 (patch)
tree122423639f15638d04080dd095b939203b9bf645 /arch/s390
parent4980082db1a8aa3ec45aa22cd4a10021955e22ed (diff)
[S390] console_unblank woes.
The software watchdog calls machine_restart from a timer function. The s390 machine_restart calls console_unblank to flush the console output. This is needed for panic to get the panic message printed. If console_unblank is called in interrupt a BUG is triggered in acquire_console_sem. That makes the software watchdog panic instead of restarting the machine. To get around this problem the call to console_unblank is made conditionally on !in_interrupt() || oops_in_progress. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/kernel/setup.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
index b282034452a4..813444aac7d7 100644
--- a/arch/s390/kernel/setup.c
+++ b/arch/s390/kernel/setup.c
@@ -289,19 +289,34 @@ void (*_machine_power_off)(void) = do_machine_power_off_nonsmp;
289 289
290void machine_restart(char *command) 290void machine_restart(char *command)
291{ 291{
292 console_unblank(); 292 if (!in_interrupt() || oops_in_progress)
293 /*
294 * Only unblank the console if we are called in enabled
295 * context or a bust_spinlocks cleared the way for us.
296 */
297 console_unblank();
293 _machine_restart(command); 298 _machine_restart(command);
294} 299}
295 300
296void machine_halt(void) 301void machine_halt(void)
297{ 302{
298 console_unblank(); 303 if (!in_interrupt() || oops_in_progress)
304 /*
305 * Only unblank the console if we are called in enabled
306 * context or a bust_spinlocks cleared the way for us.
307 */
308 console_unblank();
299 _machine_halt(); 309 _machine_halt();
300} 310}
301 311
302void machine_power_off(void) 312void machine_power_off(void)
303{ 313{
304 console_unblank(); 314 if (!in_interrupt() || oops_in_progress)
315 /*
316 * Only unblank the console if we are called in enabled
317 * context or a bust_spinlocks cleared the way for us.
318 */
319 console_unblank();
305 _machine_power_off(); 320 _machine_power_off();
306} 321}
307 322