From bfdf1ebc2056f733f1fc31600892287fae8e4d54 Mon Sep 17 00:00:00 2001 From: grehan Date: Sat, 25 Mar 2017 05:05:12 +0000 Subject: 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). --- sys/amd64/vmm/x86.c | 3 +++ sys/x86/include/specialreg.h | 1 + sys/x86/x86/identcpu.c | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) (limited to 'sys') 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" + "\036MWAITX" /* MONITORX/MWAITX instructions */ "\037" "\040" ); -- cgit v1.1