diff mbox

[WW,11/13] drm/radeon: get rid of ttm_bo_is_reserved usage

Message ID 1372333708-29884-12-git-send-email-maarten.lankhorst@canonical.com (mailing list archive)
State Accepted
Headers show

Commit Message

Maarten Lankhorst June 27, 2013, 11:48 a.m. UTC
Try to use lockdep_assert_held or other alternatives where possible.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
---
 drivers/gpu/drm/radeon/radeon_object.c |  8 ++--
 drivers/gpu/drm/radeon/radeon_object.h |  5 ---
 drivers/gpu/drm/radeon/radeon_test.c   | 75 +++++++++++++++++-----------------
 3 files changed, 43 insertions(+), 45 deletions(-)

Comments

Jerome Glisse June 27, 2013, 10:05 p.m. UTC | #1
On Thu, Jun 27, 2013 at 01:48:26PM +0200, Maarten Lankhorst wrote:
> 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>

> ---
>  drivers/gpu/drm/radeon/radeon_object.c |  8 ++--
>  drivers/gpu/drm/radeon/radeon_object.h |  5 ---
>  drivers/gpu/drm/radeon/radeon_test.c   | 75 +++++++++++++++++-----------------
>  3 files changed, 43 insertions(+), 45 deletions(-)
> 
> diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
> index d850dc6..0219d26 100644
> --- a/drivers/gpu/drm/radeon/radeon_object.c
> +++ b/drivers/gpu/drm/radeon/radeon_object.c
> @@ -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;
> diff --git a/drivers/gpu/drm/radeon/radeon_object.h b/drivers/gpu/drm/radeon/radeon_object.h
> index 456ad6b..91519a5 100644
> --- a/drivers/gpu/drm/radeon/radeon_object.h
> +++ b/drivers/gpu/drm/radeon/radeon_object.h
> @@ -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;
> diff --git a/drivers/gpu/drm/radeon/radeon_test.c b/drivers/gpu/drm/radeon/radeon_test.c
> index bbed4af..f4d6bce 100644
> --- a/drivers/gpu/drm/radeon/radeon_test.c
> +++ b/drivers/gpu/drm/radeon/radeon_test.c
> @@ -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");
>  	}
> -- 
> 1.8.3.1
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
diff mbox

Patch

diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
index d850dc6..0219d26 100644
--- a/drivers/gpu/drm/radeon/radeon_object.c
+++ b/drivers/gpu/drm/radeon/radeon_object.c
@@ -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;
diff --git a/drivers/gpu/drm/radeon/radeon_object.h b/drivers/gpu/drm/radeon/radeon_object.h
index 456ad6b..91519a5 100644
--- a/drivers/gpu/drm/radeon/radeon_object.h
+++ b/drivers/gpu/drm/radeon/radeon_object.h
@@ -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;
diff --git a/drivers/gpu/drm/radeon/radeon_test.c b/drivers/gpu/drm/radeon/radeon_test.c
index bbed4af..f4d6bce 100644
--- a/drivers/gpu/drm/radeon/radeon_test.c
+++ b/drivers/gpu/drm/radeon/radeon_test.c
@@ -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");
 	}