Thread (18 messages) 18 messages, 6 authors, 2026-01-19

Re: [PATCH net-next 1/9] net: benet: convert to use .get_rx_ring_count

From: Breno Leitao <leitao@debian.org>
Date: 2026-01-19 12:56:53
Also in: linux-arm-kernel, linux-mediatek, lkml
Subsystem: networking [ethtool], networking [general], the rest · Maintainers: Andrew Lunn, Jakub Kicinski, "David S. Miller", Eric Dumazet, Paolo Abeni, Linus Torvalds

On Mon, Jan 19, 2026 at 03:07:12AM -0800, Breno Leitao wrote:
Hello Jakub,

On Sat, Jan 17, 2026 at 06:15:51PM -0800, Jakub Kicinski wrote:
quoted
On Thu, 15 Jan 2026 06:37:48 -0800 Breno Leitao wrote:
quoted
-static int be_get_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd,
-			u32 *rule_locs)
-{
-	struct be_adapter *adapter = netdev_priv(netdev);
-
-	if (!be_multi_rxq(adapter)) {
-		dev_info(&adapter->pdev->dev,
-			 "ethtool::get_rxnfc: RX flow hashing is disabled\n");
-		return -EINVAL;
-	}
I think we need to add this check to set_rxfh now. The error coming
from get_rxnfc/GRXRINGS effectively shielded the driver from set_rxfh
calls ever happening when there's only 1 ring. Now they will happen.
You are absolutely correct. The ethtool core calls
get_rxnfc(ETHTOOL_GRXRINGS) _before_ allowing RSS configuration via
set_rxfh, and if it fails, ethtool_set_rxfh() will fail as well. And
with the current change, ethtool_set_rxfh() will not fail if the adapter
is not multi-queue.
Upon further consideration, should we implement this limitation directly within
the ethtool infrastructure?

Something as:

Author: Breno Leitao [off-list ref]
Date:   Mon Jan 19 03:25:05 2026 -0800

   ethtool: reject RSS configuration on single-queue devices

    Configuring RSS (Receive Side Scaling) makes no sense when the device
    only has a single RX queue - there is nothing to distribute traffic
    across. The indirection table would just map everything to queue 0.

    Add explicit checks in ethtool_set_rxfh_indir() and ethtool_set_rxfh()
    to reject RSS configuration when the device reports fewer than 2 RX rings.

    This protects all drivers uniformly at the core level.

    Signed-off-by: Breno Leitao [off-list ref]

diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c
index 9431e305b233..899864e96aab 100644
--- a/net/ethtool/ioctl.c
+++ b/net/ethtool/ioctl.c
@@ -1380,6 +1380,10 @@ static noinline_for_stack int ethtool_set_rxfh_indir(struct net_device *dev,
                ret = num_rx_rings;
                goto out;
        }
+       if (num_rx_rings < 2) {
+               ret = -EOPNOTSUPP;
+               goto out;
+       }

        if (user_size == 0) {
                u32 *indir = rxfh_dev.indir;
@@ -1599,6 +1603,10 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev,
                ret = num_rx_rings;
                goto out_free;
        }
+       if (num_rx_rings < 2) {
+               ret = -EOPNOTSUPP;
+               goto out_free;
+       }
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help