gpu: nvgpu: move check_gp_put() and update_gp_get() to worker
Deepak Nibade [Mon, 30 Nov 2015 10:39:48 +0000 (15:39 +0530)]
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/841583
(cherry picked from commit bdb8b2097de3a6b7ff0fc1f641074b1c9ca99201)
Reviewed-on: http://git-master/r/921948
Tested-by: Nikhil Joshi <nikhilj@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>

drivers/gpu/nvgpu/gk20a/channel_gk20a.c

index 4f6a40a..fd94667 100644 (file)
@@ -1562,9 +1562,14 @@ void gk20a_channel_update(struct channel_gk20a *c, int nr_completed)
 
        trace_gk20a_channel_update(c->hw_chid);
 
+       update_gp_get(c->g, c);
        wake_up(&c->submit_wq);
 
        mutex_lock(&c->submit_lock);
+
+       /* gp_put check needs to be done inside submit lock */
+       check_gp_put(c->g, c);
+
        mutex_lock(&c->jobs_lock);
        list_for_each_entry_safe(job, n, &c->jobs, list) {
                struct gk20a *g = c->g;
@@ -1703,8 +1708,6 @@ int gk20a_submit_channel_gpfifo(struct channel_gk20a *c,
                                          flags,
                                          fence ? fence->id : 0,
                                          fence ? fence->value : 0);
-       check_gp_put(g, c);
-       update_gp_get(g, c);
 
        gk20a_dbg_info("pre-submit put %d, get %d, size %d",
                c->gpfifo.put, c->gpfifo.get, c->gpfifo.entry_num);