drm/i915: remove do_retire from i915_wait_request
[deliverable/linux.git] / drivers / gpu / drm / i915 / i915_gem_evict.c
index 91ebb94d7c8be35b668fe194643d7b7c4c5df058..3bcf0451d07c45323b3be5bff25d04006a538c49 100644 (file)
@@ -168,7 +168,7 @@ i915_gem_evict_everything(struct drm_device *dev, bool purgeable_only)
        drm_i915_private_t *dev_priv = dev->dev_private;
        struct drm_i915_gem_object *obj, *next;
        bool lists_empty;
-       int ret;
+       int ret,i;
 
        lists_empty = (list_empty(&dev_priv->mm.inactive_list) &&
                       list_empty(&dev_priv->mm.flushing_list) &&
@@ -178,11 +178,20 @@ i915_gem_evict_everything(struct drm_device *dev, bool purgeable_only)
 
        trace_i915_gem_evict_everything(dev, purgeable_only);
 
-       /* Flush everything (on to the inactive lists) and evict */
-       ret = i915_gpu_idle(dev, true);
+       ret = i915_gpu_idle(dev);
        if (ret)
                return ret;
 
+       /* The gpu_idle will flush everything in the write domain to the
+        * active list. Then we must move everything off the active list
+        * with retire requests.
+        */
+       for (i = 0; i < I915_NUM_RINGS; i++)
+               if (WARN_ON(!list_empty(&dev_priv->ring[i].gpu_write_list)))
+                       return -EBUSY;
+
+       i915_gem_retire_requests(dev);
+
        BUG_ON(!list_empty(&dev_priv->mm.flushing_list));
 
        /* Having flushed everything, unbind() should never raise an error */
This page took 0.026139 seconds and 5 git commands to generate.