scsi: be2iscsi: Fix iSCSI cmd cleanup IOCTL
authorJitendra Bhivare <jitendra.bhivare@broadcom.com>
Tue, 13 Dec 2016 10:25:59 +0000 (15:55 +0530)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 5 Jan 2017 05:21:13 +0000 (00:21 -0500)
Prepare the IOCTL with appropriate sizes of buffers of V0 and V1.
Set missing chute number in V1 IOCTL.

Signed-off-by: Jitendra Bhivare <jitendra.bhivare@broadcom.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/be2iscsi/be_cmds.c
drivers/scsi/be2iscsi/be_main.c

index be65da2988fbca99d3926f30a6ff4f03619d1336..94aae458489bd96262de36bd417d63afead94fdd 100644 (file)
@@ -1700,31 +1700,34 @@ int beiscsi_cmd_iscsi_cleanup(struct beiscsi_hba *phba, unsigned short ulp)
        struct be_ctrl_info *ctrl = &phba->ctrl;
        struct iscsi_cleanup_req_v1 *req_v1;
        struct iscsi_cleanup_req *req;
+       u16 hdr_ring_id, data_ring_id;
        struct be_mcc_wrb *wrb;
        int status;
 
        mutex_lock(&ctrl->mbox_lock);
        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));
 
-       /**
-       * TODO: Check with FW folks the chute value to be set.
-       * For now, use the ULP_MASK as the chute value.
-       */
+       hdr_ring_id = HWI_GET_DEF_HDRQ_ID(phba, ulp);
+       data_ring_id = HWI_GET_DEF_BUFQ_ID(phba, ulp);
        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->hdr_ring_id = HWI_GET_DEF_HDRQ_ID(phba, ulp);
-               req->data_ring_id = HWI_GET_DEF_BUFQ_ID(phba, ulp);
+               /* BE2/BE3 FW creates 8-bit ring id */
+               req->hdr_ring_id = hdr_ring_id;
+               req->data_ring_id = data_ring_id;
        } 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_ring_id = cpu_to_le16(HWI_GET_DEF_HDRQ_ID(phba,
-                                                                     ulp));
-               req_v1->data_ring_id = cpu_to_le16(HWI_GET_DEF_BUFQ_ID(phba,
-                                                                      ulp));
+               req_v1->chute = (1 << ulp);
+               req_v1->hdr_ring_id = cpu_to_le16(hdr_ring_id);
+               req_v1->data_ring_id = cpu_to_le16(data_ring_id);
        }
 
        status = be_mbox_notify(ctrl);
index 832d4f0fb33ff9dd09855fd17609a29d8271bb45..1b5a07ff93ea5e7ceb840f805ad28ab83f8c2f9d 100644 (file)
@@ -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++) {
                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 += (HWI_MEM_ASYNC_PDU_CONTEXT_ULP0 +
                                     (ulp_num * MEM_DESCR_OFFSET));
@@ -3814,7 +3814,6 @@ static int hwi_init_port(struct beiscsi_hba *phba)
                        /**
                         * Now that the default PDU rings have been created,
                         * let EP know about it.
-                        * Call beiscsi_cmd_iscsi_cleanup before posting?
                         */
                        beiscsi_hdq_post_handles(phba, BEISCSI_DEFQ_HDR,
                                                 ulp_num);