When a VIRTIO GPU device is removed, it cleans up any command buffers that the VIRTIO frontend has responded to. It however ignores commands that have yet to be replied to, which still reside in the avail rings of the virt queues. This leaks two type of objects:
- VIRTIO command buffers - Fences Furthermore, if the virtio config has num_capsets > 0, the capsets field of the device is also leaked. These memory leaks are reported by: - /sys/kernel/debug/kmemleak - slab debug options "BUG virtio-gpu-vbufs: Objects remaining in virtio-gpu-vbufs on __kmem_cache_shutdown()" - drm:drm_mm_takedown "Memory manager not clean during takedown." This patch series adds cleanup logic in virtio_gpu_deinit(), after calling virtio_reset_device(), to free any such allocations. Signed-off-by: Manos Pitsidianakis <manos.pitsidiana...@linaro.org> --- Manos Pitsidianakis (3): virtgpu: add virtio_gpu_queue_cleanup() virtgpu: add virtio_gpu_fence_cleanup() virtgpu: deallocate capsets on device deinit drivers/gpu/drm/virtio/virtgpu_drv.h | 2 ++ drivers/gpu/drm/virtio/virtgpu_fence.c | 12 ++++++++ drivers/gpu/drm/virtio/virtgpu_kms.c | 6 ++++ drivers/gpu/drm/virtio/virtgpu_vq.c | 55 ++++++++++++++++++++++++++++++++++ 4 files changed, 75 insertions(+) --- base-commit: ad10b82c2bcac7f87ac6eaecfca33378b43425ee change-id: 20250505-virtgpu-queue-cleanup-v1-3392995cab5f -- γαῖα πυρί μιχθήτω