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 --- devel/kernel/irq/manage.c~debug-shared-irqs-fix-2 2006-02-03 03:16:23.000000000 -0800 +++ devel-akpm/kernel/irq/manage.c 2006-02-03 03:16:23.000000000 -0800 @@ -391,7 +391,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 _