ide: remove IRQF_DISABLED from IRQ flags for IDE IRQ handler
PATCH 1/3 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 <[email protected]>
--- drivers/ide/ide-probe.c | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-)
drivers/ide/ide-probe.c +2 -11
@@ -974,11 +974,6 @@ static int ide_init_queue(ide_drive_t *d* Much of the code is for correctly detecting/handling irq sharing * and irq serialization situations. This is somewhat complex because * it handles static as well as dynamic (PCMCIA) IDE interfaces. -* -* The IRQF_DISABLED in sa_flags means ide_intr() is always entered with -* interrupts completely disabled. This can be bad for interrupt latency, -* but anything else has led to problems on some machines. We re-enable -* interrupts as much as we can safely do in most places. */ static int init_irq (ide_hwif_t *hwif) {
@@ -1061,17 +1056,13 @@ static int init_irq (ide_hwif_t *hwif)* Allocate the irq, if not already obtained for another hwif */ if (!match || match->irq != hwif->irq) { -int sa =IRQF_DISABLED ; +int sa =0 ;#if defined(__mc68000__) || defined(CONFIG_APUS ) sa =IRQF_SHARED ;#endif /* __mc68000__ || CONFIG_APUS */ -if (IDE_CHIPSET_IS_PCI (hwif->chipset)) { +if (IDE_CHIPSET_IS_PCI (hwif->chipset)) sa =IRQF_SHARED ; -#ifndef CONFIG_IDEPCI_SHARE_IRQ - sa |=IRQF_DISABLED ; -#endif /* CONFIG_IDEPCI_SHARE_IRQ */ - }if (hwif->io_ports[IDE_CONTROL_OFFSET ])/* clear nIEN */