Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[muen/linux.git] / kernel / time / tick-sched.c
index f53e37b5d248e00ab6bee28d10512d584efb486f..f3ab08caa2c3aa6bc61dbe1415b16f783b6ae18f 100644 (file)
@@ -414,30 +414,12 @@ static int tick_nohz_cpu_down(unsigned int cpu)
        return 0;
 }
 
-static int tick_nohz_init_all(void)
-{
-       int err = -1;
-
-#ifdef CONFIG_NO_HZ_FULL_ALL
-       if (!alloc_cpumask_var(&tick_nohz_full_mask, GFP_KERNEL)) {
-               WARN(1, "NO_HZ: Can't allocate full dynticks cpumask\n");
-               return err;
-       }
-       err = 0;
-       cpumask_setall(tick_nohz_full_mask);
-       tick_nohz_full_running = true;
-#endif
-       return err;
-}
-
 void __init tick_nohz_init(void)
 {
        int cpu, ret;
 
-       if (!tick_nohz_full_running) {
-               if (tick_nohz_init_all() < 0)
-                       return;
-       }
+       if (!tick_nohz_full_running)
+               return;
 
        /*
         * Full dynticks uses irq work to drive the tick rescheduling on safe
@@ -490,11 +472,18 @@ static int __init setup_tick_nohz(char *str)
 
 __setup("nohz=", setup_tick_nohz);
 
-int tick_nohz_tick_stopped(void)
+bool tick_nohz_tick_stopped(void)
 {
        return __this_cpu_read(tick_cpu_sched.tick_stopped);
 }
 
+bool tick_nohz_tick_stopped_cpu(int cpu)
+{
+       struct tick_sched *ts = per_cpu_ptr(&tick_cpu_sched, cpu);
+
+       return ts->tick_stopped;
+}
+
 /**
  * tick_nohz_update_jiffies - update jiffies when idle was interrupted
  *
@@ -750,12 +739,6 @@ static ktime_t tick_nohz_stop_sched_tick(struct tick_sched *ts,
                delta = KTIME_MAX;
        }
 
-#ifdef CONFIG_NO_HZ_FULL
-       /* Limit the tick delta to the maximum scheduler deferment */
-       if (!ts->inidle)
-               delta = min(delta, scheduler_tick_max_deferment());
-#endif
-
        /* Calculate the next expiry time */
        if (delta < (KTIME_MAX - basemono))
                expires = basemono + delta;
@@ -962,13 +945,6 @@ void tick_nohz_idle_enter(void)
        struct tick_sched *ts;
 
        lockdep_assert_irqs_enabled();
-       /*
-        * Update the idle state in the scheduler domain hierarchy
-        * when tick_nohz_stop_sched_tick() is called from the idle loop.
-        * State will be updated to busy during the first busy tick after
-        * exiting idle.
-        */
-       set_cpu_sd_state_idle();
 
        local_irq_disable();