[PATCH 5/6] x86/virt/tdx: Make TDX module initialize the extensions
Xu Yilun <[email protected]>
| Newsgroups | dev.linux.lists.linux-coco,org.kernel.vger.kvm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
TDX module extensions need memory for their own internal state and data to serve SEAMCALL leaves. Several add-on features depend on the extensions to execute their SEAMCALL leaves. After providing all required memory to the TDX module, initialize TDX module extensions via TDH.EXT.INIT, then those add-on features can use their SEAMCALL leaves normally. Signed-off-by: Xu Yilun <[email protected]> Reviewed-by: Xiaoyao Li <[email protected]> Reviewed-by: Tony Lindgren <[email protected]> Reviewed-by: Adrian Hunter <[email protected]> --- v1: - Fix return value for SEAMCALL helpers (Chao) - Print SEAMCALL error code for SEAMCALL helpers (Xiaoyao) - Changelog & code comments --- arch/x86/virt/vmx/tdx/tdx.h | 1 + arch/x86/virt/vmx/tdx/tdx.c | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/arch/x86/virt/vmx/tdx/tdx.h b/arch/x86/virt/vmx/tdx/tdx.h index 52888424fe7d..1f43d2eb2345 100644 --- a/arch/x86/virt/vmx/tdx/tdx.h +++ b/arch/x86/virt/vmx/tdx/tdx.h @@ -48,6 +48,7 @@ #define TDH_SYS_CONFIG 45 #define TDH_SYS_SHUTDOWN 52 #define TDH_SYS_UPDATE 53 +#define TDH_EXT_INIT 60 #define TDH_EXT_MEM_ADD 61 #define TDH_SYS_DISABLE 69 diff --git a/arch/x86/virt/vmx/tdx/tdx.c b/arch/x86/virt/vmx/tdx/tdx.c index 8c2fdaf0b8c0..873b8393f32f 100644 --- a/arch/x86/virt/vmx/tdx/tdx.c +++ b/arch/x86/virt/vmx/tdx/tdx.c @@ -1289,6 +1289,23 @@ static __init int tdx_ext_mem_setup(void) return ret; } +static __init int tdx_ext_init(void) +{ + struct tdx_module_args args = {}; + u64 ret; + + do { + ret = seamcall(TDH_EXT_INIT, &args); + } while (ret == TDX_INTERRUPTED_RESUMABLE); + + if (ret != TDX_SUCCESS) { + pr_err("TDH.EXT.INIT failed: 0x%016llx\n", ret); + return -EIO; + } + + return 0; +} + static __init int init_tdx_module_extensions(void) { int ret; @@ -1308,7 +1325,11 @@ static __init int init_tdx_module_extensions(void) if (!tdx_sysinfo.ext.ext_required) return 0; - return tdx_ext_mem_setup(); + ret = tdx_ext_mem_setup(); + if (ret) + return ret; + + return tdx_ext_init(); } static __init int init_tdx_module(void) -- 2.25.1