]> git.droids-corp.org - dpdk.git/commitdiff
common/mlx5: fix queue size in DevX queue pair creation
authorRaja Zidane <rzidane@nvidia.com>
Mon, 8 Nov 2021 13:09:21 +0000 (13:09 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 8 Nov 2021 18:46:28 +0000 (19:46 +0100)
The number of WQEBBs was provided to QP create, and QP size was calculated
by multiplying the number of WQEBBs by 64, which is the send WQE size.
When creating RQ in the QP (i.e., vdpa driver), the queue size was bigger
because the receive WQE size is 16.
Provide queue size to QP create instead of the number of WQEBBs.

Fixes: f9213ab12cf9 ("common/mlx5: share DevX queue pair operations")
Signed-off-by: Raja Zidane <rzidane@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
drivers/common/mlx5/mlx5_common_devx.c
drivers/common/mlx5/mlx5_common_devx.h
drivers/compress/mlx5/mlx5_compress.c
drivers/crypto/mlx5/mlx5_crypto.c
drivers/regex/mlx5/mlx5_regex_control.c
drivers/vdpa/mlx5/mlx5_vdpa_event.c

index 5afe6f2b9cc5289806f0fb10c7f31f68bc083adb..5f53996b7207f3efad003193be78f13edcda3483 100644 (file)
@@ -338,8 +338,8 @@ mlx5_devx_qp_destroy(struct mlx5_devx_qp *qp)
  *   Context returned from mlx5 open_device() glue function.
  * @param[in/out] qp_obj
  *   Pointer to QP to create.
- * @param[in] log_wqbb_n
- *   Log of number of WQBBs in queue.
+ * @param[in] queue_size
+ *   Size of queue to create.
  * @param[in] attr
  *   Pointer to QP attributes structure.
  * @param[in] socket
@@ -349,7 +349,7 @@ mlx5_devx_qp_destroy(struct mlx5_devx_qp *qp)
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
 int
-mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj, uint32_t log_wqbb_n,
+mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj, uint32_t queue_size,
                    struct mlx5_devx_qp_attr *attr, int socket)
 {
        struct mlx5_devx_obj *qp = NULL;
@@ -357,7 +357,6 @@ mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj, uint32_t log_wqbb_n,
        void *umem_buf = NULL;
        size_t alignment = MLX5_WQE_BUF_ALIGNMENT;
        uint32_t umem_size, umem_dbrec;
-       uint32_t num_of_wqbbs = RTE_BIT32(log_wqbb_n);
        int ret;
 
        if (alignment == (size_t)-1) {
@@ -366,7 +365,7 @@ mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj, uint32_t log_wqbb_n,
                return -rte_errno;
        }
        /* Allocate memory buffer for WQEs and doorbell record. */
-       umem_size = MLX5_WQE_SIZE * num_of_wqbbs;
+       umem_size = queue_size;
        umem_dbrec = RTE_ALIGN(umem_size, MLX5_DBR_SIZE);
        umem_size += MLX5_DBR_SIZE;
        umem_buf = mlx5_malloc(MLX5_MEM_RTE | MLX5_MEM_ZERO, umem_size,
index df92feebe2a158a1b771577af59b7fc0107da0d8..12b0cb121f6e504775fd1320bab002e33aecda3c 100644 (file)
@@ -89,7 +89,7 @@ void mlx5_devx_qp_destroy(struct mlx5_devx_qp *qp);
 
 __rte_internal
 int mlx5_devx_qp_create(void *ctx, struct mlx5_devx_qp *qp_obj,
-                       uint32_t log_wqbb_n,
+                       uint32_t queue_size,
                        struct mlx5_devx_qp_attr *attr, int socket);
 
 __rte_internal
index 7813af38e6bc6a71548f0bb244948919fd3061da..9d5893e790c0ad1a6cb3f81a6d87c100e01eff5b 100644 (file)
@@ -248,8 +248,9 @@ mlx5_compress_qp_setup(struct rte_compressdev *dev, uint16_t qp_id,
        qp_attr.num_of_send_wqbbs = RTE_BIT32(log_ops_n);
        qp_attr.mmo = priv->mmo_decomp_qp && priv->mmo_comp_qp
                        && priv->mmo_dma_qp;
-       ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp->qp, log_ops_n, &qp_attr,
-                                 socket_id);
+       ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp->qp,
+                                       qp_attr.num_of_send_wqbbs *
+                                       MLX5_WQE_SIZE, &qp_attr, socket_id);
        if (ret != 0) {
                DRV_LOG(ERR, "Failed to create QP.");
                goto err;
index 9fdbee9be1e1df81334cbf1a5e3ff2bfa6e04c58..3caa22f35f87837f7a6c2ab327d64c7a628f3364 100644 (file)
@@ -629,8 +629,9 @@ mlx5_crypto_queue_pair_setup(struct rte_cryptodev *dev, uint16_t qp_id,
        attr.num_of_send_wqbbs = RTE_BIT32(log_wqbb_n);
        attr.ts_format =
                mlx5_ts_format_conv(priv->cdev->config.hca_attr.qp_ts_format);
-       ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp->qp_obj, log_wqbb_n,
-                                 &attr, socket_id);
+       ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp->qp_obj,
+                                       attr.num_of_send_wqbbs * MLX5_WQE_SIZE,
+                                       &attr, socket_id);
        if (ret) {
                DRV_LOG(ERR, "Failed to create QP.");
                goto error;
index 46e400a93fa2cb97248c7c12fec1e913a4b0fad3..9d5b4bd174c8f0e73640137b51e0313907b6a81d 100644 (file)
@@ -154,8 +154,8 @@ regex_ctrl_create_hw_qp(struct mlx5_regex_priv *priv, struct mlx5_regex_qp *qp,
                        log_nb_desc));
        attr.mmo = priv->mmo_regex_qp_cap;
        ret = mlx5_devx_qp_create(priv->cdev->ctx, &qp_obj->qp_obj,
-                       MLX5_REGEX_WQE_LOG_NUM(priv->has_umr, log_nb_desc),
-                       &attr, SOCKET_ID_ANY);
+                       attr.num_of_send_wqbbs * MLX5_WQE_SIZE, &attr,
+                       SOCKET_ID_ANY);
        if (ret) {
                DRV_LOG(ERR, "Can't create QP object.");
                rte_errno = ENOMEM;
index 657c39dae18501be69c4990940e8ed57de2a8548..f8d910b33f82902ec0e1ca3409ac8210449a5e4f 100644 (file)
@@ -594,8 +594,9 @@ mlx5_vdpa_event_qp_create(struct mlx5_vdpa_priv *priv, uint16_t desc_n,
        attr.num_of_send_wqbbs = 0; /* No need SQ. */
        attr.ts_format =
                mlx5_ts_format_conv(priv->cdev->config.hca_attr.qp_ts_format);
-       ret = mlx5_devx_qp_create(priv->cdev->ctx, &(eqp->sw_qp), log_desc_n,
-                                 &attr, SOCKET_ID_ANY);
+       ret = mlx5_devx_qp_create(priv->cdev->ctx, &(eqp->sw_qp),
+                                       attr.num_of_receive_wqes *
+                                       MLX5_WSEG_SIZE, &attr, SOCKET_ID_ANY);
        if (ret) {
                DRV_LOG(ERR, "Failed to create SW QP(%u).", rte_errno);
                goto error;