This commit provides better scope for the DSA tree setup and teardown
functions. It renames the "applied" bool to "setup" and print a message
when the tree is setup, as it is done during teardown.

At the same time, check dst->setup in dsa_tree_setup, where it is set to
true.

Signed-off-by: Vivien Didelot <vivien.dide...@savoirfairelinux.com>
---
 include/net/dsa.h |  2 +-
 net/dsa/dsa2.c    | 32 ++++++++++++++++++--------------
 2 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/include/net/dsa.h b/include/net/dsa.h
index 2a8613b5a23d..6c239257309b 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -122,7 +122,7 @@ struct dsa_switch_tree {
        struct kref refcount;
 
        /* Has this tree been applied to the hardware? */
-       bool applied;
+       bool setup;
 
        /*
         * Configuration data for the platform device that owns
diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
index c9b50339fcac..1a8df0a177b5 100644
--- a/net/dsa/dsa2.c
+++ b/net/dsa/dsa2.c
@@ -486,12 +486,18 @@ static void dsa_tree_teardown_master(struct 
dsa_switch_tree *dst)
        return dsa_master_teardown(master);
 }
 
-static int dsa_dst_apply(struct dsa_switch_tree *dst)
+static int dsa_tree_setup(struct dsa_switch_tree *dst)
 {
        struct dsa_switch *ds;
        u32 index;
        int err;
 
+       if (dst->setup) {
+               pr_err("DSA: tree %d already setup! Disjoint trees?\n",
+                      dst->index);
+               return -EEXIST;
+       }
+
        err = dsa_tree_setup_default_cpu(dst);
        if (err)
                return err;
@@ -510,17 +516,19 @@ static int dsa_dst_apply(struct dsa_switch_tree *dst)
        if (err)
                return err;
 
-       dst->applied = true;
+       dst->setup = true;
+
+       pr_info("DSA: tree %d setup\n", dst->index);
 
        return 0;
 }
 
-static void dsa_dst_unapply(struct dsa_switch_tree *dst)
+static void dsa_tree_teardown(struct dsa_switch_tree *dst)
 {
        struct dsa_switch *ds;
        u32 index;
 
-       if (!dst->applied)
+       if (!dst->setup)
                return;
 
        dsa_tree_teardown_master(dst);
@@ -535,8 +543,9 @@ static void dsa_dst_unapply(struct dsa_switch_tree *dst)
 
        dsa_tree_teardown_default_cpu(dst);
 
-       pr_info("DSA: tree %d unapplied\n", dst->index);
-       dst->applied = false;
+       pr_info("DSA: tree %d torn down\n", dst->index);
+
+       dst->setup = false;
 }
 
 static void dsa_tree_remove_switch(struct dsa_switch_tree *dst,
@@ -794,14 +803,9 @@ static int _dsa_register_switch(struct dsa_switch *ds)
        if (err == 1)
                return 0;
 
-       if (dst->applied) {
-               pr_info("DSA: Disjoint trees?\n");
-               return -EINVAL;
-       }
-
-       err = dsa_dst_apply(dst);
+       err = dsa_tree_setup(dst);
        if (err) {
-               dsa_dst_unapply(dst);
+               dsa_tree_teardown(dst);
                goto out_del_dst;
        }
 
@@ -852,7 +856,7 @@ static void _dsa_unregister_switch(struct dsa_switch *ds)
        struct dsa_switch_tree *dst = ds->dst;
        unsigned int index = ds->index;
 
-       dsa_dst_unapply(dst);
+       dsa_tree_teardown(dst);
 
        dsa_tree_remove_switch(dst, index);
 }
-- 
2.14.3

Reply via email to