devlink: remove devlink features
authorJiri Pirko <jiri@nvidia.com>
Fri, 27 Jan 2023 15:50:42 +0000 (16:50 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 30 Jan 2023 08:37:46 +0000 (08:37 +0000)
Devlink features were introduced to disallow devlink reload calls of
userspace before the devlink was fully initialized. The reason for this
workaround was the fact that devlink reload was originally called
without devlink instance lock held.

However, with recent changes that converted devlink reload to be
performed under devlink instance lock, this is redundant so remove
devlink features entirely.

Note that mlx5 used this to enable devlink reload conditionally only
when device didn't act as multi port slave. Move the multi port check
into mlx5_devlink_reload_down() callback alongside with the other
checks preventing the device from reload in certain states.

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
12 files changed:
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_devlink.c
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_devlink.c
drivers/net/ethernet/intel/ice/ice_devlink.c
drivers/net/ethernet/mellanox/mlx4/main.c
drivers/net/ethernet/mellanox/mlx5/core/devlink.c
drivers/net/ethernet/mellanox/mlxsw/core.c
drivers/net/netdevsim/dev.c
include/net/devlink.h
net/devlink/core.c
net/devlink/devl_internal.h
net/devlink/leftover.c

index 26913dc816d3295d658ec8fbbdc73f25249f76c4..8b3e7697390f7b94f004daaedbd9dde9dc485046 100644 (file)
@@ -1303,7 +1303,6 @@ int bnxt_dl_register(struct bnxt *bp)
        if (rc)
                goto err_dl_port_unreg;
 
-       devlink_set_features(dl, DEVLINK_F_RELOAD);
 out:
        devlink_register(dl);
        return 0;
index 3d3b69605423138bf6ba889bbf05ac4aea4ebe71..9a939c0b217f717746924af4f651e384e2f0035a 100644 (file)
@@ -114,7 +114,6 @@ int hclge_devlink_init(struct hclge_dev *hdev)
        priv->hdev = hdev;
        hdev->devlink = devlink;
 
-       devlink_set_features(devlink, DEVLINK_F_RELOAD);
        devlink_register(devlink);
        return 0;
 }
index a6c3c5e8f0abd91413f9892062e81e7c1d8d1100..1b535142c65a6ecfa1559863f2ad1e9a759bcc4b 100644 (file)
@@ -116,7 +116,6 @@ int hclgevf_devlink_init(struct hclgevf_dev *hdev)
        priv->hdev = hdev;
        hdev->devlink = devlink;
 
-       devlink_set_features(devlink, DEVLINK_F_RELOAD);
        devlink_register(devlink);
        return 0;
 }
index ce753d23aba9af8bc0be0c560f30ac67e0a7bb0e..88497363fc4c2e7340e112ed481128d411cc01df 100644 (file)
@@ -1376,7 +1376,6 @@ void ice_devlink_register(struct ice_pf *pf)
 {
        struct devlink *devlink = priv_to_devlink(pf);
 
-       devlink_set_features(devlink, DEVLINK_F_RELOAD);
        devlink_register(devlink);
 }
 
index 6152f77dcfd8901133030749af755435271d1e01..277738c50c56e946546958a7369622697f686d0b 100644 (file)
@@ -4031,7 +4031,6 @@ static int mlx4_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
                goto err_params_unregister;
 
        pci_save_state(pdev);
-       devlink_set_features(devlink, DEVLINK_F_RELOAD);
        devl_unlock(devlink);
        devlink_register(devlink);
        return 0;
index 95a69544a685a468c5575d5801f4c8b466a3003f..63fb7912b0325a7bf90d7472e00fcd1837030d2e 100644 (file)
@@ -156,6 +156,11 @@ static int mlx5_devlink_reload_down(struct devlink *devlink, bool netns_change,
                return -EOPNOTSUPP;
        }
 
+       if (mlx5_core_is_mp_slave(dev)) {
+               NL_SET_ERR_MSG_MOD(extack, "reload is unsupported for multi port slave");
+               return -EOPNOTSUPP;
+       }
+
        if (pci_num_vf(pdev)) {
                NL_SET_ERR_MSG_MOD(extack, "reload while VFs are present is unfavorable");
        }
