• Sean Christopherson's avatar
    KVM: Fully serialize gfn=>pfn cache refresh via mutex · 93984f19
    Sean Christopherson authored
    
    
    Protect gfn=>pfn cache refresh with a mutex to fully serialize refreshes.
    The refresh logic doesn't protect against
    
    - concurrent unmaps, or refreshes with different GPAs (which may or may not
      happen in practice, for example if a cache is only used under vcpu->mutex;
      but it's allowed in the code)
    
    - a false negative on the memslot generation.  If the first refresh sees
      a stale memslot generation, it will refresh the hva and generation before
      moving on to the hva=>pfn translation.  If it then drops gpc->lock, a
      different user of the cache can come along, acquire gpc->lock, see that
      the memslot generation is fresh, and skip the hva=>pfn update due to the
      userspace address also matching (because it too was updated).
    
    The refresh path can already sleep during hva=>pfn resolution, so wrap
    the refresh with a mutex to ensure that any given refresh runs to
    completion before other callers can start their refresh.
    
    Cc: stable@vger.kernel.org
    Cc: Lai Jiangshan <jiangshanlai@gmail.com>
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20220429210025.3293691-7-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    93984f19
pfncache.c 7.88 KB