diff options
| author | Matthew Auld <[email protected]> | 2025-04-10 16:27:17 +0000 |
|---|---|---|
| committer | Matthew Auld <[email protected]> | 2025-04-16 08:59:24 +0000 |
| commit | d755887f8e5a2a18e15e6632a5193e5feea18499 (patch) | |
| tree | b4de93034070d9f2edce25c8dc8e2e1fd8c849ad /drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | |
| parent | drm/xe/userptr: fix notifier vs folio deadlock (diff) | |
| download | kernel-d755887f8e5a2a18e15e6632a5193e5feea18499.tar.gz kernel-d755887f8e5a2a18e15e6632a5193e5feea18499.zip | |
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 <[email protected]>
Cc: Thomas Hellström <[email protected]>
Cc: Matthew Brost <[email protected]>
Cc: <[email protected]> # v6.8+
Acked-by: Christian König <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_device.c')
0 files changed, 0 insertions, 0 deletions
