[PATCH 6/6] nested-shrinker-ww_mutex

Chris Wilson chris at chris-wilson.co.uk
Wed Jun 24 11:12:56 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 5fe2c1dd82ee..3b1f41967462 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 5f521bf4c942..bf85f553a732 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
@@ -135,12 +135,10 @@ userptr_mn_invalidate_range_start(struct mmu_notifier *_mn,
 		ret = i915_gem_object_unbind(obj, flags);
 		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