From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <akhil.goyal@nxp.com>
Received: from EUR03-VE1-obe.outbound.protection.outlook.com
 (mail-eopbgr50080.outbound.protection.outlook.com [40.107.5.80])
 by dpdk.org (Postfix) with ESMTP id BC7315A6E
 for <dev@dpdk.org>; Tue, 30 Apr 2019 09:02:57 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; 
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=gkwIR4VMjFaOkPp8sAx9qbZXTvj7zOtEtZTA1o7nvUk=;
 b=wn+h3WlLY+jre0r7fISmpdzb44NLlR+5YfwFza/EEimo0Hx+QlVmhfkf6vqK/QcDMkVwJouJlnrl4KqhM4pg4W9RH+c4nGLzzdLZkQJ3+klox+2Wi6ZShKk8NJIWa9GNdvsx8uUzV6rOJPFTp/HuNdAXVP+TryQFPuST32VeNQo=
Received: from VI1PR04MB4893.eurprd04.prod.outlook.com (20.177.49.154) by
 VI1PR04MB4080.eurprd04.prod.outlook.com (10.171.183.33) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.1835.13; Tue, 30 Apr 2019 07:02:56 +0000
Received: from VI1PR04MB4893.eurprd04.prod.outlook.com
 ([fe80::98b0:84a6:1c08:57c7]) by VI1PR04MB4893.eurprd04.prod.outlook.com
 ([fe80::98b0:84a6:1c08:57c7%3]) with mapi id 15.20.1835.018; Tue, 30 Apr 2019
 07:02:56 +0000
From: Akhil Goyal <akhil.goyal@nxp.com>
To: Anoob Joseph <anoobj@marvell.com>, Pablo de Lara
 <pablo.de.lara.guarch@intel.com>
CC: Jerin Jacob <jerinj@marvell.com>, Narayana Prasad <pathreya@marvell.com>, 
 Shally Verma <shallyv@marvell.com>, "dev@dpdk.org" <dev@dpdk.org>
Thread-Topic: [EXT] [PATCH v2] crypto/octeontx: use distinct metabuf pool for
 each queue
Thread-Index: AQHU9aZ6sNBARKM2zEKafkLc7YfqHaZUWX6Q
Date: Tue, 30 Apr 2019 07:02:55 +0000
Message-ID: <VI1PR04MB48937995215B41B49050FFA3E63A0@VI1PR04MB4893.eurprd04.prod.outlook.com>
References: <20190418032953.2102-1-anoobj@marvell.com>
 <20190418052029.2784-1-anoobj@marvell.com>
In-Reply-To: <20190418052029.2784-1-anoobj@marvell.com>
Accept-Language: en-IN, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=akhil.goyal@nxp.com; 
x-originating-ip: [92.120.1.65]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 6fdd4c26-6d6b-49b5-cdc6-08d6cd39df2e
x-ms-office365-filtering-ht: Tenant
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(4618075)(2017052603328)(7193020);
 SRVR:VI1PR04MB4080; 
x-ms-traffictypediagnostic: VI1PR04MB4080:
x-microsoft-antispam-prvs: <VI1PR04MB40806C09E689D4B749E0E74FE63A0@VI1PR04MB4080.eurprd04.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:155;
x-forefront-prvs: 00235A1EEF
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(396003)(136003)(366004)(376002)(346002)(39850400004)(199004)(189003)(64756008)(229853002)(66556008)(66446008)(66946007)(316002)(9686003)(6116002)(73956011)(81166006)(3846002)(478600001)(14454004)(8676002)(81156014)(99286004)(7696005)(30864003)(110136005)(97736004)(54906003)(5660300002)(6246003)(66476007)(76176011)(71200400001)(71190400001)(2906002)(76116006)(53936002)(86362001)(74316002)(25786009)(53946003)(66066001)(4326008)(7736002)(305945005)(446003)(486006)(6506007)(476003)(11346002)(186003)(14444005)(102836004)(44832011)(256004)(33656002)(68736007)(26005)(52536014)(6436002)(8936002)(55016002)(579004);
 DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB4080;
 H:VI1PR04MB4893.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: nxp.com does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: 60c+mIaIvA31rk/XWZSmcadVMy8zlhhkH6xArYge0DUQxwYCM7a33c43kCTICZ9XtagjmiSKopTKiorN6ixfcCi5uNH99dS7pmkt46e0jHkznyjaBvBfwlMYY+RoyxdXSzRSG3NVNURqjxUT97GBYGu+4oGyFDrkZWhngwYuWzWWUU3Ny0n+dtHfgX5YzyclHp4pE5oBX6px01FtH3sRDeVzkWE7kmIWWOKWT3L7EiBD20eUH4GCLOl8in/W1lY8A6PbDJYtSxBFLcBwa7fD4tK3JVdbSk4IavVTCr4FwVW6UJ2bhjkZBK/iK/+fwMPjMnxxLLMzPF612lutaSyu3UsxoxGvn0xIONVcU+mV4apPhfXjdZg0289VHT0q+JQNoNkHSlZ5RKPvRn6NyimB49pdcthHSXgz8XcKMNVxJcM=
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 6fdd4c26-6d6b-49b5-cdc6-08d6cd39df2e
X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Apr 2019 07:02:55.5776 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4080
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 <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <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>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
X-List-Received-Date: Tue, 30 Apr 2019 07:02:58 -0000

Hi Anoob,

I believe this patch is for 19.08 release. This patch is not acked and we a=
re about to close the RC4.

-Akhil

>=20
>=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.
>=20
> Fixes: 273487f7b381 ("crypto/octeontx: add global resource init")
>=20
> Signed-off-by: Anoob Joseph <anoobj@marvell.com>
> ---
> v2:
> * Mail server converted v1 patch file to DOS while sending. This caused
>   checkpatch to report errors. Addressed this.
>=20
>  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(-)
>=20
> 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_
>=20
> +#include <rte_mempool.h>
> +
>  /*
>   * This file defines common macros and structs
>   */
> @@ -38,10 +40,10 @@
>=20
>  #define MOD_INC(i, l)   ((i) =3D=3D (l - 1) ? (i) =3D 0 : (i)++)
>=20
> -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;
>  };
>=20
>  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,
>         }
>=20
>         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);
>=20
>         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;
>=20
>  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;
>=20
>         /* For just digest lets force mempool alloc */
> -       mdata =3D alloc_op_meta(NULL, &params.meta_buf, cpt_m_info-
> >cptvf_op_mlen,
> -                             cpt_m_info->cptvf_meta_pool);
> +       mdata =3D alloc_op_meta(NULL, &params.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;
>=20
>  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;
>=20
> -       /* free metapool memory */
> -       cleanup_global_resources();
> -
>         return 0;
>  }
>=20
> 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 @@
>=20
>  #include <rte_branch_prediction.h>
>  #include <rte_common.h>
> +#include <rte_cryptodev.h>
>  #include <rte_errno.h>
> +#include <rte_mempool.h>
>  #include <rte_memzone.h>
>  #include <rte_string_fns.h>
>=20
> @@ -15,8 +17,11 @@
>  #include "otx_cryptodev_mbox.h"
>=20
>  #include "cpt_pmd_logs.h"
> +#include "cpt_pmd_ops_helper.h"
>  #include "cpt_hw_types.h"
>=20
> +#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;
>  }
>=20
> +static int
> +otx_cpt_metabuf_mempool_create(const struct rte_cryptodev *dev,
> +                              struct cpt_instance *instance, uint8_t qp_=
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 **ins=
tance)
> +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;
>         }
>=20
>         mem =3D rz->addr;
> @@ -457,6 +540,12 @@ otx_cpt_get_resource(void *dev, uint8_t group, struc=
t
> cpt_instance **instance)
>=20
>         cpt_instance->rsvd =3D (uintptr_t)rz;
>=20
> +       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;
>         }
>=20
>         *instance =3D cpt_instance;
> @@ -521,8 +610,12 @@ otx_cpt_get_resource(void *dev, uint8_t group, struc=
t
> cpt_instance **instance)
>         CPT_LOG_DP_DEBUG("Crypto device (%s) initialized", cptvf->dev_nam=
e);
>=20
>         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)
>=20
>         CPT_LOG_DP_DEBUG("Releasing cpt device %s", cptvf->dev_name);
>=20
> +       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 <stdbool.h>
>=20
>  #include <rte_branch_prediction.h>
> +#include <rte_cryptodev.h>
>  #include <rte_cycles.h>
>  #include <rte_io.h>
>  #include <rte_memory.h>
> @@ -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;
>  };
>=20
>  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;
>=20
>         /** Below fields are accessed only in control path */
>=20
> @@ -156,7 +156,8 @@ int
>  otx_cpt_deinit_device(void *dev);
>=20
>  int
> -otx_cpt_get_resource(void *dev, uint8_t group, struct cpt_instance **ins=
tance);
> +otx_cpt_get_resource(const struct rte_cryptodev *dev, uint8_t group,
> +                    struct cpt_instance **instance, uint16_t qp_id);
>=20
>  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 <rte_bus_pci.h>
>  #include <rte_cryptodev.h>
>  #include <rte_cryptodev_pmd.h>
> +#include <rte_errno.h>
>  #include <rte_malloc.h>
> +#include <rte_mempool.h>
>=20
>  #include "cpt_pmd_logs.h"
> -#include "cpt_pmd_ops_helper.h"
>  #include "cpt_ucode.h"
>=20
>  #include "otx_cryptodev.h"
> @@ -17,68 +18,11 @@
>  #include "otx_cryptodev_hw_access.h"
>  #include "otx_cryptodev_ops.h"
>=20
> -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 */
>=20
>  static int
>  otx_cpt_que_pair_release(struct rte_cryptodev *dev, uint16_t que_pair_id=
);
>=20
> -/*
> - * 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", 4096=
 * 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 */
