lkml.org 
[lkml]   [2009]   [Jun]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 07/25] Blackfin: simplify irq stack overflow checking
    Date
    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 | 32 +++++++++++++++++---------------
    1 files changed, 17 insertions(+), 15 deletions(-)

    diff --git a/arch/blackfin/kernel/irqchip.c b/arch/blackfin/kernel/irqchip.c
    index 8abb642..7378440 100644
    --- a/arch/blackfin/kernel/irqchip.c
    +++ b/arch/blackfin/kernel/irqchip.c
    @@ -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
    --
    1.6.3.1


    \
     
     \ /
      Last update: 2009-06-20 20:49    [W:0.032 / U:0.572 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site