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

Reply via email to