mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 19:13:47 +02:00
net: ethtool: rss: add notifications
In preparation for RSS_SET handling in ethnl introduce Netlink notifications for RSS. Only cover modifications, not creation and not removal of a context, because the latter may deserve a different notification type. We should cross that bridge when we add the support for context add / remove via Netlink. Link: https://patch.msgid.link/20250623231720.3124717-7-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
3073947de3
commit
46837be5af
|
|
@ -2492,6 +2492,13 @@ operations:
|
|||
attributes:
|
||||
- header
|
||||
- events
|
||||
-
|
||||
name: rss-ntf
|
||||
doc: |
|
||||
Notification for change in RSS configuration.
|
||||
For additional contexts only modifications are modified, not creation
|
||||
or removal of the contexts.
|
||||
notify: rss-get
|
||||
|
||||
mcast-groups:
|
||||
list:
|
||||
|
|
|
|||
|
|
@ -281,6 +281,7 @@ Kernel to userspace:
|
|||
``ETHTOOL_MSG_MODULE_GET_REPLY`` transceiver module parameters
|
||||
``ETHTOOL_MSG_PSE_GET_REPLY`` PSE parameters
|
||||
``ETHTOOL_MSG_RSS_GET_REPLY`` RSS settings
|
||||
``ETHTOOL_MSG_RSS_NTF`` RSS settings
|
||||
``ETHTOOL_MSG_PLCA_GET_CFG_REPLY`` PLCA RS parameters
|
||||
``ETHTOOL_MSG_PLCA_GET_STATUS_REPLY`` PLCA RS status
|
||||
``ETHTOOL_MSG_PLCA_NTF`` PLCA RS parameters
|
||||
|
|
|
|||
|
|
@ -862,6 +862,7 @@ enum {
|
|||
ETHTOOL_MSG_TSCONFIG_GET_REPLY,
|
||||
ETHTOOL_MSG_TSCONFIG_SET_REPLY,
|
||||
ETHTOOL_MSG_PSE_NTF,
|
||||
ETHTOOL_MSG_RSS_NTF,
|
||||
|
||||
__ETHTOOL_MSG_KERNEL_CNT,
|
||||
ETHTOOL_MSG_KERNEL_MAX = (__ETHTOOL_MSG_KERNEL_CNT - 1)
|
||||
|
|
|
|||
|
|
@ -74,4 +74,12 @@ int ethtool_get_module_eeprom_call(struct net_device *dev,
|
|||
|
||||
bool __ethtool_dev_mm_supported(struct net_device *dev);
|
||||
|
||||
#if IS_ENABLED(CONFIG_ETHTOOL_NETLINK)
|
||||
void ethtool_rss_notify(struct net_device *dev, u32 rss_context);
|
||||
#else
|
||||
static inline void ethtool_rss_notify(struct net_device *dev, u32 rss_context)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _ETHTOOL_COMMON_H */
|
||||
|
|
|
|||
|
|
@ -1502,6 +1502,7 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev,
|
|||
struct ethtool_rxfh rxfh;
|
||||
bool locked = false; /* dev->ethtool->rss_lock taken */
|
||||
bool create = false;
|
||||
bool mod = false;
|
||||
u8 *rss_config;
|
||||
int ret;
|
||||
|
||||
|
|
@ -1688,6 +1689,7 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev,
|
|||
}
|
||||
goto out;
|
||||
}
|
||||
mod = !create && !rxfh_dev.rss_delete;
|
||||
|
||||
if (copy_to_user(useraddr + offsetof(struct ethtool_rxfh, rss_context),
|
||||
&rxfh_dev.rss_context, sizeof(rxfh_dev.rss_context)))
|
||||
|
|
@ -1757,6 +1759,8 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev,
|
|||
if (locked)
|
||||
mutex_unlock(&dev->ethtool->rss_lock);
|
||||
kfree(rss_config);
|
||||
if (mod)
|
||||
ethtool_rss_notify(dev, rxfh.rss_context);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -946,6 +946,7 @@ ethnl_default_notify_ops[ETHTOOL_MSG_KERNEL_MAX + 1] = {
|
|||
[ETHTOOL_MSG_MODULE_NTF] = ðnl_module_request_ops,
|
||||
[ETHTOOL_MSG_PLCA_NTF] = ðnl_plca_cfg_request_ops,
|
||||
[ETHTOOL_MSG_MM_NTF] = ðnl_mm_request_ops,
|
||||
[ETHTOOL_MSG_RSS_NTF] = ðnl_rss_request_ops,
|
||||
};
|
||||
|
||||
/* default notification handler */
|
||||
|
|
@ -1052,6 +1053,7 @@ static const ethnl_notify_handler_t ethnl_notify_handlers[] = {
|
|||
[ETHTOOL_MSG_MODULE_NTF] = ethnl_default_notify,
|
||||
[ETHTOOL_MSG_PLCA_NTF] = ethnl_default_notify,
|
||||
[ETHTOOL_MSG_MM_NTF] = ethnl_default_notify,
|
||||
[ETHTOOL_MSG_RSS_NTF] = ethnl_default_notify,
|
||||
};
|
||||
|
||||
void ethnl_notify(struct net_device *dev, unsigned int cmd,
|
||||
|
|
|
|||
|
|
@ -358,6 +358,17 @@ int ethnl_rss_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* RSS_NTF */
|
||||
|
||||
void ethtool_rss_notify(struct net_device *dev, u32 rss_context)
|
||||
{
|
||||
struct rss_req_info req_info = {
|
||||
.rss_context = rss_context,
|
||||
};
|
||||
|
||||
ethnl_notify(dev, ETHTOOL_MSG_RSS_NTF, &req_info.base);
|
||||
}
|
||||
|
||||
const struct ethnl_request_ops ethnl_rss_request_ops = {
|
||||
.request_cmd = ETHTOOL_MSG_RSS_GET,
|
||||
.reply_cmd = ETHTOOL_MSG_RSS_GET_REPLY,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user