Skip to content
  • Rob Clark's avatar
    drm: refcnt drm_framebuffer (v4.1) · f7eff60e
    Rob Clark authored
    
    
    This simplifies drm fb lifetime, and if the crtc/plane needs to hold
    a ref to the fb when disabling a pipe until the next vblank, this
    avoids the need to make disabling an overlay synchronous.  This is a
    problem that shows up when userspace is using a drm plane to
    implement a hw cursor.. making overlay disable synchronous causes
    a performance problem when x11 is rapidly enabling/disabling the
    hw cursor.  But not making it synchronous opens up a race condition
    for crashing if userspace turns around and immediately deletes the
    fb.  Refcnt'ing the fb makes it possible to solve this problem.
    
    v1: original
    v2: add drm_framebuffer_remove() which is called in all paths where
        fb->funcs->destroy() was directly called before.  This cleans
        up the CRTCs/planes that the fb was attached to.  You should
        only directly use drm_framebuffer_unreference() if you are also
        using drm_framebuffer_reference() to keep a ref to the fb.
    v3: add comment explaining the fb refcount
    v4: remove duplicate 'list_del(&fb->filp_head)'
    
    [airlied: v4.1: fix local rejection]
    
    Signed-off-by: default avatarRob Clark <rob@ti.com>
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    f7eff60e