From acb792b101fd685262c93b75ebe4c033f2d2c079 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Thu, 26 Jan 2006 14:34:45 +0000 Subject: 2006-01-26 Samuel Thibault * linux/dev/arch/i386/kernel/irq.c (linux_intr): Disable interrupts if the driver requested it through request_irq(). --- ChangeLog | 3 +++ linux/dev/arch/i386/kernel/irq.c | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/ChangeLog b/ChangeLog index f3e845a..77cf59a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2006-01-26 Samuel Thibault + * linux/dev/arch/i386/kernel/irq.c (linux_intr): Disable interrupts + if the driver requested it through request_irq(). + * linux/dev/drivers/block/ide.c (read_intr): Set the IRQ handler before issuing a request. (write_intr): Likewise. diff --git a/linux/dev/arch/i386/kernel/irq.c b/linux/dev/arch/i386/kernel/irq.c index 1543234..e9dfe6a 100644 --- a/linux/dev/arch/i386/kernel/irq.c +++ b/linux/dev/arch/i386/kernel/irq.c @@ -103,16 +103,23 @@ linux_intr (int irq) { struct pt_regs regs; struct linux_action *action = *(irq_action + irq); + unsigned long flags; kstat.interrupts[irq]++; intr_count++; + save_flags (flags); + if (action && (action->flags & SA_INTERRUPT)) + cli (); + while (action) { action->handler (irq, action->dev_id, ®s); action = action->next; } + restore_flags (flags); + intr_count--; /* Not used. by OKUJI Yoshinori. */ -- cgit v1.2.3