drm/amdgpu: wake up scheduler only when neccessary
authorChristian König <christian.koenig@amd.com>
Mon, 24 Aug 2015 12:29:40 +0000 (14:29 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 26 Aug 2015 21:53:23 +0000 (17:53 -0400)
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>
drivers/gpu/drm/amd/scheduler/gpu_scheduler.c

index ca22d90..4145365 100644 (file)
@@ -27,6 +27,8 @@
 #include <drm/drmP.h>
 #include "gpu_scheduler.h"
 
+static void amd_sched_wakeup(struct amd_gpu_scheduler *sched);
+
 /* Initialize a given run queue struct */
 static void amd_sched_rq_init(struct amd_sched_rq *rq)
 {
@@ -209,7 +211,7 @@ static bool amd_sched_entity_in(struct amd_sched_job *job)
 
        /* first job wakes up scheduler */
        if (first)
-               wake_up_interruptible(&job->sched->wait_queue);
+               amd_sched_wakeup(job->sched);
 
        return added;
 }
@@ -250,6 +252,15 @@ static bool amd_sched_ready(struct amd_gpu_scheduler *sched)
 }
 
 /**
+ * Wake up the scheduler when it is ready
+ */
+static void amd_sched_wakeup(struct amd_gpu_scheduler *sched)
+{
+       if (amd_sched_ready(sched))
+               wake_up_interruptible(&sched->wait_queue);
+}
+
+/**
  * Select next entity containing real IB submissions
 */
 static struct amd_sched_entity *