>=20
>  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;
>         }
>=20
> -       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;
>=20
>         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;
>=20
>         if (likely(cpt_op & CPT_OP_CIPHER_MASK))
> -               ret =3D fill_fc_params(op, sess, &cptvf->meta_info, &mdat=
a,
> +               ret =3D fill_fc_params(op, sess, &instance->meta_info, &m=
data,
>                                      &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);
>=20
>         if (unlikely(ret)) {
> @@ -410,7 +352,7 @@ otx_cpt_enq_single_sym(struct cpt_instance *instance,
>=20
>         if (unlikely(ret)) {
>                 /* Buffer allocated for request preparation need to be fr=
eed */
> -               free_op_meta(mdata, cptvf->meta_info.cptvf_meta_pool);
> +               free_op_meta(mdata, instance->meta_info.pool);
>                 return ret;
>         }
>=20
> @@ -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->sess=
ion);
>                         cop->sym->session =3D NULL;
>                 }
> -               free_op_meta(metabuf, cptvf->meta_info.cptvf_meta_pool);
> +               free_op_meta(metabuf, instance->meta_info.pool);
>         }
>=20
>         return nb_completed;
> @@ -644,14 +586,6 @@ static struct rte_cryptodev_ops cptvf_ops =3D {
>         .sym_session_clear =3D otx_cpt_session_clear
>  };
>=20
> -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);
>=20
> -       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;
>=20
>         c_dev->enqueue_burst =3D otx_cpt_pkt_enqueue;
> @@ -730,10 +650,6 @@ otx_cpt_dev_create(struct rte_cryptodev *c_dev)
>=20
>         return 0;
>=20
> -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)
>=20
> -void
> -cleanup_global_resources(void);
> -
>  int
>  otx_cpt_dev_create(struct rte_cryptodev *c_dev);
>=20
> --
> 2.9.5

From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from dpdk.org (dpdk.org [92.243.14.124])
	by dpdk.space (Postfix) with ESMTP id 0226EA0679
	for <public@inbox.dpdk.org>; Tue, 30 Apr 2019 09:02:59 +0200 (CEST)
