]> git.baikalelectronics.ru Git - kernel.git/commit
kvm: ppc: booke: check range page invalidation progress on page setup
authorBharat Bhushan <r65777@freescale.com>
Wed, 7 Aug 2013 10:03:46 +0000 (15:33 +0530)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 10 Oct 2013 09:40:08 +0000 (11:40 +0200)
commit2033c6dfc79aa2eca74a24d65ad0eea4e1e18433
tree9d9ec53946c35f6335c87a6ec6ba504ed7690fbc
parent2c6cd29405e5c5dcd79649e957abe799c803b986
kvm: ppc: booke: check range page invalidation progress on page setup

When the MM code is invalidating a range of pages, it calls the KVM
kvm_mmu_notifier_invalidate_range_start() notifier function, which calls
kvm_unmap_hva_range(), which arranges to flush all the TLBs for guest pages.
However, the Linux PTEs for the range being flushed are still valid at
that point.  We are not supposed to establish any new references to pages
in the range until the ...range_end() notifier gets called.
The PPC-specific KVM code doesn't get any explicit notification of that;
instead, we are supposed to use mmu_notifier_retry() to test whether we
are or have been inside a range flush notifier pair while we have been
referencing a page.

This patch calls the mmu_notifier_retry() while mapping the guest
page to ensure we are not referencing a page when in range invalidation.

This call is inside a region locked with kvm->mmu_lock, which is the
same lock that is called by the KVM MMU notifier functions, thus
ensuring that no new notification can proceed while we are in the
locked region.

Signed-off-by: Bharat Bhushan <bharat.bhushan@freescale.com>
Acked-by: Alexander Graf <agraf@suse.de>
[Backported to 3.12 - Paolo]
Reviewed-by: Bharat Bhushan <bharat.bhushan@freescale.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/powerpc/kvm/e500_mmu_host.c