Commit 96a83950 authored by Tariq Toukan's avatar Tariq Toukan Committed by Paolo Abeni
Browse files

net/mlx5e: Update XDP features in switch channels



The XDP features state might depend of the state of other features, like
HW-LRO / HW-GRO.

In general, move the re-evaluation announcement of the XDP features
(xdp_set_features_flag_locked) into the flow where configuration gets
changed. There's no point in updating them elsewhere.

This is a more appropriate place, as this modifies the announced
features while channels are inactive, which avoids the small interval
between channel activation and the proper setting of the XDP features.

Signed-off-by: default avatarTariq Toukan <tariqt@nvidia.com>
Reviewed-by: default avatarDragos Tatulea <dtatulea@nvidia.com>
Reviewed-by: default avatarWilliam Tu <witu@nvidia.com>
Link: https://patch.msgid.link/1764497617-1326331-2-git-send-email-tariqt@nvidia.com


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 31a3ed49
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1249,7 +1249,7 @@ void mlx5e_netdev_attach_nic_profile(struct mlx5e_priv *priv);
void mlx5e_set_netdev_mtu_boundaries(struct mlx5e_priv *priv);
void mlx5e_build_nic_params(struct mlx5e_priv *priv, struct mlx5e_xsk *xsk, u16 mtu);

void mlx5e_set_xdp_feature(struct net_device *netdev);
void mlx5e_set_xdp_feature(struct mlx5e_priv *priv);
netdev_features_t mlx5e_features_check(struct sk_buff *skb,
				       struct net_device *netdev,
				       netdev_features_t features);
+1 −9
Original line number Diff line number Diff line
@@ -2294,7 +2294,6 @@ static int set_pflag_rx_striding_rq(struct net_device *netdev, bool enable)
	struct mlx5e_priv *priv = netdev_priv(netdev);
	struct mlx5_core_dev *mdev = priv->mdev;
	struct mlx5e_params new_params;
	int err;

	if (enable) {
		/* Checking the regular RQ here; mlx5e_validate_xsk_param called
@@ -2315,14 +2314,7 @@ static int set_pflag_rx_striding_rq(struct net_device *netdev, bool enable)
	MLX5E_SET_PFLAG(&new_params, MLX5E_PFLAG_RX_STRIDING_RQ, enable);
	mlx5e_set_rq_type(mdev, &new_params);

	err = mlx5e_safe_switch_params(priv, &new_params, NULL, NULL, true);
	if (err)
		return err;

	/* update XDP supported features */
	mlx5e_set_xdp_feature(netdev);

	return 0;
	return mlx5e_safe_switch_params(priv, &new_params, NULL, NULL, true);
}

static int set_pflag_rx_no_csum_complete(struct net_device *netdev, bool enable)
+6 −7
Original line number Diff line number Diff line
@@ -3365,6 +3365,7 @@ static int mlx5e_switch_priv_params(struct mlx5e_priv *priv,
		}
	}

	mlx5e_set_xdp_feature(priv);
	return 0;
}

@@ -3396,6 +3397,7 @@ static int mlx5e_switch_priv_channels(struct mlx5e_priv *priv,
		}
	}

	mlx5e_set_xdp_feature(priv);
	if (!MLX5_CAP_GEN(priv->mdev, tis_tir_td_order))
		mlx5e_close_channels(old_chs);
	priv->profile->update_rx(priv);
@@ -4409,10 +4411,10 @@ static int mlx5e_handle_feature(struct net_device *netdev,
	return 0;
}

void mlx5e_set_xdp_feature(struct net_device *netdev)
void mlx5e_set_xdp_feature(struct mlx5e_priv *priv)
{
	struct mlx5e_priv *priv = netdev_priv(netdev);
	struct mlx5e_params *params = &priv->channels.params;
	struct net_device *netdev = priv->netdev;
	xdp_features_t val;

	if (!netdev->netdev_ops->ndo_bpf ||
@@ -4461,9 +4463,6 @@ int mlx5e_set_features(struct net_device *netdev, netdev_features_t features)
		return -EINVAL;
	}

	/* update XDP supported features */
	mlx5e_set_xdp_feature(netdev);

	return 0;
}

@@ -5859,7 +5858,7 @@ static void mlx5e_build_nic_netdev(struct net_device *netdev)
	netdev->netmem_tx = true;

	netif_set_tso_max_size(netdev, GSO_MAX_SIZE);
	mlx5e_set_xdp_feature(netdev);
	mlx5e_set_xdp_feature(priv);
	mlx5e_set_netdev_dev_addr(netdev);
	mlx5e_macsec_build_netdev(priv);
	mlx5e_ipsec_build_netdev(priv);
@@ -5957,7 +5956,7 @@ static int mlx5e_nic_init(struct mlx5_core_dev *mdev,

	mlx5e_psp_register(priv);
	/* update XDP supported features */
	mlx5e_set_xdp_feature(netdev);
	mlx5e_set_xdp_feature(priv);

	if (take_rtnl)
		rtnl_unlock();
+1 −1
Original line number Diff line number Diff line
@@ -867,7 +867,7 @@ static void mlx5e_build_rep_params(struct net_device *netdev)
	if (take_rtnl)
		rtnl_lock();
	/* update XDP supported features */
	mlx5e_set_xdp_feature(netdev);
	mlx5e_set_xdp_feature(priv);
	if (take_rtnl)
		rtnl_unlock();