Message ID | 20230829182720.331083-2-stefanha@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | vfio: use __aligned_u64 for ioctl structs | expand |
On 29/8/23 20:27, Stefan Hajnoczi wrote: > u64 alignment behaves differently depending on the architecture and so > <uapi/linux/types.h> offers __aligned_u64 to achieve consistent behavior > in kernel<->userspace ABIs. > > There are structs in <uapi/linux/vfio.h> that can trivially be updated > to __aligned_u64 because the struct sizes are multiples of 8 bytes. > There is no change in memory layout on any CPU architecture and > therefore this change is safe. > > The commits that follow this one handle the trickier cases where > explanation about ABI breakage is necessary. > > Suggested-by: Jason Gunthorpe <jgg@nvidia.com> > Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> > --- > include/uapi/linux/vfio.h | 18 +++++++++--------- > 1 file changed, 9 insertions(+), 9 deletions(-) Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> From: Stefan Hajnoczi <stefanha@redhat.com> > Sent: Wednesday, August 30, 2023 2:27 AM > > u64 alignment behaves differently depending on the architecture and so > <uapi/linux/types.h> offers __aligned_u64 to achieve consistent behavior > in kernel<->userspace ABIs. > > There are structs in <uapi/linux/vfio.h> that can trivially be updated > to __aligned_u64 because the struct sizes are multiples of 8 bytes. > There is no change in memory layout on any CPU architecture and > therefore this change is safe. > > The commits that follow this one handle the trickier cases where > explanation about ABI breakage is necessary. > > Suggested-by: Jason Gunthorpe <jgg@nvidia.com> > Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com>
diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h index f9c6f3e2cf6e..94007ca348ed 100644 --- a/include/uapi/linux/vfio.h +++ b/include/uapi/linux/vfio.h @@ -277,8 +277,8 @@ struct vfio_region_info { #define VFIO_REGION_INFO_FLAG_CAPS (1 << 3) /* Info supports caps */ __u32 index; /* Region index */ __u32 cap_offset; /* Offset within info struct of first cap */ - __u64 size; /* Region size (bytes) */ - __u64 offset; /* Region offset from start of device fd */ + __aligned_u64 size; /* Region size (bytes) */ + __aligned_u64 offset; /* Region offset from start of device fd */ }; #define VFIO_DEVICE_GET_REGION_INFO _IO(VFIO_TYPE, VFIO_BASE + 8) @@ -294,8 +294,8 @@ struct vfio_region_info { #define VFIO_REGION_INFO_CAP_SPARSE_MMAP 1 struct vfio_region_sparse_mmap_area { - __u64 offset; /* Offset of mmap'able area within region */ - __u64 size; /* Size of mmap'able area */ + __aligned_u64 offset; /* Offset of mmap'able area within region */ + __aligned_u64 size; /* Size of mmap'able area */ }; struct vfio_region_info_cap_sparse_mmap { @@ -450,9 +450,9 @@ struct vfio_device_migration_info { VFIO_DEVICE_STATE_V1_RESUMING) __u32 reserved; - __u64 pending_bytes; - __u64 data_offset; - __u64 data_size; + __aligned_u64 pending_bytes; + __aligned_u64 data_offset; + __aligned_u64 data_size; }; /* @@ -476,7 +476,7 @@ struct vfio_device_migration_info { struct vfio_region_info_cap_nvlink2_ssatgt { struct vfio_info_cap_header header; - __u64 tgt; + __aligned_u64 tgt; }; /* @@ -1443,7 +1443,7 @@ struct vfio_iommu_type1_info { __u32 flags; #define VFIO_IOMMU_INFO_PGSIZES (1 << 0) /* supported page sizes info */ #define VFIO_IOMMU_INFO_CAPS (1 << 1) /* Info supports caps */ - __u64 iova_pgsizes; /* Bitmap of supported page sizes */ + __aligned_u64 iova_pgsizes; /* Bitmap of supported page sizes */ __u32 cap_offset; /* Offset within info struct of first cap */ __u32 pad; };