[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250313060907.6828c62c@batman.local.home>
Date: Thu, 13 Mar 2025 06:09:07 -0400
From: Steven Rostedt <rostedt@...dmis.org>
To: John Stultz <jstultz@...gle.com>
Cc: LKML <linux-kernel@...r.kernel.org>, Joel Fernandes
<joelagnelf@...dia.com>, Qais Yousef <qyousef@...alina.io>, Ingo Molnar
<mingo@...hat.com>, Peter Zijlstra <peterz@...radead.org>, Juri Lelli
<juri.lelli@...hat.com>, Vincent Guittot <vincent.guittot@...aro.org>,
Dietmar Eggemann <dietmar.eggemann@....com>, Valentin Schneider
<vschneid@...hat.com>, Ben Segall <bsegall@...gle.com>, Zimuzo Ezeozue
<zezeozue@...gle.com>, Mel Gorman <mgorman@...e.de>, Will Deacon
<will@...nel.org>, Waiman Long <longman@...hat.com>, Boqun Feng
<boqun.feng@...il.com>, "Paul E. McKenney" <paulmck@...nel.org>, Metin Kaya
<Metin.Kaya@....com>, Xuewen Yan <xuewen.yan94@...il.com>, K Prateek Nayak
<kprateek.nayak@....com>, Thomas Gleixner <tglx@...utronix.de>, Daniel
Lezcano <daniel.lezcano@...aro.org>, Suleiman Souhlal
<suleiman@...gle.com>, kernel-team@...roid.com
Subject: Re: [RFC PATCH v15 1/7] sched: Add CONFIG_SCHED_PROXY_EXEC & boot
argument to enable/disable
On Wed, 12 Mar 2025 15:11:31 -0700
John Stultz <jstultz@...gle.com> wrote:
> diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
> index fb8752b42ec85..dcc2443078d00 100644
> --- a/Documentation/admin-guide/kernel-parameters.txt
> +++ b/Documentation/admin-guide/kernel-parameters.txt
> @@ -6262,6 +6262,11 @@
> sa1100ir [NET]
> See drivers/net/irda/sa1100_ir.c.
>
> + sched_proxy_exec= [KNL]
> + Enables or disables "proxy execution" style
> + solution to mutex-based priority inversion.
> + Format: <bool>
To enable, does this require: sched_proxy_exec=true
Could we just allow it to be:
sched_proxy_exec
Also mean true? That is, both of the above would be true, but to
disable it, you would need: sched_proxy_exec=false.
> +
> sched_verbose [KNL,EARLY] Enables verbose scheduler debug messages.
>
> schedstats= [KNL,X86] Enable or disable scheduled statistics.
> diff --git a/include/linux/sched.h b/include/linux/sched.h
> index 9c15365a30c08..1462f2c70aefc 100644
> --- a/include/linux/sched.h
> +++ b/include/linux/sched.h
> @@ -1636,6 +1636,19 @@ struct task_struct {
> */
> };
>
> +#ifdef CONFIG_SCHED_PROXY_EXEC
> +DECLARE_STATIC_KEY_TRUE(__sched_proxy_exec);
> +static inline bool sched_proxy_exec(void)
> +{
> + return static_branch_likely(&__sched_proxy_exec);
> +}
> +#else
> +static inline bool sched_proxy_exec(void)
> +{
> + return false;
> +}
> +#endif
> +
> #define TASK_REPORT_IDLE (TASK_REPORT + 1)
> #define TASK_REPORT_MAX (TASK_REPORT_IDLE << 1)
>
> diff --git a/init/Kconfig b/init/Kconfig
> index d0d021b3fa3b3..b989ddc27444e 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -875,6 +875,16 @@ config UCLAMP_BUCKETS_COUNT
>
> If in doubt, use the default value.
>
> +config SCHED_PROXY_EXEC
> + bool "Proxy Execution"
> + default n
Nit, you don't need "default n" because "default n" is the default ;-)
> + # Avoid some build failures w/ PREEMPT_RT until it can be fixed
> + depends on !PREEMPT_RT
> + depends on EXPERT
> + help
> + This option enables proxy execution, a mechanism for mutex-owning
> + tasks to inherit the scheduling context of higher priority waiters.
> +
> endmenu
>
> #
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index 67189907214d3..3968c3967ec38 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -119,6 +119,35 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(sched_compute_energy_tp);
>
> DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues);
>
> +#ifdef CONFIG_SCHED_PROXY_EXEC
> +DEFINE_STATIC_KEY_TRUE(__sched_proxy_exec);
> +static int __init setup_proxy_exec(char *str)
> +{
> + bool proxy_enable;
> +
> + if (kstrtobool(str, &proxy_enable)) {
To make it work without adding =true, the above could be:
bool proxy_enable = true;
if (*str && kstrtobool(str, &proxy_enable)) {
> + pr_warn("Unable to parse sched_proxy_exec=\n");
> + return 0;
> + }
> +
> + if (proxy_enable) {
> + pr_info("sched_proxy_exec enabled via boot arg\n");
> + static_branch_enable(&__sched_proxy_exec);
> + } else {
> + pr_info("sched_proxy_exec disabled via boot arg\n");
> + static_branch_disable(&__sched_proxy_exec);
> + }
> + return 1;
> +}
-- Steve
Powered by blists - more mailing lists