We're working on requiring the obj->resv lock during unbind, fix
the shrinker to take the objectl ock.

Signed-off-by: Maarten Lankhorst <maarten.lankho...@linux.intel.com>
---
 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c 
b/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
index eebff4735781..ad2123369e0d 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
@@ -405,12 +405,18 @@ i915_gem_shrinker_vmap(struct notifier_block *nb, 
unsigned long event, void *ptr
        list_for_each_entry_safe(vma, next,
                                 &i915->ggtt.vm.bound_list, vm_link) {
                unsigned long count = vma->node.size >> PAGE_SHIFT;
+               struct drm_i915_gem_object *obj = vma->obj;
 
                if (!vma->iomap || i915_vma_is_active(vma))
                        continue;
 
+               if (!i915_gem_object_trylock(obj))
+                       continue;
+
                if (__i915_vma_unbind(vma) == 0)
                        freed_pages += count;
+
+               i915_gem_object_unlock(obj);
        }
        mutex_unlock(&i915->ggtt.vm.mutex);
 
-- 
2.34.1

Reply via email to