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 <[email protected]>
Reviewed-by: Kai Huang <[email protected]>
Signed-off-by: Sean Christopherson <[email protected]>
---
 arch/x86/kvm/vmx/tdx.c | 41 +++++++++++------------------------------
 1 file changed, 11 insertions(+), 30 deletions(-)

diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c
index cfdf8d262756..260b569309cf 100644
--- a/arch/x86/kvm/vmx/tdx.c
+++ b/arch/x86/kvm/vmx/tdx.c
@@ -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
-- 
2.51.1.930.gacf6e81ea2-goog


Reply via email to