summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/os
diff options
context:
space:
mode:
authorDebarshi Dutta <ddutta@nvidia.com>2018-09-03 01:21:02 -0400
committermobile promotions <svcmobile_promotions@nvidia.com>2018-09-04 10:25:45 -0400
commitbac38f52cc6f2ddc435a748dd9c85f3c5d88153f (patch)
treeb53198fc14aa9d470d41b5d36caee934ef8c5bbc /drivers/gpu/nvgpu/os
parent16ad9f537979c5f3717fc5781b1c2fad22a76f96 (diff)
gpu: nvgpu: protect clk_arb init with mutex.
g->clk_arb is currently initialized as a part of gk20a_finalize_poweron(). Any subsequent call to gk20a_finalize_poweron reinitializes the clk_arb and leading to memory leaks. This is resolved by protecting the g->clk_arb initialization with a mutex clk_arb_enable_lock in struct gk20a. We skip initializing the g->clk_arb if its not NULL. Bug 2061372 Change-Id: I59158e0a5e4c827fdbd6d9ea2d04c78d0986347a Signed-off-by: Debarshi Dutta <ddutta@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1811650 Reviewed-by: Deepak Nibade <dnibade@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/os')
-rw-r--r--drivers/gpu/nvgpu/os/linux/driver_common.c1
-rw-r--r--drivers/gpu/nvgpu/os/linux/module.c2
2 files changed, 3 insertions, 0 deletions
diff --git a/drivers/gpu/nvgpu/os/linux/driver_common.c b/drivers/gpu/nvgpu/os/linux/driver_common.c
index 16af2cb0..b81cc90c 100644
--- a/drivers/gpu/nvgpu/os/linux/driver_common.c
+++ b/drivers/gpu/nvgpu/os/linux/driver_common.c
@@ -65,6 +65,7 @@ static void nvgpu_init_vars(struct gk20a *g)
65 nvgpu_mutex_init(&g->poweroff_lock); 65 nvgpu_mutex_init(&g->poweroff_lock);
66 nvgpu_mutex_init(&g->ctxsw_disable_lock); 66 nvgpu_mutex_init(&g->ctxsw_disable_lock);
67 nvgpu_mutex_init(&g->tpc_pg_lock); 67 nvgpu_mutex_init(&g->tpc_pg_lock);
68 nvgpu_mutex_init(&g->clk_arb_enable_lock);
68 69
69 l->regs_saved = l->regs; 70 l->regs_saved = l->regs;
70 l->bar1_saved = l->bar1; 71 l->bar1_saved = l->bar1;
diff --git a/drivers/gpu/nvgpu/os/linux/module.c b/drivers/gpu/nvgpu/os/linux/module.c
index cb501683..d226ceeb 100644
--- a/drivers/gpu/nvgpu/os/linux/module.c
+++ b/drivers/gpu/nvgpu/os/linux/module.c
@@ -1310,6 +1310,8 @@ int nvgpu_remove(struct device *dev, struct class *class)
1310 if (platform->remove) 1310 if (platform->remove)
1311 platform->remove(dev); 1311 platform->remove(dev);
1312 1312
1313 nvgpu_mutex_destroy(&g->clk_arb_enable_lock);
1314
1313 nvgpu_log_fn(g, "removed"); 1315 nvgpu_log_fn(g, "removed");
1314 1316
1315 return err; 1317 return err;