On Fri, Apr 08, 2022 at 07:49:43PM -0600, Dave Voutila wrote:
> CVSROOT: /cvs
> Module name: src
> Changes by: [email protected] 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