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.
next prev parent 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