account_entity_enqueue(cfs_rq, se);
 }
 
-static void update_cfs_shares(struct cfs_rq *cfs_rq)
+static void update_cfs_shares(struct cfs_rq *cfs_rq, long weight_delta)
 {
        struct task_group *tg;
        struct sched_entity *se;
        if (!se)
                return;
 
-       load = cfs_rq->load.weight;
+       load = cfs_rq->load.weight + weight_delta;
 
        load_weight = atomic_read(&tg->load_weight);
        load_weight -= cfs_rq->load_contribution;
 {
 }
 
-static inline void update_cfs_shares(struct cfs_rq *cfs_rq)
+static inline void update_cfs_shares(struct cfs_rq *cfs_rq, long weight_delta)
 {
 }
 #endif /* CONFIG_FAIR_GROUP_SCHED */
         */
        update_curr(cfs_rq);
        update_cfs_load(cfs_rq, 0);
+       update_cfs_shares(cfs_rq, se->load.weight);
        account_entity_enqueue(cfs_rq, se);
-       update_cfs_shares(cfs_rq);
 
        if (flags & ENQUEUE_WAKEUP) {
                place_entity(cfs_rq, se, 0);
        update_cfs_load(cfs_rq, 0);
        account_entity_dequeue(cfs_rq, se);
        update_min_vruntime(cfs_rq);
-       update_cfs_shares(cfs_rq);
+       update_cfs_shares(cfs_rq, 0);
 
        /*
         * Normalize the entity after updating the min_vruntime because the
                struct cfs_rq *cfs_rq = cfs_rq_of(se);
 
                update_cfs_load(cfs_rq, 0);
-               update_cfs_shares(cfs_rq);
+               update_cfs_shares(cfs_rq, 0);
        }
 
        hrtick_update(rq);
                struct cfs_rq *cfs_rq = cfs_rq_of(se);
 
                update_cfs_load(cfs_rq, 0);
-               update_cfs_shares(cfs_rq);
+               update_cfs_shares(cfs_rq, 0);
        }
 
        hrtick_update(rq);
         * We need to update shares after updating tg->load_weight in
         * order to adjust the weight of groups with long running tasks.
         */
-       update_cfs_shares(cfs_rq);
+       update_cfs_shares(cfs_rq, 0);
 
        raw_spin_unlock_irqrestore(&rq->lock, flags);