|
@@ -3188,25 +3188,17 @@ static inline void check_schedstat_required(void)
|
|
|
static void
|
|
|
enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
|
|
|
{
|
|
|
- bool renorm = !(flags & ENQUEUE_WAKEUP) || (flags & ENQUEUE_WAKING);
|
|
|
- bool curr = cfs_rq->curr == se;
|
|
|
-
|
|
|
/*
|
|
|
- * If we're the current task, we must renormalise before calling
|
|
|
- * update_curr().
|
|
|
+ * Update the normalized vruntime before updating min_vruntime
|
|
|
+ * through calling update_curr().
|
|
|
*/
|
|
|
- if (renorm && curr)
|
|
|
+ if (!(flags & ENQUEUE_WAKEUP) || (flags & ENQUEUE_WAKING))
|
|
|
se->vruntime += cfs_rq->min_vruntime;
|
|
|
|
|
|
- update_curr(cfs_rq);
|
|
|
-
|
|
|
/*
|
|
|
- * Otherwise, renormalise after, such that we're placed at the current
|
|
|
- * moment in time, instead of some random moment in the past.
|
|
|
+ * Update run-time statistics of the 'current'.
|
|
|
*/
|
|
|
- if (renorm && !curr)
|
|
|
- se->vruntime += cfs_rq->min_vruntime;
|
|
|
-
|
|
|
+ update_curr(cfs_rq);
|
|
|
enqueue_entity_load_avg(cfs_rq, se);
|
|
|
account_entity_enqueue(cfs_rq, se);
|
|
|
update_cfs_shares(cfs_rq);
|
|
@@ -3222,7 +3214,7 @@ enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
|
|
|
update_stats_enqueue(cfs_rq, se);
|
|
|
check_spread(cfs_rq, se);
|
|
|
}
|
|
|
- if (!curr)
|
|
|
+ if (se != cfs_rq->curr)
|
|
|
__enqueue_entity(cfs_rq, se);
|
|
|
se->on_rq = 1;
|
|
|
|