diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2015-07-14 08:48:05 -0400 |
---|---|---|
committer | Sachin Nikam <snikam@nvidia.com> | 2015-07-16 04:53:39 -0400 |
commit | ae2f9da28e6b49a486d996a9e3b1c31ce51e15d9 (patch) | |
tree | b24c02393c2abfbbdb5bc8bae4e580e7aa6ad190 /drivers/gpu/nvgpu | |
parent | 1b145f447b6242f47bf48384dbbc4a54c9e1e04a (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')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/cde_gk20a.c | 8 |
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--; |