Re: [net-next PATCH 04/15] net: sched: provide per cpu qstat helpers
From: Eric Dumazet <hidden>
Date: 2016-08-23 23:26:12
On Tue, 2016-08-23 at 13:24 -0700, John Fastabend wrote:
quoted hunk ↗ jump to hunk
The per cpu qstats support was added with per cpu bstat support which is currently used by the ingress qdisc. This patch adds a set of helpers needed to make other qdiscs that use qstats per cpu as well. Signed-off-by: John Fastabend <redacted> --- include/net/sch_generic.h | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+)diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index 3de6a8c..f1b8268 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h@@ -565,12 +565,43 @@ static inline void qdisc_qstats_backlog_dec(struct Qdisc *sch, sch->qstats.backlog -= qdisc_pkt_len(skb); } +static inline void qdisc_qstats_cpu_backlog_dec(struct Qdisc *sch, + const struct sk_buff *skb) +{ + struct gnet_stats_queue *q = this_cpu_ptr(sch->cpu_qstats); + + q->backlog -= qdisc_pkt_len(skb);
Probably could use this_cpu_sub(sch->cpu_qstats->backlog, qdisc_pkt_len(skb))
+}
+
static inline void qdisc_qstats_backlog_inc(struct Qdisc *sch,
const struct sk_buff *skb)
{
sch->qstats.backlog += qdisc_pkt_len(skb);
}
+static inline void qdisc_qstats_cpu_backlog_inc(struct Qdisc *sch,
+ const struct sk_buff *skb)
+{
+ struct gnet_stats_queue *q = this_cpu_ptr(sch->cpu_qstats);
+
+ q->backlog += qdisc_pkt_len(skb);this_cpu_add(...)
+}
+
+static inline void qdisc_qstats_cpu_qlen_inc(struct Qdisc *sch)
+{
+ this_cpu_ptr(sch->cpu_qstats)->qlen++;this_cpu_inc(...)
+}
+
+static inline void qdisc_qstats_cpu_qlen_dec(struct Qdisc *sch)
+{
+ this_cpu_ptr(sch->cpu_qstats)->qlen--;this_cpu_dec(...)
+}
+
+static inline void qdisc_qstats_cpu_requeues_inc(struct Qdisc *sch)
+{
+ this_cpu_ptr(sch->cpu_qstats)->requeues++;this_cpu_inc(...)
+} +