[PATCH 2/4] KVM: nVMX: remove unnecessary code in prepare_vmcs02
From: Paolo Bonzini
Date: Wed May 27 2026 - 08:14:56 EST
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 <pbonzini@xxxxxxxxxx>
---
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