···5656void move_native_irq(int irq)5757{5858 struct irq_desc *desc = irq_to_desc(irq);5959+ bool masked;59606061 if (likely(!(desc->status & IRQ_MOVE_PENDING)))6162 return;···6463 if (unlikely(desc->status & IRQ_DISABLED))6564 return;66656767- desc->irq_data.chip->irq_mask(&desc->irq_data);6666+ /*6767+ * Be careful vs. already masked interrupts. If this is a6868+ * threaded interrupt with ONESHOT set, we can end up with an6969+ * interrupt storm.7070+ */7171+ masked = desc->status & IRQ_MASKED;7272+ if (!masked)7373+ desc->irq_data.chip->irq_mask(&desc->irq_data);6874 move_masked_irq(irq);6969- desc->irq_data.chip->irq_unmask(&desc->irq_data);7575+ if (!masked)7676+ desc->irq_data.chip->irq_unmask(&desc->irq_data);7077}7171-