Commit d7401055 authored by Jitendra Bhivare's avatar Jitendra Bhivare Committed by Martin K. Petersen

scsi: be2iscsi: Fix iSCSI cmd cleanup IOCTL

Prepare the IOCTL with appropriate sizes of buffers of V0 and V1.
Set missing chute number in V1 IOCTL.
Signed-off-by: default avatarJitendra Bhivare <jitendra.bhivare@broadcom.com>
Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 3f7f62ee
...@@ -1700,31 +1700,34 @@ int beiscsi_cmd_iscsi_cleanup(struct beiscsi_hba *phba, unsigned short ulp) ...@@ -1700,31 +1700,34 @@ int beiscsi_cmd_iscsi_cleanup(struct beiscsi_hba *phba, unsigned short ulp)
struct be_ctrl_info *ctrl = &phba->ctrl; struct be_ctrl_info *ctrl = &phba->ctrl;
struct iscsi_cleanup_req_v1 *req_v1; struct iscsi_cleanup_req_v1 *req_v1;
struct iscsi_cleanup_req *req; struct iscsi_cleanup_req *req;
u16 hdr_ring_id, data_ring_id;
struct be_mcc_wrb *wrb; struct be_mcc_wrb *wrb;
int status; int status;
mutex_lock(&ctrl->mbox_lock); mutex_lock(&ctrl->mbox_lock);
wrb = wrb_from_mbox(&ctrl->mbox_mem); wrb = wrb_from_mbox(&ctrl->mbox_mem);
req = embedded_payload(wrb);
be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ISCSI,
OPCODE_COMMON_ISCSI_CLEANUP, sizeof(*req));
/** hdr_ring_id = HWI_GET_DEF_HDRQ_ID(phba, ulp);
* TODO: Check with FW folks the chute value to be set. data_ring_id = HWI_GET_DEF_BUFQ_ID(phba, ulp);
* For now, use the ULP_MASK as the chute value.
*/
if (is_chip_be2_be3r(phba)) { if (is_chip_be2_be3r(phba)) {
req = embedded_payload(wrb);
be_wrb_hdr_prepare(wrb, sizeof(*req), true, 0);
be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_ISCSI,
OPCODE_COMMON_ISCSI_CLEANUP, sizeof(*req));
req->chute = (1 << ulp); req->chute = (1 << ulp);
req->hdr_ring_id = HWI_GET_DEF_HDRQ_ID(phba, ulp); /* BE2/BE3 FW creates 8-bit ring id */
req->data_ring_id = HWI_GET_DEF_BUFQ_ID(phba, ulp); req->hdr_ring_id = hdr_ring_id;
req->data_ring_id = data_ring_id;
} else { } else {
req_v1 = (struct iscsi_cleanup_req_v1 *)req; req_v1 = embedded_payload(wrb);
be_wrb_hdr_prepare(wrb, sizeof(*req_v1), true, 0);
be_cmd_hdr_prepare(&req_v1->hdr, CMD_SUBSYSTEM_ISCSI,
OPCODE_COMMON_ISCSI_CLEANUP,
sizeof(*req_v1));
req_v1->hdr.version = 1; req_v1->hdr.version = 1;
req_v1->hdr_ring_id = cpu_to_le16(HWI_GET_DEF_HDRQ_ID(phba, req_v1->chute = (1 << ulp);
ulp)); req_v1->hdr_ring_id = cpu_to_le16(hdr_ring_id);
req_v1->data_ring_id = cpu_to_le16(HWI_GET_DEF_BUFQ_ID(phba, req_v1->data_ring_id = cpu_to_le16(data_ring_id);
ulp));
} }
status = be_mbox_notify(ctrl); status = be_mbox_notify(ctrl);
......
...@@ -2747,7 +2747,7 @@ static int hwi_init_async_pdu_ctx(struct beiscsi_hba *phba) ...@@ -2747,7 +2747,7 @@ static int hwi_init_async_pdu_ctx(struct beiscsi_hba *phba)
for (ulp_num = 0; ulp_num < BEISCSI_ULP_COUNT; ulp_num++) { for (ulp_num = 0; ulp_num < BEISCSI_ULP_COUNT; ulp_num++) {
if (test_bit(ulp_num, &phba->fw_config.ulp_supported)) { if (test_bit(ulp_num, &phba->fw_config.ulp_supported)) {
/* get async_ctx for each ULP */ /* get async_ctx for each ULP */
mem_descr = (struct be_mem_descriptor *)phba->init_mem; mem_descr = (struct be_mem_descriptor *)phba->init_mem;
mem_descr += (HWI_MEM_ASYNC_PDU_CONTEXT_ULP0 + mem_descr += (HWI_MEM_ASYNC_PDU_CONTEXT_ULP0 +
(ulp_num * MEM_DESCR_OFFSET)); (ulp_num * MEM_DESCR_OFFSET));
...@@ -3814,7 +3814,6 @@ static int hwi_init_port(struct beiscsi_hba *phba) ...@@ -3814,7 +3814,6 @@ static int hwi_init_port(struct beiscsi_hba *phba)
/** /**
* Now that the default PDU rings have been created, * Now that the default PDU rings have been created,
* let EP know about it. * let EP know about it.
* Call beiscsi_cmd_iscsi_cleanup before posting?
*/ */
beiscsi_hdq_post_handles(phba, BEISCSI_DEFQ_HDR, beiscsi_hdq_post_handles(phba, BEISCSI_DEFQ_HDR,
ulp_num); ulp_num);
......
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