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 15B9D44144; Mon, 3 Jun 2024 10:27:00 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3794842E35; Mon, 3 Jun 2024 10:26:52 +0200 (CEST) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2046.outbound.protection.outlook.com [40.107.94.46]) by mails.dpdk.org (Postfix) with ESMTP id 45F4342DFE for ; Mon, 3 Jun 2024 10:26:49 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QSFDbDna0qxGzOeLcA4At/QEeJL3ltonSHmxSDIHyZBfGCbMM61E1Bv6IePam/ezEJD68zkx1MCgNAnysdZUlZHgcjVpzsqzbrThIjIxxrYn/jUr+djL7IZUg0uW8Jjvq0lC/i0TG+bIL+B5+BgmYOSTQh6OZHZd1M8ljhVdYV9jNz32jzlpy6Ox91gwvAtvE+Ipx3RnytnuchzsY/tJ4XZkM0u0S8FF4xq6pcWuPNT2MqNRfWi0ZLOPwngpjuDpkaAm7cjmrYtrhWuYBWi7kXT9Uz5Nv+80besD8JhF8N//d/u14kHKtXXtrE/1PTN0k6RllwoZn1z1OmLuVZ7z4A== 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=bwV1SKtuXvKhy4wW3+jEEGSYVTt/9RiTcy37fcrHuzlCmetxewAdxCGoV/GJ/dGQjuG6KkyQID2ApzI14nw8/emd9VX2hbwFBtePLbdNTns6rzAbjlvaAnyK0rAQQGM75qLG2664ebkb0fNjvEvwFkFNurq25rLA+hyBUxppSRjsaVP0LO8Y2JdwRNgVfWEw2WedfISE/qVMwmGIau1K7+YbNHD1A4co9B7Z1TODd0APBbxZAij360WlrCjs6DMpvZyPvPX7OnjdTaDXcfzU7OV9gNTHgI2Rwnx643tjLhFik7DEcP10uJ3sHFsF/j6I/Lk7OB5FSxi8Fgux19+jcA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) 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=R26SBSbPN+88Cft/RGagV+zz+e4hrL/7wIVnSt+yuwBt9jdsLRQSOfP8Xe5MU5GSQqToO/LjCUcMpABPDGJpr4VkSLlQym5+ToxCljTlnLHoRxZgnMksbNsZWZhrAcx17fJWubmYKXgSEoaxK2sSCkVy0arYDjS2h4Y1+3hRpN0AKG8bXEu8/mbCViCbpHDdq4O9IAXEVIXcqTde0sJl1Di11sPa/ziSa2pkUDwy51QIBZ9ZjLK4GxTOWOTuXQauP09uxqrsXCfa9sLqrf3lCYMR4m5DL2B9JVmUoh1Z8vWrbn872ifKeyTDW3sybz3fPICVIK3LRsKTNPJ3LiCjTg== Received: from CH5PR04CA0007.namprd04.prod.outlook.com (2603:10b6:610:1f4::7) by PH8PR12MB7112.namprd12.prod.outlook.com (2603:10b6:510:22c::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7611.22; Mon, 3 Jun 2024 08:26:46 +0000 Received: from CH1PEPF0000AD7B.namprd04.prod.outlook.com (2603:10b6:610:1f4:cafe::3f) by CH5PR04CA0007.outlook.office365.com (2603:10b6:610:1f4::7) 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 08:26:46 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) 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.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by CH1PEPF0000AD7B.mail.protection.outlook.com (10.167.244.58) 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 08:26:46 +0000 Received: from rnnvmail205.nvidia.com (10.129.68.10) by mail.nvidia.com (10.129.200.67) 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 01:26:34 -0700 Received: from rnnvmail201.nvidia.com (10.129.68.8) 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 01:26:33 -0700 Received: from nvidia.com (10.127.8.14) by mail.nvidia.com (10.129.68.8) 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 01:26:30 -0700 From: Maayan Kashani To: CC: , , , Yevgeny Kliteynik , Viacheslav Ovsiienko , Ori Kam , Suanming Mou , Matan Azrad Subject: [PATCH v2 32/34] net/mlx5/hws: bwc - fix deleting action stes Date: Mon, 3 Jun 2024 11:26:00 +0300 Message-ID: <20240603082601.4173-7-mkashani@nvidia.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20240603082601.4173-1-mkashani@nvidia.com> References: <20240602102937.197117-1-mkashani@nvidia.com> <20240603082601.4173-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: CH1PEPF0000AD7B:EE_|PH8PR12MB7112:EE_ X-MS-Office365-Filtering-Correlation-Id: d0d9ec83-b98a-432f-1ba1-08dc83a6e81c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230031|376005|1800799015|36860700004|82310400017; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?kuf6PPaktGdI0SiFVeWj5SDOfZMlO6AvTdzHQdD5SHe4LQmxy5CrUb2dc5cZ?= =?us-ascii?Q?eHyf+rLiI/sW9lBEBLQ2PwlEmXlLhXG0GWnOf9MYm2MzsnkOYRgtI5gy8OMW?= =?us-ascii?Q?OmgbJTES2FG7RGxUjX/myKgxRD8vJtAwM9xBzLuz31LpaAosc11TznY7OtdO?= =?us-ascii?Q?SZ/0o0v6f2otsQHNp6Y2erSO6H93CTp93oyeWNZBD9XOKlds4SuEhlb7aTuH?= =?us-ascii?Q?I/fmWqaPYS42EhDo9fT8kFCCFdP+x1mPM3uq/JOAtG6LbZa6KVrJq3SSy4hV?= =?us-ascii?Q?7rXl6fXg6fuJbJCTvXxVr4XIU5+ATOHCFJtA7iF5U0rRnP5rrk3jXVTSrMTE?= =?us-ascii?Q?vd2LRg8XYX7xgCdnriF7SWb5AnIRJN2t9CxYv5KFbWTH+BrXBCPKv2i1Wa/7?= =?us-ascii?Q?vMhq6u3YNrqB8d7cQNrbPct9/XG3GDtV1u4c8Fja3Bg62PkcChEbSk3zG4BV?= =?us-ascii?Q?Gg6BDrt+F7403d/5NQvBBhjBPPklMAqTMR2Adwe7ugQx9Vfj+cbF2YUuiCzD?= =?us-ascii?Q?OCzB1fdTS5PjNK6pZMgTLKKaXuXsQUE0S9AtCogSbQnR+wWxO4Ag3GAOsQ8z?= =?us-ascii?Q?h8Yo2Xf/3ysVfpkK/1cW+nSXG4whCXIhURxK9xTwo1FXO1qx1Jg4RHmAnuT6?= =?us-ascii?Q?RO93u20ZvLX6B+zBMpzqkTGeJuaayKsmJBheg1SRxNDlVsjR7BdwLoJ3+kVU?= =?us-ascii?Q?Jq7eoUQDmsm7nPXpO4Ab2EAUBVzlBxAW8YFgVhix/UkHYvh6BLu0NRQW/GBs?= =?us-ascii?Q?+L0eB0gHxDSnxrwWbrpyFS1iTrfKELXLZpSWA7mY5sL6rMZnkGeQ0LWsS7VU?= =?us-ascii?Q?q+GFsLDCfiNjfxb5boCuG1q3B03eJJ4DFnlPDjfZM/sOHD4zH3imQtWbGSJB?= =?us-ascii?Q?YNLVFA6j5SVzu7VBJrC+m7NIVMY4++WxDFl8N5+eNw0AcufzNup4qzruG7Ty?= =?us-ascii?Q?ksj+2BoW36S9faZ13O2rdrsBiQwh9iB8w6BCqZXeNpkyM6HNkeCnZ8X3PhC8?= =?us-ascii?Q?rpKeNYBejygB255rNlbvNqgqNTXXq75eZhr0fYAPSDLTEtAHdQ4EaIqDOaFv?= =?us-ascii?Q?iFz0UFf+ghvRabu5b+CHOXg4dTOiSE04jCP2exnvxSYeAWgdPpP9xajOPIay?= =?us-ascii?Q?wZeGjhym1NF1ZCYBlBbMSFL1UnwmevhxoMQvbajEglA09RxsdIMIGNC3RMRo?= =?us-ascii?Q?JsSWTizKt7cYbJX74Fxcofns0ch9wS8pC6HqByv/nqzn66lTgsClQe8ATql6?= =?us-ascii?Q?/C6nWm/bPTx7QKmGZWxk5fPr3CBOqzQOYCbjHo60ApO6jhMOpghe77zz9Gwz?= =?us-ascii?Q?jT2WfZTod4Ql91VCBZ3DP5EcMwFzeKM68xPcoC+sDgev7lPo2PqruP0jrPCi?= =?us-ascii?Q?zYv+VcE4TP2CFhCfqXmYqMJi5Hfb?= X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230031)(376005)(1800799015)(36860700004)(82310400017); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jun 2024 08:26:46.0015 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d0d9ec83-b98a-432f-1ba1-08dc83a6e81c 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.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CH1PEPF0000AD7B.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR12MB7112 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