Am 24.04.24 um 18:57 schrieb Friedrich Vock:
Used to dynamically adjust priorities of buffers at runtime, to react to changes in memory pressure/usage patterns.
And another big NAK. TTM priorities are meant to be static based on in kernel decisions which are not exposed to userspace.
In other words we can group BOs based on kernel, user, SVM etc... but never on something userspace can influence.
Regards, Christian.
Signed-off-by: Friedrich Vock <friedrich.vock@xxxxxx> --- drivers/gpu/drm/ttm/ttm_bo.c | 17 +++++++++++++++++ include/drm/ttm/ttm_bo.h | 2 ++ 2 files changed, 19 insertions(+) diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c index eae54cd4a7ce9..6ac939c58a6b8 100644 --- a/drivers/gpu/drm/ttm/ttm_bo.c +++ b/drivers/gpu/drm/ttm/ttm_bo.c @@ -112,6 +112,23 @@ void ttm_bo_set_bulk_move(struct ttm_buffer_object *bo, } EXPORT_SYMBOL(ttm_bo_set_bulk_move); +void ttm_bo_update_priority(struct ttm_buffer_object *bo, unsigned int new_prio) +{ + struct ttm_resource_manager *man; + + if (!bo->resource) + return; + + man = ttm_manager_type(bo->bdev, bo->resource->mem_type); + + spin_lock(&bo->bdev->lru_lock); + ttm_resource_del_bulk_move(bo->resource, bo); + bo->priority = new_prio; + ttm_resource_add_bulk_move(bo->resource, bo); + spin_unlock(&bo->bdev->lru_lock); +} +EXPORT_SYMBOL(ttm_bo_update_priority); + static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo, struct ttm_resource *mem, bool evict, struct ttm_operation_ctx *ctx, diff --git a/include/drm/ttm/ttm_bo.h b/include/drm/ttm/ttm_bo.h index 91299a3b6fcfa..51040bc443ea0 100644 --- a/include/drm/ttm/ttm_bo.h +++ b/include/drm/ttm/ttm_bo.h @@ -359,6 +359,8 @@ static inline void *ttm_kmap_obj_virtual(struct ttm_bo_kmap_obj *map, return map->virtual; } +void ttm_bo_update_priority(struct ttm_buffer_object *bo, + unsigned int new_prio); int ttm_bo_wait_ctx(struct ttm_buffer_object *bo, struct ttm_operation_ctx *ctx); -- 2.44.0