]> git.ipfire.org Git - thirdparty/qemu.git/commit
include/hw/virtio/virtio-gpu: Fix virtio-gpu with blob on big endian hosts
authorThomas Huth <thuth@redhat.com>
Tue, 15 Aug 2023 12:20:07 +0000 (14:20 +0200)
committerMichael Tokarev <mjt@tls.msk.ru>
Wed, 23 Aug 2023 13:58:41 +0000 (16:58 +0300)
commit01f6417f1550fed6c458fbb49a25db3764dd8008
treecb23c7f4f1d164703d699e18513d42e9d5b158e6
parent14a8213b757a3049cf53ce570a8abc11f16dd602
include/hw/virtio/virtio-gpu: Fix virtio-gpu with blob on big endian hosts

Using "-device virtio-gpu,blob=true" currently does not work on big
endian hosts (like s390x). The guest kernel prints an error message
like:

 [drm:virtio_gpu_dequeue_ctrl_func [virtio_gpu]] *ERROR* response 0x1200 (command 0x10c)

and the display stays black. When running QEMU with "-d guest_errors",
it shows an error message like this:

 virtio_gpu_create_mapping_iov: nr_entries is too big (83886080 > 16384)

which indicates that this value has not been properly byte-swapped.
And indeed, the virtio_gpu_create_blob_bswap() function (that should
swap the fields in the related structure) fails to swap some of the
entries. After correctly swapping all missing values here, too, the
virtio-gpu device is now also working with blob=true on s390x hosts.

Fixes: e0933d91b1 ("virtio-gpu: Add virtio_gpu_resource_create_blob")
Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2230469
Message-Id: <20230815122007.928049-1-thuth@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
(cherry picked from commit d194362910138776e8abd6bb3c9fb3693254e95f)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
include/hw/virtio/virtio-gpu-bswap.h