Commit 
a0c76345e3d3 ("devlink: disallow reload operation during device
cleanup") added devlink_reload_{enable,disable}() APIs to prevent reload
operation from racing with device probe/dismantle.
After recent changes to move devlink_register() to the end of device
probe and devlink_unregister() to the beginning of device dismantle,
these races can no longer happen. Reload operations will be denied if
the devlink instance is unregistered and devlink_unregister() will block
until all in-flight operations are done.
Therefore, remove these devlink_reload_{enable,disable}() APIs.
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
 
 
        devlink_set_features(devlink, DEVLINK_F_RELOAD);
        devlink_register(devlink);
-       devlink_reload_enable(devlink);
        return 0;
 }
 
 {
        struct devlink *devlink = hdev->devlink;
 
-       devlink_reload_disable(devlink);
-
        devlink_unregister(devlink);
 
        devlink_free(devlink);
 
 
        devlink_set_features(devlink, DEVLINK_F_RELOAD);
        devlink_register(devlink);
-       devlink_reload_enable(devlink);
        return 0;
 }
 
 {
        struct devlink *devlink = hdev->devlink;
 
-       devlink_reload_disable(devlink);
-
        devlink_unregister(devlink);
 
        devlink_free(devlink);
 
        pci_save_state(pdev);
        devlink_set_features(devlink, DEVLINK_F_RELOAD);
        devlink_register(devlink);
-       devlink_reload_enable(devlink);
        return 0;
 
 err_params_unregister:
        struct devlink *devlink = priv_to_devlink(priv);
        int active_vfs = 0;
 
-       devlink_reload_disable(devlink);
        devlink_unregister(devlink);
 
        if (mlx4_is_slave(dev))
 
 
        pci_save_state(pdev);
        devlink_register(devlink);
-       if (!mlx5_core_is_mp_slave(dev))
-               devlink_reload_enable(devlink);
        return 0;
 
 err_init_one:
        struct mlx5_core_dev *dev  = pci_get_drvdata(pdev);
        struct devlink *devlink = priv_to_devlink(dev);
 
-       devlink_reload_disable(devlink);
        devlink_unregister(devlink);
        mlx5_crdump_disable(dev);
        mlx5_drain_health_wq(dev);
 
                goto init_one_err;
        }
        devlink_register(devlink);
-       devlink_reload_enable(devlink);
        return 0;
 
 init_one_err:
 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;
+       struct devlink *devlink = priv_to_devlink(sf_dev->mdev);
 
-       devlink = priv_to_devlink(sf_dev->mdev);
-       devlink_reload_disable(devlink);
        devlink_unregister(devlink);
        mlx5_uninit_one(sf_dev->mdev);
        iounmap(sf_dev->mdev->iseg);
 
        if (!reload) {
                devlink_set_features(devlink, DEVLINK_F_RELOAD);
                devlink_register(devlink);
-               devlink_reload_enable(devlink);
        }
-
        return 0;
 
 err_driver_init:
 {
        struct devlink *devlink = priv_to_devlink(mlxsw_core);
 
-       if (!reload) {
-               devlink_reload_disable(devlink);
+       if (!reload)
                devlink_unregister(devlink);
-       }
+
        if (devlink_is_reload_failed(devlink)) {
                if (!reload)
                        /* Only the parts that were not de-initialized in the
 
        nsim_dev->esw_mode = DEVLINK_ESWITCH_MODE_LEGACY;
        devlink_set_features(devlink, DEVLINK_F_RELOAD);
        devlink_register(devlink);
-       devlink_reload_enable(devlink);
        return 0;
 
 err_psample_exit:
        struct nsim_dev *nsim_dev = dev_get_drvdata(&nsim_bus_dev->dev);
        struct devlink *devlink = priv_to_devlink(nsim_dev);
 
-       devlink_reload_disable(devlink);
        devlink_unregister(devlink);
-
        nsim_dev_reload_destroy(nsim_dev);
 
        nsim_bpf_dev_exit(nsim_dev);
 
 void devlink_set_features(struct devlink *devlink, u64 features);
 void devlink_register(struct devlink *devlink);
 void devlink_unregister(struct devlink *devlink);
-void devlink_reload_enable(struct devlink *devlink);
-void devlink_reload_disable(struct devlink *devlink);
 void devlink_free(struct devlink *devlink);
 int devlink_port_register(struct devlink *devlink,
                          struct devlink_port *devlink_port,
 
         * port, sb, dpipe, resource, params, region, traps and more.
         */
        struct mutex lock;
-       u8 reload_failed:1,
-          reload_enabled:1;
+       u8 reload_failed:1;
        refcount_t refcount;
        struct completion comp;
        char priv[0] __aligned(NETDEV_ALIGN);
        struct net *curr_net;
        int err;
 
-       if (!devlink->reload_enabled || !(devlink->features & DEVLINK_F_RELOAD))
-               return -EOPNOTSUPP;
-
        memcpy(remote_reload_stats, devlink->stats.remote_reload_stats,
               sizeof(remote_reload_stats));
 
        u32 actions_performed;
        int err;
 
-       if (!devlink_reload_supported(devlink->ops))
+       if (!(devlink->features & DEVLINK_F_RELOAD))
                return -EOPNOTSUPP;
 
        err = devlink_resources_validate(devlink, NULL, info);
        wait_for_completion(&devlink->comp);
 
        mutex_lock(&devlink_mutex);
-       WARN_ON(devlink->features & DEVLINK_F_RELOAD &&
-               devlink->reload_enabled);
        devlink_notify_unregister(devlink);
        xa_clear_mark(&devlinks, devlink->index, DEVLINK_REGISTERED);
        mutex_unlock(&devlink_mutex);
 }
 EXPORT_SYMBOL_GPL(devlink_unregister);
 
-/**
- *     devlink_reload_enable - Enable reload of devlink instance
- *
- *     @devlink: devlink
- *
- *     Should be called at end of device initialization
- *     process when reload operation is supported.
- */
-void devlink_reload_enable(struct devlink *devlink)
-{
-       mutex_lock(&devlink_mutex);
-       devlink->reload_enabled = true;
-       mutex_unlock(&devlink_mutex);
-}
-EXPORT_SYMBOL_GPL(devlink_reload_enable);
-
-/**
- *     devlink_reload_disable - Disable reload of devlink instance
- *
- *     @devlink: devlink
- *
- *     Should be called at the beginning of device cleanup
- *     process when reload operation is supported.
- */
-void devlink_reload_disable(struct devlink *devlink)
-{
-       mutex_lock(&devlink_mutex);
-       /* Mutex is taken which ensures that no reload operation is in
-        * progress while setting up forbidded flag.
-        */
-       devlink->reload_enabled = false;
-       mutex_unlock(&devlink_mutex);
-}
-EXPORT_SYMBOL_GPL(devlink_reload_disable);
-
 /**
  *     devlink_free - Free devlink instance resources
  *
                if (!net_eq(devlink_net(devlink), net))
                        goto retry;
 
-               WARN_ON(!devlink_reload_supported(devlink->ops));
+               WARN_ON(!(devlink->features & DEVLINK_F_RELOAD));
                err = devlink_reload(devlink, &init_net,
                                     DEVLINK_RELOAD_ACTION_DRIVER_REINIT,
                                     DEVLINK_RELOAD_LIMIT_UNSPEC,