Re: [RFC PATCH v15 1/7] sched: Add CONFIG_SCHED_PROXY_EXEC & boot argument to enable/disable

Steven Rostedt
2025-03-13T10:09:15Z

On Wed, 12 Mar 2025 15:11:31 -0700
John Stultz <jstultz@google.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