Linux Confidential Computing Development
 help / color / mirror / Atom feed
From: Xu Yilun <yilun.xu@linux.intel.com>
To: "Edgecombe, Rick P" <rick.p.edgecombe@intel.com>
Cc: "linux-coco@lists.linux.dev" <linux-coco@lists.linux.dev>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"x86@kernel.org" <x86@kernel.org>,
	"Gao, Chao" <chao.gao@intel.com>,
	"Xu, Yilun" <yilun.xu@intel.com>,
	"Duan, Zhenzhong" <zhenzhong.duan@intel.com>,
	"kas@kernel.org" <kas@kernel.org>,
	"baolu.lu@linux.intel.com" <baolu.lu@linux.intel.com>,
	"Li, Xiaoyao" <xiaoyao.li@intel.com>,
	"Maloor, Kishen" <kishen.maloor@intel.com>,
	"Hunter, Adrian" <adrian.hunter@intel.com>,
	"tony.lindgren@linux.intel.com" <tony.lindgren@linux.intel.com>,
	"Mehta, Sohil" <sohil.mehta@intel.com>,
	"Fang, Peter" <peter.fang@intel.com>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	"artem.bityutskiy@linux.intel.com"
	<artem.bityutskiy@linux.intel.com>
Subject: Re: [PATCH 5/6] x86/virt/tdx: Make TDX module initialize the extensions
Date: Tue, 25 Aug 2026 01:14:54 +0800	[thread overview]
Message-ID: <aox8DgpnSnhZRfCv@yilunxu-OptiPlex-7050> (raw)
In-Reply-To: <f48b83feb2ee1d3c88b5a1627cf35b4b282d3f90.camel@intel.com>

> > After providing all required memory to the TDX module, initialize TDX
> > module extensions via TDH.EXT.INIT
> > 
> 
> What exactly does TDH.EXT.INIT actually do,

The SPEC just said it "initializes TDX module extension". My
understanding is that it builds the SEAMCALL execution context by
setting up its internal data on the memory added by TDH.EXT.MEM.ADD

> and why can't whatever that is
> happen during TDH.EXT.MEM.ADD?

Do you mean why can't the extensions initialization happen on last
TDH.EXT.MEM.ADD? I can think of some case that TDH.EXT.MEM.ADD is not
needed but the extensions initialization is needed. For example: after
an compatible TDX module update.

I may ask the TDX module team to get a better understanding.

> Not saying we need to jam anything in awkwardly.
> Can we say this is analogous to TDH.SYS.CONFIG but for the extensions? It only
> exists because SYS.CONFIG gives the features to enable before the memory is
> there to actually do it. So it needs a second call?

I'm not sure I understand the question. But I think extension memory is
more like PAMT, and TDH.EXT.INIT is more like TDH.SYS.TDMR.INIT, is it?

				PAMT			the extensions
				====			==============
add memory			TDH.SYS.CONFIG		TDH.EXT.MEM.ADD
init memory for functionality	TDH.SYS.TDMR.INIT	TDH.EXT.INIT

> 
> 
> > , then those add-on features can use
> > their SEAMCALL leaves normally.
> 
> Out of curiosity, what happens if you don't complete these steps and call one of
> the extension seamcalls?

They return the error code - TDX_EXT_NOT_INITIALIZED.

