[PATCH 4/4] drm/amdgpu: set -ECANCELED when dropping jobs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 09.10.2017 17:34, Christian König wrote:
> From: Christian König <christian.koenig at amd.com>
> 
> And return from the wait functions the fence error code.
> 
> Signed-off-by: Christian König <christian.koenig at amd.com>

For the series:

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>

> ---
>   drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c  | 7 ++++++-
>   drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 1 +
>   2 files changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> index 359c89c..0185d35 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
> @@ -1283,6 +1283,8 @@ int amdgpu_cs_wait_ioctl(struct drm_device *dev, void *data,
>   		r = PTR_ERR(fence);
>   	else if (fence) {
>   		r = dma_fence_wait_timeout(fence, true, timeout);
> +		if (r > 0 && fence->error)
> +			r = fence->error;
>   		dma_fence_put(fence);
>   	} else
>   		r = 1;
> @@ -1420,6 +1422,9 @@ static int amdgpu_cs_wait_all_fences(struct amdgpu_device *adev,
>   
>   		if (r == 0)
>   			break;
> +
> +		if (fence->error)
> +			return fence->error;
>   	}
>   
>   	memset(wait, 0, sizeof(*wait));
> @@ -1480,7 +1485,7 @@ static int amdgpu_cs_wait_any_fence(struct amdgpu_device *adev,
>   	wait->out.status = (r > 0);
>   	wait->out.first_signaled = first;
>   	/* set return value 0 to indicate success */
> -	r = 0;
> +	r = array[first]->error;
>   
>   err_free_fence_array:
>   	for (i = 0; i < fence_count; i++)
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
> index c76d17c..7067edf 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
> @@ -194,6 +194,7 @@ static struct dma_fence *amdgpu_job_run(struct amd_sched_job *sched_job)
>   	trace_amdgpu_sched_run_job(job);
>   	/* skip ib schedule when vram is lost */
>   	if (job->vram_lost_counter != atomic_read(&adev->vram_lost_counter)) {
> +		dma_fence_set_error(&job->base.s_fence->finished, -ECANCELED);
>   		DRM_ERROR("Skip scheduling IBs!\n");
>   	} else {
>   		r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs, job,
> 


-- 
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.


[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux