get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 133700,
    "url": "http://patches.dpdk.org/api/patches/133700/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20231101044419.732726-5-rongweil@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": "<20231101044419.732726-5-rongweil@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20231101044419.732726-5-rongweil@nvidia.com",
    "date": "2023-11-01T04:44:10",
    "name": "[v4,04/13] net/mlx5/hws: support dynamic re-parse",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "27f0f4f07ed205981a0b3e9235ae9ec34f769e26",
    "submitter": {
        "id": 2223,
        "url": "http://patches.dpdk.org/api/people/2223/?format=api",
        "name": "Rongwei Liu",
        "email": "rongweil@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/20231101044419.732726-5-rongweil@nvidia.com/mbox/",
    "series": [
        {
            "id": 30088,
            "url": "http://patches.dpdk.org/api/series/30088/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=30088",
            "date": "2023-11-01T04:44:06",
            "name": "support IPv6 push remove action",
            "version": 4,
            "mbox": "http://patches.dpdk.org/series/30088/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/133700/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/133700/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 DB48A43258;\n\tWed,  1 Nov 2023 05:45:21 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 1E18F4161A;\n\tWed,  1 Nov 2023 05:45:03 +0100 (CET)",
            "from NAM10-MW2-obe.outbound.protection.outlook.com\n (mail-mw2nam10on2087.outbound.protection.outlook.com [40.107.94.87])\n by mails.dpdk.org (Postfix) with ESMTP id 5386B4161A\n for <dev@dpdk.org>; Wed,  1 Nov 2023 05:45:01 +0100 (CET)",
            "from DS7PR03CA0174.namprd03.prod.outlook.com (2603:10b6:5:3b2::29)\n by DM4PR12MB6565.namprd12.prod.outlook.com (2603:10b6:8:8c::14) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.19; Wed, 1 Nov\n 2023 04:44:57 +0000",
            "from CY4PEPF0000FCBE.namprd03.prod.outlook.com\n (2603:10b6:5:3b2:cafe::a0) by DS7PR03CA0174.outlook.office365.com\n (2603:10b6:5:3b2::29) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.19 via Frontend\n Transport; Wed, 1 Nov 2023 04:44:56 +0000",
            "from mail.nvidia.com (216.228.117.160) by\n CY4PEPF0000FCBE.mail.protection.outlook.com (10.167.242.100) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.6954.19 via Frontend Transport; Wed, 1 Nov 2023 04:44:56 +0000",
            "from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com\n (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.41; Tue, 31 Oct\n 2023 21:44:46 -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.41; Tue, 31 Oct\n 2023 21:44:43 -0700"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=R6zVSoEzAtg8fIS9/auV0TkCUFxhv9fjP2zA3SLlGR/NMguA+3++98ItKOE6+//hQSwclFyYcHEPbtHwjaYGUeh3TMt9HH8++62UCUrnnXBUKcNHojFKKJQJtSyVmxKVfHUNRTguTNyqJtJESRVvwIl7yWB0gkt3LGKNzvBFAKlYQV1qehQTIE/8o30FU65e8yraisbJO9AEiQgISQ2kgRKzSgcJ30OIoxK5+eCAp8n+nWN+iN/HCKWeUTvxzx9hsHimf+9f2t0SOv0o0srEH61ZVtI+GcZkFvEyCGzo5WWzrfL6mi+kQ87A40Ts4WVB+Rp7bSlSzz5Rn/knYYldSA==",
        "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=8mJS7/RFKOA+jfEP634Us06BBarhYv3+v8K+lQP/bKI=;\n b=iT1DhEox28JGvWAIlNpDKUBtd+DYtlU4ZHNNFshz/tn1QN4JEVtSEOVx70gnoXyhe9+v3C5r0eWPrih34NZ2BJsK7lrNdn9riR1Tos4MtOmEEAK5/An3L0TRhDFC1r/JXy0dw3VyQyW09PibRDNK99sXOdVkxfD3WgEGjHRPpXO7eWjWtMK3CFM0KzoMvq12I8Ks5ma4YbMmrRJ/CBoCVMtIMWwGDllLC3qsi5IQWb0OZhF6d6ncttgypaDq3DAUc/NYojRXBjCxlg7BSBSzTVxaunSurtw1YSROWpgNJhXte4S2n2xQo2tO+LIzpw0OdEfSxHr95fbFkeySKQA25A==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.117.160) 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 (0)",
        "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=8mJS7/RFKOA+jfEP634Us06BBarhYv3+v8K+lQP/bKI=;\n b=UjLCbi0SiRbDBst1046gBqdsxkb95JndHoRnnJ2RT19OTe2+3AIgVVYSivTQicUbvTF6yy3/o0g09j98Sa3KbUfMQxLzpN8TJyTk1g7RJJSu6VMrvcA2/mwGb46GO9KPxBy2ZiXy0jMvdcEsKt0Dw7AzAuROwPT/fJxsXfSOfbDK92XkCz3D2uR7bzH5wNOQ9At2ud8Y6iGKaF4yVSyV6MuMjj5kXnx9j2R1VIZiy9zsGMeVC2zp/S3b4nvEpr77ORZNIRRfGljo0ptHZdgaWJ1HuqmPih/ekswhsUGKXPRE55s4CfyBVouoCFNLBvjUl2Ccooaw/7k4gZuzDwhJ2w==",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.117.160)\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.160 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C",
        "From": "Rongwei Liu <rongweil@nvidia.com>",
        "To": "<dev@dpdk.org>, <matan@nvidia.com>, <viacheslavo@nvidia.com>,\n <orika@nvidia.com>, <suanmingm@nvidia.com>, <thomas@monjalon.net>",
        "CC": "Alex Vesker <valex@nvidia.com>, Erez Shitrit <erezsh@nvidia.com>",
        "Subject": "[PATCH v4 04/13] net/mlx5/hws: support dynamic re-parse",
        "Date": "Wed, 1 Nov 2023 06:44:10 +0200",
        "Message-ID": "<20231101044419.732726-5-rongweil@nvidia.com>",
        "X-Mailer": "git-send-email 2.27.0",
        "In-Reply-To": "<20231101044419.732726-1-rongweil@nvidia.com>",
        "References": "<20231031105131.441078-1-rongweil@nvidia.com>\n <20231101044419.732726-1-rongweil@nvidia.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "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": "CY4PEPF0000FCBE:EE_|DM4PR12MB6565:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "1e2044cf-7b16-4d71-c9a3-08dbda954c56",
        "X-LD-Processed": "43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n FgP9BX95iwQhN8njl81kxfU6sMEABrBrlumL/XDn2VStJUU74B9ucytgf3pbDvVINn4t5DAsQELelHRU2/eK92SGUfffhFR3bBVZbba5aO4eLRoV/zmYe+pfwL2FxDtVtr4DEfd0piPubS+Zdb0U6ioRVKtNSYkJRPMVrqz1ED3mmGiwk4ISJeoBNejqWPiVqNAjMCmp/l9+CNb0RICt1bDsbHrbMDb5a+y/qUA8m1MEkfbdFIlTMPuuKqf49ujIjxl8HY8St7lX17SsCY0m0WFhx2LK3pd9b3kD94ey+tLdCwDUweJ3MswjuPA7zGFN/JWRFbNKozRn3tBIiyVtOWriwhPV6jFCutEabgcD0zrSFymqWLCs4hyAalfao8fOpz/9EDooSmTX9sAMCpWP5jRGtP7ztDCKZRqEttFtqwyUysVPJBTCg2jChak4x8A/rK4NypNJM7tcAJGKsPlis/TaXvDqGCOF2mRSXSKg5LIKWfEj6T4cSkAx+bZPwYsxc2WUSk5Y7SvNnsnaM0221KUP9Oy8ot9+WNV9JTj9reql674nJow1qMPgxxHwzT7mtX/1FUcdxazPAEMVK2KEBXYx61nIGztJj0j/ffn30zd7EqseZqXTDTvW++zztmvGrO5lREtgVsBtyiswawWB6GQlQDTvOI/CBhO5odltfHjXp0QW1tyOXXVd/oR43lpKQum3JIgmbt4aCqTK3ZmAm4UTJP3m+j52zFd7RZf+2TP9k/xrASPW5isJDHjNIlYI",
        "X-Forefront-Antispam-Report": "CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1;\n SRV:;\n IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE;\n SFS:(13230031)(4636009)(396003)(39860400002)(376002)(346002)(136003)(230922051799003)(1800799009)(451199024)(186009)(64100799003)(82310400011)(36840700001)(40470700004)(46966006)(36756003)(478600001)(7696005)(41300700001)(356005)(6286002)(16526019)(110136005)(70206006)(7636003)(70586007)(82740400003)(5660300002)(36860700001)(40480700001)(8936002)(4326008)(6666004)(8676002)(55016003)(86362001)(30864003)(107886003)(40460700003)(2616005)(47076005)(316002)(426003)(336012)(54906003)(26005)(83380400001)(1076003)(2906002);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "01 Nov 2023 04:44:56.7389 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 1e2044cf-7b16-4d71-c9a3-08dbda954c56",
        "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.160];\n Helo=[mail.nvidia.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n CY4PEPF0000FCBE.namprd03.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM4PR12MB6565",
        "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": "From: Alex Vesker <valex@nvidia.com>\n\nEach steering entry (STE) has a bit called re-parse used for\nre-parsing the packet in HW, re-parsing is needed after\nreformat (e.g. push/pop/encapsulate/...) or when modifying the\npacket headers requiring structure change (e.g. TCP to UDP).\nUntil now we re-parsed the packet in each STE leading to\nlonger processing per packet. With supported devices we\ncan control re-parse bit to allow better performance.\n\nSigned-off-by: Alex Vesker <valex@nvidia.com>\nReviewed-by: Erez Shitrit <erezsh@nvidia.com>\nAcked-by: Matan Azrad <matan@nvidia.com>\n---\n drivers/common/mlx5/mlx5_prm.h        | 10 ++++-\n drivers/net/mlx5/hws/mlx5dr_action.c  | 57 +++++++++++++++++----------\n drivers/net/mlx5/hws/mlx5dr_action.h  |  2 +-\n drivers/net/mlx5/hws/mlx5dr_cmd.c     |  3 +-\n drivers/net/mlx5/hws/mlx5dr_cmd.h     |  2 +\n drivers/net/mlx5/hws/mlx5dr_context.c | 15 +++++++\n drivers/net/mlx5/hws/mlx5dr_context.h |  9 ++++-\n drivers/net/mlx5/hws/mlx5dr_matcher.c |  2 +\n 8 files changed, 74 insertions(+), 26 deletions(-)",
    "diff": "diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h\nindex 5259031a04..15dbf1a0cb 100644\n--- a/drivers/common/mlx5/mlx5_prm.h\n+++ b/drivers/common/mlx5/mlx5_prm.h\n@@ -3445,6 +3445,7 @@ enum mlx5_ifc_rtc_ste_format {\n enum mlx5_ifc_rtc_reparse_mode {\n \tMLX5_IFC_RTC_REPARSE_NEVER = 0x0,\n \tMLX5_IFC_RTC_REPARSE_ALWAYS = 0x1,\n+\tMLX5_IFC_RTC_REPARSE_BY_STC = 0x2,\n };\n \n #define MLX5_IFC_RTC_LINEAR_LOOKUP_TBL_LOG_MAX 16\n@@ -3512,6 +3513,12 @@ enum mlx5_ifc_stc_action_type {\n \tMLX5_IFC_STC_ACTION_TYPE_JUMP_TO_UPLINK = 0x86,\n };\n \n+enum mlx5_ifc_stc_reparse_mode {\n+\tMLX5_IFC_STC_REPARSE_IGNORE = 0x0,\n+\tMLX5_IFC_STC_REPARSE_NEVER = 0x1,\n+\tMLX5_IFC_STC_REPARSE_ALWAYS = 0x2,\n+};\n+\n struct mlx5_ifc_stc_ste_param_ste_table_bits {\n \tu8 ste_obj_id[0x20];\n \tu8 match_definer_id[0x20];\n@@ -3623,7 +3630,8 @@ enum {\n \n struct mlx5_ifc_stc_bits {\n \tu8 modify_field_select[0x40];\n-\tu8 reserved_at_40[0x48];\n+\tu8 reserved_at_40[0x46];\n+\tu8 reparse_mode[0x2];\n \tu8 table_type[0x8];\n \tu8 ste_action_offset[0x8];\n \tu8 action_type[0x8];\ndiff --git a/drivers/net/mlx5/hws/mlx5dr_action.c b/drivers/net/mlx5/hws/mlx5dr_action.c\nindex 1bace23c58..85987fe2ea 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_action.c\n+++ b/drivers/net/mlx5/hws/mlx5dr_action.c\n@@ -107,16 +107,18 @@ static int mlx5dr_action_get_shared_stc_nic(struct mlx5dr_context *ctx,\n \t\tgoto unlock_and_out;\n \t}\n \tswitch (stc_type) {\n-\tcase MLX5DR_CONTEXT_SHARED_STC_DECAP:\n+\tcase MLX5DR_CONTEXT_SHARED_STC_DECAP_L3:\n \t\tstc_attr.action_type = MLX5_IFC_STC_ACTION_TYPE_HEADER_REMOVE;\n \t\tstc_attr.action_offset = MLX5DR_ACTION_OFFSET_DW5;\n+\t\tstc_attr.reparse_mode = MLX5_IFC_STC_REPARSE_IGNORE;\n \t\tstc_attr.remove_header.decap = 0;\n \t\tstc_attr.remove_header.start_anchor = MLX5_HEADER_ANCHOR_PACKET_START;\n \t\tstc_attr.remove_header.end_anchor = MLX5_HEADER_ANCHOR_IPV6_IPV4;\n \t\tbreak;\n-\tcase MLX5DR_CONTEXT_SHARED_STC_POP:\n+\tcase MLX5DR_CONTEXT_SHARED_STC_DOUBLE_POP:\n \t\tstc_attr.action_type = MLX5_IFC_STC_ACTION_TYPE_REMOVE_WORDS;\n \t\tstc_attr.action_offset = MLX5DR_ACTION_OFFSET_DW5;\n+\t\tstc_attr.reparse_mode = MLX5_IFC_STC_REPARSE_ALWAYS;\n \t\tstc_attr.remove_words.start_anchor = MLX5_HEADER_ANCHOR_FIRST_VLAN_START;\n \t\tstc_attr.remove_words.num_of_words = MLX5DR_ACTION_HDR_LEN_L2_VLAN;\n \t\tbreak;\n@@ -424,6 +426,11 @@ int mlx5dr_action_alloc_single_stc(struct mlx5dr_context *ctx,\n \t}\n \n \tstc_attr->stc_offset = stc->offset;\n+\n+\t/* Dynamic reparse not supported, overwrite and use default */\n+\tif (!mlx5dr_context_cap_dynamic_reparse(ctx))\n+\t\tstc_attr->reparse_mode = MLX5_IFC_STC_REPARSE_IGNORE;\n+\n \tdevx_obj_0 = mlx5dr_pool_chunk_get_base_devx_obj(stc_pool, stc);\n \n \t/* According to table/action limitation change the stc_attr */\n@@ -512,6 +519,8 @@ static void mlx5dr_action_fill_stc_attr(struct mlx5dr_action *action,\n \t\t\t\t\tstruct mlx5dr_devx_obj *obj,\n \t\t\t\t\tstruct mlx5dr_cmd_stc_modify_attr *attr)\n {\n+\tattr->reparse_mode = MLX5_IFC_STC_REPARSE_IGNORE;\n+\n \tswitch (action->type) {\n \tcase MLX5DR_ACTION_TYP_TAG:\n \t\tattr->action_type = MLX5_IFC_STC_ACTION_TYPE_TAG;\n@@ -538,6 +547,7 @@ static void mlx5dr_action_fill_stc_attr(struct mlx5dr_action *action,\n \tcase MLX5DR_ACTION_TYP_REFORMAT_TNL_L3_TO_L2:\n \tcase MLX5DR_ACTION_TYP_MODIFY_HDR:\n \t\tattr->action_offset = MLX5DR_ACTION_OFFSET_DW6;\n+\t\tattr->reparse_mode = MLX5_IFC_STC_REPARSE_ALWAYS;\n \t\tif (action->modify_header.num_of_actions == 1) {\n \t\t\tattr->modify_action.data = action->modify_header.single_action;\n \t\t\tattr->action_type = mlx5dr_action_get_mh_stc_type(attr->modify_action.data);\n@@ -565,6 +575,7 @@ static void mlx5dr_action_fill_stc_attr(struct mlx5dr_action *action,\n \tcase MLX5DR_ACTION_TYP_REFORMAT_TNL_L2_TO_L2:\n \t\tattr->action_type = MLX5_IFC_STC_ACTION_TYPE_HEADER_REMOVE;\n \t\tattr->action_offset = MLX5DR_ACTION_OFFSET_DW5;\n+\t\tattr->reparse_mode = MLX5_IFC_STC_REPARSE_ALWAYS;\n \t\tattr->remove_header.decap = 1;\n \t\tattr->remove_header.start_anchor = MLX5_HEADER_ANCHOR_PACKET_START;\n \t\tattr->remove_header.end_anchor = MLX5_HEADER_ANCHOR_INNER_MAC;\n@@ -574,6 +585,7 @@ static void mlx5dr_action_fill_stc_attr(struct mlx5dr_action *action,\n \tcase MLX5DR_ACTION_TYP_INSERT_HEADER:\n \t\tattr->action_type = MLX5_IFC_STC_ACTION_TYPE_HEADER_INSERT;\n \t\tattr->action_offset = MLX5DR_ACTION_OFFSET_DW6;\n+\t\tattr->reparse_mode = MLX5_IFC_STC_REPARSE_ALWAYS;\n \t\tattr->insert_header.encap = action->reformat.encap;\n \t\tattr->insert_header.insert_anchor = action->reformat.anchor;\n \t\tattr->insert_header.arg_id = action->reformat.arg_obj->id;\n@@ -603,12 +615,14 @@ static void mlx5dr_action_fill_stc_attr(struct mlx5dr_action *action,\n \tcase MLX5DR_ACTION_TYP_POP_VLAN:\n \t\tattr->action_type = MLX5_IFC_STC_ACTION_TYPE_REMOVE_WORDS;\n \t\tattr->action_offset = MLX5DR_ACTION_OFFSET_DW5;\n+\t\tattr->reparse_mode = MLX5_IFC_STC_REPARSE_ALWAYS;\n \t\tattr->remove_words.start_anchor = MLX5_HEADER_ANCHOR_FIRST_VLAN_START;\n \t\tattr->remove_words.num_of_words = MLX5DR_ACTION_HDR_LEN_L2_VLAN / 2;\n \t\tbreak;\n \tcase MLX5DR_ACTION_TYP_PUSH_VLAN:\n \t\tattr->action_type = MLX5_IFC_STC_ACTION_TYPE_HEADER_INSERT;\n \t\tattr->action_offset = MLX5DR_ACTION_OFFSET_DW6;\n+\t\tattr->reparse_mode = MLX5_IFC_STC_REPARSE_ALWAYS;\n \t\tattr->insert_header.encap = 0;\n \t\tattr->insert_header.is_inline = 1;\n \t\tattr->insert_header.insert_anchor = MLX5_HEADER_ANCHOR_PACKET_START;\n@@ -627,6 +641,7 @@ static void mlx5dr_action_fill_stc_attr(struct mlx5dr_action *action,\n \t\t\tattr->remove_words.num_of_words = action->remove_header.num_of_words;\n \t\t}\n \t\tattr->action_offset = MLX5DR_ACTION_OFFSET_DW5;\n+\t\tattr->reparse_mode = MLX5_IFC_STC_REPARSE_ALWAYS;\n \t\tbreak;\n \tdefault:\n \t\tDR_LOG(ERR, \"Invalid action type %d\", action->type);\n@@ -1171,7 +1186,7 @@ mlx5dr_action_create_pop_vlan(struct mlx5dr_context *ctx, uint32_t flags)\n \tif (!action)\n \t\treturn NULL;\n \n-\tret = mlx5dr_action_get_shared_stc(action, MLX5DR_CONTEXT_SHARED_STC_POP);\n+\tret = mlx5dr_action_get_shared_stc(action, MLX5DR_CONTEXT_SHARED_STC_DOUBLE_POP);\n \tif (ret) {\n \t\tDR_LOG(ERR, \"Failed to create remove stc for reformat\");\n \t\tgoto free_action;\n@@ -1186,7 +1201,7 @@ mlx5dr_action_create_pop_vlan(struct mlx5dr_context *ctx, uint32_t flags)\n \treturn action;\n \n free_shared:\n-\tmlx5dr_action_put_shared_stc(action, MLX5DR_CONTEXT_SHARED_STC_POP);\n+\tmlx5dr_action_put_shared_stc(action, MLX5DR_CONTEXT_SHARED_STC_DOUBLE_POP);\n free_action:\n \tsimple_free(action);\n \treturn NULL;\n@@ -1342,7 +1357,7 @@ mlx5dr_action_handle_l2_to_tunnel_l3(struct mlx5dr_action *action,\n \tint ret;\n \n \t/* The action is remove-l2-header + insert-l3-header */\n-\tret = mlx5dr_action_get_shared_stc(action, MLX5DR_CONTEXT_SHARED_STC_DECAP);\n+\tret = mlx5dr_action_get_shared_stc(action, MLX5DR_CONTEXT_SHARED_STC_DECAP_L3);\n \tif (ret) {\n \t\tDR_LOG(ERR, \"Failed to create remove stc for reformat\");\n \t\treturn ret;\n@@ -1359,7 +1374,7 @@ mlx5dr_action_handle_l2_to_tunnel_l3(struct mlx5dr_action *action,\n \treturn 0;\n \n put_shared_stc:\n-\tmlx5dr_action_put_shared_stc(action, MLX5DR_CONTEXT_SHARED_STC_DECAP);\n+\tmlx5dr_action_put_shared_stc(action, MLX5DR_CONTEXT_SHARED_STC_DECAP_L3);\n \treturn ret;\n }\n \n@@ -2142,7 +2157,7 @@ static void mlx5dr_action_destroy_hws(struct mlx5dr_action *action)\n \t\tbreak;\n \tcase MLX5DR_ACTION_TYP_POP_VLAN:\n \t\tmlx5dr_action_destroy_stcs(action);\n-\t\tmlx5dr_action_put_shared_stc(action, MLX5DR_CONTEXT_SHARED_STC_POP);\n+\t\tmlx5dr_action_put_shared_stc(action, MLX5DR_CONTEXT_SHARED_STC_DOUBLE_POP);\n \t\tbreak;\n \tcase MLX5DR_ACTION_TYP_DEST_ARRAY:\n \t\tmlx5dr_action_destroy_stcs(action);\n@@ -2170,7 +2185,7 @@ static void mlx5dr_action_destroy_hws(struct mlx5dr_action *action)\n \t\t\tmlx5dr_cmd_destroy_obj(obj);\n \t\tbreak;\n \tcase MLX5DR_ACTION_TYP_REFORMAT_L2_TO_TNL_L3:\n-\t\tmlx5dr_action_put_shared_stc(action, MLX5DR_CONTEXT_SHARED_STC_DECAP);\n+\t\tmlx5dr_action_put_shared_stc(action, MLX5DR_CONTEXT_SHARED_STC_DECAP_L3);\n \t\tfor (i = 0; i < action->reformat.num_of_hdrs; i++)\n \t\t\tmlx5dr_action_destroy_stcs(&action[i]);\n \t\tmlx5dr_cmd_destroy_obj(action->reformat.arg_obj);\n@@ -2230,6 +2245,7 @@ int mlx5dr_action_get_default_stc(struct mlx5dr_context *ctx,\n \n \tstc_attr.action_type = MLX5_IFC_STC_ACTION_TYPE_NOP;\n \tstc_attr.action_offset = MLX5DR_ACTION_OFFSET_DW0;\n+\tstc_attr.reparse_mode = MLX5_IFC_STC_REPARSE_IGNORE;\n \tret = mlx5dr_action_alloc_single_stc(ctx, &stc_attr, tbl_type,\n \t\t\t\t\t     &default_stc->nop_ctr);\n \tif (ret) {\n@@ -2594,7 +2610,7 @@ mlx5dr_action_setter_single_double_pop(struct mlx5dr_actions_apply_data *apply,\n \tapply->wqe_data[MLX5DR_ACTION_OFFSET_DW5] = 0;\n \tapply->wqe_ctrl->stc_ix[MLX5DR_ACTION_STC_IDX_DW5] =\n \t\thtobe32(mlx5dr_action_get_shared_stc_offset(apply->common_res,\n-\t\t\t\t\t\t    MLX5DR_CONTEXT_SHARED_STC_POP));\n+\t\t\t\t\t\t\t    MLX5DR_CONTEXT_SHARED_STC_DOUBLE_POP));\n }\n \n static void\n@@ -2629,7 +2645,7 @@ mlx5dr_action_setter_common_decap(struct mlx5dr_actions_apply_data *apply,\n \tapply->wqe_data[MLX5DR_ACTION_OFFSET_DW5] = 0;\n \tapply->wqe_ctrl->stc_ix[MLX5DR_ACTION_STC_IDX_DW5] =\n \t\thtobe32(mlx5dr_action_get_shared_stc_offset(apply->common_res,\n-\t\t\t\t\t\t\t    MLX5DR_CONTEXT_SHARED_STC_DECAP));\n+\t\t\t\t\t\t\t    MLX5DR_CONTEXT_SHARED_STC_DECAP_L3));\n }\n \n int mlx5dr_action_template_process(struct mlx5dr_action_template *at)\n@@ -2680,8 +2696,8 @@ int mlx5dr_action_template_process(struct mlx5dr_action_template *at)\n \t\t\t\tpop_setter->set_single = &mlx5dr_action_setter_single_double_pop;\n \t\t\t\tbreak;\n \t\t\t}\n-\t\t\tsetter = mlx5dr_action_setter_find_first(last_setter, ASF_SINGLE1 | ASF_MODIFY);\n-\t\t\tsetter->flags |= ASF_SINGLE1 | ASF_REPARSE | ASF_REMOVE;\n+\t\t\tsetter = mlx5dr_action_setter_find_first(last_setter, ASF_SINGLE1 | ASF_MODIFY | ASF_INSERT);\n+\t\t\tsetter->flags |= ASF_SINGLE1 | ASF_REMOVE;\n \t\t\tsetter->set_single = &mlx5dr_action_setter_single;\n \t\t\tsetter->idx_single = i;\n \t\t\tpop_setter = setter;\n@@ -2690,7 +2706,7 @@ int mlx5dr_action_template_process(struct mlx5dr_action_template *at)\n \t\tcase MLX5DR_ACTION_TYP_PUSH_VLAN:\n \t\t\t/* Double insert inline */\n \t\t\tsetter = mlx5dr_action_setter_find_first(last_setter, ASF_DOUBLE | ASF_REMOVE);\n-\t\t\tsetter->flags |= ASF_DOUBLE | ASF_REPARSE | ASF_MODIFY;\n+\t\t\tsetter->flags |= ASF_DOUBLE | ASF_INSERT;\n \t\t\tsetter->set_double = &mlx5dr_action_setter_push_vlan;\n \t\t\tsetter->idx_double = i;\n \t\t\tbreak;\n@@ -2698,7 +2714,7 @@ int mlx5dr_action_template_process(struct mlx5dr_action_template *at)\n \t\tcase MLX5DR_ACTION_TYP_MODIFY_HDR:\n \t\t\t/* Double modify header list */\n \t\t\tsetter = mlx5dr_action_setter_find_first(last_setter, ASF_DOUBLE | ASF_REMOVE);\n-\t\t\tsetter->flags |= ASF_DOUBLE | ASF_MODIFY | ASF_REPARSE;\n+\t\t\tsetter->flags |= ASF_DOUBLE | ASF_MODIFY;\n \t\t\tsetter->set_double = &mlx5dr_action_setter_modify_header;\n \t\t\tsetter->idx_double = i;\n \t\t\tbreak;\n@@ -2715,7 +2731,7 @@ int mlx5dr_action_template_process(struct mlx5dr_action_template *at)\n \t\tcase MLX5DR_ACTION_TYP_REFORMAT_TNL_L2_TO_L2:\n \t\t\t/* Single remove header to header */\n \t\t\tsetter = mlx5dr_action_setter_find_first(last_setter, ASF_SINGLE1 | ASF_MODIFY);\n-\t\t\tsetter->flags |= ASF_SINGLE1 | ASF_REMOVE | ASF_REPARSE;\n+\t\t\tsetter->flags |= ASF_SINGLE1 | ASF_REMOVE;\n \t\t\tsetter->set_single = &mlx5dr_action_setter_single;\n \t\t\tsetter->idx_single = i;\n \t\t\tbreak;\n@@ -2723,8 +2739,8 @@ int mlx5dr_action_template_process(struct mlx5dr_action_template *at)\n \t\tcase MLX5DR_ACTION_TYP_INSERT_HEADER:\n \t\tcase MLX5DR_ACTION_TYP_REFORMAT_L2_TO_TNL_L2:\n \t\t\t/* Double insert header with pointer */\n-\t\t\tsetter = mlx5dr_action_setter_find_first(last_setter, ASF_DOUBLE);\n-\t\t\tsetter->flags |= ASF_DOUBLE | ASF_REPARSE;\n+\t\t\tsetter = mlx5dr_action_setter_find_first(last_setter, ASF_DOUBLE | ASF_REMOVE);\n+\t\t\tsetter->flags |= ASF_DOUBLE | ASF_INSERT;\n \t\t\tsetter->set_double = &mlx5dr_action_setter_insert_ptr;\n \t\t\tsetter->idx_double = i;\n \t\t\tbreak;\n@@ -2732,7 +2748,7 @@ int mlx5dr_action_template_process(struct mlx5dr_action_template *at)\n \t\tcase MLX5DR_ACTION_TYP_REFORMAT_L2_TO_TNL_L3:\n \t\t\t/* Single remove + Double insert header with pointer */\n \t\t\tsetter = mlx5dr_action_setter_find_first(last_setter, ASF_SINGLE1 | ASF_DOUBLE);\n-\t\t\tsetter->flags |= ASF_SINGLE1 | ASF_DOUBLE | ASF_REPARSE | ASF_REMOVE;\n+\t\t\tsetter->flags |= ASF_SINGLE1 | ASF_DOUBLE;\n \t\t\tsetter->set_double = &mlx5dr_action_setter_insert_ptr;\n \t\t\tsetter->idx_double = i;\n \t\t\tsetter->set_single = &mlx5dr_action_setter_common_decap;\n@@ -2741,9 +2757,8 @@ int mlx5dr_action_template_process(struct mlx5dr_action_template *at)\n \n \t\tcase MLX5DR_ACTION_TYP_REFORMAT_TNL_L3_TO_L2:\n \t\t\t/* Double modify header list with remove and push inline */\n-\t\t\tsetter = mlx5dr_action_setter_find_first(last_setter,\n-\t\t\t\t\t\t\t\t ASF_DOUBLE | ASF_REMOVE);\n-\t\t\tsetter->flags |= ASF_DOUBLE | ASF_MODIFY | ASF_REPARSE;\n+\t\t\tsetter = mlx5dr_action_setter_find_first(last_setter, ASF_DOUBLE | ASF_REMOVE);\n+\t\t\tsetter->flags |= ASF_DOUBLE | ASF_MODIFY | ASF_INSERT;\n \t\t\tsetter->set_double = &mlx5dr_action_setter_tnl_l3_to_l2;\n \t\t\tsetter->idx_double = i;\n \t\t\tbreak;\ndiff --git a/drivers/net/mlx5/hws/mlx5dr_action.h b/drivers/net/mlx5/hws/mlx5dr_action.h\nindex 33a674906e..4bd3d3b26b 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_action.h\n+++ b/drivers/net/mlx5/hws/mlx5dr_action.h\n@@ -52,7 +52,7 @@ enum mlx5dr_action_setter_flag {\n \tASF_SINGLE2 = 1 << 1,\n \tASF_SINGLE3 = 1 << 2,\n \tASF_DOUBLE = ASF_SINGLE2 | ASF_SINGLE3,\n-\tASF_REPARSE = 1 << 3,\n+\tASF_INSERT = 1 << 3,\n \tASF_REMOVE = 1 << 4,\n \tASF_MODIFY = 1 << 5,\n \tASF_CTR = 1 << 6,\ndiff --git a/drivers/net/mlx5/hws/mlx5dr_cmd.c b/drivers/net/mlx5/hws/mlx5dr_cmd.c\nindex a07378bc42..876a47147d 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_cmd.c\n+++ b/drivers/net/mlx5/hws/mlx5dr_cmd.c\n@@ -394,7 +394,7 @@ mlx5dr_cmd_rtc_create(struct ibv_context *ctx,\n \tMLX5_SET(rtc, attr, ste_table_base_id, rtc_attr->ste_base);\n \tMLX5_SET(rtc, attr, ste_table_offset, rtc_attr->ste_offset);\n \tMLX5_SET(rtc, attr, miss_flow_table_id, rtc_attr->miss_ft_id);\n-\tMLX5_SET(rtc, attr, reparse_mode, MLX5_IFC_RTC_REPARSE_ALWAYS);\n+\tMLX5_SET(rtc, attr, reparse_mode, rtc_attr->reparse_mode);\n \n \tdevx_obj->obj = mlx5_glue->devx_obj_create(ctx, in, sizeof(in), out, sizeof(out));\n \tif (!devx_obj->obj) {\n@@ -570,6 +570,7 @@ mlx5dr_cmd_stc_modify(struct mlx5dr_devx_obj *devx_obj,\n \tattr = MLX5_ADDR_OF(create_stc_in, in, stc);\n \tMLX5_SET(stc, attr, ste_action_offset, stc_attr->action_offset);\n \tMLX5_SET(stc, attr, action_type, stc_attr->action_type);\n+\tMLX5_SET(stc, attr, reparse_mode, stc_attr->reparse_mode);\n \tMLX5_SET64(stc, attr, modify_field_select,\n \t\t   MLX5_IFC_MODIFY_STC_FIELD_SELECT_NEW_STC);\n \ndiff --git a/drivers/net/mlx5/hws/mlx5dr_cmd.h b/drivers/net/mlx5/hws/mlx5dr_cmd.h\nindex 2b44f0e1f2..18c2b07fc8 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_cmd.h\n+++ b/drivers/net/mlx5/hws/mlx5dr_cmd.h\n@@ -79,6 +79,7 @@ struct mlx5dr_cmd_rtc_create_attr {\n \tuint8_t table_type;\n \tuint8_t match_definer_0;\n \tuint8_t match_definer_1;\n+\tuint8_t reparse_mode;\n \tbool is_frst_jumbo;\n \tbool is_scnd_range;\n };\n@@ -98,6 +99,7 @@ struct mlx5dr_cmd_stc_create_attr {\n struct mlx5dr_cmd_stc_modify_attr {\n \tuint32_t stc_offset;\n \tuint8_t action_offset;\n+\tuint8_t reparse_mode;\n \tenum mlx5_ifc_stc_action_type action_type;\n \tunion {\n \t\tuint32_t id; /* TIRN, TAG, FT ID, STE ID */\ndiff --git a/drivers/net/mlx5/hws/mlx5dr_context.c b/drivers/net/mlx5/hws/mlx5dr_context.c\nindex 08a5ee92a5..15d53c578a 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_context.c\n+++ b/drivers/net/mlx5/hws/mlx5dr_context.c\n@@ -4,6 +4,21 @@\n \n #include \"mlx5dr_internal.h\"\n \n+bool mlx5dr_context_cap_dynamic_reparse(struct mlx5dr_context *ctx)\n+{\n+\treturn IS_BIT_SET(ctx->caps->rtc_reparse_mode, MLX5_IFC_RTC_REPARSE_BY_STC);\n+}\n+\n+uint8_t mlx5dr_context_get_reparse_mode(struct mlx5dr_context *ctx)\n+{\n+\t/* Prefer to use dynamic reparse, reparse only specific actions */\n+\tif (mlx5dr_context_cap_dynamic_reparse(ctx))\n+\t\treturn MLX5_IFC_RTC_REPARSE_NEVER;\n+\n+\t/* Otherwise use less efficient static */\n+\treturn MLX5_IFC_RTC_REPARSE_ALWAYS;\n+}\n+\n static int mlx5dr_context_pools_init(struct mlx5dr_context *ctx)\n {\n \tstruct mlx5dr_pool_attr pool_attr = {0};\ndiff --git a/drivers/net/mlx5/hws/mlx5dr_context.h b/drivers/net/mlx5/hws/mlx5dr_context.h\nindex 0ba8d0c92e..f476c2308c 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_context.h\n+++ b/drivers/net/mlx5/hws/mlx5dr_context.h\n@@ -11,8 +11,8 @@ enum mlx5dr_context_flags {\n };\n \n enum mlx5dr_context_shared_stc_type {\n-\tMLX5DR_CONTEXT_SHARED_STC_DECAP = 0,\n-\tMLX5DR_CONTEXT_SHARED_STC_POP = 1,\n+\tMLX5DR_CONTEXT_SHARED_STC_DECAP_L3 = 0,\n+\tMLX5DR_CONTEXT_SHARED_STC_DOUBLE_POP = 1,\n \tMLX5DR_CONTEXT_SHARED_STC_MAX = 2,\n };\n \n@@ -60,4 +60,9 @@ mlx5dr_context_get_local_ibv(struct mlx5dr_context *ctx)\n \n \treturn ctx->ibv_ctx;\n }\n+\n+bool mlx5dr_context_cap_dynamic_reparse(struct mlx5dr_context *ctx);\n+\n+uint8_t mlx5dr_context_get_reparse_mode(struct mlx5dr_context *ctx);\n+\n #endif /* MLX5DR_CONTEXT_H_ */\ndiff --git a/drivers/net/mlx5/hws/mlx5dr_matcher.c b/drivers/net/mlx5/hws/mlx5dr_matcher.c\nindex ebe42c44c6..35701a4e2c 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_matcher.c\n+++ b/drivers/net/mlx5/hws/mlx5dr_matcher.c\n@@ -562,6 +562,7 @@ static int mlx5dr_matcher_create_rtc(struct mlx5dr_matcher *matcher,\n \trtc_attr.pd = ctx->pd_num;\n \trtc_attr.ste_base = devx_obj->id;\n \trtc_attr.ste_offset = ste->offset;\n+\trtc_attr.reparse_mode = mlx5dr_context_get_reparse_mode(ctx);\n \trtc_attr.table_type = mlx5dr_table_get_res_fw_ft_type(tbl->type, false);\n \tmlx5dr_matcher_set_rtc_attr_sz(matcher, &rtc_attr, rtc_type, false);\n \n@@ -764,6 +765,7 @@ static int mlx5dr_matcher_bind_at(struct mlx5dr_matcher *matcher)\n \t/* Allocate STC for jumps to STE */\n \tstc_attr.action_offset = MLX5DR_ACTION_OFFSET_HIT;\n \tstc_attr.action_type = MLX5_IFC_STC_ACTION_TYPE_JUMP_TO_STE_TABLE;\n+\tstc_attr.reparse_mode = MLX5_IFC_STC_REPARSE_NEVER;\n \tstc_attr.ste_table.ste = matcher->action_ste.ste;\n \tstc_attr.ste_table.ste_pool = matcher->action_ste.pool;\n \tstc_attr.ste_table.match_definer_id = ctx->caps->trivial_match_definer;\n",
    "prefixes": [
        "v4",
        "04/13"
    ]
}