diff options
author | Eric Dumazet <dada1@cosmosbay.com> | 2008-05-14 19:05:51 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-05-14 22:11:14 -0400 |
commit | 44c81433e8b05dbc85985d939046f10f95901184 (patch) | |
tree | 861801baf94a47c38f449f99aea6b5a0395f2f10 /include/linux/percpu.h | |
parent | fd8a4221ad76df700ff34875c9fbc42302aa4ba3 (diff) |
per_cpu: fix DEFINE_PER_CPU_SHARED_ALIGNED for modules
Current module loader lookups ".data.percpu" ELF section to perform
per_cpu relocation. But DEFINE_PER_CPU_SHARED_ALIGNED() uses another
section (".data.percpu.shared_aligned"), currently only handled in
vmlinux.lds, not by module loader.
To correct this problem, instead of adding logic into module loader, or
using at build time a module.lds file for all arches to group
".data.percpu.shared_aligned" into ".data.percpu", just use ".data.percpu"
for modules.
Alignment requirements are correctly handled by ld and module loader.
Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux/percpu.h')
-rw-r--r-- | include/linux/percpu.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index d746a2abb322..4cdd393e71e1 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
@@ -13,8 +13,14 @@ | |||
13 | __attribute__((__section__(".data.percpu"))) \ | 13 | __attribute__((__section__(".data.percpu"))) \ |
14 | PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name | 14 | PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name |
15 | 15 | ||
16 | #ifdef MODULE | ||
17 | #define SHARED_ALIGNED_SECTION ".data.percpu" | ||
18 | #else | ||
19 | #define SHARED_ALIGNED_SECTION ".data.percpu.shared_aligned" | ||
20 | #endif | ||
21 | |||
16 | #define DEFINE_PER_CPU_SHARED_ALIGNED(type, name) \ | 22 | #define DEFINE_PER_CPU_SHARED_ALIGNED(type, name) \ |
17 | __attribute__((__section__(".data.percpu.shared_aligned"))) \ | 23 | __attribute__((__section__(SHARED_ALIGNED_SECTION))) \ |
18 | PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name \ | 24 | PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name \ |
19 | ____cacheline_aligned_in_smp | 25 | ____cacheline_aligned_in_smp |
20 | #else | 26 | #else |