#define I915_SHRINK_PURGEABLE 0x1
 #define I915_SHRINK_UNBOUND 0x2
 #define I915_SHRINK_BOUND 0x4
+#define I915_SHRINK_ACTIVE 0x8
 unsigned long i915_gem_shrink_all(struct drm_i915_private *dev_priv);
 void i915_gem_shrinker_init(struct drm_i915_private *dev_priv);
 
 
                            obj->madv != I915_MADV_DONTNEED)
                                continue;
 
+                       if ((flags & I915_SHRINK_ACTIVE) == 0 && obj->active)
+                               continue;
+
                        drm_gem_object_reference(&obj->base);
 
                        /* For the unbound phase, this should be a no-op! */
 unsigned long i915_gem_shrink_all(struct drm_i915_private *dev_priv)
 {
        return i915_gem_shrink(dev_priv, -1UL,
-                              I915_SHRINK_BOUND | I915_SHRINK_UNBOUND);
+                              I915_SHRINK_BOUND |
+                              I915_SHRINK_UNBOUND |
+                              I915_SHRINK_ACTIVE);
 }
 
 static bool i915_gem_shrinker_lock(struct drm_device *dev, bool *unlock)
                        count += obj->base.size >> PAGE_SHIFT;
 
        list_for_each_entry(obj, &dev_priv->mm.bound_list, global_list) {
-               if (obj->pages_pin_count == num_vma_bound(obj))
+               if (!obj->active && obj->pages_pin_count == num_vma_bound(obj))
                        count += obj->base.size >> PAGE_SHIFT;
        }