Commit 244f8aa4 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

ethtool: rss: fix hiding unsupported fields in dumps



Commit ec6e57be ("ethtool: rss: don't report key if device
doesn't support it") intended to stop reporting key fields for
additional rss contexts if device has a global hashing key.

Later we added dump support and the filtering wasn't properly
added there. So we end up reporting the key fields in dumps
but not in dos:

  # ./pyynl/cli.py --spec netlink/specs/ethtool.yaml --do rss-get \
		--json '{"header": {"dev-index":2}, "context": 1 }'
  {
     "header": { ... },
     "context": 1,
     "indir": [0, 1, 2, 3, ...]]
  }

  # ./pyynl/cli.py --spec netlink/specs/ethtool.yaml --dump rss-get
  [
     ... snip context 0 ...
     { "header": { ... },
       "context": 1,
       "indir": [0, 1, 2, 3, ...],
 ->    "input_xfrm": 255,
 ->    "hfunc": 1,
 ->    "hkey": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
     }
  ]

Hide these fields correctly.

The drivers/net/hw/rss_ctx.py selftest catches this when run on
a device with single key, already:

  # Check| At /root/./ksft-net-drv/drivers/net/hw/rss_ctx.py, line 381, in test_rss_context_dump:
  # Check|     ksft_ne(set(data.get('hkey', [1])), {0}, "key is all zero")
  # Check failed {0} == {0} key is all zero
  not ok 8 rss_ctx.test_rss_context_dump

Fixes: f6122900 ("ethtool: rss: support dumping RSS contexts")
Reviewed-by: default avatarGal Pressman <gal@nvidia.com>
Reviewed-by: default avatarJoe Damato <jdamato@fastly.com>
Link: https://patch.msgid.link/20250201013040.725123-2-kuba@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 0e6dc66b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -107,6 +107,8 @@ rss_prepare_ctx(const struct rss_req_info *request, struct net_device *dev,
	u32 total_size, indir_bytes;
	u8 *rss_config;

	data->no_key_fields = !dev->ethtool_ops->rxfh_per_ctx_key;

	ctx = xa_load(&dev->ethtool->rss_ctx, request->rss_context);
	if (!ctx)
		return -ENOENT;
@@ -153,7 +155,6 @@ rss_prepare_data(const struct ethnl_req_info *req_base,
		if (!ops->cap_rss_ctx_supported && !ops->create_rxfh_context)
			return -EOPNOTSUPP;

		data->no_key_fields = !ops->rxfh_per_ctx_key;
		return rss_prepare_ctx(request, dev, data, info);
	}