Loading kernel/sched/core.c +14 −22 Original line number Diff line number Diff line Loading @@ -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); scoped_guard (rcu) { struct task_struct *p = find_process_by_pid(pid); if (!p) goto out_unlock; return -ESRCH; retval = security_task_getscheduler(p); if (retval) goto out_unlock; return retval; rq = task_rq_lock(p, &rf); time_slice = 0; 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); task_rq_unlock(rq, p, &rf); } } rcu_read_unlock(); jiffies_to_timespec64(time_slice, t); return 0; out_unlock: rcu_read_unlock(); return retval; } /** Loading Loading
kernel/sched/core.c +14 −22 Original line number Diff line number Diff line Loading @@ -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); scoped_guard (rcu) { struct task_struct *p = find_process_by_pid(pid); if (!p) goto out_unlock; return -ESRCH; retval = security_task_getscheduler(p); if (retval) goto out_unlock; return retval; rq = task_rq_lock(p, &rf); time_slice = 0; 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); task_rq_unlock(rq, p, &rf); } } rcu_read_unlock(); jiffies_to_timespec64(time_slice, t); return 0; out_unlock: rcu_read_unlock(); return retval; } /** Loading