|
@@ -2746,7 +2746,6 @@ int i915_vma_unbind(struct i915_vma *vma)
|
|
|
obj->has_aliasing_ppgtt_mapping = 0;
|
|
|
}
|
|
|
i915_gem_gtt_finish_object(obj);
|
|
|
- i915_gem_object_unpin_pages(obj);
|
|
|
|
|
|
list_del(&vma->mm_list);
|
|
|
/* Avoid an unnecessary call to unbind on rebind. */
|
|
@@ -2754,7 +2753,6 @@ int i915_vma_unbind(struct i915_vma *vma)
|
|
|
obj->map_and_fenceable = true;
|
|
|
|
|
|
drm_mm_remove_node(&vma->node);
|
|
|
-
|
|
|
i915_gem_vma_destroy(vma);
|
|
|
|
|
|
/* Since the unbound list is global, only move to that list if
|
|
@@ -2762,6 +2760,12 @@ int i915_vma_unbind(struct i915_vma *vma)
|
|
|
if (list_empty(&obj->vma_list))
|
|
|
list_move_tail(&obj->global_list, &dev_priv->mm.unbound_list);
|
|
|
|
|
|
+ /* And finally now the object is completely decoupled from this vma,
|
|
|
+ * we can drop its hold on the backing storage and allow it to be
|
|
|
+ * reaped by the shrinker.
|
|
|
+ */
|
|
|
+ i915_gem_object_unpin_pages(obj);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|