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 F1D1746364 for ; Fri, 7 Mar 2025 13:25:26 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EC37340E36; Fri, 7 Mar 2025 13:25:26 +0100 (CET) Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) by mails.dpdk.org (Postfix) with ESMTP id 7D8574029E for ; Fri, 7 Mar 2025 13:25:25 +0100 (CET) Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-390effd3e85so1622792f8f.0 for ; Fri, 07 Mar 2025 04:25:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741350325; x=1741955125; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hjnMi/xx3VGZA/njuaxCToLqKXcp35iws+OylsKFI0c=; b=ASqtR7ufQ91GKrdzvc7AI+A3dJHoEZQ6sniP07vpLRAo2wE0qFUDTAsaEE/I7x9SAY UISj57PfMzG7BSznxeKZw0kLHONBdMUtM6okrKrPSv64O3QYcHdD8N9RGThTTNEu+3PM bin3E0HSCssNS6FHHREGXivylP1lLV2X7JU7025VAdhfRfD6OHfYSpWMipAmHG4TDgp4 ikcUmgaNDmDSkxMhBCak3J2IRWExySACE3trX7psxlh1t75R3DL0cc26OBjfC/wnDsgL 2NTg8bhj6KoqzceeIPfDnqHqmDWDJo1O27Nm96HqjdnWHf7ks3g3p/NnivFiB8QrpxVq znZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741350325; x=1741955125; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hjnMi/xx3VGZA/njuaxCToLqKXcp35iws+OylsKFI0c=; b=cILrMeOPmZIhrtvGxaRRnLd8QgTYWG1R4iJh9AGbNCKbe+6FWuhKJrYvqD1MFjIAbf iYVjt/rTtdzy0c4mr/mzSllOC3bcM5DorWdkIy9AMzk21g9tNjGPQkevMPtgP7IMgwOQ 4XMBEXBJU5valngDitAPYbWZ3iacXwZkCehU7YexybW0wpAYhcOI6iximVMWDxMrrzDB nBh3gvGvwoLcoldhMnUh8kcIBP2uVwtdEg4CwWmStZngyvAVe7osyVUQ6wKrNm3bmKlk 3VGPvfmkPGqOH3Soj4DDe9q2tSostka96dY0pZTtiwaCr8mT4BVrYXLoaKkiUeOYAtZc NFfg== X-Forwarded-Encrypted: i=1; AJvYcCV+Ni+oEoQ31uI327SvrWNFfqMo4HyOiBO6uQX4Q9d+aHXs5BsKqtBlPPjpfaA6aVgvU4ynJ/g=@dpdk.org X-Gm-Message-State: AOJu0Yzi8IDdw1JQZV/XGzwkQtVRQdxIoqhlUKay/4dyRLhoTM0ubgZG t4oOOPXmaIlhi8VyWIMiazKMrb8R0SDUZS4Wcb2piQbNsyTG8aGoylpryzO3 X-Gm-Gg: ASbGncu91eu4ketuOEDBVGlZZwZ5rMfZsqJkBdoVZDeQkKJ78H6d68h3mONv4Djy7lW goPPltU4dNcmdadAXuq0wA4o2CXH9HQPdGmn9sDpXsZ/D4/fNUJmALYd/t7eWMNYZWxJFo0L1ib p4AOdhQUd9epSiCdtWWGdIBM+2LryS26bvNLraRRlZywps+W/I9+6YM8r+HBsw3fIu8Kpax6Luv WcjYJP9SrhDd73K+XHn7QYdkAem7qcYbGFQYsKlN04TAMLd6HtHEi2V4WzjagRddafzdY8JoAHd TKX2ONorn+B0w1Ishix7URiOGgO+94Ok7iklD9lDlqeuEQnN07k= X-Google-Smtp-Source: AGHT+IH66lqU2WiyyCwPNuux8csmE7+mkscU1GepXd3kjnGIVurorHrCDERWQo6by0aA8wP61Re7ew== X-Received: by 2002:a05:6000:1fa9:b0:391:253b:404a with SMTP id ffacd0b85a97d-39132d30c5bmr1859158f8f.8.1741350324880; Fri, 07 Mar 2025 04:25:24 -0800 (PST) Received: from localhost ([2a01:4b00:d036:ae00:ff31:f049:bd38:f7cf]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-3912bfba83csm5149531f8f.6.2025.03.07.04.25.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Mar 2025 04:25:24 -0800 (PST) From: luca.boccassi@gmail.com To: Junfeng Guo Cc: Dariusz Sosnowski , dpdk stable Subject: patch 'net/mlx5: fix actions translation error overwrite' has been queued to stable release 22.11.8 Date: Fri, 7 Mar 2025 12:24:16 +0000 Message-ID: <20250307122431.1415551-17-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250307122431.1415551-1-luca.boccassi@gmail.com> References: <20250217170456.1068278-79-luca.boccassi@gmail.com> <20250307122431.1415551-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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.8 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 03/09/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/bluca/dpdk-stable This queued commit can be viewed at: https://github.com/bluca/dpdk-stable/commit/6bb59454b04bc43a601efa0389165afa148db421 Thanks. Luca Boccassi --- >From 6bb59454b04bc43a601efa0389165afa148db421 Mon Sep 17 00:00:00 2001 From: Junfeng Guo Date: Thu, 20 Feb 2025 09:08:50 +0200 Subject: [PATCH] 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") Signed-off-by: Junfeng Guo Acked-by: Dariusz Sosnowski --- .mailmap | 2 +- drivers/net/mlx5/mlx5_flow_hw.c | 41 +++++++++++++++++++++------------ 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/.mailmap b/.mailmap index dc7a465822..ee6eb01cf6 100644 --- a/.mailmap +++ b/.mailmap @@ -692,7 +692,7 @@ Julien Cretin Julien Massonneau Julien Meunier JĂșlius 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_hw.c index a19342a25d..0f36700143 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -1368,6 +1368,11 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, uint8_t *encap_data = NULL, *encap_data_m = NULL; size_t data_size = 0; struct mlx5_hw_modify_header_action mhdr = { 0 }; + struct rte_flow_error sub_error = { + .type = RTE_FLOW_ERROR_TYPE_NONE, + .cause = NULL, + .message = NULL, + }; bool actions_end = false; uint32_t type; bool reformat_used = false; @@ -1459,7 +1464,7 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, ((const struct rte_flow_action_jump *) actions->conf)->group; acts->jump = flow_hw_jump_action_register - (dev, cfg, jump_group, error); + (dev, cfg, jump_group, &sub_error); if (!acts->jump) goto err; acts->rule_acts[action_pos].action = (!!attr->group) ? @@ -1568,7 +1573,7 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, case RTE_FLOW_ACTION_TYPE_MODIFY_FIELD: err = flow_hw_modify_field_compile(dev, attr, action_start, actions, masks, acts, &mhdr, - error); + &sub_error); if (err) goto err; /* @@ -1586,7 +1591,7 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, action_pos = at->actions_off[actions - at->actions]; if (flow_hw_represented_port_compile (dev, attr, action_start, actions, - masks, acts, action_pos, error)) + masks, acts, action_pos, &sub_error)) goto err; break; case RTE_FLOW_ACTION_TYPE_METER: @@ -1601,7 +1606,7 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, ((const struct rte_flow_action_meter *) masks->conf)->mtr_id) { err = flow_hw_meter_compile(dev, cfg, - action_pos, jump_pos, actions, acts, error); + action_pos, jump_pos, actions, acts, &sub_error); if (err) goto err; } else if (__flow_hw_act_data_general_append(priv, acts, @@ -1612,13 +1617,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 == 0) { __flow_hw_action_template_destroy(dev, acts); - return rte_flow_error_set(error, ENOTSUP, - RTE_FLOW_ERROR_TYPE_ACTION, - NULL, - "Age action on root table is 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 supported in HW steering mode"); + goto err; } action_pos = at->actions_off[actions - at->actions]; if (__flow_hw_act_data_general_append(priv, acts, @@ -1629,13 +1635,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 == 0) { __flow_hw_action_template_destroy(dev, acts); - return rte_flow_error_set(error, ENOTSUP, - RTE_FLOW_ERROR_TYPE_ACTION, - NULL, - "Counter action on root table 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 not supported in HW steering mode"); + goto err; } if ((at->action_flags & MLX5_FLOW_ACTION_AGE) || (at->action_flags & MLX5_FLOW_ACTION_INDIRECT_AGE)) @@ -1739,7 +1746,7 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, MLX5_ASSERT(at->reformat_off != UINT16_MAX); if (enc_item) { MLX5_ASSERT(!encap_data); - if (flow_dv_convert_encap_data(enc_item, buf, &data_size, error)) + if (flow_dv_convert_encap_data(enc_item, buf, &data_size, &sub_error)) goto err; encap_data = buf; if (!enc_item_m) @@ -1782,6 +1789,10 @@ err: rte_errno = EINVAL; err = rte_errno; __flow_hw_action_template_destroy(dev, acts); + if (error != NULL && sub_error.type != 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.47.2 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2025-03-07 12:23:38.646188034 +0000 +++ 0017-net-mlx5-fix-actions-translation-error-overwrite.patch 2025-03-07 12:23:38.018838643 +0000 @@ -1 +1 @@ -From 494da70e289c6a603185c890111f95568eb1fd63 Mon Sep 17 00:00:00 2001 +From 6bb59454b04bc43a601efa0389165afa148db421 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 494da70e289c6a603185c890111f95568eb1fd63 ] + @@ -27 +28,0 @@ -Cc: stable@dpdk.org @@ -33,2 +34,2 @@ - drivers/net/mlx5/mlx5_flow_hw.c | 65 ++++++++++++++++++++------------- - 2 files changed, 40 insertions(+), 27 deletions(-) + drivers/net/mlx5/mlx5_flow_hw.c | 41 +++++++++++++++++++++------------ + 2 files changed, 27 insertions(+), 16 deletions(-) @@ -37 +38 @@ -index 2a3f1b1bd4..e9896a2e5b 100644 +index dc7a465822..ee6eb01cf6 100644 @@ -40 +41 @@ -@@ -760,7 +760,7 @@ Julien Hascoet +@@ -692,7 +692,7 @@ Julien Cretin @@ -48 +49 @@ - Junlong Wang + Jun Qiu @@ -50 +51 @@ -index 501bf33f94..e72b87d70f 100644 +index a19342a25d..0f36700143 100644 @@ -53,3 +54,3 @@ -@@ -2543,6 +2543,11 @@ __flow_hw_translate_actions_template(struct rte_eth_dev *dev, - uint8_t *push_data = NULL, *push_data_m = NULL; - size_t data_size = 0, push_size = 0; +@@ -1368,6 +1368,11 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, + uint8_t *encap_data = NULL, *encap_data_m = NULL; + size_t data_size = 0; @@ -65 +66 @@ -@@ -2662,7 +2667,7 @@ __flow_hw_translate_actions_template(struct rte_eth_dev *dev, +@@ -1459,7 +1464,7 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, @@ -73,25 +74,2 @@ - acts->rule_acts[dr_pos].action = (!!attr->group) ? -@@ -2793,15 +2798,16 @@ __flow_hw_translate_actions_template(struct rte_eth_dev *dev, - break; - case RTE_FLOW_ACTION_TYPE_SEND_TO_KERNEL: - ret = flow_hw_translate_group(dev, cfg, attr->group, -- &target_grp, error); -+ &target_grp, &sub_error); - if (ret) -- return ret; -+ goto err; - if (target_grp == 0) { - __flow_hw_action_template_destroy(dev, acts); -- return rte_flow_error_set(error, ENOTSUP, -- RTE_FLOW_ERROR_TYPE_ACTION, -- NULL, -- "Send to kernel action on root 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 table is not supported in HW steering mode"); -+ goto err; - } - table_type = attr->ingress ? MLX5DR_TABLE_TYPE_NIC_RX : - ((attr->egress) ? MLX5DR_TABLE_TYPE_NIC_TX : -@@ -2811,14 +2817,14 @@ __flow_hw_translate_actions_template(struct rte_eth_dev *dev, + acts->rule_acts[action_pos].action = (!!attr->group) ? +@@ -1568,7 +1573,7 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, @@ -99,4 +77,4 @@ - err = flow_hw_modify_field_compile(dev, attr, actions, - masks, acts, &mhdr, -- src_pos, error); -+ src_pos, &sub_error); + err = flow_hw_modify_field_compile(dev, attr, action_start, + actions, masks, acts, &mhdr, +- error); ++ &sub_error); @@ -105,2 +83,3 @@ - break; - case RTE_FLOW_ACTION_TYPE_REPRESENTED_PORT: + /* +@@ -1586,7 +1591,7 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, + action_pos = at->actions_off[actions - at->actions]; @@ -108,3 +87,3 @@ - (dev, attr, actions, -- masks, acts, src_pos, dr_pos, error)) -+ masks, acts, src_pos, dr_pos, &sub_error)) + (dev, attr, action_start, actions, +- masks, acts, action_pos, error)) ++ masks, acts, action_pos, &sub_error)) @@ -114 +93 @@ -@@ -2832,7 +2838,8 @@ __flow_hw_translate_actions_template(struct rte_eth_dev *dev, +@@ -1601,7 +1606,7 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, @@ -118,3 +97,2 @@ -- dr_pos, jump_pos, actions, acts, error); -+ dr_pos, jump_pos, actions, acts, -+ &sub_error); +- action_pos, jump_pos, actions, acts, error); ++ action_pos, jump_pos, actions, acts, &sub_error); @@ -124 +102 @@ -@@ -2843,15 +2850,16 @@ __flow_hw_translate_actions_template(struct rte_eth_dev *dev, +@@ -1612,13 +1617,14 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, @@ -127 +105 @@ - ret = flow_hw_translate_group(dev, cfg, attr->group, + flow_hw_translate_group(dev, cfg, attr->group, @@ -130,3 +107,0 @@ - if (ret) -- return ret; -+ goto err; @@ -144,0 +120 @@ + action_pos = at->actions_off[actions - at->actions]; @@ -146,2 +122 @@ - actions->type, -@@ -2861,15 +2869,16 @@ __flow_hw_translate_actions_template(struct rte_eth_dev *dev, +@@ -1629,13 +1635,14 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, @@ -150 +125 @@ - ret = flow_hw_translate_group(dev, cfg, attr->group, + flow_hw_translate_group(dev, cfg, attr->group, @@ -153,3 +127,0 @@ - if (ret) -- return ret; -+ goto err; @@ -170,21 +142,6 @@ -@@ -2912,7 +2921,7 @@ __flow_hw_translate_actions_template(struct rte_eth_dev *dev, - acts->rule_acts, - &acts->mtr_id, - MLX5_HW_INV_QUEUE, -- error); -+ &sub_error); - if (err) - goto err; - } else if (__flow_hw_act_data_general_append(priv, acts, -@@ -2979,11 +2988,11 @@ __flow_hw_translate_actions_template(struct rte_eth_dev *dev, - } - } - if (mhdr.pos != UINT16_MAX) { -- ret = mlx5_tbl_translate_modify_header(dev, cfg, acts, mp_ctx, &mhdr, error); -+ ret = mlx5_tbl_translate_modify_header(dev, cfg, acts, mp_ctx, &mhdr, &sub_error); - if (ret) - goto err; - if (!nt_mode && mhdr.shared) { -- ret = mlx5_tbl_ensure_shared_modify_header(dev, cfg, acts, error); -+ ret = mlx5_tbl_ensure_shared_modify_header(dev, cfg, acts, &sub_error); - if (ret) +@@ -1739,7 +1746,7 @@ __flow_hw_actions_translate(struct rte_eth_dev *dev, + MLX5_ASSERT(at->reformat_off != UINT16_MAX); + if (enc_item) { + MLX5_ASSERT(!encap_data); +- if (flow_dv_convert_encap_data(enc_item, buf, &data_size, error)) ++ if (flow_dv_convert_encap_data(enc_item, buf, &data_size, &sub_error)) @@ -192,11 +149,3 @@ - } -@@ -2994,7 +3003,7 @@ __flow_hw_translate_actions_template(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; - if (!nt_mode && acts->encap_decap->shared) { -@@ -3020,6 +3029,10 @@ err: + encap_data = buf; + if (!enc_item_m) +@@ -1782,6 +1789,10 @@ err: