common/mlx5: add MR control initialization
authorMichael Baum <michaelba@nvidia.com>
Tue, 19 Oct 2021 20:55:57 +0000 (23:55 +0300)
committerThomas Monjalon <thomas@monjalon.net>
Thu, 21 Oct 2021 13:54:32 +0000 (15:54 +0200)
Add function for MR control structure initialization.
This function include:
 - btree initialization.
 - dev_gen_ptr initialization.

Signed-off-by: Michael Baum <michaelba@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
drivers/common/mlx5/mlx5_common_mr.c
drivers/common/mlx5/mlx5_common_mr.h
drivers/common/mlx5/version.map
drivers/compress/mlx5/mlx5_compress.c
drivers/crypto/mlx5/mlx5_crypto.c
drivers/net/mlx5/mlx5_rxq.c
drivers/net/mlx5/mlx5_txq.c
drivers/regex/mlx5/mlx5_regex_control.c

index 1beaead..b4f2b81 100644 (file)
@@ -271,6 +271,34 @@ mlx5_mr_btree_dump(struct mlx5_mr_btree *bt __rte_unused)
 #endif
 }
 
+/**
+ * Initialize per-queue MR control descriptor.
+ *
+ * @param mr_ctrl
+ *   Pointer to MR control structure.
+ * @param dev_gen_ptr
+ *   Pointer to generation number of global cache.
+ * @param socket
+ *   NUMA socket on which memory must be allocated.
+ *
+ * @return
+ *   0 on success, a negative errno value otherwise and rte_errno is set.
+ */
+int
+mlx5_mr_ctrl_init(struct mlx5_mr_ctrl *mr_ctrl, uint32_t *dev_gen_ptr,
+                 int socket)
+{
+       if (mr_ctrl == NULL) {
+               rte_errno = EINVAL;
+               return -rte_errno;
+       }
+       /* Save pointer of global generation number to check memory event. */
+       mr_ctrl->dev_gen_ptr = dev_gen_ptr;
+       /* Initialize B-tree and allocate memory for bottom-half cache table. */
+       return mlx5_mr_btree_init(&mr_ctrl->cache_bh, MLX5_MR_BTREE_CACHE_N,
+                                 socket);
+}
+
 /**
  * Find virtually contiguous memory chunk in a given MR.
  *
index 15489cd..1392d9b 100644 (file)
@@ -124,6 +124,9 @@ mlx5_mr_lookup_lkey(struct mr_cache_entry *lkp_tbl, uint16_t *cached_idx,
        return UINT32_MAX;
 }
 
+__rte_internal
+int mlx5_mr_ctrl_init(struct mlx5_mr_ctrl *mr_ctrl, uint32_t *dev_gen_ptr,
+                     int socket);
 __rte_internal
 int mlx5_mr_btree_init(struct mlx5_mr_btree *bt, int n, int socket);
 __rte_internal
index 44c4593..04a494d 100644 (file)
@@ -111,6 +111,7 @@ INTERNAL {
        mlx5_mr_btree_free;
        mlx5_mr_btree_init;
        mlx5_mr_create_primary;
+       mlx5_mr_ctrl_init;
        mlx5_mr_dump_cache;
        mlx5_mr_flush_local_cache;
        mlx5_mr_free;
index 8fe6529..66b80a4 100644 (file)
@@ -206,8 +206,8 @@ mlx5_compress_qp_setup(struct rte_compressdev *dev, uint16_t qp_id,
                return -rte_errno;
        }
        dev->data->queue_pairs[qp_id] = qp;
-       if (mlx5_mr_btree_init(&qp->mr_ctrl.cache_bh, MLX5_MR_BTREE_CACHE_N,
-                              priv->dev_config.socket_id)) {
+       if (mlx5_mr_ctrl_init(&qp->mr_ctrl, &priv->mr_scache.dev_gen,
+                             priv->dev_config.socket_id)) {
                DRV_LOG(ERR, "Cannot allocate MR Btree for qp %u.",
                        (uint32_t)qp_id);
                rte_errno = ENOMEM;
@@ -258,8 +258,6 @@ mlx5_compress_qp_setup(struct rte_compressdev *dev, uint16_t qp_id,
        ret = mlx5_devx_qp2rts(&qp->qp, 0);
        if (ret)
                goto err;
-       /* Save pointer of global generation number to check memory event. */
-       qp->mr_ctrl.dev_gen_ptr = &priv->mr_scache.dev_gen;
        DRV_LOG(INFO, "QP %u: SQN=0x%X CQN=0x%X entries num = %u",
                (uint32_t)qp_id, qp->qp.qp->id, qp->cq.cq->id, qp->entries_n);
        return 0;
