selftests: drv-net: hds: restore hds settings

The test currently modifies the HDS settings and doesn't restore them.
This may cause subsequent tests to fail (or pass when they should not).
Add defer()ed reset handling.

Link: https://patch.msgid.link/20250825175939.2249165-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Jakub Kicinski
2025-08-25 10:59:39 -07:00
parent 1bec9d0c00
commit ee3ae27721

View File

@@ -3,6 +3,7 @@
import errno
import os
from typing import Union
from lib.py import ksft_run, ksft_exit, ksft_eq, ksft_raises, KsftSkipEx
from lib.py import CmdExitFailure, EthtoolFamily, NlError
from lib.py import NetDrvEnv
@@ -58,7 +59,39 @@ def get_hds_thresh(cfg, netnl) -> None:
if 'hds-thresh' not in rings:
raise KsftSkipEx('hds-thresh not supported by device')
def _hds_reset(cfg, netnl, rings) -> None:
cur = netnl.rings_get({'header': {'dev-index': cfg.ifindex}})
arg = {'header': {'dev-index': cfg.ifindex}}
if cur.get('tcp-data-split') != rings.get('tcp-data-split'):
# Try to reset to "unknown" first, we don't know if the setting
# was the default or user chose it. Default seems more likely.
arg['tcp-data-split'] = "unknown"
netnl.rings_set(arg)
cur = netnl.rings_get({'header': {'dev-index': cfg.ifindex}})
if cur['tcp-data-split'] == rings['tcp-data-split']:
del arg['tcp-data-split']
else:
# Try the explicit setting
arg['tcp-data-split'] = rings['tcp-data-split']
if cur.get('hds-thresh') != rings.get('hds-thresh'):
arg['hds-thresh'] = rings['hds-thresh']
if len(arg) > 1:
netnl.rings_set(arg)
def _defer_reset_hds(cfg, netnl) -> Union[dict, None]:
try:
rings = netnl.rings_get({'header': {'dev-index': cfg.ifindex}})
if 'hds-thresh' in rings or 'tcp-data-split' in rings:
defer(_hds_reset, cfg, netnl, rings)
except NlError as e:
pass
def set_hds_enable(cfg, netnl) -> None:
_defer_reset_hds(cfg, netnl)
try:
netnl.rings_set({'header': {'dev-index': cfg.ifindex}, 'tcp-data-split': 'enabled'})
except NlError as e:
@@ -76,6 +109,7 @@ def set_hds_enable(cfg, netnl) -> None:
ksft_eq('enabled', rings['tcp-data-split'])
def set_hds_disable(cfg, netnl) -> None:
_defer_reset_hds(cfg, netnl)
try:
netnl.rings_set({'header': {'dev-index': cfg.ifindex}, 'tcp-data-split': 'disabled'})
except NlError as e:
@@ -93,6 +127,7 @@ def set_hds_disable(cfg, netnl) -> None:
ksft_eq('disabled', rings['tcp-data-split'])
def set_hds_thresh_zero(cfg, netnl) -> None:
_defer_reset_hds(cfg, netnl)
try:
netnl.rings_set({'header': {'dev-index': cfg.ifindex}, 'hds-thresh': 0})
except NlError as e:
@@ -110,6 +145,7 @@ def set_hds_thresh_zero(cfg, netnl) -> None:
ksft_eq(0, rings['hds-thresh'])
def set_hds_thresh_random(cfg, netnl) -> None:
_defer_reset_hds(cfg, netnl)
try:
rings = netnl.rings_get({'header': {'dev-index': cfg.ifindex}})
except NlError as e:
@@ -140,6 +176,7 @@ def set_hds_thresh_random(cfg, netnl) -> None:
ksft_eq(hds_thresh, rings['hds-thresh'])
def set_hds_thresh_max(cfg, netnl) -> None:
_defer_reset_hds(cfg, netnl)
try:
rings = netnl.rings_get({'header': {'dev-index': cfg.ifindex}})
except NlError as e:
@@ -157,6 +194,7 @@ def set_hds_thresh_max(cfg, netnl) -> None:
ksft_eq(rings['hds-thresh'], rings['hds-thresh-max'])
def set_hds_thresh_gt(cfg, netnl) -> None:
_defer_reset_hds(cfg, netnl)
try:
rings = netnl.rings_get({'header': {'dev-index': cfg.ifindex}})
except NlError as e:
@@ -178,6 +216,7 @@ def set_xdp(cfg, netnl) -> None:
"""
mode = _get_hds_mode(cfg, netnl)
if mode == 'enabled':
_defer_reset_hds(cfg, netnl)
netnl.rings_set({'header': {'dev-index': cfg.ifindex},
'tcp-data-split': 'unknown'})