Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: genirq: Force MSI irq handlers to run with interrupts disabled
This commit is contained in:
commit
94c4fcec01
|
@ -757,6 +757,16 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)
|
||||||
if (new->flags & IRQF_ONESHOT)
|
if (new->flags & IRQF_ONESHOT)
|
||||||
desc->status |= IRQ_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)) {
|
if (!(desc->status & IRQ_NOAUTOEN)) {
|
||||||
desc->depth = 0;
|
desc->depth = 0;
|
||||||
desc->status &= ~IRQ_DISABLED;
|
desc->status &= ~IRQ_DISABLED;
|
||||||
|
|
Loading…
Reference in a new issue