]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: ethtool: remove the duplicated handling from rxfh and rxnfc
authorJakub Kicinski <kuba@kernel.org>
Wed, 11 Jun 2025 14:59:42 +0000 (07:59 -0700)
committerJakub Kicinski <kuba@kernel.org>
Fri, 13 Jun 2025 00:16:19 +0000 (17:16 -0700)
Now that the handles have been separated - remove the RX Flow Hash
handling from rxnfc functions and vice versa.

Reviewed-by: Joe Damato <joe@dama.to>
Link: https://patch.msgid.link/20250611145949.2674086-3-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/ethtool/ioctl.c

index e65da428615adbb223624dc2245db9d518496439..33892099cdad23e20b85f9e897f582af635d9f6d 100644 (file)
@@ -1075,19 +1075,7 @@ ethtool_set_rxfh_fields(struct net_device *dev, u32 cmd, void __user *useraddr)
        if (rc)
                return rc;
 
-       if (cmd == ETHTOOL_SRXCLSRLINS && info.fs.flow_type & FLOW_RSS) {
-               /* Nonzero ring with RSS only makes sense
-                * if NIC adds them together
-                */
-               if (!ops->cap_rss_rxnfc_adds &&
-                   ethtool_get_flow_spec_ring(info.fs.ring_cookie))
-                       return -EINVAL;
-
-               if (!xa_load(&dev->ethtool->rss_ctx, info.rss_context))
-                       return -EINVAL;
-       }
-
-       if (cmd == ETHTOOL_SRXFH && ops->get_rxfh) {
+       if (ops->get_rxfh) {
                struct ethtool_rxfh_param rxfh = {};
 
                rc = ops->get_rxfh(dev, &rxfh);
@@ -1099,15 +1087,7 @@ ethtool_set_rxfh_fields(struct net_device *dev, u32 cmd, void __user *useraddr)
                        return rc;
        }
 
-       rc = ops->set_rxnfc(dev, &info);
-       if (rc)
-               return rc;
-
-       if (cmd == ETHTOOL_SRXCLSRLINS &&
-           ethtool_rxnfc_copy_to_user(useraddr, &info, info_size, NULL))
-               return -EFAULT;
-
-       return 0;
+       return ops->set_rxnfc(dev, &info);
 }
 
 static noinline_for_stack int
@@ -1117,7 +1097,6 @@ ethtool_get_rxfh_fields(struct net_device *dev, u32 cmd, void __user *useraddr)
        size_t info_size = sizeof(info);
        const struct ethtool_ops *ops = dev->ethtool_ops;
        int ret;
-       void *rule_buf = NULL;
 
        if (!ops->get_rxnfc)
                return -EOPNOTSUPP;
@@ -1126,25 +1105,11 @@ ethtool_get_rxfh_fields(struct net_device *dev, u32 cmd, void __user *useraddr)
        if (ret)
                return ret;
 
-       if (info.cmd == ETHTOOL_GRXCLSRLALL) {
-               if (info.rule_cnt > 0) {
-                       if (info.rule_cnt <= KMALLOC_MAX_SIZE / sizeof(u32))
-                               rule_buf = kcalloc(info.rule_cnt, sizeof(u32),
-                                                  GFP_USER);
-                       if (!rule_buf)
-                               return -ENOMEM;
-               }
-       }
-
-       ret = ops->get_rxnfc(dev, &info, rule_buf);
+       ret = ops->get_rxnfc(dev, &info, NULL);
        if (ret < 0)
-               goto err_out;
-
-       ret = ethtool_rxnfc_copy_to_user(useraddr, &info, info_size, rule_buf);
-err_out:
-       kfree(rule_buf);
+               return ret;
 
-       return ret;
+       return ethtool_rxnfc_copy_to_user(useraddr, &info, info_size, NULL);
 }
 
 static noinline_for_stack int ethtool_set_rxnfc(struct net_device *dev,
@@ -1175,18 +1140,6 @@ static noinline_for_stack int ethtool_set_rxnfc(struct net_device *dev,
                        return -EINVAL;
        }
 
-       if (cmd == ETHTOOL_SRXFH && ops->get_rxfh) {
-               struct ethtool_rxfh_param rxfh = {};
-
-               rc = ops->get_rxfh(dev, &rxfh);
-               if (rc)
-                       return rc;
-
-               rc = ethtool_check_xfrm_rxfh(rxfh.input_xfrm, info.data);
-               if (rc)
-                       return rc;
-       }
-
        rc = ops->set_rxnfc(dev, &info);
        if (rc)
                return rc;