summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDeepak Nibade <dnibade@nvidia.com>2017-02-02 04:46:33 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2017-02-22 07:15:08 -0500
commit8cdb91c527ce19ce67ddc0e231e8c93a552a93a4 (patch)
tree38e9cb1adb5db1d89dede1354cbe26a47e3590cb /drivers
parent8ee3aa4b3175d8d27e57a0f5d5e2cdf3d78a4a58 (diff)
gpu: nvgpu: remove use of DEFINE_MUTEX()
API DEFINE_MUTEX() is defined in Linux and might not be available in other OSs. Hence remove its usage from nvgpu Declare and explicitly initialize below mutexes for both nvgpu and vgpu g->mm.priv_lock g->mm.tlb_lock Jira NVGPU-13 Change-Id: If72885a6da0227a1552303206172f1f2b751471d Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: http://git-master/r/1298042 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/nvgpu/common/nvgpu_common.c3
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.c12
-rw-r--r--drivers/gpu/nvgpu/gk20a/mm_gk20a.h2
-rw-r--r--drivers/gpu/nvgpu/vgpu/mm_vgpu.c3
4 files changed, 13 insertions, 7 deletions
diff --git a/drivers/gpu/nvgpu/common/nvgpu_common.c b/drivers/gpu/nvgpu/common/nvgpu_common.c
index 6b5cfa55..521ccd9d 100644
--- a/drivers/gpu/nvgpu/common/nvgpu_common.c
+++ b/drivers/gpu/nvgpu/common/nvgpu_common.c
@@ -110,6 +110,9 @@ static void nvgpu_init_mm_vars(struct gk20a *g)
110 g->mm.bypass_smmu = platform->bypass_smmu; 110 g->mm.bypass_smmu = platform->bypass_smmu;
111 g->mm.disable_bigpage = platform->disable_bigpage; 111 g->mm.disable_bigpage = platform->disable_bigpage;
112 g->mm.vidmem_is_vidmem = platform->vidmem_is_vidmem; 112 g->mm.vidmem_is_vidmem = platform->vidmem_is_vidmem;
113
114 nvgpu_mutex_init(&g->mm.tlb_lock);
115 nvgpu_mutex_init(&g->mm.priv_lock);
113} 116}
114 117
115int nvgpu_probe(struct gk20a *g, 118int nvgpu_probe(struct gk20a *g,
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
index 2539138a..c91acbd2 100644
--- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
+++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.c
@@ -4811,15 +4811,15 @@ int gk20a_vm_bind_channel(struct gk20a_as_share *as_share,
4811 4811
4812int gk20a_dmabuf_alloc_drvdata(struct dma_buf *dmabuf, struct device *dev) 4812int gk20a_dmabuf_alloc_drvdata(struct dma_buf *dmabuf, struct device *dev)
4813{ 4813{
4814 struct gk20a *g = gk20a_get_platform(dev)->g;
4814 struct gk20a_dmabuf_priv *priv; 4815 struct gk20a_dmabuf_priv *priv;
4815 static DEFINE_MUTEX(priv_lock);
4816 static u64 priv_count = 0; 4816 static u64 priv_count = 0;
4817 4817
4818 priv = dma_buf_get_drvdata(dmabuf, dev); 4818 priv = dma_buf_get_drvdata(dmabuf, dev);
4819 if (likely(priv)) 4819 if (likely(priv))
4820 return 0; 4820 return 0;
4821 4821
4822 nvgpu_mutex_acquire(&priv_lock); 4822 nvgpu_mutex_acquire(&g->mm.priv_lock);
4823 priv = dma_buf_get_drvdata(dmabuf, dev); 4823 priv = dma_buf_get_drvdata(dmabuf, dev);
4824 if (priv) 4824 if (priv)
4825 goto priv_exist_or_err; 4825 goto priv_exist_or_err;
@@ -4833,7 +4833,7 @@ int gk20a_dmabuf_alloc_drvdata(struct dma_buf *dmabuf, struct device *dev)
4833 priv->buffer_id = ++priv_count; 4833 priv->buffer_id = ++priv_count;
4834 dma_buf_set_drvdata(dmabuf, dev, priv, gk20a_mm_delete_priv); 4834 dma_buf_set_drvdata(dmabuf, dev, priv, gk20a_mm_delete_priv);
4835priv_exist_or_err: 4835priv_exist_or_err:
4836 nvgpu_mutex_release(&priv_lock); 4836 nvgpu_mutex_release(&g->mm.priv_lock);
4837 if (IS_ERR(priv)) 4837 if (IS_ERR(priv))
4838 return -ENOMEM; 4838 return -ENOMEM;
4839 4839
@@ -5358,8 +5358,6 @@ void gk20a_mm_tlb_invalidate(struct vm_gk20a *vm)
5358 u32 addr_lo; 5358 u32 addr_lo;
5359 u32 data; 5359 u32 data;
5360 5360
5361 static DEFINE_MUTEX(tlb_lock);
5362
5363 gk20a_dbg_fn(""); 5361 gk20a_dbg_fn("");
5364 5362
5365 /* pagetables are considered sw states which are preserved after 5363 /* pagetables are considered sw states which are preserved after
@@ -5373,7 +5371,7 @@ void gk20a_mm_tlb_invalidate(struct vm_gk20a *vm)
5373 5371
5374 addr_lo = u64_lo32(gk20a_mem_get_base_addr(g, &vm->pdb.mem, 0) >> 12); 5372 addr_lo = u64_lo32(gk20a_mem_get_base_addr(g, &vm->pdb.mem, 0) >> 12);
5375 5373
5376 nvgpu_mutex_acquire(&tlb_lock); 5374 nvgpu_mutex_acquire(&g->mm.tlb_lock);
5377 5375
5378 trace_gk20a_mm_tlb_invalidate(dev_name(g->dev)); 5376 trace_gk20a_mm_tlb_invalidate(dev_name(g->dev));
5379 5377
@@ -5414,7 +5412,7 @@ void gk20a_mm_tlb_invalidate(struct vm_gk20a *vm)
5414 trace_gk20a_mm_tlb_invalidate_done(dev_name(g->dev)); 5412 trace_gk20a_mm_tlb_invalidate_done(dev_name(g->dev));
5415 5413
5416out: 5414out:
5417 nvgpu_mutex_release(&tlb_lock); 5415 nvgpu_mutex_release(&g->mm.tlb_lock);
5418} 5416}
5419 5417
5420int gk20a_mm_suspend(struct gk20a *g) 5418int gk20a_mm_suspend(struct gk20a *g)
diff --git a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
index 5f29c9e7..d7f6cb9a 100644
--- a/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
+++ b/drivers/gpu/nvgpu/gk20a/mm_gk20a.h
@@ -361,6 +361,8 @@ struct mm_gk20a {
361 } ce; 361 } ce;
362 362
363 struct nvgpu_mutex l2_op_lock; 363 struct nvgpu_mutex l2_op_lock;
364 struct nvgpu_mutex tlb_lock;
365 struct nvgpu_mutex priv_lock;
364#ifdef CONFIG_ARCH_TEGRA_18x_SOC 366#ifdef CONFIG_ARCH_TEGRA_18x_SOC
365 struct mem_desc bar2_desc; 367 struct mem_desc bar2_desc;
366#endif 368#endif
diff --git a/drivers/gpu/nvgpu/vgpu/mm_vgpu.c b/drivers/gpu/nvgpu/vgpu/mm_vgpu.c
index 70b50e7e..10bbbccb 100644
--- a/drivers/gpu/nvgpu/vgpu/mm_vgpu.c
+++ b/drivers/gpu/nvgpu/vgpu/mm_vgpu.c
@@ -30,6 +30,9 @@ static int vgpu_init_mm_setup_sw(struct gk20a *g)
30 return 0; 30 return 0;
31 } 31 }
32 32
33 nvgpu_mutex_init(&mm->tlb_lock);
34 nvgpu_mutex_init(&mm->priv_lock);
35
33 mm->g = g; 36 mm->g = g;
34 37
35 /*TBD: make channel vm size configurable */ 38 /*TBD: make channel vm size configurable */