| Date | Tue, 22 Mar 2011 20:03:36 -0700 | From | Paul Turner <> | Subject | [patch 10/15] sched: (fixlet) dont update shares twice on on_rq parent |
| |
In dequeue_task_fair() we bail on dequeue when we encounter a parenting entity with additional weight. However, we perform a double shares update on this entity since we continue the shares update traversal from that point, despite dequeue_entity() having already updated its queuing cfs_rq.
Avoid this by starting from the parent when we resume.
Signed-off-by: Paul Turner <pjt@google.com> --- kernel/sched_fair.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
Index: tip/kernel/sched_fair.c =================================================================== --- tip.orig/kernel/sched_fair.c +++ tip/kernel/sched_fair.c @@ -1683,8 +1683,10 @@ static void dequeue_task_fair(struct rq break; } /* Don't dequeue parent if it has other entities besides us */ - if (cfs_rq->load.weight) + if (cfs_rq->load.weight) { + se = parent_entity(se); break; + } check_cfs_rq_quota(cfs_rq); flags |= DEQUEUE_SLEEP; }
|