Skip to content

Commit d9db9ab

Browse files
vprosyakgregkh
authored andcommitted
drm/amdgpu: disable peer-to-peer access for DCC-enabled GC12 VRAM surfaces
commit 22a36e6 upstream. Certain multi-GPU configurations (especially GFX12) may hit data corruption when a DCC-compressed VRAM surface is shared across GPUs using peer-to-peer (P2P) DMA transfers. Such surfaces rely on device-local metadata and cannot be safely accessed through a remote GPU’s page tables. Attempting to import a DCC-enabled surface through P2P leads to incorrect rendering or GPU faults. This change disables P2P for DCC-enabled VRAM buffers that are contiguous and allocated on GFX12+ hardware. In these cases, the importer falls back to the standard system-memory path, avoiding invalid access to compressed surfaces. Future work could consider optional migration (VRAM→System→VRAM) if a performance regression is observed when `attach->peer2peer = false`. Tested on: - Dual RX 9700 XT (Navi4x) setup - GNOME and Wayland compositor scenarios - Confirmed no corruption after disabling P2P under these conditions v2: Remove check TTM_PL_VRAM & TTM_PL_FLAG_CONTIGUOUS. v3: simplify for upsteam and fix ip version check (Alex) Suggested-by: Christian König <[email protected]> Signed-off-by: Vitaly Prosyak <[email protected]> Reviewed-by: Christian König <[email protected]> Signed-off-by: Alex Deucher <[email protected]> (cherry picked from commit 9dff2bb) Cc: [email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 325aa07 commit d9db9ab

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,18 @@ static int amdgpu_dma_buf_attach(struct dma_buf *dmabuf,
8181
struct amdgpu_bo *bo = gem_to_amdgpu_bo(obj);
8282
struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
8383

84+
/*
85+
* Disable peer-to-peer access for DCC-enabled VRAM surfaces on GFX12+.
86+
* Such buffers cannot be safely accessed over P2P due to device-local
87+
* compression metadata. Fallback to system-memory path instead.
88+
* Device supports GFX12 (GC 12.x or newer)
89+
* BO was created with the AMDGPU_GEM_CREATE_GFX12_DCC flag
90+
*
91+
*/
92+
if (amdgpu_ip_version(adev, GC_HWIP, 0) >= IP_VERSION(12, 0, 0) &&
93+
bo->flags & AMDGPU_GEM_CREATE_GFX12_DCC)
94+
attach->peer2peer = false;
95+
8496
if (!amdgpu_dmabuf_is_xgmi_accessible(attach_adev, bo) &&
8597
pci_p2pdma_distance(adev->pdev, attach->dev, false) < 0)
8698
attach->peer2peer = false;

0 commit comments

Comments
 (0)