Linux Documentation
 help / color / mirror / Atom feed
* [PATCH v11 00/11] Dynamic PAMT
@ 2026-09-04 21:58 Rick Edgecombe
  2026-09-04 21:58 ` [PATCH v11 01/11] x86/virt/tdx: Simplify PAMT layout calculation Rick Edgecombe
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: Rick Edgecombe @ 2026-09-04 21:58 UTC (permalink / raw)
  To: bp, dave.hansen, hpa, kas, kvm, linux-coco, linux-doc,
	linux-kernel, mingo, nik.borisov, pbonzini, seanjc, tglx,
	vannapurve, x86, chao.gao, yan.y.zhao, kai.huang, tony.lindgren,
	binbin.wu, sohil.mehta
  Cc: rick.p.edgecombe

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


^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2026-09-04 22:00 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-04 21:58 [PATCH v11 00/11] Dynamic PAMT Rick Edgecombe
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 21:58 ` [PATCH v11 09/11] x86/virt/tdx: Enable Dynamic PAMT Rick Edgecombe
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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox