Commit 1a150069 authored by Darek Stojaczyk's avatar Darek Stojaczyk Committed by Jim Harris
Browse files

bdev/crypto: use rte_mempool for g_session_mp



DPDK 19.02 requires this mempool to be allocated via
crypto-specific function which returns rte_mempool.
To keep the amount of #ifs minimal, we'll use rte_mempool
unconditionally.

Change-Id: I3a09de41e237e168580bb92b574854e291e68a74
Signed-off-by: default avatarDarek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/c/443785


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent 40240f7e
Loading
Loading
Loading
Loading
+12 −11
Original line number Diff line number Diff line
@@ -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;
+8 −2
Original line number Diff line number Diff line
@@ -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. */