net: dsa: setup and teardown tree
authorVivien Didelot <vivien.didelot@savoirfairelinux.com>
Mon, 6 Nov 2017 21:11:46 +0000 (16:11 -0500)
committerDavid S. Miller <davem@davemloft.net>
Thu, 9 Nov 2017 00:26:49 +0000 (09:26 +0900)
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.didelot@savoirfairelinux.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/dsa.h
net/dsa/dsa2.c

index 2a8613b..6c23925 100644 (file)
@@ -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
index c9b5033..1a8df0a 100644 (file)
@@ -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);
 }