diff options
-rw-r--r-- | kernel/sched.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 59ff6b140edb..b062856b946c 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -4850,17 +4850,21 @@ long sys_sched_rr_get_interval(pid_t pid, struct timespec __user *interval) | |||
4850 | if (retval) | 4850 | if (retval) |
4851 | goto out_unlock; | 4851 | goto out_unlock; |
4852 | 4852 | ||
4853 | if (p->policy == SCHED_FIFO) | 4853 | /* |
4854 | time_slice = 0; | 4854 | * Time slice is 0 for SCHED_FIFO tasks and for SCHED_OTHER |
4855 | else if (p->policy == SCHED_RR) | 4855 | * tasks that are on an otherwise idle runqueue: |
4856 | */ | ||
4857 | time_slice = 0; | ||
4858 | if (p->policy == SCHED_RR) { | ||
4856 | time_slice = DEF_TIMESLICE; | 4859 | time_slice = DEF_TIMESLICE; |
4857 | else { | 4860 | } else { |
4858 | struct sched_entity *se = &p->se; | 4861 | struct sched_entity *se = &p->se; |
4859 | unsigned long flags; | 4862 | unsigned long flags; |
4860 | struct rq *rq; | 4863 | struct rq *rq; |
4861 | 4864 | ||
4862 | rq = task_rq_lock(p, &flags); | 4865 | rq = task_rq_lock(p, &flags); |
4863 | time_slice = NS_TO_JIFFIES(sched_slice(cfs_rq_of(se), se)); | 4866 | if (rq->cfs.load.weight) |
4867 | time_slice = NS_TO_JIFFIES(sched_slice(&rq->cfs, se)); | ||
4864 | task_rq_unlock(rq, &flags); | 4868 | task_rq_unlock(rq, &flags); |
4865 | } | 4869 | } |
4866 | read_unlock(&tasklist_lock); | 4870 | read_unlock(&tasklist_lock); |