Hi, > -----Original Message----- > From: dev <dev-boun...@dpdk.org> On Behalf Of Dekel Peled > Sent: Wednesday, July 24, 2019 12:05 PM > To: Yongseok Koh <ys...@mellanox.com>; Slava Ovsiienko > <viachesl...@mellanox.com>; Shahaf Shuler <shah...@mellanox.com> > Cc: Ori Kam <or...@mellanox.com>; dev@dpdk.org > Subject: [dpdk-dev] [PATCH v3] net/mlx5: fix doorbell release on Rx queue > release > > Function mlx5_rxq_release() calls mlx5_release_dbr() to release the doorbell > allocated for this Rx queue. > This call is relevant only for Rx queue objects created using DevX API. > > This patch adds the required check, to call mlx5_release_dbr() only when > relevant. > It also updates mlx5_release_dbr() to use the input offset correctly. > > Fixes: 13f4e1b32137 ("net/mlx5: create advanced RxQ using new API") > > --- > v3: Use adequate 'Fixes' reference. > --- > > Signed-off-by: Dekel Peled <dek...@mellanox.com> > Acked-by: Viacheslav Ovsiienko <viachesl...@mellanox.com> > --- > drivers/net/mlx5/mlx5.c | 1 + > drivers/net/mlx5/mlx5_rxq.c | 6 ++++-- drivers/net/mlx5/mlx5_rxtx.h | 1 + > 3 files changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index > 617f5ee..ad0883d 100644 > --- a/drivers/net/mlx5/mlx5.c > +++ b/drivers/net/mlx5/mlx5.c > @@ -1460,6 +1460,7 @@ struct mlx5_dev_spawn_data { > rte_free(page); > } else { > /* Mark in bitmap that this door-bell is not in use. */ > + offset /= MLX5_DBR_SIZE; > int i = offset / 64; > int j = offset % 64; > > diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c > index b225055..c9df8b0 100644 > --- a/drivers/net/mlx5/mlx5_rxq.c > +++ b/drivers/net/mlx5/mlx5_rxq.c > @@ -1242,6 +1242,7 @@ struct mlx5_rxq_obj * > goto error; > rxq_ctrl->dbr_offset = dbr_offset; > rxq_ctrl->dbr_umem_id = dbr_page->umem->umem_id; > + rxq_ctrl->dbr_umem_id_valid = 1; > rxq_data->rq_db = (uint32_t *)((uintptr_t)dbr_page->dbrs + > (uintptr_t)rxq_ctrl->dbr_offset); > } > @@ -1829,8 +1830,9 @@ struct mlx5_rxq_ctrl * > if (rxq_ctrl->obj && !mlx5_rxq_obj_release(rxq_ctrl->obj)) > rxq_ctrl->obj = NULL; > if (rte_atomic32_dec_and_test(&rxq_ctrl->refcnt)) { > - claim_zero(mlx5_release_dbr(dev, rxq_ctrl->dbr_umem_id, > - rxq_ctrl->dbr_offset)); > + if (rxq_ctrl->dbr_umem_id_valid) > + claim_zero(mlx5_release_dbr(dev, rxq_ctrl- > >dbr_umem_id, > + rxq_ctrl->dbr_offset)); > mlx5_mr_btree_free(&rxq_ctrl->rxq.mr_ctrl.cache_bh); > LIST_REMOVE(rxq_ctrl, next); > rte_free(rxq_ctrl); > diff --git a/drivers/net/mlx5/mlx5_rxtx.h b/drivers/net/mlx5/mlx5_rxtx.h > index 928d6c3..60d871c 100644 > --- a/drivers/net/mlx5/mlx5_rxtx.h > +++ b/drivers/net/mlx5/mlx5_rxtx.h > @@ -184,6 +184,7 @@ struct mlx5_rxq_ctrl { > struct mlx5_priv *priv; /* Back pointer to private data. */ > unsigned int socket; /* CPU socket ID for allocations. */ > unsigned int irq:1; /* Whether IRQ is enabled. */ > + unsigned int dbr_umem_id_valid:1; /* dbr_umem_id holds a valid > value. > +*/ > uint32_t flow_mark_n; /* Number of Mark/Flag flows using this > Queue. */ > uint32_t flow_tunnels_n[MLX5_FLOW_TUNNEL]; /* Tunnels > counters. */ > uint32_t wqn; /* WQ number. */ > -- > 1.8.3.1
Patch applied to dpdk-next-net-mlx, Kindest regards, Raslan Darawsheh