Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH i-g-t v2] tests/intel/xe_bo_shrink: Add a user-space shrinker test
@ 2026-11-04 16:30 Thomas Hellström
  2026-11-04 17:23 ` ✓ Xe.CI.BAT: success for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev2) Patchwork
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: Thomas Hellström @ 2026-11-04 16:30 UTC (permalink / raw)
  To: igt-dev; +Cc: Thomas Hellström, Kamil Konieczny, Matthew Auld,
	Matthew Brost

Add a user-space counterpart of the xe_bo_shrink kunit test, now that
user-space can mark buffer objects purgeable using the madvise IOCTL.

The test creates 64 MiB system buffer objects corresponding to twice
the amount of free system memory, fills them with pseudo-random data
through CPU mappings that are kept alive until readback, and verifies
the contents after the overcommit has forced the shrinker to back up
or purge them. As in the kunit test, the share of the memory that
doesn't fit in free RAM and swap is marked purgeable (DONTNEED) and
allocated first. Purgeable objects are only verified if found retained
when marked WILLNEED again; purged objects are never accessed.

Subtests:
- shrink: The kunit test equivalent.
- purge: Ignore swap space when sizing the purgeable share, so that
  the shrinker needs to purge rather than swap.
- shrink-fault-inject: Enable TTM backup / restore fault injection
  through debugfs, if available, making the shrinker back up only part
  of the objects and making backup and restore of individual pages
  fail. The number of injected faults is checked to be non-zero,
  unless there was less than 1 GiB of free swap space at test start.
- *-blit: Never access the objects using the CPU. Instead fill them
  from, and read them back to, a CPU-mapped dummy object using MEM_COPY
  blits in a separate VM, so that they are restored through the GPU
  paths. On integrated devices with flat CCS, bind the objects using a
  compressed PAT index to cover shrinking of compressed system memory
  objects. On discrete devices, objects are created with system and VRAM
  placements, prefetched to system memory before the fill and prefetched
  to VRAM before the readback, so that they are restored by the
  migration to VRAM.
- *-private: Create the objects private to the test VM rather than as
  external objects.
- *-fast: Allocate at most the free system memory, half of it
  purgeable, capped to 8 GiB purgeable and 8 GiB non-purgeable, and
  shrink using drop_caches rather than memory overcommit.

The non-fast subtests are slow and require a substantial amount of
swap space for meaningful coverage, so block them in CI and run only
the fast subtests.

v2:
- Don't fail the fault-inject subtests if no faults were injected and
  there was less than XE_BO_SHRINK_FI_MIN_SWAP (1 GiB) free swap space
  at test start, since nothing is then backed up or restored
- Never access the blit variant bos using the CPU, not even for the
  fill. Fill them by blitting from the dummy bo instead
- Bind the blit variant bos using a compressed PAT index on integrated
  devices with flat CCS to test shrinking of compressed system memory
  bos (Matthew Auld)

Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Assisted-by: GitHub_Copilot:claude-opus-5.5
---
 tests/intel-ci/xe.blocklist.txt |   3 +-
 tests/intel/xe_bo_shrink.c      | 700 ++++++++++++++++++++++++++++++++
 tests/meson.build               |   1 +
 3 files changed, 703 insertions(+), 1 deletion(-)
 create mode 100644 tests/intel/xe_bo_shrink.c

diff --git a/tests/intel-ci/xe.blocklist.txt b/tests/intel-ci/xe.blocklist.txt
index c1dd3c7a8..ba589aac2 100644
--- a/tests/intel-ci/xe.blocklist.txt
+++ b/tests/intel-ci/xe.blocklist.txt
@@ -35,9 +35,10 @@ igt@gpu_buddy
 igt@drm_mm
 igt@kms_selftest.*
 ##################################################################
-# Exclude slow KUnit test which should run as manual test
+# Exclude slow shrinker tests which should run as manual tests
 ##################################################################
 igt@xe_live_ktest@xe_bo_shrink
+igt@xe_bo_shrink@(?!.*-fast$).*
 ##################################################################
 # Exclude all other non-Xe tests
 ##################################################################
diff --git a/tests/intel/xe_bo_shrink.c b/tests/intel/xe_bo_shrink.c
new file mode 100644
index 000000000..8b72f207a
--- /dev/null
+++ b/tests/intel/xe_bo_shrink.c
@@ -0,0 +1,700 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+/**
+ * TEST: Exercise the xe buffer object shrinker from user-space
+ * Category: Core
+ * Mega feature: General Core features
+ * Sub-category: Memory management tests
+ * Functionality: shrinker, swap, purgeable
+ *
+ * This is a user-space counterpart of the xe_bo_shrink kunit test.
+ * It creates system memory buffer objects corresponding to twice the
+ * amount of free system memory. All objects are filled with pseudo-random
+ * data through a CPU mapping that is kept alive until the data is verified
+ * after the overcommit. Purgeable objects are additionally marked DONTNEED
+ * using the madvise IOCTL so that the shrinker may discard their contents.
+ * Those are only verified if still retained when marked WILLNEED again.
+ *
+ * The blit variants never access the bos using the CPU. Instead each bo is
+ * bound to a separate VM and filled from, and read back to, a CPU-mapped
+ * dummy bo using the MEM_COPY blitter command, so that bos are restored by
+ * the GPU paths rather than by CPU faults, and the content of the dummy bo
+ * is verified. On integrated devices with flat CCS, the bos are bound using
+ * a compressed PAT index, so that compressed system memory bos, including
+ * their CCS metadata, are subject to shrinking and restore. On discrete
+ * devices, the blit variants create the bos with both system and VRAM
+ * placements and prefetch them to system memory before the fill. Before
+ * the readback copy, each bo is prefetched to VRAM, so that it is restored
+ * by the migration to VRAM.
+ *
+ * The private variants create the bos private to the test VM, sharing
+ * the VM's reservation object, rather than as external bos.
+ *
+ * The fast variants instead create bos corresponding to the amount of
+ * free system memory, half of them purgeable, capped to
+ * XE_BO_SHRINK_FAST_MAX purgeable and non-purgeable each, and shrink
+ * them by writing to /proc/sys/vm/drop_caches rather than relying on
+ * reclaim caused by memory overcommit.
+ */
+
+#include <sys/random.h>
+#include <sys/sysinfo.h>
+
+#include "igt.h"
+#include "igt_debugfs.h"
+#include "igt_rand.h"
+#include "igt_syncobj.h"
+#include "igt_sysfs.h"
+#include "intel_blt.h"
+#include "intel_mocs.h"
+#include "intel_pat.h"
+#include "xe_drm.h"
+
+#include "intel_reg.h"
+#include "xe/xe_ioctl.h"
+#include "xe/xe_query.h"
+
+#define XE_BO_SHRINK_SIZE	(64ull << 20)
+#define XE_BO_SHRINK_VA_BASE	(1ull << 32)
+/* Max purgeable and max non-purgeable memory, each, for fast variants. */
+#define XE_BO_SHRINK_FAST_MAX	(8ull << 30)
+/* Min free swap at test start for fault injection to be required. */
+#define XE_BO_SHRINK_FI_MIN_SWAP	(1ull << 30)
+
+#define BLIT_BATCH_ADDR		(1ull << 20)
+/* Offset of the readback copy batch, after the fill copy batch. */
+#define BLIT_READBACK_OFFSET	256
+#define BLIT_DUMMY_ADDR		(1ull << 32)
+#define BLIT_BO_ADDR		(2ull << 32)
+
+#define SHRINK_PURGE		(0x1 << 0)
+#define SHRINK_FAULT_INJECT	(0x1 << 1)
+#define SHRINK_BLIT		(0x1 << 2)
+#define SHRINK_FAST		(0x1 << 3)
+#define SHRINK_PRIVATE		(0x1 << 4)
+
+/**
+ * struct shrink_bo - A shrinker test bo
+ * @map: Persistent CPU mapping of the bo, kept from fill until readback,
+ * or NULL if the bo is filled and read back using blitter copies.
+ * @handle: GEM handle of the bo.
+ * @addr: GPU virtual address of the bo in the test VM, if @bound.
+ * @val: The first pseudo-random value written, used to detect a PRNG
+ * that is out of sync on readback.
+ * @purgeable: Whether the bo is marked DONTNEED and thus may be purged.
+ * @bound: Whether the bo is bound at @addr in the test VM.
+ */
+struct shrink_bo {
+	uint32_t *map;
+	uint32_t handle;
+	uint64_t addr;
+	uint32_t val;
+	bool purgeable;
+	bool bound;
+};
+
+/**
+ * struct shrink_blit - State for blitter fill and readback of bos
+ * @vm: A separate VM used for the copies.
+ * @exec_queue: Copy engine exec queue in @vm.
+ * @batch: Batch bo holding the fill and readback MEM_COPY commands.
+ * @dummy: Dummy bo in system memory, the source of the fill copies and
+ * the destination of the readback copies.
+ * @dummy_map: CPU mapping of @dummy, used to generate and verify content.
+ * @syncobj: Syncobj used to wait for binds of the bos.
+ * @pat_index: PAT index used to bind the bos, compressed if supported.
+ */
+struct shrink_blit {
+	uint32_t vm;
+	uint32_t exec_queue;
+	uint32_t batch;
+	uint32_t dummy;
+	uint32_t *dummy_map;
+	uint32_t syncobj;
+	uint8_t pat_index;
+};
+
+/**
+ * struct ttm_fault_inject - TTM backup / restore fault injection state
+ * @dir: Debugfs directory fd of the fault attributes, or -1 if not opened.
+ * @probability: Original probability, restored after the test.
+ * @interval: Original interval, restored after the test.
+ * @times: Original times, restored after the test.
+ * @verbose: Original verbosity, restored after the test.
+ * @task_filter: Original task-filter setting, restored after the test.
+ */
+static struct ttm_fault_inject {
+	int dir;
+	uint32_t probability;
+	uint32_t interval;
+	int32_t times;
+	uint32_t verbose;
+	bool task_filter;
+} ttm_fi = { .dir = -1 };
+
+static void ttm_fault_inject_restore(int sig)
+{
+	if (ttm_fi.dir < 0)
+		return;
+
+	__igt_sysfs_set_u32(ttm_fi.dir, "probability", ttm_fi.probability);
+	__igt_sysfs_set_u32(ttm_fi.dir, "interval", ttm_fi.interval);
+	__igt_sysfs_set_s32(ttm_fi.dir, "times", ttm_fi.times);
+	__igt_sysfs_set_u32(ttm_fi.dir, "verbose", ttm_fi.verbose);
+	__igt_sysfs_set_boolean(ttm_fi.dir, "task-filter", ttm_fi.task_filter);
+	close(ttm_fi.dir);
+	ttm_fi.dir = -1;
+}
+
+/*
+ * Enable the TTM backup_fault_inject attribute, which makes the shrinker
+ * back up only part of a bo, fails backup of individual folios and makes
+ * interruptible restores fail with -EINTR. Requires CONFIG_FAULT_INJECTION
+ * and CONFIG_FAULT_INJECTION_DEBUG_FS.
+ */
+static void ttm_fault_inject_enable(void)
+{
+	const char *debugfs_root = igt_debugfs_mount();
+	char path[PATH_MAX];
+
+	igt_require_f(debugfs_root, "debugfs not available\n");
+	snprintf(path, sizeof(path), "%s/ttm/backup_fault_inject", debugfs_root);
+	ttm_fi.dir = open(path, O_RDONLY | O_DIRECTORY);
+	igt_require_f(ttm_fi.dir >= 0,
+		      "TTM backup fault injection not available (%s)\n", path);
+
+	ttm_fi.probability = igt_sysfs_get_u32(ttm_fi.dir, "probability");
+	ttm_fi.interval = igt_sysfs_get_u32(ttm_fi.dir, "interval");
+	ttm_fi.times = igt_sysfs_get_s32(ttm_fi.dir, "times");
+	ttm_fi.verbose = igt_sysfs_get_u32(ttm_fi.dir, "verbose");
+	ttm_fi.task_filter = igt_sysfs_get_boolean(ttm_fi.dir, "task-filter");
+	igt_install_exit_handler(ttm_fault_inject_restore);
+
+	igt_sysfs_set_boolean(ttm_fi.dir, "task-filter", false);
+	igt_sysfs_set_u32(ttm_fi.dir, "verbose", 0);
+	igt_sysfs_set_u32(ttm_fi.dir, "interval", 1);
+	/* The kernel decrements times on each injection. */
+	igt_sysfs_set_s32(ttm_fi.dir, "times", INT32_MAX);
+	igt_sysfs_set_u32(ttm_fi.dir, "probability", 10);
+}
+
+static int32_t ttm_fault_inject_count(void)
+{
+	return INT32_MAX - igt_sysfs_get_s32(ttm_fi.dir, "times");
+}
+
+static bool xe_has_purgeable_support(int fd)
+{
+	struct drm_xe_query_config *config = xe_config(fd);
+
+	return config->info[DRM_XE_QUERY_CONFIG_FLAGS] &
+		DRM_XE_QUERY_CONFIG_FLAG_HAS_PURGING_SUPPORT;
+}
+
+/* Fill @map with pseudo-random data and return the first value. */
+static uint32_t shrink_fill_random(uint32_t *map, uint32_t *prng)
+{
+	size_t i;
+
+	for (i = 0; i < XE_BO_SHRINK_SIZE / sizeof(*map); i++)
+		map[i] = hars_petruska_f54_1_random(prng);
+
+	return map[0];
+}
+
+/*
+ * The CPU mapping is kept until shrink_verify(), so that the shrinker
+ * needs to zap the PTEs of a live mapping and readback restores the
+ * bo through that same mapping.
+ */
+static void shrink_fill_cpu(int fd, struct shrink_bo *bo, uint32_t *prng)
+{
+	bo->map = xe_bo_map(fd, bo->handle, XE_BO_SHRINK_SIZE);
+	bo->val = shrink_fill_random(bo->map, prng);
+}
+
+static void shrink_verify(const uint32_t *map, uint32_t first_val,
+			  unsigned int bo_nr, uint32_t *prng)
+{
+	size_t i;
+
+	for (i = 0; i < XE_BO_SHRINK_SIZE / sizeof(*map); i++) {
+		uint32_t val = hars_petruska_f54_1_random(prng);
+
+		igt_assert_f(map[i] == val,
+			     "Content not preserved, bo %u offset 0x%016zx. "
+			     "Failed value is 0x%08x, recorded 0x%08x.%s\n",
+			     bo_nr, i * sizeof(*map), map[i], val,
+			     (i == 0 && val != first_val) ?
+			     " Looks like PRNG is out of sync." : "");
+	}
+}
+
+/*
+ * The bo was purged. Never touch its mapping, but advance the
+ * pseudo-random sequence to keep it in sync for the following bos.
+ */
+static void shrink_skip(struct shrink_bo *bo, uint32_t *prng)
+{
+	size_t i;
+
+	for (i = 0; i < XE_BO_SHRINK_SIZE / sizeof(uint32_t); i++)
+		hars_petruska_f54_1_random(prng);
+
+	if (bo->map)
+		munmap(bo->map, XE_BO_SHRINK_SIZE);
+}
+
+/* Emit a linear page mode MEM_COPY of a bo sized range. */
+static int shrink_blit_emit_copy(int fd, uint32_t *cmd, int i,
+				 uint64_t src, uint64_t dst)
+{
+	uint32_t width = XE_BO_SHRINK_SIZE / 256;
+	uint32_t mocs = intel_get_uc_mocs_index(fd);
+
+	/* 256 byte units. */
+	cmd[i++] = MEM_COPY_CMD | (1 << 19);
+	cmd[i++] = width - 1;
+	cmd[i++] = 0;
+	cmd[i++] = width - 1;
+	cmd[i++] = width - 1;
+	cmd[i++] = lower_32_bits(src);
+	cmd[i++] = upper_32_bits(src);
+	cmd[i++] = lower_32_bits(dst);
+	cmd[i++] = upper_32_bits(dst);
+	if (intel_graphics_ver(intel_get_drm_devid(fd)) >= IP_VER(20, 0))
+		cmd[i++] = mocs << XE2_MEM_COPY_SRC_MOCS_SHIFT | mocs;
+	else
+		cmd[i++] = mocs << GEN12_MEM_COPY_MOCS_SHIFT | mocs;
+	cmd[i++] = MI_BATCH_BUFFER_END;
+
+	return i;
+}
+
+/*
+ * Set up a separate VM with a dummy bo and batches copying from the dummy
+ * bo to a bo bound at BLIT_BO_ADDR, and vice versa. A separate VM is used
+ * so that exec doesn't need to revalidate any other shrinker test bos.
+ */
+static void shrink_blit_init(int fd, struct shrink_blit *blit,
+			     uint8_t pat_index)
+{
+	uint64_t bb_size = xe_bb_size(fd, SZ_4K);
+	uint32_t *cmd;
+	int i;
+
+	blit->pat_index = pat_index;
+	blit->syncobj = syncobj_create(fd, 0);
+	blit->vm = xe_vm_create(fd, 0, 0);
+	blit->exec_queue = xe_exec_queue_create_class(fd, blit->vm,
+						      DRM_XE_ENGINE_CLASS_COPY);
+
+	blit->dummy = xe_bo_create_caching(fd, 0, XE_BO_SHRINK_SIZE,
+					   system_memory(fd), 0,
+					   DRM_XE_GEM_CPU_CACHING_WB);
+	blit->dummy_map = xe_bo_map(fd, blit->dummy, XE_BO_SHRINK_SIZE);
+	xe_vm_bind_sync(fd, blit->vm, blit->dummy, 0, BLIT_DUMMY_ADDR,
+			XE_BO_SHRINK_SIZE);
+
+	blit->batch = xe_bo_create(fd, 0, bb_size, system_memory(fd), 0);
+	cmd = xe_bo_map(fd, blit->batch, bb_size);
+	i = shrink_blit_emit_copy(fd, cmd, 0, BLIT_DUMMY_ADDR, BLIT_BO_ADDR);
+	igt_assert(i * sizeof(*cmd) <= BLIT_READBACK_OFFSET);
+	shrink_blit_emit_copy(fd, cmd, BLIT_READBACK_OFFSET / sizeof(*cmd),
+			      BLIT_BO_ADDR, BLIT_DUMMY_ADDR);
+	munmap(cmd, bb_size);
+	xe_vm_bind_sync(fd, blit->vm, blit->batch, 0, BLIT_BATCH_ADDR, bb_size);
+}
+
+static void shrink_blit_fini(int fd, struct shrink_blit *blit)
+{
+	munmap(blit->dummy_map, XE_BO_SHRINK_SIZE);
+	xe_exec_queue_destroy(fd, blit->exec_queue);
+	xe_vm_destroy(fd, blit->vm);
+	gem_close(fd, blit->batch);
+	gem_close(fd, blit->dummy);
+	syncobj_destroy(fd, blit->syncobj);
+}
+
+/* Bind @bo using the blit PAT index, run the batch at @batch_addr. */
+static void shrink_blit_copy(int fd, struct shrink_blit *blit,
+			     struct shrink_bo *bo, uint64_t batch_addr)
+{
+	struct drm_xe_sync sync = {
+		.type = DRM_XE_SYNC_TYPE_SYNCOBJ,
+		.flags = DRM_XE_SYNC_FLAG_SIGNAL,
+		.handle = blit->syncobj,
+	};
+
+	igt_assert_eq(__xe_vm_bind(fd, blit->vm, 0, bo->handle, 0,
+				   BLIT_BO_ADDR, XE_BO_SHRINK_SIZE,
+				   DRM_XE_VM_BIND_OP_MAP, 0, &sync, 1, 0,
+				   blit->pat_index, 0), 0);
+	igt_assert(syncobj_wait(fd, &blit->syncobj, 1, INT64_MAX, 0, NULL));
+	syncobj_reset(fd, &blit->syncobj, 1);
+	xe_exec_wait(fd, blit->exec_queue, batch_addr);
+	xe_vm_unbind_sync(fd, blit->vm, 0, BLIT_BO_ADDR, XE_BO_SHRINK_SIZE);
+}
+
+/* Fill @bo with pseudo-random data through the dummy bo. */
+static void shrink_blit_fill(int fd, struct shrink_blit *blit,
+			     struct shrink_bo *bo, uint32_t *prng)
+{
+	bo->val = shrink_fill_random(blit->dummy_map, prng);
+	shrink_blit_copy(fd, blit, bo, BLIT_BATCH_ADDR);
+}
+
+/* Restore @bo through a GPU bind and copy, and return the copy. */
+static const uint32_t *shrink_blit_readback(int fd, struct shrink_blit *blit,
+					    struct shrink_bo *bo)
+{
+	shrink_blit_copy(fd, blit, bo, BLIT_BATCH_ADDR + BLIT_READBACK_OFFSET);
+
+	return blit->dummy_map;
+}
+
+/**
+ * SUBTEST: shrink
+ * Description:
+ *	Create system bos corresponding to twice the amount of free system
+ *	memory to test shrinker functionality. If no swap space is available
+ *	to accommodate the memory overcommit, mark bos purgeable.
+ * Test category: functionality test
+ *
+ * SUBTEST: purge
+ * Description:
+ *	Create system bos corresponding to twice the amount of free system
+ *	memory and mark the bos needed to accommodate the memory overcommit
+ *	purgeable regardless of available swap space, to make sure the
+ *	shrinker purges rather than swaps.
+ * Test category: functionality test
+ *
+ * SUBTEST: shrink-fault-inject
+ * Description:
+ *	Same as shrink, but with TTM backup and restore fault injection
+ *	enabled, making the shrinker back up only part of the bos and
+ *	making backup and restore of individual pages fail. Fail if no
+ *	faults were injected, unless there was less than
+ *	XE_BO_SHRINK_FI_MIN_SWAP free swap space at test start.
+ * Test category: functionality test
+ *
+ * SUBTEST: shrink-blit
+ * Description:
+ *	Same as shrink, but fill, restore and read back bos using
+ *	blitter copies from and to a dummy bo instead of CPU access.
+ *	On integrated devices with flat CCS, the bos are compressed.
+ *	On discrete devices, bos are restored by a prefetch to VRAM.
+ * Test category: functionality test
+ *
+ * SUBTEST: purge-blit
+ * Description:
+ *	Same as purge, but fill, restore and read back bos using
+ *	blitter copies from and to a dummy bo instead of CPU access.
+ *	On integrated devices with flat CCS, the bos are compressed.
+ *	On discrete devices, bos are restored by a prefetch to VRAM.
+ * Test category: functionality test
+ *
+ * SUBTEST: shrink-fault-inject-blit
+ * Description:
+ *	Same as shrink-fault-inject, but fill, restore and read back bos using
+ *	blitter copies from and to a dummy bo instead of CPU access.
+ *	On integrated devices with flat CCS, the bos are compressed.
+ *	On discrete devices, bos are restored by a prefetch to VRAM.
+ * Test category: functionality test
+ *
+ * SUBTEST: shrink-fast
+ * Description:
+ *	Create system bos corresponding to the amount of free system memory,
+ *	half of them purgeable, and shrink them using drop_caches rather
+ *	than memory overcommit.
+ * Test category: functionality test
+ *
+ * SUBTEST: shrink-blit-fast
+ * Description:
+ *	Same as shrink-fast, but fill, restore and read back bos using
+ *	blitter copies from and to a dummy bo instead of CPU access.
+ *	On integrated devices with flat CCS, the bos are compressed.
+ *	On discrete devices, bos are restored by a prefetch to VRAM.
+ * Test category: functionality test
+ *
+ * SUBTEST: shrink-fault-inject-fast
+ * Description:
+ *	Same as shrink-fast, but with TTM backup and restore fault injection
+ *	enabled.
+ * Test category: functionality test
+ *
+ * SUBTEST: shrink-fault-inject-blit-fast
+ * Description:
+ *	Same as shrink-blit-fast, but with TTM backup and restore fault
+ *	injection enabled.
+ * Test category: functionality test
+ *
+ * SUBTEST: shrink-private-fast
+ * Description:
+ *	Same as shrink-fast, but with bos private to the test VM.
+ * Test category: functionality test
+ *
+ * SUBTEST: shrink-fault-inject-private-fast
+ * Description:
+ *	Same as shrink-fault-inject-fast, but with bos private to the test VM.
+ * Test category: functionality test
+ *
+ * SUBTEST: shrink-private
+ * Description:
+ *	Same as shrink, but with bos private to the test VM.
+ * Test category: functionality test
+ *
+ * SUBTEST: purge-private
+ * Description:
+ *	Same as purge, but with bos private to the test VM.
+ * Test category: functionality test
+ *
+ * SUBTEST: shrink-fault-inject-private
+ * Description:
+ *	Same as shrink-fault-inject, but with bos private to the test VM.
+ * Test category: functionality test
+ */
+static void shrink_test_run_device(int fd, unsigned int flags)
+{
+	uint64_t ram, swap, ram_and_swap, purgeable = 0, alloced, to_alloc, limit;
+	unsigned int count = 0, nr_bos = 0, purged = 0, retained = 0;
+	struct shrink_bo *bos;
+	struct sysinfo si;
+	struct shrink_blit blit;
+	uint64_t placement = system_memory(fd);
+	uint16_t cpu_caching = DRM_XE_GEM_CPU_CACHING_WB;
+	uint32_t seed, prng, vram_region = 0;
+	uint8_t pat_index = DEFAULT_PAT_INDEX;
+	bool prefetch = false;
+	uint32_t vm;
+	int ret;
+
+	if (flags & SHRINK_BLIT) {
+		uint16_t devid = intel_get_drm_devid(fd);
+
+		igt_require_f(blt_has_mem_copy(fd), "MEM_COPY not supported\n");
+		prefetch = xe_has_vram(fd);
+
+		/*
+		 * Test compressed system memory bos. On discrete devices,
+		 * system memory can't be compressed.
+		 */
+		if (!xe_has_vram(fd) && intel_gen(devid) >= 20 &&
+		    HAS_FLATCCS(devid) && blt_platform_has_flat_ccs_enabled(fd)) {
+			pat_index = intel_get_pat_idx_uc_comp(fd);
+			/* The compressed PAT index is not coherent. */
+			cpu_caching = DRM_XE_GEM_CPU_CACHING_WC;
+		}
+		igt_info("Blit using %s bos.\n",
+			 pat_index == DEFAULT_PAT_INDEX ? "uncompressed" :
+			 "compressed");
+	}
+
+	if (prefetch) {
+		placement |= vram_memory(fd, 0);
+		cpu_caching = DRM_XE_GEM_CPU_CACHING_WC;
+		vram_region = xe_mem_region(fd, vram_memory(fd, 0))->instance;
+	}
+
+	igt_assert_eq(getrandom(&seed, sizeof(seed), 0), sizeof(seed));
+	igt_info("Random seed is 0x%08x.\n", seed);
+
+	/* Skip if execution time is expected to be too long. */
+	limit = 32ull << 30;
+	/* IGFX with flat CCS needs to copy when swapping / shrinking */
+	if (!xe_has_vram(fd) && blt_platform_has_flat_ccs_enabled(fd))
+		limit = 16ull << 30;
+
+	igt_assert_eq(sysinfo(&si), 0);
+	ram = (uint64_t)si.freeram * si.mem_unit;
+	swap = (uint64_t)si.freeswap * si.mem_unit;
+
+	if (flags & SHRINK_FAST) {
+		/* No overcommit. Shrinking is triggered using drop_caches. */
+		purgeable = min_t(uint64_t, ram / 2, XE_BO_SHRINK_FAST_MAX);
+		to_alloc = purgeable + min_t(uint64_t, ram - purgeable,
+					   XE_BO_SHRINK_FAST_MAX);
+	} else {
+		igt_require_f(ram <= limit, "Too long expected execution time.\n");
+		to_alloc = ram * 2;
+
+		ram_and_swap = (flags & SHRINK_PURGE) ? ram : ram + swap;
+		if (to_alloc > ram_and_swap)
+			purgeable = to_alloc - ram_and_swap;
+		purgeable += purgeable / 5;
+	}
+
+	igt_info("Free ram is %" PRIu64 " bytes. Will allocate %" PRIu64
+		 " bytes, %" PRIu64 " bytes purgeable.\n",
+		 ram, to_alloc, purgeable);
+	igt_require_f(!purgeable || xe_has_purgeable_support(fd),
+		      "Kernel does not support purgeable buffer objects\n");
+
+	if (flags & SHRINK_FAULT_INJECT)
+		ttm_fault_inject_enable();
+
+	bos = calloc(DIV_ROUND_UP(to_alloc, XE_BO_SHRINK_SIZE), sizeof(*bos));
+	igt_assert(bos);
+
+	if (flags & SHRINK_BLIT)
+		shrink_blit_init(fd, &blit, pat_index);
+
+	vm = xe_vm_create(fd, 0, 0);
+	prng = seed;
+	for (alloced = 0; alloced < to_alloc; alloced += XE_BO_SHRINK_SIZE) {
+		struct shrink_bo *bo = &bos[nr_bos];
+
+		/* The uAPI requires WC with VRAM placement. */
+		ret = __xe_bo_create_caching(fd,
+					     (flags & SHRINK_PRIVATE) ? vm : 0,
+					     XE_BO_SHRINK_SIZE,
+					     placement, 0, cpu_caching,
+					     &bo->handle);
+		if (ret) {
+			igt_assert_f(ret == -ENOMEM || ret == -ENOSPC ||
+				     ret == -EINTR,
+				     "Error creating bo: %d\n", ret);
+			igt_info("Bo creation failed with %d after %" PRIu64
+				 " bytes.\n", ret, alloced);
+			break;
+		}
+		nr_bos++;
+
+		/*
+		 * Allocate purgeable bos first, because if we do it the
+		 * other way around, they may not be subject to swapping...
+		 * Purgeable state and prefetch are set per VMA, so bind
+		 * the bo first.
+		 */
+		bo->purgeable = alloced < purgeable;
+		bo->bound = bo->purgeable || prefetch;
+		bo->addr = XE_BO_SHRINK_VA_BASE + alloced;
+		if (bo->bound)
+			xe_vm_bind_sync(fd, vm, bo->handle, 0, bo->addr,
+					XE_BO_SHRINK_SIZE);
+		/* The blit bind and exec wait for the migration. */
+		if (prefetch)
+			xe_vm_prefetch_async(fd, vm, 0, 0, bo->addr,
+					     XE_BO_SHRINK_SIZE, NULL, 0, 0);
+
+		/* mmap() is blocked in DONTNEED state, so fill first. */
+		if (flags & SHRINK_BLIT)
+			shrink_blit_fill(fd, &blit, bo, &prng);
+		else
+			shrink_fill_cpu(fd, bo, &prng);
+
+		/*
+		 * A CPU mapping is kept, but must not be accessed until
+		 * the bo is marked WILLNEED and found retained.
+		 */
+		if (bo->purgeable)
+			xe_vm_madvise_purgeable(fd, vm, bo->addr,
+						XE_BO_SHRINK_SIZE,
+						DRM_XE_VMA_PURGEABLE_STATE_DONTNEED);
+	}
+
+	if (flags & SHRINK_FAST)
+		igt_purge_vm_caches(fd);
+
+	/*
+	 * Read back and destroy bos. Reset the pseudo-random seed to get an
+	 * identical pseudo-random number sequence for readback.
+	 */
+	prng = seed;
+	for (count = 0; count < nr_bos; count++) {
+		struct shrink_bo *bo = &bos[count];
+
+		if (bo->purgeable &&
+		    !xe_vm_madvise_purgeable(fd, vm, bo->addr,
+					     XE_BO_SHRINK_SIZE,
+					     DRM_XE_VMA_PURGEABLE_STATE_WILLNEED)) {
+			purged++;
+			shrink_skip(bo, &prng);
+		} else {
+			const uint32_t *map = bo->map;
+
+			retained += bo->purgeable;
+			/* The blit bind and exec wait for the migration. */
+			if (prefetch)
+				xe_vm_prefetch_async(fd, vm, 0, 0, bo->addr,
+						     XE_BO_SHRINK_SIZE, NULL, 0,
+						     vram_region);
+			if (flags & SHRINK_BLIT)
+				map = shrink_blit_readback(fd, &blit, bo);
+			shrink_verify(map, bo->val, count + 1, &prng);
+			if (bo->map)
+				munmap(bo->map, XE_BO_SHRINK_SIZE);
+		}
+
+		if (bo->bound)
+			xe_vm_unbind_sync(fd, vm, 0, bo->addr, XE_BO_SHRINK_SIZE);
+		gem_close(fd, bo->handle);
+	}
+
+	igt_info("Readbacks successful: %u (%u purgeable retained), purgeable bos purged: %u\n",
+		 nr_bos - purged, retained, purged);
+
+	if (flags & SHRINK_BLIT)
+		shrink_blit_fini(fd, &blit);
+	xe_vm_destroy(fd, vm);
+	free(bos);
+
+	if (flags & SHRINK_FAST)
+		igt_assert_f(purged > 0, "No purgeable bos were purged\n");
+
+	if (flags & SHRINK_FAULT_INJECT) {
+		int32_t injected = ttm_fault_inject_count();
+
+		ttm_fault_inject_restore(0);
+		igt_info("TTM backup / restore faults injected: %d\n", injected);
+		/* Without swap space, nothing is backed up or restored. */
+		igt_assert_f(injected > 0 || swap < XE_BO_SHRINK_FI_MIN_SWAP,
+			     "No TTM backup / restore faults were injected\n");
+	}
+}
+
+int igt_main()
+{
+	const struct section {
+		const char *name;
+		unsigned int flags;
+	} sections[] = {
+		{ "shrink-fast", SHRINK_FAST },
+		{ "shrink-blit-fast", SHRINK_FAST | SHRINK_BLIT },
+		{ "shrink-fault-inject-fast", SHRINK_FAST | SHRINK_FAULT_INJECT },
+		{ "shrink-fault-inject-blit-fast",
+		  SHRINK_FAST | SHRINK_FAULT_INJECT | SHRINK_BLIT },
+		{ "shrink-private-fast", SHRINK_FAST | SHRINK_PRIVATE },
+		{ "shrink-fault-inject-private-fast",
+		  SHRINK_FAST | SHRINK_FAULT_INJECT | SHRINK_PRIVATE },
+		{ "shrink", 0 },
+		{ "shrink-blit", SHRINK_BLIT },
+		{ "purge", SHRINK_PURGE },
+		{ "purge-blit", SHRINK_PURGE | SHRINK_BLIT },
+		{ "shrink-fault-inject", SHRINK_FAULT_INJECT },
+		{ "shrink-fault-inject-blit", SHRINK_FAULT_INJECT | SHRINK_BLIT },
+		{ "shrink-private", SHRINK_PRIVATE },
+		{ "purge-private", SHRINK_PURGE | SHRINK_PRIVATE },
+		{ "shrink-fault-inject-private", SHRINK_FAULT_INJECT | SHRINK_PRIVATE },
+		{ }
+	};
+	int fd;
+
+	igt_fixture() {
+		fd = drm_open_driver(DRIVER_XE);
+		xe_device_get(fd);
+	}
+
+	for (const struct section *s = sections; s->name; s++)
+		igt_subtest(s->name)
+			shrink_test_run_device(fd, s->flags);
+
+	igt_fixture() {
+		ttm_fault_inject_restore(0);
+		xe_device_put(fd);
+		drm_close_driver(fd);
+	}
+}
diff --git a/tests/meson.build b/tests/meson.build
index 519a9e727..2f50f000d 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -284,6 +284,7 @@ intel_kms_progs = [
 
 intel_xe_progs = [
 	'xe_wedged',
+	'xe_bo_shrink',
 	'xe_ccs',
 	'xe_create',
 	'xe_compute',
-- 
2.56.0


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

* ✓ Xe.CI.BAT: success for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev2)
  2026-11-04 16:30 [PATCH i-g-t v2] tests/intel/xe_bo_shrink: Add a user-space shrinker test Thomas Hellström
@ 2026-11-04 17:23 ` Patchwork
  2026-11-04 17:40 ` ✓ i915.CI.BAT: " Patchwork
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2026-11-04 17:23 UTC (permalink / raw)
  To: Thomas Hellström; +Cc: igt-dev

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

== Series Details ==

Series: tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev2)
URL   : https://patchwork.freedesktop.org/series/176563/
State : success

== Summary ==

CI Bug Log - changes from XEIGT_9177_BAT -> XEIGTPW_16104_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (15 -> 15)
------------------------------

  No changes in participating hosts


Changes
-------

  No changes found


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

  * IGT: IGT_9177 -> IGTPW_16104
  * Linux: xe-6058-34c3200b517db45a621c4963d87759823be13bbd -> xe-6060-c0cb7e7c00c9563d72c1e1b08fac139a57fd0ebf

  IGTPW_16104: 16104
  IGT_9177: 9177
  xe-6058-34c3200b517db45a621c4963d87759823be13bbd: 34c3200b517db45a621c4963d87759823be13bbd
  xe-6060-c0cb7e7c00c9563d72c1e1b08fac139a57fd0ebf: c0cb7e7c00c9563d72c1e1b08fac139a57fd0ebf

== Logs ==

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

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

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

* ✓ i915.CI.BAT: success for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev2)
  2026-11-04 16:30 [PATCH i-g-t v2] tests/intel/xe_bo_shrink: Add a user-space shrinker test Thomas Hellström
  2026-11-04 17:23 ` ✓ Xe.CI.BAT: success for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev2) Patchwork
@ 2026-11-04 17:40 ` Patchwork
  2026-11-04 18:18 ` [PATCH i-g-t v2] tests/intel/xe_bo_shrink: Add a user-space shrinker test Matthew Auld
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2026-11-04 17:40 UTC (permalink / raw)
  To: Thomas Hellström; +Cc: igt-dev

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

== Series Details ==

Series: tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev2)
URL   : https://patchwork.freedesktop.org/series/176563/
State : success

== Summary ==

CI Bug Log - changes from IGT_9177 -> IGTPW_16104
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_16104/index.html

Participating hosts (40 -> 39)
------------------------------

  Missing    (1): bat-dg2-13 

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

  Here are the changes found in IGTPW_16104 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@i915_selftest@live@sanitycheck:
    - bat-apl-1:          [PASS][1] -> [DMESG-WARN][2] ([i915#13735]) +77 other tests dmesg-warn
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9177/bat-apl-1/igt@i915_selftest@live@sanitycheck.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_16104/bat-apl-1/igt@i915_selftest@live@sanitycheck.html

  * igt@kms_pm_rpm@basic-pci-d3-state:
    - bat-apl-1:          [PASS][3] -> [DMESG-WARN][4] ([i915#13735] / [i915#180]) +49 other tests dmesg-warn
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9177/bat-apl-1/igt@kms_pm_rpm@basic-pci-d3-state.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_16104/bat-apl-1/igt@kms_pm_rpm@basic-pci-d3-state.html

  
  [i915#13735]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13735
  [i915#180]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/180


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

  * CI: CI-20190529 -> None
  * IGT: IGT_9177 -> IGTPW_16104
  * Linux: CI_DRM_19443 -> CI_DRM_19444

  CI-20190529: 20190529
  CI_DRM_19443: d11bbfdac0f3d443b367857ffe683ae6bb80d560 @ git://anongit.freedesktop.org/gfx-ci/linux
  CI_DRM_19444: c0cb7e7c00c9563d72c1e1b08fac139a57fd0ebf @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_16104: 16104
  IGT_9177: 9177

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_16104/index.html

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

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

* Re: [PATCH i-g-t v2] tests/intel/xe_bo_shrink: Add a user-space shrinker test
  2026-11-04 16:30 [PATCH i-g-t v2] tests/intel/xe_bo_shrink: Add a user-space shrinker test Thomas Hellström
  2026-11-04 17:23 ` ✓ Xe.CI.BAT: success for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev2) Patchwork
  2026-11-04 17:40 ` ✓ i915.CI.BAT: " Patchwork
@ 2026-11-04 18:18 ` Matthew Auld
  2026-11-05  4:51 ` ✓ Xe.CI.BAT: success for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev3) Patchwork
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Matthew Auld @ 2026-11-04 18:18 UTC (permalink / raw)
  To: Thomas Hellström, igt-dev; +Cc: Kamil Konieczny, Matthew Brost

On 04/11/2026 16:30, Thomas Hellström wrote:
> Add a user-space counterpart of the xe_bo_shrink kunit test, now that
> user-space can mark buffer objects purgeable using the madvise IOCTL.
> 
> The test creates 64 MiB system buffer objects corresponding to twice
> the amount of free system memory, fills them with pseudo-random data
> through CPU mappings that are kept alive until readback, and verifies
> the contents after the overcommit has forced the shrinker to back up
> or purge them. As in the kunit test, the share of the memory that
> doesn't fit in free RAM and swap is marked purgeable (DONTNEED) and
> allocated first. Purgeable objects are only verified if found retained
> when marked WILLNEED again; purged objects are never accessed.
> 
> Subtests:
> - shrink: The kunit test equivalent.
> - purge: Ignore swap space when sizing the purgeable share, so that
>    the shrinker needs to purge rather than swap.
> - shrink-fault-inject: Enable TTM backup / restore fault injection
>    through debugfs, if available, making the shrinker back up only part
>    of the objects and making backup and restore of individual pages
>    fail. The number of injected faults is checked to be non-zero,
>    unless there was less than 1 GiB of free swap space at test start.
> - *-blit: Never access the objects using the CPU. Instead fill them
>    from, and read them back to, a CPU-mapped dummy object using MEM_COPY
>    blits in a separate VM, so that they are restored through the GPU
>    paths. On integrated devices with flat CCS, bind the objects using a
>    compressed PAT index to cover shrinking of compressed system memory
>    objects. On discrete devices, objects are created with system and VRAM
>    placements, prefetched to system memory before the fill and prefetched
>    to VRAM before the readback, so that they are restored by the
>    migration to VRAM.
> - *-private: Create the objects private to the test VM rather than as
>    external objects.
> - *-fast: Allocate at most the free system memory, half of it
>    purgeable, capped to 8 GiB purgeable and 8 GiB non-purgeable, and
>    shrink using drop_caches rather than memory overcommit.
> 
> The non-fast subtests are slow and require a substantial amount of
> swap space for meaningful coverage, so block them in CI and run only
> the fast subtests.
> 
> v2:
> - Don't fail the fault-inject subtests if no faults were injected and
>    there was less than XE_BO_SHRINK_FI_MIN_SWAP (1 GiB) free swap space
>    at test start, since nothing is then backed up or restored
> - Never access the blit variant bos using the CPU, not even for the
>    fill. Fill them by blitting from the dummy bo instead
> - Bind the blit variant bos using a compressed PAT index on integrated
>    devices with flat CCS to test shrinking of compressed system memory
>    bos (Matthew Auld)
> 
> Cc: Kamil Konieczny <kamil.konieczny@linux.intel.com>
> Cc: Matthew Auld <matthew.auld@intel.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Assisted-by: GitHub_Copilot:claude-opus-5.5
> ---
>   tests/intel-ci/xe.blocklist.txt |   3 +-
>   tests/intel/xe_bo_shrink.c      | 700 ++++++++++++++++++++++++++++++++
>   tests/meson.build               |   1 +
>   3 files changed, 703 insertions(+), 1 deletion(-)
>   create mode 100644 tests/intel/xe_bo_shrink.c
> 
> diff --git a/tests/intel-ci/xe.blocklist.txt b/tests/intel-ci/xe.blocklist.txt
> index c1dd3c7a8..ba589aac2 100644
> --- a/tests/intel-ci/xe.blocklist.txt
> +++ b/tests/intel-ci/xe.blocklist.txt
> @@ -35,9 +35,10 @@ igt@gpu_buddy
>   igt@drm_mm
>   igt@kms_selftest.*
>   ##################################################################
> -# Exclude slow KUnit test which should run as manual test
> +# Exclude slow shrinker tests which should run as manual tests
>   ##################################################################
>   igt@xe_live_ktest@xe_bo_shrink
> +igt@xe_bo_shrink@(?!.*-fast$).*
>   ##################################################################
>   # Exclude all other non-Xe tests
>   ##################################################################
> diff --git a/tests/intel/xe_bo_shrink.c b/tests/intel/xe_bo_shrink.c
> new file mode 100644
> index 000000000..8b72f207a
> --- /dev/null
> +++ b/tests/intel/xe_bo_shrink.c
> @@ -0,0 +1,700 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2026 Intel Corporation
> + */
> +
> +/**
> + * TEST: Exercise the xe buffer object shrinker from user-space
> + * Category: Core
> + * Mega feature: General Core features
> + * Sub-category: Memory management tests
> + * Functionality: shrinker, swap, purgeable
> + *
> + * This is a user-space counterpart of the xe_bo_shrink kunit test.
> + * It creates system memory buffer objects corresponding to twice the
> + * amount of free system memory. All objects are filled with pseudo-random
> + * data through a CPU mapping that is kept alive until the data is verified
> + * after the overcommit. Purgeable objects are additionally marked DONTNEED
> + * using the madvise IOCTL so that the shrinker may discard their contents.
> + * Those are only verified if still retained when marked WILLNEED again.
> + *
> + * The blit variants never access the bos using the CPU. Instead each bo is
> + * bound to a separate VM and filled from, and read back to, a CPU-mapped
> + * dummy bo using the MEM_COPY blitter command, so that bos are restored by
> + * the GPU paths rather than by CPU faults, and the content of the dummy bo
> + * is verified. On integrated devices with flat CCS, the bos are bound using
> + * a compressed PAT index, so that compressed system memory bos, including
> + * their CCS metadata, are subject to shrinking and restore. On discrete
> + * devices, the blit variants create the bos with both system and VRAM
> + * placements and prefetch them to system memory before the fill. Before
> + * the readback copy, each bo is prefetched to VRAM, so that it is restored
> + * by the migration to VRAM.
> + *
> + * The private variants create the bos private to the test VM, sharing
> + * the VM's reservation object, rather than as external bos.
> + *
> + * The fast variants instead create bos corresponding to the amount of
> + * free system memory, half of them purgeable, capped to
> + * XE_BO_SHRINK_FAST_MAX purgeable and non-purgeable each, and shrink
> + * them by writing to /proc/sys/vm/drop_caches rather than relying on
> + * reclaim caused by memory overcommit.
> + */
> +
> +#include <sys/random.h>
> +#include <sys/sysinfo.h>
> +
> +#include "igt.h"
> +#include "igt_debugfs.h"
> +#include "igt_rand.h"
> +#include "igt_syncobj.h"
> +#include "igt_sysfs.h"
> +#include "intel_blt.h"
> +#include "intel_mocs.h"
> +#include "intel_pat.h"
> +#include "xe_drm.h"
> +
> +#include "intel_reg.h"
> +#include "xe/xe_ioctl.h"
> +#include "xe/xe_query.h"
> +
> +#define XE_BO_SHRINK_SIZE	(64ull << 20)
> +#define XE_BO_SHRINK_VA_BASE	(1ull << 32)
> +/* Max purgeable and max non-purgeable memory, each, for fast variants. */
> +#define XE_BO_SHRINK_FAST_MAX	(8ull << 30)
> +/* Min free swap at test start for fault injection to be required. */
> +#define XE_BO_SHRINK_FI_MIN_SWAP	(1ull << 30)
> +
> +#define BLIT_BATCH_ADDR		(1ull << 20)
> +/* Offset of the readback copy batch, after the fill copy batch. */
> +#define BLIT_READBACK_OFFSET	256
> +#define BLIT_DUMMY_ADDR		(1ull << 32)
> +#define BLIT_BO_ADDR		(2ull << 32)
> +
> +#define SHRINK_PURGE		(0x1 << 0)
> +#define SHRINK_FAULT_INJECT	(0x1 << 1)
> +#define SHRINK_BLIT		(0x1 << 2)
> +#define SHRINK_FAST		(0x1 << 3)
> +#define SHRINK_PRIVATE		(0x1 << 4)
> +
> +/**
> + * struct shrink_bo - A shrinker test bo
> + * @map: Persistent CPU mapping of the bo, kept from fill until readback,
> + * or NULL if the bo is filled and read back using blitter copies.
> + * @handle: GEM handle of the bo.
> + * @addr: GPU virtual address of the bo in the test VM, if @bound.
> + * @val: The first pseudo-random value written, used to detect a PRNG
> + * that is out of sync on readback.
> + * @purgeable: Whether the bo is marked DONTNEED and thus may be purged.
> + * @bound: Whether the bo is bound at @addr in the test VM.
> + */
> +struct shrink_bo {
> +	uint32_t *map;
> +	uint32_t handle;
> +	uint64_t addr;
> +	uint32_t val;
> +	bool purgeable;
> +	bool bound;
> +};
> +
> +/**
> + * struct shrink_blit - State for blitter fill and readback of bos
> + * @vm: A separate VM used for the copies.
> + * @exec_queue: Copy engine exec queue in @vm.
> + * @batch: Batch bo holding the fill and readback MEM_COPY commands.
> + * @dummy: Dummy bo in system memory, the source of the fill copies and
> + * the destination of the readback copies.
> + * @dummy_map: CPU mapping of @dummy, used to generate and verify content.
> + * @syncobj: Syncobj used to wait for binds of the bos.
> + * @pat_index: PAT index used to bind the bos, compressed if supported.
> + */
> +struct shrink_blit {
> +	uint32_t vm;
> +	uint32_t exec_queue;
> +	uint32_t batch;
> +	uint32_t dummy;
> +	uint32_t *dummy_map;
> +	uint32_t syncobj;
> +	uint8_t pat_index;
> +};
> +
> +/**
> + * struct ttm_fault_inject - TTM backup / restore fault injection state
> + * @dir: Debugfs directory fd of the fault attributes, or -1 if not opened.
> + * @probability: Original probability, restored after the test.
> + * @interval: Original interval, restored after the test.
> + * @times: Original times, restored after the test.
> + * @verbose: Original verbosity, restored after the test.
> + * @task_filter: Original task-filter setting, restored after the test.
> + */
> +static struct ttm_fault_inject {
> +	int dir;
> +	uint32_t probability;
> +	uint32_t interval;
> +	int32_t times;
> +	uint32_t verbose;
> +	bool task_filter;
> +} ttm_fi = { .dir = -1 };
> +
> +static void ttm_fault_inject_restore(int sig)
> +{
> +	if (ttm_fi.dir < 0)
> +		return;
> +
> +	__igt_sysfs_set_u32(ttm_fi.dir, "probability", ttm_fi.probability);
> +	__igt_sysfs_set_u32(ttm_fi.dir, "interval", ttm_fi.interval);
> +	__igt_sysfs_set_s32(ttm_fi.dir, "times", ttm_fi.times);
> +	__igt_sysfs_set_u32(ttm_fi.dir, "verbose", ttm_fi.verbose);
> +	__igt_sysfs_set_boolean(ttm_fi.dir, "task-filter", ttm_fi.task_filter);
> +	close(ttm_fi.dir);
> +	ttm_fi.dir = -1;
> +}
> +
> +/*
> + * Enable the TTM backup_fault_inject attribute, which makes the shrinker
> + * back up only part of a bo, fails backup of individual folios and makes
> + * interruptible restores fail with -EINTR. Requires CONFIG_FAULT_INJECTION
> + * and CONFIG_FAULT_INJECTION_DEBUG_FS.
> + */
> +static void ttm_fault_inject_enable(void)
> +{
> +	const char *debugfs_root = igt_debugfs_mount();
> +	char path[PATH_MAX];
> +
> +	igt_require_f(debugfs_root, "debugfs not available\n");
> +	snprintf(path, sizeof(path), "%s/ttm/backup_fault_inject", debugfs_root);
> +	ttm_fi.dir = open(path, O_RDONLY | O_DIRECTORY);
> +	igt_require_f(ttm_fi.dir >= 0,
> +		      "TTM backup fault injection not available (%s)\n", path);
> +
> +	ttm_fi.probability = igt_sysfs_get_u32(ttm_fi.dir, "probability");
> +	ttm_fi.interval = igt_sysfs_get_u32(ttm_fi.dir, "interval");
> +	ttm_fi.times = igt_sysfs_get_s32(ttm_fi.dir, "times");
> +	ttm_fi.verbose = igt_sysfs_get_u32(ttm_fi.dir, "verbose");
> +	ttm_fi.task_filter = igt_sysfs_get_boolean(ttm_fi.dir, "task-filter");
> +	igt_install_exit_handler(ttm_fault_inject_restore);
> +
> +	igt_sysfs_set_boolean(ttm_fi.dir, "task-filter", false);
> +	igt_sysfs_set_u32(ttm_fi.dir, "verbose", 0);
> +	igt_sysfs_set_u32(ttm_fi.dir, "interval", 1);
> +	/* The kernel decrements times on each injection. */
> +	igt_sysfs_set_s32(ttm_fi.dir, "times", INT32_MAX);
> +	igt_sysfs_set_u32(ttm_fi.dir, "probability", 10);
> +}
> +
> +static int32_t ttm_fault_inject_count(void)
> +{
> +	return INT32_MAX - igt_sysfs_get_s32(ttm_fi.dir, "times");
> +}
> +
> +static bool xe_has_purgeable_support(int fd)
> +{
> +	struct drm_xe_query_config *config = xe_config(fd);
> +
> +	return config->info[DRM_XE_QUERY_CONFIG_FLAGS] &
> +		DRM_XE_QUERY_CONFIG_FLAG_HAS_PURGING_SUPPORT;
> +}
> +
> +/* Fill @map with pseudo-random data and return the first value. */
> +static uint32_t shrink_fill_random(uint32_t *map, uint32_t *prng)
> +{
> +	size_t i;
> +
> +	for (i = 0; i < XE_BO_SHRINK_SIZE / sizeof(*map); i++)
> +		map[i] = hars_petruska_f54_1_random(prng);
> +
> +	return map[0];
> +}
> +
> +/*
> + * The CPU mapping is kept until shrink_verify(), so that the shrinker
> + * needs to zap the PTEs of a live mapping and readback restores the
> + * bo through that same mapping.
> + */
> +static void shrink_fill_cpu(int fd, struct shrink_bo *bo, uint32_t *prng)
> +{
> +	bo->map = xe_bo_map(fd, bo->handle, XE_BO_SHRINK_SIZE);
> +	bo->val = shrink_fill_random(bo->map, prng);
> +}
> +
> +static void shrink_verify(const uint32_t *map, uint32_t first_val,
> +			  unsigned int bo_nr, uint32_t *prng)
> +{
> +	size_t i;
> +
> +	for (i = 0; i < XE_BO_SHRINK_SIZE / sizeof(*map); i++) {
> +		uint32_t val = hars_petruska_f54_1_random(prng);
> +
> +		igt_assert_f(map[i] == val,
> +			     "Content not preserved, bo %u offset 0x%016zx. "
> +			     "Failed value is 0x%08x, recorded 0x%08x.%s\n",
> +			     bo_nr, i * sizeof(*map), map[i], val,
> +			     (i == 0 && val != first_val) ?
> +			     " Looks like PRNG is out of sync." : "");
> +	}
> +}
> +
> +/*
> + * The bo was purged. Never touch its mapping, but advance the
> + * pseudo-random sequence to keep it in sync for the following bos.
> + */
> +static void shrink_skip(struct shrink_bo *bo, uint32_t *prng)
> +{
> +	size_t i;
> +
> +	for (i = 0; i < XE_BO_SHRINK_SIZE / sizeof(uint32_t); i++)
> +		hars_petruska_f54_1_random(prng);
> +
> +	if (bo->map)
> +		munmap(bo->map, XE_BO_SHRINK_SIZE);
> +}
> +
> +/* Emit a linear page mode MEM_COPY of a bo sized range. */
> +static int shrink_blit_emit_copy(int fd, uint32_t *cmd, int i,
> +				 uint64_t src, uint64_t dst)
> +{
> +	uint32_t width = XE_BO_SHRINK_SIZE / 256;
> +	uint32_t mocs = intel_get_uc_mocs_index(fd);

Any reason not to go with cached mocs here? I figure that is the more 
nasty/insteresting default?

> +
> +	/* 256 byte units. */
> +	cmd[i++] = MEM_COPY_CMD | (1 << 19);
> +	cmd[i++] = width - 1;
> +	cmd[i++] = 0;
> +	cmd[i++] = width - 1;
> +	cmd[i++] = width - 1;
> +	cmd[i++] = lower_32_bits(src);
> +	cmd[i++] = upper_32_bits(src);
> +	cmd[i++] = lower_32_bits(dst);
> +	cmd[i++] = upper_32_bits(dst);
> +	if (intel_graphics_ver(intel_get_drm_devid(fd)) >= IP_VER(20, 0))
> +		cmd[i++] = mocs << XE2_MEM_COPY_SRC_MOCS_SHIFT | mocs;
> +	else
> +		cmd[i++] = mocs << GEN12_MEM_COPY_MOCS_SHIFT | mocs;
> +	cmd[i++] = MI_BATCH_BUFFER_END;
> +
> +	return i;
> +}
> +
> +/*
> + * Set up a separate VM with a dummy bo and batches copying from the dummy
> + * bo to a bo bound at BLIT_BO_ADDR, and vice versa. A separate VM is used
> + * so that exec doesn't need to revalidate any other shrinker test bos.
> + */
> +static void shrink_blit_init(int fd, struct shrink_blit *blit,
> +			     uint8_t pat_index)
> +{
> +	uint64_t bb_size = xe_bb_size(fd, SZ_4K);
> +	uint32_t *cmd;
> +	int i;
> +
> +	blit->pat_index = pat_index;
> +	blit->syncobj = syncobj_create(fd, 0);
> +	blit->vm = xe_vm_create(fd, 0, 0);
> +	blit->exec_queue = xe_exec_queue_create_class(fd, blit->vm,
> +						      DRM_XE_ENGINE_CLASS_COPY);
> +
> +	blit->dummy = xe_bo_create_caching(fd, 0, XE_BO_SHRINK_SIZE,
> +					   system_memory(fd), 0,
> +					   DRM_XE_GEM_CPU_CACHING_WB);
> +	blit->dummy_map = xe_bo_map(fd, blit->dummy, XE_BO_SHRINK_SIZE);
> +	xe_vm_bind_sync(fd, blit->vm, blit->dummy, 0, BLIT_DUMMY_ADDR,
> +			XE_BO_SHRINK_SIZE);
> +
> +	blit->batch = xe_bo_create(fd, 0, bb_size, system_memory(fd), 0);
> +	cmd = xe_bo_map(fd, blit->batch, bb_size);
> +	i = shrink_blit_emit_copy(fd, cmd, 0, BLIT_DUMMY_ADDR, BLIT_BO_ADDR);
> +	igt_assert(i * sizeof(*cmd) <= BLIT_READBACK_OFFSET);
> +	shrink_blit_emit_copy(fd, cmd, BLIT_READBACK_OFFSET / sizeof(*cmd),
> +			      BLIT_BO_ADDR, BLIT_DUMMY_ADDR);
> +	munmap(cmd, bb_size);
> +	xe_vm_bind_sync(fd, blit->vm, blit->batch, 0, BLIT_BATCH_ADDR, bb_size);
> +}
> +
> +static void shrink_blit_fini(int fd, struct shrink_blit *blit)
> +{
> +	munmap(blit->dummy_map, XE_BO_SHRINK_SIZE);
> +	xe_exec_queue_destroy(fd, blit->exec_queue);
> +	xe_vm_destroy(fd, blit->vm);
> +	gem_close(fd, blit->batch);
> +	gem_close(fd, blit->dummy);
> +	syncobj_destroy(fd, blit->syncobj);
> +}
> +
> +/* Bind @bo using the blit PAT index, run the batch at @batch_addr. */
> +static void shrink_blit_copy(int fd, struct shrink_blit *blit,
> +			     struct shrink_bo *bo, uint64_t batch_addr)
> +{
> +	struct drm_xe_sync sync = {
> +		.type = DRM_XE_SYNC_TYPE_SYNCOBJ,
> +		.flags = DRM_XE_SYNC_FLAG_SIGNAL,
> +		.handle = blit->syncobj,
> +	};
> +
> +	igt_assert_eq(__xe_vm_bind(fd, blit->vm, 0, bo->handle, 0,
> +				   BLIT_BO_ADDR, XE_BO_SHRINK_SIZE,
> +				   DRM_XE_VM_BIND_OP_MAP, 0, &sync, 1, 0,
> +				   blit->pat_index, 0), 0);
> +	igt_assert(syncobj_wait(fd, &blit->syncobj, 1, INT64_MAX, 0, NULL));
> +	syncobj_reset(fd, &blit->syncobj, 1);
> +	xe_exec_wait(fd, blit->exec_queue, batch_addr);
> +	xe_vm_unbind_sync(fd, blit->vm, 0, BLIT_BO_ADDR, XE_BO_SHRINK_SIZE);
> +}
> +
> +/* Fill @bo with pseudo-random data through the dummy bo. */
> +static void shrink_blit_fill(int fd, struct shrink_blit *blit,
> +			     struct shrink_bo *bo, uint32_t *prng)
> +{
> +	bo->val = shrink_fill_random(blit->dummy_map, prng);
> +	shrink_blit_copy(fd, blit, bo, BLIT_BATCH_ADDR);
> +}
> +
> +/* Restore @bo through a GPU bind and copy, and return the copy. */
> +static const uint32_t *shrink_blit_readback(int fd, struct shrink_blit *blit,
> +					    struct shrink_bo *bo)
> +{
> +	shrink_blit_copy(fd, blit, bo, BLIT_BATCH_ADDR + BLIT_READBACK_OFFSET);
> +
> +	return blit->dummy_map;
> +}
> +
> +/**
> + * SUBTEST: shrink
> + * Description:
> + *	Create system bos corresponding to twice the amount of free system
> + *	memory to test shrinker functionality. If no swap space is available
> + *	to accommodate the memory overcommit, mark bos purgeable.
> + * Test category: functionality test
> + *
> + * SUBTEST: purge
> + * Description:
> + *	Create system bos corresponding to twice the amount of free system
> + *	memory and mark the bos needed to accommodate the memory overcommit
> + *	purgeable regardless of available swap space, to make sure the
> + *	shrinker purges rather than swaps.
> + * Test category: functionality test
> + *
> + * SUBTEST: shrink-fault-inject
> + * Description:
> + *	Same as shrink, but with TTM backup and restore fault injection
> + *	enabled, making the shrinker back up only part of the bos and
> + *	making backup and restore of individual pages fail. Fail if no
> + *	faults were injected, unless there was less than
> + *	XE_BO_SHRINK_FI_MIN_SWAP free swap space at test start.
> + * Test category: functionality test
> + *
> + * SUBTEST: shrink-blit
> + * Description:
> + *	Same as shrink, but fill, restore and read back bos using
> + *	blitter copies from and to a dummy bo instead of CPU access.
> + *	On integrated devices with flat CCS, the bos are compressed.
> + *	On discrete devices, bos are restored by a prefetch to VRAM.
> + * Test category: functionality test
> + *
> + * SUBTEST: purge-blit
> + * Description:
> + *	Same as purge, but fill, restore and read back bos using
> + *	blitter copies from and to a dummy bo instead of CPU access.
> + *	On integrated devices with flat CCS, the bos are compressed.
> + *	On discrete devices, bos are restored by a prefetch to VRAM.
> + * Test category: functionality test
> + *
> + * SUBTEST: shrink-fault-inject-blit
> + * Description:
> + *	Same as shrink-fault-inject, but fill, restore and read back bos using
> + *	blitter copies from and to a dummy bo instead of CPU access.
> + *	On integrated devices with flat CCS, the bos are compressed.
> + *	On discrete devices, bos are restored by a prefetch to VRAM.
> + * Test category: functionality test
> + *
> + * SUBTEST: shrink-fast
> + * Description:
> + *	Create system bos corresponding to the amount of free system memory,
> + *	half of them purgeable, and shrink them using drop_caches rather
> + *	than memory overcommit.
> + * Test category: functionality test
> + *
> + * SUBTEST: shrink-blit-fast
> + * Description:
> + *	Same as shrink-fast, but fill, restore and read back bos using
> + *	blitter copies from and to a dummy bo instead of CPU access.
> + *	On integrated devices with flat CCS, the bos are compressed.
> + *	On discrete devices, bos are restored by a prefetch to VRAM.
> + * Test category: functionality test
> + *
> + * SUBTEST: shrink-fault-inject-fast
> + * Description:
> + *	Same as shrink-fast, but with TTM backup and restore fault injection
> + *	enabled.
> + * Test category: functionality test
> + *
> + * SUBTEST: shrink-fault-inject-blit-fast
> + * Description:
> + *	Same as shrink-blit-fast, but with TTM backup and restore fault
> + *	injection enabled.
> + * Test category: functionality test
> + *
> + * SUBTEST: shrink-private-fast
> + * Description:
> + *	Same as shrink-fast, but with bos private to the test VM.
> + * Test category: functionality test
> + *
> + * SUBTEST: shrink-fault-inject-private-fast
> + * Description:
> + *	Same as shrink-fault-inject-fast, but with bos private to the test VM.
> + * Test category: functionality test
> + *
> + * SUBTEST: shrink-private
> + * Description:
> + *	Same as shrink, but with bos private to the test VM.
> + * Test category: functionality test
> + *
> + * SUBTEST: purge-private
> + * Description:
> + *	Same as purge, but with bos private to the test VM.
> + * Test category: functionality test
> + *
> + * SUBTEST: shrink-fault-inject-private
> + * Description:
> + *	Same as shrink-fault-inject, but with bos private to the test VM.
> + * Test category: functionality test
> + */
> +static void shrink_test_run_device(int fd, unsigned int flags)
> +{
> +	uint64_t ram, swap, ram_and_swap, purgeable = 0, alloced, to_alloc, limit;
> +	unsigned int count = 0, nr_bos = 0, purged = 0, retained = 0;
> +	struct shrink_bo *bos;
> +	struct sysinfo si;
> +	struct shrink_blit blit;
> +	uint64_t placement = system_memory(fd);
> +	uint16_t cpu_caching = DRM_XE_GEM_CPU_CACHING_WB;
> +	uint32_t seed, prng, vram_region = 0;
> +	uint8_t pat_index = DEFAULT_PAT_INDEX;
> +	bool prefetch = false;
> +	uint32_t vm;
> +	int ret;
> +
> +	if (flags & SHRINK_BLIT) {
> +		uint16_t devid = intel_get_drm_devid(fd);
> +
> +		igt_require_f(blt_has_mem_copy(fd), "MEM_COPY not supported\n");
> +		prefetch = xe_has_vram(fd);
> +
> +		/*
> +		 * Test compressed system memory bos. On discrete devices,
> +		 * system memory can't be compressed.
> +		 */
> +		if (!xe_has_vram(fd) && intel_gen(devid) >= 20 &&
> +		    HAS_FLATCCS(devid) && blt_platform_has_flat_ccs_enabled(fd)) {
> +			pat_index = intel_get_pat_idx_uc_comp(fd);
> +			/* The compressed PAT index is not coherent. */
> +			cpu_caching = DRM_XE_GEM_CPU_CACHING_WC;
> +		}
> +		igt_info("Blit using %s bos.\n",
> +			 pat_index == DEFAULT_PAT_INDEX ? "uncompressed" :
> +			 "compressed");
> +	}
> +
> +	if (prefetch) {
> +		placement |= vram_memory(fd, 0);
> +		cpu_caching = DRM_XE_GEM_CPU_CACHING_WC;
> +		vram_region = xe_mem_region(fd, vram_memory(fd, 0))->instance;
> +	}
> +
> +	igt_assert_eq(getrandom(&seed, sizeof(seed), 0), sizeof(seed));
> +	igt_info("Random seed is 0x%08x.\n", seed);
> +
> +	/* Skip if execution time is expected to be too long. */
> +	limit = 32ull << 30;
> +	/* IGFX with flat CCS needs to copy when swapping / shrinking */
> +	if (!xe_has_vram(fd) && blt_platform_has_flat_ccs_enabled(fd))

Would it make sense to use DRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION for 
non-comp case? That would give consitent behaviour with lnl vs 
everything else due to WC stuff. Otherwise I think we are actually 
triggering the CCS shrinker path everywhere on some igpu platforms. Not 
an issue though, and maybe that is what you wanted here.

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

> +		limit = 16ull << 30;
> +
> +	igt_assert_eq(sysinfo(&si), 0);
> +	ram = (uint64_t)si.freeram * si.mem_unit;
> +	swap = (uint64_t)si.freeswap * si.mem_unit;
> +
> +	if (flags & SHRINK_FAST) {
> +		/* No overcommit. Shrinking is triggered using drop_caches. */
> +		purgeable = min_t(uint64_t, ram / 2, XE_BO_SHRINK_FAST_MAX);
> +		to_alloc = purgeable + min_t(uint64_t, ram - purgeable,
> +					   XE_BO_SHRINK_FAST_MAX);
> +	} else {
> +		igt_require_f(ram <= limit, "Too long expected execution time.\n");
> +		to_alloc = ram * 2;
> +
> +		ram_and_swap = (flags & SHRINK_PURGE) ? ram : ram + swap;
> +		if (to_alloc > ram_and_swap)
> +			purgeable = to_alloc - ram_and_swap;
> +		purgeable += purgeable / 5;
> +	}
> +
> +	igt_info("Free ram is %" PRIu64 " bytes. Will allocate %" PRIu64
> +		 " bytes, %" PRIu64 " bytes purgeable.\n",
> +		 ram, to_alloc, purgeable);
> +	igt_require_f(!purgeable || xe_has_purgeable_support(fd),
> +		      "Kernel does not support purgeable buffer objects\n");
> +
> +	if (flags & SHRINK_FAULT_INJECT)
> +		ttm_fault_inject_enable();
> +
> +	bos = calloc(DIV_ROUND_UP(to_alloc, XE_BO_SHRINK_SIZE), sizeof(*bos));
> +	igt_assert(bos);
> +
> +	if (flags & SHRINK_BLIT)
> +		shrink_blit_init(fd, &blit, pat_index);
> +
> +	vm = xe_vm_create(fd, 0, 0);
> +	prng = seed;
> +	for (alloced = 0; alloced < to_alloc; alloced += XE_BO_SHRINK_SIZE) {
> +		struct shrink_bo *bo = &bos[nr_bos];
> +
> +		/* The uAPI requires WC with VRAM placement. */
> +		ret = __xe_bo_create_caching(fd,
> +					     (flags & SHRINK_PRIVATE) ? vm : 0,
> +					     XE_BO_SHRINK_SIZE,
> +					     placement, 0, cpu_caching,
> +					     &bo->handle);
> +		if (ret) {
> +			igt_assert_f(ret == -ENOMEM || ret == -ENOSPC ||
> +				     ret == -EINTR,
> +				     "Error creating bo: %d\n", ret);
> +			igt_info("Bo creation failed with %d after %" PRIu64
> +				 " bytes.\n", ret, alloced);
> +			break;
> +		}
> +		nr_bos++;
> +
> +		/*
> +		 * Allocate purgeable bos first, because if we do it the
> +		 * other way around, they may not be subject to swapping...
> +		 * Purgeable state and prefetch are set per VMA, so bind
> +		 * the bo first.
> +		 */
> +		bo->purgeable = alloced < purgeable;
> +		bo->bound = bo->purgeable || prefetch;
> +		bo->addr = XE_BO_SHRINK_VA_BASE + alloced;
> +		if (bo->bound)
> +			xe_vm_bind_sync(fd, vm, bo->handle, 0, bo->addr,
> +					XE_BO_SHRINK_SIZE);
> +		/* The blit bind and exec wait for the migration. */
> +		if (prefetch)
> +			xe_vm_prefetch_async(fd, vm, 0, 0, bo->addr,
> +					     XE_BO_SHRINK_SIZE, NULL, 0, 0);
> +
> +		/* mmap() is blocked in DONTNEED state, so fill first. */
> +		if (flags & SHRINK_BLIT)
> +			shrink_blit_fill(fd, &blit, bo, &prng);
> +		else
> +			shrink_fill_cpu(fd, bo, &prng);
> +
> +		/*
> +		 * A CPU mapping is kept, but must not be accessed until
> +		 * the bo is marked WILLNEED and found retained.
> +		 */
> +		if (bo->purgeable)
> +			xe_vm_madvise_purgeable(fd, vm, bo->addr,
> +						XE_BO_SHRINK_SIZE,
> +						DRM_XE_VMA_PURGEABLE_STATE_DONTNEED);
> +	}
> +
> +	if (flags & SHRINK_FAST)
> +		igt_purge_vm_caches(fd);
> +
> +	/*
> +	 * Read back and destroy bos. Reset the pseudo-random seed to get an
> +	 * identical pseudo-random number sequence for readback.
> +	 */
> +	prng = seed;
> +	for (count = 0; count < nr_bos; count++) {
> +		struct shrink_bo *bo = &bos[count];
> +
> +		if (bo->purgeable &&
> +		    !xe_vm_madvise_purgeable(fd, vm, bo->addr,
> +					     XE_BO_SHRINK_SIZE,
> +					     DRM_XE_VMA_PURGEABLE_STATE_WILLNEED)) {
> +			purged++;
> +			shrink_skip(bo, &prng);
> +		} else {
> +			const uint32_t *map = bo->map;
> +
> +			retained += bo->purgeable;
> +			/* The blit bind and exec wait for the migration. */
> +			if (prefetch)
> +				xe_vm_prefetch_async(fd, vm, 0, 0, bo->addr,
> +						     XE_BO_SHRINK_SIZE, NULL, 0,
> +						     vram_region);
> +			if (flags & SHRINK_BLIT)
> +				map = shrink_blit_readback(fd, &blit, bo);
> +			shrink_verify(map, bo->val, count + 1, &prng);
> +			if (bo->map)
> +				munmap(bo->map, XE_BO_SHRINK_SIZE);
> +		}
> +
> +		if (bo->bound)
> +			xe_vm_unbind_sync(fd, vm, 0, bo->addr, XE_BO_SHRINK_SIZE);
> +		gem_close(fd, bo->handle);
> +	}
> +
> +	igt_info("Readbacks successful: %u (%u purgeable retained), purgeable bos purged: %u\n",
> +		 nr_bos - purged, retained, purged);
> +
> +	if (flags & SHRINK_BLIT)
> +		shrink_blit_fini(fd, &blit);
> +	xe_vm_destroy(fd, vm);
> +	free(bos);
> +
> +	if (flags & SHRINK_FAST)
> +		igt_assert_f(purged > 0, "No purgeable bos were purged\n");
> +
> +	if (flags & SHRINK_FAULT_INJECT) {
> +		int32_t injected = ttm_fault_inject_count();
> +
> +		ttm_fault_inject_restore(0);
> +		igt_info("TTM backup / restore faults injected: %d\n", injected);
> +		/* Without swap space, nothing is backed up or restored. */
> +		igt_assert_f(injected > 0 || swap < XE_BO_SHRINK_FI_MIN_SWAP,
> +			     "No TTM backup / restore faults were injected\n");
> +	}
> +}
> +
> +int igt_main()
> +{
> +	const struct section {
> +		const char *name;
> +		unsigned int flags;
> +	} sections[] = {
> +		{ "shrink-fast", SHRINK_FAST },
> +		{ "shrink-blit-fast", SHRINK_FAST | SHRINK_BLIT },
> +		{ "shrink-fault-inject-fast", SHRINK_FAST | SHRINK_FAULT_INJECT },
> +		{ "shrink-fault-inject-blit-fast",
> +		  SHRINK_FAST | SHRINK_FAULT_INJECT | SHRINK_BLIT },
> +		{ "shrink-private-fast", SHRINK_FAST | SHRINK_PRIVATE },
> +		{ "shrink-fault-inject-private-fast",
> +		  SHRINK_FAST | SHRINK_FAULT_INJECT | SHRINK_PRIVATE },
> +		{ "shrink", 0 },
> +		{ "shrink-blit", SHRINK_BLIT },
> +		{ "purge", SHRINK_PURGE },
> +		{ "purge-blit", SHRINK_PURGE | SHRINK_BLIT },
> +		{ "shrink-fault-inject", SHRINK_FAULT_INJECT },
> +		{ "shrink-fault-inject-blit", SHRINK_FAULT_INJECT | SHRINK_BLIT },
> +		{ "shrink-private", SHRINK_PRIVATE },
> +		{ "purge-private", SHRINK_PURGE | SHRINK_PRIVATE },
> +		{ "shrink-fault-inject-private", SHRINK_FAULT_INJECT | SHRINK_PRIVATE },
> +		{ }
> +	};
> +	int fd;
> +
> +	igt_fixture() {
> +		fd = drm_open_driver(DRIVER_XE);
> +		xe_device_get(fd);
> +	}
> +
> +	for (const struct section *s = sections; s->name; s++)
> +		igt_subtest(s->name)
> +			shrink_test_run_device(fd, s->flags);
> +
> +	igt_fixture() {
> +		ttm_fault_inject_restore(0);
> +		xe_device_put(fd);
> +		drm_close_driver(fd);
> +	}
> +}
> diff --git a/tests/meson.build b/tests/meson.build
> index 519a9e727..2f50f000d 100644
> --- a/tests/meson.build
> +++ b/tests/meson.build
> @@ -284,6 +284,7 @@ intel_kms_progs = [
>   
>   intel_xe_progs = [
>   	'xe_wedged',
> +	'xe_bo_shrink',
>   	'xe_ccs',
>   	'xe_create',
>   	'xe_compute',


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

* ✓ Xe.CI.BAT: success for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev3)
  2026-11-04 16:30 [PATCH i-g-t v2] tests/intel/xe_bo_shrink: Add a user-space shrinker test Thomas Hellström
                   ` (2 preceding siblings ...)
  2026-11-04 18:18 ` [PATCH i-g-t v2] tests/intel/xe_bo_shrink: Add a user-space shrinker test Matthew Auld
@ 2026-11-05  4:51 ` Patchwork
  2026-11-05  5:11 ` ✓ i915.CI.BAT: " Patchwork
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2026-11-05  4:51 UTC (permalink / raw)
  To: Thomas Hellström; +Cc: igt-dev

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

== Series Details ==

Series: tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev3)
URL   : https://patchwork.freedesktop.org/series/176563/
State : success

== Summary ==

CI Bug Log - changes from XEIGT_9177_BAT -> XEIGTPW_16106_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (15 -> 15)
------------------------------

  No changes in participating hosts


Changes
-------

  No changes found


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

  * IGT: IGT_9177 -> IGTPW_16106
  * Linux: xe-6058-34c3200b517db45a621c4963d87759823be13bbd -> xe-6064-3379b0f74f31bfc3746b692822a7700aeeebe15d

  IGTPW_16106: 16106
  IGT_9177: 9177
  xe-6058-34c3200b517db45a621c4963d87759823be13bbd: 34c3200b517db45a621c4963d87759823be13bbd
  xe-6064-3379b0f74f31bfc3746b692822a7700aeeebe15d: 3379b0f74f31bfc3746b692822a7700aeeebe15d

== Logs ==

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

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

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

* ✓ i915.CI.BAT: success for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev3)
  2026-11-04 16:30 [PATCH i-g-t v2] tests/intel/xe_bo_shrink: Add a user-space shrinker test Thomas Hellström
                   ` (3 preceding siblings ...)
  2026-11-05  4:51 ` ✓ Xe.CI.BAT: success for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev3) Patchwork
@ 2026-11-05  5:11 ` Patchwork
  2026-11-05  8:49 ` ✗ Xe.CI.FULL: failure for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev2) Patchwork
  2026-11-05 19:11 ` ✗ Xe.CI.FULL: failure for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev3) Patchwork
  6 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2026-11-05  5:11 UTC (permalink / raw)
  To: Thomas Hellström; +Cc: igt-dev

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

== Series Details ==

Series: tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev3)
URL   : https://patchwork.freedesktop.org/series/176563/
State : success

== Summary ==

CI Bug Log - changes from IGT_9177 -> IGTPW_16106
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_16106/index.html

Participating hosts (40 -> 39)
------------------------------

  Missing    (1): bat-dg2-13 

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

  Here are the changes found in IGTPW_16106 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@i915_selftest@live@sanitycheck:
    - fi-kbl-7567u:       [PASS][1] -> [DMESG-WARN][2] ([i915#13735]) +79 other tests dmesg-warn
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9177/fi-kbl-7567u/igt@i915_selftest@live@sanitycheck.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_16106/fi-kbl-7567u/igt@i915_selftest@live@sanitycheck.html

  * igt@kms_busy@basic@flip:
    - fi-kbl-7567u:       [PASS][3] -> [DMESG-WARN][4] ([i915#13735] / [i915#180])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9177/fi-kbl-7567u/igt@kms_busy@basic@flip.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_16106/fi-kbl-7567u/igt@kms_busy@basic@flip.html

  * igt@kms_pm_rpm@basic-pci-d3-state:
    - fi-kbl-7567u:       [PASS][5] -> [DMESG-WARN][6] ([i915#13735] / [i915#15673] / [i915#180]) +52 other tests dmesg-warn
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_9177/fi-kbl-7567u/igt@kms_pm_rpm@basic-pci-d3-state.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_16106/fi-kbl-7567u/igt@kms_pm_rpm@basic-pci-d3-state.html

  
  [i915#13735]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/13735
  [i915#15673]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15673
  [i915#180]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/180


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

  * CI: CI-20190529 -> None
  * IGT: IGT_9177 -> IGTPW_16106
  * Linux: CI_DRM_19443 -> CI_DRM_19448

  CI-20190529: 20190529
  CI_DRM_19443: d11bbfdac0f3d443b367857ffe683ae6bb80d560 @ git://anongit.freedesktop.org/gfx-ci/linux
  CI_DRM_19448: 3379b0f74f31bfc3746b692822a7700aeeebe15d @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_16106: 16106
  IGT_9177: 9177

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_16106/index.html

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

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

* ✗ Xe.CI.FULL: failure for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev2)
  2026-11-04 16:30 [PATCH i-g-t v2] tests/intel/xe_bo_shrink: Add a user-space shrinker test Thomas Hellström
                   ` (4 preceding siblings ...)
  2026-11-05  5:11 ` ✓ i915.CI.BAT: " Patchwork
@ 2026-11-05  8:49 ` Patchwork
  2026-11-05 19:11 ` ✗ Xe.CI.FULL: failure for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev3) Patchwork
  6 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2026-11-05  8:49 UTC (permalink / raw)
  To: Thomas Hellström; +Cc: igt-dev

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

== Series Details ==

Series: tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev2)
URL   : https://patchwork.freedesktop.org/series/176563/
State : failure

== Summary ==

ERROR: The runconfig 'XEIGTPW_16104_FULL' does not exist in the database

== Logs ==

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

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

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

* ✗ Xe.CI.FULL: failure for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev3)
  2026-11-04 16:30 [PATCH i-g-t v2] tests/intel/xe_bo_shrink: Add a user-space shrinker test Thomas Hellström
                   ` (5 preceding siblings ...)
  2026-11-05  8:49 ` ✗ Xe.CI.FULL: failure for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev2) Patchwork
@ 2026-11-05 19:11 ` Patchwork
  6 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2026-11-05 19:11 UTC (permalink / raw)
  To: Thomas Hellstrom; +Cc: igt-dev

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

== Series Details ==

Series: tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev3)
URL   : https://patchwork.freedesktop.org/series/176563/
State : failure

== Summary ==

CI Bug Log - changes from XEIGT_9177_FULL -> XEIGTPW_16106_FULL
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with XEIGTPW_16106_FULL absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in XEIGTPW_16106_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 (3 -> 3)
------------------------------

  No changes in participating hosts

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

  Here are the unknown changes that may have been introduced in XEIGTPW_16106_FULL:

### IGT changes ###

#### Possible regressions ####

  * igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
    - shard-ptl:          [PASS][1] -> [SKIP][2]
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-ptl-4/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-1/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
    - shard-lnl:          [PASS][3] -> [SKIP][4]
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-lnl-4/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-lnl-3/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html

  
New tests
---------

  New tests have been introduced between XEIGT_9177_FULL and XEIGTPW_16106_FULL:

### New IGT tests (11) ###

  * igt@fbdev@pan:
    - Statuses : 3 pass(s)
    - Exec time: [0.09, 0.11] s

  * igt@kms_pm_lpsp@kms-lpsp@pipe-a-edp-1:
    - Statuses : 2 pass(s)
    - Exec time: [0.26, 0.33] s

  * igt@xe_bo_shrink@shrink-blit-fast:
    - Statuses : 3 pass(s)
    - Exec time: [15.66, 30.83] s

  * igt@xe_bo_shrink@shrink-fast:
    - Statuses : 3 pass(s)
    - Exec time: [23.89, 28.49] s

  * igt@xe_bo_shrink@shrink-fault-inject-blit-fast:
    - Statuses : 3 pass(s)
    - Exec time: [15.76, 47.59] s

  * igt@xe_bo_shrink@shrink-fault-inject-fast:
    - Statuses : 3 pass(s)
    - Exec time: [23.32, 29.67] s

  * igt@xe_bo_shrink@shrink-fault-inject-private-fast:
    - Statuses : 3 pass(s)
    - Exec time: [23.28, 29.58] s

  * igt@xe_bo_shrink@shrink-private-fast:
    - Statuses : 3 pass(s)
    - Exec time: [23.78, 28.57] s

  * igt@xe_exec_store@cachelines:
    - Statuses : 3 pass(s)
    - Exec time: [0.14, 0.45] s

  * igt@xe_exec_store@page-sized:
    - Statuses : 3 pass(s)
    - Exec time: [0.21, 0.59] s

  * igt@xe_vm@partial-unbinds:
    - Statuses : 3 pass(s)
    - Exec time: [0.02, 0.04] s

  

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

  Here are the changes found in XEIGTPW_16106_FULL that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@intel_hwmon@hwmon-write:
    - shard-bmg:          [PASS][5] -> [FAIL][6] ([Intel XE#8583])
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-bmg-2/igt@intel_hwmon@hwmon-write.html
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-4/igt@intel_hwmon@hwmon-write.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing:
    - shard-ptl:          NOTRUN -> [SKIP][7] ([Intel XE#5947])
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@kms_atomic_transition@plane-all-modeset-transition-fencing.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
    - shard-bmg:          NOTRUN -> [SKIP][8] ([Intel XE#2370])
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-5/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip:
    - shard-ptl:          NOTRUN -> [SKIP][9] ([Intel XE#6925])
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-4/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip.html

  * igt@kms_big_fb@linear-64bpp-rotate-90:
    - shard-bmg:          NOTRUN -> [SKIP][10] ([Intel XE#2327]) +2 other tests skip
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-6/igt@kms_big_fb@linear-64bpp-rotate-90.html
    - shard-ptl:          NOTRUN -> [SKIP][11] ([Intel XE#5901]) +3 other tests skip
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-2/igt@kms_big_fb@linear-64bpp-rotate-90.html

  * igt@kms_big_fb@y-tiled-addfb:
    - shard-bmg:          NOTRUN -> [SKIP][12] ([Intel XE#2328] / [Intel XE#7367])
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-5/igt@kms_big_fb@y-tiled-addfb.html
    - shard-ptl:          NOTRUN -> [SKIP][13] ([Intel XE#5850])
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@kms_big_fb@y-tiled-addfb.html

  * igt@kms_big_fb@y-tiled-addfb-size-offset-overflow:
    - shard-ptl:          NOTRUN -> [SKIP][14] ([Intel XE#5851])
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-6/igt@kms_big_fb@y-tiled-addfb-size-offset-overflow.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip:
    - shard-bmg:          NOTRUN -> [SKIP][15] ([Intel XE#1124]) +4 other tests skip
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-6/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip.html

  * igt@kms_big_fb@yf-tiled-8bpp-rotate-270:
    - shard-ptl:          NOTRUN -> [SKIP][16] ([Intel XE#5808]) +4 other tests skip
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-1/igt@kms_big_fb@yf-tiled-8bpp-rotate-270.html

  * igt@kms_bw@connected-linear-tiling-2-displays-target-1920x1080p:
    - shard-ptl:          NOTRUN -> [SKIP][17] ([Intel XE#7679]) +1 other test skip
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@kms_bw@connected-linear-tiling-2-displays-target-1920x1080p.html

  * igt@kms_bw@connected-linear-tiling-4-displays-target-3840x2160p:
    - shard-bmg:          NOTRUN -> [SKIP][18] ([Intel XE#7679])
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-4/igt@kms_bw@connected-linear-tiling-4-displays-target-3840x2160p.html

  * igt@kms_bw@linear-tiling-1-displays-target-1920x1080p:
    - shard-bmg:          [PASS][19] -> [SKIP][20] ([Intel XE#367]) +1 other test skip
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-bmg-7/igt@kms_bw@linear-tiling-1-displays-target-1920x1080p.html
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-5/igt@kms_bw@linear-tiling-1-displays-target-1920x1080p.html

  * igt@kms_bw@linear-tiling-3-displays-target-1920x1080p:
    - shard-ptl:          NOTRUN -> [SKIP][21] ([Intel XE#367]) +1 other test skip
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-6/igt@kms_bw@linear-tiling-3-displays-target-1920x1080p.html

  * igt@kms_bw@linear-tiling-4-displays-target-2560x1440p:
    - shard-bmg:          NOTRUN -> [SKIP][22] ([Intel XE#367]) +3 other tests skip
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-7/igt@kms_bw@linear-tiling-4-displays-target-2560x1440p.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs@pipe-b-dp-2:
    - shard-bmg:          NOTRUN -> [SKIP][23] ([Intel XE#2652]) +3 other tests skip
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-1/igt@kms_ccs@crc-primary-basic-4-tiled-lnl-ccs@pipe-b-dp-2.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs:
    - shard-bmg:          NOTRUN -> [SKIP][24] ([Intel XE#3432]) +1 other test skip
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-2/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs.html
    - shard-ptl:          NOTRUN -> [SKIP][25] ([Intel XE#5822]) +6 other tests skip
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-3/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-rc-ccs-cc:
    - shard-bmg:          NOTRUN -> [SKIP][26] ([Intel XE#2887]) +6 other tests skip
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-5/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-rc-ccs-cc.html

  * igt@kms_chamelium_color@ctm-green-to-red:
    - shard-bmg:          NOTRUN -> [SKIP][27] ([Intel XE#2325] / [Intel XE#7358])
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-6/igt@kms_chamelium_color@ctm-green-to-red.html

  * igt@kms_chamelium_color@gamma:
    - shard-ptl:          NOTRUN -> [SKIP][28] ([Intel XE#5824])
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-8/igt@kms_chamelium_color@gamma.html

  * igt@kms_chamelium_edid@dp-edid-change-during-hibernate:
    - shard-bmg:          NOTRUN -> [SKIP][29] ([Intel XE#2252]) +6 other tests skip
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-5/igt@kms_chamelium_edid@dp-edid-change-during-hibernate.html

  * igt@kms_chamelium_hpd@dp-hpd-after-suspend:
    - shard-ptl:          NOTRUN -> [SKIP][30] ([Intel XE#2252]) +4 other tests skip
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-2/igt@kms_chamelium_hpd@dp-hpd-after-suspend.html

  * igt@kms_color_pipeline@plane-lut1d-pre-ctm3x4@pipe-d-plane-4:
    - shard-bmg:          NOTRUN -> [SKIP][31] ([Intel XE#6969]) +7 other tests skip
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-5/igt@kms_color_pipeline@plane-lut1d-pre-ctm3x4@pipe-d-plane-4.html

  * igt@kms_content_protection@dp-mst-type-1-suspend-resume:
    - shard-ptl:          NOTRUN -> [SKIP][32] ([Intel XE#6974])
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-1/igt@kms_content_protection@dp-mst-type-1-suspend-resume.html

  * igt@kms_content_protection@legacy-hdcp14@pipe-a-dp-2:
    - shard-bmg:          NOTRUN -> [FAIL][33] ([Intel XE#1178] / [Intel XE#3304] / [Intel XE#7374]) +2 other tests fail
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-2/igt@kms_content_protection@legacy-hdcp14@pipe-a-dp-2.html

  * igt@kms_content_protection@lic-type-0-hdcp14@pipe-a-dp-1:
    - shard-bmg:          NOTRUN -> [FAIL][34] ([Intel XE#3304])
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-7/igt@kms_content_protection@lic-type-0-hdcp14@pipe-a-dp-1.html

  * igt@kms_content_protection@mei-interface:
    - shard-bmg:          NOTRUN -> [SKIP][35] ([Intel XE#7642])
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-4/igt@kms_content_protection@mei-interface.html
    - shard-ptl:          NOTRUN -> [SKIP][36] ([Intel XE#5845])
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@kms_content_protection@mei-interface.html

  * igt@kms_content_protection@uevent-hdcp14:
    - shard-bmg:          NOTRUN -> [FAIL][37] ([Intel XE#6707] / [Intel XE#7439]) +1 other test fail
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-3/igt@kms_content_protection@uevent-hdcp14.html

  * igt@kms_cursor_crc@cursor-rapid-movement-64x21:
    - shard-ptl:          NOTRUN -> [SKIP][38] ([Intel XE#5900]) +2 other tests skip
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@kms_cursor_crc@cursor-rapid-movement-64x21.html
    - shard-bmg:          NOTRUN -> [SKIP][39] ([Intel XE#2320])
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-4/igt@kms_cursor_crc@cursor-rapid-movement-64x21.html

  * igt@kms_cursor_legacy@2x-nonblocking-modeset-vs-cursor-atomic:
    - shard-ptl:          NOTRUN -> [SKIP][40] ([Intel XE#5962]) +3 other tests skip
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@kms_cursor_legacy@2x-nonblocking-modeset-vs-cursor-atomic.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-toggle:
    - shard-ptl:          NOTRUN -> [SKIP][41] ([Intel XE#5962] / [Intel XE#7343]) +1 other test skip
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-4/igt@kms_cursor_legacy@cursorb-vs-flipb-toggle.html

  * igt@kms_dp_link_training@non-uhbr-mst-direct-train:
    - shard-ptl:          NOTRUN -> [SKIP][42] ([Intel XE#9532])
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-7/igt@kms_dp_link_training@non-uhbr-mst-direct-train.html

  * igt@kms_dp_link_training@non-uhbr-sst-direct-train:
    - shard-ptl:          NOTRUN -> [SKIP][43] ([Intel XE#9534])
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-8/igt@kms_dp_link_training@non-uhbr-sst-direct-train.html

  * igt@kms_dp_link_training@uhbr-mst-direct-train:
    - shard-bmg:          NOTRUN -> [SKIP][44] ([Intel XE#9527])
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-2/igt@kms_dp_link_training@uhbr-mst-direct-train.html
    - shard-ptl:          NOTRUN -> [SKIP][45] ([Intel XE#9527])
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@kms_dp_link_training@uhbr-mst-direct-train.html

  * igt@kms_dp_link_training@uhbr-sst:
    - shard-bmg:          NOTRUN -> [SKIP][46] ([Intel XE#9535])
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-1/igt@kms_dp_link_training@uhbr-sst.html

  * igt@kms_dsc@dsc-with-bpc-formats:
    - shard-bmg:          NOTRUN -> [SKIP][47] ([Intel XE#8265])
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-4/igt@kms_dsc@dsc-with-bpc-formats.html

  * igt@kms_dsc@dsc-with-formats-bigjoiner:
    - shard-ptl:          NOTRUN -> [SKIP][48] ([Intel XE#5907])
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-1/igt@kms_dsc@dsc-with-formats-bigjoiner.html

  * igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-dirtyfb-tests:
    - shard-bmg:          NOTRUN -> [SKIP][49] ([Intel XE#4422] / [Intel XE#7442])
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-8/igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-dirtyfb-tests.html

  * igt@kms_fbcon_fbt@fbc:
    - shard-bmg:          NOTRUN -> [SKIP][50] ([Intel XE#4156] / [Intel XE#7425])
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-10/igt@kms_fbcon_fbt@fbc.html

  * igt@kms_fbcon_fbt@psr-suspend:
    - shard-bmg:          NOTRUN -> [SKIP][51] ([Intel XE#8680])
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-10/igt@kms_fbcon_fbt@psr-suspend.html

  * igt@kms_feature_discovery@display-4x:
    - shard-bmg:          NOTRUN -> [SKIP][52] ([Intel XE#1138] / [Intel XE#7344])
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-2/igt@kms_feature_discovery@display-4x.html

  * igt@kms_flip@2x-absolute-wf_vblank-interruptible:
    - shard-ptl:          NOTRUN -> [SKIP][53] ([Intel XE#2316]) +3 other tests skip
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-3/igt@kms_flip@2x-absolute-wf_vblank-interruptible.html

  * igt@kms_flip@flip-vs-expired-vblank@b-edp1:
    - shard-lnl:          [PASS][54] -> [FAIL][55] ([Intel XE#301]) +1 other test fail
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html

  * igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling@pipe-a-default-mode:
    - shard-ptl:          NOTRUN -> [SKIP][56] ([Intel XE#5828]) +1 other test skip
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-2/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-64bpp-linear-downscaling@pipe-a-default-mode.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling:
    - shard-bmg:          NOTRUN -> [SKIP][57] ([Intel XE#7178] / [Intel XE#7351]) +2 other tests skip
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-10/igt@kms_flip_scaled_crc@flip-32bpp-ytileccs-to-64bpp-ytile-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling:
    - shard-bmg:          NOTRUN -> [SKIP][58] ([Intel XE#7178] / [Intel XE#7349])
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-8/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-32bpp-xtile-downscaling:
    - shard-ptl:          NOTRUN -> [SKIP][59] ([Intel XE#7178]) +4 other tests skip
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-1/igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-32bpp-xtile-downscaling.html

  * igt@kms_flip_scaled_crc@flip-nv12-linear-to-nv12-linear-reflect-x:
    - shard-bmg:          NOTRUN -> [SKIP][60] ([Intel XE#7179])
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-10/igt@kms_flip_scaled_crc@flip-nv12-linear-to-nv12-linear-reflect-x.html

  * igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-blt:
    - shard-ptl:          NOTRUN -> [SKIP][61] ([Intel XE#5800] / [Intel XE#6312]) +3 other tests skip
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@drrshdr-rgb565-draw-render:
    - shard-ptl:          NOTRUN -> [SKIP][62] ([Intel XE#6312]) +7 other tests skip
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-2/igt@kms_frontbuffer_tracking@drrshdr-rgb565-draw-render.html

  * igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw:
    - shard-bmg:          NOTRUN -> [SKIP][63] ([Intel XE#4141]) +5 other tests skip
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-3/igt@kms_frontbuffer_tracking@fbc-1p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-onoff:
    - shard-ptl:          NOTRUN -> [SKIP][64] ([Intel XE#5812]) +41 other tests skip
   [64]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc:
    - shard-bmg:          NOTRUN -> [SKIP][65] ([Intel XE#2311]) +38 other tests skip
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-9/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcdrrshdr-argb161616f-draw-mmap-wc:
    - shard-bmg:          NOTRUN -> [SKIP][66] ([Intel XE#7061])
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-2/igt@kms_frontbuffer_tracking@fbcdrrshdr-argb161616f-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbchdr-rgb565-draw-mmap-wc:
    - shard-ptl:          NOTRUN -> [SKIP][67] ([Intel XE#7865]) +14 other tests skip
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-1/igt@kms_frontbuffer_tracking@fbchdr-rgb565-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-argb161616f-draw-blt:
    - shard-ptl:          NOTRUN -> [SKIP][68] ([Intel XE#7061]) +1 other test skip
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-2/igt@kms_frontbuffer_tracking@fbcpsrhdr-argb161616f-draw-blt.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][69] ([Intel XE#2313]) +35 other tests skip
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-2/igt@kms_frontbuffer_tracking@psr-1p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@psr-argb161616f-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][70] ([Intel XE#7061] / [Intel XE#7356]) +1 other test skip
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-8/igt@kms_frontbuffer_tracking@psr-argb161616f-draw-blt.html
    - shard-ptl:          NOTRUN -> [SKIP][71] ([Intel XE#7061] / [Intel XE#7356]) +2 other tests skip
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-2/igt@kms_frontbuffer_tracking@psr-argb161616f-draw-blt.html

  * igt@kms_hdr@invalid-hdr:
    - shard-bmg:          [PASS][72] -> [SKIP][73] ([Intel XE#1503])
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-bmg-8/igt@kms_hdr@invalid-hdr.html
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-9/igt@kms_hdr@invalid-hdr.html

  * igt@kms_hdr@static-toggle:
    - shard-ptl:          NOTRUN -> [SKIP][74] ([Intel XE#5917] / [Intel XE#6174])
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-7/igt@kms_hdr@static-toggle.html

  * igt@kms_joiner@basic-big-joiner:
    - shard-bmg:          NOTRUN -> [SKIP][75] ([Intel XE#6901]) +1 other test skip
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-8/igt@kms_joiner@basic-big-joiner.html
    - shard-ptl:          NOTRUN -> [SKIP][76] ([Intel XE#6901]) +1 other test skip
   [76]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-1/igt@kms_joiner@basic-big-joiner.html

  * igt@kms_joiner@basic-force-ultra-joiner:
    - shard-ptl:          NOTRUN -> [SKIP][77] ([Intel XE#6900])
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-8/igt@kms_joiner@basic-force-ultra-joiner.html

  * igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
    - shard-bmg:          NOTRUN -> [SKIP][78] ([Intel XE#7591])
   [78]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-3/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html

  * igt@kms_plane@pixel-format-4-tiled-modifier@pipe-a-plane-5:
    - shard-bmg:          NOTRUN -> [SKIP][79] ([Intel XE#8303]) +3 other tests skip
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-4/igt@kms_plane@pixel-format-4-tiled-modifier@pipe-a-plane-5.html

  * igt@kms_plane@pixel-format-x-tiled-modifier:
    - shard-ptl:          NOTRUN -> [SKIP][80] ([Intel XE#7283]) +3 other tests skip
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@kms_plane@pixel-format-x-tiled-modifier.html

  * igt@kms_plane@pixel-format-y-tiled-modifier:
    - shard-bmg:          NOTRUN -> [SKIP][81] ([Intel XE#7283]) +4 other tests skip
   [81]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-9/igt@kms_plane@pixel-format-y-tiled-modifier.html

  * igt@kms_plane_lowres@tiling-none@pipe-b-edp-1:
    - shard-ptl:          NOTRUN -> [SKIP][82] ([Intel XE#5844]) +4 other tests skip
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@kms_plane_lowres@tiling-none@pipe-b-edp-1.html

  * igt@kms_plane_multiple@2x-tiling-y:
    - shard-bmg:          NOTRUN -> [SKIP][83] ([Intel XE#5021] / [Intel XE#7377])
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-6/igt@kms_plane_multiple@2x-tiling-y.html
    - shard-ptl:          NOTRUN -> [SKIP][84] ([Intel XE#4596] / [Intel XE#5854])
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-2/igt@kms_plane_multiple@2x-tiling-y.html

  * igt@kms_plane_multiple@tiling-y:
    - shard-bmg:          NOTRUN -> [SKIP][85] ([Intel XE#5020] / [Intel XE#7348])
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-10/igt@kms_plane_multiple@tiling-y.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-75@pipe-a:
    - shard-bmg:          NOTRUN -> [SKIP][86] ([Intel XE#2763] / [Intel XE#6886]) +4 other tests skip
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-10/igt@kms_plane_scaling@planes-downscale-factor-0-75@pipe-a.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-75@pipe-b:
    - shard-ptl:          NOTRUN -> [SKIP][87] ([Intel XE#6886]) +4 other tests skip
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-1/igt@kms_plane_scaling@planes-downscale-factor-0-75@pipe-b.html

  * igt@kms_pm_dc@dc5-dpms-negative:
    - shard-ptl:          NOTRUN -> [SKIP][88] ([Intel XE#1131])
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-6/igt@kms_pm_dc@dc5-dpms-negative.html

  * igt@kms_pm_dc@dc6-dpms:
    - shard-lnl:          [PASS][89] -> [FAIL][90] ([Intel XE#8399]) +1 other test fail
   [89]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-lnl-7/igt@kms_pm_dc@dc6-dpms.html
   [90]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-lnl-4/igt@kms_pm_dc@dc6-dpms.html

  * igt@kms_pm_rpm@dpms-non-lpsp:
    - shard-ptl:          NOTRUN -> [SKIP][91] ([Intel XE#5849])
   [91]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-2/igt@kms_pm_rpm@dpms-non-lpsp.html

  * igt@kms_pm_rpm@package-g7:
    - shard-bmg:          NOTRUN -> [SKIP][92] ([Intel XE#6814] / [Intel XE#7428])
   [92]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-6/igt@kms_pm_rpm@package-g7.html

  * igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area:
    - shard-ptl:          NOTRUN -> [SKIP][93] ([Intel XE#7304]) +1 other test skip
   [93]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-7/igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf:
    - shard-bmg:          NOTRUN -> [SKIP][94] ([Intel XE#1489]) +4 other tests skip
   [94]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-3/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf.html
    - shard-ptl:          NOTRUN -> [SKIP][95] ([Intel XE#5858] / [Intel XE#7304]) +1 other test skip
   [95]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf.html

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf@pipe-a-edp-1:
    - shard-ptl:          NOTRUN -> [SKIP][96] ([Intel XE#5858])
   [96]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf@pipe-a-edp-1.html

  * igt@kms_psr2_su@page_flip-xrgb8888:
    - shard-ptl:          NOTRUN -> [SKIP][97] ([Intel XE#7413])
   [97]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-8/igt@kms_psr2_su@page_flip-xrgb8888.html

  * igt@kms_psr@fbc-pr-no-drrs:
    - shard-bmg:          NOTRUN -> [SKIP][98] ([Intel XE#2234] / [Intel XE#2850]) +9 other tests skip
   [98]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-8/igt@kms_psr@fbc-pr-no-drrs.html
    - shard-ptl:          NOTRUN -> [SKIP][99] ([Intel XE#1406]) +1 other test skip
   [99]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-2/igt@kms_psr@fbc-pr-no-drrs.html

  * igt@kms_psr@fbc-psr2-sprite-plane-onoff@edp-1:
    - shard-ptl:          NOTRUN -> [SKIP][100] ([Intel XE#1406] / [Intel XE#5835]) +1 other test skip
   [100]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-3/igt@kms_psr@fbc-psr2-sprite-plane-onoff@edp-1.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
    - shard-ptl:          NOTRUN -> [SKIP][101] ([Intel XE#5813])
   [101]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-8/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html

  * igt@kms_setmode@invalid-clone-single-crtc:
    - shard-ptl:          NOTRUN -> [SKIP][102] ([Intel XE#5910])
   [102]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@kms_setmode@invalid-clone-single-crtc.html

  * igt@kms_sharpness_filter@filter-toggle:
    - shard-bmg:          NOTRUN -> [SKIP][103] ([Intel XE#6503]) +1 other test skip
   [103]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-1/igt@kms_sharpness_filter@filter-toggle.html

  * igt@xe_evict@evict-mixed-threads-large-multi-vm:
    - shard-ptl:          NOTRUN -> [SKIP][104] ([Intel XE#5764]) +1 other test skip
   [104]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-2/igt@xe_evict@evict-mixed-threads-large-multi-vm.html

  * igt@xe_exec_balancer@many-cm-virtual-userptr:
    - shard-ptl:          NOTRUN -> [SKIP][105] ([Intel XE#7482]) +9 other tests skip
   [105]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-4/igt@xe_exec_balancer@many-cm-virtual-userptr.html

  * igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr:
    - shard-bmg:          NOTRUN -> [SKIP][106] ([Intel XE#2322] / [Intel XE#7372]) +3 other tests skip
   [106]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-5/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr.html
    - shard-ptl:          NOTRUN -> [SKIP][107] ([Intel XE#5575] / [Intel XE#7484]) +3 other tests skip
   [107]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-4/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr.html

  * igt@xe_exec_fault_mode@many-execqueues-multi-queue-imm:
    - shard-bmg:          NOTRUN -> [SKIP][108] ([Intel XE#8374]) +8 other tests skip
   [108]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-3/igt@xe_exec_fault_mode@many-execqueues-multi-queue-imm.html

  * igt@xe_exec_fault_mode@many-multi-queue-rebind-imm:
    - shard-ptl:          NOTRUN -> [SKIP][109] ([Intel XE#8374]) +6 other tests skip
   [109]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-4/igt@xe_exec_fault_mode@many-multi-queue-rebind-imm.html

  * igt@xe_exec_multi_queue@exec-sanity:
    - shard-ptl:          NOTRUN -> [SKIP][110] ([Intel XE#8364]) +12 other tests skip
   [110]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@xe_exec_multi_queue@exec-sanity.html

  * igt@xe_exec_multi_queue@max-queues-basic:
    - shard-bmg:          NOTRUN -> [SKIP][111] ([Intel XE#8364]) +16 other tests skip
   [111]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-2/igt@xe_exec_multi_queue@max-queues-basic.html

  * igt@xe_exec_reset@gt-reset-stress:
    - shard-ptl:          [PASS][112] -> [DMESG-WARN][113] ([Intel XE#8652])
   [112]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-ptl-6/igt@xe_exec_reset@gt-reset-stress.html
   [113]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-2/igt@xe_exec_reset@gt-reset-stress.html

  * igt@xe_exec_reset@multi-queue-cat-error-on-secondary:
    - shard-ptl:          NOTRUN -> [SKIP][114] ([Intel XE#8369])
   [114]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@xe_exec_reset@multi-queue-cat-error-on-secondary.html

  * igt@xe_exec_threads@threads-multi-queue-mixed-shared-vm-userptr-rebind:
    - shard-bmg:          NOTRUN -> [SKIP][115] ([Intel XE#8378]) +7 other tests skip
   [115]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-4/igt@xe_exec_threads@threads-multi-queue-mixed-shared-vm-userptr-rebind.html
    - shard-ptl:          NOTRUN -> [SKIP][116] ([Intel XE#8378]) +3 other tests skip
   [116]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@xe_exec_threads@threads-multi-queue-mixed-shared-vm-userptr-rebind.html

  * igt@xe_madvise@atomic-cpu:
    - shard-ptl:          NOTRUN -> [SKIP][117] ([Intel XE#7980])
   [117]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-3/igt@xe_madvise@atomic-cpu.html

  * igt@xe_mmap@vram:
    - shard-ptl:          NOTRUN -> [SKIP][118] ([Intel XE#5776])
   [118]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-2/igt@xe_mmap@vram.html

  * igt@xe_multigpu_svm@mgpu-latency-copy-basic:
    - shard-bmg:          NOTRUN -> [SKIP][119] ([Intel XE#6964]) +1 other test skip
   [119]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-6/igt@xe_multigpu_svm@mgpu-latency-copy-basic.html
    - shard-ptl:          NOTRUN -> [SKIP][120] ([Intel XE#6964]) +1 other test skip
   [120]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-2/igt@xe_multigpu_svm@mgpu-latency-copy-basic.html

  * igt@xe_page_reclaim@random:
    - shard-ptl:          NOTRUN -> [SKIP][121] ([Intel XE#7793]) +1 other test skip
   [121]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-2/igt@xe_page_reclaim@random.html
    - shard-bmg:          NOTRUN -> [SKIP][122] ([Intel XE#7793])
   [122]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-5/igt@xe_page_reclaim@random.html

  * igt@xe_pat@xa-app-transient-media-off:
    - shard-bmg:          NOTRUN -> [SKIP][123] ([Intel XE#7590]) +1 other test skip
   [123]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-6/igt@xe_pat@xa-app-transient-media-off.html
    - shard-ptl:          NOTRUN -> [SKIP][124] ([Intel XE#7590])
   [124]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-8/igt@xe_pat@xa-app-transient-media-off.html

  * igt@xe_pm@s3-d3hot-basic-exec:
    - shard-ptl:          NOTRUN -> [SKIP][125] ([Intel XE#6867])
   [125]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-5/igt@xe_pm@s3-d3hot-basic-exec.html

  * igt@xe_pm@s4-basic:
    - shard-ptl:          [PASS][126] -> [ABORT][127] ([Intel XE#9362])
   [126]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-ptl-2/igt@xe_pm@s4-basic.html
   [127]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-7/igt@xe_pm@s4-basic.html

  * igt@xe_pm_residency@gt-c6-freeze@gt0:
    - shard-bmg:          [PASS][128] -> [FAIL][129] ([Intel XE#9254])
   [128]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-bmg-7/igt@xe_pm_residency@gt-c6-freeze@gt0.html
   [129]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-7/igt@xe_pm_residency@gt-c6-freeze@gt0.html

  * igt@xe_prefetch_fault@prefetch-fault-svm:
    - shard-ptl:          NOTRUN -> [SKIP][130] ([Intel XE#7599])
   [130]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-2/igt@xe_prefetch_fault@prefetch-fault-svm.html

  * igt@xe_pxp@pxp-stale-queue-post-termination-irq:
    - shard-bmg:          NOTRUN -> [SKIP][131] ([Intel XE#4733] / [Intel XE#7417]) +3 other tests skip
   [131]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-7/igt@xe_pxp@pxp-stale-queue-post-termination-irq.html

  * igt@xe_query@multigpu-query-mem-usage:
    - shard-bmg:          NOTRUN -> [SKIP][132] ([Intel XE#944])
   [132]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-7/igt@xe_query@multigpu-query-mem-usage.html

  * igt@xe_vm@overcommit-fault-vram-lr-no-overcommit:
    - shard-ptl:          NOTRUN -> [SKIP][133] ([Intel XE#9597]) +1 other test skip
   [133]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-2/igt@xe_vm@overcommit-fault-vram-lr-no-overcommit.html

  
#### Possible fixes ####

  * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
    - shard-bmg:          [INCOMPLETE][134] ([Intel XE#7084] / [Intel XE#8150]) -> [PASS][135] +1 other test pass
   [134]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-bmg-4/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
   [135]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-10/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic:
    - shard-bmg:          [FAIL][136] ([Intel XE#7809]) -> [PASS][137]
   [136]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-bmg-8/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html
   [137]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-2/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html

  * igt@kms_flip@flip-vs-absolute-wf_vblank:
    - shard-lnl:          [FAIL][138] ([Intel XE#5408] / [Intel XE#6266]) -> [PASS][139] +1 other test pass
   [138]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-lnl-4/igt@kms_flip@flip-vs-absolute-wf_vblank.html
   [139]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-lnl-2/igt@kms_flip@flip-vs-absolute-wf_vblank.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1:
    - shard-lnl:          [FAIL][140] ([Intel XE#301] / [Intel XE#3149]) -> [PASS][141]
   [140]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html
   [141]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html

  * igt@kms_flip@flip-vs-expired-vblank@a-edp1:
    - shard-lnl:          [FAIL][142] ([Intel XE#301]) -> [PASS][143]
   [142]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html
   [143]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html

  * igt@kms_hdmi_audio_bw@audio-bw-hblank160:
    - shard-bmg:          [FAIL][144] ([Intel XE#9313]) -> [PASS][145]
   [144]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-bmg-7/igt@kms_hdmi_audio_bw@audio-bw-hblank160.html
   [145]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-9/igt@kms_hdmi_audio_bw@audio-bw-hblank160.html

  * igt@kms_pm_dc@dc5-psr:
    - shard-lnl:          [FAIL][146] ([Intel XE#8399]) -> [PASS][147]
   [146]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-lnl-3/igt@kms_pm_dc@dc5-psr.html
   [147]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-lnl-7/igt@kms_pm_dc@dc5-psr.html

  * igt@xe_configfs@ctx-restore-post-bb-invalid:
    - shard-bmg:          [ABORT][148] ([Intel XE#9463]) -> [PASS][149]
   [148]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-bmg-4/igt@xe_configfs@ctx-restore-post-bb-invalid.html
   [149]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-9/igt@xe_configfs@ctx-restore-post-bb-invalid.html

  * igt@xe_pm_residency@gt-c6-freeze@gt1:
    - shard-bmg:          [FAIL][150] ([Intel XE#9254]) -> [PASS][151] +1 other test pass
   [150]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-bmg-7/igt@xe_pm_residency@gt-c6-freeze@gt1.html
   [151]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-7/igt@xe_pm_residency@gt-c6-freeze@gt1.html

  * igt@xe_pm_residency@idle-residency@gt0:
    - shard-bmg:          [FAIL][152] ([Intel XE#9725]) -> [PASS][153]
   [152]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-bmg-1/igt@xe_pm_residency@idle-residency@gt0.html
   [153]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-5/igt@xe_pm_residency@idle-residency@gt0.html

  
#### Warnings ####

  * igt@kms_flip@flip-vs-expired-vblank-interruptible:
    - shard-lnl:          [FAIL][154] ([Intel XE#301] / [Intel XE#3149]) -> [FAIL][155] ([Intel XE#301])
   [154]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
   [155]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank-interruptible.html

  * igt@kms_hdmi_audio_bw@suspend-disk-audio-recovery:
    - shard-bmg:          [FAIL][156] ([Intel XE#9319] / [Intel XE#9346]) -> [FAIL][157] ([Intel XE#9346])
   [156]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-bmg-4/igt@kms_hdmi_audio_bw@suspend-disk-audio-recovery.html
   [157]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-7/igt@kms_hdmi_audio_bw@suspend-disk-audio-recovery.html

  * igt@kms_hdr@brightness-with-hdr:
    - shard-bmg:          [SKIP][158] ([Intel XE#3544]) -> [SKIP][159] ([Intel XE#3374] / [Intel XE#3544])
   [158]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-bmg-1/igt@kms_hdr@brightness-with-hdr.html
   [159]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-7/igt@kms_hdr@brightness-with-hdr.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-bmg:          [SKIP][160] ([Intel XE#2509] / [Intel XE#7437]) -> [SKIP][161] ([Intel XE#2426] / [Intel XE#5848])
   [160]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-bmg-1/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
   [161]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-bmg-2/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@xe_pm@s4-vm-bind-userptr:
    - shard-ptl:          [ABORT][162] ([Intel XE#9362]) -> [DMESG-WARN][163] ([Intel XE#7727])
   [162]: https://intel-gfx-ci.01.org/tree/intel-xe/IGT_9177/shard-ptl-3/igt@xe_pm@s4-vm-bind-userptr.html
   [163]: https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_16106/shard-ptl-1/igt@xe_pm@s4-vm-bind-userptr.html

  
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1131]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1131
  [Intel XE#1138]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1138
  [Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
  [Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
  [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#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
  [Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
  [Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
  [Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
  [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#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
  [Intel XE#2328]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2328
  [Intel XE#2370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2370
  [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#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
  [Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
  [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#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
  [Intel XE#3304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3304
  [Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
  [Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
  [Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
  [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#4156]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4156
  [Intel XE#4422]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4422
  [Intel XE#4596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4596
  [Intel XE#4733]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4733
  [Intel XE#5020]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5020
  [Intel XE#5021]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5021
  [Intel XE#5408]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5408
  [Intel XE#5575]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5575
  [Intel XE#5764]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5764
  [Intel XE#5776]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5776
  [Intel XE#5800]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5800
  [Intel XE#5808]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5808
  [Intel XE#5812]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5812
  [Intel XE#5813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5813
  [Intel XE#5822]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5822
  [Intel XE#5824]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5824
  [Intel XE#5828]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5828
  [Intel XE#5835]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5835
  [Intel XE#5844]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5844
  [Intel XE#5845]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5845
  [Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
  [Intel XE#5849]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5849
  [Intel XE#5850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5850
  [Intel XE#5851]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5851
  [Intel XE#5854]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5854
  [Intel XE#5858]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5858
  [Intel XE#5900]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5900
  [Intel XE#5901]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5901
  [Intel XE#5907]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5907
  [Intel XE#5910]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5910
  [Intel XE#5917]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5917
  [Intel XE#5947]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5947
  [Intel XE#5962]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5962
  [Intel XE#6174]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6174
  [Intel XE#6266]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6266
  [Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
  [Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
  [Intel XE#6707]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6707
  [Intel XE#6814]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6814
  [Intel XE#6867]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6867
  [Intel XE#6886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6886
  [Intel XE#6900]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6900
  [Intel XE#6901]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6901
  [Intel XE#6925]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6925
  [Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
  [Intel XE#6969]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6969
  [Intel XE#6974]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6974
  [Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
  [Intel XE#7084]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7084
  [Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
  [Intel XE#7179]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7179
  [Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
  [Intel XE#7304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7304
  [Intel XE#7343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7343
  [Intel XE#7344]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7344
  [Intel XE#7348]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7348
  [Intel XE#7349]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7349
  [Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
  [Intel XE#7356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7356
  [Intel XE#7358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7358
  [Intel XE#7367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7367
  [Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
  [Intel XE#7374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7374
  [Intel XE#7377]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7377
  [Intel XE#7413]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7413
  [Intel XE#7417]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7417
  [Intel XE#7425]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7425
  [Intel XE#7428]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7428
  [Intel XE#7437]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7437
  [Intel XE#7439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7439
  [Intel XE#7442]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7442
  [Intel XE#7482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7482
  [Intel XE#7484]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7484
  [Intel XE#7590]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7590
  [Intel XE#7591]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7591
  [Intel XE#7599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7599
  [Intel XE#7642]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7642
  [Intel XE#7679]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7679
  [Intel XE#7727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7727
  [Intel XE#7793]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7793
  [Intel XE#7809]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7809
  [Intel XE#7865]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7865
  [Intel XE#7980]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7980
  [Intel XE#8150]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8150
  [Intel XE#8265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8265
  [Intel XE#8303]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8303
  [Intel XE#8364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8364
  [Intel XE#8369]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8369
  [Intel XE#8374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8374
  [Intel XE#8378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8378
  [Intel XE#8399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8399
  [Intel XE#8583]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8583
  [Intel XE#8652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8652
  [Intel XE#8680]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8680
  [Intel XE#9254]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9254
  [Intel XE#9313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9313
  [Intel XE#9319]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9319
  [Intel XE#9346]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9346
  [Intel XE#9362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9362
  [Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
  [Intel XE#9463]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9463
  [Intel XE#9527]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9527
  [Intel XE#9532]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9532
  [Intel XE#9534]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9534
  [Intel XE#9535]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9535
  [Intel XE#9597]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9597
  [Intel XE#9725]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9725


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

  * IGT: IGT_9177 -> IGTPW_16106
  * Linux: xe-6058-34c3200b517db45a621c4963d87759823be13bbd -> xe-6064-3379b0f74f31bfc3746b692822a7700aeeebe15d

  IGTPW_16106: 16106
  IGT_9177: 9177
  xe-6058-34c3200b517db45a621c4963d87759823be13bbd: 34c3200b517db45a621c4963d87759823be13bbd
  xe-6064-3379b0f74f31bfc3746b692822a7700aeeebe15d: 3379b0f74f31bfc3746b692822a7700aeeebe15d

== Logs ==

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

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

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

end of thread, other threads:[~2026-11-05 19:12 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-04 16:30 [PATCH i-g-t v2] tests/intel/xe_bo_shrink: Add a user-space shrinker test Thomas Hellström
2026-11-04 17:23 ` ✓ Xe.CI.BAT: success for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev2) Patchwork
2026-11-04 17:40 ` ✓ i915.CI.BAT: " Patchwork
2026-11-04 18:18 ` [PATCH i-g-t v2] tests/intel/xe_bo_shrink: Add a user-space shrinker test Matthew Auld
2026-11-05  4:51 ` ✓ Xe.CI.BAT: success for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev3) Patchwork
2026-11-05  5:11 ` ✓ i915.CI.BAT: " Patchwork
2026-11-05  8:49 ` ✗ Xe.CI.FULL: failure for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev2) Patchwork
2026-11-05 19:11 ` ✗ Xe.CI.FULL: failure for tests/intel/xe_bo_shrink: Add a user-space shrinker test (rev3) Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox