Commit 07a2975c authored by Maxime Ripard's avatar Maxime Ripard

drm/vc4: bo: Fix drmm_mutex_init memory hog

Commit 374146ca ("drm/vc4: Switch to drmm_mutex_init") converted,
among other functions, vc4_create_object() to use drmm_mutex_init().

However, that function is used to allocate a BO, and therefore the
mutex needs to be freed much sooner than when the DRM device is removed
from the system.

For each buffer allocation we thus end up allocating a small structure
as part of the DRM-managed mechanism that is never freed, eventually
leading us to no longer having any free memory anymore.

Let's switch back to mutex_init/mutex_destroy to deal with it properly.

Fixes: 374146ca ("drm/vc4: Switch to drmm_mutex_init")
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20230112091243.490799-1-maxime@cerno.tech
parent 5640e816
...@@ -179,6 +179,7 @@ static void vc4_bo_destroy(struct vc4_bo *bo) ...@@ -179,6 +179,7 @@ static void vc4_bo_destroy(struct vc4_bo *bo)
bo->validated_shader = NULL; bo->validated_shader = NULL;
} }
mutex_destroy(&bo->madv_lock);
drm_gem_dma_free(&bo->base); drm_gem_dma_free(&bo->base);
} }
...@@ -406,9 +407,7 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size) ...@@ -406,9 +407,7 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size)
bo->madv = VC4_MADV_WILLNEED; bo->madv = VC4_MADV_WILLNEED;
refcount_set(&bo->usecnt, 0); refcount_set(&bo->usecnt, 0);
ret = drmm_mutex_init(dev, &bo->madv_lock); mutex_init(&bo->madv_lock);
if (ret)
return ERR_PTR(ret);
mutex_lock(&vc4->bo_lock); mutex_lock(&vc4->bo_lock);
bo->label = VC4_BO_TYPE_KERNEL; bo->label = VC4_BO_TYPE_KERNEL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment