Commit 4985c9fc authored by Roger He's avatar Roger He Committed by Alex Deucher
Browse files

drm/ttm: enable eviction for Per-VM-BO



allow eviction of BOs reserved by the caller when they are
not part of the current working set.

Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Signed-off-by: default avatarRoger He <Hongbo.He@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 9251859a
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -709,7 +709,6 @@ bool ttm_bo_eviction_valuable(struct ttm_buffer_object *bo,
EXPORT_SYMBOL(ttm_bo_eviction_valuable);

static int ttm_mem_evict_first(struct ttm_bo_device *bdev,
			       struct reservation_object *resv,
			       uint32_t mem_type,
			       const struct ttm_place *place,
			       struct ttm_operation_ctx *ctx)
@@ -724,8 +723,9 @@ static int ttm_mem_evict_first(struct ttm_bo_device *bdev,
	spin_lock(&glob->lru_lock);
	for (i = 0; i < TTM_MAX_BO_PRIORITY; ++i) {
		list_for_each_entry(bo, &man->lru[i], lru) {
			if (bo->resv == resv) {
				if (list_empty(&bo->ddestroy))
			if (bo->resv == ctx->resv) {
				if (!ctx->allow_reserved_eviction &&
				    list_empty(&bo->ddestroy))
					continue;
			} else {
				locked = reservation_object_trylock(bo->resv);
@@ -837,7 +837,7 @@ static int ttm_bo_mem_force_space(struct ttm_buffer_object *bo,
			return ret;
		if (mem->mm_node)
			break;
		ret = ttm_mem_evict_first(bdev, bo->resv, mem_type, place, ctx);
		ret = ttm_mem_evict_first(bdev, mem_type, place, ctx);
		if (unlikely(ret != 0))
			return ret;
	} while (1);
@@ -1334,8 +1334,7 @@ static int ttm_bo_force_list_clean(struct ttm_bo_device *bdev,
	for (i = 0; i < TTM_MAX_BO_PRIORITY; ++i) {
		while (!list_empty(&man->lru[i])) {
			spin_unlock(&glob->lru_lock);
			ret = ttm_mem_evict_first(bdev, NULL, mem_type,
						  NULL, &ctx);
			ret = ttm_mem_evict_first(bdev, mem_type, NULL, &ctx);
			if (ret)
				return ret;
			spin_lock(&glob->lru_lock);