From patchwork Wed Mar 6 20:21:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dariusz Sosnowski X-Patchwork-Id: 138062 X-Patchwork-Delegate: rasland@nvidia.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id E9BE643C5A; Wed, 6 Mar 2024 21:23:18 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D7E9042EA5; Wed, 6 Mar 2024 21:23:18 +0100 (CET) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2063.outbound.protection.outlook.com [40.107.237.63]) by mails.dpdk.org (Postfix) with ESMTP id CE2FF42EAA; Wed, 6 Mar 2024 21:23:17 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NZ9mJNYdXvbQi81Q/5225/2Y5gPWIgX8WlpCysicpqdAIym++3UIklBJ6i7cZWCFXJ9zLqLa2wWCoRUH4kKsKpwxr0xGblVmHQxCjoRslB2nGqVhdODVbqp2O/6h+lyNgqQmdhDGTTOi9y+ve1cGFoyH06IShlpS2i/z35FIlmF50Wlc6RxYWh9cXlZikz57zpWINMEykn5gGzLXFwoEEigq/GMb8ziPxx5091ku307KtC21RGzbmgwxoOnl1o38fOU6iTOhboCRMxSBdiHuEQ61+fE52bfHYttr0l/VOu7cwVWlggAAtWDad6Ryh1y5BXST6iMs6y9YsVP0O3FT0A== 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=2QLf9leDflKTCzZDBpnzS3DPBaS8V58/UUp995wYEO0=; b=HioFzzoR7vY834zeRDcmcP5QX8tUPLVdAzQlpgkuj79Ukdt3KjlfGrcdSGk6ozDIcClWj6BCN/659kmTzOtcCU/y8oK1D+1X7w0syUpNyg7z//XZIVHL1yygo0qFrxM1eGINkzTK+E+g2Pcr3EaAd6tAKEdsMrgsB3rKu6J3ETx3HR7qaTbc3V79wx7sa5DmgZKHnEtRW5SDOxkTzcsQsMBtTtrm4GyV68XDa0gSb+WtOJAxPOnwBYX9vygTZsHTDnsheXm9FtmA/y9zz5NIVeMAkMei8u56ST//AoYtPytFvcJFfEBB5GZRuhn1FABZCrsTUynxls8Z9QUpsFCajA== 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=2QLf9leDflKTCzZDBpnzS3DPBaS8V58/UUp995wYEO0=; b=tGD3Dmq7lZyg/nkQW2e0tcc3LMPDbOCtt75BFwuxs6QTs1Bn8Tb9iGmrVoHJeeIRddYO0ftJkCgFnEtpMdSP/Z8lcylAOiPTtEe0jevsXV7woU8UZbc5I0zKH7tAnLxFaF7XvWFc9sAHK0awtjH376d+xrm+o3uAYvOBXj4R9nJRWef6jzCfk5Zr5IAw5gLqDXPKf6DDK4qXu+TjwQCqPsa3+2j8X1QsDghWP/4vp4n7Grnfwcg6mpTXz6QfU5ulz9jKCD903I2mSyNI/nbR619x3XuGwGFO19HNIyamEgNmzsGlV7ah8wu5PwUOh6zDpD0HzuoGyq90L6uGovL5cw== Received: from CY5PR15CA0097.namprd15.prod.outlook.com (2603:10b6:930:7::19) by PH7PR12MB6442.namprd12.prod.outlook.com (2603:10b6:510:1fa::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7362.24; Wed, 6 Mar 2024 20:23:11 +0000 Received: from CY4PEPF0000FCC4.namprd03.prod.outlook.com (2603:10b6:930:7:cafe::1a) by CY5PR15CA0097.outlook.office365.com (2603:10b6:930:7::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7362.24 via Frontend Transport; Wed, 6 Mar 2024 20:23:11 +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 CY4PEPF0000FCC4.mail.protection.outlook.com (10.167.242.106) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7362.11 via Frontend Transport; Wed, 6 Mar 2024 20:23:11 +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; Wed, 6 Mar 2024 12:22:56 -0800 Received: from nvidia.com (10.126.230.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.1258.12; Wed, 6 Mar 2024 12:22:53 -0800 From: Dariusz Sosnowski To: Viacheslav Ovsiienko , Ori Kam , Suanming Mou , Matan Azrad , "Bing Zhao" , Gregory Etelson , Michael Baum CC: , Subject: [PATCH 3/4] net/mlx5: fix rollback on failed flow configure Date: Wed, 6 Mar 2024 21:21:49 +0100 Message-ID: <20240306202150.79577-3-dsosnowski@nvidia.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240306202150.79577-1-dsosnowski@nvidia.com> References: <20240306202150.79577-1-dsosnowski@nvidia.com> MIME-Version: 1.0 X-Originating-IP: [10.126.230.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: CY4PEPF0000FCC4:EE_|PH7PR12MB6442:EE_ X-MS-Office365-Filtering-Correlation-Id: 13a81b27-8b51-4a1b-bf2c-08dc3e1b3e6f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: VL3wfs4ThzkHxkXTHvPsMwTuBkLyeHEsUW37ObruTEEwX4Prk3VzzSCZmVMns2O6qzJEcCfSIRxGiPILfT+/A6a8qcNKUJSPR9TwBZaNUi8DaHDcW/vQUkpyvEeb/TIYTUnadM6ih9uFn9YnJM8/l/EvOqZw9AGVjrtN+bx/YgmV1j69AHWkwGBjWwRCsPognWyxb/O7eV9HQPOLFlqU9zaJ0WSz9INFcufZgjn6fakMZvEMkzoYkXL9pJ9SLoQN+XmA7Z3T7UA1IRGiiGajtzYoGrcMWByMMBvGlgtPgok5dMQ9oXamwETMw1It0n5BYghjUzi1JXjCn/i0PHGerJR8wFpM/N6Hlcbk90pryBUdDvFyhHJEfbMfPIjJN3yXyCZttZ+F/Rr+tV12lUdjlldBZD8/0aI3oOKMpiEzB4vH15qaBIw+hPB20foJMH6PL6w7wEbUZfSou0HjQVJAk7uaghGk5BC1Ax05M/zcq1qsa+9viBSGjnvgP3x7mMKGTds/STUSbn4izE1/QWGu6G/NnukDtMx5fB71AoFsjKmmQBglNvmybLYFZWMOSM5Dx+Q4Rc3/MSH4PPzSWKlly2iayLPqqcVMV5VBsfSygHjo1Hx8/ziK1ma6FF3j62tZHCYfbhEnvmx4i1XqPtlt7HD17+c+G+WGYWQR4bgHtwXErpuTWLt+KE7bLkH29stlZP6tjnfnyplmunRRUtoIqiAdU3+I6NiRxHZSLUYGT173uJRcUExgbPFKU5wBiUE3 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)(376005)(82310400014)(36860700004); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Mar 2024 20:23:11.1223 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 13a81b27-8b51-4a1b-bf2c-08dc3e1b3e6f 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: CY4PEPF0000FCC4.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB6442 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org If rte_flow_configure() failed, then some port resources were either not freed, nor reset to the default state. As a result, assumptions in other places in PMD were invalidated and that lead to segmentation faults during release of HW Steering resources when port was closed. This patch adds missing resource release to rollback procedure in mlx5 PMD implementation of rte_flow_configure(). Whole rollback procedure is reordered for clarity, to resemble reverse order of resource allocation. Fixes: 1939eb6f660c ("net/mlx5: support flow port action with HWS") Fixes: 8a5c816691e7 ("net/mlx5: create NAT64 actions during configuration") Fixes: 773ca0e91ba1 ("net/mlx5: support VLAN push/pop/modify with HWS") Fixes: 04a4de756e14 ("net/mlx5: support flow age action with HWS") Fixes: c3f085a4858c ("net/mlx5: improve pattern template validation") Cc: stable@dpdk.org Signed-off-by: Dariusz Sosnowski Acked-by: Ori Kam --- drivers/net/mlx5/mlx5_flow_hw.c | 65 ++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index 21c37b7539..17ab3a98fe 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -10188,7 +10188,7 @@ flow_hw_compare_config(const struct mlx5_flow_hw_attr *hw_attr, * mlx5_dev_close -> flow_hw_resource_release -> flow_hw_actions_template_destroy */ static void -action_template_drop_release(struct rte_eth_dev *dev) +flow_hw_action_template_drop_release(struct rte_eth_dev *dev) { int i; struct mlx5_priv *priv = dev->data->dev_private; @@ -10204,7 +10204,7 @@ action_template_drop_release(struct rte_eth_dev *dev) } static int -action_template_drop_init(struct rte_eth_dev *dev, +flow_hw_action_template_drop_init(struct rte_eth_dev *dev, struct rte_flow_error *error) { const struct rte_flow_action drop[2] = { @@ -10466,7 +10466,7 @@ flow_hw_configure(struct rte_eth_dev *dev, rte_spinlock_init(&priv->hw_ctrl_lock); LIST_INIT(&priv->hw_ctrl_flows); LIST_INIT(&priv->hw_ext_ctrl_flows); - ret = action_template_drop_init(dev, error); + ret = flow_hw_action_template_drop_init(dev, error); if (ret) goto err; ret = flow_hw_create_ctrl_rx_tables(dev); @@ -10594,6 +10594,15 @@ flow_hw_configure(struct rte_eth_dev *dev, dev->flow_fp_ops = &mlx5_flow_hw_fp_ops; return 0; err: + priv->hws_strict_queue = 0; + flow_hw_destroy_nat64_actions(priv); + flow_hw_destroy_vlan(dev); + if (priv->hws_age_req) + mlx5_hws_age_pool_destroy(priv); + if (priv->hws_cpool) { + mlx5_hws_cnt_pool_destroy(priv->sh, priv->hws_cpool); + priv->hws_cpool = NULL; + } if (priv->hws_ctpool) { flow_hw_ct_pool_destroy(dev, priv->hws_ctpool); priv->hws_ctpool = NULL; @@ -10602,29 +10611,38 @@ flow_hw_configure(struct rte_eth_dev *dev, flow_hw_ct_mng_destroy(dev, priv->ct_mng); priv->ct_mng = NULL; } - if (priv->hws_age_req) - mlx5_hws_age_pool_destroy(priv); - if (priv->hws_cpool) { - mlx5_hws_cnt_pool_destroy(priv->sh, priv->hws_cpool); - priv->hws_cpool = NULL; - } - action_template_drop_release(dev); - mlx5_flow_quota_destroy(dev); flow_hw_destroy_send_to_kernel_action(priv); flow_hw_cleanup_ctrl_fdb_tables(dev); flow_hw_free_vport_actions(priv); + if (priv->hw_def_miss) { + mlx5dr_action_destroy(priv->hw_def_miss); + priv->hw_def_miss = NULL; + } + flow_hw_cleanup_tx_repr_tagging(dev); for (i = 0; i < MLX5_HW_ACTION_FLAG_MAX; i++) { - if (priv->hw_drop[i]) + if (priv->hw_drop[i]) { mlx5dr_action_destroy(priv->hw_drop[i]); - if (priv->hw_tag[i]) + priv->hw_drop[i] = NULL; + } + if (priv->hw_tag[i]) { mlx5dr_action_destroy(priv->hw_tag[i]); + priv->hw_tag[i] = NULL; + } } - if (priv->hw_def_miss) - mlx5dr_action_destroy(priv->hw_def_miss); - flow_hw_destroy_nat64_actions(priv); - flow_hw_destroy_vlan(dev); - if (dr_ctx) + mlx5_flow_meter_uninit(dev); + mlx5_flow_quota_destroy(dev); + flow_hw_cleanup_ctrl_rx_tables(dev); + flow_hw_action_template_drop_release(dev); + if (dr_ctx) { claim_zero(mlx5dr_context_close(dr_ctx)); + priv->dr_ctx = NULL; + } + if (priv->shared_host) { + struct mlx5_priv *host_priv = priv->shared_host->data->dev_private; + + __atomic_fetch_sub(&host_priv->shared_refcnt, 1, __ATOMIC_RELAXED); + priv->shared_host = NULL; + } for (i = 0; i < nb_q_updated; i++) { rte_ring_free(priv->hw_q[i].indir_iq); rte_ring_free(priv->hw_q[i].indir_cq); @@ -10637,14 +10655,11 @@ flow_hw_configure(struct rte_eth_dev *dev, mlx5_ipool_destroy(priv->acts_ipool); priv->acts_ipool = NULL; } - if (_queue_attr) - mlx5_free(_queue_attr); - if (priv->shared_host) { - __atomic_fetch_sub(&host_priv->shared_refcnt, 1, __ATOMIC_RELAXED); - priv->shared_host = NULL; - } mlx5_free(priv->hw_attr); priv->hw_attr = NULL; + priv->nb_queue = 0; + if (_queue_attr) + mlx5_free(_queue_attr); /* Do not overwrite the internal errno information. */ if (ret) return ret; @@ -10677,7 +10692,7 @@ flow_hw_resource_release(struct rte_eth_dev *dev) flow_hw_cleanup_ctrl_fdb_tables(dev); flow_hw_cleanup_tx_repr_tagging(dev); flow_hw_cleanup_ctrl_rx_tables(dev); - action_template_drop_release(dev); + flow_hw_action_template_drop_release(dev); while (!LIST_EMPTY(&priv->flow_hw_grp)) { grp = LIST_FIRST(&priv->flow_hw_grp); flow_hw_group_unset_miss_group(dev, grp, NULL);