In anticipation for CREATE and DELETE notifications - explicitly pass the notification type to ethtool_rss_notify(), when calling from the IOCTL code. Signed-off-by: Jakub Kicinski --- net/ethtool/common.h | 5 +++-- net/ethtool/ioctl.c | 12 +++++++----- net/ethtool/rss.c | 4 ++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/net/ethtool/common.h b/net/ethtool/common.h index b2718afe38b5..c8385a268ced 100644 --- a/net/ethtool/common.h +++ b/net/ethtool/common.h @@ -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 diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c index 2dfeaaa099fb..beb17f3671a2 100644 --- a/net/ethtool/ioctl.c +++ b/net/ethtool/ioctl.c @@ -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; } diff --git a/net/ethtool/rss.c b/net/ethtool/rss.c index bf45ebc22347..3c6a070ef875 100644 --- a/net/ethtool/rss.c +++ b/net/ethtool/rss.c @@ -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 */ -- 2.50.1