On Mon, Apr 14, 2025 at 9:26 AM Sasha Levin <sas...@kernel.org> wrote: > > From: Christian König <christian.koe...@amd.com> > > [ Upstream commit f5e7fabd1f5c65b2e077efcdb118cfa67eae7311 ] > > Try pinning into VRAM to allow P2P with RDMA NICs without ODP > support if all attachments can do P2P. If any attachment can't do > P2P just pin into GTT instead. > > Acked-by: Simona Vetter <simona.vet...@ffwll.ch> > Signed-off-by: Christian König <christian.koe...@amd.com> > Signed-off-by: Felix Kuehling <felix.kuehl...@amd.com> > Reviewed-by: Felix Kuehling <felix.kuehl...@amd.com> > Tested-by: Pak Nin Lui <pak....@amd.com> > Cc: Simona Vetter <simona.vet...@ffwll.ch> > Signed-off-by: Alex Deucher <alexander.deuc...@amd.com> > Signed-off-by: Sasha Levin <sas...@kernel.org>
This should not go to stable. It depends on dmem cgroups. Alex > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 25 +++++++++++++++------ > 1 file changed, 18 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c > b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c > index 9f627caedc3f6..ee47f239c8c12 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c > @@ -75,11 +75,25 @@ static int amdgpu_dma_buf_attach(struct dma_buf *dmabuf, > */ > static int amdgpu_dma_buf_pin(struct dma_buf_attachment *attach) > { > - struct drm_gem_object *obj = attach->dmabuf->priv; > - struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj); > + struct dma_buf *dmabuf = attach->dmabuf; > + struct amdgpu_bo *bo = gem_to_amdgpu_bo(dmabuf->priv); > + u32 domains = bo->preferred_domains; > > - /* pin buffer into GTT */ > - return amdgpu_bo_pin(bo, AMDGPU_GEM_DOMAIN_GTT); > + dma_resv_assert_held(dmabuf->resv); > + > + /* > + * Try pinning into VRAM to allow P2P with RDMA NICs without ODP > + * support if all attachments can do P2P. If any attachment can't do > + * P2P just pin into GTT instead. > + */ > + list_for_each_entry(attach, &dmabuf->attachments, node) > + if (!attach->peer2peer) > + domains &= ~AMDGPU_GEM_DOMAIN_VRAM; > + > + if (domains & AMDGPU_GEM_DOMAIN_VRAM) > + bo->flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED; > + > + return amdgpu_bo_pin(bo, domains); > } > > /** > @@ -134,9 +148,6 @@ static struct sg_table *amdgpu_dma_buf_map(struct > dma_buf_attachment *attach, > r = ttm_bo_validate(&bo->tbo, &bo->placement, &ctx); > if (r) > return ERR_PTR(r); > - > - } else if (bo->tbo.resource->mem_type != TTM_PL_TT) { > - return ERR_PTR(-EBUSY); > } > > switch (bo->tbo.resource->mem_type) { > -- > 2.39.5 >