Commit a32ba6bd authored by Christian König's avatar Christian König

drm/radeon: remove resource accounting v2

Use the one provided by TTM instead.

v2: drop new_mem parameter as well
Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Tested-by: default avatarBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: default avatarMatthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220214093439.2989-5-christian.koenig@amd.com
parent d5c6f647
...@@ -2462,8 +2462,6 @@ struct radeon_device { ...@@ -2462,8 +2462,6 @@ struct radeon_device {
struct radeon_vm_manager vm_manager; struct radeon_vm_manager vm_manager;
struct mutex gpu_clock_mutex; struct mutex gpu_clock_mutex;
/* memory stats */ /* memory stats */
atomic64_t vram_usage;
atomic64_t gtt_usage;
atomic64_t num_bytes_moved; atomic64_t num_bytes_moved;
atomic_t gpu_reset_counter; atomic_t gpu_reset_counter;
/* ACPI interface */ /* ACPI interface */
......
...@@ -241,6 +241,7 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) ...@@ -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 drm_radeon_info *info = data;
struct radeon_mode_info *minfo = &rdev->mode_info; struct radeon_mode_info *minfo = &rdev->mode_info;
uint32_t *value, value_tmp, *value_ptr, value_size; uint32_t *value, value_tmp, *value_ptr, value_size;
struct ttm_resource_manager *man;
uint64_t value64; uint64_t value64;
struct drm_crtc *crtc; struct drm_crtc *crtc;
int i, found; int i, found;
...@@ -550,12 +551,14 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) ...@@ -550,12 +551,14 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
case RADEON_INFO_VRAM_USAGE: case RADEON_INFO_VRAM_USAGE:
value = (uint32_t*)&value64; value = (uint32_t*)&value64;
value_size = sizeof(uint64_t); 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; break;
case RADEON_INFO_GTT_USAGE: case RADEON_INFO_GTT_USAGE:
value = (uint32_t*)&value64; value = (uint32_t*)&value64;
value_size = sizeof(uint64_t); 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; break;
case RADEON_INFO_ACTIVE_CU_COUNT: case RADEON_INFO_ACTIVE_CU_COUNT:
if (rdev->family >= CHIP_BONAIRE) if (rdev->family >= CHIP_BONAIRE)
......
...@@ -49,27 +49,6 @@ static void radeon_bo_clear_surface_reg(struct radeon_bo *bo); ...@@ -49,27 +49,6 @@ static void radeon_bo_clear_surface_reg(struct radeon_bo *bo);
* function are calling it. * 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) static void radeon_ttm_bo_destroy(struct ttm_buffer_object *tbo)
{ {
struct radeon_bo *bo; struct radeon_bo *bo;
...@@ -434,7 +413,9 @@ void radeon_bo_fini(struct radeon_device *rdev) ...@@ -434,7 +413,9 @@ void radeon_bo_fini(struct radeon_device *rdev)
static u64 radeon_bo_get_threshold_for_moves(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 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. /* This function is based on the current VRAM usage.
* *
...@@ -724,16 +705,10 @@ int radeon_bo_check_tiling(struct radeon_bo *bo, bool has_moved, ...@@ -724,16 +705,10 @@ int radeon_bo_check_tiling(struct radeon_bo *bo, bool has_moved,
return radeon_bo_get_surface_reg(bo); return radeon_bo_get_surface_reg(bo);
} }
void radeon_bo_move_notify(struct ttm_buffer_object *bo, void radeon_bo_move_notify(struct ttm_buffer_object *bo)
unsigned int old_type,
struct ttm_resource *new_mem)
{ {
struct radeon_bo *rbo; 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)) if (!radeon_ttm_bo_is_radeon_bo(bo))
return; return;
......
...@@ -160,9 +160,7 @@ extern void radeon_bo_get_tiling_flags(struct radeon_bo *bo, ...@@ -160,9 +160,7 @@ extern void radeon_bo_get_tiling_flags(struct radeon_bo *bo,
u32 *tiling_flags, u32 *pitch); u32 *tiling_flags, u32 *pitch);
extern int radeon_bo_check_tiling(struct radeon_bo *bo, bool has_moved, extern int radeon_bo_check_tiling(struct radeon_bo *bo, bool has_moved,
bool force_drop); bool force_drop);
extern void radeon_bo_move_notify(struct ttm_buffer_object *bo, 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 vm_fault_t radeon_bo_fault_reserve_notify(struct ttm_buffer_object *bo);
extern int radeon_bo_get_surface_reg(struct radeon_bo *bo); extern int radeon_bo_get_surface_reg(struct radeon_bo *bo);
extern void radeon_bo_fence(struct radeon_bo *bo, struct radeon_fence *fence, extern void radeon_bo_fence(struct radeon_bo *bo, struct radeon_fence *fence,
......
...@@ -199,7 +199,7 @@ static int radeon_bo_move(struct ttm_buffer_object *bo, bool evict, ...@@ -199,7 +199,7 @@ static int radeon_bo_move(struct ttm_buffer_object *bo, bool evict,
struct ttm_resource *old_mem = bo->resource; struct ttm_resource *old_mem = bo->resource;
struct radeon_device *rdev; struct radeon_device *rdev;
struct radeon_bo *rbo; struct radeon_bo *rbo;
int r, old_type; int r;
if (new_mem->mem_type == TTM_PL_TT) { if (new_mem->mem_type == TTM_PL_TT) {
r = radeon_ttm_tt_bind(bo->bdev, bo->ttm, new_mem); 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, ...@@ -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)) if (WARN_ON_ONCE(rbo->tbo.pin_count > 0))
return -EINVAL; return -EINVAL;
/* Save old type for statistics update */
old_type = old_mem->mem_type;
rdev = radeon_get_rdev(bo->bdev); rdev = radeon_get_rdev(bo->bdev);
if (old_mem->mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) { if (old_mem->mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) {
ttm_bo_move_null(bo, new_mem); ttm_bo_move_null(bo, new_mem);
...@@ -264,7 +261,7 @@ static int radeon_bo_move(struct ttm_buffer_object *bo, bool evict, ...@@ -264,7 +261,7 @@ static int radeon_bo_move(struct ttm_buffer_object *bo, bool evict,
out: out:
/* update statistics */ /* update statistics */
atomic64_add(bo->base.size, &rdev->num_bytes_moved); atomic64_add(bo->base.size, &rdev->num_bytes_moved);
radeon_bo_move_notify(bo, old_type, new_mem); radeon_bo_move_notify(bo);
return 0; return 0;
} }
...@@ -679,16 +676,6 @@ bool radeon_ttm_tt_is_readonly(struct radeon_device *rdev, ...@@ -679,16 +676,6 @@ bool radeon_ttm_tt_is_readonly(struct radeon_device *rdev,
return !!(gtt->userflags & RADEON_GEM_USERPTR_READONLY); 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);
}
static struct ttm_device_funcs radeon_bo_driver = { static struct ttm_device_funcs radeon_bo_driver = {
.ttm_tt_create = &radeon_ttm_tt_create, .ttm_tt_create = &radeon_ttm_tt_create,
.ttm_tt_populate = &radeon_ttm_tt_populate, .ttm_tt_populate = &radeon_ttm_tt_populate,
...@@ -697,7 +684,6 @@ static struct ttm_device_funcs radeon_bo_driver = { ...@@ -697,7 +684,6 @@ static struct ttm_device_funcs radeon_bo_driver = {
.eviction_valuable = ttm_bo_eviction_valuable, .eviction_valuable = ttm_bo_eviction_valuable,
.evict_flags = &radeon_evict_flags, .evict_flags = &radeon_evict_flags,
.move = &radeon_bo_move, .move = &radeon_bo_move,
.delete_mem_notify = &radeon_bo_delete_mem_notify,
.io_mem_reserve = &radeon_ttm_io_mem_reserve, .io_mem_reserve = &radeon_ttm_io_mem_reserve,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment