From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 04B38A034F; Sat, 16 Oct 2021 15:21:13 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 819FB410DC; Sat, 16 Oct 2021 15:21:13 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id D7AB24067C for ; Sat, 16 Oct 2021 15:21:11 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10138"; a="228000854" X-IronPort-AV: E=Sophos;i="5.85,378,1624345200"; d="scan'208";a="228000854" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Oct 2021 06:21:10 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,378,1624345200"; d="scan'208";a="528682704" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by fmsmga008.fm.intel.com with ESMTP; 16 Oct 2021 06:21:10 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Sat, 16 Oct 2021 06:21:09 -0700 Received: from fmsmsx605.amr.corp.intel.com (10.18.126.85) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Sat, 16 Oct 2021 06:21:09 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx605.amr.corp.intel.com (10.18.126.85) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12 via Frontend Transport; Sat, 16 Oct 2021 06:21:09 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.107) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.12; Sat, 16 Oct 2021 06:21:09 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EgVF1/iLnT6GgVCqJ51jBv+moK7jiBDZ/X9R3qw3Z3fYBPZgfbsK6YHp9o4eOhpLJTvwYlRg71GBQyG9bzncUmFNSX20Gp59iQeDzgPPSE8pwOwIodVfZFXFkGQH4EzBmw9PBguqlAHf775XozagJsz8fcT5Rdo233IL975FO9Ql3cSoxYqcdA0908X/bCySBoakmjbItly8mmWl8bsQt/QCaV6Hz5xpPU0CmpM5H3XGOSKgNp7sJk8sn2FR1DtNDAPXR3S4qApHlnnnoqZ1qhYpchfI9DJsw48sklqn9ZLu35n6uXczeeyOfk48xONWFiE8Wd77EcubAdpkQ1/omA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=JGiFcyjuKqhNF/FHqkcGW0ZQbEevUTmbVRv0En2xGcY=; b=RKeL1lhG4rleqpDZnT/jZI5i7dtRt4U33UgFHb5vKPJ8xBFApdp6NDSc2b3puVtI7Qy+GlCmcuyT7JtlHc2ttT5ZkIhRitTKJIMI5l9rKoru7slh8n8gW06jELW+Z9wSPYLPD8q6XpSe4K0P1yIFA8LMkcXZy4hF7zAKvBndoDz82+fGvYDIjjESqdvhfi861EDmvGPJYOvlLD8kn1UvnkIT1LJS6hlBwDijAmFYzvffLan2gDdIe38gqh3PnQnRJ1pD7BhMrq3jyAGZe1U6o7e0AgwcdyVAUg4toZHudkzBJ6qVKm7g4MqF/j4tRbQ9Rva54KnK52dTaUS9zXfaTA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JGiFcyjuKqhNF/FHqkcGW0ZQbEevUTmbVRv0En2xGcY=; b=GiOTnTkym1ofW21tpX07fI2VVjaSgS22jUfNzdUOXWAPCdRrTDMTkEr7XSeAK9dXg+9KAcHqKdUTUPpCdlRjaUjsWSos+UfW2jYOBRxBnics79VUl4Om4nqEyIeK4xv4PX4pDranaSg7A7857qhdk+niW9l/NbkQXJwd+IOoncY= Received: from MW5PR11MB5809.namprd11.prod.outlook.com (2603:10b6:303:197::6) by MW3PR11MB4746.namprd11.prod.outlook.com (2603:10b6:303:5f::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4608.17; Sat, 16 Oct 2021 13:21:07 +0000 Received: from MW5PR11MB5809.namprd11.prod.outlook.com ([fe80::2c31:1470:3036:959b]) by MW5PR11MB5809.namprd11.prod.outlook.com ([fe80::2c31:1470:3036:959b%8]) with mapi id 15.20.4608.018; Sat, 16 Oct 2021 13:21:07 +0000 From: "Zhang, Roy Fan" To: Akhil Goyal , "dev@dpdk.org" CC: "thomas@monjalon.net" , "david.marchand@redhat.com" , "hemant.agrawal@nxp.com" , Anoob Joseph , "De Lara Guarch, Pablo" , "Trahe, Fiona" , "Doherty, Declan" , "matan@nvidia.com" , "g.singh@nxp.com" , "jianjay.zhou@huawei.com" , "asomalap@amd.com" , "ruifeng.wang@arm.com" , "Ananyev, Konstantin" , "Nicolau, Radu" , "ajit.khaparde@broadcom.com" , Nagadheeraj Rottela , Ankur Dwivedi , "Power, Ciara" , "Wang, Haiyue" , "jiawenwu@trustnetic.com" , "jianwang@trustnetic.com" Thread-Topic: [PATCH v2 0/7] crypto/security session framework rework Thread-Index: AQHXwGe76fTitYpJN0GlLW4tZSnTFKvSYb2AgABY9OCAABXEAIAACUiAgAFYU6CAACU7gIABRmVA Date: Sat, 16 Oct 2021 13:21:07 +0000 Message-ID: References: <20210930145014.2476799-1-gakhil@marvell.com> <20211013192222.1582631-1-gakhil@marvell.com> In-Reply-To: Accept-Language: zh-Hans-HK, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.6.200.16 dlp-reaction: no-action dlp-product: dlpe-windows authentication-results: marvell.com; dkim=none (message not signed) header.d=none;marvell.com; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: ba24ec37-5dd7-44ec-59ba-08d990a7d011 x-ms-traffictypediagnostic: MW3PR11MB4746: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: RNx3HKkd2z49hdqJvb7KIYi0p/5v/ddJLqGFbHvoxQqv3aqtwD24jUVg4LXcDcXdsVFDGVfd0Lq15+Bg4KeF8hGJwsdz1q5XNSZR4ifecLCoxx07i1Yu09cNIXyRZTk6f4OX8rAVIgo8hkWp2qD8KSDMxfbxceHgySCfUqVyOsDqiUu/p+0sX5AFqO3oqfObqH5YUuP/7A49pG4XDmKQHuzCfGgL+7BqQeQNz5TfPAWvvVUW+NPiCDqzMuLUb2OYEToYYC+mMCuFe60zyo4Dap1vp6aOmBTSrrGaCbQUkhp12hH0MYynwS0G1vAF0LKx6xMWv9ismvWkqjkEB/tGoTGA6IbhfcoCSGcHSLCIRCQZmbWX/q/S4nfWG7JP8tzFVoLbjAWvr8/quTcPJCmPNH43RhW2c7tUWXbZn9V8l2tJ+B+pM/izUs/szuVHpCnhRyGxyzzC7MhOHHz44co05bmEr5IoWTraPzUZwDrXkrDUKYeDW4K8egV4tvE+OMdtQnt0q4kw8JKkywhMYWWmdB2geR3LVDifJiM6EfCNhadmG+9zeqrCEGXxsixVkSMN7M91YXXEG5Hf4y5t+UXXjNCzTOJH+KW9/KuXUn7vXLl9glvVeaaDgssl5ammaOPw667skMpFt4HC95Pj+KyWFFs2WnZqjL4uuVTxUqCn1SQh/eQ0IL7Wm8uSMQsFEUUDJWJCf/qiUZW1xOyVF3yKlg== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MW5PR11MB5809.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(66556008)(38070700005)(64756008)(9686003)(66446008)(5660300002)(66476007)(66946007)(8936002)(6506007)(2906002)(33656002)(55016002)(82960400001)(86362001)(122000001)(15650500001)(30864003)(54906003)(38100700002)(83380400001)(110136005)(316002)(4326008)(52536014)(7696005)(508600001)(76116006)(26005)(8676002)(186003)(71200400001)(53546011)(7416002)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?Windows-1252?Q?q1QNZzeLzxlqkqvhDmYabCoyXqoOZyIgGDjO2+j46S3JzdEy5zzrawZQ?= =?Windows-1252?Q?RNwOIW6OwO85eAlcaUmrVXAHpGUnl3Kx9bvN6FG88elqBU02jAsKHP94?= =?Windows-1252?Q?k5huhsI5IQcZ4EEdKqQ09hq2ELgRyiAzqAoPBIOwfGUJAo0dqyFZ7q3K?= =?Windows-1252?Q?JNf0D12okko3Ryzto4Ke/3LsY8Vdg4/Cr7XTGUmEZ95tln7SKnqPoHt9?= =?Windows-1252?Q?qLEha3xciBmoYTDajJTO8s0PZBZ+oEPqWeHEWm0vouxtXGz7JgDNxYAr?= =?Windows-1252?Q?hlHudHtkeZ73kaGDWh1/ZQQz34DlFjeN2AgxBsHZsvcfT7cqX7kWIVUV?= =?Windows-1252?Q?IpIWL0sAV6wllN5JD58jjRRGYx4xibF871mNxnMe7Vnk87umfi8gfqf4?= =?Windows-1252?Q?56a7umjgExFO+S5myOPr5UAN7LOoYyp1UWfzSKuD9TCOq3JI+LTgojAC?= =?Windows-1252?Q?T8iO0fYQJS/QjOzJYWdz6W3g2crUFRXS0xYbTzsEbEvgHvIMsiy4sPVj?= =?Windows-1252?Q?TCqlZ63mFbup27cY8A+FFYQXglhJZn5aCmVLoK3lS0dk7V6yKLgITyfG?= =?Windows-1252?Q?E2bJzqsUBj1tHNJj2VD/G4n04ODT/8D6g7+BeQBSxWmInJtJT5mgDgAB?= =?Windows-1252?Q?Ahb9xlB9ettVLdVqisbpMA1N7ld5KucCt9jIWL+3e9XhNa7wnmRMxwKI?= =?Windows-1252?Q?e3IBdCctk30kWG4GJExK/t7bMb0YL5oztZvzILNcKNWgRLenpYszI18k?= =?Windows-1252?Q?TldRCyI7V6F4YESsCXk9n9di4zS4zndPvPgzPq+svKsMqGS4FACkqZed?= =?Windows-1252?Q?hiJ5KTKo6HMjgEx94RRjl+xKz9Le7lO1fOb7vL5wJiGBrUh8Me32LBnX?= =?Windows-1252?Q?tVqjKyw0w6rTIm15Zg17iQeY5AklegT16f4ZyuAheWW8hXvWtJXhw7/W?= =?Windows-1252?Q?WwZq68fz+rNtuKN7gO6IsSH2Fw1ul+fMYh2NwZuRO6vU2KcGRIAzsjqt?= =?Windows-1252?Q?MMw2AWXuRPNv9aYP6LsKtaYf31/TVkZcjCg1JPOGEijEuCA129kTu/pG?= =?Windows-1252?Q?TkWNOH2b2Esxg0+z6tyY2MlLXUuENdyDtonn/bLTlhcUupFts88xWabu?= =?Windows-1252?Q?16vJIIP9TCzApafGgCaA9hQqdK3b2OID/lGBKMWER+PJq02UjQrito9n?= =?Windows-1252?Q?a6mkEbil2m0BiXPXMfWLPrZHeqNc7RRCAro9kiYwuECK3j2eZU8n36k4?= =?Windows-1252?Q?W6eJw2ru2S2xyt3HTri8/qHbdV26dVydVO9TwGqWzT2zXWCuY2+3J1xt?= =?Windows-1252?Q?9HIhaIXLSTlsLd3AL/rDbXplte/+6uSLx3fcNevSVSsV+5bVhrgxerM8?= =?Windows-1252?Q?y0TeNc2Iz9kaUdyhOhh6u11t432bC65cRY8D7n95ajwPqGEoMSmclGzL?= Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW5PR11MB5809.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: ba24ec37-5dd7-44ec-59ba-08d990a7d011 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Oct 2021 13:21:07.0718 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: l2inVLR351rGtUl6eFzGMVPTyzw2jBWxdtzqY1Ly458qXUkKbzMsfXwZEqj2AR2UZuv7/nvRG9wVrs2wCUu9EA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW3PR11MB4746 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v2 0/7] crypto/security session framework rework X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Akhil, I didn't work on the asym problem. As stated in the email I could think of = the solution is to add new API to create asym session pool - or you may hav= e better solution.=20 BTW current test_cryptodev_asym.c the function testsuite_setup() creates th= e queue pair before creating the session pool, which will always made the q= ueue pair creation fail at the library layer - as the session pool cannot b= e empty. I don't think the session pool is mandatory when creating the queu= e pair as it is only needed for session-less operation even for sym crypto = - this change also doesn't make sense for the crypto PMDs who don't support= session-less operation. My sym fix is as same as your proposal. Here is my diff as ref for sym cryp= to seg fault fix. diff --git a/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c b/drivers/crypto/aesn= i_gcm/aesni_gcm_pmd.c index 330aad8157..990fc99763 100644 --- a/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c +++ b/drivers/crypto/aesni_gcm/aesni_gcm_pmd.c @@ -174,27 +174,25 @@ aesni_gcm_get_session(struct aesni_gcm_qp *qp, struct= rte_crypto_op *op) sym_op->session, cryptodev_driver_id); } else { - void *_sess; - void *_sess_private_data =3D NULL; + struct rte_cryptodev_sym_session *_sess =3D + rte_cryptodev_sym_session_create(qp->sess_mp); =20 - if (rte_mempool_get(qp->sess_mp, (void **)&_sess)) + if (_sess =3D=3D NULL) return NULL; =20 - if (rte_mempool_get(qp->sess_mp_priv, - (void **)&_sess_private_data)) - return NULL; + _sess->sess_data[cryptodev_driver_id].data =3D + (void *)((uint8_t *)_sess + + rte_cryptodev_sym_get_header_session_size() + + (cryptodev_driver_id * _sess->priv_sz)); =20 - sess =3D (struct aesni_gcm_session *)_sess_private_data; + sess =3D _sess->sess_data[cryptodev_driver_id].data; =20 if (unlikely(aesni_gcm_set_session_parameters(qp->ops, sess, sym_op->xform) !=3D 0)) { rte_mempool_put(qp->sess_mp, _sess); - rte_mempool_put(qp->sess_mp_priv, _sess_private_data); sess =3D NULL; } sym_op->session =3D (struct rte_cryptodev_sym_session *)_sess; - set_sym_session_private_data(sym_op->session, - cryptodev_driver_id, _sess_private_data); } =20 if (unlikely(sess =3D=3D NULL)) @@ -716,7 +714,6 @@ handle_completed_gcm_crypto_op(struct aesni_gcm_qp *qp, memset(op->sym->session, 0, rte_cryptodev_sym_get_existing_header_session_size( op->sym->session)); - rte_mempool_put(qp->sess_mp_priv, sess); rte_mempool_put(qp->sess_mp, op->sym->session); op->sym->session =3D NULL; } diff --git a/drivers/crypto/aesni_gcm/aesni_gcm_pmd_private.h b/drivers/cry= pto/aesni_gcm/aesni_gcm_pmd_private.h index 2763d1c492..cb37fd6b29 100644 --- a/drivers/crypto/aesni_gcm/aesni_gcm_pmd_private.h +++ b/drivers/crypto/aesni_gcm/aesni_gcm_pmd_private.h @@ -52,8 +52,6 @@ struct aesni_gcm_qp { /**< Queue pair statistics */ struct rte_mempool *sess_mp; /**< Session Mempool */ - struct rte_mempool *sess_mp_priv; - /**< Session Private Data Mempool */ uint16_t id; /**< Queue Pair Identifier */ char name[RTE_CRYPTODEV_NAME_MAX_LEN]; diff --git a/drivers/crypto/aesni_mb/aesni_mb_pmd_private.h b/drivers/crypt= o/aesni_mb/aesni_mb_pmd_private.h index 11e7bf5d18..2398fdf1b8 100644 --- a/drivers/crypto/aesni_mb/aesni_mb_pmd_private.h +++ b/drivers/crypto/aesni_mb/aesni_mb_pmd_private.h @@ -182,8 +182,6 @@ struct aesni_mb_qp { /**< Ring for placing operations ready for processing */ struct rte_mempool *sess_mp; /**< Session Mempool */ - struct rte_mempool *sess_mp_priv; - /**< Session Private Data Mempool */ struct rte_cryptodev_stats stats; /**< Queue pair statistics */ uint8_t digest_idx; diff --git a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c b/drivers/crypto/ae= sni_mb/rte_aesni_mb_pmd.c index e8da9ea9e1..d9e525c86f 100644 --- a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c +++ b/drivers/crypto/aesni_mb/rte_aesni_mb_pmd.c @@ -1024,27 +1024,25 @@ get_session(struct aesni_mb_qp *qp, struct rte_cryp= to_op *op) (op->sym->sec_session); #endif } else { - void *_sess =3D rte_cryptodev_sym_session_create(qp->sess_mp); - void *_sess_private_data =3D NULL; + struct rte_cryptodev_sym_session *_sess =3D + rte_cryptodev_sym_session_create(qp->sess_mp); =20 if (_sess =3D=3D NULL) return NULL; =20 - if (rte_mempool_get(qp->sess_mp_priv, - (void **)&_sess_private_data)) - return NULL; + _sess->sess_data[cryptodev_driver_id].data =3D + (void *)((uint8_t *)_sess + + rte_cryptodev_sym_get_header_session_size() + + (cryptodev_driver_id * _sess->priv_sz)); =20 - sess =3D (struct aesni_mb_session *)_sess_private_data; + sess =3D _sess->sess_data[cryptodev_driver_id].data; =20 if (unlikely(aesni_mb_set_session_parameters(qp->mb_mgr, sess, op->sym->xform) !=3D 0)) { rte_mempool_put(qp->sess_mp, _sess); - rte_mempool_put(qp->sess_mp_priv, _sess_private_data); sess =3D NULL; } - op->sym->session =3D (struct rte_cryptodev_sym_session *)_sess; - set_sym_session_private_data(op->sym->session, - cryptodev_driver_id, _sess_private_data); + op->sym->session =3D _sess; } =20 if (unlikely(sess =3D=3D NULL)) @@ -1688,7 +1686,6 @@ post_process_mb_job(struct aesni_mb_qp *qp, JOB_AES_H= MAC *job) memset(op->sym->session, 0, rte_cryptodev_sym_get_existing_header_session_size( op->sym->session)); - rte_mempool_put(qp->sess_mp_priv, sess); rte_mempool_put(qp->sess_mp, op->sym->session); op->sym->session =3D NULL; } diff --git a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd_ops.c b/drivers/crypt= o/aesni_mb/rte_aesni_mb_pmd_ops.c index b7a806d51c..b9c0f8b9ee 100644 --- a/drivers/crypto/aesni_mb/rte_aesni_mb_pmd_ops.c +++ b/drivers/crypto/aesni_mb/rte_aesni_mb_pmd_ops.c @@ -1072,8 +1072,16 @@ aesni_mb_pmd_sec_capa_get(void *device __rte_unused) return aesni_mb_pmd_security_cap; } =20 +/** Returns the size of the aesni multi-buffer session structure */ +static unsigned +aesni_mb_pmd_sec_session_get_size(void *dev __rte_unused) +{ + return sizeof(struct aesni_mb_session); +} + static struct rte_security_ops aesni_mb_pmd_sec_ops =3D { .session_create =3D aesni_mb_pmd_sec_sess_create, + .session_get_size =3D aesni_mb_pmd_sec_session_get_size, .session_update =3D NULL, .session_stats_get =3D NULL, .session_destroy =3D aesni_mb_pmd_sec_sess_destroy, diff --git a/drivers/crypto/kasumi/kasumi_pmd_private.h b/drivers/crypto/ka= sumi/kasumi_pmd_private.h index abedcd616d..fe0e78e516 100644 --- a/drivers/crypto/kasumi/kasumi_pmd_private.h +++ b/drivers/crypto/kasumi/kasumi_pmd_private.h @@ -38,8 +38,6 @@ struct kasumi_qp { /**< Ring for placing processed ops */ struct rte_mempool *sess_mp; /**< Session Mempool */ - struct rte_mempool *sess_mp_priv; - /**< Session Private Data Mempool */ struct rte_cryptodev_stats qp_stats; /**< Queue pair statistics */ uint8_t temp_digest[KASUMI_DIGEST_LENGTH]; diff --git a/drivers/crypto/kasumi/rte_kasumi_pmd.c b/drivers/crypto/kasumi= /rte_kasumi_pmd.c index d6f927417a..f130400152 100644 --- a/drivers/crypto/kasumi/rte_kasumi_pmd.c +++ b/drivers/crypto/kasumi/rte_kasumi_pmd.c @@ -139,27 +139,25 @@ kasumi_get_session(struct kasumi_qp *qp, struct rte_c= rypto_op *op) op->sym->session, cryptodev_driver_id); } else { - void *_sess =3D NULL; - void *_sess_private_data =3D NULL; + struct rte_cryptodev_sym_session *_sess =3D + rte_cryptodev_sym_session_create(qp->sess_mp); =20 - if (rte_mempool_get(qp->sess_mp, (void **)&_sess)) + if (_sess =3D=3D NULL) return NULL; =20 - if (rte_mempool_get(qp->sess_mp_priv, - (void **)&_sess_private_data)) - return NULL; + _sess->sess_data[cryptodev_driver_id].data =3D + (void *)((uint8_t *)_sess + + rte_cryptodev_sym_get_header_session_size() + + (cryptodev_driver_id * _sess->priv_sz)); =20 - sess =3D (struct kasumi_session *)_sess_private_data; + sess =3D _sess->sess_data[cryptodev_driver_id].data; =20 if (unlikely(kasumi_set_session_parameters(qp->mgr, sess, op->sym->xform) !=3D 0)) { rte_mempool_put(qp->sess_mp, _sess); - rte_mempool_put(qp->sess_mp_priv, _sess_private_data); sess =3D NULL; } op->sym->session =3D (struct rte_cryptodev_sym_session *)_sess; - set_sym_session_private_data(op->sym->session, - cryptodev_driver_id, _sess_private_data); } =20 if (unlikely(sess =3D=3D NULL)) @@ -327,7 +325,6 @@ process_ops(struct rte_crypto_op **ops, struct kasumi_s= ession *session, memset(ops[i]->sym->session, 0, rte_cryptodev_sym_get_existing_header_session_size( ops[i]->sym->session)); - rte_mempool_put(qp->sess_mp_priv, session); rte_mempool_put(qp->sess_mp, ops[i]->sym->session); ops[i]->sym->session =3D NULL; } diff --git a/drivers/crypto/qat/qat_sym_pmd.c b/drivers/crypto/qat/qat_sym_= pmd.c index efda921c05..a55fb4f342 100644 --- a/drivers/crypto/qat/qat_sym_pmd.c +++ b/drivers/crypto/qat/qat_sym_pmd.c @@ -305,6 +305,7 @@ qat_security_cap_get(void *device __rte_unused) static struct rte_security_ops security_qat_ops =3D { =20 .session_create =3D qat_security_session_create, + .session_get_size =3D qat_security_session_get_private_size, .session_update =3D NULL, .session_stats_get =3D NULL, .session_destroy =3D qat_security_session_destroy, diff --git a/drivers/crypto/qat/qat_sym_session.c b/drivers/crypto/qat/qat_= sym_session.c index ef92f22c1a..4066230155 100644 --- a/drivers/crypto/qat/qat_sym_session.c +++ b/drivers/crypto/qat/qat_sym_session.c @@ -2298,3 +2298,10 @@ qat_security_session_destroy(void *dev __rte_unused,= void *sess_priv) return 0; } #endif + +unsigned int +qat_security_session_get_private_size(void *dev __rte_unused) +{ + return RTE_ALIGN_CEIL(sizeof(struct qat_sym_session), 8); +} + diff --git a/drivers/crypto/qat/qat_sym_session.h b/drivers/crypto/qat/qat_= sym_session.h index 4b7de4c9e7..a02ba01adf 100644 --- a/drivers/crypto/qat/qat_sym_session.h +++ b/drivers/crypto/qat/qat_sym_session.h @@ -169,6 +169,9 @@ qat_security_session_create(void *dev, struct rte_secur= ity_session_conf *conf, void *sess, rte_iova_t sess_iova); int qat_security_session_destroy(void *dev, void *sess); + +unsigned int +qat_security_session_get_private_size(void *dev); #endif =20 #endif /* _QAT_SYM_SESSION_H_ */ diff --git a/drivers/crypto/snow3g/rte_snow3g_pmd.c b/drivers/crypto/snow3g= /rte_snow3g_pmd.c index 8284ac0b66..02e65393e3 100644 --- a/drivers/crypto/snow3g/rte_snow3g_pmd.c +++ b/drivers/crypto/snow3g/rte_snow3g_pmd.c @@ -149,27 +149,26 @@ snow3g_get_session(struct snow3g_qp *qp, struct rte_c= rypto_op *op) op->sym->session, cryptodev_driver_id); } else { - void *_sess =3D NULL; - void *_sess_private_data =3D NULL; + struct rte_cryptodev_sym_session *_sess =3D + rte_cryptodev_sym_session_create(qp->sess_mp); =20 - if (rte_mempool_get(qp->sess_mp, (void **)&_sess)) + if (_sess =3D=3D NULL) return NULL; =20 - if (rte_mempool_get(qp->sess_mp_priv, - (void **)&_sess_private_data)) - return NULL; + _sess->sess_data[cryptodev_driver_id].data =3D + (void *)((uint8_t *)_sess + + rte_cryptodev_sym_get_header_session_size() + + (cryptodev_driver_id * _sess->priv_sz)); + + sess =3D _sess->sess_data[cryptodev_driver_id].data; =20 - sess =3D (struct snow3g_session *)_sess_private_data; =20 if (unlikely(snow3g_set_session_parameters(qp->mgr, sess, op->sym->xform) !=3D 0)) { rte_mempool_put(qp->sess_mp, _sess); - rte_mempool_put(qp->sess_mp_priv, _sess_private_data); sess =3D NULL; } op->sym->session =3D (struct rte_cryptodev_sym_session *)_sess; - set_sym_session_private_data(op->sym->session, - cryptodev_driver_id, _sess_private_data); } =20 if (unlikely(sess =3D=3D NULL)) @@ -352,7 +351,6 @@ process_ops(struct rte_crypto_op **ops, struct snow3g_s= ession *session, memset(ops[i]->sym->session, 0, rte_cryptodev_sym_get_existing_header_session_size( ops[i]->sym->session)); - rte_mempool_put(qp->sess_mp_priv, session); rte_mempool_put(qp->sess_mp, ops[i]->sym->session); ops[i]->sym->session =3D NULL; } diff --git a/drivers/crypto/snow3g/snow3g_pmd_private.h b/drivers/crypto/sn= ow3g/snow3g_pmd_private.h index 23cf078a9c..96897d4651 100644 --- a/drivers/crypto/snow3g/snow3g_pmd_private.h +++ b/drivers/crypto/snow3g/snow3g_pmd_private.h @@ -39,8 +39,6 @@ struct snow3g_qp { /**< Ring for placing processed ops */ struct rte_mempool *sess_mp; /**< Session Mempool */ - struct rte_mempool *sess_mp_priv; - /**< Session Private Data Mempool */ struct rte_cryptodev_stats qp_stats; /**< Queue pair statistics */ uint8_t temp_digest[SNOW3G_DIGEST_LENGTH]; diff --git a/drivers/crypto/zuc/rte_zuc_pmd.c b/drivers/crypto/zuc/rte_zuc_= pmd.c index d4b343a7af..2ac333fc35 100644 --- a/drivers/crypto/zuc/rte_zuc_pmd.c +++ b/drivers/crypto/zuc/rte_zuc_pmd.c @@ -138,27 +138,25 @@ zuc_get_session(struct zuc_qp *qp, struct rte_crypto_= op *op) op->sym->session, cryptodev_driver_id); } else { - void *_sess =3D NULL; - void *_sess_private_data =3D NULL; + struct rte_cryptodev_sym_session *_sess =3D + rte_cryptodev_sym_session_create(qp->sess_mp); =20 - if (rte_mempool_get(qp->sess_mp, (void **)&_sess)) + if (_sess =3D=3D NULL) return NULL; =20 - if (rte_mempool_get(qp->sess_mp_priv, - (void **)&_sess_private_data)) - return NULL; + _sess->sess_data[cryptodev_driver_id].data =3D + (void *)((uint8_t *)_sess + + rte_cryptodev_sym_get_header_session_size() + + (cryptodev_driver_id * _sess->priv_sz)); =20 - sess =3D (struct zuc_session *)_sess_private_data; + sess =3D _sess->sess_data[cryptodev_driver_id].data; =20 if (unlikely(zuc_set_session_parameters(sess, op->sym->xform) !=3D 0)) { rte_mempool_put(qp->sess_mp, _sess); - rte_mempool_put(qp->sess_mp_priv, _sess_private_data); sess =3D NULL; } op->sym->session =3D (struct rte_cryptodev_sym_session *)_sess; - set_sym_session_private_data(op->sym->session, - cryptodev_driver_id, _sess_private_data); } =20 if (unlikely(sess =3D=3D NULL)) @@ -341,7 +339,6 @@ process_ops(struct rte_crypto_op **ops, enum zuc_operat= ion op_type, memset(ops[i]->sym->session, 0, rte_cryptodev_sym_get_existing_header_session_size( ops[i]->sym->session)); - rte_mempool_put(qp->sess_mp_priv, sessions[i]); rte_mempool_put(qp->sess_mp, ops[i]->sym->session); ops[i]->sym->session =3D NULL; } diff --git a/drivers/crypto/zuc/zuc_pmd_private.h b/drivers/crypto/zuc/zuc_= pmd_private.h index d8684891ee..23cd9dc458 100644 --- a/drivers/crypto/zuc/zuc_pmd_private.h +++ b/drivers/crypto/zuc/zuc_pmd_private.h @@ -38,8 +38,6 @@ struct zuc_qp { /**< Ring for placing processed ops */ struct rte_mempool *sess_mp; /**< Session Mempool */ - struct rte_mempool *sess_mp_priv; - /**< Session Private Data Mempool */ struct rte_cryptodev_stats qp_stats; /**< Queue pair statistics */ uint8_t temp_digest[ZUC_DIGEST_LENGTH]; regards, Fan > -----Original Message----- > From: Akhil Goyal > Sent: Friday, October 15, 2021 6:43 PM > To: Zhang, Roy Fan ; dev@dpdk.org > Cc: thomas@monjalon.net; david.marchand@redhat.com; > hemant.agrawal@nxp.com; Anoob Joseph ; De Lara > Guarch, Pablo ; Trahe, Fiona > ; Doherty, Declan ; > matan@nvidia.com; g.singh@nxp.com; jianjay.zhou@huawei.com; > asomalap@amd.com; ruifeng.wang@arm.com; Ananyev, Konstantin > ; Nicolau, Radu ; > ajit.khaparde@broadcom.com; Nagadheeraj Rottela > ; Ankur Dwivedi ; > Power, Ciara ; Wang, Haiyue > ; jiawenwu@trustnetic.com; > jianwang@trustnetic.com > Subject: RE: [PATCH v2 0/7] crypto/security session framework rework >=20 > > Hi Akhil, > > > > I tried to fix the problems of seg faults. > > The seg-faults are gone now but all asym tests are failing too. > > The reason is the rte_cryptodev_queue_pair_setup() checks the session > > mempool same for sym and asym. > > Since we don't have a rte_cryptodev_asym_session_pool_create() the > > session mempool created by > > test_cryptodev_asym.c with rte_mempool_create() will fail the mempool > > check when setting up the queue pair. > > > > If you think my fix may be useful (although not resolving asym issue) I= can > > send it. > > > Is it a different fix than what I proposed below? If yes, you can send th= e diff. > I already made the below changes for all the PMDs. > I will try to fix the asym issue, but I suppose it can be dealt in the ap= p > Which can be fixed separately in RC2. >=20 > Also, found the root cause of multi process issue, working on making the > patches. > Will send v3 soon with all 3 issues(docsis/mp/sessless) fixed atleast. > For Asym, may send a separate patch. >=20 > > > Hi Fan, > > > Check for below QAT fix also > > > > > > > > > > Unfortunately the patches still cause seg-fault at QAT and SW PMD= s. > > > > > > > > > > - for qat it fails at rte_security_ops->session_size_get not > implemented. > > > And for this one > > > diff --git a/drivers/crypto/qat/qat_sym_pmd.c > > > b/drivers/crypto/qat/qat_sym_pmd.c > > > index efda921c05..96cd9d2eee 100644 > > > --- a/drivers/crypto/qat/qat_sym_pmd.c > > > +++ b/drivers/crypto/qat/qat_sym_pmd.c > > > @@ -306,6 +306,7 @@ static struct rte_security_ops security_qat_ops = =3D { > > > > > > .session_create =3D qat_security_session_create, > > > .session_update =3D NULL, > > > + .session_get_size =3D qat_security_session_get_size, > > > .session_stats_get =3D NULL, > > > .session_destroy =3D qat_security_session_destroy, > > > .set_pkt_metadata =3D NULL, > > > diff --git a/drivers/crypto/qat/qat_sym_session.c > > > b/drivers/crypto/qat/qat_sym_session.c > > > index ef92f22c1a..41b5542343 100644 > > > --- a/drivers/crypto/qat/qat_sym_session.c > > > +++ b/drivers/crypto/qat/qat_sym_session.c > > > @@ -2297,4 +2297,10 @@ qat_security_session_destroy(void *dev > > > __rte_unused, void *sess_priv) > > > } > > > return 0; > > > } > > > + > > > +static unsigned int > > > +qat_security_session_get_size(void *device __rte_unused) > > > +{ > > > + return sizeof(struct qat_sym_session); > > > +} > > > #endif > > > > > > > > - for sw pmds the queue pair's session private mempools are not s= et. > > > > > > > > > Can you check if below change works for Kasumi. I will replicate fo= r > > others. > > > > > > > > diff --git a/drivers/crypto/kasumi/kasumi_pmd_private.h > > > > b/drivers/crypto/kasumi/kasumi_pmd_private.h > > > > index abedcd616d..fe0e78e516 100644 > > > > --- a/drivers/crypto/kasumi/kasumi_pmd_private.h > > > > +++ b/drivers/crypto/kasumi/kasumi_pmd_private.h > > > > @@ -38,8 +38,6 @@ struct kasumi_qp { > > > > /**< Ring for placing processed ops */ > > > > struct rte_mempool *sess_mp; > > > > /**< Session Mempool */ > > > > - struct rte_mempool *sess_mp_priv; > > > > - /**< Session Private Data Mempool */ > > > > struct rte_cryptodev_stats qp_stats; > > > > /**< Queue pair statistics */ > > > > uint8_t temp_digest[KASUMI_DIGEST_LENGTH]; > > > > diff --git a/drivers/crypto/kasumi/rte_kasumi_pmd.c > > > > b/drivers/crypto/kasumi/rte_kasumi_pmd.c > > > > index d6f927417a..1fc59c8b8a 100644 > > > > --- a/drivers/crypto/kasumi/rte_kasumi_pmd.c > > > > +++ b/drivers/crypto/kasumi/rte_kasumi_pmd.c > > > > @@ -139,27 +139,24 @@ kasumi_get_session(struct kasumi_qp *qp, > > struct > > > > rte_crypto_op *op) > > > > op->sym->session, > > > > cryptodev_driver_id); > > > > } else { > > > > - void *_sess =3D NULL; > > > > - void *_sess_private_data =3D NULL; > > > > + struct rte_cryptodev_sym_session *_sess =3D NULL; > > > > > > > > - if (rte_mempool_get(qp->sess_mp, (void **)&_sess)) > > > > + /* Create temporary session */ > > > > + _sess =3D rte_cryptodev_sym_session_create(qp->sess= _mp); > > > > + if (_sess =3D=3D NULL) > > > > return NULL; > > > > > > > > - if (rte_mempool_get(qp->sess_mp_priv, > > > > - (void **)&_sess_private_data)) > > > > - return NULL; > > > > - > > > > - sess =3D (struct kasumi_session *)_sess_private_dat= a; > > > > - > > > > + _sess->sess_data[cryptodev_driver_id].data =3D > > > > + (void *)((uint8_t *)_sess + > > > > + rte_cryptodev_sym_get_header_sessio= n_size() + > > > > + (cryptodev_driver_id * _sess->priv_= sz)); > > > > + sess =3D _sess->sess_data[cryptodev_driver_id].data= ; > > > > if (unlikely(kasumi_set_session_parameters(qp->mgr,= sess, > > > > op->sym->xform) !=3D 0)) { > > > > rte_mempool_put(qp->sess_mp, _sess); > > > > - rte_mempool_put(qp->sess_mp_priv, > _sess_private_data); > > > > sess =3D NULL; > > > > } > > > > op->sym->session =3D (struct rte_cryptodev_sym_sess= ion > *)_sess; > > > > - set_sym_session_private_data(op->sym->session, > > > > - cryptodev_driver_id, _sess_private_= data); > > > > } > > > > > > > > if (unlikely(sess =3D=3D NULL)) > > > > @@ -327,7 +324,6 @@ process_ops(struct rte_crypto_op **ops, struct > > > > kasumi_session *session, > > > > memset(ops[i]->sym->session, 0, > > > > rte_cryptodev_sym_get_existing_header_sessi= on_size( > > > > ops[i]->sym->session)); > > > > - rte_mempool_put(qp->sess_mp_priv, session); > > > > rte_mempool_put(qp->sess_mp, ops[i]->sym->s= ession); > > > > ops[i]->sym->session =3D NULL; > > > > }