diff --git a/lib/bdev/crypto/vbdev_crypto.c b/lib/bdev/crypto/vbdev_crypto.c index e0e9f92b1..2cd3de3ce 100644 --- a/lib/bdev/crypto/vbdev_crypto.c +++ b/lib/bdev/crypto/vbdev_crypto.c @@ -160,7 +160,7 @@ struct vbdev_crypto { static TAILQ_HEAD(, vbdev_crypto) g_vbdev_crypto = TAILQ_HEAD_INITIALIZER(g_vbdev_crypto); /* Shared mempools between all devices on this system */ -static struct spdk_mempool *g_session_mp = NULL; /* session mempool */ +static struct rte_mempool *g_session_mp = NULL; /* session mempool */ static struct spdk_mempool *g_mbuf_mp = NULL; /* mbuf mempool */ static struct rte_mempool *g_crypto_op_mp = NULL; /* crypto operations, must be rte* mempool */ @@ -207,6 +207,7 @@ vbdev_crypto_init_crypto_drivers(void) struct device_qp *dev_qp = NULL; unsigned int max_sess_size = 0, sess_size; uint16_t num_lcores = rte_lcore_count(); + uint32_t cache_size; /* Only the first call, via RPC or module init should init the crypto drivers. */ if (g_session_mp != NULL) { @@ -240,9 +241,9 @@ vbdev_crypto_init_crypto_drivers(void) } } - g_session_mp = spdk_mempool_create("session_mp", NUM_SESSIONS, max_sess_size, - SPDK_MEMPOOL_DEFAULT_CACHE_SIZE, - SPDK_ENV_SOCKET_ID_ANY); + cache_size = spdk_min(RTE_MEMPOOL_CACHE_MAX_SIZE, NUM_SESSIONS / 2 / num_lcores); + g_session_mp = rte_mempool_create("session_mp", NUM_SESSIONS, max_sess_size, cache_size, + 0, NULL, NULL, NULL, NULL, SOCKET_ID_ANY, 0); if (g_session_mp == NULL) { SPDK_ERRLOG("Cannot create session pool max size 0x%x\n", max_sess_size); return -ENOMEM; @@ -321,7 +322,7 @@ vbdev_crypto_init_crypto_drivers(void) */ for (j = 0; j < device->cdev_info.max_nb_queue_pairs; j++) { rc = rte_cryptodev_queue_pair_setup(cdev_id, j, &qp_conf, SOCKET_ID_ANY, - (struct rte_mempool *)g_session_mp); + g_session_mp); if (rc < 0) { SPDK_ERRLOG("Failed to setup queue pair %u on " @@ -375,7 +376,7 @@ error_create_op: spdk_mempool_free(g_mbuf_mp); g_mbuf_mp = NULL; error_create_mbuf: - spdk_mempool_free(g_session_mp); + rte_mempool_free(g_session_mp); g_session_mp = NULL; return rc; } @@ -1324,7 +1325,7 @@ vbdev_crypto_finish(void) rte_mempool_free(g_crypto_op_mp); spdk_mempool_free(g_mbuf_mp); - spdk_mempool_free(g_session_mp); + rte_mempool_free(g_session_mp); } /* During init we'll be asked how much memory we'd like passed to us @@ -1505,14 +1506,14 @@ vbdev_crypto_claim(struct spdk_bdev *bdev) } /* Get sessions. */ - vbdev->session_encrypt = rte_cryptodev_sym_session_create((struct rte_mempool *)g_session_mp); + vbdev->session_encrypt = rte_cryptodev_sym_session_create(g_session_mp); if (NULL == vbdev->session_encrypt) { SPDK_ERRLOG("ERROR trying to create crypto session!\n"); rc = -EINVAL; goto error_session_en_create; } - vbdev->session_decrypt = rte_cryptodev_sym_session_create((struct rte_mempool *)g_session_mp); + vbdev->session_decrypt = rte_cryptodev_sym_session_create(g_session_mp); if (NULL == vbdev->session_decrypt) { SPDK_ERRLOG("ERROR trying to create crypto session!\n"); rc = -EINVAL; @@ -1530,7 +1531,7 @@ vbdev_crypto_claim(struct spdk_bdev *bdev) vbdev->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT; rc = rte_cryptodev_sym_session_init(device->cdev_id, vbdev->session_encrypt, &vbdev->cipher_xform, - (struct rte_mempool *)g_session_mp); + g_session_mp); if (rc < 0) { SPDK_ERRLOG("ERROR trying to init encrypt session!\n"); rc = -EINVAL; @@ -1540,7 +1541,7 @@ vbdev_crypto_claim(struct spdk_bdev *bdev) vbdev->cipher_xform.cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT; rc = rte_cryptodev_sym_session_init(device->cdev_id, vbdev->session_decrypt, &vbdev->cipher_xform, - (struct rte_mempool *)g_session_mp); + g_session_mp); if (rc < 0) { SPDK_ERRLOG("ERROR trying to init decrypt session!\n"); rc = -EINVAL; diff --git a/test/unit/lib/bdev/crypto.c/crypto_ut.c b/test/unit/lib/bdev/crypto.c/crypto_ut.c index d842475ff..80c688ac6 100644 --- a/test/unit/lib/bdev/crypto.c/crypto_ut.c +++ b/test/unit/lib/bdev/crypto.c/crypto_ut.c @@ -170,6 +170,12 @@ DEFINE_STUB(spdk_env_get_socket_id, uint32_t, (uint32_t core), 0); DEFINE_STUB(rte_cryptodev_count, uint8_t, (void), 0); DEFINE_STUB(rte_eal_get_configuration, struct rte_config *, (void), NULL); DEFINE_STUB_V(rte_mempool_free, (struct rte_mempool *mp)); +DEFINE_STUB(rte_mempool_create, struct rte_mempool *, (const char *name, unsigned n, + unsigned elt_size, + unsigned cache_size, unsigned private_data_size, + rte_mempool_ctor_t *mp_init, void *mp_init_arg, + rte_mempool_obj_cb_t *obj_init, void *obj_init_arg, + int socket_id, unsigned flags), (struct rte_mempool *)1); DEFINE_STUB(rte_socket_id, unsigned, (void), 0); DEFINE_STUB(rte_crypto_op_pool_create, struct rte_mempool *, (const char *name, enum rte_crypto_op_type type, unsigned nb_elts, @@ -684,7 +690,7 @@ test_initdrivers(void) { int rc; static struct spdk_mempool *orig_mbuf_mp; - static struct spdk_mempool *orig_session_mp; + static struct rte_mempool *orig_session_mp; /* These tests will alloc and free our g_mbuf_mp @@ -770,7 +776,7 @@ test_initdrivers(void) CU_ASSERT(g_mbuf_mp != NULL); CU_ASSERT(g_session_mp != NULL); spdk_mempool_free(g_mbuf_mp); - spdk_mempool_free(g_session_mp); + rte_mempool_free(g_session_mp); CU_ASSERT(rc == 0); /* restore our initial values. */