]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Merge branch 'timers/core' of git://git.kernel.org/pub/scm/linux/kernel/git/frederic...
authorIngo Molnar <mingo@kernel.org>
Wed, 10 Jul 2013 08:43:25 +0000 (10:43 +0200)
committerIngo Molnar <mingo@kernel.org>
Wed, 10 Jul 2013 08:43:25 +0000 (10:43 +0200)
Pull nohz updates/fixes from Frederic Weisbecker:

' Note that "watchdog: Boot-disable by default on full dynticks" is a temporary
  solution to solve the issue with the watchdog that prevents the tick from
  stopping. This is to make sure that 3.11 doesn't have that problem as several
  people complained about it.

  A proper and longer term solution has been proposed by Peterz:

          http://lkml.kernel.org/r/20130618103632.GO3204@twins.programming.kicks-ass.net
'

Signed-off-by: Ingo Molnar <mingo@kernel.org>
1  2 
kernel/sysctl.c
kernel/time/tick-sched.c

diff --combined kernel/sysctl.c
index 4ce13c3cedb97a8bb4eb402d02bc10f79c35245e,b0805652c4ff7db36e7861ffe1779fbd1f2cda53..5c9e33b5c0eb2a2c7a42abfb3e304e3177426296
@@@ -120,6 -120,7 +120,6 @@@ extern int blk_iopoll_enabled
  /* Constants used for minimum and  maximum */
  #ifdef CONFIG_LOCKUP_DETECTOR
  static int sixty = 60;
 -static int neg_one = -1;
  #endif
  
  static int zero;
@@@ -800,7 -801,7 +800,7 @@@ static struct ctl_table kern_table[] = 
  #if defined(CONFIG_LOCKUP_DETECTOR)
        {
                .procname       = "watchdog",
-               .data           = &watchdog_enabled,
+               .data           = &watchdog_user_enabled,
                .maxlen         = sizeof (int),
                .mode           = 0644,
                .proc_handler   = proc_dowatchdog,
                .maxlen         = sizeof(int),
                .mode           = 0644,
                .proc_handler   = proc_dowatchdog,
 -              .extra1         = &neg_one,
 +              .extra1         = &zero,
                .extra2         = &sixty,
        },
        {
        },
        {
                .procname       = "nmi_watchdog",
-               .data           = &watchdog_enabled,
+               .data           = &watchdog_user_enabled,
                .maxlen         = sizeof (int),
                .mode           = 0644,
                .proc_handler   = proc_dowatchdog,
                .mode           = 0644,
                .proc_handler   = perf_proc_update_handler,
        },
 +      {
 +              .procname       = "perf_cpu_time_max_percent",
 +              .data           = &sysctl_perf_cpu_time_max_percent,
 +              .maxlen         = sizeof(sysctl_perf_cpu_time_max_percent),
 +              .mode           = 0644,
 +              .proc_handler   = perf_cpu_time_max_percent_handler,
 +              .extra1         = &zero,
 +              .extra2         = &one_hundred,
 +      },
  #endif
  #ifdef CONFIG_KMEMCHECK
        {
diff --combined kernel/time/tick-sched.c
index 0cf1c14531817eacb61eae48f6f76a45a0cc8027,b15750139260276714bf080d6d73ae1bafd6538b..69601726a745ef0ae4cff7c44afba6473cea2c82
@@@ -178,6 -178,11 +178,11 @@@ static bool can_stop_full_tick(void
         */
        if (!sched_clock_stable) {
                trace_tick_stop(0, "unstable sched clock\n");
+               /*
+                * Don't allow the user to think they can get
+                * full NO_HZ with this machine.
+                */
+               WARN_ONCE(1, "NO_HZ FULL will not work with unstable sched clock");
                return false;
        }
  #endif
@@@ -306,7 -311,7 +311,7 @@@ static int __cpuinit tick_nohz_cpu_down
                 * we can't safely shutdown that CPU.
                 */
                if (have_nohz_full_mask && tick_do_timer_cpu == cpu)
 -                      return -EINVAL;
 +                      return NOTIFY_BAD;
                break;
        }
        return NOTIFY_OK;
@@@ -346,16 -351,6 +351,6 @@@ void __init tick_nohz_init(void
        }
  
        cpu_notifier(tick_nohz_cpu_down_callback, 0);
-       /* Make sure full dynticks CPU are also RCU nocbs */
-       for_each_cpu(cpu, nohz_full_mask) {
-               if (!rcu_is_nocb_cpu(cpu)) {
-                       pr_warning("NO_HZ: CPU %d is not RCU nocb: "
-                                  "cleared from nohz_full range", cpu);
-                       cpumask_clear_cpu(cpu, nohz_full_mask);
-               }
-       }
        cpulist_scnprintf(nohz_full_buf, sizeof(nohz_full_buf), nohz_full_mask);
        pr_info("NO_HZ: Full dynticks CPUs: %s.\n", nohz_full_buf);
  }