]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
eth: gianfar: migrate to new RXFH callbacks
authorJakub Kicinski <kuba@kernel.org>
Fri, 13 Jun 2025 17:27:51 +0000 (10:27 -0700)
committerJakub Kicinski <kuba@kernel.org>
Tue, 17 Jun 2025 01:24:17 +0000 (18:24 -0700)
Migrate to new callbacks added by commit 9bb00786fc61 ("net: ethtool:
add dedicated callbacks for getting and setting rxfh fields").

Uniquely, this driver supports only the SET operation. It does not
support GET at all. The SET callback also always returns 0, even
tho it checks a bunch of conditions, and if my quick reading is
right, expects the user to insert filtering rules for given flow
type first? Long story short it seems too convoluted to easily
add the GET as part of the conversion.

Link: https://patch.msgid.link/20250613172751.3754732-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/freescale/gianfar_ethtool.c

index 781d92e703cb3dc3d93d80ee16ccd29222634b83..28f53cf2a174f147624151c03268e3487e06d66e 100644 (file)
@@ -781,14 +781,26 @@ err:
        return ret;
 }
 
-static int gfar_set_hash_opts(struct gfar_private *priv,
-                             struct ethtool_rxnfc *cmd)
+static int gfar_set_rxfh_fields(struct net_device *dev,
+                               const struct ethtool_rxfh_fields *cmd,
+                               struct netlink_ext_ack *extack)
 {
+       struct gfar_private *priv = netdev_priv(dev);
+       int ret;
+
+       if (test_bit(GFAR_RESETTING, &priv->state))
+               return -EBUSY;
+
+       mutex_lock(&priv->rx_queue_access);
+
+       ret = 0;
        /* write the filer rules here */
        if (!gfar_ethflow_to_filer_table(priv, cmd->data, cmd->flow_type))
-               return -EINVAL;
+               ret = -EINVAL;
 
-       return 0;
+       mutex_unlock(&priv->rx_queue_access);
+
+       return ret;
 }
 
 static int gfar_check_filer_hardware(struct gfar_private *priv)
@@ -1398,9 +1410,6 @@ static int gfar_set_nfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
        mutex_lock(&priv->rx_queue_access);
 
        switch (cmd->cmd) {
-       case ETHTOOL_SRXFH:
-               ret = gfar_set_hash_opts(priv, cmd);
-               break;
        case ETHTOOL_SRXCLSRLINS:
                if ((cmd->fs.ring_cookie != RX_CLS_FLOW_DISC &&
                     cmd->fs.ring_cookie >= priv->num_rx_queues) ||
@@ -1508,6 +1517,7 @@ const struct ethtool_ops gfar_ethtool_ops = {
 #endif
        .set_rxnfc = gfar_set_nfc,
        .get_rxnfc = gfar_get_nfc,
+       .set_rxfh_fields = gfar_set_rxfh_fields,
        .get_ts_info = gfar_get_ts_info,
        .get_link_ksettings = phy_ethtool_get_link_ksettings,
        .set_link_ksettings = phy_ethtool_set_link_ksettings,