* [PATCH v3 0/3] Cleanup OA stream on PCI unbind/remove
@ 2026-10-30 23:38 Umesh Nerlige Ramappa
2026-10-30 23:38 ` [PATCH v3 1/3] drm/xe/oa: Use the drm device address_space for the OA stream fd Umesh Nerlige Ramappa
` (4 more replies)
0 siblings, 5 replies; 8+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-10-30 23:38 UTC (permalink / raw)
To: intel-xe, shekhar.chauhan, Matthew Brost; +Cc: riana.tauro, harish.chegondi
When an OA stream FD is open, removing the PCI device due to PCIe errors
or doing an unbind causes a NPD and system reboots. While OA registers a
fini handler with devm, the handler does not take into account active OA
connections.
Add code to quiesce OA connection on PCI remove/unbind.
v2: Sashiko Comments
v3: Circular lockdep fix
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 | 293 ++++++++++++++++++++++++++++---
drivers/gpu/drm/xe/xe_oa_types.h | 12 ++
4 files changed, 308 insertions(+), 31 deletions(-)
--
2.55.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 1/3] drm/xe/oa: Use the drm device address_space for the OA stream fd
2026-10-30 23:38 [PATCH v3 0/3] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
@ 2026-10-30 23:38 ` Umesh Nerlige Ramappa
2026-10-30 23:38 ` [PATCH v3 2/3] drm/xe/oa: Gate OA buffer mmap faults Umesh Nerlige Ramappa
` (3 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-10-30 23:38 UTC (permalink / raw)
To: intel-xe, shekhar.chauhan, Matthew Brost; +Cc: riana.tauro, 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] 8+ messages in thread
* [PATCH v3 2/3] drm/xe/oa: Gate OA buffer mmap faults
2026-10-30 23:38 [PATCH v3 0/3] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
2026-10-30 23:38 ` [PATCH v3 1/3] drm/xe/oa: Use the drm device address_space for the OA stream fd Umesh Nerlige Ramappa
@ 2026-10-30 23:38 ` Umesh Nerlige Ramappa
2026-10-30 23:58 ` sashiko-bot
2026-10-30 23:38 ` [PATCH v3 3/3] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset Umesh Nerlige Ramappa
` (2 subsequent siblings)
4 siblings, 1 reply; 8+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-10-30 23:38 UTC (permalink / raw)
To: intel-xe, shekhar.chauhan, Matthew Brost; +Cc: riana.tauro, 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] 8+ messages in thread
* [PATCH v3 3/3] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset
2026-10-30 23:38 [PATCH v3 0/3] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
2026-10-30 23:38 ` [PATCH v3 1/3] drm/xe/oa: Use the drm device address_space for the OA stream fd Umesh Nerlige Ramappa
2026-10-30 23:38 ` [PATCH v3 2/3] drm/xe/oa: Gate OA buffer mmap faults Umesh Nerlige Ramappa
@ 2026-10-30 23:38 ` Umesh Nerlige Ramappa
2026-10-31 0:04 ` sashiko-bot
2026-10-30 23:55 ` ✓ CI.KUnit: success for Cleanup OA stream on PCI unbind/remove (rev2) Patchwork
2026-10-31 0:33 ` ✓ Xe.CI.BAT: " Patchwork
4 siblings, 1 reply; 8+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-10-30 23:38 UTC (permalink / raw)
To: intel-xe, shekhar.chauhan, Matthew Brost; +Cc: riana.tauro, harish.chegondi
An OA stream fd can outlive the device: after a PCI slot reset or after
unbind. The poll hrtimer and userspace calls on the fd could then access
MMIO and other device-bound objects that were released on remove,
causing a NULL pointer dereference, and xe_oa_release() would tear down
against freed objects.
Call xe_oa_quiesce() from xe_oa_fini() to cleanup the stream resources.
Only the stream struct stays allocated, with stream_lock and poll_wq
valid, until the fd is closed or the process owning the fd exits.
Once dead, OA interfaces return -ENODEV, poll reports EPOLLERR |
EPOLLHUP, and xe_oa_release() frees the stream struct and drops the drm
device reference.
Note:
- Introduce a dedicated mmap_mutex to handle an AB-BA deadlock between
mmap_lock and stream_lock.
mmap path: mmap_lock -> stream_lock
read path: stream_lock -> mmap_lock (if copy_to_user faults)
- 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 cleanup HW state as
well in this case. In the wedged case, HW state cleanup is not
attempted.
- 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(). Use per-GT quiesced flag to take care
of that.
Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
---
v2: Include Sashiko's comments
v3: Fix circular lockdep issue due to scope of stream->mmap_mutex
---
drivers/gpu/drm/xe/xe_oa.c | 229 +++++++++++++++++++++++++++----
drivers/gpu/drm/xe/xe_oa_types.h | 9 ++
2 files changed, 208 insertions(+), 30 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index e2198fdd2a09..b30ea99c49ce 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,30 @@ 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() marking the stream dead before it frees the OA
+ * buffer. Can't use stream_lock here, it is held across user copies which fault on
+ * mmap_lock, held by the caller. A vma that isn't yet linked into the address_space
+ * when quiesce zaps the mappings is still safe: it holds a GEM ref on the BO and
+ * xe_oa_buffer_fault() refuses faults once the stream is dead.
+ */
+ 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 +1963,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 +1990,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 +2688,97 @@ 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);
+ if (stream->enabled && hw_accessible)
+ xe_oa_disable_locked(stream);
+
+ stream->enabled = false;
+
+ /*
+ * Once dead is set under mmap_mutex, no new xe_oa_mmap() can reference the OA buffer.
+ * Don't hold mmap_mutex any longer than that: it nests under mmap_lock, and the HW
+ * teardown below submits batches, taking vm->lock and the vm resv.
+ */
+ mutex_lock(&stream->mmap_mutex);
+ spin_lock_irqsave(&stream->oa_buffer.ptr_lock, flags);
+ WRITE_ONCE(stream->dead, true);
+ spin_unlock_irqrestore(&stream->oa_buffer.ptr_lock, flags);
+ mutex_unlock(&stream->mmap_mutex);
+
+ 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->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 +3090,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] 8+ messages in thread
* ✓ CI.KUnit: success for Cleanup OA stream on PCI unbind/remove (rev2)
2026-10-30 23:38 [PATCH v3 0/3] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
` (2 preceding siblings ...)
2026-10-30 23:38 ` [PATCH v3 3/3] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset Umesh Nerlige Ramappa
@ 2026-10-30 23:55 ` Patchwork
2026-10-31 0:33 ` ✓ Xe.CI.BAT: " Patchwork
4 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2026-10-30 23:55 UTC (permalink / raw)
To: Umesh Nerlige Ramappa; +Cc: intel-xe
== Series Details ==
Series: Cleanup OA stream on PCI unbind/remove (rev2)
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
[23:53:44] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[23:53:48] 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
[23:54:09] Starting KUnit Kernel (1/1)...
[23:54:09] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[23:54:09] ================= gpu_buddy (14 subtests) ==================
[23:54:09] [PASSED] gpu_test_buddy_alloc_limit
[23:54:09] [PASSED] gpu_test_buddy_alloc_optimistic
[23:54:09] [PASSED] gpu_test_buddy_alloc_pessimistic
[23:54:09] [PASSED] gpu_test_buddy_alloc_pathological
[23:54:09] [PASSED] gpu_test_buddy_alloc_contiguous
[23:54:09] [PASSED] gpu_test_buddy_alloc_clear
[23:54:09] [PASSED] gpu_test_buddy_alloc_range
[23:54:09] [PASSED] gpu_test_buddy_alloc_range_bias
[23:54:10] [PASSED] gpu_test_buddy_fragmentation_performance
[23:54:10] [PASSED] gpu_test_buddy_dirty_tracker_performance
[23:54:10] [PASSED] gpu_test_buddy_alloc_exceeds_max_order
[23:54:10] [PASSED] gpu_test_buddy_offset_aligned_allocation
[23:54:10] [PASSED] gpu_test_buddy_subtree_offset_alignment_stress
[23:54:10] [PASSED] gpu_test_buddy_addr_to_block
[23:54:10] ==================== [PASSED] gpu_buddy ====================
[23:54:10] ============================================================
[23:54:10] Testing complete. Ran 14 tests: passed: 14
[23:54:11] Elapsed time: 26.591s total, 4.526s configuring, 20.147s building, 1.852s 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
[23:54:11] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[23:54:12] 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
[23:54:51] Starting KUnit Kernel (1/1)...
[23:54:51] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[23:54:51] ================== guc_buf (11 subtests) ===================
[23:54:51] [PASSED] test_smallest
[23:54:51] [PASSED] test_largest
[23:54:51] [PASSED] test_granular
[23:54:51] [PASSED] test_unique
[23:54:51] [PASSED] test_overlap
[23:54:51] [PASSED] test_reusable
[23:54:51] [PASSED] test_too_big
[23:54:51] [PASSED] test_flush
[23:54:51] [PASSED] test_lookup
[23:54:51] [PASSED] test_data
[23:54:51] [PASSED] test_class
[23:54:51] ===================== [PASSED] guc_buf =====================
[23:54:51] =================== guc_dbm (7 subtests) ===================
[23:54:51] [PASSED] test_empty
[23:54:51] [PASSED] test_default
[23:54:51] ======================== test_size ========================
[23:54:51] [PASSED] 4
[23:54:51] [PASSED] 8
[23:54:51] [PASSED] 32
[23:54:51] [PASSED] 256
[23:54:51] ==================== [PASSED] test_size ====================
[23:54:51] ======================= test_reuse ========================
[23:54:51] [PASSED] 4
[23:54:51] [PASSED] 8
[23:54:51] [PASSED] 32
[23:54:51] [PASSED] 256
[23:54:51] =================== [PASSED] test_reuse ====================
[23:54:51] =================== test_range_overlap ====================
[23:54:51] [PASSED] 4
[23:54:51] [PASSED] 8
[23:54:51] [PASSED] 32
[23:54:51] [PASSED] 256
[23:54:51] =============== [PASSED] test_range_overlap ================
[23:54:51] =================== test_range_compact ====================
[23:54:51] [PASSED] 4
[23:54:51] [PASSED] 8
[23:54:51] [PASSED] 32
[23:54:51] [PASSED] 256
[23:54:51] =============== [PASSED] test_range_compact ================
[23:54:51] ==================== test_range_spare =====================
[23:54:51] [PASSED] 4
[23:54:51] [PASSED] 8
[23:54:51] [PASSED] 32
[23:54:51] [PASSED] 256
[23:54:51] ================ [PASSED] test_range_spare =================
[23:54:51] ===================== [PASSED] guc_dbm =====================
[23:54:51] ================== guc_idm (22 subtests) ===================
[23:54:51] [PASSED] bad_init
[23:54:51] [PASSED] no_init
[23:54:51] [PASSED] init_fini
[23:54:51] [PASSED] check_init_small
[23:54:51] [PASSED] check_init_shared
[23:54:51] [PASSED] check_used
[23:54:52] [PASSED] check_quota
[23:54:52] [PASSED] check_all
[23:54:52] [PASSED] check_limits
[23:54:52] [PASSED] check_overlap
[23:54:52] [PASSED] check_overlap_alloc
[23:54:52] [PASSED] check_overlap_release
[23:54:52] [PASSED] check_overlap_partial_init
[23:54:52] [PASSED] check_overlap_partial_shared_range_blocking
[23:54:52] [PASSED] check_used_usable
[23:54:52] [PASSED] check_used_shareable
[23:54:52] [PASSED] check_used_mixed
[23:54:52] [PASSED] check_release_usable_range
[23:54:52] [PASSED] check_release_shareable_range
[23:54:52] [PASSED] check_split_boundaries
[23:54:52] [PASSED] check_shareable_spare
[23:54:52] [PASSED] check_shareable_spare_fragmented_tail
[23:54:52] ===================== [PASSED] guc_idm =====================
[23:54:52] ============== guc_klv_helpers (13 subtests) ===============
[23:54:52] [PASSED] test_count
[23:54:52] [PASSED] test_encode_u32
[23:54:52] [PASSED] test_encode_u64
[23:54:52] [PASSED] test_encode_string
[23:54:52] [PASSED] test_encode_object_raw
[23:54:52] [PASSED] test_encode_object_klv
[23:54:52] [PASSED] test_encode_object_nested
[23:54:52] [PASSED] test_encode_object_basic
[23:54:52] ===================== test_decode_u16 =====================
[23:54:52] [PASSED] empty
[23:54:52] [PASSED] valid
[23:54:52] [PASSED] max
[23:54:52] [PASSED] big
[23:54:52] [PASSED] long
[23:54:52] ================= [PASSED] test_decode_u16 =================
[23:54:52] ===================== test_decode_u32 =====================
[23:54:52] [PASSED] empty
[23:54:52] [PASSED] valid
[23:54:52] [PASSED] max
[23:54:52] [PASSED] long
[23:54:52] ================= [PASSED] test_decode_u32 =================
[23:54:52] ===================== test_decode_u64 =====================
[23:54:52] [PASSED] empty
[23:54:52] [PASSED] short
[23:54:52] [PASSED] valid
[23:54:52] [PASSED] max
[23:54:52] [PASSED] long
[23:54:52] ================= [PASSED] test_decode_u64 =================
[23:54:52] ===================== test_decode_str =====================
[23:54:52] [PASSED] empty
[23:54:52] [PASSED] one
[23:54:52] [PASSED] one_trash
[23:54:52] [PASSED] two
[23:54:52] [PASSED] two_trash
[23:54:52] [PASSED] three
[23:54:52] [PASSED] dword
[23:54:52] [PASSED] four
[23:54:52] [PASSED] five
[23:54:52] [PASSED] six
[23:54:52] [PASSED] seven
[23:54:52] [PASSED] qword
[23:54:52] ================= [PASSED] test_decode_str =================
[23:54:52] [PASSED] test_print
[23:54:52] ================= [PASSED] guc_klv_helpers =================
[23:54:52] =================== xe_log (4 subtests) ====================
[23:54:52] [PASSED] demo_cper
[23:54:52] [PASSED] demo_dmesg
[23:54:52] ======================= test_dmesg ========================
[23:54:52] [PASSED] test_fatal
[23:54:52] [PASSED] test_fatal_tile
[23:54:52] [PASSED] test_fatal_gt
[23:54:52] [PASSED] test_fatal_comp
[23:54:52] [PASSED] test_fatal_comp_tile
[23:54:52] [PASSED] test_fatal_comp_gt
[23:54:52] [PASSED] test_fatal_all
[23:54:52] [PASSED] test_recoverable
[23:54:52] [PASSED] test_recoverable_tile
[23:54:52] [PASSED] test_recoverable_gt
[23:54:52] [PASSED] test_recoverable_comp
[23:54:52] [PASSED] test_recoverable_comp_tile
[23:54:52] [PASSED] test_recoverable_comp_gt
[23:54:52] [PASSED] test_recoverable_all
[23:54:52] [PASSED] test_info
[23:54:52] [PASSED] test_info_tile
[23:54:52] [PASSED] test_info_gt
[23:54:52] [PASSED] test_info_err
[23:54:52] [PASSED] test_info_comp
[23:54:52] [PASSED] test_info_comp_tile
[23:54:52] [PASSED] test_info_comp_gt
[23:54:52] [PASSED] test_info_all
[23:54:52] [PASSED] test_hw_fatal
[23:54:52] [PASSED] test_hw_recoverable
[23:54:52] [PASSED] test_hw_corrected
[23:54:52] [PASSED] test_hw_informational
[23:54:52] =================== [PASSED] test_dmesg ====================
[23:54:52] ====================== test_invalid =======================
[23:54:52] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[23:54:52] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[23:54:52] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[23:54:52] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[23:54:52] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[23:54:52] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[23:54:52] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[23:54:52] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[23:54:52] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[23:54:52] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[23:54:52] ================== [SKIPPED] test_invalid ==================
[23:54:52] ===================== [PASSED] xe_log ======================
[23:54:52] ================== no_relay (3 subtests) ===================
[23:54:52] [PASSED] xe_drops_guc2pf_if_not_ready
[23:54:52] [PASSED] xe_drops_guc2vf_if_not_ready
[23:54:52] [PASSED] xe_rejects_send_if_not_ready
[23:54:52] ==================== [PASSED] no_relay =====================
[23:54:52] ================== pf_relay (14 subtests) ==================
[23:54:52] [PASSED] pf_rejects_guc2pf_too_short
[23:54:52] [PASSED] pf_rejects_guc2pf_too_long
[23:54:52] [PASSED] pf_rejects_guc2pf_no_payload
[23:54:52] [PASSED] pf_fails_no_payload
[23:54:52] [PASSED] pf_fails_bad_origin
[23:54:52] [PASSED] pf_fails_bad_type
[23:54:52] [PASSED] pf_txn_reports_error
[23:54:52] [PASSED] pf_txn_sends_pf2guc
[23:54:52] [PASSED] pf_sends_pf2guc
[23:54:52] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[23:54:52] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[23:54:52] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[23:54:52] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[23:54:52] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[23:54:52] ==================== [PASSED] pf_relay =====================
[23:54:52] ================== vf_relay (3 subtests) ===================
[23:54:52] [PASSED] vf_rejects_guc2vf_too_short
[23:54:52] [PASSED] vf_rejects_guc2vf_too_long
[23:54:52] [PASSED] vf_rejects_guc2vf_no_payload
[23:54:52] ==================== [PASSED] vf_relay =====================
[23:54:52] ================ pf_gt_config (9 subtests) =================
[23:54:52] [PASSED] fair_contexts_1vf
[23:54:52] [PASSED] fair_doorbells_1vf
[23:54:52] [PASSED] fair_ggtt_1vf
[23:54:52] ====================== fair_vram_1vf ======================
[23:54:52] [PASSED] 3.50 GiB
[23:54:52] [PASSED] 11.5 GiB
[23:54:52] [PASSED] 15.5 GiB
[23:54:52] [PASSED] 31.5 GiB
[23:54:52] [PASSED] 63.5 GiB
[23:54:52] [PASSED] 1.91 GiB
[23:54:52] ================== [PASSED] fair_vram_1vf ==================
[23:54:52] ================ fair_vram_1vf_admin_only =================
[23:54:52] [PASSED] 3.50 GiB
[23:54:52] [PASSED] 11.5 GiB
[23:54:52] [PASSED] 15.5 GiB
[23:54:52] [PASSED] 31.5 GiB
[23:54:52] [PASSED] 63.5 GiB
[23:54:52] [PASSED] 1.91 GiB
[23:54:52] ============ [PASSED] fair_vram_1vf_admin_only =============
[23:54:52] ====================== fair_contexts ======================
[23:54:52] [PASSED] 1 VF
[23:54:52] [PASSED] 2 VFs
[23:54:52] [PASSED] 3 VFs
[23:54:52] [PASSED] 4 VFs
[23:54:52] [PASSED] 5 VFs
[23:54:52] [PASSED] 6 VFs
[23:54:52] [PASSED] 7 VFs
[23:54:52] [PASSED] 8 VFs
[23:54:52] [PASSED] 9 VFs
[23:54:52] [PASSED] 10 VFs
[23:54:52] [PASSED] 11 VFs
[23:54:52] [PASSED] 12 VFs
[23:54:52] [PASSED] 13 VFs
[23:54:52] [PASSED] 14 VFs
[23:54:52] [PASSED] 15 VFs
[23:54:52] [PASSED] 16 VFs
[23:54:52] [PASSED] 17 VFs
[23:54:52] [PASSED] 18 VFs
[23:54:52] [PASSED] 19 VFs
[23:54:52] [PASSED] 20 VFs
[23:54:52] [PASSED] 21 VFs
[23:54:52] [PASSED] 22 VFs
[23:54:52] [PASSED] 23 VFs
[23:54:52] [PASSED] 24 VFs
[23:54:52] [PASSED] 25 VFs
[23:54:52] [PASSED] 26 VFs
[23:54:52] [PASSED] 27 VFs
[23:54:52] [PASSED] 28 VFs
[23:54:52] [PASSED] 29 VFs
[23:54:52] [PASSED] 30 VFs
[23:54:52] [PASSED] 31 VFs
[23:54:52] [PASSED] 32 VFs
[23:54:52] [PASSED] 33 VFs
[23:54:52] [PASSED] 34 VFs
[23:54:52] [PASSED] 35 VFs
[23:54:52] [PASSED] 36 VFs
[23:54:52] [PASSED] 37 VFs
[23:54:52] [PASSED] 38 VFs
[23:54:52] [PASSED] 39 VFs
[23:54:52] [PASSED] 40 VFs
[23:54:52] [PASSED] 41 VFs
[23:54:52] [PASSED] 42 VFs
[23:54:52] [PASSED] 43 VFs
[23:54:52] [PASSED] 44 VFs
[23:54:52] [PASSED] 45 VFs
[23:54:52] [PASSED] 46 VFs
[23:54:52] [PASSED] 47 VFs
[23:54:52] [PASSED] 48 VFs
[23:54:52] [PASSED] 49 VFs
[23:54:52] [PASSED] 50 VFs
[23:54:52] [PASSED] 51 VFs
[23:54:52] [PASSED] 52 VFs
[23:54:52] [PASSED] 53 VFs
[23:54:52] [PASSED] 54 VFs
[23:54:52] [PASSED] 55 VFs
[23:54:52] [PASSED] 56 VFs
[23:54:52] [PASSED] 57 VFs
[23:54:52] [PASSED] 58 VFs
[23:54:52] [PASSED] 59 VFs
[23:54:52] [PASSED] 60 VFs
[23:54:52] [PASSED] 61 VFs
[23:54:52] [PASSED] 62 VFs
[23:54:52] [PASSED] 63 VFs
[23:54:52] ================== [PASSED] fair_contexts ==================
[23:54:52] ===================== fair_doorbells ======================
[23:54:52] [PASSED] 1 VF
[23:54:52] [PASSED] 2 VFs
[23:54:52] [PASSED] 3 VFs
[23:54:52] [PASSED] 4 VFs
[23:54:52] [PASSED] 5 VFs
[23:54:52] [PASSED] 6 VFs
[23:54:52] [PASSED] 7 VFs
[23:54:52] [PASSED] 8 VFs
[23:54:52] [PASSED] 9 VFs
[23:54:52] [PASSED] 10 VFs
[23:54:52] [PASSED] 11 VFs
[23:54:52] [PASSED] 12 VFs
[23:54:52] [PASSED] 13 VFs
[23:54:52] [PASSED] 14 VFs
[23:54:52] [PASSED] 15 VFs
[23:54:52] [PASSED] 16 VFs
[23:54:52] [PASSED] 17 VFs
[23:54:52] [PASSED] 18 VFs
[23:54:52] [PASSED] 19 VFs
[23:54:52] [PASSED] 20 VFs
[23:54:52] [PASSED] 21 VFs
[23:54:52] [PASSED] 22 VFs
[23:54:52] [PASSED] 23 VFs
[23:54:52] [PASSED] 24 VFs
[23:54:52] [PASSED] 25 VFs
[23:54:52] [PASSED] 26 VFs
[23:54:52] [PASSED] 27 VFs
[23:54:52] [PASSED] 28 VFs
[23:54:52] [PASSED] 29 VFs
[23:54:52] [PASSED] 30 VFs
[23:54:52] [PASSED] 31 VFs
[23:54:52] [PASSED] 32 VFs
[23:54:52] [PASSED] 33 VFs
[23:54:52] [PASSED] 34 VFs
[23:54:52] [PASSED] 35 VFs
[23:54:52] [PASSED] 36 VFs
[23:54:52] [PASSED] 37 VFs
[23:54:52] [PASSED] 38 VFs
[23:54:52] [PASSED] 39 VFs
[23:54:52] [PASSED] 40 VFs
[23:54:52] [PASSED] 41 VFs
[23:54:52] [PASSED] 42 VFs
[23:54:52] [PASSED] 43 VFs
[23:54:52] [PASSED] 44 VFs
[23:54:52] [PASSED] 45 VFs
[23:54:52] [PASSED] 46 VFs
[23:54:52] [PASSED] 47 VFs
[23:54:52] [PASSED] 48 VFs
[23:54:52] [PASSED] 49 VFs
[23:54:52] [PASSED] 50 VFs
[23:54:52] [PASSED] 51 VFs
[23:54:52] [PASSED] 52 VFs
[23:54:52] [PASSED] 53 VFs
[23:54:52] [PASSED] 54 VFs
[23:54:52] [PASSED] 55 VFs
[23:54:52] [PASSED] 56 VFs
[23:54:52] [PASSED] 57 VFs
[23:54:52] [PASSED] 58 VFs
[23:54:52] [PASSED] 59 VFs
[23:54:52] [PASSED] 60 VFs
[23:54:52] [PASSED] 61 VFs
[23:54:52] [PASSED] 62 VFs
[23:54:52] [PASSED] 63 VFs
[23:54:52] ================= [PASSED] fair_doorbells ==================
[23:54:52] ======================== fair_ggtt ========================
[23:54:52] [PASSED] 1 VF
[23:54:52] [PASSED] 2 VFs
[23:54:52] [PASSED] 3 VFs
[23:54:52] [PASSED] 4 VFs
[23:54:52] [PASSED] 5 VFs
[23:54:52] [PASSED] 6 VFs
[23:54:52] [PASSED] 7 VFs
[23:54:52] [PASSED] 8 VFs
[23:54:52] [PASSED] 9 VFs
[23:54:52] [PASSED] 10 VFs
[23:54:52] [PASSED] 11 VFs
[23:54:52] [PASSED] 12 VFs
[23:54:52] [PASSED] 13 VFs
[23:54:52] [PASSED] 14 VFs
[23:54:52] [PASSED] 15 VFs
[23:54:52] [PASSED] 16 VFs
[23:54:52] [PASSED] 17 VFs
[23:54:52] [PASSED] 18 VFs
[23:54:52] [PASSED] 19 VFs
[23:54:52] [PASSED] 20 VFs
[23:54:52] [PASSED] 21 VFs
[23:54:52] [PASSED] 22 VFs
[23:54:52] [PASSED] 23 VFs
[23:54:52] [PASSED] 24 VFs
[23:54:52] [PASSED] 25 VFs
[23:54:52] [PASSED] 26 VFs
[23:54:52] [PASSED] 27 VFs
[23:54:52] [PASSED] 28 VFs
[23:54:52] [PASSED] 29 VFs
[23:54:52] [PASSED] 30 VFs
[23:54:52] [PASSED] 31 VFs
[23:54:52] [PASSED] 32 VFs
[23:54:52] [PASSED] 33 VFs
[23:54:52] [PASSED] 34 VFs
[23:54:52] [PASSED] 35 VFs
[23:54:52] [PASSED] 36 VFs
[23:54:52] [PASSED] 37 VFs
[23:54:52] [PASSED] 38 VFs
[23:54:52] [PASSED] 39 VFs
[23:54:52] [PASSED] 40 VFs
[23:54:52] [PASSED] 41 VFs
[23:54:52] [PASSED] 42 VFs
[23:54:52] [PASSED] 43 VFs
[23:54:52] [PASSED] 44 VFs
[23:54:52] [PASSED] 45 VFs
[23:54:52] [PASSED] 46 VFs
[23:54:52] [PASSED] 47 VFs
[23:54:52] [PASSED] 48 VFs
[23:54:52] [PASSED] 49 VFs
[23:54:52] [PASSED] 50 VFs
[23:54:52] [PASSED] 51 VFs
[23:54:52] [PASSED] 52 VFs
[23:54:52] [PASSED] 53 VFs
[23:54:52] [PASSED] 54 VFs
[23:54:52] [PASSED] 55 VFs
[23:54:52] [PASSED] 56 VFs
[23:54:52] [PASSED] 57 VFs
[23:54:52] [PASSED] 58 VFs
[23:54:52] [PASSED] 59 VFs
[23:54:52] [PASSED] 60 VFs
[23:54:52] [PASSED] 61 VFs
[23:54:52] [PASSED] 62 VFs
[23:54:52] [PASSED] 63 VFs
[23:54:52] ==================== [PASSED] fair_ggtt ====================
[23:54:52] ======================== fair_vram ========================
[23:54:52] [PASSED] 1 VF
[23:54:52] [PASSED] 2 VFs
[23:54:52] [PASSED] 3 VFs
[23:54:52] [PASSED] 4 VFs
[23:54:52] [PASSED] 5 VFs
[23:54:52] [PASSED] 6 VFs
[23:54:52] [PASSED] 7 VFs
[23:54:52] [PASSED] 8 VFs
[23:54:52] [PASSED] 9 VFs
[23:54:52] [PASSED] 10 VFs
[23:54:52] [PASSED] 11 VFs
[23:54:52] [PASSED] 12 VFs
[23:54:52] [PASSED] 13 VFs
[23:54:52] [PASSED] 14 VFs
[23:54:52] [PASSED] 15 VFs
[23:54:52] [PASSED] 16 VFs
[23:54:52] [PASSED] 17 VFs
[23:54:52] [PASSED] 18 VFs
[23:54:52] [PASSED] 19 VFs
[23:54:52] [PASSED] 20 VFs
[23:54:52] [PASSED] 21 VFs
[23:54:52] [PASSED] 22 VFs
[23:54:52] [PASSED] 23 VFs
[23:54:52] [PASSED] 24 VFs
[23:54:52] [PASSED] 25 VFs
[23:54:52] [PASSED] 26 VFs
[23:54:52] [PASSED] 27 VFs
[23:54:52] [PASSED] 28 VFs
[23:54:52] [PASSED] 29 VFs
[23:54:52] [PASSED] 30 VFs
[23:54:52] [PASSED] 31 VFs
[23:54:52] [PASSED] 32 VFs
[23:54:52] [PASSED] 33 VFs
[23:54:52] [PASSED] 34 VFs
[23:54:52] [PASSED] 35 VFs
[23:54:52] [PASSED] 36 VFs
[23:54:52] [PASSED] 37 VFs
[23:54:52] [PASSED] 38 VFs
[23:54:52] [PASSED] 39 VFs
[23:54:52] [PASSED] 40 VFs
[23:54:52] [PASSED] 41 VFs
[23:54:52] [PASSED] 42 VFs
[23:54:52] [PASSED] 43 VFs
[23:54:52] [PASSED] 44 VFs
[23:54:52] [PASSED] 45 VFs
[23:54:52] [PASSED] 46 VFs
[23:54:52] [PASSED] 47 VFs
[23:54:52] [PASSED] 48 VFs
[23:54:52] [PASSED] 49 VFs
[23:54:52] [PASSED] 50 VFs
[23:54:52] [PASSED] 51 VFs
[23:54:52] [PASSED] 52 VFs
[23:54:52] [PASSED] 53 VFs
[23:54:52] [PASSED] 54 VFs
[23:54:52] [PASSED] 55 VFs
[23:54:52] [PASSED] 56 VFs
[23:54:52] [PASSED] 57 VFs
[23:54:52] [PASSED] 58 VFs
[23:54:52] [PASSED] 59 VFs
[23:54:52] [PASSED] 60 VFs
[23:54:52] [PASSED] 61 VFs
[23:54:52] [PASSED] 62 VFs
[23:54:52] [PASSED] 63 VFs
[23:54:52] ==================== [PASSED] fair_vram ====================
[23:54:52] ================== [PASSED] pf_gt_config ===================
[23:54:52] ===================== lmtt (1 subtest) =====================
[23:54:52] ======================== test_ops =========================
[23:54:52] [PASSED] 2-level
[23:54:52] [PASSED] multi-level
[23:54:52] ==================== [PASSED] test_ops =====================
[23:54:52] ====================== [PASSED] lmtt =======================
[23:54:52] ================= sriov_packet (1 subtest) =================
[23:54:52] [PASSED] test_descriptor_init
[23:54:52] ================== [PASSED] sriov_packet ===================
[23:54:52] ================= pf_service (11 subtests) =================
[23:54:52] [PASSED] pf_negotiate_any
[23:54:52] [PASSED] pf_negotiate_base_match
[23:54:52] [PASSED] pf_negotiate_base_newer
[23:54:52] [PASSED] pf_negotiate_base_next
[23:54:52] [SKIPPED] pf_negotiate_base_older (no older minor)
[23:54:52] [PASSED] pf_negotiate_base_prev
[23:54:52] [PASSED] pf_negotiate_latest_match
[23:54:52] [PASSED] pf_negotiate_latest_newer
[23:54:52] [PASSED] pf_negotiate_latest_next
[23:54:52] [SKIPPED] pf_negotiate_latest_older (no older minor)
[23:54:52] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[23:54:52] =================== [PASSED] pf_service ====================
[23:54:52] ================= xe_guc_g2g (2 subtests) ==================
[23:54:52] ============== xe_live_guc_g2g_kunit_default ==============
[23:54:52] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[23:54:52] ============== xe_live_guc_g2g_kunit_allmem ===============
[23:54:52] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[23:54:52] =================== [SKIPPED] xe_guc_g2g ===================
[23:54:52] =================== xe_mocs (2 subtests) ===================
[23:54:52] ================ xe_live_mocs_kernel_kunit ================
[23:54:52] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[23:54:52] ================ xe_live_mocs_reset_kunit =================
[23:54:52] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[23:54:52] ==================== [SKIPPED] xe_mocs =====================
[23:54:52] ================= xe_migrate (3 subtests) ==================
[23:54:52] ================= xe_migrate_sanity_kunit =================
[23:54:52] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[23:54:52] ================== xe_validate_ccs_kunit ==================
[23:54:52] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[23:54:52] ============= xe_migrate_access_memory_kunit ==============
[23:54:52] ========= [SKIPPED] xe_migrate_access_memory_kunit =========
[23:54:52] =================== [SKIPPED] xe_migrate ===================
[23:54:52] ================== xe_dma_buf (1 subtest) ==================
[23:54:52] ==================== xe_dma_buf_kunit =====================
[23:54:52] ================ [SKIPPED] xe_dma_buf_kunit ================
[23:54:52] =================== [SKIPPED] xe_dma_buf ===================
[23:54:52] ================= xe_bo_shrink (1 subtest) =================
[23:54:52] =================== xe_bo_shrink_kunit ====================
[23:54:52] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[23:54:52] ================== [SKIPPED] xe_bo_shrink ==================
[23:54:52] ==================== xe_bo (2 subtests) ====================
[23:54:52] ================== xe_ccs_migrate_kunit ===================
[23:54:52] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[23:54:52] ==================== xe_bo_evict_kunit ====================
[23:54:52] =============== [SKIPPED] xe_bo_evict_kunit ================
[23:54:52] ===================== [SKIPPED] xe_bo ======================
[23:54:52] =================== xe_any (9 subtests) ====================
[23:54:52] [PASSED] test_to_xe
[23:54:52] [PASSED] test_to_dev
[23:54:52] [PASSED] test_to_pdev
[23:54:52] [PASSED] test_to_drm
[23:54:52] [PASSED] test_if_pdev
[23:54:52] [PASSED] test_if_xe
[23:54:52] [PASSED] test_if_tile
[23:54:52] [PASSED] test_if_gt
[23:54:52] [PASSED] test_to_id
[23:54:52] ===================== [PASSED] xe_any ======================
[23:54:52] ==================== args (13 subtests) ====================
[23:54:52] [PASSED] count_args_test
[23:54:52] [PASSED] call_args_example
[23:54:52] [PASSED] call_args_test
[23:54:52] [PASSED] drop_first_arg_example
[23:54:52] [PASSED] drop_first_arg_test
[23:54:52] [PASSED] first_arg_example
[23:54:52] [PASSED] first_arg_test
[23:54:52] [PASSED] last_arg_example
[23:54:52] [PASSED] last_arg_test
[23:54:52] [PASSED] pick_arg_example
[23:54:52] [PASSED] if_args_example
[23:54:52] [PASSED] if_args_test
[23:54:52] [PASSED] sep_comma_example
[23:54:52] ====================== [PASSED] args =======================
[23:54:52] =================== xe_pci (3 subtests) ====================
[23:54:52] ==================== check_graphics_ip ====================
[23:54:52] [PASSED] 12.00 Xe_LP
[23:54:52] [PASSED] 12.10 Xe_LP+
[23:54:52] [PASSED] 12.55 Xe_HPG
[23:54:52] [PASSED] 12.60 Xe_HPC
[23:54:52] [PASSED] 12.70 Xe_LPG
[23:54:52] [PASSED] 12.71 Xe_LPG
[23:54:52] [PASSED] 12.74 Xe_LPG+
[23:54:52] [PASSED] 20.01 Xe2_HPG
[23:54:52] [PASSED] 20.02 Xe2_HPG
[23:54:52] [PASSED] 20.04 Xe2_LPG
[23:54:52] [PASSED] 30.00 Xe3_LPG
[23:54:52] [PASSED] 30.01 Xe3_LPG
[23:54:52] [PASSED] 30.03 Xe3_LPG
[23:54:52] [PASSED] 30.04 Xe3_LPG
[23:54:52] [PASSED] 30.05 Xe3_LPG
[23:54:52] [PASSED] 35.10 Xe3p_LPG
[23:54:52] [PASSED] 35.11 Xe3p_XPC
[23:54:52] ================ [PASSED] check_graphics_ip ================
[23:54:52] ===================== check_media_ip ======================
[23:54:52] [PASSED] 12.00 Xe_M
[23:54:52] [PASSED] 12.55 Xe_HPM
[23:54:52] [PASSED] 13.00 Xe_LPM+
[23:54:52] [PASSED] 13.01 Xe2_HPM
[23:54:52] [PASSED] 20.00 Xe2_LPM
[23:54:52] [PASSED] 30.00 Xe3_LPM
[23:54:52] [PASSED] 30.02 Xe3_LPM
[23:54:52] [PASSED] 35.00 Xe3p_LPM
[23:54:52] [PASSED] 35.03 Xe3p_HPM
[23:54:52] ================= [PASSED] check_media_ip ==================
[23:54:52] =================== check_platform_desc ===================
[23:54:52] [PASSED] 0x9A60 (TIGERLAKE)
[23:54:52] [PASSED] 0x9A68 (TIGERLAKE)
[23:54:52] [PASSED] 0x9A70 (TIGERLAKE)
[23:54:52] [PASSED] 0x9A40 (TIGERLAKE)
[23:54:52] [PASSED] 0x9A49 (TIGERLAKE)
[23:54:52] [PASSED] 0x9A59 (TIGERLAKE)
[23:54:52] [PASSED] 0x9A78 (TIGERLAKE)
[23:54:52] [PASSED] 0x9AC0 (TIGERLAKE)
[23:54:52] [PASSED] 0x9AC9 (TIGERLAKE)
[23:54:52] [PASSED] 0x9AD9 (TIGERLAKE)
[23:54:52] [PASSED] 0x9AF8 (TIGERLAKE)
[23:54:52] [PASSED] 0x4C80 (ROCKETLAKE)
[23:54:52] [PASSED] 0x4C8A (ROCKETLAKE)
[23:54:52] [PASSED] 0x4C8B (ROCKETLAKE)
[23:54:52] [PASSED] 0x4C8C (ROCKETLAKE)
[23:54:52] [PASSED] 0x4C90 (ROCKETLAKE)
[23:54:52] [PASSED] 0x4C9A (ROCKETLAKE)
[23:54:52] [PASSED] 0x4680 (ALDERLAKE_S)
[23:54:52] [PASSED] 0x4682 (ALDERLAKE_S)
[23:54:52] [PASSED] 0x4688 (ALDERLAKE_S)
[23:54:52] [PASSED] 0x468A (ALDERLAKE_S)
[23:54:52] [PASSED] 0x468B (ALDERLAKE_S)
[23:54:52] [PASSED] 0x4690 (ALDERLAKE_S)
[23:54:52] [PASSED] 0x4692 (ALDERLAKE_S)
[23:54:52] [PASSED] 0x4693 (ALDERLAKE_S)
[23:54:52] [PASSED] 0x46A0 (ALDERLAKE_P)
[23:54:52] [PASSED] 0x46A1 (ALDERLAKE_P)
[23:54:52] [PASSED] 0x46A2 (ALDERLAKE_P)
[23:54:52] [PASSED] 0x46A3 (ALDERLAKE_P)
[23:54:52] [PASSED] 0x46A6 (ALDERLAKE_P)
[23:54:52] [PASSED] 0x46A8 (ALDERLAKE_P)
[23:54:52] [PASSED] 0x46AA (ALDERLAKE_P)
[23:54:52] [PASSED] 0x462A (ALDERLAKE_P)
[23:54:52] [PASSED] 0x4626 (ALDERLAKE_P)
[23:54:52] [PASSED] 0x4628 (ALDERLAKE_P)
[23:54:52] [PASSED] 0x46B0 (ALDERLAKE_P)
[23:54:52] [PASSED] 0x46B1 (ALDERLAKE_P)
[23:54:52] [PASSED] 0x46B2 (ALDERLAKE_P)
[23:54:52] [PASSED] 0x46B3 (ALDERLAKE_P)
[23:54:52] [PASSED] 0x46C0 (ALDERLAKE_P)
[23:54:52] [PASSED] 0x46C1 (ALDERLAKE_P)
[23:54:52] [PASSED] 0x46C2 (ALDERLAKE_P)
[23:54:52] [PASSED] 0x46C3 (ALDERLAKE_P)
[23:54:52] [PASSED] 0x46D0 (ALDERLAKE_N)
[23:54:52] [PASSED] 0x46D1 (ALDERLAKE_N)
[23:54:52] [PASSED] 0x46D2 (ALDERLAKE_N)
[23:54:52] [PASSED] 0x46D3 (ALDERLAKE_N)
[23:54:52] [PASSED] 0x46D4 (ALDERLAKE_N)
[23:54:52] [PASSED] 0xA721 (ALDERLAKE_P)
[23:54:52] [PASSED] 0xA7A1 (ALDERLAKE_P)
[23:54:52] [PASSED] 0xA7A9 (ALDERLAKE_P)
[23:54:52] [PASSED] 0xA7AC (ALDERLAKE_P)
[23:54:52] [PASSED] 0xA7AD (ALDERLAKE_P)
[23:54:52] [PASSED] 0xA720 (ALDERLAKE_P)
[23:54:52] [PASSED] 0xA7A0 (ALDERLAKE_P)
[23:54:52] [PASSED] 0xA7A8 (ALDERLAKE_P)
[23:54:52] [PASSED] 0xA7AA (ALDERLAKE_P)
[23:54:52] [PASSED] 0xA7AB (ALDERLAKE_P)
[23:54:52] [PASSED] 0xA780 (ALDERLAKE_S)
[23:54:52] [PASSED] 0xA781 (ALDERLAKE_S)
[23:54:52] [PASSED] 0xA782 (ALDERLAKE_S)
[23:54:52] [PASSED] 0xA783 (ALDERLAKE_S)
[23:54:52] [PASSED] 0xA788 (ALDERLAKE_S)
[23:54:52] [PASSED] 0xA789 (ALDERLAKE_S)
[23:54:52] [PASSED] 0xA78A (ALDERLAKE_S)
[23:54:52] [PASSED] 0xA78B (ALDERLAKE_S)
[23:54:52] [PASSED] 0x4905 (DG1)
[23:54:52] [PASSED] 0x4906 (DG1)
[23:54:52] [PASSED] 0x4907 (DG1)
[23:54:52] [PASSED] 0x4908 (DG1)
[23:54:52] [PASSED] 0x4909 (DG1)
[23:54:52] [PASSED] 0x56C0 (DG2)
[23:54:52] [PASSED] 0x56C2 (DG2)
[23:54:52] [PASSED] 0x56C1 (DG2)
[23:54:52] [PASSED] 0x7D51 (METEORLAKE)
[23:54:52] [PASSED] 0x7DD1 (METEORLAKE)
[23:54:52] [PASSED] 0x7D41 (METEORLAKE)
[23:54:52] [PASSED] 0x7D67 (METEORLAKE)
[23:54:52] [PASSED] 0xB640 (METEORLAKE)
[23:54:52] [PASSED] 0x56A0 (DG2)
[23:54:52] [PASSED] 0x56A1 (DG2)
[23:54:52] [PASSED] 0x56A2 (DG2)
[23:54:52] [PASSED] 0x56BE (DG2)
[23:54:52] [PASSED] 0x56BF (DG2)
[23:54:52] [PASSED] 0x5690 (DG2)
[23:54:52] [PASSED] 0x5691 (DG2)
[23:54:52] [PASSED] 0x5692 (DG2)
[23:54:52] [PASSED] 0x56A5 (DG2)
[23:54:52] [PASSED] 0x56A6 (DG2)
[23:54:52] [PASSED] 0x56B0 (DG2)
[23:54:52] [PASSED] 0x56B1 (DG2)
[23:54:52] [PASSED] 0x56BA (DG2)
[23:54:52] [PASSED] 0x56BB (DG2)
[23:54:52] [PASSED] 0x56BC (DG2)
[23:54:52] [PASSED] 0x56BD (DG2)
[23:54:52] [PASSED] 0x5693 (DG2)
[23:54:52] [PASSED] 0x5694 (DG2)
[23:54:52] [PASSED] 0x5695 (DG2)
[23:54:52] [PASSED] 0x56A3 (DG2)
[23:54:52] [PASSED] 0x56A4 (DG2)
[23:54:52] [PASSED] 0x56B2 (DG2)
[23:54:52] [PASSED] 0x56B3 (DG2)
[23:54:52] [PASSED] 0x5696 (DG2)
[23:54:52] [PASSED] 0x5697 (DG2)
[23:54:52] [PASSED] 0xB69 (PVC)
[23:54:52] [PASSED] 0xB6E (PVC)
[23:54:52] [PASSED] 0xBD4 (PVC)
[23:54:52] [PASSED] 0xBD5 (PVC)
[23:54:52] [PASSED] 0xBD6 (PVC)
[23:54:52] [PASSED] 0xBD7 (PVC)
[23:54:52] [PASSED] 0xBD8 (PVC)
[23:54:52] [PASSED] 0xBD9 (PVC)
[23:54:52] [PASSED] 0xBDA (PVC)
[23:54:52] [PASSED] 0xBDB (PVC)
[23:54:52] [PASSED] 0xBE0 (PVC)
[23:54:52] [PASSED] 0xBE1 (PVC)
[23:54:52] [PASSED] 0xBE5 (PVC)
[23:54:52] [PASSED] 0x7D40 (METEORLAKE)
[23:54:52] [PASSED] 0x7D45 (METEORLAKE)
[23:54:52] [PASSED] 0x7D55 (METEORLAKE)
[23:54:52] [PASSED] 0x7D60 (METEORLAKE)
[23:54:52] [PASSED] 0x7DD5 (METEORLAKE)
[23:54:52] [PASSED] 0x6420 (LUNARLAKE)
[23:54:52] [PASSED] 0x64A0 (LUNARLAKE)
[23:54:52] [PASSED] 0x64B0 (LUNARLAKE)
[23:54:52] [PASSED] 0xE202 (BATTLEMAGE)
[23:54:52] [PASSED] 0xE209 (BATTLEMAGE)
[23:54:52] [PASSED] 0xE20B (BATTLEMAGE)
[23:54:52] [PASSED] 0xE20C (BATTLEMAGE)
[23:54:52] [PASSED] 0xE20D (BATTLEMAGE)
[23:54:52] [PASSED] 0xE210 (BATTLEMAGE)
[23:54:52] [PASSED] 0xE211 (BATTLEMAGE)
[23:54:52] [PASSED] 0xE212 (BATTLEMAGE)
[23:54:52] [PASSED] 0xE216 (BATTLEMAGE)
[23:54:52] [PASSED] 0xE220 (BATTLEMAGE)
[23:54:52] [PASSED] 0xE221 (BATTLEMAGE)
[23:54:52] [PASSED] 0xE222 (BATTLEMAGE)
[23:54:52] [PASSED] 0xE223 (BATTLEMAGE)
[23:54:52] [PASSED] 0xB080 (PANTHERLAKE)
[23:54:52] [PASSED] 0xB081 (PANTHERLAKE)
[23:54:52] [PASSED] 0xB082 (PANTHERLAKE)
[23:54:52] [PASSED] 0xB083 (PANTHERLAKE)
[23:54:52] [PASSED] 0xB084 (PANTHERLAKE)
[23:54:52] [PASSED] 0xB085 (PANTHERLAKE)
[23:54:52] [PASSED] 0xB086 (PANTHERLAKE)
[23:54:52] [PASSED] 0xB087 (PANTHERLAKE)
[23:54:52] [PASSED] 0xB08F (PANTHERLAKE)
[23:54:52] [PASSED] 0xB090 (PANTHERLAKE)
[23:54:52] [PASSED] 0xB0A0 (PANTHERLAKE)
[23:54:52] [PASSED] 0xB0A1 (PANTHERLAKE)
[23:54:52] [PASSED] 0xB0B0 (PANTHERLAKE)
[23:54:52] [PASSED] 0xFD80 (PANTHERLAKE)
[23:54:52] [PASSED] 0xFD81 (PANTHERLAKE)
[23:54:52] [PASSED] 0xD740 (NOVALAKE_S)
[23:54:52] [PASSED] 0xD741 (NOVALAKE_S)
[23:54:52] [PASSED] 0xD742 (NOVALAKE_S)
[23:54:52] [PASSED] 0xD743 (NOVALAKE_S)
[23:54:52] [PASSED] 0xD745 (NOVALAKE_S)
[23:54:52] [PASSED] 0xD74A (NOVALAKE_S)
[23:54:52] [PASSED] 0xD74B (NOVALAKE_S)
[23:54:52] [PASSED] 0x674C (CRESCENTISLAND)
[23:54:52] [PASSED] 0x674D (CRESCENTISLAND)
[23:54:52] [PASSED] 0x674E (CRESCENTISLAND)
[23:54:52] [PASSED] 0x674F (CRESCENTISLAND)
[23:54:52] [PASSED] 0x6750 (CRESCENTISLAND)
[23:54:52] [PASSED] 0x6751 (CRESCENTISLAND)
[23:54:52] [PASSED] 0x6752 (CRESCENTISLAND)
[23:54:52] [PASSED] 0xD750 (NOVALAKE_P)
[23:54:52] [PASSED] 0xD751 (NOVALAKE_P)
[23:54:52] [PASSED] 0xD752 (NOVALAKE_P)
[23:54:52] [PASSED] 0xD753 (NOVALAKE_P)
[23:54:52] [PASSED] 0xD754 (NOVALAKE_P)
[23:54:52] [PASSED] 0xD755 (NOVALAKE_P)
[23:54:52] [PASSED] 0xD756 (NOVALAKE_P)
[23:54:52] [PASSED] 0xD757 (NOVALAKE_P)
[23:54:52] [PASSED] 0xD75F (NOVALAKE_P)
[23:54:52] =============== [PASSED] check_platform_desc ===============
[23:54:52] ===================== [PASSED] xe_pci ======================
[23:54:52] ============= xe_rtp_tables_test (5 subtests) ==============
[23:54:52] ================== xe_rtp_table_gt_test ===================
[23:54:52] [PASSED] gt_was/14011060649
[23:54:52] [PASSED] gt_was/14011059788
[23:54:52] [PASSED] gt_was/14015795083
[23:54:52] [PASSED] gt_was/16021867713
[23:54:52] [PASSED] gt_was/14019449301
[23:54:52] [PASSED] gt_was/16028005424
[23:54:52] [PASSED] gt_was/14026578760
[23:54:52] [PASSED] gt_was/1409420604
[23:54:52] [PASSED] gt_was/1408615072
[23:54:52] [PASSED] gt_was/22010523718
[23:54:52] [PASSED] gt_was/14011006942
[23:54:52] [PASSED] gt_was/14014830051
[23:54:52] [PASSED] gt_was/18018781329
[23:54:52] [PASSED] gt_was/1509235366
[23:54:52] [PASSED] gt_was/18018781329
[23:54:52] [PASSED] gt_was/16016694945
[23:54:52] [PASSED] gt_was/14018575942
[23:54:52] [PASSED] gt_was/22016670082
[23:54:52] [PASSED] gt_was/22016670082
[23:54:52] [PASSED] gt_was/14017421178
[23:54:52] [PASSED] gt_was/16025250150
[23:54:52] [PASSED] gt_was/14021871409
[23:54:52] [PASSED] gt_was/16021865536
[23:54:52] [PASSED] gt_was/14021486841
[23:54:52] [PASSED] gt_was/14025160223
[23:54:52] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[23:54:52] [PASSED] gt_was/14025635424
[23:54:52] [PASSED] gt_was/16028005424
[23:54:52] ============== [PASSED] xe_rtp_table_gt_test ===============
[23:54:52] ================== xe_rtp_table_gt_test ===================
[23:54:52] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[23:54:52] [PASSED] gt_tunings/Tuning: 32B Access Enable
[23:54:52] [PASSED] gt_tunings/Tuning: L3 cache
[23:54:52] [PASSED] gt_tunings/Tuning: L3 cache - media
[23:54:52] [PASSED] gt_tunings/Tuning: Compression Overfetch
[23:54:52] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[23:54:52] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[23:54:52] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[23:54:52] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[23:54:52] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[23:54:52] [PASSED] gt_tunings/Tuning: Stateless compression control
[23:54:52] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[23:54:52] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[23:54:52] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[23:54:52] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[23:54:52] [PASSED] gt_tunings/Tuning: Force All Non-Compressible Memory Reads to be 256B Overfetches
[23:54:52] ============== [PASSED] xe_rtp_table_gt_test ===============
[23:54:52] ================== xe_rtp_table_oob_test ==================
[23:54:52] [PASSED] oob_was/1607983814
[23:54:52] [PASSED] oob_was/16010904313
[23:54:52] [PASSED] oob_was/18022495364
[23:54:52] [PASSED] oob_was/22012773006
[23:54:52] [PASSED] oob_was/14014475959
[23:54:52] [PASSED] oob_was/22011391025
[23:54:52] [PASSED] oob_was/22012727170
[23:54:52] [PASSED] oob_was/22012727685
[23:54:52] [PASSED] oob_was/22016596838
[23:54:52] [PASSED] oob_was/18020744125
[23:54:52] [PASSED] oob_was/1409600907
[23:54:52] [PASSED] oob_was/22014953428
[23:54:52] [PASSED] oob_was/16017236439
[23:54:52] [PASSED] oob_was/14019821291
[23:54:52] [PASSED] oob_was/14015076503
[23:54:52] [PASSED] oob_was/22016122933
[23:54:52] [PASSED] oob_was/14018913170
[23:54:52] [PASSED] oob_was/14018094691
[23:54:52] [PASSED] oob_was/18024947630
[23:54:52] [PASSED] oob_was/16022287689
[23:54:52] [PASSED] oob_was/13011645652
[23:54:52] [PASSED] oob_was/14022293748
[23:54:52] [PASSED] oob_was/22019794406
[23:54:52] [PASSED] oob_was/22019338487
[23:54:52] [PASSED] oob_was/16023588340
[23:54:52] [PASSED] oob_was/14019789679
[23:54:52] [PASSED] oob_was/14022866841
[23:54:52] [PASSED] oob_was/16021333562
[23:54:52] [PASSED] oob_was/14016712196
[23:54:52] [PASSED] oob_was/14015568240
[23:54:52] [PASSED] oob_was/18013179988
[23:54:52] [PASSED] oob_was/1508761755
[23:54:52] [PASSED] oob_was/16023105232
[23:54:52] [PASSED] oob_was/16026508708
[23:54:52] [PASSED] oob_was/14020001231
[23:54:52] [PASSED] oob_was/16023683509
[23:54:52] [PASSED] oob_was/14025515070
[23:54:52] [PASSED] oob_was/15015404425_disable
[23:54:52] [PASSED] oob_was/16026007364
[23:54:52] [PASSED] oob_was/14020316580
[23:54:52] [PASSED] oob_was/14025883347
[23:54:52] [PASSED] oob_was/16029380221
[23:54:52] [PASSED] oob_was/22022079272
[23:54:52] [PASSED] oob_was/16029897822
[23:54:52] [PASSED] oob_was/14026539277
[23:54:52] [PASSED] oob_was/14027054324
[23:54:52] [PASSED] oob_was/14025941587
[23:54:52] [PASSED] oob_was/16030224309
[23:54:52] ============== [PASSED] xe_rtp_table_oob_test ==============
[23:54:52] ================ xe_rtp_table_dev_oob_test ================
[23:54:52] [PASSED] device_oob_was/22010954014
[23:54:52] [PASSED] device_oob_was/15015404425
[23:54:52] [PASSED] device_oob_was/22019338487_display
[23:54:52] [PASSED] device_oob_was/14022085890
[23:54:52] [PASSED] device_oob_was/14026633728
[23:54:52] [PASSED] device_oob_was/14026746987
[23:54:52] [PASSED] device_oob_was/14026779378
[23:54:52] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[23:54:52] ========== xe_rtp_table_missing_upper_bound_test ==========
[23:54:52] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[23:54:52] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[23:54:52] [PASSED] register_whitelist/1806527549
[23:54:52] [PASSED] register_whitelist/allow_read_ctx_timestamp
[23:54:52] [PASSED] register_whitelist/allow_read_queue_timestamp
[23:54:52] [PASSED] register_whitelist/16014440446
[23:54:52] [PASSED] register_whitelist/16017236439
[23:54:52] [PASSED] register_whitelist/16020183090
[23:54:52] [PASSED] register_whitelist/14024997852
[23:54:52] [PASSED] register_whitelist/14024997852
[23:54:52] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[23:54:52] =============== [PASSED] xe_rtp_tables_test ================
[23:54:52] =================== xe_rtp (3 subtests) ====================
[23:54:52] =================== xe_rtp_rules_tests ====================
[23:54:52] [PASSED] no
[23:54:52] [PASSED] yes
[23:54:52] [PASSED] no-and-no
[23:54:52] [PASSED] no-and-yes
[23:54:52] [PASSED] yes-and-no
[23:54:52] [PASSED] yes-and-yes
[23:54:52] [PASSED] no-or-no
[23:54:52] [PASSED] no-or-yes
[23:54:52] [PASSED] yes-or-no
[23:54:52] [PASSED] yes-or-yes
[23:54:52] [PASSED] no-yes-or-yes-no
[23:54:52] [PASSED] no-yes-or-yes-yes
[23:54:52] [PASSED] yes-yes-or-no-yes
[23:54:52] [PASSED] yes-yes-or-yes-yes
[23:54:52] [PASSED] no-no-or-yes-or-no
[23:54:52] [PASSED] or
[23:54:52] [PASSED] or-yes
[23:54:52] [PASSED] or-no
[23:54:52] [PASSED] yes-or
[23:54:52] [PASSED] no-or
[23:54:52] [PASSED] no-or-or-yes
[23:54:52] [PASSED] yes-or-or-no
[23:54:52] [PASSED] no-or-or-no
[23:54:52] [PASSED] missing-context-engine-class
[23:54:52] [PASSED] missing-context-engine-class-or-yes
[23:54:52] [PASSED] missing-context-engine-class-or-or-yes
[23:54:52] =============== [PASSED] xe_rtp_rules_tests ================
[23:54:52] =============== xe_rtp_process_to_sr_tests ================
[23:54:52] [PASSED] coalesce-same-reg
[23:54:52] [PASSED] coalesce-same-reg-literal-and-func
[23:54:52] [PASSED] no-match-no-add
[23:54:52] [PASSED] two-regs-two-entries
[23:54:52] [PASSED] clr-one-set-other
[23:54:52] [PASSED] set-field
[23:54:52] [PASSED] conflict-duplicate
[23:54:52] [PASSED] conflict-not-disjoint
[23:54:52] [PASSED] conflict-not-disjoint-literal-and-func
[23:54:52] [PASSED] conflict-reg-type
[23:54:52] [PASSED] bad-mcr-reg-forced-to-regular
[23:54:52] [PASSED] bad-regular-reg-forced-to-mcr
[23:54:52] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[23:54:52] ================== xe_rtp_process_tests ===================
[23:54:52] [PASSED] active1
[23:54:52] [PASSED] active2
[23:54:52] [PASSED] active-inactive
[23:54:52] [PASSED] inactive-active
[23:54:52] [PASSED] inactive-active-inactive
[23:54:52] [PASSED] inactive-inactive-inactive
[23:54:52] ============== [PASSED] xe_rtp_process_tests ===============
[23:54:52] ===================== [PASSED] xe_rtp ======================
[23:54:52] ==================== xe_wa (1 subtest) =====================
[23:54:52] ======================== xe_wa_gt =========================
[23:54:52] [PASSED] TIGERLAKE B0
[23:54:52] [PASSED] DG1 A0
[23:54:52] [PASSED] DG1 B0
[23:54:52] [PASSED] ALDERLAKE_S A0
[23:54:52] [PASSED] ALDERLAKE_S B0
[23:54:52] [PASSED] ALDERLAKE_S C0
[23:54:52] [PASSED] ALDERLAKE_S D0
[23:54:52] [PASSED] ALDERLAKE_P A0
[23:54:52] [PASSED] ALDERLAKE_P B0
[23:54:52] [PASSED] ALDERLAKE_P C0
[23:54:52] [PASSED] ALDERLAKE_S RPLS D0
[23:54:52] [PASSED] ALDERLAKE_P RPLU E0
[23:54:52] [PASSED] DG2 G10 C0
[23:54:52] [PASSED] DG2 G11 B1
[23:54:52] [PASSED] DG2 G12 A1
[23:54:52] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[23:54:52] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[23:54:52] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[23:54:52] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[23:54:52] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[23:54:52] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[23:54:52] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[23:54:52] ==================== [PASSED] xe_wa_gt =====================
[23:54:52] ====================== [PASSED] xe_wa ======================
[23:54:52] ============================================================
[23:54:52] Testing complete. Ran 839 tests: passed: 810, skipped: 29
[23:54:52] Elapsed time: 41.287s total, 1.792s configuring, 38.729s building, 0.723s 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
[23:54:52] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[23:54:54] 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
[23:55:19] Starting KUnit Kernel (1/1)...
[23:55:19] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[23:55:19] ============ drm_test_pick_cmdline (2 subtests) ============
[23:55:19] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[23:55:19] =============== drm_test_pick_cmdline_named ===============
[23:55:19] [PASSED] NTSC
[23:55:19] [PASSED] NTSC-J
[23:55:19] [PASSED] PAL
[23:55:19] [PASSED] PAL-M
[23:55:19] =========== [PASSED] drm_test_pick_cmdline_named ===========
[23:55:19] ============== [PASSED] drm_test_pick_cmdline ==============
[23:55:19] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[23:55:19] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[23:55:19] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[23:55:19] =========== drm_validate_clone_mode (2 subtests) ===========
[23:55:19] ============== drm_test_check_in_clone_mode ===============
[23:55:19] [PASSED] in_clone_mode
[23:55:19] [PASSED] not_in_clone_mode
[23:55:19] ========== [PASSED] drm_test_check_in_clone_mode ===========
[23:55:19] =============== drm_test_check_valid_clones ===============
[23:55:19] [PASSED] not_in_clone_mode
[23:55:19] [PASSED] valid_clone
[23:55:19] [PASSED] invalid_clone
[23:55:19] =========== [PASSED] drm_test_check_valid_clones ===========
[23:55:19] ============= [PASSED] drm_validate_clone_mode =============
[23:55:19] ============= drm_validate_modeset (1 subtest) =============
[23:55:19] [PASSED] drm_test_check_connector_changed_modeset
[23:55:19] ============== [PASSED] drm_validate_modeset ===============
[23:55:19] ====== drm_test_bridge_get_current_state (1 subtest) =======
[23:55:19] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[23:55:19] ======== [PASSED] drm_test_bridge_get_current_state ========
[23:55:19] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[23:55:19] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[23:55:19] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[23:55:19] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[23:55:19] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[23:55:19] ============== drm_bridge_alloc (2 subtests) ===============
[23:55:19] [PASSED] drm_test_drm_bridge_alloc_basic
[23:55:19] [PASSED] drm_test_drm_bridge_alloc_get_put
[23:55:19] ================ [PASSED] drm_bridge_alloc =================
[23:55:19] ============= drm_bridge_bus_fmt (5 subtests) ==============
[23:55:19] [PASSED] drm_test_bridge_rgb_yuv_rgb
[23:55:19] [PASSED] drm_test_bridge_must_convert_to_yuv444
[23:55:19] [PASSED] drm_test_bridge_hdmi_auto_rgb
[23:55:19] [PASSED] drm_test_bridge_auto_first
[23:55:19] [PASSED] drm_test_bridge_rgb_yuv_no_path
[23:55:19] =============== [PASSED] drm_bridge_bus_fmt ================
[23:55:19] ============= drm_cmdline_parser (40 subtests) =============
[23:55:19] [PASSED] drm_test_cmdline_force_d_only
[23:55:19] [PASSED] drm_test_cmdline_force_D_only_dvi
[23:55:19] [PASSED] drm_test_cmdline_force_D_only_hdmi
[23:55:19] [PASSED] drm_test_cmdline_force_D_only_not_digital
[23:55:19] [PASSED] drm_test_cmdline_force_e_only
[23:55:19] [PASSED] drm_test_cmdline_res
[23:55:19] [PASSED] drm_test_cmdline_res_vesa
[23:55:19] [PASSED] drm_test_cmdline_res_vesa_rblank
[23:55:19] [PASSED] drm_test_cmdline_res_rblank
[23:55:19] [PASSED] drm_test_cmdline_res_bpp
[23:55:19] [PASSED] drm_test_cmdline_res_refresh
[23:55:19] [PASSED] drm_test_cmdline_res_bpp_refresh
[23:55:19] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[23:55:19] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[23:55:19] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[23:55:19] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[23:55:19] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[23:55:19] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[23:55:19] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[23:55:19] [PASSED] drm_test_cmdline_res_margins_force_on
[23:55:19] [PASSED] drm_test_cmdline_res_vesa_margins
[23:55:19] [PASSED] drm_test_cmdline_name
[23:55:19] [PASSED] drm_test_cmdline_name_bpp
[23:55:19] [PASSED] drm_test_cmdline_name_option
[23:55:19] [PASSED] drm_test_cmdline_name_bpp_option
[23:55:19] [PASSED] drm_test_cmdline_rotate_0
[23:55:19] [PASSED] drm_test_cmdline_rotate_90
[23:55:19] [PASSED] drm_test_cmdline_rotate_180
[23:55:19] [PASSED] drm_test_cmdline_rotate_270
[23:55:19] [PASSED] drm_test_cmdline_hmirror
[23:55:19] [PASSED] drm_test_cmdline_vmirror
[23:55:19] [PASSED] drm_test_cmdline_margin_options
[23:55:19] [PASSED] drm_test_cmdline_multiple_options
[23:55:19] [PASSED] drm_test_cmdline_bpp_extra_and_option
[23:55:19] [PASSED] drm_test_cmdline_extra_and_option
[23:55:19] [PASSED] drm_test_cmdline_freestanding_options
[23:55:19] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[23:55:19] [PASSED] drm_test_cmdline_panel_orientation
[23:55:19] ================ drm_test_cmdline_invalid =================
[23:55:19] [PASSED] margin_only
[23:55:19] [PASSED] interlace_only
[23:55:19] [PASSED] res_missing_x
[23:55:19] [PASSED] res_missing_y
[23:55:19] [PASSED] res_bad_y
[23:55:19] [PASSED] res_missing_y_bpp
[23:55:19] [PASSED] res_bad_bpp
[23:55:19] [PASSED] res_bad_refresh
[23:55:19] [PASSED] res_bpp_refresh_force_on_off
[23:55:19] [PASSED] res_invalid_mode
[23:55:19] [PASSED] res_bpp_wrong_place_mode
[23:55:19] [PASSED] name_bpp_refresh
[23:55:19] [PASSED] name_refresh
[23:55:19] [PASSED] name_refresh_wrong_mode
[23:55:19] [PASSED] name_refresh_invalid_mode
[23:55:19] [PASSED] rotate_multiple
[23:55:19] [PASSED] rotate_invalid_val
[23:55:19] [PASSED] rotate_truncated
[23:55:19] [PASSED] invalid_option
[23:55:19] [PASSED] invalid_tv_option
[23:55:19] [PASSED] truncated_tv_option
[23:55:19] ============ [PASSED] drm_test_cmdline_invalid =============
[23:55:19] =============== drm_test_cmdline_tv_options ===============
[23:55:19] [PASSED] NTSC
[23:55:19] [PASSED] NTSC_443
[23:55:19] [PASSED] NTSC_J
[23:55:19] [PASSED] PAL
[23:55:19] [PASSED] PAL_M
[23:55:19] [PASSED] PAL_N
[23:55:19] [PASSED] SECAM
[23:55:19] [PASSED] MONO_525
[23:55:19] [PASSED] MONO_625
[23:55:19] =========== [PASSED] drm_test_cmdline_tv_options ===========
[23:55:19] =============== [PASSED] drm_cmdline_parser ================
[23:55:19] ========== drmm_connector_hdmi_init (20 subtests) ==========
[23:55:19] [PASSED] drm_test_connector_hdmi_init_valid
[23:55:19] [PASSED] drm_test_connector_hdmi_init_bpc_8
[23:55:19] [PASSED] drm_test_connector_hdmi_init_bpc_10
[23:55:19] [PASSED] drm_test_connector_hdmi_init_bpc_12
[23:55:19] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[23:55:19] [PASSED] drm_test_connector_hdmi_init_bpc_null
[23:55:19] [PASSED] drm_test_connector_hdmi_init_formats_empty
[23:55:19] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[23:55:19] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[23:55:19] [PASSED] supported_formats=0x9 yuv420_allowed=1
[23:55:19] [PASSED] supported_formats=0x9 yuv420_allowed=0
[23:55:19] [PASSED] supported_formats=0x5 yuv420_allowed=1
[23:55:19] [PASSED] supported_formats=0x5 yuv420_allowed=0
[23:55:19] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[23:55:19] [PASSED] drm_test_connector_hdmi_init_null_ddc
[23:55:19] [PASSED] drm_test_connector_hdmi_init_null_product
[23:55:19] [PASSED] drm_test_connector_hdmi_init_null_vendor
[23:55:19] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[23:55:19] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[23:55:19] [PASSED] drm_test_connector_hdmi_init_product_valid
[23:55:19] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[23:55:19] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[23:55:19] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[23:55:19] ========= drm_test_connector_hdmi_init_type_valid =========
[23:55:19] [PASSED] HDMI-A
[23:55:19] [PASSED] HDMI-B
[23:55:19] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[23:55:19] ======== drm_test_connector_hdmi_init_type_invalid ========
[23:55:19] [PASSED] Unknown
[23:55:19] [PASSED] VGA
[23:55:19] [PASSED] DVI-I
[23:55:19] [PASSED] DVI-D
[23:55:19] [PASSED] DVI-A
[23:55:19] [PASSED] Composite
[23:55:19] [PASSED] SVIDEO
[23:55:19] [PASSED] LVDS
[23:55:19] [PASSED] Component
[23:55:19] [PASSED] DIN
[23:55:19] [PASSED] DP
[23:55:19] [PASSED] TV
[23:55:19] [PASSED] eDP
[23:55:19] [PASSED] Virtual
[23:55:19] [PASSED] DSI
[23:55:19] [PASSED] DPI
[23:55:19] [PASSED] Writeback
[23:55:19] [PASSED] SPI
[23:55:19] [PASSED] USB
[23:55:19] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[23:55:19] ============ [PASSED] drmm_connector_hdmi_init =============
[23:55:19] ============= drmm_connector_init (3 subtests) =============
[23:55:19] [PASSED] drm_test_drmm_connector_init
[23:55:19] [PASSED] drm_test_drmm_connector_init_null_ddc
[23:55:19] ========= drm_test_drmm_connector_init_type_valid =========
[23:55:19] [PASSED] Unknown
[23:55:19] [PASSED] VGA
[23:55:19] [PASSED] DVI-I
[23:55:19] [PASSED] DVI-D
[23:55:19] [PASSED] DVI-A
[23:55:19] [PASSED] Composite
[23:55:19] [PASSED] SVIDEO
[23:55:19] [PASSED] LVDS
[23:55:19] [PASSED] Component
[23:55:19] [PASSED] DIN
[23:55:19] [PASSED] DP
[23:55:19] [PASSED] HDMI-A
[23:55:19] [PASSED] HDMI-B
[23:55:19] [PASSED] TV
[23:55:19] [PASSED] eDP
[23:55:19] [PASSED] Virtual
[23:55:19] [PASSED] DSI
[23:55:19] [PASSED] DPI
[23:55:19] [PASSED] Writeback
[23:55:19] [PASSED] SPI
[23:55:19] [PASSED] USB
[23:55:19] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[23:55:19] =============== [PASSED] drmm_connector_init ===============
[23:55:19] ========= drm_connector_dynamic_init (6 subtests) ==========
[23:55:19] [PASSED] drm_test_drm_connector_dynamic_init
[23:55:19] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[23:55:19] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[23:55:19] [PASSED] drm_test_drm_connector_dynamic_init_properties
[23:55:19] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[23:55:19] [PASSED] Unknown
[23:55:19] [PASSED] VGA
[23:55:19] [PASSED] DVI-I
[23:55:19] [PASSED] DVI-D
[23:55:19] [PASSED] DVI-A
[23:55:19] [PASSED] Composite
[23:55:19] [PASSED] SVIDEO
[23:55:19] [PASSED] LVDS
[23:55:19] [PASSED] Component
[23:55:19] [PASSED] DIN
[23:55:19] [PASSED] DP
[23:55:19] [PASSED] HDMI-A
[23:55:19] [PASSED] HDMI-B
[23:55:19] [PASSED] TV
[23:55:19] [PASSED] eDP
[23:55:19] [PASSED] Virtual
[23:55:19] [PASSED] DSI
[23:55:19] [PASSED] DPI
[23:55:19] [PASSED] Writeback
[23:55:19] [PASSED] SPI
[23:55:19] [PASSED] USB
[23:55:19] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[23:55:19] ======== drm_test_drm_connector_dynamic_init_name =========
[23:55:19] [PASSED] Unknown
[23:55:19] [PASSED] VGA
[23:55:19] [PASSED] DVI-I
[23:55:19] [PASSED] DVI-D
[23:55:19] [PASSED] DVI-A
[23:55:19] [PASSED] Composite
[23:55:19] [PASSED] SVIDEO
[23:55:19] [PASSED] LVDS
[23:55:19] [PASSED] Component
[23:55:19] [PASSED] DIN
[23:55:19] [PASSED] DP
[23:55:19] [PASSED] HDMI-A
[23:55:19] [PASSED] HDMI-B
[23:55:19] [PASSED] TV
[23:55:19] [PASSED] eDP
[23:55:19] [PASSED] Virtual
[23:55:19] [PASSED] DSI
[23:55:19] [PASSED] DPI
[23:55:19] [PASSED] Writeback
[23:55:19] [PASSED] SPI
[23:55:19] [PASSED] USB
[23:55:19] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[23:55:19] =========== [PASSED] drm_connector_dynamic_init ============
[23:55:19] ==== drm_connector_dynamic_register_early (4 subtests) =====
[23:55:19] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[23:55:19] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[23:55:19] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[23:55:19] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[23:55:19] ====== [PASSED] drm_connector_dynamic_register_early =======
[23:55:19] ======= drm_connector_dynamic_register (7 subtests) ========
[23:55:19] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[23:55:19] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[23:55:19] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[23:55:19] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[23:55:19] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[23:55:19] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[23:55:19] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[23:55:19] ========= [PASSED] drm_connector_dynamic_register ==========
[23:55:19] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[23:55:19] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[23:55:19] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[23:55:19] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[23:55:19] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[23:55:19] ========== drm_test_get_tv_mode_from_name_valid ===========
[23:55:19] [PASSED] NTSC
[23:55:19] [PASSED] NTSC-443
[23:55:19] [PASSED] NTSC-J
[23:55:19] [PASSED] PAL
[23:55:19] [PASSED] PAL-M
[23:55:19] [PASSED] PAL-N
[23:55:19] [PASSED] SECAM
[23:55:19] [PASSED] Mono
[23:55:19] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[23:55:19] [PASSED] drm_test_get_tv_mode_from_name_truncated
[23:55:19] ============ [PASSED] drm_get_tv_mode_from_name ============
[23:55:19] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[23:55:19] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[23:55:19] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[23:55:19] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[23:55:19] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[23:55:19] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[23:55:19] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[23:55:19] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[23:55:19] [PASSED] VIC 96
[23:55:19] [PASSED] VIC 97
[23:55:19] [PASSED] VIC 101
[23:55:19] [PASSED] VIC 102
[23:55:19] [PASSED] VIC 106
[23:55:19] [PASSED] VIC 107
[23:55:19] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[23:55:19] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[23:55:19] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[23:55:19] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[23:55:19] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[23:55:19] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[23:55:19] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[23:55:19] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[23:55:19] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[23:55:19] [PASSED] Automatic
[23:55:19] [PASSED] Full
[23:55:19] [PASSED] Limited 16:235
[23:55:19] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[23:55:19] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[23:55:19] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[23:55:19] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[23:55:19] === drm_test_drm_hdmi_connector_get_output_format_name ====
[23:55:19] [PASSED] RGB
[23:55:19] [PASSED] YUV 4:2:0
[23:55:19] [PASSED] YUV 4:2:2
[23:55:19] [PASSED] YUV 4:4:4
[23:55:19] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[23:55:19] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[23:55:19] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[23:55:19] ============= drm_damage_helper (21 subtests) ==============
[23:55:19] [PASSED] drm_test_damage_iter_no_damage
[23:55:19] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[23:55:19] [PASSED] drm_test_damage_iter_no_damage_src_moved
[23:55:19] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[23:55:19] [PASSED] drm_test_damage_iter_no_damage_not_visible
[23:55:19] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[23:55:19] [PASSED] drm_test_damage_iter_no_damage_no_fb
[23:55:19] [PASSED] drm_test_damage_iter_simple_damage
[23:55:19] [PASSED] drm_test_damage_iter_single_damage
[23:55:19] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[23:55:19] [PASSED] drm_test_damage_iter_single_damage_outside_src
[23:55:19] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[23:55:19] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[23:55:19] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[23:55:19] [PASSED] drm_test_damage_iter_single_damage_src_moved
[23:55:19] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[23:55:19] [PASSED] drm_test_damage_iter_damage
[23:55:19] [PASSED] drm_test_damage_iter_damage_one_intersect
[23:55:19] [PASSED] drm_test_damage_iter_damage_one_outside
[23:55:19] [PASSED] drm_test_damage_iter_damage_src_moved
[23:55:19] [PASSED] drm_test_damage_iter_damage_not_visible
[23:55:19] ================ [PASSED] drm_damage_helper ================
[23:55:19] ============== drm_dp_mst_helper (3 subtests) ==============
[23:55:19] ============== drm_test_dp_mst_calc_pbn_mode ==============
[23:55:19] [PASSED] Clock 154000 BPP 30 DSC disabled
[23:55:19] [PASSED] Clock 234000 BPP 30 DSC disabled
[23:55:19] [PASSED] Clock 297000 BPP 24 DSC disabled
[23:55:19] [PASSED] Clock 332880 BPP 24 DSC enabled
[23:55:19] [PASSED] Clock 324540 BPP 24 DSC enabled
[23:55:19] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[23:55:19] ============== drm_test_dp_mst_calc_pbn_div ===============
[23:55:19] [PASSED] Link rate 2000000 lane count 4
[23:55:19] [PASSED] Link rate 2000000 lane count 2
[23:55:19] [PASSED] Link rate 2000000 lane count 1
[23:55:19] [PASSED] Link rate 1350000 lane count 4
[23:55:19] [PASSED] Link rate 1350000 lane count 2
[23:55:19] [PASSED] Link rate 1350000 lane count 1
[23:55:19] [PASSED] Link rate 1000000 lane count 4
[23:55:19] [PASSED] Link rate 1000000 lane count 2
[23:55:19] [PASSED] Link rate 1000000 lane count 1
[23:55:19] [PASSED] Link rate 810000 lane count 4
[23:55:19] [PASSED] Link rate 810000 lane count 2
[23:55:19] [PASSED] Link rate 810000 lane count 1
[23:55:19] [PASSED] Link rate 540000 lane count 4
[23:55:19] [PASSED] Link rate 540000 lane count 2
[23:55:19] [PASSED] Link rate 540000 lane count 1
[23:55:19] [PASSED] Link rate 270000 lane count 4
[23:55:19] [PASSED] Link rate 270000 lane count 2
[23:55:19] [PASSED] Link rate 270000 lane count 1
[23:55:19] [PASSED] Link rate 162000 lane count 4
[23:55:19] [PASSED] Link rate 162000 lane count 2
[23:55:19] [PASSED] Link rate 162000 lane count 1
[23:55:19] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[23:55:19] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[23:55:19] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[23:55:19] [PASSED] DP_POWER_UP_PHY with port number
[23:55:19] [PASSED] DP_POWER_DOWN_PHY with port number
[23:55:19] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[23:55:19] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[23:55:19] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[23:55:19] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[23:55:19] [PASSED] DP_QUERY_PAYLOAD with port number
[23:55:19] [PASSED] DP_QUERY_PAYLOAD with VCPI
[23:55:19] [PASSED] DP_REMOTE_DPCD_READ with port number
[23:55:19] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[23:55:19] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[23:55:19] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[23:55:19] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[23:55:19] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[23:55:19] [PASSED] DP_REMOTE_I2C_READ with port number
[23:55:19] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[23:55:19] [PASSED] DP_REMOTE_I2C_READ with transactions array
[23:55:19] [PASSED] DP_REMOTE_I2C_WRITE with port number
[23:55:19] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[23:55:19] [PASSED] DP_REMOTE_I2C_WRITE with data array
[23:55:19] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[23:55:19] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[23:55:19] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[23:55:19] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[23:55:19] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[23:55:19] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[23:55:19] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[23:55:19] ================ [PASSED] drm_dp_mst_helper ================
[23:55:19] ================== drm_exec (7 subtests) ===================
[23:55:19] [PASSED] sanitycheck
[23:55:19] [PASSED] test_lock
[23:55:19] [PASSED] test_lock_unlock
[23:55:19] [PASSED] test_duplicates
[23:55:19] [PASSED] test_prepare
[23:55:19] [PASSED] test_prepare_array
[23:55:19] [PASSED] test_multiple_loops
[23:55:19] ==================== [PASSED] drm_exec =====================
[23:55:19] =========== drm_format_helper_test (17 subtests) ===========
[23:55:19] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[23:55:19] [PASSED] single_pixel_source_buffer
[23:55:19] [PASSED] single_pixel_clip_rectangle
[23:55:19] [PASSED] well_known_colors
[23:55:19] [PASSED] destination_pitch
[23:55:19] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[23:55:19] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[23:55:19] [PASSED] single_pixel_source_buffer
[23:55:19] [PASSED] single_pixel_clip_rectangle
[23:55:19] [PASSED] well_known_colors
[23:55:19] [PASSED] destination_pitch
[23:55:19] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[23:55:19] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[23:55:19] [PASSED] single_pixel_source_buffer
[23:55:19] [PASSED] single_pixel_clip_rectangle
[23:55:19] [PASSED] well_known_colors
[23:55:19] [PASSED] destination_pitch
[23:55:19] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[23:55:19] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[23:55:19] [PASSED] single_pixel_source_buffer
[23:55:19] [PASSED] single_pixel_clip_rectangle
[23:55:19] [PASSED] well_known_colors
[23:55:19] [PASSED] destination_pitch
[23:55:19] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[23:55:19] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[23:55:19] [PASSED] single_pixel_source_buffer
[23:55:19] [PASSED] single_pixel_clip_rectangle
[23:55:19] [PASSED] well_known_colors
[23:55:19] [PASSED] destination_pitch
[23:55:19] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[23:55:19] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[23:55:19] [PASSED] single_pixel_source_buffer
[23:55:19] [PASSED] single_pixel_clip_rectangle
[23:55:19] [PASSED] well_known_colors
[23:55:19] [PASSED] destination_pitch
[23:55:19] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[23:55:19] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[23:55:19] [PASSED] single_pixel_source_buffer
[23:55:19] [PASSED] single_pixel_clip_rectangle
[23:55:19] [PASSED] well_known_colors
[23:55:19] [PASSED] destination_pitch
[23:55:19] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[23:55:19] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[23:55:19] [PASSED] single_pixel_source_buffer
[23:55:19] [PASSED] single_pixel_clip_rectangle
[23:55:19] [PASSED] well_known_colors
[23:55:19] [PASSED] destination_pitch
[23:55:19] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[23:55:19] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[23:55:19] [PASSED] single_pixel_source_buffer
[23:55:19] [PASSED] single_pixel_clip_rectangle
[23:55:19] [PASSED] well_known_colors
[23:55:19] [PASSED] destination_pitch
[23:55:19] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[23:55:19] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[23:55:19] [PASSED] single_pixel_source_buffer
[23:55:19] [PASSED] single_pixel_clip_rectangle
[23:55:19] [PASSED] well_known_colors
[23:55:19] [PASSED] destination_pitch
[23:55:19] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[23:55:19] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[23:55:19] [PASSED] single_pixel_source_buffer
[23:55:19] [PASSED] single_pixel_clip_rectangle
[23:55:19] [PASSED] well_known_colors
[23:55:19] [PASSED] destination_pitch
[23:55:19] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[23:55:19] ============== drm_test_fb_xrgb8888_to_mono ===============
[23:55:19] [PASSED] single_pixel_source_buffer
[23:55:19] [PASSED] single_pixel_clip_rectangle
[23:55:19] [PASSED] well_known_colors
[23:55:19] [PASSED] destination_pitch
[23:55:19] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[23:55:19] ==================== drm_test_fb_swab =====================
[23:55:19] [PASSED] single_pixel_source_buffer
[23:55:19] [PASSED] single_pixel_clip_rectangle
[23:55:19] [PASSED] well_known_colors
[23:55:19] [PASSED] destination_pitch
[23:55:19] ================ [PASSED] drm_test_fb_swab =================
[23:55:19] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[23:55:19] [PASSED] single_pixel_source_buffer
[23:55:19] [PASSED] single_pixel_clip_rectangle
[23:55:19] [PASSED] well_known_colors
[23:55:19] [PASSED] destination_pitch
[23:55:19] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[23:55:19] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[23:55:19] [PASSED] single_pixel_source_buffer
[23:55:19] [PASSED] single_pixel_clip_rectangle
[23:55:19] [PASSED] well_known_colors
[23:55:19] [PASSED] destination_pitch
[23:55:19] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[23:55:19] ================= drm_test_fb_clip_offset =================
[23:55:19] [PASSED] pass through
[23:55:19] [PASSED] horizontal offset
[23:55:19] [PASSED] vertical offset
[23:55:19] [PASSED] horizontal and vertical offset
[23:55:19] [PASSED] horizontal offset (custom pitch)
[23:55:19] [PASSED] vertical offset (custom pitch)
[23:55:19] [PASSED] horizontal and vertical offset (custom pitch)
[23:55:19] ============= [PASSED] drm_test_fb_clip_offset =============
[23:55:19] =================== drm_test_fb_memcpy ====================
[23:55:19] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[23:55:19] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[23:55:19] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[23:55:19] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[23:55:19] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[23:55:19] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[23:55:19] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[23:55:19] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[23:55:19] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[23:55:19] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[23:55:19] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[23:55:19] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[23:55:19] =============== [PASSED] drm_test_fb_memcpy ================
[23:55:19] ============= [PASSED] drm_format_helper_test ==============
[23:55:19] ================= drm_format (18 subtests) =================
[23:55:19] [PASSED] drm_test_format_block_width_invalid
[23:55:19] [PASSED] drm_test_format_block_width_one_plane
[23:55:19] [PASSED] drm_test_format_block_width_two_plane
[23:55:19] [PASSED] drm_test_format_block_width_three_plane
[23:55:19] [PASSED] drm_test_format_block_width_tiled
[23:55:19] [PASSED] drm_test_format_block_height_invalid
[23:55:19] [PASSED] drm_test_format_block_height_one_plane
[23:55:19] [PASSED] drm_test_format_block_height_two_plane
[23:55:19] [PASSED] drm_test_format_block_height_three_plane
[23:55:19] [PASSED] drm_test_format_block_height_tiled
[23:55:19] [PASSED] drm_test_format_min_pitch_invalid
[23:55:19] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[23:55:19] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[23:55:19] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[23:55:19] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[23:55:19] [PASSED] drm_test_format_min_pitch_two_plane
[23:55:19] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[23:55:19] [PASSED] drm_test_format_min_pitch_tiled
[23:55:19] =================== [PASSED] drm_format ====================
[23:55:19] ============== drm_framebuffer (10 subtests) ===============
[23:55:19] ========== drm_test_framebuffer_check_src_coords ==========
[23:55:19] [PASSED] Success: source fits into fb
[23:55:19] [PASSED] Fail: overflowing fb with x-axis coordinate
[23:55:19] [PASSED] Fail: overflowing fb with y-axis coordinate
[23:55:19] [PASSED] Fail: overflowing fb with source width
[23:55:19] [PASSED] Fail: overflowing fb with source height
[23:55:19] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[23:55:19] [PASSED] drm_test_framebuffer_cleanup
[23:55:19] =============== drm_test_framebuffer_create ===============
[23:55:19] [PASSED] ABGR8888 normal sizes
[23:55:19] [PASSED] ABGR8888 max sizes
[23:55:19] [PASSED] ABGR8888 pitch greater than min required
[23:55:19] [PASSED] ABGR8888 pitch less than min required
[23:55:19] [PASSED] ABGR8888 Invalid width
[23:55:19] [PASSED] ABGR8888 Invalid buffer handle
[23:55:19] [PASSED] No pixel format
[23:55:19] [PASSED] ABGR8888 Width 0
[23:55:19] [PASSED] ABGR8888 Height 0
[23:55:19] [PASSED] ABGR8888 Out of bound height * pitch combination
[23:55:19] [PASSED] ABGR8888 Large buffer offset
[23:55:19] [PASSED] ABGR8888 Buffer offset for inexistent plane
[23:55:19] [PASSED] ABGR8888 Invalid flag
[23:55:19] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[23:55:19] [PASSED] ABGR8888 Valid buffer modifier
[23:55:19] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[23:55:19] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[23:55:19] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[23:55:19] [PASSED] NV12 Normal sizes
[23:55:19] [PASSED] NV12 Max sizes
[23:55:19] [PASSED] NV12 Invalid pitch
[23:55:19] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[23:55:19] [PASSED] NV12 different modifier per-plane
[23:55:19] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[23:55:19] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[23:55:19] [PASSED] NV12 Modifier for inexistent plane
[23:55:19] [PASSED] NV12 Handle for inexistent plane
[23:55:19] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[23:55:19] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[23:55:19] [PASSED] YVU420 Normal sizes
[23:55:19] [PASSED] YVU420 Max sizes
[23:55:19] [PASSED] YVU420 Invalid pitch
[23:55:19] [PASSED] YVU420 Different pitches
[23:55:19] [PASSED] YVU420 Different buffer offsets/pitches
[23:55:19] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[23:55:19] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[23:55:19] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[23:55:19] [PASSED] YVU420 Valid modifier
[23:55:19] [PASSED] YVU420 Different modifiers per plane
[23:55:19] [PASSED] YVU420 Modifier for inexistent plane
[23:55:19] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[23:55:19] [PASSED] X0L2 Normal sizes
[23:55:19] [PASSED] X0L2 Max sizes
[23:55:19] [PASSED] X0L2 Invalid pitch
[23:55:19] [PASSED] X0L2 Pitch greater than minimum required
[23:55:19] [PASSED] X0L2 Handle for inexistent plane
[23:55:19] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[23:55:19] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[23:55:19] [PASSED] X0L2 Valid modifier
[23:55:19] [PASSED] X0L2 Modifier for inexistent plane
[23:55:19] =========== [PASSED] drm_test_framebuffer_create ===========
[23:55:19] [PASSED] drm_test_framebuffer_free
[23:55:19] [PASSED] drm_test_framebuffer_init
[23:55:19] [PASSED] drm_test_framebuffer_init_bad_format
[23:55:19] [PASSED] drm_test_framebuffer_init_dev_mismatch
[23:55:19] [PASSED] drm_test_framebuffer_lookup
[23:55:19] [PASSED] drm_test_framebuffer_lookup_inexistent
[23:55:19] [PASSED] drm_test_framebuffer_modifiers_not_supported
[23:55:19] ================= [PASSED] drm_framebuffer =================
[23:55:19] ================ drm_gem_shmem (8 subtests) ================
[23:55:19] [PASSED] drm_gem_shmem_test_obj_create
[23:55:19] [PASSED] drm_gem_shmem_test_obj_create_private
[23:55:19] [PASSED] drm_gem_shmem_test_pin_pages
[23:55:19] [PASSED] drm_gem_shmem_test_vmap
[23:55:19] [PASSED] drm_gem_shmem_test_get_sg_table
[23:55:19] [PASSED] drm_gem_shmem_test_get_pages_sgt
[23:55:19] [PASSED] drm_gem_shmem_test_madvise
[23:55:19] [PASSED] drm_gem_shmem_test_purge
[23:55:19] ================== [PASSED] drm_gem_shmem ==================
[23:55:19] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[23:55:19] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[23:55:19] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[23:55:19] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[23:55:19] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[23:55:19] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[23:55:19] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[23:55:19] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[23:55:19] [PASSED] Automatic
[23:55:19] [PASSED] Full
[23:55:19] [PASSED] Limited 16:235
[23:55:19] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[23:55:19] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[23:55:19] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[23:55:19] [PASSED] drm_test_check_disable_connector
[23:55:19] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[23:55:19] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[23:55:19] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[23:55:19] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[23:55:19] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[23:55:19] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[23:55:19] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[23:55:19] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[23:55:19] [PASSED] drm_test_check_output_bpc_dvi
[23:55:19] [PASSED] drm_test_check_output_bpc_format_vic_1
[23:55:19] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[23:55:19] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[23:55:19] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[23:55:19] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[23:55:19] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[23:55:19] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[23:55:19] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[23:55:19] ============ drm_test_check_hdmi_color_format =============
[23:55:19] [PASSED] AUTO -> RGB
[23:55:19] [PASSED] YCBCR422 -> YUV422
[23:55:19] [PASSED] YCBCR420 -> YUV420
[23:55:19] [PASSED] YCBCR444 -> YUV444
[23:55:19] [PASSED] RGB -> RGB
[23:55:19] ======== [PASSED] drm_test_check_hdmi_color_format =========
[23:55:19] ======== drm_test_check_hdmi_color_format_420_only ========
[23:55:19] [PASSED] RGB should fail
[23:55:19] [PASSED] YUV444 should fail
[23:55:19] [PASSED] YUV422 should fail
[23:55:19] [PASSED] YUV420 should work
[23:55:19] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[23:55:19] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[23:55:19] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[23:55:19] [PASSED] drm_test_check_broadcast_rgb_value
[23:55:19] [PASSED] drm_test_check_bpc_8_value
[23:55:19] [PASSED] drm_test_check_bpc_10_value
[23:55:19] [PASSED] drm_test_check_bpc_12_value
[23:55:19] [PASSED] drm_test_check_format_value
[23:55:19] [PASSED] drm_test_check_tmds_char_value
[23:55:19] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[23:55:19] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[23:55:19] [PASSED] drm_test_check_mode_valid
[23:55:19] [PASSED] drm_test_check_mode_valid_reject
[23:55:19] [PASSED] drm_test_check_mode_valid_reject_rate
[23:55:19] [PASSED] drm_test_check_mode_valid_reject_max_clock
[23:55:19] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[23:55:19] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[23:55:19] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[23:55:19] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[23:55:19] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[23:55:19] [PASSED] drm_test_check_infoframes
[23:55:19] [PASSED] drm_test_check_reject_avi_infoframe
[23:55:19] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[23:55:19] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[23:55:19] [PASSED] drm_test_check_reject_audio_infoframe
[23:55:19] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[23:55:19] ================= drm_managed (2 subtests) =================
[23:55:19] [PASSED] drm_test_managed_release_action
[23:55:19] [PASSED] drm_test_managed_run_action
[23:55:19] =================== [PASSED] drm_managed ===================
[23:55:19] =================== drm_mm (6 subtests) ====================
[23:55:19] [PASSED] drm_test_mm_init
[23:55:19] [PASSED] drm_test_mm_debug
[23:55:19] [PASSED] drm_test_mm_align32
[23:55:19] [PASSED] drm_test_mm_align64
[23:55:19] [PASSED] drm_test_mm_lowest
[23:55:19] [PASSED] drm_test_mm_highest
[23:55:19] ===================== [PASSED] drm_mm ======================
[23:55:19] ============= drm_modes_analog_tv (5 subtests) =============
[23:55:19] [PASSED] drm_test_modes_analog_tv_mono_576i
[23:55:19] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[23:55:19] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[23:55:19] [PASSED] drm_test_modes_analog_tv_pal_576i
[23:55:19] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[23:55:19] =============== [PASSED] drm_modes_analog_tv ===============
[23:55:19] ============== drm_panic_helper (3 subtests) ===============
[23:55:19] ============= drm_test_panic_screen_user_map ==============
[23:55:19] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[23:55:19] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[23:55:19] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[23:55:19] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[23:55:19] ========= [PASSED] drm_test_panic_screen_user_map ==========
[23:55:19] ============= drm_test_panic_screen_user_page =============
[23:55:19] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[23:55:19] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[23:55:19] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[23:55:19] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[23:55:19] ========= [PASSED] drm_test_panic_screen_user_page =========
[23:55:19] ========== drm_test_panic_screen_user_set_pixel ===========
[23:55:19] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[23:55:19] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[23:55:19] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[23:55:19] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[23:55:19] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[23:55:19] ====== [PASSED] drm_test_panic_screen_user_set_pixel =======
[23:55:19] ================ [PASSED] drm_panic_helper =================
[23:55:19] ============== drm_plane_helper (2 subtests) ===============
[23:55:19] =============== drm_test_check_plane_state ================
[23:55:19] [PASSED] clipping_simple
[23:55:19] [PASSED] clipping_rotate_reflect
[23:55:19] [PASSED] positioning_simple
[23:55:19] [PASSED] upscaling
[23:55:19] [PASSED] downscaling
[23:55:19] [PASSED] rounding1
[23:55:19] [PASSED] rounding2
[23:55:19] [PASSED] rounding3
[23:55:19] [PASSED] rounding4
[23:55:19] =========== [PASSED] drm_test_check_plane_state ============
[23:55:19] =========== drm_test_check_invalid_plane_state ============
[23:55:19] [PASSED] positioning_invalid
[23:55:19] [PASSED] upscaling_invalid
[23:55:19] [PASSED] downscaling_invalid
[23:55:19] ======= [PASSED] drm_test_check_invalid_plane_state ========
[23:55:19] ================ [PASSED] drm_plane_helper =================
[23:55:19] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[23:55:19] ====== drm_test_connector_helper_tv_get_modes_check =======
[23:55:19] [PASSED] None
[23:55:19] [PASSED] PAL
[23:55:19] [PASSED] NTSC
[23:55:19] [PASSED] Both, NTSC Default
[23:55:19] [PASSED] Both, PAL Default
[23:55:19] [PASSED] Both, NTSC Default, with PAL on command-line
[23:55:19] [PASSED] Both, PAL Default, with NTSC on command-line
[23:55:19] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[23:55:19] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[23:55:19] ================== drm_rect (9 subtests) ===================
[23:55:19] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[23:55:19] [PASSED] drm_test_rect_clip_scaled_not_clipped
[23:55:19] [PASSED] drm_test_rect_clip_scaled_clipped
[23:55:19] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[23:55:19] ================= drm_test_rect_intersect =================
[23:55:19] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[23:55:19] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[23:55:19] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[23:55:19] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[23:55:19] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[23:55:19] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[23:55:19] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[23:55:19] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[23:55:19] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[23:55:19] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[23:55:19] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[23:55:19] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[23:55:19] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[23:55:19] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[23:55:19] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[23:55:19] ============= [PASSED] drm_test_rect_intersect =============
[23:55:19] ================ drm_test_rect_calc_hscale ================
[23:55:19] [PASSED] normal use
[23:55:19] [PASSED] out of max range
[23:55:19] [PASSED] out of min range
[23:55:19] [PASSED] zero dst
[23:55:19] [PASSED] negative src
[23:55:19] [PASSED] negative dst
[23:55:19] ============ [PASSED] drm_test_rect_calc_hscale ============
[23:55:19] ================ drm_test_rect_calc_vscale ================
[23:55:19] [PASSED] normal use
[23:55:19] [PASSED] out of max range
[23:55:19] [PASSED] out of min range
[23:55:19] [PASSED] zero dst
[23:55:19] [PASSED] negative src
[23:55:19] [PASSED] negative dst
[23:55:19] ============ [PASSED] drm_test_rect_calc_vscale ============
[23:55:19] ================== drm_test_rect_rotate ===================
[23:55:19] [PASSED] reflect-x
[23:55:19] [PASSED] reflect-y
[23:55:19] [PASSED] rotate-0
[23:55:19] [PASSED] rotate-90
[23:55:19] [PASSED] rotate-180
[23:55:19] [PASSED] rotate-270
[23:55:19] ============== [PASSED] drm_test_rect_rotate ===============
[23:55:19] ================ drm_test_rect_rotate_inv =================
[23:55:19] [PASSED] reflect-x
[23:55:19] [PASSED] reflect-y
[23:55:19] [PASSED] rotate-0
[23:55:19] [PASSED] rotate-90
[23:55:19] [PASSED] rotate-180
[23:55:19] [PASSED] rotate-270
[23:55:19] ============ [PASSED] drm_test_rect_rotate_inv =============
[23:55:19] ==================== [PASSED] drm_rect =====================
[23:55:19] ============ drm_sysfb_modeset_test (1 subtest) ============
[23:55:19] ============ drm_test_sysfb_build_fourcc_list =============
[23:55:19] [PASSED] no native formats
[23:55:19] [PASSED] XRGB8888 as native format
[23:55:19] [PASSED] remove duplicates
[23:55:19] [PASSED] convert alpha formats
[23:55:19] [PASSED] random formats
[23:55:19] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[23:55:19] ============= [PASSED] drm_sysfb_modeset_test ==============
[23:55:19] ================== drm_fixp (2 subtests) ===================
[23:55:19] [PASSED] drm_test_int2fixp
[23:55:19] [PASSED] drm_test_sm2fixp
[23:55:19] ==================== [PASSED] drm_fixp =====================
[23:55:19] ============================================================
[23:55:19] Testing complete. Ran 667 tests: passed: 667
[23:55:19] Elapsed time: 27.220s total, 1.883s configuring, 24.871s building, 0.452s 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
[23:55:19] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[23:55:21] 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
[23:55:31] Starting KUnit Kernel (1/1)...
[23:55:31] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[23:55:31] ================= ttm_device (5 subtests) ==================
[23:55:31] [PASSED] ttm_device_init_basic
[23:55:31] [PASSED] ttm_device_init_multiple
[23:55:31] [PASSED] ttm_device_fini_basic
[23:55:31] [PASSED] ttm_device_init_no_vma_man
[23:55:31] ================== ttm_device_init_pools ==================
[23:55:31] [PASSED] No DMA allocations, no DMA32 required
[23:55:31] [PASSED] DMA allocations, DMA32 required
[23:55:31] [PASSED] No DMA allocations, DMA32 required
[23:55:31] [PASSED] DMA allocations, no DMA32 required
[23:55:31] ============== [PASSED] ttm_device_init_pools ==============
[23:55:31] =================== [PASSED] ttm_device ====================
[23:55:31] ================== ttm_pool (8 subtests) ===================
[23:55:31] ================== ttm_pool_alloc_basic ===================
[23:55:31] [PASSED] One page
[23:55:31] [PASSED] More than one page
[23:55:31] [PASSED] Above the allocation limit
[23:55:31] [PASSED] One page, with coherent DMA mappings enabled
[23:55:31] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[23:55:31] ============== [PASSED] ttm_pool_alloc_basic ===============
[23:55:31] ============== ttm_pool_alloc_basic_dma_addr ==============
[23:55:31] [PASSED] One page
[23:55:31] [PASSED] More than one page
[23:55:31] [PASSED] Above the allocation limit
[23:55:31] [PASSED] One page, with coherent DMA mappings enabled
[23:55:31] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[23:55:31] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[23:55:31] [PASSED] ttm_pool_alloc_order_caching_match
[23:55:31] [PASSED] ttm_pool_alloc_caching_mismatch
[23:55:31] [PASSED] ttm_pool_alloc_order_mismatch
[23:55:31] [PASSED] ttm_pool_free_dma_alloc
[23:55:31] [PASSED] ttm_pool_free_no_dma_alloc
[23:55:31] [PASSED] ttm_pool_fini_basic
[23:55:31] ==================== [PASSED] ttm_pool =====================
[23:55:31] ================ ttm_resource (8 subtests) =================
[23:55:31] ================= ttm_resource_init_basic =================
[23:55:31] [PASSED] Init resource in TTM_PL_SYSTEM
[23:55:31] [PASSED] Init resource in TTM_PL_VRAM
[23:55:31] [PASSED] Init resource in a private placement
[23:55:31] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[23:55:31] ============= [PASSED] ttm_resource_init_basic =============
[23:55:31] [PASSED] ttm_resource_init_pinned
[23:55:31] [PASSED] ttm_resource_fini_basic
[23:55:31] [PASSED] ttm_resource_manager_init_basic
[23:55:31] [PASSED] ttm_resource_manager_usage_basic
[23:55:31] [PASSED] ttm_resource_manager_set_used_basic
[23:55:31] [PASSED] ttm_sys_man_alloc_basic
[23:55:31] [PASSED] ttm_sys_man_free_basic
[23:55:31] ================== [PASSED] ttm_resource ===================
[23:55:31] =================== ttm_tt (15 subtests) ===================
[23:55:31] ==================== ttm_tt_init_basic ====================
[23:55:31] [PASSED] Page-aligned size
[23:55:31] [PASSED] Extra pages requested
[23:55:31] ================ [PASSED] ttm_tt_init_basic ================
[23:55:31] [PASSED] ttm_tt_init_misaligned
[23:55:31] [PASSED] ttm_tt_fini_basic
[23:55:31] [PASSED] ttm_tt_fini_sg
[23:55:31] [PASSED] ttm_tt_fini_shmem
[23:55:31] [PASSED] ttm_tt_create_basic
[23:55:31] [PASSED] ttm_tt_create_invalid_bo_type
[23:55:31] [PASSED] ttm_tt_create_ttm_exists
[23:55:31] [PASSED] ttm_tt_create_failed
[23:55:31] [PASSED] ttm_tt_destroy_basic
[23:55:31] [PASSED] ttm_tt_populate_null_ttm
[23:55:31] [PASSED] ttm_tt_populate_populated_ttm
[23:55:31] [PASSED] ttm_tt_unpopulate_basic
[23:55:31] [PASSED] ttm_tt_unpopulate_empty_ttm
[23:55:31] [PASSED] ttm_tt_swapin_basic
[23:55:31] ===================== [PASSED] ttm_tt ======================
[23:55:31] =================== ttm_bo (14 subtests) ===================
[23:55:31] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[23:55:31] [PASSED] Cannot be interrupted and sleeps
[23:55:31] [PASSED] Cannot be interrupted, locks straight away
[23:55:31] [PASSED] Can be interrupted, sleeps
[23:55:31] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[23:55:31] [PASSED] ttm_bo_reserve_locked_no_sleep
[23:55:31] [PASSED] ttm_bo_reserve_no_wait_ticket
[23:55:31] [PASSED] ttm_bo_reserve_double_resv
[23:55:31] [PASSED] ttm_bo_reserve_interrupted
[23:55:31] [PASSED] ttm_bo_reserve_deadlock
[23:55:31] [PASSED] ttm_bo_unreserve_basic
[23:55:31] [PASSED] ttm_bo_unreserve_pinned
[23:55:31] [PASSED] ttm_bo_unreserve_bulk
[23:55:31] [PASSED] ttm_bo_fini_basic
[23:55:31] [PASSED] ttm_bo_fini_shared_resv
[23:55:31] [PASSED] ttm_bo_pin_basic
[23:55:31] [PASSED] ttm_bo_pin_unpin_resource
[23:55:31] [PASSED] ttm_bo_multiple_pin_one_unpin
[23:55:31] ===================== [PASSED] ttm_bo ======================
[23:55:31] ============== ttm_bo_validate (22 subtests) ===============
[23:55:31] ============== ttm_bo_init_reserved_sys_man ===============
[23:55:31] [PASSED] Buffer object for userspace
[23:55:31] [PASSED] Kernel buffer object
[23:55:31] [PASSED] Shared buffer object
[23:55:31] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[23:55:31] ============== ttm_bo_init_reserved_mock_man ==============
[23:55:31] [PASSED] Buffer object for userspace
[23:55:31] [PASSED] Kernel buffer object
[23:55:31] [PASSED] Shared buffer object
[23:55:31] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[23:55:31] [PASSED] ttm_bo_init_reserved_resv
[23:55:31] ================== ttm_bo_validate_basic ==================
[23:55:31] [PASSED] Buffer object for userspace
[23:55:31] [PASSED] Kernel buffer object
[23:55:31] [PASSED] Shared buffer object
[23:55:31] ============== [PASSED] ttm_bo_validate_basic ==============
[23:55:31] [PASSED] ttm_bo_validate_invalid_placement
[23:55:31] ============= ttm_bo_validate_same_placement ==============
[23:55:31] [PASSED] System manager
[23:55:31] [PASSED] VRAM manager
[23:55:31] ========= [PASSED] ttm_bo_validate_same_placement ==========
[23:55:31] [PASSED] ttm_bo_validate_failed_alloc
[23:55:31] [PASSED] ttm_bo_validate_pinned
[23:55:31] [PASSED] ttm_bo_validate_busy_placement
[23:55:31] ================ ttm_bo_validate_multihop =================
[23:55:31] [PASSED] Buffer object for userspace
[23:55:31] [PASSED] Kernel buffer object
[23:55:31] [PASSED] Shared buffer object
[23:55:31] ============ [PASSED] ttm_bo_validate_multihop =============
[23:55:31] ========== ttm_bo_validate_no_placement_signaled ==========
[23:55:31] [PASSED] Buffer object in system domain, no page vector
[23:55:31] [PASSED] Buffer object in system domain with an existing page vector
[23:55:31] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[23:55:31] ======== ttm_bo_validate_no_placement_not_signaled ========
[23:55:31] [PASSED] Buffer object for userspace
[23:55:31] [PASSED] Kernel buffer object
[23:55:31] [PASSED] Shared buffer object
[23:55:31] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[23:55:31] [PASSED] ttm_bo_validate_move_fence_signaled
[23:55:32] ========= ttm_bo_validate_move_fence_not_signaled =========
[23:55:32] [PASSED] Waits for GPU
[23:55:32] [PASSED] Tries to lock straight away
[23:55:32] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[23:55:32] [PASSED] ttm_bo_validate_swapout
[23:55:32] [PASSED] ttm_bo_validate_happy_evict
[23:55:32] [PASSED] ttm_bo_validate_all_pinned_evict
[23:55:32] [PASSED] ttm_bo_validate_allowed_only_evict
[23:55:32] [PASSED] ttm_bo_validate_deleted_evict
[23:55:32] [PASSED] ttm_bo_validate_busy_domain_evict
[23:55:32] [PASSED] ttm_bo_validate_evict_gutting
[23:55:32] [PASSED] ttm_bo_validate_recrusive_evict
[23:55:32] ================= [PASSED] ttm_bo_validate =================
[23:55:32] ============================================================
[23:55:32] Testing complete. Ran 102 tests: passed: 102
[23:55:32] Elapsed time: 12.121s total, 1.855s configuring, 10.001s building, 0.231s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/dma-buf/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[23:55:32] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[23:55:34] 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
[23:55:42] Starting KUnit Kernel (1/1)...
[23:55:42] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[23:55:42] =============== dma-buf-fence (12 subtests) ================
[23:55:42] [PASSED] test_sanitycheck
[23:55:42] [PASSED] test_signaling
[23:55:42] [PASSED] test_add_callback
[23:55:42] [PASSED] test_late_add_callback
[23:55:42] [PASSED] test_rm_callback
[23:55:42] [PASSED] test_late_rm_callback
[23:55:42] [PASSED] test_status
[23:55:42] [PASSED] test_error
[23:55:42] [PASSED] test_wait
[23:55:42] [PASSED] test_wait_timeout
[23:55:42] [PASSED] test_stub
[23:55:42] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[23:55:42] ================== [PASSED] dma-buf-fence ==================
[23:55:42] ============ dma-buf-fence-chain (11 subtests) =============
[23:55:42] [PASSED] test_sanitycheck
[23:55:42] [PASSED] test_find_seqno
[23:55:42] [PASSED] test_find_signaled
[23:55:42] [PASSED] test_find_out_of_order
[23:55:48] [PASSED] test_find_gap
[23:55:48] [PASSED] test_find_race
[23:55:48] [PASSED] test_signal_forward
[23:55:48] [PASSED] test_signal_backward
[23:55:48] [PASSED] test_wait_forward
[23:55:48] [PASSED] test_wait_backward
[23:55:48] [PASSED] test_wait_random
[23:55:48] =============== [PASSED] dma-buf-fence-chain ===============
[23:55:48] ============ dma-buf-fence-unwrap (11 subtests) ============
[23:55:48] [PASSED] test_sanitycheck
[23:55:48] [PASSED] test_unwrap_array
[23:55:48] [PASSED] test_unwrap_chain
[23:55:48] [PASSED] test_unwrap_chain_array
[23:55:48] [PASSED] test_unwrap_merge
[23:55:48] [PASSED] test_unwrap_merge_duplicate
[23:55:48] [PASSED] test_unwrap_merge_seqno
[23:55:48] [PASSED] test_unwrap_merge_order
[23:55:48] [PASSED] test_unwrap_merge_complex
[23:55:48] [PASSED] test_unwrap_merge_complex_seqno
[23:55:48] [PASSED] test_dedup_empty
[23:55:48] ============== [PASSED] dma-buf-fence-unwrap ===============
[23:55:48] ================ dma-buf-resv (5 subtests) =================
[23:55:48] [PASSED] test_sanitycheck
[23:55:48] ===================== test_signaling ======================
[23:55:48] [PASSED] kernel
[23:55:48] [PASSED] write
[23:55:48] [PASSED] read
[23:55:48] [PASSED] bookkeep
[23:55:48] ================= [PASSED] test_signaling ==================
[23:55:48] ====================== test_for_each ======================
[23:55:48] [PASSED] kernel
[23:55:48] [PASSED] write
[23:55:48] [PASSED] read
[23:55:48] [PASSED] bookkeep
[23:55:48] ================== [PASSED] test_for_each ==================
[23:55:48] ================= test_for_each_unlocked ==================
[23:55:48] [PASSED] kernel
[23:55:48] [PASSED] write
[23:55:48] [PASSED] read
[23:55:48] [PASSED] bookkeep
[23:55:48] ============= [PASSED] test_for_each_unlocked ==============
[23:55:48] ===================== test_get_fences =====================
[23:55:48] [PASSED] kernel
[23:55:48] [PASSED] write
[23:55:48] [PASSED] read
[23:55:48] [PASSED] bookkeep
[23:55:48] ================= [PASSED] test_get_fences =================
[23:55:48] ================== [PASSED] dma-buf-resv ===================
[23:55:48] ============================================================
[23:55:48] Testing complete. Ran 51 tests: passed: 50, skipped: 1
[23:55:48] Elapsed time: 15.908s total, 1.836s configuring, 8.801s building, 5.257s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 2/3] drm/xe/oa: Gate OA buffer mmap faults
2026-10-30 23:38 ` [PATCH v3 2/3] drm/xe/oa: Gate OA buffer mmap faults Umesh Nerlige Ramappa
@ 2026-10-30 23:58 ` sashiko-bot
0 siblings, 0 replies; 8+ messages in thread
From: sashiko-bot @ 2026-10-30 23:58 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 ed8b71dc76a867bf05d811e39433598fc6bd1502
Author: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
drm/xe/oa: Gate OA buffer mmap faults
This commit exposes xe_bo_cpu_fault() and xe_bo_vm_access() and introduces
xe_oa_buffer_fault() and xe_oa_vm_ops to return VM_FAULT_SIGBUS on OA buffer
page faults once stream->dead is set.
> 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]
As reported by Sashiko on v2 [1], can a page fault on a mapped OA buffer
racing with device unplug, reset, or wedging bypass the VM_FAULT_SIGBUS gate
in xe_oa_buffer_fault() and install dummy pages via xe_bo_cpu_fault()
instead?
In xe_oa_buffer_fault(), READ_ONCE(stream->dead) (and in the follow-up
commit "drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset",
drm_dev_is_unplugged(&stream->oa->xe->drm)) is checked locklessly outside
the drm_dev_enter() SRCU critical section before calling
xe_bo_cpu_fault(vmf):
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() just before
drm_dev_unplug() sets dev->unplugged = true in xe_device_remove(),
drm_dev_enter() in xe_bo_cpu_fault() returns false without holding
drm_unplug_srcu and calls ttm_bo_vm_dummy_page(). Because drm_unplug_srcu is
not held, synchronize_srcu(&drm_unplug_srcu) in drm_dev_unplug() does not
wait for the fault, allowing unmap_mapping_range() in drm_dev_unplug() and
drm_vma_node_unmap() in xe_oa_quiesce_oa_unit() to complete before
ttm_bo_vm_dummy_page() finishes prefaulting dummy zero-page PTEs across
[vma->vm_start, vma->vm_end) and returning VM_FAULT_NOPAGE.
Similarly, when the device is wedged via xe_wedge_declare() or
prepare_device_for_reset() (in xe_pci_error_detected() prior to
xe_pci_error_slot_reset()), xe_wedged(xe) is true while stream->dead and
dev->unplugged are still false, so a fault passes xe_oa_buffer_fault() and
hits ttm_bo_vm_dummy_page() in xe_bo_cpu_fault().
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, dereferencing &stream->oa->xe->drm
will hit 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]
As reported by Sashiko on v2 [2], does wiring xe_oa_vm_ops.access directly
to xe_bo_vm_access() allow userspace to bypass the stream->dead check and
also write to the read-only OA buffer mapping?
Because xe_oa_mmap() sets VM_PFNMAP (and drm_gem_mmap_obj() /
ttm_bo_mmap_obj() sets VM_IO | VM_PFNMAP), accesses through /proc/<pid>/mem,
ptrace(PTRACE_PEEKDATA), process_vm_readv(), or process_vm_writev() fail
get_user_page_vma_remote() in __access_remote_vm() and fall back to
vma->vm_ops->access():
__access_remote_vm()
-> vma->vm_ops->access()
-> xe_bo_vm_access()
-> guard(xe_pm_runtime)(xe)
-> ttm_bo_vm_access()
-> ttm_bo_access()
-> xe_ttm_access_memory()
Because vma->vm_private_data holds a GEM reference to struct xe_bo until
munmap, calling xe_bo_vm_access() after stream->dead is set during PCI
unbind/remove unconditionally takes a runtime PM reference and accesses the
torn-down OA buffer BO. If the OA buffer was allocated in VRAM
(mert_wa_14026633728) and vram_fini() has already cleared
tile->mem.vram->mapping to NULL on unbind, xe_ttm_access_memory() will
dereference a NULL vram->mapping pointer.
Furthermore, although xe_oa_mmap() enforces a read-only mapping by rejecting
VM_WRITE and clearing VM_MAYWRITE, __access_remote_vm() with FOLL_WRITE
invokes vma->vm_ops->access() with write = 1 when get_user_page_vma_remote()
fails, and neither xe_oa_vm_ops nor xe_bo_vm_access() / ttm_bo_vm_access()
rejects write != 0. Should xe_oa_vm_ops wrap or omit .access so dead streams
and write accesses are rejected?
[1] https://lore.kernel.org/r/20261030223056.2266638-7-umesh.nerlige.ramappa@intel.com
[2] https://lore.kernel.org/r/20261030223056.2266638-7-umesh.nerlige.ramappa@intel.com
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261030233839.2284694-5-umesh.nerlige.ramappa@intel.com?part=2
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 3/3] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset
2026-10-30 23:38 ` [PATCH v3 3/3] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset Umesh Nerlige Ramappa
@ 2026-10-31 0:04 ` sashiko-bot
0 siblings, 0 replies; 8+ messages in thread
From: sashiko-bot @ 2026-10-31 0:04 UTC (permalink / raw)
To: Umesh Nerlige Ramappa, intel-xe
Thank you for your contribution! Sashiko AI review found 5 potential issue(s) to consider:
- [High] drm/xe/oa: NULL deref and dummy page race in xe_oa_buffer_fault()
- [High] drm/xe/oa: race between in-flight observation ioctls and xe_oa_fini()
- [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: unwaited LRI job in xe_oa_quiesce_oa_unit() races devres teardown
--
commit 57d7033e8652d53b8521bba4a5103beb77f1ab8d
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 clean up active OA stream hardware state
and device-bound resources during driver unbind or PCI reset while keeping the
stream structure allocated until the file descriptor is closed. It also adds
stream->mmap_mutex to avoid a lock ordering inversion between mmap_lock and
stream_lock and introduces a per-GT quiesced flag to block new streams during
teardown.
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index 4916101fce541..f737ae4976a82 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]
As reported by Sashiko on v2 [1], can xe_oa_buffer_fault() dereference a NULL
pointer or still install a dummy page when racing with device removal?
In drivers/gpu/drm/xe/xe_oa.c, xe_oa_buffer_fault() runs without holding
stream_lock, mmap_mutex, or gt_lock. If a fault evaluates
READ_ONCE(stream->dead) as false just before xe_oa_quiesce_oa_unit() sets
stream->dead = true, and xe_oa_fini() completes and sets oa->xe = NULL before
the second operand of the logical OR is evaluated:
xe_oa_fini()
xe_oa_quiesce(xe);
...
oa->xe = NULL;
then &stream->oa->xe->drm evaluates to NULL (since drm is at offset 0 of
struct xe_device), and drm_dev_is_unplugged(NULL) calls drm_dev_enter(NULL,
&idx), dereferencing a NULL pointer (whereas xe_oa_mmap(),
xe_oa_destroy_locked(), and xe_oa_release() use gt_to_xe(stream->gt)).
Additionally, drm_dev_is_unplugged() immediately drops its SRCU read lock via
drm_dev_exit(). If drm_dev_unplug() and drm_vma_node_unmap() run between
drm_dev_is_unplugged() in xe_oa_buffer_fault() and drm_dev_enter() in
xe_bo_cpu_fault(), or if the device was marked wedged prior to unplug (such as
in xe_pci_error_detected()), xe_bo_cpu_fault() hits:
if (xe_wedged(xe) || !drm_dev_enter(&xe->drm, &idx))
return ttm_bo_vm_dummy_page(vmf, vmf->vma->vm_page_prot);
Would that still install 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]
As reported by Sashiko on v2 [2], does leaving .access wired directly to
xe_bo_vm_access in xe_oa_vm_ops allow userspace to access the OA buffer and
device state after xe_oa_quiesce()?
When xe_oa_quiesce_oa_unit() calls drm_vma_node_unmap(), PTEs are zapped, but
any existing userspace VMA remains open with VM_PFNMAP set and retains a GEM
reference on stream->oa_buffer.bo in vma->vm_private_data. If userspace reads
the mapping via /proc/self/mem, process_vm_readv(), or ptrace after
xe_oa_quiesce(), get_user_pages() receives VM_FAULT_SIGBUS from
xe_oa_buffer_fault() and __access_remote_vm() falls back to
vma->vm_ops->access(), calling xe_bo_vm_access():
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);
struct xe_device *xe = xe_bo_device(bo);
guard(xe_pm_runtime)(xe);
return ttm_bo_vm_access(vma, addr, buf, len, write);
}
Because xe_bo_vm_access() does not check stream->dead or drm_dev_enter(), can
this acquire runtime PM after xe_pm_fini() and, when the OA buffer is in VRAM
under mert_wa_14026633728, dereference vram->mapping in xe_ttm_access_memory()
after vram_fini() has cleared and unmapped it?
[ ... ]
> @@ -2617,6 +2689,97 @@ 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);
> + if (stream->enabled && hw_accessible)
> + xe_oa_disable_locked(stream);
> +
> + stream->enabled = false;
> +
> + /*
> + * Once dead is set under mmap_mutex, no new xe_oa_mmap() can reference the OA buffer.
> + * Don't hold mmap_mutex any longer than that: it nests under mmap_lock, and the HW
> + * teardown below submits batches, taking vm->lock and the vm resv.
> + */
> + mutex_lock(&stream->mmap_mutex);
> + spin_lock_irqsave(&stream->oa_buffer.ptr_lock, flags);
> + WRITE_ONCE(stream->dead, true);
> + spin_unlock_irqrestore(&stream->oa_buffer.ptr_lock, flags);
> + mutex_unlock(&stream->mmap_mutex);
> +
> + 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);
[Severity: High]
As reported by Sashiko on v2 [3], when stream->exec_q is set, does
xe_oa_stream_hw_teardown() submit an asynchronous batchbuffer job without
waiting for it to complete before devres tears down GuC submission and fence
IRQs?
In xe_oa_quiesce_oa_unit(), xe_oa_stream_hw_teardown() calls
xe_oa_disable_metric_set(), which calls:
if (stream->exec_q)
xe_oa_configure_oa_context(stream, false);
xe_oa_configure_oa_context() -> xe_oa_load_with_lri() submits a batchbuffer on
stream->exec_q via xe_oa_submit_bb(), passes the unsignaled fence to
xe_bb_free(bb, fence), and returns immediately without waiting for completion:
fence = xe_oa_submit_bb(stream, XE_OA_SUBMIT_NO_DEPS, bb);
if (IS_ERR(fence)) {
err = PTR_ERR(fence);
goto free_bb;
}
xe_bb_free(bb, fence);
dma_fence_put(fence);
xe_oa_stream_hw_teardown() and xe_oa_quiesce_oa_unit() then immediately drop
forcewake, the runtime PM reference, and stream->exec_q, and devres proceeds
directly to guc_submit_fini() and xe_gt_fini() -> xe_hw_fence_irq_finish().
Can that leave the job's fence pending in irq->pending when
xe_hw_fence_irq_finish() checks XE_WARN_ON(!list_empty(&irq->pending)), or arm
the fence after xe_hw_fence_irq_finish() has already run?
> +
> + xe_oa_stream_free_resources(stream);
[Severity: High]
As reported by Sashiko on v2 [4], if userspace has an active mmap VMA on the
OA stream across driver unbind or PCI slot reset, does unpinning
stream->oa_buffer.bo here leave the BO neither evicted nor DMA-unmapped after
PCI device removal?
In xe_oa_mmap_locked(), drm_gem_mmap_obj() takes a GEM reference on
stream->oa_buffer.bo that is held until ttm_bo_vm_close() runs when the VMA is
closed. On remove:
1. xe_device_remove() calls xe_bo_pci_dev_remove_all(xe). Because xe_oa_fini()
is a devm callback that has not run yet, stream->oa_buffer.bo still has
pin_count == 1, so ttm_resource_manager_evict_all() skips it and
xe_bo_pci_dev_remove_pinned() only unmaps xe->pinned.late.external.
2. During devres release, xe_oa_fini() runs before xe_bo_pinned_fini().
drm_vma_node_unmap() only zaps PTEs without closing the VMA, and
xe_oa_stream_free_resources() -> xe_oa_free_oa_buffer() calls
xe_bo_unpin_map_no_vm(stream->oa_buffer.bo). That unpins the BO, removes
bo->pinned_link from xe->pinned.early.kernel_bo_present, and drops the
stream's BO reference, but the BO stays alive because the VMA still holds a
reference.
3. When xe_bo_pinned_fini() then runs, stream->oa_buffer.bo is no longer on
xe->pinned.early.kernel_bo_present, so xe_bo_dma_unmap_pinned() never runs on
it either.
Doesn't this leave the OA buffer's DMA mapping and TTM resource active after
the PCI device is removed until userspace eventually unmaps the VMA?
[ ... ]
> @@ -2928,6 +3091,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);
>
[Severity: High]
As reported by Sashiko on v2 [5], can an in-flight observation ioctl that
entered drm_ioctl() before drm_dev_unplug() race with xe_oa_fini()
destroying oa->metrics_idr and setting oa->xe = NULL?
While xe_oa_stream_open_ioctl_locked() checks param->hwe->gt->oa.quiesced
under gt_lock, xe_oa_stream_open_ioctl() only checks !oa->xe unlocked at
entry before sleeping in copy_from_user() inside xe_oa_user_extensions() and
before acquiring gt_lock:
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 after the initial
check, can xe_oa_stream_open_ioctl() dereference NULL oa->xe in
xe_oa_lookup_oa_unit(), xe_root_mmio_gt(oa->xe), oa_unit_supports_oa_format(),
or drm_dbg(&oa->xe->drm, ...) in xe_oa_stream_open_ioctl_locked(), or read
MMIO in oa_exponent_to_ns() -> xe_oa_timestamp_frequency() before taking
gt_lock?
Similarly, since xe_oa_fini() destroys oa->metrics_idr without taking
oa->metrics_lock, can an in-flight xe_oa_add_config_ioctl() or
xe_oa_remove_config_ioctl() dereference NULL oa->xe in
xe_oa_is_valid_config_reg() or access oa->metrics_idr concurrently with
idr_destroy()?
[1] https://lore.kernel.org/r/20261030223056.2266638-8-umesh.nerlige.ramappa@intel.com
[2] https://lore.kernel.org/r/20261030223056.2266638-8-umesh.nerlige.ramappa@intel.com
[3] https://lore.kernel.org/r/20261030223056.2266638-8-umesh.nerlige.ramappa@intel.com
[4] https://lore.kernel.org/r/20261030223056.2266638-8-umesh.nerlige.ramappa@intel.com
[5] https://lore.kernel.org/r/20261030223056.2266638-8-umesh.nerlige.ramappa@intel.com
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261030233839.2284694-5-umesh.nerlige.ramappa@intel.com?part=3
^ permalink raw reply [flat|nested] 8+ messages in thread
* ✓ Xe.CI.BAT: success for Cleanup OA stream on PCI unbind/remove (rev2)
2026-10-30 23:38 [PATCH v3 0/3] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
` (3 preceding siblings ...)
2026-10-30 23:55 ` ✓ CI.KUnit: success for Cleanup OA stream on PCI unbind/remove (rev2) Patchwork
@ 2026-10-31 0:33 ` Patchwork
4 siblings, 0 replies; 8+ messages in thread
From: Patchwork @ 2026-10-31 0:33 UTC (permalink / raw)
To: Umesh Nerlige Ramappa; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 1432 bytes --]
== Series Details ==
Series: Cleanup OA stream on PCI unbind/remove (rev2)
URL : https://patchwork.freedesktop.org/series/177300/
State : success
== Summary ==
CI Bug Log - changes from xe-6036-238c1e3e984e2b7f948cb24165314b8d719a23d6_BAT -> xe-pw-177300v2_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-177300v2_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-177300v2/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-177300v2
IGT_9173: 9173
xe-6036-238c1e3e984e2b7f948cb24165314b8d719a23d6: 238c1e3e984e2b7f948cb24165314b8d719a23d6
xe-pw-177300v2: 177300v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-177300v2/index.html
[-- Attachment #2: Type: text/html, Size: 1997 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-10-31 0:33 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-30 23:38 [PATCH v3 0/3] Cleanup OA stream on PCI unbind/remove Umesh Nerlige Ramappa
2026-10-30 23:38 ` [PATCH v3 1/3] drm/xe/oa: Use the drm device address_space for the OA stream fd Umesh Nerlige Ramappa
2026-10-30 23:38 ` [PATCH v3 2/3] drm/xe/oa: Gate OA buffer mmap faults Umesh Nerlige Ramappa
2026-10-30 23:58 ` sashiko-bot
2026-10-30 23:38 ` [PATCH v3 3/3] drm/xe/oa: Quiesce OA streams on driver unbind and PCI reset Umesh Nerlige Ramappa
2026-10-31 0:04 ` sashiko-bot
2026-10-30 23:55 ` ✓ CI.KUnit: success for Cleanup OA stream on PCI unbind/remove (rev2) Patchwork
2026-10-31 0:33 ` ✓ Xe.CI.BAT: " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox