diff options
author | Eric Dumazet <dada1@cosmosbay.com> | 2007-05-02 13:27:18 -0400 |
---|---|---|
committer | Andi Kleen <andi@basil.nowhere.org> | 2007-05-02 13:27:18 -0400 |
commit | 141a892f57972b01891df7036f567a70459c19ac (patch) | |
tree | 9d8c11ad5c6a4080cc7e0b84b3590860a002e11b /arch/x86_64 | |
parent | 0260c196c97e48e4b821031ae55912c22113ed87 (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/x86_64')
-rw-r--r-- | arch/x86_64/kernel/vmlinux.lds.S | 10 |
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 | ||