Commit f198cafa authored by Himanshu Madhani's avatar Himanshu Madhani Committed by Martin K. Petersen

qla2xxx: Allow fw to hold status before sending ABTS response.

Set bit 12 of additional firmware options 3 to let firmware
hold status IOCB until ABTS response is received from Target.
Signed-off-by: default avatarHimanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: default avatarGiridhar Malavali <giridhar.malavali@qlogic.com>
Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 9f8d3d5b
...@@ -121,6 +121,7 @@ extern int ql2xmdcapmask; ...@@ -121,6 +121,7 @@ extern int ql2xmdcapmask;
extern int ql2xmdenable; extern int ql2xmdenable;
extern int ql2xexlogins; extern int ql2xexlogins;
extern int ql2xexchoffld; extern int ql2xexchoffld;
extern int ql2xfwholdabts;
extern int qla2x00_loop_reset(scsi_qla_host_t *); extern int qla2x00_loop_reset(scsi_qla_host_t *);
extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int); extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int);
......
...@@ -2062,6 +2062,10 @@ qla24xx_update_fw_options(scsi_qla_host_t *vha) ...@@ -2062,6 +2062,10 @@ qla24xx_update_fw_options(scsi_qla_host_t *vha)
if (IS_P3P_TYPE(ha)) if (IS_P3P_TYPE(ha))
return; return;
/* Hold status IOCBs until ABTS response received. */
if (ql2xfwholdabts)
ha->fw_options[3] |= BIT_12;
/* Update Serial Link options. */ /* Update Serial Link options. */
if ((le16_to_cpu(ha->fw_seriallink_options24[0]) & BIT_0) == 0) if ((le16_to_cpu(ha->fw_seriallink_options24[0]) & BIT_0) == 0)
return; return;
...@@ -6410,12 +6414,17 @@ qla81xx_update_fw_options(scsi_qla_host_t *vha) ...@@ -6410,12 +6414,17 @@ qla81xx_update_fw_options(scsi_qla_host_t *vha)
{ {
struct qla_hw_data *ha = vha->hw; struct qla_hw_data *ha = vha->hw;
/* Hold status IOCBs until ABTS response received. */
if (ql2xfwholdabts)
ha->fw_options[3] |= BIT_12;
if (!ql2xetsenable) if (!ql2xetsenable)
return; goto out;
/* Enable ETS Burst. */ /* Enable ETS Burst. */
memset(ha->fw_options, 0, sizeof(ha->fw_options)); memset(ha->fw_options, 0, sizeof(ha->fw_options));
ha->fw_options[2] |= BIT_9; ha->fw_options[2] |= BIT_9;
out:
qla2x00_set_fw_options(vha, ha->fw_options); qla2x00_set_fw_options(vha, ha->fw_options);
} }
......
...@@ -233,6 +233,13 @@ MODULE_PARM_DESC(ql2xexchoffld, ...@@ -233,6 +233,13 @@ MODULE_PARM_DESC(ql2xexchoffld,
"Number of exchanges to offload. " "Number of exchanges to offload. "
"0 (Default)- Disabled."); "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 * SCSI host template entry points
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment