* [PATCH v2 1/3] sched/fair: Remove the write-order dependency between cpu.max and cpu.max.burst [not found] ` <20260904062013.504236-1-liuzhe1@kylinos.cn> @ 2026-09-04 6:20 ` Zhe Liu 2026-09-04 9:21 ` Tao Cui 2026-09-07 14:06 ` Michal Koutný 0 siblings, 2 replies; 5+ messages in thread From: Zhe Liu @ 2026-09-04 6:20 UTC (permalink / raw) To: mkoutny Cc: bsegall, cgroups, corbet, dietmar.eggemann, hannes, juri.lelli, kprateek.nayak, linux-doc, linux-kernel, linux-kselftest, liuzhe1, mgorman, mingo, peterz, rostedt, skhan, tj, vincent.guittot, vschneid, stable Keep the configured burst independent of the current quota and cap it when CFS refills runtime. This allows quota and burst updates in either order. Fixes: f4183717b370 ("sched/fair: Introduce the burstable CFS controller") Cc: stable@vger.kernel.org Signed-off-by: Zhe Liu <liuzhe1@kylinos.cn> --- kernel/sched/core.c | 3 +-- kernel/sched/fair.c | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index f78275192036..5269b8cfcf7f 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -10159,8 +10159,7 @@ static int tg_set_bandwidth(struct task_group *tg, if (quota_us != RUNTIME_INF && quota_us > max_bw_runtime_us) return -EINVAL; - if (quota_us != RUNTIME_INF && (burst_us > quota_us || - burst_us + quota_us > max_bw_runtime_us)) + if (burst_us > max_bw_runtime_us) return -EINVAL; #ifdef CONFIG_CFS_BANDWIDTH diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 6d881e530f89..488de18d477e 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -6627,7 +6627,8 @@ void __refill_cfs_bandwidth_runtime(struct cfs_bandwidth *cfs_b) cfs_b->nr_burst++; } - cfs_b->runtime = min(cfs_b->runtime, cfs_b->quota + cfs_b->burst); + cfs_b->runtime = min(cfs_b->runtime, + cfs_b->quota + min(cfs_b->burst, cfs_b->quota)); cfs_b->runtime_snap = cfs_b->runtime; } -- 2.25.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/3] sched/fair: Remove the write-order dependency between cpu.max and cpu.max.burst 2026-09-04 6:20 ` [PATCH v2 1/3] sched/fair: Remove the write-order dependency between cpu.max and cpu.max.burst Zhe Liu @ 2026-09-04 9:21 ` Tao Cui 2026-09-07 14:06 ` Michal Koutný 1 sibling, 0 replies; 5+ messages in thread From: Tao Cui @ 2026-09-04 9:21 UTC (permalink / raw) To: Zhe Liu, mkoutny Cc: cui.tao, bsegall, cgroups, corbet, dietmar.eggemann, hannes, juri.lelli, kprateek.nayak, linux-doc, linux-kernel, linux-kselftest, mgorman, mingo, peterz, rostedt, skhan, tj, vincent.guittot, vschneid, stable Hi, Zhe, 在 2026/9/4 14:20, Zhe Liu 写道: > Keep the configured burst independent of the current quota and cap it > when CFS refills runtime. This allows quota and burst updates in either > order. > Ran the selftests on next-20260903 in a VM: all 10 test_cpu cases pass with the series applied, and test_cpucg_max_burst fails on the unpatched kernel, so the test does catch the old behavior. One problem (spotted by sashiko, an automated overflow checker; I re-did the arithmetic): dropping the burst_us + quota_us <= max_bw_runtime_us check is not safe. With quota and burst both near MAX_BW, the period-scaling path in sched_cfs_period_timer() can double both up to 512x, and the new clamp quota + min(burst, quota) in __refill_cfs_bandwidth_runtime() then wraps u64 to 0, leaving the group with zero runtime on every refill. I believe you can just drop the burst_us > quota_us comparison and keep the sum check. Both write-order cases still pass that way: burst=80ms with quota=50ms gives 130ms, well under the limit. Tested-by: Tao Cui <cuitao@kylinos.cn> > Fixes: f4183717b370 ("sched/fair: Introduce the burstable CFS controller") > > Cc: stable@vger.kernel.org > Signed-off-by: Zhe Liu <liuzhe1@kylinos.cn> > --- > kernel/sched/core.c | 3 +-- > kernel/sched/fair.c | 3 ++- > 2 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index f78275192036..5269b8cfcf7f 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -10159,8 +10159,7 @@ static int tg_set_bandwidth(struct task_group *tg, > if (quota_us != RUNTIME_INF && quota_us > max_bw_runtime_us) > return -EINVAL; > > - if (quota_us != RUNTIME_INF && (burst_us > quota_us || > - burst_us + quota_us > max_bw_runtime_us)) > + if (burst_us > max_bw_runtime_us) > return -EINVAL; > > #ifdef CONFIG_CFS_BANDWIDTH > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index 6d881e530f89..488de18d477e 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -6627,7 +6627,8 @@ void __refill_cfs_bandwidth_runtime(struct cfs_bandwidth *cfs_b) > cfs_b->nr_burst++; > } > > - cfs_b->runtime = min(cfs_b->runtime, cfs_b->quota + cfs_b->burst); > + cfs_b->runtime = min(cfs_b->runtime, > + cfs_b->quota + min(cfs_b->burst, cfs_b->quota)); > cfs_b->runtime_snap = cfs_b->runtime; > } > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2 1/3] sched/fair: Remove the write-order dependency between cpu.max and cpu.max.burst 2026-09-04 6:20 ` [PATCH v2 1/3] sched/fair: Remove the write-order dependency between cpu.max and cpu.max.burst Zhe Liu 2026-09-04 9:21 ` Tao Cui @ 2026-09-07 14:06 ` Michal Koutný 1 sibling, 0 replies; 5+ messages in thread From: Michal Koutný @ 2026-09-07 14:06 UTC (permalink / raw) To: Zhe Liu Cc: bsegall, cgroups, corbet, dietmar.eggemann, hannes, juri.lelli, kprateek.nayak, linux-doc, linux-kernel, linux-kselftest, mgorman, mingo, peterz, rostedt, skhan, tj, vincent.guittot, vschneid, stable [-- Attachment #1: Type: text/plain, Size: 1735 bytes --] On Fri, Sep 04, 2026 at 02:20:11PM +0800, Zhe Liu <liuzhe1@kylinos.cn> wrote: > Keep the configured burst independent of the current quota and cap it > when CFS refills runtime. This allows quota and burst updates in either > order. > > Fixes: f4183717b370 ("sched/fair: Introduce the burstable CFS controller") > > Cc: stable@vger.kernel.org The change makes sense to me and it should've been like that from the beginning. OTOH, it may break someone's setup, so I'd take it but revert it should regressions be reported. Hence, I wouldn't mark it for stable. > Signed-off-by: Zhe Liu <liuzhe1@kylinos.cn> > --- > kernel/sched/core.c | 3 +-- > kernel/sched/fair.c | 3 ++- > 2 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index f78275192036..5269b8cfcf7f 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -10159,8 +10159,7 @@ static int tg_set_bandwidth(struct task_group *tg, > if (quota_us != RUNTIME_INF && quota_us > max_bw_runtime_us) > return -EINVAL; > > - if (quota_us != RUNTIME_INF && (burst_us > quota_us || > - burst_us + quota_us > max_bw_runtime_us)) > + if (burst_us > max_bw_runtime_us) > return -EINVAL; I notice this'd be relaxed rather like: if (burst_us > max_bw_runtime_us / 2) return -EINVAL; I don't see in the current code that these BW_SHIFT'd calculations were relevant for burst. (Sashiko mentions overflows of the addition but I think it's confused MAX_BW and UULONG_MAX or more precisely (UULONG_MAX / NSEC_PER_USEC),) so even your version should still be safe. (Without that stable annotation above.) Reviewed-by: Michal Koutný <mkoutny@suse.com> [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 265 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <20260904060630.486691-1-liuzhe1@kylinos.cn>]
* [PATCH v2 1/3] sched/fair: Remove the write-order dependency between cpu.max and cpu.max.burst [not found] <20260904060630.486691-1-liuzhe1@kylinos.cn> @ 2026-09-04 6:06 ` Zhe Liu 0 siblings, 0 replies; 5+ messages in thread From: Zhe Liu @ 2026-09-04 6:06 UTC (permalink / raw) To: lzlzzz548943; +Cc: Zhe Liu, stable Keep the configured burst independent of the current quota and cap it when CFS refills runtime. This allows quota and burst updates in either order. Fixes: f4183717b370 ("sched/fair: Introduce the burstable CFS controller") Cc: stable@vger.kernel.org Signed-off-by: Zhe Liu <liuzhe1@kylinos.cn> --- kernel/sched/core.c | 3 +-- kernel/sched/fair.c | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index f78275192036..5269b8cfcf7f 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -10159,8 +10159,7 @@ static int tg_set_bandwidth(struct task_group *tg, if (quota_us != RUNTIME_INF && quota_us > max_bw_runtime_us) return -EINVAL; - if (quota_us != RUNTIME_INF && (burst_us > quota_us || - burst_us + quota_us > max_bw_runtime_us)) + if (burst_us > max_bw_runtime_us) return -EINVAL; #ifdef CONFIG_CFS_BANDWIDTH diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 6d881e530f89..488de18d477e 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -6627,7 +6627,8 @@ void __refill_cfs_bandwidth_runtime(struct cfs_bandwidth *cfs_b) cfs_b->nr_burst++; } - cfs_b->runtime = min(cfs_b->runtime, cfs_b->quota + cfs_b->burst); + cfs_b->runtime = min(cfs_b->runtime, + cfs_b->quota + min(cfs_b->burst, cfs_b->quota)); cfs_b->runtime_snap = cfs_b->runtime; } -- 2.25.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
[parent not found: <20260904060004.478785-1-liuzhe1@kylinos.cn>]
* [PATCH v2 1/3] sched/fair: Remove the write-order dependency between cpu.max and cpu.max.burst [not found] <20260904060004.478785-1-liuzhe1@kylinos.cn> @ 2026-09-04 6:00 ` Zhe Liu 0 siblings, 0 replies; 5+ messages in thread From: Zhe Liu @ 2026-09-04 6:00 UTC (permalink / raw) To: liuzhe1; +Cc: stable Keep the configured burst independent of the current quota and cap it when CFS refills runtime. This allows quota and burst updates in either order. Fixes: f4183717b370 ("sched/fair: Introduce the burstable CFS controller") Cc: stable@vger.kernel.org Signed-off-by: Zhe Liu <liuzhe1@kylinos.cn> --- kernel/sched/core.c | 3 +-- kernel/sched/fair.c | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index f78275192036..5269b8cfcf7f 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -10159,8 +10159,7 @@ static int tg_set_bandwidth(struct task_group *tg, if (quota_us != RUNTIME_INF && quota_us > max_bw_runtime_us) return -EINVAL; - if (quota_us != RUNTIME_INF && (burst_us > quota_us || - burst_us + quota_us > max_bw_runtime_us)) + if (burst_us > max_bw_runtime_us) return -EINVAL; #ifdef CONFIG_CFS_BANDWIDTH diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 6d881e530f89..488de18d477e 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -6627,7 +6627,8 @@ void __refill_cfs_bandwidth_runtime(struct cfs_bandwidth *cfs_b) cfs_b->nr_burst++; } - cfs_b->runtime = min(cfs_b->runtime, cfs_b->quota + cfs_b->burst); + cfs_b->runtime = min(cfs_b->runtime, + cfs_b->quota + min(cfs_b->burst, cfs_b->quota)); cfs_b->runtime_snap = cfs_b->runtime; } -- 2.25.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-09-07 14:06 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <aobnZEh1hfIBhswD@localhost.localdomain>
[not found] ` <20260904062013.504236-1-liuzhe1@kylinos.cn>
2026-09-04 6:20 ` [PATCH v2 1/3] sched/fair: Remove the write-order dependency between cpu.max and cpu.max.burst Zhe Liu
2026-09-04 9:21 ` Tao Cui
2026-09-07 14:06 ` Michal Koutný
[not found] <20260904060630.486691-1-liuzhe1@kylinos.cn>
2026-09-04 6:06 ` Zhe Liu
[not found] <20260904060004.478785-1-liuzhe1@kylinos.cn>
2026-09-04 6:00 ` Zhe Liu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox