summaryrefslogtreecommitdiff
path: root/kernel/sched_fair.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sched_fair.c')
-rw-r--r--kernel/sched_fair.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
index fcd6900849b3..ec0569e59e24 100644
--- a/kernel/sched_fair.c
+++ b/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)