Commit 19390c4d authored by Tejun Heo's avatar Tejun Heo

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: default avatarTejun 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>
parent 3a450de1
...@@ -64,6 +64,7 @@ SECTIONS ...@@ -64,6 +64,7 @@ SECTIONS
__initramfs_end = .; __initramfs_end = .;
#endif #endif
. = ALIGN(4096); . = ALIGN(4096);
__per_cpu_load = .;
__per_cpu_start = .; __per_cpu_start = .;
*(.data.percpu.page_aligned) *(.data.percpu.page_aligned)
*(.data.percpu) *(.data.percpu)
......
...@@ -213,17 +213,9 @@ SECTIONS ...@@ -213,17 +213,9 @@ SECTIONS
{ *(.data.cacheline_aligned) } { *(.data.cacheline_aligned) }
/* Per-cpu data: */ /* Per-cpu data: */
percpu : { } :percpu
. = ALIGN(PERCPU_PAGE_SIZE); . = ALIGN(PERCPU_PAGE_SIZE);
__phys_per_cpu_start = .; PERCPU_VADDR(PERCPU_ADDR, :percpu)
.data.percpu PERCPU_ADDR : AT(__phys_per_cpu_start - LOAD_OFFSET) __phys_per_cpu_start = __per_cpu_load;
{
__per_cpu_start = .;
*(.data.percpu.page_aligned)
*(.data.percpu)
*(.data.percpu.shared_aligned)
__per_cpu_end = .;
}
. = __phys_per_cpu_start + PERCPU_PAGE_SIZE; /* ensure percpu data fits . = __phys_per_cpu_start + PERCPU_PAGE_SIZE; /* ensure percpu data fits
* into percpu page size * into percpu page size
*/ */
......
...@@ -181,14 +181,7 @@ SECTIONS ...@@ -181,14 +181,7 @@ SECTIONS
__initramfs_end = .; __initramfs_end = .;
} }
#endif #endif
. = ALIGN(PAGE_SIZE); PERCPU(PAGE_SIZE)
.data.percpu : AT(ADDR(.data.percpu) - LOAD_OFFSET) {
__per_cpu_start = .;
*(.data.percpu.page_aligned)
*(.data.percpu)
*(.data.percpu.shared_aligned)
__per_cpu_end = .;
}
. = ALIGN(8); . = ALIGN(8);
.machine.desc : AT(ADDR(.machine.desc) - LOAD_OFFSET) { .machine.desc : AT(ADDR(.machine.desc) - LOAD_OFFSET) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment