diff options
Diffstat (limited to 'arch/x86/kernel/head_64.S')
-rw-r--r-- | arch/x86/kernel/head_64.S | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S index 10a1955bb1d1..263b9d14753e 100644 --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <asm/page.h> | 18 | #include <asm/page.h> |
19 | #include <asm/msr.h> | 19 | #include <asm/msr.h> |
20 | #include <asm/cache.h> | 20 | #include <asm/cache.h> |
21 | #include <asm/processor-flags.h> | ||
21 | 22 | ||
22 | #ifdef CONFIG_PARAVIRT | 23 | #ifdef CONFIG_PARAVIRT |
23 | #include <asm/asm-offsets.h> | 24 | #include <asm/asm-offsets.h> |
@@ -128,7 +129,7 @@ ident_complete: | |||
128 | /* Fixup phys_base */ | 129 | /* Fixup phys_base */ |
129 | addq %rbp, phys_base(%rip) | 130 | addq %rbp, phys_base(%rip) |
130 | 131 | ||
131 | #ifdef CONFIG_SMP | 132 | #ifdef CONFIG_X86_TRAMPOLINE |
132 | addq %rbp, trampoline_level4_pgt + 0(%rip) | 133 | addq %rbp, trampoline_level4_pgt + 0(%rip) |
133 | addq %rbp, trampoline_level4_pgt + (511*8)(%rip) | 134 | addq %rbp, trampoline_level4_pgt + (511*8)(%rip) |
134 | #endif | 135 | #endif |
@@ -154,9 +155,7 @@ ENTRY(secondary_startup_64) | |||
154 | */ | 155 | */ |
155 | 156 | ||
156 | /* Enable PAE mode and PGE */ | 157 | /* Enable PAE mode and PGE */ |
157 | xorq %rax, %rax | 158 | movl $(X86_CR4_PAE | X86_CR4_PGE), %eax |
158 | btsq $5, %rax | ||
159 | btsq $7, %rax | ||
160 | movq %rax, %cr4 | 159 | movq %rax, %cr4 |
161 | 160 | ||
162 | /* Setup early boot stage 4 level pagetables. */ | 161 | /* Setup early boot stage 4 level pagetables. */ |
@@ -184,14 +183,10 @@ ENTRY(secondary_startup_64) | |||
184 | 1: wrmsr /* Make changes effective */ | 183 | 1: wrmsr /* Make changes effective */ |
185 | 184 | ||
186 | /* Setup cr0 */ | 185 | /* Setup cr0 */ |
187 | #define CR0_PM 1 /* protected mode */ | 186 | #define CR0_STATE (X86_CR0_PE | X86_CR0_MP | X86_CR0_ET | \ |
188 | #define CR0_MP (1<<1) | 187 | X86_CR0_NE | X86_CR0_WP | X86_CR0_AM | \ |
189 | #define CR0_ET (1<<4) | 188 | X86_CR0_PG) |
190 | #define CR0_NE (1<<5) | 189 | movl $CR0_STATE, %eax |
191 | #define CR0_WP (1<<16) | ||
192 | #define CR0_AM (1<<18) | ||
193 | #define CR0_PAGING (1<<31) | ||
194 | movl $CR0_PM|CR0_MP|CR0_ET|CR0_NE|CR0_WP|CR0_AM|CR0_PAGING,%eax | ||
195 | /* Make changes effective */ | 190 | /* Make changes effective */ |
196 | movq %rax, %cr0 | 191 | movq %rax, %cr0 |
197 | 192 | ||
@@ -327,11 +322,11 @@ early_idt_ripmsg: | |||
327 | ENTRY(name) | 322 | ENTRY(name) |
328 | 323 | ||
329 | /* Automate the creation of 1 to 1 mapping pmd entries */ | 324 | /* Automate the creation of 1 to 1 mapping pmd entries */ |
330 | #define PMDS(START, PERM, COUNT) \ | 325 | #define PMDS(START, PERM, COUNT) \ |
331 | i = 0 ; \ | 326 | i = 0 ; \ |
332 | .rept (COUNT) ; \ | 327 | .rept (COUNT) ; \ |
333 | .quad (START) + (i << 21) + (PERM) ; \ | 328 | .quad (START) + (i << PMD_SHIFT) + (PERM) ; \ |
334 | i = i + 1 ; \ | 329 | i = i + 1 ; \ |
335 | .endr | 330 | .endr |
336 | 331 | ||
337 | /* | 332 | /* |