Discard all of our batch pools under mempressure to make their pages
available to the shrinker. We will quickly reacquire them when necessary
for more GPU relocations or for the command parser.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107936
Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_gem_batch_pool.c |  7 +++++--
 drivers/gpu/drm/i915/i915_gem_shrinker.c   | 11 +++++++++++
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem_batch_pool.c 
b/drivers/gpu/drm/i915/i915_gem_batch_pool.c
index f3890b664e3f..b7727a404b46 100644
--- a/drivers/gpu/drm/i915/i915_gem_batch_pool.c
+++ b/drivers/gpu/drm/i915/i915_gem_batch_pool.c
@@ -131,10 +131,13 @@ i915_gem_batch_pool_get(struct i915_gem_batch_pool *pool,
                return obj;
 
 found:
+       list_del(&obj->batch_pool_link);
        ret = i915_gem_object_pin_pages(obj);
-       if (ret)
+       if (ret) {
+               i915_gem_object_put(obj);
                return ERR_PTR(ret);
+       }
 
-       list_move_tail(&obj->batch_pool_link, list);
+       list_add_tail(&obj->batch_pool_link, list);
        return obj;
 }
diff --git a/drivers/gpu/drm/i915/i915_gem_shrinker.c 
b/drivers/gpu/drm/i915/i915_gem_shrinker.c
index ea90d3a0d511..610a78e2f0b1 100644
--- a/drivers/gpu/drm/i915/i915_gem_shrinker.c
+++ b/drivers/gpu/drm/i915/i915_gem_shrinker.c
@@ -117,6 +117,15 @@ static bool unsafe_drop_pages(struct drm_i915_gem_object 
*obj)
        return !i915_gem_object_has_pages(obj);
 }
 
+static void shrink_caches(struct drm_i915_private *i915)
+{
+       struct intel_engine_cs *engine;
+       enum intel_engine_id id;
+
+       for_each_engine(engine, i915, id)
+               i915_gem_batch_pool_fini(&engine->batch_pool);
+}
+
 /**
  * i915_gem_shrink - Shrink buffer object caches
  * @i915: i915 device
@@ -180,6 +189,8 @@ i915_gem_shrink(struct drm_i915_private *i915,
        trace_i915_gem_shrink(i915, target, flags);
        i915_retire_requests(i915);
 
+       shrink_caches(i915);
+
        /*
         * Unbinding of objects will require HW access; Let us not wake the
         * device just to recover a little memory. If absolutely necessary,
-- 
2.19.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to