mirror of
https://github.com/torvalds/linux.git
synced 2026-07-31 03:27:03 +02:00
KVM: TDX: Wrap mapping of leaf and non-leaf S-EPT entries into helpers
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>
This commit is contained in:
parent
12d595795d
commit
176dcd88f4
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user