[<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