From: Dave Airlie <airlied@xxxxxxxxxx> move notify can be gotten done inside moves instead of a separate callback for radeon. move notify is now only called from one other place where new_mem == NULL, so handle that properly. Signed-off-by: Dave Airlie <airlied@xxxxxxxxxx> --- drivers/gpu/drm/radeon/radeon_object.c | 28 +++++++++++++++++--------- drivers/gpu/drm/radeon/radeon_object.h | 4 ++++ drivers/gpu/drm/radeon/radeon_ttm.c | 8 +++++++- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c index 689426dd8480..36a16d7a24b2 100644 --- a/drivers/gpu/drm/radeon/radeon_object.c +++ b/drivers/gpu/drm/radeon/radeon_object.c @@ -754,6 +754,21 @@ int radeon_bo_check_tiling(struct radeon_bo *bo, bool has_moved, return radeon_bo_get_surface_reg(bo); } + +void radeon_bo_invalidate(struct radeon_bo *rbo) +{ + radeon_bo_check_tiling(rbo, 0, 1); + radeon_vm_bo_invalidate(rbo->rdev, rbo); +} + +void radeon_bo_memory_usage(struct radeon_bo *rbo, + uint32_t old_mem_type, + uint32_t new_mem_type) +{ + radeon_update_memory_usage(rbo, old_mem_type, -1); + radeon_update_memory_usage(rbo, new_mem_type, 1); +} + void radeon_bo_move_notify(struct ttm_buffer_object *bo, bool evict, struct ttm_resource *new_mem) @@ -763,16 +778,11 @@ void radeon_bo_move_notify(struct ttm_buffer_object *bo, if (!radeon_ttm_bo_is_radeon_bo(bo)) return; - rbo = container_of(bo, struct radeon_bo, tbo); - radeon_bo_check_tiling(rbo, 0, 1); - radeon_vm_bo_invalidate(rbo->rdev, rbo); - - /* update statistics */ - if (!new_mem) + /* the new_mem path is handled via the move callback now */ + if (new_mem) return; - - radeon_update_memory_usage(rbo, bo->mem.mem_type, -1); - radeon_update_memory_usage(rbo, new_mem->mem_type, 1); + rbo = container_of(bo, struct radeon_bo, tbo); + radeon_bo_invalidate(rbo); } int radeon_bo_fault_reserve_notify(struct ttm_buffer_object *bo) diff --git a/drivers/gpu/drm/radeon/radeon_object.h b/drivers/gpu/drm/radeon/radeon_object.h index 27cfb64057fe..6f886e2ffaf3 100644 --- a/drivers/gpu/drm/radeon/radeon_object.h +++ b/drivers/gpu/drm/radeon/radeon_object.h @@ -160,6 +160,10 @@ extern void radeon_bo_get_tiling_flags(struct radeon_bo *bo, u32 *tiling_flags, u32 *pitch); extern int radeon_bo_check_tiling(struct radeon_bo *bo, bool has_moved, bool force_drop); +void radeon_bo_memory_usage(struct radeon_bo *rbo, + uint32_t old_mem_type, + uint32_t new_mem_type); +void radeon_bo_invalidate(struct radeon_bo *rbo); extern void radeon_bo_move_notify(struct ttm_buffer_object *bo, bool evict, struct ttm_resource *new_mem); diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c index 10d25d3b83f2..e814b11187b3 100644 --- a/drivers/gpu/drm/radeon/radeon_ttm.c +++ b/drivers/gpu/drm/radeon/radeon_ttm.c @@ -316,12 +316,16 @@ static int radeon_bo_move(struct ttm_buffer_object *bo, bool evict, struct ttm_resource *old_mem = &bo->mem; int r; + rbo = container_of(bo, struct radeon_bo, tbo); + + radeon_bo_invalidate(rbo); + radeon_bo_memory_usage(rbo, bo->mem.mem_type, new_mem->mem_type); + r = ttm_bo_wait_ctx(bo, ctx); if (r) return r; /* Can't move a pinned BO */ - rbo = container_of(bo, struct radeon_bo, tbo); if (WARN_ON_ONCE(rbo->tbo.pin_count > 0)) return -EINVAL; @@ -361,6 +365,8 @@ static int radeon_bo_move(struct ttm_buffer_object *bo, bool evict, memcpy: r = ttm_bo_move_memcpy(bo, ctx, new_mem); if (r) { + radeon_bo_invalidate(rbo); + radeon_bo_memory_usage(rbo, new_mem->mem_type, old_mem->mem_type); return r; } } -- 2.27.0 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel