From: "Kirill A. Shutemov" Invoke tdx_pamt_{get/put}() to add/remove Dynamic PAMT page pair for guest private memory only when the S-EPT mapping size is 4KB. When the mapping size is greater than 4KB, static PAMT pages are used. No need to install/uninstall extra PAMT pages dynamically. Signed-off-by: Kirill A. Shutemov [Yan: Move level checking to callers of tdx_pamt_{get/put}()] Signed-off-by: Yan Zhao --- v3: - new patch Checking for 4KB level was previously done inside tdx_pamt_{get/put}() in DPAMT v2 [1]. Move the checking to callers of tdx_pamt_{get/put}() in KVM to avoid introducing an extra "level" parameter to tdx_pamt_{get/put}(). This is also because the callers that could have level > 4KB are limited in KVM, i.e., only inside tdx_sept_{set/remove}_private_spte(). [1] https://lore.kernel.org/all/20250609191340.2051741-5-kirill.shutemov@linux.intel.com --- arch/x86/kvm/vmx/tdx.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c index 712aaa3d45b7..c1dc1aaae49d 100644 --- a/arch/x86/kvm/vmx/tdx.c +++ b/arch/x86/kvm/vmx/tdx.c @@ -1722,9 +1722,11 @@ static int tdx_sept_set_private_spte(struct kvm *kvm, gfn_t gfn, WARN_ON_ONCE(!is_shadow_present_pte(mirror_spte) || (mirror_spte & VMX_EPT_RWX_MASK) != VMX_EPT_RWX_MASK); - ret = tdx_pamt_get(page, &tdx->prealloc); - if (ret) - return ret; + if (level == PG_LEVEL_4K) { + ret = tdx_pamt_get(page, &tdx->prealloc); + if (ret) + return ret; + } /* * Ensure pre_fault_allowed is read by kvm_arch_vcpu_pre_fault_memory() @@ -1743,7 +1745,7 @@ static int tdx_sept_set_private_spte(struct kvm *kvm, gfn_t gfn, else ret = tdx_mem_page_add(kvm, gfn, level, pfn); - if (ret) + if (ret && level == PG_LEVEL_4K) tdx_pamt_put(page); return ret; @@ -1911,7 +1913,9 @@ static void tdx_sept_remove_private_spte(struct kvm *kvm, gfn_t gfn, tdx_quirk_reset_folio(folio, folio_page_idx(folio, page), KVM_PAGES_PER_HPAGE(level)); - tdx_pamt_put(page); + + if (level == PG_LEVEL_4K) + tdx_pamt_put(page); } /* -- 2.43.2