get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 62355,
    "url": "http://patches.dpdk.org/api/patches/62355/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1572847999-29334-3-git-send-email-viacheslavo@mellanox.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": "<1572847999-29334-3-git-send-email-viacheslavo@mellanox.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1572847999-29334-3-git-send-email-viacheslavo@mellanox.com",
    "date": "2019-11-04T06:13:19",
    "name": "[v9,2/2] ethdev: move egress metadata to dynamic field",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "57edf81f429a161564959eea1b5a94a5dd25d3d1",
    "submitter": {
        "id": 1102,
        "url": "http://patches.dpdk.org/api/people/1102/?format=api",
        "name": "Slava Ovsiienko",
        "email": "viacheslavo@mellanox.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1572847999-29334-3-git-send-email-viacheslavo@mellanox.com/mbox/",
    "series": [
        {
            "id": 7210,
            "url": "http://patches.dpdk.org/api/series/7210/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=7210",
            "date": "2019-11-04T06:13:17",
            "name": "extend flow metadata feature",
            "version": 9,
            "mbox": "http://patches.dpdk.org/series/7210/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/62355/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/62355/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 53EC4A04A4;\n\tMon,  4 Nov 2019 07:14:06 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 2030B1BC25;\n\tMon,  4 Nov 2019 07:14:01 +0100 (CET)",
            "from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129])\n by dpdk.org (Postfix) with ESMTP id CEE897CBC\n for <dev@dpdk.org>; Mon,  4 Nov 2019 07:13:56 +0100 (CET)",
            "from Internal Mail-Server by MTLPINE1 (envelope-from\n viacheslavo@mellanox.com)\n with ESMTPS (AES256-SHA encrypted); 4 Nov 2019 08:13:53 +0200",
            "from pegasus11.mtr.labs.mlnx (pegasus11.mtr.labs.mlnx\n [10.210.16.104])\n by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id xA46DrGa012676;\n Mon, 4 Nov 2019 08:13:53 +0200",
            "from pegasus11.mtr.labs.mlnx (localhost [127.0.0.1])\n by pegasus11.mtr.labs.mlnx (8.14.7/8.14.7) with ESMTP id xA46Drbe029697;\n Mon, 4 Nov 2019 06:13:53 GMT",
            "(from viacheslavo@localhost)\n by pegasus11.mtr.labs.mlnx (8.14.7/8.14.7/Submit) id xA46Drn6029696;\n Mon, 4 Nov 2019 06:13:53 GMT"
        ],
        "X-Authentication-Warning": "pegasus11.mtr.labs.mlnx: viacheslavo set sender to\n viacheslavo@mellanox.com using -f",
        "From": "Viacheslav Ovsiienko <viacheslavo@mellanox.com>",
        "To": "dev@dpdk.org",
        "Cc": "matan@mellanox.com, rasland@mellanox.com, thomas@monjalon.net,\n olivier.matz@6wind.com, arybchenko@solarflare.com, orika@mellanox.com",
        "Date": "Mon,  4 Nov 2019 06:13:19 +0000",
        "Message-Id": "<1572847999-29334-3-git-send-email-viacheslavo@mellanox.com>",
        "X-Mailer": "git-send-email 1.8.3.1",
        "In-Reply-To": "<1572847999-29334-1-git-send-email-viacheslavo@mellanox.com>",
        "References": "<1572540506-531-2-git-send-email-viacheslavo@mellanox.com>\n <1572847999-29334-1-git-send-email-viacheslavo@mellanox.com>",
        "Subject": "[dpdk-dev] [PATCH v9 2/2] ethdev: move egress metadata to dynamic\n\tfield",
        "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": "The dynamic mbuf fields were introduced by [1]. The egress metadata is\ngood candidate to be moved from statically allocated field tx_metadata to\ndynamic one. Because mbufs are used in half-duplex fashion only, it is\nsafe to share this dynamic field with ingress metadata.\n\nThe shared dynamic field contains either egress (if application going to\ntransmit mbuf with tx_burst) or ingress (if mbuf is received with rx_burst)\nmetadata and can be accessed by RTE_FLOW_DYNF_METADATA() macro or with\nrte_flow_dynf_metadata_set() and rte_flow_dynf_metadata_get() helper\nroutines. PKT_TX_DYNF_METADATA/PKT_RX_DYNF_METADATA flag will be set\nalong with the data.\n\nThe mbuf dynamic field must be registered by calling\nrte_flow_dynf_metadata_register() prior accessing the data.\n\nThe availability of dynamic mbuf metadata field can be checked with\nrte_flow_dynf_metadata_avail() routine.\n\nDEV_TX_OFFLOAD_MATCH_METADATA offload and configuration flag is removed.\nThe metadata support in PMDs is engaged on dynamic field registration.\n\nMetadata feature is getting complex. We might have some set of actions\nand items that might be supported by PMDs in multiple combinations,\nthe supported values and masks are the subjects to query by perfroming\ntrials (with rte_flow_validate).\n\n[1] http://patches.dpdk.org/patch/62040/\n\nSigned-off-by: Viacheslav Ovsiienko <viacheslavo@mellanox.com>\nAcked-by: Andrew Rybchenko <arybchenko@solarflare.com>\nAcked-by: Olivier Matz <olivier.matz@6wind.com>\nAcked-by: Ori Kam <orika@mellanox.com>\n---\nv9: - rebased\n\nv8: - http://patches.dpdk.org/patch/62287/\n    - updates PKT_LAST_FREE\n\nv7: - http://patches.dpdk.org/patch/62280/ \n    - updates release notes\n\nv6: - http://patches.dpdk.org/patch/62244\n\n app/test-pmd/cmdline.c                 |  3 ++-\n app/test-pmd/testpmd.c                 |  4 ----\n app/test-pmd/testpmd.h                 |  2 +-\n app/test-pmd/util.c                    | 15 +++++++++------\n app/test/test_mbuf.c                   |  1 -\n doc/guides/prog_guide/rte_flow.rst     |  6 +++---\n doc/guides/rel_notes/release_19_11.rst |  5 +++++\n drivers/net/mlx5/mlx5_flow_dv.c        | 19 ++++++-------------\n drivers/net/mlx5/mlx5_rxtx.c           | 22 +++++++++++-----------\n drivers/net/mlx5/mlx5_rxtx_vec.h       |  6 ------\n drivers/net/mlx5/mlx5_txq.c            |  4 ----\n lib/librte_ethdev/rte_ethdev.c         |  1 -\n lib/librte_ethdev/rte_ethdev.h         |  5 -----\n lib/librte_ethdev/rte_flow.h           | 19 ++++++++++---------\n lib/librte_mbuf/rte_mbuf.c             |  2 --\n lib/librte_mbuf/rte_mbuf_core.h        | 21 ++-------------------\n 16 files changed, 49 insertions(+), 86 deletions(-)",
    "diff": "diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c\nindex 4478069..49c45a3 100644\n--- a/app/test-pmd/cmdline.c\n+++ b/app/test-pmd/cmdline.c\n@@ -18718,12 +18718,13 @@ struct cmd_config_tx_metadata_specific_result {\n \n \tif (port_id_is_invalid(res->port_id, ENABLED_WARN))\n \t\treturn;\n-\tports[res->port_id].tx_metadata = rte_cpu_to_be_32(res->value);\n+\tports[res->port_id].tx_metadata = res->value;\n \t/* Add/remove callback to insert valid metadata in every Tx packet. */\n \tif (ports[res->port_id].tx_metadata)\n \t\tadd_tx_md_callback(res->port_id);\n \telse\n \t\tremove_tx_md_callback(res->port_id);\n+\trte_flow_dynf_metadata_register();\n }\n \n cmdline_parse_token_string_t cmd_config_tx_metadata_specific_port =\ndiff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c\nindex 38acbc5..5ba9741 100644\n--- a/app/test-pmd/testpmd.c\n+++ b/app/test-pmd/testpmd.c\n@@ -1119,10 +1119,6 @@ struct extmem_param {\n \t\t      DEV_TX_OFFLOAD_MBUF_FAST_FREE))\n \t\t\tport->dev_conf.txmode.offloads &=\n \t\t\t\t~DEV_TX_OFFLOAD_MBUF_FAST_FREE;\n-\t\tif (!(port->dev_info.tx_offload_capa &\n-\t\t\tDEV_TX_OFFLOAD_MATCH_METADATA))\n-\t\t\tport->dev_conf.txmode.offloads &=\n-\t\t\t\t~DEV_TX_OFFLOAD_MATCH_METADATA;\n \t\tif (numa_support) {\n \t\t\tif (port_numa[pid] != NUMA_NO_CONFIG)\n \t\t\t\tport_per_socket[port_numa[pid]]++;\ndiff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h\nindex ec10a1a..419997f 100644\n--- a/app/test-pmd/testpmd.h\n+++ b/app/test-pmd/testpmd.h\n@@ -193,7 +193,7 @@ struct rte_port {\n \tstruct softnic_port     softport;  /**< softnic params */\n #endif\n \t/**< metadata value to insert in Tx packets. */\n-\trte_be32_t\t\ttx_metadata;\n+\tuint32_t\t\ttx_metadata;\n \tconst struct rte_eth_rxtx_callback *tx_set_md_cb[MAX_QUEUE_ID+1];\n };\n \ndiff --git a/app/test-pmd/util.c b/app/test-pmd/util.c\nindex 56075b3..cf41864 100644\n--- a/app/test-pmd/util.c\n+++ b/app/test-pmd/util.c\n@@ -82,8 +82,9 @@\n \t\t\t       mb->vlan_tci, mb->vlan_tci_outer);\n \t\telse if (ol_flags & PKT_RX_VLAN)\n \t\t\tprintf(\" - VLAN tci=0x%x\", mb->vlan_tci);\n-\t\tif (ol_flags & PKT_TX_METADATA)\n-\t\t\tprintf(\" - Tx metadata: 0x%x\", mb->tx_metadata);\n+\t\tif (ol_flags & PKT_TX_DYNF_METADATA)\n+\t\t\tprintf(\" - Tx metadata: 0x%x\",\n+\t\t\t       *RTE_FLOW_DYNF_METADATA(mb));\n \t\tif (ol_flags & PKT_RX_DYNF_METADATA)\n \t\t\tprintf(\" - Rx metadata: 0x%x\",\n \t\t\t       *RTE_FLOW_DYNF_METADATA(mb));\n@@ -188,10 +189,12 @@\n \t * Add metadata value to every Tx packet,\n \t * and set ol_flags accordingly.\n \t */\n-\tfor (i = 0; i < nb_pkts; i++) {\n-\t\tpkts[i]->tx_metadata = ports[port_id].tx_metadata;\n-\t\tpkts[i]->ol_flags |= PKT_TX_METADATA;\n-\t}\n+\tif (rte_flow_dynf_metadata_avail())\n+\t\tfor (i = 0; i < nb_pkts; i++) {\n+\t\t\t*RTE_FLOW_DYNF_METADATA(pkts[i]) =\n+\t\t\t\t\t\tports[port_id].tx_metadata;\n+\t\t\tpkts[i]->ol_flags |= PKT_TX_DYNF_METADATA;\n+\t\t}\n \treturn nb_pkts;\n }\n \ndiff --git a/app/test/test_mbuf.c b/app/test/test_mbuf.c\nindex 854bc26..61ecffc 100644\n--- a/app/test/test_mbuf.c\n+++ b/app/test/test_mbuf.c\n@@ -1669,7 +1669,6 @@ struct flag_name {\n \t\tVAL_NAME(PKT_TX_SEC_OFFLOAD),\n \t\tVAL_NAME(PKT_TX_UDP_SEG),\n \t\tVAL_NAME(PKT_TX_OUTER_UDP_CKSUM),\n-\t\tVAL_NAME(PKT_TX_METADATA),\n \t};\n \n \t/* Test case to check with valid flag */\ndiff --git a/doc/guides/prog_guide/rte_flow.rst b/doc/guides/prog_guide/rte_flow.rst\nindex 1f72cc7..ac0020e 100644\n--- a/doc/guides/prog_guide/rte_flow.rst\n+++ b/doc/guides/prog_guide/rte_flow.rst\n@@ -692,7 +692,7 @@ Item: ``META``\n Matches 32 bit metadata item set.\n \n On egress, metadata can be set either by mbuf metadata field with\n-PKT_TX_METADATA flag or ``SET_META`` action. On ingress, ``SET_META``\n+PKT_TX_DYNF_METADATA flag or ``SET_META`` action. On ingress, ``SET_META``\n action sets metadata for a packet and the metadata will be reported via\n ``metadata`` dynamic field of ``rte_mbuf`` with PKT_RX_DYNF_METADATA flag.\n \n@@ -2532,8 +2532,8 @@ Action: ``SET_META``\n \n Set metadata. Item ``META`` matches metadata.\n \n-Metadata set by mbuf metadata field with PKT_TX_METADATA flag on egress will be\n-overridden by this action. On ingress, the metadata will be carried by\n+Metadata set by mbuf metadata field with PKT_TX_DYNF_METADATA flag on egress\n+will be overridden by this action. On ingress, the metadata will be carried by\n ``metadata`` dynamic field of ``rte_mbuf`` which can be accessed by\n ``RTE_FLOW_DYNF_METADATA()``. PKT_RX_DYNF_METADATA flag will be set along\n with the data.\ndiff --git a/doc/guides/rel_notes/release_19_11.rst b/doc/guides/rel_notes/release_19_11.rst\nindex f7f2ddb..dd50710 100644\n--- a/doc/guides/rel_notes/release_19_11.rst\n+++ b/doc/guides/rel_notes/release_19_11.rst\n@@ -365,6 +365,11 @@ API Changes\n   is the minor compatibility issue for applications in case of 32-bit values\n   supported.\n \n+* metadata: the tx_metadata mbuf field is moved to dymanic one.\n+  PKT_TX_METADATA flag is replaced with PKT_TX_DYNF_METADATA.\n+  DEV_TX_OFFLOAD_MATCH_METADATA offload flag is removed, now metadata\n+  support in PMD is engaged on dynamic field registration.\n+\n * sched: The pipe nodes configuration parameters such as number of pipes,\n   pipe queue sizes, pipe profiles, etc., are moved from port level structure\n   to subport level. This allows different subports of the same port to\ndiff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c\nindex d9a7fd4..f961bff 100644\n--- a/drivers/net/mlx5/mlx5_flow_dv.c\n+++ b/drivers/net/mlx5/mlx5_flow_dv.c\n@@ -793,7 +793,7 @@ struct field_modify_info modify_tcp[] = {\n  *   0 on success, a negative errno value otherwise and rte_errno is set.\n  */\n static int\n-flow_dv_validate_item_meta(struct rte_eth_dev *dev,\n+flow_dv_validate_item_meta(struct rte_eth_dev *dev __rte_unused,\n \t\t\t   const struct rte_flow_item *item,\n \t\t\t   const struct rte_flow_attr *attr,\n \t\t\t   struct rte_flow_error *error)\n@@ -801,17 +801,10 @@ struct field_modify_info modify_tcp[] = {\n \tconst struct rte_flow_item_meta *spec = item->spec;\n \tconst struct rte_flow_item_meta *mask = item->mask;\n \tconst struct rte_flow_item_meta nic_mask = {\n-\t\t.data = RTE_BE32(UINT32_MAX)\n+\t\t.data = UINT32_MAX\n \t};\n \tint ret;\n-\tuint64_t offloads = dev->data->dev_conf.txmode.offloads;\n \n-\tif (!(offloads & DEV_TX_OFFLOAD_MATCH_METADATA))\n-\t\treturn rte_flow_error_set(error, EPERM,\n-\t\t\t\t\t  RTE_FLOW_ERROR_TYPE_ITEM,\n-\t\t\t\t\t  NULL,\n-\t\t\t\t\t  \"match on metadata offload \"\n-\t\t\t\t\t  \"configuration is off for this port\");\n \tif (!spec)\n \t\treturn rte_flow_error_set(error, EINVAL,\n \t\t\t\t\t  RTE_FLOW_ERROR_TYPE_ITEM_SPEC,\n@@ -4750,10 +4743,10 @@ struct field_modify_info modify_tcp[] = {\n \t\tmeta_m = &rte_flow_item_meta_mask;\n \tmeta_v = (const void *)item->spec;\n \tif (meta_v) {\n-\t\tMLX5_SET(fte_match_set_misc2, misc2_m, metadata_reg_a,\n-\t\t\t rte_be_to_cpu_32(meta_m->data));\n-\t\tMLX5_SET(fte_match_set_misc2, misc2_v, metadata_reg_a,\n-\t\t\t rte_be_to_cpu_32(meta_v->data & meta_m->data));\n+\t\tMLX5_SET(fte_match_set_misc2, misc2_m,\n+\t\t\t metadata_reg_a, meta_m->data);\n+\t\tMLX5_SET(fte_match_set_misc2, misc2_v,\n+\t\t\t metadata_reg_a, meta_v->data & meta_m->data);\n \t}\n }\n \ndiff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c\nindex f597c89..88a4378 100644\n--- a/drivers/net/mlx5/mlx5_rxtx.c\n+++ b/drivers/net/mlx5/mlx5_rxtx.c\n@@ -2281,8 +2281,8 @@ enum mlx5_txcmp_code {\n \tes->swp_offs = txq_mbuf_to_swp(loc, &es->swp_flags, olx);\n \t/* Fill metadata field if needed. */\n \tes->metadata = MLX5_TXOFF_CONFIG(METADATA) ?\n-\t\t       loc->mbuf->ol_flags & PKT_TX_METADATA ?\n-\t\t       loc->mbuf->tx_metadata : 0 : 0;\n+\t\t       loc->mbuf->ol_flags & PKT_TX_DYNF_METADATA ?\n+\t\t       *RTE_FLOW_DYNF_METADATA(loc->mbuf) : 0 : 0;\n \t/* Engage VLAN tag insertion feature if requested. */\n \tif (MLX5_TXOFF_CONFIG(VLAN) &&\n \t    loc->mbuf->ol_flags & PKT_TX_VLAN_PKT) {\n@@ -2341,8 +2341,8 @@ enum mlx5_txcmp_code {\n \tes->swp_offs = txq_mbuf_to_swp(loc, &es->swp_flags, olx);\n \t/* Fill metadata field if needed. */\n \tes->metadata = MLX5_TXOFF_CONFIG(METADATA) ?\n-\t\t       loc->mbuf->ol_flags & PKT_TX_METADATA ?\n-\t\t       loc->mbuf->tx_metadata : 0 : 0;\n+\t\t       loc->mbuf->ol_flags & PKT_TX_DYNF_METADATA ?\n+\t\t       *RTE_FLOW_DYNF_METADATA(loc->mbuf) : 0 : 0;\n \tstatic_assert(MLX5_ESEG_MIN_INLINE_SIZE ==\n \t\t\t\t(sizeof(uint16_t) +\n \t\t\t\t sizeof(rte_v128u32_t)),\n@@ -2434,8 +2434,8 @@ enum mlx5_txcmp_code {\n \tes->swp_offs = txq_mbuf_to_swp(loc, &es->swp_flags, olx);\n \t/* Fill metadata field if needed. */\n \tes->metadata = MLX5_TXOFF_CONFIG(METADATA) ?\n-\t\t       loc->mbuf->ol_flags & PKT_TX_METADATA ?\n-\t\t       loc->mbuf->tx_metadata : 0 : 0;\n+\t\t       loc->mbuf->ol_flags & PKT_TX_DYNF_METADATA ?\n+\t\t       *RTE_FLOW_DYNF_METADATA(loc->mbuf) : 0 : 0;\n \tstatic_assert(MLX5_ESEG_MIN_INLINE_SIZE ==\n \t\t\t\t(sizeof(uint16_t) +\n \t\t\t\t sizeof(rte_v128u32_t)),\n@@ -2628,8 +2628,8 @@ enum mlx5_txcmp_code {\n \tes->swp_offs = txq_mbuf_to_swp(loc, &es->swp_flags, olx);\n \t/* Fill metadata field if needed. */\n \tes->metadata = MLX5_TXOFF_CONFIG(METADATA) ?\n-\t\t       loc->mbuf->ol_flags & PKT_TX_METADATA ?\n-\t\t       loc->mbuf->tx_metadata : 0 : 0;\n+\t\t       loc->mbuf->ol_flags & PKT_TX_DYNF_METADATA ?\n+\t\t       *RTE_FLOW_DYNF_METADATA(loc->mbuf) : 0 : 0;\n \tstatic_assert(MLX5_ESEG_MIN_INLINE_SIZE ==\n \t\t\t\t(sizeof(uint16_t) +\n \t\t\t\t sizeof(rte_v128u32_t)),\n@@ -3700,8 +3700,8 @@ enum mlx5_txcmp_code {\n \t\treturn false;\n \t/* Fill metadata field if needed. */\n \tif (MLX5_TXOFF_CONFIG(METADATA) &&\n-\t\tes->metadata != (loc->mbuf->ol_flags & PKT_TX_METADATA ?\n-\t\t\t\t loc->mbuf->tx_metadata : 0))\n+\t\tes->metadata != (loc->mbuf->ol_flags & PKT_TX_DYNF_METADATA ?\n+\t\t\t\t *RTE_FLOW_DYNF_METADATA(loc->mbuf) : 0))\n \t\treturn false;\n \t/* There must be no VLAN packets in eMPW loop. */\n \tif (MLX5_TXOFF_CONFIG(VLAN))\n@@ -5149,7 +5149,7 @@ enum mlx5_txcmp_code {\n \t\t */\n \t\tolx |= MLX5_TXOFF_CONFIG_EMPW;\n \t}\n-\tif (tx_offloads & DEV_TX_OFFLOAD_MATCH_METADATA) {\n+\tif (rte_flow_dynf_metadata_avail()) {\n \t\t/* We should support Flow metadata. */\n \t\tolx |= MLX5_TXOFF_CONFIG_METADATA;\n \t}\ndiff --git a/drivers/net/mlx5/mlx5_rxtx_vec.h b/drivers/net/mlx5/mlx5_rxtx_vec.h\nindex b54ff72..85e0bd5 100644\n--- a/drivers/net/mlx5/mlx5_rxtx_vec.h\n+++ b/drivers/net/mlx5/mlx5_rxtx_vec.h\n@@ -19,12 +19,6 @@\n \t DEV_TX_OFFLOAD_TCP_CKSUM | \\\n \t DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM)\n \n-/* HW offload capabilities of vectorized Tx. */\n-#define MLX5_VEC_TX_OFFLOAD_CAP \\\n-\t(MLX5_VEC_TX_CKSUM_OFFLOAD_CAP | \\\n-\t DEV_TX_OFFLOAD_MATCH_METADATA | \\\n-\t DEV_TX_OFFLOAD_MULTI_SEGS)\n-\n /*\n  * Compile time sanity check for vectorized functions.\n  */\ndiff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c\nindex dfc379c..97991f0 100644\n--- a/drivers/net/mlx5/mlx5_txq.c\n+++ b/drivers/net/mlx5/mlx5_txq.c\n@@ -128,10 +128,6 @@\n \t\t\toffloads |= (DEV_TX_OFFLOAD_VXLAN_TNL_TSO |\n \t\t\t\t     DEV_TX_OFFLOAD_GRE_TNL_TSO);\n \t}\n-#ifdef HAVE_IBV_FLOW_DV_SUPPORT\n-\tif (config->dv_flow_en)\n-\t\toffloads |= DEV_TX_OFFLOAD_MATCH_METADATA;\n-#endif\n \treturn offloads;\n }\n \ndiff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c\nindex 85ab5f0..ebc62d0 100644\n--- a/lib/librte_ethdev/rte_ethdev.c\n+++ b/lib/librte_ethdev/rte_ethdev.c\n@@ -161,7 +161,6 @@ struct rte_eth_xstats_name_off {\n \tRTE_TX_OFFLOAD_BIT2STR(UDP_TNL_TSO),\n \tRTE_TX_OFFLOAD_BIT2STR(IP_TNL_TSO),\n \tRTE_TX_OFFLOAD_BIT2STR(OUTER_UDP_CKSUM),\n-\tRTE_TX_OFFLOAD_BIT2STR(MATCH_METADATA),\n };\n \n #undef RTE_TX_OFFLOAD_BIT2STR\ndiff --git a/lib/librte_ethdev/rte_ethdev.h b/lib/librte_ethdev/rte_ethdev.h\nindex e6ef4b4..81d8908 100644\n--- a/lib/librte_ethdev/rte_ethdev.h\n+++ b/lib/librte_ethdev/rte_ethdev.h\n@@ -1145,11 +1145,6 @@ struct rte_eth_conf {\n #define DEV_TX_OFFLOAD_IP_TNL_TSO       0x00080000\n /** Device supports outer UDP checksum */\n #define DEV_TX_OFFLOAD_OUTER_UDP_CKSUM  0x00100000\n-/**\n- * Device supports match on metadata Tx offload..\n- * Application must set PKT_TX_METADATA and mbuf metadata field.\n- */\n-#define DEV_TX_OFFLOAD_MATCH_METADATA   0x00200000\n \n #define RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP 0x00000001\n /**< Device supports Rx queue setup after device started*/\ndiff --git a/lib/librte_ethdev/rte_flow.h b/lib/librte_ethdev/rte_flow.h\nindex 934c3e1..452d359 100644\n--- a/lib/librte_ethdev/rte_flow.h\n+++ b/lib/librte_ethdev/rte_flow.h\n@@ -1277,12 +1277,12 @@ struct rte_flow_item_icmp6_nd_opt_tla_eth {\n /**\n  * RTE_FLOW_ITEM_TYPE_META\n  *\n- * Matches a specified metadata value. On egress, metadata can be set either by\n- * mbuf tx_metadata field with PKT_TX_METADATA flag or\n- * RTE_FLOW_ACTION_TYPE_SET_META. On ingress, RTE_FLOW_ACTION_TYPE_SET_META sets\n- * metadata for a packet and the metadata will be reported via mbuf metadata\n- * dynamic field with PKT_RX_DYNF_METADATA flag. The dynamic mbuf field must be\n- * registered in advance by rte_flow_dynf_metadata_register().\n+ * Matches a specified metadata value. On egress, metadata can be set\n+ * either by mbuf dynamic metadata field with PKT_TX_DYNF_METADATA flag or\n+ * RTE_FLOW_ACTION_TYPE_SET_META. On ingress, RTE_FLOW_ACTION_TYPE_SET_META\n+ * sets metadata for a packet and the metadata will be reported via mbuf\n+ * metadata dynamic field with PKT_RX_DYNF_METADATA flag. The dynamic mbuf\n+ * field must be registered in advance by rte_flow_dynf_metadata_register().\n  */\n struct rte_flow_item_meta {\n \tuint32_t data;\n@@ -2512,8 +2512,8 @@ struct rte_flow_action_set_tag {\n  *\n  * RTE_FLOW_ACTION_TYPE_SET_META\n  *\n- * Set metadata. Metadata set by mbuf tx_metadata field with\n- * PKT_TX_METADATA flag on egress will be overridden by this action. On\n+ * Set metadata. Metadata set by mbuf metadata dynamic field with\n+ * PKT_TX_DYNF_DATA flag on egress will be overridden by this action. On\n  * ingress, the metadata will be carried by mbuf metadata dynamic field\n  * with PKT_RX_DYNF_METADATA flag if set.  The dynamic mbuf field must be\n  * registered in advance by rte_flow_dynf_metadata_register().\n@@ -2540,8 +2540,9 @@ struct rte_flow_action_set_meta {\n #define RTE_FLOW_DYNF_METADATA(m) \\\n \tRTE_MBUF_DYNFIELD((m), rte_flow_dynf_metadata_offs, uint32_t *)\n \n-/* Mbuf dynamic flag for metadata. */\n+/* Mbuf dynamic flags for metadata. */\n #define PKT_RX_DYNF_METADATA (rte_flow_dynf_metadata_mask)\n+#define PKT_TX_DYNF_METADATA (rte_flow_dynf_metadata_mask)\n \n __rte_experimental\n static inline uint32_t\ndiff --git a/lib/librte_mbuf/rte_mbuf.c b/lib/librte_mbuf/rte_mbuf.c\nindex 8c51dc1..35df1c4 100644\n--- a/lib/librte_mbuf/rte_mbuf.c\n+++ b/lib/librte_mbuf/rte_mbuf.c\n@@ -670,7 +670,6 @@ const char *rte_get_tx_ol_flag_name(uint64_t mask)\n \tcase PKT_TX_SEC_OFFLOAD: return \"PKT_TX_SEC_OFFLOAD\";\n \tcase PKT_TX_UDP_SEG: return \"PKT_TX_UDP_SEG\";\n \tcase PKT_TX_OUTER_UDP_CKSUM: return \"PKT_TX_OUTER_UDP_CKSUM\";\n-\tcase PKT_TX_METADATA: return \"PKT_TX_METADATA\";\n \tdefault: return NULL;\n \t}\n }\n@@ -707,7 +706,6 @@ const char *rte_get_tx_ol_flag_name(uint64_t mask)\n \t\t{ PKT_TX_SEC_OFFLOAD, PKT_TX_SEC_OFFLOAD, NULL },\n \t\t{ PKT_TX_UDP_SEG, PKT_TX_UDP_SEG, NULL },\n \t\t{ PKT_TX_OUTER_UDP_CKSUM, PKT_TX_OUTER_UDP_CKSUM, NULL },\n-\t\t{ PKT_TX_METADATA, PKT_TX_METADATA, NULL },\n \t};\n \tconst char *name;\n \tunsigned int i;\ndiff --git a/lib/librte_mbuf/rte_mbuf_core.h b/lib/librte_mbuf/rte_mbuf_core.h\nindex 3022701..9a8557d 100644\n--- a/lib/librte_mbuf/rte_mbuf_core.h\n+++ b/lib/librte_mbuf/rte_mbuf_core.h\n@@ -187,16 +187,11 @@\n /* add new RX flags here, don't forget to update PKT_FIRST_FREE */\n \n #define PKT_FIRST_FREE (1ULL << 23)\n-#define PKT_LAST_FREE (1ULL << 39)\n+#define PKT_LAST_FREE (1ULL << 40)\n \n /* add new TX flags here, don't forget to update PKT_LAST_FREE  */\n \n /**\n- * Indicate that the metadata field in the mbuf is in use.\n- */\n-#define PKT_TX_METADATA\t(1ULL << 40)\n-\n-/**\n  * Outer UDP checksum offload flag. This flag is used for enabling\n  * outer UDP checksum in PMD. To use outer UDP checksum, the user needs to\n  * 1) Enable the following in mbuf,\n@@ -389,8 +384,7 @@\n \t\tPKT_TX_MACSEC |\t\t \\\n \t\tPKT_TX_SEC_OFFLOAD |\t \\\n \t\tPKT_TX_UDP_SEG |\t \\\n-\t\tPKT_TX_OUTER_UDP_CKSUM | \\\n-\t\tPKT_TX_METADATA)\n+\t\tPKT_TX_OUTER_UDP_CKSUM)\n \n /**\n  * Mbuf having an external buffer attached. shinfo in mbuf must be filled.\n@@ -601,17 +595,6 @@ struct rte_mbuf {\n \t\t\t/**< User defined tags. See rte_distributor_process() */\n \t\t\tuint32_t usr;\n \t\t} hash;                   /**< hash information */\n-\t\tstruct {\n-\t\t\t/**\n-\t\t\t * Application specific metadata value\n-\t\t\t * for egress flow rule match.\n-\t\t\t * Valid if PKT_TX_METADATA is set.\n-\t\t\t * Located here to allow conjunct use\n-\t\t\t * with hash.sched.hi.\n-\t\t\t */\n-\t\t\tuint32_t tx_metadata;\n-\t\t\tuint32_t reserved;\n-\t\t};\n \t};\n \n \t/** Outer VLAN TCI (CPU order), valid if PKT_RX_QINQ is set. */\n",
    "prefixes": [
        "v9",
        "2/2"
    ]
}