devlink: hold the instance lock during eswitch_mode callbacks

Make the devlink core hold the instance lock during eswitch_mode
callbacks. Cheat in case of mlx5 (see the cover letter).

Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Jakub Kicinski
2022-03-18 12:23:44 -07:00
committed by David S. Miller
parent aff3a92509
commit 14e426bf1a
5 changed files with 54 additions and 51 deletions

View File

@@ -615,22 +615,16 @@ static int nsim_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode,
struct netlink_ext_ack *extack)
{
struct nsim_dev *nsim_dev = devlink_priv(devlink);
int err = 0;
devl_lock(devlink);
if (mode == nsim_dev->esw_mode)
goto unlock;
return 0;
if (mode == DEVLINK_ESWITCH_MODE_LEGACY)
err = nsim_esw_legacy_enable(nsim_dev, extack);
else if (mode == DEVLINK_ESWITCH_MODE_SWITCHDEV)
err = nsim_esw_switchdev_enable(nsim_dev, extack);
else
err = -EINVAL;
return nsim_esw_legacy_enable(nsim_dev, extack);
if (mode == DEVLINK_ESWITCH_MODE_SWITCHDEV)
return nsim_esw_switchdev_enable(nsim_dev, extack);
unlock:
devl_unlock(devlink);
return err;
return -EINVAL;
}
static int nsim_devlink_eswitch_mode_get(struct devlink *devlink, u16 *mode)