Per-cpu SMP unification
Subsystems (2)
PATCH 2/3 Per-cpu SMP unification
[ Untested on ia64, but fairly trivial if I've broken something ].
Name: Unification of per-cpu headers for SMP
Author: Rusty Russell
Status: Trivial
Depends: Misc/percpu-up-unify.patch.gz
D: There's really only one sane way to implement accessing other CPU's
D: variables, there's no real reason for archs to use a method other
D: than __per_cpu_offset[], so move that from asm-*/percpu.h to
D: linux/percpu.h.
include/asm-generic/percpu.h +0 -4
@@ -5,16 +5,12 @@#define __GENERIC_PER_CPU#ifdef CONFIG_SMP -extern unsigned long __per_cpu_offset[NR_CPUS ]; -/* Separate out the type, so (int[3], foo) works. */ #ifndef MODULE #define DEFINE_PER_CPU (type, name) \ __attribute__((__section__(".data.percpu"))) __typeof__(type) name##__per_cpu#endif -/* var is in discarded region: offset to particular copy we want */ -#define per_cpu (var, cpu) (*RELOC_HIDE(&var##__per_cpu, __per_cpu_offset[cpu]))#define __get_cpu_var (var) per_cpu(var, smp_processor_id())#endif /* SMP */
include/asm-ia64/percpu.h +0 -3
@@ -18,15 +18,12 @@#include <linux/threads.h> #ifdef CONFIG_SMP -extern unsigned long __per_cpu_offset[NR_CPUS ]; -#ifndef MODULE #define DEFINE_PER_CPU (type, name) \ __attribute__((__section__(".data.percpu"))) __typeof__(type) name##__per_cpu#endif #define __get_cpu_var (var) (var##__per_cpu) -#define per_cpu (var, cpu) (*RELOC_HIDE(&var##__per_cpu, __per_cpu_offset[cpu]))#endif /* CONFIG_SMP */ extern void setup_per_cpu_areas (void );
include/linux/percpu.h +4 -0
@@ -10,6 +10,10 @@ #ifdef CONFIG_SMP +/* var is in discarded region: offset to particular copy we want */ +#define per_cpu(var, cpu) (*RELOC_HIDE(&var##__per_cpu, __per_cpu_offset[cpu])) +extern unsigned long __per_cpu_offset[NR_CPUS]; + struct percpu_data { void *ptrs[NR_CPUS]; void *blkp;
--
Anyone who quotes me in their sig is an idiot. -- Rusty Russell.