Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b676f653 authored by Saeed Mahameed's avatar Saeed Mahameed
Browse files

net/mlx5e: Refactor refresh TIRs



Rename mlx5e_refresh_tirs_self_loopback to mlx5e_refresh_tirs,
as it will be used in downstream (Safe config flow) patches, and make it
fail safe on mlx5e_open.

Signed-off-by: default avatarSaeed Mahameed <saeedm@mellanox.com>
Reviewed-by: default avatarTariq Toukan <tariqt@mellanox.com>
parent a5f97fee
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -959,8 +959,7 @@ void mlx5e_destroy_tir(struct mlx5_core_dev *mdev,
		       struct mlx5e_tir *tir);
int mlx5e_create_mdev_resources(struct mlx5_core_dev *mdev);
void mlx5e_destroy_mdev_resources(struct mlx5_core_dev *mdev);
int mlx5e_refresh_tirs_self_loopback(struct mlx5_core_dev *mdev,
				     bool enable_uc_lb);
int mlx5e_refresh_tirs(struct mlx5e_priv *priv, bool enable_uc_lb);

struct mlx5_eswitch_rep;
int mlx5e_vport_rep_load(struct mlx5_eswitch *esw,
+11 −6
Original line number Diff line number Diff line
@@ -136,18 +136,20 @@ void mlx5e_destroy_mdev_resources(struct mlx5_core_dev *mdev)
	mlx5_core_dealloc_pd(mdev, res->pdn);
}

int mlx5e_refresh_tirs_self_loopback(struct mlx5_core_dev *mdev,
				     bool enable_uc_lb)
int mlx5e_refresh_tirs(struct mlx5e_priv *priv, bool enable_uc_lb)
{
	struct mlx5_core_dev *mdev = priv->mdev;
	struct mlx5e_tir *tir;
	void *in;
	int err  = -ENOMEM;
	u32 tirn = 0;
	int inlen;
	int err = 0;
	void *in;


	inlen = MLX5_ST_SZ_BYTES(modify_tir_in);
	in = mlx5_vzalloc(inlen);
	if (!in)
		return -ENOMEM;
		goto out;

	if (enable_uc_lb)
		MLX5_SET(modify_tir_in, in, ctx.self_lb_block,
@@ -156,13 +158,16 @@ int mlx5e_refresh_tirs_self_loopback(struct mlx5_core_dev *mdev,
	MLX5_SET(modify_tir_in, in, bitmask.self_lb_en, 1);

	list_for_each_entry(tir, &mdev->mlx5e_res.td.tirs_list, list) {
		err = mlx5_core_modify_tir(mdev, tir->tirn, in, inlen);
		tirn = tir->tirn;
		err = mlx5_core_modify_tir(mdev, tirn, in, inlen);
		if (err)
			goto out;
	}

out:
	kvfree(in);
	if (err)
		netdev_err(priv->netdev, "refresh tir(0x%x) failed, %d\n", tirn, err);

	return err;
}
+1 −7
Original line number Diff line number Diff line
@@ -2498,13 +2498,7 @@ int mlx5e_open_locked(struct net_device *netdev)
		goto err_clear_state_opened_flag;
	}

	err = mlx5e_refresh_tirs_self_loopback(priv->mdev, false);
	if (err) {
		netdev_err(netdev, "%s: mlx5e_refresh_tirs_self_loopback_enable failed, %d\n",
			   __func__, err);
		goto err_close_channels;
	}

	mlx5e_refresh_tirs(priv, false);
	mlx5e_redirect_rqts_to_channels(priv, &priv->channels);
	mlx5e_update_carrier(priv);
	mlx5e_timestamp_init(priv);
+3 −6
Original line number Diff line number Diff line
@@ -236,12 +236,9 @@ static int mlx5e_test_loopback_setup(struct mlx5e_priv *priv,
{
	int err = 0;

	err = mlx5e_refresh_tirs_self_loopback(priv->mdev, true);
	if (err) {
		netdev_err(priv->netdev,
			   "\tFailed to enable UC loopback err(%d)\n", err);
	err = mlx5e_refresh_tirs(priv, true);
	if (err)
		return err;
	}

	lbtp->loopback_ok = false;
	init_completion(&lbtp->comp);
@@ -258,7 +255,7 @@ static void mlx5e_test_loopback_cleanup(struct mlx5e_priv *priv,
					struct mlx5e_lbt_priv *lbtp)
{
	dev_remove_pack(&lbtp->pt);
	mlx5e_refresh_tirs_self_loopback(priv->mdev, false);
	mlx5e_refresh_tirs(priv, false);
}

#define MLX5E_LB_VERIFY_TIMEOUT (msecs_to_jiffies(200))