amd/amdgpu: Inherit coherence flags base on original BO flags
authorShane Xiao <shane.xiao@amd.com>
Thu, 6 Apr 2023 04:37:16 +0000 (12:37 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 11 Apr 2023 22:03:44 +0000 (18:03 -0400)
For SG BO to DMA-map userptrs on other GPUs, the SG BO
need inherit MTYPEs in PTEs from original BO.

If we set the flags, the device can be coherent with
the CPUs and other GPUs.

v2:
  1. Drop unnecessary flags check
  2. Remove local variable align

Signed-off-by: Shane Xiao <shane.xiao@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 ed58fa5af056378ef7066075fe4a461207f23bea..82a8b435148c03f0977c8a7d84fec1f447b28078 100644 (file)
@@ -272,15 +272,19 @@ create_dmamap_sg_bo(struct amdgpu_device *adev,
                 struct kgd_mem *mem, struct amdgpu_bo **bo_out)
 {
        struct drm_gem_object *gem_obj;
-       int ret, align;
+       int ret;
+       uint64_t flags = 0;
 
        ret = amdgpu_bo_reserve(mem->bo, false);
        if (ret)
                return ret;
 
-       align = 1;
-       ret = amdgpu_gem_object_create(adev, mem->bo->tbo.base.size, align,
-                       AMDGPU_GEM_DOMAIN_CPU, AMDGPU_GEM_CREATE_PREEMPTIBLE,
+       if (mem->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_USERPTR)
+               flags |= mem->bo->flags & (AMDGPU_GEM_CREATE_COHERENT |
+                                       AMDGPU_GEM_CREATE_UNCACHED);
+
+       ret = amdgpu_gem_object_create(adev, mem->bo->tbo.base.size, 1,
+                       AMDGPU_GEM_DOMAIN_CPU, AMDGPU_GEM_CREATE_PREEMPTIBLE | flags,
                        ttm_bo_type_sg, mem->bo->tbo.base.resv, &gem_obj);
 
        amdgpu_bo_unreserve(mem->bo);