Received: from [92.243.14.124] (localhost [127.0.0.1])
	by dpdk.org (Postfix) with ESMTP id 610975F3C;
	Tue, 30 Apr 2019 09:02:58 +0200 (CEST)
Received: from EUR03-VE1-obe.outbound.protection.outlook.com
 (mail-eopbgr50080.outbound.protection.outlook.com [40.107.5.80])
 by dpdk.org (Postfix) with ESMTP id BC7315A6E
 for <dev@dpdk.org>; Tue, 30 Apr 2019 09:02:57 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; 
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=gkwIR4VMjFaOkPp8sAx9qbZXTvj7zOtEtZTA1o7nvUk=;
 b=wn+h3WlLY+jre0r7fISmpdzb44NLlR+5YfwFza/EEimo0Hx+QlVmhfkf6vqK/QcDMkVwJouJlnrl4KqhM4pg4W9RH+c4nGLzzdLZkQJ3+klox+2Wi6ZShKk8NJIWa9GNdvsx8uUzV6rOJPFTp/HuNdAXVP+TryQFPuST32VeNQo=
Received: from VI1PR04MB4893.eurprd04.prod.outlook.com (20.177.49.154) by
 VI1PR04MB4080.eurprd04.prod.outlook.com (10.171.183.33) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.1835.13; Tue, 30 Apr 2019 07:02:56 +0000
Received: from VI1PR04MB4893.eurprd04.prod.outlook.com
 ([fe80::98b0:84a6:1c08:57c7]) by VI1PR04MB4893.eurprd04.prod.outlook.com
 ([fe80::98b0:84a6:1c08:57c7%3]) with mapi id 15.20.1835.018; Tue, 30 Apr 2019
 07:02:56 +0000
From: Akhil Goyal <akhil.goyal@nxp.com>
To: Anoob Joseph <anoobj@marvell.com>, Pablo de Lara
 <pablo.de.lara.guarch@intel.com>
CC: Jerin Jacob <jerinj@marvell.com>, Narayana Prasad <pathreya@marvell.com>, 
 Shally Verma <shallyv@marvell.com>, "dev@dpdk.org" <dev@dpdk.org>
Thread-Topic: [EXT] [PATCH v2] crypto/octeontx: use distinct metabuf pool for
 each queue
Thread-Index: AQHU9aZ6sNBARKM2zEKafkLc7YfqHaZUWX6Q
Date: Tue, 30 Apr 2019 07:02:55 +0000
Message-ID:
 <VI1PR04MB48937995215B41B49050FFA3E63A0@VI1PR04MB4893.eurprd04.prod.outlook.com>
References: <20190418032953.2102-1-anoobj@marvell.com>
 <20190418052029.2784-1-anoobj@marvell.com>
In-Reply-To: <20190418052029.2784-1-anoobj@marvell.com>
Accept-Language: en-IN, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=akhil.goyal@nxp.com; 
x-originating-ip: [92.120.1.65]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 6fdd4c26-6d6b-49b5-cdc6-08d6cd39df2e
x-ms-office365-filtering-ht: Tenant
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(4618075)(2017052603328)(7193020);
 SRVR:VI1PR04MB4080; 
