Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f98823ac authored by Frederic Weisbecker's avatar Frederic Weisbecker
Browse files

nohz: New option to default all CPUs in full dynticks range



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: default avatarIngo Molnar <mingo@kernel.org>
Reviewed-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Chris Metcalf <cmetcalf@tilera.com>
Cc: Christoph Lameter <cl@linux.com>
Cc: Geoff Levand <geoff@infradead.org>
Cc: Gilad Ben Yossef <gilad@benyossef.com>
Cc: Hakan Akkan <hakanakkan@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Kevin Hilman <khilman@linaro.org>
Cc: Li Zhong <zhong@linux.vnet.ibm.com>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Paul Gortmaker <paul.gortmaker@windriver.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
parent d1e43fa5
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -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
+21 −2
Original line number Diff line number Diff line
@@ -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)
	if (!have_nohz_full_mask) {
		if (tick_nohz_init_all() < 0)
			return;
	}

	cpu_notifier(tick_nohz_cpu_down_callback, 0);