diff mbox series

[7/7] drm/ttm: move last binding into the drivers.

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

Commit Message

Dave Airlie Oct. 20, 2020, 1:03 a.m. UTC
From: Dave Airlie <airlied@redhat.com>

This moves the call to tt binding into the driver move,
and drops the driver callback.

Signed-off-by: Dave Airlie <airlied@redhat.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c    |  7 ++++++-
 drivers/gpu/drm/nouveau/nouveau_bo.c       |  7 ++++++-
 drivers/gpu/drm/qxl/qxl_ttm.c              | 14 --------------
 drivers/gpu/drm/radeon/radeon_ttm.c        |  6 +++++-
 drivers/gpu/drm/ttm/ttm_bo.c               |  4 ----
 drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c |  7 ++++++-
 include/drm/ttm/ttm_bo_driver.h            | 14 --------------
 7 files changed, 23 insertions(+), 36 deletions(-)

Comments

Christian König Oct. 20, 2020, 12:16 p.m. UTC | #1
Am 20.10.20 um 03:03 schrieb Dave Airlie:
> From: Dave Airlie <airlied@redhat.com>
>
> This moves the call to tt binding into the driver move,
> and drops the driver callback.
>
> Signed-off-by: Dave Airlie <airlied@redhat.com>

amdgpu should now get some cleanup, but that is certainly not topic of 
this patch.

