OSDN Git Service

KVM: MMU: move local TLB flush to mmu_set_spte
authorMarcelo Tosatti <mtosatti@redhat.com>
Tue, 23 Sep 2008 16:18:31 +0000 (13:18 -0300)
committerAvi Kivity <avi@redhat.com>
Wed, 15 Oct 2008 12:25:17 +0000 (14:25 +0200)
Since the sync page path can collapse flushes.

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/kvm/mmu.c

index 9ad4cc5..23752ef 100644 (file)
@@ -1189,10 +1189,8 @@ static int set_spte(struct kvm_vcpu *vcpu, u64 *shadow_pte,
                                 __func__, gfn);
                        ret = 1;
                        pte_access &= ~ACC_WRITE_MASK;
-                       if (is_writeble_pte(spte)) {
+                       if (is_writeble_pte(spte))
                                spte &= ~PT_WRITABLE_MASK;
-                               kvm_x86_ops->tlb_flush(vcpu);
-                       }
                }
        }
 
@@ -1241,9 +1239,11 @@ static void mmu_set_spte(struct kvm_vcpu *vcpu, u64 *shadow_pte,
                }
        }
        if (set_spte(vcpu, shadow_pte, pte_access, user_fault, write_fault,
-                     dirty, largepage, gfn, pfn, speculative))
+                     dirty, largepage, gfn, pfn, speculative)) {
                if (write_fault)
                        *ptwrite = 1;
+               kvm_x86_ops->tlb_flush(vcpu);
+       }
 
        pgprintk("%s: setting spte %llx\n", __func__, *shadow_pte);
        pgprintk("instantiating %s PTE (%s) at %ld (%llx) addr %p\n",