• Daniel Vetter's avatar
    drm: Switch blobs to the new generic modeset obj refcounting · 152ef5fa
    Daniel Vetter authored
    Need to move the free function around a bit, but otherwise mostly
    just removing code.
    
    Specifically we can nuke all the _locked variants since the weak idr
    reference is now protected by the idr_mutex, which we never hold
    anywhere expect in the lookup/reg/unreg functions. And those never
    call anything else.
    
    Another benefit of this is that this patch switches the weak reference
    logic from kref_put_mutex to kref_get_unless_zero. And the later is in
    general more flexible wrt accomodating multiple weak references
    protected by different locks, which might or might not come handy
    eventually.
    
    But one consequence of that switch is that we need to acquire the
    blob_lock from the free function for the list_del calls. That's a bit
    tricky to pull off, but works well if we pick the exact same scheme as
    is already used for framebuffers. Most important changes:
    
    - filp list is maintainer by create/destroy_blob ioctls directly
      (already the case, so we can just remove the redundant list_del from
      the free function).
    
    - filp close handler walks the filp-private list lockless - works
      because we know no one else can access it. I copied the same comment
      from the fb code over to explain this.
    
    - Otherwise we need to sufficiently restrict blob_lock critical
      sections to avoid all the unreference calls. Easy to do once the
      blob_lock only protects the list, and no longer the weak reference.
    
    Cc: Dave Airlie <airlied@gmail.com>
    Cc: Daniel Stone <daniels@collabora.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    152ef5fa
drm_crtc.c 161 KB