struct hnae3_ring_chain_node *ring_chain,
                        struct hclge_vport *vport)
 {
-#define HCLGE_RING_NODE_VARIABLE_NUM           3
-#define HCLGE_RING_MAP_MBX_BASIC_MSG_NUM       3
        struct hnae3_ring_chain_node *cur_chain, *new_chain;
        int ring_num;
        int i;
 
        ring_num = req->msg[2];
 
+       if (ring_num > ((HCLGE_MBX_VF_MSG_DATA_NUM -
+               HCLGE_MBX_RING_MAP_BASIC_MSG_NUM) /
+               HCLGE_MBX_RING_NODE_VARIABLE_NUM))
+               return -ENOMEM;
+
        hnae_set_bit(ring_chain->flag, HNAE3_RING_TYPE_B, req->msg[3]);
        ring_chain->tqp_index =
                        hclge_get_queue_id(vport->nic.kinfo.tqp[req->msg[4]]);
                        goto err;
 
                hnae_set_bit(new_chain->flag, HNAE3_RING_TYPE_B,
-                            req->msg[HCLGE_RING_NODE_VARIABLE_NUM * i +
-                            HCLGE_RING_MAP_MBX_BASIC_MSG_NUM]);
+                            req->msg[HCLGE_MBX_RING_NODE_VARIABLE_NUM * i +
+                            HCLGE_MBX_RING_MAP_BASIC_MSG_NUM]);
 
                new_chain->tqp_index =
                hclge_get_queue_id(vport->nic.kinfo.tqp
-                       [req->msg[HCLGE_RING_NODE_VARIABLE_NUM * i +
-                       HCLGE_RING_MAP_MBX_BASIC_MSG_NUM + 1]]);
+                       [req->msg[HCLGE_MBX_RING_NODE_VARIABLE_NUM * i +
+                       HCLGE_MBX_RING_MAP_BASIC_MSG_NUM + 1]]);
 
                hnae_set_field(new_chain->int_gl_idx, HCLGE_INT_GL_IDX_M,
                               HCLGE_INT_GL_IDX_S,
-                              req->msg[HCLGE_RING_NODE_VARIABLE_NUM * i +
-                              HCLGE_RING_MAP_MBX_BASIC_MSG_NUM + 2]);
+                              req->msg[HCLGE_MBX_RING_NODE_VARIABLE_NUM * i +
+                              HCLGE_MBX_RING_MAP_BASIC_MSG_NUM + 2]);
 
                cur_chain->next = new_chain;
                cur_chain = new_chain;
 
                                       int vector,
                                       struct hnae3_ring_chain_node *ring_chain)
 {
-#define HCLGEVF_RING_NODE_VARIABLE_NUM         3
-#define HCLGEVF_RING_MAP_MBX_BASIC_MSG_NUM     3
        struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
        struct hnae3_ring_chain_node *node;
        struct hclge_mbx_vf_to_pf_cmd *req;
        struct hclgevf_desc desc;
-       int i, vector_id;
+       int i = 0, vector_id;
        int status;
        u8 type;
 
                return vector_id;
        }
 
-       hclgevf_cmd_setup_basic_desc(&desc, HCLGEVF_OPC_MBX_VF_TO_PF, false);
-       type = en ?
-               HCLGE_MBX_MAP_RING_TO_VECTOR : HCLGE_MBX_UNMAP_RING_TO_VECTOR;
-       req->msg[0] = type;
-       req->msg[1] = vector_id; /* vector_id should be id in VF */
-
-       i = 0;
        for (node = ring_chain; node; node = node->next) {
-               i++;
-               /* msg[2] is cause num */
-               req->msg[HCLGEVF_RING_NODE_VARIABLE_NUM * i] =
+               int idx_offset = HCLGE_MBX_RING_MAP_BASIC_MSG_NUM +
+                                       HCLGE_MBX_RING_NODE_VARIABLE_NUM * i;
+
+               if (i == 0) {
+                       hclgevf_cmd_setup_basic_desc(&desc,
+                                                    HCLGEVF_OPC_MBX_VF_TO_PF,
+                                                    false);
+                       type = en ?
+                               HCLGE_MBX_MAP_RING_TO_VECTOR :
+                               HCLGE_MBX_UNMAP_RING_TO_VECTOR;
+                       req->msg[0] = type;
+                       req->msg[1] = vector_id;
+               }
+
+               req->msg[idx_offset] =
                                hnae_get_bit(node->flag, HNAE3_RING_TYPE_B);
-               req->msg[HCLGEVF_RING_NODE_VARIABLE_NUM * i + 1] =
-                               node->tqp_index;
-               req->msg[HCLGEVF_RING_NODE_VARIABLE_NUM * i + 2] =
-                               hnae_get_field(node->int_gl_idx,
-                                              HNAE3_RING_GL_IDX_M,
-                                              HNAE3_RING_GL_IDX_S);
-
-               if (i == (HCLGE_MBX_VF_MSG_DATA_NUM -
-                   HCLGEVF_RING_MAP_MBX_BASIC_MSG_NUM) /
-                   HCLGEVF_RING_NODE_VARIABLE_NUM) {
+               req->msg[idx_offset + 1] = node->tqp_index;
+               req->msg[idx_offset + 2] = hnae_get_field(node->int_gl_idx,
+                                                         HNAE3_RING_GL_IDX_M,
+                                                         HNAE3_RING_GL_IDX_S);
+
+               i++;
+               if ((i == (HCLGE_MBX_VF_MSG_DATA_NUM -
+                    HCLGE_MBX_RING_MAP_BASIC_MSG_NUM) /
+                    HCLGE_MBX_RING_NODE_VARIABLE_NUM) ||
+                   !node->next) {
                        req->msg[2] = i;
 
                        status = hclgevf_cmd_send(&hdev->hw, &desc, 1);
                }
        }
 
-       if (i > 0) {
-               req->msg[2] = i;
-
-               status = hclgevf_cmd_send(&hdev->hw, &desc, 1);
-               if (status) {
-                       dev_err(&hdev->pdev->dev,
-                               "Map TQP fail, status is %d.\n", status);
-                       return status;
-               }
-       }
-
        return 0;
 }