aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/be2iscsi
diff options
context:
space:
mode:
authorJayamohan Kallickal <jayamohan.kallickal@emulex.com>2014-05-05 21:41:29 -0400
committerChristoph Hellwig <hch@lst.de>2014-05-28 12:13:16 -0400
commit231881677083647271796bfa4fd385fbae8efaf6 (patch)
tree51cb5929152d665d99c506825e95785f53d826c7 /drivers/scsi/be2iscsi
parent8fc01eaa8793b7c2277b4a84c218a5f8fe45ccdd (diff)
be2iscsi: Fix destroy MCC-CQ before MCC-EQ is destroyed
EQ teardown should happen only after all CQ are destroyed. In some FW config, adapter goes into a freeze state. This fix moves teardown of MCC-Q before the EQ teardown happens. Signed-off-by: John Soni Jose <sony.john-n@emulex.com> Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'drivers/scsi/be2iscsi')
-rw-r--r--drivers/scsi/be2iscsi/be_main.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
index e202ab32d13e..554349029628 100644
--- a/drivers/scsi/be2iscsi/be_main.c
+++ b/drivers/scsi/be2iscsi/be_main.c
@@ -3685,7 +3685,7 @@ static void hwi_cleanup(struct beiscsi_hba *phba)
3685 struct hwi_controller *phwi_ctrlr; 3685 struct hwi_controller *phwi_ctrlr;
3686 struct hwi_context_memory *phwi_context; 3686 struct hwi_context_memory *phwi_context;
3687 struct hwi_async_pdu_context *pasync_ctx; 3687 struct hwi_async_pdu_context *pasync_ctx;
3688 int i, eq_num, ulp_num; 3688 int i, eq_for_mcc, ulp_num;
3689 3689
3690 phwi_ctrlr = phba->phwi_ctrlr; 3690 phwi_ctrlr = phba->phwi_ctrlr;
3691 phwi_context = phwi_ctrlr->phwi_ctxt; 3691 phwi_context = phwi_ctrlr->phwi_ctxt;
@@ -3722,16 +3722,17 @@ static void hwi_cleanup(struct beiscsi_hba *phba)
3722 if (q->created) 3722 if (q->created)
3723 beiscsi_cmd_q_destroy(ctrl, q, QTYPE_CQ); 3723 beiscsi_cmd_q_destroy(ctrl, q, QTYPE_CQ);
3724 } 3724 }
3725
3726 be_mcc_queues_destroy(phba);
3725 if (phba->msix_enabled) 3727 if (phba->msix_enabled)
3726 eq_num = 1; 3728 eq_for_mcc = 1;
3727 else 3729 else
3728 eq_num = 0; 3730 eq_for_mcc = 0;
3729 for (i = 0; i < (phba->num_cpus + eq_num); i++) { 3731 for (i = 0; i < (phba->num_cpus + eq_for_mcc); i++) {
3730 q = &phwi_context->be_eq[i].q; 3732 q = &phwi_context->be_eq[i].q;
3731 if (q->created) 3733 if (q->created)
3732 beiscsi_cmd_q_destroy(ctrl, q, QTYPE_EQ); 3734 beiscsi_cmd_q_destroy(ctrl, q, QTYPE_EQ);
3733 } 3735 }
3734 be_mcc_queues_destroy(phba);
3735 be_cmd_fw_uninit(ctrl); 3736 be_cmd_fw_uninit(ctrl);
3736} 3737}
3737 3738