sched: Extract __schedule_loop()
authorThomas Gleixner <tglx@linutronix.de>
Fri, 8 Sep 2023 16:22:50 +0000 (18:22 +0200)
committerPeter Zijlstra <peterz@infradead.org>
Wed, 20 Sep 2023 07:31:12 +0000 (09:31 +0200)
There are currently two implementations of this basic __schedule()
loop, and there is soon to be a third.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20230908162254.999499-4-bigeasy@linutronix.de
kernel/sched/core.c

index d55564097bd860998ff66b1cceca66fce0b0969c..1ea7ba53aad24d4ee7f7bb5cd4033d43e4076837 100644 (file)
@@ -6770,16 +6770,21 @@ static void sched_update_worker(struct task_struct *tsk)
        }
 }
 
-asmlinkage __visible void __sched schedule(void)
+static __always_inline void __schedule_loop(unsigned int sched_mode)
 {
-       struct task_struct *tsk = current;
-
-       sched_submit_work(tsk);
        do {
                preempt_disable();
-               __schedule(SM_NONE);
+               __schedule(sched_mode);
                sched_preempt_enable_no_resched();
        } while (need_resched());
+}
+
+asmlinkage __visible void __sched schedule(void)
+{
+       struct task_struct *tsk = current;
+
+       sched_submit_work(tsk);
+       __schedule_loop(SM_NONE);
        sched_update_worker(tsk);
 }
 EXPORT_SYMBOL(schedule);
@@ -6843,11 +6848,7 @@ void __sched schedule_preempt_disabled(void)
 #ifdef CONFIG_PREEMPT_RT
 void __sched notrace schedule_rtlock(void)
 {
-       do {
-               preempt_disable();
-               __schedule(SM_RTLOCK_WAIT);
-               sched_preempt_enable_no_resched();
-       } while (need_resched());
+       __schedule_loop(SM_RTLOCK_WAIT);
 }
 NOKPROBE_SYMBOL(schedule_rtlock);
 #endif