common/mlx5: remove redundant parameter in MR search
[dpdk.git] / drivers / crypto / mlx5 / mlx5_crypto.c
index 6724abd..3e4fd9b 100644 (file)
@@ -4,6 +4,7 @@
 
 #include <rte_malloc.h>
 #include <rte_mempool.h>
+#include <rte_eal_paging.h>
 #include <rte_errno.h>
 #include <rte_log.h>
 #include <rte_bus_pci.h>
@@ -33,7 +34,7 @@
 
 TAILQ_HEAD(mlx5_crypto_privs, mlx5_crypto_priv) mlx5_crypto_priv_list =
                                TAILQ_HEAD_INITIALIZER(mlx5_crypto_priv_list);
-static pthread_mutex_t priv_list_lock = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t priv_list_lock;
 
 int mlx5_crypto_logtype;
 
@@ -59,7 +60,8 @@ const struct rte_cryptodev_capabilities mlx5_crypto_caps[] = {
                                },
                                .dataunit_set =
                                RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_512_BYTES |
-                               RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_4096_BYTES,
+                               RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_4096_BYTES |
+                               RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_1_MEGABYTES,
                        }, }
                }, }
        },
@@ -221,6 +223,11 @@ mlx5_crypto_sym_session_configure(struct rte_cryptodev *dev,
                                             ((uint32_t)MLX5_BLOCK_SIZE_4096B <<
                                             MLX5_BLOCK_SIZE_OFFSET);
                break;
+       case 1048576:
+               sess_private_data->bsp_res = rte_cpu_to_be_32
+                                            ((uint32_t)MLX5_BLOCK_SIZE_1MB <<
+                                            MLX5_BLOCK_SIZE_OFFSET);
+               break;
        default:
                DRV_LOG(ERR, "Cipher data unit length is not supported.");
                return -ENOTSUP;
@@ -305,9 +312,9 @@ mlx5_crypto_get_block_size(struct rte_crypto_op *op)
 }
 
 static __rte_always_inline uint32_t
