sched: entity_key() fix
authorIngo Molnar <mingo@elte.hu>
Mon, 15 Oct 2007 15:00:11 +0000 (17:00 +0200)
committerIngo Molnar <mingo@elte.hu>
Mon, 15 Oct 2007 15:00:11 +0000 (17:00 +0200)
entity_key() fix - we'd occasionally end up with a 0 vruntime
in the !initial case.

Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
kernel/sched_fair.c

index 8ea4c9b..926491f 100644 (file)
@@ -479,13 +479,16 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial)
        if (initial && sched_feat(START_DEBIT))
                vruntime += __sched_vslice(cfs_rq->nr_running + 1);
 
-       if (!initial && sched_feat(NEW_FAIR_SLEEPERS)) {
-               s64 latency = cfs_rq->min_vruntime - se->last_min_vruntime;
-               if (latency < 0 || !cfs_rq->nr_running)
-                       latency = 0;
-               else
-                       latency = min_t(s64, latency, sysctl_sched_latency);
-               vruntime -= latency;
+       if (!initial) {
+               if (sched_feat(NEW_FAIR_SLEEPERS)) {
+                       s64 latency = cfs_rq->min_vruntime - se->last_min_vruntime;
+                       if (latency < 0 || !cfs_rq->nr_running)
+                               latency = 0;
+                       else
+                               latency = min_t(s64, latency, sysctl_sched_latency);
+                       vruntime -= latency;
+               }
+               vruntime = max(vruntime, se->vruntime);
        }
 
        se->vruntime = vruntime;