summaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/vmlinux_32.lds.S
diff options
context:
space:
mode:
authorEric Dumazet <dada1@cosmosbay.com>2008-05-12 15:44:40 +0200
committerThomas Gleixner <tglx@linutronix.de>2008-05-25 07:03:46 +0200
commit63cc8c75156462d4b42cbdd76c293b7eee7ddbfe (patch)
treee014b4c61399f8f74347352e6ea76ddf1502dcfa /arch/x86/kernel/vmlinux_32.lds.S
parent75d3bce2fc0a80f435fe12f2c9ed2632c8ac29e4 (diff)
downloadblackbird-obmc-linux-63cc8c75156462d4b42cbdd76c293b7eee7ddbfe.tar.gz
blackbird-obmc-linux-63cc8c75156462d4b42cbdd76c293b7eee7ddbfe.zip
percpu: introduce DEFINE_PER_CPU_PAGE_ALIGNED() macro
While examining holes in percpu section I found this : c05f5000 D per_cpu__current_task c05f5000 D __per_cpu_start c05f5004 D per_cpu__cpu_number c05f5008 D per_cpu__irq_regs c05f500c d per_cpu__cpu_devices c05f5040 D per_cpu__cyc2ns <Big Hole of about 4000 bytes> c05f6000 d per_cpu__cpuid4_info c05f6004 d per_cpu__cache_kobject c05f6008 d per_cpu__index_kobject <Big Hole of about 4000 bytes> c05f7000 D per_cpu__gdt_page This is because gdt_page is a percpu variable, defined with a page alignement, and linker is doing its job, two times because of .o nesting in the build process. I introduced a new macro DEFINE_PER_CPU_PAGE_ALIGNED() to avoid wasting this space. All page aligned variables (only one at this time) are put in a separate subsection .data.percpu.page_aligned, at the very begining of percpu zone. Before patch , on a x86_32 machine : .data.percpu 30232 3227471872 .data.percpu 22168 3227471872 Thats 8064 bytes saved for each CPU. Signed-off-by: Eric Dumazet <dada1@cosmosbay.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/kernel/vmlinux_32.lds.S')
-rw-r--r--arch/x86/kernel/vmlinux_32.lds.S1
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/x86/kernel/vmlinux_32.lds.S b/arch/x86/kernel/vmlinux_32.lds.S
index ce5ed083a1e9..0f7c29a8c4ea 100644
--- a/arch/x86/kernel/vmlinux_32.lds.S
+++ b/arch/x86/kernel/vmlinux_32.lds.S
@@ -189,6 +189,7 @@ SECTIONS
. = ALIGN(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 = .;
OpenPOWER on IntegriCloud