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 | |||
214 | case AMDGPU_CHUNK_ID_DEPENDENCIES: | 214 | case AMDGPU_CHUNK_ID_DEPENDENCIES: |
215 | case AMDGPU_CHUNK_ID_SYNCOBJ_IN: | 215 | case AMDGPU_CHUNK_ID_SYNCOBJ_IN: |
216 | case AMDGPU_CHUNK_ID_SYNCOBJ_OUT: | 216 | case AMDGPU_CHUNK_ID_SYNCOBJ_OUT: |
217 | case AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES: | ||
217 | break; | 218 | break; |
218 | 219 | ||
219 | default: | 220 | default: |
@@ -1090,6 +1091,15 @@ static int amdgpu_cs_process_fence_dep(struct amdgpu_cs_parser *p, | |||
1090 | 1091 | ||
1091 | fence = amdgpu_ctx_get_fence(ctx, entity, | 1092 | fence = amdgpu_ctx_get_fence(ctx, entity, |
1092 | deps[i].handle); | 1093 | deps[i].handle); |
1094 | |||
1095 | if (chunk->chunk_id == AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES) { | ||
1096 | struct drm_sched_fence *s_fence = to_drm_sched_fence(fence); | ||
1097 | struct dma_fence *old = fence; | ||
1098 | |||
1099 | fence = dma_fence_get(&s_fence->scheduled); | ||
1100 | dma_fence_put(old); | ||
1101 | } | ||
1102 | |||
1093 | if (IS_ERR(fence)) { | 1103 | if (IS_ERR(fence)) { |
1094 | r = PTR_ERR(fence); | 1104 | r = PTR_ERR(fence); |
1095 | amdgpu_ctx_put(ctx); | 1105 | amdgpu_ctx_put(ctx); |
@@ -1177,7 +1187,8 @@ static int amdgpu_cs_dependencies(struct amdgpu_device *adev, | |||
1177 | 1187 | ||
1178 | chunk = &p->chunks[i]; | 1188 | chunk = &p->chunks[i]; |
1179 | 1189 | ||
1180 | if (chunk->chunk_id == AMDGPU_CHUNK_ID_DEPENDENCIES) { | 1190 | if (chunk->chunk_id == AMDGPU_CHUNK_ID_DEPENDENCIES || |
1191 | chunk->chunk_id == AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES) { | ||
1181 | r = amdgpu_cs_process_fence_dep(p, chunk); | 1192 | r = amdgpu_cs_process_fence_dep(p, chunk); |
1182 | if (r) | 1193 | if (r) |
1183 | return r; | 1194 | return r; |