|
Jiri Slaby |
221c28 |
From: Po-Hsu Lin <po-hsu.lin@canonical.com>
|
|
Jiri Slaby |
221c28 |
Date: Thu, 16 Mar 2023 00:53:53 +0800
|
|
Jiri Slaby |
221c28 |
Subject: [PATCH] selftests: net: devlink_port_split.py: skip test if no
|
|
Jiri Slaby |
221c28 |
suitable device available
|
|
Jiri Slaby |
221c28 |
References: bsc#1012628
|
|
Jiri Slaby |
221c28 |
Patch-mainline: 6.2.8
|
|
Jiri Slaby |
221c28 |
Git-commit: 24994513ad13ff2c47ba91d2b5df82c3d496c370
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
[ Upstream commit 24994513ad13ff2c47ba91d2b5df82c3d496c370 ]
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
The `devlink -j port show` command output may not contain the "flavour"
|
|
Jiri Slaby |
221c28 |
key, an example from Ubuntu 22.10 s390x LPAR(5.19.0-37-generic), with
|
|
Jiri Slaby |
221c28 |
mlx4 driver and iproute2-5.15.0:
|
|
Jiri Slaby |
221c28 |
{"port":{"pci/0001:00:00.0/1":{"type":"eth","netdev":"ens301"},
|
|
Jiri Slaby |
221c28 |
"pci/0001:00:00.0/2":{"type":"eth","netdev":"ens301d1"},
|
|
Jiri Slaby |
221c28 |
"pci/0002:00:00.0/1":{"type":"eth","netdev":"ens317"},
|
|
Jiri Slaby |
221c28 |
"pci/0002:00:00.0/2":{"type":"eth","netdev":"ens317d1"}}}
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
This will cause a KeyError exception.
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
Create a validate_devlink_output() to check for this "flavour" from
|
|
Jiri Slaby |
221c28 |
devlink command output to avoid this KeyError exception. Also let
|
|
Jiri Slaby |
221c28 |
it handle the check for `devlink -j dev show` output in main().
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
Apart from this, if the test was not started because the max lanes of
|
|
Jiri Slaby |
221c28 |
the designated device is 0. The script will still return 0 and thus
|
|
Jiri Slaby |
221c28 |
causing a false-negative test result.
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
Use a found_max_lanes flag to determine if these tests were skipped
|
|
Jiri Slaby |
221c28 |
due to this reason and return KSFT_SKIP to make it more clear.
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
Link: https://bugs.launchpad.net/bugs/1937133
|
|
Jiri Slaby |
221c28 |
Fixes: f3348a82e727 ("selftests: net: Add port split test")
|
|
Jiri Slaby |
221c28 |
Signed-off-by: Po-Hsu Lin <po-hsu.lin@canonical.com>
|
|
Jiri Slaby |
221c28 |
Link: https://lore.kernel.org/r/20230315165353.229590-1-po-hsu.lin@canonical.com
|
|
Jiri Slaby |
221c28 |
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
Jiri Slaby |
221c28 |
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
|
Jiri Slaby |
221c28 |
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
|
|
Jiri Slaby |
221c28 |
---
|
|
Jiri Slaby |
221c28 |
.../selftests/net/devlink_port_split.py | 36 ++++++++++++++++---
|
|
Jiri Slaby |
221c28 |
1 file changed, 31 insertions(+), 5 deletions(-)
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
diff --git a/tools/testing/selftests/net/devlink_port_split.py b/tools/testing/selftests/net/devlink_port_split.py
|
|
Jiri Slaby |
221c28 |
index 2b5d6ff8..2d84c7a0 100755
|
|
Jiri Slaby |
221c28 |
--- a/tools/testing/selftests/net/devlink_port_split.py
|
|
Jiri Slaby |
221c28 |
+++ b/tools/testing/selftests/net/devlink_port_split.py
|
|
Jiri Slaby |
221c28 |
@@ -59,6 +59,8 @@ class devlink_ports(object):
|
|
Jiri Slaby |
221c28 |
assert stderr == ""
|
|
Jiri Slaby |
221c28 |
ports = json.loads(stdout)['port']
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
+ validate_devlink_output(ports, 'flavour')
|
|
Jiri Slaby |
221c28 |
+
|
|
Jiri Slaby |
221c28 |
for port in ports:
|
|
Jiri Slaby |
221c28 |
if dev in port:
|
|
Jiri Slaby |
221c28 |
if ports[port]['flavour'] == 'physical':
|
|
Jiri Slaby |
221c28 |
@@ -220,6 +222,27 @@ def split_splittable_port(port, k, lanes, dev):
|
|
Jiri Slaby |
221c28 |
unsplit(port.bus_info)
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
+def validate_devlink_output(devlink_data, target_property=None):
|
|
Jiri Slaby |
221c28 |
+ """
|
|
Jiri Slaby |
221c28 |
+ Determine if test should be skipped by checking:
|
|
Jiri Slaby |
221c28 |
+ 1. devlink_data contains values
|
|
Jiri Slaby |
221c28 |
+ 2. The target_property exist in devlink_data
|
|
Jiri Slaby |
221c28 |
+ """
|
|
Jiri Slaby |
221c28 |
+ skip_reason = None
|
|
Jiri Slaby |
221c28 |
+ if any(devlink_data.values()):
|
|
Jiri Slaby |
221c28 |
+ if target_property:
|
|
Jiri Slaby |
221c28 |
+ skip_reason = "{} not found in devlink output, test skipped".format(target_property)
|
|
Jiri Slaby |
221c28 |
+ for key in devlink_data:
|
|
Jiri Slaby |
221c28 |
+ if target_property in devlink_data[key]:
|
|
Jiri Slaby |
221c28 |
+ skip_reason = None
|
|
Jiri Slaby |
221c28 |
+ else:
|
|
Jiri Slaby |
221c28 |
+ skip_reason = 'devlink output is empty, test skipped'
|
|
Jiri Slaby |
221c28 |
+
|
|
Jiri Slaby |
221c28 |
+ if skip_reason:
|
|
Jiri Slaby |
221c28 |
+ print(skip_reason)
|
|
Jiri Slaby |
221c28 |
+ sys.exit(KSFT_SKIP)
|
|
Jiri Slaby |
221c28 |
+
|
|
Jiri Slaby |
221c28 |
+
|
|
Jiri Slaby |
221c28 |
def make_parser():
|
|
Jiri Slaby |
221c28 |
parser = argparse.ArgumentParser(description='A test for port splitting.')
|
|
Jiri Slaby |
221c28 |
parser.add_argument('--dev',
|
|
Jiri Slaby |
221c28 |
@@ -240,12 +263,9 @@ def main(cmdline=None):
|
|
Jiri Slaby |
221c28 |
stdout, stderr = run_command(cmd)
|
|
Jiri Slaby |
221c28 |
assert stderr == ""
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
+ validate_devlink_output(json.loads(stdout))
|
|
Jiri Slaby |
221c28 |
devs = json.loads(stdout)['dev']
|
|
Jiri Slaby |
221c28 |
- if devs:
|
|
Jiri Slaby |
221c28 |
- dev = list(devs.keys())[0]
|
|
Jiri Slaby |
221c28 |
- else:
|
|
Jiri Slaby |
221c28 |
- print("no devlink device was found, test skipped")
|
|
Jiri Slaby |
221c28 |
- sys.exit(KSFT_SKIP)
|
|
Jiri Slaby |
221c28 |
+ dev = list(devs.keys())[0]
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
cmd = "devlink dev show %s" % dev
|
|
Jiri Slaby |
221c28 |
stdout, stderr = run_command(cmd)
|
|
Jiri Slaby |
221c28 |
@@ -255,6 +275,7 @@ def main(cmdline=None):
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
ports = devlink_ports(dev)
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
+ found_max_lanes = False
|
|
Jiri Slaby |
221c28 |
for port in ports.if_names:
|
|
Jiri Slaby |
221c28 |
max_lanes = get_max_lanes(port.name)
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
@@ -277,6 +298,11 @@ def main(cmdline=None):
|
|
Jiri Slaby |
221c28 |
split_splittable_port(port, lane, max_lanes, dev)
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
lane //= 2
|
|
Jiri Slaby |
221c28 |
+ found_max_lanes = True
|
|
Jiri Slaby |
221c28 |
+
|
|
Jiri Slaby |
221c28 |
+ if not found_max_lanes:
|
|
Jiri Slaby |
221c28 |
+ print(f"Test not started, no port of device {dev} reports max_lanes")
|
|
Jiri Slaby |
221c28 |
+ sys.exit(KSFT_SKIP)
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
|
|
Jiri Slaby |
221c28 |
if __name__ == "__main__":
|
|
Jiri Slaby |
221c28 |
--
|
|
Jiri Slaby |
221c28 |
2.35.3
|
|
Jiri Slaby |
221c28 |
|