diff options
| author | Tejun Heo <tj@kernel.org> | 2009-03-10 03:27:48 -0400 |
|---|---|---|
| committer | Tejun Heo <tj@kernel.org> | 2009-03-10 03:27:48 -0400 |
| commit | 19390c4d03688b9940a1836f06b76ec622b9cd6f (patch) | |
| tree | 16ab43f29b28e6b65ea36d4bc72a98e384d2c343 | |
| parent | 3a450de1365d20afde406f0d9b2931a5e4a4fd6a (diff) | |
linker script: define __per_cpu_load on all SMP capable archs
Impact: __per_cpu_load available on all SMP capable archs
Percpu now requires three symbols to be defined - __per_cpu_load,
__per_cpu_start and __per_cpu_end. There were three archs which
didn't have it. Update them as follows.
* powerpc: can use generic PERCPU() macro. Compile tested for
powerpc32, compile/boot tested for powerpc64.
* ia64: can use generic PERCPU_VADDR() macro. __phys_per_cpu_start is
identical to __per_cpu_load. Compile tested and symbol table looks
identical after the change except for the additional __per_cpu_load.
* arm: added explicit __per_cpu_load definition. Currently uses
unified .init output section so can't use the generic macro. Dunno
whether the unified .init ouput section is required by arch
peculiarity so I left it alone. Please break it up and use PERCPU()
if possible.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Pat Gefre <pfg@sgi.com>
Cc: Russell King <rmk@arm.linux.org.uk>
| -rw-r--r-- | arch/arm/kernel/vmlinux.lds.S | 1 | ||||
| -rw-r--r-- | arch/ia64/kernel/vmlinux.lds.S | 12 | ||||
| -rw-r--r-- | arch/powerpc/kernel/vmlinux.lds.S | 9 |
3 files changed, 4 insertions, 18 deletions
diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S index 85598f7da407..1602373e539c 100644 --- a/arch/arm/kernel/vmlinux.lds.S +++ b/arch/arm/kernel/vmlinux.lds.S | |||
| @@ -64,6 +64,7 @@ SECTIONS | |||
| 64 | __initramfs_end = .; | 64 | __initramfs_end = .; |
| 65 | #endif | 65 | #endif |
| 66 | . = ALIGN(4096); | 66 | . = ALIGN(4096); |
| 67 | __per_cpu_load = .; | ||
| 67 | __per_cpu_start = .; | 68 | __per_cpu_start = .; |
| 68 | *(.data.percpu.page_aligned) | 69 | *(.data.percpu.page_aligned) |
| 69 | *(.data.percpu) | 70 | *(.data.percpu) |
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index f45e4e508eca..3765efc5f963 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
| @@ -213,17 +213,9 @@ SECTIONS | |||
| 213 | { *(.data.cacheline_aligned) } | 213 | { *(.data.cacheline_aligned) } |
| 214 | 214 | ||
| 215 | /* Per-cpu data: */ | 215 | /* Per-cpu data: */ |
| 216 | percpu : { } :percpu | ||
| 217 | . = ALIGN(PERCPU_PAGE_SIZE); | 216 | . = ALIGN(PERCPU_PAGE_SIZE); |
| 218 | __phys_per_cpu_start = .; | 217 | PERCPU_VADDR(PERCPU_ADDR, :percpu) |
| 219 | .data.percpu PERCPU_ADDR : AT(__phys_per_cpu_start - LOAD_OFFSET) | 218 | __phys_per_cpu_start = __per_cpu_load; |
| 220 | { | ||
| 221 | __per_cpu_start = .; | ||
| 222 | *(.data.percpu.page_aligned) | ||
| 223 | *(.data.percpu) | ||
| 224 | *(.data.percpu.shared_aligned) | ||
| 225 | __per_cpu_end = .; | ||
| 226 | } | ||
| 227 | . = __phys_per_cpu_start + PERCPU_PAGE_SIZE; /* ensure percpu data fits | 219 | . = __phys_per_cpu_start + PERCPU_PAGE_SIZE; /* ensure percpu data fits |
| 228 | * into percpu page size | 220 | * into percpu page size |
| 229 | */ | 221 | */ |
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S index 295ccc5e86b1..67f07f453385 100644 --- a/arch/powerpc/kernel/vmlinux.lds.S +++ b/arch/powerpc/kernel/vmlinux.lds.S | |||
| @@ -181,14 +181,7 @@ SECTIONS | |||
| 181 | __initramfs_end = .; | 181 | __initramfs_end = .; |
| 182 | } | 182 | } |
| 183 | #endif | 183 | #endif |
| 184 | . = ALIGN(PAGE_SIZE); | 184 | PERCPU(PAGE_SIZE) |
| 185 | .data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) { | ||
| 186 | __per_cpu_start = .; | ||
| 187 | *(.data.percpu.page_aligned) | ||
| 188 | *(.data.percpu) | ||
| 189 | *(.data.percpu.shared_aligned) | ||
| 190 | __per_cpu_end = .; | ||
| 191 | } | ||
| 192 | 185 | ||
| 193 | . = ALIGN(8); | 186 | . = ALIGN(8); |
| 194 | .machine.desc : AT(ADDR(.machine.desc) - LOAD_OFFSET) { | 187 | .machine.desc : AT(ADDR(.machine.desc) - LOAD_OFFSET) { |
