From: Rick Edgecombe <rick.p.edgecombe@intel.com>
To: bp@alien8.de, dave.hansen@intel.com, hpa@zytor.com,
kas@kernel.org, kvm@vger.kernel.org, linux-coco@lists.linux.dev,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
mingo@redhat.com, nik.borisov@suse.com, pbonzini@redhat.com,
seanjc@google.com, tglx@kernel.org, vannapurve@google.com,
x86@kernel.org, chao.gao@intel.com, yan.y.zhao@intel.com,
kai.huang@intel.com, tony.lindgren@linux.intel.com,
binbin.wu@intel.com, sohil.mehta@intel.com
Cc: rick.p.edgecombe@intel.com
Subject: [PATCH v11 00/11] Dynamic PAMT
Date: Fri, 4 Sep 2026 14:58:30 -0700 [thread overview]
Message-ID: <20260904215841.303070-1-rick.p.edgecombe@intel.com> (raw)
Hi,
This is a quick v11 of the Dynamic PAMT TDX series, to fix the two minor
issues. The main change is to remove the kernel parameter, and go back to
essentially a v5 version of patch 9. The other tiny change is correct the
__maybe_unused ordering noise that came from applying a change to the
wrong patch.
Differences from v10 are simply:
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index e7558b8382acf..68647ff4bdd24 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -7582,16 +7582,6 @@ Kernel parameters
tdfx= [HW,DRM]
- tdx_dpamt=
- [X86] Controls whether TDX will use Dynamic PAMT
- to save memory, when supported.
-
- Valid parameters: "on", "off"
- Default: "off"
-
- For details see:
- Documentation/arch/x86/tdx.rst
-
test_suspend= [SUSPEND]
Format: { "mem" | "standby" | "freeze" }[,N]
Specify "mem" (for Suspend-to-RAM) or "standby" (for
diff --git a/Documentation/arch/x86/tdx.rst b/Documentation/arch/x86/tdx.rst
index de09967ce8d8c..a36ea2bd4301d 100644
--- a/Documentation/arch/x86/tdx.rst
+++ b/Documentation/arch/x86/tdx.rst
@@ -219,13 +219,7 @@ When Dynamic PAMT is in use, dmesg shows it like::
[..] virt/tdx: 10092 KB allocated for PAMT
[..] virt/tdx: TDX-Module initialized
-Dynamic PAMT is only enabled when supported and the ``tdx_dpamt=`` kernel
-parameter is set to "on". The feature is off by default because TDX module
-internal details prevent Dynamic PAMT from working on all keyid partitioning
-configurations. When the TDX module is fixed to include these constraints in
-its enumeration of Dynamic PAMT support, kernel support can be changed to
-default on. For more information, consult the Intel TDX documentation about
-Dynamic PAMT.
+Dynamic PAMT is enabled automatically if supported.
TDX Interaction to Other Kernel Components
------------------------------------------
diff --git a/arch/x86/virt/vmx/tdx/tdx.c b/arch/x86/virt/vmx/tdx/tdx.c
index 2acab6e5f5f87..7891e42b27508 100644
--- a/arch/x86/virt/vmx/tdx/tdx.c
+++ b/arch/x86/virt/vmx/tdx/tdx.c
@@ -50,8 +50,6 @@
/* Number of DPAMT pages to be provided to TDX module per 2MB region of PA */
#define TDX_DPAMT_ENTRY_PAGE_CNT 2
-static bool tdx_enable_dpamt __ro_after_init;
-
struct tdx_module_state {
bool initialized;
bool sysinit_done;
@@ -2056,9 +2054,6 @@ EXPORT_SYMBOL_FOR_KVM(tdh_phymem_page_wbinvd_hkid);
bool tdx_supports_dynamic_pamt(const struct tdx_sys_info *sysinfo)
{
- if (!tdx_enable_dpamt)
- return false;
-
return sysinfo->features.tdx_features0 & TDX_FEATURES0_DYNAMIC_PAMT;
}
EXPORT_SYMBOL_FOR_KVM(tdx_supports_dynamic_pamt);
@@ -2334,13 +2329,6 @@ void tdx_free_control_page(struct page *page)
}
EXPORT_SYMBOL_FOR_KVM(tdx_free_control_page);
-static int __init tdx_dpamt_setup(char *str)
-{
- return kstrtobool(str, &tdx_enable_dpamt) == 0;
-}
-
-__setup("tdx_dpamt=", tdx_dpamt_setup);
-
void tdx_sys_disable(void)
{
struct tdx_module_args args = {};
Remaining patches without Dave's RB:
[PATCH 04/11] x86/virt/tdx: Allocate refcounts for Dynamic PAMT memory
[PATCH 09/11] x86/virt/tdx: Enable Dynamic PAMT
[PATCH 10/11] Documentation/x86: Add documentation for TDX's Dynamic PAMT
Background
==========
Dynamic PAMT is a TDX feature that allows saving memory by allocating some
of its page tracking metadata dynamically, instead of statically at boot.
These static allocations take roughly 0.4% of system memory. The savings
are variable depending on system and TDX usage, but could be up to 100x.
For more Dynamic PAMT background, please refer to [0]. For more analysis
of the savings in different scenarios, see the v6 coverleter[1].
It occurred to me that since the Dynamic PAMT effort began, RAM has become
much more expensive. Consequently, this feature is even more valuable now.
It would be good to enable it for TDX users.
Base
====
This is based on v7.3-rc1. A branch of this series can be found here: [2].
Testing
=======
I just did some regression testing with our standard automated testing for
this one. I left Tested-by tags per Hongyu's preference.
[0] https://lore.kernel.org/lkml/20250918232224.2202592-1-rick.p.edgecombe@intel.com/
[1] https://lore.kernel.org/lkml/20260526023515.288829-1-rick.p.edgecombe@intel.com/
[2] https://github.com/intel-staging/tdx/tree/dpamt_v11
Kiryl Shutsemau (2):
KVM: TDX: Allocate PAMT memory for TD and vCPU control structures
KVM: TDX: Get/put PAMT pages when (un)mapping private memory
Rick Edgecombe (9):
x86/virt/tdx: Simplify PAMT layout calculation
x86/virt/tdx: Allocate page bitmap for Dynamic PAMT
x86/virt/tdx: Add __tdx_pamt_get/put() helpers
x86/virt/tdx: Allocate refcounts for Dynamic PAMT memory
x86/virt/tdx: Handle multiple callers in tdx_pamt_get/put()
x86/virt/tdx: Add APIs to support Dynamic PAMT ops from KVM's fault
path
x86/virt/tdx: Enable Dynamic PAMT
Documentation/x86: Add documentation for TDX's Dynamic PAMT
x86/virt/tdx: Optimize tdx_pamt_get/put()
Documentation/arch/x86/tdx.rst | 21 +
arch/x86/include/asm/kvm-x86-ops.h | 1 +
arch/x86/include/asm/kvm_host.h | 1 +
arch/x86/include/asm/tdx.h | 23 +
arch/x86/include/asm/tdx_global_metadata.h | 9 +-
arch/x86/kvm/mmu/mmu.c | 4 +
arch/x86/kvm/vmx/tdx.c | 99 +++--
arch/x86/kvm/vmx/tdx.h | 2 +
arch/x86/virt/vmx/tdx/tdx.c | 448 +++++++++++++++++---
arch/x86/virt/vmx/tdx/tdx.h | 2 +
arch/x86/virt/vmx/tdx/tdx_global_metadata.c | 23 +-
11 files changed, 538 insertions(+), 95 deletions(-)
--
2.55.0
next reply other threads:[~2026-09-04 21:59 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-04 21:58 Rick Edgecombe [this message]
2026-09-04 21:58 ` [PATCH v11 01/11] x86/virt/tdx: Simplify PAMT layout calculation Rick Edgecombe
2026-09-04 21:58 ` [PATCH v11 02/11] x86/virt/tdx: Allocate page bitmap for Dynamic PAMT Rick Edgecombe
2026-09-04 21:58 ` [PATCH v11 03/11] x86/virt/tdx: Add __tdx_pamt_get/put() helpers Rick Edgecombe
2026-09-04 21:58 ` [PATCH v11 04/11] x86/virt/tdx: Allocate refcounts for Dynamic PAMT memory Rick Edgecombe
2026-09-04 21:58 ` [PATCH v11 05/11] x86/virt/tdx: Handle multiple callers in tdx_pamt_get/put() Rick Edgecombe
2026-09-04 21:58 ` [PATCH v11 06/11] KVM: TDX: Allocate PAMT memory for TD and vCPU control structures Rick Edgecombe
2026-09-04 21:58 ` [PATCH v11 07/11] x86/virt/tdx: Add APIs to support Dynamic PAMT ops from KVM's fault path Rick Edgecombe
2026-09-04 21:58 ` [PATCH v11 08/11] KVM: TDX: Get/put PAMT pages when (un)mapping private memory Rick Edgecombe
2026-09-04 22:18 ` sashiko-bot
2026-09-04 21:58 ` [PATCH v11 09/11] x86/virt/tdx: Enable Dynamic PAMT Rick Edgecombe
2026-09-04 22:11 ` sashiko-bot
2026-09-04 21:58 ` [PATCH v11 10/11] Documentation/x86: Add documentation for TDX's " Rick Edgecombe
2026-09-04 21:58 ` [PATCH v11 11/11] x86/virt/tdx: Optimize tdx_pamt_get/put() Rick Edgecombe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260904215841.303070-1-rick.p.edgecombe@intel.com \
--to=rick.p.edgecombe@intel.com \
--cc=binbin.wu@intel.com \
--cc=bp@alien8.de \
--cc=chao.gao@intel.com \
--cc=dave.hansen@intel.com \
--cc=hpa@zytor.com \
--cc=kai.huang@intel.com \
--cc=kas@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=linux-coco@lists.linux.dev \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=nik.borisov@suse.com \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=sohil.mehta@intel.com \
--cc=tglx@kernel.org \
--cc=tony.lindgren@linux.intel.com \
--cc=vannapurve@google.com \
--cc=x86@kernel.org \
--cc=yan.y.zhao@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox