Netdev List
 help / color / mirror / Atom feed
* [PATCH net] net/mlx5e: Update netdev features only after a successful ringparam set
@ 2026-10-17  0:54 Dimitri Daskalakis
  2026-10-17 14:24 ` Björn Töpel
  2026-10-18 16:55 ` Nimrod Oren
  0 siblings, 2 replies; 3+ messages in thread
From: Dimitri Daskalakis @ 2026-10-17  0:54 UTC (permalink / raw)
  To: David S . Miller
  Cc: Saeed Mahameed, Tariq Toukan, Mark Bloch, Leon Romanovsky,
	Andrew Lunn, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Gal Pressman, Cosmin Ratiu, Dragos Tatulea, Nimrod Oren,
	Carolina Jubran, Björn Töpel, Dimitri Daskalakis,
	netdev

From: Dimitri Daskalakis <daskald@meta.com>

mlx5 couples HW-GRO with tcp-data-split. If a user sets rx-gro-hw on ->
tcp-data-split on -> rx-gro-hw off, the driver will leave HW-GRO on.
mlx5e_ethtool_set_tcp_data_split() calls netdev_update_features() when
tcp-data-split goes from enabled to disabled in case HW-GRO needs to be
released. mlx5e_fix_features() reads the new HDS config from
dev->cfg_pending, so HW-GRO is released before all ring parameters are
validated.

If the subsequent call to mlx5e_ethtool_set_ringparam() fails, the
ethtool core discards the pending change and reports tcp-data-split
enabled. The device is no longer splitting, and subsequent ring changes
are blocked.

Move the call to netdev_update_features() after
mlx5e_ethtool_set_ringparam() exits successfully.

The issue was discovered by manual code inspection during review of
a change that stops mlx5 users from disabling tcp-data-split. It was
reproduced on a ConnectX-7 with ethtool alone.

Steps to reproduce:
ethtool -K eth0 rx-gro-hw on
ethtool -G eth0 tcp-data-split on
ethtool -K eth0 rx-gro-hw off # HW-GRO kept on for tcp-data-split

ethtool -G eth0 tcp-data-split off rx 1 # de-sync driver & kernel state
 netlink error: mlx5_core: rx (1) < min (16)
 netlink error: Invalid argument

ethtool -G eth0 rx 1024 # valid ring changes are now blocked
 netlink error: mlx5_core: TCP-data-split is not supported when GRO HW is disabled
 netlink error: Invalid argument

This is not a terminal state, users can recover by setting rx-gro-hw on.
With the fix, the failing ringparam set leaves rx-gro-hw on and later
ring changes succeed.

Fixes: 46bcce5dfd33 ("net/mlx5e: Support ethtool tcp-data-split settings")
Reported-by: Björn Töpel <bjorn@kernel.org>
Closes: https://lore.kernel.org/87se2grw3d.fsf@all.your.base.are.belong.to.us/
Signed-off-by: Dimitri Daskalakis <daskald@meta.com>
---
 .../ethernet/mellanox/mlx5/core/en_ethtool.c    | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
index 3ed59ced0407..f38e033ab8fa 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
@@ -403,11 +403,6 @@ static bool mlx5e_ethtool_set_tcp_data_split(struct mlx5e_priv *priv,
 		return false;
 	}
 
-	/* Might need to disable HW-GRO if it was kept on due to hds. */
-	if (tcp_data_split == ETHTOOL_TCP_DATA_SPLIT_DISABLED &&
-	    dev->cfg->hds_config == ETHTOOL_TCP_DATA_SPLIT_ENABLED)
-		netdev_update_features(priv->netdev);
-
 	return true;
 }
 
@@ -468,13 +463,23 @@ static int mlx5e_set_ringparam(struct net_device *dev,
 			       struct netlink_ext_ack *extack)
 {
 	struct mlx5e_priv *priv = netdev_priv(dev);
+	int err;
 
 	if (!mlx5e_ethtool_set_tcp_data_split(priv,
 					      kernel_param->tcp_data_split,
 					      extack))
 		return -EINVAL;
 
-	return mlx5e_ethtool_set_ringparam(priv, param, extack);
+	err = mlx5e_ethtool_set_ringparam(priv, param, extack);
+	if (err)
+		return err;
+
+	/* Might need to disable HW-GRO if it was kept on due to hds. */
+	if (kernel_param->tcp_data_split == ETHTOOL_TCP_DATA_SPLIT_DISABLED &&
+	    dev->cfg->hds_config == ETHTOOL_TCP_DATA_SPLIT_ENABLED)
+		netdev_update_features(priv->netdev);
+
+	return 0;
 }
 
 void mlx5e_ethtool_get_channels(struct mlx5e_priv *priv,
-- 
2.52.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH net] net/mlx5e: Update netdev features only after a successful ringparam set
  2026-10-17  0:54 [PATCH net] net/mlx5e: Update netdev features only after a successful ringparam set Dimitri Daskalakis
@ 2026-10-17 14:24 ` Björn Töpel
  2026-10-18 16:55 ` Nimrod Oren
  1 sibling, 0 replies; 3+ messages in thread
From: Björn Töpel @ 2026-10-17 14:24 UTC (permalink / raw)
  To: Dimitri Daskalakis, David S . Miller
  Cc: Saeed Mahameed, Tariq Toukan, Mark Bloch, Leon Romanovsky,
	Andrew Lunn, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Gal Pressman, Cosmin Ratiu, Dragos Tatulea, Nimrod Oren,
	Carolina Jubran, Dimitri Daskalakis, netdev

Dimitri Daskalakis <dimitri.daskalakis1@gmail.com> writes:

