|
@@ -4537,15 +4537,14 @@ static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags)
|
|
|
|
|
|
/* Don't dequeue parent if it has other entities besides us */
|
|
|
if (cfs_rq->load.weight) {
|
|
|
+ /* Avoid re-evaluating load for this entity: */
|
|
|
+ se = parent_entity(se);
|
|
|
/*
|
|
|
* Bias pick_next to pick a task from this cfs_rq, as
|
|
|
* p is sleeping when it is within its sched_slice.
|
|
|
*/
|
|
|
- if (task_sleep && parent_entity(se))
|
|
|
- set_next_buddy(parent_entity(se));
|
|
|
-
|
|
|
- /* avoid re-evaluating load for this entity */
|
|
|
- se = parent_entity(se);
|
|
|
+ if (task_sleep && se && !throttled_hierarchy(cfs_rq))
|
|
|
+ set_next_buddy(se);
|
|
|
break;
|
|
|
}
|
|
|
flags |= DEQUEUE_SLEEP;
|