Skip to content

Commit 2f8d25f

Browse files
stefanhaRHAlex Williamson
authored andcommitted
vfio: trivially use __aligned_u64 for ioctl structs
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> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Kevin Tian <kevin.tian@intel.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Link: https://lore.kernel.org/r/20230918205617.1478722-2-stefanha@redhat.com Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
1 parent 8a97ab9 commit 2f8d25f

1 file changed

Lines changed: 9 additions & 9 deletions

File tree

include/uapi/linux/vfio.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -277,8 +277,8 @@ struct vfio_region_info {
277277
#define VFIO_REGION_INFO_FLAG_CAPS (1 << 3) /* Info supports caps */
278278
__u32 index; /* Region index */
279279
__u32 cap_offset; /* Offset within info struct of first cap */
280-
__u64 size; /* Region size (bytes) */
281-
__u64 offset; /* Region offset from start of device fd */
280+
__aligned_u64 size; /* Region size (bytes) */
281+
__aligned_u64 offset; /* Region offset from start of device fd */
282282
};
283283
#define VFIO_DEVICE_GET_REGION_INFO _IO(VFIO_TYPE, VFIO_BASE + 8)
284284

@@ -294,8 +294,8 @@ struct vfio_region_info {
294294
#define VFIO_REGION_INFO_CAP_SPARSE_MMAP 1
295295

296296
struct vfio_region_sparse_mmap_area {
297-
__u64 offset; /* Offset of mmap'able area within region */
298-
__u64 size; /* Size of mmap'able area */
297+
__aligned_u64 offset; /* Offset of mmap'able area within region */
298+
__aligned_u64 size; /* Size of mmap'able area */
299299
};
300300

301301
struct vfio_region_info_cap_sparse_mmap {
@@ -450,9 +450,9 @@ struct vfio_device_migration_info {
450450
VFIO_DEVICE_STATE_V1_RESUMING)
451451

452452
__u32 reserved;
453-
__u64 pending_bytes;
454-
__u64 data_offset;
455-
__u64 data_size;
453+
__aligned_u64 pending_bytes;
454+
__aligned_u64 data_offset;
455+
__aligned_u64 data_size;
456456
};
457457

458458
/*
@@ -476,7 +476,7 @@ struct vfio_device_migration_info {
476476

477477
struct vfio_region_info_cap_nvlink2_ssatgt {
478478
struct vfio_info_cap_header header;
479-
__u64 tgt;
479+
__aligned_u64 tgt;
480480
};
481481

482482
/*
@@ -1470,7 +1470,7 @@ struct vfio_iommu_type1_info {
14701470
__u32 flags;
14711471
#define VFIO_IOMMU_INFO_PGSIZES (1 << 0) /* supported page sizes info */
14721472
#define VFIO_IOMMU_INFO_CAPS (1 << 1) /* Info supports caps */
1473-
__u64 iova_pgsizes; /* Bitmap of supported page sizes */
1473+
__aligned_u64 iova_pgsizes; /* Bitmap of supported page sizes */
14741474
__u32 cap_offset; /* Offset within info struct of first cap */
14751475
__u32 pad;
14761476
};

0 commit comments

Comments
 (0)