* [PATCH] mips: irq: add stackoverflow detection @ 2010-08-26 13:19 ` Adam Jiang 2010-08-26 19:00 ` Sergei Shtylyov 0 siblings, 1 reply; 3+ messages in thread From: Adam Jiang @ 2010-08-26 13:19 UTC (permalink / raw) To: ralf Cc: dmitri.vorobiev, wuzhangjin, ddaney, peterz, fweisbec, tj, linux-mips, linux-kernel, Adam Jiang Add stackoverflow detection to mips arch --- arch/mips/Kconfig.debug | 7 +++++++ arch/mips/kernel/irq.c | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 0 deletions(-) diff --git a/arch/mips/Kconfig.debug b/arch/mips/Kconfig.debug index 43dc279..f1a00a2 100644 --- a/arch/mips/Kconfig.debug +++ b/arch/mips/Kconfig.debug @@ -67,6 +67,13 @@ config CMDLINE_OVERRIDE Normally, you will choose 'N' here. +config DEBUG_STACKOVERFLOW + bool "Check for stack overflows" + depends on DEBUG_KERNEL + help + This option will cause messages to be printed if free stack space + drops below a certain limit. + config DEBUG_STACK_USAGE bool "Enable stack utilization instrumentation" depends on DEBUG_KERNEL diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c index c6345f5..8fdf79e 100644 --- a/arch/mips/kernel/irq.c +++ b/arch/mips/kernel/irq.c @@ -151,6 +151,25 @@ void __init init_IRQ(void) #endif } +#ifdef DEBUG_STACKOVERFLOW +static inline void check_stack_overflow(void) +{ + long sp; + + asm volatile("move %0, $sp" : "=r" (sp)); + sp = 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(); + } +} +#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 -- 1.7.1 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] mips: irq: add stackoverflow detection 2010-08-26 13:19 ` [PATCH] mips: irq: add stackoverflow detection Adam Jiang @ 2010-08-26 19:00 ` Sergei Shtylyov 2010-08-26 23:30 ` Adam Jiang 0 siblings, 1 reply; 3+ messages in thread From: Sergei Shtylyov @ 2010-08-26 19:00 UTC (permalink / raw) To: Adam Jiang Cc: ralf, dmitri.vorobiev, wuzhangjin, ddaney, peterz, fweisbec, tj, linux-mips, linux-kernel Hello. Adam Jiang wrote: > Add stackoverflow detection to mips arch [...] > diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c > index c6345f5..8fdf79e 100644 > --- a/arch/mips/kernel/irq.c > +++ b/arch/mips/kernel/irq.c > @@ -151,6 +151,25 @@ void __init init_IRQ(void) > #endif > } > > +#ifdef DEBUG_STACKOVERFLOW > +static inline void check_stack_overflow(void) > +{ > + long sp; > + > + asm volatile("move %0, $sp" : "=r" (sp)); > + sp = 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(); > + } > +} > +#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 You've dropped call check_stack_overflow() call in do_IRQ() -- was that intentional? WBR, Sergei ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] mips: irq: add stackoverflow detection 2010-08-26 19:00 ` Sergei Shtylyov @ 2010-08-26 23:30 ` Adam Jiang 0 siblings, 0 replies; 3+ messages in thread From: Adam Jiang @ 2010-08-26 23:30 UTC (permalink / raw) To: linux-kernel On Thu, Aug 26, 2010 at 11:00:49PM +0400, Sergei Shtylyov wrote: > Hello. > > Adam Jiang wrote: > > >Add stackoverflow detection to mips arch > > [...] > > >diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c > >index c6345f5..8fdf79e 100644 > >--- a/arch/mips/kernel/irq.c > >+++ b/arch/mips/kernel/irq.c > >@@ -151,6 +151,25 @@ void __init init_IRQ(void) > > #endif > > } > >+#ifdef DEBUG_STACKOVERFLOW > >+static inline void check_stack_overflow(void) > >+{ > >+ long sp; > >+ > >+ asm volatile("move %0, $sp" : "=r" (sp)); > >+ sp = 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(); > >+ } > >+} > >+#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 > > You've dropped call check_stack_overflow() call in do_IRQ() -- > was that intentional? Of course NO. It is awful, I have say. I spent a lot of time to struggle with git yesterday. When I revised the coding style problem and tried to format-patch to master branch, then I got 2 patches but not all in one. How could I rebase my working copy and get an all-in-one patch of this? I tried to revert my commit and redo this patch, then I lost to calling it in do_IRQ(); Best regards, /Adam > > WBR, Sergei ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-08-26 23:27 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <linux-mips@linux-mips.org>
2010-08-26 13:19 ` [PATCH] mips: irq: add stackoverflow detection Adam Jiang
2010-08-26 19:00 ` Sergei Shtylyov
2010-08-26 23:30 ` Adam Jiang
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox