Tejun Heo wrote:
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;
NAK unless you can give me some reasonable justification for clearing
the interrupts here.
Frozen or not, this is not really an appropriate place to put this.
Jeff
-
: 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