@@ -2640,8 +2640,6 @@ i915_gem_object_unbind(struct drm_i915_gem_object *obj)
obj->map_and_fenceable = true;
vma = i915_gem_obj_to_vma(obj, &dev_priv->gtt.base);
- list_del(&vma->vma_link);
- drm_mm_remove_node(&vma->node);
i915_gem_vma_destroy(vma);
/* Since the unbound list is global, only move to that list if
@@ -3176,7 +3174,6 @@ search_free:
return 0;
err_out:
- drm_mm_remove_node(&vma->node);
i915_gem_vma_destroy(vma);
i915_gem_object_unpin_pages(obj);
return ret;
@@ -4020,7 +4017,8 @@ struct i915_vma *i915_gem_vma_create(struct drm_i915_gem_object *obj,
void i915_gem_vma_destroy(struct i915_vma *vma)
{
- WARN_ON(vma->node.allocated);
+ list_del_init(&vma->vma_link);
+ drm_mm_remove_node(&vma->node);
kfree(vma);
}
Remove the VMA from the object's list, and remove the VMA's node from the allocator. This just helps avoid duplication, since we always want those two things to occur on destroy, and at least for now, we only do those two actions on destroy anyway. Signed-off-by: Ben Widawsky <ben@bwidawsk.net> --- drivers/gpu/drm/i915/i915_gem.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)