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 E999D431D5 for ; Sun, 22 Oct 2023 16:24:22 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E2CAE402E9; Sun, 22 Oct 2023 16:24:22 +0200 (CEST) Received: from NAM04-MW2-obe.outbound.protection.outlook.com (mail-mw2nam04on2047.outbound.protection.outlook.com [40.107.101.47]) by mails.dpdk.org (Postfix) with ESMTP id 0F6A4402C5 for ; Sun, 22 Oct 2023 16:24:21 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MPtAxSnAjs7NAICvh0YQHLs49fH4HuxVACdBAWOshBuB5BilaFbJh1d3cz+tN/l0wXlh762G5LIAWVFSUEqOey/6tmzhzdo+ETsuQxrK4fy1RFWvrOXR1mnHbmmIqBy29SBAKiOb4U47ITh4WuAaRceDfEK9WsQkQ4oYAP/9wwmFNOwO6Nw+ppunsv4dBUkfG6FtjE/wQA8hcRKv4/QqgALkLlQ787ost6BeK/ynXs6J1R89eWIZxLSCrHihIeFgEfyhzZ1pzXQRez9cZvCZvHvt6A2Sflqpz301XG+3Nx+haKNJ6Ax6aKTWeQaBFQWwUe4U9P0SssdQMYT0RUTfIg== 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=kzc0fpwyAOAIm32Q2H7S53m/Xrb1D8rz1xMH78AR7XE=; b=kv7B44bRg3r13InvJsLf4RpogEYsDBt52eFm20fY+uktIxFj4DCAnTK7Ck2XWUMLBYf2Se87tqvatRlZF97Kw2fEFG0cHp3A87i9xTZnrNLqvkggTPkN6cj6UEPQImNZ9OV4uO+DWxwlLHQ+fYfEszQU0oPv1QXCPs0r3gHg51l7f3SRt/wdX778QCbtH10IYqZj8ZY4H0odFGTVhDifIEgFN26Q6smCKIlCtavfG/FH6rKuxC5jB17JzqL/+gvmxNbqL1XjPgos7IXF0wNOUO8WdkDg5gHaZqzmjmfUn7UVgSqiWNeJBtH+GBZ8o37gkl0on4dfcrojZ1EVoi3E+Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=huawei.com 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 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=kzc0fpwyAOAIm32Q2H7S53m/Xrb1D8rz1xMH78AR7XE=; b=oJNBRR+9Zj5+j9VroVtNeQvBvUee0FkrGBlxi3IUR4bL4Gx1RdgG14bC9Mh+miXN14WxxW+jQy3Ru9J2TPxZWCgq8UXhBBJ0UD8TV+BYPa9Rux2P5DDvSAFFefSwxff9QmutZq3v7I7s7H8EeukLyWSSt0jTbDNkd9ksyoI07sg0PuulROE3qpTIYFMhZTYU0jh0Me1grTXUXvQRD2niX16myfRRdHiKVJgas9Q4L1Kfo1TyvhC7iC03XLiiV4N6pTBMVQM3rleRI7sP3muNz5pY7fYOA1aaQl+1CRIwfTSM/mAMcxKtKkxzNhA0dBzvDblChriuYPgL0yvOXas7kA== Received: from MW4PR03CA0039.namprd03.prod.outlook.com (2603:10b6:303:8e::14) by DS0PR12MB8343.namprd12.prod.outlook.com (2603:10b6:8:fd::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6907.26; Sun, 22 Oct 2023 14:24:17 +0000 Received: from CO1PEPF000042AA.namprd03.prod.outlook.com (2603:10b6:303:8e:cafe::15) by MW4PR03CA0039.outlook.office365.com (2603:10b6:303:8e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6907.31 via Frontend Transport; Sun, 22 Oct 2023 14:24:16 +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 CO1PEPF000042AA.mail.protection.outlook.com (10.167.243.39) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6933.15 via Frontend Transport; Sun, 22 Oct 2023 14:24:16 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) 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.986.41; Sun, 22 Oct 2023 07:24:06 -0700 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; Sun, 22 Oct 2023 07:24:05 -0700 From: Xueming Li To: Chengwen Feng CC: Dongdong Liu , dpdk stable Subject: patch 'net/hns3: fix traffic management thread safety' has been queued to stable release 22.11.4 Date: Sun, 22 Oct 2023 22:20:42 +0800 Message-ID: <20231022142250.10324-14-xuemingl@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20231022142250.10324-1-xuemingl@nvidia.com> References: <20231022142250.10324-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: CO1PEPF000042AA:EE_|DS0PR12MB8343:EE_ X-MS-Office365-Filtering-Correlation-Id: c3cddad5-d359-425b-860f-08dbd30a9294 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2ifzLe+R6/fNZuZ4rnpIRRWkK8YWm5RkiqmO7+cmCLv2nnfLgXfxFZEcU45zd0T+7GWadg63cX4XebYhPruJMME6wvKODENoYGtBF4LG4l0sTrA0U4f191CyRD53UORYRAA3sW/g/vYPYTbwZqHW1iWVZmGf1lA7M8vsMIWj4QJqLCTwO8HB6bQiR8RJPzXaR+AJ+4NBxtvqB6kySfGxM2/G0j9/ftooCWWEdMVsjqv3FkbyWTESLn9QRKLckUtpNpPariH9RYUGHsrOnoTWySiHO2W32LPWBzMWQQpxEPdRdpSQwrGERBDGUBqAP06uRWAxCVUKzHXNjH3r/1ivQrZve8xHofGPKf7JvyYfQqt+XG6YkA+FCVMeHaaQ7RNhvpdDwXeJJYjMkVq9zsshqFFNvYzGM0vCHje+S1tGfWGMnwSNFcrZF6H4FMs/XK79FUDk0vU6zgBSYLLuInjfXIXV8zNfFRwKTXDkJfVDpgTsXrFmF19T0sT39GuZOkhjlK8K95UdKnMpf6GQw6oBYgXZfJwvextnLQD8UgNGmznWV7IMcoytpGOuxTp+0i9T+TBCaRZspV3W5OEEV7f2p4imjcnR0yCbBTDrqRg4EZrS1Ym+GpL0yeyf4yiObwRO2iuWbXDWG+VkmuECTY6eStP1UKhUxoolrEm5XFVPHG4tybbOy9N3oXkjn9lKbPXWNCgVMD/zAliBYnk4ZOAROe8AsSpuTqiGnO3DW2zhWZlAXC/Jr4A+XUVsgd4URMbkFOrMjaZh3UZFbabCs73c4YFPRFSGZDjncZ30G4GFoxshlUDvZ4iF+ksjnLlRQflN 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)(4636009)(376002)(39850400004)(136003)(396003)(346002)(230922051799003)(64100799003)(451199024)(186009)(82310400011)(1800799009)(36840700001)(46966006)(40470700004)(40460700003)(55016003)(47076005)(41300700001)(2906002)(36756003)(5660300002)(4001150100001)(4326008)(8676002)(86362001)(356005)(26005)(426003)(7696005)(83380400001)(1076003)(6286002)(7636003)(336012)(36860700001)(2616005)(53546011)(16526019)(82740400003)(40480700001)(8936002)(6666004)(966005)(478600001)(6916009)(70586007)(70206006)(54906003)(316002)(21314003); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2023 14:24:16.3679 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c3cddad5-d359-425b-860f-08dbd30a9294 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: CO1PEPF000042AA.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB8343 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 11/15/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=6961856e847409f1a18cc0e7c1f15411acf596bd Thanks. Xueming Li --- >From 6961856e847409f1a18cc0e7c1f15411acf596bd Mon Sep 17 00:00:00 2001 From: Chengwen Feng Date: Sat, 5 Aug 2023 16:36:26 +0800 Subject: [PATCH] net/hns3: fix traffic management thread safety Cc: Xueming Li [ upstream commit 69901040975bff8a38edfc47aee727cadc87d356 ] The driver-related TM (traffic management) info is implemented through the linked list. The following threads are involved in the read and write of the TM info: 1. main thread: invokes the rte_tm_xxx() API family to modify or read. 2. interrupt thread: will read TM info in reset recover process. 3. telemetry/proc-info thread: invoke rte_eth_dev_priv_dump() API to read TM info. Currently, thread safety protection of TM info is implemented only in the following operations: 1. some of the rte_tm_xxx() API's implementation. 2. reset recover process. Thread safety risks may exist in other scenarios, so fix by: 1. make sure all the rte_tm_xxx() API's implementations protected by hw.lock. 2. make sure rte_eth_dev_priv_dump() API's implementation protected by hw.lock. Fixes: c09c7847d892 ("net/hns3: support traffic management") Fixes: e4cfe6bb9114 ("net/hns3: dump TM configuration info") Signed-off-by: Chengwen Feng Signed-off-by: Dongdong Liu --- drivers/net/hns3/hns3_dump.c | 8 +- drivers/net/hns3/hns3_tm.c | 173 ++++++++++++++++++++++++++++++----- 2 files changed, 157 insertions(+), 24 deletions(-) diff --git a/drivers/net/hns3/hns3_dump.c b/drivers/net/hns3/hns3_dump.c index ae62bb56c8..4cee779a78 100644 --- a/drivers/net/hns3/hns3_dump.c +++ b/drivers/net/hns3/hns3_dump.c @@ -914,6 +914,8 @@ hns3_eth_dev_priv_dump(struct rte_eth_dev *dev, FILE *file) struct hns3_adapter *hns = dev->data->dev_private; struct hns3_hw *hw = &hns->hw; + rte_spinlock_lock(&hw->lock); + hns3_get_device_basic_info(file, dev); hns3_get_dev_feature_capability(file, hw); hns3_get_rxtx_queue_info(file, dev); @@ -923,8 +925,10 @@ hns3_eth_dev_priv_dump(struct rte_eth_dev *dev, FILE *file) * VF only supports dumping basic info, feature capability and queue * info. */ - if (hns->is_vf) + if (hns->is_vf) { + rte_spinlock_unlock(&hw->lock); return 0; + } hns3_get_dev_mac_info(file, hns); hns3_get_vlan_config_info(file, hw); @@ -932,6 +936,8 @@ hns3_eth_dev_priv_dump(struct rte_eth_dev *dev, FILE *file) hns3_get_tm_conf_info(file, dev); hns3_get_flow_ctrl_info(file, dev); + rte_spinlock_unlock(&hw->lock); + return 0; } diff --git a/drivers/net/hns3/hns3_tm.c b/drivers/net/hns3/hns3_tm.c index e1089b6bd0..67402a700f 100644 --- a/drivers/net/hns3/hns3_tm.c +++ b/drivers/net/hns3/hns3_tm.c @@ -1081,21 +1081,6 @@ fail_clear: return -EINVAL; } -static int -hns3_tm_hierarchy_commit_wrap(struct rte_eth_dev *dev, - int clear_on_fail, - struct rte_tm_error *error) -{ - struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private); - int ret; - - rte_spinlock_lock(&hw->lock); - ret = hns3_tm_hierarchy_commit(dev, clear_on_fail, error); - rte_spinlock_unlock(&hw->lock); - - return ret; -} - static int hns3_tm_node_shaper_do_update(struct hns3_hw *hw, uint32_t node_id, @@ -1195,6 +1180,148 @@ hns3_tm_node_shaper_update(struct rte_eth_dev *dev, return 0; } +static int +hns3_tm_capabilities_get_wrap(struct rte_eth_dev *dev, + struct rte_tm_capabilities *cap, + struct rte_tm_error *error) +{ + struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private); + int ret; + + rte_spinlock_lock(&hw->lock); + ret = hns3_tm_capabilities_get(dev, cap, error); + rte_spinlock_unlock(&hw->lock); + + return ret; +} + +static int +hns3_tm_shaper_profile_add_wrap(struct rte_eth_dev *dev, + uint32_t shaper_profile_id, + struct rte_tm_shaper_params *profile, + struct rte_tm_error *error) +{ + struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private); + int ret; + + rte_spinlock_lock(&hw->lock); + ret = hns3_tm_shaper_profile_add(dev, shaper_profile_id, profile, error); + rte_spinlock_unlock(&hw->lock); + + return ret; +} + +static int +hns3_tm_shaper_profile_del_wrap(struct rte_eth_dev *dev, + uint32_t shaper_profile_id, + struct rte_tm_error *error) +{ + struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private); + int ret; + + rte_spinlock_lock(&hw->lock); + ret = hns3_tm_shaper_profile_del(dev, shaper_profile_id, error); + rte_spinlock_unlock(&hw->lock); + + return ret; +} + +static int +hns3_tm_node_add_wrap(struct rte_eth_dev *dev, uint32_t node_id, + uint32_t parent_node_id, uint32_t priority, + uint32_t weight, uint32_t level_id, + struct rte_tm_node_params *params, + struct rte_tm_error *error) +{ + struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private); + int ret; + + rte_spinlock_lock(&hw->lock); + ret = hns3_tm_node_add(dev, node_id, parent_node_id, priority, + weight, level_id, params, error); + rte_spinlock_unlock(&hw->lock); + + return ret; +} + +static int +hns3_tm_node_delete_wrap(struct rte_eth_dev *dev, + uint32_t node_id, + struct rte_tm_error *error) +{ + struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private); + int ret; + + rte_spinlock_lock(&hw->lock); + ret = hns3_tm_node_delete(dev, node_id, error); + rte_spinlock_unlock(&hw->lock); + + return ret; +} + +static int +hns3_tm_node_type_get_wrap(struct rte_eth_dev *dev, + uint32_t node_id, + int *is_leaf, + struct rte_tm_error *error) +{ + struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private); + int ret; + + rte_spinlock_lock(&hw->lock); + ret = hns3_tm_node_type_get(dev, node_id, is_leaf, error); + rte_spinlock_unlock(&hw->lock); + + return ret; +} + +static int +hns3_tm_level_capabilities_get_wrap(struct rte_eth_dev *dev, + uint32_t level_id, + struct rte_tm_level_capabilities *cap, + struct rte_tm_error *error) +{ + struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private); + int ret; + + rte_spinlock_lock(&hw->lock); + ret = hns3_tm_level_capabilities_get(dev, level_id, cap, error); + rte_spinlock_unlock(&hw->lock); + + return ret; +} + +static int +hns3_tm_node_capabilities_get_wrap(struct rte_eth_dev *dev, + uint32_t node_id, + struct rte_tm_node_capabilities *cap, + struct rte_tm_error *error) +{ + struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private); + int ret; + + rte_spinlock_lock(&hw->lock); + ret = hns3_tm_node_capabilities_get(dev, node_id, cap, error); + rte_spinlock_unlock(&hw->lock); + + return ret; +} + +static int +hns3_tm_hierarchy_commit_wrap(struct rte_eth_dev *dev, + int clear_on_fail, + struct rte_tm_error *error) +{ + struct hns3_hw *hw = HNS3_DEV_PRIVATE_TO_HW(dev->data->dev_private); + int ret; + + rte_spinlock_lock(&hw->lock); + ret = hns3_tm_hierarchy_commit(dev, clear_on_fail, error); + rte_spinlock_unlock(&hw->lock); + + return ret; +} + static int hns3_tm_node_shaper_update_wrap(struct rte_eth_dev *dev, uint32_t node_id, @@ -1213,14 +1340,14 @@ hns3_tm_node_shaper_update_wrap(struct rte_eth_dev *dev, } static const struct rte_tm_ops hns3_tm_ops = { - .capabilities_get = hns3_tm_capabilities_get, - .shaper_profile_add = hns3_tm_shaper_profile_add, - .shaper_profile_delete = hns3_tm_shaper_profile_del, - .node_add = hns3_tm_node_add, - .node_delete = hns3_tm_node_delete, - .node_type_get = hns3_tm_node_type_get, - .level_capabilities_get = hns3_tm_level_capabilities_get, - .node_capabilities_get = hns3_tm_node_capabilities_get, + .capabilities_get = hns3_tm_capabilities_get_wrap, + .shaper_profile_add = hns3_tm_shaper_profile_add_wrap, + .shaper_profile_delete = hns3_tm_shaper_profile_del_wrap, + .node_add = hns3_tm_node_add_wrap, + .node_delete = hns3_tm_node_delete_wrap, + .node_type_get = hns3_tm_node_type_get_wrap, + .level_capabilities_get = hns3_tm_level_capabilities_get_wrap, + .node_capabilities_get = hns3_tm_node_capabilities_get_wrap, .hierarchy_commit = hns3_tm_hierarchy_commit_wrap, .node_shaper_update = hns3_tm_node_shaper_update_wrap, }; -- 2.25.1 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2023-10-22 22:17:34.948117000 +0800 +++ 0013-net-hns3-fix-traffic-management-thread-safety.patch 2023-10-22 22:17:34.136723700 +0800 @@ -1 +1 @@ -From 69901040975bff8a38edfc47aee727cadc87d356 Mon Sep 17 00:00:00 2001 +From 6961856e847409f1a18cc0e7c1f15411acf596bd Mon Sep 17 00:00:00 2001 @@ -4,0 +5,3 @@ +Cc: Xueming Li + +[ upstream commit 69901040975bff8a38edfc47aee727cadc87d356 ] @@ -28 +30,0 @@ -Cc: stable@dpdk.org @@ -38 +40 @@ -index c0839380ea..67b45e6dc3 100644 +index ae62bb56c8..4cee779a78 100644 @@ -41 +43 @@ -@@ -918,6 +918,8 @@ hns3_eth_dev_priv_dump(struct rte_eth_dev *dev, FILE *file) +@@ -914,6 +914,8 @@ hns3_eth_dev_priv_dump(struct rte_eth_dev *dev, FILE *file) @@ -50 +52 @@ -@@ -927,8 +929,10 @@ hns3_eth_dev_priv_dump(struct rte_eth_dev *dev, FILE *file) +@@ -923,8 +925,10 @@ hns3_eth_dev_priv_dump(struct rte_eth_dev *dev, FILE *file) @@ -62 +64 @@ -@@ -936,6 +940,8 @@ hns3_eth_dev_priv_dump(struct rte_eth_dev *dev, FILE *file) +@@ -932,6 +936,8 @@ hns3_eth_dev_priv_dump(struct rte_eth_dev *dev, FILE *file)