debuggers.hg
view xen/include/asm-x86/percpu.h @ 19964:3952eaeb70b0
Introduce and use a per-CPU read-mostly sub-section
Since mixing data that only gets setup once and then (perhaps
frequently) gets read by remote CPUs with data that the local CPU may
modify (again, perhaps frequently) still causes undesirable cache
protocol related bus traffic, separate the former class of objects
from the latter.
These objects converted here are just picked based on their write-once
(or write-very-rarely) properties; perhaps some more adjustments may
be desirable subsequently. The primary users of the new sub-section
will result from the next patch.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Since mixing data that only gets setup once and then (perhaps
frequently) gets read by remote CPUs with data that the local CPU may
modify (again, perhaps frequently) still causes undesirable cache
protocol related bus traffic, separate the former class of objects
from the latter.
These objects converted here are just picked based on their write-once
(or write-very-rarely) properties; perhaps some more adjustments may
be desirable subsequently. The primary users of the new sub-section
will result from the next patch.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
author | Keir Fraser <keir.fraser@citrix.com> |
---|---|
date | Mon Jul 13 11:32:41 2009 +0100 (2009-07-13) |
parents | 3313efd1c367 |
children | 9d3308d7be90 |
line source
1 #ifndef __X86_PERCPU_H__
2 #define __X86_PERCPU_H__
4 #define PERCPU_SHIFT 12
5 #define PERCPU_SIZE (1UL << PERCPU_SHIFT)
7 /* Separate out the type, so (int[3], foo) works. */
8 #define __DEFINE_PER_CPU(type, name, suffix) \
9 __attribute__((__section__(".data.percpu" #suffix))) \
10 __typeof__(type) per_cpu_##name
12 /* var is in discarded region: offset to particular copy we want */
13 #define per_cpu(var, cpu) \
14 (*RELOC_HIDE(&per_cpu__##var, ((unsigned int)(cpu))<<PERCPU_SHIFT))
15 #define __get_cpu_var(var) \
16 (per_cpu(var, smp_processor_id()))
18 #define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name
20 #endif /* __X86_PERCPU_H__ */