Re: [PATCH v2 02/17] x86/virt/tdx: Configure add-on features on TDX module init and update
Xu Yilun <[email protected]> Mon, 27 Jul 2026 18:48:38 +0800
| Newsgroups | dev.linux.lists.linux-coco,org.kernel.vger.kvm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <amc3hgkK0LzJ3i4N@yilunxu-OptiPlex-7050> |
On Fri, Jul 24, 2026 at 04:15:21PM +0800, Xiaoyao Li wrote: > On 6/18/2026 4:13 PM, Xu Yilun wrote: > > In addition to basic TDX functionalities, TDX module provides add-on > > features that can be progressively enabled as the kernel supports them. > > "add-on features" looks like a new term introduced by this sereis for TDX. > So what is add-on features? all the features defined in TDX_FEATURE0/1? Or > only the features needs to be explicitly enabled by R9 and R10 of > TDH.SYS.CONFIG? ... > > > The kernel should explicitly configure these features at boot or > > post-update initialization time. > > ... So the answer is the latter. Then why only these bits are add-on > features while the rest in TDX_FEATURES01 are not? I think from TDX arch POV they impact the existing TDX system in some ways, either changes the behaviors of the existing features, or impact the performance. > > btw, s/should/needs/ is better? > > > Configuring an add-on feature, such as > > TDX Quoting, that uses extension SEAMCALLs is the prerequisite for > > initializing TDX module extensions. > > Though the statement is right, it leads to the impression that the reason we > are configuring the add-on feature is to initialize the TDX module > extensions. > > However, the truth is kenrel wants to enable/use an add-on feature and the mm... yes it is somewhat misleading. Is it better we only talk about the add-on features' enabling in the first paragraph, then in next paragraph explain why we put the patch at the first one for TDX module Extension enabling? > add-on feature requires the functionalities provided by some TDX module > extension. So kernel needs to enable the TDX module extensions. > > > TDX Quoting is the target feature to > > enable but defer it for now until full kernel support is in place. > > > > TDX module extends TDH.SYS.CONFIG and TDH.SYS.UPDATE with new bitmap > > input parameters to specify which add-on features to configure. The > > bitmap uses the same definitions as TDX_FEATURES0. > > > > For runtime update, Linux applies a policy that no newer features should > > be added after update to avoid disrupting live TDX operations. To adhere > > to this, TDH.SYS.UPDATE must configure the same features as the > > TDH.SYS.CONFIG. Record the kernel required add-on feature bitmap in a > > global var so that both phases can use it. > > > > TDX module advances the version of TDH.SYS.CONFIG and TDH.SYS.UPDATE for > > the change, so use the latest version (v1) for add-on feature enabling. > > But supporting existing modules which only support v0 is still necessary > > until they are deprecated. In fact, it is unlikely that TDH.SYS.CONFIG > > ever needs to change again and the code would stay in v1. So there is > > little value in worrying about deprecating v0 to save a couple lines of > > code in 5-7 years when these original TDX platforms sunset. > > > > Signed-off-by: Xu Yilun <[email protected]> > > --- > > arch/x86/virt/vmx/tdx/tdx.h | 6 ++++-- > > arch/x86/virt/vmx/tdx/tdx.c | 28 ++++++++++++++++++++++++++-- > > 2 files changed, 30 insertions(+), 4 deletions(-) > > > > diff --git a/arch/x86/virt/vmx/tdx/tdx.h b/arch/x86/virt/vmx/tdx/tdx.h > > index fbb520704662..a47e872480c7 100644 > > --- a/arch/x86/virt/vmx/tdx/tdx.h > > +++ b/arch/x86/virt/vmx/tdx/tdx.h > > @@ -58,9 +58,11 @@ > > #define TDH_PHYMEM_CACHE_WB 40 > > #define TDH_PHYMEM_PAGE_WBINVD 41 > > #define TDH_VP_WR 43 > > -#define TDH_SYS_CONFIG 45 > > +#define TDH_SYS_CONFIG_V0 45 > > +#define TDH_SYS_CONFIG SEAMCALL_LEAF_VER(TDH_SYS_CONFIG_V0, 1) > > #define TDH_SYS_SHUTDOWN 52 > > -#define TDH_SYS_UPDATE 53 > > +#define TDH_SYS_UPDATE_V0 53 > > +#define TDH_SYS_UPDATE SEAMCALL_LEAF_VER(TDH_SYS_UPDATE_V0, 1) > > #define TDH_SYS_DISABLE 69 > > /* TDX page types */ > > diff --git a/arch/x86/virt/vmx/tdx/tdx.c b/arch/x86/virt/vmx/tdx/tdx.c > > index 2a03152796e6..92305b5ea90d 100644 > > --- a/arch/x86/virt/vmx/tdx/tdx.c > > +++ b/arch/x86/virt/vmx/tdx/tdx.c > > @@ -57,6 +57,7 @@ static struct tdx_module_state tdx_module_state; > > static u32 tdx_global_keyid __ro_after_init; > > static u32 tdx_guest_keyid_start __ro_after_init; > > static u32 tdx_nr_guest_keyids __ro_after_init; > > +static u64 tdx_addon_feature0 __ro_after_init; > > static DEFINE_IDA(tdx_guest_keyid_pool); > > @@ -1004,9 +1005,18 @@ static __init int construct_tdmrs(struct list_head *tmb_list, > > return ret; > > } > > +static __init void set_tdx_addon_features(void) > > +{ > > + /* > > + * To add DICE-based TDX Quoting feature bit in tdx_addon_feature0 when > > + * kernel is ready. > > + */ > > +} > > + > > static __init int config_tdx_module(struct tdmr_info_list *tdmr_list, > > u64 global_keyid) > > { > > + u64 seamcall_fn = TDH_SYS_CONFIG_V0; > > struct tdx_module_args args = {}; > > u64 *tdmr_pa_array; > > size_t array_sz; > > @@ -1032,7 +1042,15 @@ static __init int config_tdx_module(struct tdmr_info_list *tdmr_list, > > args.rcx = __pa(tdmr_pa_array); > > args.rdx = tdmr_list->nr_consumed_tdmrs; > > args.r8 = global_keyid; > > - ret = seamcall_prerr(TDH_SYS_CONFIG, &args); > > + > > + set_tdx_addon_features(); > > Maybe move the set_tdx_addon_features() out of config_tdx_module()? how > about putting it after check_features(). config_tdx_module() looks like just > a wrapper to invoke TDH.SYS.CONFIG, while the params of it are determined > outside of it. I'm going to take Chao's advice [1] to remove the global var tdx_addon_feature0, so will also delete this global step - set_tdx_addon_features() - to setup this global var. Instead I'll use a "static u64 get_tdx_addon_features0(void)" for TDH.SYS.CONFIG/UPDATE. The reason is that I've found this extra TDX status - tdx_addon_feature0 - makes the feature supporting judgement unnecessary complex, so don't make it long live. [1]: https://lore.kernel.org/all/[email protected]/