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 873CD4301F for ; Thu, 10 Aug 2023 02:02:19 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 792D54325B; Thu, 10 Aug 2023 02:02:19 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2076.outbound.protection.outlook.com [40.107.237.76]) by mails.dpdk.org (Postfix) with ESMTP id 100D340DD8 for ; Thu, 10 Aug 2023 02:02:18 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oSdVcdBBqIt4Ul+D7JmuQ+cM2P2wfF+fv6rlz6TVN0pE6Fx/TyyjxQ3DdhQF/e3DD5of6Svc/ZrVvHC0Hif1R6nNt9ZDqnjRHTQUMLSFLD4VGYk+D7msggM2hQydWUSmS0tetlAC/WhPzOV2MRc1FYOMT1Tg0ZqfssubuZEHa2vul3nH2rH6DQ62cqGT/ZPwELW9R9azf1M9s4RFB2VesN4Un1rkylo2AMEel6WvyduRIr1BbaHFcoIsZbZ83SHzq2L1e/iw2WP4p/jBFM7XmvUNtil0keqQksI2YCfLtsQWWL3nxDq71JA9RGNe3VamGVO2HpUbNN/TxEaut9OVOw== 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=odXiQnqIjpzpeWa/+OaRvIfJVS6mpsGuRrPdOQkZBQY=; b=MHYM/LjGKQVtTTvhrXkQxrQ5GzQz16zbCPLO5t9f/QkVO7ZOmb6p9lfgWfBdfllferW272MJK46L3o/n5XaAvfbtYBLZBVF6rmDqCn3pz/RM6N4X+iG1y0RZHiIzxtsnUZu0Gy682vK0quq+iZia6gXxe5C8TX2gkDLhLPlGH40HnczdKB/AlNkcYaJcZLSaRFtJizJHN6pII0DHYpZ5s3QP0P17jlao+C/HegwUq3RxkJWOqbsJayEjhdfueYxoY93bS1PRdqQ+jGgmRRY3FXJMAMr/nMvPrNxjn1P/pd5bff6dX3OyrbTKzs62hW1M9ZOozkpab0nEgVgQVF+/lA== 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 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=odXiQnqIjpzpeWa/+OaRvIfJVS6mpsGuRrPdOQkZBQY=; b=uQW3ja9AHSe6QJUeGJ2Y/GTeeNmBjSB0o00N6uaQNSwYbuEAbQbJJ5ax5+OUg0JKuCGPEiGHx2UFM5tc1DOQizzLTFyG40t3Ps2PvcqdlndBVADHh60Qojk864e7G4KzDguDksmxLXn6Au0vkvt3/t3ITkY2tFPmuTePaAUB5SwPT8zZAIcPBgTCVs9pFkUC0iqAQKtqwVVS6uwevWoU1yLrfknO2kLpk4sGCa12A9pDMcIOoEXbXtzoM65NrokLmCjSabHfY1pLh1ataLEv5Xs/H8tbW+3rVFA65cyndqsh4QEEGMUAgP02IIGR9NLndsua/4yyQidNqOhElLudWQ== Received: from CYZPR14CA0028.namprd14.prod.outlook.com (2603:10b6:930:a0::7) by IA1PR12MB6090.namprd12.prod.outlook.com (2603:10b6:208:3ee::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.30; Thu, 10 Aug 2023 00:02:15 +0000 Received: from CY4PEPF0000EDD0.namprd03.prod.outlook.com (2603:10b6:930:a0:cafe::f6) by CYZPR14CA0028.outlook.office365.com (2603:10b6:930:a0::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.30 via Frontend Transport; Thu, 10 Aug 2023 00:02:14 +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 CY4PEPF0000EDD0.mail.protection.outlook.com (10.167.241.204) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.19 via Frontend Transport; Thu, 10 Aug 2023 00:02:14 +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.5; Wed, 9 Aug 2023 17:02:02 -0700 Received: from nvidia.com (10.126.230.37) 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.37; Wed, 9 Aug 2023 17:02:00 -0700 From: Xueming Li To: Bing Zhao CC: Suanming Mou , Ori Kam , "dpdk stable" Subject: patch 'net/mlx5: fix error set in control tables create' has been queued to stable release 22.11.3 Date: Thu, 10 Aug 2023 07:58:55 +0800 Message-ID: <20230809235947.1187-23-xuemingl@nvidia.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230809235947.1187-1-xuemingl@nvidia.com> References: <20230625063544.11183-1-xuemingl@nvidia.com> <20230809235947.1187-1-xuemingl@nvidia.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PEPF0000EDD0:EE_|IA1PR12MB6090:EE_ X-MS-Office365-Filtering-Correlation-Id: d19cb991-51cf-47c1-e4c6-08db99350dc3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ziMFur9m466gdoGXZLK9q3lf1YOv5yxKGN1cmNT61Vt429kXJuurBD5oR/1NjDqKN9/z3uYdbo1XWGWeO3oTlKnS/IlkpbN/zoWe7+PLXy6D3b+jyFYXBNe7pFOLJw0F83rV68OU3rIETgi5w41XaN77YsxzqQtR3fHmDOOCznm+9jVfU/V74GZyDbMETG38837FpyRdM2WgGXF/v1uwAgr3zeB8GuOSs0wbJ0xdeiAco/gQ8ra6qooDXgodk4E/Fw6T2tPaydrbv1SY7uTjkOpp5bu0pTg2ZtaIiDcMqUH8reUCXzJltm6SvUaxdsllN0b4C6kS2uLWgsxRjMAm0DhJL2O5C8SSXNTcKd4qDcNScKrVy79qFGhLXbN7UoSe/jkJBzjepnqtBMZuPaL9F9ppWMsqWNltS9LNCpinRS6/jJF5iFVqPYpCjWshFLLA2lW3kmArLhhB/bpc/5aj+rBcIO3Q1nRLFGXPlzrrGo5+x7SYDTF6eNpeJDUN548cPBq8OZbp8lgirnj6oOxrqugsTvEV5iV/Vp3+jdMIyGCSdoiaHSuMXaHHxZWjg2cyjYk/4K2tJfJan4b+mExAv/N2WSbR5A6MOScKuaGKRU/OgdLJD7IM01l5vBqicbKcgHf9jw29Yq2Z8J7QMTAVLJjXH4VEW0LT5dZCxD4Gr5F3KsMoG30i7b9CirwgH8+cUrYzBOOYyv73WOLQxLbULsvb+y5ruH8Ol42zdnsjE+ttWfyC7KZH2xXw3bCCXqkVcDDXap9zf/cYC0iJBFIotw== 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:(13230028)(4636009)(396003)(136003)(376002)(39860400002)(346002)(82310400008)(451199021)(1800799006)(186006)(40470700004)(46966006)(36840700001)(478600001)(4326008)(6636002)(316002)(37006003)(54906003)(40480700001)(30864003)(5660300002)(40460700003)(41300700001)(8936002)(36860700001)(1076003)(26005)(36756003)(966005)(70586007)(70206006)(86362001)(6862004)(6666004)(8676002)(7696005)(40140700001)(55016003)(2906002)(7636003)(82740400003)(356005)(336012)(2616005)(6286002)(16526019)(83380400001)(47076005)(426003)(53546011); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Aug 2023 00:02:14.5065 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d19cb991-51cf-47c1-e4c6-08db99350dc3 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: CY4PEPF0000EDD0.namprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6090 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.3 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 08/11/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=6f086a7a7497e454ec00b842a1f578bbf302c16b Thanks. Xueming Li --- >From 6f086a7a7497e454ec00b842a1f578bbf302c16b Mon Sep 17 00:00:00 2001 From: Bing Zhao Date: Fri, 30 Jun 2023 12:46:35 +0300 Subject: [PATCH] net/mlx5: fix error set in control tables create Cc: Xueming Li [ upstream commit 0dc3b3d06823770c85eacd5b9f70132e69ac75b2 ] When some failure occurs in the flow_hw_create_ctrl_tables(), the "rte_flow_error" should be set properly with all needed information. Then the rte_errno and the "message" will reflect the actual failure. This will also solve the crash when trying to access the "message". Fixes: 1939eb6f660c ("net/mlx5: support flow port action with HWS") Fixes: 483181f7b6dd ("net/mlx5: support device control of representor matching") Fixes: ddb68e47331e ("net/mlx5: add extended metadata mode for HWS") Signed-off-by: Bing Zhao Reviewed-by: Suanming Mou Acked-by: Ori Kam --- drivers/net/mlx5/mlx5_flow_hw.c | 176 +++++++++++++++++++------------- 1 file changed, 106 insertions(+), 70 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index ccd78990a6..3a1b3dfd06 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -4814,7 +4814,7 @@ flow_hw_pattern_template_create(struct rte_eth_dev *dev, struct rte_flow_pattern_template *it; struct rte_flow_item *copied_items = NULL; const struct rte_flow_item *tmpl_items; - uint64_t orig_item_nb; + uint32_t orig_item_nb; struct rte_flow_item port = { .type = RTE_FLOW_ITEM_TYPE_REPRESENTED_PORT, .mask = &rte_flow_item_ethdev_mask, @@ -5573,12 +5573,15 @@ flow_hw_esw_mgr_regc_marker(struct rte_eth_dev *dev) * * @param dev * Pointer to Ethernet device. + * @param error + * Pointer to error structure. * * @return * Pointer to flow pattern template on success, NULL otherwise. */ static struct rte_flow_pattern_template * -flow_hw_create_ctrl_esw_mgr_pattern_template(struct rte_eth_dev *dev) +flow_hw_create_ctrl_esw_mgr_pattern_template(struct rte_eth_dev *dev, + struct rte_flow_error *error) { struct rte_flow_pattern_template_attr attr = { .relaxed_matching = 0, @@ -5608,7 +5611,7 @@ flow_hw_create_ctrl_esw_mgr_pattern_template(struct rte_eth_dev *dev) }, }; - return flow_hw_pattern_template_create(dev, &attr, items, NULL); + return flow_hw_pattern_template_create(dev, &attr, items, error); } /** @@ -5621,12 +5624,15 @@ flow_hw_create_ctrl_esw_mgr_pattern_template(struct rte_eth_dev *dev) * * @param dev * Pointer to Ethernet device. + * @param error + * Pointer to error structure. * * @return * Pointer to flow pattern template on success, NULL otherwise. */ static struct rte_flow_pattern_template * -flow_hw_create_ctrl_regc_sq_pattern_template(struct rte_eth_dev *dev) +flow_hw_create_ctrl_regc_sq_pattern_template(struct rte_eth_dev *dev, + struct rte_flow_error *error) { struct rte_flow_pattern_template_attr attr = { .relaxed_matching = 0, @@ -5659,7 +5665,7 @@ flow_hw_create_ctrl_regc_sq_pattern_template(struct rte_eth_dev *dev) }, }; - return flow_hw_pattern_template_create(dev, &attr, items, NULL); + return flow_hw_pattern_template_create(dev, &attr, items, error); } /** @@ -5669,12 +5675,15 @@ flow_hw_create_ctrl_regc_sq_pattern_template(struct rte_eth_dev *dev) * * @param dev * Pointer to Ethernet device. + * @param error + * Pointer to error structure. * * @return * Pointer to flow pattern template on success, NULL otherwise. */ static struct rte_flow_pattern_template * -flow_hw_create_ctrl_port_pattern_template(struct rte_eth_dev *dev) +flow_hw_create_ctrl_port_pattern_template(struct rte_eth_dev *dev, + struct rte_flow_error *error) { struct rte_flow_pattern_template_attr attr = { .relaxed_matching = 0, @@ -5693,7 +5702,7 @@ flow_hw_create_ctrl_port_pattern_template(struct rte_eth_dev *dev) }, }; - return flow_hw_pattern_template_create(dev, &attr, items, NULL); + return flow_hw_pattern_template_create(dev, &attr, items, error); } /* @@ -5703,12 +5712,15 @@ flow_hw_create_ctrl_port_pattern_template(struct rte_eth_dev *dev) * * @param dev * Pointer to Ethernet device. + * @param error + * Pointer to error structure. * * @return * Pointer to flow pattern template on success, NULL otherwise. */ static struct rte_flow_pattern_template * -flow_hw_create_tx_default_mreg_copy_pattern_template(struct rte_eth_dev *dev) +flow_hw_create_tx_default_mreg_copy_pattern_template(struct rte_eth_dev *dev, + struct rte_flow_error *error) { struct rte_flow_pattern_template_attr tx_pa_attr = { .relaxed_matching = 0, @@ -5729,10 +5741,8 @@ flow_hw_create_tx_default_mreg_copy_pattern_template(struct rte_eth_dev *dev) .type = RTE_FLOW_ITEM_TYPE_END, }, }; - struct rte_flow_error drop_err; - RTE_SET_USED(drop_err); - return flow_hw_pattern_template_create(dev, &tx_pa_attr, eth_all, &drop_err); + return flow_hw_pattern_template_create(dev, &tx_pa_attr, eth_all, error); } /** @@ -5743,12 +5753,15 @@ flow_hw_create_tx_default_mreg_copy_pattern_template(struct rte_eth_dev *dev) * * @param dev * Pointer to Ethernet device. + * @param error + * Pointer to error structure. * * @return * Pointer to flow actions template on success, NULL otherwise. */ static struct rte_flow_actions_template * -flow_hw_create_ctrl_regc_jump_actions_template(struct rte_eth_dev *dev) +flow_hw_create_ctrl_regc_jump_actions_template(struct rte_eth_dev *dev, + struct rte_flow_error *error) { uint32_t marker_mask = flow_hw_esw_mgr_regc_marker_mask(dev); uint32_t marker_bits = flow_hw_esw_mgr_regc_marker(dev); @@ -5814,7 +5827,7 @@ flow_hw_create_ctrl_regc_jump_actions_template(struct rte_eth_dev *dev) set_reg_v.dst.offset = rte_bsf32(marker_mask); rte_memcpy(set_reg_v.src.value, &marker_bits, sizeof(marker_bits)); rte_memcpy(set_reg_m.src.value, &marker_mask, sizeof(marker_mask)); - return flow_hw_actions_template_create(dev, &attr, actions_v, actions_m, NULL); + return flow_hw_actions_template_create(dev, &attr, actions_v, actions_m, error); } /** @@ -5826,13 +5839,16 @@ flow_hw_create_ctrl_regc_jump_actions_template(struct rte_eth_dev *dev) * Pointer to Ethernet device. * @param group * Destination group for this action template. + * @param error + * Pointer to error structure. * * @return * Pointer to flow actions template on success, NULL otherwise. */ static struct rte_flow_actions_template * flow_hw_create_ctrl_jump_actions_template(struct rte_eth_dev *dev, - uint32_t group) + uint32_t group, + struct rte_flow_error *error) { struct rte_flow_actions_template_attr attr = { .transfer = 1, @@ -5862,8 +5878,8 @@ flow_hw_create_ctrl_jump_actions_template(struct rte_eth_dev *dev, } }; - return flow_hw_actions_template_create(dev, &attr, actions_v, actions_m, - NULL); + return flow_hw_actions_template_create(dev, &attr, actions_v, + actions_m, error); } /** @@ -5872,12 +5888,15 @@ flow_hw_create_ctrl_jump_actions_template(struct rte_eth_dev *dev, * * @param dev * Pointer to Ethernet device. + * @param error + * Pointer to error structure. * * @return * Pointer to flow action template on success, NULL otherwise. */ static struct rte_flow_actions_template * -flow_hw_create_ctrl_port_actions_template(struct rte_eth_dev *dev) +flow_hw_create_ctrl_port_actions_template(struct rte_eth_dev *dev, + struct rte_flow_error *error) { struct rte_flow_actions_template_attr attr = { .transfer = 1, @@ -5907,8 +5926,7 @@ flow_hw_create_ctrl_port_actions_template(struct rte_eth_dev *dev) } }; - return flow_hw_actions_template_create(dev, &attr, actions_v, actions_m, - NULL); + return flow_hw_actions_template_create(dev, &attr, actions_v, actions_m, error); } /* @@ -5917,12 +5935,15 @@ flow_hw_create_ctrl_port_actions_template(struct rte_eth_dev *dev) * * @param dev * Pointer to Ethernet device. + * @param error + * Pointer to error structure. * * @return * Pointer to flow actions template on success, NULL otherwise. */ static struct rte_flow_actions_template * -flow_hw_create_tx_default_mreg_copy_actions_template(struct rte_eth_dev *dev) +flow_hw_create_tx_default_mreg_copy_actions_template(struct rte_eth_dev *dev, + struct rte_flow_error *error) { struct rte_flow_actions_template_attr tx_act_attr = { .egress = 1, @@ -5985,11 +6006,9 @@ flow_hw_create_tx_default_mreg_copy_actions_template(struct rte_eth_dev *dev) .type = RTE_FLOW_ACTION_TYPE_END, }, }; - struct rte_flow_error drop_err; - RTE_SET_USED(drop_err); return flow_hw_actions_template_create(dev, &tx_act_attr, actions, - masks, &drop_err); + masks, error); } /** @@ -6002,6 +6021,8 @@ flow_hw_create_tx_default_mreg_copy_actions_template(struct rte_eth_dev *dev) * Pointer to flow pattern template. * @param at * Pointer to flow actions template. + * @param error + * Pointer to error structure. * * @return * Pointer to flow table on success, NULL otherwise. @@ -6009,7 +6030,8 @@ flow_hw_create_tx_default_mreg_copy_actions_template(struct rte_eth_dev *dev) static struct rte_flow_template_table* flow_hw_create_ctrl_sq_miss_root_table(struct rte_eth_dev *dev, struct rte_flow_pattern_template *it, - struct rte_flow_actions_template *at) + struct rte_flow_actions_template *at, + struct rte_flow_error *error) { struct rte_flow_template_table_attr attr = { .flow_attr = { @@ -6026,7 +6048,7 @@ flow_hw_create_ctrl_sq_miss_root_table(struct rte_eth_dev *dev, .external = false, }; - return flow_hw_table_create(dev, &cfg, &it, 1, &at, 1, NULL); + return flow_hw_table_create(dev, &cfg, &it, 1, &at, 1, error); } @@ -6040,6 +6062,8 @@ flow_hw_create_ctrl_sq_miss_root_table(struct rte_eth_dev *dev, * Pointer to flow pattern template. * @param at * Pointer to flow actions template. + * @param error + * Pointer to error structure. * * @return * Pointer to flow table on success, NULL otherwise. @@ -6047,7 +6071,8 @@ flow_hw_create_ctrl_sq_miss_root_table(struct rte_eth_dev *dev, static struct rte_flow_template_table* flow_hw_create_ctrl_sq_miss_table(struct rte_eth_dev *dev, struct rte_flow_pattern_template *it, - struct rte_flow_actions_template *at) + struct rte_flow_actions_template *at, + struct rte_flow_error *error) { struct rte_flow_template_table_attr attr = { .flow_attr = { @@ -6064,7 +6089,7 @@ flow_hw_create_ctrl_sq_miss_table(struct rte_eth_dev *dev, .external = false, }; - return flow_hw_table_create(dev, &cfg, &it, 1, &at, 1, NULL); + return flow_hw_table_create(dev, &cfg, &it, 1, &at, 1, error); } /* @@ -6076,6 +6101,8 @@ flow_hw_create_ctrl_sq_miss_table(struct rte_eth_dev *dev, * Pointer to flow pattern template. * @param at * Pointer to flow actions template. + * @param error + * Pointer to error structure. * * @return * Pointer to flow table on success, NULL otherwise. @@ -6083,7 +6110,8 @@ flow_hw_create_ctrl_sq_miss_table(struct rte_eth_dev *dev, static struct rte_flow_template_table* flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev, struct rte_flow_pattern_template *pt, - struct rte_flow_actions_template *at) + struct rte_flow_actions_template *at, + struct rte_flow_error *error) { struct rte_flow_template_table_attr tx_tbl_attr = { .flow_attr = { @@ -6097,14 +6125,8 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev, .attr = tx_tbl_attr, .external = false, }; - struct rte_flow_error drop_err = { - .type = RTE_FLOW_ERROR_TYPE_NONE, - .cause = NULL, - .message = NULL, - }; - RTE_SET_USED(drop_err); - return flow_hw_table_create(dev, &tx_tbl_cfg, &pt, 1, &at, 1, &drop_err); + return flow_hw_table_create(dev, &tx_tbl_cfg, &pt, 1, &at, 1, error); } /** @@ -6117,6 +6139,8 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev, * Pointer to flow pattern template. * @param at * Pointer to flow actions template. + * @param error + * Pointer to error structure. * * @return * Pointer to flow table on success, NULL otherwise. @@ -6124,7 +6148,8 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev, static struct rte_flow_template_table * flow_hw_create_ctrl_jump_table(struct rte_eth_dev *dev, struct rte_flow_pattern_template *it, - struct rte_flow_actions_template *at) + struct rte_flow_actions_template *at, + struct rte_flow_error *error) { struct rte_flow_template_table_attr attr = { .flow_attr = { @@ -6141,7 +6166,7 @@ flow_hw_create_ctrl_jump_table(struct rte_eth_dev *dev, .external = false, }; - return flow_hw_table_create(dev, &cfg, &it, 1, &at, 1, NULL); + return flow_hw_table_create(dev, &cfg, &it, 1, &at, 1, error); } /** @@ -6150,12 +6175,14 @@ flow_hw_create_ctrl_jump_table(struct rte_eth_dev *dev, * * @param dev * Pointer to Ethernet device. + * @param error + * Pointer to error structure. * * @return - * 0 on success, EINVAL otherwise + * 0 on success, negative values otherwise */ static __rte_unused int -flow_hw_create_ctrl_tables(struct rte_eth_dev *dev) +flow_hw_create_ctrl_tables(struct rte_eth_dev *dev, struct rte_flow_error *error) { struct mlx5_priv *priv = dev->data->dev_private; struct rte_flow_pattern_template *esw_mgr_items_tmpl = NULL; @@ -6168,96 +6195,107 @@ flow_hw_create_ctrl_tables(struct rte_eth_dev *dev) struct rte_flow_actions_template *tx_meta_actions_tmpl = NULL; uint32_t xmeta = priv->sh->config.dv_xmeta_en; uint32_t repr_matching = priv->sh->config.repr_matching; + int ret; /* Create templates and table for default SQ miss flow rules - root table. */ - esw_mgr_items_tmpl = flow_hw_create_ctrl_esw_mgr_pattern_template(dev); + esw_mgr_items_tmpl = flow_hw_create_ctrl_esw_mgr_pattern_template(dev, error); if (!esw_mgr_items_tmpl) { DRV_LOG(ERR, "port %u failed to create E-Switch Manager item" " template for control flows", dev->data->port_id); - goto error; + goto err; } - regc_jump_actions_tmpl = flow_hw_create_ctrl_regc_jump_actions_template(dev); + regc_jump_actions_tmpl = flow_hw_create_ctrl_regc_jump_actions_template(dev, error); if (!regc_jump_actions_tmpl) { DRV_LOG(ERR, "port %u failed to create REG_C set and jump action template" " for control flows", dev->data->port_id); - goto error; + goto err; } MLX5_ASSERT(priv->hw_esw_sq_miss_root_tbl == NULL); priv->hw_esw_sq_miss_root_tbl = flow_hw_create_ctrl_sq_miss_root_table - (dev, esw_mgr_items_tmpl, regc_jump_actions_tmpl); + (dev, esw_mgr_items_tmpl, regc_jump_actions_tmpl, error); if (!priv->hw_esw_sq_miss_root_tbl) { DRV_LOG(ERR, "port %u failed to create table for default sq miss (root table)" " for control flows", dev->data->port_id); - goto error; + goto err; } /* Create templates and table for default SQ miss flow rules - non-root table. */ - regc_sq_items_tmpl = flow_hw_create_ctrl_regc_sq_pattern_template(dev); + regc_sq_items_tmpl = flow_hw_create_ctrl_regc_sq_pattern_template(dev, error); if (!regc_sq_items_tmpl) { DRV_LOG(ERR, "port %u failed to create SQ item template for" " control flows", dev->data->port_id); - goto error; + goto err; } - port_actions_tmpl = flow_hw_create_ctrl_port_actions_template(dev); + port_actions_tmpl = flow_hw_create_ctrl_port_actions_template(dev, error); if (!port_actions_tmpl) { DRV_LOG(ERR, "port %u failed to create port action template" " for control flows", dev->data->port_id); - goto error; + goto err; } MLX5_ASSERT(priv->hw_esw_sq_miss_tbl == NULL); priv->hw_esw_sq_miss_tbl = flow_hw_create_ctrl_sq_miss_table(dev, regc_sq_items_tmpl, - port_actions_tmpl); + port_actions_tmpl, error); if (!priv->hw_esw_sq_miss_tbl) { DRV_LOG(ERR, "port %u failed to create table for default sq miss (non-root table)" " for control flows", dev->data->port_id); - goto error; + goto err; } /* Create templates and table for default FDB jump flow rules. */ - port_items_tmpl = flow_hw_create_ctrl_port_pattern_template(dev); + port_items_tmpl = flow_hw_create_ctrl_port_pattern_template(dev, error); if (!port_items_tmpl) { DRV_LOG(ERR, "port %u failed to create SQ item template for" " control flows", dev->data->port_id); - goto error; + goto err; } jump_one_actions_tmpl = flow_hw_create_ctrl_jump_actions_template - (dev, MLX5_HW_LOWEST_USABLE_GROUP); + (dev, MLX5_HW_LOWEST_USABLE_GROUP, error); if (!jump_one_actions_tmpl) { DRV_LOG(ERR, "port %u failed to create jump action template" " for control flows", dev->data->port_id); - goto error; + goto err; } MLX5_ASSERT(priv->hw_esw_zero_tbl == NULL); priv->hw_esw_zero_tbl = flow_hw_create_ctrl_jump_table(dev, port_items_tmpl, - jump_one_actions_tmpl); + jump_one_actions_tmpl, + error); if (!priv->hw_esw_zero_tbl) { DRV_LOG(ERR, "port %u failed to create table for default jump to group 1" " for control flows", dev->data->port_id); - goto error; + goto err; } /* Create templates and table for default Tx metadata copy flow rule. */ if (!repr_matching && xmeta == MLX5_XMETA_MODE_META32_HWS) { - tx_meta_items_tmpl = flow_hw_create_tx_default_mreg_copy_pattern_template(dev); + tx_meta_items_tmpl = + flow_hw_create_tx_default_mreg_copy_pattern_template(dev, error); if (!tx_meta_items_tmpl) { DRV_LOG(ERR, "port %u failed to Tx metadata copy pattern" " template for control flows", dev->data->port_id); - goto error; + goto err; } - tx_meta_actions_tmpl = flow_hw_create_tx_default_mreg_copy_actions_template(dev); + tx_meta_actions_tmpl = + flow_hw_create_tx_default_mreg_copy_actions_template(dev, error); if (!tx_meta_actions_tmpl) { DRV_LOG(ERR, "port %u failed to Tx metadata copy actions" " template for control flows", dev->data->port_id); - goto error; + goto err; } MLX5_ASSERT(priv->hw_tx_meta_cpy_tbl == NULL); - priv->hw_tx_meta_cpy_tbl = flow_hw_create_tx_default_mreg_copy_table(dev, - tx_meta_items_tmpl, tx_meta_actions_tmpl); + priv->hw_tx_meta_cpy_tbl = + flow_hw_create_tx_default_mreg_copy_table(dev, tx_meta_items_tmpl, + tx_meta_actions_tmpl, error); if (!priv->hw_tx_meta_cpy_tbl) { DRV_LOG(ERR, "port %u failed to create table for default" " Tx metadata copy flow rule", dev->data->port_id); - goto error; + goto err; } } return 0; -error: +err: + /* Do not overwrite the rte_errno. */ + ret = -rte_errno; + if (ret == 0) + ret = rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, + "Failed to create control tables."); if (priv->hw_esw_zero_tbl) { flow_hw_table_destroy(dev, priv->hw_esw_zero_tbl, NULL); priv->hw_esw_zero_tbl = NULL; @@ -6286,7 +6324,7 @@ error: flow_hw_pattern_template_destroy(dev, regc_sq_items_tmpl, NULL); if (esw_mgr_items_tmpl) flow_hw_pattern_template_destroy(dev, esw_mgr_items_tmpl, NULL); - return -EINVAL; + return ret; } static void @@ -6995,11 +7033,9 @@ flow_hw_configure(struct rte_eth_dev *dev, NULL, "Failed to create vport actions."); goto err; } - ret = flow_hw_create_ctrl_tables(dev); - if (ret) { - rte_errno = -ret; + ret = flow_hw_create_ctrl_tables(dev, error); + if (ret) goto err; - } } if (port_attr->nb_conn_tracks) { mem_size = sizeof(struct mlx5_aso_sq) * nb_q_updated + -- 2.25.1 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2023-08-09 21:51:20.105964700 +0800 +++ 0076-net-mlx5-fix-error-set-in-control-tables-create.patch 2023-08-09 21:51:18.234352000 +0800 @@ -1 +1 @@ -From 0dc3b3d06823770c85eacd5b9f70132e69ac75b2 Mon Sep 17 00:00:00 2001 +From 6f086a7a7497e454ec00b842a1f578bbf302c16b Mon Sep 17 00:00:00 2001 @@ -4,0 +5,3 @@ +Cc: Xueming Li + +[ upstream commit 0dc3b3d06823770c85eacd5b9f70132e69ac75b2 ] @@ -15 +17,0 @@ -Cc: stable@dpdk.org @@ -25 +27 @@ -index 0a9b7700e0..94179ff747 100644 +index ccd78990a6..3a1b3dfd06 100644 @@ -28 +30 @@ -@@ -5425,7 +5425,7 @@ flow_hw_pattern_template_create(struct rte_eth_dev *dev, +@@ -4814,7 +4814,7 @@ flow_hw_pattern_template_create(struct rte_eth_dev *dev, @@ -37 +39 @@ -@@ -6246,12 +6246,15 @@ flow_hw_esw_mgr_regc_marker(struct rte_eth_dev *dev) +@@ -5573,12 +5573,15 @@ flow_hw_esw_mgr_regc_marker(struct rte_eth_dev *dev) @@ -54 +56 @@ -@@ -6281,7 +6284,7 @@ flow_hw_create_ctrl_esw_mgr_pattern_template(struct rte_eth_dev *dev) +@@ -5608,7 +5611,7 @@ flow_hw_create_ctrl_esw_mgr_pattern_template(struct rte_eth_dev *dev) @@ -63 +65 @@ -@@ -6294,12 +6297,15 @@ flow_hw_create_ctrl_esw_mgr_pattern_template(struct rte_eth_dev *dev) +@@ -5621,12 +5624,15 @@ flow_hw_create_ctrl_esw_mgr_pattern_template(struct rte_eth_dev *dev) @@ -80 +82 @@ -@@ -6332,7 +6338,7 @@ flow_hw_create_ctrl_regc_sq_pattern_template(struct rte_eth_dev *dev) +@@ -5659,7 +5665,7 @@ flow_hw_create_ctrl_regc_sq_pattern_template(struct rte_eth_dev *dev) @@ -89 +91 @@ -@@ -6342,12 +6348,15 @@ flow_hw_create_ctrl_regc_sq_pattern_template(struct rte_eth_dev *dev) +@@ -5669,12 +5675,15 @@ flow_hw_create_ctrl_regc_sq_pattern_template(struct rte_eth_dev *dev) @@ -106 +108 @@ -@@ -6366,7 +6375,7 @@ flow_hw_create_ctrl_port_pattern_template(struct rte_eth_dev *dev) +@@ -5693,7 +5702,7 @@ flow_hw_create_ctrl_port_pattern_template(struct rte_eth_dev *dev) @@ -115 +117 @@ -@@ -6376,12 +6385,15 @@ flow_hw_create_ctrl_port_pattern_template(struct rte_eth_dev *dev) +@@ -5703,12 +5712,15 @@ flow_hw_create_ctrl_port_pattern_template(struct rte_eth_dev *dev) @@ -132 +134 @@ -@@ -6402,10 +6414,8 @@ flow_hw_create_tx_default_mreg_copy_pattern_template(struct rte_eth_dev *dev) +@@ -5729,10 +5741,8 @@ flow_hw_create_tx_default_mreg_copy_pattern_template(struct rte_eth_dev *dev) @@ -144 +146 @@ -@@ -6416,12 +6426,15 @@ flow_hw_create_tx_default_mreg_copy_pattern_template(struct rte_eth_dev *dev) +@@ -5743,12 +5753,15 @@ flow_hw_create_tx_default_mreg_copy_pattern_template(struct rte_eth_dev *dev) @@ -161 +163 @@ -@@ -6488,7 +6501,7 @@ flow_hw_create_ctrl_regc_jump_actions_template(struct rte_eth_dev *dev) +@@ -5814,7 +5827,7 @@ flow_hw_create_ctrl_regc_jump_actions_template(struct rte_eth_dev *dev) @@ -170 +172 @@ -@@ -6500,13 +6513,16 @@ flow_hw_create_ctrl_regc_jump_actions_template(struct rte_eth_dev *dev) +@@ -5826,13 +5839,16 @@ flow_hw_create_ctrl_regc_jump_actions_template(struct rte_eth_dev *dev) @@ -188 +190 @@ -@@ -6536,8 +6552,8 @@ flow_hw_create_ctrl_jump_actions_template(struct rte_eth_dev *dev, +@@ -5862,8 +5878,8 @@ flow_hw_create_ctrl_jump_actions_template(struct rte_eth_dev *dev, @@ -199 +201 @@ -@@ -6546,12 +6562,15 @@ flow_hw_create_ctrl_jump_actions_template(struct rte_eth_dev *dev, +@@ -5872,12 +5888,15 @@ flow_hw_create_ctrl_jump_actions_template(struct rte_eth_dev *dev, @@ -216 +218 @@ -@@ -6581,8 +6600,7 @@ flow_hw_create_ctrl_port_actions_template(struct rte_eth_dev *dev) +@@ -5907,8 +5926,7 @@ flow_hw_create_ctrl_port_actions_template(struct rte_eth_dev *dev) @@ -226 +228 @@ -@@ -6591,12 +6609,15 @@ flow_hw_create_ctrl_port_actions_template(struct rte_eth_dev *dev) +@@ -5917,12 +5935,15 @@ flow_hw_create_ctrl_port_actions_template(struct rte_eth_dev *dev) @@ -243 +245 @@ -@@ -6661,11 +6682,9 @@ flow_hw_create_tx_default_mreg_copy_actions_template(struct rte_eth_dev *dev) +@@ -5985,11 +6006,9 @@ flow_hw_create_tx_default_mreg_copy_actions_template(struct rte_eth_dev *dev) @@ -256 +258 @@ -@@ -6678,6 +6697,8 @@ flow_hw_create_tx_default_mreg_copy_actions_template(struct rte_eth_dev *dev) +@@ -6002,6 +6021,8 @@ flow_hw_create_tx_default_mreg_copy_actions_template(struct rte_eth_dev *dev) @@ -265 +267 @@ -@@ -6685,7 +6706,8 @@ flow_hw_create_tx_default_mreg_copy_actions_template(struct rte_eth_dev *dev) +@@ -6009,7 +6030,8 @@ flow_hw_create_tx_default_mreg_copy_actions_template(struct rte_eth_dev *dev) @@ -275 +277 @@ -@@ -6702,7 +6724,7 @@ flow_hw_create_ctrl_sq_miss_root_table(struct rte_eth_dev *dev, +@@ -6026,7 +6048,7 @@ flow_hw_create_ctrl_sq_miss_root_table(struct rte_eth_dev *dev, @@ -284 +286 @@ -@@ -6716,6 +6738,8 @@ flow_hw_create_ctrl_sq_miss_root_table(struct rte_eth_dev *dev, +@@ -6040,6 +6062,8 @@ flow_hw_create_ctrl_sq_miss_root_table(struct rte_eth_dev *dev, @@ -293 +295 @@ -@@ -6723,7 +6747,8 @@ flow_hw_create_ctrl_sq_miss_root_table(struct rte_eth_dev *dev, +@@ -6047,7 +6071,8 @@ flow_hw_create_ctrl_sq_miss_root_table(struct rte_eth_dev *dev, @@ -303 +305 @@ -@@ -6740,7 +6765,7 @@ flow_hw_create_ctrl_sq_miss_table(struct rte_eth_dev *dev, +@@ -6064,7 +6089,7 @@ flow_hw_create_ctrl_sq_miss_table(struct rte_eth_dev *dev, @@ -312 +314 @@ -@@ -6752,6 +6777,8 @@ flow_hw_create_ctrl_sq_miss_table(struct rte_eth_dev *dev, +@@ -6076,6 +6101,8 @@ flow_hw_create_ctrl_sq_miss_table(struct rte_eth_dev *dev, @@ -321 +323 @@ -@@ -6759,7 +6786,8 @@ flow_hw_create_ctrl_sq_miss_table(struct rte_eth_dev *dev, +@@ -6083,7 +6110,8 @@ flow_hw_create_ctrl_sq_miss_table(struct rte_eth_dev *dev, @@ -331 +333 @@ -@@ -6773,14 +6801,8 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev, +@@ -6097,14 +6125,8 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev, @@ -347 +349 @@ -@@ -6793,6 +6815,8 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev, +@@ -6117,6 +6139,8 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev, @@ -356 +358 @@ -@@ -6800,7 +6824,8 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev, +@@ -6124,7 +6148,8 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev, @@ -366 +368 @@ -@@ -6817,7 +6842,7 @@ flow_hw_create_ctrl_jump_table(struct rte_eth_dev *dev, +@@ -6141,7 +6166,7 @@ flow_hw_create_ctrl_jump_table(struct rte_eth_dev *dev, @@ -375 +377 @@ -@@ -6826,12 +6851,14 @@ flow_hw_create_ctrl_jump_table(struct rte_eth_dev *dev, +@@ -6150,12 +6175,14 @@ flow_hw_create_ctrl_jump_table(struct rte_eth_dev *dev, @@ -392 +394 @@ -@@ -6844,96 +6871,107 @@ flow_hw_create_ctrl_tables(struct rte_eth_dev *dev) +@@ -6168,96 +6195,107 @@ flow_hw_create_ctrl_tables(struct rte_eth_dev *dev) @@ -526 +528 @@ -@@ -6962,7 +7000,7 @@ error: +@@ -6286,7 +6324,7 @@ error: @@ -535 +537 @@ -@@ -7835,11 +7873,9 @@ flow_hw_configure(struct rte_eth_dev *dev, +@@ -6995,11 +7033,9 @@ flow_hw_configure(struct rte_eth_dev *dev, @@ -547,2 +549,2 @@ - if (!priv->shared_host) - flow_hw_create_send_to_kernel_actions(priv); + if (port_attr->nb_conn_tracks) { + mem_size = sizeof(struct mlx5_aso_sq) * nb_q_updated +