diff options
author | Mattias Wallin <mattias.wallin@stericsson.com> | 2010-12-03 13:19:13 +0100 |
---|---|---|
committer | Mathieu J. Poirier <mathieu.poirier@linaro.org> | 2011-11-10 11:09:05 -0700 |
commit | a28932987b3024fc5e5e3c052e84902631eedefa (patch) | |
tree | 43bda87f6ef860b4b92f88a444577d18d4c3d4d2 | |
parent | d5d9dd96d9b79566b984f1f9334289c10f7ee739 (diff) |
irq: Allow threaded and nested irqs to be shared
This patch will make the threaded nested handler run all the registered
shared action handlers and not just the first registered.
Signed-off-by: Mattias Wallin <mattias.wallin@stericsson.com>
Change-Id: Ib484a2fa50186dbc05aedbcb9936518302ab801b
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/10494
Reviewed-by: Rabin VINCENT <rabin.vincent@stericsson.com>
Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com>
-rw-r--r-- | kernel/irq/chip.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index dc5114b4c16..383101aaa92 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -244,7 +244,7 @@ void handle_nested_irq(unsigned int irq) { struct irq_desc *desc = irq_to_desc(irq); struct irqaction *action; - irqreturn_t action_ret; + irqreturn_t action_ret = IRQ_NONE; might_sleep(); @@ -259,7 +259,11 @@ void handle_nested_irq(unsigned int irq) irqd_set(&desc->irq_data, IRQD_IRQ_INPROGRESS); raw_spin_unlock_irq(&desc->lock); - action_ret = action->thread_fn(action->irq, action->dev_id); + do { + action_ret |= action->thread_fn(action->irq, action->dev_id); + action = action->next; + } while (action); + if (!noirqdebug) note_interrupt(irq, desc, action_ret); |