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 ACF2F470E5 for ; Thu, 25 Dec 2025 10:26:15 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A422040262; Thu, 25 Dec 2025 10:26:15 +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 2CB9C40262 for ; Thu, 25 Dec 2025 10:26:13 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QOLpACg5mDkuJrcfp6QMiiUlqu39WxGt6LQA5zuuqTGyJK5MsCsaZQy1TZknODlS69QB6NH4idGDJ57BrSdA3vWAe1ghy42LUB0lIuXMh/PdvpX+5yRwdJ36uca1QUkBk9U57dqVZAqufei1PtPHq2J48TW1wgm283GEqTJFct67OM11THdfwg++ANsfyktbaKhhkZmXbjn3Xorv0lANCyGF9tQ5GJqk+pw6/uhSMSJbMVYKXqKyIK7DQWqQxNjOSbUixqaxm5cGNzUzcUue+I0PW5IP3p8zp2cxc0jmlm8gc5D77t98r5O4pNLPUoZNwTlpMrDKYPR2uXqOwLBytw== 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=0ZoISxkv6McJC2JgSUgenFVUVS8FYBMdouOzR8UOFF4=; b=oi9CSQ/BTdYxnJEXWAiUsbrzenOfl33gHLAcXt57hwFox7gHva88LyVZb6imJrl5wDmqISG1BZmPy4/J9OausOK2KzT1UWhn5sOgcz5L296HdRdPGUwvGs01kKebsu1LbVsg/HfZMuwBbdhaqAzDY45DBJ6O3dCB7fuUzQxaqzaBGGiDPQiTCtxh9hqw62BaqlKEAxRxMRqpCOIqx0e9v4o4xVlx4zZH47hW99qlAsf0Wca6y/4u/qZg7djh0+H0KdqsQJBe/u7QZkhgUEY8SG7jQKJSZcA2Q89ZJ0GfukEUw52umTYm4dE9HPrVz1sAuPUW2GwYMHUKOaFw9koOsQ== 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=0ZoISxkv6McJC2JgSUgenFVUVS8FYBMdouOzR8UOFF4=; b=ipr1Wf4OXqW2QitLIS9cwTOa22R9Pd42XHaXlwRpufNzyko6F2CVTWtY+B3B1/XndoG/RcjczPoIP+3AzE0KaJldsELpLw0Hme9rMSemHgplGwf2StXLLGUfVNDyouAW6uVvbpAKc4QQKQP6Yid1zkrKCHyFqliu/9knZNhuFI5UBZgAoI84ZiVC1x/q1tiZ+6hmRK1R/8wu5ZSfjuYD9c7fXlFKItsFmIBePPMWACynWT3jvOnBVACAh3VsBJyg/ka7FwzXdU746EsNL05hNahjoLK40qVF21GYWGMjFYuaWntzPOyCQRiQp+x6mKgVUwD0cBXSP8hy57PCi23TVQ== Received: from SA0PR11CA0028.namprd11.prod.outlook.com (2603:10b6:806:d3::33) by CYYPR12MB8889.namprd12.prod.outlook.com (2603:10b6:930:cb::16) 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:26:08 +0000 Received: from SN1PEPF0002636A.namprd02.prod.outlook.com (2603:10b6:806:d3:cafe::57) by SA0PR11CA0028.outlook.office365.com (2603:10b6:806:d3::33) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9456.11 via Frontend Transport; Thu, 25 Dec 2025 09:26:03 +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 SN1PEPF0002636A.mail.protection.outlook.com (10.167.241.135) 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:26:08 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) 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.2562.20; Thu, 25 Dec 2025 01:26:01 -0800 Received: from rnnvmail202.nvidia.com (10.129.68.7) by rnnvmail202.nvidia.com (10.129.68.7) 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:26:01 -0800 Received: from nvidia.com (10.127.8.12) by mail.nvidia.com (10.129.68.7) 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:25:59 -0800 From: Shani Peretz To: Maayan Kashani CC: Dariusz Sosnowski , dpdk stable Subject: patch 'net/mlx5: fix device start error handling' has been queued to stable release 23.11.6 Date: Thu, 25 Dec 2025 11:18:53 +0200 Message-ID: <20251225091938.345892-92-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: SN1PEPF0002636A:EE_|CYYPR12MB8889:EE_ X-MS-Office365-Filtering-Correlation-Id: a0b16bc4-252b-42fe-7d1c-08de4397a307 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|376014|36860700013|1800799024|13003099007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?5N3659Y5A/e+4rJh7r07qqUTx+f8Q7T7baPze+AId5qO1kNHrXMrQrqsFeRY?= =?us-ascii?Q?ePGaenz9J5trkotKCrl2kMnpdLLRbbwAsvfjaqQyG0uH/OTHlfU4+eSCYzR6?= =?us-ascii?Q?rdmqgdeURPf8Zf13d+x7i0SWULGKsVnjFr6EOV6yuZS6soHDxs2GvQjQbA+/?= =?us-ascii?Q?kQGd1klyLxOZwznB/Lg9m350PfTd8ArlzAA1frHHRGHTgYTzFKISl037dn9U?= =?us-ascii?Q?pSKb/iewcBCkd2+J62ovNvu+hjuVBeCtu+KvbfmcnV/8SxHvg49Ghei8QzSi?= =?us-ascii?Q?Oe3xypi/y9TYKFSmUhT/N9i+XXpgstkrUT15AyqWWK0//qOohCfVxDfC+iiR?= =?us-ascii?Q?rwbyQDiHEKFM0qWdFJsh3ns4wIbT3EOIB5/L0uDFtWhNbMF94QYzO9mqYqR7?= =?us-ascii?Q?AmSg8RRLCTEgNU9qn1vVdcADuukfgTJrP5iu1RAlbzpoFwXMiQyTX9utE+ru?= =?us-ascii?Q?FU/NMyDSQtnp7IO5+UNOoflB9DqzFl3Z5ArlAx6WCqITxEItSHzsI6BRXJDT?= =?us-ascii?Q?ZDMxgxQHoD/6LsnRL9nEdo5saaEes7UQN+3m/6IjfvIEGOdA2APgyjg/9VEK?= =?us-ascii?Q?NVTtt4J9ve+Kmddw5QfZG4mOyjZOgm2zFcMg+8lUxTW/lWga2NQyeJsGU7bE?= =?us-ascii?Q?2Q7OR96R+U1fttlpH1bqhPHSTnAGa1UJmLgizSM35fKqNCwRe+gWSbCeCUDa?= =?us-ascii?Q?7FdJ+Xa5jokIxz+OXkt4oPTHbIs48m3pLmcCAeOfr2G3L7xWcWAUWGpEl1AS?= =?us-ascii?Q?t0Vq/JyZ64jdSMc1t0aoAvcLHX4/5BbfQF7VOy/NOVKxOWwTlcpZbLgoCZxB?= =?us-ascii?Q?kyQo0CoJMCb3ZWCcXDB7X/kdGQko5lbCEP8RsIQ6slb9wCeMkO69rJZaYcLo?= =?us-ascii?Q?/iQf3wUFLn5a4FWiZtlT2od4eGmSQytKL6nlE2TPi9e5zbYgsFqsrs56KQlO?= =?us-ascii?Q?xvYPraRTs5lYDzMjsF/YdcpvCfgdWbVsezmKj/HmGZZlwnIZfC6/DsRU2+Kn?= =?us-ascii?Q?dtgFIxmE01WIvlQymdQIb7J+an4zSetpShcAOIWWH/tNVjrYaASOPnbzE1Rs?= =?us-ascii?Q?Olpiw3XUOsb8Cj1hVHMUBj3rOidkbG5pfoeGGP8x/fkd0NzdthvEIHFLTqiG?= =?us-ascii?Q?O/38UjOusfsSty4iuCa81nf0AFLNySxN1+Ge6eZio7R+TKUwhlKJnfN6Prob?= =?us-ascii?Q?s1373y123tr3rgmOHF6dryyBwUU3avx8ruvU4Q/pKR3YqXCdz/rlxacirOWb?= =?us-ascii?Q?hjk5d9vRtchvgXxG+DD4TwDxwlRAUZ2Mjb3mfNlLHM69wZnPGxJnUmgi2hzu?= =?us-ascii?Q?ZIXGKXEio6TYWJXZZzWmKrBrQLyVqQzqhS2UjA+P9tDQ4fIyGB/cbK612d8m?= =?us-ascii?Q?HKE2pxnnsV7gSWBJ+flqfEaUVNK02XEyr4NH1hmWCNS2Wr3Mb4IQeEjtcZzD?= =?us-ascii?Q?DfEPuXWEDQ6iJkwKKxwxrFOVUOLcXXb/Vs0jNAxRTATZQ4sD8bbfzSFiW9aK?= =?us-ascii?Q?N4c4nfvyjf4rUJbgLFqn7Odi3xCdy2eBSPrF7zL9wKpBfeHm/XerlEQNK5jD?= =?us-ascii?Q?yP/J87djgvxHby9KkhQXUi5P2pYdF9T39SWAjl0D?= 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)(82310400026)(376014)(36860700013)(1800799024)(13003099007); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Dec 2025 09:26:08.6038 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a0b16bc4-252b-42fe-7d1c-08de4397a307 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: SN1PEPF0002636A.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR12MB8889 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/efb731220b65055d70e0c7718c94d88741fe91f6 Thanks. Shani --- >From efb731220b65055d70e0c7718c94d88741fe91f6 Mon Sep 17 00:00:00 2001 From: Maayan Kashani Date: Tue, 25 Nov 2025 13:09:27 +0200 Subject: [PATCH] net/mlx5: fix device start error handling [ upstream commit 860f6c63dbc1 ] When mlx5_dev_start() fails partway through initialization, the error cleanup code unconditionally calls cleanup functions for all steps, including those that were never successfully initialized. This causes state corruption leading to incorrect behavior on subsequent start attempts. The issue manifests as: 1. First start attempt fails with -ENOMEM (expected) 2. Second start attempt returns -EINVAL instead of -ENOMEM 3. With flow isolated mode, second attempt incorrectly succeeds, leading to segfault in rte_eth_rx_burst() Root cause: The single error label cleanup path calls functions like mlx5_traffic_disable() and mlx5_flow_stop_default() even when their corresponding initialization functions (mlx5_traffic_enable() and mlx5_flow_start_default()) were never called due to earlier failure. For example, when mlx5_rxq_start() fails: - mlx5_traffic_enable() at line 1403 never executes - mlx5_flow_start_default() at line 1420 never executes - But cleanup unconditionally calls: * mlx5_traffic_disable() - destroys control flows list * mlx5_flow_stop_default() - corrupts flow metadata state This corrupts the device state, causing subsequent start attempts to fail with different errors or, in isolated mode, to incorrectly succeed with an improperly initialized device. Fix by replacing the single error label with cascading error labels (Linux kernel style). Each label cleans up only its corresponding step, then falls through to clean up earlier steps. This ensures only successfully initialized steps are cleaned up, maintaining device state consistency across failed start attempts. Bugzilla ID: 1419 Fixes: 8db7e3b69822 ("net/mlx5: change operations for non-cached flows") Cc: stable@dpdk.org Signed-off-by: Maayan Kashani Acked-by: Dariusz Sosnowski --- drivers/net/mlx5/mlx5_trigger.c | 60 +++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c index 3bda84e963..7332a79609 100644 --- a/drivers/net/mlx5/mlx5_trigger.c +++ b/drivers/net/mlx5/mlx5_trigger.c @@ -1133,6 +1133,11 @@ mlx5_hw_representor_port_allowed_start(struct rte_eth_dev *dev) #endif +#define SAVE_RTE_ERRNO_AND_STOP(ret, dev) do { \ + ret = rte_errno; \ + (dev)->data->dev_started = 0; \ +} while (0) + /** * DPDK callback to start the device. * @@ -1203,19 +1208,23 @@ continue_dev_start: if (ret) { DRV_LOG(ERR, "port %u Tx packet pacing init failed: %s", dev->data->port_id, strerror(rte_errno)); + SAVE_RTE_ERRNO_AND_STOP(ret, dev); goto error; } if (mlx5_devx_obj_ops_en(priv->sh) && priv->obj_ops.lb_dummy_queue_create) { ret = priv->obj_ops.lb_dummy_queue_create(dev); - if (ret) - goto error; + if (ret) { + SAVE_RTE_ERRNO_AND_STOP(ret, dev); + goto txpp_stop; + } } ret = mlx5_txq_start(dev); if (ret) { DRV_LOG(ERR, "port %u Tx queue allocation failed: %s", dev->data->port_id, strerror(rte_errno)); - goto error; + SAVE_RTE_ERRNO_AND_STOP(ret, dev); + goto lb_dummy_queue_release; } if (priv->config.std_delay_drop || priv->config.hp_delay_drop) { if (!priv->sh->dev_cap.vf && !priv->sh->dev_cap.sf && @@ -1239,7 +1248,8 @@ continue_dev_start: if (ret) { DRV_LOG(ERR, "port %u Rx queue allocation failed: %s", dev->data->port_id, strerror(rte_errno)); - goto error; + SAVE_RTE_ERRNO_AND_STOP(ret, dev); + goto txq_stop; } /* * Such step will be skipped if there is no hairpin TX queue configured @@ -1249,7 +1259,8 @@ continue_dev_start: if (ret) { DRV_LOG(ERR, "port %u hairpin auto binding failed: %s", dev->data->port_id, strerror(rte_errno)); - goto error; + SAVE_RTE_ERRNO_AND_STOP(ret, dev); + goto rxq_stop; } /* Set started flag here for the following steps like control flow. */ dev->data->dev_started = 1; @@ -1257,7 +1268,8 @@ continue_dev_start: if (ret) { DRV_LOG(ERR, "port %u Rx interrupt vector creation failed", dev->data->port_id); - goto error; + SAVE_RTE_ERRNO_AND_STOP(ret, dev); + goto rxq_stop; } mlx5_os_stats_init(dev); /* @@ -1269,7 +1281,8 @@ continue_dev_start: DRV_LOG(ERR, "port %u failed to attach indirect actions: %s", dev->data->port_id, rte_strerror(rte_errno)); - goto error; + SAVE_RTE_ERRNO_AND_STOP(ret, dev); + goto rx_intr_vec_disable; } #ifdef HAVE_MLX5_HWS_SUPPORT if (priv->sh->config.dv_flow_en == 2) { @@ -1277,7 +1290,8 @@ continue_dev_start: if (ret) { DRV_LOG(ERR, "port %u failed to update HWS tables", dev->data->port_id); - goto error; + SAVE_RTE_ERRNO_AND_STOP(ret, dev); + goto action_handle_detach; } } #endif @@ -1285,7 +1299,8 @@ continue_dev_start: if (ret) { DRV_LOG(ERR, "port %u failed to set defaults flows", dev->data->port_id); - goto error; + SAVE_RTE_ERRNO_AND_STOP(ret, dev); + goto action_handle_detach; } /* Set dynamic fields and flags into Rx queues. */ mlx5_flow_rxq_dynf_set(dev); @@ -1302,12 +1317,14 @@ continue_dev_start: if (ret) { DRV_LOG(DEBUG, "port %u failed to start default actions: %s", dev->data->port_id, strerror(rte_errno)); - goto error; + SAVE_RTE_ERRNO_AND_STOP(ret, dev); + goto traffic_disable; } if (mlx5_dev_ctx_shared_mempool_subscribe(dev) != 0) { DRV_LOG(ERR, "port %u failed to subscribe for mempool life cycle: %s", dev->data->port_id, rte_strerror(rte_errno)); - goto error; + SAVE_RTE_ERRNO_AND_STOP(ret, dev); + goto stop_default; } rte_wmb(); dev->tx_pkt_burst = mlx5_select_tx_function(dev); @@ -1334,18 +1351,25 @@ continue_dev_start: priv->sh->port[priv->dev_port - 1].devx_ih_port_id = (uint32_t)dev->data->port_id; return 0; -error: - ret = rte_errno; /* Save rte_errno before cleanup. */ - /* Rollback. */ - dev->data->dev_started = 0; +stop_default: mlx5_flow_stop_default(dev); +traffic_disable: mlx5_traffic_disable(dev); - mlx5_txq_stop(dev); +action_handle_detach: + mlx5_action_handle_detach(dev); +rx_intr_vec_disable: + mlx5_rx_intr_vec_disable(dev); +rxq_stop: mlx5_rxq_stop(dev); +txq_stop: + mlx5_txq_stop(dev); +lb_dummy_queue_release: if (priv->obj_ops.lb_dummy_queue_release) priv->obj_ops.lb_dummy_queue_release(dev); - mlx5_txpp_stop(dev); /* Stop last. */ - rte_errno = ret; /* Restore rte_errno. */ +txpp_stop: + mlx5_txpp_stop(dev); +error: + rte_errno = ret; return -rte_errno; } -- 2.43.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2025-12-25 11:16:40.880491332 +0200 +++ 0092-net-mlx5-fix-device-start-error-handling.patch 2025-12-25 11:16:36.261892000 +0200 @@ -1 +1 @@ -From 860f6c63dbc1cc6ae6bbaca886c04b88d43a2236 Mon Sep 17 00:00:00 2001 +From efb731220b65055d70e0c7718c94d88741fe91f6 Mon Sep 17 00:00:00 2001 @@ -3 +3 @@ -Date: Thu, 13 Nov 2025 21:37:11 +0200 +Date: Tue, 25 Nov 2025 13:09:27 +0200 @@ -5,0 +6,2 @@ +[ upstream commit 860f6c63dbc1 ] + @@ -47,2 +49,2 @@ - drivers/net/mlx5/mlx5_trigger.c | 66 +++++++++++++++++++++++---------- - 1 file changed, 46 insertions(+), 20 deletions(-) + drivers/net/mlx5/mlx5_trigger.c | 60 +++++++++++++++++++++++---------- + 1 file changed, 42 insertions(+), 18 deletions(-) @@ -51 +53 @@ -index c0fb98e78a..9aa36ae9a8 100644 +index 3bda84e963..7332a79609 100644 @@ -54,3 +56,3 @@ -@@ -1226,6 +1226,11 @@ static void mlx5_dev_free_consec_tx_mem(struct rte_eth_dev *dev, bool on_stop) - } - } +@@ -1133,6 +1133,11 @@ mlx5_hw_representor_port_allowed_start(struct rte_eth_dev *dev) + + #endif @@ -66 +68 @@ -@@ -1316,25 +1321,30 @@ continue_dev_start: +@@ -1203,19 +1208,23 @@ continue_dev_start: @@ -83,8 +84,0 @@ - ret = mlx5_dev_allocate_consec_tx_mem(dev); - if (ret) { - DRV_LOG(ERR, "port %u Tx queues memory allocation failed: %s", - dev->data->port_id, strerror(rte_errno)); -- goto error; -+ SAVE_RTE_ERRNO_AND_STOP(ret, dev); -+ goto lb_dummy_queue_release; - } @@ -97 +91 @@ -+ goto free_consec_tx_mem; ++ goto lb_dummy_queue_release; @@ -101 +95 @@ -@@ -1358,7 +1368,8 @@ continue_dev_start: +@@ -1239,7 +1248,8 @@ continue_dev_start: @@ -111 +105 @@ -@@ -1368,7 +1379,8 @@ continue_dev_start: +@@ -1249,7 +1259,8 @@ continue_dev_start: @@ -121 +115 @@ -@@ -1376,7 +1388,8 @@ continue_dev_start: +@@ -1257,7 +1268,8 @@ continue_dev_start: @@ -131 +125 @@ -@@ -1388,7 +1401,8 @@ continue_dev_start: +@@ -1269,7 +1281,8 @@ continue_dev_start: @@ -141 +135 @@ -@@ -1396,7 +1410,8 @@ continue_dev_start: +@@ -1277,7 +1290,8 @@ continue_dev_start: @@ -151 +145 @@ -@@ -1404,7 +1419,8 @@ continue_dev_start: +@@ -1285,7 +1299,8 @@ continue_dev_start: @@ -161 +155 @@ -@@ -1421,12 +1437,14 @@ continue_dev_start: +@@ -1302,12 +1317,14 @@ continue_dev_start: @@ -176,3 +170,3 @@ - if (mlx5_flow_is_steering_disabled()) - mlx5_flow_rxq_mark_flag_set(dev); -@@ -1455,19 +1473,27 @@ continue_dev_start: + rte_wmb(); + dev->tx_pkt_burst = mlx5_select_tx_function(dev); +@@ -1334,18 +1351,25 @@ continue_dev_start: @@ -199,2 +192,0 @@ -+free_consec_tx_mem: -+ mlx5_dev_free_consec_tx_mem(dev, false); @@ -204 +195,0 @@ -- mlx5_dev_free_consec_tx_mem(dev, false);