summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/vgpu/vgpu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/vgpu/vgpu.c')
-rw-r--r--drivers/gpu/nvgpu/vgpu/vgpu.c12
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
117static 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
117int vgpu_intr_thread(void *dev_id) 125int 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;