diff options
Diffstat (limited to 'drivers/gpu/nvgpu/vgpu/vgpu.c')
-rw-r--r-- | drivers/gpu/nvgpu/vgpu/vgpu.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/vgpu/vgpu.c b/drivers/gpu/nvgpu/vgpu/vgpu.c index 3b53474d..08556ee5 100644 --- a/drivers/gpu/nvgpu/vgpu/vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/vgpu.c | |||
@@ -114,6 +114,14 @@ static void vgpu_handle_channel_event(struct gk20a *g, | |||
114 | gk20a_tsg_event_id_post_event(tsg, info->event_id); | 114 | gk20a_tsg_event_id_post_event(tsg, info->event_id); |
115 | } | 115 | } |
116 | 116 | ||
117 | static void vgpu_channel_abort_cleanup(struct gk20a *g, u32 chid) | ||
118 | { | ||
119 | struct channel_gk20a *ch = &g->fifo.channel[chid]; | ||
120 | |||
121 | ch->has_timedout = true; | ||
122 | g->ops.fifo.ch_abort_clean_up(ch); | ||
123 | } | ||
124 | |||
117 | int vgpu_intr_thread(void *dev_id) | 125 | int vgpu_intr_thread(void *dev_id) |
118 | { | 126 | { |
119 | struct gk20a *g = dev_id; | 127 | struct gk20a *g = dev_id; |
@@ -169,6 +177,10 @@ int vgpu_intr_thread(void *dev_id) | |||
169 | g->ops.semaphore_wakeup(g, | 177 | g->ops.semaphore_wakeup(g, |
170 | !!msg->info.sem_wakeup.post_events); | 178 | !!msg->info.sem_wakeup.post_events); |
171 | break; | 179 | break; |
180 | case TEGRA_VGPU_EVENT_CHANNEL_CLEANUP: | ||
181 | vgpu_channel_abort_cleanup(g, | ||
182 | msg->info.ch_cleanup.chid); | ||
183 | break; | ||
172 | default: | 184 | default: |
173 | nvgpu_err(g, "unknown event %u", msg->event); | 185 | nvgpu_err(g, "unknown event %u", msg->event); |
174 | break; | 186 | break; |