All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/4] drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY
@ 2026-06-22 10:34 Jan Maslak
  2026-06-22 10:34 ` [PATCH v2 1/4] drm/xe/xe_migrate: Align MEM_COPY pitch with destination address Jan Maslak
                   ` (7 more replies)
  0 siblings, 8 replies; 15+ messages in thread
From: Jan Maslak @ 2026-06-22 10:34 UTC (permalink / raw)
  To: intel-xe
  Cc: matthew.auld, matthew.brost, thomas.hellstrom, rodrigo.vivi,
	Jan Maslak

MEM_COPY_CMD in MATRIX_COPY mode produces incorrect results when the
destination address is not aligned to the pitch. This manifests as
memory corruption during xe_migrate_access_memory() reads from VRAM.

The probable cause appears to be a hardware requirement that the
destination address must be aligned to the pitch when using MATRIX_COPY
mode.

This was observed on BMG during xe_migrate_access_memory() calls where
the destination offset within a page was not aligned to the computed
pitch value.

Patch 1 adds the minimal workaround by selecting a pitch that is aligned
to both the copy length and the destination address.

Patch 2 fixes an independent page tracking bug in
xe_migrate_access_memory().

Patch 3 adds a follow-up optimization to reduce the number of linear
copy jobs for unaligned destinations.

Patch 4 adds a KUnit live test that exercises xe_migrate_access_memory()
with various unaligned destination offsets to prevent regressions.

Tested on BMG (Battlemage).

v2:
 - Split the original xe_migrate change into a minimal workaround,
   a standalone page tracking fix, and a follow-up optimization
   per Matthew Auld's review feedback

Christoph Manszewski (4):
  drm/xe/xe_migrate: Align MEM_COPY pitch with destination address
  drm/xe/xe_migrate: Fix page tracking in access_memory
  drm/xe/xe_migrate: Optimize unaligned access_memory copies
  drm/xe/tests: Add xe_migrate_access_memory subtest

 drivers/gpu/drm/xe/tests/xe_migrate.c | 278 ++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_migrate.c       | 173 ++++++++++++++--
 2 files changed, 432 insertions(+), 19 deletions(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH v2 1/4] drm/xe/xe_migrate: Align MEM_COPY pitch with destination address
  2026-06-22 10:34 [PATCH v2 0/4] drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY Jan Maslak
@ 2026-06-22 10:34 ` Jan Maslak
  2026-08-17 16:39   ` Matthew Auld
  2026-09-07 13:59   ` Matthew Auld
  2026-06-22 10:34 ` [PATCH v2 2/4] drm/xe/xe_migrate: Fix page tracking in access_memory Jan Maslak
                   ` (6 subsequent siblings)
  7 siblings, 2 replies; 15+ messages in thread
From: Jan Maslak @ 2026-06-22 10:34 UTC (permalink / raw)
  To: intel-xe
  Cc: matthew.auld, matthew.brost, thomas.hellstrom, rodrigo.vivi,
	Christoph Manszewski, Jan Maslak

From: Christoph Manszewski <christoph.manszewski@intel.com>

MEM_COPY_CMD can corrupt memory when MATRIX_COPY mode uses a pitch that
is not aligned to the destination address.

Fix this by incorporating the destination address into the pitch
selection so the chosen pitch is aligned to both the copy length and the
destination address.

Signed-off-by: Christoph Manszewski <christoph.manszewski@intel.com>
Signed-off-by: Jan Maslak <jan.maslak@intel.com>
---
 drivers/gpu/drm/xe/xe_migrate.c | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
index 9428dd5e7760..9218eba31d45 100644
--- a/drivers/gpu/drm/xe/xe_migrate.c
+++ b/drivers/gpu/drm/xe/xe_migrate.c
@@ -2186,17 +2186,18 @@ static bool xe_migrate_vram_use_pde(struct drm_pagemap_addr *sram_addr,
 #define XE_CACHELINE_BYTES	64ull
 #define XE_CACHELINE_MASK	(XE_CACHELINE_BYTES - 1)
 
-static u32 xe_migrate_copy_pitch(struct xe_device *xe, u32 len)
+static u32 xe_migrate_copy_pitch(struct xe_device *xe, u32 len, u64 dst_addr)
 {
+	u64 align_check = len | dst_addr;
 	u32 pitch;
 
-	if (IS_ALIGNED(len, PAGE_SIZE))
+	if (IS_ALIGNED(align_check, PAGE_SIZE))
 		pitch = PAGE_SIZE;
-	else if (IS_ALIGNED(len, SZ_4K))
+	else if (IS_ALIGNED(align_check, SZ_4K))
 		pitch = SZ_4K;
-	else if (IS_ALIGNED(len, SZ_256))
+	else if (IS_ALIGNED(align_check, SZ_256))
 		pitch = SZ_256;
-	else if (IS_ALIGNED(len, 4))
+	else if (IS_ALIGNED(align_check, 4))
 		pitch = 4;
 	else
 		pitch = 1;
@@ -2223,16 +2224,11 @@ static struct dma_fence *xe_migrate_vram(struct xe_migrate *m,
 	struct xe_bb *bb;
 	u32 update_idx, pt_slot = 0;
 	unsigned long npages = DIV_ROUND_UP(len + sram_offset, PAGE_SIZE);
-	unsigned int pitch = xe_migrate_copy_pitch(xe, len);
+	unsigned int pitch;
 	int err;
 	unsigned long i, j;
 	bool use_pde = xe_migrate_vram_use_pde(sram_addr, len + sram_offset);
 
-	if (!xe->info.has_mem_copy_instr &&
-	    drm_WARN_ON(&xe->drm,
-			(!IS_ALIGNED(len, pitch)) || (sram_offset | vram_addr) & XE_CACHELINE_MASK))
-		return ERR_PTR(-EOPNOTSUPP);
-
 	xe_assert(xe, npages * PAGE_SIZE <= MAX_PREEMPTDISABLE_TRANSFER);
 
 	batch_size += pte_update_cmd_size(npages << PAGE_SHIFT);
@@ -2284,6 +2280,13 @@ static struct dma_fence *xe_migrate_vram(struct xe_migrate *m,
 			dst_L0_ofs = xe_migrate_vm_addr(pt_slot, 0) + sram_offset;
 	}
 
+	pitch = xe_migrate_copy_pitch(xe, len, dst_L0_ofs);
+	if (!xe->info.has_mem_copy_instr &&
+	    drm_WARN_ON(&xe->drm,
+			(!IS_ALIGNED(len, pitch)) ||
+			(sram_offset | vram_addr) & XE_CACHELINE_MASK))
+		return ERR_PTR(-EOPNOTSUPP);
+
 	bb->cs[bb->len++] = MI_BATCH_BUFFER_END;
 	update_idx = bb->len;
 
@@ -2536,7 +2539,9 @@ int xe_migrate_access_memory(struct xe_migrate *m, struct xe_bo *bo,
 		else
 			current_bytes = min_t(int, bytes_left, cursor.size);
 
-		pitch = xe_migrate_copy_pitch(xe, current_bytes);
+		pitch = xe_migrate_copy_pitch(xe, current_bytes,
+					      write ? vram_addr :
+					      (unsigned long)buf & ~PAGE_MASK);
 		if (xe->info.has_mem_copy_instr)
 			current_bytes = min_t(int, current_bytes, U16_MAX * pitch);
 		else
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v2 2/4] drm/xe/xe_migrate: Fix page tracking in access_memory
  2026-06-22 10:34 [PATCH v2 0/4] drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY Jan Maslak
  2026-06-22 10:34 ` [PATCH v2 1/4] drm/xe/xe_migrate: Align MEM_COPY pitch with destination address Jan Maslak
@ 2026-06-22 10:34 ` Jan Maslak
  2026-09-07 16:19   ` Matthew Auld
  2026-06-22 10:34 ` [PATCH v2 3/4] drm/xe/xe_migrate: Optimize unaligned access_memory copies Jan Maslak
                   ` (5 subsequent siblings)
  7 siblings, 1 reply; 15+ messages in thread
From: Jan Maslak @ 2026-06-22 10:34 UTC (permalink / raw)
  To: intel-xe
  Cc: matthew.auld, matthew.brost, thomas.hellstrom, rodrigo.vivi,
	Christoph Manszewski, Jan Maslak

From: Christoph Manszewski <christoph.manszewski@intel.com>

xe_migrate_access_memory() advances the pagemap cursor based on the
current page in the CPU buffer.

Include the initial page offset when recalculating current_page so
subsequent iterations continue to index the mapped pages correctly.

Signed-off-by: Christoph Manszewski <christoph.manszewski@intel.com>
Signed-off-by: Jan Maslak <jan.maslak@intel.com>
---
 drivers/gpu/drm/xe/xe_migrate.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
index 9218eba31d45..135d59f6e100 100644
--- a/drivers/gpu/drm/xe/xe_migrate.c
+++ b/drivers/gpu/drm/xe/xe_migrate.c
@@ -2569,7 +2569,7 @@ int xe_migrate_access_memory(struct xe_migrate *m, struct xe_bo *bo,
 
 		buf += current_bytes;
 		offset += current_bytes;
-		current_page = (int)(buf - orig_buf) / PAGE_SIZE;
+		current_page = (int)(buf - orig_buf + page_offset) / PAGE_SIZE;
 		bytes_left -= current_bytes;
 		if (bytes_left)
 			xe_res_next(&cursor, current_bytes);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v2 3/4] drm/xe/xe_migrate: Optimize unaligned access_memory copies
  2026-06-22 10:34 [PATCH v2 0/4] drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY Jan Maslak
  2026-06-22 10:34 ` [PATCH v2 1/4] drm/xe/xe_migrate: Align MEM_COPY pitch with destination address Jan Maslak
  2026-06-22 10:34 ` [PATCH v2 2/4] drm/xe/xe_migrate: Fix page tracking in access_memory Jan Maslak
@ 2026-06-22 10:34 ` Jan Maslak
  2026-09-08 10:39   ` Matthew Auld
  2026-06-22 10:34 ` [PATCH v2 4/4] drm/xe/tests: Add xe_migrate_access_memory subtest Jan Maslak
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 15+ messages in thread
From: Jan Maslak @ 2026-06-22 10:34 UTC (permalink / raw)
  To: intel-xe
  Cc: matthew.auld, matthew.brost, thomas.hellstrom, rodrigo.vivi,
	Christoph Manszewski, Jan Maslak

From: Christoph Manszewski <christoph.manszewski@intel.com>

When xe_migrate_access_memory() falls back to a smaller pitch for an
unaligned destination, the copy can end up running linearly for the
entire transfer.

Reduce the number of copy jobs by first using a short linear copy to
reach a better destination alignment, then using the largest matrix copy
pitch that alignment supports, and finally using a linear copy for any
remaining tail bytes.

Signed-off-by: Christoph Manszewski <christoph.manszewski@intel.com>
Signed-off-by: Jan Maslak <jan.maslak@intel.com>
---
 drivers/gpu/drm/xe/xe_migrate.c | 148 ++++++++++++++++++++++++++++++--
 1 file changed, 139 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
index 135d59f6e100..f5aa4a0dd6c4 100644
--- a/drivers/gpu/drm/xe/xe_migrate.c
+++ b/drivers/gpu/drm/xe/xe_migrate.c
@@ -2206,6 +2206,86 @@ static u32 xe_migrate_copy_pitch(struct xe_device *xe, u32 len, u64 dst_addr)
 	return pitch;
 }
 
+/**
+ * xe_migrate_dst_pitch() - Determine max pitch supported by dst alignment
+ * @dst_addr: Destination address (page offset)
+ *
+ * Returns the largest pitch (PAGE_SIZE, SZ_4K, SZ_256, or 4) that dst_addr
+ * supports based solely on its alignment. Returns 1 if not even 4-byte aligned.
+ */
+static u32 xe_migrate_dst_pitch(u64 dst_addr)
+{
+	if (IS_ALIGNED(dst_addr, PAGE_SIZE))
+		return PAGE_SIZE;
+	if (IS_ALIGNED(dst_addr, SZ_4K))
+		return SZ_4K;
+	if (IS_ALIGNED(dst_addr, SZ_256))
+		return SZ_256;
+	if (IS_ALIGNED(dst_addr, 4))
+		return 4;
+	return 1;
+}
+
+/**
+ * xe_migrate_best_alignment() - Find the best alignment reachable within max_bytes
+ * @dst_addr: Current destination address
+ * @max_bytes: Maximum bytes we can copy to reach alignment (typically U16_MAX)
+ *
+ * Returns the largest alignment (PAGE_SIZE, SZ_4K, SZ_256, or 4) that dst_addr
+ * can reach by copying at most max_bytes. Returns 0 if already at best alignment
+ * or if no useful alignment can be reached.
+ */
+static u32 xe_migrate_best_alignment(u64 dst_addr, u32 max_bytes)
+{
+	u32 bytes_to_page = round_up(dst_addr, PAGE_SIZE) - dst_addr;
+	u32 bytes_to_4k = round_up(dst_addr, SZ_4K) - dst_addr;
+	u32 bytes_to_256 = round_up(dst_addr, SZ_256) - dst_addr;
+	u32 bytes_to_4 = round_up(dst_addr, 4) - dst_addr;
+
+	if (bytes_to_page == 0)
+		return 0;
+
+	if (bytes_to_page <= max_bytes)
+		return PAGE_SIZE;
+
+	if (bytes_to_4k > 0 && bytes_to_4k <= max_bytes)
+		return SZ_4K;
+
+	if (bytes_to_256 > 0 && bytes_to_256 <= max_bytes)
+		return SZ_256;
+
+	if (bytes_to_4 > 0 && bytes_to_4 <= max_bytes)
+		return 4;
+
+	return 0;
+}
+
+/**
+ * xe_migrate_bytes_to_align() - Calculate bytes needed to reach target alignment
+ * @dst_addr: Current destination address
+ * @alignment: Target alignment (PAGE_SIZE, SZ_4K, SZ_256, or 4)
+ *
+ * Returns: Number of bytes to copy to reach the target alignment.
+ */
+static u32 xe_migrate_bytes_to_align(u64 dst_addr, u32 alignment)
+{
+	return round_up(dst_addr, alignment) - dst_addr;
+}
+
+/**
+ * xe_migrate_aligned_copy_len() - Calculate the aligned copy length for matrix copy
+ * @len: Remaining bytes
+ * @pitch: The pitch to use for matrix copy
+ *
+ * Returns: Length rounded down to pitch, or 0 if less than pitch.
+ */
+static u32 xe_migrate_aligned_copy_len(u32 len, u32 pitch)
+{
+	if (len < pitch)
+		return 0;
+	return round_down(len, pitch);
+}
+
 static struct dma_fence *xe_migrate_vram(struct xe_migrate *m,
 					 unsigned long len,
 					 unsigned long sram_offset,
@@ -2539,15 +2619,65 @@ int xe_migrate_access_memory(struct xe_migrate *m, struct xe_bo *bo,
 		else
 			current_bytes = min_t(int, bytes_left, cursor.size);
 
-		pitch = xe_migrate_copy_pitch(xe, current_bytes,
-					      write ? vram_addr :
-					      (unsigned long)buf & ~PAGE_MASK);
-		if (xe->info.has_mem_copy_instr)
-			current_bytes = min_t(int, current_bytes, U16_MAX * pitch);
-		else
-			current_bytes = min_t(int, current_bytes,
-					      round_down(S16_MAX * pitch,
-							 XE_CACHELINE_BYTES));
+		{
+			/*
+			 * Optimized copy strategy to minimize number of jobs:
+			 * 1. Linear copy to align dst to best reachable alignment
+			 * 2. Matrix copy for bulk data copy
+			 * 3. Single linear copy for remaining bytes
+			 */
+			u64 dst_addr = write ? vram_addr :
+					       (unsigned long)buf & ~PAGE_MASK;
+			u32 max_linear = xe->info.has_mem_copy_instr ? U16_MAX :
+					 round_down(S16_MAX, XE_CACHELINE_BYTES);
+			u32 best_align = xe_migrate_best_alignment(dst_addr, max_linear);
+			u32 bytes_to_align = best_align ?
+					     xe_migrate_bytes_to_align(dst_addr, best_align) : 0;
+
+			if (bytes_to_align > 0 && bytes_to_align <= (u32)current_bytes) {
+				/*
+				 * Phase 1: Linear copy to reach best alignment.
+				 * Copy just enough bytes to align dst_addr.
+				 */
+				pitch = 1;
+				current_bytes = min_t(int, bytes_to_align, max_linear);
+			} else if (IS_ALIGNED(dst_addr, 4)) {
+				/*
+				 * Phase 2: Matrix copy for aligned bulk data.
+				 * Use the best pitch that dst alignment supports,
+				 * then round down len to that pitch.
+				 */
+				u32 dst_pitch = xe_migrate_dst_pitch(dst_addr);
+				u32 aligned_len = xe_migrate_aligned_copy_len(current_bytes,
+								      dst_pitch);
+
+				if (aligned_len >= dst_pitch) {
+					pitch = dst_pitch;
+					if (xe->info.has_mem_copy_instr) {
+						current_bytes = min_t(int, aligned_len,
+								      U16_MAX * pitch);
+					} else {
+						current_bytes = min_t(int, aligned_len,
+								      round_down(S16_MAX * pitch,
+										 XE_CACHELINE_BYTES));
+					}
+				} else {
+					/*
+					 * Phase 3: Linear copy for remainder.
+					 * Not enough for matrix copy - do single linear copy.
+					 */
+					pitch = 1;
+					current_bytes = min_t(int, current_bytes, max_linear);
+				}
+			} else {
+				/*
+				 * Phase 3: Linear copy for remainder.
+				 * dst not 4-aligned and can't reach alignment - linear copy.
+				 */
+				pitch = 1;
+				current_bytes = min_t(int, current_bytes, max_linear);
+			}
+		}
 
 		__fence = xe_migrate_vram(m, current_bytes,
 					  (unsigned long)buf & ~PAGE_MASK,
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v2 4/4] drm/xe/tests: Add xe_migrate_access_memory subtest
  2026-06-22 10:34 [PATCH v2 0/4] drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY Jan Maslak
                   ` (2 preceding siblings ...)
  2026-06-22 10:34 ` [PATCH v2 3/4] drm/xe/xe_migrate: Optimize unaligned access_memory copies Jan Maslak
@ 2026-06-22 10:34 ` Jan Maslak
  2026-09-04 12:14   ` Matthew Auld
  2026-06-22 15:58 ` ✗ CI.checkpatch: warning for drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY (rev2) Patchwork
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 15+ messages in thread
From: Jan Maslak @ 2026-06-22 10:34 UTC (permalink / raw)
  To: intel-xe
  Cc: matthew.auld, matthew.brost, thomas.hellstrom, rodrigo.vivi,
	Christoph Manszewski, Jan Maslak

From: Christoph Manszewski <christoph.manszewski@intel.com>

Add a new xe_migrate subtest for vram to sram migration works:
 - when the dst address is not 4-byte aligned
 - when the dst address in not 4-byte aligned but the migration size is
 - when src BO offset is not 4-byte aligned

Signed-off-by: Christoph Manszewski <christoph.manszewski@intel.com>
Signed-off-by: Jan Maslak <jan.maslak@intel.com>
---
 drivers/gpu/drm/xe/tests/xe_migrate.c | 278 ++++++++++++++++++++++++++
 1 file changed, 278 insertions(+)

diff --git a/drivers/gpu/drm/xe/tests/xe_migrate.c b/drivers/gpu/drm/xe/tests/xe_migrate.c
index 3c1be809be82..dcdcf40ae718 100644
--- a/drivers/gpu/drm/xe/tests/xe_migrate.c
+++ b/drivers/gpu/drm/xe/tests/xe_migrate.c
@@ -6,9 +6,12 @@
 #include <kunit/test.h>
 #include <kunit/visibility.h>
 
+#include <linux/prandom.h>
+
 #include "tests/xe_kunit_helpers.h"
 #include "tests/xe_pci_test.h"
 
+#include "xe_migrate.h"
 #include "xe_pat.h"
 #include "xe_pci.h"
 #include "xe_pm.h"
@@ -771,9 +774,284 @@ static void xe_validate_ccs_kunit(struct kunit *test)
 	validate_ccs_test_run_device(xe);
 }
 
+#define ACCESS_MEM_BO_SIZE		SZ_512K
+#define ACCESS_MEM_NUM_CELLS		(ACCESS_MEM_BO_SIZE / sizeof(u32))
+#define ACCESS_MEM_UNALIGNED_OFFSET	0x215ee
+
+/*
+ * Verify byte-by-byte that data read from the BO matches expected cell pattern.
+ * The BO is primed with u32 cells where cell[i] = i, so BO byte at offset B
+ * has value: (B / 4 >> (B%4 * 8)) & 0xFF.
+ *
+ * @buf:       the target buffer
+ * @buf_start: index into buf where read data begins
+ * @bo_start:  the BO byte offset corresponding to buf[buf_start]
+ * @size:      number of bytes to verify
+ * @scenario:  label for error messages
+ *
+ * Returns true if all bytes match, false on first mismatch.
+ */
+static bool verify_access_memory_read(struct kunit *test, u8 *buf,
+				      u32 buf_start, u32 bo_start,
+				      u32 size, const char *scenario)
+{
+	u32 j;
+
+	for (j = 0; j < size; j++) {
+		u32 bo_byte_offset = bo_start + j;
+		u32 byte_in_cell = bo_byte_offset % sizeof(u32);
+		u32 cell_idx = bo_byte_offset / sizeof(u32);
+		u32 cell_value = cell_idx;
+		u8 expected_byte = (cell_value >> (byte_in_cell * 8)) & 0xFF;
+		u8 got_byte = buf[buf_start + j];
+
+		if (got_byte != expected_byte) {
+			u32 context_end = min(j + 8, size - 1);
+			u32 context_start = (j >= 8) ? j - 8 : 0;
+			u32 k;
+
+			KUNIT_FAIL(test,
+				   "%s MISMATCH\n"
+				   "  Buffer index:    %u (0x%x)\n"
+				   "  BO offset:       0x%x\n"
+				   "  Cell index:      %u (BO offset 0x%x..0x%x)\n"
+				   "  Byte in cell:    %u\n"
+				   "  Expected value:  0x%02x (from cell_value 0x%08x)\n"
+				   "  Got value:       0x%02x\n",
+				   scenario,
+				   buf_start + j, buf_start + j,
+				   bo_byte_offset,
+				   cell_idx, cell_idx * 4, cell_idx * 4 + 3,
+				   byte_in_cell,
+				   expected_byte, cell_value,
+				   got_byte);
+
+			kunit_info(test, "Buffer context around mismatch (buf[%u..%u]):\n",
+				   buf_start + context_start,
+				   buf_start + context_end);
+
+			for (k = context_start; k <= context_end; k++) {
+				u32 k_bo_offset = bo_start + k;
+				u32 k_cell = k_bo_offset / sizeof(u32);
+				u32 k_byte = k_bo_offset % sizeof(u32);
+				u32 k_cell_val = k_cell;
+				u8 k_expected = (k_cell_val >> (k_byte * 8)) & 0xFF;
+
+				kunit_info(test,
+					   "  buf[%4u] @ BO 0x%05x: got 0x%02x, expected 0x%02x %s\n",
+					   buf_start + k, k_bo_offset,
+					   buf[buf_start + k], k_expected,
+					   (k == j) ? "<-- MISMATCH" : "");
+			}
+			return false;
+		}
+	}
+	return true;
+}
+
+static void access_memory_test_unaligned_bo_offset(struct kunit *test,
+						    struct xe_migrate *m,
+						    struct xe_bo *bo, u8 *buf,
+						    u32 unaligned_offset)
+{
+	u32 partial_size = ACCESS_MEM_BO_SIZE - unaligned_offset;
+	int ret;
+
+	memset(buf, 0, ACCESS_MEM_BO_SIZE);
+
+	kunit_info(test, "Partial read: bo_offset=0x%x bytes=0x%x\n",
+		   unaligned_offset, partial_size);
+
+	ret = xe_migrate_access_memory(m, bo, unaligned_offset, buf,
+				       partial_size, false);
+	if (ret) {
+		KUNIT_FAIL(test, "Partial read failed: %d\n", ret);
+		return;
+	}
+
+	if (verify_access_memory_read(test, buf, 0, unaligned_offset,
+				      partial_size,
+				      "Partial read from unaligned BO offset"))
+		kunit_info(test, "Partial read from unaligned BO offset 0x%x verified\n",
+			   unaligned_offset);
+}
+
+static void access_memory_test_unaligned_dst(struct kunit *test,
+					     struct xe_migrate *m,
+					     struct xe_bo *bo, u8 *buf,
+					     u32 unaligned_offset)
+{
+	u32 partial_size = ACCESS_MEM_BO_SIZE - unaligned_offset;
+	int ret;
+
+	memset(buf, 0, ACCESS_MEM_BO_SIZE);
+
+	kunit_info(test, "Read to unaligned dst: bo_offset=0x0 dst_offset=0x%x bytes=0x%x\n",
+		   unaligned_offset, partial_size);
+
+	ret = xe_migrate_access_memory(m, bo, 0, buf + unaligned_offset,
+				       partial_size, false);
+	if (ret) {
+		KUNIT_FAIL(test, "Read to unaligned dst failed: %d\n", ret);
+		return;
+	}
+
+	if (verify_access_memory_read(test, buf, unaligned_offset, 0,
+				      partial_size,
+				      "Read to unaligned dst"))
+		kunit_info(test, "Read to unaligned dst offset 0x%x verified\n",
+			   unaligned_offset);
+}
+
+static void access_memory_test_unaligned_dst_aligned_size(struct kunit *test,
+							  struct xe_migrate *m,
+							  struct xe_bo *bo,
+							  u8 *buf,
+							  u32 unaligned_offset)
+{
+	u32 partial_size = round_down(ACCESS_MEM_BO_SIZE - unaligned_offset, 4);
+	int ret;
+
+	memset(buf, 0, ACCESS_MEM_BO_SIZE);
+
+	kunit_info(test, "Read to unaligned dst (aligned size): bo_offset=0x0 dst_offset=0x%x bytes=0x%x\n",
+		   unaligned_offset, partial_size);
+
+	ret = xe_migrate_access_memory(m, bo, 0, buf + unaligned_offset,
+				       partial_size, false);
+	if (ret) {
+		KUNIT_FAIL(test, "Read to unaligned dst (aligned size) failed: %d\n", ret);
+		return;
+	}
+
+	if (verify_access_memory_read(test, buf, unaligned_offset, 0,
+				      partial_size,
+				      "Read to unaligned dst (aligned size)"))
+		kunit_info(test, "Read to unaligned dst (aligned size) offset 0x%x verified\n",
+			   unaligned_offset);
+}
+
+static void access_memory_test_run_tile(struct xe_device *xe,
+					struct xe_tile *tile,
+					struct kunit *test,
+					bool use_random_offset)
+{
+	unsigned int bo_flags = XE_BO_FLAG_VRAM_IF_DGFX(tile);
+	struct xe_migrate *m = tile->migrate;
+	u32 j, unaligned_offset;
+	struct xe_bo *bo;
+	u8 *buf;
+	int ret;
+
+	if (use_random_offset) {
+		unaligned_offset = get_random_u32() % (ACCESS_MEM_BO_SIZE / 2);
+		/* Ensure the offset is not 4-byte aligned */
+		if (IS_ALIGNED(unaligned_offset, 4))
+			unaligned_offset |= 2;
+		if (!unaligned_offset)
+			unaligned_offset = 3;
+	} else {
+		unaligned_offset = ACCESS_MEM_UNALIGNED_OFFSET;
+	}
+
+	kunit_info(test, "Using unaligned offset: 0x%x (%s)\n",
+		   unaligned_offset, use_random_offset ? "random" : "predefined");
+
+	buf = kvmalloc(ACCESS_MEM_BO_SIZE, GFP_KERNEL);
+	if (!buf) {
+		KUNIT_FAIL(test, "Failed to allocate buffer\n");
+		return;
+	}
+
+	bo = xe_bo_create_user(xe, NULL, ACCESS_MEM_BO_SIZE,
+			       DRM_XE_GEM_CPU_CACHING_WC,
+			       bo_flags | XE_BO_FLAG_NEEDS_CPU_ACCESS, NULL);
+	if (IS_ERR(bo)) {
+		KUNIT_FAIL(test, "Failed to create bo: %pe\n", bo);
+		goto free_buf;
+	}
+
+	/* Prime the BO */
+	for (j = 0; j < ACCESS_MEM_NUM_CELLS; j++)
+		((u32 *)buf)[j] = j;
+
+	kunit_info(test, "Writing %lu KiB to VRAM bo\n",
+		   (unsigned long)ACCESS_MEM_BO_SIZE / SZ_1K);
+
+	xe_bo_lock(bo, false);
+	ret = xe_migrate_access_memory(m, bo, 0, buf, ACCESS_MEM_BO_SIZE, true);
+	if (ret) {
+		KUNIT_FAIL(test, "Failed to write bo: %d\n", ret);
+		goto cleanup_bo;
+	}
+
+	/* Full read */
+	memset(buf, 0, ACCESS_MEM_BO_SIZE);
+	kunit_info(test, "Full read: bo_offset=0x0 bytes=0x%x\n", ACCESS_MEM_BO_SIZE);
+
+	ret = xe_migrate_access_memory(m, bo, 0, buf, ACCESS_MEM_BO_SIZE, false);
+	if (ret) {
+		KUNIT_FAIL(test, "Full read failed: %d\n", ret);
+		goto cleanup_bo;
+	}
+
+	for (j = 0; j < ACCESS_MEM_NUM_CELLS; j++) {
+		u32 expected = j;
+		u32 got = ((u32 *)buf)[j];
+
+		if (got != expected) {
+			KUNIT_FAIL(test, "Full read mismatch at cell %u: expected 0x%08x, got 0x%08x\n",
+				   j, expected, got);
+			goto cleanup_bo;
+		}
+	}
+	kunit_info(test, "Full read verified\n");
+
+	access_memory_test_unaligned_bo_offset(test, m, bo, buf, unaligned_offset);
+	access_memory_test_unaligned_dst(test, m, bo, buf, unaligned_offset);
+	access_memory_test_unaligned_dst_aligned_size(test, m, bo, buf, unaligned_offset);
+
+cleanup_bo:
+	xe_bo_unlock(bo);
+	xe_bo_put(bo);
+free_buf:
+	kvfree(buf);
+}
+
+static int access_memory_test_run_device(struct xe_device *xe)
+{
+	struct kunit *test = kunit_get_current_test();
+	struct xe_tile *tile;
+	int id;
+
+	if (!IS_DGFX(xe)) {
+		kunit_skip(test, "non-discrete device\n");
+		return 0;
+	}
+
+	guard(xe_pm_runtime)(xe);
+	for_each_tile(tile, xe, id) {
+		kunit_info(test, "Testing tile id %d (predefined offset)\n", id);
+		access_memory_test_run_tile(xe, tile, test, false);
+
+		kunit_info(test, "Testing tile id %d (random offset)\n", id);
+		access_memory_test_run_tile(xe, tile, test, true);
+	}
+
+	return 0;
+}
+
+static void xe_migrate_access_memory_kunit(struct kunit *test)
+{
+	struct xe_device *xe = test->priv;
+
+	access_memory_test_run_device(xe);
+}
+
 static struct kunit_case xe_migrate_tests[] = {
 	KUNIT_CASE_PARAM(xe_migrate_sanity_kunit, xe_pci_live_device_gen_param),
 	KUNIT_CASE_PARAM(xe_validate_ccs_kunit, xe_pci_live_device_gen_param),
+	KUNIT_CASE_PARAM(xe_migrate_access_memory_kunit, xe_pci_live_device_gen_param),
 	{}
 };
 
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* ✗ CI.checkpatch: warning for drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY (rev2)
  2026-06-22 10:34 [PATCH v2 0/4] drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY Jan Maslak
                   ` (3 preceding siblings ...)
  2026-06-22 10:34 ` [PATCH v2 4/4] drm/xe/tests: Add xe_migrate_access_memory subtest Jan Maslak
@ 2026-06-22 15:58 ` Patchwork
  2026-06-22 15:59 ` ✓ CI.KUnit: success " Patchwork
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-06-22 15:58 UTC (permalink / raw)
  To: Jan Maslak; +Cc: intel-xe

== Series Details ==

Series: drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY (rev2)
URL   : https://patchwork.freedesktop.org/series/167675/
State : warning

== Summary ==

+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
061140b9bc586ae7f40abc1249c97e1cc72d1b9d
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 3640ec306ed6e7bd9ed0d3013f8088f5c7274b9d
Author: Christoph Manszewski <c.manszewski@gmail.com>
Date:   Mon Jun 22 12:34:49 2026 +0200

    drm/xe/tests: Add xe_migrate_access_memory subtest
    
    Add a new xe_migrate subtest for vram to sram migration works:
     - when the dst address is not 4-byte aligned
     - when the dst address in not 4-byte aligned but the migration size is
     - when src BO offset is not 4-byte aligned
    
    Signed-off-by: Christoph Manszewski <christoph.manszewski@intel.com>
    Signed-off-by: Jan Maslak <jan.maslak@intel.com>
+ /mt/dim checkpatch 6583dd200482a34bb17e5dc54551f91f53b79798 drm-intel
d4605c24b4d5 drm/xe/xe_migrate: Align MEM_COPY pitch with destination address
44f09530bec8 drm/xe/xe_migrate: Fix page tracking in access_memory
50a2bebaba1c drm/xe/xe_migrate: Optimize unaligned access_memory copies
-:162: WARNING:LONG_LINE: line length of 102 exceeds 100 columns
#162: FILE: drivers/gpu/drm/xe/xe_migrate.c:2662:
+										 XE_CACHELINE_BYTES));

total: 0 errors, 1 warnings, 0 checks, 160 lines checked
3640ec306ed6 drm/xe/tests: Add xe_migrate_access_memory subtest
-:111: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#111: FILE: drivers/gpu/drm/xe/tests/xe_migrate.c:853:
+static void access_memory_test_unaligned_bo_offset(struct kunit *test,
+						    struct xe_migrate *m,

total: 0 errors, 0 warnings, 1 checks, 296 lines checked



^ permalink raw reply	[flat|nested] 15+ messages in thread

* ✓ CI.KUnit: success for drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY (rev2)
  2026-06-22 10:34 [PATCH v2 0/4] drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY Jan Maslak
                   ` (4 preceding siblings ...)
  2026-06-22 15:58 ` ✗ CI.checkpatch: warning for drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY (rev2) Patchwork
@ 2026-06-22 15:59 ` Patchwork
  2026-06-22 16:55 ` ✗ Xe.CI.BAT: failure " Patchwork
  2026-06-22 19:27 ` ✗ Xe.CI.FULL: " Patchwork
  7 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-06-22 15:59 UTC (permalink / raw)
  To: Jan Maslak; +Cc: intel-xe

== Series Details ==

Series: drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY (rev2)
URL   : https://patchwork.freedesktop.org/series/167675/
State : success

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[15:58:16] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[15:58:20] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[15:58:51] Starting KUnit Kernel (1/1)...
[15:58:51] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[15:58:52] ================== guc_buf (11 subtests) ===================
[15:58:52] [PASSED] test_smallest
[15:58:52] [PASSED] test_largest
[15:58:52] [PASSED] test_granular
[15:58:52] [PASSED] test_unique
[15:58:52] [PASSED] test_overlap
[15:58:52] [PASSED] test_reusable
[15:58:52] [PASSED] test_too_big
[15:58:52] [PASSED] test_flush
[15:58:52] [PASSED] test_lookup
[15:58:52] [PASSED] test_data
[15:58:52] [PASSED] test_class
[15:58:52] ===================== [PASSED] guc_buf =====================
[15:58:52] =================== guc_dbm (7 subtests) ===================
[15:58:52] [PASSED] test_empty
[15:58:52] [PASSED] test_default
[15:58:52] ======================== test_size  ========================
[15:58:52] [PASSED] 4
[15:58:52] [PASSED] 8
[15:58:52] [PASSED] 32
[15:58:52] [PASSED] 256
[15:58:52] ==================== [PASSED] test_size ====================
[15:58:52] ======================= test_reuse  ========================
[15:58:52] [PASSED] 4
[15:58:52] [PASSED] 8
[15:58:52] [PASSED] 32
[15:58:52] [PASSED] 256
[15:58:52] =================== [PASSED] test_reuse ====================
[15:58:52] =================== test_range_overlap  ====================
[15:58:52] [PASSED] 4
[15:58:52] [PASSED] 8
[15:58:52] [PASSED] 32
[15:58:52] [PASSED] 256
[15:58:52] =============== [PASSED] test_range_overlap ================
[15:58:52] =================== test_range_compact  ====================
[15:58:52] [PASSED] 4
[15:58:52] [PASSED] 8
[15:58:52] [PASSED] 32
[15:58:52] [PASSED] 256
[15:58:52] =============== [PASSED] test_range_compact ================
[15:58:52] ==================== test_range_spare  =====================
[15:58:52] [PASSED] 4
[15:58:52] [PASSED] 8
[15:58:52] [PASSED] 32
[15:58:52] [PASSED] 256
[15:58:52] ================ [PASSED] test_range_spare =================
[15:58:52] ===================== [PASSED] guc_dbm =====================
[15:58:52] =================== guc_idm (6 subtests) ===================
[15:58:52] [PASSED] bad_init
[15:58:52] [PASSED] no_init
[15:58:52] [PASSED] init_fini
[15:58:52] [PASSED] check_used
[15:58:52] [PASSED] check_quota
[15:58:52] [PASSED] check_all
[15:58:52] ===================== [PASSED] guc_idm =====================
[15:58:52] ================== no_relay (3 subtests) ===================
[15:58:52] [PASSED] xe_drops_guc2pf_if_not_ready
[15:58:52] [PASSED] xe_drops_guc2vf_if_not_ready
[15:58:52] [PASSED] xe_rejects_send_if_not_ready
[15:58:52] ==================== [PASSED] no_relay =====================
[15:58:52] ================== pf_relay (14 subtests) ==================
[15:58:52] [PASSED] pf_rejects_guc2pf_too_short
[15:58:52] [PASSED] pf_rejects_guc2pf_too_long
[15:58:52] [PASSED] pf_rejects_guc2pf_no_payload
[15:58:52] [PASSED] pf_fails_no_payload
[15:58:52] [PASSED] pf_fails_bad_origin
[15:58:52] [PASSED] pf_fails_bad_type
[15:58:52] [PASSED] pf_txn_reports_error
[15:58:52] [PASSED] pf_txn_sends_pf2guc
[15:58:52] [PASSED] pf_sends_pf2guc
[15:58:52] [SKIPPED] pf_loopback_nop
[15:58:52] [SKIPPED] pf_loopback_echo
[15:58:52] [SKIPPED] pf_loopback_fail
[15:58:52] [SKIPPED] pf_loopback_busy
[15:58:52] [SKIPPED] pf_loopback_retry
[15:58:52] ==================== [PASSED] pf_relay =====================
[15:58:52] ================== vf_relay (3 subtests) ===================
[15:58:52] [PASSED] vf_rejects_guc2vf_too_short
[15:58:52] [PASSED] vf_rejects_guc2vf_too_long
[15:58:52] [PASSED] vf_rejects_guc2vf_no_payload
[15:58:52] ==================== [PASSED] vf_relay =====================
[15:58:52] ================ pf_gt_config (9 subtests) =================
[15:58:52] [PASSED] fair_contexts_1vf
[15:58:52] [PASSED] fair_doorbells_1vf
[15:58:52] [PASSED] fair_ggtt_1vf
[15:58:52] ====================== fair_vram_1vf  ======================
[15:58:52] [PASSED] 3.50 GiB
[15:58:52] [PASSED] 11.5 GiB
[15:58:52] [PASSED] 15.5 GiB
[15:58:52] [PASSED] 31.5 GiB
[15:58:52] [PASSED] 63.5 GiB
[15:58:52] [PASSED] 1.91 GiB
[15:58:52] ================== [PASSED] fair_vram_1vf ==================
[15:58:52] ================ fair_vram_1vf_admin_only  =================
[15:58:52] [PASSED] 3.50 GiB
[15:58:52] [PASSED] 11.5 GiB
[15:58:52] [PASSED] 15.5 GiB
[15:58:52] [PASSED] 31.5 GiB
[15:58:52] [PASSED] 63.5 GiB
[15:58:52] [PASSED] 1.91 GiB
[15:58:52] ============ [PASSED] fair_vram_1vf_admin_only =============
[15:58:52] ====================== fair_contexts  ======================
[15:58:52] [PASSED] 1 VF
[15:58:52] [PASSED] 2 VFs
[15:58:52] [PASSED] 3 VFs
[15:58:52] [PASSED] 4 VFs
[15:58:52] [PASSED] 5 VFs
[15:58:52] [PASSED] 6 VFs
[15:58:52] [PASSED] 7 VFs
[15:58:52] [PASSED] 8 VFs
[15:58:52] [PASSED] 9 VFs
[15:58:52] [PASSED] 10 VFs
[15:58:52] [PASSED] 11 VFs
[15:58:52] [PASSED] 12 VFs
[15:58:52] [PASSED] 13 VFs
[15:58:52] [PASSED] 14 VFs
[15:58:52] [PASSED] 15 VFs
[15:58:52] [PASSED] 16 VFs
[15:58:52] [PASSED] 17 VFs
[15:58:52] [PASSED] 18 VFs
[15:58:52] [PASSED] 19 VFs
[15:58:52] [PASSED] 20 VFs
[15:58:52] [PASSED] 21 VFs
[15:58:52] [PASSED] 22 VFs
[15:58:52] [PASSED] 23 VFs
[15:58:52] [PASSED] 24 VFs
[15:58:52] [PASSED] 25 VFs
[15:58:52] [PASSED] 26 VFs
[15:58:52] [PASSED] 27 VFs
[15:58:52] [PASSED] 28 VFs
[15:58:52] [PASSED] 29 VFs
[15:58:52] [PASSED] 30 VFs
[15:58:52] [PASSED] 31 VFs
[15:58:52] [PASSED] 32 VFs
[15:58:52] [PASSED] 33 VFs
[15:58:52] [PASSED] 34 VFs
[15:58:52] [PASSED] 35 VFs
[15:58:52] [PASSED] 36 VFs
[15:58:52] [PASSED] 37 VFs
[15:58:52] [PASSED] 38 VFs
[15:58:52] [PASSED] 39 VFs
[15:58:52] [PASSED] 40 VFs
[15:58:52] [PASSED] 41 VFs
[15:58:52] [PASSED] 42 VFs
[15:58:52] [PASSED] 43 VFs
[15:58:52] [PASSED] 44 VFs
[15:58:52] [PASSED] 45 VFs
[15:58:52] [PASSED] 46 VFs
[15:58:52] [PASSED] 47 VFs
[15:58:52] [PASSED] 48 VFs
[15:58:52] [PASSED] 49 VFs
[15:58:52] [PASSED] 50 VFs
[15:58:52] [PASSED] 51 VFs
[15:58:52] [PASSED] 52 VFs
[15:58:52] [PASSED] 53 VFs
[15:58:52] [PASSED] 54 VFs
[15:58:52] [PASSED] 55 VFs
[15:58:52] [PASSED] 56 VFs
[15:58:52] [PASSED] 57 VFs
[15:58:52] [PASSED] 58 VFs
[15:58:52] [PASSED] 59 VFs
[15:58:52] [PASSED] 60 VFs
[15:58:52] [PASSED] 61 VFs
[15:58:52] [PASSED] 62 VFs
[15:58:52] [PASSED] 63 VFs
[15:58:52] ================== [PASSED] fair_contexts ==================
[15:58:52] ===================== fair_doorbells  ======================
[15:58:52] [PASSED] 1 VF
[15:58:52] [PASSED] 2 VFs
[15:58:52] [PASSED] 3 VFs
[15:58:52] [PASSED] 4 VFs
[15:58:52] [PASSED] 5 VFs
[15:58:52] [PASSED] 6 VFs
[15:58:52] [PASSED] 7 VFs
[15:58:52] [PASSED] 8 VFs
[15:58:52] [PASSED] 9 VFs
[15:58:52] [PASSED] 10 VFs
[15:58:52] [PASSED] 11 VFs
[15:58:52] [PASSED] 12 VFs
[15:58:52] [PASSED] 13 VFs
[15:58:52] [PASSED] 14 VFs
[15:58:52] [PASSED] 15 VFs
[15:58:52] [PASSED] 16 VFs
[15:58:52] [PASSED] 17 VFs
[15:58:52] [PASSED] 18 VFs
[15:58:52] [PASSED] 19 VFs
[15:58:52] [PASSED] 20 VFs
[15:58:52] [PASSED] 21 VFs
[15:58:52] [PASSED] 22 VFs
[15:58:52] [PASSED] 23 VFs
[15:58:52] [PASSED] 24 VFs
[15:58:52] [PASSED] 25 VFs
[15:58:52] [PASSED] 26 VFs
[15:58:52] [PASSED] 27 VFs
[15:58:52] [PASSED] 28 VFs
[15:58:52] [PASSED] 29 VFs
[15:58:52] [PASSED] 30 VFs
[15:58:52] [PASSED] 31 VFs
[15:58:52] [PASSED] 32 VFs
[15:58:52] [PASSED] 33 VFs
[15:58:52] [PASSED] 34 VFs
[15:58:52] [PASSED] 35 VFs
[15:58:52] [PASSED] 36 VFs
[15:58:52] [PASSED] 37 VFs
[15:58:52] [PASSED] 38 VFs
[15:58:52] [PASSED] 39 VFs
[15:58:52] [PASSED] 40 VFs
[15:58:52] [PASSED] 41 VFs
[15:58:52] [PASSED] 42 VFs
[15:58:52] [PASSED] 43 VFs
[15:58:52] [PASSED] 44 VFs
[15:58:52] [PASSED] 45 VFs
[15:58:52] [PASSED] 46 VFs
[15:58:52] [PASSED] 47 VFs
[15:58:52] [PASSED] 48 VFs
[15:58:52] [PASSED] 49 VFs
[15:58:52] [PASSED] 50 VFs
[15:58:52] [PASSED] 51 VFs
[15:58:52] [PASSED] 52 VFs
[15:58:52] [PASSED] 53 VFs
[15:58:52] [PASSED] 54 VFs
[15:58:52] [PASSED] 55 VFs
[15:58:52] [PASSED] 56 VFs
[15:58:52] [PASSED] 57 VFs
[15:58:52] [PASSED] 58 VFs
[15:58:52] [PASSED] 59 VFs
[15:58:52] [PASSED] 60 VFs
[15:58:52] [PASSED] 61 VFs
[15:58:52] [PASSED] 62 VFs
[15:58:52] [PASSED] 63 VFs
[15:58:52] ================= [PASSED] fair_doorbells ==================
[15:58:52] ======================== fair_ggtt  ========================
[15:58:52] [PASSED] 1 VF
[15:58:52] [PASSED] 2 VFs
[15:58:52] [PASSED] 3 VFs
[15:58:52] [PASSED] 4 VFs
[15:58:52] [PASSED] 5 VFs
[15:58:52] [PASSED] 6 VFs
[15:58:52] [PASSED] 7 VFs
[15:58:52] [PASSED] 8 VFs
[15:58:52] [PASSED] 9 VFs
[15:58:52] [PASSED] 10 VFs
[15:58:52] [PASSED] 11 VFs
[15:58:52] [PASSED] 12 VFs
[15:58:52] [PASSED] 13 VFs
[15:58:52] [PASSED] 14 VFs
[15:58:52] [PASSED] 15 VFs
[15:58:52] [PASSED] 16 VFs
[15:58:52] [PASSED] 17 VFs
[15:58:52] [PASSED] 18 VFs
[15:58:52] [PASSED] 19 VFs
[15:58:52] [PASSED] 20 VFs
[15:58:52] [PASSED] 21 VFs
[15:58:52] [PASSED] 22 VFs
[15:58:52] [PASSED] 23 VFs
[15:58:52] [PASSED] 24 VFs
[15:58:52] [PASSED] 25 VFs
[15:58:52] [PASSED] 26 VFs
[15:58:52] [PASSED] 27 VFs
[15:58:52] [PASSED] 28 VFs
[15:58:52] [PASSED] 29 VFs
[15:58:52] [PASSED] 30 VFs
[15:58:52] [PASSED] 31 VFs
[15:58:52] [PASSED] 32 VFs
[15:58:52] [PASSED] 33 VFs
[15:58:52] [PASSED] 34 VFs
[15:58:52] [PASSED] 35 VFs
[15:58:52] [PASSED] 36 VFs
[15:58:52] [PASSED] 37 VFs
[15:58:52] [PASSED] 38 VFs
[15:58:52] [PASSED] 39 VFs
[15:58:52] [PASSED] 40 VFs
[15:58:52] [PASSED] 41 VFs
[15:58:52] [PASSED] 42 VFs
[15:58:52] [PASSED] 43 VFs
[15:58:52] [PASSED] 44 VFs
[15:58:52] [PASSED] 45 VFs
[15:58:52] [PASSED] 46 VFs
[15:58:52] [PASSED] 47 VFs
[15:58:52] [PASSED] 48 VFs
[15:58:52] [PASSED] 49 VFs
[15:58:52] [PASSED] 50 VFs
[15:58:52] [PASSED] 51 VFs
[15:58:52] [PASSED] 52 VFs
[15:58:52] [PASSED] 53 VFs
[15:58:52] [PASSED] 54 VFs
[15:58:52] [PASSED] 55 VFs
[15:58:52] [PASSED] 56 VFs
[15:58:52] [PASSED] 57 VFs
[15:58:52] [PASSED] 58 VFs
[15:58:52] [PASSED] 59 VFs
[15:58:52] [PASSED] 60 VFs
[15:58:52] [PASSED] 61 VFs
[15:58:52] [PASSED] 62 VFs
[15:58:52] [PASSED] 63 VFs
[15:58:52] ==================== [PASSED] fair_ggtt ====================
[15:58:52] ======================== fair_vram  ========================
[15:58:52] [PASSED] 1 VF
[15:58:52] [PASSED] 2 VFs
[15:58:52] [PASSED] 3 VFs
[15:58:52] [PASSED] 4 VFs
[15:58:52] [PASSED] 5 VFs
[15:58:52] [PASSED] 6 VFs
[15:58:52] [PASSED] 7 VFs
[15:58:52] [PASSED] 8 VFs
[15:58:52] [PASSED] 9 VFs
[15:58:52] [PASSED] 10 VFs
[15:58:52] [PASSED] 11 VFs
[15:58:52] [PASSED] 12 VFs
[15:58:52] [PASSED] 13 VFs
[15:58:52] [PASSED] 14 VFs
[15:58:52] [PASSED] 15 VFs
[15:58:52] [PASSED] 16 VFs
[15:58:52] [PASSED] 17 VFs
[15:58:52] [PASSED] 18 VFs
[15:58:52] [PASSED] 19 VFs
[15:58:52] [PASSED] 20 VFs
[15:58:52] [PASSED] 21 VFs
[15:58:52] [PASSED] 22 VFs
[15:58:52] [PASSED] 23 VFs
[15:58:52] [PASSED] 24 VFs
[15:58:52] [PASSED] 25 VFs
[15:58:52] [PASSED] 26 VFs
[15:58:52] [PASSED] 27 VFs
[15:58:52] [PASSED] 28 VFs
[15:58:52] [PASSED] 29 VFs
[15:58:52] [PASSED] 30 VFs
[15:58:52] [PASSED] 31 VFs
[15:58:52] [PASSED] 32 VFs
[15:58:52] [PASSED] 33 VFs
[15:58:52] [PASSED] 34 VFs
[15:58:52] [PASSED] 35 VFs
[15:58:52] [PASSED] 36 VFs
[15:58:52] [PASSED] 37 VFs
[15:58:52] [PASSED] 38 VFs
[15:58:52] [PASSED] 39 VFs
[15:58:52] [PASSED] 40 VFs
[15:58:52] [PASSED] 41 VFs
[15:58:52] [PASSED] 42 VFs
[15:58:52] [PASSED] 43 VFs
[15:58:52] [PASSED] 44 VFs
[15:58:52] [PASSED] 45 VFs
[15:58:52] [PASSED] 46 VFs
[15:58:52] [PASSED] 47 VFs
[15:58:52] [PASSED] 48 VFs
[15:58:52] [PASSED] 49 VFs
[15:58:52] [PASSED] 50 VFs
[15:58:52] [PASSED] 51 VFs
[15:58:52] [PASSED] 52 VFs
[15:58:52] [PASSED] 53 VFs
[15:58:52] [PASSED] 54 VFs
[15:58:52] [PASSED] 55 VFs
[15:58:52] [PASSED] 56 VFs
[15:58:52] [PASSED] 57 VFs
[15:58:52] [PASSED] 58 VFs
[15:58:52] [PASSED] 59 VFs
[15:58:52] [PASSED] 60 VFs
[15:58:52] [PASSED] 61 VFs
[15:58:52] [PASSED] 62 VFs
[15:58:52] [PASSED] 63 VFs
[15:58:52] ==================== [PASSED] fair_vram ====================
[15:58:52] ================== [PASSED] pf_gt_config ===================
[15:58:52] ===================== lmtt (1 subtest) =====================
[15:58:52] ======================== test_ops  =========================
[15:58:52] [PASSED] 2-level
[15:58:52] [PASSED] multi-level
[15:58:52] ==================== [PASSED] test_ops =====================
[15:58:52] ====================== [PASSED] lmtt =======================
[15:58:52] ================= pf_service (11 subtests) =================
[15:58:52] [PASSED] pf_negotiate_any
[15:58:52] [PASSED] pf_negotiate_base_match
[15:58:52] [PASSED] pf_negotiate_base_newer
[15:58:52] [PASSED] pf_negotiate_base_next
[15:58:52] [SKIPPED] pf_negotiate_base_older
[15:58:52] [PASSED] pf_negotiate_base_prev
[15:58:52] [PASSED] pf_negotiate_latest_match
[15:58:52] [PASSED] pf_negotiate_latest_newer
[15:58:52] [PASSED] pf_negotiate_latest_next
[15:58:52] [SKIPPED] pf_negotiate_latest_older
[15:58:52] [SKIPPED] pf_negotiate_latest_prev
[15:58:52] =================== [PASSED] pf_service ====================
[15:58:52] ================= xe_guc_g2g (2 subtests) ==================
[15:58:52] ============== xe_live_guc_g2g_kunit_default  ==============
[15:58:52] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[15:58:52] ============== xe_live_guc_g2g_kunit_allmem  ===============
[15:58:52] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[15:58:52] =================== [SKIPPED] xe_guc_g2g ===================
[15:58:52] =================== xe_mocs (2 subtests) ===================
[15:58:52] ================ xe_live_mocs_kernel_kunit  ================
[15:58:52] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[15:58:52] ================ xe_live_mocs_reset_kunit  =================
[15:58:52] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[15:58:52] ==================== [SKIPPED] xe_mocs =====================
[15:58:52] ================= xe_migrate (3 subtests) ==================
[15:58:52] ================= xe_migrate_sanity_kunit  =================
[15:58:52] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[15:58:52] ================== xe_validate_ccs_kunit  ==================
[15:58:52] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[15:58:52] ============= xe_migrate_access_memory_kunit  ==============
[15:58:52] ========= [SKIPPED] xe_migrate_access_memory_kunit =========
[15:58:52] =================== [SKIPPED] xe_migrate ===================
[15:58:52] ================== xe_dma_buf (1 subtest) ==================
[15:58:52] ==================== xe_dma_buf_kunit  =====================
[15:58:52] ================ [SKIPPED] xe_dma_buf_kunit ================
[15:58:52] =================== [SKIPPED] xe_dma_buf ===================
[15:58:52] ================= xe_bo_shrink (1 subtest) =================
[15:58:52] =================== xe_bo_shrink_kunit  ====================
[15:58:52] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[15:58:52] ================== [SKIPPED] xe_bo_shrink ==================
[15:58:52] ==================== xe_bo (2 subtests) ====================
[15:58:52] ================== xe_ccs_migrate_kunit  ===================
[15:58:52] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[15:58:52] ==================== xe_bo_evict_kunit  ====================
[15:58:52] =============== [SKIPPED] xe_bo_evict_kunit ================
[15:58:52] ===================== [SKIPPED] xe_bo ======================
[15:58:52] ==================== args (13 subtests) ====================
[15:58:52] [PASSED] count_args_test
[15:58:52] [PASSED] call_args_example
[15:58:52] [PASSED] call_args_test
[15:58:52] [PASSED] drop_first_arg_example
[15:58:52] [PASSED] drop_first_arg_test
[15:58:52] [PASSED] first_arg_example
[15:58:52] [PASSED] first_arg_test
[15:58:52] [PASSED] last_arg_example
[15:58:52] [PASSED] last_arg_test
[15:58:52] [PASSED] pick_arg_example
[15:58:52] [PASSED] if_args_example
[15:58:52] [PASSED] if_args_test
[15:58:52] [PASSED] sep_comma_example
[15:58:52] ====================== [PASSED] args =======================
[15:58:52] =================== xe_pci (3 subtests) ====================
[15:58:52] ==================== check_graphics_ip  ====================
[15:58:52] [PASSED] 12.00 Xe_LP
[15:58:52] [PASSED] 12.10 Xe_LP+
[15:58:52] [PASSED] 12.55 Xe_HPG
[15:58:52] [PASSED] 12.60 Xe_HPC
[15:58:52] [PASSED] 12.70 Xe_LPG
[15:58:52] [PASSED] 12.71 Xe_LPG
[15:58:52] [PASSED] 12.74 Xe_LPG+
[15:58:52] [PASSED] 20.01 Xe2_HPG
[15:58:52] [PASSED] 20.02 Xe2_HPG
[15:58:52] [PASSED] 20.04 Xe2_LPG
[15:58:52] [PASSED] 30.00 Xe3_LPG
[15:58:52] [PASSED] 30.01 Xe3_LPG
[15:58:52] [PASSED] 30.03 Xe3_LPG
[15:58:52] [PASSED] 30.04 Xe3_LPG
[15:58:52] [PASSED] 30.05 Xe3_LPG
[15:58:52] [PASSED] 35.10 Xe3p_LPG
[15:58:52] [PASSED] 35.11 Xe3p_XPC
[15:58:52] ================ [PASSED] check_graphics_ip ================
[15:58:52] ===================== check_media_ip  ======================
[15:58:52] [PASSED] 12.00 Xe_M
[15:58:52] [PASSED] 12.55 Xe_HPM
[15:58:52] [PASSED] 13.00 Xe_LPM+
[15:58:52] [PASSED] 13.01 Xe2_HPM
[15:58:52] [PASSED] 20.00 Xe2_LPM
[15:58:52] [PASSED] 30.00 Xe3_LPM
[15:58:52] [PASSED] 30.02 Xe3_LPM
[15:58:52] [PASSED] 35.00 Xe3p_LPM
[15:58:52] [PASSED] 35.03 Xe3p_HPM
[15:58:52] ================= [PASSED] check_media_ip ==================
[15:58:52] =================== check_platform_desc  ===================
[15:58:52] [PASSED] 0x9A60 (TIGERLAKE)
[15:58:52] [PASSED] 0x9A68 (TIGERLAKE)
[15:58:52] [PASSED] 0x9A70 (TIGERLAKE)
[15:58:52] [PASSED] 0x9A40 (TIGERLAKE)
[15:58:52] [PASSED] 0x9A49 (TIGERLAKE)
[15:58:52] [PASSED] 0x9A59 (TIGERLAKE)
[15:58:52] [PASSED] 0x9A78 (TIGERLAKE)
[15:58:52] [PASSED] 0x9AC0 (TIGERLAKE)
[15:58:52] [PASSED] 0x9AC9 (TIGERLAKE)
[15:58:52] [PASSED] 0x9AD9 (TIGERLAKE)
[15:58:52] [PASSED] 0x9AF8 (TIGERLAKE)
[15:58:52] [PASSED] 0x4C80 (ROCKETLAKE)
[15:58:52] [PASSED] 0x4C8A (ROCKETLAKE)
[15:58:52] [PASSED] 0x4C8B (ROCKETLAKE)
[15:58:52] [PASSED] 0x4C8C (ROCKETLAKE)
[15:58:52] [PASSED] 0x4C90 (ROCKETLAKE)
[15:58:52] [PASSED] 0x4C9A (ROCKETLAKE)
[15:58:52] [PASSED] 0x4680 (ALDERLAKE_S)
[15:58:52] [PASSED] 0x4682 (ALDERLAKE_S)
[15:58:52] [PASSED] 0x4688 (ALDERLAKE_S)
[15:58:52] [PASSED] 0x468A (ALDERLAKE_S)
[15:58:52] [PASSED] 0x468B (ALDERLAKE_S)
[15:58:52] [PASSED] 0x4690 (ALDERLAKE_S)
[15:58:52] [PASSED] 0x4692 (ALDERLAKE_S)
[15:58:52] [PASSED] 0x4693 (ALDERLAKE_S)
[15:58:52] [PASSED] 0x46A0 (ALDERLAKE_P)
[15:58:52] [PASSED] 0x46A1 (ALDERLAKE_P)
[15:58:52] [PASSED] 0x46A2 (ALDERLAKE_P)
[15:58:52] [PASSED] 0x46A3 (ALDERLAKE_P)
[15:58:52] [PASSED] 0x46A6 (ALDERLAKE_P)
[15:58:52] [PASSED] 0x46A8 (ALDERLAKE_P)
[15:58:52] [PASSED] 0x46AA (ALDERLAKE_P)
[15:58:52] [PASSED] 0x462A (ALDERLAKE_P)
[15:58:52] [PASSED] 0x4626 (ALDERLAKE_P)
[15:58:52] [PASSED] 0x4628 (ALDERLAKE_P)
[15:58:52] [PASSED] 0x46B0 (ALDERLAKE_P)
[15:58:52] [PASSED] 0x46B1 (ALDERLAKE_P)
[15:58:52] [PASSED] 0x46B2 (ALDERLAKE_P)
[15:58:52] [PASSED] 0x46B3 (ALDERLAKE_P)
[15:58:52] [PASSED] 0x46C0 (ALDERLAKE_P)
[15:58:52] [PASSED] 0x46C1 (ALDERLAKE_P)
[15:58:52] [PASSED] 0x46C2 (ALDERLAKE_P)
[15:58:52] [PASSED] 0x46C3 (ALDERLAKE_P)
[15:58:52] [PASSED] 0x46D0 (ALDERLAKE_N)
[15:58:52] [PASSED] 0x46D1 (ALDERLAKE_N)
[15:58:52] [PASSED] 0x46D2 (ALDERLAKE_N)
[15:58:52] [PASSED] 0x46D3 (ALDERLAKE_N)
[15:58:52] [PASSED] 0x46D4 (ALDERLAKE_N)
[15:58:52] [PASSED] 0xA721 (ALDERLAKE_P)
[15:58:52] [PASSED] 0xA7A1 (ALDERLAKE_P)
[15:58:52] [PASSED] 0xA7A9 (ALDERLAKE_P)
[15:58:52] [PASSED] 0xA7AC (ALDERLAKE_P)
[15:58:52] [PASSED] 0xA7AD (ALDERLAKE_P)
[15:58:52] [PASSED] 0xA720 (ALDERLAKE_P)
[15:58:52] [PASSED] 0xA7A0 (ALDERLAKE_P)
[15:58:52] [PASSED] 0xA7A8 (ALDERLAKE_P)
[15:58:52] [PASSED] 0xA7AA (ALDERLAKE_P)
[15:58:52] [PASSED] 0xA7AB (ALDERLAKE_P)
[15:58:52] [PASSED] 0xA780 (ALDERLAKE_S)
[15:58:52] [PASSED] 0xA781 (ALDERLAKE_S)
[15:58:52] [PASSED] 0xA782 (ALDERLAKE_S)
[15:58:52] [PASSED] 0xA783 (ALDERLAKE_S)
[15:58:52] [PASSED] 0xA788 (ALDERLAKE_S)
[15:58:52] [PASSED] 0xA789 (ALDERLAKE_S)
[15:58:52] [PASSED] 0xA78A (ALDERLAKE_S)
[15:58:52] [PASSED] 0xA78B (ALDERLAKE_S)
[15:58:52] [PASSED] 0x4905 (DG1)
[15:58:52] [PASSED] 0x4906 (DG1)
[15:58:52] [PASSED] 0x4907 (DG1)
[15:58:52] [PASSED] 0x4908 (DG1)
[15:58:52] [PASSED] 0x4909 (DG1)
[15:58:52] [PASSED] 0x56C0 (DG2)
[15:58:52] [PASSED] 0x56C2 (DG2)
[15:58:52] [PASSED] 0x56C1 (DG2)
[15:58:52] [PASSED] 0x7D51 (METEORLAKE)
[15:58:52] [PASSED] 0x7DD1 (METEORLAKE)
[15:58:52] [PASSED] 0x7D41 (METEORLAKE)
[15:58:52] [PASSED] 0x7D67 (METEORLAKE)
[15:58:52] [PASSED] 0xB640 (METEORLAKE)
[15:58:52] [PASSED] 0x56A0 (DG2)
[15:58:52] [PASSED] 0x56A1 (DG2)
[15:58:52] [PASSED] 0x56A2 (DG2)
[15:58:52] [PASSED] 0x56BE (DG2)
[15:58:52] [PASSED] 0x56BF (DG2)
[15:58:52] [PASSED] 0x5690 (DG2)
[15:58:52] [PASSED] 0x5691 (DG2)
[15:58:52] [PASSED] 0x5692 (DG2)
[15:58:52] [PASSED] 0x56A5 (DG2)
[15:58:52] [PASSED] 0x56A6 (DG2)
[15:58:52] [PASSED] 0x56B0 (DG2)
[15:58:52] [PASSED] 0x56B1 (DG2)
[15:58:52] [PASSED] 0x56BA (DG2)
[15:58:52] [PASSED] 0x56BB (DG2)
[15:58:52] [PASSED] 0x56BC (DG2)
[15:58:52] [PASSED] 0x56BD (DG2)
[15:58:52] [PASSED] 0x5693 (DG2)
[15:58:52] [PASSED] 0x5694 (DG2)
[15:58:52] [PASSED] 0x5695 (DG2)
[15:58:52] [PASSED] 0x56A3 (DG2)
[15:58:52] [PASSED] 0x56A4 (DG2)
[15:58:52] [PASSED] 0x56B2 (DG2)
[15:58:52] [PASSED] 0x56B3 (DG2)
[15:58:52] [PASSED] 0x5696 (DG2)
[15:58:52] [PASSED] 0x5697 (DG2)
[15:58:52] [PASSED] 0xB69 (PVC)
[15:58:52] [PASSED] 0xB6E (PVC)
[15:58:52] [PASSED] 0xBD4 (PVC)
[15:58:52] [PASSED] 0xBD5 (PVC)
[15:58:52] [PASSED] 0xBD6 (PVC)
[15:58:52] [PASSED] 0xBD7 (PVC)
[15:58:52] [PASSED] 0xBD8 (PVC)
[15:58:52] [PASSED] 0xBD9 (PVC)
[15:58:52] [PASSED] 0xBDA (PVC)
[15:58:52] [PASSED] 0xBDB (PVC)
[15:58:52] [PASSED] 0xBE0 (PVC)
[15:58:52] [PASSED] 0xBE1 (PVC)
[15:58:52] [PASSED] 0xBE5 (PVC)
[15:58:52] [PASSED] 0x7D40 (METEORLAKE)
[15:58:52] [PASSED] 0x7D45 (METEORLAKE)
[15:58:52] [PASSED] 0x7D55 (METEORLAKE)
[15:58:52] [PASSED] 0x7D60 (METEORLAKE)
[15:58:52] [PASSED] 0x7DD5 (METEORLAKE)
[15:58:52] [PASSED] 0x6420 (LUNARLAKE)
[15:58:52] [PASSED] 0x64A0 (LUNARLAKE)
[15:58:52] [PASSED] 0x64B0 (LUNARLAKE)
[15:58:52] [PASSED] 0xE202 (BATTLEMAGE)
[15:58:52] [PASSED] 0xE209 (BATTLEMAGE)
[15:58:52] [PASSED] 0xE20B (BATTLEMAGE)
[15:58:52] [PASSED] 0xE20C (BATTLEMAGE)
[15:58:52] [PASSED] 0xE20D (BATTLEMAGE)
[15:58:52] [PASSED] 0xE210 (BATTLEMAGE)
[15:58:52] [PASSED] 0xE211 (BATTLEMAGE)
[15:58:52] [PASSED] 0xE212 (BATTLEMAGE)
[15:58:52] [PASSED] 0xE216 (BATTLEMAGE)
[15:58:52] [PASSED] 0xE220 (BATTLEMAGE)
[15:58:52] [PASSED] 0xE221 (BATTLEMAGE)
[15:58:52] [PASSED] 0xE222 (BATTLEMAGE)
[15:58:52] [PASSED] 0xE223 (BATTLEMAGE)
[15:58:52] [PASSED] 0xB080 (PANTHERLAKE)
[15:58:52] [PASSED] 0xB081 (PANTHERLAKE)
[15:58:52] [PASSED] 0xB082 (PANTHERLAKE)
[15:58:52] [PASSED] 0xB083 (PANTHERLAKE)
[15:58:52] [PASSED] 0xB084 (PANTHERLAKE)
[15:58:52] [PASSED] 0xB085 (PANTHERLAKE)
[15:58:52] [PASSED] 0xB086 (PANTHERLAKE)
[15:58:52] [PASSED] 0xB087 (PANTHERLAKE)
[15:58:52] [PASSED] 0xB08F (PANTHERLAKE)
[15:58:52] [PASSED] 0xB090 (PANTHERLAKE)
[15:58:52] [PASSED] 0xB0A0 (PANTHERLAKE)
[15:58:52] [PASSED] 0xB0B0 (PANTHERLAKE)
[15:58:52] [PASSED] 0xFD80 (PANTHERLAKE)
[15:58:52] [PASSED] 0xFD81 (PANTHERLAKE)
[15:58:52] [PASSED] 0xD740 (NOVALAKE_S)
[15:58:52] [PASSED] 0xD741 (NOVALAKE_S)
[15:58:52] [PASSED] 0xD742 (NOVALAKE_S)
[15:58:52] [PASSED] 0xD743 (NOVALAKE_S)
[15:58:52] [PASSED] 0xD745 (NOVALAKE_S)
[15:58:52] [PASSED] 0xD74A (NOVALAKE_S)
[15:58:52] [PASSED] 0xD74B (NOVALAKE_S)
[15:58:52] [PASSED] 0x674C (CRESCENTISLAND)
[15:58:52] [PASSED] 0x674D (CRESCENTISLAND)
[15:58:52] [PASSED] 0x674E (CRESCENTISLAND)
[15:58:52] [PASSED] 0x674F (CRESCENTISLAND)
[15:58:52] [PASSED] 0x6750 (CRESCENTISLAND)
[15:58:52] [PASSED] 0xD750 (NOVALAKE_P)
[15:58:52] [PASSED] 0xD751 (NOVALAKE_P)
[15:58:52] [PASSED] 0xD752 (NOVALAKE_P)
[15:58:52] [PASSED] 0xD753 (NOVALAKE_P)
[15:58:52] [PASSED] 0xD754 (NOVALAKE_P)
[15:58:52] [PASSED] 0xD755 (NOVALAKE_P)
[15:58:52] [PASSED] 0xD756 (NOVALAKE_P)
[15:58:52] [PASSED] 0xD757 (NOVALAKE_P)
[15:58:52] [PASSED] 0xD75F (NOVALAKE_P)
[15:58:52] =============== [PASSED] check_platform_desc ===============
[15:58:52] ===================== [PASSED] xe_pci ======================
[15:58:52] ============= xe_rtp_tables_test (4 subtests) ==============
[15:58:52] ================== xe_rtp_table_gt_test  ===================
[15:58:52] [PASSED] gt_was/14011060649
[15:58:52] [PASSED] gt_was/14011059788
[15:58:52] [PASSED] gt_was/14015795083
[15:58:52] [PASSED] gt_was/16021867713
[15:58:52] [PASSED] gt_was/14019449301
[15:58:52] [PASSED] gt_was/16028005424
[15:58:52] [PASSED] gt_was/14026578760
[15:58:52] [PASSED] gt_was/1409420604
[15:58:52] [PASSED] gt_was/1408615072
[15:58:52] [PASSED] gt_was/22010523718
[15:58:52] [PASSED] gt_was/14011006942
[15:58:52] [PASSED] gt_was/14014830051
[15:58:52] [PASSED] gt_was/18018781329
[15:58:52] [PASSED] gt_was/1509235366
[15:58:52] [PASSED] gt_was/18018781329
[15:58:52] [PASSED] gt_was/16016694945
[15:58:52] [PASSED] gt_was/14018575942
[15:58:52] [PASSED] gt_was/22016670082
[15:58:52] [PASSED] gt_was/22016670082
[15:58:52] [PASSED] gt_was/14017421178
[15:58:52] [PASSED] gt_was/16025250150
[15:58:52] [PASSED] gt_was/14021871409
[15:58:52] [PASSED] gt_was/16021865536
[15:58:52] [PASSED] gt_was/14021486841
[15:58:52] [PASSED] gt_was/14025160223
[15:58:52] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[15:58:52] [PASSED] gt_was/14025635424
[15:58:52] [PASSED] gt_was/16028005424
[15:58:52] ============== [PASSED] xe_rtp_table_gt_test ===============
[15:58:52] ================== xe_rtp_table_gt_test  ===================
[15:58:52] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[15:58:52] [PASSED] gt_tunings/Tuning: 32B Access Enable
[15:58:52] [PASSED] gt_tunings/Tuning: L3 cache
[15:58:52] [PASSED] gt_tunings/Tuning: L3 cache - media
[15:58:52] [PASSED] gt_tunings/Tuning: Compression Overfetch
[15:58:52] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[15:58:52] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[15:58:52] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[15:58:52] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[15:58:52] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[15:58:52] [PASSED] gt_tunings/Tuning: Stateless compression control
[15:58:52] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[15:58:52] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[15:58:52] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[15:58:52] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[15:58:52] ============== [PASSED] xe_rtp_table_gt_test ===============
[15:58:52] ================== xe_rtp_table_oob_test  ==================
[15:58:52] [PASSED] oob_was/1607983814
[15:58:52] [PASSED] oob_was/16010904313
[15:58:52] [PASSED] oob_was/18022495364
[15:58:52] [PASSED] oob_was/22012773006
[15:58:52] [PASSED] oob_was/14014475959
[15:58:52] [PASSED] oob_was/22011391025
[15:58:52] [PASSED] oob_was/22012727170
[15:58:52] [PASSED] oob_was/22012727685
[15:58:52] [PASSED] oob_was/22016596838
[15:58:52] [PASSED] oob_was/18020744125
[15:58:52] [PASSED] oob_was/1409600907
[15:58:52] [PASSED] oob_was/22014953428
[15:58:52] [PASSED] oob_was/16017236439
[15:58:52] [PASSED] oob_was/14019821291
[15:58:52] [PASSED] oob_was/14015076503
[15:58:52] [PASSED] oob_was/14018913170
[15:58:52] [PASSED] oob_was/14018094691
[15:58:52] [PASSED] oob_was/18024947630
[15:58:52] [PASSED] oob_was/16022287689
[15:58:52] [PASSED] oob_was/13011645652
[15:58:52] [PASSED] oob_was/14022293748
[15:58:52] [PASSED] oob_was/22019794406
[15:58:52] [PASSED] oob_was/22019338487
[15:58:52] [PASSED] oob_was/16023588340
[15:58:52] [PASSED] oob_was/14019789679
[15:58:52] [PASSED] oob_was/14022866841
[15:58:52] [PASSED] oob_was/16021333562
[15:58:52] [PASSED] oob_was/14016712196
[15:58:52] [PASSED] oob_was/14015568240
[15:58:52] [PASSED] oob_was/18013179988
[15:58:52] [PASSED] oob_was/1508761755
[15:58:52] [PASSED] oob_was/16023105232
[15:58:52] [PASSED] oob_was/16026508708
[15:58:52] [PASSED] oob_was/14020001231
[15:58:52] [PASSED] oob_was/16023683509
[15:58:52] [PASSED] oob_was/14025515070
[15:58:52] [PASSED] oob_was/15015404425_disable
[15:58:52] [PASSED] oob_was/16026007364
[15:58:52] [PASSED] oob_was/14020316580
[15:58:52] [PASSED] oob_was/14025883347
[15:58:52] [PASSED] oob_was/16029380221
[15:58:52] ============== [PASSED] xe_rtp_table_oob_test ==============
[15:58:52] ================ xe_rtp_table_dev_oob_test  ================
[15:58:52] [PASSED] device_oob_was/22010954014
[15:58:52] [PASSED] device_oob_was/15015404425
[15:58:52] [PASSED] device_oob_was/22019338487_display
[15:58:52] [PASSED] device_oob_was/14022085890
[15:58:52] [PASSED] device_oob_was/14026539277
[15:58:52] [PASSED] device_oob_was/14026633728
[15:58:52] [PASSED] device_oob_was/14026746987
[15:58:52] [PASSED] device_oob_was/14026779378
[15:58:52] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[15:58:52] =============== [PASSED] xe_rtp_tables_test ================
[15:58:52] =================== xe_rtp (3 subtests) ====================
[15:58:52] =================== xe_rtp_rules_tests  ====================
[15:58:52] [PASSED] no
[15:58:52] [PASSED] yes
[15:58:52] [PASSED] no-and-no
[15:58:52] [PASSED] no-and-yes
[15:58:52] [PASSED] yes-and-no
[15:58:52] [PASSED] yes-and-yes
[15:58:52] [PASSED] no-or-no
[15:58:52] [PASSED] no-or-yes
[15:58:52] [PASSED] yes-or-no
[15:58:52] [PASSED] yes-or-yes
[15:58:52] [PASSED] no-yes-or-yes-no
[15:58:52] [PASSED] no-yes-or-yes-yes
[15:58:52] [PASSED] yes-yes-or-no-yes
[15:58:52] [PASSED] yes-yes-or-yes-yes
[15:58:52] [PASSED] no-no-or-yes-or-no
[15:58:52] [PASSED] or
[15:58:52] [PASSED] or-yes
[15:58:52] [PASSED] or-no
[15:58:52] [PASSED] yes-or
[15:58:52] [PASSED] no-or
[15:58:52] [PASSED] no-or-or-yes
[15:58:52] [PASSED] yes-or-or-no
[15:58:52] [PASSED] no-or-or-no
[15:58:52] [PASSED] missing-context-engine-class
[15:58:52] [PASSED] missing-context-engine-class-or-yes
[15:58:52] [PASSED] missing-context-engine-class-or-or-yes
[15:58:52] =============== [PASSED] xe_rtp_rules_tests ================
[15:58:52] =============== xe_rtp_process_to_sr_tests  ================
[15:58:52] [PASSED] coalesce-same-reg
[15:58:52] [PASSED] coalesce-same-reg-literal-and-func
[15:58:52] [PASSED] no-match-no-add
[15:58:52] [PASSED] two-regs-two-entries
[15:58:52] [PASSED] clr-one-set-other
[15:58:52] [PASSED] set-field
[15:58:52] [PASSED] conflict-duplicate
[15:58:52] [PASSED] conflict-not-disjoint
[15:58:52] [PASSED] conflict-not-disjoint-literal-and-func
[15:58:52] [PASSED] conflict-reg-type
[15:58:52] [PASSED] bad-mcr-reg-forced-to-regular
[15:58:52] [PASSED] bad-regular-reg-forced-to-mcr
[15:58:52] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[15:58:52] ================== xe_rtp_process_tests  ===================
[15:58:52] [PASSED] active1
[15:58:52] [PASSED] active2
[15:58:52] [PASSED] active-inactive
[15:58:52] [PASSED] inactive-active
[15:58:52] [PASSED] inactive-active-inactive
[15:58:52] [PASSED] inactive-inactive-inactive
[15:58:52] ============== [PASSED] xe_rtp_process_tests ===============
[15:58:52] ===================== [PASSED] xe_rtp ======================
[15:58:52] ==================== xe_wa (1 subtest) =====================
[15:58:52] ======================== xe_wa_gt  =========================
[15:58:52] [PASSED] TIGERLAKE B0
[15:58:52] [PASSED] DG1 A0
[15:58:52] [PASSED] DG1 B0
[15:58:52] [PASSED] ALDERLAKE_S A0
[15:58:52] [PASSED] ALDERLAKE_S B0
[15:58:52] [PASSED] ALDERLAKE_S C0
[15:58:52] [PASSED] ALDERLAKE_S D0
[15:58:52] [PASSED] ALDERLAKE_P A0
[15:58:52] [PASSED] ALDERLAKE_P B0
[15:58:52] [PASSED] ALDERLAKE_P C0
[15:58:52] [PASSED] ALDERLAKE_S RPLS D0
[15:58:52] [PASSED] ALDERLAKE_P RPLU E0
[15:58:52] [PASSED] DG2 G10 C0
[15:58:52] [PASSED] DG2 G11 B1
[15:58:52] [PASSED] DG2 G12 A1
[15:58:52] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[15:58:52] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[15:58:52] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[15:58:52] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[15:58:52] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[15:58:52] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[15:58:52] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[15:58:52] ==================== [PASSED] xe_wa_gt =====================
[15:58:52] ====================== [PASSED] xe_wa ======================
[15:58:52] ============================================================
[15:58:52] Testing complete. Ran 720 tests: passed: 701, skipped: 19
[15:58:52] Elapsed time: 36.188s total, 4.296s configuring, 31.227s building, 0.649s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[15:58:52] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[15:58:54] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[15:59:18] Starting KUnit Kernel (1/1)...
[15:59:18] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[15:59:18] ============ drm_test_pick_cmdline (2 subtests) ============
[15:59:18] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[15:59:18] =============== drm_test_pick_cmdline_named  ===============
[15:59:18] [PASSED] NTSC
[15:59:18] [PASSED] NTSC-J
[15:59:18] [PASSED] PAL
[15:59:18] [PASSED] PAL-M
[15:59:18] =========== [PASSED] drm_test_pick_cmdline_named ===========
[15:59:18] ============== [PASSED] drm_test_pick_cmdline ==============
[15:59:18] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[15:59:18] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[15:59:18] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[15:59:18] =========== drm_validate_clone_mode (2 subtests) ===========
[15:59:18] ============== drm_test_check_in_clone_mode  ===============
[15:59:18] [PASSED] in_clone_mode
[15:59:18] [PASSED] not_in_clone_mode
[15:59:18] ========== [PASSED] drm_test_check_in_clone_mode ===========
[15:59:18] =============== drm_test_check_valid_clones  ===============
[15:59:18] [PASSED] not_in_clone_mode
[15:59:18] [PASSED] valid_clone
[15:59:18] [PASSED] invalid_clone
[15:59:18] =========== [PASSED] drm_test_check_valid_clones ===========
[15:59:18] ============= [PASSED] drm_validate_clone_mode =============
[15:59:18] ============= drm_validate_modeset (1 subtest) =============
[15:59:18] [PASSED] drm_test_check_connector_changed_modeset
[15:59:18] ============== [PASSED] drm_validate_modeset ===============
[15:59:18] ====== drm_test_bridge_get_current_state (2 subtests) ======
[15:59:18] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[15:59:18] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[15:59:18] ======== [PASSED] drm_test_bridge_get_current_state ========
[15:59:18] ====== drm_test_bridge_helper_reset_crtc (4 subtests) ======
[15:59:18] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[15:59:18] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[15:59:18] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[15:59:18] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[15:59:18] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[15:59:18] ============== drm_bridge_alloc (2 subtests) ===============
[15:59:18] [PASSED] drm_test_drm_bridge_alloc_basic
[15:59:18] [PASSED] drm_test_drm_bridge_alloc_get_put
[15:59:18] ================ [PASSED] drm_bridge_alloc =================
[15:59:18] ============= drm_bridge_bus_fmt (5 subtests) ==============
[15:59:18] [PASSED] drm_test_bridge_rgb_yuv_rgb
[15:59:18] [PASSED] drm_test_bridge_must_convert_to_yuv444
[15:59:18] [PASSED] drm_test_bridge_hdmi_auto_rgb
[15:59:18] [PASSED] drm_test_bridge_auto_first
[15:59:18] [PASSED] drm_test_bridge_rgb_yuv_no_path
[15:59:18] =============== [PASSED] drm_bridge_bus_fmt ================
[15:59:18] ============= drm_cmdline_parser (40 subtests) =============
[15:59:18] [PASSED] drm_test_cmdline_force_d_only
[15:59:18] [PASSED] drm_test_cmdline_force_D_only_dvi
[15:59:18] [PASSED] drm_test_cmdline_force_D_only_hdmi
[15:59:18] [PASSED] drm_test_cmdline_force_D_only_not_digital
[15:59:18] [PASSED] drm_test_cmdline_force_e_only
[15:59:18] [PASSED] drm_test_cmdline_res
[15:59:18] [PASSED] drm_test_cmdline_res_vesa
[15:59:18] [PASSED] drm_test_cmdline_res_vesa_rblank
[15:59:18] [PASSED] drm_test_cmdline_res_rblank
[15:59:18] [PASSED] drm_test_cmdline_res_bpp
[15:59:18] [PASSED] drm_test_cmdline_res_refresh
[15:59:18] [PASSED] drm_test_cmdline_res_bpp_refresh
[15:59:18] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[15:59:18] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[15:59:18] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[15:59:18] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[15:59:18] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[15:59:18] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[15:59:18] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[15:59:18] [PASSED] drm_test_cmdline_res_margins_force_on
[15:59:18] [PASSED] drm_test_cmdline_res_vesa_margins
[15:59:18] [PASSED] drm_test_cmdline_name
[15:59:18] [PASSED] drm_test_cmdline_name_bpp
[15:59:18] [PASSED] drm_test_cmdline_name_option
[15:59:18] [PASSED] drm_test_cmdline_name_bpp_option
[15:59:18] [PASSED] drm_test_cmdline_rotate_0
[15:59:18] [PASSED] drm_test_cmdline_rotate_90
[15:59:18] [PASSED] drm_test_cmdline_rotate_180
[15:59:18] [PASSED] drm_test_cmdline_rotate_270
[15:59:18] [PASSED] drm_test_cmdline_hmirror
[15:59:18] [PASSED] drm_test_cmdline_vmirror
[15:59:18] [PASSED] drm_test_cmdline_margin_options
[15:59:18] [PASSED] drm_test_cmdline_multiple_options
[15:59:18] [PASSED] drm_test_cmdline_bpp_extra_and_option
[15:59:18] [PASSED] drm_test_cmdline_extra_and_option
[15:59:18] [PASSED] drm_test_cmdline_freestanding_options
[15:59:18] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[15:59:18] [PASSED] drm_test_cmdline_panel_orientation
[15:59:18] ================ drm_test_cmdline_invalid  =================
[15:59:18] [PASSED] margin_only
[15:59:18] [PASSED] interlace_only
[15:59:18] [PASSED] res_missing_x
[15:59:18] [PASSED] res_missing_y
[15:59:18] [PASSED] res_bad_y
[15:59:18] [PASSED] res_missing_y_bpp
[15:59:18] [PASSED] res_bad_bpp
[15:59:18] [PASSED] res_bad_refresh
[15:59:18] [PASSED] res_bpp_refresh_force_on_off
[15:59:18] [PASSED] res_invalid_mode
[15:59:18] [PASSED] res_bpp_wrong_place_mode
[15:59:18] [PASSED] name_bpp_refresh
[15:59:18] [PASSED] name_refresh
[15:59:18] [PASSED] name_refresh_wrong_mode
[15:59:18] [PASSED] name_refresh_invalid_mode
[15:59:18] [PASSED] rotate_multiple
[15:59:18] [PASSED] rotate_invalid_val
[15:59:18] [PASSED] rotate_truncated
[15:59:18] [PASSED] invalid_option
[15:59:18] [PASSED] invalid_tv_option
[15:59:18] [PASSED] truncated_tv_option
[15:59:18] ============ [PASSED] drm_test_cmdline_invalid =============
[15:59:18] =============== drm_test_cmdline_tv_options  ===============
[15:59:18] [PASSED] NTSC
[15:59:18] [PASSED] NTSC_443
[15:59:18] [PASSED] NTSC_J
[15:59:18] [PASSED] PAL
[15:59:18] [PASSED] PAL_M
[15:59:18] [PASSED] PAL_N
[15:59:18] [PASSED] SECAM
[15:59:18] [PASSED] MONO_525
[15:59:18] [PASSED] MONO_625
[15:59:18] =========== [PASSED] drm_test_cmdline_tv_options ===========
[15:59:18] =============== [PASSED] drm_cmdline_parser ================
[15:59:18] ========== drmm_connector_hdmi_init (20 subtests) ==========
[15:59:18] [PASSED] drm_test_connector_hdmi_init_valid
[15:59:18] [PASSED] drm_test_connector_hdmi_init_bpc_8
[15:59:18] [PASSED] drm_test_connector_hdmi_init_bpc_10
[15:59:18] [PASSED] drm_test_connector_hdmi_init_bpc_12
[15:59:18] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[15:59:18] [PASSED] drm_test_connector_hdmi_init_bpc_null
[15:59:18] [PASSED] drm_test_connector_hdmi_init_formats_empty
[15:59:18] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[15:59:18] === drm_test_connector_hdmi_init_formats_yuv420_allowed  ===
[15:59:18] [PASSED] supported_formats=0x9 yuv420_allowed=1
[15:59:18] [PASSED] supported_formats=0x9 yuv420_allowed=0
[15:59:18] [PASSED] supported_formats=0x5 yuv420_allowed=1
[15:59:18] [PASSED] supported_formats=0x5 yuv420_allowed=0
[15:59:18] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[15:59:18] [PASSED] drm_test_connector_hdmi_init_null_ddc
[15:59:18] [PASSED] drm_test_connector_hdmi_init_null_product
[15:59:18] [PASSED] drm_test_connector_hdmi_init_null_vendor
[15:59:18] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[15:59:18] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[15:59:18] [PASSED] drm_test_connector_hdmi_init_product_valid
[15:59:18] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[15:59:18] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[15:59:18] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[15:59:18] ========= drm_test_connector_hdmi_init_type_valid  =========
[15:59:18] [PASSED] HDMI-A
[15:59:18] [PASSED] HDMI-B
[15:59:18] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[15:59:18] ======== drm_test_connector_hdmi_init_type_invalid  ========
[15:59:18] [PASSED] Unknown
[15:59:18] [PASSED] VGA
[15:59:18] [PASSED] DVI-I
[15:59:18] [PASSED] DVI-D
[15:59:18] [PASSED] DVI-A
[15:59:18] [PASSED] Composite
[15:59:18] [PASSED] SVIDEO
[15:59:18] [PASSED] LVDS
[15:59:18] [PASSED] Component
[15:59:18] [PASSED] DIN
[15:59:18] [PASSED] DP
[15:59:18] [PASSED] TV
[15:59:18] [PASSED] eDP
[15:59:18] [PASSED] Virtual
[15:59:18] [PASSED] DSI
[15:59:18] [PASSED] DPI
[15:59:18] [PASSED] Writeback
[15:59:18] [PASSED] SPI
[15:59:18] [PASSED] USB
[15:59:18] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[15:59:18] ============ [PASSED] drmm_connector_hdmi_init =============
[15:59:18] ============= drmm_connector_init (3 subtests) =============
[15:59:18] [PASSED] drm_test_drmm_connector_init
[15:59:18] [PASSED] drm_test_drmm_connector_init_null_ddc
[15:59:18] ========= drm_test_drmm_connector_init_type_valid  =========
[15:59:18] [PASSED] Unknown
[15:59:18] [PASSED] VGA
[15:59:18] [PASSED] DVI-I
[15:59:18] [PASSED] DVI-D
[15:59:18] [PASSED] DVI-A
[15:59:18] [PASSED] Composite
[15:59:18] [PASSED] SVIDEO
[15:59:18] [PASSED] LVDS
[15:59:18] [PASSED] Component
[15:59:18] [PASSED] DIN
[15:59:18] [PASSED] DP
[15:59:18] [PASSED] HDMI-A
[15:59:18] [PASSED] HDMI-B
[15:59:18] [PASSED] TV
[15:59:18] [PASSED] eDP
[15:59:18] [PASSED] Virtual
[15:59:18] [PASSED] DSI
[15:59:18] [PASSED] DPI
[15:59:18] [PASSED] Writeback
[15:59:18] [PASSED] SPI
[15:59:18] [PASSED] USB
[15:59:18] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[15:59:18] =============== [PASSED] drmm_connector_init ===============
[15:59:18] ========= drm_connector_dynamic_init (6 subtests) ==========
[15:59:18] [PASSED] drm_test_drm_connector_dynamic_init
[15:59:18] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[15:59:18] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[15:59:18] [PASSED] drm_test_drm_connector_dynamic_init_properties
[15:59:18] ===== drm_test_drm_connector_dynamic_init_type_valid  ======
[15:59:18] [PASSED] Unknown
[15:59:18] [PASSED] VGA
[15:59:18] [PASSED] DVI-I
[15:59:18] [PASSED] DVI-D
[15:59:18] [PASSED] DVI-A
[15:59:18] [PASSED] Composite
[15:59:18] [PASSED] SVIDEO
[15:59:18] [PASSED] LVDS
[15:59:18] [PASSED] Component
[15:59:18] [PASSED] DIN
[15:59:18] [PASSED] DP
[15:59:18] [PASSED] HDMI-A
[15:59:18] [PASSED] HDMI-B
[15:59:18] [PASSED] TV
[15:59:18] [PASSED] eDP
[15:59:18] [PASSED] Virtual
[15:59:18] [PASSED] DSI
[15:59:18] [PASSED] DPI
[15:59:18] [PASSED] Writeback
[15:59:18] [PASSED] SPI
[15:59:18] [PASSED] USB
[15:59:18] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[15:59:18] ======== drm_test_drm_connector_dynamic_init_name  =========
[15:59:18] [PASSED] Unknown
[15:59:18] [PASSED] VGA
[15:59:18] [PASSED] DVI-I
[15:59:18] [PASSED] DVI-D
[15:59:18] [PASSED] DVI-A
[15:59:18] [PASSED] Composite
[15:59:18] [PASSED] SVIDEO
[15:59:18] [PASSED] LVDS
[15:59:18] [PASSED] Component
[15:59:18] [PASSED] DIN
[15:59:18] [PASSED] DP
[15:59:18] [PASSED] HDMI-A
[15:59:18] [PASSED] HDMI-B
[15:59:18] [PASSED] TV
[15:59:18] [PASSED] eDP
[15:59:18] [PASSED] Virtual
[15:59:18] [PASSED] DSI
[15:59:18] [PASSED] DPI
[15:59:18] [PASSED] Writeback
[15:59:18] [PASSED] SPI
[15:59:18] [PASSED] USB
[15:59:18] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[15:59:18] =========== [PASSED] drm_connector_dynamic_init ============
[15:59:18] ==== drm_connector_dynamic_register_early (4 subtests) =====
[15:59:18] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[15:59:18] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[15:59:18] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[15:59:18] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[15:59:18] ====== [PASSED] drm_connector_dynamic_register_early =======
[15:59:18] ======= drm_connector_dynamic_register (7 subtests) ========
[15:59:18] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[15:59:18] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[15:59:18] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[15:59:18] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[15:59:18] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[15:59:18] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[15:59:18] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[15:59:18] ========= [PASSED] drm_connector_dynamic_register ==========
[15:59:18] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[15:59:18] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[15:59:18] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[15:59:18] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[15:59:18] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[15:59:18] ========== drm_test_get_tv_mode_from_name_valid  ===========
[15:59:18] [PASSED] NTSC
[15:59:18] [PASSED] NTSC-443
[15:59:18] [PASSED] NTSC-J
[15:59:18] [PASSED] PAL
[15:59:18] [PASSED] PAL-M
[15:59:18] [PASSED] PAL-N
[15:59:18] [PASSED] SECAM
[15:59:18] [PASSED] Mono
[15:59:18] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[15:59:18] [PASSED] drm_test_get_tv_mode_from_name_truncated
[15:59:18] ============ [PASSED] drm_get_tv_mode_from_name ============
[15:59:18] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[15:59:18] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[15:59:18] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[15:59:18] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[15:59:18] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[15:59:18] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[15:59:18] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[15:59:18] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid  =
[15:59:18] [PASSED] VIC 96
[15:59:18] [PASSED] VIC 97
[15:59:18] [PASSED] VIC 101
[15:59:18] [PASSED] VIC 102
[15:59:18] [PASSED] VIC 106
[15:59:18] [PASSED] VIC 107
[15:59:18] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[15:59:18] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[15:59:18] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[15:59:18] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[15:59:18] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[15:59:18] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[15:59:18] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[15:59:18] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[15:59:18] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name  ====
[15:59:18] [PASSED] Automatic
[15:59:18] [PASSED] Full
[15:59:18] [PASSED] Limited 16:235
[15:59:18] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[15:59:18] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[15:59:18] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[15:59:18] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[15:59:18] === drm_test_drm_hdmi_connector_get_output_format_name  ====
[15:59:18] [PASSED] RGB
[15:59:18] [PASSED] YUV 4:2:0
[15:59:18] [PASSED] YUV 4:2:2
[15:59:18] [PASSED] YUV 4:4:4
[15:59:18] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[15:59:18] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[15:59:18] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[15:59:18] ============= drm_damage_helper (21 subtests) ==============
[15:59:18] [PASSED] drm_test_damage_iter_no_damage
[15:59:18] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[15:59:18] [PASSED] drm_test_damage_iter_no_damage_src_moved
[15:59:18] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[15:59:18] [PASSED] drm_test_damage_iter_no_damage_not_visible
[15:59:18] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[15:59:18] [PASSED] drm_test_damage_iter_no_damage_no_fb
[15:59:18] [PASSED] drm_test_damage_iter_simple_damage
[15:59:18] [PASSED] drm_test_damage_iter_single_damage
[15:59:18] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[15:59:18] [PASSED] drm_test_damage_iter_single_damage_outside_src
[15:59:18] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[15:59:18] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[15:59:18] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[15:59:18] [PASSED] drm_test_damage_iter_single_damage_src_moved
[15:59:18] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[15:59:18] [PASSED] drm_test_damage_iter_damage
[15:59:18] [PASSED] drm_test_damage_iter_damage_one_intersect
[15:59:18] [PASSED] drm_test_damage_iter_damage_one_outside
[15:59:18] [PASSED] drm_test_damage_iter_damage_src_moved
[15:59:18] [PASSED] drm_test_damage_iter_damage_not_visible
[15:59:18] ================ [PASSED] drm_damage_helper ================
[15:59:18] ============== drm_dp_mst_helper (3 subtests) ==============
[15:59:18] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[15:59:18] [PASSED] Clock 154000 BPP 30 DSC disabled
[15:59:18] [PASSED] Clock 234000 BPP 30 DSC disabled
[15:59:18] [PASSED] Clock 297000 BPP 24 DSC disabled
[15:59:18] [PASSED] Clock 332880 BPP 24 DSC enabled
[15:59:18] [PASSED] Clock 324540 BPP 24 DSC enabled
[15:59:18] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[15:59:18] ============== drm_test_dp_mst_calc_pbn_div  ===============
[15:59:18] [PASSED] Link rate 2000000 lane count 4
[15:59:18] [PASSED] Link rate 2000000 lane count 2
[15:59:18] [PASSED] Link rate 2000000 lane count 1
[15:59:18] [PASSED] Link rate 1350000 lane count 4
[15:59:18] [PASSED] Link rate 1350000 lane count 2
[15:59:18] [PASSED] Link rate 1350000 lane count 1
[15:59:18] [PASSED] Link rate 1000000 lane count 4
[15:59:18] [PASSED] Link rate 1000000 lane count 2
[15:59:18] [PASSED] Link rate 1000000 lane count 1
[15:59:18] [PASSED] Link rate 810000 lane count 4
[15:59:18] [PASSED] Link rate 810000 lane count 2
[15:59:18] [PASSED] Link rate 810000 lane count 1
[15:59:18] [PASSED] Link rate 540000 lane count 4
[15:59:18] [PASSED] Link rate 540000 lane count 2
[15:59:18] [PASSED] Link rate 540000 lane count 1
[15:59:18] [PASSED] Link rate 270000 lane count 4
[15:59:18] [PASSED] Link rate 270000 lane count 2
[15:59:18] [PASSED] Link rate 270000 lane count 1
[15:59:18] [PASSED] Link rate 162000 lane count 4
[15:59:18] [PASSED] Link rate 162000 lane count 2
[15:59:18] [PASSED] Link rate 162000 lane count 1
[15:59:18] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[15:59:18] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[15:59:18] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[15:59:18] [PASSED] DP_POWER_UP_PHY with port number
[15:59:18] [PASSED] DP_POWER_DOWN_PHY with port number
[15:59:18] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[15:59:18] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[15:59:18] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[15:59:18] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[15:59:18] [PASSED] DP_QUERY_PAYLOAD with port number
[15:59:18] [PASSED] DP_QUERY_PAYLOAD with VCPI
[15:59:18] [PASSED] DP_REMOTE_DPCD_READ with port number
[15:59:18] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[15:59:18] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[15:59:18] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[15:59:18] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[15:59:18] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[15:59:18] [PASSED] DP_REMOTE_I2C_READ with port number
[15:59:18] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[15:59:18] [PASSED] DP_REMOTE_I2C_READ with transactions array
[15:59:18] [PASSED] DP_REMOTE_I2C_WRITE with port number
[15:59:18] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[15:59:18] [PASSED] DP_REMOTE_I2C_WRITE with data array
[15:59:18] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[15:59:18] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[15:59:18] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[15:59:18] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[15:59:18] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[15:59:18] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[15:59:18] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[15:59:18] ================ [PASSED] drm_dp_mst_helper ================
[15:59:18] ================== drm_exec (7 subtests) ===================
[15:59:18] [PASSED] sanitycheck
[15:59:18] [PASSED] test_lock
[15:59:18] [PASSED] test_lock_unlock
[15:59:18] [PASSED] test_duplicates
[15:59:18] [PASSED] test_prepare
[15:59:18] [PASSED] test_prepare_array
[15:59:18] [PASSED] test_multiple_loops
[15:59:18] ==================== [PASSED] drm_exec =====================
[15:59:18] =========== drm_format_helper_test (17 subtests) ===========
[15:59:18] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[15:59:18] [PASSED] single_pixel_source_buffer
[15:59:18] [PASSED] single_pixel_clip_rectangle
[15:59:18] [PASSED] well_known_colors
[15:59:18] [PASSED] destination_pitch
[15:59:18] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[15:59:18] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[15:59:18] [PASSED] single_pixel_source_buffer
[15:59:18] [PASSED] single_pixel_clip_rectangle
[15:59:18] [PASSED] well_known_colors
[15:59:18] [PASSED] destination_pitch
[15:59:18] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[15:59:18] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[15:59:18] [PASSED] single_pixel_source_buffer
[15:59:18] [PASSED] single_pixel_clip_rectangle
[15:59:18] [PASSED] well_known_colors
[15:59:18] [PASSED] destination_pitch
[15:59:18] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[15:59:18] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[15:59:18] [PASSED] single_pixel_source_buffer
[15:59:18] [PASSED] single_pixel_clip_rectangle
[15:59:18] [PASSED] well_known_colors
[15:59:18] [PASSED] destination_pitch
[15:59:18] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[15:59:18] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[15:59:18] [PASSED] single_pixel_source_buffer
[15:59:18] [PASSED] single_pixel_clip_rectangle
[15:59:18] [PASSED] well_known_colors
[15:59:18] [PASSED] destination_pitch
[15:59:18] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[15:59:18] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[15:59:18] [PASSED] single_pixel_source_buffer
[15:59:18] [PASSED] single_pixel_clip_rectangle
[15:59:18] [PASSED] well_known_colors
[15:59:18] [PASSED] destination_pitch
[15:59:18] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[15:59:18] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[15:59:18] [PASSED] single_pixel_source_buffer
[15:59:18] [PASSED] single_pixel_clip_rectangle
[15:59:18] [PASSED] well_known_colors
[15:59:18] [PASSED] destination_pitch
[15:59:18] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[15:59:18] ============= drm_test_fb_xrgb8888_to_bgr888  ==============
[15:59:18] [PASSED] single_pixel_source_buffer
[15:59:18] [PASSED] single_pixel_clip_rectangle
[15:59:18] [PASSED] well_known_colors
[15:59:18] [PASSED] destination_pitch
[15:59:18] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[15:59:18] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[15:59:18] [PASSED] single_pixel_source_buffer
[15:59:18] [PASSED] single_pixel_clip_rectangle
[15:59:18] [PASSED] well_known_colors
[15:59:18] [PASSED] destination_pitch
[15:59:18] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[15:59:18] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[15:59:18] [PASSED] single_pixel_source_buffer
[15:59:18] [PASSED] single_pixel_clip_rectangle
[15:59:18] [PASSED] well_known_colors
[15:59:18] [PASSED] destination_pitch
[15:59:18] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[15:59:18] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[15:59:18] [PASSED] single_pixel_source_buffer
[15:59:18] [PASSED] single_pixel_clip_rectangle
[15:59:18] [PASSED] well_known_colors
[15:59:18] [PASSED] destination_pitch
[15:59:18] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[15:59:18] ============== drm_test_fb_xrgb8888_to_mono  ===============
[15:59:18] [PASSED] single_pixel_source_buffer
[15:59:18] [PASSED] single_pixel_clip_rectangle
[15:59:18] [PASSED] well_known_colors
[15:59:18] [PASSED] destination_pitch
[15:59:18] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[15:59:18] ==================== drm_test_fb_swab  =====================
[15:59:18] [PASSED] single_pixel_source_buffer
[15:59:18] [PASSED] single_pixel_clip_rectangle
[15:59:18] [PASSED] well_known_colors
[15:59:18] [PASSED] destination_pitch
[15:59:18] ================ [PASSED] drm_test_fb_swab =================
[15:59:18] ============ drm_test_fb_xrgb8888_to_xbgr8888  =============
[15:59:18] [PASSED] single_pixel_source_buffer
[15:59:18] [PASSED] single_pixel_clip_rectangle
[15:59:18] [PASSED] well_known_colors
[15:59:18] [PASSED] destination_pitch
[15:59:18] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[15:59:18] ============ drm_test_fb_xrgb8888_to_abgr8888  =============
[15:59:18] [PASSED] single_pixel_source_buffer
[15:59:18] [PASSED] single_pixel_clip_rectangle
[15:59:18] [PASSED] well_known_colors
[15:59:18] [PASSED] destination_pitch
[15:59:18] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[15:59:18] ================= drm_test_fb_clip_offset  =================
[15:59:18] [PASSED] pass through
[15:59:18] [PASSED] horizontal offset
[15:59:18] [PASSED] vertical offset
[15:59:18] [PASSED] horizontal and vertical offset
[15:59:18] [PASSED] horizontal offset (custom pitch)
[15:59:18] [PASSED] vertical offset (custom pitch)
[15:59:18] [PASSED] horizontal and vertical offset (custom pitch)
[15:59:18] ============= [PASSED] drm_test_fb_clip_offset =============
[15:59:18] =================== drm_test_fb_memcpy  ====================
[15:59:18] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[15:59:18] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[15:59:18] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[15:59:18] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[15:59:18] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[15:59:18] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[15:59:18] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[15:59:18] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[15:59:18] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[15:59:18] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[15:59:18] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[15:59:18] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[15:59:18] =============== [PASSED] drm_test_fb_memcpy ================
[15:59:18] ============= [PASSED] drm_format_helper_test ==============
[15:59:18] ================= drm_format (18 subtests) =================
[15:59:18] [PASSED] drm_test_format_block_width_invalid
[15:59:18] [PASSED] drm_test_format_block_width_one_plane
[15:59:18] [PASSED] drm_test_format_block_width_two_plane
[15:59:18] [PASSED] drm_test_format_block_width_three_plane
[15:59:18] [PASSED] drm_test_format_block_width_tiled
[15:59:18] [PASSED] drm_test_format_block_height_invalid
[15:59:18] [PASSED] drm_test_format_block_height_one_plane
[15:59:18] [PASSED] drm_test_format_block_height_two_plane
[15:59:18] [PASSED] drm_test_format_block_height_three_plane
[15:59:18] [PASSED] drm_test_format_block_height_tiled
[15:59:18] [PASSED] drm_test_format_min_pitch_invalid
[15:59:18] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[15:59:18] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[15:59:18] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[15:59:18] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[15:59:18] [PASSED] drm_test_format_min_pitch_two_plane
[15:59:18] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[15:59:18] [PASSED] drm_test_format_min_pitch_tiled
[15:59:18] =================== [PASSED] drm_format ====================
[15:59:18] ============== drm_framebuffer (10 subtests) ===============
[15:59:18] ========== drm_test_framebuffer_check_src_coords  ==========
[15:59:18] [PASSED] Success: source fits into fb
[15:59:18] [PASSED] Fail: overflowing fb with x-axis coordinate
[15:59:18] [PASSED] Fail: overflowing fb with y-axis coordinate
[15:59:18] [PASSED] Fail: overflowing fb with source width
[15:59:18] [PASSED] Fail: overflowing fb with source height
[15:59:18] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[15:59:18] [PASSED] drm_test_framebuffer_cleanup
[15:59:18] =============== drm_test_framebuffer_create  ===============
[15:59:18] [PASSED] ABGR8888 normal sizes
[15:59:18] [PASSED] ABGR8888 max sizes
[15:59:18] [PASSED] ABGR8888 pitch greater than min required
[15:59:18] [PASSED] ABGR8888 pitch less than min required
[15:59:18] [PASSED] ABGR8888 Invalid width
[15:59:18] [PASSED] ABGR8888 Invalid buffer handle
[15:59:18] [PASSED] No pixel format
[15:59:18] [PASSED] ABGR8888 Width 0
[15:59:18] [PASSED] ABGR8888 Height 0
[15:59:18] [PASSED] ABGR8888 Out of bound height * pitch combination
[15:59:18] [PASSED] ABGR8888 Large buffer offset
[15:59:18] [PASSED] ABGR8888 Buffer offset for inexistent plane
[15:59:18] [PASSED] ABGR8888 Invalid flag
[15:59:18] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[15:59:18] [PASSED] ABGR8888 Valid buffer modifier
[15:59:18] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[15:59:18] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[15:59:18] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[15:59:18] [PASSED] NV12 Normal sizes
[15:59:18] [PASSED] NV12 Max sizes
[15:59:18] [PASSED] NV12 Invalid pitch
[15:59:18] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[15:59:18] [PASSED] NV12 different  modifier per-plane
[15:59:18] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[15:59:18] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[15:59:18] [PASSED] NV12 Modifier for inexistent plane
[15:59:18] [PASSED] NV12 Handle for inexistent plane
[15:59:18] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[15:59:18] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[15:59:18] [PASSED] YVU420 Normal sizes
[15:59:18] [PASSED] YVU420 Max sizes
[15:59:18] [PASSED] YVU420 Invalid pitch
[15:59:18] [PASSED] YVU420 Different pitches
[15:59:18] [PASSED] YVU420 Different buffer offsets/pitches
[15:59:18] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[15:59:18] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[15:59:18] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[15:59:18] [PASSED] YVU420 Valid modifier
[15:59:18] [PASSED] YVU420 Different modifiers per plane
[15:59:18] [PASSED] YVU420 Modifier for inexistent plane
[15:59:18] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[15:59:18] [PASSED] X0L2 Normal sizes
[15:59:18] [PASSED] X0L2 Max sizes
[15:59:18] [PASSED] X0L2 Invalid pitch
[15:59:18] [PASSED] X0L2 Pitch greater than minimum required
[15:59:18] [PASSED] X0L2 Handle for inexistent plane
[15:59:18] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[15:59:18] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[15:59:18] [PASSED] X0L2 Valid modifier
[15:59:18] [PASSED] X0L2 Modifier for inexistent plane
[15:59:18] =========== [PASSED] drm_test_framebuffer_create ===========
[15:59:18] [PASSED] drm_test_framebuffer_free
[15:59:18] [PASSED] drm_test_framebuffer_init
[15:59:18] [PASSED] drm_test_framebuffer_init_bad_format
[15:59:18] [PASSED] drm_test_framebuffer_init_dev_mismatch
[15:59:18] [PASSED] drm_test_framebuffer_lookup
[15:59:18] [PASSED] drm_test_framebuffer_lookup_inexistent
[15:59:18] [PASSED] drm_test_framebuffer_modifiers_not_supported
[15:59:18] ================= [PASSED] drm_framebuffer =================
[15:59:18] ================ drm_gem_shmem (8 subtests) ================
[15:59:18] [PASSED] drm_gem_shmem_test_obj_create
[15:59:18] [PASSED] drm_gem_shmem_test_obj_create_private
[15:59:18] [PASSED] drm_gem_shmem_test_pin_pages
[15:59:18] [PASSED] drm_gem_shmem_test_vmap
[15:59:18] [PASSED] drm_gem_shmem_test_get_sg_table
[15:59:18] [PASSED] drm_gem_shmem_test_get_pages_sgt
[15:59:18] [PASSED] drm_gem_shmem_test_madvise
[15:59:18] [PASSED] drm_gem_shmem_test_purge
[15:59:18] ================== [PASSED] drm_gem_shmem ==================
[15:59:18] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[15:59:18] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[15:59:18] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[15:59:18] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[15:59:18] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[15:59:18] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[15:59:18] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[15:59:18] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420  =======
[15:59:18] [PASSED] Automatic
[15:59:18] [PASSED] Full
[15:59:18] [PASSED] Limited 16:235
[15:59:18] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[15:59:18] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[15:59:18] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[15:59:18] [PASSED] drm_test_check_disable_connector
[15:59:18] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[15:59:18] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[15:59:18] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[15:59:18] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[15:59:18] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[15:59:18] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[15:59:18] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[15:59:18] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[15:59:18] [PASSED] drm_test_check_output_bpc_dvi
[15:59:18] [PASSED] drm_test_check_output_bpc_format_vic_1
[15:59:18] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[15:59:18] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[15:59:18] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[15:59:18] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[15:59:18] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[15:59:18] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[15:59:18] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[15:59:18] ============ drm_test_check_hdmi_color_format  =============
[15:59:18] [PASSED] AUTO -> RGB
[15:59:18] [PASSED] YCBCR422 -> YUV422
[15:59:18] [PASSED] YCBCR420 -> YUV420
[15:59:18] [PASSED] YCBCR444 -> YUV444
[15:59:18] [PASSED] RGB -> RGB
[15:59:18] ======== [PASSED] drm_test_check_hdmi_color_format =========
[15:59:18] ======== drm_test_check_hdmi_color_format_420_only  ========
[15:59:18] [PASSED] RGB should fail
[15:59:18] [PASSED] YUV444 should fail
[15:59:18] [PASSED] YUV422 should fail
[15:59:18] [PASSED] YUV420 should work
[15:59:18] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[15:59:18] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[15:59:18] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[15:59:18] [PASSED] drm_test_check_broadcast_rgb_value
[15:59:18] [PASSED] drm_test_check_bpc_8_value
[15:59:18] [PASSED] drm_test_check_bpc_10_value
[15:59:18] [PASSED] drm_test_check_bpc_12_value
[15:59:18] [PASSED] drm_test_check_format_value
[15:59:18] [PASSED] drm_test_check_tmds_char_value
[15:59:18] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[15:59:18] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[15:59:18] [PASSED] drm_test_check_mode_valid
[15:59:18] [PASSED] drm_test_check_mode_valid_reject
[15:59:18] [PASSED] drm_test_check_mode_valid_reject_rate
[15:59:18] [PASSED] drm_test_check_mode_valid_reject_max_clock
[15:59:18] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[15:59:18] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[15:59:18] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[15:59:18] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[15:59:18] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[15:59:18] [PASSED] drm_test_check_infoframes
[15:59:18] [PASSED] drm_test_check_reject_avi_infoframe
[15:59:18] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[15:59:18] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[15:59:18] [PASSED] drm_test_check_reject_audio_infoframe
[15:59:18] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[15:59:18] ================= drm_managed (2 subtests) =================
[15:59:18] [PASSED] drm_test_managed_release_action
[15:59:18] [PASSED] drm_test_managed_run_action
[15:59:18] =================== [PASSED] drm_managed ===================
[15:59:18] =================== drm_mm (6 subtests) ====================
[15:59:18] [PASSED] drm_test_mm_init
[15:59:18] [PASSED] drm_test_mm_debug
[15:59:18] [PASSED] drm_test_mm_align32
[15:59:18] [PASSED] drm_test_mm_align64
[15:59:18] [PASSED] drm_test_mm_lowest
[15:59:18] [PASSED] drm_test_mm_highest
[15:59:18] ===================== [PASSED] drm_mm ======================
[15:59:18] ============= drm_modes_analog_tv (5 subtests) =============
[15:59:18] [PASSED] drm_test_modes_analog_tv_mono_576i
[15:59:18] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[15:59:18] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[15:59:18] [PASSED] drm_test_modes_analog_tv_pal_576i
[15:59:18] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[15:59:18] =============== [PASSED] drm_modes_analog_tv ===============
[15:59:18] ============== drm_plane_helper (2 subtests) ===============
[15:59:18] =============== drm_test_check_plane_state  ================
[15:59:18] [PASSED] clipping_simple
[15:59:18] [PASSED] clipping_rotate_reflect
[15:59:18] [PASSED] positioning_simple
[15:59:18] [PASSED] upscaling
[15:59:18] [PASSED] downscaling
[15:59:18] [PASSED] rounding1
[15:59:18] [PASSED] rounding2
[15:59:18] [PASSED] rounding3
[15:59:18] [PASSED] rounding4
[15:59:18] =========== [PASSED] drm_test_check_plane_state ============
[15:59:18] =========== drm_test_check_invalid_plane_state  ============
[15:59:18] [PASSED] positioning_invalid
[15:59:18] [PASSED] upscaling_invalid
[15:59:18] [PASSED] downscaling_invalid
[15:59:18] ======= [PASSED] drm_test_check_invalid_plane_state ========
[15:59:18] ================ [PASSED] drm_plane_helper =================
[15:59:18] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[15:59:18] ====== drm_test_connector_helper_tv_get_modes_check  =======
[15:59:18] [PASSED] None
[15:59:18] [PASSED] PAL
[15:59:18] [PASSED] NTSC
[15:59:18] [PASSED] Both, NTSC Default
[15:59:18] [PASSED] Both, PAL Default
[15:59:18] [PASSED] Both, NTSC Default, with PAL on command-line
[15:59:18] [PASSED] Both, PAL Default, with NTSC on command-line
[15:59:18] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[15:59:18] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[15:59:18] ================== drm_rect (9 subtests) ===================
[15:59:18] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[15:59:18] [PASSED] drm_test_rect_clip_scaled_not_clipped
[15:59:18] [PASSED] drm_test_rect_clip_scaled_clipped
[15:59:18] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[15:59:18] ================= drm_test_rect_intersect  =================
[15:59:18] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[15:59:18] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[15:59:18] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[15:59:18] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[15:59:18] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[15:59:18] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[15:59:18] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[15:59:18] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[15:59:18] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[15:59:18] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[15:59:18] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[15:59:18] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[15:59:18] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[15:59:18] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[15:59:18] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[15:59:18] ============= [PASSED] drm_test_rect_intersect =============
[15:59:18] ================ drm_test_rect_calc_hscale  ================
[15:59:18] [PASSED] normal use
[15:59:18] [PASSED] out of max range
[15:59:18] [PASSED] out of min range
[15:59:18] [PASSED] zero dst
[15:59:18] [PASSED] negative src
[15:59:18] [PASSED] negative dst
[15:59:18] ============ [PASSED] drm_test_rect_calc_hscale ============
[15:59:18] ================ drm_test_rect_calc_vscale  ================
[15:59:18] [PASSED] normal use
[15:59:18] [PASSED] out of max range
[15:59:18] [PASSED] out of min range
[15:59:18] [PASSED] zero dst
[15:59:18] [PASSED] negative src
[15:59:18] [PASSED] negative dst
[15:59:18] ============ [PASSED] drm_test_rect_calc_vscale ============
[15:59:18] ================== drm_test_rect_rotate  ===================
[15:59:18] [PASSED] reflect-x
[15:59:18] [PASSED] reflect-y
[15:59:18] [PASSED] rotate-0
[15:59:18] [PASSED] rotate-90
[15:59:18] [PASSED] rotate-180
[15:59:18] [PASSED] rotate-270
[15:59:18] ============== [PASSED] drm_test_rect_rotate ===============
[15:59:18] ================ drm_test_rect_rotate_inv  =================
[15:59:18] [PASSED] reflect-x
[15:59:18] [PASSED] reflect-y
[15:59:18] [PASSED] rotate-0
[15:59:18] [PASSED] rotate-90
[15:59:18] [PASSED] rotate-180
[15:59:18] [PASSED] rotate-270
[15:59:18] ============ [PASSED] drm_test_rect_rotate_inv =============
[15:59:18] ==================== [PASSED] drm_rect =====================
[15:59:18] ============ drm_sysfb_modeset_test (1 subtest) ============
[15:59:18] ============ drm_test_sysfb_build_fourcc_list  =============
[15:59:18] [PASSED] no native formats
[15:59:18] [PASSED] XRGB8888 as native format
[15:59:18] [PASSED] remove duplicates
[15:59:18] [PASSED] convert alpha formats
[15:59:18] [PASSED] random formats
[15:59:18] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[15:59:18] ============= [PASSED] drm_sysfb_modeset_test ==============
[15:59:18] ================== drm_fixp (2 subtests) ===================
[15:59:18] [PASSED] drm_test_int2fixp
[15:59:18] [PASSED] drm_test_sm2fixp
[15:59:18] ==================== [PASSED] drm_fixp =====================
[15:59:18] ============================================================
[15:59:18] Testing complete. Ran 639 tests: passed: 639
[15:59:18] Elapsed time: 26.179s total, 1.752s configuring, 24.261s building, 0.145s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[15:59:19] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[15:59:20] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[15:59:30] Starting KUnit Kernel (1/1)...
[15:59:30] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[15:59:30] ================= ttm_device (5 subtests) ==================
[15:59:30] [PASSED] ttm_device_init_basic
[15:59:30] [PASSED] ttm_device_init_multiple
[15:59:30] [PASSED] ttm_device_fini_basic
[15:59:30] [PASSED] ttm_device_init_no_vma_man
[15:59:30] ================== ttm_device_init_pools  ==================
[15:59:30] [PASSED] No DMA allocations, no DMA32 required
[15:59:30] [PASSED] DMA allocations, DMA32 required
[15:59:30] [PASSED] No DMA allocations, DMA32 required
[15:59:30] [PASSED] DMA allocations, no DMA32 required
[15:59:30] ============== [PASSED] ttm_device_init_pools ==============
[15:59:30] =================== [PASSED] ttm_device ====================
[15:59:30] ================== ttm_pool (8 subtests) ===================
[15:59:30] ================== ttm_pool_alloc_basic  ===================
[15:59:30] [PASSED] One page
[15:59:30] [PASSED] More than one page
[15:59:30] [PASSED] Above the allocation limit
[15:59:30] [PASSED] One page, with coherent DMA mappings enabled
[15:59:30] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[15:59:30] ============== [PASSED] ttm_pool_alloc_basic ===============
[15:59:30] ============== ttm_pool_alloc_basic_dma_addr  ==============
[15:59:30] [PASSED] One page
[15:59:30] [PASSED] More than one page
[15:59:30] [PASSED] Above the allocation limit
[15:59:30] [PASSED] One page, with coherent DMA mappings enabled
[15:59:30] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[15:59:30] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[15:59:30] [PASSED] ttm_pool_alloc_order_caching_match
[15:59:30] [PASSED] ttm_pool_alloc_caching_mismatch
[15:59:30] [PASSED] ttm_pool_alloc_order_mismatch
[15:59:30] [PASSED] ttm_pool_free_dma_alloc
[15:59:30] [PASSED] ttm_pool_free_no_dma_alloc
[15:59:30] [PASSED] ttm_pool_fini_basic
[15:59:30] ==================== [PASSED] ttm_pool =====================
[15:59:30] ================ ttm_resource (8 subtests) =================
[15:59:30] ================= ttm_resource_init_basic  =================
[15:59:30] [PASSED] Init resource in TTM_PL_SYSTEM
[15:59:30] [PASSED] Init resource in TTM_PL_VRAM
[15:59:30] [PASSED] Init resource in a private placement
[15:59:30] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[15:59:30] ============= [PASSED] ttm_resource_init_basic =============
[15:59:30] [PASSED] ttm_resource_init_pinned
[15:59:30] [PASSED] ttm_resource_fini_basic
[15:59:30] [PASSED] ttm_resource_manager_init_basic
[15:59:30] [PASSED] ttm_resource_manager_usage_basic
[15:59:30] [PASSED] ttm_resource_manager_set_used_basic
[15:59:30] [PASSED] ttm_sys_man_alloc_basic
[15:59:30] [PASSED] ttm_sys_man_free_basic
[15:59:30] ================== [PASSED] ttm_resource ===================
[15:59:30] =================== ttm_tt (15 subtests) ===================
[15:59:30] ==================== ttm_tt_init_basic  ====================
[15:59:30] [PASSED] Page-aligned size
[15:59:30] [PASSED] Extra pages requested
[15:59:30] ================ [PASSED] ttm_tt_init_basic ================
[15:59:30] [PASSED] ttm_tt_init_misaligned
[15:59:30] [PASSED] ttm_tt_fini_basic
[15:59:30] [PASSED] ttm_tt_fini_sg
[15:59:30] [PASSED] ttm_tt_fini_shmem
[15:59:30] [PASSED] ttm_tt_create_basic
[15:59:30] [PASSED] ttm_tt_create_invalid_bo_type
[15:59:30] [PASSED] ttm_tt_create_ttm_exists
[15:59:30] [PASSED] ttm_tt_create_failed
[15:59:30] [PASSED] ttm_tt_destroy_basic
[15:59:30] [PASSED] ttm_tt_populate_null_ttm
[15:59:30] [PASSED] ttm_tt_populate_populated_ttm
[15:59:30] [PASSED] ttm_tt_unpopulate_basic
[15:59:30] [PASSED] ttm_tt_unpopulate_empty_ttm
[15:59:30] [PASSED] ttm_tt_swapin_basic
[15:59:30] ===================== [PASSED] ttm_tt ======================
[15:59:30] =================== ttm_bo (14 subtests) ===================
[15:59:30] =========== ttm_bo_reserve_optimistic_no_ticket  ===========
[15:59:30] [PASSED] Cannot be interrupted and sleeps
[15:59:30] [PASSED] Cannot be interrupted, locks straight away
[15:59:30] [PASSED] Can be interrupted, sleeps
[15:59:30] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[15:59:30] [PASSED] ttm_bo_reserve_locked_no_sleep
[15:59:30] [PASSED] ttm_bo_reserve_no_wait_ticket
[15:59:30] [PASSED] ttm_bo_reserve_double_resv
[15:59:30] [PASSED] ttm_bo_reserve_interrupted
[15:59:30] [PASSED] ttm_bo_reserve_deadlock
[15:59:30] [PASSED] ttm_bo_unreserve_basic
[15:59:30] [PASSED] ttm_bo_unreserve_pinned
[15:59:30] [PASSED] ttm_bo_unreserve_bulk
[15:59:30] [PASSED] ttm_bo_fini_basic
[15:59:30] [PASSED] ttm_bo_fini_shared_resv
[15:59:30] [PASSED] ttm_bo_pin_basic
[15:59:30] [PASSED] ttm_bo_pin_unpin_resource
[15:59:30] [PASSED] ttm_bo_multiple_pin_one_unpin
[15:59:30] ===================== [PASSED] ttm_bo ======================
[15:59:30] ============== ttm_bo_validate (22 subtests) ===============
[15:59:30] ============== ttm_bo_init_reserved_sys_man  ===============
[15:59:30] [PASSED] Buffer object for userspace
[15:59:30] [PASSED] Kernel buffer object
[15:59:30] [PASSED] Shared buffer object
[15:59:30] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[15:59:30] ============== ttm_bo_init_reserved_mock_man  ==============
[15:59:30] [PASSED] Buffer object for userspace
[15:59:30] [PASSED] Kernel buffer object
[15:59:30] [PASSED] Shared buffer object
[15:59:30] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[15:59:30] [PASSED] ttm_bo_init_reserved_resv
[15:59:30] ================== ttm_bo_validate_basic  ==================
[15:59:30] [PASSED] Buffer object for userspace
[15:59:30] [PASSED] Kernel buffer object
[15:59:30] [PASSED] Shared buffer object
[15:59:30] ============== [PASSED] ttm_bo_validate_basic ==============
[15:59:30] [PASSED] ttm_bo_validate_invalid_placement
[15:59:30] ============= ttm_bo_validate_same_placement  ==============
[15:59:30] [PASSED] System manager
[15:59:30] [PASSED] VRAM manager
[15:59:30] ========= [PASSED] ttm_bo_validate_same_placement ==========
[15:59:30] [PASSED] ttm_bo_validate_failed_alloc
[15:59:30] [PASSED] ttm_bo_validate_pinned
[15:59:30] [PASSED] ttm_bo_validate_busy_placement
[15:59:30] ================ ttm_bo_validate_multihop  =================
[15:59:30] [PASSED] Buffer object for userspace
[15:59:30] [PASSED] Kernel buffer object
[15:59:30] [PASSED] Shared buffer object
[15:59:30] ============ [PASSED] ttm_bo_validate_multihop =============
[15:59:30] ========== ttm_bo_validate_no_placement_signaled  ==========
[15:59:30] [PASSED] Buffer object in system domain, no page vector
[15:59:30] [PASSED] Buffer object in system domain with an existing page vector
[15:59:30] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[15:59:30] ======== ttm_bo_validate_no_placement_not_signaled  ========
[15:59:30] [PASSED] Buffer object for userspace
[15:59:30] [PASSED] Kernel buffer object
[15:59:30] [PASSED] Shared buffer object
[15:59:30] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[15:59:30] [PASSED] ttm_bo_validate_move_fence_signaled
[15:59:30] ========= ttm_bo_validate_move_fence_not_signaled  =========
[15:59:30] [PASSED] Waits for GPU
[15:59:30] [PASSED] Tries to lock straight away
[15:59:30] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[15:59:30] [PASSED] ttm_bo_validate_swapout
[15:59:30] [PASSED] ttm_bo_validate_happy_evict
[15:59:30] [PASSED] ttm_bo_validate_all_pinned_evict
[15:59:30] [PASSED] ttm_bo_validate_allowed_only_evict
[15:59:30] [PASSED] ttm_bo_validate_deleted_evict
[15:59:30] [PASSED] ttm_bo_validate_busy_domain_evict
[15:59:30] [PASSED] ttm_bo_validate_evict_gutting
[15:59:30] [PASSED] ttm_bo_validate_recrusive_evict
[15:59:30] ================= [PASSED] ttm_bo_validate =================
[15:59:30] ============================================================
[15:59:30] Testing complete. Ran 102 tests: passed: 102
[15:59:30] Elapsed time: 11.594s total, 1.777s configuring, 9.551s building, 0.226s running

+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



^ permalink raw reply	[flat|nested] 15+ messages in thread

* ✗ Xe.CI.BAT: failure for drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY (rev2)
  2026-06-22 10:34 [PATCH v2 0/4] drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY Jan Maslak
                   ` (5 preceding siblings ...)
  2026-06-22 15:59 ` ✓ CI.KUnit: success " Patchwork
@ 2026-06-22 16:55 ` Patchwork
  2026-06-22 19:27 ` ✗ Xe.CI.FULL: " Patchwork
  7 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-06-22 16:55 UTC (permalink / raw)
  To: Jan Maslak; +Cc: intel-xe

[-- Attachment #1: Type: text/plain, Size: 3073 bytes --]

== Series Details ==

Series: drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY (rev2)
URL   : https://patchwork.freedesktop.org/series/167675/
State : failure

== Summary ==

CI Bug Log - changes from xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798_BAT -> xe-pw-167675v2_BAT
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with xe-pw-167675v2_BAT absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in xe-pw-167675v2_BAT, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Participating hosts (11 -> 11)
------------------------------

  No changes in participating hosts

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in xe-pw-167675v2_BAT:

### IGT changes ###

#### Possible regressions ####

  * igt@xe_live_ktest@xe_migrate@xe_migrate_access_memory_kunit (NEW):
    - bat-adlp-7:         NOTRUN -> [SKIP][1]
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/bat-adlp-7/igt@xe_live_ktest@xe_migrate@xe_migrate_access_memory_kunit.html
    - bat-lnl-2:          NOTRUN -> [SKIP][2]
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/bat-lnl-2/igt@xe_live_ktest@xe_migrate@xe_migrate_access_memory_kunit.html
    - bat-wcl-2:          NOTRUN -> [SKIP][3]
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/bat-wcl-2/igt@xe_live_ktest@xe_migrate@xe_migrate_access_memory_kunit.html
    - bat-ptl-2:          NOTRUN -> [SKIP][4]
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/bat-ptl-2/igt@xe_live_ktest@xe_migrate@xe_migrate_access_memory_kunit.html
    - bat-wcl-1:          NOTRUN -> [SKIP][5]
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/bat-wcl-1/igt@xe_live_ktest@xe_migrate@xe_migrate_access_memory_kunit.html
    - bat-ptl-1:          NOTRUN -> [SKIP][6]
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/bat-ptl-1/igt@xe_live_ktest@xe_migrate@xe_migrate_access_memory_kunit.html
    - bat-lnl-1:          NOTRUN -> [SKIP][7]
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/bat-lnl-1/igt@xe_live_ktest@xe_migrate@xe_migrate_access_memory_kunit.html

  
New tests
---------

  New tests have been introduced between xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798_BAT and xe-pw-167675v2_BAT:

### New IGT tests (1) ###

  * igt@xe_live_ktest@xe_migrate@xe_migrate_access_memory_kunit:
    - Statuses : 3 pass(s) 7 skip(s)
    - Exec time: [0.08, 57.00] s

  



Build changes
-------------

  * Linux: xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798 -> xe-pw-167675v2

  IGT_8976: 8976
  xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798: 6583dd200482a34bb17e5dc54551f91f53b79798
  xe-pw-167675v2: 167675v2

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/index.html

[-- Attachment #2: Type: text/html, Size: 3729 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* ✗ Xe.CI.FULL: failure for drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY (rev2)
  2026-06-22 10:34 [PATCH v2 0/4] drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY Jan Maslak
                   ` (6 preceding siblings ...)
  2026-06-22 16:55 ` ✗ Xe.CI.BAT: failure " Patchwork
@ 2026-06-22 19:27 ` Patchwork
  7 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-06-22 19:27 UTC (permalink / raw)
  To: Jan Maslak; +Cc: intel-xe

[-- Attachment #1: Type: text/plain, Size: 15613 bytes --]

== Series Details ==

Series: drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY (rev2)
URL   : https://patchwork.freedesktop.org/series/167675/
State : failure

== Summary ==

CI Bug Log - changes from xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798_FULL -> xe-pw-167675v2_FULL
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with xe-pw-167675v2_FULL absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in xe-pw-167675v2_FULL, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Participating hosts (2 -> 2)
------------------------------

  No changes in participating hosts

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in xe-pw-167675v2_FULL:

### IGT changes ###

#### Possible regressions ####

  * igt@xe_live_ktest@xe_migrate@xe_migrate_access_memory_kunit (NEW):
    - shard-lnl:          NOTRUN -> [SKIP][1]
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-lnl-8/igt@xe_live_ktest@xe_migrate@xe_migrate_access_memory_kunit.html

  
New tests
---------

  New tests have been introduced between xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798_FULL and xe-pw-167675v2_FULL:

### New IGT tests (1) ###

  * igt@xe_live_ktest@xe_migrate@xe_migrate_access_memory_kunit:
    - Statuses : 1 pass(s) 1 skip(s)
    - Exec time: [0.07, 0.08] s

  

Known issues
------------

  Here are the changes found in xe-pw-167675v2_FULL that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@kms_big_fb@yf-tiled-32bpp-rotate-0:
    - shard-bmg:          NOTRUN -> [SKIP][2] ([Intel XE#1124]) +1 other test skip
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@kms_big_fb@yf-tiled-32bpp-rotate-0.html

  * igt@kms_bw@linear-tiling-4-displays-target-1920x1080p:
    - shard-bmg:          NOTRUN -> [SKIP][3] ([Intel XE#367])
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@kms_bw@linear-tiling-4-displays-target-1920x1080p.html

  * igt@kms_ccs@random-ccs-data-y-tiled-gen12-rc-ccs-cc:
    - shard-bmg:          NOTRUN -> [SKIP][4] ([Intel XE#2887]) +1 other test skip
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@kms_ccs@random-ccs-data-y-tiled-gen12-rc-ccs-cc.html

  * igt@kms_chamelium_color@ctm-blue-to-red:
    - shard-bmg:          NOTRUN -> [SKIP][5] ([Intel XE#2325] / [Intel XE#7358])
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@kms_chamelium_color@ctm-blue-to-red.html

  * igt@kms_chamelium_hpd@dp-hpd-for-each-pipe:
    - shard-bmg:          NOTRUN -> [SKIP][6] ([Intel XE#2252]) +1 other test skip
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@kms_chamelium_hpd@dp-hpd-for-each-pipe.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size:
    - shard-bmg:          [PASS][7] -> [INCOMPLETE][8] ([Intel XE#8151])
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798/shard-bmg-2/igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size.html
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-3/igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size.html

  * igt@kms_cursor_legacy@flip-vs-cursor-legacy:
    - shard-bmg:          [PASS][9] -> [FAIL][10] ([Intel XE#7571])
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798/shard-bmg-1/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-8/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions:
    - shard-bmg:          NOTRUN -> [SKIP][11] ([Intel XE#2286] / [Intel XE#6035])
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html

  * igt@kms_dsc@dsc-basic-ultrajoiner:
    - shard-bmg:          NOTRUN -> [SKIP][12] ([Intel XE#8265]) +1 other test skip
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@kms_dsc@dsc-basic-ultrajoiner.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1:
    - shard-lnl:          [PASS][13] -> [FAIL][14] ([Intel XE#301])
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1:
    - shard-lnl:          [PASS][15] -> [FAIL][16] ([Intel XE#301] / [Intel XE#3149])
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html

  * igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][17] ([Intel XE#2311]) +11 other tests skip
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-rte:
    - shard-bmg:          NOTRUN -> [SKIP][18] ([Intel XE#4141]) +2 other tests skip
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@kms_frontbuffer_tracking@fbc-2p-rte.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-argb161616f-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][19] ([Intel XE#7061])
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@kms_frontbuffer_tracking@fbcpsrhdr-argb161616f-draw-blt.html

  * igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-cur-indfb-draw-mmap-wc:
    - shard-bmg:          NOTRUN -> [SKIP][20] ([Intel XE#2313]) +5 other tests skip
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@kms_frontbuffer_tracking@psrhdr-2p-primscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_hdr@static-toggle-dpms@pipe-a-hdmi-a-3-xrgb2101010:
    - shard-bmg:          [PASS][21] -> [SKIP][22] ([Intel XE#7915]) +1 other test skip
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798/shard-bmg-1/igt@kms_hdr@static-toggle-dpms@pipe-a-hdmi-a-3-xrgb2101010.html
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-8/igt@kms_hdr@static-toggle-dpms@pipe-a-hdmi-a-3-xrgb2101010.html

  * igt@kms_psr@fbc-psr2-cursor-plane-move:
    - shard-bmg:          NOTRUN -> [SKIP][23] ([Intel XE#2234] / [Intel XE#2850])
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@kms_psr@fbc-psr2-cursor-plane-move.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-0:
    - shard-bmg:          NOTRUN -> [SKIP][24] ([Intel XE#2330] / [Intel XE#5813])
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@kms_rotation_crc@primary-y-tiled-reflect-x-0.html

  * igt@kms_sharpness_filter@filter-basic:
    - shard-bmg:          NOTRUN -> [SKIP][25] ([Intel XE#6503])
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@kms_sharpness_filter@filter-basic.html

  * igt@kms_vrr@seamless-rr-switch-vrr:
    - shard-bmg:          NOTRUN -> [SKIP][26] ([Intel XE#1499])
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@kms_vrr@seamless-rr-switch-vrr.html

  * igt@xe_evict@evict-mixed-many-threads-small:
    - shard-bmg:          [PASS][27] -> [INCOMPLETE][28] ([Intel XE#6321] / [Intel XE#8355])
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798/shard-bmg-3/igt@xe_evict@evict-mixed-many-threads-small.html
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-5/igt@xe_evict@evict-mixed-many-threads-small.html

  * igt@xe_exec_basic@multigpu-many-execqueues-many-vm-null-defer-bind:
    - shard-bmg:          NOTRUN -> [SKIP][29] ([Intel XE#2322] / [Intel XE#7372]) +1 other test skip
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-null-defer-bind.html

  * igt@xe_exec_fault_mode@once-multi-queue-userptr:
    - shard-bmg:          NOTRUN -> [SKIP][30] ([Intel XE#8374])
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@xe_exec_fault_mode@once-multi-queue-userptr.html

  * igt@xe_exec_multi_queue@many-queues-priority-smem:
    - shard-bmg:          NOTRUN -> [SKIP][31] ([Intel XE#8364]) +3 other tests skip
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@xe_exec_multi_queue@many-queues-priority-smem.html

  * igt@xe_exec_threads@threads-multi-queue-cm-shared-vm-userptr-rebind:
    - shard-bmg:          NOTRUN -> [SKIP][32] ([Intel XE#8378]) +1 other test skip
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-4/igt@xe_exec_threads@threads-multi-queue-cm-shared-vm-userptr-rebind.html

  * igt@xe_wedged@wedged-mode-toggle:
    - shard-lnl:          [PASS][33] -> [ABORT][34] ([Intel XE#8007])
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798/shard-lnl-5/igt@xe_wedged@wedged-mode-toggle.html
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-lnl-5/igt@xe_wedged@wedged-mode-toggle.html

  
#### Possible fixes ####

  * igt@kms_flip@flip-vs-expired-vblank@b-edp1:
    - shard-lnl:          [FAIL][35] ([Intel XE#301]) -> [PASS][36] +1 other test pass
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html

  * igt@kms_hdr@static-toggle@pipe-a-hdmi-a-3-xrgb16161616f:
    - shard-bmg:          [SKIP][37] ([Intel XE#7915]) -> [PASS][38] +3 other tests pass
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798/shard-bmg-2/igt@kms_hdr@static-toggle@pipe-a-hdmi-a-3-xrgb16161616f.html
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-3/igt@kms_hdr@static-toggle@pipe-a-hdmi-a-3-xrgb16161616f.html

  
#### Warnings ####

  * igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions:
    - shard-lnl:          [SKIP][39] ([Intel XE#309] / [Intel XE#7343]) -> [SKIP][40] ([Intel XE#309] / [Intel XE#7343] / [Intel XE#7935])
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798/shard-lnl-4/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-lnl-8/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible:
    - shard-lnl:          [FAIL][41] ([Intel XE#301]) -> [FAIL][42] ([Intel XE#301] / [Intel XE#3149])
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank-interruptible.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-bmg:          [SKIP][43] ([Intel XE#2426] / [Intel XE#5848]) -> [SKIP][44] ([Intel XE#2509] / [Intel XE#7437])
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798/shard-bmg-9/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/shard-bmg-10/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
  [Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
  [Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
  [Intel XE#2286]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2286
  [Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
  [Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
  [Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
  [Intel XE#2330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2330
  [Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
  [Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
  [Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
  [Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
  [Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
  [Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
  [Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
  [Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
  [Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
  [Intel XE#5813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5813
  [Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
  [Intel XE#6035]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6035
  [Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
  [Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
  [Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
  [Intel XE#7343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7343
  [Intel XE#7358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7358
  [Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
  [Intel XE#7437]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7437
  [Intel XE#7571]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7571
  [Intel XE#7915]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7915
  [Intel XE#7935]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7935
  [Intel XE#8007]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8007
  [Intel XE#8151]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8151
  [Intel XE#8265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8265
  [Intel XE#8355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8355
  [Intel XE#8364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8364
  [Intel XE#8374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8374
  [Intel XE#8378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8378


Build changes
-------------

  * Linux: xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798 -> xe-pw-167675v2

  IGT_8976: 8976
  xe-5286-6583dd200482a34bb17e5dc54551f91f53b79798: 6583dd200482a34bb17e5dc54551f91f53b79798
  xe-pw-167675v2: 167675v2

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167675v2/index.html

[-- Attachment #2: Type: text/html, Size: 17424 bytes --]

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 1/4] drm/xe/xe_migrate: Align MEM_COPY pitch with destination address
  2026-06-22 10:34 ` [PATCH v2 1/4] drm/xe/xe_migrate: Align MEM_COPY pitch with destination address Jan Maslak
@ 2026-08-17 16:39   ` Matthew Auld
  2026-08-31 19:10     ` Jan Maslak
  2026-09-07 13:59   ` Matthew Auld
  1 sibling, 1 reply; 15+ messages in thread
From: Matthew Auld @ 2026-08-17 16:39 UTC (permalink / raw)
  To: Jan Maslak, intel-xe
  Cc: matthew.brost, thomas.hellstrom, rodrigo.vivi,
	Christoph Manszewski

On 22/06/2026 11:34, Jan Maslak wrote:
> From: Christoph Manszewski <christoph.manszewski@intel.com>
> 
> MEM_COPY_CMD can corrupt memory when MATRIX_COPY mode uses a pitch that
> is not aligned to the destination address.
> 
> Fix this by incorporating the destination address into the pitch
> selection so the chosen pitch is aligned to both the copy length and the
> destination address.

Should we play it safe and apply this to the src addr also, even if it 
appears to work without? The spec doesn't explicitly state that the dst 
needed this special treatment, but if it does then I would think src 
would be the same?

> 
> Signed-off-by: Christoph Manszewski <christoph.manszewski@intel.com>
> Signed-off-by: Jan Maslak <jan.maslak@intel.com>
> ---
>   drivers/gpu/drm/xe/xe_migrate.c | 29 +++++++++++++++++------------
>   1 file changed, 17 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
> index 9428dd5e7760..9218eba31d45 100644
> --- a/drivers/gpu/drm/xe/xe_migrate.c
> +++ b/drivers/gpu/drm/xe/xe_migrate.c
> @@ -2186,17 +2186,18 @@ static bool xe_migrate_vram_use_pde(struct drm_pagemap_addr *sram_addr,
>   #define XE_CACHELINE_BYTES	64ull
>   #define XE_CACHELINE_MASK	(XE_CACHELINE_BYTES - 1)
>   
> -static u32 xe_migrate_copy_pitch(struct xe_device *xe, u32 len)
> +static u32 xe_migrate_copy_pitch(struct xe_device *xe, u32 len, u64 dst_addr)
>   {
> +	u64 align_check = len | dst_addr;
>   	u32 pitch;
>   
> -	if (IS_ALIGNED(len, PAGE_SIZE))
> +	if (IS_ALIGNED(align_check, PAGE_SIZE))
>   		pitch = PAGE_SIZE;
> -	else if (IS_ALIGNED(len, SZ_4K))
> +	else if (IS_ALIGNED(align_check, SZ_4K))
>   		pitch = SZ_4K;
> -	else if (IS_ALIGNED(len, SZ_256))
> +	else if (IS_ALIGNED(align_check, SZ_256))
>   		pitch = SZ_256;
> -	else if (IS_ALIGNED(len, 4))
> +	else if (IS_ALIGNED(align_check, 4))
>   		pitch = 4;
>   	else
>   		pitch = 1;
> @@ -2223,16 +2224,11 @@ static struct dma_fence *xe_migrate_vram(struct xe_migrate *m,
>   	struct xe_bb *bb;
>   	u32 update_idx, pt_slot = 0;
>   	unsigned long npages = DIV_ROUND_UP(len + sram_offset, PAGE_SIZE);
> -	unsigned int pitch = xe_migrate_copy_pitch(xe, len);
> +	unsigned int pitch;
>   	int err;
>   	unsigned long i, j;
>   	bool use_pde = xe_migrate_vram_use_pde(sram_addr, len + sram_offset);
>   
> -	if (!xe->info.has_mem_copy_instr &&
> -	    drm_WARN_ON(&xe->drm,
> -			(!IS_ALIGNED(len, pitch)) || (sram_offset | vram_addr) & XE_CACHELINE_MASK))
> -		return ERR_PTR(-EOPNOTSUPP);
> -
>   	xe_assert(xe, npages * PAGE_SIZE <= MAX_PREEMPTDISABLE_TRANSFER);
>   
>   	batch_size += pte_update_cmd_size(npages << PAGE_SHIFT);
> @@ -2284,6 +2280,13 @@ static struct dma_fence *xe_migrate_vram(struct xe_migrate *m,
>   			dst_L0_ofs = xe_migrate_vm_addr(pt_slot, 0) + sram_offset;
>   	}
>   
> +	pitch = xe_migrate_copy_pitch(xe, len, dst_L0_ofs);
> +	if (!xe->info.has_mem_copy_instr &&
> +	    drm_WARN_ON(&xe->drm,
> +			(!IS_ALIGNED(len, pitch)) ||
> +			(sram_offset | vram_addr) & XE_CACHELINE_MASK))
> +		return ERR_PTR(-EOPNOTSUPP);
> +
>   	bb->cs[bb->len++] = MI_BATCH_BUFFER_END;
>   	update_idx = bb->len;
>   
> @@ -2536,7 +2539,9 @@ int xe_migrate_access_memory(struct xe_migrate *m, struct xe_bo *bo,
>   		else
>   			current_bytes = min_t(int, bytes_left, cursor.size);
>   
> -		pitch = xe_migrate_copy_pitch(xe, current_bytes);
> +		pitch = xe_migrate_copy_pitch(xe, current_bytes,
> +					      write ? vram_addr :
> +					      (unsigned long)buf & ~PAGE_MASK);
>   		if (xe->info.has_mem_copy_instr)
>   			current_bytes = min_t(int, current_bytes, U16_MAX * pitch);
>   		else


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 1/4] drm/xe/xe_migrate: Align MEM_COPY pitch with destination address
  2026-08-17 16:39   ` Matthew Auld
@ 2026-08-31 19:10     ` Jan Maslak
  0 siblings, 0 replies; 15+ messages in thread
From: Jan Maslak @ 2026-08-31 19:10 UTC (permalink / raw)
  To: Matthew Auld
  Cc: intel-xe, matthew.brost, thomas.hellstrom, rodrigo.vivi,
	Christoph Manszewski

On Mon, Aug 17, 2026 at 05:39:29PM +0100, Matthew Auld wrote:
> On 22/06/2026 11:34, Jan Maslak wrote:
> > From: Christoph Manszewski <christoph.manszewski@intel.com>
> > 
> > MEM_COPY_CMD can corrupt memory when MATRIX_COPY mode uses a pitch that
> > is not aligned to the destination address.
> > 
> > Fix this by incorporating the destination address into the pitch
> > selection so the chosen pitch is aligned to both the copy length and the
> > destination address.
> 
> Should we play it safe and apply this to the src addr also, even if it
> appears to work without? The spec doesn't explicitly state that the dst
> needed this special treatment, but if it does then I would think src would
> be the same?
 
I characterized MEM_COPY across many configurations, including cases where
only the source address was misaligned. Source-address alignment did not
appear to affect the behavior: the corruption required a sufficiently tall
matrix copy and a destination address not aligned to the pitch.
Unfortunately, the specification does not document this restriction.

Since including the source address could unnecessarily reduce the selected
pitch, I'd prefer to keep the workaround limited to the condition we
observed, unless you see another reason to handle both.


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 4/4] drm/xe/tests: Add xe_migrate_access_memory subtest
  2026-06-22 10:34 ` [PATCH v2 4/4] drm/xe/tests: Add xe_migrate_access_memory subtest Jan Maslak
@ 2026-09-04 12:14   ` Matthew Auld
  0 siblings, 0 replies; 15+ messages in thread
From: Matthew Auld @ 2026-09-04 12:14 UTC (permalink / raw)
  To: Jan Maslak, intel-xe
  Cc: matthew.brost, thomas.hellstrom, rodrigo.vivi,
	Christoph Manszewski

On 22/06/2026 11:34, Jan Maslak wrote:
> From: Christoph Manszewski <christoph.manszewski@intel.com>
> 
> Add a new xe_migrate subtest for vram to sram migration works:
>   - when the dst address is not 4-byte aligned
>   - when the dst address in not 4-byte aligned but the migration size is
>   - when src BO offset is not 4-byte aligned
> 
> Signed-off-by: Christoph Manszewski <christoph.manszewski@intel.com>
> Signed-off-by: Jan Maslak <jan.maslak@intel.com>

Reviewed-by: Matthew Auld <matthew.auld@intel.com>


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 1/4] drm/xe/xe_migrate: Align MEM_COPY pitch with destination address
  2026-06-22 10:34 ` [PATCH v2 1/4] drm/xe/xe_migrate: Align MEM_COPY pitch with destination address Jan Maslak
  2026-08-17 16:39   ` Matthew Auld
@ 2026-09-07 13:59   ` Matthew Auld
  1 sibling, 0 replies; 15+ messages in thread
From: Matthew Auld @ 2026-09-07 13:59 UTC (permalink / raw)
  To: Jan Maslak, intel-xe
  Cc: matthew.brost, thomas.hellstrom, rodrigo.vivi,
	Christoph Manszewski

On 22/06/2026 11:34, Jan Maslak wrote:
> From: Christoph Manszewski <christoph.manszewski@intel.com>
> 
> MEM_COPY_CMD can corrupt memory when MATRIX_COPY mode uses a pitch that
> is not aligned to the destination address.
> 
> Fix this by incorporating the destination address into the pitch
> selection so the chosen pitch is aligned to both the copy length and the
> destination address.
> 
> Signed-off-by: Christoph Manszewski <christoph.manszewski@intel.com>
> Signed-off-by: Jan Maslak <jan.maslak@intel.com>

Reviewed-by: Matthew Auld <matthew.auld@intel.com>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 2/4] drm/xe/xe_migrate: Fix page tracking in access_memory
  2026-06-22 10:34 ` [PATCH v2 2/4] drm/xe/xe_migrate: Fix page tracking in access_memory Jan Maslak
@ 2026-09-07 16:19   ` Matthew Auld
  0 siblings, 0 replies; 15+ messages in thread
From: Matthew Auld @ 2026-09-07 16:19 UTC (permalink / raw)
  To: Jan Maslak, intel-xe
  Cc: matthew.brost, thomas.hellstrom, rodrigo.vivi,
	Christoph Manszewski

On 22/06/2026 11:34, Jan Maslak wrote:
> From: Christoph Manszewski <christoph.manszewski@intel.com>
> 
> xe_migrate_access_memory() advances the pagemap cursor based on the
> current page in the CPU buffer.
> 
> Include the initial page offset when recalculating current_page so
> subsequent iterations continue to index the mapped pages correctly.
> 
> Signed-off-by: Christoph Manszewski <christoph.manszewski@intel.com>
> Signed-off-by: Jan Maslak <jan.maslak@intel.com>

Reviewed-by: Matthew Auld <matthew.auld@intel.com>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH v2 3/4] drm/xe/xe_migrate: Optimize unaligned access_memory copies
  2026-06-22 10:34 ` [PATCH v2 3/4] drm/xe/xe_migrate: Optimize unaligned access_memory copies Jan Maslak
@ 2026-09-08 10:39   ` Matthew Auld
  0 siblings, 0 replies; 15+ messages in thread
From: Matthew Auld @ 2026-09-08 10:39 UTC (permalink / raw)
  To: Jan Maslak, intel-xe
  Cc: matthew.brost, thomas.hellstrom, rodrigo.vivi,
	Christoph Manszewski

On 22/06/2026 11:34, Jan Maslak wrote:
> From: Christoph Manszewski <christoph.manszewski@intel.com>
> 
> When xe_migrate_access_memory() falls back to a smaller pitch for an
> unaligned destination, the copy can end up running linearly for the
> entire transfer.
> 
> Reduce the number of copy jobs by first using a short linear copy to
> reach a better destination alignment, then using the largest matrix copy
> pitch that alignment supports, and finally using a linear copy for any
> remaining tail bytes.
> 
> Signed-off-by: Christoph Manszewski <christoph.manszewski@intel.com>
> Signed-off-by: Jan Maslak <jan.maslak@intel.com>
> ---
>   drivers/gpu/drm/xe/xe_migrate.c | 148 ++++++++++++++++++++++++++++++--
>   1 file changed, 139 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
> index 135d59f6e100..f5aa4a0dd6c4 100644
> --- a/drivers/gpu/drm/xe/xe_migrate.c
> +++ b/drivers/gpu/drm/xe/xe_migrate.c
> @@ -2206,6 +2206,86 @@ static u32 xe_migrate_copy_pitch(struct xe_device *xe, u32 len, u64 dst_addr)
>   	return pitch;
>   }
>   
> +/**
> + * xe_migrate_dst_pitch() - Determine max pitch supported by dst alignment
> + * @dst_addr: Destination address (page offset)
> + *
> + * Returns the largest pitch (PAGE_SIZE, SZ_4K, SZ_256, or 4) that dst_addr
> + * supports based solely on its alignment. Returns 1 if not even 4-byte aligned.
> + */
> +static u32 xe_migrate_dst_pitch(u64 dst_addr)
> +{
> +	if (IS_ALIGNED(dst_addr, PAGE_SIZE))
> +		return PAGE_SIZE;
> +	if (IS_ALIGNED(dst_addr, SZ_4K))
> +		return SZ_4K;
> +	if (IS_ALIGNED(dst_addr, SZ_256))
> +		return SZ_256;
> +	if (IS_ALIGNED(dst_addr, 4))
> +		return 4;
> +	return 1;
> +}
> +
> +/**
> + * xe_migrate_best_alignment() - Find the best alignment reachable within max_bytes
> + * @dst_addr: Current destination address
> + * @max_bytes: Maximum bytes we can copy to reach alignment (typically U16_MAX)
> + *
> + * Returns the largest alignment (PAGE_SIZE, SZ_4K, SZ_256, or 4) that dst_addr
> + * can reach by copying at most max_bytes. Returns 0 if already at best alignment
> + * or if no useful alignment can be reached.
> + */
> +static u32 xe_migrate_best_alignment(u64 dst_addr, u32 max_bytes)
> +{
> +	u32 bytes_to_page = round_up(dst_addr, PAGE_SIZE) - dst_addr;
> +	u32 bytes_to_4k = round_up(dst_addr, SZ_4K) - dst_addr;
> +	u32 bytes_to_256 = round_up(dst_addr, SZ_256) - dst_addr;
> +	u32 bytes_to_4 = round_up(dst_addr, 4) - dst_addr;

I guess we could use the xe_migrate_bytes_to_align() helper here?

> +
> +	if (bytes_to_page == 0)
> +		return 0;
> +
> +	if (bytes_to_page <= max_bytes)
> +		return PAGE_SIZE;
> +
> +	if (bytes_to_4k > 0 && bytes_to_4k <= max_bytes)
> +		return SZ_4K;
> +
> +	if (bytes_to_256 > 0 && bytes_to_256 <= max_bytes)
> +		return SZ_256;
> +
> +	if (bytes_to_4 > 0 && bytes_to_4 <= max_bytes)
> +		return 4;
> +
> +	return 0;
> +}
> +
> +/**
> + * xe_migrate_bytes_to_align() - Calculate bytes needed to reach target alignment
> + * @dst_addr: Current destination address
> + * @alignment: Target alignment (PAGE_SIZE, SZ_4K, SZ_256, or 4)
> + *
> + * Returns: Number of bytes to copy to reach the target alignment.
> + */
> +static u32 xe_migrate_bytes_to_align(u64 dst_addr, u32 alignment)
> +{
> +	return round_up(dst_addr, alignment) - dst_addr;
> +}
> +
> +/**
> + * xe_migrate_aligned_copy_len() - Calculate the aligned copy length for matrix copy
> + * @len: Remaining bytes
> + * @pitch: The pitch to use for matrix copy
> + *
> + * Returns: Length rounded down to pitch, or 0 if less than pitch.
> + */
> +static u32 xe_migrate_aligned_copy_len(u32 len, u32 pitch)
> +{
> +	if (len < pitch)
> +		return 0;
> +	return round_down(len, pitch);
> +}
> +
>   static struct dma_fence *xe_migrate_vram(struct xe_migrate *m,
>   					 unsigned long len,
>   					 unsigned long sram_offset,
> @@ -2539,15 +2619,65 @@ int xe_migrate_access_memory(struct xe_migrate *m, struct xe_bo *bo,
>   		else
>   			current_bytes = min_t(int, bytes_left, cursor.size);
>   
> -		pitch = xe_migrate_copy_pitch(xe, current_bytes,
> -					      write ? vram_addr :
> -					      (unsigned long)buf & ~PAGE_MASK);
> -		if (xe->info.has_mem_copy_instr)
> -			current_bytes = min_t(int, current_bytes, U16_MAX * pitch);
> -		else
> -			current_bytes = min_t(int, current_bytes,
> -					      round_down(S16_MAX * pitch,
> -							 XE_CACHELINE_BYTES));
> +		{
> +			/*
> +			 * Optimized copy strategy to minimize number of jobs:
> +			 * 1. Linear copy to align dst to best reachable alignment
> +			 * 2. Matrix copy for bulk data copy
> +			 * 3. Single linear copy for remaining bytes
> +			 */

Could maybe add a note here, that for platforms without 
has_mem_copy_instr, this just falls through to fast_copy without the 
different phases?

Reviewed-by: Matthew Auld <matthew.auld@intel.com>

> +			u64 dst_addr = write ? vram_addr :
> +					       (unsigned long)buf & ~PAGE_MASK;
> +			u32 max_linear = xe->info.has_mem_copy_instr ? U16_MAX :
> +					 round_down(S16_MAX, XE_CACHELINE_BYTES);
> +			u32 best_align = xe_migrate_best_alignment(dst_addr, max_linear);
> +			u32 bytes_to_align = best_align ?
> +					     xe_migrate_bytes_to_align(dst_addr, best_align) : 0;
> +
> +			if (bytes_to_align > 0 && bytes_to_align <= (u32)current_bytes) {
> +				/*
> +				 * Phase 1: Linear copy to reach best alignment.
> +				 * Copy just enough bytes to align dst_addr.
> +				 */
> +				pitch = 1;
> +				current_bytes = min_t(int, bytes_to_align, max_linear);
> +			} else if (IS_ALIGNED(dst_addr, 4)) {
> +				/*
> +				 * Phase 2: Matrix copy for aligned bulk data.
> +				 * Use the best pitch that dst alignment supports,
> +				 * then round down len to that pitch.
> +				 */
> +				u32 dst_pitch = xe_migrate_dst_pitch(dst_addr);
> +				u32 aligned_len = xe_migrate_aligned_copy_len(current_bytes,
> +								      dst_pitch);
> +
> +				if (aligned_len >= dst_pitch) {
> +					pitch = dst_pitch;
> +					if (xe->info.has_mem_copy_instr) {
> +						current_bytes = min_t(int, aligned_len,
> +								      U16_MAX * pitch);
> +					} else {
> +						current_bytes = min_t(int, aligned_len,
> +								      round_down(S16_MAX * pitch,
> +										 XE_CACHELINE_BYTES));
> +					}
> +				} else {
> +					/*
> +					 * Phase 3: Linear copy for remainder.
> +					 * Not enough for matrix copy - do single linear copy.
> +					 */
> +					pitch = 1;
> +					current_bytes = min_t(int, current_bytes, max_linear);
> +				}
> +			} else {
> +				/*
> +				 * Phase 3: Linear copy for remainder.
> +				 * dst not 4-aligned and can't reach alignment - linear copy.
> +				 */
> +				pitch = 1;
> +				current_bytes = min_t(int, current_bytes, max_linear);
> +			}
> +		}
>   
>   		__fence = xe_migrate_vram(m, current_bytes,
>   					  (unsigned long)buf & ~PAGE_MASK,


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2026-09-08 10:39 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-22 10:34 [PATCH v2 0/4] drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY Jan Maslak
2026-06-22 10:34 ` [PATCH v2 1/4] drm/xe/xe_migrate: Align MEM_COPY pitch with destination address Jan Maslak
2026-08-17 16:39   ` Matthew Auld
2026-08-31 19:10     ` Jan Maslak
2026-09-07 13:59   ` Matthew Auld
2026-06-22 10:34 ` [PATCH v2 2/4] drm/xe/xe_migrate: Fix page tracking in access_memory Jan Maslak
2026-09-07 16:19   ` Matthew Auld
2026-06-22 10:34 ` [PATCH v2 3/4] drm/xe/xe_migrate: Optimize unaligned access_memory copies Jan Maslak
2026-09-08 10:39   ` Matthew Auld
2026-06-22 10:34 ` [PATCH v2 4/4] drm/xe/tests: Add xe_migrate_access_memory subtest Jan Maslak
2026-09-04 12:14   ` Matthew Auld
2026-06-22 15:58 ` ✗ CI.checkpatch: warning for drm/xe/xe_migrate: Fix memory corruption with unaligned dst in MEM_COPY (rev2) Patchwork
2026-06-22 15:59 ` ✓ CI.KUnit: success " Patchwork
2026-06-22 16:55 ` ✗ Xe.CI.BAT: failure " Patchwork
2026-06-22 19:27 ` ✗ Xe.CI.FULL: " Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.