|
@@ -275,8 +275,10 @@ void handle_nested_irq(unsigned int irq)
|
|
|
kstat_incr_irqs_this_cpu(irq, desc);
|
|
|
|
|
|
action = desc->action;
|
|
|
- if (unlikely(!action || irqd_irq_disabled(&desc->irq_data)))
|
|
|
+ if (unlikely(!action || irqd_irq_disabled(&desc->irq_data))) {
|
|
|
+ desc->istate |= IRQS_PENDING;
|
|
|
goto out_unlock;
|
|
|
+ }
|
|
|
|
|
|
irqd_set(&desc->irq_data, IRQD_IRQ_INPROGRESS);
|
|
|
raw_spin_unlock_irq(&desc->lock);
|
|
@@ -324,8 +326,10 @@ handle_simple_irq(unsigned int irq, struct irq_desc *desc)
|
|
|
desc->istate &= ~(IRQS_REPLAY | IRQS_WAITING);
|
|
|
kstat_incr_irqs_this_cpu(irq, desc);
|
|
|
|
|
|
- if (unlikely(!desc->action || irqd_irq_disabled(&desc->irq_data)))
|
|
|
+ if (unlikely(!desc->action || irqd_irq_disabled(&desc->irq_data))) {
|
|
|
+ desc->istate |= IRQS_PENDING;
|
|
|
goto out_unlock;
|
|
|
+ }
|
|
|
|
|
|
handle_irq_event(desc);
|
|
|
|