This patch uses the two session mempool approach to vhost crypto.
One mempool is for session header objects, and the other is for
session private data.
Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
Acked-by: Fiona Trahe <fiona.trahe@intel.com>
Acked-by: Akhil Goyal <akhil.goyal@nxp.com>
        int vids[MAX_NB_SOCKETS];
        uint32_t nb_vids;
        struct rte_mempool *sess_pool;
+       struct rte_mempool *sess_priv_pool;
        struct rte_mempool *cop_pool;
        uint8_t cid;
        uint32_t qid;
        }
 
        ret = rte_vhost_crypto_create(vid, info->cid, info->sess_pool,
+                       info->sess_priv_pool,
                        rte_lcore_to_socket_id(options.los[i].lcore_id));
        if (ret) {
                RTE_LOG(ERR, USER1, "Cannot create vhost crypto\n");
 
                rte_mempool_free(info->cop_pool);
                rte_mempool_free(info->sess_pool);
+               rte_mempool_free(info->sess_priv_pool);
 
                for (j = 0; j < lo->nb_sockets; j++) {
                        rte_vhost_driver_unregister(lo->socket_files[i]);
                }
 
                snprintf(name, 127, "SESS_POOL_%u", lo->lcore_id);
-               info->sess_pool = rte_mempool_create(name, SESSION_MAP_ENTRIES,
+               info->sess_pool = rte_cryptodev_sym_session_pool_create(name,
+                               SESSION_MAP_ENTRIES, 0, 0, 0,
+                               rte_lcore_to_socket_id(lo->lcore_id));
+
+               snprintf(name, 127, "SESS_POOL_PRIV_%u", lo->lcore_id);
+               info->sess_priv_pool = rte_mempool_create(name,
+                               SESSION_MAP_ENTRIES,
                                rte_cryptodev_sym_get_private_session_size(
                                info->cid), 64, 0, NULL, NULL, NULL, NULL,
                                rte_lcore_to_socket_id(lo->lcore_id), 0);
-               if (!info->sess_pool) {
+               if (!info->sess_priv_pool || info->sess_pool) {
                        RTE_LOG(ERR, USER1, "Failed to create mempool");
                        goto error_exit;
                }
 
  *  The identifier of DPDK Cryptodev, the same cryptodev_id can be assigned to
  *  multiple Vhost-crypto devices.
  * @param sess_pool
- *  The pointer to the created cryptodev session pool with the private data size
- *  matches the target DPDK Cryptodev.
+ *  The pointer to the created cryptodev session pool.
+ * @param sess_priv_pool
+ *  The pointer to the created cryptodev session private data mempool.
  * @param socket_id
  *  NUMA Socket ID to allocate resources on. *
  * @return
  */
 int __rte_experimental
 rte_vhost_crypto_create(int vid, uint8_t cryptodev_id,
-               struct rte_mempool *sess_pool, int socket_id);
+               struct rte_mempool *sess_pool,
+               struct rte_mempool *sess_priv_pool,
+               int socket_id);
 
 /**
  *  Free the Vhost-crypto instance
 
        struct rte_hash *session_map;
        struct rte_mempool *mbuf_pool;
        struct rte_mempool *sess_pool;
+       struct rte_mempool *sess_priv_pool;
        struct rte_mempool *wb_pool;
 
        /** DPDK cryptodev ID */
        }
 
        if (rte_cryptodev_sym_session_init(vcrypto->cid, session, &xform1,
-                       vcrypto->sess_pool) < 0) {
+                       vcrypto->sess_priv_pool) < 0) {
                VC_LOG_ERR("Failed to initialize session");
                sess_param->session_id = -VIRTIO_CRYPTO_ERR;
                return;
 
 int __rte_experimental
 rte_vhost_crypto_create(int vid, uint8_t cryptodev_id,
-               struct rte_mempool *sess_pool, int socket_id)
+               struct rte_mempool *sess_pool,
+               struct rte_mempool *sess_priv_pool,
+               int socket_id)
 {
        struct virtio_net *dev = get_device(vid);
        struct rte_hash_parameters params = {0};
        }
 
        vcrypto->sess_pool = sess_pool;
+       vcrypto->sess_priv_pool = sess_priv_pool;
        vcrypto->cid = cryptodev_id;
        vcrypto->cache_session_id = UINT64_MAX;
        vcrypto->last_session_id = 1;