diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 13 | 
1 files changed, 12 insertions, 1 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index 1c49b8266d69..52a5e4fdc95b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c @@ -214,6 +214,7 @@ static int amdgpu_cs_parser_init(struct amdgpu_cs_parser *p, union drm_amdgpu_cs  		case AMDGPU_CHUNK_ID_DEPENDENCIES:  		case AMDGPU_CHUNK_ID_SYNCOBJ_IN:  		case AMDGPU_CHUNK_ID_SYNCOBJ_OUT: +		case AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES:  			break;  		default: @@ -1090,6 +1091,15 @@ static int amdgpu_cs_process_fence_dep(struct amdgpu_cs_parser *p,  		fence = amdgpu_ctx_get_fence(ctx, entity,  					     deps[i].handle); + +		if (chunk->chunk_id == AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES) { +			struct drm_sched_fence *s_fence = to_drm_sched_fence(fence); +			struct dma_fence *old = fence; + +			fence = dma_fence_get(&s_fence->scheduled); +			dma_fence_put(old); +		} +  		if (IS_ERR(fence)) {  			r = PTR_ERR(fence);  			amdgpu_ctx_put(ctx); @@ -1177,7 +1187,8 @@ static int amdgpu_cs_dependencies(struct amdgpu_device *adev,  		chunk = &p->chunks[i]; -		if (chunk->chunk_id == AMDGPU_CHUNK_ID_DEPENDENCIES) { +		if (chunk->chunk_id == AMDGPU_CHUNK_ID_DEPENDENCIES || +		    chunk->chunk_id == AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES) {  			r = amdgpu_cs_process_fence_dep(p, chunk);  			if (r)  				return r; | 

