Commit bd032e35 authored by Leon Romanovsky's avatar Leon Romanovsky Committed by Jakub Kicinski
Browse files

devlink: Allow control devlink ops behavior through feature mask



Introduce new devlink call to set feature mask to control devlink
behavior during device initialization phase after devlink_alloc()
is already called.

This allows us to set reload ops based on device property which
is not known at the beginning of driver initialization.

For the sake of simplicity, this API lacks any type of locking and
needs to be called before devlink_register() to make sure that no
parallel access to the ops is possible at this stage.

Signed-off-by: default avatarLeon Romanovsky <leonro@nvidia.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent b88f7b12
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -119,6 +119,7 @@ int hclge_devlink_init(struct hclge_dev *hdev)
	priv->hdev = hdev;
	priv->hdev = hdev;
	hdev->devlink = devlink;
	hdev->devlink = devlink;


	devlink_set_features(devlink, DEVLINK_F_RELOAD);
	devlink_register(devlink);
	devlink_register(devlink);
	devlink_reload_enable(devlink);
	devlink_reload_enable(devlink);
	return 0;
	return 0;
+1 −0
Original line number Original line Diff line number Diff line
@@ -121,6 +121,7 @@ int hclgevf_devlink_init(struct hclgevf_dev *hdev)
	priv->hdev = hdev;
	priv->hdev = hdev;
	hdev->devlink = devlink;
	hdev->devlink = devlink;


	devlink_set_features(devlink, DEVLINK_F_RELOAD);
	devlink_register(devlink);
	devlink_register(devlink);
	devlink_reload_enable(devlink);
	devlink_reload_enable(devlink);
	return 0;
	return 0;
+1 −0
Original line number Original line Diff line number Diff line
@@ -4025,6 +4025,7 @@ static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
		goto err_params_unregister;
		goto err_params_unregister;


	pci_save_state(pdev);
	pci_save_state(pdev);
	devlink_set_features(devlink, DEVLINK_F_RELOAD);
	devlink_register(devlink);
	devlink_register(devlink);
	devlink_reload_enable(devlink);
	devlink_reload_enable(devlink);
	return 0;
	return 0;
+1 −0
Original line number Original line Diff line number Diff line
@@ -813,6 +813,7 @@ int mlx5_devlink_register(struct devlink *devlink)
	if (err)
	if (err)
		goto traps_reg_err;
		goto traps_reg_err;


	devlink_set_features(devlink, DEVLINK_F_RELOAD);
	return 0;
	return 0;


traps_reg_err:
traps_reg_err:
+1 −0
Original line number Original line Diff line number Diff line
@@ -2008,6 +2008,7 @@ __mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info,
	}
	}


	if (!reload) {
	if (!reload) {
		devlink_set_features(devlink, DEVLINK_F_RELOAD);
		devlink_register(devlink);
		devlink_register(devlink);
		devlink_reload_enable(devlink);
		devlink_reload_enable(devlink);
	}
	}
Loading