drm/radeon: get rid of ttm_bo_is_reserved usage
authorMaarten Lankhorst <m.b.lankhorst@gmail.com>
Thu, 27 Jun 2013 11:48:26 +0000 (13:48 +0200)
committerDave Airlie <airlied@redhat.com>
Fri, 28 Jun 2013 02:04:12 +0000 (12:04 +1000)
Try to use lockdep_assert_held or other alternatives where possible.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Reviewed-by: Jerome Glisse <jglisse@redhat.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
drivers/gpu/drm/radeon/radeon_object.c
drivers/gpu/drm/radeon/radeon_object.h
drivers/gpu/drm/radeon/radeon_test.c

index d850dc66f4dac7072749f38640bcca9516405330..0219d263e2df81c4427a3cc94c429b27b7853f72 100644 (file)
@@ -400,7 +400,7 @@ int radeon_bo_get_surface_reg(struct radeon_bo *bo)
        int steal;
        int i;
 
-       BUG_ON(!radeon_bo_is_reserved(bo));
+       lockdep_assert_held(&bo->tbo.resv->lock.base);
 
        if (!bo->tiling_flags)
                return 0;
@@ -526,7 +526,8 @@ void radeon_bo_get_tiling_flags(struct radeon_bo *bo,
                                uint32_t *tiling_flags,
                                uint32_t *pitch)
 {
-       BUG_ON(!radeon_bo_is_reserved(bo));
+       lockdep_assert_held(&bo->tbo.resv->lock.base);
+
        if (tiling_flags)
                *tiling_flags = bo->tiling_flags;
        if (pitch)
@@ -536,7 +537,8 @@ void radeon_bo_get_tiling_flags(struct radeon_bo *bo,
 int radeon_bo_check_tiling(struct radeon_bo *bo, bool has_moved,
                                bool force_drop)
 {
-       BUG_ON(!radeon_bo_is_reserved(bo) && !force_drop);
+       if (!force_drop)
+               lockdep_assert_held(&bo->tbo.resv->lock.base);
 
        if (!(bo->tiling_flags & RADEON_TILING_SURFACE))
                return 0;
index 456ad6bc92afb343bd5ba7ee0cd176009195fbff..91519a5622b4358b6fa82e24698427bb0278a554 100644 (file)
@@ -98,11 +98,6 @@ static inline unsigned long radeon_bo_size(struct radeon_bo *bo)
        return bo->tbo.num_pages << PAGE_SHIFT;
 }
 
-static inline bool radeon_bo_is_reserved(struct radeon_bo *bo)
-{
-       return ttm_bo_is_reserved(&bo->tbo);
-}
-
 static inline unsigned radeon_bo_ngpu_pages(struct radeon_bo *bo)
 {
        return (bo->tbo.num_pages << PAGE_SHIFT) / RADEON_GPU_PAGE_SIZE;
index bbed4af8d0bc587e0d02860b35334391443276b3..f4d6bcee9006451ca377b94ece370806a8f89d2d 100644 (file)
@@ -35,7 +35,6 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag)
 {
        struct radeon_bo *vram_obj = NULL;
        struct radeon_bo **gtt_obj = NULL;
-       struct radeon_fence *fence = NULL;
        uint64_t gtt_addr, vram_addr;
        unsigned i, n, size;
        int r, ring;
@@ -81,37 +80,38 @@ 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;
                void **gtt_start, **gtt_end;
                void **vram_start, **vram_end;
+               struct radeon_fence *fence = NULL;
 
                r = radeon_bo_create(rdev, size, PAGE_SIZE, true,
                                     RADEON_GEM_DOMAIN_GTT, 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 = gtt_map + size;
@@ -127,13 +127,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);
@@ -141,7 +141,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 = gtt_map + size,
@@ -160,7 +160,7 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag)
                                          (vram_addr - rdev->mc.vram_start +
                                           (void*)gtt_start - gtt_map));
                                radeon_bo_kunmap(vram_obj);
-                               goto out_cleanup;
+                               goto out_lclean_unpin;
                        }
                        *vram_start = vram_start;
                }
@@ -173,13 +173,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);
@@ -187,7 +187,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 = gtt_map + size,
@@ -206,7 +206,7 @@ static void radeon_do_test_moves(struct radeon_device *rdev, int flag)
                                          (gtt_addr - rdev->mc.gtt_start +
                                           (void*)vram_start - vram_map));
                                radeon_bo_kunmap(gtt_obj[i]);
-                               goto out_cleanup;
+                               goto out_lclean_unpin;
                        }
                }
 
@@ -214,31 +214,32 @@ 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",
                         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)
+                       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]);
-                       }
-               }
-               kfree(gtt_obj);
-       }
-       if (fence) {
-               radeon_fence_unref(&fence);
-       }
+       kfree(gtt_obj);
        if (r) {
                printk(KERN_WARNING "Error while testing BO move.\n");
        }