pr_debug("\t add VA 0x%llx - 0x%llx to vm %p\n", va,
                         va + bo_size, vm);
 
-               if (adev == bo_adev || (mem->domain == AMDGPU_GEM_DOMAIN_VRAM &&
-                                       amdgpu_xgmi_same_hive(adev, bo_adev))) {
-                       /* Mappings on the local GPU and VRAM mappings in the
-                        * local hive share the original BO
+               if (adev == bo_adev ||
+                  (amdgpu_ttm_tt_get_usermm(mem->bo->tbo.ttm) && adev->ram_is_direct_mapped) ||
+                  (mem->domain == AMDGPU_GEM_DOMAIN_VRAM && amdgpu_xgmi_same_hive(adev, bo_adev))) {
+                       /* Mappings on the local GPU, or VRAM mappings in the
+                        * local hive, or userptr mapping IOMMU direct map mode
+                        * share the original BO
                         */
                        attachment[i]->type = KFD_MEM_ATT_SHARED;
                        bo[i] = mem->bo;