mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
selftests: drv-net: tso: don't touch dangerous feature bits
query_nic_features() detects which offloads depend on tx-gso-partial
by enabling everything, turning tx-gso-partial off, and seeing which
active features drop out. Enabling all hw features is dangerous:
we may end up enabling rx-fcs and loopback for example. For the
ice driver we end up getting into problems with feature dependencies
so the cleanup isn't successful either, and the test exits with
rx-fcs and loopback enabled.
Scope the feature probing just to segmentation bits.
Fixes: 266b835e5e ("selftests: drv-net: tso: enable test cases based on hw_features")
Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Reviewed-by: Daniel Zahka <daniel.zahka@gmail.com>
Link: https://patch.msgid.link/20260629233923.2151144-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
5d6dc22d62
commit
2f7f2e3111
|
|
@ -187,28 +187,24 @@ def query_nic_features(cfg) -> None:
|
|||
cfg.wanted_features.add(f["name"])
|
||||
|
||||
cfg.hw_features = set()
|
||||
hw_all_features_cmd = ""
|
||||
for f in features["hw"]["bits"]["bit"]:
|
||||
if f.get("value", False):
|
||||
feature = f["name"]
|
||||
cfg.hw_features.add(feature)
|
||||
hw_all_features_cmd += f" {feature} on"
|
||||
try:
|
||||
ethtool(f"-K {cfg.ifname} {hw_all_features_cmd}")
|
||||
except Exception as e:
|
||||
ksft_pr(f"WARNING: failure enabling all hw features: {e}")
|
||||
ksft_pr("partial gso feature detection may be impacted")
|
||||
cfg.hw_features.add(f["name"])
|
||||
|
||||
# Check which features are supported via GSO partial
|
||||
cfg.partial_features = set()
|
||||
if 'tx-gso-partial' in cfg.hw_features:
|
||||
seg_features = {f for f in cfg.hw_features if "segmentation" in f}
|
||||
ethtool(f"-K {cfg.ifname} " +
|
||||
" ".join(f"{f} on" for f in seg_features))
|
||||
|
||||
ethtool(f"-K {cfg.ifname} tx-gso-partial off")
|
||||
|
||||
no_partial = set()
|
||||
features = cfg.ethnl.features_get({"header": {"dev-index": cfg.ifindex}})
|
||||
for f in features["active"]["bits"]["bit"]:
|
||||
no_partial.add(f["name"])
|
||||
cfg.partial_features = cfg.hw_features - no_partial
|
||||
cfg.partial_features = seg_features - no_partial
|
||||
ethtool(f"-K {cfg.ifname} tx-gso-partial on")
|
||||
|
||||
restore_wanted_features(cfg)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user