mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 03:27:30 -04:00
net/sched: sch_ets: make cl->quantum lockless
cl->quantum does not need to be protected by RTNL or qdisc spinlock. Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Victor Nogueira <victor@mojatatu.com> Link: https://patch.msgid.link/20260522110356.1403343-1-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
061c0aa740
commit
0f700d144b
@@ -247,9 +247,7 @@ static int ets_class_change(struct Qdisc *sch, u32 classid, u32 parentid,
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
sch_tree_lock(sch);
|
||||
cl->quantum = quantum;
|
||||
sch_tree_unlock(sch);
|
||||
WRITE_ONCE(cl->quantum, quantum);
|
||||
|
||||
ets_offload_change(sch);
|
||||
return 0;
|
||||
@@ -320,7 +318,7 @@ static int ets_class_dump(struct Qdisc *sch, unsigned long arg,
|
||||
if (!nest)
|
||||
goto nla_put_failure;
|
||||
if (!ets_class_is_strict(q, cl)) {
|
||||
if (nla_put_u32(skb, TCA_ETS_QUANTA_BAND, cl->quantum))
|
||||
if (nla_put_u32(skb, TCA_ETS_QUANTA_BAND, READ_ONCE(cl->quantum)))
|
||||
goto nla_put_failure;
|
||||
}
|
||||
return nla_nest_end(skb, nest);
|
||||
@@ -445,7 +443,7 @@ static int ets_qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch,
|
||||
|
||||
if (!cl_is_active(cl) && !ets_class_is_strict(q, cl)) {
|
||||
list_add_tail(&cl->alist, &q->active);
|
||||
cl->deficit = cl->quantum;
|
||||
cl->deficit = READ_ONCE(cl->quantum);
|
||||
}
|
||||
|
||||
qstats_backlog_add(sch, len);
|
||||
@@ -499,7 +497,7 @@ static struct sk_buff *ets_qdisc_dequeue(struct Qdisc *sch)
|
||||
return ets_qdisc_dequeue_skb(sch, skb);
|
||||
}
|
||||
|
||||
cl->deficit += cl->quantum;
|
||||
cl->deficit += READ_ONCE(cl->quantum);
|
||||
list_move_tail(&cl->alist, &q->active);
|
||||
}
|
||||
out:
|
||||
|
||||
Reference in New Issue
Block a user