Commit abd3f84e authored by Tariq Toukan's avatar Tariq Toukan Committed by David S. Miller
Browse files

net/mlx5e: XDP, Let XDP checker function get the params as input



Change mlx5e_xdp_allowed() so it gets the params structure with the
xdp_prog applied, rather than creating a local copy based on the current
params in priv.

This reduces the amount of memory on the stack, and acts on the exact
params instance that's about to be applied.

Reviewed-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
Signed-off-by: default avatarTariq Toukan <tariqt@nvidia.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7fc06dd2
Loading
Loading
Loading
Loading
+8 −13
Original line number Diff line number Diff line
@@ -4773,20 +4773,15 @@ static void mlx5e_tx_timeout(struct net_device *dev, unsigned int txqueue)
	queue_work(priv->wq, &priv->tx_timeout_work);
}

static int mlx5e_xdp_allowed(struct mlx5e_priv *priv, struct bpf_prog *prog)
static int mlx5e_xdp_allowed(struct net_device *netdev, struct mlx5_core_dev *mdev,
			     struct mlx5e_params *params)
{
	struct net_device *netdev = priv->netdev;
	struct mlx5e_params new_params;

	if (priv->channels.params.packet_merge.type != MLX5E_PACKET_MERGE_NONE) {
	if (params->packet_merge.type != MLX5E_PACKET_MERGE_NONE) {
		netdev_warn(netdev, "can't set XDP while HW-GRO/LRO is on, disable them first\n");
		return -EINVAL;
	}

	new_params = priv->channels.params;
	new_params.xdp_prog = prog;

	if (!mlx5e_params_validate_xdp(netdev, priv->mdev, &new_params))
	if (!mlx5e_params_validate_xdp(netdev, mdev, params))
		return -EINVAL;

	return 0;
@@ -4813,8 +4808,11 @@ static int mlx5e_xdp_set(struct net_device *netdev, struct bpf_prog *prog)

	mutex_lock(&priv->state_lock);

	new_params = priv->channels.params;
	new_params.xdp_prog = prog;

	if (prog) {
		err = mlx5e_xdp_allowed(priv, prog);
		err = mlx5e_xdp_allowed(netdev, priv->mdev, &new_params);
		if (err)
			goto unlock;
	}
@@ -4822,9 +4820,6 @@ static int mlx5e_xdp_set(struct net_device *netdev, struct bpf_prog *prog)
	/* no need for full reset when exchanging programs */
	reset = (!priv->channels.params.xdp_prog || !prog);

	new_params = priv->channels.params;
	new_params.xdp_prog = prog;

	old_prog = priv->channels.params.xdp_prog;

	err = mlx5e_safe_switch_params(priv, &new_params, NULL, NULL, reset);