summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2020-12-03 19:14:02 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2021-02-01 10:06:15 +0000
commit7dba1da693e219daa598d09290fa746cf617b1a4 (patch)
tree6dad443075c2e7cb7dbdc24dc93026785e039ccb
parent014c42f555718d0a4b6e13970f5a3ce27c864651 (diff)
-rw-r--r--drivers/gpu/drm/i915/gem/i915_gem_object_blt.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object_blt.c b/drivers/gpu/drm/i915/gem/i915_gem_object_blt.c
index a9af397b7d71..4217727ff14b 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_object_blt.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_object_blt.c
@@ -108,6 +108,14 @@ i915_gem_object_active_pin(struct drm_i915_gem_object *obj)
return ref;
}
+static void
+late_active_set_exclusive(struct i915_active *ref, struct dma_fence *fence)
+{
+ fence = i915_active_set_exclusive(ref, fence);
+ if (fence)
+ dma_fence_put(fence);
+}
+
static unsigned long
i915_gem_object_migrate_flags(struct drm_i915_gem_object *obj)
{
@@ -153,7 +161,7 @@ int i915_gem_object_fill_blt(struct drm_i915_gem_object *obj,
i915_gem_object_migrate_flags(obj),
value, &rq);
if (rq) {
- i915_active_set_exclusive(ref, &rq->fence);
+ late_active_set_exclusive(ref, &rq->fence);
dma_resv_add_excl_fence(obj->base.resv, &rq->fence);
i915_request_put(rq);
}
@@ -228,8 +236,8 @@ retry:
i915_gem_object_migrate_flags(dst),
&rq);
if (rq) {
- i915_active_set_exclusive(spin, &rq->fence);
- i915_active_set_exclusive(dpin, &rq->fence);
+ late_active_set_exclusive(spin, &rq->fence);
+ late_active_set_exclusive(dpin, &rq->fence);
dma_resv_add_shared_fence(src->base.resv, &rq->fence);
dma_resv_add_excl_fence(dst->base.resv, &rq->fence);