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; }