From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id E458C44173; Thu, 6 Jun 2024 12:07:31 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 731A042D45; Thu, 6 Jun 2024 12:07:22 +0200 (CEST) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2067.outbound.protection.outlook.com [40.107.93.67]) by mails.dpdk.org (Postfix) with ESMTP id F08AB42831 for ; Thu, 6 Jun 2024 12:07:19 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KjEY9v3v4B7w9XokAyzler6lqFuuxOxnRorfi9vlN5KytAXtr2EH9wB6P3aCkNoLH6mmWmSK1fS6BAnHzDq0bvMlOelUXJ02qk94n8ParDb7AEh14iD3MtY0h9tapsOFanRwflFfCytwTaZ0IOBPh2yOiz42wX6TbaCdjBHi+ymtU0Em73+9yMy8lriqXZvOgbad5bhIYwcD7SL3sV1a96ZRUCMOk+HT8pMAdTORgcQTRiZONMo6kaU2xst1c9R1NCaNaH5mMpHilDEPn1n8S/VEjV//xQPLIEFVTyyroYx1F0YeI9CMNCbyXudsmLJxo/A5V0EjOhceC2D0o1S00Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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; bh=q9uvps9XhUuJWD9UlDLcijSeny/32UkE3wZHDlWcfHo=; b=A+CqNH4MkImA2d8QzvNeIbW6c1GyWl+vm0G93+4FyjBPS163SoQqxEuVrBQmzSRpoUQPi5FRbff0UVp8QmC/6t+8i4Bl1d8oPKDBLTFNt43mungwLY8VO79YH9JOP2qY7G0sS7vldDw5ntfXGEW1VFvTsn7//8SG1D6z5SR0ZsYtDHf9h2l9irJ/oSYecX5WojFq0IuwwSkCK0X64putLuHAw4LU8w2lLAWuCDYm+KMyO4VD9DVgMs70ayJOxnl/NI6KUqOVP+Rz17tsfD+2R4AR6OsjGx5/GTAeXnRrc1m0XIa/9/nISJjJFCpmVzC0yY84la+HgsEUfuF1E3JDzA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) smtp.rcpttodomain=dpdk.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=q9uvps9XhUuJWD9UlDLcijSeny/32UkE3wZHDlWcfHo=; b=a4mK6saniti5iKUMcKWff3PlDfsGRSUdu+/ax0qiWxMWnX8AKLvr29AruuBeNmz0qOEN9x1l0gsfP7GETOZHN2yDV2Ah6t5rIhNUXTtWYU9kTL2o2uU2vbi5S50hbOJvakD/XKydbqIajmZnoHCf+/MW8LeHqlNlw65ncACe2FwD/b+1xcM+8toprf5Z8otwhnEO28mopViuXmYyYvpGAy/gxImnuLBVrR3RPSfIfwtibSKZ71KMCAofbED+z1ofRVQcd/cKC/irGMVbcpCxURd9Ah/rSK9wZYSbh+it3GH9Y5qWW8MNTzj4Bd6XO4edQbpAKpuES7f2gOW8ztgATw== Received: from BYAPR08CA0029.namprd08.prod.outlook.com (2603:10b6:a03:100::42) by SJ2PR12MB8954.namprd12.prod.outlook.com (2603:10b6:a03:541::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7633.34; Thu, 6 Jun 2024 10:07:17 +0000 Received: from SJ1PEPF0000231B.namprd03.prod.outlook.com (2603:10b6:a03:100:cafe::27) by BYAPR08CA0029.outlook.office365.com (2603:10b6:a03:100::42) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7656.21 via Frontend Transport; Thu, 6 Jun 2024 10:07:17 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by SJ1PEPF0000231B.mail.protection.outlook.com (10.167.242.232) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7633.15 via Frontend Transport; Thu, 6 Jun 2024 10:07:17 +0000 Received: from drhqmail202.nvidia.com (10.126.190.181) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 6 Jun 2024 03:07:11 -0700 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail202.nvidia.com (10.126.190.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Thu, 6 Jun 2024 03:07:10 -0700 Received: from nvidia.com (10.127.8.14) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4 via Frontend Transport; Thu, 6 Jun 2024 03:07:08 -0700 From: Maayan Kashani To: CC: , , , Viacheslav Ovsiienko , Ori Kam , Suanming Mou , Matan Azrad Subject: [PATCH v4 3/4] net/mlx5: set encap as shared action Date: Thu, 6 Jun 2024 13:06:14 +0300 Message-ID: <20240606100615.171695-4-mkashani@nvidia.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20240606100615.171695-1-mkashani@nvidia.com> References: <20240603105430.10818-1-mkashani@nvidia.com> <20240606100615.171695-1-mkashani@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ1PEPF0000231B:EE_|SJ2PR12MB8954:EE_ X-MS-Office365-Filtering-Correlation-Id: c81fbf8f-e08f-4bb6-342a-08dc86107225 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230031|376005|36860700004|1800799015|82310400017; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ClrRNkBiTa0vPVC0AlGk7iQwkZeCtjbOfBgN3/JCFNGtg85cEvsJU7gK4nVt?= =?us-ascii?Q?b+FozrSCOM25XSveXdVczzzXEMBFV4cXNvm3MoemB+g0MBW9//GVFCMP5Yb1?= =?us-ascii?Q?XW0idME6satVn33/CCA6qf9Pboih5XpulbOBItqi/3aDCrnDOTyjjemggTtx?= =?us-ascii?Q?tJGVzJr3/trrKKKoBnC6Zh2uyNnX35F8P0TzPjzKwe+eB8F/IkN6OKDr90W9?= =?us-ascii?Q?iA6UdZPpsUQpAtVjsee9DZ81Tpb6hLtKirv7+epRPDxPyzbVP082bvxKfwv/?= =?us-ascii?Q?zw698/+Rr0rPLLjURxlzzKKKVFfPm79jCFGCqxd9b536xrkFOU3B4tJIhRCP?= =?us-ascii?Q?fXo4Dvx/U/bb7UnXLuSVosuiRL2t30CzS3yoEb4UZSdQYl/W/P7nw9tDHv2z?= =?us-ascii?Q?7U1Y0U0AwivXYLdHeuENkeIwjMPIwwfAp6p7+3lQKk554z1BAIX1sxXLf/SU?= =?us-ascii?Q?obAxBykKsPG2wIxTu60J8az/xYTNguQnsfnI8QNCEfGIO5gyZgnokTHjoXqg?= =?us-ascii?Q?gdzYT8xuxNtyxTPrIjXS4AoFmOUMJl85YbEabLGoS1x+5jEr851qryTR3uxT?= =?us-ascii?Q?wVZpgUQEkBpw4UDNYEKTT5LPciwvh7dCtEdu9dXq19BBclPf0bw1Aw3z0WPR?= =?us-ascii?Q?3ij2fLZhQcY6OQapIRwmM84a+pXOmoqGMLrIVk/Zd6EZZh1ZEw7TO8CpTuDX?= =?us-ascii?Q?PhR4z1Kl721J4dS9ALYGYXD4iIVAd+JrMNfLmwY/ApB3TCfblQGZ6JRz46ms?= =?us-ascii?Q?IvfERtf2J/aFasMJoZmS6Wgw6tobktq0ch7FMf7dQmjA3pLE9vvNj0ZUNp31?= =?us-ascii?Q?L0hWVGpif19+dJHkSUMC8on5EJdXDmEgB3ymE71Nlyx/TkLielaZQJcQm5Nm?= =?us-ascii?Q?8+xeEkTioaBg1+5yE3RgAxZr236s4e4yQovpxulBkN/gJiFBT4pHJOQtG2lO?= =?us-ascii?Q?MsFYx0UH76Q3nnCJSOcyEajF5Uxi63xrHq+7ggQAxZeJWpuQjfQxe5SZ9OMn?= =?us-ascii?Q?QnSA/k4cmLD4jWlkBhGsztrqCtPPDOrPFDKtbz9HCsvretPa7n0le+IJhrns?= =?us-ascii?Q?GrgiX2FP4zV8BvEqXDB0diHlkCs725UHpn87WLkIkea5+tC292XWdUp6SW+m?= =?us-ascii?Q?ZaITq/BjzHsBsofWWPpPr9l8bnc+CaVBrNF2yTXKfUueYoq6X3rlIWDplgvu?= =?us-ascii?Q?sgUqvV39q1VKcsZauW0f9feK1rtzey6zlUxx3QYarfZTshBnHufZWux21X9A?= =?us-ascii?Q?Y5ucPflsXZuwZS97l8/CugbDmC5jAOYDukjfQGWPU86YsFAD3zdZG3/A2EPI?= =?us-ascii?Q?3yW1DzCRXKJXukz8QC0KOLFbW5WBTbMRCNMPwyoByCIRspPQG1z8r2BDYNKy?= =?us-ascii?Q?t2XnVZCwTAtqjLQeDW/h7kmeLODtnrKXtNKoOVRmcy+mahJDcw=3D=3D?= X-Forefront-Antispam-Report: CIP:216.228.118.233; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc7edge2.nvidia.com; CAT:NONE; SFS:(13230031)(376005)(36860700004)(1800799015)(82310400017); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2024 10:07:17.2094 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c81fbf8f-e08f-4bb6-342a-08dc86107225 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.118.233]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SJ1PEPF0000231B.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB8954 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org In current implementation, in non template mode, encap action is not set as non shared(according to given masks). By masking the relevant fields, encap is now used as shared. decap remained unshared and cannot be shared according to current implementation. Optimize encap action mask initialization and fixed requested number of reformat actions to one. Signed-off-by: Maayan Kashani Acked-by: Dariusz Sosnowski --- drivers/net/mlx5/mlx5_flow_dv.c | 2 +- drivers/net/mlx5/mlx5_flow_hw.c | 119 +++++++++++++++++++++++--------- 2 files changed, 86 insertions(+), 35 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index 94af391894..1484531418 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -4317,7 +4317,7 @@ flow_encap_decap_create_cb(void *tool_ctx, void *cb_ctx) hdr.data = ctx_resource->buf; resource->action = mlx5dr_action_create_reformat (ctx->data2, (enum mlx5dr_action_type)ctx_resource->reformat_type, 1, - &hdr, 1, ctx_resource->flags); + &hdr, 0, ctx_resource->flags); if (!resource->action) ret = -1; #else diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index 134a035f41..61b6a71bbf 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -2124,9 +2124,17 @@ table_template_translate_indirect_list(struct rte_eth_dev *dev, return ret; } +static void +mlx5_set_reformat_header(struct mlx5dr_action_reformat_header *hdr, + uint8_t *encap_data, + size_t data_size) +{ + hdr->sz = data_size; + hdr->data = encap_data; +} + static int mlx5_tbl_translate_reformat(struct mlx5_priv *priv, - const struct rte_flow_template_table_attr *table_attr, struct mlx5_hw_actions *acts, struct rte_flow_actions_template *at, const struct rte_flow_item *enc_item, @@ -2138,8 +2146,6 @@ mlx5_tbl_translate_reformat(struct mlx5_priv *priv, struct rte_flow_error *error) { int mp_reformat_ix = mlx5_multi_pattern_reformat_to_index(refmt_type); - const struct rte_flow_attr *attr = &table_attr->flow_attr; - enum mlx5dr_table_type tbl_type = get_mlx5dr_table_type(attr); struct mlx5dr_action_reformat_header hdr; uint8_t buf[MLX5_ENCAP_MAX_LEN]; bool shared_rfmt = false; @@ -2164,19 +2170,16 @@ mlx5_tbl_translate_reformat(struct mlx5_priv *priv, return rte_flow_error_set(error, ENOMEM, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, "no memory for reformat context"); - hdr.sz = data_size; - hdr.data = encap_data; + acts->encap_decap_pos = at->reformat_off; + acts->encap_decap->data_size = data_size; + acts->encap_decap->action_type = refmt_type; if (shared_rfmt || mp_reformat_ix < 0) { uint16_t reformat_ix = at->reformat_off; - uint32_t flags = mlx5_hw_act_flag[!!attr->group][tbl_type] | - MLX5DR_ACTION_FLAG_SHARED; - - acts->encap_decap->action = - mlx5dr_action_create_reformat(priv->dr_ctx, refmt_type, - 1, &hdr, 0, flags); - if (!acts->encap_decap->action) - return -rte_errno; - acts->rule_acts[reformat_ix].action = acts->encap_decap->action; + /* + * This copy is only needed in non template mode. + * In order to create the action later. + */ + memcpy(acts->encap_decap->data, encap_data, data_size); acts->rule_acts[reformat_ix].reformat.data = acts->encap_decap->data; acts->rule_acts[reformat_ix].reformat.offset = 0; acts->encap_decap->shared = true; @@ -2184,14 +2187,11 @@ mlx5_tbl_translate_reformat(struct mlx5_priv *priv, uint32_t ix; typeof(mp_ctx->reformat[0]) *reformat = mp_ctx->reformat + mp_reformat_ix; - + mlx5_set_reformat_header(&hdr, encap_data, data_size); ix = reformat->elements_num++; reformat->reformat_hdr[ix] = hdr; acts->rule_acts[at->reformat_off].reformat.hdr_idx = ix; - acts->encap_decap_pos = at->reformat_off; acts->encap_decap->multi_pattern = 1; - acts->encap_decap->data_size = data_size; - acts->encap_decap->action_type = refmt_type; ret = __flow_hw_act_data_encap_append (priv, acts, (at->actions + reformat_src)->type, reformat_src, at->reformat_off, data_size); @@ -2202,6 +2202,32 @@ mlx5_tbl_translate_reformat(struct mlx5_priv *priv, return 0; } +static int +mlx5_tbl_create_reformat_action(struct mlx5_priv *priv, + const struct rte_flow_template_table_attr *table_attr, + struct mlx5_hw_actions *acts, + struct rte_flow_actions_template *at, + uint8_t *encap_data, + size_t data_size, + enum mlx5dr_action_type refmt_type) +{ + const struct rte_flow_attr *attr = &table_attr->flow_attr; + enum mlx5dr_table_type tbl_type = get_mlx5dr_table_type(attr); + struct mlx5dr_action_reformat_header hdr; + + mlx5_set_reformat_header(&hdr, encap_data, data_size); + uint16_t reformat_ix = at->reformat_off; + uint32_t flags = mlx5_hw_act_flag[!!attr->group][tbl_type] | + MLX5DR_ACTION_FLAG_SHARED; + + acts->encap_decap->action = mlx5dr_action_create_reformat(priv->dr_ctx, refmt_type, + 1, &hdr, 0, flags); + if (!acts->encap_decap->action) + return -rte_errno; + acts->rule_acts[reformat_ix].action = acts->encap_decap->action; + return 0; +} + static int mlx5_tbl_translate_modify_header(struct rte_eth_dev *dev, const struct mlx5_flow_template_table_cfg *cfg, @@ -2798,7 +2824,7 @@ __flow_hw_translate_actions_template(struct rte_eth_dev *dev, } } if (reformat_used) { - ret = mlx5_tbl_translate_reformat(priv, table_attr, acts, at, + ret = mlx5_tbl_translate_reformat(priv, acts, at, enc_item, enc_item_m, encap_data, encap_data_m, mp_ctx, data_size, @@ -2806,6 +2832,13 @@ __flow_hw_translate_actions_template(struct rte_eth_dev *dev, refmt_type, error); if (ret) goto err; + if (!nt_mode && acts->encap_decap->shared) { + ret = mlx5_tbl_create_reformat_action(priv, table_attr, acts, at, + encap_data, data_size, + refmt_type); + if (ret) + goto err; + } } if (recom_used) { MLX5_ASSERT(at->recom_off != UINT16_MAX); @@ -12361,7 +12394,7 @@ static int flow_hw_prepare(struct rte_eth_dev *dev, return 0; } -#define FLOW_HW_SET_DV_FIELDS(flow_attr, root, flags, dv_resource) { \ +#define FLOW_HW_SET_DV_FIELDS(flow_attr, root, dv_resource) { \ typeof(flow_attr) _flow_attr = (flow_attr); \ if (_flow_attr->transfer) \ dv_resource.ft_type = MLX5DV_FLOW_TABLE_TYPE_FDB; \ @@ -12369,7 +12402,8 @@ static int flow_hw_prepare(struct rte_eth_dev *dev, dv_resource.ft_type = _flow_attr->egress ? MLX5DV_FLOW_TABLE_TYPE_NIC_TX : \ MLX5DV_FLOW_TABLE_TYPE_NIC_RX; \ root = _flow_attr->group ? 0 : 1; \ - flags = mlx5_hw_act_flag[!!_flow_attr->group][get_mlx5dr_table_type(_flow_attr)]; \ + dv_resource.flags = \ + mlx5_hw_act_flag[!!_flow_attr->group][get_mlx5dr_table_type(_flow_attr)]; \ } static int @@ -12396,8 +12430,7 @@ flow_hw_modify_hdr_resource_register } else { return 0; } - FLOW_HW_SET_DV_FIELDS(attr, dummy.dv_resource.root, dummy.dv_resource.flags, - dummy.dv_resource); + FLOW_HW_SET_DV_FIELDS(attr, dummy.dv_resource.root, dummy.dv_resource); dummy.dv_resource.flags |= MLX5DR_ACTION_FLAG_SHARED; ret = __flow_modify_hdr_resource_register(dev, &dummy.dv_resource, &dv_resource_ptr, error); @@ -12432,18 +12465,25 @@ flow_hw_encap_decap_resource_register dv_resource.reformat_type = hw_acts->encap_decap->action_type; else return 0; + FLOW_HW_SET_DV_FIELDS(attr, is_root, dv_resource); ix = mlx5_bwc_multi_pattern_reformat_to_index((enum mlx5dr_action_type) - dv_resource.reformat_type); + dv_resource.reformat_type); if (ix < 0) return ix; - typeof(mpctx->reformat[0]) *reformat = mpctx->reformat + ix; - if (!reformat->elements_num) - return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION, - NULL, "No reformat action exist in the table."); - dv_resource.size = reformat->reformat_hdr->sz; - FLOW_HW_SET_DV_FIELDS(attr, is_root, dv_resource.flags, dv_resource); - MLX5_ASSERT(dv_resource.size <= MLX5_ENCAP_MAX_LEN); - memcpy(dv_resource.buf, reformat->reformat_hdr->data, dv_resource.size); + if (hw_acts->encap_decap->shared) { + dv_resource.size = hw_acts->encap_decap->data_size; + MLX5_ASSERT(dv_resource.size <= MLX5_ENCAP_MAX_LEN); + memcpy(&dv_resource.buf, hw_acts->encap_decap->data, dv_resource.size); + dv_resource.flags |= MLX5DR_ACTION_FLAG_SHARED; + } else { + typeof(mpctx->reformat[0]) *reformat = mpctx->reformat + ix; + if (!reformat->elements_num) + return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION, + NULL, "No reformat action exist in the table."); + dv_resource.size = reformat->reformat_hdr->sz; + MLX5_ASSERT(dv_resource.size <= MLX5_ENCAP_MAX_LEN); + memcpy(&dv_resource.buf, reformat->reformat_hdr->data, dv_resource.size); + } ret = __flow_encap_decap_resource_register(dev, &dv_resource, is_root, &dv_resource_ptr, error); if (ret) @@ -12451,7 +12491,10 @@ flow_hw_encap_decap_resource_register MLX5_ASSERT(dv_resource_ptr); dev_flow->nt2hws->rix_encap_decap = dv_resource_ptr->idx; /* keep action for the rule construction. */ - mpctx->segments[0].reformat_action[ix] = dv_resource_ptr->action; + if (hw_acts->encap_decap->shared) + hw_acts->rule_acts[hw_acts->encap_decap_pos].action = dv_resource_ptr->action; + else + mpctx->segments[0].reformat_action[ix] = dv_resource_ptr->action; /* Bulk size is 1, so index is 1. */ dev_flow->res_idx = 1; return 0; @@ -12570,6 +12613,15 @@ flow_hw_translate_flow_actions(struct rte_eth_dev *dev, RTE_SET_USED(action_flags); memset(masks, 0, sizeof(masks)); memset(mask_conf, 0, sizeof(mask_conf)); + /* + * Notice All direct actions will be unmasked, + * except for modify header and encap, + * and therefore will be parsed as part of action construct. + * Modify header is always shared in HWS, + * encap is masked such that it will be treated as shared. + * shared actions will be parsed as part of template translation + * and not during action construct. + */ flow_nta_build_template_mask(actions, masks, mask_conf); /* The group in the attribute translation was done in advance. */ ret = __translate_group(dev, attr, external, attr->group, &src_group, error); @@ -12587,7 +12639,6 @@ flow_hw_translate_flow_actions(struct rte_eth_dev *dev, if (!table) return rte_flow_error_set(error, ENOMEM, RTE_FLOW_ERROR_TYPE_ACTION, actions, "Failed to allocate dummy table"); - /* Notice All actions will be unmasked. */ at = __flow_hw_actions_template_create(dev, &template_attr, actions, masks, true, error); if (!at) { ret = -rte_errno; -- 2.21.0