| From 65e490f1b1adc19e2be9481feda07fbe2f6dc8ab Mon Sep 17 00:00:00 2001 |
| From: Shirish S <shirish.s@amd.com> |
| Date: Wed, 30 Oct 2019 14:20:46 +0530 |
| Subject: [PATCH] drm/amdgpu: dont schedule jobs while in reset |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| commit f2efc6e60089c99c342a6b7da47f1037e06c4296 upstream. |
| |
| [Why] |
| |
| doing kthread_park()/unpark() from drm_sched_entity_fini |
| while GPU reset is in progress defeats all the purpose of |
| drm_sched_stop->kthread_park. |
| If drm_sched_entity_fini->kthread_unpark() happens AFTER |
| drm_sched_stop->kthread_park nothing prevents from another |
| (third) thread to keep submitting job to HW which will be |
| picked up by the unparked scheduler thread and try to submit |
| to HW but fail because the HW ring is deactivated. |
| |
| [How] |
| grab the reset lock before calling drm_sched_entity_fini() |
| |
| Signed-off-by: Shirish S <shirish.s@amd.com> |
| Suggested-by: Christian König <christian.koenig@amd.com> |
| Reviewed-by: Christian König <christian.koenig@amd.com> |
| Reviewed-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c |
| index 62298ae5c81c..18089208582a 100644 |
| --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c |
| +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c |
| @@ -598,8 +598,11 @@ void amdgpu_ctx_mgr_entity_fini(struct amdgpu_ctx_mgr *mgr) |
| continue; |
| } |
| |
| - for (i = 0; i < num_entities; i++) |
| + for (i = 0; i < num_entities; i++) { |
| + mutex_lock(&ctx->adev->lock_reset); |
| drm_sched_entity_fini(&ctx->entities[0][i].entity); |
| + mutex_unlock(&ctx->adev->lock_reset); |
| + } |
| } |
| } |
| |
| -- |
| 2.7.4 |
| |