drm/i915: Fix context object leak for legacy contexts
authorThomas Daniel <thomas.daniel@intel.com>
Tue, 25 Nov 2014 10:39:25 +0000 (10:39 +0000)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 3 Dec 2014 08:29:41 +0000 (09:29 +0100)
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 <thomas.daniel@intel.com>
Reviewed-by: John Harrison<John.C.Harrison@Intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem.c

index 97b86a55e1388e501e76a3db4f3adae2d121d5b7..d2ba315f4c92c846f29fa7e8d00782fdb66e5b91 100644 (file)
@@ -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);