diff options
author | Jayamohan Kallickal <jayamohan.kallickal@emulex.com> | 2014-05-05 21:41:29 -0400 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2014-05-28 12:13:16 -0400 |
commit | 231881677083647271796bfa4fd385fbae8efaf6 (patch) | |
tree | 51cb5929152d665d99c506825e95785f53d826c7 /drivers/scsi/be2iscsi | |
parent | 8fc01eaa8793b7c2277b4a84c218a5f8fe45ccdd (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.c | 11 |
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 | ||