sched: Simplify sched_rr_get_interval()
authorPeter Zijlstra <peterz@infradead.org>
Fri, 9 Jun 2023 14:59:05 +0000 (16:59 +0200)
committerIngo Molnar <mingo@kernel.org>
Wed, 13 Sep 2023 13:01:33 +0000 (15:01 +0200)
Use guards to reduce gotos and simplify control flow.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
kernel/sched/core.c

index 6c8c40a545608cbd6b98b023f7fbffd104baa21b..d298176367f775b734affa61e34c890ef737069d 100644 (file)
@@ -9030,38 +9030,30 @@ SYSCALL_DEFINE1(sched_get_priority_min, int, policy)
 
 static int sched_rr_get_interval(pid_t pid, struct timespec64 *t)
 {
-       struct task_struct *p;
-       unsigned int time_slice;
-       struct rq_flags rf;
-       struct rq *rq;
+       unsigned int time_slice = 0;
        int retval;
 
        if (pid < 0)
                return -EINVAL;
 
-       retval = -ESRCH;
-       rcu_read_lock();
-       p = find_process_by_pid(pid);
-       if (!p)
-               goto out_unlock;
+       scoped_guard (rcu) {
+               struct task_struct *p = find_process_by_pid(pid);
+               if (!p)
+                       return -ESRCH;
 
-       retval = security_task_getscheduler(p);
-       if (retval)
-               goto out_unlock;
+               retval = security_task_getscheduler(p);
+               if (retval)
+                       return retval;
 
-       rq = task_rq_lock(p, &rf);
-       time_slice = 0;
-       if (p->sched_class->get_rr_interval)
-               time_slice = p->sched_class->get_rr_interval(rq, p);
-       task_rq_unlock(rq, p, &rf);
+               scoped_guard (task_rq_lock, p) {
+                       struct rq *rq = scope.rq;
+                       if (p->sched_class->get_rr_interval)
+                               time_slice = p->sched_class->get_rr_interval(rq, p);
+               }
+       }
 
-       rcu_read_unlock();
        jiffies_to_timespec64(time_slice, t);
        return 0;
-
-out_unlock:
-       rcu_read_unlock();
-       return retval;
 }
 
 /**