From: Thomas Daniel Date: Tue, 25 Nov 2014 10:39:25 +0000 (+0000) Subject: drm/i915: Fix context object leak for legacy contexts X-Git-Tag: firefly_0821_release~176^2~2312^2~43^2~134 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0794aed3028544e10997e14aa7685ec10a5b4203;p=firefly-linux-kernel-4.4.55.git drm/i915: Fix context object leak for legacy contexts Dynamic context pinning for LRCs introduced a leak in legacy mode. Reinstate context unreference in i915_gem_free_request for legacy contexts. Leak reported by i-g-t/drv_module_reload fixed by this patch. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=86507 Signed-off-by: Thomas Daniel Reviewed-by: John Harrison Signed-off-by: Daniel Vetter --- diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 97b86a55e138..d2ba315f4c92 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -2574,11 +2574,13 @@ static void i915_gem_free_request(struct drm_i915_gem_request *request) list_del(&request->list); i915_gem_request_remove_from_client(request); - if (i915.enable_execlists && ctx) { - struct intel_engine_cs *ring = request->ring; + if (ctx) { + if (i915.enable_execlists) { + struct intel_engine_cs *ring = request->ring; - if (ctx != ring->default_context) - intel_lr_context_unpin(ring, ctx); + if (ctx != ring->default_context) + intel_lr_context_unpin(ring, ctx); + } i915_gem_context_unreference(ctx); } kfree(request);