Currently, when responding to VF resource queries, we are dynamically
allocating a temporary buffer with rte_zmalloc followed by an immediate
rte_free. This is not needed as the response is only used temporarily,
so replace it with a stack-allocated structure (the allocation is fixed
in size and pretty small).

Signed-off-by: Anatoly Burakov <[email protected]>
---
 drivers/net/intel/i40e/i40e_pf.c | 26 +++++++-------------------
 1 file changed, 7 insertions(+), 19 deletions(-)

diff --git a/drivers/net/intel/i40e/i40e_pf.c b/drivers/net/intel/i40e/i40e_pf.c
index ebe1deeade..2a5637b0c1 100644
--- a/drivers/net/intel/i40e/i40e_pf.c
+++ b/drivers/net/intel/i40e/i40e_pf.c
@@ -309,9 +309,14 @@ static int
 i40e_pf_host_process_cmd_get_vf_resource(struct i40e_pf_vf *vf, uint8_t *msg,
                                         bool b_op)
 {
-       struct virtchnl_vf_resource *vf_res = NULL;
+       /* only have 1 VSI by default */
+       struct {
+               struct virtchnl_vf_resource vf_res;
+               struct virtchnl_vsi_resource vsi_res;
+       } res = {0};
+       struct virtchnl_vf_resource *vf_res = &res.vf_res;
+       uint32_t len = sizeof(res);
        struct i40e_hw *hw = I40E_PF_TO_HW(vf->pf);
-       uint32_t len = 0;
        uint64_t default_hena = I40E_RSS_HENA_ALL;
        int ret = I40E_SUCCESS;
 
@@ -322,20 +327,6 @@ i40e_pf_host_process_cmd_get_vf_resource(struct i40e_pf_vf 
*vf, uint8_t *msg,
                return ret;
        }
 
-       /* only have 1 VSI by default */
-       len =  sizeof(struct virtchnl_vf_resource) +
-                               I40E_DEFAULT_VF_VSI_NUM *
-               sizeof(struct virtchnl_vsi_resource);
-
-       vf_res = rte_zmalloc("i40e_vf_res", len, 0);
-       if (vf_res == NULL) {
-               PMD_DRV_LOG(ERR, "failed to allocate mem");
-               ret = I40E_ERR_NO_MEMORY;
-               vf_res = NULL;
-               len = 0;
-               goto send_msg;
-       }
-
        if (VF_IS_V10(&vf->version)) /* doesn't support offload negotiate */
                vf->request_caps = VIRTCHNL_VF_OFFLOAD_L2 |
                                   VIRTCHNL_VF_OFFLOAD_VLAN;
@@ -377,11 +368,8 @@ i40e_pf_host_process_cmd_get_vf_resource(struct i40e_pf_vf 
*vf, uint8_t *msg,
        rte_ether_addr_copy(&vf->mac_addr,
                (struct rte_ether_addr *)vf_res->vsi_res[0].default_mac_addr);
 
-send_msg:
        i40e_pf_host_send_msg_to_vf(vf, VIRTCHNL_OP_GET_VF_RESOURCES,
                                        ret, (uint8_t *)vf_res, len);
-       rte_free(vf_res);
-
        return ret;
 }
 
-- 
2.47.3

Reply via email to