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 {