|
@@ -1317,7 +1317,7 @@ static void mlx5e_build_tir_ctx_lro(void *tirc, struct mlx5e_priv *priv)
|
|
|
lro_timer_supported_periods[2]));
|
|
|
}
|
|
|
|
|
|
-static int mlx5e_modify_tir_lro(struct mlx5e_priv *priv, int tt)
|
|
|
+static int mlx5e_modify_tirs_lro(struct mlx5e_priv *priv)
|
|
|
{
|
|
|
struct mlx5_core_dev *mdev = priv->mdev;
|
|
|
|
|
@@ -1325,6 +1325,7 @@ static int mlx5e_modify_tir_lro(struct mlx5e_priv *priv, int tt)
|
|
|
void *tirc;
|
|
|
int inlen;
|
|
|
int err;
|
|
|
+ int tt;
|
|
|
|
|
|
inlen = MLX5_ST_SZ_BYTES(modify_tir_in);
|
|
|
in = mlx5_vzalloc(inlen);
|
|
@@ -1336,7 +1337,11 @@ static int mlx5e_modify_tir_lro(struct mlx5e_priv *priv, int tt)
|
|
|
|
|
|
mlx5e_build_tir_ctx_lro(tirc, priv);
|
|
|
|
|
|
- err = mlx5_core_modify_tir(mdev, priv->tirn[tt], in, inlen);
|
|
|
+ for (tt = 0; tt < MLX5E_NUM_TT; tt++) {
|
|
|
+ err = mlx5_core_modify_tir(mdev, priv->tirn[tt], in, inlen);
|
|
|
+ if (err)
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
kvfree(in);
|
|
|
|
|
@@ -1885,8 +1890,10 @@ static int mlx5e_set_features(struct net_device *netdev,
|
|
|
mlx5e_close_locked(priv->netdev);
|
|
|
|
|
|
priv->params.lro_en = !!(features & NETIF_F_LRO);
|
|
|
- mlx5e_modify_tir_lro(priv, MLX5E_TT_IPV4_TCP);
|
|
|
- mlx5e_modify_tir_lro(priv, MLX5E_TT_IPV6_TCP);
|
|
|
+ err = mlx5e_modify_tirs_lro(priv);
|
|
|
+ if (err)
|
|
|
+ mlx5_core_warn(priv->mdev, "lro modify failed, %d\n",
|
|
|
+ err);
|
|
|
|
|
|
if (was_opened)
|
|
|
err = mlx5e_open_locked(priv->netdev);
|