aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched/fair.c
diff options
context:
space:
mode:
authorPeter Zijlstra <a.p.zijlstra@chello.nl>2012-05-11 11:31:26 -0400
committerIngo Molnar <mingo@kernel.org>2012-05-14 09:05:27 -0400
commit556061b00c9f2fd6a5524b6bde823ef12f299ecf (patch)
tree087891d70dbcd97cd23ac3eb92fad6a905c0f527 /kernel/sched/fair.c
parent870a0bb5d636156502769233d02a0d5791d4366a (diff)
sched/nohz: Fix rq->cpu_load[] calculations
While investigating why the load-balancer did funny I found that the rq->cpu_load[] tables were completely screwy.. a bit more digging revealed that the updates that got through were missing ticks followed by a catchup of 2 ticks. The catchup assumes the cpu was idle during that time (since only nohz can cause missed ticks and the machine is idle etc..) this means that esp. the higher indices were significantly lower than they ought to be. The reason for this is that its not correct to compare against jiffies on every jiffy on any other cpu than the cpu that updates jiffies. This patch cludges around it by only doing the catch-up stuff from nohz_idle_balance() and doing the regular stuff unconditionally from the tick. Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: pjt@google.com Cc: Venkatesh Pallipadi <venki@google.com> Link: http://lkml.kernel.org/n/tip-tp4kj18xdd5aj4vvj0qg55s2@git.kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/sched/fair.c')
-rw-r--r--kernel/sched/fair.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index a259a614b394..124e6b6999a7 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -5012,7 +5012,7 @@ static void nohz_idle_balance(int this_cpu, enum cpu_idle_type idle)
5012 5012
5013 raw_spin_lock_irq(&this_rq->lock); 5013 raw_spin_lock_irq(&this_rq->lock);
5014 update_rq_clock(this_rq); 5014 update_rq_clock(this_rq);
5015 update_cpu_load(this_rq); 5015 update_idle_cpu_load(this_rq);
5016 raw_spin_unlock_irq(&this_rq->lock); 5016 raw_spin_unlock_irq(&this_rq->lock);
5017 5017
5018 rebalance_domains(balance_cpu, CPU_IDLE); 5018 rebalance_domains(balance_cpu, CPU_IDLE);