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 CC865433D8 for ; Mon, 11 Dec 2023 11:19:27 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C202F40ED2; Mon, 11 Dec 2023 11:19:27 +0100 (CET) Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2052.outbound.protection.outlook.com [40.107.243.52]) by mails.dpdk.org (Postfix) with ESMTP id F04AF42D72 for ; Mon, 11 Dec 2023 11:19:25 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fpwBtitHEbj1fMfntp6cx6I3yalPWyfNcEifC1nRIqewy/ZvVtIkqSZtWt0iduSU5EHfZgz3HLJ04KFPYPv30y4uHilDbgig2ZO466wOM936c1ciN7iLqZsZRKzTX4SrWipZ+5PdCf7IKuh0tMvciNhwDNZtllLAcUrDePVhy/8YR0xqpcAyYK4jFc5JLKoQj1hH2j8fVNY0vS73+fys1aNMrgcjjI90cKF8dKKPFCDxNYu77QPikPHxUYYJYdxA8RT7wqKIiuuukQM6JW+zV2Bl3lek0uYwgjUMwBZDi1WuxOrFsxYtoZ3+kJxQwWa6zi6Bn1v9bER5c50szv7/7g== 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=C1uAJI99TNij4I6Zf7PoSEAzjyDUfJFN84Dcc4ha53U=; b=gBaHnMCdazhrDw44EjG3KvXM2beT37yD927JHXLfYXUZoq4r1pSaYZ3T4wRtbF3zHDrLbEFo1OpkTk0mQkzU0zWb3H5m2rFTNVSJKQ2Vwj+ohQOU0ETRjxBNmipHFoA8N200apMu2YHoHDIZ2mX6D3IMcIgwtBU1lPOWzO4dBQPjZsxOt08RZbDxFZza+pRkdLHrYhCWG07hj9I7ofh5jupBOUK4LGRrfMFKQ8p9voB6VP/VrFf/silhRW05yCDLPBUJGK4tdfKxwvuOUp/q4Xf7QRvD1qwiNXjr+/8hM4cnbxWdgVdPjkNSrNDgaPXcR/acp3DHojLi1qy6FQfA0A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=intel.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 (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=C1uAJI99TNij4I6Zf7PoSEAzjyDUfJFN84Dcc4ha53U=; b=QwaG16n85dtZrmzQYUhBP5qKXbGuzWum+Ady09sr391pNGokmoJ0gkHaIdJx8YddAVSB5iu9JBwr9f2J3nPlugtqjmfhrt6+5ebJws7zFbmpArUIyVY1nagTyrXbT7TtDh5RbyNDOUztObSF2RgfM9F6FaV2UTqCphoRGb8jG5JtgwNVwXjojyCVKdSsF61wkx0Xn6HdenikmsqPQPKJRPvL41W53g7oJBe57QOnjtgmOObMHzzZi5VUAY/BswuLHBSzvtew0aowBgBHvVxLBj75DxlNFpVHURPo00kPlF+SYWnRab/9rReA/gyYwMiUd+PUoXV50FpHnL3zb8Ywow== Received: from DS7PR05CA0008.namprd05.prod.outlook.com (2603:10b6:5:3b9::13) by DM4PR12MB5890.namprd12.prod.outlook.com (2603:10b6:8:66::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7068.32; Mon, 11 Dec 2023 10:19:20 +0000 Received: from CY4PEPF0000EE3E.namprd03.prod.outlook.com (2603:10b6:5:3b9:cafe::d5) by DS7PR05CA0008.outlook.office365.com (2603:10b6:5:3b9::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7091.21 via Frontend Transport; Mon, 11 Dec 2023 10:19:20 +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 CY4PEPF0000EE3E.mail.protection.outlook.com (10.167.242.18) 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:19:20 +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:19:06 -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:19:01 -0800 From: Xueming Li To: Mingjin Ye CC: Qi Zhang , dpdk stable Subject: patch 'net/ice: fix crash on closing representor ports' has been queued to stable release 22.11.4 Date: Mon, 11 Dec 2023 18:11:37 +0800 Message-ID: <20231211101226.2122-73-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: CY4PEPF0000EE3E:EE_|DM4PR12MB5890:EE_ X-MS-Office365-Filtering-Correlation-Id: 3d915c33-f707-44c6-2a05-08dbfa32a396 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bZlg3KFVDdzzoSSqgth2C7Tq5Lii4CvTSC8QTMllWXs8Jxdk1c0xlmMUG8rSs0IfGyrPUIxkcxsk9x5DCzkbpA/dn6bgZZfooAJ5a/L7I9vk3baQBQwGT1nG/Xkm5qHUbSuZBLMshzXGLPQMFPe+56926JAwS2RF/izYqgWIjczcnvIckP6H8heMJZDl3zngn28lq5M8J+TtscnFfWjIv51eLO9vDHYm9tG304NFumnBh1FbL1txtSErQMM5uaPi2tZc14YJPjyqVNLIXWu6sAIHnO/MOlflnK3Vrvdz5W+0+gFcoxW4kZzpy8ZaJLwrDennEis8l7RDcev/LSUIBMZSpV11jOjJzBTlWfAF9GXClR4JyY6+wLkl1eH9/w7kNLsCiG0yPAErl2FSA6MnoVb6MKlXp6R9mm1RrIOxCq3/cdz1LtJI3vpufh7JcdmLUMJAUHoKfyJX80WxzfZTVMkSYWHwHlSpEJ62il3muc7YbLrbAoRYNqNyZGp9N7/WV7Lkxjc/we3D9Oij4UXE/9MNMKuOYwma7VyqUn2MCE8wkATbBJvJl3+Ez7ILLa7Pa2kvQ3EbWkYW6nE3Nj/p/Ou11JOgrNHGqGQzxSwpGAv3Xq9JNYjE1cYunpNju5o8cKv64bvMxMQEGyq66L8Q5+kMnyJmEB4A9dWuBft+3gqx+r9fY8rO0n/OtLyNivSzmxcCAHRWr/ME2H0M4qUYBFGdhojMWGudHXlJUGTplmjM/k4MWqizVVTpGYknR+EQIlMWAspycVAnAmNQ0RKb+A== 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)(396003)(39860400002)(136003)(346002)(376002)(230922051799003)(64100799003)(1800799012)(82310400011)(186009)(451199024)(46966006)(36840700001)(40470700004)(4001150100001)(6666004)(7696005)(2906002)(6916009)(53546011)(70586007)(54906003)(70206006)(356005)(7636003)(36756003)(86362001)(316002)(8676002)(8936002)(4326008)(5660300002)(40480700001)(966005)(478600001)(40460700003)(55016003)(41300700001)(36860700001)(47076005)(82740400003)(6286002)(26005)(336012)(426003)(1076003)(2616005)(83380400001)(16526019); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Dec 2023 10:19:20.1487 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3d915c33-f707-44c6-2a05-08dbfa32a396 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: CY4PEPF0000EE3E.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB5890 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=0d7ea280feeceeb6add4abfbaf85615b0134180a Thanks. Xueming Li --- >From 0d7ea280feeceeb6add4abfbaf85615b0134180a Mon Sep 17 00:00:00 2001 From: Mingjin Ye Date: Wed, 8 Nov 2023 11:39:34 +0000 Subject: [PATCH] net/ice: fix crash on closing representor ports Cc: Xueming Li [ upstream commit 1d704031642926688c453331b13690a4151e5276 ] The data resource in struct rte_eth_dev is cleared and points to NULL when the DCF port is closed. If the DCF representor port is closed after the DCF port is closed, a segmentation fault occurs because the representor port accesses the data resource released by the DCF port. This patch fixes this issue by synchronizing the state of DCF ports and representor ports to the peer in real time when their state changes. Fixes: c7e1a1a3bfeb ("net/ice: refactor DCF VLAN handling") Signed-off-by: Mingjin Ye Acked-by: Qi Zhang --- drivers/net/ice/ice_dcf_ethdev.c | 30 ++++++++++++++-- drivers/net/ice/ice_dcf_ethdev.h | 3 ++ drivers/net/ice/ice_dcf_vf_representor.c | 46 ++++++++++++++++++++++-- 3 files changed, 73 insertions(+), 6 deletions(-) diff --git a/drivers/net/ice/ice_dcf_ethdev.c b/drivers/net/ice/ice_dcf_ethdev.c index 978133854c..223fa39f33 100644 --- a/drivers/net/ice/ice_dcf_ethdev.c +++ b/drivers/net/ice/ice_dcf_ethdev.c @@ -1597,6 +1597,26 @@ ice_dcf_free_repr_info(struct ice_dcf_adapter *dcf_adapter) } } +int +ice_dcf_handle_vf_repr_close(struct ice_dcf_adapter *dcf_adapter, + uint16_t vf_id) +{ + struct ice_dcf_repr_info *vf_rep_info; + + if (dcf_adapter->num_reprs >= vf_id) { + PMD_DRV_LOG(ERR, "Invalid VF id: %d", vf_id); + return -1; + } + + if (!dcf_adapter->repr_infos) + return 0; + + vf_rep_info = &dcf_adapter->repr_infos[vf_id]; + vf_rep_info->vf_rep_eth_dev = NULL; + + return 0; +} + static int ice_dcf_init_repr_info(struct ice_dcf_adapter *dcf_adapter) { @@ -1620,11 +1640,10 @@ ice_dcf_dev_close(struct rte_eth_dev *dev) if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; + ice_dcf_vf_repr_notify_all(adapter, false); (void)ice_dcf_dev_stop(dev); ice_free_queues(dev); - - ice_dcf_free_repr_info(adapter); ice_dcf_uninit_parent_adapter(dev); ice_dcf_uninit_hw(dev, &adapter->real_hw); @@ -1814,7 +1833,7 @@ ice_dcf_dev_reset(struct rte_eth_dev *dev) ice_dcf_reset_hw(dev, hw); } - ret = ice_dcf_dev_uninit(dev); + ret = ice_dcf_dev_close(dev); if (ret) return ret; @@ -1919,12 +1938,17 @@ ice_dcf_dev_init(struct rte_eth_dev *eth_dev) ice_dcf_stats_reset(eth_dev); dcf_config_promisc(adapter, false, false); + ice_dcf_vf_repr_notify_all(adapter, true); + return 0; } static int ice_dcf_dev_uninit(struct rte_eth_dev *eth_dev) { + struct ice_dcf_adapter *adapter = eth_dev->data->dev_private; + + ice_dcf_free_repr_info(adapter); ice_dcf_dev_close(eth_dev); return 0; diff --git a/drivers/net/ice/ice_dcf_ethdev.h b/drivers/net/ice/ice_dcf_ethdev.h index 4baaec4b8b..6dcbaac5eb 100644 --- a/drivers/net/ice/ice_dcf_ethdev.h +++ b/drivers/net/ice/ice_dcf_ethdev.h @@ -60,6 +60,7 @@ struct ice_dcf_vf_repr { struct rte_ether_addr mac_addr; uint16_t switch_domain_id; uint16_t vf_id; + bool dcf_valid; struct ice_dcf_vlan outer_vlan_info; /* DCF always handle outer VLAN */ }; @@ -80,6 +81,8 @@ int ice_dcf_vf_repr_init(struct rte_eth_dev *vf_rep_eth_dev, void *init_param); int ice_dcf_vf_repr_uninit(struct rte_eth_dev *vf_rep_eth_dev); int ice_dcf_vf_repr_init_vlan(struct rte_eth_dev *vf_rep_eth_dev); void ice_dcf_vf_repr_stop_all(struct ice_dcf_adapter *dcf_adapter); +void ice_dcf_vf_repr_notify_all(struct ice_dcf_adapter *dcf_adapter, bool valid); +int ice_dcf_handle_vf_repr_close(struct ice_dcf_adapter *dcf_adapter, uint16_t vf_id); bool ice_dcf_adminq_need_retry(struct ice_adapter *ad); #endif /* _ICE_DCF_ETHDEV_H_ */ diff --git a/drivers/net/ice/ice_dcf_vf_representor.c b/drivers/net/ice/ice_dcf_vf_representor.c index b9fcfc80ad..af281f069a 100644 --- a/drivers/net/ice/ice_dcf_vf_representor.c +++ b/drivers/net/ice/ice_dcf_vf_representor.c @@ -50,9 +50,28 @@ ice_dcf_vf_repr_dev_stop(struct rte_eth_dev *dev) return 0; } +static void +ice_dcf_vf_repr_notify_one(struct rte_eth_dev *dev, bool valid) +{ + struct ice_dcf_vf_repr *repr = dev->data->dev_private; + + repr->dcf_valid = valid; +} + static int ice_dcf_vf_repr_dev_close(struct rte_eth_dev *dev) { + struct ice_dcf_vf_repr *repr = dev->data->dev_private; + struct ice_dcf_adapter *dcf_adapter; + int err; + + if (repr->dcf_valid) { + dcf_adapter = repr->dcf_eth_dev->data->dev_private; + err = ice_dcf_handle_vf_repr_close(dcf_adapter, repr->vf_id); + if (err) + PMD_DRV_LOG(ERR, "VF representor invalid"); + } + return ice_dcf_vf_repr_uninit(dev); } @@ -111,14 +130,15 @@ ice_dcf_vf_repr_link_update(__rte_unused struct rte_eth_dev *ethdev, static __rte_always_inline struct ice_dcf_hw * ice_dcf_vf_repr_hw(struct ice_dcf_vf_repr *repr) { - struct ice_dcf_adapter *dcf_adapter = - repr->dcf_eth_dev->data->dev_private; + struct ice_dcf_adapter *dcf_adapter; - if (!dcf_adapter) { + if (!repr->dcf_valid) { PMD_DRV_LOG(ERR, "DCF for VF representor has been released\n"); return NULL; } + dcf_adapter = repr->dcf_eth_dev->data->dev_private; + return &dcf_adapter->real_hw; } @@ -414,6 +434,7 @@ ice_dcf_vf_repr_init(struct rte_eth_dev *vf_rep_eth_dev, void *init_param) repr->dcf_eth_dev = param->dcf_eth_dev; repr->switch_domain_id = param->switch_domain_id; repr->vf_id = param->vf_id; + repr->dcf_valid = true; repr->outer_vlan_info.port_vlan_ena = false; repr->outer_vlan_info.stripping_ena = false; repr->outer_vlan_info.tpid = RTE_ETHER_TYPE_VLAN; @@ -488,3 +509,22 @@ ice_dcf_vf_repr_stop_all(struct ice_dcf_adapter *dcf_adapter) vf_rep_eth_dev->data->dev_started = 0; } } + +void +ice_dcf_vf_repr_notify_all(struct ice_dcf_adapter *dcf_adapter, bool valid) +{ + uint16_t vf_id; + struct rte_eth_dev *vf_rep_eth_dev; + + if (!dcf_adapter->repr_infos) + return; + + for (vf_id = 0; vf_id < dcf_adapter->real_hw.num_vfs; vf_id++) { + vf_rep_eth_dev = dcf_adapter->repr_infos[vf_id].vf_rep_eth_dev; + + if (!vf_rep_eth_dev) + continue; + + ice_dcf_vf_repr_notify_one(vf_rep_eth_dev, valid); + } +} -- 2.25.1 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2023-12-11 17:56:25.417755000 +0800 +++ 0072-net-ice-fix-crash-on-closing-representor-ports.patch 2023-12-11 17:56:23.077652300 +0800 @@ -1 +1 @@ -From 1d704031642926688c453331b13690a4151e5276 Mon Sep 17 00:00:00 2001 +From 0d7ea280feeceeb6add4abfbaf85615b0134180a Mon Sep 17 00:00:00 2001 @@ -4,0 +5,3 @@ +Cc: Xueming Li + +[ upstream commit 1d704031642926688c453331b13690a4151e5276 ] @@ -17 +19,0 @@ -Cc: stable@dpdk.org @@ -28 +30 @@ -index 29699c2c32..5d845bba31 100644 +index 978133854c..223fa39f33 100644 @@ -31 +33 @@ -@@ -1618,6 +1618,26 @@ ice_dcf_free_repr_info(struct ice_dcf_adapter *dcf_adapter) +@@ -1597,6 +1597,26 @@ ice_dcf_free_repr_info(struct ice_dcf_adapter *dcf_adapter) @@ -58 +60 @@ -@@ -1641,11 +1661,10 @@ ice_dcf_dev_close(struct rte_eth_dev *dev) +@@ -1620,11 +1640,10 @@ ice_dcf_dev_close(struct rte_eth_dev *dev) @@ -71 +73 @@ -@@ -1835,7 +1854,7 @@ ice_dcf_dev_reset(struct rte_eth_dev *dev) +@@ -1814,7 +1833,7 @@ ice_dcf_dev_reset(struct rte_eth_dev *dev) @@ -80 +82 @@ -@@ -1940,12 +1959,17 @@ ice_dcf_dev_init(struct rte_eth_dev *eth_dev) +@@ -1919,12 +1938,17 @@ ice_dcf_dev_init(struct rte_eth_dev *eth_dev)