summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/cde_gk20a.c
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2015-07-14 08:48:05 -0400
committerSachin Nikam <snikam@nvidia.com>2015-07-16 04:53:39 -0400
commitae2f9da28e6b49a486d996a9e3b1c31ce51e15d9 (patch)
treeb24c02393c2abfbbdb5bc8bae4e580e7aa6ad190 /drivers/gpu/nvgpu/gk20a/cde_gk20a.c
parent1b145f447b6242f47bf48384dbbc4a54c9e1e04a (diff)
gpu: nvgpu: fix channel close sequence
In gk20a_cde_remove_ctx(), current sequence is as below - gk20a_channel_close() - gk20a_deinit_cde_img() - gk20a_free_obj_ctx() But gk20a_free_obj_ctx() needs reference to channel and hence below crash is seen : [ 3901.466223] Unable to handle kernel paging request at virtual address 00001624 ... [ 3901.535218] PC is at gk20a_free_obj_ctx+0x14/0xb0 [ 3901.539910] LR is at gk20a_deinit_cde_img+0xd8/0x12c Fix this by closing the channel after gk20a_deinit_cde_img() Bug 1625901 Change-Id: Ic2dc5af933b6d6ef8982c2b9f0caa28df204051f Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: http://git-master/r/770322 GVS: Gerrit_Virtual_Submit Reviewed-by: Sachin Nikam <snikam@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/cde_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/cde_gk20a.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/cde_gk20a.c b/drivers/gpu/nvgpu/gk20a/cde_gk20a.c
index d15b6e8a..dc7e8be3 100644
--- a/drivers/gpu/nvgpu/gk20a/cde_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/cde_gk20a.c
@@ -73,14 +73,14 @@ __must_hold(&cde_app->mutex)
73 73
74 trace_gk20a_cde_remove_ctx(cde_ctx); 74 trace_gk20a_cde_remove_ctx(cde_ctx);
75 75
76 /* free the channel */ 76 /* release mapped memory */
77 gk20a_channel_close(ch);
78
79 /* ..then release mapped memory */
80 gk20a_deinit_cde_img(cde_ctx); 77 gk20a_deinit_cde_img(cde_ctx);
81 gk20a_gmmu_unmap(vm, cde_ctx->backing_store_vaddr, 78 gk20a_gmmu_unmap(vm, cde_ctx->backing_store_vaddr,
82 g->gr.compbit_store.mem.size, 1); 79 g->gr.compbit_store.mem.size, 1);
83 80
81 /* free the channel */
82 gk20a_channel_close(ch);
83
84 /* housekeeping on app */ 84 /* housekeeping on app */
85 list_del(&cde_ctx->list); 85 list_del(&cde_ctx->list);
86 cde_ctx->g->cde_app.ctx_count--; 86 cde_ctx->g->cde_app.ctx_count--;