Merge branch 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[pandora-kernel.git] / kernel / time / tick-sched.c
index 2aff39c..e0f59a2 100644 (file)
@@ -222,6 +222,15 @@ void tick_nohz_stop_sched_tick(int inidle)
 
        cpu = smp_processor_id();
        ts = &per_cpu(tick_cpu_sched, cpu);
+
+       /*
+        * Call to tick_nohz_start_idle stops the last_update_time from being
+        * updated. Thus, it must not be called in the event we are called from
+        * irq_exit() with the prior state different than idle.
+        */
+       if (!inidle && !ts->inidle)
+               goto end;
+
        now = tick_nohz_start_idle(ts);
 
        /*
@@ -239,9 +248,6 @@ void tick_nohz_stop_sched_tick(int inidle)
        if (unlikely(ts->nohz_mode == NOHZ_MODE_INACTIVE))
                goto end;
 
-       if (!inidle && !ts->inidle)
-               goto end;
-
        ts->inidle = 1;
 
        if (need_resched())