Commit bd41c2bd authored by Jayamohan Kallickal's avatar Jayamohan Kallickal Committed by James Bottomley

[SCSI] be2iscsi: Fix chute cleanup during drivers unload.

Signed-off-by: default avatarJohn Soni Jose <sony.john-n@emulex.com>
Signed-off-by: default avatarJayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 1e4be6ff
...@@ -4433,10 +4433,16 @@ static void beiscsi_clean_port(struct beiscsi_hba *phba) ...@@ -4433,10 +4433,16 @@ static void beiscsi_clean_port(struct beiscsi_hba *phba)
int mgmt_status, ulp_num; int mgmt_status, ulp_num;
struct ulp_cid_info *ptr_cid_info = NULL; struct ulp_cid_info *ptr_cid_info = NULL;
mgmt_status = mgmt_epfw_cleanup(phba, CMD_CONNECTION_CHUTE_0); for (ulp_num = 0; ulp_num < BEISCSI_ULP_COUNT; ulp_num++) {
if (mgmt_status) if (test_bit(ulp_num, (void *)&phba->fw_config.ulp_supported)) {
beiscsi_log(phba, KERN_WARNING, BEISCSI_LOG_INIT, mgmt_status = mgmt_epfw_cleanup(phba, ulp_num);
"BM_%d : mgmt_epfw_cleanup FAILED\n"); if (mgmt_status)
beiscsi_log(phba, KERN_WARNING,
BEISCSI_LOG_INIT,
"BM_%d : mgmt_epfw_cleanup FAILED"
" for ULP_%d\n", ulp_num);
}
}
hwi_purge_eq(phba); hwi_purge_eq(phba);
hwi_cleanup(phba); hwi_cleanup(phba);
......
...@@ -491,7 +491,16 @@ unsigned int mgmt_vendor_specific_fw_cmd(struct be_ctrl_info *ctrl, ...@@ -491,7 +491,16 @@ unsigned int mgmt_vendor_specific_fw_cmd(struct be_ctrl_info *ctrl,
return tag; return tag;
} }
int mgmt_epfw_cleanup(struct beiscsi_hba *phba, unsigned short chute) /**
* mgmt_epfw_cleanup()- Inform FW to cleanup data structures.
* @phba: pointer to dev priv structure
* @ulp_num: ULP number.
*
* return
* Success: 0
* Failure: Non-Zero Value
**/
int mgmt_epfw_cleanup(struct beiscsi_hba *phba, unsigned short ulp_num)
{ {
struct be_ctrl_info *ctrl = &phba->ctrl; struct be_ctrl_info *ctrl = &phba->ctrl;
struct be_mcc_wrb *wrb = wrb_from_mccq(phba); struct be_mcc_wrb *wrb = wrb_from_mccq(phba);
...@@ -505,9 +514,9 @@ int mgmt_epfw_cleanup(struct beiscsi_hba *phba, unsigned short chute) ...@@ -505,9 +514,9 @@ int mgmt_epfw_cleanup(struct beiscsi_hba *phba, unsigned short chute)
be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ISCSI, be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ISCSI,
OPCODE_COMMON_ISCSI_CLEANUP, sizeof(*req)); OPCODE_COMMON_ISCSI_CLEANUP, sizeof(*req));
req->chute = chute; req->chute = (1 << ulp_num);
req->hdr_ring_id = cpu_to_le16(HWI_GET_DEF_HDRQ_ID(phba, 0)); req->hdr_ring_id = cpu_to_le16(HWI_GET_DEF_HDRQ_ID(phba, ulp_num));
req->data_ring_id = cpu_to_le16(HWI_GET_DEF_BUFQ_ID(phba, 0)); req->data_ring_id = cpu_to_le16(HWI_GET_DEF_BUFQ_ID(phba, ulp_num));
status = be_mcc_notify_wait(phba); status = be_mcc_notify_wait(phba);
if (status) if (status)
......
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