Skip to content

Commit

Permalink
drm: Introduce drm_framebuffer_assign()
Browse files Browse the repository at this point in the history
In a couple of places currently, and with the intent to add more, we
update a pointer to a framebuffer to hold a new fb reference (evicting
the old).

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/20161125153231.13255-2-chris@chris-wilson.co.uk
  • Loading branch information
Chris Wilson authored and Daniel Vetter committed Nov 29, 2016
1 parent b2383fa commit 389f78b
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 6 deletions.
8 changes: 2 additions & 6 deletions drivers/gpu/drm/drm_atomic.c
Original file line number Diff line number Diff line change
Expand Up @@ -1246,18 +1246,14 @@ void
drm_atomic_set_fb_for_plane(struct drm_plane_state *plane_state,
struct drm_framebuffer *fb)
{
if (plane_state->fb)
drm_framebuffer_unreference(plane_state->fb);
if (fb)
drm_framebuffer_reference(fb);
plane_state->fb = fb;

if (fb)
DRM_DEBUG_ATOMIC("Set [FB:%d] for plane state %p\n",
fb->base.id, plane_state);
else
DRM_DEBUG_ATOMIC("Set [NOFB] for plane state %p\n",
plane_state);

drm_framebuffer_assign(&plane_state->fb, fb);
}
EXPORT_SYMBOL(drm_atomic_set_fb_for_plane);

Expand Down
18 changes: 18 additions & 0 deletions include/drm/drm_framebuffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,24 @@ static inline uint32_t drm_framebuffer_read_refcount(struct drm_framebuffer *fb)
}

/**
* drm_framebuffer_assign - store a reference to the fb
* @p: location to store framebuffer
* @fb: new framebuffer (maybe NULL)
*
* This functions sets the location to store a reference to the framebuffer,
* unreferencing the framebuffer that was previously stored in that location.
*/
static inline void drm_framebuffer_assign(struct drm_framebuffer **p,
struct drm_framebuffer *fb)
{
if (fb)
drm_framebuffer_reference(fb);
if (*p)
drm_framebuffer_unreference(*p);
*p = fb;
}

/*
* drm_for_each_fb - iterate over all framebuffers
* @fb: the loop cursor
* @dev: the DRM device
Expand Down

0 comments on commit 389f78b

Please sign in to comment.