linux/tools
Tao Cui 9b4243d304 sched_ext/scx_flatcg: Fix cvtime true-up on slice expiry
fcg_dispatch() true-ups the current cgroup's cvtime when its slice
expires or its DSQ runs empty while the slice is still active:

	__sync_fetch_and_add(&cgc->cvtime_delta,
			     (cpuc->cur_at + cgrp_slice_ns - now) *
			     FCG_HWEIGHT_ONE / (cgc->hweight ?: 1));

The true-up should be actual minus charged: on CNS_EXPIRE, the overrun
(now - cur_at - cgrp_slice_ns) should be added; on CNS_EMPTY, the
unused portion of the slice should be subtracted. The expression above
has the sign inverted, and in the CNS_EXPIRE case now is already past
cur_at + cgrp_slice_ns, so the u64 subtraction wraps. The
multiplication preserves the two's complement encoding but the
unsigned division by hweight destroys it, adding roughly 2^64/hweight
per expiry instead of a small correction.

Under saturation the hweight budget clamp in cgrp_cap_budget() masks
most of the garbage, so the weight distribution barely moves, but the
accounting is broken all the same. Compute the delta as a signed value
and use fetch_and_add()/fetch_and_sub() so that the dividends stay
positive, as BPF division is unsigned.

Instrumented the true-up and ran a saturated three-leaf cgroup tree on
a 4-CPU VM: without the fix, each expiry added ~5e15 (2^64/hweight
territory) to cvtime_delta; with it, the corrections are back to
slice scale, with the overrun added and the unused portion subtracted.

Fixes: a4103eacc2 ("sched_ext: Add a cgroup scheduler which uses flattened hierarchy")
Suggested-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Tao Cui <cuitao@kylinos.cn>
Signed-off-by: Tejun Heo <tj@kernel.org>
2026-08-14 23:50:47 -10:00
..
accounting tools/accounting/getdelays: fix -Wformat-truncation warning in format_timespec 2026-05-28 21:24:40 -07:00
arch perf tools changes for v7.2: 2026-06-23 11:34:49 -07:00
bootconfig Bootconfig updates for v7.2 2026-06-16 17:29:24 +05:30
bpf tools/bpf: build: Append extra cflags 2026-06-14 17:32:53 -07:00
build perf tools changes for v7.2: 2026-06-23 11:34:49 -07:00
certs
cgroup
counter
crypto
debugging
dma
docs
firewire
firmware
gpio
hv
iio iio: core: Add IIO_COVERAGE channel type 2026-05-31 11:01:50 +01:00
include bpf-next-7.2 2026-06-17 09:18:14 +01:00
kvm/kvm_stat
laptop
leds
lib perf tools changes for v7.2: 2026-06-23 11:34:49 -07:00
memory-model
mm slab changes for 7.2 - part 2 2026-06-22 08:28:48 -07:00
net tools: ynl: try to avoid the very slow YAML loader 2026-06-04 15:36:12 -07:00
objtool
pcmcia
perf perf tools changes for v7.2: 2026-06-23 11:34:49 -07:00
power platform-drivers-x86 for v7.2-1 2026-06-23 08:31:33 -07:00
rcu
sched
sched_ext sched_ext/scx_flatcg: Fix cvtime true-up on slice expiry 2026-08-14 23:50:47 -10:00
scripts
sound
spi
testing selftests/sched_ext: Fix flaky ddsp failure tests on busy systems 2026-08-14 12:32:23 -10:00
thermal
time
tracing rtla: Fix parsing of multi-character short options 2026-06-04 10:53:25 +02:00
unittests
usb
verification verification/rvgen: Fix ltl2k writing True as a literal 2026-06-04 16:44:25 +02:00
virtio tools/virtio: fix build for kmalloc_obj API and missing stubs 2026-06-10 02:16:59 -04:00
wmi
workqueue
writeback
Makefile