On Tue, 2022-11-22 at 15:39 -0800, Dave Hansen wrote: > > +#define TDSYSINFO_STRUCT_SIZE 1024 > > +#define TDSYSINFO_STRUCT_ALIGNMENT 1024 > > + > > +struct tdsysinfo_struct { > > + /* TDX-SEAM Module Info */ > > + u32 attributes; > > + u32 vendor_id; > > + u32 build_date; > > + u16 build_num; > > + u16 minor_version; > > + u16 major_version; > > + u8 reserved0[14]; > > + /* Memory Info */ > > + u16 max_tdmrs; > > + u16 max_reserved_per_tdmr; > > + u16 pamt_entry_size; > > + u8 reserved1[10]; > > + /* Control Struct Info */ > > + u16 tdcs_base_size; > > + u8 reserved2[2]; > > + u16 tdvps_base_size; > > + u8 tdvps_xfam_dependent_size; > > + u8 reserved3[9]; > > + /* TD Capabilities */ > > + u64 attributes_fixed0; > > + u64 attributes_fixed1; > > + u64 xfam_fixed0; > > + u64 xfam_fixed1; > > + u8 reserved4[32]; > > + u32 num_cpuid_config; > > + /* > > + * The actual number of CPUID_CONFIG depends on above > > + * 'num_cpuid_config'. The size of 'struct tdsysinfo_struct' > > + * is 1024B defined by TDX architecture. Use a union with > > + * specific padding to make 'sizeof(struct tdsysinfo_struct)' > > + * equal to 1024. > > + */ > > + union { > > + struct cpuid_config cpuid_configs[0]; > > + u8 reserved5[892]; > > + }; > > Can you double check what the "right" way to do variable arrays is these > days? I thought the [0] method was discouraged. > > Also, it isn't *really* 892 bytes of reserved space, right? Anything > that's not cpuid_configs[] is reserved, I presume. Could you try to be > more precise there? Hi Dave, I did some search, and I think we should use DECLARE_FLEX_ARRAY() macro? And also to address you concern that not all 892 bytes are reserved, how about below: union { - struct cpuid_config cpuid_configs[0]; - u8 reserved5[892]; + DECLARE_FLEX_ARRAY(struct cpuid_config, cpuid_configs); + u8 padding[892]; }; } __packed __aligned(TDSYSINFO_STRUCT_ALIGNMENT); The goal is to make the size of 'struct tdsysinfo_struct' to be 1024B so we can use a static variable for it, and at the meantime, it can still have 1024B (enough space) for the TDH.SYS.INFO to write to.