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

From: Cui Jian

Date: Fri Jun 12 2026 - 11:26:47 EST


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.

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