diff options
author | Christian König <christian.koenig@amd.com> | 2017-10-09 09:51:10 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-10-19 15:27:05 -0400 |
commit | 7a0a48ddf63bc9944b9690c6fa043ea4305f7f79 (patch) | |
tree | d46685fc1706f888223b0284affb3955f461e584 /drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | |
parent | e55f2b646df3318e24f12b8388ab6e5cccb3e92d (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.c | 7 |
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 | ||
1500 | err_free_fence_array: | 1505 | err_free_fence_array: |
1501 | for (i = 0; i < fence_count; i++) | 1506 | for (i = 0; i < fence_count; i++) |