KVM: MMU: do not record gfn in kvm_mmu_pte_write
authorXiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Fri, 4 Mar 2011 11:00:00 +0000 (19:00 +0800)
committerMarcelo Tosatti <mtosatti@redhat.com>
Thu, 17 Mar 2011 16:08:32 +0000 (13:08 -0300)
No need to record the gfn to verifier the pte has the same mode as
current vcpu, it's because we only speculatively update the pte only
if the pte and vcpu have the same mode

Signed-off-by: Xiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/mmu.c
arch/x86/kvm/paging_tmpl.h

index 37bd730ff8520446b89bc3e14c270a44f986cb5b..f08314f303e0e377b69c74a123c1f780eac9a559 100644 (file)
@@ -336,7 +336,6 @@ struct kvm_vcpu_arch {
        gfn_t last_pte_gfn;
 
        struct {
-               gfn_t gfn;      /* presumed gfn during guest pte update */
                pfn_t pfn;      /* pfn corresponding to that gfn */
                unsigned long mmu_seq;
        } update_pte;
index d5455b1b725fbe144d3097d93e803e20def984c3..91a194667432f34d76075cff241698c12563bd7b 100644 (file)
@@ -3228,7 +3228,6 @@ static void mmu_guess_page_from_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa,
                kvm_release_pfn_clean(pfn);
                return;
        }
-       vcpu->arch.update_pte.gfn = gfn;
        vcpu->arch.update_pte.pfn = pfn;
 }
 
@@ -3275,9 +3274,8 @@ void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa,
 
        /*
         * Assume that the pte write on a page table of the same type
-        * as the current vcpu paging mode.  This is nearly always true
-        * (might be false while changing modes).  Note it is verified later
-        * by update_pte().
+        * as the current vcpu paging mode since we update the sptes only
+        * when they have the same mode.
         */
        if ((is_pae(vcpu) && bytes == 4) || !new) {
                /* Handle a 32-bit guest writing two halves of a 64-bit gpte */
index 6bccc24c41818c4c4b1074d16e76e393b1d5e569..b3862eeabb8aba92a2cb7f32e6b2a018ccad27d2 100644 (file)
@@ -339,8 +339,6 @@ static void FNAME(update_pte)(struct kvm_vcpu *vcpu, struct kvm_mmu_page *sp,
 
        pgprintk("%s: gpte %llx spte %p\n", __func__, (u64)gpte, spte);
        pte_access = sp->role.access & FNAME(gpte_access)(vcpu, gpte);
-       if (gpte_to_gfn(gpte) != vcpu->arch.update_pte.gfn)
-               return;
        pfn = vcpu->arch.update_pte.pfn;
        if (is_error_pfn(pfn))
                return;