On Fri, Apr 08, 2022 at 07:49:43PM -0600, Dave Voutila wrote: > CVSROOT: /cvs > Module name: src > Changes by: d...@cvs.openbsd.org 2022/04/08 19:49:43 > > Modified files: > sys/arch/amd64/amd64: vmm_support.S > > Log message: > Simplify vmx instruction error handling. > > Removes jumps and shortens the code while keeping functionality the > same. > > ok mlarkin@
This commit breaks vmm on my ThinkPad T430s. cpu1: failed to enter VMM mode cpu0: failed to enter VMM mode cpu0: Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz, 2893.83 MHz, 06-3a-09 cpu0: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,RDTSCP,LONG,LAHF,PERF,ITSC,FSGSBASE,SMEP,ERMS,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,MELTDOWN cpu0: 256KB 64b/line 8-way L2 cache I think the problem is that XOR affects the zero flag. Does it? This diff fixes it. ok? bluhm Index: arch/amd64/amd64/vmm_support.S =================================================================== RCS file: /data/mirror/openbsd/cvs/src/sys/arch/amd64/amd64/vmm_support.S,v retrieving revision 1.19 diff -u -p -r1.19 vmm_support.S --- arch/amd64/amd64/vmm_support.S 9 Apr 2022 01:49:43 -0000 1.19 +++ arch/amd64/amd64/vmm_support.S 13 Apr 2022 17:10:42 -0000 @@ -62,8 +62,8 @@ _C_LABEL(vmm_dispatch_intr): _C_LABEL(vmxon): RETGUARD_SETUP(vmxon, r11) - vmxon (%rdi) xorq %rax, %rax + vmxon (%rdi) setna %al RETGUARD_CHECK(vmxon, r11) ret @@ -71,8 +71,8 @@ _C_LABEL(vmxon): _C_LABEL(vmxoff): RETGUARD_SETUP(vmxoff, r11) - vmxoff xorq %rax, %rax + vmxoff setna %al RETGUARD_CHECK(vmxoff, r11) ret @@ -80,8 +80,8 @@ _C_LABEL(vmxoff): _C_LABEL(vmclear): RETGUARD_SETUP(vmclear, r11) - vmclear (%rdi) xorq %rax, %rax + vmclear (%rdi) setna %al RETGUARD_CHECK(vmclear, r11) ret @@ -89,8 +89,8 @@ _C_LABEL(vmclear): _C_LABEL(vmptrld): RETGUARD_SETUP(vmptrld, r11) - vmptrld (%rdi) xorq %rax, %rax + vmptrld (%rdi) setna %al RETGUARD_CHECK(vmptrld, r11) ret @@ -98,8 +98,8 @@ _C_LABEL(vmptrld): _C_LABEL(vmptrst): RETGUARD_SETUP(vmptrst, r11) - vmptrst (%rdi) xorq %rax, %rax + vmptrst (%rdi) setna %al RETGUARD_CHECK(vmptrst, r11) ret @@ -107,8 +107,8 @@ _C_LABEL(vmptrst): _C_LABEL(vmwrite): RETGUARD_SETUP(vmwrite, r11) - vmwrite %rsi, %rdi xorq %rax, %rax + vmwrite %rsi, %rdi setna %al RETGUARD_CHECK(vmwrite, r11) ret @@ -116,8 +116,8 @@ _C_LABEL(vmwrite): _C_LABEL(vmread): RETGUARD_SETUP(vmread, r11) - vmread %rdi, (%rsi) xorq %rax, %rax + vmread %rdi, (%rsi) setna %al RETGUARD_CHECK(vmread, r11) ret