@ -301,6 +301,22 @@ static inline void handle_one_irq(unsigned int irq)
}
# endif
static inline void check_stack_overflow ( void )
{
# ifdef CONFIG_DEBUG_STACKOVERFLOW
long sp ;
sp = __get_SP ( ) & ( THREAD_SIZE - 1 ) ;
/* check for stack overflow: is there less than 2KB free? */
if ( unlikely ( sp < ( sizeof ( struct thread_info ) + 2048 ) ) ) {
printk ( " do_IRQ: stack overflow: %ld \n " ,
sp - sizeof ( struct thread_info ) ) ;
dump_stack ( ) ;
}
# endif
}
void do_IRQ ( struct pt_regs * regs )
{
struct pt_regs * old_regs = set_irq_regs ( regs ) ;
@ -308,20 +324,7 @@ void do_IRQ(struct pt_regs *regs)
irq_enter ( ) ;
# ifdef CONFIG_DEBUG_STACKOVERFLOW
/* Debugging check for stack overflow: is there less than 2KB free? */
{
long sp ;
sp = __get_SP ( ) & ( THREAD_SIZE - 1 ) ;
if ( unlikely ( sp < ( sizeof ( struct thread_info ) + 2048 ) ) ) {
printk ( " do_IRQ: stack overflow: %ld \n " ,
sp - sizeof ( struct thread_info ) ) ;
dump_stack ( ) ;
}
}
# endif
check_stack_overflow ( ) ;
/*
* Every platform is required to implement ppc_md . get_irq .