Message ID | 20230818095041.1973309-4-xiaoyao.li@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | TDX QEMU support | expand |
On Fri, Aug 18, 2023 at 05:49:46AM -0400, Xiaoyao Li wrote: > TDX VM requires VM type KVM_X86_TDX_VM to be passed to > kvm_ioctl(KVM_CREATE_VM). > > If tdx-guest object is specified to confidential-guest-support, like, > > qemu -machine ...,confidential-guest-support=tdx0 \ > -object tdx-guest,id=tdx0,... > > it parses VM type as KVM_X86_TDX_VM. > > Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com> > --- > target/i386/kvm/kvm.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c > index 62f237068a3a..77f4772afe6c 100644 > --- a/target/i386/kvm/kvm.c > +++ b/target/i386/kvm/kvm.c > @@ -32,6 +32,7 @@ > #include "sysemu/runstate.h" > #include "kvm_i386.h" > #include "sev.h" > +#include "tdx.h" > #include "xen-emu.h" > #include "hyperv.h" > #include "hyperv-proto.h" > @@ -158,6 +159,7 @@ static int kvm_get_one_msr(X86CPU *cpu, int index, uint64_t *value); > static const char* vm_type_name[] = { > [KVM_X86_DEFAULT_VM] = "default", > [KVM_X86_SW_PROTECTED_VM] = "sw-protected-vm", > + [KVM_X86_TDX_VM] = "tdx", > }; > > int kvm_get_vm_type(MachineState *ms, const char *vm_type) > @@ -170,12 +172,18 @@ int kvm_get_vm_type(MachineState *ms, const char *vm_type) > kvm_type = KVM_X86_DEFAULT_VM; > } else if (!g_ascii_strcasecmp(vm_type, "sw-protected-vm")) { > kvm_type = KVM_X86_SW_PROTECTED_VM; > - } else { > + } else if (!g_ascii_strcasecmp(vm_type, "tdx")) { > + kvm_type = KVM_X86_TDX_VM; > + }else { > error_report("Unknown kvm-type specified '%s'", vm_type); > exit(1); > } > } This whole block of code should go away - as this should not exist as a user visible property. It should be sufficient to use the tdx-guest object type to identify use of TDX. > > + if (ms->cgs && object_dynamic_cast(OBJECT(ms->cgs), TYPE_TDX_GUEST)) { > + kvm_type = KVM_X86_TDX_VM; > + } > + > /* > * old KVM doesn't support KVM_CAP_VM_TYPES and KVM_X86_DEFAULT_VM > * is always supported > -- > 2.34.1 > With regards, Daniel
On 8/21/2023 4:27 PM, Daniel P. Berrangé wrote: > On Fri, Aug 18, 2023 at 05:49:46AM -0400, Xiaoyao Li wrote: >> TDX VM requires VM type KVM_X86_TDX_VM to be passed to >> kvm_ioctl(KVM_CREATE_VM). >> >> If tdx-guest object is specified to confidential-guest-support, like, >> >> qemu -machine ...,confidential-guest-support=tdx0 \ >> -object tdx-guest,id=tdx0,... >> >> it parses VM type as KVM_X86_TDX_VM. >> >> Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com> >> --- >> target/i386/kvm/kvm.c | 10 +++++++++- >> 1 file changed, 9 insertions(+), 1 deletion(-) >> >> diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c >> index 62f237068a3a..77f4772afe6c 100644 >> --- a/target/i386/kvm/kvm.c >> +++ b/target/i386/kvm/kvm.c >> @@ -32,6 +32,7 @@ >> #include "sysemu/runstate.h" >> #include "kvm_i386.h" >> #include "sev.h" >> +#include "tdx.h" >> #include "xen-emu.h" >> #include "hyperv.h" >> #include "hyperv-proto.h" >> @@ -158,6 +159,7 @@ static int kvm_get_one_msr(X86CPU *cpu, int index, uint64_t *value); >> static const char* vm_type_name[] = { >> [KVM_X86_DEFAULT_VM] = "default", >> [KVM_X86_SW_PROTECTED_VM] = "sw-protected-vm", >> + [KVM_X86_TDX_VM] = "tdx", >> }; >> >> int kvm_get_vm_type(MachineState *ms, const char *vm_type) >> @@ -170,12 +172,18 @@ int kvm_get_vm_type(MachineState *ms, const char *vm_type) >> kvm_type = KVM_X86_DEFAULT_VM; >> } else if (!g_ascii_strcasecmp(vm_type, "sw-protected-vm")) { >> kvm_type = KVM_X86_SW_PROTECTED_VM; >> - } else { >> + } else if (!g_ascii_strcasecmp(vm_type, "tdx")) { >> + kvm_type = KVM_X86_TDX_VM; >> + }else { >> error_report("Unknown kvm-type specified '%s'", vm_type); >> exit(1); >> } >> } > > This whole block of code should go away - as this should not exist > as a user visible property. It should be sufficient to use the > tdx-guest object type to identify use of TDX. > yes, agreed. It's here because this series is based on the gmem series, which introduced property. I'm sorry that I forgot to mention it in the commit message. Next gmem series will drop the implementation of kvm-type property [1] and above code will be dropped in next version as well. [1] https://lore.kernel.org/qemu-devel/9b3a3e88-21f4-bfd2-a9c3-60a25832e698@intel.com/
diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c index 62f237068a3a..77f4772afe6c 100644 --- a/target/i386/kvm/kvm.c +++ b/target/i386/kvm/kvm.c @@ -32,6 +32,7 @@ #include "sysemu/runstate.h" #include "kvm_i386.h" #include "sev.h" +#include "tdx.h" #include "xen-emu.h" #include "hyperv.h" #include "hyperv-proto.h" @@ -158,6 +159,7 @@ static int kvm_get_one_msr(X86CPU *cpu, int index, uint64_t *value); static const char* vm_type_name[] = { [KVM_X86_DEFAULT_VM] = "default", [KVM_X86_SW_PROTECTED_VM] = "sw-protected-vm", + [KVM_X86_TDX_VM] = "tdx", }; int kvm_get_vm_type(MachineState *ms, const char *vm_type) @@ -170,12 +172,18 @@ int kvm_get_vm_type(MachineState *ms, const char *vm_type) kvm_type = KVM_X86_DEFAULT_VM; } else if (!g_ascii_strcasecmp(vm_type, "sw-protected-vm")) { kvm_type = KVM_X86_SW_PROTECTED_VM; - } else { + } else if (!g_ascii_strcasecmp(vm_type, "tdx")) { + kvm_type = KVM_X86_TDX_VM; + }else { error_report("Unknown kvm-type specified '%s'", vm_type); exit(1); } } + if (ms->cgs && object_dynamic_cast(OBJECT(ms->cgs), TYPE_TDX_GUEST)) { + kvm_type = KVM_X86_TDX_VM; + } + /* * old KVM doesn't support KVM_CAP_VM_TYPES and KVM_X86_DEFAULT_VM * is always supported
TDX VM requires VM type KVM_X86_TDX_VM to be passed to kvm_ioctl(KVM_CREATE_VM). If tdx-guest object is specified to confidential-guest-support, like, qemu -machine ...,confidential-guest-support=tdx0 \ -object tdx-guest,id=tdx0,... it parses VM type as KVM_X86_TDX_VM. Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com> --- target/i386/kvm/kvm.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)