aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kvm/kvm_cache_regs.h7
-rw-r--r--arch/x86/kvm/mmu.c2
-rw-r--r--arch/x86/kvm/paging_tmpl.h2
3 files changed, 9 insertions, 2 deletions
diff --git a/arch/x86/kvm/kvm_cache_regs.h b/arch/x86/kvm/kvm_cache_regs.h
index a37abe2ec39a..975bb45329a1 100644
--- a/arch/x86/kvm/kvm_cache_regs.h
+++ b/arch/x86/kvm/kvm_cache_regs.h
@@ -45,6 +45,13 @@ static inline u64 kvm_pdptr_read(struct kvm_vcpu *vcpu, int index)
45 return vcpu->arch.walk_mmu->pdptrs[index]; 45 return vcpu->arch.walk_mmu->pdptrs[index];
46} 46}
47 47
48static inline u64 kvm_pdptr_read_mmu(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu, int index)
49{
50 load_pdptrs(vcpu, mmu, mmu->get_cr3(vcpu));
51
52 return mmu->pdptrs[index];
53}
54
48static inline ulong kvm_read_cr0_bits(struct kvm_vcpu *vcpu, ulong mask) 55static inline ulong kvm_read_cr0_bits(struct kvm_vcpu *vcpu, ulong mask)
49{ 56{
50 ulong tmask = mask & KVM_POSSIBLE_CR0_GUEST_BITS; 57 ulong tmask = mask & KVM_POSSIBLE_CR0_GUEST_BITS;
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index a26f13bd34e0..a25173a0d8b9 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -2398,7 +2398,7 @@ static int mmu_alloc_roots(struct kvm_vcpu *vcpu)
2398 2398
2399 ASSERT(!VALID_PAGE(root)); 2399 ASSERT(!VALID_PAGE(root));
2400 if (vcpu->arch.mmu.root_level == PT32E_ROOT_LEVEL) { 2400 if (vcpu->arch.mmu.root_level == PT32E_ROOT_LEVEL) {
2401 pdptr = kvm_pdptr_read(vcpu, i); 2401 pdptr = kvm_pdptr_read_mmu(vcpu, &vcpu->arch.mmu, i);
2402 if (!is_present_gpte(pdptr)) { 2402 if (!is_present_gpte(pdptr)) {
2403 vcpu->arch.mmu.pae_root[i] = 0; 2403 vcpu->arch.mmu.pae_root[i] = 0;
2404 continue; 2404 continue;
diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
index f4e09d341e28..a28f09bb76c6 100644
--- a/arch/x86/kvm/paging_tmpl.h
+++ b/arch/x86/kvm/paging_tmpl.h
@@ -137,7 +137,7 @@ walk:
137 137
138#if PTTYPE == 64 138#if PTTYPE == 64
139 if (walker->level == PT32E_ROOT_LEVEL) { 139 if (walker->level == PT32E_ROOT_LEVEL) {
140 pte = kvm_pdptr_read(vcpu, (addr >> 30) & 3); 140 pte = kvm_pdptr_read_mmu(vcpu, mmu, (addr >> 30) & 3);
141 trace_kvm_mmu_paging_element(pte, walker->level); 141 trace_kvm_mmu_paging_element(pte, walker->level);
142 if (!is_present_gpte(pte)) { 142 if (!is_present_gpte(pte)) {
143 present = false; 143 present = false;