aboutsummaryrefslogtreecommitdiff
path: root/kernel/irq/manage.c
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2010-05-08 14:59:58 -0700
committerH. Peter Anvin <hpa@zytor.com>2010-05-08 14:59:58 -0700
commitd7be0ce6afb1df60bc786f57410407ceae92b994 (patch)
tree5e91acfc12c833531ad3320f274e0cd96a129973 /kernel/irq/manage.c
parente08cae4181af9483b04ecfac48f01c8e5a5f27bf (diff)
parent66f41d4c5c8a5deed66fdcc84509376c9a0bf9d8 (diff)
Merge commit 'v2.6.34-rc6' into x86/cpu
Diffstat (limited to 'kernel/irq/manage.c')
-rw-r--r--kernel/irq/manage.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 398fda155f6..704e488730a 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -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;