Commit a80e49e2cc3145af014a8ae44f575829cc236192

Authored by Frederic Weisbecker
1 parent 2ce7598c9a

nohz: Move nohz full init call to tick init

This way we unbloat a bit main.c and more importantly we initialize
nohz full after init_IRQ(). This dependency will be needed in further
patches because nohz full needs irq work to raise its own IRQ.
Information about the support for this ability on ARM64 is obtained on
init_IRQ() which initialize the pointer to __smp_call_function.

Since tick_init() is called right after init_IRQ(), this is a good place
to call tick_nohz_init() and prepare for that dependency.

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>

Showing 4 changed files with 8 additions and 3 deletions Side-by-side Diff

include/linux/tick.h
... ... @@ -181,14 +181,12 @@
181 181 return cpumask_test_cpu(cpu, tick_nohz_full_mask);
182 182 }
183 183  
184   -extern void tick_nohz_init(void);
185 184 extern void __tick_nohz_full_check(void);
186 185 extern void tick_nohz_full_kick(void);
187 186 extern void tick_nohz_full_kick_cpu(int cpu);
188 187 extern void tick_nohz_full_kick_all(void);
189 188 extern void __tick_nohz_task_switch(struct task_struct *tsk);
190 189 #else
191   -static inline void tick_nohz_init(void) { }
192 190 static inline bool tick_nohz_full_enabled(void) { return false; }
193 191 static inline bool tick_nohz_full_cpu(int cpu) { return false; }
194 192 static inline void __tick_nohz_full_check(void) { }
... ... @@ -577,7 +577,6 @@
577 577 local_irq_disable();
578 578 idr_init_cache();
579 579 rcu_init();
580   - tick_nohz_init();
581 580 context_tracking_init();
582 581 radix_tree_init();
583 582 /* init some links before init_ISA_irqs() */
kernel/time/tick-common.c
... ... @@ -400,5 +400,6 @@
400 400 void __init tick_init(void)
401 401 {
402 402 tick_broadcast_init();
  403 + tick_nohz_init();
403 404 }
kernel/time/tick-internal.h
... ... @@ -99,6 +99,13 @@
99 99 static inline bool tick_broadcast_oneshot_available(void) { return false; }
100 100 #endif /* !TICK_ONESHOT */
101 101  
  102 +/* NO_HZ_FULL internal */
  103 +#ifdef CONFIG_NO_HZ_FULL
  104 +extern void tick_nohz_init(void);
  105 +# else
  106 +static inline void tick_nohz_init(void) { }
  107 +#endif
  108 +
102 109 /*
103 110 * Broadcasting support
104 111 */