KVM: PPC: Book3S HV: Reset reverse-map chains when resetting the HPT
authorPaul Mackerras <paulus@samba.org>
Wed, 21 Nov 2012 23:27:19 +0000 (23:27 +0000)
committerAlexander Graf <agraf@suse.de>
Thu, 6 Dec 2012 00:33:58 +0000 (01:33 +0100)
commita64fd707481631b9682f9baeefac489bc55bbf73
tree362ad5936a0629a514a5dc8627e9521617b62047
parenta2932923ccf63c419c77aaa18ac09be98f2c94d8
KVM: PPC: Book3S HV: Reset reverse-map chains when resetting the HPT

With HV-style KVM, we maintain reverse-mapping lists that enable us to
find all the HPT (hashed page table) entries that reference each guest
physical page, with the heads of the lists in the memslot->arch.rmap
arrays.  When we reset the HPT (i.e. when we reboot the VM), we clear
out all the HPT entries but we were not clearing out the reverse
mapping lists.  The result is that as we create new HPT entries, the
lists get corrupted, which can easily lead to loops, resulting in the
host kernel hanging when it tries to traverse those lists.

This fixes the problem by zeroing out all the reverse mapping lists
when we zero out the HPT.  This incidentally means that we are also
zeroing our record of the referenced and changed bits (not the bits
in the Linux PTEs, used by the Linux MM subsystem, but the bits used
by the KVM_GET_DIRTY_LOG ioctl, and those used by kvm_age_hva() and
kvm_test_age_hva()).

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
arch/powerpc/kvm/book3s_64_mmu_hv.c