From 3cee4446d355c1a3aa1c407e0de4716856334956 Mon Sep 17 00:00:00 2001 From: Xiao Guangrong Date: Fri, 16 Jul 2010 11:25:17 +0800 Subject: [PATCH] --- yaml --- r: 202423 b: refs/heads/master c: 9ed5520dd3c9cb79c25f95fce9c57b87637d0fb7 h: refs/heads/master i: 202421: d3732e977be5ac17daad7febbff40c4ed7fc5a95 202419: 9fb2104d46a6349a1546573f089f8aeaa4388f6e 202415: 14c62e1ea53a6502b08ae9505e6ecbc3767a6e35 v: v3 --- [refs] | 2 +- trunk/arch/x86/kvm/mmu.c | 10 +++------- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index af168f83fabc..97d11126d134 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: daa3db693ce925a14b7e17ab6f306dc0e6a5342c +refs/heads/master: 9ed5520dd3c9cb79c25f95fce9c57b87637d0fb7 diff --git a/trunk/arch/x86/kvm/mmu.c b/trunk/arch/x86/kvm/mmu.c index 9b3b916ebeae..a04756a26fe2 100644 --- a/trunk/arch/x86/kvm/mmu.c +++ b/trunk/arch/x86/kvm/mmu.c @@ -1985,6 +1985,8 @@ static int set_spte(struct kvm_vcpu *vcpu, u64 *sptep, mark_page_dirty(vcpu->kvm, gfn); set_pte: + if (is_writable_pte(*sptep) && !is_writable_pte(spte)) + kvm_set_pfn_dirty(pfn); update_spte(sptep, spte); done: return ret; @@ -1998,7 +2000,6 @@ static void mmu_set_spte(struct kvm_vcpu *vcpu, u64 *sptep, bool reset_host_protection) { int was_rmapped = 0; - int was_writable = is_writable_pte(*sptep); int rmap_count; pgprintk("%s: spte %llx access %x write_fault %d" @@ -2048,15 +2049,10 @@ static void mmu_set_spte(struct kvm_vcpu *vcpu, u64 *sptep, page_header_update_slot(vcpu->kvm, sptep, gfn); if (!was_rmapped) { rmap_count = rmap_add(vcpu, sptep, gfn); - kvm_release_pfn_clean(pfn); if (rmap_count > RMAP_RECYCLE_THRESHOLD) rmap_recycle(vcpu, sptep, gfn); - } else { - if (was_writable) - kvm_release_pfn_dirty(pfn); - else - kvm_release_pfn_clean(pfn); } + kvm_release_pfn_clean(pfn); if (speculative) { vcpu->arch.last_pte_updated = sptep; vcpu->arch.last_pte_gfn = gfn;