• Takuya Yoshikawa's avatar
    KVM: MMU: Make kvm_handle_hva() handle range of addresses · 84504ef3
    Takuya Yoshikawa authored
    When guest's memory is backed by THP pages, MMU notifier needs to call
    kvm_unmap_hva(), which in turn leads to kvm_handle_hva(), in a loop to
    invalidate a range of pages which constitute one huge page:
    
      for each page
        for each memslot
          if page is in memslot
            unmap using rmap
    
    This means although every page in that range is expected to be found in
    the same memslot, we are forced to check unrelated memslots many times.
    If the guest has more memslots, the situation will become worse.
    
    Furthermore, if the range does not include any pages in the guest's
    memory, the loop over the pages will just consume extra time.
    
    This patch, together with the following patches, solves this problem by
    introducing kvm_handle_hva_range() which makes the loop look like this:
    
      for each memslot
        for each page in memslot
          unmap using rmap
    
    In this new processing, the actual work is converted to a loop over rmap
    which is much more cache friendly than before.
    Signed-off-by: default avatarTakuya Yoshikawa <yoshikawa.takuya@oss.ntt.co.jp>
    Cc: Alexander Graf <agraf@suse.de>
    Cc: Paul Mackerras <paulus@samba.org>
    Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
    84504ef3
book3s_64_mmu_hv.c 28.5 KB