Am 07.04.25 um 16:44 schrieb Matthew Auld: > On 07/04/2025 15:32, Christian König wrote: >> Am 07.04.25 um 16:18 schrieb Matthew Auld: >>> The page_link lower bits of the first sg could contain something like >>> SG_END, if we are mapping a single VRAM page or contiguous blob which >>> fits into one sg entry. Rather pull out the struct page, and use that in >>> our check to know if we mapped struct pages vs VRAM. >>> >>> Fixes: f44ffd677fb3 ("drm/amdgpu: add support for exporting VRAM using >>> DMA-buf v3") >>> Signed-off-by: Matthew Auld <matthew.a...@intel.com> >>> Cc: Christian König <christian.koe...@amd.com> >>> Cc: amd-gfx@lists.freedesktop.org >>> Cc: <sta...@vger.kernel.org> # v5.8+ >> >> Good point, haven't thought about that at all since we only abuse the sg >> table as DMA addr container. >> >> Reviewed-by: Christian König <christian.koe...@amd.com> >> >> Were is patch #1 from this series? > > That one is xe specific: > https://lore.kernel.org/intel-xe/20250407141823.44504-3-matthew.a...@intel.com/T/#m4ef16e478cfc8853d4518448dd345a66d5a7f6d9 > > I copied your approach with using page_link here, but with added sg_page().
Feel free to add my Acked-by to that one as well. I just wanted to double check if we need to push the patches upstream together, but that looks like we can take each through individual branches. Thanks, Christian. > >> >> Thanks, >> Christian. >> >>> --- >>> drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c >>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c >>> index 9f627caedc3f..c9842a0e2a1c 100644 >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c >>> @@ -184,7 +184,7 @@ static void amdgpu_dma_buf_unmap(struct >>> dma_buf_attachment *attach, >>> struct sg_table *sgt, >>> enum dma_data_direction dir) >>> { >>> - if (sgt->sgl->page_link) { >>> + if (sg_page(sgt->sgl)) { >>> dma_unmap_sgtable(attach->dev, sgt, dir, 0); >>> sg_free_table(sgt); >>> kfree(sgt); >> >