Messages in this thread Patch in this message | | | From | Rabin Vincent <> | Subject | [PATCH] genirq: handle shared irqs in handle_nested_irq() | Date | Thu, 28 Oct 2010 23:28:38 +0530 |
| |
Allow shared irqs to work when nested threads are used for handling threaded interrupts.
Signed-off-by: Rabin Vincent <rabin@rab.in> --- kernel/irq/chip.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index baa5c4a..94a45a9 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -418,8 +418,8 @@ static inline void unmask_irq(struct irq_desc *desc) void handle_nested_irq(unsigned int irq) { struct irq_desc *desc = irq_to_desc(irq); + irqreturn_t action_ret = IRQ_NONE; struct irqaction *action; - irqreturn_t action_ret; might_sleep(); @@ -434,7 +434,10 @@ void handle_nested_irq(unsigned int irq) desc->status |= 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); -- 1.7.2.3
| |