Commit 21e88620 authored by Rob Clark's avatar Rob Clark Committed by Thomas Hellstrom

drm/vmwgfx: fix lock breakage

After:

commit d059f652
Author:     Daniel Vetter <daniel.vetter@ffwll.ch>
AuthorDate: Fri Jul 25 18:07:40 2014 +0200

    drm: Handle legacy per-crtc locking with full acquire ctx

drm_mode_cursor_common() was switched to use drm_modeset_(un)lock_crtc()
which uses full aquire ctx.  So dropping/reaquiring the lock via
drm_modeset_(un)lock() directly isn't the right thing to do, as lockdep
kindly points out.

The 'FIXME's about sorting out whether vmwgfx *really* needs to lock-all
for cursor updates still apply.
Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
Reviewed-by: default avatarJakob Bornecrantz <jakob@vmware.com>
Tested-by: default avatarThomas Hellstrom <thellstrom@vmware.com>
parent d34d4d8a
...@@ -187,7 +187,7 @@ int vmw_du_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv, ...@@ -187,7 +187,7 @@ int vmw_du_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv,
* can do this since the caller in the drm core doesn't check anything * can do this since the caller in the drm core doesn't check anything
* which is protected by any looks. * which is protected by any looks.
*/ */
drm_modeset_unlock(&crtc->mutex); drm_modeset_unlock_crtc(crtc);
drm_modeset_lock_all(dev_priv->dev); drm_modeset_lock_all(dev_priv->dev);
/* A lot of the code assumes this */ /* A lot of the code assumes this */
...@@ -252,7 +252,7 @@ int vmw_du_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv, ...@@ -252,7 +252,7 @@ int vmw_du_crtc_cursor_set(struct drm_crtc *crtc, struct drm_file *file_priv,
ret = 0; ret = 0;
out: out:
drm_modeset_unlock_all(dev_priv->dev); drm_modeset_unlock_all(dev_priv->dev);
drm_modeset_lock(&crtc->mutex, NULL); drm_modeset_lock_crtc(crtc);
return ret; return ret;
} }
...@@ -273,7 +273,7 @@ int vmw_du_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) ...@@ -273,7 +273,7 @@ int vmw_du_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
* can do this since the caller in the drm core doesn't check anything * can do this since the caller in the drm core doesn't check anything
* which is protected by any looks. * which is protected by any looks.
*/ */
drm_modeset_unlock(&crtc->mutex); drm_modeset_unlock_crtc(crtc);
drm_modeset_lock_all(dev_priv->dev); drm_modeset_lock_all(dev_priv->dev);
vmw_cursor_update_position(dev_priv, shown, vmw_cursor_update_position(dev_priv, shown,
...@@ -281,7 +281,7 @@ int vmw_du_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) ...@@ -281,7 +281,7 @@ int vmw_du_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
du->cursor_y + du->hotspot_y); du->cursor_y + du->hotspot_y);
drm_modeset_unlock_all(dev_priv->dev); drm_modeset_unlock_all(dev_priv->dev);
drm_modeset_lock(&crtc->mutex, NULL); drm_modeset_lock_crtc(crtc);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment