Messages in this thread | | | Date | Fri, 29 Jul 2022 00:25:16 +0200 | Subject | Re: [PATCH v4 21/25] KVM: VMX: Move LOAD_IA32_PERF_GLOBAL_CTRL errata handling out of setup_vmcs_config() | From | Paolo Bonzini <> |
| |
On 7/22/22 00:56, Sean Christopherson wrote: > Except the errata are based on FMS and the FMS exposed to the L1 hypervisor may > not be the real FMS. > > But that's moot, because they_should_ be fully emulated by KVM anyways; KVM > runs L2 with a MSR value modified by perf, not the raw MSR value requested by L1. > > Of course KVM screws things up and fails to clear the flag in entry controls... > All exit controls are emulated so at least KVM gets those right.
Can you send this as a separate patch?
Paolo
> Untested, but I believe KVM the fix is: > > diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c > index d0e781c7ac72..76926147b672 100644 > --- a/arch/x86/kvm/vmx/nested.c > +++ b/arch/x86/kvm/vmx/nested.c > @@ -2357,7 +2357,8 @@ static void prepare_vmcs02_early(struct vcpu_vmx *vmx, struct loaded_vmcs *vmcs0 > * we can avoid VMWrites during vmx_set_efer(). > */ > exec_control = __vm_entry_controls_get(vmcs01); > - exec_control |= vmcs12->vm_entry_controls; > + exec_control |= (vmcs12->vm_entry_controls & > + ~VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL); > exec_control &= ~(VM_ENTRY_IA32E_MODE | VM_ENTRY_LOAD_IA32_EFER); > if (cpu_has_load_ia32_efer()) { > if (guest_efer & EFER_LMA)
| |