get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 133596,
    "url": "http://patchwork.dpdk.org/api/patches/133596/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20231029163202.216450-23-getelson@nvidia.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<20231029163202.216450-23-getelson@nvidia.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20231029163202.216450-23-getelson@nvidia.com",
    "date": "2023-10-29T16:31:55",
    "name": "[23/30] net/mlx5/hws: support dynamic re-parse",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "faa7199d8ef18a526582e7cd7516739d570f2507",
    "submitter": {
        "id": 1882,
        "url": "http://patchwork.dpdk.org/api/people/1882/?format=api",
        "name": "Gregory Etelson",
        "email": "getelson@nvidia.com"
    },
    "delegate": {
        "id": 3268,
        "url": "http://patchwork.dpdk.org/api/users/3268/?format=api",
        "username": "rasland",
        "first_name": "Raslan",
        "last_name": "Darawsheh",
        "email": "rasland@nvidia.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20231029163202.216450-23-getelson@nvidia.com/mbox/",
    "series": [
        {
            "id": 30049,
            "url": "http://patchwork.dpdk.org/api/series/30049/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=30049",
            "date": "2023-10-29T16:31:33",
            "name": "[01/30] net/mlx5/hws: Definer, add mlx5dr context to definer_conv_data",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/30049/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/133596/comments/",
    "check": "warning",
    "checks": "http://patchwork.dpdk.org/api/patches/133596/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 5B14F43238;\n\tSun, 29 Oct 2023 17:35:55 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id E8E9142686;\n\tSun, 29 Oct 2023 17:33:45 +0100 (CET)",
            "from NAM12-DM6-obe.outbound.protection.outlook.com\n (mail-dm6nam12on2062.outbound.protection.outlook.com [40.107.243.62])\n by mails.dpdk.org (Postfix) with ESMTP id B8A5240269\n for <dev@dpdk.org>; Sun, 29 Oct 2023 17:33:43 +0100 (CET)",
            "from BL1PR13CA0096.namprd13.prod.outlook.com (2603:10b6:208:2b9::11)\n by CY8PR12MB7339.namprd12.prod.outlook.com (2603:10b6:930:51::22)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6933.26; Sun, 29 Oct\n 2023 16:33:41 +0000",
            "from BL02EPF0001A100.namprd03.prod.outlook.com\n (2603:10b6:208:2b9:cafe::a4) by BL1PR13CA0096.outlook.office365.com\n (2603:10b6:208:2b9::11) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.14 via Frontend\n Transport; Sun, 29 Oct 2023 16:33:41 +0000",
            "from mail.nvidia.com (216.228.117.161) by\n BL02EPF0001A100.mail.protection.outlook.com (10.167.242.107) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.6933.15 via Frontend Transport; Sun, 29 Oct 2023 16:33:40 +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.41; Sun, 29 Oct\n 2023 09:33:32 -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.41; Sun, 29 Oct\n 2023 09:33:28 -0700"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=eaLxCrLbpXxYE+8rUKsr1VUdZocj7dwtjk2R5qjiJrzlByYyENBNY/381xIPU69OyVjBtjRXM6UsoTrQRpbWqf1yvWvlXbGVRcvKSpo0ttHMN6P9dYJG0dxH4j39YgFOyFb+V0N51jDXfN3Inw62hziK3xg+jNWL4bdAb+WxM888BuUnJhoIne3Fc7cuaxQX/eHGrNCM/WQkQm5pXjC8+WmhRLVInboXG5iAPdHGiTZZkFyK/5PR4Wg0TJsyhHPz67q6G/39ZpxEgMPKn5F1v+zYvoOky4g23aks2cgAaY5B7dzJ+oPNHohT/4B8LssQsk0btbyVGcl21ivB6gJwFQ==",
        "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=wZ/v1MGrxET1I7O90UqEtLN4hspqKfyWNmBg9J/f1bc=;\n b=AdbGbuY89TVA1h1Rv8G6/IQ7zmPUdjoBX1EQW4YqjYF4JNAqn3UG4pwMLJEhMG0m7IvBvZ9K4ql+WQKjCU1WqXnbUVV3z6EANY066ZAa4FPPW+avZwGDQXD/ed3G8obFX6WCGWe6JvDHsb1lDEYAgtCGMFliO0Lt17W2YYqZNt/v9yMWyF49b5fUwCmaZD/m9wDJ1M6o3PVIM+rpdRSVjFZYvNDJJxLzWU+OeNZKH9FcmyiR6tVwBoPjYf/B5+dp8+frPRVqY7fFVhzx+e0+nB8hgb1UMYKNq88meJqxo+W/EOXZPHd+ET5LkRAJmHNf0qOEVMZ03rllUTkBzj/reg==",
        "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 (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=wZ/v1MGrxET1I7O90UqEtLN4hspqKfyWNmBg9J/f1bc=;\n b=MWI+SduvonuvnO8KNl0EoByIQnzTLJ06C/SvIIULF1p3ursC6w21f9zcnDHOYfQZnMiv+ZiHdNLmwmiM4p28IYL59kZG1Xafv8q6Ge2cuiy93OUSlaRoJCMcJfe4kycYUDc8BhDOmLVkO0n0AeenlMWLuGXj3rJL4Xyw+2CZ6VQADBQpLp7O+OCp/f4zgfFb2ah5zF9r4mEGh1KptUleDA9vWhd3/lhVAF52ST63ENx9MbctgIZzR8eR6HGPbvabsEU3xBS7ptrfr5klAxdjzTydrCBnvDnb2p1vmnZTB8MJTavhfF3/opljQJKixq0YIvlvRlnRPpDEpzec0pd0ig==",
        "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": "Gregory Etelson <getelson@nvidia.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<getelson@nvidia.com>, <mkashani@nvidia.com>, <rasland@nvidia.com>, \"Alex\n Vesker\" <valex@nvidia.com>, Erez Shitrit <erezsh@nvidia.com>, Matan Azrad\n <matan@nvidia.com>, Viacheslav Ovsiienko <viacheslavo@nvidia.com>, Ori Kam\n <orika@nvidia.com>, Suanming Mou <suanmingm@nvidia.com>",
        "Subject": "[PATCH 23/30] net/mlx5/hws: support dynamic re-parse",
        "Date": "Sun, 29 Oct 2023 18:31:55 +0200",
        "Message-ID": "<20231029163202.216450-23-getelson@nvidia.com>",
        "X-Mailer": "git-send-email 2.39.2",
        "In-Reply-To": "<20231029163202.216450-1-getelson@nvidia.com>",
        "References": "<20231029163202.216450-1-getelson@nvidia.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[10.126.231.35]",
        "X-ClientProxiedBy": "rnnvmail203.nvidia.com (10.129.68.9) To\n rnnvmail201.nvidia.com (10.129.68.8)",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "BL02EPF0001A100:EE_|CY8PR12MB7339:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "96b0e251-1a1a-4388-6c85-08dbd89ccf7c",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n dyozx9qwtdsPAVPQJP4fEA6zmTDtEf3MoPGTZHJ7cFpvKrzyHYcD/kahYBo4DQRH8bUkITDgi8S9qny5y/FEWsVkPtJljT9InEMB+kzywXxR7tRzXTQFeeDZhtr8BkBVqeoQV7J2xYcXf5EVtP38tHdotwbZasSnDhMoMeWkAvxEUw0fgQSGoi546/1njDoKpBld3pxAg4uRsidRwn7SeMn7cBeWJPJt8YOburDppxe5B3ixCvE/pLbj89NjF4QWqyNngbUyiyFk8r+8VbmGIGSLSTD5AO4mxOX2BS9zC3hNBgS9pFHydoUaWTn0bSm1hj1rEFwSWDmMsNktZNpY38l0dq2YdoJG0nv3Qh9cG9tztuw+iCIY1HBEqKr2OE8Lw0e7pMZRCYDGYxwU5CfKCjiuXVMy9+ZE8lAfk4b6kFtXVpXDN47Tlwl6DR5tG0mxV8uep/0KiscGj32GqNcHQIYGqu4X1lT62Z60Ru7g2Kl+wTLfjAr2X9bAL5ruvVqM83s435Gz91lCWFCmY/hFP7+vsr+Qo22YLRSiSzTUr4kB2k5HFCb50wxoEArRHprNs3zceI2cgmW90plj6mJ0hTW8xq2bvdKUtJElXaiRcN775x6TBD1GUwLH0gC4QN/lS96tuU4xzkvc2u7EmR4O9Lg/6zkSQCm48svDZ8uA48de7lcPecvEUzeELKRWf2UUgq/GwnGOH127ZE8TvBqTObDfWc7eILH7QW9Cn5kfS4URAa4plXqEqwO+s421lNMP",
        "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:(13230031)(4636009)(376002)(396003)(136003)(346002)(39860400002)(230922051799003)(82310400011)(64100799003)(1800799009)(186009)(451199024)(46966006)(40470700004)(36840700001)(55016003)(40480700001)(40460700003)(36860700001)(356005)(6916009)(54906003)(7636003)(47076005)(82740400003)(316002)(6666004)(7696005)(478600001)(2616005)(83380400001)(70586007)(70206006)(336012)(426003)(107886003)(1076003)(16526019)(6286002)(26005)(5660300002)(41300700001)(2906002)(30864003)(8676002)(8936002)(4326008)(86362001)(36756003);\n DIR:OUT; SFP:1101;",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "29 Oct 2023 16:33:40.8405 (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 96b0e251-1a1a-4388-6c85-08dbd89ccf7c",
        "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 BL02EPF0001A100.namprd03.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CY8PR12MB7339",
        "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  | 58 +++++++++++++++++----------\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, 75 insertions(+), 26 deletions(-)",
    "diff": "diff --git a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h\nindex bb2b990d5b..a5ecce98e9 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@@ -3515,6 +3516,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@@ -3648,7 +3655,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 05b6e97576..bdccfb9cf3 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_action.c\n+++ b/drivers/net/mlx5/hws/mlx5dr_action.c\n@@ -124,16 +124,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@@ -512,6 +514,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@@ -600,6 +607,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@@ -626,6 +635,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@@ -653,6 +663,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@@ -662,6 +673,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@@ -705,12 +717,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@@ -730,6 +744,7 @@ static void mlx5dr_action_fill_stc_attr(struct mlx5dr_action *action,\n \tcase MLX5DR_ACTION_TYP_REFORMAT_TRAILER:\n \t\tattr->action_type = MLX5_IFC_STC_ACTION_TYPE_TRAILER;\n \t\tattr->action_offset = MLX5DR_ACTION_OFFSET_DW5;\n+\t\tattr->reparse_mode = MLX5_IFC_STC_REPARSE_ALWAYS;\n \t\tattr->reformat_trailer.type = action->reformat_trailer.type;\n \t\tattr->reformat_trailer.op = action->reformat_trailer.op;\n \t\tattr->reformat_trailer.size = action->reformat_trailer.size;\n@@ -746,6 +761,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@@ -1310,7 +1326,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@@ -1325,7 +1341,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@@ -1481,7 +1497,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@@ -1498,7 +1514,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@@ -2393,7 +2409,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@@ -2421,7 +2437,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@@ -2481,6 +2497,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@@ -2858,7 +2875,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@@ -2893,7 +2910,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 static void\n@@ -2983,8 +3000,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@@ -2993,7 +3010,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@@ -3001,7 +3018,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@@ -3021,7 +3038,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@@ -3029,8 +3046,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@@ -3038,7 +3055,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@@ -3047,9 +3064,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 4046f658e6..328de65a1e 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_action.h\n+++ b/drivers/net/mlx5/hws/mlx5dr_action.h\n@@ -55,7 +55,7 @@ enum mlx5dr_action_setter_flag {\n \tASF_SINGLE3 = 1 << 2,\n \tASF_DOUBLE = ASF_SINGLE2 | ASF_SINGLE3,\n \tASF_TRIPLE = ASF_SINGLE1 | ASF_DOUBLE,\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 135d31dca1..07c820afe5 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@@ -586,6 +586,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 cb27212a5b..7792fc48aa 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, CRYPTO */\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 6f74cf3677..cd6cbdeceb 100644\n--- a/drivers/net/mlx5/hws/mlx5dr_matcher.c\n+++ b/drivers/net/mlx5/hws/mlx5dr_matcher.c\n@@ -583,6 +583,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@@ -790,6 +791,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": [
        "23/30"
    ]
}