summaryrefslogtreecommitdiff
path: root/drivers/gpu/msm
diff options
context:
space:
mode:
authorravnar <quic_ravnar@quicinc.com>2022-04-20 19:51:19 +0530
committerSanjay Yadav <quic_sanjyada@quicinc.com>2022-05-12 17:29:20 +0530
commit5a359aba0364672acc23726dc807945ae6ce6397 (patch)
tree9b9d32c4c3d6e97755e046efc48cdcc850e2d8b8 /drivers/gpu/msm
parentda8317596949c2d2f69c512db0cb93212e02e086 (diff)
msm: kgsl: Remove 'fd' dependency to get dma_buf handle
Get the dma_buf handle directly from 'vm_file' after doing necessary checks on the file. Change-Id: Id5eec16588d64e4e28483b32bb52d4d3d9b86b99 Signed-off-by: ravnar <quic_ravnar@quicinc.com> Signed-off-by: Sanjay Yadav <quic_sanjyada@quicinc.com>
Diffstat (limited to 'drivers/gpu/msm')
-rw-r--r--drivers/gpu/msm/kgsl.c22
1 files changed, 7 insertions, 15 deletions
diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c
index d82471f198ba..c41c5649490d 100644
--- a/drivers/gpu/msm/kgsl.c
+++ b/drivers/gpu/msm/kgsl.c
@@ -2240,15 +2240,6 @@ static int kgsl_setup_anon_useraddr(struct kgsl_pagetable *pagetable,
return ret;
}
-static int match_file(const void *p, struct file *file, unsigned int fd)
-{
- /*
- * We must return fd + 1 because iterate_fd stops searching on
- * non-zero return, but 0 is a valid fd.
- */
- return (p == file) ? (fd + 1) : 0;
-}
-
static void _setup_cache_mode(struct kgsl_mem_entry *entry,
struct vm_area_struct *vma)
{
@@ -2287,8 +2278,6 @@ static int kgsl_setup_dmabuf_useraddr(struct kgsl_device *device,
vma = find_vma(current->mm, hostptr);
if (vma && vma->vm_file) {
- int fd;
-
ret = check_vma_flags(vma, entry->memdesc.flags);
if (ret) {
up_read(&current->mm->mmap_sem);
@@ -2304,10 +2293,13 @@ static int kgsl_setup_dmabuf_useraddr(struct kgsl_device *device,
return -EFAULT;
}
- /* Look for the fd that matches this the vma file */
- fd = iterate_fd(current->files, 0, match_file, vma->vm_file);
- if (fd != 0)
- dmabuf = dma_buf_get(fd - 1);
+ /*
+ * Take a refcount because dma_buf_put() decrements the
+ * refcount
+ */
+ get_file(vma->vm_file);
+
+ dmabuf = vma->vm_file->private_data;
}
if (IS_ERR_OR_NULL(dmabuf)) {