[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