]> git.ipfire.org Git - thirdparty/linux.git/commit
drm/xe/dma_buf: stop relying on placement in unmap
authorMatthew Auld <matthew.auld@intel.com>
Thu, 10 Apr 2025 16:27:17 +0000 (17:27 +0100)
committerMatthew Auld <matthew.auld@intel.com>
Wed, 16 Apr 2025 08:59:24 +0000 (09:59 +0100)
commitd755887f8e5a2a18e15e6632a5193e5feea18499
treeb4de93034070d9f2edce25c8dc8e2e1fd8c849ad
parentbd7c0cb695e87c0e43247be8196b4919edbe0e85
drm/xe/dma_buf: stop relying on placement in unmap

The is_vram() is checking the current placement, however if we consider
exported VRAM with dynamic dma-buf, it looks possible for the xe driver
to async evict the memory, notifying the importer, however importer does
not have to call unmap_attachment() immediately, but rather just as
"soon as possible", like when the dma-resv idles. Following from this we
would then pipeline the move, attaching the fence to the manager, and
then update the current placement. But when the unmap_attachment() runs
at some later point we might see that is_vram() is now false, and take
the complete wrong path when dma-unmapping the sg, leading to
explosions.

To fix this check if the sgl was mapping a struct page.

v2:
  - The attachment can be mapped multiple times it seems, so we can't
    really rely on encoding something in the attachment->priv. Instead
    see if the page_link has an encoded struct page. For vram we expect
    this to be NULL.

Link: https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/4563
Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: <stable@vger.kernel.org> # v6.8+
Acked-by: Christian König <christian.koenig@amd.com>
Link: https://lore.kernel.org/r/20250410162716.159403-2-matthew.auld@intel.com
drivers/gpu/drm/xe/xe_dma_buf.c