]> Pileus Git - ~andy/linux/blobdiff - kernel/time/tick-sched.c
Merge tag 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[~andy/linux] / kernel / time / tick-sched.c
index 3a9e5d5c10916a7e67c131df489617a485a39bfc..f423bdd035c2234fb91910b60d096992405a28ba 100644 (file)
@@ -372,7 +372,7 @@ static ktime_t tick_nohz_stop_sched_tick(struct tick_sched *ts,
                 * the scheduler tick in nohz_restart_sched_tick.
                 */
                if (!ts->tick_stopped) {
-                       select_nohz_load_balancer(1);
+                       nohz_balance_enter_idle(cpu);
                        calc_load_enter_idle();
 
                        ts->last_tick = hrtimer_get_expires(&ts->sched_timer);
@@ -436,7 +436,8 @@ static bool can_stop_idle_tick(int cpu, struct tick_sched *ts)
        if (unlikely(local_softirq_pending() && cpu_online(cpu))) {
                static int ratelimit;
 
-               if (ratelimit < 10) {
+               if (ratelimit < 10 &&
+                   (local_softirq_pending() & SOFTIRQ_STOP_IDLE_MASK)) {
                        printk(KERN_ERR "NOHZ: local_softirq_pending %02x\n",
                               (unsigned int) local_softirq_pending());
                        ratelimit++;
@@ -569,7 +570,6 @@ static void tick_nohz_restart(struct tick_sched *ts, ktime_t now)
 static void tick_nohz_restart_sched_tick(struct tick_sched *ts, ktime_t now)
 {
        /* Update jiffies first */
-       select_nohz_load_balancer(0);
        tick_do_update_jiffies64(now);
        update_cpu_load_nohz();