From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konstantin Khorenko Date: Thu, 20 Aug 2026 18:57:42 +0200 Subject: [Devel] [PATCH RHEL10 COMMIT] sched: move MAX_CPU_RATE out of CONFIG_CFS_CPULIMIT In-Reply-To: <20260625220832.2201873-1-eva.kurchatova@virtuozzo.com> Message-ID: <202608201657.67KGvgRP829119@hci8VM.finist.virtuozzo.com> List-Id: 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 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 Signed-off-by: Konstantin Khorenko --- 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