From b91ae3dd249134024d8b71fd9378346cfb9f70c1 Mon Sep 17 00:00:00 2001 From: Peter Zijlstra Date: Mon, 15 Oct 2007 17:00:12 +0200 Subject: [PATCH] --- yaml --- r: 69082 b: refs/heads/master c: b0ffd246ea947a037746e725bd461bb7e809a4b3 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/kernel/sched_fair.c | 26 +++++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 5c268d9e721c..d2177841298f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2830cf8c90f37526d401f1999250312df970bfa3 +refs/heads/master: b0ffd246ea947a037746e725bd461bb7e809a4b3 diff --git a/trunk/kernel/sched_fair.c b/trunk/kernel/sched_fair.c index fcd6900849b3..ec0569e59e24 100644 --- a/trunk/kernel/sched_fair.c +++ b/trunk/kernel/sched_fair.c @@ -124,6 +124,16 @@ max_vruntime(u64 min_vruntime, u64 vruntime) return min_vruntime; } +static inline u64 +min_vruntime(u64 min_vruntime, u64 vruntime) +{ + s64 delta = (s64)(vruntime - min_vruntime); + if (delta < 0) + min_vruntime = vruntime; + + return min_vruntime; +} + static inline s64 entity_key(struct cfs_rq *cfs_rq, struct sched_entity *se) { @@ -251,7 +261,7 @@ __update_curr(struct cfs_rq *cfs_rq, struct sched_entity *curr, unsigned long delta_exec) { unsigned long delta_exec_weighted; - u64 next_vruntime, min_vruntime; + u64 vruntime; schedstat_set(curr->exec_max, max((u64)delta_exec, curr->exec_max)); @@ -269,19 +279,13 @@ __update_curr(struct cfs_rq *cfs_rq, struct sched_entity *curr, * value tracking the leftmost vruntime in the tree. */ if (first_fair(cfs_rq)) { - next_vruntime = __pick_next_entity(cfs_rq)->vruntime; - - /* min_vruntime() := !max_vruntime() */ - min_vruntime = max_vruntime(curr->vruntime, next_vruntime); - if (min_vruntime == next_vruntime) - min_vruntime = curr->vruntime; - else - min_vruntime = next_vruntime; + vruntime = min_vruntime(curr->vruntime, + __pick_next_entity(cfs_rq)->vruntime); } else - min_vruntime = curr->vruntime; + vruntime = curr->vruntime; cfs_rq->min_vruntime = - max_vruntime(cfs_rq->min_vruntime, min_vruntime); + max_vruntime(cfs_rq->min_vruntime, vruntime); } static void update_curr(struct cfs_rq *cfs_rq)