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 36400465A6 for ; Wed, 16 Apr 2025 11:07:45 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0E0AD406B8; Wed, 16 Apr 2025 11:07:45 +0200 (CEST) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2054.outbound.protection.outlook.com [40.107.94.54]) by mails.dpdk.org (Postfix) with ESMTP id 7D157406B8 for ; Wed, 16 Apr 2025 11:07:43 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UfyHH3Sumk/ZHRmmEp2ARDYwa/EhxhqThd26hwggrhFlwzW0x+RlGwYoOf1FJVohdIxWfhnCRoG/RbDZIWm0sthRmzgF85tN6WCyXQYwiI5dYIjfBTXx6rVNAytj8aDB6CC1tq3+IcsHvAix2BXQKw7YJvTSAYc47tnnQ9AyjRV8I/AfyWocQUgiLgT4uHPSZir7Vtrbt9Te3UThvvb9KtL+zo2stAYIKFN+7jbsbDi+VCZqDj51bebaTGqII8EOmjRabkzkWAF0lVvy9FvW0Ie2L7MIkXA/3x2pkHrpcX8wMGxkJr8kYg9TZM6tSH37emlEROr9o2+n1eAqrZpXvA== 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=RZRljHXjPu4hn3CvPY7FmJzNzjiHai/SsJd2DObmbJ4=; b=o2U2UTZ8CrV+Vg63eV+MHd5bdpT66YhXOpH790Z/lV3YLHvP/UQ8l57cVI4uMqlsLPf9OjLDw2T4H/cD63RPbFrhKuU9U1zE8+KL/mNJJ/xTtBZF2ORu0MV5AHjjmKlAyZTO9KgpGQJUVU5kIkUuoRJtypIhDWdU7hJeObIdTGoj6lTlyYyu9nXi/h71LkiXLZZ/93igIHrf/iBFYbfXvGZRmcUPCJMShyHWwoZynUpC/Qo0U7xoL5tJ4xrItbXXwxktcQLR7dbPl+mDW3NU4aBLQdsKio+YIlqCQ06+eDmaIzH1VslMkQ58UeE91TsE8CuGeQ39yTqBPgsrX+Rcag== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; 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=RZRljHXjPu4hn3CvPY7FmJzNzjiHai/SsJd2DObmbJ4=; b=hlQy7wQjXhcdO7MlKBzWlZG5iuq8REMscFNQcr8k5S9pQouspgTL1CJbqa3nIBPeNu+PQyuXQnZ5IVJ3YifOyHmptQsvht5m+UqEFfvgaTBf3XF7XuGXJqSe4+Y9PmP6DddkaOBA31+l55/iNzgCAP0rdDul1mYCUFBmwwcCOBPpIAKBp+Vn45PXagpKntwkOs/By0RiQ96zNOiHxTLLnRjR9xGG0UhaZOjeLjHE6Toy5ghy/43m81jxLwnrSCPIUF4xYBKU8y38Xex5vre7FzDzajJucGNhxzhMLD2KqLqczBhNKWRqUBayFekzDb0YC6A7HLqdWBeEguvgD7xLPA== Received: from CH3PR12MB8658.namprd12.prod.outlook.com (2603:10b6:610:175::8) by CY5PR12MB6105.namprd12.prod.outlook.com (2603:10b6:930:2a::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.32; Wed, 16 Apr 2025 09:07:35 +0000 Received: from CH3PR12MB8658.namprd12.prod.outlook.com ([fe80::d5cc:cc84:5e00:2f42]) by CH3PR12MB8658.namprd12.prod.outlook.com ([fe80::d5cc:cc84:5e00:2f42%6]) with mapi id 15.20.8655.021; Wed, 16 Apr 2025 09:07:35 +0000 From: Xueming Li To: Junfeng Guo , "stable@dpdk.org" CC: Dariusz Sosnowski , Slava Ovsiienko , Bing Zhao , Ori Kam , Suanming Mou , Matan Azrad Subject: Re: [PATCH 23.11] net/mlx5: fix actions translation error overwrite Thread-Topic: [PATCH 23.11] net/mlx5: fix actions translation error overwrite Thread-Index: AQHbqRnKoMGjEbtO30SIyzW/9+Is7rOmC6l4 Date: Wed, 16 Apr 2025 09:07:35 +0000 Message-ID: References: <20250409063559.288037-1-junfengg@nvidia.com> In-Reply-To: <20250409063559.288037-1-junfengg@nvidia.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CH3PR12MB8658:EE_|CY5PR12MB6105:EE_ x-ms-office365-filtering-correlation-id: e5f7d59a-c5e0-4e13-fe2a-08dd7cc620fe x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|376014|1800799024|366016|8096899003|7053199007|38070700018; x-microsoft-antispam-message-info: =?iso-8859-1?Q?o2ApNCdkFYqPBI1Xn6O0pOyw7DZZSL4iHOgu/lZRMmmE3Ie2FMBoY6wDcM?= =?iso-8859-1?Q?JBjni6GBH8B6gBjK+LMub1FvKhs+jBhkUM/p4Oy3CSNd6aefWL+Sc27qAl?= =?iso-8859-1?Q?Yfntn8pyOTtdMMuxozEX/KrYEBhpNj/iCjco8GUYu30+9IPzOV6vt+46GT?= =?iso-8859-1?Q?VqxQ8RGshGNBR/rkpIyQaGqzdR4VVGvprI95LkmmRseFANheK4bpTUz7TZ?= =?iso-8859-1?Q?2Vud60VrtYT2S1vyV/uyBi9HhlDG6Qft0Ru6BUiAgaVsxGFWSSkz6TO2zu?= =?iso-8859-1?Q?Kh2kY1FArr6mPe5IkQOdsn7U8oJJVMEm/9MO98PDa/4t2LXD8R87JmAhxD?= =?iso-8859-1?Q?+ZZM1dDJqkiOCT524Vq+NT17b6JGZKmBsXSVwv97CHlUA19w0y7LbyWLdT?= =?iso-8859-1?Q?MyEnXF8LGry2LiHUz/6YDTLV7xlUucZuCG7Sz1iiZefS0ddnwWiKnu9Z89?= =?iso-8859-1?Q?mzmwMXS27sEVs75m8A4UGqNkf8j/LX2MSWm2GAN/ZhNFE0thcCaB6LufGP?= =?iso-8859-1?Q?lfwvy0tG8g3sWFY1SmRlQgDMqf8gR+ZoxMeZCIcferdbOyodygEeT+nwF8?= =?iso-8859-1?Q?0KSPML1U52MvM2Z8ikhINECc3UynGYwI6LNkp8XEcHfq3MemtQICZc0Bti?= =?iso-8859-1?Q?5GmKiaSx99oSv8SCIVWwyOtDKWGgtINzpQBlY9SMOAPKS+SIppVj4WqzKF?= =?iso-8859-1?Q?VbGckIv2IN1wiRQkZMaNlwFDjl1bnhJUBRHsPzQAqQZBUHE87OB27dW0oq?= =?iso-8859-1?Q?3RCfjKX6rA/qcMYxE/5mB9PYmJDU7kbPei4LD1A7dGkfWCEegJ/2OT1PR/?= =?iso-8859-1?Q?JprwKZdI9onlSAcNSqscH6Ps5OQ/GiOWzwDT5KXp9pQwfNb3cfgGzxlHmg?= =?iso-8859-1?Q?RABmb0iP0xgfc5nx3bfrgSaCsy8B9ZUjDfY2e90H+INO/tEM1A/V13UvVx?= =?iso-8859-1?Q?MpxXWjSRly06V4RJK8AHexy3B9HReU/c0zGPUby/S2JxbP1gbHmfwWhEoH?= =?iso-8859-1?Q?1wHNlqOBlpp14MVWsHWbSDpX8Qpkd9yWdsVotKe8uAW3fkTClufnjkIsHt?= =?iso-8859-1?Q?8WN7YYhKBgeUeLio7B2uTgCDvUr0n+k5AFmYRY690qTG2ScK9kouxAKCg8?= =?iso-8859-1?Q?BzJHSA7mD1LmtotsYb3R3Z3Iv8R4L4UphjgqIFQFpUhwfi6lTc2ZFYgEGB?= =?iso-8859-1?Q?T48MG4vwUGgLHUzFoRDXzxkeEsxQABg4s6GM5gsvEfmRWCc/uyKGdz3TUa?= =?iso-8859-1?Q?aYemCm+Vtv2rfuGPzMiaC2xtRcgEK0TploM+QEvbuOTrVK9xvIUR/RazBa?= =?iso-8859-1?Q?jzzzec7VPlhMdS47Jjq9cn1VQbFfcPgHHHZ7bqPvDKL+7A4ATzyUgVSEKA?= =?iso-8859-1?Q?d/49i2+z/Mq+z6oisPRWjEbHU/Nrlf9bbuLHYlBwhL/RQQmzYacbkcu1qM?= =?iso-8859-1?Q?St36gebCM7h1UW7ORGeLvjz5+ULRBxFns8ZexDQRv7QJhwn5bwE4PkkKWX?= =?iso-8859-1?Q?HHiKPHdTWF2BVGaOEvWi3i3KjmqU9rM2NBsldgdFzFkzkVOqZnXY1A7Pq0?= =?iso-8859-1?Q?/iKvWOo=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH3PR12MB8658.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(8096899003)(7053199007)(38070700018); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?HhKqKQ1fluFZLOMP6iFC4XklQ24rRVZDTI8JReMPuIWvuVDE38YRX2arWF?= =?iso-8859-1?Q?pym1GVvf5uuNA1in2/BX4BtxMbRJ1WHrzRgRmVcTTzySYfQEADXDuWKRRG?= =?iso-8859-1?Q?tl5TNqnIMZDNwbtOonJsBURawfqOJu6Q/rv/hreS2iibeLBloqliwqyW/H?= =?iso-8859-1?Q?9ycwig4pZtG1SaGelmZUCoCDOlmKrx3JE0S8IkXxwWQXo5O9i7iRbSaImo?= =?iso-8859-1?Q?1kbJESXCEokk/1XxKyjwtDFnz5x5xLdiIzJKAaci0TRH0q3/ewIrT9XDHR?= =?iso-8859-1?Q?HcEWbvE81tOtmsdeEFgjkA8w/V1aksuVkkX9e5zJ75/sazqpz/0EHG6fvc?= =?iso-8859-1?Q?iOiSZakQm5fD3eTHmcNHWxCERbySjKT10JbfMm80EXv4QhelLkSfPuz6RB?= =?iso-8859-1?Q?5yqF4IGv1ZXFeJnbFaZYA3Cf7Qg0QetDQlALx5HXqieQjJnBPHc+4O/9LD?= =?iso-8859-1?Q?JZOnW0u1j9BdOXL52d93GeNSvIOpCtNVO7s49TI90pi4OOmJogY/m9J2AR?= =?iso-8859-1?Q?7gZM8rjqyrJNhkHeGtSLY+gmZFBPhqq/WuC/Bi6hqRe2lGR3NPl/OZbFsw?= =?iso-8859-1?Q?1WmDYZGLFT32DVfEVlZlP9QrZhQurl/IaoCWlmf5ZldTDnRNHp6kc3SO3P?= =?iso-8859-1?Q?NMae+SyOK7QDkvXvKJ3F2kbyF5frXHQgJvWkiZybO9BzsAac7wCmR+ta6J?= =?iso-8859-1?Q?A6GCi5yQDG05FWPIcbmZtf9+Oxxtwuj+gpk57zsa9Xod2tWENgEZr3N6qd?= =?iso-8859-1?Q?Coapd8LxyR6C9PU06MUldcAqmibHgUu1AHcPM5Ug7XBg0sG9nqSCLtNTgW?= =?iso-8859-1?Q?+gHxU+RqfhnLMtlLpRk8LhKiXlVzljkwfFq6WRF/BWJdBylYLBdLGJhYnu?= =?iso-8859-1?Q?37ro2mjeYw+E21S5ntNupWLtrAPIR91ysoUAqPcWDVjBoWxGhOYa4jhF6W?= =?iso-8859-1?Q?IJqLChaPS70uT+wTiqOkIyQQq7h+NhJMeNJhDAwYWOdYGz5+dYeE90T0ZG?= =?iso-8859-1?Q?oX0p2NE9hSsvFiQUnWd1s+AZGuLjZs7iwgYbNdoFHnUh03iKyCOnQA7FOi?= =?iso-8859-1?Q?IfQnxnmPcnD7FpntxZ0iEg1xY/+yFljVQSQHmka9NecEvkdw7RCZSfp6iK?= =?iso-8859-1?Q?CxygJvghpB27xtg8EOE5iVqOVbdtU2E201nprnRX9KanCsilEC/ukaoDQm?= =?iso-8859-1?Q?bhgtBEUJ7TAMZxM4eCRJcaM6p53PJV52WihKbzphu+IjtoXtD566KDAlGJ?= =?iso-8859-1?Q?cE9r8BkjC5cmny+qXah6TPy5wBRquOomS7TxB+/vEjvEW9KY38w9rO5z0q?= =?iso-8859-1?Q?j7FKSKDqImigbjnVFLMQI0l/3sQFjWvxgHrgYwJGuOPo8dHrN6nD3e8t5t?= =?iso-8859-1?Q?3iM2q8GKFKlHiC1bI6YyArTGo+HSbck6hokdmqmWSntztLDTJa3Ggt4Udc?= =?iso-8859-1?Q?bzxMKkzCgfslpcM7lzeHGlg6S4q6iio+6+2mGDDNEKEl4HjsMMzErHPKTc?= =?iso-8859-1?Q?EpcHEwOSn+bPtnlmiAimX9BF+rvDlTnlNDKTG5YOrQazGbMo/rRmreITxR?= =?iso-8859-1?Q?MhrglYKsmWjPH08zvBjeMRMP/YNoaW0ZkagZ6mmUk/OHwUQgwnQcTWHXas?= =?iso-8859-1?Q?WRxyCKX2fvrAq7YVJHMB5elqq0inbTj0gZ?= Content-Type: multipart/alternative; boundary="_000_CH3PR12MB8658EFEB2AF6A6B5FD1D64FBA1BD2CH3PR12MB8658namp_" MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CH3PR12MB8658.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e5f7d59a-c5e0-4e13-fe2a-08dd7cc620fe X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Apr 2025 09:07:35.5319 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: DUkmhKdhUXBi2zKfR+1OlXJm2MEjcfVV3dwa4kgMfDAQ8Ec6KMPNz9ofE1LxIK3Nn15pnS5itmZnoLCVcAjHbQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6105 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 --_000_CH3PR12MB8658EFEB2AF6A6B5FD1D64FBA1BD2CH3PR12MB8658namp_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Thanks very much, patch enlisted to 23.11.4 release queue. ________________________________ From: Junfeng Guo Sent: Wednesday, April 9, 2025 2:35 PM To: stable@dpdk.org Cc: Dariusz Sosnowski ; Slava Ovsiienko ; Bing Zhao ; Ori Kam ; Sua= nming Mou ; Matan Azrad ; Xueming L= i Subject: [PATCH 23.11] net/mlx5: fix actions translation error overwrite [ upstream commit 494da70e289c6a603185c890111f95568eb1fd63 ] Function __flow_hw_translate_actions_template contains several encapsulated functions that already have internal error handling process via rte_flow_error_set for each case. Thus the one (rte_flow_error_set) within the goto statement `err` at the end of __flow_hw_translate_actions_template function may be redundant for those failed cases. As a result, the error messages would all be overwritten as "fail to create rte table", making it displayed at quite large granularity. To prevent above error messages overwrite, this patch add a local variable `struct rte_flow_error sub_error` to the function and pass this `sub_error` instead of `error` to each sub-function. Under error handling process (`err` label), if `sub_error` was updated, copy its contents to `error` and return. If it was not updated, return default error message (`fail to create rte table`). Also refactor the logic for SEND_TO_KERNEL, COUNT and AGE actions in above function to align the error handling process. Fixes: f13fab23922b ("net/mlx5: add flow jump action") Cc: suanmingm@nvidia.com Cc: stable@dpdk.org Signed-off-by: Junfeng Guo --- .mailmap | 2 +- drivers/net/mlx5/mlx5_flow_hw.c | 55 ++++++++++++++++++++------------- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/.mailmap b/.mailmap index 7b2798a31a..20fa4a22ba 100644 --- a/.mailmap +++ b/.mailmap @@ -721,7 +721,7 @@ Julien Hascoet Julien Massonneau Julien Meunier J=FAlius Milan -Junfeng Guo +Junfeng Guo Junjie Chen Junjie Wan Jun Qiu diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_h= w.c index 54f264a03c..c53d407746 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -2138,6 +2138,11 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, uint8_t *push_data =3D NULL, *push_data_m =3D NULL; size_t data_size =3D 0, push_size =3D 0; struct mlx5_hw_modify_header_action mhdr =3D { 0 }; + struct rte_flow_error sub_error =3D { + .type =3D RTE_FLOW_ERROR_TYPE_NONE, + .cause =3D NULL, + .message =3D NULL, + }; bool actions_end =3D false; uint32_t type; bool reformat_used =3D false; @@ -2246,7 +2251,7 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, ((const struct rte_flow_action_jum= p *) actions->conf)->group; acts->jump =3D flow_hw_jump_action_registe= r - (dev, cfg, jump_group, erro= r); + (dev, cfg, jump_group, &sub= _error); if (!acts->jump) goto err; acts->rule_acts[dr_pos].action =3D (!!attr= ->group) ? @@ -2379,13 +2384,14 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev= , break; case RTE_FLOW_ACTION_TYPE_SEND_TO_KERNEL: flow_hw_translate_group(dev, cfg, attr->group, - &target_grp, error); + &target_grp, &sub_error); if (target_grp =3D=3D 0) { __flow_hw_action_template_destroy(dev, act= s); - return rte_flow_error_set(error, ENOTSUP, - RTE_FLOW_ERROR_TYPE_ACTION, - NULL, - "Send to kernel action on r= oot table is not supported in HW steering mode"); + rte_flow_error_set(&sub_error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ACTION, + NULL, + "Send to kernel action on root tabl= e is not supported in HW steering mode"); + goto err; } table_type =3D attr->ingress ? MLX5DR_TABLE_TYPE_N= IC_RX : ((attr->egress) ? MLX5DR_TABLE_TYPE_N= IC_TX : @@ -2395,14 +2401,14 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev= , case RTE_FLOW_ACTION_TYPE_MODIFY_FIELD: err =3D flow_hw_modify_field_compile(dev, attr, ac= tions, masks, acts, &m= hdr, - src_pos, error); + src_pos, &sub_er= ror); if (err) goto err; break; case RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT: if (flow_hw_represented_port_compile (dev, attr, actions, - masks, acts, src_pos, dr_pos, erro= r)) + masks, acts, src_pos, dr_pos, &sub= _error)) goto err; break; case RTE_FLOW_ACTION_TYPE_METER: @@ -2416,7 +2422,8 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, ((const struct rte_flow_action_meter *) masks->conf)->mtr_id) { err =3D flow_hw_meter_compile(dev, cfg, - dr_pos, jump_po= s, actions, acts, error); + dr_pos, jump_po= s, actions, acts, + &sub_error); if (err) goto err; } else if (__flow_hw_act_data_general_append(priv,= acts, @@ -2427,13 +2434,14 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev= , break; case RTE_FLOW_ACTION_TYPE_AGE: flow_hw_translate_group(dev, cfg, attr->group, - &target_grp, error); + &target_grp, &sub_error); if (target_grp =3D=3D 0) { __flow_hw_action_template_destroy(dev, act= s); - return rte_flow_error_set(error, ENOTSUP, - RTE_FLOW_ERROR_TYPE_ACTION, - NULL, - "Age action on root table i= s not supported in HW steering mode"); + rte_flow_error_set(&sub_error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ACTION, + NULL, + "Age action on root table is not su= pported in HW steering mode"); + goto err; } if (__flow_hw_act_data_general_append(priv, acts, actions->typ= e, @@ -2443,13 +2451,14 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev= , break; case RTE_FLOW_ACTION_TYPE_COUNT: flow_hw_translate_group(dev, cfg, attr->group, - &target_grp, error); + &target_grp, &sub_error); if (target_grp =3D=3D 0) { __flow_hw_action_template_destroy(dev, act= s); - return rte_flow_error_set(error, ENOTSUP, - RTE_FLOW_ERROR_TYPE_ACTION, - NULL, - "Counter action on root tab= le is not supported in HW steering mode"); + rte_flow_error_set(&sub_error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ACTION, + NULL, + "Counter action on root table is no= t supported in HW steering mode"); + goto err; } if ((at->action_flags & MLX5_FLOW_ACTION_AGE) || (at->action_flags & MLX5_FLOW_ACTION_INDIRECT_= AGE)) @@ -2519,7 +2528,7 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, } if (mhdr.pos !=3D UINT16_MAX) { ret =3D mlx5_tbl_translate_modify_header(dev, cfg, acts, m= p_ctx, - &mhdr, error); + &mhdr, &sub_error); if (ret) goto err; } @@ -2529,7 +2538,7 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, encap_data, encap_data_m= , mp_ctx, data_size, reformat_src, - refmt_type, error); + refmt_type, &sub_error); if (ret) goto err; } @@ -2548,6 +2557,10 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, rte_errno =3D EINVAL; err =3D rte_errno; __flow_hw_action_template_destroy(dev, acts); + if (error !=3D NULL && sub_error.type !=3D RTE_FLOW_ERROR_TYPE_NONE= ) { + rte_memcpy(error, &sub_error, sizeof(sub_error)); + return -EINVAL; + } return rte_flow_error_set(error, err, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL, "fail to create rte table"); -- 2.34.1 --_000_CH3PR12MB8658EFEB2AF6A6B5FD1D64FBA1BD2CH3PR12MB8658namp_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Thanks very much, patch enlisted to 23.11.4 release queue.

