OSDN Git Service

drm/amdgpu: Make contiguous pinning optional
authorFelix Kuehling <Felix.Kuehling@amd.com>
Mon, 25 Jan 2021 22:34:35 +0000 (17:34 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 25 Jan 2021 22:45:10 +0000 (17:45 -0500)
Enable pinning of VRAM without forcing it to be contiguous. When memory is
already pinned, make sure it's contiguous if requested.

Suggested-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c

index 6cc9919..52f98e3 100644 (file)
@@ -911,10 +911,15 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain,
 
        if (bo->tbo.pin_count) {
                uint32_t mem_type = bo->tbo.mem.mem_type;
+               uint32_t mem_flags = bo->tbo.mem.placement;
 
                if (!(domain & amdgpu_mem_type_to_domain(mem_type)))
                        return -EINVAL;
 
+               if ((bo->flags & AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS) &&
+                   !(mem_flags & TTM_PL_FLAG_CONTIGUOUS))
+                       return -EINVAL;
+
                ttm_bo_pin(&bo->tbo);
 
                if (max_offset != 0) {
@@ -930,7 +935,6 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain,
        if (bo->tbo.base.import_attach)
                dma_buf_pin(bo->tbo.base.import_attach);
 
-       bo->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
        /* force to pin into visible video ram */
        if (!(bo->flags & AMDGPU_GEM_CREATE_NO_CPU_ACCESS))
                bo->flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
@@ -983,6 +987,7 @@ error:
  */
 int amdgpu_bo_pin(struct amdgpu_bo *bo, u32 domain)
 {
+       bo->flags |= AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS;
        return amdgpu_bo_pin_restricted(bo, domain, 0, 0);
 }