Message ID | 20250220170604.2279312-14-pbonzini@redhat.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | TDX initialization + vCPU/VM creation | expand |
On Thu, 2025-02-20 at 12:05 -0500, Paolo Bonzini wrote: > From: Kai Huang <kai.huang@intel.com> > > KVM will need to consult some essential TDX global information to create > and run TDX guests. Get the global information after initializing TDX. > > Signed-off-by: Kai Huang <kai.huang@intel.com> > Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com> > Message-ID: <20241030190039.77971-3-rick.p.edgecombe@intel.com> > Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> > --- > arch/x86/kvm/vmx/tdx.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c > index 0666dfbe0bc0..761d3a9cd5c5 100644 > --- a/arch/x86/kvm/vmx/tdx.c > +++ b/arch/x86/kvm/vmx/tdx.c > @@ -13,6 +13,8 @@ module_param_named(tdx, enable_tdx, bool, 0444); > > static enum cpuhp_state tdx_cpuhp_state; > > +static const struct tdx_sys_info *tdx_sysinfo; > + > static int tdx_online_cpu(unsigned int cpu) > { > unsigned long flags; > @@ -90,11 +92,20 @@ static int __init __tdx_bringup(void) > if (r) > goto tdx_bringup_err; > > + /* Get TDX global information for later use */ > + tdx_sysinfo = tdx_get_sysinfo(); > + if (WARN_ON_ONCE(!tdx_sysinfo)) { > + r = -EINVAL; > + goto get_sysinfo_err; > + } > + > /* > * Leave hardware virtualization enabled after TDX is enabled > * successfully. TDX CPU hotplug depends on this. > */ > return 0; > +get_sysinfo_err: > + __do_tdx_cleanup(); We need to call __tdx_cleanup() after we fix the bug in the previous patch using the diff I provided: diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c index a889087f119f..770ac9b8b528 100644 --- a/arch/x86/kvm/vmx/tdx.c +++ b/arch/x86/kvm/vmx/tdx.c @@ -112,7 +112,7 @@ static int __init __tdx_bringup(void) */ return 0; get_sysinfo_err: - __do_tdx_cleanup(); + __tdx_cleanup(); tdx_bringup_err: kvm_disable_virtualization(); return r;
diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c index 0666dfbe0bc0..761d3a9cd5c5 100644 --- a/arch/x86/kvm/vmx/tdx.c +++ b/arch/x86/kvm/vmx/tdx.c @@ -13,6 +13,8 @@ module_param_named(tdx, enable_tdx, bool, 0444); static enum cpuhp_state tdx_cpuhp_state; +static const struct tdx_sys_info *tdx_sysinfo; + static int tdx_online_cpu(unsigned int cpu) { unsigned long flags; @@ -90,11 +92,20 @@ static int __init __tdx_bringup(void) if (r) goto tdx_bringup_err; + /* Get TDX global information for later use */ + tdx_sysinfo = tdx_get_sysinfo(); + if (WARN_ON_ONCE(!tdx_sysinfo)) { + r = -EINVAL; + goto get_sysinfo_err; + } + /* * Leave hardware virtualization enabled after TDX is enabled * successfully. TDX CPU hotplug depends on this. */ return 0; +get_sysinfo_err: + __do_tdx_cleanup(); tdx_bringup_err: kvm_disable_virtualization(); return r;