aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2017-10-09 09:51:10 -0400
committerAlex Deucher <alexander.deucher@amd.com>2017-10-19 15:27:05 -0400
commit7a0a48ddf63bc9944b9690c6fa043ea4305f7f79 (patch)
treed46685fc1706f888223b0284affb3955f461e584 /drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
parente55f2b646df3318e24f12b8388ab6e5cccb3e92d (diff)
drm/amdgpu: set -ECANCELED when dropping jobs
And return from the wait functions the fence error code. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index b355189533d2..2ae5d523ca10 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -1298,6 +1298,8 @@ int amdgpu_cs_wait_ioctl(struct drm_device *dev, void *data,
1298 r = PTR_ERR(fence); 1298 r = PTR_ERR(fence);
1299 else if (fence) { 1299 else if (fence) {
1300 r = dma_fence_wait_timeout(fence, true, timeout); 1300 r = dma_fence_wait_timeout(fence, true, timeout);
1301 if (r > 0 && fence->error)
1302 r = fence->error;
1301 dma_fence_put(fence); 1303 dma_fence_put(fence);
1302 } else 1304 } else
1303 r = 1; 1305 r = 1;
@@ -1435,6 +1437,9 @@ static int amdgpu_cs_wait_all_fences(struct amdgpu_device *adev,
1435 1437
1436 if (r == 0) 1438 if (r == 0)
1437 break; 1439 break;
1440
1441 if (fence->error)
1442 return fence->error;
1438 } 1443 }
1439 1444
1440 memset(wait, 0, sizeof(*wait)); 1445 memset(wait, 0, sizeof(*wait));
@@ -1495,7 +1500,7 @@ out:
1495 wait->out.status = (r > 0); 1500 wait->out.status = (r > 0);
1496 wait->out.first_signaled = first; 1501 wait->out.first_signaled = first;
1497 /* set return value 0 to indicate success */ 1502 /* set return value 0 to indicate success */
1498 r = 0; 1503 r = array[first]->error;
1499 1504
1500err_free_fence_array: 1505err_free_fence_array:
1501 for (i = 0; i < fence_count; i++) 1506 for (i = 0; i < fence_count; i++)