[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