summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
authorBjörn Töpel <bjorn@kernel.org>2026-03-20 09:58:21 +0100
committerJakub Kicinski <kuba@kernel.org>2026-03-23 17:59:53 -0700
commit0475f9e779b456f934adbc44eeb98e3080a1893f (patch)
tree916a2b62c3758febaa7d7e5d427d7220a474f2bb /drivers/net/ethernet
parent9027497a25e3c92b5053b2643e0c18f910865625 (diff)
downloadlinux-next-0475f9e779b456f934adbc44eeb98e3080a1893f.tar.gz
linux-next-0475f9e779b456f934adbc44eeb98e3080a1893f.zip
ethtool: Track user-provided RSS indirection table size
Track the number of indirection table entries the user originally provided (context 0/default as well!). Replace IFF_RXFH_CONFIGURED with rss_indir_user_size: the flag is redundant now that user_size captures the same information. Add ethtool_rxfh_indir_lost() for drivers that must reset the indirection table. Convert bnxt and mlx5 to use it. Signed-off-by: Björn Töpel <bjorn@kernel.org> Link: https://patch.msgid.link/20260320085826.1957255-2-bjorn@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.c3
-rw-r--r--drivers/net/ethernet/mellanox/mlx5/core/en_main.c21
2 files changed, 13 insertions, 11 deletions
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 604966a398f5..84eb53b4172b 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -8118,8 +8118,7 @@ static int __bnxt_reserve_rings(struct bnxt *bp)
(bnxt_get_nr_rss_ctxs(bp, bp->rx_nr_rings) !=
bnxt_get_nr_rss_ctxs(bp, rx_rings) ||
bnxt_get_max_rss_ring(bp) >= rx_rings)) {
- netdev_warn(bp->dev, "RSS table entries reverting to default\n");
- bp->dev->priv_flags &= ~IFF_RXFH_CONFIGURED;
+ ethtool_rxfh_indir_lost(bp->dev);
}
}
bp->rx_nr_rings = rx_rings;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index 3eebdf402129..1238e5356012 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -6480,12 +6480,23 @@ int mlx5e_attach_netdev(struct mlx5e_priv *priv)
/* max number of channels may have changed */
max_nch = mlx5e_calc_max_nch(priv->mdev, priv->netdev, profile);
+
+ /* Locking is required by ethtool_rxfh_indir_lost() (sends
+ * ETHTOOL_MSG_RSS_NTF) and by netif_set_real_num_*_queues in case
+ * the netdev has been registered by this point (if this function
+ * was called in the reload or resume flow).
+ */
+ if (need_lock) {
+ rtnl_lock();
+ netdev_lock(priv->netdev);
+ }
+
if (priv->channels.params.num_channels > max_nch) {
mlx5_core_warn(priv->mdev, "MLX5E: Reducing number of channels to %d\n", max_nch);
/* Reducing the number of channels - RXFH has to be reset, and
* mlx5e_num_channels_changed below will build the RQT.
*/
- priv->netdev->priv_flags &= ~IFF_RXFH_CONFIGURED;
+ ethtool_rxfh_indir_lost(priv->netdev);
priv->channels.params.num_channels = max_nch;
if (priv->channels.params.mqprio.mode == TC_MQPRIO_MODE_CHANNEL) {
mlx5_core_warn(priv->mdev, "MLX5E: Disabling MQPRIO channel mode\n");
@@ -6502,15 +6513,7 @@ int mlx5e_attach_netdev(struct mlx5e_priv *priv)
/* 1. Set the real number of queues in the kernel the first time.
* 2. Set our default XPS cpumask.
* 3. Build the RQT.
- *
- * Locking is required by netif_set_real_num_*_queues in case the
- * netdev has been registered by this point (if this function was called
- * in the reload or resume flow).
*/
- if (need_lock) {
- rtnl_lock();
- netdev_lock(priv->netdev);
- }
err = mlx5e_num_channels_changed(priv);
if (need_lock) {
netdev_unlock(priv->netdev);