In function virtio_gpufb_create, a virtio_gpu_object is allocated for framebuffer using virtio_gpu_alloc_object. In virtio_gpu_fbdev_destroy, instead of freeing the object, pointer to it is set to NULL. This leads to memory leak during framebuffer destruction, which is reported to kmesg with a message like this: Memory manager not clean during takedown. With DRM_DEBUG_MM enabled, following additional information is printed about the leak: node [00100000 + 000001d5]: inserted at save_stack.isra.9+0x67/0xc0 drm_mm_insert_node_in_range+0x325/0x4f0 drm_vma_offset_add+0x46/0x60 ttm_bo_init_reserved+0x2c9/0x400 ttm_bo_init+0x2a/0x80 virtio_gpu_object_create+0x139/0x180 virtio_gpu_alloc_object+0x2f/0x60 virtio_gpufb_create+0xac/0x2a0 Correctly freeing virtio_gpu_object during framebuffer destruction fixes the issue. Signed-off-by: Damir Shaikhutdinov <damir.shaikhutdinov@xxxxxxxxxxxxxxx> Signed-off-by: Kiran Pawar <kiran.pawar@xxxxxxxxxxxxxxx> --- drivers/gpu/drm/virtio/virtgpu_fb.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/virtio/virtgpu_fb.c b/drivers/gpu/drm/virtio/virtgpu_fb.c index 15d18fd0c64b..10a66a387bfb 100644 --- a/drivers/gpu/drm/virtio/virtgpu_fb.c +++ b/drivers/gpu/drm/virtio/virtgpu_fb.c @@ -301,11 +301,14 @@ static int virtio_gpu_fbdev_destroy(struct drm_device *dev, drm_fb_helper_unregister_fbi(&vgfbdev->helper); - if (vgfb->obj) - vgfb->obj = NULL; drm_fb_helper_fini(&vgfbdev->helper); drm_framebuffer_cleanup(&vgfb->base); + if (vgfb->obj) { + virtio_gpu_gem_free_object(vgfb->obj); + vgfb->obj = NULL; + } + return 0; } static const struct drm_fb_helper_funcs virtio_gpu_fb_helper_funcs = { -- 2.17.1 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel