All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/xe/svm: Take write access only for GC attribute resets
@ 2026-10-26 12:20 Arvind Yadav
  2026-10-26 14:58 ` ✗ CI.checkpatch: warning for " Patchwork
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Arvind Yadav @ 2026-10-26 12:20 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom

Fault service holds vm->lock for read while using a VMA. SVM garbage
collection also runs under the read lock and can reset AUTORESET
attributes. The reset can split or merge VMAs and immediately free a
VMA that another fault worker is still using. The GC mutex serializes
collectors but does not protect VMA readers.

Keep backing collection under read access when no attribute change is
needed. Defer ranges requiring a reset and return -EAGAIN so the caller
can release its read-side state and collect with write access.

In fault service, discard the old VMA pointer before releasing the read
lock. After acquiring write access, recheck VM state and collect the
queued ranges. Downgrade to read and repeat VMA lookup, permission checks
and advice-dependent setup.

Drain GC under the existing write lock before madvise, bind and attribute
query. Require write access for VMA changes while retaining parallel
fault service when no reset is needed.

[ 2163.042338] ==================================================================
[ 2163.042353] BUG: KASAN: slab-use-after-free in __xe_svm_handle_pagefault+0x297/0x1460 [xe]
[ 2163.042815] Read of size 8 at addr ffff88813f879b70 by task kworker/u65:3/3115

[ 2163.042834] CPU: 0 UID: 0 PID: 3115 Comm: kworker/u65:3 Kdump: loaded Tainted: G S      W  O        7.3.0-lgci-xe-svm-22oct #16 PREEMPT(full)
[ 2163.042841] Tainted: [S]=CPU_OUT_OF_SPEC, [W]=WARN, [O]=OOT_MODULE
[ 2163.042842] Hardware name: ASUS System Product Name/PRIME Z790-P WIFI, BIOS 1002 03/31/2023
[ 2163.042845] Workqueue: xe_page_fault_work_queue xe_pagefault_queue_work [xe]
[ 2163.043326] Call Trace:
[ 2163.043327]  <TASK>
[ 2163.043330]  dump_stack_lvl+0x91/0xf0
[ 2163.043336]  print_report+0xd1/0x610
[ 2163.043340]  ? __xe_svm_handle_pagefault+0x297/0x1460 [xe]
[ 2163.043825]  ? __virt_addr_valid+0x1b2/0x350
[ 2163.043831]  ? kasan_complete_mode_report_info+0x6a/0x210
[ 2163.043836]  ? __xe_svm_handle_pagefault+0x297/0x1460 [xe]
[ 2163.044340]  kasan_report+0xa3/0xe0
[ 2163.044344]  ? __xe_svm_handle_pagefault+0x297/0x1460 [xe]
[ 2163.044881]  __asan_load8+0x8b/0xe0
[ 2163.044885]  __xe_svm_handle_pagefault+0x297/0x1460 [xe]
[ 2163.045456]  ? lock_acquire+0x1b0/0x320
[ 2163.045461]  ? xe_vm_find_overlapping_vma+0x88/0x310 [xe]
[ 2163.046072]  ? __pfx___xe_svm_handle_pagefault+0x10/0x10 [xe]
[ 2163.046679]  ? rcu_is_watching+0x21/0x60
[ 2163.046684]  ? __mutex_lock+0x1172/0x18b0
[ 2163.046690]  ? find_held_lock+0x31/0x90
[ 2163.046696]  ? xe_vm_find_overlapping_vma+0xa1/0x310 [xe]
[ 2163.047273]  ? __kasan_check_write+0x14/0x30
[ 2163.047278]  ? __mutex_unlock_slowpath+0x10f/0x660
[ 2163.047285]  ? __pfx___mutex_unlock_slowpath+0x10/0x10
[ 2163.047295]  ? mutex_unlock+0x12/0x20
[ 2163.047299]  ? xe_vm_find_overlapping_vma+0xa1/0x310 [xe]
[ 2163.047844]  xe_svm_handle_pagefault+0x5c/0x140 [xe]
[ 2163.048355]  xe_pagefault_queue_work+0x19ad/0x2450 [xe]
[ 2163.048843]  process_one_work+0x5ae/0xdd0
[ 2163.048847]  ? __lock_acquire+0x58a/0x2820
[ 2163.048850]  ? __schedule+0x22a6/0x3670
[ 2163.048858]  ? __pfx_process_one_work+0x10/0x10
[ 2163.048866]  ? __pfx_xe_pagefault_queue_work+0x10/0x10 [xe]
[ 2163.049345]  ? assign_work+0xe4/0x1d0
[ 2163.049350]  worker_thread+0x3b4/0x6a0
[ 2163.049357]  ? __pfx_worker_thread+0x10/0x10
[ 2163.049361]  kthread+0x204/0x250
[ 2163.049364]  ? kthread+0xf1/0x250
[ 2163.049369]  ? __pfx_kthread+0x10/0x10
[ 2163.049372]  ret_from_fork+0x465/0x6a0
[ 2163.049377]  ? __pfx_ret_from_fork+0x10/0x10
[ 2163.049381]  ? __switch_to+0x26f/0x740
[ 2163.049386]  ? __pfx_kthread+0x10/0x10
[ 2163.049390]  ret_from_fork_asm+0x1a/0x30
[ 2163.049399]  </TASK>

[ 2163.049654] Allocated by task 522570:
[ 2163.049662]  kasan_save_stack+0x26/0x60
[ 2163.049668]  kasan_save_track+0x14/0x40
[ 2163.049672]  kasan_save_alloc_info+0x37/0x60
[ 2163.049677]  __kasan_kmalloc+0xc3/0xd0
[ 2163.049681]  __kmalloc_cache_noprof+0x2b4/0x6c0
[ 2163.049686]  xe_vma_create+0xe3/0xe60 [xe]
[ 2163.050170]  new_vma+0x416/0x540 [xe]
[ 2163.050654]  vm_bind_ioctl_ops_parse+0xc3e/0x1110 [xe]
[ 2163.051139]  xe_vm_alloc_vma+0x243/0xd60 [xe]
[ 2163.051623]  xe_vm_alloc_madvise_vma+0x92/0xd0 [xe]
[ 2163.052107]  xe_vm_madvise_ioctl+0x783/0x14f0 [xe]
[ 2163.052591]  drm_ioctl_kernel+0x143/0x200
[ 2163.052597]  drm_ioctl+0x419/0x790
[ 2163.052600]  xe_drm_ioctl+0x9e/0xf0 [xe]
[ 2163.053074]  __x64_sys_ioctl+0xd5/0x130
[ 2163.053079]  x64_sys_call+0x2b5/0x27e0
[ 2163.053084]  do_syscall_64+0xef/0x6c0
[ 2163.053088]  entry_SYSCALL_64_after_hwframe+0x76/0x7e

[ 2163.053098] Freed by task 17929:
[ 2163.053105]  kasan_save_stack+0x26/0x60
[ 2163.053110]  kasan_save_track+0x14/0x40
[ 2163.053114]  kasan_save_free_info+0x3b/0x60
[ 2163.053118]  __kasan_slab_free+0x6f/0xa0
[ 2163.053123]  kfree+0x2bb/0x600
[ 2163.053127]  xe_vma_free+0x5a/0x70 [xe]
[ 2163.053610]  xe_vma_destroy_late+0xae/0xf0 [xe]
[ 2163.054093]  xe_vma_destroy+0xda/0xf20 [xe]
[ 2163.054576]  xe_vm_alloc_vma+0x304/0xd60 [xe]
[ 2163.055059]  xe_vm_alloc_cpu_addr_mirror_vma+0x8f/0xd0 [xe]
[ 2163.055543]  xe_svm_garbage_collector+0x388/0x5d0 [xe]
[ 2163.056028]  xe_svm_garbage_collector_work_func+0x2a/0x40 [xe]
[ 2163.056512]  process_one_work+0x5ae/0xdd0
[ 2163.056517]  worker_thread+0x3b4/0x6a0
[ 2163.056521]  kthread+0x204/0x250
[ 2163.056525]  ret_from_fork+0x465/0x6a0
[ 2163.056530]  ret_from_fork_asm+0x1a/0x30

Fixes: 941bcc1a4bbf ("drm/xe: Fine grained page fault locking")
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Assisted-by: LLM
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
 drivers/gpu/drm/xe/xe_pagefault.c  |  37 +++++-
 drivers/gpu/drm/xe/xe_svm.c        | 179 ++++++++++++++++++++++-------
 drivers/gpu/drm/xe/xe_svm.h        |   8 ++
 drivers/gpu/drm/xe/xe_vm.c         |  54 +++++----
 drivers/gpu/drm/xe/xe_vm_madvise.c |   5 +
 5 files changed, 212 insertions(+), 71 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_pagefault.c b/drivers/gpu/drm/xe/xe_pagefault.c
index 5247321c805e..9e1377df9d01 100644
--- a/drivers/gpu/drm/xe/xe_pagefault.c
+++ b/drivers/gpu/drm/xe/xe_pagefault.c
@@ -270,8 +270,9 @@ static int xe_pagefault_service(struct xe_pagefault *pf)
 	struct xe_device *xe = gt_to_xe(gt);
 	struct xe_vm *vm;
 	struct xe_vma *vma = NULL;
+	enum xe_pagefault_error error;
 	int err;
-	bool atomic;
+	bool atomic, svm_relookup = false;
 	u32 asid = FIELD_GET(XE_PAGEFAULT_ASID_MASK, pf->consumer.id);
 
 	/* Producer flagged this fault to be nacked */
@@ -297,10 +298,13 @@ static int xe_pagefault_service(struct xe_pagefault *pf)
 		goto unlock_vm;
 	}
 
+lookup_vma:
 	vma = xe_vm_find_vma_by_addr(vm, xe_pagefault_addr(pf));
 	if (!vma) {
 		err = -EINVAL;
-		xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_VMA_NOT_FOUND);
+		xe_pagefault_set_error(pf, svm_relookup ?
+				       XE_PAGEFAULT_ERROR_SVM_VMA_NOT_FOUND :
+				       XE_PAGEFAULT_ERROR_VMA_NOT_FOUND);
 		goto unlock_vm;
 	}
 
@@ -313,11 +317,36 @@ static int xe_pagefault_service(struct xe_pagefault *pf)
 
 	atomic = xe_pagefault_access_is_atomic(pf->consumer.access_type);
 
-	if (xe_vma_is_cpu_addr_mirror(vma))
+	if (xe_vma_is_cpu_addr_mirror(vma)) {
 		err = xe_svm_handle_pagefault(vm, vma, pf, gt,
 					      xe_pagefault_addr(pf), atomic);
-	else
+		if (err == -EAGAIN) {
+			/* GC needs to change VMAs. Drop all read-side state. */
+			vma = NULL;
+			up_read(&vm->lock);
+			down_write(&vm->lock);
+
+			if (xe_vm_is_closed(vm)) {
+				err = -ENOENT;
+				error = XE_PAGEFAULT_ERROR_VM_CLOSED;
+			} else {
+				err = xe_svm_garbage_collect(vm);
+				error = XE_PAGEFAULT_ERROR_SVM_GARBAGE_COLLECTOR;
+			}
+
+			downgrade_write(&vm->lock);
+			if (err) {
+				xe_pagefault_set_error(pf, error);
+				goto unlock_vm;
+			}
+
+			xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_NONE);
+			svm_relookup = true;
+			goto lookup_vma;
+		}
+	} else {
 		err = xe_pagefault_handle_vma(gt, vma, pf, atomic);
+	}
 
 unlock_vm:
 	if (err)
diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
index bc6902b5bf57..d19cb0c4b154 100644
--- a/drivers/gpu/drm/xe/xe_svm.c
+++ b/drivers/gpu/drm/xe/xe_svm.c
@@ -356,12 +356,36 @@ static void xe_vma_set_default_attributes(struct xe_vma *vma)
 	xe_vma_mem_attr_copy(&vma->attr, &default_attr);
 }
 
+/* vm->lock keeps the VMA and its attributes stable during this check. */
+static bool xe_svm_range_needs_attr_reset(struct xe_vm *vm, u64 start)
+{
+	struct xe_vma *vma;
+	u64 end;
+
+	lockdep_assert_held(&vm->lock);
+
+	vma = xe_vm_find_vma_by_addr(vm, start);
+	if (!vma || !(vma->gpuva.flags & XE_VMA_MADV_AUTORESET))
+		return false;
+
+	if (!xe_vma_has_default_mem_attrs(vma))
+		return true;
+
+	start = xe_vma_start(vma);
+	end = xe_vma_end(vma);
+	xe_vm_find_cpu_addr_mirror_vma_range(vm, &start, &end);
+
+	return start != xe_vma_start(vma) || end != xe_vma_end(vma);
+}
+
 static int xe_svm_range_set_default_attr(struct xe_vm *vm, u64 start, u64 end)
 {
 	struct xe_vma *vma;
 	bool has_default_attr;
 	int err;
 
+	lockdep_assert_held_write(&vm->lock);
+
 	vma = xe_vm_find_vma_by_addr(vm, start);
 	if (!vma)
 		return -EINVAL;
@@ -397,70 +421,134 @@ static int xe_svm_range_set_default_attr(struct xe_vm *vm, u64 start, u64 end)
 		return err;
 	}
 
-	/*
-	 * On call from xe_svm_handle_pagefault original VMA might be changed
-	 * signal this to lookup for VMA again.
-	 */
-	return -EAGAIN;
+	return 0;
 }
 
-static int xe_svm_garbage_collector(struct xe_vm *vm)
+/*
+ * With reset_attrs false, defer ranges requiring a VMA change and return
+ * -EAGAIN after collecting the remaining ready ranges in the batch. The
+ * caller must release all read-side state before collecting them with
+ * vm->lock held for write.
+ */
+static int xe_svm_garbage_collector(struct xe_vm *vm, bool reset_attrs)
 {
 	struct xe_svm_range *range;
-	u64 range_start;
-	u64 range_end;
-	int err, ret = 0;
+	LIST_HEAD(pending);
+	LIST_HEAD(deferred);
+	u64 range_start, range_end;
+	bool needs_reset;
+	int err = 0, ret = 0;
 
 	lockdep_assert_held(&vm->lock);
+	if (reset_attrs)
+		lockdep_assert_held_write(&vm->lock);
 
 	if (xe_vm_is_closed_or_banned(vm))
 		return -ENOENT;
 
 	guard(mutex)(&vm->svm.garbage_collector.lock);
 
+	/* Process a finite batch, excluding events queued during this pass. */
+	spin_lock(&vm->svm.garbage_collector.list_lock);
+	if (list_empty(&vm->svm.garbage_collector.range_list)) {
+		spin_unlock(&vm->svm.garbage_collector.list_lock);
+		return 0;
+	}
+	list_splice_init(&vm->svm.garbage_collector.range_list, &pending);
+	spin_unlock(&vm->svm.garbage_collector.list_lock);
+
 	for (;;) {
 		spin_lock(&vm->svm.garbage_collector.list_lock);
-		range = list_first_entry_or_null(&vm->svm.garbage_collector.range_list,
-						 typeof(*range),
+		range = list_first_entry_or_null(&pending, typeof(*range),
 						 garbage_collector_link);
-		if (!range)
+		if (!range) {
+			spin_unlock(&vm->svm.garbage_collector.list_lock);
 			break;
+		}
 
 		range_start = xe_svm_range_start(range);
 		range_end = xe_svm_range_end(range);
-
 		list_del(&range->garbage_collector_link);
 		spin_unlock(&vm->svm.garbage_collector.list_lock);
 
+		/*
+		 * Keep the backing range alive until its attributes can be
+		 * reset. The GC mutex excludes other collectors and explicit
+		 * range removal requires vm->lock for write.
+		 */
+		needs_reset = xe_svm_range_needs_attr_reset(vm, range_start);
+		if (needs_reset && !reset_attrs) {
+			spin_lock(&vm->svm.garbage_collector.list_lock);
+			list_add_tail(&range->garbage_collector_link, &deferred);
+			spin_unlock(&vm->svm.garbage_collector.list_lock);
+			ret = -EAGAIN;
+			continue;
+		}
+
 		err = __xe_svm_garbage_collector(vm, range);
 		if (err) {
 			drm_warn(&vm->xe->drm,
 				 "Garbage collection failed: %pe\n",
 				 ERR_PTR(err));
+			/* Leave the failed range in the tree for VM teardown. */
 			xe_vm_kill(vm, true);
-			return err;
+			goto out;
 		}
 
-		err = xe_svm_range_set_default_attr(vm, range_start, range_end);
-		if (err) {
-			if (err == -EAGAIN)
-				ret = -EAGAIN;
-			else
-				return err;
+		if (needs_reset) {
+			err = xe_svm_range_set_default_attr(vm, range_start, range_end);
+			if (err)
+				goto out;
 		}
 	}
+
+out:
+	/* Restore ranges not yet processed, including deferred resets. */
+	spin_lock(&vm->svm.garbage_collector.list_lock);
+	list_splice_tail_init(&pending, &vm->svm.garbage_collector.range_list);
+	list_splice_tail_init(&deferred, &vm->svm.garbage_collector.range_list);
 	spin_unlock(&vm->svm.garbage_collector.list_lock);
 
-	return ret;
+	return err ?: ret;
+}
+
+/**
+ * xe_svm_garbage_collect() - Collect SVM ranges and reset their attributes
+ * @vm: The VM, with vm->lock held for write.
+ *
+ * Process one batch of queued ranges, including attribute resets. Ranges
+ * queued during this pass are left for a later collection.
+ *
+ * Call before changing advice or bindings, or querying attributes, so the
+ * batch is reset before applying new advice or reporting attributes.
+ * No VMA pointer may be retained across this call.
+ *
+ * Return: 0 on success, negative error code on error.
+ */
+int xe_svm_garbage_collect(struct xe_vm *vm)
+{
+	lockdep_assert_held_write(&vm->lock);
+
+	if (!xe_vm_in_fault_mode(vm))
+		return 0;
+
+	return xe_svm_garbage_collector(vm, true);
 }
 
 static void xe_svm_garbage_collector_work_func(struct work_struct *w)
 {
 	struct xe_vm *vm = container_of(w, struct xe_vm,
 					svm.garbage_collector.work);
+	int err = 0;
 
-	guard(rwsem_read)(&vm->lock);
-	xe_svm_garbage_collector(vm);
+	scoped_guard(rwsem_read, &vm->lock)
+		err = xe_svm_garbage_collector(vm, false);
+
+	if (err != -EAGAIN)
+		return;
+
+	guard(rwsem_write)(&vm->lock);
+	xe_svm_garbage_collect(vm);
 }
 
 #if IS_ENABLED(CONFIG_DRM_XE_PAGEMAP)
@@ -1302,13 +1390,15 @@ static int __xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
 	if (range) {
 		mutex_unlock(&range->lock);
 		drm_gpusvm_range_put(&range->base);
-	}
 
-	/* Always process UNMAPs first so view SVM ranges is current */
-	err = xe_svm_garbage_collector(vm);
-	if (err) {
-		xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_SVM_GARBAGE_COLLECTOR);
-		return err;
+		/* The caller collected before the initial service attempt. */
+		err = xe_svm_garbage_collector(vm, false);
+		if (err) {
+			if (err != -EAGAIN)
+				xe_pagefault_set_error(pf,
+						      XE_PAGEFAULT_ERROR_SVM_GARBAGE_COLLECTOR);
+			return err;
+		}
 	}
 
 	dpagemap = ctx.devmem_only ? xe_tile_local_pagemap(tile) :
@@ -1468,14 +1558,28 @@ static int __xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
  * Create GPU bindings for a SVM page fault. Optionally migrate to device
  * memory.
  *
- * Return: 0 on success, negative error code on error.
+ * The caller must hold vm->lock for read. On -EAGAIN, discard @vma before
+ * releasing that lock. Collect with write access, then repeat VMA lookup
+ * and permission checks before retrying.
+ *
+ * Return: 0 on success, -EAGAIN if the caller must collect with write
+ * access and repeat VMA lookup, or another negative error code on error.
  */
 int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
 			    struct xe_pagefault *pf, struct xe_gt *gt,
 			    u64 fault_addr, bool atomic)
 {
 	int need_vram, ret;
-retry:
+
+	/* Consume older UNMAPs before reading advice or building the context. */
+	ret = xe_svm_garbage_collector(vm, false);
+	if (ret) {
+		if (ret != -EAGAIN)
+			xe_pagefault_set_error(pf,
+					       XE_PAGEFAULT_ERROR_SVM_GARBAGE_COLLECTOR);
+		return ret;
+	}
+
 	need_vram = xe_vma_need_vram_for_atomic(vm->xe, vma, atomic);
 	if (need_vram < 0) {
 		xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_SVM_NEEDS_VRAM_CHECK);
@@ -1485,18 +1589,9 @@ int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
 	ret =  __xe_svm_handle_pagefault(vm, vma, pf, gt, fault_addr,
 					 need_vram ? true : false);
 	if (ret == -EAGAIN) {
-		/*
-		 * Retry once on -EAGAIN to re-lookup the VMA, as the original VMA
-		 * may have been split by xe_svm_range_set_default_attr.
-		 */
-		vma = xe_vm_find_vma_by_addr(vm, fault_addr);
-		if (!vma) {
-			xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_SVM_VMA_NOT_FOUND);
-			return -EINVAL;
-		}
-
+		/* Retry from the caller after collecting with write access. */
 		xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_NONE);
-		goto retry;
+		return ret;
 	}
 	if (ret && xe_pagefault_get_error(pf) == XE_PAGEFAULT_ERROR_NONE)
 		xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_SVM_SERVICE_FAILED);
diff --git a/drivers/gpu/drm/xe/xe_svm.h b/drivers/gpu/drm/xe/xe_svm.h
index ffc1cc808102..523213a8cd26 100644
--- a/drivers/gpu/drm/xe/xe_svm.h
+++ b/drivers/gpu/drm/xe/xe_svm.h
@@ -109,6 +109,8 @@ void xe_svm_fini(struct xe_vm *vm);
 
 void xe_svm_close(struct xe_vm *vm);
 
+int xe_svm_garbage_collect(struct xe_vm *vm);
+
 int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
 			    struct xe_pagefault *pf, struct xe_gt *gt,
 			    u64 fault_addr, bool atomic);
@@ -316,6 +318,12 @@ void xe_svm_close(struct xe_vm *vm)
 {
 }
 
+static inline
+int xe_svm_garbage_collect(struct xe_vm *vm)
+{
+	return 0;
+}
+
 static inline
 int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
 			    struct xe_pagefault *pf, struct xe_gt *gt,
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index d12365b11186..6afe6f1be1d4 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -1308,19 +1308,12 @@ static void vma_destroy_cb(struct dma_fence *fence,
 	xe_destroy_wq_queue(&vma->destroy_work);
 }
 
-static void xe_vm_assert_write_mode_or_garbage_collector(struct xe_vm *vm)
-{
-	lockdep_assert(lockdep_is_held_type(&vm->lock, 0) ||
-		       (lockdep_is_held_type(&vm->lock, 1) &&
-			lockdep_is_held_type(&vm->svm.garbage_collector.lock, 0)));
-}
-
 static void xe_vma_destroy(struct xe_vma *vma, struct dma_fence *fence)
 {
 	struct xe_vm *vm = xe_vma_vm(vma);
 	struct xe_bo *bo = xe_vma_bo(vma);
 
-	xe_vm_assert_write_mode_or_garbage_collector(vm);
+	lockdep_assert_held_write(&vm->lock);
 	xe_assert(vm->xe, list_empty(&vma->combined_links.destroy));
 
 	if (xe_vma_is_userptr(vma)) {
@@ -1416,7 +1409,7 @@ static int xe_vm_insert_vma(struct xe_vm *vm, struct xe_vma *vma)
 	int err;
 
 	xe_assert(vm->xe, xe_vma_vm(vma) == vm);
-	xe_vm_assert_write_mode_or_garbage_collector(vm);
+	lockdep_assert_held_write(&vm->lock);
 
 	mutex_lock(&vm->snap_mutex);
 	err = drm_gpuva_insert(&vm->gpuvm, &vma->gpuva);
@@ -1429,7 +1422,7 @@ static int xe_vm_insert_vma(struct xe_vm *vm, struct xe_vma *vma)
 static void xe_vm_remove_vma(struct xe_vm *vm, struct xe_vma *vma)
 {
 	xe_assert(vm->xe, xe_vma_vm(vma) == vm);
-	xe_vm_assert_write_mode_or_garbage_collector(vm);
+	lockdep_assert_held_write(&vm->lock);
 
 	mutex_lock(&vm->snap_mutex);
 	drm_gpuva_remove(&vma->gpuva);
@@ -2267,7 +2260,7 @@ static int xe_vm_query_vmas(struct xe_vm *vm, u64 start, u64 end)
 	struct drm_gpuva *gpuva;
 	u32 num_vmas = 0;
 
-	xe_vm_assert_write_mode_or_garbage_collector(vm);
+	lockdep_assert_held(&vm->lock);
 	drm_gpuvm_for_each_va_range(gpuva, &vm->gpuvm, start, end)
 		num_vmas++;
 
@@ -2280,7 +2273,7 @@ static int get_mem_attrs(struct xe_vm *vm, u32 *num_vmas, u64 start,
 	struct drm_gpuva *gpuva;
 	int i = 0;
 
-	xe_vm_assert_write_mode_or_garbage_collector(vm);
+	lockdep_assert_held(&vm->lock);
 
 	drm_gpuvm_for_each_va_range(gpuva, &vm->gpuvm, start, end) {
 		struct xe_vma *vma = gpuva_to_vma(gpuva);
@@ -2330,6 +2323,12 @@ int xe_vm_query_vmas_attrs_ioctl(struct drm_device *dev, void *data, struct drm_
 	if (err)
 		goto put_vm;
 
+	if (!xe_vm_is_closed_or_banned(vm)) {
+		err = xe_svm_garbage_collect(vm);
+		if (err)
+			goto unlock_vm;
+	}
+
 	attrs_user = u64_to_user_ptr(args->vector_of_mem_attr);
 
 	if (args->num_mem_ranges == 0 && !attrs_user) {
@@ -2487,7 +2486,7 @@ vm_bind_ioctl_ops_create(struct xe_vm *vm, struct xe_vma_ops *vops,
 	u64 range_end = addr + range;
 	int err;
 
-	xe_vm_assert_write_mode_or_garbage_collector(vm);
+	lockdep_assert_held_write(&vm->lock);
 
 	vm_dbg(&vm->xe->drm,
 	       "op=%d, addr=0x%016llx, range=0x%016llx, bo_offset_or_userptr=0x%016llx",
@@ -2694,7 +2693,7 @@ static struct xe_vma *new_vma(struct xe_vm *vm, struct drm_gpuva_op_map *op,
 	struct xe_vma *vma;
 	int err = 0;
 
-	xe_vm_assert_write_mode_or_garbage_collector(vm);
+	lockdep_assert_held_write(&vm->lock);
 
 	if (bo) {
 		err = 0;
@@ -2795,7 +2794,7 @@ static int xe_vma_op_commit(struct xe_vm *vm, struct xe_vma_op *op)
 
 	switch (op->base.op) {
 	case DRM_GPUVA_OP_MAP:
-		xe_vm_assert_write_mode_or_garbage_collector(vm);
+		lockdep_assert_held_write(&vm->lock);
 
 		err |= xe_vm_insert_vma(vm, op->map.vma);
 		if (!err)
@@ -2806,7 +2805,7 @@ static int xe_vma_op_commit(struct xe_vm *vm, struct xe_vma_op *op)
 		u8 tile_present =
 			gpuva_to_vma(op->base.remap.unmap->va)->tile_present;
 
-		xe_vm_assert_write_mode_or_garbage_collector(vm);
+		lockdep_assert_held_write(&vm->lock);
 
 		prep_vma_destroy(vm, gpuva_to_vma(op->base.remap.unmap->va),
 				 true);
@@ -2842,7 +2841,7 @@ static int xe_vma_op_commit(struct xe_vm *vm, struct xe_vma_op *op)
 		break;
 	}
 	case DRM_GPUVA_OP_UNMAP:
-		xe_vm_assert_write_mode_or_garbage_collector(vm);
+		lockdep_assert_held_write(&vm->lock);
 
 		prep_vma_destroy(vm, gpuva_to_vma(op->base.unmap.va), true);
 		op->flags |= XE_VMA_OP_COMMITTED;
@@ -2889,7 +2888,7 @@ static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct drm_gpuva_ops *ops,
 	u8 id, tile_mask = 0;
 	int err = 0;
 
-	xe_vm_assert_write_mode_or_garbage_collector(vm);
+	lockdep_assert_held_write(&vm->lock);
 
 	for_each_tile(tile, vm->xe, id)
 		tile_mask |= 0x1 << id;
@@ -3072,7 +3071,7 @@ static void xe_vma_op_unwind(struct xe_vm *vm, struct xe_vma_op *op,
 
 	switch (op->base.op) {
 	case DRM_GPUVA_OP_MAP:
-		xe_vm_assert_write_mode_or_garbage_collector(vm);
+		lockdep_assert_held_write(&vm->lock);
 
 		if (op->map.vma) {
 			prep_vma_destroy(vm, op->map.vma, post_commit);
@@ -3083,7 +3082,7 @@ static void xe_vma_op_unwind(struct xe_vm *vm, struct xe_vma_op *op,
 	{
 		struct xe_vma *vma = gpuva_to_vma(op->base.unmap.va);
 
-		xe_vm_assert_write_mode_or_garbage_collector(vm);
+		lockdep_assert_held_write(&vm->lock);
 
 		if (vma) {
 			xe_svm_notifier_lock(vm);
@@ -3098,7 +3097,7 @@ static void xe_vma_op_unwind(struct xe_vm *vm, struct xe_vma_op *op,
 	{
 		struct xe_vma *vma = gpuva_to_vma(op->base.remap.unmap->va);
 
-		xe_vm_assert_write_mode_or_garbage_collector(vm);
+		lockdep_assert_held_write(&vm->lock);
 
 		if (op->remap.prev) {
 			prep_vma_destroy(vm, op->remap.prev, prev_post_commit);
@@ -4092,6 +4091,11 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
 		goto release_vm_lock;
 	}
 
+	/* Consume queued resets before replacing VMAs. */
+	err = xe_svm_garbage_collect(vm);
+	if (err)
+		goto release_vm_lock;
+
 	for (i = 0; i < args->num_binds; ++i) {
 		u64 range = bind_ops[i].range;
 		u64 addr = bind_ops[i].addr;
@@ -4907,7 +4911,7 @@ static int xe_vm_alloc_vma(struct xe_vm *vm,
 	u16 default_pat;
 	int err;
 
-	xe_vm_assert_write_mode_or_garbage_collector(vm);
+	lockdep_assert_held_write(&vm->lock);
 
 	if (is_madvise)
 		ops = drm_gpuvm_madvise_ops_create(&vm->gpuvm, map_req);
@@ -5041,7 +5045,7 @@ int xe_vm_alloc_madvise_vma(struct xe_vm *vm, uint64_t start, uint64_t range)
 		.map.va.range = range,
 	};
 
-	xe_vm_assert_write_mode_or_garbage_collector(vm);
+	lockdep_assert_held_write(&vm->lock);
 
 	vm_dbg(&vm->xe->drm, "MADVISE_OPS_CREATE: addr=0x%016llx, size=0x%016llx", start, range);
 
@@ -5073,7 +5077,7 @@ void xe_vm_find_cpu_addr_mirror_vma_range(struct xe_vm *vm, u64 *start, u64 *end
 {
 	struct xe_vma *prev, *next;
 
-	xe_vm_assert_write_mode_or_garbage_collector(vm);
+	lockdep_assert_held(&vm->lock);
 
 	if (*start >= SZ_4K) {
 		prev = xe_vm_find_vma_by_addr(vm, *start - SZ_4K);
@@ -5105,7 +5109,7 @@ int xe_vm_alloc_cpu_addr_mirror_vma(struct xe_vm *vm, uint64_t start, uint64_t r
 		.map.va.range = range,
 	};
 
-	xe_vm_assert_write_mode_or_garbage_collector(vm);
+	lockdep_assert_held_write(&vm->lock);
 
 	vm_dbg(&vm->xe->drm, "CPU_ADDR_MIRROR_VMA_OPS_CREATE: addr=0x%016llx, size=0x%016llx",
 	       start, range);
diff --git a/drivers/gpu/drm/xe/xe_vm_madvise.c b/drivers/gpu/drm/xe/xe_vm_madvise.c
index 5c7aefc641ee..1af5e79bbfd3 100644
--- a/drivers/gpu/drm/xe/xe_vm_madvise.c
+++ b/drivers/gpu/drm/xe/xe_vm_madvise.c
@@ -638,6 +638,11 @@ int xe_vm_madvise_ioctl(struct drm_device *dev, void *data, struct drm_file *fil
 		goto unlock_vm;
 	}
 
+	/* Consume queued resets before publishing new advice. */
+	err = xe_svm_garbage_collect(vm);
+	if (err)
+		goto unlock_vm;
+
 	err = xe_madvise_details_init(vm, args, &details);
 	if (err)
 		goto unlock_vm;
-- 
2.43.0


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

* ✗ CI.checkpatch: warning for drm/xe/svm: Take write access only for GC attribute resets
  2026-10-26 12:20 [PATCH] drm/xe/svm: Take write access only for GC attribute resets Arvind Yadav
@ 2026-10-26 14:58 ` Patchwork
  2026-10-26 15:00 ` ✓ CI.KUnit: success " Patchwork
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2026-10-26 14:58 UTC (permalink / raw)
  To: Arvind Yadav; +Cc: intel-xe

== Series Details ==

Series: drm/xe/svm: Take write access only for GC attribute resets
URL   : https://patchwork.freedesktop.org/series/176860/
State : warning

== Summary ==

+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
3009867cd31863246e4afc138520a7a8bd37bb11
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit f05d9604ecdb7550641e08bc31a680171ccc0c79
Author: Arvind Yadav <arvind.yadav@intel.com>
Date:   Mon Oct 26 17:50:45 2026 +0530

    drm/xe/svm: Take write access only for GC attribute resets
    
    Fault service holds vm->lock for read while using a VMA. SVM garbage
    collection also runs under the read lock and can reset AUTORESET
    attributes. The reset can split or merge VMAs and immediately free a
    VMA that another fault worker is still using. The GC mutex serializes
    collectors but does not protect VMA readers.
    
    Keep backing collection under read access when no attribute change is
    needed. Defer ranges requiring a reset and return -EAGAIN so the caller
    can release its read-side state and collect with write access.
    
    In fault service, discard the old VMA pointer before releasing the read
    lock. After acquiring write access, recheck VM state and collect the
    queued ranges. Downgrade to read and repeat VMA lookup, permission checks
    and advice-dependent setup.
    
    Drain GC under the existing write lock before madvise, bind and attribute
    query. Require write access for VMA changes while retaining parallel
    fault service when no reset is needed.
    
    [ 2163.042338] ==================================================================
    [ 2163.042353] BUG: KASAN: slab-use-after-free in __xe_svm_handle_pagefault+0x297/0x1460 [xe]
    [ 2163.042815] Read of size 8 at addr ffff88813f879b70 by task kworker/u65:3/3115
    
    [ 2163.042834] CPU: 0 UID: 0 PID: 3115 Comm: kworker/u65:3 Kdump: loaded Tainted: G S      W  O        7.3.0-lgci-xe-svm-22oct #16 PREEMPT(full)
    [ 2163.042841] Tainted: [S]=CPU_OUT_OF_SPEC, [W]=WARN, [O]=OOT_MODULE
    [ 2163.042842] Hardware name: ASUS System Product Name/PRIME Z790-P WIFI, BIOS 1002 03/31/2023
    [ 2163.042845] Workqueue: xe_page_fault_work_queue xe_pagefault_queue_work [xe]
    [ 2163.043326] Call Trace:
    [ 2163.043327]  <TASK>
    [ 2163.043330]  dump_stack_lvl+0x91/0xf0
    [ 2163.043336]  print_report+0xd1/0x610
    [ 2163.043340]  ? __xe_svm_handle_pagefault+0x297/0x1460 [xe]
    [ 2163.043825]  ? __virt_addr_valid+0x1b2/0x350
    [ 2163.043831]  ? kasan_complete_mode_report_info+0x6a/0x210
    [ 2163.043836]  ? __xe_svm_handle_pagefault+0x297/0x1460 [xe]
    [ 2163.044340]  kasan_report+0xa3/0xe0
    [ 2163.044344]  ? __xe_svm_handle_pagefault+0x297/0x1460 [xe]
    [ 2163.044881]  __asan_load8+0x8b/0xe0
    [ 2163.044885]  __xe_svm_handle_pagefault+0x297/0x1460 [xe]
    [ 2163.045456]  ? lock_acquire+0x1b0/0x320
    [ 2163.045461]  ? xe_vm_find_overlapping_vma+0x88/0x310 [xe]
    [ 2163.046072]  ? __pfx___xe_svm_handle_pagefault+0x10/0x10 [xe]
    [ 2163.046679]  ? rcu_is_watching+0x21/0x60
    [ 2163.046684]  ? __mutex_lock+0x1172/0x18b0
    [ 2163.046690]  ? find_held_lock+0x31/0x90
    [ 2163.046696]  ? xe_vm_find_overlapping_vma+0xa1/0x310 [xe]
    [ 2163.047273]  ? __kasan_check_write+0x14/0x30
    [ 2163.047278]  ? __mutex_unlock_slowpath+0x10f/0x660
    [ 2163.047285]  ? __pfx___mutex_unlock_slowpath+0x10/0x10
    [ 2163.047295]  ? mutex_unlock+0x12/0x20
    [ 2163.047299]  ? xe_vm_find_overlapping_vma+0xa1/0x310 [xe]
    [ 2163.047844]  xe_svm_handle_pagefault+0x5c/0x140 [xe]
    [ 2163.048355]  xe_pagefault_queue_work+0x19ad/0x2450 [xe]
    [ 2163.048843]  process_one_work+0x5ae/0xdd0
    [ 2163.048847]  ? __lock_acquire+0x58a/0x2820
    [ 2163.048850]  ? __schedule+0x22a6/0x3670
    [ 2163.048858]  ? __pfx_process_one_work+0x10/0x10
    [ 2163.048866]  ? __pfx_xe_pagefault_queue_work+0x10/0x10 [xe]
    [ 2163.049345]  ? assign_work+0xe4/0x1d0
    [ 2163.049350]  worker_thread+0x3b4/0x6a0
    [ 2163.049357]  ? __pfx_worker_thread+0x10/0x10
    [ 2163.049361]  kthread+0x204/0x250
    [ 2163.049364]  ? kthread+0xf1/0x250
    [ 2163.049369]  ? __pfx_kthread+0x10/0x10
    [ 2163.049372]  ret_from_fork+0x465/0x6a0
    [ 2163.049377]  ? __pfx_ret_from_fork+0x10/0x10
    [ 2163.049381]  ? __switch_to+0x26f/0x740
    [ 2163.049386]  ? __pfx_kthread+0x10/0x10
    [ 2163.049390]  ret_from_fork_asm+0x1a/0x30
    [ 2163.049399]  </TASK>
    
    [ 2163.049654] Allocated by task 522570:
    [ 2163.049662]  kasan_save_stack+0x26/0x60
    [ 2163.049668]  kasan_save_track+0x14/0x40
    [ 2163.049672]  kasan_save_alloc_info+0x37/0x60
    [ 2163.049677]  __kasan_kmalloc+0xc3/0xd0
    [ 2163.049681]  __kmalloc_cache_noprof+0x2b4/0x6c0
    [ 2163.049686]  xe_vma_create+0xe3/0xe60 [xe]
    [ 2163.050170]  new_vma+0x416/0x540 [xe]
    [ 2163.050654]  vm_bind_ioctl_ops_parse+0xc3e/0x1110 [xe]
    [ 2163.051139]  xe_vm_alloc_vma+0x243/0xd60 [xe]
    [ 2163.051623]  xe_vm_alloc_madvise_vma+0x92/0xd0 [xe]
    [ 2163.052107]  xe_vm_madvise_ioctl+0x783/0x14f0 [xe]
    [ 2163.052591]  drm_ioctl_kernel+0x143/0x200
    [ 2163.052597]  drm_ioctl+0x419/0x790
    [ 2163.052600]  xe_drm_ioctl+0x9e/0xf0 [xe]
    [ 2163.053074]  __x64_sys_ioctl+0xd5/0x130
    [ 2163.053079]  x64_sys_call+0x2b5/0x27e0
    [ 2163.053084]  do_syscall_64+0xef/0x6c0
    [ 2163.053088]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    [ 2163.053098] Freed by task 17929:
    [ 2163.053105]  kasan_save_stack+0x26/0x60
    [ 2163.053110]  kasan_save_track+0x14/0x40
    [ 2163.053114]  kasan_save_free_info+0x3b/0x60
    [ 2163.053118]  __kasan_slab_free+0x6f/0xa0
    [ 2163.053123]  kfree+0x2bb/0x600
    [ 2163.053127]  xe_vma_free+0x5a/0x70 [xe]
    [ 2163.053610]  xe_vma_destroy_late+0xae/0xf0 [xe]
    [ 2163.054093]  xe_vma_destroy+0xda/0xf20 [xe]
    [ 2163.054576]  xe_vm_alloc_vma+0x304/0xd60 [xe]
    [ 2163.055059]  xe_vm_alloc_cpu_addr_mirror_vma+0x8f/0xd0 [xe]
    [ 2163.055543]  xe_svm_garbage_collector+0x388/0x5d0 [xe]
    [ 2163.056028]  xe_svm_garbage_collector_work_func+0x2a/0x40 [xe]
    [ 2163.056512]  process_one_work+0x5ae/0xdd0
    [ 2163.056517]  worker_thread+0x3b4/0x6a0
    [ 2163.056521]  kthread+0x204/0x250
    [ 2163.056525]  ret_from_fork+0x465/0x6a0
    [ 2163.056530]  ret_from_fork_asm+0x1a/0x30
    
    Fixes: 941bcc1a4bbf ("drm/xe: Fine grained page fault locking")
    Cc: Matthew Brost <matthew.brost@intel.com>
    Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
    Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
    Assisted-by: LLM
    Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
+ /mt/dim checkpatch 3543fd9d737a3f30b44d036b5de64c379d1c376f drm-intel
f05d9604ecdb drm/xe/svm: Take write access only for GC attribute resets
-:410: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#410: FILE: drivers/gpu/drm/xe/xe_svm.c:1398:
+				xe_pagefault_set_error(pf,
+						      XE_PAGEFAULT_ERROR_SVM_GARBAGE_COLLECTOR);

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



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

* ✓ CI.KUnit: success for drm/xe/svm: Take write access only for GC attribute resets
  2026-10-26 12:20 [PATCH] drm/xe/svm: Take write access only for GC attribute resets Arvind Yadav
  2026-10-26 14:58 ` ✗ CI.checkpatch: warning for " Patchwork
@ 2026-10-26 15:00 ` Patchwork
  2026-10-26 15:37 ` ✓ Xe.CI.BAT: " Patchwork
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2026-10-26 15:00 UTC (permalink / raw)
  To: Arvind Yadav; +Cc: intel-xe

== Series Details ==

Series: drm/xe/svm: Take write access only for GC attribute resets
URL   : https://patchwork.freedesktop.org/series/176860/
State : success

== Summary ==

+ trap cleanup EXIT
+ kunitconfigs=('/kernel/drivers/gpu/tests/.kunitconfig' '/kernel/drivers/gpu/drm/xe/.kunitconfig' '/kernel/drivers/gpu/drm/tests/.kunitconfig' '/kernel/drivers/gpu/drm/ttm/tests/.kunitconfig' '/kernel/drivers/dma-buf/.kunitconfig')
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/tests/.kunitconfig
[14:58:34] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[14:58:38] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[14:58:58] Starting KUnit Kernel (1/1)...
[14:58:58] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[14:58:58] ================= gpu_buddy (14 subtests) ==================
[14:58:58] [PASSED] gpu_test_buddy_alloc_limit
[14:58:58] [PASSED] gpu_test_buddy_alloc_optimistic
[14:58:58] [PASSED] gpu_test_buddy_alloc_pessimistic
[14:58:58] [PASSED] gpu_test_buddy_alloc_pathological
[14:58:58] [PASSED] gpu_test_buddy_alloc_contiguous
[14:58:58] [PASSED] gpu_test_buddy_alloc_clear
[14:58:58] [PASSED] gpu_test_buddy_alloc_range
[14:58:59] [PASSED] gpu_test_buddy_alloc_range_bias
[14:58:59] [PASSED] gpu_test_buddy_fragmentation_performance
[14:59:00] [PASSED] gpu_test_buddy_dirty_tracker_performance
[14:59:00] [PASSED] gpu_test_buddy_alloc_exceeds_max_order
[14:59:00] [PASSED] gpu_test_buddy_offset_aligned_allocation
[14:59:00] [PASSED] gpu_test_buddy_subtree_offset_alignment_stress
[14:59:00] [PASSED] gpu_test_buddy_addr_to_block
[14:59:00] ==================== [PASSED] gpu_buddy ====================
[14:59:00] ============================================================
[14:59:00] Testing complete. Ran 14 tests: passed: 14
[14:59:00] Elapsed time: 26.248s total, 4.405s configuring, 19.974s building, 1.823s running

