[PATCH 1/2] evl/sched: Add sched_out handler to sched_class
Jan Kiszka <[email protected]> Sun, 14 Jun 2026 21:35:28 +0200
| Newsgroups | dev.linux.lists.xenomai |
|---|---|
| Message-ID | <[email protected]> |
From: Jan Kiszka <[email protected]> This shall be invoked before a thread switch, providing both the current and the next thread as arguments. Some scheduling classes may need it to correctly handle their state as the sched_pick may not be invoked when a higher-weighted class is providing the next thread. Signed-off-by: Jan Kiszka <[email protected]> --- include/evl/sched.h | 2 ++ kernel/evl/sched/core.c | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/include/evl/sched.h b/include/evl/sched.h index ae9690860146c..0b16f1b1cf626 100644 --- a/include/evl/sched.h +++ b/include/evl/sched.h @@ -120,6 +120,8 @@ struct evl_sched_class { void (*sched_dequeue)(struct evl_thread *thread); void (*sched_requeue)(struct evl_thread *thread); struct evl_thread *(*sched_pick)(struct evl_rq *rq); + void (*sched_out)(struct evl_thread *thread, + struct evl_thread *next); void (*sched_yield)(struct evl_thread *thread); void (*sched_migrate)(struct evl_thread *thread, struct evl_rq *rq); diff --git a/kernel/evl/sched/core.c b/kernel/evl/sched/core.c index eb133e334d30f..0d49fc16bd67e 100644 --- a/kernel/evl/sched/core.c +++ b/kernel/evl/sched/core.c @@ -910,6 +910,7 @@ static __always_inline bool test_resched(struct evl_rq *this_rq) */ void __evl_schedule(void) /* oob or/and hard irqs off (CPU migration-safe) */ { + struct evl_sched_class *prev_schedclass; struct evl_rq *this_rq = this_evl_rq(); struct evl_thread *prev, *next, *curr; bool leaving_inband, inband_tail; @@ -990,6 +991,10 @@ void __evl_schedule(void) /* oob or/and hard irqs off (CPU migration-safe) */ this_rq->curr = next; leaving_inband = false; + prev_schedclass = prev->sched_class; + if (prev_schedclass->sched_out) + prev_schedclass->sched_out(prev, next); + /* * Careful: we _must_ have updated this_rq->curr before * performing the rest of the context switch code -- 2.47.3