Messages in this thread |  | | | Date | Tue, 14 Nov 2006 21:43:22 +0900 (JST) | | From | Komuro <> | | Subject | Re: [patch] irq: do not mask interrupts by default |
| |
Dear Ingo
I tried your patch with 2.6.19-rc5.
The irq is generated properly.
Thanks!
Best Regards Komuro
>> >------------> >Subject: irq: do not mask interrupts by default >From: Ingo Molnar <mingo@elte.hu> > >never mask interrupts immediately upon request. Disabling >interrupts in high-performance codepaths is rare, and on >the other hand this change could recover lost edges (or >even other types of lost interrupts) by conservatively >only masking interrupts after they happen. (NOTE: with >this change the highlevel irq-disable code still soft-disables >this IRQ line - and if such an interrupt happens then the >IRQ flow handler keeps the IRQ masked.) > >Signed-off-by: Ingo Molnar <mingo@elte.hu> >--- > kernel/irq/chip.c | 13 +++++++------ > 1 file changed, 7 insertions(+), 6 deletions(-) > >Index: linux/kernel/irq/chip.c >=================================================================== >--- linux.orig/kernel/irq/chip.c >+++ linux/kernel/irq/chip.c >@@ -202,10 +202,6 @@ static void default_enable(unsigned int > */ > static void default_disable(unsigned int irq) > { >- struct irq_desc *desc = irq_desc + irq; >- >- if (!(desc->status & IRQ_DELAYED_DISABLE)) >- desc->chip->mask(irq); > } > > /* >@@ -272,8 +268,11 @@ handle_simple_irq(unsigned int irq, stru > kstat_cpu(cpu).irqs[irq]++; > > action = desc->action; >- if (unlikely(!action || (desc->status & IRQ_DISABLED))) >+ if (unlikely(!action || (desc->status & IRQ_DISABLED))) { >+ if (desc->chip->mask) >+ desc->chip->mask(irq); > goto out_unlock; >+ } > > desc->status |= IRQ_INPROGRESS; > spin_unlock(&desc->lock); >@@ -366,11 +365,13 @@ handle_fasteoi_irq(unsigned int irq, str > > /* > * If its disabled or no action available >- * keep it masked and get out of here >+ * then mask it and get out of here: > */ > action = desc->action; > if (unlikely(!action || (desc->status & IRQ_DISABLED))) { > desc->status |= IRQ_PENDING; >+ if (desc->chip->mask) >+ desc->chip->mask(irq); > goto out; > } > > >
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |