mirror of
https://github.com/torvalds/linux.git
synced 2024-12-02 00:51:44 +00:00
x86: Define early read-mostly per-cpu macros
Some read-mostly per-cpu data may need to be declared or defined early, so it can be initialized and accessed before per_cpu areas are allocated. Only the data that resides in the per_cpu areas should be read-mostly, as there is little benefit in optimizing cache lines on initialization. Signed-off-by: Ido Yariv <ido@wizery.com> [ Added the missing declarations in !SMP code. ] Signed-off-by: Vlad Zolotarov <vlad@scalemp.com> Acked-by: Shai Fultheim <shai@scalemp.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/46188571.ddB8aVQYWo@vlad Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
b0a4c6f2e3
commit
c35f77417e
@ -551,6 +551,12 @@ DECLARE_PER_CPU(unsigned long, this_cpu_off);
|
|||||||
{ [0 ... NR_CPUS-1] = _initvalue }; \
|
{ [0 ... NR_CPUS-1] = _initvalue }; \
|
||||||
__typeof__(_type) *_name##_early_ptr __refdata = _name##_early_map
|
__typeof__(_type) *_name##_early_ptr __refdata = _name##_early_map
|
||||||
|
|
||||||
|
#define DEFINE_EARLY_PER_CPU_READ_MOSTLY(_type, _name, _initvalue) \
|
||||||
|
DEFINE_PER_CPU_READ_MOSTLY(_type, _name) = _initvalue; \
|
||||||
|
__typeof__(_type) _name##_early_map[NR_CPUS] __initdata = \
|
||||||
|
{ [0 ... NR_CPUS-1] = _initvalue }; \
|
||||||
|
__typeof__(_type) *_name##_early_ptr __refdata = _name##_early_map
|
||||||
|
|
||||||
#define EXPORT_EARLY_PER_CPU_SYMBOL(_name) \
|
#define EXPORT_EARLY_PER_CPU_SYMBOL(_name) \
|
||||||
EXPORT_PER_CPU_SYMBOL(_name)
|
EXPORT_PER_CPU_SYMBOL(_name)
|
||||||
|
|
||||||
@ -559,6 +565,11 @@ DECLARE_PER_CPU(unsigned long, this_cpu_off);
|
|||||||
extern __typeof__(_type) *_name##_early_ptr; \
|
extern __typeof__(_type) *_name##_early_ptr; \
|
||||||
extern __typeof__(_type) _name##_early_map[]
|
extern __typeof__(_type) _name##_early_map[]
|
||||||
|
|
||||||
|
#define DECLARE_EARLY_PER_CPU_READ_MOSTLY(_type, _name) \
|
||||||
|
DECLARE_PER_CPU_READ_MOSTLY(_type, _name); \
|
||||||
|
extern __typeof__(_type) *_name##_early_ptr; \
|
||||||
|
extern __typeof__(_type) _name##_early_map[]
|
||||||
|
|
||||||
#define early_per_cpu_ptr(_name) (_name##_early_ptr)
|
#define early_per_cpu_ptr(_name) (_name##_early_ptr)
|
||||||
#define early_per_cpu_map(_name, _idx) (_name##_early_map[_idx])
|
#define early_per_cpu_map(_name, _idx) (_name##_early_map[_idx])
|
||||||
#define early_per_cpu(_name, _cpu) \
|
#define early_per_cpu(_name, _cpu) \
|
||||||
@ -570,12 +581,18 @@ DECLARE_PER_CPU(unsigned long, this_cpu_off);
|
|||||||
#define DEFINE_EARLY_PER_CPU(_type, _name, _initvalue) \
|
#define DEFINE_EARLY_PER_CPU(_type, _name, _initvalue) \
|
||||||
DEFINE_PER_CPU(_type, _name) = _initvalue
|
DEFINE_PER_CPU(_type, _name) = _initvalue
|
||||||
|
|
||||||
|
#define DEFINE_EARLY_PER_CPU_READ_MOSTLY(_type, _name, _initvalue) \
|
||||||
|
DEFINE_PER_CPU_READ_MOSTLY(_type, _name) = _initvalue
|
||||||
|
|
||||||
#define EXPORT_EARLY_PER_CPU_SYMBOL(_name) \
|
#define EXPORT_EARLY_PER_CPU_SYMBOL(_name) \
|
||||||
EXPORT_PER_CPU_SYMBOL(_name)
|
EXPORT_PER_CPU_SYMBOL(_name)
|
||||||
|
|
||||||
#define DECLARE_EARLY_PER_CPU(_type, _name) \
|
#define DECLARE_EARLY_PER_CPU(_type, _name) \
|
||||||
DECLARE_PER_CPU(_type, _name)
|
DECLARE_PER_CPU(_type, _name)
|
||||||
|
|
||||||
|
#define DECLARE_EARLY_PER_CPU_READ_MOSTLY(_type, _name) \
|
||||||
|
DECLARE_PER_CPU_READ_MOSTLY(_type, _name)
|
||||||
|
|
||||||
#define early_per_cpu(_name, _cpu) per_cpu(_name, _cpu)
|
#define early_per_cpu(_name, _cpu) per_cpu(_name, _cpu)
|
||||||
#define early_per_cpu_ptr(_name) NULL
|
#define early_per_cpu_ptr(_name) NULL
|
||||||
/* no early_per_cpu_map() */
|
/* no early_per_cpu_map() */
|
||||||
|
Loading…
Reference in New Issue
Block a user