|
@@ -841,6 +841,7 @@ static void unexpected_intr(int irq, ide_hwif_t *hwif)
|
|
|
irqreturn_t ide_intr (int irq, void *dev_id)
|
|
|
{
|
|
|
ide_hwif_t *hwif = (ide_hwif_t *)dev_id;
|
|
|
+ struct ide_host *host = hwif->host;
|
|
|
ide_drive_t *uninitialized_var(drive);
|
|
|
ide_handler_t *handler;
|
|
|
unsigned long flags;
|
|
@@ -848,8 +849,8 @@ irqreturn_t ide_intr (int irq, void *dev_id)
|
|
|
irqreturn_t irq_ret = IRQ_NONE;
|
|
|
int plug_device = 0;
|
|
|
|
|
|
- if (hwif->host->host_flags & IDE_HFLAG_SERIALIZE) {
|
|
|
- if (hwif != hwif->host->cur_port)
|
|
|
+ if (host->host_flags & IDE_HFLAG_SERIALIZE) {
|
|
|
+ if (hwif != host->cur_port)
|
|
|
goto out_early;
|
|
|
}
|
|
|
|
|
@@ -872,27 +873,19 @@ irqreturn_t ide_intr (int irq, void *dev_id)
|
|
|
*
|
|
|
* For PCI, we cannot tell the difference,
|
|
|
* so in that case we just ignore it and hope it goes away.
|
|
|
- *
|
|
|
- * FIXME: unexpected_intr should be hwif-> then we can
|
|
|
- * remove all the ifdef PCI crap
|
|
|
*/
|
|
|
-#ifdef CONFIG_BLK_DEV_IDEPCI
|
|
|
- if (hwif->chipset != ide_pci)
|
|
|
-#endif /* CONFIG_BLK_DEV_IDEPCI */
|
|
|
- {
|
|
|
+ if ((host->irq_flags & IRQF_SHARED) == 0) {
|
|
|
/*
|
|
|
* Probably not a shared PCI interrupt,
|
|
|
* so we can safely try to do something about it:
|
|
|
*/
|
|
|
unexpected_intr(irq, hwif);
|
|
|
-#ifdef CONFIG_BLK_DEV_IDEPCI
|
|
|
} else {
|
|
|
/*
|
|
|
* Whack the status register, just in case
|
|
|
* we have a leftover pending IRQ.
|
|
|
*/
|
|
|
(void)hwif->tp_ops->read_status(hwif);
|
|
|
-#endif /* CONFIG_BLK_DEV_IDEPCI */
|
|
|
}
|
|
|
goto out;
|
|
|
}
|