[dpdk-dev,1/5] net/mlx5: trim debug messages for reference counters
Checks
Commit Message
Remove debug messages when getting an object. When releasing an object,
debug message will be printed only if the object is really freed.
Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
---
drivers/net/mlx5/mlx5_mr.c | 7 ++-----
drivers/net/mlx5/mlx5_rxq.c | 36 +++++++++++++-----------------------
drivers/net/mlx5/mlx5_txq.c | 21 ++++++++-------------
3 files changed, 23 insertions(+), 41 deletions(-)
Comments
Thursday, May 3, 2018 2:17 AM, Yongseok Koh:
> Subject: [dpdk-dev] [PATCH 1/5] net/mlx5: trim debug messages for
> reference counters
>
> Remove debug messages when getting an object. When releasing an object,
> debug message will be printed only if the object is really freed.
>
> Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
> ---
Only one general comment as you are making some order here.
I think it will be better to be explicit in the logging. Saying when new object is created:
"port %u new <obj type> ...<pointer> .. for queue ... "
No need for the refcnt as it is obviously 0.
And when object is destroyed:
"port %u <obj type>.. <pointer> ... for queue... is destroyed"
> drivers/net/mlx5/mlx5_mr.c | 7 ++----- drivers/net/mlx5/mlx5_rxq.c | 36
> +++++++++++++-----------------------
> drivers/net/mlx5/mlx5_txq.c | 21 ++++++++-------------
> 3 files changed, 23 insertions(+), 41 deletions(-)
>
> diff --git a/drivers/net/mlx5/mlx5_mr.c b/drivers/net/mlx5/mlx5_mr.c index
> 7a337d0c3..6613bd6b9 100644
> --- a/drivers/net/mlx5/mlx5_mr.c
> +++ b/drivers/net/mlx5/mlx5_mr.c
> @@ -308,9 +308,6 @@ mlx5_mr_get(struct rte_eth_dev *dev, struct
> rte_mempool *mp)
> LIST_FOREACH(mr, &priv->mr, next) {
> if (mr->mp == mp) {
> rte_atomic32_inc(&mr->refcnt);
> - DRV_LOG(DEBUG, "port %u memory region %p
> refcnt: %d",
> - dev->data->port_id, (void *)mr,
> - rte_atomic32_read(&mr->refcnt));
> return mr;
> }
> }
> @@ -330,9 +327,9 @@ int
> mlx5_mr_release(struct mlx5_mr *mr)
> {
> assert(mr);
> - DRV_LOG(DEBUG, "memory region %p refcnt: %d", (void *)mr,
> - rte_atomic32_read(&mr->refcnt));
> if (rte_atomic32_dec_and_test(&mr->refcnt)) {
> + DRV_LOG(DEBUG, "memory region %p refcnt: %d", (void
> *)mr,
> + rte_atomic32_read(&mr->refcnt));
> claim_zero(mlx5_glue->dereg_mr(mr->mr));
> LIST_REMOVE(mr, next);
> rte_free(mr);
> diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c
> index a85b628fe..d993e3846 100644
> --- a/drivers/net/mlx5/mlx5_rxq.c
> +++ b/drivers/net/mlx5/mlx5_rxq.c
> @@ -868,9 +868,6 @@ mlx5_rxq_ibv_get(struct rte_eth_dev *dev, uint16_t
> idx)
> if (rxq_ctrl->ibv) {
> mlx5_mr_get(dev, rxq_data->mp);
> rte_atomic32_inc(&rxq_ctrl->ibv->refcnt);
> - DRV_LOG(DEBUG, "port %u Verbs Rx queue %u: refcnt %d",
> - dev->data->port_id, rxq_ctrl->idx,
> - rte_atomic32_read(&rxq_ctrl->ibv->refcnt));
> }
> return rxq_ctrl->ibv;
> }
> @@ -896,10 +893,11 @@ mlx5_rxq_ibv_release(struct mlx5_rxq_ibv
> *rxq_ibv)
> ret = mlx5_mr_release(rxq_ibv->mr);
> if (!ret)
> rxq_ibv->mr = NULL;
> - DRV_LOG(DEBUG, "port %u Verbs Rx queue %u: refcnt %d",
> - port_id(rxq_ibv->rxq_ctrl->priv),
> - rxq_ibv->rxq_ctrl->idx, rte_atomic32_read(&rxq_ibv-
> >refcnt));
> if (rte_atomic32_dec_and_test(&rxq_ibv->refcnt)) {
> + DRV_LOG(DEBUG, "port %u Verbs Rx queue %u: refcnt %d",
> + port_id(rxq_ibv->rxq_ctrl->priv),
> + rxq_ibv->rxq_ctrl->idx,
> + rte_atomic32_read(&rxq_ibv->refcnt));
> rxq_free_elts(rxq_ibv->rxq_ctrl);
> claim_zero(mlx5_glue->destroy_wq(rxq_ibv->wq));
> claim_zero(mlx5_glue->destroy_cq(rxq_ibv->cq));
> @@ -1111,9 +1109,6 @@ mlx5_rxq_get(struct rte_eth_dev *dev, uint16_t
> idx)
> rxq);
> mlx5_rxq_ibv_get(dev, idx);
> rte_atomic32_inc(&rxq_ctrl->refcnt);
> - DRV_LOG(DEBUG, "port %u Rx queue %u: refcnt %d",
> - dev->data->port_id, rxq_ctrl->idx,
> - rte_atomic32_read(&rxq_ctrl->refcnt));
> }
> return rxq_ctrl;
> }
> @@ -1141,9 +1136,10 @@ mlx5_rxq_release(struct rte_eth_dev *dev,
> uint16_t idx)
> assert(rxq_ctrl->priv);
> if (rxq_ctrl->ibv && !mlx5_rxq_ibv_release(rxq_ctrl->ibv))
> rxq_ctrl->ibv = NULL;
> - DRV_LOG(DEBUG, "port %u Rx queue %u: refcnt %d", dev->data-
> >port_id,
> - rxq_ctrl->idx, rte_atomic32_read(&rxq_ctrl->refcnt));
> if (rte_atomic32_dec_and_test(&rxq_ctrl->refcnt)) {
> + DRV_LOG(DEBUG, "port %u Rx queue %u: refcnt %d",
> + dev->data->port_id, rxq_ctrl->idx,
> + rte_atomic32_read(&rxq_ctrl->refcnt));
> LIST_REMOVE(rxq_ctrl, next);
> rte_free(rxq_ctrl);
> (*priv->rxqs)[idx] = NULL;
> @@ -1301,9 +1297,6 @@ mlx5_ind_table_ibv_get(struct rte_eth_dev *dev,
> const uint16_t *queues,
> unsigned int i;
>
> rte_atomic32_inc(&ind_tbl->refcnt);
> - DRV_LOG(DEBUG, "port %u indirection table %p: refcnt %d",
> - dev->data->port_id, (void *)ind_tbl,
> - rte_atomic32_read(&ind_tbl->refcnt));
> for (i = 0; i != ind_tbl->queues_n; ++i)
> mlx5_rxq_get(dev, ind_tbl->queues[i]);
> }
> @@ -1327,9 +1320,6 @@ mlx5_ind_table_ibv_release(struct rte_eth_dev
> *dev, {
> unsigned int i;
>
> - DRV_LOG(DEBUG, "port %u indirection table %p: refcnt %d",
> - ((struct priv *)dev->data->dev_private)->port,
> - (void *)ind_tbl, rte_atomic32_read(&ind_tbl->refcnt));
> if (rte_atomic32_dec_and_test(&ind_tbl->refcnt)) {
> claim_zero(mlx5_glue->destroy_rwq_ind_table
> (ind_tbl->ind_table));
> @@ -1339,6 +1329,9 @@ mlx5_ind_table_ibv_release(struct rte_eth_dev
> *dev,
> for (i = 0; i != ind_tbl->queues_n; ++i)
> claim_nonzero(mlx5_rxq_release(dev, ind_tbl->queues[i]));
> if (!rte_atomic32_read(&ind_tbl->refcnt)) {
> + DRV_LOG(DEBUG, "port %u indirection table %p: refcnt %d",
> + ((struct priv *)dev->data->dev_private)->port,
> + (void *)ind_tbl, rte_atomic32_read(&ind_tbl-
> >refcnt));
> LIST_REMOVE(ind_tbl, next);
> rte_free(ind_tbl);
> return 0;
> @@ -1566,9 +1559,6 @@ mlx5_hrxq_get(struct rte_eth_dev *dev,
> continue;
> }
> rte_atomic32_inc(&hrxq->refcnt);
> - DRV_LOG(DEBUG, "port %u hash Rx queue %p: refcnt %d",
> - dev->data->port_id, (void *)hrxq,
> - rte_atomic32_read(&hrxq->refcnt));
> return hrxq;
> }
> return NULL;
> @@ -1588,10 +1578,10 @@ mlx5_hrxq_get(struct rte_eth_dev *dev, int
> mlx5_hrxq_release(struct rte_eth_dev *dev, struct mlx5_hrxq *hrxq) {
> - DRV_LOG(DEBUG, "port %u hash Rx queue %p: refcnt %d",
> - ((struct priv *)dev->data->dev_private)->port,
> - (void *)hrxq, rte_atomic32_read(&hrxq->refcnt));
> if (rte_atomic32_dec_and_test(&hrxq->refcnt)) {
> + DRV_LOG(DEBUG, "port %u hash Rx queue %p: refcnt %d",
> + ((struct priv *)dev->data->dev_private)->port,
> + (void *)hrxq, rte_atomic32_read(&hrxq->refcnt));
> claim_zero(mlx5_glue->destroy_qp(hrxq->qp));
> DEBUG("port %u delete QP %p: hash: 0x%" PRIx64 ", tunnel:"
> " 0x%x, level: %u",
> diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c
> index 29959b4c7..3f4b5fea5 100644
> --- a/drivers/net/mlx5/mlx5_txq.c
> +++ b/drivers/net/mlx5/mlx5_txq.c
> @@ -595,12 +595,8 @@ mlx5_txq_ibv_get(struct rte_eth_dev *dev,
> uint16_t idx)
> if (!(*priv->txqs)[idx])
> return NULL;
> txq_ctrl = container_of((*priv->txqs)[idx], struct mlx5_txq_ctrl, txq);
> - if (txq_ctrl->ibv) {
> + if (txq_ctrl->ibv)
> rte_atomic32_inc(&txq_ctrl->ibv->refcnt);
> - DRV_LOG(DEBUG, "port %u Verbs Tx queue %u: refcnt %d",
> - dev->data->port_id, txq_ctrl->idx,
> - rte_atomic32_read(&txq_ctrl->ibv->refcnt));
> - }
> return txq_ctrl->ibv;
> }
>
> @@ -617,10 +613,11 @@ int
> mlx5_txq_ibv_release(struct mlx5_txq_ibv *txq_ibv) {
> assert(txq_ibv);
> - DRV_LOG(DEBUG, "port %u Verbs Tx queue %u: refcnt %d",
> - port_id(txq_ibv->txq_ctrl->priv),
> - txq_ibv->txq_ctrl->idx, rte_atomic32_read(&txq_ibv-
> >refcnt));
> if (rte_atomic32_dec_and_test(&txq_ibv->refcnt)) {
> + DRV_LOG(DEBUG, "port %u Verbs Tx queue %u: refcnt %d",
> + port_id(txq_ibv->txq_ctrl->priv),
> + txq_ibv->txq_ctrl->idx,
> + rte_atomic32_read(&txq_ibv->refcnt));
> claim_zero(mlx5_glue->destroy_qp(txq_ibv->qp));
> claim_zero(mlx5_glue->destroy_cq(txq_ibv->cq));
> LIST_REMOVE(txq_ibv, next);
> @@ -860,9 +857,6 @@ mlx5_txq_get(struct rte_eth_dev *dev, uint16_t idx)
> ctrl->txq.mp2mr[i]->mp));
> }
> rte_atomic32_inc(&ctrl->refcnt);
> - DRV_LOG(DEBUG, "port %u Tx queue %u refcnt %d",
> - dev->data->port_id,
> - ctrl->idx, rte_atomic32_read(&ctrl->refcnt));
> }
> return ctrl;
> }
> @@ -889,8 +883,6 @@ mlx5_txq_release(struct rte_eth_dev *dev, uint16_t
> idx)
> if (!(*priv->txqs)[idx])
> return 0;
> txq = container_of((*priv->txqs)[idx], struct mlx5_txq_ctrl, txq);
> - DRV_LOG(DEBUG, "port %u Tx queue %u: refcnt %d", dev->data-
> >port_id,
> - txq->idx, rte_atomic32_read(&txq->refcnt));
> if (txq->ibv && !mlx5_txq_ibv_release(txq->ibv))
> txq->ibv = NULL;
> for (i = 0; i != MLX5_PMD_TX_MP_CACHE; ++i) { @@ -903,6 +895,9
> @@ mlx5_txq_release(struct rte_eth_dev *dev, uint16_t idx)
> munmap((void *)RTE_ALIGN_FLOOR((uintptr_t)txq-
> >txq.bf_reg,
> page_size), page_size);
> if (rte_atomic32_dec_and_test(&txq->refcnt)) {
> + DRV_LOG(DEBUG, "port %u Tx queue %u: refcnt %d",
> + dev->data->port_id, txq->idx,
> + rte_atomic32_read(&txq->refcnt));
> txq_free_elts(txq);
> LIST_REMOVE(txq, next);
> rte_free(txq);
> --
> 2.11.0
> On May 5, 2018, at 11:37 PM, Shahaf Shuler <shahafs@mellanox.com> wrote:
>
> Thursday, May 3, 2018 2:17 AM, Yongseok Koh:
>> Subject: [dpdk-dev] [PATCH 1/5] net/mlx5: trim debug messages for
>> reference counters
>>
>> Remove debug messages when getting an object. When releasing an object,
>> debug message will be printed only if the object is really freed.
>>
>> Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
>> ---
>
> Only one general comment as you are making some order here.
>
> I think it will be better to be explicit in the logging. Saying when new object is created:
> "port %u new <obj type> ...<pointer> .. for queue ... "
>
> No need for the refcnt as it is obviously 0.
>
> And when object is destroyed:
> "port %u <obj type>.. <pointer> ... for queue... is destroyed"
I'd rather drop this patch. This is Nelio's code and he might still want to
keep it. As he is now OOO, we can't hear from him.
This patch is nothing but cleanup.
Thanks,
Yongseok
@@ -308,9 +308,6 @@ mlx5_mr_get(struct rte_eth_dev *dev, struct rte_mempool *mp)
LIST_FOREACH(mr, &priv->mr, next) {
if (mr->mp == mp) {
rte_atomic32_inc(&mr->refcnt);
- DRV_LOG(DEBUG, "port %u memory region %p refcnt: %d",
- dev->data->port_id, (void *)mr,
- rte_atomic32_read(&mr->refcnt));
return mr;
}
}
@@ -330,9 +327,9 @@ int
mlx5_mr_release(struct mlx5_mr *mr)
{
assert(mr);
- DRV_LOG(DEBUG, "memory region %p refcnt: %d", (void *)mr,
- rte_atomic32_read(&mr->refcnt));
if (rte_atomic32_dec_and_test(&mr->refcnt)) {
+ DRV_LOG(DEBUG, "memory region %p refcnt: %d", (void *)mr,
+ rte_atomic32_read(&mr->refcnt));
claim_zero(mlx5_glue->dereg_mr(mr->mr));
LIST_REMOVE(mr, next);
rte_free(mr);
@@ -868,9 +868,6 @@ mlx5_rxq_ibv_get(struct rte_eth_dev *dev, uint16_t idx)
if (rxq_ctrl->ibv) {
mlx5_mr_get(dev, rxq_data->mp);
rte_atomic32_inc(&rxq_ctrl->ibv->refcnt);
- DRV_LOG(DEBUG, "port %u Verbs Rx queue %u: refcnt %d",
- dev->data->port_id, rxq_ctrl->idx,
- rte_atomic32_read(&rxq_ctrl->ibv->refcnt));
}
return rxq_ctrl->ibv;
}
@@ -896,10 +893,11 @@ mlx5_rxq_ibv_release(struct mlx5_rxq_ibv *rxq_ibv)
ret = mlx5_mr_release(rxq_ibv->mr);
if (!ret)
rxq_ibv->mr = NULL;
- DRV_LOG(DEBUG, "port %u Verbs Rx queue %u: refcnt %d",
- port_id(rxq_ibv->rxq_ctrl->priv),
- rxq_ibv->rxq_ctrl->idx, rte_atomic32_read(&rxq_ibv->refcnt));
if (rte_atomic32_dec_and_test(&rxq_ibv->refcnt)) {
+ DRV_LOG(DEBUG, "port %u Verbs Rx queue %u: refcnt %d",
+ port_id(rxq_ibv->rxq_ctrl->priv),
+ rxq_ibv->rxq_ctrl->idx,
+ rte_atomic32_read(&rxq_ibv->refcnt));
rxq_free_elts(rxq_ibv->rxq_ctrl);
claim_zero(mlx5_glue->destroy_wq(rxq_ibv->wq));
claim_zero(mlx5_glue->destroy_cq(rxq_ibv->cq));
@@ -1111,9 +1109,6 @@ mlx5_rxq_get(struct rte_eth_dev *dev, uint16_t idx)
rxq);
mlx5_rxq_ibv_get(dev, idx);
rte_atomic32_inc(&rxq_ctrl->refcnt);
- DRV_LOG(DEBUG, "port %u Rx queue %u: refcnt %d",
- dev->data->port_id, rxq_ctrl->idx,
- rte_atomic32_read(&rxq_ctrl->refcnt));
}
return rxq_ctrl;
}
@@ -1141,9 +1136,10 @@ mlx5_rxq_release(struct rte_eth_dev *dev, uint16_t idx)
assert(rxq_ctrl->priv);
if (rxq_ctrl->ibv && !mlx5_rxq_ibv_release(rxq_ctrl->ibv))
rxq_ctrl->ibv = NULL;
- DRV_LOG(DEBUG, "port %u Rx queue %u: refcnt %d", dev->data->port_id,
- rxq_ctrl->idx, rte_atomic32_read(&rxq_ctrl->refcnt));
if (rte_atomic32_dec_and_test(&rxq_ctrl->refcnt)) {
+ DRV_LOG(DEBUG, "port %u Rx queue %u: refcnt %d",
+ dev->data->port_id, rxq_ctrl->idx,
+ rte_atomic32_read(&rxq_ctrl->refcnt));
LIST_REMOVE(rxq_ctrl, next);
rte_free(rxq_ctrl);
(*priv->rxqs)[idx] = NULL;
@@ -1301,9 +1297,6 @@ mlx5_ind_table_ibv_get(struct rte_eth_dev *dev, const uint16_t *queues,
unsigned int i;
rte_atomic32_inc(&ind_tbl->refcnt);
- DRV_LOG(DEBUG, "port %u indirection table %p: refcnt %d",
- dev->data->port_id, (void *)ind_tbl,
- rte_atomic32_read(&ind_tbl->refcnt));
for (i = 0; i != ind_tbl->queues_n; ++i)
mlx5_rxq_get(dev, ind_tbl->queues[i]);
}
@@ -1327,9 +1320,6 @@ mlx5_ind_table_ibv_release(struct rte_eth_dev *dev,
{
unsigned int i;
- DRV_LOG(DEBUG, "port %u indirection table %p: refcnt %d",
- ((struct priv *)dev->data->dev_private)->port,
- (void *)ind_tbl, rte_atomic32_read(&ind_tbl->refcnt));
if (rte_atomic32_dec_and_test(&ind_tbl->refcnt)) {
claim_zero(mlx5_glue->destroy_rwq_ind_table
(ind_tbl->ind_table));
@@ -1339,6 +1329,9 @@ mlx5_ind_table_ibv_release(struct rte_eth_dev *dev,
for (i = 0; i != ind_tbl->queues_n; ++i)
claim_nonzero(mlx5_rxq_release(dev, ind_tbl->queues[i]));
if (!rte_atomic32_read(&ind_tbl->refcnt)) {
+ DRV_LOG(DEBUG, "port %u indirection table %p: refcnt %d",
+ ((struct priv *)dev->data->dev_private)->port,
+ (void *)ind_tbl, rte_atomic32_read(&ind_tbl->refcnt));
LIST_REMOVE(ind_tbl, next);
rte_free(ind_tbl);
return 0;
@@ -1566,9 +1559,6 @@ mlx5_hrxq_get(struct rte_eth_dev *dev,
continue;
}
rte_atomic32_inc(&hrxq->refcnt);
- DRV_LOG(DEBUG, "port %u hash Rx queue %p: refcnt %d",
- dev->data->port_id, (void *)hrxq,
- rte_atomic32_read(&hrxq->refcnt));
return hrxq;
}
return NULL;
@@ -1588,10 +1578,10 @@ mlx5_hrxq_get(struct rte_eth_dev *dev,
int
mlx5_hrxq_release(struct rte_eth_dev *dev, struct mlx5_hrxq *hrxq)
{
- DRV_LOG(DEBUG, "port %u hash Rx queue %p: refcnt %d",
- ((struct priv *)dev->data->dev_private)->port,
- (void *)hrxq, rte_atomic32_read(&hrxq->refcnt));
if (rte_atomic32_dec_and_test(&hrxq->refcnt)) {
+ DRV_LOG(DEBUG, "port %u hash Rx queue %p: refcnt %d",
+ ((struct priv *)dev->data->dev_private)->port,
+ (void *)hrxq, rte_atomic32_read(&hrxq->refcnt));
claim_zero(mlx5_glue->destroy_qp(hrxq->qp));
DEBUG("port %u delete QP %p: hash: 0x%" PRIx64 ", tunnel:"
" 0x%x, level: %u",
@@ -595,12 +595,8 @@ mlx5_txq_ibv_get(struct rte_eth_dev *dev, uint16_t idx)
if (!(*priv->txqs)[idx])
return NULL;
txq_ctrl = container_of((*priv->txqs)[idx], struct mlx5_txq_ctrl, txq);
- if (txq_ctrl->ibv) {
+ if (txq_ctrl->ibv)
rte_atomic32_inc(&txq_ctrl->ibv->refcnt);
- DRV_LOG(DEBUG, "port %u Verbs Tx queue %u: refcnt %d",
- dev->data->port_id, txq_ctrl->idx,
- rte_atomic32_read(&txq_ctrl->ibv->refcnt));
- }
return txq_ctrl->ibv;
}
@@ -617,10 +613,11 @@ int
mlx5_txq_ibv_release(struct mlx5_txq_ibv *txq_ibv)
{
assert(txq_ibv);
- DRV_LOG(DEBUG, "port %u Verbs Tx queue %u: refcnt %d",
- port_id(txq_ibv->txq_ctrl->priv),
- txq_ibv->txq_ctrl->idx, rte_atomic32_read(&txq_ibv->refcnt));
if (rte_atomic32_dec_and_test(&txq_ibv->refcnt)) {
+ DRV_LOG(DEBUG, "port %u Verbs Tx queue %u: refcnt %d",
+ port_id(txq_ibv->txq_ctrl->priv),
+ txq_ibv->txq_ctrl->idx,
+ rte_atomic32_read(&txq_ibv->refcnt));
claim_zero(mlx5_glue->destroy_qp(txq_ibv->qp));
claim_zero(mlx5_glue->destroy_cq(txq_ibv->cq));
LIST_REMOVE(txq_ibv, next);
@@ -860,9 +857,6 @@ mlx5_txq_get(struct rte_eth_dev *dev, uint16_t idx)
ctrl->txq.mp2mr[i]->mp));
}
rte_atomic32_inc(&ctrl->refcnt);
- DRV_LOG(DEBUG, "port %u Tx queue %u refcnt %d",
- dev->data->port_id,
- ctrl->idx, rte_atomic32_read(&ctrl->refcnt));
}
return ctrl;
}
@@ -889,8 +883,6 @@ mlx5_txq_release(struct rte_eth_dev *dev, uint16_t idx)
if (!(*priv->txqs)[idx])
return 0;
txq = container_of((*priv->txqs)[idx], struct mlx5_txq_ctrl, txq);
- DRV_LOG(DEBUG, "port %u Tx queue %u: refcnt %d", dev->data->port_id,
- txq->idx, rte_atomic32_read(&txq->refcnt));
if (txq->ibv && !mlx5_txq_ibv_release(txq->ibv))
txq->ibv = NULL;
for (i = 0; i != MLX5_PMD_TX_MP_CACHE; ++i) {
@@ -903,6 +895,9 @@ mlx5_txq_release(struct rte_eth_dev *dev, uint16_t idx)
munmap((void *)RTE_ALIGN_FLOOR((uintptr_t)txq->txq.bf_reg,
page_size), page_size);
if (rte_atomic32_dec_and_test(&txq->refcnt)) {
+ DRV_LOG(DEBUG, "port %u Tx queue %u: refcnt %d",
+ dev->data->port_id, txq->idx,
+ rte_atomic32_read(&txq->refcnt));
txq_free_elts(txq);
LIST_REMOVE(txq, next);
rte_free(txq);