Skip to content

Commit 6f5dacf

Browse files
kuba-mooPaolo Abeni
authored andcommitted
Revert "net/mlx5e: Update and set Xon/Xoff upon MTU set"
This reverts commit ceddedc. Commit in question breaks the mapping of PGs to pools for some SKUs. Specifically multi-host NICs seem to be shipped with a custom buffer configuration which maps the lossy PG to pool 4. But the bad commit overrides this with pool 0 which does not have sufficient buffer space reserved. Resulting in ~40% packet loss. The commit also breaks BMC / OOB connection completely (100% packet loss). Revert, similarly to commit 3fbfe25 ("Revert "net/mlx5e: Update and set Xon/Xoff upon port speed set""). The breakage is exactly the same, the only difference is that quoted commit would break the NIC immediately on boot, and the currently reverted commit only when MTU is changed. Note: "good" kernels do not restore the configuration, so downgrade isn't enough to recover machines. A NIC power cycle seems to be necessary to return to a healthy state (or overriding the relevant registers using a custom patch). Fixes: ceddedc ("net/mlx5e: Update and set Xon/Xoff upon MTU set") Signed-off-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Tariq Toukan <tariqt@nvidia.com> Link: https://patch.msgid.link/20250929181529.1848157-1-kuba@kernel.org Signed-off-by: Paolo Abeni <pabeni@redhat.com>
1 parent c18b0f5 commit 6f5dacf

File tree

2 files changed

+1
-28
lines changed

2 files changed

+1
-28
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en/port_buffer.h

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -66,23 +66,11 @@ struct mlx5e_port_buffer {
6666
struct mlx5e_bufferx_reg buffer[MLX5E_MAX_NETWORK_BUFFER];
6767
};
6868

69-
#ifdef CONFIG_MLX5_CORE_EN_DCB
7069
int mlx5e_port_manual_buffer_config(struct mlx5e_priv *priv,
7170
u32 change, unsigned int mtu,
7271
struct ieee_pfc *pfc,
7372
u32 *buffer_size,
7473
u8 *prio2buffer);
75-
#else
76-
static inline int
77-
mlx5e_port_manual_buffer_config(struct mlx5e_priv *priv,
78-
u32 change, unsigned int mtu,
79-
void *pfc,
80-
u32 *buffer_size,
81-
u8 *prio2buffer)
82-
{
83-
return 0;
84-
}
85-
#endif
8674

8775
int mlx5e_port_query_buffer(struct mlx5e_priv *priv,
8876
struct mlx5e_port_buffer *port_buffer);

drivers/net/ethernet/mellanox/mlx5/core/en_main.c

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
#include "en.h"
5050
#include "en/dim.h"
5151
#include "en/txrx.h"
52-
#include "en/port_buffer.h"
5352
#include "en_tc.h"
5453
#include "en_rep.h"
5554
#include "en_accel/ipsec.h"
@@ -3061,11 +3060,9 @@ int mlx5e_set_dev_port_mtu(struct mlx5e_priv *priv)
30613060
struct mlx5e_params *params = &priv->channels.params;
30623061
struct net_device *netdev = priv->netdev;
30633062
struct mlx5_core_dev *mdev = priv->mdev;
3064-
u16 mtu, prev_mtu;
3063+
u16 mtu;
30653064
int err;
30663065

3067-
mlx5e_query_mtu(mdev, params, &prev_mtu);
3068-
30693066
err = mlx5e_set_mtu(mdev, params, params->sw_mtu);
30703067
if (err)
30713068
return err;
@@ -3075,18 +3072,6 @@ int mlx5e_set_dev_port_mtu(struct mlx5e_priv *priv)
30753072
netdev_warn(netdev, "%s: VPort MTU %d is different than netdev mtu %d\n",
30763073
__func__, mtu, params->sw_mtu);
30773074

3078-
if (mtu != prev_mtu && MLX5_BUFFER_SUPPORTED(mdev)) {
3079-
err = mlx5e_port_manual_buffer_config(priv, 0, mtu,
3080-
NULL, NULL, NULL);
3081-
if (err) {
3082-
netdev_warn(netdev, "%s: Failed to set Xon/Xoff values with MTU %d (err %d), setting back to previous MTU %d\n",
3083-
__func__, mtu, err, prev_mtu);
3084-
3085-
mlx5e_set_mtu(mdev, params, prev_mtu);
3086-
return err;
3087-
}
3088-
}
3089-
30903075
params->sw_mtu = mtu;
30913076
return 0;
30923077
}

0 commit comments

Comments
 (0)