Blackfin: simplify irq stack overflow checking
authorMike Frysinger <vapier@gentoo.org>
Mon, 15 Jun 2009 10:18:38 +0000 (06:18 -0400)
committerMike Frysinger <vapier@gentoo.org>
Tue, 23 Jun 2009 01:15:43 +0000 (21:15 -0400)
Take a page from x86 and abstract the stack checking out of the
asm_do_IRQ() function so that the result is easier to digest.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
arch/blackfin/kernel/irqchip.c

index 8abb642283b42cd654aa3c40e5c5eb9e2c2f4000..7378440792a45bb01c1e6df30fb6fd1c4ee9302a 100644 (file)
@@ -88,6 +88,22 @@ int show_interrupts(struct seq_file *p, void *v)
 }
 #endif
 
+#ifdef CONFIG_DEBUG_STACKOVERFLOW
+static void check_stack_overflow(int irq)
+{
+       /* Debugging check for stack overflow: is there less than STACK_WARN free? */
+       long sp = __get_SP() & (THREAD_SIZE - 1);
+
+       if (unlikely(sp < (sizeof(struct thread_info) + STACK_WARN))) {
+               dump_stack();
+               pr_emerg("irq%i: possible stack overflow only %ld bytes free\n",
+                       irq, sp - sizeof(struct thread_info));
+       }
+}
+#else
+static inline void check_stack_overflow(int irq) { }
+#endif
+
 /*
  * do_IRQ handles all hardware IRQs.  Decoded IRQs should not
  * come via this function.  Instead, they should provide their
@@ -105,21 +121,7 @@ asmlinkage void asm_do_IRQ(unsigned int irq, struct pt_regs *regs)
 
        irq_enter();
 
-#ifdef CONFIG_DEBUG_STACKOVERFLOW
-       /* Debugging check for stack overflow: is there less than STACK_WARN free? */
-       {
-               long sp;
-
-               sp = __get_SP() & (THREAD_SIZE-1);
-
-               if (unlikely(sp < (sizeof(struct thread_info) + STACK_WARN))) {
-                       dump_stack();
-                       printk(KERN_EMERG "%s: possible stack overflow while handling irq %i "
-                                       " only %ld bytes free\n",
-                               __func__, irq, sp - sizeof(struct thread_info));
-               }
-       }
-#endif
+       check_stack_overflow(irq);
 
        /*
         * Some hardware gives randomly wrong interrupts.  Rather