mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-07 13:43:51 +00:00
devlink: remove devlink features
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>
This commit is contained in:
parent
a131315a47
commit
fb8421a94c
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -125,23 +125,6 @@ struct devlink *devlinks_xa_find_get(struct net *net, unsigned long *indexp)
|
||||
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");
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user