diff mbox series

[06/11] drm/vram-helper: switch over to the new pin interface

Message ID 20200921144856.2797-7-christian.koenig@amd.com (mailing list archive)
State New, archived
Headers show
Series [01/11] drm/ttm: add ttm_bo_pin()/ttm_bo_unpin() | expand

Commit Message

Christian König Sept. 21, 2020, 2:48 p.m. UTC
Stop using TTM_PL_FLAG_NO_EVICT.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/drm_gem_vram_helper.c | 37 +++++++--------------------
 include/drm/drm_gem_vram_helper.h     |  3 ---
 2 files changed, 9 insertions(+), 31 deletions(-)

Comments

Thomas Zimmermann Sept. 22, 2020, 6:44 a.m. UTC | #1
Hi

Am 21.09.20 um 16:48 schrieb Christian König:
> Stop using TTM_PL_FLAG_NO_EVICT.
> 
> Signed-off-by: Christian König <christian.koenig@amd.com>

Acked-by: Thomas Zimmermann <tzimmermann@suse.de>

> ---
>  drivers/gpu/drm/drm_gem_vram_helper.c | 37 +++++++--------------------
>  include/drm/drm_gem_vram_helper.h     |  3 ---
>  2 files changed, 9 insertions(+), 31 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
> index 50cad0e4a92e..bd3dd17ad81d 100644
> --- a/drivers/gpu/drm/drm_gem_vram_helper.c
> +++ b/drivers/gpu/drm/drm_gem_vram_helper.c
> @@ -301,7 +301,7 @@ static u64 drm_gem_vram_pg_offset(struct drm_gem_vram_object *gbo)
>   */
>  s64 drm_gem_vram_offset(struct drm_gem_vram_object *gbo)
>  {
> -	if (WARN_ON_ONCE(!gbo->pin_count))
> +	if (WARN_ON_ONCE(!gbo->bo.pin_count))
>  		return (s64)-ENODEV;
>  	return drm_gem_vram_pg_offset(gbo) << PAGE_SHIFT;
>  }
> @@ -310,24 +310,21 @@ EXPORT_SYMBOL(drm_gem_vram_offset);
>  static int drm_gem_vram_pin_locked(struct drm_gem_vram_object *gbo,
>  				   unsigned long pl_flag)
>  {
> -	int i, ret;
>  	struct ttm_operation_ctx ctx = { false, false };
> +	int ret;
>  
> -	if (gbo->pin_count)
> +	if (gbo->bo.pin_count)
>  		goto out;
>  
>  	if (pl_flag)
>  		drm_gem_vram_placement(gbo, pl_flag);
>  
> -	for (i = 0; i < gbo->placement.num_placement; ++i)
> -		gbo->placements[i].flags |= TTM_PL_FLAG_NO_EVICT;
> -
>  	ret = ttm_bo_validate(&gbo->bo, &gbo->placement, &ctx);
>  	if (ret < 0)
>  		return ret;
>  
>  out:
> -	++gbo->pin_count;
> +	ttm_bo_pin(&gbo->bo);
>  
>  	return 0;
>  }
> @@ -369,26 +366,9 @@ int drm_gem_vram_pin(struct drm_gem_vram_object *gbo, unsigned long pl_flag)
>  }
>  EXPORT_SYMBOL(drm_gem_vram_pin);
>  
> -static int drm_gem_vram_unpin_locked(struct drm_gem_vram_object *gbo)
> +static void drm_gem_vram_unpin_locked(struct drm_gem_vram_object *gbo)
>  {
> -	int i, ret;
> -	struct ttm_operation_ctx ctx = { false, false };
> -
> -	if (WARN_ON_ONCE(!gbo->pin_count))
> -		return 0;
> -
> -	--gbo->pin_count;
> -	if (gbo->pin_count)
> -		return 0;
> -
> -	for (i = 0; i < gbo->placement.num_placement ; ++i)
> -		gbo->placements[i].flags &= ~TTM_PL_FLAG_NO_EVICT;
> -
> -	ret = ttm_bo_validate(&gbo->bo, &gbo->placement, &ctx);
> -	if (ret < 0)
> -		return ret;
> -
> -	return 0;
> +	ttm_bo_unpin(&gbo->bo);
>  }
>  
>  /**
> @@ -406,10 +386,11 @@ int drm_gem_vram_unpin(struct drm_gem_vram_object *gbo)
>  	ret = ttm_bo_reserve(&gbo->bo, true, false, NULL);
>  	if (ret)
>  		return ret;
> -	ret = drm_gem_vram_unpin_locked(gbo);
> +
> +	drm_gem_vram_unpin_locked(gbo);
>  	ttm_bo_unreserve(&gbo->bo);
>  
> -	return ret;
> +	return 0;
>  }
>  EXPORT_SYMBOL(drm_gem_vram_unpin);
>  
> diff --git a/include/drm/drm_gem_vram_helper.h b/include/drm/drm_gem_vram_helper.h
> index 62cc6e6c3a4f..128f88174d32 100644
> --- a/include/drm/drm_gem_vram_helper.h
> +++ b/include/drm/drm_gem_vram_helper.h
> @@ -35,7 +35,6 @@ struct vm_area_struct;
>   * @placement:	TTM placement information. Supported placements are \
>  	%TTM_PL_VRAM and %TTM_PL_SYSTEM
>   * @placements:	TTM placement information.
> - * @pin_count:	Pin counter
>   *
>   * The type struct drm_gem_vram_object represents a GEM object that is
>   * backed by VRAM. It can be used for simple framebuffer devices with
> @@ -64,8 +63,6 @@ struct drm_gem_vram_object {
>  	/* Supported placements are %TTM_PL_VRAM and %TTM_PL_SYSTEM */
>  	struct ttm_placement placement;
>  	struct ttm_place placements[2];
> -
> -	int pin_count;
>  };
>  
>  /**
>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
index 50cad0e4a92e..bd3dd17ad81d 100644
--- a/drivers/gpu/drm/drm_gem_vram_helper.c
+++ b/drivers/gpu/drm/drm_gem_vram_helper.c
@@ -301,7 +301,7 @@  static u64 drm_gem_vram_pg_offset(struct drm_gem_vram_object *gbo)
  */
 s64 drm_gem_vram_offset(struct drm_gem_vram_object *gbo)
 {
-	if (WARN_ON_ONCE(!gbo->pin_count))
+	if (WARN_ON_ONCE(!gbo->bo.pin_count))
 		return (s64)-ENODEV;
 	return drm_gem_vram_pg_offset(gbo) << PAGE_SHIFT;
 }
