drm/amdkfd: Remove skiping userptr buffer mapping when mmu notifier marks it as invalid
authorXiaogang Chen <xiaogang.chen@amd.com>
Sat, 29 Oct 2022 00:13:31 +0000 (19:13 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 4 Nov 2022 20:05:54 +0000 (16:05 -0400)
mmu notifier does not always hold mm->sem during call back. That causes
a race condition between kfd userprt buffer mapping and mmu notifier
which leds to gpu shadder or SDMA access userptr buffer before it has been
mapped to gpu VM. Always map userptr buffer to avoid that though it may make
some userprt buffers mapped two times.

Suggested-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Xiaogang Chen <xiaogang.chen@amd.com>
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c

index da9d475d7ef2dedbdbbbc2e1b520d969f7c5b125..ba72a910d0d598429d7c08b2521226c231d65690 100644 (file)
@@ -1907,16 +1907,6 @@ int amdgpu_amdkfd_gpuvm_map_memory_to_gpu(
         */
        mutex_lock(&mem->process_info->lock);
 
-       /* Lock mmap-sem. If we find an invalid userptr BO, we can be
-        * sure that the MMU notifier is no longer running
-        * concurrently and the queues are actually stopped
-        */
-       if (amdgpu_ttm_tt_get_usermm(bo->tbo.ttm)) {
-               mmap_write_lock(current->mm);
-               is_invalid_userptr = atomic_read(&mem->invalid);
-               mmap_write_unlock(current->mm);
-       }
-
        mutex_lock(&mem->lock);
 
        domain = mem->domain;