diff options
author | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2006-06-29 08:57:32 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2006-06-29 08:57:32 -0400 |
commit | 06fa46a2fcb7e13386707a3eac74f11140a9f818 (patch) | |
tree | 122423639f15638d04080dd095b939203b9bf645 | |
parent | 4980082db1a8aa3ec45aa22cd4a10021955e22ed (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>
-rw-r--r-- | arch/s390/kernel/setup.c | 21 |
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 | ||
290 | void machine_restart(char *command) | 290 | void 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 | ||
296 | void machine_halt(void) | 301 | void 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 | ||
302 | void machine_power_off(void) | 312 | void 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 | ||