Skip to content

Commit

Permalink
KVM: MMU: Inherit a shadow page's guest level count from vcpu setup
Browse files Browse the repository at this point in the history
Instead of "calculating" it on every shadow page allocation, set it once
when switching modes, and copy it when allocating pages.

This doesn't buy us much, but sets up the stage for inheriting more
information related to the mmu setup.

Signed-off-by: Avi Kivity <avi@redhat.com>
  • Loading branch information
Avi Kivity committed Mar 24, 2009
1 parent 22ccb14 commit a770f6f
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 6 deletions.
1 change: 1 addition & 0 deletions arch/x86/include/asm/kvm_host.h
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,7 @@ struct kvm_mmu {
hpa_t root_hpa;
int root_level;
int shadow_root_level;
union kvm_mmu_page_role base_role;

u64 *pae_root;
};
Expand Down
17 changes: 11 additions & 6 deletions arch/x86/kvm/mmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -1204,8 +1204,7 @@ static struct kvm_mmu_page *kvm_mmu_get_page(struct kvm_vcpu *vcpu,
struct kvm_mmu_page *sp;
struct hlist_node *node, *tmp;

role.word = 0;
role.glevels = vcpu->arch.mmu.root_level;
role = vcpu->arch.mmu.base_role;
role.level = level;
role.metaphysical = metaphysical;
role.access = access;
Expand Down Expand Up @@ -2251,17 +2250,23 @@ static int init_kvm_tdp_mmu(struct kvm_vcpu *vcpu)

static int init_kvm_softmmu(struct kvm_vcpu *vcpu)
{
int r;

ASSERT(vcpu);
ASSERT(!VALID_PAGE(vcpu->arch.mmu.root_hpa));

if (!is_paging(vcpu))
return nonpaging_init_context(vcpu);
r = nonpaging_init_context(vcpu);
else if (is_long_mode(vcpu))
return paging64_init_context(vcpu);
r = paging64_init_context(vcpu);
else if (is_pae(vcpu))
return paging32E_init_context(vcpu);
r = paging32E_init_context(vcpu);
else
return paging32_init_context(vcpu);
r = paging32_init_context(vcpu);

vcpu->arch.mmu.base_role.glevels = vcpu->arch.mmu.root_level;

return r;
}

static int init_kvm_mmu(struct kvm_vcpu *vcpu)
Expand Down

0 comments on commit a770f6f

Please sign in to comment.