Commit e34e0131 authored by Michal Koutný's avatar Michal Koutný Committed by Peter Zijlstra
Browse files

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: default avatarMichal Koutný <mkoutny@suse.com>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20250310170442.504716-5-mkoutny@suse.com
parent a5a25b32
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -6280,6 +6280,11 @@
			Memory area to be used by remote processor image,
			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

	S		[KNL] Run init in single mode
+11 −0
Original line number Diff line number Diff line
@@ -1082,6 +1082,17 @@ config RT_GROUP_SCHED
	  realtime bandwidth for them.
	  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
	bool
	depends on SCHED_CLASS_EXT && CGROUP_SCHED
+25 −0
Original line number Diff line number Diff line
@@ -9892,6 +9892,31 @@ static struct cftype cpu_legacy_files[] = {
	{ }	/* 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,
			       struct cgroup_subsys_state *css)
{
+17 −0
Original line number Diff line number Diff line
@@ -1500,6 +1500,23 @@ static inline bool sched_group_cookie_match(struct rq *rq,
}

#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)
{