|
@@ -757,6 +757,16 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
|
|
|
if (new->flags & IRQF_ONESHOT)
|
|
|
desc->status |= IRQ_ONESHOT;
|
|
|
|
|
|
+ /*
|
|
|
+ * Force MSI interrupts to run with interrupts
|
|
|
+ * disabled. The multi vector cards can cause stack
|
|
|
+ * overflows due to nested interrupts when enough of
|
|
|
+ * them are directed to a core and fire at the same
|
|
|
+ * time.
|
|
|
+ */
|
|
|
+ if (desc->msi_desc)
|
|
|
+ new->flags |= IRQF_DISABLED;
|
|
|
+
|
|
|
if (!(desc->status & IRQ_NOAUTOEN)) {
|
|
|
desc->depth = 0;
|
|
|
desc->status &= ~IRQ_DISABLED;
|