virtio-gpu: Handle virgl fence creation errors
Print out error messages when virgl fence creation fails to aid debugging of the fence-related bugs. Reviewed-by: Akihiko Odaki <akihiko.odaki@daynix.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Tested-by: Alex Bennée <alex.bennee@linaro.org> Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Reviewed-by: Yiwei Zhang <zzyiwei@gmail.com> Tested-by: Yiwei Zhang <zzyiwei@gmail.com> Signed-off-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> Message-ID: <20260303151422.977399-9-dmitry.osipenko@collabora.com> Message-ID: <20260304165043.1437519-11-alex.bennee@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Dmitry Osipenko committed
Mar 4, 2026 at 16:50 UTC
17bf86af36e2f2fe94ec48311f7d454654d166d5
1 file changed
+22
-5
hw/display/virtio-gpu-virgl.c
+22
-5
@@ -900,6 +900,7 @@ void virtio_gpu_virgl_process_cmd(VirtIOGPU *g,
900
struct virtio_gpu_ctrl_command *cmd)
901
{
902
bool cmd_suspended = false;
903
+ int ret;
904
905
VIRTIO_GPU_FILL_CMD(cmd->cmd_hdr);
906
@@ -1000,14 +1001,30 @@ void virtio_gpu_virgl_process_cmd(VirtIOGPU *g,
1001
trace_virtio_gpu_fence_ctrl(cmd->cmd_hdr.fence_id, cmd->cmd_hdr.type);
1002
#if VIRGL_VERSION_MAJOR >= 1
1003
if (cmd->cmd_hdr.flags & VIRTIO_GPU_FLAG_INFO_RING_IDX) {
1003
- virgl_renderer_context_create_fence(cmd->cmd_hdr.ctx_id,
1004
- VIRGL_RENDERER_FENCE_FLAG_MERGEABLE,
1005
- cmd->cmd_hdr.ring_idx,
1006
- cmd->cmd_hdr.fence_id);
1004
+ const uint32_t flags = VIRGL_RENDERER_FENCE_FLAG_MERGEABLE;
1005
+
1006
+ ret = virgl_renderer_context_create_fence(cmd->cmd_hdr.ctx_id, flags,
1007
+ cmd->cmd_hdr.ring_idx,
1008
+ cmd->cmd_hdr.fence_id);
1009
+ if (ret) {
1010
+ qemu_log_mask(LOG_GUEST_ERROR,
1011
+ "%s: virgl_renderer_context_create_fence error: %s",
1012
+ __func__, strerror(-ret));
1013
+ }
1014
return;
1015
}
1016
#endif
1010
- virgl_renderer_create_fence(cmd->cmd_hdr.fence_id, cmd->cmd_hdr.type);
1017
+
1018
+ /*
1019
+ * Unlike other virglrenderer functions, this one returns a positive
1020
+ * error code.
1021
+ */
1022
+ ret = virgl_renderer_create_fence(cmd->cmd_hdr.fence_id, 0);
1023
+ if (ret) {
1024
+ qemu_log_mask(LOG_GUEST_ERROR,
1025
+ "%s: virgl_renderer_create_fence error: %s",
1026
+ __func__, strerror(ret));
1027
+ }
1028
}
1029
1030
static void virgl_write_fence(void *opaque, uint32_t fence)