* [PATCH 00/12] Enable per exec queue MSI-X vector assignment
@ 2026-06-05 23:21 Stuart Summers
2026-06-05 23:21 ` [PATCH 01/12] drm/xe: Add kerneldoc to xe_wait_user_fence_ioctl() Stuart Summers
` (15 more replies)
0 siblings, 16 replies; 20+ messages in thread
From: Stuart Summers @ 2026-06-05 23:21 UTC (permalink / raw)
Cc: michal.wajdeczko, ilia.levi, x.wang, rodrigo.vivi, intel-xe,
alan.previn.teres.alexis, Stuart Summers
This series adds support for per exec queue MSI-X vector
assignment as well as a per exec queue wait queue in the
wait user fence ioctl. MSI-X vectors are dynamically assigned
during exec queue creation up to a set maximum. Once the max
is reached, everything else falls back to the default vector.
These dynamic vectors allow us to wake up a targeted wait
queue and user thread instead of broadcasting out to all
potential user threads like we're doing today. This is interesting
when we have many user threads outstanding as we don't want
to wake them up in a storm for each interrupt coming in.
Additionally, there have been changes in the memirq code lately
to isolate some of the interrupts handled here. Starting with
xe3p, however, we have new interrupts available for compute walker
post sync interrupts. Currently these are enabled for legacy MSI
use cases, but the bits are also available for MSI-X. Enable
those bits here.
Stuart Summers (12):
drm/xe: Add kerneldoc to xe_wait_user_fence_ioctl()
drm/xe: Handle NULL in xe_exec_queue_get_unless_zero()
drm/xe: Cap MSI-X vector count to XE_MSIX_MAX_VECS
drm/xe: Assign dedicated MSI-X vectors to exec queues
drm/xe: Add configfs max_msix_vecs attribute
drm/xe: Change MSI-X assignment failure to drm_dbg
drm/xe: Remove memirq status and source checks for engine interrupts
drm/xe: Add per-exec-queue user fence wait queue
drm/xe: Track all exec queues in a device-level ufence list
drm/xe: Hook up per queue thread wake to the unique MSI-X vector
allocation
drm/xe: Enable per-queue ufence wake in ioctl and wake function
drm/xe/memirq: Enable compute walker post-sync interrupt
drivers/gpu/drm/xe/regs/xe_lrc_layout.h | 3 +
drivers/gpu/drm/xe/xe_configfs.c | 71 ++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_configfs.h | 6 ++
drivers/gpu/drm/xe/xe_device.c | 2 +
drivers/gpu/drm/xe/xe_device_types.h | 11 ++++
drivers/gpu/drm/xe/xe_exec_queue.c | 47 +++++++++++++++-
drivers/gpu/drm/xe/xe_exec_queue.h | 2 +-
drivers/gpu/drm/xe/xe_exec_queue_types.h | 6 ++
drivers/gpu/drm/xe/xe_guc_submit.c | 6 +-
drivers/gpu/drm/xe/xe_hw_engine.c | 6 +-
drivers/gpu/drm/xe/xe_hw_engine.h | 3 +-
drivers/gpu/drm/xe/xe_irq.c | 38 +++++++++++--
drivers/gpu/drm/xe/xe_irq.h | 9 +++
drivers/gpu/drm/xe/xe_lrc.c | 15 ++++-
drivers/gpu/drm/xe/xe_memirq.c | 54 +++++++++---------
drivers/gpu/drm/xe/xe_memirq.h | 4 +-
drivers/gpu/drm/xe/xe_sync.c | 3 +-
drivers/gpu/drm/xe/xe_wait_user_fence.c | 64 ++++++++++++++++++++-
drivers/gpu/drm/xe/xe_wait_user_fence.h | 4 ++
19 files changed, 308 insertions(+), 46 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH 01/12] drm/xe: Add kerneldoc to xe_wait_user_fence_ioctl()
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
@ 2026-06-05 23:21 ` Stuart Summers
2026-06-05 23:21 ` [PATCH 02/12] drm/xe: Handle NULL in xe_exec_queue_get_unless_zero() Stuart Summers
` (14 subsequent siblings)
15 siblings, 0 replies; 20+ messages in thread
From: Stuart Summers @ 2026-06-05 23:21 UTC (permalink / raw)
Cc: michal.wajdeczko, ilia.levi, x.wang, rodrigo.vivi, intel-xe,
alan.previn.teres.alexis, Stuart Summers
Document the function use case and expectations. Planning
upcoming changes in this file that add some behavioral changes
to the wait queue implementation here, so having the documentation
up front is helpful when describing those upcoming changes.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: Copilot:claude-sonnet-4.6
---
drivers/gpu/drm/xe/xe_wait_user_fence.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_wait_user_fence.c b/drivers/gpu/drm/xe/xe_wait_user_fence.c
index 51eb940ceb4e..12ceb3efa8ea 100644
--- a/drivers/gpu/drm/xe/xe_wait_user_fence.c
+++ b/drivers/gpu/drm/xe/xe_wait_user_fence.c
@@ -97,6 +97,28 @@ static long to_jiffies_timeout(struct xe_device *xe,
return timeout ?: 1;
}
+/**
+ * xe_wait_user_fence_ioctl() - Wait on a user fence
+ * @dev: DRM device
+ * @data: pointer to a &drm_xe_wait_user_fence
+ * @file: DRM file
+ *
+ * Waits until the value at a user-provided memory address satisfies a
+ * comparison condition, or until a timeout expires. The comparison is
+ * performed as (@addr & @mask) OP @value, where OP is one of the
+ * %DRM_XE_UFENCE_WAIT_OP_* operators.
+ *
+ * If an exec queue ID is provided, the wait is aborted early if the
+ * queue enters a reset state. The device-level wait queue is used for
+ * wakeups.
+ *
+ * On return, @timeout is updated to reflect the remaining time (or zero
+ * on expiry), unless %DRM_XE_UFENCE_WAIT_FLAG_ABSTIME is set.
+ *
+ * Return: 0 on success, -ETIME if the timeout expired before the
+ * condition was met, -ERESTARTSYS if interrupted by a signal, -EIO if
+ * the exec queue was reset, or a negative error code on invalid input.
+ */
int xe_wait_user_fence_ioctl(struct drm_device *dev, void *data,
struct drm_file *file)
{
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 02/12] drm/xe: Handle NULL in xe_exec_queue_get_unless_zero()
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
2026-06-05 23:21 ` [PATCH 01/12] drm/xe: Add kerneldoc to xe_wait_user_fence_ioctl() Stuart Summers
@ 2026-06-05 23:21 ` Stuart Summers
2026-06-05 23:21 ` [PATCH 03/12] drm/xe: Cap MSI-X vector count to XE_MSIX_MAX_VECS Stuart Summers
` (13 subsequent siblings)
15 siblings, 0 replies; 20+ messages in thread
From: Stuart Summers @ 2026-06-05 23:21 UTC (permalink / raw)
Cc: michal.wajdeczko, ilia.levi, x.wang, rodrigo.vivi, intel-xe,
alan.previn.teres.alexis, Stuart Summers
The function currently dereferences @q unconditionally. Add a NULL
guard so callers can pass NULL without a crash, which simplifies
call sites that conditionally wrap the call.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: Copilot:claude-sonnet-4.6
---
drivers/gpu/drm/xe/xe_exec_queue.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_exec_queue.h b/drivers/gpu/drm/xe/xe_exec_queue.h
index 0225426c57b0..2624aa676517 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.h
+++ b/drivers/gpu/drm/xe/xe_exec_queue.h
@@ -38,7 +38,7 @@ void xe_exec_queue_assign_name(struct xe_exec_queue *q, u32 instance);
static inline struct xe_exec_queue *
xe_exec_queue_get_unless_zero(struct xe_exec_queue *q)
{
- if (kref_get_unless_zero(&q->refcount))
+ if (q && kref_get_unless_zero(&q->refcount))
return q;
return NULL;
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 03/12] drm/xe: Cap MSI-X vector count to XE_MSIX_MAX_VECS
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
2026-06-05 23:21 ` [PATCH 01/12] drm/xe: Add kerneldoc to xe_wait_user_fence_ioctl() Stuart Summers
2026-06-05 23:21 ` [PATCH 02/12] drm/xe: Handle NULL in xe_exec_queue_get_unless_zero() Stuart Summers
@ 2026-06-05 23:21 ` Stuart Summers
2026-06-05 23:21 ` [PATCH 04/12] drm/xe: Assign dedicated MSI-X vectors to exec queues Stuart Summers
` (12 subsequent siblings)
15 siblings, 0 replies; 20+ messages in thread
From: Stuart Summers @ 2026-06-05 23:21 UTC (permalink / raw)
Cc: michal.wajdeczko, ilia.levi, x.wang, rodrigo.vivi, intel-xe,
alan.previn.teres.alexis, Stuart Summers
Introduce XE_MSIX_MAX_VECS (1024) as a software cap on the total number
of MSI-X vectors the driver will use. We want a way to cap the number
of vectors separately from the PCIe capability. This way we can more
easily manage certain system-wide configurations that might differ
from the per-device level configuration.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: Copilot:claude-sonnet-4.6
---
drivers/gpu/drm/xe/xe_irq.c | 2 +-
drivers/gpu/drm/xe/xe_irq.h | 7 +++++++
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index 9e49e2241da4..3429bb305293 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -895,7 +895,7 @@ static int xe_irq_msix_init(struct xe_device *xe)
return nvec;
}
- xe->irq.msix.nvec = nvec;
+ xe->irq.msix.nvec = min_t(int, nvec, XE_MSIX_MAX_VECS);
xa_init_flags(&xe->irq.msix.indexes, XA_FLAGS_ALLOC);
return 0;
}
diff --git a/drivers/gpu/drm/xe/xe_irq.h b/drivers/gpu/drm/xe/xe_irq.h
index a28bd577ba52..5f48249dae8a 100644
--- a/drivers/gpu/drm/xe/xe_irq.h
+++ b/drivers/gpu/drm/xe/xe_irq.h
@@ -10,6 +10,13 @@
#define XE_IRQ_DEFAULT_MSIX 1
+/*
+ * Software cap on the total number of MSI-X vectors the driver will use.
+ * Allows the supported vectors to be managed independent of the PCI
+ * config space report.
+ */
+#define XE_MSIX_MAX_VECS 1024
+
struct xe_device;
struct xe_tile;
struct xe_gt;
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 04/12] drm/xe: Assign dedicated MSI-X vectors to exec queues
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
` (2 preceding siblings ...)
2026-06-05 23:21 ` [PATCH 03/12] drm/xe: Cap MSI-X vector count to XE_MSIX_MAX_VECS Stuart Summers
@ 2026-06-05 23:21 ` Stuart Summers
2026-06-05 23:21 ` [PATCH 05/12] drm/xe: Add configfs max_msix_vecs attribute Stuart Summers
` (11 subsequent siblings)
15 siblings, 0 replies; 20+ messages in thread
From: Stuart Summers @ 2026-06-05 23:21 UTC (permalink / raw)
Cc: michal.wajdeczko, ilia.levi, x.wang, rodrigo.vivi, intel-xe,
alan.previn.teres.alexis, Stuart Summers
Assign a dedicated MSI-X interrupt vector to each user exec queue at
creation time when the platform supports MSI-X. If allocation fails
for any other reason, the queue silently falls back to the shared
default MSI-X vector.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: Copilot:claude-sonnet-4.6
---
drivers/gpu/drm/xe/xe_device_types.h | 5 ++++
drivers/gpu/drm/xe/xe_exec_queue.c | 34 +++++++++++++++++++++++++++-
drivers/gpu/drm/xe/xe_irq.c | 27 ++++++++++++++++++++--
drivers/gpu/drm/xe/xe_irq.h | 2 ++
4 files changed, 65 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 32dd2ffbc796..ff15de34fd17 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -255,6 +255,11 @@ struct xe_device {
u16 nvec;
/** @irq.msix.indexes: used to allocate MSI-X indexes */
struct xarray indexes;
+ /**
+ * @irq.msix.vec_count: total number of MSI-X vectors
+ * currently allocated (static + dynamic)
+ */
+ atomic_t vec_count;
} msix;
} irq;
diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
index 1b5ca3ce578a..6c101b4f6488 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -16,6 +16,7 @@
#include "xe_bo.h"
#include "xe_dep_scheduler.h"
#include "xe_device.h"
+#include "xe_drv.h"
#include "xe_gt.h"
#include "xe_gt_sriov_pf.h"
#include "xe_gt_sriov_vf.h"
@@ -138,6 +139,34 @@ static void xe_exec_queue_group_cleanup(struct xe_exec_queue *q)
kfree(group);
}
+static void exec_queue_msix_init(struct xe_device *xe, struct xe_exec_queue *q)
+{
+ int err;
+ u16 msix;
+
+ if (!xe_device_has_msix(xe) || q->flags & EXEC_QUEUE_FLAG_KERNEL)
+ goto use_default;
+
+ err = xe_irq_msix_request_irq(xe, xe_irq_msix_hwe_handler, q,
+ DRIVER_NAME "-exec-queue", true, &msix);
+ if (err)
+ goto use_default;
+
+ q->msix_vec = msix;
+ return;
+
+use_default:
+ q->msix_vec = XE_IRQ_DEFAULT_MSIX;
+}
+
+static void exec_queue_msix_fini(struct xe_exec_queue *q)
+{
+ struct xe_device *xe = gt_to_xe(q->gt);
+
+ if (q->msix_vec != XE_IRQ_DEFAULT_MSIX)
+ xe_irq_msix_free_irq(xe, q->msix_vec);
+}
+
static void __xe_exec_queue_free(struct xe_exec_queue *q)
{
int i;
@@ -152,6 +181,8 @@ static void __xe_exec_queue_free(struct xe_exec_queue *q)
if (xe_exec_queue_is_multi_queue(q))
xe_exec_queue_group_cleanup(q);
+ exec_queue_msix_fini(q);
+
if (q->vm) {
xe_vm_remove_exec_queue(q->vm, q);
xe_vm_put(q->vm);
@@ -220,7 +251,6 @@ static struct xe_exec_queue *__xe_exec_queue_alloc(struct xe_device *xe,
q->gt = gt;
q->class = hwe->class;
q->width = width;
- q->msix_vec = XE_IRQ_DEFAULT_MSIX;
q->logical_mask = logical_mask;
q->fence_irq = >->fence_irq[hwe->class];
q->ring_ops = gt->ring_ops[hwe->class];
@@ -436,6 +466,8 @@ struct xe_exec_queue *xe_exec_queue_create(struct xe_device *xe, struct xe_vm *v
if (IS_ERR(q))
return q;
+ exec_queue_msix_init(xe, q);
+
err = __xe_exec_queue_init(q, flags);
if (err)
goto err_post_alloc;
diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index 3429bb305293..c84d2283dd6a 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -13,6 +13,7 @@
#include "regs/xe_irq_regs.h"
#include "xe_device.h"
#include "xe_drv.h"
+#include "xe_exec_queue.h"
#include "xe_gsc_proxy.h"
#include "xe_gt.h"
#include "xe_guc.h"
@@ -930,6 +931,19 @@ static irqreturn_t xe_irq_msix_default_hwe_handler(int irq, void *arg)
return IRQ_HANDLED;
}
+irqreturn_t xe_irq_msix_hwe_handler(int irq, void *arg)
+{
+ struct xe_exec_queue *q = arg;
+ struct xe_tile *tile = gt_to_tile(q->hwe->gt);
+
+ if (!atomic_read(&tile->xe->irq.enabled))
+ return IRQ_NONE;
+
+ xe_memirq_hwe_handler(&tile->memirq, q->hwe);
+
+ return IRQ_HANDLED;
+}
+
static int xe_irq_msix_alloc_vector(struct xe_device *xe, void *irq_buf,
bool dynamic_msix, u16 *msix)
{
@@ -976,18 +990,26 @@ int xe_irq_msix_request_irq(struct xe_device *xe, irq_handler_t handler, void *i
{
int ret;
+ if (!atomic_add_unless(&xe->irq.msix.vec_count, 1,
+ xe->irq.msix.nvec))
+ return -ENOSPC;
+
ret = xe_irq_msix_alloc_vector(xe, irq_buf, dynamic_msix, msix);
if (ret)
- return ret;
+ goto err_dec;
ret = xe_irq_msix_request_irq_internal(xe, handler, irq_buf, name, *msix);
if (ret) {
drm_err(&xe->drm, "Failed to request IRQ for MSI-X %u\n", *msix);
xe_irq_msix_release_vector(xe, *msix);
- return ret;
+ goto err_dec;
}
return 0;
+
+err_dec:
+ atomic_dec(&xe->irq.msix.vec_count);
+ return ret;
}
void xe_irq_msix_free_irq(struct xe_device *xe, u16 msix)
@@ -1008,6 +1030,7 @@ void xe_irq_msix_free_irq(struct xe_device *xe, u16 msix)
free_irq(irq, irq_buf);
xe_irq_msix_release_vector(xe, msix);
+ atomic_dec(&xe->irq.msix.vec_count);
}
int xe_irq_msix_request_irqs(struct xe_device *xe)
diff --git a/drivers/gpu/drm/xe/xe_irq.h b/drivers/gpu/drm/xe/xe_irq.h
index 5f48249dae8a..6c76004d6442 100644
--- a/drivers/gpu/drm/xe/xe_irq.h
+++ b/drivers/gpu/drm/xe/xe_irq.h
@@ -18,6 +18,7 @@
#define XE_MSIX_MAX_VECS 1024
struct xe_device;
+struct xe_exec_queue;
struct xe_tile;
struct xe_gt;
@@ -29,5 +30,6 @@ void xe_irq_enable_hwe(struct xe_gt *gt);
int xe_irq_msix_request_irq(struct xe_device *xe, irq_handler_t handler, void *irq_buf,
const char *name, bool dynamic_msix, u16 *msix);
void xe_irq_msix_free_irq(struct xe_device *xe, u16 msix);
+irqreturn_t xe_irq_msix_hwe_handler(int irq, void *arg);
#endif
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 05/12] drm/xe: Add configfs max_msix_vecs attribute
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
` (3 preceding siblings ...)
2026-06-05 23:21 ` [PATCH 04/12] drm/xe: Assign dedicated MSI-X vectors to exec queues Stuart Summers
@ 2026-06-05 23:21 ` Stuart Summers
2026-06-05 23:21 ` [PATCH 06/12] drm/xe: Change MSI-X assignment failure to drm_dbg Stuart Summers
` (10 subsequent siblings)
15 siblings, 0 replies; 20+ messages in thread
From: Stuart Summers @ 2026-06-05 23:21 UTC (permalink / raw)
Cc: michal.wajdeczko, ilia.levi, x.wang, rodrigo.vivi, intel-xe,
alan.previn.teres.alexis, Stuart Summers
Add a configfs attribute to cap the total number of MSI-X vectors used
by the driver. This intends to cover all assigned vectors.
This let's us configure at runtime (prior to driver load) how many
vectors we want to be able to allocate during driver runtime without
changing anything in the PCIe capabilities. For VMWARE and other use
cases where system-wide vector count is strictly maintained rather
than per-device maximums, this helps provide this configurability
by a system administrator.
Example to cap the driver to 64 MSI-X vectors total:
# echo 64 > /sys/kernel/config/xe/0000:03:00.0/max_msix_vecs
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: Copilot:claude-sonnet-4.6
---
drivers/gpu/drm/xe/xe_configfs.c | 71 ++++++++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_configfs.h | 6 +++
drivers/gpu/drm/xe/xe_irq.c | 5 ++-
3 files changed, 81 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 32102600a148..5dc1f8196fe1 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -237,6 +237,23 @@
*
* This setting only takes effect when probing the device.
*
+ * Max MSI-X exec queue vectors:
+ * ------------------------------
+ *
+ * Limit the total number of MSI-X vectors used by the driver. This cap is
+ * applied at device init time and covers all vectors: GuC-to-host, the
+ * shared default HWE vector, and any per-exec-queue dedicated vectors.
+ * Once the cap is reached, no additional dynamic vectors can be allocated
+ * and exec queues fall back to sharing the default vector. The value must
+ * be a non-zero positive integer; the default matches the compile-time
+ * limit (XE_MSIX_MAX_VECS).
+ *
+ * This attribute can only be set before binding to the device.
+ *
+ * Example to cap the driver to 64 MSI-X vectors total::
+ *
+ * # echo 64 > /sys/kernel/config/xe/0000:03:00.0/max_msix_vecs
+ *
* Remove devices
* ==============
*
@@ -262,6 +279,7 @@ struct xe_config_group_device {
struct wa_bb ctx_restore_mid_bb[XE_ENGINE_CLASS_MAX];
bool survivability_mode;
bool enable_psmi;
+ unsigned int max_msix_vecs;
struct {
unsigned int max_vfs;
bool admin_only_pf;
@@ -281,6 +299,7 @@ static const struct xe_config_device device_defaults = {
.engines_allowed = U64_MAX,
.survivability_mode = false,
.enable_psmi = false,
+ .max_msix_vecs = XE_MSIX_MAX_VECS,
.sriov = {
.max_vfs = XE_DEFAULT_MAX_VFS,
.admin_only_pf = XE_DEFAULT_ADMIN_ONLY_PF,
@@ -794,6 +813,35 @@ static ssize_t wa_bb_store(struct wa_bb wa_bb[static XE_ENGINE_CLASS_MAX],
return len;
}
+static ssize_t max_msix_vecs_show(struct config_item *item, char *page)
+{
+ struct xe_config_device *dev = to_xe_config_device(item);
+
+ return sprintf(page, "%u\n", dev->max_msix_vecs);
+}
+
+static ssize_t max_msix_vecs_store(struct config_item *item, const char *page, size_t len)
+{
+ struct xe_config_group_device *dev = to_xe_config_group_device(item);
+ unsigned int max_msix_vecs;
+ int ret;
+
+ ret = kstrtouint(page, 0, &max_msix_vecs);
+ if (ret)
+ return ret;
+
+ if (!max_msix_vecs || max_msix_vecs > XE_MSIX_MAX_VECS)
+ return -EINVAL;
+
+ guard(mutex)(&dev->lock);
+ if (is_bound(dev))
+ return -EBUSY;
+
+ dev->config.max_msix_vecs = max_msix_vecs;
+
+ return len;
+}
+
static ssize_t ctx_restore_mid_bb_store(struct config_item *item,
const char *data, size_t sz)
{
@@ -816,6 +864,7 @@ CONFIGFS_ATTR(, enable_psmi);
CONFIGFS_ATTR(, engines_allowed);
CONFIGFS_ATTR(, gt_types_allowed);
CONFIGFS_ATTR(, survivability_mode);
+CONFIGFS_ATTR(, max_msix_vecs);
static struct configfs_attribute *xe_config_device_attrs[] = {
&attr_ctx_restore_mid_bb,
@@ -824,6 +873,7 @@ static struct configfs_attribute *xe_config_device_attrs[] = {
&attr_engines_allowed,
&attr_gt_types_allowed,
&attr_survivability_mode,
+ &attr_max_msix_vecs,
NULL,
};
@@ -1099,6 +1149,7 @@ static void dump_custom_dev_config(struct pci_dev *pdev,
PRI_CUSTOM_ATTR("%llx", engines_allowed);
PRI_CUSTOM_ATTR("%d", enable_psmi);
PRI_CUSTOM_ATTR("%d", survivability_mode);
+ PRI_CUSTOM_ATTR("%u", max_msix_vecs);
PRI_CUSTOM_ATTR("%u", sriov.admin_only_pf);
#undef PRI_CUSTOM_ATTR
@@ -1277,6 +1328,26 @@ u32 xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
return len;
}
+/**
+ * xe_configfs_get_max_msix_vecs - get configfs max_msix_vecs setting
+ * @pdev: pci device
+ *
+ * Return: maximum total number of MSI-X vectors the driver may use
+ */
+unsigned int xe_configfs_get_max_msix_vecs(struct pci_dev *pdev)
+{
+ struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ unsigned int val;
+
+ if (!dev)
+ return device_defaults.max_msix_vecs;
+
+ val = dev->config.max_msix_vecs;
+ config_group_put(&dev->group);
+
+ return val;
+}
+
#ifdef CONFIG_PCI_IOV
/**
* xe_configfs_admin_only_pf() - Get PF's operational mode.
diff --git a/drivers/gpu/drm/xe/xe_configfs.h b/drivers/gpu/drm/xe/xe_configfs.h
index 07d62bf0c152..68115bff0fa0 100644
--- a/drivers/gpu/drm/xe/xe_configfs.h
+++ b/drivers/gpu/drm/xe/xe_configfs.h
@@ -10,6 +10,7 @@
#include "xe_defaults.h"
#include "xe_hw_engine_types.h"
+#include "xe_irq.h"
#include "xe_module.h"
struct pci_dev;
@@ -29,6 +30,7 @@ u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
u32 xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
enum xe_engine_class class,
const u32 **cs);
+unsigned int xe_configfs_get_max_msix_vecs(struct pci_dev *pdev);
#ifdef CONFIG_PCI_IOV
unsigned int xe_configfs_get_max_vfs(struct pci_dev *pdev);
bool xe_configfs_admin_only_pf(struct pci_dev *pdev);
@@ -48,6 +50,10 @@ static inline u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
static inline u32 xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
enum xe_engine_class class,
const u32 **cs) { return 0; }
+static inline unsigned int xe_configfs_get_max_msix_vecs(struct pci_dev *pdev)
+{
+ return XE_MSIX_MAX_VECS;
+}
#ifdef CONFIG_PCI_IOV
static inline unsigned int xe_configfs_get_max_vfs(struct pci_dev *pdev)
{
diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index c84d2283dd6a..40d3d43e492f 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -11,6 +11,7 @@
#include "display/xe_display.h"
#include "regs/xe_irq_regs.h"
+#include "xe_configfs.h"
#include "xe_device.h"
#include "xe_drv.h"
#include "xe_exec_queue.h"
@@ -896,7 +897,9 @@ static int xe_irq_msix_init(struct xe_device *xe)
return nvec;
}
- xe->irq.msix.nvec = min_t(int, nvec, XE_MSIX_MAX_VECS);
+ xe->irq.msix.nvec =
+ min_t(int, nvec, xe_configfs_get_max_msix_vecs(pdev));
+
xa_init_flags(&xe->irq.msix.indexes, XA_FLAGS_ALLOC);
return 0;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 06/12] drm/xe: Change MSI-X assignment failure to drm_dbg
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
` (4 preceding siblings ...)
2026-06-05 23:21 ` [PATCH 05/12] drm/xe: Add configfs max_msix_vecs attribute Stuart Summers
@ 2026-06-05 23:21 ` Stuart Summers
2026-06-06 10:57 ` Michal Wajdeczko
2026-06-05 23:21 ` [PATCH 07/12] drm/xe: Remove memirq status and source checks for engine interrupts Stuart Summers
` (9 subsequent siblings)
15 siblings, 1 reply; 20+ messages in thread
From: Stuart Summers @ 2026-06-05 23:21 UTC (permalink / raw)
Cc: michal.wajdeczko, ilia.levi, x.wang, rodrigo.vivi, intel-xe,
alan.previn.teres.alexis, Stuart Summers
Now that we have queue based MSI-X vectors and a user
can potentially create more queues than we have vectors
available, don't spam dmesg with drm_err messages for
every failure. Change that to a drm_dbg instead.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: Copilot:claude-sonnet-4.6
---
drivers/gpu/drm/xe/xe_irq.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index 40d3d43e492f..871c6c5c4fac 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -768,7 +768,7 @@ static int xe_irq_msi_request_irqs(struct xe_device *xe)
irq = pci_irq_vector(pdev, 0);
err = request_irq(irq, irq_handler, IRQF_SHARED, DRIVER_NAME, xe);
if (err < 0) {
- drm_err(&xe->drm, "Failed to request MSI IRQ %d\n", err);
+ drm_dbg(&xe->drm, "Failed to request MSI IRQ %d\n", err);
return err;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 07/12] drm/xe: Remove memirq status and source checks for engine interrupts
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
` (5 preceding siblings ...)
2026-06-05 23:21 ` [PATCH 06/12] drm/xe: Change MSI-X assignment failure to drm_dbg Stuart Summers
@ 2026-06-05 23:21 ` Stuart Summers
2026-06-06 11:18 ` Michal Wajdeczko
2026-06-05 23:21 ` [PATCH 08/12] drm/xe: Add per-exec-queue user fence wait queue Stuart Summers
` (8 subsequent siblings)
15 siblings, 1 reply; 20+ messages in thread
From: Stuart Summers @ 2026-06-05 23:21 UTC (permalink / raw)
Cc: michal.wajdeczko, ilia.levi, x.wang, rodrigo.vivi, intel-xe,
alan.previn.teres.alexis, Stuart Summers
For engine-specific, memory-based interrupts, hardware will not fill in
the source and status offsets, assuming that software will utilize the
vector ID to determine the destination for a particular interrupt.
GuC and VF based interrupts are still handled the same - explicitly
checking these offsets.
Bspec: 62316
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: Copilot:claude-sonnet-4.6
---
drivers/gpu/drm/xe/xe_memirq.c | 26 ++++++++------------------
1 file changed, 8 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_memirq.c b/drivers/gpu/drm/xe/xe_memirq.c
index 9dfe965cb46e..208f44436c66 100644
--- a/drivers/gpu/drm/xe/xe_memirq.c
+++ b/drivers/gpu/drm/xe/xe_memirq.c
@@ -447,18 +447,18 @@ static void memirq_assume_received(struct xe_memirq *memirq, const char *source,
memirq_debug(memirq, "ASSUME %s %s(%u)\n", source, status, offset);
}
-static void memirq_dispatch_engine(struct xe_memirq *memirq, struct iosys_map *status,
+static void memirq_dispatch_engine(struct xe_memirq *memirq,
struct xe_hw_engine *hwe)
{
- memirq_debug(memirq, "STATUS %s %*ph\n", hwe->name, 16, status->vaddr);
+ memirq_debug(memirq, "dispatching engine %s\n", hwe->name);
/*
- * The programming note says to assume that GT_MI_USER_INTERRUPT is always
- * set. Check and clear related status byte just for a debug.
+ * On MSI-X platforms hardware does not fill in the source and status
+ * fields for engine-based interrupts (only GuC and VF interrupts have
+ * a valid source/status). The dma-fence check for the fence completion
+ * is opportunistic, unconditionally pass MI_USER_INTERRUPT to issue
+ * that check.
*/
- if (IS_ENABLED(CONFIG_DRM_XE_DEBUG_MEMIRQ) &&
- !memirq_received(memirq, status, ilog2(GT_MI_USER_INTERRUPT), hwe->name))
- memirq_assume_received(memirq, hwe->name, ilog2(GT_MI_USER_INTERRUPT), "USER");
xe_hw_engine_handle_irq(hwe, GT_MI_USER_INTERRUPT);
}
@@ -499,17 +499,7 @@ static void memirq_dispatch_guc(struct xe_memirq *memirq, struct iosys_map *stat
*/
void xe_memirq_hwe_handler(struct xe_memirq *memirq, struct xe_hw_engine *hwe)
{
- struct iosys_map source =
- IOSYS_MAP_INIT_OFFSET(&memirq->bo->vmap,
- XE_MEMIRQ_SOURCE_OFFSET(hwe->irq_page));
-
- if (memirq_received(memirq, &source, hwe->irq_offset, "SRC")) {
- struct iosys_map status =
- IOSYS_MAP_INIT_OFFSET(&memirq->bo->vmap,
- XE_MEMIRQ_VECTOR_OFFSET(hwe->irq_page,
- hwe->irq_offset));
- memirq_dispatch_engine(memirq, &status, hwe);
- }
+ memirq_dispatch_engine(memirq, hwe);
}
/**
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 08/12] drm/xe: Add per-exec-queue user fence wait queue
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
` (6 preceding siblings ...)
2026-06-05 23:21 ` [PATCH 07/12] drm/xe: Remove memirq status and source checks for engine interrupts Stuart Summers
@ 2026-06-05 23:21 ` Stuart Summers
2026-06-05 23:21 ` [PATCH 09/12] drm/xe: Track all exec queues in a device-level ufence list Stuart Summers
` (7 subsequent siblings)
15 siblings, 0 replies; 20+ messages in thread
From: Stuart Summers @ 2026-06-05 23:21 UTC (permalink / raw)
Cc: michal.wajdeczko, ilia.levi, x.wang, rodrigo.vivi, intel-xe,
alan.previn.teres.alexis, Stuart Summers
Add a new ufence_wq wait queue to struct xe_exec_queue and initialize it
at queue allocation time. Also introduce xe_wait_user_fence_wake() to
centralize the ufence wake call sites.
This patch just adds the infrastructure in place to do this and doesn't
actually start using it. The reason being that we need to be careful
when handling a case where a user does a VM bind without a bind queue
and mistakenly passes a non-bind queue to the wait user fence. There
are a couple of IGT cases at least that are doing this today and to
avoid regressing any user code around this, we'll add some additional
handling in a subsequent patch before connecting this to the actual
wait user fence code.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: Copilot:claude-sonnet-4.6
---
drivers/gpu/drm/xe/xe_exec_queue.c | 1 +
drivers/gpu/drm/xe/xe_exec_queue_types.h | 3 +++
drivers/gpu/drm/xe/xe_guc_submit.c | 6 ++----
drivers/gpu/drm/xe/xe_hw_engine.c | 6 ++++--
drivers/gpu/drm/xe/xe_hw_engine.h | 3 ++-
drivers/gpu/drm/xe/xe_irq.c | 2 +-
drivers/gpu/drm/xe/xe_memirq.c | 2 +-
drivers/gpu/drm/xe/xe_sync.c | 3 ++-
drivers/gpu/drm/xe/xe_wait_user_fence.c | 16 +++++++++++++++-
drivers/gpu/drm/xe/xe_wait_user_fence.h | 4 ++++
10 files changed, 35 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
index 6c101b4f6488..aa49400b67ba 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -260,6 +260,7 @@ static struct xe_exec_queue *__xe_exec_queue_alloc(struct xe_device *xe,
INIT_LIST_HEAD(&q->multi_gt_link);
INIT_LIST_HEAD(&q->hw_engine_group_link);
INIT_LIST_HEAD(&q->pxp.link);
+ init_waitqueue_head(&q->ufence_wq);
spin_lock_init(&q->multi_queue.lock);
spin_lock_init(&q->lrc_lookup_lock);
q->multi_queue.priority = XE_MULTI_QUEUE_PRIORITY_NORMAL;
diff --git a/drivers/gpu/drm/xe/xe_exec_queue_types.h b/drivers/gpu/drm/xe/xe_exec_queue_types.h
index 2f5ccf294675..edd2ecc8a27c 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue_types.h
+++ b/drivers/gpu/drm/xe/xe_exec_queue_types.h
@@ -231,6 +231,9 @@ struct xe_exec_queue {
struct list_head link;
} pxp;
+ /** @ufence_wq: per-queue user fence wait queue */
+ wait_queue_head_t ufence_wq;
+
/** @ufence_syncobj: User fence syncobj */
struct drm_syncobj *ufence_syncobj;
diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
index 4b247a3019d2..97ab4892dc02 100644
--- a/drivers/gpu/drm/xe/xe_guc_submit.c
+++ b/drivers/gpu/drm/xe/xe_guc_submit.c
@@ -21,6 +21,7 @@
#include "xe_device.h"
#include "xe_exec_queue.h"
#include "xe_force_wake.h"
+#include "xe_wait_user_fence.h"
#include "xe_gpu_scheduler.h"
#include "xe_gt.h"
#include "xe_gt_clock.h"
@@ -555,11 +556,8 @@ static bool vf_recovery(struct xe_guc *guc)
static void xe_guc_exec_queue_trigger_cleanup(struct xe_exec_queue *q)
{
- struct xe_guc *guc = exec_queue_to_guc(q);
- struct xe_device *xe = guc_to_xe(guc);
-
/** to wakeup xe_wait_user_fence ioctl if exec queue is reset */
- wake_up_all(&xe->ufence_wq);
+ xe_wait_user_fence_wake(gt_to_xe(q->gt), q);
xe_sched_tdr_queue_imm(&q->guc->sched);
}
diff --git a/drivers/gpu/drm/xe/xe_hw_engine.c b/drivers/gpu/drm/xe/xe_hw_engine.c
index 98265293f2dc..05780bd5beba 100644
--- a/drivers/gpu/drm/xe/xe_hw_engine.c
+++ b/drivers/gpu/drm/xe/xe_hw_engine.c
@@ -42,6 +42,7 @@
#include "xe_tuning.h"
#include "xe_uc_fw.h"
#include "xe_wa.h"
+#include "xe_wait_user_fence.h"
#define MAX_MMIO_BASES 3
struct engine_info {
@@ -894,9 +895,10 @@ int xe_hw_engines_init(struct xe_gt *gt)
return 0;
}
-void xe_hw_engine_handle_irq(struct xe_hw_engine *hwe, u16 intr_vec)
+void xe_hw_engine_handle_irq(struct xe_hw_engine *hwe, u16 intr_vec,
+ struct xe_exec_queue *q)
{
- wake_up_all(>_to_xe(hwe->gt)->ufence_wq);
+ xe_wait_user_fence_wake(gt_to_xe(hwe->gt), q);
if (hwe->irq_handler)
hwe->irq_handler(hwe, intr_vec);
diff --git a/drivers/gpu/drm/xe/xe_hw_engine.h b/drivers/gpu/drm/xe/xe_hw_engine.h
index c3ee37f8cfc0..7501c9051a71 100644
--- a/drivers/gpu/drm/xe/xe_hw_engine.h
+++ b/drivers/gpu/drm/xe/xe_hw_engine.h
@@ -51,7 +51,8 @@ struct xe_exec_queue;
int xe_hw_engines_init_early(struct xe_gt *gt);
int xe_hw_engines_init(struct xe_gt *gt);
-void xe_hw_engine_handle_irq(struct xe_hw_engine *hwe, u16 intr_vec);
+void xe_hw_engine_handle_irq(struct xe_hw_engine *hwe, u16 intr_vec,
+ struct xe_exec_queue *q);
void xe_hw_engine_enable_ring(struct xe_hw_engine *hwe);
u32 xe_hw_engine_mask_per_class(struct xe_gt *gt,
enum xe_engine_class engine_class);
diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index 871c6c5c4fac..935a90719e75 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -385,7 +385,7 @@ static void gt_irq_handler(struct xe_tile *tile,
hwe = xe_gt_hw_engine(engine_gt, class, instance, false);
if (hwe) {
- xe_hw_engine_handle_irq(hwe, intr_vec);
+ xe_hw_engine_handle_irq(hwe, intr_vec, NULL);
continue;
}
diff --git a/drivers/gpu/drm/xe/xe_memirq.c b/drivers/gpu/drm/xe/xe_memirq.c
index 208f44436c66..427a0e13f7aa 100644
--- a/drivers/gpu/drm/xe/xe_memirq.c
+++ b/drivers/gpu/drm/xe/xe_memirq.c
@@ -459,7 +459,7 @@ static void memirq_dispatch_engine(struct xe_memirq *memirq,
* is opportunistic, unconditionally pass MI_USER_INTERRUPT to issue
* that check.
*/
- xe_hw_engine_handle_irq(hwe, GT_MI_USER_INTERRUPT);
+ xe_hw_engine_handle_irq(hwe, GT_MI_USER_INTERRUPT, q);
}
static void memirq_dispatch_guc(struct xe_memirq *memirq, struct iosys_map *status,
diff --git a/drivers/gpu/drm/xe/xe_sync.c b/drivers/gpu/drm/xe/xe_sync.c
index 37866768d64c..652341f22460 100644
--- a/drivers/gpu/drm/xe/xe_sync.c
+++ b/drivers/gpu/drm/xe/xe_sync.c
@@ -18,6 +18,7 @@
#include "xe_exec_queue.h"
#include "xe_macros.h"
#include "xe_sched_job_types.h"
+#include "xe_wait_user_fence.h"
struct xe_user_fence {
struct xe_device *xe;
@@ -92,7 +93,7 @@ static void user_fence_worker(struct work_struct *w)
* Wake up waiters only after updating the ufence state, allowing the UMD
* to safely reuse the same ufence without encountering -EBUSY errors.
*/
- wake_up_all(&ufence->xe->ufence_wq);
+ xe_wait_user_fence_wake(ufence->xe, NULL);
user_fence_put(ufence);
}
diff --git a/drivers/gpu/drm/xe/xe_wait_user_fence.c b/drivers/gpu/drm/xe/xe_wait_user_fence.c
index 12ceb3efa8ea..7c9d52b50580 100644
--- a/drivers/gpu/drm/xe/xe_wait_user_fence.c
+++ b/drivers/gpu/drm/xe/xe_wait_user_fence.c
@@ -54,6 +54,20 @@ static int do_compare(u64 addr, u64 value, u64 mask, u16 op)
#define VALID_FLAGS DRM_XE_UFENCE_WAIT_FLAG_ABSTIME
#define MAX_OP DRM_XE_UFENCE_WAIT_OP_LTE
+/**
+ * xe_wait_user_fence_wake() - Wake user fence waiters
+ * @xe: the xe device
+ * @q: exec queue (reserved; per-queue wake-up is enabled in a later patch)
+ *
+ * Wakes all user fence waiters on the device-level wait queue.
+ * Per-exec-queue and ufence_list broadcast support are introduced in
+ * subsequent patches once the full infrastructure is in place.
+ */
+void xe_wait_user_fence_wake(struct xe_device *xe, struct xe_exec_queue *q)
+{
+ wake_up_all(&xe->ufence_wq);
+}
+
static long to_jiffies_timeout(struct xe_device *xe,
struct drm_xe_wait_user_fence *args)
{
@@ -110,7 +124,7 @@ static long to_jiffies_timeout(struct xe_device *xe,
*
* If an exec queue ID is provided, the wait is aborted early if the
* queue enters a reset state. The device-level wait queue is used for
- * wakeups.
+ * wakeups in all cases.
*
* On return, @timeout is updated to reflect the remaining time (or zero
* on expiry), unless %DRM_XE_UFENCE_WAIT_FLAG_ABSTIME is set.
diff --git a/drivers/gpu/drm/xe/xe_wait_user_fence.h b/drivers/gpu/drm/xe/xe_wait_user_fence.h
index 0e268978f9e6..64e5000eabb4 100644
--- a/drivers/gpu/drm/xe/xe_wait_user_fence.h
+++ b/drivers/gpu/drm/xe/xe_wait_user_fence.h
@@ -8,6 +8,10 @@
struct drm_device;
struct drm_file;
+struct xe_device;
+struct xe_exec_queue;
+
+void xe_wait_user_fence_wake(struct xe_device *xe, struct xe_exec_queue *q);
int xe_wait_user_fence_ioctl(struct drm_device *dev, void *data,
struct drm_file *file);
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 09/12] drm/xe: Track all exec queues in a device-level ufence list
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
` (7 preceding siblings ...)
2026-06-05 23:21 ` [PATCH 08/12] drm/xe: Add per-exec-queue user fence wait queue Stuart Summers
@ 2026-06-05 23:21 ` Stuart Summers
2026-06-05 23:21 ` [PATCH 10/12] drm/xe: Hook up per queue thread wake to the unique MSI-X vector allocation Stuart Summers
` (6 subsequent siblings)
15 siblings, 0 replies; 20+ messages in thread
From: Stuart Summers @ 2026-06-05 23:21 UTC (permalink / raw)
Cc: michal.wajdeczko, ilia.levi, x.wang, rodrigo.vivi, intel-xe,
alan.previn.teres.alexis, Stuart Summers
Add ufence_link to struct xe_exec_queue and maintain a device-level
ufence_list (protected by ufence_list_lock) so the default MSI-X vector
handler can reach every queue's per-queue wait queue.
As mentioned in a prior patch that adds the per queue wait queue,
we can't guarantee userspace will pass something appropriate in
the wait user fence ioctl. And in fact I have found cases in IGT
where it does not - basically it issues a VM bind without a bind
exec queue and then adds a non-bind queue to the wait user fence
call. Of course I'd argue this is a test bug, but also we want
to avoid any large regressions from the UAPI perspective, so
this ufence list is used to walk through all potential per exec queue
wait queues users might have pending to make sure we wake all of
them up if we get an MSI-X interrupt in without a corresponding
exec queue.
Note that actually hooking up the wait user fence piece of this
is deferred to a later patch.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: Copilot:claude-sonnet-4.6
---
drivers/gpu/drm/xe/xe_device.c | 2 ++
drivers/gpu/drm/xe/xe_device_types.h | 6 ++++++
drivers/gpu/drm/xe/xe_exec_queue.c | 12 ++++++++++++
drivers/gpu/drm/xe/xe_exec_queue_types.h | 3 +++
4 files changed, 23 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 51e3a2dd7b22..a0fabeabc9d7 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -549,6 +549,8 @@ int xe_device_init_early(struct xe_device *xe)
xe_validation_device_init(&xe->val);
init_waitqueue_head(&xe->ufence_wq);
+ spin_lock_init(&xe->ufence_list_lock);
+ INIT_LIST_HEAD(&xe->ufence_list);
init_rwsem(&xe->usm.lock);
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index ff15de34fd17..bf421d8cd0b1 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -351,6 +351,12 @@ struct xe_device {
/** @ufence_wq: user fence wait queue */
wait_queue_head_t ufence_wq;
+ /** @ufence_list_lock: protects @ufence_list */
+ spinlock_t ufence_list_lock;
+
+ /** @ufence_list: list of all exec queues for default-vector ufence wake */
+ struct list_head ufence_list;
+
/** @preempt_fence_wq: used to serialize preempt fences */
struct workqueue_struct *preempt_fence_wq;
diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
index aa49400b67ba..31597aac3025 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -169,8 +169,14 @@ static void exec_queue_msix_fini(struct xe_exec_queue *q)
static void __xe_exec_queue_free(struct xe_exec_queue *q)
{
+ struct xe_device *xe = gt_to_xe(q->gt);
+ unsigned long irq_flags;
int i;
+ spin_lock_irqsave(&xe->ufence_list_lock, irq_flags);
+ list_del_init(&q->ufence_link);
+ spin_unlock_irqrestore(&xe->ufence_list_lock, irq_flags);
+
for (i = 0; i < XE_EXEC_QUEUE_TLB_INVAL_COUNT; ++i)
if (q->tlb_inval[i].dep_scheduler)
xe_dep_scheduler_fini(q->tlb_inval[i].dep_scheduler);
@@ -236,6 +242,7 @@ static struct xe_exec_queue *__xe_exec_queue_alloc(struct xe_device *xe,
{
struct xe_exec_queue *q;
struct xe_gt *gt = hwe->gt;
+ unsigned long irq_flags;
int err;
/* only kernel queues can be permanent */
@@ -260,7 +267,12 @@ static struct xe_exec_queue *__xe_exec_queue_alloc(struct xe_device *xe,
INIT_LIST_HEAD(&q->multi_gt_link);
INIT_LIST_HEAD(&q->hw_engine_group_link);
INIT_LIST_HEAD(&q->pxp.link);
+ INIT_LIST_HEAD(&q->ufence_link);
init_waitqueue_head(&q->ufence_wq);
+
+ spin_lock_irqsave(&xe->ufence_list_lock, irq_flags);
+ list_add(&q->ufence_link, &xe->ufence_list);
+ spin_unlock_irqrestore(&xe->ufence_list_lock, irq_flags);
spin_lock_init(&q->multi_queue.lock);
spin_lock_init(&q->lrc_lookup_lock);
q->multi_queue.priority = XE_MULTI_QUEUE_PRIORITY_NORMAL;
diff --git a/drivers/gpu/drm/xe/xe_exec_queue_types.h b/drivers/gpu/drm/xe/xe_exec_queue_types.h
index edd2ecc8a27c..1cd2dc055b81 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue_types.h
+++ b/drivers/gpu/drm/xe/xe_exec_queue_types.h
@@ -234,6 +234,9 @@ struct xe_exec_queue {
/** @ufence_wq: per-queue user fence wait queue */
wait_queue_head_t ufence_wq;
+ /** @ufence_link: link into xe_device.ufence_list for default-vector wake */
+ struct list_head ufence_link;
+
/** @ufence_syncobj: User fence syncobj */
struct drm_syncobj *ufence_syncobj;
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 10/12] drm/xe: Hook up per queue thread wake to the unique MSI-X vector allocation
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
` (8 preceding siblings ...)
2026-06-05 23:21 ` [PATCH 09/12] drm/xe: Track all exec queues in a device-level ufence list Stuart Summers
@ 2026-06-05 23:21 ` Stuart Summers
2026-06-05 23:21 ` [PATCH 11/12] drm/xe: Enable per-queue ufence wake in ioctl and wake function Stuart Summers
` (5 subsequent siblings)
15 siblings, 0 replies; 20+ messages in thread
From: Stuart Summers @ 2026-06-05 23:21 UTC (permalink / raw)
Cc: michal.wajdeczko, ilia.levi, x.wang, rodrigo.vivi, intel-xe,
alan.previn.teres.alexis, Stuart Summers
When a dedicated MSI-X vector fires for a specific exec queue, the
interrupt handler already has the queue pointer available. Thread it
through the call chain so we can wake the per-queue ufence_wq without
impact any other user threads.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: Copilot:claude-sonnet-4.6
---
drivers/gpu/drm/xe/xe_irq.c | 4 ++--
drivers/gpu/drm/xe/xe_memirq.c | 16 +++++++++++-----
drivers/gpu/drm/xe/xe_memirq.h | 4 +++-
3 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index 935a90719e75..db12e1a371a5 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -927,7 +927,7 @@ static irqreturn_t xe_irq_msix_default_hwe_handler(int irq, void *arg)
continue;
for_each_hw_engine(hwe, gt, id)
- xe_memirq_hwe_handler(memirq, hwe);
+ xe_memirq_hwe_handler(memirq, hwe, NULL);
}
}
@@ -942,7 +942,7 @@ irqreturn_t xe_irq_msix_hwe_handler(int irq, void *arg)
if (!atomic_read(&tile->xe->irq.enabled))
return IRQ_NONE;
- xe_memirq_hwe_handler(&tile->memirq, q->hwe);
+ xe_memirq_hwe_handler(&tile->memirq, q->hwe, q);
return IRQ_HANDLED;
}
diff --git a/drivers/gpu/drm/xe/xe_memirq.c b/drivers/gpu/drm/xe/xe_memirq.c
index 427a0e13f7aa..f94b75eac80f 100644
--- a/drivers/gpu/drm/xe/xe_memirq.c
+++ b/drivers/gpu/drm/xe/xe_memirq.c
@@ -448,7 +448,8 @@ static void memirq_assume_received(struct xe_memirq *memirq, const char *source,
}
static void memirq_dispatch_engine(struct xe_memirq *memirq,
- struct xe_hw_engine *hwe)
+ struct xe_hw_engine *hwe,
+ struct xe_exec_queue *q)
{
memirq_debug(memirq, "dispatching engine %s\n", hwe->name);
@@ -494,12 +495,17 @@ static void memirq_dispatch_guc(struct xe_memirq *memirq, struct iosys_map *stat
* xe_memirq_hwe_handler - Check and process interrupts for a specific HW engine.
* @memirq: the &xe_memirq
* @hwe: the hw engine to process
+ * @q: the exec queue associated with this interrupt, or NULL
*
- * This function reads and dispatches `Memory Based Interrupts` for the provided HW engine.
+ * This function reads and dispatches `Memory Based Interrupts` for the provided
+ * HW engine. When @q is non-NULL (e.g. called from a dedicated MSI-X vector
+ * handler), it is passed through so the per-queue user fence wait queue is
+ * woken rather than the device-level one.
*/
-void xe_memirq_hwe_handler(struct xe_memirq *memirq, struct xe_hw_engine *hwe)
+void xe_memirq_hwe_handler(struct xe_memirq *memirq, struct xe_hw_engine *hwe,
+ struct xe_exec_queue *q)
{
- memirq_dispatch_engine(memirq, hwe);
+ memirq_dispatch_engine(memirq, hwe, q);
}
/**
@@ -559,7 +565,7 @@ void xe_memirq_handler(struct xe_memirq *memirq)
continue;
for_each_hw_engine(hwe, gt, id)
- xe_memirq_hwe_handler(memirq, hwe);
+ xe_memirq_hwe_handler(memirq, hwe, NULL);
}
/* GuC and media GuC (if present) must be checked separately */
diff --git a/drivers/gpu/drm/xe/xe_memirq.h b/drivers/gpu/drm/xe/xe_memirq.h
index e25d2234ab87..7e2229ad1d38 100644
--- a/drivers/gpu/drm/xe/xe_memirq.h
+++ b/drivers/gpu/drm/xe/xe_memirq.h
@@ -8,6 +8,7 @@
#include <linux/types.h>
+struct xe_exec_queue;
struct xe_guc;
struct xe_hw_engine;
struct xe_memirq;
@@ -20,7 +21,8 @@ u32 xe_memirq_enable_ptr(struct xe_memirq *memirq);
void xe_memirq_reset(struct xe_memirq *memirq);
void xe_memirq_postinstall(struct xe_memirq *memirq);
-void xe_memirq_hwe_handler(struct xe_memirq *memirq, struct xe_hw_engine *hwe);
+void xe_memirq_hwe_handler(struct xe_memirq *memirq, struct xe_hw_engine *hwe,
+ struct xe_exec_queue *q);
void xe_memirq_handler(struct xe_memirq *memirq);
int xe_memirq_init_guc(struct xe_memirq *memirq, struct xe_guc *guc);
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 11/12] drm/xe: Enable per-queue ufence wake in ioctl and wake function
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
` (9 preceding siblings ...)
2026-06-05 23:21 ` [PATCH 10/12] drm/xe: Hook up per queue thread wake to the unique MSI-X vector allocation Stuart Summers
@ 2026-06-05 23:21 ` Stuart Summers
2026-06-05 23:21 ` [PATCH 12/12] drm/xe/memirq: Enable compute walker post-sync interrupt Stuart Summers
` (4 subsequent siblings)
15 siblings, 0 replies; 20+ messages in thread
From: Stuart Summers @ 2026-06-05 23:21 UTC (permalink / raw)
Cc: michal.wajdeczko, ilia.levi, x.wang, rodrigo.vivi, intel-xe,
alan.previn.teres.alexis, Stuart Summers
Hook up the per-exec-queue user fence wait queue infrastructure
introduced in the previous patches:
- xe_wait_user_fence_wake(): if a specific user exec queue is supplied
(non-NULL, still alive), wake only that queue's ufence_wq. If no
queue is supplied (default MSI-X vector), broadcast to xe->ufence_wq
and every queue in ufence_list so no waiter is missed. Kernel queues
always use the default MSI-X vector and pass NULL, so any non-NULL @q
here is guaranteed to be a user queue.
- xe_wait_user_fence_ioctl(): add and remove the wait entry on the
per-queue ufence_wq when a queue is provided, falling back to the
device-level ufence_wq otherwise.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: Copilot:claude-sonnet-4.6
---
drivers/gpu/drm/xe/xe_wait_user_fence.c | 44 +++++++++++++++++++------
1 file changed, 34 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_wait_user_fence.c b/drivers/gpu/drm/xe/xe_wait_user_fence.c
index 7c9d52b50580..1c14d89dff43 100644
--- a/drivers/gpu/drm/xe/xe_wait_user_fence.c
+++ b/drivers/gpu/drm/xe/xe_wait_user_fence.c
@@ -57,15 +57,39 @@ static int do_compare(u64 addr, u64 value, u64 mask, u16 op)
/**
* xe_wait_user_fence_wake() - Wake user fence waiters
* @xe: the xe device
- * @q: exec queue (reserved; per-queue wake-up is enabled in a later patch)
+ * @q: exec queue whose user fence wait queue to wake, or NULL
*
- * Wakes all user fence waiters on the device-level wait queue.
- * Per-exec-queue and ufence_list broadcast support are introduced in
- * subsequent patches once the full infrastructure is in place.
+ * If @q is non-NULL and still alive (a reference can be taken), wakes
+ * only that queue's per-queue wait queue. Kernel queues always use the
+ * default MSI-X vector, which passes NULL here, so any non-NULL @q is
+ * always a user queue.
+ *
+ * If @q is NULL (default MSI-X vector or sync path), wakes the device-level
+ * wait queue and every per-exec-queue wait queue in ufence_list to ensure
+ * no waiter is missed.
*/
void xe_wait_user_fence_wake(struct xe_device *xe, struct xe_exec_queue *q)
{
- wake_up_all(&xe->ufence_wq);
+ /*
+ * Take a reference on the queue to guard against it being freed
+ * concurrently. xe_exec_queue_get_unless_zero() handles a NULL @q,
+ * so callers that don't specify a queue fall through to the broadcast.
+ */
+ q = xe_exec_queue_get_unless_zero(q);
+ if (q) {
+ wake_up_all(&q->ufence_wq);
+ xe_exec_queue_put(q);
+ } else {
+ struct xe_exec_queue *iter;
+ unsigned long flags;
+
+ wake_up_all(&xe->ufence_wq);
+
+ spin_lock_irqsave(&xe->ufence_list_lock, flags);
+ list_for_each_entry(iter, &xe->ufence_list, ufence_link)
+ wake_up_all(&iter->ufence_wq);
+ spin_unlock_irqrestore(&xe->ufence_list_lock, flags);
+ }
}
static long to_jiffies_timeout(struct xe_device *xe,
@@ -122,9 +146,9 @@ static long to_jiffies_timeout(struct xe_device *xe,
* performed as (@addr & @mask) OP @value, where OP is one of the
* %DRM_XE_UFENCE_WAIT_OP_* operators.
*
- * If an exec queue ID is provided, the wait is aborted early if the
- * queue enters a reset state. The device-level wait queue is used for
- * wakeups in all cases.
+ * If an exec queue ID is provided, the wait is scoped to that queue's
+ * per-queue wait queue and the wait is aborted early if the queue enters
+ * a reset state. Otherwise the device-level wait queue is used.
*
* On return, @timeout is updated to reflect the remaining time (or zero
* on expiry), unless %DRM_XE_UFENCE_WAIT_FLAG_ABSTIME is set.
@@ -170,7 +194,7 @@ int xe_wait_user_fence_ioctl(struct drm_device *dev, void *data,
start = ktime_get();
- add_wait_queue(&xe->ufence_wq, &w_wait);
+ add_wait_queue(q ? &q->ufence_wq : &xe->ufence_wq, &w_wait);
for (;;) {
err = do_compare(addr, args->value, args->mask, args->op);
if (err <= 0)
@@ -203,7 +227,7 @@ int xe_wait_user_fence_ioctl(struct drm_device *dev, void *data,
timeout = wait_woken(&w_wait, TASK_INTERRUPTIBLE, timeout);
}
- remove_wait_queue(&xe->ufence_wq, &w_wait);
+ remove_wait_queue(q ? &q->ufence_wq : &xe->ufence_wq, &w_wait);
if (!(args->flags & DRM_XE_UFENCE_WAIT_FLAG_ABSTIME)) {
args->timeout -= ktime_to_ns(ktime_sub(ktime_get(), start));
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH 12/12] drm/xe/memirq: Enable compute walker post-sync interrupt
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
` (10 preceding siblings ...)
2026-06-05 23:21 ` [PATCH 11/12] drm/xe: Enable per-queue ufence wake in ioctl and wake function Stuart Summers
@ 2026-06-05 23:21 ` Stuart Summers
2026-06-05 23:47 ` ✗ CI.checkpatch: warning for Enable per exec queue MSI-X vector assignment Patchwork
` (3 subsequent siblings)
15 siblings, 0 replies; 20+ messages in thread
From: Stuart Summers @ 2026-06-05 23:21 UTC (permalink / raw)
Cc: michal.wajdeczko, ilia.levi, x.wang, rodrigo.vivi, intel-xe,
alan.previn.teres.alexis, Stuart Summers
Commit 2ddedd4b7b7c ("drm/xe/memirq: Enable GT_MI_USER_INTERRUPT only")
narrowed the MEMIRQ enable mask to GT_MI_USER_INTERRUPT only. Add
the interrupt enable bit for the compute walker post sync interrupt
as well to allow those to go through.
Additionally, the compute walker post sync interrupt vector offset
in the LRC register is currently incorrect. Fix that here.
Bspec: 62346, 72547
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: Copilot:claude-sonnet-4.6
---
drivers/gpu/drm/xe/regs/xe_lrc_layout.h | 3 +++
drivers/gpu/drm/xe/xe_lrc.c | 15 ++++++++++++++-
drivers/gpu/drm/xe/xe_memirq.c | 12 +++++++++---
3 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/xe/regs/xe_lrc_layout.h b/drivers/gpu/drm/xe/regs/xe_lrc_layout.h
index 4ab86fc369fd..3c0babaa7902 100644
--- a/drivers/gpu/drm/xe/regs/xe_lrc_layout.h
+++ b/drivers/gpu/drm/xe/regs/xe_lrc_layout.h
@@ -31,6 +31,9 @@
#define CTX_INT_SRC_REPORT_REG (CTX_LRI_INT_REPORT_PTR + 3)
#define CTX_INT_SRC_REPORT_PTR (CTX_LRI_INT_REPORT_PTR + 4)
+#define CTX_CS_INT_VEC_USER_MASK REG_GENMASK(9, 0)
+#define CTX_CS_INT_VEC_COMPUTE_MASK REG_GENMASK(19, 10)
+
#define CTX_CS_INT_VEC_REG 0x5a
#define CTX_CS_INT_VEC_DATA (CTX_CS_INT_VEC_REG + 1)
diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
index a4292a11391d..d6677980be2d 100644
--- a/drivers/gpu/drm/xe/xe_lrc.c
+++ b/drivers/gpu/drm/xe/xe_lrc.c
@@ -1527,11 +1527,24 @@ static int xe_lrc_ctx_init(struct xe_lrc *lrc, struct xe_hw_engine *hwe, struct
xe_lrc_set_ppgtt(lrc, vm);
if (xe_device_has_msix(xe)) {
+ /*
+ * Each exec queue is only assigned one MSI-X vector, however
+ * the LRC allows for different vectors for MI_USER_INT and
+ * compute walker post sync interrupts. For now, just use the
+ * same vector for each of the vector types.
+ */
+ u32 lrc_msix_vec =
+ REG_FIELD_PREP(CTX_CS_INT_VEC_USER_MASK, msix_vec);
+
+ if (GRAPHICS_VERx100(xe) >= 3511)
+ lrc_msix_vec |=
+ REG_FIELD_PREP(CTX_CS_INT_VEC_COMPUTE_MASK, msix_vec);
+
xe_lrc_write_ctx_reg(lrc, CTX_INT_STATUS_REPORT_PTR,
xe_memirq_status_ptr(&tile->memirq, hwe));
xe_lrc_write_ctx_reg(lrc, CTX_INT_SRC_REPORT_PTR,
xe_memirq_source_ptr(&tile->memirq, hwe));
- xe_lrc_write_ctx_reg(lrc, CTX_CS_INT_VEC_DATA, msix_vec << 16 | msix_vec);
+ xe_lrc_write_ctx_reg(lrc, CTX_CS_INT_VEC_DATA, lrc_msix_vec);
}
if (xe_gt_has_indirect_ring_state(gt)) {
diff --git a/drivers/gpu/drm/xe/xe_memirq.c b/drivers/gpu/drm/xe/xe_memirq.c
index f94b75eac80f..c00c9f9695d2 100644
--- a/drivers/gpu/drm/xe/xe_memirq.c
+++ b/drivers/gpu/drm/xe/xe_memirq.c
@@ -238,12 +238,18 @@ static int memirq_alloc_pages(struct xe_memirq *memirq)
static void memirq_set_enable(struct xe_memirq *memirq, bool enable)
{
+ struct xe_device *xe = memirq_to_xe(memirq);
+ u32 int_enables = GT_MI_USER_INTERRUPT;
+
+ if (GRAPHICS_VERx100(xe) >= 3511)
+ int_enables |= GT_COMPUTE_WALKER_INTERRUPT;
+
/*
- * We only care about the GT_MI_USER_INTERRUPT from the engines and
- * the GuC does not look at the ENABLE mask at all.
+ * Enable MI_USER_INTERRUPT and compute walker post-sync interrupts
+ * from engines. The GuC does not look at the ENABLE mask at all.
*/
iosys_map_wr(&memirq->bo->vmap, XE_MEMIRQ_ENABLE_OFFSET, u32,
- enable ? GT_MI_USER_INTERRUPT : 0);
+ enable ? int_enables : 0);
memirq->enabled = enable;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* ✗ CI.checkpatch: warning for Enable per exec queue MSI-X vector assignment
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
` (11 preceding siblings ...)
2026-06-05 23:21 ` [PATCH 12/12] drm/xe/memirq: Enable compute walker post-sync interrupt Stuart Summers
@ 2026-06-05 23:47 ` Patchwork
2026-06-05 23:49 ` ✓ CI.KUnit: success " Patchwork
` (2 subsequent siblings)
15 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2026-06-05 23:47 UTC (permalink / raw)
To: Stuart Summers; +Cc: intel-xe
== Series Details ==
Series: Enable per exec queue MSI-X vector assignment
URL : https://patchwork.freedesktop.org/series/167990/
State : warning
== Summary ==
+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
061140b9bc586ae7f40abc1249c97e1cc72d1b9d
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit abd1bc1bc702d9d727c63d70862c4a0bc1c45d13
Author: Stuart Summers <stuart.summers@intel.com>
Date: Fri Jun 5 23:21:19 2026 +0000
drm/xe/memirq: Enable compute walker post-sync interrupt
Commit 2ddedd4b7b7c ("drm/xe/memirq: Enable GT_MI_USER_INTERRUPT only")
narrowed the MEMIRQ enable mask to GT_MI_USER_INTERRUPT only. Add
the interrupt enable bit for the compute walker post sync interrupt
as well to allow those to go through.
Additionally, the compute walker post sync interrupt vector offset
in the LRC register is currently incorrect. Fix that here.
Bspec: 62346, 72547
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: Copilot:claude-sonnet-4.6
+ /mt/dim checkpatch f5cb6d0bd86baaed2c093b772ddc3870429aba08 drm-intel
2e8c016f124b drm/xe: Add kerneldoc to xe_wait_user_fence_ioctl()
205c9371b039 drm/xe: Handle NULL in xe_exec_queue_get_unless_zero()
b46922b18642 drm/xe: Cap MSI-X vector count to XE_MSIX_MAX_VECS
d4e65334af87 drm/xe: Assign dedicated MSI-X vectors to exec queues
bf262e7a4b5b drm/xe: Add configfs max_msix_vecs attribute
8ee303fa10dd drm/xe: Change MSI-X assignment failure to drm_dbg
fc52aea64445 drm/xe: Remove memirq status and source checks for engine interrupts
2c8f9af482ce drm/xe: Add per-exec-queue user fence wait queue
e3e7d0767bdf drm/xe: Track all exec queues in a device-level ufence list
646849d94c0d drm/xe: Hook up per queue thread wake to the unique MSI-X vector allocation
21b95375d83c drm/xe: Enable per-queue ufence wake in ioctl and wake function
-:53: WARNING:PREFER_FALLTHROUGH: Prefer 'fallthrough;' over fallthrough comment
#53: FILE: drivers/gpu/drm/xe/xe_wait_user_fence.c:76:
+ * so callers that don't specify a queue fall through to the broadcast.
total: 0 errors, 1 warnings, 0 checks, 72 lines checked
abd1bc1bc702 drm/xe/memirq: Enable compute walker post-sync interrupt
^ permalink raw reply [flat|nested] 20+ messages in thread
* ✓ CI.KUnit: success for Enable per exec queue MSI-X vector assignment
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
` (12 preceding siblings ...)
2026-06-05 23:47 ` ✗ CI.checkpatch: warning for Enable per exec queue MSI-X vector assignment Patchwork
@ 2026-06-05 23:49 ` Patchwork
2026-06-06 0:43 ` ✓ Xe.CI.BAT: " Patchwork
2026-06-06 13:27 ` ✓ Xe.CI.FULL: " Patchwork
15 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2026-06-05 23:49 UTC (permalink / raw)
To: Stuart Summers; +Cc: intel-xe
== Series Details ==
Series: Enable per exec queue MSI-X vector assignment
URL : https://patchwork.freedesktop.org/series/167990/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[23:47:43] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[23:47:47] 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:48:18] Starting KUnit Kernel (1/1)...
[23:48:18] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[23:48:18] ================== guc_buf (11 subtests) ===================
[23:48:18] [PASSED] test_smallest
[23:48:18] [PASSED] test_largest
[23:48:18] [PASSED] test_granular
[23:48:18] [PASSED] test_unique
[23:48:18] [PASSED] test_overlap
[23:48:18] [PASSED] test_reusable
[23:48:18] [PASSED] test_too_big
[23:48:18] [PASSED] test_flush
[23:48:18] [PASSED] test_lookup
[23:48:18] [PASSED] test_data
[23:48:18] [PASSED] test_class
[23:48:18] ===================== [PASSED] guc_buf =====================
[23:48:18] =================== guc_dbm (7 subtests) ===================
[23:48:18] [PASSED] test_empty
[23:48:18] [PASSED] test_default
[23:48:18] ======================== test_size ========================
[23:48:18] [PASSED] 4
[23:48:18] [PASSED] 8
[23:48:18] [PASSED] 32
[23:48:18] [PASSED] 256
[23:48:18] ==================== [PASSED] test_size ====================
[23:48:18] ======================= test_reuse ========================
[23:48:18] [PASSED] 4
[23:48:18] [PASSED] 8
[23:48:18] [PASSED] 32
[23:48:18] [PASSED] 256
[23:48:18] =================== [PASSED] test_reuse ====================
[23:48:18] =================== test_range_overlap ====================
[23:48:18] [PASSED] 4
[23:48:18] [PASSED] 8
[23:48:18] [PASSED] 32
[23:48:18] [PASSED] 256
[23:48:18] =============== [PASSED] test_range_overlap ================
[23:48:18] =================== test_range_compact ====================
[23:48:18] [PASSED] 4
[23:48:18] [PASSED] 8
[23:48:18] [PASSED] 32
[23:48:18] [PASSED] 256
[23:48:18] =============== [PASSED] test_range_compact ================
[23:48:18] ==================== test_range_spare =====================
[23:48:18] [PASSED] 4
[23:48:18] [PASSED] 8
[23:48:18] [PASSED] 32
[23:48:18] [PASSED] 256
[23:48:18] ================ [PASSED] test_range_spare =================
[23:48:18] ===================== [PASSED] guc_dbm =====================
[23:48:18] =================== guc_idm (6 subtests) ===================
[23:48:18] [PASSED] bad_init
[23:48:18] [PASSED] no_init
[23:48:18] [PASSED] init_fini
[23:48:18] [PASSED] check_used
[23:48:18] [PASSED] check_quota
[23:48:18] [PASSED] check_all
[23:48:18] ===================== [PASSED] guc_idm =====================
[23:48:18] ================== no_relay (3 subtests) ===================
[23:48:18] [PASSED] xe_drops_guc2pf_if_not_ready
[23:48:18] [PASSED] xe_drops_guc2vf_if_not_ready
[23:48:18] [PASSED] xe_rejects_send_if_not_ready
[23:48:18] ==================== [PASSED] no_relay =====================
[23:48:18] ================== pf_relay (14 subtests) ==================
[23:48:18] [PASSED] pf_rejects_guc2pf_too_short
[23:48:18] [PASSED] pf_rejects_guc2pf_too_long
[23:48:18] [PASSED] pf_rejects_guc2pf_no_payload
[23:48:18] [PASSED] pf_fails_no_payload
[23:48:18] [PASSED] pf_fails_bad_origin
[23:48:18] [PASSED] pf_fails_bad_type
[23:48:18] [PASSED] pf_txn_reports_error
[23:48:18] [PASSED] pf_txn_sends_pf2guc
[23:48:18] [PASSED] pf_sends_pf2guc
[23:48:18] [SKIPPED] pf_loopback_nop
[23:48:18] [SKIPPED] pf_loopback_echo
[23:48:18] [SKIPPED] pf_loopback_fail
[23:48:18] [SKIPPED] pf_loopback_busy
[23:48:18] [SKIPPED] pf_loopback_retry
[23:48:18] ==================== [PASSED] pf_relay =====================
[23:48:18] ================== vf_relay (3 subtests) ===================
[23:48:18] [PASSED] vf_rejects_guc2vf_too_short
[23:48:18] [PASSED] vf_rejects_guc2vf_too_long
[23:48:18] [PASSED] vf_rejects_guc2vf_no_payload
[23:48:18] ==================== [PASSED] vf_relay =====================
[23:48:18] ================ pf_gt_config (9 subtests) =================
[23:48:18] [PASSED] fair_contexts_1vf
[23:48:18] [PASSED] fair_doorbells_1vf
[23:48:18] [PASSED] fair_ggtt_1vf
[23:48:18] ====================== fair_vram_1vf ======================
[23:48:18] [PASSED] 3.50 GiB
[23:48:18] [PASSED] 11.5 GiB
[23:48:18] [PASSED] 15.5 GiB
[23:48:18] [PASSED] 31.5 GiB
[23:48:18] [PASSED] 63.5 GiB
[23:48:18] [PASSED] 1.91 GiB
[23:48:18] ================== [PASSED] fair_vram_1vf ==================
[23:48:18] ================ fair_vram_1vf_admin_only =================
[23:48:18] [PASSED] 3.50 GiB
[23:48:18] [PASSED] 11.5 GiB
[23:48:18] [PASSED] 15.5 GiB
[23:48:18] [PASSED] 31.5 GiB
[23:48:18] [PASSED] 63.5 GiB
[23:48:18] [PASSED] 1.91 GiB
[23:48:18] ============ [PASSED] fair_vram_1vf_admin_only =============
[23:48:18] ====================== fair_contexts ======================
[23:48:18] [PASSED] 1 VF
[23:48:18] [PASSED] 2 VFs
[23:48:18] [PASSED] 3 VFs
[23:48:18] [PASSED] 4 VFs
[23:48:18] [PASSED] 5 VFs
[23:48:18] [PASSED] 6 VFs
[23:48:18] [PASSED] 7 VFs
[23:48:18] [PASSED] 8 VFs
[23:48:18] [PASSED] 9 VFs
[23:48:18] [PASSED] 10 VFs
[23:48:18] [PASSED] 11 VFs
[23:48:18] [PASSED] 12 VFs
[23:48:18] [PASSED] 13 VFs
[23:48:18] [PASSED] 14 VFs
[23:48:18] [PASSED] 15 VFs
[23:48:18] [PASSED] 16 VFs
[23:48:18] [PASSED] 17 VFs
[23:48:18] [PASSED] 18 VFs
[23:48:18] [PASSED] 19 VFs
[23:48:18] [PASSED] 20 VFs
[23:48:18] [PASSED] 21 VFs
[23:48:18] [PASSED] 22 VFs
[23:48:18] [PASSED] 23 VFs
[23:48:18] [PASSED] 24 VFs
[23:48:18] [PASSED] 25 VFs
[23:48:18] [PASSED] 26 VFs
[23:48:18] [PASSED] 27 VFs
[23:48:18] [PASSED] 28 VFs
[23:48:18] [PASSED] 29 VFs
[23:48:18] [PASSED] 30 VFs
[23:48:18] [PASSED] 31 VFs
[23:48:18] [PASSED] 32 VFs
[23:48:18] [PASSED] 33 VFs
[23:48:18] [PASSED] 34 VFs
[23:48:18] [PASSED] 35 VFs
[23:48:18] [PASSED] 36 VFs
[23:48:18] [PASSED] 37 VFs
[23:48:18] [PASSED] 38 VFs
[23:48:18] [PASSED] 39 VFs
[23:48:18] [PASSED] 40 VFs
[23:48:18] [PASSED] 41 VFs
[23:48:18] [PASSED] 42 VFs
[23:48:18] [PASSED] 43 VFs
[23:48:18] [PASSED] 44 VFs
[23:48:18] [PASSED] 45 VFs
[23:48:18] [PASSED] 46 VFs
[23:48:18] [PASSED] 47 VFs
[23:48:18] [PASSED] 48 VFs
[23:48:18] [PASSED] 49 VFs
[23:48:18] [PASSED] 50 VFs
[23:48:18] [PASSED] 51 VFs
[23:48:18] [PASSED] 52 VFs
[23:48:18] [PASSED] 53 VFs
[23:48:18] [PASSED] 54 VFs
[23:48:18] [PASSED] 55 VFs
[23:48:18] [PASSED] 56 VFs
[23:48:18] [PASSED] 57 VFs
[23:48:18] [PASSED] 58 VFs
[23:48:18] [PASSED] 59 VFs
[23:48:18] [PASSED] 60 VFs
[23:48:18] [PASSED] 61 VFs
[23:48:18] [PASSED] 62 VFs
[23:48:18] [PASSED] 63 VFs
[23:48:18] ================== [PASSED] fair_contexts ==================
[23:48:18] ===================== fair_doorbells ======================
[23:48:18] [PASSED] 1 VF
[23:48:18] [PASSED] 2 VFs
[23:48:18] [PASSED] 3 VFs
[23:48:18] [PASSED] 4 VFs
[23:48:18] [PASSED] 5 VFs
[23:48:18] [PASSED] 6 VFs
[23:48:18] [PASSED] 7 VFs
[23:48:18] [PASSED] 8 VFs
[23:48:18] [PASSED] 9 VFs
[23:48:18] [PASSED] 10 VFs
[23:48:18] [PASSED] 11 VFs
[23:48:18] [PASSED] 12 VFs
[23:48:18] [PASSED] 13 VFs
[23:48:18] [PASSED] 14 VFs
[23:48:18] [PASSED] 15 VFs
[23:48:18] [PASSED] 16 VFs
[23:48:18] [PASSED] 17 VFs
[23:48:18] [PASSED] 18 VFs
[23:48:18] [PASSED] 19 VFs
[23:48:18] [PASSED] 20 VFs
[23:48:18] [PASSED] 21 VFs
[23:48:18] [PASSED] 22 VFs
[23:48:18] [PASSED] 23 VFs
[23:48:18] [PASSED] 24 VFs
[23:48:18] [PASSED] 25 VFs
[23:48:18] [PASSED] 26 VFs
[23:48:18] [PASSED] 27 VFs
[23:48:18] [PASSED] 28 VFs
[23:48:18] [PASSED] 29 VFs
[23:48:18] [PASSED] 30 VFs
[23:48:18] [PASSED] 31 VFs
[23:48:18] [PASSED] 32 VFs
[23:48:18] [PASSED] 33 VFs
[23:48:18] [PASSED] 34 VFs
[23:48:18] [PASSED] 35 VFs
[23:48:18] [PASSED] 36 VFs
[23:48:18] [PASSED] 37 VFs
[23:48:18] [PASSED] 38 VFs
[23:48:18] [PASSED] 39 VFs
[23:48:18] [PASSED] 40 VFs
[23:48:18] [PASSED] 41 VFs
[23:48:18] [PASSED] 42 VFs
[23:48:18] [PASSED] 43 VFs
[23:48:18] [PASSED] 44 VFs
[23:48:18] [PASSED] 45 VFs
[23:48:18] [PASSED] 46 VFs
[23:48:18] [PASSED] 47 VFs
[23:48:18] [PASSED] 48 VFs
[23:48:18] [PASSED] 49 VFs
[23:48:18] [PASSED] 50 VFs
[23:48:18] [PASSED] 51 VFs
[23:48:18] [PASSED] 52 VFs
[23:48:18] [PASSED] 53 VFs
[23:48:18] [PASSED] 54 VFs
[23:48:18] [PASSED] 55 VFs
[23:48:18] [PASSED] 56 VFs
[23:48:18] [PASSED] 57 VFs
[23:48:18] [PASSED] 58 VFs
[23:48:18] [PASSED] 59 VFs
[23:48:18] [PASSED] 60 VFs
[23:48:18] [PASSED] 61 VFs
[23:48:18] [PASSED] 62 VFs
[23:48:18] [PASSED] 63 VFs
[23:48:18] ================= [PASSED] fair_doorbells ==================
[23:48:18] ======================== fair_ggtt ========================
[23:48:18] [PASSED] 1 VF
[23:48:18] [PASSED] 2 VFs
[23:48:18] [PASSED] 3 VFs
[23:48:18] [PASSED] 4 VFs
[23:48:18] [PASSED] 5 VFs
[23:48:18] [PASSED] 6 VFs
[23:48:18] [PASSED] 7 VFs
[23:48:18] [PASSED] 8 VFs
[23:48:18] [PASSED] 9 VFs
[23:48:18] [PASSED] 10 VFs
[23:48:18] [PASSED] 11 VFs
[23:48:18] [PASSED] 12 VFs
[23:48:18] [PASSED] 13 VFs
[23:48:18] [PASSED] 14 VFs
[23:48:18] [PASSED] 15 VFs
[23:48:18] [PASSED] 16 VFs
[23:48:18] [PASSED] 17 VFs
[23:48:18] [PASSED] 18 VFs
[23:48:18] [PASSED] 19 VFs
[23:48:18] [PASSED] 20 VFs
[23:48:18] [PASSED] 21 VFs
[23:48:18] [PASSED] 22 VFs
[23:48:18] [PASSED] 23 VFs
[23:48:18] [PASSED] 24 VFs
[23:48:18] [PASSED] 25 VFs
[23:48:18] [PASSED] 26 VFs
[23:48:18] [PASSED] 27 VFs
[23:48:18] [PASSED] 28 VFs
[23:48:18] [PASSED] 29 VFs
[23:48:18] [PASSED] 30 VFs
[23:48:18] [PASSED] 31 VFs
[23:48:18] [PASSED] 32 VFs
[23:48:18] [PASSED] 33 VFs
[23:48:18] [PASSED] 34 VFs
[23:48:18] [PASSED] 35 VFs
[23:48:18] [PASSED] 36 VFs
[23:48:18] [PASSED] 37 VFs
[23:48:18] [PASSED] 38 VFs
[23:48:18] [PASSED] 39 VFs
[23:48:18] [PASSED] 40 VFs
[23:48:18] [PASSED] 41 VFs
[23:48:18] [PASSED] 42 VFs
[23:48:18] [PASSED] 43 VFs
[23:48:18] [PASSED] 44 VFs
[23:48:18] [PASSED] 45 VFs
[23:48:18] [PASSED] 46 VFs
[23:48:18] [PASSED] 47 VFs
[23:48:18] [PASSED] 48 VFs
[23:48:18] [PASSED] 49 VFs
[23:48:18] [PASSED] 50 VFs
[23:48:18] [PASSED] 51 VFs
[23:48:18] [PASSED] 52 VFs
[23:48:18] [PASSED] 53 VFs
[23:48:18] [PASSED] 54 VFs
[23:48:18] [PASSED] 55 VFs
[23:48:18] [PASSED] 56 VFs
[23:48:18] [PASSED] 57 VFs
[23:48:18] [PASSED] 58 VFs
[23:48:18] [PASSED] 59 VFs
[23:48:18] [PASSED] 60 VFs
[23:48:18] [PASSED] 61 VFs
[23:48:18] [PASSED] 62 VFs
[23:48:18] [PASSED] 63 VFs
[23:48:18] ==================== [PASSED] fair_ggtt ====================
[23:48:19] ======================== fair_vram ========================
[23:48:19] [PASSED] 1 VF
[23:48:19] [PASSED] 2 VFs
[23:48:19] [PASSED] 3 VFs
[23:48:19] [PASSED] 4 VFs
[23:48:19] [PASSED] 5 VFs
[23:48:19] [PASSED] 6 VFs
[23:48:19] [PASSED] 7 VFs
[23:48:19] [PASSED] 8 VFs
[23:48:19] [PASSED] 9 VFs
[23:48:19] [PASSED] 10 VFs
[23:48:19] [PASSED] 11 VFs
[23:48:19] [PASSED] 12 VFs
[23:48:19] [PASSED] 13 VFs
[23:48:19] [PASSED] 14 VFs
[23:48:19] [PASSED] 15 VFs
[23:48:19] [PASSED] 16 VFs
[23:48:19] [PASSED] 17 VFs
[23:48:19] [PASSED] 18 VFs
[23:48:19] [PASSED] 19 VFs
[23:48:19] [PASSED] 20 VFs
[23:48:19] [PASSED] 21 VFs
[23:48:19] [PASSED] 22 VFs
[23:48:19] [PASSED] 23 VFs
[23:48:19] [PASSED] 24 VFs
[23:48:19] [PASSED] 25 VFs
[23:48:19] [PASSED] 26 VFs
[23:48:19] [PASSED] 27 VFs
[23:48:19] [PASSED] 28 VFs
[23:48:19] [PASSED] 29 VFs
[23:48:19] [PASSED] 30 VFs
[23:48:19] [PASSED] 31 VFs
[23:48:19] [PASSED] 32 VFs
[23:48:19] [PASSED] 33 VFs
[23:48:19] [PASSED] 34 VFs
[23:48:19] [PASSED] 35 VFs
[23:48:19] [PASSED] 36 VFs
[23:48:19] [PASSED] 37 VFs
[23:48:19] [PASSED] 38 VFs
[23:48:19] [PASSED] 39 VFs
[23:48:19] [PASSED] 40 VFs
[23:48:19] [PASSED] 41 VFs
[23:48:19] [PASSED] 42 VFs
[23:48:19] [PASSED] 43 VFs
[23:48:19] [PASSED] 44 VFs
[23:48:19] [PASSED] 45 VFs
[23:48:19] [PASSED] 46 VFs
[23:48:19] [PASSED] 47 VFs
[23:48:19] [PASSED] 48 VFs
[23:48:19] [PASSED] 49 VFs
[23:48:19] [PASSED] 50 VFs
[23:48:19] [PASSED] 51 VFs
[23:48:19] [PASSED] 52 VFs
[23:48:19] [PASSED] 53 VFs
[23:48:19] [PASSED] 54 VFs
[23:48:19] [PASSED] 55 VFs
[23:48:19] [PASSED] 56 VFs
[23:48:19] [PASSED] 57 VFs
[23:48:19] [PASSED] 58 VFs
[23:48:19] [PASSED] 59 VFs
[23:48:19] [PASSED] 60 VFs
[23:48:19] [PASSED] 61 VFs
[23:48:19] [PASSED] 62 VFs
[23:48:19] [PASSED] 63 VFs
[23:48:19] ==================== [PASSED] fair_vram ====================
[23:48:19] ================== [PASSED] pf_gt_config ===================
[23:48:19] ===================== lmtt (1 subtest) =====================
[23:48:19] ======================== test_ops =========================
[23:48:19] [PASSED] 2-level
[23:48:19] [PASSED] multi-level
[23:48:19] ==================== [PASSED] test_ops =====================
[23:48:19] ====================== [PASSED] lmtt =======================
[23:48:19] ================= pf_service (11 subtests) =================
[23:48:19] [PASSED] pf_negotiate_any
[23:48:19] [PASSED] pf_negotiate_base_match
[23:48:19] [PASSED] pf_negotiate_base_newer
[23:48:19] [PASSED] pf_negotiate_base_next
[23:48:19] [SKIPPED] pf_negotiate_base_older
[23:48:19] [PASSED] pf_negotiate_base_prev
[23:48:19] [PASSED] pf_negotiate_latest_match
[23:48:19] [PASSED] pf_negotiate_latest_newer
[23:48:19] [PASSED] pf_negotiate_latest_next
[23:48:19] [SKIPPED] pf_negotiate_latest_older
[23:48:19] [SKIPPED] pf_negotiate_latest_prev
[23:48:19] =================== [PASSED] pf_service ====================
[23:48:19] ================= xe_guc_g2g (2 subtests) ==================
[23:48:19] ============== xe_live_guc_g2g_kunit_default ==============
[23:48:19] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[23:48:19] ============== xe_live_guc_g2g_kunit_allmem ===============
[23:48:19] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[23:48:19] =================== [SKIPPED] xe_guc_g2g ===================
[23:48:19] =================== xe_mocs (2 subtests) ===================
[23:48:19] ================ xe_live_mocs_kernel_kunit ================
[23:48:19] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[23:48:19] ================ xe_live_mocs_reset_kunit =================
[23:48:19] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[23:48:19] ==================== [SKIPPED] xe_mocs =====================
[23:48:19] ================= xe_migrate (2 subtests) ==================
[23:48:19] ================= xe_migrate_sanity_kunit =================
[23:48:19] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[23:48:19] ================== xe_validate_ccs_kunit ==================
[23:48:19] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[23:48:19] =================== [SKIPPED] xe_migrate ===================
[23:48:19] ================== xe_dma_buf (1 subtest) ==================
[23:48:19] ==================== xe_dma_buf_kunit =====================
[23:48:19] ================ [SKIPPED] xe_dma_buf_kunit ================
[23:48:19] =================== [SKIPPED] xe_dma_buf ===================
[23:48:19] ================= xe_bo_shrink (1 subtest) =================
[23:48:19] =================== xe_bo_shrink_kunit ====================
[23:48:19] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[23:48:19] ================== [SKIPPED] xe_bo_shrink ==================
[23:48:19] ==================== xe_bo (2 subtests) ====================
[23:48:19] ================== xe_ccs_migrate_kunit ===================
[23:48:19] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[23:48:19] ==================== xe_bo_evict_kunit ====================
[23:48:19] =============== [SKIPPED] xe_bo_evict_kunit ================
[23:48:19] ===================== [SKIPPED] xe_bo ======================
[23:48:19] ==================== args (13 subtests) ====================
[23:48:19] [PASSED] count_args_test
[23:48:19] [PASSED] call_args_example
[23:48:19] [PASSED] call_args_test
[23:48:19] [PASSED] drop_first_arg_example
[23:48:19] [PASSED] drop_first_arg_test
[23:48:19] [PASSED] first_arg_example
[23:48:19] [PASSED] first_arg_test
[23:48:19] [PASSED] last_arg_example
[23:48:19] [PASSED] last_arg_test
[23:48:19] [PASSED] pick_arg_example
[23:48:19] [PASSED] if_args_example
[23:48:19] [PASSED] if_args_test
[23:48:19] [PASSED] sep_comma_example
[23:48:19] ====================== [PASSED] args =======================
[23:48:19] =================== xe_pci (3 subtests) ====================
[23:48:19] ==================== check_graphics_ip ====================
[23:48:19] [PASSED] 12.00 Xe_LP
[23:48:19] [PASSED] 12.10 Xe_LP+
[23:48:19] [PASSED] 12.55 Xe_HPG
[23:48:19] [PASSED] 12.60 Xe_HPC
[23:48:19] [PASSED] 12.70 Xe_LPG
[23:48:19] [PASSED] 12.71 Xe_LPG
[23:48:19] [PASSED] 12.74 Xe_LPG+
[23:48:19] [PASSED] 20.01 Xe2_HPG
[23:48:19] [PASSED] 20.02 Xe2_HPG
[23:48:19] [PASSED] 20.04 Xe2_LPG
[23:48:19] [PASSED] 30.00 Xe3_LPG
[23:48:19] [PASSED] 30.01 Xe3_LPG
[23:48:19] [PASSED] 30.03 Xe3_LPG
[23:48:19] [PASSED] 30.04 Xe3_LPG
[23:48:19] [PASSED] 30.05 Xe3_LPG
[23:48:19] [PASSED] 35.10 Xe3p_LPG
[23:48:19] [PASSED] 35.11 Xe3p_XPC
[23:48:19] ================ [PASSED] check_graphics_ip ================
[23:48:19] ===================== check_media_ip ======================
[23:48:19] [PASSED] 12.00 Xe_M
[23:48:19] [PASSED] 12.55 Xe_HPM
[23:48:19] [PASSED] 13.00 Xe_LPM+
[23:48:19] [PASSED] 13.01 Xe2_HPM
[23:48:19] [PASSED] 20.00 Xe2_LPM
[23:48:19] [PASSED] 30.00 Xe3_LPM
[23:48:19] [PASSED] 30.02 Xe3_LPM
[23:48:19] [PASSED] 35.00 Xe3p_LPM
[23:48:19] [PASSED] 35.03 Xe3p_HPM
[23:48:19] ================= [PASSED] check_media_ip ==================
[23:48:19] =================== check_platform_desc ===================
[23:48:19] [PASSED] 0x9A60 (TIGERLAKE)
[23:48:19] [PASSED] 0x9A68 (TIGERLAKE)
[23:48:19] [PASSED] 0x9A70 (TIGERLAKE)
[23:48:19] [PASSED] 0x9A40 (TIGERLAKE)
[23:48:19] [PASSED] 0x9A49 (TIGERLAKE)
[23:48:19] [PASSED] 0x9A59 (TIGERLAKE)
[23:48:19] [PASSED] 0x9A78 (TIGERLAKE)
[23:48:19] [PASSED] 0x9AC0 (TIGERLAKE)
[23:48:19] [PASSED] 0x9AC9 (TIGERLAKE)
[23:48:19] [PASSED] 0x9AD9 (TIGERLAKE)
[23:48:19] [PASSED] 0x9AF8 (TIGERLAKE)
[23:48:19] [PASSED] 0x4C80 (ROCKETLAKE)
[23:48:19] [PASSED] 0x4C8A (ROCKETLAKE)
[23:48:19] [PASSED] 0x4C8B (ROCKETLAKE)
[23:48:19] [PASSED] 0x4C8C (ROCKETLAKE)
[23:48:19] [PASSED] 0x4C90 (ROCKETLAKE)
[23:48:19] [PASSED] 0x4C9A (ROCKETLAKE)
[23:48:19] [PASSED] 0x4680 (ALDERLAKE_S)
[23:48:19] [PASSED] 0x4682 (ALDERLAKE_S)
[23:48:19] [PASSED] 0x4688 (ALDERLAKE_S)
[23:48:19] [PASSED] 0x468A (ALDERLAKE_S)
[23:48:19] [PASSED] 0x468B (ALDERLAKE_S)
[23:48:19] [PASSED] 0x4690 (ALDERLAKE_S)
[23:48:19] [PASSED] 0x4692 (ALDERLAKE_S)
[23:48:19] [PASSED] 0x4693 (ALDERLAKE_S)
[23:48:19] [PASSED] 0x46A0 (ALDERLAKE_P)
[23:48:19] [PASSED] 0x46A1 (ALDERLAKE_P)
[23:48:19] [PASSED] 0x46A2 (ALDERLAKE_P)
[23:48:19] [PASSED] 0x46A3 (ALDERLAKE_P)
[23:48:19] [PASSED] 0x46A6 (ALDERLAKE_P)
[23:48:19] [PASSED] 0x46A8 (ALDERLAKE_P)
[23:48:19] [PASSED] 0x46AA (ALDERLAKE_P)
[23:48:19] [PASSED] 0x462A (ALDERLAKE_P)
[23:48:19] [PASSED] 0x4626 (ALDERLAKE_P)
[23:48:19] [PASSED] 0x4628 (ALDERLAKE_P)
[23:48:19] [PASSED] 0x46B0 (ALDERLAKE_P)
[23:48:19] [PASSED] 0x46B1 (ALDERLAKE_P)
[23:48:19] [PASSED] 0x46B2 (ALDERLAKE_P)
[23:48:19] [PASSED] 0x46B3 (ALDERLAKE_P)
[23:48:19] [PASSED] 0x46C0 (ALDERLAKE_P)
[23:48:19] [PASSED] 0x46C1 (ALDERLAKE_P)
[23:48:19] [PASSED] 0x46C2 (ALDERLAKE_P)
[23:48:19] [PASSED] 0x46C3 (ALDERLAKE_P)
[23:48:19] [PASSED] 0x46D0 (ALDERLAKE_N)
[23:48:19] [PASSED] 0x46D1 (ALDERLAKE_N)
[23:48:19] [PASSED] 0x46D2 (ALDERLAKE_N)
[23:48:19] [PASSED] 0x46D3 (ALDERLAKE_N)
[23:48:19] [PASSED] 0x46D4 (ALDERLAKE_N)
[23:48:19] [PASSED] 0xA721 (ALDERLAKE_P)
[23:48:19] [PASSED] 0xA7A1 (ALDERLAKE_P)
[23:48:19] [PASSED] 0xA7A9 (ALDERLAKE_P)
[23:48:19] [PASSED] 0xA7AC (ALDERLAKE_P)
[23:48:19] [PASSED] 0xA7AD (ALDERLAKE_P)
[23:48:19] [PASSED] 0xA720 (ALDERLAKE_P)
[23:48:19] [PASSED] 0xA7A0 (ALDERLAKE_P)
[23:48:19] [PASSED] 0xA7A8 (ALDERLAKE_P)
[23:48:19] [PASSED] 0xA7AA (ALDERLAKE_P)
[23:48:19] [PASSED] 0xA7AB (ALDERLAKE_P)
[23:48:19] [PASSED] 0xA780 (ALDERLAKE_S)
[23:48:19] [PASSED] 0xA781 (ALDERLAKE_S)
[23:48:19] [PASSED] 0xA782 (ALDERLAKE_S)
[23:48:19] [PASSED] 0xA783 (ALDERLAKE_S)
[23:48:19] [PASSED] 0xA788 (ALDERLAKE_S)
[23:48:19] [PASSED] 0xA789 (ALDERLAKE_S)
[23:48:19] [PASSED] 0xA78A (ALDERLAKE_S)
[23:48:19] [PASSED] 0xA78B (ALDERLAKE_S)
[23:48:19] [PASSED] 0x4905 (DG1)
[23:48:19] [PASSED] 0x4906 (DG1)
[23:48:19] [PASSED] 0x4907 (DG1)
[23:48:19] [PASSED] 0x4908 (DG1)
[23:48:19] [PASSED] 0x4909 (DG1)
[23:48:19] [PASSED] 0x56C0 (DG2)
[23:48:19] [PASSED] 0x56C2 (DG2)
[23:48:19] [PASSED] 0x56C1 (DG2)
[23:48:19] [PASSED] 0x7D51 (METEORLAKE)
[23:48:19] [PASSED] 0x7DD1 (METEORLAKE)
[23:48:19] [PASSED] 0x7D41 (METEORLAKE)
[23:48:19] [PASSED] 0x7D67 (METEORLAKE)
[23:48:19] [PASSED] 0xB640 (METEORLAKE)
[23:48:19] [PASSED] 0x56A0 (DG2)
[23:48:19] [PASSED] 0x56A1 (DG2)
[23:48:19] [PASSED] 0x56A2 (DG2)
[23:48:19] [PASSED] 0x56BE (DG2)
[23:48:19] [PASSED] 0x56BF (DG2)
[23:48:19] [PASSED] 0x5690 (DG2)
[23:48:19] [PASSED] 0x5691 (DG2)
[23:48:19] [PASSED] 0x5692 (DG2)
[23:48:19] [PASSED] 0x56A5 (DG2)
[23:48:19] [PASSED] 0x56A6 (DG2)
[23:48:19] [PASSED] 0x56B0 (DG2)
[23:48:19] [PASSED] 0x56B1 (DG2)
[23:48:19] [PASSED] 0x56BA (DG2)
[23:48:19] [PASSED] 0x56BB (DG2)
[23:48:19] [PASSED] 0x56BC (DG2)
[23:48:19] [PASSED] 0x56BD (DG2)
[23:48:19] [PASSED] 0x5693 (DG2)
[23:48:19] [PASSED] 0x5694 (DG2)
[23:48:19] [PASSED] 0x5695 (DG2)
[23:48:19] [PASSED] 0x56A3 (DG2)
[23:48:19] [PASSED] 0x56A4 (DG2)
[23:48:19] [PASSED] 0x56B2 (DG2)
[23:48:19] [PASSED] 0x56B3 (DG2)
[23:48:19] [PASSED] 0x5696 (DG2)
[23:48:19] [PASSED] 0x5697 (DG2)
[23:48:19] [PASSED] 0xB69 (PVC)
[23:48:19] [PASSED] 0xB6E (PVC)
[23:48:19] [PASSED] 0xBD4 (PVC)
[23:48:19] [PASSED] 0xBD5 (PVC)
[23:48:19] [PASSED] 0xBD6 (PVC)
[23:48:19] [PASSED] 0xBD7 (PVC)
[23:48:19] [PASSED] 0xBD8 (PVC)
[23:48:19] [PASSED] 0xBD9 (PVC)
[23:48:19] [PASSED] 0xBDA (PVC)
[23:48:19] [PASSED] 0xBDB (PVC)
[23:48:19] [PASSED] 0xBE0 (PVC)
[23:48:19] [PASSED] 0xBE1 (PVC)
[23:48:19] [PASSED] 0xBE5 (PVC)
[23:48:19] [PASSED] 0x7D40 (METEORLAKE)
[23:48:19] [PASSED] 0x7D45 (METEORLAKE)
[23:48:19] [PASSED] 0x7D55 (METEORLAKE)
[23:48:19] [PASSED] 0x7D60 (METEORLAKE)
[23:48:19] [PASSED] 0x7DD5 (METEORLAKE)
[23:48:19] [PASSED] 0x6420 (LUNARLAKE)
[23:48:19] [PASSED] 0x64A0 (LUNARLAKE)
[23:48:19] [PASSED] 0x64B0 (LUNARLAKE)
[23:48:19] [PASSED] 0xE202 (BATTLEMAGE)
[23:48:19] [PASSED] 0xE209 (BATTLEMAGE)
[23:48:19] [PASSED] 0xE20B (BATTLEMAGE)
[23:48:19] [PASSED] 0xE20C (BATTLEMAGE)
[23:48:19] [PASSED] 0xE20D (BATTLEMAGE)
[23:48:19] [PASSED] 0xE210 (BATTLEMAGE)
[23:48:19] [PASSED] 0xE211 (BATTLEMAGE)
[23:48:19] [PASSED] 0xE212 (BATTLEMAGE)
[23:48:19] [PASSED] 0xE216 (BATTLEMAGE)
[23:48:19] [PASSED] 0xE220 (BATTLEMAGE)
[23:48:19] [PASSED] 0xE221 (BATTLEMAGE)
[23:48:19] [PASSED] 0xE222 (BATTLEMAGE)
[23:48:19] [PASSED] 0xE223 (BATTLEMAGE)
[23:48:19] [PASSED] 0xB080 (PANTHERLAKE)
[23:48:19] [PASSED] 0xB081 (PANTHERLAKE)
[23:48:19] [PASSED] 0xB082 (PANTHERLAKE)
[23:48:19] [PASSED] 0xB083 (PANTHERLAKE)
[23:48:19] [PASSED] 0xB084 (PANTHERLAKE)
[23:48:19] [PASSED] 0xB085 (PANTHERLAKE)
[23:48:19] [PASSED] 0xB086 (PANTHERLAKE)
[23:48:19] [PASSED] 0xB087 (PANTHERLAKE)
[23:48:19] [PASSED] 0xB08F (PANTHERLAKE)
[23:48:19] [PASSED] 0xB090 (PANTHERLAKE)
[23:48:19] [PASSED] 0xB0A0 (PANTHERLAKE)
[23:48:19] [PASSED] 0xB0B0 (PANTHERLAKE)
[23:48:19] [PASSED] 0xFD80 (PANTHERLAKE)
[23:48:19] [PASSED] 0xFD81 (PANTHERLAKE)
[23:48:19] [PASSED] 0xD740 (NOVALAKE_S)
[23:48:19] [PASSED] 0xD741 (NOVALAKE_S)
[23:48:19] [PASSED] 0xD742 (NOVALAKE_S)
[23:48:19] [PASSED] 0xD743 (NOVALAKE_S)
[23:48:19] [PASSED] 0xD744 (NOVALAKE_S)
[23:48:19] [PASSED] 0xD745 (NOVALAKE_S)
[23:48:19] [PASSED] 0x674C (CRESCENTISLAND)
[23:48:19] [PASSED] 0x674D (CRESCENTISLAND)
[23:48:19] [PASSED] 0x674E (CRESCENTISLAND)
[23:48:19] [PASSED] 0x674F (CRESCENTISLAND)
[23:48:19] [PASSED] 0x6750 (CRESCENTISLAND)
[23:48:19] [PASSED] 0xD750 (NOVALAKE_P)
[23:48:19] [PASSED] 0xD751 (NOVALAKE_P)
[23:48:19] [PASSED] 0xD752 (NOVALAKE_P)
[23:48:19] [PASSED] 0xD753 (NOVALAKE_P)
[23:48:19] [PASSED] 0xD754 (NOVALAKE_P)
[23:48:19] [PASSED] 0xD755 (NOVALAKE_P)
[23:48:19] [PASSED] 0xD756 (NOVALAKE_P)
[23:48:19] [PASSED] 0xD757 (NOVALAKE_P)
[23:48:19] [PASSED] 0xD75F (NOVALAKE_P)
[23:48:19] =============== [PASSED] check_platform_desc ===============
[23:48:19] ===================== [PASSED] xe_pci ======================
[23:48:19] ============= xe_rtp_tables_test (4 subtests) ==============
[23:48:19] ================== xe_rtp_table_gt_test ===================
[23:48:19] [PASSED] gt_was/14011060649
[23:48:19] [PASSED] gt_was/14011059788
[23:48:19] [PASSED] gt_was/14015795083
[23:48:19] [PASSED] gt_was/16021867713
[23:48:19] [PASSED] gt_was/14019449301
[23:48:19] [PASSED] gt_was/16028005424
[23:48:19] [PASSED] gt_was/14026578760
[23:48:19] [PASSED] gt_was/1409420604
[23:48:19] [PASSED] gt_was/1408615072
[23:48:19] [PASSED] gt_was/22010523718
[23:48:19] [PASSED] gt_was/14011006942
[23:48:19] [PASSED] gt_was/14014830051
[23:48:19] [PASSED] gt_was/18018781329
[23:48:19] [PASSED] gt_was/1509235366
[23:48:19] [PASSED] gt_was/18018781329
[23:48:19] [PASSED] gt_was/16016694945
[23:48:19] [PASSED] gt_was/14018575942
[23:48:19] [PASSED] gt_was/22016670082
[23:48:19] [PASSED] gt_was/22016670082
[23:48:19] [PASSED] gt_was/14017421178
[23:48:19] [PASSED] gt_was/16025250150
[23:48:19] [PASSED] gt_was/14021871409
[23:48:19] [PASSED] gt_was/16021865536
[23:48:19] [PASSED] gt_was/14021486841
[23:48:19] [PASSED] gt_was/14025160223
[23:48:19] [PASSED] gt_was/14026144927, 16029437861
[23:48:19] [PASSED] gt_was/14025635424
[23:48:19] [PASSED] gt_was/16028005424
[23:48:19] ============== [PASSED] xe_rtp_table_gt_test ===============
[23:48:19] ================== xe_rtp_table_gt_test ===================
[23:48:19] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[23:48:19] [PASSED] gt_tunings/Tuning: 32B Access Enable
[23:48:19] [PASSED] gt_tunings/Tuning: L3 cache
[23:48:19] [PASSED] gt_tunings/Tuning: L3 cache - media
[23:48:19] [PASSED] gt_tunings/Tuning: Compression Overfetch
[23:48:19] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[23:48:19] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[23:48:19] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[23:48:19] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[23:48:19] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[23:48:19] [PASSED] gt_tunings/Tuning: Stateless compression control
[23:48:19] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[23:48:19] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[23:48:19] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[23:48:19] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[23:48:19] ============== [PASSED] xe_rtp_table_gt_test ===============
[23:48:19] ================== xe_rtp_table_oob_test ==================
[23:48:19] [PASSED] oob_was/1607983814
[23:48:19] [PASSED] oob_was/16010904313
[23:48:19] [PASSED] oob_was/18022495364
[23:48:19] [PASSED] oob_was/22012773006
[23:48:19] [PASSED] oob_was/14014475959
[23:48:19] [PASSED] oob_was/22011391025
[23:48:19] [PASSED] oob_was/22012727170
[23:48:19] [PASSED] oob_was/22012727685
[23:48:19] [PASSED] oob_was/22016596838
[23:48:19] [PASSED] oob_was/18020744125
[23:48:19] [PASSED] oob_was/1409600907
[23:48:19] [PASSED] oob_was/22014953428
[23:48:19] [PASSED] oob_was/16017236439
[23:48:19] [PASSED] oob_was/14019821291
[23:48:19] [PASSED] oob_was/14015076503
[23:48:19] [PASSED] oob_was/14018913170
[23:48:19] [PASSED] oob_was/14018094691
[23:48:19] [PASSED] oob_was/18024947630
[23:48:19] [PASSED] oob_was/16022287689
[23:48:19] [PASSED] oob_was/13011645652
[23:48:19] [PASSED] oob_was/14022293748
[23:48:19] [PASSED] oob_was/22019794406
[23:48:19] [PASSED] oob_was/22019338487
[23:48:19] [PASSED] oob_was/16023588340
[23:48:19] [PASSED] oob_was/14019789679
[23:48:19] [PASSED] oob_was/14022866841
[23:48:19] [PASSED] oob_was/16021333562
[23:48:19] [PASSED] oob_was/14016712196
[23:48:19] [PASSED] oob_was/14015568240
[23:48:19] [PASSED] oob_was/18013179988
[23:48:19] [PASSED] oob_was/1508761755
[23:48:19] [PASSED] oob_was/16023105232
[23:48:19] [PASSED] oob_was/16026508708
[23:48:19] [PASSED] oob_was/14020001231
[23:48:19] [PASSED] oob_was/16023683509
[23:48:19] [PASSED] oob_was/14025515070
[23:48:19] [PASSED] oob_was/15015404425_disable
[23:48:19] [PASSED] oob_was/16026007364
[23:48:19] [PASSED] oob_was/14020316580
[23:48:19] [PASSED] oob_was/14025883347
[23:48:19] ============== [PASSED] xe_rtp_table_oob_test ==============
[23:48:19] ================ xe_rtp_table_dev_oob_test ================
[23:48:19] [PASSED] device_oob_was/22010954014
[23:48:19] [PASSED] device_oob_was/15015404425
[23:48:19] [PASSED] device_oob_was/22019338487_display
[23:48:19] [PASSED] device_oob_was/14022085890
[23:48:19] [PASSED] device_oob_was/14026539277
[23:48:19] [PASSED] device_oob_was/14026633728
[23:48:19] [PASSED] device_oob_was/14026746987
[23:48:19] [PASSED] device_oob_was/14026779378
[23:48:19] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[23:48:19] =============== [PASSED] xe_rtp_tables_test ================
[23:48:19] =================== xe_rtp (3 subtests) ====================
[23:48:19] =================== xe_rtp_rules_tests ====================
[23:48:19] [PASSED] no
[23:48:19] [PASSED] yes
[23:48:19] [PASSED] no-and-no
[23:48:19] [PASSED] no-and-yes
[23:48:19] [PASSED] yes-and-no
[23:48:19] [PASSED] yes-and-yes
[23:48:19] [PASSED] no-or-no
[23:48:19] [PASSED] no-or-yes
[23:48:19] [PASSED] yes-or-no
[23:48:19] [PASSED] yes-or-yes
[23:48:19] [PASSED] no-yes-or-yes-no
[23:48:19] [PASSED] no-yes-or-yes-yes
[23:48:19] [PASSED] yes-yes-or-no-yes
[23:48:19] [PASSED] yes-yes-or-yes-yes
[23:48:19] [PASSED] no-no-or-yes-or-no
[23:48:19] [PASSED] or
[23:48:19] [PASSED] or-yes
[23:48:19] [PASSED] or-no
[23:48:19] [PASSED] yes-or
[23:48:19] [PASSED] no-or
[23:48:19] [PASSED] no-or-or-yes
[23:48:19] [PASSED] yes-or-or-no
[23:48:19] [PASSED] no-or-or-no
[23:48:19] [PASSED] missing-context-engine-class
[23:48:19] [PASSED] missing-context-engine-class-or-yes
[23:48:19] [PASSED] missing-context-engine-class-or-or-yes
[23:48:19] =============== [PASSED] xe_rtp_rules_tests ================
[23:48:19] =============== xe_rtp_process_to_sr_tests ================
[23:48:19] [PASSED] coalesce-same-reg
[23:48:19] [PASSED] no-match-no-add
[23:48:19] [PASSED] two-regs-two-entries
[23:48:19] [PASSED] clr-one-set-other
[23:48:19] [PASSED] set-field
[23:48:19] [PASSED] conflict-duplicate
[23:48:19] [PASSED] conflict-not-disjoint
[23:48:19] [PASSED] conflict-reg-type
[23:48:19] [PASSED] bad-mcr-reg-forced-to-regular
[23:48:19] [PASSED] bad-regular-reg-forced-to-mcr
[23:48:19] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[23:48:19] ================== xe_rtp_process_tests ===================
[23:48:19] [PASSED] active1
[23:48:19] [PASSED] active2
[23:48:19] [PASSED] active-inactive
[23:48:19] [PASSED] inactive-active
[23:48:19] [PASSED] inactive-active-inactive
[23:48:19] [PASSED] inactive-inactive-inactive
[23:48:19] ============== [PASSED] xe_rtp_process_tests ===============
[23:48:19] ===================== [PASSED] xe_rtp ======================
[23:48:19] ==================== xe_wa (1 subtest) =====================
[23:48:19] ======================== xe_wa_gt =========================
[23:48:19] [PASSED] TIGERLAKE B0
[23:48:19] [PASSED] DG1 A0
[23:48:19] [PASSED] DG1 B0
[23:48:19] [PASSED] ALDERLAKE_S A0
[23:48:19] [PASSED] ALDERLAKE_S B0
[23:48:19] [PASSED] ALDERLAKE_S C0
[23:48:19] [PASSED] ALDERLAKE_S D0
[23:48:19] [PASSED] ALDERLAKE_P A0
[23:48:19] [PASSED] ALDERLAKE_P B0
[23:48:19] [PASSED] ALDERLAKE_P C0
[23:48:19] [PASSED] ALDERLAKE_S RPLS D0
[23:48:19] [PASSED] ALDERLAKE_P RPLU E0
[23:48:19] [PASSED] DG2 G10 C0
[23:48:19] [PASSED] DG2 G11 B1
[23:48:19] [PASSED] DG2 G12 A1
[23:48:19] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[23:48:19] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[23:48:19] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[23:48:19] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[23:48:19] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[23:48:19] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[23:48:19] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[23:48:19] ==================== [PASSED] xe_wa_gt =====================
[23:48:19] ====================== [PASSED] xe_wa ======================
[23:48:19] ============================================================
[23:48:19] Testing complete. Ran 715 tests: passed: 697, skipped: 18
[23:48:19] Elapsed time: 36.164s total, 4.305s configuring, 31.193s building, 0.640s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[23:48:19] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[23:48: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:48:45] Starting KUnit Kernel (1/1)...
[23:48:45] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[23:48:45] ============ drm_test_pick_cmdline (2 subtests) ============
[23:48:45] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[23:48:45] =============== drm_test_pick_cmdline_named ===============
[23:48:45] [PASSED] NTSC
[23:48:45] [PASSED] NTSC-J
[23:48:45] [PASSED] PAL
[23:48:45] [PASSED] PAL-M
[23:48:45] =========== [PASSED] drm_test_pick_cmdline_named ===========
[23:48:45] ============== [PASSED] drm_test_pick_cmdline ==============
[23:48:45] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[23:48:45] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[23:48:45] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[23:48:45] =========== drm_validate_clone_mode (2 subtests) ===========
[23:48:45] ============== drm_test_check_in_clone_mode ===============
[23:48:45] [PASSED] in_clone_mode
[23:48:45] [PASSED] not_in_clone_mode
[23:48:45] ========== [PASSED] drm_test_check_in_clone_mode ===========
[23:48:45] =============== drm_test_check_valid_clones ===============
[23:48:45] [PASSED] not_in_clone_mode
[23:48:45] [PASSED] valid_clone
[23:48:45] [PASSED] invalid_clone
[23:48:45] =========== [PASSED] drm_test_check_valid_clones ===========
[23:48:45] ============= [PASSED] drm_validate_clone_mode =============
[23:48:45] ============= drm_validate_modeset (1 subtest) =============
[23:48:45] [PASSED] drm_test_check_connector_changed_modeset
[23:48:45] ============== [PASSED] drm_validate_modeset ===============
[23:48:45] ====== drm_test_bridge_get_current_state (2 subtests) ======
[23:48:45] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[23:48:45] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[23:48:45] ======== [PASSED] drm_test_bridge_get_current_state ========
[23:48:45] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[23:48:45] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[23:48:45] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[23:48:45] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[23:48:45] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[23:48:45] ============== drm_bridge_alloc (2 subtests) ===============
[23:48:45] [PASSED] drm_test_drm_bridge_alloc_basic
[23:48:45] [PASSED] drm_test_drm_bridge_alloc_get_put
[23:48:45] ================ [PASSED] drm_bridge_alloc =================
[23:48:45] ============= drm_cmdline_parser (40 subtests) =============
[23:48:45] [PASSED] drm_test_cmdline_force_d_only
[23:48:45] [PASSED] drm_test_cmdline_force_D_only_dvi
[23:48:45] [PASSED] drm_test_cmdline_force_D_only_hdmi
[23:48:45] [PASSED] drm_test_cmdline_force_D_only_not_digital
[23:48:45] [PASSED] drm_test_cmdline_force_e_only
[23:48:45] [PASSED] drm_test_cmdline_res
[23:48:45] [PASSED] drm_test_cmdline_res_vesa
[23:48:45] [PASSED] drm_test_cmdline_res_vesa_rblank
[23:48:45] [PASSED] drm_test_cmdline_res_rblank
[23:48:45] [PASSED] drm_test_cmdline_res_bpp
[23:48:45] [PASSED] drm_test_cmdline_res_refresh
[23:48:45] [PASSED] drm_test_cmdline_res_bpp_refresh
[23:48:45] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[23:48:45] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[23:48:45] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[23:48:45] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[23:48:45] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[23:48:45] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[23:48:45] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[23:48:45] [PASSED] drm_test_cmdline_res_margins_force_on
[23:48:45] [PASSED] drm_test_cmdline_res_vesa_margins
[23:48:45] [PASSED] drm_test_cmdline_name
[23:48:45] [PASSED] drm_test_cmdline_name_bpp
[23:48:45] [PASSED] drm_test_cmdline_name_option
[23:48:45] [PASSED] drm_test_cmdline_name_bpp_option
[23:48:45] [PASSED] drm_test_cmdline_rotate_0
[23:48:45] [PASSED] drm_test_cmdline_rotate_90
[23:48:45] [PASSED] drm_test_cmdline_rotate_180
[23:48:45] [PASSED] drm_test_cmdline_rotate_270
[23:48:45] [PASSED] drm_test_cmdline_hmirror
[23:48:45] [PASSED] drm_test_cmdline_vmirror
[23:48:45] [PASSED] drm_test_cmdline_margin_options
[23:48:45] [PASSED] drm_test_cmdline_multiple_options
[23:48:45] [PASSED] drm_test_cmdline_bpp_extra_and_option
[23:48:45] [PASSED] drm_test_cmdline_extra_and_option
[23:48:45] [PASSED] drm_test_cmdline_freestanding_options
[23:48:45] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[23:48:45] [PASSED] drm_test_cmdline_panel_orientation
[23:48:45] ================ drm_test_cmdline_invalid =================
[23:48:45] [PASSED] margin_only
[23:48:45] [PASSED] interlace_only
[23:48:45] [PASSED] res_missing_x
[23:48:45] [PASSED] res_missing_y
[23:48:45] [PASSED] res_bad_y
[23:48:45] [PASSED] res_missing_y_bpp
[23:48:45] [PASSED] res_bad_bpp
[23:48:45] [PASSED] res_bad_refresh
[23:48:45] [PASSED] res_bpp_refresh_force_on_off
[23:48:45] [PASSED] res_invalid_mode
[23:48:45] [PASSED] res_bpp_wrong_place_mode
[23:48:45] [PASSED] name_bpp_refresh
[23:48:45] [PASSED] name_refresh
[23:48:45] [PASSED] name_refresh_wrong_mode
[23:48:45] [PASSED] name_refresh_invalid_mode
[23:48:45] [PASSED] rotate_multiple
[23:48:45] [PASSED] rotate_invalid_val
[23:48:45] [PASSED] rotate_truncated
[23:48:45] [PASSED] invalid_option
[23:48:45] [PASSED] invalid_tv_option
[23:48:45] [PASSED] truncated_tv_option
[23:48:45] ============ [PASSED] drm_test_cmdline_invalid =============
[23:48:45] =============== drm_test_cmdline_tv_options ===============
[23:48:45] [PASSED] NTSC
[23:48:45] [PASSED] NTSC_443
[23:48:45] [PASSED] NTSC_J
[23:48:45] [PASSED] PAL
[23:48:45] [PASSED] PAL_M
[23:48:45] [PASSED] PAL_N
[23:48:45] [PASSED] SECAM
[23:48:45] [PASSED] MONO_525
[23:48:45] [PASSED] MONO_625
[23:48:45] =========== [PASSED] drm_test_cmdline_tv_options ===========
[23:48:45] =============== [PASSED] drm_cmdline_parser ================
[23:48:45] ========== drmm_connector_hdmi_init (20 subtests) ==========
[23:48:45] [PASSED] drm_test_connector_hdmi_init_valid
[23:48:45] [PASSED] drm_test_connector_hdmi_init_bpc_8
[23:48:45] [PASSED] drm_test_connector_hdmi_init_bpc_10
[23:48:45] [PASSED] drm_test_connector_hdmi_init_bpc_12
[23:48:45] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[23:48:45] [PASSED] drm_test_connector_hdmi_init_bpc_null
[23:48:45] [PASSED] drm_test_connector_hdmi_init_formats_empty
[23:48:45] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[23:48:45] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[23:48:45] [PASSED] supported_formats=0x9 yuv420_allowed=1
[23:48:45] [PASSED] supported_formats=0x9 yuv420_allowed=0
[23:48:45] [PASSED] supported_formats=0x5 yuv420_allowed=1
[23:48:45] [PASSED] supported_formats=0x5 yuv420_allowed=0
[23:48:45] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[23:48:45] [PASSED] drm_test_connector_hdmi_init_null_ddc
[23:48:45] [PASSED] drm_test_connector_hdmi_init_null_product
[23:48:45] [PASSED] drm_test_connector_hdmi_init_null_vendor
[23:48:45] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[23:48:45] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[23:48:45] [PASSED] drm_test_connector_hdmi_init_product_valid
[23:48:45] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[23:48:45] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[23:48:45] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[23:48:45] ========= drm_test_connector_hdmi_init_type_valid =========
[23:48:45] [PASSED] HDMI-A
[23:48:45] [PASSED] HDMI-B
[23:48:45] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[23:48:45] ======== drm_test_connector_hdmi_init_type_invalid ========
[23:48:45] [PASSED] Unknown
[23:48:45] [PASSED] VGA
[23:48:45] [PASSED] DVI-I
[23:48:45] [PASSED] DVI-D
[23:48:45] [PASSED] DVI-A
[23:48:45] [PASSED] Composite
[23:48:45] [PASSED] SVIDEO
[23:48:45] [PASSED] LVDS
[23:48:45] [PASSED] Component
[23:48:45] [PASSED] DIN
[23:48:45] [PASSED] DP
[23:48:45] [PASSED] TV
[23:48:45] [PASSED] eDP
[23:48:45] [PASSED] Virtual
[23:48:45] [PASSED] DSI
[23:48:45] [PASSED] DPI
[23:48:45] [PASSED] Writeback
[23:48:45] [PASSED] SPI
[23:48:45] [PASSED] USB
[23:48:45] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[23:48:45] ============ [PASSED] drmm_connector_hdmi_init =============
[23:48:45] ============= drmm_connector_init (3 subtests) =============
[23:48:45] [PASSED] drm_test_drmm_connector_init
[23:48:45] [PASSED] drm_test_drmm_connector_init_null_ddc
[23:48:45] ========= drm_test_drmm_connector_init_type_valid =========
[23:48:45] [PASSED] Unknown
[23:48:45] [PASSED] VGA
[23:48:45] [PASSED] DVI-I
[23:48:45] [PASSED] DVI-D
[23:48:45] [PASSED] DVI-A
[23:48:45] [PASSED] Composite
[23:48:45] [PASSED] SVIDEO
[23:48:45] [PASSED] LVDS
[23:48:45] [PASSED] Component
[23:48:45] [PASSED] DIN
[23:48:45] [PASSED] DP
[23:48:45] [PASSED] HDMI-A
[23:48:45] [PASSED] HDMI-B
[23:48:45] [PASSED] TV
[23:48:45] [PASSED] eDP
[23:48:45] [PASSED] Virtual
[23:48:45] [PASSED] DSI
[23:48:45] [PASSED] DPI
[23:48:45] [PASSED] Writeback
[23:48:45] [PASSED] SPI
[23:48:45] [PASSED] USB
[23:48:45] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[23:48:45] =============== [PASSED] drmm_connector_init ===============
[23:48:45] ========= drm_connector_dynamic_init (6 subtests) ==========
[23:48:45] [PASSED] drm_test_drm_connector_dynamic_init
[23:48:45] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[23:48:45] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[23:48:45] [PASSED] drm_test_drm_connector_dynamic_init_properties
[23:48:45] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[23:48:45] [PASSED] Unknown
[23:48:45] [PASSED] VGA
[23:48:45] [PASSED] DVI-I
[23:48:45] [PASSED] DVI-D
[23:48:45] [PASSED] DVI-A
[23:48:45] [PASSED] Composite
[23:48:45] [PASSED] SVIDEO
[23:48:45] [PASSED] LVDS
[23:48:45] [PASSED] Component
[23:48:45] [PASSED] DIN
[23:48:45] [PASSED] DP
[23:48:45] [PASSED] HDMI-A
[23:48:45] [PASSED] HDMI-B
[23:48:45] [PASSED] TV
[23:48:45] [PASSED] eDP
[23:48:45] [PASSED] Virtual
[23:48:45] [PASSED] DSI
[23:48:45] [PASSED] DPI
[23:48:45] [PASSED] Writeback
[23:48:45] [PASSED] SPI
[23:48:45] [PASSED] USB
[23:48:45] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[23:48:45] ======== drm_test_drm_connector_dynamic_init_name =========
[23:48:45] [PASSED] Unknown
[23:48:45] [PASSED] VGA
[23:48:45] [PASSED] DVI-I
[23:48:45] [PASSED] DVI-D
[23:48:45] [PASSED] DVI-A
[23:48:45] [PASSED] Composite
[23:48:45] [PASSED] SVIDEO
[23:48:45] [PASSED] LVDS
[23:48:45] [PASSED] Component
[23:48:45] [PASSED] DIN
[23:48:45] [PASSED] DP
[23:48:45] [PASSED] HDMI-A
[23:48:45] [PASSED] HDMI-B
[23:48:45] [PASSED] TV
[23:48:45] [PASSED] eDP
[23:48:45] [PASSED] Virtual
[23:48:45] [PASSED] DSI
[23:48:45] [PASSED] DPI
[23:48:45] [PASSED] Writeback
[23:48:45] [PASSED] SPI
[23:48:45] [PASSED] USB
[23:48:45] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[23:48:45] =========== [PASSED] drm_connector_dynamic_init ============
[23:48:45] ==== drm_connector_dynamic_register_early (4 subtests) =====
[23:48:45] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[23:48:45] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[23:48:45] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[23:48:45] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[23:48:45] ====== [PASSED] drm_connector_dynamic_register_early =======
[23:48:45] ======= drm_connector_dynamic_register (7 subtests) ========
[23:48:45] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[23:48:45] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[23:48:45] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[23:48:45] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[23:48:45] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[23:48:45] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[23:48:45] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[23:48:45] ========= [PASSED] drm_connector_dynamic_register ==========
[23:48:45] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[23:48:45] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[23:48:45] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[23:48:45] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[23:48:45] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[23:48:45] ========== drm_test_get_tv_mode_from_name_valid ===========
[23:48:45] [PASSED] NTSC
[23:48:45] [PASSED] NTSC-443
[23:48:45] [PASSED] NTSC-J
[23:48:45] [PASSED] PAL
[23:48:45] [PASSED] PAL-M
[23:48:45] [PASSED] PAL-N
[23:48:45] [PASSED] SECAM
[23:48:45] [PASSED] Mono
[23:48:45] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[23:48:45] [PASSED] drm_test_get_tv_mode_from_name_truncated
[23:48:45] ============ [PASSED] drm_get_tv_mode_from_name ============
[23:48:45] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[23:48:45] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[23:48:45] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[23:48:45] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[23:48:45] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[23:48:45] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[23:48:45] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[23:48:45] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[23:48:45] [PASSED] VIC 96
[23:48:45] [PASSED] VIC 97
[23:48:45] [PASSED] VIC 101
[23:48:45] [PASSED] VIC 102
[23:48:45] [PASSED] VIC 106
[23:48:45] [PASSED] VIC 107
[23:48:45] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[23:48:45] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[23:48:45] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[23:48:45] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[23:48:45] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[23:48:45] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[23:48:45] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[23:48:45] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[23:48:45] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[23:48:45] [PASSED] Automatic
[23:48:45] [PASSED] Full
[23:48:45] [PASSED] Limited 16:235
[23:48:45] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[23:48:45] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[23:48:45] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[23:48:45] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[23:48:45] === drm_test_drm_hdmi_connector_get_output_format_name ====
[23:48:45] [PASSED] RGB
[23:48:45] [PASSED] YUV 4:2:0
[23:48:45] [PASSED] YUV 4:2:2
[23:48:45] [PASSED] YUV 4:4:4
[23:48:45] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[23:48:45] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[23:48:45] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[23:48:45] ============= drm_damage_helper (21 subtests) ==============
[23:48:45] [PASSED] drm_test_damage_iter_no_damage
[23:48:45] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[23:48:45] [PASSED] drm_test_damage_iter_no_damage_src_moved
[23:48:45] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[23:48:45] [PASSED] drm_test_damage_iter_no_damage_not_visible
[23:48:45] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[23:48:45] [PASSED] drm_test_damage_iter_no_damage_no_fb
[23:48:45] [PASSED] drm_test_damage_iter_simple_damage
[23:48:45] [PASSED] drm_test_damage_iter_single_damage
[23:48:45] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[23:48:45] [PASSED] drm_test_damage_iter_single_damage_outside_src
[23:48:45] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[23:48:45] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[23:48:45] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[23:48:45] [PASSED] drm_test_damage_iter_single_damage_src_moved
[23:48:45] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[23:48:45] [PASSED] drm_test_damage_iter_damage
[23:48:45] [PASSED] drm_test_damage_iter_damage_one_intersect
[23:48:45] [PASSED] drm_test_damage_iter_damage_one_outside
[23:48:45] [PASSED] drm_test_damage_iter_damage_src_moved
[23:48:45] [PASSED] drm_test_damage_iter_damage_not_visible
[23:48:45] ================ [PASSED] drm_damage_helper ================
[23:48:45] ============== drm_dp_mst_helper (3 subtests) ==============
[23:48:45] ============== drm_test_dp_mst_calc_pbn_mode ==============
[23:48:45] [PASSED] Clock 154000 BPP 30 DSC disabled
[23:48:45] [PASSED] Clock 234000 BPP 30 DSC disabled
[23:48:45] [PASSED] Clock 297000 BPP 24 DSC disabled
[23:48:45] [PASSED] Clock 332880 BPP 24 DSC enabled
[23:48:45] [PASSED] Clock 324540 BPP 24 DSC enabled
[23:48:45] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[23:48:45] ============== drm_test_dp_mst_calc_pbn_div ===============
[23:48:45] [PASSED] Link rate 2000000 lane count 4
[23:48:45] [PASSED] Link rate 2000000 lane count 2
[23:48:45] [PASSED] Link rate 2000000 lane count 1
[23:48:45] [PASSED] Link rate 1350000 lane count 4
[23:48:45] [PASSED] Link rate 1350000 lane count 2
[23:48:45] [PASSED] Link rate 1350000 lane count 1
[23:48:45] [PASSED] Link rate 1000000 lane count 4
[23:48:45] [PASSED] Link rate 1000000 lane count 2
[23:48:45] [PASSED] Link rate 1000000 lane count 1
[23:48:45] [PASSED] Link rate 810000 lane count 4
[23:48:45] [PASSED] Link rate 810000 lane count 2
[23:48:45] [PASSED] Link rate 810000 lane count 1
[23:48:45] [PASSED] Link rate 540000 lane count 4
[23:48:45] [PASSED] Link rate 540000 lane count 2
[23:48:45] [PASSED] Link rate 540000 lane count 1
[23:48:45] [PASSED] Link rate 270000 lane count 4
[23:48:45] [PASSED] Link rate 270000 lane count 2
[23:48:45] [PASSED] Link rate 270000 lane count 1
[23:48:45] [PASSED] Link rate 162000 lane count 4
[23:48:45] [PASSED] Link rate 162000 lane count 2
[23:48:45] [PASSED] Link rate 162000 lane count 1
[23:48:45] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[23:48:45] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[23:48:45] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[23:48:45] [PASSED] DP_POWER_UP_PHY with port number
[23:48:45] [PASSED] DP_POWER_DOWN_PHY with port number
[23:48:45] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[23:48:45] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[23:48:45] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[23:48:45] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[23:48:45] [PASSED] DP_QUERY_PAYLOAD with port number
[23:48:45] [PASSED] DP_QUERY_PAYLOAD with VCPI
[23:48:45] [PASSED] DP_REMOTE_DPCD_READ with port number
[23:48:45] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[23:48:45] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[23:48:45] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[23:48:45] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[23:48:45] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[23:48:45] [PASSED] DP_REMOTE_I2C_READ with port number
[23:48:45] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[23:48:45] [PASSED] DP_REMOTE_I2C_READ with transactions array
[23:48:45] [PASSED] DP_REMOTE_I2C_WRITE with port number
[23:48:45] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[23:48:45] [PASSED] DP_REMOTE_I2C_WRITE with data array
[23:48:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[23:48:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[23:48:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[23:48:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[23:48:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[23:48:45] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[23:48:45] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[23:48:45] ================ [PASSED] drm_dp_mst_helper ================
[23:48:45] ================== drm_exec (7 subtests) ===================
[23:48:45] [PASSED] sanitycheck
[23:48:45] [PASSED] test_lock
[23:48:45] [PASSED] test_lock_unlock
[23:48:45] [PASSED] test_duplicates
[23:48:45] [PASSED] test_prepare
[23:48:45] [PASSED] test_prepare_array
[23:48:45] [PASSED] test_multiple_loops
[23:48:45] ==================== [PASSED] drm_exec =====================
[23:48:45] =========== drm_format_helper_test (17 subtests) ===========
[23:48:45] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[23:48:45] [PASSED] single_pixel_source_buffer
[23:48:45] [PASSED] single_pixel_clip_rectangle
[23:48:45] [PASSED] well_known_colors
[23:48:45] [PASSED] destination_pitch
[23:48:45] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[23:48:45] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[23:48:45] [PASSED] single_pixel_source_buffer
[23:48:45] [PASSED] single_pixel_clip_rectangle
[23:48:45] [PASSED] well_known_colors
[23:48:45] [PASSED] destination_pitch
[23:48:45] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[23:48:45] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[23:48:45] [PASSED] single_pixel_source_buffer
[23:48:45] [PASSED] single_pixel_clip_rectangle
[23:48:45] [PASSED] well_known_colors
[23:48:45] [PASSED] destination_pitch
[23:48:45] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[23:48:45] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[23:48:45] [PASSED] single_pixel_source_buffer
[23:48:45] [PASSED] single_pixel_clip_rectangle
[23:48:45] [PASSED] well_known_colors
[23:48:45] [PASSED] destination_pitch
[23:48:45] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[23:48:45] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[23:48:45] [PASSED] single_pixel_source_buffer
[23:48:45] [PASSED] single_pixel_clip_rectangle
[23:48:45] [PASSED] well_known_colors
[23:48:45] [PASSED] destination_pitch
[23:48:45] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[23:48:45] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[23:48:45] [PASSED] single_pixel_source_buffer
[23:48:45] [PASSED] single_pixel_clip_rectangle
[23:48:45] [PASSED] well_known_colors
[23:48:45] [PASSED] destination_pitch
[23:48:45] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[23:48:45] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[23:48:45] [PASSED] single_pixel_source_buffer
[23:48:45] [PASSED] single_pixel_clip_rectangle
[23:48:45] [PASSED] well_known_colors
[23:48:45] [PASSED] destination_pitch
[23:48:45] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[23:48:45] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[23:48:45] [PASSED] single_pixel_source_buffer
[23:48:45] [PASSED] single_pixel_clip_rectangle
[23:48:45] [PASSED] well_known_colors
[23:48:45] [PASSED] destination_pitch
[23:48:45] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[23:48:45] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[23:48:45] [PASSED] single_pixel_source_buffer
[23:48:45] [PASSED] single_pixel_clip_rectangle
[23:48:45] [PASSED] well_known_colors
[23:48:45] [PASSED] destination_pitch
[23:48:45] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[23:48:45] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[23:48:45] [PASSED] single_pixel_source_buffer
[23:48:45] [PASSED] single_pixel_clip_rectangle
[23:48:45] [PASSED] well_known_colors
[23:48:45] [PASSED] destination_pitch
[23:48:45] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[23:48:45] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[23:48:45] [PASSED] single_pixel_source_buffer
[23:48:45] [PASSED] single_pixel_clip_rectangle
[23:48:45] [PASSED] well_known_colors
[23:48:45] [PASSED] destination_pitch
[23:48:45] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[23:48:45] ============== drm_test_fb_xrgb8888_to_mono ===============
[23:48:45] [PASSED] single_pixel_source_buffer
[23:48:45] [PASSED] single_pixel_clip_rectangle
[23:48:45] [PASSED] well_known_colors
[23:48:45] [PASSED] destination_pitch
[23:48:45] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[23:48:45] ==================== drm_test_fb_swab =====================
[23:48:45] [PASSED] single_pixel_source_buffer
[23:48:45] [PASSED] single_pixel_clip_rectangle
[23:48:45] [PASSED] well_known_colors
[23:48:45] [PASSED] destination_pitch
[23:48:45] ================ [PASSED] drm_test_fb_swab =================
[23:48:45] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[23:48:45] [PASSED] single_pixel_source_buffer
[23:48:45] [PASSED] single_pixel_clip_rectangle
[23:48:45] [PASSED] well_known_colors
[23:48:45] [PASSED] destination_pitch
[23:48:45] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[23:48:45] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[23:48:45] [PASSED] single_pixel_source_buffer
[23:48:45] [PASSED] single_pixel_clip_rectangle
[23:48:45] [PASSED] well_known_colors
[23:48:45] [PASSED] destination_pitch
[23:48:45] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[23:48:45] ================= drm_test_fb_clip_offset =================
[23:48:45] [PASSED] pass through
[23:48:45] [PASSED] horizontal offset
[23:48:45] [PASSED] vertical offset
[23:48:45] [PASSED] horizontal and vertical offset
[23:48:45] [PASSED] horizontal offset (custom pitch)
[23:48:45] [PASSED] vertical offset (custom pitch)
[23:48:45] [PASSED] horizontal and vertical offset (custom pitch)
[23:48:45] ============= [PASSED] drm_test_fb_clip_offset =============
[23:48:45] =================== drm_test_fb_memcpy ====================
[23:48:45] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[23:48:45] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[23:48:45] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[23:48:45] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[23:48:45] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[23:48:45] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[23:48:45] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[23:48:45] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[23:48:45] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[23:48:45] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[23:48:45] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[23:48:45] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[23:48:45] =============== [PASSED] drm_test_fb_memcpy ================
[23:48:45] ============= [PASSED] drm_format_helper_test ==============
[23:48:45] ================= drm_format (18 subtests) =================
[23:48:45] [PASSED] drm_test_format_block_width_invalid
[23:48:45] [PASSED] drm_test_format_block_width_one_plane
[23:48:45] [PASSED] drm_test_format_block_width_two_plane
[23:48:45] [PASSED] drm_test_format_block_width_three_plane
[23:48:45] [PASSED] drm_test_format_block_width_tiled
[23:48:45] [PASSED] drm_test_format_block_height_invalid
[23:48:45] [PASSED] drm_test_format_block_height_one_plane
[23:48:45] [PASSED] drm_test_format_block_height_two_plane
[23:48:45] [PASSED] drm_test_format_block_height_three_plane
[23:48:45] [PASSED] drm_test_format_block_height_tiled
[23:48:45] [PASSED] drm_test_format_min_pitch_invalid
[23:48:45] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[23:48:45] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[23:48:45] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[23:48:45] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[23:48:45] [PASSED] drm_test_format_min_pitch_two_plane
[23:48:45] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[23:48:45] [PASSED] drm_test_format_min_pitch_tiled
[23:48:45] =================== [PASSED] drm_format ====================
[23:48:45] ============== drm_framebuffer (10 subtests) ===============
[23:48:45] ========== drm_test_framebuffer_check_src_coords ==========
[23:48:45] [PASSED] Success: source fits into fb
[23:48:45] [PASSED] Fail: overflowing fb with x-axis coordinate
[23:48:45] [PASSED] Fail: overflowing fb with y-axis coordinate
[23:48:45] [PASSED] Fail: overflowing fb with source width
[23:48:45] [PASSED] Fail: overflowing fb with source height
[23:48:45] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[23:48:45] [PASSED] drm_test_framebuffer_cleanup
[23:48:45] =============== drm_test_framebuffer_create ===============
[23:48:45] [PASSED] ABGR8888 normal sizes
[23:48:45] [PASSED] ABGR8888 max sizes
[23:48:45] [PASSED] ABGR8888 pitch greater than min required
[23:48:45] [PASSED] ABGR8888 pitch less than min required
[23:48:45] [PASSED] ABGR8888 Invalid width
[23:48:45] [PASSED] ABGR8888 Invalid buffer handle
[23:48:45] [PASSED] No pixel format
[23:48:45] [PASSED] ABGR8888 Width 0
[23:48:45] [PASSED] ABGR8888 Height 0
[23:48:45] [PASSED] ABGR8888 Out of bound height * pitch combination
[23:48:45] [PASSED] ABGR8888 Large buffer offset
[23:48:45] [PASSED] ABGR8888 Buffer offset for inexistent plane
[23:48:45] [PASSED] ABGR8888 Invalid flag
[23:48:45] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[23:48:45] [PASSED] ABGR8888 Valid buffer modifier
[23:48:45] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[23:48:45] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[23:48:45] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[23:48:45] [PASSED] NV12 Normal sizes
[23:48:45] [PASSED] NV12 Max sizes
[23:48:45] [PASSED] NV12 Invalid pitch
[23:48:45] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[23:48:45] [PASSED] NV12 different modifier per-plane
[23:48:45] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[23:48:45] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[23:48:45] [PASSED] NV12 Modifier for inexistent plane
[23:48:45] [PASSED] NV12 Handle for inexistent plane
[23:48:45] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[23:48:45] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[23:48:45] [PASSED] YVU420 Normal sizes
[23:48:45] [PASSED] YVU420 Max sizes
[23:48:45] [PASSED] YVU420 Invalid pitch
[23:48:45] [PASSED] YVU420 Different pitches
[23:48:45] [PASSED] YVU420 Different buffer offsets/pitches
[23:48:45] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[23:48:45] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[23:48:45] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[23:48:45] [PASSED] YVU420 Valid modifier
[23:48:45] [PASSED] YVU420 Different modifiers per plane
[23:48:45] [PASSED] YVU420 Modifier for inexistent plane
[23:48:45] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[23:48:45] [PASSED] X0L2 Normal sizes
[23:48:45] [PASSED] X0L2 Max sizes
[23:48:45] [PASSED] X0L2 Invalid pitch
[23:48:45] [PASSED] X0L2 Pitch greater than minimum required
[23:48:45] [PASSED] X0L2 Handle for inexistent plane
[23:48:45] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[23:48:45] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[23:48:45] [PASSED] X0L2 Valid modifier
[23:48:45] [PASSED] X0L2 Modifier for inexistent plane
[23:48:45] =========== [PASSED] drm_test_framebuffer_create ===========
[23:48:45] [PASSED] drm_test_framebuffer_free
[23:48:45] [PASSED] drm_test_framebuffer_init
[23:48:45] [PASSED] drm_test_framebuffer_init_bad_format
[23:48:45] [PASSED] drm_test_framebuffer_init_dev_mismatch
[23:48:45] [PASSED] drm_test_framebuffer_lookup
[23:48:45] [PASSED] drm_test_framebuffer_lookup_inexistent
[23:48:45] [PASSED] drm_test_framebuffer_modifiers_not_supported
[23:48:45] ================= [PASSED] drm_framebuffer =================
[23:48:45] ================ drm_gem_shmem (8 subtests) ================
[23:48:45] [PASSED] drm_gem_shmem_test_obj_create
[23:48:45] [PASSED] drm_gem_shmem_test_obj_create_private
[23:48:45] [PASSED] drm_gem_shmem_test_pin_pages
[23:48:45] [PASSED] drm_gem_shmem_test_vmap
[23:48:45] [PASSED] drm_gem_shmem_test_get_sg_table
[23:48:45] [PASSED] drm_gem_shmem_test_get_pages_sgt
[23:48:45] [PASSED] drm_gem_shmem_test_madvise
[23:48:45] [PASSED] drm_gem_shmem_test_purge
[23:48:45] ================== [PASSED] drm_gem_shmem ==================
[23:48:45] === drm_atomic_helper_connector_hdmi_check (27 subtests) ===
[23:48:45] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[23:48:45] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[23:48:45] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[23:48:45] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[23:48:45] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[23:48:45] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[23:48:45] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[23:48:45] [PASSED] Automatic
[23:48:45] [PASSED] Full
[23:48:45] [PASSED] Limited 16:235
[23:48:45] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[23:48:45] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[23:48:45] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[23:48:45] [PASSED] drm_test_check_disable_connector
[23:48:45] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[23:48:45] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[23:48:45] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[23:48:45] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[23:48:45] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[23:48:45] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[23:48:45] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[23:48:45] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[23:48:45] [PASSED] drm_test_check_output_bpc_dvi
[23:48:45] [PASSED] drm_test_check_output_bpc_format_vic_1
[23:48:45] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[23:48:45] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[23:48:45] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[23:48:45] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[23:48:45] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[23:48:45] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[23:48:45] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[23:48:45] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[23:48:45] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[23:48:45] [PASSED] drm_test_check_broadcast_rgb_value
[23:48:45] [PASSED] drm_test_check_bpc_8_value
[23:48:45] [PASSED] drm_test_check_bpc_10_value
[23:48:45] [PASSED] drm_test_check_bpc_12_value
[23:48:45] [PASSED] drm_test_check_format_value
[23:48:45] [PASSED] drm_test_check_tmds_char_value
[23:48:45] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[23:48:45] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[23:48:45] [PASSED] drm_test_check_mode_valid
[23:48:45] [PASSED] drm_test_check_mode_valid_reject
[23:48:45] [PASSED] drm_test_check_mode_valid_reject_rate
[23:48:45] [PASSED] drm_test_check_mode_valid_reject_max_clock
[23:48:45] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[23:48:45] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[23:48:45] [PASSED] drm_test_check_infoframes
[23:48:45] [PASSED] drm_test_check_reject_avi_infoframe
[23:48:45] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[23:48:45] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[23:48:45] [PASSED] drm_test_check_reject_audio_infoframe
[23:48:45] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[23:48:45] ================= drm_managed (2 subtests) =================
[23:48:45] [PASSED] drm_test_managed_release_action
[23:48:45] [PASSED] drm_test_managed_run_action
[23:48:45] =================== [PASSED] drm_managed ===================
[23:48:45] =================== drm_mm (6 subtests) ====================
[23:48:45] [PASSED] drm_test_mm_init
[23:48:45] [PASSED] drm_test_mm_debug
[23:48:45] [PASSED] drm_test_mm_align32
[23:48:45] [PASSED] drm_test_mm_align64
[23:48:45] [PASSED] drm_test_mm_lowest
[23:48:45] [PASSED] drm_test_mm_highest
[23:48:45] ===================== [PASSED] drm_mm ======================
[23:48:45] ============= drm_modes_analog_tv (5 subtests) =============
[23:48:45] [PASSED] drm_test_modes_analog_tv_mono_576i
[23:48:45] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[23:48:45] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[23:48:45] [PASSED] drm_test_modes_analog_tv_pal_576i
[23:48:45] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[23:48:45] =============== [PASSED] drm_modes_analog_tv ===============
[23:48:45] ============== drm_plane_helper (2 subtests) ===============
[23:48:45] =============== drm_test_check_plane_state ================
[23:48:45] [PASSED] clipping_simple
[23:48:45] [PASSED] clipping_rotate_reflect
[23:48:45] [PASSED] positioning_simple
[23:48:45] [PASSED] upscaling
[23:48:45] [PASSED] downscaling
[23:48:45] [PASSED] rounding1
[23:48:45] [PASSED] rounding2
[23:48:45] [PASSED] rounding3
[23:48:45] [PASSED] rounding4
[23:48:45] =========== [PASSED] drm_test_check_plane_state ============
[23:48:45] =========== drm_test_check_invalid_plane_state ============
[23:48:45] [PASSED] positioning_invalid
[23:48:45] [PASSED] upscaling_invalid
[23:48:45] [PASSED] downscaling_invalid
[23:48:45] ======= [PASSED] drm_test_check_invalid_plane_state ========
[23:48:45] ================ [PASSED] drm_plane_helper =================
[23:48:45] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[23:48:45] ====== drm_test_connector_helper_tv_get_modes_check =======
[23:48:45] [PASSED] None
[23:48:45] [PASSED] PAL
[23:48:45] [PASSED] NTSC
[23:48:45] [PASSED] Both, NTSC Default
[23:48:45] [PASSED] Both, PAL Default
[23:48:45] [PASSED] Both, NTSC Default, with PAL on command-line
[23:48:45] [PASSED] Both, PAL Default, with NTSC on command-line
[23:48:45] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[23:48:45] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[23:48:45] ================== drm_rect (9 subtests) ===================
[23:48:45] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[23:48:45] [PASSED] drm_test_rect_clip_scaled_not_clipped
[23:48:45] [PASSED] drm_test_rect_clip_scaled_clipped
[23:48:45] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[23:48:45] ================= drm_test_rect_intersect =================
[23:48:45] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[23:48:45] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[23:48:45] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[23:48:45] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[23:48:45] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[23:48:45] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[23:48:45] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[23:48:45] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[23:48:45] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[23:48:45] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[23:48:45] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[23:48:45] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[23:48:45] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[23:48:45] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[23:48:45] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[23:48:45] ============= [PASSED] drm_test_rect_intersect =============
[23:48:45] ================ drm_test_rect_calc_hscale ================
[23:48:45] [PASSED] normal use
[23:48:45] [PASSED] out of max range
[23:48:45] [PASSED] out of min range
[23:48:45] [PASSED] zero dst
[23:48:45] [PASSED] negative src
[23:48:45] [PASSED] negative dst
[23:48:45] ============ [PASSED] drm_test_rect_calc_hscale ============
[23:48:45] ================ drm_test_rect_calc_vscale ================
[23:48:45] [PASSED] normal use
[23:48:45] [PASSED] out of max range
[23:48:45] [PASSED] out of min range
[23:48:45] [PASSED] zero dst
[23:48:45] [PASSED] negative src
[23:48:45] [PASSED] negative dst
[23:48:45] ============ [PASSED] drm_test_rect_calc_vscale ============
[23:48:45] ================== drm_test_rect_rotate ===================
[23:48:45] [PASSED] reflect-x
[23:48:45] [PASSED] reflect-y
[23:48:45] [PASSED] rotate-0
[23:48:45] [PASSED] rotate-90
[23:48:45] [PASSED] rotate-180
[23:48:45] [PASSED] rotate-270
[23:48:45] ============== [PASSED] drm_test_rect_rotate ===============
[23:48:45] ================ drm_test_rect_rotate_inv =================
[23:48:45] [PASSED] reflect-x
[23:48:45] [PASSED] reflect-y
[23:48:45] [PASSED] rotate-0
[23:48:45] [PASSED] rotate-90
[23:48:45] [PASSED] rotate-180
[23:48:45] [PASSED] rotate-270
[23:48:45] ============ [PASSED] drm_test_rect_rotate_inv =============
[23:48:45] ==================== [PASSED] drm_rect =====================
[23:48:45] ============ drm_sysfb_modeset_test (1 subtest) ============
[23:48:45] ============ drm_test_sysfb_build_fourcc_list =============
[23:48:45] [PASSED] no native formats
[23:48:45] [PASSED] XRGB8888 as native format
[23:48:45] [PASSED] remove duplicates
[23:48:45] [PASSED] convert alpha formats
[23:48:45] [PASSED] random formats
[23:48:45] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[23:48:45] ============= [PASSED] drm_sysfb_modeset_test ==============
[23:48:45] ================== drm_fixp (2 subtests) ===================
[23:48:45] [PASSED] drm_test_int2fixp
[23:48:45] [PASSED] drm_test_sm2fixp
[23:48:45] ==================== [PASSED] drm_fixp =====================
[23:48:45] ============================================================
[23:48:45] Testing complete. Ran 621 tests: passed: 621
[23:48:45] Elapsed time: 26.051s total, 1.776s configuring, 24.102s building, 0.140s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[23:48:45] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[23:48:47] 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:48:56] Starting KUnit Kernel (1/1)...
[23:48:56] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[23:48:56] ================= ttm_device (5 subtests) ==================
[23:48:56] [PASSED] ttm_device_init_basic
[23:48:56] [PASSED] ttm_device_init_multiple
[23:48:56] [PASSED] ttm_device_fini_basic
[23:48:56] [PASSED] ttm_device_init_no_vma_man
[23:48:56] ================== ttm_device_init_pools ==================
[23:48:56] [PASSED] No DMA allocations, no DMA32 required
[23:48:56] [PASSED] DMA allocations, DMA32 required
[23:48:56] [PASSED] No DMA allocations, DMA32 required
[23:48:56] [PASSED] DMA allocations, no DMA32 required
[23:48:56] ============== [PASSED] ttm_device_init_pools ==============
[23:48:56] =================== [PASSED] ttm_device ====================
[23:48:56] ================== ttm_pool (8 subtests) ===================
[23:48:56] ================== ttm_pool_alloc_basic ===================
[23:48:56] [PASSED] One page
[23:48:56] [PASSED] More than one page
[23:48:56] [PASSED] Above the allocation limit
[23:48:56] [PASSED] One page, with coherent DMA mappings enabled
[23:48:56] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[23:48:56] ============== [PASSED] ttm_pool_alloc_basic ===============
[23:48:56] ============== ttm_pool_alloc_basic_dma_addr ==============
[23:48:56] [PASSED] One page
[23:48:56] [PASSED] More than one page
[23:48:56] [PASSED] Above the allocation limit
[23:48:56] [PASSED] One page, with coherent DMA mappings enabled
[23:48:56] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[23:48:56] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[23:48:56] [PASSED] ttm_pool_alloc_order_caching_match
[23:48:56] [PASSED] ttm_pool_alloc_caching_mismatch
[23:48:56] [PASSED] ttm_pool_alloc_order_mismatch
[23:48:56] [PASSED] ttm_pool_free_dma_alloc
[23:48:56] [PASSED] ttm_pool_free_no_dma_alloc
[23:48:56] [PASSED] ttm_pool_fini_basic
[23:48:56] ==================== [PASSED] ttm_pool =====================
[23:48:56] ================ ttm_resource (8 subtests) =================
[23:48:56] ================= ttm_resource_init_basic =================
[23:48:56] [PASSED] Init resource in TTM_PL_SYSTEM
[23:48:56] [PASSED] Init resource in TTM_PL_VRAM
[23:48:56] [PASSED] Init resource in a private placement
[23:48:56] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[23:48:56] ============= [PASSED] ttm_resource_init_basic =============
[23:48:56] [PASSED] ttm_resource_init_pinned
[23:48:56] [PASSED] ttm_resource_fini_basic
[23:48:56] [PASSED] ttm_resource_manager_init_basic
[23:48:56] [PASSED] ttm_resource_manager_usage_basic
[23:48:56] [PASSED] ttm_resource_manager_set_used_basic
[23:48:56] [PASSED] ttm_sys_man_alloc_basic
[23:48:56] [PASSED] ttm_sys_man_free_basic
[23:48:56] ================== [PASSED] ttm_resource ===================
[23:48:56] =================== ttm_tt (15 subtests) ===================
[23:48:56] ==================== ttm_tt_init_basic ====================
[23:48:56] [PASSED] Page-aligned size
[23:48:56] [PASSED] Extra pages requested
[23:48:56] ================ [PASSED] ttm_tt_init_basic ================
[23:48:56] [PASSED] ttm_tt_init_misaligned
[23:48:56] [PASSED] ttm_tt_fini_basic
[23:48:56] [PASSED] ttm_tt_fini_sg
[23:48:56] [PASSED] ttm_tt_fini_shmem
[23:48:56] [PASSED] ttm_tt_create_basic
[23:48:56] [PASSED] ttm_tt_create_invalid_bo_type
[23:48:56] [PASSED] ttm_tt_create_ttm_exists
[23:48:56] [PASSED] ttm_tt_create_failed
[23:48:56] [PASSED] ttm_tt_destroy_basic
[23:48:56] [PASSED] ttm_tt_populate_null_ttm
[23:48:56] [PASSED] ttm_tt_populate_populated_ttm
[23:48:56] [PASSED] ttm_tt_unpopulate_basic
[23:48:56] [PASSED] ttm_tt_unpopulate_empty_ttm
[23:48:56] [PASSED] ttm_tt_swapin_basic
[23:48:56] ===================== [PASSED] ttm_tt ======================
[23:48:56] =================== ttm_bo (14 subtests) ===================
[23:48:56] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[23:48:56] [PASSED] Cannot be interrupted and sleeps
[23:48:56] [PASSED] Cannot be interrupted, locks straight away
[23:48:56] [PASSED] Can be interrupted, sleeps
[23:48:56] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[23:48:56] [PASSED] ttm_bo_reserve_locked_no_sleep
[23:48:56] [PASSED] ttm_bo_reserve_no_wait_ticket
[23:48:56] [PASSED] ttm_bo_reserve_double_resv
[23:48:56] [PASSED] ttm_bo_reserve_interrupted
[23:48:56] [PASSED] ttm_bo_reserve_deadlock
[23:48:56] [PASSED] ttm_bo_unreserve_basic
[23:48:56] [PASSED] ttm_bo_unreserve_pinned
[23:48:56] [PASSED] ttm_bo_unreserve_bulk
[23:48:56] [PASSED] ttm_bo_fini_basic
[23:48:56] [PASSED] ttm_bo_fini_shared_resv
[23:48:56] [PASSED] ttm_bo_pin_basic
[23:48:56] [PASSED] ttm_bo_pin_unpin_resource
[23:48:56] [PASSED] ttm_bo_multiple_pin_one_unpin
[23:48:56] ===================== [PASSED] ttm_bo ======================
[23:48:56] ============== ttm_bo_validate (22 subtests) ===============
[23:48:56] ============== ttm_bo_init_reserved_sys_man ===============
[23:48:56] [PASSED] Buffer object for userspace
[23:48:56] [PASSED] Kernel buffer object
[23:48:56] [PASSED] Shared buffer object
[23:48:56] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[23:48:56] ============== ttm_bo_init_reserved_mock_man ==============
[23:48:56] [PASSED] Buffer object for userspace
[23:48:56] [PASSED] Kernel buffer object
[23:48:56] [PASSED] Shared buffer object
[23:48:56] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[23:48:56] [PASSED] ttm_bo_init_reserved_resv
[23:48:56] ================== ttm_bo_validate_basic ==================
[23:48:56] [PASSED] Buffer object for userspace
[23:48:56] [PASSED] Kernel buffer object
[23:48:56] [PASSED] Shared buffer object
[23:48:56] ============== [PASSED] ttm_bo_validate_basic ==============
[23:48:56] [PASSED] ttm_bo_validate_invalid_placement
[23:48:56] ============= ttm_bo_validate_same_placement ==============
[23:48:56] [PASSED] System manager
[23:48:56] [PASSED] VRAM manager
[23:48:56] ========= [PASSED] ttm_bo_validate_same_placement ==========
[23:48:56] [PASSED] ttm_bo_validate_failed_alloc
[23:48:56] [PASSED] ttm_bo_validate_pinned
[23:48:56] [PASSED] ttm_bo_validate_busy_placement
[23:48:56] ================ ttm_bo_validate_multihop =================
[23:48:56] [PASSED] Buffer object for userspace
[23:48:56] [PASSED] Kernel buffer object
[23:48:56] [PASSED] Shared buffer object
[23:48:56] ============ [PASSED] ttm_bo_validate_multihop =============
[23:48:56] ========== ttm_bo_validate_no_placement_signaled ==========
[23:48:56] [PASSED] Buffer object in system domain, no page vector
[23:48:56] [PASSED] Buffer object in system domain with an existing page vector
[23:48:56] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[23:48:56] ======== ttm_bo_validate_no_placement_not_signaled ========
[23:48:56] [PASSED] Buffer object for userspace
[23:48:56] [PASSED] Kernel buffer object
[23:48:56] [PASSED] Shared buffer object
[23:48:56] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[23:48:56] [PASSED] ttm_bo_validate_move_fence_signaled
[23:48:56] ========= ttm_bo_validate_move_fence_not_signaled =========
[23:48:56] [PASSED] Waits for GPU
[23:48:56] [PASSED] Tries to lock straight away
[23:48:56] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[23:48:56] [PASSED] ttm_bo_validate_swapout
[23:48:56] [PASSED] ttm_bo_validate_happy_evict
[23:48:56] [PASSED] ttm_bo_validate_all_pinned_evict
[23:48:56] [PASSED] ttm_bo_validate_allowed_only_evict
[23:48:56] [PASSED] ttm_bo_validate_deleted_evict
[23:48:56] [PASSED] ttm_bo_validate_busy_domain_evict
[23:48:56] [PASSED] ttm_bo_validate_evict_gutting
[23:48:56] [PASSED] ttm_bo_validate_recrusive_evict
[23:48:56] ================= [PASSED] ttm_bo_validate =================
[23:48:56] ============================================================
[23:48:56] Testing complete. Ran 102 tests: passed: 102
[23:48:56] Elapsed time: 11.552s total, 1.726s configuring, 9.610s building, 0.185s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 20+ messages in thread
* ✓ Xe.CI.BAT: success for Enable per exec queue MSI-X vector assignment
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
` (13 preceding siblings ...)
2026-06-05 23:49 ` ✓ CI.KUnit: success " Patchwork
@ 2026-06-06 0:43 ` Patchwork
2026-06-06 13:27 ` ✓ Xe.CI.FULL: " Patchwork
15 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2026-06-06 0:43 UTC (permalink / raw)
To: Stuart Summers; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 1402 bytes --]
== Series Details ==
Series: Enable per exec queue MSI-X vector assignment
URL : https://patchwork.freedesktop.org/series/167990/
State : success
== Summary ==
CI Bug Log - changes from xe-5213-0ecb0a41cb32dfc7620a903629a6951ef1aaea52_BAT -> xe-pw-167990v1_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (13 -> 13)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in xe-pw-167990v1_BAT that come from known issues:
### IGT changes ###
#### Possible fixes ####
* igt@kms_force_connector_basic@prune-stale-modes:
- bat-ptl-2: [SKIP][1] -> [PASS][2] +3 other tests pass
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5213-0ecb0a41cb32dfc7620a903629a6951ef1aaea52/bat-ptl-2/igt@kms_force_connector_basic@prune-stale-modes.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167990v1/bat-ptl-2/igt@kms_force_connector_basic@prune-stale-modes.html
Build changes
-------------
* Linux: xe-5213-0ecb0a41cb32dfc7620a903629a6951ef1aaea52 -> xe-pw-167990v1
IGT_8950: 8950
xe-5213-0ecb0a41cb32dfc7620a903629a6951ef1aaea52: 0ecb0a41cb32dfc7620a903629a6951ef1aaea52
xe-pw-167990v1: 167990v1
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167990v1/index.html
[-- Attachment #2: Type: text/html, Size: 1974 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 06/12] drm/xe: Change MSI-X assignment failure to drm_dbg
2026-06-05 23:21 ` [PATCH 06/12] drm/xe: Change MSI-X assignment failure to drm_dbg Stuart Summers
@ 2026-06-06 10:57 ` Michal Wajdeczko
2026-06-08 20:30 ` Summers, Stuart
0 siblings, 1 reply; 20+ messages in thread
From: Michal Wajdeczko @ 2026-06-06 10:57 UTC (permalink / raw)
To: Stuart Summers
Cc: ilia.levi, x.wang, rodrigo.vivi, intel-xe,
alan.previn.teres.alexis
On 6/6/2026 1:21 AM, Stuart Summers wrote:
> Now that we have queue based MSI-X vectors and a user
> can potentially create more queues than we have vectors
> available, don't spam dmesg with drm_err messages for
> every failure. Change that to a drm_dbg instead.
or maybe we should use _ratelimited or _once variants to
still have some insights about the failures (as drm.debug
could be disabled)
unless we do have a fallback plan in case of such errors
and can recover - but then we likely should mention that
in the commit message
>
> Signed-off-by: Stuart Summers <stuart.summers@intel.com>
> Assisted-by: Copilot:claude-sonnet-4.6
> ---
> drivers/gpu/drm/xe/xe_irq.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
> index 40d3d43e492f..871c6c5c4fac 100644
> --- a/drivers/gpu/drm/xe/xe_irq.c
> +++ b/drivers/gpu/drm/xe/xe_irq.c
> @@ -768,7 +768,7 @@ static int xe_irq_msi_request_irqs(struct xe_device *xe)
> irq = pci_irq_vector(pdev, 0);
> err = request_irq(irq, irq_handler, IRQF_SHARED, DRIVER_NAME, xe);
> if (err < 0) {
> - drm_err(&xe->drm, "Failed to request MSI IRQ %d\n", err);
> + drm_dbg(&xe->drm, "Failed to request MSI IRQ %d\n", err);
nit: we can use xe_dbg(xe, ...)
nit: we can print error code using %pe
btw, maybe it's also a time to consider devm_request_irq() someday ?
> return err;
> }
>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 07/12] drm/xe: Remove memirq status and source checks for engine interrupts
2026-06-05 23:21 ` [PATCH 07/12] drm/xe: Remove memirq status and source checks for engine interrupts Stuart Summers
@ 2026-06-06 11:18 ` Michal Wajdeczko
0 siblings, 0 replies; 20+ messages in thread
From: Michal Wajdeczko @ 2026-06-06 11:18 UTC (permalink / raw)
To: Stuart Summers
Cc: ilia.levi, x.wang, rodrigo.vivi, intel-xe,
alan.previn.teres.alexis
On 6/6/2026 1:21 AM, Stuart Summers wrote:
> For engine-specific, memory-based interrupts, hardware will not fill in
> the source and status offsets, assuming that software will utilize the
> vector ID to determine the destination for a particular interrupt.
>
> GuC and VF based interrupts are still handled the same - explicitly
> checking these offsets.
>
> Bspec: 62316
>
no empty lines here
> Signed-off-by: Stuart Summers <stuart.summers@intel.com>
> Assisted-by: Copilot:claude-sonnet-4.6
> ---
> drivers/gpu/drm/xe/xe_memirq.c | 26 ++++++++------------------
> 1 file changed, 8 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_memirq.c b/drivers/gpu/drm/xe/xe_memirq.c
> index 9dfe965cb46e..208f44436c66 100644
> --- a/drivers/gpu/drm/xe/xe_memirq.c
> +++ b/drivers/gpu/drm/xe/xe_memirq.c
> @@ -447,18 +447,18 @@ static void memirq_assume_received(struct xe_memirq *memirq, const char *source,
> memirq_debug(memirq, "ASSUME %s %s(%u)\n", source, status, offset);
> }
>
> -static void memirq_dispatch_engine(struct xe_memirq *memirq, struct iosys_map *status,
> +static void memirq_dispatch_engine(struct xe_memirq *memirq,
> struct xe_hw_engine *hwe)
> {
> - memirq_debug(memirq, "STATUS %s %*ph\n", hwe->name, 16, status->vaddr);
> + memirq_debug(memirq, "dispatching engine %s\n", hwe->name);
>
> /*
> - * The programming note says to assume that GT_MI_USER_INTERRUPT is always
> - * set. Check and clear related status byte just for a debug.
> + * On MSI-X platforms hardware does not fill in the source and status
> + * fields for engine-based interrupts (only GuC and VF interrupts have
> + * a valid source/status). The dma-fence check for the fence completion
> + * is opportunistic, unconditionally pass MI_USER_INTERRUPT to issue
> + * that check.
> */
> - if (IS_ENABLED(CONFIG_DRM_XE_DEBUG_MEMIRQ) &&
> - !memirq_received(memirq, status, ilog2(GT_MI_USER_INTERRUPT), hwe->name))
> - memirq_assume_received(memirq, hwe->name, ilog2(GT_MI_USER_INTERRUPT), "USER");
> xe_hw_engine_handle_irq(hwe, GT_MI_USER_INTERRUPT);
> }
>
> @@ -499,17 +499,7 @@ static void memirq_dispatch_guc(struct xe_memirq *memirq, struct iosys_map *stat
> */
> void xe_memirq_hwe_handler(struct xe_memirq *memirq, struct xe_hw_engine *hwe)
> {
> - struct iosys_map source =
> - IOSYS_MAP_INIT_OFFSET(&memirq->bo->vmap,
> - XE_MEMIRQ_SOURCE_OFFSET(hwe->irq_page));
> -
> - if (memirq_received(memirq, &source, hwe->irq_offset, "SRC")) {
> - struct iosys_map status =
> - IOSYS_MAP_INIT_OFFSET(&memirq->bo->vmap,
> - XE_MEMIRQ_VECTOR_OFFSET(hwe->irq_page,
> - hwe->irq_offset));
> - memirq_dispatch_engine(memirq, &status, hwe);
> - }
maybe put the above new comment here (or update the kernel-doc) and call xe_hw_engine_handle_irq() directly?
then the !MSI-X || VF case will still have a status debug dump option available
> + memirq_dispatch_engine(memirq, hwe);
> }
>
> /**
^ permalink raw reply [flat|nested] 20+ messages in thread
* ✓ Xe.CI.FULL: success for Enable per exec queue MSI-X vector assignment
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
` (14 preceding siblings ...)
2026-06-06 0:43 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-06-06 13:27 ` Patchwork
15 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2026-06-06 13:27 UTC (permalink / raw)
To: Stuart Summers; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 6047 bytes --]
== Series Details ==
Series: Enable per exec queue MSI-X vector assignment
URL : https://patchwork.freedesktop.org/series/167990/
State : success
== Summary ==
CI Bug Log - changes from xe-5213-0ecb0a41cb32dfc7620a903629a6951ef1aaea52_FULL -> xe-pw-167990v1_FULL
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (2 -> 2)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in xe-pw-167990v1_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_flip@flip-vs-expired-vblank@a-edp1:
- shard-lnl: [PASS][1] -> [FAIL][2] ([Intel XE#301]) +2 other tests fail
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5213-0ecb0a41cb32dfc7620a903629a6951ef1aaea52/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167990v1/shard-lnl-5/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html
* igt@kms_hdr@invalid-metadata-sizes@pipe-a-hdmi-a-3-xrgb16161616f:
- shard-bmg: [PASS][3] -> [SKIP][4] ([Intel XE#7915]) +1 other test skip
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5213-0ecb0a41cb32dfc7620a903629a6951ef1aaea52/shard-bmg-6/igt@kms_hdr@invalid-metadata-sizes@pipe-a-hdmi-a-3-xrgb16161616f.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167990v1/shard-bmg-8/igt@kms_hdr@invalid-metadata-sizes@pipe-a-hdmi-a-3-xrgb16161616f.html
#### Possible fixes ####
* igt@kms_async_flips@alternate-sync-async-flip:
- shard-lnl: [FAIL][5] ([Intel XE#3718] / [Intel XE#7265]) -> [PASS][6] +1 other test pass
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5213-0ecb0a41cb32dfc7620a903629a6951ef1aaea52/shard-lnl-4/igt@kms_async_flips@alternate-sync-async-flip.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167990v1/shard-lnl-8/igt@kms_async_flips@alternate-sync-async-flip.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1:
- shard-lnl: [FAIL][7] ([Intel XE#301] / [Intel XE#3149]) -> [PASS][8]
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5213-0ecb0a41cb32dfc7620a903629a6951ef1aaea52/shard-lnl-5/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167990v1/shard-lnl-3/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html
* igt@kms_hdr@static-toggle-dpms@pipe-a-hdmi-a-3-xrgb2101010:
- shard-bmg: [SKIP][9] ([Intel XE#7915]) -> [PASS][10] +1 other test pass
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5213-0ecb0a41cb32dfc7620a903629a6951ef1aaea52/shard-bmg-1/igt@kms_hdr@static-toggle-dpms@pipe-a-hdmi-a-3-xrgb2101010.html
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167990v1/shard-bmg-5/igt@kms_hdr@static-toggle-dpms@pipe-a-hdmi-a-3-xrgb2101010.html
#### Warnings ####
* igt@kms_flip@flip-vs-expired-vblank-interruptible:
- shard-lnl: [FAIL][11] ([Intel XE#301] / [Intel XE#3149]) -> [FAIL][12] ([Intel XE#301])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5213-0ecb0a41cb32dfc7620a903629a6951ef1aaea52/shard-lnl-5/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167990v1/shard-lnl-3/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
* igt@kms_hdr@brightness-with-hdr:
- shard-bmg: [SKIP][13] ([Intel XE#3544] / [Intel XE#7916]) -> [SKIP][14] ([Intel XE#3544] / [Intel XE#7915] / [Intel XE#7916])
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5213-0ecb0a41cb32dfc7620a903629a6951ef1aaea52/shard-bmg-5/igt@kms_hdr@brightness-with-hdr.html
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167990v1/shard-bmg-3/igt@kms_hdr@brightness-with-hdr.html
* igt@kms_hdr@brightness-with-hdr@pipe-a-hdmi-a-3-xrgb16161616f:
- shard-bmg: [SKIP][15] ([Intel XE#7916]) -> [SKIP][16] ([Intel XE#7915]) +1 other test skip
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5213-0ecb0a41cb32dfc7620a903629a6951ef1aaea52/shard-bmg-5/igt@kms_hdr@brightness-with-hdr@pipe-a-hdmi-a-3-xrgb16161616f.html
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167990v1/shard-bmg-3/igt@kms_hdr@brightness-with-hdr@pipe-a-hdmi-a-3-xrgb16161616f.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-bmg: [SKIP][17] ([Intel XE#2509] / [Intel XE#7437]) -> [SKIP][18] ([Intel XE#2426] / [Intel XE#5848])
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5213-0ecb0a41cb32dfc7620a903629a6951ef1aaea52/shard-bmg-6/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167990v1/shard-bmg-8/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
[Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
[Intel XE#3718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3718
[Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
[Intel XE#7265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7265
[Intel XE#7437]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7437
[Intel XE#7915]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7915
[Intel XE#7916]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7916
Build changes
-------------
* Linux: xe-5213-0ecb0a41cb32dfc7620a903629a6951ef1aaea52 -> xe-pw-167990v1
IGT_8950: 8950
xe-5213-0ecb0a41cb32dfc7620a903629a6951ef1aaea52: 0ecb0a41cb32dfc7620a903629a6951ef1aaea52
xe-pw-167990v1: 167990v1
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-167990v1/index.html
[-- Attachment #2: Type: text/html, Size: 7489 bytes --]
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH 06/12] drm/xe: Change MSI-X assignment failure to drm_dbg
2026-06-06 10:57 ` Michal Wajdeczko
@ 2026-06-08 20:30 ` Summers, Stuart
0 siblings, 0 replies; 20+ messages in thread
From: Summers, Stuart @ 2026-06-08 20:30 UTC (permalink / raw)
To: Wajdeczko, Michal
Cc: intel-xe@lists.freedesktop.org, Vivi, Rodrigo, Wang, X,
Teres Alexis, Alan Previn, Levi, Ilia
On Sat, 2026-06-06 at 12:57 +0200, Michal Wajdeczko wrote:
>
>
> On 6/6/2026 1:21 AM, Stuart Summers wrote:
> > Now that we have queue based MSI-X vectors and a user
> > can potentially create more queues than we have vectors
> > available, don't spam dmesg with drm_err messages for
> > every failure. Change that to a drm_dbg instead.
>
> or maybe we should use _ratelimited or _once variants to
> still have some insights about the failures (as drm.debug
> could be disabled)
>
> unless we do have a fallback plan in case of such errors
> and can recover - but then we likely should mention that
> in the commit message
Right it isn't an error per-say in this case which is why I went this
direction. If the vectors aren't available, it just falls back to the
default one (vector 1). We can switch to using ratelimit if that makes
more sense here though. I just didn't want to overload for a valid
scenario users might hit.
>
> >
> > Signed-off-by: Stuart Summers <stuart.summers@intel.com>
> > Assisted-by: Copilot:claude-sonnet-4.6
> > ---
> > drivers/gpu/drm/xe/xe_irq.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/xe/xe_irq.c
> > b/drivers/gpu/drm/xe/xe_irq.c
> > index 40d3d43e492f..871c6c5c4fac 100644
> > --- a/drivers/gpu/drm/xe/xe_irq.c
> > +++ b/drivers/gpu/drm/xe/xe_irq.c
> > @@ -768,7 +768,7 @@ static int xe_irq_msi_request_irqs(struct
> > xe_device *xe)
> > irq = pci_irq_vector(pdev, 0);
> > err = request_irq(irq, irq_handler, IRQF_SHARED,
> > DRIVER_NAME, xe);
> > if (err < 0) {
> > - drm_err(&xe->drm, "Failed to request MSI IRQ %d\n",
> > err);
> > + drm_dbg(&xe->drm, "Failed to request MSI IRQ %d\n",
> > err);
>
> nit: we can use xe_dbg(xe, ...)
> nit: we can print error code using %pe
Got it and makes sense. I'll fix it.
>
> btw, maybe it's also a time to consider devm_request_irq() someday ?
Yeah that's not a bad idea. It's just doing what pci_request_irq does
but with cleanup and error handling. But I'd rather not include that
change as part of this one if possible.
Thanks,
Stuart
>
> > return err;
> > }
> >
>
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2026-06-08 20:30 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-05 23:21 [PATCH 00/12] Enable per exec queue MSI-X vector assignment Stuart Summers
2026-06-05 23:21 ` [PATCH 01/12] drm/xe: Add kerneldoc to xe_wait_user_fence_ioctl() Stuart Summers
2026-06-05 23:21 ` [PATCH 02/12] drm/xe: Handle NULL in xe_exec_queue_get_unless_zero() Stuart Summers
2026-06-05 23:21 ` [PATCH 03/12] drm/xe: Cap MSI-X vector count to XE_MSIX_MAX_VECS Stuart Summers
2026-06-05 23:21 ` [PATCH 04/12] drm/xe: Assign dedicated MSI-X vectors to exec queues Stuart Summers
2026-06-05 23:21 ` [PATCH 05/12] drm/xe: Add configfs max_msix_vecs attribute Stuart Summers
2026-06-05 23:21 ` [PATCH 06/12] drm/xe: Change MSI-X assignment failure to drm_dbg Stuart Summers
2026-06-06 10:57 ` Michal Wajdeczko
2026-06-08 20:30 ` Summers, Stuart
2026-06-05 23:21 ` [PATCH 07/12] drm/xe: Remove memirq status and source checks for engine interrupts Stuart Summers
2026-06-06 11:18 ` Michal Wajdeczko
2026-06-05 23:21 ` [PATCH 08/12] drm/xe: Add per-exec-queue user fence wait queue Stuart Summers
2026-06-05 23:21 ` [PATCH 09/12] drm/xe: Track all exec queues in a device-level ufence list Stuart Summers
2026-06-05 23:21 ` [PATCH 10/12] drm/xe: Hook up per queue thread wake to the unique MSI-X vector allocation Stuart Summers
2026-06-05 23:21 ` [PATCH 11/12] drm/xe: Enable per-queue ufence wake in ioctl and wake function Stuart Summers
2026-06-05 23:21 ` [PATCH 12/12] drm/xe/memirq: Enable compute walker post-sync interrupt Stuart Summers
2026-06-05 23:47 ` ✗ CI.checkpatch: warning for Enable per exec queue MSI-X vector assignment Patchwork
2026-06-05 23:49 ` ✓ CI.KUnit: success " Patchwork
2026-06-06 0:43 ` ✓ Xe.CI.BAT: " Patchwork
2026-06-06 13:27 ` ✓ Xe.CI.FULL: " Patchwork
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.