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: Christian König <christian.koenig@amd.com> Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20210728130552.2074-5-christian.koenig@amd.com
This commit is contained in:
Родитель
b131d49921
Коммит
d5f45d1e2f
|
@ -1066,7 +1066,6 @@ static void amdgpu_ttm_backend_destroy(struct ttm_device *bdev,
|
|||
{
|
||||
struct amdgpu_ttm_tt *gtt = (void *)ttm;
|
||||
|
||||
ttm_tt_destroy_common(bdev, ttm);
|
||||
if (gtt->usertask)
|
||||
put_task_struct(gtt->usertask);
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
ttm_tt_destroy_common(bdev, tt);
|
||||
ttm_tt_fini(tt);
|
||||
kfree(tt);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
ttm_tt_destroy_common(bdev, ttm);
|
||||
kfree(i915_tt);
|
||||
}
|
||||
|
||||
|
|
|
@ -1292,7 +1292,6 @@ nouveau_ttm_tt_destroy(struct ttm_device *bdev,
|
|||
#if IS_ENABLED(CONFIG_AGP)
|
||||
struct nouveau_drm *drm = nouveau_bdev(bdev);
|
||||
if (drm->agp.bridge) {
|
||||
ttm_tt_destroy_common(bdev, ttm);
|
||||
ttm_agp_destroy(ttm);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
if (ttm) {
|
||||
ttm_tt_destroy_common(bdev, ttm);
|
||||
ttm_tt_fini(&nvbe->ttm);
|
||||
kfree(nvbe);
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
ttm_tt_destroy_common(bdev, ttm);
|
||||
ttm_tt_fini(ttm);
|
||||
kfree(ttm);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
ttm_tt_destroy_common(bdev, ttm);
|
||||
ttm_tt_fini(>t->ttm);
|
||||
kfree(gtt);
|
||||
}
|
||||
|
@ -651,7 +650,6 @@ static void radeon_ttm_tt_destroy(struct ttm_device *bdev,
|
|||
struct radeon_device *rdev = radeon_get_rdev(bdev);
|
||||
|
||||
if (rdev->flags & RADEON_IS_AGP) {
|
||||
ttm_tt_destroy_common(bdev, ttm);
|
||||
ttm_agp_destroy(ttm);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -1224,6 +1224,7 @@ void ttm_bo_tt_destroy(struct ttm_buffer_object *bo)
|
|||
if (bo->ttm == NULL)
|
||||
return;
|
||||
|
||||
ttm_tt_unpopulate(bo->bdev, bo->ttm);
|
||||
ttm_tt_destroy(bo->bdev, bo->ttm);
|
||||
bo->ttm = NULL;
|
||||
}
|
||||
|
|
|
@ -123,17 +123,6 @@ static int ttm_sg_tt_alloc_page_directory(struct ttm_tt *ttm)
|
|||
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)
|
||||
{
|
||||
bdev->funcs->ttm_tt_destroy(bdev, ttm);
|
||||
|
@ -168,6 +157,12 @@ EXPORT_SYMBOL(ttm_tt_init);
|
|||
|
||||
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)
|
||||
kvfree(ttm->pages);
|
||||
else
|
||||
|
|
|
@ -526,7 +526,6 @@ static void vmw_ttm_destroy(struct ttm_device *bdev, struct ttm_tt *ttm)
|
|||
struct vmw_ttm_tt *vmw_be =
|
||||
container_of(ttm, struct vmw_ttm_tt, dma_ttm);
|
||||
|
||||
ttm_tt_destroy_common(bdev, ttm);
|
||||
vmw_ttm_unmap_dma(vmw_be);
|
||||
ttm_tt_fini(ttm);
|
||||
if (vmw_be->mob)
|
||||
|
|
|
@ -134,13 +134,6 @@ void ttm_tt_fini(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:
|
||||
*
|
||||
|
|
Загрузка…
Ссылка в новой задаче