[dpdk-dev] [PATCH v2 2/2] net/mlx5: fix resource leak when releasing a drop action
wangyunjian
wangyunjian at huawei.com
Thu Sep 29 03:51:12 CEST 2022
I agree with you. Can you fix it?
Thanks
Yunjian
> -----Original Message-----
> From: Slava Ovsiienko [mailto:viacheslavo at nvidia.com]
> Sent: Tuesday, September 27, 2022 3:36 AM
> To: wangyunjian <wangyunjian at huawei.com>; dev at dpdk.org
> Cc: Matan Azrad <matan at nvidia.com>; Raslan Darawsheh
> <rasland at nvidia.com>; Dmitry Kozlyuk <dkozlyuk at nvidia.com>;
> Huangshaozhang <huangshaozhang at huawei.com>; stable at dpdk.org
> Subject: RE: [dpdk-dev] [PATCH v2 2/2] net/mlx5: fix resource leak when
> releasing a drop action
>
> Hi, Yunjian
>
> We have drop action in mlx5.
> To create/destroy drop action we have
> mlx5_drop_action_create/ mlx5_drop_action_destroy common routines.
>
> As PMD supports operation either over FW (Verbs in rdma_core) or SW/HW
> steering with DevX objects the "virtual" methods are used for objects:
>
> priv->obj_ops.drop_action_create(dev) - create drop action
> a) mlx5_ibv_drop_action_create()- use Verbs (dv-flow_en == 0)
> b) mlx5_devx_drop_action_create() - use DevX (dv-flow_en != 0)
>
> priv->obj_ops.drop_action_destroy(dev) - destroy drop action
> a) mlx5_ibv_drop_action_destroy()- use Verbs (dv-flow_en == 0)
> b) mlx5_devx_drop_action_destroy() - use DevX (dv-flow_en != 0)
>
>
> Let's consider DevX case.
> mlx5_devx_drop_action_create()
> mlx5_rxq_devx_obj_drop_create()
> mlx5_devx_ind_table_new()
> mlx5_devx_hrxq_new()
> xxx_create_dest_tir()
> xxx_action_create_dest_tir()
>
>
> mlx5_devx_drop_action_destroy()
> /* It seems action destroy is missing here */
> mlx5_devx_tir_destroy()
> mlx5_devx_ind_table_destroy()
> mlx5_rxq_devx_obj_drop_release()
>
> So, yes, I agree. There is missing action destroy, it seems we have leakage.
>
> Let's look at
> __mlx5_hrxq_remove()
> destroy_action()
> priv->obj_ops.hrxq_destroy();
>
>
> And there we have a problem.
> obj_ops.hrxq_destroy() - not always mlx5_devx_tir_destroy() is called.
> It might be mlx5_ibv_qp_destroy() (for Verbas) and patch would not work.
>
> So, instead of fixing __mlx5_hrxq_remove() and mlx5_devx_tir_destroy()
> I would consider patching:
> - mlx5_devx_drop_action_destroy()
> - mlx5_ibv_drop_action_destroy
> by adding action desatroying.
>
> With best regards,
> Slava
>
>
> > -----Original Message-----
> > From: wangyunjian <wangyunjian at huawei.com>
> > Sent: Friday, September 23, 2022 12:32
> > To: dev at dpdk.org
> > Cc: Matan Azrad <matan at nvidia.com>; Raslan Darawsheh
> <rasland at nvidia.com>;
> > Slava Ovsiienko <viacheslavo at nvidia.com>; Dmitry Kozlyuk
> > <dkozlyuk at nvidia.com>; Huangshaozhang
> <huangshaozhang at huawei.com>;
> > stable at dpdk.org
> > Subject: RE: [dpdk-dev] [PATCH v2 2/2] net/mlx5: fix resource leak when
> > releasing a drop action
> >
> > Friendly ping.
> >
> > > -----Original Message-----
> > > From: wangyunjian
> > > Sent: Tuesday, August 23, 2022 2:46 PM
> > > To: dev at dpdk.org
> > > Cc: matan at nvidia.com; rasland at nvidia.com; viacheslavo at nvidia.com;
> > > dkozlyuk at nvidia.com; Huangshaozhang <huangshaozhang at huawei.com>;
> > > wangyunjian <wangyunjian at huawei.com>; stable at dpdk.org
> > > Subject: [dpdk-dev] [PATCH v2 2/2] net/mlx5: fix resource leak when
> > > releasing a drop action
> > >
> > > Currently, the resources for hrxq->action are allocated in
> > > mlx5_devx_hrxq_new(). But it was not being freed when the drop action
> > > was released in mlx5_devx_drop_action_destroy().
> > > So, fix is to free the resources in mlx5_devx_tir_destroy().
> > >
> > > Fixes: bc5bee028ebc ("net/mlx5: create drop queue using DevX")
> > > Cc: stable at dpdk.org
> > >
> > > Signed-off-by: Yunjian Wang <wangyunjian at huawei.com>
> > > ---
> > > drivers/net/mlx5/mlx5_devx.c | 7 +++++++ drivers/net/mlx5/mlx5_rxq.c
> > > |
> > > 6 ------
> > > 2 files changed, 7 insertions(+), 6 deletions(-)
> > >
> > > diff --git a/drivers/net/mlx5/mlx5_devx.c
> > > b/drivers/net/mlx5/mlx5_devx.c index
> > > 6886ae1f22..09c8856f05 100644
> > > --- a/drivers/net/mlx5/mlx5_devx.c
> > > +++ b/drivers/net/mlx5/mlx5_devx.c
> > > @@ -907,6 +907,13 @@ mlx5_devx_hrxq_new(struct rte_eth_dev *dev,
> > > struct mlx5_hrxq *hrxq, static void mlx5_devx_tir_destroy(struct
> > > mlx5_hrxq *hrxq) {
> > > +#if defined(HAVE_IBV_FLOW_DV_SUPPORT)
> > > || !defined(HAVE_INFINIBAND_VERBS_H)
> > > + if (hrxq->hws_flags)
> > > + mlx5dr_action_destroy(hrxq->action);
> > > + else
> > > + mlx5_flow_os_destroy_flow_action(hrxq->action);
> > > + hrxq->action = NULL;
> > > +#endif
> > > claim_zero(mlx5_devx_cmd_destroy(hrxq->tir));
> > > }
> > >
> > > diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c
> > > index eaf23d0df4..e518fe9bfd 100644
> > > --- a/drivers/net/mlx5/mlx5_rxq.c
> > > +++ b/drivers/net/mlx5/mlx5_rxq.c
> > > @@ -2861,12 +2861,6 @@ __mlx5_hrxq_remove(struct rte_eth_dev *dev,
> > > struct mlx5_hrxq *hrxq) {
> > > struct mlx5_priv *priv = dev->data->dev_private;
> > >
> > > -#ifdef HAVE_IBV_FLOW_DV_SUPPORT
> > > - if (hrxq->hws_flags)
> > > - mlx5dr_action_destroy(hrxq->action);
> > > - else
> > > - mlx5_glue->destroy_flow_action(hrxq->action);
> > > -#endif
> > > priv->obj_ops.hrxq_destroy(hrxq);
> > > if (!hrxq->standalone) {
> > > mlx5_ind_table_obj_release(dev, hrxq->ind_table,
> > > --
> > > 2.27.0
More information about the stable
mailing list