From: Alexei Lazar <alazar@nvidia.com>
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: 0696d60853d5 ("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>
---
.../mellanox/mlx5/core/en/port_buffer.h | 12 ++++++++++++
.../net/ethernet/mellanox/mlx5/core/en_main.c | 17 ++++++++++++++++-
2 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/port_buffer.h b/drivers/net/ethernet/mellanox/mlx5/core/en/port_buffer.h
index f4a19ffbb641..39efa4d98cc3 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/port_buffer.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/port_buffer.h
@@ -66,11 +66,23 @@ struct mlx5e_port_buffer {
struct mlx5e_bufferx_reg buffer[MLX5E_MAX_NETWORK_BUFFER];
};
+#ifdef CONFIG_MLX5_CORE_EN_DCB
int mlx5e_port_manual_buffer_config(struct mlx5e_priv *priv,
u32 change, unsigned int mtu,
struct ieee_pfc *pfc,
u32 *buffer_size,
u8 *prio2buffer);
+#else
+static inline int
+mlx5e_port_manual_buffer_config(struct mlx5e_priv *priv,
+ u32 change, unsigned int mtu,
+ struct ieee_pfc *pfc,
+ u32 *buffer_size,
+ u8 *prio2buffer)
+{
+ return 0;
+}
+#endif
int mlx5e_port_query_buffer(struct mlx5e_priv *priv,
struct mlx5e_port_buffer *port_buffer);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index 21bb88c5d3dc..15eded36b872 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -49,6 +49,7 @@
#include "en.h"
#include "en/dim.h"
#include "en/txrx.h"
+#include "en/port_buffer.h"
#include "en_tc.h"
#include "en_rep.h"
#include "en_accel/ipsec.h"
@@ -3040,9 +3041,11 @@ int mlx5e_set_dev_port_mtu(struct mlx5e_priv *priv)
struct mlx5e_params *params = &priv->channels.params;
struct net_device *netdev = priv->netdev;
struct mlx5_core_dev *mdev = priv->mdev;
- u16 mtu;
+ u16 mtu, prev_mtu;
int err;
+ mlx5e_query_mtu(mdev, params, &prev_mtu);
+
err = mlx5e_set_mtu(mdev, params, params->sw_mtu);
if (err)
return err;
@@ -3052,6 +3055,18 @@ int mlx5e_set_dev_port_mtu(struct mlx5e_priv *priv)
netdev_warn(netdev, "%s: VPort MTU %d is different than netdev mtu %d\n",
__func__, mtu, params->sw_mtu);
+ if (mtu != prev_mtu && MLX5_BUFFER_SUPPORTED(mdev)) {
+ err = mlx5e_port_manual_buffer_config(priv, 0, mtu,
+ NULL, NULL, NULL);
+ if (err) {
+ netdev_warn(netdev, "%s: Failed to set Xon/Xoff values with MTU %d (err %d), setting back to previous MTU %d\n",
+ __func__, mtu, err, prev_mtu);
+
+ mlx5e_set_mtu(mdev, params, prev_mtu);
+ return err;
+ }
+ }
+
params->sw_mtu = mtu;
return 0;
}
--
2.34.1
Hi Mark,
kernel test robot noticed the following build warnings:
[auto build test WARNING on ec79003c5f9d2c7f9576fc69b8dbda80305cbe3a]
url: https://github.com/intel-lab-lkp/linux/commits/Mark-Bloch/net-mlx5-HWS-Fix-memory-leak-in-hws_pool_buddy_init-error-path/20250824-164938
base: ec79003c5f9d2c7f9576fc69b8dbda80305cbe3a
patch link: https://lore.kernel.org/r/20250824083944.523858-10-mbloch%40nvidia.com
patch subject: [PATCH net 09/11] net/mlx5e: Update and set Xon/Xoff upon MTU set
config: um-randconfig-002-20250824 (https://download.01.org/0day-ci/archive/20250824/202508242120.QljNCAgz-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project d26ea02060b1c9db751d188b2edb0059a9eb273d)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250824/202508242120.QljNCAgz-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508242120.QljNCAgz-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from drivers/net/ethernet/mellanox/mlx5/core/en_main.c:34:
In file included from include/net/tc_act/tc_gact.h:5:
In file included from include/net/act_api.h:10:
In file included from include/net/flow_offload.h:6:
In file included from include/linux/netlink.h:7:
In file included from include/linux/skbuff.h:17:
In file included from include/linux/bvec.h:10:
In file included from include/linux/highmem.h:12:
In file included from include/linux/hardirq.h:11:
In file included from arch/um/include/asm/hardirq.h:5:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:12:
In file included from arch/um/include/asm/io.h:24:
include/asm-generic/io.h:1175:55: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
1175 | return (port > MMIO_UPPER_LIMIT) ? NULL : PCI_IOBASE + port;
| ~~~~~~~~~~ ^
In file included from drivers/net/ethernet/mellanox/mlx5/core/en_main.c:52:
>> drivers/net/ethernet/mellanox/mlx5/core/en/port_buffer.h:79:12: warning: declaration of 'struct ieee_pfc' will not be visible outside of this function [-Wvisibility]
79 | struct ieee_pfc *pfc,
| ^
2 warnings generated.
vim +79 drivers/net/ethernet/mellanox/mlx5/core/en/port_buffer.h
68
69 #ifdef CONFIG_MLX5_CORE_EN_DCB
70 int mlx5e_port_manual_buffer_config(struct mlx5e_priv *priv,
71 u32 change, unsigned int mtu,
72 struct ieee_pfc *pfc,
73 u32 *buffer_size,
74 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 struct ieee_pfc *pfc,
80 u32 *buffer_size,
81 u8 *prio2buffer)
82 {
83 return 0;
84 }
85 #endif
86
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
On 24/08/2025 16:54, kernel test robot wrote:
> Hi Mark,
>
> kernel test robot noticed the following build warnings:
>
> [auto build test WARNING on ec79003c5f9d2c7f9576fc69b8dbda80305cbe3a]
>
> url: https://github.com/intel-lab-lkp/linux/commits/Mark-Bloch/net-mlx5-HWS-Fix-memory-leak-in-hws_pool_buddy_init-error-path/20250824-164938
> base: ec79003c5f9d2c7f9576fc69b8dbda80305cbe3a
> patch link: https://lore.kernel.org/r/20250824083944.523858-10-mbloch%40nvidia.com
> patch subject: [PATCH net 09/11] net/mlx5e: Update and set Xon/Xoff upon MTU set
> config: um-randconfig-002-20250824 (https://download.01.org/0day-ci/archive/20250824/202508242120.QljNCAgz-lkp@intel.com/config)
> compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project d26ea02060b1c9db751d188b2edb0059a9eb273d)
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250824/202508242120.QljNCAgz-lkp@intel.com/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202508242120.QljNCAgz-lkp@intel.com/
>
> All warnings (new ones prefixed by >>):
>
> In file included from drivers/net/ethernet/mellanox/mlx5/core/en_main.c:34:
> In file included from include/net/tc_act/tc_gact.h:5:
> In file included from include/net/act_api.h:10:
> In file included from include/net/flow_offload.h:6:
> In file included from include/linux/netlink.h:7:
> In file included from include/linux/skbuff.h:17:
> In file included from include/linux/bvec.h:10:
> In file included from include/linux/highmem.h:12:
> In file included from include/linux/hardirq.h:11:
> In file included from arch/um/include/asm/hardirq.h:5:
> In file included from include/asm-generic/hardirq.h:17:
> In file included from include/linux/irq.h:20:
> In file included from include/linux/io.h:12:
> In file included from arch/um/include/asm/io.h:24:
> include/asm-generic/io.h:1175:55: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
> 1175 | return (port > MMIO_UPPER_LIMIT) ? NULL : PCI_IOBASE + port;
> | ~~~~~~~~~~ ^
> In file included from drivers/net/ethernet/mellanox/mlx5/core/en_main.c:52:
>>> drivers/net/ethernet/mellanox/mlx5/core/en/port_buffer.h:79:12: warning: declaration of 'struct ieee_pfc' will not be visible outside of this function [-Wvisibility]
> 79 | struct ieee_pfc *pfc,
> | ^
> 2 warnings generated.
It seems net/dcbnl.h is only included (via linux/netdevice.h)
if CONFIG_DCB is set. We've tested only by not setting
CONFIG_MLX5_CORE_EN_DCB but left CONFIG_DCB set so it was missed.
Will fix.
Mark
>
>
> vim +79 drivers/net/ethernet/mellanox/mlx5/core/en/port_buffer.h
>
> 68
> 69 #ifdef CONFIG_MLX5_CORE_EN_DCB
> 70 int mlx5e_port_manual_buffer_config(struct mlx5e_priv *priv,
> 71 u32 change, unsigned int mtu,
> 72 struct ieee_pfc *pfc,
> 73 u32 *buffer_size,
> 74 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 struct ieee_pfc *pfc,
> 80 u32 *buffer_size,
> 81 u8 *prio2buffer)
> 82 {
> 83 return 0;
> 84 }
> 85 #endif
> 86
>
© 2016 - 2026 Red Hat, Inc.