diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 17 | 
1 files changed, 9 insertions, 8 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index d9503882ea97..040f4cb6ab2d 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -136,9 +136,6 @@ static int amdgpu_cs_p1_user_fence(struct amdgpu_cs_parser *p,  	bo = amdgpu_bo_ref(gem_to_amdgpu_bo(gobj));  	p->uf_entry.priority = 0;  	p->uf_entry.tv.bo = &bo->tbo; -	/* One for TTM and two for the CS job */ -	p->uf_entry.tv.num_shared = 3; -  	drm_gem_object_put(gobj);  	size = amdgpu_bo_size(bo); @@ -912,15 +909,19 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,  	mutex_lock(&p->bo_list->bo_list_mutex); -	/* One for TTM and one for the CS job */ +	/* One for TTM and one for each CS job */  	amdgpu_bo_list_for_each_entry(e, p->bo_list) -		e->tv.num_shared = 2; +		e->tv.num_shared = 1 + p->gang_size; +	p->uf_entry.tv.num_shared = 1 + p->gang_size;  	amdgpu_bo_list_get_list(p->bo_list, &p->validated);  	INIT_LIST_HEAD(&duplicates);  	amdgpu_vm_get_pd_bo(&fpriv->vm, &p->validated, &p->vm_pd); +	/* Two for VM updates, one for TTM and one for each CS job */ +	p->vm_pd.tv.num_shared = 3 + p->gang_size; +  	if (p->uf_entry.tv.bo && !ttm_to_amdgpu_bo(p->uf_entry.tv.bo)->parent)  		list_add(&p->uf_entry.tv.head, &p->validated); @@ -1653,15 +1654,15 @@ static int amdgpu_cs_wait_all_fences(struct amdgpu_device *adev,  			continue;  		r = dma_fence_wait_timeout(fence, true, timeout); +		if (r > 0 && fence->error) +			r = fence->error; +  		dma_fence_put(fence);  		if (r < 0)  			return r;  		if (r == 0)  			break; - -		if (fence->error) -			return fence->error;  	}  	memset(wait, 0, sizeof(*wait)); | 
