Skip to content

Commit

Permalink
drm/amdgpu: remove entity idle timeout v2
Browse files Browse the repository at this point in the history
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)
  • Loading branch information
Christian König authored and Alex Deucher committed Aug 26, 2015
1 parent 02537d6 commit 062c7fb
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 17 deletions.
18 changes: 5 additions & 13 deletions drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

/**
Expand Down
6 changes: 2 additions & 4 deletions drivers/gpu/drm/amd/scheduler/gpu_scheduler.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@
#include <linux/kfifo.h>
#include <linux/fence.h>

#define AMD_GPU_WAIT_IDLE_TIMEOUT_IN_MS 3000

struct amd_gpu_scheduler;
struct amd_sched_rq;

Expand Down Expand Up @@ -124,8 +122,8 @@ int amd_sched_entity_init(struct amd_gpu_scheduler *sched,
struct amd_sched_entity *entity,
struct amd_sched_rq *rq,
uint32_t jobs);
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);
int amd_sched_entity_push_job(struct amd_sched_job *sched_job);

struct amd_sched_fence *amd_sched_fence_create(
Expand Down

0 comments on commit 062c7fb

Please sign in to comment.