get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/105110/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 105110,
    "url": "http://patches.dpdk.org/api/patches/105110/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20211213150402.3351032-1-ciara.power@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20211213150402.3351032-1-ciara.power@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20211213150402.3351032-1-ciara.power@intel.com",
    "date": "2021-12-13T15:04:02",
    "name": "crypto: use single buffer for asymmetric session",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "83d98303d6c249eeee16dc8b4f4ab7cb36676064",
    "submitter": {
        "id": 978,
        "url": "http://patches.dpdk.org/api/people/978/?format=api",
        "name": "Power, Ciara",
        "email": "ciara.power@intel.com"
    },
    "delegate": {
        "id": 6690,
        "url": "http://patches.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20211213150402.3351032-1-ciara.power@intel.com/mbox/",
    "series": [
        {
            "id": 20929,
            "url": "http://patches.dpdk.org/api/series/20929/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=20929",
            "date": "2021-12-13T15:04:02",
            "name": "crypto: use single buffer for asymmetric session",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/20929/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/105110/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/105110/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 426E3A00BE;\n\tMon, 13 Dec 2021 16:04:20 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 8C9C5406A2;\n\tMon, 13 Dec 2021 16:04:19 +0100 (CET)",
            "from mga05.intel.com (mga05.intel.com [192.55.52.43])\n by mails.dpdk.org (Postfix) with ESMTP id 473B540042\n for <dev@dpdk.org>; Mon, 13 Dec 2021 16:04:16 +0100 (CET)",
            "from orsmga001.jf.intel.com ([10.7.209.18])\n by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 13 Dec 2021 07:04:08 -0800",
            "from silpixa00400355.ir.intel.com (HELO\n silpixa00400355.ger.corp.intel.com) ([10.237.222.49])\n by orsmga001.jf.intel.com with ESMTP; 13 Dec 2021 07:04:04 -0800"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=simple/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1639407857; x=1670943857;\n h=from:to:cc:subject:date:message-id:mime-version:\n content-transfer-encoding;\n bh=Qfd8dLUKHC1MksY92TrRtmEe2t15TQYN1Gcy7piZb/8=;\n b=B1t4TnkKknKRgaYl6IhXtnAG1fDplTqpaDDFCG8Qp7bnwrBokfPlb7Yu\n ttMPQWNKPimELgcNH9JLviyPr4vrLf6Ez7T7O4dsXENysWH5gXWSeUZXm\n T3jTbFY23RtAB49rfrm1cEh7UNIZRcROT2nKNOk9EYlgllnbEuFFt17J9\n GFOIED4f3GqJVIVfczQ+4BoJmc1GDLojDbHMX0wwNTrQwSSJrlNa72cND\n SRNMg8hnsu9h67YZKSp1xty1MlhNdGW1MmBLgTzraxEZ89nPgrirSXmym\n hzleck2O5K7kFO5Pt2JdqwRk05T/T5nPAjSz2t++UfSb2pm+zRV5L2fBd w==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6200,9189,10196\"; a=\"325021584\"",
            "E=Sophos;i=\"5.88,202,1635231600\"; d=\"scan'208\";a=\"325021584\"",
            "E=Sophos;i=\"5.88,202,1635231600\"; d=\"scan'208\";a=\"544805096\""
        ],
        "X-ExtLoop1": "1",
        "From": "Ciara Power <ciara.power@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "roy.fan.zhang@intel.com, gakhil@marvell.com,\n Ciara Power <ciara.power@intel.com>,\n Declan Doherty <declan.doherty@intel.com>,\n Ankur Dwivedi <adwivedi@marvell.com>, Anoob Joseph <anoobj@marvell.com>,\n Tejasree Kondoj <ktejasree@marvell.com>,\n John Griffin <john.griffin@intel.com>, Fiona Trahe <fiona.trahe@intel.com>,\n Deepak Kumar Jain <deepak.k.jain@intel.com>, Ray Kinsella <mdr@ashroe.eu>",
        "Subject": "[PATCH] crypto: use single buffer for asymmetric session",
        "Date": "Mon, 13 Dec 2021 15:04:02 +0000",
        "Message-Id": "<20211213150402.3351032-1-ciara.power@intel.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "Rather than using a session buffer that contains pointers to private\nsession data elsewhere, have a single session buffer.\nThis session is created for a driver ID, and the mempool element\ncontains space for the max session private data needed for any driver.\n\nSigned-off-by: Ciara Power <ciara.power@intel.com>\n\n---\nHiding the asym session structure by moving it to an internal header\nwill be implemented in a later version of this patch.\n---\n app/test-crypto-perf/cperf_ops.c              |  14 +-\n app/test/test_cryptodev_asym.c                | 204 ++++--------------\n drivers/crypto/cnxk/cn10k_cryptodev_ops.c     |   6 +-\n drivers/crypto/cnxk/cn9k_cryptodev_ops.c      |   6 +-\n drivers/crypto/cnxk/cnxk_cryptodev_ops.c      |  11 +-\n drivers/crypto/octeontx/otx_cryptodev_ops.c   |  29 +--\n drivers/crypto/octeontx2/otx2_cryptodev_ops.c |  25 +--\n drivers/crypto/openssl/rte_openssl_pmd.c      |   5 +-\n drivers/crypto/openssl/rte_openssl_pmd_ops.c  |  23 +-\n drivers/crypto/qat/qat_asym.c                 |  35 +--\n lib/cryptodev/cryptodev_pmd.h                 |  11 +-\n lib/cryptodev/cryptodev_trace_points.c        |   3 +\n lib/cryptodev/rte_cryptodev.c                 | 199 +++++++++++------\n lib/cryptodev/rte_cryptodev.h                 | 107 ++++++---\n lib/cryptodev/rte_cryptodev_trace.h           |  12 ++\n lib/cryptodev/version.map                     |   6 +-\n 16 files changed, 302 insertions(+), 394 deletions(-)",
    "diff": "diff --git a/app/test-crypto-perf/cperf_ops.c b/app/test-crypto-perf/cperf_ops.c\nindex d975ae1ab8..bdc5dc9544 100644\n--- a/app/test-crypto-perf/cperf_ops.c\n+++ b/app/test-crypto-perf/cperf_ops.c\n@@ -735,7 +735,6 @@ cperf_create_session(struct rte_mempool *sess_mp,\n \tstruct rte_crypto_sym_xform aead_xform;\n \tstruct rte_cryptodev_sym_session *sess = NULL;\n \tstruct rte_crypto_asym_xform xform = {0};\n-\tint rc;\n \n \tif (options->op_type == CPERF_ASYM_MODEX) {\n \t\txform.next = NULL;\n@@ -745,19 +744,10 @@ cperf_create_session(struct rte_mempool *sess_mp,\n \t\txform.modex.exponent.data = perf_mod_e;\n \t\txform.modex.exponent.length = sizeof(perf_mod_e);\n \n-\t\tsess = (void *)rte_cryptodev_asym_session_create(sess_mp);\n+\t\tsess = (void *)rte_cryptodev_asym_session_create(sess_mp, dev_id, &xform);\n \t\tif (sess == NULL)\n \t\t\treturn NULL;\n-\t\trc = rte_cryptodev_asym_session_init(dev_id, (void *)sess,\n-\t\t\t\t\t\t     &xform, priv_mp);\n-\t\tif (rc < 0) {\n-\t\t\tif (sess != NULL) {\n-\t\t\t\trte_cryptodev_asym_session_clear(dev_id,\n-\t\t\t\t\t\t\t\t (void *)sess);\n-\t\t\t\trte_cryptodev_asym_session_free((void *)sess);\n-\t\t\t}\n-\t\t\treturn NULL;\n-\t\t}\n+\n \t\treturn sess;\n \t}\n #ifdef RTE_LIB_SECURITY\ndiff --git a/app/test/test_cryptodev_asym.c b/app/test/test_cryptodev_asym.c\nindex 9d19a6d6d9..672260fb78 100644\n--- a/app/test/test_cryptodev_asym.c\n+++ b/app/test/test_cryptodev_asym.c\n@@ -450,7 +450,8 @@ test_cryptodev_asym_op(struct crypto_testsuite_params_asym *ts_params,\n \t}\n \n \tif (!sessionless) {\n-\t\tsess = rte_cryptodev_asym_session_create(ts_params->session_mpool);\n+\t\tsess = rte_cryptodev_asym_session_create(ts_params->session_mpool,\n+\t\t\t\tdev_id, &xform_tc);\n \t\tif (!sess) {\n \t\t\tsnprintf(test_msg, ASYM_TEST_MSG_LEN,\n \t\t\t\t\t\"line %u \"\n@@ -460,15 +461,6 @@ test_cryptodev_asym_op(struct crypto_testsuite_params_asym *ts_params,\n \t\t\tgoto error_exit;\n \t\t}\n \n-\t\tif (rte_cryptodev_asym_session_init(dev_id, sess, &xform_tc,\n-\t\t\t\tts_params->session_mpool) < 0) {\n-\t\t\tsnprintf(test_msg, ASYM_TEST_MSG_LEN,\n-\t\t\t\t\t\"line %u FAILED: %s\",\n-\t\t\t\t\t__LINE__, \"unabled to config sym session\");\n-\t\t\tstatus = TEST_FAILED;\n-\t\t\tgoto error_exit;\n-\t\t}\n-\n \t\trte_crypto_op_attach_asym_session(op, sess);\n \t} else {\n \t\tasym_op->xform = &xform_tc;\n@@ -667,18 +659,11 @@ test_rsa_sign_verify(void)\n \t\treturn TEST_SKIPPED;\n \t}\n \n-\tsess = rte_cryptodev_asym_session_create(sess_mpool);\n+\tsess = rte_cryptodev_asym_session_create(sess_mpool, dev_id, &rsa_xform);\n \n \tif (!sess) {\n \t\tRTE_LOG(ERR, USER1, \"Session creation failed for \"\n \t\t\t\"sign_verify\\n\");\n-\t\treturn TEST_FAILED;\n-\t}\n-\n-\tif (rte_cryptodev_asym_session_init(dev_id, sess, &rsa_xform,\n-\t\t\t\tsess_mpool) < 0) {\n-\t\tRTE_LOG(ERR, USER1, \"Unable to config asym session for \"\n-\t\t\t\"sign_verify\\n\");\n \t\tstatus = TEST_FAILED;\n \t\tgoto error_exit;\n \t}\n@@ -686,7 +671,6 @@ test_rsa_sign_verify(void)\n \tstatus = queue_ops_rsa_sign_verify(sess);\n \n error_exit:\n-\n \trte_cryptodev_asym_session_clear(dev_id, sess);\n \trte_cryptodev_asym_session_free(sess);\n \n@@ -716,17 +700,10 @@ test_rsa_enc_dec(void)\n \t\treturn TEST_SKIPPED;\n \t}\n \n-\tsess = rte_cryptodev_asym_session_create(sess_mpool);\n+\tsess = rte_cryptodev_asym_session_create(sess_mpool, dev_id, &rsa_xform);\n \n \tif (!sess) {\n \t\tRTE_LOG(ERR, USER1, \"Session creation failed for enc_dec\\n\");\n-\t\treturn TEST_FAILED;\n-\t}\n-\n-\tif (rte_cryptodev_asym_session_init(dev_id, sess, &rsa_xform,\n-\t\t\t\tsess_mpool) < 0) {\n-\t\tRTE_LOG(ERR, USER1, \"Unable to config asym session for \"\n-\t\t\t\"enc_dec\\n\");\n \t\tstatus = TEST_FAILED;\n \t\tgoto error_exit;\n \t}\n@@ -763,22 +740,15 @@ test_rsa_sign_verify_crt(void)\n \t\treturn TEST_SKIPPED;\n \t}\n \n-\tsess = rte_cryptodev_asym_session_create(sess_mpool);\n+\tsess = rte_cryptodev_asym_session_create(sess_mpool, dev_id, &rsa_xform_crt);\n \n \tif (!sess) {\n \t\tRTE_LOG(ERR, USER1, \"Session creation failed for \"\n \t\t\t\"sign_verify_crt\\n\");\n \t\tstatus = TEST_FAILED;\n-\t\treturn status;\n-\t}\n-\n-\tif (rte_cryptodev_asym_session_init(dev_id, sess, &rsa_xform_crt,\n-\t\t\t\tsess_mpool) < 0) {\n-\t\tRTE_LOG(ERR, USER1, \"Unable to config asym session for \"\n-\t\t\t\"sign_verify_crt\\n\");\n-\t\tstatus = TEST_FAILED;\n \t\tgoto error_exit;\n \t}\n+\n \tstatus = queue_ops_rsa_sign_verify(sess);\n \n error_exit:\n@@ -811,21 +781,15 @@ test_rsa_enc_dec_crt(void)\n \t\treturn TEST_SKIPPED;\n \t}\n \n-\tsess = rte_cryptodev_asym_session_create(sess_mpool);\n+\tsess = rte_cryptodev_asym_session_create(sess_mpool, dev_id, &rsa_xform_crt);\n \n \tif (!sess) {\n \t\tRTE_LOG(ERR, USER1, \"Session creation failed for \"\n \t\t\t\"enc_dec_crt\\n\");\n-\t\treturn TEST_FAILED;\n-\t}\n-\n-\tif (rte_cryptodev_asym_session_init(dev_id, sess, &rsa_xform_crt,\n-\t\t\t\tsess_mpool) < 0) {\n-\t\tRTE_LOG(ERR, USER1, \"Unable to config asym session for \"\n-\t\t\t\"enc_dec_crt\\n\");\n \t\tstatus = TEST_FAILED;\n \t\tgoto error_exit;\n \t}\n+\n \tstatus = queue_ops_rsa_enc_dec(sess);\n \n error_exit:\n@@ -924,7 +888,6 @@ testsuite_setup(void)\n \t/* configure qp */\n \tts_params->qp_conf.nb_descriptors = DEFAULT_NUM_OPS_INFLIGHT;\n \tts_params->qp_conf.mp_session = ts_params->session_mpool;\n-\tts_params->qp_conf.mp_session_private = ts_params->session_mpool;\n \tfor (qp_id = 0; qp_id < info.max_nb_queue_pairs; qp_id++) {\n \t\tTEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup(\n \t\t\tdev_id, qp_id, &ts_params->qp_conf,\n@@ -933,21 +896,9 @@ testsuite_setup(void)\n \t\t\tqp_id, dev_id);\n \t}\n \n-\t/* setup asym session pool */\n-\tunsigned int session_size = RTE_MAX(\n-\t\trte_cryptodev_asym_get_private_session_size(dev_id),\n-\t\trte_cryptodev_asym_get_header_session_size());\n-\t/*\n-\t * Create mempool with TEST_NUM_SESSIONS * 2,\n-\t * to include the session headers\n-\t */\n-\tts_params->session_mpool = rte_mempool_create(\n-\t\t\t\t\"test_asym_sess_mp\",\n-\t\t\t\tTEST_NUM_SESSIONS * 2,\n-\t\t\t\tsession_size,\n-\t\t\t\t0, 0, NULL, NULL, NULL,\n-\t\t\t\tNULL, SOCKET_ID_ANY,\n-\t\t\t\t0);\n+\tts_params->session_mpool = rte_cryptodev_asym_session_pool_create(\n+\t\t\t\"test_asym_sess_mp\", TEST_NUM_SESSIONS * 2, 0, 0,\n+\t\t\tSOCKET_ID_ANY);\n \n \tTEST_ASSERT_NOT_NULL(ts_params->session_mpool,\n \t\t\t\"session mempool allocation failed\");\n@@ -1104,14 +1055,6 @@ test_dh_gen_shared_sec(struct rte_crypto_asym_xform *xfrm)\n \tstruct rte_crypto_asym_xform xform = *xfrm;\n \tuint8_t peer[] = \"01234567890123456789012345678901234567890123456789\";\n \n-\tsess = rte_cryptodev_asym_session_create(sess_mpool);\n-\tif (sess == NULL) {\n-\t\tRTE_LOG(ERR, USER1,\n-\t\t\t\t\"line %u FAILED: %s\", __LINE__,\n-\t\t\t\t\"Session creation failed\");\n-\t\tstatus = TEST_FAILED;\n-\t\tgoto error_exit;\n-\t}\n \t/* set up crypto op data structure */\n \top = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_ASYMMETRIC);\n \tif (!op) {\n@@ -1134,11 +1077,11 @@ test_dh_gen_shared_sec(struct rte_crypto_asym_xform *xfrm)\n \tasym_op->dh.shared_secret.data = output;\n \tasym_op->dh.shared_secret.length = sizeof(output);\n \n-\tif (rte_cryptodev_asym_session_init(dev_id, sess, &xform,\n-\t\t\tsess_mpool) < 0) {\n+\tsess = rte_cryptodev_asym_session_create(sess_mpool, dev_id, &xform);\n+\tif (sess == NULL) {\n \t\tRTE_LOG(ERR, USER1,\n-\t\t\t\t\"line %u FAILED: %s\",\n-\t\t\t\t__LINE__, \"unabled to config sym session\");\n+\t\t\t\t\"line %u FAILED: %s\", __LINE__,\n+\t\t\t\t\"Session creation failed\");\n \t\tstatus = TEST_FAILED;\n \t\tgoto error_exit;\n \t}\n@@ -1196,14 +1139,6 @@ test_dh_gen_priv_key(struct rte_crypto_asym_xform *xfrm)\n \tuint8_t output[TEST_DH_MOD_LEN];\n \tstruct rte_crypto_asym_xform xform = *xfrm;\n \n-\tsess = rte_cryptodev_asym_session_create(sess_mpool);\n-\tif (sess == NULL) {\n-\t\tRTE_LOG(ERR, USER1,\n-\t\t\t\t \"line %u FAILED: %s\", __LINE__,\n-\t\t\t\t\"Session creation failed\");\n-\t\tstatus = TEST_FAILED;\n-\t\tgoto error_exit;\n-\t}\n \t/* set up crypto op data structure */\n \top = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_ASYMMETRIC);\n \tif (!op) {\n@@ -1222,11 +1157,11 @@ test_dh_gen_priv_key(struct rte_crypto_asym_xform *xfrm)\n \tasym_op->dh.priv_key.data = output;\n \tasym_op->dh.priv_key.length = sizeof(output);\n \n-\tif (rte_cryptodev_asym_session_init(dev_id, sess, &xform,\n-\t\t\tsess_mpool) < 0) {\n+\tsess = rte_cryptodev_asym_session_create(sess_mpool, dev_id, &xform);\n+\tif (sess == NULL) {\n \t\tRTE_LOG(ERR, USER1,\n-\t\t\t\t\"line %u FAILED: %s\",\n-\t\t\t\t__LINE__, \"unabled to config sym session\");\n+\t\t\t\t \"line %u FAILED: %s\", __LINE__,\n+\t\t\t\t\"Session creation failed\");\n \t\tstatus = TEST_FAILED;\n \t\tgoto error_exit;\n \t}\n@@ -1287,14 +1222,6 @@ test_dh_gen_pub_key(struct rte_crypto_asym_xform *xfrm)\n \tuint8_t output[TEST_DH_MOD_LEN];\n \tstruct rte_crypto_asym_xform xform = *xfrm;\n \n-\tsess = rte_cryptodev_asym_session_create(sess_mpool);\n-\tif (sess == NULL) {\n-\t\tRTE_LOG(ERR, USER1,\n-\t\t\t\t \"line %u FAILED: %s\", __LINE__,\n-\t\t\t\t\"Session creation failed\");\n-\t\tstatus = TEST_FAILED;\n-\t\tgoto error_exit;\n-\t}\n \t/* set up crypto op data structure */\n \top = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_ASYMMETRIC);\n \tif (!op) {\n@@ -1321,11 +1248,11 @@ test_dh_gen_pub_key(struct rte_crypto_asym_xform *xfrm)\n \t\t\t\t\t0);\n \tasym_op->dh.priv_key = dh_test_params.priv_key;\n \n-\tif (rte_cryptodev_asym_session_init(dev_id, sess, &xform,\n-\t\t\tsess_mpool) < 0) {\n+\tsess = rte_cryptodev_asym_session_create(sess_mpool, dev_id, &xform);\n+\tif (sess == NULL) {\n \t\tRTE_LOG(ERR, USER1,\n-\t\t\t\t\"line %u FAILED: %s\",\n-\t\t\t\t__LINE__, \"unabled to config sym session\");\n+\t\t\t\t \"line %u FAILED: %s\", __LINE__,\n+\t\t\t\t\"Session creation failed\");\n \t\tstatus = TEST_FAILED;\n \t\tgoto error_exit;\n \t}\n@@ -1388,15 +1315,6 @@ test_dh_gen_kp(struct rte_crypto_asym_xform *xfrm)\n \tstruct rte_crypto_asym_xform pub_key_xform;\n \tstruct rte_crypto_asym_xform xform = *xfrm;\n \n-\tsess = rte_cryptodev_asym_session_create(sess_mpool);\n-\tif (sess == NULL) {\n-\t\tRTE_LOG(ERR, USER1,\n-\t\t\t\t \"line %u FAILED: %s\", __LINE__,\n-\t\t\t\t\"Session creation failed\");\n-\t\tstatus = TEST_FAILED;\n-\t\tgoto error_exit;\n-\t}\n-\n \t/* set up crypto op data structure */\n \top = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_ASYMMETRIC);\n \tif (!op) {\n@@ -1420,11 +1338,12 @@ test_dh_gen_kp(struct rte_crypto_asym_xform *xfrm)\n \tasym_op->dh.pub_key.length = sizeof(out_pub_key);\n \tasym_op->dh.priv_key.data = out_prv_key;\n \tasym_op->dh.priv_key.length = sizeof(out_prv_key);\n-\tif (rte_cryptodev_asym_session_init(dev_id, sess, &xform,\n-\t\t\tsess_mpool) < 0) {\n+\n+\tsess = rte_cryptodev_asym_session_create(sess_mpool, dev_id, &xform);\n+\tif (sess == NULL) {\n \t\tRTE_LOG(ERR, USER1,\n-\t\t\t\t\"line %u FAILED: %s\",\n-\t\t\t\t__LINE__, \"unabled to config sym session\");\n+\t\t\t\t \"line %u FAILED: %s\", __LINE__,\n+\t\t\t\t\"Session creation failed\");\n \t\tstatus = TEST_FAILED;\n \t\tgoto error_exit;\n \t}\n@@ -1511,7 +1430,7 @@ test_mod_inv(void)\n \t\t\t\treturn TEST_SKIPPED;\n \t\t}\n \n-\tsess = rte_cryptodev_asym_session_create(sess_mpool);\n+\tsess = rte_cryptodev_asym_session_create(sess_mpool, dev_id, &modinv_xform);\n \tif (!sess) {\n \t\tRTE_LOG(ERR, USER1, \"line %u \"\n \t\t\t\t\"FAILED: %s\", __LINE__,\n@@ -1520,15 +1439,6 @@ test_mod_inv(void)\n \t\tgoto error_exit;\n \t}\n \n-\tif (rte_cryptodev_asym_session_init(dev_id, sess, &modinv_xform,\n-\t\t\tsess_mpool) < 0) {\n-\t\tRTE_LOG(ERR, USER1,\n-\t\t\t\t\"line %u FAILED: %s\",\n-\t\t\t\t__LINE__, \"unabled to config sym session\");\n-\t\tstatus = TEST_FAILED;\n-\t\tgoto error_exit;\n-\t}\n-\n \t/* generate crypto op data structure */\n \top = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_ASYMMETRIC);\n \tif (!op) {\n@@ -1646,7 +1556,7 @@ test_mod_exp(void)\n \t\tgoto error_exit;\n \t}\n \n-\tsess = rte_cryptodev_asym_session_create(sess_mpool);\n+\tsess = rte_cryptodev_asym_session_create(sess_mpool, dev_id, &modex_xform);\n \tif (!sess) {\n \t\tRTE_LOG(ERR, USER1,\n \t\t\t\t \"line %u \"\n@@ -1656,15 +1566,6 @@ test_mod_exp(void)\n \t\tgoto error_exit;\n \t}\n \n-\tif (rte_cryptodev_asym_session_init(dev_id, sess, &modex_xform,\n-\t\t\tsess_mpool) < 0) {\n-\t\tRTE_LOG(ERR, USER1,\n-\t\t\t\t\"line %u FAILED: %s\",\n-\t\t\t\t__LINE__, \"unabled to config sym session\");\n-\t\tstatus = TEST_FAILED;\n-\t\tgoto error_exit;\n-\t}\n-\n \tasym_op = op->asym;\n \tmemcpy(input, base, sizeof(base));\n \tasym_op->modex.base.data = input;\n@@ -1768,7 +1669,7 @@ test_dsa_sign(void)\n \tuint8_t s[TEST_DH_MOD_LEN];\n \tuint8_t dgst[] = \"35d81554afaad2cf18f3a1770d5fedc4ea5be344\";\n \n-\tsess = rte_cryptodev_asym_session_create(sess_mpool);\n+\tsess = rte_cryptodev_asym_session_create(sess_mpool, dev_id, &dsa_xform);\n \tif (sess == NULL) {\n \t\tRTE_LOG(ERR, USER1,\n \t\t\t\t \"line %u FAILED: %s\", __LINE__,\n@@ -1797,15 +1698,6 @@ test_dsa_sign(void)\n \tdebug_hexdump(stdout, \"priv_key: \", dsa_xform.dsa.x.data,\n \t\t\tdsa_xform.dsa.x.length);\n \n-\tif (rte_cryptodev_asym_session_init(dev_id, sess, &dsa_xform,\n-\t\t\t\tsess_mpool) < 0) {\n-\t\tRTE_LOG(ERR, USER1,\n-\t\t\t\t\"line %u FAILED: %s\",\n-\t\t\t\t__LINE__, \"unabled to config sym session\");\n-\t\tstatus = TEST_FAILED;\n-\t\tgoto error_exit;\n-\t}\n-\n \t/* attach asymmetric crypto session to crypto operations */\n \trte_crypto_op_attach_asym_session(op, sess);\n \tasym_op->dsa.op_type = RTE_CRYPTO_ASYM_OP_SIGN;\n@@ -1941,15 +1833,6 @@ test_ecdsa_sign_verify(enum curve curve_id)\n \n \trte_cryptodev_info_get(dev_id, &dev_info);\n \n-\tsess = rte_cryptodev_asym_session_create(sess_mpool);\n-\tif (sess == NULL) {\n-\t\tRTE_LOG(ERR, USER1,\n-\t\t\t\t\"line %u FAILED: %s\", __LINE__,\n-\t\t\t\t\"Session creation failed\\n\");\n-\t\tstatus = TEST_FAILED;\n-\t\tgoto exit;\n-\t}\n-\n \t/* Setup crypto op data structure */\n \top = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_ASYMMETRIC);\n \tif (op == NULL) {\n@@ -1967,11 +1850,11 @@ test_ecdsa_sign_verify(enum curve curve_id)\n \txform.xform_type = RTE_CRYPTO_ASYM_XFORM_ECDSA;\n \txform.ec.curve_id = input_params.curve;\n \n-\tif (rte_cryptodev_asym_session_init(dev_id, sess, &xform,\n-\t\t\t\tsess_mpool) < 0) {\n+\tsess = rte_cryptodev_asym_session_create(sess_mpool, dev_id, &xform);\n+\tif (sess == NULL) {\n \t\tRTE_LOG(ERR, USER1,\n \t\t\t\t\"line %u FAILED: %s\", __LINE__,\n-\t\t\t\t\"Unable to config asym session\\n\");\n+\t\t\t\t\"Session creation failed\\n\");\n \t\tstatus = TEST_FAILED;\n \t\tgoto exit;\n \t}\n@@ -2079,10 +1962,8 @@ test_ecdsa_sign_verify(enum curve curve_id)\n \t}\n \n exit:\n-\tif (sess != NULL) {\n-\t\trte_cryptodev_asym_session_clear(dev_id, sess);\n+\tif (sess != NULL)\n \t\trte_cryptodev_asym_session_free(sess);\n-\t}\n \tif (op != NULL)\n \t\trte_crypto_op_free(op);\n \treturn status;\n@@ -2154,15 +2035,6 @@ test_ecpm(enum curve curve_id)\n \n \trte_cryptodev_info_get(dev_id, &dev_info);\n \n-\tsess = rte_cryptodev_asym_session_create(sess_mpool);\n-\tif (sess == NULL) {\n-\t\tRTE_LOG(ERR, USER1,\n-\t\t\t\t\"line %u FAILED: %s\", __LINE__,\n-\t\t\t\t\"Session creation failed\\n\");\n-\t\tstatus = TEST_FAILED;\n-\t\tgoto exit;\n-\t}\n-\n \t/* Setup crypto op data structure */\n \top = rte_crypto_op_alloc(op_mpool, RTE_CRYPTO_OP_TYPE_ASYMMETRIC);\n \tif (op == NULL) {\n@@ -2180,11 +2052,11 @@ test_ecpm(enum curve curve_id)\n \txform.xform_type = RTE_CRYPTO_ASYM_XFORM_ECPM;\n \txform.ec.curve_id = input_params.curve;\n \n-\tif (rte_cryptodev_asym_session_init(dev_id, sess, &xform,\n-\t\t\t\tsess_mpool) < 0) {\n+\tsess = rte_cryptodev_asym_session_create(sess_mpool, dev_id, &xform);\n+\tif (sess == NULL) {\n \t\tRTE_LOG(ERR, USER1,\n \t\t\t\t\"line %u FAILED: %s\", __LINE__,\n-\t\t\t\t\"Unable to config asym session\\n\");\n+\t\t\t\t\"Session creation failed\\n\");\n \t\tstatus = TEST_FAILED;\n \t\tgoto exit;\n \t}\ndiff --git a/drivers/crypto/cnxk/cn10k_cryptodev_ops.c b/drivers/crypto/cnxk/cn10k_cryptodev_ops.c\nindex d25a17cbf3..ea658dc1df 100644\n--- a/drivers/crypto/cnxk/cn10k_cryptodev_ops.c\n+++ b/drivers/crypto/cnxk/cn10k_cryptodev_ops.c\n@@ -158,8 +158,7 @@ cn10k_cpt_fill_inst(struct cnxk_cpt_qp *qp, struct rte_crypto_op *ops[],\n \n \t\tif (op->sess_type == RTE_CRYPTO_OP_WITH_SESSION) {\n \t\t\tasym_op = op->asym;\n-\t\t\tae_sess = get_asym_session_private_data(\n-\t\t\t\tasym_op->session, cn10k_cryptodev_driver_id);\n+\t\t\tae_sess = get_asym_session_private_data(asym_op->session);\n \t\t\tret = cnxk_ae_enqueue(qp, op, infl_req, &inst[0],\n \t\t\t\t\t      ae_sess);\n \t\t\tif (unlikely(ret))\n@@ -451,8 +450,7 @@ cn10k_cpt_dequeue_post_process(struct cnxk_cpt_qp *qp,\n \t\t\tuintptr_t *mdata = infl_req->mdata;\n \t\t\tstruct cnxk_ae_sess *sess;\n \n-\t\t\tsess = get_asym_session_private_data(\n-\t\t\t\top->session, cn10k_cryptodev_driver_id);\n+\t\t\tsess = get_asym_session_private_data(op->session);\n \n \t\t\tcnxk_ae_post_process(cop, sess, (uint8_t *)mdata[0]);\n \t\t}\ndiff --git a/drivers/crypto/cnxk/cn9k_cryptodev_ops.c b/drivers/crypto/cnxk/cn9k_cryptodev_ops.c\nindex 449208da8f..30a970120f 100644\n--- a/drivers/crypto/cnxk/cn9k_cryptodev_ops.c\n+++ b/drivers/crypto/cnxk/cn9k_cryptodev_ops.c\n@@ -138,8 +138,7 @@ cn9k_cpt_inst_prep(struct cnxk_cpt_qp *qp, struct rte_crypto_op *op,\n \n \t\tif (op->sess_type == RTE_CRYPTO_OP_WITH_SESSION) {\n \t\t\tasym_op = op->asym;\n-\t\t\tsess = get_asym_session_private_data(\n-\t\t\t\tasym_op->session, cn9k_cryptodev_driver_id);\n+\t\t\tsess = get_asym_session_private_data(asym_op->session);\n \t\t\tret = cnxk_ae_enqueue(qp, op, infl_req, inst, sess);\n \t\t\tinst->w7.u64 = sess->cpt_inst_w7;\n \t\t} else {\n@@ -447,8 +446,7 @@ cn9k_cpt_dequeue_post_process(struct cnxk_cpt_qp *qp, struct rte_crypto_op *cop,\n \t\t\tuintptr_t *mdata = infl_req->mdata;\n \t\t\tstruct cnxk_ae_sess *sess;\n \n-\t\t\tsess = get_asym_session_private_data(\n-\t\t\t\top->session, cn9k_cryptodev_driver_id);\n+\t\t\tsess = get_asym_session_private_data(op->session);\n \n \t\t\tcnxk_ae_post_process(cop, sess, (uint8_t *)mdata[0]);\n \t\t}\ndiff --git a/drivers/crypto/cnxk/cnxk_cryptodev_ops.c b/drivers/crypto/cnxk/cnxk_cryptodev_ops.c\nindex a2281fb8de..c37d47d63b 100644\n--- a/drivers/crypto/cnxk/cnxk_cryptodev_ops.c\n+++ b/drivers/crypto/cnxk/cnxk_cryptodev_ops.c\n@@ -645,7 +645,7 @@ cnxk_ae_session_clear(struct rte_cryptodev *dev,\n \tstruct rte_mempool *sess_mp;\n \tstruct cnxk_ae_sess *priv;\n \n-\tpriv = get_asym_session_private_data(sess, dev->driver_id);\n+\tpriv = get_asym_session_private_data(sess);\n \tif (priv == NULL)\n \t\treturn;\n \n@@ -655,7 +655,6 @@ cnxk_ae_session_clear(struct rte_cryptodev *dev,\n \t/* Reset and free object back to pool */\n \tmemset(priv, 0, cnxk_ae_session_size_get(dev));\n \tsess_mp = rte_mempool_from_obj(priv);\n-\tset_asym_session_private_data(sess, dev->driver_id, NULL);\n \trte_mempool_put(sess_mp, priv);\n }\n \n@@ -667,15 +666,10 @@ cnxk_ae_session_cfg(struct rte_cryptodev *dev,\n {\n \tstruct cnxk_cpt_vf *vf = dev->data->dev_private;\n \tstruct roc_cpt *roc_cpt = &vf->cpt;\n-\tstruct cnxk_ae_sess *priv;\n+\tstruct cnxk_ae_sess *priv = get_asym_session_private_data(sess);\n \tunion cpt_inst_w7 w7;\n \tint ret;\n \n-\tif (rte_mempool_get(pool, (void **)&priv))\n-\t\treturn -ENOMEM;\n-\n-\tmemset(priv, 0, sizeof(struct cnxk_ae_sess));\n-\n \tret = cnxk_ae_fill_session_parameters(priv, xform);\n \tif (ret) {\n \t\trte_mempool_put(pool, priv);\n@@ -687,7 +681,6 @@ cnxk_ae_session_cfg(struct rte_cryptodev *dev,\n \tpriv->cpt_inst_w7 = w7.u64;\n \tpriv->cnxk_fpm_iova = vf->cnxk_fpm_iova;\n \tpriv->ec_grp = vf->ec_grp;\n-\tset_asym_session_private_data(sess, dev->driver_id, priv);\n \n \treturn 0;\n }\ndiff --git a/drivers/crypto/octeontx/otx_cryptodev_ops.c b/drivers/crypto/octeontx/otx_cryptodev_ops.c\nindex 9e8fd495cf..f0cd0b5799 100644\n--- a/drivers/crypto/octeontx/otx_cryptodev_ops.c\n+++ b/drivers/crypto/octeontx/otx_cryptodev_ops.c\n@@ -375,35 +375,24 @@ otx_cpt_asym_session_size_get(struct rte_cryptodev *dev __rte_unused)\n }\n \n static int\n-otx_cpt_asym_session_cfg(struct rte_cryptodev *dev,\n+otx_cpt_asym_session_cfg(struct rte_cryptodev *dev __rte_unused,\n \t\t\t struct rte_crypto_asym_xform *xform __rte_unused,\n \t\t\t struct rte_cryptodev_asym_session *sess,\n-\t\t\t struct rte_mempool *pool)\n+\t\t\t struct rte_mempool *pool __rte_unused)\n {\n-\tstruct cpt_asym_sess_misc *priv;\n+\tstruct cpt_asym_sess_misc *priv = get_asym_session_private_data(sess);\n \tint ret;\n \n \tCPT_PMD_INIT_FUNC_TRACE();\n \n-\tif (rte_mempool_get(pool, (void **)&priv)) {\n-\t\tCPT_LOG_ERR(\"Could not allocate session private data\");\n-\t\treturn -ENOMEM;\n-\t}\n-\n-\tmemset(priv, 0, sizeof(struct cpt_asym_sess_misc));\n-\n \tret = cpt_fill_asym_session_parameters(priv, xform);\n \tif (ret) {\n \t\tCPT_LOG_ERR(\"Could not configure session parameters\");\n-\n-\t\t/* Return session to mempool */\n-\t\trte_mempool_put(pool, priv);\n \t\treturn ret;\n \t}\n \n \tpriv->cpt_inst_w7 = 0;\n \n-\tset_asym_session_private_data(sess, dev->driver_id, priv);\n \treturn 0;\n }\n \n@@ -412,11 +401,10 @@ otx_cpt_asym_session_clear(struct rte_cryptodev *dev,\n \t\t\t   struct rte_cryptodev_asym_session *sess)\n {\n \tstruct cpt_asym_sess_misc *priv;\n-\tstruct rte_mempool *sess_mp;\n \n \tCPT_PMD_INIT_FUNC_TRACE();\n \n-\tpriv = get_asym_session_private_data(sess, dev->driver_id);\n+\tpriv = get_asym_session_private_data(sess);\n \n \tif (priv == NULL)\n \t\treturn;\n@@ -424,9 +412,6 @@ otx_cpt_asym_session_clear(struct rte_cryptodev *dev,\n \t/* Free resources allocated during session configure */\n \tcpt_free_asym_session_parameters(priv);\n \tmemset(priv, 0, otx_cpt_asym_session_size_get(dev));\n-\tsess_mp = rte_mempool_from_obj(priv);\n-\tset_asym_session_private_data(sess, dev->driver_id, NULL);\n-\trte_mempool_put(sess_mp, priv);\n }\n \n static __rte_always_inline void * __rte_hot\n@@ -471,8 +456,7 @@ otx_cpt_enq_single_asym(struct cpt_instance *instance,\n \t\treturn NULL;\n \t}\n \n-\tsess = get_asym_session_private_data(asym_op->session,\n-\t\t\t\t\t     otx_cryptodev_driver_id);\n+\tsess = get_asym_session_private_data(asym_op->session);\n \n \t/* Store phys_addr of the mdata to meta_buf */\n \tparams.meta_buf = rte_mempool_virt2iova(mdata);\n@@ -852,8 +836,7 @@ otx_cpt_asym_post_process(struct rte_crypto_op *cop,\n \tstruct rte_crypto_asym_op *op = cop->asym;\n \tstruct cpt_asym_sess_misc *sess;\n \n-\tsess = get_asym_session_private_data(op->session,\n-\t\t\t\t\t     otx_cryptodev_driver_id);\n+\tsess = get_asym_session_private_data(op->session);\n \n \tswitch (sess->xfrm_type) {\n \tcase RTE_CRYPTO_ASYM_XFORM_RSA:\ndiff --git a/drivers/crypto/octeontx2/otx2_cryptodev_ops.c b/drivers/crypto/octeontx2/otx2_cryptodev_ops.c\nindex 339b82f33e..912b768585 100644\n--- a/drivers/crypto/octeontx2/otx2_cryptodev_ops.c\n+++ b/drivers/crypto/octeontx2/otx2_cryptodev_ops.c\n@@ -587,8 +587,7 @@ otx2_cpt_enqueue_asym(struct otx2_cpt_qp *qp,\n \t\treturn -ENOMEM;\n \t}\n \n-\tsess = get_asym_session_private_data(asym_op->session,\n-\t\t\t\t\t     otx2_cryptodev_driver_id);\n+\tsess = get_asym_session_private_data(asym_op->session);\n \n \t/* Store IO address of the mdata to meta_buf */\n \tparams.meta_buf = rte_mempool_virt2iova(mdata);\n@@ -941,8 +940,7 @@ otx2_cpt_asym_post_process(struct rte_crypto_op *cop,\n \tstruct rte_crypto_asym_op *op = cop->asym;\n \tstruct cpt_asym_sess_misc *sess;\n \n-\tsess = get_asym_session_private_data(op->session,\n-\t\t\t\t\t     otx2_cryptodev_driver_id);\n+\tsess = get_asym_session_private_data(op->session);\n \n \tswitch (sess->xfrm_type) {\n \tcase RTE_CRYPTO_ASYM_XFORM_RSA:\n@@ -1353,24 +1351,17 @@ otx2_cpt_asym_session_size_get(struct rte_cryptodev *dev __rte_unused)\n }\n \n static int\n-otx2_cpt_asym_session_cfg(struct rte_cryptodev *dev,\n+otx2_cpt_asym_session_cfg(struct rte_cryptodev *dev __rte_unused,\n \t\t\t  struct rte_crypto_asym_xform *xform,\n \t\t\t  struct rte_cryptodev_asym_session *sess,\n \t\t\t  struct rte_mempool *pool)\n {\n-\tstruct cpt_asym_sess_misc *priv;\n+\tstruct cpt_asym_sess_misc *priv = get_asym_session_private_data(sess);\n \tvq_cmd_word3_t vq_cmd_w3;\n \tint ret;\n \n \tCPT_PMD_INIT_FUNC_TRACE();\n \n-\tif (rte_mempool_get(pool, (void **)&priv)) {\n-\t\tCPT_LOG_ERR(\"Could not allocate session_private_data\");\n-\t\treturn -ENOMEM;\n-\t}\n-\n-\tmemset(priv, 0, sizeof(struct cpt_asym_sess_misc));\n-\n \tret = cpt_fill_asym_session_parameters(priv, xform);\n \tif (ret) {\n \t\tCPT_LOG_ERR(\"Could not configure session parameters\");\n@@ -1384,8 +1375,6 @@ otx2_cpt_asym_session_cfg(struct rte_cryptodev *dev,\n \tvq_cmd_w3.s.grp = OTX2_CPT_EGRP_AE;\n \tpriv->cpt_inst_w7 = vq_cmd_w3.u64;\n \n-\tset_asym_session_private_data(sess, dev->driver_id, priv);\n-\n \treturn 0;\n }\n \n@@ -1394,11 +1383,10 @@ otx2_cpt_asym_session_clear(struct rte_cryptodev *dev,\n \t\t\t    struct rte_cryptodev_asym_session *sess)\n {\n \tstruct cpt_asym_sess_misc *priv;\n-\tstruct rte_mempool *sess_mp;\n \n \tCPT_PMD_INIT_FUNC_TRACE();\n \n-\tpriv = get_asym_session_private_data(sess, dev->driver_id);\n+\tpriv = get_asym_session_private_data(sess);\n \tif (priv == NULL)\n \t\treturn;\n \n@@ -1407,9 +1395,6 @@ otx2_cpt_asym_session_clear(struct rte_cryptodev *dev,\n \n \t/* Reset and free object back to pool */\n \tmemset(priv, 0, otx2_cpt_asym_session_size_get(dev));\n-\tsess_mp = rte_mempool_from_obj(priv);\n-\tset_asym_session_private_data(sess, dev->driver_id, NULL);\n-\trte_mempool_put(sess_mp, priv);\n }\n \n struct rte_cryptodev_ops otx2_cpt_ops = {\ndiff --git a/drivers/crypto/openssl/rte_openssl_pmd.c b/drivers/crypto/openssl/rte_openssl_pmd.c\nindex 5794ed8159..1e7e5f6849 100644\n--- a/drivers/crypto/openssl/rte_openssl_pmd.c\n+++ b/drivers/crypto/openssl/rte_openssl_pmd.c\n@@ -747,10 +747,7 @@ get_session(struct openssl_qp *qp, struct rte_crypto_op *op)\n \t\t\t\t\t\tcryptodev_driver_id);\n \t\t} else {\n \t\t\tif (likely(op->asym->session != NULL))\n-\t\t\t\tasym_sess = (struct openssl_asym_session *)\n-\t\t\t\t\t\tget_asym_session_private_data(\n-\t\t\t\t\t\top->asym->session,\n-\t\t\t\t\t\tcryptodev_driver_id);\n+\t\t\t\tasym_sess = get_asym_session_private_data(op->asym->session);\n \t\t\tif (asym_sess == NULL)\n \t\t\t\top->status =\n \t\t\t\t\tRTE_CRYPTO_OP_STATUS_INVALID_SESSION;\ndiff --git a/drivers/crypto/openssl/rte_openssl_pmd_ops.c b/drivers/crypto/openssl/rte_openssl_pmd_ops.c\nindex 52715f86f8..061fdd2837 100644\n--- a/drivers/crypto/openssl/rte_openssl_pmd_ops.c\n+++ b/drivers/crypto/openssl/rte_openssl_pmd_ops.c\n@@ -1120,7 +1120,7 @@ static int\n openssl_pmd_asym_session_configure(struct rte_cryptodev *dev __rte_unused,\n \t\tstruct rte_crypto_asym_xform *xform,\n \t\tstruct rte_cryptodev_asym_session *sess,\n-\t\tstruct rte_mempool *mempool)\n+\t\tstruct rte_mempool *mempool __rte_unused)\n {\n \tvoid *asym_sess_private_data;\n \tint ret;\n@@ -1130,25 +1130,14 @@ openssl_pmd_asym_session_configure(struct rte_cryptodev *dev __rte_unused,\n \t\treturn -EINVAL;\n \t}\n \n-\tif (rte_mempool_get(mempool, &asym_sess_private_data)) {\n-\t\tCDEV_LOG_ERR(\n-\t\t\t\"Couldn't get object from session mempool\");\n-\t\treturn -ENOMEM;\n-\t}\n-\n+\tasym_sess_private_data = get_asym_session_private_data(sess);\n \tret = openssl_set_asym_session_parameters(asym_sess_private_data,\n \t\t\txform);\n \tif (ret != 0) {\n \t\tOPENSSL_LOG(ERR, \"failed configure session parameters\");\n-\n-\t\t/* Return session to mempool */\n-\t\trte_mempool_put(mempool, asym_sess_private_data);\n \t\treturn ret;\n \t}\n \n-\tset_asym_session_private_data(sess, dev->driver_id,\n-\t\t\tasym_sess_private_data);\n-\n \treturn 0;\n }\n \n@@ -1206,19 +1195,15 @@ static void openssl_reset_asym_session(struct openssl_asym_session *sess)\n  * so it doesn't leave key material behind\n  */\n static void\n-openssl_pmd_asym_session_clear(struct rte_cryptodev *dev,\n+openssl_pmd_asym_session_clear(struct rte_cryptodev *dev __rte_unused,\n \t\tstruct rte_cryptodev_asym_session *sess)\n {\n-\tuint8_t index = dev->driver_id;\n-\tvoid *sess_priv = get_asym_session_private_data(sess, index);\n+\tvoid *sess_priv = get_asym_session_private_data(sess);\n \n \t/* Zero out the whole structure */\n \tif (sess_priv) {\n \t\topenssl_reset_asym_session(sess_priv);\n \t\tmemset(sess_priv, 0, sizeof(struct openssl_asym_session));\n-\t\tstruct rte_mempool *sess_mp = rte_mempool_from_obj(sess_priv);\n-\t\tset_asym_session_private_data(sess, index, NULL);\n-\t\trte_mempool_put(sess_mp, sess_priv);\n \t}\n }\n \ndiff --git a/drivers/crypto/qat/qat_asym.c b/drivers/crypto/qat/qat_asym.c\nindex f893508030..f3c1fb2a69 100644\n--- a/drivers/crypto/qat/qat_asym.c\n+++ b/drivers/crypto/qat/qat_asym.c\n@@ -491,9 +491,7 @@ qat_asym_build_request(void *in_op,\n \n \top->status = RTE_CRYPTO_OP_STATUS_NOT_PROCESSED;\n \tif (op->sess_type == RTE_CRYPTO_OP_WITH_SESSION) {\n-\t\tctx = (struct qat_asym_session *)\n-\t\t\tget_asym_session_private_data(\n-\t\t\top->asym->session, qat_asym_driver_id);\n+\t\tctx = get_asym_session_private_data(op->asym->session);\n \t\tif (unlikely(ctx == NULL)) {\n \t\t\tQAT_LOG(ERR, \"Session has not been created for this device\");\n \t\t\tgoto error;\n@@ -711,8 +709,7 @@ qat_asym_process_response(void **op, uint8_t *resp,\n \t}\n \n \tif (rx_op->sess_type == RTE_CRYPTO_OP_WITH_SESSION) {\n-\t\tctx = (struct qat_asym_session *)get_asym_session_private_data(\n-\t\t\trx_op->asym->session, qat_asym_driver_id);\n+\t\tctx = get_asym_session_private_data(rx_op->asym->session);\n \t\tqat_asym_collect_response(rx_op, cookie, ctx->xform);\n \t} else if (rx_op->sess_type == RTE_CRYPTO_OP_SESSIONLESS) {\n \t\tqat_asym_collect_response(rx_op, cookie, rx_op->asym->xform);\n@@ -726,22 +723,15 @@ qat_asym_process_response(void **op, uint8_t *resp,\n }\n \n int\n-qat_asym_session_configure(struct rte_cryptodev *dev,\n+qat_asym_session_configure(struct rte_cryptodev *dev __rte_unused,\n \t\tstruct rte_crypto_asym_xform *xform,\n \t\tstruct rte_cryptodev_asym_session *sess,\n-\t\tstruct rte_mempool *mempool)\n+\t\tstruct rte_mempool *mempool __rte_unused)\n {\n \tint err = 0;\n-\tvoid *sess_private_data;\n \tstruct qat_asym_session *session;\n \n-\tif (rte_mempool_get(mempool, &sess_private_data)) {\n-\t\tQAT_LOG(ERR,\n-\t\t\t\"Couldn't get object from session mempool\");\n-\t\treturn -ENOMEM;\n-\t}\n-\n-\tsession = sess_private_data;\n+\tsession = get_asym_session_private_data(sess);\n \tif (xform->xform_type == RTE_CRYPTO_ASYM_XFORM_MODEX) {\n \t\tif (xform->modex.exponent.length == 0 ||\n \t\t\t\txform->modex.modulus.length == 0) {\n@@ -773,13 +763,10 @@ qat_asym_session_configure(struct rte_cryptodev *dev,\n \t}\n \n \tsession->xform = xform;\n-\tqat_asym_build_req_tmpl(sess_private_data);\n-\tset_asym_session_private_data(sess, dev->driver_id,\n-\t\tsess_private_data);\n+\tqat_asym_build_req_tmpl(sess->sess_private_data);\n \n \treturn 0;\n error:\n-\trte_mempool_put(mempool, sess_private_data);\n \treturn err;\n }\n \n@@ -793,15 +780,9 @@ void\n qat_asym_session_clear(struct rte_cryptodev *dev,\n \t\tstruct rte_cryptodev_asym_session *sess)\n {\n-\tuint8_t index = dev->driver_id;\n-\tvoid *sess_priv = get_asym_session_private_data(sess, index);\n+\tvoid *sess_priv = get_asym_session_private_data(sess);\n \tstruct qat_asym_session *s = (struct qat_asym_session *)sess_priv;\n \n-\tif (sess_priv) {\n+\tif (sess_priv)\n \t\tmemset(s, 0, qat_asym_session_get_private_size(dev));\n-\t\tstruct rte_mempool *sess_mp = rte_mempool_from_obj(sess_priv);\n-\n-\t\tset_asym_session_private_data(sess, index, NULL);\n-\t\trte_mempool_put(sess_mp, sess_priv);\n-\t}\n }\ndiff --git a/lib/cryptodev/cryptodev_pmd.h b/lib/cryptodev/cryptodev_pmd.h\nindex b9146f652c..833f8044fb 100644\n--- a/lib/cryptodev/cryptodev_pmd.h\n+++ b/lib/cryptodev/cryptodev_pmd.h\n@@ -628,16 +628,9 @@ set_sym_session_private_data(struct rte_cryptodev_sym_session *sess,\n }\n \n static inline void *\n-get_asym_session_private_data(const struct rte_cryptodev_asym_session *sess,\n-\t\tuint8_t driver_id) {\n-\treturn sess->sess_private_data[driver_id];\n-}\n-\n-static inline void\n-set_asym_session_private_data(struct rte_cryptodev_asym_session *sess,\n-\t\tuint8_t driver_id, void *private_data)\n+get_asym_session_private_data(struct rte_cryptodev_asym_session *sess)\n {\n-\tsess->sess_private_data[driver_id] = private_data;\n+\treturn sess->sess_private_data;\n }\n \n #endif /* _CRYPTODEV_PMD_H_ */\ndiff --git a/lib/cryptodev/cryptodev_trace_points.c b/lib/cryptodev/cryptodev_trace_points.c\nindex 5d58951fd5..df166e2bc4 100644\n--- a/lib/cryptodev/cryptodev_trace_points.c\n+++ b/lib/cryptodev/cryptodev_trace_points.c\n@@ -24,6 +24,9 @@ RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_queue_pair_setup,\n RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_sym_session_pool_create,\n \tlib.cryptodev.sym.pool.create)\n \n+RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_asym_session_pool_create,\n+\tlib.cryptodev.asym.pool.create)\n+\n RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_sym_session_create,\n \tlib.cryptodev.sym.create)\n \ndiff --git a/lib/cryptodev/rte_cryptodev.c b/lib/cryptodev/rte_cryptodev.c\nindex a40536c5ea..ffd8733fcb 100644\n--- a/lib/cryptodev/rte_cryptodev.c\n+++ b/lib/cryptodev/rte_cryptodev.c\n@@ -195,7 +195,7 @@ const char *rte_crypto_asym_op_strings[] = {\n };\n \n /**\n- * The private data structure stored in the session mempool private data.\n+ * The private data structure stored in the sym session mempool private data.\n  */\n struct rte_cryptodev_sym_session_pool_private_data {\n \tuint16_t nb_drivers;\n@@ -204,6 +204,16 @@ struct rte_cryptodev_sym_session_pool_private_data {\n \t/**< session user data will be placed after sess_data */\n };\n \n+/**\n+ * The private data structure stored in the asym session mempool private data.\n+ */\n+struct rte_cryptodev_asym_session_pool_private_data {\n+\tuint8_t max_priv_session_sz;\n+\t/**< size of private session data used when creating mempool */\n+\tuint16_t user_data_sz;\n+\t/**< session user data will be placed after sess_private_data */\n+};\n+\n int\n rte_cryptodev_get_cipher_algo_enum(enum rte_crypto_cipher_algorithm *algo_enum,\n \t\tconst char *algo_string)\n@@ -1751,47 +1761,6 @@ rte_cryptodev_sym_session_init(uint8_t dev_id,\n \treturn 0;\n }\n \n-int\n-rte_cryptodev_asym_session_init(uint8_t dev_id,\n-\t\tstruct rte_cryptodev_asym_session *sess,\n-\t\tstruct rte_crypto_asym_xform *xforms,\n-\t\tstruct rte_mempool *mp)\n-{\n-\tstruct rte_cryptodev *dev;\n-\tuint8_t index;\n-\tint ret;\n-\n-\tif (!rte_cryptodev_is_valid_dev(dev_id)) {\n-\t\tCDEV_LOG_ERR(\"Invalid dev_id=%\" PRIu8, dev_id);\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tdev = rte_cryptodev_pmd_get_dev(dev_id);\n-\n-\tif (sess == NULL || xforms == NULL || dev == NULL)\n-\t\treturn -EINVAL;\n-\n-\tindex = dev->driver_id;\n-\n-\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->asym_session_configure,\n-\t\t\t\t-ENOTSUP);\n-\n-\tif (sess->sess_private_data[index] == NULL) {\n-\t\tret = dev->dev_ops->asym_session_configure(dev,\n-\t\t\t\t\t\t\txforms,\n-\t\t\t\t\t\t\tsess, mp);\n-\t\tif (ret < 0) {\n-\t\t\tCDEV_LOG_ERR(\n-\t\t\t\t\"dev_id %d failed to configure session details\",\n-\t\t\t\tdev_id);\n-\t\t\treturn ret;\n-\t\t}\n-\t}\n-\n-\trte_cryptodev_trace_asym_session_init(dev_id, sess, xforms, mp);\n-\treturn 0;\n-}\n-\n struct rte_mempool *\n rte_cryptodev_sym_session_pool_create(const char *name, uint32_t nb_elts,\n \tuint32_t elt_size, uint32_t cache_size, uint16_t user_data_size,\n@@ -1834,6 +1803,54 @@ rte_cryptodev_sym_session_pool_create(const char *name, uint32_t nb_elts,\n \treturn mp;\n }\n \n+struct rte_mempool *\n+rte_cryptodev_asym_session_pool_create(const char *name, uint32_t nb_elts,\n+\tuint32_t cache_size, uint16_t user_data_size, int socket_id)\n+{\n+\tstruct rte_mempool *mp;\n+\tstruct rte_cryptodev_asym_session_pool_private_data *pool_priv;\n+\tuint32_t obj_sz, obj_sz_aligned;\n+\tuint8_t dev_id, priv_sz, max_priv_sz = 0;\n+\n+\tfor (dev_id = 0; dev_id < RTE_CRYPTO_MAX_DEVS; dev_id++)\n+\t\tif (rte_cryptodev_is_valid_dev(dev_id)) {\n+\t\t\tpriv_sz = rte_cryptodev_asym_get_private_session_size(dev_id);\n+\t\t\tif (priv_sz > max_priv_sz)\n+\t\t\t\tmax_priv_sz = priv_sz;\n+\t\t}\n+\tif (max_priv_sz == 0) {\n+\t\tCDEV_LOG_INFO(\"Could not set max private session size\\n\");\n+\t\treturn NULL;\n+\t}\n+\n+\tobj_sz = rte_cryptodev_asym_get_header_session_size() + max_priv_sz +\n+\t\t\tuser_data_size;\n+\tobj_sz_aligned =  RTE_ALIGN_CEIL(obj_sz, RTE_CACHE_LINE_SIZE);\n+\n+\tmp = rte_mempool_create(name, nb_elts, obj_sz_aligned, cache_size,\n+\t\t\t(uint32_t)(sizeof(*pool_priv)),\n+\t\t\tNULL, NULL, NULL, NULL,\n+\t\t\tsocket_id, 0);\n+\tif (mp == NULL) {\n+\t\tCDEV_LOG_ERR(\"%s(name=%s) failed, rte_errno=%d\\n\",\n+\t\t\t__func__, name, rte_errno);\n+\t\treturn NULL;\n+\t}\n+\n+\tpool_priv = rte_mempool_get_priv(mp);\n+\tif (!pool_priv) {\n+\t\tCDEV_LOG_ERR(\"%s(name=%s) failed to get private data\\n\",\n+\t\t\t__func__, name);\n+\t\trte_mempool_free(mp);\n+\t\treturn NULL;\n+\t}\n+\tpool_priv->max_priv_session_sz = max_priv_sz;\n+\n+\trte_cryptodev_trace_asym_session_pool_create(name, nb_elts,\n+\t\tuser_data_size, cache_size, mp);\n+\treturn mp;\n+}\n+\n static unsigned int\n rte_cryptodev_sym_session_data_size(struct rte_cryptodev_sym_session *sess)\n {\n@@ -1895,19 +1912,43 @@ rte_cryptodev_sym_session_create(struct rte_mempool *mp)\n }\n \n struct rte_cryptodev_asym_session *\n-rte_cryptodev_asym_session_create(struct rte_mempool *mp)\n+rte_cryptodev_asym_session_create(struct rte_mempool *mp, uint8_t dev_id,\n+\t\tstruct rte_crypto_asym_xform *xforms)\n {\n \tstruct rte_cryptodev_asym_session *sess;\n-\tunsigned int session_size =\n+\tuint32_t session_priv_data_sz;\n+\tstruct rte_cryptodev_asym_session_pool_private_data *pool_priv;\n+\tunsigned int session_header_size =\n \t\t\trte_cryptodev_asym_get_header_session_size();\n+\tstruct rte_cryptodev *dev;\n+\tint ret;\n+\n+\tif (!rte_cryptodev_is_valid_dev(dev_id)) {\n+\t\tCDEV_LOG_ERR(\"Invalid dev_id=%\" PRIu8, dev_id);\n+\t\treturn NULL;\n+\t}\n+\tsession_priv_data_sz = rte_cryptodev_asym_get_private_session_size(\n+\t\t\tdev_id);\n+\tdev = rte_cryptodev_pmd_get_dev(dev_id);\n+\n+\tif (dev == NULL)\n+\t\treturn NULL;\n \n \tif (!mp) {\n \t\tCDEV_LOG_ERR(\"invalid mempool\\n\");\n \t\treturn NULL;\n \t}\n \n+\tpool_priv = rte_mempool_get_priv(mp);\n+\n+\tif (pool_priv->max_priv_session_sz < session_priv_data_sz) {\n+\t\tCDEV_LOG_DEBUG(\n+\t\t\t\"The private session data size used when creating the mempool is smaller than this device's private session data.\");\n+\t\treturn NULL;\n+\t}\n+\n \t/* Verify if provided mempool can hold elements big enough. */\n-\tif (mp->elt_size < session_size) {\n+\tif (mp->elt_size < session_header_size + session_priv_data_sz) {\n \t\tCDEV_LOG_ERR(\n \t\t\t\"mempool elements too small to hold session objects\");\n \t\treturn NULL;\n@@ -1919,10 +1960,28 @@ rte_cryptodev_asym_session_create(struct rte_mempool *mp)\n \t\treturn NULL;\n \t}\n \n+\tsess->driver_id = dev->driver_id;\n+\tsess->user_data_sz = pool_priv->user_data_sz;\n+\tsess->max_priv_session_sz = pool_priv->max_priv_session_sz;\n+\n \t/* Clear device session pointer.\n \t * Include the flag indicating presence of private data\n \t */\n-\tmemset(sess, 0, session_size);\n+\tmemset(sess->sess_private_data, 0, session_priv_data_sz + sess->user_data_sz);\n+\n+\tRTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->asym_session_configure, NULL);\n+\n+\tif (sess->sess_private_data[0] == 0) {\n+\t\tret = dev->dev_ops->asym_session_configure(dev,\n+\t\t\t\t\t\t\txforms,\n+\t\t\t\t\t\t\tsess, mp);\n+\t\tif (ret < 0) {\n+\t\t\tCDEV_LOG_ERR(\n+\t\t\t\t\"dev_id %d failed to configure session details\",\n+\t\t\t\tdev_id);\n+\t\t\treturn NULL;\n+\t\t}\n+\t}\n \n \trte_cryptodev_trace_asym_session_create(mp, sess);\n \treturn sess;\n@@ -2009,20 +2068,11 @@ rte_cryptodev_sym_session_free(struct rte_cryptodev_sym_session *sess)\n int\n rte_cryptodev_asym_session_free(struct rte_cryptodev_asym_session *sess)\n {\n-\tuint8_t i;\n-\tvoid *sess_priv;\n \tstruct rte_mempool *sess_mp;\n \n \tif (sess == NULL)\n \t\treturn -EINVAL;\n \n-\t/* Check that all device private data has been freed */\n-\tfor (i = 0; i < nb_drivers; i++) {\n-\t\tsess_priv = get_asym_session_private_data(sess, i);\n-\t\tif (sess_priv != NULL)\n-\t\t\treturn -EBUSY;\n-\t}\n-\n \t/* Return session to mempool */\n \tsess_mp = rte_mempool_from_obj(sess);\n \trte_mempool_put(sess_mp, sess);\n@@ -2061,12 +2111,7 @@ rte_cryptodev_sym_get_existing_header_session_size(\n unsigned int\n rte_cryptodev_asym_get_header_session_size(void)\n {\n-\t/*\n-\t * Header contains pointers to the private data\n-\t * of all registered drivers, and a flag which\n-\t * indicates presence of private data\n-\t */\n-\treturn ((sizeof(void *) * nb_drivers) + sizeof(uint8_t));\n+\treturn sizeof(struct rte_cryptodev_asym_session);\n }\n \n unsigned int\n@@ -2092,7 +2137,6 @@ unsigned int\n rte_cryptodev_asym_get_private_session_size(uint8_t dev_id)\n {\n \tstruct rte_cryptodev *dev;\n-\tunsigned int header_size = sizeof(void *) * nb_drivers;\n \tunsigned int priv_sess_size;\n \n \tif (!rte_cryptodev_is_valid_dev(dev_id))\n@@ -2104,11 +2148,8 @@ rte_cryptodev_asym_get_private_session_size(uint8_t dev_id)\n \t\treturn 0;\n \n \tpriv_sess_size = (*dev->dev_ops->asym_session_get_size)(dev);\n-\tif (priv_sess_size < header_size)\n-\t\treturn header_size;\n \n \treturn priv_sess_size;\n-\n }\n \n int\n@@ -2137,6 +2178,34 @@ rte_cryptodev_sym_session_get_user_data(\n \treturn (void *)(sess->sess_data + sess->nb_drivers);\n }\n \n+int\n+rte_cryptodev_asym_session_set_user_data(\n+\t\tstruct rte_cryptodev_asym_session *sess,\n+\t\tvoid *data, uint16_t size)\n+{\n+\tif (sess == NULL)\n+\t\treturn -EINVAL;\n+\n+\tif (sess->user_data_sz < size)\n+\t\treturn -ENOMEM;\n+\n+\trte_memcpy(sess->sess_private_data +\n+\t\t\tsess->max_priv_session_sz,\n+\t\t\tdata, size);\n+\treturn 0;\n+}\n+\n+void *\n+rte_cryptodev_asym_session_get_user_data(\n+\t\tstruct rte_cryptodev_asym_session *sess)\n+{\n+\tif (sess == NULL || sess->user_data_sz == 0)\n+\t\treturn NULL;\n+\n+\treturn (void *)(sess->sess_private_data +\n+\t\t\tsess->max_priv_session_sz);\n+}\n+\n static inline void\n sym_crypto_fill_status(struct rte_crypto_sym_vec *vec, int32_t errnum)\n {\ndiff --git a/lib/cryptodev/rte_cryptodev.h b/lib/cryptodev/rte_cryptodev.h\nindex 59ea5a54df..11a62bb555 100644\n--- a/lib/cryptodev/rte_cryptodev.h\n+++ b/lib/cryptodev/rte_cryptodev.h\n@@ -919,9 +919,15 @@ struct rte_cryptodev_sym_session {\n };\n \n /** Cryptodev asymmetric crypto session */\n-struct rte_cryptodev_asym_session {\n-\t__extension__ void *sess_private_data[0];\n-\t/**< Private asymmetric session material */\n+__extension__ struct rte_cryptodev_asym_session {\n+\tuint8_t driver_id;\n+\t/**< Session driver ID. */\n+\tuint8_t max_priv_session_sz;\n+\t/**< size of private session data used when creating mempool */\n+\tuint16_t user_data_sz;\n+\t/**< session user data will be placed after sess_data */\n+\tuint8_t padding[4];\n+\tuint8_t sess_private_data[0];\n };\n \n /**\n@@ -956,6 +962,31 @@ rte_cryptodev_sym_session_pool_create(const char *name, uint32_t nb_elts,\n \tuint32_t elt_size, uint32_t cache_size, uint16_t priv_size,\n \tint socket_id);\n \n+/**\n+ * Create an asymmetric session mempool.\n+ *\n+ * @param name\n+ *   The unique mempool name.\n+ * @param nb_elts\n+ *   The number of elements in the mempool.\n+ * @param cache_size\n+ *   The number of per-lcore cache elements\n+ * @param user_data_size\n+ *   The size of user data to be placed after session private data.\n+ * @param socket_id\n+ *   The *socket_id* argument is the socket identifier in the case of\n+ *   NUMA. The value can be *SOCKET_ID_ANY* if there is no NUMA\n+ *   constraint for the reserved zone.\n+ *\n+ * @return\n+ *  - On success return size of the session\n+ *  - On failure returns 0\n+ */\n+__rte_experimental\n+struct rte_mempool *\n+rte_cryptodev_asym_session_pool_create(const char *name, uint32_t nb_elts,\n+\tuint32_t cache_size, uint16_t user_data_size, int socket_id);\n+\n /**\n  * Create symmetric crypto session header (generic with no private data)\n  *\n@@ -973,13 +1004,17 @@ rte_cryptodev_sym_session_create(struct rte_mempool *mempool);\n  *\n  * @param   mempool    mempool to allocate asymmetric session\n  *                     objects from\n+ * @param   dev_id   ID of device that we want the session to be used on\n+ * @param   xforms   Asymmetric crypto transform operations to apply on flow\n+ *                   processed with this session\n  * @return\n  *  - On success return pointer to asym-session\n  *  - On failure returns NULL\n  */\n __rte_experimental\n struct rte_cryptodev_asym_session *\n-rte_cryptodev_asym_session_create(struct rte_mempool *mempool);\n+rte_cryptodev_asym_session_create(struct rte_mempool *mempool,\n+\t\tuint8_t dev_id, struct rte_crypto_asym_xform *xforms);\n \n /**\n  * Frees symmetric crypto session header, after checking that all\n@@ -1034,28 +1069,6 @@ rte_cryptodev_sym_session_init(uint8_t dev_id,\n \t\t\tstruct rte_crypto_sym_xform *xforms,\n \t\t\tstruct rte_mempool *mempool);\n \n-/**\n- * Initialize asymmetric session on a device with specific asymmetric xform\n- *\n- * @param   dev_id   ID of device that we want the session to be used on\n- * @param   sess     Session to be set up on a device\n- * @param   xforms   Asymmetric crypto transform operations to apply on flow\n- *                   processed with this session\n- * @param   mempool  Mempool to be used for internal allocation.\n- *\n- * @return\n- *  - On success, zero.\n- *  - -EINVAL if input parameters are invalid.\n- *  - -ENOTSUP if crypto device does not support the crypto transform.\n- *  - -ENOMEM if the private session could not be allocated.\n- */\n-__rte_experimental\n-int\n-rte_cryptodev_asym_session_init(uint8_t dev_id,\n-\t\t\tstruct rte_cryptodev_asym_session *sess,\n-\t\t\tstruct rte_crypto_asym_xform *xforms,\n-\t\t\tstruct rte_mempool *mempool);\n-\n /**\n  * Frees private data for the device id, based on its device type,\n  * returning it to its mempool. It is the application's responsibility\n@@ -1075,14 +1088,13 @@ rte_cryptodev_sym_session_clear(uint8_t dev_id,\n \t\t\tstruct rte_cryptodev_sym_session *sess);\n \n /**\n- * Frees resources held by asymmetric session during rte_cryptodev_session_init\n+ * Frees resources held by asymmetric session.\n  *\n  * @param   dev_id   ID of device that uses the asymmetric session.\n- * @param   sess     Asymmetric session setup on device using\n- *\t\t\t\t\t rte_cryptodev_session_init\n+ * @param   sess     Asymmetric session setup on device.\n  * @return\n  *  - 0 if successful.\n- *  - -EINVAL if device is invalid or session is NULL.\n+- *  - -EINVAL if device is invalid or session is NULL.\n  */\n __rte_experimental\n int\n@@ -1116,7 +1128,7 @@ rte_cryptodev_sym_get_existing_header_session_size(\n \t\tstruct rte_cryptodev_sym_session *sess);\n \n /**\n- * Get the size of the asymmetric session header, for all registered drivers.\n+ * Get the size of the asymmetric session header.\n  *\n  * @return\n  *   Size of the asymmetric header session.\n@@ -1218,6 +1230,39 @@ void *\n rte_cryptodev_sym_session_get_user_data(\n \t\t\t\t\tstruct rte_cryptodev_sym_session *sess);\n \n+/**\n+ * Store user data in an asymmetric session.\n+ *\n+ * @param\tsess\t\tSession pointer allocated by\n+ *\t\t\t\t*rte_cryptodev_asym_session_create*.\n+ * @param\tdata\t\tPointer to the user data.\n+ * @param\tsize\t\tSize of the user data.\n+ *\n+ * @return\n+ *  - On success, zero.\n+ *  - On failure, a negative value.\n+ */\n+__rte_experimental\n+int\n+rte_cryptodev_asym_session_set_user_data(\n+\t\tstruct rte_cryptodev_asym_session *sess,\n+\t\tvoid *data, uint16_t size);\n+\n+/**\n+ * Get user data stored in an asymmetric session.\n+ *\n+ * @param\tsess\t\tSession pointer allocated by\n+ *\t\t\t\t*rte_cryptodev_asym_session_create*.\n+ *\n+ * @return\n+ *  - On success return pointer to user data.\n+ *  - On failure returns NULL.\n+ */\n+__rte_experimental\n+void *\n+rte_cryptodev_asym_session_get_user_data(\n+\t\tstruct rte_cryptodev_asym_session *sess);\n+\n /**\n  * Perform actual crypto processing (encrypt/digest or auth/decrypt)\n  * on user provided data.\ndiff --git a/lib/cryptodev/rte_cryptodev_trace.h b/lib/cryptodev/rte_cryptodev_trace.h\nindex d1f4f069a3..a8ee8c901c 100644\n--- a/lib/cryptodev/rte_cryptodev_trace.h\n+++ b/lib/cryptodev/rte_cryptodev_trace.h\n@@ -83,6 +83,18 @@ RTE_TRACE_POINT(\n \trte_trace_point_emit_u16(sess->user_data_sz);\n )\n \n+RTE_TRACE_POINT(\n+\trte_cryptodev_trace_asym_session_pool_create,\n+\tRTE_TRACE_POINT_ARGS(const char *name, uint32_t nb_elts,\n+\t\tuint16_t user_data_size, uint32_t cache_size,\n+\t\tvoid *mempool),\n+\trte_trace_point_emit_string(name);\n+\trte_trace_point_emit_u32(nb_elts);\n+\trte_trace_point_emit_u16(user_data_size);\n+\trte_trace_point_emit_u32(cache_size);\n+\trte_trace_point_emit_ptr(mempool);\n+)\n+\n RTE_TRACE_POINT(\n \trte_cryptodev_trace_asym_session_create,\n \tRTE_TRACE_POINT_ARGS(void *mempool,\ndiff --git a/lib/cryptodev/version.map b/lib/cryptodev/version.map\nindex c50745fa8c..00b1c9ae35 100644\n--- a/lib/cryptodev/version.map\n+++ b/lib/cryptodev/version.map\n@@ -58,7 +58,6 @@ EXPERIMENTAL {\n \trte_cryptodev_asym_session_clear;\n \trte_cryptodev_asym_session_create;\n \trte_cryptodev_asym_session_free;\n-\trte_cryptodev_asym_session_init;\n \trte_cryptodev_asym_xform_capability_check_modlen;\n \trte_cryptodev_asym_xform_capability_check_optype;\n \trte_cryptodev_sym_cpu_crypto_process;\n@@ -104,6 +103,11 @@ EXPERIMENTAL {\n \trte_cryptodev_remove_deq_callback;\n \trte_cryptodev_remove_enq_callback;\n \n+\t# added 22.03\n+\trte_cryptodev_asym_session_pool_create;\n+\trte_cryptodev_asym_session_get_user_data;\n+\trte_cryptodev_asym_session_set_user_data;\n+\t__rte_cryptodev_trace_asym_session_pool_create;\n };\n \n INTERNAL {\n",
    "prefixes": []
}