@samitouri / QOSamiQemu / commits / 17bf86af36

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)