diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-01-25 16:17:08 -0500 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2008-01-25 16:17:08 -0500 |
commit | 7b5da4be3718c6b4cd771fb82e3e481b04790f0e (patch) | |
tree | f3b0cb74ae90d64e80bb1ea29ef29d1a13745e2d /drivers/ide/ide-probe.c | |
parent | d26805fd025abe1ab8785b23a7942cfb6ceffd75 (diff) |
ide: remove IRQF_DISABLED from IRQ flags for IDE IRQ handler
IRQF_DISABLED is not needed because the first thing that ide_intr()
(IDE IRQ handler) does is calling spin_lock_irqsave() which disables
local IRQs (IRQ unmasking is later handled by drive->unmask).
kernel/irq/handle.c:
irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action)
...
if (!(action->flags & IRQF_DISABLED))
local_irq_enable_in_hardirq();
do {
ret = action->handler(irq, action->dev_id);
if (ret == IRQ_HANDLED)
status |= action->flags;
retval |= ret;
action = action->next;
} while (action);
...
drivers/ide/ide-io.c:
irqreturn_t ide_intr (int irq, void *dev_id)
...
spin_lock_irqsave(&ide_lock, flags);
...
spin_unlock(&ide_lock);
...
if (drive->unmask)
local_irq_enable_in_hardirq();
...
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/ide-probe.c')
-rw-r--r-- | drivers/ide/ide-probe.c | 13 |
1 files changed, 2 insertions, 11 deletions
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index 0cb3d2bb3ab9..0dda7ac0d951 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c | |||
@@ -968,11 +968,6 @@ static int ide_init_queue(ide_drive_t *drive) | |||
968 | * Much of the code is for correctly detecting/handling irq sharing | 968 | * Much of the code is for correctly detecting/handling irq sharing |
969 | * and irq serialization situations. This is somewhat complex because | 969 | * and irq serialization situations. This is somewhat complex because |
970 | * it handles static as well as dynamic (PCMCIA) IDE interfaces. | 970 | * it handles static as well as dynamic (PCMCIA) IDE interfaces. |
971 | * | ||
972 | * The IRQF_DISABLED in sa_flags means ide_intr() is always entered with | ||
973 | * interrupts completely disabled. This can be bad for interrupt latency, | ||
974 | * but anything else has led to problems on some machines. We re-enable | ||
975 | * interrupts as much as we can safely do in most places. | ||
976 | */ | 971 | */ |
977 | static int init_irq (ide_hwif_t *hwif) | 972 | static int init_irq (ide_hwif_t *hwif) |
978 | { | 973 | { |
@@ -1055,17 +1050,13 @@ static int init_irq (ide_hwif_t *hwif) | |||
1055 | * Allocate the irq, if not already obtained for another hwif | 1050 | * Allocate the irq, if not already obtained for another hwif |
1056 | */ | 1051 | */ |
1057 | if (!match || match->irq != hwif->irq) { | 1052 | if (!match || match->irq != hwif->irq) { |
1058 | int sa = IRQF_DISABLED; | 1053 | int sa = 0; |
1059 | #if defined(__mc68000__) || defined(CONFIG_APUS) | 1054 | #if defined(__mc68000__) || defined(CONFIG_APUS) |
1060 | sa = IRQF_SHARED; | 1055 | sa = IRQF_SHARED; |
1061 | #endif /* __mc68000__ || CONFIG_APUS */ | 1056 | #endif /* __mc68000__ || CONFIG_APUS */ |
1062 | 1057 | ||
1063 | if (IDE_CHIPSET_IS_PCI(hwif->chipset)) { | 1058 | if (IDE_CHIPSET_IS_PCI(hwif->chipset)) |
1064 | sa = IRQF_SHARED; | 1059 | sa = IRQF_SHARED; |
1065 | #ifndef CONFIG_IDEPCI_SHARE_IRQ | ||
1066 | sa |= IRQF_DISABLED; | ||
1067 | #endif /* CONFIG_IDEPCI_SHARE_IRQ */ | ||
1068 | } | ||
1069 | 1060 | ||
1070 | if (hwif->io_ports[IDE_CONTROL_OFFSET]) | 1061 | if (hwif->io_ports[IDE_CONTROL_OFFSET]) |
1071 | /* clear nIEN */ | 1062 | /* clear nIEN */ |