diff mbox series

[7/7] drm/ttm: make common function for wait/free node path.

Message ID 20200917043040.146575-8-airlied@gmail.com (mailing list archive)
State New, archived
Headers show
Series drm/ttm: bind/unbind + cleanups | expand

Commit Message

Dave Airlie Sept. 17, 2020, 4:30 a.m. UTC
From: Dave Airlie <airlied@redhat.com>

The pipeline and accel cleansups has similiar paths here.

Signed-off-by: Dave Airlie <airlied@redhat.com>
---
 drivers/gpu/drm/ttm/ttm_bo_util.c | 38 ++++++++++++++++---------------
 1 file changed, 20 insertions(+), 18 deletions(-)

Comments

Christian König Sept. 17, 2020, 7:57 a.m. UTC | #1
Am 17.09.20 um 06:30 schrieb Dave Airlie:
> From: Dave Airlie <airlied@redhat.com>
>
> The pipeline and accel cleansups has similiar paths here.
>
> Signed-off-by: Dave Airlie <airlied@redhat.com>

Reviewed-by: Christian König <christian.koenig@amd.com>

> ---
>   drivers/gpu/drm/ttm/ttm_bo_util.c | 38 ++++++++++++++++---------------
>   1 file changed, 20 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
> index 3c16e303d2e2..502d334786d2 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
> @@ -526,6 +526,20 @@ void ttm_bo_kunmap(struct ttm_bo_kmap_obj *map)
>   }
>   EXPORT_SYMBOL(ttm_bo_kunmap);
>   
> +static int ttm_bo_wait_free_node(struct ttm_buffer_object *bo,
> +				 bool dst_use_tt)
> +{
> +	int ret;
> +	ret = ttm_bo_wait(bo, false, false);
> +	if (ret)
> +		return ret;
> +
> +	if (!dst_use_tt)
> +		ttm_bo_tt_destroy(bo);
> +	ttm_bo_free_old_node(bo);
> +	return 0;
> +}
> +
>   static int ttm_bo_move_to_ghost(struct ttm_buffer_object *bo,
>   				struct dma_fence *fence,
>   				bool dst_use_tt)
> @@ -577,19 +591,12 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
>   	int ret;
>   
>   	dma_resv_add_excl_fence(bo->base.resv, fence);
> -	if (evict) {
> -		ret = ttm_bo_wait(bo, false, false);
> -		if (ret)
> -			return ret;
> -
> -		if (!man->use_tt)
> -			ttm_bo_tt_destroy(bo);
> -		ttm_bo_free_old_node(bo);
> -	} else {
> +	if (evict)
> +		ret = ttm_bo_wait_free_node(bo, man->use_tt);
> +	else
>   		ret = ttm_bo_move_to_ghost(bo, fence, man->use_tt);
> -		if (ret)
> -			return ret;
> -	}
> +	if (ret)
> +		return ret;
>   
>   	ttm_bo_assign_mem(bo, new_mem);
>   
> @@ -639,14 +646,9 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
>   		 *
>   		 * Should never happen in pratice.
>   		 */
> -
> -		ret = ttm_bo_wait(bo, false, false);
> +		ret = ttm_bo_wait_free_node(bo, to->use_tt);
>   		if (ret)
>   			return ret;
> -
> -		if (!to->use_tt)
> -			ttm_bo_tt_destroy(bo);
> -		ttm_bo_free_old_node(bo);
>   	}
>   
>   	ttm_bo_assign_mem(bo, new_mem);
diff mbox series

Patch

diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index 3c16e303d2e2..502d334786d2 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -526,6 +526,20 @@  void ttm_bo_kunmap(struct ttm_bo_kmap_obj *map)
 }
 EXPORT_SYMBOL(ttm_bo_kunmap);
 
+static int ttm_bo_wait_free_node(struct ttm_buffer_object *bo,
+				 bool dst_use_tt)
+{
+	int ret;
+	ret = ttm_bo_wait(bo, false, false);
+	if (ret)
+		return ret;
+
+	if (!dst_use_tt)
+		ttm_bo_tt_destroy(bo);
+	ttm_bo_free_old_node(bo);
+	return 0;
+}
+
 static int ttm_bo_move_to_ghost(struct ttm_buffer_object *bo,
 				struct dma_fence *fence,
 				bool dst_use_tt)
@@ -577,19 +591,12 @@  int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
 	int ret;
 
 	dma_resv_add_excl_fence(bo->base.resv, fence);
-	if (evict) {
-		ret = ttm_bo_wait(bo, false, false);
-		if (ret)
-			return ret;
-
-		if (!man->use_tt)
-			ttm_bo_tt_destroy(bo);
-		ttm_bo_free_old_node(bo);
-	} else {
+	if (evict)
+		ret = ttm_bo_wait_free_node(bo, man->use_tt);
+	else
 		ret = ttm_bo_move_to_ghost(bo, fence, man->use_tt);
-		if (ret)
-			return ret;
-	}
+	if (ret)
+		return ret;
 
 	ttm_bo_assign_mem(bo, new_mem);
 
@@ -639,14 +646,9 @@  int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
 		 *
 		 * Should never happen in pratice.
 		 */
-
-		ret = ttm_bo_wait(bo, false, false);
+		ret = ttm_bo_wait_free_node(bo, to->use_tt);
 		if (ret)
 			return ret;
-
-		if (!to->use_tt)
-			ttm_bo_tt_destroy(bo);
-		ttm_bo_free_old_node(bo);
 	}
 
 	ttm_bo_assign_mem(bo, new_mem);