Commit 18f4e389 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

eth: mlx5: migrate to new RXFH callbacks



Migrate to new callbacks added by commit 9bb00786 ("net: ethtool:
add dedicated callbacks for getting and setting rxfh fields").

Reviewed-by: default avatarDragos Tatulea <dtatulea@nvidia.com>
Link: https://patch.msgid.link/20250618203823.1336156-7-kuba@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 06bb89e0
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -11,6 +11,11 @@ int mlx5e_ethtool_alloc(struct mlx5e_ethtool_steering **ethtool);
void mlx5e_ethtool_free(struct mlx5e_ethtool_steering *ethtool);
void mlx5e_ethtool_init_steering(struct mlx5e_flow_steering *fs);
void mlx5e_ethtool_cleanup_steering(struct mlx5e_flow_steering *fs);
int mlx5e_ethtool_set_rxfh_fields(struct mlx5e_priv *priv,
				  const struct ethtool_rxfh_fields *nfc,
				  struct netlink_ext_ack *extack);
int mlx5e_ethtool_get_rxfh_fields(struct mlx5e_priv *priv,
				  struct ethtool_rxfh_fields *nfc);
int mlx5e_ethtool_set_rxnfc(struct mlx5e_priv *priv, struct ethtool_rxnfc *cmd);
int mlx5e_ethtool_get_rxnfc(struct mlx5e_priv *priv,
			    struct ethtool_rxnfc *info, u32 *rule_locs);
@@ -20,6 +25,15 @@ static inline int mlx5e_ethtool_alloc(struct mlx5e_ethtool_steering **ethtool)
static inline void mlx5e_ethtool_free(struct mlx5e_ethtool_steering *ethtool) { }
static inline void mlx5e_ethtool_init_steering(struct mlx5e_flow_steering *fs) { }
static inline void mlx5e_ethtool_cleanup_steering(struct mlx5e_flow_steering *fs) { }
static inline int
mlx5e_ethtool_set_rxfh_fields(struct mlx5e_priv *priv,
			      const struct ethtool_rxfh_fields *nfc,
			      struct netlink_ext_ack *extack)
{ return -EOPNOTSUPP; }
static inline int
mlx5e_ethtool_get_rxfh_fields(struct mlx5e_priv *priv,
			      struct ethtool_rxfh_fields *nfc)
{ return -EOPNOTSUPP; }
static inline int mlx5e_ethtool_set_rxnfc(struct mlx5e_priv *priv, struct ethtool_rxnfc *cmd)
{ return -EOPNOTSUPP; }
static inline int mlx5e_ethtool_get_rxnfc(struct mlx5e_priv *priv,
+19 −0
Original line number Diff line number Diff line
@@ -2399,6 +2399,23 @@ static u32 mlx5e_get_priv_flags(struct net_device *netdev)
	return priv->channels.params.pflags;
}

static int mlx5e_get_rxfh_fields(struct net_device *dev,
				 struct ethtool_rxfh_fields *info)
{
	struct mlx5e_priv *priv = netdev_priv(dev);

	return mlx5e_ethtool_get_rxfh_fields(priv, info);
}

static int mlx5e_set_rxfh_fields(struct net_device *dev,
				 const struct ethtool_rxfh_fields *cmd,
				 struct netlink_ext_ack *extack)
{
	struct mlx5e_priv *priv = netdev_priv(dev);

	return mlx5e_ethtool_set_rxfh_fields(priv, cmd, extack);
}

static int mlx5e_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
			   u32 *rule_locs)
{
@@ -2666,6 +2683,8 @@ const struct ethtool_ops mlx5e_ethtool_ops = {
	.get_rxfh_indir_size = mlx5e_get_rxfh_indir_size,
	.get_rxfh          = mlx5e_get_rxfh,
	.set_rxfh          = mlx5e_set_rxfh,
	.get_rxfh_fields   = mlx5e_get_rxfh_fields,
	.set_rxfh_fields   = mlx5e_set_rxfh_fields,
	.get_rxnfc         = mlx5e_get_rxnfc,
	.set_rxnfc         = mlx5e_set_rxnfc,
	.get_tunable       = mlx5e_get_tunable,
+9 −16
Original line number Diff line number Diff line
@@ -894,16 +894,16 @@ static int flow_type_to_traffic_type(u32 flow_type)
	}
}

static int mlx5e_set_rss_hash_opt(struct mlx5e_priv *priv,
				  struct ethtool_rxnfc *nfc)
int mlx5e_ethtool_set_rxfh_fields(struct mlx5e_priv *priv,
				  const struct ethtool_rxfh_fields *nfc,
				  struct netlink_ext_ack *extack)
{
	u8 rx_hash_field = 0;
	u32 flow_type = 0;
	u32 rss_idx = 0;
	u32 rss_idx;
	int err;
	int tt;

	if (nfc->flow_type & FLOW_RSS)
	rss_idx = nfc->rss_context;

	flow_type = flow_type_mask(nfc->flow_type);
@@ -941,15 +941,14 @@ static int mlx5e_set_rss_hash_opt(struct mlx5e_priv *priv,
	return err;
}

static int mlx5e_get_rss_hash_opt(struct mlx5e_priv *priv,
				  struct ethtool_rxnfc *nfc)
int mlx5e_ethtool_get_rxfh_fields(struct mlx5e_priv *priv,
				  struct ethtool_rxfh_fields *nfc)
{
	int hash_field = 0;
	u32 flow_type = 0;
	u32 rss_idx = 0;
	u32 rss_idx;
	int tt;

	if (nfc->flow_type & FLOW_RSS)
	rss_idx = nfc->rss_context;

	flow_type = flow_type_mask(nfc->flow_type);
@@ -986,9 +985,6 @@ int mlx5e_ethtool_set_rxnfc(struct mlx5e_priv *priv, struct ethtool_rxnfc *cmd)
	case ETHTOOL_SRXCLSRLDEL:
		err = mlx5e_ethtool_flow_remove(priv, cmd->fs.location);
		break;
	case ETHTOOL_SRXFH:
		err = mlx5e_set_rss_hash_opt(priv, cmd);
		break;
	default:
		err = -EOPNOTSUPP;
		break;
@@ -1013,9 +1009,6 @@ int mlx5e_ethtool_get_rxnfc(struct mlx5e_priv *priv,
	case ETHTOOL_GRXCLSRLALL:
		err = mlx5e_ethtool_get_all_flows(priv, info, rule_locs);
		break;
	case ETHTOOL_GRXFH:
		err =  mlx5e_get_rss_hash_opt(priv, info);
		break;
	default:
		err = -EOPNOTSUPP;
		break;
+19 −0
Original line number Diff line number Diff line
@@ -238,6 +238,23 @@ static u32 mlx5i_flow_type_mask(u32 flow_type)
	return flow_type & ~(FLOW_EXT | FLOW_MAC_EXT | FLOW_RSS);
}

static int mlx5i_set_rxfh_fields(struct net_device *dev,
				 const struct ethtool_rxfh_fields *cmd,
				 struct netlink_ext_ack *extack)
{
	struct mlx5e_priv *priv = mlx5i_epriv(dev);

	return mlx5e_ethtool_set_rxfh_fields(priv, cmd, extack);
}

static int mlx5i_get_rxfh_fields(struct net_device *dev,
				 struct ethtool_rxfh_fields *info)
{
	struct mlx5e_priv *priv = mlx5i_epriv(dev);

	return mlx5e_ethtool_get_rxfh_fields(priv, info);
}

static int mlx5i_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
{
	struct mlx5e_priv *priv = mlx5i_epriv(dev);
@@ -283,6 +300,8 @@ const struct ethtool_ops mlx5i_ethtool_ops = {
	.get_coalesce       = mlx5i_get_coalesce,
	.set_coalesce       = mlx5i_set_coalesce,
	.get_ts_info        = mlx5i_get_ts_info,
	.get_rxfh_fields    = mlx5i_get_rxfh_fields,
	.set_rxfh_fields    = mlx5i_set_rxfh_fields,
	.get_rxnfc          = mlx5i_get_rxnfc,
	.set_rxnfc          = mlx5i_set_rxnfc,
	.get_link_ksettings = mlx5i_get_link_ksettings,