* [PATCH v2 0/3] drm, drm/xe: Protect against premature module unloads
@ 2026-09-24 8:04 Thomas Hellström
2026-09-24 8:04 ` [PATCH v2 1/3] drm: Provide a drm_dev_release_barrier() function to wait for device release callbacks Thomas Hellström
` (5 more replies)
0 siblings, 6 replies; 11+ messages in thread
From: Thomas Hellström @ 2026-09-24 8:04 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Matthew Brost, Rodrigo Vivi, Matthew Auld,
dri-devel, Danilo Krummrich, Alice Ryhl, Alex Deucher,
Christian König
Driver and shared DRM helper code is increasingly relying on bare
drm_device references (drm_dev_get()/drm_dev_put()) to keep a device's
software state around, without also pairing that with a reference on
the owning kernel module. Xe itself does this in several places, and
so does drm_gpuvm for the lifetime of a GPU VM. None of these
references currently prevent the owning module from being unloaded
while they, or the teardown work they can still trigger, are
outstanding, meaning driver code can end up executing after its own
module's text has already been freed.
This series closes that gap for xe:
- Patch 1 adds core DRM infrastructure allowing a driver to wait for
its outstanding device-release callbacks to finish before
proceeding with module unload.
- Patch 2 makes xe use this infrastructure to hold up module unload
until every xe_device instance has actually been released, rather
than only until the module's own refcount happens to reach zero,
with a diagnostic if this ends up taking an unexpectedly long time.
- Patch 3 fixes a related, previously unprotected case where the
teardown of a GPU VM or its address space mappings can be deferred
to run at an arbitrary later time, including after module unload has
already completed.
Together, these changes ensure `rmmod xe` cannot free the module's
memory while any of its devices, or asynchronous work stemming from
them, might still be executing.
v2:
- Use plain WARN_ON_ONCE() instead of drm_WARN_ON_ONCE(NULL, ...) in
drm_dev_release_barrier(), fixing a NULL pointer dereference on the
warning path itself (patch 1, sashiko)
- Updated the commit message of patch 2 to describe the actual
implementation (a single 20s wait_var_event_timeout() followed by
one pr_warn() and an unbounded wait_var_event(), rather than a loop
retrying with a diagnostic every 10s) and its uninterruptible-sleep
tradeoff (sashiko)
Thomas Hellström (3):
drm: Provide a drm_dev_release_barrier() function to wait for device
release callbacks
drm/xe: Don't unload the driver until all drm devices are freed
drm/xe: Route deferred xe_vma/xe_vm teardown off system_dfl_wq
drivers/gpu/drm/drm_drv.c | 56 ++++++++++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_device.c | 42 +++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_device.h | 2 ++
drivers/gpu/drm/xe/xe_module.c | 24 +++++++++++++--
drivers/gpu/drm/xe/xe_vm.c | 5 +--
include/drm/drm_drv.h | 24 +++++++++++++++
6 files changed, 148 insertions(+), 5 deletions(-)
--
2.55.0
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v2 1/3] drm: Provide a drm_dev_release_barrier() function to wait for device release callbacks
2026-09-24 8:04 [PATCH v2 0/3] drm, drm/xe: Protect against premature module unloads Thomas Hellström
@ 2026-09-24 8:04 ` Thomas Hellström
2026-09-24 11:19 ` Christian König
2026-09-24 8:04 ` [PATCH v2 2/3] drm/xe: Don't unload the driver until all drm devices are freed Thomas Hellström
` (4 subsequent siblings)
5 siblings, 1 reply; 11+ messages in thread
From: Thomas Hellström @ 2026-09-24 8:04 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Matthew Brost, Rodrigo Vivi, Matthew Auld,
dri-devel, Danilo Krummrich, Alice Ryhl, Alex Deucher,
Christian König
Driver and drm helper code is increasingly relying on holding a bare
&drm_device reference (drm_dev_get()) without also holding a module
reference on the module that created the device.
For example drm_gpuvm_init() takes a drm_dev_get() reference on the
&drm_gpuvm's behalf with no accompanying module reference at all, and
drm_gpuvm_free() later calls the driver-supplied gpuvm->ops->vm_free()
callback, which lives in the driver module, before dropping that
reference. xe also takes bare drm_device references itself from
several asynchronous contexts, such as GuC submission fence workers,
EU stall, OA and PMU sampling code, relying only on those references
being dropped before the underlying xe_device, and eventually the
driver module, can be torn down.
If the module that created such a device is unloaded while one of
these bare references is still outstanding, and the corresponding
drm_dev_put() only completes after the module has already been
removed, the driver's ->release() callback, any drm managed release
actions, or a driver callback such as gpuvm->ops->vm_free(), all of
which live in that module's, by then freed, code, can end up being
invoked out of memory that no longer contains valid code.
Requiring every one of these bare drm_device references to also take a
module reference, as drm_pagemap does today via try_module_get(),
doesn't scale to shared helpers and driver-internal code with many
call sites, and is easy to get wrong.
Fix this properly by letting drivers keep a drm device-count and
ensure the module isn't unloaded until that count has dropped to zero
and until any release callback that had already started executing has
also finished executing.
To help with the latter, add a drm_dev_release_barrier() function.
The function ensures that any caller that has started executing
device release callbacks has also finished executing them.
Use SRCU for the implementation.
Rather than a single SRCU domain shared by all drivers, which would
mean drm_dev_release_barrier() could unnecessarily block a driver's
module unload on unrelated drivers' release callbacks, require each
driver that wants to use drm_dev_release_barrier() to supply its own
SRCU domain via a new &drm_driver.release_srcu field. Drivers should
define a static SRCU domain (DEFINE_STATIC_SRCU()) and set this field
to point at it. Leaving the field unset means @release and drm managed
release actions for that driver's devices simply aren't synchronized
against, and calling drm_dev_release_barrier() for such a driver is a
no-op that triggers a warning.
Since &drm_driver.release_srcu is a new field, every existing struct
drm_driver instance in the tree was scanned to confirm none of them
would leave it uninitialized with indeterminate content. All in-tree
instances have static storage duration (plain or const static
file-scope objects), or are members of a KUnit test fixture zeroed via
kunit_kzalloc(); no instance is stack-allocated or heap-allocated
without zeroing. Objects with static storage duration are guaranteed
by the C standard to have any member without an explicit initializer
zero-initialized, so the new field is reliably NULL, and
drm_dev_release() simply skips the SRCU critical section, for all
drivers that don't set it.
v2:
- Use plain WARN_ON_ONCE() instead of drm_WARN_ON_ONCE(NULL, ...) in
drm_dev_release_barrier(), since passing a NULL drm_device caused
the warning path itself to dereference that NULL pointer inside
dev_driver_string()/dev_name() (sashiko)
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Assisted-by: LLM
---
drivers/gpu/drm/drm_drv.c | 56 +++++++++++++++++++++++++++++++++++++++
include/drm/drm_drv.h | 24 +++++++++++++++++
2 files changed, 80 insertions(+)
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index 0cdc606af8d1..32a03170383c 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -921,18 +921,57 @@ EXPORT_SYMBOL(drm_dev_alloc);
static void drm_dev_release(struct kref *ref)
{
struct drm_device *dev = container_of(ref, struct drm_device, ref);
+ struct srcu_struct *srcu = dev->driver->release_srcu;
+ int idx = -1;
/* Just in case register/unregister was never called */
drm_debugfs_dev_fini(dev);
+ if (srcu)
+ idx = srcu_read_lock(srcu);
+
if (dev->driver->release)
dev->driver->release(dev);
drm_managed_release(dev);
+ if (srcu)
+ srcu_read_unlock(srcu, idx);
+
kfree(dev->managed.final_kfree);
}
+/**
+ * drm_dev_release_barrier() - Ensure drm device release callbacks are finished
+ * @driver: driver whose release callbacks to wait for
+ *
+ * If a device release method or any of the drm managed release callbacks
+ * have been called for a device created with @driver, wait until all of
+ * them have finished executing. This function can be used to help determine
+ * whether it's safe to unload a driver module.
+ *
+ * Assume for example the driver maintains a device count which is decremented
+ * using a drmm callback or a device release callback. From a drm device
+ * lifetime POV, it's then safe to unload the driver when that device-count
+ * has reached zero and drm_dev_release_barrier() has been called.
+ *
+ * @driver must have &drm_driver.release_srcu set to a driver-owned
+ * &struct srcu_struct for this function to have anything to wait for.
+ *
+ * This function only waits for the &drm_driver.release callback and drm
+ * managed release actions to finish. It does not, by itself, guarantee that
+ * whoever called drm_dev_put() to drop the reference triggering that release
+ * has itself finished running. See drm_dev_put() for that invariant.
+ */
+void drm_dev_release_barrier(const struct drm_driver *driver)
+{
+ if (WARN_ON_ONCE(!driver || !driver->release_srcu))
+ return;
+
+ synchronize_srcu(driver->release_srcu);
+}
+EXPORT_SYMBOL(drm_dev_release_barrier);
+
/**
* drm_dev_get - Take reference of a DRM device
* @dev: device to take reference of or NULL
@@ -958,6 +997,23 @@ EXPORT_SYMBOL(drm_dev_get);
*
* This decreases the ref-count of @dev by one. The device is destroyed if the
* ref-count drops to zero.
+ *
+ * If this call may drop the last reference, the calling code itself is
+ * responsible for ensuring it isn't unloaded (for example as part of a
+ * module) before this call has returned. This matters in particular for
+ * drivers relying on drm_dev_release_barrier() to determine when it's safe to
+ * unload, since that function only waits for the &drm_driver.release
+ * callback and drm managed release actions to finish, not for whoever calls
+ * drm_dev_put() to finish calling it.
+ *
+ * A common case is dropping the last reference from a deferred context, such
+ * as a workqueue item. In that case it's the responsibility of whoever
+ * queued that work item to guarantee it has run to completion before the
+ * module can unload, for example by draining a module-lifetime workqueue at
+ * module exit time. Holding a module reference only until the work item
+ * starts running is insufficient: that reference would already be dropped
+ * before this call runs, even though this call is what may still need the
+ * module's code to remain resident.
*/
void drm_dev_put(struct drm_device *dev)
{
diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
index b23830494ed4..30bb8727a896 100644
--- a/include/drm/drm_drv.h
+++ b/include/drm/drm_drv.h
@@ -48,6 +48,7 @@ struct drm_display_mode;
struct drm_mode_create_dumb;
struct drm_printer;
struct sg_table;
+struct srcu_struct;
/**
* enum drm_driver_feature - feature flags
@@ -255,6 +256,28 @@ struct drm_driver {
*/
void (*release) (struct drm_device *);
+ /**
+ * @release_srcu:
+ *
+ * Optional driver-owned SRCU domain used to synchronize completion of
+ * the @release callback and drm managed release actions with
+ * drm_dev_release_barrier().
+ *
+ * Left unset, @release and drm managed release actions for this
+ * driver's devices aren't synchronized with drm_dev_release_barrier()
+ * at all, and calling drm_dev_release_barrier() for this driver is a
+ * no-op that triggers a warning.
+ *
+ * Drivers that want to use drm_dev_release_barrier(), for example to
+ * help determine when it's safe to unload the driver module, should
+ * define their own static SRCU domain (DEFINE_STATIC_SRCU()) and set
+ * this field to point at it. Each driver should use its own domain,
+ * so that drm_dev_release_barrier() only waits for that driver's own
+ * release callbacks, rather than also for unrelated drivers sharing
+ * the same domain.
+ */
+ struct srcu_struct *release_srcu;
+
/**
* @master_set:
*
@@ -485,6 +508,7 @@ void drm_dev_exit(int idx);
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);
+void drm_dev_release_barrier(const struct drm_driver *driver);
/**
* drm_dev_is_unplugged - is a DRM device unplugged
--
2.55.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2 2/3] drm/xe: Don't unload the driver until all drm devices are freed
2026-09-24 8:04 [PATCH v2 0/3] drm, drm/xe: Protect against premature module unloads Thomas Hellström
2026-09-24 8:04 ` [PATCH v2 1/3] drm: Provide a drm_dev_release_barrier() function to wait for device release callbacks Thomas Hellström
@ 2026-09-24 8:04 ` Thomas Hellström
2026-09-24 21:00 ` Matthew Brost
2026-09-24 8:04 ` [PATCH v2 3/3] drm/xe: Route deferred xe_vma/xe_vm teardown off system_dfl_wq Thomas Hellström
` (3 subsequent siblings)
5 siblings, 1 reply; 11+ messages in thread
From: Thomas Hellström @ 2026-09-24 8:04 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Matthew Brost, Rodrigo Vivi, Matthew Auld,
dri-devel, Danilo Krummrich, Alice Ryhl, Alex Deucher,
Christian König
xe, and shared helpers it uses such as drm_gpuvm, already take bare
drm_device references (drm_dev_get()) from several contexts, for
example GuC submission fence workers, EU stall, OA and PMU sampling
code, and drm_gpuvm's own vm object lifetime, without pairing them
with a module reference. Since xe_exit() is only invoked after the
module's own refcount has dropped to zero, none of these references
currently prevent `rmmod xe` from proceeding while they, or the
underlying xe_device release path they can trigger, are still
outstanding, i.e. driver code belonging to a module whose text is
being freed could still end up executing.
Close this gap by keeping a device-count and waiting for it to reach
zero at module unload, then waiting for any release callback that has
started executing to finish, using the drm_dev_release_barrier()
infrastructure introduced in the previous commit.
The wait for the device-count to reach zero at module unload is
unbounded and non-interruptible. Rather than blocking silently forever
if a reference is ever leaked, use wait_var_event_timeout() with a 20s
timeout, well above the typical maximum dma_fence signalling time, and
warn once if devices still remain by then, before falling back to an
unbounded wait_var_event() so a stuck rmmod is at least observable
instead of an indefinite, silent hang.
Note that if a reference genuinely leaks, this still ends up as an
indefinite uninterruptible sleep, which may eventually trip the
kernel's hung-task watchdog. The alternative would be for these bare
drm_device references to also take a module reference, which would
instead make the module unable to be unloaded unless all its devices are
manually unbound first. The wait-based approach is chosen here since it
keeps rmmod usable in the common case.
Register a driver-private SRCU domain via the new
&drm_driver.release_srcu field on both xe drm_driver instances, and
pass the driver to drm_dev_release_barrier(). This keeps xe's wait for
its own release callbacks to complete from blocking on unrelated
drivers' release paths.
xe_device_exit() is added as a new module exit hook. Its entry in the
init_funcs[] table is placed between xe_destroy_wq_module_init and
xe_register_pci_driver, so that (exit functions run in reverse array
order) it executes after xe_unregister_pci_driver() has forced all
devices to unbind, but before xe_destroy_wq_module_exit() tears down
the module-lifetime xe_destroy_wq. This preserves xe_destroy_wq's
existing teardown ordering relative to xe_sched_job_module_exit() and
xe_hw_fence_module_exit(), which destroy kmem_caches that work drained
from xe_destroy_wq relies on, while ensuring xe_destroy_wq itself is
only torn down once xe_device_exit() has confirmed no more work can be
queued onto it.
v2:
- Updated commit message to describe the actual implementation (a
single 20s wait_var_event_timeout() followed by one pr_warn() and an
unbounded wait_var_event(), rather than a loop retrying with a
diagnostic every 10s) and its uninterruptible-sleep tradeoff
(sashiko)
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Assisted-by: LLM
---
drivers/gpu/drm/xe/xe_device.c | 42 ++++++++++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_device.h | 2 ++
drivers/gpu/drm/xe/xe_module.c | 18 ++++++++++++++-
3 files changed, 61 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 205cb4e7f9e8..bfb1b482d83d 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -8,6 +8,7 @@
#include <linux/aperture.h>
#include <linux/delay.h>
#include <linux/fault-inject.h>
+#include <linux/srcu.h>
#include <linux/units.h>
#include <drm/drm_client.h>
@@ -311,6 +312,13 @@ bool xe_is_xe_file(const struct file *file)
return file->f_op == &xe_driver_fops;
}
+/*
+ * Driver-owned SRCU domain used to synchronize completion of driver release
+ * callbacks with drm_dev_release_barrier(), so that xe_device_exit() doesn't
+ * have to wait on unrelated drivers' release paths.
+ */
+DEFINE_STATIC_SRCU(xe_dev_release_srcu);
+
static const struct drm_driver regular_driver = {
.driver_features =
XE_DISPLAY_DRIVER_FEATURES |
@@ -335,6 +343,7 @@ static const struct drm_driver regular_driver = {
.major = DRIVER_MAJOR,
.minor = DRIVER_MINOR,
.patchlevel = DRIVER_PATCHLEVEL,
+ .release_srcu = &xe_dev_release_srcu,
XE_DISPLAY_DRIVER_OPS,
};
@@ -357,6 +366,7 @@ static const struct drm_driver admin_only_driver = {
.major = DRIVER_MAJOR,
.minor = DRIVER_MINOR,
.patchlevel = DRIVER_PATCHLEVEL,
+ .release_srcu = &xe_dev_release_srcu,
};
/**
@@ -372,6 +382,9 @@ bool xe_device_is_admin_only(const struct xe_device *xe)
}
#endif
+/* Number of allocated struct xe_device */
+static atomic_t xe_device_count;
+
static void xe_device_destroy(struct drm_device *dev, void *dummy)
{
struct xe_device *xe = to_xe_device(dev);
@@ -391,6 +404,9 @@ static void xe_device_destroy(struct drm_device *dev, void *dummy)
destroy_workqueue(xe->destroy_wq);
ttm_device_fini(&xe->ttm);
+
+ if (atomic_dec_and_test(&xe_device_count))
+ wake_up_var(&xe_device_count);
}
/**
@@ -461,6 +477,7 @@ int xe_device_init_early(struct xe_device *xe)
return err;
xe_bo_dev_init(&xe->bo_device);
+ atomic_inc(&xe_device_count);
err = drmm_add_action_or_reset(&xe->drm, xe_device_destroy, NULL);
if (err)
return err;
@@ -1501,3 +1518,28 @@ struct xe_vm *xe_device_asid_to_vm(struct xe_device *xe, u32 asid)
return vm;
}
+
+/**
+ * xe_device_exit() - Device subsystem exit function.
+ *
+ * Exit function to be called at module unload time.
+ */
+void xe_device_exit(void)
+{
+ /*
+ * Wait for all devices to be freed. 20s is well above the typical
+ * maximum dma_fence signalling time, so warn and keep waiting if
+ * we're still not done by then, since it may indicate a leaked
+ * xe_device reference is stalling module unload.
+ */
+ if (!wait_var_event_timeout(&xe_device_count,
+ !atomic_read(&xe_device_count),
+ HZ * 20)) {
+ pr_warn("%s: Waiting for %d xe device(s) to be freed before unloading.\n",
+ DRIVER_NAME, atomic_read(&xe_device_count));
+ wait_var_event(&xe_device_count, !atomic_read(&xe_device_count));
+ }
+
+ /* Wait for any driver release callbacks to complete */
+ drm_dev_release_barrier(®ular_driver);
+}
diff --git a/drivers/gpu/drm/xe/xe_device.h b/drivers/gpu/drm/xe/xe_device.h
index 6d3d6d5eba29..83d6dafab53c 100644
--- a/drivers/gpu/drm/xe/xe_device.h
+++ b/drivers/gpu/drm/xe/xe_device.h
@@ -283,6 +283,8 @@ static inline bool xe_device_is_admin_only(const struct xe_device *xe)
}
#endif
+void xe_device_exit(void);
+
/*
* Occasionally it is seen that the G2H worker starts running after a delay of more than
* a second even after being queued and activated by the Linux workqueue subsystem. This
diff --git a/drivers/gpu/drm/xe/xe_module.c b/drivers/gpu/drm/xe/xe_module.c
index 4bc28dfc1992..c61bd33546f2 100644
--- a/drivers/gpu/drm/xe/xe_module.c
+++ b/drivers/gpu/drm/xe/xe_module.c
@@ -12,7 +12,7 @@
#include <drm/drm_module.h>
#include "xe_defaults.h"
-#include "xe_device_types.h"
+#include "xe_device.h"
#include "xe_drv.h"
#include "xe_configfs.h"
#include "xe_hw_fence.h"
@@ -162,6 +162,22 @@ static const struct init_funcs init_funcs[] = {
.init = xe_destroy_wq_module_init,
.exit = xe_destroy_wq_module_exit,
},
+ /*
+ * xe_destroy_wq_module_exit() must run after xe_device_exit()
+ * (below), since freeing a device can still queue work on
+ * xe_destroy_wq that must be drained before the module can safely
+ * unload. At the same time, xe_device_exit() must run after
+ * xe_unregister_pci_driver() (below), and xe_destroy_wq_module_exit()
+ * must run before xe_sched_job_module_exit() and
+ * xe_hw_fence_module_exit() (above), whose kmem_caches are still used
+ * by work drained from xe_destroy_wq. Exit functions run in reverse
+ * array order, so this entry must sit between the
+ * xe_destroy_wq_module_init entry above and the xe_register_pci_driver
+ * entry below.
+ */
+ {
+ .exit = xe_device_exit,
+ },
{
.init = xe_register_pci_driver,
.exit = xe_unregister_pci_driver,
--
2.55.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v2 3/3] drm/xe: Route deferred xe_vma/xe_vm teardown off system_dfl_wq
2026-09-24 8:04 [PATCH v2 0/3] drm, drm/xe: Protect against premature module unloads Thomas Hellström
2026-09-24 8:04 ` [PATCH v2 1/3] drm: Provide a drm_dev_release_barrier() function to wait for device release callbacks Thomas Hellström
2026-09-24 8:04 ` [PATCH v2 2/3] drm/xe: Don't unload the driver until all drm devices are freed Thomas Hellström
@ 2026-09-24 8:04 ` Thomas Hellström
2026-09-24 20:55 ` Matthew Brost
2026-09-24 8:14 ` ✓ CI.KUnit: success for drm, drm/xe: Protect against premature module unloads (rev2) Patchwork
` (2 subsequent siblings)
5 siblings, 1 reply; 11+ messages in thread
From: Thomas Hellström @ 2026-09-24 8:04 UTC (permalink / raw)
To: intel-xe
Cc: Thomas Hellström, Matthew Brost, Rodrigo Vivi, Matthew Auld,
dri-devel, Danilo Krummrich, Alice Ryhl, Alex Deucher,
Christian König
xe_vma_destroy() can defer the final teardown of a struct xe_vma to a
dma_fence completion callback (vma_destroy_cb()), and xe_vm_free() (the
drm_gpuvm_ops.vm_free callback) always defers struct xe_vm teardown to
a work item, since destroying a VM needs to sleep. Both used to queue
their work on system_dfl_wq, a global, kernel-wide workqueue that xe
has no control over and never waits on during module unload.
drm_gpuvm_free() drops its drm_device reference immediately after
calling xe_vm_free(), without waiting for the deferred work to run.
The same applies one level down: whichever xe_vma or xe_vm reference
happens to be the last one can trigger this chain from a dma_fence
callback that may fire at an arbitrary time, including after the
owning file has already been closed and its own module reference
dropped. Since nothing tracks or waits for work queued on
system_dfl_wq, `rmmod xe` could succeed and free the module's text
while vma_destroy_work_func() or vm_destroy_work_func() is still
queued or running on it, jumping into freed code.
Fix this by queueing this work on xe_destroy_wq instead, the existing
module-lifetime workqueue already used for GuC exec queue teardown.
Unlike a per-device workqueue, this requires no dereference of a
struct xe_device that may already be gone by the time a deferred
callback fires, and unlike system_dfl_wq it is guaranteed to be
drained by xe_destroy_wq_module_exit() before the module is unloaded,
following the drm_pagemap_dev_hold()/unhold_work precedent of using a
workqueue that is waited on at module unload rather than a bare module
reference. The previous commit's reordering of xe_destroy_wq_exit()
to run after xe_device_exit() guarantees that xe_destroy_wq is only
torn down once the device-count has reached zero, i.e. after any
xe_vma or xe_vm whose teardown queues work here has already dropped
its drm_device reference and thus already queued that work.
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Assisted-by: LLM
---
drivers/gpu/drm/xe/xe_module.c | 6 ++++--
drivers/gpu/drm/xe/xe_vm.c | 5 +++--
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_module.c b/drivers/gpu/drm/xe/xe_module.c
index c61bd33546f2..897724cb5cfb 100644
--- a/drivers/gpu/drm/xe/xe_module.c
+++ b/drivers/gpu/drm/xe/xe_module.c
@@ -114,8 +114,10 @@ static void xe_destroy_wq_module_exit(void)
* xe_destroy_wq_queue() - Queue work on the destroy workqueue
* @work: work item to queue
*
- * The destroy workqueue has module lifetime and is used for GuC exec queue
- * teardown that can outlive a single xe_device. SVM pagemap destroy uses the
+ * The destroy workqueue has module lifetime, and is guaranteed to outlive
+ * any xe_device, and to be drained before the module is unloaded. It is used
+ * for GuC exec queue and xe_vm/xe_vma teardown that can be deferred past the
+ * lifetime of the xe_device that triggered it. SVM pagemap destroy uses the
* per-device xe->destroy_wq instead.
*
* Return: %true if @work was queued, %false if it was already pending.
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index 390da884c727..ee369e6c3b28 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -29,6 +29,7 @@
#include "xe_exec_queue.h"
#include "xe_gt.h"
#include "xe_migrate.h"
+#include "xe_module.h"
#include "xe_pagefault.h"
#include "xe_pat.h"
#include "xe_pm.h"
@@ -1249,7 +1250,7 @@ static void vma_destroy_cb(struct dma_fence *fence,
struct xe_vma *vma = container_of(cb, struct xe_vma, destroy_cb);
INIT_WORK(&vma->destroy_work, vma_destroy_work_func);
- queue_work(system_dfl_wq, &vma->destroy_work);
+ xe_destroy_wq_queue(&vma->destroy_work);
}
static void xe_vm_assert_write_mode_or_garbage_collector(struct xe_vm *vm)
@@ -2059,7 +2060,7 @@ static void xe_vm_free(struct drm_gpuvm *gpuvm)
struct xe_vm *vm = container_of(gpuvm, struct xe_vm, gpuvm);
/* To destroy the VM we need to be able to sleep */
- queue_work(system_dfl_wq, &vm->destroy_work);
+ xe_destroy_wq_queue(&vm->destroy_work);
}
struct xe_vm *xe_vm_lookup(struct xe_file *xef, u32 id)
--
2.55.0
^ permalink raw reply related [flat|nested] 11+ messages in thread
* ✓ CI.KUnit: success for drm, drm/xe: Protect against premature module unloads (rev2)
2026-09-24 8:04 [PATCH v2 0/3] drm, drm/xe: Protect against premature module unloads Thomas Hellström
` (2 preceding siblings ...)
2026-09-24 8:04 ` [PATCH v2 3/3] drm/xe: Route deferred xe_vma/xe_vm teardown off system_dfl_wq Thomas Hellström
@ 2026-09-24 8:14 ` Patchwork
2026-09-24 9:04 ` ✓ Xe.CI.BAT: " Patchwork
2026-09-24 22:28 ` ✓ Xe.CI.FULL: " Patchwork
5 siblings, 0 replies; 11+ messages in thread
From: Patchwork @ 2026-09-24 8:14 UTC (permalink / raw)
To: Thomas Hellström; +Cc: intel-xe
== Series Details ==
Series: drm, drm/xe: Protect against premature module unloads (rev2)
URL : https://patchwork.freedesktop.org/series/174805/
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
[08:12:33] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[08:12:38] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[08:12:58] Starting KUnit Kernel (1/1)...
[08:12:58] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[08:12:58] ============= refcount_interrupt (4 subtests) ==============
[08:12:58] [PASSED] test_single_irq_change
[08:12:58] [PASSED] test_nested_irq_change
[08:12:58] [PASSED] test_multiple_irq_change
[08:12:58] [PASSED] test_irq_save
[08:12:58] =============== [PASSED] refcount_interrupt ================
[08:12:58] ================= gpu_buddy (14 subtests) ==================
[08:12:58] [PASSED] gpu_test_buddy_alloc_limit
[08:12:58] [PASSED] gpu_test_buddy_alloc_optimistic
[08:12:58] [PASSED] gpu_test_buddy_alloc_pessimistic
[08:12:58] [PASSED] gpu_test_buddy_alloc_pathological
[08:12:58] [PASSED] gpu_test_buddy_alloc_contiguous
[08:12:58] [PASSED] gpu_test_buddy_alloc_clear
[08:12:58] [PASSED] gpu_test_buddy_alloc_range
[08:12:58] [PASSED] gpu_test_buddy_alloc_range_bias
[08:12:59] [PASSED] gpu_test_buddy_fragmentation_performance
[08:13:00] [PASSED] gpu_test_buddy_dirty_tracker_performance
[08:13:00] [PASSED] gpu_test_buddy_alloc_exceeds_max_order
[08:13:00] [PASSED] gpu_test_buddy_offset_aligned_allocation
[08:13:00] [PASSED] gpu_test_buddy_subtree_offset_alignment_stress
[08:13:00] [PASSED] gpu_test_buddy_addr_to_block
[08:13:00] ==================== [PASSED] gpu_buddy ====================
[08:13:00] ============================================================
[08:13:00] Testing complete. Ran 18 tests: passed: 18
[08:13:00] Elapsed time: 26.796s total, 4.379s configuring, 20.549s building, 1.824s 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
[08:13:00] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[08:13:02] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[08:13:36] Starting KUnit Kernel (1/1)...
[08:13:36] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[08:13:37] ============= refcount_interrupt (4 subtests) ==============
[08:13:37] [PASSED] test_single_irq_change
[08:13:37] [PASSED] test_nested_irq_change
[08:13:37] [PASSED] test_multiple_irq_change
[08:13:37] [PASSED] test_irq_save
[08:13:37] =============== [PASSED] refcount_interrupt ================
[08:13:37] ================== guc_buf (11 subtests) ===================
[08:13:37] [PASSED] test_smallest
[08:13:37] [PASSED] test_largest
[08:13:37] [PASSED] test_granular
[08:13:37] [PASSED] test_unique
[08:13:37] [PASSED] test_overlap
[08:13:37] [PASSED] test_reusable
[08:13:37] [PASSED] test_too_big
[08:13:37] [PASSED] test_flush
[08:13:37] [PASSED] test_lookup
[08:13:37] [PASSED] test_data
[08:13:37] [PASSED] test_class
[08:13:37] ===================== [PASSED] guc_buf =====================
[08:13:37] =================== guc_dbm (7 subtests) ===================
[08:13:37] [PASSED] test_empty
[08:13:37] [PASSED] test_default
[08:13:37] ======================== test_size ========================
[08:13:37] [PASSED] 4
[08:13:37] [PASSED] 8
[08:13:37] [PASSED] 32
[08:13:37] [PASSED] 256
[08:13:37] ==================== [PASSED] test_size ====================
[08:13:37] ======================= test_reuse ========================
[08:13:37] [PASSED] 4
[08:13:37] [PASSED] 8
[08:13:37] [PASSED] 32
[08:13:37] [PASSED] 256
[08:13:37] =================== [PASSED] test_reuse ====================
[08:13:37] =================== test_range_overlap ====================
[08:13:37] [PASSED] 4
[08:13:37] [PASSED] 8
[08:13:37] [PASSED] 32
[08:13:37] [PASSED] 256
[08:13:37] =============== [PASSED] test_range_overlap ================
[08:13:37] =================== test_range_compact ====================
[08:13:37] [PASSED] 4
[08:13:37] [PASSED] 8
[08:13:37] [PASSED] 32
[08:13:37] [PASSED] 256
[08:13:37] =============== [PASSED] test_range_compact ================
[08:13:37] ==================== test_range_spare =====================
[08:13:37] [PASSED] 4
[08:13:37] [PASSED] 8
[08:13:37] [PASSED] 32
[08:13:37] [PASSED] 256
[08:13:37] ================ [PASSED] test_range_spare =================
[08:13:37] ===================== [PASSED] guc_dbm =====================
[08:13:37] =================== guc_idm (6 subtests) ===================
[08:13:37] [PASSED] bad_init
[08:13:37] [PASSED] no_init
[08:13:37] [PASSED] init_fini
[08:13:37] [PASSED] check_used
[08:13:37] [PASSED] check_quota
[08:13:37] [PASSED] check_all
[08:13:37] ===================== [PASSED] guc_idm =====================
[08:13:37] ============== guc_klv_helpers (13 subtests) ===============
[08:13:37] [PASSED] test_count
[08:13:37] [PASSED] test_encode_u32
[08:13:37] [PASSED] test_encode_u64
[08:13:37] [PASSED] test_encode_string
[08:13:37] [PASSED] test_encode_object_raw
[08:13:37] [PASSED] test_encode_object_klv
[08:13:37] [PASSED] test_encode_object_nested
[08:13:37] [PASSED] test_encode_object_basic
[08:13:37] ===================== test_decode_u16 =====================
[08:13:37] [PASSED] empty
[08:13:37] [PASSED] valid
[08:13:37] [PASSED] max
[08:13:37] [PASSED] big
[08:13:37] [PASSED] long
[08:13:37] ================= [PASSED] test_decode_u16 =================
[08:13:37] ===================== test_decode_u32 =====================
[08:13:37] [PASSED] empty
[08:13:37] [PASSED] valid
[08:13:37] [PASSED] max
[08:13:37] [PASSED] long
[08:13:37] ================= [PASSED] test_decode_u32 =================
[08:13:37] ===================== test_decode_u64 =====================
[08:13:37] [PASSED] empty
[08:13:37] [PASSED] short
[08:13:37] [PASSED] valid
[08:13:37] [PASSED] max
[08:13:37] [PASSED] long
[08:13:37] ================= [PASSED] test_decode_u64 =================
[08:13:37] ===================== test_decode_str =====================
[08:13:37] [PASSED] empty
[08:13:37] [PASSED] one
[08:13:37] [PASSED] one_trash
[08:13:37] [PASSED] two
[08:13:37] [PASSED] two_trash
[08:13:37] [PASSED] three
[08:13:37] [PASSED] dword
[08:13:37] [PASSED] four
[08:13:37] [PASSED] five
[08:13:37] [PASSED] six
[08:13:37] [PASSED] seven
[08:13:37] [PASSED] qword
[08:13:37] ================= [PASSED] test_decode_str =================
[08:13:37] [PASSED] test_print
[08:13:37] ================= [PASSED] guc_klv_helpers =================
[08:13:37] =================== xe_log (4 subtests) ====================
[08:13:37] [PASSED] demo_cper
[08:13:37] [PASSED] demo_dmesg
[08:13:37] ======================= test_dmesg ========================
[08:13:37] [PASSED] test_fatal
[08:13:37] [PASSED] test_fatal_tile
[08:13:37] [PASSED] test_fatal_gt
[08:13:37] [PASSED] test_fatal_comp
[08:13:37] [PASSED] test_fatal_comp_tile
[08:13:37] [PASSED] test_fatal_comp_gt
[08:13:37] [PASSED] test_fatal_all
[08:13:37] [PASSED] test_recoverable
[08:13:37] [PASSED] test_recoverable_tile
[08:13:37] [PASSED] test_recoverable_gt
[08:13:37] [PASSED] test_recoverable_comp
[08:13:37] [PASSED] test_recoverable_comp_tile
[08:13:37] [PASSED] test_recoverable_comp_gt
[08:13:37] [PASSED] test_recoverable_all
[08:13:37] [PASSED] test_info
[08:13:37] [PASSED] test_info_tile
[08:13:37] [PASSED] test_info_gt
[08:13:37] [PASSED] test_info_err
[08:13:37] [PASSED] test_info_comp
[08:13:37] [PASSED] test_info_comp_tile
[08:13:37] [PASSED] test_info_comp_gt
[08:13:37] [PASSED] test_info_all
[08:13:37] [PASSED] test_hw_fatal
[08:13:37] [PASSED] test_hw_recoverable
[08:13:37] [PASSED] test_hw_corrected
[08:13:37] [PASSED] test_hw_informational
[08:13:37] =================== [PASSED] test_dmesg ====================
[08:13:37] ====================== test_invalid =======================
[08:13:37] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[08:13:37] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[08:13:37] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[08:13:37] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[08:13:37] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[08:13:37] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[08:13:37] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[08:13:37] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[08:13:37] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[08:13:37] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[08:13:37] ================== [SKIPPED] test_invalid ==================
[08:13:37] ===================== [PASSED] xe_log ======================
[08:13:37] ================== no_relay (3 subtests) ===================
[08:13:37] [PASSED] xe_drops_guc2pf_if_not_ready
[08:13:37] [PASSED] xe_drops_guc2vf_if_not_ready
[08:13:37] [PASSED] xe_rejects_send_if_not_ready
[08:13:37] ==================== [PASSED] no_relay =====================
[08:13:37] ================== pf_relay (14 subtests) ==================
[08:13:37] [PASSED] pf_rejects_guc2pf_too_short
[08:13:37] [PASSED] pf_rejects_guc2pf_too_long
[08:13:37] [PASSED] pf_rejects_guc2pf_no_payload
[08:13:37] [PASSED] pf_fails_no_payload
[08:13:37] [PASSED] pf_fails_bad_origin
[08:13:37] [PASSED] pf_fails_bad_type
[08:13:37] [PASSED] pf_txn_reports_error
[08:13:37] [PASSED] pf_txn_sends_pf2guc
[08:13:37] [PASSED] pf_sends_pf2guc
[08:13:37] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[08:13:37] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[08:13:37] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[08:13:37] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[08:13:37] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[08:13:37] ==================== [PASSED] pf_relay =====================
[08:13:37] ================== vf_relay (3 subtests) ===================
[08:13:37] [PASSED] vf_rejects_guc2vf_too_short
[08:13:37] [PASSED] vf_rejects_guc2vf_too_long
[08:13:37] [PASSED] vf_rejects_guc2vf_no_payload
[08:13:37] ==================== [PASSED] vf_relay =====================
[08:13:37] ================ pf_gt_config (9 subtests) =================
[08:13:37] [PASSED] fair_contexts_1vf
[08:13:37] [PASSED] fair_doorbells_1vf
[08:13:37] [PASSED] fair_ggtt_1vf
[08:13:37] ====================== fair_vram_1vf ======================
[08:13:37] [PASSED] 3.50 GiB
[08:13:37] [PASSED] 11.5 GiB
[08:13:37] [PASSED] 15.5 GiB
[08:13:37] [PASSED] 31.5 GiB
[08:13:37] [PASSED] 63.5 GiB
[08:13:37] [PASSED] 1.91 GiB
[08:13:37] ================== [PASSED] fair_vram_1vf ==================
[08:13:37] ================ fair_vram_1vf_admin_only =================
[08:13:37] [PASSED] 3.50 GiB
[08:13:37] [PASSED] 11.5 GiB
[08:13:37] [PASSED] 15.5 GiB
[08:13:37] [PASSED] 31.5 GiB
[08:13:37] [PASSED] 63.5 GiB
[08:13:37] [PASSED] 1.91 GiB
[08:13:37] ============ [PASSED] fair_vram_1vf_admin_only =============
[08:13:37] ====================== fair_contexts ======================
[08:13:37] [PASSED] 1 VF
[08:13:37] [PASSED] 2 VFs
[08:13:37] [PASSED] 3 VFs
[08:13:37] [PASSED] 4 VFs
[08:13:37] [PASSED] 5 VFs
[08:13:37] [PASSED] 6 VFs
[08:13:37] [PASSED] 7 VFs
[08:13:37] [PASSED] 8 VFs
[08:13:37] [PASSED] 9 VFs
[08:13:37] [PASSED] 10 VFs
[08:13:37] [PASSED] 11 VFs
[08:13:37] [PASSED] 12 VFs
[08:13:37] [PASSED] 13 VFs
[08:13:37] [PASSED] 14 VFs
[08:13:37] [PASSED] 15 VFs
[08:13:37] [PASSED] 16 VFs
[08:13:37] [PASSED] 17 VFs
[08:13:37] [PASSED] 18 VFs
[08:13:37] [PASSED] 19 VFs
[08:13:37] [PASSED] 20 VFs
[08:13:37] [PASSED] 21 VFs
[08:13:37] [PASSED] 22 VFs
[08:13:37] [PASSED] 23 VFs
[08:13:37] [PASSED] 24 VFs
[08:13:37] [PASSED] 25 VFs
[08:13:37] [PASSED] 26 VFs
[08:13:37] [PASSED] 27 VFs
[08:13:37] [PASSED] 28 VFs
[08:13:37] [PASSED] 29 VFs
[08:13:37] [PASSED] 30 VFs
[08:13:37] [PASSED] 31 VFs
[08:13:37] [PASSED] 32 VFs
[08:13:37] [PASSED] 33 VFs
[08:13:37] [PASSED] 34 VFs
[08:13:37] [PASSED] 35 VFs
[08:13:37] [PASSED] 36 VFs
[08:13:37] [PASSED] 37 VFs
[08:13:37] [PASSED] 38 VFs
[08:13:37] [PASSED] 39 VFs
[08:13:37] [PASSED] 40 VFs
[08:13:37] [PASSED] 41 VFs
[08:13:37] [PASSED] 42 VFs
[08:13:37] [PASSED] 43 VFs
[08:13:37] [PASSED] 44 VFs
[08:13:37] [PASSED] 45 VFs
[08:13:37] [PASSED] 46 VFs
[08:13:37] [PASSED] 47 VFs
[08:13:37] [PASSED] 48 VFs
[08:13:37] [PASSED] 49 VFs
[08:13:37] [PASSED] 50 VFs
[08:13:37] [PASSED] 51 VFs
[08:13:37] [PASSED] 52 VFs
[08:13:37] [PASSED] 53 VFs
[08:13:37] [PASSED] 54 VFs
[08:13:37] [PASSED] 55 VFs
[08:13:37] [PASSED] 56 VFs
[08:13:37] [PASSED] 57 VFs
[08:13:37] [PASSED] 58 VFs
[08:13:37] [PASSED] 59 VFs
[08:13:37] [PASSED] 60 VFs
[08:13:37] [PASSED] 61 VFs
[08:13:37] [PASSED] 62 VFs
[08:13:37] [PASSED] 63 VFs
[08:13:37] ================== [PASSED] fair_contexts ==================
[08:13:37] ===================== fair_doorbells ======================
[08:13:37] [PASSED] 1 VF
[08:13:37] [PASSED] 2 VFs
[08:13:37] [PASSED] 3 VFs
[08:13:37] [PASSED] 4 VFs
[08:13:37] [PASSED] 5 VFs
[08:13:37] [PASSED] 6 VFs
[08:13:37] [PASSED] 7 VFs
[08:13:37] [PASSED] 8 VFs
[08:13:37] [PASSED] 9 VFs
[08:13:37] [PASSED] 10 VFs
[08:13:37] [PASSED] 11 VFs
[08:13:37] [PASSED] 12 VFs
[08:13:37] [PASSED] 13 VFs
[08:13:37] [PASSED] 14 VFs
[08:13:37] [PASSED] 15 VFs
[08:13:37] [PASSED] 16 VFs
[08:13:37] [PASSED] 17 VFs
[08:13:37] [PASSED] 18 VFs
[08:13:37] [PASSED] 19 VFs
[08:13:37] [PASSED] 20 VFs
[08:13:37] [PASSED] 21 VFs
[08:13:37] [PASSED] 22 VFs
[08:13:37] [PASSED] 23 VFs
[08:13:37] [PASSED] 24 VFs
[08:13:37] [PASSED] 25 VFs
[08:13:37] [PASSED] 26 VFs
[08:13:37] [PASSED] 27 VFs
[08:13:37] [PASSED] 28 VFs
[08:13:37] [PASSED] 29 VFs
[08:13:37] [PASSED] 30 VFs
[08:13:37] [PASSED] 31 VFs
[08:13:37] [PASSED] 32 VFs
[08:13:37] [PASSED] 33 VFs
[08:13:37] [PASSED] 34 VFs
[08:13:37] [PASSED] 35 VFs
[08:13:37] [PASSED] 36 VFs
[08:13:37] [PASSED] 37 VFs
[08:13:37] [PASSED] 38 VFs
[08:13:37] [PASSED] 39 VFs
[08:13:37] [PASSED] 40 VFs
[08:13:37] [PASSED] 41 VFs
[08:13:37] [PASSED] 42 VFs
[08:13:37] [PASSED] 43 VFs
[08:13:37] [PASSED] 44 VFs
[08:13:37] [PASSED] 45 VFs
[08:13:37] [PASSED] 46 VFs
[08:13:37] [PASSED] 47 VFs
[08:13:37] [PASSED] 48 VFs
[08:13:37] [PASSED] 49 VFs
[08:13:37] [PASSED] 50 VFs
[08:13:37] [PASSED] 51 VFs
[08:13:37] [PASSED] 52 VFs
[08:13:37] [PASSED] 53 VFs
[08:13:37] [PASSED] 54 VFs
[08:13:37] [PASSED] 55 VFs
[08:13:37] [PASSED] 56 VFs
[08:13:37] [PASSED] 57 VFs
[08:13:37] [PASSED] 58 VFs
[08:13:37] [PASSED] 59 VFs
[08:13:37] [PASSED] 60 VFs
[08:13:37] [PASSED] 61 VFs
[08:13:37] [PASSED] 62 VFs
[08:13:37] [PASSED] 63 VFs
[08:13:37] ================= [PASSED] fair_doorbells ==================
[08:13:37] ======================== fair_ggtt ========================
[08:13:37] [PASSED] 1 VF
[08:13:37] [PASSED] 2 VFs
[08:13:37] [PASSED] 3 VFs
[08:13:37] [PASSED] 4 VFs
[08:13:37] [PASSED] 5 VFs
[08:13:37] [PASSED] 6 VFs
[08:13:37] [PASSED] 7 VFs
[08:13:37] [PASSED] 8 VFs
[08:13:37] [PASSED] 9 VFs
[08:13:37] [PASSED] 10 VFs
[08:13:37] [PASSED] 11 VFs
[08:13:37] [PASSED] 12 VFs
[08:13:37] [PASSED] 13 VFs
[08:13:37] [PASSED] 14 VFs
[08:13:37] [PASSED] 15 VFs
[08:13:37] [PASSED] 16 VFs
[08:13:37] [PASSED] 17 VFs
[08:13:37] [PASSED] 18 VFs
[08:13:37] [PASSED] 19 VFs
[08:13:37] [PASSED] 20 VFs
[08:13:37] [PASSED] 21 VFs
[08:13:37] [PASSED] 22 VFs
[08:13:37] [PASSED] 23 VFs
[08:13:37] [PASSED] 24 VFs
[08:13:37] [PASSED] 25 VFs
[08:13:37] [PASSED] 26 VFs
[08:13:37] [PASSED] 27 VFs
[08:13:37] [PASSED] 28 VFs
[08:13:37] [PASSED] 29 VFs
[08:13:37] [PASSED] 30 VFs
[08:13:37] [PASSED] 31 VFs
[08:13:37] [PASSED] 32 VFs
[08:13:37] [PASSED] 33 VFs
[08:13:37] [PASSED] 34 VFs
[08:13:37] [PASSED] 35 VFs
[08:13:37] [PASSED] 36 VFs
[08:13:37] [PASSED] 37 VFs
[08:13:37] [PASSED] 38 VFs
[08:13:37] [PASSED] 39 VFs
[08:13:37] [PASSED] 40 VFs
[08:13:37] [PASSED] 41 VFs
[08:13:37] [PASSED] 42 VFs
[08:13:37] [PASSED] 43 VFs
[08:13:37] [PASSED] 44 VFs
[08:13:37] [PASSED] 45 VFs
[08:13:37] [PASSED] 46 VFs
[08:13:37] [PASSED] 47 VFs
[08:13:37] [PASSED] 48 VFs
[08:13:37] [PASSED] 49 VFs
[08:13:37] [PASSED] 50 VFs
[08:13:37] [PASSED] 51 VFs
[08:13:37] [PASSED] 52 VFs
[08:13:37] [PASSED] 53 VFs
[08:13:37] [PASSED] 54 VFs
[08:13:37] [PASSED] 55 VFs
[08:13:37] [PASSED] 56 VFs
[08:13:37] [PASSED] 57 VFs
[08:13:37] [PASSED] 58 VFs
[08:13:37] [PASSED] 59 VFs
[08:13:37] [PASSED] 60 VFs
[08:13:37] [PASSED] 61 VFs
[08:13:37] [PASSED] 62 VFs
[08:13:37] [PASSED] 63 VFs
[08:13:37] ==================== [PASSED] fair_ggtt ====================
[08:13:37] ======================== fair_vram ========================
[08:13:37] [PASSED] 1 VF
[08:13:37] [PASSED] 2 VFs
[08:13:37] [PASSED] 3 VFs
[08:13:37] [PASSED] 4 VFs
[08:13:37] [PASSED] 5 VFs
[08:13:37] [PASSED] 6 VFs
[08:13:37] [PASSED] 7 VFs
[08:13:37] [PASSED] 8 VFs
[08:13:37] [PASSED] 9 VFs
[08:13:37] [PASSED] 10 VFs
[08:13:37] [PASSED] 11 VFs
[08:13:37] [PASSED] 12 VFs
[08:13:37] [PASSED] 13 VFs
[08:13:37] [PASSED] 14 VFs
[08:13:37] [PASSED] 15 VFs
[08:13:37] [PASSED] 16 VFs
[08:13:37] [PASSED] 17 VFs
[08:13:37] [PASSED] 18 VFs
[08:13:37] [PASSED] 19 VFs
[08:13:37] [PASSED] 20 VFs
[08:13:37] [PASSED] 21 VFs
[08:13:37] [PASSED] 22 VFs
[08:13:37] [PASSED] 23 VFs
[08:13:37] [PASSED] 24 VFs
[08:13:37] [PASSED] 25 VFs
[08:13:37] [PASSED] 26 VFs
[08:13:37] [PASSED] 27 VFs
[08:13:37] [PASSED] 28 VFs
[08:13:37] [PASSED] 29 VFs
[08:13:37] [PASSED] 30 VFs
[08:13:37] [PASSED] 31 VFs
[08:13:37] [PASSED] 32 VFs
[08:13:37] [PASSED] 33 VFs
[08:13:37] [PASSED] 34 VFs
[08:13:37] [PASSED] 35 VFs
[08:13:37] [PASSED] 36 VFs
[08:13:37] [PASSED] 37 VFs
[08:13:37] [PASSED] 38 VFs
[08:13:37] [PASSED] 39 VFs
[08:13:37] [PASSED] 40 VFs
[08:13:37] [PASSED] 41 VFs
[08:13:37] [PASSED] 42 VFs
[08:13:37] [PASSED] 43 VFs
[08:13:37] [PASSED] 44 VFs
[08:13:37] [PASSED] 45 VFs
[08:13:37] [PASSED] 46 VFs
[08:13:37] [PASSED] 47 VFs
[08:13:37] [PASSED] 48 VFs
[08:13:37] [PASSED] 49 VFs
[08:13:37] [PASSED] 50 VFs
[08:13:37] [PASSED] 51 VFs
[08:13:37] [PASSED] 52 VFs
[08:13:37] [PASSED] 53 VFs
[08:13:37] [PASSED] 54 VFs
[08:13:37] [PASSED] 55 VFs
[08:13:37] [PASSED] 56 VFs
[08:13:37] [PASSED] 57 VFs
[08:13:37] [PASSED] 58 VFs
[08:13:37] [PASSED] 59 VFs
[08:13:37] [PASSED] 60 VFs
[08:13:37] [PASSED] 61 VFs
[08:13:37] [PASSED] 62 VFs
[08:13:37] [PASSED] 63 VFs
[08:13:37] ==================== [PASSED] fair_vram ====================
[08:13:37] ================== [PASSED] pf_gt_config ===================
[08:13:37] ===================== lmtt (1 subtest) =====================
[08:13:37] ======================== test_ops =========================
[08:13:37] [PASSED] 2-level
[08:13:37] [PASSED] multi-level
[08:13:37] ==================== [PASSED] test_ops =====================
[08:13:37] ====================== [PASSED] lmtt =======================
[08:13:37] ================= sriov_packet (1 subtest) =================
[08:13:37] [PASSED] test_descriptor_init
[08:13:37] ================== [PASSED] sriov_packet ===================
[08:13:37] ================= pf_service (11 subtests) =================
[08:13:37] [PASSED] pf_negotiate_any
[08:13:37] [PASSED] pf_negotiate_base_match
[08:13:37] [PASSED] pf_negotiate_base_newer
[08:13:37] [PASSED] pf_negotiate_base_next
[08:13:37] [SKIPPED] pf_negotiate_base_older (no older minor)
[08:13:37] [PASSED] pf_negotiate_base_prev
[08:13:37] [PASSED] pf_negotiate_latest_match
[08:13:37] [PASSED] pf_negotiate_latest_newer
[08:13:37] [PASSED] pf_negotiate_latest_next
[08:13:37] [SKIPPED] pf_negotiate_latest_older (no older minor)
[08:13:37] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[08:13:37] =================== [PASSED] pf_service ====================
[08:13:37] ================= xe_guc_g2g (2 subtests) ==================
[08:13:37] ============== xe_live_guc_g2g_kunit_default ==============
[08:13:37] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[08:13:37] ============== xe_live_guc_g2g_kunit_allmem ===============
[08:13:37] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[08:13:37] =================== [SKIPPED] xe_guc_g2g ===================
[08:13:37] =================== xe_mocs (2 subtests) ===================
[08:13:37] ================ xe_live_mocs_kernel_kunit ================
[08:13:37] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[08:13:37] ================ xe_live_mocs_reset_kunit =================
[08:13:37] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[08:13:37] ==================== [SKIPPED] xe_mocs =====================
[08:13:37] ================= xe_migrate (2 subtests) ==================
[08:13:37] ================= xe_migrate_sanity_kunit =================
[08:13:37] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[08:13:37] ================== xe_validate_ccs_kunit ==================
[08:13:37] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[08:13:37] =================== [SKIPPED] xe_migrate ===================
[08:13:37] ================== xe_dma_buf (1 subtest) ==================
[08:13:37] ==================== xe_dma_buf_kunit =====================
[08:13:37] ================ [SKIPPED] xe_dma_buf_kunit ================
[08:13:37] =================== [SKIPPED] xe_dma_buf ===================
[08:13:37] ================= xe_bo_shrink (1 subtest) =================
[08:13:37] =================== xe_bo_shrink_kunit ====================
[08:13:37] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[08:13:37] ================== [SKIPPED] xe_bo_shrink ==================
[08:13:37] ==================== xe_bo (2 subtests) ====================
[08:13:37] ================== xe_ccs_migrate_kunit ===================
[08:13:37] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[08:13:37] ==================== xe_bo_evict_kunit ====================
[08:13:37] =============== [SKIPPED] xe_bo_evict_kunit ================
[08:13:37] ===================== [SKIPPED] xe_bo ======================
[08:13:37] =================== xe_any (9 subtests) ====================
[08:13:37] [PASSED] test_to_xe
[08:13:37] [PASSED] test_to_dev
[08:13:37] [PASSED] test_to_pdev
[08:13:37] [PASSED] test_to_drm
[08:13:37] [PASSED] test_if_pdev
[08:13:37] [PASSED] test_if_xe
[08:13:37] [PASSED] test_if_tile
[08:13:37] [PASSED] test_if_gt
[08:13:37] [PASSED] test_to_id
[08:13:37] ===================== [PASSED] xe_any ======================
[08:13:37] ==================== args (13 subtests) ====================
[08:13:37] [PASSED] count_args_test
[08:13:37] [PASSED] call_args_example
[08:13:37] [PASSED] call_args_test
[08:13:37] [PASSED] drop_first_arg_example
[08:13:37] [PASSED] drop_first_arg_test
[08:13:37] [PASSED] first_arg_example
[08:13:37] [PASSED] first_arg_test
[08:13:37] [PASSED] last_arg_example
[08:13:37] [PASSED] last_arg_test
[08:13:37] [PASSED] pick_arg_example
[08:13:37] [PASSED] if_args_example
[08:13:37] [PASSED] if_args_test
[08:13:37] [PASSED] sep_comma_example
[08:13:37] ====================== [PASSED] args =======================
[08:13:37] =================== xe_pci (3 subtests) ====================
[08:13:37] ==================== check_graphics_ip ====================
[08:13:37] [PASSED] 12.00 Xe_LP
[08:13:37] [PASSED] 12.10 Xe_LP+
[08:13:37] [PASSED] 12.55 Xe_HPG
[08:13:37] [PASSED] 12.60 Xe_HPC
[08:13:37] [PASSED] 12.70 Xe_LPG
[08:13:37] [PASSED] 12.71 Xe_LPG
[08:13:37] [PASSED] 12.74 Xe_LPG+
[08:13:37] [PASSED] 20.01 Xe2_HPG
[08:13:37] [PASSED] 20.02 Xe2_HPG
[08:13:37] [PASSED] 20.04 Xe2_LPG
[08:13:37] [PASSED] 30.00 Xe3_LPG
[08:13:37] [PASSED] 30.01 Xe3_LPG
[08:13:37] [PASSED] 30.03 Xe3_LPG
[08:13:37] [PASSED] 30.04 Xe3_LPG
[08:13:37] [PASSED] 30.05 Xe3_LPG
[08:13:37] [PASSED] 35.10 Xe3p_LPG
[08:13:37] [PASSED] 35.11 Xe3p_XPC
[08:13:37] ================ [PASSED] check_graphics_ip ================
[08:13:37] ===================== check_media_ip ======================
[08:13:37] [PASSED] 12.00 Xe_M
[08:13:37] [PASSED] 12.55 Xe_HPM
[08:13:37] [PASSED] 13.00 Xe_LPM+
[08:13:37] [PASSED] 13.01 Xe2_HPM
[08:13:37] [PASSED] 20.00 Xe2_LPM
[08:13:37] [PASSED] 30.00 Xe3_LPM
[08:13:37] [PASSED] 30.02 Xe3_LPM
[08:13:37] [PASSED] 35.00 Xe3p_LPM
[08:13:37] [PASSED] 35.03 Xe3p_HPM
[08:13:37] ================= [PASSED] check_media_ip ==================
[08:13:37] =================== check_platform_desc ===================
[08:13:37] [PASSED] 0x9A60 (TIGERLAKE)
[08:13:37] [PASSED] 0x9A68 (TIGERLAKE)
[08:13:37] [PASSED] 0x9A70 (TIGERLAKE)
[08:13:37] [PASSED] 0x9A40 (TIGERLAKE)
[08:13:37] [PASSED] 0x9A49 (TIGERLAKE)
[08:13:37] [PASSED] 0x9A59 (TIGERLAKE)
[08:13:37] [PASSED] 0x9A78 (TIGERLAKE)
[08:13:37] [PASSED] 0x9AC0 (TIGERLAKE)
[08:13:37] [PASSED] 0x9AC9 (TIGERLAKE)
[08:13:37] [PASSED] 0x9AD9 (TIGERLAKE)
[08:13:37] [PASSED] 0x9AF8 (TIGERLAKE)
[08:13:37] [PASSED] 0x4C80 (ROCKETLAKE)
[08:13:37] [PASSED] 0x4C8A (ROCKETLAKE)
[08:13:37] [PASSED] 0x4C8B (ROCKETLAKE)
[08:13:37] [PASSED] 0x4C8C (ROCKETLAKE)
[08:13:37] [PASSED] 0x4C90 (ROCKETLAKE)
[08:13:37] [PASSED] 0x4C9A (ROCKETLAKE)
[08:13:37] [PASSED] 0x4680 (ALDERLAKE_S)
[08:13:37] [PASSED] 0x4682 (ALDERLAKE_S)
[08:13:37] [PASSED] 0x4688 (ALDERLAKE_S)
[08:13:37] [PASSED] 0x468A (ALDERLAKE_S)
[08:13:37] [PASSED] 0x468B (ALDERLAKE_S)
[08:13:37] [PASSED] 0x4690 (ALDERLAKE_S)
[08:13:37] [PASSED] 0x4692 (ALDERLAKE_S)
[08:13:37] [PASSED] 0x4693 (ALDERLAKE_S)
[08:13:37] [PASSED] 0x46A0 (ALDERLAKE_P)
[08:13:37] [PASSED] 0x46A1 (ALDERLAKE_P)
[08:13:37] [PASSED] 0x46A2 (ALDERLAKE_P)
[08:13:37] [PASSED] 0x46A3 (ALDERLAKE_P)
[08:13:37] [PASSED] 0x46A6 (ALDERLAKE_P)
[08:13:37] [PASSED] 0x46A8 (ALDERLAKE_P)
[08:13:37] [PASSED] 0x46AA (ALDERLAKE_P)
[08:13:37] [PASSED] 0x462A (ALDERLAKE_P)
[08:13:37] [PASSED] 0x4626 (ALDERLAKE_P)
[08:13:37] [PASSED] 0x4628 (ALDERLAKE_P)
[08:13:37] [PASSED] 0x46B0 (ALDERLAKE_P)
[08:13:37] [PASSED] 0x46B1 (ALDERLAKE_P)
[08:13:37] [PASSED] 0x46B2 (ALDERLAKE_P)
[08:13:37] [PASSED] 0x46B3 (ALDERLAKE_P)
[08:13:37] [PASSED] 0x46C0 (ALDERLAKE_P)
[08:13:37] [PASSED] 0x46C1 (ALDERLAKE_P)
[08:13:37] [PASSED] 0x46C2 (ALDERLAKE_P)
[08:13:37] [PASSED] 0x46C3 (ALDERLAKE_P)
[08:13:37] [PASSED] 0x46D0 (ALDERLAKE_N)
[08:13:37] [PASSED] 0x46D1 (ALDERLAKE_N)
[08:13:37] [PASSED] 0x46D2 (ALDERLAKE_N)
[08:13:37] [PASSED] 0x46D3 (ALDERLAKE_N)
[08:13:37] [PASSED] 0x46D4 (ALDERLAKE_N)
[08:13:37] [PASSED] 0xA721 (ALDERLAKE_P)
[08:13:37] [PASSED] 0xA7A1 (ALDERLAKE_P)
[08:13:37] [PASSED] 0xA7A9 (ALDERLAKE_P)
[08:13:37] [PASSED] 0xA7AC (ALDERLAKE_P)
[08:13:37] [PASSED] 0xA7AD (ALDERLAKE_P)
[08:13:37] [PASSED] 0xA720 (ALDERLAKE_P)
[08:13:37] [PASSED] 0xA7A0 (ALDERLAKE_P)
[08:13:37] [PASSED] 0xA7A8 (ALDERLAKE_P)
[08:13:37] [PASSED] 0xA7AA (ALDERLAKE_P)
[08:13:37] [PASSED] 0xA7AB (ALDERLAKE_P)
[08:13:37] [PASSED] 0xA780 (ALDERLAKE_S)
[08:13:37] [PASSED] 0xA781 (ALDERLAKE_S)
[08:13:37] [PASSED] 0xA782 (ALDERLAKE_S)
[08:13:37] [PASSED] 0xA783 (ALDERLAKE_S)
[08:13:37] [PASSED] 0xA788 (ALDERLAKE_S)
[08:13:37] [PASSED] 0xA789 (ALDERLAKE_S)
[08:13:37] [PASSED] 0xA78A (ALDERLAKE_S)
[08:13:37] [PASSED] 0xA78B (ALDERLAKE_S)
[08:13:37] [PASSED] 0x4905 (DG1)
[08:13:37] [PASSED] 0x4906 (DG1)
[08:13:37] [PASSED] 0x4907 (DG1)
[08:13:37] [PASSED] 0x4908 (DG1)
[08:13:37] [PASSED] 0x4909 (DG1)
[08:13:37] [PASSED] 0x56C0 (DG2)
[08:13:37] [PASSED] 0x56C2 (DG2)
[08:13:37] [PASSED] 0x56C1 (DG2)
[08:13:37] [PASSED] 0x7D51 (METEORLAKE)
[08:13:37] [PASSED] 0x7DD1 (METEORLAKE)
[08:13:37] [PASSED] 0x7D41 (METEORLAKE)
[08:13:37] [PASSED] 0x7D67 (METEORLAKE)
[08:13:37] [PASSED] 0xB640 (METEORLAKE)
[08:13:37] [PASSED] 0x56A0 (DG2)
[08:13:37] [PASSED] 0x56A1 (DG2)
[08:13:37] [PASSED] 0x56A2 (DG2)
[08:13:37] [PASSED] 0x56BE (DG2)
[08:13:37] [PASSED] 0x56BF (DG2)
[08:13:37] [PASSED] 0x5690 (DG2)
[08:13:37] [PASSED] 0x5691 (DG2)
[08:13:37] [PASSED] 0x5692 (DG2)
[08:13:37] [PASSED] 0x56A5 (DG2)
[08:13:37] [PASSED] 0x56A6 (DG2)
[08:13:37] [PASSED] 0x56B0 (DG2)
[08:13:37] [PASSED] 0x56B1 (DG2)
[08:13:37] [PASSED] 0x56BA (DG2)
[08:13:37] [PASSED] 0x56BB (DG2)
[08:13:37] [PASSED] 0x56BC (DG2)
[08:13:37] [PASSED] 0x56BD (DG2)
[08:13:37] [PASSED] 0x5693 (DG2)
[08:13:37] [PASSED] 0x5694 (DG2)
[08:13:37] [PASSED] 0x5695 (DG2)
[08:13:37] [PASSED] 0x56A3 (DG2)
[08:13:37] [PASSED] 0x56A4 (DG2)
[08:13:37] [PASSED] 0x56B2 (DG2)
[08:13:37] [PASSED] 0x56B3 (DG2)
[08:13:37] [PASSED] 0x5696 (DG2)
[08:13:37] [PASSED] 0x5697 (DG2)
[08:13:37] [PASSED] 0xB69 (PVC)
[08:13:37] [PASSED] 0xB6E (PVC)
[08:13:37] [PASSED] 0xBD4 (PVC)
[08:13:37] [PASSED] 0xBD5 (PVC)
[08:13:37] [PASSED] 0xBD6 (PVC)
[08:13:37] [PASSED] 0xBD7 (PVC)
[08:13:37] [PASSED] 0xBD8 (PVC)
[08:13:37] [PASSED] 0xBD9 (PVC)
[08:13:37] [PASSED] 0xBDA (PVC)
[08:13:37] [PASSED] 0xBDB (PVC)
[08:13:37] [PASSED] 0xBE0 (PVC)
[08:13:37] [PASSED] 0xBE1 (PVC)
[08:13:37] [PASSED] 0xBE5 (PVC)
[08:13:37] [PASSED] 0x7D40 (METEORLAKE)
[08:13:37] [PASSED] 0x7D45 (METEORLAKE)
[08:13:37] [PASSED] 0x7D55 (METEORLAKE)
[08:13:37] [PASSED] 0x7D60 (METEORLAKE)
[08:13:37] [PASSED] 0x7DD5 (METEORLAKE)
[08:13:37] [PASSED] 0x6420 (LUNARLAKE)
[08:13:37] [PASSED] 0x64A0 (LUNARLAKE)
[08:13:37] [PASSED] 0x64B0 (LUNARLAKE)
[08:13:37] [PASSED] 0xE202 (BATTLEMAGE)
[08:13:37] [PASSED] 0xE209 (BATTLEMAGE)
[08:13:37] [PASSED] 0xE20B (BATTLEMAGE)
[08:13:37] [PASSED] 0xE20C (BATTLEMAGE)
[08:13:37] [PASSED] 0xE20D (BATTLEMAGE)
[08:13:37] [PASSED] 0xE210 (BATTLEMAGE)
[08:13:37] [PASSED] 0xE211 (BATTLEMAGE)
[08:13:37] [PASSED] 0xE212 (BATTLEMAGE)
[08:13:37] [PASSED] 0xE216 (BATTLEMAGE)
[08:13:37] [PASSED] 0xE220 (BATTLEMAGE)
[08:13:37] [PASSED] 0xE221 (BATTLEMAGE)
[08:13:37] [PASSED] 0xE222 (BATTLEMAGE)
[08:13:37] [PASSED] 0xE223 (BATTLEMAGE)
[08:13:37] [PASSED] 0xB080 (PANTHERLAKE)
[08:13:37] [PASSED] 0xB081 (PANTHERLAKE)
[08:13:37] [PASSED] 0xB082 (PANTHERLAKE)
[08:13:37] [PASSED] 0xB083 (PANTHERLAKE)
[08:13:37] [PASSED] 0xB084 (PANTHERLAKE)
[08:13:37] [PASSED] 0xB085 (PANTHERLAKE)
[08:13:37] [PASSED] 0xB086 (PANTHERLAKE)
[08:13:37] [PASSED] 0xB087 (PANTHERLAKE)
[08:13:37] [PASSED] 0xB08F (PANTHERLAKE)
[08:13:37] [PASSED] 0xB090 (PANTHERLAKE)
[08:13:37] [PASSED] 0xB0A0 (PANTHERLAKE)
[08:13:37] [PASSED] 0xB0B0 (PANTHERLAKE)
[08:13:37] [PASSED] 0xFD80 (PANTHERLAKE)
[08:13:37] [PASSED] 0xFD81 (PANTHERLAKE)
[08:13:37] [PASSED] 0xD740 (NOVALAKE_S)
[08:13:37] [PASSED] 0xD741 (NOVALAKE_S)
[08:13:37] [PASSED] 0xD742 (NOVALAKE_S)
[08:13:37] [PASSED] 0xD743 (NOVALAKE_S)
[08:13:37] [PASSED] 0xD745 (NOVALAKE_S)
[08:13:37] [PASSED] 0xD74A (NOVALAKE_S)
[08:13:37] [PASSED] 0xD74B (NOVALAKE_S)
[08:13:37] [PASSED] 0x674C (CRESCENTISLAND)
[08:13:37] [PASSED] 0x674D (CRESCENTISLAND)
[08:13:37] [PASSED] 0x674E (CRESCENTISLAND)
[08:13:37] [PASSED] 0x674F (CRESCENTISLAND)
[08:13:37] [PASSED] 0x6750 (CRESCENTISLAND)
[08:13:37] [PASSED] 0xD750 (NOVALAKE_P)
[08:13:37] [PASSED] 0xD751 (NOVALAKE_P)
[08:13:37] [PASSED] 0xD752 (NOVALAKE_P)
[08:13:37] [PASSED] 0xD753 (NOVALAKE_P)
[08:13:37] [PASSED] 0xD754 (NOVALAKE_P)
[08:13:37] [PASSED] 0xD755 (NOVALAKE_P)
[08:13:37] [PASSED] 0xD756 (NOVALAKE_P)
[08:13:37] [PASSED] 0xD757 (NOVALAKE_P)
[08:13:37] [PASSED] 0xD75F (NOVALAKE_P)
[08:13:37] =============== [PASSED] check_platform_desc ===============
[08:13:37] ===================== [PASSED] xe_pci ======================
[08:13:37] ============= xe_rtp_tables_test (5 subtests) ==============
[08:13:37] ================== xe_rtp_table_gt_test ===================
[08:13:37] [PASSED] gt_was/14011060649
[08:13:37] [PASSED] gt_was/14011059788
[08:13:37] [PASSED] gt_was/14015795083
[08:13:37] [PASSED] gt_was/16021867713
[08:13:37] [PASSED] gt_was/14019449301
[08:13:37] [PASSED] gt_was/16028005424
[08:13:37] [PASSED] gt_was/14026578760
[08:13:37] [PASSED] gt_was/1409420604
[08:13:37] [PASSED] gt_was/1408615072
[08:13:37] [PASSED] gt_was/22010523718
[08:13:37] [PASSED] gt_was/14011006942
[08:13:37] [PASSED] gt_was/14014830051
[08:13:37] [PASSED] gt_was/18018781329
[08:13:37] [PASSED] gt_was/1509235366
[08:13:37] [PASSED] gt_was/18018781329
[08:13:37] [PASSED] gt_was/16016694945
[08:13:37] [PASSED] gt_was/14018575942
[08:13:37] [PASSED] gt_was/22016670082
[08:13:37] [PASSED] gt_was/22016670082
[08:13:37] [PASSED] gt_was/14017421178
[08:13:37] [PASSED] gt_was/16025250150
[08:13:37] [PASSED] gt_was/14021871409
[08:13:37] [PASSED] gt_was/16021865536
[08:13:37] [PASSED] gt_was/14021486841
[08:13:37] [PASSED] gt_was/14025160223
[08:13:37] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[08:13:37] [PASSED] gt_was/14025635424
[08:13:37] [PASSED] gt_was/16028005424
[08:13:37] ============== [PASSED] xe_rtp_table_gt_test ===============
[08:13:37] ================== xe_rtp_table_gt_test ===================
[08:13:37] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[08:13:37] [PASSED] gt_tunings/Tuning: 32B Access Enable
[08:13:37] [PASSED] gt_tunings/Tuning: L3 cache
[08:13:37] [PASSED] gt_tunings/Tuning: L3 cache - media
[08:13:37] [PASSED] gt_tunings/Tuning: Compression Overfetch
[08:13:37] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[08:13:37] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[08:13:37] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[08:13:37] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[08:13:37] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[08:13:37] [PASSED] gt_tunings/Tuning: Stateless compression control
[08:13:37] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[08:13:37] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[08:13:37] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[08:13:37] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[08:13:37] ============== [PASSED] xe_rtp_table_gt_test ===============
[08:13:37] ================== xe_rtp_table_oob_test ==================
[08:13:37] [PASSED] oob_was/1607983814
[08:13:37] [PASSED] oob_was/16010904313
[08:13:37] [PASSED] oob_was/18022495364
[08:13:37] [PASSED] oob_was/22012773006
[08:13:37] [PASSED] oob_was/14014475959
[08:13:37] [PASSED] oob_was/22011391025
[08:13:37] [PASSED] oob_was/22012727170
[08:13:37] [PASSED] oob_was/22012727685
[08:13:37] [PASSED] oob_was/22016596838
[08:13:37] [PASSED] oob_was/18020744125
[08:13:37] [PASSED] oob_was/1409600907
[08:13:37] [PASSED] oob_was/22014953428
[08:13:37] [PASSED] oob_was/16017236439
[08:13:37] [PASSED] oob_was/14019821291
[08:13:37] [PASSED] oob_was/14015076503
[08:13:37] [PASSED] oob_was/14018913170
[08:13:37] [PASSED] oob_was/14018094691
[08:13:37] [PASSED] oob_was/18024947630
[08:13:37] [PASSED] oob_was/16022287689
[08:13:37] [PASSED] oob_was/13011645652
[08:13:37] [PASSED] oob_was/14022293748
[08:13:37] [PASSED] oob_was/22019794406
[08:13:37] [PASSED] oob_was/22019338487
[08:13:37] [PASSED] oob_was/16023588340
[08:13:37] [PASSED] oob_was/14019789679
[08:13:37] [PASSED] oob_was/14022866841
[08:13:37] [PASSED] oob_was/16021333562
[08:13:37] [PASSED] oob_was/14016712196
[08:13:37] [PASSED] oob_was/14015568240
[08:13:37] [PASSED] oob_was/18013179988
[08:13:37] [PASSED] oob_was/1508761755
[08:13:37] [PASSED] oob_was/16023105232
[08:13:37] [PASSED] oob_was/16026508708
[08:13:37] [PASSED] oob_was/14020001231
[08:13:37] [PASSED] oob_was/16023683509
[08:13:37] [PASSED] oob_was/14025515070
[08:13:37] [PASSED] oob_was/15015404425_disable
[08:13:37] [PASSED] oob_was/16026007364
[08:13:37] [PASSED] oob_was/14020316580
[08:13:37] [PASSED] oob_was/14025883347
[08:13:37] [PASSED] oob_was/16029380221
[08:13:37] [PASSED] oob_was/22022079272
[08:13:37] [PASSED] oob_was/16029897822
[08:13:37] [PASSED] oob_was/14027054324
[08:13:37] [PASSED] oob_was/14025941587
[08:13:37] ============== [PASSED] xe_rtp_table_oob_test ==============
[08:13:37] ================ xe_rtp_table_dev_oob_test ================
[08:13:37] [PASSED] device_oob_was/22010954014
[08:13:37] [PASSED] device_oob_was/15015404425
[08:13:37] [PASSED] device_oob_was/22019338487_display
[08:13:37] [PASSED] device_oob_was/14022085890
[08:13:37] [PASSED] device_oob_was/14026539277
[08:13:37] [PASSED] device_oob_was/14026633728
[08:13:37] [PASSED] device_oob_was/14026746987
[08:13:37] [PASSED] device_oob_was/14026779378
[08:13:37] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[08:13:37] ========== xe_rtp_table_missing_upper_bound_test ==========
[08:13:37] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[08:13:37] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[08:13:37] [PASSED] register_whitelist/1806527549
[08:13:37] [PASSED] register_whitelist/allow_read_ctx_timestamp
[08:13:37] [PASSED] register_whitelist/allow_read_queue_timestamp
[08:13:37] [PASSED] register_whitelist/16014440446
[08:13:37] [PASSED] register_whitelist/16017236439
[08:13:37] [PASSED] register_whitelist/16020183090
[08:13:37] [PASSED] register_whitelist/14024997852
[08:13:37] [PASSED] register_whitelist/14024997852
[08:13:37] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[08:13:37] =============== [PASSED] xe_rtp_tables_test ================
[08:13:37] =================== xe_rtp (3 subtests) ====================
[08:13:37] =================== xe_rtp_rules_tests ====================
[08:13:37] [PASSED] no
[08:13:37] [PASSED] yes
[08:13:37] [PASSED] no-and-no
[08:13:37] [PASSED] no-and-yes
[08:13:37] [PASSED] yes-and-no
[08:13:37] [PASSED] yes-and-yes
[08:13:37] [PASSED] no-or-no
[08:13:37] [PASSED] no-or-yes
[08:13:37] [PASSED] yes-or-no
[08:13:37] [PASSED] yes-or-yes
[08:13:37] [PASSED] no-yes-or-yes-no
[08:13:37] [PASSED] no-yes-or-yes-yes
[08:13:37] [PASSED] yes-yes-or-no-yes
[08:13:37] [PASSED] yes-yes-or-yes-yes
[08:13:37] [PASSED] no-no-or-yes-or-no
[08:13:37] [PASSED] or
[08:13:37] [PASSED] or-yes
[08:13:37] [PASSED] or-no
[08:13:37] [PASSED] yes-or
[08:13:37] [PASSED] no-or
[08:13:37] [PASSED] no-or-or-yes
[08:13:37] [PASSED] yes-or-or-no
[08:13:37] [PASSED] no-or-or-no
[08:13:37] [PASSED] missing-context-engine-class
[08:13:37] [PASSED] missing-context-engine-class-or-yes
[08:13:37] [PASSED] missing-context-engine-class-or-or-yes
[08:13:37] =============== [PASSED] xe_rtp_rules_tests ================
[08:13:37] =============== xe_rtp_process_to_sr_tests ================
[08:13:37] [PASSED] coalesce-same-reg
[08:13:37] [PASSED] coalesce-same-reg-literal-and-func
[08:13:37] [PASSED] no-match-no-add
[08:13:37] [PASSED] two-regs-two-entries
[08:13:37] [PASSED] clr-one-set-other
[08:13:37] [PASSED] set-field
[08:13:37] [PASSED] conflict-duplicate
[08:13:37] [PASSED] conflict-not-disjoint
[08:13:37] [PASSED] conflict-not-disjoint-literal-and-func
[08:13:37] [PASSED] conflict-reg-type
[08:13:37] [PASSED] bad-mcr-reg-forced-to-regular
[08:13:37] [PASSED] bad-regular-reg-forced-to-mcr
[08:13:37] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[08:13:37] ================== xe_rtp_process_tests ===================
[08:13:37] [PASSED] active1
[08:13:37] [PASSED] active2
[08:13:37] [PASSED] active-inactive
[08:13:37] [PASSED] inactive-active
[08:13:37] [PASSED] inactive-active-inactive
[08:13:37] [PASSED] inactive-inactive-inactive
[08:13:37] ============== [PASSED] xe_rtp_process_tests ===============
[08:13:37] ===================== [PASSED] xe_rtp ======================
[08:13:37] ==================== xe_wa (1 subtest) =====================
[08:13:37] ======================== xe_wa_gt =========================
[08:13:37] [PASSED] TIGERLAKE B0
[08:13:37] [PASSED] DG1 A0
[08:13:37] [PASSED] DG1 B0
[08:13:37] [PASSED] ALDERLAKE_S A0
[08:13:37] [PASSED] ALDERLAKE_S B0
[08:13:37] [PASSED] ALDERLAKE_S C0
[08:13:37] [PASSED] ALDERLAKE_S D0
[08:13:37] [PASSED] ALDERLAKE_P A0
[08:13:37] [PASSED] ALDERLAKE_P B0
[08:13:37] [PASSED] ALDERLAKE_P C0
[08:13:37] [PASSED] ALDERLAKE_S RPLS D0
[08:13:37] [PASSED] ALDERLAKE_P RPLU E0
[08:13:37] [PASSED] DG2 G10 C0
[08:13:37] [PASSED] DG2 G11 B1
[08:13:37] [PASSED] DG2 G12 A1
[08:13:37] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[08:13:37] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[08:13:37] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[08:13:37] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[08:13:37] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[08:13:37] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[08:13:37] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[08:13:37] ==================== [PASSED] xe_wa_gt =====================
[08:13:37] ====================== [PASSED] xe_wa ======================
[08:13:37] ============================================================
[08:13:37] Testing complete. Ran 820 tests: passed: 792, skipped: 28
[08:13:37] Elapsed time: 36.938s total, 1.765s configuring, 34.406s 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
[08:13:37] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[08:13:39] 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
[08:14:04] Starting KUnit Kernel (1/1)...
[08:14:04] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[08:14:04] ============= refcount_interrupt (4 subtests) ==============
[08:14:04] [PASSED] test_single_irq_change
[08:14:04] [PASSED] test_nested_irq_change
[08:14:04] [PASSED] test_multiple_irq_change
[08:14:04] [PASSED] test_irq_save
[08:14:04] =============== [PASSED] refcount_interrupt ================
[08:14:04] ============ drm_test_pick_cmdline (2 subtests) ============
[08:14:04] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[08:14:04] =============== drm_test_pick_cmdline_named ===============
[08:14:04] [PASSED] NTSC
[08:14:04] [PASSED] NTSC-J
[08:14:04] [PASSED] PAL
[08:14:04] [PASSED] PAL-M
[08:14:04] =========== [PASSED] drm_test_pick_cmdline_named ===========
[08:14:04] ============== [PASSED] drm_test_pick_cmdline ==============
[08:14:04] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[08:14:04] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[08:14:04] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[08:14:04] =========== drm_validate_clone_mode (2 subtests) ===========
[08:14:04] ============== drm_test_check_in_clone_mode ===============
[08:14:04] [PASSED] in_clone_mode
[08:14:04] [PASSED] not_in_clone_mode
[08:14:04] ========== [PASSED] drm_test_check_in_clone_mode ===========
[08:14:04] =============== drm_test_check_valid_clones ===============
[08:14:04] [PASSED] not_in_clone_mode
[08:14:04] [PASSED] valid_clone
[08:14:04] [PASSED] invalid_clone
[08:14:04] =========== [PASSED] drm_test_check_valid_clones ===========
[08:14:04] ============= [PASSED] drm_validate_clone_mode =============
[08:14:04] ============= drm_validate_modeset (1 subtest) =============
[08:14:04] [PASSED] drm_test_check_connector_changed_modeset
[08:14:04] ============== [PASSED] drm_validate_modeset ===============
[08:14:04] ====== drm_test_bridge_get_current_state (1 subtest) =======
[08:14:04] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[08:14:04] ======== [PASSED] drm_test_bridge_get_current_state ========
[08:14:04] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[08:14:04] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[08:14:04] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[08:14:04] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[08:14:04] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[08:14:04] ============== drm_bridge_alloc (2 subtests) ===============
[08:14:04] [PASSED] drm_test_drm_bridge_alloc_basic
[08:14:04] [PASSED] drm_test_drm_bridge_alloc_get_put
[08:14:04] ================ [PASSED] drm_bridge_alloc =================
[08:14:04] ============= drm_bridge_bus_fmt (5 subtests) ==============
[08:14:04] [PASSED] drm_test_bridge_rgb_yuv_rgb
[08:14:04] [PASSED] drm_test_bridge_must_convert_to_yuv444
[08:14:04] [PASSED] drm_test_bridge_hdmi_auto_rgb
[08:14:04] [PASSED] drm_test_bridge_auto_first
[08:14:04] [PASSED] drm_test_bridge_rgb_yuv_no_path
[08:14:04] =============== [PASSED] drm_bridge_bus_fmt ================
[08:14:04] ============= drm_cmdline_parser (40 subtests) =============
[08:14:04] [PASSED] drm_test_cmdline_force_d_only
[08:14:04] [PASSED] drm_test_cmdline_force_D_only_dvi
[08:14:04] [PASSED] drm_test_cmdline_force_D_only_hdmi
[08:14:04] [PASSED] drm_test_cmdline_force_D_only_not_digital
[08:14:04] [PASSED] drm_test_cmdline_force_e_only
[08:14:04] [PASSED] drm_test_cmdline_res
[08:14:04] [PASSED] drm_test_cmdline_res_vesa
[08:14:04] [PASSED] drm_test_cmdline_res_vesa_rblank
[08:14:04] [PASSED] drm_test_cmdline_res_rblank
[08:14:04] [PASSED] drm_test_cmdline_res_bpp
[08:14:04] [PASSED] drm_test_cmdline_res_refresh
[08:14:04] [PASSED] drm_test_cmdline_res_bpp_refresh
[08:14:04] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[08:14:04] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[08:14:04] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[08:14:04] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[08:14:04] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[08:14:04] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[08:14:04] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[08:14:04] [PASSED] drm_test_cmdline_res_margins_force_on
[08:14:04] [PASSED] drm_test_cmdline_res_vesa_margins
[08:14:04] [PASSED] drm_test_cmdline_name
[08:14:04] [PASSED] drm_test_cmdline_name_bpp
[08:14:04] [PASSED] drm_test_cmdline_name_option
[08:14:04] [PASSED] drm_test_cmdline_name_bpp_option
[08:14:04] [PASSED] drm_test_cmdline_rotate_0
[08:14:04] [PASSED] drm_test_cmdline_rotate_90
[08:14:04] [PASSED] drm_test_cmdline_rotate_180
[08:14:04] [PASSED] drm_test_cmdline_rotate_270
[08:14:04] [PASSED] drm_test_cmdline_hmirror
[08:14:04] [PASSED] drm_test_cmdline_vmirror
[08:14:04] [PASSED] drm_test_cmdline_margin_options
[08:14:04] [PASSED] drm_test_cmdline_multiple_options
[08:14:04] [PASSED] drm_test_cmdline_bpp_extra_and_option
[08:14:04] [PASSED] drm_test_cmdline_extra_and_option
[08:14:04] [PASSED] drm_test_cmdline_freestanding_options
[08:14:04] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[08:14:04] [PASSED] drm_test_cmdline_panel_orientation
[08:14:04] ================ drm_test_cmdline_invalid =================
[08:14:04] [PASSED] margin_only
[08:14:04] [PASSED] interlace_only
[08:14:04] [PASSED] res_missing_x
[08:14:04] [PASSED] res_missing_y
[08:14:04] [PASSED] res_bad_y
[08:14:04] [PASSED] res_missing_y_bpp
[08:14:04] [PASSED] res_bad_bpp
[08:14:04] [PASSED] res_bad_refresh
[08:14:04] [PASSED] res_bpp_refresh_force_on_off
[08:14:04] [PASSED] res_invalid_mode
[08:14:04] [PASSED] res_bpp_wrong_place_mode
[08:14:04] [PASSED] name_bpp_refresh
[08:14:04] [PASSED] name_refresh
[08:14:04] [PASSED] name_refresh_wrong_mode
[08:14:04] [PASSED] name_refresh_invalid_mode
[08:14:04] [PASSED] rotate_multiple
[08:14:04] [PASSED] rotate_invalid_val
[08:14:04] [PASSED] rotate_truncated
[08:14:04] [PASSED] invalid_option
[08:14:04] [PASSED] invalid_tv_option
[08:14:04] [PASSED] truncated_tv_option
[08:14:04] ============ [PASSED] drm_test_cmdline_invalid =============
[08:14:04] =============== drm_test_cmdline_tv_options ===============
[08:14:04] [PASSED] NTSC
[08:14:04] [PASSED] NTSC_443
[08:14:04] [PASSED] NTSC_J
[08:14:04] [PASSED] PAL
[08:14:04] [PASSED] PAL_M
[08:14:04] [PASSED] PAL_N
[08:14:04] [PASSED] SECAM
[08:14:04] [PASSED] MONO_525
[08:14:04] [PASSED] MONO_625
[08:14:04] =========== [PASSED] drm_test_cmdline_tv_options ===========
[08:14:04] =============== [PASSED] drm_cmdline_parser ================
[08:14:04] ========== drmm_connector_hdmi_init (20 subtests) ==========
[08:14:04] [PASSED] drm_test_connector_hdmi_init_valid
[08:14:04] [PASSED] drm_test_connector_hdmi_init_bpc_8
[08:14:04] [PASSED] drm_test_connector_hdmi_init_bpc_10
[08:14:04] [PASSED] drm_test_connector_hdmi_init_bpc_12
[08:14:04] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[08:14:04] [PASSED] drm_test_connector_hdmi_init_bpc_null
[08:14:04] [PASSED] drm_test_connector_hdmi_init_formats_empty
[08:14:04] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[08:14:04] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[08:14:04] [PASSED] supported_formats=0x9 yuv420_allowed=1
[08:14:04] [PASSED] supported_formats=0x9 yuv420_allowed=0
[08:14:04] [PASSED] supported_formats=0x5 yuv420_allowed=1
[08:14:04] [PASSED] supported_formats=0x5 yuv420_allowed=0
[08:14:04] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[08:14:04] [PASSED] drm_test_connector_hdmi_init_null_ddc
[08:14:04] [PASSED] drm_test_connector_hdmi_init_null_product
[08:14:04] [PASSED] drm_test_connector_hdmi_init_null_vendor
[08:14:04] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[08:14:04] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[08:14:04] [PASSED] drm_test_connector_hdmi_init_product_valid
[08:14:04] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[08:14:04] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[08:14:04] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[08:14:04] ========= drm_test_connector_hdmi_init_type_valid =========
[08:14:04] [PASSED] HDMI-A
[08:14:04] [PASSED] HDMI-B
[08:14:04] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[08:14:04] ======== drm_test_connector_hdmi_init_type_invalid ========
[08:14:04] [PASSED] Unknown
[08:14:04] [PASSED] VGA
[08:14:04] [PASSED] DVI-I
[08:14:04] [PASSED] DVI-D
[08:14:04] [PASSED] DVI-A
[08:14:04] [PASSED] Composite
[08:14:04] [PASSED] SVIDEO
[08:14:04] [PASSED] LVDS
[08:14:04] [PASSED] Component
[08:14:04] [PASSED] DIN
[08:14:04] [PASSED] DP
[08:14:04] [PASSED] TV
[08:14:04] [PASSED] eDP
[08:14:04] [PASSED] Virtual
[08:14:04] [PASSED] DSI
[08:14:04] [PASSED] DPI
[08:14:04] [PASSED] Writeback
[08:14:04] [PASSED] SPI
[08:14:04] [PASSED] USB
[08:14:04] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[08:14:04] ============ [PASSED] drmm_connector_hdmi_init =============
[08:14:04] ============= drmm_connector_init (3 subtests) =============
[08:14:04] [PASSED] drm_test_drmm_connector_init
[08:14:04] [PASSED] drm_test_drmm_connector_init_null_ddc
[08:14:04] ========= drm_test_drmm_connector_init_type_valid =========
[08:14:04] [PASSED] Unknown
[08:14:04] [PASSED] VGA
[08:14:04] [PASSED] DVI-I
[08:14:04] [PASSED] DVI-D
[08:14:04] [PASSED] DVI-A
[08:14:04] [PASSED] Composite
[08:14:04] [PASSED] SVIDEO
[08:14:04] [PASSED] LVDS
[08:14:04] [PASSED] Component
[08:14:04] [PASSED] DIN
[08:14:04] [PASSED] DP
[08:14:04] [PASSED] HDMI-A
[08:14:04] [PASSED] HDMI-B
[08:14:04] [PASSED] TV
[08:14:04] [PASSED] eDP
[08:14:04] [PASSED] Virtual
[08:14:04] [PASSED] DSI
[08:14:04] [PASSED] DPI
[08:14:04] [PASSED] Writeback
[08:14:04] [PASSED] SPI
[08:14:04] [PASSED] USB
[08:14:04] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[08:14:04] =============== [PASSED] drmm_connector_init ===============
[08:14:04] ========= drm_connector_dynamic_init (6 subtests) ==========
[08:14:04] [PASSED] drm_test_drm_connector_dynamic_init
[08:14:04] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[08:14:04] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[08:14:04] [PASSED] drm_test_drm_connector_dynamic_init_properties
[08:14:04] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[08:14:04] [PASSED] Unknown
[08:14:04] [PASSED] VGA
[08:14:04] [PASSED] DVI-I
[08:14:04] [PASSED] DVI-D
[08:14:04] [PASSED] DVI-A
[08:14:04] [PASSED] Composite
[08:14:04] [PASSED] SVIDEO
[08:14:04] [PASSED] LVDS
[08:14:04] [PASSED] Component
[08:14:04] [PASSED] DIN
[08:14:04] [PASSED] DP
[08:14:04] [PASSED] HDMI-A
[08:14:04] [PASSED] HDMI-B
[08:14:04] [PASSED] TV
[08:14:04] [PASSED] eDP
[08:14:04] [PASSED] Virtual
[08:14:04] [PASSED] DSI
[08:14:04] [PASSED] DPI
[08:14:04] [PASSED] Writeback
[08:14:04] [PASSED] SPI
[08:14:04] [PASSED] USB
[08:14:04] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[08:14:04] ======== drm_test_drm_connector_dynamic_init_name =========
[08:14:04] [PASSED] Unknown
[08:14:04] [PASSED] VGA
[08:14:04] [PASSED] DVI-I
[08:14:04] [PASSED] DVI-D
[08:14:04] [PASSED] DVI-A
[08:14:04] [PASSED] Composite
[08:14:04] [PASSED] SVIDEO
[08:14:04] [PASSED] LVDS
[08:14:04] [PASSED] Component
[08:14:04] [PASSED] DIN
[08:14:04] [PASSED] DP
[08:14:04] [PASSED] HDMI-A
[08:14:04] [PASSED] HDMI-B
[08:14:04] [PASSED] TV
[08:14:04] [PASSED] eDP
[08:14:04] [PASSED] Virtual
[08:14:04] [PASSED] DSI
[08:14:04] [PASSED] DPI
[08:14:04] [PASSED] Writeback
[08:14:04] [PASSED] SPI
[08:14:04] [PASSED] USB
[08:14:04] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[08:14:04] =========== [PASSED] drm_connector_dynamic_init ============
[08:14:04] ==== drm_connector_dynamic_register_early (4 subtests) =====
[08:14:04] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[08:14:04] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[08:14:04] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[08:14:04] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[08:14:04] ====== [PASSED] drm_connector_dynamic_register_early =======
[08:14:04] ======= drm_connector_dynamic_register (7 subtests) ========
[08:14:04] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[08:14:04] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[08:14:04] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[08:14:04] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[08:14:04] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[08:14:04] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[08:14:04] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[08:14:04] ========= [PASSED] drm_connector_dynamic_register ==========
[08:14:04] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[08:14:04] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[08:14:04] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[08:14:04] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[08:14:04] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[08:14:04] ========== drm_test_get_tv_mode_from_name_valid ===========
[08:14:04] [PASSED] NTSC
[08:14:04] [PASSED] NTSC-443
[08:14:04] [PASSED] NTSC-J
[08:14:04] [PASSED] PAL
[08:14:04] [PASSED] PAL-M
[08:14:04] [PASSED] PAL-N
[08:14:04] [PASSED] SECAM
[08:14:04] [PASSED] Mono
[08:14:04] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[08:14:04] [PASSED] drm_test_get_tv_mode_from_name_truncated
[08:14:04] ============ [PASSED] drm_get_tv_mode_from_name ============
[08:14:04] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[08:14:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[08:14:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[08:14:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[08:14:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[08:14:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[08:14:04] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[08:14:04] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[08:14:04] [PASSED] VIC 96
[08:14:04] [PASSED] VIC 97
[08:14:04] [PASSED] VIC 101
[08:14:04] [PASSED] VIC 102
[08:14:04] [PASSED] VIC 106
[08:14:04] [PASSED] VIC 107
[08:14:04] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[08:14:04] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[08:14:04] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[08:14:04] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[08:14:04] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[08:14:04] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[08:14:04] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[08:14:04] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[08:14:04] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[08:14:04] [PASSED] Automatic
[08:14:04] [PASSED] Full
[08:14:04] [PASSED] Limited 16:235
[08:14:04] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[08:14:04] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[08:14:04] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[08:14:04] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[08:14:04] === drm_test_drm_hdmi_connector_get_output_format_name ====
[08:14:04] [PASSED] RGB
[08:14:04] [PASSED] YUV 4:2:0
[08:14:04] [PASSED] YUV 4:2:2
[08:14:04] [PASSED] YUV 4:4:4
[08:14:04] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[08:14:04] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[08:14:04] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[08:14:04] ============= drm_damage_helper (21 subtests) ==============
[08:14:04] [PASSED] drm_test_damage_iter_no_damage
[08:14:04] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[08:14:04] [PASSED] drm_test_damage_iter_no_damage_src_moved
[08:14:04] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[08:14:04] [PASSED] drm_test_damage_iter_no_damage_not_visible
[08:14:04] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[08:14:04] [PASSED] drm_test_damage_iter_no_damage_no_fb
[08:14:04] [PASSED] drm_test_damage_iter_simple_damage
[08:14:04] [PASSED] drm_test_damage_iter_single_damage
[08:14:04] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[08:14:04] [PASSED] drm_test_damage_iter_single_damage_outside_src
[08:14:04] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[08:14:04] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[08:14:04] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[08:14:04] [PASSED] drm_test_damage_iter_single_damage_src_moved
[08:14:04] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[08:14:04] [PASSED] drm_test_damage_iter_damage
[08:14:04] [PASSED] drm_test_damage_iter_damage_one_intersect
[08:14:04] [PASSED] drm_test_damage_iter_damage_one_outside
[08:14:04] [PASSED] drm_test_damage_iter_damage_src_moved
[08:14:04] [PASSED] drm_test_damage_iter_damage_not_visible
[08:14:04] ================ [PASSED] drm_damage_helper ================
[08:14:04] ============== drm_dp_mst_helper (3 subtests) ==============
[08:14:04] ============== drm_test_dp_mst_calc_pbn_mode ==============
[08:14:04] [PASSED] Clock 154000 BPP 30 DSC disabled
[08:14:04] [PASSED] Clock 234000 BPP 30 DSC disabled
[08:14:04] [PASSED] Clock 297000 BPP 24 DSC disabled
[08:14:04] [PASSED] Clock 332880 BPP 24 DSC enabled
[08:14:04] [PASSED] Clock 324540 BPP 24 DSC enabled
[08:14:04] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[08:14:04] ============== drm_test_dp_mst_calc_pbn_div ===============
[08:14:04] [PASSED] Link rate 2000000 lane count 4
[08:14:04] [PASSED] Link rate 2000000 lane count 2
[08:14:04] [PASSED] Link rate 2000000 lane count 1
[08:14:04] [PASSED] Link rate 1350000 lane count 4
[08:14:04] [PASSED] Link rate 1350000 lane count 2
[08:14:04] [PASSED] Link rate 1350000 lane count 1
[08:14:04] [PASSED] Link rate 1000000 lane count 4
[08:14:04] [PASSED] Link rate 1000000 lane count 2
[08:14:04] [PASSED] Link rate 1000000 lane count 1
[08:14:04] [PASSED] Link rate 810000 lane count 4
[08:14:04] [PASSED] Link rate 810000 lane count 2
[08:14:04] [PASSED] Link rate 810000 lane count 1
[08:14:04] [PASSED] Link rate 540000 lane count 4
[08:14:04] [PASSED] Link rate 540000 lane count 2
[08:14:04] [PASSED] Link rate 540000 lane count 1
[08:14:04] [PASSED] Link rate 270000 lane count 4
[08:14:04] [PASSED] Link rate 270000 lane count 2
[08:14:04] [PASSED] Link rate 270000 lane count 1
[08:14:04] [PASSED] Link rate 162000 lane count 4
[08:14:04] [PASSED] Link rate 162000 lane count 2
[08:14:04] [PASSED] Link rate 162000 lane count 1
[08:14:04] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[08:14:04] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[08:14:04] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[08:14:04] [PASSED] DP_POWER_UP_PHY with port number
[08:14:04] [PASSED] DP_POWER_DOWN_PHY with port number
[08:14:04] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[08:14:04] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[08:14:04] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[08:14:04] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[08:14:04] [PASSED] DP_QUERY_PAYLOAD with port number
[08:14:04] [PASSED] DP_QUERY_PAYLOAD with VCPI
[08:14:04] [PASSED] DP_REMOTE_DPCD_READ with port number
[08:14:04] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[08:14:04] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[08:14:04] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[08:14:04] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[08:14:04] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[08:14:04] [PASSED] DP_REMOTE_I2C_READ with port number
[08:14:04] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[08:14:04] [PASSED] DP_REMOTE_I2C_READ with transactions array
[08:14:04] [PASSED] DP_REMOTE_I2C_WRITE with port number
[08:14:04] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[08:14:04] [PASSED] DP_REMOTE_I2C_WRITE with data array
[08:14:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[08:14:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[08:14:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[08:14:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[08:14:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[08:14:04] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[08:14:04] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[08:14:04] ================ [PASSED] drm_dp_mst_helper ================
[08:14:04] ================== drm_exec (7 subtests) ===================
[08:14:04] [PASSED] sanitycheck
[08:14:04] [PASSED] test_lock
[08:14:04] [PASSED] test_lock_unlock
[08:14:04] [PASSED] test_duplicates
[08:14:04] [PASSED] test_prepare
[08:14:04] [PASSED] test_prepare_array
[08:14:04] [PASSED] test_multiple_loops
[08:14:04] ==================== [PASSED] drm_exec =====================
[08:14:04] =========== drm_format_helper_test (17 subtests) ===========
[08:14:04] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[08:14:04] [PASSED] single_pixel_source_buffer
[08:14:04] [PASSED] single_pixel_clip_rectangle
[08:14:04] [PASSED] well_known_colors
[08:14:04] [PASSED] destination_pitch
[08:14:04] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[08:14:04] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[08:14:04] [PASSED] single_pixel_source_buffer
[08:14:04] [PASSED] single_pixel_clip_rectangle
[08:14:04] [PASSED] well_known_colors
[08:14:04] [PASSED] destination_pitch
[08:14:04] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[08:14:04] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[08:14:04] [PASSED] single_pixel_source_buffer
[08:14:04] [PASSED] single_pixel_clip_rectangle
[08:14:04] [PASSED] well_known_colors
[08:14:04] [PASSED] destination_pitch
[08:14:04] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[08:14:04] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[08:14:04] [PASSED] single_pixel_source_buffer
[08:14:04] [PASSED] single_pixel_clip_rectangle
[08:14:04] [PASSED] well_known_colors
[08:14:04] [PASSED] destination_pitch
[08:14:04] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[08:14:04] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[08:14:04] [PASSED] single_pixel_source_buffer
[08:14:04] [PASSED] single_pixel_clip_rectangle
[08:14:04] [PASSED] well_known_colors
[08:14:04] [PASSED] destination_pitch
[08:14:04] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[08:14:04] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[08:14:04] [PASSED] single_pixel_source_buffer
[08:14:04] [PASSED] single_pixel_clip_rectangle
[08:14:04] [PASSED] well_known_colors
[08:14:04] [PASSED] destination_pitch
[08:14:04] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[08:14:04] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[08:14:04] [PASSED] single_pixel_source_buffer
[08:14:04] [PASSED] single_pixel_clip_rectangle
[08:14:04] [PASSED] well_known_colors
[08:14:04] [PASSED] destination_pitch
[08:14:04] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[08:14:04] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[08:14:04] [PASSED] single_pixel_source_buffer
[08:14:04] [PASSED] single_pixel_clip_rectangle
[08:14:04] [PASSED] well_known_colors
[08:14:04] [PASSED] destination_pitch
[08:14:04] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[08:14:04] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[08:14:04] [PASSED] single_pixel_source_buffer
[08:14:04] [PASSED] single_pixel_clip_rectangle
[08:14:04] [PASSED] well_known_colors
[08:14:04] [PASSED] destination_pitch
[08:14:04] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[08:14:04] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[08:14:04] [PASSED] single_pixel_source_buffer
[08:14:04] [PASSED] single_pixel_clip_rectangle
[08:14:04] [PASSED] well_known_colors
[08:14:04] [PASSED] destination_pitch
[08:14:04] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[08:14:04] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[08:14:04] [PASSED] single_pixel_source_buffer
[08:14:04] [PASSED] single_pixel_clip_rectangle
[08:14:04] [PASSED] well_known_colors
[08:14:04] [PASSED] destination_pitch
[08:14:04] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[08:14:04] ============== drm_test_fb_xrgb8888_to_mono ===============
[08:14:04] [PASSED] single_pixel_source_buffer
[08:14:04] [PASSED] single_pixel_clip_rectangle
[08:14:04] [PASSED] well_known_colors
[08:14:04] [PASSED] destination_pitch
[08:14:04] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[08:14:04] ==================== drm_test_fb_swab =====================
[08:14:04] [PASSED] single_pixel_source_buffer
[08:14:04] [PASSED] single_pixel_clip_rectangle
[08:14:04] [PASSED] well_known_colors
[08:14:04] [PASSED] destination_pitch
[08:14:04] ================ [PASSED] drm_test_fb_swab =================
[08:14:04] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[08:14:04] [PASSED] single_pixel_source_buffer
[08:14:04] [PASSED] single_pixel_clip_rectangle
[08:14:04] [PASSED] well_known_colors
[08:14:04] [PASSED] destination_pitch
[08:14:04] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[08:14:04] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[08:14:04] [PASSED] single_pixel_source_buffer
[08:14:04] [PASSED] single_pixel_clip_rectangle
[08:14:04] [PASSED] well_known_colors
[08:14:04] [PASSED] destination_pitch
[08:14:04] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[08:14:04] ================= drm_test_fb_clip_offset =================
[08:14:04] [PASSED] pass through
[08:14:04] [PASSED] horizontal offset
[08:14:04] [PASSED] vertical offset
[08:14:04] [PASSED] horizontal and vertical offset
[08:14:04] [PASSED] horizontal offset (custom pitch)
[08:14:04] [PASSED] vertical offset (custom pitch)
[08:14:04] [PASSED] horizontal and vertical offset (custom pitch)
[08:14:04] ============= [PASSED] drm_test_fb_clip_offset =============
[08:14:04] =================== drm_test_fb_memcpy ====================
[08:14:04] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[08:14:04] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[08:14:04] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[08:14:04] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[08:14:04] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[08:14:04] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[08:14:04] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[08:14:04] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[08:14:04] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[08:14:04] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[08:14:04] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[08:14:04] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[08:14:04] =============== [PASSED] drm_test_fb_memcpy ================
[08:14:04] ============= [PASSED] drm_format_helper_test ==============
[08:14:04] ================= drm_format (18 subtests) =================
[08:14:04] [PASSED] drm_test_format_block_width_invalid
[08:14:04] [PASSED] drm_test_format_block_width_one_plane
[08:14:04] [PASSED] drm_test_format_block_width_two_plane
[08:14:04] [PASSED] drm_test_format_block_width_three_plane
[08:14:04] [PASSED] drm_test_format_block_width_tiled
[08:14:04] [PASSED] drm_test_format_block_height_invalid
[08:14:04] [PASSED] drm_test_format_block_height_one_plane
[08:14:04] [PASSED] drm_test_format_block_height_two_plane
[08:14:04] [PASSED] drm_test_format_block_height_three_plane
[08:14:04] [PASSED] drm_test_format_block_height_tiled
[08:14:04] [PASSED] drm_test_format_min_pitch_invalid
[08:14:04] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[08:14:04] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[08:14:04] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[08:14:04] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[08:14:04] [PASSED] drm_test_format_min_pitch_two_plane
[08:14:04] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[08:14:04] [PASSED] drm_test_format_min_pitch_tiled
[08:14:04] =================== [PASSED] drm_format ====================
[08:14:04] ============== drm_framebuffer (10 subtests) ===============
[08:14:04] ========== drm_test_framebuffer_check_src_coords ==========
[08:14:04] [PASSED] Success: source fits into fb
[08:14:04] [PASSED] Fail: overflowing fb with x-axis coordinate
[08:14:04] [PASSED] Fail: overflowing fb with y-axis coordinate
[08:14:04] [PASSED] Fail: overflowing fb with source width
[08:14:04] [PASSED] Fail: overflowing fb with source height
[08:14:04] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[08:14:04] [PASSED] drm_test_framebuffer_cleanup
[08:14:04] =============== drm_test_framebuffer_create ===============
[08:14:04] [PASSED] ABGR8888 normal sizes
[08:14:04] [PASSED] ABGR8888 max sizes
[08:14:04] [PASSED] ABGR8888 pitch greater than min required
[08:14:04] [PASSED] ABGR8888 pitch less than min required
[08:14:04] [PASSED] ABGR8888 Invalid width
[08:14:04] [PASSED] ABGR8888 Invalid buffer handle
[08:14:04] [PASSED] No pixel format
[08:14:04] [PASSED] ABGR8888 Width 0
[08:14:04] [PASSED] ABGR8888 Height 0
[08:14:04] [PASSED] ABGR8888 Out of bound height * pitch combination
[08:14:04] [PASSED] ABGR8888 Large buffer offset
[08:14:04] [PASSED] ABGR8888 Buffer offset for inexistent plane
[08:14:04] [PASSED] ABGR8888 Invalid flag
[08:14:04] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[08:14:04] [PASSED] ABGR8888 Valid buffer modifier
[08:14:04] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[08:14:04] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[08:14:04] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[08:14:04] [PASSED] NV12 Normal sizes
[08:14:04] [PASSED] NV12 Max sizes
[08:14:04] [PASSED] NV12 Invalid pitch
[08:14:04] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[08:14:04] [PASSED] NV12 different modifier per-plane
[08:14:04] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[08:14:04] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[08:14:04] [PASSED] NV12 Modifier for inexistent plane
[08:14:04] [PASSED] NV12 Handle for inexistent plane
[08:14:04] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[08:14:04] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[08:14:04] [PASSED] YVU420 Normal sizes
[08:14:04] [PASSED] YVU420 Max sizes
[08:14:04] [PASSED] YVU420 Invalid pitch
[08:14:04] [PASSED] YVU420 Different pitches
[08:14:04] [PASSED] YVU420 Different buffer offsets/pitches
[08:14:04] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[08:14:04] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[08:14:04] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[08:14:04] [PASSED] YVU420 Valid modifier
[08:14:04] [PASSED] YVU420 Different modifiers per plane
[08:14:04] [PASSED] YVU420 Modifier for inexistent plane
[08:14:04] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[08:14:04] [PASSED] X0L2 Normal sizes
[08:14:04] [PASSED] X0L2 Max sizes
[08:14:04] [PASSED] X0L2 Invalid pitch
[08:14:04] [PASSED] X0L2 Pitch greater than minimum required
[08:14:04] [PASSED] X0L2 Handle for inexistent plane
[08:14:04] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[08:14:04] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[08:14:04] [PASSED] X0L2 Valid modifier
[08:14:04] [PASSED] X0L2 Modifier for inexistent plane
[08:14:04] =========== [PASSED] drm_test_framebuffer_create ===========
[08:14:04] [PASSED] drm_test_framebuffer_free
[08:14:04] [PASSED] drm_test_framebuffer_init
[08:14:04] [PASSED] drm_test_framebuffer_init_bad_format
[08:14:04] [PASSED] drm_test_framebuffer_init_dev_mismatch
[08:14:04] [PASSED] drm_test_framebuffer_lookup
[08:14:04] [PASSED] drm_test_framebuffer_lookup_inexistent
[08:14:04] [PASSED] drm_test_framebuffer_modifiers_not_supported
[08:14:04] ================= [PASSED] drm_framebuffer =================
[08:14:04] ================ drm_gem_shmem (8 subtests) ================
[08:14:04] [PASSED] drm_gem_shmem_test_obj_create
[08:14:04] [PASSED] drm_gem_shmem_test_obj_create_private
[08:14:04] [PASSED] drm_gem_shmem_test_pin_pages
[08:14:04] [PASSED] drm_gem_shmem_test_vmap
[08:14:04] [PASSED] drm_gem_shmem_test_get_sg_table
[08:14:04] [PASSED] drm_gem_shmem_test_get_pages_sgt
[08:14:04] [PASSED] drm_gem_shmem_test_madvise
[08:14:04] [PASSED] drm_gem_shmem_test_purge
[08:14:04] ================== [PASSED] drm_gem_shmem ==================
[08:14:04] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[08:14:04] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[08:14:04] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[08:14:04] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[08:14:04] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[08:14:04] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[08:14:04] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[08:14:04] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[08:14:04] [PASSED] Automatic
[08:14:04] [PASSED] Full
[08:14:04] [PASSED] Limited 16:235
[08:14:04] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[08:14:04] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[08:14:04] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[08:14:04] [PASSED] drm_test_check_disable_connector
[08:14:04] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[08:14:04] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[08:14:04] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[08:14:04] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[08:14:04] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[08:14:04] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[08:14:04] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[08:14:04] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[08:14:04] [PASSED] drm_test_check_output_bpc_dvi
[08:14:04] [PASSED] drm_test_check_output_bpc_format_vic_1
[08:14:04] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[08:14:04] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[08:14:04] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[08:14:04] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[08:14:04] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[08:14:04] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[08:14:04] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[08:14:04] ============ drm_test_check_hdmi_color_format =============
[08:14:04] [PASSED] AUTO -> RGB
[08:14:04] [PASSED] YCBCR422 -> YUV422
[08:14:04] [PASSED] YCBCR420 -> YUV420
[08:14:04] [PASSED] YCBCR444 -> YUV444
[08:14:04] [PASSED] RGB -> RGB
[08:14:04] ======== [PASSED] drm_test_check_hdmi_color_format =========
[08:14:04] ======== drm_test_check_hdmi_color_format_420_only ========
[08:14:04] [PASSED] RGB should fail
[08:14:04] [PASSED] YUV444 should fail
[08:14:04] [PASSED] YUV422 should fail
[08:14:04] [PASSED] YUV420 should work
[08:14:04] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[08:14:04] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[08:14:04] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[08:14:04] [PASSED] drm_test_check_broadcast_rgb_value
[08:14:04] [PASSED] drm_test_check_bpc_8_value
[08:14:04] [PASSED] drm_test_check_bpc_10_value
[08:14:04] [PASSED] drm_test_check_bpc_12_value
[08:14:04] [PASSED] drm_test_check_format_value
[08:14:04] [PASSED] drm_test_check_tmds_char_value
[08:14:04] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[08:14:04] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[08:14:04] [PASSED] drm_test_check_mode_valid
[08:14:04] [PASSED] drm_test_check_mode_valid_reject
[08:14:04] [PASSED] drm_test_check_mode_valid_reject_rate
[08:14:04] [PASSED] drm_test_check_mode_valid_reject_max_clock
[08:14:04] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[08:14:04] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[08:14:04] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[08:14:04] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[08:14:04] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[08:14:04] [PASSED] drm_test_check_infoframes
[08:14:04] [PASSED] drm_test_check_reject_avi_infoframe
[08:14:04] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[08:14:04] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[08:14:04] [PASSED] drm_test_check_reject_audio_infoframe
[08:14:04] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[08:14:04] ================= drm_managed (2 subtests) =================
[08:14:04] [PASSED] drm_test_managed_release_action
[08:14:04] [PASSED] drm_test_managed_run_action
[08:14:04] =================== [PASSED] drm_managed ===================
[08:14:04] =================== drm_mm (6 subtests) ====================
[08:14:04] [PASSED] drm_test_mm_init
[08:14:04] [PASSED] drm_test_mm_debug
[08:14:04] [PASSED] drm_test_mm_align32
[08:14:04] [PASSED] drm_test_mm_align64
[08:14:04] [PASSED] drm_test_mm_lowest
[08:14:04] [PASSED] drm_test_mm_highest
[08:14:04] ===================== [PASSED] drm_mm ======================
[08:14:04] ============= drm_modes_analog_tv (5 subtests) =============
[08:14:04] [PASSED] drm_test_modes_analog_tv_mono_576i
[08:14:04] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[08:14:04] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[08:14:04] [PASSED] drm_test_modes_analog_tv_pal_576i
[08:14:04] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[08:14:04] =============== [PASSED] drm_modes_analog_tv ===============
[08:14:04] ============== drm_panic_helper (3 subtests) ===============
[08:14:04] ============= drm_test_panic_screen_user_map ==============
[08:14:04] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[08:14:04] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[08:14:04] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[08:14:04] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[08:14:04] ========= [PASSED] drm_test_panic_screen_user_map ==========
[08:14:04] ============= drm_test_panic_screen_user_page =============
[08:14:04] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[08:14:04] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[08:14:04] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[08:14:04] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[08:14:04] ========= [PASSED] drm_test_panic_screen_user_page =========
[08:14:04] ========== drm_test_panic_screen_user_set_pixel ===========
[08:14:04] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[08:14:04] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[08:14:04] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[08:14:04] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[08:14:04] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[08:14:04] ====== [PASSED] drm_test_panic_screen_user_set_pixel =======
[08:14:04] ================ [PASSED] drm_panic_helper =================
[08:14:04] ============== drm_plane_helper (2 subtests) ===============
[08:14:04] =============== drm_test_check_plane_state ================
[08:14:04] [PASSED] clipping_simple
[08:14:04] [PASSED] clipping_rotate_reflect
[08:14:04] [PASSED] positioning_simple
[08:14:04] [PASSED] upscaling
[08:14:04] [PASSED] downscaling
[08:14:04] [PASSED] rounding1
[08:14:04] [PASSED] rounding2
[08:14:04] [PASSED] rounding3
[08:14:04] [PASSED] rounding4
[08:14:04] =========== [PASSED] drm_test_check_plane_state ============
[08:14:04] =========== drm_test_check_invalid_plane_state ============
[08:14:04] [PASSED] positioning_invalid
[08:14:04] [PASSED] upscaling_invalid
[08:14:04] [PASSED] downscaling_invalid
[08:14:04] ======= [PASSED] drm_test_check_invalid_plane_state ========
[08:14:04] ================ [PASSED] drm_plane_helper =================
[08:14:04] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[08:14:04] ====== drm_test_connector_helper_tv_get_modes_check =======
[08:14:04] [PASSED] None
[08:14:04] [PASSED] PAL
[08:14:04] [PASSED] NTSC
[08:14:04] [PASSED] Both, NTSC Default
[08:14:04] [PASSED] Both, PAL Default
[08:14:04] [PASSED] Both, NTSC Default, with PAL on command-line
[08:14:04] [PASSED] Both, PAL Default, with NTSC on command-line
[08:14:04] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[08:14:04] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[08:14:04] ================== drm_rect (9 subtests) ===================
[08:14:04] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[08:14:04] [PASSED] drm_test_rect_clip_scaled_not_clipped
[08:14:04] [PASSED] drm_test_rect_clip_scaled_clipped
[08:14:04] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[08:14:04] ================= drm_test_rect_intersect =================
[08:14:04] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[08:14:04] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[08:14:04] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[08:14:04] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[08:14:04] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[08:14:04] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[08:14:04] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[08:14:04] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[08:14:04] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[08:14:04] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[08:14:04] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[08:14:04] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[08:14:04] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[08:14:04] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[08:14:04] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[08:14:04] ============= [PASSED] drm_test_rect_intersect =============
[08:14:04] ================ drm_test_rect_calc_hscale ================
[08:14:04] [PASSED] normal use
[08:14:04] [PASSED] out of max range
[08:14:04] [PASSED] out of min range
[08:14:04] [PASSED] zero dst
[08:14:04] [PASSED] negative src
[08:14:04] [PASSED] negative dst
[08:14:04] ============ [PASSED] drm_test_rect_calc_hscale ============
[08:14:04] ================ drm_test_rect_calc_vscale ================
[08:14:04] [PASSED] normal use
[08:14:04] [PASSED] out of max range
[08:14:04] [PASSED] out of min range
[08:14:04] [PASSED] zero dst
[08:14:04] [PASSED] negative src
[08:14:04] [PASSED] negative dst
[08:14:04] ============ [PASSED] drm_test_rect_calc_vscale ============
[08:14:04] ================== drm_test_rect_rotate ===================
[08:14:04] [PASSED] reflect-x
[08:14:04] [PASSED] reflect-y
[08:14:04] [PASSED] rotate-0
[08:14:04] [PASSED] rotate-90
[08:14:04] [PASSED] rotate-180
[08:14:04] [PASSED] rotate-270
[08:14:04] ============== [PASSED] drm_test_rect_rotate ===============
[08:14:04] ================ drm_test_rect_rotate_inv =================
[08:14:04] [PASSED] reflect-x
[08:14:04] [PASSED] reflect-y
[08:14:04] [PASSED] rotate-0
[08:14:04] [PASSED] rotate-90
[08:14:04] [PASSED] rotate-180
[08:14:04] [PASSED] rotate-270
[08:14:04] ============ [PASSED] drm_test_rect_rotate_inv =============
[08:14:04] ==================== [PASSED] drm_rect =====================
[08:14:04] ============ drm_sysfb_modeset_test (1 subtest) ============
[08:14:04] ============ drm_test_sysfb_build_fourcc_list =============
[08:14:04] [PASSED] no native formats
[08:14:04] [PASSED] XRGB8888 as native format
[08:14:04] [PASSED] remove duplicates
[08:14:04] [PASSED] convert alpha formats
[08:14:04] [PASSED] random formats
[08:14:04] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[08:14:04] ============= [PASSED] drm_sysfb_modeset_test ==============
[08:14:04] ================== drm_fixp (2 subtests) ===================
[08:14:04] [PASSED] drm_test_int2fixp
[08:14:04] [PASSED] drm_test_sm2fixp
[08:14:04] ==================== [PASSED] drm_fixp =====================
[08:14:04] ============================================================
[08:14:04] Testing complete. Ran 671 tests: passed: 671
[08:14:04] Elapsed time: 27.258s total, 1.809s configuring, 24.977s building, 0.422s 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
[08:14:05] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[08:14:06] 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
[08:14:17] Starting KUnit Kernel (1/1)...
[08:14:17] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[08:14:17] ============= refcount_interrupt (4 subtests) ==============
[08:14:17] [PASSED] test_single_irq_change
[08:14:17] [PASSED] test_nested_irq_change
[08:14:17] [PASSED] test_multiple_irq_change
[08:14:17] [PASSED] test_irq_save
[08:14:17] =============== [PASSED] refcount_interrupt ================
[08:14:17] ================= ttm_device (5 subtests) ==================
[08:14:17] [PASSED] ttm_device_init_basic
[08:14:17] [PASSED] ttm_device_init_multiple
[08:14:17] [PASSED] ttm_device_fini_basic
[08:14:17] [PASSED] ttm_device_init_no_vma_man
[08:14:17] ================== ttm_device_init_pools ==================
[08:14:17] [PASSED] No DMA allocations, no DMA32 required
[08:14:17] [PASSED] DMA allocations, DMA32 required
[08:14:17] [PASSED] No DMA allocations, DMA32 required
[08:14:17] [PASSED] DMA allocations, no DMA32 required
[08:14:17] ============== [PASSED] ttm_device_init_pools ==============
[08:14:17] =================== [PASSED] ttm_device ====================
[08:14:17] ================== ttm_pool (8 subtests) ===================
[08:14:17] ================== ttm_pool_alloc_basic ===================
[08:14:17] [PASSED] One page
[08:14:17] [PASSED] More than one page
[08:14:17] [PASSED] Above the allocation limit
[08:14:17] [PASSED] One page, with coherent DMA mappings enabled
[08:14:17] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[08:14:17] ============== [PASSED] ttm_pool_alloc_basic ===============
[08:14:17] ============== ttm_pool_alloc_basic_dma_addr ==============
[08:14:17] [PASSED] One page
[08:14:17] [PASSED] More than one page
[08:14:17] [PASSED] Above the allocation limit
[08:14:17] [PASSED] One page, with coherent DMA mappings enabled
[08:14:17] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[08:14:17] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[08:14:17] [PASSED] ttm_pool_alloc_order_caching_match
[08:14:17] [PASSED] ttm_pool_alloc_caching_mismatch
[08:14:17] [PASSED] ttm_pool_alloc_order_mismatch
[08:14:17] [PASSED] ttm_pool_free_dma_alloc
[08:14:17] [PASSED] ttm_pool_free_no_dma_alloc
[08:14:17] [PASSED] ttm_pool_fini_basic
[08:14:17] ==================== [PASSED] ttm_pool =====================
[08:14:17] ================ ttm_resource (8 subtests) =================
[08:14:17] ================= ttm_resource_init_basic =================
[08:14:17] [PASSED] Init resource in TTM_PL_SYSTEM
[08:14:17] [PASSED] Init resource in TTM_PL_VRAM
[08:14:17] [PASSED] Init resource in a private placement
[08:14:17] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[08:14:17] ============= [PASSED] ttm_resource_init_basic =============
[08:14:17] [PASSED] ttm_resource_init_pinned
[08:14:17] [PASSED] ttm_resource_fini_basic
[08:14:17] [PASSED] ttm_resource_manager_init_basic
[08:14:17] [PASSED] ttm_resource_manager_usage_basic
[08:14:17] [PASSED] ttm_resource_manager_set_used_basic
[08:14:17] [PASSED] ttm_sys_man_alloc_basic
[08:14:17] [PASSED] ttm_sys_man_free_basic
[08:14:17] ================== [PASSED] ttm_resource ===================
[08:14:17] =================== ttm_tt (15 subtests) ===================
[08:14:17] ==================== ttm_tt_init_basic ====================
[08:14:17] [PASSED] Page-aligned size
[08:14:17] [PASSED] Extra pages requested
[08:14:17] ================ [PASSED] ttm_tt_init_basic ================
[08:14:17] [PASSED] ttm_tt_init_misaligned
[08:14:17] [PASSED] ttm_tt_fini_basic
[08:14:17] [PASSED] ttm_tt_fini_sg
[08:14:17] [PASSED] ttm_tt_fini_shmem
[08:14:17] [PASSED] ttm_tt_create_basic
[08:14:17] [PASSED] ttm_tt_create_invalid_bo_type
[08:14:17] [PASSED] ttm_tt_create_ttm_exists
[08:14:17] [PASSED] ttm_tt_create_failed
[08:14:17] [PASSED] ttm_tt_destroy_basic
[08:14:17] [PASSED] ttm_tt_populate_null_ttm
[08:14:17] [PASSED] ttm_tt_populate_populated_ttm
[08:14:17] [PASSED] ttm_tt_unpopulate_basic
[08:14:17] [PASSED] ttm_tt_unpopulate_empty_ttm
[08:14:17] [PASSED] ttm_tt_swapin_basic
[08:14:17] ===================== [PASSED] ttm_tt ======================
[08:14:17] =================== ttm_bo (14 subtests) ===================
[08:14:17] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[08:14:17] [PASSED] Cannot be interrupted and sleeps
[08:14:17] [PASSED] Cannot be interrupted, locks straight away
[08:14:17] [PASSED] Can be interrupted, sleeps
[08:14:17] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[08:14:17] [PASSED] ttm_bo_reserve_locked_no_sleep
[08:14:17] [PASSED] ttm_bo_reserve_no_wait_ticket
[08:14:17] [PASSED] ttm_bo_reserve_double_resv
[08:14:17] [PASSED] ttm_bo_reserve_interrupted
[08:14:17] [PASSED] ttm_bo_reserve_deadlock
[08:14:17] [PASSED] ttm_bo_unreserve_basic
[08:14:17] [PASSED] ttm_bo_unreserve_pinned
[08:14:17] [PASSED] ttm_bo_unreserve_bulk
[08:14:17] [PASSED] ttm_bo_fini_basic
[08:14:17] [PASSED] ttm_bo_fini_shared_resv
[08:14:17] [PASSED] ttm_bo_pin_basic
[08:14:17] [PASSED] ttm_bo_pin_unpin_resource
[08:14:17] [PASSED] ttm_bo_multiple_pin_one_unpin
[08:14:17] ===================== [PASSED] ttm_bo ======================
[08:14:17] ============== ttm_bo_validate (22 subtests) ===============
[08:14:17] ============== ttm_bo_init_reserved_sys_man ===============
[08:14:17] [PASSED] Buffer object for userspace
[08:14:17] [PASSED] Kernel buffer object
[08:14:17] [PASSED] Shared buffer object
[08:14:17] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[08:14:17] ============== ttm_bo_init_reserved_mock_man ==============
[08:14:17] [PASSED] Buffer object for userspace
[08:14:17] [PASSED] Kernel buffer object
[08:14:17] [PASSED] Shared buffer object
[08:14:17] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[08:14:17] [PASSED] ttm_bo_init_reserved_resv
[08:14:17] ================== ttm_bo_validate_basic ==================
[08:14:17] [PASSED] Buffer object for userspace
[08:14:17] [PASSED] Kernel buffer object
[08:14:17] [PASSED] Shared buffer object
[08:14:17] ============== [PASSED] ttm_bo_validate_basic ==============
[08:14:17] [PASSED] ttm_bo_validate_invalid_placement
[08:14:17] ============= ttm_bo_validate_same_placement ==============
[08:14:17] [PASSED] System manager
[08:14:17] [PASSED] VRAM manager
[08:14:17] ========= [PASSED] ttm_bo_validate_same_placement ==========
[08:14:17] [PASSED] ttm_bo_validate_failed_alloc
[08:14:17] [PASSED] ttm_bo_validate_pinned
[08:14:17] [PASSED] ttm_bo_validate_busy_placement
[08:14:17] ================ ttm_bo_validate_multihop =================
[08:14:17] [PASSED] Buffer object for userspace
[08:14:17] [PASSED] Kernel buffer object
[08:14:17] [PASSED] Shared buffer object
[08:14:17] ============ [PASSED] ttm_bo_validate_multihop =============
[08:14:17] ========== ttm_bo_validate_no_placement_signaled ==========
[08:14:17] [PASSED] Buffer object in system domain, no page vector
[08:14:17] [PASSED] Buffer object in system domain with an existing page vector
[08:14:17] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[08:14:17] ======== ttm_bo_validate_no_placement_not_signaled ========
[08:14:17] [PASSED] Buffer object for userspace
[08:14:17] [PASSED] Kernel buffer object
[08:14:17] [PASSED] Shared buffer object
[08:14:17] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[08:14:17] [PASSED] ttm_bo_validate_move_fence_signaled
[08:14:17] ========= ttm_bo_validate_move_fence_not_signaled =========
[08:14:17] [PASSED] Waits for GPU
[08:14:17] [PASSED] Tries to lock straight away
[08:14:17] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[08:14:17] [PASSED] ttm_bo_validate_swapout
[08:14:17] [PASSED] ttm_bo_validate_happy_evict
[08:14:17] [PASSED] ttm_bo_validate_all_pinned_evict
[08:14:17] [PASSED] ttm_bo_validate_allowed_only_evict
[08:14:17] [PASSED] ttm_bo_validate_deleted_evict
[08:14:17] [PASSED] ttm_bo_validate_busy_domain_evict
[08:14:17] [PASSED] ttm_bo_validate_evict_gutting
[08:14:17] [PASSED] ttm_bo_validate_recrusive_evict
[08:14:17] ================= [PASSED] ttm_bo_validate =================
[08:14:17] ============================================================
[08:14:17] Testing complete. Ran 106 tests: passed: 106
[08:14:17] Elapsed time: 12.109s total, 1.788s configuring, 10.105s building, 0.186s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/dma-buf/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[08:14:17] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[08:14:19] 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
[08:14:27] Starting KUnit Kernel (1/1)...
[08:14:27] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[08:14:27] ============= refcount_interrupt (4 subtests) ==============
[08:14:27] [PASSED] test_single_irq_change
[08:14:27] [PASSED] test_nested_irq_change
[08:14:27] [PASSED] test_multiple_irq_change
[08:14:27] [PASSED] test_irq_save
[08:14:27] =============== [PASSED] refcount_interrupt ================
[08:14:27] =============== dma-buf-fence (12 subtests) ================
[08:14:27] [PASSED] test_sanitycheck
[08:14:27] [PASSED] test_signaling
[08:14:27] [PASSED] test_add_callback
[08:14:27] [PASSED] test_late_add_callback
[08:14:27] [PASSED] test_rm_callback
[08:14:27] [PASSED] test_late_rm_callback
[08:14:27] [PASSED] test_status
[08:14:27] [PASSED] test_error
[08:14:27] [PASSED] test_wait
[08:14:27] [PASSED] test_wait_timeout
[08:14:27] [PASSED] test_stub
[08:14:27] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[08:14:27] ================== [PASSED] dma-buf-fence ==================
[08:14:27] ============ dma-buf-fence-chain (11 subtests) =============
[08:14:27] [PASSED] test_sanitycheck
[08:14:27] [PASSED] test_find_seqno
[08:14:27] [PASSED] test_find_signaled
[08:14:27] [PASSED] test_find_out_of_order
[08:14:32] [PASSED] test_find_gap
[08:14:32] [PASSED] test_find_race
[08:14:32] [PASSED] test_signal_forward
[08:14:33] [PASSED] test_signal_backward
[08:14:33] [PASSED] test_wait_forward
[08:14:33] [PASSED] test_wait_backward
[08:14:33] [PASSED] test_wait_random
[08:14:33] =============== [PASSED] dma-buf-fence-chain ===============
[08:14:33] ============ dma-buf-fence-unwrap (10 subtests) ============
[08:14:33] [PASSED] test_sanitycheck
[08:14:33] [PASSED] test_unwrap_array
[08:14:33] [PASSED] test_unwrap_chain
[08:14:33] [PASSED] test_unwrap_chain_array
[08:14:33] [PASSED] test_unwrap_merge
[08:14:33] [PASSED] test_unwrap_merge_duplicate
[08:14:33] [PASSED] test_unwrap_merge_seqno
[08:14:33] [PASSED] test_unwrap_merge_order
[08:14:33] [PASSED] test_unwrap_merge_complex
[08:14:33] [PASSED] test_unwrap_merge_complex_seqno
[08:14:33] ============== [PASSED] dma-buf-fence-unwrap ===============
[08:14:33] ================ dma-buf-resv (5 subtests) =================
[08:14:33] [PASSED] test_sanitycheck
[08:14:33] ===================== test_signaling ======================
[08:14:33] [PASSED] kernel
[08:14:33] [PASSED] write
[08:14:33] [PASSED] read
[08:14:33] [PASSED] bookkeep
[08:14:33] ================= [PASSED] test_signaling ==================
[08:14:33] ====================== test_for_each ======================
[08:14:33] [PASSED] kernel
[08:14:33] [PASSED] write
[08:14:33] [PASSED] read
[08:14:33] [PASSED] bookkeep
[08:14:33] ================== [PASSED] test_for_each ==================
[08:14:33] ================= test_for_each_unlocked ==================
[08:14:33] [PASSED] kernel
[08:14:33] [PASSED] write
[08:14:33] [PASSED] read
[08:14:33] [PASSED] bookkeep
[08:14:33] ============= [PASSED] test_for_each_unlocked ==============
[08:14:33] ===================== test_get_fences =====================
[08:14:33] [PASSED] kernel
[08:14:33] [PASSED] write
[08:14:33] [PASSED] read
[08:14:33] [PASSED] bookkeep
[08:14:33] ================= [PASSED] test_get_fences =================
[08:14:33] ================== [PASSED] dma-buf-resv ===================
[08:14:33] ============================================================
[08:14:33] Testing complete. Ran 54 tests: passed: 53, skipped: 1
[08:14:33] Elapsed time: 15.726s total, 1.820s configuring, 8.584s building, 5.274s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 11+ messages in thread
* ✓ Xe.CI.BAT: success for drm, drm/xe: Protect against premature module unloads (rev2)
2026-09-24 8:04 [PATCH v2 0/3] drm, drm/xe: Protect against premature module unloads Thomas Hellström
` (3 preceding siblings ...)
2026-09-24 8:14 ` ✓ CI.KUnit: success for drm, drm/xe: Protect against premature module unloads (rev2) Patchwork
@ 2026-09-24 9:04 ` Patchwork
2026-09-24 22:28 ` ✓ Xe.CI.FULL: " Patchwork
5 siblings, 0 replies; 11+ messages in thread
From: Patchwork @ 2026-09-24 9:04 UTC (permalink / raw)
To: Thomas Hellström; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 1504 bytes --]
== Series Details ==
Series: drm, drm/xe: Protect against premature module unloads (rev2)
URL : https://patchwork.freedesktop.org/series/174805/
State : success
== Summary ==
CI Bug Log - changes from xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f_BAT -> xe-pw-174805v2_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (15 -> 14)
------------------------------
Missing (1): bat-bmg-vm
Known issues
------------
Here are the changes found in xe-pw-174805v2_BAT that come from known issues:
### IGT changes ###
#### Possible fixes ####
* igt@xe_waitfence@engine:
- bat-ptl-2: [FAIL][1] ([Intel XE#9109]) -> [PASS][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/bat-ptl-2/igt@xe_waitfence@engine.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/bat-ptl-2/igt@xe_waitfence@engine.html
[Intel XE#9109]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9109
Build changes
-------------
* Linux: xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f -> xe-pw-174805v2
IGT_9111: 4aeabf104b136437d0ccc57caf32a752587d595c @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f: 1a702d79afe36153e37dd9784fde95f9f86ea03f
xe-pw-174805v2: 174805v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/index.html
[-- Attachment #2: Type: text/html, Size: 2069 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 1/3] drm: Provide a drm_dev_release_barrier() function to wait for device release callbacks
2026-09-24 8:04 ` [PATCH v2 1/3] drm: Provide a drm_dev_release_barrier() function to wait for device release callbacks Thomas Hellström
@ 2026-09-24 11:19 ` Christian König
2026-09-24 13:10 ` Thomas Hellström
0 siblings, 1 reply; 11+ messages in thread
From: Christian König @ 2026-09-24 11:19 UTC (permalink / raw)
To: Thomas Hellström, intel-xe
Cc: Matthew Brost, Rodrigo Vivi, Matthew Auld, dri-devel,
Danilo Krummrich, Alice Ryhl, Alex Deucher
On 9/24/26 10:04, Thomas Hellström wrote:
> Driver and drm helper code is increasingly relying on holding a bare
> &drm_device reference (drm_dev_get()) without also holding a module
> reference on the module that created the device.
>
> For example drm_gpuvm_init() takes a drm_dev_get() reference on the
> &drm_gpuvm's behalf with no accompanying module reference at all, and
> drm_gpuvm_free() later calls the driver-supplied gpuvm->ops->vm_free()
> callback, which lives in the driver module, before dropping that
> reference. xe also takes bare drm_device references itself from
> several asynchronous contexts, such as GuC submission fence workers,
> EU stall, OA and PMU sampling code, relying only on those references
> being dropped before the underlying xe_device, and eventually the
> driver module, can be torn down.
>
> If the module that created such a device is unloaded while one of
> these bare references is still outstanding, and the corresponding
> drm_dev_put() only completes after the module has already been
> removed, the driver's ->release() callback, any drm managed release
> actions, or a driver callback such as gpuvm->ops->vm_free(), all of
> which live in that module's, by then freed, code, can end up being
> invoked out of memory that no longer contains valid code.
>
> Requiring every one of these bare drm_device references to also take a
> module reference, as drm_pagemap does today via try_module_get(),
> doesn't scale to shared helpers and driver-internal code with many
> call sites, and is easy to get wrong.
>
> Fix this properly by letting drivers keep a drm device-count and
> ensure the module isn't unloaded until that count has dropped to zero
> and until any release callback that had already started executing has
> also finished executing.
>
> To help with the latter, add a drm_dev_release_barrier() function.
> The function ensures that any caller that has started executing
> device release callbacks has also finished executing them.
>
> Use SRCU for the implementation.
>
> Rather than a single SRCU domain shared by all drivers, which would
> mean drm_dev_release_barrier() could unnecessarily block a driver's
> module unload on unrelated drivers' release callbacks, require each
> driver that wants to use drm_dev_release_barrier() to supply its own
> SRCU domain via a new &drm_driver.release_srcu field. Drivers should
> define a static SRCU domain (DEFINE_STATIC_SRCU()) and set this field
> to point at it. Leaving the field unset means @release and drm managed
> release actions for that driver's devices simply aren't synchronized
> against, and calling drm_dev_release_barrier() for such a driver is a
> no-op that triggers a warning.
That sounds like overkill to me.
I mean I can understand that you don't want to use RCU, but a single static SRCU for the DRM subsystem should pretty do the trick.
Regards,
Christian.
>
> Since &drm_driver.release_srcu is a new field, every existing struct
> drm_driver instance in the tree was scanned to confirm none of them
> would leave it uninitialized with indeterminate content. All in-tree
> instances have static storage duration (plain or const static
> file-scope objects), or are members of a KUnit test fixture zeroed via
> kunit_kzalloc(); no instance is stack-allocated or heap-allocated
> without zeroing. Objects with static storage duration are guaranteed
> by the C standard to have any member without an explicit initializer
> zero-initialized, so the new field is reliably NULL, and
> drm_dev_release() simply skips the SRCU critical section, for all
> drivers that don't set it.
>
> v2:
> - Use plain WARN_ON_ONCE() instead of drm_WARN_ON_ONCE(NULL, ...) in
> drm_dev_release_barrier(), since passing a NULL drm_device caused
> the warning path itself to dereference that NULL pointer inside
> dev_driver_string()/dev_name() (sashiko)
>
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Assisted-by: LLM
> ---
> drivers/gpu/drm/drm_drv.c | 56 +++++++++++++++++++++++++++++++++++++++
> include/drm/drm_drv.h | 24 +++++++++++++++++
> 2 files changed, 80 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
> index 0cdc606af8d1..32a03170383c 100644
> --- a/drivers/gpu/drm/drm_drv.c
> +++ b/drivers/gpu/drm/drm_drv.c
> @@ -921,18 +921,57 @@ EXPORT_SYMBOL(drm_dev_alloc);
> static void drm_dev_release(struct kref *ref)
> {
> struct drm_device *dev = container_of(ref, struct drm_device, ref);
> + struct srcu_struct *srcu = dev->driver->release_srcu;
> + int idx = -1;
>
> /* Just in case register/unregister was never called */
> drm_debugfs_dev_fini(dev);
>
> + if (srcu)
> + idx = srcu_read_lock(srcu);
> +
> if (dev->driver->release)
> dev->driver->release(dev);
>
> drm_managed_release(dev);
>
> + if (srcu)
> + srcu_read_unlock(srcu, idx);
> +
> kfree(dev->managed.final_kfree);
> }
>
> +/**
> + * drm_dev_release_barrier() - Ensure drm device release callbacks are finished
> + * @driver: driver whose release callbacks to wait for
> + *
> + * If a device release method or any of the drm managed release callbacks
> + * have been called for a device created with @driver, wait until all of
> + * them have finished executing. This function can be used to help determine
> + * whether it's safe to unload a driver module.
> + *
> + * Assume for example the driver maintains a device count which is decremented
> + * using a drmm callback or a device release callback. From a drm device
> + * lifetime POV, it's then safe to unload the driver when that device-count
> + * has reached zero and drm_dev_release_barrier() has been called.
> + *
> + * @driver must have &drm_driver.release_srcu set to a driver-owned
> + * &struct srcu_struct for this function to have anything to wait for.
> + *
> + * This function only waits for the &drm_driver.release callback and drm
> + * managed release actions to finish. It does not, by itself, guarantee that
> + * whoever called drm_dev_put() to drop the reference triggering that release
> + * has itself finished running. See drm_dev_put() for that invariant.
> + */
> +void drm_dev_release_barrier(const struct drm_driver *driver)
> +{
> + if (WARN_ON_ONCE(!driver || !driver->release_srcu))
> + return;
> +
> + synchronize_srcu(driver->release_srcu);
> +}
> +EXPORT_SYMBOL(drm_dev_release_barrier);
> +
> /**
> * drm_dev_get - Take reference of a DRM device
> * @dev: device to take reference of or NULL
> @@ -958,6 +997,23 @@ EXPORT_SYMBOL(drm_dev_get);
> *
> * This decreases the ref-count of @dev by one. The device is destroyed if the
> * ref-count drops to zero.
> + *
> + * If this call may drop the last reference, the calling code itself is
> + * responsible for ensuring it isn't unloaded (for example as part of a
> + * module) before this call has returned. This matters in particular for
> + * drivers relying on drm_dev_release_barrier() to determine when it's safe to
> + * unload, since that function only waits for the &drm_driver.release
> + * callback and drm managed release actions to finish, not for whoever calls
> + * drm_dev_put() to finish calling it.
> + *
> + * A common case is dropping the last reference from a deferred context, such
> + * as a workqueue item. In that case it's the responsibility of whoever
> + * queued that work item to guarantee it has run to completion before the
> + * module can unload, for example by draining a module-lifetime workqueue at
> + * module exit time. Holding a module reference only until the work item
> + * starts running is insufficient: that reference would already be dropped
> + * before this call runs, even though this call is what may still need the
> + * module's code to remain resident.
> */
> void drm_dev_put(struct drm_device *dev)
> {
> diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
> index b23830494ed4..30bb8727a896 100644
> --- a/include/drm/drm_drv.h
> +++ b/include/drm/drm_drv.h
> @@ -48,6 +48,7 @@ struct drm_display_mode;
> struct drm_mode_create_dumb;
> struct drm_printer;
> struct sg_table;
> +struct srcu_struct;
>
> /**
> * enum drm_driver_feature - feature flags
> @@ -255,6 +256,28 @@ struct drm_driver {
> */
> void (*release) (struct drm_device *);
>
> + /**
> + * @release_srcu:
> + *
> + * Optional driver-owned SRCU domain used to synchronize completion of
> + * the @release callback and drm managed release actions with
> + * drm_dev_release_barrier().
> + *
> + * Left unset, @release and drm managed release actions for this
> + * driver's devices aren't synchronized with drm_dev_release_barrier()
> + * at all, and calling drm_dev_release_barrier() for this driver is a
> + * no-op that triggers a warning.
> + *
> + * Drivers that want to use drm_dev_release_barrier(), for example to
> + * help determine when it's safe to unload the driver module, should
> + * define their own static SRCU domain (DEFINE_STATIC_SRCU()) and set
> + * this field to point at it. Each driver should use its own domain,
> + * so that drm_dev_release_barrier() only waits for that driver's own
> + * release callbacks, rather than also for unrelated drivers sharing
> + * the same domain.
> + */
> + struct srcu_struct *release_srcu;
> +
> /**
> * @master_set:
> *
> @@ -485,6 +508,7 @@ void drm_dev_exit(int idx);
> 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);
> +void drm_dev_release_barrier(const struct drm_driver *driver);
>
> /**
> * drm_dev_is_unplugged - is a DRM device unplugged
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 1/3] drm: Provide a drm_dev_release_barrier() function to wait for device release callbacks
2026-09-24 11:19 ` Christian König
@ 2026-09-24 13:10 ` Thomas Hellström
0 siblings, 0 replies; 11+ messages in thread
From: Thomas Hellström @ 2026-09-24 13:10 UTC (permalink / raw)
To: Christian König, intel-xe
Cc: Matthew Brost, Rodrigo Vivi, Matthew Auld, dri-devel,
Danilo Krummrich, Alice Ryhl, Alex Deucher
On Thu, 2026-09-24 at 13:19 +0200, Christian König wrote:
> On 9/24/26 10:04, Thomas Hellström wrote:
> > Driver and drm helper code is increasingly relying on holding a
> > bare
> > &drm_device reference (drm_dev_get()) without also holding a module
> > reference on the module that created the device.
> >
> > For example drm_gpuvm_init() takes a drm_dev_get() reference on the
> > &drm_gpuvm's behalf with no accompanying module reference at all,
> > and
> > drm_gpuvm_free() later calls the driver-supplied gpuvm->ops-
> > >vm_free()
> > callback, which lives in the driver module, before dropping that
> > reference. xe also takes bare drm_device references itself from
> > several asynchronous contexts, such as GuC submission fence
> > workers,
> > EU stall, OA and PMU sampling code, relying only on those
> > references
> > being dropped before the underlying xe_device, and eventually the
> > driver module, can be torn down.
> >
> > If the module that created such a device is unloaded while one of
> > these bare references is still outstanding, and the corresponding
> > drm_dev_put() only completes after the module has already been
> > removed, the driver's ->release() callback, any drm managed release
> > actions, or a driver callback such as gpuvm->ops->vm_free(), all of
> > which live in that module's, by then freed, code, can end up being
> > invoked out of memory that no longer contains valid code.
> >
> > Requiring every one of these bare drm_device references to also
> > take a
> > module reference, as drm_pagemap does today via try_module_get(),
> > doesn't scale to shared helpers and driver-internal code with many
> > call sites, and is easy to get wrong.
> >
> > Fix this properly by letting drivers keep a drm device-count and
> > ensure the module isn't unloaded until that count has dropped to
> > zero
> > and until any release callback that had already started executing
> > has
> > also finished executing.
> >
> > To help with the latter, add a drm_dev_release_barrier() function.
> > The function ensures that any caller that has started executing
> > device release callbacks has also finished executing them.
> >
> > Use SRCU for the implementation.
> >
> > Rather than a single SRCU domain shared by all drivers, which would
> > mean drm_dev_release_barrier() could unnecessarily block a driver's
> > module unload on unrelated drivers' release callbacks, require each
> > driver that wants to use drm_dev_release_barrier() to supply its
> > own
> > SRCU domain via a new &drm_driver.release_srcu field. Drivers
> > should
> > define a static SRCU domain (DEFINE_STATIC_SRCU()) and set this
> > field
> > to point at it. Leaving the field unset means @release and drm
> > managed
> > release actions for that driver's devices simply aren't
> > synchronized
> > against, and calling drm_dev_release_barrier() for such a driver is
> > a
> > no-op that triggers a warning.
>
> That sounds like overkill to me.
>
> I mean I can understand that you don't want to use RCU, but a single
> static SRCU for the DRM subsystem should pretty do the trick.
Agreed. I'll change that in v3.
Thanks,
Thomas
>
> Regards,
> Christian.
>
> >
> > Since &drm_driver.release_srcu is a new field, every existing
> > struct
> > drm_driver instance in the tree was scanned to confirm none of them
> > would leave it uninitialized with indeterminate content. All in-
> > tree
> > instances have static storage duration (plain or const static
> > file-scope objects), or are members of a KUnit test fixture zeroed
> > via
> > kunit_kzalloc(); no instance is stack-allocated or heap-allocated
> > without zeroing. Objects with static storage duration are
> > guaranteed
> > by the C standard to have any member without an explicit
> > initializer
> > zero-initialized, so the new field is reliably NULL, and
> > drm_dev_release() simply skips the SRCU critical section, for all
> > drivers that don't set it.
> >
> > v2:
> > - Use plain WARN_ON_ONCE() instead of drm_WARN_ON_ONCE(NULL, ...)
> > in
> > drm_dev_release_barrier(), since passing a NULL drm_device caused
> > the warning path itself to dereference that NULL pointer inside
> > dev_driver_string()/dev_name() (sashiko)
> >
> > Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> > Assisted-by: LLM
> > ---
> > drivers/gpu/drm/drm_drv.c | 56
> > +++++++++++++++++++++++++++++++++++++++
> > include/drm/drm_drv.h | 24 +++++++++++++++++
> > 2 files changed, 80 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
> > index 0cdc606af8d1..32a03170383c 100644
> > --- a/drivers/gpu/drm/drm_drv.c
> > +++ b/drivers/gpu/drm/drm_drv.c
> > @@ -921,18 +921,57 @@ EXPORT_SYMBOL(drm_dev_alloc);
> > static void drm_dev_release(struct kref *ref)
> > {
> > struct drm_device *dev = container_of(ref, struct
> > drm_device, ref);
> > + struct srcu_struct *srcu = dev->driver->release_srcu;
> > + int idx = -1;
> >
> > /* Just in case register/unregister was never called */
> > drm_debugfs_dev_fini(dev);
> >
> > + if (srcu)
> > + idx = srcu_read_lock(srcu);
> > +
> > if (dev->driver->release)
> > dev->driver->release(dev);
> >
> > drm_managed_release(dev);
> >
> > + if (srcu)
> > + srcu_read_unlock(srcu, idx);
> > +
> > kfree(dev->managed.final_kfree);
> > }
> >
> > +/**
> > + * drm_dev_release_barrier() - Ensure drm device release callbacks
> > are finished
> > + * @driver: driver whose release callbacks to wait for
> > + *
> > + * If a device release method or any of the drm managed release
> > callbacks
> > + * have been called for a device created with @driver, wait until
> > all of
> > + * them have finished executing. This function can be used to help
> > determine
> > + * whether it's safe to unload a driver module.
> > + *
> > + * Assume for example the driver maintains a device count which is
> > decremented
> > + * using a drmm callback or a device release callback. From a drm
> > device
> > + * lifetime POV, it's then safe to unload the driver when that
> > device-count
> > + * has reached zero and drm_dev_release_barrier() has been called.
> > + *
> > + * @driver must have &drm_driver.release_srcu set to a driver-
> > owned
> > + * &struct srcu_struct for this function to have anything to wait
> > for.
> > + *
> > + * This function only waits for the &drm_driver.release callback
> > and drm
> > + * managed release actions to finish. It does not, by itself,
> > guarantee that
> > + * whoever called drm_dev_put() to drop the reference triggering
> > that release
> > + * has itself finished running. See drm_dev_put() for that
> > invariant.
> > + */
> > +void drm_dev_release_barrier(const struct drm_driver *driver)
> > +{
> > + if (WARN_ON_ONCE(!driver || !driver->release_srcu))
> > + return;
> > +
> > + synchronize_srcu(driver->release_srcu);
> > +}
> > +EXPORT_SYMBOL(drm_dev_release_barrier);
> > +
> > /**
> > * drm_dev_get - Take reference of a DRM device
> > * @dev: device to take reference of or NULL
> > @@ -958,6 +997,23 @@ EXPORT_SYMBOL(drm_dev_get);
> > *
> > * This decreases the ref-count of @dev by one. The device is
> > destroyed if the
> > * ref-count drops to zero.
> > + *
> > + * If this call may drop the last reference, the calling code
> > itself is
> > + * responsible for ensuring it isn't unloaded (for example as part
> > of a
> > + * module) before this call has returned. This matters in
> > particular for
> > + * drivers relying on drm_dev_release_barrier() to determine when
> > it's safe to
> > + * unload, since that function only waits for the
> > &drm_driver.release
> > + * callback and drm managed release actions to finish, not for
> > whoever calls
> > + * drm_dev_put() to finish calling it.
> > + *
> > + * A common case is dropping the last reference from a deferred
> > context, such
> > + * as a workqueue item. In that case it's the responsibility of
> > whoever
> > + * queued that work item to guarantee it has run to completion
> > before the
> > + * module can unload, for example by draining a module-lifetime
> > workqueue at
> > + * module exit time. Holding a module reference only until the
> > work item
> > + * starts running is insufficient: that reference would already be
> > dropped
> > + * before this call runs, even though this call is what may still
> > need the
> > + * module's code to remain resident.
> > */
> > void drm_dev_put(struct drm_device *dev)
> > {
> > diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
> > index b23830494ed4..30bb8727a896 100644
> > --- a/include/drm/drm_drv.h
> > +++ b/include/drm/drm_drv.h
> > @@ -48,6 +48,7 @@ struct drm_display_mode;
> > struct drm_mode_create_dumb;
> > struct drm_printer;
> > struct sg_table;
> > +struct srcu_struct;
> >
> > /**
> > * enum drm_driver_feature - feature flags
> > @@ -255,6 +256,28 @@ struct drm_driver {
> > */
> > void (*release) (struct drm_device *);
> >
> > + /**
> > + * @release_srcu:
> > + *
> > + * Optional driver-owned SRCU domain used to synchronize
> > completion of
> > + * the @release callback and drm managed release actions
> > with
> > + * drm_dev_release_barrier().
> > + *
> > + * Left unset, @release and drm managed release actions
> > for this
> > + * driver's devices aren't synchronized with
> > drm_dev_release_barrier()
> > + * at all, and calling drm_dev_release_barrier() for this
> > driver is a
> > + * no-op that triggers a warning.
> > + *
> > + * Drivers that want to use drm_dev_release_barrier(), for
> > example to
> > + * help determine when it's safe to unload the driver
> > module, should
> > + * define their own static SRCU domain
> > (DEFINE_STATIC_SRCU()) and set
> > + * this field to point at it. Each driver should use its
> > own domain,
> > + * so that drm_dev_release_barrier() only waits for that
> > driver's own
> > + * release callbacks, rather than also for unrelated
> > drivers sharing
> > + * the same domain.
> > + */
> > + struct srcu_struct *release_srcu;
> > +
> > /**
> > * @master_set:
> > *
> > @@ -485,6 +508,7 @@ void drm_dev_exit(int idx);
> > 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);
> > +void drm_dev_release_barrier(const struct drm_driver *driver);
> >
> > /**
> > * drm_dev_is_unplugged - is a DRM device unplugged
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 3/3] drm/xe: Route deferred xe_vma/xe_vm teardown off system_dfl_wq
2026-09-24 8:04 ` [PATCH v2 3/3] drm/xe: Route deferred xe_vma/xe_vm teardown off system_dfl_wq Thomas Hellström
@ 2026-09-24 20:55 ` Matthew Brost
0 siblings, 0 replies; 11+ messages in thread
From: Matthew Brost @ 2026-09-24 20:55 UTC (permalink / raw)
To: Thomas Hellström
Cc: intel-xe, Rodrigo Vivi, Matthew Auld, dri-devel, Danilo Krummrich,
Alice Ryhl, Alex Deucher, Christian König
On Thu, Sep 24, 2026 at 10:04:55AM +0200, Thomas Hellström wrote:
> xe_vma_destroy() can defer the final teardown of a struct xe_vma to a
> dma_fence completion callback (vma_destroy_cb()), and xe_vm_free() (the
> drm_gpuvm_ops.vm_free callback) always defers struct xe_vm teardown to
> a work item, since destroying a VM needs to sleep. Both used to queue
> their work on system_dfl_wq, a global, kernel-wide workqueue that xe
> has no control over and never waits on during module unload.
>
> drm_gpuvm_free() drops its drm_device reference immediately after
> calling xe_vm_free(), without waiting for the deferred work to run.
> The same applies one level down: whichever xe_vma or xe_vm reference
> happens to be the last one can trigger this chain from a dma_fence
> callback that may fire at an arbitrary time, including after the
> owning file has already been closed and its own module reference
> dropped. Since nothing tracks or waits for work queued on
> system_dfl_wq, `rmmod xe` could succeed and free the module's text
> while vma_destroy_work_func() or vm_destroy_work_func() is still
> queued or running on it, jumping into freed code.
>
> Fix this by queueing this work on xe_destroy_wq instead, the existing
> module-lifetime workqueue already used for GuC exec queue teardown.
> Unlike a per-device workqueue, this requires no dereference of a
> struct xe_device that may already be gone by the time a deferred
> callback fires, and unlike system_dfl_wq it is guaranteed to be
> drained by xe_destroy_wq_module_exit() before the module is unloaded,
> following the drm_pagemap_dev_hold()/unhold_work precedent of using a
> workqueue that is waited on at module unload rather than a bare module
> reference. The previous commit's reordering of xe_destroy_wq_exit()
> to run after xe_device_exit() guarantees that xe_destroy_wq is only
> torn down once the device-count has reached zero, i.e. after any
> xe_vma or xe_vm whose teardown queues work here has already dropped
> its drm_device reference and thus already queued that work.
>
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
> Assisted-by: LLM
> ---
> drivers/gpu/drm/xe/xe_module.c | 6 ++++--
> drivers/gpu/drm/xe/xe_vm.c | 5 +++--
> 2 files changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_module.c b/drivers/gpu/drm/xe/xe_module.c
> index c61bd33546f2..897724cb5cfb 100644
> --- a/drivers/gpu/drm/xe/xe_module.c
> +++ b/drivers/gpu/drm/xe/xe_module.c
> @@ -114,8 +114,10 @@ static void xe_destroy_wq_module_exit(void)
> * xe_destroy_wq_queue() - Queue work on the destroy workqueue
> * @work: work item to queue
> *
> - * The destroy workqueue has module lifetime and is used for GuC exec queue
> - * teardown that can outlive a single xe_device. SVM pagemap destroy uses the
> + * The destroy workqueue has module lifetime, and is guaranteed to outlive
> + * any xe_device, and to be drained before the module is unloaded. It is used
> + * for GuC exec queue and xe_vm/xe_vma teardown that can be deferred past the
> + * lifetime of the xe_device that triggered it. SVM pagemap destroy uses the
> * per-device xe->destroy_wq instead.
> *
> * Return: %true if @work was queued, %false if it was already pending.
> diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
> index 390da884c727..ee369e6c3b28 100644
> --- a/drivers/gpu/drm/xe/xe_vm.c
> +++ b/drivers/gpu/drm/xe/xe_vm.c
> @@ -29,6 +29,7 @@
> #include "xe_exec_queue.h"
> #include "xe_gt.h"
> #include "xe_migrate.h"
> +#include "xe_module.h"
> #include "xe_pagefault.h"
> #include "xe_pat.h"
> #include "xe_pm.h"
> @@ -1249,7 +1250,7 @@ static void vma_destroy_cb(struct dma_fence *fence,
> struct xe_vma *vma = container_of(cb, struct xe_vma, destroy_cb);
>
> INIT_WORK(&vma->destroy_work, vma_destroy_work_func);
> - queue_work(system_dfl_wq, &vma->destroy_work);
> + xe_destroy_wq_queue(&vma->destroy_work);
> }
>
> static void xe_vm_assert_write_mode_or_garbage_collector(struct xe_vm *vm)
> @@ -2059,7 +2060,7 @@ static void xe_vm_free(struct drm_gpuvm *gpuvm)
> struct xe_vm *vm = container_of(gpuvm, struct xe_vm, gpuvm);
>
> /* To destroy the VM we need to be able to sleep */
> - queue_work(system_dfl_wq, &vm->destroy_work);
> + xe_destroy_wq_queue(&vm->destroy_work);
> }
>
> struct xe_vm *xe_vm_lookup(struct xe_file *xef, u32 id)
> --
> 2.55.0
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v2 2/3] drm/xe: Don't unload the driver until all drm devices are freed
2026-09-24 8:04 ` [PATCH v2 2/3] drm/xe: Don't unload the driver until all drm devices are freed Thomas Hellström
@ 2026-09-24 21:00 ` Matthew Brost
0 siblings, 0 replies; 11+ messages in thread
From: Matthew Brost @ 2026-09-24 21:00 UTC (permalink / raw)
To: Thomas Hellström
Cc: intel-xe, Rodrigo Vivi, Matthew Auld, dri-devel, Danilo Krummrich,
Alice Ryhl, Alex Deucher, Christian König
On Thu, Sep 24, 2026 at 10:04:54AM +0200, Thomas Hellström wrote:
> xe, and shared helpers it uses such as drm_gpuvm, already take bare
> drm_device references (drm_dev_get()) from several contexts, for
> example GuC submission fence workers, EU stall, OA and PMU sampling
> code, and drm_gpuvm's own vm object lifetime, without pairing them
> with a module reference. Since xe_exit() is only invoked after the
> module's own refcount has dropped to zero, none of these references
> currently prevent `rmmod xe` from proceeding while they, or the
> underlying xe_device release path they can trigger, are still
> outstanding, i.e. driver code belonging to a module whose text is
> being freed could still end up executing.
>
> Close this gap by keeping a device-count and waiting for it to reach
> zero at module unload, then waiting for any release callback that has
> started executing to finish, using the drm_dev_release_barrier()
> infrastructure introduced in the previous commit.
>
> The wait for the device-count to reach zero at module unload is
> unbounded and non-interruptible. Rather than blocking silently forever
> if a reference is ever leaked, use wait_var_event_timeout() with a 20s
> timeout, well above the typical maximum dma_fence signalling time, and
> warn once if devices still remain by then, before falling back to an
> unbounded wait_var_event() so a stuck rmmod is at least observable
> instead of an indefinite, silent hang.
>
> Note that if a reference genuinely leaks, this still ends up as an
> indefinite uninterruptible sleep, which may eventually trip the
> kernel's hung-task watchdog. The alternative would be for these bare
> drm_device references to also take a module reference, which would
> instead make the module unable to be unloaded unless all its devices are
> manually unbound first. The wait-based approach is chosen here since it
> keeps rmmod usable in the common case.
>
> Register a driver-private SRCU domain via the new
> &drm_driver.release_srcu field on both xe drm_driver instances, and
> pass the driver to drm_dev_release_barrier(). This keeps xe's wait for
> its own release callbacks to complete from blocking on unrelated
> drivers' release paths.
>
> xe_device_exit() is added as a new module exit hook. Its entry in the
> init_funcs[] table is placed between xe_destroy_wq_module_init and
> xe_register_pci_driver, so that (exit functions run in reverse array
> order) it executes after xe_unregister_pci_driver() has forced all
> devices to unbind, but before xe_destroy_wq_module_exit() tears down
> the module-lifetime xe_destroy_wq. This preserves xe_destroy_wq's
> existing teardown ordering relative to xe_sched_job_module_exit() and
> xe_hw_fence_module_exit(), which destroy kmem_caches that work drained
> from xe_destroy_wq relies on, while ensuring xe_destroy_wq itself is
> only torn down once xe_device_exit() has confirmed no more work can be
> queued onto it.
>
> v2:
> - Updated commit message to describe the actual implementation (a
> single 20s wait_var_event_timeout() followed by one pr_warn() and an
> unbounded wait_var_event(), rather than a loop retrying with a
> diagnostic every 10s) and its uninterruptible-sleep tradeoff
> (sashiko)
>
> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Assisted-by: LLM
> ---
> drivers/gpu/drm/xe/xe_device.c | 42 ++++++++++++++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_device.h | 2 ++
> drivers/gpu/drm/xe/xe_module.c | 18 ++++++++++++++-
> 3 files changed, 61 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> index 205cb4e7f9e8..bfb1b482d83d 100644
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c
> @@ -8,6 +8,7 @@
> #include <linux/aperture.h>
> #include <linux/delay.h>
> #include <linux/fault-inject.h>
> +#include <linux/srcu.h>
> #include <linux/units.h>
>
> #include <drm/drm_client.h>
> @@ -311,6 +312,13 @@ bool xe_is_xe_file(const struct file *file)
> return file->f_op == &xe_driver_fops;
> }
>
> +/*
> + * Driver-owned SRCU domain used to synchronize completion of driver release
> + * callbacks with drm_dev_release_barrier(), so that xe_device_exit() doesn't
> + * have to wait on unrelated drivers' release paths.
> + */
> +DEFINE_STATIC_SRCU(xe_dev_release_srcu);
> +
> static const struct drm_driver regular_driver = {
> .driver_features =
> XE_DISPLAY_DRIVER_FEATURES |
> @@ -335,6 +343,7 @@ static const struct drm_driver regular_driver = {
> .major = DRIVER_MAJOR,
> .minor = DRIVER_MINOR,
> .patchlevel = DRIVER_PATCHLEVEL,
> + .release_srcu = &xe_dev_release_srcu,
> XE_DISPLAY_DRIVER_OPS,
> };
>
> @@ -357,6 +366,7 @@ static const struct drm_driver admin_only_driver = {
> .major = DRIVER_MAJOR,
> .minor = DRIVER_MINOR,
> .patchlevel = DRIVER_PATCHLEVEL,
> + .release_srcu = &xe_dev_release_srcu,
> };
I think everything above here will get moved to a DRM gloval srcu per
Christian's feedback?
Assuming the just dropped in favor of globlal
drm_dev_release_barrier(void), everything LGTM.
So feel free to carry this is in the next rev:
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
>
> /**
> @@ -372,6 +382,9 @@ bool xe_device_is_admin_only(const struct xe_device *xe)
> }
> #endif
>
> +/* Number of allocated struct xe_device */
> +static atomic_t xe_device_count;
> +
> static void xe_device_destroy(struct drm_device *dev, void *dummy)
> {
> struct xe_device *xe = to_xe_device(dev);
> @@ -391,6 +404,9 @@ static void xe_device_destroy(struct drm_device *dev, void *dummy)
> destroy_workqueue(xe->destroy_wq);
>
> ttm_device_fini(&xe->ttm);
> +
> + if (atomic_dec_and_test(&xe_device_count))
> + wake_up_var(&xe_device_count);
> }
>
> /**
> @@ -461,6 +477,7 @@ int xe_device_init_early(struct xe_device *xe)
> return err;
>
> xe_bo_dev_init(&xe->bo_device);
> + atomic_inc(&xe_device_count);
> err = drmm_add_action_or_reset(&xe->drm, xe_device_destroy, NULL);
> if (err)
> return err;
> @@ -1501,3 +1518,28 @@ struct xe_vm *xe_device_asid_to_vm(struct xe_device *xe, u32 asid)
>
> return vm;
> }
> +
> +/**
> + * xe_device_exit() - Device subsystem exit function.
> + *
> + * Exit function to be called at module unload time.
> + */
> +void xe_device_exit(void)
> +{
> + /*
> + * Wait for all devices to be freed. 20s is well above the typical
> + * maximum dma_fence signalling time, so warn and keep waiting if
> + * we're still not done by then, since it may indicate a leaked
> + * xe_device reference is stalling module unload.
> + */
> + if (!wait_var_event_timeout(&xe_device_count,
> + !atomic_read(&xe_device_count),
> + HZ * 20)) {
> + pr_warn("%s: Waiting for %d xe device(s) to be freed before unloading.\n",
> + DRIVER_NAME, atomic_read(&xe_device_count));
> + wait_var_event(&xe_device_count, !atomic_read(&xe_device_count));
> + }
> +
> + /* Wait for any driver release callbacks to complete */
> + drm_dev_release_barrier(®ular_driver);
> +}
> diff --git a/drivers/gpu/drm/xe/xe_device.h b/drivers/gpu/drm/xe/xe_device.h
> index 6d3d6d5eba29..83d6dafab53c 100644
> --- a/drivers/gpu/drm/xe/xe_device.h
> +++ b/drivers/gpu/drm/xe/xe_device.h
> @@ -283,6 +283,8 @@ static inline bool xe_device_is_admin_only(const struct xe_device *xe)
> }
> #endif
>
> +void xe_device_exit(void);
> +
> /*
> * Occasionally it is seen that the G2H worker starts running after a delay of more than
> * a second even after being queued and activated by the Linux workqueue subsystem. This
> diff --git a/drivers/gpu/drm/xe/xe_module.c b/drivers/gpu/drm/xe/xe_module.c
> index 4bc28dfc1992..c61bd33546f2 100644
> --- a/drivers/gpu/drm/xe/xe_module.c
> +++ b/drivers/gpu/drm/xe/xe_module.c
> @@ -12,7 +12,7 @@
> #include <drm/drm_module.h>
>
> #include "xe_defaults.h"
> -#include "xe_device_types.h"
> +#include "xe_device.h"
> #include "xe_drv.h"
> #include "xe_configfs.h"
> #include "xe_hw_fence.h"
> @@ -162,6 +162,22 @@ static const struct init_funcs init_funcs[] = {
> .init = xe_destroy_wq_module_init,
> .exit = xe_destroy_wq_module_exit,
> },
> + /*
> + * xe_destroy_wq_module_exit() must run after xe_device_exit()
> + * (below), since freeing a device can still queue work on
> + * xe_destroy_wq that must be drained before the module can safely
> + * unload. At the same time, xe_device_exit() must run after
> + * xe_unregister_pci_driver() (below), and xe_destroy_wq_module_exit()
> + * must run before xe_sched_job_module_exit() and
> + * xe_hw_fence_module_exit() (above), whose kmem_caches are still used
> + * by work drained from xe_destroy_wq. Exit functions run in reverse
> + * array order, so this entry must sit between the
> + * xe_destroy_wq_module_init entry above and the xe_register_pci_driver
> + * entry below.
> + */
> + {
> + .exit = xe_device_exit,
> + },
> {
> .init = xe_register_pci_driver,
> .exit = xe_unregister_pci_driver,
> --
> 2.55.0
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* ✓ Xe.CI.FULL: success for drm, drm/xe: Protect against premature module unloads (rev2)
2026-09-24 8:04 [PATCH v2 0/3] drm, drm/xe: Protect against premature module unloads Thomas Hellström
` (4 preceding siblings ...)
2026-09-24 9:04 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-09-24 22:28 ` Patchwork
5 siblings, 0 replies; 11+ messages in thread
From: Patchwork @ 2026-09-24 22:28 UTC (permalink / raw)
To: Thomas Hellström; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 63297 bytes --]
== Series Details ==
Series: drm, drm/xe: Protect against premature module unloads (rev2)
URL : https://patchwork.freedesktop.org/series/174805/
State : success
== Summary ==
CI Bug Log - changes from xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f_FULL -> xe-pw-174805v2_FULL
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (3 -> 3)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in xe-pw-174805v2_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@intel_hwmon@hwmon-write:
- shard-ptl: NOTRUN -> [SKIP][1] ([Intel XE#7225])
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@intel_hwmon@hwmon-write.html
* igt@kms_atomic_transition@plane-all-modeset-transition-fencing:
- shard-ptl: NOTRUN -> [SKIP][2] ([Intel XE#5947])
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_atomic_transition@plane-all-modeset-transition-fencing.html
* igt@kms_big_fb@4-tiled-16bpp-rotate-90:
- shard-ptl: NOTRUN -> [SKIP][3] ([Intel XE#5901])
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_big_fb@4-tiled-16bpp-rotate-90.html
* igt@kms_big_fb@4-tiled-8bpp-rotate-90:
- shard-bmg: NOTRUN -> [SKIP][4] ([Intel XE#2327])
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_big_fb@4-tiled-8bpp-rotate-90.html
* igt@kms_big_fb@x-tiled-16bpp-rotate-270:
- shard-ptl: NOTRUN -> [SKIP][5] ([Intel XE#5808]) +6 other tests skip
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_big_fb@x-tiled-16bpp-rotate-270.html
* igt@kms_big_fb@x-tiled-addfb:
- shard-ptl: NOTRUN -> [SKIP][6] ([Intel XE#5850])
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_big_fb@x-tiled-addfb.html
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip:
- shard-bmg: NOTRUN -> [SKIP][7] ([Intel XE#1124]) +6 other tests skip
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
* igt@kms_big_fb@yf-tiled-addfb-size-overflow:
- shard-bmg: NOTRUN -> [SKIP][8] ([Intel XE#610] / [Intel XE#7387])
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_big_fb@yf-tiled-addfb-size-overflow.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip:
- shard-lnl: NOTRUN -> [SKIP][9] ([Intel XE#1124])
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-2/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
* igt@kms_bw@connected-linear-tiling-4-displays-target-1920x1080p:
- shard-bmg: NOTRUN -> [SKIP][10] ([Intel XE#7679])
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@kms_bw@connected-linear-tiling-4-displays-target-1920x1080p.html
* igt@kms_bw@linear-tiling-1-displays-target-1920x1080p:
- shard-bmg: NOTRUN -> [SKIP][11] ([Intel XE#367]) +1 other test skip
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_bw@linear-tiling-1-displays-target-1920x1080p.html
* igt@kms_bw@linear-tiling-3-displays-target-1920x1080p:
- shard-ptl: NOTRUN -> [SKIP][12] ([Intel XE#367])
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_bw@linear-tiling-3-displays-target-1920x1080p.html
* igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs-cc:
- shard-bmg: NOTRUN -> [SKIP][13] ([Intel XE#2887]) +12 other tests skip
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-7/igt@kms_ccs@bad-rotation-90-y-tiled-gen12-rc-ccs-cc.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs-cc:
- shard-ptl: NOTRUN -> [SKIP][14] ([Intel XE#5822]) +4 other tests skip
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs-cc.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs:
- shard-bmg: NOTRUN -> [SKIP][15] ([Intel XE#3432]) +1 other test skip
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [SKIP][16] ([Intel XE#2652]) +8 other tests skip
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs@pipe-a-dp-2.html
* igt@kms_cdclk@mode-transition-all-outputs:
- shard-bmg: NOTRUN -> [SKIP][17] ([Intel XE#2724] / [Intel XE#7449])
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@kms_cdclk@mode-transition-all-outputs.html
* igt@kms_chamelium_audio@dp-audio:
- shard-ptl: NOTRUN -> [SKIP][18] ([Intel XE#2252]) +4 other tests skip
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_chamelium_audio@dp-audio.html
* igt@kms_chamelium_audio@dp-audio-edid:
- shard-bmg: NOTRUN -> [SKIP][19] ([Intel XE#2252]) +7 other tests skip
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_chamelium_audio@dp-audio-edid.html
* igt@kms_chamelium_color@ctm-0-50:
- shard-bmg: NOTRUN -> [SKIP][20] ([Intel XE#2325] / [Intel XE#7358])
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@kms_chamelium_color@ctm-0-50.html
* igt@kms_chamelium_color@ctm-max:
- shard-ptl: NOTRUN -> [SKIP][21] ([Intel XE#5824])
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@kms_chamelium_color@ctm-max.html
* igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4:
- shard-ptl: NOTRUN -> [SKIP][22] ([Intel XE#8391])
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_chamelium_color_pipeline@plane-lut1d-ctm3x4.html
* igt@kms_chamelium_color_pipeline@plane-lut1d-post-ctm3x4:
- shard-bmg: NOTRUN -> [SKIP][23] ([Intel XE#7358]) +1 other test skip
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-7/igt@kms_chamelium_color_pipeline@plane-lut1d-post-ctm3x4.html
* igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt601-lut1d@pipe-c-plane-1:
- shard-ptl: NOTRUN -> [FAIL][24] ([Intel XE#9333]) +12 other tests fail
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt601-lut1d@pipe-c-plane-1.html
* igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709@pipe-c-plane-1:
- shard-bmg: NOTRUN -> [FAIL][25] ([Intel XE#9333]) +16 other tests fail
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709@pipe-c-plane-1.html
* igt@kms_content_protection@dp-mst-lic-type-0-hdcp14:
- shard-bmg: NOTRUN -> [SKIP][26] ([Intel XE#6974])
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_content_protection@dp-mst-lic-type-0-hdcp14.html
* igt@kms_content_protection@dp-mst-lic-type-1:
- shard-bmg: NOTRUN -> [SKIP][27] ([Intel XE#2390] / [Intel XE#6974])
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@kms_content_protection@dp-mst-lic-type-1.html
* igt@kms_content_protection@dp-mst-type-0-hdcp14:
- shard-ptl: NOTRUN -> [SKIP][28] ([Intel XE#6974])
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_content_protection@dp-mst-type-0-hdcp14.html
* igt@kms_content_protection@lic-type-0-hdcp14@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [FAIL][29] ([Intel XE#1178] / [Intel XE#3304] / [Intel XE#7374]) +3 other tests fail
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-7/igt@kms_content_protection@lic-type-0-hdcp14@pipe-a-dp-2.html
* igt@kms_cursor_crc@cursor-offscreen-128x42:
- shard-bmg: NOTRUN -> [SKIP][30] ([Intel XE#2320]) +1 other test skip
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_cursor_crc@cursor-offscreen-128x42.html
* igt@kms_cursor_crc@cursor-onscreen-128x42:
- shard-ptl: NOTRUN -> [SKIP][31] ([Intel XE#5900]) +2 other tests skip
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@kms_cursor_crc@cursor-onscreen-128x42.html
* igt@kms_cursor_crc@cursor-random-512x170:
- shard-ptl: NOTRUN -> [SKIP][32] ([Intel XE#5846])
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@kms_cursor_crc@cursor-random-512x170.html
* igt@kms_cursor_crc@cursor-random-512x512:
- shard-bmg: NOTRUN -> [SKIP][33] ([Intel XE#2321] / [Intel XE#7355]) +2 other tests skip
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@kms_cursor_crc@cursor-random-512x512.html
* igt@kms_cursor_legacy@2x-cursor-vs-flip-legacy:
- shard-ptl: NOTRUN -> [SKIP][34] ([Intel XE#5962]) +2 other tests skip
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_cursor_legacy@2x-cursor-vs-flip-legacy.html
* igt@kms_dsc@dsc-basic:
- shard-ptl: NOTRUN -> [SKIP][35] ([Intel XE#5907])
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_dsc@dsc-basic.html
* igt@kms_dsc@dsc-fractional-bpp-bigjoiner:
- shard-bmg: NOTRUN -> [SKIP][36] ([Intel XE#8265]) +2 other tests skip
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@kms_dsc@dsc-fractional-bpp-bigjoiner.html
* igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-dirtyfb-tests:
- shard-bmg: NOTRUN -> [SKIP][37] ([Intel XE#4422] / [Intel XE#7442])
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-7/igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-dirtyfb-tests.html
* igt@kms_fbcon_fbt@fbc:
- shard-bmg: NOTRUN -> [SKIP][38] ([Intel XE#4156] / [Intel XE#7425])
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-7/igt@kms_fbcon_fbt@fbc.html
* igt@kms_feature_discovery@dsc:
- shard-ptl: NOTRUN -> [SKIP][39] ([Intel XE#9287])
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_feature_discovery@dsc.html
* igt@kms_flip@2x-flip-vs-dpms-on-nop:
- shard-lnl: NOTRUN -> [SKIP][40] ([Intel XE#1421])
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-2/igt@kms_flip@2x-flip-vs-dpms-on-nop.html
* igt@kms_flip@2x-flip-vs-rmfb-interruptible:
- shard-ptl: NOTRUN -> [SKIP][41] ([Intel XE#2316])
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_flip@2x-flip-vs-rmfb-interruptible.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling:
- shard-ptl: NOTRUN -> [SKIP][42] ([Intel XE#7178])
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling:
- shard-bmg: NOTRUN -> [SKIP][43] ([Intel XE#7178] / [Intel XE#7351])
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling.html
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-render:
- shard-lnl: NOTRUN -> [SKIP][44] ([Intel XE#656] / [Intel XE#7905])
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-2/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@drrs-argb161616f-draw-mmap-wc:
- shard-ptl: NOTRUN -> [SKIP][45] ([Intel XE#7061] / [Intel XE#7356]) +1 other test skip
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_frontbuffer_tracking@drrs-argb161616f-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-wc:
- shard-ptl: NOTRUN -> [SKIP][46] ([Intel XE#5800] / [Intel XE#6312]) +6 other tests skip
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-indfb-msflip-blt:
- shard-ptl: NOTRUN -> [SKIP][47] ([Intel XE#6312]) +6 other tests skip
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-indfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@drrshdr-2p-primscrn-cur-indfb-draw-render:
- shard-bmg: NOTRUN -> [SKIP][48] ([Intel XE#2311]) +47 other tests skip
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-7/igt@kms_frontbuffer_tracking@drrshdr-2p-primscrn-cur-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff:
- shard-bmg: NOTRUN -> [SKIP][49] ([Intel XE#4141]) +10 other tests skip
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-onoff.html
* igt@kms_frontbuffer_tracking@fbcdrrshdr-abgr161616f-draw-blt:
- shard-bmg: NOTRUN -> [SKIP][50] ([Intel XE#7061]) +2 other tests skip
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-7/igt@kms_frontbuffer_tracking@fbcdrrshdr-abgr161616f-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrshdr-tiling-y:
- shard-bmg: NOTRUN -> [SKIP][51] ([Intel XE#7399])
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_frontbuffer_tracking@fbcdrrshdr-tiling-y.html
* igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-pri-indfb-draw-render:
- shard-lnl: NOTRUN -> [SKIP][52] ([Intel XE#7905])
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-2/igt@kms_frontbuffer_tracking@fbcpsrhdr-2p-scndscrn-pri-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@hdr-1p-primscrn-pri-indfb-draw-blt:
- shard-ptl: NOTRUN -> [SKIP][53] ([Intel XE#7865]) +9 other tests skip
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-pri-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@hdr-2p-primscrn-cur-indfb-draw-mmap-wc:
- shard-ptl: NOTRUN -> [SKIP][54] ([Intel XE#5812]) +30 other tests skip
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_frontbuffer_tracking@hdr-2p-primscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-plflip-blt:
- shard-bmg: NOTRUN -> [SKIP][55] ([Intel XE#2313]) +45 other tests skip
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-plflip-blt.html
* igt@kms_frontbuffer_tracking@psr-argb161616f-draw-mmap-wc:
- shard-bmg: NOTRUN -> [SKIP][56] ([Intel XE#7061] / [Intel XE#7356]) +3 other tests skip
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_frontbuffer_tracking@psr-argb161616f-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@psrhdr-argb161616f-draw-blt:
- shard-ptl: NOTRUN -> [SKIP][57] ([Intel XE#7061]) +1 other test skip
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_frontbuffer_tracking@psrhdr-argb161616f-draw-blt.html
* igt@kms_hdr@static-toggle-suspend:
- shard-bmg: [PASS][58] -> [ABORT][59] ([Intel XE#9362]) +1 other test abort
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-bmg-3/igt@kms_hdr@static-toggle-suspend.html
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-8/igt@kms_hdr@static-toggle-suspend.html
* igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner:
- shard-bmg: NOTRUN -> [SKIP][60] ([Intel XE#4090] / [Intel XE#7443])
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@kms_joiner@switch-modeset-ultra-joiner-big-joiner.html
* igt@kms_mst@mst-suspend-read-crc:
- shard-ptl: NOTRUN -> [SKIP][61] ([Intel XE#8348])
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_mst@mst-suspend-read-crc.html
* igt@kms_pipe_stress@stress-xrgb8888-yftiled:
- shard-bmg: NOTRUN -> [SKIP][62] ([Intel XE#6912] / [Intel XE#7375])
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@kms_pipe_stress@stress-xrgb8888-yftiled.html
* igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier:
- shard-bmg: NOTRUN -> [SKIP][63] ([Intel XE#7283]) +1 other test skip
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier.html
* igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-cc-modifier:
- shard-ptl: NOTRUN -> [SKIP][64] ([Intel XE#7283])
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-cc-modifier.html
* igt@kms_plane_lowres@tiling-y:
- shard-ptl: NOTRUN -> [SKIP][65] ([Intel XE#5946])
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_plane_lowres@tiling-y.html
* igt@kms_plane_multiple@tiling-y:
- shard-ptl: NOTRUN -> [SKIP][66] ([Intel XE#5020])
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@kms_plane_multiple@tiling-y.html
* igt@kms_plane_multiple@tiling-yf:
- shard-bmg: NOTRUN -> [SKIP][67] ([Intel XE#5020] / [Intel XE#7348])
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@kms_plane_multiple@tiling-yf.html
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-b:
- shard-bmg: NOTRUN -> [SKIP][68] ([Intel XE#2763] / [Intel XE#6886]) +4 other tests skip
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-b.html
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75@pipe-d:
- shard-ptl: NOTRUN -> [SKIP][69] ([Intel XE#6886]) +9 other tests skip
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-75@pipe-d.html
* igt@kms_pm_backlight@basic-brightness:
- shard-bmg: NOTRUN -> [SKIP][70] ([Intel XE#7376] / [Intel XE#7760] / [Intel XE#870])
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_pm_backlight@basic-brightness.html
* igt@kms_pm_dc@dc5-psr:
- shard-bmg: NOTRUN -> [SKIP][71] ([Intel XE#7794])
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_pm_dc@dc5-psr.html
* igt@kms_pm_dc@dc5-retention-flops:
- shard-bmg: NOTRUN -> [SKIP][72] ([Intel XE#3309] / [Intel XE#7368])
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-7/igt@kms_pm_dc@dc5-retention-flops.html
* igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-fully-sf:
- shard-ptl: NOTRUN -> [SKIP][73] ([Intel XE#7304]) +1 other test skip
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-fully-sf.html
* igt@kms_psr2_sf@fbc-psr2-overlay-primary-update-sf-dmg-area:
- shard-ptl: NOTRUN -> [SKIP][74] ([Intel XE#5858] / [Intel XE#7304]) +1 other test skip
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@kms_psr2_sf@fbc-psr2-overlay-primary-update-sf-dmg-area.html
* igt@kms_psr2_sf@fbc-psr2-overlay-primary-update-sf-dmg-area@pipe-a-edp-1:
- shard-ptl: NOTRUN -> [SKIP][75] ([Intel XE#5858])
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@kms_psr2_sf@fbc-psr2-overlay-primary-update-sf-dmg-area@pipe-a-edp-1.html
* igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-sf:
- shard-bmg: NOTRUN -> [SKIP][76] ([Intel XE#1489]) +6 other tests skip
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-7/igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-sf.html
* igt@kms_psr2_su@frontbuffer-xrgb8888:
- shard-ptl: NOTRUN -> [SKIP][77] ([Intel XE#7413]) +1 other test skip
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_psr2_su@frontbuffer-xrgb8888.html
* igt@kms_psr@fbc-pr-no-drrs:
- shard-bmg: NOTRUN -> [SKIP][78] ([Intel XE#2234] / [Intel XE#2850]) +9 other tests skip
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_psr@fbc-pr-no-drrs.html
* igt@kms_psr@fbc-psr2-sprite-render:
- shard-ptl: NOTRUN -> [SKIP][79] ([Intel XE#1406] / [Intel XE#5835]) +1 other test skip
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_psr@fbc-psr2-sprite-render.html
* igt@kms_psr_stress_test@invalidate-primary-flip-overlay:
- shard-bmg: NOTRUN -> [SKIP][80] ([Intel XE#7795])
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@kms_psr_stress_test@invalidate-primary-flip-overlay.html
* igt@kms_rotation_crc@primary-y-tiled-reflect-x-0:
- shard-bmg: NOTRUN -> [SKIP][81] ([Intel XE#2330] / [Intel XE#5813])
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@kms_rotation_crc@primary-y-tiled-reflect-x-0.html
* igt@kms_setmode@basic-clone-single-crtc:
- shard-ptl: NOTRUN -> [SKIP][82] ([Intel XE#5910])
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@kms_setmode@basic-clone-single-crtc.html
* igt@kms_sharpness_filter@filter-scaler-downscale:
- shard-bmg: NOTRUN -> [SKIP][83] ([Intel XE#6503])
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@kms_sharpness_filter@filter-scaler-downscale.html
* igt@xe_ccs@suspend-resume@tile64-compressed-compfmt0-system-system:
- shard-ptl: [PASS][84] -> [ABORT][85] ([Intel XE#9362]) +6 other tests abort
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-3/igt@xe_ccs@suspend-resume@tile64-compressed-compfmt0-system-system.html
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-3/igt@xe_ccs@suspend-resume@tile64-compressed-compfmt0-system-system.html
* igt@xe_compute@ccs-mode-basic:
- shard-bmg: NOTRUN -> [SKIP][86] ([Intel XE#6599])
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@xe_compute@ccs-mode-basic.html
* igt@xe_evict@evict-threads-small:
- shard-ptl: NOTRUN -> [SKIP][87] ([Intel XE#5764]) +3 other tests skip
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@xe_evict@evict-threads-small.html
* igt@xe_evict_ccs@evict-overcommit-standalone-instantfree-reopen:
- shard-ptl: NOTRUN -> [SKIP][88] ([Intel XE#6144])
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@xe_evict_ccs@evict-overcommit-standalone-instantfree-reopen.html
* igt@xe_exec_balancer@no-exec-cm-parallel-userptr-rebind:
- shard-ptl: NOTRUN -> [SKIP][89] ([Intel XE#7482]) +6 other tests skip
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@xe_exec_balancer@no-exec-cm-parallel-userptr-rebind.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr:
- shard-bmg: NOTRUN -> [SKIP][90] ([Intel XE#2322] / [Intel XE#7372]) +7 other tests skip
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr.html
* igt@xe_exec_basic@multigpu-once-bindexecqueue-userptr-invalidate:
- shard-ptl: NOTRUN -> [SKIP][91] ([Intel XE#5575] / [Intel XE#7484]) +3 other tests skip
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@xe_exec_basic@multigpu-once-bindexecqueue-userptr-invalidate.html
* igt@xe_exec_fault_mode@many-execqueues-multi-queue-rebind-prefetch:
- shard-bmg: NOTRUN -> [SKIP][92] ([Intel XE#8374]) +11 other tests skip
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@xe_exec_fault_mode@many-execqueues-multi-queue-rebind-prefetch.html
* igt@xe_exec_fault_mode@twice-multi-queue-invalid-fault:
- shard-lnl: NOTRUN -> [SKIP][93] ([Intel XE#8374])
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-2/igt@xe_exec_fault_mode@twice-multi-queue-invalid-fault.html
* igt@xe_exec_fault_mode@twice-multi-queue-userptr-invalidate-race:
- shard-ptl: NOTRUN -> [SKIP][94] ([Intel XE#8374]) +7 other tests skip
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@xe_exec_fault_mode@twice-multi-queue-userptr-invalidate-race.html
* igt@xe_exec_multi_queue@many-queues-preempt-mode-userptr:
- shard-lnl: NOTRUN -> [SKIP][95] ([Intel XE#8364])
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-2/igt@xe_exec_multi_queue@many-queues-preempt-mode-userptr.html
* igt@xe_exec_multi_queue@max-queues-userptr:
- shard-ptl: NOTRUN -> [SKIP][96] ([Intel XE#8364]) +10 other tests skip
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@xe_exec_multi_queue@max-queues-userptr.html
* igt@xe_exec_multi_queue@two-queues-preempt-mode-basic-smem:
- shard-bmg: NOTRUN -> [SKIP][97] ([Intel XE#8364]) +22 other tests skip
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-7/igt@xe_exec_multi_queue@two-queues-preempt-mode-basic-smem.html
* igt@xe_exec_reset@cm-multi-queue-close-execqueues:
- shard-bmg: NOTRUN -> [SKIP][98] ([Intel XE#8369])
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@xe_exec_reset@cm-multi-queue-close-execqueues.html
* igt@xe_exec_reset@multi-queue-cancel:
- shard-ptl: NOTRUN -> [SKIP][99] ([Intel XE#8369]) +1 other test skip
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@xe_exec_reset@multi-queue-cancel.html
* igt@xe_exec_threads@threads-multi-queue-cm-shared-vm-basic:
- shard-ptl: NOTRUN -> [SKIP][100] ([Intel XE#8378]) +3 other tests skip
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@xe_exec_threads@threads-multi-queue-cm-shared-vm-basic.html
* igt@xe_exec_threads@threads-multi-queue-hang-fd-userptr-invalidate-race:
- shard-lnl: NOTRUN -> [SKIP][101] ([Intel XE#8378])
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-2/igt@xe_exec_threads@threads-multi-queue-hang-fd-userptr-invalidate-race.html
* igt@xe_exec_threads@threads-multi-queue-mixed-shared-vm-userptr-rebind:
- shard-bmg: NOTRUN -> [SKIP][102] ([Intel XE#8378]) +2 other tests skip
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@xe_exec_threads@threads-multi-queue-mixed-shared-vm-userptr-rebind.html
* igt@xe_fault_injection@inject-fault-probe-function-xe_ggtt_init_early:
- shard-bmg: [PASS][103] -> [ABORT][104] ([Intel XE#8007])
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-bmg-4/igt@xe_fault_injection@inject-fault-probe-function-xe_ggtt_init_early.html
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-8/igt@xe_fault_injection@inject-fault-probe-function-xe_ggtt_init_early.html
* igt@xe_live_ktest@xe_bo@xe_bo_evict_kunit:
- shard-ptl: NOTRUN -> [SKIP][105] ([Intel XE#5775])
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@xe_live_ktest@xe_bo@xe_bo_evict_kunit.html
* igt@xe_multigpu_svm@mgpu-atomic-op-basic:
- shard-lnl: NOTRUN -> [SKIP][106] ([Intel XE#6964])
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-2/igt@xe_multigpu_svm@mgpu-atomic-op-basic.html
* igt@xe_multigpu_svm@mgpu-coherency-conflict:
- shard-ptl: NOTRUN -> [SKIP][107] ([Intel XE#6964])
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@xe_multigpu_svm@mgpu-coherency-conflict.html
* igt@xe_multigpu_svm@mgpu-latency-copy-basic:
- shard-bmg: NOTRUN -> [SKIP][108] ([Intel XE#6964]) +3 other tests skip
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@xe_multigpu_svm@mgpu-latency-copy-basic.html
* igt@xe_oa@oa-tlb-invalidate:
- shard-bmg: NOTRUN -> [SKIP][109] ([Intel XE#2248] / [Intel XE#7325] / [Intel XE#7393])
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@xe_oa@oa-tlb-invalidate.html
* igt@xe_page_reclaim@binds-1g-partial:
- shard-bmg: NOTRUN -> [SKIP][110] ([Intel XE#7793]) +2 other tests skip
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@xe_page_reclaim@binds-1g-partial.html
* igt@xe_pat@pat-index-xehpc:
- shard-bmg: NOTRUN -> [SKIP][111] ([Intel XE#1420] / [Intel XE#7590])
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-7/igt@xe_pat@pat-index-xehpc.html
* igt@xe_pat@pat-sw-hw-reset-compare:
- shard-ptl: NOTRUN -> [FAIL][112] ([Intel XE#7695])
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@xe_pat@pat-sw-hw-reset-compare.html
* igt@xe_pm@d3cold-mmap-vram:
- shard-ptl: NOTRUN -> [SKIP][113] ([Intel XE#5741])
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@xe_pm@d3cold-mmap-vram.html
* igt@xe_pm@s3-basic-exec:
- shard-ptl: NOTRUN -> [SKIP][114] ([Intel XE#6867])
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@xe_pm@s3-basic-exec.html
* igt@xe_pm@s4-vm-bind-prefetch:
- shard-lnl: [PASS][115] -> [ABORT][116] ([Intel XE#9362]) +1 other test abort
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-5/igt@xe_pm@s4-vm-bind-prefetch.html
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-8/igt@xe_pm@s4-vm-bind-prefetch.html
* igt@xe_prefetch_fault@prefetch-fault-svm:
- shard-ptl: NOTRUN -> [SKIP][117] ([Intel XE#7599])
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@xe_prefetch_fault@prefetch-fault-svm.html
* igt@xe_pxp@pxp-termination-key-update-post-suspend:
- shard-bmg: NOTRUN -> [SKIP][118] ([Intel XE#4733] / [Intel XE#7417]) +1 other test skip
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-7/igt@xe_pxp@pxp-termination-key-update-post-suspend.html
* igt@xe_query@multigpu-query-mem-usage:
- shard-bmg: NOTRUN -> [SKIP][119] ([Intel XE#944]) +1 other test skip
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-4/igt@xe_query@multigpu-query-mem-usage.html
* igt@xe_query@multigpu-query-oa-units:
- shard-ptl: NOTRUN -> [SKIP][120] ([Intel XE#6019])
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@xe_query@multigpu-query-oa-units.html
#### Possible fixes ####
* igt@kms_async_flips@alternate-sync-async-flip-atomic:
- shard-bmg: [FAIL][121] ([Intel XE#3718] / [Intel XE#6078]) -> [PASS][122]
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-bmg-10/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-1/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
* igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-dp-2:
- shard-bmg: [FAIL][123] ([Intel XE#6078]) -> [PASS][124]
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-bmg-10/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-dp-2.html
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-1/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-dp-2.html
* igt@kms_cursor_crc@cursor-suspend@pipe-a-edp-1:
- shard-ptl: [ABORT][125] ([Intel XE#9362]) -> [PASS][126] +6 other tests pass
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-1/igt@kms_cursor_crc@cursor-suspend@pipe-a-edp-1.html
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@kms_cursor_crc@cursor-suspend@pipe-a-edp-1.html
* igt@kms_flip@flip-vs-expired-vblank@b-edp1:
- shard-lnl: [FAIL][127] ([Intel XE#301]) -> [PASS][128]
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
* igt@kms_flip@flip-vs-expired-vblank@c-edp1:
- shard-lnl: [FAIL][129] ([Intel XE#301] / [Intel XE#3149]) -> [PASS][130] +1 other test pass
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html
* igt@kms_hdr@bpc-switch-suspend@pipe-a-dp-2-xrgb16161616f:
- shard-bmg: [ABORT][131] ([Intel XE#9362]) -> [PASS][132] +1 other test pass
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-bmg-3/igt@kms_hdr@bpc-switch-suspend@pipe-a-dp-2-xrgb16161616f.html
[132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-7/igt@kms_hdr@bpc-switch-suspend@pipe-a-dp-2-xrgb16161616f.html
* igt@kms_vblank@ts-continuation-suspend:
- shard-bmg: [DMESG-WARN][133] ([Intel XE#9390]) -> [PASS][134] +1 other test pass
[133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-bmg-7/igt@kms_vblank@ts-continuation-suspend.html
[134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-10/igt@kms_vblank@ts-continuation-suspend.html
* igt@xe_exec_system_allocator@threads-shared-vm-many-large-execqueues-mmap-huge-nomemset:
- shard-bmg: [ABORT][135] -> [PASS][136] +2 other tests pass
[135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-bmg-6/igt@xe_exec_system_allocator@threads-shared-vm-many-large-execqueues-mmap-huge-nomemset.html
[136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-9/igt@xe_exec_system_allocator@threads-shared-vm-many-large-execqueues-mmap-huge-nomemset.html
* igt@xe_module_load@load:
- shard-lnl: ([PASS][137], [PASS][138], [PASS][139], [PASS][140], [PASS][141], [PASS][142], [PASS][143], [PASS][144], [PASS][145], [PASS][146], [PASS][147], [PASS][148], [PASS][149], [SKIP][150], [PASS][151], [PASS][152], [PASS][153], [PASS][154], [PASS][155], [PASS][156], [PASS][157], [PASS][158], [PASS][159], [PASS][160], [PASS][161], [PASS][162]) ([Intel XE#378] / [Intel XE#7405]) -> ([PASS][163], [PASS][164], [PASS][165], [PASS][166], [PASS][167], [PASS][168], [PASS][169], [PASS][170], [PASS][171], [PASS][172], [PASS][173], [PASS][174], [PASS][175], [PASS][176], [PASS][177], [PASS][178], [PASS][179], [PASS][180], [PASS][181], [PASS][182], [PASS][183], [PASS][184], [PASS][185], [PASS][186], [PASS][187])
[137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-3/igt@xe_module_load@load.html
[138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-3/igt@xe_module_load@load.html
[139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-6/igt@xe_module_load@load.html
[140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-6/igt@xe_module_load@load.html
[141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-6/igt@xe_module_load@load.html
[142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-3/igt@xe_module_load@load.html
[143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-2/igt@xe_module_load@load.html
[144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-2/igt@xe_module_load@load.html
[145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-2/igt@xe_module_load@load.html
[146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-5/igt@xe_module_load@load.html
[147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-5/igt@xe_module_load@load.html
[148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-2/igt@xe_module_load@load.html
[149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-5/igt@xe_module_load@load.html
[150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-5/igt@xe_module_load@load.html
[151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-7/igt@xe_module_load@load.html
[152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-7/igt@xe_module_load@load.html
[153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-7/igt@xe_module_load@load.html
[154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-4/igt@xe_module_load@load.html
[155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-4/igt@xe_module_load@load.html
[156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-4/igt@xe_module_load@load.html
[157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-8/igt@xe_module_load@load.html
[158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-8/igt@xe_module_load@load.html
[159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-8/igt@xe_module_load@load.html
[160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-1/igt@xe_module_load@load.html
[161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-1/igt@xe_module_load@load.html
[162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-1/igt@xe_module_load@load.html
[163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-3/igt@xe_module_load@load.html
[164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-1/igt@xe_module_load@load.html
[165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-2/igt@xe_module_load@load.html
[166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-2/igt@xe_module_load@load.html
[167]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-5/igt@xe_module_load@load.html
[168]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-5/igt@xe_module_load@load.html
[169]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-1/igt@xe_module_load@load.html
[170]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-6/igt@xe_module_load@load.html
[171]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-6/igt@xe_module_load@load.html
[172]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-4/igt@xe_module_load@load.html
[173]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-8/igt@xe_module_load@load.html
[174]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-2/igt@xe_module_load@load.html
[175]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-6/igt@xe_module_load@load.html
[176]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-3/igt@xe_module_load@load.html
[177]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-5/igt@xe_module_load@load.html
[178]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-1/igt@xe_module_load@load.html
[179]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-4/igt@xe_module_load@load.html
[180]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-4/igt@xe_module_load@load.html
[181]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-8/igt@xe_module_load@load.html
[182]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-8/igt@xe_module_load@load.html
[183]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-8/igt@xe_module_load@load.html
[184]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-7/igt@xe_module_load@load.html
[185]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-7/igt@xe_module_load@load.html
[186]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-3/igt@xe_module_load@load.html
[187]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-7/igt@xe_module_load@load.html
- shard-ptl: ([PASS][188], [PASS][189], [PASS][190], [PASS][191], [PASS][192], [PASS][193], [PASS][194], [PASS][195], [PASS][196], [PASS][197], [PASS][198], [PASS][199], [SKIP][200], [PASS][201], [PASS][202], [PASS][203], [PASS][204], [PASS][205], [PASS][206], [PASS][207], [PASS][208], [PASS][209], [PASS][210], [PASS][211], [PASS][212], [PASS][213]) ([Intel XE#9286]) -> ([PASS][214], [PASS][215], [PASS][216], [PASS][217], [PASS][218], [PASS][219], [PASS][220], [PASS][221], [PASS][222], [PASS][223], [PASS][224], [PASS][225], [PASS][226], [PASS][227], [PASS][228], [PASS][229], [PASS][230], [PASS][231], [PASS][232], [PASS][233], [PASS][234], [PASS][235], [PASS][236], [PASS][237], [PASS][238])
[188]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-4/igt@xe_module_load@load.html
[189]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-7/igt@xe_module_load@load.html
[190]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-5/igt@xe_module_load@load.html
[191]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-5/igt@xe_module_load@load.html
[192]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-5/igt@xe_module_load@load.html
[193]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-7/igt@xe_module_load@load.html
[194]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-7/igt@xe_module_load@load.html
[195]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-7/igt@xe_module_load@load.html
[196]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-4/igt@xe_module_load@load.html
[197]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-1/igt@xe_module_load@load.html
[198]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-1/igt@xe_module_load@load.html
[199]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-1/igt@xe_module_load@load.html
[200]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-8/igt@xe_module_load@load.html
[201]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-8/igt@xe_module_load@load.html
[202]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-8/igt@xe_module_load@load.html
[203]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-2/igt@xe_module_load@load.html
[204]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-8/igt@xe_module_load@load.html
[205]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-6/igt@xe_module_load@load.html
[206]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-6/igt@xe_module_load@load.html
[207]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-6/igt@xe_module_load@load.html
[208]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-6/igt@xe_module_load@load.html
[209]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-3/igt@xe_module_load@load.html
[210]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-3/igt@xe_module_load@load.html
[211]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-3/igt@xe_module_load@load.html
[212]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-2/igt@xe_module_load@load.html
[213]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-ptl-2/igt@xe_module_load@load.html
[214]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-2/igt@xe_module_load@load.html
[215]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-2/igt@xe_module_load@load.html
[216]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-8/igt@xe_module_load@load.html
[217]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-8/igt@xe_module_load@load.html
[218]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-8/igt@xe_module_load@load.html
[219]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-2/igt@xe_module_load@load.html
[220]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-3/igt@xe_module_load@load.html
[221]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-6/igt@xe_module_load@load.html
[222]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-6/igt@xe_module_load@load.html
[223]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-1/igt@xe_module_load@load.html
[224]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-6/igt@xe_module_load@load.html
[225]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@xe_module_load@load.html
[226]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@xe_module_load@load.html
[227]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@xe_module_load@load.html
[228]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-3/igt@xe_module_load@load.html
[229]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-6/igt@xe_module_load@load.html
[230]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-5/igt@xe_module_load@load.html
[231]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-3/igt@xe_module_load@load.html
[232]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@xe_module_load@load.html
[233]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@xe_module_load@load.html
[234]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-4/igt@xe_module_load@load.html
[235]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-7/igt@xe_module_load@load.html
[236]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-7/igt@xe_module_load@load.html
[237]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-1/igt@xe_module_load@load.html
[238]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-ptl-1/igt@xe_module_load@load.html
* igt@xe_pm@s4-vm-bind-userptr:
- shard-lnl: [ABORT][239] ([Intel XE#9362]) -> [PASS][240]
[239]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-lnl-3/igt@xe_pm@s4-vm-bind-userptr.html
[240]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-lnl-2/igt@xe_pm@s4-vm-bind-userptr.html
* igt@xe_pm_residency@gt-c6-freeze@gt0:
- shard-bmg: [FAIL][241] ([Intel XE#9254]) -> [PASS][242] +1 other test pass
[241]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-bmg-3/igt@xe_pm_residency@gt-c6-freeze@gt0.html
[242]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-7/igt@xe_pm_residency@gt-c6-freeze@gt0.html
#### Warnings ####
* igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-c-dp-2:
- shard-bmg: [ABORT][243] -> [INCOMPLETE][244] ([Intel XE#7084] / [Intel XE#8150]) +1 other test incomplete
[243]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-bmg-6/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-c-dp-2.html
[244]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-6/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-c-dp-2.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-bmg: [SKIP][245] ([Intel XE#2426] / [Intel XE#5848]) -> [FAIL][246] ([Intel XE#1729] / [Intel XE#7424])
[245]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-bmg-2/igt@kms_tiled_display@basic-test-pattern.html
[246]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-5/igt@kms_tiled_display@basic-test-pattern.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-bmg: [SKIP][247] ([Intel XE#2509] / [Intel XE#7437]) -> [SKIP][248] ([Intel XE#2426] / [Intel XE#5848])
[247]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f/shard-bmg-5/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[248]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/shard-bmg-7/igt@kms_tiled_display@basic-test-pattern-with-chamelium.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#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1420]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1420
[Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
[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#2248]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2248
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
[Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
[Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
[Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
[Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
[Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
[Intel XE#2330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2330
[Intel XE#2390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2390
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
[Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
[Intel XE#2724]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2724
[Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
[Intel XE#3304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3304
[Intel XE#3309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3309
[Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#3718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3718
[Intel XE#378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/378
[Intel XE#4090]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4090
[Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
[Intel XE#4156]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4156
[Intel XE#4422]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4422
[Intel XE#4733]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4733
[Intel XE#5020]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5020
[Intel XE#5575]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5575
[Intel XE#5741]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5741
[Intel XE#5764]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5764
[Intel XE#5775]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5775
[Intel XE#5800]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5800
[Intel XE#5808]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5808
[Intel XE#5812]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5812
[Intel XE#5813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5813
[Intel XE#5822]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5822
[Intel XE#5824]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5824
[Intel XE#5835]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5835
[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#5850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5850
[Intel XE#5858]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5858
[Intel XE#5900]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5900
[Intel XE#5901]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5901
[Intel XE#5907]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5907
[Intel XE#5910]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5910
[Intel XE#5946]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5946
[Intel XE#5947]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5947
[Intel XE#5962]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5962
[Intel XE#6019]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6019
[Intel XE#6078]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6078
[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#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
[Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#6599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6599
[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#6912]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6912
[Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
[Intel XE#6974]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6974
[Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
[Intel XE#7084]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7084
[Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
[Intel XE#7225]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7225
[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#7325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7325
[Intel XE#7348]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7348
[Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
[Intel XE#7355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7355
[Intel XE#7356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7356
[Intel XE#7358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7358
[Intel XE#7368]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7368
[Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
[Intel XE#7374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7374
[Intel XE#7375]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7375
[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#7393]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7393
[Intel XE#7399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7399
[Intel XE#7405]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7405
[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#7425]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7425
[Intel XE#7437]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7437
[Intel XE#7442]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7442
[Intel XE#7443]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7443
[Intel XE#7449]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7449
[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#7679]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7679
[Intel XE#7695]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7695
[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#7794]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7794
[Intel XE#7795]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7795
[Intel XE#7865]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7865
[Intel XE#7905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7905
[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#8348]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8348
[Intel XE#8364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8364
[Intel XE#8369]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8369
[Intel XE#8374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8374
[Intel XE#8378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8378
[Intel XE#8391]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8391
[Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
[Intel XE#9254]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9254
[Intel XE#9286]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9286
[Intel XE#9287]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9287
[Intel XE#9333]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9333
[Intel XE#9362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9362
[Intel XE#9390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9390
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
Build changes
-------------
* Linux: xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f -> xe-pw-174805v2
IGT_9111: 4aeabf104b136437d0ccc57caf32a752587d595c @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-5818-1a702d79afe36153e37dd9784fde95f9f86ea03f: 1a702d79afe36153e37dd9784fde95f9f86ea03f
xe-pw-174805v2: 174805v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-174805v2/index.html
[-- Attachment #2: Type: text/html, Size: 69701 bytes --]
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2026-09-24 22:28 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-24 8:04 [PATCH v2 0/3] drm, drm/xe: Protect against premature module unloads Thomas Hellström
2026-09-24 8:04 ` [PATCH v2 1/3] drm: Provide a drm_dev_release_barrier() function to wait for device release callbacks Thomas Hellström
2026-09-24 11:19 ` Christian König
2026-09-24 13:10 ` Thomas Hellström
2026-09-24 8:04 ` [PATCH v2 2/3] drm/xe: Don't unload the driver until all drm devices are freed Thomas Hellström
2026-09-24 21:00 ` Matthew Brost
2026-09-24 8:04 ` [PATCH v2 3/3] drm/xe: Route deferred xe_vma/xe_vm teardown off system_dfl_wq Thomas Hellström
2026-09-24 20:55 ` Matthew Brost
2026-09-24 8:14 ` ✓ CI.KUnit: success for drm, drm/xe: Protect against premature module unloads (rev2) Patchwork
2026-09-24 9:04 ` ✓ Xe.CI.BAT: " Patchwork
2026-09-24 22:28 ` ✓ 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