Skip to content

Commit ceddedc

Browse files
Alexei Lazarkuba-moo
authored andcommitted
net/mlx5e: Update and set Xon/Xoff upon MTU set
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>
1 parent cf9a862 commit ceddedc

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
@@ -49,6 +49,7 @@
4949
#include "en.h"
5050
#include "en/dim.h"
5151
#include "en/txrx.h"
52+
#include "en/port_buffer.h"
5253
#include "en_tc.h"
5354
#include "en_rep.h"
5455
#include "en_accel/ipsec.h"
@@ -3040,9 +3041,11 @@ int mlx5e_set_dev_port_mtu(struct mlx5e_priv *priv)
30403041
struct mlx5e_params *params = &priv->channels.params;
30413042
struct net_device *netdev = priv->netdev;
30423043
struct mlx5_core_dev *mdev = priv->mdev;
3043-
u16 mtu;
3044+
u16 mtu, prev_mtu;
30443045
int err;
30453046

3047+
mlx5e_query_mtu(mdev, params, &prev_mtu);
3048+
30463049
err = mlx5e_set_mtu(mdev, params, params->sw_mtu);
30473050
if (err)
30483051
return err;
@@ -3052,6 +3055,18 @@ int mlx5e_set_dev_port_mtu(struct mlx5e_priv *priv)
30523055
netdev_warn(netdev, "%s: VPort MTU %d is different than netdev mtu %d\n",
30533056
__func__, mtu, params->sw_mtu);
30543057

3058+
if (mtu != prev_mtu && MLX5_BUFFER_SUPPORTED(mdev)) {
3059+
err = mlx5e_port_manual_buffer_config(priv, 0, mtu,
3060+
NULL, NULL, NULL);
3061+
if (err) {
3062+
netdev_warn(netdev, "%s: Failed to set Xon/Xoff values with MTU %d (err %d), setting back to previous MTU %d\n",
3063+
__func__, mtu, err, prev_mtu);
3064+
3065+
mlx5e_set_mtu(mdev, params, prev_mtu);
3066+
return err;
3067+
}
3068+
}
3069+
30553070
params->sw_mtu = mtu;
30563071
return 0;
30573072
}

0 commit comments

Comments
 (0)