From dd76f43612c93f3503e52b86dd3e46a235eb41a9 Mon Sep 17 00:00:00 2001 From: Suanming Mou Date: Sun, 26 Apr 2020 10:51:25 +0800 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 Acked-by: Viacheslav Ovsiienko --- 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 6263ecc731..2fdd40319c 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -7867,11 +7867,12 @@ cnt_err: 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 @@ __flow_dv_destroy(struct rte_eth_dev *dev, struct rte_flow *flow) 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; -- 2.20.1