get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 116741,
    "url": "http://patches.dpdk.org/api/patches/116741/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20220923144334.27736-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": "<20220923144334.27736-4-suanmingm@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220923144334.27736-4-suanmingm@nvidia.com",
    "date": "2022-09-23T14:43:10",
    "name": "[03/27] 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": 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/20220923144334.27736-4-suanmingm@nvidia.com/mbox/",
    "series": [
        {
            "id": 24805,
            "url": "http://patches.dpdk.org/api/series/24805/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=24805",
            "date": "2022-09-23T14:43:07",
            "name": "net/mlx5: HW steering PMD update",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/24805/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/116741/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/116741/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 8ED81A054A;\n\tFri, 23 Sep 2022 16:44:27 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id EEEDE42BBA;\n\tFri, 23 Sep 2022 16:44:11 +0200 (CEST)",
            "from NAM10-BN7-obe.outbound.protection.outlook.com\n (mail-bn7nam10on2050.outbound.protection.outlook.com [40.107.92.50])\n by mails.dpdk.org (Postfix) with ESMTP id 46A1142BB9\n for <dev@dpdk.org>; Fri, 23 Sep 2022 16:44:10 +0200 (CEST)",
            "from BN7PR06CA0063.namprd06.prod.outlook.com (2603:10b6:408:34::40)\n by BY5PR12MB4870.namprd12.prod.outlook.com (2603:10b6:a03:1de::9)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.20; Fri, 23 Sep\n 2022 14:44:08 +0000",
            "from BN8NAM11FT057.eop-nam11.prod.protection.outlook.com\n (2603:10b6:408:34:cafe::6e) by BN7PR06CA0063.outlook.office365.com\n (2603:10b6:408:34::40) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.20 via Frontend\n Transport; Fri, 23 Sep 2022 14:44:07 +0000",
            "from mail.nvidia.com (216.228.117.161) by\n BN8NAM11FT057.mail.protection.outlook.com (10.13.177.49) with Microsoft SMTP\n Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.5654.14 via Frontend Transport; Fri, 23 Sep 2022 14:44:07 +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; Fri, 23 Sep\n 2022 07:43:52 -0700",
            "from nvidia.com (10.126.231.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; Fri, 23 Sep\n 2022 07:43:51 -0700"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=G3Xnszry3K4D0a+cW8sgOtkpe57v4R0bc74UaPLJPBmdPlzdQRsjOS/NG0s+7WjShg/oIvv89rtSn4Vw4HUXdu3D0EdAS5XdRGSqjCWhuAJQB+DaUfwMbMM6cJ7j53GmzaAg9NMvV6VkcTuh8uJtwBflJTbWkWs/m02089SQvQKPf7t5zZm3+TM4yyoEn0gnoJa3MN54MH+PmI2LzCycWPaCZBQgHVIxOjp3jp4Dcru8kJEbCBV6F1WndHP2sDFKqxiwaeIFnR0yhzGg+QCvE2Hwpx8UJRhexpcAcNnxZbjhLUdhmn/oNRMJsl98NM9H87n3UT5FneTX1Rwg8gQeNA==",
        "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=OiWVwVGRh07iG0LuFZnYdJQ8/i57TEHmfCisHAzDy44=;\n b=a+qgsEwyo4x9jyFjSS+/T3qefd1PQqeK71QxzMUb+LpN5bfzxF6GjNVs0W0yDWJN7FZywi8GIw/xJfqIZiq2MqcTt2Uu48AFiYpOsPcX63A7/lxwz1WQxLjmVNW1rLaKu14VaJ+5rCb7CUKIGRXY/umop4bR/kJzibd7u5ZwgeVT6juHQ4ENx1uoTAsdhNK8wmFcTG9rdcx4ogWq0f9sBbVDqWMhgakU+Kh3SSxhX69z4g0nkd1nVOeQGQm8JRMD72YejykDEo/O02gST00oUenfkBYhv100KhjpFGQmrw3/Ofp8W9Gi/zbLp2yGpa208ZkHpWcBSEuVYGJlDab6hQ==",
        "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=OiWVwVGRh07iG0LuFZnYdJQ8/i57TEHmfCisHAzDy44=;\n b=ok5+ShDGHtA3tpZBfzvlCgaDS79Ma0xozZR7DXLH9pY3TuGXKtHKIuPVNd+Y1CQ0PKa2ibvzYMmZCS89trszqTcqDJMSCBERztkzGO+GRhd3ZaNLNeMcAupYQM+qsCjPqx5VDu/5IrOx7nPadgD3MNydrpIFRcADUmpQye5IcWBL7XPGbQCI8yTer8633HO3jXY7tJpI8Bkb7wsSoG7rzPknKMAzURDMsfpDHxQIhWhPIhDkfYfhOfHJsFc1hRM3X4zo+6uWH1aoXAPOin3EqYxs1RaAdN/is5TBWQzuT0DO3zq8dcPVWqWei8GaUj2KVsTpHrWZdFXxqFJUMWInVg==",
        "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>",
        "Subject": "[PATCH 03/27] net/mlx5: add shared header reformat support",
        "Date": "Fri, 23 Sep 2022 17:43:10 +0300",
        "Message-ID": "<20220923144334.27736-4-suanmingm@nvidia.com>",
        "X-Mailer": "git-send-email 2.18.1",
        "In-Reply-To": "<20220923144334.27736-1-suanmingm@nvidia.com>",
        "References": "<20220923144334.27736-1-suanmingm@nvidia.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[10.126.231.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": "BN8NAM11FT057:EE_|BY5PR12MB4870:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "be82d7c7-4a73-4087-9b39-08da9d7211ef",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n 1y/OQH6MDe4Wr6OAqQSjWWd+AyCVj54fnP/sLsJ4iswcQvDbAQyMA8fWdfxYNCuAUWkOQ4mbVbCq9gIFHuO43JvvSGy0AQ5bMCTW9FdGhOojfj2x9fbeNeFeJmcRdR4xq8fdG/u+2mNmnjZkpoFIgZ7xgH73NSuWC5t4NT//4SxtdKXx70ojbfZjUT4xvY9p4EUekfaguBi+WyeXWvzweGp8dTST2OCQYFO7tD/g5+2NaZ3mtRDaNg7hwH/VLh+1glWbEiMqvtr7ts2+uMmF9IZ+WHYcI7PEqd5P+CgqIEqxu6T+qKr+VqGmgb5VJRzQQyqPh3hG2eQyoPNLsv2Ms9/yfLPPSJdpnhzBXHBGnZVh6HhP3ZVppmo9ay627oXK3hpgbbCUihh2v/EMZ0eyHs43vKArQJkgPYVjZD1AHpxZ5pphJ3OOXeJU8tzOemTd1aVUKhjlgE5AwQmUkXtnI17lBP5TPa1sPxbDypMn7f+fiDl5Exs9TRx3XWCd+IIwaRjuPTFdEGNmrNZ9jhskViSVnDP1XUNV1gUT0SI5b9dEf6p1/CPB7CN+FWi/RVmR2HyF66uAJgPL15cAwRAl96dzDmHb7ROvaJCR9F1hKXf7/oC89h6g1S6wyQtWYxDknbKKzU8XT5zofe41e3blBQGN7gJHbDtPIhS67pr6YUZl0w05owwbMpmnz7wogybnBuFMRXQNBgsPJhJRqxFI5KWnreWnmyC/deaOFskBJVWK767EJmXmxhYvc1QpQUSrF4DrDRZCM8jm8kgQwijUWw==",
        "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)(136003)(39860400002)(396003)(346002)(376002)(451199015)(36840700001)(46966006)(40470700004)(4326008)(8676002)(36756003)(41300700001)(16526019)(2906002)(70206006)(70586007)(1076003)(2616005)(47076005)(40460700003)(86362001)(336012)(426003)(186003)(5660300002)(316002)(6636002)(82740400003)(356005)(7636003)(36860700001)(83380400001)(110136005)(55016003)(478600001)(8936002)(82310400005)(40480700001)(26005)(6666004)(7696005)(6286002);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "23 Sep 2022 14:44:07.6907 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n be82d7c7-4a73-4087-9b39-08da9d7211ef",
        "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 BN8NAM11FT057.eop-nam11.prod.protection.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BY5PR12MB4870",
        "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 1ad75fc8c6..74cb1cd235 100644\n--- a/drivers/net/mlx5/mlx5_flow.h\n+++ b/drivers/net/mlx5/mlx5_flow.h\n@@ -1065,10 +1065,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@@ -1111,6 +1107,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": [
        "03/27"
    ]
}