[SCSI] be2iscsi: Fix chute cleanup during drivers unload.
Signed-off-by: John Soni Jose <sony.john-n@emulex.com> Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
Родитель
1e4be6ff41
Коммит
bd41c2bd86
|
@ -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,
|
||||||
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)
|
||||||
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)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче