Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ec15dd42 authored by Vivien Didelot's avatar Vivien Didelot Committed by David S. Miller
Browse files

net: dsa: setup and teardown tree



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: default avatarVivien Didelot <vivien.didelot@savoirfairelinux.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 17a22fcf
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -122,7 +122,7 @@ struct dsa_switch_tree {
	struct kref refcount;
	struct kref refcount;


	/* Has this tree been applied to the hardware? */
	/* Has this tree been applied to the hardware? */
	bool applied;
	bool setup;


	/*
	/*
	 * Configuration data for the platform device that owns
	 * Configuration data for the platform device that owns
+18 −14
Original line number Original line Diff line number Diff line
@@ -486,12 +486,18 @@ static void dsa_tree_teardown_master(struct dsa_switch_tree *dst)
	return dsa_master_teardown(master);
	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;
	struct dsa_switch *ds;
	u32 index;
	u32 index;
	int err;
	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);
	err = dsa_tree_setup_default_cpu(dst);
	if (err)
	if (err)
		return err;
		return err;
@@ -510,17 +516,19 @@ static int dsa_dst_apply(struct dsa_switch_tree *dst)
	if (err)
	if (err)
		return err;
		return err;


	dst->applied = true;
	dst->setup = true;

	pr_info("DSA: tree %d setup\n", dst->index);


	return 0;
	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;
	struct dsa_switch *ds;
	u32 index;
	u32 index;


	if (!dst->applied)
	if (!dst->setup)
		return;
		return;


	dsa_tree_teardown_master(dst);
	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);
	dsa_tree_teardown_default_cpu(dst);


	pr_info("DSA: tree %d unapplied\n", dst->index);
	pr_info("DSA: tree %d torn down\n", dst->index);
	dst->applied = false;

	dst->setup = false;
}
}


static void dsa_tree_remove_switch(struct dsa_switch_tree *dst,
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)
	if (err == 1)
		return 0;
		return 0;


	if (dst->applied) {
	err = dsa_tree_setup(dst);
		pr_info("DSA: Disjoint trees?\n");
		return -EINVAL;
	}

	err = dsa_dst_apply(dst);
	if (err) {
	if (err) {
		dsa_dst_unapply(dst);
		dsa_tree_teardown(dst);
		goto out_del_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;
	struct dsa_switch_tree *dst = ds->dst;
	unsigned int index = ds->index;
	unsigned int index = ds->index;


	dsa_dst_unapply(dst);
	dsa_tree_teardown(dst);


	dsa_tree_remove_switch(dst, index);
	dsa_tree_remove_switch(dst, index);
}
}