Tejun Heo wrote:
Clearing IRQ from ata_sff_error_handler() is necessary only when the
port is gonna be thawed before performing EH actions and some
controllers don't like being accessed after certain fail modes until
they're reset. Clear IRQ iff the port is being thawed. Also, remove
unnecessary ata_sff_sync() while at it.
Signed-off-by: Tejun Heo <tj@xxxxxxxxxx>
---
drivers/ata/libata-sff.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
index 4b47394..b9fb068 100644
--- a/drivers/ata/libata-sff.c
+++ b/drivers/ata/libata-sff.c
@@ -2119,11 +2119,13 @@ void ata_sff_error_handler(struct ata_port *ap)
}
ap->ops->bmdma_stop(qc);
- }
- ata_sff_sync(ap); /* FIXME: We don't need this */
- ap->ops->sff_check_status(ap);
- ap->ops->sff_irq_clear(ap);
+ /* if we're gonna thaw, make sure IRQ is clear */
+ if (thaw) {
+ ap->ops->sff_check_status(ap);
+ ap->ops->sff_irq_clear(ap);
+ }
+ }
I'll allow it, but, this description is not strictly true. This
clearing was done in the error handler unconditionally in an attempt to
catch outstanding conditions. The logic being that it is safer (FSVO
safe) to clear on error just in case interrupts were screaming.
Jeff
--
To unsubscribe from this list: 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