get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 136801,
    "url": "http://patches.dpdk.org/api/patches/136801/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1707978080-28859-2-git-send-email-roretzla@linux.microsoft.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": "<1707978080-28859-2-git-send-email-roretzla@linux.microsoft.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1707978080-28859-2-git-send-email-roretzla@linux.microsoft.com",
    "date": "2024-02-15T06:21:03",
    "name": "[v4,01/18] mbuf: deprecate GCC marker in rte mbuf struct",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "1ecd2841b60531d3098725dcdcb26a4274e8430c",
    "submitter": {
        "id": 2077,
        "url": "http://patches.dpdk.org/api/people/2077/?format=api",
        "name": "Tyler Retzlaff",
        "email": "roretzla@linux.microsoft.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1707978080-28859-2-git-send-email-roretzla@linux.microsoft.com/mbox/",
    "series": [
        {
            "id": 31113,
            "url": "http://patches.dpdk.org/api/series/31113/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=31113",
            "date": "2024-02-15T06:21:02",
            "name": "stop using zero sized marker fields",
            "version": 4,
            "mbox": "http://patches.dpdk.org/series/31113/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/136801/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/136801/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 72B9543B06;\n\tThu, 15 Feb 2024 07:21:49 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 6AF084339A;\n\tThu, 15 Feb 2024 07:21:41 +0100 (CET)",
            "from linux.microsoft.com (linux.microsoft.com [13.77.154.182])\n by mails.dpdk.org (Postfix) with ESMTP id 023D543387\n for <dev@dpdk.org>; Thu, 15 Feb 2024 07:21:36 +0100 (CET)",
            "by linux.microsoft.com (Postfix, from userid 1086)\n id 0DD80207F22A; Wed, 14 Feb 2024 22:21:36 -0800 (PST)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 linux.microsoft.com 0DD80207F22A",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com;\n s=default; t=1707978096;\n bh=F2/wDytmYFOX2d0DKqV68TlOe/QEzaTQSo3Yr/7RCEQ=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=BH0l+ydcAv1JTf91E+7vWhvmSui5mTioXB2KhrAtoQAiS7iNdfZ/z2JbVzTSiIp+x\n aN0Xetz5N0uymXrCHe4Fo/My4P3FS0qouakTPGGB9M2CHBUulCo5eYlRW842F8IZzh\n Pn7g+0rYnTk+CxlVwTeGZ/ZpF5s3gEXKKTFAfsSo=",
        "From": "Tyler Retzlaff <roretzla@linux.microsoft.com>",
        "To": "dev@dpdk.org",
        "Cc": "Ajit Khaparde <ajit.khaparde@broadcom.com>,\n Andrew Boyer <andrew.boyer@amd.com>,\n Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>,\n Bruce Richardson <bruce.richardson@intel.com>,\n Chenbo Xia <chenbox@nvidia.com>, Chengwen Feng <fengchengwen@huawei.com>,\n Dariusz Sosnowski <dsosnowski@nvidia.com>,\n David Christensen <drc@linux.vnet.ibm.com>,\n Hyong Youb Kim <hyonkim@cisco.com>, Jerin Jacob <jerinj@marvell.com>,\n Jie Hai <haijie1@huawei.com>, Jingjing Wu <jingjing.wu@intel.com>,\n John Daley <johndale@cisco.com>, Kevin Laatz <kevin.laatz@intel.com>,\n Kiran Kumar K <kirankumark@marvell.com>,\n Konstantin Ananyev <konstantin.v.ananyev@yandex.ru>,\n Maciej Czekaj <mczekaj@marvell.com>, Matan Azrad <matan@nvidia.com>,\n Maxime Coquelin <maxime.coquelin@redhat.com>,\n Nithin Dabilpuram <ndabilpuram@marvell.com>, Ori Kam <orika@nvidia.com>,\n Ruifeng Wang <ruifeng.wang@arm.com>, Satha Rao <skoteshwar@marvell.com>,\n Somnath Kotur <somnath.kotur@broadcom.com>,\n Suanming Mou <suanmingm@nvidia.com>, Sunil Kumar Kori <skori@marvell.com>,\n Viacheslav Ovsiienko <viacheslavo@nvidia.com>,\n Yisen Zhuang <yisen.zhuang@huawei.com>,\n Yuying Zhang <Yuying.Zhang@intel.com>, mb@smartsharesystems.com,\n Tyler Retzlaff <roretzla@linux.microsoft.com>",
        "Subject": "[PATCH v4 01/18] mbuf: deprecate GCC marker in rte mbuf struct",
        "Date": "Wed, 14 Feb 2024 22:21:03 -0800",
        "Message-Id": "<1707978080-28859-2-git-send-email-roretzla@linux.microsoft.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1707978080-28859-1-git-send-email-roretzla@linux.microsoft.com>",
        "References": "<1706657173-26166-1-git-send-email-roretzla@linux.microsoft.com>\n <1707978080-28859-1-git-send-email-roretzla@linux.microsoft.com>",
        "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"
    },
    "content": "Provide a macro that allows conditional expansion of RTE_MARKER fields\nto empty to allow rte_mbuf to be used with MSVC. It is proposed that\nwe announce the fields to be __rte_deprecated (currently disabled).\n\nIntroduce C11 anonymous unions to permit aliasing of well-known\noffsets by name into the rte_mbuf structure by a *new* name and to\nprovide padding for cache alignment.\n\nSigned-off-by: Tyler Retzlaff <roretzla@linux.microsoft.com>\n---\n doc/guides/rel_notes/deprecation.rst |  20 ++\n lib/eal/include/rte_common.h         |   6 +\n lib/mbuf/rte_mbuf_core.h             | 375 +++++++++++++++++++----------------\n 3 files changed, 233 insertions(+), 168 deletions(-)",
    "diff": "diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst\nindex 10630ba..8594255 100644\n--- a/doc/guides/rel_notes/deprecation.rst\n+++ b/doc/guides/rel_notes/deprecation.rst\n@@ -17,6 +17,26 @@ Other API and ABI deprecation notices are to be posted below.\n Deprecation Notices\n -------------------\n \n+* mbuf: Named zero sized fields of type ``RTE_MARKER`` and ``RTE_MARKER64``\n+  will be removed from ``struct rte_mbuf`` and replaced with new fields\n+  in anonymous unions.\n+\n+  The names of the fields impacted are:\n+\n+    old name                  new name\n+\n+  ``cacheline0``            ``mbuf_cachelin0``\n+  ``rearm_data``            ``mbuf_rearm_data``\n+  ``rx_descriptor_fields1`` ``mbuf_rx_descriptor_fields1``\n+  ``cacheline1``            ``mbuf_cachelin1``\n+\n+  Contributions to DPDK should immediately start using the new names,\n+  applications should adapt to new names as soon as possible as the\n+  old names will be removed in a future DPDK release.\n+\n+  Note: types of the new names are not API compatible with the old and\n+  some code conversion is required to maintain correct behavior.\n+\n * build: The ``enable_kmods`` option is deprecated and will be removed in a future release.\n   Setting/clearing the option has no impact on the build.\n   Instead, kernel modules will be always built for OS's where out-of-tree kernel modules\ndiff --git a/lib/eal/include/rte_common.h b/lib/eal/include/rte_common.h\nindex d7d6390..af73f67 100644\n--- a/lib/eal/include/rte_common.h\n+++ b/lib/eal/include/rte_common.h\n@@ -582,6 +582,12 @@ static void __attribute__((destructor(RTE_PRIO(prio)), used)) func(void)\n /** Marker for 8B alignment in a structure. */\n __extension__ typedef uint64_t RTE_MARKER64[0];\n \n+#define __rte_marker(type, name) type name /* __rte_deprecated */\n+\n+#else\n+\n+#define __rte_marker(type, name)\n+\n #endif\n \n /*********** Macros for calculating min and max **********/\ndiff --git a/lib/mbuf/rte_mbuf_core.h b/lib/mbuf/rte_mbuf_core.h\nindex 5688683..9e9590b 100644\n--- a/lib/mbuf/rte_mbuf_core.h\n+++ b/lib/mbuf/rte_mbuf_core.h\n@@ -16,7 +16,10 @@\n  * New fields and flags should fit in the \"dynamic space\".\n  */\n \n+#include <assert.h>\n+#include <stdalign.h>\n #include <stdint.h>\n+#include <stddef.h>\n \n #include <rte_byteorder.h>\n #include <rte_stdatomic.h>\n@@ -464,204 +467,240 @@ enum {\n  * The generic rte_mbuf, containing a packet mbuf.\n  */\n struct rte_mbuf {\n-\tRTE_MARKER cacheline0;\n-\n-\tvoid *buf_addr;           /**< Virtual address of segment buffer. */\n+\t__rte_marker(RTE_MARKER, cacheline0);\n+\tunion {\n+\t\tchar mbuf_cacheline0[RTE_CACHE_LINE_MIN_SIZE];\n+\t\t__extension__\n+\t\tstruct {\n+\t\t\tvoid *buf_addr;           /**< Virtual address of segment buffer. */\n #if RTE_IOVA_IN_MBUF\n-\t/**\n-\t * Physical address of segment buffer.\n-\t * This field is undefined if the build is configured to use only\n-\t * virtual address as IOVA (i.e. RTE_IOVA_IN_MBUF is 0).\n-\t * Force alignment to 8-bytes, so as to ensure we have the exact\n-\t * same mbuf cacheline0 layout for 32-bit and 64-bit. This makes\n-\t * working on vector drivers easier.\n-\t */\n-\trte_iova_t buf_iova __rte_aligned(sizeof(rte_iova_t));\n+\t\t\t/**\n+\t\t\t * Physical address of segment buffer.\n+\t\t\t * This field is undefined if the build is configured to use only\n+\t\t\t * virtual address as IOVA (i.e. RTE_IOVA_IN_MBUF is 0).\n+\t\t\t * Force alignment to 8-bytes, so as to ensure we have the exact\n+\t\t\t * same mbuf cacheline0 layout for 32-bit and 64-bit. This makes\n+\t\t\t * working on vector drivers easier.\n+\t\t\t */\n+\t\t\trte_iova_t buf_iova __rte_aligned(sizeof(rte_iova_t));\n #else\n-\t/**\n-\t * Next segment of scattered packet.\n-\t * This field is valid when physical address field is undefined.\n-\t * Otherwise next pointer in the second cache line will be used.\n-\t */\n-\tstruct rte_mbuf *next;\n+\t\t\t/**\n+\t\t\t * Next segment of scattered packet.\n+\t\t\t * This field is valid when physical address field is undefined.\n+\t\t\t * Otherwise next pointer in the second cache line will be used.\n+\t\t\t */\n+\t\t\tstruct rte_mbuf *next;\n #endif\n \n-\t/* next 8 bytes are initialised on RX descriptor rearm */\n-\tRTE_MARKER64 rearm_data;\n-\tuint16_t data_off;\n-\n-\t/**\n-\t * Reference counter. Its size should at least equal to the size\n-\t * of port field (16 bits), to support zero-copy broadcast.\n-\t * It should only be accessed using the following functions:\n-\t * rte_mbuf_refcnt_update(), rte_mbuf_refcnt_read(), and\n-\t * rte_mbuf_refcnt_set(). The functionality of these functions (atomic,\n-\t * or non-atomic) is controlled by the RTE_MBUF_REFCNT_ATOMIC flag.\n-\t */\n-\tRTE_ATOMIC(uint16_t) refcnt;\n-\n-\t/**\n-\t * Number of segments. Only valid for the first segment of an mbuf\n-\t * chain.\n-\t */\n-\tuint16_t nb_segs;\n-\n-\t/** Input port (16 bits to support more than 256 virtual ports).\n-\t * The event eth Tx adapter uses this field to specify the output port.\n-\t */\n-\tuint16_t port;\n-\n-\tuint64_t ol_flags;        /**< Offload features. */\n+\t\t\t/* next 8 bytes are initialised on RX descriptor rearm */\n+\t\t\t__rte_marker(RTE_MARKER64, rearm_data);\n+\t\t\tunion {\n+\t\t\t\tchar mbuf_rearm_data[8];\n+\t\t\t\t__extension__\n+\t\t\t\tstruct {\n+\t\t\t\t\tuint16_t data_off;\n+\n+\t\t\t\t\t/**\n+\t\t\t\t\t * Reference counter. Its size should at least equal to the\n+\t\t\t\t\t * size of port field (16 bits), to support zero-copy\n+\t\t\t\t\t * broadcast.\n+\t\t\t\t\t * It should only be accessed using the following\n+\t\t\t\t\t * functions:\n+\t\t\t\t\t * rte_mbuf_refcnt_update(), rte_mbuf_refcnt_read(), and\n+\t\t\t\t\t * rte_mbuf_refcnt_set(). The functionality of these\n+\t\t\t\t\t * functions (atomic, or non-atomic) is controlled by the\n+\t\t\t\t\t * RTE_MBUF_REFCNT_ATOMIC flag.\n+\t\t\t\t\t */\n+\t\t\t\t\tRTE_ATOMIC(uint16_t) refcnt;\n+\n+\t\t\t\t\t/**\n+\t\t\t\t\t * Number of segments. Only valid for the first segment of\n+\t\t\t\t\t * an mbuf chain.\n+\t\t\t\t\t */\n+\t\t\t\t\tuint16_t nb_segs;\n+\n+\t\t\t\t\t/**\n+\t\t\t\t\t * Input port (16 bits to support more than 256 virtual\n+\t\t\t\t\t * ports).  The event eth Tx adapter uses this field to\n+\t\t\t\t\t * specify the output port.\n+\t\t\t\t\t */\n+\t\t\t\t\tuint16_t port;\n+\t\t\t\t};\n+\t\t\t};\n \n-\t/* remaining bytes are set on RX when pulling packet from descriptor */\n-\tRTE_MARKER rx_descriptor_fields1;\n+\t\t\tuint64_t ol_flags;        /**< Offload features. */\n \n-\t/*\n-\t * The packet type, which is the combination of outer/inner L2, L3, L4\n-\t * and tunnel types. The packet_type is about data really present in the\n-\t * mbuf. Example: if vlan stripping is enabled, a received vlan packet\n-\t * would have RTE_PTYPE_L2_ETHER and not RTE_PTYPE_L2_VLAN because the\n-\t * vlan is stripped from the data.\n-\t */\n-\tunion {\n-\t\tuint32_t packet_type; /**< L2/L3/L4 and tunnel information. */\n-\t\t__extension__\n-\t\tstruct {\n-\t\t\tuint8_t l2_type:4;   /**< (Outer) L2 type. */\n-\t\t\tuint8_t l3_type:4;   /**< (Outer) L3 type. */\n-\t\t\tuint8_t l4_type:4;   /**< (Outer) L4 type. */\n-\t\t\tuint8_t tun_type:4;  /**< Tunnel type. */\n+\t\t\t/* remaining bytes are set on RX when pulling packet from descriptor */\n+\t\t\t__rte_marker(RTE_MARKER, rx_descriptor_fields1);\n \t\t\tunion {\n-\t\t\t\tuint8_t inner_esp_next_proto;\n-\t\t\t\t/**< ESP next protocol type, valid if\n-\t\t\t\t * RTE_PTYPE_TUNNEL_ESP tunnel type is set\n-\t\t\t\t * on both Tx and Rx.\n-\t\t\t\t */\n+\t\t\t\tchar mbuf_rx_descriptor_fields1[8];\n \t\t\t\t__extension__\n \t\t\t\tstruct {\n-\t\t\t\t\tuint8_t inner_l2_type:4;\n-\t\t\t\t\t/**< Inner L2 type. */\n-\t\t\t\t\tuint8_t inner_l3_type:4;\n-\t\t\t\t\t/**< Inner L3 type. */\n+\t\t\t\t\t/*\n+\t\t\t\t\t * The packet type, which is the combination of outer/inner\n+\t\t\t\t\t * L2, L3, L4 and tunnel types. The packet_type is about\n+\t\t\t\t\t * data really present in the mbuf. Example: if vlan\n+\t\t\t\t\t * stripping is enabled, a received vlan packet would have\n+\t\t\t\t\t * RTE_PTYPE_L2_ETHER and not RTE_PTYPE_L2_VLAN because the\n+\t\t\t\t\t * vlan is stripped from the data.\n+\t\t\t\t\t */\n+\t\t\t\t\tunion {\n+\t\t\t\t\t\tuint32_t packet_type;\n+\t\t\t\t\t\t/**< L2/L3/L4 and tunnel information. */\n+\t\t\t\t\t\t__extension__\n+\t\t\t\t\t\tstruct {\n+\t\t\t\t\t\t\tuint8_t l2_type:4;\n+\t\t\t\t\t\t\t/**< (Outer) L2 type. */\n+\t\t\t\t\t\t\tuint8_t l3_type:4;\n+\t\t\t\t\t\t\t/**< (Outer) L3 type. */\n+\t\t\t\t\t\t\tuint8_t l4_type:4;\n+\t\t\t\t\t\t\t/**< (Outer) L4 type. */\n+\t\t\t\t\t\t\tuint8_t tun_type:4;\n+\t\t\t\t\t\t\t/**< Tunnel type. */\n+\t\t\t\t\t\t\tunion {\n+\t\t\t\t\t\t\t\tuint8_t inner_esp_next_proto;\n+\t\t\t\t\t\t\t\t/**< ESP next protocol type, valid\n+\t\t\t\t\t\t\t\t * if RTE_PTYPE_TUNNEL_ESP tunnel\n+\t\t\t\t\t\t\t\t * type is set on both Tx and Rx.\n+\t\t\t\t\t\t\t\t */\n+\t\t\t\t\t\t\t\t__extension__\n+\t\t\t\t\t\t\t\tstruct {\n+\t\t\t\t\t\t\t\t\tuint8_t inner_l2_type:4;\n+\t\t\t\t\t\t\t\t\t/**< Inner L2 type. */\n+\t\t\t\t\t\t\t\t\tuint8_t inner_l3_type:4;\n+\t\t\t\t\t\t\t\t\t/**< Inner L3 type. */\n+\t\t\t\t\t\t\t\t};\n+\t\t\t\t\t\t\t};\n+\t\t\t\t\t\t\tuint8_t inner_l4_type:4;\n+\t\t\t\t\t\t\t/**< Inner L4 type. */\n+\t\t\t\t\t\t};\n+\t\t\t\t\t};\n+\t\t\t\t\tuint32_t pkt_len;\n+\t\t\t\t\t/**< Total pkt len: sum of all segments. */\n \t\t\t\t};\n \t\t\t};\n-\t\t\tuint8_t inner_l4_type:4; /**< Inner L4 type. */\n-\t\t};\n-\t};\n \n-\tuint32_t pkt_len;         /**< Total pkt len: sum of all segments. */\n-\tuint16_t data_len;        /**< Amount of data in segment buffer. */\n-\t/** VLAN TCI (CPU order), valid if RTE_MBUF_F_RX_VLAN is set. */\n-\tuint16_t vlan_tci;\n+\t\t\tuint16_t data_len;        /**< Amount of data in segment buffer. */\n+\t\t\t/** VLAN TCI (CPU order), valid if RTE_MBUF_F_RX_VLAN is set. */\n+\t\t\tuint16_t vlan_tci;\n \n-\tunion {\n-\t\tunion {\n-\t\t\tuint32_t rss;     /**< RSS hash result if RSS enabled */\n-\t\t\tstruct {\n+\t\t\tunion {\n \t\t\t\tunion {\n+\t\t\t\t\tuint32_t rss;     /**< RSS hash result if RSS enabled */\n \t\t\t\t\tstruct {\n-\t\t\t\t\t\tuint16_t hash;\n-\t\t\t\t\t\tuint16_t id;\n-\t\t\t\t\t};\n-\t\t\t\t\tuint32_t lo;\n-\t\t\t\t\t/**< Second 4 flexible bytes */\n-\t\t\t\t};\n-\t\t\t\tuint32_t hi;\n-\t\t\t\t/**< First 4 flexible bytes or FD ID, dependent\n-\t\t\t\t * on RTE_MBUF_F_RX_FDIR_* flag in ol_flags.\n-\t\t\t\t */\n-\t\t\t} fdir;\t/**< Filter identifier if FDIR enabled */\n-\t\t\tstruct rte_mbuf_sched sched;\n-\t\t\t/**< Hierarchical scheduler : 8 bytes */\n-\t\t\tstruct {\n-\t\t\t\tuint32_t reserved1;\n-\t\t\t\tuint16_t reserved2;\n-\t\t\t\tuint16_t txq;\n-\t\t\t\t/**< The event eth Tx adapter uses this field\n-\t\t\t\t * to store Tx queue id.\n-\t\t\t\t * @see rte_event_eth_tx_adapter_txq_set()\n-\t\t\t\t */\n-\t\t\t} txadapter; /**< Eventdev ethdev Tx adapter */\n-\t\t\tuint32_t usr;\n-\t\t\t/**< User defined tags. See rte_distributor_process() */\n-\t\t} hash;                   /**< hash information */\n-\t};\n+\t\t\t\t\t\tunion {\n+\t\t\t\t\t\t\t__extension__\n+\t\t\t\t\t\t\tstruct {\n+\t\t\t\t\t\t\t\tuint16_t hash;\n+\t\t\t\t\t\t\t\tuint16_t id;\n+\t\t\t\t\t\t\t};\n+\t\t\t\t\t\t\tuint32_t lo;\n+\t\t\t\t\t\t\t/**< Second 4 flexible bytes */\n+\t\t\t\t\t\t};\n+\t\t\t\t\t\tuint32_t hi;\n+\t\t\t\t\t\t/**< First 4 flexible bytes or FD ID, dependent\n+\t\t\t\t\t\t * on RTE_MBUF_F_RX_FDIR_* flag in ol_flags.\n+\t\t\t\t\t\t */\n+\t\t\t\t\t} fdir;\t/**< Filter identifier if FDIR enabled */\n+\t\t\t\t\tstruct rte_mbuf_sched sched;\n+\t\t\t\t\t/**< Hierarchical scheduler : 8 bytes */\n+\t\t\t\t\tstruct {\n+\t\t\t\t\t\tuint32_t reserved1;\n+\t\t\t\t\t\tuint16_t reserved2;\n+\t\t\t\t\t\tuint16_t txq;\n+\t\t\t\t\t\t/**< The event eth Tx adapter uses this field\n+\t\t\t\t\t\t * to store Tx queue id.\n+\t\t\t\t\t\t * @see rte_event_eth_tx_adapter_txq_set()\n+\t\t\t\t\t\t */\n+\t\t\t\t\t} txadapter; /**< Eventdev ethdev Tx adapter */\n+\t\t\t\t\tuint32_t usr;\n+\t\t\t\t\t/**< User defined tags. See rte_distributor_process() */\n+\t\t\t\t} hash;                   /**< hash information */\n+\t\t\t};\n \n-\t/** Outer VLAN TCI (CPU order), valid if RTE_MBUF_F_RX_QINQ is set. */\n-\tuint16_t vlan_tci_outer;\n+\t\t\t/** Outer VLAN TCI (CPU order), valid if RTE_MBUF_F_RX_QINQ is set. */\n+\t\t\tuint16_t vlan_tci_outer;\n \n-\tuint16_t buf_len;         /**< Length of segment buffer. */\n+\t\t\tuint16_t buf_len;         /**< Length of segment buffer. */\n \n-\tstruct rte_mempool *pool; /**< Pool from which mbuf was allocated. */\n+\t\t\tstruct rte_mempool *pool; /**< Pool from which mbuf was allocated. */\n+\t\t};\n+\t};\n \n \t/* second cache line - fields only used in slow path or on TX */\n-\tRTE_MARKER cacheline1 __rte_cache_min_aligned;\n-\n-#if RTE_IOVA_IN_MBUF\n-\t/**\n-\t * Next segment of scattered packet. Must be NULL in the last\n-\t * segment or in case of non-segmented packet.\n-\t */\n-\tstruct rte_mbuf *next;\n-#else\n-\t/**\n-\t * Reserved for dynamic fields\n-\t * when the next pointer is in first cache line (i.e. RTE_IOVA_IN_MBUF is 0).\n-\t */\n-\tuint64_t dynfield2;\n-#endif\n-\n-\t/* fields to support TX offloads */\n+\t__rte_marker(RTE_MARKER, cacheline1);\n \tunion {\n-\t\tuint64_t tx_offload;       /**< combined for easy fetch */\n+\t\tchar mbuf_cacheline1[RTE_CACHE_LINE_MIN_SIZE];\n \t\t__extension__\n \t\tstruct {\n-\t\t\tuint64_t l2_len:RTE_MBUF_L2_LEN_BITS;\n-\t\t\t/**< L2 (MAC) Header Length for non-tunneling pkt.\n-\t\t\t * Outer_L4_len + ... + Inner_L2_len for tunneling pkt.\n+#if RTE_IOVA_IN_MBUF\n+\t\t\t/**\n+\t\t\t * Next segment of scattered packet. Must be NULL in the last\n+\t\t\t * segment or in case of non-segmented packet.\n \t\t\t */\n-\t\t\tuint64_t l3_len:RTE_MBUF_L3_LEN_BITS;\n-\t\t\t/**< L3 (IP) Header Length. */\n-\t\t\tuint64_t l4_len:RTE_MBUF_L4_LEN_BITS;\n-\t\t\t/**< L4 (TCP/UDP) Header Length. */\n-\t\t\tuint64_t tso_segsz:RTE_MBUF_TSO_SEGSZ_BITS;\n-\t\t\t/**< TCP TSO segment size */\n-\n-\t\t\t/*\n-\t\t\t * Fields for Tx offloading of tunnels.\n-\t\t\t * These are undefined for packets which don't request\n-\t\t\t * any tunnel offloads (outer IP or UDP checksum,\n-\t\t\t * tunnel TSO).\n-\t\t\t *\n-\t\t\t * PMDs should not use these fields unconditionally\n-\t\t\t * when calculating offsets.\n-\t\t\t *\n-\t\t\t * Applications are expected to set appropriate tunnel\n-\t\t\t * offload flags when they fill in these fields.\n+\t\t\tstruct rte_mbuf *next;\n+#else\n+\t\t\t/**\n+\t\t\t * Reserved for dynamic fields\n+\t\t\t * when the next pointer is in first cache line\n+\t\t\t * (i.e. RTE_IOVA_IN_MBUF is 0).\n \t\t\t */\n-\t\t\tuint64_t outer_l3_len:RTE_MBUF_OUTL3_LEN_BITS;\n-\t\t\t/**< Outer L3 (IP) Hdr Length. */\n-\t\t\tuint64_t outer_l2_len:RTE_MBUF_OUTL2_LEN_BITS;\n-\t\t\t/**< Outer L2 (MAC) Hdr Length. */\n+\t\t\tuint64_t dynfield2;\n+#endif\n \n-\t\t\t/* uint64_t unused:RTE_MBUF_TXOFLD_UNUSED_BITS; */\n-\t\t};\n-\t};\n+\t\t\t/* fields to support TX offloads */\n+\t\t\tunion {\n+\t\t\t\tuint64_t tx_offload;       /**< combined for easy fetch */\n+\t\t\t\t__extension__\n+\t\t\t\tstruct {\n+\t\t\t\t\tuint64_t l2_len:RTE_MBUF_L2_LEN_BITS;\n+\t\t\t\t\t/**< L2 (MAC) Header Length for non-tunneling pkt.\n+\t\t\t\t\t * Outer_L4_len + ... + Inner_L2_len for tunneling pkt.\n+\t\t\t\t\t */\n+\t\t\t\t\tuint64_t l3_len:RTE_MBUF_L3_LEN_BITS;\n+\t\t\t\t\t/**< L3 (IP) Header Length. */\n+\t\t\t\t\tuint64_t l4_len:RTE_MBUF_L4_LEN_BITS;\n+\t\t\t\t\t/**< L4 (TCP/UDP) Header Length. */\n+\t\t\t\t\tuint64_t tso_segsz:RTE_MBUF_TSO_SEGSZ_BITS;\n+\t\t\t\t\t/**< TCP TSO segment size */\n+\n+\t\t\t\t\t/*\n+\t\t\t\t\t * Fields for Tx offloading of tunnels.\n+\t\t\t\t\t * These are undefined for packets which don't request\n+\t\t\t\t\t * any tunnel offloads (outer IP or UDP checksum,\n+\t\t\t\t\t * tunnel TSO).\n+\t\t\t\t\t *\n+\t\t\t\t\t * PMDs should not use these fields unconditionally\n+\t\t\t\t\t * when calculating offsets.\n+\t\t\t\t\t *\n+\t\t\t\t\t * Applications are expected to set appropriate tunnel\n+\t\t\t\t\t * offload flags when they fill in these fields.\n+\t\t\t\t\t */\n+\t\t\t\t\tuint64_t outer_l3_len:RTE_MBUF_OUTL3_LEN_BITS;\n+\t\t\t\t\t/**< Outer L3 (IP) Hdr Length. */\n+\t\t\t\t\tuint64_t outer_l2_len:RTE_MBUF_OUTL2_LEN_BITS;\n+\t\t\t\t\t/**< Outer L2 (MAC) Hdr Length. */\n+\n+\t\t\t\t\t/* uint64_t unused:RTE_MBUF_TXOFLD_UNUSED_BITS; */\n+\t\t\t\t};\n+\t\t\t};\n \n-\t/** Shared data for external buffer attached to mbuf. See\n-\t * rte_pktmbuf_attach_extbuf().\n-\t */\n-\tstruct rte_mbuf_ext_shared_info *shinfo;\n+\t\t\t/** Shared data for external buffer attached to mbuf. See\n+\t\t\t * rte_pktmbuf_attach_extbuf().\n+\t\t\t */\n+\t\t\tstruct rte_mbuf_ext_shared_info *shinfo;\n \n-\t/** Size of the application private data. In case of an indirect\n-\t * mbuf, it stores the direct mbuf private data size.\n-\t */\n-\tuint16_t priv_size;\n+\t\t\t/** Size of the application private data. In case of an indirect\n+\t\t\t * mbuf, it stores the direct mbuf private data size.\n+\t\t\t */\n+\t\t\tuint16_t priv_size;\n \n-\t/** Timesync flags for use with IEEE1588. */\n-\tuint16_t timesync;\n+\t\t\t/** Timesync flags for use with IEEE1588. */\n+\t\t\tuint16_t timesync;\n \n-\tuint32_t dynfield1[9]; /**< Reserved for dynamic fields. */\n+\t\t\tuint32_t dynfield1[9]; /**< Reserved for dynamic fields. */\n+\t\t};\n+\t};\n } __rte_cache_aligned;\n \n /**\n",
    "prefixes": [
        "v4",
        "01/18"
    ]
}