]> git.kernelconcepts.de Git - karo-tx-linux.git/commit
KVM: MIPS/MMU: Use generic dirty log & protect helper
authorJames Hogan <james.hogan@imgtec.com>
Tue, 6 Dec 2016 14:50:52 +0000 (14:50 +0000)
committerJames Hogan <james.hogan@imgtec.com>
Fri, 3 Feb 2017 15:21:23 +0000 (15:21 +0000)
commite88643ba1acb48fa30345ba75cc324d7181aa2bf
treea3e29e7b09de170f9c84af72749d6969fd63ccee
parentf0c0c330f7bb1a640968798b63c0dffc6a8af0ec
KVM: MIPS/MMU: Use generic dirty log & protect helper

MIPS hasn't up to this point properly supported dirty page logging, as
pages in slots with dirty logging enabled aren't made clean, and tlbmod
exceptions from writes to clean pages have been assumed to be due to
guest TLB protection and unconditionally passed to the guest.

Use the generic dirty logging helper kvm_get_dirty_log_protect() to
properly implement kvm_vm_ioctl_get_dirty_log(), similar to how ARM
does. This uses xchg to clear the dirty bits when reading them, rather
than wiping them out afterwards with a memset, which would potentially
wipe recently set bits that weren't caught by kvm_get_dirty_log(). It
also makes the pages clean again using the
kvm_arch_mmu_enable_log_dirty_pt_masked() architecture callback so that
further writes after the shadow memslot is flushed will trigger tlbmod
exceptions and dirty handling.

Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Radim Krčmář" <rkrcmar@redhat.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-mips@linux-mips.org
Cc: kvm@vger.kernel.org
arch/mips/kvm/Kconfig
arch/mips/kvm/mips.c
arch/mips/kvm/mmu.c