x-ms-traffictypediagnostic: VI1PR04MB4080:
x-microsoft-antispam-prvs: <VI1PR04MB40806C09E689D4B749E0E74FE63A0@VI1PR04MB4080.eurprd04.prod.outlook.com>
x-ms-oob-tlc-oobclassifiers: OLM:155;
x-forefront-prvs: 00235A1EEF
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(396003)(136003)(366004)(376002)(346002)(39850400004)(199004)(189003)(64756008)(229853002)(66556008)(66446008)(66946007)(316002)(9686003)(6116002)(73956011)(81166006)(3846002)(478600001)(14454004)(8676002)(81156014)(99286004)(7696005)(30864003)(110136005)(97736004)(54906003)(5660300002)(6246003)(66476007)(76176011)(71200400001)(71190400001)(2906002)(76116006)(53936002)(86362001)(74316002)(25786009)(53946003)(66066001)(4326008)(7736002)(305945005)(446003)(486006)(6506007)(476003)(11346002)(186003)(14444005)(102836004)(44832011)(256004)(33656002)(68736007)(26005)(52536014)(6436002)(8936002)(55016002)(579004);
 DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR04MB4080;
 H:VI1PR04MB4893.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: nxp.com does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: 60c+mIaIvA31rk/XWZSmcadVMy8zlhhkH6xArYge0DUQxwYCM7a33c43kCTICZ9XtagjmiSKopTKiorN6ixfcCi5uNH99dS7pmkt46e0jHkznyjaBvBfwlMYY+RoyxdXSzRSG3NVNURqjxUT97GBYGu+4oGyFDrkZWhngwYuWzWWUU3Ny0n+dtHfgX5YzyclHp4pE5oBX6px01FtH3sRDeVzkWE7kmIWWOKWT3L7EiBD20eUH4GCLOl8in/W1lY8A6PbDJYtSxBFLcBwa7fD4tK3JVdbSk4IavVTCr4FwVW6UJ2bhjkZBK/iK/+fwMPjMnxxLLMzPF612lutaSyu3UsxoxGvn0xIONVcU+mV4apPhfXjdZg0289VHT0q+JQNoNkHSlZ5RKPvRn6NyimB49pdcthHSXgz8XcKMNVxJcM=
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-OriginatorOrg: nxp.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 6fdd4c26-6d6b-49b5-cdc6-08d6cd39df2e
X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Apr 2019 07:02:55.5776 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB4080
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 <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <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>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>
Message-ID: <20190430070255.psAnEIcYfHKSnBJoKsakgOC1V1qzVpGzXpojJHK0Z04@z>

Hi Anoob,

I believe this patch is for 19.08 release. This patch is not acked and we a=
re about to close the RC4.

-Akhil

>=20
>=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.
>=20
> Fixes: 273487f7b381 ("crypto/octeontx: add global resource init")
>=20
> Signed-off-by: Anoob Joseph <anoobj@marvell.com>
> ---
> v2:
> * Mail server converted v1 patch file to DOS while sending. This caused
>   checkpatch to report errors. Addressed this.
>=20
>  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(-)
>=20
> 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_
>=20
> +#include <rte_mempool.h>
> +
>  /*
>   * This file defines common macros and structs
>   */
> @@ -38,10 +40,10 @@
>=20
>  #define MOD_INC(i, l)   ((i) =3D=3D (l - 1) ? (i) =3D 0 : (i)++)
>=20
> -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;
>  };
>=20
>  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,
>         }
>=20
>         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);
>=20
>         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;
>=20
>  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;
>=20
>         /* For just digest lets force mempool alloc */
> -       mdata =3D alloc_op_meta(NULL, &params.meta_buf, cpt_m_info-
> >cptvf_op_mlen,
> -                             cpt_m_info->cptvf_meta_pool);
> +       mdata =3D alloc_op_meta(NULL, &params.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;
>=20
>  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;
>=20
> -       /* free metapool memory */
> -       cleanup_global_resources();
> -
>         return 0;
>  }
>=20
> 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 @@
>=20
>  #include <rte_branch_prediction.h>
>  #include <rte_common.h>
> +#include <rte_cryptodev.h>
>  #include <rte_errno.h>
> +#include <rte_mempool.h>
>  #include <rte_memzone.h>
>  #include <rte_string_fns.h>
>=20
> @@ -15,8 +17,11 @@
>  #include "otx_cryptodev_mbox.h"
>=20
>  #include "cpt_pmd_logs.h"
> +#include "cpt_pmd_ops_helper.h"
>  #include "cpt_hw_types.h"
>=20
> +#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;
>  }
>=20
> +static int
> +otx_cpt_metabuf_mempool_create(const struct rte_cryptodev *dev,
> +                              struct cpt_instance *instance, uint8_t qp_=
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 **ins=
tance)
> +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;
>         }
>=20
>         mem =3D rz->addr;
> @@ -457,6 +540,12 @@ otx_cpt_get_resource(void *dev, uint8_t group, struc=
t
> cpt_instance **instance)
>=20
>         cpt_instance->rsvd =3D (uintptr_t)rz;
>=20
> +       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;
>         }
>=20
>         *instance =3D cpt_instance;
> @@ -521,8 +610,12 @@ otx_cpt_get_resource(void *dev, uint8_t group, struc=
t
> cpt_instance **instance)
>         CPT_LOG_DP_DEBUG("Crypto device (%s) initialized", cptvf->dev_nam=
e);
>=20
>         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)
>=20
>         CPT_LOG_DP_DEBUG("Releasing cpt device %s", cptvf->dev_name);
>=20
> +       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 <stdbool.h>
>=20
>  #include <rte_branch_prediction.h>
> +#include <rte_cryptodev.h>
>  #include <rte_cycles.h>
>  #include <rte_io.h>
>  #include <rte_memory.h>
> @@ -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;
>  };
>=20
>  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;
>=20
>         /** Below fields are accessed only in control path */
>=20
> @@ -156,7 +156,8 @@ int
>  otx_cpt_deinit_device(void *dev);
>=20
>  int
> -otx_cpt_get_resource(void *dev, uint8_t group, struct cpt_instance **ins=
tance);
> +otx_cpt_get_resource(const struct rte_cryptodev *dev, uint8_t group,
> +                    struct cpt_instance **instance, uint16_t qp_id);
>=20
>  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 <rte_bus_pci.h>
>  #include <rte_cryptodev.h>
>  #include <rte_cryptodev_pmd.h>
> +#include <rte_errno.h>
>  #include <rte_malloc.h>
> +#include <rte_mempool.h>
>=20
>  #include "cpt_pmd_logs.h"
> -#include "cpt_pmd_ops_helper.h"
>  #include "cpt_ucode.h"
>=20
>  #include "otx_cryptodev.h"
> @@ -17,68 +18,11 @@
>  #include "otx_cryptodev_hw_access.h"
>  #include "otx_cryptodev_ops.h"
>=20
> -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 */
>=20
>  static int
>  otx_cpt_que_pair_release(struct rte_cryptodev *dev, uint16_t que_pair_id=
);
>=20
> -/*
> - * 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", 4096=
 * 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 */
