Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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
	 * which is protected by any looks.
	 */
	drm_modeset_unlock(&crtc->mutex);
	drm_modeset_unlock_crtc(crtc);
	drm_modeset_lock_all(dev_priv->dev);

	/* 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,
	ret = 0;
out:
	drm_modeset_unlock_all(dev_priv->dev);
	drm_modeset_lock(&crtc->mutex, NULL);
	drm_modeset_lock_crtc(crtc);

	return ret;
}
@@ -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
	 * which is protected by any looks.
	 */
	drm_modeset_unlock(&crtc->mutex);
	drm_modeset_unlock_crtc(crtc);
	drm_modeset_lock_all(dev_priv->dev);

	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)
				   du->cursor_y + du->hotspot_y);

	drm_modeset_unlock_all(dev_priv->dev);
	drm_modeset_lock(&crtc->mutex, NULL);
	drm_modeset_lock_crtc(crtc);

	return 0;
}