Merge branch 'sched/urgent' into sched/core to pick up fixes
[linux-2.6-block.git] / kernel / sched / fair.c
index 51f7a4b6298516aba2f39fdae84f1b468c1b6ef3..39fde3660f9793be55accc4d95596def00da0b7d 100644 (file)
@@ -3099,7 +3099,14 @@ static int idle_balance(struct rq *this_rq);
 
 #else /* CONFIG_SMP */
 
-static inline void update_load_avg(struct sched_entity *se, int update_tg) {}
+static inline void update_load_avg(struct sched_entity *se, int not_used)
+{
+       struct cfs_rq *cfs_rq = cfs_rq_of(se);
+       struct rq *rq = rq_of(cfs_rq);
+
+       cpufreq_trigger_update(rq_clock(rq));
+}
+
 static inline void
 enqueue_entity_load_avg(struct cfs_rq *cfs_rq, struct sched_entity *se) {}
 static inline void
@@ -3250,25 +3257,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);
@@ -3284,7 +3283,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;