Netdev List
 help / color / mirror / Atom feed
From: "Björn Töpel" <bjorn@kernel.org>
To: Dimitri Daskalakis <dimitri.daskalakis1@gmail.com>,
	"David S . Miller" <davem@davemloft.net>
Cc: Saeed Mahameed <saeedm@nvidia.com>,
	Tariq Toukan <tariqt@nvidia.com>, Mark Bloch <mbloch@nvidia.com>,
	Leon Romanovsky <leon@kernel.org>,
	Andrew Lunn <andrew+netdev@lunn.ch>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Gal Pressman <gal@nvidia.com>, Cosmin Ratiu <cratiu@nvidia.com>,
	Dragos Tatulea <dtatulea@nvidia.com>,
	Nimrod Oren <noren@nvidia.com>,
	Carolina Jubran <cjubran@nvidia.com>,
	Dimitri Daskalakis <dimitri.daskalakis1@gmail.com>,
	netdev@vger.kernel.org
Subject: Re: [PATCH net-next v2] net/mlx5e: advertise tcp-data-split support
Date: Thu, 08 Oct 2026 18:33:10 +0200	[thread overview]
Message-ID: <87se2grw3d.fsf@all.your.base.are.belong.to.us> (raw)
In-Reply-To: <20261006225925.568263-1-dimitri.daskalakis1@gmail.com>

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

