get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 100009,
    "url": "http://patches.dpdk.org/api/patches/100009/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20210929163035.608387-3-ciara.power@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20210929163035.608387-3-ciara.power@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210929163035.608387-3-ciara.power@intel.com",
    "date": "2021-09-29T16:30:27",
    "name": "[v3,02/10] crypto/ipsec_mb: add multiprocess support",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "ea3f08ce33001ded46d972cd092766acfd1e1d4d",
    "submitter": {
        "id": 978,
        "url": "http://patches.dpdk.org/api/people/978/?format=api",
        "name": "Power, Ciara",
        "email": "ciara.power@intel.com"
    },
    "delegate": {
        "id": 6690,
        "url": "http://patches.dpdk.org/api/users/6690/?format=api",
        "username": "akhil",
        "first_name": "akhil",
        "last_name": "goyal",
        "email": "gakhil@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20210929163035.608387-3-ciara.power@intel.com/mbox/",
    "series": [
        {
            "id": 19269,
            "url": "http://patches.dpdk.org/api/series/19269/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=19269",
            "date": "2021-09-29T16:30:25",
            "name": "drivers/crypto: introduce ipsec_mb framework",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/19269/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/100009/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/100009/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 493BAA0547;\n\tWed, 29 Sep 2021 18:30:55 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 2BF85410FF;\n\tWed, 29 Sep 2021 18:30:47 +0200 (CEST)",
            "from mga06.intel.com (mga06.intel.com [134.134.136.31])\n by mails.dpdk.org (Postfix) with ESMTP id 55E63410ED\n for <dev@dpdk.org>; Wed, 29 Sep 2021 18:30:44 +0200 (CEST)",
            "from orsmga002.jf.intel.com ([10.7.209.21])\n by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 29 Sep 2021 09:30:43 -0700",
            "from silpixa00400355.ir.intel.com (HELO\n silpixa00400355.ger.corp.intel.com) ([10.237.222.87])\n by orsmga002.jf.intel.com with ESMTP; 29 Sep 2021 09:30:42 -0700"
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6200,9189,10122\"; a=\"285997937\"",
            "E=Sophos;i=\"5.85,332,1624345200\"; d=\"scan'208\";a=\"285997937\"",
            "E=Sophos;i=\"5.85,332,1624345200\"; d=\"scan'208\";a=\"457092740\""
        ],
        "X-ExtLoop1": "1",
        "From": "Ciara Power <ciara.power@intel.com>",
        "To": "dev@dpdk.org",
        "Cc": "roy.fan.zhang@intel.com, piotrx.bronowski@intel.com, gakhil@marvell.com,\n Ciara Power <ciara.power@intel.com>,\n Pablo de Lara <pablo.de.lara.guarch@intel.com>,\n Anatoly Burakov <anatoly.burakov@intel.com>",
        "Date": "Wed, 29 Sep 2021 16:30:27 +0000",
        "Message-Id": "<20210929163035.608387-3-ciara.power@intel.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20210929163035.608387-1-ciara.power@intel.com>",
        "References": "<20210727083832.291687-1-roy.fan.zhang@intel.com>\n <20210929163035.608387-1-ciara.power@intel.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v3 02/10] crypto/ipsec_mb: add multiprocess\n support",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "The ipsec_mb SW PMD now has multiprocess support.\nThe queue-pair IMB_MGR is stored in a memzone instead of being allocated\nexternally by the Intel IPSec MB library, when v1.1 is used.\nIf v1.0 is used, multi process is not supported, and allocation is\ndone as before.\nThe secondary process needs to reconfigure the queue-pair to allow for\nIMB_MGR function pointers be updated.\n\nIntel IPsec MB library version 1.1 is required for this support.\n\nSigned-off-by: Ciara Power <ciara.power@intel.com>\n---\n doc/guides/rel_notes/release_21_11.rst        |   7 ++\n .../crypto/ipsec_mb/rte_ipsec_mb_pmd_ops.c    | 110 +++++++++++++++---\n .../ipsec_mb/rte_ipsec_mb_pmd_private.h       |   5 +\n 3 files changed, 106 insertions(+), 16 deletions(-)",
    "diff": "diff --git a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst\nindex 43d367bcad..3c9d7e19cb 100644\n--- a/doc/guides/rel_notes/release_21_11.rst\n+++ b/doc/guides/rel_notes/release_21_11.rst\n@@ -62,6 +62,13 @@ New Features\n   * Added bus-level parsing of the devargs syntax.\n   * Kept compatibility with the legacy syntax as parsing fallback.\n \n+* **Added multi-process support for IPsec-mb PMD.**\n+\n+  Added multi-process support to IPsec-mb PMD, which will add support\n+  for PMDs that are moved to use this shared framework.\n+  This feature makes use of an intel-ipsec-mb API found in v1.1,\n+  which is the minimum required version to use this multi-process support.\n+\n * **Updated Marvell cnxk crypto PMD.**\n \n   * Added AES-CBC SHA1-HMAC support in lookaside protocol (IPsec) for CN10K.\ndiff --git a/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_ops.c b/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_ops.c\nindex 1146297216..c7bcfd3dce 100644\n--- a/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_ops.c\n+++ b/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_ops.c\n@@ -9,6 +9,8 @@\n \n #include \"rte_ipsec_mb_pmd_private.h\"\n \n+#define IMB_MP_REQ_VER_STR \"1.1.0\"\n+\n /** Configure device */\n int\n ipsec_mb_pmd_config(__rte_unused struct rte_cryptodev *dev,\n@@ -98,10 +100,20 @@ ipsec_mb_pmd_qp_release(struct rte_cryptodev *dev, uint16_t qp_id)\n \tstruct ipsec_mb_qp *qp = dev->data->queue_pairs[qp_id];\n \tstruct rte_ring *r = NULL;\n \n-\tif (qp != NULL) {\n+\tif (qp != NULL && rte_eal_process_type() == RTE_PROC_PRIMARY) {\n \t\tr = rte_ring_lookup(qp->name);\n \t\tif (r)\n \t\t\trte_ring_free(r);\n+\n+#if IMB_VERSION(1, 1, 0) > IMB_VERSION_NUM\n+\t\tif (qp->mb_mgr)\n+\t\t\tfree_mb_mgr(qp->mb_mgr);\n+#else\n+\t\tif (qp->mb_mgr_mz) {\n+\t\t\trte_memzone_free(qp->mb_mgr_mz);\n+\t\t\tqp->mb_mgr = NULL;\n+\t\t}\n+#endif\n \t\trte_free(qp);\n \t\tdev->data->queue_pairs[qp_id] = NULL;\n \t}\n@@ -154,6 +166,42 @@ static struct rte_ring\n \t\t\t       RING_F_SP_ENQ | RING_F_SC_DEQ);\n }\n \n+#if IMB_VERSION(1, 1, 0) <= IMB_VERSION_NUM\n+static IMB_MGR *\n+ipsec_mb_pmd_alloc_mb_from_memzone(const struct rte_memzone **mb_mgr_mz,\n+\t\tconst char *mb_mgr_mz_name)\n+{\n+\tIMB_MGR *mb_mgr;\n+\n+\tif (rte_eal_process_type() ==  RTE_PROC_PRIMARY) {\n+\t\t*mb_mgr_mz = rte_memzone_lookup(mb_mgr_mz_name);\n+\t\tif (*mb_mgr_mz == NULL) {\n+\t\t\t*mb_mgr_mz = rte_memzone_reserve(mb_mgr_mz_name,\n+\t\t\timb_get_mb_mgr_size(),\n+\t\t\trte_socket_id(), 0);\n+\t\t}\n+\t\tif (*mb_mgr_mz == NULL) {\n+\t\t\tIPSEC_MB_LOG(DEBUG, \"Error allocating memzone for %s\",\n+\t\t\t\t\tmb_mgr_mz_name);\n+\t\t\treturn NULL;\n+\t\t}\n+\t\tmb_mgr = imb_set_pointers_mb_mgr((*mb_mgr_mz)->addr, 0, 1);\n+\t\tinit_mb_mgr_auto(mb_mgr, NULL);\n+\t} else {\n+\t\t*mb_mgr_mz = rte_memzone_lookup(mb_mgr_mz_name);\n+\t\tif (*mb_mgr_mz == NULL) {\n+\t\t\tIPSEC_MB_LOG(ERR,\n+\t\t\t\t\"Secondary can't find %s mz, did primary create it?\",\n+\t\t\t\tmb_mgr_mz_name);\n+\t\t\treturn NULL;\n+\t\t}\n+\t\tmb_mgr = imb_set_pointers_mb_mgr((*mb_mgr_mz)->addr, 0, 0);\n+\t\tinit_mb_mgr_auto(mb_mgr, NULL);\n+\t}\n+\treturn mb_mgr;\n+}\n+#endif\n+\n /** Setup a queue pair */\n int\n ipsec_mb_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,\n@@ -167,16 +215,44 @@ ipsec_mb_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,\n \tuint32_t qp_size;\n \tint ret = -1;\n \n-\t/* Free memory prior to re-allocation if needed. */\n-\tif (dev->data->queue_pairs[qp_id] != NULL)\n-\t\tipsec_mb_pmd_qp_release(dev, qp_id);\n+\tif (rte_eal_process_type() == RTE_PROC_SECONDARY) {\n+#if IMB_VERSION(1, 1, 0) > IMB_VERSION_NUM\n+\t\tIPSEC_MB_LOG(ERR, \"The intel-ipsec-mb version (%s) does not support multiprocess,\"\n+\t\t\t\t\"the minimum version required for this feature is %s.\",\n+\t\t\t\tIMB_VERSION_STR, IMB_MP_REQ_VER_STR);\n+\t\treturn -EINVAL;\n+#endif\n+\t\tif (dev->data->queue_pairs[qp_id] != NULL)\n+\t\t\tqp = dev->data->queue_pairs[qp_id];\n+\t} else {\n+\t\t/* Free memory prior to re-allocation if needed. */\n+\t\tif (dev->data->queue_pairs[qp_id] != NULL)\n+\t\t\tipsec_mb_pmd_qp_release(dev, qp_id);\n+\n+\t\tqp_size = sizeof(*qp) + pmd_data->qp_priv_size;\n+\t\t/* Allocate the queue pair data structure. */\n+\t\tqp = rte_zmalloc_socket(\"IPSEC PMD Queue Pair\", qp_size,\n+\t\t\t\t\tRTE_CACHE_LINE_SIZE, socket_id);\n+\t\tif (qp == NULL)\n+\t\t\treturn -ENOMEM;\n+\t}\n+\n+#if IMB_VERSION(1, 1, 0) > IMB_VERSION_NUM\n+\tqp->mb_mgr = alloc_init_mb_mgr();\n+#else\n+\tchar mz_name[IPSEC_MB_MAX_MZ_NAME];\n+\tsnprintf(mz_name, sizeof(mz_name), \"IMB_MGR_DEV_%d_QP_%d\",\n+\t\t\tdev->data->dev_id, qp_id);\n+\tqp->mb_mgr = ipsec_mb_pmd_alloc_mb_from_memzone(&(qp->mb_mgr_mz),\n+\t\t\tmz_name);\n+#endif\n+\tif (qp->mb_mgr == NULL) {\n+\t\tret = -ENOMEM;\n+\t\tgoto qp_setup_cleanup;\n+\t}\n \n-\tqp_size = sizeof(*qp) + pmd_data->qp_priv_size;\n-\t/* Allocate the queue pair data structure. */\n-\tqp = rte_zmalloc_socket(\"IPSEC PMD Queue Pair\", qp_size,\n-\t\t\t\tRTE_CACHE_LINE_SIZE, socket_id);\n-\tif (qp == NULL)\n-\t\treturn -ENOMEM;\n+\tif (rte_eal_process_type() == RTE_PROC_SECONDARY)\n+\t\treturn 0;\n \n \tqp->id = qp_id;\n \tdev->data->queue_pairs[qp_id] = qp;\n@@ -194,12 +270,6 @@ ipsec_mb_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,\n \t\tgoto qp_setup_cleanup;\n \t}\n \n-\tqp->mb_mgr = alloc_init_mb_mgr();\n-\tif (!qp->mb_mgr) {\n-\t\tret = -ENOMEM;\n-\t\tgoto qp_setup_cleanup;\n-\t}\n-\n \tmemset(&qp->stats, 0, sizeof(qp->stats));\n \n \tif (pmd_data->queue_pair_configure) {\n@@ -211,8 +281,15 @@ ipsec_mb_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,\n \treturn 0;\n \n qp_setup_cleanup:\n+#if IMB_VERSION(1, 1, 0) > IMB_VERSION_NUM\n \tif (qp->mb_mgr)\n \t\tfree_mb_mgr(qp->mb_mgr);\n+#else\n+\tif (rte_eal_process_type() == RTE_PROC_SECONDARY)\n+\t\treturn ret;\n+\tif (qp->mb_mgr_mz)\n+\t\trte_memzone_free(qp->mb_mgr_mz);\n+#endif\n \tif (qp)\n \t\trte_free(qp);\n \treturn ret;\n@@ -269,6 +346,7 @@ ipsec_mb_pmd_sym_session_configure(\n \n \tset_sym_session_private_data(sess, dev->driver_id, sess_private_data);\n \n+\tfree_mb_mgr(mb_mgr);\n \treturn 0;\n }\n \ndiff --git a/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_private.h b/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_private.h\nindex 754259aa59..35860b1b10 100644\n--- a/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_private.h\n+++ b/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_private.h\n@@ -18,6 +18,9 @@\n /* Maximum length for digest */\n #define DIGEST_LENGTH_MAX 64\n \n+/* Maximum length for memzone name */\n+#define IPSEC_MB_MAX_MZ_NAME 32\n+\n enum ipsec_mb_vector_mode {\n \tIPSEC_MB_NOT_SUPPORTED = 0,\n \tIPSEC_MB_SSE,\n@@ -95,6 +98,8 @@ struct ipsec_mb_qp {\n \t */\n \tIMB_MGR *mb_mgr;\n \t/* Multi buffer manager */\n+\tconst struct rte_memzone *mb_mgr_mz;\n+\t/* Shared memzone for storing mb_mgr */\n \t__extension__ uint8_t additional_data[0];\n \t/**< Storing PMD specific additional data */\n };\n",
    "prefixes": [
        "v3",
        "02/10"
    ]
}