Parcourir la source

sched: entity_key() fix

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>
Ingo Molnar il y a 17 ans
Parent
commit
8465e792e8
1 fichiers modifiés avec 10 ajouts et 7 suppressions
  1. 10 7
      kernel/sched_fair.c

+ 10 - 7
kernel/sched_fair.c

@@ -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;