> From: Dimitri Daskalakis <daskald@meta.com>
>
> The ability to set tcp-data-split was introduced in
> commit 46bcce5dfd33 ("net/mlx5e: Support ethtool tcp-data-split settings")
> This commit dropped reporting from mlx5e_ethtool_get_ringparam()
> without explaining why. commit d347b28c492e ("net/mlx5e: Add hds-thresh
> query support via ethtool") added support for ETHTOOL_RING_USE_HDS_THRS,
> and modified mlx5e_ethtool_get_ringparam() to report an hds_thresh of 0.
>
> Between these two commits, the hds selftest helper _defer_reset_hds()
> would skip the reset because neither hds-thresh or tcp-data-split was
> present in the ring config. After the second commit this introduced
> a KeyError in the hds.set_hds_enable/disable tests.
>
> mlx5 couples tcp-data-split with rx-gro-hw. Users can currently disable
> tcp-data-split then enable HW GRO. The kernel reports tcp-data-split
> off, but the HW is presumably splitting.
>
> Add back tcp-data-split reporting in mlx5e_ethtool_get_ringparam(),
> and de-feature tcp-data-split disable. Users can either enable it
> (if HW GRO is enabled), or leave it under driver control.
>
> This is not a fix since the feature is still functional with
> HW GRO enabled.
>
> Signed-off-by: Dimitri Daskalakis <daskald@meta.com>
> ---
> Changes in v2:
> - Leave kernel_param->tcp_data_split as ETHTOOL_TCP_DATA_SPLIT_UNKNOWN if the
>   device does not support HW GRO
> - Prevent users from disabling tcp-data-split
> - Link to v1: https://lore.kernel.org/all/20260923230521.1267511-1-dimitri.daskalakis1@gmail.com/
>
> hds.py before:
>  # Interface: eth0, driver: mlx5_core
>  TAP version 13
>  1..13
>  ok 1 hds.get_hds # SKIP tcp-data-split not supported by device
>  ok 2 hds.get_hds_thresh
>  # Exception while handling defer / cleanup (callback 1 of 1)!
>  ...
>  # Defer Exception| KeyError: 'tcp-data-split'
>  # Defer Exception|
>  not ok 3 hds.set_hds_disable
>  # Exception while handling defer / cleanup (callback 1 of 1)!
>  ...
>  # Defer Exception| KeyError: 'tcp-data-split'
>  # Defer Exception|
>  not ok 4 hds.set_hds_enable
>  ok 5 hds.set_hds_thresh_random # SKIP hds-thresh-max is too small
>  ok 6 hds.set_hds_thresh_zero
>  ok 7 hds.set_hds_thresh_max
>  ok 8 hds.set_hds_thresh_gt
>  ok 9 hds.set_xdp # SKIP tcp-data-split not supported by device
>  ok 10 hds.enabled_set_xdp # SKIP tcp-data-split not supported by device
>  ok 11 hds.ioctl # SKIP tcp-data-split not supported by device
>  ok 12 hds.ioctl_set_xdp # SKIP tcp-data-split not supported by device
>  ok 13 hds.ioctl_enabled_set_xdp # SKIP tcp-data-split not supported by device
>
> hds.py after:
>  # Interface: eth0, driver: mlx5_core
>  TAP version 13
>  1..13
>  ok 1 hds.get_hds # SKIP tcp-data-split not supported by device
>  ok 2 hds.get_hds_thresh
>  ok 3 hds.set_hds_disable # SKIP disabling of HDS not supported by the device
>  ok 4 hds.set_hds_enable # SKIP disabling of HDS not supported by the device
>  ok 5 hds.set_hds_thresh_random # SKIP hds-thresh-max is too small
>  ok 6 hds.set_hds_thresh_zero
>  ok 7 hds.set_hds_thresh_max
>  ok 8 hds.set_hds_thresh_gt
>  ok 9 hds.set_xdp # SKIP tcp-data-split not supported by device
>  ok 10 hds.enabled_set_xdp # SKIP tcp-data-split not supported by device
>  ok 11 hds.ioctl # SKIP tcp-data-split not supported by device
>  ok 12 hds.ioctl_set_xdp # SKIP tcp-data-split not supported by device
>  ok 13 hds.ioctl_enabled_set_xdp # SKIP tcp-data-split not supported by device
>  # Totals: pass:4 fail:0 xfail:0 xpass:0 skip:9 error:0
> ---
>  .../net/ethernet/mellanox/mlx5/core/en_ethtool.c    | 13 +++++++++++--
>  1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
> index 261c466a4d36..f08a968acec4 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
> @@ -378,6 +378,10 @@ void mlx5e_ethtool_get_ringparam(struct mlx5e_priv *priv,
>  
>  	kernel_param->hds_thresh = 0;
>  	kernel_param->hds_thresh_max = 0;
> +
> +	if (priv->netdev->hw_features & NETIF_F_GRO_HW &&
> +	    priv->channels.params.packet_merge.type == MLX5E_PACKET_MERGE_SHAMPO)
> +		kernel_param->tcp_data_split = ETHTOOL_TCP_DATA_SPLIT_ENABLED;
>  }
>  
>  static void mlx5e_get_ringparam(struct net_device *dev,
> @@ -403,9 +407,14 @@ static bool mlx5e_ethtool_set_tcp_data_split(struct mlx5e_priv *priv,
>  		return false;
>  	}
>  
> +	if (tcp_data_split == ETHTOOL_TCP_DATA_SPLIT_DISABLED) {
> +		NL_SET_ERR_MSG_MOD(extack,
> +				   "TCP-data-split can not be disabled");
> +		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)
> +	if (dev->cfg->hds_config != tcp_data_split)
>  		netdev_update_features(priv->netdev);

Not directly related to your change, but is it correct to call
netdev_update_features() here? What if later changes in set_ringparam()
fail? Shouldn't the update be done when we know that set_ringparam() is
successful? Seems like we can get into an inconsistent state?


Björn

  reply	other threads:[~2026-10-08 16:33 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-06 22:59 [PATCH net-next v2] net/mlx5e: advertise tcp-data-split support Dimitri Daskalakis
2026-10-08 16:33 ` Björn Töpel [this message]
2026-10-08 17:32   ` Dimitri Daskalakis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87se2grw3d.fsf@all.your.base.are.belong.to.us \
    --to=bjorn@kernel.org \
    --cc=andrew+netdev@lunn.ch \
    --cc=cjubran@nvidia.com \
    --cc=cratiu@nvidia.com \
    --cc=davem@davemloft.net \
    --cc=dimitri.daskalakis1@gmail.com \
    --cc=dtatulea@nvidia.com \
    --cc=edumazet@google.com \
    --cc=gal@nvidia.com \
    --cc=kuba@kernel.org \
    --cc=leon@kernel.org \
    --cc=mbloch@nvidia.com \
    --cc=netdev@vger.kernel.org \
    --cc=noren@nvidia.com \
    --cc=pabeni@redhat.com \
    --cc=saeedm@nvidia.com \
    --cc=tariqt@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox