diff options
author | Lauri Peltonen <lpeltonen@nvidia.com> | 2014-06-11 05:56:31 -0400 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:10:10 -0400 |
commit | f575bc667649ff1a09aac8ecbe626fde8ea5f2f4 (patch) | |
tree | af8ef5bd572772e54a97ebfbdb7e693670468c59 /drivers/gpu/nvgpu/gk20a/channel_gk20a.h | |
parent | ae22cda010d26419476939fa46abf9345c412eff (diff) |
gpu: nvgpu: Support semaphore sync when aborting jobs
When aborting jobs on channel error situations, we manually set
the channel syncpoint's min == max in gk20a_disable_channel_no_update.
Nvhost will notice this manual syncpoint increment, and will call back
to gk20a_channel_update, which will clean up the job.
With semaphore synchronization, we don't have anybody calling back to
gk20a_channel_update, so we need to call it ourselves. Release job
semaphores (the equivalent of set_min_eq_max) on
gk20a_disable_channel_no_update, and if any semaphores were released,
call gk20a_channel_update afterwards.
Because we are actually calling gk20a_channel_update in some situations,
gk20a_disable_channel_no_update is no longer an appropriate name for the
function. Rename it to gk20a_channel_abort.
Bug 1450122
Change-Id: I1267b099a5778041cbc8e91b7184844812145b93
Signed-off-by: Lauri Peltonen <lpeltonen@nvidia.com>
Reviewed-on: http://git-master/r/422161
GVS: Gerrit_Virtual_Submit
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_gk20a.h')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/channel_gk20a.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h index 84983cc6..60437e66 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.h | |||
@@ -153,7 +153,7 @@ bool gk20a_channel_update_and_check_timeout(struct channel_gk20a *ch, | |||
153 | void gk20a_disable_channel(struct channel_gk20a *ch, | 153 | void gk20a_disable_channel(struct channel_gk20a *ch, |
154 | bool wait_for_finish, | 154 | bool wait_for_finish, |
155 | unsigned long finish_timeout); | 155 | unsigned long finish_timeout); |
156 | void gk20a_disable_channel_no_update(struct channel_gk20a *ch); | 156 | void gk20a_channel_abort(struct channel_gk20a *ch); |
157 | int gk20a_channel_finish(struct channel_gk20a *ch, unsigned long timeout); | 157 | int gk20a_channel_finish(struct channel_gk20a *ch, unsigned long timeout); |
158 | void gk20a_set_error_notifier(struct channel_gk20a *ch, __u32 error); | 158 | void gk20a_set_error_notifier(struct channel_gk20a *ch, __u32 error); |
159 | void gk20a_channel_semaphore_wakeup(struct gk20a *g); | 159 | void gk20a_channel_semaphore_wakeup(struct gk20a *g); |