]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: drv: hyperv: migrate to new RXFH callbacks
authorJakub Kicinski <kuba@kernel.org>
Wed, 11 Jun 2025 14:59:49 +0000 (07:59 -0700)
committerJakub Kicinski <kuba@kernel.org>
Fri, 13 Jun 2025 00:47:09 +0000 (17:47 -0700)
Add support for the new rxfh_fields callbacks, instead of de-muxing
the rxnfc calls. This driver does not support flow filtering so
the set_rxnfc callback is completely removed.

Link: https://patch.msgid.link/20250611145949.2674086-10-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/hyperv/netvsc_drv.c

index c41a025c66f054514aa509d506461279fb71c07d..42d98e99566e6ad70154464c745538dc64f0fbc9 100644 (file)
@@ -1580,9 +1580,10 @@ static void netvsc_get_strings(struct net_device *dev, u32 stringset, u8 *data)
 }
 
 static int
-netvsc_get_rss_hash_opts(struct net_device_context *ndc,
-                        struct ethtool_rxnfc *info)
+netvsc_get_rxfh_fields(struct net_device *ndev,
+                      struct ethtool_rxfh_fields *info)
 {
+       struct net_device_context *ndc = netdev_priv(ndev);
        const u32 l4_flag = RXH_L4_B_0_1 | RXH_L4_B_2_3;
 
        info->data = RXH_IP_SRC | RXH_IP_DST;
@@ -1637,16 +1638,17 @@ netvsc_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
        case ETHTOOL_GRXRINGS:
                info->data = nvdev->num_chn;
                return 0;
-
-       case ETHTOOL_GRXFH:
-               return netvsc_get_rss_hash_opts(ndc, info);
        }
        return -EOPNOTSUPP;
 }
 
-static int netvsc_set_rss_hash_opts(struct net_device_context *ndc,
-                                   struct ethtool_rxnfc *info)
+static int
+netvsc_set_rxfh_fields(struct net_device *dev,
+                      const struct ethtool_rxfh_fields *info,
+                      struct netlink_ext_ack *extack)
 {
+       struct net_device_context *ndc = netdev_priv(dev);
+
        if (info->data == (RXH_IP_SRC | RXH_IP_DST |
                           RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
                switch (info->flow_type) {
@@ -1701,17 +1703,6 @@ static int netvsc_set_rss_hash_opts(struct net_device_context *ndc,
        return -EOPNOTSUPP;
 }
 
-static int
-netvsc_set_rxnfc(struct net_device *ndev, struct ethtool_rxnfc *info)
-{
-       struct net_device_context *ndc = netdev_priv(ndev);
-
-       if (info->cmd == ETHTOOL_SRXFH)
-               return netvsc_set_rss_hash_opts(ndc, info);
-
-       return -EOPNOTSUPP;
-}
-
 static u32 netvsc_get_rxfh_key_size(struct net_device *dev)
 {
        return NETVSC_HASH_KEYLEN;
@@ -1979,11 +1970,12 @@ static const struct ethtool_ops ethtool_ops = {
        .set_channels   = netvsc_set_channels,
        .get_ts_info    = ethtool_op_get_ts_info,
        .get_rxnfc      = netvsc_get_rxnfc,
-       .set_rxnfc      = netvsc_set_rxnfc,
        .get_rxfh_key_size = netvsc_get_rxfh_key_size,
        .get_rxfh_indir_size = netvsc_rss_indir_size,
        .get_rxfh       = netvsc_get_rxfh,
        .set_rxfh       = netvsc_set_rxfh,
+       .get_rxfh_fields = netvsc_get_rxfh_fields,
+       .set_rxfh_fields = netvsc_set_rxfh_fields,
        .get_link_ksettings = netvsc_get_link_ksettings,
        .set_link_ksettings = netvsc_set_link_ksettings,
        .get_ringparam  = netvsc_get_ringparam,