Netdev List
 help / color / mirror / Atom feed
From: Dimitri Daskalakis <dimitri.daskalakis1@gmail.com>
To: netdev-bot+sashiko@kernel.org
Cc: davem@davemloft.net, saeedm@nvidia.com, tariqt@nvidia.com,
	mbloch@nvidia.com, leon@kernel.org, andrew+netdev@lunn.ch,
	edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
	gal@nvidia.com, cratiu@nvidia.com, dtatulea@nvidia.com,
	noren@nvidia.com, cjubran@nvidia.com, bjorn@kernel.org,
	netdev@vger.kernel.org
Subject: Re: [PATCH net-next v3] net/mlx5e: advertise tcp-data-split support
Date: Thu, 15 Oct 2026 15:52:05 -0700	[thread overview]
Message-ID: <e34eba12-ecab-4215-b75b-eea3e29fefb2@gmail.com> (raw)
In-Reply-To: <179160117016.434549.2094341982375611260@kernel.org>

On 10/9/26 7:59 PM, netdev-bot+sashiko@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 4 potential
> issue(s) to consider.
> 
> Critical: 0 · High: 0 · Medium: 2 · Low: 2
> 
> If you believe none of the issues are legitimate, please reply to each
> issue of Medium severity or higher and explain why the AI is wrong.
> If any of them are legitimate and you plan to respin, please let patchwork
> know by including "pw-bot: cr" as a separate line at the end of your reply
> (one such reply per series is enough).
> 
> - [Medium] The patch is titled "advertise tcp-data-split support" and
>   says it will "Add back tcp-data-split reporting", but…
> - [Medium] On an mlx5 device with rx-gro-hw on,
>   mlx5e_ethtool_get_ringparam() now reports tcp-data-split='enabled'…
> - [Low] The commit message says "This is not a fix" and carries no Fixes:
>   tag, but the patch fixes real defects that the message itself…
> - [Low] With rx-gro-hw on and dev->cfg->hds_config == UNKNOWN,
>   mlx5e_ethtool_get_ringparam() now reports tcp-data-split=enabled from…
> 
> --
> 
> net/mlx5e: advertise tcp-data-split support
> 
> This commit brings back tcp-data-split reporting in
> mlx5e_ethtool_get_ringparam() when SHAMPO is active. It also rejects
> requests to disable tcp-data-split. Finally, it moves
> netdev_update_features() so that it only runs after
> mlx5e_ethtool_set_ringparam() succeeds.
> 
>> This is not a fix since HDS/tcp-data-split is still functional with HW
>> GRO enabled.
> 
> [Severity: Low]
> Is this accurate? The patch seems to fix problems that the commit message
> itself describes:
> 
>   - the tcp-data-split reporting that 46bcce5dfd33 dropped from ethtool -g
>   - the KeyError in hds.set_hds_enable/disable since d347b28c492e
>   - the feature/config de-sync caused by calling netdev_update_features()
>     before mlx5e_ethtool_set_ringparam()
> 
> For the last one: in the baseline, mlx5e_ethtool_set_tcp_data_split()
> called netdev_update_features() before the ring sizes were validated.
> mlx5e_fix_features() looks at netdev->cfg_pending:
> 
> drivers/net/ethernet/mellanox/mlx5/core/en_main.c:mlx5e_fix_features() {
>     ...
> 	if (cfg && cfg->hds_config == ETHTOOL_TCP_DATA_SPLIT_ENABLED &&
> 	    !(features & NETIF_F_GRO_HW)) {
>     ...
> }
> 
> Take a request like "ethtool -G ethX rx 1 tcp-data-split off" while
> hds_config is ENABLED. HW-GRO/SHAMPO could be turned off first. The
> rx_pending minimum check then fails, and the ethtool core discards
> cfg_pending. dev->cfg->hds_config stays ENABLED, but the HW is no longer
> splitting.
> 
> There is no Fixes: tag, so stable tooling won't pick these fixes up for
> kernels that contain 46bcce5dfd33 and d347b28c492e. Could the reporting
> restore and the netdev_update_features() reordering be split into their
> own patches with Fixes: tags? The uAPI behavior change that rejects
> tcp-data-split off could then stay separate.
> 

The lack of tcp-data-split reporting that d347b28c492e introduced does not
cause any user facing issues, so this does not warrant a standalone Fix.

The early call to netdev_update_features() is a real bug. A user can get
themselves into a state where all ring changes are blocked. I've been able
to verify this on a 6.16 kernel. Fortunately this state is not terminal,
users can recover by setting rx-gro-hw on. I'll send the Fix to net.

>> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
>> index 261c466a4d362..c30d751cac2fa 100644
>> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
>> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
>> @@ -378,6 +378,9 @@ void mlx5e_ethtool_get_ringparam(struct mlx5e_priv *priv,
>>  
>>  	kernel_param->hds_thresh = 0;
>>  	kernel_param->hds_thresh_max = 0;
>> +
>> +	if (priv->channels.params.packet_merge.type == MLX5E_PACKET_MERGE_SHAMPO)
>> +		kernel_param->tcp_data_split = ETHTOOL_TCP_DATA_SPLIT_ENABLED;
>>  }
> 
> [Severity: Medium]
> The subject says "advertise tcp-data-split support" and the message says
> "Add back tcp-data-split reporting". However, this only ever writes
> ENABLED, and only when SHAMPO is active. The code removed by 46bcce5dfd33
> also reported DISABLED when SHAMPO was not active.
> 
> HW-GRO is off by default on mlx5, since mlx5e_build_nic_netdev() clears
> NETIF_F_GRO_HW. In that case:
> 
>   - rings_prepare_data() pre-fills tcp_data_split from
>     dev->cfg->hds_config (UNKNOWN)
>   - the driver leaves it untouched
>   - rings_fill_reply() leaves out the attribute:
> 
> net/ethtool/rings.c:rings_fill_reply() {
>     ...
> 	    (kr->tcp_data_split &&
> 	     (nla_put_u8(skb, ETHTOOL_A_RINGS_TCP_DATA_SPLIT,
>     ...
> }
> 
> So user space sees tcp-data-split as unsupported, even though the device
> advertises ETHTOOL_RING_USE_TCP_DATA_SPLIT and is in fact not splitting.
> The post-patch log in the changelog shows this:
> 
>   ok 1 hds.get_hds # SKIP tcp-data-split not supported by device
> 
> mlx5e_ethtool_set_tcp_data_split() now also rejects
> ETHTOOL_TCP_DATA_SPLIT_DISABLED unconditionally. On a default-configured
> device, the off state can then be neither reported nor requested.
> 
> Would it be safe to report ETHTOOL_TCP_DATA_SPLIT_DISABLED when SHAMPO is
> not active? Both ethtool_ringparam_get_cfg() and the netlink set path
> replace the driver-reported value with dev->cfg->hds_config.
> 

It's safe to report ETHTOOL_TCP_DATA_SPLIT_DISABLED based on the SHAMPO
state. The set path safely ignores what get returns. Will update this in
the next version.

> [Severity: Low]
> With rx-gro-hw on and dev->cfg->hds_config == UNKNOWN, this now reports
> enabled. Can hds.set_hds_enable then leave hds_config stuck at ENABLED
> after the test finishes?
> 
> _defer_reset_hds() saves tcp-data-split as 'enabled' (from SHAMPO state)
> set_hds_enable() writes tcp-data-split 'enabled'
>   ethnl_set_rings()
>     dev->cfg_pending->hds_config = kernel_ringparam.tcp_data_split;
> _hds_reset() at cleanup:
>     if cur.get('tcp-data-split') != rings.get('tcp-data-split'):
> 
> Both values are 'enabled', so 'unknown' is never written back.
> 
> After that, mlx5e_fix_features() keeps NETIF_F_GRO_HW forced on, and
> "ethtool -K rx-gro-hw off" no longer takes effect. dev_xdp_attach() also
> rejects single-buffer XDP:
> 
> 	if (dev->cfg->hds_config == ETHTOOL_TCP_DATA_SPLIT_ENABLED &&
> 	    prog && !prog->aux->xdp_has_frags) {
> 
> In a full hds.py run, the later set_xdp tests write 'unknown' and hide
> this. It shows up when set_hds_enable runs alone, or as the last test that
> touches HDS.
> 
> The root cause is that the test compares reported state rather than
> config, and netdevsim has the same pattern. This patch is what makes it
> reachable on mlx5, though. Should _hds_reset() or the driver reporting
> be adjusted?
> 

This issue is unique to mlx5 since tcp-data-split is tied to HW-GRO. We
shouldn't modify a generic test to account for this coupling.

> [Severity: Medium]
> On mlx5 with rx-gro-hw on, do hds.set_xdp and hds.ioctl_set_xdp now go
> from SKIP to FAIL?
> 
> Both tests see mode 'enabled', write 'unknown', and then attach a
> single-buffer XDP program:
> 
> tools/testing/selftests/drivers/net/hds.py:set_xdp() {
>     ...
>     if mode == 'enabled':
>         _defer_reset_hds(cfg, netnl)
>         netnl.rings_set({'header': {'dev-index': cfg.ifindex},
>                          'tcp-data-split': 'unknown'})
> 
>     _xdp_onoff(cfg)
> }
> 
> If cfg is already UNKNOWN, ethnl_set_rings() returns 0 on !mod and the
> 'unknown' write does nothing. Otherwise it only clears the config, and
> GRO_HW stays wanted. Either way SHAMPO stays active:
> 
> mlx5e_xdp_set()
>   mlx5e_xdp_allowed()
> 	if (params->packet_merge.type != MLX5E_PACKET_MERGE_NONE) {
> 		netdev_warn(netdev, "can't set XDP while HW-GRO/LRO is on, disable them first\n");
> 		return -EINVAL;
> 
> The log in the changelog only covers the HW-GRO off case, where these
> tests are skipped. Was the HW-GRO on configuration tested as well?
> 
> [ ... ]
> 

It's fine for these test to fail given mlx5's HW-GRO and tcp-data-split
coupling.


  reply	other threads:[~2026-10-15 22:52 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-09  2:51 [PATCH net-next v3] net/mlx5e: advertise tcp-data-split support Dimitri Daskalakis
2026-10-09  6:41 ` Björn Töpel
2026-10-10  2:59 ` netdev-bot+sashiko
2026-10-15 22:52   ` Dimitri Daskalakis [this message]
2026-10-12 11:35 ` Nimrod Oren
2026-10-15 23:05   ` 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=e34eba12-ecab-4215-b75b-eea3e29fefb2@gmail.com \
    --to=dimitri.daskalakis1@gmail.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=bjorn@kernel.org \
    --cc=cjubran@nvidia.com \
    --cc=cratiu@nvidia.com \
    --cc=davem@davemloft.net \
    --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-bot+sashiko@kernel.org \
    --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