drm/i915: Ensure that the mode change flushing is currently uninterruptible
authorChris Wilson <chris@chris-wilson.co.uk>
Sun, 26 Sep 2010 21:47:46 +0000 (22:47 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Sun, 26 Sep 2010 21:50:36 +0000 (22:50 +0100)
Introduced by 48b956c5, I had thought I had already fixed this. Oh well.

Reported-by: Sitsofe Wheeler <sitsofe@yahoo.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
drivers/gpu/drm/i915/i915_gem.c

index 78282ed..1025508 100644 (file)
@@ -2858,10 +2858,17 @@ i915_gem_object_set_to_display_plane(struct drm_gem_object *obj,
        if (obj_priv->gtt_space == NULL)
                return -EINVAL;
 
-       ret = i915_gem_object_flush_gpu_write_domain(obj, pipelined);
+       ret = i915_gem_object_flush_gpu_write_domain(obj, true);
        if (ret)
                return ret;
 
+       /* Currently, we are always called from an non-interruptible context. */
+       if (!pipelined) {
+               ret = i915_gem_object_wait_rendering(obj, false);
+               if (ret)
+                       return ret;
+       }
+
        i915_gem_object_flush_cpu_write_domain(obj);
 
        old_read_domains = obj->read_domains;