diff options
author | Ingo Molnar <mingo@elte.hu> | 2007-10-15 17:00:11 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2007-10-15 17:00:11 +0200 |
commit | 8465e792e82c567b80358e38732164b770ed4b7f (patch) | |
tree | f03ba121f3feb3bdd3e88d09775091f17b539476 | |
parent | ddc972975091ba5f839bf24d0f9ef54fe90ee741 (diff) | |
download | op-kernel-dev-8465e792e82c567b80358e38732164b770ed4b7f.zip op-kernel-dev-8465e792e82c567b80358e38732164b770ed4b7f.tar.gz |
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>
-rw-r--r-- | kernel/sched_fair.c | 17 |
1 files changed, 10 insertions, 7 deletions
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 @@ 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; |