The following commit has been merged in the linux branch: commit c58543c869606532c2382f027d6466f4672ea756 Author: David S. Miller davem@davemloft.net Date: Tue Oct 13 00:49:09 2009 -0700
sparc64: Set IRQF_DISABLED on LDC channel IRQs.
With lots of virtual devices it's easy to generate a lot of events and chew up the kernel IRQ stack.
Reported-by: hyl heyongli@gmail.com Signed-off-by: David S. Miller davem@davemloft.net
diff --git a/arch/sparc/kernel/ldc.c b/arch/sparc/kernel/ldc.c index adf5f27..cb3c72c 100644 --- a/arch/sparc/kernel/ldc.c +++ b/arch/sparc/kernel/ldc.c @@ -1242,13 +1242,13 @@ int ldc_bind(struct ldc_channel *lp, const char *name) snprintf(lp->tx_irq_name, LDC_IRQ_NAME_MAX, "%s TX", name);
err = request_irq(lp->cfg.rx_irq, ldc_rx, - IRQF_SAMPLE_RANDOM | IRQF_SHARED, + IRQF_SAMPLE_RANDOM | IRQF_DISABLED | IRQF_SHARED, lp->rx_irq_name, lp); if (err) return err;
err = request_irq(lp->cfg.tx_irq, ldc_tx, - IRQF_SAMPLE_RANDOM | IRQF_SHARED, + IRQF_SAMPLE_RANDOM | IRQF_DISABLED | IRQF_SHARED, lp->tx_irq_name, lp); if (err) { free_irq(lp->cfg.rx_irq, lp);