| From bf0bd948d1682e3996adc093b43021ed391983e6 Mon Sep 17 00:00:00 2001 |
| From: Peter Zijlstra <peterz@infradead.org> |
| Date: Fri, 26 Jul 2013 23:48:42 +0200 |
| Subject: sched: Ensure update_cfs_shares() is called for parents of continuously-running tasks |
| |
| From: Peter Zijlstra <peterz@infradead.org> |
| |
| commit bf0bd948d1682e3996adc093b43021ed391983e6 upstream. |
| |
| We typically update a task_group's shares within the dequeue/enqueue |
| path. However, continuously running tasks sharing a CPU are not |
| subject to these updates as they are only put/picked. Unfortunately, |
| when we reverted f269ae046 (in 17bc14b7), we lost the augmenting |
| periodic update that was supposed to account for this; resulting in a |
| potential loss of fairness. |
| |
| To fix this, re-introduce the explicit update in |
| update_cfs_rq_blocked_load() [called via entity_tick()]. |
| |
| Reported-by: Max Hailperin <max@gustavus.edu> |
| Signed-off-by: Peter Zijlstra <peterz@infradead.org> |
| Reviewed-by: Paul Turner <pjt@google.com> |
| Link: http://lkml.kernel.org/n/tip-9545m3apw5d93ubyrotrj31y@git.kernel.org |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| kernel/sched/fair.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/kernel/sched/fair.c |
| +++ b/kernel/sched/fair.c |
| @@ -1984,6 +1984,7 @@ entity_tick(struct cfs_rq *cfs_rq, struc |
| */ |
| update_entity_load_avg(curr, 1); |
| update_cfs_rq_blocked_load(cfs_rq, 1); |
| + update_cfs_shares(cfs_rq); |
| |
| #ifdef CONFIG_SCHED_HRTICK |
| /* |