There's an increasing number of machines supporting multiple page sizes and on these machines the host and a guest can be running, each one, with a different page size.
For what pertains to virtio-gpu, this is not a problem if the page size of the guest happens to be bigger or equal than the host, but will potentially lead to failures in memory allocations and/or mappings otherwise. To deal with this, the virtio-spec was extended to introduce with the VIRTIO_GPU_F_BLOB_ALIGNMENT feature [1]. If this feature is negotiated, we must use the "blob_alignment" field in the config to ensure every CREATE_BLOB and MAP_BLOB is properly aligned before sending it to the device. We also introduce the VIRTGPU_PARAM_BLOB_ALIGNMENT parameter to allow userspace to query the alignment restrictions for blobs. This supersedes "drm/virtio: introduce the HOST_PAGE_SIZE feature" [2]. [1] https://github.com/oasis-tcs/virtio-spec/commit/f9abfd55cb663837dda1153b826216dcf4d25b84 [2] https://lkml.org/lkml/2024/7/23/438 Changes in v2: - Rebased. - Moved blob size alignment validation to verify_blob(), rejecting misaligned sizes early in the ioctl path instead of checking in virtio_gpu_cmd_resource_create_blob() and virtio_gpu_cmd_map() (Dmitry Osipenko). Sergio Lopez (3): drm/virtio: support VIRTIO_GPU_F_BLOB_ALIGNMENT drm/virtio: honor blob_alignment requirements drm/virtio: add VIRTGPU_PARAM_BLOB_ALIGNMENT to params drivers/gpu/drm/virtio/virtgpu_drv.c | 1 + drivers/gpu/drm/virtio/virtgpu_drv.h | 2 ++ drivers/gpu/drm/virtio/virtgpu_ioctl.c | 10 ++++++++++ drivers/gpu/drm/virtio/virtgpu_kms.c | 14 +++++++++++--- include/uapi/drm/virtgpu_drm.h | 1 + include/uapi/linux/virtio_gpu.h | 9 +++++++++ 6 files changed, 34 insertions(+), 3 deletions(-) -- 2.53.0

