• Paul Mackerras's avatar
    KVM: PPC: Book3S HV: Flush guest mappings when turning dirty tracking on/off · 5af3e9d0
    Paul Mackerras authored
    This adds code to flush the partition-scoped page tables for a radix
    guest when dirty tracking is turned on or off for a memslot.  Only the
    guest real addresses covered by the memslot are flushed.  The reason
    for this is to get rid of any 2M PTEs in the partition-scoped page
    tables that correspond to host transparent huge pages, so that page
    dirtiness is tracked at a system page (4k or 64k) granularity rather
    than a 2M granularity.  The page tables are also flushed when turning
    dirty tracking off so that the memslot's address space can be
    repopulated with THPs if possible.
    
    To do this, we add a new function kvmppc_radix_flush_memslot().  Since
    this does what's needed for kvmppc_core_flush_memslot_hv() on a radix
    guest, we now make kvmppc_core_flush_memslot_hv() call the new
    kvmppc_radix_flush_memslot() rather than calling kvm_unmap_radix()
    for each page in the memslot.  This has the effect of fixing a bug in
    that kvmppc_core_flush_memslot_hv() was previously calling
    kvm_unmap_radix() without holding the kvm->mmu_lock spinlock, which
    is required to be held.
    Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
    Reviewed-by: default avatarSuraj Jitindar Singh <sjitindarsingh@gmail.com>
    Reviewed-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    Signed-off-by: default avatarPaul Mackerras <paulus@ozlabs.org>
    5af3e9d0
book3s_64_mmu_hv.c 53.4 KB