aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/time/tick-sched.c44
1 files changed, 22 insertions, 22 deletions
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index 91a2528b5f44..b28dee43e644 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -149,8 +149,8 @@ static void tick_sched_handle(struct tick_sched *ts, struct pt_regs *regs)
149} 149}
150 150
151#ifdef CONFIG_NO_HZ_FULL 151#ifdef CONFIG_NO_HZ_FULL
152static cpumask_var_t nohz_full_mask; 152static cpumask_var_t tick_nohz_full_mask;
153bool have_nohz_full_mask; 153bool tick_nohz_full_running;
154 154
155static bool can_stop_full_tick(void) 155static bool can_stop_full_tick(void)
156{ 156{
@@ -183,7 +183,7 @@ static bool can_stop_full_tick(void)
183 * Don't allow the user to think they can get 183 * Don't allow the user to think they can get
184 * full NO_HZ with this machine. 184 * full NO_HZ with this machine.
185 */ 185 */
186 WARN_ONCE(have_nohz_full_mask, 186 WARN_ONCE(tick_nohz_full_running,
187 "NO_HZ FULL will not work with unstable sched clock"); 187 "NO_HZ FULL will not work with unstable sched clock");
188 return false; 188 return false;
189 } 189 }
@@ -240,11 +240,11 @@ static void nohz_full_kick_ipi(void *info)
240 */ 240 */
241void tick_nohz_full_kick_all(void) 241void tick_nohz_full_kick_all(void)
242{ 242{
243 if (!have_nohz_full_mask) 243 if (!tick_nohz_full_running)
244 return; 244 return;
245 245
246 preempt_disable(); 246 preempt_disable();
247 smp_call_function_many(nohz_full_mask, 247 smp_call_function_many(tick_nohz_full_mask,
248 nohz_full_kick_ipi, NULL, false); 248 nohz_full_kick_ipi, NULL, false);
249 preempt_enable(); 249 preempt_enable();
250} 250}
@@ -272,10 +272,10 @@ out:
272 272
273int tick_nohz_full_cpu(int cpu) 273int tick_nohz_full_cpu(int cpu)
274{ 274{
275 if (!have_nohz_full_mask) 275 if (!tick_nohz_full_running)
276 return 0; 276 return 0;
277 277
278 return cpumask_test_cpu(cpu, nohz_full_mask); 278 return cpumask_test_cpu(cpu, tick_nohz_full_mask);
279} 279}
280 280
281/* Parse the boot-time nohz CPU list from the kernel parameters. */ 281/* Parse the boot-time nohz CPU list from the kernel parameters. */
@@ -283,18 +283,18 @@ static int __init tick_nohz_full_setup(char *str)
283{ 283{
284 int cpu; 284 int cpu;
285 285
286 alloc_bootmem_cpumask_var(&nohz_full_mask); 286 alloc_bootmem_cpumask_var(&tick_nohz_full_mask);
287 if (cpulist_parse(str, nohz_full_mask) < 0) { 287 if (cpulist_parse(str, tick_nohz_full_mask) < 0) {
288 pr_warning("NOHZ: Incorrect nohz_full cpumask\n"); 288 pr_warning("NOHZ: Incorrect nohz_full cpumask\n");
289 return 1; 289 return 1;
290 } 290 }
291 291
292 cpu = smp_processor_id(); 292 cpu = smp_processor_id();
293 if (cpumask_test_cpu(cpu, nohz_full_mask)) { 293 if (cpumask_test_cpu(cpu, tick_nohz_full_mask)) {
294 pr_warning("NO_HZ: Clearing %d from nohz_full range for timekeeping\n", cpu); 294 pr_warning("NO_HZ: Clearing %d from nohz_full range for timekeeping\n", cpu);
295 cpumask_clear_cpu(cpu, nohz_full_mask); 295 cpumask_clear_cpu(cpu, tick_nohz_full_mask);
296 } 296 }
297 have_nohz_full_mask = true; 297 tick_nohz_full_running = true;
298 298
299 return 1; 299 return 1;
300} 300}
@@ -312,7 +312,7 @@ static int tick_nohz_cpu_down_callback(struct notifier_block *nfb,
312 * If we handle the timekeeping duty for full dynticks CPUs, 312 * If we handle the timekeeping duty for full dynticks CPUs,
313 * we can't safely shutdown that CPU. 313 * we can't safely shutdown that CPU.
314 */ 314 */
315 if (have_nohz_full_mask && tick_do_timer_cpu == cpu) 315 if (tick_nohz_full_running && tick_do_timer_cpu == cpu)
316 return NOTIFY_BAD; 316 return NOTIFY_BAD;
317 break; 317 break;
318 } 318 }
@@ -331,14 +331,14 @@ static int tick_nohz_init_all(void)
331 int err = -1; 331 int err = -1;
332 332
333#ifdef CONFIG_NO_HZ_FULL_ALL 333#ifdef CONFIG_NO_HZ_FULL_ALL
334 if (!alloc_cpumask_var(&nohz_full_mask, GFP_KERNEL)) { 334 if (!alloc_cpumask_var(&tick_nohz_full_mask, GFP_KERNEL)) {
335 pr_err("NO_HZ: Can't allocate full dynticks cpumask\n"); 335 pr_err("NO_HZ: Can't allocate full dynticks cpumask\n");
336 return err; 336 return err;
337 } 337 }
338 err = 0; 338 err = 0;
339 cpumask_setall(nohz_full_mask); 339 cpumask_setall(tick_nohz_full_mask);
340 cpumask_clear_cpu(smp_processor_id(), nohz_full_mask); 340 cpumask_clear_cpu(smp_processor_id(), tick_nohz_full_mask);
341 have_nohz_full_mask = true; 341 tick_nohz_full_running = true;
342#endif 342#endif
343 return err; 343 return err;
344} 344}
@@ -347,20 +347,20 @@ void __init tick_nohz_init(void)
347{ 347{
348 int cpu; 348 int cpu;
349 349
350 if (!have_nohz_full_mask) { 350 if (!tick_nohz_full_running) {
351 if (tick_nohz_init_all() < 0) 351 if (tick_nohz_init_all() < 0)
352 return; 352 return;
353 } 353 }
354 354
355 for_each_cpu(cpu, nohz_full_mask) 355 for_each_cpu(cpu, tick_nohz_full_mask)
356 context_tracking_cpu_set(cpu); 356 context_tracking_cpu_set(cpu);
357 357
358 cpu_notifier(tick_nohz_cpu_down_callback, 0); 358 cpu_notifier(tick_nohz_cpu_down_callback, 0);
359 cpulist_scnprintf(nohz_full_buf, sizeof(nohz_full_buf), nohz_full_mask); 359 cpulist_scnprintf(nohz_full_buf, sizeof(nohz_full_buf), tick_nohz_full_mask);
360 pr_info("NO_HZ: Full dynticks CPUs: %s.\n", nohz_full_buf); 360 pr_info("NO_HZ: Full dynticks CPUs: %s.\n", nohz_full_buf);
361} 361}
362#else 362#else
363#define have_nohz_full_mask (0) 363#define tick_nohz_full_running (0)
364#endif 364#endif
365 365
366/* 366/*
@@ -738,7 +738,7 @@ static bool can_stop_idle_tick(int cpu, struct tick_sched *ts)
738 return false; 738 return false;
739 } 739 }
740 740
741 if (have_nohz_full_mask) { 741 if (tick_nohz_full_running) {
742 /* 742 /*
743 * Keep the tick alive to guarantee timekeeping progression 743 * Keep the tick alive to guarantee timekeeping progression
744 * if there are full dynticks CPUs around 744 * if there are full dynticks CPUs around