This commit finds the proper kfd_process by
filep->private_data in kfd_mmap,
because the function kfd_get_process()
can not locate a specific kfd process among
multiple contexts.

Signed-off-by: Zhu Lingshan <lingshan....@amd.com>
---
 drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c 
b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
index 28df35a63c29..662b181f1fd2 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
@@ -3407,16 +3407,19 @@ static int kfd_mmio_mmap(struct kfd_node *dev, struct 
kfd_process *process,
 }
 
 
-static int kfd_mmap(struct file *filp, struct vm_area_struct *vma)
+static int kfd_mmap(struct file *filep, struct vm_area_struct *vma)
 {
        struct kfd_process *process;
        struct kfd_node *dev = NULL;
        unsigned long mmap_offset;
        unsigned int gpu_id;
 
-       process = kfd_get_process(current);
-       if (IS_ERR(process))
-               return PTR_ERR(process);
+       process = filep->private_data;
+       if (!process)
+               return -ESRCH;
+
+       if (process->lead_thread != current->group_leader)
+               return -EBADF;
 
        mmap_offset = vma->vm_pgoff << PAGE_SHIFT;
        gpu_id = KFD_MMAP_GET_GPU_ID(mmap_offset);
-- 
2.47.1

Reply via email to