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
next prev parent 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).