diff options
author | Aingara Paramakuru <aparamakuru@nvidia.com> | 2015-12-14 20:39:47 -0500 |
---|---|---|
committer | Deepak Nibade <dnibade@nvidia.com> | 2016-12-27 04:52:10 -0500 |
commit | 36fa64cab4559e3c066b159303fcade7da9124c3 (patch) | |
tree | e602ca6eefe85c0539a5c267e64c0920335186ba /drivers/gpu/nvgpu/vgpu/gp10b/vgpu_gr_gp10b.c | |
parent | 97ba307f517c889a5dafd7b415e0df7ccdc68e4f (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.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, |