From: Junfeng Guo <junfe= ngg@nvidia.com>
Sent: Wednesday, April 9, 2025 2:35 PM
To: stable@dpdk.org <stable@dpdk.org>
Cc: Dariusz Sosnowski <dsosnowski@nvidia.com>; Slava Ovsiienko= <viacheslavo@nvidia.com>; Bing Zhao <bingz@nvidia.com>; Ori Ka= m <orika@nvidia.com>; Suanming Mou <suanmingm@nvidia.com>; Mata= n Azrad <matan@nvidia.com>; Xueming Li <xuemingl@nvidia.com> Subject: [PATCH 23.11] net/mlx5: fix actions translation error overw= rite
 
[ upstream commit 494da70e289c6a603185c890111f9556= 8eb1fd63 ]

Function __flow_hw_translate_actions_template contains several
encapsulated functions that already have internal error handling
process via rte_flow_error_set for each case.

Thus the one (rte_flow_error_set) within the goto statement `err`
at the end of __flow_hw_translate_actions_template function may be
redundant for those failed cases. As a result, the error messages
would all be overwritten as "fail to create rte table", making it=
displayed at quite large granularity.

To prevent above error messages overwrite, this patch add a local
variable `struct rte_flow_error sub_error` to the function and pass
this `sub_error` instead of `error` to each sub-function. Under error
handling process (`err` label), if `sub_error` was updated, copy its
contents to `error` and return. If it was not updated, return default
error message (`fail to create rte table`).

Also refactor the logic for SEND_TO_KERNEL, COUNT and AGE actions in
above function to align the error handling process.

Fixes: f13fab23922b ("net/mlx5: add flow jump action")
Cc: suanmingm@nvidia.com
Cc: stable@dpdk.org

Signed-off-by: Junfeng Guo <junfengg@nvidia.com>
---
 .mailmap          &= nbsp;           &nbs= p; |  2 +-
 drivers/net/mlx5/mlx5_flow_hw.c | 55 ++++++++++++++++++++------------= -
 2 files changed, 35 insertions(+), 22 deletions(-)

diff --git a/.mailmap b/.mailmap
index 7b2798a31a..20fa4a22ba 100644
--- a/.mailmap
+++ b/.mailmap
@@ -721,7 +721,7 @@ Julien Hascoet <ju.hascoet@gmail.com>
 Julien Massonneau <julien.massonneau@6wind.com>
 Julien Meunier <julien.meunier@nokia.com> <julien.meunier@6w= ind.com>
 J=FAlius Milan <jmilan.dev@gmail.com>
-Junfeng Guo <junfeng.guo@intel.com>
+Junfeng Guo <junfengg@nvidia.com> <junfeng.guo@intel.com>
 Junjie Chen <junjie.j.chen@intel.com>
 Junjie Wan <wanjunjie@bytedance.com>
 Jun Qiu <jun.qiu@jaguarmicro.com>
diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_h= w.c
index 54f264a03c..c53d407746 100644
--- a/drivers/net/mlx5/mlx5_flow_hw.c
+++ b/drivers/net/mlx5/mlx5_flow_hw.c
@@ -2138,6 +2138,11 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev,=
         uint8_t *push_data =3D NUL= L, *push_data_m =3D NULL;
         size_t data_size =3D 0, pu= sh_size =3D 0;
         struct mlx5_hw_modify_head= er_action mhdr =3D { 0 };
+       struct rte_flow_error sub_error =3D {=
+            &n= bsp;  .type =3D RTE_FLOW_ERROR_TYPE_NONE,
+            &n= bsp;  .cause =3D NULL,
+            &n= bsp;  .message =3D NULL,
+       };
         bool actions_end =3D false= ;
         uint32_t type;
         bool reformat_used =3D fal= se;
@@ -2246,7 +2251,7 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev,<= br>             &nb= sp;            =             &nb= sp;   ((const struct rte_flow_action_jump *)
            &nb= sp;            =             &nb= sp;   actions->conf)->group;
            &nb= sp;            =         acts->jump =3D flow_hw_jump_a= ction_register
-            &n= bsp;            = ;            &n= bsp;         (dev, cfg, jump_group,= error);
+            &n= bsp;            = ;            &n= bsp;         (dev, cfg, jump_group,= &sub_error);
            &nb= sp;            =         if (!acts->jump)
            &nb= sp;            =             &nb= sp;   goto err;
            &nb= sp;            =         acts->rule_acts[dr_pos].actio= n =3D (!!attr->group) ?
@@ -2379,13 +2384,14 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev= ,
            &nb= sp;            break= ;
            &nb= sp;    case RTE_FLOW_ACTION_TYPE_SEND_TO_KERNEL:
            &nb= sp;            flow_= hw_translate_group(dev, cfg, attr->group,
-            &n= bsp;            = ;            &n= bsp;         &target_grp, error= );
+            &n= bsp;            = ;            &n= bsp;         &target_grp, &= sub_error);
            &nb= sp;            if (t= arget_grp =3D=3D 0) {
            &nb= sp;            =         __flow_hw_action_template_destro= y(dev, acts);
-            &n= bsp;            = ;      return rte_flow_error_set(error, ENOTSUP, -            &n= bsp;            = ;            &n= bsp;         RTE_FLOW_ERROR_TYPE_AC= TION,
-            &n= bsp;            = ;            &n= bsp;         NULL,
-            &n= bsp;            = ;            &n= bsp;         "Send to kernel a= ction on root table is not supported in HW steering mode");
+            &n= bsp;            = ;      rte_flow_error_set(&sub_error, ENOTSUP,=
+            &n= bsp;            = ;            &n= bsp; RTE_FLOW_ERROR_TYPE_ACTION,
+            &n= bsp;            = ;            &n= bsp; NULL,
+            &n= bsp;            = ;            &n= bsp; "Send to kernel action on root table is not supported in HW steer= ing mode");
+            &n= bsp;            = ;            &n= bsp; goto err;
            &nb= sp;            }
            &nb= sp;            table= _type =3D attr->ingress ? MLX5DR_TABLE_TYPE_NIC_RX :
            &nb= sp;            =              ((= attr->egress) ? MLX5DR_TABLE_TYPE_NIC_TX :
@@ -2395,14 +2401,14 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev= ,
            &nb= sp;    case RTE_FLOW_ACTION_TYPE_MODIFY_FIELD:
            &nb= sp;            err = =3D flow_hw_modify_field_compile(dev, attr, actions,
            &nb= sp;            =             &nb= sp;            =           masks, acts, &mh= dr,
-            &n= bsp;            = ;            &n= bsp;            = ;        src_pos, error);
+            &n= bsp;            = ;            &n= bsp;            = ;        src_pos, &sub_error);
            &nb= sp;            if (e= rr)
            &nb= sp;            =         goto err;
            &nb= sp;            break= ;
            &nb= sp;    case RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT:
            &nb= sp;            if (f= low_hw_represented_port_compile
            &nb= sp;            =             &nb= sp;   (dev, attr, actions,
-            &n= bsp;            = ;            &n= bsp;  masks, acts, src_pos, dr_pos, error))
+            &n= bsp;            = ;            &n= bsp;  masks, acts, src_pos, dr_pos, &sub_error))
            &nb= sp;            =         goto err;
            &nb= sp;            break= ;
            &nb= sp;    case RTE_FLOW_ACTION_TYPE_METER:
@@ -2416,7 +2422,8 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev,<= br>             &nb= sp;            =     ((const struct rte_flow_action_meter *)
            &nb= sp;            =      masks->conf)->mtr_id) {
            &nb= sp;            =         err =3D flow_hw_meter_compile(de= v, cfg,
-            &n= bsp;            = ;            &n= bsp;            = ;         dr_pos, jump_pos, actions= , acts, error);
+            &n= bsp;            = ;            &n= bsp;            = ;         dr_pos, jump_pos, actions= , acts,
+            &n= bsp;            = ;            &n= bsp;            = ;         &sub_error);
            &nb= sp;            =         if (err)
            &nb= sp;            =             &nb= sp;   goto err;
            &nb= sp;            } els= e if (__flow_hw_act_data_general_append(priv, acts,
@@ -2427,13 +2434,14 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev= ,
            &nb= sp;            break= ;
            &nb= sp;    case RTE_FLOW_ACTION_TYPE_AGE:
            &nb= sp;            flow_= hw_translate_group(dev, cfg, attr->group,
-            &n= bsp;            = ;            &n= bsp;         &target_grp, error= );
+            &n= bsp;            = ;            &n= bsp;         &target_grp, &= sub_error);
            &nb= sp;            if (t= arget_grp =3D=3D 0) {
            &nb= sp;            =         __flow_hw_action_template_destro= y(dev, acts);
-            &n= bsp;            = ;      return rte_flow_error_set(error, ENOTSUP, -            &n= bsp;            = ;            &n= bsp;         RTE_FLOW_ERROR_TYPE_AC= TION,
-            &n= bsp;            = ;            &n= bsp;         NULL,
-            &n= bsp;            = ;            &n= bsp;         "Age action on ro= ot table is not supported in HW steering mode");
+            &n= bsp;            = ;      rte_flow_error_set(&sub_error, ENOTSUP,=
+            &n= bsp;            = ;            &n= bsp; RTE_FLOW_ERROR_TYPE_ACTION,
+            &n= bsp;            = ;            &n= bsp; NULL,
+            &n= bsp;            = ;            &n= bsp; "Age action on root table is not supported in HW steering mode&qu= ot;);
+            &n= bsp;            = ;            &n= bsp; goto err;
            &nb= sp;            }
            &nb= sp;            if (_= _flow_hw_act_data_general_append(priv, acts,
            &nb= sp;            =             &nb= sp;            =              ac= tions->type,
@@ -2443,13 +2451,14 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev= ,
            &nb= sp;            break= ;
            &nb= sp;    case RTE_FLOW_ACTION_TYPE_COUNT:
            &nb= sp;            flow_= hw_translate_group(dev, cfg, attr->group,
-            &n= bsp;            = ;            &n= bsp;         &target_grp, error= );
+            &n= bsp;            = ;            &n= bsp;         &target_grp, &= sub_error);
            &nb= sp;            if (t= arget_grp =3D=3D 0) {
            &nb= sp;            =         __flow_hw_action_template_destro= y(dev, acts);
-            &n= bsp;            = ;      return rte_flow_error_set(error, ENOTSUP, -            &n= bsp;            = ;            &n= bsp;         RTE_FLOW_ERROR_TYPE_AC= TION,
-            &n= bsp;            = ;            &n= bsp;         NULL,
-            &n= bsp;            = ;            &n= bsp;         "Counter action o= n root table is not supported in HW steering mode");
+            &n= bsp;            = ;      rte_flow_error_set(&sub_error, ENOTSUP,=
+            &n= bsp;            = ;            &n= bsp; RTE_FLOW_ERROR_TYPE_ACTION,
+            &n= bsp;            = ;            &n= bsp; NULL,
+            &n= bsp;            = ;            &n= bsp; "Counter action on root table is not supported in HW steering mod= e");
+            &n= bsp;            = ;            &n= bsp; goto err;
            &nb= sp;            }
            &nb= sp;            if ((= at->action_flags & MLX5_FLOW_ACTION_AGE) ||
            &nb= sp;            =     (at->action_flags & MLX5_FLOW_ACTION_INDIRECT_AGE= ))
@@ -2519,7 +2528,7 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev,<= br>          }
         if (mhdr.pos !=3D UINT16_M= AX) {
            &nb= sp;    ret =3D mlx5_tbl_translate_modify_header(dev, cfg, ac= ts, mp_ctx,
-            &n= bsp;            = ;            &n= bsp;            = ;    &mhdr, error);
+            &n= bsp;            = ;            &n= bsp;            = ;    &mhdr, &sub_error);
            &nb= sp;    if (ret)
            &nb= sp;            goto = err;
         }
@@ -2529,7 +2538,7 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev,<= br>             &nb= sp;            =             &nb= sp;            = encap_data, encap_data_m,
            &nb= sp;            =             &nb= sp;            = mp_ctx, data_size,
            &nb= sp;            =             &nb= sp;            = reformat_src,
-            &n= bsp;            = ;            &n= bsp;           refmt_type= , error);
+            &n= bsp;            = ;            &n= bsp;           refmt_type= , &sub_error);
            &nb= sp;    if (ret)
            &nb= sp;            goto = err;
         }
@@ -2548,6 +2557,10 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev,=
            &nb= sp;    rte_errno =3D EINVAL;
         err =3D rte_errno;
         __flow_hw_action_template_= destroy(dev, acts);
+       if (error !=3D NULL && sub_er= ror.type !=3D RTE_FLOW_ERROR_TYPE_NONE) {
+            &n= bsp;  rte_memcpy(error, &sub_error, sizeof(sub_error));
+            &n= bsp;  return -EINVAL;
+       }
         return rte_flow_error_set(= error, err,
            &nb= sp;            =           RTE_FLOW_ERROR_TYPE_= UNSPECIFIED, NULL,
            &nb= sp;            =           "fail to create= rte table");
--
2.34.1

--_000_CH3PR12MB8658EFEB2AF6A6B5FD1D64FBA1BD2CH3PR12MB8658namp_--