On 16-08-17 12:38 PM, John Fastabend wrote:
> The sch_mq qdisc creates a sub-qdisc per tx queue which are then
> called independently for enqueue and dequeue operations. However
> statistics are aggregated and pushed up to the "master" qdisc.
> 
> This patch adds support for any of the sub-qdiscs to be per cpu
> statistic qdiscs. To handle this case add a check when calculating
> stats and aggregate the per cpu stats if needed.
> 
> Also exports __gnet_stats_copy_queue() to use as a helper function.
> 
> Signed-off-by: John Fastabend <john.r.fastab...@intel.com>
> ---

[...]

> +             if (qdisc_is_percpu_stats(qdisc)) {
> +                     cpu_bstats = qdisc->cpu_bstats;
> +                     cpu_qstats = qdisc->cpu_qstats;
> +             }
> +
> +             qlen = qdisc_qlen_sum(qdisc);
> +
> +             __gnet_stats_copy_basic(NULL, &sch->bstats,
> +                                     cpu_bstats, &qdisc->bstats);
> +             __gnet_stats_copy_queue(&sch->qstats,
> +                                     cpu_qstats, &qdisc->qstats, qlen);


And also I forgot to bump this onto the atomic qlen and it is still
using the per cpu counters giving the incorrect qlen total.

Reply via email to