NL_SET_ERR_MSG_MOD(extack, "Namespace change is not supported");
                return -EOPNOTSUPP;
        }
-       devl_lock(devlink);
        if (persist->num_vfs)
                mlx4_warn(persist->dev, "Reload performed on PF, will cause reset on operating Virtual Functions\n");
        mlx4_restart_one_down(persist->pdev);
-       devl_unlock(devlink);
        return 0;
 }
 
        struct mlx4_dev_persistent *persist = dev->persist;
        int err;
 
-       devl_lock(devlink);
        *actions_performed = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT);
        err = mlx4_restart_one_up(persist->pdev, true, devlink);
-       devl_unlock(devlink);
        if (err)
                mlx4_err(persist->dev, "mlx4_restart_one_up failed, ret=%d\n",
                         err);
 
 {
        struct nsim_dev *nsim_dev = devlink_priv(devlink);
 
-       devl_lock(devlink);
        if (nsim_dev->dont_allow_reload) {
                /* For testing purposes, user set debugfs dont_allow_reload
                 * value to true. So forbid it.
                 */
                NL_SET_ERR_MSG_MOD(extack, "User forbid the reload for testing purposes");
-               devl_unlock(devlink);
                return -EOPNOTSUPP;
        }
 
        nsim_dev_reload_destroy(nsim_dev);
-       devl_unlock(devlink);
        return 0;
 }
 
        struct nsim_dev *nsim_dev = devlink_priv(devlink);
        int ret;
 
-       devl_lock(devlink);
        if (nsim_dev->fail_reload) {
                /* For testing purposes, user set debugfs fail_reload
                 * value to true. Fail right away.
                 */
                NL_SET_ERR_MSG_MOD(extack, "User setup the reload to fail for testing purposes");
-               devl_unlock(devlink);
                return -EINVAL;
        }
 
        *actions_performed = BIT(DEVLINK_RELOAD_ACTION_DRIVER_REINIT);
        ret = nsim_dev_reload_create(nsim_dev, extack);
-       devl_unlock(devlink);
        return ret;
 }
 
 
 #define DEVLINK_NL_FLAG_NEED_RATE_NODE         BIT(3)
 #define DEVLINK_NL_FLAG_NEED_LINECARD          BIT(4)
 
-/* The per devlink instance lock is taken by default in the pre-doit
- * operation, yet several commands do not require this. The global
- * devlink lock is taken and protects from disruption by user-calls.
- */
-#define DEVLINK_NL_FLAG_NO_LOCK                        BIT(5)
-
 static int devlink_nl_pre_doit(const struct genl_ops *ops,
                               struct sk_buff *skb, struct genl_info *info)
 {
                mutex_unlock(&devlink_mutex);
                return PTR_ERR(devlink);
        }
-       if (~ops->internal_flags & DEVLINK_NL_FLAG_NO_LOCK)
-               devl_lock(devlink);
+       devl_lock(devlink);
        info->user_ptr[0] = devlink;
        if (ops->internal_flags & DEVLINK_NL_FLAG_NEED_PORT) {
                devlink_port = devlink_port_get_from_info(devlink, info);
        return 0;
 
 unlock:
-       if (~ops->internal_flags & DEVLINK_NL_FLAG_NO_LOCK)
-               devl_unlock(devlink);
+       devl_unlock(devlink);
        devlink_put(devlink);
        mutex_unlock(&devlink_mutex);
        return err;
                linecard = info->user_ptr[1];
                devlink_linecard_put(linecard);
        }
-       if (~ops->internal_flags & DEVLINK_NL_FLAG_NO_LOCK)
-               devl_unlock(devlink);
+       devl_unlock(devlink);
        devlink_put(devlink);
        mutex_unlock(&devlink_mutex);
 }
                .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
                .doit = devlink_nl_cmd_reload,
                .flags = GENL_ADMIN_PERM,
-               .internal_flags = DEVLINK_NL_FLAG_NO_LOCK,
        },
        {
                .cmd = DEVLINK_CMD_PARAM_GET,
        mutex_lock(&devlink_mutex);
        devlinks_xa_for_each_registered_get(net, index, devlink) {
                WARN_ON(!(devlink->features & DEVLINK_F_RELOAD));
+               mutex_lock(&devlink->lock);
                err = devlink_reload(devlink, &init_net,
                                     DEVLINK_RELOAD_ACTION_DRIVER_REINIT,
                                     DEVLINK_RELOAD_LIMIT_UNSPEC,
                                     &actions_performed, NULL);
+               mutex_unlock(&devlink->lock);
                if (err && err != -EOPNOTSUPP)
                        pr_warn("Failed to reload devlink instance into init_net\n");
                devlink_put(devlink);