[PATCH 1/3] drm/gma500: Unpin framebuffer when destroying it

Daniel Vetter daniel at ffwll.ch
Sun May 26 12:07:28 PDT 2013


On Sun, May 26, 2013 at 08:03:53PM +0200, Patrik Jakobsson wrote:
> A framebuffer is pinned when it's set as pipe base, so we also need to
> unpin it when it's destroyed. Some framebuffers are never used as
> scanout (no mode set on them) so if the pin count is less than one, no
> unpinning is needed.
> 
> Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=889511
> Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=812113
> 
> Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson at gmail.com>
> ---
>  drivers/gpu/drm/gma500/framebuffer.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c
> index 8b1b6d9..1a11b69 100644
> --- a/drivers/gpu/drm/gma500/framebuffer.c
> +++ b/drivers/gpu/drm/gma500/framebuffer.c
> @@ -668,6 +668,11 @@ static void psb_user_framebuffer_destroy(struct drm_framebuffer *fb)
>  
>  	/* Let DRM do its clean up */
>  	drm_framebuffer_cleanup(fb);
> +
> +	/* Unpin any psb_intel_pipe_set_base() pinning */
> +	if (r->in_gart > 0)
> +		psb_gtt_unpin(r);

The drm core /should/ have removed the user framebuffer from all active
users before it calls down into your ->destroy callback. Why can't gma500
just pin/unpin on demand when the buffer is actually in use?

If a pin survives the official use as seen by the drm core (e.g. to keep a
buffer around until the pageflip completes) you can simply keep an
additional reference around.

Cheers, Daniel

> +
>  	/*  We are no longer using the resource in GEM */
>  	drm_gem_object_unreference_unlocked(&r->gem);
>  	kfree(fb);
> -- 
> 1.8.1.2
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch


More information about the dri-devel mailing list