]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: TDX: Wrap mapping of leaf and non-leaf S-EPT entries into helpers
authorSean Christopherson <seanjc@google.com>
Sat, 9 May 2026 07:55:00 +0000 (15:55 +0800)
committerSean Christopherson <seanjc@google.com>
Wed, 27 May 2026 22:35:10 +0000 (15:35 -0700)
Add a helper, tdx_sept_map_leaf_spte(), to wrap and isolate PAGE.ADD and
PAGE.AUG operations. Rename tdx_sept_link_private_spt() to
tdx_sept_map_nonleaf_spte() to wrap SEPT.ADD for symmetry.

Thus, transition tdx_sept_set_private_spte() into a "dispatch" routine for
setting/writing S-EPT entries.

No functional change intended.

Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
Signed-off-by: Yan Zhao <yan.y.zhao@intel.com>
Link: https://patch.msgid.link/20260509075500.4157-1-yan.y.zhao@intel.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/vmx/tdx.c

index 2dfc90c449a77237e4a6b9dc0b88c55105d7fe31..965c1244e733dcd7ebe6ecd6b4936cd79b5139b4 100644 (file)
@@ -1666,7 +1666,7 @@ static struct page *tdx_spte_to_sept_pt(struct kvm *kvm, gfn_t gfn,
        return virt_to_page(sp->external_spt);
 }
 
-static int tdx_sept_link_private_spt(struct kvm *kvm, gfn_t gfn,
+static int tdx_sept_map_nonleaf_spte(struct kvm *kvm, gfn_t gfn,
                                     enum pg_level level, u64 mirror_spte)
 {
        gpa_t gpa = gfn_to_gpa(gfn);
@@ -1688,18 +1688,12 @@ static int tdx_sept_link_private_spt(struct kvm *kvm, gfn_t gfn,
        return 0;
 }
 
-static int tdx_sept_set_private_spte(struct kvm *kvm, gfn_t gfn,
-                                    enum pg_level level, u64 mirror_spte)
+static int tdx_sept_map_leaf_spte(struct kvm *kvm, gfn_t gfn, enum pg_level level,
+                                 u64 mirror_spte)
 {
        struct kvm_tdx *kvm_tdx = to_kvm_tdx(kvm);
        kvm_pfn_t pfn = spte_to_pfn(mirror_spte);
 
-       if (KVM_BUG_ON(!is_shadow_present_pte(mirror_spte), kvm))
-               return -EIO;
-
-       if (!is_last_spte(mirror_spte, level))
-               return tdx_sept_link_private_spt(kvm, gfn, level, mirror_spte);
-
        /* TODO: handle large pages. */
        if (KVM_BUG_ON(level != PG_LEVEL_4K, kvm))
                return -EIO;
@@ -1724,6 +1718,18 @@ static int tdx_sept_set_private_spte(struct kvm *kvm, gfn_t gfn,
        return tdx_mem_page_aug(kvm, gfn, level, pfn);
 }
 
+static int tdx_sept_set_private_spte(struct kvm *kvm, gfn_t gfn,
+                                    enum pg_level level, u64 mirror_spte)
+{
+       if (KVM_BUG_ON(!is_shadow_present_pte(mirror_spte), kvm))
+               return -EIO;
+
+       if (!is_last_spte(mirror_spte, level))
+               return tdx_sept_map_nonleaf_spte(kvm, gfn, level, mirror_spte);
+
+       return tdx_sept_map_leaf_spte(kvm, gfn, level, mirror_spte);
+}
+
 /*
  * 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