]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe/bmg: fix compressed VRAM handling
authorMatthew Auld <matthew.auld@intel.com>
Tue, 1 Jul 2025 10:39:50 +0000 (11:39 +0100)
committerMatthew Auld <matthew.auld@intel.com>
Fri, 4 Jul 2025 11:31:06 +0000 (12:31 +0100)
There looks to be an issue in our compression handling when the BO pages
are very fragmented, where we choose to skip the identity map and
instead fall back to emitting the PTEs by hand when migrating memory,
such that we can hopefully do more work per blit operation. However in
such a case we need to ensure the src PTEs are correctly tagged with a
compression enabled PAT index on dgpu xe2+, otherwise the copy will
simply treat the src memory as uncompressed, leading to corruption if
the memory was compressed by the user.

To fix this pass along use_comp_pat into emit_pte() on the src side, to
indicate that compression should be considered.

v2 (Jonathan): tweak the commit message

Fixes: 523f191cc0c7 ("drm/xe/xe_migrate: Handle migration logic for xe2+ dgfx")
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Akshata Jahagirdar <akshata.jahagirdar@intel.com>
Cc: <stable@vger.kernel.org> # v6.12+
Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
Link: https://lore.kernel.org/r/20250701103949.83116-2-matthew.auld@intel.com
drivers/gpu/drm/xe/xe_migrate.c

index 0838582537e82f98747cabe26755808b63f75d32..4e2bdf70eb70b73525719f420792774798d27417 100644 (file)
@@ -863,7 +863,7 @@ struct dma_fence *xe_migrate_copy(struct xe_migrate *m,
                if (src_is_vram && xe_migrate_allow_identity(src_L0, &src_it))
                        xe_res_next(&src_it, src_L0);
                else
-                       emit_pte(m, bb, src_L0_pt, src_is_vram, copy_system_ccs,
+                       emit_pte(m, bb, src_L0_pt, src_is_vram, copy_system_ccs || use_comp_pat,
                                 &src_it, src_L0, src);
 
                if (dst_is_vram && xe_migrate_allow_identity(src_L0, &dst_it))