Alexander Bluhm <alexander.bl...@gmx.net> writes:
> 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? Yes, looks like my fault here. Odd that my testing didn't trigger the issue. ok dv@ > > 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 -- -Dave Voutila