From: Jakub Kicinski <kuba@kernel.org>
To: davem@davemloft.net
Cc: netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com,
andrew+netdev@lunn.ch, horms@kernel.org, donald.hunter@gmail.com,
maxime.chevallier@bootlin.com, sdf@fomichev.me,
jdamato@fastly.com, ecree.xilinx@gmail.com,
Jakub Kicinski <kuba@kernel.org>
Subject: [PATCH net-next 5/9] net: ethtool: copy req_info from SET to NTF
Date: Sat, 21 Jun 2025 10:19:40 -0700 [thread overview]
Message-ID: <20250621171944.2619249-6-kuba@kernel.org> (raw)
In-Reply-To: <20250621171944.2619249-1-kuba@kernel.org>
Copy information parsed for SET with .req_parse to NTF handling
and therefore the GET-equivalent that it ends up executing.
This way if the SET was on a sub-object (like RSS context)
the notification will also be appropriately scoped.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
net/ethtool/netlink.h | 5 ++++-
net/ethtool/netlink.c | 14 +++++++++-----
2 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/net/ethtool/netlink.h b/net/ethtool/netlink.h
index 4a061944a3aa..373a8d5e86ae 100644
--- a/net/ethtool/netlink.h
+++ b/net/ethtool/netlink.h
@@ -23,7 +23,8 @@ void *ethnl_dump_put(struct sk_buff *skb, struct netlink_callback *cb, u8 cmd);
void *ethnl_bcastmsg_put(struct sk_buff *skb, u8 cmd);
void *ethnl_unicast_put(struct sk_buff *skb, u32 portid, u32 seq, u8 cmd);
int ethnl_multicast(struct sk_buff *skb, struct net_device *dev);
-void ethnl_notify(struct net_device *dev, unsigned int cmd, const void *data);
+void ethnl_notify(struct net_device *dev, unsigned int cmd,
+ const struct ethnl_req_info *req_info);
/**
* ethnl_strz_size() - calculate attribute length for fixed size string
@@ -338,6 +339,8 @@ int ethnl_sock_priv_set(struct sk_buff *skb, struct net_device *dev, u32 portid,
* header is already filled on entry, the rest up to @repdata_offset
* is zero initialized. This callback should only modify type specific
* request info by parsed attributes from request message.
+ * Called for both GET and SET. Information parsed for SET will
+ * be conveyed to the req_info used during NTF generation.
* @prepare_data:
* Retrieve and prepare data needed to compose a reply message. Calls to
* ethtool_ops handlers are limited to this callback. Common reply data
diff --git a/net/ethtool/netlink.c b/net/ethtool/netlink.c
index 129f9d56ac65..f4a61016b364 100644
--- a/net/ethtool/netlink.c
+++ b/net/ethtool/netlink.c
@@ -911,7 +911,7 @@ static int ethnl_default_set_doit(struct sk_buff *skb, struct genl_info *info)
swap(dev->cfg, dev->cfg_pending);
if (!ret)
goto out_ops;
- ethtool_notify(dev, ops->set_ntf_cmd);
+ ethnl_notify(dev, ops->set_ntf_cmd, req_info);
ret = 0;
out_ops:
@@ -950,7 +950,7 @@ ethnl_default_notify_ops[ETHTOOL_MSG_KERNEL_MAX + 1] = {
/* default notification handler */
static void ethnl_default_notify(struct net_device *dev, unsigned int cmd,
- const void *data)
+ const struct ethnl_req_info *orig_req_info)
{
struct ethnl_reply_data *reply_data;
const struct ethnl_request_ops *ops;
@@ -979,6 +979,9 @@ static void ethnl_default_notify(struct net_device *dev, unsigned int cmd,
req_info->dev = dev;
req_info->flags |= ETHTOOL_FLAG_COMPACT_BITSETS;
+ if (orig_req_info)
+ memcpy(&req_info[1], &orig_req_info[1],
+ ops->req_info_size - sizeof(*req_info));
netdev_ops_assert_locked(dev);
@@ -1029,7 +1032,7 @@ static void ethnl_default_notify(struct net_device *dev, unsigned int cmd,
/* notifications */
typedef void (*ethnl_notify_handler_t)(struct net_device *dev, unsigned int cmd,
- const void *data);
+ const struct ethnl_req_info *req_info);
static const ethnl_notify_handler_t ethnl_notify_handlers[] = {
[ETHTOOL_MSG_LINKINFO_NTF] = ethnl_default_notify,
@@ -1049,7 +1052,8 @@ static const ethnl_notify_handler_t ethnl_notify_handlers[] = {
[ETHTOOL_MSG_MM_NTF] = ethnl_default_notify,
};
-void ethnl_notify(struct net_device *dev, unsigned int cmd, const void *data)
+void ethnl_notify(struct net_device *dev, unsigned int cmd,
+ const struct ethnl_req_info *req_info)
{
if (unlikely(!ethnl_ok))
return;
@@ -1057,7 +1061,7 @@ void ethnl_notify(struct net_device *dev, unsigned int cmd, const void *data)
if (likely(cmd < ARRAY_SIZE(ethnl_notify_handlers) &&
ethnl_notify_handlers[cmd]))
- ethnl_notify_handlers[cmd](dev, cmd, data);
+ ethnl_notify_handlers[cmd](dev, cmd, req_info);
else
WARN_ONCE(1, "notification %u not implemented (dev=%s)\n",
cmd, netdev_name(dev));
--
2.49.0
next prev parent reply other threads:[~2025-06-21 17:19 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-21 17:19 [PATCH net-next 0/9] net: ethtool: rss: add notifications Jakub Kicinski
2025-06-21 17:19 ` [PATCH net-next 1/9] netlink: specs: add the multicast group name to spec Jakub Kicinski
2025-06-23 11:58 ` Donald Hunter
2025-06-21 17:19 ` [PATCH net-next 2/9] net: ethtool: dynamically allocate full req size req Jakub Kicinski
2025-06-23 12:01 ` Donald Hunter
2025-06-21 17:19 ` [PATCH net-next 3/9] net: ethtool: call .parse_request for SET handlers Jakub Kicinski
2025-06-21 17:19 ` [PATCH net-next 4/9] net: ethtool: remove the data argument from ethtool_notify() Jakub Kicinski
2025-06-21 17:19 ` Jakub Kicinski [this message]
2025-06-22 12:00 ` [PATCH net-next 5/9] net: ethtool: copy req_info from SET to NTF Maxime Chevallier
2025-06-23 14:37 ` Jakub Kicinski
2025-06-23 14:44 ` Maxime Chevallier
2025-06-21 17:19 ` [PATCH net-next 6/9] net: ethtool: rss: add notifications Jakub Kicinski
2025-06-21 21:06 ` kernel test robot
2025-06-21 17:19 ` [PATCH net-next 7/9] doc: ethtool: mark ETHTOOL_GRXFHINDIR as reimplemented Jakub Kicinski
2025-06-21 17:19 ` [PATCH net-next 8/9] selftests: drv-net: import things in lib one by one Jakub Kicinski
2025-06-21 17:19 ` [PATCH net-next 9/9] selftests: drv-net: test RSS Netlink notifications Jakub Kicinski
2025-06-23 17:24 ` [PATCH net-next 0/9] net: ethtool: rss: add notifications Jakub Kicinski
2025-06-23 20:10 ` patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250621171944.2619249-6-kuba@kernel.org \
--to=kuba@kernel.org \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=donald.hunter@gmail.com \
--cc=ecree.xilinx@gmail.com \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=jdamato@fastly.com \
--cc=maxime.chevallier@bootlin.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.