From 0987dac19465ebab90832ae1b858491b52592165 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 20 Jul 2016 09:21:09 +0100 Subject: [PATCH] drm/i915: Retire oldest completed request before allocating next In order to keep the memory allocated for requests reasonably tight, try to reuse the oldest request (so long as it is completed and has no external references) for the next allocation. v2: Throw in a comment to hopefully make sure no one mistakes the optimistic retirement of the oldest request for simply stealing it. Signed-off-by: Chris Wilson Reviewed-by: Mika Kuoppala Link: http://patchwork.freedesktop.org/patch/msgid/1469002875-2335-2-git-send-email-chris@chris-wilson.co.uk --- drivers/gpu/drm/i915/i915_gem_request.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c index 9e9aa6b725f75..5cbb11ece60a0 100644 --- a/drivers/gpu/drm/i915/i915_gem_request.c +++ b/drivers/gpu/drm/i915/i915_gem_request.c @@ -226,6 +226,14 @@ __i915_gem_request_alloc(struct intel_engine_cs *engine, if (ret) return ret; + /* Move the oldest request to the slab-cache (if not in use!) */ + if (!list_empty(&engine->request_list)) { + req = list_first_entry(&engine->request_list, + typeof(*req), list); + if (i915_gem_request_completed(req)) + i915_gem_request_retire(req); + } + req = kmem_cache_zalloc(dev_priv->requests, GFP_KERNEL); if (!req) return -ENOMEM; -- 2.39.5