• Bharat Bhushan's avatar
    kvm: ppc: booke: check range page invalidation progress on page setup · 40fde70d
    Bharat Bhushan authored
    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: default avatarBharat Bhushan <bharat.bhushan@freescale.com>
    Acked-by: default avatarAlexander Graf <agraf@suse.de>
    [Backported to 3.12 - Paolo]
    Reviewed-by: default avatarBharat Bhushan <bharat.bhushan@freescale.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    40fde70d
e500_mmu_host.c 17.6 KB