mirror of https://gitee.com/openkylin/linux.git
drm/ttm: move last binding into the drivers.
This moves the call to tt binding into the driver move, and drops the driver callback. Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Dave Airlie <airlied@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20201020010319.1692445-8-airlied@gmail.com
This commit is contained in:
parent
6d82000329
commit
bfe5e585b4
|
@ -666,6 +666,12 @@ static int amdgpu_bo_move(struct ttm_buffer_object *bo, bool evict,
|
||||||
struct ttm_resource *old_mem = &bo->mem;
|
struct ttm_resource *old_mem = &bo->mem;
|
||||||
int r;
|
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);
|
amdgpu_bo_move_notify(bo, evict, new_mem);
|
||||||
|
|
||||||
/* Can't move a pinned BO */
|
/* 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_create = &amdgpu_ttm_tt_create,
|
||||||
.ttm_tt_populate = &amdgpu_ttm_tt_populate,
|
.ttm_tt_populate = &amdgpu_ttm_tt_populate,
|
||||||
.ttm_tt_unpopulate = &amdgpu_ttm_tt_unpopulate,
|
.ttm_tt_unpopulate = &amdgpu_ttm_tt_unpopulate,
|
||||||
.ttm_tt_bind = &amdgpu_ttm_backend_bind,
|
|
||||||
.ttm_tt_destroy = &amdgpu_ttm_backend_destroy,
|
.ttm_tt_destroy = &amdgpu_ttm_backend_destroy,
|
||||||
.eviction_valuable = amdgpu_ttm_bo_eviction_valuable,
|
.eviction_valuable = amdgpu_ttm_bo_eviction_valuable,
|
||||||
.evict_flags = &amdgpu_evict_flags,
|
.evict_flags = &amdgpu_evict_flags,
|
||||||
|
|
|
@ -1032,6 +1032,12 @@ nouveau_bo_move(struct ttm_buffer_object *bo, bool evict,
|
||||||
struct nouveau_drm_tile *new_tile = NULL;
|
struct nouveau_drm_tile *new_tile = NULL;
|
||||||
int ret = 0;
|
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);
|
nouveau_bo_move_ntfy(bo, evict, new_reg);
|
||||||
ret = ttm_bo_wait_ctx(bo, ctx);
|
ret = ttm_bo_wait_ctx(bo, ctx);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -1399,7 +1405,6 @@ struct ttm_bo_driver nouveau_bo_driver = {
|
||||||
.ttm_tt_create = &nouveau_ttm_tt_create,
|
.ttm_tt_create = &nouveau_ttm_tt_create,
|
||||||
.ttm_tt_populate = &nouveau_ttm_tt_populate,
|
.ttm_tt_populate = &nouveau_ttm_tt_populate,
|
||||||
.ttm_tt_unpopulate = &nouveau_ttm_tt_unpopulate,
|
.ttm_tt_unpopulate = &nouveau_ttm_tt_unpopulate,
|
||||||
.ttm_tt_bind = &nouveau_ttm_tt_bind,
|
|
||||||
.ttm_tt_destroy = &nouveau_ttm_tt_destroy,
|
.ttm_tt_destroy = &nouveau_ttm_tt_destroy,
|
||||||
.eviction_valuable = ttm_bo_eviction_valuable,
|
.eviction_valuable = ttm_bo_eviction_valuable,
|
||||||
.evict_flags = nouveau_bo_evict_flags,
|
.evict_flags = nouveau_bo_evict_flags,
|
||||||
|
|
|
@ -100,19 +100,6 @@ int qxl_ttm_io_mem_reserve(struct ttm_bo_device *bdev,
|
||||||
/*
|
/*
|
||||||
* TTM backend functions.
|
* 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,
|
static void qxl_ttm_backend_destroy(struct ttm_bo_device *bdev,
|
||||||
struct ttm_tt *ttm)
|
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 = {
|
static struct ttm_bo_driver qxl_bo_driver = {
|
||||||
.ttm_tt_create = &qxl_ttm_tt_create,
|
.ttm_tt_create = &qxl_ttm_tt_create,
|
||||||
.ttm_tt_bind = &qxl_ttm_backend_bind,
|
|
||||||
.ttm_tt_destroy = &qxl_ttm_backend_destroy,
|
.ttm_tt_destroy = &qxl_ttm_backend_destroy,
|
||||||
.eviction_valuable = ttm_bo_eviction_valuable,
|
.eviction_valuable = ttm_bo_eviction_valuable,
|
||||||
.evict_flags = &qxl_evict_flags,
|
.evict_flags = &qxl_evict_flags,
|
||||||
|
|
|
@ -311,6 +311,11 @@ static int radeon_bo_move(struct ttm_buffer_object *bo, bool evict,
|
||||||
struct ttm_resource *old_mem = &bo->mem;
|
struct ttm_resource *old_mem = &bo->mem;
|
||||||
int r;
|
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);
|
radeon_bo_move_notify(bo, evict, new_mem);
|
||||||
|
|
||||||
r = ttm_bo_wait_ctx(bo, ctx);
|
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_create = &radeon_ttm_tt_create,
|
||||||
.ttm_tt_populate = &radeon_ttm_tt_populate,
|
.ttm_tt_populate = &radeon_ttm_tt_populate,
|
||||||
.ttm_tt_unpopulate = &radeon_ttm_tt_unpopulate,
|
.ttm_tt_unpopulate = &radeon_ttm_tt_unpopulate,
|
||||||
.ttm_tt_bind = &radeon_ttm_tt_bind,
|
|
||||||
.ttm_tt_destroy = &radeon_ttm_tt_destroy,
|
.ttm_tt_destroy = &radeon_ttm_tt_destroy,
|
||||||
.eviction_valuable = ttm_bo_eviction_valuable,
|
.eviction_valuable = ttm_bo_eviction_valuable,
|
||||||
.evict_flags = &radeon_evict_flags,
|
.evict_flags = &radeon_evict_flags,
|
||||||
|
|
|
@ -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);
|
ret = ttm_tt_populate(bo->bdev, bo->ttm, ctx);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto out_err;
|
goto out_err;
|
||||||
|
|
||||||
ret = bdev->driver->ttm_tt_bind(bo->bdev, bo->ttm, mem);
|
|
||||||
if (ret)
|
|
||||||
goto out_err;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
struct ttm_resource_manager *new_man = ttm_manager_type(bo->bdev, new_mem->mem_type);
|
||||||
int ret;
|
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);
|
vmw_move_notify(bo, evict, new_mem);
|
||||||
|
|
||||||
if (old_man->use_tt && new_man->use_tt) {
|
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_create = &vmw_ttm_tt_create,
|
||||||
.ttm_tt_populate = &vmw_ttm_populate,
|
.ttm_tt_populate = &vmw_ttm_populate,
|
||||||
.ttm_tt_unpopulate = &vmw_ttm_unpopulate,
|
.ttm_tt_unpopulate = &vmw_ttm_unpopulate,
|
||||||
.ttm_tt_bind = &vmw_ttm_bind,
|
|
||||||
.ttm_tt_destroy = &vmw_ttm_destroy,
|
.ttm_tt_destroy = &vmw_ttm_destroy,
|
||||||
.eviction_valuable = ttm_bo_eviction_valuable,
|
.eviction_valuable = ttm_bo_eviction_valuable,
|
||||||
.evict_flags = vmw_evict_flags,
|
.evict_flags = vmw_evict_flags,
|
||||||
|
|
|
@ -90,20 +90,6 @@ struct ttm_bo_driver {
|
||||||
*/
|
*/
|
||||||
void (*ttm_tt_unpopulate)(struct ttm_bo_device *bdev, struct ttm_tt *ttm);
|
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
|
* ttm_tt_destroy
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue