lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20260205122758.1855422-1-chenjinghuang2@huawei.com>
Date: Thu, 5 Feb 2026 12:27:58 +0000
From: Chen Jinghuang <chenjinghuang2@...wei.com>
To: Ingo Molnar <mingo@...hat.com>, Peter Zijlstra <peterz@...radead.org>,
	Juri Lelli <juri.lelli@...hat.com>, Vincent Guittot
	<vincent.guittot@...aro.org>
CC: Dietmar Eggemann <dietmar.eggemann@....com>, Steven Rostedt
	<rostedt@...dmis.org>, Ben Segall <bsegall@...gle.com>, Mel Gorman
	<mgorman@...e.de>, Valentin Schneider <vschneid@...hat.com>,
	<linux-kernel@...r.kernel.org>
Subject: [PATCH] In cgroup v2, setting a smaller value for sched_rt_runtime_us fails.

For example:

	# cat /proc/sys/kernel/sched_rt_runtime_us
	950000
	# echo 940000 > /proc/sys/kernel/sched_rt_runtime_us
	-bash: echo: write error: Invalid argument

This occurs because when the global RT quota is reduced while the root
cgroup’s ratio remains unchanged, the root cgroup’s proportion ends up
exceeding the global RT ratio. This is unreasonable: the root cgroup’s
ratio should be updated when the global RT ratio changes.

This patch ensures the root cgroup’s RT quota is adjusted whenever the
global RT quota is modified.

Signed-off-by: Chen Ridong <chenridong@...wei.com>
Signed-off-by: Chen Jinghuang <chenjinghuang2@...wei.com>
---
 kernel/sched/rt.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index f1867fe8e5c5..30770ba7be4e 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -2814,9 +2814,11 @@ long sched_group_rt_period(struct task_group *tg)
 static int sched_rt_global_constraints(void)
 {
 	int ret = 0;
+	u64 period = global_rt_period();
+	u64 runtime = global_rt_runtime();
 
 	mutex_lock(&rt_constraints_mutex);
-	ret = __rt_schedulable(NULL, 0, 0);
+	ret = __rt_schedulable(&root_task_group, period, runtime);
 	mutex_unlock(&rt_constraints_mutex);
 
 	return ret;
@@ -2856,6 +2858,14 @@ static int sched_rt_global_validate(void)
 
 static void sched_rt_do_global(void)
 {
+#ifdef CONFIG_RT_GROUP_SCHED
+	if (!rt_group_sched_enabled())
+		return;
+
+	WARN_ON_ONCE(tg_set_rt_bandwidth(&root_task_group,
+					global_rt_period(),
+					global_rt_runtime()));
+#endif
 }
 
 static int sched_rt_handler(const struct ctl_table *table, int write, void *buffer,
-- 
2.34.1


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