diff options
author | Alex Waterman <alexw@nvidia.com> | 2016-04-26 20:23:19 -0400 |
---|---|---|
committer | Terje Bergstrom <tbergstrom@nvidia.com> | 2016-04-29 17:44:24 -0400 |
commit | a191fd905a9ae437e849944804a800dc4c5e6d29 (patch) | |
tree | 8a0b2adc5a0e0edbf4def005f7d293ea000484da /drivers/gpu | |
parent | 8891fd82679da0ea1d09b4b415dc3b94fa4c0269 (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')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 5 |
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); |