net: sched: make bstats per cpu and estimator RCU safe
In order to run qdisc's without locking statistics and estimators need to be handled correctly. To resolve bstats make the statistics per cpu. And because this is only needed for qdiscs that are running without locks which is not the case for most qdiscs in the near future only create percpu stats when qdiscs set the TCQ_F_CPUSTATS flag. Next because estimators use the bstats to calculate packets per second and bytes per second the estimator code paths are updated to use the per cpu statistics. Signed-off-by: John Fastabend <john.r.fastabend@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
79cf79abce
commit
22e0f8b932
@@ -252,7 +252,8 @@ int tcf_hash_create(u32 index, struct nlattr *est, struct tc_action *a,
|
||||
p->tcfc_tm.install = jiffies;
|
||||
p->tcfc_tm.lastuse = jiffies;
|
||||
if (est) {
|
||||
int err = gen_new_estimator(&p->tcfc_bstats, &p->tcfc_rate_est,
|
||||
int err = gen_new_estimator(&p->tcfc_bstats, NULL,
|
||||
&p->tcfc_rate_est,
|
||||
&p->tcfc_lock, est);
|
||||
if (err) {
|
||||
kfree(p);
|
||||
@@ -619,7 +620,7 @@ int tcf_action_copy_stats(struct sk_buff *skb, struct tc_action *a,
|
||||
if (err < 0)
|
||||
goto errout;
|
||||
|
||||
if (gnet_stats_copy_basic(&d, &p->tcfc_bstats) < 0 ||
|
||||
if (gnet_stats_copy_basic(&d, NULL, &p->tcfc_bstats) < 0 ||
|
||||
gnet_stats_copy_rate_est(&d, &p->tcfc_bstats,
|
||||
&p->tcfc_rate_est) < 0 ||
|
||||
gnet_stats_copy_queue(&d, &p->tcfc_qstats) < 0)
|
||||
|
Reference in New Issue
Block a user