From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by dpdk.org (Postfix) with ESMTP id 7F7E84C8D for ; Tue, 30 Apr 2019 10:40:29 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x3U8Klsp014381; Tue, 30 Apr 2019 01:40:28 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pfpt0818; bh=BXLILmywR2U6RCn2X8tctle6/fiBHmo7XaScwRj3D3M=; b=Fu2LYP5hPc8Lw1fP289AggrgEL/GMJRILMAHGUkwYzk1KPCkCNqN/nO9EtqQBXRt1pSg w+06HbVljepqAStLbOoBp+M84z7qLVmgJAtjpM0+nalNQSZ9EIvVs4Y2w6+jr2T4BR6z 8FeR/fpAQ3jbvXz1vjDiMH8FtgXW0w9MAjsbL8B0FX46qRH2k0BDqVoPdVK+MRorWvaw GnhGv2jTt6vVKjc8Trh3HP78G8iO2LARyM55JQd0bel1wYQk6mmsWCMxiMyS11RjQOku GNeOoa+xXr+IVdHvYiilusTMlpoWnrLORpvj2BRaVaMo/jWMeuxkJrrUqV6zvlvHe1Z0 rg== Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0a-0016f401.pphosted.com with ESMTP id 2s6jbcr4dc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Tue, 30 Apr 2019 01:40:28 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Tue, 30 Apr 2019 01:40:27 -0700 Received: from NAM04-BN3-obe.outbound.protection.outlook.com (104.47.46.58) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1367.3 via Frontend Transport; Tue, 30 Apr 2019 01:40:27 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BXLILmywR2U6RCn2X8tctle6/fiBHmo7XaScwRj3D3M=; b=dQExBmsbyzOfT/diMGskbpRVkaEvkGKZsA9OmPFLWSnLa+YjEzi+oYOwWbu6wd8rcYFU19nbD/+3p+Mw7UlOUTtkMdZdfRnVLxRFl3T1Zh7b45tGg6sOlTPXrGel2rtB8WH5c1D7aqD55slYUCq+jbCR+14n2uVsxxgOaKSbjB8= Received: from MN2PR18MB2877.namprd18.prod.outlook.com (20.179.20.218) by MN2PR18MB3424.namprd18.prod.outlook.com (10.255.239.13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1835.15; Tue, 30 Apr 2019 08:40:22 +0000 Received: from MN2PR18MB2877.namprd18.prod.outlook.com ([fe80::8c8d:3cce:d106:bf62]) by MN2PR18MB2877.namprd18.prod.outlook.com ([fe80::8c8d:3cce:d106:bf62%7]) with mapi id 15.20.1835.010; Tue, 30 Apr 2019 08:40:22 +0000 From: Anoob Joseph To: Akhil Goyal , Pablo de Lara CC: Jerin Jacob Kollanukkaran , "Narayana Prasad Raju Athreya" , Shally Verma , "dev@dpdk.org" Thread-Topic: [EXT] [PATCH v2] crypto/octeontx: use distinct metabuf pool for each queue Thread-Index: AQHU9aZ4XsJwJGAlTU6GvUSuZbRmsqZUWiuAgAAaenA= Date: Tue, 30 Apr 2019 08:40:22 +0000 Message-ID: References: <20190418032953.2102-1-anoobj@marvell.com> <20190418052029.2784-1-anoobj@marvell.com> In-Reply-To: Accept-Language: en-IN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [115.113.156.2] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: dcc3f2e5-9da1-43e6-9c24-08d6cd477c06 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(2017052603328)(7193020); SRVR:MN2PR18MB3424; x-ms-traffictypediagnostic: MN2PR18MB3424: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:159; x-forefront-prvs: 00235A1EEF x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(346002)(136003)(366004)(376002)(39850400004)(396003)(189003)(199004)(13464003)(14454004)(7736002)(26005)(305945005)(14444005)(256004)(53936002)(55236004)(486006)(53546011)(102836004)(71190400001)(186003)(6506007)(2906002)(71200400001)(446003)(11346002)(4326008)(74316002)(478600001)(6246003)(53946003)(476003)(25786009)(76176011)(316002)(97736004)(81156014)(229853002)(5660300002)(66066001)(33656002)(6436002)(81166006)(8676002)(7696005)(3846002)(66446008)(6116002)(52536014)(66946007)(86362001)(110136005)(64756008)(76116006)(66476007)(54906003)(66556008)(73956011)(99286004)(8936002)(30864003)(9686003)(55016002)(68736007)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:MN2PR18MB3424; H:MN2PR18MB2877.namprd18.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: marvell.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: UtfGpE4Tr8WT3117iq0xiKFg8S1gZPmpdGpxPfZh6WZblRE8uqVQZglIvvPa1FlODE6xkOT7eX0nxbCflP8LZSsIIokME04BN+2XCpnuC/oo6QfDv6+cy3uPjJF5bV26MP908bHJ9KjwA+ZXEq7+CMoBf7rCaZIXvOIdnKo8+buliZzy2BGwnO1qwd0Cus6Z/WyJhBZAHh7qhOLzxmH3+KU6NY3Hufz1OakAhKfRCq5aAzdvrMbULYpXrKMsQOnxKyrLS8ymH9CDWnqTMKqkiJbMohsucPRbG19rQNnhClTr6CfMfqciS1iCYiq1J2aqve5Kz5CLXsFaCP/Jy58+XWJQOjE3d0lQXBaexdUEfegS6enUd5jp5XSZd7D1qO8npczGplhA1iX+ra9g93WI0Nyv3Sgyzs3EKnD3McOGoKE= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: dcc3f2e5-9da1-43e6-9c24-08d6cd477c06 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Apr 2019 08:40:22.5232 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR18MB3424 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2019-04-30_03:, , signatures=0 Subject: Re: [dpdk-dev] [EXT] [PATCH v2] crypto/octeontx: use distinct metabuf pool for each queue X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Apr 2019 08:40:30 -0000 Hi Akhil, This is a fix and I would like this to be part of 19.05 release. Hope you c= an apply this before RC4. Thanks, Anoob > -----Original Message----- > From: Akhil Goyal > Sent: Tuesday, April 30, 2019 12:33 PM > To: Anoob Joseph ; Pablo de Lara > > Cc: Jerin Jacob Kollanukkaran ; Narayana Prasad Raju > Athreya ; Shally Verma ; > dev@dpdk.org > Subject: RE: [EXT] [PATCH v2] crypto/octeontx: use distinct metabuf pool = for > each queue >=20 > Hi Anoob, >=20 > I believe this patch is for 19.08 release. This patch is not acked and we= are > about to close the RC4. >=20 > -Akhil >=20 > > > > > > The metabuf pool is shared across all queue pairs belonging to the > > PMD. In order to prevent one queue pair from starving another, use a > > distinct mempool for each queue pair. > > > > Fixes: 273487f7b381 ("crypto/octeontx: add global resource init") > > > > Signed-off-by: Anoob Joseph > > --- > > v2: > > * Mail server converted v1 patch file to DOS while sending. This caused > > checkpatch to report errors. Addressed this. > > > > drivers/common/cpt/cpt_common.h | 10 ++- > > drivers/common/cpt/cpt_ucode.h | 24 +++-- > > drivers/crypto/octeontx/otx_cryptodev.c | 3 - > > drivers/crypto/octeontx/otx_cryptodev_hw_access.c | 105 > > ++++++++++++++++++++-- > > drivers/crypto/octeontx/otx_cryptodev_hw_access.h | 7 +- > > drivers/crypto/octeontx/otx_cryptodev_ops.c | 98 ++------------= ------ > > drivers/crypto/octeontx/otx_cryptodev_ops.h | 3 - > > 7 files changed, 127 insertions(+), 123 deletions(-) > > > > diff --git a/drivers/common/cpt/cpt_common.h > > b/drivers/common/cpt/cpt_common.h index ceb32f2..32f23ac 100644 > > --- a/drivers/common/cpt/cpt_common.h > > +++ b/drivers/common/cpt/cpt_common.h > > @@ -5,6 +5,8 @@ > > #ifndef _CPT_COMMON_H_ > > #define _CPT_COMMON_H_ > > > > +#include > > + > > /* > > * This file defines common macros and structs > > */ > > @@ -38,10 +40,10 @@ > > > > #define MOD_INC(i, l) ((i) =3D=3D (l - 1) ? (i) =3D 0 : (i)++) > > > > -struct cptvf_meta_info { > > - void *cptvf_meta_pool; > > - int cptvf_op_mlen; > > - int cptvf_op_sb_mlen; > > +struct cpt_qp_meta_info { > > + struct rte_mempool *pool; > > + int sg_mlen; > > + int lb_mlen; > > }; > > > > struct rid { > > diff --git a/drivers/common/cpt/cpt_ucode.h > > b/drivers/common/cpt/cpt_ucode.h index 239c5df..f21352e 100644 > > --- a/drivers/common/cpt/cpt_ucode.h > > +++ b/drivers/common/cpt/cpt_ucode.h > > @@ -3147,7 +3147,7 @@ prepare_iov_from_pkt_inplace(struct rte_mbuf > > *pkt, static __rte_always_inline int fill_fc_params(struct > > rte_crypto_op *cop, > > struct cpt_sess_misc *sess_misc, > > - struct cptvf_meta_info *cpt_m_info, > > + struct cpt_qp_meta_info *m_info, > > void **mdata_ptr, > > void **prep_req) > > { > > @@ -3365,15 +3365,11 @@ fill_fc_params(struct rte_crypto_op *cop, > > } > > > > if (likely(flags & SINGLE_BUF_HEADTAILROOM)) > > - mdata =3D alloc_op_meta(m_src, > > - &fc_params.meta_buf, > > - cpt_m_info->cptvf_op_sb_mlen, > > - cpt_m_info->cptvf_meta_pool); > > + mdata =3D alloc_op_meta(m_src, &fc_params.meta_buf, > > + m_info->lb_mlen, m_info->pool); > > else > > - mdata =3D alloc_op_meta(NULL, > > - &fc_params.meta_buf, > > - cpt_m_info->cptvf_op_mlen, > > - cpt_m_info->cptvf_meta_pool); > > + mdata =3D alloc_op_meta(NULL, &fc_params.meta_buf, > > + m_info->sg_mlen, m_info->pool); > > > > if (unlikely(mdata =3D=3D NULL)) { > > CPT_LOG_DP_ERR("Error allocating meta buffer for > > request"); @@ -3410,7 +3406,7 @@ fill_fc_params(struct rte_crypto_op > *cop, > > return 0; > > > > free_mdata_and_exit: > > - free_op_meta(mdata, cpt_m_info->cptvf_meta_pool); > > + free_op_meta(mdata, m_info->pool); > > err_exit: > > return ret; > > } > > @@ -3521,7 +3517,7 @@ find_kasumif9_direction_and_length(uint8_t > *src, > > static __rte_always_inline int fill_digest_params(struct > > rte_crypto_op *cop, > > struct cpt_sess_misc *sess, > > - struct cptvf_meta_info *cpt_m_info, > > + struct cpt_qp_meta_info *m_info, > > void **mdata_ptr, > > void **prep_req) > > { > > @@ -3547,8 +3543,8 @@ fill_digest_params(struct rte_crypto_op *cop, > > m_src =3D sym_op->m_src; > > > > /* For just digest lets force mempool alloc */ > > - mdata =3D alloc_op_meta(NULL, ¶ms.meta_buf, cpt_m_info- > > >cptvf_op_mlen, > > - cpt_m_info->cptvf_meta_pool); > > + mdata =3D alloc_op_meta(NULL, ¶ms.meta_buf, m_info->sg_mlen= , > > + m_info->pool); > > if (mdata =3D=3D NULL) { > > ret =3D -ENOMEM; > > goto err_exit; > > @@ -3683,7 +3679,7 @@ fill_digest_params(struct rte_crypto_op *cop, > > return 0; > > > > free_mdata_and_exit: > > - free_op_meta(mdata, cpt_m_info->cptvf_meta_pool); > > + free_op_meta(mdata, m_info->pool); > > err_exit: > > return ret; > > } > > diff --git a/drivers/crypto/octeontx/otx_cryptodev.c > > b/drivers/crypto/octeontx/otx_cryptodev.c > > index b201e0a..fc64a5f 100644 > > --- a/drivers/crypto/octeontx/otx_cryptodev.c > > +++ b/drivers/crypto/octeontx/otx_cryptodev.c > > @@ -104,9 +104,6 @@ otx_cpt_pci_remove(struct rte_pci_device > *pci_dev) > > cryptodev->device =3D NULL; > > cryptodev->data =3D NULL; > > > > - /* free metapool memory */ > > - cleanup_global_resources(); > > - > > return 0; > > } > > > > diff --git a/drivers/crypto/octeontx/otx_cryptodev_hw_access.c > > b/drivers/crypto/octeontx/otx_cryptodev_hw_access.c > > index 18f2e6b..eba6293 100644 > > --- a/drivers/crypto/octeontx/otx_cryptodev_hw_access.c > > +++ b/drivers/crypto/octeontx/otx_cryptodev_hw_access.c > > @@ -7,7 +7,9 @@ > > > > #include > > #include > > +#include > > #include > > +#include > > #include > > #include > > > > @@ -15,8 +17,11 @@ > > #include "otx_cryptodev_mbox.h" > > > > #include "cpt_pmd_logs.h" > > +#include "cpt_pmd_ops_helper.h" > > #include "cpt_hw_types.h" > > > > +#define METABUF_POOL_CACHE_SIZE 512 > > + > > /* > > * VF HAL functions > > * Access its own BAR0/4 registers by passing VF number as 0. > > @@ -395,12 +400,90 @@ otx_cpt_deinit_device(void *dev) > > return 0; > > } > > > > +static int > > +otx_cpt_metabuf_mempool_create(const struct rte_cryptodev *dev, > > + struct cpt_instance *instance, uint8_t q= p_id, > > + int nb_elements) { > > + char mempool_name[RTE_MEMPOOL_NAMESIZE]; > > + int sg_mlen, lb_mlen, max_mlen, ret; > > + struct cpt_qp_meta_info *meta_info; > > + struct rte_mempool *pool; > > + > > + /* Get meta len for scatter gather mode */ > > + sg_mlen =3D cpt_pmd_ops_helper_get_mlen_sg_mode(); > > + > > + /* Extra 32B saved for future considerations */ > > + sg_mlen +=3D 4 * sizeof(uint64_t); > > + > > + /* Get meta len for linear buffer (direct) mode */ > > + lb_mlen =3D cpt_pmd_ops_helper_get_mlen_direct_mode(); > > + > > + /* Extra 32B saved for future considerations */ > > + lb_mlen +=3D 4 * sizeof(uint64_t); > > + > > + /* Check max requirement for meta buffer */ > > + max_mlen =3D RTE_MAX(lb_mlen, sg_mlen); > > + > > + /* Allocate mempool */ > > + > > + snprintf(mempool_name, RTE_MEMPOOL_NAMESIZE, > > "otx_cpt_mb_%u:%u", > > + dev->data->dev_id, qp_id); > > + > > + pool =3D rte_mempool_create_empty(mempool_name, nb_elements, > > max_mlen, > > + METABUF_POOL_CACHE_SIZE, 0, > > + rte_socket_id(), 0); > > + > > + if (pool =3D=3D NULL) { > > + CPT_LOG_ERR("Could not create mempool for metabuf"); > > + return rte_errno; > > + } > > + > > + ret =3D rte_mempool_set_ops_byname(pool, > > RTE_MBUF_DEFAULT_MEMPOOL_OPS, > > + NULL); > > + if (ret) { > > + CPT_LOG_ERR("Could not set mempool ops"); > > + goto mempool_free; > > + } > > + > > + ret =3D rte_mempool_populate_default(pool); > > + if (ret <=3D 0) { > > + CPT_LOG_ERR("Could not populate metabuf pool"); > > + goto mempool_free; > > + } > > + > > + meta_info =3D &instance->meta_info; > > + > > + meta_info->pool =3D pool; > > + meta_info->lb_mlen =3D lb_mlen; > > + meta_info->sg_mlen =3D sg_mlen; > > + > > + return 0; > > + > > +mempool_free: > > + rte_mempool_free(pool); > > + return ret; > > +} > > + > > +static void > > +otx_cpt_metabuf_mempool_destroy(struct cpt_instance *instance) { > > + struct cpt_qp_meta_info *meta_info =3D &instance->meta_info; > > + > > + rte_mempool_free(meta_info->pool); > > + > > + meta_info->pool =3D NULL; > > + meta_info->lb_mlen =3D 0; > > + meta_info->sg_mlen =3D 0; > > +} > > + > > int > > -otx_cpt_get_resource(void *dev, uint8_t group, struct cpt_instance > > **instance) > > +otx_cpt_get_resource(const struct rte_cryptodev *dev, uint8_t group, > > + struct cpt_instance **instance, uint16_t qp_id) > > { > > int ret =3D -ENOENT, len, qlen, i; > > int chunk_len, chunks, chunk_size; > > - struct cpt_vf *cptvf =3D (struct cpt_vf *)dev; > > + struct cpt_vf *cptvf =3D dev->data->dev_private; > > struct cpt_instance *cpt_instance; > > struct command_chunk *chunk_head =3D NULL, *chunk_prev =3D NULL= ; > > struct command_chunk *chunk =3D NULL; @@ -446,7 +529,7 @@ > > otx_cpt_get_resource(void *dev, uint8_t group, struct cpt_instance > > **instance) > > RTE_CACHE_LINE_SIZE); > > if (!rz) { > > ret =3D rte_errno; > > - goto cleanup; > > + goto exit; > > } > > > > mem =3D rz->addr; > > @@ -457,6 +540,12 @@ otx_cpt_get_resource(void *dev, uint8_t group, > > struct cpt_instance **instance) > > > > cpt_instance->rsvd =3D (uintptr_t)rz; > > > > + ret =3D otx_cpt_metabuf_mempool_create(dev, cpt_instance, qp_id= , > qlen); > > + if (ret) { > > + CPT_LOG_ERR("Could not create mempool for metabuf"); > > + goto memzone_free; > > + } > > + > > /* Pending queue setup */ > > cptvf->pqueue.rid_queue =3D (struct rid *)mem; > > cptvf->pqueue.enq_tail =3D 0; > > @@ -513,7 +602,7 @@ otx_cpt_get_resource(void *dev, uint8_t group, > > struct cpt_instance **instance) > > CPT_LOG_ERR("Failed to initialize CPT VQ of device %s", > > cptvf->dev_name); > > ret =3D -EBUSY; > > - goto cleanup; > > + goto mempool_destroy; > > } > > > > *instance =3D cpt_instance; > > @@ -521,8 +610,12 @@ otx_cpt_get_resource(void *dev, uint8_t group, > > struct cpt_instance **instance) > > CPT_LOG_DP_DEBUG("Crypto device (%s) initialized", > > cptvf->dev_name); > > > > return 0; > > -cleanup: > > + > > +mempool_destroy: > > + otx_cpt_metabuf_mempool_destroy(cpt_instance); > > +memzone_free: > > rte_memzone_free(rz); > > +exit: > > *instance =3D NULL; > > return ret; > > } > > @@ -540,6 +633,8 @@ otx_cpt_put_resource(struct cpt_instance > > *instance) > > > > CPT_LOG_DP_DEBUG("Releasing cpt device %s", cptvf->dev_name); > > > > + otx_cpt_metabuf_mempool_destroy(instance); > > + > > rz =3D (struct rte_memzone *)instance->rsvd; > > rte_memzone_free(rz); > > return 0; > > diff --git a/drivers/crypto/octeontx/otx_cryptodev_hw_access.h > > b/drivers/crypto/octeontx/otx_cryptodev_hw_access.h > > index dea4cba..63c199e 100644 > > --- a/drivers/crypto/octeontx/otx_cryptodev_hw_access.h > > +++ b/drivers/crypto/octeontx/otx_cryptodev_hw_access.h > > @@ -7,6 +7,7 @@ > > #include > > > > #include > > +#include > > #include > > #include > > #include > > @@ -41,6 +42,7 @@ struct cpt_instance { > > uintptr_t rsvd; > > struct rte_mempool *sess_mp; > > struct rte_mempool *sess_mp_priv; > > + struct cpt_qp_meta_info meta_info; > > }; > > > > struct command_chunk { > > @@ -76,8 +78,6 @@ struct cpt_vf { > > struct command_queue cqueue; > > /** Pending queue information */ > > struct pending_queue pqueue; > > - /** Meta information per vf */ > > - struct cptvf_meta_info meta_info; > > > > /** Below fields are accessed only in control path */ > > > > @@ -156,7 +156,8 @@ int > > otx_cpt_deinit_device(void *dev); > > > > int > > -otx_cpt_get_resource(void *dev, uint8_t group, struct cpt_instance > > **instance); > > +otx_cpt_get_resource(const struct rte_cryptodev *dev, uint8_t group, > > + struct cpt_instance **instance, uint16_t qp_id); > > > > int > > otx_cpt_put_resource(struct cpt_instance *instance); diff --git > > a/drivers/crypto/octeontx/otx_cryptodev_ops.c > > b/drivers/crypto/octeontx/otx_cryptodev_ops.c > > index 0f9f2a2..9628ffa 100644 > > --- a/drivers/crypto/octeontx/otx_cryptodev_ops.c > > +++ b/drivers/crypto/octeontx/otx_cryptodev_ops.c > > @@ -6,10 +6,11 @@ > > #include > > #include > > #include > > +#include > > #include > > +#include > > > > #include "cpt_pmd_logs.h" > > -#include "cpt_pmd_ops_helper.h" > > #include "cpt_ucode.h" > > > > #include "otx_cryptodev.h" > > @@ -17,68 +18,11 @@ > > #include "otx_cryptodev_hw_access.h" > > #include "otx_cryptodev_ops.h" > > > > -static int otx_cryptodev_probe_count; -static rte_spinlock_t > > otx_probe_count_lock =3D RTE_SPINLOCK_INITIALIZER; > > - > > -static struct rte_mempool *otx_cpt_meta_pool; -static int > > otx_cpt_op_mlen; -static int otx_cpt_op_sb_mlen; > > - > > /* Forward declarations */ > > > > static int > > otx_cpt_que_pair_release(struct rte_cryptodev *dev, uint16_t > > que_pair_id); > > > > -/* > > - * Initializes global variables used by fast-path code > > - * > > - * @return > > - * - 0 on success, errcode on error > > - */ > > -static int > > -init_global_resources(void) > > -{ > > - /* Get meta len for scatter gather mode */ > > - otx_cpt_op_mlen =3D cpt_pmd_ops_helper_get_mlen_sg_mode(); > > - > > - /* Extra 4B saved for future considerations */ > > - otx_cpt_op_mlen +=3D 4 * sizeof(uint64_t); > > - > > - otx_cpt_meta_pool =3D rte_mempool_create("cpt_metabuf-pool", 40= 96 > * 16, > > - otx_cpt_op_mlen, 512, 0, > > - NULL, NULL, NULL, NULL, > > - SOCKET_ID_ANY, 0); > > - if (!otx_cpt_meta_pool) { > > - CPT_LOG_ERR("cpt metabuf pool not created"); > > - return -ENOMEM; > > - } > > - > > - /* Get meta len for direct mode */ > > - otx_cpt_op_sb_mlen =3D > cpt_pmd_ops_helper_get_mlen_direct_mode(); > > - > > - /* Extra 4B saved for future considerations */ > > - otx_cpt_op_sb_mlen +=3D 4 * sizeof(uint64_t); > > - > > - return 0; > > -} > > - > > -void > > -cleanup_global_resources(void) > > -{ > > - /* Take lock */ > > - rte_spinlock_lock(&otx_probe_count_lock); > > - > > - /* Decrement the cryptodev count */ > > - otx_cryptodev_probe_count--; > > - > > - /* Free buffers */ > > - if (otx_cpt_meta_pool && otx_cryptodev_probe_count =3D=3D 0) > > - rte_mempool_free(otx_cpt_meta_pool); > > - > > - /* Free lock */ > > - rte_spinlock_unlock(&otx_probe_count_lock); > > -} > > - > > /* Alarm routines */ > > > > static void > > @@ -187,7 +131,6 @@ otx_cpt_que_pair_setup(struct rte_cryptodev > *dev, > > const struct rte_cryptodev_qp_conf *qp_conf, > > int socket_id __rte_unused) { > > - void *cptvf =3D dev->data->dev_private; > > struct cpt_instance *instance =3D NULL; > > struct rte_pci_device *pci_dev; > > int ret =3D -1; > > @@ -213,7 +156,7 @@ otx_cpt_que_pair_setup(struct rte_cryptodev > *dev, > > return -EIO; > > } > > > > - ret =3D otx_cpt_get_resource(cptvf, 0, &instance); > > + ret =3D otx_cpt_get_resource(dev, 0, &instance, que_pair_id); > > if (ret !=3D 0 || instance =3D=3D NULL) { > > CPT_LOG_ERR("Error getting instance handle from device = %s : " > > "ret =3D %d", dev->data->name, ret); @@ > > -384,7 +327,6 @@ otx_cpt_enq_single_sym(struct cpt_instance *instance, > > void *prep_req, *mdata =3D NULL; > > int ret =3D 0; > > uint64_t cpt_op; > > - struct cpt_vf *cptvf =3D (struct cpt_vf *)instance; > > > > sess =3D (struct cpt_sess_misc *) > > get_sym_session_private_data(sym_op->session, > > @@ -393,10 +335,10 @@ otx_cpt_enq_single_sym(struct cpt_instance > > *instance, > > cpt_op =3D sess->cpt_op; > > > > if (likely(cpt_op & CPT_OP_CIPHER_MASK)) > > - ret =3D fill_fc_params(op, sess, &cptvf->meta_info, &md= ata, > > + ret =3D fill_fc_params(op, sess, &instance->meta_info, > > + &mdata, > > &prep_req); > > else > > - ret =3D fill_digest_params(op, sess, &cptvf->meta_info, > > + ret =3D fill_digest_params(op, sess, > > + &instance->meta_info, > > &mdata, &prep_req); > > > > if (unlikely(ret)) { > > @@ -410,7 +352,7 @@ otx_cpt_enq_single_sym(struct cpt_instance > > *instance, > > > > if (unlikely(ret)) { > > /* Buffer allocated for request preparation need to be = freed */ > > - free_op_meta(mdata, cptvf->meta_info.cptvf_meta_pool); > > + free_op_meta(mdata, instance->meta_info.pool); > > return ret; > > } > > > > @@ -618,7 +560,7 @@ otx_cpt_pkt_dequeue(void *qptr, struct > > rte_crypto_op **ops, uint16_t nb_ops) > > rte_mempool_put(instance->sess_mp, cop->sym->se= ssion); > > cop->sym->session =3D NULL; > > } > > - free_op_meta(metabuf, cptvf->meta_info.cptvf_meta_pool)= ; > > + free_op_meta(metabuf, instance->meta_info.pool); > > } > > > > return nb_completed; > > @@ -644,14 +586,6 @@ static struct rte_cryptodev_ops cptvf_ops =3D { > > .sym_session_clear =3D otx_cpt_session_clear }; > > > > -static void > > -otx_cpt_common_vars_init(struct cpt_vf *cptvf) -{ > > - cptvf->meta_info.cptvf_meta_pool =3D otx_cpt_meta_pool; > > - cptvf->meta_info.cptvf_op_mlen =3D otx_cpt_op_mlen; > > - cptvf->meta_info.cptvf_op_sb_mlen =3D otx_cpt_op_sb_mlen; > > -} > > - > > int > > otx_cpt_dev_create(struct rte_cryptodev *c_dev) { @@ -699,20 +633,6 > > @@ otx_cpt_dev_create(struct rte_cryptodev *c_dev) > > /* Start off timer for mailbox interrupts */ > > otx_cpt_periodic_alarm_start(cptvf); > > > > - rte_spinlock_lock(&otx_probe_count_lock); > > - if (!otx_cryptodev_probe_count) { > > - ret =3D init_global_resources(); > > - if (ret) { > > - rte_spinlock_unlock(&otx_probe_count_lock); > > - goto init_fail; > > - } > > - } > > - otx_cryptodev_probe_count++; > > - rte_spinlock_unlock(&otx_probe_count_lock); > > - > > - /* Initialize data path variables used by common code */ > > - otx_cpt_common_vars_init(cptvf); > > - > > c_dev->dev_ops =3D &cptvf_ops; > > > > c_dev->enqueue_burst =3D otx_cpt_pkt_enqueue; @@ -730,10 +650,6 > > @@ otx_cpt_dev_create(struct rte_cryptodev *c_dev) > > > > return 0; > > > > -init_fail: > > - otx_cpt_periodic_alarm_stop(cptvf); > > - otx_cpt_deinit_device(cptvf); > > - > > fail: > > if (cptvf) { > > /* Free private data allocated */ diff --git > > a/drivers/crypto/octeontx/otx_cryptodev_ops.h > > b/drivers/crypto/octeontx/otx_cryptodev_ops.h > > index b3efecf..768ec4f 100644 > > --- a/drivers/crypto/octeontx/otx_cryptodev_ops.h > > +++ b/drivers/crypto/octeontx/otx_cryptodev_ops.h > > @@ -9,9 +9,6 @@ > > #define OTX_CPT_MIN_TAILROOM_REQ (8) > > #define CPT_NUM_QS_PER_VF (1) > > > > -void > > -cleanup_global_resources(void); > > - > > int > > otx_cpt_dev_create(struct rte_cryptodev *c_dev); > > > > -- > > 2.9.5 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id 0B882A0679 for ; Tue, 30 Apr 2019 10:40:32 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3809A5B38; Tue, 30 Apr 2019 10:40:31 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by dpdk.org (Postfix) with ESMTP id 7F7E84C8D for ; Tue, 30 Apr 2019 10:40:29 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x3U8Klsp014381; Tue, 30 Apr 2019 01:40:28 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pfpt0818; bh=BXLILmywR2U6RCn2X8tctle6/fiBHmo7XaScwRj3D3M=; b=Fu2LYP5hPc8Lw1fP289AggrgEL/GMJRILMAHGUkwYzk1KPCkCNqN/nO9EtqQBXRt1pSg w+06HbVljepqAStLbOoBp+M84z7qLVmgJAtjpM0+nalNQSZ9EIvVs4Y2w6+jr2T4BR6z 8FeR/fpAQ3jbvXz1vjDiMH8FtgXW0w9MAjsbL8B0FX46qRH2k0BDqVoPdVK+MRorWvaw GnhGv2jTt6vVKjc8Trh3HP78G8iO2LARyM55JQd0bel1wYQk6mmsWCMxiMyS11RjQOku GNeOoa+xXr+IVdHvYiilusTMlpoWnrLORpvj2BRaVaMo/jWMeuxkJrrUqV6zvlvHe1Z0 rg== Received: from sc-exch01.marvell.com ([199.233.58.181]) by mx0a-0016f401.pphosted.com with ESMTP id 2s6jbcr4dc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Tue, 30 Apr 2019 01:40:28 -0700 Received: from SC-EXCH03.marvell.com (10.93.176.83) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Tue, 30 Apr 2019 01:40:27 -0700 Received: from NAM04-BN3-obe.outbound.protection.outlook.com (104.47.46.58) by SC-EXCH03.marvell.com (10.93.176.83) with Microsoft SMTP Server (TLS) id 15.0.1367.3 via Frontend Transport; Tue, 30 Apr 2019 01:40:27 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BXLILmywR2U6RCn2X8tctle6/fiBHmo7XaScwRj3D3M=; b=dQExBmsbyzOfT/diMGskbpRVkaEvkGKZsA9OmPFLWSnLa+YjEzi+oYOwWbu6wd8rcYFU19nbD/+3p+Mw7UlOUTtkMdZdfRnVLxRFl3T1Zh7b45tGg6sOlTPXrGel2rtB8WH5c1D7aqD55slYUCq+jbCR+14n2uVsxxgOaKSbjB8= Received: from MN2PR18MB2877.namprd18.prod.outlook.com (20.179.20.218) by MN2PR18MB3424.namprd18.prod.outlook.com (10.255.239.13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1835.15; Tue, 30 Apr 2019 08:40:22 +0000 Received: from MN2PR18MB2877.namprd18.prod.outlook.com ([fe80::8c8d:3cce:d106:bf62]) by MN2PR18MB2877.namprd18.prod.outlook.com ([fe80::8c8d:3cce:d106:bf62%7]) with mapi id 15.20.1835.010; Tue, 30 Apr 2019 08:40:22 +0000 From: Anoob Joseph To: Akhil Goyal , Pablo de Lara CC: Jerin Jacob Kollanukkaran , "Narayana Prasad Raju Athreya" , Shally Verma , "dev@dpdk.org" Thread-Topic: [EXT] [PATCH v2] crypto/octeontx: use distinct metabuf pool for each queue Thread-Index: AQHU9aZ4XsJwJGAlTU6GvUSuZbRmsqZUWiuAgAAaenA= Date: Tue, 30 Apr 2019 08:40:22 +0000 Message-ID: References: <20190418032953.2102-1-anoobj@marvell.com> <20190418052029.2784-1-anoobj@marvell.com> In-Reply-To: Accept-Language: en-IN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [115.113.156.2] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: dcc3f2e5-9da1-43e6-9c24-08d6cd477c06 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(2017052603328)(7193020); SRVR:MN2PR18MB3424; x-ms-traffictypediagnostic: MN2PR18MB3424: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:159; x-forefront-prvs: 00235A1EEF x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(346002)(136003)(366004)(376002)(39850400004)(396003)(189003)(199004)(13464003)(14454004)(7736002)(26005)(305945005)(14444005)(256004)(53936002)(55236004)(486006)(53546011)(102836004)(71190400001)(186003)(6506007)(2906002)(71200400001)(446003)(11346002)(4326008)(74316002)(478600001)(6246003)(53946003)(476003)(25786009)(76176011)(316002)(97736004)(81156014)(229853002)(5660300002)(66066001)(33656002)(6436002)(81166006)(8676002)(7696005)(3846002)(66446008)(6116002)(52536014)(66946007)(86362001)(110136005)(64756008)(76116006)(66476007)(54906003)(66556008)(73956011)(99286004)(8936002)(30864003)(9686003)(55016002)(68736007)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:MN2PR18MB3424; H:MN2PR18MB2877.namprd18.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: marvell.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: UtfGpE4Tr8WT3117iq0xiKFg8S1gZPmpdGpxPfZh6WZblRE8uqVQZglIvvPa1FlODE6xkOT7eX0nxbCflP8LZSsIIokME04BN+2XCpnuC/oo6QfDv6+cy3uPjJF5bV26MP908bHJ9KjwA+ZXEq7+CMoBf7rCaZIXvOIdnKo8+buliZzy2BGwnO1qwd0Cus6Z/WyJhBZAHh7qhOLzxmH3+KU6NY3Hufz1OakAhKfRCq5aAzdvrMbULYpXrKMsQOnxKyrLS8ymH9CDWnqTMKqkiJbMohsucPRbG19rQNnhClTr6CfMfqciS1iCYiq1J2aqve5Kz5CLXsFaCP/Jy58+XWJQOjE3d0lQXBaexdUEfegS6enUd5jp5XSZd7D1qO8npczGplhA1iX+ra9g93WI0Nyv3Sgyzs3EKnD3McOGoKE= Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: dcc3f2e5-9da1-43e6-9c24-08d6cd477c06 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Apr 2019 08:40:22.5232 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR18MB3424 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:, , definitions=2019-04-30_03:, , signatures=0 Subject: Re: [dpdk-dev] [EXT] [PATCH v2] crypto/octeontx: use distinct metabuf pool for each queue X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" Message-ID: <20190430084022.lkN8JFNVJMSc7MfUdZ3fAxyD9BkCjVWjeXxdZn86vI0@z> Hi Akhil, This is a fix and I would like this to be part of 19.05 release. Hope you c= an apply this before RC4. Thanks, Anoob > -----Original Message----- > From: Akhil Goyal > Sent: Tuesday, April 30, 2019 12:33 PM > To: Anoob Joseph ; Pablo de Lara > > Cc: Jerin Jacob Kollanukkaran ; Narayana Prasad Raju > Athreya ; Shally Verma ; > dev@dpdk.org > Subject: RE: [EXT] [PATCH v2] crypto/octeontx: use distinct metabuf pool = for > each queue >=20 > Hi Anoob, >=20 > I believe this patch is for 19.08 release. This patch is not acked and we= are > about to close the RC4. >=20 > -Akhil >=20 > > > > > > The metabuf pool is shared across all queue pairs belonging to the > > PMD. In order to prevent one queue pair from starving another, use a > > distinct mempool for each queue pair. > > > > Fixes: 273487f7b381 ("crypto/octeontx: add global resource init") > > > > Signed-off-by: Anoob Joseph > > --- > > v2: > > * Mail server converted v1 patch file to DOS while sending. This caused > > checkpatch to report errors. Addressed this. > > > > drivers/common/cpt/cpt_common.h | 10 ++- > > drivers/common/cpt/cpt_ucode.h | 24 +++-- > > drivers/crypto/octeontx/otx_cryptodev.c | 3 - > > drivers/crypto/octeontx/otx_cryptodev_hw_access.c | 105 > > ++++++++++++++++++++-- > > drivers/crypto/octeontx/otx_cryptodev_hw_access.h | 7 +- > > drivers/crypto/octeontx/otx_cryptodev_ops.c | 98 ++------------= ------ > > drivers/crypto/octeontx/otx_cryptodev_ops.h | 3 - > > 7 files changed, 127 insertions(+), 123 deletions(-) > > > > diff --git a/drivers/common/cpt/cpt_common.h > > b/drivers/common/cpt/cpt_common.h index ceb32f2..32f23ac 100644 > > --- a/drivers/common/cpt/cpt_common.h > > +++ b/drivers/common/cpt/cpt_common.h > > @@ -5,6 +5,8 @@ > > #ifndef _CPT_COMMON_H_ > > #define _CPT_COMMON_H_ > > > > +#include > > + > > /* > > * This file defines common macros and structs > > */ > > @@ -38,10 +40,10 @@ > > > > #define MOD_INC(i, l) ((i) =3D=3D (l - 1) ? (i) =3D 0 : (i)++) > > > > -struct cptvf_meta_info { > > - void *cptvf_meta_pool; > > - int cptvf_op_mlen; > > - int cptvf_op_sb_mlen; > > +struct cpt_qp_meta_info { > > + struct rte_mempool *pool; > > + int sg_mlen; > > + int lb_mlen; > > }; > > > > struct rid { > > diff --git a/drivers/common/cpt/cpt_ucode.h > > b/drivers/common/cpt/cpt_ucode.h index 239c5df..f21352e 100644 > > --- a/drivers/common/cpt/cpt_ucode.h > > +++ b/drivers/common/cpt/cpt_ucode.h > > @@ -3147,7 +3147,7 @@ prepare_iov_from_pkt_inplace(struct rte_mbuf > > *pkt, static __rte_always_inline int fill_fc_params(struct > > rte_crypto_op *cop, > > struct cpt_sess_misc *sess_misc, > > - struct cptvf_meta_info *cpt_m_info, > > + struct cpt_qp_meta_info *m_info, > > void **mdata_ptr, > > void **prep_req) > > { > > @@ -3365,15 +3365,11 @@ fill_fc_params(struct rte_crypto_op *cop, > > } > > > > if (likely(flags & SINGLE_BUF_HEADTAILROOM)) > > - mdata =3D alloc_op_meta(m_src, > > - &fc_params.meta_buf, > > - cpt_m_info->cptvf_op_sb_mlen, > > - cpt_m_info->cptvf_meta_pool); > > + mdata =3D alloc_op_meta(m_src, &fc_params.meta_buf, > > + m_info->lb_mlen, m_info->pool); > > else > > - mdata =3D alloc_op_meta(NULL, > > - &fc_params.meta_buf, > > - cpt_m_info->cptvf_op_mlen, > > - cpt_m_info->cptvf_meta_pool); > > + mdata =3D alloc_op_meta(NULL, &fc_params.meta_buf, > > + m_info->sg_mlen, m_info->pool); > > > > if (unlikely(mdata =3D=3D NULL)) { > > CPT_LOG_DP_ERR("Error allocating meta buffer for > > request"); @@ -3410,7 +3406,7 @@ fill_fc_params(struct rte_crypto_op > *cop, > > return 0; > > > > free_mdata_and_exit: > > - free_op_meta(mdata, cpt_m_info->cptvf_meta_pool); > > + free_op_meta(mdata, m_info->pool); > > err_exit: > > return ret; > > } > > @@ -3521,7 +3517,7 @@ find_kasumif9_direction_and_length(uint8_t > *src, > > static __rte_always_inline int fill_digest_params(struct > > rte_crypto_op *cop, > > struct cpt_sess_misc *sess, > > - struct cptvf_meta_info *cpt_m_info, > > + struct cpt_qp_meta_info *m_info, > > void **mdata_ptr, > > void **prep_req) > > { > > @@ -3547,8 +3543,8 @@ fill_digest_params(struct rte_crypto_op *cop, > > m_src =3D sym_op->m_src; > > > > /* For just digest lets force mempool alloc */ > > - mdata =3D alloc_op_meta(NULL, ¶ms.meta_buf, cpt_m_info- > > >cptvf_op_mlen, > > - cpt_m_info->cptvf_meta_pool); > > + mdata =3D alloc_op_meta(NULL, ¶ms.meta_buf, m_info->sg_mlen= , > > + m_info->pool); > > if (mdata =3D=3D NULL) { > > ret =3D -ENOMEM; > > goto err_exit; > > @@ -3683,7 +3679,7 @@ fill_digest_params(struct rte_crypto_op *cop, > > return 0; > > > > free_mdata_and_exit: > > - free_op_meta(mdata, cpt_m_info->cptvf_meta_pool); > > + free_op_meta(mdata, m_info->pool); > > err_exit: > > return ret; > > } > > diff --git a/drivers/crypto/octeontx/otx_cryptodev.c > > b/drivers/crypto/octeontx/otx_cryptodev.c > > index b201e0a..fc64a5f 100644 > > --- a/drivers/crypto/octeontx/otx_cryptodev.c > > +++ b/drivers/crypto/octeontx/otx_cryptodev.c > > @@ -104,9 +104,6 @@ otx_cpt_pci_remove(struct rte_pci_device > *pci_dev) > > cryptodev->device =3D NULL; > > cryptodev->data =3D NULL; > > > > - /* free metapool memory */ > > - cleanup_global_resources(); > > - > > return 0; > > } > > > > diff --git a/drivers/crypto/octeontx/otx_cryptodev_hw_access.c > > b/drivers/crypto/octeontx/otx_cryptodev_hw_access.c > > index 18f2e6b..eba6293 100644 > > --- a/drivers/crypto/octeontx/otx_cryptodev_hw_access.c > > +++ b/drivers/crypto/octeontx/otx_cryptodev_hw_access.c > > @@ -7,7 +7,9 @@ > > > > #include > > #include > > +#include > > #include > > +#include > > #include > > #include > > > > @@ -15,8 +17,11 @@ > > #include "otx_cryptodev_mbox.h" > > > > #include "cpt_pmd_logs.h" > > +#include "cpt_pmd_ops_helper.h" > > #include "cpt_hw_types.h" > > > > +#define METABUF_POOL_CACHE_SIZE 512 > > + > > /* > > * VF HAL functions > > * Access its own BAR0/4 registers by passing VF number as 0. > > @@ -395,12 +400,90 @@ otx_cpt_deinit_device(void *dev) > > return 0; > > } > > > > +static int > > +otx_cpt_metabuf_mempool_create(const struct rte_cryptodev *dev, > > + struct cpt_instance *instance, uint8_t q= p_id, > > + int nb_elements) { > > + char mempool_name[RTE_MEMPOOL_NAMESIZE]; > > + int sg_mlen, lb_mlen, max_mlen, ret; > > + struct cpt_qp_meta_info *meta_info; > > + struct rte_mempool *pool; > > + > > + /* Get meta len for scatter gather mode */ > > + sg_mlen =3D cpt_pmd_ops_helper_get_mlen_sg_mode(); > > + > > + /* Extra 32B saved for future considerations */ > > + sg_mlen +=3D 4 * sizeof(uint64_t); > > + > > + /* Get meta len for linear buffer (direct) mode */ > > + lb_mlen =3D cpt_pmd_ops_helper_get_mlen_direct_mode(); > > + > > + /* Extra 32B saved for future considerations */ > > + lb_mlen +=3D 4 * sizeof(uint64_t); > > + > > + /* Check max requirement for meta buffer */ > > + max_mlen =3D RTE_MAX(lb_mlen, sg_mlen); > > + > > + /* Allocate mempool */ > > + > > + snprintf(mempool_name, RTE_MEMPOOL_NAMESIZE, > > "otx_cpt_mb_%u:%u", > > + dev->data->dev_id, qp_id); > > + > > + pool =3D rte_mempool_create_empty(mempool_name, nb_elements, > > max_mlen, > > + METABUF_POOL_CACHE_SIZE, 0, > > + rte_socket_id(), 0); > > + > > + if (pool =3D=3D NULL) { > > + CPT_LOG_ERR("Could not create mempool for metabuf"); > > + return rte_errno; > > + } > > + > > + ret =3D rte_mempool_set_ops_byname(pool, > > RTE_MBUF_DEFAULT_MEMPOOL_OPS, > > + NULL); > > + if (ret) { > > + CPT_LOG_ERR("Could not set mempool ops"); > > + goto mempool_free; > > + } > > + > > + ret =3D rte_mempool_populate_default(pool); > > + if (ret <=3D 0) { > > + CPT_LOG_ERR("Could not populate metabuf pool"); > > + goto mempool_free; > > + } > > + > > + meta_info =3D &instance->meta_info; > > + > > + meta_info->pool =3D pool; > > + meta_info->lb_mlen =3D lb_mlen; > > + meta_info->sg_mlen =3D sg_mlen; > > + > > + return 0; > > + > > +mempool_free: > > + rte_mempool_free(pool); > > + return ret; > > +} > > + > > +static void > > +otx_cpt_metabuf_mempool_destroy(struct cpt_instance *instance) { > > + struct cpt_qp_meta_info *meta_info =3D &instance->meta_info; > > + > > + rte_mempool_free(meta_info->pool); > > + > > + meta_info->pool =3D NULL; > > + meta_info->lb_mlen =3D 0; > > + meta_info->sg_mlen =3D 0; > > +} > > + > > int > > -otx_cpt_get_resource(void *dev, uint8_t group, struct cpt_instance > > **instance) > > +otx_cpt_get_resource(const struct rte_cryptodev *dev, uint8_t group, > > + struct cpt_instance **instance, uint16_t qp_id) > > { > > int ret =3D -ENOENT, len, qlen, i; > > int chunk_len, chunks, chunk_size; > > - struct cpt_vf *cptvf =3D (struct cpt_vf *)dev; > > + struct cpt_vf *cptvf =3D dev->data->dev_private; > > struct cpt_instance *cpt_instance; > > struct command_chunk *chunk_head =3D NULL, *chunk_prev =3D NULL= ; > > struct command_chunk *chunk =3D NULL; @@ -446,7 +529,7 @@ > > otx_cpt_get_resource(void *dev, uint8_t group, struct cpt_instance > > **instance) > > RTE_CACHE_LINE_SIZE); > > if (!rz) { > > ret =3D rte_errno; > > - goto cleanup; > > + goto exit; > > } > > > > mem =3D rz->addr; > > @@ -457,6 +540,12 @@ otx_cpt_get_resource(void *dev, uint8_t group, > > struct cpt_instance **instance) > > > > cpt_instance->rsvd =3D (uintptr_t)rz; > > > > + ret =3D otx_cpt_metabuf_mempool_create(dev, cpt_instance, qp_id= , > qlen); > > + if (ret) { > > + CPT_LOG_ERR("Could not create mempool for metabuf"); > > + goto memzone_free; > > + } > > + > > /* Pending queue setup */ > > cptvf->pqueue.rid_queue =3D (struct rid *)mem; > > cptvf->pqueue.enq_tail =3D 0; > > @@ -513,7 +602,7 @@ otx_cpt_get_resource(void *dev, uint8_t group, > > struct cpt_instance **instance) > > CPT_LOG_ERR("Failed to initialize CPT VQ of device %s", > > cptvf->dev_name); > > ret =3D -EBUSY; > > - goto cleanup; > > + goto mempool_destroy; > > } > > > > *instance =3D cpt_instance; > > @@ -521,8 +610,12 @@ otx_cpt_get_resource(void *dev, uint8_t group, > > struct cpt_instance **instance) > > CPT_LOG_DP_DEBUG("Crypto device (%s) initialized", > > cptvf->dev_name); > > > > return 0; > > -cleanup: > > + > > +mempool_destroy: > > + otx_cpt_metabuf_mempool_destroy(cpt_instance); > > +memzone_free: > > rte_memzone_free(rz); > > +exit: > > *instance =3D NULL; > > return ret; > > } > > @@ -540,6 +633,8 @@ otx_cpt_put_resource(struct cpt_instance > > *instance) > > > > CPT_LOG_DP_DEBUG("Releasing cpt device %s", cptvf->dev_name); > > > > + otx_cpt_metabuf_mempool_destroy(instance); > > + > > rz =3D (struct rte_memzone *)instance->rsvd; > > rte_memzone_free(rz); > > return 0; > > diff --git a/drivers/crypto/octeontx/otx_cryptodev_hw_access.h > > b/drivers/crypto/octeontx/otx_cryptodev_hw_access.h > > index dea4cba..63c199e 100644 > > --- a/drivers/crypto/octeontx/otx_cryptodev_hw_access.h > > +++ b/drivers/crypto/octeontx/otx_cryptodev_hw_access.h > > @@ -7,6 +7,7 @@ > > #include > > > > #include > > +#include > > #include > > #include > > #include > > @@ -41,6 +42,7 @@ struct cpt_instance { > > uintptr_t rsvd; > > struct rte_mempool *sess_mp; > > struct rte_mempool *sess_mp_priv; > > + struct cpt_qp_meta_info meta_info; > > }; > > > > struct command_chunk { > > @@ -76,8 +78,6 @@ struct cpt_vf { > > struct command_queue cqueue; > > /** Pending queue information */ > > struct pending_queue pqueue; > > - /** Meta information per vf */ > > - struct cptvf_meta_info meta_info; > > > > /** Below fields are accessed only in control path */ > > > > @@ -156,7 +156,8 @@ int > > otx_cpt_deinit_device(void *dev); > > > > int > > -otx_cpt_get_resource(void *dev, uint8_t group, struct cpt_instance > > **instance); > > +otx_cpt_get_resource(const struct rte_cryptodev *dev, uint8_t group, > > + struct cpt_instance **instance, uint16_t qp_id); > > > > int > > otx_cpt_put_resource(struct cpt_instance *instance); diff --git > > a/drivers/crypto/octeontx/otx_cryptodev_ops.c > > b/drivers/crypto/octeontx/otx_cryptodev_ops.c > > index 0f9f2a2..9628ffa 100644 > > --- a/drivers/crypto/octeontx/otx_cryptodev_ops.c > > +++ b/drivers/crypto/octeontx/otx_cryptodev_ops.c > > @@ -6,10 +6,11 @@ > > #include > > #include > > #include > > +#include > > #include > > +#include > > > > #include "cpt_pmd_logs.h" > > -#include "cpt_pmd_ops_helper.h" > > #include "cpt_ucode.h" > > > > #include "otx_cryptodev.h" > > @@ -17,68 +18,11 @@ > > #include "otx_cryptodev_hw_access.h" > > #include "otx_cryptodev_ops.h" > > > > -static int otx_cryptodev_probe_count; -static rte_spinlock_t > > otx_probe_count_lock =3D RTE_SPINLOCK_INITIALIZER; > > - > > -static struct rte_mempool *otx_cpt_meta_pool; -static int > > otx_cpt_op_mlen; -static int otx_cpt_op_sb_mlen; > > - > > /* Forward declarations */ > > > > static int > > otx_cpt_que_pair_release(struct rte_cryptodev *dev, uint16_t > > que_pair_id); > > > > -/* > > - * Initializes global variables used by fast-path code > > - * > > - * @return > > - * - 0 on success, errcode on error > > - */ > > -static int > > -init_global_resources(void) > > -{ > > - /* Get meta len for scatter gather mode */ > > - otx_cpt_op_mlen =3D cpt_pmd_ops_helper_get_mlen_sg_mode(); > > - > > - /* Extra 4B saved for future considerations */ > > - otx_cpt_op_mlen +=3D 4 * sizeof(uint64_t); > > - > > - otx_cpt_meta_pool =3D rte_mempool_create("cpt_metabuf-pool", 40= 96 > * 16, > > - otx_cpt_op_mlen, 512, 0, > > - NULL, NULL, NULL, NULL, > > - SOCKET_ID_ANY, 0); > > - if (!otx_cpt_meta_pool) { > > - CPT_LOG_ERR("cpt metabuf pool not created"); > > - return -ENOMEM; > > - } > > - > > - /* Get meta len for direct mode */ > > - otx_cpt_op_sb_mlen =3D > cpt_pmd_ops_helper_get_mlen_direct_mode(); > > - > > - /* Extra 4B saved for future considerations */ > > - otx_cpt_op_sb_mlen +=3D 4 * sizeof(uint64_t); > > - > > - return 0; > > -} > > - > > -void > > -cleanup_global_resources(void) > > -{ > > - /* Take lock */ > > - rte_spinlock_lock(&otx_probe_count_lock); > > - > > - /* Decrement the cryptodev count */ > > - otx_cryptodev_probe_count--; > > - > > - /* Free buffers */ > > - if (otx_cpt_meta_pool && otx_cryptodev_probe_count =3D=3D 0) > > - rte_mempool_free(otx_cpt_meta_pool); > > - > > - /* Free lock */ > > - rte_spinlock_unlock(&otx_probe_count_lock); > > -} > > - > > /* Alarm routines */ > > > > static void > > @@ -187,7 +131,6 @@ otx_cpt_que_pair_setup(struct rte_cryptodev > *dev, > > const struct rte_cryptodev_qp_conf *qp_conf, > > int socket_id __rte_unused) { > > - void *cptvf =3D dev->data->dev_private; > > struct cpt_instance *instance =3D NULL; > > struct rte_pci_device *pci_dev; > > int ret =3D -1; > > @@ -213,7 +156,7 @@ otx_cpt_que_pair_setup(struct rte_cryptodev > *dev, > > return -EIO; > > } > > > > - ret =3D otx_cpt_get_resource(cptvf, 0, &instance); > > + ret =3D otx_cpt_get_resource(dev, 0, &instance, que_pair_id); > > if (ret !=3D 0 || instance =3D=3D NULL) { > > CPT_LOG_ERR("Error getting instance handle from device = %s : " > > "ret =3D %d", dev->data->name, ret); @@ > > -384,7 +327,6 @@ otx_cpt_enq_single_sym(struct cpt_instance *instance, > > void *prep_req, *mdata =3D NULL; > > int ret =3D 0; > > uint64_t cpt_op; > > - struct cpt_vf *cptvf =3D (struct cpt_vf *)instance; > > > > sess =3D (struct cpt_sess_misc *) > > get_sym_session_private_data(sym_op->session, > > @@ -393,10 +335,10 @@ otx_cpt_enq_single_sym(struct cpt_instance > > *instance, > > cpt_op =3D sess->cpt_op; > > > > if (likely(cpt_op & CPT_OP_CIPHER_MASK)) > > - ret =3D fill_fc_params(op, sess, &cptvf->meta_info, &md= ata, > > + ret =3D fill_fc_params(op, sess, &instance->meta_info, > > + &mdata, > > &prep_req); > > else > > - ret =3D fill_digest_params(op, sess, &cptvf->meta_info, > > + ret =3D fill_digest_params(op, sess, > > + &instance->meta_info, > > &mdata, &prep_req); > > > > if (unlikely(ret)) { > > @@ -410,7 +352,7 @@ otx_cpt_enq_single_sym(struct cpt_instance > > *instance, > > > > if (unlikely(ret)) { > > /* Buffer allocated for request preparation need to be = freed */ > > - free_op_meta(mdata, cptvf->meta_info.cptvf_meta_pool); > > + free_op_meta(mdata, instance->meta_info.pool); > > return ret; > > } > > > > @@ -618,7 +560,7 @@ otx_cpt_pkt_dequeue(void *qptr, struct > > rte_crypto_op **ops, uint16_t nb_ops) > > rte_mempool_put(instance->sess_mp, cop->sym->se= ssion); > > cop->sym->session =3D NULL; > > } > > - free_op_meta(metabuf, cptvf->meta_info.cptvf_meta_pool)= ; > > + free_op_meta(metabuf, instance->meta_info.pool); > > } > > > > return nb_completed; > > @@ -644,14 +586,6 @@ static struct rte_cryptodev_ops cptvf_ops =3D { > > .sym_session_clear =3D otx_cpt_session_clear }; > > > > -static void > > -otx_cpt_common_vars_init(struct cpt_vf *cptvf) -{ > > - cptvf->meta_info.cptvf_meta_pool =3D otx_cpt_meta_pool; > > - cptvf->meta_info.cptvf_op_mlen =3D otx_cpt_op_mlen; > > - cptvf->meta_info.cptvf_op_sb_mlen =3D otx_cpt_op_sb_mlen; > > -} > > - > > int > > otx_cpt_dev_create(struct rte_cryptodev *c_dev) { @@ -699,20 +633,6 > > @@ otx_cpt_dev_create(struct rte_cryptodev *c_dev) > > /* Start off timer for mailbox interrupts */ > > otx_cpt_periodic_alarm_start(cptvf); > > > > - rte_spinlock_lock(&otx_probe_count_lock); > > - if (!otx_cryptodev_probe_count) { > > - ret =3D init_global_resources(); > > - if (ret) { > > - rte_spinlock_unlock(&otx_probe_count_lock); > > - goto init_fail; > > - } > > - } > > - otx_cryptodev_probe_count++; > > - rte_spinlock_unlock(&otx_probe_count_lock); > > - > > - /* Initialize data path variables used by common code */ > > - otx_cpt_common_vars_init(cptvf); > > - > > c_dev->dev_ops =3D &cptvf_ops; > > > > c_dev->enqueue_burst =3D otx_cpt_pkt_enqueue; @@ -730,10 +650,6 > > @@ otx_cpt_dev_create(struct rte_cryptodev *c_dev) > > > > return 0; > > > > -init_fail: > > - otx_cpt_periodic_alarm_stop(cptvf); > > - otx_cpt_deinit_device(cptvf); > > - > > fail: > > if (cptvf) { > > /* Free private data allocated */ diff --git > > a/drivers/crypto/octeontx/otx_cryptodev_ops.h > > b/drivers/crypto/octeontx/otx_cryptodev_ops.h > > index b3efecf..768ec4f 100644 > > --- a/drivers/crypto/octeontx/otx_cryptodev_ops.h > > +++ b/drivers/crypto/octeontx/otx_cryptodev_ops.h > > @@ -9,9 +9,6 @@ > > #define OTX_CPT_MIN_TAILROOM_REQ (8) > > #define CPT_NUM_QS_PER_VF (1) > > > > -void > > -cleanup_global_resources(void); > > - > > int > > otx_cpt_dev_create(struct rte_cryptodev *c_dev); > > > > -- > > 2.9.5