[PATCH] drm/vc4: bo: Fix drmm_mutex_init memory hog

Daniel Vetter daniel at ffwll.ch
Thu Jan 12 10:46:23 UTC 2023


On Thu, Jan 12, 2023 at 10:12:43AM +0100, Maxime Ripard wrote:
> Commit 374146cad469 ("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: 374146cad469 ("drm/vc4: Switch to drmm_mutex_init")
> Signed-off-by: Maxime Ripard <maxime at cerno.tech>

oops :-)

Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
>  drivers/gpu/drm/vc4/vc4_bo.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
> index c2b7573bd92b..49320e4d595d 100644
> --- a/drivers/gpu/drm/vc4/vc4_bo.c
> +++ b/drivers/gpu/drm/vc4/vc4_bo.c
> @@ -179,6 +179,7 @@ static void vc4_bo_destroy(struct vc4_bo *bo)
>  		bo->validated_shader = NULL;
>  	}
>  
> +	mutex_destroy(&bo->madv_lock);
>  	drm_gem_dma_free(&bo->base);
>  }
>  
> @@ -406,9 +407,7 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size)
>  	bo->madv = VC4_MADV_WILLNEED;
>  	refcount_set(&bo->usecnt, 0);
>  
> -	ret = drmm_mutex_init(dev, &bo->madv_lock);
> -	if (ret)
> -		return ERR_PTR(ret);
> +	mutex_init(&bo->madv_lock);
>  
>  	mutex_lock(&vc4->bo_lock);
>  	bo->label = VC4_BO_TYPE_KERNEL;
> -- 
> 2.39.0
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the dri-devel mailing list