diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index b1dc7e1ed271..f428288d8363 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | |||
@@ -899,8 +899,6 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) | |||
899 | if (amdgpu_enable_scheduler && parser->num_ibs) { | 899 | if (amdgpu_enable_scheduler && parser->num_ibs) { |
900 | struct amdgpu_ring * ring = | 900 | struct amdgpu_ring * ring = |
901 | amdgpu_cs_parser_get_ring(adev, parser); | 901 | amdgpu_cs_parser_get_ring(adev, parser); |
902 | parser->ibs[parser->num_ibs - 1].sequence = atomic64_inc_return( | ||
903 | &parser->ctx->rings[ring->idx].entity.last_queued_v_seq); | ||
904 | if (ring->is_pte_ring || (parser->bo_list && parser->bo_list->has_userptr)) { | 902 | if (ring->is_pte_ring || (parser->bo_list && parser->bo_list->has_userptr)) { |
905 | r = amdgpu_cs_parser_prepare_job(parser); | 903 | r = amdgpu_cs_parser_prepare_job(parser); |
906 | if (r) | 904 | if (r) |
@@ -910,10 +908,21 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp) | |||
910 | parser->ring = ring; | 908 | parser->ring = ring; |
911 | parser->run_job = amdgpu_cs_parser_run_job; | 909 | parser->run_job = amdgpu_cs_parser_run_job; |
912 | parser->free_job = amdgpu_cs_parser_free_job; | 910 | parser->free_job = amdgpu_cs_parser_free_job; |
913 | amd_sched_push_job(ring->scheduler, | 911 | mutex_lock(&parser->job_lock); |
914 | &parser->ctx->rings[ring->idx].entity, | 912 | r = amd_sched_push_job(ring->scheduler, |
915 | parser); | 913 | &parser->ctx->rings[ring->idx].entity, |
916 | cs->out.handle = parser->ibs[parser->num_ibs - 1].sequence; | 914 | parser, |
915 | &parser->s_fence); | ||
916 | if (r) { | ||
917 | mutex_unlock(&parser->job_lock); | ||
918 | goto out; | ||
919 | } | ||
920 | parser->ibs[parser->num_ibs - 1].sequence = | ||
921 | amdgpu_ctx_add_fence(parser->ctx, ring, | ||
922 | &parser->s_fence->base, | ||
923 | parser->s_fence->v_seq); | ||
924 | cs->out.handle = parser->s_fence->v_seq; | ||
925 | mutex_unlock(&parser->job_lock); | ||
917 | up_read(&adev->exclusive_lock); | 926 | up_read(&adev->exclusive_lock); |
918 | return 0; | 927 | return 0; |
919 | } | 928 | } |