diff mbox

qla2xxx: Mask off Scope bits in retry delay.

Message ID 20180606154142.11445-1-himanshu.madhani@cavium.com (mailing list archive)
State Accepted
Headers show

Commit Message

Madhani, Himanshu June 6, 2018, 3:41 p.m. UTC
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>
---
Hi Martin, 

This patch fixes driver retry delay timer with a specific target which
returns Scope field in the BUSY status. Driver was translating this 
Scope bits as timeout delay value and was wating for 27 minutes for retry. 

Please apply this to 4.18/scsi-fixes at your earliest convenience.

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

Comments

Ewan Milne June 6, 2018, 4:02 p.m. UTC | #1
On Wed, 2018-06-06 at 08:41 -0700, Himanshu Madhani wrote:
> 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>
> ---
> Hi Martin, 
> 
> This patch fixes driver retry delay timer with a specific target which
> returns Scope field in the BUSY status. Driver was translating this 
> Scope bits as timeout delay value and was wating for 27 minutes for retry. 
> 
> Please apply this to 4.18/scsi-fixes at your earliest convenience.
> 
> Thanks,
> Himanshu
> ---
>  drivers/scsi/qla2xxx/qla_isr.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
> index a3dc83f9444d..68560a097ae1 100644
> --- a/drivers/scsi/qla2xxx/qla_isr.c
> +++ b/drivers/scsi/qla2xxx/qla_isr.c
> @@ -2494,8 +2494,12 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
>  		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);

Reviewed-by: Ewan D. Milne <emilne@redhat.com>
Martin Wilck June 7, 2018, 8:10 a.m. UTC | #2
On Wed, 2018-06-06 at 08:41 -0700, Himanshu Madhani wrote:
> 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>

Tested successfully by SUSE customers.

Acked-by: Martin Wilck <mwilck@suse.com>
Martin K. Petersen June 8, 2018, 12:30 a.m. UTC | #3
Himanshu,

> 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.

Applied to 4.18/scsi-fixes. Thank you!
diff mbox

Patch

diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index a3dc83f9444d..68560a097ae1 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -2494,8 +2494,12 @@  qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
 		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);