[PATCH 02/12] drm/ttm: add back a reference to the bdev to the res manager
Daniel Vetter
daniel at ffwll.ch
Tue Jan 25 16:30:23 UTC 2022
On Mon, Jan 24, 2022 at 01:25:04PM +0100, Christian König wrote:
> 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 at amd.com>
> Reviewed-by: Huang Rui <ray.huang at amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c | 3 ++-
> drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.c | 2 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 3 ++-
> drivers/gpu/drm/i915/i915_ttm_buddy_manager.c | 2 +-
> drivers/gpu/drm/nouveau/nouveau_ttm.c | 4 ++--
> drivers/gpu/drm/ttm/ttm_range_manager.c | 2 +-
> drivers/gpu/drm/ttm/ttm_resource.c | 3 +++
> drivers/gpu/drm/ttm/ttm_sys_manager.c | 2 +-
> drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c | 2 +-
> drivers/gpu/drm/vmwgfx/vmwgfx_system_manager.c | 2 +-
> include/drm/ttm/ttm_resource.h | 16 +++++++++-------
> 11 files changed, 24 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
> index ea5470c8c921..9e7685a4878c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
> @@ -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;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.c
> index ffddec08e931..6f7189d32f0a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.c
> @@ -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);
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
> index 55d68408951d..ddd0b6d74070 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
> @@ -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;
>
> diff --git a/drivers/gpu/drm/i915/i915_ttm_buddy_manager.c b/drivers/gpu/drm/i915/i915_ttm_buddy_manager.c
> index bf857703c797..79dc8c6f2833 100644
> --- a/drivers/gpu/drm/i915/i915_ttm_buddy_manager.c
> +++ b/drivers/gpu/drm/i915/i915_ttm_buddy_manager.c
> @@ -204,7 +204,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);
> diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
> index 91ef33f8f22c..85f1f5a0fe5d 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
> @@ -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;
> diff --git a/drivers/gpu/drm/ttm/ttm_range_manager.c b/drivers/gpu/drm/ttm/ttm_range_manager.c
> index 55a41355f684..8cd4f3fb9f79 100644
> --- a/drivers/gpu/drm/ttm/ttm_range_manager.c
> +++ b/drivers/gpu/drm/ttm/ttm_range_manager.c
> @@ -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);
> diff --git a/drivers/gpu/drm/ttm/ttm_resource.c b/drivers/gpu/drm/ttm/ttm_resource.c
> index 89bcfe22a0ca..41e7bf195168 100644
> --- a/drivers/gpu/drm/ttm/ttm_resource.c
> +++ b/drivers/gpu/drm/ttm/ttm_resource.c
> @@ -126,16 +126,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)
> diff --git a/drivers/gpu/drm/ttm/ttm_sys_manager.c b/drivers/gpu/drm/ttm/ttm_sys_manager.c
> index 135394dcca95..2ced169513cb 100644
> --- a/drivers/gpu/drm/ttm/ttm_sys_manager.c
> +++ b/drivers/gpu/drm/ttm/ttm_sys_manager.c
> @@ -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);
> }
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
> index 99ccf690f8a1..60e3cc537f36 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
> @@ -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);
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_system_manager.c b/drivers/gpu/drm/vmwgfx/vmwgfx_system_manager.c
> index a64188c7268d..d3007bf1b8f5 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_system_manager.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_system_manager.c
> @@ -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;
> diff --git a/include/drm/ttm/ttm_resource.h b/include/drm/ttm/ttm_resource.h
> index df1f06b7b504..6bf37383002b 100644
> --- a/include/drm/ttm/ttm_resource.h
> +++ b/include/drm/ttm/ttm_resource.h
> @@ -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.
Since you edit these anyway, maybe move the kerneldoc from the header
comment to inline style and comment them. Having things split up doesn't
help anyone.
Anyway I'll trust gcc on this one :-)
Acked-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> */
> - 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,
> --
> 2.25.1
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the dri-devel
mailing list