|
@@ -3255,25 +3255,29 @@ static void vmx_decache_cr4_guest_bits(struct kvm_vcpu *vcpu)
|
|
|
|
|
|
static void ept_load_pdptrs(struct kvm_vcpu *vcpu)
|
|
|
{
|
|
|
+ struct kvm_mmu *mmu = vcpu->arch.walk_mmu;
|
|
|
+
|
|
|
if (!test_bit(VCPU_EXREG_PDPTR,
|
|
|
(unsigned long *)&vcpu->arch.regs_dirty))
|
|
|
return;
|
|
|
|
|
|
if (is_paging(vcpu) && is_pae(vcpu) && !is_long_mode(vcpu)) {
|
|
|
- vmcs_write64(GUEST_PDPTR0, vcpu->arch.mmu.pdptrs[0]);
|
|
|
- vmcs_write64(GUEST_PDPTR1, vcpu->arch.mmu.pdptrs[1]);
|
|
|
- vmcs_write64(GUEST_PDPTR2, vcpu->arch.mmu.pdptrs[2]);
|
|
|
- vmcs_write64(GUEST_PDPTR3, vcpu->arch.mmu.pdptrs[3]);
|
|
|
+ vmcs_write64(GUEST_PDPTR0, mmu->pdptrs[0]);
|
|
|
+ vmcs_write64(GUEST_PDPTR1, mmu->pdptrs[1]);
|
|
|
+ vmcs_write64(GUEST_PDPTR2, mmu->pdptrs[2]);
|
|
|
+ vmcs_write64(GUEST_PDPTR3, mmu->pdptrs[3]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
static void ept_save_pdptrs(struct kvm_vcpu *vcpu)
|
|
|
{
|
|
|
+ struct kvm_mmu *mmu = vcpu->arch.walk_mmu;
|
|
|
+
|
|
|
if (is_paging(vcpu) && is_pae(vcpu) && !is_long_mode(vcpu)) {
|
|
|
- vcpu->arch.mmu.pdptrs[0] = vmcs_read64(GUEST_PDPTR0);
|
|
|
- vcpu->arch.mmu.pdptrs[1] = vmcs_read64(GUEST_PDPTR1);
|
|
|
- vcpu->arch.mmu.pdptrs[2] = vmcs_read64(GUEST_PDPTR2);
|
|
|
- vcpu->arch.mmu.pdptrs[3] = vmcs_read64(GUEST_PDPTR3);
|
|
|
+ mmu->pdptrs[0] = vmcs_read64(GUEST_PDPTR0);
|
|
|
+ mmu->pdptrs[1] = vmcs_read64(GUEST_PDPTR1);
|
|
|
+ mmu->pdptrs[2] = vmcs_read64(GUEST_PDPTR2);
|
|
|
+ mmu->pdptrs[3] = vmcs_read64(GUEST_PDPTR3);
|
|
|
}
|
|
|
|
|
|
__set_bit(VCPU_EXREG_PDPTR,
|
|
@@ -7777,10 +7781,6 @@ static void prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12)
|
|
|
vmcs_write64(GUEST_PDPTR1, vmcs12->guest_pdptr1);
|
|
|
vmcs_write64(GUEST_PDPTR2, vmcs12->guest_pdptr2);
|
|
|
vmcs_write64(GUEST_PDPTR3, vmcs12->guest_pdptr3);
|
|
|
- __clear_bit(VCPU_EXREG_PDPTR,
|
|
|
- (unsigned long *)&vcpu->arch.regs_avail);
|
|
|
- __clear_bit(VCPU_EXREG_PDPTR,
|
|
|
- (unsigned long *)&vcpu->arch.regs_dirty);
|
|
|
}
|
|
|
|
|
|
kvm_register_write(vcpu, VCPU_REGS_RSP, vmcs12->guest_rsp);
|