diff options
author | Alexander van Heukelum <heukelum@fastmail.fm> | 2008-10-22 06:00:11 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-10-22 08:00:24 -0400 |
commit | 10b14cb7eb7dd5bff8023f76a55c8ac20e586128 (patch) | |
tree | 652d1ec20eec92b5143a4e7f562469dee8efee29 /arch/x86/kernel/dumpstack_64.c | |
parent | 0ed7a498f416dcfa1cca478a559238a2a3396240 (diff) |
x86, dumpstack: always call oops_exit from oops_end
Always call oops_exit from oops_end, even if signr==0.
Also, move add_taint(TAINT_DIE) from __die to oops_end
on x86_64 and interchange two lines to make oops_end
more similar to the i386-version.
Signed-off-by: Alexander van Heukelum <heukelum@fastmail.fm>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/dumpstack_64.c')
-rw-r--r-- | arch/x86/kernel/dumpstack_64.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c index 57ce11b895ce..dc6162bf7454 100644 --- a/arch/x86/kernel/dumpstack_64.c +++ b/arch/x86/kernel/dumpstack_64.c | |||
@@ -461,22 +461,22 @@ void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr) | |||
461 | if (regs && kexec_should_crash(current)) | 461 | if (regs && kexec_should_crash(current)) |
462 | crash_kexec(regs); | 462 | crash_kexec(regs); |
463 | 463 | ||
464 | die_owner = -1; | ||
465 | bust_spinlocks(0); | 464 | bust_spinlocks(0); |
465 | die_owner = -1; | ||
466 | add_taint(TAINT_DIE); | ||
466 | die_nest_count--; | 467 | die_nest_count--; |
467 | if (!die_nest_count) | 468 | if (!die_nest_count) |
468 | /* Nest count reaches zero, release the lock. */ | 469 | /* Nest count reaches zero, release the lock. */ |
469 | __raw_spin_unlock(&die_lock); | 470 | __raw_spin_unlock(&die_lock); |
470 | raw_local_irq_restore(flags); | 471 | raw_local_irq_restore(flags); |
471 | if (!signr) { | 472 | oops_exit(); |
472 | oops_exit(); | 473 | |
474 | if (!signr) | ||
473 | return; | 475 | return; |
474 | } | ||
475 | if (in_interrupt()) | 476 | if (in_interrupt()) |
476 | panic("Fatal exception in interrupt"); | 477 | panic("Fatal exception in interrupt"); |
477 | if (panic_on_oops) | 478 | if (panic_on_oops) |
478 | panic("Fatal exception"); | 479 | panic("Fatal exception"); |
479 | oops_exit(); | ||
480 | do_exit(signr); | 480 | do_exit(signr); |
481 | } | 481 | } |
482 | 482 | ||
@@ -499,7 +499,6 @@ int __kprobes __die(const char *str, struct pt_regs *regs, long err) | |||
499 | return 1; | 499 | return 1; |
500 | 500 | ||
501 | show_registers(regs); | 501 | show_registers(regs); |
502 | add_taint(TAINT_DIE); | ||
503 | /* Executive summary in case the oops scrolled away */ | 502 | /* Executive summary in case the oops scrolled away */ |
504 | printk(KERN_ALERT "RIP "); | 503 | printk(KERN_ALERT "RIP "); |
505 | printk_address(regs->ip, 1); | 504 | printk_address(regs->ip, 1); |