aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/dumpstack_64.c
diff options
context:
space:
mode:
authorAlexander van Heukelum <heukelum@fastmail.fm>2008-10-22 06:00:11 -0400
committerIngo Molnar <mingo@elte.hu>2008-10-22 08:00:24 -0400
commit10b14cb7eb7dd5bff8023f76a55c8ac20e586128 (patch)
tree652d1ec20eec92b5143a4e7f562469dee8efee29 /arch/x86/kernel/dumpstack_64.c
parent0ed7a498f416dcfa1cca478a559238a2a3396240 (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.c11
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);