sched: Simplify try_steal_cookie()
authorPeter Zijlstra <peterz@infradead.org>
Tue, 1 Aug 2023 20:41:29 +0000 (22:41 +0200)
committerPeter Zijlstra <peterz@infradead.org>
Mon, 14 Aug 2023 15:01:27 +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.304154828@infradead.org
kernel/sched/core.c

index 1b2fa91..f113a44 100644 (file)
@@ -6298,19 +6298,19 @@ static bool try_steal_cookie(int this, int that)
        unsigned long cookie;
        bool success = false;
 
-       local_irq_disable();
-       double_rq_lock(dst, src);
+       guard(irq)();
+       guard(double_rq_lock)(dst, src);
 
        cookie = dst->core->core_cookie;
        if (!cookie)
-               goto unlock;
+               return false;
 
        if (dst->curr != dst->idle)
-               goto unlock;
+               return false;
 
        p = sched_core_find(src, cookie);
        if (!p)
-               goto unlock;
+               return false;
 
        do {
                if (p == src->core_pick || p == src->curr)
@@ -6322,9 +6322,10 @@ static bool try_steal_cookie(int this, int that)
                if (p->core_occupation > dst->idle->core_occupation)
                        goto next;
                /*
-                * sched_core_find() and sched_core_next() will ensure that task @p
-                * is not throttled now, we also need to check whether the runqueue
-                * of the destination CPU is being throttled.
+                * sched_core_find() and sched_core_next() will ensure
+                * that task @p is not throttled now, we also need to
+                * check whether the runqueue of the destination CPU is
+                * being throttled.
                 */
                if (sched_task_is_throttled(p, this))
                        goto next;
@@ -6342,10 +6343,6 @@ next:
                p = sched_core_next(p, cookie);
        } while (p);
 
-unlock:
-       double_rq_unlock(dst, src);
-       local_irq_enable();
-
        return success;
 }