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 E696E45DA6 for ; Mon, 25 Nov 2024 18:24:13 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D270F40B9F; Mon, 25 Nov 2024 18:24:13 +0100 (CET) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2040.outbound.protection.outlook.com [40.107.244.40]) by mails.dpdk.org (Postfix) with ESMTP id 3D23A40B8C; Mon, 25 Nov 2024 18:24:11 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QbeeHoBE7jw6dZ2PcVd1v4vofWKWwuSCo6YzeXTnzbXa9ngIrL6Er8ac40T0TtLz539O557IMYXqVrocEU2GnAEirOswrvpXcjM0L2Cr1fCjUh39DVWCfjCxsFBHDXDKR/hj4ofDFnxtMcNGHxUacSjHrAh4Vx9TZ5CV5RQEi333OXPvqubSvkuinmv2qz1oduvzb41vi0jZfztpK861dJAEmdaDayn+nvGzGgRJb+fvD9O4VNznJdLeXw6M3VQho1/WDWux2T/EFT545po1ZGQsQs6Zzjjt/dwhk7gUb+/pYCaDKp68y/uQJeJiniGME0iiggcVLqHqS36XktvhJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=/9LFp+SjvgKcCBHKazs+6NX6ARufNKs9R0K/2T8jkD0=; b=RyPZ/5ZDVKayiWfVeBFV3MphaRY1zGMt1kuQ5JXn6QuDq+fv5PXSe3oddysIuXd2m7fPBYAJegatSa00ZB9FHsNiItrYMkcZvgDLsIBicNna0yb8gpxM5WPirTYVRJL6xirZwJa+QVLyREK2s7vKZngZoAgLm/wvDBF+Dr9R5poGNbL1dO0y/JifIqPR9Oxhhg7KIu1HDVEwJKsNTUBkPHi74jBVDcYaGC1ic26T3zM4zIQHlXkeOT4p8vfQTRvFqjKjRWVNR3M0+y9DYsAFpO9tjYWKX2+qCp6XEKnwWoHvtuwt24VwfKZimQvBZxSt7X0WjtUzRwmIhLIlfLm6Lw== 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=/9LFp+SjvgKcCBHKazs+6NX6ARufNKs9R0K/2T8jkD0=; b=jtbqQnnkyKvw8ha8OuBBV4WyR2HP1os1ebPWGcv8FCDypX8dc5dYpjvfGU8UJpvzWqbNA8YALxWfIMH21KuFthyezwQ/7S6FJ9wqyd2MXM7xHWCpNDqd7WPMdN4gM3o3anJRnyyydy2bL/obmL7oRHaSrjIgodqTYFzUF0qZtNzWgKFOLA68VVVmEQ1/z63PxlenZfMiKDmilGh9vTlNLd0rbt1F6ghW+Dt3b7KhUflBTlwwJBjFXiz7wAKZtzScHUHTlgzlPEvAdShyoiI594WaOX5DPwEFcSyfFTt2qcqOlYZ9IurJ/kNV8Itg2Z+zd/YmX4gvLCdniobx1/4LfQ== Received: from BN9PR03CA0059.namprd03.prod.outlook.com (2603:10b6:408:fb::34) by DM6PR12MB4388.namprd12.prod.outlook.com (2603:10b6:5:2a9::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8182.21; Mon, 25 Nov 2024 17:24:05 +0000 Received: from CO1PEPF000042AB.namprd03.prod.outlook.com (2603:10b6:408:fb:cafe::3b) by BN9PR03CA0059.outlook.office365.com (2603:10b6:408:fb::34) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8182.20 via Frontend Transport; Mon, 25 Nov 2024 17:24:04 +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 CO1PEPF000042AB.mail.protection.outlook.com (10.167.243.40) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8207.12 via Frontend Transport; Mon, 25 Nov 2024 17:24:04 +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.1544.4; Mon, 25 Nov 2024 09:23:33 -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.1544.4; Mon, 25 Nov 2024 09:23:31 -0800 From: Bing Zhao To: , , , CC: , , , Subject: [PATCH] net/mlx5: fix Rx queue control deref Date: Mon, 25 Nov 2024 19:23:18 +0200 Message-ID: <20241125172318.302560-1-bingz@nvidia.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.126.231.35] X-ClientProxiedBy: rnnvmail203.nvidia.com (10.129.68.9) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CO1PEPF000042AB:EE_|DM6PR12MB4388:EE_ X-MS-Office365-Filtering-Correlation-Id: 7ac334a9-1fa3-4b72-2d68-08dd0d75f5cb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|36860700013|376014|82310400026; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?oAVjol2XVdWoDGI95if7oyO/ff92chdCH36cENigX/aOuCOEOO3Gzi6mvzUN?= =?us-ascii?Q?jdpmg0KuvTVu5NNaCm0bgEUgMwoEUL49QMWftMm4bVpnM/j8U8Ph7ZgqZzs8?= =?us-ascii?Q?fhwVb4WSVvMgFwe4xFMDJE656j2Xav2oDu9c5DLVSIxlj3JVbEh1YKFtlJu2?= =?us-ascii?Q?lNKSbO+x0J8Yk424PmPq1Fyg1txjcHvbXX526zF4VfXZzP6t6LY7UvL87ly0?= =?us-ascii?Q?Eo2pZ6tBvsflAz8rMDNMX8oHSDYdR5bGGy6riXmCeiswZHaVauU+P5mQzcnP?= =?us-ascii?Q?tmMVvhywExcwaXuCeiKoGsMs4xN9kbIuOHp4ggjDuX8vvhJO8LdmPA/VuFO0?= =?us-ascii?Q?ITFPHEE6nW6l9jR6g2xCMujfiMGgAcYKIlwuvu65K9bhL/6f1pqT3Rbkf7f4?= =?us-ascii?Q?JEedEjtMyz0mg879Zh71O9705/XgoiykqjzMyj49zx57EnOjHrTDrTN5h3FR?= =?us-ascii?Q?NvNeGVA3v18Y3RQv+aeofvUh82rHS2NxvAJLvalj+TVfj2+gjSr1Nl4+Ku4i?= =?us-ascii?Q?OgASjhBUkeMp40qmlRSXhvZWYOvfpEL/pBMNWO38UDNr0OYw1L418BjFHtpz?= =?us-ascii?Q?1npCRu0Or172vw/Zlg6F/yBP+s8pZq6JbWKqWGnjzs7uVarK4r9+H8DgfPEj?= =?us-ascii?Q?eUgV6xbzxcX6fY4t2sh75M1hRHkQL0vmk9+T4sU+WdiV/mOFp2fUUpdYD07z?= =?us-ascii?Q?iGsTWG4H4Jm3YjpApTN98hykehAKswxgOoAa7PkNPWGrKIv0i65JQ+etMuON?= =?us-ascii?Q?ChJTcORJTjjpHe3/baH0O9hBHH6Eafxw2PDFq6akA2eGuNo/dRU5tr6hwIpj?= =?us-ascii?Q?Ceiq8+Y1PHt/0uvz1wqGsbUNB8pc+Tqna88klG5mYPrODEOoeokz800vwUV9?= =?us-ascii?Q?P+k3hE6QjybemVf4aPyGFPwBz/Yz8CSccrZnoAR6HQjIzZYyIVjZHMF5Z1IV?= =?us-ascii?Q?RZI8pGjkXwn6pEvsOx60sioYzOsA36DIu6WEj3vTjq2NO9sAiuFX449twPo2?= =?us-ascii?Q?+Mj7fdaxo1/QcsdZQUQLtYGpQP57NDfgsv5eEYyOKh/7gnnvkGVfs0KpN5pf?= =?us-ascii?Q?8NAY8LjHSC1vWTe0UQSZ48WbpCkfaFZLanLG9SMc1i2ey0EL8+t7h5gGzpFT?= =?us-ascii?Q?M7BG23ntPJoSUkBsM4sB+zTl2ycqiVxRuVhmga3ZAAb3glFAGyNiVvFQ5vry?= =?us-ascii?Q?RiPjJXXpZRVGxDRhbvvFD2tYRKfqXvDdst/HCUIHGrUxHV1/PkSK95JPmxFM?= =?us-ascii?Q?hMctyC5jQlD+GhQtRAyGjwgW7Ks51/40Z4qdVpuTWcBKIhGUSsBsrcPKYK5I?= =?us-ascii?Q?AHs3q9BZLJtE7fWqOTtt0efsQAx7v7GUZeZeaOJVT5nCefuYTzb2j8QKWU4K?= =?us-ascii?Q?Jz7agwngK39OXhgbymbHbyZyieogvXedLQdHQUFDIisF0hrJoh3IilqyxC3x?= =?us-ascii?Q?ruO/nqAriZB+qYQ4PMMJ2om2uWz7/R59?= 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:(13230040)(1800799024)(36860700013)(376014)(82310400026); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Nov 2024 17:24:04.0827 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7ac334a9-1fa3-4b72-2d68-08dd0d75f5cb 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: CO1PEPF000042AB.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4388 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 When the Rx queue is shared, only the control structure is shared and the private structure of each Rx queue is still independent. During the port stop stage, the hardware resource will be released, and the memory will be freed in the device close stage. Then the control structure reference count should be decreased when freeing a private structure. In the previous implementation, the decreasing action was wrongly put inside the owners list empty condition. Indeed, they should be in the same level. And since the reference count was set to 1 after the 1st queue is created, when checking the value, it should be subtracted firstly and then check the value. With this commit, the reference calculation and condition checking will be corrected. The shared Rx queues' control structures will be freed successlly to avoid the crash in the port restarting. Fixes: 3c9a82fa6edc ("net/mlx5: fix Rx queue control management") Cc: stable@dpdk.org Signed-off-by: Bing Zhao Acked-by: Dariusz Sosnowski --- drivers/net/mlx5/mlx5_rx.h | 2 +- drivers/net/mlx5/mlx5_rxq.c | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/net/mlx5/mlx5_rx.h b/drivers/net/mlx5/mlx5_rx.h index da7c448948..1a6f174c40 100644 --- a/drivers/net/mlx5/mlx5_rx.h +++ b/drivers/net/mlx5/mlx5_rx.h @@ -157,7 +157,7 @@ struct mlx5_rxq_ctrl { bool is_hairpin; /* Whether RxQ type is Hairpin. */ unsigned int socket; /* CPU socket ID for allocations. */ LIST_ENTRY(mlx5_rxq_ctrl) share_entry; /* Entry in shared RXQ list. */ - RTE_ATOMIC(uint32_t) ctrl_ref; /* Reference counter. */ + RTE_ATOMIC(int32_t) ctrl_ref; /* Reference counter. */ uint32_t share_group; /* Group ID of shared RXQ. */ uint16_t share_qid; /* Shared RxQ ID in group. */ unsigned int started:1; /* Whether (shared) RXQ has been started. */ diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index 0737f60272..126b1970e6 100644 --- a/drivers/net/mlx5/mlx5_rxq.c +++ b/drivers/net/mlx5/mlx5_rxq.c @@ -2268,6 +2268,7 @@ mlx5_rxq_release(struct rte_eth_dev *dev, uint16_t idx) struct mlx5_rxq_priv *rxq; struct mlx5_rxq_ctrl *rxq_ctrl; uint32_t refcnt; + int32_t ctrl_ref; if (priv->rxq_privs == NULL) return 0; @@ -2293,15 +2294,14 @@ mlx5_rxq_release(struct rte_eth_dev *dev, uint16_t idx) } } else { /* Refcnt zero, closing device. */ LIST_REMOVE(rxq, owner_entry); - if (LIST_EMPTY(&rxq_ctrl->owners)) { + ctrl_ref = rte_atomic_fetch_sub_explicit(&rxq_ctrl->ctrl_ref, 1, + rte_memory_order_relaxed) - 1; + if (ctrl_ref == 1 && LIST_EMPTY(&rxq_ctrl->owners)) { if (!rxq_ctrl->is_hairpin) mlx5_mr_btree_free (&rxq_ctrl->rxq.mr_ctrl.cache_bh); - if (rte_atomic_fetch_sub_explicit(&rxq_ctrl->ctrl_ref, 1, - rte_memory_order_relaxed) == 1) { - LIST_REMOVE(rxq_ctrl, share_entry); - mlx5_free(rxq_ctrl); - } + LIST_REMOVE(rxq_ctrl, share_entry); + mlx5_free(rxq_ctrl); } dev->data->rx_queues[idx] = NULL; mlx5_free(rxq); -- 2.34.1