From: Konstantin Khorenko <khorenko@virtuozzo.com>
Subject: [Devel] [PATCH RHEL10 COMMIT] sched/loadavg: fix build with CONFIG_CGROUP_SCHED=n
Date: Thu, 20 Aug 2026 18:57:16 +0200 [thread overview]
Message-ID: <202608201657.67KGvGOf829038@hci8VM.finist.virtuozzo.com> (raw)
In-Reply-To: <20260625220832.2201873-1-eva.kurchatova@virtuozzo.com>
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 f869ffa52901a2949cf1554e573e3500b9f85f32
Author: Eva Kurchatova <eva.kurchatova@virtuozzo.com>
Date: Thu Aug 20 18:42:45 2026 +0200
sched/loadavg: fix build with CONFIG_CGROUP_SCHED=n
get_avenrun_tg() dereferences struct task_group, which is only defined
under CONFIG_CGROUP_SCHED in kernel/sched/sched.h. Both the function
and its unconditional caller are compiled regardless of that option:
kernel/sched/loadavg.c is pulled into build_utility.c, and do_sysinfo()
calls get_avenrun_tg() from a branch that is dead at runtime with
CONFIG_VE=n but still compiled. So CONFIG_CGROUP_SCHED=n does not
build:
kernel/sched/loadavg.c: error: invalid use of undefined type
'struct task_group'
Compile get_avenrun_tg() only when CONFIG_CGROUP_SCHED is enabled and
provide a stub otherwise. The stub returns -ENOSYS, the same error the
real implementation returns when there is no per-Container task group to
report. do_sysinfo() ignores the return value and info->loads is
already zeroed by memset(), so no caller has to change.
calc_load_ve() walks the very same task_group internals, so require
CONFIG_CGROUP_SCHED there as well instead of relying on CONFIG_VE
selecting it.
Fixes: c80eee4588ff ("ve/sched/loadavg: Calculate avenrun for Containers root cpu cgroups")
Feature: statistics: loadavg virtualization
https://virtuozzo.atlassian.net/browse/VSTOR-134732
Signed-off-by: Eva Kurchatova <eva.kurchatova@virtuozzo.com>
---
include/linux/sched/loadavg.h | 11 ++++++++++-
kernel/sched/loadavg.c | 6 ++++--
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/include/linux/sched/loadavg.h b/include/linux/sched/loadavg.h
index 771e753e4670..b97635dc47d4 100644
--- a/include/linux/sched/loadavg.h
+++ b/include/linux/sched/loadavg.h
@@ -2,6 +2,7 @@
#ifndef _LINUX_SCHED_LOADAVG_H
#define _LINUX_SCHED_LOADAVG_H
+#include <linux/errno.h>
#include <linux/types.h>
/*
@@ -18,8 +19,16 @@ extern unsigned long avenrun[]; /* Load averages */
extern void get_avenrun(unsigned long *loads, unsigned long offset, int shift);
struct task_group;
+#ifdef CONFIG_CGROUP_SCHED
extern int get_avenrun_tg(struct task_group *tg, unsigned long *loads,
unsigned long offset, int shift);
+#else
+static inline int get_avenrun_tg(struct task_group *tg, unsigned long *loads,
+ unsigned long offset, int shift)
+{
+ return -ENOSYS;
+}
+#endif
#define FSHIFT 11 /* nr of bits of precision */
#define FIXED_1 (1<<FSHIFT) /* 1.0 as fixed-point */
@@ -51,7 +60,7 @@ extern unsigned long calc_load_n(unsigned long load, unsigned long exp,
extern bool calc_global_load(void);
-#ifdef CONFIG_VE
+#if defined(CONFIG_VE) && defined(CONFIG_CGROUP_SCHED)
extern void calc_load_ve(void);
#else
#define calc_load_ve() do { } while (0)
diff --git a/kernel/sched/loadavg.c b/kernel/sched/loadavg.c
index bc0b6bcdae2d..2f66772750ea 100644
--- a/kernel/sched/loadavg.c
+++ b/kernel/sched/loadavg.c
@@ -78,6 +78,7 @@ void get_avenrun(unsigned long *loads, unsigned long offset, int shift)
loads[2] = (avenrun[2] + offset) << shift;
}
+#ifdef CONFIG_CGROUP_SCHED
int get_avenrun_tg(struct task_group *tg, unsigned long *loads,
unsigned long offset, int shift)
{
@@ -93,6 +94,7 @@ int get_avenrun_tg(struct task_group *tg, unsigned long *loads,
return 0;
}
+#endif /* CONFIG_CGROUP_SCHED */
long calc_load_fold_active(struct rq *this_rq, long adjust)
{
@@ -109,7 +111,7 @@ long calc_load_fold_active(struct rq *this_rq, long adjust)
return delta;
}
-#ifdef CONFIG_VE
+#if defined(CONFIG_VE) && defined(CONFIG_CGROUP_SCHED)
extern struct list_head ve_root_list;
extern raw_spinlock_t load_ve_lock;
@@ -166,7 +168,7 @@ void calc_load_ve(void)
kstat_glob.nr_unint_avg[2] = calc_load(kstat_glob.nr_unint_avg[2], EXP_15, nr_unint);
write_seqcount_end(&kstat_glob.nr_unint_avg_seq);
}
-#endif /* CONFIG_VE */
+#endif /* CONFIG_VE && CONFIG_CGROUP_SCHED */
/**
* fixed_power_int - compute: x^n, in O(log n) time
next parent reply other threads:[~2026-08-20 16:57 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20260625220832.2201873-1-eva.kurchatova@virtuozzo.com>
2026-08-20 16:57 ` Konstantin Khorenko [this message]
2026-08-20 16:57 ` [Devel] [PATCH RHEL10 COMMIT] sched/core: guard cpu_cgrp_subsys.depends_on with CONFIG_CGROUP_CPUACCT Konstantin Khorenko
2026-08-20 16:57 ` [Devel] [PATCH RHEL10 COMMIT] sched: move MAX_CPU_RATE out of CONFIG_CFS_CPULIMIT Konstantin Khorenko
2026-08-20 16:57 ` [Devel] [PATCH RHEL10 COMMIT] sched/cpuacct: guard ve_root_tg() with CONFIG_CFS_CPULIMIT Konstantin Khorenko
[not found] ` <20260625220832.2201873-2-eva.kurchatova@virtuozzo.com>
2026-08-21 14:03 ` [Devel] [PATCH vz10 02/14] mm: fix VZ build errors with CONFIG_MEMCG=n Konstantin Khorenko
2026-08-21 16:48 ` [Devel] [PATCH vz10 01/14] sched: fix VZ build errors with CONFIG_CGROUP_SCHED=n Konstantin Khorenko
2026-08-21 16:36 [Devel] [PATCH vz10 01/32] sched/loadavg: fix build " Konstantin Khorenko
2026-08-21 16:42 ` [Devel] [PATCH RHEL10 COMMIT] " Konstantin Khorenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202608201657.67KGvGOf829038@hci8VM.finist.virtuozzo.com \
--to=khorenko@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.