• Sean Christopherson's avatar
    KVM: x86/mmu: Block all page faults during kvm_zap_gfn_range() · 6d3085e4
    Sean Christopherson authored
    When zapping a GFN range, pass 0 => ALL_ONES for the to-be-invalidated
    range to effectively block all page faults while the zap is in-progress.
    The invalidation helpers take a host virtual address, whereas zapping a
    GFN obviously provides a guest physical address and with the wrong unit
    of measurement (frame vs. byte).
    
    Alternatively, KVM could walk all memslots to get the associated HVAs,
    but thanks to SMM, that would require multiple lookups.  And practically
    speaking, kvm_zap_gfn_range() usage is quite rare and not a hot path,
    e.g. MTRR and CR0.CD are almost guaranteed to be done only on vCPU0
    during boot, and APICv inhibits are similarly infrequent operations.
    
    Fixes: edb298c6 ("KVM: x86/mmu: bump mmu notifier count in kvm_zap_gfn_range")
    Reported-by: default avatarChao Peng <chao.p.peng@linux.intel.com>
    Cc: stable@vger.kernel.org
    Cc: Maxim Levitsky <mlevitsk@redhat.com>
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20221111001841.2412598-1-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    6d3085e4
mmu.c 189 KB