Really nice work, patch is Reviewed-by: Christian König 
<christian.koenig@amd.com>

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c    |  7 ++++++-
>   drivers/gpu/drm/nouveau/nouveau_bo.c       |  7 ++++++-
>   drivers/gpu/drm/qxl/qxl_ttm.c              | 14 --------------
>   drivers/gpu/drm/radeon/radeon_ttm.c        |  6 +++++-
>   drivers/gpu/drm/ttm/ttm_bo.c               |  4 ----
>   drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c |  7 ++++++-
>   include/drm/ttm/ttm_bo_driver.h            | 14 --------------
>   7 files changed, 23 insertions(+), 36 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index 9aba34b57e60..d1d1bd656153 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -666,6 +666,12 @@ static int amdgpu_bo_move(struct ttm_buffer_object *bo, bool evict,
>   	struct ttm_resource *old_mem = &bo->mem;
>   	int r;
>   
> +	if (new_mem->mem_type == TTM_PL_TT) {
> +		r = amdgpu_ttm_backend_bind(bo->bdev, bo->ttm, new_mem);
> +		if (r)
> +			return r;
> +	}
> +
>   	amdgpu_bo_move_notify(bo, evict, new_mem);
>   
>   	/* Can't move a pinned BO */
> @@ -1728,7 +1734,6 @@ static struct ttm_bo_driver amdgpu_bo_driver = {
>   	.ttm_tt_create = &amdgpu_ttm_tt_create,
>   	.ttm_tt_populate = &amdgpu_ttm_tt_populate,
>   	.ttm_tt_unpopulate = &amdgpu_ttm_tt_unpopulate,
> -	.ttm_tt_bind = &amdgpu_ttm_backend_bind,
>   	.ttm_tt_destroy = &amdgpu_ttm_backend_destroy,
>   	.eviction_valuable = amdgpu_ttm_bo_eviction_valuable,
>   	.evict_flags = &amdgpu_evict_flags,
> diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
> index ad0493c5103b..a69bd4098984 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
> @@ -1032,6 +1032,12 @@ nouveau_bo_move(struct ttm_buffer_object *bo, bool evict,
>   	struct nouveau_drm_tile *new_tile = NULL;
>   	int ret = 0;
>   
> +	if (new_reg->mem_type == TTM_PL_TT) {
> +		ret = nouveau_ttm_tt_bind(bo->bdev, bo->ttm, new_reg);
> +		if (ret)
> +			return ret;
> +	}
> +
>   	nouveau_bo_move_ntfy(bo, evict, new_reg);
>   	ret = ttm_bo_wait_ctx(bo, ctx);
>   	if (ret)
> @@ -1399,7 +1405,6 @@ struct ttm_bo_driver nouveau_bo_driver = {
>   	.ttm_tt_create = &nouveau_ttm_tt_create,
>   	.ttm_tt_populate = &nouveau_ttm_tt_populate,
>   	.ttm_tt_unpopulate = &nouveau_ttm_tt_unpopulate,
> -	.ttm_tt_bind = &nouveau_ttm_tt_bind,
>   	.ttm_tt_destroy = &nouveau_ttm_tt_destroy,
>   	.eviction_valuable = ttm_bo_eviction_valuable,
>   	.evict_flags = nouveau_bo_evict_flags,
> diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
> index a6149e3cc3d2..1cc3c14bc684 100644
> --- a/drivers/gpu/drm/qxl/qxl_ttm.c
> +++ b/drivers/gpu/drm/qxl/qxl_ttm.c
> @@ -100,19 +100,6 @@ int qxl_ttm_io_mem_reserve(struct ttm_bo_device *bdev,
>   /*
>    * TTM backend functions.
>    */
> -
> -static int qxl_ttm_backend_bind(struct ttm_bo_device *bdev,
> -				struct ttm_tt *ttm,
> -				struct ttm_resource *bo_mem)
> -{
> -	if (!ttm->num_pages) {
> -		WARN(1, "nothing to bind %lu pages for mreg %p back %p!\n",
> -		     ttm->num_pages, bo_mem, ttm);
> -	}
> -	/* Not implemented */
> -	return -1;
> -}
> -
>   static void qxl_ttm_backend_destroy(struct ttm_bo_device *bdev,
>   				    struct ttm_tt *ttm)
>   {
> @@ -181,7 +168,6 @@ static int qxl_bo_move(struct ttm_buffer_object *bo, bool evict,
>   
>   static struct ttm_bo_driver qxl_bo_driver = {
>   	.ttm_tt_create = &qxl_ttm_tt_create,
> -	.ttm_tt_bind = &qxl_ttm_backend_bind,
>   	.ttm_tt_destroy = &qxl_ttm_backend_destroy,
>   	.eviction_valuable = ttm_bo_eviction_valuable,
>   	.evict_flags = &qxl_evict_flags,
> diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
> index e427194b0b50..ac916fdd54d1 100644
> --- a/drivers/gpu/drm/radeon/radeon_ttm.c
> +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
> @@ -311,6 +311,11 @@ static int radeon_bo_move(struct ttm_buffer_object *bo, bool evict,
>   	struct ttm_resource *old_mem = &bo->mem;
>   	int r;
>   
> +	if (new_mem->mem_type == TTM_PL_TT) {
> +		r = radeon_ttm_tt_bind(bo->bdev, bo->ttm, new_mem);
> +		if (r)
> +			return r;
> +	}
>   	radeon_bo_move_notify(bo, evict, new_mem);
>   
>   	r = ttm_bo_wait_ctx(bo, ctx);
> @@ -823,7 +828,6 @@ static struct ttm_bo_driver radeon_bo_driver = {
>   	.ttm_tt_create = &radeon_ttm_tt_create,
>   	.ttm_tt_populate = &radeon_ttm_tt_populate,
>   	.ttm_tt_unpopulate = &radeon_ttm_tt_unpopulate,
> -	.ttm_tt_bind = &radeon_ttm_tt_bind,
>   	.ttm_tt_destroy = &radeon_ttm_tt_destroy,
>   	.eviction_valuable = ttm_bo_eviction_valuable,
>   	.evict_flags = &radeon_evict_flags,
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index e8ac3bc45d95..4b7fdb49df52 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -256,10 +256,6 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
>   			ret = ttm_tt_populate(bo->bdev, bo->ttm, ctx);
>   			if (ret)
>   				goto out_err;
> -
> -			ret = bdev->driver->ttm_tt_bind(bo->bdev, bo->ttm, mem);
> -			if (ret)
> -				goto out_err;
>   		}
>   	}
>   
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> index fd82c9ba2d77..de25cf016be2 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> @@ -737,6 +737,12 @@ static int vmw_move(struct ttm_buffer_object *bo,
>   	struct ttm_resource_manager *new_man = ttm_manager_type(bo->bdev, new_mem->mem_type);
>   	int ret;
>   
> +	if (new_man->use_tt && new_mem->mem_type != TTM_PL_SYSTEM) {
> +		ret = vmw_ttm_bind(bo->bdev, bo->ttm, new_mem);
> +		if (ret)
> +			return ret;
> +	}
> +
>   	vmw_move_notify(bo, evict, new_mem);
>   
>   	if (old_man->use_tt && new_man->use_tt) {
> @@ -769,7 +775,6 @@ struct ttm_bo_driver vmw_bo_driver = {
>   	.ttm_tt_create = &vmw_ttm_tt_create,
>   	.ttm_tt_populate = &vmw_ttm_populate,
>   	.ttm_tt_unpopulate = &vmw_ttm_unpopulate,
> -	.ttm_tt_bind = &vmw_ttm_bind,
>   	.ttm_tt_destroy = &vmw_ttm_destroy,
>   	.eviction_valuable = ttm_bo_eviction_valuable,
>   	.evict_flags = vmw_evict_flags,
> diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
> index 0c4efc169f46..72f106b335e9 100644
> --- a/include/drm/ttm/ttm_bo_driver.h
> +++ b/include/drm/ttm/ttm_bo_driver.h
> @@ -90,20 +90,6 @@ struct ttm_bo_driver {
>   	 */
>   	void (*ttm_tt_unpopulate)(struct ttm_bo_device *bdev, struct ttm_tt *ttm);
>   
> -	/**
> -	 * ttm_tt_bind
> -	 *
> -	 * @bdev: Pointer to a ttm device
> -	 * @ttm: Pointer to a struct ttm_tt.
> -	 * @bo_mem: Pointer to a struct ttm_resource describing the
> -	 * memory type and location for binding.
> -	 *
> -	 * Bind the backend pages into the aperture in the location
> -	 * indicated by @bo_mem. This function should be able to handle
> -	 * differences between aperture and system page sizes.
> -	 */
> -	int (*ttm_tt_bind)(struct ttm_bo_device *bdev, struct ttm_tt *ttm, struct ttm_resource *bo_mem);
> -
>   	/**
>   	 * ttm_tt_destroy
>   	 *
diff mbox series

Patch

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 9aba34b57e60..d1d1bd656153 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -666,6 +666,12 @@  static int amdgpu_bo_move(struct ttm_buffer_object *bo, bool evict,
 	struct ttm_resource *old_mem = &bo->mem;
 	int r;
 
+	if (new_mem->mem_type == TTM_PL_TT) {
+		r = amdgpu_ttm_backend_bind(bo->bdev, bo->ttm, new_mem);
+		if (r)
+			return r;
+	}
+
 	amdgpu_bo_move_notify(bo, evict, new_mem);
 
 	/* Can't move a pinned BO */
@@ -1728,7 +1734,6 @@  static struct ttm_bo_driver amdgpu_bo_driver = {
 	.ttm_tt_create = &amdgpu_ttm_tt_create,
 	.ttm_tt_populate = &amdgpu_ttm_tt_populate,
 	.ttm_tt_unpopulate = &amdgpu_ttm_tt_unpopulate,
-	.ttm_tt_bind = &amdgpu_ttm_backend_bind,
 	.ttm_tt_destroy = &amdgpu_ttm_backend_destroy,
 	.eviction_valuable = amdgpu_ttm_bo_eviction_valuable,
 	.evict_flags = &amdgpu_evict_flags,
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index ad0493c5103b..a69bd4098984 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -1032,6 +1032,12 @@  nouveau_bo_move(struct ttm_buffer_object *bo, bool evict,
 	struct nouveau_drm_tile *new_tile = NULL;
 	int ret = 0;
 
+	if (new_reg->mem_type == TTM_PL_TT) {
+		ret = nouveau_ttm_tt_bind(bo->bdev, bo->ttm, new_reg);
+		if (ret)
+			return ret;
+	}
+
 	nouveau_bo_move_ntfy(bo, evict, new_reg);
 	ret = ttm_bo_wait_ctx(bo, ctx);
 	if (ret)
@@ -1399,7 +1405,6 @@  struct ttm_bo_driver nouveau_bo_driver = {
 	.ttm_tt_create = &nouveau_ttm_tt_create,
 	.ttm_tt_populate = &nouveau_ttm_tt_populate,
 	.ttm_tt_unpopulate = &nouveau_ttm_tt_unpopulate,
-	.ttm_tt_bind = &nouveau_ttm_tt_bind,
 	.ttm_tt_destroy = &nouveau_ttm_tt_destroy,
 	.eviction_valuable = ttm_bo_eviction_valuable,
 	.evict_flags = nouveau_bo_evict_flags,
diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
index a6149e3cc3d2..1cc3c14bc684 100644
--- a/drivers/gpu/drm/qxl/qxl_ttm.c
+++ b/drivers/gpu/drm/qxl/qxl_ttm.c
@@ -100,19 +100,6 @@  int qxl_ttm_io_mem_reserve(struct ttm_bo_device *bdev,
 /*
  * TTM backend functions.
  */
-
-static int qxl_ttm_backend_bind(struct ttm_bo_device *bdev,
-				struct ttm_tt *ttm,
-				struct ttm_resource *bo_mem)
-{
-	if (!ttm->num_pages) {
-		WARN(1, "nothing to bind %lu pages for mreg %p back %p!\n",
-		     ttm->num_pages, bo_mem, ttm);
-	}
-	/* Not implemented */
-	return -1;
-}
-
 static void qxl_ttm_backend_destroy(struct ttm_bo_device *bdev,
 				    struct ttm_tt *ttm)
 {
@@ -181,7 +168,6 @@  static int qxl_bo_move(struct ttm_buffer_object *bo, bool evict,
 
 static struct ttm_bo_driver qxl_bo_driver = {
 	.ttm_tt_create = &qxl_ttm_tt_create,
-	.ttm_tt_bind = &qxl_ttm_backend_bind,
 	.ttm_tt_destroy = &qxl_ttm_backend_destroy,
 	.eviction_valuable = ttm_bo_eviction_valuable,
 	.evict_flags = &qxl_evict_flags,
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
index e427194b0b50..ac916fdd54d1 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
+++ b/drivers/gpu/drm/radeon/radeon_ttm.c
@@ -311,6 +311,11 @@  static int radeon_bo_move(struct ttm_buffer_object *bo, bool evict,
 	struct ttm_resource *old_mem = &bo->mem;
 	int r;
 
+	if (new_mem->mem_type == TTM_PL_TT) {
+		r = radeon_ttm_tt_bind(bo->bdev, bo->ttm, new_mem);
+		if (r)
+			return r;
+	}
 	radeon_bo_move_notify(bo, evict, new_mem);
 
 	r = ttm_bo_wait_ctx(bo, ctx);
@@ -823,7 +828,6 @@  static struct ttm_bo_driver radeon_bo_driver = {
 	.ttm_tt_create = &radeon_ttm_tt_create,
 	.ttm_tt_populate = &radeon_ttm_tt_populate,
 	.ttm_tt_unpopulate = &radeon_ttm_tt_unpopulate,
-	.ttm_tt_bind = &radeon_ttm_tt_bind,
 	.ttm_tt_destroy = &radeon_ttm_tt_destroy,
 	.eviction_valuable = ttm_bo_eviction_valuable,
 	.evict_flags = &radeon_evict_flags,
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index e8ac3bc45d95..4b7fdb49df52 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -256,10 +256,6 @@  static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
 			ret = ttm_tt_populate(bo->bdev, bo->ttm, ctx);
 			if (ret)
 				goto out_err;
-
-			ret = bdev->driver->ttm_tt_bind(bo->bdev, bo->ttm, mem);
-			if (ret)
-				goto out_err;
 		}
 	}
 
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
index fd82c9ba2d77..de25cf016be2 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
@@ -737,6 +737,12 @@  static int vmw_move(struct ttm_buffer_object *bo,
 	struct ttm_resource_manager *new_man = ttm_manager_type(bo->bdev, new_mem->mem_type);
 	int ret;
 
+	if (new_man->use_tt && new_mem->mem_type != TTM_PL_SYSTEM) {
+		ret = vmw_ttm_bind(bo->bdev, bo->ttm, new_mem);
+		if (ret)
+			return ret;
+	}
+
 	vmw_move_notify(bo, evict, new_mem);
 
 	if (old_man->use_tt && new_man->use_tt) {
@@ -769,7 +775,6 @@  struct ttm_bo_driver vmw_bo_driver = {
 	.ttm_tt_create = &vmw_ttm_tt_create,
 	.ttm_tt_populate = &vmw_ttm_populate,
 	.ttm_tt_unpopulate = &vmw_ttm_unpopulate,
-	.ttm_tt_bind = &vmw_ttm_bind,
 	.ttm_tt_destroy = &vmw_ttm_destroy,
 	.eviction_valuable = ttm_bo_eviction_valuable,
 	.evict_flags = vmw_evict_flags,
diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
index 0c4efc169f46..72f106b335e9 100644
--- a/include/drm/ttm/ttm_bo_driver.h
+++ b/include/drm/ttm/ttm_bo_driver.h
@@ -90,20 +90,6 @@  struct ttm_bo_driver {
 	 */
 	void (*ttm_tt_unpopulate)(struct ttm_bo_device *bdev, struct ttm_tt *ttm);
 
-	/**
-	 * ttm_tt_bind
-	 *
-	 * @bdev: Pointer to a ttm device
-	 * @ttm: Pointer to a struct ttm_tt.
-	 * @bo_mem: Pointer to a struct ttm_resource describing the
-	 * memory type and location for binding.
-	 *
-	 * Bind the backend pages into the aperture in the location
-	 * indicated by @bo_mem. This function should be able to handle
-	 * differences between aperture and system page sizes.
-	 */
-	int (*ttm_tt_bind)(struct ttm_bo_device *bdev, struct ttm_tt *ttm, struct ttm_resource *bo_mem);
-
 	/**
 	 * ttm_tt_destroy
 	 *