[PATCH 56/56] nested-shrinker-ww_mutex

Chris Wilson chris at chris-wilson.co.uk
Fri Jul 3 22:30:09 UTC 2020


Since the reservation_ww_class is global, we should reserve the
subclass, DMA_RESV_RECLAIM_NESTING (MAX_SUBCLASS-1)
---
 drivers/gpu/drm/i915/gem/i915_gem_shrinker.c |  5 +++--
 drivers/gpu/drm/i915/gem/i915_gem_userptr.c  | 10 ++++------
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c b/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
index a2713b251d70..ea064082aad9 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c
@@ -189,8 +189,9 @@ i915_gem_shrink(struct drm_i915_private *i915,
 
 			spin_unlock_irqrestore(&i915->mm.obj_lock, flags);
 
-			if (unsafe_drop_pages(obj, shrink) &&
-			    i915_gem_object_trylock(obj)) {
+			if (unsafe_drop_pages(obj, shrink)) {
+				ww_mutex_lock_nested(&obj->base.resv->lock,
+						     SINGLE_DEPTH_NESTING);
 				__i915_gem_object_put_pages(obj);
 				if (!i915_gem_object_has_pages(obj)) {
 					try_to_writeback(obj, shrink);
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
index c1acfa875703..ecc2d3fb7df2 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
@@ -131,12 +131,10 @@ userptr_mn_invalidate_range_start(struct mmu_notifier *_mn,
 					     I915_GEM_OBJECT_UNBIND_BARRIER);
 		if (ret == 0) {
 			/* ww_mutex and mmu_notifier is fs_reclaim tainted */
-			if (i915_gem_object_trylock(obj)) {
-				ret = __i915_gem_object_put_pages(obj);
-				i915_gem_object_unlock(obj);
-			} else {
-				ret = -EAGAIN;
-			}
+			ww_mutex_lock_nested(&obj->base.resv->lock,
+					     SINGLE_DEPTH_NESTING);
+			ret = __i915_gem_object_put_pages(obj);
+			i915_gem_object_unlock(obj);
 		}
 		i915_gem_object_put(obj);
 		if (ret)
-- 
2.20.1



More information about the Intel-gfx-trybot mailing list