sched: Simplify sched_exec()
authorPeter Zijlstra <peterz@infradead.org>
Tue, 1 Aug 2023 20:41:27 +0000 (22:41 +0200)
committerPeter Zijlstra <peterz@infradead.org>
Mon, 14 Aug 2023 15:01:26 +0000 (17:01 +0200)
Use guards to reduce gotos and simplify control flow.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Valentin Schneider <vschneid@redhat.com>
Link: https://lore.kernel.org/r/20230801211812.168490417@infradead.org
kernel/sched/core.c

index 68bd68d..cd7f2ed 100644 (file)
@@ -5498,23 +5498,20 @@ unsigned int nr_iowait(void)
 void sched_exec(void)
 {
        struct task_struct *p = current;
-       unsigned long flags;
+       struct migration_arg arg;
        int dest_cpu;
 
-       raw_spin_lock_irqsave(&p->pi_lock, flags);
-       dest_cpu = p->sched_class->select_task_rq(p, task_cpu(p), WF_EXEC);
-       if (dest_cpu == smp_processor_id())
-               goto unlock;
+       scoped_guard (raw_spinlock_irqsave, &p->pi_lock) {
+               dest_cpu = p->sched_class->select_task_rq(p, task_cpu(p), WF_EXEC);
+               if (dest_cpu == smp_processor_id())
+                       return;
 
-       if (likely(cpu_active(dest_cpu))) {
-               struct migration_arg arg = { p, dest_cpu };
+               if (unlikely(!cpu_active(dest_cpu)))
+                       return;
 
-               raw_spin_unlock_irqrestore(&p->pi_lock, flags);
-               stop_one_cpu(task_cpu(p), migration_cpu_stop, &arg);
-               return;
+               arg = (struct migration_arg){ p, dest_cpu };
        }
-unlock:
-       raw_spin_unlock_irqrestore(&p->pi_lock, flags);
+       stop_one_cpu(task_cpu(p), migration_cpu_stop, &arg);
 }
 
 #endif