mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-27 21:03:32 +00:00
net/mlx5: SF, Stop waiting for FW as teardown was called
[ Upstream commit137cef6d55
] When PF/VF teardown is called the driver sets the flag MLX5_BREAK_FW_WAIT to stop waiting for FW loading and initializing. Same should be applied to SF driver teardown to cut waiting time. On mlx5_sf_dev_remove() set the flag before draining health WQ as recovery flow may also wait for FW reloading while it is not relevant anymore. Signed-off-by: Moshe Shemesh <moshe@nvidia.com> Reviewed-by: Aya Levin <ayal@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com> Stable-dep-of:c6e77aa9dd
("net/mlx5: Register devlink first under devlink lock") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
562b724513
commit
87d1f84036
1 changed files with 13 additions and 8 deletions
|
@ -95,24 +95,29 @@ static int mlx5_sf_dev_probe(struct auxiliary_device *adev, const struct auxilia
|
|||
static void mlx5_sf_dev_remove(struct auxiliary_device *adev)
|
||||
{
|
||||
struct mlx5_sf_dev *sf_dev = container_of(adev, struct mlx5_sf_dev, adev);
|
||||
struct devlink *devlink = priv_to_devlink(sf_dev->mdev);
|
||||
struct mlx5_core_dev *mdev = sf_dev->mdev;
|
||||
struct devlink *devlink;
|
||||
|
||||
mlx5_drain_health_wq(sf_dev->mdev);
|
||||
devlink = priv_to_devlink(mdev);
|
||||
set_bit(MLX5_BREAK_FW_WAIT, &mdev->intf_state);
|
||||
mlx5_drain_health_wq(mdev);
|
||||
devlink_unregister(devlink);
|
||||
if (mlx5_dev_is_lightweight(sf_dev->mdev))
|
||||
mlx5_uninit_one_light(sf_dev->mdev);
|
||||
if (mlx5_dev_is_lightweight(mdev))
|
||||
mlx5_uninit_one_light(mdev);
|
||||
else
|
||||
mlx5_uninit_one(sf_dev->mdev);
|
||||
iounmap(sf_dev->mdev->iseg);
|
||||
mlx5_mdev_uninit(sf_dev->mdev);
|
||||
mlx5_uninit_one(mdev);
|
||||
iounmap(mdev->iseg);
|
||||
mlx5_mdev_uninit(mdev);
|
||||
mlx5_devlink_free(devlink);
|
||||
}
|
||||
|
||||
static void mlx5_sf_dev_shutdown(struct auxiliary_device *adev)
|
||||
{
|
||||
struct mlx5_sf_dev *sf_dev = container_of(adev, struct mlx5_sf_dev, adev);
|
||||
struct mlx5_core_dev *mdev = sf_dev->mdev;
|
||||
|
||||
mlx5_unload_one(sf_dev->mdev, false);
|
||||
set_bit(MLX5_BREAK_FW_WAIT, &mdev->intf_state);
|
||||
mlx5_unload_one(mdev, false);
|
||||
}
|
||||
|
||||
static const struct auxiliary_device_id mlx5_sf_dev_id_table[] = {
|
||||
|
|
Loading…
Reference in a new issue