diff options
author | Christian König <christian.koenig@amd.com> | 2015-08-21 13:46:43 (GMT) |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-08-26 21:52:18 (GMT) |
commit | 062c7fb3ebb42d2a50d4644b3e49e731361e6951 (patch) | |
tree | 7bdedd365524f4ca29fe78e8da1fc9602228669a /drivers/gpu/drm/amd/scheduler/gpu_scheduler.c | |
parent | 02537d63623ce5281c20d76f1b61797a7836acf4 (diff) | |
download | linux-062c7fb3ebb42d2a50d4644b3e49e731361e6951.tar.xz |
drm/amdgpu: remove entity idle timeout v2
Removing the entity from scheduling can deadlock the whole system.
Wait forever till the remaining IBs are scheduled.
v2: fix comment as well
Signed-off-by: Christian König <christian.koenig@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Jammy Zhou <Jammy.Zhou@amd.com>
Reviewed-by: Chunming Zhou <david1.zhou@amd.com> (v1)
Diffstat (limited to 'drivers/gpu/drm/amd/scheduler/gpu_scheduler.c')
-rw-r--r-- | drivers/gpu/drm/amd/scheduler/gpu_scheduler.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c index 2df6f17..ca22d90 100644 --- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c +++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c @@ -167,32 +167,24 @@ static bool amd_sched_entity_is_idle(struct amd_sched_entity *entity) * @sched Pointer to scheduler instance * @entity The pointer to a valid scheduler entity * - * return 0 if succeed. negative error code on failure + * Cleanup and free the allocated resources. */ -int amd_sched_entity_fini(struct amd_gpu_scheduler *sched, - struct amd_sched_entity *entity) +void amd_sched_entity_fini(struct amd_gpu_scheduler *sched, + struct amd_sched_entity *entity) { struct amd_sched_rq *rq = entity->belongto_rq; - long r; if (!amd_sched_entity_is_initialized(sched, entity)) - return 0; + return; /** * The client will not queue more IBs during this fini, consume existing * queued IBs */ - r = wait_event_timeout(entity->wait_queue, - amd_sched_entity_is_idle(entity), - msecs_to_jiffies(AMD_GPU_WAIT_IDLE_TIMEOUT_IN_MS)); - - if (r <= 0) - DRM_INFO("Entity %p is in waiting state during fini\n", - entity); + wait_event(entity->wait_queue, amd_sched_entity_is_idle(entity)); amd_sched_rq_remove_entity(rq, entity); kfifo_free(&entity->job_queue); - return r; } /** |