gpu: nvgpu: remove redundant busy()/idle() calls
authorDeepak Nibade <dnibade@nvidia.com>
Thu, 3 Jul 2014 13:02:20 +0000 (18:02 +0530)
committerMandar Padmawar <mpadmawar@nvidia.com>
Mon, 7 Jul 2014 08:42:02 +0000 (01:42 -0700)
commitc4315c6caa42bab72ba6017c7ded25f4e9363dec
tree79254278477a165dcc1fb45ce81d6f47a69f53c2
parent561dc8e0933ff2d72573292968b893a52f5f783a
gpu: nvgpu: remove redundant busy()/idle() calls

gk20a_busy() call in channel_syncpt_incr() and corresponding
gk20a_idle() call in channel_update() are redundant since they
are already encapsulated inside another pair of busy/idle calls

This busy/idle pair will be called only from submit_gpfifo()
and submit_gpfifo() already has its own busy/idle which it
preserves for whole path and hence this redundant pair can be
removed

Also, this prevents a dead lock scenario while do_idle() is in
progress as follows :
- in submit_gpfifo() we call first gk20a_busy() which acquires
  busy read semaphore
- in do_idle() we acquire busy write semaphore and wait for
  current jobs to finish
- now submit_gpfifo() encounters second gk20a_busy() and requests
  busy read semaphore again
- this results in dead lock where do_idle() is waiting for
  submit_gpfifo() to complete and submit_gpfifo() is waiting for
  busy lock held by do_idle() and hence it cannot complete

bug 1529160

Change-Id: I96e4368352f693e93524f0f61689b4447e5331ea
Signed-off-by: Deepak Nibade <dnibade@nvidia.com>
Reviewed-on: http://git-master/r/434191
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Arto Merilainen <amerilainen@nvidia.com>
Reviewed-by: Sachin Nikam <snikam@nvidia.com>
drivers/gpu/nvgpu/gk20a/channel_gk20a.c
drivers/gpu/nvgpu/gk20a/channel_sync_gk20a.c