[PATCH 4/4] drm: fix fb refcount issue with atomic modesetting

Daniel Vetter daniel at ffwll.ch
Tue May 31 10:56:23 UTC 2016


On Tue, May 31, 2016 at 12:17:23PM +0300, Tomi Valkeinen wrote:
> After commit 027b3f8ba9277410c3191d72d1ed2c6146d8a668 ("drm/modes: stop
> handling framebuffer special") extra fb refs are left around when doing
> atomic modesetting.
> 
> The problem is that the new drm_property_change_valid_get() does not
> return anything in the '**ref' parameter, which causes
> 'drm_property_change_valid_put' never to be called.
> 
> For some reason this doesn't cause problems with legacy API.
> 
> Also, previously the code only set the 'ref' variable for fbs, with this
> patch the 'ref' is set for all objects.
> 
> So this is a bit of an RFC, as I don't understand all what's going on
> here.
> 
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen at ti.com>

On patches 1,2&4:

Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>

Imo everything but the sti patche should also grow a cc: stable, plus an
appropriate Fixes: line for this one here.
-Daniel

> ---
>  drivers/gpu/drm/drm_crtc.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index 06b6e2173697..0e3cc66aa8b7 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -4839,7 +4839,8 @@ bool drm_property_change_valid_get(struct drm_property *property,
>  		if (value == 0)
>  			return true;
>  
> -		return _object_find(property->dev, value, property->values[0]) != NULL;
> +		*ref = _object_find(property->dev, value, property->values[0]);
> +		return *ref != NULL;
>  	}
>  
>  	for (i = 0; i < property->num_values; i++)
> -- 
> 2.5.0
> 

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


More information about the dri-devel mailing list