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 ACD0648AEF for ; Wed, 12 Nov 2025 17:55:09 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A832240DD3; Wed, 12 Nov 2025 17:55:09 +0100 (CET) Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) by mails.dpdk.org (Postfix) with ESMTP id 6C41C40BA6 for ; Wed, 12 Nov 2025 17:55:08 +0100 (CET) Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-47774d3536dso8113585e9.0 for ; Wed, 12 Nov 2025 08:55:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1762966508; x=1763571308; 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=a1xLOyiGT8XZcYax9eOfRHp3CqY9vsJGPoT0FCUYoUk=; b=cfVrZBt1ZOVBEXiHPYvE7JT6XxR5Y+Wo24EGJoPlRVFbLDhWEEEgbdGNS4cn40I3y7 facRF0659HBg4mAT1I2PJXBdGBeg+EbyQx0nRWjRomggg+Hw3iaaRHb9HSpjalzkXXXi rrV3OBpR9LounS4F+TL7PYchm5jjwYw2ldw/N48JMTBDU6g8aQ34YwqZOhmgMc0JuZsp sLbX1GwQ4wA0McPYA1pb/BEHlfw4gcxaeTActajbNdCNHEqhv+tXbnoFvEuvOcG4t8C5 WvLWv604Ahel9VyIXuR/fZq6i/tBRnsdAIaTczUlocC+81W/rUBwMA7WkGiJt6IF0gew 0M+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762966508; x=1763571308; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=a1xLOyiGT8XZcYax9eOfRHp3CqY9vsJGPoT0FCUYoUk=; b=F+OqZCiZLRUW9f6k0BiATDw7FVuZ0kL920pA7+q0x2HDzBmmnqjIPdkmr/DLbzI/2I 3AitPrH+Zq6F0u8jWmvYZe3TdXuqYjcUR+qbZMlr7Ao5VoaFrVUlGATDiSu7kxxNZvHF X/MZiFLq/0T4BLPqMxG7/XRjqkapP/xpoPMthFdvDQLvlRoNpIHkEgWYDg1L2teKzw/b Wr5HxolBlDDoYmCWxdtH4+pzStTnCoBtZB3ZkCz65Z/JLCI9LcsHAFBezjtWgXZ28Tzd z1i1++0ywfAM3lCvvJEpsbMNQPSzJJ3zCdWtDJ2ewMR/SnbGVZsHN0rzq6CE/avbbUsH 7Fzg== X-Forwarded-Encrypted: i=1; AJvYcCXu0PybyXZbQKgQdCkkf1yBG9Q3dNK/3KwYq5B+XUsK9VElujR1buWZMrYe1+RqJbvBPQ1eD7s=@dpdk.org X-Gm-Message-State: AOJu0YzI/DccqEv/XaPEoQwX3OaM6kchb48Eovi9uRb/V1S2tLsR+Iy2 a5ZgQ08vQCK/v6sZjnJ4acUW27AUO80xSiIUEJAU8Jn33YOfs2BoiG5+3UWD1A== X-Gm-Gg: ASbGnctSI4anwCh0QtG6alSqSppSzWFbGBWANu+29ilkUGRGb1f2CRA+QYVMg4T8UyC YssdFXzOOSveUhIC2bldtmLnh+Gu+EVvxF8JpKRwFoOF0OW0/4A1e2ajWH9j50xX4Ndx1CNag19 pc903QCZXAmuJZLIWaGtusjaGZMeIJ7RMBnPZ0Y2jBiyC1IIE4uSBFbqJ8sgPYGz48Ek8EXltF4 N7G6WFUFVNnwWFpplukF6BnnkcLAAlojg3kfgaE21pKTJW4a9jzyAIgZETLC/1ipFBcIXgFxvn0 Zipb8IEC9dEvRNNm0iKtZFemNsZOh/futD6EyQUSgdNdpC2MukivQNeZjpZb3R4oIHL729/03aC kJoea4tSm0ZTK4ybNRGsdkI9GZ5j+btthe8aVp+TAnLHiSA1/mVzZxQHVhGhAlKDyrjJU3a4ndr hHatlKBg== X-Google-Smtp-Source: AGHT+IFzt7zZHCUcfogZ5kF7Aoudhm0EAUvpJBFs/X65+7aPTIWocxj9y+Pkov8T0TytiGkH+IfJjg== X-Received: by 2002:a05:600c:4f0b:b0:475:d7fd:5c59 with SMTP id 5b1f17b1804b1-4778bd13cffmr509585e9.16.1762966507882; Wed, 12 Nov 2025 08:55:07 -0800 (PST) Received: from localhost ([2a01:4b00:d036:ae00:a397:14bc:5982:5745]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-47787e8e6a1sm43740845e9.11.2025.11.12.08.55.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Nov 2025 08:55:07 -0800 (PST) From: luca.boccassi@gmail.com To: Michael Baum Cc: Dariusz Sosnowski , dpdk stable Subject: patch 'net/mlx5: fix multi-process Tx default rules' has been queued to stable release 22.11.11 Date: Wed, 12 Nov 2025 16:52:51 +0000 Message-ID: <20251112165308.1618107-37-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251112165308.1618107-1-luca.boccassi@gmail.com> References: <20251027162001.3710450-79-luca.boccassi@gmail.com> <20251112165308.1618107-1-luca.boccassi@gmail.com> MIME-Version: 1.0 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.11 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/14/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/4f0537afcc4522f5f025d6140ccec584782656fa Thanks. Luca Boccassi --- >From 4f0537afcc4522f5f025d6140ccec584782656fa Mon Sep 17 00:00:00 2001 From: Michael Baum Date: Wed, 29 Oct 2025 17:57:08 +0200 Subject: [PATCH] net/mlx5: fix multi-process Tx default rules [ upstream commit 2f1bb792ad51aeb2da00198a63422fc478131bd5 ] When representor matching is disabled, an egress default rule is inserted which matches all and copies REG_A to REG_C_1 (when dv_xmeta_en == 4) and jump to group 1. All user rules started from group 1. When 2 processes are working together, the first one creates this flow rule and the second one is failed with errno EEXIST. This renders all user egress rules in 2nd process to be invalid. This patch changes this default rule match on SQs. Fixes: 483181f7b6dd ("net/mlx5: support device control of representor matching") Signed-off-by: Michael Baum Acked-by: Dariusz Sosnowski --- drivers/net/mlx5/mlx5_flow.h | 4 +++- drivers/net/mlx5/mlx5_flow_hw.c | 24 +++++++++++------------- drivers/net/mlx5/mlx5_trigger.c | 25 +++++++++++++------------ drivers/net/mlx5/mlx5_txq.c | 8 ++++++++ 4 files changed, 35 insertions(+), 26 deletions(-) diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index 39ca4a6599..ae6d9d45c2 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -2623,7 +2623,9 @@ int mlx5_flow_hw_esw_create_sq_miss_flow(struct rte_eth_dev *dev, int mlx5_flow_hw_esw_destroy_sq_miss_flow(struct rte_eth_dev *dev, uint32_t sqn); int mlx5_flow_hw_esw_create_default_jump_flow(struct rte_eth_dev *dev); -int mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev); +int mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev, + uint32_t sqn, + bool external); int mlx5_flow_hw_tx_repr_matching_flow(struct rte_eth_dev *dev, uint32_t sqn, bool external); int mlx5_flow_hw_lacp_rx_flow(struct rte_eth_dev *dev); int mlx5_flow_actions_validate(struct rte_eth_dev *dev, diff --git a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index df02bd237c..d78520710b 100644 --- a/drivers/net/mlx5/mlx5_flow_hw.c +++ b/drivers/net/mlx5/mlx5_flow_hw.c @@ -6247,7 +6247,7 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev, .priority = MLX5_HW_LOWEST_PRIO_ROOT, .egress = 1, }, - .nb_flows = 1, /* One default flow rule for all. */ + .nb_flows = MLX5_HW_CTRL_FLOW_NB_RULES, }; struct mlx5_flow_template_table_cfg tx_tbl_cfg = { .attr = tx_tbl_attr, @@ -9272,21 +9272,18 @@ mlx5_flow_hw_esw_create_default_jump_flow(struct rte_eth_dev *dev) } int -mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev) +mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev, uint32_t sqn, bool external) { struct mlx5_priv *priv = dev->data->dev_private; - struct rte_flow_item_eth promisc = { - .dst.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - .type = 0, + struct mlx5_rte_flow_item_sq sq_spec = { + .queue = sqn, }; - struct rte_flow_item eth_all[] = { - [0] = { - .type = RTE_FLOW_ITEM_TYPE_ETH, - .spec = &promisc, - .mask = &promisc, + struct rte_flow_item items[] = { + { + .type = (enum rte_flow_item_type)MLX5_RTE_FLOW_ITEM_TYPE_SQ, + .spec = &sq_spec, }, - [1] = { + { .type = RTE_FLOW_ITEM_TYPE_END, }, }; @@ -9316,6 +9313,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev) }; struct mlx5_hw_ctrl_flow_info flow_info = { .type = MLX5_HW_CTRL_FLOW_TYPE_TX_META_COPY, + .tx_repr_sq = sqn, }; MLX5_ASSERT(priv->master); @@ -9325,7 +9323,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev) return 0; return flow_hw_create_ctrl_flow(dev, dev, priv->hw_ctrl_fdb->hw_tx_meta_cpy_tbl, - eth_all, 0, copy_reg_action, 0, &flow_info, false); + items, 0, copy_reg_action, 0, &flow_info, external); } int diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c index af25af47f8..1b19f79822 100644 --- a/drivers/net/mlx5/mlx5_trigger.c +++ b/drivers/net/mlx5/mlx5_trigger.c @@ -1479,18 +1479,6 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev) unsigned int i; int ret; - /* - * With extended metadata enabled, the Tx metadata copy is handled by default - * Tx tagging flow rules, so default Tx flow rule is not needed. It is only - * required when representor matching is disabled. - */ - if (config->dv_esw_en && - !config->repr_matching && - config->dv_xmeta_en == MLX5_XMETA_MODE_META32_HWS && - priv->master) { - if (mlx5_flow_hw_create_tx_default_mreg_copy_flow(dev)) - goto error; - } for (i = 0; i < priv->txqs_n; ++i) { struct mlx5_txq_ctrl *txq = mlx5_txq_get(dev, i); uint32_t queue; @@ -1512,6 +1500,19 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev) goto error; } } + /* + * With extended metadata enabled, the Tx metadata copy is handled by default + * Tx tagging flow rules, so default Tx flow rule is not needed. It is only + * required when representor matching is disabled. + */ + if (config->dv_esw_en && !config->repr_matching && + config->dv_xmeta_en == MLX5_XMETA_MODE_META32_HWS && + (priv->master || priv->representor)) { + if (mlx5_flow_hw_create_tx_default_mreg_copy_flow(dev, queue, false)) { + mlx5_txq_release(dev, i); + goto error; + } + } mlx5_txq_release(dev, i); } if (config->fdb_def_rule) { diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c index 62105a3e54..34c7ef400d 100644 --- a/drivers/net/mlx5/mlx5_txq.c +++ b/drivers/net/mlx5/mlx5_txq.c @@ -1334,6 +1334,14 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num) mlx5_flow_hw_esw_destroy_sq_miss_flow(dev, sq_num); return -rte_errno; } + + if (!priv->sh->config.repr_matching && + priv->sh->config.dv_xmeta_en == MLX5_XMETA_MODE_META32_HWS && + mlx5_flow_hw_create_tx_default_mreg_copy_flow(dev, sq_num, true)) { + if (sq_miss_created) + mlx5_flow_hw_esw_destroy_sq_miss_flow(dev, sq_num); + return -rte_errno; + } return 0; } #endif -- 2.47.3 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2025-11-12 16:20:42.352222182 +0000 +++ 0037-net-mlx5-fix-multi-process-Tx-default-rules.patch 2025-11-12 16:20:40.971718030 +0000 @@ -1 +1 @@ -From 2f1bb792ad51aeb2da00198a63422fc478131bd5 Mon Sep 17 00:00:00 2001 +From 4f0537afcc4522f5f025d6140ccec584782656fa Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 2f1bb792ad51aeb2da00198a63422fc478131bd5 ] + @@ -17 +18,0 @@ -Cc: stable@dpdk.org @@ -29 +30 @@ -index c525516672..c5905ebfac 100644 +index 39ca4a6599..ae6d9d45c2 100644 @@ -32 +33 @@ -@@ -3565,7 +3565,9 @@ int mlx5_flow_hw_esw_create_sq_miss_flow(struct rte_eth_dev *dev, +@@ -2623,7 +2623,9 @@ int mlx5_flow_hw_esw_create_sq_miss_flow(struct rte_eth_dev *dev, @@ -44 +45 @@ -index 491a78a0de..d945c88eb0 100644 +index df02bd237c..d78520710b 100644 @@ -47 +48 @@ -@@ -10643,7 +10643,7 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev, +@@ -6247,7 +6247,7 @@ flow_hw_create_tx_default_mreg_copy_table(struct rte_eth_dev *dev, @@ -56 +57 @@ -@@ -16004,21 +16004,18 @@ mlx5_flow_hw_esw_create_default_jump_flow(struct rte_eth_dev *dev) +@@ -9272,21 +9272,18 @@ mlx5_flow_hw_esw_create_default_jump_flow(struct rte_eth_dev *dev) @@ -65,3 +66,3 @@ -- .hdr.dst_addr.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, -- .hdr.src_addr.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, -- .hdr.ether_type = 0, +- .dst.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, +- .src.addr_bytes = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, +- .type = 0, @@ -86 +87 @@ -@@ -16048,6 +16045,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev) +@@ -9316,6 +9313,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev) @@ -88,2 +89,2 @@ - struct mlx5_ctrl_flow_info flow_info = { - .type = MLX5_CTRL_FLOW_TYPE_TX_META_COPY, + struct mlx5_hw_ctrl_flow_info flow_info = { + .type = MLX5_HW_CTRL_FLOW_TYPE_TX_META_COPY, @@ -94 +95 @@ -@@ -16057,7 +16055,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev) +@@ -9325,7 +9323,7 @@ mlx5_flow_hw_create_tx_default_mreg_copy_flow(struct rte_eth_dev *dev) @@ -104 +105 @@ -index 916ac03c16..e6acb56d4d 100644 +index af25af47f8..1b19f79822 100644 @@ -107 +108 @@ -@@ -1606,18 +1606,6 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev) +@@ -1479,18 +1479,6 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev) @@ -126 +127 @@ -@@ -1639,6 +1627,19 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev) +@@ -1512,6 +1500,19 @@ mlx5_traffic_enable_hws(struct rte_eth_dev *dev) @@ -147 +148 @@ -index b090d8274d..834ca541d5 100644 +index 62105a3e54..34c7ef400d 100644 @@ -150 +151 @@ -@@ -1459,6 +1459,14 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num) +@@ -1334,6 +1334,14 @@ rte_pmd_mlx5_external_sq_enable(uint16_t port_id, uint32_t sq_num)