KVM: x86/mmu: Expand collapsible SPTE zap for TDP MMU to ZONE_DEVICE and HugeTLB...
authorSean Christopherson <seanjc@google.com>
Sat, 13 Feb 2021 00:50:02 +0000 (16:50 -0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 19 Feb 2021 08:07:16 +0000 (03:07 -0500)
Zap SPTEs that are backed by ZONE_DEVICE pages when zappings SPTEs to
rebuild them as huge pages in the TDP MMU.  ZONE_DEVICE huge pages are
managed differently than "regular" pages and are not compound pages.
Likewise, PageTransCompoundMap() will not detect HugeTLB, so switch
to PageCompound().

This matches the similar check in kvm_mmu_zap_collapsible_spte.

Cc: Ben Gardon <bgardon@google.com>
Fixes: 14881998566d ("kvm: x86/mmu: Support disabling dirty logging for the tdp MMU")
Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-Id: <20210213005015.1651772-2-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/mmu/tdp_mmu.c

index 71e100a5670f91bc37126438929cf9fd36a15071..6e0741176a2ace2eee8e7c7f2e2c240aa86dabdd 100644 (file)
@@ -1348,7 +1348,8 @@ static void zap_collapsible_spte_range(struct kvm *kvm,
 
                pfn = spte_to_pfn(iter.old_spte);
                if (kvm_is_reserved_pfn(pfn) ||
-                   !PageTransCompoundMap(pfn_to_page(pfn)))
+                   (!PageCompound(pfn_to_page(pfn)) &&
+                    !kvm_is_zone_device_pfn(pfn)))
                        continue;
 
                tdp_mmu_set_spte(kvm, &iter, 0);