diff options
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.patch | 68 |
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 + |