diff options
author | Christian König <christian.koenig@amd.com> | 2015-12-22 10:06:12 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-02-10 14:16:48 -0500 |
commit | 15486fd20cbe45cf56805ee5a67f7b25642efa9d (patch) | |
tree | 791d904263afbda10b17be391e29b0946676691a /drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | |
parent | 1ea863fd736eed8217a0b7bc5d0bd0de6b267b80 (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.c | 20 |
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 * | |||
928 | amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser, | 928 | amdgpu_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 | } |