get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 52899,
    "url": "https://patches.dpdk.org/api/patches/52899/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20190418032953.2102-1-anoobj@marvell.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20190418032953.2102-1-anoobj@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20190418032953.2102-1-anoobj@marvell.com",
    "date": "2019-04-18T03:30:19",
    "name": "crypto/octeontx: use distinct metabuf pool for each queue",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "2cbfd8bbf9833142542dabb8dea148c890613191",
    "submitter": {
        "id": 1205,
        "url": "https://patches.dpdk.org/api/people/1205/?format=api",
        "name": "Anoob Joseph",
        "email": "anoobj@marvell.com"
    },
    "delegate": {
        "id": 6690,
        "url": "https://patches.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20190418032953.2102-1-anoobj@marvell.com/mbox/",
    "series": [
        {
            "id": 4365,
            "url": "https://patches.dpdk.org/api/series/4365/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=4365",
            "date": "2019-04-18T03:30:19",
            "name": "crypto/octeontx: use distinct metabuf pool for each queue",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/4365/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/52899/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/52899/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id F41661B8F7;\n\tThu, 18 Apr 2019 05:30:26 +0200 (CEST)",
            "from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com\n\t[67.231.148.174]) by dpdk.org (Postfix) with ESMTP id 440261B8CF\n\tfor <dev@dpdk.org>; Thu, 18 Apr 2019 05:30:25 +0200 (CEST)",
            "from pps.filterd (m0045849.ppops.net [127.0.0.1])\n\tby mx0a-0016f401.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id\n\tx3I3KgIf032214; Wed, 17 Apr 2019 20:30:23 -0700",
            "from sc-exch04.marvell.com ([199.233.58.184])\n\tby mx0a-0016f401.pphosted.com with ESMTP id 2rx3mpkbf4-1\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); \n\tWed, 17 Apr 2019 20:30:23 -0700",
            "from SC-EXCH02.marvell.com (10.93.176.82) by SC-EXCH04.marvell.com\n\t(10.93.176.84) with Microsoft SMTP Server (TLS) id 15.0.1367.3;\n\tWed, 17 Apr 2019 20:30:23 -0700",
            "from NAM03-DM3-obe.outbound.protection.outlook.com (104.47.41.59)\n\tby SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server\n\t(TLS) id\n\t15.0.1367.3 via Frontend Transport; Wed, 17 Apr 2019 20:30:22 -0700",
            "from MN2PR18MB2877.namprd18.prod.outlook.com (20.179.20.218) by\n\tMN2PR18MB2415.namprd18.prod.outlook.com (20.179.81.205) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n\t15.20.1792.18; Thu, 18 Apr 2019 03:30:20 +0000",
            "from MN2PR18MB2877.namprd18.prod.outlook.com\n\t([fe80::8c8d:3cce:d106:bf62]) by\n\tMN2PR18MB2877.namprd18.prod.outlook.com\n\t([fe80::8c8d:3cce:d106:bf62%6]) with mapi id 15.20.1792.022;\n\tThu, 18 Apr 2019 03:30:20 +0000"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n\th=from : to : cc :\n\tsubject : date : message-id : content-type :\n\tcontent-transfer-encoding : mime-version; s=pfpt0818;\n\tbh=eBc0+wm+i/x2txsfI6/kDMABRaxRJXgqTRHu/6d/W3w=; \n\tb=gn2YXjwDq/Edxb5iQhr/5LZI9ZVZc3ofAYDSWGJAHkKlVXkmJX325rVhWfAO5Tz7MB/+\n\tVvd0AtCgXcmmZ6NCDlj6uCMfQ2MhT2N1YSEZKOd3s06Z00/R5mr2kOMvMBOXRSNZp1Lc\n\tNymZNKA1bnvM8N69GfvywoX3EJ0bfZIFvddwfk+lw3+aA5F/S0fSHFKZ00+zONOFHGDF\n\tSvqCKMZ0dgwju/zjHthJthP0L3tIcITDYShhJX+g5YrZly6clW5mDPOwJuK84PC6vaqN\n\tWD6GFdmhwbu/dHiPN2gCASX11wEUSvblKBgR0u2aVezgudpQjxI5ANPl+1oDcy3n44Tf\n\tSw== ",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=marvell.onmicrosoft.com; s=selector1-marvell-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=eBc0+wm+i/x2txsfI6/kDMABRaxRJXgqTRHu/6d/W3w=;\n\tb=UQlrvyoySZLK756tGUMxtETtCh5JArm1F4UNSExWVfe7+WYCluHCdtjOVUx3LrSel2XnEVymL4C//HtQD0k7dAJDDZ9a0atX2MiB5pWJL2F/2Yf6d+O1KcbqBu9lxUG9wQso/uEx+kS4D/cjdxxSzfBiHCiP/E6Mz8DfDkBMlBA="
        ],
        "From": "Anoob Joseph <anoobj@marvell.com>",
        "To": "Akhil Goyal <akhil.goyal@nxp.com>, Pablo de Lara\n\t<pablo.de.lara.guarch@intel.com>",
        "CC": "Anoob Joseph <anoobj@marvell.com>, Jerin Jacob Kollanukkaran\n\t<jerinj@marvell.com>,\n\tNarayana Prasad Raju Athreya <pathreya@marvell.com>, \n\tShally Verma <shallyv@marvell.com>, \"dev@dpdk.org\" <dev@dpdk.org>",
        "Thread-Topic": "[PATCH] crypto/octeontx: use distinct metabuf pool for each\n\tqueue",
        "Thread-Index": "AQHU9ZcMzMZFzQhwj0uM/ETebOLGoQ==",
        "Date": "Thu, 18 Apr 2019 03:30:19 +0000",
        "Message-ID": "<20190418032953.2102-1-anoobj@marvell.com>",
        "Accept-Language": "en-IN, en-US",
        "Content-Language": "en-US",
        "X-MS-Has-Attach": "",
        "X-MS-TNEF-Correlator": "",
        "x-clientproxiedby": "BMXPR01CA0085.INDPRD01.PROD.OUTLOOK.COM\n\t(2603:1096:b00:54::25) To MN2PR18MB2877.namprd18.prod.outlook.com\n\t(2603:10b6:208:3b::26)",
        "x-ms-exchange-messagesentrepresentingtype": "1",
        "x-mailer": "git-send-email 2.9.5",
        "x-originating-ip": "[115.113.156.2]",
        "x-ms-publictraffictype": "Email",
        "x-ms-office365-filtering-correlation-id": "9af9057a-6368-41c6-0f9b-08d6c3ae2e3c",
        "x-microsoft-antispam": "BCL:0; PCL:0;\n\tRULEID:(2390118)(7020095)(4652040)(8989299)(5600141)(711020)(4605104)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);\n\tSRVR:MN2PR18MB2415; ",
        "x-ms-traffictypediagnostic": "MN2PR18MB2415:",
        "x-microsoft-antispam-prvs": "<MN2PR18MB2415A6ED1B1480B19A254AA2DF260@MN2PR18MB2415.namprd18.prod.outlook.com>",
        "x-forefront-prvs": "0011612A55",
        "x-forefront-antispam-report": "SFV:NSPM;\n\tSFS:(10009020)(376002)(366004)(39860400002)(136003)(396003)(346002)(189003)(199004)(81166006)(4326008)(14454004)(55236004)(7736002)(6506007)(99286004)(25786009)(478600001)(53936002)(71200400001)(53946003)(386003)(71190400001)(305945005)(102836004)(1076003)(186003)(30864003)(6116002)(68736007)(6512007)(97736004)(50226002)(6436002)(256004)(5660300002)(2906002)(14444005)(26005)(476003)(2616005)(52116002)(86362001)(8936002)(8676002)(81156014)(316002)(110136005)(36756003)(54906003)(486006)(6486002)(66066001)(3846002);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:MN2PR18MB2415;\n\tH:MN2PR18MB2877.namprd18.prod.outlook.com; FPR:; SPF:None; LANG:en;\n\tPTR:InfoNoRecords; MX:1; A:1; ",
        "received-spf": "None (protection.outlook.com: marvell.com does not designate\n\tpermitted sender hosts)",
        "x-ms-exchange-senderadcheck": "1",
        "x-microsoft-antispam-message-info": "Tj7z1+gX9DkzzCoCQNbx/9clbgZLD/0RcUMOjmFLRMvRQpJJuhGpv/WFdSz7xxPbBrkA9WcPt2V8c+/LMU4i5eBEpqSzZk0i9Uv4xzaD9fc5GijMOHzW36VgUrygH7wVBAKH6ELPPWAePHj+nIEv2WZtkGBK+voNVmcwUkD+pdYcrk66ncyVLtaTp/+EHPlUUEpK8hLKsV0vx8KE72delDo9jVapD5HZSIg45g6BHSwp2LSosVu2Bt4hYf75coJfU6Oed7OvTKqGNPBYSEDTcd2dIprhabqRfMUbtuuaVs79lONQ+IuythYaK+a+tFtpZJJOiLCrZQVYnaW40M+Xtfn3DQGzF4iAX73Z6a5R3R2O7UuVUAXQ3Vi4bpCZdYW6cKBV3DPCcmkqFuMPjPf4//3xgaI1t3clDLp3tZwATms=",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "base64",
        "MIME-Version": "1.0",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "9af9057a-6368-41c6-0f9b-08d6c3ae2e3c",
        "X-MS-Exchange-CrossTenant-originalarrivaltime": "18 Apr 2019 03:30:20.0477\n\t(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": "MN2PR18MB2415",
        "X-OriginatorOrg": "marvell.com",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10434:, ,\n\tdefinitions=2019-04-18_02:, , signatures=0",
        "Subject": "[dpdk-dev] [PATCH] crypto/octeontx: use distinct metabuf pool for\n\teach 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>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "The metabuf pool is shared across all queue pairs belonging to the\nPMD. In order to prevent one queue pair from starving another,\nuse a distinct mempool for each queue pair.\n\nFixes: 273487f7b381 (\"crypto/octeontx: add global resource init\")\n\nSigned-off-by: Anoob Joseph <anoobj@marvell.com>\n---\n drivers/common/cpt/cpt_common.h                   |  10 ++-\n drivers/common/cpt/cpt_ucode.h                    |  24 +++--\n drivers/crypto/octeontx/otx_cryptodev.c           |   3 -\n drivers/crypto/octeontx/otx_cryptodev_hw_access.c | 105 ++++++++++++++++++++--\n drivers/crypto/octeontx/otx_cryptodev_hw_access.h |   7 +-\n drivers/crypto/octeontx/otx_cryptodev_ops.c       |  98 ++------------------\n drivers/crypto/octeontx/otx_cryptodev_ops.h       |   3 -\n 7 files changed, 127 insertions(+), 123 deletions(-)",
    "diff": "diff --git a/drivers/common/cpt/cpt_common.h b/drivers/common/cpt/cpt_common.h\r\nindex ceb32f2..32f23ac 100644\r\n--- a/drivers/common/cpt/cpt_common.h\r\n+++ b/drivers/common/cpt/cpt_common.h\r\n@@ -5,6 +5,8 @@\r\n #ifndef _CPT_COMMON_H_\r\n #define _CPT_COMMON_H_\r\n \r\n+#include <rte_mempool.h>\r\n+\r\n /*\r\n  * This file defines common macros and structs\r\n  */\r\n@@ -38,10 +40,10 @@\r\n \r\n #define MOD_INC(i, l)   ((i) == (l - 1) ? (i) = 0 : (i)++)\r\n \r\n-struct cptvf_meta_info {\r\n-\tvoid *cptvf_meta_pool;\r\n-\tint cptvf_op_mlen;\r\n-\tint cptvf_op_sb_mlen;\r\n+struct cpt_qp_meta_info {\r\n+\tstruct rte_mempool *pool;\r\n+\tint sg_mlen;\r\n+\tint lb_mlen;\r\n };\r\n \r\n struct rid {\r\ndiff --git a/drivers/common/cpt/cpt_ucode.h b/drivers/common/cpt/cpt_ucode.h\r\nindex 239c5df..f21352e 100644\r\n--- a/drivers/common/cpt/cpt_ucode.h\r\n+++ b/drivers/common/cpt/cpt_ucode.h\r\n@@ -3147,7 +3147,7 @@ prepare_iov_from_pkt_inplace(struct rte_mbuf *pkt,\r\n static __rte_always_inline int\r\n fill_fc_params(struct rte_crypto_op *cop,\r\n \t       struct cpt_sess_misc *sess_misc,\r\n-\t       struct cptvf_meta_info *cpt_m_info,\r\n+\t       struct cpt_qp_meta_info *m_info,\r\n \t       void **mdata_ptr,\r\n \t       void **prep_req)\r\n {\r\n@@ -3365,15 +3365,11 @@ fill_fc_params(struct rte_crypto_op *cop,\r\n \t}\r\n \r\n \tif (likely(flags & SINGLE_BUF_HEADTAILROOM))\r\n-\t\tmdata = alloc_op_meta(m_src,\r\n-\t\t\t\t      &fc_params.meta_buf,\r\n-\t\t\t\t      cpt_m_info->cptvf_op_sb_mlen,\r\n-\t\t\t\t      cpt_m_info->cptvf_meta_pool);\r\n+\t\tmdata = alloc_op_meta(m_src, &fc_params.meta_buf,\r\n+\t\t\t\t      m_info->lb_mlen, m_info->pool);\r\n \telse\r\n-\t\tmdata = alloc_op_meta(NULL,\r\n-\t\t\t\t      &fc_params.meta_buf,\r\n-\t\t\t\t      cpt_m_info->cptvf_op_mlen,\r\n-\t\t\t\t      cpt_m_info->cptvf_meta_pool);\r\n+\t\tmdata = alloc_op_meta(NULL, &fc_params.meta_buf,\r\n+\t\t\t\t      m_info->sg_mlen, m_info->pool);\r\n \r\n \tif (unlikely(mdata == NULL)) {\r\n \t\tCPT_LOG_DP_ERR(\"Error allocating meta buffer for request\");\r\n@@ -3410,7 +3406,7 @@ fill_fc_params(struct rte_crypto_op *cop,\r\n \treturn 0;\r\n \r\n free_mdata_and_exit:\r\n-\tfree_op_meta(mdata, cpt_m_info->cptvf_meta_pool);\r\n+\tfree_op_meta(mdata, m_info->pool);\r\n err_exit:\r\n \treturn ret;\r\n }\r\n@@ -3521,7 +3517,7 @@ find_kasumif9_direction_and_length(uint8_t *src,\r\n static __rte_always_inline int\r\n fill_digest_params(struct rte_crypto_op *cop,\r\n \t\t   struct cpt_sess_misc *sess,\r\n-\t\t   struct cptvf_meta_info *cpt_m_info,\r\n+\t\t   struct cpt_qp_meta_info *m_info,\r\n \t\t   void **mdata_ptr,\r\n \t\t   void **prep_req)\r\n {\r\n@@ -3547,8 +3543,8 @@ fill_digest_params(struct rte_crypto_op *cop,\r\n \tm_src = sym_op->m_src;\r\n \r\n \t/* For just digest lets force mempool alloc */\r\n-\tmdata = alloc_op_meta(NULL, &params.meta_buf, cpt_m_info->cptvf_op_mlen,\r\n-\t\t\t      cpt_m_info->cptvf_meta_pool);\r\n+\tmdata = alloc_op_meta(NULL, &params.meta_buf, m_info->sg_mlen,\r\n+\t\t\t      m_info->pool);\r\n \tif (mdata == NULL) {\r\n \t\tret = -ENOMEM;\r\n \t\tgoto err_exit;\r\n@@ -3683,7 +3679,7 @@ fill_digest_params(struct rte_crypto_op *cop,\r\n \treturn 0;\r\n \r\n free_mdata_and_exit:\r\n-\tfree_op_meta(mdata, cpt_m_info->cptvf_meta_pool);\r\n+\tfree_op_meta(mdata, m_info->pool);\r\n err_exit:\r\n \treturn ret;\r\n }\r\ndiff --git a/drivers/crypto/octeontx/otx_cryptodev.c b/drivers/crypto/octeontx/otx_cryptodev.c\r\nindex b201e0a..fc64a5f 100644\r\n--- a/drivers/crypto/octeontx/otx_cryptodev.c\r\n+++ b/drivers/crypto/octeontx/otx_cryptodev.c\r\n@@ -104,9 +104,6 @@ otx_cpt_pci_remove(struct rte_pci_device *pci_dev)\r\n \tcryptodev->device = NULL;\r\n \tcryptodev->data = NULL;\r\n \r\n-\t/* free metapool memory */\r\n-\tcleanup_global_resources();\r\n-\r\n \treturn 0;\r\n }\r\n \r\ndiff --git a/drivers/crypto/octeontx/otx_cryptodev_hw_access.c b/drivers/crypto/octeontx/otx_cryptodev_hw_access.c\r\nindex 18f2e6b..eba6293 100644\r\n--- a/drivers/crypto/octeontx/otx_cryptodev_hw_access.c\r\n+++ b/drivers/crypto/octeontx/otx_cryptodev_hw_access.c\r\n@@ -7,7 +7,9 @@\r\n \r\n #include <rte_branch_prediction.h>\r\n #include <rte_common.h>\r\n+#include <rte_cryptodev.h>\r\n #include <rte_errno.h>\r\n+#include <rte_mempool.h>\r\n #include <rte_memzone.h>\r\n #include <rte_string_fns.h>\r\n \r\n@@ -15,8 +17,11 @@\r\n #include \"otx_cryptodev_mbox.h\"\r\n \r\n #include \"cpt_pmd_logs.h\"\r\n+#include \"cpt_pmd_ops_helper.h\"\r\n #include \"cpt_hw_types.h\"\r\n \r\n+#define METABUF_POOL_CACHE_SIZE\t512\r\n+\r\n /*\r\n  * VF HAL functions\r\n  * Access its own BAR0/4 registers by passing VF number as 0.\r\n@@ -395,12 +400,90 @@ otx_cpt_deinit_device(void *dev)\r\n \treturn 0;\r\n }\r\n \r\n+static int\r\n+otx_cpt_metabuf_mempool_create(const struct rte_cryptodev *dev,\r\n+\t\t\t       struct cpt_instance *instance, uint8_t qp_id,\r\n+\t\t\t       int nb_elements)\r\n+{\r\n+\tchar mempool_name[RTE_MEMPOOL_NAMESIZE];\r\n+\tint sg_mlen, lb_mlen, max_mlen, ret;\r\n+\tstruct cpt_qp_meta_info *meta_info;\r\n+\tstruct rte_mempool *pool;\r\n+\r\n+\t/* Get meta len for scatter gather mode */\r\n+\tsg_mlen = cpt_pmd_ops_helper_get_mlen_sg_mode();\r\n+\r\n+\t/* Extra 32B saved for future considerations */\r\n+\tsg_mlen += 4 * sizeof(uint64_t);\r\n+\r\n+\t/* Get meta len for linear buffer (direct) mode */\r\n+\tlb_mlen = cpt_pmd_ops_helper_get_mlen_direct_mode();\r\n+\r\n+\t/* Extra 32B saved for future considerations */\r\n+\tlb_mlen += 4 * sizeof(uint64_t);\r\n+\r\n+\t/* Check max requirement for meta buffer */\r\n+\tmax_mlen = RTE_MAX(lb_mlen, sg_mlen);\r\n+\r\n+\t/* Allocate mempool */\r\n+\r\n+\tsnprintf(mempool_name, RTE_MEMPOOL_NAMESIZE, \"otx_cpt_mb_%u:%u\",\r\n+\t\t dev->data->dev_id, qp_id);\r\n+\r\n+\tpool = rte_mempool_create_empty(mempool_name, nb_elements, max_mlen,\r\n+\t\t\t\t\tMETABUF_POOL_CACHE_SIZE, 0,\r\n+\t\t\t\t\trte_socket_id(), 0);\r\n+\r\n+\tif (pool == NULL) {\r\n+\t\tCPT_LOG_ERR(\"Could not create mempool for metabuf\");\r\n+\t\treturn rte_errno;\r\n+\t}\r\n+\r\n+\tret = rte_mempool_set_ops_byname(pool, RTE_MBUF_DEFAULT_MEMPOOL_OPS,\r\n+\t\t\t\t\t NULL);\r\n+\tif (ret) {\r\n+\t\tCPT_LOG_ERR(\"Could not set mempool ops\");\r\n+\t\tgoto mempool_free;\r\n+\t}\r\n+\r\n+\tret = rte_mempool_populate_default(pool);\r\n+\tif (ret <= 0) {\r\n+\t\tCPT_LOG_ERR(\"Could not populate metabuf pool\");\r\n+\t\tgoto mempool_free;\r\n+\t}\r\n+\r\n+\tmeta_info = &instance->meta_info;\r\n+\r\n+\tmeta_info->pool = pool;\r\n+\tmeta_info->lb_mlen = lb_mlen;\r\n+\tmeta_info->sg_mlen = sg_mlen;\r\n+\r\n+\treturn 0;\r\n+\r\n+mempool_free:\r\n+\trte_mempool_free(pool);\r\n+\treturn ret;\r\n+}\r\n+\r\n+static void\r\n+otx_cpt_metabuf_mempool_destroy(struct cpt_instance *instance)\r\n+{\r\n+\tstruct cpt_qp_meta_info *meta_info = &instance->meta_info;\r\n+\r\n+\trte_mempool_free(meta_info->pool);\r\n+\r\n+\tmeta_info->pool = NULL;\r\n+\tmeta_info->lb_mlen = 0;\r\n+\tmeta_info->sg_mlen = 0;\r\n+}\r\n+\r\n int\r\n-otx_cpt_get_resource(void *dev, uint8_t group, struct cpt_instance **instance)\r\n+otx_cpt_get_resource(const struct rte_cryptodev *dev, uint8_t group,\r\n+\t\t     struct cpt_instance **instance, uint16_t qp_id)\r\n {\r\n \tint ret = -ENOENT, len, qlen, i;\r\n \tint chunk_len, chunks, chunk_size;\r\n-\tstruct cpt_vf *cptvf = (struct cpt_vf *)dev;\r\n+\tstruct cpt_vf *cptvf = dev->data->dev_private;\r\n \tstruct cpt_instance *cpt_instance;\r\n \tstruct command_chunk *chunk_head = NULL, *chunk_prev = NULL;\r\n \tstruct command_chunk *chunk = NULL;\r\n@@ -446,7 +529,7 @@ otx_cpt_get_resource(void *dev, uint8_t group, struct cpt_instance **instance)\r\n \t\t\t\t\t RTE_CACHE_LINE_SIZE);\r\n \tif (!rz) {\r\n \t\tret = rte_errno;\r\n-\t\tgoto cleanup;\r\n+\t\tgoto exit;\r\n \t}\r\n \r\n \tmem = rz->addr;\r\n@@ -457,6 +540,12 @@ otx_cpt_get_resource(void *dev, uint8_t group, struct cpt_instance **instance)\r\n \r\n \tcpt_instance->rsvd = (uintptr_t)rz;\r\n \r\n+\tret = otx_cpt_metabuf_mempool_create(dev, cpt_instance, qp_id, qlen);\r\n+\tif (ret) {\r\n+\t\tCPT_LOG_ERR(\"Could not create mempool for metabuf\");\r\n+\t\tgoto memzone_free;\r\n+\t}\r\n+\r\n \t/* Pending queue setup */\r\n \tcptvf->pqueue.rid_queue = (struct rid *)mem;\r\n \tcptvf->pqueue.enq_tail = 0;\r\n@@ -513,7 +602,7 @@ otx_cpt_get_resource(void *dev, uint8_t group, struct cpt_instance **instance)\r\n \t\tCPT_LOG_ERR(\"Failed to initialize CPT VQ of device %s\",\r\n \t\t\t    cptvf->dev_name);\r\n \t\tret = -EBUSY;\r\n-\t\tgoto cleanup;\r\n+\t\tgoto mempool_destroy;\r\n \t}\r\n \r\n \t*instance = cpt_instance;\r\n@@ -521,8 +610,12 @@ otx_cpt_get_resource(void *dev, uint8_t group, struct cpt_instance **instance)\r\n \tCPT_LOG_DP_DEBUG(\"Crypto device (%s) initialized\", cptvf->dev_name);\r\n \r\n \treturn 0;\r\n-cleanup:\r\n+\r\n+mempool_destroy:\r\n+\totx_cpt_metabuf_mempool_destroy(cpt_instance);\r\n+memzone_free:\r\n \trte_memzone_free(rz);\r\n+exit:\r\n \t*instance = NULL;\r\n \treturn ret;\r\n }\r\n@@ -540,6 +633,8 @@ otx_cpt_put_resource(struct cpt_instance *instance)\r\n \r\n \tCPT_LOG_DP_DEBUG(\"Releasing cpt device %s\", cptvf->dev_name);\r\n \r\n+\totx_cpt_metabuf_mempool_destroy(instance);\r\n+\r\n \trz = (struct rte_memzone *)instance->rsvd;\r\n \trte_memzone_free(rz);\r\n \treturn 0;\r\ndiff --git a/drivers/crypto/octeontx/otx_cryptodev_hw_access.h b/drivers/crypto/octeontx/otx_cryptodev_hw_access.h\r\nindex dea4cba..63c199e 100644\r\n--- a/drivers/crypto/octeontx/otx_cryptodev_hw_access.h\r\n+++ b/drivers/crypto/octeontx/otx_cryptodev_hw_access.h\r\n@@ -7,6 +7,7 @@\r\n #include <stdbool.h>\r\n \r\n #include <rte_branch_prediction.h>\r\n+#include <rte_cryptodev.h>\r\n #include <rte_cycles.h>\r\n #include <rte_io.h>\r\n #include <rte_memory.h>\r\n@@ -41,6 +42,7 @@ struct cpt_instance {\r\n \tuintptr_t rsvd;\r\n \tstruct rte_mempool *sess_mp;\r\n \tstruct rte_mempool *sess_mp_priv;\r\n+\tstruct cpt_qp_meta_info meta_info;\r\n };\r\n \r\n struct command_chunk {\r\n@@ -76,8 +78,6 @@ struct cpt_vf {\r\n \tstruct command_queue cqueue;\r\n \t/** Pending queue information */\r\n \tstruct pending_queue pqueue;\r\n-\t/** Meta information per vf */\r\n-\tstruct cptvf_meta_info meta_info;\r\n \r\n \t/** Below fields are accessed only in control path */\r\n \r\n@@ -156,7 +156,8 @@ int\r\n otx_cpt_deinit_device(void *dev);\r\n \r\n int\r\n-otx_cpt_get_resource(void *dev, uint8_t group, struct cpt_instance **instance);\r\n+otx_cpt_get_resource(const struct rte_cryptodev *dev, uint8_t group,\r\n+\t\t     struct cpt_instance **instance, uint16_t qp_id);\r\n \r\n int\r\n otx_cpt_put_resource(struct cpt_instance *instance);\r\ndiff --git a/drivers/crypto/octeontx/otx_cryptodev_ops.c b/drivers/crypto/octeontx/otx_cryptodev_ops.c\r\nindex 0f9f2a2..9628ffa 100644\r\n--- a/drivers/crypto/octeontx/otx_cryptodev_ops.c\r\n+++ b/drivers/crypto/octeontx/otx_cryptodev_ops.c\r\n@@ -6,10 +6,11 @@\r\n #include <rte_bus_pci.h>\r\n #include <rte_cryptodev.h>\r\n #include <rte_cryptodev_pmd.h>\r\n+#include <rte_errno.h>\r\n #include <rte_malloc.h>\r\n+#include <rte_mempool.h>\r\n \r\n #include \"cpt_pmd_logs.h\"\r\n-#include \"cpt_pmd_ops_helper.h\"\r\n #include \"cpt_ucode.h\"\r\n \r\n #include \"otx_cryptodev.h\"\r\n@@ -17,68 +18,11 @@\r\n #include \"otx_cryptodev_hw_access.h\"\r\n #include \"otx_cryptodev_ops.h\"\r\n \r\n-static int otx_cryptodev_probe_count;\r\n-static rte_spinlock_t otx_probe_count_lock = RTE_SPINLOCK_INITIALIZER;\r\n-\r\n-static struct rte_mempool *otx_cpt_meta_pool;\r\n-static int otx_cpt_op_mlen;\r\n-static int otx_cpt_op_sb_mlen;\r\n-\r\n /* Forward declarations */\r\n \r\n static int\r\n otx_cpt_que_pair_release(struct rte_cryptodev *dev, uint16_t que_pair_id);\r\n \r\n-/*\r\n- * Initializes global variables used by fast-path code\r\n- *\r\n- * @return\r\n- *   - 0 on success, errcode on error\r\n- */\r\n-static int\r\n-init_global_resources(void)\r\n-{\r\n-\t/* Get meta len for scatter gather mode */\r\n-\totx_cpt_op_mlen = cpt_pmd_ops_helper_get_mlen_sg_mode();\r\n-\r\n-\t/* Extra 4B saved for future considerations */\r\n-\totx_cpt_op_mlen += 4 * sizeof(uint64_t);\r\n-\r\n-\totx_cpt_meta_pool = rte_mempool_create(\"cpt_metabuf-pool\", 4096 * 16,\r\n-\t\t\t\t\t       otx_cpt_op_mlen, 512, 0,\r\n-\t\t\t\t\t       NULL, NULL, NULL, NULL,\r\n-\t\t\t\t\t       SOCKET_ID_ANY, 0);\r\n-\tif (!otx_cpt_meta_pool) {\r\n-\t\tCPT_LOG_ERR(\"cpt metabuf pool not created\");\r\n-\t\treturn -ENOMEM;\r\n-\t}\r\n-\r\n-\t/* Get meta len for direct mode */\r\n-\totx_cpt_op_sb_mlen = cpt_pmd_ops_helper_get_mlen_direct_mode();\r\n-\r\n-\t/* Extra 4B saved for future considerations */\r\n-\totx_cpt_op_sb_mlen += 4 * sizeof(uint64_t);\r\n-\r\n-\treturn 0;\r\n-}\r\n-\r\n-void\r\n-cleanup_global_resources(void)\r\n-{\r\n-\t/* Take lock */\r\n-\trte_spinlock_lock(&otx_probe_count_lock);\r\n-\r\n-\t/* Decrement the cryptodev count */\r\n-\totx_cryptodev_probe_count--;\r\n-\r\n-\t/* Free buffers */\r\n-\tif (otx_cpt_meta_pool && otx_cryptodev_probe_count == 0)\r\n-\t\trte_mempool_free(otx_cpt_meta_pool);\r\n-\r\n-\t/* Free lock */\r\n-\trte_spinlock_unlock(&otx_probe_count_lock);\r\n-}\r\n-\r\n /* Alarm routines */\r\n \r\n static void\r\n@@ -187,7 +131,6 @@ otx_cpt_que_pair_setup(struct rte_cryptodev *dev,\r\n \t\t       const struct rte_cryptodev_qp_conf *qp_conf,\r\n \t\t       int socket_id __rte_unused)\r\n {\r\n-\tvoid *cptvf = dev->data->dev_private;\r\n \tstruct cpt_instance *instance = NULL;\r\n \tstruct rte_pci_device *pci_dev;\r\n \tint ret = -1;\r\n@@ -213,7 +156,7 @@ otx_cpt_que_pair_setup(struct rte_cryptodev *dev,\r\n \t\treturn -EIO;\r\n \t}\r\n \r\n-\tret = otx_cpt_get_resource(cptvf, 0, &instance);\r\n+\tret = otx_cpt_get_resource(dev, 0, &instance, que_pair_id);\r\n \tif (ret != 0 || instance == NULL) {\r\n \t\tCPT_LOG_ERR(\"Error getting instance handle from device %s : \"\r\n \t\t\t    \"ret = %d\", dev->data->name, ret);\r\n@@ -384,7 +327,6 @@ otx_cpt_enq_single_sym(struct cpt_instance *instance,\r\n \tvoid *prep_req, *mdata = NULL;\r\n \tint ret = 0;\r\n \tuint64_t cpt_op;\r\n-\tstruct cpt_vf *cptvf = (struct cpt_vf *)instance;\r\n \r\n \tsess = (struct cpt_sess_misc *)\r\n \t\t\tget_sym_session_private_data(sym_op->session,\r\n@@ -393,10 +335,10 @@ otx_cpt_enq_single_sym(struct cpt_instance *instance,\r\n \tcpt_op = sess->cpt_op;\r\n \r\n \tif (likely(cpt_op & CPT_OP_CIPHER_MASK))\r\n-\t\tret = fill_fc_params(op, sess, &cptvf->meta_info, &mdata,\r\n+\t\tret = fill_fc_params(op, sess, &instance->meta_info, &mdata,\r\n \t\t\t\t     &prep_req);\r\n \telse\r\n-\t\tret = fill_digest_params(op, sess, &cptvf->meta_info,\r\n+\t\tret = fill_digest_params(op, sess, &instance->meta_info,\r\n \t\t\t\t\t &mdata, &prep_req);\r\n \r\n \tif (unlikely(ret)) {\r\n@@ -410,7 +352,7 @@ otx_cpt_enq_single_sym(struct cpt_instance *instance,\r\n \r\n \tif (unlikely(ret)) {\r\n \t\t/* Buffer allocated for request preparation need to be freed */\r\n-\t\tfree_op_meta(mdata, cptvf->meta_info.cptvf_meta_pool);\r\n+\t\tfree_op_meta(mdata, instance->meta_info.pool);\r\n \t\treturn ret;\r\n \t}\r\n \r\n@@ -618,7 +560,7 @@ otx_cpt_pkt_dequeue(void *qptr, struct rte_crypto_op **ops, uint16_t nb_ops)\r\n \t\t\trte_mempool_put(instance->sess_mp, cop->sym->session);\r\n \t\t\tcop->sym->session = NULL;\r\n \t\t}\r\n-\t\tfree_op_meta(metabuf, cptvf->meta_info.cptvf_meta_pool);\r\n+\t\tfree_op_meta(metabuf, instance->meta_info.pool);\r\n \t}\r\n \r\n \treturn nb_completed;\r\n@@ -644,14 +586,6 @@ static struct rte_cryptodev_ops cptvf_ops = {\r\n \t.sym_session_clear = otx_cpt_session_clear\r\n };\r\n \r\n-static void\r\n-otx_cpt_common_vars_init(struct cpt_vf *cptvf)\r\n-{\r\n-\tcptvf->meta_info.cptvf_meta_pool = otx_cpt_meta_pool;\r\n-\tcptvf->meta_info.cptvf_op_mlen = otx_cpt_op_mlen;\r\n-\tcptvf->meta_info.cptvf_op_sb_mlen = otx_cpt_op_sb_mlen;\r\n-}\r\n-\r\n int\r\n otx_cpt_dev_create(struct rte_cryptodev *c_dev)\r\n {\r\n@@ -699,20 +633,6 @@ otx_cpt_dev_create(struct rte_cryptodev *c_dev)\r\n \t/* Start off timer for mailbox interrupts */\r\n \totx_cpt_periodic_alarm_start(cptvf);\r\n \r\n-\trte_spinlock_lock(&otx_probe_count_lock);\r\n-\tif (!otx_cryptodev_probe_count) {\r\n-\t\tret = init_global_resources();\r\n-\t\tif (ret) {\r\n-\t\t\trte_spinlock_unlock(&otx_probe_count_lock);\r\n-\t\t\tgoto init_fail;\r\n-\t\t}\r\n-\t}\r\n-\totx_cryptodev_probe_count++;\r\n-\trte_spinlock_unlock(&otx_probe_count_lock);\r\n-\r\n-\t/* Initialize data path variables used by common code */\r\n-\totx_cpt_common_vars_init(cptvf);\r\n-\r\n \tc_dev->dev_ops = &cptvf_ops;\r\n \r\n \tc_dev->enqueue_burst = otx_cpt_pkt_enqueue;\r\n@@ -730,10 +650,6 @@ otx_cpt_dev_create(struct rte_cryptodev *c_dev)\r\n \r\n \treturn 0;\r\n \r\n-init_fail:\r\n-\totx_cpt_periodic_alarm_stop(cptvf);\r\n-\totx_cpt_deinit_device(cptvf);\r\n-\r\n fail:\r\n \tif (cptvf) {\r\n \t\t/* Free private data allocated */\r\ndiff --git a/drivers/crypto/octeontx/otx_cryptodev_ops.h b/drivers/crypto/octeontx/otx_cryptodev_ops.h\r\nindex b3efecf..768ec4f 100644\r\n--- a/drivers/crypto/octeontx/otx_cryptodev_ops.h\r\n+++ b/drivers/crypto/octeontx/otx_cryptodev_ops.h\r\n@@ -9,9 +9,6 @@\r\n #define OTX_CPT_MIN_TAILROOM_REQ\t(8)\r\n #define CPT_NUM_QS_PER_VF\t\t(1)\r\n \r\n-void\r\n-cleanup_global_resources(void);\r\n-\r\n int\r\n otx_cpt_dev_create(struct rte_cryptodev *c_dev);\r\n \r\n",
    "prefixes": []
}