drm/i915: don't leak the pin_map on error
authorMatthew Auld <matthew.auld@intel.com>
Thu, 1 Mar 2018 11:46:39 +0000 (11:46 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 8 May 2018 12:16:20 +0000 (13:16 +0100)
Add some onion to populate_lr_context.

v2: prefer err_unpin_ctx
    drop the fixes tag, worst case we just spew a warn before everything
    is cleaned up and balance is restored

Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20180301114639.510-1-matthew.auld@intel.com
drivers/gpu/drm/i915/intel_lrc.c

index 046adf397a717f91d88662ba1c53f1a4c80b54c2..da08225fc4824ba789e16c1402378a92e343c818 100644 (file)
@@ -2574,8 +2574,10 @@ populate_lr_context(struct i915_gem_context *ctx,
 
                defaults = i915_gem_object_pin_map(engine->default_state,
                                                   I915_MAP_WB);
-               if (IS_ERR(defaults))
-                       return PTR_ERR(defaults);
+               if (IS_ERR(defaults)) {
+                       ret = PTR_ERR(defaults);
+                       goto err_unpin_ctx;
+               }
 
                memcpy(vaddr + start, defaults + start, engine->context_size);
                i915_gem_object_unpin_map(engine->default_state);
@@ -2593,9 +2595,9 @@ populate_lr_context(struct i915_gem_context *ctx,
                        _MASKED_BIT_ENABLE(CTX_CTRL_ENGINE_CTX_RESTORE_INHIBIT |
                                           CTX_CTRL_ENGINE_CTX_SAVE_INHIBIT);
 
+err_unpin_ctx:
        i915_gem_object_unpin_map(ctx_obj);
-
-       return 0;
+       return ret;
 }
 
 static int execlists_context_deferred_alloc(struct i915_gem_context *ctx,