* [PATCH 0/4] Fix virtio-gpu deinitialization paths.
@ 2018-07-20 14:16 Damir Shaikhutdinov
2018-07-20 14:16 ` [PATCH 1/4] drm/virtio: Fix memory leak during framebuffer destruction Damir Shaikhutdinov
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Damir Shaikhutdinov @ 2018-07-20 14:16 UTC (permalink / raw)
To: airlied; +Cc: Damir Shaikhutdinov, dri-devel
This series of patches aims to fix some bugs and memory leaks
in virtio-gpu deinitialization paths.
While denitialization paths is not usually executed in any virtio-gpu
usecase, it is useful for testing during implementation of virtio-gpu
device part.
Damir Shaikhutdinov (4):
drm/virtio: Fix memory leak during framebuffer destruction.
drm/virtio: Remove incorrect kfree during connector destruction.
drm/virtio: Fix virtio gpu fbdev deinitialization.
drm/virtio: Fix connector leak during virtio-gpu deinitialization.
drivers/gpu/drm/virtio/virtgpu_display.c | 6 +-----
drivers/gpu/drm/virtio/virtgpu_fb.c | 7 +++++--
drivers/gpu/drm/virtio/virtgpu_kms.c | 2 ++
3 files changed, 8 insertions(+), 7 deletions(-)
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/4] drm/virtio: Fix memory leak during framebuffer destruction.
2018-07-20 14:16 [PATCH 0/4] Fix virtio-gpu deinitialization paths Damir Shaikhutdinov
@ 2018-07-20 14:16 ` Damir Shaikhutdinov
2018-07-20 14:16 ` [PATCH 2/4] drm/virtio: Remove incorrect kfree during connector destruction Damir Shaikhutdinov
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Damir Shaikhutdinov @ 2018-07-20 14:16 UTC (permalink / raw)
To: airlied; +Cc: Damir Shaikhutdinov, dri-devel
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@opensynergy.com>
Signed-off-by: Kiran Pawar <kiran.pawar@opensynergy.com>
---
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@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/4] drm/virtio: Remove incorrect kfree during connector destruction.
2018-07-20 14:16 [PATCH 0/4] Fix virtio-gpu deinitialization paths Damir Shaikhutdinov
2018-07-20 14:16 ` [PATCH 1/4] drm/virtio: Fix memory leak during framebuffer destruction Damir Shaikhutdinov
@ 2018-07-20 14:16 ` Damir Shaikhutdinov
2018-07-20 14:16 ` [PATCH 3/4] drm/virtio: Fix virtio gpu fbdev deinitialization Damir Shaikhutdinov
2018-07-20 14:16 ` [PATCH 4/4] drm/virtio: Fix connector leak during virtio-gpu deinitialization Damir Shaikhutdinov
3 siblings, 0 replies; 6+ messages in thread
From: Damir Shaikhutdinov @ 2018-07-20 14:16 UTC (permalink / raw)
To: airlied; +Cc: Damir Shaikhutdinov, dri-devel
In function virtio_gpu_conn_destroy a pointer to a containing structure
virtio_gpu_output is received using drm_connector_to_virtio_gpu_output
(container_of), and then it is passed to kfree function.
But this pointer points to a member of array (vgdev->outputs + index)
(see vgdev_output_init):
struct virtio_gpu_output *output = vgdev->outputs + index;
struct drm_connector *connector = &output->conn;
...
drm_connector_init(dev, connector, &virtio_gpu_connector_funcs,
DRM_MODE_CONNECTOR_VIRTUAL);
Signed-off-by: Damir Shaikhutdinov <damir.shaikhutdinov@opensynergy.com>
---
drivers/gpu/drm/virtio/virtgpu_display.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index b6d52055a11f..d211d4e98b46 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -243,12 +243,8 @@ static enum drm_connector_status virtio_gpu_conn_detect(
static void virtio_gpu_conn_destroy(struct drm_connector *connector)
{
- struct virtio_gpu_output *virtio_gpu_output =
- drm_connector_to_virtio_gpu_output(connector);
-
drm_connector_unregister(connector);
drm_connector_cleanup(connector);
- kfree(virtio_gpu_output);
}
static const struct drm_connector_funcs virtio_gpu_connector_funcs = {
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/4] drm/virtio: Fix virtio gpu fbdev deinitialization.
2018-07-20 14:16 [PATCH 0/4] Fix virtio-gpu deinitialization paths Damir Shaikhutdinov
2018-07-20 14:16 ` [PATCH 1/4] drm/virtio: Fix memory leak during framebuffer destruction Damir Shaikhutdinov
2018-07-20 14:16 ` [PATCH 2/4] drm/virtio: Remove incorrect kfree during connector destruction Damir Shaikhutdinov
@ 2018-07-20 14:16 ` Damir Shaikhutdinov
2018-07-20 14:16 ` [PATCH 4/4] drm/virtio: Fix connector leak during virtio-gpu deinitialization Damir Shaikhutdinov
3 siblings, 0 replies; 6+ messages in thread
From: Damir Shaikhutdinov @ 2018-07-20 14:16 UTC (permalink / raw)
To: airlied; +Cc: Damir Shaikhutdinov, dri-devel
Module parameter virtio_gpu_fbdev is used to enable or disable fbdev in
virtio. It is checked during fbdev initialization, but is not checked
during deinitialization.
Moving fbdev destruction to virtgpu_kms.c instead of virtgpu_display.c
places deinitialization to the same file as initialization, and allows
checking for virtio_gpu_fbdev module parameter.
Signed-off-by: Damir Shaikhutdinov <damir.shaikhutdinov@opensynergy.com>
---
drivers/gpu/drm/virtio/virtgpu_display.c | 1 -
drivers/gpu/drm/virtio/virtgpu_kms.c | 2 ++
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index d211d4e98b46..d314e3c672f2 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -377,6 +377,5 @@ int virtio_gpu_modeset_init(struct virtio_gpu_device *vgdev)
void virtio_gpu_modeset_fini(struct virtio_gpu_device *vgdev)
{
- virtio_gpu_fbdev_fini(vgdev);
drm_mode_config_cleanup(vgdev->ddev);
}
diff --git a/drivers/gpu/drm/virtio/virtgpu_kms.c b/drivers/gpu/drm/virtio/virtgpu_kms.c
index 6400506a06b0..b994ecfdd378 100644
--- a/drivers/gpu/drm/virtio/virtgpu_kms.c
+++ b/drivers/gpu/drm/virtio/virtgpu_kms.c
@@ -259,6 +259,8 @@ void virtio_gpu_driver_unload(struct drm_device *dev)
flush_work(&vgdev->config_changed_work);
vgdev->vdev->config->del_vqs(vgdev->vdev);
+ if (virtio_gpu_fbdev)
+ virtio_gpu_fbdev_fini(vgdev);
virtio_gpu_modeset_fini(vgdev);
virtio_gpu_ttm_fini(vgdev);
virtio_gpu_free_vbufs(vgdev);
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 4/4] drm/virtio: Fix connector leak during virtio-gpu deinitialization.
2018-07-20 14:16 [PATCH 0/4] Fix virtio-gpu deinitialization paths Damir Shaikhutdinov
` (2 preceding siblings ...)
2018-07-20 14:16 ` [PATCH 3/4] drm/virtio: Fix virtio gpu fbdev deinitialization Damir Shaikhutdinov
@ 2018-07-20 14:16 ` Damir Shaikhutdinov
3 siblings, 0 replies; 6+ messages in thread
From: Damir Shaikhutdinov @ 2018-07-20 14:16 UTC (permalink / raw)
To: airlied; +Cc: Damir Shaikhutdinov, dri-devel
Attaching CRTC to a connector increases its reference count, preventing
it from correct deinitialization. Following kernel log is printed when
the leak is found:
Console: switching to colour VGA+ 80x25
WARNING: at drivers/gpu/drm/drm_mode_config.c:431
...
Call Trace:
drm_mode_config_cleanup
virtio_gpu_modeset_fini
virtio_gpu_driver_unload
drm_dev_unregister
drm_put_dev
virtio_gpu_remove
virtio_dev_remove
device_release_driver_internal
device_release_driver
bus_remove_device
device_del
device_unregister
unregister_virtio_device
...
[drm:drm_mode_config_cleanup] ERROR connector Virtual-1 leaked!
Calling drm_atomic_helper_shutdown disconnects CRTCs from connectors,
allowing them to be freed during drm_mode_config_cleanup.
Signed-off-by: Damir Shaikhutdinov <damir.shaikhutdinov@opensynergy.com>
Signed-off-by: Kiran Pawar <kiran.pawar@opensynergy.com>
---
drivers/gpu/drm/virtio/virtgpu_display.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index d314e3c672f2..088a751a35e9 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -377,5 +377,6 @@ int virtio_gpu_modeset_init(struct virtio_gpu_device *vgdev)
void virtio_gpu_modeset_fini(struct virtio_gpu_device *vgdev)
{
+ drm_atomic_helper_shutdown(vgdev->ddev);
drm_mode_config_cleanup(vgdev->ddev);
}
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 0/4] Fix virtio-gpu deinitialization paths.
@ 2018-07-20 14:11 Damir Shaikhutdinov
0 siblings, 0 replies; 6+ messages in thread
From: Damir Shaikhutdinov @ 2018-07-20 14:11 UTC (permalink / raw)
To: aerlied; +Cc: Damir Shaikhutdinov, dri-devel
This series of patches aims to fix some bugs and memory leaks
in virtio-gpu deinitialization paths.
While denitialization paths is not usually executed in any virtio-gpu
usecase, it is useful for testing during implementation of virtio-gpu
device part.
Damir Shaikhutdinov (4):
drm/virtio: Fix memory leak during framebuffer destruction.
drm/virtio: Remove incorrect kfree during connector destruction.
drm/virtio: Fix virtio gpu fbdev deinitialization.
drm/virtio: Fix connector leak during virtio-gpu deinitialization.
drivers/gpu/drm/virtio/virtgpu_display.c | 6 +-----
drivers/gpu/drm/virtio/virtgpu_fb.c | 7 +++++--
drivers/gpu/drm/virtio/virtgpu_kms.c | 2 ++
3 files changed, 8 insertions(+), 7 deletions(-)
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2018-07-20 14:16 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-20 14:16 [PATCH 0/4] Fix virtio-gpu deinitialization paths Damir Shaikhutdinov
2018-07-20 14:16 ` [PATCH 1/4] drm/virtio: Fix memory leak during framebuffer destruction Damir Shaikhutdinov
2018-07-20 14:16 ` [PATCH 2/4] drm/virtio: Remove incorrect kfree during connector destruction Damir Shaikhutdinov
2018-07-20 14:16 ` [PATCH 3/4] drm/virtio: Fix virtio gpu fbdev deinitialization Damir Shaikhutdinov
2018-07-20 14:16 ` [PATCH 4/4] drm/virtio: Fix connector leak during virtio-gpu deinitialization Damir Shaikhutdinov
-- strict thread matches above, loose matches on Subject: below --
2018-07-20 14:11 [PATCH 0/4] Fix virtio-gpu deinitialization paths Damir Shaikhutdinov
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.