diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/nvgpu/vgpu/gp10b/vgpu_gr_gp10b.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_gr_gp10b.c b/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_gr_gp10b.c index c5c53b58..3023ef4b 100644 --- a/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_gr_gp10b.c +++ b/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_gr_gp10b.c | |||
@@ -20,16 +20,30 @@ | |||
20 | static void vgpu_gr_gp10b_free_gr_ctx(struct gk20a *g, struct vm_gk20a *vm, | 20 | static void vgpu_gr_gp10b_free_gr_ctx(struct gk20a *g, struct vm_gk20a *vm, |
21 | struct gr_ctx_desc *gr_ctx) | 21 | struct gr_ctx_desc *gr_ctx) |
22 | { | 22 | { |
23 | struct gk20a_platform *platform = gk20a_get_platform(g->dev); | ||
24 | struct tegra_vgpu_cmd_msg msg; | ||
25 | struct tegra_vgpu_gr_ctx_params *p = &msg.params.gr_ctx; | ||
26 | int err; | ||
27 | |||
23 | gk20a_dbg_fn(""); | 28 | gk20a_dbg_fn(""); |
24 | 29 | ||
25 | if (!gr_ctx || !gr_ctx->mem.gpu_va) | 30 | if (!gr_ctx || !gr_ctx->mem.gpu_va) |
26 | return; | 31 | return; |
27 | 32 | ||
33 | msg.cmd = TEGRA_VGPU_CMD_CHANNEL_FREE_GR_CTX; | ||
34 | msg.handle = platform->virt_handle; | ||
35 | p->handle = gr_ctx->virt_ctx; | ||
36 | err = vgpu_comm_sendrecv(&msg, sizeof(msg), sizeof(msg)); | ||
37 | WARN_ON(err || msg.ret); | ||
38 | |||
39 | gk20a_vm_free_va(vm, gr_ctx->mem.gpu_va, gr_ctx->mem.size, 0); | ||
40 | |||
28 | gk20a_gmmu_unmap_free(vm, &gr_ctx->t18x.pagepool_ctxsw_buffer); | 41 | gk20a_gmmu_unmap_free(vm, &gr_ctx->t18x.pagepool_ctxsw_buffer); |
29 | gk20a_gmmu_unmap_free(vm, &gr_ctx->t18x.betacb_ctxsw_buffer); | 42 | gk20a_gmmu_unmap_free(vm, &gr_ctx->t18x.betacb_ctxsw_buffer); |
30 | gk20a_gmmu_unmap_free(vm, &gr_ctx->t18x.spill_ctxsw_buffer); | 43 | gk20a_gmmu_unmap_free(vm, &gr_ctx->t18x.spill_ctxsw_buffer); |
31 | gk20a_gmmu_unmap_free(vm, &gr_ctx->t18x.preempt_ctxsw_buffer); | 44 | gk20a_gmmu_unmap_free(vm, &gr_ctx->t18x.preempt_ctxsw_buffer); |
32 | vgpu_gr_free_gr_ctx(g, vm, gr_ctx); | 45 | |
46 | kfree(gr_ctx); | ||
33 | } | 47 | } |
34 | 48 | ||
35 | static int vgpu_gr_gp10b_alloc_gr_ctx(struct gk20a *g, | 49 | static int vgpu_gr_gp10b_alloc_gr_ctx(struct gk20a *g, |