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: Eric Dumazet <edumazet@google.com> Cc: Alexei Starovoitov <ast@plumgrid.com> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Acked-by: John Fastabend <john.fastabend@gmail.com> Acked-by: Alexei Starovoitov <ast@plumgrid.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
0a6d424569
commit
24ea591d22
|
@ -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)
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
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);
|
||||||
|
|
Loading…
Reference in a new issue