Hi,

> -----Original Message-----
> From: Suanming Mou <suanmi...@mellanox.com>
> Sent: Sunday, April 26, 2020 5:51 AM
> To: Matan Azrad <ma...@mellanox.com>; Shahaf Shuler
> <shah...@mellanox.com>; Slava Ovsiienko <viachesl...@mellanox.com>
> Cc: dev@dpdk.org; Raslan Darawsheh <rasl...@mellanox.com>
> Subject: [PATCH] net/mlx5: save meter index instead of meter id
> 
> Currently, while creating the flow with meter, meter id is saved to the
> rte flow. While destroying the flow, the meter object will be found by
> the meter id, so the meter object will be released accordingly. But as
> the meter id is configured by user, while the meter id is set to 0, it
> doesn't make any sense to flow destroy since 0 means flow doesn't have
> meter. The meter object with id 0 will be leaked.
> 
> As meter object is allocated from indexed memory, and the index starts
> from 1, save the internal generated index instead of user defined meter
> id will never meet the issue as above.
> 
> This patch saves meter index instead of meter id in rte flow.
> 
> Signed-off-by: Suanming Mou <suanmi...@mellanox.com>
> ---
>  drivers/net/mlx5/mlx5_flow_dv.c | 8 +++++---
>  1 file changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/mlx5/mlx5_flow_dv.c
> b/drivers/net/mlx5/mlx5_flow_dv.c
> index 6263ecc..2fdd403 100644
> --- a/drivers/net/mlx5/mlx5_flow_dv.c
> +++ b/drivers/net/mlx5/mlx5_flow_dv.c
> @@ -7867,11 +7867,12 @@ struct field_modify_info modify_tcp[] = {
>                                               NULL,
>                                               "meter not found "
>                                               "or invalid parameters");
> -                             flow->meter = fm->meter_id;
> +                             flow->meter = fm->idx;
>                       }
>                       /* Set the meter action. */
>                       if (!fm) {
> -                             fm = mlx5_flow_meter_find(priv, flow-
> >meter);
> +                             fm = mlx5_ipool_get(priv->sh->ipool
> +                                             [MLX5_IPOOL_MTR], flow-
> >meter);
>                               if (!fm)
>                                       return rte_flow_error_set(error,
>                                               rte_errno,
> @@ -8591,7 +8592,8 @@ struct field_modify_info modify_tcp[] = {
>       if (flow->meter) {
>               struct mlx5_flow_meter *fm;
> 
> -             fm  = mlx5_flow_meter_find(priv, flow->meter);
> +             fm = mlx5_ipool_get(priv->sh->ipool[MLX5_IPOOL_MTR],
> +                                 flow->meter);
>               if (fm)
>                       mlx5_flow_meter_detach(fm);
>               flow->meter = 0;
> --
> 1.8.3.1

Patch applied to next-net-mlx,

Kindest regards,
Raslan Darawsheh

Reply via email to