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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>

oops :-)

Reviewed-by: Daniel Vetter <daniel.vetter@xxxxxxxx>
> ---
>  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



[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux