On Thu, Aug 11, 2022 at 11:15:07AM +0800, Binbin Wu <binbin.wu@xxxxxxxxxxxxxxx> wrote: > > +/* @field is any of enum tdx_guest_other_state */ > > +#define TDVPS_STATE(field) BUILD_TDX_FIELD(17, (field)) > > +#define TDVPS_STATE_NON_ARCH(field) BUILD_TDX_FIELD_NON_ARCH(17, (field)) > > + > > +/* Management class fields */ > > +enum tdx_guest_management { > > More accurate to use tdx_vcpu_management? Thanks for pointing it out. I cleaned up it as follows for more consitency and better match with the TDX module. /* Class code for TD */ #define TD_CLASS_EXECUTION_CONTROLS 17ULL /* Class code for TDVPS */ #define TDVPS_CLASS_VMCS 0ULL #define TDVPS_CLASS_GUEST_GPR 16ULL #define TDVPS_CLASS_OTHER_GUEST 17ULL #define TDVPS_CLASS_MANAGEMENT 32ULL enum tdx_tdcs_execution_control { TD_TDCS_EXEC_TSC_OFFSET = 10, }; /* @field is any of enum tdx_tdcs_execution_control */ #define TDCS_EXEC(field) BUILD_TDX_FIELD(TD_CLASS_EXECUTION_CONTROLS, (field)) /* @field is the VMCS field encoding */ #define TDVPS_VMCS(field) BUILD_TDX_FIELD(TDVPS_CLASS_VMCS, (field)) enum tdx_vcpu_guest_other_state { TD_VCPU_STATE_DETAILS_NON_ARCH = 0x100, }; union tdx_vcpu_state_details { struct { u64 vmxip : 1; u64 reserved : 63; }; u64 full; }; /* @field is any of enum tdx_guest_other_state */ #define TDVPS_STATE(field) BUILD_TDX_FIELD(TDVPS_CLASS_OTHER_GUEST, (field)) #define TDVPS_STATE_NON_ARCH(field) BUILD_TDX_FIELD_NON_ARCH(TDVPS_CLASS_OTHER_GUEST, (field)) /* Management class fields */ enum tdx_vcpu_guest_management { TD_VCPU_PEND_NMI = 11, }; /* @field is any of enum tdx_vcpu_guest_management */ #define TDVPS_MANAGEMENT(field) BUILD_TDX_FIELD(TDVPS_CLASS_MANAGEMENT, (field)) -- Isaku Yamahata <isaku.yamahata@xxxxxxxxx>