net/mlx5e: Fix LRO modify
Ethtool LRO enable/disable is broken, as of today we only modify TCP
TIRs in order to apply the requested configuration.
Hardware requires that all TIRs pointing to the same RQ should share the
same LRO configuration. For that all other TIRs' LRO fields must be
modified as well.
Fixes: 5c50368f38
('net/mlx5e: Light-weight netdev open/stop')
Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
59a7c2fd33
commit
ab0394fe2c
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue