diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 18 | 
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index 459150460815..8516c814bc9b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -109,6 +109,7 @@ static int amdgpu_cs_p1_ib(struct amdgpu_cs_parser *p,  		return r;  	++(num_ibs[r]); +	p->gang_leader_idx = r;  	return 0;  } @@ -298,7 +299,7 @@ static int amdgpu_cs_pass1(struct amdgpu_cs_parser *p,  		if (ret)  			goto free_all_kdata;  	} -	p->gang_leader = p->jobs[p->gang_size - 1]; +	p->gang_leader = p->jobs[p->gang_leader_idx];  	if (p->ctx->vram_lost_counter != p->gang_leader->vram_lost_counter) {  		ret = -ECANCELED; @@ -1210,10 +1211,9 @@ static int amdgpu_cs_sync_rings(struct amdgpu_cs_parser *p)  			return r;  	} -	r = amdgpu_ctx_wait_prev_fence(p->ctx, p->entities[p->gang_size - 1]); +	r = amdgpu_ctx_wait_prev_fence(p->ctx, p->entities[p->gang_leader_idx]);  	if (r && r != -ERESTARTSYS)  		DRM_ERROR("amdgpu_ctx_wait_prev_fence failed.\n"); -  	return r;  } @@ -1247,9 +1247,12 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,  	for (i = 0; i < p->gang_size; ++i)  		drm_sched_job_arm(&p->jobs[i]->base); -	for (i = 0; i < (p->gang_size - 1); ++i) { +	for (i = 0; i < p->gang_size; ++i) {  		struct dma_fence *fence; +		if (p->jobs[i] == leader) +			continue; +  		fence = &p->jobs[i]->base.s_fence->scheduled;  		r = drm_sched_job_add_dependency(&leader->base, fence);  		if (r) @@ -1286,7 +1289,10 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,  	list_for_each_entry(e, &p->validated, tv.head) {  		/* Everybody except for the gang leader uses READ */ -		for (i = 0; i < (p->gang_size - 1); ++i) { +		for (i = 0; i < p->gang_size; ++i) { +			if (p->jobs[i] == leader) +				continue; +  			dma_resv_add_fence(e->tv.bo->base.resv,  					   &p->jobs[i]->base.s_fence->finished,  					   DMA_RESV_USAGE_READ); @@ -1296,7 +1302,7 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,  		e->tv.num_shared = 0;  	} -	seq = amdgpu_ctx_add_fence(p->ctx, p->entities[p->gang_size - 1], +	seq = amdgpu_ctx_add_fence(p->ctx, p->entities[p->gang_leader_idx],  				   p->fence);  	amdgpu_cs_post_dependencies(p);  | 
