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
}