summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorgrehan <grehan@FreeBSD.org>2017-03-25 05:05:12 +0000
committergrehan <grehan@FreeBSD.org>2017-03-25 05:05:12 +0000
commitbfdf1ebc2056f733f1fc31600892287fae8e4d54 (patch)
tree1caf070a52b73373344f6f8e33ad4438cde75d24 /sys
parent417388477be7dae7a2b7b03337e9e8beb5b0f8b8 (diff)
downloadFreeBSD-src-bfdf1ebc2056f733f1fc31600892287fae8e4d54.zip
FreeBSD-src-bfdf1ebc2056f733f1fc31600892287fae8e4d54.tar.gz
MFC r315361 and r315364: Hide MONITORX/MWAITX from guests.
r315361 Add the AMD MONITORX/MWAITX feature definition introduced in Bulldozer/Ryzen CPUs. r315364 Hide the AMD MONITORX/MWAITX capability. Otherwise, recent Linux guests will use these instructions, resulting in #UD exceptions since bhyve doesn't implement MONITOR/MWAIT exits. This fixes boot-time hangs in recent Linux guests on Ryzen CPUs (and probably Bulldozer aka AMD FX as well).
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/vmm/x86.c3
-rw-r--r--sys/x86/include/specialreg.h1
-rw-r--r--sys/x86/x86/identcpu.c2
3 files changed, 5 insertions, 1 deletions
diff --git a/sys/amd64/vmm/x86.c b/sys/amd64/vmm/x86.c
index 525e1d9..61d99d5 100644
--- a/sys/amd64/vmm/x86.c
+++ b/sys/amd64/vmm/x86.c
@@ -176,6 +176,9 @@ x86_emulate_cpuid(struct vm *vm, int vcpu_id,
/* Don't advertise the OS visible workaround feature */
regs[2] &= ~AMDID2_OSVW;
+ /* Hide mwaitx/monitorx capability from the guest */
+ regs[2] &= ~AMDID2_MWAITX;
+
/*
* Hide rdtscp/ia32_tsc_aux until we know how
* to deal with them.
diff --git a/sys/x86/include/specialreg.h b/sys/x86/include/specialreg.h
index 32dc366..ff13cd8 100644
--- a/sys/x86/include/specialreg.h
+++ b/sys/x86/include/specialreg.h
@@ -227,6 +227,7 @@
#define AMDID2_DBE 0x04000000
#define AMDID2_PTSC 0x08000000
#define AMDID2_PTSCEL2I 0x10000000
+#define AMDID2_MWAITX 0x20000000
/*
* CPUID instruction 1 eax info
diff --git a/sys/x86/x86/identcpu.c b/sys/x86/x86/identcpu.c
index 86bdc0a..22f3966 100644
--- a/sys/x86/x86/identcpu.c
+++ b/sys/x86/x86/identcpu.c
@@ -906,7 +906,7 @@ printcpuinfo(void)
"\033DBE" /* Data Breakpoint extension */
"\034PTSC" /* Performance TSC */
"\035PL2I" /* L2I perf count */
- "\036<b29>"
+ "\036MWAITX" /* MONITORX/MWAITX instructions */
"\037<b30>"
"\040<b31>"
);
OpenPOWER on IntegriCloud