summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gk20a.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gk20a.c26
1 files changed, 0 insertions, 26 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.c b/drivers/gpu/nvgpu/gk20a/gk20a.c
index 21e861fe..6350bcf5 100644
--- a/drivers/gpu/nvgpu/gk20a/gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gk20a.c
@@ -358,32 +358,6 @@ int gk20a_can_busy(struct gk20a *g)
358 return 1; 358 return 1;
359} 359}
360 360
361/*
362 * Start the process for unloading the driver. Set NVGPU_DRIVER_IS_DYING.
363 */
364void gk20a_driver_start_unload(struct gk20a *g)
365{
366 gk20a_dbg(gpu_dbg_shutdown, "Driver is now going down!\n");
367
368 down_write(&g->busy_lock);
369 __nvgpu_set_enabled(g, NVGPU_DRIVER_IS_DYING, true);
370 up_write(&g->busy_lock);
371
372 if (g->is_virtual)
373 return;
374
375 gk20a_wait_for_idle(dev_from_gk20a(g));
376
377 nvgpu_wait_for_deferred_interrupts(g);
378 gk20a_channel_cancel_pending_sema_waits(g);
379
380 if (g->nonstall_work_queue) {
381 cancel_work_sync(&g->nonstall_fn_work);
382 destroy_workqueue(g->nonstall_work_queue);
383 g->nonstall_work_queue = NULL;
384 }
385}
386
387int gk20a_wait_for_idle(struct device *dev) 361int gk20a_wait_for_idle(struct device *dev)
388{ 362{
389 struct gk20a *g = get_gk20a(dev); 363 struct gk20a *g = get_gk20a(dev);