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 F38EA470E5 for ; Thu, 25 Dec 2025 10:23:48 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 52B0640669; Thu, 25 Dec 2025 10:23:33 +0100 (CET) Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010049.outbound.protection.outlook.com [52.101.56.49]) by mails.dpdk.org (Postfix) with ESMTP id 3404D40674 for ; Thu, 25 Dec 2025 10:23:31 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Y/upKxA9dBIXJDbdUvLT/z9pbDpb0rXwJfKNOM7m1OCYv4rkCPf1dZZXh5wVUGbl/wnqUrMB7taZ6J4Z0RKTOUv3jPjEULYx8Nt3BXRxz1LcAODoxAKl6REilnV03UJ6H9uw2NVeO4yGZG8EYSMMHc4p6IOQ1oSn9ArZBXnRKtqBkW15sc7Q7smLufTe2Itqs28T+BT7laWj8nt7EiB2vhAh5y6ZGeyk8k53VgCWLyVxWmKBG8uwKBKKhG+JMWZrqmq//P4F3swPGVrBmUlE7R8g+cGayx0RANMXn58d8bwXYdpq52oUPqQyiBScWpOSyJlhjnCBXRydldW43qrlfw== 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=dKpEqDa77imI1Bcybs9ujFmKj0JhAyafYglhrgdSwXY=; b=soEy4TlsZBOaJLyNtEvenUAvXLAIM4kTIwedXlmPnGhyMechSQkYSGOkZgCh/+EHPh25glCKeZCiPrk9EmCa4Hmu2H5Fgpb3yahnTg4hwKmvam1khoWqRXIf7pR0iDZEsXtu6Goxr0ijpPlAeaexer/DzoFVRFJ8/+Dv0Yj7eocHrioge1jJiIhNz2eN9sQR0w9HTs6+MecUd2PymFtRiKYIBotJDwHQV3wg/FVxNy4kEfbie88QEKWc6YuhK0O96UYpXuQ4KkCP7U3+D8dhU2xW0UG4DFQxhoS0bakfuL2yDYB1R18+UXQtA/pPP/wukUk+q71+i6VO9ywJv3MOOA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.118.233) 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=dKpEqDa77imI1Bcybs9ujFmKj0JhAyafYglhrgdSwXY=; b=bqsK+U0zD2mB/uOnyXwbxaVoH9z5q+39c05DYT3fdJ6evaS/kKl1aTXVuzm5AcrIwITZFbk1kmcsTtHLhag1FbX50+YE5eDVIcaQGTAD3HfODEqSaUIpHwypKYEiVb13iT7gJbiVezyahB9qY+qysx/wQY7YimueamgLAsoIj070TZbjYPVtiOGjdO5vfIcGghCQG9oSLCH7hsf0l7Z/NvLPUQdmc0kGSB0iE0n5covyz/ueiPDOKt6kbjfPzyPEOlqU8vfVu4Ry+nSj7aeUtFTkk+yz7fTIMUbQgyrgNMH9mSqAUfFoq7SKsL0R0r3ObRhLAFuxpzgvoUSbL7AqPA== Received: from BY1P220CA0026.NAMP220.PROD.OUTLOOK.COM (2603:10b6:a03:5c3::17) by SA1PR12MB8986.namprd12.prod.outlook.com (2603:10b6:806:375::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9456.11; Thu, 25 Dec 2025 09:23:26 +0000 Received: from BY1PEPF0001AE1B.namprd04.prod.outlook.com (2603:10b6:a03:5c3:cafe::ab) by BY1P220CA0026.outlook.office365.com (2603:10b6:a03:5c3::17) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9456.12 via Frontend Transport; Thu, 25 Dec 2025 09:23:32 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.118.233) 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.118.233 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.118.233; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.118.233) by BY1PEPF0001AE1B.mail.protection.outlook.com (10.167.242.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9456.9 via Frontend Transport; Thu, 25 Dec 2025 09:23:26 +0000 Received: from drhqmail203.nvidia.com (10.126.190.182) by mail.nvidia.com (10.127.129.6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 25 Dec 2025 01:23:20 -0800 Received: from drhqmail202.nvidia.com (10.126.190.181) by drhqmail203.nvidia.com (10.126.190.182) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Thu, 25 Dec 2025 01:23:19 -0800 Received: from nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend Transport; Thu, 25 Dec 2025 01:23:18 -0800 From: Shani Peretz To: Gregory Etelson CC: Dariusz Sosnowski , dpdk stable Subject: patch 'net/mlx5: fix external queues access' has been queued to stable release 23.11.6 Date: Thu, 25 Dec 2025 11:18:16 +0200 Message-ID: <20251225091938.345892-55-shperetz@nvidia.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251225091938.345892-1-shperetz@nvidia.com> References: <20251221145746.763179-93-shperetz@nvidia.com> <20251225091938.345892-1-shperetz@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: BY1PEPF0001AE1B:EE_|SA1PR12MB8986:EE_ X-MS-Office365-Filtering-Correlation-Id: 23addaa3-6bf1-410e-de9d-08de43974268 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|36860700013|1800799024|82310400026|7053199007|13003099007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?bhaBxMfYSL7YaAz+kfW9JvE4C4VAp6az2jz3ck2Akg9KDW4xGBFW1NYIt8Nd?= =?us-ascii?Q?q1NPgdmlEw6+S+H6kWi3juUv1wt8rNihZJxJXnH3SLC8UckJ/ZOJqITjEzUa?= =?us-ascii?Q?bFoH7KX0IOdBq3s9OEsx/eHlrV0Zm/nbhQr2gs1rFbu01S3qgCNJBg+ahuJN?= =?us-ascii?Q?5fxLu5nj00LujC2IiZkdwU/Guj2D0R+htyYDEBt+fR0mgDGsQ3WFAJ6eAfBp?= =?us-ascii?Q?OWskGsuhltGX/PA3zWT8k+2MyUjvQVHR9qeZ4IbvTJkNi48OUY50eZvnBiQF?= =?us-ascii?Q?yP+t+MjM+TIcYtSmbcVCqY7XTv/Zb2+c1L+exWTFR/tu12jhgzUndo6hd7CD?= =?us-ascii?Q?8CoUfEM7VaNH5YAB1L+noXLjLdjbtEAOHLL8HKicY/Uixe5vRfLwXaKdshv3?= =?us-ascii?Q?mkXo1WHZUDUqRlaeZAsWA4kVGunM9gO8xM14Hyq+B7mSOCERCdQnDaxFdwz0?= =?us-ascii?Q?Y1k9IzMlq1i/kmxFgGgW9WUZJJAjMFUOhe6jZKi/LWiV93vAS4jZvi7qLvXm?= =?us-ascii?Q?/kQpkyiOc+ao+dy//W9wkSUI7i9ng88OAezQhwYeNUGqix+Yun50VlF4rzdf?= =?us-ascii?Q?kdCAPmi/m3bNthwdLDdp8hVSB1/UnKrAoqOyOYs5YypzM/RGKpFx5uGZnxmv?= =?us-ascii?Q?Xh08lJcQphCtWPNHxImGAV3TSsd1/KvIQ0wi9dCj7Q6Spnq6N9tEgA6d3Xi7?= =?us-ascii?Q?9ZMZJ+nAxAf8dKdNDScBGMqEzR8MPnTunJ2Bd2BcZgE5OFM0/U/KPiNe2Pyp?= =?us-ascii?Q?RFtYhgV9eEDJ8GU13vpzIhANbBkr9NQksWRWNY+yb2IhZHvjEXdJ8NX+XX7f?= =?us-ascii?Q?IA4iyjWXGj/7j4g38pEbQb48/tjOM8yCvTNPcgSmuR+56pDUF9DRlvVfiOt/?= =?us-ascii?Q?kwQpx1DWJzLxcB7wbaVe604ZnGuvEsEq3un+gEyar/PRrATt8PaquoLxrap6?= =?us-ascii?Q?HvyBxkusN/sECvLD4sEyMK4YjYmzHRegt0rnmetC1UsoTcogh5qMpqj2EO1n?= =?us-ascii?Q?iOqt9mYWQfBJfyR1pF4VlEh8N+Bi3xT5UyzGP5M7ljHeSbiRq4cik6ulMUQP?= =?us-ascii?Q?akvJDqo9vHkWt48v6Leih6MiBXZmGtW0VbPRv3jc3+uo0MqZy+ALcPtYvXtV?= =?us-ascii?Q?QWrcCbJ7gESeUN9mOMZVf9AKkWPcZLswsSHtwlqbBF1Ui6xeEsB2gbaFlbeA?= =?us-ascii?Q?brWhoMZ4/HxzYlAxel5vlaeil2aMN+hdxDEXOhzoLj9u8VeISKGvlgxYNQik?= =?us-ascii?Q?awdGLCxcWiS9jcCpZMvk8JnG5I87rQPde/4W3X6NR3+vyoCRI8mRGOTWaTtH?= =?us-ascii?Q?K0ltNpn78sMZGpt+XPhG3TuCisl204rjk5u3Lvsd9eKTRXg7X5xKsOx2Eg9M?= =?us-ascii?Q?Hg0YqCgV6RStMYwD6RbQ4WxTTyl51qxyQhP8lB2zww1sNlBieHmaOx7j9aeG?= =?us-ascii?Q?j5wZhMHVqctwAdH10RoJWj8NbKO3H+FT+jBfbD0e6vf6e9cM4PTGECuy5bDy?= =?us-ascii?Q?j9APGNft3p6JeK6ccTOqM0xwayu7NV3wfrsY56Z5IfERAblQuDn5zgYA9XIF?= =?us-ascii?Q?aER1n3NztRdTobZIIFb7zZFdg6FwLEDyC/DZwuqu?= X-Forefront-Antispam-Report: CIP:216.228.118.233; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc7edge2.nvidia.com; CAT:NONE; SFS:(13230040)(376014)(36860700013)(1800799024)(82310400026)(7053199007)(13003099007); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Dec 2025 09:23:26.6307 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 23addaa3-6bf1-410e-de9d-08de43974268 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.118.233]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BY1PEPF0001AE1B.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB8986 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 23.11.6 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/30/25. 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://github.com/shanipr/dpdk-stable This queued commit can be viewed at: https://github.com/shanipr/dpdk-stable/commit/4b7f438400546fae4be2fc97d7889ba23d4f650d Thanks. Shani --- >From 4b7f438400546fae4be2fc97d7889ba23d4f650d Mon Sep 17 00:00:00 2001 From: Gregory Etelson Date: Tue, 18 Nov 2025 11:59:00 +0200 Subject: [PATCH] net/mlx5: fix external queues access [ upstream commit d524b58819b46ea47d02338204d24c2f2ba29ee2 ] mlx5_ext_rxq_get() did not return NULL value if query index was not referencing external queue. As a result, calling functions did not expect the NULL on return. External Rx queue: - In mlx5_ext_rxq_get() remove assert and return NULL if a queue index does not point to a valid external queue. - In mlx5_ext_rxq_verify() validate that probed queue index references a valid extern queue. Fixes: 311b17e669ab ("net/mlx5: support queue/RSS actions for external Rx queue") Cc: stable@dpdk.org Signed-off-by: Gregory Etelson Acked-by: Dariusz Sosnowski --- drivers/net/mlx5/mlx5_devx.c | 5 +++++ drivers/net/mlx5/mlx5_rxq.c | 17 ++++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/drivers/net/mlx5/mlx5_devx.c b/drivers/net/mlx5/mlx5_devx.c index be9dbf0467..92e4e09002 100644 --- a/drivers/net/mlx5/mlx5_devx.c +++ b/drivers/net/mlx5/mlx5_devx.c @@ -684,6 +684,11 @@ mlx5_devx_ind_table_create_rqt_attr(struct rte_eth_dev *dev, struct mlx5_external_rxq *ext_rxq = mlx5_ext_rxq_get(dev, queues[i]); + if (ext_rxq == NULL) { + rte_errno = EINVAL; + mlx5_free(rqt_attr); + return NULL; + } rqt_attr->rq_list[i] = ext_rxq->hw_id; } else { struct mlx5_rxq_priv *rxq = diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index e66fe8e310..33dfda185b 100644 --- a/drivers/net/mlx5/mlx5_rxq.c +++ b/drivers/net/mlx5/mlx5_rxq.c @@ -2162,7 +2162,8 @@ mlx5_ext_rxq_ref(struct rte_eth_dev *dev, uint16_t idx) { struct mlx5_external_rxq *rxq = mlx5_ext_rxq_get(dev, idx); - __atomic_fetch_add(&rxq->refcnt, 1, __ATOMIC_RELAXED); + if (rxq != NULL) + __atomic_fetch_add(&rxq->refcnt, 1, __ATOMIC_RELAXED); return rxq; } @@ -2182,7 +2183,9 @@ mlx5_ext_rxq_deref(struct rte_eth_dev *dev, uint16_t idx) { struct mlx5_external_rxq *rxq = mlx5_ext_rxq_get(dev, idx); - return __atomic_fetch_sub(&rxq->refcnt, 1, __ATOMIC_RELAXED) - 1; + return rxq != NULL ? + __atomic_fetch_sub(&rxq->refcnt, 1, __ATOMIC_RELAXED) : + UINT32_MAX - 1; } /** @@ -2201,8 +2204,8 @@ mlx5_ext_rxq_get(struct rte_eth_dev *dev, uint16_t idx) { struct mlx5_priv *priv = dev->data->dev_private; - MLX5_ASSERT(mlx5_is_external_rxq(dev, idx)); - return &priv->ext_rxqs[idx - RTE_PMD_MLX5_EXTERNAL_RX_QUEUE_ID_MIN]; + return mlx5_is_external_rxq(dev, idx) ? + &priv->ext_rxqs[idx - RTE_PMD_MLX5_EXTERNAL_RX_QUEUE_ID_MIN] : NULL; } /** @@ -2365,7 +2368,6 @@ int mlx5_ext_rxq_verify(struct rte_eth_dev *dev) { struct mlx5_priv *priv = dev->data->dev_private; - struct mlx5_external_rxq *rxq; uint32_t i; int ret = 0; @@ -2373,8 +2375,9 @@ mlx5_ext_rxq_verify(struct rte_eth_dev *dev) return 0; for (i = RTE_PMD_MLX5_EXTERNAL_RX_QUEUE_ID_MIN; i <= UINT16_MAX ; ++i) { - rxq = mlx5_ext_rxq_get(dev, i); - if (rxq->refcnt < 2) + struct mlx5_external_rxq *rxq = mlx5_ext_rxq_get(dev, i); + + if (rxq == NULL || rxq->refcnt < 2) continue; DRV_LOG(DEBUG, "Port %u external RxQ %u still referenced.", dev->data->port_id, i); -- 2.43.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2025-12-25 11:16:39.100416038 +0200 +++ 0055-net-mlx5-fix-external-queues-access.patch 2025-12-25 11:16:35.896996000 +0200 @@ -1 +1 @@ -From d524b58819b46ea47d02338204d24c2f2ba29ee2 Mon Sep 17 00:00:00 2001 +From 4b7f438400546fae4be2fc97d7889ba23d4f650d Mon Sep 17 00:00:00 2001 @@ -3 +3 @@ -Date: Thu, 30 Oct 2025 11:11:38 +0200 +Date: Tue, 18 Nov 2025 11:59:00 +0200 @@ -6 +6,3 @@ -mlx5_ext_rxq_get() and mlx5_ext_txq_get() functions did not return +[ upstream commit d524b58819b46ea47d02338204d24c2f2ba29ee2 ] + +mlx5_ext_rxq_get() did not return @@ -19,8 +20,0 @@ -External Tx queue: - -- In mlx5_ext_txq_get() remove assert and return NULL if a queue index - does not point to a valid external queue. - -- In mlx5_ext_txq_verify() validate that probed queue index references - a valid extern queue. - @@ -34 +27,0 @@ - drivers/net/mlx5/mlx5_flow.h | 2 ++ @@ -36,2 +29 @@ - drivers/net/mlx5/mlx5_txq.c | 10 +++++----- - 4 files changed, 22 insertions(+), 12 deletions(-) + 2 files changed, 15 insertions(+), 7 deletions(-) @@ -40 +32 @@ -index 673c9f3902..523b53d713 100644 +index be9dbf0467..92e4e09002 100644 @@ -43,2 +35,2 @@ -@@ -761,6 +761,11 @@ mlx5_devx_ind_table_create_rqt_attr(struct rte_eth_dev *dev, - struct mlx5_external_q *ext_rxq = +@@ -684,6 +684,11 @@ mlx5_devx_ind_table_create_rqt_attr(struct rte_eth_dev *dev, + struct mlx5_external_rxq *ext_rxq = @@ -55,13 +46,0 @@ -diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h -index 2de0f35815..308aeadcc8 100644 ---- a/drivers/net/mlx5/mlx5_flow.h -+++ b/drivers/net/mlx5/mlx5_flow.h -@@ -2042,6 +2042,8 @@ flow_hw_get_sqn(struct rte_eth_dev *dev, uint16_t tx_queue, uint32_t *sqn) - } - if (mlx5_is_external_txq(dev, tx_queue)) { - ext_txq = mlx5_ext_txq_get(dev, tx_queue); -+ if (ext_txq == NULL) -+ return -EINVAL; - *sqn = ext_txq->hw_id; - return 0; - } @@ -69 +48 @@ -index 2264dea877..9210a92c5f 100644 +index e66fe8e310..33dfda185b 100644 @@ -72 +51 @@ -@@ -2216,7 +2216,8 @@ mlx5_ext_rxq_ref(struct rte_eth_dev *dev, uint16_t idx) +@@ -2162,7 +2162,8 @@ mlx5_ext_rxq_ref(struct rte_eth_dev *dev, uint16_t idx) @@ -74 +53 @@ - struct mlx5_external_q *rxq = mlx5_ext_rxq_get(dev, idx); + struct mlx5_external_rxq *rxq = mlx5_ext_rxq_get(dev, idx); @@ -76 +55 @@ -- rte_atomic_fetch_add_explicit(&rxq->refcnt, 1, rte_memory_order_relaxed); +- __atomic_fetch_add(&rxq->refcnt, 1, __ATOMIC_RELAXED); @@ -78 +57 @@ -+ rte_atomic_fetch_add_explicit(&rxq->refcnt, 1, rte_memory_order_relaxed); ++ __atomic_fetch_add(&rxq->refcnt, 1, __ATOMIC_RELAXED); @@ -82 +61 @@ -@@ -2236,7 +2237,9 @@ mlx5_ext_rxq_deref(struct rte_eth_dev *dev, uint16_t idx) +@@ -2182,7 +2183,9 @@ mlx5_ext_rxq_deref(struct rte_eth_dev *dev, uint16_t idx) @@ -84 +63 @@ - struct mlx5_external_q *rxq = mlx5_ext_rxq_get(dev, idx); + struct mlx5_external_rxq *rxq = mlx5_ext_rxq_get(dev, idx); @@ -86 +65 @@ -- return rte_atomic_fetch_sub_explicit(&rxq->refcnt, 1, rte_memory_order_relaxed) - 1; +- return __atomic_fetch_sub(&rxq->refcnt, 1, __ATOMIC_RELAXED) - 1; @@ -88,2 +67,2 @@ -+ rte_atomic_fetch_sub_explicit(&rxq->refcnt, 1, rte_memory_order_relaxed) - 1 : -+ UINT32_MAX; ++ __atomic_fetch_sub(&rxq->refcnt, 1, __ATOMIC_RELAXED) : ++ UINT32_MAX - 1; @@ -93 +72 @@ -@@ -2255,8 +2258,8 @@ mlx5_ext_rxq_get(struct rte_eth_dev *dev, uint16_t idx) +@@ -2201,8 +2204,8 @@ mlx5_ext_rxq_get(struct rte_eth_dev *dev, uint16_t idx) @@ -100 +79 @@ -+ &priv->ext_rxqs[idx - RTE_PMD_MLX5_EXTERNAL_RX_QUEUE_ID_MIN] : NULL; ++ &priv->ext_rxqs[idx - RTE_PMD_MLX5_EXTERNAL_RX_QUEUE_ID_MIN] : NULL; @@ -104 +83 @@ -@@ -2419,7 +2422,6 @@ int +@@ -2365,7 +2368,6 @@ int @@ -108 +87 @@ -- struct mlx5_external_q *rxq; +- struct mlx5_external_rxq *rxq; @@ -112 +91 @@ -@@ -2427,8 +2429,9 @@ mlx5_ext_rxq_verify(struct rte_eth_dev *dev) +@@ -2373,8 +2375,9 @@ mlx5_ext_rxq_verify(struct rte_eth_dev *dev) @@ -118 +97 @@ -+ struct mlx5_external_q *rxq = mlx5_ext_rxq_get(dev, i); ++ struct mlx5_external_rxq *rxq = mlx5_ext_rxq_get(dev, i); @@ -123,35 +101,0 @@ - dev->data->port_id, i); -diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c -index e20165d74e..e273486809 100644 ---- a/drivers/net/mlx5/mlx5_txq.c -+++ b/drivers/net/mlx5/mlx5_txq.c -@@ -1281,8 +1281,8 @@ mlx5_ext_txq_get(struct rte_eth_dev *dev, uint16_t idx) - { - struct mlx5_priv *priv = dev->data->dev_private; - -- MLX5_ASSERT(mlx5_is_external_txq(dev, idx)); -- return &priv->ext_txqs[idx - MLX5_EXTERNAL_TX_QUEUE_ID_MIN]; -+ return mlx5_is_external_txq(dev, idx) ? -+ &priv->ext_txqs[idx - MLX5_EXTERNAL_TX_QUEUE_ID_MIN] : NULL; - } - - /** -@@ -1298,7 +1298,6 @@ int - mlx5_ext_txq_verify(struct rte_eth_dev *dev) - { - struct mlx5_priv *priv = dev->data->dev_private; -- struct mlx5_external_q *txq; - uint32_t i; - int ret = 0; - -@@ -1306,8 +1305,9 @@ mlx5_ext_txq_verify(struct rte_eth_dev *dev) - return 0; - - for (i = MLX5_EXTERNAL_TX_QUEUE_ID_MIN; i <= UINT16_MAX ; ++i) { -- txq = mlx5_ext_txq_get(dev, i); -- if (txq->refcnt < 2) -+ struct mlx5_external_q *txq = mlx5_ext_txq_get(dev, i); -+ -+ if (txq == NULL || txq->refcnt < 2) - continue; - DRV_LOG(DEBUG, "Port %u external TxQ %u still referenced.",