The late vmwrite of the PDPTRs in prepare_vmcs02() is redundant, because every write it does was already performed by prepare_vmcs02_rare earlier in the same prepare_vmcs02 call. In particular: - load_guest_pdptrs_vmcs12 == true implies that prepare_vmcs02_rare() ran - the assignment to load_guest_pdptrs_vmcs12 matches the gate in prepare_vmcs02_rare(), other than having one that checks !hv_evmcs and the other !nested_vmx_is_evmptr12_valid(vmx) - the condition for the late move is a strict subset of the one in prepare_vmcs02_rare(), because the former checks nested_cpu_has_ept(vmcs12), which implies enable_ept, and on top it narrows it further by ANDing is_pae_paging(vcpu) Signed-off-by: Paolo Bonzini --- arch/x86/kvm/vmx/nested.c | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c index c1be8ef882b8..f86a12fc29ec 100644 --- a/arch/x86/kvm/vmx/nested.c +++ b/arch/x86/kvm/vmx/nested.c @@ -2721,14 +2721,10 @@ static int prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12, { struct vcpu_vmx *vmx = to_vmx(vcpu); struct hv_enlightened_vmcs *evmcs = nested_vmx_evmcs(vmx); - bool load_guest_pdptrs_vmcs12 = false; if (vmx->nested.dirty_vmcs12 || nested_vmx_is_evmptr12_valid(vmx)) { prepare_vmcs02_rare(vmx, vmcs12); vmx->nested.dirty_vmcs12 = false; - - load_guest_pdptrs_vmcs12 = !nested_vmx_is_evmptr12_valid(vmx) || - !(evmcs->hv_clean_fields & HV_VMX_ENLIGHTENED_CLEAN_FIELD_GUEST_GRP1); } if (vcpu->arch.nested_run_pending && @@ -2831,15 +2827,6 @@ static int prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12, if (enable_ept) vmcs_writel(GUEST_CR3, vmcs12->guest_cr3); - /* Late preparation of GUEST_PDPTRs now that EFER and CRs are set. */ - if (load_guest_pdptrs_vmcs12 && nested_cpu_has_ept(vmcs12) && - is_pae_paging(vcpu)) { - vmcs_write64(GUEST_PDPTR0, vmcs12->guest_pdptr0); - vmcs_write64(GUEST_PDPTR1, vmcs12->guest_pdptr1); - vmcs_write64(GUEST_PDPTR2, vmcs12->guest_pdptr2); - vmcs_write64(GUEST_PDPTR3, vmcs12->guest_pdptr3); - } - if ((vmcs12->vm_entry_controls & VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL) && kvm_pmu_has_perf_global_ctrl(vcpu_to_pmu(vcpu)) && WARN_ON_ONCE(__kvm_emulate_msr_write(vcpu, MSR_CORE_PERF_GLOBAL_CTRL, -- 2.52.0