drm/amdgpu: Use allowed_domains for pinning dmabufs
authorFelix Kuehling <felix.kuehling@amd.com>
Thu, 17 Apr 2025 14:23:15 +0000 (10:23 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 21 Apr 2025 14:59:05 +0000 (10:59 -0400)
When determining the domains for pinning DMABufs, filter allowed_domains
and fail with a warning if VRAM is forbidden and GTT is not an allowed
domain.

Fixes: f5e7fabd1f5c ("drm/amdgpu: allow pinning DMA-bufs into VRAM if all importers can do P2P")
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_dma_buf.c

index 667080cc9ae1c1209eb7883cccab3b318b684d41..0446586bd5a706d31c548919952c4a2176df3d0b 100644 (file)
@@ -77,7 +77,7 @@ static int amdgpu_dma_buf_pin(struct dma_buf_attachment *attach)
 {
        struct dma_buf *dmabuf = attach->dmabuf;
        struct amdgpu_bo *bo = gem_to_amdgpu_bo(dmabuf->priv);
-       u32 domains = bo->preferred_domains;
+       u32 domains = bo->allowed_domains;
 
        dma_resv_assert_held(dmabuf->resv);
 
@@ -93,6 +93,9 @@ static int amdgpu_dma_buf_pin(struct dma_buf_attachment *attach)
        if (domains & AMDGPU_GEM_DOMAIN_VRAM)
                bo->flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
 
+       if (WARN_ON(!domains))
+               return -EINVAL;
+
        return amdgpu_bo_pin(bo, domains);
 }