Message ID | 20231115071519.2864957-14-xiaoyao.li@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | QEMU Guest memfd + QEMU TDX support | expand |
Xiaoyao Li <xiaoyao.li@intel.com> writes: > Introduce tdx-guest object which implements the interface of > CONFIDENTIAL_GUEST_SUPPORT, and will be used to create TDX VMs (TDs) by > > qemu -machine ...,confidential-guest-support=tdx0 \ > -object tdx-guest,id=tdx0 > > It has only one member 'attributes' with fixed value 0 and not > configurable so far. > > Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com> > Acked-by: Gerd Hoffmann <kraxel@redhat.com> > Acked-by: Markus Armbruster <armbru@redhat.com> [...] > diff --git a/qapi/qom.json b/qapi/qom.json > index c53ef978ff7e..8e08257dac2f 100644 > --- a/qapi/qom.json > +++ b/qapi/qom.json > @@ -878,6 +878,16 @@ > 'reduced-phys-bits': 'uint32', > '*kernel-hashes': 'bool' } } > > +## > +# @TdxGuestProperties: > +# > +# Properties for tdx-guest objects. > +# > +# Since: 8.2 Going to be 9.0. > +## > +{ 'struct': 'TdxGuestProperties', > + 'data': { }} > + > ## > # @ThreadContextProperties: > # > @@ -956,6 +966,7 @@ > 'sev-guest', > 'thread-context', > 's390-pv-guest', > + 'tdx-guest', > 'throttle-group', > 'tls-creds-anon', > 'tls-creds-psk', > @@ -1022,6 +1033,7 @@ > 'secret_keyring': { 'type': 'SecretKeyringProperties', > 'if': 'CONFIG_SECRET_KEYRING' }, > 'sev-guest': 'SevGuestProperties', > + 'tdx-guest': 'TdxGuestProperties', > 'thread-context': 'ThreadContextProperties', > 'throttle-group': 'ThrottleGroupProperties', > 'tls-creds-anon': 'TlsCredsAnonProperties', [...]
On 12/1/2023 6:52 PM, Markus Armbruster wrote: > Xiaoyao Li <xiaoyao.li@intel.com> writes: > >> Introduce tdx-guest object which implements the interface of >> CONFIDENTIAL_GUEST_SUPPORT, and will be used to create TDX VMs (TDs) by >> >> qemu -machine ...,confidential-guest-support=tdx0 \ >> -object tdx-guest,id=tdx0 >> >> It has only one member 'attributes' with fixed value 0 and not >> configurable so far. >> >> Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com> >> Acked-by: Gerd Hoffmann <kraxel@redhat.com> >> Acked-by: Markus Armbruster <armbru@redhat.com> > > [...] > >> diff --git a/qapi/qom.json b/qapi/qom.json >> index c53ef978ff7e..8e08257dac2f 100644 >> --- a/qapi/qom.json >> +++ b/qapi/qom.json >> @@ -878,6 +878,16 @@ >> 'reduced-phys-bits': 'uint32', >> '*kernel-hashes': 'bool' } } >> >> +## >> +# @TdxGuestProperties: >> +# >> +# Properties for tdx-guest objects. >> +# >> +# Since: 8.2 > > Going to be 9.0. will update it and all others. (I left it as 8.2 because I was not sure next version is 8.3 or 9.0) >> +## >> +{ 'struct': 'TdxGuestProperties', >> + 'data': { }} >> + >> ## >> # @ThreadContextProperties: >> # >> @@ -956,6 +966,7 @@ >> 'sev-guest', >> 'thread-context', >> 's390-pv-guest', >> + 'tdx-guest', >> 'throttle-group', >> 'tls-creds-anon', >> 'tls-creds-psk', >> @@ -1022,6 +1033,7 @@ >> 'secret_keyring': { 'type': 'SecretKeyringProperties', >> 'if': 'CONFIG_SECRET_KEYRING' }, >> 'sev-guest': 'SevGuestProperties', >> + 'tdx-guest': 'TdxGuestProperties', >> 'thread-context': 'ThreadContextProperties', >> 'throttle-group': 'ThrottleGroupProperties', >> 'tls-creds-anon': 'TlsCredsAnonProperties', > > [...] > >
diff --git a/configs/devices/i386-softmmu/default.mak b/configs/devices/i386-softmmu/default.mak index 598c6646dfc0..9b5ec59d65b0 100644 --- a/configs/devices/i386-softmmu/default.mak +++ b/configs/devices/i386-softmmu/default.mak @@ -18,6 +18,7 @@ #CONFIG_QXL=n #CONFIG_SEV=n #CONFIG_SGA=n +#CONFIG_TDX=n #CONFIG_TEST_DEVICES=n #CONFIG_TPM_CRB=n #CONFIG_TPM_TIS_ISA=n diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig index 55850791df41..cea78dcb2822 100644 --- a/hw/i386/Kconfig +++ b/hw/i386/Kconfig @@ -10,6 +10,10 @@ config SGX bool depends on KVM +config TDX + bool + depends on KVM + config PC bool imply APPLESMC @@ -26,6 +30,7 @@ config PC imply QXL imply SEV imply SGX + imply TDX imply TEST_DEVICES imply TPM_CRB imply TPM_TIS_ISA diff --git a/qapi/qom.json b/qapi/qom.json index c53ef978ff7e..8e08257dac2f 100644 --- a/qapi/qom.json +++ b/qapi/qom.json @@ -878,6 +878,16 @@ 'reduced-phys-bits': 'uint32', '*kernel-hashes': 'bool' } } +## +# @TdxGuestProperties: +# +# Properties for tdx-guest objects. +# +# Since: 8.2 +## +{ 'struct': 'TdxGuestProperties', + 'data': { }} + ## # @ThreadContextProperties: # @@ -956,6 +966,7 @@ 'sev-guest', 'thread-context', 's390-pv-guest', + 'tdx-guest', 'throttle-group', 'tls-creds-anon', 'tls-creds-psk', @@ -1022,6 +1033,7 @@ 'secret_keyring': { 'type': 'SecretKeyringProperties', 'if': 'CONFIG_SECRET_KEYRING' }, 'sev-guest': 'SevGuestProperties', + 'tdx-guest': 'TdxGuestProperties', 'thread-context': 'ThreadContextProperties', 'throttle-group': 'ThrottleGroupProperties', 'tls-creds-anon': 'TlsCredsAnonProperties', diff --git a/target/i386/kvm/meson.build b/target/i386/kvm/meson.build index 84d9143e6029..6ea0ce27b757 100644 --- a/target/i386/kvm/meson.build +++ b/target/i386/kvm/meson.build @@ -9,6 +9,8 @@ i386_kvm_ss.add(when: 'CONFIG_XEN_EMU', if_true: files('xen-emu.c')) i386_kvm_ss.add(when: 'CONFIG_SEV', if_false: files('sev-stub.c')) +i386_kvm_ss.add(when: 'CONFIG_TDX', if_true: files('tdx.c')) + i386_system_ss.add(when: 'CONFIG_HYPERV', if_true: files('hyperv.c'), if_false: files('hyperv-stub.c')) i386_system_ss.add_all(when: 'CONFIG_KVM', if_true: i386_kvm_ss) diff --git a/target/i386/kvm/tdx.c b/target/i386/kvm/tdx.c new file mode 100644 index 000000000000..d3792d4a3d56 --- /dev/null +++ b/target/i386/kvm/tdx.c @@ -0,0 +1,40 @@ +/* + * QEMU TDX support + * + * Copyright Intel + * + * Author: + * Xiaoyao Li <xiaoyao.li@intel.com> + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory + * + */ + +#include "qemu/osdep.h" +#include "qom/object_interfaces.h" + +#include "tdx.h" + +/* tdx guest */ +OBJECT_DEFINE_TYPE_WITH_INTERFACES(TdxGuest, + tdx_guest, + TDX_GUEST, + CONFIDENTIAL_GUEST_SUPPORT, + { TYPE_USER_CREATABLE }, + { NULL }) + +static void tdx_guest_init(Object *obj) +{ + TdxGuest *tdx = TDX_GUEST(obj); + + tdx->attributes = 0; +} + +static void tdx_guest_finalize(Object *obj) +{ +} + +static void tdx_guest_class_init(ObjectClass *oc, void *data) +{ +} diff --git a/target/i386/kvm/tdx.h b/target/i386/kvm/tdx.h new file mode 100644 index 000000000000..415aeb5af746 --- /dev/null +++ b/target/i386/kvm/tdx.h @@ -0,0 +1,19 @@ +#ifndef QEMU_I386_TDX_H +#define QEMU_I386_TDX_H + +#include "exec/confidential-guest-support.h" + +#define TYPE_TDX_GUEST "tdx-guest" +#define TDX_GUEST(obj) OBJECT_CHECK(TdxGuest, (obj), TYPE_TDX_GUEST) + +typedef struct TdxGuestClass { + ConfidentialGuestSupportClass parent_class; +} TdxGuestClass; + +typedef struct TdxGuest { + ConfidentialGuestSupport parent_obj; + + uint64_t attributes; /* TD attributes */ +} TdxGuest; + +#endif /* QEMU_I386_TDX_H */