Commit ef817102 authored by David Ahern's avatar David Ahern Committed by David S. Miller

netdevsim: Change nsim_devlink_setup to return error to caller

Change nsim_devlink_setup to return any error back to the caller and
update nsim_init to handle it.
Requested-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: default avatarDavid Ahern <dsa@cumulusnetworks.com>
Acked-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6851cf28
...@@ -218,22 +218,22 @@ void nsim_devlink_teardown(struct netdevsim *ns) ...@@ -218,22 +218,22 @@ void nsim_devlink_teardown(struct netdevsim *ns)
} }
} }
void nsim_devlink_setup(struct netdevsim *ns) int nsim_devlink_setup(struct netdevsim *ns)
{ {
struct net *net = nsim_to_net(ns); struct net *net = nsim_to_net(ns);
bool *reg_devlink = net_generic(net, nsim_devlink_id); bool *reg_devlink = net_generic(net, nsim_devlink_id);
struct devlink *devlink; struct devlink *devlink;
int err = -ENOMEM; int err;
/* only one device per namespace controls devlink */ /* only one device per namespace controls devlink */
if (!*reg_devlink) { if (!*reg_devlink) {
ns->devlink = NULL; ns->devlink = NULL;
return; return 0;
} }
devlink = devlink_alloc(&nsim_devlink_ops, 0); devlink = devlink_alloc(&nsim_devlink_ops, 0);
if (!devlink) if (!devlink)
return; return -ENOMEM;
err = devlink_register(devlink, &ns->dev); err = devlink_register(devlink, &ns->dev);
if (err) if (err)
...@@ -247,12 +247,14 @@ void nsim_devlink_setup(struct netdevsim *ns) ...@@ -247,12 +247,14 @@ void nsim_devlink_setup(struct netdevsim *ns)
*reg_devlink = false; *reg_devlink = false;
return; return 0;
err_dl_unregister: err_dl_unregister:
devlink_unregister(devlink); devlink_unregister(devlink);
err_devlink_free: err_devlink_free:
devlink_free(devlink); devlink_free(devlink);
return err;
} }
/* Initialize per network namespace state */ /* Initialize per network namespace state */
......
...@@ -167,10 +167,14 @@ static int nsim_init(struct net_device *dev) ...@@ -167,10 +167,14 @@ static int nsim_init(struct net_device *dev)
SET_NETDEV_DEV(dev, &ns->dev); SET_NETDEV_DEV(dev, &ns->dev);
nsim_devlink_setup(ns); err = nsim_devlink_setup(ns);
if (err)
goto err_unreg_dev;
return 0; return 0;
err_unreg_dev:
device_unregister(&ns->dev);
err_bpf_uninit: err_bpf_uninit:
nsim_bpf_uninit(ns); nsim_bpf_uninit(ns);
err_debugfs_destroy: err_debugfs_destroy:
......
...@@ -117,7 +117,7 @@ enum nsim_resource_id { ...@@ -117,7 +117,7 @@ enum nsim_resource_id {
NSIM_RESOURCE_IPV6_FIB_RULES, NSIM_RESOURCE_IPV6_FIB_RULES,
}; };
void nsim_devlink_setup(struct netdevsim *ns); int nsim_devlink_setup(struct netdevsim *ns);
void nsim_devlink_teardown(struct netdevsim *ns); void nsim_devlink_teardown(struct netdevsim *ns);
int nsim_devlink_init(void); int nsim_devlink_init(void);
...@@ -128,8 +128,9 @@ void nsim_fib_exit(void); ...@@ -128,8 +128,9 @@ void nsim_fib_exit(void);
u64 nsim_fib_get_val(struct net *net, enum nsim_resource_id res_id, bool max); u64 nsim_fib_get_val(struct net *net, enum nsim_resource_id res_id, bool max);
int nsim_fib_set_max(struct net *net, enum nsim_resource_id res_id, u64 val); int nsim_fib_set_max(struct net *net, enum nsim_resource_id res_id, u64 val);
#else #else
static inline void nsim_devlink_setup(struct netdevsim *ns) static inline int nsim_devlink_setup(struct netdevsim *ns)
{ {
return 0;
} }
static inline void nsim_devlink_teardown(struct netdevsim *ns) static inline void nsim_devlink_teardown(struct netdevsim *ns)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment