[2/2] drm/amdgpu: set bulk_moveable to false when lru changed v2

Submitted by Zhou, David(ChunMing) on Jan. 14, 2019, 7:02 a.m.

Details

Message ID 20190114070231.16329-2-david1.zhou@amd.com
State New
Headers show
Series "Series without cover letter" ( rev: 1 ) in AMD X.Org drivers

Not browsing as part of any series.

Commit Message

Zhou, David(ChunMing) Jan. 14, 2019, 7:02 a.m.
if lru is changed, we cannot do bulk moving.
v2:
root bo isn't bulk moving, skip its change.

Change-Id: Ide0fe920295cc25f7cabcf41a6400519e5783f2a
Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c |  3 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c  | 22 ++++++++++++++++++++++
 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h  |  2 ++
 3 files changed, 26 insertions(+), 1 deletion(-)

Patch hide | download patch | download mbox

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index c91ec3101d00..b852abb9db0f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -1546,7 +1546,8 @@  static struct ttm_bo_driver amdgpu_bo_driver = {
 	.io_mem_reserve = &amdgpu_ttm_io_mem_reserve,
 	.io_mem_free = &amdgpu_ttm_io_mem_free,
 	.io_mem_pfn = amdgpu_ttm_io_mem_pfn,
-	.access_memory = &amdgpu_ttm_access_memory
+	.access_memory = &amdgpu_ttm_access_memory,
+	.del_from_lru_notify = &amdgpu_vm_del_from_lru_notify
 };
 
 /*
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index e73d152659a2..ef012d47cbeb 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -623,6 +623,28 @@  void amdgpu_vm_get_pd_bo(struct amdgpu_vm *vm,
 	list_add(&entry->tv.head, validated);
 }
 
+void amdgpu_vm_del_from_lru_notify(struct ttm_buffer_object *bo)
+{
+	struct amdgpu_bo *abo;
+	struct amdgpu_vm_bo_base *bo_base;
+
+	if (!amdgpu_bo_is_amdgpu_bo(bo))
+		return;
+
+	if (bo->mem.placement & TTM_PL_FLAG_NO_EVICT)
+		return;
+
+	abo = ttm_to_amdgpu_bo(bo);
+	if (!abo->parent)
+		return;
+	for (bo_base = abo->vm_bo; bo_base; bo_base = bo_base->next) {
+		struct amdgpu_vm *vm = bo_base->vm;
+
+		if (abo->tbo.resv == vm->root.base.bo->tbo.resv)
+			vm->bulk_moveable = false;
+	}
+
+}
 /**
  * amdgpu_vm_move_to_lru_tail - move all BOs to the end of LRU
  *
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
index e8dcfd59fc93..81ff8177f092 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
@@ -363,4 +363,6 @@  int amdgpu_vm_add_fault(struct amdgpu_retryfault_hashtable *fault_hash, u64 key)
 
 void amdgpu_vm_clear_fault(struct amdgpu_retryfault_hashtable *fault_hash, u64 key);
 
+void amdgpu_vm_del_from_lru_notify(struct ttm_buffer_object *bo);
+
 #endif

Comments

Am 14.01.19 um 08:02 schrieb Chunming Zhou:
> if lru is changed, we cannot do bulk moving.

> v2:

> root bo isn't bulk moving, skip its change.

>

> Change-Id: Ide0fe920295cc25f7cabcf41a6400519e5783f2a

> Signed-off-by: Chunming Zhou <david1.zhou@amd.com>


We could now remove all other cases where we set bulk_movable to false, 
but that can also be a follow up patch.

Reviewed-by: Christian König <christian.koenig@amd.com>


> ---

>   drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c |  3 ++-

>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c  | 22 ++++++++++++++++++++++

>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h  |  2 ++

>   3 files changed, 26 insertions(+), 1 deletion(-)

>

> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c

> index c91ec3101d00..b852abb9db0f 100644

> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c

> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c

> @@ -1546,7 +1546,8 @@ static struct ttm_bo_driver amdgpu_bo_driver = {

>   	.io_mem_reserve = &amdgpu_ttm_io_mem_reserve,

>   	.io_mem_free = &amdgpu_ttm_io_mem_free,

>   	.io_mem_pfn = amdgpu_ttm_io_mem_pfn,

> -	.access_memory = &amdgpu_ttm_access_memory

> +	.access_memory = &amdgpu_ttm_access_memory,

> +	.del_from_lru_notify = &amdgpu_vm_del_from_lru_notify

>   };

>   

>   /*

> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c

> index e73d152659a2..ef012d47cbeb 100644

> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c

> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c

> @@ -623,6 +623,28 @@ void amdgpu_vm_get_pd_bo(struct amdgpu_vm *vm,

>   	list_add(&entry->tv.head, validated);

>   }

>   

> +void amdgpu_vm_del_from_lru_notify(struct ttm_buffer_object *bo)

> +{

> +	struct amdgpu_bo *abo;

> +	struct amdgpu_vm_bo_base *bo_base;

> +

> +	if (!amdgpu_bo_is_amdgpu_bo(bo))

> +		return;

> +

> +	if (bo->mem.placement & TTM_PL_FLAG_NO_EVICT)

> +		return;

> +

> +	abo = ttm_to_amdgpu_bo(bo);

> +	if (!abo->parent)

> +		return;

> +	for (bo_base = abo->vm_bo; bo_base; bo_base = bo_base->next) {

> +		struct amdgpu_vm *vm = bo_base->vm;

> +

> +		if (abo->tbo.resv == vm->root.base.bo->tbo.resv)

> +			vm->bulk_moveable = false;

> +	}

> +

> +}

>   /**

>    * amdgpu_vm_move_to_lru_tail - move all BOs to the end of LRU

>    *

> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h

> index e8dcfd59fc93..81ff8177f092 100644

> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h

> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h

> @@ -363,4 +363,6 @@ int amdgpu_vm_add_fault(struct amdgpu_retryfault_hashtable *fault_hash, u64 key)

>   

>   void amdgpu_vm_clear_fault(struct amdgpu_retryfault_hashtable *fault_hash, u64 key);

>   

> +void amdgpu_vm_del_from_lru_notify(struct ttm_buffer_object *bo);

> +

>   #endif