get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 117002,
    "url": "http://patches.dpdk.org/api/patches/117002/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20220928033130.9106-4-suanmingm@nvidia.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": "<20220928033130.9106-4-suanmingm@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220928033130.9106-4-suanmingm@nvidia.com",
    "date": "2022-09-28T03:31:16",
    "name": "[v2,03/17] net/mlx5: add shared header reformat support",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "a79ad452df6cb905ad89f00f57d8e35bfd4733dc",
    "submitter": {
        "id": 1887,
        "url": "http://patches.dpdk.org/api/people/1887/?format=api",
        "name": "Suanming Mou",
        "email": "suanmingm@nvidia.com"
    },
    "delegate": {
        "id": 3268,
        "url": "http://patches.dpdk.org/api/users/3268/?format=api",
        "username": "rasland",
        "first_name": "Raslan",
        "last_name": "Darawsheh",
        "email": "rasland@nvidia.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20220928033130.9106-4-suanmingm@nvidia.com/mbox/",
    "series": [
        {
            "id": 24870,
            "url": "http://patches.dpdk.org/api/series/24870/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=24870",
            "date": "2022-09-28T03:31:15",
            "name": "net/mlx5: HW steering PMD update",
            "version": 2,
            "mbox": "http://patches.dpdk.org/series/24870/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/117002/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/117002/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 977B6A00C2;\n\tWed, 28 Sep 2022 05:32:25 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 6C28742B6C;\n\tWed, 28 Sep 2022 05:32:09 +0200 (CEST)",
            "from NAM11-DM6-obe.outbound.protection.outlook.com\n (mail-dm6nam11on2073.outbound.protection.outlook.com [40.107.223.73])\n by mails.dpdk.org (Postfix) with ESMTP id 7E37E4282E\n for <dev@dpdk.org>; Wed, 28 Sep 2022 05:32:06 +0200 (CEST)",
            "from DM6PR11CA0056.namprd11.prod.outlook.com (2603:10b6:5:14c::33)\n by MW4PR12MB7440.namprd12.prod.outlook.com (2603:10b6:303:223::22) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.17; Wed, 28 Sep\n 2022 03:32:03 +0000",
            "from DM6NAM11FT094.eop-nam11.prod.protection.outlook.com\n (2603:10b6:5:14c:cafe::4b) by DM6PR11CA0056.outlook.office365.com\n (2603:10b6:5:14c::33) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.26 via Frontend\n Transport; Wed, 28 Sep 2022 03:32:03 +0000",
            "from mail.nvidia.com (216.228.117.161) by\n DM6NAM11FT094.mail.protection.outlook.com (10.13.172.195) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.5676.17 via Frontend Transport; Wed, 28 Sep 2022 03:32:02 +0000",
            "from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com\n (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.26; Tue, 27 Sep\n 2022 20:31:54 -0700",
            "from nvidia.com (10.126.230.35) by rnnvmail201.nvidia.com\n (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.29; Tue, 27 Sep\n 2022 20:31:52 -0700"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=BwrCgXC1O/MxWqf19ALfq7KmKDADX9sF1LBdEAvy1/VCKqMQaArCEviYnnRTZbyj9f2j2LzbSLJrhiMwh1yIXyhHS6/vC2sqBmsmNl+GgbvtllsiHQIbqDm2op3yWzf4lYLdTyuIvauOW21gnhtWJjBmHHQEaKnUk8JskMNDOC00bdu0Wa6poB6Q16SxfeuvRxAg33iZ5IgQiEwLjBYNqzMy+laVmcoJFSQfezRSHhjTcQ60q9HX8RNlrZFnTLzuNJH8+kJgNQlIeqFN0+gG7dE2OQyZfDHrevQevWx/hdMBxp0bkwW4qYiiaad3SKAfukARNCXkGV6Meoq/JsssAA==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=ybLPPrfAx5pOZBmLeKwO8WikZMPmbcU7ZawPMEOSslY=;\n b=EVFEwU+83nGsThlt5lcASbh2P9XTlE0IM8506zVd90Tf3DyPZVAyPcOpSx9uJ2A2bql5Gi9WFhBY6QKlk4wtq5dmrE1mnIARg0McvifqvalUeuts1WVrovV54UuRgaD4KbRzvpheFJX3V7NCCcyG8ujTz5IhauNIPb3FFnGME+5ZBalgJQrOpD0lx1llRrucdlMXBTPiAOU+HTa/2fyw45mi+LrDLan1POvffv0FM5Brg/TK0PGylQq15xajGrGNCGPRZiEX3vcj8L2dtIMWVsgMmOTpiNRS6cs1ZCFzP8k1juER4E6taJzSdjSR6AOU21C9g1DkA9W6fhVMLZYysQ==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.117.161) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com;\n dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com;\n dkim=none (message not signed); arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=ybLPPrfAx5pOZBmLeKwO8WikZMPmbcU7ZawPMEOSslY=;\n b=EjL27QbTb7RTdwx2MsQbJOmarFoJ0FcVBbkp3z/nvNnQ/ObrNbfJBd+ag6SuoFAQ8ScNYkomdjFNhPLGgU4hvjJilUyzfh4JOtshNUnHrTY/8k4JC0bxjNoV9q1FJSRQ0+i9VosPNdBbdYs9ikWLXNUHZBB2c6ERRgV1L8fzW2Fno+EIYU882z78Svu44j+Qv3NI0bO3U1dIviECavor+cwYHG54dO+vc3G+tNXQFGeJXmwtSjk7nIapC0CBDkAU7GrtRVQ4Q4qi9947qteTia8J+vEVTjH5dk+PAPOq8Z/PZJLgLiIgzbJzC0gvSnDI56ySR8sqIxrJpJBgRw0QkQ==",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.117.161)\n smtp.mailfrom=nvidia.com;\n dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=nvidia.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of nvidia.com designates\n 216.228.117.161 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C",
        "From": "Suanming Mou <suanmingm@nvidia.com>",
        "To": "Matan Azrad <matan@nvidia.com>, Viacheslav Ovsiienko\n <viacheslavo@nvidia.com>",
        "CC": "<dev@dpdk.org>, <rasland@nvidia.com>, <orika@nvidia.com>",
        "Subject": "[PATCH v2 03/17] net/mlx5: add shared header reformat support",
        "Date": "Wed, 28 Sep 2022 06:31:16 +0300",
        "Message-ID": "<20220928033130.9106-4-suanmingm@nvidia.com>",
        "X-Mailer": "git-send-email 2.18.1",
        "In-Reply-To": "<20220928033130.9106-1-suanmingm@nvidia.com>",
        "References": "<20220923144334.27736-1-suanmingm@nvidia.com>\n <20220928033130.9106-1-suanmingm@nvidia.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[10.126.230.35]",
        "X-ClientProxiedBy": "rnnvmail201.nvidia.com (10.129.68.8) To\n rnnvmail201.nvidia.com (10.129.68.8)",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "DM6NAM11FT094:EE_|MW4PR12MB7440:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "ad1a2752-0a8d-4dbc-c5e2-08daa1020284",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n HZsS1aF7nmwBMyS1zJn3LC39msWpw+77QtT7EyShoy3vYzC+b0JgcObjz97TuOAg3PCSXPwitMf1DrOJ8QXnD2kw8QE17sDD63tY9ObQyl4Q4vHfrucbc0MCFtg6hrUKW1YkWVUhoqYDVkZ4mwiwkLA1b2+6FB5sRy7/nfjWVcSyUbzSzurFZKKACQrEXHhjF727vJvd8v5rOkEvvQZkfD1ZU5gDJfcHY2N/y03p767Rrjwb3fkGyDuelNu3rBFSONmyDw5nyuwXbz8VlRCxerJDxspYbpei4aIIhuA5PDA+NYTDeX0TSzfn/HFS9V+w9Mu45KCj6OERHpnPHDZA8CxQHEdm2FaxeUVIXkJWfOItIFfv3xirrUmyQmlT2ZWzwTbQIjGV3GnL2HGtq9O4PunhE1QtYWbEHTMEdl0CNwL8m3GT4tWuTo4SWZO47c6vTyggsI7kaZTuaS1qxk9s635JdV4aOllLd5/uoNKuYqNSTD7Bxe1VKGSj0XzUqat27kTCn9aPAo/4oso+PgAaHLb++4bcoQZGqw1ujs02GW3brv3j6OYMcJEEXbeF9n7VLxdjiWAaQIWKZ+GxsR8KcAJ6feLXicN2eshDzbbiVgZDJ/x17gdvN5ub+kIFt8Sy8R+6x/zJgeMoPugimCWMeiMXGToIKCpZ9a1Iz39/9pxCpsKyJM4NPZvjXvQ0cleSQ4/UEDFhPgGMms0yvoqbAn+n8Z3oiWApOy4npTr5LbCzC1ekUoLn5sm7rihC4sLnpcqzU1gEYTMUUp1ysq5iOQ==",
        "X-Forefront-Antispam-Report": "CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE;\n SFS:(13230022)(4636009)(376002)(396003)(346002)(136003)(39860400002)(451199015)(40470700004)(46966006)(36840700001)(336012)(426003)(16526019)(8676002)(2616005)(47076005)(1076003)(186003)(40460700003)(83380400001)(70586007)(86362001)(82740400003)(70206006)(4326008)(26005)(54906003)(5660300002)(2906002)(6666004)(107886003)(7636003)(7696005)(36756003)(6286002)(40480700001)(478600001)(82310400005)(316002)(55016003)(110136005)(41300700001)(6636002)(8936002)(36860700001)(356005);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "28 Sep 2022 03:32:02.9046 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n ad1a2752-0a8d-4dbc-c5e2-08daa1020284",
        "X-MS-Exchange-CrossTenant-Id": "43083d15-7273-40c1-b7db-39efd9ccc17a",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161];\n Helo=[mail.nvidia.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n DM6NAM11FT094.eop-nam11.prod.protection.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "MW4PR12MB7440",
        "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": "As the rte_flow_async API defines, the action mask with field value\nnot be 0 means the action will be used as shared in all the flows in\nthe table.\n\nThe header reformat action with action mask field not be 0 will be\ncreated as constant shared action. For encapsulation header reformat\naction, there are two kinds of encapsulation data, raw_encap_data\nand rte_flow_item encap_data. Both of these two kinds of data can be\nidentified from the action mask conf as constant or not.\n\nExamples:\n1. VXLAN encap (encap_data: rte_flow_item)\n\taction conf (eth/ipv4/udp/vxlan_hdr)\n\n\ta. action mask conf (eth/ipv4/udp/vxlan_hdr)\n\t  - items are constant.\n\tb. action mask conf (NULL)\n\t  - items will change.\n\n2. RAW encap (encap_data: raw)\n\taction conf (raw_data)\n\n\ta. action mask conf (not NULL)\n\t  - encap_data constant.\n\tb. action mask conf (NULL)\n\t  - encap_data will change.\n\nSigned-off-by: Suanming Mou <suanmingm@nvidia.com>\n---\n drivers/net/mlx5/mlx5_flow.h    |   6 +-\n drivers/net/mlx5/mlx5_flow_hw.c | 124 ++++++++++----------------------\n 2 files changed, 39 insertions(+), 91 deletions(-)",
    "diff": "diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h\nindex 4b53912b79..1c9f5fc1d5 100644\n--- a/drivers/net/mlx5/mlx5_flow.h\n+++ b/drivers/net/mlx5/mlx5_flow.h\n@@ -1064,10 +1064,6 @@ struct mlx5_action_construct_data {\n \tuint16_t action_dst; /* mlx5dr_rule_action dst offset. */\n \tunion {\n \t\tstruct {\n-\t\t\t/* encap src(item) offset. */\n-\t\t\tuint16_t src;\n-\t\t\t/* encap dst data offset. */\n-\t\t\tuint16_t dst;\n \t\t\t/* encap data len. */\n \t\t\tuint16_t len;\n \t\t} encap;\n@@ -1110,6 +1106,8 @@ struct mlx5_hw_jump_action {\n /* Encap decap action struct. */\n struct mlx5_hw_encap_decap_action {\n \tstruct mlx5dr_action *action; /* Action object. */\n+\t/* Is header_reformat action shared across flows in table. */\n+\tbool shared;\n \tsize_t data_size; /* Action metadata size. */\n \tuint8_t data[]; /* Action data. */\n };\ndiff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c\nindex 46c4169b4f..b6978bd051 100644\n--- a/drivers/net/mlx5/mlx5_flow_hw.c\n+++ b/drivers/net/mlx5/mlx5_flow_hw.c\n@@ -402,10 +402,6 @@ __flow_hw_act_data_general_append(struct mlx5_priv *priv,\n  *   Offset of source rte flow action.\n  * @param[in] action_dst\n  *   Offset of destination DR action.\n- * @param[in] encap_src\n- *   Offset of source encap raw data.\n- * @param[in] encap_dst\n- *   Offset of destination encap raw data.\n  * @param[in] len\n  *   Length of the data to be updated.\n  *\n@@ -418,16 +414,12 @@ __flow_hw_act_data_encap_append(struct mlx5_priv *priv,\n \t\t\t\tenum rte_flow_action_type type,\n \t\t\t\tuint16_t action_src,\n \t\t\t\tuint16_t action_dst,\n-\t\t\t\tuint16_t encap_src,\n-\t\t\t\tuint16_t encap_dst,\n \t\t\t\tuint16_t len)\n {\tstruct mlx5_action_construct_data *act_data;\n \n \tact_data = __flow_hw_act_data_alloc(priv, type, action_src, action_dst);\n \tif (!act_data)\n \t\treturn -1;\n-\tact_data->encap.src = encap_src;\n-\tact_data->encap.dst = encap_dst;\n \tact_data->encap.len = len;\n \tLIST_INSERT_HEAD(&acts->act_list, act_data, next);\n \treturn 0;\n@@ -523,53 +515,6 @@ flow_hw_shared_action_translate(struct rte_eth_dev *dev,\n \treturn 0;\n }\n \n-/**\n- * Translate encap items to encapsulation list.\n- *\n- * @param[in] dev\n- *   Pointer to the rte_eth_dev data structure.\n- * @param[in] acts\n- *   Pointer to the template HW steering DR actions.\n- * @param[in] type\n- *   Action type.\n- * @param[in] action_src\n- *   Offset of source rte flow action.\n- * @param[in] action_dst\n- *   Offset of destination DR action.\n- * @param[in] items\n- *   Encap item pattern.\n- * @param[in] items_m\n- *   Encap item mask indicates which part are constant and dynamic.\n- *\n- * @return\n- *    0 on success, negative value otherwise and rte_errno is set.\n- */\n-static __rte_always_inline int\n-flow_hw_encap_item_translate(struct rte_eth_dev *dev,\n-\t\t\t     struct mlx5_hw_actions *acts,\n-\t\t\t     enum rte_flow_action_type type,\n-\t\t\t     uint16_t action_src,\n-\t\t\t     uint16_t action_dst,\n-\t\t\t     const struct rte_flow_item *items,\n-\t\t\t     const struct rte_flow_item *items_m)\n-{\n-\tstruct mlx5_priv *priv = dev->data->dev_private;\n-\tsize_t len, total_len = 0;\n-\tuint32_t i = 0;\n-\n-\tfor (; items->type != RTE_FLOW_ITEM_TYPE_END; items++, items_m++, i++) {\n-\t\tlen = flow_dv_get_item_hdr_len(items->type);\n-\t\tif ((!items_m->spec ||\n-\t\t    memcmp(items_m->spec, items->spec, len)) &&\n-\t\t    __flow_hw_act_data_encap_append(priv, acts, type,\n-\t\t\t\t\t\t    action_src, action_dst, i,\n-\t\t\t\t\t\t    total_len, len))\n-\t\t\treturn -1;\n-\t\ttotal_len += len;\n-\t}\n-\treturn 0;\n-}\n-\n /**\n  * Translate rte_flow actions to DR action.\n  *\n@@ -611,7 +556,7 @@ flow_hw_actions_translate(struct rte_eth_dev *dev,\n \tconst struct rte_flow_action_raw_encap *raw_encap_data;\n \tconst struct rte_flow_item *enc_item = NULL, *enc_item_m = NULL;\n \tuint16_t reformat_pos = MLX5_HW_MAX_ACTS, reformat_src = 0;\n-\tuint8_t *encap_data = NULL;\n+\tuint8_t *encap_data = NULL, *encap_data_m = NULL;\n \tsize_t data_size = 0;\n \tbool actions_end = false;\n \tuint32_t type, i;\n@@ -718,9 +663,9 @@ flow_hw_actions_translate(struct rte_eth_dev *dev,\n \t\t\tMLX5_ASSERT(reformat_pos == MLX5_HW_MAX_ACTS);\n \t\t\tenc_item = ((const struct rte_flow_action_vxlan_encap *)\n \t\t\t\t   actions->conf)->definition;\n-\t\t\tenc_item_m =\n-\t\t\t\t((const struct rte_flow_action_vxlan_encap *)\n-\t\t\t\t masks->conf)->definition;\n+\t\t\tif (masks->conf)\n+\t\t\t\tenc_item_m = ((const struct rte_flow_action_vxlan_encap *)\n+\t\t\t\t\t     masks->conf)->definition;\n \t\t\treformat_pos = i++;\n \t\t\treformat_src = actions - action_start;\n \t\t\trefmt_type = MLX5DR_ACTION_REFORMAT_TYPE_L2_TO_TNL_L2;\n@@ -729,9 +674,9 @@ flow_hw_actions_translate(struct rte_eth_dev *dev,\n \t\t\tMLX5_ASSERT(reformat_pos == MLX5_HW_MAX_ACTS);\n \t\t\tenc_item = ((const struct rte_flow_action_nvgre_encap *)\n \t\t\t\t   actions->conf)->definition;\n-\t\t\tenc_item_m =\n-\t\t\t\t((const struct rte_flow_action_nvgre_encap *)\n-\t\t\t\tactions->conf)->definition;\n+\t\t\tif (masks->conf)\n+\t\t\t\tenc_item_m = ((const struct rte_flow_action_nvgre_encap *)\n+\t\t\t\t\t     masks->conf)->definition;\n \t\t\treformat_pos = i++;\n \t\t\treformat_src = actions - action_start;\n \t\t\trefmt_type = MLX5DR_ACTION_REFORMAT_TYPE_L2_TO_TNL_L2;\n@@ -743,6 +688,11 @@ flow_hw_actions_translate(struct rte_eth_dev *dev,\n \t\t\trefmt_type = MLX5DR_ACTION_REFORMAT_TYPE_TNL_L2_TO_L2;\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_RAW_ENCAP:\n+\t\t\traw_encap_data =\n+\t\t\t\t(const struct rte_flow_action_raw_encap *)\n+\t\t\t\t masks->conf;\n+\t\t\tif (raw_encap_data)\n+\t\t\t\tencap_data_m = raw_encap_data->data;\n \t\t\traw_encap_data =\n \t\t\t\t(const struct rte_flow_action_raw_encap *)\n \t\t\t\t actions->conf;\n@@ -773,22 +723,17 @@ flow_hw_actions_translate(struct rte_eth_dev *dev,\n \t}\n \tif (reformat_pos != MLX5_HW_MAX_ACTS) {\n \t\tuint8_t buf[MLX5_ENCAP_MAX_LEN];\n+\t\tbool shared_rfmt = true;\n \n \t\tif (enc_item) {\n \t\t\tMLX5_ASSERT(!encap_data);\n-\t\t\tif (flow_dv_convert_encap_data\n-\t\t\t\t(enc_item, buf, &data_size, error) ||\n-\t\t\t    flow_hw_encap_item_translate\n-\t\t\t\t(dev, acts, (action_start + reformat_src)->type,\n-\t\t\t\t reformat_src, reformat_pos,\n-\t\t\t\t enc_item, enc_item_m))\n+\t\t\tif (flow_dv_convert_encap_data(enc_item, buf, &data_size, error))\n \t\t\t\tgoto err;\n \t\t\tencap_data = buf;\n-\t\t} else if (encap_data && __flow_hw_act_data_encap_append\n-\t\t\t\t(priv, acts,\n-\t\t\t\t (action_start + reformat_src)->type,\n-\t\t\t\t reformat_src, reformat_pos, 0, 0, data_size)) {\n-\t\t\tgoto err;\n+\t\t\tif (!enc_item_m)\n+\t\t\t\tshared_rfmt = false;\n+\t\t} else if (encap_data && !encap_data_m) {\n+\t\t\tshared_rfmt = false;\n \t\t}\n \t\tacts->encap_decap = mlx5_malloc(MLX5_MEM_ZERO,\n \t\t\t\t    sizeof(*acts->encap_decap) + data_size,\n@@ -802,12 +747,22 @@ flow_hw_actions_translate(struct rte_eth_dev *dev,\n \t\tacts->encap_decap->action = mlx5dr_action_create_reformat\n \t\t\t\t(priv->dr_ctx, refmt_type,\n \t\t\t\t data_size, encap_data,\n-\t\t\t\t rte_log2_u32(table_attr->nb_flows),\n-\t\t\t\t mlx5_hw_act_flag[!!attr->group][type]);\n+\t\t\t\t shared_rfmt ? 0 : rte_log2_u32(table_attr->nb_flows),\n+\t\t\t\t mlx5_hw_act_flag[!!attr->group][type] |\n+\t\t\t\t (shared_rfmt ? MLX5DR_ACTION_FLAG_SHARED : 0));\n \t\tif (!acts->encap_decap->action)\n \t\t\tgoto err;\n \t\tacts->rule_acts[reformat_pos].action =\n \t\t\t\t\t\tacts->encap_decap->action;\n+\t\tacts->rule_acts[reformat_pos].reformat.data =\n+\t\t\t\t\t\tacts->encap_decap->data;\n+\t\tif (shared_rfmt)\n+\t\t\tacts->rule_acts[reformat_pos].reformat.offset = 0;\n+\t\telse if (__flow_hw_act_data_encap_append(priv, acts,\n+\t\t\t\t (action_start + reformat_src)->type,\n+\t\t\t\t reformat_src, reformat_pos, data_size))\n+\t\t\tgoto err;\n+\t\tacts->encap_decap->shared = shared_rfmt;\n \t\tacts->encap_decap_pos = reformat_pos;\n \t}\n \tacts->acts_num = i;\n@@ -972,6 +927,7 @@ flow_hw_actions_construct(struct rte_eth_dev *dev,\n \t\t\t.ingress = 1,\n \t};\n \tuint32_t ft_flag;\n+\tsize_t encap_len = 0;\n \n \tmemcpy(rule_acts, hw_acts->rule_acts,\n \t       sizeof(*rule_acts) * hw_acts->acts_num);\n@@ -989,9 +945,6 @@ flow_hw_actions_construct(struct rte_eth_dev *dev,\n \t} else {\n \t\tattr.ingress = 1;\n \t}\n-\tif (hw_acts->encap_decap && hw_acts->encap_decap->data_size)\n-\t\tmemcpy(buf, hw_acts->encap_decap->data,\n-\t\t       hw_acts->encap_decap->data_size);\n \tLIST_FOREACH(act_data, &hw_acts->act_list, next) {\n \t\tuint32_t jump_group;\n \t\tuint32_t tag;\n@@ -1050,23 +1003,20 @@ flow_hw_actions_construct(struct rte_eth_dev *dev,\n \t\tcase RTE_FLOW_ACTION_TYPE_VXLAN_ENCAP:\n \t\t\tenc_item = ((const struct rte_flow_action_vxlan_encap *)\n \t\t\t\t   action->conf)->definition;\n-\t\t\trte_memcpy((void *)&buf[act_data->encap.dst],\n-\t\t\t\t   enc_item[act_data->encap.src].spec,\n-\t\t\t\t   act_data->encap.len);\n+\t\t\tif (flow_dv_convert_encap_data(enc_item, buf, &encap_len, NULL))\n+\t\t\t\treturn -1;\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_NVGRE_ENCAP:\n \t\t\tenc_item = ((const struct rte_flow_action_nvgre_encap *)\n \t\t\t\t   action->conf)->definition;\n-\t\t\trte_memcpy((void *)&buf[act_data->encap.dst],\n-\t\t\t\t   enc_item[act_data->encap.src].spec,\n-\t\t\t\t   act_data->encap.len);\n+\t\t\tif (flow_dv_convert_encap_data(enc_item, buf, &encap_len, NULL))\n+\t\t\t\treturn -1;\n \t\t\tbreak;\n \t\tcase RTE_FLOW_ACTION_TYPE_RAW_ENCAP:\n \t\t\traw_encap_data =\n \t\t\t\t(const struct rte_flow_action_raw_encap *)\n \t\t\t\t action->conf;\n-\t\t\trte_memcpy((void *)&buf[act_data->encap.dst],\n-\t\t\t\t   raw_encap_data->data, act_data->encap.len);\n+\t\t\trte_memcpy((void *)buf, raw_encap_data->data, act_data->encap.len);\n \t\t\tMLX5_ASSERT(raw_encap_data->size ==\n \t\t\t\t    act_data->encap.len);\n \t\t\tbreak;\n@@ -1074,7 +1024,7 @@ flow_hw_actions_construct(struct rte_eth_dev *dev,\n \t\t\tbreak;\n \t\t}\n \t}\n-\tif (hw_acts->encap_decap) {\n+\tif (hw_acts->encap_decap && !hw_acts->encap_decap->shared) {\n \t\trule_acts[hw_acts->encap_decap_pos].reformat.offset =\n \t\t\t\tjob->flow->idx - 1;\n \t\trule_acts[hw_acts->encap_decap_pos].reformat.data = buf;\n",
    "prefixes": [
        "v2",
        "03/17"
    ]
}