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>
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
index 8ea4c9b..926491f 100644
--- a/kernel/sched_fair.c
+++ b/kernel/sched_fair.c
@@ -479,13 +479,16 @@
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;