drm/msm/atomic: fix issue with gnome-shell wayland
authorRob Clark <robdclark@gmail.com>
Mon, 12 Jan 2015 21:11:16 +0000 (16:11 -0500)
committerRob Clark <robdclark@gmail.com>
Sun, 1 Feb 2015 20:32:47 +0000 (15:32 -0500)
The gnome-shell wayland compositor triggers a setcrtc with an fb that is
still being rendered, triggering the call to _wait_fence_interruptable().
But a NULL timeout means "don't wait, return -EBUSY if not ready", which
in turn causes the setcrtc to fail.

Signed-off-by: Rob Clark <robdclark@gmail.com>
drivers/gpu/drm/msm/msm_atomic.c

index 2beef4e670d0ea05dd959afa832ad83138705add..871aa2108dc694795e74f2b308031c849ad1a966 100644 (file)
@@ -178,6 +178,7 @@ int msm_atomic_commit(struct drm_device *dev,
 {
        int nplanes = dev->mode_config.num_total_plane;
        int ncrtcs = dev->mode_config.num_crtc;
+       struct timespec timeout;
        struct msm_commit *c;
        int i, ret;
 
@@ -250,7 +251,9 @@ int msm_atomic_commit(struct drm_device *dev,
                return 0;
        }
 
-       ret = msm_wait_fence_interruptable(dev, c->fence, NULL);
+       jiffies_to_timespec(jiffies + msecs_to_jiffies(1000), &timeout);
+
+       ret = msm_wait_fence_interruptable(dev, c->fence, &timeout);
        if (ret) {
                WARN_ON(ret);  // TODO unswap state back?  or??
                commit_destroy(c);