• Daniel Vetter's avatar
    drm: Fixup locking for universal cursor planes · f2b50c11
    Daniel Vetter authored
    Bunch of things amiss:
    - Updating crtc->cursor_x/y was done without any locking. Spotted by
      David Herrmann.
    - Dereferencing crtc->cursor->fb was using the wrong lock, should take
      the crtc lock.
    - Grabbing _all_ modeset locks torpedoes the reason why we added
      fine-grained locks originally: Cursor updates shouldn't stall on
      background stuff like probing outputs.
    
    Best is to just grab the crtc lock around everything and drop all the
    other locking. The only issue is that we can't switch planes between
    crtcs with that, so make sure that never happens when someone uses
    universal plane helpers. This shouldn't be a possible regression ever
    since legacy ioctls also only grabbed the crtc lock, so switching
    crtcs was never possible for the underlying plane object. And i915
    (the only user of universal cursors thus far) has fixed cursor->crtc
    links.
    
    Cc: David Herrmann <dh.herrmann@gmail.com>
    Cc: Pallavi G<pallavi.g@intel.com>
    Cc: Matt Roper <matthew.d.roper@intel.com>
    Reviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
    Tested-by: default avatarMatt Roper <matthew.d.roper@intel.com>
    Reviewed-by: default avatarDavid Herrmann <dh.herrmann@gmail.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
    f2b50c11
drm_crtc.c 137 KB