Skip to content

Commit 58d3340

Browse files
Alexei Lazargregkh
authored andcommitted
net/mlx5e: Update and set Xon/Xoff upon MTU set
[ Upstream commit ceddedc ] Xon/Xoff sizes are derived from calculation that include the MTU size. Set Xon/Xoff when MTU is set. If Xon/Xoff fails, set the previous MTU. Fixes: 0696d60 ("net/mlx5e: Receive buffer configuration") Signed-off-by: Alexei Lazar <alazar@nvidia.com> Reviewed-by: Tariq Toukan <tariqt@nvidia.com> Signed-off-by: Mark Bloch <mbloch@nvidia.com> Link: https://patch.msgid.link/20250825143435.598584-10-mbloch@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent a189ac7 commit 58d3340

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

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

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

69+
#ifdef CONFIG_MLX5_CORE_EN_DCB
6970
int mlx5e_port_manual_buffer_config(struct mlx5e_priv *priv,
7071
u32 change, unsigned int mtu,
7172
struct ieee_pfc *pfc,
7273
u32 *buffer_size,
7374
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
7486

7587
int mlx5e_port_query_buffer(struct mlx5e_priv *priv,
7688
struct mlx5e_port_buffer *port_buffer);

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
#include "en.h"
4949
#include "en/dim.h"
5050
#include "en/txrx.h"
51+
#include "en/port_buffer.h"
5152
#include "en_tc.h"
5253
#include "en_rep.h"
5354
#include "en_accel/ipsec.h"
@@ -2985,9 +2986,11 @@ int mlx5e_set_dev_port_mtu(struct mlx5e_priv *priv)
29852986
struct mlx5e_params *params = &priv->channels.params;
29862987
struct net_device *netdev = priv->netdev;
29872988
struct mlx5_core_dev *mdev = priv->mdev;
2988-
u16 mtu;
2989+
u16 mtu, prev_mtu;
29892990
int err;
29902991

2992+
mlx5e_query_mtu(mdev, params, &prev_mtu);
2993+
29912994
err = mlx5e_set_mtu(mdev, params, params->sw_mtu);
29922995
if (err)
29932996
return err;
@@ -2997,6 +3000,18 @@ int mlx5e_set_dev_port_mtu(struct mlx5e_priv *priv)
29973000
netdev_warn(netdev, "%s: VPort MTU %d is different than netdev mtu %d\n",
29983001
__func__, mtu, params->sw_mtu);
29993002

3003+
if (mtu != prev_mtu && MLX5_BUFFER_SUPPORTED(mdev)) {
3004+
err = mlx5e_port_manual_buffer_config(priv, 0, mtu,
3005+
NULL, NULL, NULL);
3006+
if (err) {
3007+
netdev_warn(netdev, "%s: Failed to set Xon/Xoff values with MTU %d (err %d), setting back to previous MTU %d\n",
3008+
__func__, mtu, err, prev_mtu);
3009+
3010+
mlx5e_set_mtu(mdev, params, prev_mtu);
3011+
return err;
3012+
}
3013+
}
3014+
30003015
params->sw_mtu = mtu;
30013016
return 0;
30023017
}

0 commit comments

Comments
 (0)