diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_job.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 18 | 
1 files changed, 11 insertions, 7 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c index 4981e443a884..4fb4c3b69687 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c @@ -33,10 +33,12 @@ static void amdgpu_job_timedout(struct drm_sched_job *s_job)  	struct amdgpu_ring *ring = to_amdgpu_ring(s_job->sched);  	struct amdgpu_job *job = to_amdgpu_job(s_job);  	struct amdgpu_task_info ti; +	struct amdgpu_device *adev = ring->adev;  	memset(&ti, 0, sizeof(struct amdgpu_task_info)); -	if (amdgpu_ring_soft_recovery(ring, job->vmid, s_job->s_fence->parent)) { +	if (amdgpu_gpu_recovery && +	    amdgpu_ring_soft_recovery(ring, job->vmid, s_job->s_fence->parent)) {  		DRM_ERROR("ring %s timeout, but soft recovered\n",  			  s_job->sched->name);  		return; @@ -49,10 +51,13 @@ static void amdgpu_job_timedout(struct drm_sched_job *s_job)  	DRM_ERROR("Process information: process %s pid %d thread %s pid %d\n",  		  ti.process_name, ti.tgid, ti.task_name, ti.pid); -	if (amdgpu_device_should_recover_gpu(ring->adev)) +	if (amdgpu_device_should_recover_gpu(ring->adev)) {  		amdgpu_device_gpu_recover(ring->adev, job); -	else +	} else {  		drm_sched_suspend_timeout(&ring->sched); +		if (amdgpu_sriov_vf(adev)) +			adev->virt.tdr_debug = true; +	}  }  int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs, @@ -87,7 +92,8 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs,  }  int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size, -			     struct amdgpu_job **job) +		enum amdgpu_ib_pool_type pool_type, +		struct amdgpu_job **job)  {  	int r; @@ -95,7 +101,7 @@ int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size,  	if (r)  		return r; -	r = amdgpu_ib_get(adev, NULL, size, &(*job)->ibs[0]); +	r = amdgpu_ib_get(adev, NULL, size, pool_type, &(*job)->ibs[0]);  	if (r)  		kfree(*job); @@ -140,7 +146,6 @@ void amdgpu_job_free(struct amdgpu_job *job)  int amdgpu_job_submit(struct amdgpu_job *job, struct drm_sched_entity *entity,  		      void *owner, struct dma_fence **f)  { -	enum drm_sched_priority priority;  	int r;  	if (!f) @@ -152,7 +157,6 @@ int amdgpu_job_submit(struct amdgpu_job *job, struct drm_sched_entity *entity,  	*f = dma_fence_get(&job->base.s_fence->finished);  	amdgpu_job_free_resources(job); -	priority = job->base.s_priority;  	drm_sched_entity_push_job(&job->base, entity);  	return 0; |