Commit a6c95b83 authored by Eric Dumazet's avatar Eric Dumazet Committed by Jakub Kicinski
Browse files

net/sched: sch_cake: annotate data-races in cake_dump_stats() (V)



cake_dump_stats() runs without qdisc spinlock being held.

In this final patch, I add READ_ONCE()/WRITE_ONCE() annotations
for cparams.target and cparams.interval.

Fixes: 046f6fd5 ("sched: Add Common Applications Kept Enhanced (cake) qdisc")
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Acked-by: default avatar"Toke Høiland-Jørgensen" <toke@toke.dk>
Link: https://patch.msgid.link/20260427083606.459355-6-edumazet@google.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 8fab48d8
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -2356,10 +2356,11 @@ static void cake_set_rate(struct cake_tin_data *b, u64 rate, u32 mtu,

	byte_target_ns = (byte_target * rate_ns) >> rate_shft;

	b->cparams.target = max((byte_target_ns * 3) / 2, target_ns);
	b->cparams.interval = max(rtt_est_ns +
				     b->cparams.target - target_ns,
				     b->cparams.target * 2);
	WRITE_ONCE(b->cparams.target,
		   max((byte_target_ns * 3) / 2, target_ns));
	WRITE_ONCE(b->cparams.interval,
		   max(rtt_est_ns + b->cparams.target - target_ns,
		       b->cparams.target * 2));
	b->cparams.mtu_time = byte_target_ns;
	b->cparams.p_inc = 1 << 24; /* 1/256 */
	b->cparams.p_dec = 1 << 20; /* 1/4096 */
@@ -3042,9 +3043,9 @@ static int cake_dump_stats(struct Qdisc *sch, struct gnet_dump *d)
		PUT_TSTAT_U32(BACKLOG_BYTES, READ_ONCE(b->tin_backlog));

		PUT_TSTAT_U32(TARGET_US,
			      ktime_to_us(ns_to_ktime(b->cparams.target)));
			      ktime_to_us(ns_to_ktime(READ_ONCE(b->cparams.target))));
		PUT_TSTAT_U32(INTERVAL_US,
			      ktime_to_us(ns_to_ktime(b->cparams.interval)));
			      ktime_to_us(ns_to_ktime(READ_ONCE(b->cparams.interval))));

		PUT_TSTAT_U32(SENT_PACKETS, READ_ONCE(b->packets));
		PUT_TSTAT_U32(DROPPED_PACKETS, READ_ONCE(b->tin_dropped));