get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 82620,
    "url": "https://patches.dpdk.org/api/patches/82620/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20201028102640.3191964-8-thomas@monjalon.net/",
    "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": "<20201028102640.3191964-8-thomas@monjalon.net>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20201028102640.3191964-8-thomas@monjalon.net",
    "date": "2020-10-28T10:26:32",
    "name": "[v4,07/15] net/ark: switch user data to dynamic mbuf fields",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "610018a48f6783199272930f273fcca4ce5c4840",
    "submitter": {
        "id": 685,
        "url": "https://patches.dpdk.org/api/people/685/?format=api",
        "name": "Thomas Monjalon",
        "email": "thomas@monjalon.net"
    },
    "delegate": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/20201028102640.3191964-8-thomas@monjalon.net/mbox/",
    "series": [
        {
            "id": 13416,
            "url": "https://patches.dpdk.org/api/series/13416/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=13416",
            "date": "2020-10-28T10:26:25",
            "name": "remove mbuf userdata",
            "version": 4,
            "mbox": "https://patches.dpdk.org/series/13416/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/82620/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/82620/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 dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id BCEBCA04DD;\n\tWed, 28 Oct 2020 11:29:22 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 7F6B0CA10;\n\tWed, 28 Oct 2020 11:27:22 +0100 (CET)",
            "from new1-smtp.messagingengine.com (new1-smtp.messagingengine.com\n [66.111.4.221]) by dpdk.org (Postfix) with ESMTP id 9C689C9F8\n for <dev@dpdk.org>; Wed, 28 Oct 2020 11:27:17 +0100 (CET)",
            "from compute2.internal (compute2.nyi.internal [10.202.2.42])\n by mailnew.nyi.internal (Postfix) with ESMTP id 4E42C5803A7;\n Wed, 28 Oct 2020 06:27:16 -0400 (EDT)",
            "from mailfrontend1 ([10.202.2.162])\n by compute2.internal (MEProxy); Wed, 28 Oct 2020 06:27:16 -0400",
            "from xps.monjalon.net (184.203.134.77.rev.sfr.net [77.134.203.184])\n by mail.messagingengine.com (Postfix) with ESMTPA id CFDB33280069;\n Wed, 28 Oct 2020 06:27:14 -0400 (EDT)"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=monjalon.net; h=\n from:to:cc:subject:date:message-id:in-reply-to:references\n :mime-version:content-transfer-encoding; s=fm2; bh=YGjUJsKehJWXi\n WjrnXqL8aKk3a7qS0fp1jDNVzWeQ2o=; b=ZAMw6gpvwoA/zZVb7bn6ALOZ7eCIE\n TocsyE+Z8IL/KzoXGs0U8enr31cAtyHHVLcaIjU+CZ1emYvnBhD6hERfLQxabPsw\n QoxavRt2EHqmExVV7IGDYLb2HoV6PmST2gn+fIK33E/sSGI4M6VlsZaimouHdBuu\n /wBfE0JPYCIWSJXZYEsMQnzy9IB21hpV9ARrMky8UZHB+JHlFfmobZ4xzOm4fQ3n\n pU5G/qz9ztB7N93R9T3irh7gV4U0wUU0X8MDMMQa8Kj7xP3cr7OYnlfHZL8nwN7a\n 1XQMZM2vXunZFNw6XhR9uvWSlX0D9Wyr75btk6ijfPHXoxSmiHl9xXdwg==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=\n messagingengine.com; h=cc:content-transfer-encoding:date:from\n :in-reply-to:message-id:mime-version:references:subject:to\n :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=\n fm1; bh=YGjUJsKehJWXiWjrnXqL8aKk3a7qS0fp1jDNVzWeQ2o=; b=JhrDIYpH\n 6KSHNyHEDkQ0uTfUUp4N/OrqNC0KEBbahF+gHFmwhZRiuq4v2ZsZLQzc2886MBVF\n aRK1G/qg7jyFYy+CSRQfz1oPhNDfWR4mVTWpfg73t84WEs/H1V9WVObZ90PLG44A\n gfixhF/vjgZxCgzEG8BQ2O+RD2v+/gSu3VhuMAPd/zLck0ntK4tq4O7VOnSzusi0\n 5i8uKThwFtLcrFRvQqo9cydChB+KeH8LEk33F+uY74eXSvuWMa1ASh6+eD2rdMso\n o82Btq766R3AdLX7psOuB6zJTMsIjtOXHrhmdsjQuA20q/FAqpRyfNcFy4oO7L/I\n lFYdx7LcSTxafw=="
        ],
        "X-ME-Sender": "<xms:hEeZX4b0BiZBZ9AJ8Uj3t_nnpbicTKzjSUd_eGShQkpClYzifNfIVw>\n <xme:hEeZXzadJFh4tQN855gktemU1gitkHtJpmTbt-_vMX352QT8VJBghexB4gWflZczv\n AaqUzlHBKvpkjBnkQ>",
        "X-ME-Proxy-Cause": "\n gggruggvucftvghtrhhoucdtuddrgedujedrledugdduhecutefuodetggdotefrodftvf\n curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu\n uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc\n fjughrpefhvffufffkofgjfhgggfestdekredtredttdenucfhrhhomhepvfhhohhmrghs\n ucfoohhnjhgrlhhonhcuoehthhhomhgrshesmhhonhhjrghlohhnrdhnvghtqeenucggtf\n frrghtthgvrhhnpeehjefhvdffueehieevuddvfeeigefhtddvvddtheehgfekfefhtdfh\n teffgeetueenucffohhmrghinheptghonhhfrdhinhenucfkphepjeejrddufeegrddvtd\n efrddukeegnecuvehluhhsthgvrhfuihiivgepudenucfrrghrrghmpehmrghilhhfrhho\n mhepthhhohhmrghssehmohhnjhgrlhhonhdrnhgvth",
        "X-ME-Proxy": "<xmx:hEeZXy_M_SXOzoBoUYnU_WlFD1gOzyEa0Wn_GxSZNhLIR4p3uBWEwA>\n <xmx:hEeZXyqWuXTPKXfVHPiRkOwoM_ddKQ6sKOTY4s-l6zDTRM3d4RaYTA>\n <xmx:hEeZXzpw6obiAJMUt-mTzir2wtXM6rkyNEB4-ZxOpmJK1pU15odpVA>\n <xmx:hEeZX22VaP4MONqgezkBFcUqPHXbDsPjb9H1a02QTANR7c8tyKlPvg>",
        "From": "Thomas Monjalon <thomas@monjalon.net>",
        "To": "dev@dpdk.org",
        "Cc": "ferruh.yigit@intel.com, david.marchand@redhat.com,\n bruce.richardson@intel.com, olivier.matz@6wind.com,\n andrew.rybchenko@oktetlabs.ru, akhil.goyal@nxp.com,\n Ed Czeck <ed.czeck@atomicrules.com>,\n Shepard Siegel <shepard.siegel@atomicrules.com>,\n John Miller <john.miller@atomicrules.com>, Ray Kinsella <mdr@ashroe.eu>,\n Neil Horman <nhorman@tuxdriver.com>",
        "Date": "Wed, 28 Oct 2020 11:26:32 +0100",
        "Message-Id": "<20201028102640.3191964-8-thomas@monjalon.net>",
        "X-Mailer": "git-send-email 2.28.0",
        "In-Reply-To": "<20201028102640.3191964-1-thomas@monjalon.net>",
        "References": "<20201026052105.1561859-1-thomas@monjalon.net>\n <20201028102640.3191964-1-thomas@monjalon.net>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v4 07/15] net/ark: switch user data to dynamic\n\tmbuf fields",
        "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 <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": "From: Ed Czeck <ed.czeck@atomicrules.com>\n\nThe second field of metadata is reserved for user data\nwhich was using a deprecated mbuf field.\nIt is moved to dynamic fields in order to allow removal of udata64.\n\nThe use of meta data must be enabled with a compile-time flag\nRTE_PMD_ARK_{TX,RX}_USERDATA_ENABLE.\nUser data on Tx and Rx paths can be defined and used separately.\n\nSigned-off-by: Thomas Monjalon <thomas@monjalon.net>\nSigned-off-by: Ed Czeck <ed.czeck@atomicrules.com>\n---\n doc/api/doxy-api-index.md       |   1 +\n doc/api/doxy-api.conf.in        |   1 +\n drivers/net/ark/ark_ethdev.c    |  39 ++++++++++\n drivers/net/ark/ark_ethdev_rx.c |   3 +-\n drivers/net/ark/ark_ethdev_tx.c |   3 +-\n drivers/net/ark/meson.build     |   2 +\n drivers/net/ark/rte_pmd_ark.h   | 123 ++++++++++++++++++++++++++++++++\n drivers/net/ark/version.map     |   7 ++\n 8 files changed, 177 insertions(+), 2 deletions(-)\n create mode 100644 drivers/net/ark/rte_pmd_ark.h",
    "diff": "diff --git a/doc/api/doxy-api-index.md b/doc/api/doxy-api-index.md\nindex a9c12d1a2f..b865a51e8c 100644\n--- a/doc/api/doxy-api-index.md\n+++ b/doc/api/doxy-api-index.md\n@@ -41,6 +41,7 @@ The public API headers are grouped by topics:\n   [vhost]              (@ref rte_vhost.h),\n   [vdpa]               (@ref rte_vdpa.h),\n   [KNI]                (@ref rte_kni.h),\n+  [ark]                (@ref rte_pmd_ark.h),\n   [ixgbe]              (@ref rte_pmd_ixgbe.h),\n   [i40e]               (@ref rte_pmd_i40e.h),\n   [ice]                (@ref rte_pmd_ice.h),\ndiff --git a/doc/api/doxy-api.conf.in b/doc/api/doxy-api.conf.in\nindex e37f8c2e80..c5b01a1814 100644\n--- a/doc/api/doxy-api.conf.in\n+++ b/doc/api/doxy-api.conf.in\n@@ -8,6 +8,7 @@ INPUT                   = @TOPDIR@/doc/api/doxy-api-index.md \\\n                           @TOPDIR@/drivers/bus/vdev \\\n                           @TOPDIR@/drivers/crypto/scheduler \\\n                           @TOPDIR@/drivers/mempool/dpaa2 \\\n+                          @TOPDIR@/drivers/net/ark \\\n                           @TOPDIR@/drivers/net/bnxt \\\n                           @TOPDIR@/drivers/net/bonding \\\n                           @TOPDIR@/drivers/net/dpaa \\\ndiff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c\nindex 168b3659d6..7b03f0fbc2 100644\n--- a/drivers/net/ark/ark_ethdev.c\n+++ b/drivers/net/ark/ark_ethdev.c\n@@ -10,6 +10,7 @@\n #include <rte_ethdev_pci.h>\n #include <rte_kvargs.h>\n \n+#include \"rte_pmd_ark.h\"\n #include \"ark_global.h\"\n #include \"ark_logs.h\"\n #include \"ark_ethdev_tx.h\"\n@@ -78,6 +79,9 @@ static int  eth_ark_set_mtu(struct rte_eth_dev *dev, uint16_t size);\n #define ARK_TX_MAX_QUEUE (4096 * 4)\n #define ARK_TX_MIN_QUEUE (256)\n \n+int rte_pmd_ark_rx_userdata_dynfield_offset = -1;\n+int rte_pmd_ark_tx_userdata_dynfield_offset = -1;\n+\n static const char * const valid_arguments[] = {\n \tARK_PKTGEN_ARG,\n \tARK_PKTCHKR_ARG,\n@@ -245,6 +249,16 @@ eth_ark_dev_init(struct rte_eth_dev *dev)\n \tint ret;\n \tint port_count = 1;\n \tint p;\n+\tstatic const struct rte_mbuf_dynfield ark_tx_userdata_dynfield_desc = {\n+\t\t.name = RTE_PMD_ARK_TX_USERDATA_DYNFIELD_NAME,\n+\t\t.size = sizeof(rte_pmd_ark_userdata_t),\n+\t\t.align = __alignof__(rte_pmd_ark_userdata_t),\n+\t};\n+\tstatic const struct rte_mbuf_dynfield ark_rx_userdata_dynfield_desc = {\n+\t\t.name = RTE_PMD_ARK_RX_USERDATA_DYNFIELD_NAME,\n+\t\t.size = sizeof(rte_pmd_ark_userdata_t),\n+\t\t.align = __alignof__(rte_pmd_ark_userdata_t),\n+\t};\n \n \tark->eth_dev = dev;\n \n@@ -254,6 +268,31 @@ eth_ark_dev_init(struct rte_eth_dev *dev)\n \tret = check_for_ext(ark);\n \tif (ret)\n \t\treturn ret;\n+\n+\t/* Extra mbuf fields for user data */\n+\tif (RTE_PMD_ARK_TX_USERDATA_ENABLE) {\n+\t\trte_pmd_ark_tx_userdata_dynfield_offset =\n+\t\t    rte_mbuf_dynfield_register(&ark_tx_userdata_dynfield_desc);\n+\t\tif (rte_pmd_ark_tx_userdata_dynfield_offset < 0) {\n+\t\t\tARK_PMD_LOG(ERR,\n+\t\t\t\t    \"Failed to register mbuf field for tx userdata\\n\");\n+\t\t\treturn -rte_errno;\n+\t\t}\n+\t\tARK_PMD_LOG(INFO, \"Registered TX-meta dynamic field at %d\\n\",\n+\t\t\t    rte_pmd_ark_tx_userdata_dynfield_offset);\n+\t}\n+\tif (RTE_PMD_ARK_RX_USERDATA_ENABLE) {\n+\t\trte_pmd_ark_rx_userdata_dynfield_offset =\n+\t\t    rte_mbuf_dynfield_register(&ark_rx_userdata_dynfield_desc);\n+\t\tif (rte_pmd_ark_rx_userdata_dynfield_offset < 0) {\n+\t\t\tARK_PMD_LOG(ERR,\n+\t\t\t\t    \"Failed to register mbuf field for rx userdata\\n\");\n+\t\t\treturn -rte_errno;\n+\t\t}\n+\t\tARK_PMD_LOG(INFO, \"Registered RX-meta dynamic field at %d\\n\",\n+\t\t\t    rte_pmd_ark_rx_userdata_dynfield_offset);\n+\t}\n+\n \tpci_dev = RTE_ETH_DEV_TO_PCI(dev);\n \trte_eth_copy_pci_info(dev, pci_dev);\n \tdev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;\ndiff --git a/drivers/net/ark/ark_ethdev_rx.c b/drivers/net/ark/ark_ethdev_rx.c\nindex 2f8d05099c..825b4791be 100644\n--- a/drivers/net/ark/ark_ethdev_rx.c\n+++ b/drivers/net/ark/ark_ethdev_rx.c\n@@ -4,6 +4,7 @@\n \n #include <unistd.h>\n \n+#include \"rte_pmd_ark.h\"\n #include \"ark_ethdev_rx.h\"\n #include \"ark_global.h\"\n #include \"ark_logs.h\"\n@@ -272,7 +273,7 @@ eth_ark_recv_pkts(void *rx_queue,\n \t\tmbuf->pkt_len = meta->pkt_len;\n \t\tmbuf->data_len = meta->pkt_len;\n \t\tmbuf->timestamp = meta->timestamp;\n-\t\tmbuf->udata64 = meta->user_data;\n+\t\trte_pmd_ark_mbuf_rx_userdata_set(mbuf, meta->user_data);\n \n \t\tif (ARK_DEBUG_CORE) {\t/* debug sanity checks */\n \t\t\tif ((meta->pkt_len > (1024 * 16)) ||\ndiff --git a/drivers/net/ark/ark_ethdev_tx.c b/drivers/net/ark/ark_ethdev_tx.c\nindex a0e35af880..612d918e33 100644\n--- a/drivers/net/ark/ark_ethdev_tx.c\n+++ b/drivers/net/ark/ark_ethdev_tx.c\n@@ -4,6 +4,7 @@\n \n #include <unistd.h>\n \n+#include \"rte_pmd_ark.h\"\n #include \"ark_ethdev_tx.h\"\n #include \"ark_global.h\"\n #include \"ark_mpu.h\"\n@@ -70,7 +71,7 @@ eth_ark_tx_meta_from_mbuf(struct ark_tx_meta *meta,\n \t\t\t  uint8_t flags)\n {\n \tmeta->physaddr = rte_mbuf_data_iova(mbuf);\n-\tmeta->user1 = (uint32_t)mbuf->udata64;\n+\tmeta->user1 = rte_pmd_ark_mbuf_tx_userdata_get(mbuf);\n \tmeta->data_len = rte_pktmbuf_data_len(mbuf);\n \tmeta->flags = flags;\n }\ndiff --git a/drivers/net/ark/meson.build b/drivers/net/ark/meson.build\nindex 99151bba1d..80bce94e1a 100644\n--- a/drivers/net/ark/meson.build\n+++ b/drivers/net/ark/meson.build\n@@ -1,6 +1,8 @@\n # SPDX-License-Identifier: BSD-3-Clause\n # Copyright(c) 2018 Intel Corporation\n \n+headers = files('rte_pmd_ark.h')\n+\n sources = files('ark_ddm.c',\n \t'ark_ethdev.c',\n \t'ark_ethdev_rx.c',\ndiff --git a/drivers/net/ark/rte_pmd_ark.h b/drivers/net/ark/rte_pmd_ark.h\nnew file mode 100644\nindex 0000000000..2a23b82951\n--- /dev/null\n+++ b/drivers/net/ark/rte_pmd_ark.h\n@@ -0,0 +1,123 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright (c) 2020 Atomic Rules LLC\n+ */\n+\n+#ifndef RTE_PMD_ARK_H\n+#define RTE_PMD_ARK_H\n+\n+/**\n+ * @file\n+ * ARK driver-specific API\n+ */\n+\n+#include <rte_mbuf.h>\n+#include <rte_mbuf_dyn.h>\n+\n+#ifndef RTE_PMD_ARK_TX_USERDATA_ENABLE\n+#define RTE_PMD_ARK_TX_USERDATA_ENABLE 0\n+#endif\n+\n+#ifndef RTE_PMD_ARK_RX_USERDATA_ENABLE\n+#define RTE_PMD_ARK_RX_USERDATA_ENABLE 0\n+#endif\n+\n+typedef uint32_t rte_pmd_ark_userdata_t;\n+extern int rte_pmd_ark_tx_userdata_dynfield_offset;\n+extern int rte_pmd_ark_rx_userdata_dynfield_offset;\n+\n+/** mbuf dynamic field for custom Tx ARK data */\n+#define RTE_PMD_ARK_TX_USERDATA_DYNFIELD_NAME \"rte_net_ark_dynfield_tx_userdata\"\n+/** mbuf dynamic field for custom Rx ARK data */\n+#define RTE_PMD_ARK_RX_USERDATA_DYNFIELD_NAME \"rte_net_ark_dynfield_rx_userdata\"\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Read Tx user data from mbuf.\n+ *\n+ * @param mbuf Structure to read from.\n+ * @return user data\n+ */\n+__rte_experimental\n+static inline rte_pmd_ark_userdata_t\n+rte_pmd_ark_mbuf_tx_userdata_get(const struct rte_mbuf *mbuf)\n+{\n+#if RTE_PMD_ARK_TX_USERDATA_ENABLE\n+\treturn *RTE_MBUF_DYNFIELD(mbuf, rte_pmd_ark_tx_userdata_dynfield_offset,\n+\t\t\t\t  rte_pmd_ark_userdata_t *);\n+#else\n+\tRTE_SET_USED(mbuf);\n+\treturn 0;\n+#endif\n+}\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Write Tx user data to mbuf.\n+ *\n+ * @param mbuf Structure to write into.\n+ * @param data User data.\n+ */\n+__rte_experimental\n+static inline void\n+rte_pmd_ark_mbuf_tx_userdata_set(struct rte_mbuf *mbuf,\n+\t\trte_pmd_ark_userdata_t data)\n+{\n+#if RTE_PMD_ARK_TX_USERDATA_ENABLE\n+\t*RTE_MBUF_DYNFIELD(mbuf, rte_pmd_ark_tx_userdata_dynfield_offset,\n+\t\t\trte_pmd_ark_userdata_t *) = data;\n+#else\n+\tRTE_SET_USED(mbuf);\n+\tRTE_SET_USED(data);\n+#endif\n+}\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Read Rx user data from mbuf.\n+ *\n+ * @param mbuf Structure to read from.\n+ * @return user data\n+ */\n+__rte_experimental\n+static inline rte_pmd_ark_userdata_t\n+rte_pmd_ark_mbuf_rx_userdata_get(const struct rte_mbuf *mbuf)\n+{\n+#if RTE_PMD_ARK_RX_USERDATA_ENABLE\n+\treturn *RTE_MBUF_DYNFIELD(mbuf, rte_pmd_ark_rx_userdata_dynfield_offset,\n+\t\t\trte_pmd_ark_userdata_t *);\n+#else\n+\tRTE_SET_USED(mbuf);\n+\treturn 0;\n+#endif\n+}\n+\n+/**\n+ * @warning\n+ * @b EXPERIMENTAL: this API may change without prior notice\n+ *\n+ * Write Rx user data to mbuf.\n+ *\n+ * @param mbuf Structure to write into.\n+ * @param data User data.\n+ */\n+__rte_experimental\n+static inline void\n+rte_pmd_ark_mbuf_rx_userdata_set(struct rte_mbuf *mbuf,\n+\t\trte_pmd_ark_userdata_t data)\n+{\n+#if RTE_PMD_ARK_RX_USERDATA_ENABLE\n+\t*RTE_MBUF_DYNFIELD(mbuf, rte_pmd_ark_rx_userdata_dynfield_offset,\n+\t\t\trte_pmd_ark_userdata_t *) = data;\n+#else\n+\tRTE_SET_USED(mbuf);\n+\tRTE_SET_USED(data);\n+#endif\n+}\n+\n+#endif /* RTE_PMD_ARK_H */\ndiff --git a/drivers/net/ark/version.map b/drivers/net/ark/version.map\nindex 4a76d1d52d..954bea6796 100644\n--- a/drivers/net/ark/version.map\n+++ b/drivers/net/ark/version.map\n@@ -1,3 +1,10 @@\n DPDK_21 {\n \tlocal: *;\n };\n+\n+EXPERIMENTAL {\n+\tglobal:\n+\n+\trte_pmd_ark_tx_userdata_dynfield_offset;\n+\trte_pmd_ark_rx_userdata_dynfield_offset;\n+};\n",
    "prefixes": [
        "v4",
        "07/15"
    ]
}