aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2024-09-11 00:39:30 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2024-09-16 08:09:38 +0000
commitb7ea2b69ef666ee8cdc6dcc814d610df0a7f0999 (patch)
tree1547e65bda3b67c822690cd2cda0a073333d5560
parent9a49c98bafbea2a896f72defe7d9f2b65a474c41 (diff)
downloadsrc-b7ea2b69ef666ee8cdc6dcc814d610df0a7f0999.tar.gz
src-b7ea2b69ef666ee8cdc6dcc814d610df0a7f0999.zip
amd64 la57_trampoline: disable EFER.LME around setting CR4.LA57
Changing paging mode while LME is set seems to be not allowed. Sponsored by: Advanced Micro Devices (AMD) Sponsored by: jThe FreeBSD Foundation MFC after: 1 week
-rw-r--r--sys/amd64/amd64/locore.S10
1 files changed, 10 insertions, 0 deletions
diff --git a/sys/amd64/amd64/locore.S b/sys/amd64/amd64/locore.S
index 86db0f76b22b..9a991402cdc2 100644
--- a/sys/amd64/amd64/locore.S
+++ b/sys/amd64/amd64/locore.S
@@ -114,11 +114,21 @@ l1: movl $(3<<3),%eax
andl $~CR0_PG,%eax
movl %eax,%cr0
+ movl $MSR_EFER,%ecx
+ rdmsr
+ andl $~EFER_LME,%eax
+ wrmsr
+
movl %cr4,%eax
orl $CR4_LA57,%eax
movl %eax,%cr4
movl %edi,%cr3
+
+ rdmsr
+ orl $EFER_LME,%eax
+ wrmsr
+
movl %ebp,%cr0
jmp 1f