[Devel] [PATCH RHEL10 COMMIT] sched: move MAX_CPU_RATE out of CONFIG_CFS_CPULIMIT
Konstantin Khorenko
khorenko at virtuozzo.com
Thu Aug 20 19:57:42 MSK 2026
The commit is pushed to "branch-rh10-6.12.0-211.39.1.16.x.vz10-ovz" and will appear at git at bitbucket.org:openvz/vzkernel.git
after rh10-6.12.0-211.39.1.16.6.vz10
------>
commit 6ced1cd98dfd43facb3c9de5019ebc25fd7d25fb
Author: Eva Kurchatova <eva.kurchatova at virtuozzo.com>
Date: Thu Aug 20 18:43:16 2026 +0200
sched: move MAX_CPU_RATE out of CONFIG_CFS_CPULIMIT
MAX_CPU_RATE is the scale of task_group::cpu_rate, but it was defined in
the middle of the body of struct task_group, inside the block guarded by
CONFIG_CFS_CPULIMIT. cpu_cgroup_update_vcpustat() uses it to normalize
the per-vcpu usage reported in a Container's /proc/stat, and that code is
compiled unconditionally, so CONFIG_CFS_CPULIMIT=n does not build:
kernel/sched/cpuacct.c: error: 'MAX_CPU_RATE' undeclared
(first use in this function)
x86_64 defconfig is exactly such a configuration: CONFIG_VE defaults to
y, while CONFIG_CFS_BANDWIDTH - the only thing that selects
CONFIG_CFS_CPULIMIT - is off.
Move the definition out of the struct and out of the ifdef. Nothing
else in cpu_cgroup_update_vcpustat() needs CONFIG_CFS_CPULIMIT:
tg_cpu_rate() and tg_nr_cpus() already degrade to "no limit configured",
so the vcpustat calculation keeps working and a Container simply gets
num_online_cpus() vcpus running at full rate. Compiling the calculation
out instead would leave tg->vcpustat all zeroes, and /proc/stat inside a
Container would report no CPU time at all.
Fixes: 4e99efb641da ("sched: Port CONFIG_CFS_CPULIMIT feature")
Feature: sched: ability to limit number of CPUs available to a CT
https://virtuozzo.atlassian.net/browse/VSTOR-134732
Signed-off-by: Eva Kurchatova <eva.kurchatova at virtuozzo.com>
Signed-off-by: Konstantin Khorenko <khorenko at virtuozzo.com>
---
kernel/sched/sched.h | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index 1a8a0ff522cb..2a3f73933456 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -533,12 +533,19 @@ struct task_group {
#endif
#ifdef CONFIG_CFS_CPULIMIT
-#define MAX_CPU_RATE 1024
unsigned long cpu_rate;
unsigned int nr_cpus;
#endif
};
+/*
+ * The scale of task_group::cpu_rate: 1024 means one full CPU. It is also
+ * used to normalize the per-vcpu usage reported in a Container's /proc/stat,
+ * which is done regardless of CONFIG_CFS_CPULIMIT, so keep the definition
+ * unconditional.
+ */
+#define MAX_CPU_RATE 1024
+
#ifdef CONFIG_GROUP_SCHED_WEIGHT
#define ROOT_TASK_GROUP_LOAD NICE_0_LOAD
More information about the Devel
mailing list