timer: Allocate per-cpu tvec_base's statically
authorPeter Zijlstra <peterz@infradead.org>
Tue, 31 Mar 2015 15:19:00 +0000 (20:49 +0530)
committerIngo Molnar <mingo@kernel.org>
Thu, 2 Apr 2015 15:46:00 +0000 (17:46 +0200)
commitb337a9380f7effd60d082569dd7e0b97a7549730
tree2cf1f6d3e69a57782d3d0ed71533aace12e00150
parent345527b1edce8df719e0884500c76832a18211c3
timer: Allocate per-cpu tvec_base's statically

Memory for the 'tvec_base' array is allocated separately for the boot CPU (statically)
and non-boot CPUs (dynamically).

The reason is because __TIMER_INITIALIZER() needs to set ->base to a
valid pointer (because we've made NULL special, hint: lock_timer_base())
and we cannot get a compile time pointer to per-cpu entries because we
don't know where we'll map the section, even for the boot cpu.

This can be simplified a bit by statically allocating per-cpu memory.
The only disadvantage is that memory for one of the structures will stay
unused, i.e. for the boot CPU, which uses boot_tvec_bases.

This will also guarantee that tvec_base is cacheline aligned. Even
though tvec_base has ____cacheline_aligned stuck on, kzalloc_node() does
not actually respect that (but guarantees a minimum u64 alignment).

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/17cdf560f2727f687ab159707d0aa591f8a2f82d.1427814611.git.viresh.kumar@linaro.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
kernel/time/timer.c