Commit 638d957b authored by H. Peter Anvin's avatar H. Peter Anvin

x86, realmode: Change EFER to a single u64 field

Change EFER to be a single u64 field instead of two u32 fields; change
the order to maintain alignment.  Note that on x86-64 cr4 is really
also a 64-bit quantity, although we can only set the low 32 bits from
the trampoline code since it is still executing in 32-bit mode at that
point.
Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
Cc: Jarkko Sakkinen <jarkko.sakkinen@intel.com>
parent 13712701
...@@ -35,9 +35,8 @@ struct trampoline_header { ...@@ -35,9 +35,8 @@ struct trampoline_header {
u32 gdt_base; u32 gdt_base;
#else #else
u64 start; u64 start;
u64 efer;
u32 cr4; u32 cr4;
u32 efer_low;
u32 efer_high;
#endif #endif
}; };
......
...@@ -22,7 +22,7 @@ void __init setup_real_mode(void) ...@@ -22,7 +22,7 @@ void __init setup_real_mode(void)
size_t size = PAGE_ALIGN(real_mode_blob_end - real_mode_blob); size_t size = PAGE_ALIGN(real_mode_blob_end - real_mode_blob);
#ifdef CONFIG_X86_64 #ifdef CONFIG_X86_64
u64 *trampoline_pgd; u64 *trampoline_pgd;
u32 efer_low, efer_high; u64 efer;
#endif #endif
/* Has to be in very low memory so we can execute real-mode AP code. */ /* Has to be in very low memory so we can execute real-mode AP code. */
...@@ -70,9 +70,8 @@ void __init setup_real_mode(void) ...@@ -70,9 +70,8 @@ void __init setup_real_mode(void)
* Some AMD processors will #GP(0) if EFER.LMA is set in WRMSR * Some AMD processors will #GP(0) if EFER.LMA is set in WRMSR
* so we need to mask it out. * so we need to mask it out.
*/ */
rdmsr(MSR_EFER, efer_low, efer_high); rdmsrl(MSR_EFER, efer);
trampoline_header->efer_low = efer_low & ~EFER_LMA; trampoline_header->efer = efer & ~EFER_LMA;
trampoline_header->efer_high = efer_high;
trampoline_header->start = (u64) secondary_startup_64; trampoline_header->start = (u64) secondary_startup_64;
trampoline_cr4_features = &trampoline_header->cr4; trampoline_cr4_features = &trampoline_header->cr4;
......
...@@ -146,8 +146,8 @@ GLOBAL(trampoline_pgd) .space PAGE_SIZE ...@@ -146,8 +146,8 @@ GLOBAL(trampoline_pgd) .space PAGE_SIZE
.balign 8 .balign 8
GLOBAL(trampoline_header) GLOBAL(trampoline_header)
tr_start: .space 8 tr_start: .space 8
GLOBAL(tr_cr4) .space 4
GLOBAL(tr_efer) .space 8 GLOBAL(tr_efer) .space 8
GLOBAL(tr_cr4) .space 4
END(trampoline_header) END(trampoline_header)
#include "trampoline_common.S" #include "trampoline_common.S"
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment