summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorSunil Khatri <sunilkh@codeaurora.org>2017-07-06 15:09:35 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2017-07-17 03:47:56 -0700
commit988d8f6e83e49e1372f021432c99d9b6949cbd89 (patch)
tree03d1e0e9138f1e7aab9a0692cb2f2c4fb10f53db /drivers/gpu
parent0530e3fe605fe7346495ba0cf467051f64169af2 (diff)
msm: kgsl: Use vma_area_struct with proper locks
Make sure to use proper locks when using the vma_struct_area. This will avoid the race condition in a scenario where one thread gets a vma_struct_area and other thread is unmapping the vma from the process. Change-Id: I6c7837d1a8dd24fc6955ab5be8b1917a42f2cb53 Signed-off-by: Sunil Khatri <sunilkh@codeaurora.org>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/msm/kgsl.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c
index b2def8dea954..14bc79adaad3 100644
--- a/drivers/gpu/msm/kgsl.c
+++ b/drivers/gpu/msm/kgsl.c
@@ -2217,21 +2217,23 @@ static int kgsl_setup_dmabuf_useraddr(struct kgsl_device *device,
if (fd != 0)
dmabuf = dma_buf_get(fd - 1);
}
- up_read(&current->mm->mmap_sem);
- if (IS_ERR_OR_NULL(dmabuf))
+ if (IS_ERR_OR_NULL(dmabuf)) {
+ up_read(&current->mm->mmap_sem);
return dmabuf ? PTR_ERR(dmabuf) : -ENODEV;
+ }
ret = kgsl_setup_dma_buf(device, pagetable, entry, dmabuf);
if (ret) {
dma_buf_put(dmabuf);
+ up_read(&current->mm->mmap_sem);
return ret;
}
/* Setup the user addr/cache mode for cache operations */
entry->memdesc.useraddr = hostptr;
_setup_cache_mode(entry, vma);
-
+ up_read(&current->mm->mmap_sem);
return 0;
}
#else