]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
qla2xxx: Allow fw to hold status before sending ABTS response.
authorHimanshu Madhani <himanshu.madhani@qlogic.com>
Fri, 26 Feb 2016 10:44:44 +0000 (16:14 +0530)
committerChuck Anderson <chuck.anderson@oracle.com>
Wed, 16 Mar 2016 11:39:10 +0000 (04:39 -0700)
Orabug: 22863553

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>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Dan Duval <dan.duval@oracle.com>
drivers/scsi/qla2xxx/qla_gbl.h
drivers/scsi/qla2xxx/qla_init.c
drivers/scsi/qla2xxx/qla_os.c

index 7686bfe9a4a9e7ac42022c99321d20e0ff4c55f5..413a51161f5795aa883c037b382b7d383a210d21 100644 (file)
@@ -117,6 +117,7 @@ extern int ql2xdontresethba;
 extern uint64_t ql2xmaxlun;
 extern int ql2xmdcapmask;
 extern int ql2xmdenable;
+extern int ql2xfwholdabts;
 
 extern int qla2x00_loop_reset(scsi_qla_host_t *);
 extern void qla2x00_abort_all_cmds(scsi_qla_host_t *, int);
index ce4e7a69c15de61769b5380f9b47fe8b545a8dad..8a20c792eb0ebd9c560f27e5a28430da8cb2c7d3 100644 (file)
@@ -2045,6 +2045,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;
@@ -6370,12 +6374,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);
 }
 
index 71b3df87f08b4eb767e38cb98cc46c40714414d7..82e07155d26cf5c467a16a2f474482775f69d289 100644 (file)
@@ -221,6 +221,13 @@ MODULE_PARM_DESC(ql2xmdenable,
                "0 - MiniDump disabled. "
                "1 (Default) - MiniDump enabled.");
 
+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
  */