DPDK patches and discussions
 help / color / mirror / Atom feed
From: Akhil Goyal <gakhil@marvell.com>
To: Ciara Power <ciara.power@intel.com>, "dev@dpdk.org" <dev@dpdk.org>
Cc: "roy.fan.zhang@intel.com" <roy.fan.zhang@intel.com>,
	Anoob Joseph <anoobj@marvell.com>,
	"mdr@ashroe.eu" <mdr@ashroe.eu>,
	Declan Doherty <declan.doherty@intel.com>,
	Ankur Dwivedi <adwivedi@marvell.com>,
	Tejasree Kondoj <ktejasree@marvell.com>,
	John Griffin <john.griffin@intel.com>,
	Fiona Trahe <fiona.trahe@intel.com>,
	Deepak Kumar Jain <deepak.k.jain@intel.com>
Subject: RE: [EXT] [PATCH v3 1/4] crypto: use single buffer for asymmetric session
Date: Mon, 7 Feb 2022 08:19:49 +0000	[thread overview]
Message-ID: <CO6PR18MB4484C3F42BE8AC0724F363B2D82C9@CO6PR18MB4484.namprd18.prod.outlook.com> (raw)
In-Reply-To: <20220203160449.1638311-2-ciara.power@intel.com>

> Rather than using a session buffer that contains pointers to private
> session data elsewhere, have a single session buffer.
> This session is created for a driver ID, and the mempool element
> contains space for the max session private data needed for any driver.

This means asymmetric ops are not allowed with scheduler PMD.

Also since session_create() and session_init() are merged to a single function,
Why not merge session_clear() and session_free()?

