}
 
 static void check_enqueue_throttle(struct cfs_rq *cfs_rq);
+static inline int cfs_rq_throttled(struct cfs_rq *cfs_rq);
 
 static inline bool cfs_bandwidth_used(void);
 
 
        if (cfs_rq->nr_running == 1) {
                check_enqueue_throttle(cfs_rq);
-               if (!throttled_hierarchy(cfs_rq))
+               if (!throttled_hierarchy(cfs_rq)) {
                        list_add_leaf_cfs_rq(cfs_rq);
+               } else {
+#ifdef CONFIG_CFS_BANDWIDTH
+                       if (cfs_rq_throttled(cfs_rq) && !cfs_rq->throttled_clock)
+                               cfs_rq->throttled_clock = rq_clock(rq_of(cfs_rq));
+#endif
+               }
        }
 }
 
         * throttled-list.  rq->lock protects completion.
         */
        cfs_rq->throttled = 1;
-       cfs_rq->throttled_clock = rq_clock(rq);
+       SCHED_WARN_ON(cfs_rq->throttled_clock);
+       if (cfs_rq->nr_running)
+               cfs_rq->throttled_clock = rq_clock(rq);
        return true;
 }
 
        update_rq_clock(rq);
 
        raw_spin_lock(&cfs_b->lock);
-       cfs_b->throttled_time += rq_clock(rq) - cfs_rq->throttled_clock;
+       if (cfs_rq->throttled_clock) {
+               cfs_b->throttled_time += rq_clock(rq) - cfs_rq->throttled_clock;
+               cfs_rq->throttled_clock = 0;
+       }
        list_del_rcu(&cfs_rq->throttled_list);
        raw_spin_unlock(&cfs_b->lock);