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>
This commit is contained in:
Sunil Khatri 2017-07-06 15:09:35 +05:30 committed by Gerrit - the friendly Code Review server
parent 0530e3fe60
commit 988d8f6e83

View file

@ -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