[PATCH] KVM: MMU: Treat user-mode faults as a hint that a page is no longer a page table
Signed-off-by: Avi Kivity <avi@qumranet.com> Acked-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Родитель
32b3562735
Коммит
143646567f
|
@ -271,6 +271,7 @@ static int FNAME(fix_write_pf)(struct kvm_vcpu *vcpu,
|
|||
pt_element_t *guest_ent;
|
||||
int writable_shadow;
|
||||
gfn_t gfn;
|
||||
struct kvm_mmu_page *page;
|
||||
|
||||
if (is_writeble_pte(*shadow_ent))
|
||||
return 0;
|
||||
|
@ -303,7 +304,17 @@ static int FNAME(fix_write_pf)(struct kvm_vcpu *vcpu,
|
|||
}
|
||||
|
||||
gfn = walker->gfn;
|
||||
if (kvm_mmu_lookup_page(vcpu, gfn)) {
|
||||
|
||||
if (user) {
|
||||
/*
|
||||
* Usermode page faults won't be for page table updates.
|
||||
*/
|
||||
while ((page = kvm_mmu_lookup_page(vcpu, gfn)) != NULL) {
|
||||
pgprintk("%s: zap %lx %x\n",
|
||||
__FUNCTION__, gfn, page->role.word);
|
||||
kvm_mmu_zap_page(vcpu, page);
|
||||
}
|
||||
} else if (kvm_mmu_lookup_page(vcpu, gfn)) {
|
||||
pgprintk("%s: found shadow page for %lx, marking ro\n",
|
||||
__FUNCTION__, gfn);
|
||||
*write_pt = 1;
|
||||
|
|
Загрузка…
Ссылка в новой задаче