summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/vgpu/gp10b/vgpu_gr_gp10b.c
diff options
context:
space:
mode:
authorAingara Paramakuru <aparamakuru@nvidia.com>2015-12-14 20:39:47 -0500
committerDeepak Nibade <dnibade@nvidia.com>2016-12-27 04:52:10 -0500
commit36fa64cab4559e3c066b159303fcade7da9124c3 (patch)
treee602ca6eefe85c0539a5c267e64c0920335186ba /drivers/gpu/nvgpu/vgpu/gp10b/vgpu_gr_gp10b.c
parent97ba307f517c889a5dafd7b415e0df7ccdc68e4f (diff)
gpu: nvgpu: vgpu: update interface to free GR ctx
The server only releases ownership of the ctxsw buffer mappings after the GR ctx has been released. Update the sequence to account for this. JIRA VFND-1117 Bug 1708163 Change-Id: I3aed015805b4ca51433e7d37ad32de2f8353999f Signed-off-by: Aingara Paramakuru <aparamakuru@nvidia.com> Reviewed-on: http://git-master/r/922817 Reviewed-by: Richard Zhao <rizhao@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Vladislav Buzov <vbuzov@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/vgpu/gp10b/vgpu_gr_gp10b.c')
-rw-r--r--drivers/gpu/nvgpu/vgpu/gp10b/vgpu_gr_gp10b.c16
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 @@
20static void vgpu_gr_gp10b_free_gr_ctx(struct gk20a *g, struct vm_gk20a *vm, 20static 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
35static int vgpu_gr_gp10b_alloc_gr_ctx(struct gk20a *g, 49static int vgpu_gr_gp10b_alloc_gr_ctx(struct gk20a *g,