mirror of
https://github.com/torvalds/linux.git
synced 2024-12-28 13:51:44 +00:00
KVM: MMU: Fix dirty page setting for pages removed from rmap
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>
This commit is contained in:
parent
6f723c7911
commit
75e68e6078
@ -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 @@ unshadowed:
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user