drm/ttm: add back a reference to the bdev to the res manager
authorChristian König <christian.koenig@amd.com>
Mon, 30 Aug 2021 07:22:06 +0000 (09:22 +0200)
committerChristian König <christian.koenig@amd.com>
Wed, 26 Jan 2022 14:29:24 +0000 (15:29 +0100)
It is simply a lot cleaner to have this around instead of adding
the device throughout the call chain.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Huang Rui <ray.huang@amd.com>
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20220124122514.1832-3-christian.koenig@amd.com
drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
drivers/gpu/drm/i915/i915_ttm_buddy_manager.c
drivers/gpu/drm/nouveau/nouveau_ttm.c
drivers/gpu/drm/ttm/ttm_range_manager.c
drivers/gpu/drm/ttm/ttm_resource.c
drivers/gpu/drm/ttm/ttm_sys_manager.c
drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
drivers/gpu/drm/vmwgfx/vmwgfx_system_manager.c
include/drm/ttm/ttm_resource.h

index ea5470c8c92129ab799af1521f898b501e00f83e..9e7685a4878cd5dde2c30a4143300fc42ae7dea6 100644 (file)
@@ -293,7 +293,8 @@ int amdgpu_gtt_mgr_init(struct amdgpu_device *adev, uint64_t gtt_size)
        man->use_tt = true;
        man->func = &amdgpu_gtt_mgr_func;
 
-       ttm_resource_manager_init(man, gtt_size >> PAGE_SHIFT);
+       ttm_resource_manager_init(man, &adev->mman.bdev,
+                                 gtt_size >> PAGE_SHIFT);
 
        start = AMDGPU_GTT_MAX_TRANSFER_SIZE * AMDGPU_GTT_NUM_TRANSFER_WINDOWS;
        size = (adev->gmc.gart_size >> PAGE_SHIFT) - start;
index ffddec08e931fa341ae48eb140131d2b3ee0234a..6f7189d32f0a0a3a7b838a0de77ce978ad847c23 100644 (file)
@@ -153,7 +153,7 @@ int amdgpu_preempt_mgr_init(struct amdgpu_device *adev)
        man->use_tt = true;
        man->func = &amdgpu_preempt_mgr_func;
 
-       ttm_resource_manager_init(man, (1 << 30));
+       ttm_resource_manager_init(man, &adev->mman.bdev, (1 << 30));
 
        atomic64_set(&mgr->used, 0);
 
index 55d68408951d1e615860eee9e4c66263a96636c6..ddd0b6d74070b49c19a44b6b0f3a7d735f262d71 100644 (file)
@@ -699,7 +699,8 @@ int amdgpu_vram_mgr_init(struct amdgpu_device *adev)
        struct amdgpu_vram_mgr *mgr = &adev->mman.vram_mgr;
        struct ttm_resource_manager *man = &mgr->manager;
 
-       ttm_resource_manager_init(man, adev->gmc.real_vram_size >> PAGE_SHIFT);
+       ttm_resource_manager_init(man, &adev->mman.bdev,
+                                 adev->gmc.real_vram_size >> PAGE_SHIFT);
 
        man->func = &amdgpu_vram_mgr_func;
 
index e275b386886d049273e8a167477999e4a63aa417..247714bab044218fc739c948f2a903ef8299f331 100644 (file)
@@ -205,7 +205,7 @@ int i915_ttm_buddy_man_init(struct ttm_device *bdev,
        man = &bman->manager;
        man->use_tt = use_tt;
        man->func = &i915_ttm_buddy_manager_func;
-       ttm_resource_manager_init(man, bman->mm.size >> PAGE_SHIFT);
+       ttm_resource_manager_init(man, bdev, bman->mm.size >> PAGE_SHIFT);
 
        ttm_resource_manager_set_used(man, true);
        ttm_set_driver_manager(bdev, type, man);
index 91ef33f8f22cba7a654040aa91fc32877195e4e2..85f1f5a0fe5dfe8e5553950ecd3c353e46183b0e 100644 (file)
@@ -164,7 +164,7 @@ nouveau_ttm_init_vram(struct nouveau_drm *drm)
 
                man->func = &nouveau_vram_manager;
 
-               ttm_resource_manager_init(man,
+               ttm_resource_manager_init(man, &drm->ttm.bdev,
                                          drm->gem.vram_available >> PAGE_SHIFT);
                ttm_set_driver_manager(&drm->ttm.bdev, TTM_PL_VRAM, man);
                ttm_resource_manager_set_used(man, true);
@@ -211,7 +211,7 @@ nouveau_ttm_init_gtt(struct nouveau_drm *drm)
 
        man->func = func;
        man->use_tt = true;
-       ttm_resource_manager_init(man, size_pages);
+       ttm_resource_manager_init(man, &drm->ttm.bdev, size_pages);
        ttm_set_driver_manager(&drm->ttm.bdev, TTM_PL_TT, man);
        ttm_resource_manager_set_used(man, true);
        return 0;
index 55a41355f6842a2ee37bee2c1c244dcd50b74bf0..8cd4f3fb9f7900a2600bd59e2187a108e7d13a52 100644 (file)
@@ -158,7 +158,7 @@ int ttm_range_man_init_nocheck(struct ttm_device *bdev,
 
        man->func = &ttm_range_manager_func;
 
-       ttm_resource_manager_init(man, p_size);
+       ttm_resource_manager_init(man, bdev, p_size);
 
        drm_mm_init(&rman->mm, 0, p_size);
        spin_lock_init(&rman->lock);
index 7e5e32d2ef126a5d214407e1e301b9dd5e8f16be..4717128633e94f7ab8aeeee9107f4e8ee5d20fe1 100644 (file)
@@ -143,16 +143,19 @@ EXPORT_SYMBOL(ttm_resource_compat);
  * ttm_resource_manager_init
  *
  * @man: memory manager object to init
+ * @bdev: ttm device this manager belongs to
  * @p_size: size managed area in pages.
  *
  * Initialise core parts of a manager object.
  */
 void ttm_resource_manager_init(struct ttm_resource_manager *man,
+                              struct ttm_device *bdev,
                               unsigned long p_size)
 {
        unsigned i;
 
        spin_lock_init(&man->move_lock);
+       man->bdev = bdev;
        man->size = p_size;
 
        for (i = 0; i < TTM_MAX_BO_PRIORITY; ++i)
index 135394dcca95a2295bde184ec04164c4208a6957..2ced169513cb74675bb5810095400e727762295d 100644 (file)
@@ -43,7 +43,7 @@ void ttm_sys_man_init(struct ttm_device *bdev)
        man->use_tt = true;
        man->func = &ttm_sys_manager_func;
 
-       ttm_resource_manager_init(man, 0);
+       ttm_resource_manager_init(man, bdev, 0);
        ttm_set_driver_manager(bdev, TTM_PL_SYSTEM, man);
        ttm_resource_manager_set_used(man, true);
 }
index 99ccf690f8a164d392d880bf2e70b6d31d1b703f..60e3cc537f36574e871b7febe0f164db8890338f 100644 (file)
@@ -162,7 +162,7 @@ int vmw_gmrid_man_init(struct vmw_private *dev_priv, int type)
 
        man->func = &vmw_gmrid_manager_func;
        man->use_tt = true;
-       ttm_resource_manager_init(man, 0);
+       ttm_resource_manager_init(man, &dev_priv->bdev, 0);
        spin_lock_init(&gman->lock);
        gman->used_gmr_pages = 0;
        ida_init(&gman->gmr_ida);
index a64188c7268d5ffcc8ff0a6d60c78daa761eda93..d3007bf1b8f5296b202ef895e131d6baf44659fb 100644 (file)
@@ -70,7 +70,7 @@ int vmw_sys_man_init(struct vmw_private *dev_priv)
        man->use_tt = true;
        man->func = &vmw_sys_manager_func;
 
-       ttm_resource_manager_init(man, 0);
+       ttm_resource_manager_init(man, bdev, 0);
        ttm_set_driver_manager(bdev, VMW_PL_SYSTEM, man);
        ttm_resource_manager_set_used(man, true);
        return 0;
index df1f06b7b504eea3492b3b2980434f15ea0377ae..6bf37383002bc49f2d629242eb5dad0ee162c5f4 100644 (file)
@@ -105,11 +105,11 @@ struct ttm_resource_manager_func {
  * @use_type: The memory type is enabled.
  * @use_tt: If a TT object should be used for the backing store.
  * @size: Size of the managed region.
+ * @bdev: ttm device this manager belongs to
  * @func: structure pointer implementing the range manager. See above
  * @move_lock: lock for move fence
- * static information. bdev::driver::io_mem_free is never used.
- * @lru: The lru list for this memory type.
  * @move: The fence of the last pipelined move operation.
+ * @lru: The lru list for this memory type.
  *
  * This structure is used to identify and manage memory types for a device.
  */
@@ -119,20 +119,21 @@ struct ttm_resource_manager {
         */
        bool use_type;
        bool use_tt;
+       struct ttm_device *bdev;
        uint64_t size;
        const struct ttm_resource_manager_func *func;
        spinlock_t move_lock;
 
        /*
-        * Protected by the global->lru_lock.
+        * Protected by @move_lock.
         */
-
-       struct list_head lru[TTM_MAX_BO_PRIORITY];
+       struct dma_fence *move;
 
        /*
-        * Protected by @move_lock.
+        * Protected by the global->lru_lock.
         */
-       struct dma_fence *move;
+
+       struct list_head lru[TTM_MAX_BO_PRIORITY];
 };
 
 /**
@@ -272,6 +273,7 @@ bool ttm_resource_compat(struct ttm_resource *res,
                         struct ttm_placement *placement);
 
 void ttm_resource_manager_init(struct ttm_resource_manager *man,
+                              struct ttm_device *bdev,
                               unsigned long p_size);
 
 int ttm_resource_manager_evict_all(struct ttm_device *bdev,