+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/xe/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[14:59:00] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[14:59:02] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[14:59:41] Starting KUnit Kernel (1/1)...
[14:59:41] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[14:59:41] ================== guc_buf (11 subtests) ===================
[14:59:41] [PASSED] test_smallest
[14:59:41] [PASSED] test_largest
[14:59:41] [PASSED] test_granular
[14:59:41] [PASSED] test_unique
[14:59:41] [PASSED] test_overlap
[14:59:41] [PASSED] test_reusable
[14:59:41] [PASSED] test_too_big
[14:59:41] [PASSED] test_flush
[14:59:41] [PASSED] test_lookup
[14:59:41] [PASSED] test_data
[14:59:41] [PASSED] test_class
[14:59:41] ===================== [PASSED] guc_buf =====================
[14:59:41] =================== guc_dbm (7 subtests) ===================
[14:59:41] [PASSED] test_empty
[14:59:41] [PASSED] test_default
[14:59:41] ======================== test_size  ========================
[14:59:41] [PASSED] 4
[14:59:41] [PASSED] 8
[14:59:41] [PASSED] 32
[14:59:41] [PASSED] 256
[14:59:41] ==================== [PASSED] test_size ====================
[14:59:41] ======================= test_reuse  ========================
[14:59:41] [PASSED] 4
[14:59:41] [PASSED] 8
[14:59:41] [PASSED] 32
[14:59:41] [PASSED] 256
[14:59:41] =================== [PASSED] test_reuse ====================
[14:59:41] =================== test_range_overlap  ====================
[14:59:41] [PASSED] 4
[14:59:41] [PASSED] 8
[14:59:41] [PASSED] 32
[14:59:41] [PASSED] 256
[14:59:41] =============== [PASSED] test_range_overlap ================
[14:59:41] =================== test_range_compact  ====================
[14:59:41] [PASSED] 4
[14:59:41] [PASSED] 8
[14:59:41] [PASSED] 32
[14:59:41] [PASSED] 256
[14:59:41] =============== [PASSED] test_range_compact ================
[14:59:41] ==================== test_range_spare  =====================
[14:59:41] [PASSED] 4
[14:59:41] [PASSED] 8
[14:59:41] [PASSED] 32
[14:59:41] [PASSED] 256
[14:59:41] ================ [PASSED] test_range_spare =================
[14:59:41] ===================== [PASSED] guc_dbm =====================
[14:59:41] ================== guc_idm (22 subtests) ===================
[14:59:41] [PASSED] bad_init
[14:59:41] [PASSED] no_init
[14:59:41] [PASSED] init_fini
[14:59:41] [PASSED] check_init_small
[14:59:41] [PASSED] check_init_shared
[14:59:41] [PASSED] check_used
[14:59:41] [PASSED] check_quota
[14:59:41] [PASSED] check_all
[14:59:41] [PASSED] check_limits
[14:59:41] [PASSED] check_overlap
[14:59:41] [PASSED] check_overlap_alloc
[14:59:41] [PASSED] check_overlap_release
[14:59:41] [PASSED] check_overlap_partial_init
[14:59:41] [PASSED] check_overlap_partial_shared_range_blocking
[14:59:41] [PASSED] check_used_usable
[14:59:41] [PASSED] check_used_shareable
[14:59:41] [PASSED] check_used_mixed
[14:59:41] [PASSED] check_release_usable_range
[14:59:41] [PASSED] check_release_shareable_range
[14:59:41] [PASSED] check_split_boundaries
[14:59:41] [PASSED] check_shareable_spare
[14:59:41] [PASSED] check_shareable_spare_fragmented_tail
[14:59:41] ===================== [PASSED] guc_idm =====================
[14:59:41] ============== guc_klv_helpers (13 subtests) ===============
[14:59:41] [PASSED] test_count
[14:59:41] [PASSED] test_encode_u32
[14:59:41] [PASSED] test_encode_u64
[14:59:41] [PASSED] test_encode_string
[14:59:41] [PASSED] test_encode_object_raw
[14:59:41] [PASSED] test_encode_object_klv
[14:59:41] [PASSED] test_encode_object_nested
[14:59:41] [PASSED] test_encode_object_basic
[14:59:41] ===================== test_decode_u16  =====================
[14:59:41] [PASSED] empty
[14:59:41] [PASSED] valid
[14:59:41] [PASSED] max
[14:59:41] [PASSED] big
[14:59:41] [PASSED] long
[14:59:41] ================= [PASSED] test_decode_u16 =================
[14:59:41] ===================== test_decode_u32  =====================
[14:59:41] [PASSED] empty
[14:59:41] [PASSED] valid
[14:59:41] [PASSED] max
[14:59:41] [PASSED] long
[14:59:41] ================= [PASSED] test_decode_u32 =================
[14:59:41] ===================== test_decode_u64  =====================
[14:59:41] [PASSED] empty
[14:59:41] [PASSED] short
[14:59:41] [PASSED] valid
[14:59:41] [PASSED] max
[14:59:41] [PASSED] long
[14:59:41] ================= [PASSED] test_decode_u64 =================
[14:59:41] ===================== test_decode_str  =====================
[14:59:41] [PASSED] empty
[14:59:41] [PASSED] one
[14:59:41] [PASSED] one_trash
[14:59:41] [PASSED] two
[14:59:41] [PASSED] two_trash
[14:59:41] [PASSED] three
[14:59:41] [PASSED] dword
[14:59:41] [PASSED] four
[14:59:41] [PASSED] five
[14:59:41] [PASSED] six
[14:59:41] [PASSED] seven
[14:59:41] [PASSED] qword
[14:59:41] ================= [PASSED] test_decode_str =================
[14:59:41] [PASSED] test_print
[14:59:41] ================= [PASSED] guc_klv_helpers =================
[14:59:41] =================== xe_log (4 subtests) ====================
[14:59:41] [PASSED] demo_cper
[14:59:41] [PASSED] demo_dmesg
[14:59:41] ======================= test_dmesg  ========================
[14:59:41] [PASSED] test_fatal
[14:59:41] [PASSED] test_fatal_tile
[14:59:41] [PASSED] test_fatal_gt
[14:59:41] [PASSED] test_fatal_comp
[14:59:41] [PASSED] test_fatal_comp_tile
[14:59:41] [PASSED] test_fatal_comp_gt
[14:59:41] [PASSED] test_fatal_all
[14:59:41] [PASSED] test_recoverable
[14:59:41] [PASSED] test_recoverable_tile
[14:59:41] [PASSED] test_recoverable_gt
[14:59:41] [PASSED] test_recoverable_comp
[14:59:41] [PASSED] test_recoverable_comp_tile
[14:59:41] [PASSED] test_recoverable_comp_gt
[14:59:41] [PASSED] test_recoverable_all
[14:59:41] [PASSED] test_info
[14:59:41] [PASSED] test_info_tile
[14:59:41] [PASSED] test_info_gt
[14:59:41] [PASSED] test_info_err
[14:59:41] [PASSED] test_info_comp
[14:59:41] [PASSED] test_info_comp_tile
[14:59:41] [PASSED] test_info_comp_gt
[14:59:41] [PASSED] test_info_all
[14:59:41] [PASSED] test_hw_fatal
[14:59:41] [PASSED] test_hw_recoverable
[14:59:41] [PASSED] test_hw_corrected
[14:59:41] [PASSED] test_hw_informational
[14:59:41] =================== [PASSED] test_dmesg ====================
[14:59:41] ====================== test_invalid  =======================
[14:59:41] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[14:59:41] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[14:59:41] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[14:59:41] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[14:59:41] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[14:59:41] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[14:59:41] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[14:59:41] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[14:59:41] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[14:59:41] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[14:59:41] ================== [SKIPPED] test_invalid ==================
[14:59:41] ===================== [PASSED] xe_log ======================
[14:59:41] ================== no_relay (3 subtests) ===================
[14:59:41] [PASSED] xe_drops_guc2pf_if_not_ready
[14:59:41] [PASSED] xe_drops_guc2vf_if_not_ready
[14:59:41] [PASSED] xe_rejects_send_if_not_ready
[14:59:41] ==================== [PASSED] no_relay =====================
[14:59:41] ================== pf_relay (14 subtests) ==================
[14:59:41] [PASSED] pf_rejects_guc2pf_too_short
[14:59:41] [PASSED] pf_rejects_guc2pf_too_long
[14:59:41] [PASSED] pf_rejects_guc2pf_no_payload
[14:59:41] [PASSED] pf_fails_no_payload
[14:59:41] [PASSED] pf_fails_bad_origin
[14:59:41] [PASSED] pf_fails_bad_type
[14:59:41] [PASSED] pf_txn_reports_error
[14:59:41] [PASSED] pf_txn_sends_pf2guc
[14:59:41] [PASSED] pf_sends_pf2guc
[14:59:41] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[14:59:41] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[14:59:41] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[14:59:41] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[14:59:41] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[14:59:41] ==================== [PASSED] pf_relay =====================
[14:59:41] ================== vf_relay (3 subtests) ===================
[14:59:41] [PASSED] vf_rejects_guc2vf_too_short
[14:59:41] [PASSED] vf_rejects_guc2vf_too_long
[14:59:41] [PASSED] vf_rejects_guc2vf_no_payload
[14:59:41] ==================== [PASSED] vf_relay =====================
[14:59:41] ================ pf_gt_config (9 subtests) =================
[14:59:41] [PASSED] fair_contexts_1vf
[14:59:41] [PASSED] fair_doorbells_1vf
[14:59:41] [PASSED] fair_ggtt_1vf
[14:59:41] ====================== fair_vram_1vf  ======================
[14:59:41] [PASSED] 3.50 GiB
[14:59:41] [PASSED] 11.5 GiB
[14:59:41] [PASSED] 15.5 GiB
[14:59:41] [PASSED] 31.5 GiB
[14:59:41] [PASSED] 63.5 GiB
[14:59:41] [PASSED] 1.91 GiB
[14:59:41] ================== [PASSED] fair_vram_1vf ==================
[14:59:41] ================ fair_vram_1vf_admin_only  =================
[14:59:41] [PASSED] 3.50 GiB
[14:59:41] [PASSED] 11.5 GiB
[14:59:41] [PASSED] 15.5 GiB
[14:59:41] [PASSED] 31.5 GiB
[14:59:41] [PASSED] 63.5 GiB
[14:59:41] [PASSED] 1.91 GiB
[14:59:41] ============ [PASSED] fair_vram_1vf_admin_only =============
[14:59:41] ====================== fair_contexts  ======================
[14:59:41] [PASSED] 1 VF
[14:59:41] [PASSED] 2 VFs
[14:59:41] [PASSED] 3 VFs
[14:59:41] [PASSED] 4 VFs
[14:59:41] [PASSED] 5 VFs
[14:59:41] [PASSED] 6 VFs
[14:59:41] [PASSED] 7 VFs
[14:59:41] [PASSED] 8 VFs
[14:59:41] [PASSED] 9 VFs
[14:59:41] [PASSED] 10 VFs
[14:59:41] [PASSED] 11 VFs
[14:59:41] [PASSED] 12 VFs
[14:59:41] [PASSED] 13 VFs
[14:59:41] [PASSED] 14 VFs
[14:59:41] [PASSED] 15 VFs
[14:59:41] [PASSED] 16 VFs
[14:59:41] [PASSED] 17 VFs
[14:59:41] [PASSED] 18 VFs
[14:59:41] [PASSED] 19 VFs
[14:59:41] [PASSED] 20 VFs
[14:59:41] [PASSED] 21 VFs
[14:59:41] [PASSED] 22 VFs
[14:59:41] [PASSED] 23 VFs
[14:59:41] [PASSED] 24 VFs
[14:59:41] [PASSED] 25 VFs
[14:59:41] [PASSED] 26 VFs
[14:59:41] [PASSED] 27 VFs
[14:59:41] [PASSED] 28 VFs
[14:59:41] [PASSED] 29 VFs
[14:59:41] [PASSED] 30 VFs
[14:59:41] [PASSED] 31 VFs
[14:59:41] [PASSED] 32 VFs
[14:59:41] [PASSED] 33 VFs
[14:59:41] [PASSED] 34 VFs
[14:59:41] [PASSED] 35 VFs
[14:59:41] [PASSED] 36 VFs
[14:59:41] [PASSED] 37 VFs
[14:59:41] [PASSED] 38 VFs
[14:59:41] [PASSED] 39 VFs
[14:59:41] [PASSED] 40 VFs
[14:59:41] [PASSED] 41 VFs
[14:59:41] [PASSED] 42 VFs
[14:59:41] [PASSED] 43 VFs
[14:59:41] [PASSED] 44 VFs
[14:59:41] [PASSED] 45 VFs
[14:59:41] [PASSED] 46 VFs
[14:59:41] [PASSED] 47 VFs
[14:59:41] [PASSED] 48 VFs
[14:59:41] [PASSED] 49 VFs
[14:59:41] [PASSED] 50 VFs
[14:59:41] [PASSED] 51 VFs
[14:59:41] [PASSED] 52 VFs
[14:59:41] [PASSED] 53 VFs
[14:59:41] [PASSED] 54 VFs
[14:59:41] [PASSED] 55 VFs
[14:59:41] [PASSED] 56 VFs
[14:59:41] [PASSED] 57 VFs
[14:59:41] [PASSED] 58 VFs
[14:59:41] [PASSED] 59 VFs
[14:59:41] [PASSED] 60 VFs
[14:59:41] [PASSED] 61 VFs
[14:59:41] [PASSED] 62 VFs
[14:59:41] [PASSED] 63 VFs
[14:59:41] ================== [PASSED] fair_contexts ==================
[14:59:41] ===================== fair_doorbells  ======================
[14:59:41] [PASSED] 1 VF
[14:59:41] [PASSED] 2 VFs
[14:59:41] [PASSED] 3 VFs
[14:59:41] [PASSED] 4 VFs
[14:59:41] [PASSED] 5 VFs
[14:59:41] [PASSED] 6 VFs
[14:59:41] [PASSED] 7 VFs
[14:59:41] [PASSED] 8 VFs
[14:59:41] [PASSED] 9 VFs
[14:59:41] [PASSED] 10 VFs
[14:59:41] [PASSED] 11 VFs
[14:59:41] [PASSED] 12 VFs
[14:59:41] [PASSED] 13 VFs
[14:59:41] [PASSED] 14 VFs
[14:59:41] [PASSED] 15 VFs
[14:59:41] [PASSED] 16 VFs
[14:59:41] [PASSED] 17 VFs
[14:59:41] [PASSED] 18 VFs
[14:59:41] [PASSED] 19 VFs
[14:59:41] [PASSED] 20 VFs
[14:59:41] [PASSED] 21 VFs
[14:59:41] [PASSED] 22 VFs
[14:59:41] [PASSED] 23 VFs
[14:59:41] [PASSED] 24 VFs
[14:59:41] [PASSED] 25 VFs
[14:59:41] [PASSED] 26 VFs
[14:59:41] [PASSED] 27 VFs
[14:59:41] [PASSED] 28 VFs
[14:59:41] [PASSED] 29 VFs
[14:59:41] [PASSED] 30 VFs
[14:59:41] [PASSED] 31 VFs
[14:59:41] [PASSED] 32 VFs
[14:59:41] [PASSED] 33 VFs
[14:59:41] [PASSED] 34 VFs
[14:59:41] [PASSED] 35 VFs
[14:59:41] [PASSED] 36 VFs
[14:59:41] [PASSED] 37 VFs
[14:59:41] [PASSED] 38 VFs
[14:59:41] [PASSED] 39 VFs
[14:59:41] [PASSED] 40 VFs
[14:59:41] [PASSED] 41 VFs
[14:59:41] [PASSED] 42 VFs
[14:59:41] [PASSED] 43 VFs
[14:59:41] [PASSED] 44 VFs
[14:59:41] [PASSED] 45 VFs
[14:59:41] [PASSED] 46 VFs
[14:59:41] [PASSED] 47 VFs
[14:59:41] [PASSED] 48 VFs
[14:59:41] [PASSED] 49 VFs
[14:59:41] [PASSED] 50 VFs
[14:59:41] [PASSED] 51 VFs
[14:59:41] [PASSED] 52 VFs
[14:59:41] [PASSED] 53 VFs
[14:59:41] [PASSED] 54 VFs
[14:59:41] [PASSED] 55 VFs
[14:59:41] [PASSED] 56 VFs
[14:59:41] [PASSED] 57 VFs
[14:59:41] [PASSED] 58 VFs
[14:59:41] [PASSED] 59 VFs
[14:59:41] [PASSED] 60 VFs
[14:59:41] [PASSED] 61 VFs
[14:59:41] [PASSED] 62 VFs
[14:59:41] [PASSED] 63 VFs
[14:59:41] ================= [PASSED] fair_doorbells ==================
[14:59:41] ======================== fair_ggtt  ========================
[14:59:41] [PASSED] 1 VF
[14:59:41] [PASSED] 2 VFs
[14:59:41] [PASSED] 3 VFs
[14:59:41] [PASSED] 4 VFs
[14:59:41] [PASSED] 5 VFs
[14:59:41] [PASSED] 6 VFs
[14:59:41] [PASSED] 7 VFs
[14:59:41] [PASSED] 8 VFs
[14:59:41] [PASSED] 9 VFs
[14:59:41] [PASSED] 10 VFs
[14:59:41] [PASSED] 11 VFs
[14:59:41] [PASSED] 12 VFs
[14:59:41] [PASSED] 13 VFs
[14:59:41] [PASSED] 14 VFs
[14:59:41] [PASSED] 15 VFs
[14:59:41] [PASSED] 16 VFs
[14:59:41] [PASSED] 17 VFs
[14:59:41] [PASSED] 18 VFs
[14:59:41] [PASSED] 19 VFs
[14:59:41] [PASSED] 20 VFs
[14:59:41] [PASSED] 21 VFs
[14:59:41] [PASSED] 22 VFs
[14:59:41] [PASSED] 23 VFs
[14:59:41] [PASSED] 24 VFs
[14:59:41] [PASSED] 25 VFs
[14:59:41] [PASSED] 26 VFs
[14:59:41] [PASSED] 27 VFs
[14:59:41] [PASSED] 28 VFs
[14:59:41] [PASSED] 29 VFs
[14:59:41] [PASSED] 30 VFs
[14:59:41] [PASSED] 31 VFs
[14:59:41] [PASSED] 32 VFs
[14:59:41] [PASSED] 33 VFs
[14:59:41] [PASSED] 34 VFs
[14:59:41] [PASSED] 35 VFs
[14:59:41] [PASSED] 36 VFs
[14:59:41] [PASSED] 37 VFs
[14:59:41] [PASSED] 38 VFs
[14:59:41] [PASSED] 39 VFs
[14:59:41] [PASSED] 40 VFs
[14:59:41] [PASSED] 41 VFs
[14:59:41] [PASSED] 42 VFs
[14:59:41] [PASSED] 43 VFs
[14:59:41] [PASSED] 44 VFs
[14:59:41] [PASSED] 45 VFs
[14:59:41] [PASSED] 46 VFs
[14:59:41] [PASSED] 47 VFs
[14:59:41] [PASSED] 48 VFs
[14:59:41] [PASSED] 49 VFs
[14:59:41] [PASSED] 50 VFs
[14:59:41] [PASSED] 51 VFs
[14:59:41] [PASSED] 52 VFs
[14:59:41] [PASSED] 53 VFs
[14:59:41] [PASSED] 54 VFs
[14:59:41] [PASSED] 55 VFs
[14:59:41] [PASSED] 56 VFs
[14:59:41] [PASSED] 57 VFs
[14:59:41] [PASSED] 58 VFs
[14:59:41] [PASSED] 59 VFs
[14:59:41] [PASSED] 60 VFs
[14:59:41] [PASSED] 61 VFs
[14:59:41] [PASSED] 62 VFs
[14:59:41] [PASSED] 63 VFs
[14:59:41] ==================== [PASSED] fair_ggtt ====================
[14:59:41] ======================== fair_vram  ========================
[14:59:41] [PASSED] 1 VF
[14:59:41] [PASSED] 2 VFs
[14:59:41] [PASSED] 3 VFs
[14:59:41] [PASSED] 4 VFs
[14:59:41] [PASSED] 5 VFs
[14:59:41] [PASSED] 6 VFs
[14:59:41] [PASSED] 7 VFs
[14:59:41] [PASSED] 8 VFs
[14:59:41] [PASSED] 9 VFs
[14:59:41] [PASSED] 10 VFs
[14:59:41] [PASSED] 11 VFs
[14:59:41] [PASSED] 12 VFs
[14:59:41] [PASSED] 13 VFs
[14:59:41] [PASSED] 14 VFs
[14:59:41] [PASSED] 15 VFs
[14:59:41] [PASSED] 16 VFs
[14:59:41] [PASSED] 17 VFs
[14:59:41] [PASSED] 18 VFs
[14:59:41] [PASSED] 19 VFs
[14:59:41] [PASSED] 20 VFs
[14:59:41] [PASSED] 21 VFs
[14:59:41] [PASSED] 22 VFs
[14:59:41] [PASSED] 23 VFs
[14:59:41] [PASSED] 24 VFs
[14:59:41] [PASSED] 25 VFs
[14:59:41] [PASSED] 26 VFs
[14:59:41] [PASSED] 27 VFs
[14:59:41] [PASSED] 28 VFs
[14:59:41] [PASSED] 29 VFs
[14:59:41] [PASSED] 30 VFs
[14:59:41] [PASSED] 31 VFs
[14:59:41] [PASSED] 32 VFs
[14:59:41] [PASSED] 33 VFs
[14:59:41] [PASSED] 34 VFs
[14:59:41] [PASSED] 35 VFs
[14:59:41] [PASSED] 36 VFs
[14:59:41] [PASSED] 37 VFs
[14:59:41] [PASSED] 38 VFs
[14:59:41] [PASSED] 39 VFs
[14:59:41] [PASSED] 40 VFs
[14:59:41] [PASSED] 41 VFs
[14:59:41] [PASSED] 42 VFs
[14:59:41] [PASSED] 43 VFs
[14:59:41] [PASSED] 44 VFs
[14:59:41] [PASSED] 45 VFs
[14:59:41] [PASSED] 46 VFs
[14:59:41] [PASSED] 47 VFs
[14:59:41] [PASSED] 48 VFs
[14:59:41] [PASSED] 49 VFs
[14:59:41] [PASSED] 50 VFs
[14:59:41] [PASSED] 51 VFs
[14:59:41] [PASSED] 52 VFs
[14:59:41] [PASSED] 53 VFs
[14:59:41] [PASSED] 54 VFs
[14:59:41] [PASSED] 55 VFs
[14:59:41] [PASSED] 56 VFs
[14:59:41] [PASSED] 57 VFs
[14:59:41] [PASSED] 58 VFs
[14:59:41] [PASSED] 59 VFs
[14:59:41] [PASSED] 60 VFs
[14:59:41] [PASSED] 61 VFs
[14:59:41] [PASSED] 62 VFs
[14:59:41] [PASSED] 63 VFs
[14:59:41] ==================== [PASSED] fair_vram ====================
[14:59:41] ================== [PASSED] pf_gt_config ===================
[14:59:41] ===================== lmtt (1 subtest) =====================
[14:59:41] ======================== test_ops  =========================
[14:59:41] [PASSED] 2-level
[14:59:41] [PASSED] multi-level
[14:59:41] ==================== [PASSED] test_ops =====================
[14:59:41] ====================== [PASSED] lmtt =======================
[14:59:41] ================= sriov_packet (1 subtest) =================
[14:59:41] [PASSED] test_descriptor_init
[14:59:41] ================== [PASSED] sriov_packet ===================
[14:59:41] ================= pf_service (11 subtests) =================
[14:59:41] [PASSED] pf_negotiate_any
[14:59:41] [PASSED] pf_negotiate_base_match
[14:59:41] [PASSED] pf_negotiate_base_newer
[14:59:41] [PASSED] pf_negotiate_base_next
[14:59:41] [SKIPPED] pf_negotiate_base_older (no older minor)
[14:59:41] [PASSED] pf_negotiate_base_prev
[14:59:41] [PASSED] pf_negotiate_latest_match
[14:59:41] [PASSED] pf_negotiate_latest_newer
[14:59:41] [PASSED] pf_negotiate_latest_next
[14:59:41] [SKIPPED] pf_negotiate_latest_older (no older minor)
[14:59:41] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[14:59:41] =================== [PASSED] pf_service ====================
[14:59:41] ================= xe_guc_g2g (2 subtests) ==================
[14:59:41] ============== xe_live_guc_g2g_kunit_default  ==============
[14:59:41] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[14:59:41] ============== xe_live_guc_g2g_kunit_allmem  ===============
[14:59:41] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[14:59:41] =================== [SKIPPED] xe_guc_g2g ===================
[14:59:41] =================== xe_mocs (2 subtests) ===================
[14:59:41] ================ xe_live_mocs_kernel_kunit  ================
[14:59:41] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[14:59:41] ================ xe_live_mocs_reset_kunit  =================
[14:59:41] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[14:59:41] ==================== [SKIPPED] xe_mocs =====================
[14:59:41] ================= xe_migrate (3 subtests) ==================
[14:59:41] ================= xe_migrate_sanity_kunit  =================
[14:59:41] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[14:59:41] ================== xe_validate_ccs_kunit  ==================
[14:59:41] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[14:59:41] ============= xe_migrate_access_memory_kunit  ==============
[14:59:41] ========= [SKIPPED] xe_migrate_access_memory_kunit =========
[14:59:41] =================== [SKIPPED] xe_migrate ===================
[14:59:41] ================== xe_dma_buf (1 subtest) ==================
[14:59:41] ==================== xe_dma_buf_kunit  =====================
[14:59:41] ================ [SKIPPED] xe_dma_buf_kunit ================
[14:59:41] =================== [SKIPPED] xe_dma_buf ===================
[14:59:41] ================= xe_bo_shrink (1 subtest) =================
[14:59:41] =================== xe_bo_shrink_kunit  ====================
[14:59:41] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[14:59:41] ================== [SKIPPED] xe_bo_shrink ==================
[14:59:41] ==================== xe_bo (2 subtests) ====================
[14:59:41] ================== xe_ccs_migrate_kunit  ===================
[14:59:41] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[14:59:41] ==================== xe_bo_evict_kunit  ====================
[14:59:41] =============== [SKIPPED] xe_bo_evict_kunit ================
[14:59:41] ===================== [SKIPPED] xe_bo ======================
[14:59:41] =================== xe_any (9 subtests) ====================
[14:59:41] [PASSED] test_to_xe
[14:59:41] [PASSED] test_to_dev
[14:59:41] [PASSED] test_to_pdev
[14:59:41] [PASSED] test_to_drm
[14:59:41] [PASSED] test_if_pdev
[14:59:41] [PASSED] test_if_xe
[14:59:41] [PASSED] test_if_tile
[14:59:41] [PASSED] test_if_gt
[14:59:41] [PASSED] test_to_id
[14:59:41] ===================== [PASSED] xe_any ======================
[14:59:41] ==================== args (13 subtests) ====================
[14:59:41] [PASSED] count_args_test
[14:59:41] [PASSED] call_args_example
[14:59:41] [PASSED] call_args_test
[14:59:41] [PASSED] drop_first_arg_example
[14:59:41] [PASSED] drop_first_arg_test
[14:59:41] [PASSED] first_arg_example
[14:59:41] [PASSED] first_arg_test
[14:59:41] [PASSED] last_arg_example
[14:59:41] [PASSED] last_arg_test
[14:59:41] [PASSED] pick_arg_example
[14:59:41] [PASSED] if_args_example
[14:59:41] [PASSED] if_args_test
[14:59:41] [PASSED] sep_comma_example
[14:59:41] ====================== [PASSED] args =======================
[14:59:41] =================== xe_pci (3 subtests) ====================
[14:59:41] ==================== check_graphics_ip  ====================
[14:59:41] [PASSED] 12.00 Xe_LP
[14:59:41] [PASSED] 12.10 Xe_LP+
[14:59:41] [PASSED] 12.55 Xe_HPG
[14:59:41] [PASSED] 12.60 Xe_HPC
[14:59:41] [PASSED] 12.70 Xe_LPG
[14:59:41] [PASSED] 12.71 Xe_LPG
[14:59:41] [PASSED] 12.74 Xe_LPG+
[14:59:41] [PASSED] 20.01 Xe2_HPG
[14:59:41] [PASSED] 20.02 Xe2_HPG
[14:59:41] [PASSED] 20.04 Xe2_LPG
[14:59:41] [PASSED] 30.00 Xe3_LPG
[14:59:41] [PASSED] 30.01 Xe3_LPG
[14:59:41] [PASSED] 30.03 Xe3_LPG
[14:59:41] [PASSED] 30.04 Xe3_LPG
[14:59:41] [PASSED] 30.05 Xe3_LPG
[14:59:41] [PASSED] 35.10 Xe3p_LPG
[14:59:41] [PASSED] 35.11 Xe3p_XPC
[14:59:41] ================ [PASSED] check_graphics_ip ================
[14:59:41] ===================== check_media_ip  ======================
[14:59:41] [PASSED] 12.00 Xe_M
[14:59:41] [PASSED] 12.55 Xe_HPM
[14:59:41] [PASSED] 13.00 Xe_LPM+
[14:59:41] [PASSED] 13.01 Xe2_HPM
[14:59:41] [PASSED] 20.00 Xe2_LPM
[14:59:41] [PASSED] 30.00 Xe3_LPM
[14:59:41] [PASSED] 30.02 Xe3_LPM
[14:59:41] [PASSED] 35.00 Xe3p_LPM
[14:59:41] [PASSED] 35.03 Xe3p_HPM
[14:59:41] ================= [PASSED] check_media_ip ==================
[14:59:41] =================== check_platform_desc  ===================
[14:59:41] [PASSED] 0x9A60 (TIGERLAKE)
[14:59:41] [PASSED] 0x9A68 (TIGERLAKE)
[14:59:41] [PASSED] 0x9A70 (TIGERLAKE)
[14:59:41] [PASSED] 0x9A40 (TIGERLAKE)
[14:59:41] [PASSED] 0x9A49 (TIGERLAKE)
[14:59:41] [PASSED] 0x9A59 (TIGERLAKE)
[14:59:41] [PASSED] 0x9A78 (TIGERLAKE)
[14:59:41] [PASSED] 0x9AC0 (TIGERLAKE)
[14:59:41] [PASSED] 0x9AC9 (TIGERLAKE)
[14:59:41] [PASSED] 0x9AD9 (TIGERLAKE)
[14:59:41] [PASSED] 0x9AF8 (TIGERLAKE)
[14:59:41] [PASSED] 0x4C80 (ROCKETLAKE)
[14:59:41] [PASSED] 0x4C8A (ROCKETLAKE)
[14:59:41] [PASSED] 0x4C8B (ROCKETLAKE)
[14:59:41] [PASSED] 0x4C8C (ROCKETLAKE)
[14:59:41] [PASSED] 0x4C90 (ROCKETLAKE)
[14:59:41] [PASSED] 0x4C9A (ROCKETLAKE)
[14:59:41] [PASSED] 0x4680 (ALDERLAKE_S)
[14:59:41] [PASSED] 0x4682 (ALDERLAKE_S)
[14:59:41] [PASSED] 0x4688 (ALDERLAKE_S)
[14:59:41] [PASSED] 0x468A (ALDERLAKE_S)
[14:59:41] [PASSED] 0x468B (ALDERLAKE_S)
[14:59:41] [PASSED] 0x4690 (ALDERLAKE_S)
[14:59:41] [PASSED] 0x4692 (ALDERLAKE_S)
[14:59:41] [PASSED] 0x4693 (ALDERLAKE_S)
[14:59:41] [PASSED] 0x46A0 (ALDERLAKE_P)
[14:59:41] [PASSED] 0x46A1 (ALDERLAKE_P)
[14:59:41] [PASSED] 0x46A2 (ALDERLAKE_P)
[14:59:41] [PASSED] 0x46A3 (ALDERLAKE_P)
[14:59:41] [PASSED] 0x46A6 (ALDERLAKE_P)
[14:59:41] [PASSED] 0x46A8 (ALDERLAKE_P)
[14:59:41] [PASSED] 0x46AA (ALDERLAKE_P)
[14:59:41] [PASSED] 0x462A (ALDERLAKE_P)
[14:59:41] [PASSED] 0x4626 (ALDERLAKE_P)
[14:59:41] [PASSED] 0x4628 (ALDERLAKE_P)
[14:59:41] [PASSED] 0x46B0 (ALDERLAKE_P)
[14:59:41] [PASSED] 0x46B1 (ALDERLAKE_P)
[14:59:41] [PASSED] 0x46B2 (ALDERLAKE_P)
[14:59:41] [PASSED] 0x46B3 (ALDERLAKE_P)
[14:59:41] [PASSED] 0x46C0 (ALDERLAKE_P)
[14:59:41] [PASSED] 0x46C1 (ALDERLAKE_P)
[14:59:41] [PASSED] 0x46C2 (ALDERLAKE_P)
[14:59:41] [PASSED] 0x46C3 (ALDERLAKE_P)
[14:59:41] [PASSED] 0x46D0 (ALDERLAKE_N)
[14:59:41] [PASSED] 0x46D1 (ALDERLAKE_N)
[14:59:41] [PASSED] 0x46D2 (ALDERLAKE_N)
[14:59:41] [PASSED] 0x46D3 (ALDERLAKE_N)
[14:59:41] [PASSED] 0x46D4 (ALDERLAKE_N)
[14:59:41] [PASSED] 0xA721 (ALDERLAKE_P)
[14:59:41] [PASSED] 0xA7A1 (ALDERLAKE_P)
[14:59:41] [PASSED] 0xA7A9 (ALDERLAKE_P)
[14:59:41] [PASSED] 0xA7AC (ALDERLAKE_P)
[14:59:41] [PASSED] 0xA7AD (ALDERLAKE_P)
[14:59:41] [PASSED] 0xA720 (ALDERLAKE_P)
[14:59:41] [PASSED] 0xA7A0 (ALDERLAKE_P)
[14:59:41] [PASSED] 0xA7A8 (ALDERLAKE_P)
[14:59:41] [PASSED] 0xA7AA (ALDERLAKE_P)
[14:59:41] [PASSED] 0xA7AB (ALDERLAKE_P)
[14:59:41] [PASSED] 0xA780 (ALDERLAKE_S)
[14:59:41] [PASSED] 0xA781 (ALDERLAKE_S)
[14:59:41] [PASSED] 0xA782 (ALDERLAKE_S)
[14:59:41] [PASSED] 0xA783 (ALDERLAKE_S)
[14:59:41] [PASSED] 0xA788 (ALDERLAKE_S)
[14:59:41] [PASSED] 0xA789 (ALDERLAKE_S)
[14:59:41] [PASSED] 0xA78A (ALDERLAKE_S)
[14:59:41] [PASSED] 0xA78B (ALDERLAKE_S)
[14:59:41] [PASSED] 0x4905 (DG1)
[14:59:41] [PASSED] 0x4906 (DG1)
[14:59:41] [PASSED] 0x4907 (DG1)
[14:59:41] [PASSED] 0x4908 (DG1)
[14:59:41] [PASSED] 0x4909 (DG1)
[14:59:41] [PASSED] 0x56C0 (DG2)
[14:59:41] [PASSED] 0x56C2 (DG2)
[14:59:41] [PASSED] 0x56C1 (DG2)
[14:59:41] [PASSED] 0x7D51 (METEORLAKE)
[14:59:41] [PASSED] 0x7DD1 (METEORLAKE)
[14:59:41] [PASSED] 0x7D41 (METEORLAKE)
[14:59:41] [PASSED] 0x7D67 (METEORLAKE)
[14:59:41] [PASSED] 0xB640 (METEORLAKE)
[14:59:41] [PASSED] 0x56A0 (DG2)
[14:59:41] [PASSED] 0x56A1 (DG2)
[14:59:41] [PASSED] 0x56A2 (DG2)
[14:59:41] [PASSED] 0x56BE (DG2)
[14:59:41] [PASSED] 0x56BF (DG2)
[14:59:41] [PASSED] 0x5690 (DG2)
[14:59:41] [PASSED] 0x5691 (DG2)
[14:59:41] [PASSED] 0x5692 (DG2)
[14:59:41] [PASSED] 0x56A5 (DG2)
[14:59:41] [PASSED] 0x56A6 (DG2)
[14:59:41] [PASSED] 0x56B0 (DG2)
[14:59:41] [PASSED] 0x56B1 (DG2)
[14:59:41] [PASSED] 0x56BA (DG2)
[14:59:41] [PASSED] 0x56BB (DG2)
[14:59:41] [PASSED] 0x56BC (DG2)
[14:59:41] [PASSED] 0x56BD (DG2)
[14:59:41] [PASSED] 0x5693 (DG2)
[14:59:41] [PASSED] 0x5694 (DG2)
[14:59:41] [PASSED] 0x5695 (DG2)
[14:59:41] [PASSED] 0x56A3 (DG2)
[14:59:41] [PASSED] 0x56A4 (DG2)
[14:59:41] [PASSED] 0x56B2 (DG2)
[14:59:41] [PASSED] 0x56B3 (DG2)
[14:59:41] [PASSED] 0x5696 (DG2)
[14:59:41] [PASSED] 0x5697 (DG2)
[14:59:41] [PASSED] 0xB69 (PVC)
[14:59:41] [PASSED] 0xB6E (PVC)
[14:59:41] [PASSED] 0xBD4 (PVC)
[14:59:41] [PASSED] 0xBD5 (PVC)
[14:59:41] [PASSED] 0xBD6 (PVC)
[14:59:41] [PASSED] 0xBD7 (PVC)
[14:59:41] [PASSED] 0xBD8 (PVC)
[14:59:41] [PASSED] 0xBD9 (PVC)
[14:59:41] [PASSED] 0xBDA (PVC)
[14:59:41] [PASSED] 0xBDB (PVC)
[14:59:41] [PASSED] 0xBE0 (PVC)
[14:59:41] [PASSED] 0xBE1 (PVC)
[14:59:41] [PASSED] 0xBE5 (PVC)
[14:59:41] [PASSED] 0x7D40 (METEORLAKE)
[14:59:41] [PASSED] 0x7D45 (METEORLAKE)
[14:59:41] [PASSED] 0x7D55 (METEORLAKE)
[14:59:41] [PASSED] 0x7D60 (METEORLAKE)
[14:59:41] [PASSED] 0x7DD5 (METEORLAKE)
[14:59:41] [PASSED] 0x6420 (LUNARLAKE)
[14:59:41] [PASSED] 0x64A0 (LUNARLAKE)
[14:59:41] [PASSED] 0x64B0 (LUNARLAKE)
[14:59:41] [PASSED] 0xE202 (BATTLEMAGE)
[14:59:41] [PASSED] 0xE209 (BATTLEMAGE)
[14:59:41] [PASSED] 0xE20B (BATTLEMAGE)
[14:59:41] [PASSED] 0xE20C (BATTLEMAGE)
[14:59:41] [PASSED] 0xE20D (BATTLEMAGE)
[14:59:41] [PASSED] 0xE210 (BATTLEMAGE)
[14:59:41] [PASSED] 0xE211 (BATTLEMAGE)
[14:59:41] [PASSED] 0xE212 (BATTLEMAGE)
[14:59:41] [PASSED] 0xE216 (BATTLEMAGE)
[14:59:41] [PASSED] 0xE220 (BATTLEMAGE)
[14:59:41] [PASSED] 0xE221 (BATTLEMAGE)
[14:59:41] [PASSED] 0xE222 (BATTLEMAGE)
[14:59:41] [PASSED] 0xE223 (BATTLEMAGE)
[14:59:41] [PASSED] 0xB080 (PANTHERLAKE)
[14:59:41] [PASSED] 0xB081 (PANTHERLAKE)
[14:59:41] [PASSED] 0xB082 (PANTHERLAKE)
[14:59:41] [PASSED] 0xB083 (PANTHERLAKE)
[14:59:41] [PASSED] 0xB084 (PANTHERLAKE)
[14:59:41] [PASSED] 0xB085 (PANTHERLAKE)
[14:59:41] [PASSED] 0xB086 (PANTHERLAKE)
[14:59:41] [PASSED] 0xB087 (PANTHERLAKE)
[14:59:41] [PASSED] 0xB08F (PANTHERLAKE)
[14:59:41] [PASSED] 0xB090 (PANTHERLAKE)
[14:59:41] [PASSED] 0xB0A0 (PANTHERLAKE)
[14:59:41] [PASSED] 0xB0A1 (PANTHERLAKE)
[14:59:41] [PASSED] 0xB0B0 (PANTHERLAKE)
[14:59:41] [PASSED] 0xFD80 (PANTHERLAKE)
[14:59:41] [PASSED] 0xFD81 (PANTHERLAKE)
[14:59:41] [PASSED] 0xD740 (NOVALAKE_S)
[14:59:41] [PASSED] 0xD741 (NOVALAKE_S)
[14:59:41] [PASSED] 0xD742 (NOVALAKE_S)
[14:59:41] [PASSED] 0xD743 (NOVALAKE_S)
[14:59:41] [PASSED] 0xD745 (NOVALAKE_S)
[14:59:41] [PASSED] 0xD74A (NOVALAKE_S)
[14:59:41] [PASSED] 0xD74B (NOVALAKE_S)
[14:59:41] [PASSED] 0x674C (CRESCENTISLAND)
[14:59:41] [PASSED] 0x674D (CRESCENTISLAND)
[14:59:41] [PASSED] 0x674E (CRESCENTISLAND)
[14:59:41] [PASSED] 0x674F (CRESCENTISLAND)
[14:59:41] [PASSED] 0x6750 (CRESCENTISLAND)
[14:59:41] [PASSED] 0x6751 (CRESCENTISLAND)
[14:59:41] [PASSED] 0xD750 (NOVALAKE_P)
[14:59:41] [PASSED] 0xD751 (NOVALAKE_P)
[14:59:41] [PASSED] 0xD752 (NOVALAKE_P)
[14:59:41] [PASSED] 0xD753 (NOVALAKE_P)
[14:59:41] [PASSED] 0xD754 (NOVALAKE_P)
[14:59:41] [PASSED] 0xD755 (NOVALAKE_P)
[14:59:41] [PASSED] 0xD756 (NOVALAKE_P)
[14:59:41] [PASSED] 0xD757 (NOVALAKE_P)
[14:59:41] [PASSED] 0xD75F (NOVALAKE_P)
[14:59:41] =============== [PASSED] check_platform_desc ===============
[14:59:41] ===================== [PASSED] xe_pci ======================
[14:59:41] ============= xe_rtp_tables_test (5 subtests) ==============
[14:59:41] ================== xe_rtp_table_gt_test  ===================
[14:59:41] [PASSED] gt_was/14011060649
[14:59:41] [PASSED] gt_was/14011059788
[14:59:41] [PASSED] gt_was/14015795083
[14:59:41] [PASSED] gt_was/16021867713
[14:59:41] [PASSED] gt_was/14019449301
[14:59:41] [PASSED] gt_was/16028005424
[14:59:41] [PASSED] gt_was/14026578760
[14:59:41] [PASSED] gt_was/1409420604
[14:59:41] [PASSED] gt_was/1408615072
[14:59:41] [PASSED] gt_was/22010523718
[14:59:41] [PASSED] gt_was/14011006942
[14:59:41] [PASSED] gt_was/14014830051
[14:59:41] [PASSED] gt_was/18018781329
[14:59:41] [PASSED] gt_was/1509235366
[14:59:41] [PASSED] gt_was/18018781329
[14:59:41] [PASSED] gt_was/16016694945
[14:59:41] [PASSED] gt_was/14018575942
[14:59:41] [PASSED] gt_was/22016670082
[14:59:41] [PASSED] gt_was/22016670082
[14:59:41] [PASSED] gt_was/14017421178
[14:59:41] [PASSED] gt_was/16025250150
[14:59:41] [PASSED] gt_was/14021871409
[14:59:41] [PASSED] gt_was/16021865536
[14:59:41] [PASSED] gt_was/14021486841
[14:59:41] [PASSED] gt_was/14025160223
[14:59:41] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[14:59:41] [PASSED] gt_was/14025635424
[14:59:41] [PASSED] gt_was/16028005424
[14:59:41] ============== [PASSED] xe_rtp_table_gt_test ===============
[14:59:41] ================== xe_rtp_table_gt_test  ===================
[14:59:41] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[14:59:41] [PASSED] gt_tunings/Tuning: 32B Access Enable
[14:59:41] [PASSED] gt_tunings/Tuning: L3 cache
[14:59:41] [PASSED] gt_tunings/Tuning: L3 cache - media
[14:59:41] [PASSED] gt_tunings/Tuning: Compression Overfetch
[14:59:41] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[14:59:41] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[14:59:41] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[14:59:41] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[14:59:41] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[14:59:41] [PASSED] gt_tunings/Tuning: Stateless compression control
[14:59:41] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[14:59:41] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[14:59:41] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[14:59:41] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[14:59:41] [PASSED] gt_tunings/Tuning: Force All Non-Compressible Memory Reads to be 256B Overfetches
[14:59:41] ============== [PASSED] xe_rtp_table_gt_test ===============
[14:59:41] ================== xe_rtp_table_oob_test  ==================
[14:59:41] [PASSED] oob_was/1607983814
[14:59:41] [PASSED] oob_was/16010904313
[14:59:41] [PASSED] oob_was/18022495364
[14:59:41] [PASSED] oob_was/22012773006
[14:59:41] [PASSED] oob_was/14014475959
[14:59:41] [PASSED] oob_was/22011391025
[14:59:41] [PASSED] oob_was/22012727170
[14:59:41] [PASSED] oob_was/22012727685
[14:59:41] [PASSED] oob_was/22016596838
[14:59:41] [PASSED] oob_was/18020744125
[14:59:41] [PASSED] oob_was/1409600907
[14:59:41] [PASSED] oob_was/22014953428
[14:59:41] [PASSED] oob_was/16017236439
[14:59:41] [PASSED] oob_was/14019821291
[14:59:41] [PASSED] oob_was/14015076503
[14:59:41] [PASSED] oob_was/22016122933
[14:59:41] [PASSED] oob_was/14018913170
[14:59:41] [PASSED] oob_was/14018094691
[14:59:41] [PASSED] oob_was/18024947630
[14:59:41] [PASSED] oob_was/16022287689
[14:59:41] [PASSED] oob_was/13011645652
[14:59:41] [PASSED] oob_was/14022293748
[14:59:41] [PASSED] oob_was/22019794406
[14:59:41] [PASSED] oob_was/22019338487
[14:59:41] [PASSED] oob_was/16023588340
[14:59:41] [PASSED] oob_was/14019789679
[14:59:41] [PASSED] oob_was/14022866841
[14:59:41] [PASSED] oob_was/16021333562
[14:59:41] [PASSED] oob_was/14016712196
[14:59:41] [PASSED] oob_was/14015568240
[14:59:41] [PASSED] oob_was/18013179988
[14:59:41] [PASSED] oob_was/1508761755
[14:59:41] [PASSED] oob_was/16023105232
[14:59:41] [PASSED] oob_was/16026508708
[14:59:41] [PASSED] oob_was/14020001231
[14:59:41] [PASSED] oob_was/16023683509
[14:59:41] [PASSED] oob_was/14025515070
[14:59:41] [PASSED] oob_was/15015404425_disable
[14:59:41] [PASSED] oob_was/16026007364
[14:59:41] [PASSED] oob_was/14020316580
[14:59:41] [PASSED] oob_was/14025883347
[14:59:41] [PASSED] oob_was/16029380221
[14:59:41] [PASSED] oob_was/22022079272
[14:59:41] [PASSED] oob_was/16029897822
[14:59:41] [PASSED] oob_was/14027054324
[14:59:41] [PASSED] oob_was/14025941587
[14:59:41] [PASSED] oob_was/16030224309
[14:59:41] ============== [PASSED] xe_rtp_table_oob_test ==============
[14:59:41] ================ xe_rtp_table_dev_oob_test  ================
[14:59:41] [PASSED] device_oob_was/22010954014
[14:59:41] [PASSED] device_oob_was/15015404425
[14:59:41] [PASSED] device_oob_was/22019338487_display
[14:59:41] [PASSED] device_oob_was/14022085890
[14:59:41] [PASSED] device_oob_was/14026539277
[14:59:41] [PASSED] device_oob_was/14026633728
[14:59:41] [PASSED] device_oob_was/14026746987
[14:59:41] [PASSED] device_oob_was/14026779378
[14:59:41] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[14:59:41] ========== xe_rtp_table_missing_upper_bound_test  ==========
[14:59:41] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[14:59:41] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[14:59:41] [PASSED] register_whitelist/1806527549
[14:59:41] [PASSED] register_whitelist/allow_read_ctx_timestamp
[14:59:41] [PASSED] register_whitelist/allow_read_queue_timestamp
[14:59:41] [PASSED] register_whitelist/16014440446
[14:59:41] [PASSED] register_whitelist/16017236439
[14:59:41] [PASSED] register_whitelist/16020183090
[14:59:41] [PASSED] register_whitelist/14024997852
[14:59:41] [PASSED] register_whitelist/14024997852
[14:59:41] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[14:59:41] =============== [PASSED] xe_rtp_tables_test ================
[14:59:41] =================== xe_rtp (3 subtests) ====================
[14:59:41] =================== xe_rtp_rules_tests  ====================
[14:59:41] [PASSED] no
[14:59:41] [PASSED] yes
[14:59:41] [PASSED] no-and-no
[14:59:41] [PASSED] no-and-yes
[14:59:41] [PASSED] yes-and-no
[14:59:41] [PASSED] yes-and-yes
[14:59:41] [PASSED] no-or-no
[14:59:41] [PASSED] no-or-yes
[14:59:41] [PASSED] yes-or-no
[14:59:41] [PASSED] yes-or-yes
[14:59:41] [PASSED] no-yes-or-yes-no
[14:59:41] [PASSED] no-yes-or-yes-yes
[14:59:41] [PASSED] yes-yes-or-no-yes
[14:59:41] [PASSED] yes-yes-or-yes-yes
[14:59:41] [PASSED] no-no-or-yes-or-no
[14:59:41] [PASSED] or
[14:59:41] [PASSED] or-yes
[14:59:41] [PASSED] or-no
[14:59:41] [PASSED] yes-or
[14:59:41] [PASSED] no-or
[14:59:41] [PASSED] no-or-or-yes
[14:59:41] [PASSED] yes-or-or-no
[14:59:41] [PASSED] no-or-or-no
[14:59:41] [PASSED] missing-context-engine-class
[14:59:41] [PASSED] missing-context-engine-class-or-yes
[14:59:41] [PASSED] missing-context-engine-class-or-or-yes
[14:59:41] =============== [PASSED] xe_rtp_rules_tests ================
[14:59:41] =============== xe_rtp_process_to_sr_tests  ================
[14:59:41] [PASSED] coalesce-same-reg
[14:59:41] [PASSED] coalesce-same-reg-literal-and-func
[14:59:41] [PASSED] no-match-no-add
[14:59:41] [PASSED] two-regs-two-entries
[14:59:41] [PASSED] clr-one-set-other
[14:59:41] [PASSED] set-field
[14:59:41] [PASSED] conflict-duplicate
[14:59:41] [PASSED] conflict-not-disjoint
[14:59:41] [PASSED] conflict-not-disjoint-literal-and-func
[14:59:41] [PASSED] conflict-reg-type
[14:59:41] [PASSED] bad-mcr-reg-forced-to-regular
[14:59:41] [PASSED] bad-regular-reg-forced-to-mcr
[14:59:41] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[14:59:41] ================== xe_rtp_process_tests  ===================
[14:59:41] [PASSED] active1
[14:59:41] [PASSED] active2
[14:59:41] [PASSED] active-inactive
[14:59:41] [PASSED] inactive-active
[14:59:41] [PASSED] inactive-active-inactive
[14:59:41] [PASSED] inactive-inactive-inactive
[14:59:41] ============== [PASSED] xe_rtp_process_tests ===============
[14:59:41] ===================== [PASSED] xe_rtp ======================
[14:59:41] ==================== xe_wa (1 subtest) =====================
[14:59:41] ======================== xe_wa_gt  =========================
[14:59:41] [PASSED] TIGERLAKE B0
[14:59:41] [PASSED] DG1 A0
[14:59:41] [PASSED] DG1 B0
[14:59:41] [PASSED] ALDERLAKE_S A0
[14:59:41] [PASSED] ALDERLAKE_S B0
[14:59:41] [PASSED] ALDERLAKE_S C0
[14:59:41] [PASSED] ALDERLAKE_S D0
[14:59:41] [PASSED] ALDERLAKE_P A0
[14:59:41] [PASSED] ALDERLAKE_P B0
[14:59:41] [PASSED] ALDERLAKE_P C0
[14:59:41] [PASSED] ALDERLAKE_S RPLS D0
[14:59:41] [PASSED] ALDERLAKE_P RPLU E0
[14:59:41] [PASSED] DG2 G10 C0
[14:59:41] [PASSED] DG2 G11 B1
[14:59:41] [PASSED] DG2 G12 A1
[14:59:41] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[14:59:41] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[14:59:41] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[14:59:41] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[14:59:41] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[14:59:41] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[14:59:41] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[14:59:41] ==================== [PASSED] xe_wa_gt =====================
[14:59:41] ====================== [PASSED] xe_wa ======================
[14:59:41] ============================================================
[14:59:41] Testing complete. Ran 838 tests: passed: 809, skipped: 29
[14:59:42] Elapsed time: 41.327s total, 1.861s configuring, 38.701s building, 0.718s running

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

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

+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/dma-buf/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[15:00:21] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[15:00:23] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[15:00:32] Starting KUnit Kernel (1/1)...
[15:00:32] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[15:00:32] =============== dma-buf-fence (12 subtests) ================
[15:00:32] [PASSED] test_sanitycheck
[15:00:32] [PASSED] test_signaling
[15:00:32] [PASSED] test_add_callback
[15:00:32] [PASSED] test_late_add_callback
[15:00:32] [PASSED] test_rm_callback
[15:00:32] [PASSED] test_late_rm_callback
[15:00:32] [PASSED] test_status
[15:00:32] [PASSED] test_error
[15:00:32] [PASSED] test_wait
[15:00:32] [PASSED] test_wait_timeout
[15:00:32] [PASSED] test_stub
[15:00:32] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[15:00:32] ================== [PASSED] dma-buf-fence ==================
[15:00:32] ============ dma-buf-fence-chain (11 subtests) =============
[15:00:32] [PASSED] test_sanitycheck
[15:00:32] [PASSED] test_find_seqno
[15:00:32] [PASSED] test_find_signaled
[15:00:32] [PASSED] test_find_out_of_order
[15:00:37] [PASSED] test_find_gap
[15:00:37] [PASSED] test_find_race
[15:00:37] [PASSED] test_signal_forward
[15:00:37] [PASSED] test_signal_backward
[15:00:37] [PASSED] test_wait_forward
[15:00:37] [PASSED] test_wait_backward
[15:00:37] [PASSED] test_wait_random
[15:00:37] =============== [PASSED] dma-buf-fence-chain ===============
[15:00:37] ============ dma-buf-fence-unwrap (11 subtests) ============
[15:00:37] [PASSED] test_sanitycheck
[15:00:37] [PASSED] test_unwrap_array
[15:00:37] [PASSED] test_unwrap_chain
[15:00:37] [PASSED] test_unwrap_chain_array
[15:00:37] [PASSED] test_unwrap_merge
[15:00:37] [PASSED] test_unwrap_merge_duplicate
[15:00:37] [PASSED] test_unwrap_merge_seqno
[15:00:37] [PASSED] test_unwrap_merge_order
[15:00:37] [PASSED] test_unwrap_merge_complex
[15:00:37] [PASSED] test_unwrap_merge_complex_seqno
[15:00:37] [PASSED] test_dedup_empty
[15:00:37] ============== [PASSED] dma-buf-fence-unwrap ===============
[15:00:37] ================ dma-buf-resv (5 subtests) =================
[15:00:37] [PASSED] test_sanitycheck
[15:00:37] ===================== test_signaling  ======================
[15:00:37] [PASSED] kernel
[15:00:37] [PASSED] write
[15:00:37] [PASSED] read
[15:00:37] [PASSED] bookkeep
[15:00:37] ================= [PASSED] test_signaling ==================
[15:00:37] ====================== test_for_each  ======================
[15:00:37] [PASSED] kernel
[15:00:37] [PASSED] write
[15:00:37] [PASSED] read
[15:00:37] [PASSED] bookkeep
[15:00:37] ================== [PASSED] test_for_each ==================
[15:00:37] ================= test_for_each_unlocked  ==================
[15:00:37] [PASSED] kernel
[15:00:37] [PASSED] write
[15:00:37] [PASSED] read
[15:00:37] [PASSED] bookkeep
[15:00:37] ============= [PASSED] test_for_each_unlocked ==============
[15:00:37] ===================== test_get_fences  =====================
[15:00:37] [PASSED] kernel
[15:00:37] [PASSED] write
[15:00:37] [PASSED] read
[15:00:37] [PASSED] bookkeep
[15:00:37] ================= [PASSED] test_get_fences =================
[15:00:37] ================== [PASSED] dma-buf-resv ===================
[15:00:37] ============================================================
[15:00:37] Testing complete. Ran 51 tests: passed: 50, skipped: 1
[15:00:37] Elapsed time: 15.914s total, 1.889s configuring, 8.753s building, 5.263s running

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



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

* ✓ Xe.CI.BAT: success for drm/xe/svm: Take write access only for GC attribute resets
  2026-10-26 12:20 [PATCH] drm/xe/svm: Take write access only for GC attribute resets Arvind Yadav
  2026-10-26 14:58 ` ✗ CI.checkpatch: warning for " Patchwork
  2026-10-26 15:00 ` ✓ CI.KUnit: success " Patchwork
