Skip to content

Commit 14c9938

Browse files
committed
KVM: TDX: Fold tdx_sept_zap_private_spte() into tdx_sept_remove_private_spte()
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>
1 parent 6b5b71f commit 14c9938

File tree

1 file changed

+11
-30
lines changed

1 file changed

+11
-30
lines changed

arch/x86/kvm/vmx/tdx.c

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1683,33 +1683,6 @@ static int tdx_sept_link_private_spt(struct kvm *kvm, gfn_t gfn,
16831683
return 0;
16841684
}
16851685

1686-
static int tdx_sept_zap_private_spte(struct kvm *kvm, gfn_t gfn,
1687-
enum pg_level level, struct page *page)
1688-
{
1689-
int tdx_level = pg_level_to_tdx_sept_level(level);
1690-
struct kvm_tdx *kvm_tdx = to_kvm_tdx(kvm);
1691-
gpa_t gpa = gfn_to_gpa(gfn) & KVM_HPAGE_MASK(level);
1692-
u64 err, entry, level_state;
1693-
1694-
/* For now large page isn't supported yet. */
1695-
WARN_ON_ONCE(level != PG_LEVEL_4K);
1696-
1697-
err = tdh_mem_range_block(&kvm_tdx->td, gpa, tdx_level, &entry, &level_state);
1698-
1699-
if (unlikely(tdx_operand_busy(err))) {
1700-
/* After no vCPUs enter, the second retry is expected to succeed */
1701-
tdx_no_vcpus_enter_start(kvm);
1702-
err = tdh_mem_range_block(&kvm_tdx->td, gpa, tdx_level, &entry, &level_state);
1703-
tdx_no_vcpus_enter_stop(kvm);
1704-
}
1705-
1706-
if (KVM_BUG_ON(err, kvm)) {
1707-
pr_tdx_error_2(TDH_MEM_RANGE_BLOCK, err, entry, level_state);
1708-
return -EIO;
1709-
}
1710-
return 1;
1711-
}
1712-
17131686
/*
17141687
* Ensure shared and private EPTs to be flushed on all vCPUs.
17151688
* 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,
17901763
struct kvm_tdx *kvm_tdx = to_kvm_tdx(kvm);
17911764
gpa_t gpa = gfn_to_gpa(gfn);
17921765
u64 err, entry, level_state;
1793-
int ret;
17941766

17951767
/*
17961768
* 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,
18041776
if (KVM_BUG_ON(level != PG_LEVEL_4K, kvm))
18051777
return;
18061778

1807-
ret = tdx_sept_zap_private_spte(kvm, gfn, level, page);
1808-
if (ret <= 0)
1779+
err = tdh_mem_range_block(&kvm_tdx->td, gpa, tdx_level, &entry, &level_state);
1780+
if (unlikely(tdx_operand_busy(err))) {
1781+
/* After no vCPUs enter, the second retry is expected to succeed */
1782+
tdx_no_vcpus_enter_start(kvm);
1783+
err = tdh_mem_range_block(&kvm_tdx->td, gpa, tdx_level, &entry, &level_state);
1784+
tdx_no_vcpus_enter_stop(kvm);
1785+
}
1786+
1787+
if (KVM_BUG_ON(err, kvm)) {
1788+
pr_tdx_error_2(TDH_MEM_RANGE_BLOCK, err, entry, level_state);
18091789
return;
1790+
}
18101791

18111792
/*
18121793
* TDX requires TLB tracking before dropping private page. Do

0 commit comments

Comments
 (0)