net/mlx5: fix atomic API update
Checks
Commit Message
The Txq refcnt 1 value means that there is not real reference to the
queue and only the control configuration are saved in the struct.
The patch below wrongly didn't consider it and caused a leak in the Txq
object resource.
Revert the specific update in the refcnt.
Fixes: a02d6dd9e61f ("net/mlx5: use C11 atomics for RxQ/TxQ refcounts")
Signed-off-by: Matan Azrad <matan@nvidia.com>
---
drivers/net/mlx5/mlx5_txq.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Comments
> -----Original Message-----
> From: Matan Azrad <matan@nvidia.com>
> Sent: Tuesday, November 3, 2020 8:48
> To: Slava Ovsiienko <viacheslavo@nvidia.com>
> Cc: dev@dpdk.org
> Subject: [PATCH] net/mlx5: fix atomic API update
>
> The Txq refcnt 1 value means that there is not real reference to the queue and
> only the control configuration are saved in the struct.
>
> The patch below wrongly didn't consider it and caused a leak in the Txq object
> resource.
>
> Revert the specific update in the refcnt.
>
> Fixes: a02d6dd9e61f ("net/mlx5: use C11 atomics for RxQ/TxQ refcounts")
>
> Signed-off-by: Matan Azrad <matan@nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
Hi,
> -----Original Message-----
> From: dev <dev-bounces@dpdk.org> On Behalf Of Matan Azrad
> Sent: Tuesday, November 3, 2020 8:48 AM
> To: Slava Ovsiienko <viacheslavo@nvidia.com>
> Cc: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH] net/mlx5: fix atomic API update
>
> The Txq refcnt 1 value means that there is not real reference to the
> queue and only the control configuration are saved in the struct.
>
> The patch below wrongly didn't consider it and caused a leak in the Txq
> object resource.
>
> Revert the specific update in the refcnt.
>
> Fixes: a02d6dd9e61f ("net/mlx5: use C11 atomics for RxQ/TxQ refcounts")
>
> Signed-off-by: Matan Azrad <matan@nvidia.com>
> ---
> drivers/net/mlx5/mlx5_txq.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
Patch applied to next-net-mlx,
Kindest regards,
Raslan Darawsheh
@@ -1234,7 +1234,7 @@ struct mlx5_txq_ctrl *
if (!(*priv->txqs)[idx])
return 0;
txq_ctrl = container_of((*priv->txqs)[idx], struct mlx5_txq_ctrl, txq);
- if (__atomic_sub_fetch(&txq_ctrl->refcnt, 1, __ATOMIC_RELAXED) != 0)
+ if (__atomic_sub_fetch(&txq_ctrl->refcnt, 1, __ATOMIC_RELAXED) > 1)
return 1;
if (txq_ctrl->obj) {
priv->obj_ops.txq_obj_release(txq_ctrl->obj);