aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorEric Dumazet <dada1@cosmosbay.com>2007-05-02 13:27:18 -0400
committerAndi Kleen <andi@basil.nowhere.org>2007-05-02 13:27:18 -0400
commit141a892f57972b01891df7036f567a70459c19ac (patch)
tree9d8c11ad5c6a4080cc7e0b84b3590860a002e11b /arch
parent0260c196c97e48e4b821031ae55912c22113ed87 (diff)
[PATCH] x86-64: move __vgetcpu_mode & __jiffies to the vsyscall_2 zone
We apparently hit the 1024 limit of vsyscall_0 zone when some debugging options are set, or if __vsyscall_gtod_data is 64 bytes larger. In order to save 128 bytes from the vsyscall_0 zone, we move __vgetcpu_mode & __jiffies to vsyscall_2 zone where they really belong, since they are used only from vgetcpu() (which is in this vsyscall_2 area). After patch is applied, new layout is : ffffffffff600000 T vgettimeofday ffffffffff60004e t vsysc2 ffffffffff600140 t vread_hpet ffffffffff600150 t vread_tsc ffffffffff600180 D __vsyscall_gtod_data ffffffffff600400 T vtime ffffffffff600413 t vsysc1 ffffffffff600800 T vgetcpu ffffffffff600870 D __vgetcpu_mode ffffffffff600880 D __jiffies ffffffffff600c00 T venosys_1 Signed-off-by: Eric Dumazet <dada1@cosmosbay.com> Signed-off-by: Andi Kleen <ak@suse.de> Cc: Andi Kleen <ak@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86_64/kernel/vmlinux.lds.S10
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/x86_64/kernel/vmlinux.lds.S b/arch/x86_64/kernel/vmlinux.lds.S
index 7ef0b8820cd2..32e427a95ffd 100644
--- a/arch/x86_64/kernel/vmlinux.lds.S
+++ b/arch/x86_64/kernel/vmlinux.lds.S
@@ -95,6 +95,12 @@ SECTIONS
95 { *(.vsyscall_gtod_data) } 95 { *(.vsyscall_gtod_data) }
96 vsyscall_gtod_data = VVIRT(.vsyscall_gtod_data); 96 vsyscall_gtod_data = VVIRT(.vsyscall_gtod_data);
97 97
98
99 .vsyscall_1 ADDR(.vsyscall_0) + 1024: AT(VLOAD(.vsyscall_1))
100 { *(.vsyscall_1) }
101 .vsyscall_2 ADDR(.vsyscall_0) + 2048: AT(VLOAD(.vsyscall_2))
102 { *(.vsyscall_2) }
103
98 .vgetcpu_mode : AT(VLOAD(.vgetcpu_mode)) { *(.vgetcpu_mode) } 104 .vgetcpu_mode : AT(VLOAD(.vgetcpu_mode)) { *(.vgetcpu_mode) }
99 vgetcpu_mode = VVIRT(.vgetcpu_mode); 105 vgetcpu_mode = VVIRT(.vgetcpu_mode);
100 106
@@ -102,10 +108,6 @@ SECTIONS
102 .jiffies : AT(VLOAD(.jiffies)) { *(.jiffies) } 108 .jiffies : AT(VLOAD(.jiffies)) { *(.jiffies) }
103 jiffies = VVIRT(.jiffies); 109 jiffies = VVIRT(.jiffies);
104 110
105 .vsyscall_1 ADDR(.vsyscall_0) + 1024: AT(VLOAD(.vsyscall_1))
106 { *(.vsyscall_1) }
107 .vsyscall_2 ADDR(.vsyscall_0) + 2048: AT(VLOAD(.vsyscall_2))
108 { *(.vsyscall_2) }
109 .vsyscall_3 ADDR(.vsyscall_0) + 3072: AT(VLOAD(.vsyscall_3)) 111 .vsyscall_3 ADDR(.vsyscall_0) + 3072: AT(VLOAD(.vsyscall_3))
110 { *(.vsyscall_3) } 112 { *(.vsyscall_3) }
111 113