x86, dumpstack: always call oops_exit from oops_end
authorAlexander van Heukelum <heukelum@fastmail.fm>
Wed, 22 Oct 2008 10:00:11 +0000 (12:00 +0200)
committerIngo Molnar <mingo@elte.hu>
Wed, 22 Oct 2008 12:00:24 +0000 (14:00 +0200)
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>
arch/x86/kernel/dumpstack_32.c
arch/x86/kernel/dumpstack_64.c

index 7c22f99f0efb6fe7bfe628602d7d55f2c13e15f0..a29b88ffa346c0d14088565a34c9f356a9894a7f 100644 (file)
@@ -318,6 +318,7 @@ void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr)
        __raw_spin_unlock(&die_lock);
        raw_local_irq_restore(flags);
 
+       oops_exit();
        if (!signr)
                return;
 
@@ -325,7 +326,6 @@ void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr)
                panic("Fatal exception in interrupt");
        if (panic_on_oops)
                panic("Fatal exception");
-       oops_exit();
        do_exit(signr);
 }
 
index 57ce11b895cef66809ddd21e6d299adaddc9f11d..dc6162bf7454b09852a1e8f8e9b03c524c9522c2 100644 (file)
@@ -461,22 +461,22 @@ void __kprobes oops_end(unsigned long flags, struct pt_regs *regs, int signr)
        if (regs && kexec_should_crash(current))
                crash_kexec(regs);
 
-       die_owner = -1;
        bust_spinlocks(0);
+       die_owner = -1;
+       add_taint(TAINT_DIE);
        die_nest_count--;
        if (!die_nest_count)
                /* Nest count reaches zero, release the lock. */
                __raw_spin_unlock(&die_lock);
        raw_local_irq_restore(flags);
-       if (!signr) {
-               oops_exit();
+       oops_exit();
+
+       if (!signr)
                return;
-       }
        if (in_interrupt())
                panic("Fatal exception in interrupt");
        if (panic_on_oops)
                panic("Fatal exception");
-       oops_exit();
        do_exit(signr);
 }
 
@@ -499,7 +499,6 @@ int __kprobes __die(const char *str, struct pt_regs *regs, long err)
                return 1;
 
        show_registers(regs);
-       add_taint(TAINT_DIE);
        /* Executive summary in case the oops scrolled away */
        printk(KERN_ALERT "RIP ");
        printk_address(regs->ip, 1);