On Fri, Apr 22, 2022, Paolo Bonzini wrote: > For compatibility with userspace that was using the flags field, > a union overlaps flags with data[0]. I think "compatibility" is slightly misleading, e.g. the offset of the field is changing for 32-bit userspace. To avoid breaking compilation of userspace that was using the flags field, provide a userspace-only union to overlap flags with data[0]. > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h > index 91a6fe4e02c0..f903ab0c8d7a 100644 > --- a/include/uapi/linux/kvm.h > +++ b/include/uapi/linux/kvm.h > @@ -445,7 +445,11 @@ struct kvm_run { > #define KVM_SYSTEM_EVENT_RESET 2 > #define KVM_SYSTEM_EVENT_CRASH 3 > __u32 type; > - __u64 flags; > + __u32 ndata; > + union { > + __u64 flags; As alluded to above, what about wrapping flags in #ifndef __KERNEL__ __u64 flags; #endif so that KVM doesn't try to use flags? > + __u64 data[16]; > + }; > } system_event; > /* KVM_EXIT_S390_STSI */ > struct {