net/mlx5: fix send queue doorbell
authorMichael Baum <michaelba@nvidia.com>
Thu, 1 Oct 2020 14:09:12 +0000 (14:09 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 9 Oct 2020 11:17:42 +0000 (13:17 +0200)
As part of SQ creation for Tx queue objects, a HW doorbell memory should
be allocated and mapped to the HW.

The SQ doorbell handler was wrongly saved on the CQ fields what caused
wrong doorbell release in the Tx queue object destroy flow.

Save the SQ doorbell handler in the SQ fields.

Fixes: 3a87b964edd3 ("net/mlx5: create Tx queues with DevX")
Cc: stable@dpdk.org
Signed-off-by: Michael Baum <michaelba@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
drivers/net/mlx5/mlx5_txq.c

index 1bb667d..fc730fa 100644 (file)
@@ -1050,8 +1050,8 @@ mlx5_txq_obj_devx_new(struct rte_eth_dev *dev, uint16_t idx)
                        dev->data->port_id, txq_data->idx);
                goto error;
        }
-       /* Allocate doorbell record for completion queue. */
-       txq_obj->cq_dbrec_offset = mlx5_get_dbr(sh->ctx,
+       /* Allocate doorbell record for send queue. */
+       txq_obj->sq_dbrec_offset = mlx5_get_dbr(sh->ctx,
                                                &priv->dbrpgs,
                                                &txq_obj->sq_dbrec_page);
        if (txq_obj->sq_dbrec_offset < 0)
@@ -1076,9 +1076,9 @@ mlx5_txq_obj_devx_new(struct rte_eth_dev *dev, uint16_t idx)
        sq_attr.wq_attr.log_wq_stride = rte_log2_u32(MLX5_WQE_SIZE);
        sq_attr.wq_attr.log_wq_sz = txq_data->wqe_n;
        sq_attr.wq_attr.dbr_umem_valid = 1;
-       sq_attr.wq_attr.dbr_addr = txq_obj->cq_dbrec_offset;
+       sq_attr.wq_attr.dbr_addr = txq_obj->sq_dbrec_offset;
        sq_attr.wq_attr.dbr_umem_id =
-                       mlx5_os_get_umem_id(txq_obj->cq_dbrec_page->umem);
+                       mlx5_os_get_umem_id(txq_obj->sq_dbrec_page->umem);
        sq_attr.wq_attr.wq_umem_valid = 1;
        sq_attr.wq_attr.wq_umem_id = mlx5_os_get_umem_id(txq_obj->sq_umem);
        sq_attr.wq_attr.wq_umem_offset = (uintptr_t)txq_obj->sq_buf % page_size;