aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2015-12-22 10:06:12 -0500
committerAlex Deucher <alexander.deucher@amd.com>2016-02-10 14:16:48 -0500
commit15486fd20cbe45cf56805ee5a67f7b25642efa9d (patch)
tree791d904263afbda10b17be391e29b0946676691a /drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
parent1ea863fd736eed8217a0b7bc5d0bd0de6b267b80 (diff)
drm/amdgpu: search only the BO list for VM mappings
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>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c20
1 files 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 a610465c5e0b..ac26e52d5923 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -928,30 +928,36 @@ struct amdgpu_bo_va_mapping *
928amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser, 928amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser,
929 uint64_t addr, struct amdgpu_bo **bo) 929 uint64_t addr, struct amdgpu_bo **bo)
930{ 930{
931 struct amdgpu_bo_list_entry *reloc;
932 struct amdgpu_bo_va_mapping *mapping; 931 struct amdgpu_bo_va_mapping *mapping;
932 unsigned i;
933
934 if (!parser->bo_list)
935 return NULL;
933 936
934 addr /= AMDGPU_GPU_PAGE_SIZE; 937 addr /= AMDGPU_GPU_PAGE_SIZE;
935 938
936 list_for_each_entry(reloc, &parser->validated, tv.head) { 939 for (i = 0; i < parser->bo_list->num_entries; i++) {
937 if (!reloc->bo_va) 940 struct amdgpu_bo_list_entry *lobj;
941
942 lobj = &parser->bo_list->array[i];
943 if (!lobj->bo_va)
938 continue; 944 continue;
939 945
940 list_for_each_entry(mapping, &reloc->bo_va->valids, list) { 946 list_for_each_entry(mapping, &lobj->bo_va->valids, list) {
941 if (mapping->it.start > addr || 947 if (mapping->it.start > addr ||
942 addr > mapping->it.last) 948 addr > mapping->it.last)
943 continue; 949 continue;
944 950
945 *bo = reloc->bo_va->bo; 951 *bo = lobj->bo_va->bo;
946 return mapping; 952 return mapping;
947 } 953 }
948 954
949 list_for_each_entry(mapping, &reloc->bo_va->invalids, list) { 955 list_for_each_entry(mapping, &lobj->bo_va->invalids, list) {
950 if (mapping->it.start > addr || 956 if (mapping->it.start > addr ||
951 addr > mapping->it.last) 957 addr > mapping->it.last)
952 continue; 958 continue;
953 959
954 *bo = reloc->bo_va->bo; 960 *bo = lobj->bo_va->bo;
955 return mapping; 961 return mapping;
956 } 962 }
957 } 963 }