|
@@ -909,6 +909,11 @@ drm_atomic_helper_wait_for_vblanks(struct drm_device *dev,
|
|
|
if (!crtc->state->enable)
|
|
|
continue;
|
|
|
|
|
|
+ /* Legacy cursor ioctls are completely unsynced, and userspace
|
|
|
+ * relies on that (by doing tons of cursor updates). */
|
|
|
+ if (old_state->legacy_cursor_update)
|
|
|
+ continue;
|
|
|
+
|
|
|
if (!framebuffer_changed(dev, old_state, crtc))
|
|
|
continue;
|
|
|
|
|
@@ -1335,6 +1340,9 @@ retry:
|
|
|
if (ret != 0)
|
|
|
goto fail;
|
|
|
|
|
|
+ if (plane == crtc->cursor)
|
|
|
+ state->legacy_cursor_update = true;
|
|
|
+
|
|
|
/* Driver takes ownership of state on successful commit. */
|
|
|
return 0;
|
|
|
fail:
|
|
@@ -1410,6 +1418,9 @@ retry:
|
|
|
plane_state->src_h = 0;
|
|
|
plane_state->src_w = 0;
|
|
|
|
|
|
+ if (plane == plane->crtc->cursor)
|
|
|
+ state->legacy_cursor_update = true;
|
|
|
+
|
|
|
ret = drm_atomic_commit(state);
|
|
|
if (ret != 0)
|
|
|
goto fail;
|