Message ID | a9948a7cd4f002ba4c3161287b366f4378523502.1625704981.git.isaku.yamahata@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | TDX support | expand |
On 7/7/21 7:54 PM, isaku.yamahata@gmail.com wrote: > From: Xiaoyao Li <xiaoyao.li@intel.com> > > Invoke KVM_TDX_FINALIZEMR to finalize the TD's measurement and make > the TD vCPUs runnable once machine initialization is complete. > > Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com> > Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com> > --- > target/i386/kvm/kvm.c | 7 +++++++ > target/i386/kvm/tdx.c | 21 +++++++++++++++++++++ > target/i386/kvm/tdx.h | 3 +++ > 3 files changed, 31 insertions(+) > > diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c > index be0b96b120..5742fa4806 100644 > --- a/target/i386/kvm/kvm.c > +++ b/target/i386/kvm/kvm.c > @@ -53,6 +53,7 @@ > #include "migration/blocker.h" > #include "exec/memattrs.h" > #include "trace.h" > +#include "tdx.h" > > //#define DEBUG_KVM > > @@ -2246,6 +2247,12 @@ int kvm_arch_init(MachineState *ms, KVMState *s) > return ret; > } This is probably a good place in the series to update the comment preceding the sev_kvm_init call since TDX is now here and otherwise the comment seems untimely. Reviewed-by: Connor Kuehl <ckuehl@redhat.com>
diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c index be0b96b120..5742fa4806 100644 --- a/target/i386/kvm/kvm.c +++ b/target/i386/kvm/kvm.c @@ -53,6 +53,7 @@ #include "migration/blocker.h" #include "exec/memattrs.h" #include "trace.h" +#include "tdx.h" //#define DEBUG_KVM @@ -2246,6 +2247,12 @@ int kvm_arch_init(MachineState *ms, KVMState *s) return ret; } + ret = tdx_kvm_init(ms->cgs, &local_err); + if (ret < 0) { + error_report_err(local_err); + return ret; + } + if (!kvm_check_extension(s, KVM_CAP_IRQ_ROUTING)) { error_report("kvm: KVM_CAP_IRQ_ROUTING not supported by KVM"); return -ENOTSUP; diff --git a/target/i386/kvm/tdx.c b/target/i386/kvm/tdx.c index c50a0dcf11..f8c7560fc8 100644 --- a/target/i386/kvm/tdx.c +++ b/target/i386/kvm/tdx.c @@ -58,6 +58,27 @@ static void __tdx_ioctl(int ioctl_no, const char *ioctl_name, #define tdx_ioctl(ioctl_no, metadata, data) \ __tdx_ioctl(ioctl_no, stringify(ioctl_no), metadata, data) +static void tdx_finalize_vm(Notifier *notifier, void *unused) +{ + tdx_ioctl(KVM_TDX_FINALIZE_VM, 0, NULL); +} + +static Notifier tdx_machine_done_late_notify = { + .notify = tdx_finalize_vm, +}; + +int tdx_kvm_init(ConfidentialGuestSupport *cgs, Error **errp) +{ + TdxGuest *tdx = (TdxGuest *)object_dynamic_cast(OBJECT(cgs), + TYPE_TDX_GUEST); + if (!tdx) { + return 0; + } + + qemu_add_machine_init_done_late_notifier(&tdx_machine_done_late_notify); + return 0; +} + void tdx_pre_create_vcpu(CPUState *cpu) { struct { diff --git a/target/i386/kvm/tdx.h b/target/i386/kvm/tdx.h index 6ad6c9a313..e15657d272 100644 --- a/target/i386/kvm/tdx.h +++ b/target/i386/kvm/tdx.h @@ -2,6 +2,7 @@ #define QEMU_I386_TDX_H #include "qom/object.h" +#include "qapi/error.h" #include "exec/confidential-guest-support.h" #define TYPE_TDX_GUEST "tdx-guest" @@ -21,4 +22,6 @@ typedef struct TdxGuest { bool debug; } TdxGuest; +int tdx_kvm_init(ConfidentialGuestSupport *cgs, Error **errp); + #endif