diff options
author | Tejun Heo <tj@kernel.org> | 2024-08-06 09:40:11 -1000 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2024-08-06 09:40:11 -1000 |
commit | a735d43c7f85d112a6aefd72973188d0626e4464 (patch) | |
tree | c4f04a20128305f6d446c7a55f41c72e903d8c9a /kernel/sched/core.c | |
parent | 7799140b6a1697bf1d6ff80395079633f548f6e7 (diff) |
sched_ext: Simplify UP support by enabling sched_class->balance() in UP
On SMP, SCX performs dispatch from sched_class->balance(). As balance() was
not available in UP, it instead called the internal balance function from
put_prev_task_scx() and pick_next_task_scx() to emulate the effect, which is
rather nasty.
Enabling sched_class->balance() on UP shouldn't cause any meaningful
overhead. Enable balance() on UP and drop the ugly workaround.
Signed-off-by: Tejun Heo <tj@kernel.org>
Suggested-by: Peter Zijlstra <peterz@infradead.org>
Acked-by: David Vernet <void@manifault.com>
Diffstat (limited to 'kernel/sched/core.c')
-rw-r--r-- | kernel/sched/core.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 957c1a6626d2..010f01f606c8 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -5857,7 +5857,6 @@ static inline void schedule_debug(struct task_struct *prev, bool preempt) static void put_prev_task_balance(struct rq *rq, struct task_struct *prev, struct rq_flags *rf) { -#ifdef CONFIG_SMP const struct sched_class *start_class = prev->sched_class; const struct sched_class *class; @@ -5880,10 +5879,9 @@ static void put_prev_task_balance(struct rq *rq, struct task_struct *prev, * a runnable task of @class priority or higher. */ for_active_class_range(class, start_class, &idle_sched_class) { - if (class->balance(rq, prev, rf)) + if (class->balance && class->balance(rq, prev, rf)) break; } -#endif put_prev_task(rq, prev); |