* [PATCH v2 1/3] drm/xe/oa: Use the drm device address_space for the OA stream fd
2026-10-30 22:30 [PATCH v2 0/3] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
@ 2026-10-30 22:30 ` Umesh Nerlige Ramappa
2026-10-30 22:30 ` [PATCH v2 2/3] drm/xe/oa: Gate OA buffer mmap faults Umesh Nerlige Ramappa
` (4 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-10-30 22:30 UTC (permalink / raw)
To: intel-xe, Matthew Brost; +Cc: riana.tauro, shekhar.chauhan, 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 42a95ec733d3..50562d53e7b2 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -907,6 +907,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,
@@ -914,6 +915,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
@@ -1721,6 +1733,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");
@@ -1738,6 +1759,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);
}
@@ -1868,6 +1891,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;
@@ -1909,12 +1933,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] 9+ messages in thread* [PATCH v2 2/3] drm/xe/oa: Gate OA buffer mmap faults
2026-10-30 22:30 [PATCH v2 0/3] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
2026-10-30 22:30 ` [PATCH v2 1/3] drm/xe/oa: Use the drm device address_space for the OA stream fd Umesh Nerlige Ramappa
@ 2026-10-30 22:30 ` Umesh Nerlige Ramappa
2026-10-30 22:52 ` sashiko-bot
2026-10-30 22:31 ` [PATCH v2 3/3] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset Umesh Nerlige Ramappa
` (3 subsequent siblings)
5 siblings, 1 reply; 9+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-10-30 22:30 UTC (permalink / raw)
To: intel-xe, Matthew Brost; +Cc: riana.tauro, shekhar.chauhan, harish.chegondi
The OA buffer currently uses ttm_bo fault handlers when mapping the
buffer to user space. We have a case where we teardown the OA buffer if
a pci unbind/remove is initiated while the user has mapped the OA
buffer. In such a case, we want to prevent access to the OA buffer.
Add xe_oa_buffer_fault(), a thin wrapper around the existing
xe_bo_cpu_fault() that first checks stream->dead and returns
VM_FAULT_SIGBUS without touching the BO if the stream is no longer
alive. Install it as the vma's vm_ops in xe_oa_mmap() after a
successful drm_gem_mmap_obj(), alongside the existing
ttm_bo_vm_open()/ttm_bo_vm_close()/xe_bo_vm_access() used for a
standard xe BO mapping.
Access the stream object from vma->vm_file->private_data, since
vm_private_data is owned by GEM/TTM for its own open/close refcounting
and must not be repurposed.
xe_bo_cpu_fault() and xe_bo_vm_access() are exposed (no longer
static) so they can be reused here.
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
---
drivers/gpu/drm/xe/xe_bo.c | 30 +++++++++++++++++++++++++++---
drivers/gpu/drm/xe/xe_bo.h | 4 ++++
drivers/gpu/drm/xe/xe_oa.c | 31 ++++++++++++++++++++++++++++++-
drivers/gpu/drm/xe/xe_oa_types.h | 3 +++
4 files changed, 64 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 42a6aa1a2e4a..6b399adcb844 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -2233,7 +2233,18 @@ static vm_fault_t xe_bo_cpu_fault_fastpath(struct vm_fault *vmf, struct xe_devic
return ret;
}
-static vm_fault_t xe_bo_cpu_fault(struct vm_fault *vmf)
+/**
+ * xe_bo_cpu_fault() - vm_ops->fault handler for xe GEM object mmaps
+ * @vmf: The vm_fault descriptor
+ *
+ * Shared fault handler for CPU access to xe BOs mapped via
+ * drm_gem_mmap_obj(). Exposed so other mmap paths built on top of a raw
+ * anon_inode fd (e.g. xe_oa) can wrap it with their own liveness checks
+ * while still deferring to the common BO fault handling.
+ *
+ * Return: A vm_fault_t encoding the result of the fault handling.
+ */
+vm_fault_t xe_bo_cpu_fault(struct vm_fault *vmf)
{
struct ttm_buffer_object *tbo = vmf->vma->vm_private_data;
struct drm_device *ddev = tbo->base.dev;
@@ -2339,8 +2350,21 @@ static vm_fault_t xe_bo_cpu_fault(struct vm_fault *vmf)
return ret;
}
-static int xe_bo_vm_access(struct vm_area_struct *vma, unsigned long addr,
- void *buf, int len, int write)
+/**
+ * xe_bo_vm_access() - vm_ops->access handler for xe GEM object mmaps
+ * @vma: The vma accessed
+ * @addr: The virtual address accessed
+ * @buf: The buffer to read from / write to
+ * @len: The number of bytes to transfer
+ * @write: Whether this is a write access
+ *
+ * Shared vm_ops->access handler for xe BOs, exposed for the same reason as
+ * xe_bo_cpu_fault().
+ *
+ * Return: The number of bytes transferred, or a negative error code.
+ */
+int xe_bo_vm_access(struct vm_area_struct *vma, unsigned long addr,
+ void *buf, int len, int write)
{
struct ttm_buffer_object *ttm_bo = vma->vm_private_data;
struct xe_bo *bo = ttm_to_xe_bo(ttm_bo);
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index 77b3a02e9b8e..ae435495b67b 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -423,6 +423,10 @@ int xe_bo_vmap(struct xe_bo *bo);
void xe_bo_vunmap(struct xe_bo *bo);
int xe_bo_read(struct xe_bo *bo, u64 offset, void *dst, int size);
+vm_fault_t xe_bo_cpu_fault(struct vm_fault *vmf);
+int xe_bo_vm_access(struct vm_area_struct *vma, unsigned long addr,
+ void *buf, int len, int write);
+
bool mem_type_is_vram(u32 mem_type);
bool xe_bo_is_vram(struct xe_bo *bo);
bool xe_bo_is_visible_vram(struct xe_bo *bo);
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 50562d53e7b2..e2198fdd2a09 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -1722,6 +1722,28 @@ static int xe_oa_release(struct inode *inode, struct file *file)
return 0;
}
+static vm_fault_t xe_oa_buffer_fault(struct vm_fault *vmf)
+{
+ struct xe_oa_stream *stream = vmf->vma->vm_file->private_data;
+
+ /*
+ * Once the stream is dead its OA buffer may already be gone (or about
+ * to be). Refuse to (re-)install a PTE rather than letting the
+ * generic BO fault handler touch a buffer that's being torn down.
+ */
+ if (READ_ONCE(stream->dead))
+ return VM_FAULT_SIGBUS;
+
+ return xe_bo_cpu_fault(vmf);
+}
+
+static const struct vm_operations_struct xe_oa_vm_ops = {
+ .fault = xe_oa_buffer_fault,
+ .open = ttm_bo_vm_open,
+ .close = ttm_bo_vm_close,
+ .access = xe_bo_vm_access,
+};
+
static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
{
struct xe_oa_stream *stream = file->private_data;
@@ -1733,6 +1755,9 @@ static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
return ret;
}
+ if (stream->dead)
+ return -ENODEV;
+
/*
* 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
@@ -1761,7 +1786,11 @@ static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
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);
+ if (!ret)
+ vma->vm_ops = &xe_oa_vm_ops;
+
+ return ret;
}
static const struct file_operations xe_oa_fops = {
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;
--
2.55.0
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH v2 2/3] drm/xe/oa: Gate OA buffer mmap faults
2026-10-30 22:30 ` [PATCH v2 2/3] drm/xe/oa: Gate OA buffer mmap faults Umesh Nerlige Ramappa
@ 2026-10-30 22:52 ` sashiko-bot
0 siblings, 0 replies; 9+ messages in thread
From: sashiko-bot @ 2026-10-30 22:52 UTC (permalink / raw)
To: Umesh Nerlige Ramappa, intel-xe
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] drm/xe/oa: ungated vm_ops->access in xe_oa_vm_ops via xe_bo_vm_access()
- [Medium] drm/xe/oa: race in xe_oa_buffer_fault() allows dummy page install on unplug
--
commit 64c07f18c9e0cff9e9ee88554ddca7219cc0526e
Author: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
drm/xe/oa: Gate OA buffer mmap faults
This commit adds xe_oa_buffer_fault() and xe_oa_vm_ops to return
VM_FAULT_SIGBUS when faulting on a mapped OA buffer after stream->dead is set,
and rejects new mmaps in xe_oa_mmap() when the stream is dead. It also exposes
xe_bo_cpu_fault() and xe_bo_vm_access() for reuse in xe_oa_vm_ops.
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index 7e3ebba0300d6..4916101fce541 100644
> --- a/drivers/gpu/drm/xe/xe_oa.c
> +++ b/drivers/gpu/drm/xe/xe_oa.c
> @@ -1723,6 +1723,28 @@ static int xe_oa_release(struct inode *inode, struct file *file)
> return 0;
> }
>
> +static vm_fault_t xe_oa_buffer_fault(struct vm_fault *vmf)
> +{
> + struct xe_oa_stream *stream = vmf->vma->vm_file->private_data;
> +
> + /*
> + * Once the stream is dead its OA buffer may already be gone (or about
> + * to be). Refuse to (re-)install a PTE rather than letting the
> + * generic BO fault handler touch a buffer that's being torn down.
> + */
> + if (READ_ONCE(stream->dead))
> + return VM_FAULT_SIGBUS;
> +
> + return xe_bo_cpu_fault(vmf);
> +}
[Severity: Medium]
Can a page fault racing with device unplug, reset, or wedging bypass the
VM_FAULT_SIGBUS gate in xe_oa_buffer_fault() and install dummy zero-page PTEs
across the VMA via xe_bo_cpu_fault()?
In xe_oa_buffer_fault(), READ_ONCE(stream->dead) is checked locklessly outside
the drm_dev_enter() SRCU critical section before calling xe_bo_cpu_fault():
drivers/gpu/drm/xe/xe_bo.c:xe_bo_cpu_fault() {
...
if (xe_wedged(xe) || !drm_dev_enter(&xe->drm, &idx))
return ttm_bo_vm_dummy_page(vmf, vmf->vma->vm_page_prot);
...
}
If a fault passes the check in xe_oa_buffer_fault() right before
drm_dev_unplug() sets dev->unplugged in xe_device_remove(),
drm_dev_enter(&xe->drm, &idx) in xe_bo_cpu_fault() returns false and calls
ttm_bo_vm_dummy_page() without holding drm_unplug_srcu. Because
synchronize_srcu(&drm_unplug_srcu) does not wait for that fault,
unmap_mapping_range() and OA buffer teardown can finish before
ttm_bo_vm_dummy_page() completes prefaulting zero pages across [vma->vm_start,
vma->vm_end) and returning VM_FAULT_NOPAGE instead of VM_FAULT_SIGBUS.
Similarly, if the device is wedged via xe_wedge_declare() or
prepare_device_for_reset() while stream->dead and dev->unplugged are still
false, a fault on the OA buffer passes xe_oa_buffer_fault() and hits the
xe_wedged(xe) check in xe_bo_cpu_fault(), prefaulting dummy pages instead of
returning VM_FAULT_SIGBUS.
Additionally, in the follow-up commit ("drm/xe/oa: Quiesce OA streams on
driver unbind and PCI reset"), if a fault evaluates READ_ONCE(stream->dead) as
false and is preempted before evaluating
drm_dev_is_unplugged(&stream->oa->xe->drm) while xe_oa_fini() completes
xe_oa_quiesce() and sets oa->xe = NULL, could dereferencing stream->oa->xe
cause a NULL pointer dereference?
> +
> +static const struct vm_operations_struct xe_oa_vm_ops = {
> + .fault = xe_oa_buffer_fault,
> + .open = ttm_bo_vm_open,
> + .close = ttm_bo_vm_close,
> + .access = xe_bo_vm_access,
> +};
[Severity: High]
Should xe_oa_vm_ops also gate or omit .access instead of wiring it directly to
xe_bo_vm_access()?
In xe_oa_mmap(), the VMA is configured as read-only with VM_PFNMAP (and
drm_gem_mmap_obj() / ttm_bo_mmap_obj() sets VM_IO | VM_PFNMAP):
drivers/gpu/drm/xe/xe_oa.c:xe_oa_mmap() {
...
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;
}
vm_flags_mod(vma, VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP | VM_DONTCOPY,
VM_MAYWRITE | VM_MAYEXEC);
...
}
When userspace accesses this mapping through /proc/<pid>/mem, ptrace(),
process_vm_readv(), or process_vm_writev(), __access_remote_vm() fails in
get_user_page_vma_remote() and falls back to vma->vm_ops->access(), which
calls xe_bo_vm_access():
drivers/gpu/drm/xe/xe_bo.c:xe_bo_vm_access() {
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);
guard(xe_pm_runtime)(xe);
return ttm_bo_vm_access(vma, addr, buf, len, write);
}
Because vma->vm_private_data retains a GEM reference to the BO until the VMA
is unmapped, calling xe_bo_vm_access() after stream->dead is set bypasses the
stream->dead check, takes a runtime PM reference, and calls ttm_bo_vm_access()
-> xe_ttm_access_memory() on the torn-down OA buffer. When the OA buffer was
placed in VRAM (mert_wa_14026633728) and vram_fini() has cleared
vram->mapping to NULL during unbind, xe_ttm_access_memory() will dereference a
NULL vram->mapping pointer.
Furthermore, because __access_remote_vm() passes write = 1 on FOLL_WRITE and
neither xe_bo_vm_access() nor ttm_bo_vm_access() checks whether write is
non-zero, doesn't wiring .access to xe_bo_vm_access() also allow writing to
the read-only OA buffer via /proc/self/mem or process_vm_writev()?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261030223056.2266638-5-umesh.nerlige.ramappa@intel.com?part=2
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 3/3] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset
2026-10-30 22:30 [PATCH v2 0/3] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
2026-10-30 22:30 ` [PATCH v2 1/3] drm/xe/oa: Use the drm device address_space for the OA stream fd Umesh Nerlige Ramappa
2026-10-30 22:30 ` [PATCH v2 2/3] drm/xe/oa: Gate OA buffer mmap faults Umesh Nerlige Ramappa
@ 2026-10-30 22:31 ` Umesh Nerlige Ramappa
2026-10-30 23:14 ` sashiko-bot
2026-10-30 22:36 ` [PATCH v2 0/3] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
` (2 subsequent siblings)
5 siblings, 1 reply; 9+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-10-30 22:31 UTC (permalink / raw)
To: intel-xe, Matthew Brost; +Cc: riana.tauro, shekhar.chauhan, harish.chegondi
An OA stream fd can outlive the device: after a PCI slot reset (which
removes and re-probes the device) 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(). That is a devm action, so it runs
both on unbind and from devres_release_group() in
xe_pci_error_slot_reset(), after xe_device_remove() and regardless of
open stream fds. Everything the streams depend on (MMIO, irq, GuC, GT,
GGTT, TTM) is set up before xe_oa_init() and hence torn down after
xe_oa_fini(). For each active stream it disables the OA unit, cancels
the poll hrtimer, marks the stream dead, shoots down userspace mappings
of the OA buffer and releases all device-bound resources (OA buffer,
exec queues, configs, references). 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, the hrtimer stops, read/mmap/ioctl return -ENODEV, poll
reports EPOLLERR | EPOLLHUP, and xe_oa_release() only frees the struct
and drops the drm device reference.
A few details worth calling out:
- Using stream_lock to serialize xe_oa_mmap against quiesce could run
into a AB-BA deadlock as below.
mmap path: mmap_lock -> stream_lock
read path: stream_lock -> mmap_lock (if copy_to_user faults)
Hence mmap is serialized against quiesce with a dedicated mmap_mutex
rather than stream_lock.
- drm_dev_unplug() in xe_device_remove() zaps the OA buffer mmaps before
the stream is marked dead. Make the OA fault handler also return
SIGBUS once the device is unplugged, otherwise the generic BO fault
handler silently installs a dummy page until the stream is quiesced.
- Unbind does not reset the GT or the device, so while the device is not
wedged the stream is disabled with xe_oa_disable_locked() and
xe_oa_stream_hw_teardown() runs before the SW resources are freed. That
puts back the register whitelist, the metric set, forcewake and
preemption/timeslice. If the device is wedged, as it is on a PCI slot
reset, skip all HW access and only release the SW resources, since the
HW may be unresponsive and a driver FLR runs on fini anyway.
- drm_ioctl() only checks for unplug on entry, so a STREAM_OPEN ioctl
that started before drm_dev_unplug() can still create a new live
stream around xe_oa_quiesce(). Add a per-GT quiesced flag, set under
gt_lock before the OA units are quiesced and checked under the same
lock when opening a stream, which then fails with -ENODEV.
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
---
drivers/gpu/drm/xe/xe_oa.c | 221 ++++++++++++++++++++++++++-----
drivers/gpu/drm/xe/xe_oa_types.h | 9 ++
2 files changed, 200 insertions(+), 30 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index e2198fdd2a09..513f013efda0 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -42,6 +42,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)
@@ -259,13 +260,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;
@@ -317,6 +323,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);
@@ -528,12 +537,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 | \
@@ -562,6 +578,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;
@@ -572,13 +591,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);
}
@@ -605,6 +625,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
@@ -874,33 +897,43 @@ 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);
+ mutex_destroy(&stream->mmap_mutex);
+
+ 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) ?
@@ -1661,6 +1694,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);
@@ -1693,6 +1729,15 @@ 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);
+ mutex_destroy(&stream->mmap_mutex);
+ kfree(stream);
+ return;
+ }
+
+ xe_pm_runtime_get(gt_to_xe(stream->gt));
+
if (stream->enabled)
xe_oa_disable_locked(stream);
@@ -1702,6 +1747,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);
}
@@ -1710,11 +1756,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);
@@ -1730,8 +1774,11 @@ static vm_fault_t xe_oa_buffer_fault(struct vm_fault *vmf)
* Once the stream is dead its OA buffer may already be gone (or about
* to be). Refuse to (re-)install a PTE rather than letting the
* generic BO fault handler touch a buffer that's being torn down.
+ * drm_dev_unplug() zaps the mapping before the stream is marked dead,
+ * so also refuse once unplugged, the generic handler would install a
+ * dummy page.
*/
- if (READ_ONCE(stream->dead))
+ if (READ_ONCE(stream->dead) || drm_dev_is_unplugged(&stream->oa->xe->drm))
return VM_FAULT_SIGBUS;
return xe_bo_cpu_fault(vmf);
@@ -1744,18 +1791,12 @@ static const struct vm_operations_struct xe_oa_vm_ops = {
.access = xe_bo_vm_access,
};
-static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
+static int xe_oa_mmap_locked(struct xe_oa_stream *stream, struct vm_area_struct *vma)
{
- struct xe_oa_stream *stream = file->private_data;
- int ret = xe_observation_paranoid_check();
struct xe_bo *bo = stream->oa_buffer.bo;
+ int ret;
- if (ret) {
- drm_dbg(&stream->oa->xe->drm, "Insufficient privilege to map OA buffer\n");
- return ret;
- }
-
- if (stream->dead)
+ if (READ_ONCE(stream->dead))
return -ENODEV;
/*
@@ -1793,6 +1834,27 @@ static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
return ret;
}
+static int xe_oa_mmap(struct file *file, struct vm_area_struct *vma)
+{
+ struct xe_oa_stream *stream = file->private_data;
+ int ret = xe_observation_paranoid_check();
+
+ if (ret) {
+ drm_dbg(>_to_xe(stream->gt)->drm, "Insufficient privilege to map OA buffer\n");
+ return ret;
+ }
+
+ /*
+ * Serialize against xe_oa_quiesce() freeing the OA buffer. Can't use stream_lock here,
+ * it is held across user copies which fault on mmap_lock, held by the caller.
+ */
+ mutex_lock(&stream->mmap_mutex);
+ ret = xe_oa_mmap_locked(stream, vma);
+ mutex_unlock(&stream->mmap_mutex);
+
+ return ret;
+}
+
static const struct file_operations xe_oa_fops = {
.owner = THIS_MODULE,
.release = xe_oa_release,
@@ -1898,6 +1960,7 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
spin_lock_init(&stream->oa_buffer.ptr_lock);
mutex_init(&stream->stream_lock);
+ mutex_init(&stream->mmap_mutex);
return 0;
@@ -1924,6 +1987,12 @@ static int xe_oa_stream_open_ioctl_locked(struct xe_oa *oa,
int stream_fd;
int ret;
+ if (param->hwe->gt->oa.quiesced) {
+ drm_dbg(&oa->xe->drm, "OA is quiesced\n");
+ ret = -ENODEV;
+ goto exit;
+ }
+
/* We currently only allow exclusive access */
if (param->oa_unit->exclusive_stream) {
drm_dbg(&oa->xe->drm, "OA unit already in use\n");
@@ -2616,6 +2685,92 @@ 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);
+ mutex_lock(&stream->mmap_mutex);
+ if (stream->enabled && hw_accessible)
+ xe_oa_disable_locked(stream);
+
+ stream->enabled = false;
+
+ 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->sample)
+ hrtimer_cancel(&stream->poll_check_timer);
+
+ wake_up_all(&stream->poll_wq);
+
+ /* Zap userspace mappings of this OA buffer only, others in the address_space stay */
+ drm_vma_node_unmap(&stream->oa_buffer.bo->ttm.base.vma_node,
+ stream->oa->xe->drm.anon_inode->i_mapping);
+
+ /*
+ * 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);
+
+ 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->mmap_mutex);
+ 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);
+ /* Set before touching the units so a racing STREAM_OPEN can't slip in a new stream */
+ gt->oa.quiesced = true;
+ 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 and its userspace mappings, 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
@@ -2927,6 +3082,12 @@ 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.
+ */
+ 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 e60a90bae1c6..f17e12079b9d 100644
--- a/drivers/gpu/drm/xe/xe_oa_types.h
+++ b/drivers/gpu/drm/xe/xe_oa_types.h
@@ -121,6 +121,9 @@ struct xe_oa_gt {
/** @gt_lock: lock protecting create/destroy OA streams */
struct mutex gt_lock;
+ /** @quiesced: OA is being torn down, no new streams allowed. Protected by @gt_lock */
+ bool quiesced;
+
/** @num_oa_units: number of oa units for each gt */
u32 num_oa_units;
@@ -202,6 +205,12 @@ struct xe_oa_stream {
/** @stream_lock: Lock serializing stream operations */
struct mutex stream_lock;
+ /**
+ * @mmap_mutex: Serializes mmap against quiesce freeing the OA buffer. Leaf lock, taken
+ * under mmap_lock in mmap, so never take stream_lock or fault on user memory under it
+ */
+ struct mutex mmap_mutex;
+
/** @sample: true if DRM_XE_OA_PROP_SAMPLE_OA is provided */
bool sample;
--
2.55.0
^ permalink raw reply related [flat|nested] 9+ messages in thread* Re: [PATCH v2 3/3] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset
2026-10-30 22:31 ` [PATCH v2 3/3] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset Umesh Nerlige Ramappa
@ 2026-10-30 23:14 ` sashiko-bot
0 siblings, 0 replies; 9+ messages in thread
From: sashiko-bot @ 2026-10-30 23:14 UTC (permalink / raw)
To: Umesh Nerlige Ramappa, intel-xe
Thank you for your contribution! Sashiko AI review found 6 potential issue(s) to consider:
- [High] drm/xe/oa: NULL deref and dummy page race in xe_oa_buffer_fault()
- [High] drm/xe/oa: mapped OA BO left DMA-mapped and un-evicted in xe_oa_quiesce()
- [High] drm/xe/oa: ungated xe_bo_vm_access() in xe_oa_vm_ops after quiesce
- [High] drm/xe/oa: race between in-flight observation ioctls and xe_oa_fini()
- [High] drm/xe/oa: lock inversion holding mmap_mutex across xe_oa_quiesce_oa_unit()
- [High] drm/xe/oa: unwaited LRI job in xe_oa_quiesce_oa_unit() races devres teardown
--
commit 6eef6267f9216029752eabf4c50aa7de5a8ca9d1
Author: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset
This commit adds xe_oa_quiesce() to disable active OA streams, cancel their
poll timers, unmap OA buffers, and release device-bound resources during
driver unbind and PCI slot reset when xe_oa_fini() runs.
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index 4916101fce541..6faa40d7ebbe7 100644
> --- a/drivers/gpu/drm/xe/xe_oa.c
> +++ b/drivers/gpu/drm/xe/xe_oa.c
[ ... ]
> @@ -1731,8 +1775,11 @@ static vm_fault_t xe_oa_buffer_fault(struct vm_fault *vmf)
> * Once the stream is dead its OA buffer may already be gone (or about
> * to be). Refuse to (re-)install a PTE rather than letting the
> * generic BO fault handler touch a buffer that's being torn down.
> + * drm_dev_unplug() zaps the mapping before the stream is marked dead,
> + * so also refuse once unplugged, the generic handler would install a
> + * dummy page.
> */
> - if (READ_ONCE(stream->dead))
> + if (READ_ONCE(stream->dead) || drm_dev_is_unplugged(&stream->oa->xe->drm))
> return VM_FAULT_SIGBUS;
>
> return xe_bo_cpu_fault(vmf);
[Severity: High]
Can xe_oa_buffer_fault() dereference a NULL pointer when racing with
xe_oa_fini(), or still install a dummy page PTE?
If a fault enters xe_oa_buffer_fault() and observes READ_ONCE(stream->dead)
as false just before xe_oa_quiesce_oa_unit() sets stream->dead = true,
xe_oa_fini() can finish xe_oa_quiesce() and clear oa->xe:
drivers/gpu/drm/xe/xe_oa.c:xe_oa_fini() {
...
xe_oa_quiesce(xe);
idr_for_each(&oa->metrics_idr, destroy_config, oa);
idr_destroy(&oa->metrics_idr);
oa->xe = NULL;
}
When xe_oa_buffer_fault() then evaluates the second operand of the logical
or, stream->oa->xe is NULL, so &stream->oa->xe->drm is NULL and
drm_dev_is_unplugged() dereferences NULL in drm_dev_enter() (whereas
xe_oa_mmap(), xe_oa_destroy_locked(), and xe_oa_release() use
gt_to_xe(stream->gt)).
In addition, drm_dev_is_unplugged() immediately drops its SRCU read lock via
drm_dev_exit(). If drm_dev_unplug() and drm_vma_node_unmap() complete in the
window between drm_dev_is_unplugged() in xe_oa_buffer_fault() and
drm_dev_enter() in xe_bo_cpu_fault(), or if the device is wedged before
unplug (such as during PCI error recovery), xe_bo_cpu_fault() still hits:
drivers/gpu/drm/xe/xe_bo.c:xe_bo_cpu_fault() {
...
if (xe_wedged(xe) || !drm_dev_enter(&xe->drm, &idx))
return ttm_bo_vm_dummy_page(vmf, vmf->vma->vm_page_prot);
and installs a dummy page PTE instead of returning VM_FAULT_SIGBUS.
> @@ -1745,18 +1792,12 @@ static const struct vm_operations_struct xe_oa_vm_ops = {
> .access = xe_bo_vm_access,
> };
[Severity: High]
What prevents userspace from accessing the OA buffer via xe_bo_vm_access()
after xe_oa_quiesce()?
While xe_oa_vm_ops gates .fault with xe_oa_buffer_fault(), .access is wired
directly to xe_bo_vm_access():
drivers/gpu/drm/xe/xe_bo.c:xe_bo_vm_access() {
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);
guard(xe_pm_runtime)(xe);
return ttm_bo_vm_access(vma, addr, buf, len, write);
}
Because an existing VMA holds a GEM reference to stream->oa_buffer.bo in
vma->vm_private_data until munmap() or process exit, reading the VMA via
/proc/self/mem, ptrace, or process_vm_readv() after xe_oa_quiesce() will get
VM_FAULT_SIGBUS from xe_oa_buffer_fault() and fall back to
vma->vm_ops->access() -> xe_bo_vm_access(). That acquires runtime PM on the
removed device and accesses the BO backing store (including unmapped
vram->mapping or torn-down migration state when the OA buffer is in VRAM
under mert_wa_14026633728()). Should .access also be wrapped to check
stream->dead and drm_dev_enter()?
[ ... ]
> @@ -1925,6 +1988,12 @@ static int xe_oa_stream_open_ioctl_locked(struct xe_oa *oa,
> int stream_fd;
> int ret;
>
> + if (param->hwe->gt->oa.quiesced) {
> + drm_dbg(&oa->xe->drm, "OA is quiesced\n");
> + ret = -ENODEV;
> + goto exit;
> + }
> +
[Severity: High]
Could an in-flight observation ioctl that entered drm_ioctl() before
drm_dev_unplug() race with xe_oa_fini() before reaching gt_lock?
In xe_oa_stream_open_ioctl(), oa->xe is only checked unlocked at entry before
sleeping copy_from_user() calls in xe_oa_user_extensions() and before taking
gt_lock:
drivers/gpu/drm/xe/xe_oa.c:xe_oa_stream_open_ioctl() {
...
if (!oa->xe) {
drm_dbg(&xe->drm, "xe oa interface not available for this system\n");
return -ENODEV;
}
param.xef = xef;
param.period_exponent = -1;
ret = xe_oa_user_extensions(oa, XE_OA_USER_EXTN_FROM_OPEN, data, 0, ¶m);
if (ret)
return ret;
/* If not provided, OA unit defaults to OA unit 0 as per uapi */
if (!param.oa_unit)
param.oa_unit = &xe_root_mmio_gt(oa->xe)->oa.oa_unit[0];
If xe_oa_fini() runs concurrently and sets oa->xe = NULL right after
xe_oa_quiesce(), an in-flight xe_oa_stream_open_ioctl() can dereference NULL
oa->xe in xe_oa_lookup_oa_unit(), xe_root_mmio_gt(oa->xe),
oa_unit_supports_oa_format(), or even in drm_dbg(&oa->xe->drm, ...) inside
xe_oa_stream_open_ioctl_locked() above. When param.period_exponent >= 0,
xe_oa_stream_open_ioctl() also calls oa_exponent_to_ns() ->
xe_oa_timestamp_frequency() -> xe_mmio_read32() before acquiring gt_lock and
checking gt->oa.quiesced.
Similarly, in-flight xe_oa_add_config_ioctl() and xe_oa_remove_config_ioctl()
calls that already passed their unlocked !oa->xe check can dereference NULL
oa->xe in xe_oa_is_valid_config_reg() or access oa->metrics_idr while
xe_oa_fini() destroys oa->metrics_idr without holding oa->metrics_lock.
[ ... ]
> @@ -2617,6 +2686,92 @@ 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);
> + mutex_lock(&stream->mmap_mutex);
> + if (stream->enabled && hw_accessible)
> + xe_oa_disable_locked(stream);
> +
> + stream->enabled = false;
> +
> + 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->sample)
> + hrtimer_cancel(&stream->poll_check_timer);
> +
> + wake_up_all(&stream->poll_wq);
> +
> + /* Zap userspace mappings of this OA buffer only, others in the address_space stay */
> + drm_vma_node_unmap(&stream->oa_buffer.bo->ttm.base.vma_node,
> + stream->oa->xe->drm.anon_inode->i_mapping);
> +
> + /*
> + * 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);
> +
> + xe_oa_stream_free_resources(stream);
[Severity: High]
Does holding stream->mmap_mutex across xe_oa_stream_hw_teardown() and
xe_oa_stream_free_resources() introduce a lock ordering inversion with
mm->mmap_lock?
In xe_oa_mmap(), stream->mmap_mutex is taken inside file->f_op->mmap under
mm->mmap_lock, which is why struct xe_oa_stream documents mmap_mutex as a
leaf lock.
However, xe_oa_quiesce_oa_unit() holds stream->mmap_mutex across:
- xe_oa_stream_hw_teardown() -> xe_oa_disable_metric_set() ->
xe_oa_configure_oa_context() -> xe_oa_load_with_lri() ->
xe_oa_submit_bb() -> xe_oa_lock_vma(), which takes down_read(&q->vm->lock)
and xe_vm_lock(q->vm, false)
- xe_oa_stream_free_resources() -> xe_oa_free_oa_buffer() ->
xe_bo_unpin_map_no_vm(), which locks the BO dma_resv
Since normal VM and fault paths establish vm->lock -> mm->mmap_lock ->
dma_resv, taking vm->lock and dma_resv under stream->mmap_mutex inverts the
lock hierarchy. Since xe_oa_mmap_locked() only checks READ_ONCE(stream->dead)
and maps stream->oa_buffer.bo, could stream->mmap_mutex be held only around
setting stream->dead = true?
[Severity: High]
When userspace has an active mmap VMA on the OA stream during unbind or PCI
slot reset, does stream->oa_buffer.bo miss both eviction and DMA unmapping?
In xe_oa_mmap_locked(), drm_gem_mmap_obj() takes a GEM reference on
stream->oa_buffer.bo that is held by vma->vm_private_data until munmap() or
process exit. During device removal:
1. xe_device_remove() calls xe_bo_pci_dev_remove_all(xe) before devm actions
run. At that point stream->oa_buffer.bo is still pinned (pin_count == 1 on
xe->pinned.early.kernel_bo_present), so ttm_resource_manager_evict_all()
skips it.
2. Next, devres runs xe_oa_fini() -> xe_oa_quiesce_oa_unit() ->
xe_oa_stream_free_resources() -> xe_oa_free_oa_buffer() ->
xe_bo_unpin_map_no_vm(stream->oa_buffer.bo). Because drm_vma_node_unmap()
only zaps PTEs without closing the VMA, xe_bo_unpin_map_no_vm() unpins the
BO, removes bo->pinned_link from xe->pinned.early.kernel_bo_present, and
drops one reference, leaving the BO alive with refcount >= 1.
3. When the devm action xe_bo_pinned_fini() subsequently runs to call
xe_bo_dma_unmap_pinned() on kernel_bo_present, stream->oa_buffer.bo is no
longer on the list.
As a result, the OA BO remains allocated with its DMA mapping and TTM
resource active after PCI device removal until userspace closes the VMA.
[Severity: High]
In xe_oa_quiesce_oa_unit(), can the asynchronous batchbuffer submitted by
xe_oa_stream_hw_teardown() race with subsequent devres teardown of GuC
submission and fence IRQs?
When hw_accessible is true and stream->exec_q is set,
xe_oa_stream_hw_teardown() calls:
xe_oa_disable_metric_set()
-> xe_oa_configure_oa_context(stream, false)
-> xe_oa_load_with_lri()
which submits a batchbuffer job onto stream->exec_q via xe_oa_submit_bb(),
hands the unsignaled fence to xe_bb_free(bb, fence), and returns immediately
without waiting for the fence to signal.
xe_oa_quiesce_oa_unit() then immediately drops forcewake, the runtime PM
reference, and stream->exec_q, and returns to devres_release_all(), which
proceeds to guc_submit_fini() and xe_gt_fini() -> xe_hw_fence_irq_finish().
If the scheduler arms job->fence onto gt->fence_irq[i].pending before GuC
teardown / TDR signals it, won't xe_hw_fence_irq_finish() trigger
XE_WARN_ON(!list_empty(&irq->pending)) or leave the context restore LRI
unexecuted?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261030223056.2266638-5-umesh.nerlige.ramappa@intel.com?part=3
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 0/3] Cleanup OA stream on PCI unbind/remove
2026-10-30 22:30 [PATCH v2 0/3] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
` (2 preceding siblings ...)
2026-10-30 22:31 ` [PATCH v2 3/3] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset Umesh Nerlige Ramappa
@ 2026-10-30 22:36 ` Umesh Nerlige Ramappa
2026-10-30 22:40 ` ✓ CI.KUnit: success for " Patchwork
2026-10-30 23:14 ` ✓ Xe.CI.BAT: " Patchwork
5 siblings, 0 replies; 9+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-10-30 22:36 UTC (permalink / raw)
To: intel-xe, Matthew Brost; +Cc: riana.tauro, shekhar.chauhan, harish.chegondi
Hi Matt,
Please provide your inputs primarily on patches 1 and 2.
Thanks,
Umesh
On Fri, Oct 30, 2026 at 03:30:57PM -0700, Umesh Nerlige Ramappa wrote:
>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.
>
>Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
>
>Umesh Nerlige Ramappa (3):
> drm/xe/oa: Use the drm device address_space for the OA stream fd
> drm/xe/oa: Gate OA buffer mmap faults
> drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset
>
> drivers/gpu/drm/xe/xe_bo.c | 30 +++-
> drivers/gpu/drm/xe/xe_bo.h | 4 +
> drivers/gpu/drm/xe/xe_oa.c | 285 ++++++++++++++++++++++++++++---
> drivers/gpu/drm/xe/xe_oa_types.h | 12 ++
> 4 files changed, 300 insertions(+), 31 deletions(-)
>
>--
>2.55.0
>
^ permalink raw reply [flat|nested] 9+ messages in thread* ✓ CI.KUnit: success for Cleanup OA stream on PCI unbind/remove
2026-10-30 22:30 [PATCH v2 0/3] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
` (3 preceding siblings ...)
2026-10-30 22:36 ` [PATCH v2 0/3] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
@ 2026-10-30 22:40 ` Patchwork
2026-10-30 23:14 ` ✓ Xe.CI.BAT: " Patchwork
5 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2026-10-30 22:40 UTC (permalink / raw)
To: Umesh Nerlige Ramappa; +Cc: intel-xe
== Series Details ==
Series: Cleanup OA stream on PCI unbind/remove
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
[22:38:00] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[22:38:04] 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
[22:38:25] Starting KUnit Kernel (1/1)...
[22:38:25] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[22:38:25] ================= gpu_buddy (14 subtests) ==================
[22:38:25] [PASSED] gpu_test_buddy_alloc_limit
[22:38:25] [PASSED] gpu_test_buddy_alloc_optimistic
[22:38:25] [PASSED] gpu_test_buddy_alloc_pessimistic
[22:38:25] [PASSED] gpu_test_buddy_alloc_pathological
[22:38:25] [PASSED] gpu_test_buddy_alloc_contiguous
[22:38:25] [PASSED] gpu_test_buddy_alloc_clear
[22:38:25] [PASSED] gpu_test_buddy_alloc_range
[22:38:25] [PASSED] gpu_test_buddy_alloc_range_bias
[22:38:26] [PASSED] gpu_test_buddy_fragmentation_performance
[22:38:27] [PASSED] gpu_test_buddy_dirty_tracker_performance
[22:38:27] [PASSED] gpu_test_buddy_alloc_exceeds_max_order
[22:38:27] [PASSED] gpu_test_buddy_offset_aligned_allocation
[22:38:27] [PASSED] gpu_test_buddy_subtree_offset_alignment_stress
[22:38:27] [PASSED] gpu_test_buddy_addr_to_block
[22:38:27] ==================== [PASSED] gpu_buddy ====================
[22:38:27] ============================================================
[22:38:27] Testing complete. Ran 14 tests: passed: 14
[22:38:27] Elapsed time: 26.823s total, 4.426s configuring, 20.430s building, 1.936s 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
[22:38:27] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[22:38:29] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[22:39:08] Starting KUnit Kernel (1/1)...
[22:39:08] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[22:39:08] ================== guc_buf (11 subtests) ===================
[22:39:08] [PASSED] test_smallest
[22:39:08] [PASSED] test_largest
[22:39:08] [PASSED] test_granular
[22:39:08] [PASSED] test_unique
[22:39:08] [PASSED] test_overlap
[22:39:08] [PASSED] test_reusable
[22:39:08] [PASSED] test_too_big
[22:39:08] [PASSED] test_flush
[22:39:08] [PASSED] test_lookup
[22:39:08] [PASSED] test_data
[22:39:08] [PASSED] test_class
[22:39:08] ===================== [PASSED] guc_buf =====================
[22:39:08] =================== guc_dbm (7 subtests) ===================
[22:39:08] [PASSED] test_empty
[22:39:08] [PASSED] test_default
[22:39:08] ======================== test_size ========================
[22:39:08] [PASSED] 4
[22:39:08] [PASSED] 8
[22:39:08] [PASSED] 32
[22:39:08] [PASSED] 256
[22:39:08] ==================== [PASSED] test_size ====================
[22:39:08] ======================= test_reuse ========================
[22:39:08] [PASSED] 4
[22:39:08] [PASSED] 8
[22:39:08] [PASSED] 32
[22:39:08] [PASSED] 256
[22:39:08] =================== [PASSED] test_reuse ====================
[22:39:08] =================== test_range_overlap ====================
[22:39:08] [PASSED] 4
[22:39:08] [PASSED] 8
[22:39:08] [PASSED] 32
[22:39:08] [PASSED] 256
[22:39:08] =============== [PASSED] test_range_overlap ================
[22:39:08] =================== test_range_compact ====================
[22:39:08] [PASSED] 4
[22:39:08] [PASSED] 8
[22:39:08] [PASSED] 32
[22:39:08] [PASSED] 256
[22:39:08] =============== [PASSED] test_range_compact ================
[22:39:08] ==================== test_range_spare =====================
[22:39:08] [PASSED] 4
[22:39:08] [PASSED] 8
[22:39:08] [PASSED] 32
[22:39:08] [PASSED] 256
[22:39:08] ================ [PASSED] test_range_spare =================
[22:39:08] ===================== [PASSED] guc_dbm =====================
[22:39:08] ================== guc_idm (22 subtests) ===================
[22:39:08] [PASSED] bad_init
[22:39:08] [PASSED] no_init
[22:39:08] [PASSED] init_fini
[22:39:08] [PASSED] check_init_small
[22:39:08] [PASSED] check_init_shared
[22:39:08] [PASSED] check_used
[22:39:08] [PASSED] check_quota
[22:39:08] [PASSED] check_all
[22:39:08] [PASSED] check_limits
[22:39:08] [PASSED] check_overlap
[22:39:08] [PASSED] check_overlap_alloc
[22:39:08] [PASSED] check_overlap_release
[22:39:08] [PASSED] check_overlap_partial_init
[22:39:08] [PASSED] check_overlap_partial_shared_range_blocking
[22:39:08] [PASSED] check_used_usable
[22:39:08] [PASSED] check_used_shareable
[22:39:08] [PASSED] check_used_mixed
[22:39:08] [PASSED] check_release_usable_range
[22:39:08] [PASSED] check_release_shareable_range
[22:39:08] [PASSED] check_split_boundaries
[22:39:08] [PASSED] check_shareable_spare
[22:39:08] [PASSED] check_shareable_spare_fragmented_tail
[22:39:08] ===================== [PASSED] guc_idm =====================
[22:39:08] ============== guc_klv_helpers (13 subtests) ===============
[22:39:08] [PASSED] test_count
[22:39:08] [PASSED] test_encode_u32
[22:39:08] [PASSED] test_encode_u64
[22:39:08] [PASSED] test_encode_string
[22:39:08] [PASSED] test_encode_object_raw
[22:39:08] [PASSED] test_encode_object_klv
[22:39:08] [PASSED] test_encode_object_nested
[22:39:08] [PASSED] test_encode_object_basic
[22:39:08] ===================== test_decode_u16 =====================
[22:39:08] [PASSED] empty
[22:39:08] [PASSED] valid
[22:39:08] [PASSED] max
[22:39:08] [PASSED] big
[22:39:08] [PASSED] long
[22:39:08] ================= [PASSED] test_decode_u16 =================
[22:39:08] ===================== test_decode_u32 =====================
[22:39:08] [PASSED] empty
[22:39:08] [PASSED] valid
[22:39:08] [PASSED] max
[22:39:08] [PASSED] long
[22:39:08] ================= [PASSED] test_decode_u32 =================
[22:39:08] ===================== test_decode_u64 =====================
[22:39:08] [PASSED] empty
[22:39:08] [PASSED] short
[22:39:08] [PASSED] valid
[22:39:08] [PASSED] max
[22:39:08] [PASSED] long
[22:39:08] ================= [PASSED] test_decode_u64 =================
[22:39:08] ===================== test_decode_str =====================
[22:39:08] [PASSED] empty
[22:39:08] [PASSED] one
[22:39:08] [PASSED] one_trash
[22:39:08] [PASSED] two
[22:39:08] [PASSED] two_trash
[22:39:08] [PASSED] three
[22:39:08] [PASSED] dword
[22:39:08] [PASSED] four
[22:39:08] [PASSED] five
[22:39:08] [PASSED] six
[22:39:08] [PASSED] seven
[22:39:08] [PASSED] qword
[22:39:08] ================= [PASSED] test_decode_str =================
[22:39:08] [PASSED] test_print
[22:39:08] ================= [PASSED] guc_klv_helpers =================
[22:39:08] =================== xe_log (4 subtests) ====================
[22:39:08] [PASSED] demo_cper
[22:39:08] [PASSED] demo_dmesg
[22:39:08] ======================= test_dmesg ========================
[22:39:08] [PASSED] test_fatal
[22:39:08] [PASSED] test_fatal_tile
[22:39:08] [PASSED] test_fatal_gt
[22:39:08] [PASSED] test_fatal_comp
[22:39:08] [PASSED] test_fatal_comp_tile
[22:39:08] [PASSED] test_fatal_comp_gt
[22:39:08] [PASSED] test_fatal_all
[22:39:08] [PASSED] test_recoverable
[22:39:08] [PASSED] test_recoverable_tile
[22:39:08] [PASSED] test_recoverable_gt
[22:39:08] [PASSED] test_recoverable_comp
[22:39:08] [PASSED] test_recoverable_comp_tile
[22:39:08] [PASSED] test_recoverable_comp_gt
[22:39:08] [PASSED] test_recoverable_all
[22:39:08] [PASSED] test_info
[22:39:08] [PASSED] test_info_tile
[22:39:08] [PASSED] test_info_gt
[22:39:08] [PASSED] test_info_err
[22:39:08] [PASSED] test_info_comp
[22:39:08] [PASSED] test_info_comp_tile
[22:39:08] [PASSED] test_info_comp_gt
[22:39:08] [PASSED] test_info_all
[22:39:08] [PASSED] test_hw_fatal
[22:39:08] [PASSED] test_hw_recoverable
[22:39:08] [PASSED] test_hw_corrected
[22:39:08] [PASSED] test_hw_informational
[22:39:08] =================== [PASSED] test_dmesg ====================
[22:39:08] ====================== test_invalid =======================
[22:39:08] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[22:39:08] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[22:39:08] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[22:39:08] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[22:39:08] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[22:39:08] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[22:39:08] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[22:39:08] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[22:39:08] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[22:39:08] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[22:39:08] ================== [SKIPPED] test_invalid ==================
[22:39:08] ===================== [PASSED] xe_log ======================
[22:39:08] ================== no_relay (3 subtests) ===================
[22:39:08] [PASSED] xe_drops_guc2pf_if_not_ready
[22:39:08] [PASSED] xe_drops_guc2vf_if_not_ready
[22:39:08] [PASSED] xe_rejects_send_if_not_ready
[22:39:08] ==================== [PASSED] no_relay =====================
[22:39:08] ================== pf_relay (14 subtests) ==================
[22:39:08] [PASSED] pf_rejects_guc2pf_too_short
[22:39:08] [PASSED] pf_rejects_guc2pf_too_long
[22:39:08] [PASSED] pf_rejects_guc2pf_no_payload
[22:39:08] [PASSED] pf_fails_no_payload
[22:39:08] [PASSED] pf_fails_bad_origin
[22:39:08] [PASSED] pf_fails_bad_type
[22:39:08] [PASSED] pf_txn_reports_error
[22:39:08] [PASSED] pf_txn_sends_pf2guc
[22:39:08] [PASSED] pf_sends_pf2guc
[22:39:08] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[22:39:08] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[22:39:08] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[22:39:08] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[22:39:08] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[22:39:08] ==================== [PASSED] pf_relay =====================
[22:39:08] ================== vf_relay (3 subtests) ===================
[22:39:08] [PASSED] vf_rejects_guc2vf_too_short
[22:39:08] [PASSED] vf_rejects_guc2vf_too_long
[22:39:08] [PASSED] vf_rejects_guc2vf_no_payload
[22:39:08] ==================== [PASSED] vf_relay =====================
[22:39:08] ================ pf_gt_config (9 subtests) =================
[22:39:08] [PASSED] fair_contexts_1vf
[22:39:08] [PASSED] fair_doorbells_1vf
[22:39:08] [PASSED] fair_ggtt_1vf
[22:39:08] ====================== fair_vram_1vf ======================
[22:39:08] [PASSED] 3.50 GiB
[22:39:08] [PASSED] 11.5 GiB
[22:39:08] [PASSED] 15.5 GiB
[22:39:08] [PASSED] 31.5 GiB
[22:39:08] [PASSED] 63.5 GiB
[22:39:08] [PASSED] 1.91 GiB
[22:39:08] ================== [PASSED] fair_vram_1vf ==================
[22:39:08] ================ fair_vram_1vf_admin_only =================
[22:39:08] [PASSED] 3.50 GiB
[22:39:08] [PASSED] 11.5 GiB
[22:39:08] [PASSED] 15.5 GiB
[22:39:08] [PASSED] 31.5 GiB
[22:39:08] [PASSED] 63.5 GiB
[22:39:08] [PASSED] 1.91 GiB
[22:39:08] ============ [PASSED] fair_vram_1vf_admin_only =============
[22:39:08] ====================== fair_contexts ======================
[22:39:08] [PASSED] 1 VF
[22:39:08] [PASSED] 2 VFs
[22:39:08] [PASSED] 3 VFs
[22:39:08] [PASSED] 4 VFs
[22:39:08] [PASSED] 5 VFs
[22:39:08] [PASSED] 6 VFs
[22:39:08] [PASSED] 7 VFs
[22:39:08] [PASSED] 8 VFs
[22:39:08] [PASSED] 9 VFs
[22:39:08] [PASSED] 10 VFs
[22:39:08] [PASSED] 11 VFs
[22:39:08] [PASSED] 12 VFs
[22:39:08] [PASSED] 13 VFs
[22:39:08] [PASSED] 14 VFs
[22:39:08] [PASSED] 15 VFs
[22:39:08] [PASSED] 16 VFs
[22:39:08] [PASSED] 17 VFs
[22:39:08] [PASSED] 18 VFs
[22:39:08] [PASSED] 19 VFs
[22:39:08] [PASSED] 20 VFs
[22:39:08] [PASSED] 21 VFs
[22:39:08] [PASSED] 22 VFs
[22:39:08] [PASSED] 23 VFs
[22:39:08] [PASSED] 24 VFs
[22:39:08] [PASSED] 25 VFs
[22:39:08] [PASSED] 26 VFs
[22:39:08] [PASSED] 27 VFs
[22:39:08] [PASSED] 28 VFs
[22:39:08] [PASSED] 29 VFs
[22:39:08] [PASSED] 30 VFs
[22:39:08] [PASSED] 31 VFs
[22:39:08] [PASSED] 32 VFs
[22:39:08] [PASSED] 33 VFs
[22:39:08] [PASSED] 34 VFs
[22:39:08] [PASSED] 35 VFs
[22:39:08] [PASSED] 36 VFs
[22:39:08] [PASSED] 37 VFs
[22:39:08] [PASSED] 38 VFs
[22:39:08] [PASSED] 39 VFs
[22:39:08] [PASSED] 40 VFs
[22:39:08] [PASSED] 41 VFs
[22:39:08] [PASSED] 42 VFs
[22:39:08] [PASSED] 43 VFs
[22:39:08] [PASSED] 44 VFs
[22:39:08] [PASSED] 45 VFs
[22:39:08] [PASSED] 46 VFs
[22:39:08] [PASSED] 47 VFs
[22:39:08] [PASSED] 48 VFs
[22:39:08] [PASSED] 49 VFs
[22:39:08] [PASSED] 50 VFs
[22:39:08] [PASSED] 51 VFs
[22:39:08] [PASSED] 52 VFs
[22:39:08] [PASSED] 53 VFs
[22:39:08] [PASSED] 54 VFs
[22:39:08] [PASSED] 55 VFs
[22:39:08] [PASSED] 56 VFs
[22:39:08] [PASSED] 57 VFs
[22:39:08] [PASSED] 58 VFs
[22:39:08] [PASSED] 59 VFs
[22:39:08] [PASSED] 60 VFs
[22:39:08] [PASSED] 61 VFs
[22:39:08] [PASSED] 62 VFs
[22:39:08] [PASSED] 63 VFs
[22:39:08] ================== [PASSED] fair_contexts ==================
[22:39:08] ===================== fair_doorbells ======================
[22:39:08] [PASSED] 1 VF
[22:39:08] [PASSED] 2 VFs
[22:39:08] [PASSED] 3 VFs
[22:39:08] [PASSED] 4 VFs
[22:39:08] [PASSED] 5 VFs
[22:39:08] [PASSED] 6 VFs
[22:39:08] [PASSED] 7 VFs
[22:39:08] [PASSED] 8 VFs
[22:39:08] [PASSED] 9 VFs
[22:39:08] [PASSED] 10 VFs
[22:39:08] [PASSED] 11 VFs
[22:39:08] [PASSED] 12 VFs
[22:39:08] [PASSED] 13 VFs
[22:39:08] [PASSED] 14 VFs
[22:39:08] [PASSED] 15 VFs
[22:39:08] [PASSED] 16 VFs
[22:39:08] [PASSED] 17 VFs
[22:39:08] [PASSED] 18 VFs
[22:39:08] [PASSED] 19 VFs
[22:39:08] [PASSED] 20 VFs
[22:39:08] [PASSED] 21 VFs
[22:39:08] [PASSED] 22 VFs
[22:39:08] [PASSED] 23 VFs
[22:39:08] [PASSED] 24 VFs
[22:39:08] [PASSED] 25 VFs
[22:39:08] [PASSED] 26 VFs
[22:39:08] [PASSED] 27 VFs
[22:39:08] [PASSED] 28 VFs
[22:39:08] [PASSED] 29 VFs
[22:39:08] [PASSED] 30 VFs
[22:39:08] [PASSED] 31 VFs
[22:39:08] [PASSED] 32 VFs
[22:39:08] [PASSED] 33 VFs
[22:39:08] [PASSED] 34 VFs
[22:39:08] [PASSED] 35 VFs
[22:39:08] [PASSED] 36 VFs
[22:39:08] [PASSED] 37 VFs
[22:39:08] [PASSED] 38 VFs
[22:39:08] [PASSED] 39 VFs
[22:39:08] [PASSED] 40 VFs
[22:39:08] [PASSED] 41 VFs
[22:39:08] [PASSED] 42 VFs
[22:39:08] [PASSED] 43 VFs
[22:39:08] [PASSED] 44 VFs
[22:39:08] [PASSED] 45 VFs
[22:39:08] [PASSED] 46 VFs
[22:39:08] [PASSED] 47 VFs
[22:39:08] [PASSED] 48 VFs
[22:39:08] [PASSED] 49 VFs
[22:39:08] [PASSED] 50 VFs
[22:39:08] [PASSED] 51 VFs
[22:39:08] [PASSED] 52 VFs
[22:39:08] [PASSED] 53 VFs
[22:39:08] [PASSED] 54 VFs
[22:39:08] [PASSED] 55 VFs
[22:39:08] [PASSED] 56 VFs
[22:39:08] [PASSED] 57 VFs
[22:39:08] [PASSED] 58 VFs
[22:39:08] [PASSED] 59 VFs
[22:39:08] [PASSED] 60 VFs
[22:39:08] [PASSED] 61 VFs
[22:39:08] [PASSED] 62 VFs
[22:39:08] [PASSED] 63 VFs
[22:39:08] ================= [PASSED] fair_doorbells ==================
[22:39:08] ======================== fair_ggtt ========================
[22:39:08] [PASSED] 1 VF
[22:39:08] [PASSED] 2 VFs
[22:39:08] [PASSED] 3 VFs
[22:39:08] [PASSED] 4 VFs
[22:39:08] [PASSED] 5 VFs
[22:39:08] [PASSED] 6 VFs
[22:39:08] [PASSED] 7 VFs
[22:39:08] [PASSED] 8 VFs
[22:39:08] [PASSED] 9 VFs
[22:39:08] [PASSED] 10 VFs
[22:39:08] [PASSED] 11 VFs
[22:39:08] [PASSED] 12 VFs
[22:39:08] [PASSED] 13 VFs
[22:39:08] [PASSED] 14 VFs
[22:39:08] [PASSED] 15 VFs
[22:39:08] [PASSED] 16 VFs
[22:39:08] [PASSED] 17 VFs
[22:39:08] [PASSED] 18 VFs
[22:39:08] [PASSED] 19 VFs
[22:39:08] [PASSED] 20 VFs
[22:39:08] [PASSED] 21 VFs
[22:39:08] [PASSED] 22 VFs
[22:39:08] [PASSED] 23 VFs
[22:39:08] [PASSED] 24 VFs
[22:39:08] [PASSED] 25 VFs
[22:39:08] [PASSED] 26 VFs
[22:39:08] [PASSED] 27 VFs
[22:39:08] [PASSED] 28 VFs
[22:39:08] [PASSED] 29 VFs
[22:39:08] [PASSED] 30 VFs
[22:39:08] [PASSED] 31 VFs
[22:39:08] [PASSED] 32 VFs
[22:39:08] [PASSED] 33 VFs
[22:39:08] [PASSED] 34 VFs
[22:39:08] [PASSED] 35 VFs
[22:39:08] [PASSED] 36 VFs
[22:39:08] [PASSED] 37 VFs
[22:39:08] [PASSED] 38 VFs
[22:39:08] [PASSED] 39 VFs
[22:39:08] [PASSED] 40 VFs
[22:39:08] [PASSED] 41 VFs
[22:39:08] [PASSED] 42 VFs
[22:39:08] [PASSED] 43 VFs
[22:39:08] [PASSED] 44 VFs
[22:39:08] [PASSED] 45 VFs
[22:39:08] [PASSED] 46 VFs
[22:39:08] [PASSED] 47 VFs
[22:39:08] [PASSED] 48 VFs
[22:39:08] [PASSED] 49 VFs
[22:39:08] [PASSED] 50 VFs
[22:39:08] [PASSED] 51 VFs
[22:39:08] [PASSED] 52 VFs
[22:39:08] [PASSED] 53 VFs
[22:39:08] [PASSED] 54 VFs
[22:39:08] [PASSED] 55 VFs
[22:39:08] [PASSED] 56 VFs
[22:39:08] [PASSED] 57 VFs
[22:39:08] [PASSED] 58 VFs
[22:39:08] [PASSED] 59 VFs
[22:39:08] [PASSED] 60 VFs
[22:39:09] [PASSED] 61 VFs
[22:39:09] [PASSED] 62 VFs
[22:39:09] [PASSED] 63 VFs
[22:39:09] ==================== [PASSED] fair_ggtt ====================
[22:39:09] ======================== fair_vram ========================
[22:39:09] [PASSED] 1 VF
[22:39:09] [PASSED] 2 VFs
[22:39:09] [PASSED] 3 VFs
[22:39:09] [PASSED] 4 VFs
[22:39:09] [PASSED] 5 VFs
[22:39:09] [PASSED] 6 VFs
[22:39:09] [PASSED] 7 VFs
[22:39:09] [PASSED] 8 VFs
[22:39:09] [PASSED] 9 VFs
[22:39:09] [PASSED] 10 VFs
[22:39:09] [PASSED] 11 VFs
[22:39:09] [PASSED] 12 VFs
[22:39:09] [PASSED] 13 VFs
[22:39:09] [PASSED] 14 VFs
[22:39:09] [PASSED] 15 VFs
[22:39:09] [PASSED] 16 VFs
[22:39:09] [PASSED] 17 VFs
[22:39:09] [PASSED] 18 VFs
[22:39:09] [PASSED] 19 VFs
[22:39:09] [PASSED] 20 VFs
[22:39:09] [PASSED] 21 VFs
[22:39:09] [PASSED] 22 VFs
[22:39:09] [PASSED] 23 VFs
[22:39:09] [PASSED] 24 VFs
[22:39:09] [PASSED] 25 VFs
[22:39:09] [PASSED] 26 VFs
[22:39:09] [PASSED] 27 VFs
[22:39:09] [PASSED] 28 VFs
[22:39:09] [PASSED] 29 VFs
[22:39:09] [PASSED] 30 VFs
[22:39:09] [PASSED] 31 VFs
[22:39:09] [PASSED] 32 VFs
[22:39:09] [PASSED] 33 VFs
[22:39:09] [PASSED] 34 VFs
[22:39:09] [PASSED] 35 VFs
[22:39:09] [PASSED] 36 VFs
[22:39:09] [PASSED] 37 VFs
[22:39:09] [PASSED] 38 VFs
[22:39:09] [PASSED] 39 VFs
[22:39:09] [PASSED] 40 VFs
[22:39:09] [PASSED] 41 VFs
[22:39:09] [PASSED] 42 VFs
[22:39:09] [PASSED] 43 VFs
[22:39:09] [PASSED] 44 VFs
[22:39:09] [PASSED] 45 VFs
[22:39:09] [PASSED] 46 VFs
[22:39:09] [PASSED] 47 VFs
[22:39:09] [PASSED] 48 VFs
[22:39:09] [PASSED] 49 VFs
[22:39:09] [PASSED] 50 VFs
[22:39:09] [PASSED] 51 VFs
[22:39:09] [PASSED] 52 VFs
[22:39:09] [PASSED] 53 VFs
[22:39:09] [PASSED] 54 VFs
[22:39:09] [PASSED] 55 VFs
[22:39:09] [PASSED] 56 VFs
[22:39:09] [PASSED] 57 VFs
[22:39:09] [PASSED] 58 VFs
[22:39:09] [PASSED] 59 VFs
[22:39:09] [PASSED] 60 VFs
[22:39:09] [PASSED] 61 VFs
[22:39:09] [PASSED] 62 VFs
[22:39:09] [PASSED] 63 VFs
[22:39:09] ==================== [PASSED] fair_vram ====================
[22:39:09] ================== [PASSED] pf_gt_config ===================
[22:39:09] ===================== lmtt (1 subtest) =====================
[22:39:09] ======================== test_ops =========================
[22:39:09] [PASSED] 2-level
[22:39:09] [PASSED] multi-level
[22:39:09] ==================== [PASSED] test_ops =====================
[22:39:09] ====================== [PASSED] lmtt =======================
[22:39:09] ================= sriov_packet (1 subtest) =================
[22:39:09] [PASSED] test_descriptor_init
[22:39:09] ================== [PASSED] sriov_packet ===================
[22:39:09] ================= pf_service (11 subtests) =================
[22:39:09] [PASSED] pf_negotiate_any
[22:39:09] [PASSED] pf_negotiate_base_match
[22:39:09] [PASSED] pf_negotiate_base_newer
[22:39:09] [PASSED] pf_negotiate_base_next
[22:39:09] [SKIPPED] pf_negotiate_base_older (no older minor)
[22:39:09] [PASSED] pf_negotiate_base_prev
[22:39:09] [PASSED] pf_negotiate_latest_match
[22:39:09] [PASSED] pf_negotiate_latest_newer
[22:39:09] [PASSED] pf_negotiate_latest_next
[22:39:09] [SKIPPED] pf_negotiate_latest_older (no older minor)
[22:39:09] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[22:39:09] =================== [PASSED] pf_service ====================
[22:39:09] ================= xe_guc_g2g (2 subtests) ==================
[22:39:09] ============== xe_live_guc_g2g_kunit_default ==============
[22:39:09] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[22:39:09] ============== xe_live_guc_g2g_kunit_allmem ===============
[22:39:09] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[22:39:09] =================== [SKIPPED] xe_guc_g2g ===================
[22:39:09] =================== xe_mocs (2 subtests) ===================
[22:39:09] ================ xe_live_mocs_kernel_kunit ================
[22:39:09] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[22:39:09] ================ xe_live_mocs_reset_kunit =================
[22:39:09] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[22:39:09] ==================== [SKIPPED] xe_mocs =====================
[22:39:09] ================= xe_migrate (3 subtests) ==================
[22:39:09] ================= xe_migrate_sanity_kunit =================
[22:39:09] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[22:39:09] ================== xe_validate_ccs_kunit ==================
[22:39:09] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[22:39:09] ============= xe_migrate_access_memory_kunit ==============
[22:39:09] ========= [SKIPPED] xe_migrate_access_memory_kunit =========
[22:39:09] =================== [SKIPPED] xe_migrate ===================
[22:39:09] ================== xe_dma_buf (1 subtest) ==================
[22:39:09] ==================== xe_dma_buf_kunit =====================
[22:39:09] ================ [SKIPPED] xe_dma_buf_kunit ================
[22:39:09] =================== [SKIPPED] xe_dma_buf ===================
[22:39:09] ================= xe_bo_shrink (1 subtest) =================
[22:39:09] =================== xe_bo_shrink_kunit ====================
[22:39:09] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[22:39:09] ================== [SKIPPED] xe_bo_shrink ==================
[22:39:09] ==================== xe_bo (2 subtests) ====================
[22:39:09] ================== xe_ccs_migrate_kunit ===================
[22:39:09] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[22:39:09] ==================== xe_bo_evict_kunit ====================
[22:39:09] =============== [SKIPPED] xe_bo_evict_kunit ================
[22:39:09] ===================== [SKIPPED] xe_bo ======================
[22:39:09] =================== xe_any (9 subtests) ====================
[22:39:09] [PASSED] test_to_xe
[22:39:09] [PASSED] test_to_dev
[22:39:09] [PASSED] test_to_pdev
[22:39:09] [PASSED] test_to_drm
[22:39:09] [PASSED] test_if_pdev
[22:39:09] [PASSED] test_if_xe
[22:39:09] [PASSED] test_if_tile
[22:39:09] [PASSED] test_if_gt
[22:39:09] [PASSED] test_to_id
[22:39:09] ===================== [PASSED] xe_any ======================
[22:39:09] ==================== args (13 subtests) ====================
[22:39:09] [PASSED] count_args_test
[22:39:09] [PASSED] call_args_example
[22:39:09] [PASSED] call_args_test
[22:39:09] [PASSED] drop_first_arg_example
[22:39:09] [PASSED] drop_first_arg_test
[22:39:09] [PASSED] first_arg_example
[22:39:09] [PASSED] first_arg_test
[22:39:09] [PASSED] last_arg_example
[22:39:09] [PASSED] last_arg_test
[22:39:09] [PASSED] pick_arg_example
[22:39:09] [PASSED] if_args_example
[22:39:09] [PASSED] if_args_test
[22:39:09] [PASSED] sep_comma_example
[22:39:09] ====================== [PASSED] args =======================
[22:39:09] =================== xe_pci (3 subtests) ====================
[22:39:09] ==================== check_graphics_ip ====================
[22:39:09] [PASSED] 12.00 Xe_LP
[22:39:09] [PASSED] 12.10 Xe_LP+
[22:39:09] [PASSED] 12.55 Xe_HPG
[22:39:09] [PASSED] 12.60 Xe_HPC
[22:39:09] [PASSED] 12.70 Xe_LPG
[22:39:09] [PASSED] 12.71 Xe_LPG
[22:39:09] [PASSED] 12.74 Xe_LPG+
[22:39:09] [PASSED] 20.01 Xe2_HPG
[22:39:09] [PASSED] 20.02 Xe2_HPG
[22:39:09] [PASSED] 20.04 Xe2_LPG
[22:39:09] [PASSED] 30.00 Xe3_LPG
[22:39:09] [PASSED] 30.01 Xe3_LPG
[22:39:09] [PASSED] 30.03 Xe3_LPG
[22:39:09] [PASSED] 30.04 Xe3_LPG
[22:39:09] [PASSED] 30.05 Xe3_LPG
[22:39:09] [PASSED] 35.10 Xe3p_LPG
[22:39:09] [PASSED] 35.11 Xe3p_XPC
[22:39:09] ================ [PASSED] check_graphics_ip ================
[22:39:09] ===================== check_media_ip ======================
[22:39:09] [PASSED] 12.00 Xe_M
[22:39:09] [PASSED] 12.55 Xe_HPM
[22:39:09] [PASSED] 13.00 Xe_LPM+
[22:39:09] [PASSED] 13.01 Xe2_HPM
[22:39:09] [PASSED] 20.00 Xe2_LPM
[22:39:09] [PASSED] 30.00 Xe3_LPM
[22:39:09] [PASSED] 30.02 Xe3_LPM
[22:39:09] [PASSED] 35.00 Xe3p_LPM
[22:39:09] [PASSED] 35.03 Xe3p_HPM
[22:39:09] ================= [PASSED] check_media_ip ==================
[22:39:09] =================== check_platform_desc ===================
[22:39:09] [PASSED] 0x9A60 (TIGERLAKE)
[22:39:09] [PASSED] 0x9A68 (TIGERLAKE)
[22:39:09] [PASSED] 0x9A70 (TIGERLAKE)
[22:39:09] [PASSED] 0x9A40 (TIGERLAKE)
[22:39:09] [PASSED] 0x9A49 (TIGERLAKE)
[22:39:09] [PASSED] 0x9A59 (TIGERLAKE)
[22:39:09] [PASSED] 0x9A78 (TIGERLAKE)
[22:39:09] [PASSED] 0x9AC0 (TIGERLAKE)
[22:39:09] [PASSED] 0x9AC9 (TIGERLAKE)
[22:39:09] [PASSED] 0x9AD9 (TIGERLAKE)
[22:39:09] [PASSED] 0x9AF8 (TIGERLAKE)
[22:39:09] [PASSED] 0x4C80 (ROCKETLAKE)
[22:39:09] [PASSED] 0x4C8A (ROCKETLAKE)
[22:39:09] [PASSED] 0x4C8B (ROCKETLAKE)
[22:39:09] [PASSED] 0x4C8C (ROCKETLAKE)
[22:39:09] [PASSED] 0x4C90 (ROCKETLAKE)
[22:39:09] [PASSED] 0x4C9A (ROCKETLAKE)
[22:39:09] [PASSED] 0x4680 (ALDERLAKE_S)
[22:39:09] [PASSED] 0x4682 (ALDERLAKE_S)
[22:39:09] [PASSED] 0x4688 (ALDERLAKE_S)
[22:39:09] [PASSED] 0x468A (ALDERLAKE_S)
[22:39:09] [PASSED] 0x468B (ALDERLAKE_S)
[22:39:09] [PASSED] 0x4690 (ALDERLAKE_S)
[22:39:09] [PASSED] 0x4692 (ALDERLAKE_S)
[22:39:09] [PASSED] 0x4693 (ALDERLAKE_S)
[22:39:09] [PASSED] 0x46A0 (ALDERLAKE_P)
[22:39:09] [PASSED] 0x46A1 (ALDERLAKE_P)
[22:39:09] [PASSED] 0x46A2 (ALDERLAKE_P)
[22:39:09] [PASSED] 0x46A3 (ALDERLAKE_P)
[22:39:09] [PASSED] 0x46A6 (ALDERLAKE_P)
[22:39:09] [PASSED] 0x46A8 (ALDERLAKE_P)
[22:39:09] [PASSED] 0x46AA (ALDERLAKE_P)
[22:39:09] [PASSED] 0x462A (ALDERLAKE_P)
[22:39:09] [PASSED] 0x4626 (ALDERLAKE_P)
[22:39:09] [PASSED] 0x4628 (ALDERLAKE_P)
[22:39:09] [PASSED] 0x46B0 (ALDERLAKE_P)
[22:39:09] [PASSED] 0x46B1 (ALDERLAKE_P)
[22:39:09] [PASSED] 0x46B2 (ALDERLAKE_P)
[22:39:09] [PASSED] 0x46B3 (ALDERLAKE_P)
[22:39:09] [PASSED] 0x46C0 (ALDERLAKE_P)
[22:39:09] [PASSED] 0x46C1 (ALDERLAKE_P)
[22:39:09] [PASSED] 0x46C2 (ALDERLAKE_P)
[22:39:09] [PASSED] 0x46C3 (ALDERLAKE_P)
[22:39:09] [PASSED] 0x46D0 (ALDERLAKE_N)
[22:39:09] [PASSED] 0x46D1 (ALDERLAKE_N)
[22:39:09] [PASSED] 0x46D2 (ALDERLAKE_N)
[22:39:09] [PASSED] 0x46D3 (ALDERLAKE_N)
[22:39:09] [PASSED] 0x46D4 (ALDERLAKE_N)
[22:39:09] [PASSED] 0xA721 (ALDERLAKE_P)
[22:39:09] [PASSED] 0xA7A1 (ALDERLAKE_P)
[22:39:09] [PASSED] 0xA7A9 (ALDERLAKE_P)
[22:39:09] [PASSED] 0xA7AC (ALDERLAKE_P)
[22:39:09] [PASSED] 0xA7AD (ALDERLAKE_P)
[22:39:09] [PASSED] 0xA720 (ALDERLAKE_P)
[22:39:09] [PASSED] 0xA7A0 (ALDERLAKE_P)
[22:39:09] [PASSED] 0xA7A8 (ALDERLAKE_P)
[22:39:09] [PASSED] 0xA7AA (ALDERLAKE_P)
[22:39:09] [PASSED] 0xA7AB (ALDERLAKE_P)
[22:39:09] [PASSED] 0xA780 (ALDERLAKE_S)
[22:39:09] [PASSED] 0xA781 (ALDERLAKE_S)
[22:39:09] [PASSED] 0xA782 (ALDERLAKE_S)
[22:39:09] [PASSED] 0xA783 (ALDERLAKE_S)
[22:39:09] [PASSED] 0xA788 (ALDERLAKE_S)
[22:39:09] [PASSED] 0xA789 (ALDERLAKE_S)
[22:39:09] [PASSED] 0xA78A (ALDERLAKE_S)
[22:39:09] [PASSED] 0xA78B (ALDERLAKE_S)
[22:39:09] [PASSED] 0x4905 (DG1)
[22:39:09] [PASSED] 0x4906 (DG1)
[22:39:09] [PASSED] 0x4907 (DG1)
[22:39:09] [PASSED] 0x4908 (DG1)
[22:39:09] [PASSED] 0x4909 (DG1)
[22:39:09] [PASSED] 0x56C0 (DG2)
[22:39:09] [PASSED] 0x56C2 (DG2)
[22:39:09] [PASSED] 0x56C1 (DG2)
[22:39:09] [PASSED] 0x7D51 (METEORLAKE)
[22:39:09] [PASSED] 0x7DD1 (METEORLAKE)
[22:39:09] [PASSED] 0x7D41 (METEORLAKE)
[22:39:09] [PASSED] 0x7D67 (METEORLAKE)
[22:39:09] [PASSED] 0xB640 (METEORLAKE)
[22:39:09] [PASSED] 0x56A0 (DG2)
[22:39:09] [PASSED] 0x56A1 (DG2)
[22:39:09] [PASSED] 0x56A2 (DG2)
[22:39:09] [PASSED] 0x56BE (DG2)
[22:39:09] [PASSED] 0x56BF (DG2)
[22:39:09] [PASSED] 0x5690 (DG2)
[22:39:09] [PASSED] 0x5691 (DG2)
[22:39:09] [PASSED] 0x5692 (DG2)
[22:39:09] [PASSED] 0x56A5 (DG2)
[22:39:09] [PASSED] 0x56A6 (DG2)
[22:39:09] [PASSED] 0x56B0 (DG2)
[22:39:09] [PASSED] 0x56B1 (DG2)
[22:39:09] [PASSED] 0x56BA (DG2)
[22:39:09] [PASSED] 0x56BB (DG2)
[22:39:09] [PASSED] 0x56BC (DG2)
[22:39:09] [PASSED] 0x56BD (DG2)
[22:39:09] [PASSED] 0x5693 (DG2)
[22:39:09] [PASSED] 0x5694 (DG2)
[22:39:09] [PASSED] 0x5695 (DG2)
[22:39:09] [PASSED] 0x56A3 (DG2)
[22:39:09] [PASSED] 0x56A4 (DG2)
[22:39:09] [PASSED] 0x56B2 (DG2)
[22:39:09] [PASSED] 0x56B3 (DG2)
[22:39:09] [PASSED] 0x5696 (DG2)
[22:39:09] [PASSED] 0x5697 (DG2)
[22:39:09] [PASSED] 0xB69 (PVC)
[22:39:09] [PASSED] 0xB6E (PVC)
[22:39:09] [PASSED] 0xBD4 (PVC)
[22:39:09] [PASSED] 0xBD5 (PVC)
[22:39:09] [PASSED] 0xBD6 (PVC)
[22:39:09] [PASSED] 0xBD7 (PVC)
[22:39:09] [PASSED] 0xBD8 (PVC)
[22:39:09] [PASSED] 0xBD9 (PVC)
[22:39:09] [PASSED] 0xBDA (PVC)
[22:39:09] [PASSED] 0xBDB (PVC)
[22:39:09] [PASSED] 0xBE0 (PVC)
[22:39:09] [PASSED] 0xBE1 (PVC)
[22:39:09] [PASSED] 0xBE5 (PVC)
[22:39:09] [PASSED] 0x7D40 (METEORLAKE)
[22:39:09] [PASSED] 0x7D45 (METEORLAKE)
[22:39:09] [PASSED] 0x7D55 (METEORLAKE)
[22:39:09] [PASSED] 0x7D60 (METEORLAKE)
[22:39:09] [PASSED] 0x7DD5 (METEORLAKE)
[22:39:09] [PASSED] 0x6420 (LUNARLAKE)
[22:39:09] [PASSED] 0x64A0 (LUNARLAKE)
[22:39:09] [PASSED] 0x64B0 (LUNARLAKE)
[22:39:09] [PASSED] 0xE202 (BATTLEMAGE)
[22:39:09] [PASSED] 0xE209 (BATTLEMAGE)
[22:39:09] [PASSED] 0xE20B (BATTLEMAGE)
[22:39:09] [PASSED] 0xE20C (BATTLEMAGE)
[22:39:09] [PASSED] 0xE20D (BATTLEMAGE)
[22:39:09] [PASSED] 0xE210 (BATTLEMAGE)
[22:39:09] [PASSED] 0xE211 (BATTLEMAGE)
[22:39:09] [PASSED] 0xE212 (BATTLEMAGE)
[22:39:09] [PASSED] 0xE216 (BATTLEMAGE)
[22:39:09] [PASSED] 0xE220 (BATTLEMAGE)
[22:39:09] [PASSED] 0xE221 (BATTLEMAGE)
[22:39:09] [PASSED] 0xE222 (BATTLEMAGE)
[22:39:09] [PASSED] 0xE223 (BATTLEMAGE)
[22:39:09] [PASSED] 0xB080 (PANTHERLAKE)
[22:39:09] [PASSED] 0xB081 (PANTHERLAKE)
[22:39:09] [PASSED] 0xB082 (PANTHERLAKE)
[22:39:09] [PASSED] 0xB083 (PANTHERLAKE)
[22:39:09] [PASSED] 0xB084 (PANTHERLAKE)
[22:39:09] [PASSED] 0xB085 (PANTHERLAKE)
[22:39:09] [PASSED] 0xB086 (PANTHERLAKE)
[22:39:09] [PASSED] 0xB087 (PANTHERLAKE)
[22:39:09] [PASSED] 0xB08F (PANTHERLAKE)
[22:39:09] [PASSED] 0xB090 (PANTHERLAKE)
[22:39:09] [PASSED] 0xB0A0 (PANTHERLAKE)
[22:39:09] [PASSED] 0xB0A1 (PANTHERLAKE)
[22:39:09] [PASSED] 0xB0B0 (PANTHERLAKE)
[22:39:09] [PASSED] 0xFD80 (PANTHERLAKE)
[22:39:09] [PASSED] 0xFD81 (PANTHERLAKE)
[22:39:09] [PASSED] 0xD740 (NOVALAKE_S)
[22:39:09] [PASSED] 0xD741 (NOVALAKE_S)
[22:39:09] [PASSED] 0xD742 (NOVALAKE_S)
[22:39:09] [PASSED] 0xD743 (NOVALAKE_S)
[22:39:09] [PASSED] 0xD745 (NOVALAKE_S)
[22:39:09] [PASSED] 0xD74A (NOVALAKE_S)
[22:39:09] [PASSED] 0xD74B (NOVALAKE_S)
[22:39:09] [PASSED] 0x674C (CRESCENTISLAND)
[22:39:09] [PASSED] 0x674D (CRESCENTISLAND)
[22:39:09] [PASSED] 0x674E (CRESCENTISLAND)
[22:39:09] [PASSED] 0x674F (CRESCENTISLAND)
[22:39:09] [PASSED] 0x6750 (CRESCENTISLAND)
[22:39:09] [PASSED] 0x6751 (CRESCENTISLAND)
[22:39:09] [PASSED] 0x6752 (CRESCENTISLAND)
[22:39:09] [PASSED] 0xD750 (NOVALAKE_P)
[22:39:09] [PASSED] 0xD751 (NOVALAKE_P)
[22:39:09] [PASSED] 0xD752 (NOVALAKE_P)
[22:39:09] [PASSED] 0xD753 (NOVALAKE_P)
[22:39:09] [PASSED] 0xD754 (NOVALAKE_P)
[22:39:09] [PASSED] 0xD755 (NOVALAKE_P)
[22:39:09] [PASSED] 0xD756 (NOVALAKE_P)
[22:39:09] [PASSED] 0xD757 (NOVALAKE_P)
[22:39:09] [PASSED] 0xD75F (NOVALAKE_P)
[22:39:09] =============== [PASSED] check_platform_desc ===============
[22:39:09] ===================== [PASSED] xe_pci ======================
[22:39:09] ============= xe_rtp_tables_test (5 subtests) ==============
[22:39:09] ================== xe_rtp_table_gt_test ===================
[22:39:09] [PASSED] gt_was/14011060649
[22:39:09] [PASSED] gt_was/14011059788
[22:39:09] [PASSED] gt_was/14015795083
[22:39:09] [PASSED] gt_was/16021867713
[22:39:09] [PASSED] gt_was/14019449301
[22:39:09] [PASSED] gt_was/16028005424
[22:39:09] [PASSED] gt_was/14026578760
[22:39:09] [PASSED] gt_was/1409420604
[22:39:09] [PASSED] gt_was/1408615072
[22:39:09] [PASSED] gt_was/22010523718
[22:39:09] [PASSED] gt_was/14011006942
[22:39:09] [PASSED] gt_was/14014830051
[22:39:09] [PASSED] gt_was/18018781329
[22:39:09] [PASSED] gt_was/1509235366
[22:39:09] [PASSED] gt_was/18018781329
[22:39:09] [PASSED] gt_was/16016694945
[22:39:09] [PASSED] gt_was/14018575942
[22:39:09] [PASSED] gt_was/22016670082
[22:39:09] [PASSED] gt_was/22016670082
[22:39:09] [PASSED] gt_was/14017421178
[22:39:09] [PASSED] gt_was/16025250150
[22:39:09] [PASSED] gt_was/14021871409
[22:39:09] [PASSED] gt_was/16021865536
[22:39:09] [PASSED] gt_was/14021486841
[22:39:09] [PASSED] gt_was/14025160223
[22:39:09] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[22:39:09] [PASSED] gt_was/14025635424
[22:39:09] [PASSED] gt_was/16028005424
[22:39:09] ============== [PASSED] xe_rtp_table_gt_test ===============
[22:39:09] ================== xe_rtp_table_gt_test ===================
[22:39:09] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[22:39:09] [PASSED] gt_tunings/Tuning: 32B Access Enable
[22:39:09] [PASSED] gt_tunings/Tuning: L3 cache
[22:39:09] [PASSED] gt_tunings/Tuning: L3 cache - media
[22:39:09] [PASSED] gt_tunings/Tuning: Compression Overfetch
[22:39:09] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[22:39:09] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[22:39:09] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[22:39:09] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[22:39:09] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[22:39:09] [PASSED] gt_tunings/Tuning: Stateless compression control
[22:39:09] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[22:39:09] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[22:39:09] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[22:39:09] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[22:39:09] [PASSED] gt_tunings/Tuning: Force All Non-Compressible Memory Reads to be 256B Overfetches
[22:39:09] ============== [PASSED] xe_rtp_table_gt_test ===============
[22:39:09] ================== xe_rtp_table_oob_test ==================
[22:39:09] [PASSED] oob_was/1607983814
[22:39:09] [PASSED] oob_was/16010904313
[22:39:09] [PASSED] oob_was/18022495364
[22:39:09] [PASSED] oob_was/22012773006
[22:39:09] [PASSED] oob_was/14014475959
[22:39:09] [PASSED] oob_was/22011391025
[22:39:09] [PASSED] oob_was/22012727170
[22:39:09] [PASSED] oob_was/22012727685
[22:39:09] [PASSED] oob_was/22016596838
[22:39:09] [PASSED] oob_was/18020744125
[22:39:09] [PASSED] oob_was/1409600907
[22:39:09] [PASSED] oob_was/22014953428
[22:39:09] [PASSED] oob_was/16017236439
[22:39:09] [PASSED] oob_was/14019821291
[22:39:09] [PASSED] oob_was/14015076503
[22:39:09] [PASSED] oob_was/22016122933
[22:39:09] [PASSED] oob_was/14018913170
[22:39:09] [PASSED] oob_was/14018094691
[22:39:09] [PASSED] oob_was/18024947630
[22:39:09] [PASSED] oob_was/16022287689
[22:39:09] [PASSED] oob_was/13011645652
[22:39:09] [PASSED] oob_was/14022293748
[22:39:09] [PASSED] oob_was/22019794406
[22:39:09] [PASSED] oob_was/22019338487
[22:39:09] [PASSED] oob_was/16023588340
[22:39:09] [PASSED] oob_was/14019789679
[22:39:09] [PASSED] oob_was/14022866841
[22:39:09] [PASSED] oob_was/16021333562
[22:39:09] [PASSED] oob_was/14016712196
[22:39:09] [PASSED] oob_was/14015568240
[22:39:09] [PASSED] oob_was/18013179988
[22:39:09] [PASSED] oob_was/1508761755
[22:39:09] [PASSED] oob_was/16023105232
[22:39:09] [PASSED] oob_was/16026508708
[22:39:09] [PASSED] oob_was/14020001231
[22:39:09] [PASSED] oob_was/16023683509
[22:39:09] [PASSED] oob_was/14025515070
[22:39:09] [PASSED] oob_was/15015404425_disable
[22:39:09] [PASSED] oob_was/16026007364
[22:39:09] [PASSED] oob_was/14020316580
[22:39:09] [PASSED] oob_was/14025883347
[22:39:09] [PASSED] oob_was/16029380221
[22:39:09] [PASSED] oob_was/22022079272
[22:39:09] [PASSED] oob_was/16029897822
[22:39:09] [PASSED] oob_was/14026539277
[22:39:09] [PASSED] oob_was/14027054324
[22:39:09] [PASSED] oob_was/14025941587
[22:39:09] [PASSED] oob_was/16030224309
[22:39:09] ============== [PASSED] xe_rtp_table_oob_test ==============
[22:39:09] ================ xe_rtp_table_dev_oob_test ================
[22:39:09] [PASSED] device_oob_was/22010954014
[22:39:09] [PASSED] device_oob_was/15015404425
[22:39:09] [PASSED] device_oob_was/22019338487_display
[22:39:09] [PASSED] device_oob_was/14022085890
[22:39:09] [PASSED] device_oob_was/14026633728
[22:39:09] [PASSED] device_oob_was/14026746987
[22:39:09] [PASSED] device_oob_was/14026779378
[22:39:09] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[22:39:09] ========== xe_rtp_table_missing_upper_bound_test ==========
[22:39:09] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[22:39:09] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[22:39:09] [PASSED] register_whitelist/1806527549
[22:39:09] [PASSED] register_whitelist/allow_read_ctx_timestamp
[22:39:09] [PASSED] register_whitelist/allow_read_queue_timestamp
[22:39:09] [PASSED] register_whitelist/16014440446
[22:39:09] [PASSED] register_whitelist/16017236439
[22:39:09] [PASSED] register_whitelist/16020183090
[22:39:09] [PASSED] register_whitelist/14024997852
[22:39:09] [PASSED] register_whitelist/14024997852
[22:39:09] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[22:39:09] =============== [PASSED] xe_rtp_tables_test ================
[22:39:09] =================== xe_rtp (3 subtests) ====================
[22:39:09] =================== xe_rtp_rules_tests ====================
[22:39:09] [PASSED] no
[22:39:09] [PASSED] yes
[22:39:09] [PASSED] no-and-no
[22:39:09] [PASSED] no-and-yes
[22:39:09] [PASSED] yes-and-no
[22:39:09] [PASSED] yes-and-yes
[22:39:09] [PASSED] no-or-no
[22:39:09] [PASSED] no-or-yes
[22:39:09] [PASSED] yes-or-no
[22:39:09] [PASSED] yes-or-yes
[22:39:09] [PASSED] no-yes-or-yes-no
[22:39:09] [PASSED] no-yes-or-yes-yes
[22:39:09] [PASSED] yes-yes-or-no-yes
[22:39:09] [PASSED] yes-yes-or-yes-yes
[22:39:09] [PASSED] no-no-or-yes-or-no
[22:39:09] [PASSED] or
[22:39:09] [PASSED] or-yes
[22:39:09] [PASSED] or-no
[22:39:09] [PASSED] yes-or
[22:39:09] [PASSED] no-or
[22:39:09] [PASSED] no-or-or-yes
[22:39:09] [PASSED] yes-or-or-no
[22:39:09] [PASSED] no-or-or-no
[22:39:09] [PASSED] missing-context-engine-class
[22:39:09] [PASSED] missing-context-engine-class-or-yes
[22:39:09] [PASSED] missing-context-engine-class-or-or-yes
[22:39:09] =============== [PASSED] xe_rtp_rules_tests ================
[22:39:09] =============== xe_rtp_process_to_sr_tests ================
[22:39:09] [PASSED] coalesce-same-reg
[22:39:09] [PASSED] coalesce-same-reg-literal-and-func
[22:39:09] [PASSED] no-match-no-add
[22:39:09] [PASSED] two-regs-two-entries
[22:39:09] [PASSED] clr-one-set-other
[22:39:09] [PASSED] set-field
[22:39:09] [PASSED] conflict-duplicate
[22:39:09] [PASSED] conflict-not-disjoint
[22:39:09] [PASSED] conflict-not-disjoint-literal-and-func
[22:39:09] [PASSED] conflict-reg-type
[22:39:09] [PASSED] bad-mcr-reg-forced-to-regular
[22:39:09] [PASSED] bad-regular-reg-forced-to-mcr
[22:39:09] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[22:39:09] ================== xe_rtp_process_tests ===================
[22:39:09] [PASSED] active1
[22:39:09] [PASSED] active2
[22:39:09] [PASSED] active-inactive
[22:39:09] [PASSED] inactive-active
[22:39:09] [PASSED] inactive-active-inactive
[22:39:09] [PASSED] inactive-inactive-inactive
[22:39:09] ============== [PASSED] xe_rtp_process_tests ===============
[22:39:09] ===================== [PASSED] xe_rtp ======================
[22:39:09] ==================== xe_wa (1 subtest) =====================
[22:39:09] ======================== xe_wa_gt =========================
[22:39:09] [PASSED] TIGERLAKE B0
[22:39:09] [PASSED] DG1 A0
[22:39:09] [PASSED] DG1 B0
[22:39:09] [PASSED] ALDERLAKE_S A0
[22:39:09] [PASSED] ALDERLAKE_S B0
[22:39:09] [PASSED] ALDERLAKE_S C0
[22:39:09] [PASSED] ALDERLAKE_S D0
[22:39:09] [PASSED] ALDERLAKE_P A0
[22:39:09] [PASSED] ALDERLAKE_P B0
[22:39:09] [PASSED] ALDERLAKE_P C0
[22:39:09] [PASSED] ALDERLAKE_S RPLS D0
[22:39:09] [PASSED] ALDERLAKE_P RPLU E0
[22:39:09] [PASSED] DG2 G10 C0
[22:39:09] [PASSED] DG2 G11 B1
[22:39:09] [PASSED] DG2 G12 A1
[22:39:09] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[22:39:09] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[22:39:09] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[22:39:09] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[22:39:09] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[22:39:09] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[22:39:09] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[22:39:09] ==================== [PASSED] xe_wa_gt =====================
[22:39:09] ====================== [PASSED] xe_wa ======================
[22:39:09] ============================================================
[22:39:09] Testing complete. Ran 839 tests: passed: 810, skipped: 29
[22:39:09] Elapsed time: 42.026s total, 1.857s configuring, 39.403s building, 0.724s 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
[22:39:09] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[22:39: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
[22:39:36] Starting KUnit Kernel (1/1)...
[22:39:36] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[22:39:36] ============ drm_test_pick_cmdline (2 subtests) ============
[22:39:36] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[22:39:36] =============== drm_test_pick_cmdline_named ===============
[22:39:36] [PASSED] NTSC
[22:39:36] [PASSED] NTSC-J
[22:39:36] [PASSED] PAL
[22:39:36] [PASSED] PAL-M
[22:39:36] =========== [PASSED] drm_test_pick_cmdline_named ===========
[22:39:36] ============== [PASSED] drm_test_pick_cmdline ==============
[22:39:36] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[22:39:36] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[22:39:36] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[22:39:36] =========== drm_validate_clone_mode (2 subtests) ===========
[22:39:36] ============== drm_test_check_in_clone_mode ===============
[22:39:36] [PASSED] in_clone_mode
[22:39:36] [PASSED] not_in_clone_mode
[22:39:36] ========== [PASSED] drm_test_check_in_clone_mode ===========
[22:39:36] =============== drm_test_check_valid_clones ===============
[22:39:36] [PASSED] not_in_clone_mode
[22:39:36] [PASSED] valid_clone
[22:39:36] [PASSED] invalid_clone
[22:39:36] =========== [PASSED] drm_test_check_valid_clones ===========
[22:39:36] ============= [PASSED] drm_validate_clone_mode =============
[22:39:36] ============= drm_validate_modeset (1 subtest) =============
[22:39:36] [PASSED] drm_test_check_connector_changed_modeset
[22:39:36] ============== [PASSED] drm_validate_modeset ===============
[22:39:36] ====== drm_test_bridge_get_current_state (1 subtest) =======
[22:39:36] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[22:39:36] ======== [PASSED] drm_test_bridge_get_current_state ========
[22:39:36] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[22:39:36] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[22:39:36] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[22:39:36] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[22:39:36] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[22:39:36] ============== drm_bridge_alloc (2 subtests) ===============
[22:39:36] [PASSED] drm_test_drm_bridge_alloc_basic
[22:39:36] [PASSED] drm_test_drm_bridge_alloc_get_put
[22:39:36] ================ [PASSED] drm_bridge_alloc =================
[22:39:36] ============= drm_bridge_bus_fmt (5 subtests) ==============
[22:39:36] [PASSED] drm_test_bridge_rgb_yuv_rgb
[22:39:36] [PASSED] drm_test_bridge_must_convert_to_yuv444
[22:39:36] [PASSED] drm_test_bridge_hdmi_auto_rgb
[22:39:36] [PASSED] drm_test_bridge_auto_first
[22:39:36] [PASSED] drm_test_bridge_rgb_yuv_no_path
[22:39:36] =============== [PASSED] drm_bridge_bus_fmt ================
[22:39:36] ============= drm_cmdline_parser (40 subtests) =============
[22:39:36] [PASSED] drm_test_cmdline_force_d_only
[22:39:36] [PASSED] drm_test_cmdline_force_D_only_dvi
[22:39:36] [PASSED] drm_test_cmdline_force_D_only_hdmi
[22:39:36] [PASSED] drm_test_cmdline_force_D_only_not_digital
[22:39:36] [PASSED] drm_test_cmdline_force_e_only
[22:39:36] [PASSED] drm_test_cmdline_res
[22:39:36] [PASSED] drm_test_cmdline_res_vesa
[22:39:36] [PASSED] drm_test_cmdline_res_vesa_rblank
[22:39:36] [PASSED] drm_test_cmdline_res_rblank
[22:39:36] [PASSED] drm_test_cmdline_res_bpp
[22:39:36] [PASSED] drm_test_cmdline_res_refresh
[22:39:36] [PASSED] drm_test_cmdline_res_bpp_refresh
[22:39:36] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[22:39:36] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[22:39:36] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[22:39:36] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[22:39:36] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[22:39:36] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[22:39:36] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[22:39:36] [PASSED] drm_test_cmdline_res_margins_force_on
[22:39:36] [PASSED] drm_test_cmdline_res_vesa_margins
[22:39:36] [PASSED] drm_test_cmdline_name
[22:39:36] [PASSED] drm_test_cmdline_name_bpp
[22:39:36] [PASSED] drm_test_cmdline_name_option
[22:39:36] [PASSED] drm_test_cmdline_name_bpp_option
[22:39:36] [PASSED] drm_test_cmdline_rotate_0
[22:39:36] [PASSED] drm_test_cmdline_rotate_90
[22:39:36] [PASSED] drm_test_cmdline_rotate_180
[22:39:36] [PASSED] drm_test_cmdline_rotate_270
[22:39:36] [PASSED] drm_test_cmdline_hmirror
[22:39:36] [PASSED] drm_test_cmdline_vmirror
[22:39:36] [PASSED] drm_test_cmdline_margin_options
[22:39:36] [PASSED] drm_test_cmdline_multiple_options
[22:39:36] [PASSED] drm_test_cmdline_bpp_extra_and_option
[22:39:36] [PASSED] drm_test_cmdline_extra_and_option
[22:39:36] [PASSED] drm_test_cmdline_freestanding_options
[22:39:36] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[22:39:36] [PASSED] drm_test_cmdline_panel_orientation
[22:39:36] ================ drm_test_cmdline_invalid =================
[22:39:36] [PASSED] margin_only
[22:39:36] [PASSED] interlace_only
[22:39:36] [PASSED] res_missing_x
[22:39:36] [PASSED] res_missing_y
[22:39:36] [PASSED] res_bad_y
[22:39:36] [PASSED] res_missing_y_bpp
[22:39:36] [PASSED] res_bad_bpp
[22:39:36] [PASSED] res_bad_refresh
[22:39:36] [PASSED] res_bpp_refresh_force_on_off
[22:39:36] [PASSED] res_invalid_mode
[22:39:36] [PASSED] res_bpp_wrong_place_mode
[22:39:36] [PASSED] name_bpp_refresh
[22:39:36] [PASSED] name_refresh
[22:39:36] [PASSED] name_refresh_wrong_mode
[22:39:36] [PASSED] name_refresh_invalid_mode
[22:39:36] [PASSED] rotate_multiple
[22:39:36] [PASSED] rotate_invalid_val
[22:39:36] [PASSED] rotate_truncated
[22:39:36] [PASSED] invalid_option
[22:39:36] [PASSED] invalid_tv_option
[22:39:36] [PASSED] truncated_tv_option
[22:39:36] ============ [PASSED] drm_test_cmdline_invalid =============
[22:39:36] =============== drm_test_cmdline_tv_options ===============
[22:39:36] [PASSED] NTSC
[22:39:36] [PASSED] NTSC_443
[22:39:36] [PASSED] NTSC_J
[22:39:36] [PASSED] PAL
[22:39:36] [PASSED] PAL_M
[22:39:36] [PASSED] PAL_N
[22:39:36] [PASSED] SECAM
[22:39:36] [PASSED] MONO_525
[22:39:36] [PASSED] MONO_625
[22:39:36] =========== [PASSED] drm_test_cmdline_tv_options ===========
[22:39:36] =============== [PASSED] drm_cmdline_parser ================
[22:39:36] ========== drmm_connector_hdmi_init (20 subtests) ==========
[22:39:36] [PASSED] drm_test_connector_hdmi_init_valid
[22:39:36] [PASSED] drm_test_connector_hdmi_init_bpc_8
[22:39:36] [PASSED] drm_test_connector_hdmi_init_bpc_10
[22:39:36] [PASSED] drm_test_connector_hdmi_init_bpc_12
[22:39:36] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[22:39:36] [PASSED] drm_test_connector_hdmi_init_bpc_null
[22:39:36] [PASSED] drm_test_connector_hdmi_init_formats_empty
[22:39:36] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[22:39:36] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[22:39:36] [PASSED] supported_formats=0x9 yuv420_allowed=1
[22:39:36] [PASSED] supported_formats=0x9 yuv420_allowed=0
[22:39:36] [PASSED] supported_formats=0x5 yuv420_allowed=1
[22:39:36] [PASSED] supported_formats=0x5 yuv420_allowed=0
[22:39:36] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[22:39:36] [PASSED] drm_test_connector_hdmi_init_null_ddc
[22:39:36] [PASSED] drm_test_connector_hdmi_init_null_product
[22:39:36] [PASSED] drm_test_connector_hdmi_init_null_vendor
[22:39:36] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[22:39:36] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[22:39:36] [PASSED] drm_test_connector_hdmi_init_product_valid
[22:39:36] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[22:39:36] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[22:39:36] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[22:39:36] ========= drm_test_connector_hdmi_init_type_valid =========
[22:39:36] [PASSED] HDMI-A
[22:39:36] [PASSED] HDMI-B
[22:39:36] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[22:39:36] ======== drm_test_connector_hdmi_init_type_invalid ========
[22:39:36] [PASSED] Unknown
[22:39:36] [PASSED] VGA
[22:39:36] [PASSED] DVI-I
[22:39:36] [PASSED] DVI-D
[22:39:36] [PASSED] DVI-A
[22:39:36] [PASSED] Composite
[22:39:36] [PASSED] SVIDEO
[22:39:36] [PASSED] LVDS
[22:39:36] [PASSED] Component
[22:39:36] [PASSED] DIN
[22:39:36] [PASSED] DP
[22:39:36] [PASSED] TV
[22:39:36] [PASSED] eDP
[22:39:36] [PASSED] Virtual
[22:39:36] [PASSED] DSI
[22:39:36] [PASSED] DPI
[22:39:36] [PASSED] Writeback
[22:39:36] [PASSED] SPI
[22:39:36] [PASSED] USB
[22:39:36] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[22:39:36] ============ [PASSED] drmm_connector_hdmi_init =============
[22:39:36] ============= drmm_connector_init (3 subtests) =============
[22:39:36] [PASSED] drm_test_drmm_connector_init
[22:39:36] [PASSED] drm_test_drmm_connector_init_null_ddc
[22:39:36] ========= drm_test_drmm_connector_init_type_valid =========
[22:39:36] [PASSED] Unknown
[22:39:36] [PASSED] VGA
[22:39:36] [PASSED] DVI-I
[22:39:36] [PASSED] DVI-D
[22:39:36] [PASSED] DVI-A
[22:39:36] [PASSED] Composite
[22:39:36] [PASSED] SVIDEO
[22:39:36] [PASSED] LVDS
[22:39:36] [PASSED] Component
[22:39:36] [PASSED] DIN
[22:39:36] [PASSED] DP
[22:39:36] [PASSED] HDMI-A
[22:39:36] [PASSED] HDMI-B
[22:39:36] [PASSED] TV
[22:39:36] [PASSED] eDP
[22:39:36] [PASSED] Virtual
[22:39:36] [PASSED] DSI
[22:39:36] [PASSED] DPI
[22:39:36] [PASSED] Writeback
[22:39:36] [PASSED] SPI
[22:39:36] [PASSED] USB
[22:39:36] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[22:39:36] =============== [PASSED] drmm_connector_init ===============
[22:39:36] ========= drm_connector_dynamic_init (6 subtests) ==========
[22:39:36] [PASSED] drm_test_drm_connector_dynamic_init
[22:39:36] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[22:39:36] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[22:39:36] [PASSED] drm_test_drm_connector_dynamic_init_properties
[22:39:36] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[22:39:36] [PASSED] Unknown
[22:39:36] [PASSED] VGA
[22:39:36] [PASSED] DVI-I
[22:39:36] [PASSED] DVI-D
[22:39:36] [PASSED] DVI-A
[22:39:36] [PASSED] Composite
[22:39:36] [PASSED] SVIDEO
[22:39:36] [PASSED] LVDS
[22:39:36] [PASSED] Component
[22:39:36] [PASSED] DIN
[22:39:36] [PASSED] DP
[22:39:36] [PASSED] HDMI-A
[22:39:36] [PASSED] HDMI-B
[22:39:36] [PASSED] TV
[22:39:36] [PASSED] eDP
[22:39:36] [PASSED] Virtual
[22:39:36] [PASSED] DSI
[22:39:36] [PASSED] DPI
[22:39:36] [PASSED] Writeback
[22:39:36] [PASSED] SPI
[22:39:36] [PASSED] USB
[22:39:36] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[22:39:36] ======== drm_test_drm_connector_dynamic_init_name =========
[22:39:36] [PASSED] Unknown
[22:39:36] [PASSED] VGA
[22:39:36] [PASSED] DVI-I
[22:39:36] [PASSED] DVI-D
[22:39:36] [PASSED] DVI-A
[22:39:36] [PASSED] Composite
[22:39:36] [PASSED] SVIDEO
[22:39:36] [PASSED] LVDS
[22:39:36] [PASSED] Component
[22:39:36] [PASSED] DIN
[22:39:36] [PASSED] DP
[22:39:36] [PASSED] HDMI-A
[22:39:36] [PASSED] HDMI-B
[22:39:36] [PASSED] TV
[22:39:36] [PASSED] eDP
[22:39:36] [PASSED] Virtual
[22:39:36] [PASSED] DSI
[22:39:36] [PASSED] DPI
[22:39:36] [PASSED] Writeback
[22:39:36] [PASSED] SPI
[22:39:36] [PASSED] USB
[22:39:36] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[22:39:36] =========== [PASSED] drm_connector_dynamic_init ============
[22:39:36] ==== drm_connector_dynamic_register_early (4 subtests) =====
[22:39:36] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[22:39:36] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[22:39:36] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[22:39:36] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[22:39:36] ====== [PASSED] drm_connector_dynamic_register_early =======
[22:39:36] ======= drm_connector_dynamic_register (7 subtests) ========
[22:39:36] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[22:39:36] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[22:39:36] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[22:39:36] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[22:39:36] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[22:39:36] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[22:39:36] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[22:39:36] ========= [PASSED] drm_connector_dynamic_register ==========
[22:39:36] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[22:39:36] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[22:39:36] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[22:39:36] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[22:39:36] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[22:39:36] ========== drm_test_get_tv_mode_from_name_valid ===========
[22:39:36] [PASSED] NTSC
[22:39:36] [PASSED] NTSC-443
[22:39:36] [PASSED] NTSC-J
[22:39:36] [PASSED] PAL
[22:39:36] [PASSED] PAL-M
[22:39:36] [PASSED] PAL-N
[22:39:36] [PASSED] SECAM
[22:39:36] [PASSED] Mono
[22:39:36] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[22:39:36] [PASSED] drm_test_get_tv_mode_from_name_truncated
[22:39:36] ============ [PASSED] drm_get_tv_mode_from_name ============
[22:39:36] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[22:39:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[22:39:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[22:39:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[22:39:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[22:39:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[22:39:36] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[22:39:36] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[22:39:36] [PASSED] VIC 96
[22:39:36] [PASSED] VIC 97
[22:39:36] [PASSED] VIC 101
[22:39:36] [PASSED] VIC 102
[22:39:36] [PASSED] VIC 106
[22:39:36] [PASSED] VIC 107
[22:39:36] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[22:39:36] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[22:39:36] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[22:39:36] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[22:39:36] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[22:39:36] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[22:39:36] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[22:39:36] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[22:39:36] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[22:39:36] [PASSED] Automatic
[22:39:36] [PASSED] Full
[22:39:36] [PASSED] Limited 16:235
[22:39:36] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[22:39:36] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[22:39:36] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[22:39:36] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[22:39:36] === drm_test_drm_hdmi_connector_get_output_format_name ====
[22:39:36] [PASSED] RGB
[22:39:36] [PASSED] YUV 4:2:0
[22:39:36] [PASSED] YUV 4:2:2
[22:39:36] [PASSED] YUV 4:4:4
[22:39:36] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[22:39:36] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[22:39:36] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[22:39:36] ============= drm_damage_helper (21 subtests) ==============
[22:39:36] [PASSED] drm_test_damage_iter_no_damage
[22:39:36] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[22:39:36] [PASSED] drm_test_damage_iter_no_damage_src_moved
[22:39:36] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[22:39:36] [PASSED] drm_test_damage_iter_no_damage_not_visible
[22:39:36] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[22:39:36] [PASSED] drm_test_damage_iter_no_damage_no_fb
[22:39:36] [PASSED] drm_test_damage_iter_simple_damage
[22:39:36] [PASSED] drm_test_damage_iter_single_damage
[22:39:36] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[22:39:36] [PASSED] drm_test_damage_iter_single_damage_outside_src
[22:39:36] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[22:39:36] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[22:39:36] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[22:39:36] [PASSED] drm_test_damage_iter_single_damage_src_moved
[22:39:36] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[22:39:36] [PASSED] drm_test_damage_iter_damage
[22:39:36] [PASSED] drm_test_damage_iter_damage_one_intersect
[22:39:36] [PASSED] drm_test_damage_iter_damage_one_outside
[22:39:36] [PASSED] drm_test_damage_iter_damage_src_moved
[22:39:36] [PASSED] drm_test_damage_iter_damage_not_visible
[22:39:36] ================ [PASSED] drm_damage_helper ================
[22:39:36] ============== drm_dp_mst_helper (3 subtests) ==============
[22:39:36] ============== drm_test_dp_mst_calc_pbn_mode ==============
[22:39:36] [PASSED] Clock 154000 BPP 30 DSC disabled
[22:39:36] [PASSED] Clock 234000 BPP 30 DSC disabled
[22:39:36] [PASSED] Clock 297000 BPP 24 DSC disabled
[22:39:36] [PASSED] Clock 332880 BPP 24 DSC enabled
[22:39:36] [PASSED] Clock 324540 BPP 24 DSC enabled
[22:39:36] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[22:39:36] ============== drm_test_dp_mst_calc_pbn_div ===============
[22:39:36] [PASSED] Link rate 2000000 lane count 4
[22:39:36] [PASSED] Link rate 2000000 lane count 2
[22:39:36] [PASSED] Link rate 2000000 lane count 1
[22:39:36] [PASSED] Link rate 1350000 lane count 4
[22:39:36] [PASSED] Link rate 1350000 lane count 2
[22:39:36] [PASSED] Link rate 1350000 lane count 1
[22:39:36] [PASSED] Link rate 1000000 lane count 4
[22:39:36] [PASSED] Link rate 1000000 lane count 2
[22:39:36] [PASSED] Link rate 1000000 lane count 1
[22:39:36] [PASSED] Link rate 810000 lane count 4
[22:39:36] [PASSED] Link rate 810000 lane count 2
[22:39:36] [PASSED] Link rate 810000 lane count 1
[22:39:36] [PASSED] Link rate 540000 lane count 4
[22:39:36] [PASSED] Link rate 540000 lane count 2
[22:39:36] [PASSED] Link rate 540000 lane count 1
[22:39:36] [PASSED] Link rate 270000 lane count 4
[22:39:36] [PASSED] Link rate 270000 lane count 2
[22:39:36] [PASSED] Link rate 270000 lane count 1
[22:39:36] [PASSED] Link rate 162000 lane count 4
[22:39:36] [PASSED] Link rate 162000 lane count 2
[22:39:36] [PASSED] Link rate 162000 lane count 1
[22:39:36] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[22:39:36] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[22:39:36] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[22:39:36] [PASSED] DP_POWER_UP_PHY with port number
[22:39:36] [PASSED] DP_POWER_DOWN_PHY with port number
[22:39:36] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[22:39:36] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[22:39:36] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[22:39:36] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[22:39:36] [PASSED] DP_QUERY_PAYLOAD with port number
[22:39:36] [PASSED] DP_QUERY_PAYLOAD with VCPI
[22:39:36] [PASSED] DP_REMOTE_DPCD_READ with port number
[22:39:36] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[22:39:36] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[22:39:36] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[22:39:36] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[22:39:36] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[22:39:36] [PASSED] DP_REMOTE_I2C_READ with port number
[22:39:36] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[22:39:36] [PASSED] DP_REMOTE_I2C_READ with transactions array
[22:39:36] [PASSED] DP_REMOTE_I2C_WRITE with port number
[22:39:36] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[22:39:36] [PASSED] DP_REMOTE_I2C_WRITE with data array
[22:39:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[22:39:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[22:39:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[22:39:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[22:39:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[22:39:36] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[22:39:36] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[22:39:36] ================ [PASSED] drm_dp_mst_helper ================
[22:39:36] ================== drm_exec (7 subtests) ===================
[22:39:36] [PASSED] sanitycheck
[22:39:36] [PASSED] test_lock
[22:39:36] [PASSED] test_lock_unlock
[22:39:36] [PASSED] test_duplicates
[22:39:36] [PASSED] test_prepare
[22:39:36] [PASSED] test_prepare_array
[22:39:36] [PASSED] test_multiple_loops
[22:39:36] ==================== [PASSED] drm_exec =====================
[22:39:36] =========== drm_format_helper_test (17 subtests) ===========
[22:39:36] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[22:39:36] [PASSED] single_pixel_source_buffer
[22:39:36] [PASSED] single_pixel_clip_rectangle
[22:39:36] [PASSED] well_known_colors
[22:39:36] [PASSED] destination_pitch
[22:39:36] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[22:39:36] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[22:39:36] [PASSED] single_pixel_source_buffer
[22:39:36] [PASSED] single_pixel_clip_rectangle
[22:39:36] [PASSED] well_known_colors
[22:39:36] [PASSED] destination_pitch
[22:39:36] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[22:39:36] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[22:39:36] [PASSED] single_pixel_source_buffer
[22:39:36] [PASSED] single_pixel_clip_rectangle
[22:39:36] [PASSED] well_known_colors
[22:39:36] [PASSED] destination_pitch
[22:39:36] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[22:39:36] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[22:39:36] [PASSED] single_pixel_source_buffer
[22:39:36] [PASSED] single_pixel_clip_rectangle
[22:39:36] [PASSED] well_known_colors
[22:39:36] [PASSED] destination_pitch
[22:39:36] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[22:39:36] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[22:39:36] [PASSED] single_pixel_source_buffer
[22:39:36] [PASSED] single_pixel_clip_rectangle
[22:39:36] [PASSED] well_known_colors
[22:39:36] [PASSED] destination_pitch
[22:39:36] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[22:39:36] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[22:39:36] [PASSED] single_pixel_source_buffer
[22:39:36] [PASSED] single_pixel_clip_rectangle
[22:39:36] [PASSED] well_known_colors
[22:39:36] [PASSED] destination_pitch
[22:39:36] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[22:39:36] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[22:39:36] [PASSED] single_pixel_source_buffer
[22:39:36] [PASSED] single_pixel_clip_rectangle
[22:39:36] [PASSED] well_known_colors
[22:39:36] [PASSED] destination_pitch
[22:39:36] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[22:39:36] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[22:39:36] [PASSED] single_pixel_source_buffer
[22:39:36] [PASSED] single_pixel_clip_rectangle
[22:39:36] [PASSED] well_known_colors
[22:39:36] [PASSED] destination_pitch
[22:39:36] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[22:39:36] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[22:39:36] [PASSED] single_pixel_source_buffer
[22:39:36] [PASSED] single_pixel_clip_rectangle
[22:39:36] [PASSED] well_known_colors
[22:39:36] [PASSED] destination_pitch
[22:39:36] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[22:39:36] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[22:39:36] [PASSED] single_pixel_source_buffer
[22:39:36] [PASSED] single_pixel_clip_rectangle
[22:39:36] [PASSED] well_known_colors
[22:39:36] [PASSED] destination_pitch
[22:39:36] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[22:39:36] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[22:39:36] [PASSED] single_pixel_source_buffer
[22:39:36] [PASSED] single_pixel_clip_rectangle
[22:39:36] [PASSED] well_known_colors
[22:39:36] [PASSED] destination_pitch
[22:39:36] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[22:39:36] ============== drm_test_fb_xrgb8888_to_mono ===============
[22:39:36] [PASSED] single_pixel_source_buffer
[22:39:36] [PASSED] single_pixel_clip_rectangle
[22:39:36] [PASSED] well_known_colors
[22:39:36] [PASSED] destination_pitch
[22:39:36] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[22:39:36] ==================== drm_test_fb_swab =====================
[22:39:36] [PASSED] single_pixel_source_buffer
[22:39:36] [PASSED] single_pixel_clip_rectangle
[22:39:36] [PASSED] well_known_colors
[22:39:36] [PASSED] destination_pitch
[22:39:36] ================ [PASSED] drm_test_fb_swab =================
[22:39:36] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[22:39:36] [PASSED] single_pixel_source_buffer
[22:39:36] [PASSED] single_pixel_clip_rectangle
[22:39:36] [PASSED] well_known_colors
[22:39:36] [PASSED] destination_pitch
[22:39:36] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[22:39:36] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[22:39:36] [PASSED] single_pixel_source_buffer
[22:39:36] [PASSED] single_pixel_clip_rectangle
[22:39:36] [PASSED] well_known_colors
[22:39:36] [PASSED] destination_pitch
[22:39:36] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[22:39:36] ================= drm_test_fb_clip_offset =================
[22:39:36] [PASSED] pass through
[22:39:36] [PASSED] horizontal offset
[22:39:36] [PASSED] vertical offset
[22:39:36] [PASSED] horizontal and vertical offset
[22:39:36] [PASSED] horizontal offset (custom pitch)
[22:39:36] [PASSED] vertical offset (custom pitch)
[22:39:36] [PASSED] horizontal and vertical offset (custom pitch)
[22:39:36] ============= [PASSED] drm_test_fb_clip_offset =============
[22:39:36] =================== drm_test_fb_memcpy ====================
[22:39:36] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[22:39:36] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[22:39:36] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[22:39:36] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[22:39:36] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[22:39:36] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[22:39:36] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[22:39:36] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[22:39:36] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[22:39:36] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[22:39:36] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[22:39:36] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[22:39:36] =============== [PASSED] drm_test_fb_memcpy ================
[22:39:36] ============= [PASSED] drm_format_helper_test ==============
[22:39:36] ================= drm_format (18 subtests) =================
[22:39:36] [PASSED] drm_test_format_block_width_invalid
[22:39:36] [PASSED] drm_test_format_block_width_one_plane
[22:39:36] [PASSED] drm_test_format_block_width_two_plane
[22:39:36] [PASSED] drm_test_format_block_width_three_plane
[22:39:36] [PASSED] drm_test_format_block_width_tiled
[22:39:36] [PASSED] drm_test_format_block_height_invalid
[22:39:36] [PASSED] drm_test_format_block_height_one_plane
[22:39:36] [PASSED] drm_test_format_block_height_two_plane
[22:39:36] [PASSED] drm_test_format_block_height_three_plane
[22:39:36] [PASSED] drm_test_format_block_height_tiled
[22:39:36] [PASSED] drm_test_format_min_pitch_invalid
[22:39:36] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[22:39:36] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[22:39:36] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[22:39:36] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[22:39:36] [PASSED] drm_test_format_min_pitch_two_plane
[22:39:36] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[22:39:36] [PASSED] drm_test_format_min_pitch_tiled
[22:39:36] =================== [PASSED] drm_format ====================
[22:39:36] ============== drm_framebuffer (10 subtests) ===============
[22:39:36] ========== drm_test_framebuffer_check_src_coords ==========
[22:39:36] [PASSED] Success: source fits into fb
[22:39:36] [PASSED] Fail: overflowing fb with x-axis coordinate
[22:39:36] [PASSED] Fail: overflowing fb with y-axis coordinate
[22:39:36] [PASSED] Fail: overflowing fb with source width
[22:39:36] [PASSED] Fail: overflowing fb with source height
[22:39:36] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[22:39:36] [PASSED] drm_test_framebuffer_cleanup
[22:39:36] =============== drm_test_framebuffer_create ===============
[22:39:36] [PASSED] ABGR8888 normal sizes
[22:39:36] [PASSED] ABGR8888 max sizes
[22:39:36] [PASSED] ABGR8888 pitch greater than min required
[22:39:36] [PASSED] ABGR8888 pitch less than min required
[22:39:36] [PASSED] ABGR8888 Invalid width
[22:39:36] [PASSED] ABGR8888 Invalid buffer handle
[22:39:36] [PASSED] No pixel format
[22:39:36] [PASSED] ABGR8888 Width 0
[22:39:36] [PASSED] ABGR8888 Height 0
[22:39:36] [PASSED] ABGR8888 Out of bound height * pitch combination
[22:39:36] [PASSED] ABGR8888 Large buffer offset
[22:39:36] [PASSED] ABGR8888 Buffer offset for inexistent plane
[22:39:36] [PASSED] ABGR8888 Invalid flag
[22:39:36] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[22:39:36] [PASSED] ABGR8888 Valid buffer modifier
[22:39:36] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[22:39:36] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[22:39:36] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[22:39:36] [PASSED] NV12 Normal sizes
[22:39:36] [PASSED] NV12 Max sizes
[22:39:36] [PASSED] NV12 Invalid pitch
[22:39:36] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[22:39:36] [PASSED] NV12 different modifier per-plane
[22:39:36] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[22:39:36] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[22:39:36] [PASSED] NV12 Modifier for inexistent plane
[22:39:36] [PASSED] NV12 Handle for inexistent plane
[22:39:36] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[22:39:36] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[22:39:36] [PASSED] YVU420 Normal sizes
[22:39:36] [PASSED] YVU420 Max sizes
[22:39:36] [PASSED] YVU420 Invalid pitch
[22:39:36] [PASSED] YVU420 Different pitches
[22:39:36] [PASSED] YVU420 Different buffer offsets/pitches
[22:39:36] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[22:39:36] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[22:39:36] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[22:39:36] [PASSED] YVU420 Valid modifier
[22:39:36] [PASSED] YVU420 Different modifiers per plane
[22:39:36] [PASSED] YVU420 Modifier for inexistent plane
[22:39:36] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[22:39:36] [PASSED] X0L2 Normal sizes
[22:39:36] [PASSED] X0L2 Max sizes
[22:39:36] [PASSED] X0L2 Invalid pitch
[22:39:36] [PASSED] X0L2 Pitch greater than minimum required
[22:39:36] [PASSED] X0L2 Handle for inexistent plane
[22:39:36] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[22:39:36] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[22:39:36] [PASSED] X0L2 Valid modifier
[22:39:36] [PASSED] X0L2 Modifier for inexistent plane
[22:39:36] =========== [PASSED] drm_test_framebuffer_create ===========
[22:39:36] [PASSED] drm_test_framebuffer_free
[22:39:36] [PASSED] drm_test_framebuffer_init
[22:39:36] [PASSED] drm_test_framebuffer_init_bad_format
[22:39:36] [PASSED] drm_test_framebuffer_init_dev_mismatch
[22:39:36] [PASSED] drm_test_framebuffer_lookup
[22:39:36] [PASSED] drm_test_framebuffer_lookup_inexistent
[22:39:36] [PASSED] drm_test_framebuffer_modifiers_not_supported
[22:39:36] ================= [PASSED] drm_framebuffer =================
[22:39:36] ================ drm_gem_shmem (8 subtests) ================
[22:39:36] [PASSED] drm_gem_shmem_test_obj_create
[22:39:36] [PASSED] drm_gem_shmem_test_obj_create_private
[22:39:36] [PASSED] drm_gem_shmem_test_pin_pages
[22:39:36] [PASSED] drm_gem_shmem_test_vmap
[22:39:36] [PASSED] drm_gem_shmem_test_get_sg_table
[22:39:36] [PASSED] drm_gem_shmem_test_get_pages_sgt
[22:39:36] [PASSED] drm_gem_shmem_test_madvise
[22:39:36] [PASSED] drm_gem_shmem_test_purge
[22:39:36] ================== [PASSED] drm_gem_shmem ==================
[22:39:36] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[22:39:36] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[22:39:36] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[22:39:36] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[22:39:36] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[22:39:36] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[22:39:36] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[22:39:36] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[22:39:36] [PASSED] Automatic
[22:39:36] [PASSED] Full
[22:39:36] [PASSED] Limited 16:235
[22:39:36] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[22:39:36] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[22:39:36] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[22:39:36] [PASSED] drm_test_check_disable_connector
[22:39:36] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[22:39:36] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[22:39:36] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[22:39:36] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[22:39:36] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[22:39:36] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[22:39:36] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[22:39:36] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[22:39:36] [PASSED] drm_test_check_output_bpc_dvi
[22:39:36] [PASSED] drm_test_check_output_bpc_format_vic_1
[22:39:36] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[22:39:36] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[22:39:36] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[22:39:36] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[22:39:36] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[22:39:36] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[22:39:36] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[22:39:36] ============ drm_test_check_hdmi_color_format =============
[22:39:36] [PASSED] AUTO -> RGB
[22:39:36] [PASSED] YCBCR422 -> YUV422
[22:39:36] [PASSED] YCBCR420 -> YUV420
[22:39:36] [PASSED] YCBCR444 -> YUV444
[22:39:36] [PASSED] RGB -> RGB
[22:39:36] ======== [PASSED] drm_test_check_hdmi_color_format =========
[22:39:36] ======== drm_test_check_hdmi_color_format_420_only ========
[22:39:36] [PASSED] RGB should fail
[22:39:36] [PASSED] YUV444 should fail
[22:39:36] [PASSED] YUV422 should fail
[22:39:36] [PASSED] YUV420 should work
[22:39:36] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[22:39:36] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[22:39:36] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[22:39:36] [PASSED] drm_test_check_broadcast_rgb_value
[22:39:36] [PASSED] drm_test_check_bpc_8_value
[22:39:36] [PASSED] drm_test_check_bpc_10_value
[22:39:36] [PASSED] drm_test_check_bpc_12_value
[22:39:36] [PASSED] drm_test_check_format_value
[22:39:36] [PASSED] drm_test_check_tmds_char_value
[22:39:36] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[22:39:36] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[22:39:36] [PASSED] drm_test_check_mode_valid
[22:39:36] [PASSED] drm_test_check_mode_valid_reject
[22:39:36] [PASSED] drm_test_check_mode_valid_reject_rate
[22:39:36] [PASSED] drm_test_check_mode_valid_reject_max_clock
[22:39:36] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[22:39:36] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[22:39:36] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[22:39:36] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[22:39:36] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[22:39:36] [PASSED] drm_test_check_infoframes
[22:39:36] [PASSED] drm_test_check_reject_avi_infoframe
[22:39:36] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[22:39:36] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[22:39:36] [PASSED] drm_test_check_reject_audio_infoframe
[22:39:36] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[22:39:36] ================= drm_managed (2 subtests) =================
[22:39:36] [PASSED] drm_test_managed_release_action
[22:39:36] [PASSED] drm_test_managed_run_action
[22:39:36] =================== [PASSED] drm_managed ===================
[22:39:36] =================== drm_mm (6 subtests) ====================
[22:39:36] [PASSED] drm_test_mm_init
[22:39:36] [PASSED] drm_test_mm_debug
[22:39:36] [PASSED] drm_test_mm_align32
[22:39:36] [PASSED] drm_test_mm_align64
[22:39:36] [PASSED] drm_test_mm_lowest
[22:39:36] [PASSED] drm_test_mm_highest
[22:39:36] ===================== [PASSED] drm_mm ======================
[22:39:36] ============= drm_modes_analog_tv (5 subtests) =============
[22:39:36] [PASSED] drm_test_modes_analog_tv_mono_576i
[22:39:36] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[22:39:36] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[22:39:36] [PASSED] drm_test_modes_analog_tv_pal_576i
[22:39:36] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[22:39:36] =============== [PASSED] drm_modes_analog_tv ===============
[22:39:36] ============== drm_panic_helper (3 subtests) ===============
[22:39:36] ============= drm_test_panic_screen_user_map ==============
[22:39:36] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[22:39:36] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[22:39:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[22:39:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[22:39:36] ========= [PASSED] drm_test_panic_screen_user_map ==========
[22:39:36] ============= drm_test_panic_screen_user_page =============
[22:39:36] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[22:39:36] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[22:39:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[22:39:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[22:39:36] ========= [PASSED] drm_test_panic_screen_user_page =========
[22:39:36] ========== drm_test_panic_screen_user_set_pixel ===========
[22:39:36] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[22:39:36] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[22:39:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[22:39:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[22:39:36] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[22:39:36] ====== [PASSED] drm_test_panic_screen_user_set_pixel =======
[22:39:36] ================ [PASSED] drm_panic_helper =================
[22:39:36] ============== drm_plane_helper (2 subtests) ===============
[22:39:36] =============== drm_test_check_plane_state ================
[22:39:36] [PASSED] clipping_simple
[22:39:36] [PASSED] clipping_rotate_reflect
[22:39:36] [PASSED] positioning_simple
[22:39:36] [PASSED] upscaling
[22:39:36] [PASSED] downscaling
[22:39:36] [PASSED] rounding1
[22:39:36] [PASSED] rounding2
[22:39:36] [PASSED] rounding3
[22:39:36] [PASSED] rounding4
[22:39:36] =========== [PASSED] drm_test_check_plane_state ============
[22:39:36] =========== drm_test_check_invalid_plane_state ============
[22:39:36] [PASSED] positioning_invalid
[22:39:36] [PASSED] upscaling_invalid
[22:39:36] [PASSED] downscaling_invalid
[22:39:36] ======= [PASSED] drm_test_check_invalid_plane_state ========
[22:39:36] ================ [PASSED] drm_plane_helper =================
[22:39:36] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[22:39:36] ====== drm_test_connector_helper_tv_get_modes_check =======
[22:39:36] [PASSED] None
[22:39:36] [PASSED] PAL
[22:39:36] [PASSED] NTSC
[22:39:36] [PASSED] Both, NTSC Default
[22:39:36] [PASSED] Both, PAL Default
[22:39:36] [PASSED] Both, NTSC Default, with PAL on command-line
[22:39:36] [PASSED] Both, PAL Default, with NTSC on command-line
[22:39:36] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[22:39:36] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[22:39:36] ================== drm_rect (9 subtests) ===================
[22:39:36] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[22:39:36] [PASSED] drm_test_rect_clip_scaled_not_clipped
[22:39:36] [PASSED] drm_test_rect_clip_scaled_clipped
[22:39:36] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[22:39:36] ================= drm_test_rect_intersect =================
[22:39:36] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[22:39:36] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[22:39:36] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[22:39:36] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[22:39:36] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[22:39:36] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[22:39:36] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[22:39:36] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[22:39:36] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[22:39:36] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[22:39:36] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[22:39:36] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[22:39:36] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[22:39:36] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[22:39:36] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[22:39:36] ============= [PASSED] drm_test_rect_intersect =============
[22:39:36] ================ drm_test_rect_calc_hscale ================
[22:39:36] [PASSED] normal use
[22:39:36] [PASSED] out of max range
[22:39:36] [PASSED] out of min range
[22:39:36] [PASSED] zero dst
[22:39:36] [PASSED] negative src
[22:39:36] [PASSED] negative dst
[22:39:36] ============ [PASSED] drm_test_rect_calc_hscale ============
[22:39:36] ================ drm_test_rect_calc_vscale ================
[22:39:36] [PASSED] normal use
[22:39:36] [PASSED] out of max range
[22:39:36] [PASSED] out of min range
[22:39:36] [PASSED] zero dst
[22:39:36] [PASSED] negative src
[22:39:36] [PASSED] negative dst
[22:39:36] ============ [PASSED] drm_test_rect_calc_vscale ============
[22:39:36] ================== drm_test_rect_rotate ===================
[22:39:36] [PASSED] reflect-x
[22:39:36] [PASSED] reflect-y
[22:39:36] [PASSED] rotate-0
[22:39:36] [PASSED] rotate-90
[22:39:36] [PASSED] rotate-180
[22:39:36] [PASSED] rotate-270
[22:39:36] ============== [PASSED] drm_test_rect_rotate ===============
[22:39:36] ================ drm_test_rect_rotate_inv =================
[22:39:36] [PASSED] reflect-x
[22:39:36] [PASSED] reflect-y
[22:39:36] [PASSED] rotate-0
[22:39:36] [PASSED] rotate-90
[22:39:36] [PASSED] rotate-180
[22:39:36] [PASSED] rotate-270
[22:39:36] ============ [PASSED] drm_test_rect_rotate_inv =============
[22:39:36] ==================== [PASSED] drm_rect =====================
[22:39:36] ============ drm_sysfb_modeset_test (1 subtest) ============
[22:39:36] ============ drm_test_sysfb_build_fourcc_list =============
[22:39:36] [PASSED] no native formats
[22:39:36] [PASSED] XRGB8888 as native format
[22:39:36] [PASSED] remove duplicates
[22:39:36] [PASSED] convert alpha formats
[22:39:36] [PASSED] random formats
[22:39:36] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[22:39:36] ============= [PASSED] drm_sysfb_modeset_test ==============
[22:39:36] ================== drm_fixp (2 subtests) ===================
[22:39:36] [PASSED] drm_test_int2fixp
[22:39:36] [PASSED] drm_test_sm2fixp
[22:39:36] ==================== [PASSED] drm_fixp =====================
[22:39:36] ============================================================
[22:39:36] Testing complete. Ran 667 tests: passed: 667
[22:39:36] Elapsed time: 27.387s total, 1.801s configuring, 25.165s building, 0.414s 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
[22:39:36] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[22:39:38] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[22:39:48] Starting KUnit Kernel (1/1)...
[22:39:48] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[22:39:48] ================= ttm_device (5 subtests) ==================
[22:39:48] [PASSED] ttm_device_init_basic
[22:39:48] [PASSED] ttm_device_init_multiple
[22:39:48] [PASSED] ttm_device_fini_basic
[22:39:48] [PASSED] ttm_device_init_no_vma_man
[22:39:48] ================== ttm_device_init_pools ==================
[22:39:48] [PASSED] No DMA allocations, no DMA32 required
[22:39:48] [PASSED] DMA allocations, DMA32 required
[22:39:48] [PASSED] No DMA allocations, DMA32 required
[22:39:48] [PASSED] DMA allocations, no DMA32 required
[22:39:48] ============== [PASSED] ttm_device_init_pools ==============
[22:39:48] =================== [PASSED] ttm_device ====================
[22:39:48] ================== ttm_pool (8 subtests) ===================
[22:39:48] ================== ttm_pool_alloc_basic ===================
[22:39:48] [PASSED] One page
[22:39:48] [PASSED] More than one page
[22:39:48] [PASSED] Above the allocation limit
[22:39:48] [PASSED] One page, with coherent DMA mappings enabled
[22:39:48] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[22:39:48] ============== [PASSED] ttm_pool_alloc_basic ===============
[22:39:48] ============== ttm_pool_alloc_basic_dma_addr ==============
[22:39:48] [PASSED] One page
[22:39:48] [PASSED] More than one page
[22:39:48] [PASSED] Above the allocation limit
[22:39:48] [PASSED] One page, with coherent DMA mappings enabled
[22:39:48] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[22:39:48] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[22:39:48] [PASSED] ttm_pool_alloc_order_caching_match
[22:39:48] [PASSED] ttm_pool_alloc_caching_mismatch
[22:39:48] [PASSED] ttm_pool_alloc_order_mismatch
[22:39:48] [PASSED] ttm_pool_free_dma_alloc
[22:39:48] [PASSED] ttm_pool_free_no_dma_alloc
[22:39:48] [PASSED] ttm_pool_fini_basic
[22:39:48] ==================== [PASSED] ttm_pool =====================
[22:39:48] ================ ttm_resource (8 subtests) =================
[22:39:48] ================= ttm_resource_init_basic =================
[22:39:48] [PASSED] Init resource in TTM_PL_SYSTEM
[22:39:48] [PASSED] Init resource in TTM_PL_VRAM
[22:39:48] [PASSED] Init resource in a private placement
[22:39:48] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[22:39:48] ============= [PASSED] ttm_resource_init_basic =============
[22:39:48] [PASSED] ttm_resource_init_pinned
[22:39:48] [PASSED] ttm_resource_fini_basic
[22:39:48] [PASSED] ttm_resource_manager_init_basic
[22:39:48] [PASSED] ttm_resource_manager_usage_basic
[22:39:48] [PASSED] ttm_resource_manager_set_used_basic
[22:39:48] [PASSED] ttm_sys_man_alloc_basic
[22:39:48] [PASSED] ttm_sys_man_free_basic
[22:39:48] ================== [PASSED] ttm_resource ===================
[22:39:48] =================== ttm_tt (15 subtests) ===================
[22:39:48] ==================== ttm_tt_init_basic ====================
[22:39:48] [PASSED] Page-aligned size
[22:39:48] [PASSED] Extra pages requested
[22:39:48] ================ [PASSED] ttm_tt_init_basic ================
[22:39:48] [PASSED] ttm_tt_init_misaligned
[22:39:48] [PASSED] ttm_tt_fini_basic
[22:39:48] [PASSED] ttm_tt_fini_sg
[22:39:48] [PASSED] ttm_tt_fini_shmem
[22:39:48] [PASSED] ttm_tt_create_basic
[22:39:48] [PASSED] ttm_tt_create_invalid_bo_type
[22:39:48] [PASSED] ttm_tt_create_ttm_exists
[22:39:48] [PASSED] ttm_tt_create_failed
[22:39:48] [PASSED] ttm_tt_destroy_basic
[22:39:48] [PASSED] ttm_tt_populate_null_ttm
[22:39:48] [PASSED] ttm_tt_populate_populated_ttm
[22:39:48] [PASSED] ttm_tt_unpopulate_basic
[22:39:48] [PASSED] ttm_tt_unpopulate_empty_ttm
[22:39:48] [PASSED] ttm_tt_swapin_basic
[22:39:48] ===================== [PASSED] ttm_tt ======================
[22:39:48] =================== ttm_bo (14 subtests) ===================
[22:39:48] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[22:39:48] [PASSED] Cannot be interrupted and sleeps
[22:39:48] [PASSED] Cannot be interrupted, locks straight away
[22:39:48] [PASSED] Can be interrupted, sleeps
[22:39:48] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[22:39:48] [PASSED] ttm_bo_reserve_locked_no_sleep
[22:39:48] [PASSED] ttm_bo_reserve_no_wait_ticket
[22:39:49] [PASSED] ttm_bo_reserve_double_resv
[22:39:49] [PASSED] ttm_bo_reserve_interrupted
[22:39:49] [PASSED] ttm_bo_reserve_deadlock
[22:39:49] [PASSED] ttm_bo_unreserve_basic
[22:39:49] [PASSED] ttm_bo_unreserve_pinned
[22:39:49] [PASSED] ttm_bo_unreserve_bulk
[22:39:49] [PASSED] ttm_bo_fini_basic
[22:39:49] [PASSED] ttm_bo_fini_shared_resv
[22:39:49] [PASSED] ttm_bo_pin_basic
[22:39:49] [PASSED] ttm_bo_pin_unpin_resource
[22:39:49] [PASSED] ttm_bo_multiple_pin_one_unpin
[22:39:49] ===================== [PASSED] ttm_bo ======================
[22:39:49] ============== ttm_bo_validate (22 subtests) ===============
[22:39:49] ============== ttm_bo_init_reserved_sys_man ===============
[22:39:49] [PASSED] Buffer object for userspace
[22:39:49] [PASSED] Kernel buffer object
[22:39:49] [PASSED] Shared buffer object
[22:39:49] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[22:39:49] ============== ttm_bo_init_reserved_mock_man ==============
[22:39:49] [PASSED] Buffer object for userspace
[22:39:49] [PASSED] Kernel buffer object
[22:39:49] [PASSED] Shared buffer object
[22:39:49] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[22:39:49] [PASSED] ttm_bo_init_reserved_resv
[22:39:49] ================== ttm_bo_validate_basic ==================
[22:39:49] [PASSED] Buffer object for userspace
[22:39:49] [PASSED] Kernel buffer object
[22:39:49] [PASSED] Shared buffer object
[22:39:49] ============== [PASSED] ttm_bo_validate_basic ==============
[22:39:49] [PASSED] ttm_bo_validate_invalid_placement
[22:39:49] ============= ttm_bo_validate_same_placement ==============
[22:39:49] [PASSED] System manager
[22:39:49] [PASSED] VRAM manager
[22:39:49] ========= [PASSED] ttm_bo_validate_same_placement ==========
[22:39:49] [PASSED] ttm_bo_validate_failed_alloc
[22:39:49] [PASSED] ttm_bo_validate_pinned
[22:39:49] [PASSED] ttm_bo_validate_busy_placement
[22:39:49] ================ ttm_bo_validate_multihop =================
[22:39:49] [PASSED] Buffer object for userspace
[22:39:49] [PASSED] Kernel buffer object
[22:39:49] [PASSED] Shared buffer object
[22:39:49] ============ [PASSED] ttm_bo_validate_multihop =============
[22:39:49] ========== ttm_bo_validate_no_placement_signaled ==========
[22:39:49] [PASSED] Buffer object in system domain, no page vector
[22:39:49] [PASSED] Buffer object in system domain with an existing page vector
[22:39:49] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[22:39:49] ======== ttm_bo_validate_no_placement_not_signaled ========
[22:39:49] [PASSED] Buffer object for userspace
[22:39:49] [PASSED] Kernel buffer object
[22:39:49] [PASSED] Shared buffer object
[22:39:49] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[22:39:49] [PASSED] ttm_bo_validate_move_fence_signaled
[22:39:49] ========= ttm_bo_validate_move_fence_not_signaled =========
[22:39:49] [PASSED] Waits for GPU
[22:39:49] [PASSED] Tries to lock straight away
[22:39:49] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[22:39:49] [PASSED] ttm_bo_validate_swapout
[22:39:49] [PASSED] ttm_bo_validate_happy_evict
[22:39:49] [PASSED] ttm_bo_validate_all_pinned_evict
[22:39:49] [PASSED] ttm_bo_validate_allowed_only_evict
[22:39:49] [PASSED] ttm_bo_validate_deleted_evict
[22:39:49] [PASSED] ttm_bo_validate_busy_domain_evict
[22:39:49] [PASSED] ttm_bo_validate_evict_gutting
[22:39:49] [PASSED] ttm_bo_validate_recrusive_evict
[22:39:49] ================= [PASSED] ttm_bo_validate =================
[22:39:49] ============================================================
[22:39:49] Testing complete. Ran 102 tests: passed: 102
[22:39:49] Elapsed time: 12.252s total, 1.856s configuring, 10.180s building, 0.183s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/dma-buf/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[22:39:49] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[22:39:51] 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
[22:39:59] Starting KUnit Kernel (1/1)...
[22:39:59] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[22:39:59] =============== dma-buf-fence (12 subtests) ================
[22:39:59] [PASSED] test_sanitycheck
[22:39:59] [PASSED] test_signaling
[22:39:59] [PASSED] test_add_callback
[22:39:59] [PASSED] test_late_add_callback
[22:39:59] [PASSED] test_rm_callback
[22:39:59] [PASSED] test_late_rm_callback
[22:39:59] [PASSED] test_status
[22:39:59] [PASSED] test_error
[22:39:59] [PASSED] test_wait
[22:39:59] [PASSED] test_wait_timeout
[22:39:59] [PASSED] test_stub
[22:39:59] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[22:39:59] ================== [PASSED] dma-buf-fence ==================
[22:39:59] ============ dma-buf-fence-chain (11 subtests) =============
[22:39:59] [PASSED] test_sanitycheck
[22:39:59] [PASSED] test_find_seqno
[22:39:59] [PASSED] test_find_signaled
[22:39:59] [PASSED] test_find_out_of_order
[22:40:04] [PASSED] test_find_gap
[22:40:04] [PASSED] test_find_race
[22:40:04] [PASSED] test_signal_forward
[22:40:04] [PASSED] test_signal_backward
[22:40:04] [PASSED] test_wait_forward
[22:40:04] [PASSED] test_wait_backward
[22:40:04] [PASSED] test_wait_random
[22:40:04] =============== [PASSED] dma-buf-fence-chain ===============
[22:40:04] ============ dma-buf-fence-unwrap (11 subtests) ============
[22:40:04] [PASSED] test_sanitycheck
[22:40:04] [PASSED] test_unwrap_array
[22:40:04] [PASSED] test_unwrap_chain
[22:40:04] [PASSED] test_unwrap_chain_array
[22:40:04] [PASSED] test_unwrap_merge
[22:40:04] [PASSED] test_unwrap_merge_duplicate
[22:40:04] [PASSED] test_unwrap_merge_seqno
[22:40:04] [PASSED] test_unwrap_merge_order
[22:40:04] [PASSED] test_unwrap_merge_complex
[22:40:04] [PASSED] test_unwrap_merge_complex_seqno
[22:40:04] [PASSED] test_dedup_empty
[22:40:04] ============== [PASSED] dma-buf-fence-unwrap ===============
[22:40:04] ================ dma-buf-resv (5 subtests) =================
[22:40:04] [PASSED] test_sanitycheck
[22:40:04] ===================== test_signaling ======================
[22:40:04] [PASSED] kernel
[22:40:04] [PASSED] write
[22:40:04] [PASSED] read
[22:40:04] [PASSED] bookkeep
[22:40:04] ================= [PASSED] test_signaling ==================
[22:40:04] ====================== test_for_each ======================
[22:40:04] [PASSED] kernel
[22:40:04] [PASSED] write
[22:40:04] [PASSED] read
[22:40:04] [PASSED] bookkeep
[22:40:04] ================== [PASSED] test_for_each ==================
[22:40:04] ================= test_for_each_unlocked ==================
[22:40:04] [PASSED] kernel
[22:40:04] [PASSED] write
[22:40:04] [PASSED] read
[22:40:04] [PASSED] bookkeep
[22:40:04] ============= [PASSED] test_for_each_unlocked ==============
[22:40:04] ===================== test_get_fences =====================
[22:40:04] [PASSED] kernel
[22:40:04] [PASSED] write
[22:40:04] [PASSED] read
[22:40:04] [PASSED] bookkeep
[22:40:04] ================= [PASSED] test_get_fences =================
[22:40:04] ================== [PASSED] dma-buf-resv ===================
[22:40:04] ============================================================
[22:40:04] Testing complete. Ran 51 tests: passed: 50, skipped: 1
[22:40:04] Elapsed time: 15.717s total, 1.830s configuring, 8.616s building, 5.258s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 9+ messages in thread* ✓ Xe.CI.BAT: success for Cleanup OA stream on PCI unbind/remove
2026-10-30 22:30 [PATCH v2 0/3] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
` (4 preceding siblings ...)
2026-10-30 22:40 ` ✓ CI.KUnit: success for " Patchwork
@ 2026-10-30 23:14 ` Patchwork
5 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2026-10-30 23:14 UTC (permalink / raw)
To: Umesh Nerlige Ramappa; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 1425 bytes --]
== Series Details ==
Series: Cleanup OA stream on PCI unbind/remove
URL : https://patchwork.freedesktop.org/series/177300/
State : success
== Summary ==
CI Bug Log - changes from xe-6036-238c1e3e984e2b7f948cb24165314b8d719a23d6_BAT -> xe-pw-177300v1_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (15 -> 15)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in xe-pw-177300v1_BAT that come from known issues:
### IGT changes ###
#### Possible fixes ####
* igt@core_hotunplug@unbind-rebind:
- bat-bmg-2: [ABORT][1] ([Intel XE#9463]) -> [PASS][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6036-238c1e3e984e2b7f948cb24165314b8d719a23d6/bat-bmg-2/igt@core_hotunplug@unbind-rebind.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v1/bat-bmg-2/igt@core_hotunplug@unbind-rebind.html
[Intel XE#9463]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9463
Build changes
-------------
* Linux: xe-6036-238c1e3e984e2b7f948cb24165314b8d719a23d6 -> xe-pw-177300v1
IGT_9173: 9173
xe-6036-238c1e3e984e2b7f948cb24165314b8d719a23d6: 238c1e3e984e2b7f948cb24165314b8d719a23d6
xe-pw-177300v1: 177300v1
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v1/index.html
[-- Attachment #2: Type: text/html, Size: 1990 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread