Skip to content

Commit

Permalink
KVM: MMU: Fix dirty page setting for pages removed from rmap
Browse files Browse the repository at this point in the history
Right now rmap_remove won't set the page as dirty if the shadow pte
pointed to this page had write access and then it became readonly.
This patches fixes that, by setting the page as dirty for spte changes from
write to readonly access.

Signed-off-by: Izik Eidus <izike@qumranet.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
  • Loading branch information
Izik Eidus authored and Avi Kivity committed Jan 30, 2008
1 parent 6f723c7 commit 75e68e6
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions arch/x86/kvm/mmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 75e68e6

Please sign in to comment.