CVSROOT: /cvs Module name: src Changes by: d...@cvs.openbsd.org 2021/05/17 17:36:40
Modified files: sys/arch/amd64/amd64: vmm.c Log message: vmm(4): fix race condition related to incorrect physical cpu tracking The race condition results in vmread errors when disabling interrupt window exiting. The vmd(8) guest gets an EINVAL response to it's VMM_IOC_RUN ioctl and aborts, sending the guest to an abrupt end. Similarly to the recent SVM commit, this changes the vcpu run loop logic to check for resuming on a different cpu. If so, the VMCS is loaded onto the new cpu. Instead of using just a "resume" flag, the real reason (other than cpu switch) that would require reloading the VMCS is vmm may have cleared the VMCS before yielding to the scheduler. The "resume" flag is still used in vmx_enter_guest to toggle between vmlaunch/vmresume calls, but is no longer the arbiter of if vmm reloads the VMCS or not. A more subtle race condition still exists related to clearing the VMCS on the previous cpu, but that's for a future commit. OK mlarkin@