From: Quinn Tran <quinn.t...@cavium.com>

For target mode, any chip reset is triggered before target mode
is enabled will be hold off until user is ready to enable.  This
prevents the chip from starting or running before it is intended.

Signed-off-by: Quinn Tran <quinn.t...@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madh...@cavium.com>
---
 drivers/scsi/qla2xxx/qla_os.c | 28 +++++++++++++++++++++-------
 1 file changed, 21 insertions(+), 7 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 1ae31a119a37..9628fe4a967f 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -6047,12 +6047,27 @@ qla2x00_do_dpc(void *data)
                if (test_and_clear_bit
                    (ISP_ABORT_NEEDED, &base_vha->dpc_flags) &&
                    !test_bit(UNLOADING, &base_vha->dpc_flags)) {
+                       bool do_reset = true;
+
+                       switch (ql2x_ini_mode) {
+                       case QLA2XXX_INI_MODE_ENABLED:
+                               break;
+                       case QLA2XXX_INI_MODE_DISABLED:
+                               if (!qla_tgt_mode_enabled(base_vha))
+                                       do_reset = false;
+                               break;
+                       case QLA2XXX_INI_MODE_DUAL:
+                               if (!qla_dual_mode_enabled(base_vha))
+                                       do_reset = false;
+                               break;
+                       default:
+                               break;
+                       }
 
-                       ql_dbg(ql_dbg_dpc, base_vha, 0x4007,
-                           "ISP abort scheduled.\n");
-                       if (!(test_and_set_bit(ABORT_ISP_ACTIVE,
+                       if (do_reset && !(test_and_set_bit(ABORT_ISP_ACTIVE,
                            &base_vha->dpc_flags))) {
-
+                               ql_dbg(ql_dbg_dpc, base_vha, 0x4007,
+                                   "ISP abort scheduled.\n");
                                if (ha->isp_ops->abort_isp(base_vha)) {
                                        /* failed. retry later */
                                        set_bit(ISP_ABORT_NEEDED,
@@ -6060,10 +6075,9 @@ qla2x00_do_dpc(void *data)
                                }
                                clear_bit(ABORT_ISP_ACTIVE,
                                                &base_vha->dpc_flags);
+                               ql_dbg(ql_dbg_dpc, base_vha, 0x4008,
+                                   "ISP abort end.\n");
                        }
-
-                       ql_dbg(ql_dbg_dpc, base_vha, 0x4008,
-                           "ISP abort end.\n");
                }
 
                if (test_and_clear_bit(FCPORT_UPDATE_NEEDED,
-- 
2.12.0

Reply via email to