> From: Dimitri Daskalakis <daskald@meta.com>
>
> mlx5 couples HW-GRO with tcp-data-split. If a user sets rx-gro-hw on ->
> tcp-data-split on -> rx-gro-hw off, the driver will leave HW-GRO on.
> mlx5e_ethtool_set_tcp_data_split() calls netdev_update_features() when
> tcp-data-split goes from enabled to disabled in case HW-GRO needs to be
> released. mlx5e_fix_features() reads the new HDS config from
> dev->cfg_pending, so HW-GRO is released before all ring parameters are
> validated.
>
> If the subsequent call to mlx5e_ethtool_set_ringparam() fails, the
> ethtool core discards the pending change and reports tcp-data-split
> enabled. The device is no longer splitting, and subsequent ring changes
> are blocked.
>
> Move the call to netdev_update_features() after
> mlx5e_ethtool_set_ringparam() exits successfully.
>
> The issue was discovered by manual code inspection during review of
> a change that stops mlx5 users from disabling tcp-data-split. It was
> reproduced on a ConnectX-7 with ethtool alone.
>
> Steps to reproduce:
> ethtool -K eth0 rx-gro-hw on
> ethtool -G eth0 tcp-data-split on
> ethtool -K eth0 rx-gro-hw off # HW-GRO kept on for tcp-data-split
>
> ethtool -G eth0 tcp-data-split off rx 1 # de-sync driver & kernel state
>  netlink error: mlx5_core: rx (1) < min (16)
>  netlink error: Invalid argument
>
> ethtool -G eth0 rx 1024 # valid ring changes are now blocked
>  netlink error: mlx5_core: TCP-data-split is not supported when GRO HW is disabled
>  netlink error: Invalid argument
>
> This is not a terminal state, users can recover by setting rx-gro-hw on.
> With the fix, the failing ringparam set leaves rx-gro-hw on and later
> ring changes succeed.
>
> Fixes: 46bcce5dfd33 ("net/mlx5e: Support ethtool tcp-data-split settings")
> Reported-by: Björn Töpel <bjorn@kernel.org>
> Closes: https://lore.kernel.org/87se2grw3d.fsf@all.your.base.are.belong.to.us/
> Signed-off-by: Dimitri Daskalakis <daskald@meta.com>

Reviewed-by: Björn Töpel <bjorn@kernel.org>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH net] net/mlx5e: Update netdev features only after a successful ringparam set
  2026-10-17  0:54 [PATCH net] net/mlx5e: Update netdev features only after a successful ringparam set Dimitri Daskalakis
  2026-10-17 14:24 ` Björn Töpel
@ 2026-10-18 16:55 ` Nimrod Oren
  1 sibling, 0 replies; 3+ messages in thread
From: Nimrod Oren @ 2026-10-18 16:55 UTC (permalink / raw)
  To: Dimitri Daskalakis, David S . Miller
  Cc: Saeed Mahameed, Tariq Toukan, Mark Bloch, Leon Romanovsky,
	Andrew Lunn, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Gal Pressman, Cosmin Ratiu, Dragos Tatulea, Carolina Jubran,
	Björn Töpel, netdev

On 17/10/2026 3:54, Dimitri Daskalakis wrote:
> From: Dimitri Daskalakis <daskald@meta.com>
> 
> mlx5 couples HW-GRO with tcp-data-split. If a user sets rx-gro-hw on ->
> tcp-data-split on -> rx-gro-hw off, the driver will leave HW-GRO on.
> mlx5e_ethtool_set_tcp_data_split() calls netdev_update_features() when
> tcp-data-split goes from enabled to disabled in case HW-GRO needs to be
> released. mlx5e_fix_features() reads the new HDS config from
> dev->cfg_pending, so HW-GRO is released before all ring parameters are
> validated.
> 
> If the subsequent call to mlx5e_ethtool_set_ringparam() fails, the
> ethtool core discards the pending change and reports tcp-data-split
> enabled. The device is no longer splitting, and subsequent ring changes
> are blocked.
> 
> Move the call to netdev_update_features() after
> mlx5e_ethtool_set_ringparam() exits successfully.
> 
> The issue was discovered by manual code inspection during review of
> a change that stops mlx5 users from disabling tcp-data-split. It was
> reproduced on a ConnectX-7 with ethtool alone.
> 
> Steps to reproduce:
> ethtool -K eth0 rx-gro-hw on
> ethtool -G eth0 tcp-data-split on
> ethtool -K eth0 rx-gro-hw off # HW-GRO kept on for tcp-data-split
> 
> ethtool -G eth0 tcp-data-split off rx 1 # de-sync driver & kernel state
>  netlink error: mlx5_core: rx (1) < min (16)
>  netlink error: Invalid argument
> 
> ethtool -G eth0 rx 1024 # valid ring changes are now blocked
>  netlink error: mlx5_core: TCP-data-split is not supported when GRO HW is disabled
>  netlink error: Invalid argument
> 
> This is not a terminal state, users can recover by setting rx-gro-hw on.
> With the fix, the failing ringparam set leaves rx-gro-hw on and later
> ring changes succeed.
> 
> Fixes: 46bcce5dfd33 ("net/mlx5e: Support ethtool tcp-data-split settings")
> Reported-by: Björn Töpel <bjorn@kernel.org>
> Closes: https://lore.kernel.org/87se2grw3d.fsf@all.your.base.are.belong.to.us/
> Signed-off-by: Dimitri Daskalakis <daskald@meta.com>

Reviewed-by: Nimrod Oren <noren@nvidia.com>


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-10-18 16:55 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-17  0:54 [PATCH net] net/mlx5e: Update netdev features only after a successful ringparam set Dimitri Daskalakis
2026-10-17 14:24 ` Björn Töpel
2026-10-18 16:55 ` Nimrod Oren

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox