diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0186-drm-ttm-revise-ttm_bo_move_to_lru_tail-to-support-bu.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/0186-drm-ttm-revise-ttm_bo_move_to_lru_tail-to-support-bu.patch | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0186-drm-ttm-revise-ttm_bo_move_to_lru_tail-to-support-bu.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0186-drm-ttm-revise-ttm_bo_move_to_lru_tail-to-support-bu.patch new file mode 100644 index 00000000..55a4092d --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0186-drm-ttm-revise-ttm_bo_move_to_lru_tail-to-support-bu.patch @@ -0,0 +1,132 @@ +From 2c6a48c94cfb89c1eef528848e2fb0e562badab0 Mon Sep 17 00:00:00 2001 +From: Christian Koenig <christian.koenig@amd.com> +Date: Mon, 6 Aug 2018 17:05:30 +0800 +Subject: [PATCH 0186/2940] drm/ttm: revise ttm_bo_move_to_lru_tail to support + bulk moves +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When move a BO to the end of LRU, it need remember the BO positions. +Make sure all moved bo in between "first" and "last". And they will be bulk +moving together. + +Signed-off-by: Christian König <christian.koenig@amd.com> +Signed-off-by: Huang Rui <ray.huang@amd.com> +Tested-by: Mike Lothian <mike@fireburn.co.uk> +Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de> +Acked-by: Chunming Zhou <david1.zhou@amd.com> +Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +Signed-off-by: Kalyan Alle <kalyan.alle@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 8 +++---- + drivers/gpu/drm/ttm/ttm_bo.c | 32 ++++++++++++++++++++++---- + include/drm/ttm/ttm_bo_api.h | 6 ++++- + 3 files changed, 37 insertions(+), 9 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +index 95e1592078aa..52b1cdea845a 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +@@ -298,9 +298,9 @@ int amdgpu_vm_validate_pt_bos(struct amdgpu_device *adev, struct amdgpu_vm *vm, + + if (bo->parent) { + spin_lock(&glob->lru_lock); +- ttm_bo_move_to_lru_tail(&bo->tbo); ++ ttm_bo_move_to_lru_tail(&bo->tbo, NULL); + if (bo->shadow) +- ttm_bo_move_to_lru_tail(&bo->shadow->tbo); ++ ttm_bo_move_to_lru_tail(&bo->shadow->tbo, NULL); + spin_unlock(&glob->lru_lock); + } + +@@ -320,9 +320,9 @@ int amdgpu_vm_validate_pt_bos(struct amdgpu_device *adev, struct amdgpu_vm *vm, + if (!bo->parent) + continue; + +- ttm_bo_move_to_lru_tail(&bo->tbo); ++ ttm_bo_move_to_lru_tail(&bo->tbo, NULL); + if (bo->shadow) +- ttm_bo_move_to_lru_tail(&bo->shadow->tbo); ++ ttm_bo_move_to_lru_tail(&bo->shadow->tbo, NULL); + } + spin_unlock(&glob->lru_lock); + +diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c +index 7c484729f9b2..241b1fcf99c6 100644 +--- a/drivers/gpu/drm/ttm/ttm_bo.c ++++ b/drivers/gpu/drm/ttm/ttm_bo.c +@@ -214,12 +214,36 @@ void ttm_bo_del_sub_from_lru(struct ttm_buffer_object *bo) + } + EXPORT_SYMBOL(ttm_bo_del_sub_from_lru); + +-void ttm_bo_move_to_lru_tail(struct ttm_buffer_object *bo) ++static void ttm_bo_bulk_move_set_pos(struct ttm_lru_bulk_move_pos *pos, ++ struct ttm_buffer_object *bo) + { +- reservation_object_assert_held(bo->resv); ++ if (!pos->first) ++ pos->first = bo; ++ pos->last = bo; ++} + +- ttm_bo_del_from_lru(bo); +- ttm_bo_add_to_lru(bo); ++void ttm_bo_move_to_lru_tail(struct ttm_buffer_object *bo, ++ struct ttm_lru_bulk_move *bulk) ++{ ++ reservation_object_assert_held(bo->resv); ++ ++ ttm_bo_del_from_lru(bo); ++ ttm_bo_add_to_lru(bo); ++ ++ if (bulk && !(bo->mem.placement & TTM_PL_FLAG_NO_EVICT)) { ++ switch (bo->mem.mem_type) { ++ case TTM_PL_TT: ++ ttm_bo_bulk_move_set_pos(&bulk->tt[bo->priority], bo); ++ break; ++ ++ case TTM_PL_VRAM: ++ ttm_bo_bulk_move_set_pos(&bulk->vram[bo->priority], bo); ++ break; ++ } ++ if (bo->ttm && !(bo->ttm->page_flags & ++ (TTM_PAGE_FLAG_SG | TTM_PAGE_FLAG_SWAPPED))) ++ ttm_bo_bulk_move_set_pos(&bulk->swap[bo->priority], bo); ++ } + } + EXPORT_SYMBOL(ttm_bo_move_to_lru_tail); + +diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h +index 84916abe1667..92d0a1e892c3 100644 +--- a/include/drm/ttm/ttm_bo_api.h ++++ b/include/drm/ttm/ttm_bo_api.h +@@ -51,6 +51,8 @@ struct ttm_placement; + + struct ttm_place; + ++struct ttm_lru_bulk_move; ++ + /** + * struct ttm_bus_placement + * +@@ -406,12 +408,14 @@ void ttm_bo_del_from_lru(struct ttm_buffer_object *bo); + * ttm_bo_move_to_lru_tail + * + * @bo: The buffer object. ++ * @bulk: optional bulk move structure to remember BO positions + * + * Move this BO to the tail of all lru lists used to lookup and reserve an + * object. This function must be called with struct ttm_bo_global::lru_lock + * held, and is used to make a BO less likely to be considered for eviction. + */ +-void ttm_bo_move_to_lru_tail(struct ttm_buffer_object *bo); ++void ttm_bo_move_to_lru_tail(struct ttm_buffer_object *bo, ++ struct ttm_lru_bulk_move *bulk); + + /** + * ttm_bo_lock_delayed_workqueue +-- +2.17.1 + |