summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/i915/gem/i915_gem_vm_bind_object.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/gem/i915_gem_vm_bind_object.c')
-rw-r--r--drivers/gpu/drm/i915/gem/i915_gem_vm_bind_object.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_vm_bind_object.c b/drivers/gpu/drm/i915/gem/i915_gem_vm_bind_object.c
index 96f139cc8060..1a8efa83547f 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_vm_bind_object.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_vm_bind_object.c
@@ -85,6 +85,13 @@ void i915_gem_vm_bind_remove(struct i915_vma *vma, bool release_obj)
{
assert_vm_bind_held(vma->vm);
+ spin_lock(&vma->vm->vm_rebind_lock);
+ if (!list_empty(&vma->vm_rebind_link))
+ list_del_init(&vma->vm_rebind_link);
+ i915_vma_set_purged(vma);
+ i915_vma_set_freed(vma);
+ spin_unlock(&vma->vm->vm_rebind_lock);
+
if (!list_empty(&vma->vm_bind_link)) {
list_del_init(&vma->vm_bind_link);
list_del_init(&vma->non_priv_vm_bind_link);
@@ -220,6 +227,7 @@ static struct i915_vma *vm_bind_get_vma(struct i915_address_space *vm,
vma->start = va->start;
vma->last = va->start + va->length - 1;
+ i915_vma_set_persistent(vma);
return vma;
}
@@ -304,8 +312,10 @@ out_ww:
i915_vm_bind_put_fence(vma);
put_vma:
- if (ret)
+ if (ret) {
+ i915_vma_set_freed(vma);
i915_vma_destroy(vma);
+ }
i915_gem_ww_ctx_fini(&ww);
unlock_vm: