aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/dumpstack_32.c
diff options
context:
space:
mode:
authorAlexander van Heukelum <heukelum@fastmail.fm>2008-10-22 06:00:09 -0400
committerIngo Molnar <mingo@elte.hu>2008-10-22 08:00:23 -0400
commit874d93d11823b2b861addac6a5dc31162e924ab2 (patch)
tree6d84df0b35ca810ea5871be766934b0b20ad70b7 /arch/x86/kernel/dumpstack_32.c
parentb4b8f87bf4958cbad620654efc0882ac46c19846 (diff)
x86, dumpstack: let signr=0 signal no do_exit
Change oops_end such that signr=0 signals that do_exit is not to be called. Currently, each use of __die is soon followed by a call to oops_end and 'regs' is set to NULL if oops_end is expected not to call do_exit. Change all such pairs to set signr=0 instead. On x86_64 oops_end is used 'bare' in die_nmi; use signr=0 instead of regs=NULL there, too. 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_32.c')
-rw-r--r--arch/x86/kernel/dumpstack_32.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/x86/kernel/dumpstack_32.c b/arch/x86/kernel/dumpstack_32.c
index 5493d31be4e5..7c22f99f0efb 100644
--- a/arch/x86/kernel/dumpstack_32.c
+++ b/arch/x86/kernel/dumpstack_32.c
@@ -318,7 +318,7 @@ void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr)
318 __raw_spin_unlock(&die_lock); 318 __raw_spin_unlock(&die_lock);
319 raw_local_irq_restore(flags); 319 raw_local_irq_restore(flags);
320 320
321 if (!regs) 321 if (!signr)
322 return; 322 return;
323 323
324 if (in_interrupt()) 324 if (in_interrupt())
@@ -371,17 +371,18 @@ int __kprobes __die(const char *str, struct pt_regs *regs, long err)
371void die(const char *str, struct pt_regs *regs, long err) 371void die(const char *str, struct pt_regs *regs, long err)
372{ 372{
373 unsigned long flags = oops_begin(); 373 unsigned long flags = oops_begin();
374 int sig = SIGSEGV;
374 375
375 if (die_nest_count < 3) { 376 if (die_nest_count < 3) {
376 report_bug(regs->ip, regs); 377 report_bug(regs->ip, regs);
377 378
378 if (__die(str, regs, err)) 379 if (__die(str, regs, err))
379 regs = NULL; 380 sig = 0;
380 } else { 381 } else {
381 printk(KERN_EMERG "Recursive die() failure, output suppressed\n"); 382 printk(KERN_EMERG "Recursive die() failure, output suppressed\n");
382 } 383 }
383 384
384 oops_end(flags, regs, SIGSEGV); 385 oops_end(flags, regs, sig);
385} 386}
386 387
387static DEFINE_SPINLOCK(nmi_print_lock); 388static DEFINE_SPINLOCK(nmi_print_lock);