|
@@ -68,6 +68,9 @@ relocate_kernel:
|
|
|
movq %cr4, %rax
|
|
|
movq %rax, CR4(%r11)
|
|
|
|
|
|
+ /* Save CR4. Required to enable the right paging mode later. */
|
|
|
+ movq %rax, %r13
|
|
|
+
|
|
|
/* zero out flags, and disable interrupts */
|
|
|
pushq $0
|
|
|
popfq
|
|
@@ -126,8 +129,13 @@ identity_mapped:
|
|
|
/*
|
|
|
* Set cr4 to a known state:
|
|
|
* - physical address extension enabled
|
|
|
+ * - 5-level paging, if it was enabled before
|
|
|
*/
|
|
|
movl $X86_CR4_PAE, %eax
|
|
|
+ testq $X86_CR4_LA57, %r13
|
|
|
+ jz 1f
|
|
|
+ orl $X86_CR4_LA57, %eax
|
|
|
+1:
|
|
|
movq %rax, %cr4
|
|
|
|
|
|
jmp 1f
|