aboutsummaryrefslogtreecommitdiff
path: root/kernel/sched/fair.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2012-08-13 18:56:46 +0200
committerThomas Gleixner <tglx@linutronix.de>2012-08-13 18:56:46 +0200
commita4133765c1b467aa53a6efa48f9d292f2dcd285d (patch)
tree5af6a54ebfae7b7550f68ed712b1ca10c8155484 /kernel/sched/fair.c
parent3bf671af14d591ede9251acb0085e8017f3705e7 (diff)
parent8f6189684eb4e85e6c593cd710693f09c944450a (diff)
downloadlinaro-lsk-a4133765c1b467aa53a6efa48f9d292f2dcd285d.tar.gz
Merge branch 'sched/urgent' into sched/core
Diffstat (limited to 'kernel/sched/fair.c')
-rw-r--r--kernel/sched/fair.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index d0cc03b3e70..c219bf8d704 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -3387,6 +3387,14 @@ static int tg_load_down(struct task_group *tg, void *data)
static void update_h_load(long cpu)
{
+ struct rq *rq = cpu_rq(cpu);
+ unsigned long now = jiffies;
+
+ if (rq->h_load_throttle == now)
+ return;
+
+ rq->h_load_throttle = now;
+
rcu_read_lock();
walk_tg_tree(tg_load_down, tg_nop, (void *)cpu);
rcu_read_unlock();
@@ -4293,11 +4301,10 @@ redo:
env.src_rq = busiest;
env.loop_max = min(sysctl_sched_nr_migrate, busiest->nr_running);
+ update_h_load(env.src_cpu);
more_balance:
local_irq_save(flags);
double_rq_lock(this_rq, busiest);
- if (!env.loop)
- update_h_load(env.src_cpu);
/*
* cur_ld_moved - load moved in current iteration