Currently, when processing Dynamic Driver Profile (DDP) packages and
checking profile information, we are using rte_zmalloc followed by
immediate rte_free. This is not needed as these buffers are only used
temporarily, so replace it with stack-allocated structures or regular
malloc/free where appropriate.

Signed-off-by: Anatoly Burakov <[email protected]>
---
 drivers/net/intel/i40e/rte_pmd_i40e.c | 43 +++++++++------------------
 1 file changed, 14 insertions(+), 29 deletions(-)

diff --git a/drivers/net/intel/i40e/rte_pmd_i40e.c 
b/drivers/net/intel/i40e/rte_pmd_i40e.c
index fb73fa924f..a2e24b5ea2 100644
--- a/drivers/net/intel/i40e/rte_pmd_i40e.c
+++ b/drivers/net/intel/i40e/rte_pmd_i40e.c
@@ -1569,9 +1569,7 @@ i40e_check_profile_info(uint16_t port, uint8_t 
*profile_info_sec)
                PMD_DRV_LOG(INFO, "Read-only profile.");
                return 0;
        }
-       buff = rte_zmalloc("pinfo_list",
-                          (I40E_PROFILE_INFO_SIZE * I40E_MAX_PROFILE_NUM + 4),
-                          0);
+       buff = calloc(I40E_MAX_PROFILE_NUM + 4, I40E_PROFILE_INFO_SIZE);
        if (!buff) {
                PMD_DRV_LOG(ERR, "failed to allocate memory");
                return -1;
@@ -1583,7 +1581,7 @@ i40e_check_profile_info(uint16_t port, uint8_t 
*profile_info_sec)
                0, NULL);
        if (ret) {
                PMD_DRV_LOG(ERR, "Failed to get profile info list.");
-               rte_free(buff);
+               free(buff);
                return -1;
        }
        p_list = (struct rte_pmd_i40e_profile_list *)buff;
@@ -1591,20 +1589,20 @@ i40e_check_profile_info(uint16_t port, uint8_t 
*profile_info_sec)
                p = &p_list->p_info[i];
                if (pinfo->track_id == p->track_id) {
                        PMD_DRV_LOG(INFO, "Profile exists.");
-                       rte_free(buff);
+                       free(buff);
                        return 1;
                }
        }
        /* profile with group id 0xff is compatible with any other profile */
        if ((pinfo->track_id & group_mask) == group_mask) {
-               rte_free(buff);
+               free(buff);
                return 0;
        }
        for (i = 0; i < p_list->p_count; i++) {
                p = &p_list->p_info[i];
                if ((p->track_id & group_mask) == 0) {
                        PMD_DRV_LOG(INFO, "Profile of the group 0 exists.");
-                       rte_free(buff);
+                       free(buff);
                        return 2;
                }
        }
@@ -1615,12 +1613,12 @@ i40e_check_profile_info(uint16_t port, uint8_t 
*profile_info_sec)
                if ((pinfo->track_id & group_mask) !=
                    (p->track_id & group_mask)) {
                        PMD_DRV_LOG(INFO, "Profile of different group exists.");
-                       rte_free(buff);
+                       free(buff);
                        return 3;
                }
        }
 
-       rte_free(buff);
+       free(buff);
        return 0;
 }
 
@@ -1636,7 +1634,10 @@ rte_pmd_i40e_process_ddp_package(uint16_t port, uint8_t 
*buff,
        struct i40e_generic_seg_header *profile_seg_hdr;
        struct i40e_generic_seg_header *metadata_seg_hdr;
        uint32_t track_id;
-       uint8_t *profile_info_sec;
+       struct {
+               struct i40e_profile_section_header sec;
+               struct i40e_profile_info info;
+       } profile_info_sec = {0};
        int is_exist;
        enum i40e_status_code status = I40E_SUCCESS;
        static const uint32_t type_mask = 0xff000000;
@@ -1701,26 +1702,15 @@ rte_pmd_i40e_process_ddp_package(uint16_t port, uint8_t 
*buff,
                return -EINVAL;
        }
 
-       profile_info_sec = rte_zmalloc(
-               "i40e_profile_info",
-               sizeof(struct i40e_profile_section_header) +
-               sizeof(struct i40e_profile_info),
-               0);
-       if (!profile_info_sec) {
-               PMD_DRV_LOG(ERR, "Failed to allocate memory");
-               return -EINVAL;
-       }
-
        /* Check if the profile already loaded */
        i40e_generate_profile_info_sec(
                ((struct i40e_profile_segment *)profile_seg_hdr)->name,
                &((struct i40e_profile_segment *)profile_seg_hdr)->version,
-               track_id, profile_info_sec,
+               track_id, (uint8_t* )&profile_info_sec,
                op == RTE_PMD_I40E_PKG_OP_WR_ADD);
-       is_exist = i40e_check_profile_info(port, profile_info_sec);
+       is_exist = i40e_check_profile_info(port, (uint8_t* )&profile_info_sec);
        if (is_exist < 0) {
                PMD_DRV_LOG(ERR, "Failed to check profile.");
-               rte_free(profile_info_sec);
                return -EINVAL;
        }
 
@@ -1733,13 +1723,11 @@ rte_pmd_i40e_process_ddp_package(uint16_t port, uint8_t 
*buff,
                        else if (is_exist == 3)
                                PMD_DRV_LOG(ERR, "Profile of different group 
already exists");
                        i40e_update_customized_info(dev, buff, size, op);
-                       rte_free(profile_info_sec);
                        return -EEXIST;
                }
        } else if (op == RTE_PMD_I40E_PKG_OP_WR_DEL) {
                if (is_exist != 1) {
                        PMD_DRV_LOG(ERR, "Profile does not exist.");
-                       rte_free(profile_info_sec);
                        return -EACCES;
                }
        }
@@ -1751,7 +1739,6 @@ rte_pmd_i40e_process_ddp_package(uint16_t port, uint8_t 
*buff,
                        track_id);
                if (status) {
                        PMD_DRV_LOG(ERR, "Failed to write profile for delete.");
-                       rte_free(profile_info_sec);
                        return status;
                }
        } else {
@@ -1764,14 +1751,13 @@ rte_pmd_i40e_process_ddp_package(uint16_t port, uint8_t 
*buff,
                                PMD_DRV_LOG(ERR, "Failed to write profile for 
add.");
                        else
                                PMD_DRV_LOG(ERR, "Failed to write profile.");
-                       rte_free(profile_info_sec);
                        return status;
                }
        }
 
        if (track_id && (op != RTE_PMD_I40E_PKG_OP_WR_ONLY)) {
                /* Modify loaded profiles info list */
-               status = i40e_add_rm_profile_info(hw, profile_info_sec);
+               status = i40e_add_rm_profile_info(hw, (uint8_t* 
)&profile_info_sec);
                if (status) {
                        if (op == RTE_PMD_I40E_PKG_OP_WR_ADD)
                                PMD_DRV_LOG(ERR, "Failed to add profile to info 
list.");
@@ -1784,7 +1770,6 @@ rte_pmd_i40e_process_ddp_package(uint16_t port, uint8_t 
*buff,
            op == RTE_PMD_I40E_PKG_OP_WR_DEL)
                i40e_update_customized_info(dev, buff, size, op);
 
-       rte_free(profile_info_sec);
        return status;
 }
 
-- 
2.47.3

Reply via email to