> Use function attributes to catch cases where mempool is allocated
> but not freed correctly.
> 
> Signed-off-by: Stephen Hemminger <step...@networkplumber.org>
> Reviewed-by: Morten Brørup <m...@smartsharesystems.com>
> ---
>  lib/mempool/rte_mempool.h | 37 ++++++++++++++++++++-----------------
>  1 file changed, 20 insertions(+), 17 deletions(-)
> 
> diff --git a/lib/mempool/rte_mempool.h b/lib/mempool/rte_mempool.h
> index 7bdc92b812..c495cc012f 100644
> --- a/lib/mempool/rte_mempool.h
> +++ b/lib/mempool/rte_mempool.h
> @@ -1012,6 +1012,20 @@ typedef void (rte_mempool_mem_cb_t)(struct rte_mempool 
> *mp,
>   */
>  typedef void (rte_mempool_ctor_t)(struct rte_mempool *, void *);
> 
> +/**
> + * Free a mempool
> + *
> + * Unlink the mempool from global list, free the memory chunks, and all
> + * memory referenced by the mempool. The objects must not be used by
> + * other cores as they will be freed.
> + *
> + * @param mp
> + *   A pointer to the mempool structure.
> + *   If NULL then, the function does nothing.
> + */
> +void
> +rte_mempool_free(struct rte_mempool *mp);
> +
>  /**
>   * Create a new mempool named *name* in memory.
>   *
> @@ -1095,7 +1109,8 @@ rte_mempool_create(const char *name, unsigned n, 
> unsigned elt_size,
>                  unsigned cache_size, unsigned private_data_size,
>                  rte_mempool_ctor_t *mp_init, void *mp_init_arg,
>                  rte_mempool_obj_cb_t *obj_init, void *obj_init_arg,
> -                int socket_id, unsigned flags);
> +                int socket_id, unsigned int flags)
> +     __rte_malloc __rte_dealloc(rte_mempool_free, 1);
> 
>  /**
>   * Create an empty mempool
> @@ -1132,22 +1147,10 @@ rte_mempool_create(const char *name, unsigned n, 
> unsigned elt_size,
>   *   with rte_errno set appropriately. See rte_mempool_create() for details.
>   */
>  struct rte_mempool *
> -rte_mempool_create_empty(const char *name, unsigned n, unsigned elt_size,
> -     unsigned cache_size, unsigned private_data_size,
> -     int socket_id, unsigned flags);
> -/**
> - * Free a mempool
> - *
> - * Unlink the mempool from global list, free the memory chunks, and all
> - * memory referenced by the mempool. The objects must not be used by
> - * other cores as they will be freed.
> - *
> - * @param mp
> - *   A pointer to the mempool structure.
> - *   If NULL then, the function does nothing.
> - */
> -void
> -rte_mempool_free(struct rte_mempool *mp);
> +rte_mempool_create_empty(const char *name, unsigned int n, unsigned int 
> elt_size,
> +                      unsigned int cache_size, unsigned int 
> private_data_size,
> +                      int socket_id, unsigned int flags)
> +             __rte_malloc __rte_dealloc(rte_mempool_free, 1);
> 
>  /**
>   * Add physically contiguous memory for objects in the pool at init
> --

Acked-by: Konstantin Ananyev <konstantin.anan...@huawei.com>
 

> 2.45.2

Reply via email to