mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
Merge branch 'net-sched-sch_drr-lockless-cl-deficit-and-cl-quantum'
Eric Dumazet says: ==================== net/sched: sch_drr: lockless cl->deficit and cl->quantum First patch adds missing annotations around cl->deficit. Second patch makes cl->quantum lockless, to prepare future lockless qdisc dumps. ==================== Link: https://patch.msgid.link/20260519094618.2632073-1-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
0d8ba909a9
|
|
@ -97,10 +97,8 @@ static int drr_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
|
|||
}
|
||||
}
|
||||
|
||||
sch_tree_lock(sch);
|
||||
if (tb[TCA_DRR_QUANTUM])
|
||||
cl->quantum = quantum;
|
||||
sch_tree_unlock(sch);
|
||||
WRITE_ONCE(cl->quantum, quantum);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -251,7 +249,7 @@ static int drr_dump_class(struct Qdisc *sch, unsigned long arg,
|
|||
nest = nla_nest_start_noflag(skb, TCA_OPTIONS);
|
||||
if (nest == NULL)
|
||||
goto nla_put_failure;
|
||||
if (nla_put_u32(skb, TCA_DRR_QUANTUM, cl->quantum))
|
||||
if (nla_put_u32(skb, TCA_DRR_QUANTUM, READ_ONCE(cl->quantum)))
|
||||
goto nla_put_failure;
|
||||
return nla_nest_end(skb, nest);
|
||||
|
||||
|
|
@ -270,7 +268,7 @@ static int drr_dump_class_stats(struct Qdisc *sch, unsigned long arg,
|
|||
|
||||
memset(&xstats, 0, sizeof(xstats));
|
||||
if (qlen)
|
||||
xstats.deficit = cl->deficit;
|
||||
xstats.deficit = READ_ONCE(cl->deficit);
|
||||
|
||||
if (gnet_stats_copy_basic(d, NULL, &cl->bstats, true) < 0 ||
|
||||
gnet_stats_copy_rate_est(d, &cl->rate_est) < 0 ||
|
||||
|
|
@ -362,7 +360,7 @@ static int drr_enqueue(struct sk_buff *skb, struct Qdisc *sch,
|
|||
|
||||
if (!cl_is_active(cl)) {
|
||||
list_add_tail(&cl->alist, &q->active);
|
||||
cl->deficit = cl->quantum;
|
||||
WRITE_ONCE(cl->deficit, READ_ONCE(cl->quantum));
|
||||
}
|
||||
|
||||
qstats_backlog_add(sch, len);
|
||||
|
|
@ -389,7 +387,7 @@ static struct sk_buff *drr_dequeue(struct Qdisc *sch)
|
|||
|
||||
len = qdisc_pkt_len(skb);
|
||||
if (len <= cl->deficit) {
|
||||
cl->deficit -= len;
|
||||
WRITE_ONCE(cl->deficit, cl->deficit - len);
|
||||
skb = qdisc_dequeue_peeked(cl->qdisc);
|
||||
if (unlikely(skb == NULL))
|
||||
goto out;
|
||||
|
|
@ -403,7 +401,7 @@ static struct sk_buff *drr_dequeue(struct Qdisc *sch)
|
|||
return skb;
|
||||
}
|
||||
|
||||
cl->deficit += cl->quantum;
|
||||
WRITE_ONCE(cl->deficit, cl->deficit + READ_ONCE(cl->quantum));
|
||||
list_move_tail(&cl->alist, &q->active);
|
||||
}
|
||||
out:
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user