intel-xe.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access
@ 2026-09-22 10:16 Arvind Yadav
  2026-09-22 10:16 ` [PATCH v2 01/15] drm/xe/irq: Always free requested IRQs on uninstall Arvind Yadav
                   ` (17 more replies)
  0 siblings, 18 replies; 23+ messages in thread
From: Arvind Yadav @ 2026-09-22 10:16 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	rodrigo.vivi

A permanently wedged device may still be accessed by pending work,
background workers and existing VRAM CPU mappings. This can leave DMA,
interrupt or MMIO activity running after userspace has been asked to
recover the device.

Add a common device I/O gate based on the DRM SRCU domain. Hardware
users enter the gate before checking the device state and leave it after
their hardware access has finished. PCI error recovery and permanent
wedge handling first publish the blocked state, signal pending GT fences
and then drain existing readers. This closes the race between checking
the device state and accessing hardware.

Keep recoverable PCI error handling separate from permanent wedging.
AER uses a temporary reset state and returns -ECANCELED for cancelled
GuC requests. A permanent wedge remains terminal and returns
-ENOTRECOVERABLE.

AER recovery recreates the Xe device. Existing DRM file descriptors
remain attached to the unplugged instance and are not recovered.
Userspace must close them and reopen the recovered device. This series
does not add transparent reset recovery.

After a permanent wedge, the driver:
 - Drops queued page faults.
 - Blocks VM, SVM and GuC hardware access.
 - Waits for active device I/O users.
 - Shuts down and unregisters the display.
 - Suspends interrupts and clears PCI bus mastering.
 - invalidates existing VRAM CPU mappings
 - maps later CPU faults to one dummy page per BO
 - Rejects new VRAM allocations.
 - Notifies userspace after isolation completes.

System suspend waits for wedge isolation to finish. PCI disable and
D3Cold operations remain paired even when the device wedges during
suspend. Resume balances the PCI state but skips driver resume for a
permanently wedged device.

The series also fixes IRQ uninstall so requested IRQ handlers are freed
after interrupts have already been suspended.

v2:
 - Add a common device I/O gate on the DRM SRCU domain. Hardware users
   enter the gate before checking device state, and blocked paths drain
   existing readers.
 - Return -ECANCELED for GuC sends blocked by AER recovery, keeping
  -ENOTRECOVERABLE for permanent wedges.
 - Update reported_method only when drm_dev_wedged_event() succeeds.
   Requeue only when the recovery method changes to avoid repeated
   retries after notification failure. (Andi)
 - Map only the faulting address to the per-BO dummy page instead of
   prefaulting the entire VMA.
 - Keep PCI enable/disable and D3Cold operations paired, including when
   the device wedges during suspend. Skip only driver-level PM work
   for wedged devices.
 - Use explicit runtime-PM get/put calls in xe_bo_vm_access() instead
   of mixing scope-based cleanup with goto-based error handling.
 - Protect VM and SVM hardware access with the common SRCU gate.
 - Hold the gate across page-fault, migration and rebind work.
 - Remove the racy device state checks.
 - Simplify the TLB invalidation warning check.
 - report the wedged event from a worker after isolation.
 - invalidate existing VRAM CPU mappings after draining active faults.

Arvind Yadav (14):
  drm/xe/irq: Always free requested IRQs on uninstall
  drm/xe: Separate AER reset state from device wedging
  drm/xe: Protect device I/O with DRM device SRCU
  drm/xe: Drop queued page faults when device I/O is blocked
  drm/xe: Stop VM work when device I/O is blocked
  drm/xe: Send wedged notification from a worker
  drm/xe: Reuse one dummy page per BO after wedge
  drm/xe: Invalidate existing VRAM mappings on wedge
  drm/xe/irq: Protect IRQ state during wedge isolation
  drm/xe: Isolate a wedged device before notifying userspace
  drm/xe/ttm: Reject VRAM allocations on wedged devices
  drm/xe/guc: Skip timeout recovery on a wedged device
  drm/xe: Skip PM notifier preparation when device I/O is blocked
  drm/xe: Block BO VM access when device I/O is unavailable

Thomas Hellström (1):
  drm/drv: Export drm_dev_srcu_synchronize()

 drivers/gpu/drm/drm_drv.c               |  17 ++-
 drivers/gpu/drm/xe/display/xe_display.c |  17 ++-
 drivers/gpu/drm/xe/xe_bo.c              |  72 ++++++++++-
 drivers/gpu/drm/xe/xe_bo.h              |   1 +
 drivers/gpu/drm/xe/xe_bo_types.h        |   4 +
 drivers/gpu/drm/xe/xe_device.c          | 155 ++++++++++++++++++++----
 drivers/gpu/drm/xe/xe_device.h          |  41 +++++++
 drivers/gpu/drm/xe/xe_device_types.h    |  21 ++++
 drivers/gpu/drm/xe/xe_guc_ct.c          |  24 +++-
 drivers/gpu/drm/xe/xe_guc_pc.c          |  10 +-
 drivers/gpu/drm/xe/xe_guc_rc.c          |   4 +-
 drivers/gpu/drm/xe/xe_guc_submit.c      |  13 +-
 drivers/gpu/drm/xe/xe_guc_tlb_inval.c   |  15 ++-
 drivers/gpu/drm/xe/xe_irq.c             |  29 +++--
 drivers/gpu/drm/xe/xe_pagefault.c       |  20 ++-
 drivers/gpu/drm/xe/xe_pci.c             |  51 ++++++--
 drivers/gpu/drm/xe/xe_pci_error.c       |  24 ++--
 drivers/gpu/drm/xe/xe_pm.c              |  12 ++
 drivers/gpu/drm/xe/xe_sriov_pf.c        |   2 +-
 drivers/gpu/drm/xe/xe_svm.c             |  29 ++++-
 drivers/gpu/drm/xe/xe_ttm_vram_mgr.c    |   4 +
 drivers/gpu/drm/xe/xe_vm.c              |  11 +-
 include/drm/drm_drv.h                   |   1 +
 23 files changed, 487 insertions(+), 90 deletions(-)

-- 
2.43.0


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

* [PATCH v2 01/15] drm/xe/irq: Always free requested IRQs on uninstall
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
@ 2026-09-22 10:16 ` Arvind Yadav
  2026-09-22 10:16 ` [PATCH v2 02/15] drm/drv: Export drm_dev_srcu_synchronize() Arvind Yadav
                   ` (16 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Arvind Yadav @ 2026-09-22 10:16 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	rodrigo.vivi

xe_irq_suspend() clears irq.enabled after disabling and synchronizing the
interrupts. irq_uninstall() currently returns when that flag is clear, so
a suspended device can skip free_irq() during teardown.

The managed uninstall action is registered only after the IRQ request
succeeds. Reset the interrupt registers only when interrupts are still
enabled, but always free the requested IRQs.

Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
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>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
 drivers/gpu/drm/xe/xe_irq.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index 9e49e2241da4..d314993b14a1 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -786,10 +786,8 @@ static void irq_uninstall(void *arg)
 {
 	struct xe_device *xe = arg;
 
-	if (!atomic_xchg(&xe->irq.enabled, 0))
-		return;
-
-	xe_irq_reset(xe);
+	if (atomic_xchg(&xe->irq.enabled, 0))
+		xe_irq_reset(xe);
 
 	if (xe_device_has_msix(xe))
 		xe_irq_msix_free(xe);
-- 
2.43.0


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

* [PATCH v2 02/15] drm/drv: Export drm_dev_srcu_synchronize()
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
  2026-09-22 10:16 ` [PATCH v2 01/15] drm/xe/irq: Always free requested IRQs on uninstall Arvind Yadav
@ 2026-09-22 10:16 ` Arvind Yadav
  2026-09-22 10:16 ` [PATCH v2 03/15] drm/xe: Separate AER reset state from device wedging Arvind Yadav
                   ` (15 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Arvind Yadav @ 2026-09-22 10:16 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	rodrigo.vivi

From: Thomas Hellström <thomas.hellstrom@linux.intel.com>

drm_dev_unplug() marks a device as unplugged and waits for existing
drm_dev_enter() users to finish before releasing device resources.

Drivers may need the same publish-and-drain sequence for their own
device state without unplugging the device.

Export drm_dev_srcu_synchronize() so drivers can publish their state and
wait for existing DRM SRCU readers to finish.

The Xe driver will use this helper to block device access during PCI
error recovery and permanent wedge isolation.

Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
 drivers/gpu/drm/drm_drv.c | 17 ++++++++++++++++-
 include/drm/drm_drv.h     |  1 +
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index 0cdc606af8d1..0f25103e9037 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -476,6 +476,21 @@ void drm_dev_exit(int idx)
 }
 EXPORT_SYMBOL(drm_dev_exit);
 
+/**
+ * drm_dev_srcu_synchronize - Drain device SRCU readers
+ * @dev: DRM device whose state change is being synchronized
+ *
+ * Wait for existing drm_dev_enter() users to finish.
+ *
+ * The SRCU domain is shared by all DRM devices. Readers for other DRM
+ * devices may also delay this function.
+ */
+void drm_dev_srcu_synchronize(struct drm_device *dev)
+{
+	synchronize_srcu(&drm_unplug_srcu);
+}
+EXPORT_SYMBOL(drm_dev_srcu_synchronize);
+
 /*
  * Mark the device as unplugged and wait for any in-flight drm_dev_enter()
  * critical sections to complete.
@@ -489,7 +504,7 @@ static void drm_dev_synchronize_unplug(struct drm_device *dev)
 	 * finished.
 	 */
 	dev->unplugged = true;
-	synchronize_srcu(&drm_unplug_srcu);
+	drm_dev_srcu_synchronize(dev);
 }
 
 /**
diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
index b23830494ed4..27361fbad6dc 100644
--- a/include/drm/drm_drv.h
+++ b/include/drm/drm_drv.h
@@ -482,6 +482,7 @@ void drm_dev_put(struct drm_device *dev);
 void drm_put_dev(struct drm_device *dev);
 bool drm_dev_enter(struct drm_device *dev, int *idx);
 void drm_dev_exit(int idx);
+void drm_dev_srcu_synchronize(struct drm_device *dev);
 void drm_dev_unplug(struct drm_device *dev);
 int drm_dev_wedged_event(struct drm_device *dev, unsigned long method,
 			 struct drm_wedge_task_info *info);
-- 
2.43.0


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

* [PATCH v2 03/15] drm/xe: Separate AER reset state from device wedging
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
  2026-09-22 10:16 ` [PATCH v2 01/15] drm/xe/irq: Always free requested IRQs on uninstall Arvind Yadav
  2026-09-22 10:16 ` [PATCH v2 02/15] drm/drv: Export drm_dev_srcu_synchronize() Arvind Yadav
@ 2026-09-22 10:16 ` Arvind Yadav
  2026-09-22 10:16 ` [PATCH v2 04/15] drm/xe: Protect device I/O with DRM device SRCU Arvind Yadav
                   ` (14 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Arvind Yadav @ 2026-09-22 10:16 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	rodrigo.vivi

PCI error recovery currently uses xe->wedged.flag to block driver
access. This mixes a temporary AER reset with a permanent device wedge.

If the device wedges during AER recovery, the wedge is not seen as the
first transition. The AER resume callback may then clear the flag and
make the permanently wedged device appear usable again.

Keep the old device blocked while slot reset removes it, and block the
new device until the AER resume callback.

The old AER path took a runtime PM reference to balance
xe_device_wedged_fini(), which drops one when wedged.flag is set. AER no
longer sets that flag, so keeping the Xe-owned reference would leak it.
pcie_do_recovery() holds a PCI-core runtime PM reference across the
error_detected, slot_reset and resume callbacks.

v2:
 - Return -ECANCELED for GuC sends blocked by AER recovery,
   keeping -ENOTRECOVERABLE for permanent wedges. This matches
   the existing cancellation path. (Sashiko)
 - Keep GuC CT cancellation retryable during AER recovery
 - Use one helper for GuC CT cancellation errors

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>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
 drivers/gpu/drm/xe/xe_bo.c            |  2 +-
 drivers/gpu/drm/xe/xe_device.c        |  4 ++--
 drivers/gpu/drm/xe/xe_device.h        | 12 ++++++++++++
 drivers/gpu/drm/xe/xe_guc_ct.c        | 17 ++++++++++++-----
 drivers/gpu/drm/xe/xe_guc_pc.c        | 10 +++++-----
 drivers/gpu/drm/xe/xe_guc_rc.c        |  4 ++--
 drivers/gpu/drm/xe/xe_guc_submit.c    |  8 ++++++--
 drivers/gpu/drm/xe/xe_guc_tlb_inval.c |  8 +++++++-
 drivers/gpu/drm/xe/xe_pci_error.c     | 18 +++++-------------
 drivers/gpu/drm/xe/xe_sriov_pf.c      |  2 +-
 10 files changed, 53 insertions(+), 32 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index f2ab9bf43a86..dee1a39fac13 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -2108,7 +2108,7 @@ static vm_fault_t xe_bo_cpu_fault(struct vm_fault *vmf)
 	int err = 0;
 	int idx;
 
-	if (xe_device_wedged(xe) || !drm_dev_enter(&xe->drm, &idx))
+	if (xe_device_io_blocked(xe) || !drm_dev_enter(&xe->drm, &idx))
 		return ttm_bo_vm_dummy_page(vmf, vmf->vma->vm_page_prot);
 
 	ret = xe_bo_cpu_fault_fastpath(vmf, xe, bo, needs_rpm);
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 205cb4e7f9e8..0e3139aa96d5 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -237,7 +237,7 @@ static long xe_drm_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 	struct xe_device *xe = to_xe_device(file_priv->minor->dev);
 	long ret;
 
-	if (xe_device_wedged(xe))
+	if (xe_device_io_blocked(xe))
 		return -ECANCELED;
 
 	ACQUIRE(xe_pm_runtime_ioctl, pm)(xe);
@@ -255,7 +255,7 @@ static long xe_drm_compat_ioctl(struct file *file, unsigned int cmd, unsigned lo
 	struct xe_device *xe = to_xe_device(file_priv->minor->dev);
 	long ret;
 
-	if (xe_device_wedged(xe))
+	if (xe_device_io_blocked(xe))
 		return -ECANCELED;
 
 	ACQUIRE(xe_pm_runtime_ioctl, pm)(xe);
diff --git a/drivers/gpu/drm/xe/xe_device.h b/drivers/gpu/drm/xe/xe_device.h
index 6d3d6d5eba29..ecd46e2000d2 100644
--- a/drivers/gpu/drm/xe/xe_device.h
+++ b/drivers/gpu/drm/xe/xe_device.h
@@ -212,6 +212,18 @@ static inline bool xe_device_wedged(struct xe_device *xe)
 	return atomic_read(&xe->wedged.flag);
 }
 
+/*
+ * Return true when device access must be blocked either permanently because
+ * the device is wedged or temporarily while PCI error recovery is running.
+ *
+ * Do not use this helper for one-way wedged-device decisions such as DMA
+ * isolation, IRQ resume suppression or recovery-method reporting.
+ */
+static inline bool xe_device_io_blocked(struct xe_device *xe)
+{
+	return xe_device_wedged(xe) || xe_device_is_in_reset(xe);
+}
+
 #ifdef CONFIG_DRM_XE_DEBUG_PAGE_SIZE
 static inline bool xe_debug_page_size_supported(struct xe_device *xe)
 {
diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
index 5c4733da385c..f82f57e6672d 100644
--- a/drivers/gpu/drm/xe/xe_guc_ct.c
+++ b/drivers/gpu/drm/xe/xe_guc_ct.c
@@ -1047,6 +1047,13 @@ static int h2g_write(struct xe_guc_ct *ct, const u32 *action, u32 len,
 	return -EPIPE;
 }
 
+static int guc_ct_cancel_errno(struct xe_guc_ct *ct)
+{
+	/* AER is temporary. Only a permanent wedge is terminal. */
+	return xe_device_wedged(ct_to_xe(ct)) ?
+		-ENOTRECOVERABLE : -ECANCELED;
+}
+
 static int __guc_ct_send_locked(struct xe_guc_ct *ct, const u32 *action,
 				u32 len, u32 g2h_len, u32 num_g2h,
 				struct g2h_fence *g2h_fence, bool defer_flush)
@@ -1062,8 +1069,8 @@ static int __guc_ct_send_locked(struct xe_guc_ct *ct, const u32 *action,
 	xe_gt_assert(gt, g2h_len || !num_g2h);
 	lockdep_assert_held(&ct->lock);
 
-	if (xe_device_wedged(ct_to_xe(ct))) {
-		ret = -ENOTRECOVERABLE;
+	if (xe_device_io_blocked(ct_to_xe(ct))) {
+		ret = guc_ct_cancel_errno(ct);
 		goto out;
 	}
 
@@ -1474,7 +1481,7 @@ static int guc_ct_send_recv(struct xe_guc_ct *ct, const u32 *action, u32 len,
 	if (g2h_fence.fail) {
 		if (g2h_fence.cancel) {
 			xe_gt_dbg(gt, "H2G request %#x canceled!\n", action[0]);
-			ret = xe_device_wedged(ct_to_xe(ct)) ? -ENOTRECOVERABLE : -ECANCELED;
+			ret = guc_ct_cancel_errno(ct);
 			goto unlock;
 		}
 		xe_gt_err(gt, "H2G request %#x failed: error %#x hint %#x\n",
@@ -1813,8 +1820,8 @@ static int g2h_read(struct xe_guc_ct *ct, u32 *msg, bool fast_path)
 	xe_gt_assert(gt, xe_guc_ct_initialized(ct));
 	lockdep_assert_held(&ct->fast_lock);
 
-	if (xe_device_wedged(xe))
-		return -ENOTRECOVERABLE;
+	if (xe_device_io_blocked(xe))
+		return guc_ct_cancel_errno(ct);
 
 	if (ct->state == XE_GUC_CT_STATE_DISABLED)
 		return -ENODEV;
diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c
index 097b075bd89a..9fe397296dc4 100644
--- a/drivers/gpu/drm/xe/xe_guc_pc.c
+++ b/drivers/gpu/drm/xe/xe_guc_pc.c
@@ -188,7 +188,7 @@ static int pc_action_reset(struct xe_guc_pc *pc)
 	int ret;
 
 	ret = xe_guc_ct_send(ct, action, ARRAY_SIZE(action), 0, 0);
-	if (ret && !(xe_device_wedged(pc_to_xe(pc)) && ret == -ECANCELED))
+	if (ret && !(xe_device_io_blocked(pc_to_xe(pc)) && ret == -ECANCELED))
 		xe_gt_err(pc_to_gt(pc), "GuC PC reset failed: %pe\n",
 			  ERR_PTR(ret));
 
@@ -212,7 +212,7 @@ static int pc_action_query_task_state(struct xe_guc_pc *pc)
 
 	/* Blocking here to ensure the results are ready before reading them */
 	ret = xe_guc_ct_send_block(ct, action, ARRAY_SIZE(action));
-	if (ret && !(xe_device_wedged(pc_to_xe(pc)) && ret == -ECANCELED))
+	if (ret && !(xe_device_io_blocked(pc_to_xe(pc)) && ret == -ECANCELED))
 		xe_gt_err(pc_to_gt(pc), "GuC PC query task state failed: %pe\n",
 			  ERR_PTR(ret));
 
@@ -235,7 +235,7 @@ static int pc_action_set_param(struct xe_guc_pc *pc, u8 id, u32 value)
 		return -EAGAIN;
 
 	ret = xe_guc_ct_send(ct, action, ARRAY_SIZE(action), 0, 0);
-	if (ret && !(xe_device_wedged(pc_to_xe(pc)) && ret == -ECANCELED))
+	if (ret && !(xe_device_io_blocked(pc_to_xe(pc)) && ret == -ECANCELED))
 		xe_gt_err(pc_to_gt(pc), "GuC PC set param[%u]=%u failed: %pe\n",
 			  id, value, ERR_PTR(ret));
 
@@ -257,7 +257,7 @@ static int pc_action_unset_param(struct xe_guc_pc *pc, u8 id)
 		return -EAGAIN;
 
 	ret = xe_guc_ct_send(ct, action, ARRAY_SIZE(action), 0, 0);
-	if (ret && !(xe_device_wedged(pc_to_xe(pc)) && ret == -ECANCELED))
+	if (ret && !(xe_device_io_blocked(pc_to_xe(pc)) && ret == -ECANCELED))
 		xe_gt_err(pc_to_gt(pc), "GuC PC unset param failed: %pe",
 			  ERR_PTR(ret));
 
@@ -1357,7 +1357,7 @@ static void xe_guc_pc_fini_hw(void *arg)
 	struct xe_guc_pc *pc = arg;
 	struct xe_device *xe = pc_to_xe(pc);
 
-	if (xe_device_wedged(xe))
+	if (xe_device_io_blocked(xe))
 		return;
 
 	xe_guc_pc_stop(pc);
diff --git a/drivers/gpu/drm/xe/xe_guc_rc.c b/drivers/gpu/drm/xe/xe_guc_rc.c
index 99fa127b261f..eb5ec443f7ee 100644
--- a/drivers/gpu/drm/xe/xe_guc_rc.c
+++ b/drivers/gpu/drm/xe/xe_guc_rc.c
@@ -40,7 +40,7 @@ static int guc_action_setup_gucrc(struct xe_guc *guc, u32 control)
 	int ret;
 
 	ret = xe_guc_ct_send(&guc->ct, action, ARRAY_SIZE(action), 0, 0);
-	if (ret && !(xe_device_wedged(guc_to_xe(guc)) && ret == -ECANCELED))
+	if (ret && !(xe_device_io_blocked(guc_to_xe(guc)) && ret == -ECANCELED))
 		xe_gt_err(guc_to_gt(guc),
 			  "GuC RC setup %s(%u) failed (%pe)\n",
 			   control == GUCRC_HOST_CONTROL ? "HOST_CONTROL" :
@@ -73,7 +73,7 @@ static void xe_guc_rc_fini_hw(void *arg)
 	struct xe_device *xe = guc_to_xe(guc);
 	struct xe_gt *gt = guc_to_gt(guc);
 
-	if (xe_device_wedged(xe))
+	if (xe_device_io_blocked(xe))
 		return;
 
 	CLASS(xe_force_wake, fw_ref)(gt_to_fw(gt), XE_FW_GT);
diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
index f3ba8abfc228..664008d21914 100644
--- a/drivers/gpu/drm/xe/xe_guc_submit.c
+++ b/drivers/gpu/drm/xe/xe_guc_submit.c
@@ -2463,7 +2463,7 @@ static int guc_exec_queue_wait_suspend_done(struct xe_exec_queue *q, bool blocki
 						       WAIT_COND, HZ * 5);
 	}
 
-	if (!blocking && vf_recovery(guc) && !xe_device_wedged(xe))
+	if (!blocking && vf_recovery(guc) && !xe_device_io_blocked(xe))
 		return -EAGAIN;
 
 	if (!ret)
@@ -2721,7 +2721,11 @@ int xe_guc_submit_reset_prepare(struct xe_guc *guc)
 
 void xe_guc_submit_reset_wait(struct xe_guc *guc)
 {
-	wait_event(guc->ct.wq, xe_device_wedged(guc_to_xe(guc)) ||
+	/*
+	 * AER sets in_reset before declaring the GT wedged, which wakes this
+	 * waitqueue.
+	 */
+	wait_event(guc->ct.wq, xe_device_io_blocked(guc_to_xe(guc)) ||
 		   !xe_guc_read_stopped(guc));
 }
 
diff --git a/drivers/gpu/drm/xe/xe_guc_tlb_inval.c b/drivers/gpu/drm/xe/xe_guc_tlb_inval.c
index 111fef781b2a..8daa9c968f4f 100644
--- a/drivers/gpu/drm/xe/xe_guc_tlb_inval.c
+++ b/drivers/gpu/drm/xe/xe_guc_tlb_inval.c
@@ -34,6 +34,9 @@ static int send_tlb_inval(struct xe_guc *guc, const u32 *action, int len)
 
 	xe_gt_assert(gt, action[1]);	/* Seqno */
 
+	if (xe_device_io_blocked(guc_to_xe(guc)))
+		return -ECANCELED;
+
 	xe_gt_stats_incr(gt, XE_GT_STATS_ID_TLB_INVAL, 1);
 	return xe_guc_ct_send(&guc->ct, action, len,
 			      G2H_LEN_DW_TLB_INVALIDATE, 1);
@@ -69,6 +72,9 @@ static int send_tlb_inval_ggtt(struct xe_tlb_inval *tlb_inval, u32 seqno)
 	 * signals waiters.
 	 */
 
+	if (xe_device_io_blocked(xe))
+		return -ECANCELED;
+
 	if (xe_guc_ct_enabled(&guc->ct) && guc->submission_state.enabled) {
 		u32 action[] = {
 			XE_GUC_ACTION_TLB_INVALIDATION,
@@ -77,7 +83,7 @@ static int send_tlb_inval_ggtt(struct xe_tlb_inval *tlb_inval, u32 seqno)
 		};
 
 		return send_tlb_inval(guc, action, ARRAY_SIZE(action));
-	} else if (xe_device_uc_enabled(xe) && !xe_device_wedged(xe)) {
+	} else if (xe_device_uc_enabled(xe)) {
 		struct xe_mmio *mmio = &gt->mmio;
 
 		if (IS_SRIOV_VF(xe))
diff --git a/drivers/gpu/drm/xe/xe_pci_error.c b/drivers/gpu/drm/xe/xe_pci_error.c
index 79ce0c671549..4b09e74af92e 100644
--- a/drivers/gpu/drm/xe/xe_pci_error.c
+++ b/drivers/gpu/drm/xe/xe_pci_error.c
@@ -9,7 +9,6 @@
 #include "xe_gt.h"
 #include "xe_log.h"
 #include "xe_pci.h"
-#include "xe_pm.h"
 #include "xe_printk.h"
 #include "xe_ras.h"
 #include "xe_survivability_mode.h"
@@ -20,14 +19,7 @@ static void prepare_device_for_reset(struct pci_dev *pdev)
 	struct xe_gt *gt;
 	u8 id;
 
-	/*
-	 * Wedge the device to prevent userspace access but do not send the uevent.
-	 * xe_device_wedged_fini() releases runtime pm if wedged flag is set, so acquire a runtime
-	 * pm reference to avoid underflow.
-	 */
-	if (!atomic_xchg(&xe->wedged.flag, 1))
-		xe_pm_runtime_get_noresume(xe);
-
+	/* Block device access until PCI error recovery completes. */
 	xe_device_set_in_reset(xe);
 
 	for_each_gt(gt, xe, id)
@@ -116,7 +108,6 @@ static pci_ers_result_t xe_pci_error_slot_reset(struct pci_dev *pdev)
 	 * TODO: optimize by re-initializing only the hardware state and re-creating
 	 * kernel BOs.
 	 */
-	xe_device_clear_in_reset(xe);
 	pdev->driver->remove(pdev);
 	devres_release_group(&pdev->dev, xe->devres_group);
 
@@ -125,8 +116,8 @@ static pci_ers_result_t xe_pci_error_slot_reset(struct pci_dev *pdev)
 
 	xe = pdev_to_xe_device(pdev);
 
-	/* Wedge the device to prevent I/O operations till the resume callback */
-	atomic_set(&xe->wedged.flag, 1);
+	/* Block the new instance until the resume callback. */
+	xe_device_set_in_reset(xe);
 
 	return PCI_ERS_RESULT_RECOVERED;
 }
@@ -137,7 +128,8 @@ static void xe_pci_error_resume(struct pci_dev *pdev)
 
 	xe_info(xe, "PCI error: resume\n");
 
-	atomic_set(&xe->wedged.flag, 0);
+	/* Resume I/O operations. */
+	xe_device_clear_in_reset(xe);
 }
 
 const struct pci_error_handlers xe_pci_error_handlers = {
diff --git a/drivers/gpu/drm/xe/xe_sriov_pf.c b/drivers/gpu/drm/xe/xe_sriov_pf.c
index 33bd754d138f..568b7ed7c380 100644
--- a/drivers/gpu/drm/xe/xe_sriov_pf.c
+++ b/drivers/gpu/drm/xe/xe_sriov_pf.c
@@ -157,7 +157,7 @@ int xe_sriov_pf_wait_ready(struct xe_device *xe)
 	unsigned int id;
 	int err;
 
-	if (xe_device_wedged(xe))
+	if (xe_device_io_blocked(xe))
 		return -ECANCELED;
 
 	for_each_gt(gt, xe, id) {
-- 
2.43.0


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

* [PATCH v2 04/15] drm/xe: Protect device I/O with DRM device SRCU
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
                   ` (2 preceding siblings ...)
  2026-09-22 10:16 ` [PATCH v2 03/15] drm/xe: Separate AER reset state from device wedging Arvind Yadav
@ 2026-09-22 10:16 ` Arvind Yadav
  2026-09-22 10:28   ` sashiko-bot
  2026-09-22 10:16 ` [PATCH v2 05/15] drm/xe: Drop queued page faults when device I/O is blocked Arvind Yadav
                   ` (13 subsequent siblings)
  17 siblings, 1 reply; 23+ messages in thread
From: Arvind Yadav @ 2026-09-22 10:16 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	rodrigo.vivi

A device state check alone cannot stop reset or wedging from racing with
a caller that has already passed the check.

Add xe_device_io_get() and xe_device_io_put() wrappers around
drm_dev_enter() and drm_dev_exit(). Check the device state inside the
DRM SRCU critical section so new access is rejected after PCI recovery
starts or the device becomes wedged.

After blocking new access, PCI recovery wedges the GTs to signal pending
fences and drains existing readers before disabling the PCI device.

Permanent wedge isolation uses the same DRM SRCU domain to drain active
hardware users before stopping interrupts and DMA.

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>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Assisted-by: Claude:claude-opus-4-8
Suggested-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
 drivers/gpu/drm/xe/xe_bo.c            |  6 ++---
 drivers/gpu/drm/xe/xe_device.c        | 33 +++++++++++++++++++--------
 drivers/gpu/drm/xe/xe_device.h        | 29 +++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_guc_ct.c        |  9 +++++++-
 drivers/gpu/drm/xe/xe_guc_tlb_inval.c | 13 +++++++----
 drivers/gpu/drm/xe/xe_pci_error.c     |  6 +++++
 6 files changed, 78 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index dee1a39fac13..b39b07b55f64 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -2106,9 +2106,9 @@ static vm_fault_t xe_bo_cpu_fault(struct vm_fault *vmf)
 	struct drm_exec exec;
 	vm_fault_t ret;
 	int err = 0;
-	int idx;
+	int io_idx;
 
-	if (xe_device_io_blocked(xe) || !drm_dev_enter(&xe->drm, &idx))
+	if (xe_device_io_get(xe, &io_idx))
 		return ttm_bo_vm_dummy_page(vmf, vmf->vma->vm_page_prot);
 
 	ret = xe_bo_cpu_fault_fastpath(vmf, xe, bo, needs_rpm);
@@ -2195,7 +2195,7 @@ static vm_fault_t xe_bo_cpu_fault(struct vm_fault *vmf)
 	if (retry_after_wait)
 		xe_bo_put(bo);
 out:
-	drm_dev_exit(idx);
+	xe_device_io_put(io_idx);
 
 	return ret;
 }
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 0e3139aa96d5..9a940ba8dc1c 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -235,16 +235,20 @@ static long xe_drm_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 {
 	struct drm_file *file_priv = file->private_data;
 	struct xe_device *xe = to_xe_device(file_priv->minor->dev);
+	int io_idx;
 	long ret;
 
-	if (xe_device_io_blocked(xe))
-		return -ECANCELED;
+	ret = xe_device_io_get(xe, &io_idx);
+	if (ret)
+		return ret;
 
-	ACQUIRE(xe_pm_runtime_ioctl, pm)(xe);
-	ret = ACQUIRE_ERR(xe_pm_runtime_ioctl, &pm);
-	if (ret >= 0)
+	scoped_cond_guard(xe_pm_runtime_ioctl,
+			  ret = ACQUIRE_ERR(xe_pm_runtime_ioctl, &scope),
+			  xe) {
 		ret = drm_ioctl(file, cmd, arg);
+	}
 
+	xe_device_io_put(io_idx);
 	return ret;
 }
 
@@ -253,16 +257,20 @@ static long xe_drm_compat_ioctl(struct file *file, unsigned int cmd, unsigned lo
 {
 	struct drm_file *file_priv = file->private_data;
 	struct xe_device *xe = to_xe_device(file_priv->minor->dev);
+	int io_idx;
 	long ret;
 
-	if (xe_device_io_blocked(xe))
-		return -ECANCELED;
+	ret = xe_device_io_get(xe, &io_idx);
+	if (ret)
+		return ret;
 
-	ACQUIRE(xe_pm_runtime_ioctl, pm)(xe);
-	ret = ACQUIRE_ERR(xe_pm_runtime_ioctl, &pm);
-	if (ret >= 0)
+	scoped_cond_guard(xe_pm_runtime_ioctl,
+			  ret = ACQUIRE_ERR(xe_pm_runtime_ioctl, &scope),
+			  xe) {
 		ret = drm_compat_ioctl(file, cmd, arg);
+	}
 
+	xe_device_io_put(io_idx);
 	return ret;
 }
 #else
@@ -432,6 +440,11 @@ struct xe_device *xe_device_create(struct pci_dev *pdev)
 }
 ALLOW_ERROR_INJECTION(xe_device_create, ERRNO); /* See xe_pci_probe() */
 
+void xe_device_io_drain(struct xe_device *xe)
+{
+	drm_dev_srcu_synchronize(&xe->drm);
+}
+
 static void xe_device_parse_modparam(struct xe_device *xe)
 {
 	xe->atomic_svm_timeslice_ms = 5;
diff --git a/drivers/gpu/drm/xe/xe_device.h b/drivers/gpu/drm/xe/xe_device.h
index ecd46e2000d2..36b8da20345a 100644
--- a/drivers/gpu/drm/xe/xe_device.h
+++ b/drivers/gpu/drm/xe/xe_device.h
@@ -6,6 +6,7 @@
 #ifndef _XE_DEVICE_H_
 #define _XE_DEVICE_H_
 
+#include <drm/drm_drv.h>
 #include <drm/drm_util.h>
 
 #include "xe_device_types.h"
@@ -224,6 +225,34 @@ static inline bool xe_device_io_blocked(struct xe_device *xe)
 	return xe_device_wedged(xe) || xe_device_is_in_reset(xe);
 }
 
+/**
+ * xe_device_io_get - Enter a device access critical section
+ * @xe: Xe device
+ * @idx: SRCU index returned on success
+ *
+ * Return: 0 on success, -ENODEV after unplug, or -ECANCELED when
+ * device I/O is blocked.
+ */
+static inline int xe_device_io_get(struct xe_device *xe, int *idx)
+{
+	if (!drm_dev_enter(&xe->drm, idx))
+		return -ENODEV;
+
+	if (xe_device_io_blocked(xe)) {
+		drm_dev_exit(*idx);
+		return -ECANCELED;
+	}
+
+	return 0;
+}
+
+static inline void xe_device_io_put(int idx)
+{
+	drm_dev_exit(idx);
+}
+
+void xe_device_io_drain(struct xe_device *xe);
+
 #ifdef CONFIG_DRM_XE_DEBUG_PAGE_SIZE
 static inline bool xe_debug_page_size_supported(struct xe_device *xe)
 {
diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
index f82f57e6672d..5ec95e9551cc 100644
--- a/drivers/gpu/drm/xe/xe_guc_ct.c
+++ b/drivers/gpu/drm/xe/xe_guc_ct.c
@@ -1059,6 +1059,8 @@ static int __guc_ct_send_locked(struct xe_guc_ct *ct, const u32 *action,
 				struct g2h_fence *g2h_fence, bool defer_flush)
 {
 	struct xe_gt *gt = ct_to_gt(ct);
+	bool io_held = false;
+	int io_idx;
 	u16 seqno;
 	int ret;
 
@@ -1069,11 +1071,13 @@ static int __guc_ct_send_locked(struct xe_guc_ct *ct, const u32 *action,
 	xe_gt_assert(gt, g2h_len || !num_g2h);
 	lockdep_assert_held(&ct->lock);
 
-	if (xe_device_io_blocked(ct_to_xe(ct))) {
+	if (xe_device_io_get(ct_to_xe(ct), &io_idx)) {
 		ret = guc_ct_cancel_errno(ct);
 		goto out;
 	}
 
+	io_held = true;
+
 	if (unlikely(ct->ctbs.h2g.info.broken)) {
 		ret = -EPIPE;
 		goto out;
@@ -1130,6 +1134,9 @@ static int __guc_ct_send_locked(struct xe_guc_ct *ct, const u32 *action,
 	if (g2h_len)
 		spin_unlock_irq(&ct->fast_lock);
 out:
+	if (io_held)
+		xe_device_io_put(io_idx);
+
 	return ret;
 }
 
diff --git a/drivers/gpu/drm/xe/xe_guc_tlb_inval.c b/drivers/gpu/drm/xe/xe_guc_tlb_inval.c
index 8daa9c968f4f..7a190e7cdb56 100644
--- a/drivers/gpu/drm/xe/xe_guc_tlb_inval.c
+++ b/drivers/gpu/drm/xe/xe_guc_tlb_inval.c
@@ -66,15 +66,13 @@ static int send_tlb_inval_ggtt(struct xe_tlb_inval *tlb_inval, u32 seqno)
 	struct xe_guc *guc = tlb_inval->private;
 	struct xe_gt *gt = guc_to_gt(guc);
 	struct xe_device *xe = guc_to_xe(guc);
+	int io_idx;
 
 	/*
 	 * Returning -ECANCELED in this function is squashed at the caller and
 	 * signals waiters.
 	 */
 
-	if (xe_device_io_blocked(xe))
-		return -ECANCELED;
-
 	if (xe_guc_ct_enabled(&guc->ct) && guc->submission_state.enabled) {
 		u32 action[] = {
 			XE_GUC_ACTION_TLB_INVALIDATION,
@@ -86,8 +84,13 @@ static int send_tlb_inval_ggtt(struct xe_tlb_inval *tlb_inval, u32 seqno)
 	} else if (xe_device_uc_enabled(xe)) {
 		struct xe_mmio *mmio = &gt->mmio;
 
-		if (IS_SRIOV_VF(xe))
+		if (xe_device_io_get(xe, &io_idx))
+			return -ECANCELED;
+
+		if (IS_SRIOV_VF(xe)) {
+			xe_device_io_put(io_idx);
 			return -ECANCELED;
+		}
 
 		CLASS(xe_force_wake, fw_ref)(gt_to_fw(gt), XE_FW_GT);
 		if (xe->info.platform == XE_PVC || GRAPHICS_VER(xe) >= 20) {
@@ -99,6 +102,8 @@ static int send_tlb_inval_ggtt(struct xe_tlb_inval *tlb_inval, u32 seqno)
 			xe_mmio_write32(mmio, GUC_TLB_INV_CR,
 					GUC_TLB_INV_CR_INVALIDATE);
 		}
+
+		xe_device_io_put(io_idx);
 	}
 
 	return -ECANCELED;
diff --git a/drivers/gpu/drm/xe/xe_pci_error.c b/drivers/gpu/drm/xe/xe_pci_error.c
index 4b09e74af92e..3e06f504f1b3 100644
--- a/drivers/gpu/drm/xe/xe_pci_error.c
+++ b/drivers/gpu/drm/xe/xe_pci_error.c
@@ -25,6 +25,12 @@ static void prepare_device_for_reset(struct pci_dev *pdev)
 	for_each_gt(gt, xe, id)
 		xe_gt_declare_wedged(gt);
 
+	/*
+	 * GT wedging signals pending fences. Existing hardware users can now
+	 * finish without blocking reset.
+	 */
+	xe_device_io_drain(xe);
+
 	pci_disable_device(pdev);
 }
 
-- 
2.43.0


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

* [PATCH v2 05/15] drm/xe: Drop queued page faults when device I/O is blocked
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
                   ` (3 preceding siblings ...)
  2026-09-22 10:16 ` [PATCH v2 04/15] drm/xe: Protect device I/O with DRM device SRCU Arvind Yadav
@ 2026-09-22 10:16 ` Arvind Yadav
  2026-09-22 10:16 ` [PATCH v2 06/15] drm/xe: Stop VM work " Arvind Yadav
                   ` (12 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Arvind Yadav @ 2026-09-22 10:16 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	rodrigo.vivi

Page-fault work may still be queued when PCI error recovery starts or
the device becomes permanently wedged. Servicing these faults can migrate
memory or update page tables after device I/O has been blocked.

Check the device state while popping queued faults. Release queued
entries instead of passing them to a worker when device I/O is blocked.

Hold the device I/O gate across fault servicing so wedge isolation waits
for faults already in progress. Faults that start after the block are
rejected at the gate.

v2:
- Move the blocked-device check into the queue pop path. (Matt)
- Drop queued faults while holding the queue lock. (Matt)
- Remove weak checks around fault servicing. (Matt)
- Hold the device I/O gate across fault servicing. (Thomas)

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>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
 drivers/gpu/drm/xe/xe_pagefault.c | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_pagefault.c b/drivers/gpu/drm/xe/xe_pagefault.c
index c4aafdbdb518..fdb77291a30f 100644
--- a/drivers/gpu/drm/xe/xe_pagefault.c
+++ b/drivers/gpu/drm/xe/xe_pagefault.c
@@ -267,8 +267,10 @@ static struct xe_vm *xe_pagefault_asid_to_vm(struct xe_pagefault *pf, u32 asid)
 static int xe_pagefault_service(struct xe_pagefault *pf)
 {
 	struct xe_gt *gt = pf->gt;
+	struct xe_device *xe = gt_to_xe(gt);
 	struct xe_vm *vm;
 	struct xe_vma *vma = NULL;
+	int io_idx;
 	int err;
 	bool atomic;
 	u32 asid = FIELD_GET(XE_PAGEFAULT_ASID_MASK, pf->consumer.id);
@@ -277,9 +279,15 @@ static int xe_pagefault_service(struct xe_pagefault *pf)
 	if (pf->consumer.fault_type_level == XE_PAGEFAULT_TYPE_LEVEL_NACK)
 		return -EFAULT;
 
+	err = xe_device_io_get(xe, &io_idx);
+	if (err)
+		return err;
+
 	vm = xe_pagefault_asid_to_vm(pf, asid);
-	if (IS_ERR(vm))
-		return PTR_ERR(vm);
+	if (IS_ERR(vm)) {
+		err = PTR_ERR(vm);
+		goto out_io;
+	}
 
 	down_read(&vm->lock);
 
@@ -315,6 +323,8 @@ static int xe_pagefault_service(struct xe_pagefault *pf)
 	up_read(&vm->lock);
 	xe_vm_put(vm);
 
+out_io:
+	xe_device_io_put(io_idx);
 	return err;
 }
 
@@ -504,6 +514,12 @@ static bool xe_pagefault_queue_pop(struct xe_pagefault_queue *pf_queue,
 		    XE_PAGEFAULT_ALLOC_STATE_QUEUED)
 			continue;
 
+		if (xe_device_io_blocked(xe)) {
+			lpf->consumer.alloc_state =
+				XE_PAGEFAULT_ALLOC_STATE_FREE;
+			continue;
+		}
+
 		if (xe_pagefault_try_chain(pf_queue, lpf))
 			continue;
 
-- 
2.43.0


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

* [PATCH v2 06/15] drm/xe: Stop VM work when device I/O is blocked
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
                   ` (4 preceding siblings ...)
  2026-09-22 10:16 ` [PATCH v2 05/15] drm/xe: Drop queued page faults when device I/O is blocked Arvind Yadav
@ 2026-09-22 10:16 ` Arvind Yadav
  2026-09-22 10:16 ` [PATCH v2 07/15] drm/xe: Send wedged notification from a worker Arvind Yadav
                   ` (11 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Arvind Yadav @ 2026-09-22 10:16 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	rodrigo.vivi

SVM fault handling and VM rebind work may still run when PCI error
recovery starts or the device becomes permanently wedged. This work can
validate BOs, update page tables or submit migration work after device
I/O has been blocked.

Stop SVM fault handling, pagemap population, device-memory copies and
preempt rebind work when device I/O is blocked.

v2:
 - Protect VM and SVM hardware access with the common SRCU gate (Thomas)
 - Hold the gate across page-fault, migration and rebind work.
 - Remove the racy device state checks (Matt)

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>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>

 drm/xe: Stop VM work when device I/O is blocked
---
 drivers/gpu/drm/xe/xe_svm.c | 29 +++++++++++++++++++++++++----
 drivers/gpu/drm/xe/xe_vm.c  | 11 +++++++++--
 2 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_svm.c b/drivers/gpu/drm/xe/xe_svm.c
index f39e647512ad..4788216546ff 100644
--- a/drivers/gpu/drm/xe/xe_svm.c
+++ b/drivers/gpu/drm/xe/xe_svm.c
@@ -11,6 +11,7 @@
 #include <drm/drm_pagemap_util.h>
 
 #include "xe_bo.h"
+#include "xe_device.h"
 #include "xe_exec_queue_types.h"
 #include "xe_gt_stats.h"
 #include "xe_log.h"
@@ -242,6 +243,7 @@ static void xe_svm_invalidate(struct drm_gpusvm *gpusvm,
 	ktime_t start = xe_gt_stats_ktime_get();
 	u64 adj_start = mmu_range->start, adj_end = mmu_range->end;
 	u8 tile_mask = 0, id;
+	int io_idx;
 	long err;
 
 	xe_svm_assert_in_notifier(vm);
@@ -267,6 +269,9 @@ static void xe_svm_invalidate(struct drm_gpusvm *gpusvm,
 	if (xe_vm_is_closed(vm))
 		goto range_notifier_event_end;
 
+	if (xe_device_io_get(xe, &io_idx))
+		goto range_notifier_event_end;
+
 	/*
 	 * XXX: Less than ideal to always wait on VM's resv slots if an
 	 * invalidation is not required. Could walk range list twice to figure
@@ -283,7 +288,7 @@ static void xe_svm_invalidate(struct drm_gpusvm *gpusvm,
 							       &adj_start,
 							       &adj_end);
 	if (!tile_mask)
-		goto range_notifier_event_end;
+		goto out_io;
 
 	xe_device_wmb(xe);
 
@@ -292,6 +297,9 @@ static void xe_svm_invalidate(struct drm_gpusvm *gpusvm,
 	if (!WARN_ON_ONCE(err))
 		xe_tlb_inval_batch_wait(&batch);
 
+out_io:
+	xe_device_io_put(io_idx);
+
 range_notifier_event_end:
 	r = first;
 	drm_gpusvm_for_each_range(r, notifier, adj_start, adj_end)
@@ -599,6 +607,8 @@ static int xe_svm_copy(struct page **pages,
 #define XE_VRAM_ADDR_INVALID	~0x0ull
 	u64 vram_addr = XE_VRAM_ADDR_INVALID;
 	int err = 0, pos = 0;
+	bool io_held = false;
+	int io_idx;
 	bool sram = dir == XE_SVM_COPY_TO_SRAM;
 	ktime_t start = xe_gt_stats_ktime_get();
 
@@ -629,6 +639,12 @@ static int xe_svm_copy(struct page **pages,
 			vr = xe_page_to_vr(spage);
 			gt = xe_migrate_exec_queue(vr->migrate)->gt;
 			xe = vr->xe;
+
+			err = xe_device_io_get(xe, &io_idx);
+			if (err)
+				goto err_out;
+
+			io_held = true;
 		}
 		XE_WARN_ON(spage && xe_page_to_vr(spage) != vr);
 
@@ -749,6 +765,9 @@ static int xe_svm_copy(struct page **pages,
 	if (pre_migrate_fence)
 		dma_fence_wait(pre_migrate_fence, false);
 
+	if (io_held)
+		xe_device_io_put(io_idx);
+
 	/*
 	 * XXX: We can't derive the GT here (or anywhere in this functions, but
 	 * compute always uses the primary GT so accumulate stats on the likely
@@ -1123,8 +1142,9 @@ static int xe_drm_pagemap_populate_mm(struct drm_pagemap *dpagemap,
 	struct xe_bo *bo;
 	int err = 0, idx;
 
-	if (!drm_dev_enter(&xe->drm, &idx))
-		return -ENODEV;
+	err = xe_device_io_get(xe, &idx);
+	if (err)
+		return err;
 
 	xe_pm_runtime_get(xe);
 
@@ -1166,7 +1186,8 @@ static int xe_drm_pagemap_populate_mm(struct drm_pagemap *dpagemap,
 		xe_bo_put(bo);
 	}
 	xe_pm_runtime_put(xe);
-	drm_dev_exit(idx);
+
+	xe_device_io_put(idx);
 
 	return err;
 }
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index 17dc4debe7c1..565d2ce91829 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -483,6 +483,7 @@ static void preempt_rebind_work_func(struct work_struct *w)
 	unsigned int fence_count = 0;
 	LIST_HEAD(preempt_fences);
 	int err = 0;
+	int io_idx;
 	long wait;
 	int __maybe_unused tries = 0;
 
@@ -516,6 +517,12 @@ static void preempt_rebind_work_func(struct work_struct *w)
 	if (err)
 		goto out_unlock_outer;
 
+	if (xe_device_io_get(vm->xe, &io_idx)) {
+		xe_validation_ctx_fini(&ctx);
+		err = 0;
+		goto out_unlock_outer;
+	}
+
 	drm_exec_until_all_locked(&exec) {
 		bool done = false;
 
@@ -523,8 +530,7 @@ static void preempt_rebind_work_func(struct work_struct *w)
 		drm_exec_retry_on_contention(&exec);
 		xe_validation_retry_on_oom(&ctx, &err);
 		if (err || done) {
-			xe_validation_ctx_fini(&ctx);
-			goto out_unlock_outer;
+			goto out_unlock;
 		}
 	}
 
@@ -572,6 +578,7 @@ static void preempt_rebind_work_func(struct work_struct *w)
 
 out_unlock:
 	xe_validation_ctx_fini(&ctx);
+	xe_device_io_put(io_idx);
 out_unlock_outer:
 	if (err == -EAGAIN) {
 		trace_xe_vm_rebind_worker_retry(vm);
-- 
2.43.0


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

* [PATCH v2 07/15] drm/xe: Send wedged notification from a worker
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
                   ` (5 preceding siblings ...)
  2026-09-22 10:16 ` [PATCH v2 06/15] drm/xe: Stop VM work " Arvind Yadav
@ 2026-09-22 10:16 ` Arvind Yadav
  2026-09-22 10:27   ` sashiko-bot
  2026-09-22 10:16 ` [PATCH v2 08/15] drm/xe: Reuse one dummy page per BO after wedge Arvind Yadav
                   ` (10 subsequent siblings)
  17 siblings, 1 reply; 23+ messages in thread
From: Arvind Yadav @ 2026-09-22 10:16 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	rodrigo.vivi

Move the wedged event to a device worker. This provides a sleepable
context for later isolation work and allows it to complete before
userspace is notified.

Keep one-time wedge bookkeeping on the first transition, but rescan the
GT state on later declarations because the recovery method may change.
For example, survivability handling can add VENDOR recovery after an
earlier REBIND notification.

Track the last reported method and resample it after each event so an
update is not lost when the worker is already running.

Drain the worker before probe cleanup, remove, shutdown and IRQ teardown
to prevent it from racing device teardown.

v2:
 - Update reported_method only when drm_dev_wedged_event() succeeds.
   (Andi)
 - Requeue only if the recovery method changed, avoiding repeated
   retries when notification fails.
 - Make wedge worker shutdown one-shot.

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>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
 drivers/gpu/drm/xe/xe_device.c       | 83 +++++++++++++++++++++++-----
 drivers/gpu/drm/xe/xe_device_types.h |  6 ++
 2 files changed, 75 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 9a940ba8dc1c..045b5844e5c3 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -84,6 +84,8 @@
 #include <generated/xe_device_wa_oob.h>
 #include <generated/xe_wa_oob.h>
 
+static void xe_device_wedged_work(struct work_struct *work);
+
 static int xe_file_open(struct drm_device *dev, struct drm_file *file)
 {
 	struct xe_device *xe = to_xe_device(dev);
@@ -466,6 +468,9 @@ int xe_device_init_early(struct xe_device *xe)
 {
 	int err;
 
+	INIT_WORK(&xe->wedged.work, xe_device_wedged_work);
+	xe->wedged.reported_method = ~0UL;
+
 	err = ttm_device_init(&xe->ttm, &xe_ttm_funcs, xe->drm.dev,
 			      xe->drm.anon_inode->i_mapping,
 			      xe->drm.vma_offset_manager,
@@ -884,6 +889,40 @@ static int xe_debug_page_size_alloc_ctrl_init(struct xe_device *xe)
 }
 #endif
 
+static void xe_device_wedged_work(struct work_struct *work)
+{
+	struct xe_device *xe =
+			container_of(work, struct xe_device, wedged.work);
+	unsigned long method;
+	int err;
+
+	/* Report at most one recovery method per worker invocation. */
+	method = READ_ONCE(xe->wedged.method);
+	if (method != READ_ONCE(xe->wedged.reported_method)) {
+		err = drm_dev_wedged_event(&xe->drm, method, NULL);
+		if (!err)
+			WRITE_ONCE(xe->wedged.reported_method, method);
+	}
+
+	/*
+	 * Queue another pass if the method changed while the event was sent.
+	 * This preserves the update without keeping this worker in a loop.
+	 */
+	if (!atomic_read(&xe->wedged.stopping) &&
+	    READ_ONCE(xe->wedged.method) != method)
+		queue_work(xe->unordered_wq, &xe->wedged.work);
+}
+
+static void xe_device_wedged_disable(void *arg)
+{
+	struct xe_device *xe = arg;
+
+	if (atomic_xchg(&xe->wedged.stopping, 1))
+		return;
+
+	disable_work_sync(&xe->wedged.work);
+}
+
 int xe_device_probe(struct xe_device *xe)
 {
 	struct xe_tile *tile;
@@ -996,6 +1035,12 @@ int xe_device_probe(struct xe_device *xe)
 	if (err)
 		return err;
 
+	/* Drain wedge work before irq_uninstall() during devres unwind. */
+	err = devm_add_action_or_reset(xe->drm.dev,
+				       xe_device_wedged_disable, xe);
+	if (err)
+		return err;
+
 	for_each_gt(gt, xe, id) {
 		err = xe_gt_init(gt);
 		if (err)
@@ -1105,6 +1150,7 @@ int xe_device_probe(struct xe_device *xe)
 	return 0;
 
 err_unregister_display:
+	xe_device_wedged_disable(xe);
 	xe_display_unregister(xe);
 	drm_dev_unregister(&xe->drm);
 
@@ -1113,6 +1159,8 @@ int xe_device_probe(struct xe_device *xe)
 
 void xe_device_remove(struct xe_device *xe)
 {
+	xe_device_wedged_disable(xe);
+
 	xe_display_unregister(xe);
 
 	drm_dev_unplug(&xe->drm);
@@ -1127,6 +1175,8 @@ void xe_device_shutdown(struct xe_device *xe)
 
 	drm_dbg(&xe->drm, "Shutting down device\n");
 
+	xe_device_wedged_disable(xe);
+
 	xe_display_shutdown(xe);
 
 	xe_irq_suspend(xe);
@@ -1379,7 +1429,7 @@ u64 xe_device_uncanonicalize_addr(struct xe_device *xe, u64 address)
  */
 void xe_device_set_wedged_method(struct xe_device *xe, unsigned long method)
 {
-	xe->wedged.method = method;
+	WRITE_ONCE(xe->wedged.method, method);
 }
 
 #define WEDGED_URL	"https://docs.kernel.org/gpu/drm-uapi.html#device-wedging"
@@ -1406,6 +1456,7 @@ void xe_device_set_wedged_method(struct xe_device *xe, unsigned long method)
 void xe_device_declare_wedged(struct xe_device *xe)
 {
 	struct xe_gt *gt;
+	bool first;
 	u8 id;
 
 	if (xe->wedged.mode == XE_WEDGED_MODE_NEVER) {
@@ -1413,7 +1464,8 @@ void xe_device_declare_wedged(struct xe_device *xe)
 		return;
 	}
 
-	if (!atomic_xchg(&xe->wedged.flag, 1)) {
+	first = !atomic_xchg(&xe->wedged.flag, 1);
+	if (first) {
 		xe->needs_flr_on_fini = true;
 		xe_pm_runtime_get_noresume(xe);
 
@@ -1422,12 +1474,7 @@ void xe_device_declare_wedged(struct xe_device *xe)
 			    "For recovery procedure, refer to %s\n"
 			    "Please file a _new_ bug report at %s\n",
 			    WEDGED_URL, XE_BUG_URL);
-	}
-
-	for_each_gt(gt, xe, id)
-		xe_gt_declare_wedged(gt);
 
-	if (xe_device_wedged(xe)) {
 		/*
 		 * XE_WEDGED_MODE_UPON_ANY_HANG_NO_RESET is intended for debugging
 		 * hangs, so wedge the device with 'none' recovery method and have
@@ -1435,14 +1482,22 @@ void xe_device_declare_wedged(struct xe_device *xe)
 		 */
 		if (xe->wedged.mode == XE_WEDGED_MODE_UPON_ANY_HANG_NO_RESET)
 			xe_device_set_wedged_method(xe, DRM_WEDGE_RECOVERY_NONE);
-		/* If no wedge recovery method is set, use default */
-		else if (!xe->wedged.method)
-			xe_device_set_wedged_method(xe, DRM_WEDGE_RECOVERY_REBIND |
-						    DRM_WEDGE_RECOVERY_BUS_RESET);
-
-		/* Notify userspace of wedged device */
-		drm_dev_wedged_event(&xe->drm, xe->wedged.method, NULL);
 	}
+
+	/* Re-scan GT submission state on every declaration. */
+	for_each_gt(gt, xe, id)
+		xe_gt_declare_wedged(gt);
+
+	/* If no wedge recovery method is set, use default */
+	if (!READ_ONCE(xe->wedged.method))
+		xe_device_set_wedged_method(xe, DRM_WEDGE_RECOVERY_REBIND |
+					    DRM_WEDGE_RECOVERY_BUS_RESET);
+
+	if (!atomic_read(&xe->wedged.stopping) &&
+	    (first ||
+	     READ_ONCE(xe->wedged.method) !=
+	     READ_ONCE(xe->wedged.reported_method)))
+		queue_work(xe->unordered_wq, &xe->wedged.work);
 }
 
 /**
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index bb4234f00453..df4e274bc719 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -554,6 +554,12 @@ struct xe_device {
 		unsigned long method;
 		/** @wedged.inconsistent_reset: Inconsistent reset policy state between GTs */
 		bool inconsistent_reset;
+		/** @wedged.work: Runs sleepable wedge handling */
+		struct work_struct work;
+		/** @wedged.stopping: Blocks worker requeue and repeated disable */
+		atomic_t stopping;
+		/** @wedged.reported_method: Last recovery method reported to userspace */
+		unsigned long reported_method;
 	} wedged;
 
 	/** @devres_group: devres group */
-- 
2.43.0


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

* [PATCH v2 08/15] drm/xe: Reuse one dummy page per BO after wedge
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
                   ` (6 preceding siblings ...)
  2026-09-22 10:16 ` [PATCH v2 07/15] drm/xe: Send wedged notification from a worker Arvind Yadav
@ 2026-09-22 10:16 ` Arvind Yadav
  2026-09-22 10:16 ` [PATCH v2 09/15] drm/xe: Invalidate existing VRAM mappings on wedge Arvind Yadav
                   ` (9 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Arvind Yadav @ 2026-09-22 10:16 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	rodrigo.vivi

ttm_bo_vm_dummy_page() allocates a page and a managed cleanup action on
every call. These allocations remain until the DRM device is released,
so repeated fallback faults can retain many pages.

Keep one zeroed dummy page in each Xe BO and reuse it when device I/O is
blocked or the device is unplugged. Use cmpxchg() to handle concurrent
faults and free the page when the BO is destroyed.

A per-BO page also prevents writable mappings from different BOs from
sharing data.

Map only the faulting address and return the insertion result directly.
Other addresses fault on demand and reuse the same dummy page.
This avoids walking a potentially large VMA during a single fault.

v2:
 - Drop whole-VMA prefaulting and map only the faulting address to avoid
   long fault-handler runtimes on large mappings. (Sashiko)

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>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
 drivers/gpu/drm/xe/xe_bo.c       | 33 +++++++++++++++++++++++++++++++-
 drivers/gpu/drm/xe/xe_bo_types.h |  4 ++++
 2 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index b39b07b55f64..7902ce3fe012 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -1890,6 +1890,9 @@ static void xe_ttm_bo_destroy(struct ttm_buffer_object *ttm_bo)
 		list_del(&bo->vram_userfault_link);
 	mutex_unlock(&xe->mem_access.vram_userfault.lock);
 
+	if (bo->wedged_dummy_page)
+		__free_page(bo->wedged_dummy_page);
+
 	kfree(bo);
 }
 
@@ -2094,6 +2097,32 @@ static vm_fault_t xe_bo_cpu_fault_fastpath(struct vm_fault *vmf, struct xe_devic
 	return ret;
 }
 
+static vm_fault_t xe_bo_vm_dummy_page(struct vm_fault *vmf, struct xe_bo *bo)
+{
+	struct vm_area_struct *vma = vmf->vma;
+	struct page *page, *old;
+	unsigned long pfn;
+
+	page = READ_ONCE(bo->wedged_dummy_page);
+	if (!page) {
+		page = alloc_page(GFP_KERNEL | __GFP_ZERO);
+		if (!page)
+			return VM_FAULT_OOM;
+
+		old = cmpxchg(&bo->wedged_dummy_page, NULL, page);
+		if (old) {
+			__free_page(page);
+			page = old;
+		}
+	}
+
+	pfn = page_to_pfn(page);
+
+	/* Map other addresses on demand instead of walking the whole VMA. */
+	return vmf_insert_pfn_prot(vma, vmf->address, pfn,
+				   vma->vm_page_prot);
+}
+
 static vm_fault_t xe_bo_cpu_fault(struct vm_fault *vmf)
 {
 	struct ttm_buffer_object *tbo = vmf->vma->vm_private_data;
@@ -2109,7 +2138,7 @@ static vm_fault_t xe_bo_cpu_fault(struct vm_fault *vmf)
 	int io_idx;
 
 	if (xe_device_io_get(xe, &io_idx))
-		return ttm_bo_vm_dummy_page(vmf, vmf->vma->vm_page_prot);
+		return xe_bo_vm_dummy_page(vmf, bo);
 
 	ret = xe_bo_cpu_fault_fastpath(vmf, xe, bo, needs_rpm);
 	if (ret != VM_FAULT_RETRY)
@@ -2399,6 +2428,8 @@ struct xe_bo *xe_bo_init_locked(struct xe_device *xe, struct xe_bo *bo,
 			return bo;
 	}
 
+	bo->wedged_dummy_page = NULL;
+
 	bo->ccs_cleared = false;
 	bo->tile = tile;
 	bo->flags = flags;
diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
index 0eb93052c1d5..8b3823b60cbf 100644
--- a/drivers/gpu/drm/xe/xe_bo_types.h
+++ b/drivers/gpu/drm/xe/xe_bo_types.h
@@ -21,6 +21,7 @@ struct xe_device;
 struct xe_mem_pool_node;
 struct xe_vm;
 struct xe_exec_queue;
+struct page;
 
 #define XE_BO_MAX_PLACEMENTS	3
 
@@ -114,6 +115,9 @@ struct xe_bo {
 	/** @vram_userfault_link: Link into @mem_access.vram_userfault.list */
 	struct list_head vram_userfault_link;
 
+	/** @wedged_dummy_page: Zeroed page used for faults after device wedge */
+	struct page *wedged_dummy_page;
+
 	/**
 	 * @min_align: minimum alignment needed for this BO if different
 	 * from default
-- 
2.43.0


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

* [PATCH v2 09/15] drm/xe: Invalidate existing VRAM mappings on wedge
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
                   ` (7 preceding siblings ...)
  2026-09-22 10:16 ` [PATCH v2 08/15] drm/xe: Reuse one dummy page per BO after wedge Arvind Yadav
@ 2026-09-22 10:16 ` Arvind Yadav
  2026-09-22 10:30   ` sashiko-bot
  2026-09-22 10:16 ` [PATCH v2 10/15] drm/xe/irq: Protect IRQ state during wedge isolation Arvind Yadav
                   ` (8 subsequent siblings)
  17 siblings, 1 reply; 23+ messages in thread
From: Arvind Yadav @ 2026-09-22 10:16 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	rodrigo.vivi

CPU mappings created before a device wedge can keep valid PTEs and
continue accessing VRAM. Mapping new faults to a dummy page does not
replace these existing mappings.

Use the common device I/O SRCU gate to wait for active CPU faults to
finish. Then invalidate all tracked VRAM mappings. Faults starting
after the wedge use the per-BO dummy page.

This ensures userspace is notified only after existing VRAM mappings
have been removed.

v2:
- Drain active faults before invalidating VRAM mappings

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>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
 drivers/gpu/drm/xe/xe_bo.c     | 20 ++++++++++++++++++++
 drivers/gpu/drm/xe/xe_bo.h     |  1 +
 drivers/gpu/drm/xe/xe_device.c |  4 ++++
 3 files changed, 25 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 7902ce3fe012..73dcd397dc13 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -4155,6 +4155,26 @@ void xe_bo_runtime_pm_release_mmap_offset(struct xe_bo *bo)
 	list_del_init(&bo->vram_userfault_link);
 }
 
+/**
+ * xe_bo_wedged_invalidate_mmaps - Invalidate CPU mappings backed by VRAM
+ * @xe: xe device instance
+ *
+ * The caller must drain the common device I/O gate before calling this
+ * function. Remove all tracked VRAM mappings so later faults map the
+ * per-BO dummy page.
+ */
+void xe_bo_wedged_invalidate_mmaps(struct xe_device *xe)
+{
+	struct xe_bo *bo, *next;
+
+	mutex_lock(&xe->mem_access.vram_userfault.lock);
+	list_for_each_entry_safe(bo, next,
+				 &xe->mem_access.vram_userfault.list,
+				 vram_userfault_link)
+		xe_bo_runtime_pm_release_mmap_offset(bo);
+	mutex_unlock(&xe->mem_access.vram_userfault.lock);
+}
+
 #if IS_ENABLED(CONFIG_DRM_XE_KUNIT_TEST)
 #include "tests/xe_bo.c"
 #endif
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index 290ca624e2a7..103eaacb56f2 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -449,6 +449,7 @@ int xe_gem_create_ioctl(struct drm_device *dev, void *data,
 int xe_gem_mmap_offset_ioctl(struct drm_device *dev, void *data,
 			     struct drm_file *file);
 void xe_bo_runtime_pm_release_mmap_offset(struct xe_bo *bo);
+void xe_bo_wedged_invalidate_mmaps(struct xe_device *xe);
 
 int xe_bo_dumb_create(struct drm_file *file_priv,
 		      struct drm_device *dev,
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 045b5844e5c3..3549cf89a353 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -896,6 +896,10 @@ static void xe_device_wedged_work(struct work_struct *work)
 	unsigned long method;
 	int err;
 
+	/* Drain active faults before invalidating VRAM mappings. */
+	xe_device_io_drain(xe);
+	xe_bo_wedged_invalidate_mmaps(xe);
+
 	/* Report at most one recovery method per worker invocation. */
 	method = READ_ONCE(xe->wedged.method);
 	if (method != READ_ONCE(xe->wedged.reported_method)) {
-- 
2.43.0


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

* [PATCH v2 10/15] drm/xe/irq: Protect IRQ state during wedge isolation
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
                   ` (8 preceding siblings ...)
  2026-09-22 10:16 ` [PATCH v2 09/15] drm/xe: Invalidate existing VRAM mappings on wedge Arvind Yadav
@ 2026-09-22 10:16 ` Arvind Yadav
  2026-09-22 10:16 ` [PATCH v2 11/15] drm/xe: Isolate a wedged device before notifying userspace Arvind Yadav
                   ` (7 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Arvind Yadav @ 2026-09-22 10:16 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	rodrigo.vivi

Wedge isolation can disable interrupts from a worker while PM resume
enables them. If both state changes overlap, resume can leave interrupts
enabled after the device is wedged.

Add a mutex to protect updates to `irq.enabled` and the related hardware
programming. Check the wedged state while holding the same lock so the
final IRQ state remains disabled.

v2:
 - Rename pm_lock to state_lock and document the IRQ state it protects.

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>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
 drivers/gpu/drm/xe/xe_device_types.h |  4 ++++
 drivers/gpu/drm/xe/xe_irq.c          | 23 ++++++++++++++++++++---
 2 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index df4e274bc719..f89d539df010 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -6,6 +6,7 @@
 #ifndef _XE_DEVICE_TYPES_H_
 #define _XE_DEVICE_TYPES_H_
 
+#include <linux/mutex.h>
 #include <linux/pci.h>
 
 #include <drm/drm_device.h>
@@ -272,6 +273,9 @@ struct xe_device {
 		/** @irq.lock: lock for processing irq's on this device */
 		spinlock_t lock;
 
+		/** @irq.state_lock: Protects suspend and resume IRQ state updates */
+		struct mutex state_lock;
+
 		/** @irq.enabled: interrupts enabled on this device */
 		atomic_t enabled;
 
diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index d314993b14a1..f7ff3fe5b843 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -797,8 +797,14 @@ static void irq_uninstall(void *arg)
 
 int xe_irq_init(struct xe_device *xe)
 {
+	int err;
+
 	spin_lock_init(&xe->irq.lock);
 
+	err = drmm_mutex_init(&xe->drm, &xe->irq.state_lock);
+	if (err)
+		return err;
+
 	return xe_irq_msix_init(xe);
 }
 
@@ -843,6 +849,8 @@ static void xe_irq_msi_synchronize_irq(struct xe_device *xe)
 
 void xe_irq_suspend(struct xe_device *xe)
 {
+	mutex_lock(&xe->irq.state_lock);
+
 	atomic_set(&xe->irq.enabled, 0); /* no new irqs */
 
 	/* flush irqs */
@@ -851,6 +859,8 @@ void xe_irq_suspend(struct xe_device *xe)
 	else
 		xe_irq_msi_synchronize_irq(xe);
 	xe_irq_reset(xe); /* turn irqs off */
+
+	mutex_unlock(&xe->irq.state_lock);
 }
 
 void xe_irq_resume(struct xe_device *xe)
@@ -858,10 +868,14 @@ void xe_irq_resume(struct xe_device *xe)
 	struct xe_gt *gt;
 	int id;
 
+	mutex_lock(&xe->irq.state_lock);
+
+	if (xe_device_wedged(xe))
+		goto out_unlock;
+
 	/*
-	 * lock not needed:
-	 * 1. no irq will arrive before the postinstall
-	 * 2. display is not yet resumed
+	 * irq.lock is not needed because no IRQ can arrive before
+	 * postinstall and the display has not been resumed yet.
 	 */
 	atomic_set(&xe->irq.enabled, 1);
 	xe_irq_reset(xe);
@@ -869,6 +883,9 @@ void xe_irq_resume(struct xe_device *xe)
 
 	for_each_gt(gt, xe, id)
 		xe_irq_enable_hwe(gt);
+
+out_unlock:
+	mutex_unlock(&xe->irq.state_lock);
 }
 
 /* MSI-X related definitions and functions below. */
-- 
2.43.0


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

* [PATCH v2 11/15] drm/xe: Isolate a wedged device before notifying userspace
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
                   ` (9 preceding siblings ...)
  2026-09-22 10:16 ` [PATCH v2 10/15] drm/xe/irq: Protect IRQ state during wedge isolation Arvind Yadav
@ 2026-09-22 10:16 ` Arvind Yadav
  2026-09-22 10:31   ` sashiko-bot
  2026-09-22 10:16 ` [PATCH v2 12/15] drm/xe/ttm: Reject VRAM allocations on wedged devices Arvind Yadav
                   ` (6 subsequent siblings)
  17 siblings, 1 reply; 23+ messages in thread
From: Arvind Yadav @ 2026-09-22 10:16 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	rodrigo.vivi

A permanently wedged device must stop interrupt and DMA activity before
userspace is notified that recovery is required.

Run the sleepable isolation steps from the wedge worker. Shut down and
unregister the display, suspend interrupts and clear PCI bus mastering,
then invalidate VRAM mappings. Mapping teardown does not access hardware,
so it runs after DMA has stopped

Track display and isolation state so later teardown does not repeat these
steps. Display shutdown already disables display power, so skip the
runtime PM disable when unregister follows shutdown.

System suspend may see the wedge flag before the worker is queued. Use a
completion to close this window and flush the worker before skipping
normal device suspend. The IRQ serialization keeps a racing resume from
enabling interrupts after isolation.

Resume always balances pci_disable_device() with pci_enable_device().
If the device is wedged, clear bus mastering and skip xe_pm_resume().

v2:
 - Run the common PCI suspend path for wedged devices so
   the D3Cold toggles remain paired. (Sashiko)
 - Move pci_enable_device() before the resume wedge check to
   balance pci_disable_device() even if the device wedges
   during suspend. (Sashiko)
 - Reuse the common device I/O SRCU gate
 - Remove the separate VRAM fault SRCU domain
 - Protect driver suspend and resume with the common SRCU gate
 - Wait for isolation when the device wedges during PM

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>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
 drivers/gpu/drm/xe/display/xe_display.c | 17 +++++++--
 drivers/gpu/drm/xe/xe_device.c          | 45 +++++++++++++++++++---
 drivers/gpu/drm/xe/xe_device_types.h    |  9 +++++
 drivers/gpu/drm/xe/xe_pci.c             | 51 +++++++++++++++++++++----
 4 files changed, 106 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/xe/display/xe_display.c b/drivers/gpu/drm/xe/display/xe_display.c
index 7b25c0814674..74a6afd78263 100644
--- a/drivers/gpu/drm/xe/display/xe_display.c
+++ b/drivers/gpu/drm/xe/display/xe_display.c
@@ -150,21 +150,27 @@ void xe_display_register(struct xe_device *xe)
 {
 	struct intel_display *display = xe->display;
 
-	if (!xe->info.probe_display)
+	if (!xe->info.probe_display || xe->display_registered)
 		return;
 
 	intel_display_driver_register(display);
 	intel_display_driver_runtime_pm_enable(display);
+
+	xe->display_registered = true;
 }
 
 void xe_display_unregister(struct xe_device *xe)
 {
 	struct intel_display *display = xe->display;
 
-	if (!xe->info.probe_display)
+	if (!xe->info.probe_display || !xe->display_registered)
 		return;
 
-	intel_display_driver_runtime_pm_disable(display);
+	xe->display_registered = false;
+
+	if (!xe->display_shutdown)
+		intel_display_driver_runtime_pm_disable(display);
+
 	intel_display_driver_unregister(display);
 }
 
@@ -172,7 +178,8 @@ void xe_display_shutdown(struct xe_device *xe)
 {
 	struct intel_display *display = xe->display;
 
-	if (!xe->info.probe_display)
+	if (!xe->info.probe_display || !xe->display_registered ||
+	    xe->display_shutdown)
 		return;
 
 	intel_display_driver_shutdown(display);
@@ -180,6 +187,8 @@ void xe_display_shutdown(struct xe_device *xe)
 	intel_opregion_suspend(display, PCI_D3cold);
 
 	intel_dmc_suspend(display);
+
+	xe->display_shutdown = true;
 }
 
 void xe_display_shutdown_late(struct xe_device *xe)
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 3549cf89a353..549504d2a9c4 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -469,6 +469,7 @@ int xe_device_init_early(struct xe_device *xe)
 	int err;
 
 	INIT_WORK(&xe->wedged.work, xe_device_wedged_work);
+	init_completion(&xe->wedged.prepared);
 	xe->wedged.reported_method = ~0UL;
 
 	err = ttm_device_init(&xe->ttm, &xe_ttm_funcs, xe->drm.dev,
@@ -889,6 +890,41 @@ static int xe_debug_page_size_alloc_ctrl_init(struct xe_device *xe)
 }
 #endif
 
+/*
+ * Isolate a permanently wedged device.
+ *
+ * May sleep and must be called from process context.
+ */
+static void xe_device_wedged_isolate(struct xe_device *xe)
+{
+	/*
+	 * Wait until xe_device_declare_wedged() has finished scanning GT
+	 * submission state before isolating the device.
+	 */
+	wait_for_completion(&xe->wedged.prepared);
+
+	if (xe->wedged.isolated)
+		return;
+
+	/*
+	 * GT wedging has signalled pending fences. Drain existing hardware
+	 * users before isolation starts.
+	 */
+	xe_device_io_drain(xe);
+
+	/* Shut down display hardware before stopping device access. */
+	xe_display_shutdown(xe);
+	xe_display_unregister(xe);
+
+	/* Stop interrupt and DMA activity before changing mappings. */
+	xe_irq_suspend(xe);
+	pci_clear_master(to_pci_dev(xe->drm.dev));
+
+	xe_bo_wedged_invalidate_mmaps(xe);
+
+	xe->wedged.isolated = true;
+}
+
 static void xe_device_wedged_work(struct work_struct *work)
 {
 	struct xe_device *xe =
@@ -896,9 +932,7 @@ static void xe_device_wedged_work(struct work_struct *work)
 	unsigned long method;
 	int err;
 
-	/* Drain active faults before invalidating VRAM mappings. */
-	xe_device_io_drain(xe);
-	xe_bo_wedged_invalidate_mmaps(xe);
+	xe_device_wedged_isolate(xe);
 
 	/* Report at most one recovery method per worker invocation. */
 	method = READ_ONCE(xe->wedged.method);
@@ -1164,7 +1198,6 @@ int xe_device_probe(struct xe_device *xe)
 void xe_device_remove(struct xe_device *xe)
 {
 	xe_device_wedged_disable(xe);
-
 	xe_display_unregister(xe);
 
 	drm_dev_unplug(&xe->drm);
@@ -1180,7 +1213,6 @@ void xe_device_shutdown(struct xe_device *xe)
 	drm_dbg(&xe->drm, "Shutting down device\n");
 
 	xe_device_wedged_disable(xe);
-
 	xe_display_shutdown(xe);
 
 	xe_irq_suspend(xe);
@@ -1502,6 +1534,9 @@ void xe_device_declare_wedged(struct xe_device *xe)
 	     READ_ONCE(xe->wedged.method) !=
 	     READ_ONCE(xe->wedged.reported_method)))
 		queue_work(xe->unordered_wq, &xe->wedged.work);
+
+	if (first)
+		complete_all(&xe->wedged.prepared);
 }
 
 /**
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index f89d539df010..93bb38ed5975 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -6,6 +6,7 @@
 #ifndef _XE_DEVICE_TYPES_H_
 #define _XE_DEVICE_TYPES_H_
 
+#include <linux/completion.h>
 #include <linux/mutex.h>
 #include <linux/pci.h>
 
@@ -113,6 +114,10 @@ struct xe_device {
 #if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
 	/** @display: display device data, must be placed after drm device member */
 	struct intel_display *display;
+	/** @display_registered: Display userspace interfaces are registered */
+	bool display_registered;
+	/** @display_shutdown: Display hardware shutdown has completed */
+	bool display_shutdown;
 #endif
 
 	/** @devcoredump: device coredump */
@@ -562,8 +567,12 @@ struct xe_device {
 		struct work_struct work;
 		/** @wedged.stopping: Blocks worker requeue and repeated disable */
 		atomic_t stopping;
+		/** @wedged.prepared: First wedge declaration finished and work was queued */
+		struct completion prepared;
 		/** @wedged.reported_method: Last recovery method reported to userspace */
 		unsigned long reported_method;
+		/** @wedged.isolated: Terminal device isolation has completed */
+		bool isolated;
 	} wedged;
 
 	/** @devres_group: devres group */
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index d64e873d9e71..25992e4fad43 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -1326,19 +1326,38 @@ static int xe_pci_suspend(struct device *dev)
 {
 	struct pci_dev *pdev = to_pci_dev(dev);
 	struct xe_device *xe = pdev_to_xe_device(pdev);
+	int io_idx;
 	int err;
 
 	if (xe_survivability_mode_is_boot_enabled(xe))
 		return -EBUSY;
 
-	err = xe_pm_suspend(xe);
-	if (err)
-		return err;
+	/*
+	 * Wait until wedge work is queued, then wait for isolation to
+	 * finish before skipping driver-level suspend.
+	 */
+	err = xe_device_io_get(xe, &io_idx);
+	if (err) {
+		if (!xe_device_wedged(xe))
+			return err;
+
+		wait_for_completion(&xe->wedged.prepared);
+		flush_work(&xe->wedged.work);
+	} else {
+		err = xe_pm_suspend(xe);
+		xe_device_io_put(io_idx);
+
+		if (xe_device_wedged(xe)) {
+			wait_for_completion(&xe->wedged.prepared);
+			flush_work(&xe->wedged.work);
+		} else if (err) {
+			return err;
+		}
+	}
 
 	/*
-	 * Enabling D3Cold is needed for S2Idle/S0ix.
-	 * It is save to allow here since xe_pm_suspend has evicted
-	 * the local memory and the direct complete optimization is disabled.
+	 * Keep PCI suspend common to both paths so resume performs
+	 * matching PCI enable and D3Cold operations.
 	 */
 	d3cold_toggle(pdev, D3COLD_ENABLE);
 
@@ -1352,6 +1371,8 @@ static int xe_pci_suspend(struct device *dev)
 static int xe_pci_resume(struct device *dev)
 {
 	struct pci_dev *pdev = to_pci_dev(dev);
+	struct xe_device *xe = pdev_to_xe_device(pdev);
+	int io_idx;
 	int err;
 
 	/* Give back the D3Cold decision to the runtime P M*/
@@ -1363,13 +1384,29 @@ static int xe_pci_resume(struct device *dev)
 
 	pci_restore_state(pdev);
 
+	/* Balance PCI suspend regardless of the current wedge state. */
 	err = pci_enable_device(pdev);
 	if (err)
 		return err;
 
+	err = xe_device_io_get(xe, &io_idx);
+	if (err) {
+		pci_clear_master(pdev);
+		return xe_device_wedged(xe) ? 0 : err;
+	}
+
 	pci_set_master(pdev);
 
-	err = xe_pm_resume(pdev_to_xe_device(pdev));
+	err = xe_pm_resume(xe);
+	xe_device_io_put(io_idx);
+
+	if (xe_device_wedged(xe)) {
+		wait_for_completion(&xe->wedged.prepared);
+		flush_work(&xe->wedged.work);
+		pci_clear_master(pdev);
+		return 0;
+	}
+
 	if (err)
 		return err;
 
-- 
2.43.0


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

* [PATCH v2 12/15] drm/xe/ttm: Reject VRAM allocations on wedged devices
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
                   ` (10 preceding siblings ...)
  2026-09-22 10:16 ` [PATCH v2 11/15] drm/xe: Isolate a wedged device before notifying userspace Arvind Yadav
@ 2026-09-22 10:16 ` Arvind Yadav
  2026-09-22 10:16 ` [PATCH v2 13/15] drm/xe/guc: Skip timeout recovery on a wedged device Arvind Yadav
                   ` (5 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Arvind Yadav @ 2026-09-22 10:16 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	rodrigo.vivi

VRAM is no longer usable after the device is wedged. Reject observed
VRAM allocations with -ENODEV and stop placement fallback.

An allocation racing with the wedge may still complete. The wedged fault
path prevents new VRAM CPU mappings, and device teardown releases the
resource.

v2:
 - Return -ENODEV to stop placement fallback after a permanent wedge.
   (Rodrigo)

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>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
 drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 9a514d983e90..088a690067b9 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -105,6 +105,7 @@ static int xe_ttm_vram_mgr_new(struct ttm_resource_manager *man,
 			       const struct ttm_place *place,
 			       struct ttm_resource **res)
 {
+	struct xe_device *xe = ttm_to_xe_device(tbo->bdev);
 	struct xe_ttm_vram_mgr *mgr = to_xe_ttm_vram_mgr(man);
 	struct xe_ttm_vram_mgr_resource *vres;
 	struct gpu_buddy *mm = &mgr->mm;
@@ -112,6 +113,9 @@ static int xe_ttm_vram_mgr_new(struct ttm_resource_manager *man,
 	unsigned long lpfn;
 	int err;
 
+	if (xe_device_wedged(xe))
+		return -ENODEV;
+
 	lpfn = place->lpfn;
 	if (!lpfn || lpfn > man->size >> PAGE_SHIFT)
 		lpfn = man->size >> PAGE_SHIFT;
-- 
2.43.0


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

* [PATCH v2 13/15] drm/xe/guc: Skip timeout recovery on a wedged device
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
                   ` (11 preceding siblings ...)
  2026-09-22 10:16 ` [PATCH v2 12/15] drm/xe/ttm: Reject VRAM allocations on wedged devices Arvind Yadav
@ 2026-09-22 10:16 ` Arvind Yadav
  2026-09-22 10:16 ` [PATCH v2 14/15] drm/xe: Skip PM notifier preparation when device I/O is blocked Arvind Yadav
                   ` (4 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Arvind Yadav @ 2026-09-22 10:16 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	rodrigo.vivi

A scheduler timeout can still run after the device has been declared
wedged. guc_submit_hint_wedged() only returns true for the no-reset
debug mode, so other wedge modes can continue into GuC timeout recovery.

The killed-queue case already preserves an existing wedge. Extend the
same check to non-killed queues, where guc_submit_hint_wedged() returns
false outside the no-reset debug mode.

If the device is already wedged, use the existing wedged cleanup path
and avoid further hardware recovery. This also avoids the
kernel-submitted job timeout warning seen after wedge isolation.

The timeout was observed as:
[ 8939.200065] xe 0000:03:00.0: [drm] Tile0: GT0: Kernel-submitted job timed out
[ 8939.200066] WARNING: xe_guc_submit.c:1683 at guc_exec_queue_timedout_job+0x1160/0x2550

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>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Assisted-by: Claude:claude-opus-4-8
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
 drivers/gpu/drm/xe/xe_guc_submit.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
index 664008d21914..da2d4fa02a77 100644
--- a/drivers/gpu/drm/xe/xe_guc_submit.c
+++ b/drivers/gpu/drm/xe/xe_guc_submit.c
@@ -1596,10 +1596,9 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
 	 * Killed queues must not newly wedge the device, but preserve an
 	 * already-wedged state to avoid warning on teardown timeouts.
 	 */
-	if (!exec_queue_killed(q))
+	wedged = xe_device_wedged(xe);
+	if (!wedged && !exec_queue_killed(q))
 		wedged = guc_submit_hint_wedged(exec_queue_to_guc(q));
-	else
-		wedged = xe_device_wedged(xe);
 
 	/*
 	 * Only tag as GPU hang if this is the original timeout, not a
-- 
2.43.0


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

* [PATCH v2 14/15] drm/xe: Skip PM notifier preparation when device I/O is blocked
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
                   ` (12 preceding siblings ...)
  2026-09-22 10:16 ` [PATCH v2 13/15] drm/xe/guc: Skip timeout recovery on a wedged device Arvind Yadav
@ 2026-09-22 10:16 ` Arvind Yadav
  2026-09-22 10:17 ` [PATCH v2 15/15] drm/xe: Block BO VM access when device I/O is unavailable Arvind Yadav
                   ` (3 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Arvind Yadav @ 2026-09-22 10:16 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	rodrigo.vivi

The system PM notifier runs before the PCI suspend callback and may evict
BOs or submit migration work. This work must not start after the device
has been declared wedged.

Skip PM preparation for a wedged device. Track whether preparation ran
so the post callback only performs matching cleanup and releases the
runtime PM reference when needed.

The gate is held across xe_bo_evict_all_user(), so wedge isolation waits
for eviction to finish. GTs are declared wedged before the gate is
drained, so pending fences are signalled and eviction can finish.

v2:
 - Protect PM preparation with the common SRCU gate.

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>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
 drivers/gpu/drm/xe/xe_device_types.h |  2 ++
 drivers/gpu/drm/xe/xe_pm.c           | 12 ++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 93bb38ed5975..24e8cb5fc88a 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -484,6 +484,8 @@ struct xe_device {
 
 	/** @pm_notifier: Our PM notifier to perform actions in response to various PM events. */
 	struct notifier_block pm_notifier;
+	/** @pm_notifier_active: PM notifier prepare work was performed */
+	bool pm_notifier_active;
 	/** @pm_block: Completion to block validating tasks on suspend / hibernate prepare */
 	struct completion pm_block;
 	/** @rebind_resume_list: List of wq items to kick on resume. */
diff --git a/drivers/gpu/drm/xe/xe_pm.c b/drivers/gpu/drm/xe/xe_pm.c
index daa7ba2df317..fd265f9135c6 100644
--- a/drivers/gpu/drm/xe/xe_pm.c
+++ b/drivers/gpu/drm/xe/xe_pm.c
@@ -459,10 +459,16 @@ static int xe_pm_notifier_callback(struct notifier_block *nb,
 	case PM_SUSPEND_PREPARE:
 	{
 		struct xe_validation_ctx ctx;
+		int io_idx;
+
+		/* Do not start PM preparation while device I/O is blocked. */
+		if (xe_device_io_get(xe, &io_idx))
+			break;
 
 		reinit_completion(&xe->pm_block);
 		xe_pm_block_begin_signalling();
 		xe_pm_runtime_get(xe);
+		xe->pm_notifier_active = true;
 		(void)xe_validation_ctx_init(&ctx, &xe->val, NULL,
 					     (struct xe_val_flags) {.exclusive = true});
 		err = xe_bo_evict_all_user(xe);
@@ -479,10 +485,16 @@ static int xe_pm_notifier_callback(struct notifier_block *nb,
 		 * allocations.
 		 */
 		xe_pm_block_end_signalling();
+		xe_device_io_put(io_idx);
 		break;
 	}
 	case PM_POST_HIBERNATION:
 	case PM_POST_SUSPEND:
+		if (!xe->pm_notifier_active)
+			break;
+
+		xe->pm_notifier_active = false;
+
 		complete_all(&xe->pm_block);
 		xe_pm_wake_rebind_workers(xe);
 		xe_bo_notifier_unprepare_all_pinned(xe);
-- 
2.43.0


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

* [PATCH v2 15/15] drm/xe: Block BO VM access when device I/O is unavailable
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
                   ` (13 preceding siblings ...)
  2026-09-22 10:16 ` [PATCH v2 14/15] drm/xe: Skip PM notifier preparation when device I/O is blocked Arvind Yadav
@ 2026-09-22 10:17 ` Arvind Yadav
  2026-09-22 10:27 ` ✓ CI.KUnit: success for drm/xe: Isolate wedged devices from hardware access (rev2) Patchwork
                   ` (2 subsequent siblings)
  17 siblings, 0 replies; 23+ messages in thread
From: Arvind Yadav @ 2026-09-22 10:17 UTC (permalink / raw)
  To: intel-xe, dri-devel
  Cc: matthew.brost, himal.prasad.ghimiray, thomas.hellstrom,
	rodrigo.vivi

xe_bo_vm_access() may acquire a runtime PM reference and access a BO
during PCI error recovery, after a permanent wedge or during device
unplug.

Use xe_device_io_get() to protect against unplug, PCI error recovery and
permanent wedging. Keep both protections until the runtime PM reference
has been released.

Return -EIO for a permanent wedge, -ECANCELED during PCI error recovery
and -ENODEV after device unplug.

v2:
 - Replace the runtime-PM scoped guard with explicit get/put calls
   to avoid mixing scope-based and goto-based cleanup. (Sashiko)
 - Replace the private VRAM SRCU lock with the common device I/O gate.
 - Preserve -EIO for BO access after a permanent wedge.

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>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
---
 drivers/gpu/drm/xe/xe_bo.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 73dcd397dc13..5372bc07aa4e 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -2235,9 +2235,18 @@ static int xe_bo_vm_access(struct vm_area_struct *vma, unsigned long addr,
 	struct ttm_buffer_object *ttm_bo = vma->vm_private_data;
 	struct xe_bo *bo = ttm_to_xe_bo(ttm_bo);
 	struct xe_device *xe = xe_bo_device(bo);
+	int idx, ret;
 
-	guard(xe_pm_runtime)(xe);
-	return ttm_bo_vm_access(vma, addr, buf, len, write);
+	ret = xe_device_io_get(xe, &idx);
+	if (ret)
+		return ret == -ECANCELED && xe_device_wedged(xe) ? -EIO : ret;
+
+	xe_pm_runtime_get(xe);
+	ret = ttm_bo_vm_access(vma, addr, buf, len, write);
+	xe_pm_runtime_put(xe);
+
+	xe_device_io_put(idx);
+	return ret;
 }
 
 /**
-- 
2.43.0


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

* Re: [PATCH v2 07/15] drm/xe: Send wedged notification from a worker
  2026-09-22 10:16 ` [PATCH v2 07/15] drm/xe: Send wedged notification from a worker Arvind Yadav
@ 2026-09-22 10:27   ` sashiko-bot
  0 siblings, 0 replies; 23+ messages in thread
From: sashiko-bot @ 2026-09-22 10:27 UTC (permalink / raw)
  To: Arvind Yadav; +Cc: dri-devel, intel-xe

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] xe: TOCTOU race in xe_device_declare_wedged() overwrites recovery method
--

commit 8a75aea67f604c5a996849e643c64617844ddad3
Author: Arvind Yadav <arvind.yadav@intel.com>
Subject: drm/xe: Send wedged notification from a worker

This commit moves the wedged event to a sleepable device worker to allow
isolation work to complete before userspace is notified. It updates the
wedge bookkeeping to rescan the GT state on later declarations and tracks
the last reported method to avoid lost updates.

> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c

[ ... ]

> @@ -1435,14 +1482,22 @@ void xe_device_declare_wedged(struct xe_device *xe)
>  		 */
>  		if (xe->wedged.mode == XE_WEDGED_MODE_UPON_ANY_HANG_NO_RESET)
>  			xe_device_set_wedged_method(xe, DRM_WEDGE_RECOVERY_NONE);
>  	}
> +
> +	/* Re-scan GT submission state on every declaration. */
> +	for_each_gt(gt, xe, id)
> +		xe_gt_declare_wedged(gt);
> +
> +	/* If no wedge recovery method is set, use default */
> +	if (!READ_ONCE(xe->wedged.method))
> +		xe_device_set_wedged_method(xe, DRM_WEDGE_RECOVERY_REBIND |
> +					    DRM_WEDGE_RECOVERY_BUS_RESET);

[Severity: Medium]
Is there a Time-of-Check to Time-of-Use (TOCTOU) race condition here in
xe_device_declare_wedged()?

If multiple threads invoke xe_device_declare_wedged() concurrently (for
example, during simultaneous GT hangs), could Thread A evaluate the
!READ_ONCE(xe->wedged.method) condition as true, get preempted, and then
allow Thread B to successfully set a specific method like
DRM_WEDGE_RECOVERY_NONE?

If Thread A then resumes, it seems it would unconditionally call
xe_device_set_wedged_method() with the default REBIND | BUS_RESET flags,
silently overwriting Thread B's legitimately set method.

Does this check-and-set sequence need atomic protection, such as cmpxchg,
to prevent concurrent threads from overwriting a newly set recovery method
with the default fallback?

> +
> +	if (!atomic_read(&xe->wedged.stopping) &&
> +	    (first ||
> +	     READ_ONCE(xe->wedged.method) !=
> +	     READ_ONCE(xe->wedged.reported_method)))
> +		queue_work(xe->unordered_wq, &xe->wedged.work);
>  }

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260922101721.1583542-1-arvind.yadav@intel.com?part=7

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

* ✓ CI.KUnit: success for drm/xe: Isolate wedged devices from hardware access (rev2)
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
                   ` (14 preceding siblings ...)
  2026-09-22 10:17 ` [PATCH v2 15/15] drm/xe: Block BO VM access when device I/O is unavailable Arvind Yadav
@ 2026-09-22 10:27 ` Patchwork
  2026-09-22 12:26 ` ✗ Xe.CI.BAT: failure " Patchwork
  2026-09-22 20:50 ` ✗ Xe.CI.FULL: " Patchwork
  17 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2026-09-22 10:27 UTC (permalink / raw)
  To: Arvind Yadav; +Cc: intel-xe

== Series Details ==

Series: drm/xe: Isolate wedged devices from hardware access (rev2)
URL   : https://patchwork.freedesktop.org/series/172860/
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
[10:25:23] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:25:28] 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
[10:25:48] Starting KUnit Kernel (1/1)...
[10:25:48] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:25:48] ============= refcount_interrupt (4 subtests) ==============
[10:25:48] [PASSED] test_single_irq_change
[10:25:48] [PASSED] test_nested_irq_change
[10:25:48] [PASSED] test_multiple_irq_change
[10:25:48] [PASSED] test_irq_save
[10:25:48] =============== [PASSED] refcount_interrupt ================
[10:25:48] ================= gpu_buddy (14 subtests) ==================
[10:25:48] [PASSED] gpu_test_buddy_alloc_limit
[10:25:48] [PASSED] gpu_test_buddy_alloc_optimistic
[10:25:48] [PASSED] gpu_test_buddy_alloc_pessimistic
[10:25:48] [PASSED] gpu_test_buddy_alloc_pathological
[10:25:48] [PASSED] gpu_test_buddy_alloc_contiguous
[10:25:48] [PASSED] gpu_test_buddy_alloc_clear
[10:25:48] [PASSED] gpu_test_buddy_alloc_range
[10:25:48] [PASSED] gpu_test_buddy_alloc_range_bias
[10:25:49] [PASSED] gpu_test_buddy_fragmentation_performance
[10:25:50] [PASSED] gpu_test_buddy_dirty_tracker_performance
[10:25:50] [PASSED] gpu_test_buddy_alloc_exceeds_max_order
[10:25:50] [PASSED] gpu_test_buddy_offset_aligned_allocation
[10:25:50] [PASSED] gpu_test_buddy_subtree_offset_alignment_stress
[10:25:50] [PASSED] gpu_test_buddy_addr_to_block
[10:25:50] ==================== [PASSED] gpu_buddy ====================
[10:25:50] ============================================================
[10:25:50] Testing complete. Ran 18 tests: passed: 18
[10:25:50] Elapsed time: 27.019s total, 4.412s configuring, 20.488s building, 2.044s 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
[10:25:50] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:25:52] 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
[10:26:27] Starting KUnit Kernel (1/1)...
[10:26:27] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:26:27] ============= refcount_interrupt (4 subtests) ==============
[10:26:27] [PASSED] test_single_irq_change
[10:26:27] [PASSED] test_nested_irq_change
[10:26:27] [PASSED] test_multiple_irq_change
[10:26:27] [PASSED] test_irq_save
[10:26:27] =============== [PASSED] refcount_interrupt ================
[10:26:27] ================== guc_buf (11 subtests) ===================
[10:26:27] [PASSED] test_smallest
[10:26:27] [PASSED] test_largest
[10:26:27] [PASSED] test_granular
[10:26:27] [PASSED] test_unique
[10:26:27] [PASSED] test_overlap
[10:26:27] [PASSED] test_reusable
[10:26:27] [PASSED] test_too_big
[10:26:27] [PASSED] test_flush
[10:26:27] [PASSED] test_lookup
[10:26:27] [PASSED] test_data
[10:26:27] [PASSED] test_class
[10:26:27] ===================== [PASSED] guc_buf =====================
[10:26:27] =================== guc_dbm (7 subtests) ===================
[10:26:27] [PASSED] test_empty
[10:26:27] [PASSED] test_default
[10:26:27] ======================== test_size  ========================
[10:26:27] [PASSED] 4
[10:26:27] [PASSED] 8
[10:26:27] [PASSED] 32
[10:26:27] [PASSED] 256
[10:26:27] ==================== [PASSED] test_size ====================
[10:26:27] ======================= test_reuse  ========================
[10:26:27] [PASSED] 4
[10:26:27] [PASSED] 8
[10:26:27] [PASSED] 32
[10:26:27] [PASSED] 256
[10:26:27] =================== [PASSED] test_reuse ====================
[10:26:27] =================== test_range_overlap  ====================
[10:26:27] [PASSED] 4
[10:26:27] [PASSED] 8
[10:26:27] [PASSED] 32
[10:26:27] [PASSED] 256
[10:26:27] =============== [PASSED] test_range_overlap ================
[10:26:27] =================== test_range_compact  ====================
[10:26:27] [PASSED] 4
[10:26:27] [PASSED] 8
[10:26:27] [PASSED] 32
[10:26:27] [PASSED] 256
[10:26:27] =============== [PASSED] test_range_compact ================
[10:26:27] ==================== test_range_spare  =====================
[10:26:27] [PASSED] 4
[10:26:27] [PASSED] 8
[10:26:27] [PASSED] 32
[10:26:27] [PASSED] 256
[10:26:27] ================ [PASSED] test_range_spare =================
[10:26:27] ===================== [PASSED] guc_dbm =====================
[10:26:27] =================== guc_idm (6 subtests) ===================
[10:26:27] [PASSED] bad_init
[10:26:27] [PASSED] no_init
[10:26:27] [PASSED] init_fini
[10:26:27] [PASSED] check_used
[10:26:27] [PASSED] check_quota
[10:26:27] [PASSED] check_all
[10:26:27] ===================== [PASSED] guc_idm =====================
[10:26:27] ============== guc_klv_helpers (13 subtests) ===============
[10:26:27] [PASSED] test_count
[10:26:27] [PASSED] test_encode_u32
[10:26:27] [PASSED] test_encode_u64
[10:26:27] [PASSED] test_encode_string
[10:26:27] [PASSED] test_encode_object_raw
[10:26:27] [PASSED] test_encode_object_klv
[10:26:27] [PASSED] test_encode_object_nested
[10:26:27] [PASSED] test_encode_object_basic
[10:26:27] ===================== test_decode_u16  =====================
[10:26:27] [PASSED] empty
[10:26:27] [PASSED] valid
[10:26:27] [PASSED] max
[10:26:27] [PASSED] big
[10:26:27] [PASSED] long
[10:26:27] ================= [PASSED] test_decode_u16 =================
[10:26:27] ===================== test_decode_u32  =====================
[10:26:27] [PASSED] empty
[10:26:27] [PASSED] valid
[10:26:27] [PASSED] max
[10:26:27] [PASSED] long
[10:26:27] ================= [PASSED] test_decode_u32 =================
[10:26:27] ===================== test_decode_u64  =====================
[10:26:27] [PASSED] empty
[10:26:27] [PASSED] short
[10:26:27] [PASSED] valid
[10:26:27] [PASSED] max
[10:26:27] [PASSED] long
[10:26:27] ================= [PASSED] test_decode_u64 =================
[10:26:27] ===================== test_decode_str  =====================
[10:26:27] [PASSED] empty
[10:26:27] [PASSED] one
[10:26:27] [PASSED] one_trash
[10:26:27] [PASSED] two
[10:26:27] [PASSED] two_trash
[10:26:27] [PASSED] three
[10:26:27] [PASSED] dword
[10:26:27] [PASSED] four
[10:26:27] [PASSED] five
[10:26:27] [PASSED] six
[10:26:27] [PASSED] seven
[10:26:27] [PASSED] qword
[10:26:27] ================= [PASSED] test_decode_str =================
[10:26:27] [PASSED] test_print
[10:26:27] ================= [PASSED] guc_klv_helpers =================
[10:26:27] =================== xe_log (4 subtests) ====================
[10:26:27] [PASSED] demo_cper
[10:26:27] [PASSED] demo_dmesg
[10:26:27] ======================= test_dmesg  ========================
[10:26:27] [PASSED] test_fatal
[10:26:27] [PASSED] test_fatal_tile
[10:26:27] [PASSED] test_fatal_gt
[10:26:27] [PASSED] test_fatal_comp
[10:26:27] [PASSED] test_fatal_comp_tile
[10:26:27] [PASSED] test_fatal_comp_gt
[10:26:27] [PASSED] test_fatal_all
[10:26:27] [PASSED] test_recoverable
[10:26:27] [PASSED] test_recoverable_tile
[10:26:27] [PASSED] test_recoverable_gt
[10:26:27] [PASSED] test_recoverable_comp
[10:26:27] [PASSED] test_recoverable_comp_tile
[10:26:27] [PASSED] test_recoverable_comp_gt
[10:26:27] [PASSED] test_recoverable_all
[10:26:27] [PASSED] test_info
[10:26:27] [PASSED] test_info_tile
[10:26:27] [PASSED] test_info_gt
[10:26:27] [PASSED] test_info_err
[10:26:27] [PASSED] test_info_comp
[10:26:27] [PASSED] test_info_comp_tile
[10:26:27] [PASSED] test_info_comp_gt
[10:26:27] [PASSED] test_info_all
[10:26:27] [PASSED] test_hw_fatal
[10:26:27] [PASSED] test_hw_recoverable
[10:26:27] [PASSED] test_hw_corrected
[10:26:27] [PASSED] test_hw_informational
[10:26:27] =================== [PASSED] test_dmesg ====================
[10:26:27] ====================== test_invalid  =======================
[10:26:27] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[10:26:27] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[10:26:27] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[10:26:27] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[10:26:27] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[10:26:27] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[10:26:27] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[10:26:27] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[10:26:27] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[10:26:27] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[10:26:27] ================== [SKIPPED] test_invalid ==================
[10:26:27] ===================== [PASSED] xe_log ======================
[10:26:27] ================== no_relay (3 subtests) ===================
[10:26:27] [PASSED] xe_drops_guc2pf_if_not_ready
[10:26:27] [PASSED] xe_drops_guc2vf_if_not_ready
[10:26:27] [PASSED] xe_rejects_send_if_not_ready
[10:26:27] ==================== [PASSED] no_relay =====================
[10:26:27] ================== pf_relay (14 subtests) ==================
[10:26:27] [PASSED] pf_rejects_guc2pf_too_short
[10:26:27] [PASSED] pf_rejects_guc2pf_too_long
[10:26:27] [PASSED] pf_rejects_guc2pf_no_payload
[10:26:27] [PASSED] pf_fails_no_payload
[10:26:27] [PASSED] pf_fails_bad_origin
[10:26:27] [PASSED] pf_fails_bad_type
[10:26:27] [PASSED] pf_txn_reports_error
[10:26:27] [PASSED] pf_txn_sends_pf2guc
[10:26:27] [PASSED] pf_sends_pf2guc
[10:26:27] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[10:26:27] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[10:26:27] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[10:26:27] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[10:26:27] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[10:26:27] ==================== [PASSED] pf_relay =====================
[10:26:27] ================== vf_relay (3 subtests) ===================
[10:26:27] [PASSED] vf_rejects_guc2vf_too_short
[10:26:27] [PASSED] vf_rejects_guc2vf_too_long
[10:26:27] [PASSED] vf_rejects_guc2vf_no_payload
[10:26:27] ==================== [PASSED] vf_relay =====================
[10:26:27] ================ pf_gt_config (9 subtests) =================
[10:26:27] [PASSED] fair_contexts_1vf
[10:26:27] [PASSED] fair_doorbells_1vf
[10:26:27] [PASSED] fair_ggtt_1vf
[10:26:27] ====================== fair_vram_1vf  ======================
[10:26:27] [PASSED] 3.50 GiB
[10:26:27] [PASSED] 11.5 GiB
[10:26:27] [PASSED] 15.5 GiB
[10:26:27] [PASSED] 31.5 GiB
[10:26:27] [PASSED] 63.5 GiB
[10:26:27] [PASSED] 1.91 GiB
[10:26:27] ================== [PASSED] fair_vram_1vf ==================
[10:26:27] ================ fair_vram_1vf_admin_only  =================
[10:26:27] [PASSED] 3.50 GiB
[10:26:27] [PASSED] 11.5 GiB
[10:26:27] [PASSED] 15.5 GiB
[10:26:27] [PASSED] 31.5 GiB
[10:26:27] [PASSED] 63.5 GiB
[10:26:27] [PASSED] 1.91 GiB
[10:26:27] ============ [PASSED] fair_vram_1vf_admin_only =============
[10:26:27] ====================== fair_contexts  ======================
[10:26:27] [PASSED] 1 VF
[10:26:27] [PASSED] 2 VFs
[10:26:27] [PASSED] 3 VFs
[10:26:27] [PASSED] 4 VFs
[10:26:27] [PASSED] 5 VFs
[10:26:27] [PASSED] 6 VFs
[10:26:27] [PASSED] 7 VFs
[10:26:27] [PASSED] 8 VFs
[10:26:27] [PASSED] 9 VFs
[10:26:27] [PASSED] 10 VFs
[10:26:27] [PASSED] 11 VFs
[10:26:27] [PASSED] 12 VFs
[10:26:27] [PASSED] 13 VFs
[10:26:27] [PASSED] 14 VFs
[10:26:27] [PASSED] 15 VFs
[10:26:27] [PASSED] 16 VFs
[10:26:27] [PASSED] 17 VFs
[10:26:27] [PASSED] 18 VFs
[10:26:27] [PASSED] 19 VFs
[10:26:27] [PASSED] 20 VFs
[10:26:27] [PASSED] 21 VFs
[10:26:27] [PASSED] 22 VFs
[10:26:27] [PASSED] 23 VFs
[10:26:27] [PASSED] 24 VFs
[10:26:27] [PASSED] 25 VFs
[10:26:27] [PASSED] 26 VFs
[10:26:27] [PASSED] 27 VFs
[10:26:27] [PASSED] 28 VFs
[10:26:27] [PASSED] 29 VFs
[10:26:27] [PASSED] 30 VFs
[10:26:27] [PASSED] 31 VFs
[10:26:27] [PASSED] 32 VFs
[10:26:27] [PASSED] 33 VFs
[10:26:27] [PASSED] 34 VFs
[10:26:27] [PASSED] 35 VFs
[10:26:27] [PASSED] 36 VFs
[10:26:27] [PASSED] 37 VFs
[10:26:27] [PASSED] 38 VFs
[10:26:27] [PASSED] 39 VFs
[10:26:27] [PASSED] 40 VFs
[10:26:27] [PASSED] 41 VFs
[10:26:27] [PASSED] 42 VFs
[10:26:27] [PASSED] 43 VFs
[10:26:27] [PASSED] 44 VFs
[10:26:27] [PASSED] 45 VFs
[10:26:27] [PASSED] 46 VFs
[10:26:27] [PASSED] 47 VFs
[10:26:27] [PASSED] 48 VFs
[10:26:27] [PASSED] 49 VFs
[10:26:27] [PASSED] 50 VFs
[10:26:27] [PASSED] 51 VFs
[10:26:27] [PASSED] 52 VFs
[10:26:27] [PASSED] 53 VFs
[10:26:27] [PASSED] 54 VFs
[10:26:27] [PASSED] 55 VFs
[10:26:27] [PASSED] 56 VFs
[10:26:27] [PASSED] 57 VFs
[10:26:27] [PASSED] 58 VFs
[10:26:27] [PASSED] 59 VFs
[10:26:27] [PASSED] 60 VFs
[10:26:27] [PASSED] 61 VFs
[10:26:27] [PASSED] 62 VFs
[10:26:27] [PASSED] 63 VFs
[10:26:27] ================== [PASSED] fair_contexts ==================
[10:26:27] ===================== fair_doorbells  ======================
[10:26:27] [PASSED] 1 VF
[10:26:27] [PASSED] 2 VFs
[10:26:27] [PASSED] 3 VFs
[10:26:27] [PASSED] 4 VFs
[10:26:27] [PASSED] 5 VFs
[10:26:27] [PASSED] 6 VFs
[10:26:27] [PASSED] 7 VFs
[10:26:27] [PASSED] 8 VFs
[10:26:27] [PASSED] 9 VFs
[10:26:27] [PASSED] 10 VFs
[10:26:27] [PASSED] 11 VFs
[10:26:27] [PASSED] 12 VFs
[10:26:27] [PASSED] 13 VFs
[10:26:27] [PASSED] 14 VFs
[10:26:27] [PASSED] 15 VFs
[10:26:27] [PASSED] 16 VFs
[10:26:27] [PASSED] 17 VFs
[10:26:27] [PASSED] 18 VFs
[10:26:27] [PASSED] 19 VFs
[10:26:27] [PASSED] 20 VFs
[10:26:27] [PASSED] 21 VFs
[10:26:27] [PASSED] 22 VFs
[10:26:27] [PASSED] 23 VFs
[10:26:27] [PASSED] 24 VFs
[10:26:27] [PASSED] 25 VFs
[10:26:27] [PASSED] 26 VFs
[10:26:27] [PASSED] 27 VFs
[10:26:27] [PASSED] 28 VFs
[10:26:27] [PASSED] 29 VFs
[10:26:27] [PASSED] 30 VFs
[10:26:27] [PASSED] 31 VFs
[10:26:27] [PASSED] 32 VFs
[10:26:27] [PASSED] 33 VFs
[10:26:27] [PASSED] 34 VFs
[10:26:27] [PASSED] 35 VFs
[10:26:27] [PASSED] 36 VFs
[10:26:27] [PASSED] 37 VFs
[10:26:27] [PASSED] 38 VFs
[10:26:27] [PASSED] 39 VFs
[10:26:27] [PASSED] 40 VFs
[10:26:27] [PASSED] 41 VFs
[10:26:27] [PASSED] 42 VFs
[10:26:27] [PASSED] 43 VFs
[10:26:27] [PASSED] 44 VFs
[10:26:27] [PASSED] 45 VFs
[10:26:27] [PASSED] 46 VFs
[10:26:27] [PASSED] 47 VFs
[10:26:27] [PASSED] 48 VFs
[10:26:27] [PASSED] 49 VFs
[10:26:27] [PASSED] 50 VFs
[10:26:27] [PASSED] 51 VFs
[10:26:27] [PASSED] 52 VFs
[10:26:27] [PASSED] 53 VFs
[10:26:27] [PASSED] 54 VFs
[10:26:27] [PASSED] 55 VFs
[10:26:27] [PASSED] 56 VFs
[10:26:27] [PASSED] 57 VFs
[10:26:27] [PASSED] 58 VFs
[10:26:27] [PASSED] 59 VFs
[10:26:27] [PASSED] 60 VFs
[10:26:27] [PASSED] 61 VFs
[10:26:27] [PASSED] 62 VFs
[10:26:27] [PASSED] 63 VFs
[10:26:27] ================= [PASSED] fair_doorbells ==================
[10:26:27] ======================== fair_ggtt  ========================
[10:26:27] [PASSED] 1 VF
[10:26:27] [PASSED] 2 VFs
[10:26:27] [PASSED] 3 VFs
[10:26:27] [PASSED] 4 VFs
[10:26:27] [PASSED] 5 VFs
[10:26:27] [PASSED] 6 VFs
[10:26:27] [PASSED] 7 VFs
[10:26:27] [PASSED] 8 VFs
[10:26:27] [PASSED] 9 VFs
[10:26:27] [PASSED] 10 VFs
[10:26:27] [PASSED] 11 VFs
[10:26:27] [PASSED] 12 VFs
[10:26:27] [PASSED] 13 VFs
[10:26:27] [PASSED] 14 VFs
[10:26:27] [PASSED] 15 VFs
[10:26:27] [PASSED] 16 VFs
[10:26:27] [PASSED] 17 VFs
[10:26:27] [PASSED] 18 VFs
[10:26:27] [PASSED] 19 VFs
[10:26:27] [PASSED] 20 VFs
[10:26:27] [PASSED] 21 VFs
[10:26:27] [PASSED] 22 VFs
[10:26:27] [PASSED] 23 VFs
[10:26:27] [PASSED] 24 VFs
[10:26:27] [PASSED] 25 VFs
[10:26:27] [PASSED] 26 VFs
[10:26:27] [PASSED] 27 VFs
[10:26:27] [PASSED] 28 VFs
[10:26:27] [PASSED] 29 VFs
[10:26:27] [PASSED] 30 VFs
[10:26:27] [PASSED] 31 VFs
[10:26:27] [PASSED] 32 VFs
[10:26:27] [PASSED] 33 VFs
[10:26:27] [PASSED] 34 VFs
[10:26:27] [PASSED] 35 VFs
[10:26:27] [PASSED] 36 VFs
[10:26:27] [PASSED] 37 VFs
[10:26:27] [PASSED] 38 VFs
[10:26:27] [PASSED] 39 VFs
[10:26:27] [PASSED] 40 VFs
[10:26:27] [PASSED] 41 VFs
[10:26:27] [PASSED] 42 VFs
[10:26:27] [PASSED] 43 VFs
[10:26:27] [PASSED] 44 VFs
[10:26:27] [PASSED] 45 VFs
[10:26:27] [PASSED] 46 VFs
[10:26:27] [PASSED] 47 VFs
[10:26:27] [PASSED] 48 VFs
[10:26:27] [PASSED] 49 VFs
[10:26:27] [PASSED] 50 VFs
[10:26:27] [PASSED] 51 VFs
[10:26:27] [PASSED] 52 VFs
[10:26:27] [PASSED] 53 VFs
[10:26:27] [PASSED] 54 VFs
[10:26:27] [PASSED] 55 VFs
[10:26:27] [PASSED] 56 VFs
[10:26:27] [PASSED] 57 VFs
[10:26:27] [PASSED] 58 VFs
[10:26:27] [PASSED] 59 VFs
[10:26:27] [PASSED] 60 VFs
[10:26:27] [PASSED] 61 VFs
[10:26:27] [PASSED] 62 VFs
[10:26:27] [PASSED] 63 VFs
[10:26:27] ==================== [PASSED] fair_ggtt ====================
[10:26:27] ======================== fair_vram  ========================
[10:26:27] [PASSED] 1 VF
[10:26:27] [PASSED] 2 VFs
[10:26:27] [PASSED] 3 VFs
[10:26:27] [PASSED] 4 VFs
[10:26:27] [PASSED] 5 VFs
[10:26:27] [PASSED] 6 VFs
[10:26:27] [PASSED] 7 VFs
[10:26:27] [PASSED] 8 VFs
[10:26:27] [PASSED] 9 VFs
[10:26:27] [PASSED] 10 VFs
[10:26:27] [PASSED] 11 VFs
[10:26:27] [PASSED] 12 VFs
[10:26:27] [PASSED] 13 VFs
[10:26:27] [PASSED] 14 VFs
[10:26:27] [PASSED] 15 VFs
[10:26:27] [PASSED] 16 VFs
[10:26:27] [PASSED] 17 VFs
[10:26:27] [PASSED] 18 VFs
[10:26:27] [PASSED] 19 VFs
[10:26:27] [PASSED] 20 VFs
[10:26:27] [PASSED] 21 VFs
[10:26:27] [PASSED] 22 VFs
[10:26:27] [PASSED] 23 VFs
[10:26:27] [PASSED] 24 VFs
[10:26:27] [PASSED] 25 VFs
[10:26:27] [PASSED] 26 VFs
[10:26:27] [PASSED] 27 VFs
[10:26:27] [PASSED] 28 VFs
[10:26:27] [PASSED] 29 VFs
[10:26:27] [PASSED] 30 VFs
[10:26:27] [PASSED] 31 VFs
[10:26:27] [PASSED] 32 VFs
[10:26:27] [PASSED] 33 VFs
[10:26:27] [PASSED] 34 VFs
[10:26:27] [PASSED] 35 VFs
[10:26:27] [PASSED] 36 VFs
[10:26:27] [PASSED] 37 VFs
[10:26:27] [PASSED] 38 VFs
[10:26:27] [PASSED] 39 VFs
[10:26:27] [PASSED] 40 VFs
[10:26:27] [PASSED] 41 VFs
[10:26:27] [PASSED] 42 VFs
[10:26:27] [PASSED] 43 VFs
[10:26:27] [PASSED] 44 VFs
[10:26:27] [PASSED] 45 VFs
[10:26:27] [PASSED] 46 VFs
[10:26:27] [PASSED] 47 VFs
[10:26:27] [PASSED] 48 VFs
[10:26:27] [PASSED] 49 VFs
[10:26:27] [PASSED] 50 VFs
[10:26:27] [PASSED] 51 VFs
[10:26:27] [PASSED] 52 VFs
[10:26:27] [PASSED] 53 VFs
[10:26:27] [PASSED] 54 VFs
[10:26:27] [PASSED] 55 VFs
[10:26:27] [PASSED] 56 VFs
[10:26:27] [PASSED] 57 VFs
[10:26:27] [PASSED] 58 VFs
[10:26:27] [PASSED] 59 VFs
[10:26:27] [PASSED] 60 VFs
[10:26:27] [PASSED] 61 VFs
[10:26:27] [PASSED] 62 VFs
[10:26:27] [PASSED] 63 VFs
[10:26:27] ==================== [PASSED] fair_vram ====================
[10:26:27] ================== [PASSED] pf_gt_config ===================
[10:26:27] ===================== lmtt (1 subtest) =====================
[10:26:27] ======================== test_ops  =========================
[10:26:27] [PASSED] 2-level
[10:26:27] [PASSED] multi-level
[10:26:27] ==================== [PASSED] test_ops =====================
[10:26:27] ====================== [PASSED] lmtt =======================
[10:26:27] ================= sriov_packet (1 subtest) =================
[10:26:27] [PASSED] test_descriptor_init
[10:26:27] ================== [PASSED] sriov_packet ===================
[10:26:27] ================= pf_service (11 subtests) =================
[10:26:27] [PASSED] pf_negotiate_any
[10:26:27] [PASSED] pf_negotiate_base_match
[10:26:27] [PASSED] pf_negotiate_base_newer
[10:26:27] [PASSED] pf_negotiate_base_next
[10:26:27] [SKIPPED] pf_negotiate_base_older (no older minor)
[10:26:27] [PASSED] pf_negotiate_base_prev
[10:26:27] [PASSED] pf_negotiate_latest_match
[10:26:27] [PASSED] pf_negotiate_latest_newer
[10:26:27] [PASSED] pf_negotiate_latest_next
[10:26:27] [SKIPPED] pf_negotiate_latest_older (no older minor)
[10:26:27] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[10:26:27] =================== [PASSED] pf_service ====================
[10:26:27] ================= xe_guc_g2g (2 subtests) ==================
[10:26:27] ============== xe_live_guc_g2g_kunit_default  ==============
[10:26:27] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[10:26:27] ============== xe_live_guc_g2g_kunit_allmem  ===============
[10:26:27] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[10:26:27] =================== [SKIPPED] xe_guc_g2g ===================
[10:26:27] =================== xe_mocs (2 subtests) ===================
[10:26:27] ================ xe_live_mocs_kernel_kunit  ================
[10:26:27] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[10:26:27] ================ xe_live_mocs_reset_kunit  =================
[10:26:27] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[10:26:27] ==================== [SKIPPED] xe_mocs =====================
[10:26:27] ================= xe_migrate (2 subtests) ==================
[10:26:27] ================= xe_migrate_sanity_kunit  =================
[10:26:27] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[10:26:27] ================== xe_validate_ccs_kunit  ==================
[10:26:27] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[10:26:27] =================== [SKIPPED] xe_migrate ===================
[10:26:27] ================== xe_dma_buf (1 subtest) ==================
[10:26:27] ==================== xe_dma_buf_kunit  =====================
[10:26:27] ================ [SKIPPED] xe_dma_buf_kunit ================
[10:26:27] =================== [SKIPPED] xe_dma_buf ===================
[10:26:27] ================= xe_bo_shrink (1 subtest) =================
[10:26:27] =================== xe_bo_shrink_kunit  ====================
[10:26:27] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[10:26:27] ================== [SKIPPED] xe_bo_shrink ==================
[10:26:27] ==================== xe_bo (2 subtests) ====================
[10:26:27] ================== xe_ccs_migrate_kunit  ===================
[10:26:27] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[10:26:27] ==================== xe_bo_evict_kunit  ====================
[10:26:27] =============== [SKIPPED] xe_bo_evict_kunit ================
[10:26:27] ===================== [SKIPPED] xe_bo ======================
[10:26:27] =================== xe_any (9 subtests) ====================
[10:26:27] [PASSED] test_to_xe
[10:26:27] [PASSED] test_to_dev
[10:26:27] [PASSED] test_to_pdev
[10:26:27] [PASSED] test_to_drm
[10:26:27] [PASSED] test_if_pdev
[10:26:27] [PASSED] test_if_xe
[10:26:27] [PASSED] test_if_tile
[10:26:27] [PASSED] test_if_gt
[10:26:27] [PASSED] test_to_id
[10:26:27] ===================== [PASSED] xe_any ======================
[10:26:27] ==================== args (13 subtests) ====================
[10:26:27] [PASSED] count_args_test
[10:26:27] [PASSED] call_args_example
[10:26:27] [PASSED] call_args_test
[10:26:27] [PASSED] drop_first_arg_example
[10:26:27] [PASSED] drop_first_arg_test
[10:26:27] [PASSED] first_arg_example
[10:26:27] [PASSED] first_arg_test
[10:26:27] [PASSED] last_arg_example
[10:26:27] [PASSED] last_arg_test
[10:26:27] [PASSED] pick_arg_example
[10:26:27] [PASSED] if_args_example
[10:26:27] [PASSED] if_args_test
[10:26:27] [PASSED] sep_comma_example
[10:26:27] ====================== [PASSED] args =======================
[10:26:27] =================== xe_pci (3 subtests) ====================
[10:26:27] ==================== check_graphics_ip  ====================
[10:26:27] [PASSED] 12.00 Xe_LP
[10:26:27] [PASSED] 12.10 Xe_LP+
[10:26:27] [PASSED] 12.55 Xe_HPG
[10:26:27] [PASSED] 12.60 Xe_HPC
[10:26:27] [PASSED] 12.70 Xe_LPG
[10:26:27] [PASSED] 12.71 Xe_LPG
[10:26:27] [PASSED] 12.74 Xe_LPG+
[10:26:27] [PASSED] 20.01 Xe2_HPG
[10:26:27] [PASSED] 20.02 Xe2_HPG
[10:26:27] [PASSED] 20.04 Xe2_LPG
[10:26:27] [PASSED] 30.00 Xe3_LPG
[10:26:27] [PASSED] 30.01 Xe3_LPG
[10:26:27] [PASSED] 30.03 Xe3_LPG
[10:26:27] [PASSED] 30.04 Xe3_LPG
[10:26:27] [PASSED] 30.05 Xe3_LPG
[10:26:27] [PASSED] 35.10 Xe3p_LPG
[10:26:27] [PASSED] 35.11 Xe3p_XPC
[10:26:27] ================ [PASSED] check_graphics_ip ================
[10:26:27] ===================== check_media_ip  ======================
[10:26:27] [PASSED] 12.00 Xe_M
[10:26:27] [PASSED] 12.55 Xe_HPM
[10:26:27] [PASSED] 13.00 Xe_LPM+
[10:26:27] [PASSED] 13.01 Xe2_HPM
[10:26:27] [PASSED] 20.00 Xe2_LPM
[10:26:27] [PASSED] 30.00 Xe3_LPM
[10:26:27] [PASSED] 30.02 Xe3_LPM
[10:26:27] [PASSED] 35.00 Xe3p_LPM
[10:26:27] [PASSED] 35.03 Xe3p_HPM
[10:26:27] ================= [PASSED] check_media_ip ==================
[10:26:27] =================== check_platform_desc  ===================
[10:26:27] [PASSED] 0x9A60 (TIGERLAKE)
[10:26:27] [PASSED] 0x9A68 (TIGERLAKE)
[10:26:27] [PASSED] 0x9A70 (TIGERLAKE)
[10:26:27] [PASSED] 0x9A40 (TIGERLAKE)
[10:26:27] [PASSED] 0x9A49 (TIGERLAKE)
[10:26:27] [PASSED] 0x9A59 (TIGERLAKE)
[10:26:27] [PASSED] 0x9A78 (TIGERLAKE)
[10:26:27] [PASSED] 0x9AC0 (TIGERLAKE)
[10:26:27] [PASSED] 0x9AC9 (TIGERLAKE)
[10:26:27] [PASSED] 0x9AD9 (TIGERLAKE)
[10:26:27] [PASSED] 0x9AF8 (TIGERLAKE)
[10:26:27] [PASSED] 0x4C80 (ROCKETLAKE)
[10:26:27] [PASSED] 0x4C8A (ROCKETLAKE)
[10:26:27] [PASSED] 0x4C8B (ROCKETLAKE)
[10:26:27] [PASSED] 0x4C8C (ROCKETLAKE)
[10:26:27] [PASSED] 0x4C90 (ROCKETLAKE)
[10:26:27] [PASSED] 0x4C9A (ROCKETLAKE)
[10:26:27] [PASSED] 0x4680 (ALDERLAKE_S)
[10:26:27] [PASSED] 0x4682 (ALDERLAKE_S)
[10:26:27] [PASSED] 0x4688 (ALDERLAKE_S)
[10:26:27] [PASSED] 0x468A (ALDERLAKE_S)
[10:26:27] [PASSED] 0x468B (ALDERLAKE_S)
[10:26:27] [PASSED] 0x4690 (ALDERLAKE_S)
[10:26:27] [PASSED] 0x4692 (ALDERLAKE_S)
[10:26:27] [PASSED] 0x4693 (ALDERLAKE_S)
[10:26:27] [PASSED] 0x46A0 (ALDERLAKE_P)
[10:26:27] [PASSED] 0x46A1 (ALDERLAKE_P)
[10:26:27] [PASSED] 0x46A2 (ALDERLAKE_P)
[10:26:27] [PASSED] 0x46A3 (ALDERLAKE_P)
[10:26:27] [PASSED] 0x46A6 (ALDERLAKE_P)
[10:26:27] [PASSED] 0x46A8 (ALDERLAKE_P)
[10:26:27] [PASSED] 0x46AA (ALDERLAKE_P)
[10:26:27] [PASSED] 0x462A (ALDERLAKE_P)
[10:26:27] [PASSED] 0x4626 (ALDERLAKE_P)
[10:26:27] [PASSED] 0x4628 (ALDERLAKE_P)
[10:26:27] [PASSED] 0x46B0 (ALDERLAKE_P)
[10:26:27] [PASSED] 0x46B1 (ALDERLAKE_P)
[10:26:27] [PASSED] 0x46B2 (ALDERLAKE_P)
[10:26:27] [PASSED] 0x46B3 (ALDERLAKE_P)
[10:26:27] [PASSED] 0x46C0 (ALDERLAKE_P)
[10:26:27] [PASSED] 0x46C1 (ALDERLAKE_P)
[10:26:27] [PASSED] 0x46C2 (ALDERLAKE_P)
[10:26:27] [PASSED] 0x46C3 (ALDERLAKE_P)
[10:26:27] [PASSED] 0x46D0 (ALDERLAKE_N)
[10:26:27] [PASSED] 0x46D1 (ALDERLAKE_N)
[10:26:27] [PASSED] 0x46D2 (ALDERLAKE_N)
[10:26:27] [PASSED] 0x46D3 (ALDERLAKE_N)
[10:26:27] [PASSED] 0x46D4 (ALDERLAKE_N)
[10:26:27] [PASSED] 0xA721 (ALDERLAKE_P)
[10:26:27] [PASSED] 0xA7A1 (ALDERLAKE_P)
[10:26:27] [PASSED] 0xA7A9 (ALDERLAKE_P)
[10:26:27] [PASSED] 0xA7AC (ALDERLAKE_P)
[10:26:27] [PASSED] 0xA7AD (ALDERLAKE_P)
[10:26:27] [PASSED] 0xA720 (ALDERLAKE_P)
[10:26:27] [PASSED] 0xA7A0 (ALDERLAKE_P)
[10:26:27] [PASSED] 0xA7A8 (ALDERLAKE_P)
[10:26:27] [PASSED] 0xA7AA (ALDERLAKE_P)
[10:26:27] [PASSED] 0xA7AB (ALDERLAKE_P)
[10:26:27] [PASSED] 0xA780 (ALDERLAKE_S)
[10:26:27] [PASSED] 0xA781 (ALDERLAKE_S)
[10:26:27] [PASSED] 0xA782 (ALDERLAKE_S)
[10:26:27] [PASSED] 0xA783 (ALDERLAKE_S)
[10:26:27] [PASSED] 0xA788 (ALDERLAKE_S)
[10:26:27] [PASSED] 0xA789 (ALDERLAKE_S)
[10:26:27] [PASSED] 0xA78A (ALDERLAKE_S)
[10:26:27] [PASSED] 0xA78B (ALDERLAKE_S)
[10:26:27] [PASSED] 0x4905 (DG1)
[10:26:27] [PASSED] 0x4906 (DG1)
[10:26:27] [PASSED] 0x4907 (DG1)
[10:26:27] [PASSED] 0x4908 (DG1)
[10:26:27] [PASSED] 0x4909 (DG1)
[10:26:27] [PASSED] 0x56C0 (DG2)
[10:26:27] [PASSED] 0x56C2 (DG2)
[10:26:27] [PASSED] 0x56C1 (DG2)
[10:26:27] [PASSED] 0x7D51 (METEORLAKE)
[10:26:27] [PASSED] 0x7DD1 (METEORLAKE)
[10:26:27] [PASSED] 0x7D41 (METEORLAKE)
[10:26:27] [PASSED] 0x7D67 (METEORLAKE)
[10:26:27] [PASSED] 0xB640 (METEORLAKE)
[10:26:27] [PASSED] 0x56A0 (DG2)
[10:26:27] [PASSED] 0x56A1 (DG2)
[10:26:27] [PASSED] 0x56A2 (DG2)
[10:26:27] [PASSED] 0x56BE (DG2)
[10:26:27] [PASSED] 0x56BF (DG2)
[10:26:27] [PASSED] 0x5690 (DG2)
[10:26:27] [PASSED] 0x5691 (DG2)
[10:26:27] [PASSED] 0x5692 (DG2)
[10:26:27] [PASSED] 0x56A5 (DG2)
[10:26:27] [PASSED] 0x56A6 (DG2)
[10:26:27] [PASSED] 0x56B0 (DG2)
[10:26:27] [PASSED] 0x56B1 (DG2)
[10:26:27] [PASSED] 0x56BA (DG2)
[10:26:27] [PASSED] 0x56BB (DG2)
[10:26:27] [PASSED] 0x56BC (DG2)
[10:26:27] [PASSED] 0x56BD (DG2)
[10:26:27] [PASSED] 0x5693 (DG2)
[10:26:27] [PASSED] 0x5694 (DG2)
[10:26:27] [PASSED] 0x5695 (DG2)
[10:26:27] [PASSED] 0x56A3 (DG2)
[10:26:27] [PASSED] 0x56A4 (DG2)
[10:26:27] [PASSED] 0x56B2 (DG2)
[10:26:27] [PASSED] 0x56B3 (DG2)
[10:26:27] [PASSED] 0x5696 (DG2)
[10:26:27] [PASSED] 0x5697 (DG2)
[10:26:27] [PASSED] 0xB69 (PVC)
[10:26:27] [PASSED] 0xB6E (PVC)
[10:26:27] [PASSED] 0xBD4 (PVC)
[10:26:27] [PASSED] 0xBD5 (PVC)
[10:26:27] [PASSED] 0xBD6 (PVC)
[10:26:27] [PASSED] 0xBD7 (PVC)
[10:26:27] [PASSED] 0xBD8 (PVC)
[10:26:27] [PASSED] 0xBD9 (PVC)
[10:26:27] [PASSED] 0xBDA (PVC)
[10:26:27] [PASSED] 0xBDB (PVC)
[10:26:27] [PASSED] 0xBE0 (PVC)
[10:26:27] [PASSED] 0xBE1 (PVC)
[10:26:27] [PASSED] 0xBE5 (PVC)
[10:26:27] [PASSED] 0x7D40 (METEORLAKE)
[10:26:27] [PASSED] 0x7D45 (METEORLAKE)
[10:26:27] [PASSED] 0x7D55 (METEORLAKE)
[10:26:27] [PASSED] 0x7D60 (METEORLAKE)
[10:26:27] [PASSED] 0x7DD5 (METEORLAKE)
[10:26:27] [PASSED] 0x6420 (LUNARLAKE)
[10:26:27] [PASSED] 0x64A0 (LUNARLAKE)
[10:26:27] [PASSED] 0x64B0 (LUNARLAKE)
[10:26:27] [PASSED] 0xE202 (BATTLEMAGE)
[10:26:27] [PASSED] 0xE209 (BATTLEMAGE)
[10:26:27] [PASSED] 0xE20B (BATTLEMAGE)
[10:26:27] [PASSED] 0xE20C (BATTLEMAGE)
[10:26:27] [PASSED] 0xE20D (BATTLEMAGE)
[10:26:27] [PASSED] 0xE210 (BATTLEMAGE)
[10:26:27] [PASSED] 0xE211 (BATTLEMAGE)
[10:26:27] [PASSED] 0xE212 (BATTLEMAGE)
[10:26:27] [PASSED] 0xE216 (BATTLEMAGE)
[10:26:27] [PASSED] 0xE220 (BATTLEMAGE)
[10:26:27] [PASSED] 0xE221 (BATTLEMAGE)
[10:26:27] [PASSED] 0xE222 (BATTLEMAGE)
[10:26:27] [PASSED] 0xE223 (BATTLEMAGE)
[10:26:27] [PASSED] 0xB080 (PANTHERLAKE)
[10:26:27] [PASSED] 0xB081 (PANTHERLAKE)
[10:26:27] [PASSED] 0xB082 (PANTHERLAKE)
[10:26:27] [PASSED] 0xB083 (PANTHERLAKE)
[10:26:27] [PASSED] 0xB084 (PANTHERLAKE)
[10:26:27] [PASSED] 0xB085 (PANTHERLAKE)
[10:26:27] [PASSED] 0xB086 (PANTHERLAKE)
[10:26:27] [PASSED] 0xB087 (PANTHERLAKE)
[10:26:27] [PASSED] 0xB08F (PANTHERLAKE)
[10:26:27] [PASSED] 0xB090 (PANTHERLAKE)
[10:26:27] [PASSED] 0xB0A0 (PANTHERLAKE)
[10:26:27] [PASSED] 0xB0B0 (PANTHERLAKE)
[10:26:27] [PASSED] 0xFD80 (PANTHERLAKE)
[10:26:27] [PASSED] 0xFD81 (PANTHERLAKE)
[10:26:27] [PASSED] 0xD740 (NOVALAKE_S)
[10:26:27] [PASSED] 0xD741 (NOVALAKE_S)
[10:26:27] [PASSED] 0xD742 (NOVALAKE_S)
[10:26:27] [PASSED] 0xD743 (NOVALAKE_S)
[10:26:27] [PASSED] 0xD745 (NOVALAKE_S)
[10:26:27] [PASSED] 0xD74A (NOVALAKE_S)
[10:26:27] [PASSED] 0xD74B (NOVALAKE_S)
[10:26:27] [PASSED] 0x674C (CRESCENTISLAND)
[10:26:27] [PASSED] 0x674D (CRESCENTISLAND)
[10:26:27] [PASSED] 0x674E (CRESCENTISLAND)
[10:26:27] [PASSED] 0x674F (CRESCENTISLAND)
[10:26:27] [PASSED] 0x6750 (CRESCENTISLAND)
[10:26:27] [PASSED] 0xD750 (NOVALAKE_P)
[10:26:27] [PASSED] 0xD751 (NOVALAKE_P)
[10:26:27] [PASSED] 0xD752 (NOVALAKE_P)
[10:26:27] [PASSED] 0xD753 (NOVALAKE_P)
[10:26:27] [PASSED] 0xD754 (NOVALAKE_P)
[10:26:27] [PASSED] 0xD755 (NOVALAKE_P)
[10:26:27] [PASSED] 0xD756 (NOVALAKE_P)
[10:26:27] [PASSED] 0xD757 (NOVALAKE_P)
[10:26:27] [PASSED] 0xD75F (NOVALAKE_P)
[10:26:27] =============== [PASSED] check_platform_desc ===============
[10:26:27] ===================== [PASSED] xe_pci ======================
[10:26:27] ============= xe_rtp_tables_test (5 subtests) ==============
[10:26:27] ================== xe_rtp_table_gt_test  ===================
[10:26:27] [PASSED] gt_was/14011060649
[10:26:27] [PASSED] gt_was/14011059788
[10:26:27] [PASSED] gt_was/14015795083
[10:26:27] [PASSED] gt_was/16021867713
[10:26:27] [PASSED] gt_was/14019449301
[10:26:27] [PASSED] gt_was/16028005424
[10:26:27] [PASSED] gt_was/14026578760
[10:26:27] [PASSED] gt_was/1409420604
[10:26:27] [PASSED] gt_was/1408615072
[10:26:27] [PASSED] gt_was/22010523718
[10:26:27] [PASSED] gt_was/14011006942
[10:26:27] [PASSED] gt_was/14014830051
[10:26:27] [PASSED] gt_was/18018781329
[10:26:27] [PASSED] gt_was/1509235366
[10:26:27] [PASSED] gt_was/18018781329
[10:26:27] [PASSED] gt_was/16016694945
[10:26:27] [PASSED] gt_was/14018575942
[10:26:27] [PASSED] gt_was/22016670082
[10:26:27] [PASSED] gt_was/22016670082
[10:26:27] [PASSED] gt_was/14017421178
[10:26:27] [PASSED] gt_was/16025250150
[10:26:27] [PASSED] gt_was/14021871409
[10:26:27] [PASSED] gt_was/16021865536
[10:26:27] [PASSED] gt_was/14021486841
[10:26:27] [PASSED] gt_was/14025160223
[10:26:27] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[10:26:27] [PASSED] gt_was/14025635424
[10:26:27] [PASSED] gt_was/16028005424
[10:26:27] ============== [PASSED] xe_rtp_table_gt_test ===============
[10:26:27] ================== xe_rtp_table_gt_test  ===================
[10:26:27] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[10:26:27] [PASSED] gt_tunings/Tuning: 32B Access Enable
[10:26:27] [PASSED] gt_tunings/Tuning: L3 cache
[10:26:27] [PASSED] gt_tunings/Tuning: L3 cache - media
[10:26:27] [PASSED] gt_tunings/Tuning: Compression Overfetch
[10:26:27] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[10:26:27] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[10:26:27] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[10:26:27] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[10:26:27] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[10:26:27] [PASSED] gt_tunings/Tuning: Stateless compression control
[10:26:27] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[10:26:27] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[10:26:27] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[10:26:27] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[10:26:27] ============== [PASSED] xe_rtp_table_gt_test ===============
[10:26:27] ================== xe_rtp_table_oob_test  ==================
[10:26:27] [PASSED] oob_was/1607983814
[10:26:27] [PASSED] oob_was/16010904313
[10:26:27] [PASSED] oob_was/18022495364
[10:26:27] [PASSED] oob_was/22012773006
[10:26:27] [PASSED] oob_was/14014475959
[10:26:27] [PASSED] oob_was/22011391025
[10:26:27] [PASSED] oob_was/22012727170
[10:26:27] [PASSED] oob_was/22012727685
[10:26:27] [PASSED] oob_was/22016596838
[10:26:27] [PASSED] oob_was/18020744125
[10:26:27] [PASSED] oob_was/1409600907
[10:26:27] [PASSED] oob_was/22014953428
[10:26:27] [PASSED] oob_was/16017236439
[10:26:27] [PASSED] oob_was/14019821291
[10:26:27] [PASSED] oob_was/14015076503
[10:26:27] [PASSED] oob_was/14018913170
[10:26:27] [PASSED] oob_was/14018094691
[10:26:27] [PASSED] oob_was/18024947630
[10:26:27] [PASSED] oob_was/16022287689
[10:26:27] [PASSED] oob_was/13011645652
[10:26:27] [PASSED] oob_was/14022293748
[10:26:27] [PASSED] oob_was/22019794406
[10:26:27] [PASSED] oob_was/22019338487
[10:26:27] [PASSED] oob_was/16023588340
[10:26:27] [PASSED] oob_was/14019789679
[10:26:27] [PASSED] oob_was/14022866841
[10:26:27] [PASSED] oob_was/16021333562
[10:26:27] [PASSED] oob_was/14016712196
[10:26:27] [PASSED] oob_was/14015568240
[10:26:27] [PASSED] oob_was/18013179988
[10:26:27] [PASSED] oob_was/1508761755
[10:26:27] [PASSED] oob_was/16023105232
[10:26:27] [PASSED] oob_was/16026508708
[10:26:27] [PASSED] oob_was/14020001231
[10:26:27] [PASSED] oob_was/16023683509
[10:26:27] [PASSED] oob_was/14025515070
[10:26:27] [PASSED] oob_was/15015404425_disable
[10:26:27] [PASSED] oob_was/16026007364
[10:26:27] [PASSED] oob_was/14020316580
[10:26:27] [PASSED] oob_was/14025883347
[10:26:27] [PASSED] oob_was/16029380221
[10:26:27] [PASSED] oob_was/22022079272
[10:26:27] [PASSED] oob_was/16029897822
[10:26:27] [PASSED] oob_was/14027054324
[10:26:27] ============== [PASSED] xe_rtp_table_oob_test ==============
[10:26:27] ================ xe_rtp_table_dev_oob_test  ================
[10:26:27] [PASSED] device_oob_was/22010954014
[10:26:27] [PASSED] device_oob_was/15015404425
[10:26:27] [PASSED] device_oob_was/22019338487_display
[10:26:27] [PASSED] device_oob_was/14022085890
[10:26:27] [PASSED] device_oob_was/14026539277
[10:26:27] [PASSED] device_oob_was/14026633728
[10:26:27] [PASSED] device_oob_was/14026746987
[10:26:27] [PASSED] device_oob_was/14026779378
[10:26:27] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[10:26:27] ========== xe_rtp_table_missing_upper_bound_test  ==========
[10:26:27] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[10:26:27] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[10:26:27] [PASSED] register_whitelist/1806527549
[10:26:27] [PASSED] register_whitelist/allow_read_ctx_timestamp
[10:26:27] [PASSED] register_whitelist/allow_read_queue_timestamp
[10:26:27] [PASSED] register_whitelist/16014440446
[10:26:27] [PASSED] register_whitelist/16017236439
[10:26:27] [PASSED] register_whitelist/16020183090
[10:26:27] [PASSED] register_whitelist/14024997852
[10:26:27] [PASSED] register_whitelist/14024997852
[10:26:27] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[10:26:27] =============== [PASSED] xe_rtp_tables_test ================
[10:26:27] =================== xe_rtp (3 subtests) ====================
[10:26:27] =================== xe_rtp_rules_tests  ====================
[10:26:27] [PASSED] no
[10:26:27] [PASSED] yes
[10:26:27] [PASSED] no-and-no
[10:26:27] [PASSED] no-and-yes
[10:26:27] [PASSED] yes-and-no
[10:26:27] [PASSED] yes-and-yes
[10:26:27] [PASSED] no-or-no
[10:26:27] [PASSED] no-or-yes
[10:26:27] [PASSED] yes-or-no
[10:26:27] [PASSED] yes-or-yes
[10:26:27] [PASSED] no-yes-or-yes-no
[10:26:27] [PASSED] no-yes-or-yes-yes
[10:26:27] [PASSED] yes-yes-or-no-yes
[10:26:27] [PASSED] yes-yes-or-yes-yes
[10:26:27] [PASSED] no-no-or-yes-or-no
[10:26:27] [PASSED] or
[10:26:27] [PASSED] or-yes
[10:26:27] [PASSED] or-no
[10:26:27] [PASSED] yes-or
[10:26:27] [PASSED] no-or
[10:26:27] [PASSED] no-or-or-yes
[10:26:27] [PASSED] yes-or-or-no
[10:26:27] [PASSED] no-or-or-no
[10:26:27] [PASSED] missing-context-engine-class
[10:26:27] [PASSED] missing-context-engine-class-or-yes
[10:26:27] [PASSED] missing-context-engine-class-or-or-yes
[10:26:27] =============== [PASSED] xe_rtp_rules_tests ================
[10:26:27] =============== xe_rtp_process_to_sr_tests  ================
[10:26:27] [PASSED] coalesce-same-reg
[10:26:27] [PASSED] coalesce-same-reg-literal-and-func
[10:26:27] [PASSED] no-match-no-add
[10:26:27] [PASSED] two-regs-two-entries
[10:26:27] [PASSED] clr-one-set-other
[10:26:27] [PASSED] set-field
[10:26:27] [PASSED] conflict-duplicate
[10:26:27] [PASSED] conflict-not-disjoint
[10:26:27] [PASSED] conflict-not-disjoint-literal-and-func
[10:26:27] [PASSED] conflict-reg-type
[10:26:27] [PASSED] bad-mcr-reg-forced-to-regular
[10:26:27] [PASSED] bad-regular-reg-forced-to-mcr
[10:26:27] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[10:26:27] ================== xe_rtp_process_tests  ===================
[10:26:27] [PASSED] active1
[10:26:27] [PASSED] active2
[10:26:27] [PASSED] active-inactive
[10:26:27] [PASSED] inactive-active
[10:26:27] [PASSED] inactive-active-inactive
[10:26:27] [PASSED] inactive-inactive-inactive
[10:26:27] ============== [PASSED] xe_rtp_process_tests ===============
[10:26:27] ===================== [PASSED] xe_rtp ======================
[10:26:27] ==================== xe_wa (1 subtest) =====================
[10:26:27] ======================== xe_wa_gt  =========================
[10:26:27] [PASSED] TIGERLAKE B0
[10:26:27] [PASSED] DG1 A0
[10:26:27] [PASSED] DG1 B0
[10:26:27] [PASSED] ALDERLAKE_S A0
[10:26:27] [PASSED] ALDERLAKE_S B0
[10:26:27] [PASSED] ALDERLAKE_S C0
[10:26:27] [PASSED] ALDERLAKE_S D0
[10:26:27] [PASSED] ALDERLAKE_P A0
[10:26:27] [PASSED] ALDERLAKE_P B0
[10:26:27] [PASSED] ALDERLAKE_P C0
[10:26:27] [PASSED] ALDERLAKE_S RPLS D0
[10:26:27] [PASSED] ALDERLAKE_P RPLU E0
[10:26:27] [PASSED] DG2 G10 C0
[10:26:27] [PASSED] DG2 G11 B1
[10:26:27] [PASSED] DG2 G12 A1
[10:26:27] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[10:26:27] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[10:26:27] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[10:26:27] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[10:26:27] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[10:26:27] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[10:26:27] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[10:26:27] ==================== [PASSED] xe_wa_gt =====================
[10:26:27] ====================== [PASSED] xe_wa ======================
[10:26:27] ============================================================
[10:26:27] Testing complete. Ran 819 tests: passed: 791, skipped: 28
[10:26:27] Elapsed time: 37.184s total, 1.872s configuring, 34.545s building, 0.716s 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
[10:26:28] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:26:29] 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
[10:26:54] Starting KUnit Kernel (1/1)...
[10:26:54] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:26:55] ============= refcount_interrupt (4 subtests) ==============
[10:26:55] [PASSED] test_single_irq_change
[10:26:55] [PASSED] test_nested_irq_change
[10:26:55] [PASSED] test_multiple_irq_change
[10:26:55] [PASSED] test_irq_save
[10:26:55] =============== [PASSED] refcount_interrupt ================
[10:26:55] ============ drm_test_pick_cmdline (2 subtests) ============
[10:26:55] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[10:26:55] =============== drm_test_pick_cmdline_named  ===============
[10:26:55] [PASSED] NTSC
[10:26:55] [PASSED] NTSC-J
[10:26:55] [PASSED] PAL
[10:26:55] [PASSED] PAL-M
[10:26:55] =========== [PASSED] drm_test_pick_cmdline_named ===========
[10:26:55] ============== [PASSED] drm_test_pick_cmdline ==============
[10:26:55] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[10:26:55] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[10:26:55] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[10:26:55] =========== drm_validate_clone_mode (2 subtests) ===========
[10:26:55] ============== drm_test_check_in_clone_mode  ===============
[10:26:55] [PASSED] in_clone_mode
[10:26:55] [PASSED] not_in_clone_mode
[10:26:55] ========== [PASSED] drm_test_check_in_clone_mode ===========
[10:26:55] =============== drm_test_check_valid_clones  ===============
[10:26:55] [PASSED] not_in_clone_mode
[10:26:55] [PASSED] valid_clone
[10:26:55] [PASSED] invalid_clone
[10:26:55] =========== [PASSED] drm_test_check_valid_clones ===========
[10:26:55] ============= [PASSED] drm_validate_clone_mode =============
[10:26:55] ============= drm_validate_modeset (1 subtest) =============
[10:26:55] [PASSED] drm_test_check_connector_changed_modeset
[10:26:55] ============== [PASSED] drm_validate_modeset ===============
[10:26:55] ====== drm_test_bridge_get_current_state (1 subtest) =======
[10:26:55] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[10:26:55] ======== [PASSED] drm_test_bridge_get_current_state ========
[10:26:55] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[10:26:55] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[10:26:55] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[10:26:55] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[10:26:55] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[10:26:55] ============== drm_bridge_alloc (2 subtests) ===============
[10:26:55] [PASSED] drm_test_drm_bridge_alloc_basic
[10:26:55] [PASSED] drm_test_drm_bridge_alloc_get_put
[10:26:55] ================ [PASSED] drm_bridge_alloc =================
[10:26:55] ============= drm_bridge_bus_fmt (5 subtests) ==============
[10:26:55] [PASSED] drm_test_bridge_rgb_yuv_rgb
[10:26:55] [PASSED] drm_test_bridge_must_convert_to_yuv444
[10:26:55] [PASSED] drm_test_bridge_hdmi_auto_rgb
[10:26:55] [PASSED] drm_test_bridge_auto_first
[10:26:55] [PASSED] drm_test_bridge_rgb_yuv_no_path
[10:26:55] =============== [PASSED] drm_bridge_bus_fmt ================
[10:26:55] ============= drm_cmdline_parser (40 subtests) =============
[10:26:55] [PASSED] drm_test_cmdline_force_d_only
[10:26:55] [PASSED] drm_test_cmdline_force_D_only_dvi
[10:26:55] [PASSED] drm_test_cmdline_force_D_only_hdmi
[10:26:55] [PASSED] drm_test_cmdline_force_D_only_not_digital
[10:26:55] [PASSED] drm_test_cmdline_force_e_only
[10:26:55] [PASSED] drm_test_cmdline_res
[10:26:55] [PASSED] drm_test_cmdline_res_vesa
[10:26:55] [PASSED] drm_test_cmdline_res_vesa_rblank
[10:26:55] [PASSED] drm_test_cmdline_res_rblank
[10:26:55] [PASSED] drm_test_cmdline_res_bpp
[10:26:55] [PASSED] drm_test_cmdline_res_refresh
[10:26:55] [PASSED] drm_test_cmdline_res_bpp_refresh
[10:26:55] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[10:26:55] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[10:26:55] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[10:26:55] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[10:26:55] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[10:26:55] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[10:26:55] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[10:26:55] [PASSED] drm_test_cmdline_res_margins_force_on
[10:26:55] [PASSED] drm_test_cmdline_res_vesa_margins
[10:26:55] [PASSED] drm_test_cmdline_name
[10:26:55] [PASSED] drm_test_cmdline_name_bpp
[10:26:55] [PASSED] drm_test_cmdline_name_option
[10:26:55] [PASSED] drm_test_cmdline_name_bpp_option
[10:26:55] [PASSED] drm_test_cmdline_rotate_0
[10:26:55] [PASSED] drm_test_cmdline_rotate_90
[10:26:55] [PASSED] drm_test_cmdline_rotate_180
[10:26:55] [PASSED] drm_test_cmdline_rotate_270
[10:26:55] [PASSED] drm_test_cmdline_hmirror
[10:26:55] [PASSED] drm_test_cmdline_vmirror
[10:26:55] [PASSED] drm_test_cmdline_margin_options
[10:26:55] [PASSED] drm_test_cmdline_multiple_options
[10:26:55] [PASSED] drm_test_cmdline_bpp_extra_and_option
[10:26:55] [PASSED] drm_test_cmdline_extra_and_option
[10:26:55] [PASSED] drm_test_cmdline_freestanding_options
[10:26:55] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[10:26:55] [PASSED] drm_test_cmdline_panel_orientation
[10:26:55] ================ drm_test_cmdline_invalid  =================
[10:26:55] [PASSED] margin_only
[10:26:55] [PASSED] interlace_only
[10:26:55] [PASSED] res_missing_x
[10:26:55] [PASSED] res_missing_y
[10:26:55] [PASSED] res_bad_y
[10:26:55] [PASSED] res_missing_y_bpp
[10:26:55] [PASSED] res_bad_bpp
[10:26:55] [PASSED] res_bad_refresh
[10:26:55] [PASSED] res_bpp_refresh_force_on_off
[10:26:55] [PASSED] res_invalid_mode
[10:26:55] [PASSED] res_bpp_wrong_place_mode
[10:26:55] [PASSED] name_bpp_refresh
[10:26:55] [PASSED] name_refresh
[10:26:55] [PASSED] name_refresh_wrong_mode
[10:26:55] [PASSED] name_refresh_invalid_mode
[10:26:55] [PASSED] rotate_multiple
[10:26:55] [PASSED] rotate_invalid_val
[10:26:55] [PASSED] rotate_truncated
[10:26:55] [PASSED] invalid_option
[10:26:55] [PASSED] invalid_tv_option
[10:26:55] [PASSED] truncated_tv_option
[10:26:55] ============ [PASSED] drm_test_cmdline_invalid =============
[10:26:55] =============== drm_test_cmdline_tv_options  ===============
[10:26:55] [PASSED] NTSC
[10:26:55] [PASSED] NTSC_443
[10:26:55] [PASSED] NTSC_J
[10:26:55] [PASSED] PAL
[10:26:55] [PASSED] PAL_M
[10:26:55] [PASSED] PAL_N
[10:26:55] [PASSED] SECAM
[10:26:55] [PASSED] MONO_525
[10:26:55] [PASSED] MONO_625
[10:26:55] =========== [PASSED] drm_test_cmdline_tv_options ===========
[10:26:55] =============== [PASSED] drm_cmdline_parser ================
[10:26:55] ========== drmm_connector_hdmi_init (20 subtests) ==========
[10:26:55] [PASSED] drm_test_connector_hdmi_init_valid
[10:26:55] [PASSED] drm_test_connector_hdmi_init_bpc_8
[10:26:55] [PASSED] drm_test_connector_hdmi_init_bpc_10
[10:26:55] [PASSED] drm_test_connector_hdmi_init_bpc_12
[10:26:55] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[10:26:55] [PASSED] drm_test_connector_hdmi_init_bpc_null
[10:26:55] [PASSED] drm_test_connector_hdmi_init_formats_empty
[10:26:55] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[10:26:55] === drm_test_connector_hdmi_init_formats_yuv420_allowed  ===
[10:26:55] [PASSED] supported_formats=0x9 yuv420_allowed=1
[10:26:55] [PASSED] supported_formats=0x9 yuv420_allowed=0
[10:26:55] [PASSED] supported_formats=0x5 yuv420_allowed=1
[10:26:55] [PASSED] supported_formats=0x5 yuv420_allowed=0
[10:26:55] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[10:26:55] [PASSED] drm_test_connector_hdmi_init_null_ddc
[10:26:55] [PASSED] drm_test_connector_hdmi_init_null_product
[10:26:55] [PASSED] drm_test_connector_hdmi_init_null_vendor
[10:26:55] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[10:26:55] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[10:26:55] [PASSED] drm_test_connector_hdmi_init_product_valid
[10:26:55] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[10:26:55] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[10:26:55] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[10:26:55] ========= drm_test_connector_hdmi_init_type_valid  =========
[10:26:55] [PASSED] HDMI-A
[10:26:55] [PASSED] HDMI-B
[10:26:55] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[10:26:55] ======== drm_test_connector_hdmi_init_type_invalid  ========
[10:26:55] [PASSED] Unknown
[10:26:55] [PASSED] VGA
[10:26:55] [PASSED] DVI-I
[10:26:55] [PASSED] DVI-D
[10:26:55] [PASSED] DVI-A
[10:26:55] [PASSED] Composite
[10:26:55] [PASSED] SVIDEO
[10:26:55] [PASSED] LVDS
[10:26:55] [PASSED] Component
[10:26:55] [PASSED] DIN
[10:26:55] [PASSED] DP
[10:26:55] [PASSED] TV
[10:26:55] [PASSED] eDP
[10:26:55] [PASSED] Virtual
[10:26:55] [PASSED] DSI
[10:26:55] [PASSED] DPI
[10:26:55] [PASSED] Writeback
[10:26:55] [PASSED] SPI
[10:26:55] [PASSED] USB
[10:26:55] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[10:26:55] ============ [PASSED] drmm_connector_hdmi_init =============
[10:26:55] ============= drmm_connector_init (3 subtests) =============
[10:26:55] [PASSED] drm_test_drmm_connector_init
[10:26:55] [PASSED] drm_test_drmm_connector_init_null_ddc
[10:26:55] ========= drm_test_drmm_connector_init_type_valid  =========
[10:26:55] [PASSED] Unknown
[10:26:55] [PASSED] VGA
[10:26:55] [PASSED] DVI-I
[10:26:55] [PASSED] DVI-D
[10:26:55] [PASSED] DVI-A
[10:26:55] [PASSED] Composite
[10:26:55] [PASSED] SVIDEO
[10:26:55] [PASSED] LVDS
[10:26:55] [PASSED] Component
[10:26:55] [PASSED] DIN
[10:26:55] [PASSED] DP
[10:26:55] [PASSED] HDMI-A
[10:26:55] [PASSED] HDMI-B
[10:26:55] [PASSED] TV
[10:26:55] [PASSED] eDP
[10:26:55] [PASSED] Virtual
[10:26:55] [PASSED] DSI
[10:26:55] [PASSED] DPI
[10:26:55] [PASSED] Writeback
[10:26:55] [PASSED] SPI
[10:26:55] [PASSED] USB
[10:26:55] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[10:26:55] =============== [PASSED] drmm_connector_init ===============
[10:26:55] ========= drm_connector_dynamic_init (6 subtests) ==========
[10:26:55] [PASSED] drm_test_drm_connector_dynamic_init
[10:26:55] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[10:26:55] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[10:26:55] [PASSED] drm_test_drm_connector_dynamic_init_properties
[10:26:55] ===== drm_test_drm_connector_dynamic_init_type_valid  ======
[10:26:55] [PASSED] Unknown
[10:26:55] [PASSED] VGA
[10:26:55] [PASSED] DVI-I
[10:26:55] [PASSED] DVI-D
[10:26:55] [PASSED] DVI-A
[10:26:55] [PASSED] Composite
[10:26:55] [PASSED] SVIDEO
[10:26:55] [PASSED] LVDS
[10:26:55] [PASSED] Component
[10:26:55] [PASSED] DIN
[10:26:55] [PASSED] DP
[10:26:55] [PASSED] HDMI-A
[10:26:55] [PASSED] HDMI-B
[10:26:55] [PASSED] TV
[10:26:55] [PASSED] eDP
[10:26:55] [PASSED] Virtual
[10:26:55] [PASSED] DSI
[10:26:55] [PASSED] DPI
[10:26:55] [PASSED] Writeback
[10:26:55] [PASSED] SPI
[10:26:55] [PASSED] USB
[10:26:55] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[10:26:55] ======== drm_test_drm_connector_dynamic_init_name  =========
[10:26:55] [PASSED] Unknown
[10:26:55] [PASSED] VGA
[10:26:55] [PASSED] DVI-I
[10:26:55] [PASSED] DVI-D
[10:26:55] [PASSED] DVI-A
[10:26:55] [PASSED] Composite
[10:26:55] [PASSED] SVIDEO
[10:26:55] [PASSED] LVDS
[10:26:55] [PASSED] Component
[10:26:55] [PASSED] DIN
[10:26:55] [PASSED] DP
[10:26:55] [PASSED] HDMI-A
[10:26:55] [PASSED] HDMI-B
[10:26:55] [PASSED] TV
[10:26:55] [PASSED] eDP
[10:26:55] [PASSED] Virtual
[10:26:55] [PASSED] DSI
[10:26:55] [PASSED] DPI
[10:26:55] [PASSED] Writeback
[10:26:55] [PASSED] SPI
[10:26:55] [PASSED] USB
[10:26:55] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[10:26:55] =========== [PASSED] drm_connector_dynamic_init ============
[10:26:55] ==== drm_connector_dynamic_register_early (4 subtests) =====
[10:26:55] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[10:26:55] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[10:26:55] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[10:26:55] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[10:26:55] ====== [PASSED] drm_connector_dynamic_register_early =======
[10:26:55] ======= drm_connector_dynamic_register (7 subtests) ========
[10:26:55] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[10:26:55] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[10:26:55] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[10:26:55] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[10:26:55] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[10:26:55] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[10:26:55] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[10:26:55] ========= [PASSED] drm_connector_dynamic_register ==========
[10:26:55] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[10:26:55] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[10:26:55] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[10:26:55] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[10:26:55] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[10:26:55] ========== drm_test_get_tv_mode_from_name_valid  ===========
[10:26:55] [PASSED] NTSC
[10:26:55] [PASSED] NTSC-443
[10:26:55] [PASSED] NTSC-J
[10:26:55] [PASSED] PAL
[10:26:55] [PASSED] PAL-M
[10:26:55] [PASSED] PAL-N
[10:26:55] [PASSED] SECAM
[10:26:55] [PASSED] Mono
[10:26:55] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[10:26:55] [PASSED] drm_test_get_tv_mode_from_name_truncated
[10:26:55] ============ [PASSED] drm_get_tv_mode_from_name ============
[10:26:55] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[10:26:55] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[10:26:55] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[10:26:55] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[10:26:55] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[10:26:55] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[10:26:55] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[10:26:55] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid  =
[10:26:55] [PASSED] VIC 96
[10:26:55] [PASSED] VIC 97
[10:26:55] [PASSED] VIC 101
[10:26:55] [PASSED] VIC 102
[10:26:55] [PASSED] VIC 106
[10:26:55] [PASSED] VIC 107
[10:26:55] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[10:26:55] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[10:26:55] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[10:26:55] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[10:26:55] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[10:26:55] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[10:26:55] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[10:26:55] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[10:26:55] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name  ====
[10:26:55] [PASSED] Automatic
[10:26:55] [PASSED] Full
[10:26:55] [PASSED] Limited 16:235
[10:26:55] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[10:26:55] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[10:26:55] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[10:26:55] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[10:26:55] === drm_test_drm_hdmi_connector_get_output_format_name  ====
[10:26:55] [PASSED] RGB
[10:26:55] [PASSED] YUV 4:2:0
[10:26:55] [PASSED] YUV 4:2:2
[10:26:55] [PASSED] YUV 4:4:4
[10:26:55] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[10:26:55] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[10:26:55] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[10:26:55] ============= drm_damage_helper (21 subtests) ==============
[10:26:55] [PASSED] drm_test_damage_iter_no_damage
[10:26:55] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[10:26:55] [PASSED] drm_test_damage_iter_no_damage_src_moved
[10:26:55] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[10:26:55] [PASSED] drm_test_damage_iter_no_damage_not_visible
[10:26:55] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[10:26:55] [PASSED] drm_test_damage_iter_no_damage_no_fb
[10:26:55] [PASSED] drm_test_damage_iter_simple_damage
[10:26:55] [PASSED] drm_test_damage_iter_single_damage
[10:26:55] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[10:26:55] [PASSED] drm_test_damage_iter_single_damage_outside_src
[10:26:55] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[10:26:55] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[10:26:55] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[10:26:55] [PASSED] drm_test_damage_iter_single_damage_src_moved
[10:26:55] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[10:26:55] [PASSED] drm_test_damage_iter_damage
[10:26:55] [PASSED] drm_test_damage_iter_damage_one_intersect
[10:26:55] [PASSED] drm_test_damage_iter_damage_one_outside
[10:26:55] [PASSED] drm_test_damage_iter_damage_src_moved
[10:26:55] [PASSED] drm_test_damage_iter_damage_not_visible
[10:26:55] ================ [PASSED] drm_damage_helper ================
[10:26:55] ============== drm_dp_mst_helper (3 subtests) ==============
[10:26:55] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[10:26:55] [PASSED] Clock 154000 BPP 30 DSC disabled
[10:26:55] [PASSED] Clock 234000 BPP 30 DSC disabled
[10:26:55] [PASSED] Clock 297000 BPP 24 DSC disabled
[10:26:55] [PASSED] Clock 332880 BPP 24 DSC enabled
[10:26:55] [PASSED] Clock 324540 BPP 24 DSC enabled
[10:26:55] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[10:26:55] ============== drm_test_dp_mst_calc_pbn_div  ===============
[10:26:55] [PASSED] Link rate 2000000 lane count 4
[10:26:55] [PASSED] Link rate 2000000 lane count 2
[10:26:55] [PASSED] Link rate 2000000 lane count 1
[10:26:55] [PASSED] Link rate 1350000 lane count 4
[10:26:55] [PASSED] Link rate 1350000 lane count 2
[10:26:55] [PASSED] Link rate 1350000 lane count 1
[10:26:55] [PASSED] Link rate 1000000 lane count 4
[10:26:55] [PASSED] Link rate 1000000 lane count 2
[10:26:55] [PASSED] Link rate 1000000 lane count 1
[10:26:55] [PASSED] Link rate 810000 lane count 4
[10:26:55] [PASSED] Link rate 810000 lane count 2
[10:26:55] [PASSED] Link rate 810000 lane count 1
[10:26:55] [PASSED] Link rate 540000 lane count 4
[10:26:55] [PASSED] Link rate 540000 lane count 2
[10:26:55] [PASSED] Link rate 540000 lane count 1
[10:26:55] [PASSED] Link rate 270000 lane count 4
[10:26:55] [PASSED] Link rate 270000 lane count 2
[10:26:55] [PASSED] Link rate 270000 lane count 1
[10:26:55] [PASSED] Link rate 162000 lane count 4
[10:26:55] [PASSED] Link rate 162000 lane count 2
[10:26:55] [PASSED] Link rate 162000 lane count 1
[10:26:55] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[10:26:55] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[10:26:55] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[10:26:55] [PASSED] DP_POWER_UP_PHY with port number
[10:26:55] [PASSED] DP_POWER_DOWN_PHY with port number
[10:26:55] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[10:26:55] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[10:26:55] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[10:26:55] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[10:26:55] [PASSED] DP_QUERY_PAYLOAD with port number
[10:26:55] [PASSED] DP_QUERY_PAYLOAD with VCPI
[10:26:55] [PASSED] DP_REMOTE_DPCD_READ with port number
[10:26:55] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[10:26:55] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[10:26:55] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[10:26:55] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[10:26:55] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[10:26:55] [PASSED] DP_REMOTE_I2C_READ with port number
[10:26:55] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[10:26:55] [PASSED] DP_REMOTE_I2C_READ with transactions array
[10:26:55] [PASSED] DP_REMOTE_I2C_WRITE with port number
[10:26:55] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[10:26:55] [PASSED] DP_REMOTE_I2C_WRITE with data array
[10:26:55] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[10:26:55] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[10:26:55] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[10:26:55] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[10:26:55] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[10:26:55] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[10:26:55] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[10:26:55] ================ [PASSED] drm_dp_mst_helper ================
[10:26:55] ================== drm_exec (7 subtests) ===================
[10:26:55] [PASSED] sanitycheck
[10:26:55] [PASSED] test_lock
[10:26:55] [PASSED] test_lock_unlock
[10:26:55] [PASSED] test_duplicates
[10:26:55] [PASSED] test_prepare
[10:26:55] [PASSED] test_prepare_array
[10:26:55] [PASSED] test_multiple_loops
[10:26:55] ==================== [PASSED] drm_exec =====================
[10:26:55] =========== drm_format_helper_test (17 subtests) ===========
[10:26:55] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[10:26:55] [PASSED] single_pixel_source_buffer
[10:26:55] [PASSED] single_pixel_clip_rectangle
[10:26:55] [PASSED] well_known_colors
[10:26:55] [PASSED] destination_pitch
[10:26:55] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[10:26:55] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[10:26:55] [PASSED] single_pixel_source_buffer
[10:26:55] [PASSED] single_pixel_clip_rectangle
[10:26:55] [PASSED] well_known_colors
[10:26:55] [PASSED] destination_pitch
[10:26:55] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[10:26:55] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[10:26:55] [PASSED] single_pixel_source_buffer
[10:26:55] [PASSED] single_pixel_clip_rectangle
[10:26:55] [PASSED] well_known_colors
[10:26:55] [PASSED] destination_pitch
[10:26:55] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[10:26:55] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[10:26:55] [PASSED] single_pixel_source_buffer
[10:26:55] [PASSED] single_pixel_clip_rectangle
[10:26:55] [PASSED] well_known_colors
[10:26:55] [PASSED] destination_pitch
[10:26:55] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[10:26:55] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[10:26:55] [PASSED] single_pixel_source_buffer
[10:26:55] [PASSED] single_pixel_clip_rectangle
[10:26:55] [PASSED] well_known_colors
[10:26:55] [PASSED] destination_pitch
[10:26:55] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[10:26:55] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[10:26:55] [PASSED] single_pixel_source_buffer
[10:26:55] [PASSED] single_pixel_clip_rectangle
[10:26:55] [PASSED] well_known_colors
[10:26:55] [PASSED] destination_pitch
[10:26:55] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[10:26:55] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[10:26:55] [PASSED] single_pixel_source_buffer
[10:26:55] [PASSED] single_pixel_clip_rectangle
[10:26:55] [PASSED] well_known_colors
[10:26:55] [PASSED] destination_pitch
[10:26:55] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[10:26:55] ============= drm_test_fb_xrgb8888_to_bgr888  ==============
[10:26:55] [PASSED] single_pixel_source_buffer
[10:26:55] [PASSED] single_pixel_clip_rectangle
[10:26:55] [PASSED] well_known_colors
[10:26:55] [PASSED] destination_pitch
[10:26:55] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[10:26:55] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[10:26:55] [PASSED] single_pixel_source_buffer
[10:26:55] [PASSED] single_pixel_clip_rectangle
[10:26:55] [PASSED] well_known_colors
[10:26:55] [PASSED] destination_pitch
[10:26:55] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[10:26:55] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[10:26:55] [PASSED] single_pixel_source_buffer
[10:26:55] [PASSED] single_pixel_clip_rectangle
[10:26:55] [PASSED] well_known_colors
[10:26:55] [PASSED] destination_pitch
[10:26:55] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[10:26:55] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[10:26:55] [PASSED] single_pixel_source_buffer
[10:26:55] [PASSED] single_pixel_clip_rectangle
[10:26:55] [PASSED] well_known_colors
[10:26:55] [PASSED] destination_pitch
[10:26:55] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[10:26:55] ============== drm_test_fb_xrgb8888_to_mono  ===============
[10:26:55] [PASSED] single_pixel_source_buffer
[10:26:55] [PASSED] single_pixel_clip_rectangle
[10:26:55] [PASSED] well_known_colors
[10:26:55] [PASSED] destination_pitch
[10:26:55] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[10:26:55] ==================== drm_test_fb_swab  =====================
[10:26:55] [PASSED] single_pixel_source_buffer
[10:26:55] [PASSED] single_pixel_clip_rectangle
[10:26:55] [PASSED] well_known_colors
[10:26:55] [PASSED] destination_pitch
[10:26:55] ================ [PASSED] drm_test_fb_swab =================
[10:26:55] ============ drm_test_fb_xrgb8888_to_xbgr8888  =============
[10:26:55] [PASSED] single_pixel_source_buffer
[10:26:55] [PASSED] single_pixel_clip_rectangle
[10:26:55] [PASSED] well_known_colors
[10:26:55] [PASSED] destination_pitch
[10:26:55] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[10:26:55] ============ drm_test_fb_xrgb8888_to_abgr8888  =============
[10:26:55] [PASSED] single_pixel_source_buffer
[10:26:55] [PASSED] single_pixel_clip_rectangle
[10:26:55] [PASSED] well_known_colors
[10:26:55] [PASSED] destination_pitch
[10:26:55] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[10:26:55] ================= drm_test_fb_clip_offset  =================
[10:26:55] [PASSED] pass through
[10:26:55] [PASSED] horizontal offset
[10:26:55] [PASSED] vertical offset
[10:26:55] [PASSED] horizontal and vertical offset
[10:26:55] [PASSED] horizontal offset (custom pitch)
[10:26:55] [PASSED] vertical offset (custom pitch)
[10:26:55] [PASSED] horizontal and vertical offset (custom pitch)
[10:26:55] ============= [PASSED] drm_test_fb_clip_offset =============
[10:26:55] =================== drm_test_fb_memcpy  ====================
[10:26:55] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[10:26:55] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[10:26:55] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[10:26:55] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[10:26:55] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[10:26:55] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[10:26:55] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[10:26:55] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[10:26:55] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[10:26:55] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[10:26:55] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[10:26:55] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[10:26:55] =============== [PASSED] drm_test_fb_memcpy ================
[10:26:55] ============= [PASSED] drm_format_helper_test ==============
[10:26:55] ================= drm_format (18 subtests) =================
[10:26:55] [PASSED] drm_test_format_block_width_invalid
[10:26:55] [PASSED] drm_test_format_block_width_one_plane
[10:26:55] [PASSED] drm_test_format_block_width_two_plane
[10:26:55] [PASSED] drm_test_format_block_width_three_plane
[10:26:55] [PASSED] drm_test_format_block_width_tiled
[10:26:55] [PASSED] drm_test_format_block_height_invalid
[10:26:55] [PASSED] drm_test_format_block_height_one_plane
[10:26:55] [PASSED] drm_test_format_block_height_two_plane
[10:26:55] [PASSED] drm_test_format_block_height_three_plane
[10:26:55] [PASSED] drm_test_format_block_height_tiled
[10:26:55] [PASSED] drm_test_format_min_pitch_invalid
[10:26:55] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[10:26:55] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[10:26:55] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[10:26:55] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[10:26:55] [PASSED] drm_test_format_min_pitch_two_plane
[10:26:55] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[10:26:55] [PASSED] drm_test_format_min_pitch_tiled
[10:26:55] =================== [PASSED] drm_format ====================
[10:26:55] ============== drm_framebuffer (10 subtests) ===============
[10:26:55] ========== drm_test_framebuffer_check_src_coords  ==========
[10:26:55] [PASSED] Success: source fits into fb
[10:26:55] [PASSED] Fail: overflowing fb with x-axis coordinate
[10:26:55] [PASSED] Fail: overflowing fb with y-axis coordinate
[10:26:55] [PASSED] Fail: overflowing fb with source width
[10:26:55] [PASSED] Fail: overflowing fb with source height
[10:26:55] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[10:26:55] [PASSED] drm_test_framebuffer_cleanup
[10:26:55] =============== drm_test_framebuffer_create  ===============
[10:26:55] [PASSED] ABGR8888 normal sizes
[10:26:55] [PASSED] ABGR8888 max sizes
[10:26:55] [PASSED] ABGR8888 pitch greater than min required
[10:26:55] [PASSED] ABGR8888 pitch less than min required
[10:26:55] [PASSED] ABGR8888 Invalid width
[10:26:55] [PASSED] ABGR8888 Invalid buffer handle
[10:26:55] [PASSED] No pixel format
[10:26:55] [PASSED] ABGR8888 Width 0
[10:26:55] [PASSED] ABGR8888 Height 0
[10:26:55] [PASSED] ABGR8888 Out of bound height * pitch combination
[10:26:55] [PASSED] ABGR8888 Large buffer offset
[10:26:55] [PASSED] ABGR8888 Buffer offset for inexistent plane
[10:26:55] [PASSED] ABGR8888 Invalid flag
[10:26:55] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[10:26:55] [PASSED] ABGR8888 Valid buffer modifier
[10:26:55] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[10:26:55] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[10:26:55] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[10:26:55] [PASSED] NV12 Normal sizes
[10:26:55] [PASSED] NV12 Max sizes
[10:26:55] [PASSED] NV12 Invalid pitch
[10:26:55] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[10:26:55] [PASSED] NV12 different  modifier per-plane
[10:26:55] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[10:26:55] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[10:26:55] [PASSED] NV12 Modifier for inexistent plane
[10:26:55] [PASSED] NV12 Handle for inexistent plane
[10:26:55] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[10:26:55] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[10:26:55] [PASSED] YVU420 Normal sizes
[10:26:55] [PASSED] YVU420 Max sizes
[10:26:55] [PASSED] YVU420 Invalid pitch
[10:26:55] [PASSED] YVU420 Different pitches
[10:26:55] [PASSED] YVU420 Different buffer offsets/pitches
[10:26:55] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[10:26:55] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[10:26:55] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[10:26:55] [PASSED] YVU420 Valid modifier
[10:26:55] [PASSED] YVU420 Different modifiers per plane
[10:26:55] [PASSED] YVU420 Modifier for inexistent plane
[10:26:55] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[10:26:55] [PASSED] X0L2 Normal sizes
[10:26:55] [PASSED] X0L2 Max sizes
[10:26:55] [PASSED] X0L2 Invalid pitch
[10:26:55] [PASSED] X0L2 Pitch greater than minimum required
[10:26:55] [PASSED] X0L2 Handle for inexistent plane
[10:26:55] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[10:26:55] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[10:26:55] [PASSED] X0L2 Valid modifier
[10:26:55] [PASSED] X0L2 Modifier for inexistent plane
[10:26:55] =========== [PASSED] drm_test_framebuffer_create ===========
[10:26:55] [PASSED] drm_test_framebuffer_free
[10:26:55] [PASSED] drm_test_framebuffer_init
[10:26:55] [PASSED] drm_test_framebuffer_init_bad_format
[10:26:55] [PASSED] drm_test_framebuffer_init_dev_mismatch
[10:26:55] [PASSED] drm_test_framebuffer_lookup
[10:26:55] [PASSED] drm_test_framebuffer_lookup_inexistent
[10:26:55] [PASSED] drm_test_framebuffer_modifiers_not_supported
[10:26:55] ================= [PASSED] drm_framebuffer =================
[10:26:55] ================ drm_gem_shmem (8 subtests) ================
[10:26:55] [PASSED] drm_gem_shmem_test_obj_create
[10:26:55] [PASSED] drm_gem_shmem_test_obj_create_private
[10:26:55] [PASSED] drm_gem_shmem_test_pin_pages
[10:26:55] [PASSED] drm_gem_shmem_test_vmap
[10:26:55] [PASSED] drm_gem_shmem_test_get_sg_table
[10:26:55] [PASSED] drm_gem_shmem_test_get_pages_sgt
[10:26:55] [PASSED] drm_gem_shmem_test_madvise
[10:26:55] [PASSED] drm_gem_shmem_test_purge
[10:26:55] ================== [PASSED] drm_gem_shmem ==================
[10:26:55] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[10:26:55] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[10:26:55] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[10:26:55] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[10:26:55] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[10:26:55] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[10:26:55] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[10:26:55] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420  =======
[10:26:55] [PASSED] Automatic
[10:26:55] [PASSED] Full
[10:26:55] [PASSED] Limited 16:235
[10:26:55] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[10:26:55] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[10:26:55] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[10:26:55] [PASSED] drm_test_check_disable_connector
[10:26:55] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[10:26:55] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[10:26:55] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[10:26:55] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[10:26:55] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[10:26:55] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[10:26:55] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[10:26:55] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[10:26:55] [PASSED] drm_test_check_output_bpc_dvi
[10:26:55] [PASSED] drm_test_check_output_bpc_format_vic_1
[10:26:55] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[10:26:55] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[10:26:55] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[10:26:55] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[10:26:55] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[10:26:55] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[10:26:55] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[10:26:55] ============ drm_test_check_hdmi_color_format  =============
[10:26:55] [PASSED] AUTO -> RGB
[10:26:55] [PASSED] YCBCR422 -> YUV422
[10:26:55] [PASSED] YCBCR420 -> YUV420
[10:26:55] [PASSED] YCBCR444 -> YUV444
[10:26:55] [PASSED] RGB -> RGB
[10:26:55] ======== [PASSED] drm_test_check_hdmi_color_format =========
[10:26:55] ======== drm_test_check_hdmi_color_format_420_only  ========
[10:26:55] [PASSED] RGB should fail
[10:26:55] [PASSED] YUV444 should fail
[10:26:55] [PASSED] YUV422 should fail
[10:26:55] [PASSED] YUV420 should work
[10:26:55] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[10:26:55] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[10:26:55] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[10:26:55] [PASSED] drm_test_check_broadcast_rgb_value
[10:26:55] [PASSED] drm_test_check_bpc_8_value
[10:26:55] [PASSED] drm_test_check_bpc_10_value
[10:26:55] [PASSED] drm_test_check_bpc_12_value
[10:26:55] [PASSED] drm_test_check_format_value
[10:26:55] [PASSED] drm_test_check_tmds_char_value
[10:26:55] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[10:26:55] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[10:26:55] [PASSED] drm_test_check_mode_valid
[10:26:55] [PASSED] drm_test_check_mode_valid_reject
[10:26:55] [PASSED] drm_test_check_mode_valid_reject_rate
[10:26:55] [PASSED] drm_test_check_mode_valid_reject_max_clock
[10:26:55] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[10:26:55] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[10:26:55] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[10:26:55] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[10:26:55] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[10:26:55] [PASSED] drm_test_check_infoframes
[10:26:55] [PASSED] drm_test_check_reject_avi_infoframe
[10:26:55] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[10:26:55] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[10:26:55] [PASSED] drm_test_check_reject_audio_infoframe
[10:26:55] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[10:26:55] ================= drm_managed (2 subtests) =================
[10:26:55] [PASSED] drm_test_managed_release_action
[10:26:55] [PASSED] drm_test_managed_run_action
[10:26:55] =================== [PASSED] drm_managed ===================
[10:26:55] =================== drm_mm (6 subtests) ====================
[10:26:55] [PASSED] drm_test_mm_init
[10:26:55] [PASSED] drm_test_mm_debug
[10:26:55] [PASSED] drm_test_mm_align32
[10:26:55] [PASSED] drm_test_mm_align64
[10:26:55] [PASSED] drm_test_mm_lowest
[10:26:55] [PASSED] drm_test_mm_highest
[10:26:55] ===================== [PASSED] drm_mm ======================
[10:26:55] ============= drm_modes_analog_tv (5 subtests) =============
[10:26:55] [PASSED] drm_test_modes_analog_tv_mono_576i
[10:26:55] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[10:26:55] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[10:26:55] [PASSED] drm_test_modes_analog_tv_pal_576i
[10:26:55] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[10:26:55] =============== [PASSED] drm_modes_analog_tv ===============
[10:26:55] ============== drm_panic_helper (3 subtests) ===============
[10:26:55] ============= drm_test_panic_screen_user_map  ==============
[10:26:55] [PASSED] Panic screen user, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen user, mode: 494 x 494 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen user, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen user, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[10:26:55] [PASSED] Panic screen user, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[10:26:55] [PASSED] Panic screen kmsg, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen kmsg, mode: 494 x 494 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen kmsg, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[10:26:55] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[10:26:55] ========= [PASSED] drm_test_panic_screen_user_map ==========
[10:26:55] ============= drm_test_panic_screen_user_page  =============
[10:26:55] [PASSED] Panic screen user, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen user, mode: 494 x 494 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen user, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen user, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[10:26:55] [PASSED] Panic screen user, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[10:26:55] [PASSED] Panic screen kmsg, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen kmsg, mode: 494 x 494 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen kmsg, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[10:26:55] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[10:26:55] ========= [PASSED] drm_test_panic_screen_user_page =========
[10:26:55] ========== drm_test_panic_screen_user_set_pixel  ===========
[10:26:55] [PASSED] Panic screen user, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen user, mode: 494 x 494 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen user, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen user, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[10:26:55] [PASSED] Panic screen user, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[10:26:55] [PASSED] Panic screen kmsg, mode: 1024 x 768 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen kmsg, mode: 494 x 494 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen kmsg, mode: 1920 x 1080 	XR24 little-endian (0x34325258)
[10:26:55] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG16 little-endian (0x36314752)
[10:26:55] [PASSED] Panic screen kmsg, mode: 1024 x 768 	RG24 little-endian (0x34324752)
[10:26:55] ====== [PASSED] drm_test_panic_screen_user_set_pixel =======
[10:26:55] ================ [PASSED] drm_panic_helper =================
[10:26:55] ============== drm_plane_helper (2 subtests) ===============
[10:26:55] =============== drm_test_check_plane_state  ================
[10:26:55] [PASSED] clipping_simple
[10:26:55] [PASSED] clipping_rotate_reflect
[10:26:55] [PASSED] positioning_simple
[10:26:55] [PASSED] upscaling
[10:26:55] [PASSED] downscaling
[10:26:55] [PASSED] rounding1
[10:26:55] [PASSED] rounding2
[10:26:55] [PASSED] rounding3
[10:26:55] [PASSED] rounding4
[10:26:55] =========== [PASSED] drm_test_check_plane_state ============
[10:26:55] =========== drm_test_check_invalid_plane_state  ============
[10:26:55] [PASSED] positioning_invalid
[10:26:55] [PASSED] upscaling_invalid
[10:26:55] [PASSED] downscaling_invalid
[10:26:55] ======= [PASSED] drm_test_check_invalid_plane_state ========
[10:26:55] ================ [PASSED] drm_plane_helper =================
[10:26:55] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[10:26:55] ====== drm_test_connector_helper_tv_get_modes_check  =======
[10:26:55] [PASSED] None
[10:26:55] [PASSED] PAL
[10:26:55] [PASSED] NTSC
[10:26:55] [PASSED] Both, NTSC Default
[10:26:55] [PASSED] Both, PAL Default
[10:26:55] [PASSED] Both, NTSC Default, with PAL on command-line
[10:26:55] [PASSED] Both, PAL Default, with NTSC on command-line
[10:26:55] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[10:26:55] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[10:26:55] ================== drm_rect (9 subtests) ===================
[10:26:55] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[10:26:55] [PASSED] drm_test_rect_clip_scaled_not_clipped
[10:26:55] [PASSED] drm_test_rect_clip_scaled_clipped
[10:26:55] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[10:26:55] ================= drm_test_rect_intersect  =================
[10:26:55] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[10:26:55] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[10:26:55] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[10:26:55] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[10:26:55] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[10:26:55] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[10:26:55] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[10:26:55] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[10:26:55] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[10:26:55] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[10:26:55] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[10:26:55] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[10:26:55] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[10:26:55] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[10:26:55] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[10:26:55] ============= [PASSED] drm_test_rect_intersect =============
[10:26:55] ================ drm_test_rect_calc_hscale  ================
[10:26:55] [PASSED] normal use
[10:26:55] [PASSED] out of max range
[10:26:55] [PASSED] out of min range
[10:26:55] [PASSED] zero dst
[10:26:55] [PASSED] negative src
[10:26:55] [PASSED] negative dst
[10:26:55] ============ [PASSED] drm_test_rect_calc_hscale ============
[10:26:55] ================ drm_test_rect_calc_vscale  ================
[10:26:55] [PASSED] normal use
[10:26:55] [PASSED] out of max range
[10:26:55] [PASSED] out of min range
[10:26:55] [PASSED] zero dst
[10:26:55] [PASSED] negative src
[10:26:55] [PASSED] negative dst
[10:26:55] ============ [PASSED] drm_test_rect_calc_vscale ============
[10:26:55] ================== drm_test_rect_rotate  ===================
[10:26:55] [PASSED] reflect-x
[10:26:55] [PASSED] reflect-y
[10:26:55] [PASSED] rotate-0
[10:26:55] [PASSED] rotate-90
[10:26:55] [PASSED] rotate-180
[10:26:55] [PASSED] rotate-270
[10:26:55] ============== [PASSED] drm_test_rect_rotate ===============
[10:26:55] ================ drm_test_rect_rotate_inv  =================
[10:26:55] [PASSED] reflect-x
[10:26:55] [PASSED] reflect-y
[10:26:55] [PASSED] rotate-0
[10:26:55] [PASSED] rotate-90
[10:26:55] [PASSED] rotate-180
[10:26:55] [PASSED] rotate-270
[10:26:55] ============ [PASSED] drm_test_rect_rotate_inv =============
[10:26:55] ==================== [PASSED] drm_rect =====================
[10:26:55] ============ drm_sysfb_modeset_test (1 subtest) ============
[10:26:55] ============ drm_test_sysfb_build_fourcc_list  =============
[10:26:55] [PASSED] no native formats
[10:26:55] [PASSED] XRGB8888 as native format
[10:26:55] [PASSED] remove duplicates
[10:26:55] [PASSED] convert alpha formats
[10:26:55] [PASSED] random formats
[10:26:55] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[10:26:55] ============= [PASSED] drm_sysfb_modeset_test ==============
[10:26:55] ================== drm_fixp (2 subtests) ===================
[10:26:55] [PASSED] drm_test_int2fixp
[10:26:55] [PASSED] drm_test_sm2fixp
[10:26:55] ==================== [PASSED] drm_fixp =====================
[10:26:55] ============================================================
[10:26:55] Testing complete. Ran 671 tests: passed: 671
[10:26:55] Elapsed time: 27.405s total, 1.755s configuring, 25.135s building, 0.469s 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
[10:26:55] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:26:57] 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
[10:27:07] Starting KUnit Kernel (1/1)...
[10:27:07] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:27:07] ============= refcount_interrupt (4 subtests) ==============
[10:27:07] [PASSED] test_single_irq_change
[10:27:07] [PASSED] test_nested_irq_change
[10:27:07] [PASSED] test_multiple_irq_change
[10:27:07] [PASSED] test_irq_save
[10:27:07] =============== [PASSED] refcount_interrupt ================
[10:27:07] ================= ttm_device (5 subtests) ==================
[10:27:07] [PASSED] ttm_device_init_basic
[10:27:07] [PASSED] ttm_device_init_multiple
[10:27:07] [PASSED] ttm_device_fini_basic
[10:27:07] [PASSED] ttm_device_init_no_vma_man
[10:27:07] ================== ttm_device_init_pools  ==================
[10:27:07] [PASSED] No DMA allocations, no DMA32 required
[10:27:07] [PASSED] DMA allocations, DMA32 required
[10:27:07] [PASSED] No DMA allocations, DMA32 required
[10:27:07] [PASSED] DMA allocations, no DMA32 required
[10:27:07] ============== [PASSED] ttm_device_init_pools ==============
[10:27:07] =================== [PASSED] ttm_device ====================
[10:27:07] ================== ttm_pool (8 subtests) ===================
[10:27:07] ================== ttm_pool_alloc_basic  ===================
[10:27:07] [PASSED] One page
[10:27:07] [PASSED] More than one page
[10:27:07] [PASSED] Above the allocation limit
[10:27:07] [PASSED] One page, with coherent DMA mappings enabled
[10:27:07] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[10:27:07] ============== [PASSED] ttm_pool_alloc_basic ===============
[10:27:07] ============== ttm_pool_alloc_basic_dma_addr  ==============
[10:27:07] [PASSED] One page
[10:27:07] [PASSED] More than one page
[10:27:07] [PASSED] Above the allocation limit
[10:27:07] [PASSED] One page, with coherent DMA mappings enabled
[10:27:07] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[10:27:07] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[10:27:07] [PASSED] ttm_pool_alloc_order_caching_match
[10:27:07] [PASSED] ttm_pool_alloc_caching_mismatch
[10:27:07] [PASSED] ttm_pool_alloc_order_mismatch
[10:27:07] [PASSED] ttm_pool_free_dma_alloc
[10:27:07] [PASSED] ttm_pool_free_no_dma_alloc
[10:27:07] [PASSED] ttm_pool_fini_basic
[10:27:07] ==================== [PASSED] ttm_pool =====================
[10:27:07] ================ ttm_resource (8 subtests) =================
[10:27:07] ================= ttm_resource_init_basic  =================
[10:27:07] [PASSED] Init resource in TTM_PL_SYSTEM
[10:27:07] [PASSED] Init resource in TTM_PL_VRAM
[10:27:07] [PASSED] Init resource in a private placement
[10:27:07] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[10:27:07] ============= [PASSED] ttm_resource_init_basic =============
[10:27:07] [PASSED] ttm_resource_init_pinned
[10:27:07] [PASSED] ttm_resource_fini_basic
[10:27:07] [PASSED] ttm_resource_manager_init_basic
[10:27:07] [PASSED] ttm_resource_manager_usage_basic
[10:27:07] [PASSED] ttm_resource_manager_set_used_basic
[10:27:07] [PASSED] ttm_sys_man_alloc_basic
[10:27:07] [PASSED] ttm_sys_man_free_basic
[10:27:07] ================== [PASSED] ttm_resource ===================
[10:27:07] =================== ttm_tt (15 subtests) ===================
[10:27:07] ==================== ttm_tt_init_basic  ====================
[10:27:07] [PASSED] Page-aligned size
[10:27:07] [PASSED] Extra pages requested
[10:27:07] ================ [PASSED] ttm_tt_init_basic ================
[10:27:07] [PASSED] ttm_tt_init_misaligned
[10:27:07] [PASSED] ttm_tt_fini_basic
[10:27:07] [PASSED] ttm_tt_fini_sg
[10:27:07] [PASSED] ttm_tt_fini_shmem
[10:27:07] [PASSED] ttm_tt_create_basic
[10:27:07] [PASSED] ttm_tt_create_invalid_bo_type
[10:27:07] [PASSED] ttm_tt_create_ttm_exists
[10:27:07] [PASSED] ttm_tt_create_failed
[10:27:07] [PASSED] ttm_tt_destroy_basic
[10:27:07] [PASSED] ttm_tt_populate_null_ttm
[10:27:07] [PASSED] ttm_tt_populate_populated_ttm
[10:27:07] [PASSED] ttm_tt_unpopulate_basic
[10:27:07] [PASSED] ttm_tt_unpopulate_empty_ttm
[10:27:07] [PASSED] ttm_tt_swapin_basic
[10:27:07] ===================== [PASSED] ttm_tt ======================
[10:27:07] =================== ttm_bo (14 subtests) ===================
[10:27:07] =========== ttm_bo_reserve_optimistic_no_ticket  ===========
[10:27:07] [PASSED] Cannot be interrupted and sleeps
[10:27:07] [PASSED] Cannot be interrupted, locks straight away
[10:27:07] [PASSED] Can be interrupted, sleeps
[10:27:07] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[10:27:07] [PASSED] ttm_bo_reserve_locked_no_sleep
[10:27:07] [PASSED] ttm_bo_reserve_no_wait_ticket
[10:27:07] [PASSED] ttm_bo_reserve_double_resv
[10:27:07] [PASSED] ttm_bo_reserve_interrupted
[10:27:07] [PASSED] ttm_bo_reserve_deadlock
[10:27:07] [PASSED] ttm_bo_unreserve_basic
[10:27:07] [PASSED] ttm_bo_unreserve_pinned
[10:27:07] [PASSED] ttm_bo_unreserve_bulk
[10:27:07] [PASSED] ttm_bo_fini_basic
[10:27:07] [PASSED] ttm_bo_fini_shared_resv
[10:27:07] [PASSED] ttm_bo_pin_basic
[10:27:07] [PASSED] ttm_bo_pin_unpin_resource
[10:27:07] [PASSED] ttm_bo_multiple_pin_one_unpin
[10:27:07] ===================== [PASSED] ttm_bo ======================
[10:27:07] ============== ttm_bo_validate (22 subtests) ===============
[10:27:07] ============== ttm_bo_init_reserved_sys_man  ===============
[10:27:07] [PASSED] Buffer object for userspace
[10:27:07] [PASSED] Kernel buffer object
[10:27:07] [PASSED] Shared buffer object
[10:27:07] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[10:27:07] ============== ttm_bo_init_reserved_mock_man  ==============
[10:27:07] [PASSED] Buffer object for userspace
[10:27:07] [PASSED] Kernel buffer object
[10:27:07] [PASSED] Shared buffer object
[10:27:07] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[10:27:07] [PASSED] ttm_bo_init_reserved_resv
[10:27:07] ================== ttm_bo_validate_basic  ==================
[10:27:07] [PASSED] Buffer object for userspace
[10:27:07] [PASSED] Kernel buffer object
[10:27:07] [PASSED] Shared buffer object
[10:27:07] ============== [PASSED] ttm_bo_validate_basic ==============
[10:27:07] [PASSED] ttm_bo_validate_invalid_placement
[10:27:07] ============= ttm_bo_validate_same_placement  ==============
[10:27:07] [PASSED] System manager
[10:27:07] [PASSED] VRAM manager
[10:27:07] ========= [PASSED] ttm_bo_validate_same_placement ==========
[10:27:07] [PASSED] ttm_bo_validate_failed_alloc
[10:27:07] [PASSED] ttm_bo_validate_pinned
[10:27:07] [PASSED] ttm_bo_validate_busy_placement
[10:27:07] ================ ttm_bo_validate_multihop  =================
[10:27:07] [PASSED] Buffer object for userspace
[10:27:07] [PASSED] Kernel buffer object
[10:27:07] [PASSED] Shared buffer object
[10:27:07] ============ [PASSED] ttm_bo_validate_multihop =============
[10:27:07] ========== ttm_bo_validate_no_placement_signaled  ==========
[10:27:07] [PASSED] Buffer object in system domain, no page vector
[10:27:07] [PASSED] Buffer object in system domain with an existing page vector
[10:27:07] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[10:27:07] ======== ttm_bo_validate_no_placement_not_signaled  ========
[10:27:07] [PASSED] Buffer object for userspace
[10:27:07] [PASSED] Kernel buffer object
[10:27:07] [PASSED] Shared buffer object
[10:27:07] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[10:27:07] [PASSED] ttm_bo_validate_move_fence_signaled
[10:27:07] ========= ttm_bo_validate_move_fence_not_signaled  =========
[10:27:07] [PASSED] Waits for GPU
[10:27:07] [PASSED] Tries to lock straight away
[10:27:07] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[10:27:07] [PASSED] ttm_bo_validate_swapout
[10:27:07] [PASSED] ttm_bo_validate_happy_evict
[10:27:07] [PASSED] ttm_bo_validate_all_pinned_evict
[10:27:07] [PASSED] ttm_bo_validate_allowed_only_evict
[10:27:07] [PASSED] ttm_bo_validate_deleted_evict
[10:27:07] [PASSED] ttm_bo_validate_busy_domain_evict
[10:27:07] [PASSED] ttm_bo_validate_evict_gutting
[10:27:07] [PASSED] ttm_bo_validate_recrusive_evict
[10:27:07] ================= [PASSED] ttm_bo_validate =================
[10:27:07] ============================================================
[10:27:07] Testing complete. Ran 106 tests: passed: 106
[10:27:07] Elapsed time: 12.183s total, 1.827s configuring, 10.141s building, 0.189s running

+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/dma-buf/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[10:27:07] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:27:09] 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
[10:27:18] Starting KUnit Kernel (1/1)...
[10:27:18] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:27:18] ============= refcount_interrupt (4 subtests) ==============
[10:27:18] [PASSED] test_single_irq_change
[10:27:18] [PASSED] test_nested_irq_change
[10:27:18] [PASSED] test_multiple_irq_change
[10:27:18] [PASSED] test_irq_save
[10:27:18] =============== [PASSED] refcount_interrupt ================
[10:27:18] =============== dma-buf-fence (12 subtests) ================
[10:27:18] [PASSED] test_sanitycheck
[10:27:18] [PASSED] test_signaling
[10:27:18] [PASSED] test_add_callback
[10:27:18] [PASSED] test_late_add_callback
[10:27:18] [PASSED] test_rm_callback
[10:27:18] [PASSED] test_late_rm_callback
[10:27:18] [PASSED] test_status
[10:27:18] [PASSED] test_error
[10:27:18] [PASSED] test_wait
[10:27:18] [PASSED] test_wait_timeout
[10:27:18] [PASSED] test_stub
[10:27:18] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[10:27:18] ================== [PASSED] dma-buf-fence ==================
[10:27:18] ============ dma-buf-fence-chain (11 subtests) =============
[10:27:18] [PASSED] test_sanitycheck
[10:27:18] [PASSED] test_find_seqno
[10:27:18] [PASSED] test_find_signaled
[10:27:18] [PASSED] test_find_out_of_order
[10:27:23] [PASSED] test_find_gap
[10:27:23] [PASSED] test_find_race
[10:27:23] [PASSED] test_signal_forward
[10:27:23] [PASSED] test_signal_backward
[10:27:23] [PASSED] test_wait_forward
[10:27:23] [PASSED] test_wait_backward
[10:27:23] [PASSED] test_wait_random
[10:27:23] =============== [PASSED] dma-buf-fence-chain ===============
[10:27:23] ============ dma-buf-fence-unwrap (10 subtests) ============
[10:27:23] [PASSED] test_sanitycheck
[10:27:23] [PASSED] test_unwrap_array
[10:27:23] [PASSED] test_unwrap_chain
[10:27:23] [PASSED] test_unwrap_chain_array
[10:27:23] [PASSED] test_unwrap_merge
[10:27:23] [PASSED] test_unwrap_merge_duplicate
[10:27:23] [PASSED] test_unwrap_merge_seqno
[10:27:23] [PASSED] test_unwrap_merge_order
[10:27:23] [PASSED] test_unwrap_merge_complex
[10:27:23] [PASSED] test_unwrap_merge_complex_seqno
[10:27:23] ============== [PASSED] dma-buf-fence-unwrap ===============
[10:27:23] ================ dma-buf-resv (5 subtests) =================
[10:27:23] [PASSED] test_sanitycheck
[10:27:23] ===================== test_signaling  ======================
[10:27:23] [PASSED] kernel
[10:27:23] [PASSED] write
[10:27:23] [PASSED] read
[10:27:23] [PASSED] bookkeep
[10:27:23] ================= [PASSED] test_signaling ==================
[10:27:23] ====================== test_for_each  ======================
[10:27:23] [PASSED] kernel
[10:27:23] [PASSED] write
[10:27:23] [PASSED] read
[10:27:23] [PASSED] bookkeep
[10:27:23] ================== [PASSED] test_for_each ==================
[10:27:23] ================= test_for_each_unlocked  ==================
[10:27:23] [PASSED] kernel
[10:27:23] [PASSED] write
[10:27:23] [PASSED] read
[10:27:23] [PASSED] bookkeep
[10:27:23] ============= [PASSED] test_for_each_unlocked ==============
[10:27:23] ===================== test_get_fences  =====================
[10:27:23] [PASSED] kernel
[10:27:23] [PASSED] write
[10:27:23] [PASSED] read
[10:27:23] [PASSED] bookkeep
[10:27:23] ================= [PASSED] test_get_fences =================
[10:27:23] ================== [PASSED] dma-buf-resv ===================
[10:27:23] ============================================================
[10:27:23] Testing complete. Ran 54 tests: passed: 53, skipped: 1
[10:27:23] Elapsed time: 15.773s total, 1.830s configuring, 8.571s building, 5.351s running

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



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

* Re: [PATCH v2 04/15] drm/xe: Protect device I/O with DRM device SRCU
  2026-09-22 10:16 ` [PATCH v2 04/15] drm/xe: Protect device I/O with DRM device SRCU Arvind Yadav
@ 2026-09-22 10:28   ` sashiko-bot
  0 siblings, 0 replies; 23+ messages in thread
From: sashiko-bot @ 2026-09-22 10:28 UTC (permalink / raw)
  To: Arvind Yadav; +Cc: intel-xe, dri-devel

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] drm/xe: hardware forcewake drop outside IO protection in send_tlb_inval_ggtt()
--

commit e9f023cf84d9700d7a5ded726d95cff381241557
Author: Arvind Yadav <arvind.yadav@intel.com>

drm/xe: Protect device I/O with DRM device SRCU

This commit introduces wrappers around DRM device SRCU to protect device
I/O operations. It blocks new access during PCI recovery or when the
device is wedged, and drains existing hardware users to safely isolate
the device.

> diff --git a/drivers/gpu/drm/xe/xe_guc_tlb_inval.c b/drivers/gpu/drm/xe/xe_guc_tlb_inval.c
> --- a/drivers/gpu/drm/xe/xe_guc_tlb_inval.c
> +++ b/drivers/gpu/drm/xe/xe_guc_tlb_inval.c

[ ... ]

> @@ -86,8 +84,13 @@ static int send_tlb_inval_ggtt(struct xe_tlb_inval *tlb_inval, u32 seqno)
>  	} else if (xe_device_uc_enabled(xe)) {
>  		struct xe_mmio *mmio = &gt->mmio;
>  
> -		if (IS_SRIOV_VF(xe))
> +		if (xe_device_io_get(xe, &io_idx))
> +			return -ECANCELED;
> +
> +		if (IS_SRIOV_VF(xe)) {
> +			xe_device_io_put(io_idx);
>  			return -ECANCELED;
> +		}
>  
>  		CLASS(xe_force_wake, fw_ref)(gt_to_fw(gt), XE_FW_GT);
>  		if (xe->info.platform == XE_PVC || GRAPHICS_VER(xe) >= 20) {
> @@ -99,6 +102,8 @@ static int send_tlb_inval_ggtt(struct xe_tlb_inval *tlb_inval, u32 seqno)
>  			xe_mmio_write32(mmio, GUC_TLB_INV_CR,
>  					GUC_TLB_INV_CR_INVALIDATE);
>  		}
> +
> +		xe_device_io_put(io_idx);

[Severity: High]
Does this code drop the I/O protection before the scoped forcewake destructor
runs?

The CLASS(xe_force_wake, fw_ref) macro creates a scoped guard whose destructor
executes when leaving the block. Because xe_device_io_put(io_idx) is called
explicitly right before the closing brace, the I/O protection is released
before the forcewake destructor runs.

If PCI error recovery or wedge isolation disables the device immediately after
xe_device_io_put() returns, the automatically executing fw_ref destructor will
perform MMIO writes on a disabled device. This could trigger a PCI Advanced
Error Reporting (AER) fault and crash the system.

>  	}
>  
>  	return -ECANCELED;

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260922101721.1583542-1-arvind.yadav@intel.com?part=4

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

* Re: [PATCH v2 09/15] drm/xe: Invalidate existing VRAM mappings on wedge
  2026-09-22 10:16 ` [PATCH v2 09/15] drm/xe: Invalidate existing VRAM mappings on wedge Arvind Yadav
@ 2026-09-22 10:30   ` sashiko-bot
  0 siblings, 0 replies; 23+ messages in thread
From: sashiko-bot @ 2026-09-22 10:30 UTC (permalink / raw)
  To: Arvind Yadav; +Cc: dri-devel, intel-xe

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] drm/xe: dma-buf VRAM mappings are not invalidated on device wedge
- [High] drm/xe: PAT aliasing violation by mapping GFP_KERNEL dummy page as WC
--

commit c757615e833a0d49b9d8ef7258c5d9bef1106610
Author: Arvind Yadav <arvind.yadav@intel.com>

drm/xe: Invalidate existing VRAM mappings on wedge

This commit introduces a mechanism to drain active CPU faults and invalidate
all tracked VRAM mappings when a device wedges. Subsequent faults use a per-BO
dummy page, preventing valid PTEs from keeping access to VRAM.

> CPU mappings created before a device wedge can keep valid PTEs and
> continue accessing VRAM. Mapping new faults to a dummy page does not
> replace these existing mappings.
> 
> Use the common device I/O SRCU gate to wait for active CPU faults to
> finish. Then invalidate all tracked VRAM mappings. Faults starting
> after the wedge use the per-BO dummy page.

[Severity: High]
Can mapping the dummy page cause a Machine Check Exception or SIGBUS?

When CPU faults occur on a VRAM BO after the device wedges, they trigger
xe_bo_vm_dummy_page():

drivers/gpu/drm/xe/xe_bo.c:xe_bo_vm_dummy_page() {
    ...
	page = alloc_page(GFP_KERNEL | __GFP_ZERO);
    ...
	return vmf_insert_pfn_prot(vma, vmf->address, pfn,
				   vma->vm_page_prot);
}

This allocates a standard system RAM page using GFP_KERNEL (which has
Write-Back caching) and maps it into userspace using the VMA's original
vma->vm_page_prot. For VRAM mappings, vma->vm_page_prot contains Write-Combine
(WC) bits.

Does mapping a WB page as WC create a conflicting PAT alias on x86?
track_pfn_insert() may reject this for RAM pages, leading to a SIGBUS, or if
bypassed, a hardware MCE.

> diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
> index 7902ce3fe0127..73dcd397dc13c 100644
> --- a/drivers/gpu/drm/xe/xe_bo.c
> +++ b/drivers/gpu/drm/xe/xe_bo.c
> @@ -4155,6 +4155,26 @@ void xe_bo_runtime_pm_release_mmap_offset(struct xe_bo *bo)
>  	list_del_init(&bo->vram_userfault_link);
>  }
>  
> +/**
> + * xe_bo_wedged_invalidate_mmaps - Invalidate CPU mappings backed by VRAM
> + * @xe: xe device instance
> + *
> + * The caller must drain the common device I/O gate before calling this
> + * function. Remove all tracked VRAM mappings so later faults map the
> + * per-BO dummy page.
> + */
> +void xe_bo_wedged_invalidate_mmaps(struct xe_device *xe)
> +{
> +	struct xe_bo *bo, *next;
> +
> +	mutex_lock(&xe->mem_access.vram_userfault.lock);
> +	list_for_each_entry_safe(bo, next,
> +				 &xe->mem_access.vram_userfault.list,
> +				 vram_userfault_link)
> +		xe_bo_runtime_pm_release_mmap_offset(bo);

[Severity: High]
Does this code miss active dma-buf CPU mappings?

xe_bo_runtime_pm_release_mmap_offset() only unmaps the VMA node associated
with the DRM device file (drm_vma_node_unmap()). It doesn't seem to clear
dma-buf mappings, which are tracked under
bo->ttm.base.dma_buf->file->f_mapping.

If a userspace application exports a VRAM BO as a dma-buf and maps it, would
it retain CPU access to VRAM after the device wedges? Accessing VRAM on a
wedged device can cause PCIe hangs or system crashes. 

Could a call to dma_buf_invalidate_mappings() be required here, similar to
how it is handled in xe_bo_move_notify()?

> +	mutex_unlock(&xe->mem_access.vram_userfault.lock);
> +}

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260922101721.1583542-1-arvind.yadav@intel.com?part=9

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

* Re: [PATCH v2 11/15] drm/xe: Isolate a wedged device before notifying userspace
  2026-09-22 10:16 ` [PATCH v2 11/15] drm/xe: Isolate a wedged device before notifying userspace Arvind Yadav
@ 2026-09-22 10:31   ` sashiko-bot
  0 siblings, 0 replies; 23+ messages in thread
From: sashiko-bot @ 2026-09-22 10:31 UTC (permalink / raw)
  To: Arvind Yadav; +Cc: intel-xe, dri-devel

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] drm/xe: TOCTOU race in xe_display_register leaves display active without IRQs
- [High] drm/xe: double suspend of display hardware due to wedge during PM
--

commit f1762c4030fdcf19e70d9970658fdb7e79d5019c
Author: Arvind Yadav <arvind.yadav@intel.com>

drm/xe: Isolate a wedged device before notifying userspace

A permanently wedged device must stop interrupt and DMA activity before
userspace is notified that recovery is required. The commit runs the
sleepable isolation steps from the wedge worker.

> diff --git a/drivers/gpu/drm/xe/display/xe_display.c b/drivers/gpu/drm/xe/display/xe_display.c
> --- a/drivers/gpu/drm/xe/display/xe_display.c
> +++ b/drivers/gpu/drm/xe/display/xe_display.c
> @@ -150,21 +150,27 @@ void xe_display_register(struct xe_device *xe)
>  {
>  	struct intel_display *display = xe->display;
>  
> -	if (!xe->info.probe_display)
> +	if (!xe->info.probe_display || xe->display_registered)
>  		return;
>  
>  	intel_display_driver_register(display);
>  	intel_display_driver_runtime_pm_enable(display);
> +
> +	xe->display_registered = true;

[Severity: High]
Could the async wedge worker race with the display probe thread here?

The display is registered without any locking to prevent concurrent
isolation by the async wedge worker.

>  }
>  
>  void xe_display_unregister(struct xe_device *xe)
>  {
>  	struct intel_display *display = xe->display;
>  
> -	if (!xe->info.probe_display)
> +	if (!xe->info.probe_display || !xe->display_registered)
>  		return;

[Severity: High]
The wedge worker reads xe->display_registered unprotected and returns early
if registration is still in progress in the probe thread.

[ ... ]
> @@ -172,7 +178,8 @@ void xe_display_shutdown(struct xe_device *xe)
>  {
>  	struct intel_display *display = xe->display;
>  
> -	if (!xe->info.probe_display)
> +	if (!xe->info.probe_display || !xe->display_registered ||
> +	    xe->display_shutdown)
>  		return;
>  
>  	intel_display_driver_shutdown(display);
> @@ -180,6 +187,8 @@ void xe_display_shutdown(struct xe_device *xe)
>  	intel_opregion_suspend(display, PCI_D3cold);
>  
>  	intel_dmc_suspend(display);
> +
> +	xe->display_shutdown = true;
>  }

[Severity: High]
When a synchronous wedge worker calls xe_device_wedged_isolate() during
suspend, it executes xe_display_shutdown().

Since xe->display_shutdown is false, it proceeds to call
intel_dmc_suspend(), intel_opregion_suspend(), and
intel_display_driver_shutdown() a second time. Could this cause a wakeref
underflow and unbalanced runtime PM state for the display hardware?

[ ... ]
> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c
[ ... ]
> +static void xe_device_wedged_isolate(struct xe_device *xe)
> +{
[ ... ]
> +	/* Shut down display hardware before stopping device access. */
> +	xe_display_shutdown(xe);
> +	xe_display_unregister(xe);
> +
> +	/* Stop interrupt and DMA activity before changing mappings. */
> +	xe_irq_suspend(xe);
> +	pci_clear_master(to_pci_dev(xe->drm.dev));

[Severity: High]
If the device wedges asynchronously during device probe, could the wedge
worker miss the display unregistration because xe->display_registered is not
yet true, but then continue to disable hardware access?

If the probe thread then proceeds to complete xe_display_register(), the
display remains registered and exposed to userspace, but the device has its
interrupts and DMA (PCI master) permanently disabled. This could cause
userspace modesets and page flips to time out and hang since VBLANK
interrupts will never fire.

[ ... ]
> diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
> --- a/drivers/gpu/drm/xe/xe_pci.c
> +++ b/drivers/gpu/drm/xe/xe_pci.c
> @@ -1325,19 +1325,38 @@ static int xe_pci_suspend(struct device *dev)
>  {
[ ... ]
> +	} else {
> +		err = xe_pm_suspend(xe);
> +		xe_device_io_put(io_idx);
> +
> +		if (xe_device_wedged(xe)) {
> +			wait_for_completion(&xe->wedged.prepared);
> +			flush_work(&xe->wedged.work);
> +		} else if (err) {
> +			return err;
> +		}
> +	}

[Severity: High]
Can a wedge during suspend cause a double suspend of the display hardware?

If a wedge event occurs during xe_pm_suspend(), the display has already been
suspended via xe_display_pm_suspend(). Since xe_pm_suspend() does not set
the xe->display_shutdown flag, this flush_work() will execute the wedge
worker synchronously, resulting in xe_display_shutdown() suspending the
hardware again.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260922101721.1583542-1-arvind.yadav@intel.com?part=11

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

* ✗ Xe.CI.BAT: failure for drm/xe: Isolate wedged devices from hardware access (rev2)
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
                   ` (15 preceding siblings ...)
  2026-09-22 10:27 ` ✓ CI.KUnit: success for drm/xe: Isolate wedged devices from hardware access (rev2) Patchwork
@ 2026-09-22 12:26 ` Patchwork
  2026-09-22 20:50 ` ✗ Xe.CI.FULL: " Patchwork
  17 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2026-09-22 12:26 UTC (permalink / raw)
  To: Arvind Yadav; +Cc: intel-xe

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

== Series Details ==

Series: drm/xe: Isolate wedged devices from hardware access (rev2)
URL   : https://patchwork.freedesktop.org/series/172860/
State : failure

== Summary ==

CI Bug Log - changes from xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d_BAT -> xe-pw-172860v2_BAT
====================================================

Summary
-------

  **FAILURE**

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

  

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

  No changes in participating hosts

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@core_hotunplug@unbind-rebind:
    - bat-adlp-7:         [PASS][1] -> [DMESG-WARN][2]
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-adlp-7/igt@core_hotunplug@unbind-rebind.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-adlp-7/igt@core_hotunplug@unbind-rebind.html
    - bat-ptl-2:          [PASS][3] -> [DMESG-WARN][4]
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-ptl-2/igt@core_hotunplug@unbind-rebind.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-ptl-2/igt@core_hotunplug@unbind-rebind.html
    - bat-bmg-2:          [PASS][5] -> [DMESG-WARN][6]
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-bmg-2/igt@core_hotunplug@unbind-rebind.html
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-bmg-2/igt@core_hotunplug@unbind-rebind.html
    - bat-bmg-1:          [PASS][7] -> [DMESG-WARN][8]
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-bmg-1/igt@core_hotunplug@unbind-rebind.html
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-bmg-1/igt@core_hotunplug@unbind-rebind.html
    - bat-lnl-2:          [PASS][9] -> [DMESG-WARN][10]
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-lnl-2/igt@core_hotunplug@unbind-rebind.html
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-lnl-2/igt@core_hotunplug@unbind-rebind.html
    - bat-atsm-2:         [PASS][11] -> [DMESG-WARN][12]
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-atsm-2/igt@core_hotunplug@unbind-rebind.html
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-atsm-2/igt@core_hotunplug@unbind-rebind.html
    - bat-wcl-1:          [PASS][13] -> [DMESG-WARN][14]
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-wcl-1/igt@core_hotunplug@unbind-rebind.html
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-wcl-1/igt@core_hotunplug@unbind-rebind.html
    - bat-ptl-1:          [PASS][15] -> [DMESG-WARN][16]
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-ptl-1/igt@core_hotunplug@unbind-rebind.html
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-ptl-1/igt@core_hotunplug@unbind-rebind.html
    - bat-wcl-2:          [PASS][17] -> [DMESG-WARN][18]
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-wcl-2/igt@core_hotunplug@unbind-rebind.html
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-wcl-2/igt@core_hotunplug@unbind-rebind.html
    - bat-lnl-1:          [PASS][19] -> [DMESG-WARN][20]
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-lnl-1/igt@core_hotunplug@unbind-rebind.html
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-lnl-1/igt@core_hotunplug@unbind-rebind.html

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

  Here are the changes found in xe-pw-172860v2_BAT that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@core_hotunplug@unbind-rebind:
    - bat-nvls-1:         [PASS][21] -> [DMESG-WARN][22] ([Intel XE#8762] / [Intel XE#9069])
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-nvls-1/igt@core_hotunplug@unbind-rebind.html
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-nvls-1/igt@core_hotunplug@unbind-rebind.html
    - bat-nvls-2:         [PASS][23] -> [DMESG-WARN][24] ([Intel XE#8762] / [Intel XE#9069])
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-nvls-2/igt@core_hotunplug@unbind-rebind.html
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-nvls-2/igt@core_hotunplug@unbind-rebind.html

  * igt@xe_exec_system_allocator@many-execqueues-malloc:
    - bat-bmg-vm:         [PASS][25] -> [DMESG-WARN][26] ([Intel XE#9331]) +1 other test dmesg-warn
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-bmg-vm/igt@xe_exec_system_allocator@many-execqueues-malloc.html
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-bmg-vm/igt@xe_exec_system_allocator@many-execqueues-malloc.html

  * igt@xe_exec_system_allocator@twice-free:
    - bat-bmg-1:          [PASS][27] -> [DMESG-WARN][28] ([Intel XE#9331])
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-bmg-1/igt@xe_exec_system_allocator@twice-free.html
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-bmg-1/igt@xe_exec_system_allocator@twice-free.html

  * igt@xe_waitfence@engine:
    - bat-ptl-2:          [PASS][29] -> [FAIL][30] ([Intel XE#9109])
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-ptl-2/igt@xe_waitfence@engine.html
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-ptl-2/igt@xe_waitfence@engine.html

  
#### Possible fixes ####

  * igt@xe_exec_system_allocator@many-execqueues-free:
    - bat-bmg-vm:         [DMESG-WARN][31] ([Intel XE#9331]) -> [PASS][32]
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-bmg-vm/igt@xe_exec_system_allocator@many-execqueues-free.html
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-bmg-vm/igt@xe_exec_system_allocator@many-execqueues-free.html

  * igt@xe_exec_system_allocator@threads-shared-vm-many-malloc:
    - bat-bmg-1:          [DMESG-WARN][33] ([Intel XE#9331]) -> [PASS][34]
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/bat-bmg-1/igt@xe_exec_system_allocator@threads-shared-vm-many-malloc.html
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/bat-bmg-1/igt@xe_exec_system_allocator@threads-shared-vm-many-malloc.html

  
  [Intel XE#8762]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8762
  [Intel XE#9069]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9069
  [Intel XE#9109]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9109
  [Intel XE#9331]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9331


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

  * Linux: xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d -> xe-pw-172860v2

  IGT_9107: bba540a799a5f1a3c7ddc3a2b864678241377773 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d: 0433becdcbca8f779a8d32040a26718f2442e62d
  xe-pw-172860v2: 172860v2

== Logs ==

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

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

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

* ✗ Xe.CI.FULL: failure for drm/xe: Isolate wedged devices from hardware access (rev2)
  2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
                   ` (16 preceding siblings ...)
  2026-09-22 12:26 ` ✗ Xe.CI.BAT: failure " Patchwork
@ 2026-09-22 20:50 ` Patchwork
  17 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2026-09-22 20:50 UTC (permalink / raw)
  To: Arvind Yadav; +Cc: intel-xe

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

== Series Details ==

Series: drm/xe: Isolate wedged devices from hardware access (rev2)
URL   : https://patchwork.freedesktop.org/series/172860/
State : failure

== Summary ==

CI Bug Log - changes from xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d_FULL -> xe-pw-172860v2_FULL
====================================================

Summary
-------

  **FAILURE**

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

  

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

  No changes in participating hosts

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

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

### IGT changes ###

#### Possible regressions ####

  * igt@xe_configfs@ctx-restore-post-bb-invalid:
    - shard-ptl:          [PASS][1] -> [DMESG-WARN][2] +42 other tests dmesg-warn
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-ptl-8/igt@xe_configfs@ctx-restore-post-bb-invalid.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-4/igt@xe_configfs@ctx-restore-post-bb-invalid.html
    - shard-lnl:          [PASS][3] -> [DMESG-WARN][4] +44 other tests dmesg-warn
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-lnl-8/igt@xe_configfs@ctx-restore-post-bb-invalid.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-lnl-3/igt@xe_configfs@ctx-restore-post-bb-invalid.html

  * igt@xe_fault_injection@inject-fault-probe-function-xe_ggtt_init_early:
    - shard-bmg:          [PASS][5] -> [DMESG-WARN][6] +34 other tests dmesg-warn
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-bmg-1/igt@xe_fault_injection@inject-fault-probe-function-xe_ggtt_init_early.html
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-4/igt@xe_fault_injection@inject-fault-probe-function-xe_ggtt_init_early.html

  * igt@xe_fault_injection@inject-fault-probe-function-xe_mmio_probe_early:
    - shard-ptl:          NOTRUN -> [DMESG-WARN][7]
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@xe_fault_injection@inject-fault-probe-function-xe_mmio_probe_early.html

  * igt@xe_module_load@reload-no-display:
    - shard-bmg:          NOTRUN -> [DMESG-WARN][8] +4 other tests dmesg-warn
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@xe_module_load@reload-no-display.html

  
#### Warnings ####

  * igt@xe_fault_injection@inject-fault-probe-function-xe_wa_gt_init:
    - shard-bmg:          [ABORT][9] ([Intel XE#8007]) -> [DMESG-WARN][10]
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-bmg-10/igt@xe_fault_injection@inject-fault-probe-function-xe_wa_gt_init.html
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@xe_fault_injection@inject-fault-probe-function-xe_wa_gt_init.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@kms_big_fb@x-tiled-64bpp-rotate-270:
    - shard-ptl:          NOTRUN -> [SKIP][11] ([Intel XE#5808]) +1 other test skip
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_big_fb@x-tiled-64bpp-rotate-270.html

  * igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow:
    - shard-bmg:          NOTRUN -> [SKIP][12] ([Intel XE#607] / [Intel XE#7361])
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow.html

  * igt@kms_big_fb@yf-tiled-addfb-size-overflow:
    - shard-bmg:          NOTRUN -> [SKIP][13] ([Intel XE#610] / [Intel XE#7387])
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-5/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180:
    - shard-bmg:          NOTRUN -> [SKIP][14] ([Intel XE#1124]) +2 other tests skip
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180.html

  * igt@kms_bw@connected-linear-tiling-3-displays-target-2560x1440p:
    - shard-bmg:          NOTRUN -> [SKIP][15] ([Intel XE#7679])
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@kms_bw@connected-linear-tiling-3-displays-target-2560x1440p.html

  * igt@kms_bw@connected-linear-tiling-3-displays-target-3840x2160p:
    - shard-ptl:          NOTRUN -> [SKIP][16] ([Intel XE#7679])
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_bw@connected-linear-tiling-3-displays-target-3840x2160p.html

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

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

  * igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-mc-ccs:
    - shard-bmg:          NOTRUN -> [SKIP][19] ([Intel XE#2887]) +5 other tests skip
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-mc-ccs.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc:
    - shard-bmg:          NOTRUN -> [SKIP][20] ([Intel XE#3432]) +1 other test skip
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-rc-ccs-cc.html

  * igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-rc-ccs-cc:
    - shard-ptl:          NOTRUN -> [SKIP][21] ([Intel XE#5822])
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-rc-ccs-cc.html

  * igt@kms_chamelium_audio@dp-audio-after-suspend:
    - shard-bmg:          NOTRUN -> [SKIP][22] ([Intel XE#2252]) +4 other tests skip
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@kms_chamelium_audio@dp-audio-after-suspend.html

  * igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lim:
    - shard-bmg:          NOTRUN -> [SKIP][23] ([Intel XE#7358]) +1 other test skip
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-5/igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lim.html

  * igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lim-lut1d:
    - shard-ptl:          NOTRUN -> [SKIP][24] ([Intel XE#8391]) +1 other test skip
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lim-lut1d.html

  * igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt601-lut1d@pipe-d-plane-2:
    - shard-bmg:          NOTRUN -> [FAIL][25] ([Intel XE#9333]) +12 other tests fail
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt601-lut1d@pipe-d-plane-2.html

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

  * igt@kms_content_protection@atomic:
    - shard-ptl:          NOTRUN -> [SKIP][27] ([Intel XE#7642]) +1 other test skip
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_content_protection@atomic.html

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

  * igt@kms_content_protection@lic-type-1:
    - shard-bmg:          NOTRUN -> [SKIP][29] ([Intel XE#7642])
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@kms_content_protection@lic-type-1.html

  * igt@kms_cursor_crc@cursor-onscreen-32x10:
    - shard-bmg:          NOTRUN -> [SKIP][30] ([Intel XE#2320])
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@kms_cursor_crc@cursor-onscreen-32x10.html

  * igt@kms_cursor_crc@cursor-sliding-512x170:
    - shard-ptl:          NOTRUN -> [SKIP][31] ([Intel XE#5846])
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_cursor_crc@cursor-sliding-512x170.html

  * igt@kms_cursor_crc@cursor-suspend:
    - shard-bmg:          [PASS][32] -> [INCOMPLETE][33] ([Intel XE#9210]) +1 other test incomplete
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-bmg-4/igt@kms_cursor_crc@cursor-suspend.html
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-6/igt@kms_cursor_crc@cursor-suspend.html

  * igt@kms_cursor_legacy@flip-vs-cursor-atomic:
    - shard-bmg:          [PASS][34] -> [FAIL][35] ([Intel XE#7809])
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-bmg-5/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-1/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html

  * igt@kms_dsc@dsc-with-output-formats-ultrajoiner:
    - shard-bmg:          NOTRUN -> [SKIP][36] ([Intel XE#8265]) +1 other test skip
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-5/igt@kms_dsc@dsc-with-output-formats-ultrajoiner.html

  * igt@kms_feature_discovery@display-3x:
    - shard-bmg:          NOTRUN -> [SKIP][37] ([Intel XE#2373] / [Intel XE#7448])
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@kms_feature_discovery@display-3x.html

  * igt@kms_flip@2x-flip-vs-absolute-wf_vblank:
    - shard-ptl:          NOTRUN -> [SKIP][38] ([Intel XE#2316])
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_flip@2x-flip-vs-absolute-wf_vblank.html

  * igt@kms_flip@wf_vblank-ts-check-interruptible@c-edp1:
    - shard-ptl:          [PASS][39] -> [FAIL][40] ([Intel XE#3098]) +1 other test fail
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-ptl-4/igt@kms_flip@wf_vblank-ts-check-interruptible@c-edp1.html
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-6/igt@kms_flip@wf_vblank-ts-check-interruptible@c-edp1.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-downscaling:
    - shard-ptl:          NOTRUN -> [SKIP][41] ([Intel XE#7178])
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-downscaling.html

  * igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc:
    - shard-bmg:          NOTRUN -> [SKIP][42] ([Intel XE#2311]) +25 other tests skip
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-cur-indfb-onoff:
    - shard-ptl:          NOTRUN -> [SKIP][43] ([Intel XE#6312]) +1 other test skip
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-cur-indfb-onoff.html

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

  * igt@kms_frontbuffer_tracking@fbc-tiling-y:
    - shard-bmg:          NOTRUN -> [SKIP][45] ([Intel XE#2352] / [Intel XE#7399])
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@kms_frontbuffer_tracking@fbc-tiling-y.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-1p-pri-indfb-multidraw:
    - shard-ptl:          NOTRUN -> [SKIP][46] ([Intel XE#5800] / [Intel XE#6312])
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_frontbuffer_tracking@fbcdrrs-1p-pri-indfb-multidraw.html

  * igt@kms_frontbuffer_tracking@fbchdr-argb161616f-draw-render:
    - shard-bmg:          NOTRUN -> [SKIP][47] ([Intel XE#7061]) +1 other test skip
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@kms_frontbuffer_tracking@fbchdr-argb161616f-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcpsrhdr-slowdraw:
    - shard-ptl:          NOTRUN -> [SKIP][48] ([Intel XE#7865]) +3 other tests skip
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_frontbuffer_tracking@fbcpsrhdr-slowdraw.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-pgflip-blt:
    - shard-ptl:          NOTRUN -> [SKIP][49] ([Intel XE#5812]) +3 other tests skip
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-abgr161616f-draw-blt:
    - shard-bmg:          NOTRUN -> [SKIP][50] ([Intel XE#7061] / [Intel XE#7356]) +2 other tests skip
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@kms_frontbuffer_tracking@psr-abgr161616f-draw-blt.html

  * igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-shrfb-plflip-blt:
    - shard-bmg:          NOTRUN -> [SKIP][51] ([Intel XE#2313]) +28 other tests skip
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@kms_frontbuffer_tracking@psrhdr-1p-primscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@psrhdr-abgr161616f-draw-mmap-wc:
    - shard-ptl:          NOTRUN -> [SKIP][52] ([Intel XE#7061])
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_frontbuffer_tracking@psrhdr-abgr161616f-draw-mmap-wc.html

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

  * igt@kms_plane@pixel-format-x-tiled-modifier-source-clamping:
    - shard-ptl:          NOTRUN -> [SKIP][54] ([Intel XE#7283])
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_plane@pixel-format-x-tiled-modifier-source-clamping.html

  * igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier-source-clamping:
    - shard-bmg:          NOTRUN -> [SKIP][55] ([Intel XE#7283]) +3 other tests skip
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-5/igt@kms_plane@pixel-format-y-tiled-gen12-mc-ccs-modifier-source-clamping.html

  * igt@kms_plane_lowres@tiling-4:
    - shard-ptl:          NOTRUN -> [SKIP][56] ([Intel XE#5844]) +4 other tests skip
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_plane_lowres@tiling-4.html

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

  * igt@kms_pm_backlight@fade-with-suspend:
    - shard-bmg:          NOTRUN -> [SKIP][58] ([Intel XE#7376] / [Intel XE#7760] / [Intel XE#870])
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@kms_pm_backlight@fade-with-suspend.html

  * igt@kms_pm_rpm@modeset-non-lpsp-stress:
    - shard-ptl:          NOTRUN -> [SKIP][59] ([Intel XE#5849])
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_pm_rpm@modeset-non-lpsp-stress.html

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

  * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-fully-sf@pipe-b-edp-1:
    - shard-ptl:          NOTRUN -> [SKIP][61] ([Intel XE#5858] / [Intel XE#7304]) +1 other test skip
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-fully-sf@pipe-b-edp-1.html

  * igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-sf:
    - shard-bmg:          NOTRUN -> [SKIP][62] ([Intel XE#1489]) +3 other tests skip
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-sf.html

  * igt@kms_psr2_su@page_flip-p010:
    - shard-bmg:          NOTRUN -> [SKIP][63] ([Intel XE#2387] / [Intel XE#7429])
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@kms_psr2_su@page_flip-p010.html

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

  * igt@kms_psr@fbc-psr2-sprite-blt:
    - shard-bmg:          NOTRUN -> [SKIP][65] ([Intel XE#2234] / [Intel XE#2850]) +4 other tests skip
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@kms_psr@fbc-psr2-sprite-blt.html

  * igt@kms_rotation_crc@primary-rotation-90:
    - shard-ptl:          NOTRUN -> [SKIP][66] ([Intel XE#5821])
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@kms_rotation_crc@primary-rotation-90.html

  * igt@kms_rotation_crc@sprite-rotation-90:
    - shard-bmg:          NOTRUN -> [SKIP][67] ([Intel XE#3904] / [Intel XE#7342]) +1 other test skip
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@kms_rotation_crc@sprite-rotation-90.html

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

  * igt@kms_vrr@flip-basic:
    - shard-ptl:          [PASS][69] -> [FAIL][70] ([Intel XE#4227] / [Intel XE#7397]) +1 other test fail
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-ptl-4/igt@kms_vrr@flip-basic.html
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-6/igt@kms_vrr@flip-basic.html

  * igt@xe_evict@evict-large-external:
    - shard-ptl:          NOTRUN -> [SKIP][71] ([Intel XE#5764]) +1 other test skip
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@xe_evict@evict-large-external.html

  * igt@xe_evict@evict-mixed-many-threads-small:
    - shard-bmg:          [PASS][72] -> [INCOMPLETE][73] ([Intel XE#6321] / [Intel XE#8355])
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-bmg-7/igt@xe_evict@evict-mixed-many-threads-small.html
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@xe_evict@evict-mixed-many-threads-small.html

  * igt@xe_evict@evict-threads-small-multi-queue:
    - shard-bmg:          NOTRUN -> [SKIP][74] ([Intel XE#8370]) +1 other test skip
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@xe_evict@evict-threads-small-multi-queue.html

  * igt@xe_evict_ccs@evict-overcommit-parallel-instantfree-reopen:
    - shard-ptl:          NOTRUN -> [SKIP][75] ([Intel XE#6144])
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@xe_evict_ccs@evict-overcommit-parallel-instantfree-reopen.html

  * igt@xe_exec_balancer@twice-cm-virtual-userptr-invalidate-race:
    - shard-ptl:          NOTRUN -> [SKIP][76] ([Intel XE#7482]) +1 other test skip
   [76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@xe_exec_balancer@twice-cm-virtual-userptr-invalidate-race.html

  * igt@xe_exec_basic@multigpu-many-execqueues-many-vm-userptr-invalidate:
    - shard-bmg:          NOTRUN -> [SKIP][77] ([Intel XE#2322] / [Intel XE#7372]) +2 other tests skip
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-userptr-invalidate.html

  * igt@xe_exec_basic@multigpu-once-null-defer-bind:
    - shard-ptl:          NOTRUN -> [SKIP][78] ([Intel XE#5575] / [Intel XE#7484])
   [78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@xe_exec_basic@multigpu-once-null-defer-bind.html

  * igt@xe_exec_fault_mode@many-execqueues-multi-queue-userptr-rebind:
    - shard-ptl:          NOTRUN -> [SKIP][79] ([Intel XE#8374]) +2 other tests skip
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@xe_exec_fault_mode@many-execqueues-multi-queue-userptr-rebind.html

  * igt@xe_exec_fault_mode@once-multi-queue-userptr-invalidate-prefetch:
    - shard-bmg:          NOTRUN -> [SKIP][80] ([Intel XE#8374]) +5 other tests skip
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@xe_exec_fault_mode@once-multi-queue-userptr-invalidate-prefetch.html

  * igt@xe_exec_multi_queue@few-execs-preempt-mode-priority:
    - shard-bmg:          NOTRUN -> [SKIP][81] ([Intel XE#8364]) +10 other tests skip
   [81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@xe_exec_multi_queue@few-execs-preempt-mode-priority.html

  * igt@xe_exec_multi_queue@many-queues-preempt-mode-fault-priority:
    - shard-ptl:          NOTRUN -> [SKIP][82] ([Intel XE#8364]) +4 other tests skip
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@xe_exec_multi_queue@many-queues-preempt-mode-fault-priority.html

  * igt@xe_exec_reset@cm-multi-queue-cat-error:
    - shard-bmg:          NOTRUN -> [SKIP][83] ([Intel XE#8369])
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@xe_exec_reset@cm-multi-queue-cat-error.html

  * igt@xe_exec_system_allocator@process-many-large-execqueues-free-madvise:
    - shard-bmg:          [PASS][84] -> [DMESG-WARN][85] ([Intel XE#9331]) +32 other tests dmesg-warn
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-bmg-9/igt@xe_exec_system_allocator@process-many-large-execqueues-free-madvise.html
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-8/igt@xe_exec_system_allocator@process-many-large-execqueues-free-madvise.html

  * igt@xe_exec_system_allocator@threads-many-execqueues-mmap-remap-madvise:
    - shard-bmg:          NOTRUN -> [DMESG-WARN][86] ([Intel XE#9331]) +21 other tests dmesg-warn
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@xe_exec_system_allocator@threads-many-execqueues-mmap-remap-madvise.html

  * igt@xe_exec_threads@threads-multi-queue-mixed-userptr:
    - shard-bmg:          NOTRUN -> [SKIP][87] ([Intel XE#8378]) +3 other tests skip
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@xe_exec_threads@threads-multi-queue-mixed-userptr.html

  * igt@xe_fault_injection@probe-fail-guc-xe_guc_ct_send_recv:
    - shard-bmg:          [PASS][88] -> [DMESG-WARN][89] ([Intel XE#7898])
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-bmg-4/igt@xe_fault_injection@probe-fail-guc-xe_guc_ct_send_recv.html
   [89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-1/igt@xe_fault_injection@probe-fail-guc-xe_guc_ct_send_recv.html

  * igt@xe_fault_injection@probe-fail-guc-xe_guc_mmio_send_recv:
    - shard-bmg:          [PASS][90] -> [ABORT][91] ([Intel XE#8007])
   [90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-bmg-8/igt@xe_fault_injection@probe-fail-guc-xe_guc_mmio_send_recv.html
   [91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-4/igt@xe_fault_injection@probe-fail-guc-xe_guc_mmio_send_recv.html

  * igt@xe_module_load@reload-no-display:
    - shard-ptl:          [PASS][92] -> [ABORT][93] ([Intel XE#7893])
   [92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-ptl-1/igt@xe_module_load@reload-no-display.html
   [93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-3/igt@xe_module_load@reload-no-display.html
    - shard-lnl:          [PASS][94] -> [ABORT][95] ([Intel XE#7893])
   [94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-lnl-3/igt@xe_module_load@reload-no-display.html
   [95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-lnl-6/igt@xe_module_load@reload-no-display.html

  * igt@xe_multigpu_svm@mgpu-latency-basic:
    - shard-bmg:          NOTRUN -> [SKIP][96] ([Intel XE#6964])
   [96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@xe_multigpu_svm@mgpu-latency-basic.html

  * igt@xe_oa@non-zero-reason-all:
    - shard-ptl:          [PASS][97] -> [FAIL][98] ([Intel XE#7334]) +1 other test fail
   [97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-ptl-7/igt@xe_oa@non-zero-reason-all.html
   [98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-1/igt@xe_oa@non-zero-reason-all.html

  * igt@xe_page_reclaim@boundary-split:
    - shard-bmg:          NOTRUN -> [SKIP][99] ([Intel XE#7793]) +1 other test skip
   [99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@xe_page_reclaim@boundary-split.html

  * igt@xe_pat@l2-flush-opt-svm-pat-restrict:
    - shard-bmg:          NOTRUN -> [SKIP][100] ([Intel XE#7590])
   [100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@xe_pat@l2-flush-opt-svm-pat-restrict.html

  * igt@xe_peer2peer@write:
    - shard-bmg:          NOTRUN -> [SKIP][101] ([Intel XE#2427] / [Intel XE#6953] / [Intel XE#7326] / [Intel XE#7353])
   [101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@xe_peer2peer@write.html

  * igt@xe_pm@s3-exec-after:
    - shard-ptl:          NOTRUN -> [SKIP][102] ([Intel XE#6867])
   [102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-8/igt@xe_pm@s3-exec-after.html

  * igt@xe_prefetch_fault@prefetch-fault:
    - shard-bmg:          NOTRUN -> [SKIP][103] ([Intel XE#7599])
   [103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@xe_prefetch_fault@prefetch-fault.html

  * igt@xe_pxp@pxp-stale-bo-bind-post-rpm:
    - shard-bmg:          NOTRUN -> [SKIP][104] ([Intel XE#4733] / [Intel XE#7417])
   [104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@xe_pxp@pxp-stale-bo-bind-post-rpm.html

  * igt@xe_wedged@basic-wedged:
    - shard-bmg:          NOTRUN -> [DMESG-WARN][105] ([Intel XE#8963])
   [105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@xe_wedged@basic-wedged.html

  
#### Possible fixes ####

  * igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
    - shard-bmg:          [INCOMPLETE][106] -> [PASS][107]
   [106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-bmg-10/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
   [107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-5/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html

  * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
    - shard-bmg:          [INCOMPLETE][108] ([Intel XE#7084] / [Intel XE#8150]) -> [PASS][109] +1 other test pass
   [108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-bmg-9/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
   [109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html

  * igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions-varying-size:
    - shard-bmg:          [DMESG-WARN][110] ([Intel XE#9221]) -> [PASS][111]
   [110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-bmg-3/igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions-varying-size.html
   [111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-8/igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions-varying-size.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1:
    - shard-lnl:          [FAIL][112] ([Intel XE#301]) -> [PASS][113] +1 other test pass
   [112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html
   [113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-lnl-3/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html

  * igt@kms_vrr@flip-basic-fastset:
    - shard-ptl:          [FAIL][114] ([Intel XE#4227] / [Intel XE#7397]) -> [PASS][115]
   [114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-ptl-3/igt@kms_vrr@flip-basic-fastset.html
   [115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-7/igt@kms_vrr@flip-basic-fastset.html

  * igt@kms_vrr@flip-basic-fastset@pipe-a-edp-1:
    - shard-ptl:          [FAIL][116] ([Intel XE#6293] / [Intel XE#7397]) -> [PASS][117]
   [116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-ptl-3/igt@kms_vrr@flip-basic-fastset@pipe-a-edp-1.html
   [117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-7/igt@kms_vrr@flip-basic-fastset@pipe-a-edp-1.html

  * igt@kms_vrr@max-min:
    - shard-lnl:          [FAIL][118] ([Intel XE#4227]) -> [PASS][119] +1 other test pass
   [118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-lnl-7/igt@kms_vrr@max-min.html
   [119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-lnl-6/igt@kms_vrr@max-min.html

  * igt@xe_exec_system_allocator@once-malloc-bo-unmap:
    - shard-bmg:          [DMESG-WARN][120] ([Intel XE#9331]) -> [PASS][121] +35 other tests pass
   [120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-bmg-2/igt@xe_exec_system_allocator@once-malloc-bo-unmap.html
   [121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-9/igt@xe_exec_system_allocator@once-malloc-bo-unmap.html

  * igt@xe_exec_threads@threads-hang-userptr-invalidate-race:
    - shard-bmg:          [FAIL][122] ([Intel XE#9096]) -> [PASS][123]
   [122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-bmg-8/igt@xe_exec_threads@threads-hang-userptr-invalidate-race.html
   [123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-5/igt@xe_exec_threads@threads-hang-userptr-invalidate-race.html

  
#### Warnings ####

  * igt@kms_hdr@brightness-with-hdr:
    - shard-bmg:          [SKIP][124] ([Intel XE#3374] / [Intel XE#3544]) -> [SKIP][125] ([Intel XE#3544])
   [124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-bmg-7/igt@kms_hdr@brightness-with-hdr.html
   [125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-10/igt@kms_hdr@brightness-with-hdr.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-bmg:          [FAIL][126] ([Intel XE#1729] / [Intel XE#7424]) -> [SKIP][127] ([Intel XE#2426] / [Intel XE#5848])
   [126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-bmg-3/igt@kms_tiled_display@basic-test-pattern.html
   [127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-bmg-8/igt@kms_tiled_display@basic-test-pattern.html

  * igt@xe_exec_reset@gt-reset-fault-injection:
    - shard-ptl:          [DMESG-WARN][128] ([Intel XE#9130]) -> [ABORT][129] ([Intel XE#8007] / [Intel XE#9145])
   [128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-ptl-8/igt@xe_exec_reset@gt-reset-fault-injection.html
   [129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-5/igt@xe_exec_reset@gt-reset-fault-injection.html
    - shard-lnl:          [DMESG-WARN][130] ([Intel XE#9130]) -> [ABORT][131] ([Intel XE#8007] / [Intel XE#9145])
   [130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-lnl-2/igt@xe_exec_reset@gt-reset-fault-injection.html
   [131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-lnl-5/igt@xe_exec_reset@gt-reset-fault-injection.html

  * igt@xe_wedged@basic-wedged:
    - shard-ptl:          [DMESG-WARN][132] ([Intel XE#8963]) -> [ABORT][133] ([Intel XE#8007] / [Intel XE#8963]) +1 other test abort
   [132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-ptl-8/igt@xe_wedged@basic-wedged.html
   [133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-ptl-4/igt@xe_wedged@basic-wedged.html
    - shard-lnl:          [DMESG-WARN][134] ([Intel XE#8963]) -> [ABORT][135] ([Intel XE#8007] / [Intel XE#8963]) +1 other test abort
   [134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d/shard-lnl-8/igt@xe_wedged@basic-wedged.html
   [135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-172860v2/shard-lnl-3/igt@xe_wedged@basic-wedged.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [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#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [Intel XE#2352]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2352
  [Intel XE#2373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2373
  [Intel XE#2387]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2387
  [Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
  [Intel XE#2427]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2427
  [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#3098]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3098
  [Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
  [Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
  [Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
  [Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
  [Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
  [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#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#5844]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5844
  [Intel XE#5846]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5846
  [Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
  [Intel XE#5849]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5849
  [Intel XE#5858]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5858
  [Intel XE#607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/607
  [Intel XE#610]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/610
  [Intel XE#6144]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6144
  [Intel XE#6293]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6293
  [Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
  [Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
  [Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
  [Intel XE#6867]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6867
  [Intel XE#6886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6886
  [Intel XE#6900]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6900
  [Intel XE#6953]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6953
  [Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
  [Intel XE#6969]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6969
  [Intel XE#6974]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6974
  [Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
  [Intel XE#7084]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7084
  [Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
  [Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
  [Intel XE#7304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7304
  [Intel XE#7326]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7326
  [Intel XE#7334]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7334
  [Intel XE#7342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7342
  [Intel XE#7353]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7353
  [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#7361]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7361
  [Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
  [Intel XE#7376]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7376
  [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#7399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7399
  [Intel XE#7413]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7413
  [Intel XE#7417]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7417
  [Intel XE#7424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7424
  [Intel XE#7429]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7429
  [Intel XE#7448]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7448
  [Intel XE#7482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7482
  [Intel XE#7484]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7484
  [Intel XE#7590]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7590
  [Intel XE#7599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7599
  [Intel XE#7642]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7642
  [Intel XE#7679]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7679
  [Intel XE#7760]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7760
  [Intel XE#7793]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7793
  [Intel XE#7809]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7809
  [Intel XE#7865]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7865
  [Intel XE#7893]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7893
  [Intel XE#7898]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7898
  [Intel XE#8007]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8007
  [Intel XE#8150]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8150
  [Intel XE#8265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8265
  [Intel XE#8355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8355
  [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#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
  [Intel XE#8963]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8963
  [Intel XE#9096]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9096
  [Intel XE#9130]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9130
  [Intel XE#9145]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9145
  [Intel XE#9210]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9210
  [Intel XE#9221]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9221
  [Intel XE#9331]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9331
  [Intel XE#9333]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9333


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

  * Linux: xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d -> xe-pw-172860v2

  IGT_9107: bba540a799a5f1a3c7ddc3a2b864678241377773 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-5802-0433becdcbca8f779a8d32040a26718f2442e62d: 0433becdcbca8f779a8d32040a26718f2442e62d
  xe-pw-172860v2: 172860v2

== Logs ==

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

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

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

end of thread, other threads:[~2026-09-22 20:50 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-22 10:16 [PATCH v2 00/15] drm/xe: Isolate wedged devices from hardware access Arvind Yadav
2026-09-22 10:16 ` [PATCH v2 01/15] drm/xe/irq: Always free requested IRQs on uninstall Arvind Yadav
2026-09-22 10:16 ` [PATCH v2 02/15] drm/drv: Export drm_dev_srcu_synchronize() Arvind Yadav
2026-09-22 10:16 ` [PATCH v2 03/15] drm/xe: Separate AER reset state from device wedging Arvind Yadav
2026-09-22 10:16 ` [PATCH v2 04/15] drm/xe: Protect device I/O with DRM device SRCU Arvind Yadav
2026-09-22 10:28   ` sashiko-bot
2026-09-22 10:16 ` [PATCH v2 05/15] drm/xe: Drop queued page faults when device I/O is blocked Arvind Yadav
2026-09-22 10:16 ` [PATCH v2 06/15] drm/xe: Stop VM work " Arvind Yadav
2026-09-22 10:16 ` [PATCH v2 07/15] drm/xe: Send wedged notification from a worker Arvind Yadav
2026-09-22 10:27   ` sashiko-bot
2026-09-22 10:16 ` [PATCH v2 08/15] drm/xe: Reuse one dummy page per BO after wedge Arvind Yadav
2026-09-22 10:16 ` [PATCH v2 09/15] drm/xe: Invalidate existing VRAM mappings on wedge Arvind Yadav
2026-09-22 10:30   ` sashiko-bot
2026-09-22 10:16 ` [PATCH v2 10/15] drm/xe/irq: Protect IRQ state during wedge isolation Arvind Yadav
2026-09-22 10:16 ` [PATCH v2 11/15] drm/xe: Isolate a wedged device before notifying userspace Arvind Yadav
2026-09-22 10:31   ` sashiko-bot
2026-09-22 10:16 ` [PATCH v2 12/15] drm/xe/ttm: Reject VRAM allocations on wedged devices Arvind Yadav
2026-09-22 10:16 ` [PATCH v2 13/15] drm/xe/guc: Skip timeout recovery on a wedged device Arvind Yadav
2026-09-22 10:16 ` [PATCH v2 14/15] drm/xe: Skip PM notifier preparation when device I/O is blocked Arvind Yadav
2026-09-22 10:17 ` [PATCH v2 15/15] drm/xe: Block BO VM access when device I/O is unavailable Arvind Yadav
2026-09-22 10:27 ` ✓ CI.KUnit: success for drm/xe: Isolate wedged devices from hardware access (rev2) Patchwork
2026-09-22 12:26 ` ✗ Xe.CI.BAT: failure " Patchwork
2026-09-22 20:50 ` ✗ Xe.CI.FULL: " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).