diff mbox

[v2,03/11] qla2xxx: Allow fw to hold status before sending ABTS response.

Message ID 1453914218-380-4-git-send-email-himanshu.madhani@qlogic.com (mailing list archive)
State Accepted, archived
Headers show

Commit Message

Himanshu Madhani Jan. 27, 2016, 5:03 p.m. UTC
Set bit 12 of additional firmware options 3 to let firmware
hold status IOCB until ABTS response is received from Target.

Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
---
 drivers/scsi/qla2xxx/qla_gbl.h  |    1 +
 drivers/scsi/qla2xxx/qla_init.c |   11 ++++++++++-
 drivers/scsi/qla2xxx/qla_os.c   |    7 +++++++
 3 files changed, 18 insertions(+), 1 deletions(-)

Comments

Johannes Thumshirn Jan. 28, 2016, 8:35 a.m. UTC | #1
On Wed, Jan 27, 2016 at 12:03:30PM -0500, Himanshu Madhani wrote:
> Set bit 12 of additional firmware options 3 to let firmware
> hold status IOCB until ABTS response is received from Target.
> 
> Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
> Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com>
> ---
>  drivers/scsi/qla2xxx/qla_gbl.h  |    1 +
>  drivers/scsi/qla2xxx/qla_init.c |   11 ++++++++++-
>  drivers/scsi/qla2xxx/qla_os.c   |    7 +++++++
>  3 files changed, 18 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
> index 0103e46..1bfdcdf 100644
> --- a/drivers/scsi/qla2xxx/qla_gbl.h
> +++ b/drivers/scsi/qla2xxx/qla_gbl.h
> @@ -121,6 +121,7 @@ extern int ql2xmdcapmask;
>  extern int ql2xmdenable;
>  extern int ql2xexlogins;
>  extern int ql2xexchoffld;
> +extern int ql2xfwholdabts;
>  
>  extern int qla2x00_loop_reset(scsi_qla_host_t *);
>  extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int);
> diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
> index a663ff6..cf487b9 100644
> --- a/drivers/scsi/qla2xxx/qla_init.c
> +++ b/drivers/scsi/qla2xxx/qla_init.c
> @@ -2062,6 +2062,10 @@ qla24xx_update_fw_options(scsi_qla_host_t *vha)
>  	if (IS_P3P_TYPE(ha))
>  		return;
>  
> +	/*  Hold status IOCBs until ABTS response received. */
> +	if (ql2xfwholdabts)
> +		ha->fw_options[3] |= BIT_12;
> +
>  	/* Update Serial Link options. */
>  	if ((le16_to_cpu(ha->fw_seriallink_options24[0]) & BIT_0) == 0)
>  		return;
> @@ -6410,12 +6414,17 @@ qla81xx_update_fw_options(scsi_qla_host_t *vha)
>  {
>  	struct qla_hw_data *ha = vha->hw;
>  
> +	/*  Hold status IOCBs until ABTS response received. */
> +	if (ql2xfwholdabts)
> +		ha->fw_options[3] |= BIT_12;
> +
>  	if (!ql2xetsenable)
> -		return;
> +		goto out;
>  
>  	/* Enable ETS Burst. */
>  	memset(ha->fw_options, 0, sizeof(ha->fw_options));
>  	ha->fw_options[2] |= BIT_9;
> +out:
>  	qla2x00_set_fw_options(vha, ha->fw_options);
>  }
>  
> diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
> index f1788db..d94a236 100644
> --- a/drivers/scsi/qla2xxx/qla_os.c
> +++ b/drivers/scsi/qla2xxx/qla_os.c
> @@ -233,6 +233,13 @@ MODULE_PARM_DESC(ql2xexchoffld,
>  		 "Number of exchanges to offload. "
>  		 "0 (Default)- Disabled.");
>  
> +int ql2xfwholdabts = 0;
> +module_param(ql2xfwholdabts, int, S_IRUGO);
> +MODULE_PARM_DESC(ql2xfwholdabts,
> +		"Allow FW to hold status IOCB until ABTS rsp received. "
> +		"0 (Default) Do not set fw option. "
> +		"1 - Set fw option to hold ABTS.");
> +
>  /*
>   * SCSI host template entry points
>   */
> -- 
> 1.7.7
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
diff mbox

Patch

diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
index 0103e46..1bfdcdf 100644
--- a/drivers/scsi/qla2xxx/qla_gbl.h
+++ b/drivers/scsi/qla2xxx/qla_gbl.h
@@ -121,6 +121,7 @@  extern int ql2xmdcapmask;
 extern int ql2xmdenable;
 extern int ql2xexlogins;
 extern int ql2xexchoffld;
+extern int ql2xfwholdabts;
 
 extern int qla2x00_loop_reset(scsi_qla_host_t *);
 extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int);
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
index a663ff6..cf487b9 100644
--- a/drivers/scsi/qla2xxx/qla_init.c
+++ b/drivers/scsi/qla2xxx/qla_init.c
@@ -2062,6 +2062,10 @@  qla24xx_update_fw_options(scsi_qla_host_t *vha)
 	if (IS_P3P_TYPE(ha))
 		return;
 
+	/*  Hold status IOCBs until ABTS response received. */
+	if (ql2xfwholdabts)
+		ha->fw_options[3] |= BIT_12;
+
 	/* Update Serial Link options. */
 	if ((le16_to_cpu(ha->fw_seriallink_options24[0]) & BIT_0) == 0)
 		return;
@@ -6410,12 +6414,17 @@  qla81xx_update_fw_options(scsi_qla_host_t *vha)
 {
 	struct qla_hw_data *ha = vha->hw;
 
+	/*  Hold status IOCBs until ABTS response received. */
+	if (ql2xfwholdabts)
+		ha->fw_options[3] |= BIT_12;
+
 	if (!ql2xetsenable)
-		return;
+		goto out;
 
 	/* Enable ETS Burst. */
 	memset(ha->fw_options, 0, sizeof(ha->fw_options));
 	ha->fw_options[2] |= BIT_9;
+out:
 	qla2x00_set_fw_options(vha, ha->fw_options);
 }
 
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index f1788db..d94a236 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -233,6 +233,13 @@  MODULE_PARM_DESC(ql2xexchoffld,
 		 "Number of exchanges to offload. "
 		 "0 (Default)- Disabled.");
 
+int ql2xfwholdabts = 0;
+module_param(ql2xfwholdabts, int, S_IRUGO);
+MODULE_PARM_DESC(ql2xfwholdabts,
+		"Allow FW to hold status IOCB until ABTS rsp received. "
+		"0 (Default) Do not set fw option. "
+		"1 - Set fw option to hold ABTS.");
+
 /*
  * SCSI host template entry points
  */