@@ -744,7 +749,6 @@ void mlx5_devlink_traps_unregister(struct devlink *devlink)
 
 int mlx5_devlink_params_register(struct devlink *devlink)
 {
-       struct mlx5_core_dev *dev = devlink_priv(devlink);
        int err;
 
        err = devl_params_register(devlink, mlx5_devlink_params,
@@ -762,9 +766,6 @@ int mlx5_devlink_params_register(struct devlink *devlink)
        if (err)
                goto max_uc_list_err;
 
-       if (!mlx5_core_is_mp_slave(dev))
-               devlink_set_features(devlink, DEVLINK_F_RELOAD);
-
        return 0;
 
 max_uc_list_err:
index f8623e8388c8c6d28fd9d96b3c732ad6e1f9a4bc..42422a106433264bba1302b1e5f73a3aae740bcf 100644 (file)
@@ -2285,7 +2285,6 @@ __mlxsw_core_bus_device_register(const struct mlxsw_bus_info *mlxsw_bus_info,
        }
 
        if (!reload) {
-               devlink_set_features(devlink, DEVLINK_F_RELOAD);
                devl_unlock(devlink);
                devlink_register(devlink);
        }
index f88095b0f836ee51cbf28179839a9ed088da5d70..6045bece2654d69ab7af7fffd787c271caaa6d26 100644 (file)
@@ -1609,7 +1609,6 @@ int nsim_drv_probe(struct nsim_bus_dev *nsim_bus_dev)
                goto err_hwstats_exit;
 
        nsim_dev->esw_mode = DEVLINK_ESWITCH_MODE_LEGACY;
-       devlink_set_features(devlink, DEVLINK_F_RELOAD);
        devl_unlock(devlink);
        return 0;
 
index ab654cf552b86f270e35ee8853f8345d8fec4eb9..2e85a5970a32620b8beb9115b16f14bd00e9c907 100644 (file)
@@ -1645,7 +1645,7 @@ static inline struct devlink *devlink_alloc(const struct devlink_ops *ops,
 {
        return devlink_alloc_ns(ops, priv_size, &init_net, dev);
 }
-void devlink_set_features(struct devlink *devlink, u64 features);
+
 int devl_register(struct devlink *devlink);
 void devl_unregister(struct devlink *devlink);
 void devlink_register(struct devlink *devlink);
index 6c0e2fc57e459d13a94d1add1fba5c58116b37be..aeffd1b8206d6478998f00e1e34cb7130ca503bb 100644 (file)
@@ -125,23 +125,6 @@ next:
        goto retry;
 }
 
-/**
- *     devlink_set_features - Set devlink supported features
- *
- *     @devlink: devlink
- *     @features: devlink support features
- *
- *     This interface allows us to set reload ops separatelly from
- *     the devlink_alloc.
- */
-void devlink_set_features(struct devlink *devlink, u64 features)
-{
-       WARN_ON(features & DEVLINK_F_RELOAD &&
-               !devlink_reload_supported(devlink->ops));
-       devlink->features = features;
-}
-EXPORT_SYMBOL_GPL(devlink_set_features);
-
 /**
  * devl_register - Register devlink instance
  * @devlink: devlink
@@ -303,7 +286,6 @@ static void __net_exit devlink_pernet_pre_exit(struct net *net)
         * all devlink instances from this namespace into init_net.
         */
        devlinks_xa_for_each_registered_get(net, index, devlink) {
-               WARN_ON(!(devlink->features & DEVLINK_F_RELOAD));
                devl_lock(devlink);
                err = 0;
                if (devl_is_registered(devlink))
@@ -313,7 +295,6 @@ static void __net_exit devlink_pernet_pre_exit(struct net *net)
                                             &actions_performed, NULL);
                devl_unlock(devlink);
                devlink_put(devlink);
-
                if (err && err != -EOPNOTSUPP)
                        pr_warn("Failed to reload devlink instance into init_net\n");
        }
index d0d88903813824197fc65076c512b5a68636bd27..ba161de4120e2d8b981a2eee6100e10b6d7e0b98 100644 (file)
@@ -38,7 +38,6 @@ struct devlink {
        struct list_head trap_policer_list;
        struct list_head linecard_list;
        const struct devlink_ops *ops;
-       u64 features;
        struct xarray snapshot_ids;
        struct devlink_dev_stats stats;
        struct device *dev;
index 4f78ef5a46af8def44ff291d743ae5949483a221..92210587d349a79ee8aa5cc5809fa680c5497707 100644 (file)
@@ -4387,9 +4387,6 @@ static int devlink_nl_cmd_reload(struct sk_buff *skb, struct genl_info *info)
        u32 actions_performed;
        int err;
 
-       if (!(devlink->features & DEVLINK_F_RELOAD))
-               return -EOPNOTSUPP;
-
        err = devlink_resources_validate(devlink, NULL, info);
        if (err) {
                NL_SET_ERR_MSG_MOD(info->extack, "resources size validation failed");