aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-01-25 16:17:08 -0500
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-01-25 16:17:08 -0500
commit7b5da4be3718c6b4cd771fb82e3e481b04790f0e (patch)
treef3b0cb74ae90d64e80bb1ea29ef29d1a13745e2d /drivers/ide
parentd26805fd025abe1ab8785b23a7942cfb6ceffd75 (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')
-rw-r--r--drivers/ide/ide-probe.c13
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 */
977static int init_irq (ide_hwif_t *hwif) 972static 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 */