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

Breno Leitao leitao at debian.org
Mon Jan 19 04:56:49 PST 2026


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:
> > On Thu, 15 Jan 2026 06:37:48 -0800 Breno Leitao wrote:
> > > -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 <leitao at debian.org>
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 <leitao at debian.org>


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;
+       }




More information about the linux-arm-kernel mailing list