Skip to content

Commit

Permalink
KVM: MMU: Check for root_level instead of long mode
Browse files Browse the repository at this point in the history
The walk_addr function checks for !is_long_mode in its 64
bit version. But what is meant here is a check for pae
paging. Change the condition to really check for pae paging
so that it also works with nested nested paging.

Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
  • Loading branch information
Joerg Roedel authored and Avi Kivity committed Oct 24, 2010
1 parent 7b91409 commit 957446a
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions arch/x86/kvm/paging_tmpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ static int FNAME(walk_addr)(struct guest_walker *walker,
walker->level = vcpu->arch.mmu.root_level;
pte = vcpu->arch.cr3;
#if PTTYPE == 64
if (!is_long_mode(vcpu)) {
if (vcpu->arch.mmu.root_level == PT32E_ROOT_LEVEL) {
pte = kvm_pdptr_read(vcpu, (addr >> 30) & 3);
trace_kvm_mmu_paging_element(pte, walker->level);
if (!is_present_gpte(pte)) {
Expand Down Expand Up @@ -205,7 +205,7 @@ static int FNAME(walk_addr)(struct guest_walker *walker,
(PTTYPE == 64 || is_pse(vcpu))) ||
((walker->level == PT_PDPE_LEVEL) &&
is_large_pte(pte) &&
is_long_mode(vcpu))) {
vcpu->arch.mmu.root_level == PT64_ROOT_LEVEL)) {
int lvl = walker->level;

walker->gfn = gpte_to_gfn_lvl(pte, lvl);
Expand Down

0 comments on commit 957446a

Please sign in to comment.