summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2015-08-24 14:29:40 +0200
committerAlex Deucher <alexander.deucher@amd.com>2015-08-26 17:53:23 -0400
commit88079006dc412c5d1676f9f6e9c4d72a209eb556 (patch)
tree48a3126995b884647583982e54adb5515da01e4a /drivers/gpu/drm/amd
parent062c7fb3ebb42d2a50d4644b3e49e731361e6951 (diff)
drm/amdgpu: wake up scheduler only when neccessary
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>
Diffstat (limited to 'drivers/gpu/drm/amd')
-rw-r--r--drivers/gpu/drm/amd/scheduler/gpu_scheduler.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
index ca22d9032477..414536557673 100644
--- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
+++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
@@ -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 *