[PATCH net-next v2 2/3] selftests: drv-net: Check the features set by set_ethtool_feat()

Ovidiu Panait <[email protected]>
Newsgroups org.kernel.vger.netdev,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest
Message-ID <[email protected]>
Read back the features after running ethtool -K to check if they were
actually applied. The drivers might refuse to set a feature silently and
the test could run with a different configuration than the requested one.

Add a 'check' parameter to skip this, as the GRO "hw" mode handles the
case where HW GRO is cleared by the driver.

Signed-off-by: Ovidiu Panait <[email protected]>
---
v2: New patch.

 tools/testing/selftests/drivers/net/gro_lib.py     |  3 ++-
 tools/testing/selftests/drivers/net/lib/py/feat.py | 10 +++++++++-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/drivers/net/gro_lib.py b/tools/testing/selftests/drivers/net/gro_lib.py
index 7856ebdd49d3..875a715b2ae1 100644
--- a/tools/testing/selftests/drivers/net/gro_lib.py
+++ b/tools/testing/selftests/drivers/net/gro_lib.py
@@ -263,7 +263,8 @@ def _setup(cfg, mode, test_name):
         set_ethtool_feat(cfg.ifname, cfg.feat,
                          {"generic-receive-offload": False,
                           "rx-gro-hw": True,
-                          "large-receive-offload": False})
+                          "large-receive-offload": False},
+                          check=False)
 
         # Some NICs treat HW GRO as a GRO sub-feature so disabling GRO
         # will also clear HW GRO. Use a hack of installing XDP generic
diff --git a/tools/testing/selftests/drivers/net/lib/py/feat.py b/tools/testing/selftests/drivers/net/lib/py/feat.py
index b94a24214e59..f0630844f023 100644
--- a/tools/testing/selftests/drivers/net/lib/py/feat.py
+++ b/tools/testing/selftests/drivers/net/lib/py/feat.py
@@ -9,7 +9,7 @@ Provides common operations for changing device features via ethtool.
 from . import KsftXfailEx, defer, ethtool, ksft_pr
 
 
-def set_ethtool_feat(dev, current, feats, host=None):
+def set_ethtool_feat(dev, current, feats, host=None, check=True):
     """Set ethtool features with defer to restore original state."""
     s2n = {True: "on", False: "off"}
 
@@ -33,3 +33,11 @@ def set_ethtool_feat(dev, current, feats, host=None):
     # If ethtool printed something kernel must have modified some features
     if eth_cmd.stdout:
         ksft_pr(eth_cmd)
+
+    if not check:
+        return
+
+    current = ethtool(f"-k {dev}", json=True, host=host)[0]
+    for name, state in feats.items():
+        if current[name]["active"] != state:
+            raise KsftXfailEx(f"{name} was not set to {s2n[state]}")
-- 
2.34.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.