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 63F9A433D8 for ; Mon, 11 Dec 2023 11:17:26 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5D9BF42D0B; Mon, 11 Dec 2023 11:17:26 +0100 (CET) Received: from NAM02-DM3-obe.outbound.protection.outlook.com (mail-dm3nam02on2053.outbound.protection.outlook.com [40.107.95.53]) by mails.dpdk.org (Postfix) with ESMTP id 9F16340E0F for ; Mon, 11 Dec 2023 11:17:24 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kEShB73B9OFaKUDSbgbuGgA8AyMcnmvjI5bW/Q27hB/nLSkotlMcJDxF3B4SK6uoB2//OYAmu6TyNMbOE1c89009dy7gaZYXxqla5f7mK6DKW49SVrk/r96sm/F7xzgmMs/3SuDIgoPW5nSgts8nRjVDMsWo9BiP0VJKjigdBCOs9srMjKMtmgG92fHfIl3euxraf1cmo+eF4YgkoDeEyeJSr8425KoIodJRrmscjXlOeITkjdMcUCmjAAyy6jJ90rAmV8/5+fNemCDRub8Z+O4RQxf/DDCtdIdCk3jG7kHLHUdRrbAKZL0tSIy3t5wlUMMBruNxIRpYb31TDjs2Uw== 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=TNWrKBKAedLiUYc/UH3EhKw5kFHu7TiNqjqkcNCWEy4=; b=Z1Z7qEo+OKXdyg9UbfmxZ2+Olu1HaZuCtyvgKPg585RkDreJtGE70IxQ6141ImNU2vMjQImSk/cYsXNEHoIlFJYjEQl5+edJoHfDLNEEMYPSWoucg1gl2w6sFpannQp6rg9LvywU19UQEBeBSr7DOcN0vqhZ+HqsucbZhwJeQY7t10UtuFBNeTPxqTxy7zKWRg/QQIDEuIhCCEqvJ1zNWVROaN/P7MXOJPuRkLzOVxWUfv7tIkBva9t2yvjhnq5nYnuswyt2voU5HsZkkLac4NKtkE6y8XWK9mCNysQ7Pgyg/KhotXwLkSfkT+qoMlfc0kF3AnJE9Y3OAIcmf/o2zA== 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=TNWrKBKAedLiUYc/UH3EhKw5kFHu7TiNqjqkcNCWEy4=; b=tIDP7HbQE+gXF8YuNjw90r0yn7KrFuGF8Hn3/z9PQjLcwMPYs3gFef18i0B58HndeAdqVhTclvVgpt9S+WnkafSOLeq/DFdGvMxBGf3r/XMQ2qg7Tmd+GiPuwFp8aC4Jl5qgBwnerRWKo9dGqxsJwKgAFWEXc4UbcWCU434lUwjZg3izqKTM+46JVLAZTmP6B+6TZpAEAvF1J3OG1OhM5XgTmzOEdnz9CzlcDye4GKc9AMZJfiO3MDctFZ6z0NwL+Zg5gsXTYSY3ezs9yK/n3ALiPL1ktn6g8RK9f3o2ox2K3Cz/qoU865wsV+8I08MoPtqQwmvtxhdRgTE1XiaczA== Received: from CY5PR18CA0020.namprd18.prod.outlook.com (2603:10b6:930:5::26) by IA1PR12MB6089.namprd12.prod.outlook.com (2603:10b6:208:3ef::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.33; Mon, 11 Dec 2023 10:17:22 +0000 Received: from CY4PEPF0000EE39.namprd03.prod.outlook.com (2603:10b6:930:5:cafe::87) by CY5PR18CA0020.outlook.office365.com (2603:10b6:930:5::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.33 via Frontend Transport; Mon, 11 Dec 2023 10:17:22 +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 CY4PEPF0000EE39.mail.protection.outlook.com (10.167.242.13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7091.18 via Frontend Transport; Mon, 11 Dec 2023 10:17:21 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) 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.986.41; Mon, 11 Dec 2023 02:17:10 -0800 Received: from nvidia.com (10.126.231.35) by rnnvmail201.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.986.41; Mon, 11 Dec 2023 02:17:08 -0800 From: Xueming Li To: Bing Zhao CC: Matan Azrad , dpdk stable Subject: patch 'net/mlx5: fix flow workspace double free in Windows' has been queued to stable release 22.11.4 Date: Mon, 11 Dec 2023 18:11:17 +0800 Message-ID: <20231211101226.2122-53-xuemingl@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231211101226.2122-1-xuemingl@nvidia.com> References: <20231022142250.10324-1-xuemingl@nvidia.com> <20231211101226.2122-1-xuemingl@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.126.231.35] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EE39:EE_|IA1PR12MB6089:EE_ X-MS-Office365-Filtering-Correlation-Id: 8a8554d9-dded-401d-7f24-08dbfa325d14 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PVpY5EufIiYbVVgLLgfvysJPk8vfIxlnhY237bMcK0wyyo/iVWeNMVB+Gk8fnuNYq8oFuAPdqmKXqOghKI3bj1UXKhaPiLzZCm0XYwBaqbitat+kxzSCLikRltPnhOr7Xf/I5Ht+zm3JXvBQLPa7wTpzK/iOAfJs5XTlTzB6aQuX9GFG8DWL7VGh6f64grecAuHmH30juiIt0A4TpNYXI8IxL3sACvrg9M0NuQ9x3ke9aSqplUGnmb/rGE6wFVBOMnVA42PjDelGohGdbmzoWZlLkKP7/brn9qic+52eJ9lfEqlVDSWYVy+lL8H3dE/HYiHwFYRpHgqdU3y291DBsipqMBN2U/bD8LY1TL/isgB2vop+Wv3PBTzH2T/k4sj/QvVooHKGcydqPS0hea8rtzi+YbAWlxZ6FjTq7ic8D/JZ/xpaZ37XQn0zKZXrARkjjeIyxXqtjzOn4fasftAeeHdPZQmbgKzE/4/M+7XrP4lQykbM3MdqSnFUTp5Z+puBQr0tuY680AQvhX1ipm89BQsPJcw9P+YG/S1OnWfU+IKmKq7mTd//JYmBFRIJjIsr2nAV8KCo6qkxMmpd2Q4KLeQ8If5IhjwAgcnZhJcggVXV1AQfoTLiQJyWC7L3IDOoRpGFoQEkMgE22nELA0whPTbTMHsysxzhiYEaL6FZHvQ8ioDm3Slu7PHZuf9DpFH2ooIuMYfo95yzv2tHgU+zB5ViuqP5RfZtFGm9Uj5Fx1WUAjo1Y/VrfNn4Jd5JeGgpHQqcBUYJm/fZOqi0EM5iYA== 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)(4636009)(376002)(39860400002)(396003)(346002)(136003)(230922051799003)(1800799012)(186009)(82310400011)(64100799003)(451199024)(40470700004)(36840700001)(46966006)(40460700003)(4001150100001)(2906002)(41300700001)(36860700001)(40140700001)(36756003)(86362001)(7636003)(82740400003)(356005)(2616005)(336012)(426003)(16526019)(1076003)(26005)(6286002)(6666004)(478600001)(53546011)(7696005)(47076005)(966005)(83380400001)(6862004)(4326008)(5660300002)(6636002)(316002)(70586007)(37006003)(70206006)(54906003)(8936002)(8676002)(55016003)(40480700001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Dec 2023 10:17:21.8584 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8a8554d9-dded-401d-7f24-08dbfa325d14 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: CY4PEPF0000EE39.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6089 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Hi, FYI, your patch has been queued to stable release 22.11.4 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 12/13/23. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://git.dpdk.org/dpdk-stable/log/?h=22.11-staging This queued commit can be viewed at: https://git.dpdk.org/dpdk-stable/commit/?h=22.11-staging&id=72ab4bf42fac40554a582226ffbb56b02746147f Thanks. Xueming Li --- >From 72ab4bf42fac40554a582226ffbb56b02746147f Mon Sep 17 00:00:00 2001 From: Bing Zhao Date: Thu, 26 Oct 2023 12:14:47 +0300 Subject: [PATCH] net/mlx5: fix flow workspace double free in Windows Cc: Xueming Li [ upstream commit 2ece3b7186b9d22209ac1845f794b91185575a23 ] The thread specific variable workspace indicated by "key_workspace" should be freed explicitly when closing a device. For example, in Linux, when exiting an application, the thread will not exit explicitly and the thread resources will not be deconstructed. The commit to solve this introduced a global list to manage the workspace resources as a garbage collector. It will also be executed in Windows, but the workspaces have already been freed in the function mlx5_flow_os_release_workspace(). With this commit, the garbage collector will only be executed in Linux. The workspace resources management in Windows will remain the same with some stub function when needed. Fixes: dc7c5e0aa905 ("net/mlx5: fix flow workspace destruction") Signed-off-by: Bing Zhao Acked-by: Matan Azrad --- drivers/net/mlx5/linux/mlx5_flow_os.c | 25 +++++++++++++++++++++++++ drivers/net/mlx5/linux/mlx5_flow_os.h | 8 ++++++++ drivers/net/mlx5/mlx5.c | 1 - drivers/net/mlx5/mlx5_flow.c | 25 +------------------------ drivers/net/mlx5/mlx5_flow.h | 1 - drivers/net/mlx5/windows/mlx5_flow_os.c | 6 ++++++ drivers/net/mlx5/windows/mlx5_flow_os.h | 8 ++++++++ 7 files changed, 48 insertions(+), 26 deletions(-) diff --git a/drivers/net/mlx5/linux/mlx5_flow_os.c b/drivers/net/mlx5/linux/mlx5_flow_os.c index b139bb75b9..2767b11708 100644 --- a/drivers/net/mlx5/linux/mlx5_flow_os.c +++ b/drivers/net/mlx5/linux/mlx5_flow_os.c @@ -8,6 +8,10 @@ /* Key of thread specific flow workspace data. */ static rte_thread_key key_workspace; +/* Flow workspace global list head for garbage collector. */ +static struct mlx5_flow_workspace *gc_head; +/* Spinlock for operating flow workspace list. */ +static rte_spinlock_t mlx5_flow_workspace_lock = RTE_SPINLOCK_INITIALIZER; int mlx5_flow_os_validate_item_esp(const struct rte_flow_item *item, @@ -48,6 +52,26 @@ mlx5_flow_os_validate_item_esp(const struct rte_flow_item *item, return 0; } +void +mlx5_flow_os_workspace_gc_add(struct mlx5_flow_workspace *ws) +{ + rte_spinlock_lock(&mlx5_flow_workspace_lock); + ws->gc = gc_head; + gc_head = ws; + rte_spinlock_unlock(&mlx5_flow_workspace_lock); +} + +static void +mlx5_flow_os_workspace_gc_release(void) +{ + while (gc_head) { + struct mlx5_flow_workspace *wks = gc_head; + + gc_head = wks->gc; + flow_release_workspace(wks); + } +} + int mlx5_flow_os_init_workspace_once(void) { @@ -75,4 +99,5 @@ void mlx5_flow_os_release_workspace(void) { rte_thread_key_delete(key_workspace); + mlx5_flow_os_workspace_gc_release(); } diff --git a/drivers/net/mlx5/linux/mlx5_flow_os.h b/drivers/net/mlx5/linux/mlx5_flow_os.h index ed71289322..3f7a94c9ee 100644 --- a/drivers/net/mlx5/linux/mlx5_flow_os.h +++ b/drivers/net/mlx5/linux/mlx5_flow_os.h @@ -526,4 +526,12 @@ mlx5_flow_os_validate_item_esp(const struct rte_flow_item *item, uint8_t target_protocol, struct rte_flow_error *error); +/** + * Add per thread workspace to the global list for garbage collection. + * + * @param[in] ws + * Pointer to the flow workspace. + */ +void mlx5_flow_os_workspace_gc_add(struct mlx5_flow_workspace *ws); + #endif /* RTE_PMD_MLX5_FLOW_OS_H_ */ diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index f787ae91fe..1dfd10e7cb 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -1743,7 +1743,6 @@ mlx5_free_shared_dev_ctx(struct mlx5_dev_ctx_shared *sh) if (LIST_EMPTY(&mlx5_dev_ctx_list)) { mlx5_os_net_cleanup(); mlx5_flow_os_release_workspace(); - mlx5_flow_workspace_gc_release(); } pthread_mutex_unlock(&mlx5_dev_ctx_list_mutex); if (sh->flex_parsers_dv) { diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index ea0a49827f..01b463adec 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -7544,29 +7544,6 @@ flow_release_workspace(void *data) } } -static struct mlx5_flow_workspace *gc_head; -static rte_spinlock_t mlx5_flow_workspace_lock = RTE_SPINLOCK_INITIALIZER; - -static void -mlx5_flow_workspace_gc_add(struct mlx5_flow_workspace *ws) -{ - rte_spinlock_lock(&mlx5_flow_workspace_lock); - ws->gc = gc_head; - gc_head = ws; - rte_spinlock_unlock(&mlx5_flow_workspace_lock); -} - -void -mlx5_flow_workspace_gc_release(void) -{ - while (gc_head) { - struct mlx5_flow_workspace *wks = gc_head; - - gc_head = wks->gc; - flow_release_workspace(wks); - } -} - /** * Get thread specific current flow workspace. * @@ -7623,7 +7600,7 @@ mlx5_flow_push_thread_workspace(void) data = flow_alloc_thread_workspace(); if (!data) return NULL; - mlx5_flow_workspace_gc_add(data); + mlx5_flow_os_workspace_gc_add(data); } else if (!curr->inuse) { data = curr; } else if (curr->next) { diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index 9724b88996..52edc4c961 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -1926,7 +1926,6 @@ struct mlx5_flow_driver_ops { struct mlx5_flow_workspace *mlx5_flow_push_thread_workspace(void); void mlx5_flow_pop_thread_workspace(void); struct mlx5_flow_workspace *mlx5_flow_get_thread_workspace(void); -void mlx5_flow_workspace_gc_release(void); __extension__ struct flow_grp_info { diff --git a/drivers/net/mlx5/windows/mlx5_flow_os.c b/drivers/net/mlx5/windows/mlx5_flow_os.c index 5013e9f012..f907b21ecc 100644 --- a/drivers/net/mlx5/windows/mlx5_flow_os.c +++ b/drivers/net/mlx5/windows/mlx5_flow_os.c @@ -417,6 +417,12 @@ mlx5_flow_os_set_specific_workspace(struct mlx5_flow_workspace *data) return err; } +void +mlx5_flow_os_workspace_gc_add(struct mlx5_flow_workspace *ws) +{ + RTE_SET_USED(ws); +} + int mlx5_flow_os_validate_item_esp(const struct rte_flow_item *item, uint64_t item_flags, diff --git a/drivers/net/mlx5/windows/mlx5_flow_os.h b/drivers/net/mlx5/windows/mlx5_flow_os.h index 1c1c17fc41..856d8ba948 100644 --- a/drivers/net/mlx5/windows/mlx5_flow_os.h +++ b/drivers/net/mlx5/windows/mlx5_flow_os.h @@ -473,4 +473,12 @@ mlx5_flow_os_validate_item_esp(const struct rte_flow_item *item, uint8_t target_protocol, struct rte_flow_error *error); +/** + * Add per thread workspace to the global list for garbage collection. + * + * @param[in] ws + * Pointer to the flow workspace. + */ +void mlx5_flow_os_workspace_gc_add(struct mlx5_flow_workspace *ws); + #endif /* RTE_PMD_MLX5_FLOW_OS_H_ */ -- 2.25.1 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2023-12-11 17:56:24.828112800 +0800 +++ 0052-net-mlx5-fix-flow-workspace-double-free-in-Windows.patch 2023-12-11 17:56:23.037652300 +0800 @@ -1 +1 @@ -From 2ece3b7186b9d22209ac1845f794b91185575a23 Mon Sep 17 00:00:00 2001 +From 72ab4bf42fac40554a582226ffbb56b02746147f Mon Sep 17 00:00:00 2001 @@ -4,0 +5,3 @@ +Cc: Xueming Li + +[ upstream commit 2ece3b7186b9d22209ac1845f794b91185575a23 ] @@ -21 +23,0 @@ -Cc: stable@dpdk.org @@ -101 +103 @@ -index 472e830eb0..66b0d1a005 100644 +index f787ae91fe..1dfd10e7cb 100644 @@ -104 +106 @@ -@@ -1926,7 +1926,6 @@ mlx5_free_shared_dev_ctx(struct mlx5_dev_ctx_shared *sh) +@@ -1743,7 +1743,6 @@ mlx5_free_shared_dev_ctx(struct mlx5_dev_ctx_shared *sh) @@ -113 +115 @@ -index 2d718bbe33..eb6037326f 100644 +index ea0a49827f..01b463adec 100644 @@ -116 +118 @@ -@@ -8184,29 +8184,6 @@ flow_release_workspace(void *data) +@@ -7544,29 +7544,6 @@ flow_release_workspace(void *data) @@ -146 +148 @@ -@@ -8263,7 +8240,7 @@ mlx5_flow_push_thread_workspace(void) +@@ -7623,7 +7600,7 @@ mlx5_flow_push_thread_workspace(void) @@ -156 +158 @@ -index a58866b814..f98bc74c9c 100644 +index 9724b88996..52edc4c961 100644 @@ -159 +161 @@ -@@ -2162,7 +2162,6 @@ struct mlx5_flow_driver_ops { +@@ -1926,7 +1926,6 @@ struct mlx5_flow_driver_ops {