Blob Blame History Raw
From patchwork Wed Jun  6 15:41:42 2018
From: himanshu.madhani@cavium.com
X-Patchwork-Id: 10450567
Date: Sat, 24 Mar 2018 16:15:30 -0700
Subject: [PATCH] qla2xxx: Mask off Scope bits in retry delay.
References: bsc#1068054
Git-commit: 3cedc8797b9c0f2222fd45a01f849c57c088828b
Patch-mainline: v4.18-rc1
From: Anil Gurumurthy <anil.gurumurthy@cavium.com>

Some newer target uses "Status Qualifier" response in a returned
"Busy Status". This new response code of 0x4001, which is "Scope" bits,
translates to "Affects all units accessible by target".
Due to this new value returned in the Scope bits, driver was using
that value as timeout value which resulted into driver waiting for 27min
timeout.

This patch masks off this Scope bits so that driver does not use
this value as retry delay time.

Cc: <stable@vger.kernel.org>
Signed-off-by: Anil Gurumurthy <anil.gurumurthy@cavium.com>
Signed-off-by: Giridhar Malavali <giridhar.malavali@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
Reviewed-by: dbond@suse.com
Reviewed-by: Ewan D. Milne <emilne@redhat.com>
Reviewed-by: Martin Wilck <mwilck@suse.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>

---
 drivers/scsi/qla2xxx/qla_isr.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -2491,8 +2491,12 @@ qla2x00_status_entry(scsi_qla_host_t *vh
 		ox_id = le16_to_cpu(sts24->ox_id);
 		par_sense_len = sizeof(sts24->data);
 		/* Valid values of the retry delay timer are 0x1-0xffef */
-		if (sts24->retry_delay > 0 && sts24->retry_delay < 0xfff1)
-			retry_delay = sts24->retry_delay;
+		if (sts24->retry_delay > 0 && sts24->retry_delay < 0xfff1) {
+			retry_delay = sts24->retry_delay & 0x3fff;
+			ql_dbg(ql_dbg_io, sp->vha, 0x3033,
+			    "%s: scope=%#x retry_delay=%#x\n", __func__,
+			    sts24->retry_delay >> 14, retry_delay);
+		}
 	} else {
 		if (scsi_status & SS_SENSE_LEN_VALID)
 			sense_len = le16_to_cpu(sts->req_sense_length);