Commit 24ea591d authored by Eric Dumazet's avatar Eric Dumazet Committed by David S. Miller

net: sched: extend percpu stats helpers

qdisc_bstats_update_cpu() and other helpers were added to support
percpu stats for qdisc.

We want to add percpu stats for tc action, so this patch add common
helpers.

qdisc_bstats_update_cpu() is renamed to qdisc_bstats_cpu_update()
qdisc_qstats_drop_cpu() is renamed to qdisc_qstats_cpu_drop()
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Acked-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
Acked-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
Acked-by: default avatarAlexei Starovoitov <ast@plumgrid.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0a6d4245
...@@ -513,17 +513,20 @@ static inline void bstats_update(struct gnet_stats_basic_packed *bstats, ...@@ -513,17 +513,20 @@ static inline void bstats_update(struct gnet_stats_basic_packed *bstats,
bstats->packets += skb_is_gso(skb) ? skb_shinfo(skb)->gso_segs : 1; bstats->packets += skb_is_gso(skb) ? skb_shinfo(skb)->gso_segs : 1;
} }
static inline void qdisc_bstats_update_cpu(struct Qdisc *sch, static inline void bstats_cpu_update(struct gnet_stats_basic_cpu *bstats,
const struct sk_buff *skb) const struct sk_buff *skb)
{ {
struct gnet_stats_basic_cpu *bstats =
this_cpu_ptr(sch->cpu_bstats);
u64_stats_update_begin(&bstats->syncp); u64_stats_update_begin(&bstats->syncp);
bstats_update(&bstats->bstats, skb); bstats_update(&bstats->bstats, skb);
u64_stats_update_end(&bstats->syncp); u64_stats_update_end(&bstats->syncp);
} }
static inline void qdisc_bstats_cpu_update(struct Qdisc *sch,
const struct sk_buff *skb)
{
bstats_cpu_update(this_cpu_ptr(sch->cpu_bstats), skb);
}
static inline void qdisc_bstats_update(struct Qdisc *sch, static inline void qdisc_bstats_update(struct Qdisc *sch,
const struct sk_buff *skb) const struct sk_buff *skb)
{ {
...@@ -547,16 +550,24 @@ static inline void __qdisc_qstats_drop(struct Qdisc *sch, int count) ...@@ -547,16 +550,24 @@ static inline void __qdisc_qstats_drop(struct Qdisc *sch, int count)
sch->qstats.drops += count; sch->qstats.drops += count;
} }
static inline void qdisc_qstats_drop(struct Qdisc *sch) static inline void qstats_drop_inc(struct gnet_stats_queue *qstats)
{ {
sch->qstats.drops++; qstats->drops++;
} }
static inline void qdisc_qstats_drop_cpu(struct Qdisc *sch) static inline void qstats_overlimit_inc(struct gnet_stats_queue *qstats)
{ {
struct gnet_stats_queue *qstats = this_cpu_ptr(sch->cpu_qstats); qstats->overlimits++;
}
qstats->drops++; static inline void qdisc_qstats_drop(struct Qdisc *sch)
{
qstats_drop_inc(&sch->qstats);
}
static inline void qdisc_qstats_cpu_drop(struct Qdisc *sch)
{
qstats_drop_inc(this_cpu_ptr(sch->cpu_qstats));
} }
static inline void qdisc_qstats_overlimit(struct Qdisc *sch) static inline void qdisc_qstats_overlimit(struct Qdisc *sch)
......
...@@ -3646,7 +3646,7 @@ static inline struct sk_buff *handle_ing(struct sk_buff *skb, ...@@ -3646,7 +3646,7 @@ static inline struct sk_buff *handle_ing(struct sk_buff *skb,
qdisc_skb_cb(skb)->pkt_len = skb->len; qdisc_skb_cb(skb)->pkt_len = skb->len;
skb->tc_verd = SET_TC_AT(skb->tc_verd, AT_INGRESS); skb->tc_verd = SET_TC_AT(skb->tc_verd, AT_INGRESS);
qdisc_bstats_update_cpu(cl->q, skb); qdisc_bstats_cpu_update(cl->q, skb);
switch (tc_classify(skb, cl, &cl_res)) { switch (tc_classify(skb, cl, &cl_res)) {
case TC_ACT_OK: case TC_ACT_OK:
...@@ -3654,7 +3654,7 @@ static inline struct sk_buff *handle_ing(struct sk_buff *skb, ...@@ -3654,7 +3654,7 @@ static inline struct sk_buff *handle_ing(struct sk_buff *skb,
skb->tc_index = TC_H_MIN(cl_res.classid); skb->tc_index = TC_H_MIN(cl_res.classid);
break; break;
case TC_ACT_SHOT: case TC_ACT_SHOT:
qdisc_qstats_drop_cpu(cl->q); qdisc_qstats_cpu_drop(cl->q);
case TC_ACT_STOLEN: case TC_ACT_STOLEN:
case TC_ACT_QUEUED: case TC_ACT_QUEUED:
kfree_skb(skb); kfree_skb(skb);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment