Fences are creted/checked before the pm ref is taken, so if we jump to
pre_mutex_err we will uncorrectly call intel_runtime_pm_put.

v2: transform unwind sequence (Chris)

Fixes: fec0445caa27 (drm/i915: Support explicit fencing for execbuf)
Testcase: igt/gem_exec_params
Cc: Chris Wilson <[email protected]>
Signed-off-by: Daniele Ceraolo Spurio <[email protected]>
---
 drivers/gpu/drm/i915/i915_gem_execbuffer.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c 
b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index a40ade6..8987d38 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -1643,18 +1643,15 @@ static void eb_export_fence(struct drm_i915_gem_object 
*obj,
 
        if (args->flags & I915_EXEC_FENCE_IN) {
                in_fence = sync_file_get_fence(lower_32_bits(args->rsvd2));
-               if (!in_fence) {
-                       ret = -EINVAL;
-                       goto pre_mutex_err;
-               }
+               if (!in_fence)
+                       return -EINVAL;
        }
 
        if (args->flags & I915_EXEC_FENCE_OUT) {
                out_fence_fd = get_unused_fd_flags(O_CLOEXEC);
                if (out_fence_fd < 0) {
                        ret = out_fence_fd;
-                       out_fence_fd = -1;
-                       goto pre_mutex_err;
+                       goto err_in_fence;
                }
        }
 
@@ -1877,6 +1874,8 @@ static void eb_export_fence(struct drm_i915_gem_object 
*obj,
        intel_runtime_pm_put(dev_priv);
        if (out_fence_fd != -1)
                put_unused_fd(out_fence_fd);
+
+err_in_fence:
        dma_fence_put(in_fence);
        return ret;
 }
-- 
1.9.1

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

Reply via email to