index ff4c67c..77f0688 100644 (file)
@@ -677,14 +677,13 @@ mlx5_crypto_queue_pair_setup(struct rte_cryptodev *dev, uint16_t qp_id,
                DRV_LOG(ERR, "Failed to create QP.");
                goto error;
        }
-       if (mlx5_mr_btree_init(&qp->mr_ctrl.cache_bh, MLX5_MR_BTREE_CACHE_N,
-                              priv->dev_config.socket_id) != 0) {
+       if (mlx5_mr_ctrl_init(&qp->mr_ctrl, &priv->mr_scache.dev_gen,
+                             priv->dev_config.socket_id) != 0) {
                DRV_LOG(ERR, "Cannot allocate MR Btree for qp %u.",
                        (uint32_t)qp_id);
                rte_errno = ENOMEM;
                goto error;
        }
-       qp->mr_ctrl.dev_gen_ptr = &priv->mr_scache.dev_gen;
        /*
         * In Order to configure self loopback, when calling devx qp2rts the
         * remote QP id that is used is the id of the same QP.
index 8c731f2..a6a1400 100644 (file)
@@ -1449,13 +1449,11 @@ mlx5_rxq_new(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,
                goto error;
        }
        tmpl->type = MLX5_RXQ_TYPE_STANDARD;
-       if (mlx5_mr_btree_init(&tmpl->rxq.mr_ctrl.cache_bh,
-                              MLX5_MR_BTREE_CACHE_N, socket)) {
+       if (mlx5_mr_ctrl_init(&tmpl->rxq.mr_ctrl,
+                             &priv->sh->share_cache.dev_gen, socket)) {
                /* rte_errno is already set. */
                goto error;
        }
-       /* Rx queues don't use this pointer, but we want a valid structure. */
-       tmpl->rxq.mr_ctrl.dev_gen_ptr = &priv->sh->share_cache.dev_gen;
        tmpl->socket = socket;
        if (dev->data->dev_conf.intr_conf.rxq)
                tmpl->irq = 1;
index 32ff3fb..00dfb42 100644 (file)
@@ -1134,13 +1134,11 @@ mlx5_txq_new(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,
                rte_errno = ENOMEM;
                return NULL;
        }
-       if (mlx5_mr_btree_init(&tmpl->txq.mr_ctrl.cache_bh,
-                              MLX5_MR_BTREE_CACHE_N, socket)) {
+       if (mlx5_mr_ctrl_init(&tmpl->txq.mr_ctrl,
+                             &priv->sh->share_cache.dev_gen, socket)) {
                /* rte_errno is already set. */
                goto error;
        }
-       /* Save pointer of global generation number to check memory event. */
-       tmpl->txq.mr_ctrl.dev_gen_ptr = &priv->sh->share_cache.dev_gen;
        MLX5_ASSERT(desc > MLX5_TX_COMP_THRESH);
        tmpl->txq.offloads = conf->offloads |
                             dev->data->dev_conf.txmode.offloads;
index 545bbbc..6735e51 100644 (file)
@@ -242,10 +242,8 @@ mlx5_regex_qp_setup(struct rte_regexdev *dev, uint16_t qp_ind,
                nb_sq_config++;
        }
 
-       /* Save pointer of global generation number to check memory event. */
-       qp->mr_ctrl.dev_gen_ptr = &priv->mr_scache.dev_gen;
-       ret = mlx5_mr_btree_init(&qp->mr_ctrl.cache_bh, MLX5_MR_BTREE_CACHE_N,
-                                rte_socket_id());
+       ret = mlx5_mr_ctrl_init(&qp->mr_ctrl, &priv->mr_scache.dev_gen,
+                               rte_socket_id());
        if (ret) {
                DRV_LOG(ERR, "Error setting up mr btree");
                goto err_btree;