summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/x86/include/asm/realmode.h3
-rw-r--r--arch/x86/realmode/init.c7
-rw-r--r--arch/x86/realmode/rm/trampoline_64.S2
3 files changed, 5 insertions, 7 deletions
diff --git a/arch/x86/include/asm/realmode.h b/arch/x86/include/asm/realmode.h
index 937dc6071d76..fce3f4ae5bd6 100644
--- a/arch/x86/include/asm/realmode.h
+++ b/arch/x86/include/asm/realmode.h
@@ -35,9 +35,8 @@ struct trampoline_header {
u32 gdt_base;
#else
u64 start;
+ u64 efer;
u32 cr4;
- u32 efer_low;
- u32 efer_high;
#endif
};
diff --git a/arch/x86/realmode/init.c b/arch/x86/realmode/init.c
index 099277984b80..cbca565af5bd 100644
--- a/arch/x86/realmode/init.c
+++ b/arch/x86/realmode/init.c
@@ -22,7 +22,7 @@ void __init setup_real_mode(void)
size_t size = PAGE_ALIGN(real_mode_blob_end - real_mode_blob);
#ifdef CONFIG_X86_64
u64 *trampoline_pgd;
- u32 efer_low, efer_high;
+ u64 efer;
#endif
/* 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)
* Some AMD processors will #GP(0) if EFER.LMA is set in WRMSR
* so we need to mask it out.
*/
- rdmsr(MSR_EFER, efer_low, efer_high);
- trampoline_header->efer_low = efer_low & ~EFER_LMA;
- trampoline_header->efer_high = efer_high;
+ rdmsrl(MSR_EFER, efer);
+ trampoline_header->efer = efer & ~EFER_LMA;
trampoline_header->start = (u64) secondary_startup_64;
trampoline_cr4_features = &trampoline_header->cr4;
diff --git a/arch/x86/realmode/rm/trampoline_64.S b/arch/x86/realmode/rm/trampoline_64.S
index 1b9e1bc1ac5e..bb360dc39d21 100644
--- a/arch/x86/realmode/rm/trampoline_64.S
+++ b/arch/x86/realmode/rm/trampoline_64.S
@@ -146,8 +146,8 @@ GLOBAL(trampoline_pgd) .space PAGE_SIZE
.balign 8
GLOBAL(trampoline_header)
tr_start: .space 8
- GLOBAL(tr_cr4) .space 4
GLOBAL(tr_efer) .space 8
+ GLOBAL(tr_cr4) .space 4
END(trampoline_header)
#include "trampoline_common.S"