Two reasons for that:
- This changes aligns atomic with the legacy page flip semantics as
  established by the i915 driver.

- Asking for an async flip on a disabled pipe generally indicates a
  userspace bug. Worst case userspace will busy-loop rendering (since
  flips complete immediately). So better to catch this fast.

Note that we can't do the same for synchronous commits since the
legacy hooks allowed that. And there's probably piles of userspace
code out there which relies on this.

Cc: Daniel Stone <[email protected]>
Signed-off-by: Daniel Vetter <[email protected]>
---
 drivers/gpu/drm/drm_atomic.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index 791876e4657c..3c171e9e1cf5 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -1334,12 +1334,25 @@ EXPORT_SYMBOL(drm_atomic_commit);
 int drm_atomic_async_commit(struct drm_atomic_state *state)
 {
        struct drm_mode_config *config = &state->dev->mode_config;
-       int ret;
+       struct drm_crtc *crtc;
+       struct drm_crtc_state *crtc_state;
+       int i, ret;
 
        ret = drm_atomic_check_only(state);
        if (ret)
                return ret;
 
+       if (!state->allow_modeset) {
+               for_each_crtc_in_state(state, crtc, crtc_state, i) {
+                       if (crtc_state->active) {
+                               DRM_DEBUG_ATOMIC("[CRTC:%d] requires full 
modeset\n",
+                                                crtc->base.id);
+                               return -EINVAL;
+
+                       }
+               }
+       }
+
        DRM_DEBUG_ATOMIC("commiting %p asynchronously\n", state);
 
        return config->funcs->atomic_commit(state->dev, state, true);
-- 
2.5.1

_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to