[PARISC] detect recursive kernel crash earlier
authorHelge Deller <deller@gmx.de>
Sun, 7 Jan 2007 15:27:27 +0000 (16:27 +0100)
committerKyle McMartin <kyle@athena.road.mcmartin.ca>
Sat, 17 Feb 2007 06:04:13 +0000 (01:04 -0500)
Signed-off-by: Helge Deller <deller@gmx.de>
Signed-off-by: Kyle McMartin <kyle@parisc-linux.org>
arch/parisc/kernel/traps.c

index 7bf9e36..1f62853 100644 (file)
@@ -255,8 +255,16 @@ KERN_CRIT "                     ||     ||\n");
                printk(KERN_CRIT "%s (pid %d): %s (code %ld)\n",
                        current->comm, current->pid, str, err);
 
-       dump_stack();
+       /* Wot's wrong wif bein' racy? */
+       if (current->thread.flags & PARISC_KERNEL_DEATH) {
+               printk(KERN_CRIT "%s() recursion detected.\n", __FUNCTION__);
+               local_irq_enable();
+               while (1);
+       }
+       current->thread.flags |= PARISC_KERNEL_DEATH;
+
        show_regs(regs);
+       dump_stack();
 
        if (in_interrupt())
                panic("Fatal exception in interrupt");
@@ -267,14 +275,6 @@ KERN_CRIT "                     ||     ||\n");
                panic("Fatal exception");
        }
 
-       /* Wot's wrong wif bein' racy? */
-       if (current->thread.flags & PARISC_KERNEL_DEATH) {
-               printk(KERN_CRIT "%s() recursion detected.\n", __FUNCTION__);
-               local_irq_enable();
-               while (1);
-       }
-
-       current->thread.flags |= PARISC_KERNEL_DEATH;
        do_exit(SIGSEGV);
 }