aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2014-08-17 16:02:55 -0400
committerFrederic Weisbecker <fweisbec@gmail.com>2014-09-13 12:46:40 -0400
commit4327b15f64b2580dad40d2674d50fc44f1b699c1 (patch)
tree285a82c39893f06ad9a2e705db492e792e583ed4 /kernel
parent3631073659d0aafeaa52227bb61a100efaf901dc (diff)
nohz: Consolidate nohz full init code
The supports for CONFIG_NO_HZ_FULL_ALL=y and the nohz_full= kernel parameter both have their own way to do the same thing: allocate full dynticks cpumasks, fill them and initialize some state variables. Lets consolidate that all in the same place. While at it, convert some regular printk message to warnings when fundamental allocations fail. Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Ingo Molnar <mingo@kernel.org> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/time/tick-sched.c38
1 files changed, 19 insertions, 19 deletions
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index f654a8a298fa..eb4af016ac65 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -295,22 +295,12 @@ out:
295/* Parse the boot-time nohz CPU list from the kernel parameters. */ 295/* Parse the boot-time nohz CPU list from the kernel parameters. */
296static int __init tick_nohz_full_setup(char *str) 296static int __init tick_nohz_full_setup(char *str)
297{ 297{
298 int cpu;
299
300 alloc_bootmem_cpumask_var(&tick_nohz_full_mask); 298 alloc_bootmem_cpumask_var(&tick_nohz_full_mask);
301 alloc_bootmem_cpumask_var(&housekeeping_mask);
302 if (cpulist_parse(str, tick_nohz_full_mask) < 0) { 299 if (cpulist_parse(str, tick_nohz_full_mask) < 0) {
303 pr_warning("NOHZ: Incorrect nohz_full cpumask\n"); 300 pr_warning("NOHZ: Incorrect nohz_full cpumask\n");
301 free_bootmem_cpumask_var(tick_nohz_full_mask);
304 return 1; 302 return 1;
305 } 303 }
306
307 cpu = smp_processor_id();
308 if (cpumask_test_cpu(cpu, tick_nohz_full_mask)) {
309 pr_warning("NO_HZ: Clearing %d from nohz_full range for timekeeping\n", cpu);
310 cpumask_clear_cpu(cpu, tick_nohz_full_mask);
311 }
312 cpumask_andnot(housekeeping_mask,
313 cpu_possible_mask, tick_nohz_full_mask);
314 tick_nohz_full_running = true; 304 tick_nohz_full_running = true;
315 305
316 return 1; 306 return 1;
@@ -349,18 +339,11 @@ static int tick_nohz_init_all(void)
349 339
350#ifdef CONFIG_NO_HZ_FULL_ALL 340#ifdef CONFIG_NO_HZ_FULL_ALL
351 if (!alloc_cpumask_var(&tick_nohz_full_mask, GFP_KERNEL)) { 341 if (!alloc_cpumask_var(&tick_nohz_full_mask, GFP_KERNEL)) {
352 pr_err("NO_HZ: Can't allocate full dynticks cpumask\n"); 342 WARN(1, "NO_HZ: Can't allocate full dynticks cpumask\n");
353 return err;
354 }
355 if (!alloc_cpumask_var(&housekeeping_mask, GFP_KERNEL)) {
356 pr_err("NO_HZ: Can't allocate not-full dynticks cpumask\n");
357 return err; 343 return err;
358 } 344 }
359 err = 0; 345 err = 0;
360 cpumask_setall(tick_nohz_full_mask); 346 cpumask_setall(tick_nohz_full_mask);
361 cpumask_clear_cpu(smp_processor_id(), tick_nohz_full_mask);
362 cpumask_clear(housekeeping_mask);
363 cpumask_set_cpu(smp_processor_id(), housekeeping_mask);
364 tick_nohz_full_running = true; 347 tick_nohz_full_running = true;
365#endif 348#endif
366 return err; 349 return err;
@@ -375,6 +358,23 @@ void __init tick_nohz_init(void)
375 return; 358 return;
376 } 359 }
377 360
361 if (!alloc_cpumask_var(&housekeeping_mask, GFP_KERNEL)) {
362 WARN(1, "NO_HZ: Can't allocate not-full dynticks cpumask\n");
363 cpumask_clear(tick_nohz_full_mask);
364 tick_nohz_full_running = false;
365 return;
366 }
367
368 cpu = smp_processor_id();
369
370 if (cpumask_test_cpu(cpu, tick_nohz_full_mask)) {
371 pr_warning("NO_HZ: Clearing %d from nohz_full range for timekeeping\n", cpu);
372 cpumask_clear_cpu(cpu, tick_nohz_full_mask);
373 }
374
375 cpumask_andnot(housekeeping_mask,
376 cpu_possible_mask, tick_nohz_full_mask);
377
378 for_each_cpu(cpu, tick_nohz_full_mask) 378 for_each_cpu(cpu, tick_nohz_full_mask)
379 context_tracking_cpu_set(cpu); 379 context_tracking_cpu_set(cpu);
380 380