net: sched: modify stats helper functions to support regular stats

Modify stats update helper functions introduced in previous patches in this
series to fallback to regular tc_action->tcfa_{b|q}stats if cpu stats are
not allocated for the action argument. If regular non-percpu allocated
counters are in use, then obtain action tcfa_lock while modifying them.

Signed-off-by: Vlad Buslov <vladbu@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Vlad Buslov
2019-10-30 16:09:04 +02:00
committed by David S. Miller
parent ef816f3c49
commit 5e174d5e73
2 changed files with 35 additions and 14 deletions

View File

@@ -992,14 +992,23 @@ err:
void tcf_action_update_stats(struct tc_action *a, u64 bytes, u32 packets,
bool drop, bool hw)
{
_bstats_cpu_update(this_cpu_ptr(a->cpu_bstats), bytes, packets);
if (a->cpu_bstats) {
_bstats_cpu_update(this_cpu_ptr(a->cpu_bstats), bytes, packets);
if (drop)
this_cpu_ptr(a->cpu_qstats)->drops += packets;
if (hw)
_bstats_cpu_update(this_cpu_ptr(a->cpu_bstats_hw),
bytes, packets);
return;
}
_bstats_update(&a->tcfa_bstats, bytes, packets);
if (drop)
this_cpu_ptr(a->cpu_qstats)->drops += packets;
a->tcfa_qstats.drops += packets;
if (hw)
_bstats_cpu_update(this_cpu_ptr(a->cpu_bstats_hw),
bytes, packets);
_bstats_update(&a->tcfa_bstats_hw, bytes, packets);
}
EXPORT_SYMBOL(tcf_action_update_stats);