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

