diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 8f8f1d62f..b846659ce 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -823,7 +823,9 @@ void handle_edge_irq(struct irq_desc *desc) */ if (unlikely(desc->istate & IRQS_PENDING)) { if (!irqd_irq_disabled(&desc->irq_data) && - irqd_irq_masked(&desc->irq_data)) + irqd_irq_masked(&desc->irq_data) && + cpumask_test_cpu(smp_processor_id(), + irq_data_get_effective_affinity_mask(&desc->irq_data))) unmask_irq(desc); } @@ -832,6 +834,10 @@ void handle_edge_irq(struct irq_desc *desc) } while ((desc->istate & IRQS_PENDING) && !irqd_irq_disabled(&desc->irq_data)); +if (!irqd_irq_disabled(&desc->irq_data) && + irqd_irq_masked(&desc->irq_data)) + unmask_irq(desc); + out_unlock: raw_spin_unlock(&desc->lock); }