diff options
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/channel_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/channel_gk20a.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c index 468ee7f1..da73d95d 100644 --- a/drivers/gpu/nvgpu/gk20a/channel_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/channel_gk20a.c | |||
@@ -2831,7 +2831,7 @@ int gk20a_channel_resume(struct gk20a *g) | |||
2831 | return 0; | 2831 | return 0; |
2832 | } | 2832 | } |
2833 | 2833 | ||
2834 | void gk20a_channel_semaphore_wakeup(struct gk20a *g) | 2834 | void gk20a_channel_semaphore_wakeup(struct gk20a *g, bool post_events) |
2835 | { | 2835 | { |
2836 | struct fifo_gk20a *f = &g->fifo; | 2836 | struct fifo_gk20a *f = &g->fifo; |
2837 | u32 chid; | 2837 | u32 chid; |
@@ -2842,6 +2842,18 @@ void gk20a_channel_semaphore_wakeup(struct gk20a *g) | |||
2842 | struct channel_gk20a *c = g->fifo.channel+chid; | 2842 | struct channel_gk20a *c = g->fifo.channel+chid; |
2843 | if (gk20a_channel_get(c)) { | 2843 | if (gk20a_channel_get(c)) { |
2844 | wake_up_interruptible_all(&c->semaphore_wq); | 2844 | wake_up_interruptible_all(&c->semaphore_wq); |
2845 | if (post_events) { | ||
2846 | if (gk20a_is_channel_marked_as_tsg(c)) { | ||
2847 | struct tsg_gk20a *tsg = | ||
2848 | &g->fifo.tsg[c->tsgid]; | ||
2849 | |||
2850 | gk20a_tsg_event_id_post_event(tsg, | ||
2851 | NVGPU_IOCTL_CHANNEL_EVENT_ID_BLOCKING_SYNC); | ||
2852 | } else { | ||
2853 | gk20a_channel_event_id_post_event(c, | ||
2854 | NVGPU_IOCTL_CHANNEL_EVENT_ID_BLOCKING_SYNC); | ||
2855 | } | ||
2856 | } | ||
2845 | gk20a_channel_update(c, 0); | 2857 | gk20a_channel_update(c, 0); |
2846 | gk20a_channel_put(c); | 2858 | gk20a_channel_put(c); |
2847 | } | 2859 | } |