summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2015-11-30 05:39:48 -0500
committerSachin Nikam <snikam@nvidia.com>2015-12-08 04:17:21 -0500
commit937de14907bbc238d180defc1afe036faa24f1bc (patch)
tree11a018b1431dbc3775f4b1f8a610f461aea4a629 /drivers/gpu/nvgpu/gk20a/channel_gk20a.c
parent8cdd72996c3973490589819e9b462283369bd77b (diff)
gpu: nvgpu: move check_gp_put() and update_gp_get() to worker
We currently call check_gp_put() and update_gp_get() in submit path and this takes about 5uS for both checks check_gp_put() - 3.5 uS update_gp_get() - 1.5 uS But this book-keeping can be moved to gk20a_channel_update() to save some submit time Note that check_gp_put() needs to be done inside submit lock Bug 200141116 Change-Id: I276400111be0421eb673695e2f2899ff52e344b4 Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: http://git-master/r/839232 (cherry picked from commit 289617e8bf01bde9aab45dfa3a1c6a1241e6eb78) Reviewed-on: http://git-master/r/839713 GVS: Gerrit_Virtual_Submit Reviewed-by: Sachin Nikam <snikam@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/channel_gk20a.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
index 99cfb07e..59c3e31d 100644
--- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c
@@ -1754,9 +1754,14 @@ void gk20a_channel_update(struct channel_gk20a *c, int nr_completed)
1754 1754
1755 trace_gk20a_channel_update(c->hw_chid); 1755 trace_gk20a_channel_update(c->hw_chid);
1756 1756
1757 update_gp_get(c->g, c);
1757 wake_up(&c->submit_wq); 1758 wake_up(&c->submit_wq);
1758 1759
1759 mutex_lock(&c->submit_lock); 1760 mutex_lock(&c->submit_lock);
1761
1762 /* gp_put check needs to be done inside submit lock */
1763 check_gp_put(c->g, c);
1764
1760 mutex_lock(&c->jobs_lock); 1765 mutex_lock(&c->jobs_lock);
1761 list_for_each_entry_safe(job, n, &c->jobs, list) { 1766 list_for_each_entry_safe(job, n, &c->jobs, list) {
1762 struct gk20a *g = c->g; 1767 struct gk20a *g = c->g;
@@ -1893,8 +1898,6 @@ int gk20a_submit_channel_gpfifo(struct channel_gk20a *c,
1893 flags, 1898 flags,
1894 fence ? fence->id : 0, 1899 fence ? fence->id : 0,
1895 fence ? fence->value : 0); 1900 fence ? fence->value : 0);
1896 check_gp_put(g, c);
1897 update_gp_get(g, c);
1898 1901
1899 gk20a_dbg_info("pre-submit put %d, get %d, size %d", 1902 gk20a_dbg_info("pre-submit put %d, get %d, size %d",
1900 c->gpfifo.put, c->gpfifo.get, c->gpfifo.entry_num); 1903 c->gpfifo.put, c->gpfifo.get, c->gpfifo.entry_num);