[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