diff options
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0921-drm-amdgpu-put-VM-page-tables-directly-into-duplicat.patch')
-rw-r--r-- | meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0921-drm-amdgpu-put-VM-page-tables-directly-into-duplicat.patch | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0921-drm-amdgpu-put-VM-page-tables-directly-into-duplicat.patch b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0921-drm-amdgpu-put-VM-page-tables-directly-into-duplicat.patch new file mode 100644 index 00000000..f5c8eedf --- /dev/null +++ b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0921-drm-amdgpu-put-VM-page-tables-directly-into-duplicat.patch @@ -0,0 +1,116 @@ +From a3df42d0ae850e508d4bcf10eb9870f8da4c0c0a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> +Date: Fri, 11 Dec 2015 14:39:05 +0100 +Subject: [PATCH 0921/1050] drm/amdgpu: put VM page tables directly into + duplicates list +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +They share the reservation object with the page directory anyway. + +Signed-off-by: Christian König <christian.koenig@amd.com> +Reviewed-by: Alex Deucher <alexander.deucher@amd.com> +Reviewed-by: Chunming Zhou <david1.zhou@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu.h | 3 ++- + drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 4 ++-- + drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 2 +- + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 12 +++++++----- + 4 files changed, 12 insertions(+), 9 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +index 1a62df9..fbfad7e 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +@@ -986,7 +986,8 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm); + void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm); + struct amdgpu_bo_list_entry *amdgpu_vm_get_bos(struct amdgpu_device *adev, + struct amdgpu_vm *vm, +- struct list_head *head); ++ struct list_head *validated, ++ struct list_head *duplicates); + int amdgpu_vm_grab_id(struct amdgpu_vm *vm, struct amdgpu_ring *ring, + struct amdgpu_sync *sync); + void amdgpu_vm_flush(struct amdgpu_ring *ring, +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +index ef91635..cf5f3b7 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +@@ -406,8 +406,9 @@ static int amdgpu_cs_parser_relocs(struct amdgpu_cs_parser *p) + amdgpu_cs_buckets_get_list(&buckets, &p->validated); + } + ++ INIT_LIST_HEAD(&duplicates); + p->vm_bos = amdgpu_vm_get_bos(p->adev, &fpriv->vm, +- &p->validated); ++ &p->validated, &duplicates); + + if (p->uf.bo) + list_add(&p->uf_entry.tv.head, &p->validated); +@@ -415,7 +416,6 @@ static int amdgpu_cs_parser_relocs(struct amdgpu_cs_parser *p) + if (need_mmap_lock) + down_read(¤t->mm->mmap_sem); + +- INIT_LIST_HEAD(&duplicates); + r = ttm_eu_reserve_buffers(&p->ticket, &p->validated, true, &duplicates); + if (unlikely(r != 0)) + goto error_reserve; +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +index 840aac8..f2f4582 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +@@ -460,7 +460,7 @@ static void amdgpu_gem_va_update_vm(struct amdgpu_device *adev, + tv.shared = true; + list_add(&tv.head, &list); + +- vm_bos = amdgpu_vm_get_bos(adev, bo_va->vm, &list); ++ vm_bos = amdgpu_vm_get_bos(adev, bo_va->vm, &list, &duplicates); + if (!vm_bos) + return; + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +index a582ef5..6b3f4b9 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +@@ -78,14 +78,16 @@ static unsigned amdgpu_vm_directory_size(struct amdgpu_device *adev) + * amdgpu_vm_get_bos - add the vm BOs to a validation list + * + * @vm: vm providing the BOs +- * @head: head of validation list ++ * @validated: head of validation list ++ * @duplicates: head of duplicates list + * + * Add the page directory to the list of BOs to + * validate for command submission (cayman+). + */ + struct amdgpu_bo_list_entry *amdgpu_vm_get_bos(struct amdgpu_device *adev, +- struct amdgpu_vm *vm, +- struct list_head *head) ++ struct amdgpu_vm *vm, ++ struct list_head *validated, ++ struct list_head *duplicates) + { + struct amdgpu_bo_list_entry *list; + unsigned i, idx; +@@ -103,7 +105,7 @@ struct amdgpu_bo_list_entry *amdgpu_vm_get_bos(struct amdgpu_device *adev, + list[0].priority = 0; + list[0].tv.bo = &vm->page_directory->tbo; + list[0].tv.shared = true; +- list_add(&list[0].tv.head, head); ++ list_add(&list[0].tv.head, validated); + + for (i = 0, idx = 1; i <= vm->max_pde_used; i++) { + if (!vm->page_tables[i].bo) +@@ -115,7 +117,7 @@ struct amdgpu_bo_list_entry *amdgpu_vm_get_bos(struct amdgpu_device *adev, + list[idx].priority = 0; + list[idx].tv.bo = &list[idx].robj->tbo; + list[idx].tv.shared = true; +- list_add(&list[idx++].tv.head, head); ++ list_add(&list[idx++].tv.head, duplicates); + } + + return list; +-- +1.9.1 + |