From: Ingo Molnar CONFIG_DEBUG_SHIRQ does not handle SA_SHIRQ & SA_INTERRUPT interrupts correctly and calls them with irqs enabled. Signed-off-by: Ingo Molnar Cc: David Woodhouse Cc: Arjan van de Ven Signed-off-by: Andrew Morton --- kernel/irq/manage.c | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletion(-) diff -puN kernel/irq/manage.c~debug-shared-irqs-fix-2 kernel/irq/manage.c --- 25/kernel/irq/manage.c~debug-shared-irqs-fix-2 Tue Jan 24 13:38:56 2006 +++ 25-akpm/kernel/irq/manage.c Tue Jan 24 13:38:56 2006 @@ -390,7 +390,14 @@ int request_irq(unsigned int irq, immediately, so let's make sure.... We do this before actually registering it, to make sure that a 'real' IRQ doesn't run in parallel with our fake. */ - handler(irq, dev_id, &shirq_fakeregs); + if (irqflags & SA_INTERRUPT) { + unsigned long flags; + + local_irq_save(flags); + handler(irq, dev_id, &shirq_fakeregs); + local_irq_restore(flags); + } else + handler(irq, dev_id, &shirq_fakeregs); } #endif _