Re: [PATCH] sched_ext:SCX is preemptible by the Fair scheduler

From: Andrea Righi

Date: Fri Jun 12 2026 - 12:41:57 EST


Hi Cui,

On Sat, Jun 13, 2026 at 12:14:03AM +0800, Cui Jian wrote:
> sched_ext currently distinguishes preemption caused by STOP,
> DL and RT scheduling classes, but preemption from the Fair
> scheduler is reported as SCX_CPU_PREEMPT_UNKNOWN.
>
> When analyzing SCX scheduling behavior, it is useful to know
> whether a task was preempted by RT/DL classes or switched out
> in favor of a Fair-class task. The lack of a dedicated reason
> makes debugging and observability more difficult.
>
> Add SCX_CPU_PREEMPT_FAIR and report it when the next scheduled
> task belongs to fair_sched_class.
>
> This change improves scheduling diagnostics and observability
> without affecting scheduling behavior.

The preempt reason is only used in ops.cpu_release(), which is a deprecated API
and will be removed in the next kernel versions (see the pr_warn() in
validate_ops(), kernel/sched/ext.c):

pr_warn("ops->cpu_acquire/release() are deprecated, use sched_switch TP instead\n");

So, your patch makes sense, but I'm not sure it's worth updating the API at this
point.

Thanks,
-Andrea

>
> Signed-off-by: Cui Jian <cjian720@xxxxxxx>
> ---
> kernel/sched/ext.c | 2 ++
> kernel/sched/ext_internal.h | 2 ++
> 2 files changed, 4 insertions(+)
>
> diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
> index 5d2d19473a82..6e0281218197 100644
> --- a/kernel/sched/ext.c
> +++ b/kernel/sched/ext.c
> @@ -3015,6 +3015,8 @@ preempt_reason_from_class(const struct sched_class *class)
> return SCX_CPU_PREEMPT_DL;
> if (class == &rt_sched_class)
> return SCX_CPU_PREEMPT_RT;
> + if (class == &fair_sched_class)
> + return SCX_CPU_PREEMPT_FAIR;
> return SCX_CPU_PREEMPT_UNKNOWN;
> }
>
> diff --git a/kernel/sched/ext_internal.h b/kernel/sched/ext_internal.h
> index a075732d4430..3ce07bec58a5 100644
> --- a/kernel/sched/ext_internal.h
> +++ b/kernel/sched/ext_internal.h
> @@ -241,6 +241,8 @@ enum scx_cpu_preempt_reason {
> SCX_CPU_PREEMPT_DL,
> /* next task is being scheduled by &sched_class_stop */
> SCX_CPU_PREEMPT_STOP,
> + /* next task is being scheduled by &sched_class_fair*/
> + SCX_CPU_PREEMPT_FAIR,
> /* unknown reason for SCX being preempted */
> SCX_CPU_PREEMPT_UNKNOWN,
> };
> --
> 2.34.1
>