-mlx5_crypto_klm_set(struct mlx5_crypto_priv *priv, struct mlx5_crypto_qp *qp,
-                     struct rte_mbuf *mbuf, struct mlx5_wqe_dseg *klm,
-                     uint32_t offset, uint32_t *remain)
+mlx5_crypto_klm_set(struct mlx5_crypto_qp *qp, struct rte_mbuf *mbuf,
+                   struct mlx5_wqe_dseg *klm, uint32_t offset,
+                   uint32_t *remain)
 {
        uint32_t data_len = (rte_pktmbuf_data_len(mbuf) - offset);
        uintptr_t addr = rte_pktmbuf_mtod_offset(mbuf, uintptr_t, offset);
@@ -317,22 +324,21 @@ mlx5_crypto_klm_set(struct mlx5_crypto_priv *priv, struct mlx5_crypto_qp *qp,
        *remain -= data_len;
        klm->bcount = rte_cpu_to_be_32(data_len);
        klm->pbuf = rte_cpu_to_be_64(addr);
-       klm->lkey = mlx5_mr_mb2mr(priv->cdev, 0, &qp->mr_ctrl, mbuf);
+       klm->lkey = mlx5_mr_mb2mr(&qp->mr_ctrl, mbuf, 0);
        return klm->lkey;
 
 }
 
 static __rte_always_inline uint32_t
-mlx5_crypto_klms_set(struct mlx5_crypto_priv *priv, struct mlx5_crypto_qp *qp,
-                    struct rte_crypto_op *op, struct rte_mbuf *mbuf,
-                    struct mlx5_wqe_dseg *klm)
+mlx5_crypto_klms_set(struct mlx5_crypto_qp *qp, struct rte_crypto_op *op,
+                    struct rte_mbuf *mbuf, struct mlx5_wqe_dseg *klm)
 {
        uint32_t remain_len = op->sym->cipher.data.length;
        uint32_t nb_segs = mbuf->nb_segs;
        uint32_t klm_n = 1u;
 
        /* First mbuf needs to take the cipher offset. */
-       if (unlikely(mlx5_crypto_klm_set(priv, qp, mbuf, klm,
+       if (unlikely(mlx5_crypto_klm_set(qp, mbuf, klm,
                     op->sym->cipher.data.offset, &remain_len) == UINT32_MAX)) {
                op->status = RTE_CRYPTO_OP_STATUS_ERROR;
                return 0;
@@ -344,7 +350,7 @@ mlx5_crypto_klms_set(struct mlx5_crypto_priv *priv, struct mlx5_crypto_qp *qp,
                        op->status = RTE_CRYPTO_OP_STATUS_INVALID_ARGS;
                        return 0;
                }
-               if (unlikely(mlx5_crypto_klm_set(priv, qp, mbuf, ++klm, 0,
+               if (unlikely(mlx5_crypto_klm_set(qp, mbuf, ++klm, 0,
                                                 &remain_len) == UINT32_MAX)) {
                        op->status = RTE_CRYPTO_OP_STATUS_ERROR;
                        return 0;
@@ -370,7 +376,7 @@ mlx5_crypto_wqe_set(struct mlx5_crypto_priv *priv,
        uint32_t ds;
        bool ipl = op->sym->m_dst == NULL || op->sym->m_dst == op->sym->m_src;
        /* Set UMR WQE. */
-       uint32_t klm_n = mlx5_crypto_klms_set(priv, qp, op,
+       uint32_t klm_n = mlx5_crypto_klms_set(qp, op,
                                   ipl ? op->sym->m_src : op->sym->m_dst, klms);
 
        if (unlikely(klm_n == 0))
@@ -396,8 +402,7 @@ mlx5_crypto_wqe_set(struct mlx5_crypto_priv *priv,
        cseg = RTE_PTR_ADD(cseg, priv->umr_wqe_size);
        klms = RTE_PTR_ADD(cseg, sizeof(struct mlx5_rdma_write_wqe));
        if (!ipl) {
-               klm_n = mlx5_crypto_klms_set(priv, qp, op, op->sym->m_src,
-                                            klms);
+               klm_n = mlx5_crypto_klms_set(qp, op, op->sym->m_src, klms);
                if (unlikely(klm_n == 0))
                        return 0;
        } else {
@@ -643,7 +648,7 @@ 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_ctrl_init(&qp->mr_ctrl, &priv->cdev->mr_scache.dev_gen,
+       if (mlx5_mr_ctrl_init(&qp->mr_ctrl, priv->cdev,
                              priv->dev_config.socket_id) != 0) {
                DRV_LOG(ERR, "Cannot allocate MR Btree for qp %u.",
                        (uint32_t)qp_id);
@@ -908,7 +913,9 @@ mlx5_crypto_dev_probe(struct mlx5_common_device *cdev)
        priv->keytag = rte_cpu_to_be_64(devarg_prms.keytag);
        priv->max_segs_num = devarg_prms.max_segs_num;
        priv->umr_wqe_size = sizeof(struct mlx5_wqe_umr_bsf_seg) +
-                            sizeof(struct mlx5_umr_wqe) +
+                            sizeof(struct mlx5_wqe_cseg) +
+                            sizeof(struct mlx5_wqe_umr_cseg) +
+                            sizeof(struct mlx5_wqe_mkey_cseg) +
                             RTE_ALIGN(priv->max_segs_num, 4) *
                             sizeof(struct mlx5_wqe_dseg);
        rdmw_wqe_size = sizeof(struct mlx5_rdma_write_wqe) +
@@ -921,6 +928,9 @@ mlx5_crypto_dev_probe(struct mlx5_common_device *cdev)
        pthread_mutex_lock(&priv_list_lock);
        TAILQ_INSERT_TAIL(&mlx5_crypto_priv_list, priv, next);
        pthread_mutex_unlock(&priv_list_lock);
+
+       rte_cryptodev_pmd_probing_finish(crypto_dev);
+
        return 0;
 }
 
@@ -964,6 +974,7 @@ static struct mlx5_class_driver mlx5_crypto_driver = {
 
 RTE_INIT(rte_mlx5_crypto_init)
 {
+       pthread_mutex_init(&priv_list_lock, NULL);
        mlx5_common_init();
        if (mlx5_glue != NULL)
                mlx5_class_driver_register(&mlx5_crypto_driver);