2
0
mirror of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-09-04 20:19:47 +08:00

sched: Add commadline option for RT_GROUP_SCHED toggling

Only simple implementation with a static key wrapper, it will be wired
in later.

Signed-off-by: Michal Koutný <mkoutny@suse.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20250310170442.504716-5-mkoutny@suse.com
This commit is contained in:
Michal Koutný 2025-03-10 18:04:36 +01:00 committed by Peter Zijlstra
parent a5a25b32c0
commit e34e0131fe
4 changed files with 58 additions and 0 deletions

View File

@ -6280,6 +6280,11 @@
Memory area to be used by remote processor image, Memory area to be used by remote processor image,
managed by CMA. managed by CMA.
rt_group_sched= [KNL] Enable or disable SCHED_RR/FIFO group scheduling
when CONFIG_RT_GROUP_SCHED=y. Defaults to
!CONFIG_RT_GROUP_SCHED_DEFAULT_DISABLED.
Format: <bool>
rw [KNL] Mount root device read-write on boot rw [KNL] Mount root device read-write on boot
S [KNL] Run init in single mode S [KNL] Run init in single mode

View File

@ -1082,6 +1082,17 @@ config RT_GROUP_SCHED
realtime bandwidth for them. realtime bandwidth for them.
See Documentation/scheduler/sched-rt-group.rst for more information. See Documentation/scheduler/sched-rt-group.rst for more information.
config RT_GROUP_SCHED_DEFAULT_DISABLED
bool "Require boot parameter to enable group scheduling for SCHED_RR/FIFO"
depends on RT_GROUP_SCHED
default n
help
When set, the RT group scheduling is disabled by default. The option
is in inverted form so that mere RT_GROUP_SCHED enables the group
scheduling.
Say N if unsure.
config EXT_GROUP_SCHED config EXT_GROUP_SCHED
bool bool
depends on SCHED_CLASS_EXT && CGROUP_SCHED depends on SCHED_CLASS_EXT && CGROUP_SCHED

View File

@ -9892,6 +9892,31 @@ static struct cftype cpu_legacy_files[] = {
{ } /* Terminate */ { } /* Terminate */
}; };
#ifdef CONFIG_RT_GROUP_SCHED
# ifdef CONFIG_RT_GROUP_SCHED_DEFAULT_DISABLED
DEFINE_STATIC_KEY_FALSE(rt_group_sched);
# else
DEFINE_STATIC_KEY_TRUE(rt_group_sched);
# endif
static int __init setup_rt_group_sched(char *str)
{
long val;
if (kstrtol(str, 0, &val) || val < 0 || val > 1) {
pr_warn("Unable to set rt_group_sched\n");
return 1;
}
if (val)
static_branch_enable(&rt_group_sched);
else
static_branch_disable(&rt_group_sched);
return 1;
}
__setup("rt_group_sched=", setup_rt_group_sched);
#endif /* CONFIG_RT_GROUP_SCHED */
static int cpu_extra_stat_show(struct seq_file *sf, static int cpu_extra_stat_show(struct seq_file *sf,
struct cgroup_subsys_state *css) struct cgroup_subsys_state *css)
{ {

View File

@ -1500,6 +1500,23 @@ static inline bool sched_group_cookie_match(struct rq *rq,
} }
#endif /* !CONFIG_SCHED_CORE */ #endif /* !CONFIG_SCHED_CORE */
#ifdef CONFIG_RT_GROUP_SCHED
# ifdef CONFIG_RT_GROUP_SCHED_DEFAULT_DISABLED
DECLARE_STATIC_KEY_FALSE(rt_group_sched);
static inline bool rt_group_sched_enabled(void)
{
return static_branch_unlikely(&rt_group_sched);
}
# else
DECLARE_STATIC_KEY_TRUE(rt_group_sched);
static inline bool rt_group_sched_enabled(void)
{
return static_branch_likely(&rt_group_sched);
}
# endif /* CONFIG_RT_GROUP_SCHED_DEFAULT_DISABLED */
#else
# define rt_group_sched_enabled() false
#endif /* CONFIG_RT_GROUP_SCHED */
static inline void lockdep_assert_rq_held(struct rq *rq) static inline void lockdep_assert_rq_held(struct rq *rq)
{ {