net/bonding: avoid RSS reta update in flow-isolation mode

Message ID 20250704135031.5306-1-madhuker.mythri@oracle.com (mailing list archive)
State Accepted
Delegated to: Stephen Hemminger
Headers
Series net/bonding: avoid RSS reta update in flow-isolation mode |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/loongarch-compilation success Compilation OK
ci/loongarch-unit-testing success Unit Testing PASS
ci/Intel-compilation success Compilation OK
ci/github-robot: build success github build: passed
ci/aws-unit-testing success Unit Testing PASS
ci/intel-Testing success Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/intel-Functional success Functional PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-unit-amd64-testing fail Testing issues
ci/iol-unit-arm64-testing success Testing PASS
ci/iol-abi-testing success Testing PASS
ci/iol-compile-amd64-testing warning Testing issues
ci/iol-compile-arm64-testing success Testing PASS
ci/iol-sample-apps-testing success Testing PASS
ci/iol-intel-Functional success Functional Testing PASS

Commit Message

Madhuker Mythri July 4, 2025, 1:50 p.m. UTC
From: Madhuker Mythri <madhuker.mythri@oracle.com>

In bonding PMD, member_start() function checks whether RSS(mq_mode) is
enabled and then calling the RSS rte_eth_dev_rss_reta_update() API, which
is returning error in-case of device configured in flow isolation-mode.
When the device configured with flow isolation mode RSS reta update is not
required and the API was not supported. For example in-case of mlx5 PMD,
RSS reta update API was not supported, when the device is configured in
flow isolation-mode.

So, added check to verify if the device is configured in flow-isolation
mode, then do not call the rte_eth_dev_rss_reta_update() API.

Fixes: 734ce47f71e0 ("bonding: support RSS dynamic configuration")
Cc: tomaszx.kulasek@intel.com

Signed-off-by: Madhuker Mythri <madhuker.mythri@oracle.com>
---
 drivers/net/bonding/rte_eth_bond_pmd.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
  

Comments

Stephen Hemminger July 7, 2025, 4:41 p.m. UTC | #1
On Fri,  4 Jul 2025 19:20:31 +0530
madhuker.mythri@oracle.com wrote:

> From: Madhuker Mythri <madhuker.mythri@oracle.com>
> 
> In bonding PMD, member_start() function checks whether RSS(mq_mode) is
> enabled and then calling the RSS rte_eth_dev_rss_reta_update() API, which
> is returning error in-case of device configured in flow isolation-mode.
> When the device configured with flow isolation mode RSS reta update is not
> required and the API was not supported. For example in-case of mlx5 PMD,
> RSS reta update API was not supported, when the device is configured in
> flow isolation-mode.
> 
> So, added check to verify if the device is configured in flow-isolation
> mode, then do not call the rte_eth_dev_rss_reta_update() API.
> 
> Fixes: 734ce47f71e0 ("bonding: support RSS dynamic configuration")
> Cc: tomaszx.kulasek@intel.com
> 
> Signed-off-by: Madhuker Mythri <madhuker.mythri@oracle.com>

Applied to next-net.

Next time please use patch versions (ie [PATCH v2] etc) and thread
the followups to the original patch.

This is described in https://doc.dpdk.org/guides/contributing/patches.html#creating-patches

It helps tools like patchwork and with reviewers so that we know which
version supersedes.
  

Patch

diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c
index 83339bae3d..4906701a95 100644
--- a/drivers/net/bonding/rte_eth_bond_pmd.c
+++ b/drivers/net/bonding/rte_eth_bond_pmd.c
@@ -1904,12 +1904,13 @@  member_start(struct rte_eth_dev *bonding_eth_dev,
 		}
 	}
 
-	/* If RSS is enabled for bonding, synchronize RETA */
-	if (bonding_eth_dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS) {
+	/*
+	 * If flow-isolation is not enabled, then check whether RSS is enabled for
+	 * bonding, synchronize RETA
+	 */
+	if (internals->flow_isolated_valid == 0 &&
+		(bonding_eth_dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS)) {
 		int i;
-		struct bond_dev_private *internals;
-
-		internals = bonding_eth_dev->data->dev_private;
 
 		for (i = 0; i < internals->member_count; i++) {
 			if (internals->members[i].port_id == member_port_id) {