From 64339638013d569e725766cc593a1e0ccb802f7f Mon Sep 17 00:00:00 2001 From: Konsta Holtta Date: Wed, 13 Apr 2016 14:31:39 +0300 Subject: 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 Reviewed-on: http://git-master/r/1126138 Reviewed-by: Terje Bergstrom Tested-by: Terje Bergstrom --- drivers/gpu/nvgpu/gk20a/gr_gk20a.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'drivers/gpu/nvgpu/gk20a/gr_gk20a.c') 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) gr->gpc_skip_mask = NULL; gr->map_tiles = NULL; + gr->ctx_vars.valid = false; kfree(gr->ctx_vars.ucode.fecs.inst.l); kfree(gr->ctx_vars.ucode.fecs.data.l); kfree(gr->ctx_vars.ucode.gpccs.inst.l); @@ -3156,6 +3157,14 @@ static void gk20a_remove_gr_support(struct gr_gk20a *gr) kfree(gr->ctx_vars.ctxsw_regs.pm_sys.l); kfree(gr->ctx_vars.ctxsw_regs.pm_gpc.l); kfree(gr->ctx_vars.ctxsw_regs.pm_tpc.l); + kfree(gr->ctx_vars.ctxsw_regs.pm_ppc.l); + kfree(gr->ctx_vars.ctxsw_regs.perf_sys.l); + kfree(gr->ctx_vars.ctxsw_regs.fbp.l); + kfree(gr->ctx_vars.ctxsw_regs.perf_gpc.l); + kfree(gr->ctx_vars.ctxsw_regs.fbp_router.l); + kfree(gr->ctx_vars.ctxsw_regs.gpc_router.l); + kfree(gr->ctx_vars.ctxsw_regs.pm_ltc.l); + kfree(gr->ctx_vars.ctxsw_regs.pm_fbpa.l); kfree(gr->ctx_vars.local_golden_image); gr->ctx_vars.local_golden_image = NULL; -- cgit v1.2.2