• Ville Syrjälä's avatar
    drm/atomic-helper: Drop plane->fb references only for drm_atomic_helper_shutdown() · 5e9cfeba
    Ville Syrjälä authored
    drm_atomic_helper_shutdown() needs to release the reference held by
    plane->fb. Since commit 49d70aea ("drm/atomic-helper: Fix leak in
    disable_all") we're doing that by calling drm_atomic_clean_old_fb() in
    drm_atomic_helper_disable_all(). This also leaves plane->fb == NULL
    afterwards. However, since drm_atomic_helper_disable_all() is also
    used by the i915 gpu reset code
    drm_atomic_helper_commit_duplicated_state() then has to undo the
    damage and put the correct plane->fb pointers back in (and also
    adjust the ref counts to match again as well).
    
    That approach doesn't work so well for load detection as nothing
    sets up the plane->old_fb pointers for us. This causes us to
    leak an extra reference for each plane->fb when
    drm_atomic_helper_commit_duplicated_state() calls
    drm_atomic_clean_old_fb() after load detection.
    
    To fix this let's call drm_atomic_clean_old_fb() only for
    drm_atomic_helper_shutdown() as that's the only time we need to
    actually drop the plane->fb references. In all the other cases
    (load detection, gpu reset) we want to leave plane->fb alone.
    
    v2: Don't inflict the clean_old_fbs bool to drivers (Daniel)
    v3: Squash in the revert and rewrite the commit msg (Daniel)
    
    Cc: martin.peres@free.fr
    Cc: chris@chris-wilson.co.uk
    Cc: Dave Airlie <airlied@gmail.com>
    Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20180322152313.6561-3-ville.syrjala@linux.intel.com
    Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> #pre-squash
    Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    5e9cfeba
drm_atomic_helper.c 116 KB