@@ -310,24 +310,21 @@  EXPORT_SYMBOL(drm_gem_vram_offset);
 static int drm_gem_vram_pin_locked(struct drm_gem_vram_object *gbo,
 				   unsigned long pl_flag)
 {
-	int i, ret;
 	struct ttm_operation_ctx ctx = { false, false };
+	int ret;
 
-	if (gbo->pin_count)
+	if (gbo->bo.pin_count)
 		goto out;
 
 	if (pl_flag)
 		drm_gem_vram_placement(gbo, pl_flag);
 
-	for (i = 0; i < gbo->placement.num_placement; ++i)
-		gbo->placements[i].flags |= TTM_PL_FLAG_NO_EVICT;
-
 	ret = ttm_bo_validate(&gbo->bo, &gbo->placement, &ctx);
 	if (ret < 0)
 		return ret;
 
 out:
-	++gbo->pin_count;
+	ttm_bo_pin(&gbo->bo);
 
 	return 0;
 }
@@ -369,26 +366,9 @@  int drm_gem_vram_pin(struct drm_gem_vram_object *gbo, unsigned long pl_flag)
 }
 EXPORT_SYMBOL(drm_gem_vram_pin);
 
-static int drm_gem_vram_unpin_locked(struct drm_gem_vram_object *gbo)
+static void drm_gem_vram_unpin_locked(struct drm_gem_vram_object *gbo)
 {
-	int i, ret;
-	struct ttm_operation_ctx ctx = { false, false };
-
-	if (WARN_ON_ONCE(!gbo->pin_count))
-		return 0;
-
-	--gbo->pin_count;
-	if (gbo->pin_count)
-		return 0;
-
-	for (i = 0; i < gbo->placement.num_placement ; ++i)
-		gbo->placements[i].flags &= ~TTM_PL_FLAG_NO_EVICT;
-
-	ret = ttm_bo_validate(&gbo->bo, &gbo->placement, &ctx);
-	if (ret < 0)
-		return ret;
-
-	return 0;
+	ttm_bo_unpin(&gbo->bo);
 }
 
 /**
@@ -406,10 +386,11 @@  int drm_gem_vram_unpin(struct drm_gem_vram_object *gbo)
 	ret = ttm_bo_reserve(&gbo->bo, true, false, NULL);
 	if (ret)
 		return ret;
-	ret = drm_gem_vram_unpin_locked(gbo);
+
+	drm_gem_vram_unpin_locked(gbo);
 	ttm_bo_unreserve(&gbo->bo);
 
-	return ret;
+	return 0;
 }
 EXPORT_SYMBOL(drm_gem_vram_unpin);
 
diff --git a/include/drm/drm_gem_vram_helper.h b/include/drm/drm_gem_vram_helper.h
index 62cc6e6c3a4f..128f88174d32 100644
--- a/include/drm/drm_gem_vram_helper.h
+++ b/include/drm/drm_gem_vram_helper.h
@@ -35,7 +35,6 @@  struct vm_area_struct;
  * @placement:	TTM placement information. Supported placements are \
 	%TTM_PL_VRAM and %TTM_PL_SYSTEM
  * @placements:	TTM placement information.
- * @pin_count:	Pin counter
  *
  * The type struct drm_gem_vram_object represents a GEM object that is
  * backed by VRAM. It can be used for simple framebuffer devices with
@@ -64,8 +63,6 @@  struct drm_gem_vram_object {
 	/* Supported placements are %TTM_PL_VRAM and %TTM_PL_SYSTEM */
 	struct ttm_placement placement;
 	struct ttm_place placements[2];
-
-	int pin_count;
 };
 
 /**