Commit af7c5763 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Ingo Molnar

sched: Simplify sched_rr_get_interval()

Use guards to reduce gotos and simplify control flow.
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 7a50f766
...@@ -9030,38 +9030,30 @@ SYSCALL_DEFINE1(sched_get_priority_min, int, policy) ...@@ -9030,38 +9030,30 @@ SYSCALL_DEFINE1(sched_get_priority_min, int, policy)
static int sched_rr_get_interval(pid_t pid, struct timespec64 *t) static int sched_rr_get_interval(pid_t pid, struct timespec64 *t)
{ {
struct task_struct *p; unsigned int time_slice = 0;
unsigned int time_slice;
struct rq_flags rf;
struct rq *rq;
int retval; int retval;
if (pid < 0) if (pid < 0)
return -EINVAL; return -EINVAL;
retval = -ESRCH; scoped_guard (rcu) {
rcu_read_lock(); struct task_struct *p = find_process_by_pid(pid);
p = find_process_by_pid(pid);
if (!p) if (!p)
goto out_unlock; return -ESRCH;
retval = security_task_getscheduler(p); retval = security_task_getscheduler(p);
if (retval) if (retval)
goto out_unlock; return retval;
rq = task_rq_lock(p, &rf); scoped_guard (task_rq_lock, p) {
time_slice = 0; struct rq *rq = scope.rq;
if (p->sched_class->get_rr_interval) if (p->sched_class->get_rr_interval)
time_slice = p->sched_class->get_rr_interval(rq, p); time_slice = p->sched_class->get_rr_interval(rq, p);
task_rq_unlock(rq, p, &rf); }
}
rcu_read_unlock();
jiffies_to_timespec64(time_slice, t); jiffies_to_timespec64(time_slice, t);
return 0; return 0;
out_unlock:
rcu_read_unlock();
return retval;
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment