|
@@ -10270,6 +10270,18 @@ static int prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12,
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (enable_pml) {
|
|
|
|
+ /*
|
|
|
|
+ * Conceptually we want to copy the PML address and index from
|
|
|
|
+ * vmcs01 here, and then back to vmcs01 on nested vmexit. But,
|
|
|
|
+ * since we always flush the log on each vmexit, this happens
|
|
|
|
+ * to be equivalent to simply resetting the fields in vmcs02.
|
|
|
|
+ */
|
|
|
|
+ ASSERT(vmx->pml_pg);
|
|
|
|
+ vmcs_write64(PML_ADDRESS, page_to_phys(vmx->pml_pg));
|
|
|
|
+ vmcs_write16(GUEST_PML_INDEX, PML_ENTITY_NUM - 1);
|
|
|
|
+ }
|
|
|
|
+
|
|
if (nested_cpu_has_ept(vmcs12)) {
|
|
if (nested_cpu_has_ept(vmcs12)) {
|
|
kvm_mmu_unload(vcpu);
|
|
kvm_mmu_unload(vcpu);
|
|
nested_ept_init_mmu_context(vcpu);
|
|
nested_ept_init_mmu_context(vcpu);
|