Jon Doron <arilou@xxxxxxxxx> writes: > The problem the patch is trying to address is the fact that 'struct > kvm_hyperv_exit' has different layout on when compiling in 32 and 64 bit > modes. > > In 64-bit mode the default alignment boundary is 64 bits thus > forcing extra gaps after 'type' and 'msr' but in 32-bit mode the > boundary is at 32 bits thus no extra gaps. > > This is an issue as even when the kernel is 64 bit, the userspace using > the interface can be both 32 and 64 bit but the same 32 bit userspace has > to work with 32 bit kernel. > > The issue is fixed by forcing the 64 bit layout, this leads to ABI > change for 32 bit builds and while we are obviously breaking '32 bit > userspace with 32 bit kernel' case, we're fixing the '32 bit userspace > with 64 bit kernel' one. > > As the interface has no (known) users and 32 bit KVM is rather baroque > nowadays, this seems like a reasonable decision. > > Signed-off-by: Jon Doron <arilou@xxxxxxxxx> > --- > Documentation/virt/kvm/api.rst | 2 ++ > include/uapi/linux/kvm.h | 2 ++ > 2 files changed, 4 insertions(+) > > diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst > index ebd383fba939..4872c47bbcff 100644 > --- a/Documentation/virt/kvm/api.rst > +++ b/Documentation/virt/kvm/api.rst > @@ -5025,9 +5025,11 @@ EOI was received. > #define KVM_EXIT_HYPERV_SYNIC 1 > #define KVM_EXIT_HYPERV_HCALL 2 > __u32 type; > + __u32 pad1; > union { > struct { > __u32 msr; > + __u32 pad2; > __u64 control; > __u64 evt_page; > __u64 msg_page; > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h > index 4b95f9a31a2f..7ee0ddc4c457 100644 > --- a/include/uapi/linux/kvm.h > +++ b/include/uapi/linux/kvm.h > @@ -189,9 +189,11 @@ struct kvm_hyperv_exit { > #define KVM_EXIT_HYPERV_SYNIC 1 > #define KVM_EXIT_HYPERV_HCALL 2 > __u32 type; > + __u32 pad1; > union { > struct { > __u32 msr; > + __u32 pad2; > __u64 control; > __u64 evt_page; > __u64 msg_page; Reviewed-by: Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> -- Vitaly