Commit d7cb10d6 authored by Michael Ellerman's avatar Michael Ellerman Committed by Benjamin Herrenschmidt

powerpc/irq: Move stack overflow check into a separate function

Makes do_IRQ() shorter and clearer.
Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent f2694ba5
...@@ -301,27 +301,30 @@ static inline void handle_one_irq(unsigned int irq) ...@@ -301,27 +301,30 @@ static inline void handle_one_irq(unsigned int irq)
} }
#endif #endif
void do_IRQ(struct pt_regs *regs) static inline void check_stack_overflow(void)
{ {
struct pt_regs *old_regs = set_irq_regs(regs);
unsigned int irq;
irq_enter();
#ifdef CONFIG_DEBUG_STACKOVERFLOW #ifdef CONFIG_DEBUG_STACKOVERFLOW
/* Debugging check for stack overflow: is there less than 2KB free? */
{
long sp; long sp;
sp = __get_SP() & (THREAD_SIZE-1); sp = __get_SP() & (THREAD_SIZE-1);
/* check for stack overflow: is there less than 2KB free? */
if (unlikely(sp < (sizeof(struct thread_info) + 2048))) { if (unlikely(sp < (sizeof(struct thread_info) + 2048))) {
printk("do_IRQ: stack overflow: %ld\n", printk("do_IRQ: stack overflow: %ld\n",
sp - sizeof(struct thread_info)); sp - sizeof(struct thread_info));
dump_stack(); dump_stack();
} }
}
#endif #endif
}
void do_IRQ(struct pt_regs *regs)
{
struct pt_regs *old_regs = set_irq_regs(regs);
unsigned int irq;
irq_enter();
check_stack_overflow();
/* /*
* Every platform is required to implement ppc_md.get_irq. * Every platform is required to implement ppc_md.get_irq.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment