drm/amdgpu: fix using shared fence for exported BOs v2
It is perfectly possible that the BO list is created before the BO is exported. While at it clean up setting shared to one instead of true. v2: add comment and simplify logic Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Huang Rui <ray.huang@amd.com> Acked-by: Junwei Zhang <Jerry.Zhang@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
a9f34c70fd
commit
049aca4363
|
@ -118,7 +118,6 @@ int amdgpu_bo_list_create(struct amdgpu_device *adev, struct drm_file *filp,
|
||||||
entry->priority = min(info[i].bo_priority,
|
entry->priority = min(info[i].bo_priority,
|
||||||
AMDGPU_BO_LIST_MAX_PRIORITY);
|
AMDGPU_BO_LIST_MAX_PRIORITY);
|
||||||
entry->tv.bo = &bo->tbo;
|
entry->tv.bo = &bo->tbo;
|
||||||
entry->tv.num_shared = !bo->prime_shared_count;
|
|
||||||
|
|
||||||
if (bo->preferred_domains == AMDGPU_GEM_DOMAIN_GDS)
|
if (bo->preferred_domains == AMDGPU_GEM_DOMAIN_GDS)
|
||||||
list->gds_obj = bo;
|
list->gds_obj = bo;
|
||||||
|
|
|
@ -598,6 +598,9 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
amdgpu_bo_list_for_each_entry(e, p->bo_list)
|
||||||
|
e->tv.num_shared = 1;
|
||||||
|
|
||||||
amdgpu_bo_list_get_list(p->bo_list, &p->validated);
|
amdgpu_bo_list_get_list(p->bo_list, &p->validated);
|
||||||
if (p->bo_list->first_userptr != p->bo_list->num_entries)
|
if (p->bo_list->first_userptr != p->bo_list->num_entries)
|
||||||
p->mn = amdgpu_mn_get(p->adev, AMDGPU_MN_TYPE_GFX);
|
p->mn = amdgpu_mn_get(p->adev, AMDGPU_MN_TYPE_GFX);
|
||||||
|
@ -717,8 +720,14 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
|
||||||
gws = p->bo_list->gws_obj;
|
gws = p->bo_list->gws_obj;
|
||||||
oa = p->bo_list->oa_obj;
|
oa = p->bo_list->oa_obj;
|
||||||
|
|
||||||
amdgpu_bo_list_for_each_entry(e, p->bo_list)
|
amdgpu_bo_list_for_each_entry(e, p->bo_list) {
|
||||||
e->bo_va = amdgpu_vm_bo_find(vm, ttm_to_amdgpu_bo(e->tv.bo));
|
struct amdgpu_bo *bo = ttm_to_amdgpu_bo(e->tv.bo);
|
||||||
|
|
||||||
|
/* Make sure we use the exclusive slot for shared BOs */
|
||||||
|
if (bo->prime_shared_count)
|
||||||
|
e->tv.num_shared = 0;
|
||||||
|
e->bo_va = amdgpu_vm_bo_find(vm, bo);
|
||||||
|
}
|
||||||
|
|
||||||
if (gds) {
|
if (gds) {
|
||||||
p->job->gds_base = amdgpu_bo_gpu_offset(gds) >> PAGE_SHIFT;
|
p->job->gds_base = amdgpu_bo_gpu_offset(gds) >> PAGE_SHIFT;
|
||||||
|
|
Loading…
Reference in New Issue