aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/amd/scheduler/gpu_scheduler.c39
-rw-r--r--drivers/gpu/drm/amd/scheduler/gpu_scheduler.h4
2 files changed, 1 insertions, 42 deletions
diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
index af846f208c67..9a9fffdc272b 100644
--- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
+++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
@@ -418,46 +418,18 @@ static void amd_sched_process_job(struct fence *f, struct fence_cb *cb)
418 spin_unlock_irqrestore(&sched->job_list_lock, flags); 418 spin_unlock_irqrestore(&sched->job_list_lock, flags);
419 419
420 amd_sched_fence_signal(s_fence); 420 amd_sched_fence_signal(s_fence);
421 if (sched->timeout != MAX_SCHEDULE_TIMEOUT) { 421
422 cancel_delayed_work(&s_fence->dwork);
423 spin_lock_irqsave(&sched->fence_list_lock, flags);
424 list_del_init(&s_fence->list);
425 spin_unlock_irqrestore(&sched->fence_list_lock, flags);
426 }
427 trace_amd_sched_process_job(s_fence); 422 trace_amd_sched_process_job(s_fence);
428 fence_put(&s_fence->base); 423 fence_put(&s_fence->base);
429 wake_up_interruptible(&sched->wake_up_worker); 424 wake_up_interruptible(&sched->wake_up_worker);
430} 425}
431 426
432static void amd_sched_fence_work_func(struct work_struct *work)
433{
434 struct amd_sched_fence *s_fence =
435 container_of(work, struct amd_sched_fence, dwork.work);
436 struct amd_gpu_scheduler *sched = s_fence->sched;
437 struct amd_sched_fence *entity, *tmp;
438 unsigned long flags;
439
440 DRM_ERROR("[%s] scheduler is timeout!\n", sched->name);
441
442 /* Clean all pending fences */
443 spin_lock_irqsave(&sched->fence_list_lock, flags);
444 list_for_each_entry_safe(entity, tmp, &sched->fence_list, list) {
445 DRM_ERROR(" fence no %d\n", entity->base.seqno);
446 cancel_delayed_work(&entity->dwork);
447 list_del_init(&entity->list);
448 fence_put(&entity->base);
449 }
450 spin_unlock_irqrestore(&sched->fence_list_lock, flags);
451}
452
453static int amd_sched_main(void *param) 427static int amd_sched_main(void *param)
454{ 428{
455 struct sched_param sparam = {.sched_priority = 1}; 429 struct sched_param sparam = {.sched_priority = 1};
456 struct amd_gpu_scheduler *sched = (struct amd_gpu_scheduler *)param; 430 struct amd_gpu_scheduler *sched = (struct amd_gpu_scheduler *)param;
457 int r, count; 431 int r, count;
458 432
459 spin_lock_init(&sched->fence_list_lock);
460 INIT_LIST_HEAD(&sched->fence_list);
461 sched_setscheduler(current, SCHED_FIFO, &sparam); 433 sched_setscheduler(current, SCHED_FIFO, &sparam);
462 434
463 while (!kthread_should_stop()) { 435 while (!kthread_should_stop()) {
@@ -465,7 +437,6 @@ static int amd_sched_main(void *param)
465 struct amd_sched_fence *s_fence; 437 struct amd_sched_fence *s_fence;
466 struct amd_sched_job *sched_job; 438 struct amd_sched_job *sched_job;
467 struct fence *fence; 439 struct fence *fence;
468 unsigned long flags;
469 440
470 wait_event_interruptible(sched->wake_up_worker, 441 wait_event_interruptible(sched->wake_up_worker,
471 (entity = amd_sched_select_entity(sched)) || 442 (entity = amd_sched_select_entity(sched)) ||
@@ -480,14 +451,6 @@ static int amd_sched_main(void *param)
480 451
481 s_fence = sched_job->s_fence; 452 s_fence = sched_job->s_fence;
482 453
483 if (sched->timeout != MAX_SCHEDULE_TIMEOUT) {
484 INIT_DELAYED_WORK(&s_fence->dwork, amd_sched_fence_work_func);
485 schedule_delayed_work(&s_fence->dwork, sched->timeout);
486 spin_lock_irqsave(&sched->fence_list_lock, flags);
487 list_add_tail(&s_fence->list, &sched->fence_list);
488 spin_unlock_irqrestore(&sched->fence_list_lock, flags);
489 }
490
491 atomic_inc(&sched->hw_rq_count); 454 atomic_inc(&sched->hw_rq_count);
492 amd_sched_job_pre_schedule(sched, sched_job); 455 amd_sched_job_pre_schedule(sched, sched_job);
493 fence = sched->ops->run_job(sched_job); 456 fence = sched->ops->run_job(sched_job);
diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h
index 2e3b8308186c..b26148d24a3d 100644
--- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h
+++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h
@@ -74,8 +74,6 @@ struct amd_sched_fence {
74 struct amd_gpu_scheduler *sched; 74 struct amd_gpu_scheduler *sched;
75 spinlock_t lock; 75 spinlock_t lock;
76 void *owner; 76 void *owner;
77 struct delayed_work dwork;
78 struct list_head list;
79 struct amd_sched_job *s_job; 77 struct amd_sched_job *s_job;
80}; 78};
81 79
@@ -127,8 +125,6 @@ struct amd_gpu_scheduler {
127 wait_queue_head_t wake_up_worker; 125 wait_queue_head_t wake_up_worker;
128 wait_queue_head_t job_scheduled; 126 wait_queue_head_t job_scheduled;
129 atomic_t hw_rq_count; 127 atomic_t hw_rq_count;
130 struct list_head fence_list;
131 spinlock_t fence_list_lock;
132 struct task_struct *thread; 128 struct task_struct *thread;
133 struct list_head ring_mirror_list; 129 struct list_head ring_mirror_list;
134 spinlock_t job_list_lock; 130 spinlock_t job_list_lock;