* [PATCH v4 0/7] Cleanup OA stream on PCI unbind/remove
@ 2026-11-05 0:16 Umesh Nerlige Ramappa
2026-11-05 0:16 ` [PATCH v4 1/7] drm/xe/oa: Use the drm device address_space for the OA stream fd Umesh Nerlige Ramappa
` (10 more replies)
0 siblings, 11 replies; 16+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-11-05 0:16 UTC (permalink / raw)
To: intel-xe, shekhar.chauhan, Matthew Brost; +Cc: harish.chegondi
When an OA stream FD is open, removing the PCI device due to PCIe errors
or doing an unbind causes a NPD and system reboots. While OA registers a
fini handler with devm, the handler does not take into account active OA
connections.
Add code to quiesce OA connection on PCI remove/unbind.
v2: Sashiko Comments
v3: More Sashiko fixes and refactor
v4: More Sashiko fixes and refactor
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Umesh Nerlige Ramappa (7):
drm/xe/oa: Use the drm device address_space for the OA stream fd
drm/xe/oa: Split OA stream destroy into HW teardown and resource
release
drm/xe/oa: Take the runtime PM reference in xe_oa_destroy_locked()
drm/xe/oa: Skip OA HW teardown on a wedged device
drm/xe/oa: Wait for in-flight OA batches before stream HW teardown
drm/xe: Reject vm_ops->access on BO mappings of an unplugged device
drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset
drivers/gpu/drm/xe/xe_bo.c | 15 +-
drivers/gpu/drm/xe/xe_oa.c | 320 +++++++++++++++++++++++++---
drivers/gpu/drm/xe/xe_oa_types.h | 3 +
drivers/gpu/drm/xe/xe_observation.c | 23 +-
4 files changed, 322 insertions(+), 39 deletions(-)
--
2.55.0
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v4 1/7] drm/xe/oa: Use the drm device address_space for the OA stream fd
2026-11-05 0:16 [PATCH v4 0/7] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
@ 2026-11-05 0:16 ` Umesh Nerlige Ramappa
2026-11-05 0:16 ` [PATCH v4 2/7] drm/xe/oa: Split OA stream destroy into HW teardown and resource release Umesh Nerlige Ramappa
` (9 subsequent siblings)
10 siblings, 0 replies; 16+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-11-05 0:16 UTC (permalink / raw)
To: intel-xe, shekhar.chauhan, Matthew Brost; +Cc: harish.chegondi
anon_inode_getfd() hands back a file whose f_mapping points at the
address_space of the kernel-wide singleton anon_inode_inode, shared by
every other anon_inode_getfd()/anon_inode_getfile() user in the system.
Any code that needs to invalidate userspace mappings of the OA buffer
via that mapping (e.g. unmap_mapping_range()) would end up operating on
an address_space it doesn't own, with the potential to affect unrelated
mappings.
Allocating a private inode with anon_inode_create_getfile() is not an
option, since that goes through security_inode_init_security_anon() and
is denied by SELinux policies that don't know about "[xe_oa]", breaking
OA on enforcing systems.
Instead, keep the anon inode singleton and only point the file's
f_mapping at the drm device's address_space (drm.anon_inode->i_mapping),
same as drm_file does for drm fds. f_mapping must be set before the fd
is visible to userspace, so reserve the fd with get_unused_fd_flags(),
create the file with anon_inode_getfile() and install it with
fd_install() after setting f_mapping.
To keep the OA buffer mmaps of different streams apart from each other
and from GEM mmaps in that shared address_space, reserve a GEM fake
offset for the OA buffer with drm_gem_create_mmap_offset(), and move
the vma to that offset in xe_oa_mmap() by setting vm_pgoff, the same
way drm_gem_prime_mmap() does. f_op->mmap runs before the vma is linked
into the address_space, so the vma is tracked at the OA buffer's own
range, and drm_vma_node_unmap() on the OA buffer only zaps mappings of
that buffer. The TTM fault handler already subtracts the fake offset
from vm_pgoff, so faults resolve to the right pages unchanged.
The uAPI is unchanged: userspace keeps mapping the OA buffer at offset
0 of the stream fd, which is now enforced. The fake offset is never
granted to a drm_file, so the OA buffer can't be mmap'ed via drm fds.
drm_dev_unplug() now also zaps OA buffer mmaps along with all other
mmaps of the drm device.
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
---
drivers/gpu/drm/xe/xe_oa.c | 41 +++++++++++++++++++++++++++++++++++++-
1 file changed, 40 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 838802482ada..7e3ebba0300d 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -908,6 +908,7 @@ static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream, size_t size)
XE_BO_FLAG_VRAM_IF_DGFX(xe_device_get_root_tile(stream->oa->xe)) :
XE_BO_FLAG_SYSTEM;
struct xe_bo *bo;
+ int ret;
bo = xe_bo_create_pin_map_novm(stream->oa->xe, stream->gt->tile,
size, ttm_bo_type_kernel,
@@ -915,6 +916,17 @@ static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream, size_t size)
if (IS_ERR(bo))
return PTR_ERR(bo);
+ /*
+ * Reserve a range for the OA buffer in the drm device's address_space, so that its
+ * userspace mmaps don't overlap with those of GEM BOs or other OA buffers and can be
+ * unmapped on their own. Not granted to any drm_file, so not mmap'able via drm fds.
+ */
+ ret = drm_gem_create_mmap_offset(&bo->ttm.base);
+ if (ret) {
+ xe_bo_unpin_map_no_vm(bo);
+ return ret;
+ }
+
/*
* ttm_bo_type_kernel BOs are not zeroed on allocation, so the buffer can
* hold stale data from previously freed pages. Since the OA buffer is
@@ -1722,6 +1734,15 @@ static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
return ret;
}
+ /*
+ * Userspace always maps the OA buffer at offset 0, the mapping is moved to the OA
+ * buffer's own range in the drm device's address_space below
+ */
+ if (vma->vm_pgoff) {
+ drm_dbg(&stream->oa->xe->drm, "Wrong mmap offset, must be 0\n");
+ return -EINVAL;
+ }
+
/* Can mmap the entire OA buffer or nothing (no partial OA buffer mmaps) */
if (vma->vm_end - vma->vm_start != xe_bo_size(bo)) {
drm_dbg(&stream->oa->xe->drm, "Wrong mmap size, must be OA buffer size\n");
@@ -1739,6 +1760,8 @@ static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
vm_flags_mod(vma, VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP | VM_DONTCOPY,
VM_MAYWRITE | VM_MAYEXEC);
+ vma->vm_pgoff = drm_vma_node_start(&bo->ttm.base.vma_node);
+
return drm_gem_mmap_obj(&bo->ttm.base, xe_bo_size(bo), vma);
}
@@ -1869,6 +1892,7 @@ static int xe_oa_stream_open_ioctl_locked(struct xe_oa *oa,
{
struct xe_oa_stream *stream;
struct drm_syncobj *ufence_syncobj;
+ struct file *file;
int stream_fd;
int ret;
@@ -1910,12 +1934,27 @@ static int xe_oa_stream_open_ioctl_locked(struct xe_oa *oa,
goto err_destroy;
}
- stream_fd = anon_inode_getfd("[xe_oa]", &xe_oa_fops, stream, 0);
+ stream_fd = get_unused_fd_flags(0);
if (stream_fd < 0) {
ret = stream_fd;
goto err_disable;
}
+ file = anon_inode_getfile("[xe_oa]", &xe_oa_fops, stream, 0);
+ if (IS_ERR(file)) {
+ ret = PTR_ERR(file);
+ put_unused_fd(stream_fd);
+ goto err_disable;
+ }
+
+ /*
+ * Don't use the address_space of the anon inode singleton, which is shared with
+ * unrelated anon files. Use the drm device's address_space instead, same as drm fds.
+ * OA buffer mmaps live at the OA buffer's own fake offset range there.
+ */
+ file->f_mapping = oa->xe->drm.anon_inode->i_mapping;
+ fd_install(stream_fd, file);
+
if (stream->sample)
xe_reg_whitelist_oa_regs(stream->gt);
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 2/7] drm/xe/oa: Split OA stream destroy into HW teardown and resource release
2026-11-05 0:16 [PATCH v4 0/7] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
2026-11-05 0:16 ` [PATCH v4 1/7] drm/xe/oa: Use the drm device address_space for the OA stream fd Umesh Nerlige Ramappa
@ 2026-11-05 0:16 ` Umesh Nerlige Ramappa
2026-11-05 0:16 ` [PATCH v4 3/7] drm/xe/oa: Take the runtime PM reference in xe_oa_destroy_locked() Umesh Nerlige Ramappa
` (8 subsequent siblings)
10 siblings, 0 replies; 16+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-11-05 0:16 UTC (permalink / raw)
To: intel-xe, shekhar.chauhan, Matthew Brost; +Cc: harish.chegondi
Split the body of xe_oa_stream_destroy() into xe_oa_stream_hw_teardown(),
which puts back the HW state (register whitelist, metric set) and drops
forcewake, and xe_oa_stream_free_resources(), which releases the SW
resources (kernel exec queue, OA buffer, runtime PM reference, configs,
xe file reference).
This lets a following patch release the stream resources without
touching the HW when the device is wedged.
The only change in behavior is that forcewake is now dropped before the
kernel exec queue and the OA buffer are released, neither of which
needs it.
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
---
drivers/gpu/drm/xe/xe_oa.c | 33 +++++++++++++++++++++------------
1 file changed, 21 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 7e3ebba0300d..9a9f1eaf6ffc 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -875,33 +875,42 @@ static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
xe_mmio_rmw32(mmio, OAM_COMPRESSION_T3_CONTROL, OAM_LAT_MEASURE_ENABLE, 0);
}
-static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
+static void xe_oa_stream_hw_teardown(struct xe_oa_stream *stream)
{
- struct xe_oa_unit *u = stream->oa_unit;
- struct xe_gt *gt = stream->hwe->gt;
-
- if (WARN_ON(stream != u->exclusive_stream))
- return;
-
- WRITE_ONCE(u->exclusive_stream, NULL);
-
- mutex_destroy(&stream->stream_lock);
-
if (stream->sample)
xe_reg_dewhitelist_oa_regs(stream->gt);
xe_oa_disable_metric_set(stream);
+ xe_force_wake_put(gt_to_fw(stream->hwe->gt), stream->fw_ref);
+}
+
+static void xe_oa_stream_free_resources(struct xe_oa_stream *stream)
+{
xe_exec_queue_put(stream->k_exec_q);
xe_oa_free_oa_buffer(stream);
- xe_force_wake_put(gt_to_fw(gt), stream->fw_ref);
xe_pm_runtime_put(stream->oa->xe);
xe_oa_free_configs(stream);
xe_file_put(stream->xef);
}
+static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
+{
+ struct xe_oa_unit *u = stream->oa_unit;
+
+ if (WARN_ON(stream != u->exclusive_stream))
+ return;
+
+ WRITE_ONCE(u->exclusive_stream, NULL);
+
+ mutex_destroy(&stream->stream_lock);
+
+ xe_oa_stream_hw_teardown(stream);
+ xe_oa_stream_free_resources(stream);
+}
+
static int xe_oa_alloc_oa_buffer(struct xe_oa_stream *stream, size_t size)
{
u32 vram = mert_wa_14026633728(stream) ?
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 3/7] drm/xe/oa: Take the runtime PM reference in xe_oa_destroy_locked()
2026-11-05 0:16 [PATCH v4 0/7] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
2026-11-05 0:16 ` [PATCH v4 1/7] drm/xe/oa: Use the drm device address_space for the OA stream fd Umesh Nerlige Ramappa
2026-11-05 0:16 ` [PATCH v4 2/7] drm/xe/oa: Split OA stream destroy into HW teardown and resource release Umesh Nerlige Ramappa
@ 2026-11-05 0:16 ` Umesh Nerlige Ramappa
2026-11-05 0:16 ` [PATCH v4 4/7] drm/xe/oa: Skip OA HW teardown on a wedged device Umesh Nerlige Ramappa
` (7 subsequent siblings)
10 siblings, 0 replies; 16+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-11-05 0:16 UTC (permalink / raw)
To: intel-xe, shekhar.chauhan, Matthew Brost; +Cc: harish.chegondi
Move the runtime PM get/put around stream destruction from
xe_oa_release() into xe_oa_destroy_locked(), the only caller, so the
reference is held just around the code that needs the device awake.
This lets a following patch free a stream of a removed device without
taking a runtime PM reference on it. No functional change.
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
---
drivers/gpu/drm/xe/xe_oa.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 9a9f1eaf6ffc..fabbbcf16f4e 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -1703,6 +1703,8 @@ static long xe_oa_ioctl(struct file *file,
static void xe_oa_destroy_locked(struct xe_oa_stream *stream)
{
+ xe_pm_runtime_get(gt_to_xe(stream->gt));
+
if (stream->enabled)
xe_oa_disable_locked(stream);
@@ -1712,6 +1714,7 @@ static void xe_oa_destroy_locked(struct xe_oa_stream *stream)
xe_exec_queue_put(stream->exec_q);
drm_syncobj_put(stream->ufence_syncobj);
+ xe_pm_runtime_put(gt_to_xe(stream->gt));
kfree(stream);
}
@@ -1720,11 +1723,9 @@ static int xe_oa_release(struct inode *inode, struct file *file)
struct xe_oa_stream *stream = file->private_data;
struct xe_gt *gt = stream->gt;
- xe_pm_runtime_get(gt_to_xe(gt));
mutex_lock(>->oa.gt_lock);
xe_oa_destroy_locked(stream);
mutex_unlock(>->oa.gt_lock);
- xe_pm_runtime_put(gt_to_xe(gt));
/* Release the reference the OA stream kept on the driver */
drm_dev_put(>_to_xe(gt)->drm);
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 4/7] drm/xe/oa: Skip OA HW teardown on a wedged device
2026-11-05 0:16 [PATCH v4 0/7] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
` (2 preceding siblings ...)
2026-11-05 0:16 ` [PATCH v4 3/7] drm/xe/oa: Take the runtime PM reference in xe_oa_destroy_locked() Umesh Nerlige Ramappa
@ 2026-11-05 0:16 ` Umesh Nerlige Ramappa
2026-11-05 0:44 ` sashiko-bot
2026-11-05 0:16 ` [PATCH v4 5/7] drm/xe/oa: Wait for in-flight OA batches before stream HW teardown Umesh Nerlige Ramappa
` (6 subsequent siblings)
10 siblings, 1 reply; 16+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-11-05 0:16 UTC (permalink / raw)
To: intel-xe, shekhar.chauhan, Matthew Brost; +Cc: harish.chegondi
Closing a stream on a wedged device still disables the OA unit and
restores the OA HW state, including MMIO waits and batch submissions to
a device that may be unresponsive or, on a PCI error, disabled.
Skip that HW access when the device is wedged. This also skips the
forcewake put, which accesses the HW as well, leaking the forcewake
reference. That is fine, the device needs a reset or rebind to recover,
which reinitializes forcewake.
---
drivers/gpu/drm/xe/xe_oa.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index fabbbcf16f4e..7552ace821ca 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -43,6 +43,7 @@
#include "xe_sriov.h"
#include "xe_sync.h"
#include "xe_wa.h"
+#include "xe_wedge.h"
#define DEFAULT_POLL_FREQUENCY_HZ 200
#define DEFAULT_POLL_PERIOD_NS (NSEC_PER_SEC / DEFAULT_POLL_FREQUENCY_HZ)
@@ -875,6 +876,11 @@ static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
xe_mmio_rmw32(mmio, OAM_COMPRESSION_T3_CONTROL, OAM_LAT_MEASURE_ENABLE, 0);
}
+/*
+ * Also drops forcewake, which accesses the HW too. On a wedged device this is skipped and
+ * the forcewake reference leaks, which is fine: the device needs a reset or rebind to
+ * recover, which reinitializes forcewake.
+ */
static void xe_oa_stream_hw_teardown(struct xe_oa_stream *stream)
{
if (stream->sample)
@@ -907,7 +913,8 @@ static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
mutex_destroy(&stream->stream_lock);
- xe_oa_stream_hw_teardown(stream);
+ if (!xe_wedged(stream->oa->xe))
+ xe_oa_stream_hw_teardown(stream);
xe_oa_stream_free_resources(stream);
}
@@ -1705,7 +1712,8 @@ static void xe_oa_destroy_locked(struct xe_oa_stream *stream)
{
xe_pm_runtime_get(gt_to_xe(stream->gt));
- if (stream->enabled)
+ /* A wedged device may be unresponsive, skip HW access */
+ if (stream->enabled && !xe_wedged(gt_to_xe(stream->gt)))
xe_oa_disable_locked(stream);
xe_oa_stream_destroy(stream);
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 5/7] drm/xe/oa: Wait for in-flight OA batches before stream HW teardown
2026-11-05 0:16 [PATCH v4 0/7] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
` (3 preceding siblings ...)
2026-11-05 0:16 ` [PATCH v4 4/7] drm/xe/oa: Skip OA HW teardown on a wedged device Umesh Nerlige Ramappa
@ 2026-11-05 0:16 ` Umesh Nerlige Ramappa
2026-11-05 1:03 ` sashiko-bot
2026-11-05 0:16 ` [PATCH v4 6/7] drm/xe: Reject vm_ops->access on BO mappings of an unplugged device Umesh Nerlige Ramappa
` (5 subsequent siblings)
10 siblings, 1 reply; 16+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-11-05 0:16 UTC (permalink / raw)
To: intel-xe, shekhar.chauhan, Matthew Brost; +Cc: harish.chegondi
Config batches submitted with output syncs and context LRI batches are
not waited for. If one is still in flight when the stream is closed, it
can program the OA registers after they were restored.
Both go to the same exec queue, so also record the LRI batch fence in
stream->last_fence, and wait for it before the HW teardown, bounded by
the job timeout of the exec queue.
---
drivers/gpu/drm/xe/xe_oa.c | 31 +++++++++++++++++++++++++------
1 file changed, 25 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 7552ace821ca..31fc1e7675de 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -733,6 +733,12 @@ static void xe_oa_free_configs(struct xe_oa_stream *stream)
dma_fence_put(stream->last_fence);
}
+static void xe_oa_update_last_fence(struct xe_oa_stream *stream, struct dma_fence *fence)
+{
+ dma_fence_put(stream->last_fence);
+ stream->last_fence = dma_fence_get(fence);
+}
+
static int xe_oa_load_with_lri(struct xe_oa_stream *stream, struct xe_oa_reg *reg_lri, u32 count)
{
struct dma_fence *fence;
@@ -753,6 +759,7 @@ static int xe_oa_load_with_lri(struct xe_oa_stream *stream, struct xe_oa_reg *re
goto free_bb;
}
xe_bb_free(bb, fence);
+ xe_oa_update_last_fence(stream, fence);
dma_fence_put(fence);
return 0;
@@ -876,6 +883,23 @@ static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
xe_mmio_rmw32(mmio, OAM_COMPRESSION_T3_CONTROL, OAM_LAT_MEASURE_ENABLE, 0);
}
+/*
+ * Wait for the last OA batch of the stream, so that it can't program the HW after the HW
+ * teardown.
+ */
+static void xe_oa_stream_drain(struct xe_oa_stream *stream)
+{
+ struct xe_exec_queue *q = stream->exec_q ?: stream->k_exec_q;
+ long timeout;
+
+ if (!stream->last_fence || dma_fence_is_signaled(stream->last_fence))
+ return;
+
+ timeout = msecs_to_jiffies(q->sched_props.job_timeout_ms) + HZ;
+ if (!dma_fence_wait_timeout(stream->last_fence, false, timeout))
+ drm_err(&stream->oa->xe->drm, "Timed out waiting for OA batch\n");
+}
+
/*
* Also drops forcewake, which accesses the HW too. On a wedged device this is skipped and
* the forcewake reference leaks, which is fine: the device needs a reset or rebind to
@@ -913,6 +937,7 @@ static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
mutex_destroy(&stream->stream_lock);
+ xe_oa_stream_drain(stream);
if (!xe_wedged(stream->oa->xe))
xe_oa_stream_hw_teardown(stream);
xe_oa_stream_free_resources(stream);
@@ -1009,12 +1034,6 @@ xe_oa_alloc_config_buffer(struct xe_oa_stream *stream, struct xe_oa_config *oa_c
return oa_bo;
}
-static void xe_oa_update_last_fence(struct xe_oa_stream *stream, struct dma_fence *fence)
-{
- dma_fence_put(stream->last_fence);
- stream->last_fence = dma_fence_get(fence);
-}
-
static void xe_oa_fence_work_fn(struct work_struct *w)
{
struct xe_oa_fence *ofence = container_of(w, typeof(*ofence), work.work);
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 6/7] drm/xe: Reject vm_ops->access on BO mappings of an unplugged device
2026-11-05 0:16 [PATCH v4 0/7] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
` (4 preceding siblings ...)
2026-11-05 0:16 ` [PATCH v4 5/7] drm/xe/oa: Wait for in-flight OA batches before stream HW teardown Umesh Nerlige Ramappa
@ 2026-11-05 0:16 ` Umesh Nerlige Ramappa
2026-11-05 0:16 ` [PATCH v4 7/7] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset Umesh Nerlige Ramappa
` (4 subsequent siblings)
10 siblings, 0 replies; 16+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-11-05 0:16 UTC (permalink / raw)
To: intel-xe, shekhar.chauhan, Matthew Brost; +Cc: harish.chegondi
A userspace mapping of a BO can outlive the device, e.g. across unbind
or a PCI slot reset. After drm_dev_unplug() the fault handler only
installs a dummy page, but ptrace, /proc/<pid>/mem and
process_vm_readv() can't use get_user_pages() on these VM_PFNMAP vmas
and fall back to vm_ops->access(), i.e. xe_bo_vm_access().
xe_bo_vm_access() doesn't check whether the device is still there. For
a BO in VRAM, xe_ttm_access_memory() then either goes through the VRAM
iomap, which is unmapped on remove, or submits a migrate job after the
GT has been torn down. This applies to GEM mmaps and to the OA buffer
mmap of an OA stream that outlives the device.
Enter a drm_dev_enter() section in xe_bo_vm_access() and fail with
-ENODEV once the device is unplugged, like xe_bo_cpu_fault() does.
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
---
drivers/gpu/drm/xe/xe_bo.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 42a6aa1a2e4a..a74c38df2bdd 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -2345,9 +2345,20 @@ static int xe_bo_vm_access(struct vm_area_struct *vma, unsigned long addr,
struct ttm_buffer_object *ttm_bo = vma->vm_private_data;
struct xe_bo *bo = ttm_to_xe_bo(ttm_bo);
struct xe_device *xe = xe_bo_device(bo);
+ int idx, ret;
- guard(xe_pm_runtime)(xe);
- return ttm_bo_vm_access(vma, addr, buf, len, write);
+ /*
+ * A mapping can outlive the device. Once it's unplugged, VRAM is unmapped and the
+ * migrate engines are gone, so refuse access, like the fault handler does.
+ */
+ if (!drm_dev_enter(&xe->drm, &idx))
+ return -ENODEV;
+
+ scoped_guard(xe_pm_runtime, xe)
+ ret = ttm_bo_vm_access(vma, addr, buf, len, write);
+
+ drm_dev_exit(idx);
+ return ret;
}
/**
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 7/7] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset
2026-11-05 0:16 [PATCH v4 0/7] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
` (5 preceding siblings ...)
2026-11-05 0:16 ` [PATCH v4 6/7] drm/xe: Reject vm_ops->access on BO mappings of an unplugged device Umesh Nerlige Ramappa
@ 2026-11-05 0:16 ` Umesh Nerlige Ramappa
2026-11-05 2:11 ` sashiko-bot
2026-11-05 1:20 ` ✗ CI.checkpatch: warning for Cleanup OA stream on PCI unbind/remove (rev4) Patchwork
` (3 subsequent siblings)
10 siblings, 1 reply; 16+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-11-05 0:16 UTC (permalink / raw)
To: intel-xe, shekhar.chauhan, Matthew Brost; +Cc: harish.chegondi
An OA stream fd can outlive the device: after a PCI slot reset or after
unbind. The poll hrtimer and userspace calls on the fd could then access
MMIO and other device-bound objects that were released on remove,
causing a NULL pointer dereference, and xe_oa_release() would tear down
against freed objects.
Call xe_oa_quiesce() from xe_oa_fini() to cleanup the stream resources.
Only the stream struct stays allocated, with stream_lock and poll_wq
valid, until the fd is closed or the process owning the fd exits.
Once dead, OA interfaces return -ENODEV, poll reports EPOLLERR |
EPOLLHUP, and xe_oa_release() frees the stream struct and drops the drm
device reference.
Note:
- xe_oa_fini() is a devm action and runs after drm_dev_unplug() in
xe_device_remove(). drm_dev_unplug() has zapped the OA buffer mmaps by
then and refaults get a dummy page, so the OA buffer can be freed. Each
vma holds a reference on the BO, which keeps the BO object alive until
munmap. xe_oa_mmap() runs in a drm_dev_enter() section, which
drm_dev_unplug() waits for, so no new mmap can reference the OA buffer
once it is freed. stream_lock can't be used for that, since mmap runs
under mmap_lock and read holds stream_lock across user copies.
- With an mmap still around, the OA buffer is no longer pinned when
xe_bo_pinned_fini() DMA-unmaps the remaining kernel BOs, and
xe_bo_pci_dev_remove_all() ran while it was still pinned. Drop its DMA
mapping in quiesce while it is still pinned, so it doesn't outlive the
device.
- Unbind does not reset the GT or the device, so cleanup HW state as
well in this case, unless the device is wedged. Don't restore the
context state of a stream on an exec queue, the exec queue goes away
with the device. Kill the exec queue before waiting for pending OA
batches, so that the ones that haven't run yet are canceled.
- drm_ioctl() only checks for unplug on entry, so an OA ioctl that
started before drm_dev_unplug() could still open a stream, or access
oa->xe and the metrics idr, around xe_oa_fini(). Run the OA ioctls in
a drm_dev_enter() section, so drm_dev_unplug() waits for them.
- A stream can be released after drm_dev_unplug(), but before
xe_oa_fini() quiesces it. Release the stream in a drm_dev_enter()
section, so that drm_dev_unplug() waits for a release in progress, and
quiesce the stream on release once the device is unplugged.
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
---
v2: Include Sashiko's comments
v3: Fix circular lockdep issue due to scope of stream->mmap_mutex
v4: Rely on drm_dev_unplug() to zap OA buffer mmaps and on the dummy page
for refaults. Drop the OA specific fault handler, the per OA buffer
mmap offset and mmap_mutex. Don't reject non-zero mmap offsets, that
would change the uAPI. Split out the stream destroy refactor and the
runtime PM move into separate patches. DMA-unmap the OA buffer on
quiesce and run the OA ioctls in a drm_dev_enter() section instead
of the per-GT quiesced flag. Don't restore the context state on
quiesce, cancel pending OA batches on quiesce and quiesce a stream
released during removal (Sashiko).
---
drivers/gpu/drm/xe/xe_oa.c | 212 +++++++++++++++++++++++++---
drivers/gpu/drm/xe/xe_oa_types.h | 3 +
drivers/gpu/drm/xe/xe_observation.c | 23 ++-
3 files changed, 217 insertions(+), 21 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 31fc1e7675de..175e833520ba 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -261,13 +261,18 @@ static bool mert_wa_14026633728(struct xe_oa_stream *s)
static bool xe_oa_buffer_check_unlocked(struct xe_oa_stream *stream)
{
- u32 gtt_offset = xe_bo_ggtt_addr(stream->oa_buffer.bo);
- u32 tail, hw_tail, partial_report_size, available;
+ u32 gtt_offset, tail, hw_tail, partial_report_size, available;
int report_size = stream->oa_buffer.format->size;
unsigned long flags;
spin_lock_irqsave(&stream->oa_buffer.ptr_lock, flags);
+ if (stream->dead) {
+ spin_unlock_irqrestore(&stream->oa_buffer.ptr_lock, flags);
+ return false;
+ }
+
+ gtt_offset = xe_bo_ggtt_addr(stream->oa_buffer.bo);
hw_tail = xe_oa_hw_tail_read(stream);
hw_tail -= gtt_offset;
@@ -319,6 +324,9 @@ static enum hrtimer_restart xe_oa_poll_check_timer_cb(struct hrtimer *hrtimer)
struct xe_oa_stream *stream =
container_of(hrtimer, typeof(*stream), poll_check_timer);
+ if (READ_ONCE(stream->dead))
+ return HRTIMER_NORESTART;
+
if (xe_oa_buffer_check_unlocked(stream))
wake_up(&stream->poll_wq);
@@ -530,12 +538,19 @@ static void xe_oa_disable(struct xe_oa_stream *stream)
static int xe_oa_wait_unlocked(struct xe_oa_stream *stream)
{
+ int ret;
+
/* We might wait indefinitely if periodic sampling is not enabled */
if (!stream->periodic)
return -EINVAL;
- return wait_event_interruptible(stream->poll_wq,
- xe_oa_buffer_check_unlocked(stream));
+ ret = wait_event_interruptible(stream->poll_wq,
+ READ_ONCE(stream->dead) ||
+ xe_oa_buffer_check_unlocked(stream));
+ if (ret)
+ return ret;
+
+ return READ_ONCE(stream->dead) ? -ENODEV : 0;
}
#define OASTATUS_RELEVANT_BITS (OASTATUS_MMIO_TRG_Q_FULL | OASTATUS_COUNTER_OVERFLOW | \
@@ -564,6 +579,9 @@ static ssize_t xe_oa_read(struct file *file, char __user *buf,
size_t offset = 0;
int ret;
+ if (READ_ONCE(stream->dead))
+ return -ENODEV;
+
if (!stream->sample)
return -EINVAL;
@@ -574,13 +592,14 @@ static ssize_t xe_oa_read(struct file *file, char __user *buf,
return ret;
mutex_lock(&stream->stream_lock);
- ret = __xe_oa_read(stream, buf, count, &offset);
+ ret = stream->dead ? -ENODEV :
+ __xe_oa_read(stream, buf, count, &offset);
mutex_unlock(&stream->stream_lock);
} while (!offset && !ret);
} else {
xe_oa_buffer_check_unlocked(stream);
mutex_lock(&stream->stream_lock);
- ret = __xe_oa_read(stream, buf, count, &offset);
+ ret = stream->dead ? -ENODEV : __xe_oa_read(stream, buf, count, &offset);
mutex_unlock(&stream->stream_lock);
}
@@ -607,6 +626,9 @@ static __poll_t xe_oa_poll_locked(struct xe_oa_stream *stream,
poll_wait(file, &stream->poll_wq, wait);
+ if (stream->dead)
+ return EPOLLERR | EPOLLHUP;
+
/*
* We don't explicitly check whether there's something to read here since this
* path may be hot depending on what else userspace is polling, or on the timeout
@@ -863,8 +885,11 @@ static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
xe_mmio_write32(mmio, __oa_regs(stream)->oa_debug,
oag_configure_mmio_trigger(stream, false));
- /* disable the context save/restore or OAR counters */
- if (stream->exec_q)
+ /*
+ * disable the context save/restore or OAR counters, unless the device is going away
+ * and the context with it
+ */
+ if (stream->exec_q && !READ_ONCE(stream->dead))
xe_oa_configure_oa_context(stream, false);
/* Make sure we disable noa to save power. */
@@ -885,7 +910,7 @@ static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
/*
* Wait for the last OA batch of the stream, so that it can't program the HW after the HW
- * teardown.
+ * teardown. If the device is going away, cancel the batches that haven't run yet.
*/
static void xe_oa_stream_drain(struct xe_oa_stream *stream)
{
@@ -895,6 +920,13 @@ static void xe_oa_stream_drain(struct xe_oa_stream *stream)
if (!stream->last_fence || dma_fence_is_signaled(stream->last_fence))
return;
+ if (READ_ONCE(stream->dead)) {
+ if (q->vm)
+ xe_exec_queue_kill(q);
+ else
+ q->ops->kill(q);
+ }
+
timeout = msecs_to_jiffies(q->sched_props.job_timeout_ms) + HZ;
if (!dma_fence_wait_timeout(stream->last_fence, false, timeout))
drm_err(&stream->oa->xe->drm, "Timed out waiting for OA batch\n");
@@ -1614,7 +1646,8 @@ static int xe_oa_disable_locked(struct xe_oa_stream *stream)
xe_oa_stream_disable(stream);
- if (stream->no_preempt)
+ /* No need to restore preemption for an exec queue going away with the device */
+ if (stream->no_preempt && !READ_ONCE(stream->dead))
ret = xe_oa_enable_preempt_timeslice(stream);
stream->enabled = false;
@@ -1697,6 +1730,9 @@ static long xe_oa_ioctl_locked(struct xe_oa_stream *stream,
unsigned int cmd,
unsigned long arg)
{
+ if (stream->dead)
+ return -ENODEV;
+
switch (cmd) {
case DRM_XE_OBSERVATION_IOCTL_ENABLE:
return xe_oa_enable_locked(stream);
@@ -1729,6 +1765,12 @@ static long xe_oa_ioctl(struct file *file,
static void xe_oa_destroy_locked(struct xe_oa_stream *stream)
{
+ if (stream->dead) {
+ mutex_destroy(&stream->stream_lock);
+ kfree(stream);
+ return;
+ }
+
xe_pm_runtime_get(gt_to_xe(stream->gt));
/* A wedged device may be unresponsive, skip HW access */
@@ -1745,17 +1787,30 @@ static void xe_oa_destroy_locked(struct xe_oa_stream *stream)
kfree(stream);
}
+static void xe_oa_quiesce_oa_unit(struct xe_oa_unit *u, bool hw_accessible);
+
static int xe_oa_release(struct inode *inode, struct file *file)
{
struct xe_oa_stream *stream = file->private_data;
struct xe_gt *gt = stream->gt;
+ struct xe_device *xe = gt_to_xe(gt);
+ int idx;
mutex_lock(>->oa.gt_lock);
- xe_oa_destroy_locked(stream);
+ if (drm_dev_enter(&xe->drm, &idx)) {
+ /* drm_dev_unplug() waits for this, so xe_oa_fini() can't run under us */
+ xe_oa_destroy_locked(stream);
+ drm_dev_exit(idx);
+ } else {
+ /* The device is going away, quiesce the stream like xe_oa_fini() does */
+ if (!stream->dead)
+ xe_oa_quiesce_oa_unit(stream->oa_unit, !xe_wedged(xe));
+ xe_oa_destroy_locked(stream);
+ }
mutex_unlock(>->oa.gt_lock);
/* Release the reference the OA stream kept on the driver */
- drm_dev_put(>_to_xe(gt)->drm);
+ drm_dev_put(&xe->drm);
return 0;
}
@@ -1763,11 +1818,13 @@ static int xe_oa_release(struct inode *inode, struct file *file)
static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
{
struct xe_oa_stream *stream = file->private_data;
+ struct xe_device *xe = gt_to_xe(stream->gt);
int ret = xe_observation_paranoid_check();
- struct xe_bo *bo = stream->oa_buffer.bo;
+ struct xe_bo *bo;
+ int idx;
if (ret) {
- drm_dbg(&stream->oa->xe->drm, "Insufficient privilege to map OA buffer\n");
+ drm_dbg(&xe->drm, "Insufficient privilege to map OA buffer\n");
return ret;
}
@@ -1780,10 +1837,26 @@ static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
return -EINVAL;
}
+ /*
+ * xe_oa_quiesce() frees the OA buffer only after drm_dev_unplug(), which waits for
+ * this section to finish. Can't use stream_lock here, it is held across user copies
+ * which fault on mmap_lock, held by the caller.
+ */
+ if (!drm_dev_enter(&xe->drm, &idx))
+ return -ENODEV;
+
+ if (READ_ONCE(stream->dead)) {
+ ret = -ENODEV;
+ goto exit;
+ }
+
+ bo = stream->oa_buffer.bo;
+
/* Can mmap the entire OA buffer or nothing (no partial OA buffer mmaps) */
if (vma->vm_end - vma->vm_start != xe_bo_size(bo)) {
- drm_dbg(&stream->oa->xe->drm, "Wrong mmap size, must be OA buffer size\n");
- return -EINVAL;
+ drm_dbg(&xe->drm, "Wrong mmap size, must be OA buffer size\n");
+ ret = -EINVAL;
+ goto exit;
}
/*
@@ -1791,15 +1864,19 @@ static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
* VM_MAYSHARE, don't copy the vma on fork
*/
if (vma->vm_flags & (VM_WRITE | VM_EXEC | VM_SHARED | VM_MAYSHARE)) {
- drm_dbg(&stream->oa->xe->drm, "mmap must be read only\n");
- return -EINVAL;
+ drm_dbg(&xe->drm, "mmap must be read only\n");
+ ret = -EINVAL;
+ goto exit;
}
vm_flags_mod(vma, VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP | VM_DONTCOPY,
VM_MAYWRITE | VM_MAYEXEC);
vma->vm_pgoff = drm_vma_node_start(&bo->ttm.base.vma_node);
- return drm_gem_mmap_obj(&bo->ttm.base, xe_bo_size(bo), vma);
+ ret = drm_gem_mmap_obj(&bo->ttm.base, xe_bo_size(bo), vma);
+exit:
+ drm_dev_exit(idx);
+ return ret;
}
static const struct file_operations xe_oa_fops = {
@@ -2625,6 +2702,95 @@ static void xe_oa_unregister(void *arg)
oa->metrics_kobj = NULL;
}
+static void xe_oa_quiesce_oa_unit(struct xe_oa_unit *u, bool hw_accessible)
+{
+ struct xe_oa_stream *stream = u->exclusive_stream;
+ unsigned long flags;
+
+ if (!stream)
+ return;
+
+ mutex_lock(&stream->stream_lock);
+
+ spin_lock_irqsave(&stream->oa_buffer.ptr_lock, flags);
+ WRITE_ONCE(stream->dead, true);
+ spin_unlock_irqrestore(&stream->oa_buffer.ptr_lock, flags);
+
+ if (stream->enabled && hw_accessible)
+ xe_oa_disable_locked(stream);
+
+ stream->enabled = false;
+
+ if (stream->sample)
+ hrtimer_cancel(&stream->poll_check_timer);
+
+ wake_up_all(&stream->poll_wq);
+
+ xe_oa_stream_drain(stream);
+
+ /*
+ * Restore the HW state while the stream still holds its runtime PM ref and exec_q.
+ * The device is not reset on unbind, so this can't be left to a later reset.
+ */
+ if (hw_accessible)
+ xe_oa_stream_hw_teardown(stream);
+
+ /*
+ * drm_dev_unplug() has already zapped the userspace mappings of the OA buffer and
+ * refaults get a dummy page, so the OA buffer can go. Each vma holds a reference on
+ * the BO, keeping the BO object itself alive until munmap. The BO is then no longer
+ * pinned when xe_bo_pinned_fini() DMA-unmaps the other kernel BOs, so drop its DMA
+ * mapping here, while it is still pinned.
+ */
+ xe_bo_dma_unmap_pinned(stream->oa_buffer.bo);
+ xe_oa_stream_free_resources(stream);
+ if (stream->exec_q) {
+ xe_exec_queue_put(stream->exec_q);
+ stream->exec_q = NULL;
+ }
+ drm_syncobj_put(stream->ufence_syncobj);
+
+ WRITE_ONCE(u->exclusive_stream, NULL);
+ mutex_unlock(&stream->stream_lock);
+}
+
+static void xe_oa_quiesce_gt(struct xe_gt *gt, bool hw_accessible)
+{
+ int i;
+
+ mutex_lock(>->oa.gt_lock);
+ for (i = 0; i < gt->oa.num_oa_units; i++)
+ xe_oa_quiesce_oa_unit(>->oa.oa_unit[i], hw_accessible);
+ mutex_unlock(>->oa.gt_lock);
+}
+
+/**
+ * xe_oa_quiesce - Disable all active OA streams on driver unbind or PCI slot reset
+ * @xe: @xe_device
+ *
+ * Disables the OA unit and stops the poll timer of every active stream, marks it dead
+ * and releases all device-bound resources (OA buffer, exec queues, configs, references).
+ * Unless the device is wedged, the HW state (whitelist, metric set, forcewake, preemption)
+ * is restored first. Any further read, poll, mmap or ioctl on the stream fd is rejected
+ * (-ENODEV). Only the stream struct stays allocated until userspace closes the fd, at
+ * which point xe_oa_release() just frees it.
+ */
+static void xe_oa_quiesce(struct xe_device *xe)
+{
+ struct xe_gt *gt;
+ u8 id;
+
+ if (!xe->oa.xe)
+ return;
+
+ /*
+ * A wedged device may be unresponsive and a driver FLR follows on fini, so skip HW
+ * access there and only release the SW resources.
+ */
+ for_each_gt(gt, xe, id)
+ xe_oa_quiesce_gt(gt, !xe_wedged(xe));
+}
+
/**
* xe_oa_register - Xe OA registration
* @xe: @xe_device
@@ -2936,6 +3102,14 @@ static void xe_oa_fini(void *arg)
if (!oa->xe)
return;
+ /*
+ * Devm action, so this runs on unbind and PCI slot reset after xe_device_remove() even
+ * if streams are still open. Quiesce them before the configs they hold are destroyed.
+ * Must run after drm_dev_unplug(), which zaps the OA buffer mmaps and fences off mmap
+ * and the OA ioctls.
+ */
+ xe_oa_quiesce(xe);
+
idr_for_each(&oa->metrics_idr, destroy_config, oa);
idr_destroy(&oa->metrics_idr);
diff --git a/drivers/gpu/drm/xe/xe_oa_types.h b/drivers/gpu/drm/xe/xe_oa_types.h
index e876e9be92ba..e60a90bae1c6 100644
--- a/drivers/gpu/drm/xe/xe_oa_types.h
+++ b/drivers/gpu/drm/xe/xe_oa_types.h
@@ -214,6 +214,9 @@ struct xe_oa_stream {
/** @enabled: Whether the stream is currently enabled */
bool enabled;
+ /** @dead: Gate HW access when device is wedged or going away */
+ bool dead;
+
/** @oa_config: OA configuration used by the stream */
struct xe_oa_config *oa_config;
diff --git a/drivers/gpu/drm/xe/xe_observation.c b/drivers/gpu/drm/xe/xe_observation.c
index 39e05b9131a7..a3a8ac358c81 100644
--- a/drivers/gpu/drm/xe/xe_observation.c
+++ b/drivers/gpu/drm/xe/xe_observation.c
@@ -7,6 +7,7 @@
#include <linux/perf_event.h>
#include <linux/sysctl.h>
+#include <drm/drm_drv.h>
#include <uapi/drm/xe_drm.h>
#include "xe_eu_stall.h"
@@ -35,8 +36,8 @@ int xe_observation_paranoid_check(void)
return perf_allow_cpu();
}
-static int xe_oa_ioctl(struct drm_device *dev, struct drm_xe_observation_param *arg,
- struct drm_file *file)
+static int __xe_oa_ioctl(struct drm_device *dev, struct drm_xe_observation_param *arg,
+ struct drm_file *file)
{
switch (arg->observation_op) {
case DRM_XE_OBSERVATION_OP_STREAM_OPEN:
@@ -50,6 +51,24 @@ static int xe_oa_ioctl(struct drm_device *dev, struct drm_xe_observation_param *
}
}
+static int xe_oa_ioctl(struct drm_device *dev, struct drm_xe_observation_param *arg,
+ struct drm_file *file)
+{
+ int idx, ret;
+
+ /*
+ * drm_ioctl() only checks for unplug on entry. Hold off drm_dev_unplug() while the OA
+ * ioctls run, so that xe_oa_fini() can't tear down OA under them.
+ */
+ if (!drm_dev_enter(dev, &idx))
+ return -ENODEV;
+
+ ret = __xe_oa_ioctl(dev, arg, file);
+
+ drm_dev_exit(idx);
+ return ret;
+}
+
static int xe_eu_stall_ioctl(struct drm_device *dev, struct drm_xe_observation_param *arg,
struct drm_file *file)
{
--
2.55.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v4 4/7] drm/xe/oa: Skip OA HW teardown on a wedged device
2026-11-05 0:16 ` [PATCH v4 4/7] drm/xe/oa: Skip OA HW teardown on a wedged device Umesh Nerlige Ramappa
@ 2026-11-05 0:44 ` sashiko-bot
0 siblings, 0 replies; 16+ messages in thread
From: sashiko-bot @ 2026-11-05 0:44 UTC (permalink / raw)
To: Umesh Nerlige Ramappa, intel-xe
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Critical] drm/xe/oa: active hrtimer freed in xe_oa_destroy_locked() when wedged
--
commit c641d0f6b741ae6f9b164a82fa739d83e4b9de65
Author: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
drm/xe/oa: Skip OA HW teardown on a wedged device
This commit skips OA hardware disable and teardown operations when closing an
OA stream on a wedged device to avoid MMIO waits, batch submissions, and
forcewake hardware accesses on an unresponsive or disabled device.
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index fabbbcf16f4ef..7552ace821caf 100644
> --- a/drivers/gpu/drm/xe/xe_oa.c
> +++ b/drivers/gpu/drm/xe/xe_oa.c
[ ... ]
> @@ -1705,7 +1712,8 @@ static void xe_oa_destroy_locked(struct xe_oa_stream *stream)
> {
> xe_pm_runtime_get(gt_to_xe(stream->gt));
>
> - if (stream->enabled)
> + /* A wedged device may be unresponsive, skip HW access */
> + if (stream->enabled && !xe_wedged(gt_to_xe(stream->gt)))
> xe_oa_disable_locked(stream);
[Severity: Critical]
When an enabled sampling OA stream (where stream->sample is true) is closed
after the device becomes wedged, does skipping xe_oa_disable_locked(stream)
here leave stream->poll_check_timer armed while the stream and its OA buffer
are freed?
When a sampling stream is enabled via
xe_oa_enable_locked() -> xe_oa_stream_enable(), it starts
stream->poll_check_timer. The only place that cancels this timer is
xe_oa_stream_disable(), which is called from xe_oa_disable_locked():
drivers/gpu/drm/xe/xe_oa.c:xe_oa_stream_disable() {
xe_oa_disable(stream);
if (stream->sample)
hrtimer_cancel(&stream->poll_check_timer);
...
}
When xe_wedged() is true, xe_oa_destroy_locked() now skips
xe_oa_disable_locked() and proceeds directly to:
xe_oa_destroy_locked()
-> xe_oa_stream_destroy()
-> xe_oa_stream_free_resources()
-> xe_oa_free_oa_buffer()
-> kfree(stream)
This frees the active hrtimer and unpins and frees stream->oa_buffer.bo
while stream->poll_check_timer is still queued. When
xe_oa_poll_check_timer_cb() next fires, it will dereference the freed stream
and stream->oa_buffer.bo, read MMIO on the wedged device via
xe_oa_hw_tail_read(), and re-arm itself with HRTIMER_RESTART:
drivers/gpu/drm/xe/xe_oa.c:xe_oa_poll_check_timer_cb() {
struct xe_oa_stream *stream =
container_of(hrtimer, typeof(*stream), poll_check_timer);
if (xe_oa_buffer_check_unlocked(stream))
wake_up(&stream->poll_wq);
hrtimer_forward_now(hrtimer, ns_to_ktime(stream->poll_period_ns));
return HRTIMER_RESTART;
}
Even with the subsequent patch in this series that handles device unplug in
xe_oa_release(), closing an OA stream fd on a wedged device that has not
been unplugged still enters the drm_dev_enter() branch in xe_oa_release()
and calls xe_oa_destroy_locked().
Should stream->poll_check_timer still be cancelled when stream->enabled and
stream->sample are true, even when the hardware disable in xe_oa_disable()
is skipped for a wedged device?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261105001559.3288915-9-umesh.nerlige.ramappa@intel.com?part=4
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v4 5/7] drm/xe/oa: Wait for in-flight OA batches before stream HW teardown
2026-11-05 0:16 ` [PATCH v4 5/7] drm/xe/oa: Wait for in-flight OA batches before stream HW teardown Umesh Nerlige Ramappa
@ 2026-11-05 1:03 ` sashiko-bot
2026-11-05 23:46 ` Umesh Nerlige Ramappa
0 siblings, 1 reply; 16+ messages in thread
From: sashiko-bot @ 2026-11-05 1:03 UTC (permalink / raw)
To: Umesh Nerlige Ramappa, intel-xe
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [High] drm/xe/oa: context LRI batch in xe_oa_disable_metric_set() is not drained
- [High] drm/xe/oa: post-teardown HW programming when xe_oa_stream_drain() times out
- [Medium] drm/xe/oa: missing xe_oa_stream_drain() on xe_oa_stream_init() error path
--
commit 82829afb190084d0c0c592c6968d740225601cf9
Author: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
drm/xe/oa: Wait for in-flight OA batches before stream HW teardown
This commit records the fence from context LRI batches in
stream->last_fence and adds xe_oa_stream_drain() to wait for
stream->last_fence with a timeout before running hardware teardown when an
OA stream is destroyed.
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index 7552ace821caf..31fc1e7675de0 100644
> --- a/drivers/gpu/drm/xe/xe_oa.c
> +++ b/drivers/gpu/drm/xe/xe_oa.c
> @@ -733,6 +733,12 @@ static void xe_oa_free_configs(struct xe_oa_stream *stream)
> dma_fence_put(stream->last_fence);
> }
>
> +static void xe_oa_update_last_fence(struct xe_oa_stream *stream, struct dma_fence *fence)
> +{
> + dma_fence_put(stream->last_fence);
> + stream->last_fence = dma_fence_get(fence);
> +}
> +
> static int xe_oa_load_with_lri(struct xe_oa_stream *stream, struct xe_oa_reg *reg_lri, u32 count)
> {
> struct dma_fence *fence;
> @@ -753,6 +759,7 @@ static int xe_oa_load_with_lri(struct xe_oa_stream *stream, struct xe_oa_reg *re
> goto free_bb;
> }
> xe_bb_free(bb, fence);
> + xe_oa_update_last_fence(stream, fence);
[Severity: Medium]
What happens if xe_oa_enable_metric_set() fails in xe_oa_emit_oa_config()
after xe_oa_configure_oa_context(stream, true) has already submitted the
enable LRI batch via xe_oa_load_with_lri()?
In drivers/gpu/drm/xe/xe_oa.c, xe_oa_enable_metric_set() submits the
context LRI batch before emitting the OA config:
drivers/gpu/drm/xe/xe_oa.c:xe_oa_enable_metric_set() {
...
if (stream->exec_q) {
ret = xe_oa_configure_oa_context(stream, true);
if (ret)
return ret;
}
return xe_oa_emit_oa_config(stream, stream->oa_config);
}
If xe_oa_emit_oa_config() fails (for example, due to an allocation failure
or xe_sync_entry_add_deps() error in xe_oa_submit_bb()),
xe_oa_stream_init() jumps to err_put_k_exec_q:
drivers/gpu/drm/xe/xe_oa.c:xe_oa_stream_init() {
...
err_put_k_exec_q:
xe_oa_disable_metric_set(stream);
xe_exec_queue_put(stream->k_exec_q);
err_free_oa_buf:
xe_oa_free_oa_buffer(stream);
err_fw_put:
xe_force_wake_put(gt_to_fw(gt), stream->fw_ref);
xe_pm_runtime_put(stream->oa->xe);
xe_oa_free_configs(stream);
}
Should this error path also call xe_oa_stream_drain(stream) so that the
in-flight LRI batches from enabling and disabling the OA context are
waited on before forcewake, runtime PM, and stream->last_fence are
released?
> dma_fence_put(fence);
>
> return 0;
> @@ -876,6 +883,23 @@ static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
> xe_mmio_rmw32(mmio, OAM_COMPRESSION_T3_CONTROL, OAM_LAT_MEASURE_ENABLE, 0);
> }
>
> +/*
> + * Wait for the last OA batch of the stream, so that it can't program the HW after the HW
> + * teardown.
> + */
> +static void xe_oa_stream_drain(struct xe_oa_stream *stream)
> +{
> + struct xe_exec_queue *q = stream->exec_q ?: stream->k_exec_q;
> + long timeout;
> +
> + if (!stream->last_fence || dma_fence_is_signaled(stream->last_fence))
> + return;
> +
> + timeout = msecs_to_jiffies(q->sched_props.job_timeout_ms) + HZ;
> + if (!dma_fence_wait_timeout(stream->last_fence, false, timeout))
> + drm_err(&stream->oa->xe->drm, "Timed out waiting for OA batch\n");
> +}
[Severity: High]
Can an OA config batch still execute and program OA registers after
xe_oa_stream_hw_teardown() if dma_fence_wait_timeout() times out here?
When userspace opens a stream or calls DRM_XE_OBSERVATION_IOCTL_CONFIG
with both an unsignaled input sync (without DRM_XE_SYNC_FLAG_SIGNAL) and
an output sync (with DRM_XE_SYNC_FLAG_SIGNAL), xe_oa_emit_oa_config()
calls xe_oa_submit_bb(stream, XE_OA_SUBMIT_ADD_DEPS, oa_bo->bb), which
attaches the input sync to the job via xe_sync_entry_add_deps() and
returns without waiting because num_signal is non-zero.
While that input sync remains unsignaled, the job stays queued in
q->entity waiting on the dependency callback and the scheduler TDR timer
has not started. If the stream is closed before the input sync is
signaled, dma_fence_wait_timeout() in xe_oa_stream_drain() will time out
after q->sched_props.job_timeout_ms + HZ and return without killing the
queue or canceling the pending job.
Because the pending xe_sched_job holds a reference on job->q until
xe_sched_job_destroy(), xe_exec_queue_put(stream->k_exec_q) in
xe_oa_stream_free_resources() does not destroy k_exec_q or tear down its
scheduler entity. If userspace signals the input sync after
xe_oa_stream_destroy() has finished, wouldn't the scheduler wake up and
run the OA config batch on the hardware after OA registers have been
restored and forcewake has been released?
[ ... ]
> @@ -913,6 +937,7 @@ static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
>
> mutex_destroy(&stream->stream_lock);
>
> + xe_oa_stream_drain(stream);
> if (!xe_wedged(stream->oa->xe))
> xe_oa_stream_hw_teardown(stream);
[Severity: High]
Does calling xe_oa_stream_drain(stream) before xe_oa_stream_hw_teardown()
leave the context-restore LRI batch submitted during teardown undrained?
During stream enable in xe_oa_enable_metric_set(),
xe_oa_configure_oa_context(stream, true) is immediately followed by
xe_oa_emit_oa_config(), which overwrites stream->last_fence with the
config batch fence.
Then, during teardown in xe_oa_stream_destroy(), xe_oa_stream_drain() runs
before xe_oa_stream_hw_teardown():
xe_oa_stream_destroy()
xe_oa_stream_drain()
xe_oa_stream_hw_teardown()
xe_oa_disable_metric_set()
if (stream->exec_q)
xe_oa_configure_oa_context(stream, false)
xe_oa_configure_oar_context() / xe_oa_configure_oac_context()
xe_oa_load_with_lri()
xe_oa_update_last_fence(stream, fence)
xe_force_wake_put()
xe_oa_stream_free_resources()
xe_oa_free_configs()
dma_fence_put(stream->last_fence)
When stream->exec_q is set, xe_oa_disable_metric_set() submits a new LRI
batch to restore OACTXCONTROL, OAR_OACONTROL or OAC_OACONTROL, and
RING_CONTEXT_CONTROL, updating stream->last_fence after
xe_oa_stream_drain() has already completed. xe_oa_stream_hw_teardown() and
xe_oa_stream_free_resources() then immediately release forcewake, runtime
PM, and stream->last_fence without waiting for that LRI batch to complete.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261105001559.3288915-9-umesh.nerlige.ramappa@intel.com?part=5
^ permalink raw reply [flat|nested] 16+ messages in thread
* ✗ CI.checkpatch: warning for Cleanup OA stream on PCI unbind/remove (rev4)
2026-11-05 0:16 [PATCH v4 0/7] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
` (6 preceding siblings ...)
2026-11-05 0:16 ` [PATCH v4 7/7] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset Umesh Nerlige Ramappa
@ 2026-11-05 1:20 ` Patchwork
2026-11-05 1:23 ` ✓ CI.KUnit: success " Patchwork
` (2 subsequent siblings)
10 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2026-11-05 1:20 UTC (permalink / raw)
To: Umesh Nerlige Ramappa; +Cc: intel-xe
== Series Details ==
Series: Cleanup OA stream on PCI unbind/remove (rev4)
URL : https://patchwork.freedesktop.org/series/177300/
State : warning
== Summary ==
+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
3009867cd31863246e4afc138520a7a8bd37bb11
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit e8b652fd29b8f723c5dd26e83d94053e5f468a92
Author: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Date: Wed Nov 4 16:16:07 2026 -0800
drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset
An OA stream fd can outlive the device: after a PCI slot reset or after
unbind. The poll hrtimer and userspace calls on the fd could then access
MMIO and other device-bound objects that were released on remove,
causing a NULL pointer dereference, and xe_oa_release() would tear down
against freed objects.
Call xe_oa_quiesce() from xe_oa_fini() to cleanup the stream resources.
Only the stream struct stays allocated, with stream_lock and poll_wq
valid, until the fd is closed or the process owning the fd exits.
Once dead, OA interfaces return -ENODEV, poll reports EPOLLERR |
EPOLLHUP, and xe_oa_release() frees the stream struct and drops the drm
device reference.
Note:
- xe_oa_fini() is a devm action and runs after drm_dev_unplug() in
xe_device_remove(). drm_dev_unplug() has zapped the OA buffer mmaps by
then and refaults get a dummy page, so the OA buffer can be freed. Each
vma holds a reference on the BO, which keeps the BO object alive until
munmap. xe_oa_mmap() runs in a drm_dev_enter() section, which
drm_dev_unplug() waits for, so no new mmap can reference the OA buffer
once it is freed. stream_lock can't be used for that, since mmap runs
under mmap_lock and read holds stream_lock across user copies.
- With an mmap still around, the OA buffer is no longer pinned when
xe_bo_pinned_fini() DMA-unmaps the remaining kernel BOs, and
xe_bo_pci_dev_remove_all() ran while it was still pinned. Drop its DMA
mapping in quiesce while it is still pinned, so it doesn't outlive the
device.
- Unbind does not reset the GT or the device, so cleanup HW state as
well in this case, unless the device is wedged. Don't restore the
context state of a stream on an exec queue, the exec queue goes away
with the device. Kill the exec queue before waiting for pending OA
batches, so that the ones that haven't run yet are canceled.
- drm_ioctl() only checks for unplug on entry, so an OA ioctl that
started before drm_dev_unplug() could still open a stream, or access
oa->xe and the metrics idr, around xe_oa_fini(). Run the OA ioctls in
a drm_dev_enter() section, so drm_dev_unplug() waits for them.
- A stream can be released after drm_dev_unplug(), but before
xe_oa_fini() quiesces it. Release the stream in a drm_dev_enter()
section, so that drm_dev_unplug() waits for a release in progress, and
quiesce the stream on release once the device is unplugged.
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
+ /mt/dim checkpatch 3379b0f74f31bfc3746b692822a7700aeeebe15d drm-intel
3741019fa558 drm/xe/oa: Use the drm device address_space for the OA stream fd
a4ccb6128ca5 drm/xe/oa: Split OA stream destroy into HW teardown and resource release
b602723d2f88 drm/xe/oa: Take the runtime PM reference in xe_oa_destroy_locked()
6c9acbfa8f9e drm/xe/oa: Skip OA HW teardown on a wedged device
-:58: ERROR:MISSING_SIGN_OFF: Missing Signed-off-by: line(s)
total: 1 errors, 0 warnings, 0 checks, 36 lines checked
74a4f4e5b9f2 drm/xe/oa: Wait for in-flight OA batches before stream HW teardown
-:84: ERROR:MISSING_SIGN_OFF: Missing Signed-off-by: line(s)
total: 1 errors, 0 warnings, 0 checks, 61 lines checked
fcb7baaaaaf6 drm/xe: Reject vm_ops->access on BO mappings of an unplugged device
e8b652fd29b8 drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset
^ permalink raw reply [flat|nested] 16+ messages in thread
* ✓ CI.KUnit: success for Cleanup OA stream on PCI unbind/remove (rev4)
2026-11-05 0:16 [PATCH v4 0/7] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
` (7 preceding siblings ...)
2026-11-05 1:20 ` ✗ CI.checkpatch: warning for Cleanup OA stream on PCI unbind/remove (rev4) Patchwork
@ 2026-11-05 1:23 ` Patchwork
2026-11-05 2:02 ` ✓ Xe.CI.BAT: " Patchwork
2026-11-05 15:18 ` ✓ Xe.CI.FULL: " Patchwork
10 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2026-11-05 1:23 UTC (permalink / raw)
To: Umesh Nerlige Ramappa; +Cc: intel-xe
== Series Details ==
Series: Cleanup OA stream on PCI unbind/remove (rev4)
URL : https://patchwork.freedesktop.org/series/177300/
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
[01:21:00] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[01:21:05] 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
[01:21:25] Starting KUnit Kernel (1/1)...
[01:21:25] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[01:21:25] ================= gpu_buddy (14 subtests) ==================
[01:21:25] [PASSED] gpu_test_buddy_alloc_limit
[01:21:25] [PASSED] gpu_test_buddy_alloc_optimistic
[01:21:25] [PASSED] gpu_test_buddy_alloc_pessimistic
[01:21:25] [PASSED] gpu_test_buddy_alloc_pathological
[01:21:25] [PASSED] gpu_test_buddy_alloc_contiguous
[01:21:25] [PASSED] gpu_test_buddy_alloc_clear
[01:21:25] [PASSED] gpu_test_buddy_alloc_range
[01:21:26] [PASSED] gpu_test_buddy_alloc_range_bias
[01:21:27] [PASSED] gpu_test_buddy_fragmentation_performance
[01:21:27] [PASSED] gpu_test_buddy_dirty_tracker_performance
[01:21:27] [PASSED] gpu_test_buddy_alloc_exceeds_max_order
[01:21:27] [PASSED] gpu_test_buddy_offset_aligned_allocation
[01:21:27] [PASSED] gpu_test_buddy_subtree_offset_alignment_stress
[01:21:27] [PASSED] gpu_test_buddy_addr_to_block
[01:21:27] ==================== [PASSED] gpu_buddy ====================
[01:21:27] ============================================================
[01:21:27] Testing complete. Ran 14 tests: passed: 14
[01:21:27] Elapsed time: 27.665s total, 5.189s configuring, 20.558s building, 1.873s 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
[01:21:27] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[01:21:30] 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
[01:22:08] Starting KUnit Kernel (1/1)...
[01:22:08] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[01:22:08] ================== guc_buf (11 subtests) ===================
[01:22:08] [PASSED] test_smallest
[01:22:08] [PASSED] test_largest
[01:22:08] [PASSED] test_granular
[01:22:08] [PASSED] test_unique
[01:22:08] [PASSED] test_overlap
[01:22:08] [PASSED] test_reusable
[01:22:08] [PASSED] test_too_big
[01:22:08] [PASSED] test_flush
[01:22:08] [PASSED] test_lookup
[01:22:08] [PASSED] test_data
[01:22:08] [PASSED] test_class
[01:22:08] ===================== [PASSED] guc_buf =====================
[01:22:08] =================== guc_dbm (7 subtests) ===================
[01:22:08] [PASSED] test_empty
[01:22:08] [PASSED] test_default
[01:22:08] ======================== test_size ========================
[01:22:08] [PASSED] 4
[01:22:08] [PASSED] 8
[01:22:08] [PASSED] 32
[01:22:08] [PASSED] 256
[01:22:08] ==================== [PASSED] test_size ====================
[01:22:08] ======================= test_reuse ========================
[01:22:08] [PASSED] 4
[01:22:08] [PASSED] 8
[01:22:08] [PASSED] 32
[01:22:08] [PASSED] 256
[01:22:08] =================== [PASSED] test_reuse ====================
[01:22:08] =================== test_range_overlap ====================
[01:22:08] [PASSED] 4
[01:22:08] [PASSED] 8
[01:22:08] [PASSED] 32
[01:22:08] [PASSED] 256
[01:22:08] =============== [PASSED] test_range_overlap ================
[01:22:08] =================== test_range_compact ====================
[01:22:08] [PASSED] 4
[01:22:08] [PASSED] 8
[01:22:08] [PASSED] 32
[01:22:08] [PASSED] 256
[01:22:08] =============== [PASSED] test_range_compact ================
[01:22:08] ==================== test_range_spare =====================
[01:22:08] [PASSED] 4
[01:22:08] [PASSED] 8
[01:22:08] [PASSED] 32
[01:22:08] [PASSED] 256
[01:22:08] ================ [PASSED] test_range_spare =================
[01:22:08] ===================== [PASSED] guc_dbm =====================
[01:22:08] ================== guc_idm (22 subtests) ===================
[01:22:08] [PASSED] bad_init
[01:22:08] [PASSED] no_init
[01:22:08] [PASSED] init_fini
[01:22:08] [PASSED] check_init_small
[01:22:08] [PASSED] check_init_shared
[01:22:08] [PASSED] check_used
[01:22:08] [PASSED] check_quota
[01:22:08] [PASSED] check_all
[01:22:08] [PASSED] check_limits
[01:22:08] [PASSED] check_overlap
[01:22:08] [PASSED] check_overlap_alloc
[01:22:08] [PASSED] check_overlap_release
[01:22:08] [PASSED] check_overlap_partial_init
[01:22:08] [PASSED] check_overlap_partial_shared_range_blocking
[01:22:08] [PASSED] check_used_usable
[01:22:08] [PASSED] check_used_shareable
[01:22:08] [PASSED] check_used_mixed
[01:22:08] [PASSED] check_release_usable_range
[01:22:08] [PASSED] check_release_shareable_range
[01:22:08] [PASSED] check_split_boundaries
[01:22:08] [PASSED] check_shareable_spare
[01:22:08] [PASSED] check_shareable_spare_fragmented_tail
[01:22:08] ===================== [PASSED] guc_idm =====================
[01:22:08] ============== guc_klv_helpers (13 subtests) ===============
[01:22:08] [PASSED] test_count
[01:22:08] [PASSED] test_encode_u32
[01:22:08] [PASSED] test_encode_u64
[01:22:08] [PASSED] test_encode_string
[01:22:08] [PASSED] test_encode_object_raw
[01:22:08] [PASSED] test_encode_object_klv
[01:22:08] [PASSED] test_encode_object_nested
[01:22:08] [PASSED] test_encode_object_basic
[01:22:08] ===================== test_decode_u16 =====================
[01:22:08] [PASSED] empty
[01:22:08] [PASSED] valid
[01:22:08] [PASSED] max
[01:22:08] [PASSED] big
[01:22:08] [PASSED] long
[01:22:08] ================= [PASSED] test_decode_u16 =================
[01:22:08] ===================== test_decode_u32 =====================
[01:22:08] [PASSED] empty
[01:22:08] [PASSED] valid
[01:22:08] [PASSED] max
[01:22:08] [PASSED] long
[01:22:08] ================= [PASSED] test_decode_u32 =================
[01:22:08] ===================== test_decode_u64 =====================
[01:22:08] [PASSED] empty
[01:22:08] [PASSED] short
[01:22:08] [PASSED] valid
[01:22:08] [PASSED] max
[01:22:08] [PASSED] long
[01:22:08] ================= [PASSED] test_decode_u64 =================
[01:22:08] ===================== test_decode_str =====================
[01:22:08] [PASSED] empty
[01:22:08] [PASSED] one
[01:22:08] [PASSED] one_trash
[01:22:08] [PASSED] two
[01:22:08] [PASSED] two_trash
[01:22:08] [PASSED] three
[01:22:08] [PASSED] dword
[01:22:08] [PASSED] four
[01:22:08] [PASSED] five
[01:22:08] [PASSED] six
[01:22:08] [PASSED] seven
[01:22:08] [PASSED] qword
[01:22:08] ================= [PASSED] test_decode_str =================
[01:22:08] [PASSED] test_print
[01:22:08] ================= [PASSED] guc_klv_helpers =================
[01:22:08] =================== xe_log (4 subtests) ====================
[01:22:08] [PASSED] demo_cper
[01:22:08] [PASSED] demo_dmesg
[01:22:08] ======================= test_dmesg ========================
[01:22:08] [PASSED] test_fatal
[01:22:08] [PASSED] test_fatal_tile
[01:22:08] [PASSED] test_fatal_gt
[01:22:08] [PASSED] test_fatal_comp
[01:22:08] [PASSED] test_fatal_comp_tile
[01:22:08] [PASSED] test_fatal_comp_gt
[01:22:08] [PASSED] test_fatal_all
[01:22:08] [PASSED] test_recoverable
[01:22:08] [PASSED] test_recoverable_tile
[01:22:08] [PASSED] test_recoverable_gt
[01:22:08] [PASSED] test_recoverable_comp
[01:22:08] [PASSED] test_recoverable_comp_tile
[01:22:08] [PASSED] test_recoverable_comp_gt
[01:22:08] [PASSED] test_recoverable_all
[01:22:08] [PASSED] test_info
[01:22:08] [PASSED] test_info_tile
[01:22:08] [PASSED] test_info_gt
[01:22:08] [PASSED] test_info_err
[01:22:08] [PASSED] test_info_comp
[01:22:08] [PASSED] test_info_comp_tile
[01:22:08] [PASSED] test_info_comp_gt
[01:22:08] [PASSED] test_info_all
[01:22:08] [PASSED] test_hw_fatal
[01:22:08] [PASSED] test_hw_recoverable
[01:22:08] [PASSED] test_hw_corrected
[01:22:08] [PASSED] test_hw_informational
[01:22:08] =================== [PASSED] test_dmesg ====================
[01:22:08] ====================== test_invalid =======================
[01:22:08] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[01:22:08] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[01:22:08] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[01:22:08] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[01:22:08] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[01:22:08] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[01:22:08] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[01:22:08] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[01:22:08] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[01:22:08] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[01:22:08] ================== [SKIPPED] test_invalid ==================
[01:22:08] ===================== [PASSED] xe_log ======================
[01:22:08] ================== no_relay (3 subtests) ===================
[01:22:08] [PASSED] xe_drops_guc2pf_if_not_ready
[01:22:08] [PASSED] xe_drops_guc2vf_if_not_ready
[01:22:08] [PASSED] xe_rejects_send_if_not_ready
[01:22:08] ==================== [PASSED] no_relay =====================
[01:22:08] ================== pf_relay (14 subtests) ==================
[01:22:08] [PASSED] pf_rejects_guc2pf_too_short
[01:22:08] [PASSED] pf_rejects_guc2pf_too_long
[01:22:08] [PASSED] pf_rejects_guc2pf_no_payload
[01:22:08] [PASSED] pf_fails_no_payload
[01:22:08] [PASSED] pf_fails_bad_origin
[01:22:08] [PASSED] pf_fails_bad_type
[01:22:08] [PASSED] pf_txn_reports_error
[01:22:08] [PASSED] pf_txn_sends_pf2guc
[01:22:08] [PASSED] pf_sends_pf2guc
[01:22:08] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[01:22:08] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[01:22:08] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[01:22:08] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[01:22:08] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[01:22:08] ==================== [PASSED] pf_relay =====================
[01:22:08] ================== vf_relay (3 subtests) ===================
[01:22:08] [PASSED] vf_rejects_guc2vf_too_short
[01:22:08] [PASSED] vf_rejects_guc2vf_too_long
[01:22:08] [PASSED] vf_rejects_guc2vf_no_payload
[01:22:08] ==================== [PASSED] vf_relay =====================
[01:22:08] ================ pf_gt_config (9 subtests) =================
[01:22:08] [PASSED] fair_contexts_1vf
[01:22:08] [PASSED] fair_doorbells_1vf
[01:22:08] [PASSED] fair_ggtt_1vf
[01:22:08] ====================== fair_vram_1vf ======================
[01:22:08] [PASSED] 3.50 GiB
[01:22:08] [PASSED] 11.5 GiB
[01:22:08] [PASSED] 15.5 GiB
[01:22:08] [PASSED] 31.5 GiB
[01:22:08] [PASSED] 63.5 GiB
[01:22:08] [PASSED] 1.91 GiB
[01:22:08] ================== [PASSED] fair_vram_1vf ==================
[01:22:08] ================ fair_vram_1vf_admin_only =================
[01:22:08] [PASSED] 3.50 GiB
[01:22:08] [PASSED] 11.5 GiB
[01:22:08] [PASSED] 15.5 GiB
[01:22:08] [PASSED] 31.5 GiB
[01:22:08] [PASSED] 63.5 GiB
[01:22:08] [PASSED] 1.91 GiB
[01:22:08] ============ [PASSED] fair_vram_1vf_admin_only =============
[01:22:08] ====================== fair_contexts ======================
[01:22:08] [PASSED] 1 VF
[01:22:08] [PASSED] 2 VFs
[01:22:08] [PASSED] 3 VFs
[01:22:08] [PASSED] 4 VFs
[01:22:08] [PASSED] 5 VFs
[01:22:08] [PASSED] 6 VFs
[01:22:08] [PASSED] 7 VFs
[01:22:08] [PASSED] 8 VFs
[01:22:08] [PASSED] 9 VFs
[01:22:08] [PASSED] 10 VFs
[01:22:08] [PASSED] 11 VFs
[01:22:08] [PASSED] 12 VFs
[01:22:08] [PASSED] 13 VFs
[01:22:08] [PASSED] 14 VFs
[01:22:08] [PASSED] 15 VFs
[01:22:08] [PASSED] 16 VFs
[01:22:08] [PASSED] 17 VFs
[01:22:08] [PASSED] 18 VFs
[01:22:08] [PASSED] 19 VFs
[01:22:08] [PASSED] 20 VFs
[01:22:08] [PASSED] 21 VFs
[01:22:08] [PASSED] 22 VFs
[01:22:08] [PASSED] 23 VFs
[01:22:08] [PASSED] 24 VFs
[01:22:08] [PASSED] 25 VFs
[01:22:08] [PASSED] 26 VFs
[01:22:08] [PASSED] 27 VFs
[01:22:08] [PASSED] 28 VFs
[01:22:08] [PASSED] 29 VFs
[01:22:08] [PASSED] 30 VFs
[01:22:08] [PASSED] 31 VFs
[01:22:08] [PASSED] 32 VFs
[01:22:08] [PASSED] 33 VFs
[01:22:08] [PASSED] 34 VFs
[01:22:08] [PASSED] 35 VFs
[01:22:08] [PASSED] 36 VFs
[01:22:08] [PASSED] 37 VFs
[01:22:08] [PASSED] 38 VFs
[01:22:08] [PASSED] 39 VFs
[01:22:08] [PASSED] 40 VFs
[01:22:08] [PASSED] 41 VFs
[01:22:08] [PASSED] 42 VFs
[01:22:08] [PASSED] 43 VFs
[01:22:08] [PASSED] 44 VFs
[01:22:08] [PASSED] 45 VFs
[01:22:08] [PASSED] 46 VFs
[01:22:08] [PASSED] 47 VFs
[01:22:08] [PASSED] 48 VFs
[01:22:08] [PASSED] 49 VFs
[01:22:08] [PASSED] 50 VFs
[01:22:08] [PASSED] 51 VFs
[01:22:08] [PASSED] 52 VFs
[01:22:08] [PASSED] 53 VFs
[01:22:08] [PASSED] 54 VFs
[01:22:08] [PASSED] 55 VFs
[01:22:08] [PASSED] 56 VFs
[01:22:08] [PASSED] 57 VFs
[01:22:08] [PASSED] 58 VFs
[01:22:08] [PASSED] 59 VFs
[01:22:08] [PASSED] 60 VFs
[01:22:08] [PASSED] 61 VFs
[01:22:08] [PASSED] 62 VFs
[01:22:08] [PASSED] 63 VFs
[01:22:08] ================== [PASSED] fair_contexts ==================
[01:22:08] ===================== fair_doorbells ======================
[01:22:08] [PASSED] 1 VF
[01:22:08] [PASSED] 2 VFs
[01:22:08] [PASSED] 3 VFs
[01:22:08] [PASSED] 4 VFs
[01:22:08] [PASSED] 5 VFs
[01:22:08] [PASSED] 6 VFs
[01:22:08] [PASSED] 7 VFs
[01:22:08] [PASSED] 8 VFs
[01:22:08] [PASSED] 9 VFs
[01:22:08] [PASSED] 10 VFs
[01:22:08] [PASSED] 11 VFs
[01:22:08] [PASSED] 12 VFs
[01:22:08] [PASSED] 13 VFs
[01:22:08] [PASSED] 14 VFs
[01:22:08] [PASSED] 15 VFs
[01:22:08] [PASSED] 16 VFs
[01:22:08] [PASSED] 17 VFs
[01:22:08] [PASSED] 18 VFs
[01:22:08] [PASSED] 19 VFs
[01:22:08] [PASSED] 20 VFs
[01:22:08] [PASSED] 21 VFs
[01:22:08] [PASSED] 22 VFs
[01:22:08] [PASSED] 23 VFs
[01:22:08] [PASSED] 24 VFs
[01:22:08] [PASSED] 25 VFs
[01:22:08] [PASSED] 26 VFs
[01:22:08] [PASSED] 27 VFs
[01:22:08] [PASSED] 28 VFs
[01:22:08] [PASSED] 29 VFs
[01:22:08] [PASSED] 30 VFs
[01:22:08] [PASSED] 31 VFs
[01:22:08] [PASSED] 32 VFs
[01:22:08] [PASSED] 33 VFs
[01:22:08] [PASSED] 34 VFs
[01:22:08] [PASSED] 35 VFs
[01:22:08] [PASSED] 36 VFs
[01:22:08] [PASSED] 37 VFs
[01:22:08] [PASSED] 38 VFs
[01:22:08] [PASSED] 39 VFs
[01:22:08] [PASSED] 40 VFs
[01:22:08] [PASSED] 41 VFs
[01:22:08] [PASSED] 42 VFs
[01:22:08] [PASSED] 43 VFs
[01:22:08] [PASSED] 44 VFs
[01:22:08] [PASSED] 45 VFs
[01:22:08] [PASSED] 46 VFs
[01:22:08] [PASSED] 47 VFs
[01:22:08] [PASSED] 48 VFs
[01:22:08] [PASSED] 49 VFs
[01:22:08] [PASSED] 50 VFs
[01:22:08] [PASSED] 51 VFs
[01:22:08] [PASSED] 52 VFs
[01:22:08] [PASSED] 53 VFs
[01:22:08] [PASSED] 54 VFs
[01:22:08] [PASSED] 55 VFs
[01:22:08] [PASSED] 56 VFs
[01:22:08] [PASSED] 57 VFs
[01:22:08] [PASSED] 58 VFs
[01:22:08] [PASSED] 59 VFs
[01:22:08] [PASSED] 60 VFs
[01:22:08] [PASSED] 61 VFs
[01:22:08] [PASSED] 62 VFs
[01:22:08] [PASSED] 63 VFs
[01:22:08] ================= [PASSED] fair_doorbells ==================
[01:22:08] ======================== fair_ggtt ========================
[01:22:08] [PASSED] 1 VF
[01:22:08] [PASSED] 2 VFs
[01:22:08] [PASSED] 3 VFs
[01:22:08] [PASSED] 4 VFs
[01:22:08] [PASSED] 5 VFs
[01:22:08] [PASSED] 6 VFs
[01:22:08] [PASSED] 7 VFs
[01:22:08] [PASSED] 8 VFs
[01:22:08] [PASSED] 9 VFs
[01:22:08] [PASSED] 10 VFs
[01:22:08] [PASSED] 11 VFs
[01:22:08] [PASSED] 12 VFs
[01:22:08] [PASSED] 13 VFs
[01:22:08] [PASSED] 14 VFs
[01:22:08] [PASSED] 15 VFs
[01:22:08] [PASSED] 16 VFs
[01:22:08] [PASSED] 17 VFs
[01:22:08] [PASSED] 18 VFs
[01:22:08] [PASSED] 19 VFs
[01:22:08] [PASSED] 20 VFs
[01:22:08] [PASSED] 21 VFs
[01:22:08] [PASSED] 22 VFs
[01:22:08] [PASSED] 23 VFs
[01:22:08] [PASSED] 24 VFs
[01:22:08] [PASSED] 25 VFs
[01:22:08] [PASSED] 26 VFs
[01:22:08] [PASSED] 27 VFs
[01:22:08] [PASSED] 28 VFs
[01:22:08] [PASSED] 29 VFs
[01:22:08] [PASSED] 30 VFs
[01:22:08] [PASSED] 31 VFs
[01:22:08] [PASSED] 32 VFs
[01:22:08] [PASSED] 33 VFs
[01:22:08] [PASSED] 34 VFs
[01:22:08] [PASSED] 35 VFs
[01:22:08] [PASSED] 36 VFs
[01:22:08] [PASSED] 37 VFs
[01:22:08] [PASSED] 38 VFs
[01:22:08] [PASSED] 39 VFs
[01:22:08] [PASSED] 40 VFs
[01:22:08] [PASSED] 41 VFs
[01:22:08] [PASSED] 42 VFs
[01:22:08] [PASSED] 43 VFs
[01:22:08] [PASSED] 44 VFs
[01:22:08] [PASSED] 45 VFs
[01:22:08] [PASSED] 46 VFs
[01:22:08] [PASSED] 47 VFs
[01:22:08] [PASSED] 48 VFs
[01:22:08] [PASSED] 49 VFs
[01:22:08] [PASSED] 50 VFs
[01:22:08] [PASSED] 51 VFs
[01:22:08] [PASSED] 52 VFs
[01:22:08] [PASSED] 53 VFs
[01:22:08] [PASSED] 54 VFs
[01:22:08] [PASSED] 55 VFs
[01:22:08] [PASSED] 56 VFs
[01:22:08] [PASSED] 57 VFs
[01:22:08] [PASSED] 58 VFs
[01:22:08] [PASSED] 59 VFs
[01:22:08] [PASSED] 60 VFs
[01:22:08] [PASSED] 61 VFs
[01:22:08] [PASSED] 62 VFs
[01:22:08] [PASSED] 63 VFs
[01:22:08] ==================== [PASSED] fair_ggtt ====================
[01:22:08] ======================== fair_vram ========================
[01:22:08] [PASSED] 1 VF
[01:22:08] [PASSED] 2 VFs
[01:22:08] [PASSED] 3 VFs
[01:22:08] [PASSED] 4 VFs
[01:22:08] [PASSED] 5 VFs
[01:22:08] [PASSED] 6 VFs
[01:22:08] [PASSED] 7 VFs
[01:22:08] [PASSED] 8 VFs
[01:22:08] [PASSED] 9 VFs
[01:22:08] [PASSED] 10 VFs
[01:22:08] [PASSED] 11 VFs
[01:22:08] [PASSED] 12 VFs
[01:22:08] [PASSED] 13 VFs
[01:22:08] [PASSED] 14 VFs
[01:22:08] [PASSED] 15 VFs
[01:22:08] [PASSED] 16 VFs
[01:22:08] [PASSED] 17 VFs
[01:22:08] [PASSED] 18 VFs
[01:22:08] [PASSED] 19 VFs
[01:22:08] [PASSED] 20 VFs
[01:22:08] [PASSED] 21 VFs
[01:22:08] [PASSED] 22 VFs
[01:22:08] [PASSED] 23 VFs
[01:22:08] [PASSED] 24 VFs
[01:22:08] [PASSED] 25 VFs
[01:22:08] [PASSED] 26 VFs
[01:22:08] [PASSED] 27 VFs
[01:22:08] [PASSED] 28 VFs
[01:22:08] [PASSED] 29 VFs
[01:22:08] [PASSED] 30 VFs
[01:22:08] [PASSED] 31 VFs
[01:22:08] [PASSED] 32 VFs
[01:22:08] [PASSED] 33 VFs
[01:22:08] [PASSED] 34 VFs
[01:22:08] [PASSED] 35 VFs
[01:22:08] [PASSED] 36 VFs
[01:22:08] [PASSED] 37 VFs
[01:22:08] [PASSED] 38 VFs
[01:22:08] [PASSED] 39 VFs
[01:22:08] [PASSED] 40 VFs
[01:22:08] [PASSED] 41 VFs
[01:22:08] [PASSED] 42 VFs
[01:22:08] [PASSED] 43 VFs
[01:22:08] [PASSED] 44 VFs
[01:22:08] [PASSED] 45 VFs
[01:22:08] [PASSED] 46 VFs
[01:22:08] [PASSED] 47 VFs
[01:22:08] [PASSED] 48 VFs
[01:22:08] [PASSED] 49 VFs
[01:22:08] [PASSED] 50 VFs
[01:22:08] [PASSED] 51 VFs
[01:22:08] [PASSED] 52 VFs
[01:22:08] [PASSED] 53 VFs
[01:22:08] [PASSED] 54 VFs
[01:22:08] [PASSED] 55 VFs
[01:22:08] [PASSED] 56 VFs
[01:22:08] [PASSED] 57 VFs
[01:22:08] [PASSED] 58 VFs
[01:22:08] [PASSED] 59 VFs
[01:22:08] [PASSED] 60 VFs
[01:22:08] [PASSED] 61 VFs
[01:22:08] [PASSED] 62 VFs
[01:22:08] [PASSED] 63 VFs
[01:22:08] ==================== [PASSED] fair_vram ====================
[01:22:08] ================== [PASSED] pf_gt_config ===================
[01:22:08] ===================== lmtt (1 subtest) =====================
[01:22:08] ======================== test_ops =========================
[01:22:08] [PASSED] 2-level
[01:22:08] [PASSED] multi-level
[01:22:08] ==================== [PASSED] test_ops =====================
[01:22:08] ====================== [PASSED] lmtt =======================
[01:22:08] ================= sriov_packet (1 subtest) =================
[01:22:08] [PASSED] test_descriptor_init
[01:22:08] ================== [PASSED] sriov_packet ===================
[01:22:08] ================= pf_service (11 subtests) =================
[01:22:08] [PASSED] pf_negotiate_any
[01:22:08] [PASSED] pf_negotiate_base_match
[01:22:08] [PASSED] pf_negotiate_base_newer
[01:22:08] [PASSED] pf_negotiate_base_next
[01:22:08] [SKIPPED] pf_negotiate_base_older (no older minor)
[01:22:08] [PASSED] pf_negotiate_base_prev
[01:22:08] [PASSED] pf_negotiate_latest_match
[01:22:08] [PASSED] pf_negotiate_latest_newer
[01:22:08] [PASSED] pf_negotiate_latest_next
[01:22:08] [SKIPPED] pf_negotiate_latest_older (no older minor)
[01:22:08] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[01:22:08] =================== [PASSED] pf_service ====================
[01:22:08] ================= xe_guc_g2g (2 subtests) ==================
[01:22:08] ============== xe_live_guc_g2g_kunit_default ==============
[01:22:08] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[01:22:08] ============== xe_live_guc_g2g_kunit_allmem ===============
[01:22:08] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[01:22:08] =================== [SKIPPED] xe_guc_g2g ===================
[01:22:08] =================== xe_mocs (2 subtests) ===================
[01:22:08] ================ xe_live_mocs_kernel_kunit ================
[01:22:08] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[01:22:08] ================ xe_live_mocs_reset_kunit =================
[01:22:08] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[01:22:08] ==================== [SKIPPED] xe_mocs =====================
[01:22:08] ================= xe_migrate (3 subtests) ==================
[01:22:08] ================= xe_migrate_sanity_kunit =================
[01:22:08] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[01:22:08] ================== xe_validate_ccs_kunit ==================
[01:22:08] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[01:22:08] ============= xe_migrate_access_memory_kunit ==============
[01:22:08] ========= [SKIPPED] xe_migrate_access_memory_kunit =========
[01:22:08] =================== [SKIPPED] xe_migrate ===================
[01:22:08] ================== xe_dma_buf (1 subtest) ==================
[01:22:08] ==================== xe_dma_buf_kunit =====================
[01:22:08] ================ [SKIPPED] xe_dma_buf_kunit ================
[01:22:08] =================== [SKIPPED] xe_dma_buf ===================
[01:22:08] ================= xe_bo_shrink (1 subtest) =================
[01:22:08] =================== xe_bo_shrink_kunit ====================
[01:22:08] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[01:22:08] ================== [SKIPPED] xe_bo_shrink ==================
[01:22:08] ==================== xe_bo (2 subtests) ====================
[01:22:08] ================== xe_ccs_migrate_kunit ===================
[01:22:08] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[01:22:08] ==================== xe_bo_evict_kunit ====================
[01:22:08] =============== [SKIPPED] xe_bo_evict_kunit ================
[01:22:08] ===================== [SKIPPED] xe_bo ======================
[01:22:08] =================== xe_any (9 subtests) ====================
[01:22:08] [PASSED] test_to_xe
[01:22:08] [PASSED] test_to_dev
[01:22:08] [PASSED] test_to_pdev
[01:22:08] [PASSED] test_to_drm
[01:22:08] [PASSED] test_if_pdev
[01:22:08] [PASSED] test_if_xe
[01:22:08] [PASSED] test_if_tile
[01:22:08] [PASSED] test_if_gt
[01:22:08] [PASSED] test_to_id
[01:22:08] ===================== [PASSED] xe_any ======================
[01:22:08] ==================== args (13 subtests) ====================
[01:22:08] [PASSED] count_args_test
[01:22:08] [PASSED] call_args_example
[01:22:08] [PASSED] call_args_test
[01:22:08] [PASSED] drop_first_arg_example
[01:22:08] [PASSED] drop_first_arg_test
[01:22:08] [PASSED] first_arg_example
[01:22:08] [PASSED] first_arg_test
[01:22:08] [PASSED] last_arg_example
[01:22:08] [PASSED] last_arg_test
[01:22:08] [PASSED] pick_arg_example
[01:22:08] [PASSED] if_args_example
[01:22:08] [PASSED] if_args_test
[01:22:08] [PASSED] sep_comma_example
[01:22:08] ====================== [PASSED] args =======================
[01:22:08] =================== xe_pci (3 subtests) ====================
[01:22:08] ==================== check_graphics_ip ====================
[01:22:08] [PASSED] 12.00 Xe_LP
[01:22:08] [PASSED] 12.10 Xe_LP+
[01:22:08] [PASSED] 12.55 Xe_HPG
[01:22:08] [PASSED] 12.60 Xe_HPC
[01:22:08] [PASSED] 12.70 Xe_LPG
[01:22:08] [PASSED] 12.71 Xe_LPG
[01:22:08] [PASSED] 12.74 Xe_LPG+
[01:22:08] [PASSED] 20.01 Xe2_HPG
[01:22:08] [PASSED] 20.02 Xe2_HPG
[01:22:08] [PASSED] 20.04 Xe2_LPG
[01:22:08] [PASSED] 30.00 Xe3_LPG
[01:22:08] [PASSED] 30.01 Xe3_LPG
[01:22:08] [PASSED] 30.03 Xe3_LPG
[01:22:08] [PASSED] 30.04 Xe3_LPG
[01:22:08] [PASSED] 30.05 Xe3_LPG
[01:22:08] [PASSED] 35.10 Xe3p_LPG
[01:22:08] [PASSED] 35.11 Xe3p_XPC
[01:22:08] ================ [PASSED] check_graphics_ip ================
[01:22:08] ===================== check_media_ip ======================
[01:22:08] [PASSED] 12.00 Xe_M
[01:22:08] [PASSED] 12.55 Xe_HPM
[01:22:08] [PASSED] 13.00 Xe_LPM+
[01:22:08] [PASSED] 13.01 Xe2_HPM
[01:22:08] [PASSED] 20.00 Xe2_LPM
[01:22:08] [PASSED] 30.00 Xe3_LPM
[01:22:08] [PASSED] 30.02 Xe3_LPM
[01:22:08] [PASSED] 35.00 Xe3p_LPM
[01:22:08] [PASSED] 35.03 Xe3p_HPM
[01:22:08] ================= [PASSED] check_media_ip ==================
[01:22:08] =================== check_platform_desc ===================
[01:22:08] [PASSED] 0x9A60 (TIGERLAKE)
[01:22:08] [PASSED] 0x9A68 (TIGERLAKE)
[01:22:08] [PASSED] 0x9A70 (TIGERLAKE)
[01:22:08] [PASSED] 0x9A40 (TIGERLAKE)
[01:22:08] [PASSED] 0x9A49 (TIGERLAKE)
[01:22:08] [PASSED] 0x9A59 (TIGERLAKE)
[01:22:08] [PASSED] 0x9A78 (TIGERLAKE)
[01:22:08] [PASSED] 0x9AC0 (TIGERLAKE)
[01:22:08] [PASSED] 0x9AC9 (TIGERLAKE)
[01:22:08] [PASSED] 0x9AD9 (TIGERLAKE)
[01:22:08] [PASSED] 0x9AF8 (TIGERLAKE)
[01:22:08] [PASSED] 0x4C80 (ROCKETLAKE)
[01:22:08] [PASSED] 0x4C8A (ROCKETLAKE)
[01:22:08] [PASSED] 0x4C8B (ROCKETLAKE)
[01:22:08] [PASSED] 0x4C8C (ROCKETLAKE)
[01:22:08] [PASSED] 0x4C90 (ROCKETLAKE)
[01:22:08] [PASSED] 0x4C9A (ROCKETLAKE)
[01:22:08] [PASSED] 0x4680 (ALDERLAKE_S)
[01:22:08] [PASSED] 0x4682 (ALDERLAKE_S)
[01:22:08] [PASSED] 0x4688 (ALDERLAKE_S)
[01:22:08] [PASSED] 0x468A (ALDERLAKE_S)
[01:22:08] [PASSED] 0x468B (ALDERLAKE_S)
[01:22:08] [PASSED] 0x4690 (ALDERLAKE_S)
[01:22:08] [PASSED] 0x4692 (ALDERLAKE_S)
[01:22:08] [PASSED] 0x4693 (ALDERLAKE_S)
[01:22:08] [PASSED] 0x46A0 (ALDERLAKE_P)
[01:22:08] [PASSED] 0x46A1 (ALDERLAKE_P)
[01:22:08] [PASSED] 0x46A2 (ALDERLAKE_P)
[01:22:08] [PASSED] 0x46A3 (ALDERLAKE_P)
[01:22:08] [PASSED] 0x46A6 (ALDERLAKE_P)
[01:22:08] [PASSED] 0x46A8 (ALDERLAKE_P)
[01:22:08] [PASSED] 0x46AA (ALDERLAKE_P)
[01:22:08] [PASSED] 0x462A (ALDERLAKE_P)
[01:22:08] [PASSED] 0x4626 (ALDERLAKE_P)
[01:22:08] [PASSED] 0x4628 (ALDERLAKE_P)
[01:22:08] [PASSED] 0x46B0 (ALDERLAKE_P)
[01:22:08] [PASSED] 0x46B1 (ALDERLAKE_P)
[01:22:08] [PASSED] 0x46B2 (ALDERLAKE_P)
[01:22:08] [PASSED] 0x46B3 (ALDERLAKE_P)
[01:22:08] [PASSED] 0x46C0 (ALDERLAKE_P)
[01:22:08] [PASSED] 0x46C1 (ALDERLAKE_P)
[01:22:08] [PASSED] 0x46C2 (ALDERLAKE_P)
[01:22:08] [PASSED] 0x46C3 (ALDERLAKE_P)
[01:22:08] [PASSED] 0x46D0 (ALDERLAKE_N)
[01:22:08] [PASSED] 0x46D1 (ALDERLAKE_N)
[01:22:08] [PASSED] 0x46D2 (ALDERLAKE_N)
[01:22:08] [PASSED] 0x46D3 (ALDERLAKE_N)
[01:22:08] [PASSED] 0x46D4 (ALDERLAKE_N)
[01:22:08] [PASSED] 0xA721 (ALDERLAKE_P)
[01:22:08] [PASSED] 0xA7A1 (ALDERLAKE_P)
[01:22:08] [PASSED] 0xA7A9 (ALDERLAKE_P)
[01:22:08] [PASSED] 0xA7AC (ALDERLAKE_P)
[01:22:08] [PASSED] 0xA7AD (ALDERLAKE_P)
[01:22:08] [PASSED] 0xA720 (ALDERLAKE_P)
[01:22:08] [PASSED] 0xA7A0 (ALDERLAKE_P)
[01:22:08] [PASSED] 0xA7A8 (ALDERLAKE_P)
[01:22:08] [PASSED] 0xA7AA (ALDERLAKE_P)
[01:22:08] [PASSED] 0xA7AB (ALDERLAKE_P)
[01:22:08] [PASSED] 0xA780 (ALDERLAKE_S)
[01:22:08] [PASSED] 0xA781 (ALDERLAKE_S)
[01:22:08] [PASSED] 0xA782 (ALDERLAKE_S)
[01:22:08] [PASSED] 0xA783 (ALDERLAKE_S)
[01:22:08] [PASSED] 0xA788 (ALDERLAKE_S)
[01:22:08] [PASSED] 0xA789 (ALDERLAKE_S)
[01:22:08] [PASSED] 0xA78A (ALDERLAKE_S)
[01:22:08] [PASSED] 0xA78B (ALDERLAKE_S)
[01:22:08] [PASSED] 0x4905 (DG1)
[01:22:08] [PASSED] 0x4906 (DG1)
[01:22:08] [PASSED] 0x4907 (DG1)
[01:22:08] [PASSED] 0x4908 (DG1)
[01:22:08] [PASSED] 0x4909 (DG1)
[01:22:08] [PASSED] 0x56C0 (DG2)
[01:22:08] [PASSED] 0x56C2 (DG2)
[01:22:08] [PASSED] 0x56C1 (DG2)
[01:22:08] [PASSED] 0x7D51 (METEORLAKE)
[01:22:08] [PASSED] 0x7DD1 (METEORLAKE)
[01:22:08] [PASSED] 0x7D41 (METEORLAKE)
[01:22:08] [PASSED] 0x7D67 (METEORLAKE)
[01:22:08] [PASSED] 0xB640 (METEORLAKE)
[01:22:08] [PASSED] 0x56A0 (DG2)
[01:22:08] [PASSED] 0x56A1 (DG2)
[01:22:08] [PASSED] 0x56A2 (DG2)
[01:22:08] [PASSED] 0x56BE (DG2)
[01:22:08] [PASSED] 0x56BF (DG2)
[01:22:08] [PASSED] 0x5690 (DG2)
[01:22:08] [PASSED] 0x5691 (DG2)
[01:22:08] [PASSED] 0x5692 (DG2)
[01:22:08] [PASSED] 0x56A5 (DG2)
[01:22:08] [PASSED] 0x56A6 (DG2)
[01:22:08] [PASSED] 0x56B0 (DG2)
[01:22:08] [PASSED] 0x56B1 (DG2)
[01:22:08] [PASSED] 0x56BA (DG2)
[01:22:08] [PASSED] 0x56BB (DG2)
[01:22:08] [PASSED] 0x56BC (DG2)
[01:22:08] [PASSED] 0x56BD (DG2)
[01:22:08] [PASSED] 0x5693 (DG2)
[01:22:08] [PASSED] 0x5694 (DG2)
[01:22:08] [PASSED] 0x5695 (DG2)
[01:22:08] [PASSED] 0x56A3 (DG2)
[01:22:08] [PASSED] 0x56A4 (DG2)
[01:22:08] [PASSED] 0x56B2 (DG2)
[01:22:08] [PASSED] 0x56B3 (DG2)
[01:22:08] [PASSED] 0x5696 (DG2)
[01:22:08] [PASSED] 0x5697 (DG2)
[01:22:08] [PASSED] 0xB69 (PVC)
[01:22:08] [PASSED] 0xB6E (PVC)
[01:22:08] [PASSED] 0xBD4 (PVC)
[01:22:08] [PASSED] 0xBD5 (PVC)
[01:22:08] [PASSED] 0xBD6 (PVC)
[01:22:08] [PASSED] 0xBD7 (PVC)
[01:22:08] [PASSED] 0xBD8 (PVC)
[01:22:08] [PASSED] 0xBD9 (PVC)
[01:22:08] [PASSED] 0xBDA (PVC)
[01:22:08] [PASSED] 0xBDB (PVC)
[01:22:08] [PASSED] 0xBE0 (PVC)
[01:22:08] [PASSED] 0xBE1 (PVC)
[01:22:08] [PASSED] 0xBE5 (PVC)
[01:22:08] [PASSED] 0x7D40 (METEORLAKE)
[01:22:08] [PASSED] 0x7D45 (METEORLAKE)
[01:22:08] [PASSED] 0x7D55 (METEORLAKE)
[01:22:08] [PASSED] 0x7D60 (METEORLAKE)
[01:22:08] [PASSED] 0x7DD5 (METEORLAKE)
[01:22:08] [PASSED] 0x6420 (LUNARLAKE)
[01:22:08] [PASSED] 0x64A0 (LUNARLAKE)
[01:22:08] [PASSED] 0x64B0 (LUNARLAKE)
[01:22:08] [PASSED] 0xE202 (BATTLEMAGE)
[01:22:08] [PASSED] 0xE209 (BATTLEMAGE)
[01:22:08] [PASSED] 0xE20B (BATTLEMAGE)
[01:22:08] [PASSED] 0xE20C (BATTLEMAGE)
[01:22:08] [PASSED] 0xE20D (BATTLEMAGE)
[01:22:08] [PASSED] 0xE210 (BATTLEMAGE)
[01:22:08] [PASSED] 0xE211 (BATTLEMAGE)
[01:22:08] [PASSED] 0xE212 (BATTLEMAGE)
[01:22:08] [PASSED] 0xE216 (BATTLEMAGE)
[01:22:08] [PASSED] 0xE220 (BATTLEMAGE)
[01:22:08] [PASSED] 0xE221 (BATTLEMAGE)
[01:22:08] [PASSED] 0xE222 (BATTLEMAGE)
[01:22:08] [PASSED] 0xE223 (BATTLEMAGE)
[01:22:08] [PASSED] 0xB080 (PANTHERLAKE)
[01:22:08] [PASSED] 0xB081 (PANTHERLAKE)
[01:22:08] [PASSED] 0xB082 (PANTHERLAKE)
[01:22:08] [PASSED] 0xB083 (PANTHERLAKE)
[01:22:08] [PASSED] 0xB084 (PANTHERLAKE)
[01:22:08] [PASSED] 0xB085 (PANTHERLAKE)
[01:22:08] [PASSED] 0xB086 (PANTHERLAKE)
[01:22:08] [PASSED] 0xB087 (PANTHERLAKE)
[01:22:08] [PASSED] 0xB08F (PANTHERLAKE)
[01:22:08] [PASSED] 0xB090 (PANTHERLAKE)
[01:22:08] [PASSED] 0xB0A0 (PANTHERLAKE)
[01:22:08] [PASSED] 0xB0A1 (PANTHERLAKE)
[01:22:08] [PASSED] 0xB0B0 (PANTHERLAKE)
[01:22:08] [PASSED] 0xFD80 (PANTHERLAKE)
[01:22:08] [PASSED] 0xFD81 (PANTHERLAKE)
[01:22:08] [PASSED] 0xD740 (NOVALAKE_S)
[01:22:08] [PASSED] 0xD741 (NOVALAKE_S)
[01:22:08] [PASSED] 0xD742 (NOVALAKE_S)
[01:22:08] [PASSED] 0xD743 (NOVALAKE_S)
[01:22:08] [PASSED] 0xD745 (NOVALAKE_S)
[01:22:08] [PASSED] 0xD74A (NOVALAKE_S)
[01:22:08] [PASSED] 0xD74B (NOVALAKE_S)
[01:22:08] [PASSED] 0x674C (CRESCENTISLAND)
[01:22:08] [PASSED] 0x674D (CRESCENTISLAND)
[01:22:08] [PASSED] 0x674E (CRESCENTISLAND)
[01:22:08] [PASSED] 0x674F (CRESCENTISLAND)
[01:22:08] [PASSED] 0x6750 (CRESCENTISLAND)
[01:22:08] [PASSED] 0x6751 (CRESCENTISLAND)
[01:22:08] [PASSED] 0x6752 (CRESCENTISLAND)
[01:22:08] [PASSED] 0xD750 (NOVALAKE_P)
[01:22:08] [PASSED] 0xD751 (NOVALAKE_P)
[01:22:08] [PASSED] 0xD752 (NOVALAKE_P)
[01:22:08] [PASSED] 0xD753 (NOVALAKE_P)
[01:22:08] [PASSED] 0xD754 (NOVALAKE_P)
[01:22:08] [PASSED] 0xD755 (NOVALAKE_P)
[01:22:08] [PASSED] 0xD756 (NOVALAKE_P)
[01:22:08] [PASSED] 0xD757 (NOVALAKE_P)
[01:22:08] [PASSED] 0xD75F (NOVALAKE_P)
[01:22:08] =============== [PASSED] check_platform_desc ===============
[01:22:08] ===================== [PASSED] xe_pci ======================
[01:22:08] ============= xe_rtp_tables_test (5 subtests) ==============
[01:22:08] ================== xe_rtp_table_gt_test ===================
[01:22:08] [PASSED] gt_was/14011060649
[01:22:08] [PASSED] gt_was/14011059788
[01:22:08] [PASSED] gt_was/14015795083
[01:22:08] [PASSED] gt_was/16021867713
[01:22:08] [PASSED] gt_was/14019449301
[01:22:08] [PASSED] gt_was/16028005424
[01:22:08] [PASSED] gt_was/14026578760
[01:22:08] [PASSED] gt_was/1409420604
[01:22:08] [PASSED] gt_was/1408615072
[01:22:08] [PASSED] gt_was/22010523718
[01:22:08] [PASSED] gt_was/14011006942
[01:22:08] [PASSED] gt_was/14014830051
[01:22:08] [PASSED] gt_was/18018781329
[01:22:08] [PASSED] gt_was/1509235366
[01:22:08] [PASSED] gt_was/18018781329
[01:22:08] [PASSED] gt_was/16016694945
[01:22:08] [PASSED] gt_was/14018575942
[01:22:08] [PASSED] gt_was/22016670082
[01:22:08] [PASSED] gt_was/22016670082
[01:22:08] [PASSED] gt_was/14017421178
[01:22:08] [PASSED] gt_was/16025250150
[01:22:08] [PASSED] gt_was/14021871409
[01:22:08] [PASSED] gt_was/16021865536
[01:22:08] [PASSED] gt_was/14021486841
[01:22:08] [PASSED] gt_was/14025160223
[01:22:08] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[01:22:08] [PASSED] gt_was/14025635424
[01:22:08] [PASSED] gt_was/16028005424
[01:22:08] ============== [PASSED] xe_rtp_table_gt_test ===============
[01:22:08] ================== xe_rtp_table_gt_test ===================
[01:22:08] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[01:22:08] [PASSED] gt_tunings/Tuning: 32B Access Enable
[01:22:08] [PASSED] gt_tunings/Tuning: L3 cache
[01:22:08] [PASSED] gt_tunings/Tuning: L3 cache - media
[01:22:08] [PASSED] gt_tunings/Tuning: Compression Overfetch
[01:22:08] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[01:22:08] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[01:22:08] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[01:22:08] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[01:22:08] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[01:22:08] [PASSED] gt_tunings/Tuning: Stateless compression control
[01:22:08] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[01:22:08] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[01:22:08] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[01:22:08] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[01:22:08] [PASSED] gt_tunings/Tuning: Force All Non-Compressible Memory Reads to be 256B Overfetches
[01:22:08] ============== [PASSED] xe_rtp_table_gt_test ===============
[01:22:08] ================== xe_rtp_table_oob_test ==================
[01:22:08] [PASSED] oob_was/1607983814
[01:22:08] [PASSED] oob_was/16010904313
[01:22:08] [PASSED] oob_was/18022495364
[01:22:08] [PASSED] oob_was/22012773006
[01:22:08] [PASSED] oob_was/14014475959
[01:22:08] [PASSED] oob_was/22011391025
[01:22:08] [PASSED] oob_was/22012727170
[01:22:08] [PASSED] oob_was/22012727685
[01:22:08] [PASSED] oob_was/22016596838
[01:22:08] [PASSED] oob_was/18020744125
[01:22:08] [PASSED] oob_was/1409600907
[01:22:08] [PASSED] oob_was/22014953428
[01:22:08] [PASSED] oob_was/16017236439
[01:22:08] [PASSED] oob_was/14019821291
[01:22:08] [PASSED] oob_was/14015076503
[01:22:08] [PASSED] oob_was/22016122933
[01:22:08] [PASSED] oob_was/14018913170
[01:22:08] [PASSED] oob_was/14018094691
[01:22:08] [PASSED] oob_was/18024947630
[01:22:08] [PASSED] oob_was/16022287689
[01:22:08] [PASSED] oob_was/13011645652
[01:22:08] [PASSED] oob_was/14022293748
[01:22:08] [PASSED] oob_was/22019794406
[01:22:08] [PASSED] oob_was/22019338487
[01:22:08] [PASSED] oob_was/16023588340
[01:22:08] [PASSED] oob_was/14019789679
[01:22:08] [PASSED] oob_was/14022866841
[01:22:08] [PASSED] oob_was/16021333562
[01:22:08] [PASSED] oob_was/14016712196
[01:22:08] [PASSED] oob_was/14015568240
[01:22:08] [PASSED] oob_was/18013179988
[01:22:08] [PASSED] oob_was/1508761755
[01:22:08] [PASSED] oob_was/16023105232
[01:22:08] [PASSED] oob_was/16026508708
[01:22:08] [PASSED] oob_was/14020001231
[01:22:08] [PASSED] oob_was/16023683509
[01:22:08] [PASSED] oob_was/14025515070
[01:22:08] [PASSED] oob_was/15015404425_disable
[01:22:08] [PASSED] oob_was/16026007364
[01:22:08] [PASSED] oob_was/14020316580
[01:22:08] [PASSED] oob_was/14025883347
[01:22:08] [PASSED] oob_was/16029380221
[01:22:08] [PASSED] oob_was/22022079272
[01:22:08] [PASSED] oob_was/16029897822
[01:22:08] [PASSED] oob_was/14026539277
[01:22:08] [PASSED] oob_was/14027054324
[01:22:08] [PASSED] oob_was/14025941587
[01:22:08] [PASSED] oob_was/16030224309
[01:22:08] [PASSED] oob_was/14028709524
[01:22:08] ============== [PASSED] xe_rtp_table_oob_test ==============
[01:22:08] ================ xe_rtp_table_dev_oob_test ================
[01:22:08] [PASSED] device_oob_was/22010954014
[01:22:08] [PASSED] device_oob_was/15015404425
[01:22:08] [PASSED] device_oob_was/22019338487_display
[01:22:08] [PASSED] device_oob_was/14022085890
[01:22:08] [PASSED] device_oob_was/14026633728
[01:22:08] [PASSED] device_oob_was/14026746987
[01:22:08] [PASSED] device_oob_was/14026779378
[01:22:08] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[01:22:08] ========== xe_rtp_table_missing_upper_bound_test ==========
[01:22:08] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[01:22:08] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[01:22:08] [PASSED] register_whitelist/1806527549
[01:22:08] [PASSED] register_whitelist/allow_read_ctx_timestamp
[01:22:08] [PASSED] register_whitelist/allow_read_queue_timestamp
[01:22:08] [PASSED] register_whitelist/16014440446
[01:22:08] [PASSED] register_whitelist/16017236439
[01:22:08] [PASSED] register_whitelist/16020183090
[01:22:08] [PASSED] register_whitelist/14024997852
[01:22:08] [PASSED] register_whitelist/14024997852
[01:22:08] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[01:22:08] =============== [PASSED] xe_rtp_tables_test ================
[01:22:08] =================== xe_rtp (3 subtests) ====================
[01:22:08] =================== xe_rtp_rules_tests ====================
[01:22:08] [PASSED] no
[01:22:08] [PASSED] yes
[01:22:08] [PASSED] no-and-no
[01:22:08] [PASSED] no-and-yes
[01:22:08] [PASSED] yes-and-no
[01:22:08] [PASSED] yes-and-yes
[01:22:08] [PASSED] no-or-no
[01:22:08] [PASSED] no-or-yes
[01:22:08] [PASSED] yes-or-no
[01:22:08] [PASSED] yes-or-yes
[01:22:08] [PASSED] no-yes-or-yes-no
[01:22:08] [PASSED] no-yes-or-yes-yes
[01:22:08] [PASSED] yes-yes-or-no-yes
[01:22:08] [PASSED] yes-yes-or-yes-yes
[01:22:08] [PASSED] no-no-or-yes-or-no
[01:22:08] [PASSED] or
[01:22:08] [PASSED] or-yes
[01:22:08] [PASSED] or-no
[01:22:08] [PASSED] yes-or
[01:22:08] [PASSED] no-or
[01:22:08] [PASSED] no-or-or-yes
[01:22:08] [PASSED] yes-or-or-no
[01:22:08] [PASSED] no-or-or-no
[01:22:08] [PASSED] missing-context-engine-class
[01:22:08] [PASSED] missing-context-engine-class-or-yes
[01:22:08] [PASSED] missing-context-engine-class-or-or-yes
[01:22:08] =============== [PASSED] xe_rtp_rules_tests ================
[01:22:08] =============== xe_rtp_process_to_sr_tests ================
[01:22:08] [PASSED] coalesce-same-reg
[01:22:08] [PASSED] coalesce-same-reg-literal-and-func
[01:22:08] [PASSED] no-match-no-add
[01:22:08] [PASSED] two-regs-two-entries
[01:22:08] [PASSED] clr-one-set-other
[01:22:08] [PASSED] set-field
[01:22:08] [PASSED] conflict-duplicate
[01:22:08] [PASSED] conflict-not-disjoint
[01:22:08] [PASSED] conflict-not-disjoint-literal-and-func
[01:22:08] [PASSED] conflict-reg-type
[01:22:08] [PASSED] bad-mcr-reg-forced-to-regular
[01:22:08] [PASSED] bad-regular-reg-forced-to-mcr
[01:22:08] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[01:22:08] ================== xe_rtp_process_tests ===================
[01:22:08] [PASSED] active1
[01:22:08] [PASSED] active2
[01:22:08] [PASSED] active-inactive
[01:22:08] [PASSED] inactive-active
[01:22:08] [PASSED] inactive-active-inactive
[01:22:08] [PASSED] inactive-inactive-inactive
[01:22:08] ============== [PASSED] xe_rtp_process_tests ===============
[01:22:08] ===================== [PASSED] xe_rtp ======================
[01:22:08] ==================== xe_wa (1 subtest) =====================
[01:22:08] ======================== xe_wa_gt =========================
[01:22:08] [PASSED] TIGERLAKE B0
[01:22:08] [PASSED] DG1 A0
[01:22:08] [PASSED] DG1 B0
[01:22:08] [PASSED] ALDERLAKE_S A0
[01:22:08] [PASSED] ALDERLAKE_S B0
[01:22:08] [PASSED] ALDERLAKE_S C0
[01:22:08] [PASSED] ALDERLAKE_S D0
[01:22:08] [PASSED] ALDERLAKE_P A0
[01:22:08] [PASSED] ALDERLAKE_P B0
[01:22:08] [PASSED] ALDERLAKE_P C0
[01:22:08] [PASSED] ALDERLAKE_S RPLS D0
[01:22:08] [PASSED] ALDERLAKE_P RPLU E0
[01:22:08] [PASSED] DG2 G10 C0
[01:22:08] [PASSED] DG2 G11 B1
[01:22:08] [PASSED] DG2 G12 A1
[01:22:08] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[01:22:08] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[01:22:08] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[01:22:08] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[01:22:08] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[01:22:08] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[01:22:08] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[01:22:08] ==================== [PASSED] xe_wa_gt =====================
[01:22:08] ====================== [PASSED] xe_wa ======================
[01:22:08] ============================================================
[01:22:08] Testing complete. Ran 840 tests: passed: 811, skipped: 29
[01:22:08] Elapsed time: 40.999s total, 2.491s configuring, 37.790s building, 0.709s 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
[01:22:09] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[01:22:11] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[01:22:36] Starting KUnit Kernel (1/1)...
[01:22:36] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[01:22:36] ============ drm_test_pick_cmdline (2 subtests) ============
[01:22:36] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[01:22:36] =============== drm_test_pick_cmdline_named ===============
[01:22:36] [PASSED] NTSC
[01:22:36] [PASSED] NTSC-J
[01:22:36] [PASSED] PAL
[01:22:36] [PASSED] PAL-M
[01:22:36] =========== [PASSED] drm_test_pick_cmdline_named ===========
[01:22:36] ============== [PASSED] drm_test_pick_cmdline ==============
[01:22:36] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[01:22:36] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[01:22:36] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[01:22:36] =========== drm_validate_clone_mode (2 subtests) ===========
[01:22:36] ============== drm_test_check_in_clone_mode ===============
[01:22:36] [PASSED] in_clone_mode
[01:22:36] [PASSED] not_in_clone_mode
[01:22:36] ========== [PASSED] drm_test_check_in_clone_mode ===========
[01:22:36] =============== drm_test_check_valid_clones ===============
[01:22:36] [PASSED] not_in_clone_mode
[01:22:36] [PASSED] valid_clone
[01:22:36] [PASSED] invalid_clone
[01:22:36] =========== [PASSED] drm_test_check_valid_clones ===========
[01:22:36] ============= [PASSED] drm_validate_clone_mode =============
[01:22:36] ============= drm_validate_modeset (1 subtest) =============
[01:22:36] [PASSED] drm_test_check_connector_changed_modeset
[01:22:36] ============== [PASSED] drm_validate_modeset ===============
[01:22:36] ====== drm_test_bridge_get_current_state (1 subtest) =======
[01:22:36] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[01:22:36] ======== [PASSED] drm_test_bridge_get_current_state ========
[01:22:36] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[01:22:36] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[01:22:36] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[01:22:36] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[01:22:36] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[01:22:36] ============== drm_bridge_alloc (2 subtests) ===============
[01:22:36] [PASSED] drm_test_drm_bridge_alloc_basic
[01:22:36] [PASSED] drm_test_drm_bridge_alloc_get_put
[01:22:36] ================ [PASSED] drm_bridge_alloc =================
[01:22:36] ============= drm_bridge_bus_fmt (5 subtests) ==============
[01:22:36] [PASSED] drm_test_bridge_rgb_yuv_rgb
[01:22:36] [PASSED] drm_test_bridge_must_convert_to_yuv444
[01:22:36] [PASSED] drm_test_bridge_hdmi_auto_rgb
[01:22:36] [PASSED] drm_test_bridge_auto_first
[01:22:36] [PASSED] drm_test_bridge_rgb_yuv_no_path
[01:22:36] =============== [PASSED] drm_bridge_bus_fmt ================
[01:22:36] ============= drm_cmdline_parser (40 subtests) =============
[01:22:36] [PASSED] drm_test_cmdline_force_d_only
[01:22:36] [PASSED] drm_test_cmdline_force_D_only_dvi
[01:22:36] [PASSED] drm_test_cmdline_force_D_only_hdmi
[01:22:36] [PASSED] drm_test_cmdline_force_D_only_not_digital
[01:22:36] [PASSED] drm_test_cmdline_force_e_only
[01:22:36] [PASSED] drm_test_cmdline_res
[01:22:36] [PASSED] drm_test_cmdline_res_vesa
[01:22:36] [PASSED] drm_test_cmdline_res_vesa_rblank
[01:22:36] [PASSED] drm_test_cmdline_res_rblank
[01:22:36] [PASSED] drm_test_cmdline_res_bpp
[01:22:36] [PASSED] drm_test_cmdline_res_refresh
[01:22:36] [PASSED] drm_test_cmdline_res_bpp_refresh
[01:22:36] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[01:22:36] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[01:22:36] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[01:22:36] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[01:22:36] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[01:22:36] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[01:22:36] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[01:22:36] [PASSED] drm_test_cmdline_res_margins_force_on
[01:22:36] [PASSED] drm_test_cmdline_res_vesa_margins
[01:22:36] [PASSED] drm_test_cmdline_name
[01:22:36] [PASSED] drm_test_cmdline_name_bpp
[01:22:36] [PASSED] drm_test_cmdline_name_option
[01:22:36] [PASSED] drm_test_cmdline_name_bpp_option
[01:22:36] [PASSED] drm_test_cmdline_rotate_0
[01:22:36] [PASSED] drm_test_cmdline_rotate_90
[01:22:36] [PASSED] drm_test_cmdline_rotate_180
[01:22:36] [PASSED] drm_test_cmdline_rotate_270
[01:22:36] [PASSED] drm_test_cmdline_hmirror
[01:22:36] [PASSED] drm_test_cmdline_vmirror
[01:22:36] [PASSED] drm_test_cmdline_margin_options
[01:22:36] [PASSED] drm_test_cmdline_multiple_options
[01:22:36] [PASSED] drm_test_cmdline_bpp_extra_and_option
[01:22:36] [PASSED] drm_test_cmdline_extra_and_option
[01:22:36] [PASSED] drm_test_cmdline_freestanding_options
[01:22:36] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[01:22:36] [PASSED] drm_test_cmdline_panel_orientation
[01:22:36] ================ drm_test_cmdline_invalid =================
[01:22:36] [PASSED] margin_only
[01:22:36] [PASSED] interlace_only
[01:22:36] [PASSED] res_missing_x
[01:22:36] [PASSED] res_missing_y
[01:22:36] [PASSED] res_bad_y
[01:22:36] [PASSED] res_missing_y_bpp
[01:22:36] [PASSED] res_bad_bpp
[01:22:36] [PASSED] res_bad_refresh
[01:22:36] [PASSED] res_bpp_refresh_force_on_off
[01:22:36] [PASSED] res_invalid_mode
[01:22:36] [PASSED] res_bpp_wrong_place_mode
[01:22:36] [PASSED] name_bpp_refresh
[01:22:36] [PASSED] name_refresh
[01:22:36] [PASSED] name_refresh_wrong_mode
[01:22:36] [PASSED] name_refresh_invalid_mode
[01:22:36] [PASSED] rotate_multiple
[01:22:36] [PASSED] rotate_invalid_val
[01:22:36] [PASSED] rotate_truncated
[01:22:36] [PASSED] invalid_option
[01:22:36] [PASSED] invalid_tv_option
[01:22:36] [PASSED] truncated_tv_option
[01:22:36] ============ [PASSED] drm_test_cmdline_invalid =============
[01:22:36] =============== drm_test_cmdline_tv_options ===============
[01:22:36] [PASSED] NTSC
[01:22:36] [PASSED] NTSC_443
[01:22:36] [PASSED] NTSC_J
[01:22:36] [PASSED] PAL
[01:22:36] [PASSED] PAL_M
[01:22:36] [PASSED] PAL_N
[01:22:36] [PASSED] SECAM
[01:22:36] [PASSED] MONO_525
[01:22:36] [PASSED] MONO_625
[01:22:36] =========== [PASSED] drm_test_cmdline_tv_options ===========
[01:22:36] =============== [PASSED] drm_cmdline_parser ================
[01:22:36] ========== drmm_connector_hdmi_init (20 subtests) ==========
[01:22:36] [PASSED] drm_test_connector_hdmi_init_valid
[01:22:36] [PASSED] drm_test_connector_hdmi_init_bpc_8
[01:22:36] [PASSED] drm_test_connector_hdmi_init_bpc_10
[01:22:36] [PASSED] drm_test_connector_hdmi_init_bpc_12
[01:22:36] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[01:22:36] [PASSED] drm_test_connector_hdmi_init_bpc_null
[01:22:36] [PASSED] drm_test_connector_hdmi_init_formats_empty
[01:22:36] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[01:22:36] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[01:22:36] [PASSED] supported_formats=0x9 yuv420_allowed=1
[01:22:36] [PASSED] supported_formats=0x9 yuv420_allowed=0
[01:22:36] [PASSED] supported_formats=0x5 yuv420_allowed=1
[01:22:36] [PASSED] supported_formats=0x5 yuv420_allowed=0
[01:22:36] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[01:22:36] [PASSED] drm_test_connector_hdmi_init_null_ddc
[01:22:36] [PASSED] drm_test_connector_hdmi_init_null_product
[01:22:36] [PASSED] drm_test_connector_hdmi_init_null_vendor
[01:22:36] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[01:22:36] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[01:22:36] [PASSED] drm_test_connector_hdmi_init_product_valid
[01:22:36] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[01:22:36] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[01:22:36] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[01:22:36] ========= drm_test_connector_hdmi_init_type_valid =========
[01:22:36] [PASSED] HDMI-A
[01:22:36] [PASSED] HDMI-B
[01:22:36] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[01:22:36] ======== drm_test_connector_hdmi_init_type_invalid ========
[01:22:36] [PASSED] Unknown
[01:22:36] [PASSED] VGA
[01:22:36] [PASSED] DVI-I
[01:22:36] [PASSED] DVI-D
[01:22:36] [PASSED] DVI-A
[01:22:36] [PASSED] Composite
[01:22:36] [PASSED] SVIDEO
[01:22:36] [PASSED] LVDS
[01:22:36] [PASSED] Component
[01:22:36] [PASSED] DIN
[01:22:36] [PASSED] DP
[01:22:36] [PASSED] TV
[01:22:36] [PASSED] eDP
[01:22:36] [PASSED] Virtual
[01:22:36] [PASSED] DSI
[01:22:36] [PASSED] DPI
[01:22:36] [PASSED] Writeback
[01:22:36] [PASSED] SPI
[01:22:36] [PASSED] USB
[01:22:36] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[01:22:36] ============ [PASSED] drmm_connector_hdmi_init =============
[01:22:36] ============= drmm_connector_init (3 subtests) =============
[01:22:36] [PASSED] drm_test_drmm_connector_init
[01:22:36] [PASSED] drm_test_drmm_connector_init_null_ddc
[01:22:36] ========= drm_test_drmm_connector_init_type_valid =========
[01:22:36] [PASSED] Unknown
[01:22:36] [PASSED] VGA
[01:22:36] [PASSED] DVI-I
[01:22:36] [PASSED] DVI-D
[01:22:36] [PASSED] DVI-A
[01:22:36] [PASSED] Composite
[01:22:36] [PASSED] SVIDEO
[01:22:36] [PASSED] LVDS
[01:22:36] [PASSED] Component
[01:22:36] [PASSED] DIN
[01:22:36] [PASSED] DP
[01:22:36] [PASSED] HDMI-A
[01:22:36] [PASSED] HDMI-B
[01:22:36] [PASSED] TV
[01:22:36] [PASSED] eDP
[01:22:36] [PASSED] Virtual
[01:22:36] [PASSED] DSI
[01:22:36] [PASSED] DPI
[01:22:36] [PASSED] Writeback
[01:22:36] [PASSED] SPI
[01:22:36] [PASSED] USB
[01:22:36] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[01:22:36] =============== [PASSED] drmm_connector_init ===============
[01:22:36] ========= drm_connector_dynamic_init (6 subtests) ==========
[01:22:36] [PASSED] drm_test_drm_connector_dynamic_init
[01:22:36] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[01:22:36] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[01:22:36] [PASSED] drm_test_drm_connector_dynamic_init_properties
[01:22:36] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[01:22:36] [PASSED] Unknown
[01:22:36] [PASSED] VGA
[01:22:36] [PASSED] DVI-I
[01:22:36] [PASSED] DVI-D
[01:22:36] [PASSED] DVI-A
[01:22:36] [PASSED] Composite
[01:22:36] [PASSED] SVIDEO
[01:22:36] [PASSED] LVDS
[01:22:36] [PASSED] Component
[01:22:36] [PASSED] DIN
[01:22:36] [PASSED] DP
[01:22:36] [PASSED] HDMI-A
[01:22:36] [PASSED] HDMI-B
[01:22:36] [PASSED] TV
[01:22:36] [PASSED] eDP
[01:22:36] [PASSED] Virtual
[01:22:36] [PASSED] DSI
[01:22:36] [PASSED] DPI
[01:22:36] [PASSED] Writeback
[01:22:36] [PASSED] SPI
[01:22:36] [PASSED] USB
[01:22:36] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[01:22:36] ======== drm_test_drm_connector_dynamic_init_name =========
[01:22:36] [PASSED] Unknown
[01:22:36] [PASSED] VGA
[01:22:36] [PASSED] DVI-I
[01:22:36] [PASSED] DVI-D
[01:22:36] [PASSED] DVI-A
[01:22:36] [PASSED] Composite
[01:22:36] [PASSED] SVIDEO
[01:22:36] [PASSED] LVDS
[01:22:36] [PASSED] Component
[01:22:36] [PASSED] DIN
[01:22:36] [PASSED] DP
[01:22:36] [PASSED] HDMI-A
[01:22:36] [PASSED] HDMI-B
[01:22:36] [PASSED] TV
[01:22:36] [PASSED] eDP
[01:22:36] [PASSED] Virtual
[01:22:36] [PASSED] DSI
[01:22:36] [PASSED] DPI
[01:22:36] [PASSED] Writeback
[01:22:36] [PASSED] SPI
[01:22:36] [PASSED] USB
[01:22:36] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[01:22:36] =========== [PASSED] drm_connector_dynamic_init ============
[01:22:36] ==== drm_connector_dynamic_register_early (4 subtests) =====
[01:22:36] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[01:22:36] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[01:22:36] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[01:22:36] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[01:22:36] ====== [PASSED] drm_connector_dynamic_register_early =======
[01:22:36] ======= drm_connector_dynamic_register (7 subtests) ========
[01:22:36] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[01:22:36] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[01:22:36] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[01:22:36] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[01:22:36] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[01:22:36] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[01:22:36] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[01:22:36] ========= [PASSED] drm_connector_dynamic_register ==========
[01:22:36] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[01:22:36] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[01:22:36] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[01:22:36] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[01:22:36] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[01:22:36] ========== drm_test_get_tv_mode_from_name_valid ===========
[01:22:36] [PASSED] NTSC
[01:22:36] [PASSED] NTSC-443
[01:22:36] [PASSED] NTSC-J
[01:22:36] [PASSED] PAL
[01:22:36] [PASSED] PAL-M
[01:22:36] [PASSED] PAL-N
[01:22:36] [PASSED] SECAM
[01:22:36] [PASSED] Mono
[01:22:36] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[01:22:36] [PASSED] drm_test_get_tv_mode_from_name_truncated
[01:22:36] ============ [PASSED] drm_get_tv_mode_from_name ============
[01:22:36] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[01:22:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[01:22:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[01:22:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[01:22:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[01:22:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[01:22:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[01:22:36] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[01:22:36] [PASSED] VIC 96
[01:22:36] [PASSED] VIC 97
[01:22:36] [PASSED] VIC 101
[01:22:36] [PASSED] VIC 102
[01:22:36] [PASSED] VIC 106
[01:22:36] [PASSED] VIC 107
[01:22:36] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[01:22:36] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[01:22:36] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[01:22:36] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[01:22:36] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[01:22:36] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[01:22:36] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[01:22:36] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[01:22:36] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[01:22:36] [PASSED] Automatic
[01:22:36] [PASSED] Full
[01:22:36] [PASSED] Limited 16:235
[01:22:36] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[01:22:36] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[01:22:36] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[01:22:36] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[01:22:36] === drm_test_drm_hdmi_connector_get_output_format_name ====
[01:22:36] [PASSED] RGB
[01:22:36] [PASSED] YUV 4:2:0
[01:22:36] [PASSED] YUV 4:2:2
[01:22:36] [PASSED] YUV 4:4:4
[01:22:36] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[01:22:36] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[01:22:36] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[01:22:36] ============= drm_damage_helper (21 subtests) ==============
[01:22:36] [PASSED] drm_test_damage_iter_no_damage
[01:22:36] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[01:22:36] [PASSED] drm_test_damage_iter_no_damage_src_moved
[01:22:36] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[01:22:36] [PASSED] drm_test_damage_iter_no_damage_not_visible
[01:22:36] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[01:22:36] [PASSED] drm_test_damage_iter_no_damage_no_fb
[01:22:36] [PASSED] drm_test_damage_iter_simple_damage
[01:22:36] [PASSED] drm_test_damage_iter_single_damage
[01:22:36] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[01:22:36] [PASSED] drm_test_damage_iter_single_damage_outside_src
[01:22:36] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[01:22:36] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[01:22:36] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[01:22:36] [PASSED] drm_test_damage_iter_single_damage_src_moved
[01:22:36] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[01:22:36] [PASSED] drm_test_damage_iter_damage
[01:22:36] [PASSED] drm_test_damage_iter_damage_one_intersect
[01:22:36] [PASSED] drm_test_damage_iter_damage_one_outside
[01:22:36] [PASSED] drm_test_damage_iter_damage_src_moved
[01:22:36] [PASSED] drm_test_damage_iter_damage_not_visible
[01:22:36] ================ [PASSED] drm_damage_helper ================
[01:22:36] ============== drm_dp_mst_helper (3 subtests) ==============
[01:22:36] ============== drm_test_dp_mst_calc_pbn_mode ==============
[01:22:36] [PASSED] Clock 154000 BPP 30 DSC disabled
[01:22:36] [PASSED] Clock 234000 BPP 30 DSC disabled
[01:22:36] [PASSED] Clock 297000 BPP 24 DSC disabled
[01:22:36] [PASSED] Clock 332880 BPP 24 DSC enabled
[01:22:36] [PASSED] Clock 324540 BPP 24 DSC enabled
[01:22:36] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[01:22:36] ============== drm_test_dp_mst_calc_pbn_div ===============
[01:22:36] [PASSED] Link rate 2000000 lane count 4
[01:22:36] [PASSED] Link rate 2000000 lane count 2
[01:22:36] [PASSED] Link rate 2000000 lane count 1
[01:22:36] [PASSED] Link rate 1350000 lane count 4
[01:22:36] [PASSED] Link rate 1350000 lane count 2
[01:22:36] [PASSED] Link rate 1350000 lane count 1
[01:22:36] [PASSED] Link rate 1000000 lane count 4
[01:22:36] [PASSED] Link rate 1000000 lane count 2
[01:22:36] [PASSED] Link rate 1000000 lane count 1
[01:22:36] [PASSED] Link rate 810000 lane count 4
[01:22:36] [PASSED] Link rate 810000 lane count 2
[01:22:36] [PASSED] Link rate 810000 lane count 1
[01:22:36] [PASSED] Link rate 540000 lane count 4
[01:22:36] [PASSED] Link rate 540000 lane count 2
[01:22:36] [PASSED] Link rate 540000 lane count 1
[01:22:36] [PASSED] Link rate 270000 lane count 4
[01:22:36] [PASSED] Link rate 270000 lane count 2
[01:22:36] [PASSED] Link rate 270000 lane count 1
[01:22:36] [PASSED] Link rate 162000 lane count 4
[01:22:36] [PASSED] Link rate 162000 lane count 2
[01:22:36] [PASSED] Link rate 162000 lane count 1
[01:22:36] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[01:22:36] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[01:22:36] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[01:22:36] [PASSED] DP_POWER_UP_PHY with port number
[01:22:36] [PASSED] DP_POWER_DOWN_PHY with port number
[01:22:36] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[01:22:36] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[01:22:36] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[01:22:36] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[01:22:36] [PASSED] DP_QUERY_PAYLOAD with port number
[01:22:36] [PASSED] DP_QUERY_PAYLOAD with VCPI
[01:22:36] [PASSED] DP_REMOTE_DPCD_READ with port number
[01:22:36] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[01:22:36] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[01:22:36] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[01:22:36] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[01:22:36] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[01:22:36] [PASSED] DP_REMOTE_I2C_READ with port number
[01:22:36] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[01:22:36] [PASSED] DP_REMOTE_I2C_READ with transactions array
[01:22:36] [PASSED] DP_REMOTE_I2C_WRITE with port number
[01:22:36] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[01:22:36] [PASSED] DP_REMOTE_I2C_WRITE with data array
[01:22:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[01:22:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[01:22:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[01:22:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[01:22:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[01:22:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[01:22:36] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[01:22:36] ================ [PASSED] drm_dp_mst_helper ================
[01:22:36] ================== drm_exec (7 subtests) ===================
[01:22:36] [PASSED] sanitycheck
[01:22:36] [PASSED] test_lock
[01:22:36] [PASSED] test_lock_unlock
[01:22:36] [PASSED] test_duplicates
[01:22:36] [PASSED] test_prepare
[01:22:36] [PASSED] test_prepare_array
[01:22:36] [PASSED] test_multiple_loops
[01:22:36] ==================== [PASSED] drm_exec =====================
[01:22:36] =========== drm_format_helper_test (17 subtests) ===========
[01:22:36] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[01:22:36] [PASSED] single_pixel_source_buffer
[01:22:36] [PASSED] single_pixel_clip_rectangle
[01:22:36] [PASSED] well_known_colors
[01:22:36] [PASSED] destination_pitch
[01:22:36] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[01:22:36] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[01:22:36] [PASSED] single_pixel_source_buffer
[01:22:36] [PASSED] single_pixel_clip_rectangle
[01:22:36] [PASSED] well_known_colors
[01:22:36] [PASSED] destination_pitch
[01:22:36] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[01:22:36] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[01:22:36] [PASSED] single_pixel_source_buffer
[01:22:36] [PASSED] single_pixel_clip_rectangle
[01:22:36] [PASSED] well_known_colors
[01:22:36] [PASSED] destination_pitch
[01:22:36] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[01:22:36] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[01:22:36] [PASSED] single_pixel_source_buffer
[01:22:36] [PASSED] single_pixel_clip_rectangle
[01:22:36] [PASSED] well_known_colors
[01:22:36] [PASSED] destination_pitch
[01:22:36] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[01:22:36] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[01:22:36] [PASSED] single_pixel_source_buffer
[01:22:36] [PASSED] single_pixel_clip_rectangle
[01:22:36] [PASSED] well_known_colors
[01:22:36] [PASSED] destination_pitch
[01:22:36] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[01:22:36] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[01:22:36] [PASSED] single_pixel_source_buffer
[01:22:36] [PASSED] single_pixel_clip_rectangle
[01:22:36] [PASSED] well_known_colors
[01:22:36] [PASSED] destination_pitch
[01:22:36] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[01:22:36] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[01:22:36] [PASSED] single_pixel_source_buffer
[01:22:36] [PASSED] single_pixel_clip_rectangle
[01:22:36] [PASSED] well_known_colors
[01:22:36] [PASSED] destination_pitch
[01:22:36] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[01:22:36] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[01:22:36] [PASSED] single_pixel_source_buffer
[01:22:36] [PASSED] single_pixel_clip_rectangle
[01:22:36] [PASSED] well_known_colors
[01:22:36] [PASSED] destination_pitch
[01:22:36] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[01:22:36] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[01:22:36] [PASSED] single_pixel_source_buffer
[01:22:36] [PASSED] single_pixel_clip_rectangle
[01:22:36] [PASSED] well_known_colors
[01:22:36] [PASSED] destination_pitch
[01:22:36] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[01:22:36] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[01:22:36] [PASSED] single_pixel_source_buffer
[01:22:36] [PASSED] single_pixel_clip_rectangle
[01:22:36] [PASSED] well_known_colors
[01:22:36] [PASSED] destination_pitch
[01:22:36] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[01:22:36] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[01:22:36] [PASSED] single_pixel_source_buffer
[01:22:36] [PASSED] single_pixel_clip_rectangle
[01:22:36] [PASSED] well_known_colors
[01:22:36] [PASSED] destination_pitch
[01:22:36] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[01:22:36] ============== drm_test_fb_xrgb8888_to_mono ===============
[01:22:36] [PASSED] single_pixel_source_buffer
[01:22:36] [PASSED] single_pixel_clip_rectangle
[01:22:36] [PASSED] well_known_colors
[01:22:36] [PASSED] destination_pitch
[01:22:36] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[01:22:36] ==================== drm_test_fb_swab =====================
[01:22:36] [PASSED] single_pixel_source_buffer
[01:22:36] [PASSED] single_pixel_clip_rectangle
[01:22:36] [PASSED] well_known_colors
[01:22:36] [PASSED] destination_pitch
[01:22:36] ================ [PASSED] drm_test_fb_swab =================
[01:22:36] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[01:22:36] [PASSED] single_pixel_source_buffer
[01:22:36] [PASSED] single_pixel_clip_rectangle
[01:22:36] [PASSED] well_known_colors
[01:22:36] [PASSED] destination_pitch
[01:22:36] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[01:22:36] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[01:22:36] [PASSED] single_pixel_source_buffer
[01:22:36] [PASSED] single_pixel_clip_rectangle
[01:22:36] [PASSED] well_known_colors
[01:22:36] [PASSED] destination_pitch
[01:22:36] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[01:22:36] ================= drm_test_fb_clip_offset =================
[01:22:36] [PASSED] pass through
[01:22:36] [PASSED] horizontal offset
[01:22:36] [PASSED] vertical offset
[01:22:36] [PASSED] horizontal and vertical offset
[01:22:36] [PASSED] horizontal offset (custom pitch)
[01:22:36] [PASSED] vertical offset (custom pitch)
[01:22:36] [PASSED] horizontal and vertical offset (custom pitch)
[01:22:36] ============= [PASSED] drm_test_fb_clip_offset =============
[01:22:36] =================== drm_test_fb_memcpy ====================
[01:22:36] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[01:22:36] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[01:22:36] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[01:22:36] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[01:22:36] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[01:22:36] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[01:22:36] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[01:22:36] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[01:22:36] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[01:22:36] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[01:22:36] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[01:22:36] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[01:22:36] =============== [PASSED] drm_test_fb_memcpy ================
[01:22:36] ============= [PASSED] drm_format_helper_test ==============
[01:22:36] ================= drm_format (18 subtests) =================
[01:22:36] [PASSED] drm_test_format_block_width_invalid
[01:22:36] [PASSED] drm_test_format_block_width_one_plane
[01:22:36] [PASSED] drm_test_format_block_width_two_plane
[01:22:36] [PASSED] drm_test_format_block_width_three_plane
[01:22:36] [PASSED] drm_test_format_block_width_tiled
[01:22:36] [PASSED] drm_test_format_block_height_invalid
[01:22:36] [PASSED] drm_test_format_block_height_one_plane
[01:22:36] [PASSED] drm_test_format_block_height_two_plane
[01:22:36] [PASSED] drm_test_format_block_height_three_plane
[01:22:36] [PASSED] drm_test_format_block_height_tiled
[01:22:36] [PASSED] drm_test_format_min_pitch_invalid
[01:22:36] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[01:22:36] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[01:22:36] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[01:22:36] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[01:22:36] [PASSED] drm_test_format_min_pitch_two_plane
[01:22:36] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[01:22:36] [PASSED] drm_test_format_min_pitch_tiled
[01:22:36] =================== [PASSED] drm_format ====================
[01:22:36] ============== drm_framebuffer (10 subtests) ===============
[01:22:36] ========== drm_test_framebuffer_check_src_coords ==========
[01:22:36] [PASSED] Success: source fits into fb
[01:22:36] [PASSED] Fail: overflowing fb with x-axis coordinate
[01:22:36] [PASSED] Fail: overflowing fb with y-axis coordinate
[01:22:36] [PASSED] Fail: overflowing fb with source width
[01:22:36] [PASSED] Fail: overflowing fb with source height
[01:22:36] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[01:22:36] [PASSED] drm_test_framebuffer_cleanup
[01:22:36] =============== drm_test_framebuffer_create ===============
[01:22:36] [PASSED] ABGR8888 normal sizes
[01:22:36] [PASSED] ABGR8888 max sizes
[01:22:36] [PASSED] ABGR8888 pitch greater than min required
[01:22:36] [PASSED] ABGR8888 pitch less than min required
[01:22:36] [PASSED] ABGR8888 Invalid width
[01:22:36] [PASSED] ABGR8888 Invalid buffer handle
[01:22:36] [PASSED] No pixel format
[01:22:36] [PASSED] ABGR8888 Width 0
[01:22:36] [PASSED] ABGR8888 Height 0
[01:22:36] [PASSED] ABGR8888 Out of bound height * pitch combination
[01:22:36] [PASSED] ABGR8888 Large buffer offset
[01:22:36] [PASSED] ABGR8888 Buffer offset for inexistent plane
[01:22:36] [PASSED] ABGR8888 Invalid flag
[01:22:36] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[01:22:36] [PASSED] ABGR8888 Valid buffer modifier
[01:22:36] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[01:22:36] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[01:22:36] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[01:22:36] [PASSED] NV12 Normal sizes
[01:22:36] [PASSED] NV12 Max sizes
[01:22:36] [PASSED] NV12 Invalid pitch
[01:22:36] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[01:22:36] [PASSED] NV12 different modifier per-plane
[01:22:36] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[01:22:36] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[01:22:36] [PASSED] NV12 Modifier for inexistent plane
[01:22:36] [PASSED] NV12 Handle for inexistent plane
[01:22:36] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[01:22:36] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[01:22:36] [PASSED] YVU420 Normal sizes
[01:22:36] [PASSED] YVU420 Max sizes
[01:22:36] [PASSED] YVU420 Invalid pitch
[01:22:36] [PASSED] YVU420 Different pitches
[01:22:36] [PASSED] YVU420 Different buffer offsets/pitches
[01:22:36] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[01:22:36] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[01:22:36] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[01:22:36] [PASSED] YVU420 Valid modifier
[01:22:36] [PASSED] YVU420 Different modifiers per plane
[01:22:36] [PASSED] YVU420 Modifier for inexistent plane
[01:22:36] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[01:22:36] [PASSED] X0L2 Normal sizes
[01:22:36] [PASSED] X0L2 Max sizes
[01:22:36] [PASSED] X0L2 Invalid pitch
[01:22:36] [PASSED] X0L2 Pitch greater than minimum required
[01:22:36] [PASSED] X0L2 Handle for inexistent plane
[01:22:36] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[01:22:36] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[01:22:36] [PASSED] X0L2 Valid modifier
[01:22:36] [PASSED] X0L2 Modifier for inexistent plane
[01:22:36] =========== [PASSED] drm_test_framebuffer_create ===========
[01:22:36] [PASSED] drm_test_framebuffer_free
[01:22:36] [PASSED] drm_test_framebuffer_init
[01:22:36] [PASSED] drm_test_framebuffer_init_bad_format
[01:22:36] [PASSED] drm_test_framebuffer_init_dev_mismatch
[01:22:36] [PASSED] drm_test_framebuffer_lookup
[01:22:36] [PASSED] drm_test_framebuffer_lookup_inexistent
[01:22:36] [PASSED] drm_test_framebuffer_modifiers_not_supported
[01:22:36] ================= [PASSED] drm_framebuffer =================
[01:22:36] ================ drm_gem_shmem (8 subtests) ================
[01:22:36] [PASSED] drm_gem_shmem_test_obj_create
[01:22:36] [PASSED] drm_gem_shmem_test_obj_create_private
[01:22:36] [PASSED] drm_gem_shmem_test_pin_pages
[01:22:36] [PASSED] drm_gem_shmem_test_vmap
[01:22:36] [PASSED] drm_gem_shmem_test_get_sg_table
[01:22:36] [PASSED] drm_gem_shmem_test_get_pages_sgt
[01:22:36] [PASSED] drm_gem_shmem_test_madvise
[01:22:36] [PASSED] drm_gem_shmem_test_purge
[01:22:36] ================== [PASSED] drm_gem_shmem ==================
[01:22:36] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[01:22:36] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[01:22:36] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[01:22:36] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[01:22:36] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[01:22:36] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[01:22:36] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[01:22:36] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[01:22:36] [PASSED] Automatic
[01:22:36] [PASSED] Full
[01:22:36] [PASSED] Limited 16:235
[01:22:36] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[01:22:36] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[01:22:36] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[01:22:36] [PASSED] drm_test_check_disable_connector
[01:22:36] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[01:22:36] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[01:22:36] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[01:22:36] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[01:22:36] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[01:22:36] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[01:22:36] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[01:22:36] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[01:22:36] [PASSED] drm_test_check_output_bpc_dvi
[01:22:36] [PASSED] drm_test_check_output_bpc_format_vic_1
[01:22:36] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[01:22:36] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[01:22:36] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[01:22:36] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[01:22:36] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[01:22:36] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[01:22:36] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[01:22:36] ============ drm_test_check_hdmi_color_format =============
[01:22:36] [PASSED] AUTO -> RGB
[01:22:36] [PASSED] YCBCR422 -> YUV422
[01:22:36] [PASSED] YCBCR420 -> YUV420
[01:22:36] [PASSED] YCBCR444 -> YUV444
[01:22:36] [PASSED] RGB -> RGB
[01:22:36] ======== [PASSED] drm_test_check_hdmi_color_format =========
[01:22:36] ======== drm_test_check_hdmi_color_format_420_only ========
[01:22:36] [PASSED] RGB should fail
[01:22:36] [PASSED] YUV444 should fail
[01:22:36] [PASSED] YUV422 should fail
[01:22:36] [PASSED] YUV420 should work
[01:22:36] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[01:22:36] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[01:22:36] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[01:22:36] [PASSED] drm_test_check_broadcast_rgb_value
[01:22:36] [PASSED] drm_test_check_bpc_8_value
[01:22:36] [PASSED] drm_test_check_bpc_10_value
[01:22:36] [PASSED] drm_test_check_bpc_12_value
[01:22:36] [PASSED] drm_test_check_format_value
[01:22:36] [PASSED] drm_test_check_tmds_char_value
[01:22:36] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[01:22:36] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[01:22:36] [PASSED] drm_test_check_mode_valid
[01:22:36] [PASSED] drm_test_check_mode_valid_reject
[01:22:36] [PASSED] drm_test_check_mode_valid_reject_rate
[01:22:36] [PASSED] drm_test_check_mode_valid_reject_max_clock
[01:22:36] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[01:22:36] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[01:22:36] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[01:22:36] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[01:22:36] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[01:22:36] [PASSED] drm_test_check_infoframes
[01:22:36] [PASSED] drm_test_check_reject_avi_infoframe
[01:22:36] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[01:22:36] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[01:22:36] [PASSED] drm_test_check_reject_audio_infoframe
[01:22:36] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[01:22:36] ================= drm_managed (2 subtests) =================
[01:22:36] [PASSED] drm_test_managed_release_action
[01:22:36] [PASSED] drm_test_managed_run_action
[01:22:36] =================== [PASSED] drm_managed ===================
[01:22:36] =================== drm_mm (6 subtests) ====================
[01:22:36] [PASSED] drm_test_mm_init
[01:22:36] [PASSED] drm_test_mm_debug
[01:22:36] [PASSED] drm_test_mm_align32
[01:22:36] [PASSED] drm_test_mm_align64
[01:22:36] [PASSED] drm_test_mm_lowest
[01:22:36] [PASSED] drm_test_mm_highest
[01:22:36] ===================== [PASSED] drm_mm ======================
[01:22:36] ============= drm_modes_analog_tv (5 subtests) =============
[01:22:36] [PASSED] drm_test_modes_analog_tv_mono_576i
[01:22:36] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[01:22:36] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[01:22:36] [PASSED] drm_test_modes_analog_tv_pal_576i
[01:22:36] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[01:22:36] =============== [PASSED] drm_modes_analog_tv ===============
[01:22:36] ============== drm_panic_helper (3 subtests) ===============
[01:22:36] ============= drm_test_panic_screen_user_map ==============
[01:22:36] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[01:22:36] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[01:22:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[01:22:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[01:22:36] ========= [PASSED] drm_test_panic_screen_user_map ==========
[01:22:36] ============= drm_test_panic_screen_user_page =============
[01:22:36] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[01:22:36] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[01:22:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[01:22:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[01:22:36] ========= [PASSED] drm_test_panic_screen_user_page =========
[01:22:36] ========== drm_test_panic_screen_user_set_pixel ===========
[01:22:36] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[01:22:36] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[01:22:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[01:22:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[01:22:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[01:22:36] ====== [PASSED] drm_test_panic_screen_user_set_pixel =======
[01:22:36] ================ [PASSED] drm_panic_helper =================
[01:22:36] ============== drm_plane_helper (2 subtests) ===============
[01:22:36] =============== drm_test_check_plane_state ================
[01:22:36] [PASSED] clipping_simple
[01:22:36] [PASSED] clipping_rotate_reflect
[01:22:36] [PASSED] positioning_simple
[01:22:36] [PASSED] upscaling
[01:22:36] [PASSED] downscaling
[01:22:36] [PASSED] rounding1
[01:22:36] [PASSED] rounding2
[01:22:36] [PASSED] rounding3
[01:22:36] [PASSED] rounding4
[01:22:36] =========== [PASSED] drm_test_check_plane_state ============
[01:22:36] =========== drm_test_check_invalid_plane_state ============
[01:22:36] [PASSED] positioning_invalid
[01:22:36] [PASSED] upscaling_invalid
[01:22:36] [PASSED] downscaling_invalid
[01:22:36] ======= [PASSED] drm_test_check_invalid_plane_state ========
[01:22:36] ================ [PASSED] drm_plane_helper =================
[01:22:36] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[01:22:36] ====== drm_test_connector_helper_tv_get_modes_check =======
[01:22:36] [PASSED] None
[01:22:36] [PASSED] PAL
[01:22:36] [PASSED] NTSC
[01:22:36] [PASSED] Both, NTSC Default
[01:22:36] [PASSED] Both, PAL Default
[01:22:36] [PASSED] Both, NTSC Default, with PAL on command-line
[01:22:36] [PASSED] Both, PAL Default, with NTSC on command-line
[01:22:36] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[01:22:36] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[01:22:36] ================== drm_rect (9 subtests) ===================
[01:22:36] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[01:22:36] [PASSED] drm_test_rect_clip_scaled_not_clipped
[01:22:36] [PASSED] drm_test_rect_clip_scaled_clipped
[01:22:36] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[01:22:36] ================= drm_test_rect_intersect =================
[01:22:36] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[01:22:36] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[01:22:36] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[01:22:36] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[01:22:36] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[01:22:36] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[01:22:36] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[01:22:36] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[01:22:36] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[01:22:36] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[01:22:36] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[01:22:36] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[01:22:36] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[01:22:36] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[01:22:36] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[01:22:36] ============= [PASSED] drm_test_rect_intersect =============
[01:22:36] ================ drm_test_rect_calc_hscale ================
[01:22:36] [PASSED] normal use
[01:22:36] [PASSED] out of max range
[01:22:36] [PASSED] out of min range
[01:22:36] [PASSED] zero dst
[01:22:36] [PASSED] negative src
[01:22:36] [PASSED] negative dst
[01:22:36] ============ [PASSED] drm_test_rect_calc_hscale ============
[01:22:36] ================ drm_test_rect_calc_vscale ================
[01:22:36] [PASSED] normal use
[01:22:36] [PASSED] out of max range
[01:22:36] [PASSED] out of min range
[01:22:36] [PASSED] zero dst
[01:22:36] [PASSED] negative src
[01:22:36] [PASSED] negative dst
[01:22:36] ============ [PASSED] drm_test_rect_calc_vscale ============
[01:22:36] ================== drm_test_rect_rotate ===================
[01:22:36] [PASSED] reflect-x
[01:22:36] [PASSED] reflect-y
[01:22:36] [PASSED] rotate-0
[01:22:36] [PASSED] rotate-90
[01:22:36] [PASSED] rotate-180
[01:22:36] [PASSED] rotate-270
[01:22:36] ============== [PASSED] drm_test_rect_rotate ===============
[01:22:36] ================ drm_test_rect_rotate_inv =================
[01:22:36] [PASSED] reflect-x
[01:22:36] [PASSED] reflect-y
[01:22:36] [PASSED] rotate-0
[01:22:36] [PASSED] rotate-90
[01:22:36] [PASSED] rotate-180
[01:22:36] [PASSED] rotate-270
[01:22:36] ============ [PASSED] drm_test_rect_rotate_inv =============
[01:22:36] ==================== [PASSED] drm_rect =====================
[01:22:36] ============ drm_sysfb_modeset_test (1 subtest) ============
[01:22:36] ============ drm_test_sysfb_build_fourcc_list =============
[01:22:36] [PASSED] no native formats
[01:22:36] [PASSED] XRGB8888 as native format
[01:22:36] [PASSED] remove duplicates
[01:22:36] [PASSED] convert alpha formats
[01:22:36] [PASSED] random formats
[01:22:36] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[01:22:36] ============= [PASSED] drm_sysfb_modeset_test ==============
[01:22:36] ================== drm_fixp (2 subtests) ===================
[01:22:36] [PASSED] drm_test_int2fixp
[01:22:36] [PASSED] drm_test_sm2fixp
[01:22:36] ==================== [PASSED] drm_fixp =====================
[01:22:36] ============================================================
[01:22:36] Testing complete. Ran 667 tests: passed: 667
[01:22:36] Elapsed time: 27.893s total, 2.435s configuring, 25.042s building, 0.408s 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
[01:22:37] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[01:22: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
[01:22:49] Starting KUnit Kernel (1/1)...
[01:22:49] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[01:22:49] ================= ttm_device (5 subtests) ==================
[01:22:49] [PASSED] ttm_device_init_basic
[01:22:49] [PASSED] ttm_device_init_multiple
[01:22:49] [PASSED] ttm_device_fini_basic
[01:22:49] [PASSED] ttm_device_init_no_vma_man
[01:22:49] ================== ttm_device_init_pools ==================
[01:22:49] [PASSED] No DMA allocations, no DMA32 required
[01:22:49] [PASSED] DMA allocations, DMA32 required
[01:22:49] [PASSED] No DMA allocations, DMA32 required
[01:22:49] [PASSED] DMA allocations, no DMA32 required
[01:22:49] ============== [PASSED] ttm_device_init_pools ==============
[01:22:49] =================== [PASSED] ttm_device ====================
[01:22:49] ================== ttm_pool (8 subtests) ===================
[01:22:49] ================== ttm_pool_alloc_basic ===================
[01:22:49] [PASSED] One page
[01:22:49] [PASSED] More than one page
[01:22:49] [PASSED] Above the allocation limit
[01:22:49] [PASSED] One page, with coherent DMA mappings enabled
[01:22:49] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[01:22:49] ============== [PASSED] ttm_pool_alloc_basic ===============
[01:22:49] ============== ttm_pool_alloc_basic_dma_addr ==============
[01:22:49] [PASSED] One page
[01:22:49] [PASSED] More than one page
[01:22:49] [PASSED] Above the allocation limit
[01:22:49] [PASSED] One page, with coherent DMA mappings enabled
[01:22:49] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[01:22:49] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[01:22:49] [PASSED] ttm_pool_alloc_order_caching_match
[01:22:49] [PASSED] ttm_pool_alloc_caching_mismatch
[01:22:49] [PASSED] ttm_pool_alloc_order_mismatch
[01:22:49] [PASSED] ttm_pool_free_dma_alloc
[01:22:49] [PASSED] ttm_pool_free_no_dma_alloc
[01:22:49] [PASSED] ttm_pool_fini_basic
[01:22:49] ==================== [PASSED] ttm_pool =====================
[01:22:49] ================ ttm_resource (8 subtests) =================
[01:22:49] ================= ttm_resource_init_basic =================
[01:22:49] [PASSED] Init resource in TTM_PL_SYSTEM
[01:22:49] [PASSED] Init resource in TTM_PL_VRAM
[01:22:49] [PASSED] Init resource in a private placement
[01:22:49] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[01:22:49] ============= [PASSED] ttm_resource_init_basic =============
[01:22:49] [PASSED] ttm_resource_init_pinned
[01:22:49] [PASSED] ttm_resource_fini_basic
[01:22:49] [PASSED] ttm_resource_manager_init_basic
[01:22:49] [PASSED] ttm_resource_manager_usage_basic
[01:22:49] [PASSED] ttm_resource_manager_set_used_basic
[01:22:49] [PASSED] ttm_sys_man_alloc_basic
[01:22:49] [PASSED] ttm_sys_man_free_basic
[01:22:49] ================== [PASSED] ttm_resource ===================
[01:22:49] =================== ttm_tt (15 subtests) ===================
[01:22:49] ==================== ttm_tt_init_basic ====================
[01:22:49] [PASSED] Page-aligned size
[01:22:49] [PASSED] Extra pages requested
[01:22:49] ================ [PASSED] ttm_tt_init_basic ================
[01:22:49] [PASSED] ttm_tt_init_misaligned
[01:22:49] [PASSED] ttm_tt_fini_basic
[01:22:49] [PASSED] ttm_tt_fini_sg
[01:22:49] [PASSED] ttm_tt_fini_shmem
[01:22:49] [PASSED] ttm_tt_create_basic
[01:22:49] [PASSED] ttm_tt_create_invalid_bo_type
[01:22:49] [PASSED] ttm_tt_create_ttm_exists
[01:22:49] [PASSED] ttm_tt_create_failed
[01:22:49] [PASSED] ttm_tt_destroy_basic
[01:22:49] [PASSED] ttm_tt_populate_null_ttm
[01:22:49] [PASSED] ttm_tt_populate_populated_ttm
[01:22:49] [PASSED] ttm_tt_unpopulate_basic
[01:22:49] [PASSED] ttm_tt_unpopulate_empty_ttm
[01:22:49] [PASSED] ttm_tt_swapin_basic
[01:22:49] ===================== [PASSED] ttm_tt ======================
[01:22:49] =================== ttm_bo (14 subtests) ===================
[01:22:49] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[01:22:49] [PASSED] Cannot be interrupted and sleeps
[01:22:49] [PASSED] Cannot be interrupted, locks straight away
[01:22:49] [PASSED] Can be interrupted, sleeps
[01:22:49] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[01:22:49] [PASSED] ttm_bo_reserve_locked_no_sleep
[01:22:49] [PASSED] ttm_bo_reserve_no_wait_ticket
[01:22:49] [PASSED] ttm_bo_reserve_double_resv
[01:22:49] [PASSED] ttm_bo_reserve_interrupted
[01:22:49] [PASSED] ttm_bo_reserve_deadlock
[01:22:49] [PASSED] ttm_bo_unreserve_basic
[01:22:49] [PASSED] ttm_bo_unreserve_pinned
[01:22:49] [PASSED] ttm_bo_unreserve_bulk
[01:22:49] [PASSED] ttm_bo_fini_basic
[01:22:49] [PASSED] ttm_bo_fini_shared_resv
[01:22:49] [PASSED] ttm_bo_pin_basic
[01:22:49] [PASSED] ttm_bo_pin_unpin_resource
[01:22:49] [PASSED] ttm_bo_multiple_pin_one_unpin
[01:22:49] ===================== [PASSED] ttm_bo ======================
[01:22:49] ============== ttm_bo_validate (22 subtests) ===============
[01:22:49] ============== ttm_bo_init_reserved_sys_man ===============
[01:22:49] [PASSED] Buffer object for userspace
[01:22:49] [PASSED] Kernel buffer object
[01:22:49] [PASSED] Shared buffer object
[01:22:49] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[01:22:49] ============== ttm_bo_init_reserved_mock_man ==============
[01:22:49] [PASSED] Buffer object for userspace
[01:22:49] [PASSED] Kernel buffer object
[01:22:49] [PASSED] Shared buffer object
[01:22:49] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[01:22:49] [PASSED] ttm_bo_init_reserved_resv
[01:22:49] ================== ttm_bo_validate_basic ==================
[01:22:49] [PASSED] Buffer object for userspace
[01:22:49] [PASSED] Kernel buffer object
[01:22:49] [PASSED] Shared buffer object
[01:22:49] ============== [PASSED] ttm_bo_validate_basic ==============
[01:22:49] [PASSED] ttm_bo_validate_invalid_placement
[01:22:49] ============= ttm_bo_validate_same_placement ==============
[01:22:49] [PASSED] System manager
[01:22:49] [PASSED] VRAM manager
[01:22:49] ========= [PASSED] ttm_bo_validate_same_placement ==========
[01:22:49] [PASSED] ttm_bo_validate_failed_alloc
[01:22:49] [PASSED] ttm_bo_validate_pinned
[01:22:49] [PASSED] ttm_bo_validate_busy_placement
[01:22:49] ================ ttm_bo_validate_multihop =================
[01:22:49] [PASSED] Buffer object for userspace
[01:22:49] [PASSED] Kernel buffer object
[01:22:49] [PASSED] Shared buffer object
[01:22:49] ============ [PASSED] ttm_bo_validate_multihop =============
[01:22:49] ========== ttm_bo_validate_no_placement_signaled ==========
[01:22:49] [PASSED] Buffer object in system domain, no page vector
[01:22:49] [PASSED] Buffer object in system domain with an existing page vector
[01:22:49] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[01:22:49] ======== ttm_bo_validate_no_placement_not_signaled ========
[01:22:49] [PASSED] Buffer object for userspace
[01:22:49] [PASSED] Kernel buffer object
[01:22:49] [PASSED] Shared buffer object
[01:22:49] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[01:22:49] [PASSED] ttm_bo_validate_move_fence_signaled
[01:22:49] ========= ttm_bo_validate_move_fence_not_signaled =========
[01:22:49] [PASSED] Waits for GPU
[01:22:49] [PASSED] Tries to lock straight away
[01:22:49] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[01:22:49] [PASSED] ttm_bo_validate_swapout
[01:22:49] [PASSED] ttm_bo_validate_happy_evict
[01:22:49] [PASSED] ttm_bo_validate_all_pinned_evict
[01:22:49] [PASSED] ttm_bo_validate_allowed_only_evict
[01:22:49] [PASSED] ttm_bo_validate_deleted_evict
[01:22:49] [PASSED] ttm_bo_validate_busy_domain_evict
[01:22:49] [PASSED] ttm_bo_validate_evict_gutting
[01:22:49] [PASSED] ttm_bo_validate_recrusive_evict
[01:22:49] ================= [PASSED] ttm_bo_validate =================
[01:22:49] ============================================================
[01:22:49] Testing complete. Ran 102 tests: passed: 102
[01:22:49] Elapsed time: 12.886s total, 2.512s configuring, 10.160s building, 0.177s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/dma-buf/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[01:22:50] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[01:22:52] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[01:23:01] Starting KUnit Kernel (1/1)...
[01:23:01] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[01:23:01] =============== dma-buf-fence (12 subtests) ================
[01:23:01] [PASSED] test_sanitycheck
[01:23:01] [PASSED] test_signaling
[01:23:01] [PASSED] test_add_callback
[01:23:01] [PASSED] test_late_add_callback
[01:23:01] [PASSED] test_rm_callback
[01:23:01] [PASSED] test_late_rm_callback
[01:23:01] [PASSED] test_status
[01:23:01] [PASSED] test_error
[01:23:01] [PASSED] test_wait
[01:23:01] [PASSED] test_wait_timeout
[01:23:01] [PASSED] test_stub
[01:23:01] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[01:23:01] ================== [PASSED] dma-buf-fence ==================
[01:23:01] ============ dma-buf-fence-chain (11 subtests) =============
[01:23:01] [PASSED] test_sanitycheck
[01:23:01] [PASSED] test_find_seqno
[01:23:01] [PASSED] test_find_signaled
[01:23:01] [PASSED] test_find_out_of_order
[01:23:06] [PASSED] test_find_gap
[01:23:06] [PASSED] test_find_race
[01:23:06] [PASSED] test_signal_forward
[01:23:06] [PASSED] test_signal_backward
[01:23:06] [PASSED] test_wait_forward
[01:23:06] [PASSED] test_wait_backward
[01:23:06] [PASSED] test_wait_random
[01:23:06] =============== [PASSED] dma-buf-fence-chain ===============
[01:23:06] ============ dma-buf-fence-unwrap (11 subtests) ============
[01:23:06] [PASSED] test_sanitycheck
[01:23:06] [PASSED] test_unwrap_array
[01:23:06] [PASSED] test_unwrap_chain
[01:23:06] [PASSED] test_unwrap_chain_array
[01:23:06] [PASSED] test_unwrap_merge
[01:23:06] [PASSED] test_unwrap_merge_duplicate
[01:23:06] [PASSED] test_unwrap_merge_seqno
[01:23:06] [PASSED] test_unwrap_merge_order
[01:23:06] [PASSED] test_unwrap_merge_complex
[01:23:06] [PASSED] test_unwrap_merge_complex_seqno
[01:23:06] [PASSED] test_dedup_empty
[01:23:06] ============== [PASSED] dma-buf-fence-unwrap ===============
[01:23:06] ================ dma-buf-resv (5 subtests) =================
[01:23:06] [PASSED] test_sanitycheck
[01:23:06] ===================== test_signaling ======================
[01:23:06] [PASSED] kernel
[01:23:06] [PASSED] write
[01:23:06] [PASSED] read
[01:23:06] [PASSED] bookkeep
[01:23:06] ================= [PASSED] test_signaling ==================
[01:23:06] ====================== test_for_each ======================
[01:23:06] [PASSED] kernel
[01:23:06] [PASSED] write
[01:23:06] [PASSED] read
[01:23:06] [PASSED] bookkeep
[01:23:06] ================== [PASSED] test_for_each ==================
[01:23:06] ================= test_for_each_unlocked ==================
[01:23:06] [PASSED] kernel
[01:23:06] [PASSED] write
[01:23:06] [PASSED] read
[01:23:06] [PASSED] bookkeep
[01:23:06] ============= [PASSED] test_for_each_unlocked ==============
[01:23:06] ===================== test_get_fences =====================
[01:23:06] [PASSED] kernel
[01:23:06] [PASSED] write
[01:23:06] [PASSED] read
[01:23:06] [PASSED] bookkeep
[01:23:06] ================= [PASSED] test_get_fences =================
[01:23:06] ================== [PASSED] dma-buf-resv ===================
[01:23:06] ============================================================
[01:23:06] Testing complete. Ran 51 tests: passed: 50, skipped: 1
[01:23:06] Elapsed time: 16.582s total, 2.553s configuring, 8.707s building, 5.275s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 16+ messages in thread
* ✓ Xe.CI.BAT: success for Cleanup OA stream on PCI unbind/remove (rev4)
2026-11-05 0:16 [PATCH v4 0/7] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
` (8 preceding siblings ...)
2026-11-05 1:23 ` ✓ CI.KUnit: success " Patchwork
@ 2026-11-05 2:02 ` Patchwork
2026-11-05 15:18 ` ✓ Xe.CI.FULL: " Patchwork
10 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2026-11-05 2:02 UTC (permalink / raw)
To: Umesh Nerlige Ramappa; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 868 bytes --]
== Series Details ==
Series: Cleanup OA stream on PCI unbind/remove (rev4)
URL : https://patchwork.freedesktop.org/series/177300/
State : success
== Summary ==
CI Bug Log - changes from xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d_BAT -> xe-pw-177300v4_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (15 -> 15)
------------------------------
No changes in participating hosts
Changes
-------
No changes found
Build changes
-------------
* Linux: xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d -> xe-pw-177300v4
IGT_9177: 9177
xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d: e19b5ed0ad912bb15fa5826fdc746f739e39650d
xe-pw-177300v4: 177300v4
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/index.html
[-- Attachment #2: Type: text/html, Size: 1416 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v4 7/7] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset
2026-11-05 0:16 ` [PATCH v4 7/7] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset Umesh Nerlige Ramappa
@ 2026-11-05 2:11 ` sashiko-bot
0 siblings, 0 replies; 16+ messages in thread
From: sashiko-bot @ 2026-11-05 2:11 UTC (permalink / raw)
To: Umesh Nerlige Ramappa, intel-xe
Thank you for your contribution! Sashiko AI review found 5 potential issue(s) to consider:
- [Critical] drm/xe/oa: active poll_check_timer freed in xe_oa_destroy_locked() when wedged
- [High] drm/xe/oa: broken batch cancellation and drain in xe_oa_stream_drain()
- [High] drm/xe/oa: unpinning mapped OA BO in xe_oa_quiesce_oa_unit() causes UAF
- [High] drm/xe/oa: stream_lock deadlock and missing unplug check in xe_oa_ioctl()
- [Medium] drm/xe/oa: NULL stream->oa->xe access before unplug check in xe_oa_mmap()
--
commit 6bc0367bf37beae85d632d239b653880aa00eb20
Author: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset
This commit introduces xe_oa_quiesce() to disable active OA streams, stop
their poll timers, and release device-bound resources on driver unbind or
PCI slot reset while keeping the stream structure alive until the file
descriptor is closed. It also wraps OA ioctls, mmap, and release in
drm_dev_enter() sections to synchronize against device unplug.
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index 31fc1e7675de0..175e833520bad 100644
> --- a/drivers/gpu/drm/xe/xe_oa.c
> +++ b/drivers/gpu/drm/xe/xe_oa.c
[ ... ]
> @@ -895,6 +920,13 @@ static void xe_oa_stream_drain(struct xe_oa_stream *stream)
> if (!stream->last_fence || dma_fence_is_signaled(stream->last_fence))
> return;
>
> + if (READ_ONCE(stream->dead)) {
> + if (q->vm)
> + xe_exec_queue_kill(q);
> + else
> + q->ops->kill(q);
> + }
> +
> timeout = msecs_to_jiffies(q->sched_props.job_timeout_ms) + HZ;
> if (!dma_fence_wait_timeout(stream->last_fence, false, timeout))
> drm_err(&stream->oa->xe->drm, "Timed out waiting for OA batch\n");
[Severity: High]
As reported by Sashiko on v3 [1], does killing the exec queue in
xe_oa_stream_drain() when stream->dead is set actually stop in-flight OA
batches on the hardware or cancel unstarted batches waiting on input
dependencies?
stream->dead is only set in xe_oa_quiesce_oa_unit(), which runs after
drm_dev_unplug() has marked xe->drm.unplugged = true. When
xe_oa_stream_drain() calls xe_exec_queue_kill(q) or q->ops->kill(q):
guc_exec_queue_kill()
xe_guc_exec_queue_trigger_cleanup()
xe_sched_tdr_queue_imm()
guc_exec_queue_timedout_job()
For an OA batch already in flight on sched->base.pending_list,
guc_exec_queue_timedout_job() takes the early unplug exit without disabling
scheduling in GuC:
drivers/gpu/drm/xe/xe_guc_submit.c:guc_exec_queue_timedout_job() {
if (!drm_dev_enter(&xe->drm, &idx)) {
xe_sched_job_set_error(job, -ENODEV);
return DRM_GPU_SCHED_STAT_NO_HANG;
}
}
xe_sched_job_set_error() signals job->fence and stream->last_fence in
software immediately while the batch is still executing on the GPU. As a
result, dma_fence_wait_timeout() returns right away, allowing the running GPU
batch to overwrite OA registers after xe_oa_stream_hw_teardown() and read
oa_bo->bb while xe_oa_stream_free_resources() -> xe_oa_free_configs() ->
xe_bb_free() frees the batchbuffer suballocation.
Conversely, if an OA config batch was submitted with an unsignaled input sync
dependency (via DRM_XE_OA_PROPERTY_SYNCS) and an output sync, the job is
still sitting in q->entity->job_queue rather than sched->base.pending_list.
Because guc_exec_queue_kill() only triggers TDR on pending_list and does not
tear down q->entity while the unscheduled job holds a reference on q, the job
is not canceled and dma_fence_wait_timeout() stalls for the full timeout.
> @@ -1697,6 +1730,9 @@ static long xe_oa_ioctl_locked(struct xe_oa_stream *stream,
> unsigned int cmd,
> unsigned long arg)
> {
> + if (stream->dead)
> + return -ENODEV;
> +
> switch (cmd) {
> case DRM_XE_OBSERVATION_IOCTL_ENABLE:
> return xe_oa_enable_locked(stream);
[Severity: High]
Can stream fd ioctls in xe_oa_ioctl() race with device removal or wedge, or
deadlock xe_oa_quiesce_oa_unit() on stream->stream_lock?
Unlike the DRM device ioctl in xe_observation.c, the stream file descriptor's
unlocked_ioctl handler (xe_oa_ioctl() -> xe_oa_ioctl_locked() in xe_oa.c)
bypasses drm_ioctl() and does not enter a drm_dev_enter() section or check
xe_wedged(). During xe_device_remove(), drm_dev_unplug(),
xe_bo_pci_dev_remove_all(), xe_pm_fini(), and earlier devm actions such as
xe_device_sanitize() all run before the devm action xe_oa_fini() sets
stream->dead = true. Similarly, stream->dead is not set when the device
wedges or when prepare_device_for_reset() disables the PCI device before slot
reset. Couldn't userspace invoke DRM_XE_OBSERVATION_IOCTL_ENABLE, DISABLE, or
CONFIG on the stream fd during that window and access MMIO or submit batches?
In addition, when DRM_XE_OBSERVATION_IOCTL_CONFIG is called without output
syncs (!num_signal), xe_oa_ioctl() holds stream->stream_lock while
xe_oa_emit_oa_config() waits uninterruptibly:
drivers/gpu/drm/xe/xe_oa.c:xe_oa_emit_oa_config() {
/* If nothing needs to be signaled we wait synchronously */
if (!num_signal) {
dma_fence_wait(&ofence->base, false);
dma_fence_put(&ofence->base);
}
}
If that config job is blocked in q->entity waiting on an unsignaled input
sync dependency (or queued on a wedged LR-VM exec_q with no reset where
guc_exec_queue_run_job() skips submission), dma_fence_wait() never completes
while holding stream->stream_lock. When xe_oa_fini() ->
xe_oa_quiesce_oa_unit() then tries to acquire mutex_lock(&stream->stream_lock)
before setting stream->dead or draining the queue, won't driver unbind or PCI
slot reset deadlock?
> @@ -1729,6 +1765,12 @@ static long xe_oa_ioctl(struct file *file,
>
> static void xe_oa_destroy_locked(struct xe_oa_stream *stream)
> {
> + if (stream->dead) {
> + mutex_destroy(&stream->stream_lock);
> + kfree(stream);
> + return;
> + }
> +
> xe_pm_runtime_get(gt_to_xe(stream->gt));
>
> /* A wedged device may be unresponsive, skip HW access */
> @@ -1745,17 +1787,30 @@ static void xe_oa_destroy_locked(struct xe_oa_stream *stream)
> kfree(stream);
> }
[Severity: Critical]
If the device is wedged before unplug and userspace closes an enabled OA
stream that has DRM_XE_OA_PROPERTY_SAMPLE_OA set, doesn't
xe_oa_destroy_locked() free stream while stream->poll_check_timer is still
active?
In xe_oa_release(), if drm_dev_enter() succeeds while xe_wedged() is true, it
calls xe_oa_destroy_locked(stream) with stream->dead == false:
drivers/gpu/drm/xe/xe_oa.c:xe_oa_destroy_locked() {
/* A wedged device may be unresponsive, skip HW access */
if (stream->enabled && !xe_wedged(gt_to_xe(stream->gt)))
xe_oa_disable_locked(stream);
xe_oa_stream_destroy(stream);
...
kfree(stream);
}
In the normal destroy path, hrtimer_cancel(&stream->poll_check_timer) is only
called inside xe_oa_disable_locked() -> xe_oa_stream_disable(). Unlike
xe_oa_quiesce_oa_unit(), which explicitly cancels stream->poll_check_timer
even when hw_accessible is false, skipping xe_oa_disable_locked() when wedged
leaves poll_check_timer armed while xe_oa_stream_destroy() frees
stream->oa_buffer.bo and xe_oa_destroy_locked() frees stream, causing
xe_oa_poll_check_timer_cb() to dereference freed memory in hardirq context.
[ ... ]
> @@ -1763,11 +1818,13 @@ static int xe_oa_release(struct inode *inode, struct file *file)
> static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
> {
> struct xe_oa_stream *stream = file->private_data;
> + struct xe_device *xe = gt_to_xe(stream->gt);
> int ret = xe_observation_paranoid_check();
> - struct xe_bo *bo = stream->oa_buffer.bo;
> + struct xe_bo *bo;
> + int idx;
>
> if (ret) {
> - drm_dbg(&stream->oa->xe->drm, "Insufficient privilege to map OA buffer\n");
> + drm_dbg(&xe->drm, "Insufficient privilege to map OA buffer\n");
> return ret;
> }
>
> @@ -1780,10 +1837,26 @@ static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
> return -EINVAL;
> }
>
> + /*
> + * xe_oa_quiesce() frees the OA buffer only after drm_dev_unplug(), which waits for
> + * this section to finish. Can't use stream_lock here, it is held across user copies
> + * which fault on mmap_lock, held by the caller.
> + */
> + if (!drm_dev_enter(&xe->drm, &idx))
> + return -ENODEV;
> +
> + if (READ_ONCE(stream->dead)) {
> + ret = -ENODEV;
> + goto exit;
> + }
[Severity: Medium]
In xe_oa_mmap(), the vma->vm_pgoff check right before drm_dev_enter() still
uses stream->oa->xe:
if (vma->vm_pgoff) {
drm_dbg(&stream->oa->xe->drm, "Wrong mmap offset, must be 0\n");
return -EINVAL;
}
After xe_oa_fini() sets oa->xe = NULL, calling mmap() with a non-zero offset
on a dead stream fd will evaluate &stream->oa->xe->drm with stream->oa->xe ==
NULL and return -EINVAL instead of -ENODEV. Should this use &xe->drm and
check drm_dev_enter() / stream->dead before validating the mmap arguments?
[ ... ]
> @@ -2625,6 +2702,95 @@ static void xe_oa_unregister(void *arg)
> oa->metrics_kobj = NULL;
> }
>
> +static void xe_oa_quiesce_oa_unit(struct xe_oa_unit *u, bool hw_accessible)
> +{
> + struct xe_oa_stream *stream = u->exclusive_stream;
> + unsigned long flags;
> +
> + if (!stream)
> + return;
> +
> + mutex_lock(&stream->stream_lock);
> +
> + spin_lock_irqsave(&stream->oa_buffer.ptr_lock, flags);
> + WRITE_ONCE(stream->dead, true);
> + spin_unlock_irqrestore(&stream->oa_buffer.ptr_lock, flags);
> +
> + if (stream->enabled && hw_accessible)
> + xe_oa_disable_locked(stream);
> +
> + stream->enabled = false;
> +
> + if (stream->sample)
> + hrtimer_cancel(&stream->poll_check_timer);
> +
> + wake_up_all(&stream->poll_wq);
> +
> + xe_oa_stream_drain(stream);
> +
> + /*
> + * Restore the HW state while the stream still holds its runtime PM ref and exec_q.
> + * The device is not reset on unbind, so this can't be left to a later reset.
> + */
> + if (hw_accessible)
> + xe_oa_stream_hw_teardown(stream);
> +
> + /*
> + * drm_dev_unplug() has already zapped the userspace mappings of the OA buffer and
> + * refaults get a dummy page, so the OA buffer can go. Each vma holds a reference on
> + * the BO, keeping the BO object itself alive until munmap. The BO is then no longer
> + * pinned when xe_bo_pinned_fini() DMA-unmaps the other kernel BOs, so drop its DMA
> + * mapping here, while it is still pinned.
> + */
> + xe_bo_dma_unmap_pinned(stream->oa_buffer.bo);
> + xe_oa_stream_free_resources(stream);
[Severity: High]
When a userspace VMA still holds a GEM reference on stream->oa_buffer.bo
across driver unbind or PCI slot reset, can unpinning the BO in
xe_oa_quiesce_oa_unit() -> xe_oa_stream_free_resources() ->
xe_bo_unpin_map_no_vm() lead to a use-after-free on tile->mem.ggtt and
xe->mem.shrinker?
During xe_device_remove(), xe_bo_pci_dev_remove_all() runs while
stream->oa_buffer.bo is still pinned, so ttm_resource_manager_evict_all()
skips it. When the devm action xe_oa_fini() subsequently calls
xe_oa_stream_free_resources(), xe_bo_unpin_map_no_vm() unpins the BO while
the VMA still holds a GEM reference:
xe_oa_stream_free_resources()
xe_oa_free_oa_buffer()
xe_bo_unpin_map_no_vm()
xe_bo_unpin()
xe_bo_account_unpin()
xe_ttm_tt_account_add()
Because the VMA keeps the BO alive past xe_bo_unpin_map_no_vm(), unpinning it
adds its pages to shrinker->shrinkable_pages and places the BO onto the TTM
LRU after xe_bo_pci_dev_remove_all() has already finished, with
bo->ggtt_node[id] and bo->ttm still allocated.
When the process later exits or unmaps the VMA and closes the stream fd:
1. ttm_bo_vm_close() drops the last GEM reference on the BO. When
want_init_on_free() is enabled (for example CONFIG_INIT_ON_FREE_DEFAULT_ON)
and bo->ttm is non-NULL, ttm_bo_release() queues ttm_bo_delayed_delete()
on xe->ttm.wq instead of freeing the BO immediately.
2. Closing the stream fd in xe_oa_release() drops the last drm_device
reference via drm_dev_put(&xe->drm), running drm_managed_release().
3. In drm_managed_release(), ggtt_fini_early() destroys ggtt->wq and calls
drm_mm_takedown(&ggtt->mm) while bo->ggtt_node is still allocated, and
drmm frees tile->mem.ggtt and runs xe_shrinker_fini() before the final
drmm callback xe_device_destroy() calls ttm_device_fini(&xe->ttm) to drain
xe->ttm.wq.
4. When ttm_bo_delayed_delete() -> xe_ttm_bo_destroy() runs, it calls
xe_ggtt_remove_bo(tile->mem.ggtt, bo) on the already-freed tile->mem.ggtt
(and if the shrinker walked the unpinned BO after unbind,
xe_shrinker_fini() hits the xe_assert() on shrinkable_pages/populated_tts
and frees xe->mem.shrinker before xe_ttm_tt_unpopulate() subtracts the
pages).
[1] https://lore.kernel.org/r/20261104005221.3230003-12-umesh.nerlige.ramappa@intel.com
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261105001559.3288915-9-umesh.nerlige.ramappa@intel.com?part=7
^ permalink raw reply [flat|nested] 16+ messages in thread
* ✓ Xe.CI.FULL: success for Cleanup OA stream on PCI unbind/remove (rev4)
2026-11-05 0:16 [PATCH v4 0/7] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
` (9 preceding siblings ...)
2026-11-05 2:02 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-11-05 15:18 ` Patchwork
10 siblings, 0 replies; 16+ messages in thread
From: Patchwork @ 2026-11-05 15:18 UTC (permalink / raw)
To: Umesh Nerlige Ramappa; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 39299 bytes --]
== Series Details ==
Series: Cleanup OA stream on PCI unbind/remove (rev4)
URL : https://patchwork.freedesktop.org/series/177300/
State : success
== Summary ==
CI Bug Log - changes from xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d_FULL -> xe-pw-177300v4_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-177300v4_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@core_hotunplug@hotunplug-rescan-with-load:
- shard-bmg: [PASS][1] -> [ABORT][2] ([Intel XE#9463])
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d/shard-bmg-4/igt@core_hotunplug@hotunplug-rescan-with-load.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-1/igt@core_hotunplug@hotunplug-rescan-with-load.html
* igt@kms_atomic_transition@plane-all-modeset-transition-fencing:
- shard-lnl: NOTRUN -> [SKIP][3] ([Intel XE#3279])
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_atomic_transition@plane-all-modeset-transition-fencing.html
* igt@kms_big_fb@4-tiled-8bpp-rotate-90:
- shard-lnl: NOTRUN -> [SKIP][4] ([Intel XE#1407])
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_big_fb@4-tiled-8bpp-rotate-90.html
* igt@kms_big_fb@x-tiled-8bpp-rotate-90:
- shard-bmg: NOTRUN -> [SKIP][5] ([Intel XE#2327])
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@kms_big_fb@x-tiled-8bpp-rotate-90.html
* igt@kms_big_fb@y-tiled-32bpp-rotate-180:
- shard-lnl: NOTRUN -> [SKIP][6] ([Intel XE#1124]) +2 other tests skip
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_big_fb@y-tiled-32bpp-rotate-180.html
* igt@kms_big_fb@y-tiled-32bpp-rotate-90:
- shard-bmg: NOTRUN -> [SKIP][7] ([Intel XE#1124])
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@kms_big_fb@y-tiled-32bpp-rotate-90.html
* igt@kms_big_fb@y-tiled-addfb:
- shard-lnl: NOTRUN -> [SKIP][8] ([Intel XE#1467] / [Intel XE#7367])
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_big_fb@y-tiled-addfb.html
* igt@kms_bw@connected-linear-tiling-3-displays-target-2160x1440p:
- shard-lnl: NOTRUN -> [SKIP][9] ([Intel XE#7679]) +1 other test skip
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_bw@connected-linear-tiling-3-displays-target-2160x1440p.html
* igt@kms_bw@linear-tiling-2-displays-target-1920x1080p:
- shard-bmg: NOTRUN -> [SKIP][10] ([Intel XE#367])
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-3/igt@kms_bw@linear-tiling-2-displays-target-1920x1080p.html
* igt@kms_bw@linear-tiling-3-displays-target-2560x1440p:
- shard-lnl: NOTRUN -> [SKIP][11] ([Intel XE#367])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_bw@linear-tiling-3-displays-target-2560x1440p.html
* igt@kms_bw@linear-tiling-4-displays-target-2560x1440p:
- shard-lnl: NOTRUN -> [SKIP][12] ([Intel XE#8365])
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_bw@linear-tiling-4-displays-target-2560x1440p.html
* igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs-cc:
- shard-lnl: NOTRUN -> [SKIP][13] ([Intel XE#2887]) +4 other tests skip
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_ccs@ccs-on-another-bo-4-tiled-mtl-rc-ccs-cc.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs-cc:
- shard-bmg: NOTRUN -> [SKIP][14] ([Intel XE#2887])
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/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-lnl: NOTRUN -> [SKIP][15] ([Intel XE#3432]) +1 other test skip
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs@pipe-c-dp-2:
- shard-bmg: NOTRUN -> [SKIP][16] ([Intel XE#2652]) +3 other tests skip
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-4/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs@pipe-c-dp-2.html
* igt@kms_chamelium_color_pipeline@plane-ctm3x4-lut1d:
- shard-lnl: NOTRUN -> [SKIP][17] ([Intel XE#7358]) +1 other test skip
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_chamelium_color_pipeline@plane-ctm3x4-lut1d.html
* igt@kms_chamelium_frames@hdmi-aspect-ratio:
- shard-lnl: NOTRUN -> [SKIP][18] ([Intel XE#373]) +4 other tests skip
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_chamelium_frames@hdmi-aspect-ratio.html
* igt@kms_content_protection@lic-type-0-hdcp14@pipe-a-dp-1:
- shard-bmg: NOTRUN -> [FAIL][19] ([Intel XE#3304]) +1 other test fail
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-7/igt@kms_content_protection@lic-type-0-hdcp14@pipe-a-dp-1.html
* igt@kms_content_protection@mei-interface:
- shard-lnl: NOTRUN -> [SKIP][20] ([Intel XE#1468] / [Intel XE#7396])
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_content_protection@mei-interface.html
* igt@kms_content_protection@srm:
- shard-lnl: NOTRUN -> [SKIP][21] ([Intel XE#7642])
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_content_protection@srm.html
* igt@kms_content_protection@suspend-resume@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [FAIL][22] ([Intel XE#1178] / [Intel XE#3304] / [Intel XE#7374]) +1 other test fail
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-9/igt@kms_content_protection@suspend-resume@pipe-a-dp-2.html
* igt@kms_cursor_crc@cursor-rapid-movement-512x512:
- shard-lnl: NOTRUN -> [SKIP][23] ([Intel XE#2321] / [Intel XE#7355])
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html
* igt@kms_cursor_crc@cursor-rapid-movement-64x21:
- shard-lnl: NOTRUN -> [SKIP][24] ([Intel XE#1424]) +1 other test skip
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_cursor_crc@cursor-rapid-movement-64x21.html
* igt@kms_cursor_crc@cursor-sliding-256x85:
- shard-bmg: NOTRUN -> [SKIP][25] ([Intel XE#2320]) +1 other test skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@kms_cursor_crc@cursor-sliding-256x85.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-legacy:
- shard-lnl: NOTRUN -> [SKIP][26] ([Intel XE#309] / [Intel XE#7343])
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_cursor_legacy@cursorb-vs-flipb-legacy.html
* igt@kms_dp_link_training@non-uhbr-mst-tbtalt-train:
- shard-lnl: NOTRUN -> [SKIP][27] ([Intel XE#9528])
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_dp_link_training@non-uhbr-mst-tbtalt-train.html
* igt@kms_dp_link_training@uhbr-sst:
- shard-lnl: NOTRUN -> [SKIP][28] ([Intel XE#9535])
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_dp_link_training@uhbr-sst.html
* igt@kms_dsc@dsc-with-formats-ultrajoiner:
- shard-lnl: NOTRUN -> [SKIP][29] ([Intel XE#8265]) +1 other test skip
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_dsc@dsc-with-formats-ultrajoiner.html
* igt@kms_flip@2x-absolute-wf_vblank-interruptible:
- shard-lnl: NOTRUN -> [SKIP][30] ([Intel XE#1421]) +2 other tests skip
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_flip@2x-absolute-wf_vblank-interruptible.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1:
- shard-lnl: [PASS][31] -> [FAIL][32] ([Intel XE#301] / [Intel XE#3149]) +1 other test fail
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html
* igt@kms_flip@flip-vs-expired-vblank@b-edp1:
- shard-lnl: [PASS][33] -> [FAIL][34] ([Intel XE#301]) +1 other test fail
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d/shard-lnl-2/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
* igt@kms_flip_scaled_crc@flip-32bpp-linear-to-32bpp-linear-reflect-x:
- shard-lnl: NOTRUN -> [SKIP][35] ([Intel XE#7179])
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_flip_scaled_crc@flip-32bpp-linear-to-32bpp-linear-reflect-x.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling:
- shard-lnl: NOTRUN -> [SKIP][36] ([Intel XE#7178] / [Intel XE#7351]) +3 other tests skip
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-upscaling.html
* igt@kms_force_connector_basic@force-edid:
- shard-lnl: NOTRUN -> [SKIP][37] ([Intel XE#352])
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_force_connector_basic@force-edid.html
* igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw:
- shard-bmg: NOTRUN -> [SKIP][38] ([Intel XE#2311]) +6 other tests skip
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw.html
* igt@kms_frontbuffer_tracking@drrs-argb161616f-draw-mmap-wc:
- shard-lnl: NOTRUN -> [SKIP][39] ([Intel XE#7061] / [Intel XE#7356]) +2 other tests skip
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_frontbuffer_tracking@drrs-argb161616f-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@drrshdr-2p-primscrn-pri-shrfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][40] ([Intel XE#7905]) +25 other tests skip
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_frontbuffer_tracking@drrshdr-2p-primscrn-pri-shrfb-draw-blt.html
* igt@kms_frontbuffer_tracking@drrshdr-abgr161616f-draw-blt:
- shard-bmg: NOTRUN -> [SKIP][41] ([Intel XE#7061])
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@kms_frontbuffer_tracking@drrshdr-abgr161616f-draw-blt.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-render:
- shard-bmg: NOTRUN -> [SKIP][42] ([Intel XE#4141])
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-onoff:
- shard-lnl: NOTRUN -> [SKIP][43] ([Intel XE#656] / [Intel XE#7905]) +14 other tests skip
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-onoff.html
* igt@kms_frontbuffer_tracking@fbcdrrs-slowdraw:
- shard-lnl: NOTRUN -> [SKIP][44] ([Intel XE#6312] / [Intel XE#651]) +4 other tests skip
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_frontbuffer_tracking@fbcdrrs-slowdraw.html
* igt@kms_frontbuffer_tracking@fbcdrrshdr-1p-primscrn-spr-indfb-onoff:
- shard-lnl: NOTRUN -> [SKIP][45] ([Intel XE#6312]) +7 other tests skip
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_frontbuffer_tracking@fbcdrrshdr-1p-primscrn-spr-indfb-onoff.html
* igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-cur-indfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][46] ([Intel XE#7865]) +11 other tests skip
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-cur-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-spr-indfb-draw-mmap-wc:
- shard-bmg: NOTRUN -> [SKIP][47] ([Intel XE#2313]) +5 other tests skip
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsrhdr-1p-primscrn-spr-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@psrhdr-argb161616f-draw-mmap-wc:
- shard-lnl: NOTRUN -> [SKIP][48] ([Intel XE#7061])
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_frontbuffer_tracking@psrhdr-argb161616f-draw-mmap-wc.html
* igt@kms_hdmi_audio_bw@suspend-disk-audio-recovery:
- shard-lnl: NOTRUN -> [SKIP][49] ([Intel XE#9312])
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_hdmi_audio_bw@suspend-disk-audio-recovery.html
* igt@kms_joiner@invalid-modeset-big-joiner:
- shard-lnl: NOTRUN -> [SKIP][50] ([Intel XE#6901])
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_joiner@invalid-modeset-big-joiner.html
* igt@kms_joiner@invalid-modeset-force-ultra-joiner:
- shard-lnl: NOTRUN -> [SKIP][51] ([Intel XE#6900] / [Intel XE#7362])
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_joiner@invalid-modeset-force-ultra-joiner.html
* igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
- shard-lnl: NOTRUN -> [SKIP][52] ([Intel XE#7591])
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
* igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-modifier:
- shard-bmg: NOTRUN -> [SKIP][53] ([Intel XE#7283])
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-modifier.html
* igt@kms_plane@pixel-format-y-tiled-modifier:
- shard-lnl: NOTRUN -> [SKIP][54] ([Intel XE#7283]) +4 other tests skip
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_plane@pixel-format-y-tiled-modifier.html
* igt@kms_plane_multiple@2x-tiling-none:
- shard-lnl: NOTRUN -> [SKIP][55] ([Intel XE#4596] / [Intel XE#5854])
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_plane_multiple@2x-tiling-none.html
* igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5@pipe-c:
- shard-lnl: NOTRUN -> [SKIP][56] ([Intel XE#2763] / [Intel XE#6886]) +3 other tests skip
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5@pipe-c.html
* igt@kms_pm_dc@dc3co-vpb-simulation:
- shard-bmg: NOTRUN -> [SKIP][57] ([Intel XE#8395] / [Intel XE#8396]) +1 other test skip
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@kms_pm_dc@dc3co-vpb-simulation.html
* igt@kms_pm_dc@dc3co-vpb-simulation@psr2-xrgb8888:
- shard-bmg: NOTRUN -> [SKIP][58] ([Intel XE#8396]) +1 other test skip
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@kms_pm_dc@dc3co-vpb-simulation@psr2-xrgb8888.html
* igt@kms_pm_rpm@dpms-lpsp:
- shard-bmg: NOTRUN -> [SKIP][59] ([Intel XE#1439] / [Intel XE#3141] / [Intel XE#7383] / [Intel XE#836])
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@kms_pm_rpm@dpms-lpsp.html
* igt@kms_pm_rpm@package-g7:
- shard-lnl: NOTRUN -> [SKIP][60] ([Intel XE#6813])
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_pm_rpm@package-g7.html
* igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area:
- shard-lnl: NOTRUN -> [SKIP][61] ([Intel XE#2893] / [Intel XE#7304]) +1 other test skip
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area.html
* igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area:
- shard-lnl: NOTRUN -> [SKIP][62] ([Intel XE#2893] / [Intel XE#4608] / [Intel XE#7304])
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area.html
* igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area@pipe-a-edp-1:
- shard-lnl: NOTRUN -> [SKIP][63] ([Intel XE#4608])
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area@pipe-a-edp-1.html
* igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area@pipe-b-edp-1:
- shard-lnl: NOTRUN -> [SKIP][64] ([Intel XE#4608] / [Intel XE#7304])
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_psr2_sf@fbc-psr2-plane-move-sf-dmg-area@pipe-b-edp-1.html
* igt@kms_psr@fbc-pr-primary-page-flip:
- shard-lnl: NOTRUN -> [SKIP][65] ([Intel XE#1406])
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_psr@fbc-pr-primary-page-flip.html
* igt@kms_psr@fbc-psr2-primary-render:
- shard-lnl: NOTRUN -> [SKIP][66] ([Intel XE#1406] / [Intel XE#7345])
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_psr@fbc-psr2-primary-render.html
* igt@kms_psr@fbc-psr2-primary-render@edp-1:
- shard-lnl: NOTRUN -> [SKIP][67] ([Intel XE#1406] / [Intel XE#4609] / [Intel XE#7345])
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@kms_psr@fbc-psr2-primary-render@edp-1.html
* igt@kms_rotation_crc@primary-4-tiled-reflect-x-180:
- shard-lnl: NOTRUN -> [SKIP][68] ([Intel XE#3904] / [Intel XE#7342])
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_rotation_crc@primary-4-tiled-reflect-x-180.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
- shard-lnl: NOTRUN -> [SKIP][69] ([Intel XE#1127] / [Intel XE#5813])
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html
* igt@kms_setmode@clone-exclusive-crtc:
- shard-lnl: NOTRUN -> [SKIP][70] ([Intel XE#1435] / [Intel XE#9142])
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@kms_setmode@clone-exclusive-crtc.html
* igt@sriov_basic@pf-unbind-with-vf-probed:
- shard-lnl: NOTRUN -> [SKIP][71] ([Intel XE#8866])
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@sriov_basic@pf-unbind-with-vf-probed.html
* igt@xe_cw_post_sync@walker-post-sync:
- shard-bmg: NOTRUN -> [SKIP][72] ([Intel XE#8608])
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@xe_cw_post_sync@walker-post-sync.html
* igt@xe_evict@evict-beng-mixed-threads-large-multi-vm:
- shard-lnl: NOTRUN -> [SKIP][73] ([Intel XE#6540] / [Intel XE#688]) +3 other tests skip
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@xe_evict@evict-beng-mixed-threads-large-multi-vm.html
* igt@xe_exec_balancer@many-cm-virtual-userptr:
- shard-lnl: NOTRUN -> [SKIP][74] ([Intel XE#7482]) +9 other tests skip
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@xe_exec_balancer@many-cm-virtual-userptr.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-userptr:
- shard-bmg: NOTRUN -> [SKIP][75] ([Intel XE#2322] / [Intel XE#7372]) +1 other test skip
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-userptr.html
* igt@xe_exec_basic@multigpu-no-exec-basic-defer-mmap:
- shard-lnl: NOTRUN -> [SKIP][76] ([Intel XE#1392]) +4 other tests skip
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@xe_exec_basic@multigpu-no-exec-basic-defer-mmap.html
* igt@xe_exec_fault_mode@atomic-many:
- shard-bmg: [PASS][77] -> [FAIL][78] ([Intel XE#8578])
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d/shard-bmg-3/igt@xe_exec_fault_mode@atomic-many.html
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@xe_exec_fault_mode@atomic-many.html
* igt@xe_exec_fault_mode@once-multi-queue-userptr-rebind:
- shard-lnl: NOTRUN -> [SKIP][79] ([Intel XE#8374]) +7 other tests skip
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@xe_exec_fault_mode@once-multi-queue-userptr-rebind.html
* igt@xe_exec_multi_queue@many-execs-preempt-mode-fault-userptr:
- shard-bmg: NOTRUN -> [SKIP][80] ([Intel XE#8364]) +3 other tests skip
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-3/igt@xe_exec_multi_queue@many-execs-preempt-mode-fault-userptr.html
* igt@xe_exec_multi_queue@max-queues-preempt-mode-fault-basic-smem:
- shard-lnl: NOTRUN -> [SKIP][81] ([Intel XE#8364]) +14 other tests skip
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@xe_exec_multi_queue@max-queues-preempt-mode-fault-basic-smem.html
* igt@xe_exec_reset@cm-multi-queue-close-fd:
- shard-lnl: NOTRUN -> [SKIP][82] ([Intel XE#8369])
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@xe_exec_reset@cm-multi-queue-close-fd.html
* igt@xe_exec_reset@gt-stress-reset-destroy-vm-context:
- shard-bmg: [PASS][83] -> [DMESG-WARN][84] ([Intel XE#8652])
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d/shard-bmg-9/igt@xe_exec_reset@gt-stress-reset-destroy-vm-context.html
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-5/igt@xe_exec_reset@gt-stress-reset-destroy-vm-context.html
* igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr-rebind:
- shard-bmg: NOTRUN -> [SKIP][85] ([Intel XE#8378]) +3 other tests skip
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr-rebind.html
* igt@xe_exec_threads@threads-multi-queue-cm-userptr-rebind:
- shard-lnl: NOTRUN -> [SKIP][86] ([Intel XE#8378]) +3 other tests skip
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@xe_exec_threads@threads-multi-queue-cm-userptr-rebind.html
* igt@xe_fault_injection@probe-fail-guc-xe_guc_ct_send_recv:
- shard-lnl: [PASS][87] -> [ABORT][88] ([Intel XE#6652])
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d/shard-lnl-8/igt@xe_fault_injection@probe-fail-guc-xe_guc_ct_send_recv.html
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-4/igt@xe_fault_injection@probe-fail-guc-xe_guc_ct_send_recv.html
* igt@xe_multigpu_svm@mgpu-atomic-op-prefetch:
- shard-bmg: NOTRUN -> [SKIP][89] ([Intel XE#6964])
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-3/igt@xe_multigpu_svm@mgpu-atomic-op-prefetch.html
* igt@xe_multigpu_svm@mgpu-xgpu-access-prefetch:
- shard-lnl: NOTRUN -> [SKIP][90] ([Intel XE#6964]) +2 other tests skip
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@xe_multigpu_svm@mgpu-xgpu-access-prefetch.html
* igt@xe_pat@l2-flush-opt-svm-pat-restrict:
- shard-lnl: NOTRUN -> [SKIP][91] ([Intel XE#7590] / [Intel XE#7772])
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@xe_pat@l2-flush-opt-svm-pat-restrict.html
* igt@xe_pm@d3cold-mocs:
- shard-lnl: NOTRUN -> [SKIP][92] ([Intel XE#2284] / [Intel XE#7370])
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@xe_pm@d3cold-mocs.html
* igt@xe_pm@s3-d3hot-basic-exec:
- shard-lnl: NOTRUN -> [SKIP][93] ([Intel XE#584] / [Intel XE#7369])
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@xe_pm@s3-d3hot-basic-exec.html
* igt@xe_pm@s4-vm-bind-unbind-all:
- shard-ptl: [PASS][94] -> [ABORT][95] ([Intel XE#9362])
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d/shard-ptl-6/igt@xe_pm@s4-vm-bind-unbind-all.html
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-ptl-3/igt@xe_pm@s4-vm-bind-unbind-all.html
* igt@xe_pm_residency@aspm_link_residency:
- shard-lnl: NOTRUN -> [SKIP][96] ([Intel XE#7271])
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@xe_pm_residency@aspm_link_residency.html
* igt@xe_pm_residency@gt-c6-freeze@gt0:
- shard-bmg: [PASS][97] -> [FAIL][98] ([Intel XE#9254]) +1 other test fail
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d/shard-bmg-4/igt@xe_pm_residency@gt-c6-freeze@gt0.html
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-1/igt@xe_pm_residency@gt-c6-freeze@gt0.html
* igt@xe_prefetch_fault@prefetch-fault:
- shard-lnl: NOTRUN -> [SKIP][99] ([Intel XE#7599])
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@xe_prefetch_fault@prefetch-fault.html
* igt@xe_query@multigpu-query-topology-l3-bank-mask:
- shard-bmg: NOTRUN -> [SKIP][100] ([Intel XE#944])
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@xe_query@multigpu-query-topology-l3-bank-mask.html
* igt@xe_sriov_flr@flr-vfs-parallel:
- shard-lnl: NOTRUN -> [SKIP][101] ([Intel XE#4273])
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@xe_sriov_flr@flr-vfs-parallel.html
* igt@xe_sriov_scheduling@nonpreempt-engine-resets-low-priority:
- shard-lnl: NOTRUN -> [SKIP][102] ([Intel XE#8339])
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@xe_sriov_scheduling@nonpreempt-engine-resets-low-priority.html
* igt@xe_vm@bind-array-enobufs:
- shard-lnl: NOTRUN -> [FAIL][103] ([Intel XE#9424])
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@xe_vm@bind-array-enobufs.html
* igt@xe_vm@out-of-memory:
- shard-lnl: NOTRUN -> [SKIP][104] ([Intel XE#5745] / [Intel XE#7892])
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-2/igt@xe_vm@out-of-memory.html
#### Possible fixes ####
* igt@xe_fault_injection@exec-queue-create-fail-xe_exec_queue_create:
- shard-bmg: [DMESG-WARN][105] ([Intel XE#1727] / [Intel XE#6819]) -> [PASS][106]
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d/shard-bmg-3/igt@xe_fault_injection@exec-queue-create-fail-xe_exec_queue_create.html
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-6/igt@xe_fault_injection@exec-queue-create-fail-xe_exec_queue_create.html
* igt@xe_fault_injection@exec-queue-create-fail-xe_hw_engine_group_add_exec_queue:
- shard-bmg: [ABORT][107] ([Intel XE#9463]) -> [PASS][108]
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d/shard-bmg-10/igt@xe_fault_injection@exec-queue-create-fail-xe_hw_engine_group_add_exec_queue.html
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-3/igt@xe_fault_injection@exec-queue-create-fail-xe_hw_engine_group_add_exec_queue.html
* igt@xe_pm@s4-exec-after:
- shard-lnl: [ABORT][109] ([Intel XE#9362]) -> [PASS][110]
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d/shard-lnl-5/igt@xe_pm@s4-exec-after.html
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-8/igt@xe_pm@s4-exec-after.html
* igt@xe_pm@s4-mocs:
- shard-lnl: [DMESG-WARN][111] ([Intel XE#7727]) -> [PASS][112]
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d/shard-lnl-7/igt@xe_pm@s4-mocs.html
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-lnl-4/igt@xe_pm@s4-mocs.html
#### Warnings ####
* igt@kms_hdr@brightness-with-hdr:
- shard-bmg: [SKIP][113] ([Intel XE#3544]) -> [SKIP][114] ([Intel XE#3374] / [Intel XE#3544])
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d/shard-bmg-1/igt@kms_hdr@brightness-with-hdr.html
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-2/igt@kms_hdr@brightness-with-hdr.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-bmg: [FAIL][115] ([Intel XE#1729] / [Intel XE#7424]) -> [SKIP][116] ([Intel XE#2426] / [Intel XE#5848])
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d/shard-bmg-1/igt@kms_tiled_display@basic-test-pattern.html
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/shard-bmg-2/igt@kms_tiled_display@basic-test-pattern.html
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
[Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
[Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
[Intel XE#1424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1424
[Intel XE#1435]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1435
[Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
[Intel XE#1467]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1467
[Intel XE#1468]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1468
[Intel XE#1727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1727
[Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[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#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
[Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
[Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#2893]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2893
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#3141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3141
[Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
[Intel XE#3279]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3279
[Intel XE#3304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3304
[Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
[Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
[Intel XE#352]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/352
[Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
[Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
[Intel XE#4273]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4273
[Intel XE#4596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4596
[Intel XE#4608]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4608
[Intel XE#4609]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4609
[Intel XE#5745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5745
[Intel XE#5813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5813
[Intel XE#584]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/584
[Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
[Intel XE#5854]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5854
[Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#6540]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6540
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#6652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6652
[Intel XE#6813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6813
[Intel XE#6819]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6819
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#6886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6886
[Intel XE#6900]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6900
[Intel XE#6901]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6901
[Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
[Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
[Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
[Intel XE#7179]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7179
[Intel XE#7271]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7271
[Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
[Intel XE#7304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7304
[Intel XE#7342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7342
[Intel XE#7343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7343
[Intel XE#7345]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7345
[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#7362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7362
[Intel XE#7367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7367
[Intel XE#7369]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7369
[Intel XE#7370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7370
[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#7383]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7383
[Intel XE#7396]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7396
[Intel XE#7424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7424
[Intel XE#7482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7482
[Intel XE#7590]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7590
[Intel XE#7591]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7591
[Intel XE#7599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7599
[Intel XE#7642]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7642
[Intel XE#7679]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7679
[Intel XE#7727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7727
[Intel XE#7772]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7772
[Intel XE#7865]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7865
[Intel XE#7892]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7892
[Intel XE#7905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7905
[Intel XE#8265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8265
[Intel XE#8339]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8339
[Intel XE#836]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/836
[Intel XE#8364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8364
[Intel XE#8365]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8365
[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#8395]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8395
[Intel XE#8396]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8396
[Intel XE#8578]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8578
[Intel XE#8608]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8608
[Intel XE#8652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8652
[Intel XE#8866]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8866
[Intel XE#9142]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9142
[Intel XE#9254]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9254
[Intel XE#9312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9312
[Intel XE#9362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9362
[Intel XE#9424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9424
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
[Intel XE#9463]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9463
[Intel XE#9528]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9528
[Intel XE#9535]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9535
Build changes
-------------
* Linux: xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d -> xe-pw-177300v4
IGT_9177: 9177
xe-6063-e19b5ed0ad912bb15fa5826fdc746f739e39650d: e19b5ed0ad912bb15fa5826fdc746f739e39650d
xe-pw-177300v4: 177300v4
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v4/index.html
[-- Attachment #2: Type: text/html, Size: 43703 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v4 5/7] drm/xe/oa: Wait for in-flight OA batches before stream HW teardown
2026-11-05 1:03 ` sashiko-bot
@ 2026-11-05 23:46 ` Umesh Nerlige Ramappa
0 siblings, 0 replies; 16+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-11-05 23:46 UTC (permalink / raw)
To: sashiko-reviews; +Cc: intel-xe
On Thu, Nov 05, 2026 at 01:03:27AM +0000, sashiko-bot@kernel.org wrote:
>Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
>- [High] drm/xe/oa: context LRI batch in xe_oa_disable_metric_set() is not drained
>- [High] drm/xe/oa: post-teardown HW programming when xe_oa_stream_drain() times out
>- [Medium] drm/xe/oa: missing xe_oa_stream_drain() on xe_oa_stream_init() error path
>--
>
>commit 82829afb190084d0c0c592c6968d740225601cf9
>Author: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
>
>drm/xe/oa: Wait for in-flight OA batches before stream HW teardown
>
>This commit records the fence from context LRI batches in
>stream->last_fence and adds xe_oa_stream_drain() to wait for
>stream->last_fence with a timeout before running hardware teardown when an
>OA stream is destroyed.
>
>> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
>> index 7552ace821caf..31fc1e7675de0 100644
>> --- a/drivers/gpu/drm/xe/xe_oa.c
>> +++ b/drivers/gpu/drm/xe/xe_oa.c
>> @@ -733,6 +733,12 @@ static void xe_oa_free_configs(struct xe_oa_stream *stream)
>> dma_fence_put(stream->last_fence);
>> }
>>
>> +static void xe_oa_update_last_fence(struct xe_oa_stream *stream, struct dma_fence *fence)
>> +{
>> + dma_fence_put(stream->last_fence);
>> + stream->last_fence = dma_fence_get(fence);
>> +}
>> +
>> static int xe_oa_load_with_lri(struct xe_oa_stream *stream, struct xe_oa_reg *reg_lri, u32 count)
>> {
>> struct dma_fence *fence;
>> @@ -753,6 +759,7 @@ static int xe_oa_load_with_lri(struct xe_oa_stream *stream, struct xe_oa_reg *re
>> goto free_bb;
>> }
>> xe_bb_free(bb, fence);
>> + xe_oa_update_last_fence(stream, fence);
>
>[Severity: Medium]
>What happens if xe_oa_enable_metric_set() fails in xe_oa_emit_oa_config()
>after xe_oa_configure_oa_context(stream, true) has already submitted the
>enable LRI batch via xe_oa_load_with_lri()?
>
>In drivers/gpu/drm/xe/xe_oa.c, xe_oa_enable_metric_set() submits the
>context LRI batch before emitting the OA config:
>
>drivers/gpu/drm/xe/xe_oa.c:xe_oa_enable_metric_set() {
> ...
> if (stream->exec_q) {
> ret = xe_oa_configure_oa_context(stream, true);
> if (ret)
> return ret;
> }
>
> return xe_oa_emit_oa_config(stream, stream->oa_config);
>}
>
>If xe_oa_emit_oa_config() fails (for example, due to an allocation failure
>or xe_sync_entry_add_deps() error in xe_oa_submit_bb()),
>xe_oa_stream_init() jumps to err_put_k_exec_q:
>
>drivers/gpu/drm/xe/xe_oa.c:xe_oa_stream_init() {
> ...
>err_put_k_exec_q:
> xe_oa_disable_metric_set(stream);
> xe_exec_queue_put(stream->k_exec_q);
>err_free_oa_buf:
> xe_oa_free_oa_buffer(stream);
>err_fw_put:
> xe_force_wake_put(gt_to_fw(gt), stream->fw_ref);
> xe_pm_runtime_put(stream->oa->xe);
> xe_oa_free_configs(stream);
>}
>
>Should this error path also call xe_oa_stream_drain(stream) so that the
>in-flight LRI batches from enabling and disabling the OA context are
>waited on before forcewake, runtime PM, and stream->last_fence are
>released?
Not an issue. The job has it's own runtime pm reference, so it runs on
its own without depending on OA forcewake/runtime_pm. The current error
path undoes whatever the stream init configures in the LRI batch, so the
flow is maintained same as the how the previous code behaved in normal
scenarios.
>
>> dma_fence_put(fence);
>>
>> return 0;
>> @@ -876,6 +883,23 @@ static void xe_oa_disable_metric_set(struct xe_oa_stream *stream)
>> xe_mmio_rmw32(mmio, OAM_COMPRESSION_T3_CONTROL, OAM_LAT_MEASURE_ENABLE, 0);
>> }
>>
>> +/*
>> + * Wait for the last OA batch of the stream, so that it can't program the HW after the HW
>> + * teardown.
>> + */
>> +static void xe_oa_stream_drain(struct xe_oa_stream *stream)
>> +{
>> + struct xe_exec_queue *q = stream->exec_q ?: stream->k_exec_q;
>> + long timeout;
>> +
>> + if (!stream->last_fence || dma_fence_is_signaled(stream->last_fence))
>> + return;
>> +
>> + timeout = msecs_to_jiffies(q->sched_props.job_timeout_ms) + HZ;
>> + if (!dma_fence_wait_timeout(stream->last_fence, false, timeout))
>> + drm_err(&stream->oa->xe->drm, "Timed out waiting for OA batch\n");
>> +}
>
>[Severity: High]
>Can an OA config batch still execute and program OA registers after
>xe_oa_stream_hw_teardown() if dma_fence_wait_timeout() times out here?
>
>When userspace opens a stream or calls DRM_XE_OBSERVATION_IOCTL_CONFIG
>with both an unsignaled input sync (without DRM_XE_SYNC_FLAG_SIGNAL) and
>an output sync (with DRM_XE_SYNC_FLAG_SIGNAL), xe_oa_emit_oa_config()
>calls xe_oa_submit_bb(stream, XE_OA_SUBMIT_ADD_DEPS, oa_bo->bb), which
>attaches the input sync to the job via xe_sync_entry_add_deps() and
>returns without waiting because num_signal is non-zero.
>
>While that input sync remains unsignaled, the job stays queued in
>q->entity waiting on the dependency callback and the scheduler TDR timer
>has not started. If the stream is closed before the input sync is
>signaled, dma_fence_wait_timeout() in xe_oa_stream_drain() will time out
>after q->sched_props.job_timeout_ms + HZ and return without killing the
>queue or canceling the pending job.
>
>Because the pending xe_sched_job holds a reference on job->q until
>xe_sched_job_destroy(), xe_exec_queue_put(stream->k_exec_q) in
>xe_oa_stream_free_resources() does not destroy k_exec_q or tear down its
>scheduler entity. If userspace signals the input sync after
>xe_oa_stream_destroy() has finished, wouldn't the scheduler wake up and
>run the OA config batch on the hardware after OA registers have been
>restored and forcewake has been released?
>
>[ ... ]
>
>> @@ -913,6 +937,7 @@ static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
>>
>> mutex_destroy(&stream->stream_lock);
>>
>> + xe_oa_stream_drain(stream);
>> if (!xe_wedged(stream->oa->xe))
>> xe_oa_stream_hw_teardown(stream);
>
>[Severity: High]
>Does calling xe_oa_stream_drain(stream) before xe_oa_stream_hw_teardown()
>leave the context-restore LRI batch submitted during teardown undrained?
>
>During stream enable in xe_oa_enable_metric_set(),
>xe_oa_configure_oa_context(stream, true) is immediately followed by
>xe_oa_emit_oa_config(), which overwrites stream->last_fence with the
>config batch fence.
>
>Then, during teardown in xe_oa_stream_destroy(), xe_oa_stream_drain() runs
>before xe_oa_stream_hw_teardown():
>
>xe_oa_stream_destroy()
> xe_oa_stream_drain()
> xe_oa_stream_hw_teardown()
> xe_oa_disable_metric_set()
> if (stream->exec_q)
> xe_oa_configure_oa_context(stream, false)
> xe_oa_configure_oar_context() / xe_oa_configure_oac_context()
> xe_oa_load_with_lri()
> xe_oa_update_last_fence(stream, fence)
> xe_force_wake_put()
> xe_oa_stream_free_resources()
> xe_oa_free_configs()
> dma_fence_put(stream->last_fence)
>
>When stream->exec_q is set, xe_oa_disable_metric_set() submits a new LRI
>batch to restore OACTXCONTROL, OAR_OACONTROL or OAC_OACONTROL, and
>RING_CONTEXT_CONTROL, updating stream->last_fence after
>xe_oa_stream_drain() has already completed. xe_oa_stream_hw_teardown() and
>xe_oa_stream_free_resources() then immediately release forcewake, runtime
>PM, and stream->last_fence without waiting for that LRI batch to complete.
Not an issue, since behavior is retained as the code prior to this
series. On xe_oa_disable_metric_set(), the LRI batch execution is not
waited upon since it runs independently and holds a reference to the
exec queue.
Regards,
Umesh
>
>--
>Sashiko AI review · https://sashiko.dev/#/patchset/20261105001559.3288915-9-umesh.nerlige.ramappa@intel.com?part=5
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2026-11-05 23:46 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-05 0:16 [PATCH v4 0/7] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
2026-11-05 0:16 ` [PATCH v4 1/7] drm/xe/oa: Use the drm device address_space for the OA stream fd Umesh Nerlige Ramappa
2026-11-05 0:16 ` [PATCH v4 2/7] drm/xe/oa: Split OA stream destroy into HW teardown and resource release Umesh Nerlige Ramappa
2026-11-05 0:16 ` [PATCH v4 3/7] drm/xe/oa: Take the runtime PM reference in xe_oa_destroy_locked() Umesh Nerlige Ramappa
2026-11-05 0:16 ` [PATCH v4 4/7] drm/xe/oa: Skip OA HW teardown on a wedged device Umesh Nerlige Ramappa
2026-11-05 0:44 ` sashiko-bot
2026-11-05 0:16 ` [PATCH v4 5/7] drm/xe/oa: Wait for in-flight OA batches before stream HW teardown Umesh Nerlige Ramappa
2026-11-05 1:03 ` sashiko-bot
2026-11-05 23:46 ` Umesh Nerlige Ramappa
2026-11-05 0:16 ` [PATCH v4 6/7] drm/xe: Reject vm_ops->access on BO mappings of an unplugged device Umesh Nerlige Ramappa
2026-11-05 0:16 ` [PATCH v4 7/7] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset Umesh Nerlige Ramappa
2026-11-05 2:11 ` sashiko-bot
2026-11-05 1:20 ` ✗ CI.checkpatch: warning for Cleanup OA stream on PCI unbind/remove (rev4) Patchwork
2026-11-05 1:23 ` ✓ CI.KUnit: success " Patchwork
2026-11-05 2:02 ` ✓ Xe.CI.BAT: " Patchwork
2026-11-05 15:18 ` ✓ Xe.CI.FULL: " Patchwork
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.