Commit d5f45d1e authored by Christian König's avatar Christian König Committed by Christian König

drm/ttm: remove ttm_tt_destroy_common v2

Move the functionality into ttm_tt_fini and ttm_bo_tt_destroy instead.

We don't need this any more since we removed the unbind from the destroy
code paths in the drivers.

Also add a warning to ttm_tt_fini() if we try to fini a still populated TT
object.

v2: instead of reverting the patch move the functionality to different
places.
Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210728130552.2074-5-christian.koenig@amd.com
parent b131d499
...@@ -1066,7 +1066,6 @@ static void amdgpu_ttm_backend_destroy(struct ttm_device *bdev, ...@@ -1066,7 +1066,6 @@ static void amdgpu_ttm_backend_destroy(struct ttm_device *bdev,
{ {
struct amdgpu_ttm_tt *gtt = (void *)ttm; struct amdgpu_ttm_tt *gtt = (void *)ttm;
ttm_tt_destroy_common(bdev, ttm);
if (gtt->usertask) if (gtt->usertask)
put_task_struct(gtt->usertask); put_task_struct(gtt->usertask);
......
...@@ -846,7 +846,6 @@ static const struct drm_gem_object_funcs drm_gem_vram_object_funcs = { ...@@ -846,7 +846,6 @@ static const struct drm_gem_object_funcs drm_gem_vram_object_funcs = {
static void bo_driver_ttm_tt_destroy(struct ttm_device *bdev, struct ttm_tt *tt) static void bo_driver_ttm_tt_destroy(struct ttm_device *bdev, struct ttm_tt *tt)
{ {
ttm_tt_destroy_common(bdev, tt);
ttm_tt_fini(tt); ttm_tt_fini(tt);
kfree(tt); kfree(tt);
} }
......
...@@ -118,7 +118,6 @@ static void i915_ttm_tt_destroy(struct ttm_device *bdev, struct ttm_tt *ttm) ...@@ -118,7 +118,6 @@ static void i915_ttm_tt_destroy(struct ttm_device *bdev, struct ttm_tt *ttm)
{ {
struct i915_ttm_tt *i915_tt = container_of(ttm, typeof(*i915_tt), ttm); struct i915_ttm_tt *i915_tt = container_of(ttm, typeof(*i915_tt), ttm);
ttm_tt_destroy_common(bdev, ttm);
kfree(i915_tt); kfree(i915_tt);
} }
......
...@@ -1292,7 +1292,6 @@ nouveau_ttm_tt_destroy(struct ttm_device *bdev, ...@@ -1292,7 +1292,6 @@ nouveau_ttm_tt_destroy(struct ttm_device *bdev,
#if IS_ENABLED(CONFIG_AGP) #if IS_ENABLED(CONFIG_AGP)
struct nouveau_drm *drm = nouveau_bdev(bdev); struct nouveau_drm *drm = nouveau_bdev(bdev);
if (drm->agp.bridge) { if (drm->agp.bridge) {
ttm_tt_destroy_common(bdev, ttm);
ttm_agp_destroy(ttm); ttm_agp_destroy(ttm);
return; return;
} }
......
...@@ -21,7 +21,6 @@ nouveau_sgdma_destroy(struct ttm_device *bdev, struct ttm_tt *ttm) ...@@ -21,7 +21,6 @@ nouveau_sgdma_destroy(struct ttm_device *bdev, struct ttm_tt *ttm)
struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)ttm; struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)ttm;
if (ttm) { if (ttm) {
ttm_tt_destroy_common(bdev, ttm);
ttm_tt_fini(&nvbe->ttm); ttm_tt_fini(&nvbe->ttm);
kfree(nvbe); kfree(nvbe);
} }
......
...@@ -101,7 +101,6 @@ int qxl_ttm_io_mem_reserve(struct ttm_device *bdev, ...@@ -101,7 +101,6 @@ int qxl_ttm_io_mem_reserve(struct ttm_device *bdev,
*/ */
static void qxl_ttm_backend_destroy(struct ttm_device *bdev, struct ttm_tt *ttm) static void qxl_ttm_backend_destroy(struct ttm_device *bdev, struct ttm_tt *ttm)
{ {
ttm_tt_destroy_common(bdev, ttm);
ttm_tt_fini(ttm); ttm_tt_fini(ttm);
kfree(ttm); kfree(ttm);
} }
......
...@@ -488,7 +488,6 @@ static void radeon_ttm_backend_destroy(struct ttm_device *bdev, struct ttm_tt *t ...@@ -488,7 +488,6 @@ static void radeon_ttm_backend_destroy(struct ttm_device *bdev, struct ttm_tt *t
{ {
struct radeon_ttm_tt *gtt = (void *)ttm; struct radeon_ttm_tt *gtt = (void *)ttm;
ttm_tt_destroy_common(bdev, ttm);
ttm_tt_fini(&gtt->ttm); ttm_tt_fini(&gtt->ttm);
kfree(gtt); kfree(gtt);
} }
...@@ -651,7 +650,6 @@ static void radeon_ttm_tt_destroy(struct ttm_device *bdev, ...@@ -651,7 +650,6 @@ static void radeon_ttm_tt_destroy(struct ttm_device *bdev,
struct radeon_device *rdev = radeon_get_rdev(bdev); struct radeon_device *rdev = radeon_get_rdev(bdev);
if (rdev->flags & RADEON_IS_AGP) { if (rdev->flags & RADEON_IS_AGP) {
ttm_tt_destroy_common(bdev, ttm);
ttm_agp_destroy(ttm); ttm_agp_destroy(ttm);
return; return;
} }
......
...@@ -1224,6 +1224,7 @@ void ttm_bo_tt_destroy(struct ttm_buffer_object *bo) ...@@ -1224,6 +1224,7 @@ void ttm_bo_tt_destroy(struct ttm_buffer_object *bo)
if (bo->ttm == NULL) if (bo->ttm == NULL)
return; return;
ttm_tt_unpopulate(bo->bdev, bo->ttm);
ttm_tt_destroy(bo->bdev, bo->ttm); ttm_tt_destroy(bo->bdev, bo->ttm);
bo->ttm = NULL; bo->ttm = NULL;
} }
...@@ -123,17 +123,6 @@ static int ttm_sg_tt_alloc_page_directory(struct ttm_tt *ttm) ...@@ -123,17 +123,6 @@ static int ttm_sg_tt_alloc_page_directory(struct ttm_tt *ttm)
return 0; return 0;
} }
void ttm_tt_destroy_common(struct ttm_device *bdev, struct ttm_tt *ttm)
{
ttm_tt_unpopulate(bdev, ttm);
if (ttm->swap_storage)
fput(ttm->swap_storage);
ttm->swap_storage = NULL;
}
EXPORT_SYMBOL(ttm_tt_destroy_common);
void ttm_tt_destroy(struct ttm_device *bdev, struct ttm_tt *ttm) void ttm_tt_destroy(struct ttm_device *bdev, struct ttm_tt *ttm)
{ {
bdev->funcs->ttm_tt_destroy(bdev, ttm); bdev->funcs->ttm_tt_destroy(bdev, ttm);
...@@ -168,6 +157,12 @@ EXPORT_SYMBOL(ttm_tt_init); ...@@ -168,6 +157,12 @@ EXPORT_SYMBOL(ttm_tt_init);
void ttm_tt_fini(struct ttm_tt *ttm) void ttm_tt_fini(struct ttm_tt *ttm)
{ {
WARN_ON(ttm->page_flags & TTM_PAGE_FLAG_PRIV_POPULATED);
if (ttm->swap_storage)
fput(ttm->swap_storage);
ttm->swap_storage = NULL;
if (ttm->pages) if (ttm->pages)
kvfree(ttm->pages); kvfree(ttm->pages);
else else
......
...@@ -526,7 +526,6 @@ static void vmw_ttm_destroy(struct ttm_device *bdev, struct ttm_tt *ttm) ...@@ -526,7 +526,6 @@ static void vmw_ttm_destroy(struct ttm_device *bdev, struct ttm_tt *ttm)
struct vmw_ttm_tt *vmw_be = struct vmw_ttm_tt *vmw_be =
container_of(ttm, struct vmw_ttm_tt, dma_ttm); container_of(ttm, struct vmw_ttm_tt, dma_ttm);
ttm_tt_destroy_common(bdev, ttm);
vmw_ttm_unmap_dma(vmw_be); vmw_ttm_unmap_dma(vmw_be);
ttm_tt_fini(ttm); ttm_tt_fini(ttm);
if (vmw_be->mob) if (vmw_be->mob)
......
...@@ -134,13 +134,6 @@ void ttm_tt_fini(struct ttm_tt *ttm); ...@@ -134,13 +134,6 @@ void ttm_tt_fini(struct ttm_tt *ttm);
*/ */
void ttm_tt_destroy(struct ttm_device *bdev, struct ttm_tt *ttm); void ttm_tt_destroy(struct ttm_device *bdev, struct ttm_tt *ttm);
/**
* ttm_tt_destroy_common:
*
* Called from driver to destroy common path.
*/
void ttm_tt_destroy_common(struct ttm_device *bdev, struct ttm_tt *ttm);
/** /**
* ttm_tt_swapin: * ttm_tt_swapin:
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment