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: Ingo Molnar <mingo@kernel.org> Reviewed-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Signed-off-by: Frederic 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>
This commit is contained in:
parent
d1e43fa5f8
commit
f98823ac75
@ -128,6 +128,16 @@ config NO_HZ_FULL
|
|||||||
|
|
||||||
endchoice
|
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
|
config NO_HZ
|
||||||
bool "Old Idle dynticks config"
|
bool "Old Idle dynticks config"
|
||||||
depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
|
depends on !ARCH_USES_GETTIMEOFFSET && GENERIC_CLOCKEVENTS
|
||||||
|
@ -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 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)
|
void __init tick_nohz_init(void)
|
||||||
{
|
{
|
||||||
int cpu;
|
int cpu;
|
||||||
|
|
||||||
if (!have_nohz_full_mask)
|
if (!have_nohz_full_mask) {
|
||||||
|
if (tick_nohz_init_all() < 0)
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
cpu_notifier(tick_nohz_cpu_down_callback, 0);
|
cpu_notifier(tick_nohz_cpu_down_callback, 0);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user