diff options
Diffstat (limited to 'kernel/irq')
-rw-r--r-- | kernel/irq/manage.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 69a3d7b9414c..0b23ff71b9b0 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c | |||
@@ -753,6 +753,16 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new) | |||
753 | if (new->flags & IRQF_ONESHOT) | 753 | if (new->flags & IRQF_ONESHOT) |
754 | desc->status |= IRQ_ONESHOT; | 754 | desc->status |= IRQ_ONESHOT; |
755 | 755 | ||
756 | /* | ||
757 | * Force MSI interrupts to run with interrupts | ||
758 | * disabled. The multi vector cards can cause stack | ||
759 | * overflows due to nested interrupts when enough of | ||
760 | * them are directed to a core and fire at the same | ||
761 | * time. | ||
762 | */ | ||
763 | if (desc->msi_desc) | ||
764 | new->flags |= IRQF_DISABLED; | ||
765 | |||
756 | if (!(desc->status & IRQ_NOAUTOEN)) { | 766 | if (!(desc->status & IRQ_NOAUTOEN)) { |
757 | desc->depth = 0; | 767 | desc->depth = 0; |
758 | desc->status &= ~IRQ_DISABLED; | 768 | desc->status &= ~IRQ_DISABLED; |