summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/tsg_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/tsg_gk20a.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c
index 3e83cd06..716388ec 100644
--- a/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/tsg_gk20a.c
@@ -451,6 +451,7 @@ void gk20a_tsg_release(struct kref *ref)
451{ 451{
452 struct tsg_gk20a *tsg = container_of(ref, struct tsg_gk20a, refcount); 452 struct tsg_gk20a *tsg = container_of(ref, struct tsg_gk20a, refcount);
453 struct gk20a *g = tsg->g; 453 struct gk20a *g = tsg->g;
454 struct gk20a_event_id_data *event_id_data, *event_id_data_temp;
454 455
455 if (tsg->tsg_gr_ctx) { 456 if (tsg->tsg_gr_ctx) {
456 gr_gk20a_free_tsg_gr_ctx(tsg); 457 gr_gk20a_free_tsg_gr_ctx(tsg);
@@ -462,6 +463,16 @@ void gk20a_tsg_release(struct kref *ref)
462 } 463 }
463 464
464 gk20a_sched_ctrl_tsg_removed(g, tsg); 465 gk20a_sched_ctrl_tsg_removed(g, tsg);
466
467 /* unhook all events created on this TSG */
468 mutex_lock(&tsg->event_id_list_lock);
469 list_for_each_entry_safe(event_id_data, event_id_data_temp,
470 &tsg->event_id_list,
471 event_id_node) {
472 list_del_init(&event_id_data->event_id_node);
473 }
474 mutex_unlock(&tsg->event_id_list_lock);
475
465 release_used_tsg(&g->fifo, tsg); 476 release_used_tsg(&g->fifo, tsg);
466 477
467 tsg->runlist_id = ~0; 478 tsg->runlist_id = ~0;