• Daniel Vetter's avatar
    drm: only take the crtc lock for ->cursor_move · dac35663
    Daniel Vetter authored
    ->cursor_move uses mostly the same facilities in drivers as
    ->cursor_set, so pretty much nothing to fix up:
    
    - ast/gma500/i915: They all use per-crtc registers to update the
      cursor position. ast again touches the global cursor cache, but
      that's ok since there's only one crtc.
    
    - nouveau: nv50+ is again special, updates happen through the per-crtc
      channel (without pushbufs), so it's not protected by the new evo
      lock introduced earlier. But since this channel is per-crtc, we
      should be fine anyway.
    
    - radeon: A bit a mess: avivo asics need a workaround when both output
      pipes are enabled, which means it'll access the crtc list. Just
      reading that flag is ok though as long as radeon _always_ grabs all
      locks when changing the crtc configuration. Which means with the
      current scheme it cannot do an optimized modeset which only locks
      the relevant crtcs. This can be fixed though by introducing a bit of
      global state with separate locks and ensure in the modeset code that
      the cursor will be updated appropriately when enabling the 2nd pipe
      (on affected asics).
    
    - vmwgfx: I still don't understand what it's doing exactly, so apply
      the same trick for now.
    
    v2: Fixup unlocking for the error cases, spotted by Richard Wilbur.
    
    v3: Another error-case fixup.
    Reviewed-by: default avatarRob Clark <rob@ti.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    dac35663
drm_crtc.c 96.9 KB