Skip to content

Commit

Permalink
ide: fix handling of unexpected IRQs vs request_irq()
Browse files Browse the repository at this point in the history
Add ide_host_enable_irqs() helper and use it in ide_host_register()
before registering ports.  Then remove no longer needed IRQ unmasking
from in init_irq().

This should fix the problem with "screaming" shared IRQ on the first
port (after request_irq() call while we have the unexpected IRQ pending
on the second port) which was uncovered by my rework of the serialized
interfaces support.

Reported-by: Frans Pop <elendil@planet.nl>
Tested-by: Frans Pop <elendil@planet.nl>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Bartlomiej Zolnierkiewicz authored and David S. Miller committed Jun 24, 2009
1 parent e01698a commit ffc36c7
Showing 1 changed file with 20 additions and 3 deletions.
23 changes: 20 additions & 3 deletions drivers/ide/ide-probe.c
Original file line number Diff line number Diff line change
Expand Up @@ -818,6 +818,24 @@ static int ide_port_setup_devices(ide_hwif_t *hwif)
return j;
}

static void ide_host_enable_irqs(struct ide_host *host)
{
ide_hwif_t *hwif;
int i;

ide_host_for_each_port(i, hwif, host) {
if (hwif == NULL)
continue;

/* clear any pending IRQs */
hwif->tp_ops->read_status(hwif);

/* unmask IRQs */
if (hwif->io_ports.ctl_addr)
hwif->tp_ops->write_devctl(hwif, ATA_DEVCTL_OBS);
}
}

/*
* This routine sets up the IRQ for an IDE interface.
*/
Expand All @@ -831,9 +849,6 @@ static int init_irq (ide_hwif_t *hwif)
if (irq_handler == NULL)
irq_handler = ide_intr;

if (io_ports->ctl_addr)
hwif->tp_ops->write_devctl(hwif, ATA_DEVCTL_OBS);

if (request_irq(hwif->irq, irq_handler, sa, hwif->name, hwif))
goto out_up;

Expand Down Expand Up @@ -1404,6 +1419,8 @@ int ide_host_register(struct ide_host *host, const struct ide_port_info *d,
ide_port_tune_devices(hwif);
}

ide_host_enable_irqs(host);

ide_host_for_each_port(i, hwif, host) {
if (hwif == NULL)
continue;
Expand Down

0 comments on commit ffc36c7

Please sign in to comment.