@samitouri / QOSamiQemu / commits / 5ce01c9238

hw/display/virtio-gpu: Unmap DMA regions on reset

virtio_gpu_reset() freed in-flight commands without unmapping the DMA regions acquired by virtqueue_pop(). Call virtqueue_detach_element() before g_free() in both drain loops. Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3467 Cc: qemu-stable@nongnu.org Signed-off-by: Bin Guo <guobin@linux.alibaba.com> Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-ID: <20260803082158.62998-1-guobin@linux.alibaba.com>

Bin Guo committed Aug 3, 2026 at 16:21 UTC 5ce01c92389a422389898df481ed441a80ece3c4
1 file changed +2
hw/display/virtio-gpu.c
+2
@@ -1725,12 +1725,14 @@ void virtio_gpu_reset(VirtIODevice *vdev)
1725 while (!QTAILQ_EMPTY(&g->cmdq)) {
1726 cmd = QTAILQ_FIRST(&g->cmdq);
1727 QTAILQ_REMOVE(&g->cmdq, cmd, next);
1728 + virtqueue_detach_element(cmd->vq, &cmd->elem, 0);
1729 g_free(cmd);
1730 }
1731
1732 while (!QTAILQ_EMPTY(&g->fenceq)) {
1733 cmd = QTAILQ_FIRST(&g->fenceq);
1734 QTAILQ_REMOVE(&g->fenceq, cmd, next);
1735 + virtqueue_detach_element(cmd->vq, &cmd->elem, 0);
1736 g->inflight--;
1737 g_free(cmd);
1738 }