|
@@ -80,13 +80,11 @@ static int try_one_irq(int irq, struct irq_desc *desc, bool force)
|
|
|
|
|
|
/*
|
|
|
* All handlers must agree on IRQF_SHARED, so we test just the
|
|
|
- * first. Check for action->next as well.
|
|
|
+ * first.
|
|
|
*/
|
|
|
action = desc->action;
|
|
|
if (!action || !(action->flags & IRQF_SHARED) ||
|
|
|
- (action->flags & __IRQF_TIMER) ||
|
|
|
- (action->handler(irq, action->dev_id) == IRQ_HANDLED) ||
|
|
|
- !action->next)
|
|
|
+ (action->flags & __IRQF_TIMER))
|
|
|
goto out;
|
|
|
|
|
|
/* Already running on another processor */
|
|
@@ -104,6 +102,7 @@ static int try_one_irq(int irq, struct irq_desc *desc, bool force)
|
|
|
do {
|
|
|
if (handle_irq_event(desc) == IRQ_HANDLED)
|
|
|
ret = IRQ_HANDLED;
|
|
|
+ /* Make sure that there is still a valid action */
|
|
|
action = desc->action;
|
|
|
} while ((desc->istate & IRQS_PENDING) && action);
|
|
|
desc->istate &= ~IRQS_POLL_INPROGRESS;
|