aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0223-drm-amdgpu-search-only-the-BO-list-for-VM-mappings.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0223-drm-amdgpu-search-only-the-BO-list-for-VM-mappings.patch')
-rw-r--r--common/recipes-kernel/linux/files/0223-drm-amdgpu-search-only-the-BO-list-for-VM-mappings.patch68
1 files changed, 68 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0223-drm-amdgpu-search-only-the-BO-list-for-VM-mappings.patch b/common/recipes-kernel/linux/files/0223-drm-amdgpu-search-only-the-BO-list-for-VM-mappings.patch
new file mode 100644
index 00000000..8fa44ee1
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0223-drm-amdgpu-search-only-the-BO-list-for-VM-mappings.patch
@@ -0,0 +1,68 @@
+From 5553613307a3a3b79f7972bb583d854c44101e58 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Tue, 22 Dec 2015 16:06:12 +0100
+Subject: [PATCH 0223/1110] drm/amdgpu: search only the BO list for VM mappings
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Make UVD/VCE VM emulation more efficient.
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 20 +++++++++++++-------
+ 1 file changed, 13 insertions(+), 7 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+index dba4bad..bb37911 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+@@ -971,30 +971,36 @@ struct amdgpu_bo_va_mapping *
+ amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser,
+ uint64_t addr, struct amdgpu_bo **bo)
+ {
+- struct amdgpu_bo_list_entry *reloc;
+ struct amdgpu_bo_va_mapping *mapping;
++ unsigned i;
++
++ if (!parser->bo_list)
++ return NULL;
+
+ addr /= AMDGPU_GPU_PAGE_SIZE;
+
+- list_for_each_entry(reloc, &parser->validated, tv.head) {
+- if (!reloc->bo_va)
++ for (i = 0; i < parser->bo_list->num_entries; i++) {
++ struct amdgpu_bo_list_entry *lobj;
++
++ lobj = &parser->bo_list->array[i];
++ if (!lobj->bo_va)
+ continue;
+
+- list_for_each_entry(mapping, &reloc->bo_va->valids, list) {
++ list_for_each_entry(mapping, &lobj->bo_va->valids, list) {
+ if (mapping->it.start > addr ||
+ addr > mapping->it.last)
+ continue;
+
+- *bo = reloc->bo_va->bo;
++ *bo = lobj->bo_va->bo;
+ return mapping;
+ }
+
+- list_for_each_entry(mapping, &reloc->bo_va->invalids, list) {
++ list_for_each_entry(mapping, &lobj->bo_va->invalids, list) {
+ if (mapping->it.start > addr ||
+ addr > mapping->it.last)
+ continue;
+
+- *bo = reloc->bo_va->bo;
++ *bo = lobj->bo_va->bo;
+ return mapping;
+ }
+ }
+--
+2.7.4
+