On Fri, Jun 29, 2018 at 12:39 PM, Philip Guenther <[email protected]>
wrote:
> On Fri, 29 Jun 2018, Ax0n wrote:
> > vmm_fpurestore: guest attempted to set invalid bits in xcr0 (guest
> > %xcr0=0x1, host mask=0xffffffffffffffff)
>
> Oh, duh: this box doesn't have XSAVE at all but we init guests as if it
> does. Try this diff on the host.
>
> Philip Guenther
>
> Index: amd64/vmm.c
> ===================================================================
> RCS file: /data/src/openbsd/src/sys/arch/amd64/amd64/vmm.c,v
> retrieving revision 1.202
> diff -u -p -r1.202 vmm.c
> --- amd64/vmm.c 22 Jun 2018 05:21:45 -0000 1.202
> +++ amd64/vmm.c 29 Jun 2018 17:36:34 -0000
> @@ -1971,7 +1971,7 @@ vcpu_reset_regs_svm(struct vcpu *vcpu, s
> ret = vcpu_writeregs_svm(vcpu, VM_RWREGS_ALL, vrs);
>
> /* xcr0 power on default sets bit 0 (x87 state) */
> - vcpu->vc_gueststate.vg_xcr0 = XCR0_X87;
> + vcpu->vc_gueststate.vg_xcr0 = XCR0_X87 & xsave_mask;
>
> exit:
> return ret;
> @@ -2764,7 +2764,7 @@ vcpu_reset_regs_vmx(struct vcpu *vcpu, s
> /* XXX CR4 shadow */
>
> /* xcr0 power on default sets bit 0 (x87 state) */
> - vcpu->vc_gueststate.vg_xcr0 = XCR0_X87;
> + vcpu->vc_gueststate.vg_xcr0 = XCR0_X87 & xsave_mask;
>
> /* Flush the VMCS */
> if (vmclear(&vcpu->vc_control_pa)) {
>
This did the trick. VMs work again. Thanks, Philip!
[axon@transient ~]$ vmctl start 3
vmctl: started vm 1 successfully, tty /dev/ttyp1
[axon@transient ~]$ vmctl status
ID PID VCPUS MAXMEM CURMEM TTY OWNER NAME
3 4398 1 256M 139M ttyp1 axon OBSDSnap64.vm
1 - 1 512M - - axon OBSD-Stable.vm
2 - 1 256M - - axon OBSD-Stable-alt.vm
[axon@transient ~]$ vmctl console 3
Connected to /dev/ttyp1 (speed 115200)
OpenBSD/amd64 (deepthought.labs.h-i-r.net) (tty00)
login: