Re: [PATCH 2/6] x86/virt/tdx: Configure add-on features on TDX module init and update

"Edgecombe, Rick P" <[email protected]>
Newsgroups dev.linux.lists.linux-coco,org.kernel.vger.kvm,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
On Fri, 2026-08-21 at 11:29 +0800, Xu Yilun wrote:
> The TDX architecture identifies some features that must be explicitly
> enabled when the kernel supports them. 
> 

It sounds like this is saying that TDX module is demanding that the kernel
enable these features if it can. I think it's not true.

> These add-on features affect
> existing TDX systems: they may change existing feature behavior, reserve
> more memory, or impact TDX initialization performance.
> 

What are you trying to get at by saying they affect existing TDX systems? It's
important that if a new module gains these features, an upgrade *doesn't* affect
existing TDX systems. Are you trying to say instead that they *would* affect
existing systems, so they are add-ons?

>  The kernel must
> enable these add-on features at boot or post-update time.
> 
> TDISP, DICE-based quoting and TD migration are among those add-on
> features, as their SEAMCALL leaves depend on a SEAMCALL execution
> context built by the TDX module extensions. On the other hand, the TDX
> architecture doesn't allow the extensions to be initialized if none of
> these features are enabled.
> 

So we have add-ons features and extensions. Some add-on features depend on
extensions. And also, the extensions can't be initialized if the add-on features
are not enabled? I'm not sure what you are trying to get at. That the kernel
doesn't have the option to blindly initialize all extensions?

>  Add support for configuring add-on features,
> as the prerequisite for enabling the extensions.

I kinda know how this stuff works and I'm still struggling to understand what
you are trying to say...

I think optional features are pretty common pattern that will be generally
understood. So the only thing that needs explanation is that some optional (or
add-on) features need extra memory to save state, etc. But actually, this patch
doesn't deal with this, just turning on optional features.

> 
> The TDX module extends TDH.SYS.CONFIG and TDH.SYS.UPDATE with new bitmap
> parameters to specify which add-on features to enable. 
> 

Because some other VMM was passing garbage in r9? Hmm, how does this work with
other features0 bits? Like for dynamic PAMT is a feature0 bit, but we pass it in
r8. But for add-on features that use extensions we pass it in r9? Or do we pass
all features0 bits in r9 for when using v1 of TDH.SYS.CONFIG? The docs say:

   If the requested version in RAX is 1 or higher, R9 specifies TDX Module
   feature enabling flags, formatted similarly to TDX_FEATURES0, readable by
   TDH.SYS.RD*. A bit may be set to 1 if the corresponding TDX_FEATURES0 bit is
   1.

I wonder why they didn't just use the many reserved bits 63:17 of r8 for new
features instead of this new seamcall version...

> The bitmap
> uses the same feature bits as TDX_FEATURES0. Add a
> get_tdx_addon_features0() helper to return the bitmap of the add-on
> features that the module & kernel both support. Initially, this helper
> returns 0. It will be updated to return specific feature bits as full
> kernel support lands. Pass this extra bitmap to TDH.SYS.CONFIG helper.
> 
> The TDX module requires SEAMCALL leaf version 1 for TDH.SYS.CONFIG and
> TDH.SYS.UPDATE when passing the new bitmap parameter. A previous
> change [1] supports the versioned SEAMCALL leaves by adding a "version"
> field in struct tdx_module_args. Set the version field to 1 if any bit
> is set in this bitmap.
> 
> Compatible updates keep the reported features unchanged across updates,
> so that existing TDX users can continue to operate without disruption.
> To adhere to this
> 

Compatible updates keep from disturbing the kernel. So the kernel shouldn't need
to adhere to anything. Just say the kernel doesn't need to re-fetch it.

> , provide TDH.SYS.UPDATE with the same bitmap returned
> by get_tdx_addon_features0(). This works because the module supported
> feature bits are cached at boot and never refreshed after updates, so
> the returned bitmap always matches the initial TDH.SYS.CONFIG input.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.