diff options
author | Deepak Nibade <dnibade@nvidia.com> | 2017-02-02 04:46:33 -0500 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-02-22 07:15:08 -0500 |
commit | 8cdb91c527ce19ce67ddc0e231e8c93a552a93a4 (patch) | |
tree | 38e9cb1adb5db1d89dede1354cbe26a47e3590cb /drivers/gpu/nvgpu | |
parent | 8ee3aa4b3175d8d27e57a0f5d5e2cdf3d78a4a58 (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/gpu/nvgpu')
-rw-r--r-- | drivers/gpu/nvgpu/common/nvgpu_common.c | 3 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.c | 12 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/mm_gk20a.h | 2 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/vgpu/mm_vgpu.c | 3 |
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 | ||
115 | int nvgpu_probe(struct gk20a *g, | 118 | int 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 | ||
4812 | int gk20a_dmabuf_alloc_drvdata(struct dma_buf *dmabuf, struct device *dev) | 4812 | int 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); |
4835 | priv_exist_or_err: | 4835 | priv_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 | ||
5416 | out: | 5414 | out: |
5417 | nvgpu_mutex_release(&tlb_lock); | 5415 | nvgpu_mutex_release(&g->mm.tlb_lock); |
5418 | } | 5416 | } |
5419 | 5417 | ||
5420 | int gk20a_mm_suspend(struct gk20a *g) | 5418 | int 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 */ |