[PATCH net] net/mlx5: Only set num_doorbells on a fully initialized SF

From: Tariq Toukan

Date: Mon Oct 26 2026 - 04:48:48 EST


From: Cosmin Ratiu <cratiu@xxxxxxxxxx>

The validation for the num_doorbells devlink param rejects values
greater than num_channels. For lightweight SFs, this ends up accessing
a NULL priv->eq_table, leading to a crash.

Fix that by rejecting setting num_doorbells on uninitialized SFs.

Fixes: 11bbcfb7668c ("net/mlx5e: Use the 'num_doorbells' devlink param")
Signed-off-by: Cosmin Ratiu <cratiu@xxxxxxxxxx>
Reviewed-by: Dragos Tatulea <dtatulea@xxxxxxxxxx>
Signed-off-by: Tariq Toukan <tariqt@xxxxxxxxxx>
---
drivers/net/ethernet/mellanox/mlx5/core/devlink.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
index b9026cc64383..30a97e48dda7 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
@@ -542,6 +542,12 @@ static int mlx5_devlink_num_doorbells_validate(struct devlink *devlink, u32 id,
u32 val32 = val->vu32;
u32 max_num_channels;

+ if (mlx5_dev_is_lightweight(mdev)) {
+ NL_SET_ERR_MSG_MOD(extack,
+ "Setting num_doorbells requires full device initialization; reload the device first");
+ return -EOPNOTSUPP;
+ }
+
max_num_channels = mlx5e_get_max_num_channels(mdev);
if (val32 > max_num_channels) {
NL_SET_ERR_MSG_FMT_MOD(extack,

base-commit: f4377bf85887f57b59abb5479f7660a81ffe4449
--
2.44.0