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 2116444145; Mon, 3 Jun 2024 12:57:35 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8306542E9C; Mon, 3 Jun 2024 12:57:21 +0200 (CEST) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2053.outbound.protection.outlook.com [40.107.92.53]) by mails.dpdk.org (Postfix) with ESMTP id 9FE1D42E1C for ; Mon, 3 Jun 2024 12:57:20 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cGQQ47nFpjZhLk1wYVNTKugr7I/Zg2eyeD3I9h621i00CWZ3VaMvxF/SEwaSaBYjxZVfmED6xnbnn1gYVd6tzaOEQUhmN5v9VYrgn5Gk7umUyhbeifp79UB0UoEHLLD+yvxzTvYs90Eu3W8DoQsCkfGHeqCYHmWaOgmbyLOE0BcAJTpdl21zXTux2WVoS4Yf28Vh66hkp2pHz7eHQWP09z9HCKUIIZIhL2YUrF59aDxWIa3TFSs+h/kkg8rFQfCC2Uh84EbUIaRwGxEcDWgKTOwjCQ9UHi2lDp6oJMyhAxNVtnrvOb3xj6kwkMzJRgl5ncb6N8hLF44bsOap4sElkg== 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=y/KTyRL3r8XafRzi+AkVHlWsiAVpwPjPoQN4XdFDh7w=; b=O34xk/wyRm4WWCt5KlEAlkSeD2Y0w1z3aVAc4Nd26aqgPJP0L3Ap9q+ccEgoHUoRlq7CGyrYyDUEoLsmQjC9oEDYNjXF5JwCNZLkjERXmhzx9GmrjHlVYinRRgVNz5fvQweiODFOmq4oTSf2QlGRtLGQFNE+hfxMRGMEjRS6qPlRAZqL7TqVwX8ksHCClZPjZgcmlDLWQ7i+hRWHkIVkho5AaNlMO30DVxVCaHiMxs8f/YTHzh9HG/Uxyq26x1eJ2viTFOUL4h+6yX20GrlKQOoEn2TpdEi8k1jNSe2FStlYvJlxVKl5iaadczcy9kaZI4RBBZKsHXcgr3CGguKXPA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) 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=y/KTyRL3r8XafRzi+AkVHlWsiAVpwPjPoQN4XdFDh7w=; b=KT+IvhHsIOs5MAjiIYl1VESpqhQHw0Z8WYG0bLNwpcoGuC3paG84uPBDlVjVmfsjsrxGRaGoMdtAoFiSCAHtYNEMT2U2g+ve/Yq6ccTkyAXSeDUq5E4WdbHRxxz6eLaqzyvDkpt8S3lqnThJJCVniG7x0eEr0OCgcmeeXd5yw6u8wtsUSpWNjMAIDwVudQoZJteQU/IisbiwwyJh7FgWsFmcW9YILvBAKg3RzEP0osQCmy6I4yPlmQkLOq+zKL6otQDKbKXz7jAwq1VhjtaweJv9JvbvvYaUpFZGGJkvADS4X8SPhkqE8Z/vM/BEl+xYb7DK2KwScZBJS/382ZlStQ== Received: from SJ0PR03CA0252.namprd03.prod.outlook.com (2603:10b6:a03:3a0::17) by PH7PR12MB6417.namprd12.prod.outlook.com (2603:10b6:510:1ff::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7633.17; Mon, 3 Jun 2024 10:57:18 +0000 Received: from SJ1PEPF00002318.namprd03.prod.outlook.com (2603:10b6:a03:3a0:cafe::62) by SJ0PR03CA0252.outlook.office365.com (2603:10b6:a03:3a0::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7633.30 via Frontend Transport; Mon, 3 Jun 2024 10:57:18 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by SJ1PEPF00002318.mail.protection.outlook.com (10.167.242.228) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7633.15 via Frontend Transport; Mon, 3 Jun 2024 10:57:18 +0000 Received: from rnnvmail205.nvidia.com (10.129.68.10) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Mon, 3 Jun 2024 03:57:10 -0700 Received: from rnnvmail204.nvidia.com (10.129.68.6) by rnnvmail205.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Mon, 3 Jun 2024 03:57:10 -0700 Received: from nvidia.com (10.127.8.14) by mail.nvidia.com (10.129.68.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4 via Frontend Transport; Mon, 3 Jun 2024 03:57:07 -0700 From: Maayan Kashani To: CC: , , , Yevgeny Kliteynik , Viacheslav Ovsiienko , Ori Kam , Suanming Mou , Matan Azrad Subject: [PATCH v3 7/7] net/mlx5/hws: bwc - fix deleting action stes Date: Mon, 3 Jun 2024 13:56:34 +0300 Message-ID: <20240603105635.11124-7-mkashani@nvidia.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20240603105635.11124-1-mkashani@nvidia.com> References: <20240602102937.197117-1-mkashani@nvidia.com> <20240603105635.11124-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: SJ1PEPF00002318:EE_|PH7PR12MB6417:EE_ X-MS-Office365-Filtering-Correlation-Id: 9cbd6875-717f-4ab6-8b58-08dc83bbef8f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230031|82310400017|1800799015|376005|36860700004; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?gy/9Kahpl8Ck0sPBeYDb2zUjW4cRIpYAYPlwN5HjOVlUdkjl3G25V+DKa3G3?= =?us-ascii?Q?QcFddYp3RH0M56z+LBR0VDFapUu5TjwqcSREJMIJGVrQCJrJcGG1FqH7NhoD?= =?us-ascii?Q?ltjaaJX+DxLRe9EHS1beH9c+lPlUh0Gs5kOh7rU6XHzHDG5tPvmW1MyOhjjQ?= =?us-ascii?Q?j/zkYktf/UWZeYPivwRnr1qJu+jgZWq3FsDtpizWrfuMF020MkHjwGT2dLof?= =?us-ascii?Q?nyTmDK4Ct3x2TkIHu6f/yM15vI0u+56PL5LIvau8u4ivJ1FU5YeMsx/hNiQh?= =?us-ascii?Q?9StvVLeGpC/qYU5ElekqSQJ0RJuGgEN2mnsUPjZx5AdHOfiCwh14oYg90xzx?= =?us-ascii?Q?BLyk0NhVdTFFkd2SEVY8NyXT2qxPxuZQ7tp1FlPc1t6beg18dV7w6CO+PA5f?= =?us-ascii?Q?cgLwnW9ri/30w19AsWpPV69PKx/nfVKpGtmPCS5B0v1AK25Qll14QJsvLm2v?= =?us-ascii?Q?9eJLd/fnK/FEhuWTvHPGfDt/I3gPeMT25fANrrfkmcOxfKgrvpqcNOyJewjn?= =?us-ascii?Q?T8/3w8mQOF2fB+NMNJliYDZkDArm7FoVIJtmu56RGJkyL9p5SYOF9DMtnHSS?= =?us-ascii?Q?mcH3NWPbvq38F2fWTZ7MUtrIpcW+Xq4nIjoGB9El88j0HDnD/lnOIu3+fcvG?= =?us-ascii?Q?S4ixAW6401PXPoIvkAG1vJ6iLJxLuTxY5i/lzwhn81oaI967201Yyzp4VvN7?= =?us-ascii?Q?koftSbOGOdLwRk9VprXWwF+xomt0oZ/v5wtu4N1kaDy4XfKy9bBpc5p38WUu?= =?us-ascii?Q?rg8ULCuzJ6+nxPi1tAaOdXYOxMI/WUDz/C5UVQ6Tsr9LNPm30GSQVJIEmBRB?= =?us-ascii?Q?BQdVcEArDFX4LB63BBWDXSFywFfmNojiCwPVdMMDl1xhPCQfKEHPIVvCmeML?= =?us-ascii?Q?Iz0ItExl2QiNqsym2w6FCjM29De3CSnsDXZJ0rvtf6kXPaymwEyIyEt1LV0U?= =?us-ascii?Q?hb1wBzPPYiaU1mirpHj5+vlw5RWdlfhiFMsqMg/NWtF6JaHBGbGp5Wd0lEoq?= =?us-ascii?Q?CYreTY4LrFigxSFudO1wdp6hZDeL3Y9hFmoPxQXri/RlnnTobr/q7++VST5B?= =?us-ascii?Q?Oa14c36UNEZTn7CAs+NJspUI04l4LnJ8oDt23Kc/ajc9rezyDJ0NFKO/7AHC?= =?us-ascii?Q?k5oWPHdoEWgRvGbxhzsDJPXErvetjPVauzK8Oh7PY+tT7TQLl4qd9yb7AdBf?= =?us-ascii?Q?ACRc3/560eYOEwNcadLrvctgYOyyLqzvaAPnJQ0ai0Dlw/9gTqgWUZTuVMvY?= =?us-ascii?Q?8MTHROtfmFcMf+zDo4EzyDrf1tBsw+ZcNVCqoXgMYFs2Kpzg+MdXnsW2Fyym?= =?us-ascii?Q?qxi0tPCssTbOW1r9sRGBOn6hkiYVN6AbB90Qdw+7BBoHtnYe4tcLqHaO3DxM?= =?us-ascii?Q?qAwov7aasHaYoVURCNh6QQ0LWlPU?= X-Forefront-Antispam-Report: CIP:216.228.117.160; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge1.nvidia.com; CAT:NONE; SFS:(13230031)(82310400017)(1800799015)(376005)(36860700004); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2024 10:57:18.0740 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9cbd6875-717f-4ab6-8b58-08dc83bbef8f X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.160]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SJ1PEPF00002318.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6417 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 From: Yevgeny Kliteynik If resized rule is deleted, the delete process also includes clearing the rule's resize_info. The problem is, this resize_info contains info on the action STEs that are freed onle when the completion of rule deletion received. This means that resize_info should be freed only after action STEs. This patch separates rule's resize_info saving and clearing into a separate calls. Saving of resize_info is done similar to saving of delete info (same as it was before this patch), and clearing is done only after mlx5dr_rule_free_action_ste_idx. Additional issue that is fixed here is using the right max_stes when calculating which STEs should be freed - max_stes is now saved as part of resize_info. Fixes: 762feceb8294 ("net/mlx5/hws: support resizable matchers") Signed-off-by: Yevgeny Kliteynik --- drivers/net/mlx5/hws/mlx5dr_rule.c | 44 ++++++++++++++++++------------ drivers/net/mlx5/hws/mlx5dr_rule.h | 3 ++ drivers/net/mlx5/hws/mlx5dr_send.c | 8 ++++-- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/drivers/net/mlx5/hws/mlx5dr_rule.c b/drivers/net/mlx5/hws/mlx5dr_rule.c index 550f00a4c1..74abb38163 100644 --- a/drivers/net/mlx5/hws/mlx5dr_rule.c +++ b/drivers/net/mlx5/hws/mlx5dr_rule.c @@ -157,6 +157,9 @@ static void mlx5dr_rule_save_resize_info(struct mlx5dr_rule *rule, struct mlx5dr_send_ste_attr *ste_attr) { + if (likely(!mlx5dr_matcher_is_resizable(rule->matcher))) + return; + rule->resize_info = simple_calloc(1, sizeof(*rule->resize_info)); if (unlikely(!rule->resize_info)) { assert(rule->resize_info); @@ -168,14 +171,16 @@ mlx5dr_rule_save_resize_info(struct mlx5dr_rule *rule, memcpy(rule->resize_info->data_seg, ste_attr->wqe_data, sizeof(rule->resize_info->data_seg)); + rule->resize_info->max_stes = rule->matcher->action_ste.max_stes; rule->resize_info->action_ste_pool = rule->matcher->action_ste.max_stes ? rule->matcher->action_ste.pool : NULL; } -static void mlx5dr_rule_clear_resize_info(struct mlx5dr_rule *rule) +void mlx5dr_rule_clear_resize_info(struct mlx5dr_rule *rule) { - if (rule->resize_info) { + if (unlikely(mlx5dr_matcher_is_resizable(rule->matcher) && + rule->resize_info)) { simple_free(rule->resize_info); rule->resize_info = NULL; } @@ -220,8 +225,6 @@ mlx5dr_rule_save_delete_info(struct mlx5dr_rule *rule, memcpy(&rule->tag.match, ste_attr->wqe_data->tag, MLX5DR_MATCH_TAG_SZ); return; } - - mlx5dr_rule_save_resize_info(rule, ste_attr); } static void @@ -231,11 +234,6 @@ mlx5dr_rule_clear_delete_info(struct mlx5dr_rule *rule) simple_free(rule->tag_ptr); return; } - - if (unlikely(mlx5dr_matcher_is_resizable(rule->matcher))) { - mlx5dr_rule_clear_resize_info(rule); - return; - } } static void @@ -288,19 +286,26 @@ void mlx5dr_rule_free_action_ste_idx(struct mlx5dr_rule *rule) { struct mlx5dr_matcher *matcher = rule->matcher; struct mlx5dr_pool *pool; + uint8_t max_stes; if (rule->action_ste_idx > -1 && !matcher->attr.optimize_using_rule_idx && !mlx5dr_matcher_is_insert_by_idx(matcher)) { struct mlx5dr_pool_chunk ste = {0}; + if (unlikely(mlx5dr_matcher_is_resizable(matcher))) { + /* Free the original action pool if rule was resized */ + max_stes = rule->resize_info->max_stes; + pool = rule->resize_info->action_ste_pool; + } else { + max_stes = matcher->action_ste.max_stes; + pool = matcher->action_ste.pool; + } + /* This release is safe only when the rule match part was deleted */ - ste.order = rte_log2_u32(matcher->action_ste.max_stes); + ste.order = rte_log2_u32(max_stes); ste.offset = rule->action_ste_idx; - /* Free the original action pool if rule was resized */ - pool = mlx5dr_matcher_is_resizable(matcher) ? rule->resize_info->action_ste_pool : - matcher->action_ste.pool; mlx5dr_pool_chunk_free(pool, &ste); } } @@ -442,9 +447,7 @@ static int mlx5dr_rule_create_hws_fw_wqe(struct mlx5dr_rule *rule, /* Send WQEs to FW */ mlx5dr_send_stes_fw(queue, &ste_attr); - /* Backup TAG on the rule for deletion, and save ctrl/data - * segments to be used when resizing the matcher. - */ + /* Backup TAG on the rule for deletion */ mlx5dr_rule_save_delete_info(rule, &ste_attr); mlx5dr_send_engine_inc_rule(queue); @@ -569,8 +572,10 @@ static int mlx5dr_rule_create_hws(struct mlx5dr_rule *rule, /* Backup TAG on the rule for deletion and resize info for * moving rules to a new matcher, only after insertion. */ - if (!is_update) + if (!is_update) { mlx5dr_rule_save_delete_info(rule, &ste_attr); + mlx5dr_rule_save_resize_info(rule, &ste_attr); + } mlx5dr_send_engine_inc_rule(queue); @@ -595,9 +600,12 @@ static void mlx5dr_rule_destroy_failed_hws(struct mlx5dr_rule *rule, /* Rule failed now we can safely release action STEs */ mlx5dr_rule_free_action_ste_idx(rule); - /* Clear complex tag or info that was saved for matcher resizing */ + /* Clear complex tag */ mlx5dr_rule_clear_delete_info(rule); + /* Clear info that was saved for resizing */ + mlx5dr_rule_clear_resize_info(rule); + /* If a rule that was indicated as burst (need to trigger HW) has failed * insertion we won't ring the HW as nothing is being written to the WQ. * In such case update the last WQE and ring the HW with that work diff --git a/drivers/net/mlx5/hws/mlx5dr_rule.h b/drivers/net/mlx5/hws/mlx5dr_rule.h index 33779ade48..3617fd59dd 100644 --- a/drivers/net/mlx5/hws/mlx5dr_rule.h +++ b/drivers/net/mlx5/hws/mlx5dr_rule.h @@ -44,6 +44,7 @@ struct mlx5dr_rule_resize_info { uint32_t rtc_1; uint32_t rule_idx; uint8_t state; + uint8_t max_stes; uint8_t ctrl_seg[MLX5DR_WQE_SZ_GTA_CTRL]; /* Ctrl segment of STE: 48 bytes */ uint8_t data_seg[MLX5DR_WQE_SZ_GTA_DATA]; /* Data segment of STE: 64 bytes */ }; @@ -74,6 +75,8 @@ int mlx5dr_rule_move_hws_add(struct mlx5dr_rule *rule, bool mlx5dr_rule_move_in_progress(struct mlx5dr_rule *rule); +void mlx5dr_rule_clear_resize_info(struct mlx5dr_rule *rule); + int mlx5dr_rule_create_root_no_comp(struct mlx5dr_rule *rule, const struct rte_flow_item items[], uint8_t num_actions, diff --git a/drivers/net/mlx5/hws/mlx5dr_send.c b/drivers/net/mlx5/hws/mlx5dr_send.c index 0120f03a48..3022c50260 100644 --- a/drivers/net/mlx5/hws/mlx5dr_send.c +++ b/drivers/net/mlx5/hws/mlx5dr_send.c @@ -523,9 +523,13 @@ static void mlx5dr_send_engine_update_rule(struct mlx5dr_send_engine *queue, */ priv->rule->status++; *status = RTE_FLOW_OP_SUCCESS; - /* Rule was deleted now we can safely release action STEs */ - if (priv->rule->status == MLX5DR_RULE_STATUS_DELETED) + /* Rule was deleted now we can safely release action STEs + * and clear resize info + */ + if (priv->rule->status == MLX5DR_RULE_STATUS_DELETED) { mlx5dr_rule_free_action_ste_idx(priv->rule); + mlx5dr_rule_clear_resize_info(priv->rule); + } } } } -- 2.25.1