>=20
>  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;
>         }
>=20
> -       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;
>=20
>         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;
>=20
>         if (likely(cpt_op & CPT_OP_CIPHER_MASK))
> -               ret =3D fill_fc_params(op, sess, &cptvf->meta_info, &mdat=
a,
> +               ret =3D fill_fc_params(op, sess, &instance->meta_info, &m=
data,
>                                      &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);
>=20
>         if (unlikely(ret)) {
> @@ -410,7 +352,7 @@ otx_cpt_enq_single_sym(struct cpt_instance *instance,
>=20
>         if (unlikely(ret)) {
>                 /* Buffer allocated for request preparation need to be fr=
eed */
> -               free_op_meta(mdata, cptvf->meta_info.cptvf_meta_pool);
> +               free_op_meta(mdata, instance->meta_info.pool);
>                 return ret;
>         }
>=20
> @@ -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->sess=
ion);
>                         cop->sym->session =3D NULL;
>                 }
> -               free_op_meta(metabuf, cptvf->meta_info.cptvf_meta_pool);
> +               free_op_meta(metabuf, instance->meta_info.pool);
>         }
>=20
>         return nb_completed;
> @@ -644,14 +586,6 @@ static struct rte_cryptodev_ops cptvf_ops =3D {
>         .sym_session_clear =3D otx_cpt_session_clear
>  };
>=20
> -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);
>=20
> -       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;
>=20
>         c_dev->enqueue_burst =3D otx_cpt_pkt_enqueue;
> @@ -730,10 +650,6 @@ otx_cpt_dev_create(struct rte_cryptodev *c_dev)
>=20
>         return 0;
>=20
> -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)
>=20
> -void
> -cleanup_global_resources(void);
> -
>  int
>  otx_cpt_dev_create(struct rte_cryptodev *c_dev);
>=20
> --
> 2.9.5