From: Christian König <christian.koe...@amd.com>

Just to be sure that fences we sync to won't be released while accessed.

Signed-off-by: Christian König <christian.koenig at amd.com>
---
 drivers/gpu/drm/radeon/radeon_sync.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon_sync.c 
b/drivers/gpu/drm/radeon/radeon_sync.c
index 02ac8a1..6fccaaf 100644
--- a/drivers/gpu/drm/radeon/radeon_sync.c
+++ b/drivers/gpu/drm/radeon/radeon_sync.c
@@ -69,11 +69,15 @@ void radeon_sync_fence(struct radeon_sync *sync,
                return;

        other = sync->sync_to[fence->ring];
-       sync->sync_to[fence->ring] = radeon_fence_later(fence, other);
+       sync->sync_to[fence->ring] = radeon_fence_ref(
+               radeon_fence_later(fence, other));
+       radeon_fence_unref(&other);

        if (fence->is_vm_update) {
                other = sync->last_vm_update;
-               sync->last_vm_update = radeon_fence_later(fence, other);
+               sync->last_vm_update = radeon_fence_ref(
+                       radeon_fence_later(fence, other));
+               radeon_fence_unref(&other);
        }
 }

@@ -217,4 +221,9 @@ void radeon_sync_free(struct radeon_device *rdev,

        for (i = 0; i < RADEON_NUM_SYNCS; ++i)
                radeon_semaphore_free(rdev, &sync->semaphores[i], fence);
+
+       for (i = 0; i < RADEON_NUM_RINGS; ++i)
+               radeon_fence_unref(&sync->sync_to[i]);
+
+       radeon_fence_unref(&sync->last_vm_update);
 }
-- 
1.9.1

Reply via email to