summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
diff options
context:
space:
mode:
authorKonsta Holtta <kholtta@nvidia.com>2016-04-13 07:31:39 -0400
committerTerje Bergstrom <tbergstrom@nvidia.com>2016-04-14 11:43:16 -0400
commit64339638013d569e725766cc593a1e0ccb802f7f (patch)
tree79225427dfcd228f0ddcc7327dadd3dcbecff876 /drivers/gpu/nvgpu/gk20a/gr_gk20a.c
parentf22df728deb90f1c32318dbeaf011389df8ecb59 (diff)
gpu: nvgpu: clean up ctx_vars properly
Set ctx_vars.valid to false when removing support. Otherwise a re-poweron sequence could crash when the flag wouldn't match the real state of the driver. Also free all allocated regs instead of leaking some of them. Change-Id: I3fc4fa759d839bc435e53cbd942fa5d39efe7f57 Signed-off-by: Konsta Holtta <kholtta@nvidia.com> Reviewed-on: http://git-master/r/1126138 Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com> Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c')
-rw-r--r--drivers/gpu/nvgpu/gk20a/gr_gk20a.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
index 5317bd87..aa42e1dd 100644
--- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c
@@ -3140,6 +3140,7 @@ static void gk20a_remove_gr_support(struct gr_gk20a *gr)
3140 gr->gpc_skip_mask = NULL; 3140 gr->gpc_skip_mask = NULL;
3141 gr->map_tiles = NULL; 3141 gr->map_tiles = NULL;
3142 3142
3143 gr->ctx_vars.valid = false;
3143 kfree(gr->ctx_vars.ucode.fecs.inst.l); 3144 kfree(gr->ctx_vars.ucode.fecs.inst.l);
3144 kfree(gr->ctx_vars.ucode.fecs.data.l); 3145 kfree(gr->ctx_vars.ucode.fecs.data.l);
3145 kfree(gr->ctx_vars.ucode.gpccs.inst.l); 3146 kfree(gr->ctx_vars.ucode.gpccs.inst.l);
@@ -3156,6 +3157,14 @@ static void gk20a_remove_gr_support(struct gr_gk20a *gr)
3156 kfree(gr->ctx_vars.ctxsw_regs.pm_sys.l); 3157 kfree(gr->ctx_vars.ctxsw_regs.pm_sys.l);
3157 kfree(gr->ctx_vars.ctxsw_regs.pm_gpc.l); 3158 kfree(gr->ctx_vars.ctxsw_regs.pm_gpc.l);
3158 kfree(gr->ctx_vars.ctxsw_regs.pm_tpc.l); 3159 kfree(gr->ctx_vars.ctxsw_regs.pm_tpc.l);
3160 kfree(gr->ctx_vars.ctxsw_regs.pm_ppc.l);
3161 kfree(gr->ctx_vars.ctxsw_regs.perf_sys.l);
3162 kfree(gr->ctx_vars.ctxsw_regs.fbp.l);
3163 kfree(gr->ctx_vars.ctxsw_regs.perf_gpc.l);
3164 kfree(gr->ctx_vars.ctxsw_regs.fbp_router.l);
3165 kfree(gr->ctx_vars.ctxsw_regs.gpc_router.l);
3166 kfree(gr->ctx_vars.ctxsw_regs.pm_ltc.l);
3167 kfree(gr->ctx_vars.ctxsw_regs.pm_fbpa.l);
3159 3168
3160 kfree(gr->ctx_vars.local_golden_image); 3169 kfree(gr->ctx_vars.local_golden_image);
3161 gr->ctx_vars.local_golden_image = NULL; 3170 gr->ctx_vars.local_golden_image = NULL;