Message ID | 20240125032328.2522472-12-xiaoyao.li@intel.com |
---|---|
State | New |
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. Really? Can't see it. Suggest to add something like "Configuration properties will be added later in this series." > 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 95516ba325e5..5b3c3146947f 100644 > --- a/qapi/qom.json > +++ b/qapi/qom.json > @@ -895,6 +895,16 @@ > 'reduced-phys-bits': 'uint32', > '*kernel-hashes': 'bool' } } > > +## > +# @TdxGuestProperties: > +# > +# Properties for tdx-guest objects. > +# > +# Since: 9.0 > +## > +{ 'struct': 'TdxGuestProperties', > + 'data': { }} > + > ## > # @ThreadContextProperties: > # > @@ -974,6 +984,7 @@ > 'sev-guest', > 'thread-context', > 's390-pv-guest', > + 'tdx-guest', > 'throttle-group', > 'tls-creds-anon', > 'tls-creds-psk', > @@ -1041,6 +1052,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 Mon, Feb 19, 2024 at 01:34:37PM +0100, 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. > > Really? Can't see it. The 'attributes' referred to is an internal struct field, rather than a QAPI declared member. > > Suggest to add something like "Configuration properties will be added > later in this series." > > > 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 95516ba325e5..5b3c3146947f 100644 > > --- a/qapi/qom.json > > +++ b/qapi/qom.json > > @@ -895,6 +895,16 @@ > > 'reduced-phys-bits': 'uint32', > > '*kernel-hashes': 'bool' } } > > > > +## > > +# @TdxGuestProperties: > > +# > > +# Properties for tdx-guest objects. > > +# > > +# Since: 9.0 > > +## > > +{ 'struct': 'TdxGuestProperties', > > + 'data': { }} > > + > > ## > > # @ThreadContextProperties: > > # > > @@ -974,6 +984,7 @@ > > 'sev-guest', > > 'thread-context', > > 's390-pv-guest', > > + 'tdx-guest', > > 'throttle-group', > > 'tls-creds-anon', > > 'tls-creds-psk', > > @@ -1041,6 +1052,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', > > [...] > With regards, Daniel
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 a1846be6f761..c0ccf50ac3ef 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 95516ba325e5..5b3c3146947f 100644 --- a/qapi/qom.json +++ b/qapi/qom.json @@ -895,6 +895,16 @@ 'reduced-phys-bits': 'uint32', '*kernel-hashes': 'bool' } } +## +# @TdxGuestProperties: +# +# Properties for tdx-guest objects. +# +# Since: 9.0 +## +{ 'struct': 'TdxGuestProperties', + 'data': { }} + ## # @ThreadContextProperties: # @@ -974,6 +984,7 @@ 'sev-guest', 'thread-context', 's390-pv-guest', + 'tdx-guest', 'throttle-group', 'tls-creds-anon', 'tls-creds-psk', @@ -1041,6 +1052,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 */