> 
> Signed-off-by: Ciara Power <ciara.power@intel.com>
> Acked-by: Fan Zhang <roy.fan.zhang@intel.com>
> 
> ---
> v2:
>   - Renamed function typedef from "free" to "clear" as session private
>     data isn't being freed in that function.
>   - Moved user data API to separate patch.
>   - Minor fixes to comments, formatting, return values.
> v3:
>   - Corrected formatting of struct comments.
>   - Increased size of max_priv_session_sz to uint16_t.
>   - Removed trace for asym session init function that was
>     previously removed.
>   - Added documentation.
> ---
>  app/test-crypto-perf/cperf_ops.c             |  14 +-
>  app/test/test_cryptodev_asym.c               | 200 ++++---------------
>  doc/guides/prog_guide/cryptodev_lib.rst      |  55 ++---
>  doc/guides/rel_notes/release_22_03.rst       |   7 +
>  drivers/crypto/cnxk/cn10k_cryptodev_ops.c    |   6 +-
>  drivers/crypto/cnxk/cn9k_cryptodev_ops.c     |   6 +-
>  drivers/crypto/cnxk/cnxk_cryptodev_ops.c     |  11 +-
>  drivers/crypto/octeontx/otx_cryptodev_ops.c  |  29 +--
>  drivers/crypto/openssl/rte_openssl_pmd.c     |   5 +-
>  drivers/crypto/openssl/rte_openssl_pmd_ops.c |  23 +--
>  drivers/crypto/qat/qat_asym.c                |  53 ++---
>  lib/cryptodev/cryptodev_pmd.h                |  17 +-
>  lib/cryptodev/cryptodev_trace_points.c       |   6 +-
>  lib/cryptodev/rte_cryptodev.c                | 167 ++++++++++------
>  lib/cryptodev/rte_cryptodev.h                |  72 ++++---
>  lib/cryptodev/rte_cryptodev_trace.h          |  21 +-
>  lib/cryptodev/version.map                    |   5 +-
>  17 files changed, 258 insertions(+), 439 deletions(-)
> 
> diff --git a/app/test-crypto-perf/cperf_ops.c b/app/test-crypto-perf/cperf_ops.c
> index d975ae1ab8..bdc5dc9544 100644
> --- a/app/test-crypto-perf/cperf_ops.c
> +++ b/app/test-crypto-perf/cperf_ops.c
> @@ -735,7 +735,6 @@ cperf_create_session(struct rte_mempool *sess_mp,
>  	struct rte_crypto_sym_xform aead_xform;
>  	struct rte_cryptodev_sym_session *sess = NULL;
>  	struct rte_crypto_asym_xform xform = {0};
> -	int rc;
> 
>  	if (options->op_type == CPERF_ASYM_MODEX) {
>  		xform.next = NULL;
> @@ -745,19 +744,10 @@ cperf_create_session(struct rte_mempool *sess_mp,
>  		xform.modex.exponent.data = perf_mod_e;
>  		xform.modex.exponent.length = sizeof(perf_mod_e);
> 
> -		sess = (void *)rte_cryptodev_asym_session_create(sess_mp);
> +		sess = (void *)rte_cryptodev_asym_session_create(sess_mp,
> dev_id, &xform);
>  		if (sess == NULL)
>  			return NULL;
> -		rc = rte_cryptodev_asym_session_init(dev_id, (void *)sess,
> -						     &xform, priv_mp);
> -		if (rc < 0) {
> -			if (sess != NULL) {
> -				rte_cryptodev_asym_session_clear(dev_id,
> -								 (void *)sess);
> -				rte_cryptodev_asym_session_free((void
> *)sess);
> -			}
> -			return NULL;
> -		}
> +
>  		return sess;
>  	}
>  #ifdef RTE_LIB_SECURITY
> diff --git a/app/test/test_cryptodev_asym.c b/app/test/test_cryptodev_asym.c
> index 68f4d8e7a6..f7c2fd2588 100644
> --- a/app/test/test_cryptodev_asym.c
> +++ b/app/test/test_cryptodev_asym.c
> @@ -450,7 +450,8 @@ test_cryptodev_asym_op(struct
> crypto_testsuite_params_asym *ts_params,
>  	}
> 
>  	if (!sessionless) {
> -		sess = rte_cryptodev_asym_session_create(ts_params-
> >session_mpool);
> +		sess = rte_cryptodev_asym_session_create(ts_params-
> >session_mpool,
> +				dev_id, &xform_tc);
>  		if (!sess) {
>  			snprintf(test_msg, ASYM_TEST_MSG_LEN,
>  					"line %u "
> @@ -460,15 +461,6 @@ test_cryptodev_asym_op(struct
> crypto_testsuite_params_asym *ts_params,
>  			goto error_exit;
>  		}
> 
> -		if (rte_cryptodev_asym_session_init(dev_id, sess, &xform_tc,
> -				ts_params->session_mpool) < 0) {
> -			snprintf(test_msg, ASYM_TEST_MSG_LEN,
> -					"line %u FAILED: %s",
> -					__LINE__, "unabled to config sym
> session");
> -			status = TEST_FAILED;
> -			goto error_exit;
> -		}
> -
>  		rte_crypto_op_attach_asym_session(op, sess);
>  	} else {
>  		asym_op->xform = &xform_tc;
> @@ -667,18 +659,11 @@ test_rsa_sign_verify(void)
>  		return TEST_SKIPPED;
>  	}
> 
> -	sess = rte_cryptodev_asym_session_create(sess_mpool);
> +	sess = rte_cryptodev_asym_session_create(sess_mpool, dev_id,
> &rsa_xform);
> 
>  	if (!sess) {
>  		RTE_LOG(ERR, USER1, "Session creation failed for "
>  			"sign_verify\n");
> -		return TEST_FAILED;
> -	}
> -
> -	if (rte_cryptodev_asym_session_init(dev_id, sess, &rsa_xform,
> -				sess_mpool) < 0) {
> -		RTE_LOG(ERR, USER1, "Unable to config asym session for "
> -			"sign_verify\n");
>  		status = TEST_FAILED;
>  		goto error_exit;
>  	}
> @@ -686,7 +671,6 @@ test_rsa_sign_verify(void)
>  	status = queue_ops_rsa_sign_verify(sess);
> 
>  error_exit:
> -
>  	rte_cryptodev_asym_session_clear(dev_id, sess);
>  	rte_cryptodev_asym_session_free(sess);
> 
> @@ -716,17 +700,10 @@ test_rsa_enc_dec(void)
>  		return TEST_SKIPPED;
>  	}
> 
> -	sess = rte_cryptodev_asym_session_create(sess_mpool);
> +	sess = rte_cryptodev_asym_session_create(sess_mpool, dev_id,
> &rsa_xform);
> 
>  	if (!sess) {
>  		RTE_LOG(ERR, USER1, "Session creation failed for enc_dec\n");
> -		return TEST_FAILED;
> -	}
> -
> -	if (rte_cryptodev_asym_session_init(dev_id, sess, &rsa_xform,
> -				sess_mpool) < 0) {
> -		RTE_LOG(ERR, USER1, "Unable to config asym session for "
> -			"enc_dec\n");
>  		status = TEST_FAILED;
>  		goto error_exit;
>  	}
> @@ -763,22 +740,15 @@ test_rsa_sign_verify_crt(void)
>  		return TEST_SKIPPED;
>  	}
> 
> -	sess = rte_cryptodev_asym_session_create(sess_mpool);
> +	sess = rte_cryptodev_asym_session_create(sess_mpool, dev_id,
> &rsa_xform_crt);
> 
>  	if (!sess) {
>  		RTE_LOG(ERR, USER1, "Session creation failed for "
>  			"sign_verify_crt\n");
>  		status = TEST_FAILED;
> -		return status;
> -	}
> -
> -	if (rte_cryptodev_asym_session_init(dev_id, sess, &rsa_xform_crt,
> -				sess_mpool) < 0) {
> -		RTE_LOG(ERR, USER1, "Unable to config asym session for "
> -			"sign_verify_crt\n");
> -		status = TEST_FAILED;
>  		goto error_exit;
>  	}
> +
>  	status = queue_ops_rsa_sign_verify(sess);
> 
>  error_exit:
> @@ -811,21 +781,15 @@ test_rsa_enc_dec_crt(void)
>  		return TEST_SKIPPED;
>  	}
> 
> -	sess = rte_cryptodev_asym_session_create(sess_mpool);
> +	sess = rte_cryptodev_asym_session_create(sess_mpool, dev_id,
> &rsa_xform_crt);
> 
>  	if (!sess) {
>  		RTE_LOG(ERR, USER1, "Session creation failed for "
>  			"enc_dec_crt\n");
> -		return TEST_FAILED;
> -	}
> -
> -	if (rte_cryptodev_asym_session_init(dev_id, sess, &rsa_xform_crt,
> -				sess_mpool) < 0) {
> -		RTE_LOG(ERR, USER1, "Unable to config asym session for "
> -			"enc_dec_crt\n");
>  		status = TEST_FAILED;
>  		goto error_exit;
>  	}
> +
>  	status = queue_ops_rsa_enc_dec(sess);
> 
>  error_exit:
> @@ -924,7 +888,6 @@ testsuite_setup(void)
>  	/* configure qp */
>  	ts_params->qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;
>  	ts_params->qp_conf.mp_session = ts_params->session_mpool;
> -	ts_params->qp_conf.mp_session_private = ts_params->session_mpool;
>  	for (qp_id = 0; qp_id < info.max_nb_queue_pairs; qp_id++) {
>  		TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(
>  			dev_id, qp_id, &ts_params->qp_conf,
> @@ -933,21 +896,9 @@ testsuite_setup(void)
>  			qp_id, dev_id);
>  	}
> 
> -	/* setup asym session pool */
> -	unsigned int session_size = RTE_MAX(
> -		rte_cryptodev_asym_get_private_session_size(dev_id),
> -		rte_cryptodev_asym_get_header_session_size());
> -	/*
> -	 * Create mempool with TEST_NUM_SESSIONS * 2,
> -	 * to include the session headers
> -	 */
> -	ts_params->session_mpool = rte_mempool_create(
> -				"test_asym_sess_mp",
> -				TEST_NUM_SESSIONS * 2,
> -				session_size,
> -				0, 0, NULL, NULL, NULL,
> -				NULL, SOCKET_ID_ANY,
> -				0);
> +	ts_params->session_mpool =
> rte_cryptodev_asym_session_pool_create(
> +			"test_asym_sess_mp", TEST_NUM_SESSIONS * 2, 0,
> +			SOCKET_ID_ANY);
> 
>  	TEST_ASSERT_NOT_NULL(ts_params->session_mpool,
>  			"session mempool allocation failed");
> @@ -1104,14 +1055,6 @@ test_dh_gen_shared_sec(struct
> rte_crypto_asym_xform *xfrm)
>  	struct rte_crypto_asym_xform xform = *xfrm;
>  	uint8_t peer[] =
> "01234567890123456789012345678901234567890123456789";
> 
> -	sess = rte_cryptodev_asym_session_create(sess_mpool);
> -	if (sess == NULL) {
> -		RTE_LOG(ERR, USER1,
> -				"line %u FAILED: %s", __LINE__,
> -				"Session creation failed");
> -		status = TEST_FAILED;
> -		goto error_exit;
> -	}
>  	/* set up crypto op data structure */
>  	op = rte_crypto_op_alloc(op_mpool,
> RTE_CRYPTO_OP_TYPE_ASYMMETRIC);
>  	if (!op) {
> @@ -1134,11 +1077,11 @@ test_dh_gen_shared_sec(struct
> rte_crypto_asym_xform *xfrm)
>  	asym_op->dh.shared_secret.data = output;
>  	asym_op->dh.shared_secret.length = sizeof(output);
> 
> -	if (rte_cryptodev_asym_session_init(dev_id, sess, &xform,
> -			sess_mpool) < 0) {
> +	sess = rte_cryptodev_asym_session_create(sess_mpool, dev_id,
> &xform);
> +	if (sess == NULL) {
>  		RTE_LOG(ERR, USER1,
> -				"line %u FAILED: %s",
> -				__LINE__, "unabled to config sym session");
> +				"line %u FAILED: %s", __LINE__,
> +				"Session creation failed");
>  		status = TEST_FAILED;
>  		goto error_exit;
>  	}
> @@ -1196,14 +1139,6 @@ test_dh_gen_priv_key(struct
> rte_crypto_asym_xform *xfrm)
>  	uint8_t output[TEST_DH_MOD_LEN];
>  	struct rte_crypto_asym_xform xform = *xfrm;
> 
> -	sess = rte_cryptodev_asym_session_create(sess_mpool);
> -	if (sess == NULL) {
> -		RTE_LOG(ERR, USER1,
> -				 "line %u FAILED: %s", __LINE__,
> -				"Session creation failed");
> -		status = TEST_FAILED;
> -		goto error_exit;
> -	}
>  	/* set up crypto op data structure */
>  	op = rte_crypto_op_alloc(op_mpool,
> RTE_CRYPTO_OP_TYPE_ASYMMETRIC);
>  	if (!op) {
> @@ -1222,11 +1157,11 @@ test_dh_gen_priv_key(struct
> rte_crypto_asym_xform *xfrm)
>  	asym_op->dh.priv_key.data = output;
>  	asym_op->dh.priv_key.length = sizeof(output);
> 
> -	if (rte_cryptodev_asym_session_init(dev_id, sess, &xform,
> -			sess_mpool) < 0) {
> +	sess = rte_cryptodev_asym_session_create(sess_mpool, dev_id,
> &xform);
> +	if (sess == NULL) {
>  		RTE_LOG(ERR, USER1,
> -				"line %u FAILED: %s",
> -				__LINE__, "unabled to config sym session");
> +				"line %u FAILED: %s", __LINE__,
> +				"Session creation failed");
>  		status = TEST_FAILED;
>  		goto error_exit;
>  	}
> @@ -1287,14 +1222,6 @@ test_dh_gen_pub_key(struct
> rte_crypto_asym_xform *xfrm)
>  	uint8_t output[TEST_DH_MOD_LEN];
>  	struct rte_crypto_asym_xform xform = *xfrm;
> 
> -	sess = rte_cryptodev_asym_session_create(sess_mpool);
> -	if (sess == NULL) {
> -		RTE_LOG(ERR, USER1,
> -				 "line %u FAILED: %s", __LINE__,
> -				"Session creation failed");
> -		status = TEST_FAILED;
> -		goto error_exit;
> -	}
>  	/* set up crypto op data structure */
>  	op = rte_crypto_op_alloc(op_mpool,
> RTE_CRYPTO_OP_TYPE_ASYMMETRIC);
>  	if (!op) {
> @@ -1321,11 +1248,11 @@ test_dh_gen_pub_key(struct
> rte_crypto_asym_xform *xfrm)
>  					0);
>  	asym_op->dh.priv_key = dh_test_params.priv_key;
> 
> -	if (rte_cryptodev_asym_session_init(dev_id, sess, &xform,
> -			sess_mpool) < 0) {
> +	sess = rte_cryptodev_asym_session_create(sess_mpool, dev_id,
> &xform);
> +	if (sess == NULL) {
>  		RTE_LOG(ERR, USER1,
> -				"line %u FAILED: %s",
> -				__LINE__, "unabled to config sym session");
> +				"line %u FAILED: %s", __LINE__,
> +				"Session creation failed");
>  		status = TEST_FAILED;
>  		goto error_exit;
>  	}
> @@ -1388,15 +1315,6 @@ test_dh_gen_kp(struct rte_crypto_asym_xform
> *xfrm)
>  	struct rte_crypto_asym_xform pub_key_xform;
>  	struct rte_crypto_asym_xform xform = *xfrm;
> 
> -	sess = rte_cryptodev_asym_session_create(sess_mpool);
> -	if (sess == NULL) {
> -		RTE_LOG(ERR, USER1,
> -				 "line %u FAILED: %s", __LINE__,
> -				"Session creation failed");
> -		status = TEST_FAILED;
> -		goto error_exit;
> -	}
> -
>  	/* set up crypto op data structure */
>  	op = rte_crypto_op_alloc(op_mpool,
> RTE_CRYPTO_OP_TYPE_ASYMMETRIC);
>  	if (!op) {
> @@ -1420,11 +1338,12 @@ test_dh_gen_kp(struct rte_crypto_asym_xform
> *xfrm)
>  	asym_op->dh.pub_key.length = sizeof(out_pub_key);
>  	asym_op->dh.priv_key.data = out_prv_key;
>  	asym_op->dh.priv_key.length = sizeof(out_prv_key);
> -	if (rte_cryptodev_asym_session_init(dev_id, sess, &xform,
> -			sess_mpool) < 0) {
> +
> +	sess = rte_cryptodev_asym_session_create(sess_mpool, dev_id,
> &xform);
> +	if (sess == NULL) {
>  		RTE_LOG(ERR, USER1,
> -				"line %u FAILED: %s",
> -				__LINE__, "unabled to config sym session");
> +				"line %u FAILED: %s", __LINE__,
> +				"Session creation failed");
>  		status = TEST_FAILED;
>  		goto error_exit;
>  	}
> @@ -1511,7 +1430,7 @@ test_mod_inv(void)
>  				return TEST_SKIPPED;
>  		}
> 
> -	sess = rte_cryptodev_asym_session_create(sess_mpool);
> +	sess = rte_cryptodev_asym_session_create(sess_mpool, dev_id,
> &modinv_xform);
>  	if (!sess) {
>  		RTE_LOG(ERR, USER1, "line %u "
>  				"FAILED: %s", __LINE__,
> @@ -1520,15 +1439,6 @@ test_mod_inv(void)
>  		goto error_exit;
>  	}
> 
> -	if (rte_cryptodev_asym_session_init(dev_id, sess, &modinv_xform,
> -			sess_mpool) < 0) {
> -		RTE_LOG(ERR, USER1,
> -				"line %u FAILED: %s",
> -				__LINE__, "unabled to config sym session");
> -		status = TEST_FAILED;
> -		goto error_exit;
> -	}
> -
>  	/* generate crypto op data structure */
>  	op = rte_crypto_op_alloc(op_mpool,
> RTE_CRYPTO_OP_TYPE_ASYMMETRIC);
>  	if (!op) {
> @@ -1646,7 +1556,7 @@ test_mod_exp(void)
>  		goto error_exit;
>  	}
> 
> -	sess = rte_cryptodev_asym_session_create(sess_mpool);
> +	sess = rte_cryptodev_asym_session_create(sess_mpool, dev_id,
> &modex_xform);
>  	if (!sess) {
>  		RTE_LOG(ERR, USER1,
>  				 "line %u "
> @@ -1656,15 +1566,6 @@ test_mod_exp(void)
>  		goto error_exit;
>  	}
> 
> -	if (rte_cryptodev_asym_session_init(dev_id, sess, &modex_xform,
> -			sess_mpool) < 0) {
> -		RTE_LOG(ERR, USER1,
> -				"line %u FAILED: %s",
> -				__LINE__, "unabled to config sym session");
> -		status = TEST_FAILED;
> -		goto error_exit;
> -	}
> -
>  	asym_op = op->asym;
>  	memcpy(input, base, sizeof(base));
>  	asym_op->modex.base.data = input;
> @@ -1768,7 +1669,7 @@ test_dsa_sign(void)
>  	uint8_t s[TEST_DH_MOD_LEN];
>  	uint8_t dgst[] = "35d81554afaad2cf18f3a1770d5fedc4ea5be344";
> 
> -	sess = rte_cryptodev_asym_session_create(sess_mpool);
> +	sess = rte_cryptodev_asym_session_create(sess_mpool, dev_id,
> &dsa_xform);
>  	if (sess == NULL) {
>  		RTE_LOG(ERR, USER1,
>  				 "line %u FAILED: %s", __LINE__,
> @@ -1797,15 +1698,6 @@ test_dsa_sign(void)
>  	debug_hexdump(stdout, "priv_key: ", dsa_xform.dsa.x.data,
>  			dsa_xform.dsa.x.length);
> 
> -	if (rte_cryptodev_asym_session_init(dev_id, sess, &dsa_xform,
> -				sess_mpool) < 0) {
> -		RTE_LOG(ERR, USER1,
> -				"line %u FAILED: %s",
> -				__LINE__, "unabled to config sym session");
> -		status = TEST_FAILED;
> -		goto error_exit;
> -	}
> -
>  	/* attach asymmetric crypto session to crypto operations */
>  	rte_crypto_op_attach_asym_session(op, sess);
>  	asym_op->dsa.op_type = RTE_CRYPTO_ASYM_OP_SIGN;
> @@ -1941,15 +1833,6 @@ test_ecdsa_sign_verify(enum curve curve_id)
> 
>  	rte_cryptodev_info_get(dev_id, &dev_info);
> 
> -	sess = rte_cryptodev_asym_session_create(sess_mpool);
> -	if (sess == NULL) {
> -		RTE_LOG(ERR, USER1,
> -				"line %u FAILED: %s", __LINE__,
> -				"Session creation failed\n");
> -		status = TEST_FAILED;
> -		goto exit;
> -	}
> -
>  	/* Setup crypto op data structure */
>  	op = rte_crypto_op_alloc(op_mpool,
> RTE_CRYPTO_OP_TYPE_ASYMMETRIC);
>  	if (op == NULL) {
> @@ -1967,11 +1850,11 @@ test_ecdsa_sign_verify(enum curve curve_id)
>  	xform.xform_type = RTE_CRYPTO_ASYM_XFORM_ECDSA;
>  	xform.ec.curve_id = input_params.curve;
> 
> -	if (rte_cryptodev_asym_session_init(dev_id, sess, &xform,
> -				sess_mpool) < 0) {
> +	sess = rte_cryptodev_asym_session_create(sess_mpool, dev_id,
> &xform);
> +	if (sess == NULL) {
>  		RTE_LOG(ERR, USER1,
>  				"line %u FAILED: %s", __LINE__,
> -				"Unable to config asym session\n");
> +				"Session creation failed\n");
>  		status = TEST_FAILED;
>  		goto exit;
>  	}
> @@ -2154,15 +2037,6 @@ test_ecpm(enum curve curve_id)
> 
>  	rte_cryptodev_info_get(dev_id, &dev_info);
> 
> -	sess = rte_cryptodev_asym_session_create(sess_mpool);
> -	if (sess == NULL) {
> -		RTE_LOG(ERR, USER1,
> -				"line %u FAILED: %s", __LINE__,
> -				"Session creation failed\n");
> -		status = TEST_FAILED;
> -		goto exit;
> -	}
> -
>  	/* Setup crypto op data structure */
>  	op = rte_crypto_op_alloc(op_mpool,
> RTE_CRYPTO_OP_TYPE_ASYMMETRIC);
>  	if (op == NULL) {
> @@ -2180,11 +2054,11 @@ test_ecpm(enum curve curve_id)
>  	xform.xform_type = RTE_CRYPTO_ASYM_XFORM_ECPM;
>  	xform.ec.curve_id = input_params.curve;
> 
> -	if (rte_cryptodev_asym_session_init(dev_id, sess, &xform,
> -				sess_mpool) < 0) {
> +	sess = rte_cryptodev_asym_session_create(sess_mpool, dev_id,
> &xform);
> +	if (sess == NULL) {
>  		RTE_LOG(ERR, USER1,
>  				"line %u FAILED: %s", __LINE__,
> -				"Unable to config asym session\n");
> +				"Session creation failed\n");
>  		status = TEST_FAILED;
>  		goto exit;
>  	}
> diff --git a/doc/guides/prog_guide/cryptodev_lib.rst
> b/doc/guides/prog_guide/cryptodev_lib.rst
> index 8766bc34a9..f8f8562f4c 100644
> --- a/doc/guides/prog_guide/cryptodev_lib.rst
> +++ b/doc/guides/prog_guide/cryptodev_lib.rst
> @@ -1038,20 +1038,17 @@ It is the application's responsibility to create and
> manage the session mempools
>  Application using both symmetric and asymmetric sessions should allocate and
> maintain
>  different sessions pools for each type.
> 
> -An application can use ``rte_cryptodev_get_asym_session_private_size()`` to
> -get the private size of asymmetric session on a given crypto device. This
> -function would allow an application to calculate the max device asymmetric
> -session size of all crypto devices to create a single session mempool.
> -If instead an application creates multiple asymmetric session mempools,
> -the Crypto device framework also provides
> ``rte_cryptodev_asym_get_header_session_size()`` to get
> -the size of an uninitialized session.
> +An application can use ``rte_cryptodev_asym_session_pool_create()`` to create
> a mempool
> +with a specified number of elements. The element size will allow for the
> session header,
> +and the max private session size.
> +The max private session size is chosen based on available crypto devices,
> +the biggest private session size is used. This means any of those devices can be
> used,
> +and the mempool element will have available space for its private session data.
> 
>  Once the session mempools have been created,
> ``rte_cryptodev_asym_session_create()``
> -is used to allocate an uninitialized asymmetric session from the given mempool.
> -The session then must be initialized using ``rte_cryptodev_asym_session_init()``
> -for each of the required crypto devices. An asymmetric transform chain
> -is used to specify the operation and its parameters. See the section below for
> -details on transforms.
> +is used to allocate and initialize an asymmetric session from the given
> mempool.
> +An asymmetric transform chain is used to specify the operation and its
> parameters.
> +See the section below for details on transforms.
> 
>  When a session is no longer used, user must call
> ``rte_cryptodev_asym_session_clear()``
>  for each of the crypto devices that are using the session, to free all driver
> @@ -1162,21 +1159,14 @@ crypto operations is similar except change to
> respective op and xform setup).
> 
>      uint8_t cdev_id = rte_cryptodev_get_dev_id(crypto_name);
> 
> -    /* Get private asym session data size. */
> -    asym_session_size = rte_cryptodev_get_asym_private_session_size(cdev_id);
> -
>      /*
> -     * Create session mempool, with two objects per session,
> -     * one for the session header and another one for the
> -     * private asym session data for the crypto device.
> +     * Create session mempool, this will create elements big enough
> +     * to hold the generic session header,
> +     * and the max private session size of the available devices.
>       */
> -    asym_session_pool = rte_mempool_create("asym_session_pool",
> -                                    MAX_ASYM_SESSIONS * 2,
> -                                    asym_session_size,
> -                                    0,
> -                                    0, NULL, NULL, NULL,
> -                                    NULL, socket_id,
> -                                    0);
> +    asym_session_pool = rte_cryptodev_asym_session_pool_create(
> +                        "asym_session_pool", MAX_ASYM_SESSIONS, 0, 0,
> +                        socket_id);
> 
>      /* Configure the crypto device. */
>      struct rte_cryptodev_config conf = {
> @@ -1190,8 +1180,7 @@ crypto operations is similar except change to
> respective op and xform setup).
>      if (rte_cryptodev_configure(cdev_id, &conf) < 0)
>          rte_exit(EXIT_FAILURE, "Failed to configure cryptodev %u", cdev_id);
> 
> -    if (rte_cryptodev_queue_pair_setup(cdev_id, 0, &qp_conf,
> -                            socket_id, asym_session_pool) < 0)
> +    if (rte_cryptodev_queue_pair_setup(cdev_id, 0, &qp_conf, socket_id) < 0)
>          rte_exit(EXIT_FAILURE, "Failed to setup queue pair\n");
> 
>      if (rte_cryptodev_start(cdev_id) < 0)
> @@ -1226,15 +1215,11 @@ crypto operations is similar except change to
> respective op and xform setup).
>      };
>      /* Create asym crypto session and initialize it for the crypto device. */
>      struct rte_cryptodev_asym_session *asym_session;
> -    asym_session = rte_cryptodev_asym_session_create(asym_session_pool);
> +    asym_session = rte_cryptodev_asym_session_create(asym_session_pool,
> +            cdev_id, &modex_xform);
>      if (asym_session == NULL)
>          rte_exit(EXIT_FAILURE, "Session could not be created\n");
> 
> -    if (rte_cryptodev_asym_session_init(cdev_id, asym_session,
> -                    &modex_xform, asym_session_pool) < 0)
> -        rte_exit(EXIT_FAILURE, "Session could not be initialized "
> -                    "for the crypto device\n");
> -
>      /* Get a burst of crypto operations. */
>      struct rte_crypto_op *crypto_ops[1];
>      if (rte_crypto_op_bulk_alloc(crypto_op_pool,
> @@ -1245,11 +1230,11 @@ crypto operations is similar except change to
> respective op and xform setup).
>      /* Set up the crypto operations. */
>      struct rte_crypto_asym_op *asym_op = crypto_ops[0]->asym;
> 
> -	/* calculate mod exp of value 0xf8 */
> +    /* calculate mod exp of value 0xf8 */
>      static unsigned char base[] = {0xF8};
>      asym_op->modex.base.data = base;
>      asym_op->modex.base.length = sizeof(base);
> -	asym_op->modex.base.iova = base;
> +    asym_op->modex.base.iova = base;
> 
>      /* Attach the asym crypto session to the operation */
>      rte_crypto_op_attach_asym_session(op, asym_session);
> diff --git a/doc/guides/rel_notes/release_22_03.rst
> b/doc/guides/rel_notes/release_22_03.rst
> index 3bc0630c7c..de8d8ce4e9 100644
> --- a/doc/guides/rel_notes/release_22_03.rst
> +++ b/doc/guides/rel_notes/release_22_03.rst
> @@ -100,6 +100,13 @@ API Changes
>     Also, make sure to start the actual text at the margin.
>     =======================================================
> 
> +* cryptodev: The asym session handling was modified to use a single buffer.
> +  A ``rte_cryptodev_asym_session_pool_create`` function was added to
> +  create a mempool with element size to hold the generic asym session header,
> +  along with the max size for a device private session data.
> +  ``rte_cryptodev_asym_session_init`` was removed as this initialisation is
> +  now done by ``rte_cryptodev_asym_session_create``.
> +
cryptodev: The asymmetric session handling was modified to use a single mempool object.
An API ``rte_cryptodev_asym_session_pool_create`` was added to create a mempool with
element size big enough to hold the generic asymmetric session header and max size for a
device private session data. The API ``rte_cryptodev_asym_session_init`` was removed as
the initialization is now moved to ``rte_cryptodev_asym_session_create``.



> diff --git a/lib/cryptodev/cryptodev_pmd.h b/lib/cryptodev/cryptodev_pmd.h
> index b9146f652c..474d447496 100644
> --- a/lib/cryptodev/cryptodev_pmd.h
> +++ b/lib/cryptodev/cryptodev_pmd.h
> @@ -340,12 +340,12 @@ typedef int
> (*cryptodev_asym_configure_session_t)(struct rte_cryptodev *dev,
>  typedef void (*cryptodev_sym_free_session_t)(struct rte_cryptodev *dev,
>  		struct rte_cryptodev_sym_session *sess);
>  /**
> - * Free asymmetric session private data.
> + * Clear asymmetric session private data.
>   *
>   * @param	dev		Crypto device pointer
>   * @param	sess		Cryptodev session structure
>   */
> -typedef void (*cryptodev_asym_free_session_t)(struct rte_cryptodev *dev,
> +typedef void (*cryptodev_asym_clear_session_t)(struct rte_cryptodev *dev,
>  		struct rte_cryptodev_asym_session *sess);
>  /**
>   * Perform actual crypto processing (encrypt/digest or auth/decrypt)
> @@ -429,7 +429,7 @@ struct rte_cryptodev_ops {
>  	/**< Configure asymmetric Crypto session. */
>  	cryptodev_sym_free_session_t sym_session_clear;
>  	/**< Clear a Crypto sessions private data. */
> -	cryptodev_asym_free_session_t asym_session_clear;
> +	cryptodev_asym_clear_session_t asym_session_clear;
>  	/**< Clear a Crypto sessions private data. */
>  	union {
>  		cryptodev_sym_cpu_crypto_process_t sym_cpu_process;
> @@ -628,16 +628,9 @@ set_sym_session_private_data(struct
> rte_cryptodev_sym_session *sess,
>  }
> 
>  static inline void *
> -get_asym_session_private_data(const struct rte_cryptodev_asym_session
> *sess,
> -		uint8_t driver_id) {
> -	return sess->sess_private_data[driver_id];
> -}
> -
> -static inline void
> -set_asym_session_private_data(struct rte_cryptodev_asym_session *sess,
> -		uint8_t driver_id, void *private_data)
> +get_asym_session_private_data(struct rte_cryptodev_asym_session *sess)
>  {
> -	sess->sess_private_data[driver_id] = private_data;
> +	return sess->sess_private_data;
>  }
> 
>  #endif /* _CRYPTODEV_PMD_H_ */
> diff --git a/lib/cryptodev/cryptodev_trace_points.c
> b/lib/cryptodev/cryptodev_trace_points.c
> index 5d58951fd5..d23b30edd8 100644
> --- a/lib/cryptodev/cryptodev_trace_points.c
> +++ b/lib/cryptodev/cryptodev_trace_points.c
> @@ -24,6 +24,9 @@
> RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_queue_pair_setup,
>  RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_sym_session_pool_create,
>  	lib.cryptodev.sym.pool.create)
> 
> +RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_asym_session_pool_creat
> e,
> +	lib.cryptodev.asym.pool.create)
> +
>  RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_sym_session_create,
>  	lib.cryptodev.sym.create)
> 
> @@ -39,9 +42,6 @@
> RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_asym_session_free,
>  RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_sym_session_init,
>  	lib.cryptodev.sym.init)
> 
> -RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_asym_session_init,
> -	lib.cryptodev.asym.init)
> -
>  RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_sym_session_clear,
>  	lib.cryptodev.sym.clear)
> 
> diff --git a/lib/cryptodev/rte_cryptodev.c b/lib/cryptodev/rte_cryptodev.c
> index a40536c5ea..d260f79bbc 100644
> --- a/lib/cryptodev/rte_cryptodev.c
> +++ b/lib/cryptodev/rte_cryptodev.c
> @@ -195,7 +195,7 @@ const char *rte_crypto_asym_op_strings[] = {
>  };
> 
>  /**
> - * The private data structure stored in the session mempool private data.
> + * The private data structure stored in the sym session mempool private data.
>   */
>  struct rte_cryptodev_sym_session_pool_private_data {
>  	uint16_t nb_drivers;
> @@ -204,6 +204,14 @@ struct rte_cryptodev_sym_session_pool_private_data
> {
>  	/**< session user data will be placed after sess_data */
>  };
> 
> +/**
> + * The private data structure stored in the asym session mempool private data.
> + */
> +struct rte_cryptodev_asym_session_pool_private_data {
> +	uint16_t max_priv_session_sz;
> +	/**< Size of private session data used when creating mempool */
> +};
> +
>  int
>  rte_cryptodev_get_cipher_algo_enum(enum rte_crypto_cipher_algorithm
> *algo_enum,
>  		const char *algo_string)
> @@ -1751,47 +1759,6 @@ rte_cryptodev_sym_session_init(uint8_t dev_id,
>  	return 0;
>  }
> 
> -int
> -rte_cryptodev_asym_session_init(uint8_t dev_id,
> -		struct rte_cryptodev_asym_session *sess,
> -		struct rte_crypto_asym_xform *xforms,
> -		struct rte_mempool *mp)
> -{
> -	struct rte_cryptodev *dev;
> -	uint8_t index;
> -	int ret;
> -
> -	if (!rte_cryptodev_is_valid_dev(dev_id)) {
> -		CDEV_LOG_ERR("Invalid dev_id=%" PRIu8, dev_id);
> -		return -EINVAL;
> -	}
> -
> -	dev = rte_cryptodev_pmd_get_dev(dev_id);
> -
> -	if (sess == NULL || xforms == NULL || dev == NULL)
> -		return -EINVAL;
> -
> -	index = dev->driver_id;
> -
> -	RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops-
> >asym_session_configure,
> -				-ENOTSUP);
> -
> -	if (sess->sess_private_data[index] == NULL) {
> -		ret = dev->dev_ops->asym_session_configure(dev,
> -							xforms,
> -							sess, mp);
> -		if (ret < 0) {
> -			CDEV_LOG_ERR(
> -				"dev_id %d failed to configure session details",
> -				dev_id);
> -			return ret;
> -		}
> -	}
> -
> -	rte_cryptodev_trace_asym_session_init(dev_id, sess, xforms, mp);
> -	return 0;
> -}
> -
>  struct rte_mempool *
>  rte_cryptodev_sym_session_pool_create(const char *name, uint32_t nb_elts,
>  	uint32_t elt_size, uint32_t cache_size, uint16_t user_data_size,
> @@ -1834,6 +1801,53 @@ rte_cryptodev_sym_session_pool_create(const char
> *name, uint32_t nb_elts,
>  	return mp;
>  }
> 
> +struct rte_mempool *
> +rte_cryptodev_asym_session_pool_create(const char *name, uint32_t nb_elts,
> +	uint32_t cache_size, int socket_id)
> +{
> +	struct rte_mempool *mp;
> +	struct rte_cryptodev_asym_session_pool_private_data *pool_priv;
> +	uint32_t obj_sz, obj_sz_aligned;
> +	uint8_t dev_id, priv_sz, max_priv_sz = 0;
> +
> +	for (dev_id = 0; dev_id < RTE_CRYPTO_MAX_DEVS; dev_id++)
> +		if (rte_cryptodev_is_valid_dev(dev_id)) {
> +			priv_sz =
> rte_cryptodev_asym_get_private_session_size(dev_id);
> +			if (priv_sz > max_priv_sz)
> +				max_priv_sz = priv_sz;
> +		}
> +	if (max_priv_sz == 0) {
> +		CDEV_LOG_INFO("Could not set max private session size\n");
> +		return NULL;
> +	}
> +
> +	obj_sz = rte_cryptodev_asym_get_header_session_size() + max_priv_sz;
> +	obj_sz_aligned =  RTE_ALIGN_CEIL(obj_sz, RTE_CACHE_LINE_SIZE);
> +
> +	mp = rte_mempool_create(name, nb_elts, obj_sz_aligned, cache_size,
> +			(uint32_t)(sizeof(*pool_priv)),
> +			NULL, NULL, NULL, NULL,
> +			socket_id, 0);
> +	if (mp == NULL) {
> +		CDEV_LOG_ERR("%s(name=%s) failed, rte_errno=%d\n",
> +			__func__, name, rte_errno);
> +		return NULL;
> +	}
> +
> +	pool_priv = rte_mempool_get_priv(mp);
> +	if (!pool_priv) {
> +		CDEV_LOG_ERR("%s(name=%s) failed to get private data\n",
> +			__func__, name);
> +		rte_mempool_free(mp);
> +		return NULL;
> +	}
> +	pool_priv->max_priv_session_sz = max_priv_sz;
> +
> +	rte_cryptodev_trace_asym_session_pool_create(name, nb_elts,
> +		cache_size, mp);
> +	return mp;
> +}
> +
>  static unsigned int
>  rte_cryptodev_sym_session_data_size(struct rte_cryptodev_sym_session *sess)
>  {
> @@ -1895,19 +1909,43 @@ rte_cryptodev_sym_session_create(struct
> rte_mempool *mp)
>  }
> 
>  struct rte_cryptodev_asym_session *
> -rte_cryptodev_asym_session_create(struct rte_mempool *mp)
> +rte_cryptodev_asym_session_create(struct rte_mempool *mp, uint8_t dev_id,
> +		struct rte_crypto_asym_xform *xforms)

Please rearrange the function arguments similar to other APIs.
Order should be rte_cryptodev_asym_session_create(dev_id, xforms, mp)


>  {
>  	struct rte_cryptodev_asym_session *sess;
> -	unsigned int session_size =
> +	uint32_t session_priv_data_sz;
> +	struct rte_cryptodev_asym_session_pool_private_data *pool_priv;
> +	unsigned int session_header_size =
>  			rte_cryptodev_asym_get_header_session_size();
> +	struct rte_cryptodev *dev;
> +	int ret;
> +
> +	if (!rte_cryptodev_is_valid_dev(dev_id)) {
> +		CDEV_LOG_ERR("Invalid dev_id=%" PRIu8, dev_id);
> +		return NULL;
> +	}
> +	session_priv_data_sz = rte_cryptodev_asym_get_private_session_size(
> +			dev_id);
> +	dev = rte_cryptodev_pmd_get_dev(dev_id);
> +
> +	if (dev == NULL)
> +		return NULL;
> 
>  	if (!mp) {
>  		CDEV_LOG_ERR("invalid mempool\n");
>  		return NULL;
>  	}

Above checks should be before calling rte_cryptodev_asym_get_private_session_size(dev_id)

> 
> +	pool_priv = rte_mempool_get_priv(mp);
> +
> +	if (pool_priv->max_priv_session_sz < session_priv_data_sz) {
> +		CDEV_LOG_DEBUG(
> +			"The private session data size used when creating the
> mempool is smaller than this device's private session data.");
> +		return NULL;
> +	}
> +
>  	/* Verify if provided mempool can hold elements big enough. */
> -	if (mp->elt_size < session_size) {
> +	if (mp->elt_size < session_header_size + session_priv_data_sz) {
>  		CDEV_LOG_ERR(
>  			"mempool elements too small to hold session objects");
>  		return NULL;
> @@ -1919,10 +1957,27 @@ rte_cryptodev_asym_session_create(struct
> rte_mempool *mp)
>  		return NULL;
>  	}
> 
> +	sess->driver_id = dev->driver_id;
> +	sess->max_priv_session_sz = pool_priv->max_priv_session_sz;
> +
>  	/* Clear device session pointer.
>  	 * Include the flag indicating presence of private data
>  	 */
> -	memset(sess, 0, session_size);
> +	memset(sess->sess_private_data, 0, session_priv_data_sz);
> +
> +	RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops-
> >asym_session_configure, NULL);
> +
> +	if (sess->sess_private_data[0] == 0) {
> +		ret = dev->dev_ops->asym_session_configure(dev,
> +							xforms,
> +							sess, mp);

The mempool object is allocated in the library layer,
so why is it need to be passed to PMD? PMD cannot get mempool object. Right?

> +		if (ret < 0) {
> +			CDEV_LOG_ERR(
> +				"dev_id %d failed to configure session details",
> +				dev_id);
> +			return NULL;
> +		}
> +	}
> 
>  	rte_cryptodev_trace_asym_session_create(mp, sess);
>  	return sess;
> @@ -2009,20 +2064,11 @@ rte_cryptodev_sym_session_free(struct
> rte_cryptodev_sym_session *sess)
>  int
>  rte_cryptodev_asym_session_free(struct rte_cryptodev_asym_session *sess)
>  {
> -	uint8_t i;
> -	void *sess_priv;
>  	struct rte_mempool *sess_mp;
> 
>  	if (sess == NULL)
>  		return -EINVAL;
> 
> -	/* Check that all device private data has been freed */
> -	for (i = 0; i < nb_drivers; i++) {
> -		sess_priv = get_asym_session_private_data(sess, i);
> -		if (sess_priv != NULL)
> -			return -EBUSY;
> -	}
> -
>  	/* Return session to mempool */
>  	sess_mp = rte_mempool_from_obj(sess);
>  	rte_mempool_put(sess_mp, sess);
As commented earlier, free and clear can be squashed to a single API.

> @@ -2061,12 +2107,7 @@
> rte_cryptodev_sym_get_existing_header_session_size(
>  unsigned int
>  rte_cryptodev_asym_get_header_session_size(void)
>  {
> -	/*
> -	 * Header contains pointers to the private data
> -	 * of all registered drivers, and a flag which
> -	 * indicates presence of private data
> -	 */
> -	return ((sizeof(void *) * nb_drivers) + sizeof(uint8_t));
> +	return sizeof(struct rte_cryptodev_asym_session);
>  }
> 
>  unsigned int
> @@ -2092,7 +2133,6 @@ unsigned int
>  rte_cryptodev_asym_get_private_session_size(uint8_t dev_id)
>  {
>  	struct rte_cryptodev *dev;
> -	unsigned int header_size = sizeof(void *) * nb_drivers;
>  	unsigned int priv_sess_size;
> 
>  	if (!rte_cryptodev_is_valid_dev(dev_id))
> @@ -2104,11 +2144,8 @@
> rte_cryptodev_asym_get_private_session_size(uint8_t dev_id)
>  		return 0;
> 
>  	priv_sess_size = (*dev->dev_ops->asym_session_get_size)(dev);
> -	if (priv_sess_size < header_size)
> -		return header_size;
> 
>  	return priv_sess_size;
> -
>  }
> 
>  int
> diff --git a/lib/cryptodev/rte_cryptodev.h b/lib/cryptodev/rte_cryptodev.h
> index 59ea5a54df..8bd85f1575 100644
> --- a/lib/cryptodev/rte_cryptodev.h
> +++ b/lib/cryptodev/rte_cryptodev.h
> @@ -919,9 +919,13 @@ struct rte_cryptodev_sym_session {
>  };
> 
>  /** Cryptodev asymmetric crypto session */
> -struct rte_cryptodev_asym_session {
> -	__extension__ void *sess_private_data[0];
> -	/**< Private asymmetric session material */
> +__extension__ struct rte_cryptodev_asym_session {
> +	uint8_t driver_id;
> +	/**< Session driver ID. */
> +	uint16_t max_priv_session_sz;
> +	/**< Size of private session data used when creating mempool */
> +	uint8_t padding[5];
> +	uint8_t sess_private_data[0];
>  };
RTE_STD_C11 can be used instead of __extension__.

Max_priv_session_sz can be renamed to max_priv_data_sz.
Session word is redundant as it is inside session struct.

> 
>  /**
> @@ -956,6 +960,29 @@ rte_cryptodev_sym_session_pool_create(const char
> *name, uint32_t nb_elts,
>  	uint32_t elt_size, uint32_t cache_size, uint16_t priv_size,
>  	int socket_id);
> 
> +/**
> + * Create an asymmetric session mempool.
> + *
> + * @param name
> + *   The unique mempool name.
> + * @param nb_elts
> + *   The number of elements in the mempool.
> + * @param cache_size
> + *   The number of per-lcore cache elements
> + * @param socket_id
> + *   The *socket_id* argument is the socket identifier in the case of
> + *   NUMA. The value can be *SOCKET_ID_ANY* if there is no NUMA
> + *   constraint for the reserved zone.
> + *
> + * @return
> + *  - On success return mempool
> + *  - On failure returns NULL
> + */
> +__rte_experimental
> +struct rte_mempool *
> +rte_cryptodev_asym_session_pool_create(const char *name, uint32_t nb_elts,
> +	uint32_t cache_size, int socket_id);
> +
>  /**
>   * Create symmetric crypto session header (generic with no private data)
>   *
> @@ -973,13 +1000,17 @@ rte_cryptodev_sym_session_create(struct
> rte_mempool *mempool);
>   *
>   * @param   mempool    mempool to allocate asymmetric session
>   *                     objects from
> + * @param   dev_id   ID of device that we want the session to be used on
> + * @param   xforms   Asymmetric crypto transform operations to apply on flow
> + *                   processed with this session

Change the order of arguments as commented above.

>   * @return
>   *  - On success return pointer to asym-session
>   *  - On failure returns NULL
>   */
>  __rte_experimental
>  struct rte_cryptodev_asym_session *
> -rte_cryptodev_asym_session_create(struct rte_mempool *mempool);
> +rte_cryptodev_asym_session_create(struct rte_mempool *mempool,
> +		uint8_t dev_id, struct rte_crypto_asym_xform *xforms);
> 
>  /**
>   * Frees symmetric crypto session header, after checking that all
> @@ -997,8 +1028,7 @@ int
>  rte_cryptodev_sym_session_free(struct rte_cryptodev_sym_session *sess);
> 
>  /**
> - * Frees asymmetric crypto session header, after checking that all
> - * the device private data has been freed, returning it
> + * Frees asymmetric crypto session header, returning it
>   * to its original mempool.
>   *
>   * @param   sess     Session header to be freed.
> @@ -1006,7 +1036,6 @@ rte_cryptodev_sym_session_free(struct
> rte_cryptodev_sym_session *sess);
>   * @return
>   *  - 0 if successful.
>   *  - -EINVAL if session is NULL.
> - *  - -EBUSY if not all device private data has been freed.
>   */
>  __rte_experimental
>  int
> @@ -1034,28 +1063,6 @@ rte_cryptodev_sym_session_init(uint8_t dev_id,
>  			struct rte_crypto_sym_xform *xforms,
>  			struct rte_mempool *mempool);
> 
> -/**
> - * Initialize asymmetric session on a device with specific asymmetric xform
> - *
> - * @param   dev_id   ID of device that we want the session to be used on
> - * @param   sess     Session to be set up on a device
> - * @param   xforms   Asymmetric crypto transform operations to apply on flow
> - *                   processed with this session
> - * @param   mempool  Mempool to be used for internal allocation.
> - *
> - * @return
> - *  - On success, zero.
> - *  - -EINVAL if input parameters are invalid.
> - *  - -ENOTSUP if crypto device does not support the crypto transform.
> - *  - -ENOMEM if the private session could not be allocated.
> - */

These error numbers should be added in the create() API.
I guess your subsequent patch is doing that.

> -__rte_experimental
> -int
> -rte_cryptodev_asym_session_init(uint8_t dev_id,
> -			struct rte_cryptodev_asym_session *sess,
> -			struct rte_crypto_asym_xform *xforms,
> -			struct rte_mempool *mempool);
> -
>  /**
>   * Frees private data for the device id, based on its device type,
>   * returning it to its mempool. It is the application's responsibility
> @@ -1075,11 +1082,10 @@ rte_cryptodev_sym_session_clear(uint8_t dev_id,
>  			struct rte_cryptodev_sym_session *sess);
> 
>  /**
> - * Frees resources held by asymmetric session during
> rte_cryptodev_session_init
> + * Clear private data held by asymmetric session.
>   *
>   * @param   dev_id   ID of device that uses the asymmetric session.
> - * @param   sess     Asymmetric session setup on device using
> - *					 rte_cryptodev_session_init
> + * @param   sess     Asymmetric session setup on device.
>   * @return
>   *  - 0 if successful.
>   *  - -EINVAL if device is invalid or session is NULL.
> @@ -1116,7 +1122,7 @@
> rte_cryptodev_sym_get_existing_header_session_size(
>  		struct rte_cryptodev_sym_session *sess);
> 
>  /**
> - * Get the size of the asymmetric session header, for all registered drivers.
> + * Get the size of the asymmetric session header.
>   *
>   * @return
>   *   Size of the asymmetric header session.
> diff --git a/lib/cryptodev/rte_cryptodev_trace.h
> b/lib/cryptodev/rte_cryptodev_trace.h
> index d1f4f069a3..befbaf7f44 100644
> --- a/lib/cryptodev/rte_cryptodev_trace.h
> +++ b/lib/cryptodev/rte_cryptodev_trace.h
> @@ -83,6 +83,16 @@ RTE_TRACE_POINT(
>  	rte_trace_point_emit_u16(sess->user_data_sz);
>  )
> 
> +RTE_TRACE_POINT(
> +	rte_cryptodev_trace_asym_session_pool_create,
> +	RTE_TRACE_POINT_ARGS(const char *name, uint32_t nb_elts,
> +		uint32_t cache_size, void *mempool),
> +	rte_trace_point_emit_string(name);
> +	rte_trace_point_emit_u32(nb_elts);
> +	rte_trace_point_emit_u32(cache_size);
> +	rte_trace_point_emit_ptr(mempool);
> +)
> +
>  RTE_TRACE_POINT(
>  	rte_cryptodev_trace_asym_session_create,
>  	RTE_TRACE_POINT_ARGS(void *mempool,
> @@ -117,17 +127,6 @@ RTE_TRACE_POINT(
>  	rte_trace_point_emit_ptr(mempool);
>  )
> 
> -RTE_TRACE_POINT(
> -	rte_cryptodev_trace_asym_session_init,
> -	RTE_TRACE_POINT_ARGS(uint8_t dev_id,
> -		struct rte_cryptodev_asym_session *sess, void *xforms,
> -		void *mempool),
> -	rte_trace_point_emit_u8(dev_id);
> -	rte_trace_point_emit_ptr(sess);
> -	rte_trace_point_emit_ptr(xforms);
> -	rte_trace_point_emit_ptr(mempool);
> -)

rte_cryptodev_trace_asym_session_create() would need an update due to these changes.

> -
>  RTE_TRACE_POINT(
>  	rte_cryptodev_trace_sym_session_clear,
>  	RTE_TRACE_POINT_ARGS(uint8_t dev_id, void *sess),
> diff --git a/lib/cryptodev/version.map b/lib/cryptodev/version.map
> index c50745fa8c..eaea976f21 100644
> --- a/lib/cryptodev/version.map
> +++ b/lib/cryptodev/version.map
> @@ -58,7 +58,6 @@ EXPERIMENTAL {
>  	rte_cryptodev_asym_session_clear;
>  	rte_cryptodev_asym_session_create;
>  	rte_cryptodev_asym_session_free;
> -	rte_cryptodev_asym_session_init;
>  	rte_cryptodev_asym_xform_capability_check_modlen;
>  	rte_cryptodev_asym_xform_capability_check_optype;
>  	rte_cryptodev_sym_cpu_crypto_process;
> @@ -81,7 +80,6 @@ EXPERIMENTAL {
>  	__rte_cryptodev_trace_sym_session_free;
>  	__rte_cryptodev_trace_asym_session_free;
>  	__rte_cryptodev_trace_sym_session_init;
> -	__rte_cryptodev_trace_asym_session_init;
>  	__rte_cryptodev_trace_sym_session_clear;
>  	__rte_cryptodev_trace_asym_session_clear;
>  	__rte_cryptodev_trace_dequeue_burst;
> @@ -104,6 +102,9 @@ EXPERIMENTAL {
>  	rte_cryptodev_remove_deq_callback;
>  	rte_cryptodev_remove_enq_callback;
> 
> +	# added 22.03
> +	rte_cryptodev_asym_session_pool_create;
> +	__rte_cryptodev_trace_asym_session_pool_create;
>  };
> 
>  INTERNAL {
> --
> 2.25.1


  reply	other threads:[~2022-02-07  8:19 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-03 16:04 [PATCH v3 0/4] crypto: improve asym session usage Ciara Power
2022-02-03 16:04 ` [PATCH v3 1/4] crypto: use single buffer for asymmetric session Ciara Power
2022-02-07  8:19   ` Akhil Goyal [this message]
2022-02-07 14:22     ` [EXT] " Power, Ciara
2022-02-03 16:04 ` [PATCH v3 2/4] crypto: hide asym session structure Ciara Power
2022-02-03 16:04 ` [PATCH v3 3/4] crypto: add asym session user data API Ciara Power
2022-02-07  8:41   ` [EXT] " Akhil Goyal
2022-02-03 16:04 ` [PATCH v3 4/4] crypto: modify return value for asym session create Ciara Power
2022-02-07  9:04   ` [EXT] " Akhil Goyal
2022-02-07 13:02     ` Thomas Monjalon
2022-02-07 14:50     ` Power, Ciara
2022-02-08 20:21       ` Akhil Goyal

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CO6PR18MB4484C3F42BE8AC0724F363B2D82C9@CO6PR18MB4484.namprd18.prod.outlook.com \
    --to=gakhil@marvell.com \
    --cc=adwivedi@marvell.com \
    --cc=anoobj@marvell.com \
    --cc=ciara.power@intel.com \
    --cc=declan.doherty@intel.com \
    --cc=deepak.k.jain@intel.com \
    --cc=dev@dpdk.org \
    --cc=fiona.trahe@intel.com \
    --cc=john.griffin@intel.com \
    --cc=ktejasree@marvell.com \
    --cc=mdr@ashroe.eu \
    --cc=roy.fan.zhang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).