aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/0186-drm-ttm-revise-ttm_bo_move_to_lru_tail-to-support-bu.patch
diff options
context:
space:
mode:
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.patch132
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
+