diff options
author | Andrew Morton <akpm@osdl.org> | 2006-03-23 06:00:57 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-23 10:38:16 -0500 |
commit | dd287796d608fcdc3fe5e8fdb5bf762a8f1bc32a (patch) | |
tree | 84be163fdc5fe36eb8d3f1aa5e60bfd1d794c641 /arch/i386/kernel/traps.c | |
parent | 41c28ff1635e71af072c4711ff5fadd5855d48e7 (diff) |
[PATCH] pause_on_oops command line option
Attempt to fix the problem wherein people's oops reports scroll off the screen
due to repeated oopsing or to oopses on other CPUs.
If this happens the user can reboot with the `pause_on_oops=<seconds>' option.
It will allow the first oopsing CPU to print an oops record just a single
time. Second oopsing attempts, or oopses on other CPUs will cause those CPUs
to enter a tight loop until the specified number of seconds have elapsed.
The patch implements the infrastructure generically in the expectation that
architectures other than x86 will find it useful.
Cc: Dave Jones <davej@codemonkey.org.uk>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/i386/kernel/traps.c')
-rw-r--r-- | arch/i386/kernel/traps.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c index 1b7ad4115d81..de5386b01d38 100644 --- a/arch/i386/kernel/traps.c +++ b/arch/i386/kernel/traps.c | |||
@@ -352,6 +352,8 @@ void die(const char * str, struct pt_regs * regs, long err) | |||
352 | static int die_counter; | 352 | static int die_counter; |
353 | unsigned long flags; | 353 | unsigned long flags; |
354 | 354 | ||
355 | oops_enter(); | ||
356 | |||
355 | if (die.lock_owner != raw_smp_processor_id()) { | 357 | if (die.lock_owner != raw_smp_processor_id()) { |
356 | console_verbose(); | 358 | console_verbose(); |
357 | spin_lock_irqsave(&die.lock, flags); | 359 | spin_lock_irqsave(&die.lock, flags); |
@@ -404,6 +406,7 @@ void die(const char * str, struct pt_regs * regs, long err) | |||
404 | ssleep(5); | 406 | ssleep(5); |
405 | panic("Fatal exception"); | 407 | panic("Fatal exception"); |
406 | } | 408 | } |
409 | oops_exit(); | ||
407 | do_exit(SIGSEGV); | 410 | do_exit(SIGSEGV); |
408 | } | 411 | } |
409 | 412 | ||