Re: [PATCH v2 06/17] x86/virt/tdx: Re-initialize the extensions on runtime TDX module update

From: Chao Gao

Date: Mon Jun 29 2026 - 04:23:03 EST


>+/*
>+ * Mostly the same flow as init_tdx_module_extensions(), but rejects adding
>+ * more memory.
>+ */
>+static int update_tdx_module_extensions(void)
>+{
>+ struct tdx_sys_info_ext sysinfo_ext;
>+ int ret;
>+
>+ if (!(tdx_sysinfo.features.tdx_features0 & TDX_FEATURES0_EXT))
>+ return 0;
>+
>+ ret = get_tdx_sys_info_ext(&sysinfo_ext);
>+ if (ret)
>+ return ret;
>+
>+ if (!sysinfo_ext.ext_required)
>+ return 0;
>+
>+ if (sysinfo_ext.memory_pool_required_pages)
>+ return -EFAULT;

Will tdx_ext_init() return an error if more memory is needed?

If yes, we can leave this check to the module. And with ext_required
removed (per my earlier comment), this function simplifies to:

int update_tdx_module_extensions(void)
{
if (!(tdx_sysinfo.features.tdx_features0 & TDX_FEATURES0_EXT))
return 0;

return tdx_ext_init();
}

>+
>+ return tdx_ext_init();
>+}
>+
> static __init int init_tdx_module(void)
> {
> int ret;
>@@ -1498,6 +1523,10 @@ int tdx_module_run_update(void)
> */
> WARN_ON_ONCE(ret);
>
>+ ret = update_tdx_module_extensions();
>+ if (ret)
>+ return ret;
>+
> tdx_module_state.initialized = true;
> return 0;
> }
>diff --git a/arch/x86/virt/vmx/tdx/tdx_global_metadata.c b/arch/x86/virt/vmx/tdx/tdx_global_metadata.c
>index 720cdaf76492..84364da89649 100644
>--- a/arch/x86/virt/vmx/tdx/tdx_global_metadata.c
>+++ b/arch/x86/virt/vmx/tdx/tdx_global_metadata.c
>@@ -132,7 +132,7 @@ static __init int get_tdx_sys_info(struct tdx_sys_info *sysinfo)
> return ret;
> }
>
>-static __init int get_tdx_sys_info_ext(struct tdx_sys_info_ext *sysinfo_ext)
>+static int get_tdx_sys_info_ext(struct tdx_sys_info_ext *sysinfo_ext)
> {
> int ret;
> u64 val;
>--
>2.25.1
>