]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
KVM: MMU: don't atomicly set spte if it's not present
authorXiao Guangrong <xiaoguangrong@cn.fujitsu.com>
Fri, 16 Jul 2010 03:27:10 +0000 (11:27 +0800)
committerAvi Kivity <avi@redhat.com>
Mon, 2 Aug 2010 03:40:59 +0000 (06:40 +0300)
If the old mapping is not present, the spte.a is not lost, so no need
atomic operation to set it

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

index a04756a26fe2399b8e3834ae1ff6fffab349f58c..9c7fae08291dc405493024be848e7441626cb6a2 100644 (file)
@@ -307,9 +307,10 @@ static void update_spte(u64 *sptep, u64 new_spte)
 {
        u64 old_spte;
 
-       if (!shadow_accessed_mask || (new_spte & shadow_accessed_mask)) {
+       if (!shadow_accessed_mask || (new_spte & shadow_accessed_mask) ||
+             !is_rmap_spte(*sptep))
                __set_spte(sptep, new_spte);
-       else {
+       else {
                old_spte = __xchg_spte(sptep, new_spte);
                if (old_spte & shadow_accessed_mask)
                        mark_page_accessed(pfn_to_page(spte_to_pfn(old_spte)));