[PATCH 5/5] drm/ttm: revert "flip tt destroy ordering."

Daniel Vetter daniel at ffwll.ch
Thu Jul 22 09:11:24 UTC 2021


On Thu, Jul 22, 2021 at 10:55:54AM +0200, Christian König wrote:
> It turned out that this is not a good idea at all because it leaves pointers
> to freed up system memory pages in the GART tables of the drivers.
> 
> Instead change the drivers to unbind their page tables during unpopulate and
> merge those things back into ttm_tt_destroy() again.
> 
> This reverts commit 7626168fd132009c79a0457bccc58014abc738f5.

Can you pls duplicate this in each of the driver commit messages so it's a
bit clearer what is going on?

Usually the cover letter is first, not last :-)
-Daniel
 
> Signed-off-by: Christian König <christian.koenig at amd.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c    | 1 -
>  drivers/gpu/drm/drm_gem_vram_helper.c      | 1 -
>  drivers/gpu/drm/i915/gem/i915_gem_ttm.c    | 1 -
>  drivers/gpu/drm/nouveau/nouveau_bo.c       | 1 -
>  drivers/gpu/drm/nouveau/nouveau_sgdma.c    | 1 -
>  drivers/gpu/drm/qxl/qxl_ttm.c              | 1 -
>  drivers/gpu/drm/radeon/radeon_ttm.c        | 2 --
>  drivers/gpu/drm/ttm/ttm_tt.c               | 7 +------
>  drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 1 -
>  include/drm/ttm/ttm_tt.h                   | 7 -------
>  10 files changed, 1 insertion(+), 22 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index 42b5162814b1..6a6e04b64a80 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -1070,7 +1070,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);
>  
> diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
> index 1e9b82e51a07..cc81fbac1a13 100644
> --- a/drivers/gpu/drm/drm_gem_vram_helper.c
> +++ b/drivers/gpu/drm/drm_gem_vram_helper.c
> @@ -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);
>  }
> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
> index bf33724bed5c..e646aac9d7a4 100644
> --- a/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
> +++ b/drivers/gpu/drm/i915/gem/i915_gem_ttm.c
> @@ -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);
>  }
>  
> diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
> index 5f309a4ec211..3177f89cf000 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
> @@ -1291,7 +1291,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;
>  	}
> diff --git a/drivers/gpu/drm/nouveau/nouveau_sgdma.c b/drivers/gpu/drm/nouveau/nouveau_sgdma.c
> index bde92a9dae7a..85c03c83259b 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_sgdma.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_sgdma.c
> @@ -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);
>  	}
> diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
> index 19fd39d9a00c..e91d8154143e 100644
> --- a/drivers/gpu/drm/qxl/qxl_ttm.c
> +++ b/drivers/gpu/drm/qxl/qxl_ttm.c
> @@ -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);
>  }
> diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
> index ee343b76db54..7793249bc549 100644
> --- a/drivers/gpu/drm/radeon/radeon_ttm.c
> +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
> @@ -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(&gtt->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;
>  	}
> diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
> index 24031a8acd2d..41f38d9c3e1c 100644
> --- a/drivers/gpu/drm/ttm/ttm_tt.c
> +++ b/drivers/gpu/drm/ttm/ttm_tt.c
> @@ -123,7 +123,7 @@ 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)
> +void ttm_tt_destroy(struct ttm_device *bdev, struct ttm_tt *ttm)
>  {
>  	ttm_tt_unpopulate(bdev, ttm);
>  
> @@ -131,11 +131,6 @@ void ttm_tt_destroy_common(struct ttm_device *bdev, struct ttm_tt *ttm)
>  		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);
>  }
>  
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> index 904031d03dbe..f35bdc1cb197 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> @@ -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)
> diff --git a/include/drm/ttm/ttm_tt.h b/include/drm/ttm/ttm_tt.h
> index 818680c6a8ed..e402dab1d0f6 100644
> --- a/include/drm/ttm/ttm_tt.h
> +++ b/include/drm/ttm/ttm_tt.h
> @@ -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:
>   *
> -- 
> 2.25.1
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch


More information about the dri-devel mailing list