Skip to content

Commit

Permalink
KVM: MMU: Move sync_page() first pte address calculation out of loop
Browse files Browse the repository at this point in the history
Move first pte address calculation out of loop to save some cycles.

Signed-off-by: Gui Jianfeng <guijianfeng@cn.fujitsu.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
  • Loading branch information
Gui Jianfeng authored and Avi Kivity committed May 17, 2010
1 parent 66cbff5 commit 51fb60d
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions arch/x86/kvm/paging_tmpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -572,12 +572,15 @@ static int FNAME(sync_page)(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp)
{
int i, offset, nr_present;
bool reset_host_protection;
gpa_t first_pte_gpa;

offset = nr_present = 0;

if (PTTYPE == 32)
offset = sp->role.quadrant << PT64_LEVEL_BITS;

first_pte_gpa = gfn_to_gpa(sp->gfn) + offset * sizeof(pt_element_t);

for (i = 0; i < PT64_ENT_PER_PAGE; i++) {
unsigned pte_access;
pt_element_t gpte;
Expand All @@ -587,8 +590,7 @@ static int FNAME(sync_page)(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp)
if (!is_shadow_present_pte(sp->spt[i]))
continue;

pte_gpa = gfn_to_gpa(sp->gfn);
pte_gpa += (i+offset) * sizeof(pt_element_t);
pte_gpa = first_pte_gpa + i * sizeof(pt_element_t);

if (kvm_read_guest_atomic(vcpu->kvm, pte_gpa, &gpte,
sizeof(pt_element_t)))
Expand Down

0 comments on commit 51fb60d

Please sign in to comment.