aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/netdevsim/netdev.c
diff options
context:
space:
mode:
authorJiri Pirko <jiri@mellanox.com>2019-04-25 15:59:42 +0200
committerDavid S. Miller <davem@davemloft.net>2019-04-26 01:52:02 -0400
commit5fc494225c1eb81309cc4c91f183cd30e4edb674 (patch)
tree4369d3393e958b7ffb3cf7cd4d5eba271d7f78ad /drivers/net/netdevsim/netdev.c
parentnetdevsim: move device registration on bus to be done earlier in init (diff)
downloadlinux-dev-5fc494225c1eb81309cc4c91f183cd30e4edb674.tar.xz
linux-dev-5fc494225c1eb81309cc4c91f183cd30e4edb674.zip
netdevsim: create devlink instance per netdevsim instance
Currently there is one devlink instance created per network namespace. That is quite odd considering the fact that devlink instance should represent an ASIC. The following patches are going to move the devlink instance even more down to a bus device, but until then, have one devlink instance per netdevsim instance. Struct nsim_devlink is introduced to hold fib setting. The changes in the fib code are only related to holding the configuration per devlink instance instead of network namespace. Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/netdevsim/netdev.c')
-rw-r--r--drivers/net/netdevsim/netdev.c27
1 files changed, 10 insertions, 17 deletions
diff --git a/drivers/net/netdevsim/netdev.c b/drivers/net/netdevsim/netdev.c
index 6ac5447bca02..04aa084dc34c 100644
--- a/drivers/net/netdevsim/netdev.c
+++ b/drivers/net/netdevsim/netdev.c
@@ -161,7 +161,6 @@ static int nsim_init(struct net_device *dev)
char sdev_link_name[32];
int err;
- ns->netdev = dev;
ns->ddir = debugfs_create_dir(netdev_name(dev), nsim_ddir);
if (IS_ERR_OR_NULL(ns->ddir))
return -ENOMEM;
@@ -174,16 +173,10 @@ static int nsim_init(struct net_device *dev)
if (err)
goto err_debugfs_destroy;
- err = nsim_devlink_setup(ns);
- if (err)
- goto err_bpf_uninit;
-
nsim_ipsec_init(ns);
return 0;
-err_bpf_uninit:
- nsim_bpf_uninit(ns);
err_debugfs_destroy:
debugfs_remove_recursive(ns->ddir);
return err;
@@ -194,7 +187,6 @@ static void nsim_uninit(struct net_device *dev)
struct netdevsim *ns = netdev_priv(dev);
nsim_ipsec_teardown(ns);
- nsim_devlink_teardown(ns);
debugfs_remove_recursive(ns->ddir);
nsim_bpf_uninit(ns);
}
@@ -203,6 +195,7 @@ static void nsim_free(struct net_device *dev)
{
struct netdevsim *ns = netdev_priv(dev);
+ nsim_devlink_exit(ns);
device_unregister(&ns->dev);
/* netdev and vf state will be freed out of device_release() */
nsim_sdev_put(ns->sdev);
@@ -511,12 +504,19 @@ static int nsim_newlink(struct net *src_net, struct net_device *dev,
goto err_sdev_put;
SET_NETDEV_DEV(dev, &ns->dev);
+ ns->netdev = dev;
- err = register_netdevice(dev);
+ err = nsim_devlink_init(ns);
if (err)
goto err_unreg_dev;
+
+ err = register_netdevice(dev);
+ if (err)
+ goto err_devlink_exit;
return 0;
+err_devlink_exit:
+ nsim_devlink_exit(ns);
err_unreg_dev:
device_unregister(&ns->dev);
err_sdev_put:
@@ -548,18 +548,12 @@ static int __init nsim_module_init(void)
if (err)
goto err_sdev_exit;
- err = nsim_devlink_init();
- if (err)
- goto err_unreg_bus;
-
err = rtnl_link_register(&nsim_link_ops);
if (err)
- goto err_dl_fini;
+ goto err_unreg_bus;
return 0;
-err_dl_fini:
- nsim_devlink_exit();
err_unreg_bus:
bus_unregister(&nsim_bus);
err_sdev_exit:
@@ -572,7 +566,6 @@ err_debugfs_destroy:
static void __exit nsim_module_exit(void)
{
rtnl_link_unregister(&nsim_link_ops);
- nsim_devlink_exit();
bus_unregister(&nsim_bus);
nsim_sdev_exit();
debugfs_remove_recursive(nsim_ddir);