The two percpu helper macros have the section names duplicated. So create
a new define to merge the two. This also allows arches who need to link
things more directly themselves to avoid duplicating the input sections in
their linker script.
Signed-off-by: Mike Frysinger <[email protected]>
---
include/asm-generic/vmlinux.lds.h | 34 ++++++++++++++++++----------------
1 files changed, 18 insertions(+), 16 deletions(-)
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index fe77e33..7531278 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -682,6 +682,22 @@
}
/**
+ * PERCPU_INPUT - the percpu input sections
+ *
+ * The core percpu section names and core symbols which do not rely
+ * directly upon load addresses.
+ */
+#define PERCPU_INPUT \
+ VMLINUX_SYMBOL(__per_cpu_start) = .; \
+ *(.data..percpu..first) \
+ . = ALIGN(PAGE_SIZE); \
+ *(.data..percpu..page_aligned) \
+ *(.data..percpu..readmostly) \
+ *(.data..percpu) \
+ *(.data..percpu..shared_aligned) \
+ VMLINUX_SYMBOL(__per_cpu_end) = .;
+
+/**
* PERCPU_VADDR - define output section for percpu area
* @vaddr: explicit base address (optional)
* @phdr: destination PHDR (optional)
@@ -704,14 +720,7 @@
VMLINUX_SYMBOL(__per_cpu_load) = .; \
.data..percpu vaddr : AT(VMLINUX_SYMBOL(__per_cpu_load) \
- LOAD_OFFSET) { \
- VMLINUX_SYMBOL(__per_cpu_start) = .; \
- *(.data..percpu..first) \
- . = ALIGN(PAGE_SIZE); \
- *(.data..percpu..page_aligned) \
- *(.data..percpu..readmostly) \
- *(.data..percpu) \
- *(.data..percpu..shared_aligned) \
- VMLINUX_SYMBOL(__per_cpu_end) = .; \
+ PERCPU_INPUT \
} phdr \
. = VMLINUX_SYMBOL(__per_cpu_load) + SIZEOF(.data..percpu);
@@ -732,14 +741,7 @@
. = ALIGN(align); \
.data..percpu : AT(ADDR(.data..percpu) - LOAD_OFFSET) { \
VMLINUX_SYMBOL(__per_cpu_load) = .; \
- VMLINUX_SYMBOL(__per_cpu_start) = .; \
- *(.data..percpu..first) \
- . = ALIGN(PAGE_SIZE); \
- *(.data..percpu..page_aligned) \
- *(.data..percpu..readmostly) \
- *(.data..percpu) \
- *(.data..percpu..shared_aligned) \
- VMLINUX_SYMBOL(__per_cpu_end) = .; \
+ PERCPU_INPUT \
}
--
1.7.4.1
The Blackfin percpu input sections are outdated, so rather than update
them, drop them completely and use the new common define.
Signed-off-by: Mike Frysinger <[email protected]>
---
arch/blackfin/kernel/vmlinux.lds.S | 8 +-------
1 files changed, 1 insertions(+), 7 deletions(-)
diff --git a/arch/blackfin/kernel/vmlinux.lds.S b/arch/blackfin/kernel/vmlinux.lds.S
index 0e38042..bc0bf76 100644
--- a/arch/blackfin/kernel/vmlinux.lds.S
+++ b/arch/blackfin/kernel/vmlinux.lds.S
@@ -155,14 +155,8 @@ SECTIONS
SECURITY_INITCALL
INIT_RAM_FS
- . = ALIGN(4);
___per_cpu_load = .;
- ___per_cpu_start = .;
- *(.data.percpu.first)
- *(.data.percpu.page_aligned)
- *(.data.percpu)
- *(.data.percpu.shared_aligned)
- ___per_cpu_end = .;
+ PERCPU_INPUT
EXIT_DATA
__einitdata = .;
--
1.7.4.1
On Thu, Mar 31, 2011 at 15:52, Mike Frysinger wrote:
> The Blackfin percpu input sections are outdated, so rather than update
> them, drop them completely and use the new common define.
Tejun: btw, i'm not expecting you to merge this one. it's just an
example of why we need this common code change. once the
vmlinux.lds.h patch is merged, i can run this through my tree like
normal.
-mike
On Thu, Mar 31, 2011 at 03:52:01PM -0400, Mike Frysinger wrote:
> The two percpu helper macros have the section names duplicated. So create
> a new define to merge the two. This also allows arches who need to link
> things more directly themselves to avoid duplicating the input sections in
> their linker script.
>
> Signed-off-by: Mike Frysinger <[email protected]>
Looks good to me but can you please rebase it on top of the following
branch?
git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git fixes-2.6.39
You'll probably need to add @cacheline to the macro.
Thanks.
--
tejun
The two percpu helper macros have the section names duplicated. So create
a new define to merge the two. This also allows arches who need to link
things more directly themselves to avoid duplicating the input sections in
their linker script.
Signed-off-by: Mike Frysinger <[email protected]>
---
v2
- rebased onto latest mainline
include/asm-generic/vmlinux.lds.h | 44 ++++++++++++++++++++----------------
1 files changed, 24 insertions(+), 20 deletions(-)
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 32c45e5..bf90fbc 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -688,6 +688,28 @@
}
/**
+ * PERCPU_INPUT - the percpu input sections
+ * @cacheline: cacheline size
+ *
+ * The core percpu section names and core symbols which do not rely
+ * directly upon load addresses.
+ *
+ * @cacheline is used to align subsections to avoid false cacheline
+ * sharing between subsections for different purposes.
+ */
+#define PERCPU_INPUT(cacheline) \
+ VMLINUX_SYMBOL(__per_cpu_start) = .; \
+ *(.data..percpu..first) \
+ . = ALIGN(PAGE_SIZE); \
+ *(.data..percpu..page_aligned) \
+ . = ALIGN(cacheline); \
+ *(.data..percpu..readmostly) \
+ . = ALIGN(cacheline); \
+ *(.data..percpu) \
+ *(.data..percpu..shared_aligned) \
+ VMLINUX_SYMBOL(__per_cpu_end) = .;
+
+/**
* PERCPU_VADDR - define output section for percpu area
* @cacheline: cacheline size
* @vaddr: explicit base address (optional)
@@ -715,16 +737,7 @@
VMLINUX_SYMBOL(__per_cpu_load) = .; \
.data..percpu vaddr : AT(VMLINUX_SYMBOL(__per_cpu_load) \
- LOAD_OFFSET) { \
- VMLINUX_SYMBOL(__per_cpu_start) = .; \
- *(.data..percpu..first) \
- . = ALIGN(PAGE_SIZE); \
- *(.data..percpu..page_aligned) \
- . = ALIGN(cacheline); \
- *(.data..percpu..readmostly) \
- . = ALIGN(cacheline); \
- *(.data..percpu) \
- *(.data..percpu..shared_aligned) \
- VMLINUX_SYMBOL(__per_cpu_end) = .; \
+ PERCPU_INPUT(cacheline) \
} phdr \
. = VMLINUX_SYMBOL(__per_cpu_load) + SIZEOF(.data..percpu);
@@ -745,16 +758,7 @@
. = ALIGN(align); \
.data..percpu : AT(ADDR(.data..percpu) - LOAD_OFFSET) { \
VMLINUX_SYMBOL(__per_cpu_load) = .; \
- VMLINUX_SYMBOL(__per_cpu_start) = .; \
- *(.data..percpu..first) \
- . = ALIGN(PAGE_SIZE); \
- *(.data..percpu..page_aligned) \
- . = ALIGN(cacheline); \
- *(.data..percpu..readmostly) \
- . = ALIGN(cacheline); \
- *(.data..percpu) \
- *(.data..percpu..shared_aligned) \
- VMLINUX_SYMBOL(__per_cpu_end) = .; \
+ PERCPU_INPUT(cacheline) \
}
--
1.7.4.1
On Fri, Apr 01, 2011 at 06:15:34PM -0400, Mike Frysinger wrote:
> The two percpu helper macros have the section names duplicated. So create
> a new define to merge the two. This also allows arches who need to link
> things more directly themselves to avoid duplicating the input sections in
> their linker script.
>
> Signed-off-by: Mike Frysinger <[email protected]>
Applied to percpu#fixes-2.6.39. I'll push the branch to Linus
soonish. It is a stable branch so please feel free to pull from it if
necessary.
git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git fixes-2.6.39
Thanks.
--
tejun
On Sun, Apr 3, 2011 at 19:44, Tejun Heo wrote:
> On Fri, Apr 01, 2011 at 06:15:34PM -0400, Mike Frysinger wrote:
>> The two percpu helper macros have the section names duplicated. So create
>> a new define to merge the two. This also allows arches who need to link
>> things more directly themselves to avoid duplicating the input sections in
>> their linker script.
>>
>> Signed-off-by: Mike Frysinger <[email protected]>
>
> Applied to percpu#fixes-2.6.39. I'll push the branch to Linus
> soonish. It is a stable branch so please feel free to pull from it if
> necessary.
>
> git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu.git fixes-2.6.39
i dont see this in mainline for 2.6.40-rc1 either ?
-mike
Hello,
On Tue, May 24, 2011 at 3:46 AM, Mike Frysinger <[email protected]> wrote:
> i dont see this in mainline for 2.6.40-rc1 either ?
Just sent pull request. Was waiting for more fixes and waited too long.
Thank you.
--
tejun