Make sure that the NIC under test is configured for pure Toeplitz hashing, and no input key transform (no symmetric hashing).
Signed-off-by: Jakub Kicinski kuba@kernel.org --- .../selftests/drivers/net/hw/toeplitz.py | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-)
diff --git a/tools/testing/selftests/drivers/net/hw/toeplitz.py b/tools/testing/selftests/drivers/net/hw/toeplitz.py index 9019a8c1ff62..642a5cc385b6 100755 --- a/tools/testing/selftests/drivers/net/hw/toeplitz.py +++ b/tools/testing/selftests/drivers/net/hw/toeplitz.py @@ -17,6 +17,9 @@ from lib.py import cmd, bkg, rand_port, defer from lib.py import ksft_in from lib.py import ksft_variants, KsftNamedVariant, KsftSkipEx, KsftFailEx
+# "define" for the ID of the Toeplitz hash function +ETH_RSS_HASH_TOP = 1 +
def _check_rps_and_rfs_not_configured(cfg): """Verify that RPS is not already configured.""" @@ -34,16 +37,6 @@ from lib.py import ksft_variants, KsftNamedVariant, KsftSkipEx, KsftFailEx raise KsftSkipEx(f"RFS already configured {rfs_file}: {val}")
-def _get_rss_key(cfg): - """ - Read the RSS key from the device. - Return a string in the traditional %02x:%02x:%02x:.. format. - """ - - rss = cfg.ethnl.rss_get({"header": {"dev-index": cfg.ifindex}}) - return ':'.join(f'{b:02x}' for b in rss["hkey"]) - - def _get_cpu_for_irq(irq): with open(f"/proc/irq/{irq}/smp_affinity_list", "r", encoding="utf-8") as fp: @@ -153,8 +146,22 @@ from lib.py import ksft_variants, KsftNamedVariant, KsftSkipEx, KsftFailEx # Check that rxhash is enabled ksft_in("receive-hashing: on", cmd(f"ethtool -k {cfg.ifname}").stdout)
+ rss = cfg.ethnl.rss_get({"header": {"dev-index": cfg.ifindex}}) + # Make sure NIC is configured to use Toeplitz hash, and no key xfrm. + if rss.get('hfunc') != ETH_RSS_HASH_TOP or rss.get('input-xfrm'): + cfg.ethnl.rss_set({"header": {"dev-index": cfg.ifindex}, + "hfunc": ETH_RSS_HASH_TOP, + "input-xfrm": {}}) + defer(cfg.ethnl.rss_set, {"header": {"dev-index": cfg.ifindex}, + "hfunc": rss.get('hfunc'), + "input-xfrm": rss.get('input-xfrm', {}) + }) + # Refresh in case changing hfunc changes things. + rss = cfg.ethnl.rss_get({"header": {"dev-index": cfg.ifindex}}) + + key = ':'.join(f'{b:02x}' for b in rss["hkey"]) + port = rand_port(socket.SOCK_DGRAM) - key = _get_rss_key(cfg)
toeplitz_path = cfg.test_dir / "toeplitz" rx_cmd = [