]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: TDX: Fold tdx_sept_zap_private_spte() into tdx_sept_remove_private_spte()
authorSean Christopherson <seanjc@google.com>
Thu, 30 Oct 2025 20:09:40 +0000 (13:09 -0700)
committerSean Christopherson <seanjc@google.com>
Wed, 5 Nov 2025 19:07:02 +0000 (11:07 -0800)
Do TDH_MEM_RANGE_BLOCK directly in tdx_sept_remove_private_spte() instead
of using a one-off helper now that the nr_premapped tracking is gone.

Opportunistically drop the WARN on hugepages, which was dead code (see the
KVM_BUG_ON() in tdx_sept_remove_private_spte()).

No functional change intended.

Reviewed-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
Reviewed-by: Kai Huang <kai.huang@intel.com>
Reviewed-by: Binbin Wu <binbin.wu@linux.intel.com>
Reviewed-by: Yan Zhao <yan.y.zhao@intel.com>
Tested-by: Yan Zhao <yan.y.zhao@intel.com>
Tested-by: Kai Huang <kai.huang@intel.com>
Link: https://patch.msgid.link/20251030200951.3402865-18-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/vmx/tdx.c

index 14cadd0d71c02ea5bbb080cb2a91514f1e752796..797771918b2ac29a46fb0c2feeb7fa209cb7f86d 100644 (file)
@@ -1683,33 +1683,6 @@ static int tdx_sept_link_private_spt(struct kvm *kvm, gfn_t gfn,
        return 0;
 }
 
-static int tdx_sept_zap_private_spte(struct kvm *kvm, gfn_t gfn,
-                                    enum pg_level level, struct page *page)
-{
-       int tdx_level = pg_level_to_tdx_sept_level(level);
-       struct kvm_tdx *kvm_tdx = to_kvm_tdx(kvm);
-       gpa_t gpa = gfn_to_gpa(gfn) & KVM_HPAGE_MASK(level);
-       u64 err, entry, level_state;
-
-       /* For now large page isn't supported yet. */
-       WARN_ON_ONCE(level != PG_LEVEL_4K);
-
-       err = tdh_mem_range_block(&kvm_tdx->td, gpa, tdx_level, &entry, &level_state);
-
-       if (unlikely(tdx_operand_busy(err))) {
-               /* After no vCPUs enter, the second retry is expected to succeed */
-               tdx_no_vcpus_enter_start(kvm);
-               err = tdh_mem_range_block(&kvm_tdx->td, gpa, tdx_level, &entry, &level_state);
-               tdx_no_vcpus_enter_stop(kvm);
-       }
-
-       if (KVM_BUG_ON(err, kvm)) {
-               pr_tdx_error_2(TDH_MEM_RANGE_BLOCK, err, entry, level_state);
-               return -EIO;
-       }
-       return 1;
-}
-
 /*
  * Ensure shared and private EPTs to be flushed on all vCPUs.
  * tdh_mem_track() is the only caller that increases TD epoch. An increase in
@@ -1790,7 +1763,6 @@ static void tdx_sept_remove_private_spte(struct kvm *kvm, gfn_t gfn,
        struct kvm_tdx *kvm_tdx = to_kvm_tdx(kvm);
        gpa_t gpa = gfn_to_gpa(gfn);
        u64 err, entry, level_state;
-       int ret;
 
        /*
         * HKID is released after all private pages have been removed, and set
@@ -1804,9 +1776,18 @@ static void tdx_sept_remove_private_spte(struct kvm *kvm, gfn_t gfn,
        if (KVM_BUG_ON(level != PG_LEVEL_4K, kvm))
                return;
 
-       ret = tdx_sept_zap_private_spte(kvm, gfn, level, page);
-       if (ret <= 0)
+       err = tdh_mem_range_block(&kvm_tdx->td, gpa, tdx_level, &entry, &level_state);
+       if (unlikely(tdx_operand_busy(err))) {
+               /* After no vCPUs enter, the second retry is expected to succeed */
+               tdx_no_vcpus_enter_start(kvm);
+               err = tdh_mem_range_block(&kvm_tdx->td, gpa, tdx_level, &entry, &level_state);
+               tdx_no_vcpus_enter_stop(kvm);
+       }
+
+       if (KVM_BUG_ON(err, kvm)) {
+               pr_tdx_error_2(TDH_MEM_RANGE_BLOCK, err, entry, level_state);
                return;
+       }
 
        /*
         * TDX requires TLB tracking before dropping private page.  Do