• Sean Christopherson's avatar
    KVM: x86/mmu: Update number of zapped pages even if page list is stable · b28cb0cd
    Sean Christopherson authored
    When zapping obsolete pages, update the running count of zapped pages
    regardless of whether or not the list has become unstable due to zapping
    a shadow page with its own child shadow pages.  If the VM is backed by
    mostly 4kb pages, KVM can zap an absurd number of SPTEs without bumping
    the batch count and thus without yielding.  In the worst case scenario,
    this can cause a soft lokcup.
    
     watchdog: BUG: soft lockup - CPU#12 stuck for 22s! [dirty_log_perf_:13020]
       RIP: 0010:workingset_activation+0x19/0x130
       mark_page_accessed+0x266/0x2e0
       kvm_set_pfn_accessed+0x31/0x40
       mmu_spte_clear_track_bits+0x136/0x1c0
       drop_spte+0x1a/0xc0
       mmu_page_zap_pte+0xef/0x120
       __kvm_mmu_prepare_zap_page+0x205/0x5e0
       kvm_mmu_zap_all_fast+0xd7/0x190
       kvm_mmu_invalidate_zap_pages_in_memslot+0xe/0x10
       kvm_page_track_flush_slot+0x5c/0x80
       kvm_arch_flush_shadow_memslot+0xe/0x10
       kvm_set_memslot+0x1a8/0x5d0
       __kvm_set_memory_region+0x337/0x590
       kvm_vm_ioctl+0xb08/0x1040
    
    Fixes: fbb158cb ("KVM: x86/mmu: Revert "Revert "KVM: MMU: zap pages in batch""")
    Reported-by: default avatarDavid Matlack <dmatlack@google.com>
    Reviewed-by: default avatarBen Gardon <bgardon@google.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    Message-Id: <20220511145122.3133334-1-seanjc@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    b28cb0cd
mmu.c 174 KB