Skip to content

Commit 60904cd

Browse files
paravmellanoxSaeed Mahameed
authored andcommitted
net/mlx5: Disable reload while removing the device
While unregistration is in progress, user might be reloading the interface. This can race with unregistration in below flow which uses the resources which are getting disabled by reload flow. Hence, disable the devlink reloading first when removing the device. CPU0 CPU1 ---- ---- local_pci_remove() devlink_mutex remove_one() devlink_nl_cmd_reload() mlx5_unregister_device() devlink_reload() ops->reload_down() mlx5_unload_one() Fixes: 4383cfc ("net/mlx5: Add devlink reload") Signed-off-by: Parav Pandit <[email protected]> Reviewed-by: Moshe Shemesh <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]>
1 parent 5f1572e commit 60904cd

File tree

2 files changed

+2
-2
lines changed

2 files changed

+2
-2
lines changed

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,6 @@ int mlx5_devlink_register(struct devlink *devlink, struct device *dev)
283283
goto params_reg_err;
284284
mlx5_devlink_set_params_init_values(devlink);
285285
devlink_params_publish(devlink);
286-
devlink_reload_enable(devlink);
287286
return 0;
288287

289288
params_reg_err:
@@ -293,7 +292,6 @@ int mlx5_devlink_register(struct devlink *devlink, struct device *dev)
293292

294293
void mlx5_devlink_unregister(struct devlink *devlink)
295294
{
296-
devlink_reload_disable(devlink);
297295
devlink_params_unregister(devlink, mlx5_devlink_params,
298296
ARRAY_SIZE(mlx5_devlink_params));
299297
devlink_unregister(devlink);

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1367,6 +1367,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *id)
13671367
dev_err(&pdev->dev, "mlx5_crdump_enable failed with error code %d\n", err);
13681368

13691369
pci_save_state(pdev);
1370+
devlink_reload_enable(devlink);
13701371
return 0;
13711372

13721373
err_load_one:
@@ -1384,6 +1385,7 @@ static void remove_one(struct pci_dev *pdev)
13841385
struct mlx5_core_dev *dev = pci_get_drvdata(pdev);
13851386
struct devlink *devlink = priv_to_devlink(dev);
13861387

1388+
devlink_reload_disable(devlink);
13871389
mlx5_crdump_disable(dev);
13881390
mlx5_devlink_unregister(devlink);
13891391

0 commit comments

Comments
 (0)