summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
diff options
context:
space:
mode:
authorAlex Waterman <alexw@nvidia.com>2016-04-26 20:23:19 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2016-04-29 17:44:24 -0400
commita191fd905a9ae437e849944804a800dc4c5e6d29 (patch)
tree8a0b2adc5a0e0edbf4def005f7d293ea000484da /drivers/gpu/nvgpu/gk20a/channel_gk20a.c
parent8891fd82679da0ea1d09b4b415dc3b94fa4c0269 (diff)
gpu: nvgpu: Schedule channel update when jobs actually finish
Do not schedule channel update call backs unless a job is actually finished. This saves a lot of call backs to the CDE code that don't do anything when semaphores are enabled. Bug 1732449 JIRA DNVGPU-12 Change-Id: I2f9a78498b08ebca44ee6a5171931a07721767f1 Signed-off-by: Alex Waterman <alexw@nvidia.com> Reviewed-on: http://git-master/r/1133786 GVS: Gerrit_Virtual_Submit Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_gk20a.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
index 6ef8a6cf..5b259672 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
@@ -1865,6 +1865,7 @@ static void gk20a_channel_clean_up_jobs(struct work_struct *work)
1865 struct channel_gk20a_job *job; 1865 struct channel_gk20a_job *job;
1866 struct gk20a_platform *platform; 1866 struct gk20a_platform *platform;
1867 struct gk20a *g; 1867 struct gk20a *g;
1868 int job_finished = 0;
1868 1869
1869 c = gk20a_channel_get(c); 1870 c = gk20a_channel_get(c);
1870 if (!c) 1871 if (!c)
@@ -1934,11 +1935,11 @@ static void gk20a_channel_clean_up_jobs(struct work_struct *work)
1934 mutex_unlock(&c->jobs_lock); 1935 mutex_unlock(&c->jobs_lock);
1935 1936
1936 kfree(job); 1937 kfree(job);
1937 1938 job_finished = 1;
1938 gk20a_idle(g->dev); 1939 gk20a_idle(g->dev);
1939 } 1940 }
1940 1941
1941 if (c->update_fn) 1942 if (job_finished && c->update_fn)
1942 schedule_work(&c->update_fn_work); 1943 schedule_work(&c->update_fn_work);
1943 1944
1944 gk20a_channel_put(c); 1945 gk20a_channel_put(c);