@ 2026-10-26 15:37 ` Patchwork
  2026-10-26 18:50 ` ✓ Xe.CI.FULL: " Patchwork
  2026-10-27 20:44 ` [PATCH] " Matthew Brost
  4 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2026-10-26 15:37 UTC (permalink / raw)
  To: Arvind Yadav; +Cc: intel-xe

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

== Series Details ==

Series: drm/xe/svm: Take write access only for GC attribute resets
URL   : https://patchwork.freedesktop.org/series/176860/
State : success

== Summary ==

CI Bug Log - changes from xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3_BAT -> xe-pw-176860v1_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

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

  Additional (2): bat-bmg-vm bat-ptl-vm 

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

  Here are the changes found in xe-pw-176860v1_BAT that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@core_hotunplug@unbind-rebind:
    - bat-bmg-2:          [PASS][1] -> [ABORT][2] ([Intel XE#9463])
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/bat-bmg-2/igt@core_hotunplug@unbind-rebind.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/bat-bmg-2/igt@core_hotunplug@unbind-rebind.html

  * igt@xe_evict@evict-beng-small-cm:
    - bat-ptl-vm:         NOTRUN -> [SKIP][3] ([Intel XE#5764]) +11 other tests skip
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/bat-ptl-vm/igt@xe_evict@evict-beng-small-cm.html

  * igt@xe_exec_balancer@no-exec-cm-virtual-basic:
    - bat-ptl-vm:         NOTRUN -> [SKIP][4] ([Intel XE#7482]) +17 other tests skip
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/bat-ptl-vm/igt@xe_exec_balancer@no-exec-cm-virtual-basic.html

  * igt@xe_exec_multi_queue@many-queues-preempt-mode-close-fd:
    - bat-ptl-vm:         NOTRUN -> [SKIP][5] ([Intel XE#8364]) +13 other tests skip
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/bat-ptl-vm/igt@xe_exec_multi_queue@many-queues-preempt-mode-close-fd.html

  * igt@xe_exec_multi_queue@many-queues-userptr-invalidate:
    - bat-bmg-vm:         NOTRUN -> [SKIP][6] ([Intel XE#8364]) +13 other tests skip
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/bat-bmg-vm/igt@xe_exec_multi_queue@many-queues-userptr-invalidate.html

  * igt@xe_live_ktest@xe_bo@xe_bo_evict_kunit:
    - bat-ptl-vm:         NOTRUN -> [SKIP][7] ([Intel XE#5775]) +2 other tests skip
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/bat-ptl-vm/igt@xe_live_ktest@xe_bo@xe_bo_evict_kunit.html

  * igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit:
    - bat-bmg-vm:         NOTRUN -> [SKIP][8] ([Intel XE#2229])
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/bat-bmg-vm/igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit.html

  * igt@xe_live_ktest@xe_migrate@xe_migrate_access_memory_kunit:
    - bat-atsm-2:         [PASS][9] -> [ABORT][10] ([Intel XE#9663]) +1 other test abort
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/bat-atsm-2/igt@xe_live_ktest@xe_migrate@xe_migrate_access_memory_kunit.html
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/bat-atsm-2/igt@xe_live_ktest@xe_migrate@xe_migrate_access_memory_kunit.html
    - bat-ptl-vm:         NOTRUN -> [SKIP][11] ([Intel XE#9657])
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/bat-ptl-vm/igt@xe_live_ktest@xe_migrate@xe_migrate_access_memory_kunit.html

  * igt@xe_mmap@vram:
    - bat-ptl-vm:         NOTRUN -> [SKIP][12] ([Intel XE#5776])
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/bat-ptl-vm/igt@xe_mmap@vram.html

  * igt@xe_pat@pat-index-xehpc:
    - bat-ptl-vm:         NOTRUN -> [SKIP][13] ([Intel XE#5777] / [Intel XE#7590])
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/bat-ptl-vm/igt@xe_pat@pat-index-xehpc.html
    - bat-bmg-vm:         NOTRUN -> [SKIP][14] ([Intel XE#1420] / [Intel XE#7590])
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/bat-bmg-vm/igt@xe_pat@pat-index-xehpc.html

  * igt@xe_pat@pat-index-xelp:
    - bat-ptl-vm:         NOTRUN -> [SKIP][15] ([Intel XE#5771] / [Intel XE#7590])
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/bat-ptl-vm/igt@xe_pat@pat-index-xelp.html
    - bat-bmg-vm:         NOTRUN -> [SKIP][16] ([Intel XE#2245] / [Intel XE#7590])
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/bat-bmg-vm/igt@xe_pat@pat-index-xelp.html

  * igt@xe_pat@pat-index-xelpg:
    - bat-ptl-vm:         NOTRUN -> [SKIP][17] ([Intel XE#5780] / [Intel XE#7590])
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/bat-ptl-vm/igt@xe_pat@pat-index-xelpg.html
    - bat-bmg-vm:         NOTRUN -> [SKIP][18] ([Intel XE#2236] / [Intel XE#7590])
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/bat-bmg-vm/igt@xe_pat@pat-index-xelpg.html

  
  [Intel XE#1420]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1420
  [Intel XE#2229]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2229
  [Intel XE#2236]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2236
  [Intel XE#2245]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2245
  [Intel XE#5764]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5764
  [Intel XE#5771]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5771
  [Intel XE#5775]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5775
  [Intel XE#5776]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5776
  [Intel XE#5777]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5777
  [Intel XE#5780]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5780
  [Intel XE#7482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7482
  [Intel XE#7590]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7590
  [Intel XE#8364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8364
  [Intel XE#9463]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9463
  [Intel XE#9657]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9657
  [Intel XE#9663]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9663


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

  * Linux: xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3 -> xe-pw-176860v1

  IGT_9164: 9164
  xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3: 8e30a30c4948a9b30b9af31ebfaaa951630ae8a3
  xe-pw-176860v1: 176860v1

== Logs ==

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

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

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

* ✓ Xe.CI.FULL: success for drm/xe/svm: Take write access only for GC attribute resets
  2026-10-26 12:20 [PATCH] drm/xe/svm: Take write access only for GC attribute resets Arvind Yadav
                   ` (2 preceding siblings ...)
  2026-10-26 15:37 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-10-26 18:50 ` Patchwork
  2026-10-27 20:44 ` [PATCH] " Matthew Brost
  4 siblings, 0 replies; 7+ messages in thread
From: Patchwork @ 2026-10-26 18:50 UTC (permalink / raw)
  To: Arvind Yadav; +Cc: intel-xe

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

== Series Details ==

Series: drm/xe/svm: Take write access only for GC attribute resets
URL   : https://patchwork.freedesktop.org/series/176860/
State : success

== Summary ==

