From f990270a2e80f636492a7a4890c5264056fba5a6 Mon Sep 17 00:00:00 2001 From: Izik Eidus Date: Sat, 12 Jan 2008 23:49:09 +0200 Subject: [PATCH] --- yaml --- r: 80867 b: refs/heads/master c: 75e68e607896c84310dee37c783c45220e56ce8c h: refs/heads/master i: 80865: bc2f8965540ad45f9661e2d194be992be7b5b711 80863: 3cbc7605764788d6784f71d73aef7d74c7b2a383 v: v3 --- [refs] | 2 +- trunk/arch/x86/kvm/mmu.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index b53088aac957..8c1f4ffab69a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6f723c7911e7827091586ae63f4040874eeb75e5 +refs/heads/master: 75e68e607896c84310dee37c783c45220e56ce8c diff --git a/trunk/arch/x86/kvm/mmu.c b/trunk/arch/x86/kvm/mmu.c index c478ee25de66..8efdcdbebb03 100644 --- a/trunk/arch/x86/kvm/mmu.c +++ b/trunk/arch/x86/kvm/mmu.c @@ -890,6 +890,7 @@ static void mmu_set_spte(struct kvm_vcpu *vcpu, u64 *shadow_pte, { u64 spte; int was_rmapped = is_rmap_pte(*shadow_pte); + int was_writeble = is_writeble_pte(*shadow_pte); pgprintk("%s: spte %llx access %x write_fault %d" " user_fault %d gfn %lx\n", @@ -956,9 +957,12 @@ static void mmu_set_spte(struct kvm_vcpu *vcpu, u64 *shadow_pte, rmap_add(vcpu, shadow_pte, gfn); if (!is_rmap_pte(*shadow_pte)) kvm_release_page_clean(page); + } else { + if (was_writeble) + kvm_release_page_dirty(page); + else + kvm_release_page_clean(page); } - else - kvm_release_page_clean(page); if (!ptwrite || !*ptwrite) vcpu->arch.last_pte_updated = shadow_pte; }