diff options
| author | Brian Gerst <brgerst@gmail.com> | 2009-01-18 22:21:27 -0500 |
|---|---|---|
| committer | Tejun Heo <tj@kernel.org> | 2009-01-19 22:29:19 -0500 |
| commit | 0bd74fa8e29dcad98f7e8ffe01ec05fb3326abaf (patch) | |
| tree | 8b2768ec721d649e1c9d0c8cff4caf44a5326263 /include | |
| parent | 8ce031972b40da58c268caba8c5ea3c0856d7131 (diff) | |
percpu: refactor percpu.h
Impact: cleanup
Refactor the DEFINE_PER_CPU_* macros and add .data.percpu.first
section.
Signed-off-by: Brian Gerst <brgerst@gmail.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-generic/vmlinux.lds.h | 1 | ||||
| -rw-r--r-- | include/linux/percpu.h | 41 |
2 files changed, 24 insertions, 18 deletions
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index aa6b9b1b30b5..32bbf50d3055 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
| @@ -486,6 +486,7 @@ | |||
| 486 | */ | 486 | */ |
| 487 | #define PERCPU_VADDR(vaddr, phdr) \ | 487 | #define PERCPU_VADDR(vaddr, phdr) \ |
| 488 | PERCPU_PROLOG(vaddr) \ | 488 | PERCPU_PROLOG(vaddr) \ |
| 489 | *(.data.percpu.first) \ | ||
| 489 | *(.data.percpu.page_aligned) \ | 490 | *(.data.percpu.page_aligned) \ |
| 490 | *(.data.percpu) \ | 491 | *(.data.percpu) \ |
| 491 | *(.data.percpu.shared_aligned) \ | 492 | *(.data.percpu.shared_aligned) \ |
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index 9f2a3751873a..0e24202b5a4e 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
| @@ -9,34 +9,39 @@ | |||
| 9 | #include <asm/percpu.h> | 9 | #include <asm/percpu.h> |
| 10 | 10 | ||
| 11 | #ifdef CONFIG_SMP | 11 | #ifdef CONFIG_SMP |
| 12 | #define DEFINE_PER_CPU(type, name) \ | 12 | #define PER_CPU_BASE_SECTION ".data.percpu" |
| 13 | __attribute__((__section__(".data.percpu"))) \ | ||
| 14 | PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name | ||
| 15 | 13 | ||
| 16 | #ifdef MODULE | 14 | #ifdef MODULE |
| 17 | #define SHARED_ALIGNED_SECTION ".data.percpu" | 15 | #define PER_CPU_SHARED_ALIGNED_SECTION "" |
| 18 | #else | 16 | #else |
| 19 | #define SHARED_ALIGNED_SECTION ".data.percpu.shared_aligned" | 17 | #define PER_CPU_SHARED_ALIGNED_SECTION ".shared_aligned" |
| 20 | #endif | 18 | #endif |
| 19 | #define PER_CPU_FIRST_SECTION ".first" | ||
| 21 | 20 | ||
| 22 | #define DEFINE_PER_CPU_SHARED_ALIGNED(type, name) \ | 21 | #else |
| 23 | __attribute__((__section__(SHARED_ALIGNED_SECTION))) \ | 22 | |
| 24 | PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name \ | 23 | #define PER_CPU_BASE_SECTION ".data" |
| 25 | ____cacheline_aligned_in_smp | 24 | #define PER_CPU_SHARED_ALIGNED_SECTION "" |
| 25 | #define PER_CPU_FIRST_SECTION "" | ||
| 26 | |||
| 27 | #endif | ||
| 26 | 28 | ||
| 27 | #define DEFINE_PER_CPU_PAGE_ALIGNED(type, name) \ | 29 | #define DEFINE_PER_CPU_SECTION(type, name, section) \ |
| 28 | __attribute__((__section__(".data.percpu.page_aligned"))) \ | 30 | __attribute__((__section__(PER_CPU_BASE_SECTION section))) \ |
| 29 | PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name | 31 | PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name |
| 30 | #else | 32 | |
| 31 | #define DEFINE_PER_CPU(type, name) \ | 33 | #define DEFINE_PER_CPU(type, name) \ |
| 32 | PER_CPU_ATTRIBUTES __typeof__(type) per_cpu__##name | 34 | DEFINE_PER_CPU_SECTION(type, name, "") |
| 33 | 35 | ||
| 34 | #define DEFINE_PER_CPU_SHARED_ALIGNED(type, name) \ | 36 | #define DEFINE_PER_CPU_SHARED_ALIGNED(type, name) \ |
| 35 | DEFINE_PER_CPU(type, name) | 37 | DEFINE_PER_CPU_SECTION(type, name, PER_CPU_SHARED_ALIGNED_SECTION) \ |
| 38 | ____cacheline_aligned_in_smp | ||
| 36 | 39 | ||
| 37 | #define DEFINE_PER_CPU_PAGE_ALIGNED(type, name) \ | 40 | #define DEFINE_PER_CPU_PAGE_ALIGNED(type, name) \ |
| 38 | DEFINE_PER_CPU(type, name) | 41 | DEFINE_PER_CPU_SECTION(type, name, ".page_aligned") |
| 39 | #endif | 42 | |
| 43 | #define DEFINE_PER_CPU_FIRST(type, name) \ | ||
| 44 | DEFINE_PER_CPU_SECTION(type, name, PER_CPU_FIRST_SECTION) | ||
| 40 | 45 | ||
| 41 | #define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var) | 46 | #define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var) |
| 42 | #define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var) | 47 | #define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var) |
