Update the stock interrupt handler such that it unconditionally clears interrupts from a frozen port. Signed-off-by: Tejun Heo <htejun@xxxxxxxxx> --- drivers/scsi/libata-core.c | 14 +++++++++++--- 1 files changed, 11 insertions(+), 3 deletions(-) 07f4b12b7a523dc928576fd5a2f18f40969a47ee diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index c7b7de9..d4c75cb 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c @@ -4517,12 +4517,20 @@ irqreturn_t ata_interrupt (int irq, void for (i = 0; i < host_set->n_ports; i++) { struct ata_port *ap; + struct ata_queued_cmd *qc; ap = host_set->ports[i]; - if (ap && - !(ap->flags & (ATA_FLAG_DISABLED | ATA_FLAG_NOINTR))) { - struct ata_queued_cmd *qc; + if (unlikely(!ap || ap->flags & ATA_FLAG_DISABLED)) + continue; + if (unlikely(ap->flags & ATA_FLAG_FROZEN)) { + /* port frozen, ack unconditionally */ + ata_irq_ack(ap, 0); + handled = 1; + continue; + } + + if (!(ap->flags & ATA_FLAG_NOINTR)) { qc = ata_qc_from_tag(ap, ap->active_tag); if (qc && (!(qc->tf.ctl & ATA_NIEN)) && (qc->flags & ATA_QCFLAG_ACTIVE)) -- 1.2.4 - : send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html