From: Dave Airlie <airl...@redhat.com>

Reviewed-by: Christian König <christian.koe...@amd.com>
Signed-off-by: Dave Airlie <airl...@redhat.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c  | 15 +++++++++++----
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c      | 10 +++++-----
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h      |  2 ++
 drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 15 +++++++++++----
 4 files changed, 29 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
index 9d05e1ab2048..28056d12b199 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
@@ -133,10 +133,18 @@ int amdgpu_gtt_mgr_init(struct amdgpu_device *adev, 
uint64_t gtt_size)
  * Destroy and free the GTT manager, returns -EBUSY if ranges are still
  * allocated inside it.
  */
-static int amdgpu_gtt_mgr_fini(struct ttm_mem_type_manager *man)
+void amdgpu_gtt_mgr_fini(struct amdgpu_device *adev)
 {
-       struct amdgpu_device *adev = amdgpu_ttm_adev(man->bdev);
+       struct ttm_mem_type_manager *man = &adev->mman.bdev.man[TTM_PL_TT];
        struct amdgpu_gtt_mgr *mgr = man->priv;
+       int ret;
+
+       ttm_mem_type_manager_disable(man);
+
+       ret = ttm_mem_type_manager_force_list_clean(&adev->mman.bdev, man);
+       if (ret)
+               return;
+
        spin_lock(&mgr->lock);
        drm_mm_takedown(&mgr->mm);
        spin_unlock(&mgr->lock);
@@ -146,7 +154,7 @@ static int amdgpu_gtt_mgr_fini(struct ttm_mem_type_manager 
*man)
        device_remove_file(adev->dev, &dev_attr_mem_info_gtt_total);
        device_remove_file(adev->dev, &dev_attr_mem_info_gtt_used);
 
-       return 0;
+       ttm_mem_type_manager_cleanup(man);
 }
 
 /**
@@ -307,7 +315,6 @@ static void amdgpu_gtt_mgr_debug(struct 
ttm_mem_type_manager *man,
 }
 
 static const struct ttm_mem_type_manager_func amdgpu_gtt_mgr_func = {
-       .takedown = amdgpu_gtt_mgr_fini,
        .get_node = amdgpu_gtt_mgr_new,
        .put_node = amdgpu_gtt_mgr_del,
        .debug = amdgpu_gtt_mgr_debug
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 4a09a625e748..d7516144bb0a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -2012,11 +2012,11 @@ void amdgpu_ttm_fini(struct amdgpu_device *adev)
                iounmap(adev->mman.aper_base_kaddr);
        adev->mman.aper_base_kaddr = NULL;
 
-       ttm_bo_clean_mm(&adev->mman.bdev, TTM_PL_VRAM);
-       ttm_bo_clean_mm(&adev->mman.bdev, TTM_PL_TT);
-       ttm_bo_clean_mm(&adev->mman.bdev, AMDGPU_PL_GDS);
-       ttm_bo_clean_mm(&adev->mman.bdev, AMDGPU_PL_GWS);
-       ttm_bo_clean_mm(&adev->mman.bdev, AMDGPU_PL_OA);
+       amdgpu_vram_mgr_fini(adev);
+       amdgpu_gtt_mgr_fini(adev);
+       ttm_range_man_fini(&adev->mman.bdev, 
&adev->mman.bdev.man[AMDGPU_PL_GDS]);
+       ttm_range_man_fini(&adev->mman.bdev, 
&adev->mman.bdev.man[AMDGPU_PL_GWS]);
+       ttm_range_man_fini(&adev->mman.bdev, 
&adev->mman.bdev.man[AMDGPU_PL_OA]);
        ttm_bo_device_release(&adev->mman.bdev);
        adev->mman.initialized = false;
        DRM_INFO("amdgpu: ttm finalized\n");
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
index fb45c0a323b0..c01fdb3f0458 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
@@ -68,7 +68,9 @@ struct amdgpu_copy_mem {
 };
 
 int amdgpu_gtt_mgr_init(struct amdgpu_device *adev, uint64_t gtt_size);
+void amdgpu_gtt_mgr_fini(struct amdgpu_device *adev);
 int amdgpu_vram_mgr_init(struct amdgpu_device *adev);
+void amdgpu_vram_mgr_fini(struct amdgpu_device *adev);
 
 bool amdgpu_gtt_mgr_has_gart_addr(struct ttm_mem_reg *mem);
 uint64_t amdgpu_gtt_mgr_usage(struct ttm_mem_type_manager *man);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
index bef3497de2ae..c3bc9ddd437e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
@@ -205,10 +205,17 @@ int amdgpu_vram_mgr_init(struct amdgpu_device *adev)
  * Destroy and free the VRAM manager, returns -EBUSY if ranges are still
  * allocated inside it.
  */
-static int amdgpu_vram_mgr_fini(struct ttm_mem_type_manager *man)
+void amdgpu_vram_mgr_fini(struct amdgpu_device *adev)
 {
-       struct amdgpu_device *adev = amdgpu_ttm_adev(man->bdev);
+       struct ttm_mem_type_manager *man = &adev->mman.bdev.man[TTM_PL_VRAM];
        struct amdgpu_vram_mgr *mgr = man->priv;
+       int ret;
+
+       ttm_mem_type_manager_disable(man);
+
+       ret = ttm_mem_type_manager_force_list_clean(&adev->mman.bdev, man);
+       if (ret)
+               return;
 
        spin_lock(&mgr->lock);
        drm_mm_takedown(&mgr->mm);
@@ -216,7 +223,8 @@ static int amdgpu_vram_mgr_fini(struct ttm_mem_type_manager 
*man)
        kfree(mgr);
        man->priv = NULL;
        sysfs_remove_files(&adev->dev->kobj, amdgpu_vram_mgr_attributes);
-       return 0;
+
+       ttm_mem_type_manager_cleanup(man);
 }
 
 /**
@@ -596,7 +604,6 @@ static void amdgpu_vram_mgr_debug(struct 
ttm_mem_type_manager *man,
 }
 
 static const struct ttm_mem_type_manager_func amdgpu_vram_mgr_func = {
-       .takedown       = amdgpu_vram_mgr_fini,
        .get_node       = amdgpu_vram_mgr_new,
        .put_node       = amdgpu_vram_mgr_del,
        .debug          = amdgpu_vram_mgr_debug
-- 
2.26.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to