PMP always requires SRST to be enabled. Also, hardreset reports classification code from the first device when PMP is attached. Update ata_eh_reset() such that followup softreset is performed if the controller is PMP capable. Signed-off-by: Tejun Heo <htejun@xxxxxxxxx> --- drivers/scsi/libata-eh.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) 2cf75f99537b7ef01bacb8c1f946b1bd2f7ba975 diff --git a/drivers/scsi/libata-eh.c b/drivers/scsi/libata-eh.c index 122226b..0a6f17e 100644 --- a/drivers/scsi/libata-eh.c +++ b/drivers/scsi/libata-eh.c @@ -1552,13 +1552,16 @@ static int ata_do_reset(struct ata_link return 0; } -static int ata_eh_followup_srst_needed(int rc, int classify, +static int ata_eh_followup_srst_needed(struct ata_port *ap, + int rc, int classify, const unsigned int *classes) { if (rc == -EAGAIN) return 1; if (rc != 0) return 0; + if (ap->flags & ATA_FLAG_PMP) + return 1; if (classify && classes[0] == ATA_DEV_UNKNOWN) return 1; return 0; @@ -1633,7 +1636,7 @@ int ata_eh_reset(struct ata_link *link, did_followup_srst = 0; if (reset == hardreset && - ata_eh_followup_srst_needed(rc, classify, classes)) { + ata_eh_followup_srst_needed(link->ap, rc, classify, classes)) { /* okay, let's do follow-up softreset */ did_followup_srst = 1; reset = softreset; -- 1.3.2 - : 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