Let's try not to overly penalize the unlucky client by making them wait
for others to complete their work, and only apply the ratelimit if they
themselves have outstanding work. Still, we apply global reclaim to the
client (we need to scavenge some memory for it) so it doesn't got away
completely scot free.

Signed-off-by: Chris Wilson <[email protected]>
Cc: Tvrtko Ursulin <[email protected]>
Cc: Joonas Lahtinen <[email protected]>
---
 drivers/gpu/drm/i915/i915_request.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_request.c 
b/drivers/gpu/drm/i915/i915_request.c
index 588bc5a4d18b..72bcb4ca0c45 100644
--- a/drivers/gpu/drm/i915/i915_request.c
+++ b/drivers/gpu/drm/i915/i915_request.c
@@ -733,12 +733,16 @@ i915_request_alloc(struct intel_engine_cs *engine, struct 
i915_gem_context *ctx)
                              GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_NOWARN);
        if (unlikely(!rq)) {
                /* Ratelimit ourselves to prevent oom from malicious clients */
-               ret = i915_gem_wait_for_idle(i915,
-                                            I915_WAIT_LOCKED |
-                                            I915_WAIT_INTERRUPTIBLE,
-                                            1);
-               if (ret)
+               rq = i915_gem_active_raw(&ce->ring->timeline->last_request,
+                                        &i915->drm.struct_mutex);
+               if (rq && i915_request_wait(rq,
+                                           I915_WAIT_LOCKED |
+                                           I915_WAIT_INTERRUPTIBLE,
+                                           1) == -EINTR) {
+                       ret = -EINTR;
                        goto err_unreserve;
+               }
+               i915_retire_requests(i915);
 
                /*
                 * We've forced the client to stall and catch up with whatever
-- 
2.19.0

_______________________________________________
Intel-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to