diff options
author | Marcelo Tosatti <mtosatti@redhat.com> | 2008-06-08 01:48:53 -0300 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2008-06-24 12:17:10 +0300 |
commit | 6597ca09e6c0e5aec7ffd2b8ab48c671d3c28414 (patch) | |
tree | 9bbe5dab501fa1369ce882a4713ebdd227e09f19 /arch/x86/kvm/mmu.c | |
parent | 06e05645661211b9eaadaf6344c335d2e80f0ba2 (diff) | |
download | op-kernel-dev-6597ca09e6c0e5aec7ffd2b8ab48c671d3c28414.zip op-kernel-dev-6597ca09e6c0e5aec7ffd2b8ab48c671d3c28414.tar.gz |
KVM: MMU: Fix rmap_write_protect() hugepage iteration bug
rmap_next() does not work correctly after rmap_remove(), as it expects
the rmap chains not to change during iteration. Fix (for now) by restarting
iteration from the beginning.
Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'arch/x86/kvm/mmu.c')
-rw-r--r-- | arch/x86/kvm/mmu.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c index ee3f530..9628091 100644 --- a/arch/x86/kvm/mmu.c +++ b/arch/x86/kvm/mmu.c @@ -640,6 +640,7 @@ static void rmap_write_protect(struct kvm *kvm, u64 gfn) rmap_remove(kvm, spte); --kvm->stat.lpages; set_shadow_pte(spte, shadow_trap_nonpresent_pte); + spte = NULL; write_protected = 1; } spte = rmap_next(kvm, rmapp, spte); |