| From 0ec1853d400ddf2e5c97572bb42814a2c8508d9d Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 24 Jul 2024 16:42:49 -0700 |
| Subject: ethtool: rss: echo the context number back |
| |
| From: Jakub Kicinski <kuba@kernel.org> |
| |
| [ Upstream commit f96aae91b0d260f682e630e092ef70a05a718a43 ] |
| |
| The response to a GET request in Netlink should fully identify |
| the queried object. RSS_GET accepts context id as an input, |
| so it must echo that attribute back to the response. |
| |
| After (assuming context 1 has been created): |
| |
| $ ./cli.py --spec netlink/specs/ethtool.yaml \ |
| --do rss-get \ |
| --json '{"header": {"dev-index": 2}, "context": 1}' |
| {'context': 1, |
| 'header': {'dev-index': 2, 'dev-name': 'eth0'}, |
| [...] |
| |
| Fixes: 7112a04664bf ("ethtool: add netlink based get rss support") |
| Acked-by: Paolo Abeni <pabeni@redhat.com> |
| Reviewed-by: Joe Damato <jdamato@fastly.com> |
| Link: https://patch.msgid.link/20240724234249.2621109-3-kuba@kernel.org |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| Documentation/netlink/specs/ethtool.yaml | 1 + |
| Documentation/networking/ethtool-netlink.rst | 1 + |
| net/ethtool/rss.c | 8 +++++++- |
| 3 files changed, 9 insertions(+), 1 deletion(-) |
| |
| diff --git a/Documentation/netlink/specs/ethtool.yaml b/Documentation/netlink/specs/ethtool.yaml |
| index 3632c1c891e94..238145c31835e 100644 |
| --- a/Documentation/netlink/specs/ethtool.yaml |
| +++ b/Documentation/netlink/specs/ethtool.yaml |
| @@ -1638,6 +1638,7 @@ operations: |
| reply: |
| attributes: |
| - header |
| + - context |
| - hfunc |
| - indir |
| - hkey |
| diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/networking/ethtool-netlink.rst |
| index 160bfb0ae8bae..0d8c487be3993 100644 |
| --- a/Documentation/networking/ethtool-netlink.rst |
| +++ b/Documentation/networking/ethtool-netlink.rst |
| @@ -1800,6 +1800,7 @@ Kernel response contents: |
| |
| ===================================== ====== ========================== |
| ``ETHTOOL_A_RSS_HEADER`` nested reply header |
| + ``ETHTOOL_A_RSS_CONTEXT`` u32 context number |
| ``ETHTOOL_A_RSS_HFUNC`` u32 RSS hash func |
| ``ETHTOOL_A_RSS_INDIR`` binary Indir table bytes |
| ``ETHTOOL_A_RSS_HKEY`` binary Hash key bytes |
| diff --git a/net/ethtool/rss.c b/net/ethtool/rss.c |
| index 71679137eff21..5c4c4505ab9a4 100644 |
| --- a/net/ethtool/rss.c |
| +++ b/net/ethtool/rss.c |
| @@ -111,7 +111,8 @@ rss_reply_size(const struct ethnl_req_info *req_base, |
| const struct rss_reply_data *data = RSS_REPDATA(reply_base); |
| int len; |
| |
| - len = nla_total_size(sizeof(u32)) + /* _RSS_HFUNC */ |
| + len = nla_total_size(sizeof(u32)) + /* _RSS_CONTEXT */ |
| + nla_total_size(sizeof(u32)) + /* _RSS_HFUNC */ |
| nla_total_size(sizeof(u32)) + /* _RSS_INPUT_XFRM */ |
| nla_total_size(sizeof(u32) * data->indir_size) + /* _RSS_INDIR */ |
| nla_total_size(data->hkey_size); /* _RSS_HKEY */ |
| @@ -124,6 +125,11 @@ rss_fill_reply(struct sk_buff *skb, const struct ethnl_req_info *req_base, |
| const struct ethnl_reply_data *reply_base) |
| { |
| const struct rss_reply_data *data = RSS_REPDATA(reply_base); |
| + struct rss_req_info *request = RSS_REQINFO(req_base); |
| + |
| + if (request->rss_context && |
| + nla_put_u32(skb, ETHTOOL_A_RSS_CONTEXT, request->rss_context)) |
| + return -EMSGSIZE; |
| |
| if ((data->hfunc && |
| nla_put_u32(skb, ETHTOOL_A_RSS_HFUNC, data->hfunc)) || |
| -- |
| 2.43.0 |
| |