drm/ttm: convert to unified vma offset manager
[dragonfly.git] / sys / dev / drm / radeon / radeon_test.c
index f09200c..8f9e1a7 100644 (file)
@@ -75,11 +75,11 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag)
        }
        r = radeon_bo_reserve(vram_obj, false);
        if (unlikely(r != 0))
-               goto out_cleanup;
+               goto out_unref;
        r = radeon_bo_pin(vram_obj, RADEON_GEM_DOMAIN_VRAM, &vram_addr);
        if (r) {
                DRM_ERROR("Failed to pin VRAM object\n");
-               goto out_cleanup;
+               goto out_unres;
        }
        for (i = 0; i < n; i++) {
                void *gtt_map, *vram_map;
@@ -90,22 +90,22 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag)
                                     RADEON_GEM_DOMAIN_GTT, 0, NULL, gtt_obj + i);
                if (r) {
                        DRM_ERROR("Failed to create GTT object %d\n", i);
-                       goto out_cleanup;
+                       goto out_lclean;
                }
 
                r = radeon_bo_reserve(gtt_obj[i], false);
                if (unlikely(r != 0))
-                       goto out_cleanup;
+                       goto out_lclean_unref;
                r = radeon_bo_pin(gtt_obj[i], RADEON_GEM_DOMAIN_GTT, &gtt_addr);
                if (r) {
                        DRM_ERROR("Failed to pin GTT object %d\n", i);
-                       goto out_cleanup;
+                       goto out_lclean_unres;
                }
 
                r = radeon_bo_kmap(gtt_obj[i], &gtt_map);
                if (r) {
                        DRM_ERROR("Failed to map GTT object %d\n", i);
-                       goto out_cleanup;
+                       goto out_lclean_unpin;
                }
 
                for (gtt_start = gtt_map, gtt_end = (void *)((uintptr_t)gtt_map + size);
@@ -121,13 +121,13 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag)
                        r = radeon_copy_blit(rdev, gtt_addr, vram_addr, size / RADEON_GPU_PAGE_SIZE, &fence);
                if (r) {
                        DRM_ERROR("Failed GTT->VRAM copy %d\n", i);
-                       goto out_cleanup;
+                       goto out_lclean_unpin;
                }
 
                r = radeon_fence_wait(fence, false);
                if (r) {
                        DRM_ERROR("Failed to wait for GTT->VRAM fence %d\n", i);
-                       goto out_cleanup;
+                       goto out_lclean_unpin;
                }
 
                radeon_fence_unref(&fence);
@@ -135,7 +135,7 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag)
                r = radeon_bo_kmap(vram_obj, &vram_map);
                if (r) {
                        DRM_ERROR("Failed to map VRAM object after copy %d\n", i);
-                       goto out_cleanup;
+                       goto out_lclean_unpin;
                }
 
                for (gtt_start = gtt_map, gtt_end = (void *)((uintptr_t)gtt_map + size),
@@ -154,7 +154,7 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag)
                                          ((uintptr_t)vram_addr - (uintptr_t)rdev->mc.vram_start +
                                           (uintptr_t)gtt_start - (uintptr_t)gtt_map));
                                radeon_bo_kunmap(vram_obj);
-                               goto out_cleanup;
+                               goto out_lclean_unpin;
                        }
                        *vram_start = vram_start;
                }
@@ -167,13 +167,13 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag)
                        r = radeon_copy_blit(rdev, vram_addr, gtt_addr, size / RADEON_GPU_PAGE_SIZE, &fence);
                if (r) {
                        DRM_ERROR("Failed VRAM->GTT copy %d\n", i);
-                       goto out_cleanup;
+                       goto out_lclean_unpin;
                }
 
                r = radeon_fence_wait(fence, false);
                if (r) {
                        DRM_ERROR("Failed to wait for VRAM->GTT fence %d\n", i);
-                       goto out_cleanup;
+                       goto out_lclean_unpin;
                }
 
                radeon_fence_unref(&fence);
@@ -181,7 +181,7 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag)
                r = radeon_bo_kmap(gtt_obj[i], &gtt_map);
                if (r) {
                        DRM_ERROR("Failed to map GTT object after copy %d\n", i);
-                       goto out_cleanup;
+                       goto out_lclean_unpin;
                }
 
                for (gtt_start = gtt_map, gtt_end = (void *)((uintptr_t)gtt_map + size),
@@ -200,7 +200,7 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag)
                                          ((uintptr_t)gtt_addr - (uintptr_t)rdev->mc.gtt_start +
                                           (uintptr_t)vram_start - (uintptr_t)vram_map));
                                radeon_bo_kunmap(gtt_obj[i]);
-                               goto out_cleanup;
+                               goto out_lclean_unpin;
                        }
                }
 
@@ -208,28 +208,33 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag)
 
                DRM_INFO("Tested GTT->VRAM and VRAM->GTT copy for GTT offset 0x%llx\n",
                         (uintmax_t)gtt_addr - rdev->mc.gtt_start);
+               continue;
+
+out_lclean_unpin:
+               radeon_bo_unpin(gtt_obj[i]);
+out_lclean_unres:
+               radeon_bo_unreserve(gtt_obj[i]);
+out_lclean_unref:
+               radeon_bo_unref(&gtt_obj[i]);
+out_lclean:
+               for (--i; i >= 0; --i) {
+                       radeon_bo_unpin(gtt_obj[i]);
+                       radeon_bo_unreserve(gtt_obj[i]);
+                       radeon_bo_unref(&gtt_obj[i]);
+               }
+               if (fence && !IS_ERR(fence))
+                       radeon_fence_unref(&fence);
+               break;
        }
 
+       radeon_bo_unpin(vram_obj);
+out_unres:
+       radeon_bo_unreserve(vram_obj);
+out_unref:
+       radeon_bo_unref(&vram_obj);
 out_cleanup:
-       if (vram_obj) {
-               if (radeon_bo_is_reserved(vram_obj)) {
-                       radeon_bo_unpin(vram_obj);
-                       radeon_bo_unreserve(vram_obj);
-               }
-               radeon_bo_unref(&vram_obj);
-       }
-       if (gtt_obj) {
-               for (i = 0; i < n; i++) {
-                       if (gtt_obj[i]) {
-                               if (radeon_bo_is_reserved(gtt_obj[i])) {
-                                       radeon_bo_unpin(gtt_obj[i]);
-                                       radeon_bo_unreserve(gtt_obj[i]);
-                               }
-                               radeon_bo_unref(&gtt_obj[i]);
-                       }
-               }
+       if (gtt_obj)
                kfree(gtt_obj);
-       }
        if (fence) {
                radeon_fence_unref(&fence);
        }