Re: [PATCH net-next] selftests: drv-net: hw: reset HDS mode after netkit devmem tests

Bobby Eshleman <[email protected]> Wed, 5 Aug 2026 13:02:37 -0700
Newsgroups org.kernel.vger.linux-kselftest,org.kernel.vger.netdev
Message-ID <[email protected]>
On Tue, Aug 04, 2026 at 08:10:40AM -0700, Jakub Kicinski wrote:
> HDS mode has confusing semantics. On GET kernel reports
> effective mode. On SET kernel expects explicit config.
> Effective mode on GET means that we know the current
> state, but we don't know if it's a driver default
> or user setting. This matter because driver default
> can change automatically when e.g. XDP is attached.
> Explicit user setting must not be lost.
> 
> With that in mind, we can't restore the HDS setting
> like we restore other NIC config. We should always
> reset to default ("unknown").
> 
> This fixes an issue with tests running after the devmem
> test not being able to attach XDP, e.g.
> 
>    Exception|   File "./xdp_metadata.py", line 105, in test_xdp_rss_hash
>    [...]
>    Exception| net.lib.py.utils.CmdExitFailure: Command failed
>    Exception| CMD: ip link set dev ens9np0 xdpdrv pinned /sys/fs/bpf/xdp_metadata_test/xdp_rss_hash
>    Exception|   EXIT: 2
>    Exception|   STDERR: Error: unable to install XDP to device using tcp-data-split.
>    not ok 1 xdp_metadata.test_xdp_rss_hash.tcp
> 
> Signed-off-by: Jakub Kicinski <[email protected]>
> ---
> CC: [email protected]
> CC: [email protected]
> CC: [email protected]
> CC: [email protected]
> CC: [email protected]
> CC: [email protected]
> ---
>  tools/testing/selftests/drivers/net/hw/devmem_lib.py | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/tools/testing/selftests/drivers/net/hw/devmem_lib.py b/tools/testing/selftests/drivers/net/hw/devmem_lib.py
> index 0921ff03eb81..4e6316c7de96 100644
> --- a/tools/testing/selftests/drivers/net/hw/devmem_lib.py
> +++ b/tools/testing/selftests/drivers/net/hw/devmem_lib.py
> @@ -37,14 +37,13 @@ from lib.py import (bkg, cmd, defer, ethtool, rand_port, wait_port_listen,
>      rings = ethnl.rings_get({'header': {'dev-index': cfg.ifindex}})
>      orig_rx_rings = rings['rx']
>      orig_hds_thresh = rings.get('hds-thresh', 0)
> -    orig_data_split = rings.get('tcp-data-split', 'unknown')
>  
>      ethnl.rings_set({'header': {'dev-index': cfg.ifindex},
>                       'tcp-data-split': 'enabled',
>                       'hds-thresh': 0,
>                       'rx': min(64, orig_rx_rings)})
>      defer(ethnl.rings_set, {'header': {'dev-index': cfg.ifindex},
> -                            'tcp-data-split': orig_data_split,
> +                            'tcp-data-split': 'unknown',
>                              'hds-thresh': orig_hds_thresh,
>                              'rx': orig_rx_rings})
>  
> -- 
> 2.55.0
> 

Reviewed-by: Bobby Eshleman <[email protected]>