diff options
Diffstat (limited to 'arch/x86/kvm/mmu.c')
-rw-r--r-- | arch/x86/kvm/mmu.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index c478ee25de66..8efdcdbebb03 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c | |||
@@ -890,6 +890,7 @@ static void mmu_set_spte(struct kvm_vcpu *vcpu, u64 *shadow_pte, | |||
890 | { | 890 | { |
891 | u64 spte; | 891 | u64 spte; |
892 | int was_rmapped = is_rmap_pte(*shadow_pte); | 892 | int was_rmapped = is_rmap_pte(*shadow_pte); |
893 | int was_writeble = is_writeble_pte(*shadow_pte); | ||
893 | 894 | ||
894 | pgprintk("%s: spte %llx access %x write_fault %d" | 895 | pgprintk("%s: spte %llx access %x write_fault %d" |
895 | " user_fault %d gfn %lx\n", | 896 | " user_fault %d gfn %lx\n", |
@@ -956,9 +957,12 @@ unshadowed: | |||
956 | rmap_add(vcpu, shadow_pte, gfn); | 957 | rmap_add(vcpu, shadow_pte, gfn); |
957 | if (!is_rmap_pte(*shadow_pte)) | 958 | if (!is_rmap_pte(*shadow_pte)) |
958 | kvm_release_page_clean(page); | 959 | kvm_release_page_clean(page); |
960 | } else { | ||
961 | if (was_writeble) | ||
962 | kvm_release_page_dirty(page); | ||
963 | else | ||
964 | kvm_release_page_clean(page); | ||
959 | } | 965 | } |
960 | else | ||
961 | kvm_release_page_clean(page); | ||
962 | if (!ptwrite || !*ptwrite) | 966 | if (!ptwrite || !*ptwrite) |
963 | vcpu->arch.last_pte_updated = shadow_pte; | 967 | vcpu->arch.last_pte_updated = shadow_pte; |
964 | } | 968 | } |