Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=59771
Signed-off-by: Chris Wilson <ch...@chris-wilson.co.uk>
---
 intel/intel_bufmgr_gem.c |   13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c
index 3cf8503..6ebeec9 100644
--- a/intel/intel_bufmgr_gem.c
+++ b/intel/intel_bufmgr_gem.c
@@ -1746,6 +1746,7 @@ drm_intel_gem_bo_clear_relocs(drm_intel_bo *bo, int start)
        drm_intel_bo_gem *bo_gem = (drm_intel_bo_gem *) bo;
        int i;
        struct timespec time;
+       int fence_count;
 
        clock_gettime(CLOCK_MONOTONIC, &time);
 
@@ -1753,13 +1754,19 @@ drm_intel_gem_bo_clear_relocs(drm_intel_bo *bo, int 
start)
        /* Unreference the cleared target buffers */
        for (i = start; i < bo_gem->reloc_count; i++) {
                drm_intel_bo_gem *target_bo_gem = (drm_intel_bo_gem *) 
bo_gem->reloc_target_info[i].bo;
-               if (&target_bo_gem->bo != bo) {
-                       bo_gem->reloc_tree_fences -= 
target_bo_gem->reloc_tree_fences;
+               if (&target_bo_gem->bo != bo)
                        
drm_intel_gem_bo_unreference_locked_timed(&target_bo_gem->bo,
                                                                  time.tv_sec);
-               }
        }
        bo_gem->reloc_count = start;
+
+       fence_count = 0;
+       for (i = 0; i < bo_gem->reloc_count; i++) {
+               drm_intel_bo_gem *target_bo_gem = (drm_intel_bo_gem *) 
bo_gem->reloc_target_info[i].bo;
+               if (&target_bo_gem->bo != bo)
+                       fence_count += target_bo_gem->reloc_tree_fences;
+       }
+       bo_gem->reloc_tree_fences = fence_count;
 }
 
 /**
-- 
1.7.10.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to