Commit b9bae61b authored by Petr Machata's avatar Petr Machata Committed by Jakub Kicinski
Browse files

nexthop: Introduce to struct nh_grp_entry a per-type union



The values that a next-hop group needs to keep track of depend on the group
type. Introduce a union to separate fields specific to the mpath groups
from fields specific to other group types.

Signed-off-by: default avatarPetr Machata <petrm@nvidia.com>
Reviewed-by: default avatarIdo Schimmel <idosch@nvidia.com>
Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 79bc55e3
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -66,7 +66,12 @@ struct nh_info {
struct nh_grp_entry {
	struct nexthop	*nh;
	u8		weight;

	union {
		struct {
			atomic_t	upper_bound;
		} mpath;
	};

	struct list_head nh_list;
	struct nexthop	*nh_parent;  /* nexthop of group with this entry */
+2 −2
Original line number Diff line number Diff line
@@ -689,7 +689,7 @@ static struct nexthop *nexthop_select_path_mp(struct nh_group *nhg, int hash)
		struct nh_grp_entry *nhge = &nhg->nh_entries[i];
		struct nh_info *nhi;

		if (hash > atomic_read(&nhge->upper_bound))
		if (hash > atomic_read(&nhge->mpath.upper_bound))
			continue;

		nhi = rcu_dereference(nhge->nh->nh_info);
@@ -924,7 +924,7 @@ static void nh_group_rebalance(struct nh_group *nhg)

		w += nhge->weight;
		upper_bound = DIV_ROUND_CLOSEST_ULL((u64)w << 31, total) - 1;
		atomic_set(&nhge->upper_bound, upper_bound);
		atomic_set(&nhge->mpath.upper_bound, upper_bound);
	}
}