> 
> > 
> > Signed-off-by: Xu Yilun <yilun.xu@linux.intel.com>
> > Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
> > Reviewed-by: Tony Lindgren <tony.lindgren@linux.intel.com>
> > Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
> 
> Code looks good. Except that it leaves me wondering if this could have all been
> a while loop around tdh_sys_confg() that gives memory on a memory error code.
> Actually it looks like we have a TDX_EXT_MEMORY_POOL_REQUIRED error code to use.
> 
> Consider something like this:
> 
> do {
> 	ret = tdh_sys_init();
> 	if (ret == TDX_EXT_MEMORY_POOL_REQUIRED)
> 		tdh_ext_mem_add() //single page
> while (ret == TDX_EXT_MEMORY_POOL_REQUIRED)
> 
> If that could technically work, I guess the benefit of the current approach is
> that it allows to use contiguous physical allocations. Not sure if you think
> that simpler snippet would actually be that simple in the real world.

I think there are several simplifications here, let's break down:

 1. Forget about the 512-page limitation for hpa_list_info, always add 1 page
    at a time.
    This can also be applied to current flow. So put it aside.

 2. The loop strategy:
    - read total memory size	vs.	- loop on error code
    - prealloc all memory		  - alloc a page
    - loop on size			  - memory add
      - memory add

    The main saving is that we don't read memory_pool_required_pages any more.
    Others are similar lines of code.

 3. But we'd better keep reading ext_required. I tested when ext_required == 0:
      - tdh_sys_init() returns TDX_EXT_MEMORY_POOL_REQUIRED,
      - tdh_ext_mem_add() returns TDX_EXT_MEMORY_POOL_NOT_PENDING,
    So we need a weird return code combination to identify "extensions not
    required" then skip. And I don't know if the combination is stable,
    it is not specified in SPEC.

 4. If we still need to read at least one extensions metadata
    (ext_required), saving a memory_pool_required_pages read is not
    significant.

So generally I don't think the snippet would be that simple.

> But if we
> are basically building all this to help fragmentation, we should say it.
> 

[...]

> > +static __init int tdx_ext_init(void)
> > +{
> > +	struct tdx_module_args args = {};
> > +	u64 ret;
> > +
> > +	do {
> > +		ret = seamcall(TDH_EXT_INIT, &args);
> 
> What happens if no init is needed? Does it return success or error? I'm

It returns error - TDX_EXT_MEMORY_POOL_REQUIRED

> wondering if we need to really check ext_required and can just call TDH_EXT_INIT
> unconditionally. We need to check for TDX_FEATURES0_EXT in any case. But do we
> need both checks?

As mentioned above, we need a weird return code combination to identify
ext_required, so I think we should retain ext_required checking.

  reply	other threads:[~2026-08-24 17:14 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-21  3:29 [PATCH 0/6] Enable TDX module extensions Xu Yilun
2026-08-21  3:29 ` [PATCH 1/6] x86/virt/tdx: Wrap TDH.SYS.CONFIG/UPDATE operations in helpers Xu Yilun
2026-08-21 20:53   ` Edgecombe, Rick P
2026-08-24  4:52     ` Xu Yilun
2026-08-21  3:29 ` [PATCH 2/6] x86/virt/tdx: Configure add-on features on TDX module init and update Xu Yilun
2026-08-21 14:38   ` Dave Hansen
2026-08-21 21:18     ` Edgecombe, Rick P
2026-08-24  6:37     ` Xu Yilun
2026-08-24 15:15       ` Dave Hansen
2026-08-24 18:34         ` Xu Yilun
2026-08-21 22:01   ` Edgecombe, Rick P
2026-08-21  3:29 ` [PATCH 3/6] x86/virt/tdx: Detect if the extensions initialization is required Xu Yilun
2026-08-21 15:22   ` Kiryl Shutsemau
2026-08-21 22:22     ` Edgecombe, Rick P
2026-08-24 12:16       ` Kiryl Shutsemau
2026-08-21  3:29 ` [PATCH 4/6] x86/virt/tdx: Add extra memory to TDX module for the extensions Xu Yilun
2026-08-21 15:44   ` Kiryl Shutsemau
2026-08-24  9:18     ` Xu Yilun
2026-08-24 12:22       ` Kiryl Shutsemau
2026-08-21  3:29 ` [PATCH 5/6] x86/virt/tdx: Make TDX module initialize " Xu Yilun
2026-08-21 23:55   ` Edgecombe, Rick P
2026-08-24 17:14     ` Xu Yilun [this message]
2026-08-24 17:43       ` Edgecombe, Rick P
2026-08-24 17:58       ` Edgecombe, Rick P
2026-08-21  3:29 ` [PATCH 6/6] x86/virt/tdx: Re-initialize the extensions on runtime TDX module update Xu Yilun
2026-08-22  0:01   ` Edgecombe, Rick P

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=aox8DgpnSnhZRfCv@yilunxu-OptiPlex-7050 \
    --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=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=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