summaryrefslogtreecommitdiff
path: root/libre/linux-libre-pae/0007-drm-i915-gem-Avoid-parking-the-vma-as-we-unbind.patch
diff options
context:
space:
mode:
Diffstat (limited to 'libre/linux-libre-pae/0007-drm-i915-gem-Avoid-parking-the-vma-as-we-unbind.patch')
-rw-r--r--libre/linux-libre-pae/0007-drm-i915-gem-Avoid-parking-the-vma-as-we-unbind.patch63
1 files changed, 0 insertions, 63 deletions
diff --git a/libre/linux-libre-pae/0007-drm-i915-gem-Avoid-parking-the-vma-as-we-unbind.patch b/libre/linux-libre-pae/0007-drm-i915-gem-Avoid-parking-the-vma-as-we-unbind.patch
deleted file mode 100644
index fe79b6953..000000000
--- a/libre/linux-libre-pae/0007-drm-i915-gem-Avoid-parking-the-vma-as-we-unbind.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From d9f4e03a3469b8c1fce1fd5ef59708a504e5ba02 Mon Sep 17 00:00:00 2001
-From: Chris Wilson <chris@chris-wilson.co.uk>
-Date: Tue, 3 Dec 2019 15:50:32 +0000
-Subject: [PATCH 07/11] drm/i915/gem: Avoid parking the vma as we unbind
-
-In order to avoid keeping a reference on the i915_vma (which is long
-overdue!) we have to coordinate all the possible lifetimes and only use
-the vma while we know it is alive. In this episode, we are reminded that
-while idle, the closed vma are destroyed. So if the GT idles while we are
-working with the vma, the vma itself becomes invalid.
-
-First class i915_vma here we come, but in the meantime keep piling on
-the straw.
-
-Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-Reviewed-by: Matthew Auld <matthew.auld@intel.com>
-Link: https://patchwork.freedesktop.org/patch/msgid/20191203155032.3137263-1-chris@chris-wilson.co.uk
----
- drivers/gpu/drm/i915/i915_gem.c | 17 ++++++++++++++++-
- 1 file changed, 16 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
-index ed2436db5dd2..739543812422 100644
---- a/drivers/gpu/drm/i915/i915_gem.c
-+++ b/drivers/gpu/drm/i915/i915_gem.c
-@@ -141,18 +141,33 @@ int i915_gem_object_unbind(struct drm_i915_gem_object *obj,
- struct i915_vma,
- obj_link))) {
- struct i915_address_space *vm = vma->vm;
-+ bool awake = false;
-
-- ret = -EBUSY;
-+ ret = -EAGAIN;
- if (!i915_vm_tryopen(vm))
- break;
-
-+ /* Prevent vma being freed by i915_vma_parked as we unbind */
-+ if (intel_gt_pm_get_if_awake(vm->gt)) {
-+ awake = true;
-+ } else {
-+ if (i915_vma_is_closed(vma)) {
-+ spin_unlock(&obj->vma.lock);
-+ goto err_vm;
-+ }
-+ }
-+
- list_move_tail(&vma->obj_link, &still_in_list);
- spin_unlock(&obj->vma.lock);
-
-+ ret = -EBUSY;
- if (flags & I915_GEM_OBJECT_UNBIND_ACTIVE ||
- !i915_vma_is_active(vma))
- ret = i915_vma_unbind(vma);
-
-+ if (awake)
-+ intel_gt_pm_put(vm->gt);
-+err_vm:
- i915_vm_close(vm);
- spin_lock(&obj->vma.lock);
- }
---
-2.25.1
-