drm/amdgpu: Handle job is NULL use case in amdgpu_device_gpu_recover
This should be checked at all places job is accessed. Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
committed by
Alex Deucher
parent
e1c14c4339
commit
0b2d2c2eec
@@ -3794,14 +3794,14 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
|
|||||||
|
|
||||||
if (hive && !mutex_trylock(&hive->reset_lock)) {
|
if (hive && !mutex_trylock(&hive->reset_lock)) {
|
||||||
DRM_INFO("Bailing on TDR for s_job:%llx, hive: %llx as another already in progress",
|
DRM_INFO("Bailing on TDR for s_job:%llx, hive: %llx as another already in progress",
|
||||||
job->base.id, hive->hive_id);
|
job ? job->base.id : -1, hive->hive_id);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Start with adev pre asic reset first for soft reset check.*/
|
/* Start with adev pre asic reset first for soft reset check.*/
|
||||||
if (!amdgpu_device_lock_adev(adev, !hive)) {
|
if (!amdgpu_device_lock_adev(adev, !hive)) {
|
||||||
DRM_INFO("Bailing on TDR for s_job:%llx, as another already in progress",
|
DRM_INFO("Bailing on TDR for s_job:%llx, as another already in progress",
|
||||||
job->base.id);
|
job ? job->base.id : -1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3842,7 +3842,7 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
|
|||||||
if (!ring || !ring->sched.thread)
|
if (!ring || !ring->sched.thread)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
drm_sched_stop(&ring->sched, &job->base);
|
drm_sched_stop(&ring->sched, job ? &job->base : NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3867,9 +3867,7 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
|
|||||||
|
|
||||||
|
|
||||||
/* Guilty job will be freed after this*/
|
/* Guilty job will be freed after this*/
|
||||||
r = amdgpu_device_pre_asic_reset(adev,
|
r = amdgpu_device_pre_asic_reset(adev, job, &need_full_reset);
|
||||||
job,
|
|
||||||
&need_full_reset);
|
|
||||||
if (r) {
|
if (r) {
|
||||||
/*TODO Should we stop ?*/
|
/*TODO Should we stop ?*/
|
||||||
DRM_ERROR("GPU pre asic reset failed with err, %d for drm dev, %s ",
|
DRM_ERROR("GPU pre asic reset failed with err, %d for drm dev, %s ",
|
||||||
|
|||||||
Reference in New Issue
Block a user