mirror of
https://gitee.com/openharmony/kernel_linux
synced 2025-02-25 14:11:58 +00:00
[SCSI] be2iscsi: Fix lack of uninitialize pattern to FW
This patch sends uninitialize pattern to FW during driver unload which is expected by FW for cleanup Signed-off-by: John Soni Jose <sony.john-n@emulex.com> Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com> Reviewed-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
4f8d1bd273
commit
0283fbb18c
@ -732,6 +732,16 @@ int beiscsi_cmd_eq_create(struct be_ctrl_info *ctrl,
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* be_cmd_fw_initialize()- Initialize FW
|
||||||
|
* @ctrl: Pointer to function control structure
|
||||||
|
*
|
||||||
|
* Send FW initialize pattern for the function.
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* Success: 0
|
||||||
|
* Failure: Non-Zero value
|
||||||
|
**/
|
||||||
int be_cmd_fw_initialize(struct be_ctrl_info *ctrl)
|
int be_cmd_fw_initialize(struct be_ctrl_info *ctrl)
|
||||||
{
|
{
|
||||||
struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
|
struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
|
||||||
@ -762,6 +772,47 @@ int be_cmd_fw_initialize(struct be_ctrl_info *ctrl)
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* be_cmd_fw_uninit()- Uinitialize FW
|
||||||
|
* @ctrl: Pointer to function control structure
|
||||||
|
*
|
||||||
|
* Send FW uninitialize pattern for the function
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* Success: 0
|
||||||
|
* Failure: Non-Zero value
|
||||||
|
**/
|
||||||
|
int be_cmd_fw_uninit(struct be_ctrl_info *ctrl)
|
||||||
|
{
|
||||||
|
struct be_mcc_wrb *wrb = wrb_from_mbox(&ctrl->mbox_mem);
|
||||||
|
struct beiscsi_hba *phba = pci_get_drvdata(ctrl->pdev);
|
||||||
|
int status;
|
||||||
|
u8 *endian_check;
|
||||||
|
|
||||||
|
spin_lock(&ctrl->mbox_lock);
|
||||||
|
memset(wrb, 0, sizeof(*wrb));
|
||||||
|
|
||||||
|
endian_check = (u8 *) wrb;
|
||||||
|
*endian_check++ = 0xFF;
|
||||||
|
*endian_check++ = 0xAA;
|
||||||
|
*endian_check++ = 0xBB;
|
||||||
|
*endian_check++ = 0xFF;
|
||||||
|
*endian_check++ = 0xFF;
|
||||||
|
*endian_check++ = 0xCC;
|
||||||
|
*endian_check++ = 0xDD;
|
||||||
|
*endian_check = 0xFF;
|
||||||
|
|
||||||
|
be_dws_cpu_to_le(wrb, sizeof(*wrb));
|
||||||
|
|
||||||
|
status = be_mbox_notify(ctrl);
|
||||||
|
if (status)
|
||||||
|
beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_INIT,
|
||||||
|
"BC_%d : be_cmd_fw_uninit Failed\n");
|
||||||
|
|
||||||
|
spin_unlock(&ctrl->mbox_lock);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
int beiscsi_cmd_cq_create(struct be_ctrl_info *ctrl,
|
int beiscsi_cmd_cq_create(struct be_ctrl_info *ctrl,
|
||||||
struct be_queue_info *cq, struct be_queue_info *eq,
|
struct be_queue_info *cq, struct be_queue_info *eq,
|
||||||
bool sol_evts, bool no_delay, int coalesce_wm)
|
bool sol_evts, bool no_delay, int coalesce_wm)
|
||||||
|
@ -697,6 +697,7 @@ int beiscsi_mccq_compl(struct beiscsi_hba *phba,
|
|||||||
uint32_t tag, struct be_mcc_wrb **wrb, void *cmd_va);
|
uint32_t tag, struct be_mcc_wrb **wrb, void *cmd_va);
|
||||||
/*ISCSI Functuions */
|
/*ISCSI Functuions */
|
||||||
int be_cmd_fw_initialize(struct be_ctrl_info *ctrl);
|
int be_cmd_fw_initialize(struct be_ctrl_info *ctrl);
|
||||||
|
int be_cmd_fw_uninit(struct be_ctrl_info *ctrl);
|
||||||
|
|
||||||
struct be_mcc_wrb *wrb_from_mbox(struct be_dma_mem *mbox_mem);
|
struct be_mcc_wrb *wrb_from_mbox(struct be_dma_mem *mbox_mem);
|
||||||
struct be_mcc_wrb *wrb_from_mccq(struct beiscsi_hba *phba);
|
struct be_mcc_wrb *wrb_from_mccq(struct beiscsi_hba *phba);
|
||||||
|
@ -3430,6 +3430,7 @@ static void hwi_cleanup(struct beiscsi_hba *phba)
|
|||||||
beiscsi_cmd_q_destroy(ctrl, q, QTYPE_EQ);
|
beiscsi_cmd_q_destroy(ctrl, q, QTYPE_EQ);
|
||||||
}
|
}
|
||||||
be_mcc_queues_destroy(phba);
|
be_mcc_queues_destroy(phba);
|
||||||
|
be_cmd_fw_uninit(ctrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int be_mcc_queues_create(struct beiscsi_hba *phba,
|
static int be_mcc_queues_create(struct beiscsi_hba *phba,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user