On Wed, Apr 17, 2013 at 06:24:49PM +0200, Frederic Weisbecker wrote:
> Provide a new kernel config that defaults all CPUs to be part
> of the full dynticks range, except the boot one for timekeeping.
> 
> This default setting is overriden by the nohz_full= boot option
> if passed by the user.
> 
> This is helpful for those who don't need a finegrained range
> of full dynticks CPU and also for automated testing.
> 
> Suggested-by: Ingo Molnar <[email protected]>
> Signed-off-by: Frederic Weisbecker <[email protected]>
> Cc: Andrew Morton <[email protected]>
> Cc: Chris Metcalf <[email protected]>
> Cc: Christoph Lameter <[email protected]>
> Cc: Geoff Levand <[email protected]>
> Cc: Gilad Ben Yossef <[email protected]>
> Cc: Hakan Akkan <[email protected]>
> Cc: Ingo Molnar <[email protected]>
> Cc: Kevin Hilman <[email protected]>
> Cc: Li Zhong <[email protected]>
> Cc: Paul E. McKenney <[email protected]>
> Cc: Paul Gortmaker <[email protected]>
> Cc: Peter Zijlstra <[email protected]>
> Cc: Steven Rostedt <[email protected]>
> Cc: Thomas Gleixner <[email protected]>

Reviewed-by: Paul E. McKenney <[email protected]>

> ---
>  kernel/time/Kconfig      |   10 ++++++++++
>  kernel/time/tick-sched.c |   23 +++++++++++++++++++++--
>  2 files changed, 31 insertions(+), 2 deletions(-)
> 
> diff --git a/kernel/time/Kconfig b/kernel/time/Kconfig
> index 358d601..99c3f13 100644
> --- a/kernel/time/Kconfig
> +++ b/kernel/time/Kconfig
> @@ -128,6 +128,16 @@ config NO_HZ_FULL
> 
>  endchoice
> 
> +config NO_HZ_FULL_ALL
> +       bool "Full dynticks system on all CPUs by default"
> +       depends on NO_HZ_FULL
> +       help
> +         If the user doesn't pass the nohz_full boot option to
> +      define the range of full dynticks CPUs, consider that all
> +      CPUs in the system are full dynticks by default.
> +      Note the boot CPU will still be kept outside the range to
> +      handle the timekeeping duty.
> +
>  config NO_HZ
>       bool "Old Idle dynticks config"
>       depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
> diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
> index d71a5f2..a76e090 100644
> --- a/kernel/time/tick-sched.c
> +++ b/kernel/time/tick-sched.c
> @@ -203,12 +203,31 @@ static int __cpuinit tick_nohz_cpu_down_callback(struct 
> notifier_block *nfb,
>   */
>  static char __initdata nohz_full_buf[NR_CPUS + 1];
> 
> +static int tick_nohz_init_all(void)
> +{
> +     int err = -1;
> +
> +#ifdef CONFIG_NO_HZ_FULL_ALL
> +     if (!alloc_cpumask_var(&nohz_full_mask, GFP_KERNEL)) {
> +             pr_err("NO_HZ: Can't allocate full dynticks cpumask\n");
> +             return err;
> +     }
> +     err = 0;
> +     cpumask_setall(nohz_full_mask);
> +     cpumask_clear_cpu(smp_processor_id(), nohz_full_mask);
> +     have_nohz_full_mask = true;
> +#endif
> +     return err;
> +}
> +
>  void __init tick_nohz_init(void)
>  {
>       int cpu;
> 
> -     if (!have_nohz_full_mask)
> -             return;
> +     if (!have_nohz_full_mask) {
> +             if (tick_nohz_init_all() < 0)
> +                     return;
> +     }
> 
>       cpu_notifier(tick_nohz_cpu_down_callback, 0);
> 
> -- 
> 1.7.5.4
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to