Hi Paolo, On Thu, Jun 10, 2021 at 11:42 AM Paolo Bonzini <pbonzini@xxxxxxxxxx> wrote: > > On 03/06/21 23:14, Jing Zhang wrote: > > +struct _kvm_stats_header { > > + __u32 name_size; > > + __u32 count; > > + __u32 desc_offset; > > + __u32 data_offset; > > +}; > > + > > Keeping this struct in sync with kvm_stats_header is a bit messy. If > you move the id at the end of the header, however, you can use the same > trick with the zero-sized array that you used for _kvm_stats_desc. > Good point. Will do. > > +struct kvm_vm_stats_data { > > + unsigned long value[0]; > > +}; > > + > > I posted the patch to switch the VM statistics to 64-bit; you can rebase > on top of it. Cool! > > > +#define KVM_GET_STATS_FD _IOR(KVMIO, 0xcc, struct kvm_stats_header) > > This should be _IO(KVMIO, 0xcc) since it does not have an argument. > Will correct it. > > +#define STATS_DESC(stat, type, unit, scale, exp) \ > > + { \ > > + { \ > > + .flags = type | unit | scale, \ > > + .exponent = exp, \ > > + .size = 1 \ > > + }, \ > > + .name = stat, \ > > Here you can use > > type | BUILD_BUG_ON_ZERO(type & ~KVM_STATS_TYPE_MASK) | > unit | BUILD_BUG_ON_ZERO(unit & ~KVM_STATS_UNIT_MASK) | > scale | BUILD_BUG_ON_ZERO(scale & ~KVM_STATS_SCALE_MASK) | > > to get a little bit of type checking. Sure, will do. > > Paolo > Thanks, Jing