mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
devlink: Set device as early as possible
All kernel devlink implementations call to devlink_alloc() during initialization routine for specific device which is used later as a parent device for devlink_register(). Such late device assignment causes to the situation which requires us to call to device_register() before setting other parameters, but that call opens devlink to the world and makes accessible for the netlink users. Any attempt to move devlink_register() to be the last call generates the following error due to access to the devlink->dev pointer. [ 8.758862] devlink_nl_param_fill+0x2e8/0xe50 [ 8.760305] devlink_param_notify+0x6d/0x180 [ 8.760435] __devlink_params_register+0x2f1/0x670 [ 8.760558] devlink_params_register+0x1e/0x20 The simple change of API to set devlink device in the devlink_alloc() instead of devlink_register() fixes all this above and ensures that prior to call to devlink_register() everything already set. Signed-off-by: Leon Romanovsky <leonro@nvidia.com> Reviewed-by: Jiri Pirko <jiri@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
94c0a6fbd5
commit
919d13a7e4
@@ -1449,7 +1449,7 @@ int nsim_dev_probe(struct nsim_bus_dev *nsim_bus_dev)
|
||||
int err;
|
||||
|
||||
devlink = devlink_alloc_ns(&nsim_dev_devlink_ops, sizeof(*nsim_dev),
|
||||
nsim_bus_dev->initial_net);
|
||||
nsim_bus_dev->initial_net, &nsim_bus_dev->dev);
|
||||
if (!devlink)
|
||||
return -ENOMEM;
|
||||
nsim_dev = devlink_priv(devlink);
|
||||
@@ -1470,7 +1470,7 @@ int nsim_dev_probe(struct nsim_bus_dev *nsim_bus_dev)
|
||||
if (err)
|
||||
goto err_devlink_free;
|
||||
|
||||
err = devlink_register(devlink, &nsim_bus_dev->dev);
|
||||
err = devlink_register(devlink);
|
||||
if (err)
|
||||
goto err_resources_unregister;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user