CI Bug Log - changes from xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3_FULL -> xe-pw-176860v1_FULL
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (3 -> 3)
------------------------------

  No changes in participating hosts

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

  Here are the changes found in xe-pw-176860v1_FULL that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing:
    - shard-lnl:          NOTRUN -> [SKIP][1] ([Intel XE#3279])
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_atomic_transition@plane-all-modeset-transition-fencing.html

  * igt@kms_big_fb@4-tiled-32bpp-rotate-270:
    - shard-bmg:          NOTRUN -> [SKIP][2] ([Intel XE#2327])
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_big_fb@4-tiled-32bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-32bpp-rotate-90:
    - shard-ptl:          NOTRUN -> [SKIP][3] ([Intel XE#5808]) +3 other tests skip
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_big_fb@y-tiled-32bpp-rotate-90.html

  * igt@kms_big_fb@y-tiled-addfb:
    - shard-bmg:          NOTRUN -> [SKIP][4] ([Intel XE#2328] / [Intel XE#7367])
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_big_fb@y-tiled-addfb.html

  * igt@kms_big_fb@y-tiled-addfb-size-overflow:
    - shard-lnl:          NOTRUN -> [SKIP][5] ([Intel XE#1428] / [Intel XE#7387])
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_big_fb@y-tiled-addfb-size-overflow.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip:
    - shard-lnl:          NOTRUN -> [SKIP][6] ([Intel XE#1124]) +1 other test skip
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip:
    - shard-bmg:          NOTRUN -> [SKIP][7] ([Intel XE#1124])
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip-async-flip.html

  * igt@kms_bw@connected-linear-tiling-4-displays-target-2160x1440p:
    - shard-bmg:          NOTRUN -> [SKIP][8] ([Intel XE#7679])
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_bw@connected-linear-tiling-4-displays-target-2160x1440p.html

  * igt@kms_bw@connected-linear-tiling-4-displays-target-2560x1440p:
    - shard-ptl:          NOTRUN -> [SKIP][9] ([Intel XE#7679])
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_bw@connected-linear-tiling-4-displays-target-2560x1440p.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-dg2-rc-ccs:
    - shard-ptl:          NOTRUN -> [SKIP][10] ([Intel XE#5822]) +1 other test skip
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_ccs@bad-rotation-90-4-tiled-dg2-rc-ccs.html

  * igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs-cc:
    - shard-bmg:          NOTRUN -> [SKIP][11] ([Intel XE#2887]) +2 other tests skip
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs-cc.html

  * igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc:
    - shard-lnl:          NOTRUN -> [SKIP][12] ([Intel XE#2887]) +3 other tests skip
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
    - shard-bmg:          [PASS][13] -> [INCOMPLETE][14] ([Intel XE#7084] / [Intel XE#8150]) +1 other test incomplete
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-bmg-5/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-7/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html

  * igt@kms_ccs@crc-primary-suspend-y-tiled-ccs:
    - shard-bmg:          NOTRUN -> [SKIP][15] ([Intel XE#3432])
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs.html

  * igt@kms_chamelium_color@ctm-limited-range:
    - shard-ptl:          NOTRUN -> [SKIP][16] ([Intel XE#5824])
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_chamelium_color@ctm-limited-range.html

  * igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt2020:
    - shard-lnl:          NOTRUN -> [SKIP][17] ([Intel XE#7358])
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt2020.html

  * igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4:
    - shard-bmg:          NOTRUN -> [SKIP][18] ([Intel XE#7358])
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4.html

  * igt@kms_chamelium_color_pipeline@plane-lut1d-post-ctm3x4:
    - shard-ptl:          NOTRUN -> [SKIP][19] ([Intel XE#8391])
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_chamelium_color_pipeline@plane-lut1d-post-ctm3x4.html

  * igt@kms_chamelium_frames@dp-crc-single:
    - shard-bmg:          NOTRUN -> [SKIP][20] ([Intel XE#2252]) +2 other tests skip
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_chamelium_frames@dp-crc-single.html

  * igt@kms_chamelium_frames@hdmi-aspect-ratio:
    - shard-ptl:          NOTRUN -> [SKIP][21] ([Intel XE#2252])
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_chamelium_frames@hdmi-aspect-ratio.html

  * igt@kms_content_protection@atomic-dpms-hdcp14@pipe-a-dp-1:
    - shard-bmg:          NOTRUN -> [FAIL][22] ([Intel XE#3304])
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-7/igt@kms_content_protection@atomic-dpms-hdcp14@pipe-a-dp-1.html

  * igt@kms_content_protection@atomic-dpms@pipe-a-dp-2:
    - shard-bmg:          NOTRUN -> [FAIL][23] ([Intel XE#1178] / [Intel XE#3304] / [Intel XE#7374])
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-6/igt@kms_content_protection@atomic-dpms@pipe-a-dp-2.html

  * igt@kms_content_protection@dp-mst-type-0-hdcp14:
    - shard-bmg:          NOTRUN -> [SKIP][24] ([Intel XE#6974])
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_content_protection@dp-mst-type-0-hdcp14.html

  * igt@kms_content_protection@uevent-hdcp14@pipe-a-dp-2:
    - shard-bmg:          NOTRUN -> [FAIL][25] ([Intel XE#6707] / [Intel XE#7439])
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-6/igt@kms_content_protection@uevent-hdcp14@pipe-a-dp-2.html

  * igt@kms_cursor_crc@cursor-offscreen-128x42:
    - shard-bmg:          NOTRUN -> [SKIP][26] ([Intel XE#2320])
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_cursor_crc@cursor-offscreen-128x42.html

  * igt@kms_cursor_crc@cursor-rapid-movement-128x42:
    - shard-ptl:          NOTRUN -> [SKIP][27] ([Intel XE#5900]) +1 other test skip
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_cursor_crc@cursor-rapid-movement-128x42.html

  * igt@kms_cursor_crc@cursor-rapid-movement-256x85:
    - shard-lnl:          NOTRUN -> [SKIP][28] ([Intel XE#1424])
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_cursor_crc@cursor-rapid-movement-256x85.html

  * igt@kms_cursor_crc@cursor-rapid-movement-512x170:
    - shard-bmg:          NOTRUN -> [SKIP][29] ([Intel XE#2321] / [Intel XE#7355])
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_cursor_crc@cursor-rapid-movement-512x170.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size:
    - shard-bmg:          [PASS][30] -> [INCOMPLETE][31] ([Intel XE#6819] / [Intel XE#8151])
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-bmg-1/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-3/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html

  * igt@kms_dp_link_training@non-uhbr-mst:
    - shard-lnl:          NOTRUN -> [SKIP][32] ([Intel XE#9536])
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_dp_link_training@non-uhbr-mst.html

  * igt@kms_dp_link_training@uhbr-mst-direct-train:
    - shard-bmg:          NOTRUN -> [SKIP][33] ([Intel XE#9527])
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_dp_link_training@uhbr-mst-direct-train.html

  * igt@kms_dsc@dsc-basic-bigjoiner:
    - shard-lnl:          NOTRUN -> [SKIP][34] ([Intel XE#8265])
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_dsc@dsc-basic-bigjoiner.html

  * igt@kms_dsc@dsc-with-formats-ultrajoiner:
    - shard-bmg:          NOTRUN -> [SKIP][35] ([Intel XE#8265])
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_dsc@dsc-with-formats-ultrajoiner.html

  * igt@kms_feature_discovery@chamelium:
    - shard-ptl:          NOTRUN -> [SKIP][36] ([Intel XE#7359])
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_feature_discovery@chamelium.html

  * igt@kms_flip@2x-blocking-absolute-wf_vblank-interruptible:
    - shard-lnl:          NOTRUN -> [SKIP][37] ([Intel XE#1421])
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_flip@2x-blocking-absolute-wf_vblank-interruptible.html

  * igt@kms_flip@2x-plain-flip-fb-recreate-interruptible:
    - shard-ptl:          NOTRUN -> [SKIP][38] ([Intel XE#2316])
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html

  * igt@kms_flip@flip-vs-expired-vblank@b-edp1:
    - shard-lnl:          [PASS][39] -> [FAIL][40] ([Intel XE#301]) +1 other test fail
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html

  * igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-16bpp-xtile-downscaling:
    - shard-ptl:          NOTRUN -> [SKIP][41] ([Intel XE#7178])
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-16bpp-xtile-downscaling.html

  * igt@kms_frontbuffer_tracking@drrs-1p-offscreen-pri-indfb-draw-blt:
    - shard-ptl:          NOTRUN -> [SKIP][42] ([Intel XE#6312]) +3 other tests skip
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_frontbuffer_tracking@drrs-1p-offscreen-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-msflip-blt:
    - shard-lnl:          NOTRUN -> [SKIP][43] ([Intel XE#6312] / [Intel XE#651]) +1 other test skip
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@drrs-abgr161616f-draw-mmap-wc:
    - shard-ptl:          NOTRUN -> [SKIP][44] ([Intel XE#7061] / [Intel XE#7356]) +1 other test skip
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_frontbuffer_tracking@drrs-abgr161616f-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-shrfb-plflip-blt:
    - shard-lnl:          NOTRUN -> [SKIP][45] ([Intel XE#6312]) +2 other tests skip
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-pgflip-blt:
    - shard-bmg:          NOTRUN -> [SKIP][46] ([Intel XE#4141]) +3 other tests skip
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-indfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-blt:
    - shard-lnl:          NOTRUN -> [SKIP][47] ([Intel XE#656] / [Intel XE#7905]) +7 other tests skip
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-pri-shrfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-render:
    - shard-ptl:          NOTRUN -> [SKIP][48] ([Intel XE#5812]) +14 other tests skip
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-indfb-msflip-blt:
    - shard-ptl:          NOTRUN -> [SKIP][49] ([Intel XE#5800] / [Intel XE#6312])
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-indfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-argb161616f-draw-render:
    - shard-bmg:          NOTRUN -> [SKIP][50] ([Intel XE#7061] / [Intel XE#7356])
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_frontbuffer_tracking@fbcdrrs-argb161616f-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-primscrn-pri-indfb-draw-render:
    - shard-bmg:          NOTRUN -> [SKIP][51] ([Intel XE#2311]) +12 other tests skip
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-primscrn-pri-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbchdr-abgr161616f-draw-blt:
    - shard-ptl:          NOTRUN -> [SKIP][52] ([Intel XE#7061])
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_frontbuffer_tracking@fbchdr-abgr161616f-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbchdr-suspend:
    - shard-lnl:          NOTRUN -> [SKIP][53] ([Intel XE#7865]) +4 other tests skip
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_frontbuffer_tracking@fbchdr-suspend.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-pri-indfb-draw-blt:
    - shard-ptl:          NOTRUN -> [SKIP][54] ([Intel XE#7865]) +3 other tests skip
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-pri-indfb-draw-render:
    - shard-lnl:          NOTRUN -> [SKIP][55] ([Intel XE#7905]) +8 other tests skip
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-primscrn-pri-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@hdr-abgr161616f-draw-blt:
    - shard-lnl:          NOTRUN -> [SKIP][56] ([Intel XE#7061]) +1 other test skip
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_frontbuffer_tracking@hdr-abgr161616f-draw-blt.html

  * igt@kms_frontbuffer_tracking@hdr-abgr161616f-draw-mmap-wc:
    - shard-bmg:          NOTRUN -> [SKIP][57] ([Intel XE#7061]) +1 other test skip
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_frontbuffer_tracking@hdr-abgr161616f-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-argb161616f-draw-blt:
    - shard-lnl:          NOTRUN -> [SKIP][58] ([Intel XE#7061] / [Intel XE#7356])
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_frontbuffer_tracking@psr-argb161616f-draw-blt.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-pri-shrfb-draw-render:
    - shard-bmg:          NOTRUN -> [SKIP][59] ([Intel XE#2313]) +14 other tests skip
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-pri-shrfb-draw-render.html

  * igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner:
    - shard-bmg:          NOTRUN -> [SKIP][60] ([Intel XE#4090] / [Intel XE#7443])
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html

  * igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier@pipe-a-plane-5:
    - shard-bmg:          NOTRUN -> [SKIP][61] ([Intel XE#8303]) +1 other test skip
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_plane@pixel-format-4-tiled-bmg-ccs-modifier@pipe-a-plane-5.html

  * igt@kms_plane@pixel-format-4-tiled-dg2-mc-ccs-modifier:
    - shard-ptl:          NOTRUN -> [SKIP][62] ([Intel XE#7283])
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_plane@pixel-format-4-tiled-dg2-mc-ccs-modifier.html

  * igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier:
    - shard-lnl:          NOTRUN -> [SKIP][63] ([Intel XE#7283])
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier.html

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

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

  * igt@kms_pm_rpm@universal-planes-dpms:
    - shard-bmg:          [PASS][66] -> [INCOMPLETE][67] ([Intel XE#9241]) +1 other test incomplete
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-bmg-5/igt@kms_pm_rpm@universal-planes-dpms.html
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-3/igt@kms_pm_rpm@universal-planes-dpms.html

  * igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf:
    - shard-bmg:          NOTRUN -> [SKIP][68] ([Intel XE#1489])
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_psr2_sf@pr-overlay-plane-update-continuous-sf.html

  * igt@kms_psr2_sf@pr-plane-move-sf-dmg-area:
    - shard-ptl:          NOTRUN -> [SKIP][69] ([Intel XE#7304])
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_psr2_sf@pr-plane-move-sf-dmg-area.html

  * igt@kms_psr@fbc-psr-cursor-plane-move:
    - shard-bmg:          NOTRUN -> [SKIP][70] ([Intel XE#2234] / [Intel XE#2850]) +3 other tests skip
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_psr@fbc-psr-cursor-plane-move.html

  * igt@kms_psr@fbc-psr2-sprite-render:
    - shard-ptl:          NOTRUN -> [SKIP][71] ([Intel XE#1406] / [Intel XE#5835]) +1 other test skip
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_psr@fbc-psr2-sprite-render.html

  * igt@kms_psr@pr-sprite-plane-move:
    - shard-lnl:          NOTRUN -> [SKIP][72] ([Intel XE#1406]) +1 other test skip
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_psr@pr-sprite-plane-move.html

  * igt@kms_rotation_crc@primary-rotation-90:
    - shard-ptl:          NOTRUN -> [SKIP][73] ([Intel XE#5821]) +1 other test skip
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@kms_rotation_crc@primary-rotation-90.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270:
    - shard-bmg:          NOTRUN -> [SKIP][74] ([Intel XE#3904] / [Intel XE#7342]) +1 other test skip
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-270.html

  * igt@kms_scaling_modes@scaling-mode-full-aspect:
    - shard-bmg:          NOTRUN -> [SKIP][75] ([Intel XE#2413])
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@kms_scaling_modes@scaling-mode-full-aspect.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-lnl:          NOTRUN -> [SKIP][76] ([Intel XE#362] / [Intel XE#5848])
   [76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@kms_tiled_display@basic-test-pattern.html

  * igt@xe_compute_preempt@compute-preempt-many-vram-evict@engine-drm_xe_engine_class_compute:
    - shard-bmg:          [PASS][77] -> [ABORT][78] ([Intel XE#9481]) +1 other test abort
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-bmg-9/igt@xe_compute_preempt@compute-preempt-many-vram-evict@engine-drm_xe_engine_class_compute.html
   [78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@xe_compute_preempt@compute-preempt-many-vram-evict@engine-drm_xe_engine_class_compute.html

  * igt@xe_evict@evict-cm-threads-small-multi-vm:
    - shard-lnl:          NOTRUN -> [SKIP][79] ([Intel XE#6540] / [Intel XE#688]) +1 other test skip
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@xe_evict@evict-cm-threads-small-multi-vm.html

  * igt@xe_evict@evict-large-external-cm:
    - shard-ptl:          NOTRUN -> [SKIP][80] ([Intel XE#5764]) +2 other tests skip
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@xe_evict@evict-large-external-cm.html

  * igt@xe_evict@evict-mixed-threads-small-multi-queue:
    - shard-bmg:          NOTRUN -> [SKIP][81] ([Intel XE#8370])
   [81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@xe_evict@evict-mixed-threads-small-multi-queue.html

  * igt@xe_exec_balancer@twice-cm-virtual-userptr:
    - shard-lnl:          NOTRUN -> [SKIP][82] ([Intel XE#7482]) +4 other tests skip
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@xe_exec_balancer@twice-cm-virtual-userptr.html

  * igt@xe_exec_balancer@twice-virtual-userptr-rebind:
    - shard-ptl:          NOTRUN -> [SKIP][83] ([Intel XE#7482]) +3 other tests skip
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@xe_exec_balancer@twice-virtual-userptr-rebind.html

  * igt@xe_exec_basic@multigpu-many-execqueues-many-vm-basic:
    - shard-bmg:          NOTRUN -> [SKIP][84] ([Intel XE#2322] / [Intel XE#7372]) +1 other test skip
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-basic.html

  * igt@xe_exec_basic@multigpu-no-exec-userptr:
    - shard-lnl:          NOTRUN -> [SKIP][85] ([Intel XE#1392])
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@xe_exec_basic@multigpu-no-exec-userptr.html

  * igt@xe_exec_basic@multigpu-once-bindexecqueue:
    - shard-ptl:          NOTRUN -> [SKIP][86] ([Intel XE#5575] / [Intel XE#7484])
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@xe_exec_basic@multigpu-once-bindexecqueue.html

  * igt@xe_exec_fault_mode@many-multi-queue:
    - shard-ptl:          NOTRUN -> [SKIP][87] ([Intel XE#8374]) +2 other tests skip
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@xe_exec_fault_mode@many-multi-queue.html

  * igt@xe_exec_fault_mode@many-multi-queue-userptr-invalidate:
    - shard-bmg:          NOTRUN -> [SKIP][88] ([Intel XE#8374]) +2 other tests skip
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@xe_exec_fault_mode@many-multi-queue-userptr-invalidate.html

  * igt@xe_exec_fault_mode@once-multi-queue-invalid-fault:
    - shard-lnl:          NOTRUN -> [SKIP][89] ([Intel XE#8374]) +5 other tests skip
   [89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@xe_exec_fault_mode@once-multi-queue-invalid-fault.html

  * igt@xe_exec_mix_modes@exec-multi-queue-spinner-interrupted-lr:
    - shard-lnl:          NOTRUN -> [SKIP][90] ([Intel XE#9003])
   [90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@xe_exec_mix_modes@exec-multi-queue-spinner-interrupted-lr.html

  * igt@xe_exec_multi_queue@many-execs-preempt-mode-fault-close-fd:
    - shard-lnl:          NOTRUN -> [SKIP][91] ([Intel XE#8364]) +3 other tests skip
   [91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@xe_exec_multi_queue@many-execs-preempt-mode-fault-close-fd.html

  * igt@xe_exec_multi_queue@two-queues-basic-smem:
    - shard-bmg:          NOTRUN -> [SKIP][92] ([Intel XE#8364]) +6 other tests skip
   [92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@xe_exec_multi_queue@two-queues-basic-smem.html

  * igt@xe_exec_multi_queue@two-queues-userptr-invalidate:
    - shard-ptl:          NOTRUN -> [SKIP][93] ([Intel XE#8364]) +4 other tests skip
   [93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@xe_exec_multi_queue@two-queues-userptr-invalidate.html

  * igt@xe_exec_reset@cm-multi-queue-gt-reset:
    - shard-bmg:          NOTRUN -> [SKIP][94] ([Intel XE#8369]) +1 other test skip
   [94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@xe_exec_reset@cm-multi-queue-gt-reset.html

  * igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-comp-multi-vma:
    - shard-ptl:          NOTRUN -> [SKIP][95] ([Intel XE#6196])
   [95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@xe_exec_system_allocator@pat-index-madvise-pat-idx-uc-comp-multi-vma.html

  * igt@xe_exec_threads@threads-hang-fd-userptr-invalidate-race:
    - shard-ptl:          [PASS][96] -> [FAIL][97] ([Intel XE#9096])
   [96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-ptl-2/igt@xe_exec_threads@threads-hang-fd-userptr-invalidate-race.html
   [97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-2/igt@xe_exec_threads@threads-hang-fd-userptr-invalidate-race.html

  * igt@xe_exec_threads@threads-hang-userptr-invalidate-race:
    - shard-bmg:          [PASS][98] -> [FAIL][99] ([Intel XE#9096])
   [98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-bmg-4/igt@xe_exec_threads@threads-hang-userptr-invalidate-race.html
   [99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-2/igt@xe_exec_threads@threads-hang-userptr-invalidate-race.html

  * igt@xe_exec_threads@threads-multi-queue-fd-userptr-invalidate:
    - shard-bmg:          NOTRUN -> [SKIP][100] ([Intel XE#8378]) +1 other test skip
   [100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@xe_exec_threads@threads-multi-queue-fd-userptr-invalidate.html

  * igt@xe_exec_threads@threads-multi-queue-fd-userptr-rebind:
    - shard-ptl:          NOTRUN -> [SKIP][101] ([Intel XE#8378]) +1 other test skip
   [101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@xe_exec_threads@threads-multi-queue-fd-userptr-rebind.html

  * igt@xe_exec_threads@threads-multi-queue-mixed-shared-vm-userptr-invalidate:
    - shard-lnl:          NOTRUN -> [SKIP][102] ([Intel XE#8378])
   [102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@xe_exec_threads@threads-multi-queue-mixed-shared-vm-userptr-invalidate.html

  * igt@xe_fault_injection@exec-queue-create-fail-xe_hw_engine_group_add_exec_queue:
    - shard-bmg:          [PASS][103] -> [ABORT][104] ([Intel XE#9463])
   [103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-bmg-10/igt@xe_fault_injection@exec-queue-create-fail-xe_hw_engine_group_add_exec_queue.html
   [104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-5/igt@xe_fault_injection@exec-queue-create-fail-xe_hw_engine_group_add_exec_queue.html

  * igt@xe_madvise@atomic-global:
    - shard-ptl:          NOTRUN -> [SKIP][105] ([Intel XE#7980])
   [105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@xe_madvise@atomic-global.html

  * igt@xe_mempage_offline@inject-single-page:
    - shard-bmg:          NOTRUN -> [SKIP][106] ([Intel XE#9203])
   [106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@xe_mempage_offline@inject-single-page.html

  * igt@xe_multigpu_svm@mgpu-coherency-basic:
    - shard-ptl:          NOTRUN -> [SKIP][107] ([Intel XE#6964])
   [107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@xe_multigpu_svm@mgpu-coherency-basic.html

  * igt@xe_page_reclaim@binds-1g-partial:
    - shard-ptl:          NOTRUN -> [SKIP][108] ([Intel XE#7793])
   [108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@xe_page_reclaim@binds-1g-partial.html

  * igt@xe_pat@pat-sw-hw-compare:
    - shard-bmg:          NOTRUN -> [FAIL][109] ([Intel XE#7695])
   [109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@xe_pat@pat-sw-hw-compare.html

  * igt@xe_pm@s4-mocs:
    - shard-ptl:          [PASS][110] -> [ABORT][111] ([Intel XE#9362])
   [110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-ptl-3/igt@xe_pm@s4-mocs.html
   [111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@xe_pm@s4-mocs.html

  * igt@xe_pm@s4-vm-bind-unbind-all:
    - shard-lnl:          [PASS][112] -> [ABORT][113] ([Intel XE#9362]) +2 other tests abort
   [112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-lnl-5/igt@xe_pm@s4-vm-bind-unbind-all.html
   [113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-1/igt@xe_pm@s4-vm-bind-unbind-all.html

  * igt@xe_pxp@pxp-stale-queue-post-suspend:
    - shard-bmg:          NOTRUN -> [SKIP][114] ([Intel XE#4733] / [Intel XE#7417])
   [114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@xe_pxp@pxp-stale-queue-post-suspend.html

  * igt@xe_query@multigpu-query-pxp-status:
    - shard-bmg:          NOTRUN -> [SKIP][115] ([Intel XE#944])
   [115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@xe_query@multigpu-query-pxp-status.html

  * igt@xe_query@multigpu-query-topology:
    - shard-lnl:          NOTRUN -> [SKIP][116] ([Intel XE#944])
   [116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@xe_query@multigpu-query-topology.html

  * igt@xe_query@multigpu-query-uc-fw-version-guc:
    - shard-ptl:          NOTRUN -> [SKIP][117] ([Intel XE#6019])
   [117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@xe_query@multigpu-query-uc-fw-version-guc.html

  * igt@xe_sriov_admin@bulk-sched-priority-vfs-disabled:
    - shard-lnl:          NOTRUN -> [SKIP][118] ([Intel XE#7174])
   [118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@xe_sriov_admin@bulk-sched-priority-vfs-disabled.html

  * igt@xe_vm@out-of-memory:
    - shard-ptl:          NOTRUN -> [SKIP][119] ([Intel XE#5745] / [Intel XE#7892])
   [119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@xe_vm@out-of-memory.html

  
#### Possible fixes ####

  * igt@kms_vrr@flipline@pipe-a-edp-1:
    - shard-ptl:          [FAIL][120] ([Intel XE#4227] / [Intel XE#7397]) -> [PASS][121] +1 other test pass
   [120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-ptl-6/igt@kms_vrr@flipline@pipe-a-edp-1.html
   [121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-4/igt@kms_vrr@flipline@pipe-a-edp-1.html

  * igt@xe_exec_system_allocator@many-stride-new-prefetch:
    - shard-bmg:          [INCOMPLETE][122] ([Intel XE#7098] / [Intel XE#8159]) -> [PASS][123]
   [122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-bmg-8/igt@xe_exec_system_allocator@many-stride-new-prefetch.html
   [123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-2/igt@xe_exec_system_allocator@many-stride-new-prefetch.html

  * igt@xe_exec_threads@threads-hang-fd-userptr-invalidate-race:
    - shard-bmg:          [FAIL][124] ([Intel XE#9096]) -> [PASS][125]
   [124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-bmg-9/igt@xe_exec_threads@threads-hang-fd-userptr-invalidate-race.html
   [125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-1/igt@xe_exec_threads@threads-hang-fd-userptr-invalidate-race.html

  * igt@xe_module_load@many-reload:
    - shard-bmg:          [ABORT][126] ([Intel XE#9463]) -> [PASS][127]
   [126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-bmg-10/igt@xe_module_load@many-reload.html
   [127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-9/igt@xe_module_load@many-reload.html

  * igt@xe_pm@s4-basic:
    - shard-lnl:          [ABORT][128] ([Intel XE#9362]) -> [PASS][129]
   [128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-lnl-8/igt@xe_pm@s4-basic.html
   [129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-lnl-3/igt@xe_pm@s4-basic.html

  * igt@xe_pm@s4-vm-bind-userptr:
    - shard-ptl:          [ABORT][130] ([Intel XE#9362]) -> [PASS][131]
   [130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-ptl-7/igt@xe_pm@s4-vm-bind-userptr.html
   [131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-ptl-5/igt@xe_pm@s4-vm-bind-userptr.html

  * igt@xe_pm_residency@gt-c6-freeze@gt0:
    - shard-bmg:          [FAIL][132] ([Intel XE#9254]) -> [PASS][133] +1 other test pass
   [132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-bmg-7/igt@xe_pm_residency@gt-c6-freeze@gt0.html
   [133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-6/igt@xe_pm_residency@gt-c6-freeze@gt0.html

  
#### Warnings ####

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-bmg:          [FAIL][134] ([Intel XE#1729] / [Intel XE#7424]) -> [SKIP][135] ([Intel XE#2426] / [Intel XE#5848])
   [134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3/shard-bmg-1/igt@kms_tiled_display@basic-test-pattern.html
   [135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-176860v1/shard-bmg-8/igt@kms_tiled_display@basic-test-pattern.html

  
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
  [Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
  [Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
  [Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
  [Intel XE#1424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1424
  [Intel XE#1428]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1428
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
  [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#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
  [Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [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#2413]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2413
  [Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
  [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#3279]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3279
  [Intel XE#3304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3304
  [Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
  [Intel XE#362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/362
  [Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
  [Intel XE#4090]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4090
  [Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
  [Intel XE#4227]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4227
  [Intel XE#4733]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4733
  [Intel XE#5575]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5575
  [Intel XE#5745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5745
  [Intel XE#5764]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5764
  [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#5821]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5821
  [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#5835]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5835
  [Intel XE#5844]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5844
  [Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
  [Intel XE#5900]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5900
  [Intel XE#6019]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6019
  [Intel XE#6196]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6196
  [Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
  [Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
  [Intel XE#6540]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6540
  [Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
  [Intel XE#6707]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6707
  [Intel XE#6819]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6819
  [Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
  [Intel XE#6886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6886
  [Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
  [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#7098]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7098
  [Intel XE#7174]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7174
  [Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
  [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#7342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7342
  [Intel XE#7355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7355
  [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#7359]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7359
  [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#7387]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7387
  [Intel XE#7397]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7397
  [Intel XE#7417]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7417
  [Intel XE#7424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7424
  [Intel XE#7439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7439
  [Intel XE#7443]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7443
  [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#7679]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7679
  [Intel XE#7695]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7695
  [Intel XE#7793]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7793
  [Intel XE#7865]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7865
  [Intel XE#7892]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7892
  [Intel XE#7905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7905
  [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#8151]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8151
  [Intel XE#8159]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8159
  [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#8370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8370
  [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#8391]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8391
  [Intel XE#9003]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9003
  [Intel XE#9096]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9096
  [Intel XE#9203]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9203
  [Intel XE#9241]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9241
  [Intel XE#9254]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9254
  [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#9481]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9481
  [Intel XE#9527]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9527
  [Intel XE#9536]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9536


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

  * Linux: xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3 -> xe-pw-176860v1

  IGT_9164: 9164
  xe-6011-8e30a30c4948a9b30b9af31ebfaaa951630ae8a3: 8e30a30c4948a9b30b9af31ebfaaa951630ae8a3
  xe-pw-176860v1: 176860v1

== Logs ==

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

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

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

* Re: [PATCH] drm/xe/svm: Take write access only for GC attribute resets
  2026-10-26 12:20 [PATCH] drm/xe/svm: Take write access only for GC attribute resets Arvind Yadav
                   ` (3 preceding siblings ...)
  2026-10-26 18:50 ` ✓ Xe.CI.FULL: " Patchwork
@ 2026-10-27 20:44 ` Matthew Brost
  2026-10-29  3:50   ` Yadav, Arvind
  4 siblings, 1 reply; 7+ messages in thread
From: Matthew Brost @ 2026-10-27 20:44 UTC (permalink / raw)
  To: Arvind Yadav; +Cc: intel-xe, dri-devel, himal.prasad.ghimiray, thomas.hellstrom

On Mon, Oct 26, 2026 at 05:50:45PM +0530, Arvind Yadav wrote:
> Fault service holds vm->lock for read while using a VMA. SVM garbage
> collection also runs under the read lock and can reset AUTORESET
> attributes. The reset can split or merge VMAs and immediately free a
> VMA that another fault worker is still using. The GC mutex serializes

I'll have to think about this one for a bit but quick thought:

Can we use some ref counting (e.g., add a VMA ref count) rather than
changing the locking?

Matt

> collectors but does not protect VMA readers.
> 
> Keep backing collection under read access when no attribute change is
> needed. Defer ranges requiring a reset and return -EAGAIN so the caller
> can release its read-side state and collect with write access.
> 
> In fault service, discard the old VMA pointer before releasing the read
> lock. After acquiring write access, recheck VM state and collect the
> queued ranges. Downgrade to read and repeat VMA lookup, permission checks
> and advice-dependent setup.
> 
> Drain GC under the existing write lock before madvise, bind and attribute
> query. Require write access for VMA changes while retaining parallel
> fault service when no reset is needed.
> 
> [ 2163.042338] ==================================================================
> [ 2163.042353] BUG: KASAN: slab-use-after-free in __xe_svm_handle_pagefault+0x297/0x1460 [xe]
> [ 2163.042815] Read of size 8 at addr ffff88813f879b70 by task kworker/u65:3/3115
> 
> [ 2163.042834] CPU: 0 UID: 0 PID: 3115 Comm: kworker/u65:3 Kdump: loaded Tainted: G S      W  O        7.3.0-lgci-xe-svm-22oct #16 PREEMPT(full)
> [ 2163.042841] Tainted: [S]=CPU_OUT_OF_SPEC, [W]=WARN, [O]=OOT_MODULE
> [ 2163.042842] Hardware name: ASUS System Product Name/PRIME Z790-P WIFI, BIOS 1002 03/31/2023
> [ 2163.042845] Workqueue: xe_page_fault_work_queue xe_pagefault_queue_work [xe]
> [ 2163.043326] Call Trace:
> [ 2163.043327]  <TASK>
> [ 2163.043330]  dump_stack_lvl+0x91/0xf0
> [ 2163.043336]  print_report+0xd1/0x610
> [ 2163.043340]  ? __xe_svm_handle_pagefault+0x297/0x1460 [xe]
> [ 2163.043825]  ? __virt_addr_valid+0x1b2/0x350
> [ 2163.043831]  ? kasan_complete_mode_report_info+0x6a/0x210
> [ 2163.043836]  ? __xe_svm_handle_pagefault+0x297/0x1460 [xe]
> [ 2163.044340]  kasan_report+0xa3/0xe0
> [ 2163.044344]  ? __xe_svm_handle_pagefault+0x297/0x1460 [xe]
> [ 2163.044881]  __asan_load8+0x8b/0xe0
> [ 2163.044885]  __xe_svm_handle_pagefault+0x297/0x1460 [xe]
> [ 2163.045456]  ? lock_acquire+0x1b0/0x320
> [ 2163.045461]  ? xe_vm_find_overlapping_vma+0x88/0x310 [xe]
> [ 2163.046072]  ? __pfx___xe_svm_handle_pagefault+0x10/0x10 [xe]
> [ 2163.046679]  ? rcu_is_watching+0x21/0x60
> [ 2163.046684]  ? __mutex_lock+0x1172/0x18b0
> [ 2163.046690]  ? find_held_lock+0x31/0x90
> [ 2163.046696]  ? xe_vm_find_overlapping_vma+0xa1/0x310 [xe]
> [ 2163.047273]  ? __kasan_check_write+0x14/0x30
> [ 2163.047278]  ? __mutex_unlock_slowpath+0x10f/0x660
> [ 2163.047285]  ? __pfx___mutex_unlock_slowpath+0x10/0x10
> [ 2163.047295]  ? mutex_unlock+0x12/0x20
> [ 2163.047299]  ? xe_vm_find_overlapping_vma+0xa1/0x310 [xe]
> [ 2163.047844]  xe_svm_handle_pagefault+0x5c/0x140 [xe]
> [ 2163.048355]  xe_pagefault_queue_work+0x19ad/0x2450 [xe]
> [ 2163.048843]  process_one_work+0x5ae/0xdd0
> [ 2163.048847]  ? __lock_acquire+0x58a/0x2820
> [ 2163.048850]  ? __schedule+0x22a6/0x3670
> [ 2163.048858]  ? __pfx_process_one_work+0x10/0x10
> [ 2163.048866]  ? __pfx_xe_pagefault_queue_work+0x10/0x10 [xe]
> [ 2163.049345]  ? assign_work+0xe4/0x1d0
> [ 2163.049350]  worker_thread+0x3b4/0x6a0
> [ 2163.049357]  ? __pfx_worker_thread+0x10/0x10
> [ 2163.049361]  kthread+0x204/0x250
> [ 2163.049364]  ? kthread+0xf1/0x250
> [ 2163.049369]  ? __pfx_kthread+0x10/0x10
> [ 2163.049372]  ret_from_fork+0x465/0x6a0
> [ 2163.049377]  ? __pfx_ret_from_fork+0x10/0x10
> [ 2163.049381]  ? __switch_to+0x26f/0x740
> [ 2163.049386]  ? __pfx_kthread+0x10/0x10
> [ 2163.049390]  ret_from_fork_asm+0x1a/0x30
> [ 2163.049399]  </TASK>
> 
> [ 2163.049654] Allocated by task 522570:
> [ 2163.049662]  kasan_save_stack+0x26/0x60
> [ 2163.049668]  kasan_save_track+0x14/0x40
> [ 2163.049672]  kasan_save_alloc_info+0x37/0x60
> [ 2163.049677]  __kasan_kmalloc+0xc3/0xd0
> [ 2163.049681]  __kmalloc_cache_noprof+0x2b4/0x6c0
> [ 2163.049686]  xe_vma_create+0xe3/0xe60 [xe]
> [ 2163.050170]  new_vma+0x416/0x540 [xe]
> [ 2163.050654]  vm_bind_ioctl_ops_parse+0xc3e/0x1110 [xe]
> [ 2163.051139]  xe_vm_alloc_vma+0x243/0xd60 [xe]
> [ 2163.051623]  xe_vm_alloc_madvise_vma+0x92/0xd0 [xe]
> [ 2163.052107]  xe_vm_madvise_ioctl+0x783/0x14f0 [xe]
> [ 2163.052591]  drm_ioctl_kernel+0x143/0x200
> [ 2163.052597]  drm_ioctl+0x419/0x790
> [ 2163.052600]  xe_drm_ioctl+0x9e/0xf0 [xe]
> [ 2163.053074]  __x64_sys_ioctl+0xd5/0x130
> [ 2163.053079]  x64_sys_call+0x2b5/0x27e0
> [ 2163.053084]  do_syscall_64+0xef/0x6c0
> [ 2163.053088]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
> 
> [ 2163.053098] Freed by task 17929:
> [ 2163.053105]  kasan_save_stack+0x26/0x60
> [ 2163.053110]  kasan_save_track+0x14/0x40
> [ 2163.053114]  kasan_save_free_info+0x3b/0x60
> [ 2163.053118]  __kasan_slab_free+0x6f/0xa0
> [ 2163.053123]  kfree+0x2bb/0x600
> [ 2163.053127]  xe_vma_free+0x5a/0x70 [xe]
> [ 2163.053610]  xe_vma_destroy_late+0xae/0xf0 [xe]
> [ 2163.054093]  xe_vma_destroy+0xda/0xf20 [xe]
> [ 2163.054576]  xe_vm_alloc_vma+0x304/0xd60 [xe]
> [ 2163.055059]  xe_vm_alloc_cpu_addr_mirror_vma+0x8f/0xd0 [xe]
> [ 2163.055543]  xe_svm_garbage_collector+0x388/0x5d0 [xe]
> [ 2163.056028]  xe_svm_garbage_collector_work_func+0x2a/0x40 [xe]
> [ 2163.056512]  process_one_work+0x5ae/0xdd0
> [ 2163.056517]  worker_thread+0x3b4/0x6a0
> [ 2163.056521]  kthread+0x204/0x250
> [ 2163.056525]  ret_from_fork+0x465/0x6a0
> [ 2163.056530]  ret_from_fork_asm+0x1a/0x30
> 
> Fixes: 941bcc1a4bbf ("drm/xe: Fine grained page fault locking")
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> Assisted-by: LLM
> Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
> ---
>  drivers/gpu/drm/xe/xe_pagefault.c  |  37 +++++-
>  drivers/gpu/drm/xe/xe_svm.c        | 179 ++++++++++++++++++++++-------
>  drivers/gpu/drm/xe/xe_svm.h        |   8 ++
>  drivers/gpu/drm/xe/xe_vm.c         |  54 +++++----
>  drivers/gpu/drm/xe/xe_vm_madvise.c |   5 +
>  5 files changed, 212 insertions(+), 71 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_pagefault.c b/drivers/gpu/drm/xe/xe_pagefault.c
> index 5247321c805e..9e1377df9d01 100644
> --- a/drivers/gpu/drm/xe/xe_pagefault.c
> +++ b/drivers/gpu/drm/xe/xe_pagefault.c
> @@ -270,8 +270,9 @@ static int xe_pagefault_service(struct xe_pagefault *pf)
>  	struct xe_device *xe = gt_to_xe(gt);
>  	struct xe_vm *vm;
>  	struct xe_vma *vma = NULL;
> +	enum xe_pagefault_error error;
>  	int err;
> -	bool atomic;
> +	bool atomic, svm_relookup = false;
>  	u32 asid = FIELD_GET(XE_PAGEFAULT_ASID_MASK, pf->consumer.id);
>  
>  	/* Producer flagged this fault to be nacked */
> @@ -297,10 +298,13 @@ static int xe_pagefault_service(struct xe_pagefault *pf)
>  		goto unlock_vm;
>  	}
>  
> +lookup_vma:
>  	vma = xe_vm_find_vma_by_addr(vm, xe_pagefault_addr(pf));
>  	if (!vma) {
>  		err = -EINVAL;
> -		xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_VMA_NOT_FOUND);
> +		xe_pagefault_set_error(pf, svm_relookup ?
> +				       XE_PAGEFAULT_ERROR_SVM_VMA_NOT_FOUND :
> +				       XE_PAGEFAULT_ERROR_VMA_NOT_FOUND);
>  		goto unlock_vm;
>  	}
>  
> @@ -313,11 +317,36 @@ static int xe_pagefault_service(struct xe_pagefault *pf)
>  
>  	atomic = xe_pagefault_access_is_atomic(pf->consumer.access_type);
>  
> -	if (xe_vma_is_cpu_addr_mirror(vma))
> +	if (xe_vma_is_cpu_addr_mirror(vma)) {
>  		err = xe_svm_handle_pagefault(vm, vma, pf, gt,
>  					      xe_pagefault_addr(pf), atomic);
> -	else
> +		if (err == -EAGAIN) {
> +			/* GC needs to change VMAs. Drop all read-side state. */
> +			vma = NULL;
> +			up_read(&vm->lock);
> +			down_write(&vm->lock);
> +
> +			if (xe_vm_is_closed(vm)) {
> +				err = -ENOENT;
> +				error = XE_PAGEFAULT_ERROR_VM_CLOSED;
> +			} else {
> +				err = xe_svm_garbage_collect(vm);
> +				error = XE_PAGEFAULT_ERROR_SVM_GARBAGE_COLLECTOR;
> +			}
> +
> +			downgrade_write(&vm->lock);
> +			if (err) {
> +				xe_pagefault_set_error(pf, error);
> +				goto unlock_vm;
> +			}
> +
> +			xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_NONE);
> +			svm_relookup = true;
> +			goto lookup_vma;
> +		}
> +	} else {
>  		err = xe_pagefault_handle_vma(gt, vma, pf, atomic);
> +	}
>  
>  unlock_vm:
>  	if (err)
> diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
> index bc6902b5bf57..d19cb0c4b154 100644
> --- a/drivers/gpu/drm/xe/xe_svm.c
> +++ b/drivers/gpu/drm/xe/xe_svm.c
> @@ -356,12 +356,36 @@ static void xe_vma_set_default_attributes(struct xe_vma *vma)
>  	xe_vma_mem_attr_copy(&vma->attr, &default_attr);
>  }
>  
> +/* vm->lock keeps the VMA and its attributes stable during this check. */
> +static bool xe_svm_range_needs_attr_reset(struct xe_vm *vm, u64 start)
> +{
> +	struct xe_vma *vma;
> +	u64 end;
> +
> +	lockdep_assert_held(&vm->lock);
> +
> +	vma = xe_vm_find_vma_by_addr(vm, start);
> +	if (!vma || !(vma->gpuva.flags & XE_VMA_MADV_AUTORESET))
> +		return false;
> +
> +	if (!xe_vma_has_default_mem_attrs(vma))
> +		return true;
> +
> +	start = xe_vma_start(vma);
> +	end = xe_vma_end(vma);
> +	xe_vm_find_cpu_addr_mirror_vma_range(vm, &start, &end);
> +
> +	return start != xe_vma_start(vma) || end != xe_vma_end(vma);
> +}
> +
>  static int xe_svm_range_set_default_attr(struct xe_vm *vm, u64 start, u64 end)
>  {
>  	struct xe_vma *vma;
>  	bool has_default_attr;
>  	int err;
>  
> +	lockdep_assert_held_write(&vm->lock);
> +
>  	vma = xe_vm_find_vma_by_addr(vm, start);
>  	if (!vma)
>  		return -EINVAL;
> @@ -397,70 +421,134 @@ static int xe_svm_range_set_default_attr(struct xe_vm *vm, u64 start, u64 end)
>  		return err;
>  	}
>  
> -	/*
> -	 * On call from xe_svm_handle_pagefault original VMA might be changed
> -	 * signal this to lookup for VMA again.
> -	 */
> -	return -EAGAIN;
> +	return 0;
>  }
>  
> -static int xe_svm_garbage_collector(struct xe_vm *vm)
> +/*
> + * With reset_attrs false, defer ranges requiring a VMA change and return
> + * -EAGAIN after collecting the remaining ready ranges in the batch. The
> + * caller must release all read-side state before collecting them with
> + * vm->lock held for write.
> + */
> +static int xe_svm_garbage_collector(struct xe_vm *vm, bool reset_attrs)
>  {
>  	struct xe_svm_range *range;
> -	u64 range_start;
> -	u64 range_end;
> -	int err, ret = 0;
> +	LIST_HEAD(pending);
> +	LIST_HEAD(deferred);
> +	u64 range_start, range_end;
> +	bool needs_reset;
> +	int err = 0, ret = 0;
>  
>  	lockdep_assert_held(&vm->lock);
> +	if (reset_attrs)
> +		lockdep_assert_held_write(&vm->lock);
>  
>  	if (xe_vm_is_closed_or_banned(vm))
>  		return -ENOENT;
>  
>  	guard(mutex)(&vm->svm.garbage_collector.lock);
>  
> +	/* Process a finite batch, excluding events queued during this pass. */
> +	spin_lock(&vm->svm.garbage_collector.list_lock);
> +	if (list_empty(&vm->svm.garbage_collector.range_list)) {
> +		spin_unlock(&vm->svm.garbage_collector.list_lock);
> +		return 0;
> +	}
> +	list_splice_init(&vm->svm.garbage_collector.range_list, &pending);
> +	spin_unlock(&vm->svm.garbage_collector.list_lock);
> +
>  	for (;;) {
>  		spin_lock(&vm->svm.garbage_collector.list_lock);
> -		range = list_first_entry_or_null(&vm->svm.garbage_collector.range_list,
> -						 typeof(*range),
> +		range = list_first_entry_or_null(&pending, typeof(*range),
>  						 garbage_collector_link);
> -		if (!range)
> +		if (!range) {
> +			spin_unlock(&vm->svm.garbage_collector.list_lock);
>  			break;
> +		}
>  
>  		range_start = xe_svm_range_start(range);
>  		range_end = xe_svm_range_end(range);
> -
>  		list_del(&range->garbage_collector_link);
>  		spin_unlock(&vm->svm.garbage_collector.list_lock);
>  
> +		/*
> +		 * Keep the backing range alive until its attributes can be
> +		 * reset. The GC mutex excludes other collectors and explicit
> +		 * range removal requires vm->lock for write.
> +		 */
> +		needs_reset = xe_svm_range_needs_attr_reset(vm, range_start);
> +		if (needs_reset && !reset_attrs) {
> +			spin_lock(&vm->svm.garbage_collector.list_lock);
> +			list_add_tail(&range->garbage_collector_link, &deferred);
> +			spin_unlock(&vm->svm.garbage_collector.list_lock);
> +			ret = -EAGAIN;
> +			continue;
> +		}
> +
>  		err = __xe_svm_garbage_collector(vm, range);
>  		if (err) {
>  			drm_warn(&vm->xe->drm,
>  				 "Garbage collection failed: %pe\n",
>  				 ERR_PTR(err));
> +			/* Leave the failed range in the tree for VM teardown. */
>  			xe_vm_kill(vm, true);
> -			return err;
> +			goto out;
>  		}
>  
> -		err = xe_svm_range_set_default_attr(vm, range_start, range_end);
> -		if (err) {
> -			if (err == -EAGAIN)
> -				ret = -EAGAIN;
> -			else
> -				return err;
> +		if (needs_reset) {
> +			err = xe_svm_range_set_default_attr(vm, range_start, range_end);
> +			if (err)
> +				goto out;
>  		}
>  	}
> +
> +out:
> +	/* Restore ranges not yet processed, including deferred resets. */
> +	spin_lock(&vm->svm.garbage_collector.list_lock);
> +	list_splice_tail_init(&pending, &vm->svm.garbage_collector.range_list);
> +	list_splice_tail_init(&deferred, &vm->svm.garbage_collector.range_list);
>  	spin_unlock(&vm->svm.garbage_collector.list_lock);
>  
> -	return ret;
> +	return err ?: ret;
> +}
> +
> +/**
> + * xe_svm_garbage_collect() - Collect SVM ranges and reset their attributes
> + * @vm: The VM, with vm->lock held for write.
> + *
> + * Process one batch of queued ranges, including attribute resets. Ranges
> + * queued during this pass are left for a later collection.
> + *
> + * Call before changing advice or bindings, or querying attributes, so the
> + * batch is reset before applying new advice or reporting attributes.
> + * No VMA pointer may be retained across this call.
> + *
> + * Return: 0 on success, negative error code on error.
> + */
> +int xe_svm_garbage_collect(struct xe_vm *vm)
> +{
> +	lockdep_assert_held_write(&vm->lock);
> +
> +	if (!xe_vm_in_fault_mode(vm))
> +		return 0;
> +
> +	return xe_svm_garbage_collector(vm, true);
>  }
>  
>  static void xe_svm_garbage_collector_work_func(struct work_struct *w)
>  {
>  	struct xe_vm *vm = container_of(w, struct xe_vm,
>  					svm.garbage_collector.work);
> +	int err = 0;
>  
> -	guard(rwsem_read)(&vm->lock);
> -	xe_svm_garbage_collector(vm);
> +	scoped_guard(rwsem_read, &vm->lock)
> +		err = xe_svm_garbage_collector(vm, false);
> +
> +	if (err != -EAGAIN)
> +		return;
> +
> +	guard(rwsem_write)(&vm->lock);
> +	xe_svm_garbage_collect(vm);
>  }
>  
>  #if IS_ENABLED(CONFIG_DRM_XE_PAGEMAP)
> @@ -1302,13 +1390,15 @@ static int __xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
>  	if (range) {
>  		mutex_unlock(&range->lock);
>  		drm_gpusvm_range_put(&range->base);
> -	}
>  
> -	/* Always process UNMAPs first so view SVM ranges is current */
> -	err = xe_svm_garbage_collector(vm);
> -	if (err) {
> -		xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_SVM_GARBAGE_COLLECTOR);
> -		return err;
> +		/* The caller collected before the initial service attempt. */
> +		err = xe_svm_garbage_collector(vm, false);
> +		if (err) {
> +			if (err != -EAGAIN)
> +				xe_pagefault_set_error(pf,
> +						      XE_PAGEFAULT_ERROR_SVM_GARBAGE_COLLECTOR);
> +			return err;
> +		}
>  	}
>  
>  	dpagemap = ctx.devmem_only ? xe_tile_local_pagemap(tile) :
> @@ -1468,14 +1558,28 @@ static int __xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
>   * Create GPU bindings for a SVM page fault. Optionally migrate to device
>   * memory.
>   *
> - * Return: 0 on success, negative error code on error.
> + * The caller must hold vm->lock for read. On -EAGAIN, discard @vma before
> + * releasing that lock. Collect with write access, then repeat VMA lookup
> + * and permission checks before retrying.
> + *
> + * Return: 0 on success, -EAGAIN if the caller must collect with write
> + * access and repeat VMA lookup, or another negative error code on error.
>   */
>  int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
>  			    struct xe_pagefault *pf, struct xe_gt *gt,
>  			    u64 fault_addr, bool atomic)
>  {
>  	int need_vram, ret;
> -retry:
> +
> +	/* Consume older UNMAPs before reading advice or building the context. */
> +	ret = xe_svm_garbage_collector(vm, false);
> +	if (ret) {
> +		if (ret != -EAGAIN)
> +			xe_pagefault_set_error(pf,
> +					       XE_PAGEFAULT_ERROR_SVM_GARBAGE_COLLECTOR);
> +		return ret;
> +	}
> +
>  	need_vram = xe_vma_need_vram_for_atomic(vm->xe, vma, atomic);
>  	if (need_vram < 0) {
>  		xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_SVM_NEEDS_VRAM_CHECK);
> @@ -1485,18 +1589,9 @@ int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
>  	ret =  __xe_svm_handle_pagefault(vm, vma, pf, gt, fault_addr,
>  					 need_vram ? true : false);
>  	if (ret == -EAGAIN) {
> -		/*
> -		 * Retry once on -EAGAIN to re-lookup the VMA, as the original VMA
> -		 * may have been split by xe_svm_range_set_default_attr.
> -		 */
> -		vma = xe_vm_find_vma_by_addr(vm, fault_addr);
> -		if (!vma) {
> -			xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_SVM_VMA_NOT_FOUND);
> -			return -EINVAL;
> -		}
> -
> +		/* Retry from the caller after collecting with write access. */
>  		xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_NONE);
> -		goto retry;
> +		return ret;
>  	}
>  	if (ret && xe_pagefault_get_error(pf) == XE_PAGEFAULT_ERROR_NONE)
>  		xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_SVM_SERVICE_FAILED);
> diff --git a/drivers/gpu/drm/xe/xe_svm.h b/drivers/gpu/drm/xe/xe_svm.h
> index ffc1cc808102..523213a8cd26 100644
> --- a/drivers/gpu/drm/xe/xe_svm.h
> +++ b/drivers/gpu/drm/xe/xe_svm.h
> @@ -109,6 +109,8 @@ void xe_svm_fini(struct xe_vm *vm);
>  
>  void xe_svm_close(struct xe_vm *vm);
>  
> +int xe_svm_garbage_collect(struct xe_vm *vm);
> +
>  int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
>  			    struct xe_pagefault *pf, struct xe_gt *gt,
>  			    u64 fault_addr, bool atomic);
> @@ -316,6 +318,12 @@ void xe_svm_close(struct xe_vm *vm)
>  {
>  }
>  
> +static inline
> +int xe_svm_garbage_collect(struct xe_vm *vm)
> +{
> +	return 0;
> +}
> +
>  static inline
>  int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
>  			    struct xe_pagefault *pf, struct xe_gt *gt,
> diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
> index d12365b11186..6afe6f1be1d4 100644
> --- a/drivers/gpu/drm/xe/xe_vm.c
> +++ b/drivers/gpu/drm/xe/xe_vm.c
> @@ -1308,19 +1308,12 @@ static void vma_destroy_cb(struct dma_fence *fence,
>  	xe_destroy_wq_queue(&vma->destroy_work);
>  }
>  
> -static void xe_vm_assert_write_mode_or_garbage_collector(struct xe_vm *vm)
> -{
> -	lockdep_assert(lockdep_is_held_type(&vm->lock, 0) ||
> -		       (lockdep_is_held_type(&vm->lock, 1) &&
> -			lockdep_is_held_type(&vm->svm.garbage_collector.lock, 0)));
> -}
> -
>  static void xe_vma_destroy(struct xe_vma *vma, struct dma_fence *fence)
>  {
>  	struct xe_vm *vm = xe_vma_vm(vma);
>  	struct xe_bo *bo = xe_vma_bo(vma);
>  
> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
> +	lockdep_assert_held_write(&vm->lock);
>  	xe_assert(vm->xe, list_empty(&vma->combined_links.destroy));
>  
>  	if (xe_vma_is_userptr(vma)) {
> @@ -1416,7 +1409,7 @@ static int xe_vm_insert_vma(struct xe_vm *vm, struct xe_vma *vma)
>  	int err;
>  
>  	xe_assert(vm->xe, xe_vma_vm(vma) == vm);
> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
> +	lockdep_assert_held_write(&vm->lock);
>  
>  	mutex_lock(&vm->snap_mutex);
>  	err = drm_gpuva_insert(&vm->gpuvm, &vma->gpuva);
> @@ -1429,7 +1422,7 @@ static int xe_vm_insert_vma(struct xe_vm *vm, struct xe_vma *vma)
>  static void xe_vm_remove_vma(struct xe_vm *vm, struct xe_vma *vma)
>  {
>  	xe_assert(vm->xe, xe_vma_vm(vma) == vm);
> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
> +	lockdep_assert_held_write(&vm->lock);
>  
>  	mutex_lock(&vm->snap_mutex);
>  	drm_gpuva_remove(&vma->gpuva);
> @@ -2267,7 +2260,7 @@ static int xe_vm_query_vmas(struct xe_vm *vm, u64 start, u64 end)
>  	struct drm_gpuva *gpuva;
>  	u32 num_vmas = 0;
>  
> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
> +	lockdep_assert_held(&vm->lock);
>  	drm_gpuvm_for_each_va_range(gpuva, &vm->gpuvm, start, end)
>  		num_vmas++;
>  
> @@ -2280,7 +2273,7 @@ static int get_mem_attrs(struct xe_vm *vm, u32 *num_vmas, u64 start,
>  	struct drm_gpuva *gpuva;
>  	int i = 0;
>  
> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
> +	lockdep_assert_held(&vm->lock);
>  
>  	drm_gpuvm_for_each_va_range(gpuva, &vm->gpuvm, start, end) {
>  		struct xe_vma *vma = gpuva_to_vma(gpuva);
> @@ -2330,6 +2323,12 @@ int xe_vm_query_vmas_attrs_ioctl(struct drm_device *dev, void *data, struct drm_
>  	if (err)
>  		goto put_vm;
>  
> +	if (!xe_vm_is_closed_or_banned(vm)) {
> +		err = xe_svm_garbage_collect(vm);
> +		if (err)
> +			goto unlock_vm;
> +	}
> +
>  	attrs_user = u64_to_user_ptr(args->vector_of_mem_attr);
>  
>  	if (args->num_mem_ranges == 0 && !attrs_user) {
> @@ -2487,7 +2486,7 @@ vm_bind_ioctl_ops_create(struct xe_vm *vm, struct xe_vma_ops *vops,
>  	u64 range_end = addr + range;
>  	int err;
>  
> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
> +	lockdep_assert_held_write(&vm->lock);
>  
>  	vm_dbg(&vm->xe->drm,
>  	       "op=%d, addr=0x%016llx, range=0x%016llx, bo_offset_or_userptr=0x%016llx",
> @@ -2694,7 +2693,7 @@ static struct xe_vma *new_vma(struct xe_vm *vm, struct drm_gpuva_op_map *op,
>  	struct xe_vma *vma;
>  	int err = 0;
>  
> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
> +	lockdep_assert_held_write(&vm->lock);
>  
>  	if (bo) {
>  		err = 0;
> @@ -2795,7 +2794,7 @@ static int xe_vma_op_commit(struct xe_vm *vm, struct xe_vma_op *op)
>  
>  	switch (op->base.op) {
>  	case DRM_GPUVA_OP_MAP:
> -		xe_vm_assert_write_mode_or_garbage_collector(vm);
> +		lockdep_assert_held_write(&vm->lock);
>  
>  		err |= xe_vm_insert_vma(vm, op->map.vma);
>  		if (!err)
> @@ -2806,7 +2805,7 @@ static int xe_vma_op_commit(struct xe_vm *vm, struct xe_vma_op *op)
>  		u8 tile_present =
>  			gpuva_to_vma(op->base.remap.unmap->va)->tile_present;
>  
> -		xe_vm_assert_write_mode_or_garbage_collector(vm);
> +		lockdep_assert_held_write(&vm->lock);
>  
>  		prep_vma_destroy(vm, gpuva_to_vma(op->base.remap.unmap->va),
>  				 true);
> @@ -2842,7 +2841,7 @@ static int xe_vma_op_commit(struct xe_vm *vm, struct xe_vma_op *op)
>  		break;
>  	}
>  	case DRM_GPUVA_OP_UNMAP:
> -		xe_vm_assert_write_mode_or_garbage_collector(vm);
> +		lockdep_assert_held_write(&vm->lock);
>  
>  		prep_vma_destroy(vm, gpuva_to_vma(op->base.unmap.va), true);
>  		op->flags |= XE_VMA_OP_COMMITTED;
> @@ -2889,7 +2888,7 @@ static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct drm_gpuva_ops *ops,
>  	u8 id, tile_mask = 0;
>  	int err = 0;
>  
> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
> +	lockdep_assert_held_write(&vm->lock);
>  
>  	for_each_tile(tile, vm->xe, id)
>  		tile_mask |= 0x1 << id;
> @@ -3072,7 +3071,7 @@ static void xe_vma_op_unwind(struct xe_vm *vm, struct xe_vma_op *op,
>  
>  	switch (op->base.op) {
>  	case DRM_GPUVA_OP_MAP:
> -		xe_vm_assert_write_mode_or_garbage_collector(vm);
> +		lockdep_assert_held_write(&vm->lock);
>  
>  		if (op->map.vma) {
>  			prep_vma_destroy(vm, op->map.vma, post_commit);
> @@ -3083,7 +3082,7 @@ static void xe_vma_op_unwind(struct xe_vm *vm, struct xe_vma_op *op,
>  	{
>  		struct xe_vma *vma = gpuva_to_vma(op->base.unmap.va);
>  
> -		xe_vm_assert_write_mode_or_garbage_collector(vm);
> +		lockdep_assert_held_write(&vm->lock);
>  
>  		if (vma) {
>  			xe_svm_notifier_lock(vm);
> @@ -3098,7 +3097,7 @@ static void xe_vma_op_unwind(struct xe_vm *vm, struct xe_vma_op *op,
>  	{
>  		struct xe_vma *vma = gpuva_to_vma(op->base.remap.unmap->va);
>  
> -		xe_vm_assert_write_mode_or_garbage_collector(vm);
> +		lockdep_assert_held_write(&vm->lock);
>  
>  		if (op->remap.prev) {
>  			prep_vma_destroy(vm, op->remap.prev, prev_post_commit);
> @@ -4092,6 +4091,11 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
>  		goto release_vm_lock;
>  	}
>  
> +	/* Consume queued resets before replacing VMAs. */
> +	err = xe_svm_garbage_collect(vm);
> +	if (err)
> +		goto release_vm_lock;
> +
>  	for (i = 0; i < args->num_binds; ++i) {
>  		u64 range = bind_ops[i].range;
>  		u64 addr = bind_ops[i].addr;
> @@ -4907,7 +4911,7 @@ static int xe_vm_alloc_vma(struct xe_vm *vm,
>  	u16 default_pat;
>  	int err;
>  
> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
> +	lockdep_assert_held_write(&vm->lock);
>  
>  	if (is_madvise)
>  		ops = drm_gpuvm_madvise_ops_create(&vm->gpuvm, map_req);
> @@ -5041,7 +5045,7 @@ int xe_vm_alloc_madvise_vma(struct xe_vm *vm, uint64_t start, uint64_t range)
>  		.map.va.range = range,
>  	};
>  
> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
> +	lockdep_assert_held_write(&vm->lock);
>  
>  	vm_dbg(&vm->xe->drm, "MADVISE_OPS_CREATE: addr=0x%016llx, size=0x%016llx", start, range);
>  
> @@ -5073,7 +5077,7 @@ void xe_vm_find_cpu_addr_mirror_vma_range(struct xe_vm *vm, u64 *start, u64 *end
>  {
>  	struct xe_vma *prev, *next;
>  
> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
> +	lockdep_assert_held(&vm->lock);
>  
>  	if (*start >= SZ_4K) {
>  		prev = xe_vm_find_vma_by_addr(vm, *start - SZ_4K);
> @@ -5105,7 +5109,7 @@ int xe_vm_alloc_cpu_addr_mirror_vma(struct xe_vm *vm, uint64_t start, uint64_t r
>  		.map.va.range = range,
>  	};
>  
> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
> +	lockdep_assert_held_write(&vm->lock);
>  
>  	vm_dbg(&vm->xe->drm, "CPU_ADDR_MIRROR_VMA_OPS_CREATE: addr=0x%016llx, size=0x%016llx",
>  	       start, range);
> diff --git a/drivers/gpu/drm/xe/xe_vm_madvise.c b/drivers/gpu/drm/xe/xe_vm_madvise.c
> index 5c7aefc641ee..1af5e79bbfd3 100644
> --- a/drivers/gpu/drm/xe/xe_vm_madvise.c
> +++ b/drivers/gpu/drm/xe/xe_vm_madvise.c
> @@ -638,6 +638,11 @@ int xe_vm_madvise_ioctl(struct drm_device *dev, void *data, struct drm_file *fil
>  		goto unlock_vm;
>  	}
>  
> +	/* Consume queued resets before publishing new advice. */
> +	err = xe_svm_garbage_collect(vm);
> +	if (err)
> +		goto unlock_vm;
> +
>  	err = xe_madvise_details_init(vm, args, &details);
>  	if (err)
>  		goto unlock_vm;
> -- 
> 2.43.0
> 

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

* Re: [PATCH] drm/xe/svm: Take write access only for GC attribute resets
  2026-10-27 20:44 ` [PATCH] " Matthew Brost
@ 2026-10-29  3:50   ` Yadav, Arvind
  0 siblings, 0 replies; 7+ messages in thread
From: Yadav, Arvind @ 2026-10-29  3:50 UTC (permalink / raw)
  To: Matthew Brost
  Cc: intel-xe, dri-devel, himal.prasad.ghimiray, thomas.hellstrom


On 28-10-2026 02:14, Matthew Brost wrote:
> On Mon, Oct 26, 2026 at 05:50:45PM +0530, Arvind Yadav wrote:
>> Fault service holds vm->lock for read while using a VMA. SVM garbage
>> collection also runs under the read lock and can reset AUTORESET
>> attributes. The reset can split or merge VMAs and immediately free a
>> VMA that another fault worker is still using. The GC mutex serializes
> I'll have to think about this one for a bit but quick thought:
>
> Can we use some ref counting (e.g., add a VMA ref count) rather than
> changing the locking?


A VMA ref count would keep it alive while the fault worker uses it. But 
the reset also changes "vma->attr" which the fault worker reads. The ref 
count would not protect those updates.

I will check if we can avoid changing the attributes in place and retry 
the fault when the VMA is replaced, keeping the current locking. If You 
have any other suggestion please let me know.

Thanks,
Arvind

> Matt
>
>> collectors but does not protect VMA readers.
>>
>> Keep backing collection under read access when no attribute change is
>> needed. Defer ranges requiring a reset and return -EAGAIN so the caller
>> can release its read-side state and collect with write access.
>>
>> In fault service, discard the old VMA pointer before releasing the read
>> lock. After acquiring write access, recheck VM state and collect the
>> queued ranges. Downgrade to read and repeat VMA lookup, permission checks
>> and advice-dependent setup.
>>
>> Drain GC under the existing write lock before madvise, bind and attribute
>> query. Require write access for VMA changes while retaining parallel
>> fault service when no reset is needed.
>>
>> [ 2163.042338] ==================================================================
>> [ 2163.042353] BUG: KASAN: slab-use-after-free in __xe_svm_handle_pagefault+0x297/0x1460 [xe]
>> [ 2163.042815] Read of size 8 at addr ffff88813f879b70 by task kworker/u65:3/3115
>>
>> [ 2163.042834] CPU: 0 UID: 0 PID: 3115 Comm: kworker/u65:3 Kdump: loaded Tainted: G S      W  O        7.3.0-lgci-xe-svm-22oct #16 PREEMPT(full)
>> [ 2163.042841] Tainted: [S]=CPU_OUT_OF_SPEC, [W]=WARN, [O]=OOT_MODULE
>> [ 2163.042842] Hardware name: ASUS System Product Name/PRIME Z790-P WIFI, BIOS 1002 03/31/2023
>> [ 2163.042845] Workqueue: xe_page_fault_work_queue xe_pagefault_queue_work [xe]
>> [ 2163.043326] Call Trace:
>> [ 2163.043327]  <TASK>
>> [ 2163.043330]  dump_stack_lvl+0x91/0xf0
>> [ 2163.043336]  print_report+0xd1/0x610
>> [ 2163.043340]  ? __xe_svm_handle_pagefault+0x297/0x1460 [xe]
>> [ 2163.043825]  ? __virt_addr_valid+0x1b2/0x350
>> [ 2163.043831]  ? kasan_complete_mode_report_info+0x6a/0x210
>> [ 2163.043836]  ? __xe_svm_handle_pagefault+0x297/0x1460 [xe]
>> [ 2163.044340]  kasan_report+0xa3/0xe0
>> [ 2163.044344]  ? __xe_svm_handle_pagefault+0x297/0x1460 [xe]
>> [ 2163.044881]  __asan_load8+0x8b/0xe0
>> [ 2163.044885]  __xe_svm_handle_pagefault+0x297/0x1460 [xe]
>> [ 2163.045456]  ? lock_acquire+0x1b0/0x320
>> [ 2163.045461]  ? xe_vm_find_overlapping_vma+0x88/0x310 [xe]
>> [ 2163.046072]  ? __pfx___xe_svm_handle_pagefault+0x10/0x10 [xe]
>> [ 2163.046679]  ? rcu_is_watching+0x21/0x60
>> [ 2163.046684]  ? __mutex_lock+0x1172/0x18b0
>> [ 2163.046690]  ? find_held_lock+0x31/0x90
>> [ 2163.046696]  ? xe_vm_find_overlapping_vma+0xa1/0x310 [xe]
>> [ 2163.047273]  ? __kasan_check_write+0x14/0x30
>> [ 2163.047278]  ? __mutex_unlock_slowpath+0x10f/0x660
>> [ 2163.047285]  ? __pfx___mutex_unlock_slowpath+0x10/0x10
>> [ 2163.047295]  ? mutex_unlock+0x12/0x20
>> [ 2163.047299]  ? xe_vm_find_overlapping_vma+0xa1/0x310 [xe]
>> [ 2163.047844]  xe_svm_handle_pagefault+0x5c/0x140 [xe]
>> [ 2163.048355]  xe_pagefault_queue_work+0x19ad/0x2450 [xe]
>> [ 2163.048843]  process_one_work+0x5ae/0xdd0
>> [ 2163.048847]  ? __lock_acquire+0x58a/0x2820
>> [ 2163.048850]  ? __schedule+0x22a6/0x3670
>> [ 2163.048858]  ? __pfx_process_one_work+0x10/0x10
>> [ 2163.048866]  ? __pfx_xe_pagefault_queue_work+0x10/0x10 [xe]
>> [ 2163.049345]  ? assign_work+0xe4/0x1d0
>> [ 2163.049350]  worker_thread+0x3b4/0x6a0
>> [ 2163.049357]  ? __pfx_worker_thread+0x10/0x10
>> [ 2163.049361]  kthread+0x204/0x250
>> [ 2163.049364]  ? kthread+0xf1/0x250
>> [ 2163.049369]  ? __pfx_kthread+0x10/0x10
>> [ 2163.049372]  ret_from_fork+0x465/0x6a0
>> [ 2163.049377]  ? __pfx_ret_from_fork+0x10/0x10
>> [ 2163.049381]  ? __switch_to+0x26f/0x740
>> [ 2163.049386]  ? __pfx_kthread+0x10/0x10
>> [ 2163.049390]  ret_from_fork_asm+0x1a/0x30
>> [ 2163.049399]  </TASK>
>>
>> [ 2163.049654] Allocated by task 522570:
>> [ 2163.049662]  kasan_save_stack+0x26/0x60
>> [ 2163.049668]  kasan_save_track+0x14/0x40
>> [ 2163.049672]  kasan_save_alloc_info+0x37/0x60
>> [ 2163.049677]  __kasan_kmalloc+0xc3/0xd0
>> [ 2163.049681]  __kmalloc_cache_noprof+0x2b4/0x6c0
>> [ 2163.049686]  xe_vma_create+0xe3/0xe60 [xe]
>> [ 2163.050170]  new_vma+0x416/0x540 [xe]
>> [ 2163.050654]  vm_bind_ioctl_ops_parse+0xc3e/0x1110 [xe]
>> [ 2163.051139]  xe_vm_alloc_vma+0x243/0xd60 [xe]
>> [ 2163.051623]  xe_vm_alloc_madvise_vma+0x92/0xd0 [xe]
>> [ 2163.052107]  xe_vm_madvise_ioctl+0x783/0x14f0 [xe]
>> [ 2163.052591]  drm_ioctl_kernel+0x143/0x200
>> [ 2163.052597]  drm_ioctl+0x419/0x790
>> [ 2163.052600]  xe_drm_ioctl+0x9e/0xf0 [xe]
>> [ 2163.053074]  __x64_sys_ioctl+0xd5/0x130
>> [ 2163.053079]  x64_sys_call+0x2b5/0x27e0
>> [ 2163.053084]  do_syscall_64+0xef/0x6c0
>> [ 2163.053088]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
>>
>> [ 2163.053098] Freed by task 17929:
>> [ 2163.053105]  kasan_save_stack+0x26/0x60
>> [ 2163.053110]  kasan_save_track+0x14/0x40
>> [ 2163.053114]  kasan_save_free_info+0x3b/0x60
>> [ 2163.053118]  __kasan_slab_free+0x6f/0xa0
>> [ 2163.053123]  kfree+0x2bb/0x600
>> [ 2163.053127]  xe_vma_free+0x5a/0x70 [xe]
>> [ 2163.053610]  xe_vma_destroy_late+0xae/0xf0 [xe]
>> [ 2163.054093]  xe_vma_destroy+0xda/0xf20 [xe]
>> [ 2163.054576]  xe_vm_alloc_vma+0x304/0xd60 [xe]
>> [ 2163.055059]  xe_vm_alloc_cpu_addr_mirror_vma+0x8f/0xd0 [xe]
>> [ 2163.055543]  xe_svm_garbage_collector+0x388/0x5d0 [xe]
>> [ 2163.056028]  xe_svm_garbage_collector_work_func+0x2a/0x40 [xe]
>> [ 2163.056512]  process_one_work+0x5ae/0xdd0
>> [ 2163.056517]  worker_thread+0x3b4/0x6a0
>> [ 2163.056521]  kthread+0x204/0x250
>> [ 2163.056525]  ret_from_fork+0x465/0x6a0
>> [ 2163.056530]  ret_from_fork_asm+0x1a/0x30
>>
>> Fixes: 941bcc1a4bbf ("drm/xe: Fine grained page fault locking")
>> Cc: Matthew Brost <matthew.brost@intel.com>
>> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
>> Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>> Assisted-by: LLM
>> Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
>> ---
>>   drivers/gpu/drm/xe/xe_pagefault.c  |  37 +++++-
>>   drivers/gpu/drm/xe/xe_svm.c        | 179 ++++++++++++++++++++++-------
>>   drivers/gpu/drm/xe/xe_svm.h        |   8 ++
>>   drivers/gpu/drm/xe/xe_vm.c         |  54 +++++----
>>   drivers/gpu/drm/xe/xe_vm_madvise.c |   5 +
>>   5 files changed, 212 insertions(+), 71 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_pagefault.c b/drivers/gpu/drm/xe/xe_pagefault.c
>> index 5247321c805e..9e1377df9d01 100644
>> --- a/drivers/gpu/drm/xe/xe_pagefault.c
>> +++ b/drivers/gpu/drm/xe/xe_pagefault.c
>> @@ -270,8 +270,9 @@ static int xe_pagefault_service(struct xe_pagefault *pf)
>>   	struct xe_device *xe = gt_to_xe(gt);
>>   	struct xe_vm *vm;
>>   	struct xe_vma *vma = NULL;
>> +	enum xe_pagefault_error error;
>>   	int err;
>> -	bool atomic;
>> +	bool atomic, svm_relookup = false;
>>   	u32 asid = FIELD_GET(XE_PAGEFAULT_ASID_MASK, pf->consumer.id);
>>   
>>   	/* Producer flagged this fault to be nacked */
>> @@ -297,10 +298,13 @@ static int xe_pagefault_service(struct xe_pagefault *pf)
>>   		goto unlock_vm;
>>   	}
>>   
>> +lookup_vma:
>>   	vma = xe_vm_find_vma_by_addr(vm, xe_pagefault_addr(pf));
>>   	if (!vma) {
>>   		err = -EINVAL;
>> -		xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_VMA_NOT_FOUND);
>> +		xe_pagefault_set_error(pf, svm_relookup ?
>> +				       XE_PAGEFAULT_ERROR_SVM_VMA_NOT_FOUND :
>> +				       XE_PAGEFAULT_ERROR_VMA_NOT_FOUND);
>>   		goto unlock_vm;
>>   	}
>>   
>> @@ -313,11 +317,36 @@ static int xe_pagefault_service(struct xe_pagefault *pf)
>>   
>>   	atomic = xe_pagefault_access_is_atomic(pf->consumer.access_type);
>>   
>> -	if (xe_vma_is_cpu_addr_mirror(vma))
>> +	if (xe_vma_is_cpu_addr_mirror(vma)) {
>>   		err = xe_svm_handle_pagefault(vm, vma, pf, gt,
>>   					      xe_pagefault_addr(pf), atomic);
>> -	else
>> +		if (err == -EAGAIN) {
>> +			/* GC needs to change VMAs. Drop all read-side state. */
>> +			vma = NULL;
>> +			up_read(&vm->lock);
>> +			down_write(&vm->lock);
>> +
>> +			if (xe_vm_is_closed(vm)) {
>> +				err = -ENOENT;
>> +				error = XE_PAGEFAULT_ERROR_VM_CLOSED;
>> +			} else {
>> +				err = xe_svm_garbage_collect(vm);
>> +				error = XE_PAGEFAULT_ERROR_SVM_GARBAGE_COLLECTOR;
>> +			}
>> +
>> +			downgrade_write(&vm->lock);
>> +			if (err) {
>> +				xe_pagefault_set_error(pf, error);
>> +				goto unlock_vm;
>> +			}
>> +
>> +			xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_NONE);
>> +			svm_relookup = true;
>> +			goto lookup_vma;
>> +		}
>> +	} else {
>>   		err = xe_pagefault_handle_vma(gt, vma, pf, atomic);
>> +	}
>>   
>>   unlock_vm:
>>   	if (err)
>> diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
>> index bc6902b5bf57..d19cb0c4b154 100644
>> --- a/drivers/gpu/drm/xe/xe_svm.c
>> +++ b/drivers/gpu/drm/xe/xe_svm.c
>> @@ -356,12 +356,36 @@ static void xe_vma_set_default_attributes(struct xe_vma *vma)
>>   	xe_vma_mem_attr_copy(&vma->attr, &default_attr);
>>   }
>>   
>> +/* vm->lock keeps the VMA and its attributes stable during this check. */
>> +static bool xe_svm_range_needs_attr_reset(struct xe_vm *vm, u64 start)
>> +{
>> +	struct xe_vma *vma;
>> +	u64 end;
>> +
>> +	lockdep_assert_held(&vm->lock);
>> +
>> +	vma = xe_vm_find_vma_by_addr(vm, start);
>> +	if (!vma || !(vma->gpuva.flags & XE_VMA_MADV_AUTORESET))
>> +		return false;
>> +
>> +	if (!xe_vma_has_default_mem_attrs(vma))
>> +		return true;
>> +
>> +	start = xe_vma_start(vma);
>> +	end = xe_vma_end(vma);
>> +	xe_vm_find_cpu_addr_mirror_vma_range(vm, &start, &end);
>> +
>> +	return start != xe_vma_start(vma) || end != xe_vma_end(vma);
>> +}
>> +
>>   static int xe_svm_range_set_default_attr(struct xe_vm *vm, u64 start, u64 end)
>>   {
>>   	struct xe_vma *vma;
>>   	bool has_default_attr;
>>   	int err;
>>   
>> +	lockdep_assert_held_write(&vm->lock);
>> +
>>   	vma = xe_vm_find_vma_by_addr(vm, start);
>>   	if (!vma)
>>   		return -EINVAL;
>> @@ -397,70 +421,134 @@ static int xe_svm_range_set_default_attr(struct xe_vm *vm, u64 start, u64 end)
>>   		return err;
>>   	}
>>   
>> -	/*
>> -	 * On call from xe_svm_handle_pagefault original VMA might be changed
>> -	 * signal this to lookup for VMA again.
>> -	 */
>> -	return -EAGAIN;
>> +	return 0;
>>   }
>>   
>> -static int xe_svm_garbage_collector(struct xe_vm *vm)
>> +/*
>> + * With reset_attrs false, defer ranges requiring a VMA change and return
>> + * -EAGAIN after collecting the remaining ready ranges in the batch. The
>> + * caller must release all read-side state before collecting them with
>> + * vm->lock held for write.
>> + */
>> +static int xe_svm_garbage_collector(struct xe_vm *vm, bool reset_attrs)
>>   {
>>   	struct xe_svm_range *range;
>> -	u64 range_start;
>> -	u64 range_end;
>> -	int err, ret = 0;
>> +	LIST_HEAD(pending);
>> +	LIST_HEAD(deferred);
>> +	u64 range_start, range_end;
>> +	bool needs_reset;
>> +	int err = 0, ret = 0;
>>   
>>   	lockdep_assert_held(&vm->lock);
>> +	if (reset_attrs)
>> +		lockdep_assert_held_write(&vm->lock);
>>   
>>   	if (xe_vm_is_closed_or_banned(vm))
>>   		return -ENOENT;
>>   
>>   	guard(mutex)(&vm->svm.garbage_collector.lock);
>>   
>> +	/* Process a finite batch, excluding events queued during this pass. */
>> +	spin_lock(&vm->svm.garbage_collector.list_lock);
>> +	if (list_empty(&vm->svm.garbage_collector.range_list)) {
>> +		spin_unlock(&vm->svm.garbage_collector.list_lock);
>> +		return 0;
>> +	}
>> +	list_splice_init(&vm->svm.garbage_collector.range_list, &pending);
>> +	spin_unlock(&vm->svm.garbage_collector.list_lock);
>> +
>>   	for (;;) {
>>   		spin_lock(&vm->svm.garbage_collector.list_lock);
>> -		range = list_first_entry_or_null(&vm->svm.garbage_collector.range_list,
>> -						 typeof(*range),
>> +		range = list_first_entry_or_null(&pending, typeof(*range),
>>   						 garbage_collector_link);
>> -		if (!range)
>> +		if (!range) {
>> +			spin_unlock(&vm->svm.garbage_collector.list_lock);
>>   			break;
>> +		}
>>   
>>   		range_start = xe_svm_range_start(range);
>>   		range_end = xe_svm_range_end(range);
>> -
>>   		list_del(&range->garbage_collector_link);
>>   		spin_unlock(&vm->svm.garbage_collector.list_lock);
>>   
>> +		/*
>> +		 * Keep the backing range alive until its attributes can be
>> +		 * reset. The GC mutex excludes other collectors and explicit
>> +		 * range removal requires vm->lock for write.
>> +		 */
>> +		needs_reset = xe_svm_range_needs_attr_reset(vm, range_start);
>> +		if (needs_reset && !reset_attrs) {
>> +			spin_lock(&vm->svm.garbage_collector.list_lock);
>> +			list_add_tail(&range->garbage_collector_link, &deferred);
>> +			spin_unlock(&vm->svm.garbage_collector.list_lock);
>> +			ret = -EAGAIN;
>> +			continue;
>> +		}
>> +
>>   		err = __xe_svm_garbage_collector(vm, range);
>>   		if (err) {
>>   			drm_warn(&vm->xe->drm,
>>   				 "Garbage collection failed: %pe\n",
>>   				 ERR_PTR(err));
>> +			/* Leave the failed range in the tree for VM teardown. */
>>   			xe_vm_kill(vm, true);
>> -			return err;
>> +			goto out;
>>   		}
>>   
>> -		err = xe_svm_range_set_default_attr(vm, range_start, range_end);
>> -		if (err) {
>> -			if (err == -EAGAIN)
>> -				ret = -EAGAIN;
>> -			else
>> -				return err;
>> +		if (needs_reset) {
>> +			err = xe_svm_range_set_default_attr(vm, range_start, range_end);
>> +			if (err)
>> +				goto out;
>>   		}
>>   	}
>> +
>> +out:
>> +	/* Restore ranges not yet processed, including deferred resets. */
>> +	spin_lock(&vm->svm.garbage_collector.list_lock);
>> +	list_splice_tail_init(&pending, &vm->svm.garbage_collector.range_list);
>> +	list_splice_tail_init(&deferred, &vm->svm.garbage_collector.range_list);
>>   	spin_unlock(&vm->svm.garbage_collector.list_lock);
>>   
>> -	return ret;
>> +	return err ?: ret;
>> +}
>> +
>> +/**
>> + * xe_svm_garbage_collect() - Collect SVM ranges and reset their attributes
>> + * @vm: The VM, with vm->lock held for write.
>> + *
>> + * Process one batch of queued ranges, including attribute resets. Ranges
>> + * queued during this pass are left for a later collection.
>> + *
>> + * Call before changing advice or bindings, or querying attributes, so the
>> + * batch is reset before applying new advice or reporting attributes.
>> + * No VMA pointer may be retained across this call.
>> + *
>> + * Return: 0 on success, negative error code on error.
>> + */
>> +int xe_svm_garbage_collect(struct xe_vm *vm)
>> +{
>> +	lockdep_assert_held_write(&vm->lock);
>> +
>> +	if (!xe_vm_in_fault_mode(vm))
>> +		return 0;
>> +
>> +	return xe_svm_garbage_collector(vm, true);
>>   }
>>   
>>   static void xe_svm_garbage_collector_work_func(struct work_struct *w)
>>   {
>>   	struct xe_vm *vm = container_of(w, struct xe_vm,
>>   					svm.garbage_collector.work);
>> +	int err = 0;
>>   
>> -	guard(rwsem_read)(&vm->lock);
>> -	xe_svm_garbage_collector(vm);
>> +	scoped_guard(rwsem_read, &vm->lock)
>> +		err = xe_svm_garbage_collector(vm, false);
>> +
>> +	if (err != -EAGAIN)
>> +		return;
>> +
>> +	guard(rwsem_write)(&vm->lock);
>> +	xe_svm_garbage_collect(vm);
>>   }
>>   
>>   #if IS_ENABLED(CONFIG_DRM_XE_PAGEMAP)
>> @@ -1302,13 +1390,15 @@ static int __xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
>>   	if (range) {
>>   		mutex_unlock(&range->lock);
>>   		drm_gpusvm_range_put(&range->base);
>> -	}
>>   
>> -	/* Always process UNMAPs first so view SVM ranges is current */
>> -	err = xe_svm_garbage_collector(vm);
>> -	if (err) {
>> -		xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_SVM_GARBAGE_COLLECTOR);
>> -		return err;
>> +		/* The caller collected before the initial service attempt. */
>> +		err = xe_svm_garbage_collector(vm, false);
>> +		if (err) {
>> +			if (err != -EAGAIN)
>> +				xe_pagefault_set_error(pf,
>> +						      XE_PAGEFAULT_ERROR_SVM_GARBAGE_COLLECTOR);
>> +			return err;
>> +		}
>>   	}
>>   
>>   	dpagemap = ctx.devmem_only ? xe_tile_local_pagemap(tile) :
>> @@ -1468,14 +1558,28 @@ static int __xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
>>    * Create GPU bindings for a SVM page fault. Optionally migrate to device
>>    * memory.
>>    *
>> - * Return: 0 on success, negative error code on error.
>> + * The caller must hold vm->lock for read. On -EAGAIN, discard @vma before
>> + * releasing that lock. Collect with write access, then repeat VMA lookup
>> + * and permission checks before retrying.
>> + *
>> + * Return: 0 on success, -EAGAIN if the caller must collect with write
>> + * access and repeat VMA lookup, or another negative error code on error.
>>    */
>>   int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
>>   			    struct xe_pagefault *pf, struct xe_gt *gt,
>>   			    u64 fault_addr, bool atomic)
>>   {
>>   	int need_vram, ret;
>> -retry:
>> +
>> +	/* Consume older UNMAPs before reading advice or building the context. */
>> +	ret = xe_svm_garbage_collector(vm, false);
>> +	if (ret) {
>> +		if (ret != -EAGAIN)
>> +			xe_pagefault_set_error(pf,
>> +					       XE_PAGEFAULT_ERROR_SVM_GARBAGE_COLLECTOR);
>> +		return ret;
>> +	}
>> +
>>   	need_vram = xe_vma_need_vram_for_atomic(vm->xe, vma, atomic);
>>   	if (need_vram < 0) {
>>   		xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_SVM_NEEDS_VRAM_CHECK);
>> @@ -1485,18 +1589,9 @@ int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
>>   	ret =  __xe_svm_handle_pagefault(vm, vma, pf, gt, fault_addr,
>>   					 need_vram ? true : false);
>>   	if (ret == -EAGAIN) {
>> -		/*
>> -		 * Retry once on -EAGAIN to re-lookup the VMA, as the original VMA
>> -		 * may have been split by xe_svm_range_set_default_attr.
>> -		 */
>> -		vma = xe_vm_find_vma_by_addr(vm, fault_addr);
>> -		if (!vma) {
>> -			xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_SVM_VMA_NOT_FOUND);
>> -			return -EINVAL;
>> -		}
>> -
>> +		/* Retry from the caller after collecting with write access. */
>>   		xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_NONE);
>> -		goto retry;
>> +		return ret;
>>   	}
>>   	if (ret && xe_pagefault_get_error(pf) == XE_PAGEFAULT_ERROR_NONE)
>>   		xe_pagefault_set_error(pf, XE_PAGEFAULT_ERROR_SVM_SERVICE_FAILED);
>> diff --git a/drivers/gpu/drm/xe/xe_svm.h b/drivers/gpu/drm/xe/xe_svm.h
>> index ffc1cc808102..523213a8cd26 100644
>> --- a/drivers/gpu/drm/xe/xe_svm.h
>> +++ b/drivers/gpu/drm/xe/xe_svm.h
>> @@ -109,6 +109,8 @@ void xe_svm_fini(struct xe_vm *vm);
>>   
>>   void xe_svm_close(struct xe_vm *vm);
>>   
>> +int xe_svm_garbage_collect(struct xe_vm *vm);
>> +
>>   int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
>>   			    struct xe_pagefault *pf, struct xe_gt *gt,
>>   			    u64 fault_addr, bool atomic);
>> @@ -316,6 +318,12 @@ void xe_svm_close(struct xe_vm *vm)
>>   {
>>   }
>>   
>> +static inline
>> +int xe_svm_garbage_collect(struct xe_vm *vm)
>> +{
>> +	return 0;
>> +}
>> +
>>   static inline
>>   int xe_svm_handle_pagefault(struct xe_vm *vm, struct xe_vma *vma,
>>   			    struct xe_pagefault *pf, struct xe_gt *gt,
>> diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
>> index d12365b11186..6afe6f1be1d4 100644
>> --- a/drivers/gpu/drm/xe/xe_vm.c
>> +++ b/drivers/gpu/drm/xe/xe_vm.c
>> @@ -1308,19 +1308,12 @@ static void vma_destroy_cb(struct dma_fence *fence,
>>   	xe_destroy_wq_queue(&vma->destroy_work);
>>   }
>>   
>> -static void xe_vm_assert_write_mode_or_garbage_collector(struct xe_vm *vm)
>> -{
>> -	lockdep_assert(lockdep_is_held_type(&vm->lock, 0) ||
>> -		       (lockdep_is_held_type(&vm->lock, 1) &&
>> -			lockdep_is_held_type(&vm->svm.garbage_collector.lock, 0)));
>> -}
>> -
>>   static void xe_vma_destroy(struct xe_vma *vma, struct dma_fence *fence)
>>   {
>>   	struct xe_vm *vm = xe_vma_vm(vma);
>>   	struct xe_bo *bo = xe_vma_bo(vma);
>>   
>> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +	lockdep_assert_held_write(&vm->lock);
>>   	xe_assert(vm->xe, list_empty(&vma->combined_links.destroy));
>>   
>>   	if (xe_vma_is_userptr(vma)) {
>> @@ -1416,7 +1409,7 @@ static int xe_vm_insert_vma(struct xe_vm *vm, struct xe_vma *vma)
>>   	int err;
>>   
>>   	xe_assert(vm->xe, xe_vma_vm(vma) == vm);
>> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +	lockdep_assert_held_write(&vm->lock);
>>   
>>   	mutex_lock(&vm->snap_mutex);
>>   	err = drm_gpuva_insert(&vm->gpuvm, &vma->gpuva);
>> @@ -1429,7 +1422,7 @@ static int xe_vm_insert_vma(struct xe_vm *vm, struct xe_vma *vma)
>>   static void xe_vm_remove_vma(struct xe_vm *vm, struct xe_vma *vma)
>>   {
>>   	xe_assert(vm->xe, xe_vma_vm(vma) == vm);
>> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +	lockdep_assert_held_write(&vm->lock);
>>   
>>   	mutex_lock(&vm->snap_mutex);
>>   	drm_gpuva_remove(&vma->gpuva);
>> @@ -2267,7 +2260,7 @@ static int xe_vm_query_vmas(struct xe_vm *vm, u64 start, u64 end)
>>   	struct drm_gpuva *gpuva;
>>   	u32 num_vmas = 0;
>>   
>> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +	lockdep_assert_held(&vm->lock);
>>   	drm_gpuvm_for_each_va_range(gpuva, &vm->gpuvm, start, end)
>>   		num_vmas++;
>>   
>> @@ -2280,7 +2273,7 @@ static int get_mem_attrs(struct xe_vm *vm, u32 *num_vmas, u64 start,
>>   	struct drm_gpuva *gpuva;
>>   	int i = 0;
>>   
>> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +	lockdep_assert_held(&vm->lock);
>>   
>>   	drm_gpuvm_for_each_va_range(gpuva, &vm->gpuvm, start, end) {
>>   		struct xe_vma *vma = gpuva_to_vma(gpuva);
>> @@ -2330,6 +2323,12 @@ int xe_vm_query_vmas_attrs_ioctl(struct drm_device *dev, void *data, struct drm_
>>   	if (err)
>>   		goto put_vm;
>>   
>> +	if (!xe_vm_is_closed_or_banned(vm)) {
>> +		err = xe_svm_garbage_collect(vm);
>> +		if (err)
>> +			goto unlock_vm;
>> +	}
>> +
>>   	attrs_user = u64_to_user_ptr(args->vector_of_mem_attr);
>>   
>>   	if (args->num_mem_ranges == 0 && !attrs_user) {
>> @@ -2487,7 +2486,7 @@ vm_bind_ioctl_ops_create(struct xe_vm *vm, struct xe_vma_ops *vops,
>>   	u64 range_end = addr + range;
>>   	int err;
>>   
>> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +	lockdep_assert_held_write(&vm->lock);
>>   
>>   	vm_dbg(&vm->xe->drm,
>>   	       "op=%d, addr=0x%016llx, range=0x%016llx, bo_offset_or_userptr=0x%016llx",
>> @@ -2694,7 +2693,7 @@ static struct xe_vma *new_vma(struct xe_vm *vm, struct drm_gpuva_op_map *op,
>>   	struct xe_vma *vma;
>>   	int err = 0;
>>   
>> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +	lockdep_assert_held_write(&vm->lock);
>>   
>>   	if (bo) {
>>   		err = 0;
>> @@ -2795,7 +2794,7 @@ static int xe_vma_op_commit(struct xe_vm *vm, struct xe_vma_op *op)
>>   
>>   	switch (op->base.op) {
>>   	case DRM_GPUVA_OP_MAP:
>> -		xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +		lockdep_assert_held_write(&vm->lock);
>>   
>>   		err |= xe_vm_insert_vma(vm, op->map.vma);
>>   		if (!err)
>> @@ -2806,7 +2805,7 @@ static int xe_vma_op_commit(struct xe_vm *vm, struct xe_vma_op *op)
>>   		u8 tile_present =
>>   			gpuva_to_vma(op->base.remap.unmap->va)->tile_present;
>>   
>> -		xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +		lockdep_assert_held_write(&vm->lock);
>>   
>>   		prep_vma_destroy(vm, gpuva_to_vma(op->base.remap.unmap->va),
>>   				 true);
>> @@ -2842,7 +2841,7 @@ static int xe_vma_op_commit(struct xe_vm *vm, struct xe_vma_op *op)
>>   		break;
>>   	}
>>   	case DRM_GPUVA_OP_UNMAP:
>> -		xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +		lockdep_assert_held_write(&vm->lock);
>>   
>>   		prep_vma_destroy(vm, gpuva_to_vma(op->base.unmap.va), true);
>>   		op->flags |= XE_VMA_OP_COMMITTED;
>> @@ -2889,7 +2888,7 @@ static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct drm_gpuva_ops *ops,
>>   	u8 id, tile_mask = 0;
>>   	int err = 0;
>>   
>> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +	lockdep_assert_held_write(&vm->lock);
>>   
>>   	for_each_tile(tile, vm->xe, id)
>>   		tile_mask |= 0x1 << id;
>> @@ -3072,7 +3071,7 @@ static void xe_vma_op_unwind(struct xe_vm *vm, struct xe_vma_op *op,
>>   
>>   	switch (op->base.op) {
>>   	case DRM_GPUVA_OP_MAP:
>> -		xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +		lockdep_assert_held_write(&vm->lock);
>>   
>>   		if (op->map.vma) {
>>   			prep_vma_destroy(vm, op->map.vma, post_commit);
>> @@ -3083,7 +3082,7 @@ static void xe_vma_op_unwind(struct xe_vm *vm, struct xe_vma_op *op,
>>   	{
>>   		struct xe_vma *vma = gpuva_to_vma(op->base.unmap.va);
>>   
>> -		xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +		lockdep_assert_held_write(&vm->lock);
>>   
>>   		if (vma) {
>>   			xe_svm_notifier_lock(vm);
>> @@ -3098,7 +3097,7 @@ static void xe_vma_op_unwind(struct xe_vm *vm, struct xe_vma_op *op,
>>   	{
>>   		struct xe_vma *vma = gpuva_to_vma(op->base.remap.unmap->va);
>>   
>> -		xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +		lockdep_assert_held_write(&vm->lock);
>>   
>>   		if (op->remap.prev) {
>>   			prep_vma_destroy(vm, op->remap.prev, prev_post_commit);
>> @@ -4092,6 +4091,11 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
>>   		goto release_vm_lock;
>>   	}
>>   
>> +	/* Consume queued resets before replacing VMAs. */
>> +	err = xe_svm_garbage_collect(vm);
>> +	if (err)
>> +		goto release_vm_lock;
>> +
>>   	for (i = 0; i < args->num_binds; ++i) {
>>   		u64 range = bind_ops[i].range;
>>   		u64 addr = bind_ops[i].addr;
>> @@ -4907,7 +4911,7 @@ static int xe_vm_alloc_vma(struct xe_vm *vm,
>>   	u16 default_pat;
>>   	int err;
>>   
>> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +	lockdep_assert_held_write(&vm->lock);
>>   
>>   	if (is_madvise)
>>   		ops = drm_gpuvm_madvise_ops_create(&vm->gpuvm, map_req);
>> @@ -5041,7 +5045,7 @@ int xe_vm_alloc_madvise_vma(struct xe_vm *vm, uint64_t start, uint64_t range)
>>   		.map.va.range = range,
>>   	};
>>   
>> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +	lockdep_assert_held_write(&vm->lock);
>>   
>>   	vm_dbg(&vm->xe->drm, "MADVISE_OPS_CREATE: addr=0x%016llx, size=0x%016llx", start, range);
>>   
>> @@ -5073,7 +5077,7 @@ void xe_vm_find_cpu_addr_mirror_vma_range(struct xe_vm *vm, u64 *start, u64 *end
>>   {
>>   	struct xe_vma *prev, *next;
>>   
>> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +	lockdep_assert_held(&vm->lock);
>>   
>>   	if (*start >= SZ_4K) {
>>   		prev = xe_vm_find_vma_by_addr(vm, *start - SZ_4K);
>> @@ -5105,7 +5109,7 @@ int xe_vm_alloc_cpu_addr_mirror_vma(struct xe_vm *vm, uint64_t start, uint64_t r
>>   		.map.va.range = range,
>>   	};
>>   
>> -	xe_vm_assert_write_mode_or_garbage_collector(vm);
>> +	lockdep_assert_held_write(&vm->lock);
>>   
>>   	vm_dbg(&vm->xe->drm, "CPU_ADDR_MIRROR_VMA_OPS_CREATE: addr=0x%016llx, size=0x%016llx",
>>   	       start, range);
>> diff --git a/drivers/gpu/drm/xe/xe_vm_madvise.c b/drivers/gpu/drm/xe/xe_vm_madvise.c
>> index 5c7aefc641ee..1af5e79bbfd3 100644
>> --- a/drivers/gpu/drm/xe/xe_vm_madvise.c
>> +++ b/drivers/gpu/drm/xe/xe_vm_madvise.c
>> @@ -638,6 +638,11 @@ int xe_vm_madvise_ioctl(struct drm_device *dev, void *data, struct drm_file *fil
>>   		goto unlock_vm;
>>   	}
>>   
>> +	/* Consume queued resets before publishing new advice. */
>> +	err = xe_svm_garbage_collect(vm);
>> +	if (err)
>> +		goto unlock_vm;
>> +
>>   	err = xe_madvise_details_init(vm, args, &details);
>>   	if (err)
>>   		goto unlock_vm;
>> -- 
>> 2.43.0
>>

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

end of thread, other threads:[~2026-10-29  3:50 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-26 12:20 [PATCH] drm/xe/svm: Take write access only for GC attribute resets Arvind Yadav
2026-10-26 14:58 ` ✗ CI.checkpatch: warning for " Patchwork
2026-10-26 15:00 ` ✓ CI.KUnit: success " Patchwork
2026-10-26 15:37 ` ✓ Xe.CI.BAT: " Patchwork
2026-10-26 18:50 ` ✓ Xe.CI.FULL: " Patchwork
2026-10-27 20:44 ` [PATCH] " Matthew Brost
2026-10-29  3:50   ` Yadav, Arvind

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