mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 13:30:45 -05:00
ethtool: rejig the RSS notification machinery for more types
In anticipation for CREATE and DELETE notifications - explicitly pass the notification type to ethtool_rss_notify(), when calling from the IOCTL code. Reviewed-by: Gal Pressman <gal@nvidia.com> Link: https://patch.msgid.link/20250717234343.2328602-3-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -76,9 +76,10 @@ 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);
|
||||
void ethtool_rss_notify(struct net_device *dev, u32 type, u32 rss_context);
|
||||
#else
|
||||
static inline void ethtool_rss_notify(struct net_device *dev, u32 rss_context)
|
||||
static inline void
|
||||
ethtool_rss_notify(struct net_device *dev, u32 type, u32 rss_context)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1105,7 +1105,7 @@ ethtool_set_rxfh_fields(struct net_device *dev, u32 cmd, void __user *useraddr)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
ethtool_rss_notify(dev, fields.rss_context);
|
||||
ethtool_rss_notify(dev, ETHTOOL_MSG_RSS_NTF, fields.rss_context);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1520,8 +1520,8 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev,
|
||||
struct ethtool_rxnfc rx_rings;
|
||||
struct ethtool_rxfh rxfh;
|
||||
bool create = false;
|
||||
bool mod = false;
|
||||
u8 *rss_config;
|
||||
int ntf = 0;
|
||||
int ret;
|
||||
|
||||
if (!ops->get_rxnfc || !ops->set_rxfh)
|
||||
@@ -1671,6 +1671,7 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev,
|
||||
rxfh_dev.input_xfrm = rxfh.input_xfrm;
|
||||
|
||||
if (!rxfh.rss_context) {
|
||||
ntf = ETHTOOL_MSG_RSS_NTF;
|
||||
ret = ops->set_rxfh(dev, &rxfh_dev, extack);
|
||||
} else if (create) {
|
||||
ret = ops->create_rxfh_context(dev, ctx, &rxfh_dev, extack);
|
||||
@@ -1682,9 +1683,11 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev,
|
||||
ret = ops->remove_rxfh_context(dev, ctx, rxfh.rss_context,
|
||||
extack);
|
||||
} else {
|
||||
ntf = ETHTOOL_MSG_RSS_NTF;
|
||||
ret = ops->modify_rxfh_context(dev, ctx, &rxfh_dev, extack);
|
||||
}
|
||||
if (ret) {
|
||||
ntf = 0;
|
||||
if (create) {
|
||||
/* failed to create, free our new tracking entry */
|
||||
xa_erase(&dev->ethtool->rss_ctx, rxfh.rss_context);
|
||||
@@ -1692,7 +1695,6 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev,
|
||||
}
|
||||
goto out_unlock;
|
||||
}
|
||||
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)))
|
||||
@@ -1732,8 +1734,8 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev,
|
||||
mutex_unlock(&dev->ethtool->rss_lock);
|
||||
out_free:
|
||||
kfree(rss_config);
|
||||
if (mod)
|
||||
ethtool_rss_notify(dev, rxfh.rss_context);
|
||||
if (ntf)
|
||||
ethtool_rss_notify(dev, ntf, rxfh.rss_context);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -461,13 +461,13 @@ int ethnl_rss_dumpit(struct sk_buff *skb, struct netlink_callback *cb)
|
||||
|
||||
/* RSS_NTF */
|
||||
|
||||
void ethtool_rss_notify(struct net_device *dev, u32 rss_context)
|
||||
void ethtool_rss_notify(struct net_device *dev, u32 type, u32 rss_context)
|
||||
{
|
||||
struct rss_req_info req_info = {
|
||||
.rss_context = rss_context,
|
||||
};
|
||||
|
||||
ethnl_notify(dev, ETHTOOL_MSG_RSS_NTF, &req_info.base);
|
||||
ethnl_notify(dev, type, &req_info.base);
|
||||
}
|
||||
|
||||
/* RSS_SET */
|
||||
|
||||
Reference in New Issue
Block a user