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

Commit 244e6c2d authored by Jarek Poplawski's avatar Jarek Poplawski Committed by David S. Miller
Browse files

pkt_sched: gen_estimator: Optimize gen_estimator_active()



Since all other gen_estimator functions use bstats and rate_est params
together, and searching for them is optimized now, let's use this also
in gen_estimator_active(). The return type of gen_estimator_active()
is changed to bool, and gen_find_node() parameters to const, btw.

In tcf_act_police_locate() a check for ACT_P_CREATED is added before
calling gen_estimator_active().

Signed-off-by: default avatarJarek Poplawski <jarkao2@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3d4cd60e
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -45,6 +45,6 @@ extern void gen_kill_estimator(struct gnet_stats_basic *bstats,
extern int gen_replace_estimator(struct gnet_stats_basic *bstats,
				 struct gnet_stats_rate_est *rate_est,
				 spinlock_t *stats_lock, struct nlattr *opt);
extern int gen_estimator_active(const struct gnet_stats_rate_est *rate_est);

extern bool gen_estimator_active(const struct gnet_stats_basic *bstats,
				 const struct gnet_stats_rate_est *rate_est);
#endif
+8 −17
Original line number Diff line number Diff line
@@ -163,8 +163,9 @@ static void gen_add_node(struct gen_estimator *est)
	rb_insert_color(&est->node, &est_root);
}

static struct gen_estimator *gen_find_node(struct gnet_stats_basic *bstats,
					   struct gnet_stats_rate_est *rate_est)
static
struct gen_estimator *gen_find_node(const struct gnet_stats_basic *bstats,
				    const struct gnet_stats_rate_est *rate_est)
{
	struct rb_node *p = est_root.rb_node;

@@ -301,26 +302,16 @@ EXPORT_SYMBOL(gen_replace_estimator);

/**
 * gen_estimator_active - test if estimator is currently in use
 * @bstats: basic statistics
 * @rate_est: rate estimator statistics
 *
 * Returns 1 if estimator is active, and 0 if not.
 * Returns true if estimator is active, and false if not.
 */
int gen_estimator_active(const struct gnet_stats_rate_est *rate_est)
bool gen_estimator_active(const struct gnet_stats_basic *bstats,
			  const struct gnet_stats_rate_est *rate_est)
{
	int idx;
	struct gen_estimator *e;

	ASSERT_RTNL();

	for (idx=0; idx <= EST_MAX_INTERVAL; idx++) {
		if (!elist[idx].timer.function)
			continue;

		list_for_each_entry(e, &elist[idx].list, list) {
			if (e->rate_est == rate_est)
				return 1;
		}
	}
	return 0;
	return gen_find_node(bstats, rate_est) != NULL;
}
EXPORT_SYMBOL(gen_estimator_active);
+3 −1
Original line number Diff line number Diff line
@@ -183,7 +183,9 @@ static int tcf_act_police_locate(struct nlattr *nla, struct nlattr *est,
		if (R_tab == NULL)
			goto failure;

		if (!est && !gen_estimator_active(&police->tcf_rate_est)) {
		if (!est && (ret == ACT_P_CREATED ||
			     !gen_estimator_active(&police->tcf_bstats,
						   &police->tcf_rate_est))) {
			err = -EINVAL;
			goto failure;
		}