diff options
| author | Matthew Auld <[email protected]> | 2025-04-10 16:27:17 +0000 |
|---|---|---|
| committer | Lucas De Marchi <[email protected]> | 2025-04-18 01:53:38 +0000 |
| commit | 25583ad42d091819157832e894179200ba8b54ee (patch) | |
| tree | 37a7d85c82eb02f81cc7a3105b2a1d90fd7495eb /rust/helpers/platform.c | |
| parent | drm/xe/userptr: fix notifier vs folio deadlock (diff) | |
| download | kernel-25583ad42d091819157832e894179200ba8b54ee.tar.gz kernel-25583ad42d091819157832e894179200ba8b54ee.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]
(cherry picked from commit d755887f8e5a2a18e15e6632a5193e5feea18499)
Signed-off-by: Lucas De Marchi <[email protected]>
Diffstat (limited to 'rust/helpers/platform.c')
0 files changed, 0 insertions, 0 deletions
