From: Xu Yilun <yilun.xu@linux.intel.com>
To: x86@kernel.org, linux-coco@lists.linux.dev,
linux-kernel@vger.kernel.org
Cc: Kiryl Shutsemau <kas@kernel.org>,
Rick Edgecombe <rick.p.edgecombe@intel.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
dave.hansen@intel.com, kvm@vger.kernel.org, yilun.xu@intel.com,
yilun.xu@linux.intel.com, xiaoyao.li@intel.com,
sohil.mehta@intel.com, adrian.hunter@intel.com,
kishen.maloor@intel.com, tony.lindgren@linux.intel.com,
peter.fang@intel.com, baolu.lu@linux.intel.com,
zhenzhong.duan@intel.com, chao.gao@intel.com,
artem.bityutskiy@linux.intel.com, nik.borisov@suse.com
Subject: [PATCH v4 4/6] x86/virt/tdx: Support DPAMT when adding memory for the extensions
Date: Tue, 13 Oct 2026 23:28:54 +0800 [thread overview]
Message-ID: <20261013-tdx-module-ext-v4-4-de5ffac65470@linux.intel.com> (raw)
In-Reply-To: <20261013-tdx-module-ext-v4-0-de5ffac65470@linux.intel.com>
The TDX module uses Physical Address Metadata Table (PAMT) to track some
state for each page of physical memory that it might use. 3 levels of
PAMTs are used to track pages of different sizes - 1GB, 2MB and 4KB.
The Dynamic PAMT (DPAMT) feature allows saving memory by allocating
4KB-level PAMT dynamically, while the 1GB and 2MB levels remain
allocated on TDX module initialization.
A previous kernel change [1] enabled the DPAMT feature by default so
that the kernel must install DPAMT before adding any 4KB pages to the
TDX module.
Although the memory for the extensions is tens of megabytes and the
kernel allocates it in a large chunk, the TDX module accepts it at 4K
granularity. Thus the kernel has to install DPAMT for each page of it,
otherwise TDH.EXT.MEM.ADD would fail to execute.
The kernel has helpers to install DPAMT for a 4K page. Call
tdx_pamt_get() for each extension page before adding it to the TDX
module. Normally, these operations should not fail, and if they do,
intentionally keep the error handling as simple as before - leak all
pages, including the installed DPAMT.
AI was used under supervision to review code and workshop logs.
Signed-off-by: Xu Yilun <yilun.xu@linux.intel.com>
Reviewed-by: Kiryl Shutsemau (Meta) <kas@kernel.org>
Link: https://lore.kernel.org/all/20260904215841.303070-1-rick.p.edgecombe@intel.com/ # [1]
---
v4:
- Explain in changelog that TDH.EXT.MEM.ADD won't work without this
patch when DPAMT is on by default. (Tony)
- Move this patch right after the one that implements TDH.EXT.MEM.ADD
- Collect Reviewed-by tags
v3:
- New patch
---
arch/x86/virt/vmx/tdx/tdx.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/arch/x86/virt/vmx/tdx/tdx.c b/arch/x86/virt/vmx/tdx/tdx.c
index 744ef95e448f..4908add631fa 100644
--- a/arch/x86/virt/vmx/tdx/tdx.c
+++ b/arch/x86/virt/vmx/tdx/tdx.c
@@ -1328,8 +1328,15 @@ static __init int tdx_ext_mem_setup(void)
struct page *chunk = page + added_pages;
unsigned int i;
- for (i = 0; i < chunk_pages; i++)
+ for (i = 0; i < chunk_pages; i++) {
+ ret = tdx_pamt_get(page_to_pfn(chunk + i), NULL);
+ if (ret) {
+ WARN(1, "DPAMT setup error for extensions, stranded all pages\n");
+ goto out_free_hpa_list;
+ }
+
hpa_list->phys[i] = page_to_phys(chunk + i);
+ }
ret = tdx_ext_mem_add(hpa_list, chunk_pages);
if (ret) {
--
2.25.1
next prev parent reply other threads:[~2026-10-13 15:33 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-13 15:28 [PATCH v4 0/6] Enable TDX module extensions Xu Yilun
2026-10-13 15:28 ` [PATCH v4 1/6] x86/virt/tdx: Move TDH.SYS.CONFIG operations into a wrapper Xu Yilun
2026-10-13 15:28 ` [PATCH v4 2/6] x86/virt/tdx: Configure add-on features on TDX module init Xu Yilun
2026-10-13 15:28 ` [PATCH v4 3/6] x86/virt/tdx: Add extra memory to TDX module for the extensions Xu Yilun
2026-10-13 18:46 ` Edgecombe, Rick P
2026-10-13 15:28 ` Xu Yilun [this message]
2026-10-13 15:28 ` [PATCH v4 5/6] x86/virt/tdx: Make TDX module initialize " Xu Yilun
2026-10-13 15:28 ` [PATCH v4 6/6] x86/virt/tdx: Re-initialize the extensions on runtime TDX module update Xu Yilun
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=20261013-tdx-module-ext-v4-4-de5ffac65470@linux.intel.com \
--to=yilun.xu@linux.intel.com \
--cc=adrian.hunter@intel.com \
--cc=artem.bityutskiy@linux.intel.com \
--cc=baolu.lu@linux.intel.com \
--cc=chao.gao@intel.com \
--cc=dave.hansen@intel.com \
--cc=dave.hansen@linux.intel.com \
--cc=kas@kernel.org \
--cc=kishen.maloor@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-coco@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=nik.borisov@suse.com \
--cc=peter.fang@intel.com \
--cc=rick.p.edgecombe@intel.com \
--cc=sohil.mehta@intel.com \
--cc=tony.lindgren@linux.intel.com \
--cc=x86@kernel.org \
--cc=xiaoyao.li@intel.com \
--cc=yilun.xu@intel.com \
--cc=zhenzhong.duan@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