[PATCH 05/11] drm/radeon: remove resource accounting
Matthew Auld
matthew.william.auld at gmail.com
Mon Feb 14 10:59:44 UTC 2022
On Mon, 14 Feb 2022 at 09:34, Christian König
<ckoenig.leichtzumerken at gmail.com> wrote:
>
> Use the one provided by TTM instead.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> Tested-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
> ---
> drivers/gpu/drm/radeon/radeon.h | 2 --
> drivers/gpu/drm/radeon/radeon_kms.c | 7 ++++--
> drivers/gpu/drm/radeon/radeon_object.c | 30 +++-----------------------
> drivers/gpu/drm/radeon/radeon_object.h | 1 -
> drivers/gpu/drm/radeon/radeon_ttm.c | 18 ++--------------
> 5 files changed, 10 insertions(+), 48 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> index 895776c421d4..08f83bf2c330 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -2462,8 +2462,6 @@ struct radeon_device {
> struct radeon_vm_manager vm_manager;
> struct mutex gpu_clock_mutex;
> /* memory stats */
> - atomic64_t vram_usage;
> - atomic64_t gtt_usage;
> atomic64_t num_bytes_moved;
> atomic_t gpu_reset_counter;
> /* ACPI interface */
> diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
> index 11ad210919c8..965161b8565b 100644
> --- a/drivers/gpu/drm/radeon/radeon_kms.c
> +++ b/drivers/gpu/drm/radeon/radeon_kms.c
> @@ -241,6 +241,7 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
> struct drm_radeon_info *info = data;
> struct radeon_mode_info *minfo = &rdev->mode_info;
> uint32_t *value, value_tmp, *value_ptr, value_size;
> + struct ttm_resource_manager *man;
> uint64_t value64;
> struct drm_crtc *crtc;
> int i, found;
> @@ -550,12 +551,14 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
> case RADEON_INFO_VRAM_USAGE:
> value = (uint32_t*)&value64;
> value_size = sizeof(uint64_t);
> - value64 = atomic64_read(&rdev->vram_usage);
> + man = ttm_manager_type(&rdev->mman.bdev, TTM_PL_VRAM);
> + value64 = ttm_resource_manager_usage(man);
> break;
> case RADEON_INFO_GTT_USAGE:
> value = (uint32_t*)&value64;
> value_size = sizeof(uint64_t);
> - value64 = atomic64_read(&rdev->gtt_usage);
> + man = ttm_manager_type(&rdev->mman.bdev, TTM_PL_TT);
> + value64 = ttm_resource_manager_usage(man);
> break;
> case RADEON_INFO_ACTIVE_CU_COUNT:
> if (rdev->family >= CHIP_BONAIRE)
> diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
> index 56ede9d63b12..c9bbed2a25ad 100644
> --- a/drivers/gpu/drm/radeon/radeon_object.c
> +++ b/drivers/gpu/drm/radeon/radeon_object.c
> @@ -49,27 +49,6 @@ static void radeon_bo_clear_surface_reg(struct radeon_bo *bo);
> * function are calling it.
> */
>
> -static void radeon_update_memory_usage(struct ttm_buffer_object *bo,
> - unsigned int mem_type, int sign)
> -{
> - struct radeon_device *rdev = radeon_get_rdev(bo->bdev);
> -
> - switch (mem_type) {
> - case TTM_PL_TT:
> - if (sign > 0)
> - atomic64_add(bo->base.size, &rdev->gtt_usage);
> - else
> - atomic64_sub(bo->base.size, &rdev->gtt_usage);
> - break;
> - case TTM_PL_VRAM:
> - if (sign > 0)
> - atomic64_add(bo->base.size, &rdev->vram_usage);
> - else
> - atomic64_sub(bo->base.size, &rdev->vram_usage);
> - break;
> - }
> -}
> -
> static void radeon_ttm_bo_destroy(struct ttm_buffer_object *tbo)
> {
> struct radeon_bo *bo;
> @@ -434,7 +413,9 @@ void radeon_bo_fini(struct radeon_device *rdev)
> static u64 radeon_bo_get_threshold_for_moves(struct radeon_device *rdev)
> {
> u64 real_vram_size = rdev->mc.real_vram_size;
> - u64 vram_usage = atomic64_read(&rdev->vram_usage);
> + struct ttm_resource_manager *man =
> + ttm_manager_type(&rdev->mman.bdev, TTM_PL_VRAM);
> + u64 vram_usage = ttm_resource_manager_usage(man);
>
> /* This function is based on the current VRAM usage.
> *
> @@ -725,15 +706,10 @@ int radeon_bo_check_tiling(struct radeon_bo *bo, bool has_moved,
> }
>
> void radeon_bo_move_notify(struct ttm_buffer_object *bo,
> - unsigned int old_type,
> struct ttm_resource *new_mem)
new_mem looks to also be unused now?
> {
> struct radeon_bo *rbo;
>
> - radeon_update_memory_usage(bo, old_type, -1);
> - if (new_mem)
> - radeon_update_memory_usage(bo, new_mem->mem_type, 1);
> -
> if (!radeon_ttm_bo_is_radeon_bo(bo))
> return;
>
> diff --git a/drivers/gpu/drm/radeon/radeon_object.h b/drivers/gpu/drm/radeon/radeon_object.h
> index 1afc7992ef91..0b64e202577b 100644
> --- a/drivers/gpu/drm/radeon/radeon_object.h
> +++ b/drivers/gpu/drm/radeon/radeon_object.h
> @@ -161,7 +161,6 @@ extern void radeon_bo_get_tiling_flags(struct radeon_bo *bo,
> extern int radeon_bo_check_tiling(struct radeon_bo *bo, bool has_moved,
> bool force_drop);
> extern void radeon_bo_move_notify(struct ttm_buffer_object *bo,
> - unsigned int old_type,
> struct ttm_resource *new_mem);
> extern vm_fault_t radeon_bo_fault_reserve_notify(struct ttm_buffer_object *bo);
> extern int radeon_bo_get_surface_reg(struct radeon_bo *bo);
> diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
> index 0d1283cdc8fb..ae09a91a486a 100644
> --- a/drivers/gpu/drm/radeon/radeon_ttm.c
> +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
> @@ -199,7 +199,7 @@ static int radeon_bo_move(struct ttm_buffer_object *bo, bool evict,
> struct ttm_resource *old_mem = bo->resource;
> struct radeon_device *rdev;
> struct radeon_bo *rbo;
> - int r, old_type;
> + int r;
>
> if (new_mem->mem_type == TTM_PL_TT) {
> r = radeon_ttm_tt_bind(bo->bdev, bo->ttm, new_mem);
> @@ -216,9 +216,6 @@ static int radeon_bo_move(struct ttm_buffer_object *bo, bool evict,
> if (WARN_ON_ONCE(rbo->tbo.pin_count > 0))
> return -EINVAL;
>
> - /* Save old type for statistics update */
> - old_type = old_mem->mem_type;
> -
> rdev = radeon_get_rdev(bo->bdev);
> if (old_mem->mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) {
> ttm_bo_move_null(bo, new_mem);
> @@ -264,7 +261,7 @@ static int radeon_bo_move(struct ttm_buffer_object *bo, bool evict,
> out:
> /* update statistics */
> atomic64_add(bo->base.size, &rdev->num_bytes_moved);
> - radeon_bo_move_notify(bo, old_type, new_mem);
> + radeon_bo_move_notify(bo, new_mem);
> return 0;
> }
>
> @@ -679,16 +676,6 @@ bool radeon_ttm_tt_is_readonly(struct radeon_device *rdev,
> return !!(gtt->userflags & RADEON_GEM_USERPTR_READONLY);
> }
>
> -static void
> -radeon_bo_delete_mem_notify(struct ttm_buffer_object *bo)
> -{
> - unsigned int old_type = TTM_PL_SYSTEM;
> -
> - if (bo->resource)
> - old_type = bo->resource->mem_type;
> - radeon_bo_move_notify(bo, old_type, NULL);
Can we really drop the entire move_notify() here? It looks like it
does more than just accounting?
Otherwise changes look mechanical,
Reviewed-by: Matthew Auld <matthew.auld at intel.com>
> -}
> -
> static struct ttm_device_funcs radeon_bo_driver = {
> .ttm_tt_create = &radeon_ttm_tt_create,
> .ttm_tt_populate = &radeon_ttm_tt_populate,
> @@ -697,7 +684,6 @@ static struct ttm_device_funcs radeon_bo_driver = {
> .eviction_valuable = ttm_bo_eviction_valuable,
> .evict_flags = &radeon_evict_flags,
> .move = &radeon_bo_move,
> - .delete_mem_notify = &radeon_bo_delete_mem_notify,
> .io_mem_reserve = &radeon_ttm_io_mem_reserve,
> };
>
> --
> 2.25.1
>
More information about the dri-devel
mailing list