Skip to content

Commit

Permalink
KVM: x86: MMU: Simplify force_pt_level calculation code in FNAME(page…
Browse files Browse the repository at this point in the history
…_fault)()

As a bonus, an extra memory slot search can be eliminated when
is_self_change_mapping is true.

Signed-off-by: Takuya Yoshikawa <yoshikawa_takuya_b1@lab.ntt.co.jp>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
Takuya Yoshikawa authored and Paolo Bonzini committed Oct 16, 2015
1 parent cd1872f commit 5ed5c5c
Showing 1 changed file with 7 additions and 8 deletions.
15 changes: 7 additions & 8 deletions arch/x86/kvm/paging_tmpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -743,15 +743,14 @@ static int FNAME(page_fault)(struct kvm_vcpu *vcpu, gva_t addr, u32 error_code,
is_self_change_mapping = FNAME(is_self_change_mapping)(vcpu,
&walker, user_fault, &vcpu->arch.write_fault_to_shadow_pgtable);

if (walker.level >= PT_DIRECTORY_LEVEL)
force_pt_level = mapping_level_dirty_bitmap(vcpu, walker.gfn)
|| is_self_change_mapping;
else
if (walker.level >= PT_DIRECTORY_LEVEL && !is_self_change_mapping) {
force_pt_level = mapping_level_dirty_bitmap(vcpu, walker.gfn);
if (!force_pt_level) {
level = min(walker.level, mapping_level(vcpu, walker.gfn));
walker.gfn = walker.gfn & ~(KVM_PAGES_PER_HPAGE(level) - 1);
}
} else
force_pt_level = true;
if (!force_pt_level) {
level = min(walker.level, mapping_level(vcpu, walker.gfn));
walker.gfn = walker.gfn & ~(KVM_PAGES_PER_HPAGE(level) - 1);
}

mmu_seq = vcpu->kvm->mmu_notifier_seq;
smp_rmb();
Expand Down

0 comments on commit 5ed5c5c

Please sign in to comment.