From 4b3a84bce4e21cb6826ba67c5fc68ce63dad83d9 Mon Sep 17 00:00:00 2001 From: Jiri Pirko Date: Fri, 12 Apr 2019 14:49:29 +0200 Subject: [PATCH] netdevsim: move sdev-specific init/uninit code into separate functions In order to improve readability and prepare for future code changes, move sdev specific init/uninit code into separate functions. Signed-off-by: Jiri Pirko Signed-off-by: David S. Miller --- drivers/net/netdevsim/bpf.c | 63 ++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 25 deletions(-) diff --git a/drivers/net/netdevsim/bpf.c b/drivers/net/netdevsim/bpf.c index 2710d467d1f8..a93aafe87db3 100644 --- a/drivers/net/netdevsim/bpf.c +++ b/drivers/net/netdevsim/bpf.c @@ -578,35 +578,51 @@ int nsim_bpf(struct net_device *dev, struct netdev_bpf *bpf) } } -int nsim_bpf_init(struct netdevsim *ns) +static int nsim_bpf_sdev_init(struct netdevsim_shared_dev *sdev) { int err; - if (ns->sdev->refcnt == 1) { - INIT_LIST_HEAD(&ns->sdev->bpf_bound_progs); - INIT_LIST_HEAD(&ns->sdev->bpf_bound_maps); + INIT_LIST_HEAD(&sdev->bpf_bound_progs); + INIT_LIST_HEAD(&sdev->bpf_bound_maps); + + sdev->ddir_bpf_bound_progs = + debugfs_create_dir("bpf_bound_progs", sdev->ddir); + if (IS_ERR_OR_NULL(sdev->ddir_bpf_bound_progs)) + return -ENOMEM; + + sdev->bpf_dev = bpf_offload_dev_create(&nsim_bpf_dev_ops, sdev); + err = PTR_ERR_OR_ZERO(sdev->bpf_dev); + if (err) + return err; + + sdev->bpf_bind_accept = true; + debugfs_create_bool("bpf_bind_accept", 0600, sdev->ddir, + &sdev->bpf_bind_accept); + debugfs_create_u32("bpf_bind_verifier_delay", 0600, sdev->ddir, + &sdev->bpf_bind_verifier_delay); + return 0; +} + +static void nsim_bpf_sdev_uninit(struct netdevsim_shared_dev *sdev) +{ + WARN_ON(!list_empty(&sdev->bpf_bound_progs)); + WARN_ON(!list_empty(&sdev->bpf_bound_maps)); + bpf_offload_dev_destroy(sdev->bpf_dev); +} - ns->sdev->ddir_bpf_bound_progs = - debugfs_create_dir("bpf_bound_progs", ns->sdev->ddir); - if (IS_ERR_OR_NULL(ns->sdev->ddir_bpf_bound_progs)) - return -ENOMEM; +int nsim_bpf_init(struct netdevsim *ns) +{ + int err; - ns->sdev->bpf_dev = bpf_offload_dev_create(&nsim_bpf_dev_ops, - ns->sdev); - err = PTR_ERR_OR_ZERO(ns->sdev->bpf_dev); + if (ns->sdev->refcnt == 1) { + err = nsim_bpf_sdev_init(ns->sdev); if (err) return err; - - ns->sdev->bpf_bind_accept = true; - debugfs_create_bool("bpf_bind_accept", 0600, ns->sdev->ddir, - &ns->sdev->bpf_bind_accept); - debugfs_create_u32("bpf_bind_verifier_delay", 0600, ns->sdev->ddir, - &ns->sdev->bpf_bind_verifier_delay); } err = bpf_offload_dev_netdev_register(ns->sdev->bpf_dev, ns->netdev); if (err) - goto err_destroy_bdev; + goto err_bpf_sdev_uninit; debugfs_create_u32("bpf_offloaded_id", 0400, ns->ddir, &ns->bpf_offloaded_id); @@ -629,9 +645,9 @@ int nsim_bpf_init(struct netdevsim *ns) return 0; -err_destroy_bdev: +err_bpf_sdev_uninit: if (ns->sdev->refcnt == 1) - bpf_offload_dev_destroy(ns->sdev->bpf_dev); + nsim_bpf_sdev_uninit(ns->sdev); return err; } @@ -642,9 +658,6 @@ void nsim_bpf_uninit(struct netdevsim *ns) WARN_ON(ns->bpf_offloaded); bpf_offload_dev_netdev_unregister(ns->sdev->bpf_dev, ns->netdev); - if (ns->sdev->refcnt == 1) { - WARN_ON(!list_empty(&ns->sdev->bpf_bound_progs)); - WARN_ON(!list_empty(&ns->sdev->bpf_bound_maps)); - bpf_offload_dev_destroy(ns->sdev->bpf_dev); - } + if (ns->sdev->refcnt == 1) + nsim_bpf_sdev_uninit(ns->sdev); } -- 2.39.5