|
@@ -883,7 +883,18 @@ static void ahci_host_intr(struct ata_port *ap)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /* spurious interrupt */
|
|
|
+ /* hmmm... a spurious interupt */
|
|
|
+
|
|
|
+ /* ignore interim PIO setup fis interrupts */
|
|
|
+ if (ata_tag_valid(ap->active_tag)) {
|
|
|
+ struct ata_queued_cmd *qc =
|
|
|
+ ata_qc_from_tag(ap, ap->active_tag);
|
|
|
+
|
|
|
+ if (qc && qc->tf.protocol == ATA_PROT_PIO &&
|
|
|
+ (status & PORT_IRQ_PIOS_FIS))
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
if (ata_ratelimit())
|
|
|
ata_port_printk(ap, KERN_INFO, "spurious interrupt "
|
|
|
"(irq_stat 0x%x active_tag %d)\n",
|