On Tue, Aug 22, 2023 at 10:30:47PM +0800, Xiaoyao Li wrote: > On 8/21/2023 5:16 PM, Daniel P. Berrangé wrote: > > On Fri, Aug 18, 2023 at 05:50:01AM -0400, Xiaoyao Li wrote: > > > Validate TD attributes with tdx_caps that fixed-0 bits must be zero and > > > fixed-1 bits must be set. > > > > > > Besides, sanity check the attribute bits that have not been supported by > > > QEMU yet. e.g., debug bit, it will be allowed in the future when debug > > > TD support lands in QEMU. > > > > > > Signed-off-by: Xiaoyao Li <xiaoyao.li@xxxxxxxxx> > > > Acked-by: Gerd Hoffmann <kraxel@xxxxxxxxxx> > > > --- > > > target/i386/kvm/tdx.c | 27 +++++++++++++++++++++++++-- > > > 1 file changed, 25 insertions(+), 2 deletions(-) > > > > > > diff --git a/target/i386/kvm/tdx.c b/target/i386/kvm/tdx.c > > > index 629abd267da8..73da15377ec3 100644 > > > --- a/target/i386/kvm/tdx.c > > > +++ b/target/i386/kvm/tdx.c > > > @@ -32,6 +32,7 @@ > > > (1U << KVM_FEATURE_PV_SCHED_YIELD) | \ > > > (1U << KVM_FEATURE_MSI_EXT_DEST_ID)) > > > +#define TDX_TD_ATTRIBUTES_DEBUG BIT_ULL(0) > > > #define TDX_TD_ATTRIBUTES_SEPT_VE_DISABLE BIT_ULL(28) > > > #define TDX_TD_ATTRIBUTES_PKS BIT_ULL(30) > > > #define TDX_TD_ATTRIBUTES_PERFMON BIT_ULL(63) > > > @@ -462,13 +463,32 @@ int tdx_kvm_init(MachineState *ms, Error **errp) > > > return 0; > > > } > > > -static void setup_td_guest_attributes(X86CPU *x86cpu) > > > +static int tdx_validate_attributes(TdxGuest *tdx) > > > +{ > > > + if (((tdx->attributes & tdx_caps->attrs_fixed0) | tdx_caps->attrs_fixed1) != > > > + tdx->attributes) { > > > + error_report("Invalid attributes 0x%lx for TDX VM (fixed0 0x%llx, fixed1 0x%llx)", > > > + tdx->attributes, tdx_caps->attrs_fixed0, tdx_caps->attrs_fixed1); > > > + return -EINVAL; > > > + } > > > + > > > + if (tdx->attributes & TDX_TD_ATTRIBUTES_DEBUG) { > > > + error_report("Current QEMU doesn't support attributes.debug[bit 0] for TDX VM"); > > > + return -EINVAL; > > > + } > > > > Use error_setg() in both cases, passing in a 'Error **errp' object, > > and 'return -1' instead of returning an errno value. > > > > why return -1 instead of -EINVAL? Returning errno values is useful if the method isn't providing an "Error **errp" parameter, because it lets the caller report a more detailed error message via strerror(). Once you add a Error ** parameter though, there is almost never any reason for the caller to care about the original errno value, and so we use 0 / -1 as success/fail indicators. With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|