diff options
Diffstat (limited to 'arch/x86_64/kernel/head.S')
-rw-r--r-- | arch/x86_64/kernel/head.S | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/arch/x86_64/kernel/head.S b/arch/x86_64/kernel/head.S index 1e6f80870679..598a4d0351fc 100644 --- a/arch/x86_64/kernel/head.S +++ b/arch/x86_64/kernel/head.S | |||
@@ -163,6 +163,20 @@ startup_64: | |||
163 | */ | 163 | */ |
164 | lgdt cpu_gdt_descr | 164 | lgdt cpu_gdt_descr |
165 | 165 | ||
166 | /* set up data segments. actually 0 would do too */ | ||
167 | movl $__KERNEL_DS,%eax | ||
168 | movl %eax,%ds | ||
169 | movl %eax,%ss | ||
170 | movl %eax,%es | ||
171 | |||
172 | /* | ||
173 | * We don't really need to load %fs or %gs, but load them anyway | ||
174 | * to kill any stale realmode selectors. This allows execution | ||
175 | * under VT hardware. | ||
176 | */ | ||
177 | movl %eax,%fs | ||
178 | movl %eax,%gs | ||
179 | |||
166 | /* | 180 | /* |
167 | * Setup up a dummy PDA. this is just for some early bootup code | 181 | * Setup up a dummy PDA. this is just for some early bootup code |
168 | * that does in_interrupt() | 182 | * that does in_interrupt() |
@@ -173,12 +187,6 @@ startup_64: | |||
173 | shrq $32,%rdx | 187 | shrq $32,%rdx |
174 | wrmsr | 188 | wrmsr |
175 | 189 | ||
176 | /* set up data segments. actually 0 would do too */ | ||
177 | movl $__KERNEL_DS,%eax | ||
178 | movl %eax,%ds | ||
179 | movl %eax,%ss | ||
180 | movl %eax,%es | ||
181 | |||
182 | /* esi is pointer to real mode structure with interesting info. | 190 | /* esi is pointer to real mode structure with interesting info. |
183 | pass it to C */ | 191 | pass it to C */ |
184 | movl %esi, %edi | 192 | movl %esi, %edi |