diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-11-02 09:58:49 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-11-02 09:58:49 -0400 |
commit | 9e3be1edbe5ca57df51140b523168237b3a01f4d (patch) | |
tree | a72c0ec1ce0fbcdcd12ecb6aad9bedcc94b94f9d /arch/mips/kernel/irq.c | |
parent | ASoC: Fix SND_SOC_ALL_CODECS typo for alc5623 (diff) | |
parent | Merge commit 'v2.6.37-rc1' into for-2.6.37 (diff) | |
download | linux-dev-9e3be1edbe5ca57df51140b523168237b3a01f4d.tar.xz linux-dev-9e3be1edbe5ca57df51140b523168237b3a01f4d.zip |
Merge branch 'for-2.6.37' into HEAD
WARN() fix from Joe moved.
Conflicts:
sound/soc/codecs/wm_hubs.c
Diffstat (limited to 'arch/mips/kernel/irq.c')
-rw-r--r-- | arch/mips/kernel/irq.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c index c6345f579a8a..4f93db58a79e 100644 --- a/arch/mips/kernel/irq.c +++ b/arch/mips/kernel/irq.c @@ -151,6 +151,29 @@ void __init init_IRQ(void) #endif } +#ifdef DEBUG_STACKOVERFLOW +static inline void check_stack_overflow(void) +{ + unsigned long sp; + + __asm__ __volatile__("move %0, $sp" : "=r" (sp)); + sp &= THREAD_MASK; + + /* + * Check for stack overflow: is there less than STACK_WARN free? + * STACK_WARN is defined as 1/8 of THREAD_SIZE by default. + */ + if (unlikely(sp < (sizeof(struct thread_info) + STACK_WARN))) { + printk("do_IRQ: stack overflow: %ld\n", + sp - sizeof(struct thread_info)); + dump_stack(); + } +} +#else +static inline void check_stack_overflow(void) {} +#endif + + /* * do_IRQ handles all normal device IRQ's (the special * SMP cross-CPU interrupts have their own specific @@ -159,6 +182,7 @@ void __init init_IRQ(void) void __irq_entry do_IRQ(unsigned int irq) { irq_enter(); + check_stack_overflow(); __DO_IRQ_SMTC_HOOK(irq); generic_handle_irq(irq); irq_exit(); |