* [PATCH 0/8] Set up for debug configfs group
@ 2026-11-12 21:35 Stuart Summers
2026-11-12 21:35 ` [PATCH 1/8] drm/xe: Guard configfs attribute reads in getters Stuart Summers
` (10 more replies)
0 siblings, 11 replies; 12+ messages in thread
From: Stuart Summers @ 2026-11-12 21:35 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.d.roper, gustavo.sousa,
Stuart Summers
Splitting out patches from [1] which have already been
reviewed to get CI results and get these merged. I'll
send out an updated series with the rest of the patches
after.
Note that I removed the "Assisted-by: LLM" attribution
per latest requirements. I also made some minor changes
around the rebase - mostly dropping the fallback functions
since those were removed. There was also a new function
added for the disable vram page offline configfs, so that
function was rebased in to this series as well.
Everything here has an R-B already.
[1]: https://patchwork.freedesktop.org/series/165879/#rev10
Stuart Summers (8):
drm/xe: Guard configfs attribute reads in getters
drm/xe/configfs: Fix out-of-bounds read in parse_wa_bb_lines()
drm/xe/configfs: Copy wa_bb out under the configfs lock
drm/xe: Invert vram_page_offline configfs attribute
drm/xe: Make survivability_mode configfs attribute a bitmap
drm/xe: Sort xe_config_device fields
drm/xe: Split out configfs data structures
drm/xe: Add a new debug focused configfs group
drivers/gpu/drm/xe/Makefile | 3 +
drivers/gpu/drm/xe/xe_configfs.c | 1299 ++++++++++----------
drivers/gpu/drm/xe/xe_configfs.h | 35 +-
drivers/gpu/drm/xe/xe_configfs_debug.c | 14 +
drivers/gpu/drm/xe/xe_configfs_debug.h | 13 +
drivers/gpu/drm/xe/xe_configfs_types.h | 58 +
drivers/gpu/drm/xe/xe_lrc.c | 38 +-
drivers/gpu/drm/xe/xe_ras.c | 18 +-
drivers/gpu/drm/xe/xe_ras.h | 2 +-
drivers/gpu/drm/xe/xe_ras_types.h | 4 +-
drivers/gpu/drm/xe/xe_survivability_mode.c | 7 +-
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 2 +-
12 files changed, 798 insertions(+), 695 deletions(-)
create mode 100644 drivers/gpu/drm/xe/xe_configfs_debug.c
create mode 100644 drivers/gpu/drm/xe/xe_configfs_debug.h
create mode 100644 drivers/gpu/drm/xe/xe_configfs_types.h
--
2.43.0
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/8] drm/xe: Guard configfs attribute reads in getters
2026-11-12 21:35 [PATCH 0/8] Set up for debug configfs group Stuart Summers
@ 2026-11-12 21:35 ` Stuart Summers
2026-11-12 21:35 ` [PATCH 2/8] drm/xe/configfs: Fix out-of-bounds read in parse_wa_bb_lines() Stuart Summers
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Stuart Summers @ 2026-11-12 21:35 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.d.roper, gustavo.sousa,
Stuart Summers
The configfs getters read dev->config members without holding dev->lock,
so a concurrent store can tear the value being returned. The store paths
and a few of the getters already take the lock; make it consistent by
wrapping every read of dev->config in the getters with a scoped_guard(),
covering the surrounding checks that consume those values as well.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
---
drivers/gpu/drm/xe/xe_configfs.c | 32 +++++++++++++++++++++-----------
1 file changed, 21 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 2ddd707a6dbd..cc442014cf12 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -1282,7 +1282,8 @@ bool xe_configfs_get_survivability_mode(struct pci_dev *pdev)
if (!dev)
return device_defaults.survivability_mode;
- mode = dev->config.survivability_mode;
+ scoped_guard(mutex, &dev->lock)
+ mode = dev->config.survivability_mode;
config_group_put(&dev->group);
return mode;
@@ -1296,7 +1297,8 @@ static u64 get_gt_types_allowed(struct pci_dev *pdev)
if (!dev)
return device_defaults.gt_types_allowed;
- mask = dev->config.gt_types_allowed;
+ scoped_guard(mutex, &dev->lock)
+ mask = dev->config.gt_types_allowed;
config_group_put(&dev->group);
return mask;
@@ -1340,7 +1342,8 @@ u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev)
if (!dev)
return device_defaults.engines_allowed;
- engines_allowed = dev->config.engines_allowed;
+ scoped_guard(mutex, &dev->lock)
+ engines_allowed = dev->config.engines_allowed;
config_group_put(&dev->group);
return engines_allowed;
@@ -1360,7 +1363,8 @@ bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev)
if (!dev)
return false;
- ret = dev->config.enable_psmi;
+ scoped_guard(mutex, &dev->lock)
+ ret = dev->config.enable_psmi;
config_group_put(&dev->group);
return ret;
@@ -1381,7 +1385,8 @@ bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev)
if (!dev)
return true;
- ret = dev->config.enable_multi_queue;
+ scoped_guard(mutex, &dev->lock)
+ ret = dev->config.enable_multi_queue;
config_group_put(&dev->group);
return ret;
@@ -1421,7 +1426,8 @@ bool xe_configfs_get_disable_vram_page_offline(struct pci_dev *pdev)
if (!dev)
return device_defaults.disable_vram_page_offline;
- ret = dev->config.disable_vram_page_offline;
+ scoped_guard(mutex, &dev->lock)
+ ret = dev->config.disable_vram_page_offline;
config_group_put(&dev->group);
return ret;
@@ -1445,10 +1451,12 @@ u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
if (!dev)
return 0;
- if (cs)
- *cs = dev->config.ctx_restore_mid_bb[class].cs;
+ scoped_guard(mutex, &dev->lock) {
+ if (cs)
+ *cs = dev->config.ctx_restore_mid_bb[class].cs;
- len = dev->config.ctx_restore_mid_bb[class].len;
+ len = dev->config.ctx_restore_mid_bb[class].len;
+ }
config_group_put(&dev->group);
return len;
@@ -1472,8 +1480,10 @@ u32 xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
if (!dev)
return 0;
- *cs = dev->config.ctx_restore_post_bb[class].cs;
- len = dev->config.ctx_restore_post_bb[class].len;
+ scoped_guard(mutex, &dev->lock) {
+ *cs = dev->config.ctx_restore_post_bb[class].cs;
+ len = dev->config.ctx_restore_post_bb[class].len;
+ }
config_group_put(&dev->group);
return len;
--
2.43.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/8] drm/xe/configfs: Fix out-of-bounds read in parse_wa_bb_lines()
2026-11-12 21:35 [PATCH 0/8] Set up for debug configfs group Stuart Summers
2026-11-12 21:35 ` [PATCH 1/8] drm/xe: Guard configfs attribute reads in getters Stuart Summers
@ 2026-11-12 21:35 ` Stuart Summers
2026-11-12 21:35 ` [PATCH 3/8] drm/xe/configfs: Copy wa_bb out under the configfs lock Stuart Summers
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Stuart Summers @ 2026-11-12 21:35 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.d.roper, gustavo.sousa,
Stuart Summers
The outer loop advances the cursor unconditionally at the end of each
iteration. When the last token of a line is terminated by the NUL rather
than by whitespace, e.g. "echo -n 'rcs cmd 1'", the cursor is already on
the NUL and the increment steps past the end of the buffer, so the loop
condition reads out of bounds. The leading strspn(p, " \t\n") already
skips the line separators, and every iteration consumes at least the
engine class token, so dropping the increment keeps the loop making
progress.
Fixes: 39ac06f70062 ("drm/xe/configfs: Add post context restore bb")
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/xe/xe_configfs.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index cc442014cf12..c844155afe52 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -820,7 +820,11 @@ static ssize_t parse_wa_bb_lines(const char *lines,
ssize_t dwords = 0, ret;
const char *p;
- for (p = lines; *p; p++) {
+ /*
+ * Each iteration consumes at least the engine class token if it doesn't
+ * error out, so the loop always makes progress without advancing @p.
+ */
+ for (p = lines; *p;) {
const struct engine_info *info = NULL;
u32 val, val2;
--
2.43.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/8] drm/xe/configfs: Copy wa_bb out under the configfs lock
2026-11-12 21:35 [PATCH 0/8] Set up for debug configfs group Stuart Summers
2026-11-12 21:35 ` [PATCH 1/8] drm/xe: Guard configfs attribute reads in getters Stuart Summers
2026-11-12 21:35 ` [PATCH 2/8] drm/xe/configfs: Fix out-of-bounds read in parse_wa_bb_lines() Stuart Summers
@ 2026-11-12 21:35 ` Stuart Summers
2026-11-12 21:35 ` [PATCH 4/8] drm/xe: Invert vram_page_offline configfs attribute Stuart Summers
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Stuart Summers @ 2026-11-12 21:35 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.d.roper, gustavo.sousa,
Stuart Summers
The ctx_restore_{mid,post}_bb getters handed the caller a pointer into
storage owned by the configfs group and then dropped both the lock and
the group reference. A concurrent store can krealloc() that buffer and
an rmdir can free it outright, leaving the caller in xe_lrc.c to
memcpy() from freed memory. Copy the batch into a caller supplied
buffer while the lock is still held instead, which also folds the
length check the callers were doing into the getters.
Fixes: 6c6988c5e03d ("drm/xe/lrc: Allow to add user commands on context switch")
Fixes: 39ac06f70062 ("drm/xe/configfs: Add post context restore bb")
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/xe/xe_configfs.c | 52 ++++++++++++++++++++++----------
drivers/gpu/drm/xe/xe_configfs.h | 12 ++++----
drivers/gpu/drm/xe/xe_lrc.c | 38 +++++++----------------
3 files changed, 53 insertions(+), 49 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index c844155afe52..c4fbf737b907 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -1441,25 +1441,34 @@ bool xe_configfs_get_disable_vram_page_offline(struct pci_dev *pdev)
* xe_configfs_get_ctx_restore_mid_bb - get configfs ctx_restore_mid_bb setting
* @pdev: pci device
* @class: hw engine class
- * @cs: pointer to the bb to use - only valid during probe
+ * @cs: destination buffer for the batch, or NULL to only query the length
+ * @max_len: capacity of @cs, in dwords
*
- * Return: Number of dwords used in the mid_ctx_restore setting in configfs
+ * Copy the configured batch into @cs while holding the configfs lock, so the
+ * caller never gets a pointer to storage owned by the configfs group.
+ *
+ * Return: Number of dwords used in the mid_ctx_restore setting in configfs, or
+ * -ENOSPC if it does not fit in @max_len
*/
-u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
- enum xe_engine_class class,
- const u32 **cs)
+ssize_t xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
+ enum xe_engine_class class,
+ u32 *cs, size_t max_len)
{
struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
- u32 len;
+ ssize_t len;
if (!dev)
return 0;
scoped_guard(mutex, &dev->lock) {
- if (cs)
- *cs = dev->config.ctx_restore_mid_bb[class].cs;
-
len = dev->config.ctx_restore_mid_bb[class].len;
+ if (cs && len) {
+ if (len > max_len)
+ len = -ENOSPC;
+ else
+ memcpy(cs, dev->config.ctx_restore_mid_bb[class].cs,
+ len * sizeof(u32));
+ }
}
config_group_put(&dev->group);
@@ -1470,23 +1479,34 @@ u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
* xe_configfs_get_ctx_restore_post_bb - get configfs ctx_restore_post_bb setting
* @pdev: pci device
* @class: hw engine class
- * @cs: pointer to the bb to use - only valid during probe
+ * @cs: destination buffer for the batch, or NULL to only query the length
+ * @max_len: capacity of @cs, in dwords
*
- * Return: Number of dwords used in the post_ctx_restore setting in configfs
+ * Copy the configured batch into @cs while holding the configfs lock, so the
+ * caller never gets a pointer to storage owned by the configfs group.
+ *
+ * Return: Number of dwords used in the post_ctx_restore setting in configfs, or
+ * -ENOSPC if it does not fit in @max_len
*/
-u32 xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
- enum xe_engine_class class,
- const u32 **cs)
+ssize_t xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
+ enum xe_engine_class class,
+ u32 *cs, size_t max_len)
{
struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
- u32 len;
+ ssize_t len;
if (!dev)
return 0;
scoped_guard(mutex, &dev->lock) {
- *cs = dev->config.ctx_restore_post_bb[class].cs;
len = dev->config.ctx_restore_post_bb[class].len;
+ if (cs && len) {
+ if (len > max_len)
+ len = -ENOSPC;
+ else
+ memcpy(cs, dev->config.ctx_restore_post_bb[class].cs,
+ len * sizeof(u32));
+ }
}
config_group_put(&dev->group);
diff --git a/drivers/gpu/drm/xe/xe_configfs.h b/drivers/gpu/drm/xe/xe_configfs.h
index d726800de26a..98154beabd5a 100644
--- a/drivers/gpu/drm/xe/xe_configfs.h
+++ b/drivers/gpu/drm/xe/xe_configfs.h
@@ -25,12 +25,12 @@ bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev);
bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev);
u32 xe_configfs_get_migrate_ulls_period_ms(struct pci_dev *pdev);
bool xe_configfs_get_disable_vram_page_offline(struct pci_dev *pdev);
-u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
- enum xe_engine_class class,
- const u32 **cs);
-u32 xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
- enum xe_engine_class class,
- const u32 **cs);
+ssize_t xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
+ enum xe_engine_class class,
+ u32 *cs, size_t max_len);
+ssize_t xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
+ enum xe_engine_class class,
+ u32 *cs, size_t max_len);
#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);
diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
index 040a52f9320e..e17853427eec 100644
--- a/drivers/gpu/drm/xe/xe_lrc.c
+++ b/drivers/gpu/drm/xe/xe_lrc.c
@@ -94,7 +94,7 @@ gt_engine_needs_indirect_ctx(struct xe_gt *gt, enum xe_engine_class class)
return true;
if (xe_configfs_get_ctx_restore_mid_bb(to_pci_dev(xe->drm.dev),
- class, NULL))
+ class, NULL, 0) > 0)
return true;
if (gt->ring_ops[class]->emit_aux_table_inv)
@@ -1186,17 +1186,12 @@ static ssize_t setup_configfs_post_ctx_restore_bb(struct xe_lrc *lrc,
bool indirect)
{
struct xe_device *xe = gt_to_xe(lrc->gt);
- const u32 *user_batch;
- u32 *cmd = batch;
- u32 count;
+ ssize_t count;
count = xe_configfs_get_ctx_restore_post_bb(to_pci_dev(xe->drm.dev),
- hwe->class, &user_batch);
- if (!count)
- return 0;
-
- if (count > max_len)
- return -ENOSPC;
+ hwe->class, batch, max_len);
+ if (count <= 0)
+ return count;
/*
* This should be used only for tests and validation. Taint the kernel
@@ -1204,10 +1199,7 @@ static ssize_t setup_configfs_post_ctx_restore_bb(struct xe_lrc *lrc,
*/
add_taint(TAINT_TEST, LOCKDEP_STILL_OK);
- memcpy(cmd, user_batch, count * sizeof(u32));
- cmd += count;
-
- return cmd - batch;
+ return count;
}
static ssize_t setup_configfs_mid_ctx_restore_bb(struct xe_lrc *lrc,
@@ -1216,17 +1208,12 @@ static ssize_t setup_configfs_mid_ctx_restore_bb(struct xe_lrc *lrc,
bool indirect)
{
struct xe_device *xe = gt_to_xe(lrc->gt);
- const u32 *user_batch;
- u32 *cmd = batch;
- u32 count;
+ ssize_t count;
count = xe_configfs_get_ctx_restore_mid_bb(to_pci_dev(xe->drm.dev),
- hwe->class, &user_batch);
- if (!count)
- return 0;
-
- if (count > max_len)
- return -ENOSPC;
+ hwe->class, batch, max_len);
+ if (count <= 0)
+ return count;
/*
* This should be used only for tests and validation. Taint the kernel
@@ -1234,10 +1221,7 @@ static ssize_t setup_configfs_mid_ctx_restore_bb(struct xe_lrc *lrc,
*/
add_taint(TAINT_TEST, LOCKDEP_STILL_OK);
- memcpy(cmd, user_batch, count * sizeof(u32));
- cmd += count;
-
- return cmd - batch;
+ return count;
}
static ssize_t setup_invalidate_state_cache_wa(struct xe_lrc *lrc,
--
2.43.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 4/8] drm/xe: Invert vram_page_offline configfs attribute
2026-11-12 21:35 [PATCH 0/8] Set up for debug configfs group Stuart Summers
` (2 preceding siblings ...)
2026-11-12 21:35 ` [PATCH 3/8] drm/xe/configfs: Copy wa_bb out under the configfs lock Stuart Summers
@ 2026-11-12 21:35 ` Stuart Summers
2026-11-12 21:35 ` [PATCH 5/8] drm/xe: Make survivability_mode configfs attribute a bitmap Stuart Summers
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Stuart Summers @ 2026-11-12 21:35 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.d.roper, gustavo.sousa,
Stuart Summers
Rename disable_vram_page_offline to enable_vram_page_offline The default
is now true, matching the previous default of offlining being active.
Negative-logic flags are error prone once they get combined with other
conditions, so carry the positive sense all the way down to the RAS
consumer rather than inverting at the configfs boundary. The internal
xe->ras field is explicitly initialized for every platform since a
zeroed struct no longer means "offlining enabled".
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/xe/xe_configfs.c | 44 ++++++++++++++--------------
drivers/gpu/drm/xe/xe_configfs.h | 2 +-
drivers/gpu/drm/xe/xe_ras.c | 18 +++++++-----
drivers/gpu/drm/xe/xe_ras.h | 2 +-
drivers/gpu/drm/xe/xe_ras_types.h | 4 +--
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 2 +-
6 files changed, 37 insertions(+), 35 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index c4fbf737b907..68d537cabef2 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -63,7 +63,7 @@
* ├── engines_allowed
* ├── migrate_ulls_period_ms
* ├── enable_psmi
- * └── disable_vram_page_offline
+ * └── enable_vram_page_offline
*
* After configuring the attributes as per next section, the device can be
* probed with::
@@ -161,15 +161,15 @@
*
* This attribute can only be set before binding to the device.
*
- * Disable VRAM page offline:
- * ----------------------------
+ * Enable VRAM page offline:
+ * -------------------------
*
- * 0, n, N, false - Do not disable (Offlining is active - default)
- * 1, y, Y, true - Disable vram page offline (Logging only)
+ * 0, n, N, false - Disable vram page offline (Logging only)
+ * 1, y, Y, true - Enable vram page offline (Offlining is active - default)
*
* Example to disable VRAM offline::
*
- * # echo 1 > /sys/kernel/config/xe/0000:03:00.0/disable_vram_page_offline
+ * # echo 0 > /sys/kernel/config/xe/0000:03:00.0/enable_vram_page_offline
*
* This attribute can only be set on CRI before binding to the device.
*
@@ -304,7 +304,7 @@ struct xe_config_group_device {
bool survivability_mode;
bool enable_psmi;
bool enable_multi_queue;
- bool disable_vram_page_offline;
+ bool enable_vram_page_offline;
struct {
unsigned int max_vfs;
bool admin_only_pf;
@@ -326,7 +326,7 @@ static const struct xe_config_device device_defaults = {
.survivability_mode = false,
.enable_psmi = false,
.enable_multi_queue = true,
- .disable_vram_page_offline = false,
+ .enable_vram_page_offline = true,
.sriov = {
.max_vfs = XE_DEFAULT_MAX_VFS,
.admin_only_pf = XE_DEFAULT_ADMIN_ONLY_PF,
@@ -675,15 +675,15 @@ static ssize_t migrate_ulls_period_ms_store(struct config_item *item,
return len;
}
-static ssize_t disable_vram_page_offline_show(struct config_item *item, char *page)
+static ssize_t enable_vram_page_offline_show(struct config_item *item, char *page)
{
struct xe_config_device *dev = to_xe_config_device(item);
- return sprintf(page, "%s\n", str_yes_no(dev->disable_vram_page_offline));
+ return sprintf(page, "%s\n", str_yes_no(dev->enable_vram_page_offline));
}
-static ssize_t disable_vram_page_offline_store(struct config_item *item,
- const char *page, size_t len)
+static ssize_t enable_vram_page_offline_store(struct config_item *item,
+ const char *page, size_t len)
{
struct xe_config_group_device *dev = to_xe_config_group_device(item);
bool val;
@@ -697,7 +697,7 @@ static ssize_t disable_vram_page_offline_store(struct config_item *item,
if (is_bound(dev))
return -EBUSY;
- dev->config.disable_vram_page_offline = val;
+ dev->config.enable_vram_page_offline = val;
return len;
}
@@ -946,7 +946,7 @@ CONFIGFS_ATTR(, ctx_restore_post_bb);
CONFIGFS_ATTR(, enable_multi_queue);
CONFIGFS_ATTR(, migrate_ulls_period_ms);
CONFIGFS_ATTR(, enable_psmi);
-CONFIGFS_ATTR(, disable_vram_page_offline);
+CONFIGFS_ATTR(, enable_vram_page_offline);
CONFIGFS_ATTR(, engines_allowed);
CONFIGFS_ATTR(, gt_types_allowed);
CONFIGFS_ATTR(, survivability_mode);
@@ -957,7 +957,7 @@ static struct configfs_attribute *xe_config_device_attrs[] = {
&attr_enable_multi_queue,
&attr_migrate_ulls_period_ms,
&attr_enable_psmi,
- &attr_disable_vram_page_offline,
+ &attr_enable_vram_page_offline,
&attr_engines_allowed,
&attr_gt_types_allowed,
&attr_survivability_mode,
@@ -989,7 +989,7 @@ static bool xe_config_device_is_visible(struct config_item *item,
return false;
}
- if (attr == &attr_disable_vram_page_offline) {
+ if (attr == &attr_enable_vram_page_offline) {
if (!dev->desc->is_dgfx || dev->desc->platform != XE_CRESCENTISLAND)
return false;
}
@@ -1242,7 +1242,7 @@ static void dump_custom_dev_config(struct pci_dev *pdev,
PRI_CUSTOM_ATTR("%u", migrate_ulls_period_ms);
PRI_CUSTOM_ATTR("%d", enable_multi_queue);
PRI_CUSTOM_ATTR("%d", enable_psmi);
- PRI_CUSTOM_ATTR("%d", disable_vram_page_offline);
+ PRI_CUSTOM_ATTR("%d", enable_vram_page_offline);
PRI_CUSTOM_ATTR("%d", survivability_mode);
PRI_CUSTOM_ATTR("%u", sriov.admin_only_pf);
@@ -1417,21 +1417,21 @@ u32 xe_configfs_get_migrate_ulls_period_ms(struct pci_dev *pdev)
}
/**
- * xe_configfs_get_disable_vram_page_offline - get configfs disable_vram_page_offline setting
+ * xe_configfs_get_enable_vram_page_offline - get configfs enable_vram_page_offline setting
* @pdev: pci device
*
- * Return: disable_vram_page_offline setting in configfs
+ * Return: enable_vram_page_offline setting in configfs
*/
-bool xe_configfs_get_disable_vram_page_offline(struct pci_dev *pdev)
+bool xe_configfs_get_enable_vram_page_offline(struct pci_dev *pdev)
{
struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
bool ret;
if (!dev)
- return device_defaults.disable_vram_page_offline;
+ return device_defaults.enable_vram_page_offline;
scoped_guard(mutex, &dev->lock)
- ret = dev->config.disable_vram_page_offline;
+ ret = dev->config.enable_vram_page_offline;
config_group_put(&dev->group);
return ret;
diff --git a/drivers/gpu/drm/xe/xe_configfs.h b/drivers/gpu/drm/xe/xe_configfs.h
index 98154beabd5a..fb92362907ef 100644
--- a/drivers/gpu/drm/xe/xe_configfs.h
+++ b/drivers/gpu/drm/xe/xe_configfs.h
@@ -24,7 +24,7 @@ u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev);
bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev);
bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev);
u32 xe_configfs_get_migrate_ulls_period_ms(struct pci_dev *pdev);
-bool xe_configfs_get_disable_vram_page_offline(struct pci_dev *pdev);
+bool xe_configfs_get_enable_vram_page_offline(struct pci_dev *pdev);
ssize_t xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
enum xe_engine_class class,
u32 *cs, size_t max_len);
diff --git a/drivers/gpu/drm/xe/xe_ras.c b/drivers/gpu/drm/xe/xe_ras.c
index 0fb891d00b36..824031f807a8 100644
--- a/drivers/gpu/drm/xe/xe_ras.c
+++ b/drivers/gpu/drm/xe/xe_ras.c
@@ -328,7 +328,7 @@ static int handle_page_offline(struct xe_device *xe, u64 page_address, bool noti
}
/* User policy set to disable page offlining */
- if (xe_ras_get_disable_vram_page_offline(xe)) {
+ if (!xe_ras_get_enable_vram_page_offline(xe)) {
action = XE_RAS_PAGE_ACTION_REMOVE;
xe_log_err(xe, DEVICE_MEMORY, -EOPNOTSUPP, "User policy set to disable page offlining\n");
goto notify;
@@ -1265,14 +1265,14 @@ static void ras_fini(void *arg)
}
/**
- * xe_ras_get_disable_vram_page_offline - Get the vram page offline user policy
+ * xe_ras_get_enable_vram_page_offline - Get the vram page offline user policy
* @xe: xe device instance
*
- * Return: true if the vram page offline policy is disabled, false otherwise.
+ * Return: true if the vram page offline policy is enabled, false otherwise.
*/
-bool xe_ras_get_disable_vram_page_offline(struct xe_device *xe)
+bool xe_ras_get_enable_vram_page_offline(struct xe_device *xe)
{
- return xe->ras.state.disable_vram_page_offline;
+ return xe->ras.state.enable_vram_page_offline;
}
/**
@@ -1319,17 +1319,19 @@ int xe_ras_init(struct xe_device *xe)
struct xe_ras_state *state = &xe->ras.state;
int ret;
+ state->enable_vram_page_offline = true;
+
xe_drm_ras_init(xe);
if (!xe->info.has_sysctrl)
return 0;
/*
- * TODO: Replace with xe->info.has_disable_vram_page_offline once the feature flag is
+ * TODO: Replace with xe->info.has_vram_page_offline once the feature flag is
* plumbed through device info.
*/
- xe->ras.state.disable_vram_page_offline =
- xe_configfs_get_disable_vram_page_offline(to_pci_dev(xe->drm.dev));
+ xe->ras.state.enable_vram_page_offline =
+ xe_configfs_get_enable_vram_page_offline(to_pci_dev(xe->drm.dev));
if (IS_ENABLED(CONFIG_PCIEAER))
ras_usp_aer_init(xe);
diff --git a/drivers/gpu/drm/xe/xe_ras.h b/drivers/gpu/drm/xe/xe_ras.h
index f7b587ac84e3..baeff7602ed8 100644
--- a/drivers/gpu/drm/xe/xe_ras.h
+++ b/drivers/gpu/drm/xe/xe_ras.h
@@ -21,7 +21,7 @@ int xe_ras_get_threshold(struct xe_device *xe, u8 severity, u8 component, u32 *t
int xe_ras_set_threshold(struct xe_device *xe, u8 severity, u8 component, u32 threshold);
int xe_ras_init(struct xe_device *xe);
enum xe_ras_recovery_action xe_ras_process_errors(struct xe_device *xe);
-bool xe_ras_get_disable_vram_page_offline(struct xe_device *xe);
+bool xe_ras_get_enable_vram_page_offline(struct xe_device *xe);
u32 xe_ras_get_max_pages(struct xe_device *xe);
int xe_ras_get_counter_response(struct xe_device *xe, const struct xe_ras_error_class *counter,
struct xe_ras_get_counter_response *response);
diff --git a/drivers/gpu/drm/xe/xe_ras_types.h b/drivers/gpu/drm/xe/xe_ras_types.h
index 0ff5803d495b..bdfd91927d76 100644
--- a/drivers/gpu/drm/xe/xe_ras_types.h
+++ b/drivers/gpu/drm/xe/xe_ras_types.h
@@ -416,8 +416,8 @@ struct xe_ras_set_health_response {
struct xe_ras_state {
/** @aer_internal_error: true if an uncorrectable internal error was reported via AER */
bool aer_internal_error;
- /** @disable_vram_page_offline: cached configfs policy, immutable after init */
- bool disable_vram_page_offline;
+ /** @enable_vram_page_offline: cached configfs policy, immutable after init */
+ bool enable_vram_page_offline;
/** @max_pages: Total number of pages that can be stored by firmware */
u32 max_pages;
/** @offlined_pages: XArray of pages offlined by firmware */
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 36d47de8b11b..58e9612e5486 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -954,7 +954,7 @@ int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr)
vram_mgr = &vr->ttm;
mm = &vram_mgr->mm;
- if (xe_ras_get_disable_vram_page_offline(xe)) {
+ if (!xe_ras_get_enable_vram_page_offline(xe)) {
xe_err(xe, "0x%llx is reported as corrupted address by HW\n",
addr);
return -EOPNOTSUPP;
--
2.43.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 5/8] drm/xe: Make survivability_mode configfs attribute a bitmap
2026-11-12 21:35 [PATCH 0/8] Set up for debug configfs group Stuart Summers
` (3 preceding siblings ...)
2026-11-12 21:35 ` [PATCH 4/8] drm/xe: Invert vram_page_offline configfs attribute Stuart Summers
@ 2026-11-12 21:35 ` Stuart Summers
2026-11-12 21:35 ` [PATCH 6/8] drm/xe: Sort xe_config_device fields Stuart Summers
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Stuart Summers @ 2026-11-12 21:35 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.d.roper, gustavo.sousa,
Stuart Summers
Survivability mode is likely to grow additional independently selectable
behaviors, so store it as a u8 bitmap rather than a bool. Only bit 0 is
defined, so the accepted values are unchanged.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/xe/xe_configfs.c | 25 +++++++++++++---------
drivers/gpu/drm/xe/xe_configfs.h | 14 +++++++++++-
drivers/gpu/drm/xe/xe_survivability_mode.c | 7 +++---
3 files changed, 32 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 68d537cabef2..4ad07d9c3e90 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -78,8 +78,10 @@
* Survivability mode:
* -------------------
*
- * Enable survivability mode on supported cards. This setting only takes
- * effect when probing the device. Example to enable it::
+ * Enable survivability mode on supported cards. This is a bitmap; bit 0
+ * enables survivability mode and is currently the only bit defined, so the
+ * only accepted values remain 0 and 1. This setting only takes effect when
+ * probing the device. Example to enable it::
*
* # echo 1 > /sys/kernel/config/xe/0000:03:00.0/survivability_mode
*
@@ -301,7 +303,7 @@ struct xe_config_group_device {
u32 migrate_ulls_period_ms;
struct wa_bb ctx_restore_post_bb[XE_ENGINE_CLASS_MAX];
struct wa_bb ctx_restore_mid_bb[XE_ENGINE_CLASS_MAX];
- bool survivability_mode;
+ u8 survivability_mode;
bool enable_psmi;
bool enable_multi_queue;
bool enable_vram_page_offline;
@@ -323,7 +325,7 @@ static const struct xe_config_device device_defaults = {
.gt_types_allowed = U64_MAX,
.engines_allowed = U64_MAX,
.migrate_ulls_period_ms = 5,
- .survivability_mode = false,
+ .survivability_mode = 0,
.enable_psmi = false,
.enable_multi_queue = true,
.enable_vram_page_offline = true,
@@ -407,19 +409,22 @@ static ssize_t survivability_mode_show(struct config_item *item, char *page)
{
struct xe_config_device *dev = to_xe_config_device(item);
- return sprintf(page, "%d\n", dev->survivability_mode);
+ return sprintf(page, "%u\n", dev->survivability_mode);
}
static ssize_t survivability_mode_store(struct config_item *item, const char *page, size_t len)
{
struct xe_config_group_device *dev = to_xe_config_group_device(item);
- bool survivability_mode;
+ u8 survivability_mode;
int ret;
- ret = kstrtobool(page, &survivability_mode);
+ ret = kstrtou8(page, 0, &survivability_mode);
if (ret)
return ret;
+ if (survivability_mode & ~XE_CONFIGFS_SURVIVABILITY_MASK)
+ return -EINVAL;
+
guard(mutex)(&dev->lock);
if (is_bound(dev))
return -EBUSY;
@@ -1243,7 +1248,7 @@ static void dump_custom_dev_config(struct pci_dev *pdev,
PRI_CUSTOM_ATTR("%d", enable_multi_queue);
PRI_CUSTOM_ATTR("%d", enable_psmi);
PRI_CUSTOM_ATTR("%d", enable_vram_page_offline);
- PRI_CUSTOM_ATTR("%d", survivability_mode);
+ PRI_CUSTOM_ATTR("%u", survivability_mode);
PRI_CUSTOM_ATTR("%u", sriov.admin_only_pf);
#undef PRI_CUSTOM_ATTR
@@ -1278,10 +1283,10 @@ void xe_configfs_check_device(struct pci_dev *pdev)
*
* Return: survivability_mode attribute in configfs
*/
-bool xe_configfs_get_survivability_mode(struct pci_dev *pdev)
+u8 xe_configfs_get_survivability_mode(struct pci_dev *pdev)
{
struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
- bool mode;
+ u8 mode;
if (!dev)
return device_defaults.survivability_mode;
diff --git a/drivers/gpu/drm/xe/xe_configfs.h b/drivers/gpu/drm/xe/xe_configfs.h
index fb92362907ef..a9442ab56a2e 100644
--- a/drivers/gpu/drm/xe/xe_configfs.h
+++ b/drivers/gpu/drm/xe/xe_configfs.h
@@ -5,6 +5,7 @@
#ifndef _XE_CONFIGFS_H_
#define _XE_CONFIGFS_H_
+#include <linux/bits.h>
#include <linux/limits.h>
#include <linux/types.h>
@@ -14,10 +15,21 @@
struct pci_dev;
+/**
+ * DOC: survivability_mode configfs bits
+ *
+ * The survivability_mode attribute is a bitmap so that additional
+ * survivability behaviors can be requested independently in the future.
+ * %XE_CONFIGFS_SURVIVABILITY_ENABLE is currently the only defined bit, so
+ * the attribute still only accepts 0 and 1.
+ */
+#define XE_CONFIGFS_SURVIVABILITY_ENABLE BIT(0)
+#define XE_CONFIGFS_SURVIVABILITY_MASK XE_CONFIGFS_SURVIVABILITY_ENABLE
+
int xe_configfs_init(void);
void xe_configfs_exit(void);
void xe_configfs_check_device(struct pci_dev *pdev);
-bool xe_configfs_get_survivability_mode(struct pci_dev *pdev);
+u8 xe_configfs_get_survivability_mode(struct pci_dev *pdev);
bool xe_configfs_primary_gt_allowed(struct pci_dev *pdev);
bool xe_configfs_media_gt_allowed(struct pci_dev *pdev);
u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev);
diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
index 91a0680e449b..ed51cc5e805e 100644
--- a/drivers/gpu/drm/xe/xe_survivability_mode.c
+++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
@@ -309,7 +309,8 @@ static const struct attribute_group survivability_info_group = {
static int create_survivability_sysfs(struct pci_dev *pdev)
{
/* Survivability info is required if not enabled via configfs */
- bool needs_info = !xe_configfs_get_survivability_mode(pdev);
+ bool needs_info = !(xe_configfs_get_survivability_mode(pdev) &
+ XE_CONFIGFS_SURVIVABILITY_ENABLE);
struct xe_device *xe = pdev_to_xe_device(pdev);
struct device *dev = &pdev->dev;
int ret;
@@ -408,14 +409,14 @@ bool xe_survivability_mode_is_requested(struct xe_device *xe)
struct xe_mmio *mmio = xe_root_tile_mmio(xe);
struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
u32 data;
- bool survivability_mode;
+ u8 survivability_mode;
if (!IS_DGFX(xe) || IS_SRIOV_VF(xe) || xe->info.platform < XE_BATTLEMAGE)
return false;
survivability_mode = xe_configfs_get_survivability_mode(pdev);
/* Enable survivability mode if set via configfs */
- if (survivability_mode)
+ if (survivability_mode & XE_CONFIGFS_SURVIVABILITY_ENABLE)
return true;
data = xe_mmio_read32(mmio, PCODE_SCRATCH(0));
--
2.43.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 6/8] drm/xe: Sort xe_config_device fields
2026-11-12 21:35 [PATCH 0/8] Set up for debug configfs group Stuart Summers
` (4 preceding siblings ...)
2026-11-12 21:35 ` [PATCH 5/8] drm/xe: Make survivability_mode configfs attribute a bitmap Stuart Summers
@ 2026-11-12 21:35 ` Stuart Summers
2026-11-12 21:35 ` [PATCH 7/8] drm/xe: Split out configfs data structures Stuart Summers
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Stuart Summers @ 2026-11-12 21:35 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.d.roper, gustavo.sousa,
Stuart Summers
As we're planning more configfs entries over time, let's add
some sorting rules to make sure this stays clean and easy to
manage. Sorting first by type and then name for readability.
The documentation block is sorted alphabetically by attribute
name instead, since there is no type information to group by
there.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/xe/xe_configfs.c | 1338 +++++++++++++++---------------
drivers/gpu/drm/xe/xe_configfs.h | 16 +-
2 files changed, 684 insertions(+), 670 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 4ad07d9c3e90..68d1db7bd1af 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -58,12 +58,15 @@
* │ └── ...
* :
* └── 0000:03:00.0
- * ├── survivability_mode
- * ├── gt_types_allowed
+ * ├── ctx_restore_mid_bb
+ * ├── ctx_restore_post_bb
+ * ├── enable_multi_queue
+ * ├── enable_psmi
+ * ├── enable_vram_page_offline
* ├── engines_allowed
+ * ├── gt_types_allowed
* ├── migrate_ulls_period_ms
- * ├── enable_psmi
- * └── enable_vram_page_offline
+ * └── survivability_mode
*
* After configuring the attributes as per next section, the device can be
* probed with::
@@ -75,55 +78,93 @@
* Configure Attributes
* ====================
*
- * Survivability mode:
- * -------------------
+ * Context restore BB
+ * ------------------
*
- * Enable survivability mode on supported cards. This is a bitmap; bit 0
- * enables survivability mode and is currently the only bit defined, so the
- * only accepted values remain 0 and 1. This setting only takes effect when
- * probing the device. Example to enable it::
+ * Allow to execute a batch buffer during any context switches. When the
+ * GPU is restoring the context, it executes additional commands. It's useful
+ * for testing additional workarounds and validating certain HW behaviors: it's
+ * not intended for normal execution and will taint the kernel with TAINT_TEST
+ * when used.
*
- * # echo 1 > /sys/kernel/config/xe/0000:03:00.0/survivability_mode
+ * The syntax allows to pass straight instructions to be executed by the engine
+ * in a batch buffer or set specific registers.
*
- * This attribute can only be set before binding to the device.
+ * #. Generic instruction::
*
- * Allowed GT types:
- * -----------------
+ * <engine-class> cmd <instr> [[dword0] [dword1] [...]]
*
- * Allow only specific types of GTs to be detected and initialized by the
- * driver. Any combination of GT types can be enabled/disabled, although
- * some settings will cause the device to fail to probe.
+ * #. Simple register setting::
*
- * Writes support both comma- and newline-separated input format. Reads
- * will always return one GT type per line. "primary" and "media" are the
- * GT type names supported by this interface.
+ * <engine-class> reg <address> <value>
+ *
+ * Commands are saved per engine class: all instances of that class will execute
+ * those commands during context switch. The instruction, dword arguments,
+ * addresses and values are in hex format like in the examples below.
+ *
+ * #. Execute a LRI command to write 0xDEADBEEF to register 0x4f10 after the
+ * normal context restore::
+ *
+ * # echo 'rcs cmd 11000001 4F100 DEADBEEF' \
+ * > /sys/kernel/config/xe/0000:03:00.0/ctx_restore_post_bb
+ *
+ * #. Execute a LRI command to write 0xDEADBEEF to register 0x4f10 at the
+ * beginning of the context restore::
+ *
+ * # echo 'rcs cmd 11000001 4F100 DEADBEEF' \
+ * > /sys/kernel/config/xe/0000:03:00.0/ctx_restore_mid_bb
+
+ * #. Load certain values in a couple of registers (it can be used as a simpler
+ * alternative to the `cmd`) action::
+ *
+ * # cat > /sys/kernel/config/xe/0000:03:00.0/ctx_restore_post_bb <<EOF
+ * rcs reg 4F100 DEADBEEF
+ * rcs reg 4F104 FFFFFFFF
+ * EOF
+ *
+ * .. note::
+ *
+ * When using multiple lines, make sure to use a command that is
+ * implemented with a single write syscall, like HEREDOC.
+ *
+ * Currently this is implemented only for post and mid context restore and
+ * these attributes can only be set before binding to the device.
+ *
+ * Enable multi-queue
+ * ------------------
+ *
+ * Multi-queue support on the device is enabled by default where the
+ * hardware supports it. Writing 0 force-disables multi-queue support:
+ * multi-queue exec-queue group creation via ioctl is refused, and the
+ * GuC feature is disabled::
+ *
+ * # echo 0 > /sys/kernel/config/xe/0000:03:00.0/enable_multi_queue
*
* This attribute can only be set before binding to the device.
*
- * Examples:
+ * PSMI
+ * ----
*
- * Allow both primary and media GTs to be initialized and used. This matches
- * the driver's default behavior::
+ * Enable extra debugging capabilities to trace engine execution. Only useful
+ * during early platform enabling and requires additional hardware connected.
+ * Once it's enabled, additionals WAs are added and runtime configuration is
+ * done via debugfs. Example to enable it::
*
- * # echo 'primary,media' > /sys/kernel/config/xe/0000:03:00.0/gt_types_allowed
+ * # echo 1 > /sys/kernel/config/xe/0000:03:00.0/enable_psmi
*
- * Allow only the primary GT of each tile to be initialized and used,
- * effectively disabling the media GT if it exists on the platform::
+ * This attribute can only be set before binding to the device.
*
- * # echo 'primary' > /sys/kernel/config/xe/0000:03:00.0/gt_types_allowed
+ * Enable VRAM page offline:
+ * -------------------------
*
- * Allow only the media GT of each tile to be initialized and used,
- * effectively disabling the primary GT. **This configuration will cause
- * device probe failure on all current platforms, but may be allowed on
- * igpu platforms in the future**::
+ * 0, n, N, false - Disable vram page offline (Logging only)
+ * 1, y, Y, true - Enable vram page offline (Offlining is active - default)
*
- * # echo 'media' > /sys/kernel/config/xe/0000:03:00.0/gt_types_allowed
+ * Example to disable VRAM offline::
*
- * Disable all GTs. Only other GPU IP (such as display) is potentially usable.
- * **This configuration will cause device probe failure on all current
- * platforms, but may be allowed on igpu platforms in the future**::
+ * # echo 0 > /sys/kernel/config/xe/0000:03:00.0/enable_vram_page_offline
*
- * # echo '' > /sys/kernel/config/xe/0000:03:00.0/gt_types_allowed
+ * This attribute can only be set on CRI before binding to the device.
*
* Allowed engines:
* ----------------
@@ -151,81 +192,69 @@
*
* This attribute can only be set before binding to the device.
*
- * PSMI
- * ----
+ * Allowed GT types:
+ * -----------------
*
- * Enable extra debugging capabilities to trace engine execution. Only useful
- * during early platform enabling and requires additional hardware connected.
- * Once it's enabled, additionals WAs are added and runtime configuration is
- * done via debugfs. Example to enable it::
+ * Allow only specific types of GTs to be detected and initialized by the
+ * driver. Any combination of GT types can be enabled/disabled, although
+ * some settings will cause the device to fail to probe.
*
- * # echo 1 > /sys/kernel/config/xe/0000:03:00.0/enable_psmi
+ * Writes support both comma- and newline-separated input format. Reads
+ * will always return one GT type per line. "primary" and "media" are the
+ * GT type names supported by this interface.
*
* This attribute can only be set before binding to the device.
*
- * Enable VRAM page offline:
- * -------------------------
- *
- * 0, n, N, false - Disable vram page offline (Logging only)
- * 1, y, Y, true - Enable vram page offline (Offlining is active - default)
- *
- * Example to disable VRAM offline::
- *
- * # echo 0 > /sys/kernel/config/xe/0000:03:00.0/enable_vram_page_offline
+ * Examples:
*
- * This attribute can only be set on CRI before binding to the device.
+ * Allow both primary and media GTs to be initialized and used. This matches
+ * the driver's default behavior::
*
- * Context restore BB
- * ------------------
+ * # echo 'primary,media' > /sys/kernel/config/xe/0000:03:00.0/gt_types_allowed
*
- * Allow to execute a batch buffer during any context switches. When the
- * GPU is restoring the context, it executes additional commands. It's useful
- * for testing additional workarounds and validating certain HW behaviors: it's
- * not intended for normal execution and will taint the kernel with TAINT_TEST
- * when used.
+ * Allow only the primary GT of each tile to be initialized and used,
+ * effectively disabling the media GT if it exists on the platform::
*
- * The syntax allows to pass straight instructions to be executed by the engine
- * in a batch buffer or set specific registers.
+ * # echo 'primary' > /sys/kernel/config/xe/0000:03:00.0/gt_types_allowed
*
- * #. Generic instruction::
+ * Allow only the media GT of each tile to be initialized and used,
+ * effectively disabling the primary GT. **This configuration will cause
+ * device probe failure on all current platforms, but may be allowed on
+ * igpu platforms in the future**::
*
- * <engine-class> cmd <instr> [[dword0] [dword1] [...]]
+ * # echo 'media' > /sys/kernel/config/xe/0000:03:00.0/gt_types_allowed
*
- * #. Simple register setting::
+ * Disable all GTs. Only other GPU IP (such as display) is potentially usable.
+ * **This configuration will cause device probe failure on all current
+ * platforms, but may be allowed on igpu platforms in the future**::
*
- * <engine-class> reg <address> <value>
+ * # echo '' > /sys/kernel/config/xe/0000:03:00.0/gt_types_allowed
*
- * Commands are saved per engine class: all instances of that class will execute
- * those commands during context switch. The instruction, dword arguments,
- * addresses and values are in hex format like in the examples below.
+ * Migrate ULLS Period (ms)
+ * ------------------------
*
- * #. Execute a LRI command to write 0xDEADBEEF to register 0x4f10 after the
- * normal context restore::
+ * Migrate ULLS period, in milliseconds. This is the delay between entering
+ * migrate ULLS (a continuously running batch) and exiting it. Migrate ULLS is
+ * currently entered during page faults and SVM prefetch operations. Default 5,
+ * zero indicates ULLS is disabled.
*
- * # echo 'rcs cmd 11000001 4F100 DEADBEEF' \
- * > /sys/kernel/config/xe/0000:03:00.0/ctx_restore_post_bb
+ * How to disable migration ULLS:
*
- * #. Execute a LRI command to write 0xDEADBEEF to register 0x4f10 at the
- * beginning of the context restore::
+ * # echo 0 > /sys/kernel/config/xe/0000:03:00.0/migrate_ulls_period_ms
*
- * # echo 'rcs cmd 11000001 4F100 DEADBEEF' \
- * > /sys/kernel/config/xe/0000:03:00.0/ctx_restore_mid_bb
-
- * #. Load certain values in a couple of registers (it can be used as a simpler
- * alternative to the `cmd`) action::
+ * This attribute can only be set before binding to the device.
*
- * # cat > /sys/kernel/config/xe/0000:03:00.0/ctx_restore_post_bb <<EOF
- * rcs reg 4F100 DEADBEEF
- * rcs reg 4F104 FFFFFFFF
- * EOF
+ * Survivability mode:
+ * -------------------
*
- * .. note::
+ * Enable survivability mode on supported cards. This is a bitmap; bit 0
+ * enables survivability mode and is currently the only bit defined, so the
+ * only accepted values remain 0 and 1. This setting only takes effect when
+ * probing the device. Example to enable it::
*
- * When using multiple lines, make sure to use a command that is
- * implemented with a single write syscall, like HEREDOC.
+ * # echo 1 > /sys/kernel/config/xe/0000:03:00.0/survivability_mode
*
- * Currently this is implemented only for post and mid context restore and
- * these attributes can only be set before binding to the device.
+ * This attribute can only be set before binding to the device.
*
* Max SR-IOV Virtual Functions
* ----------------------------
@@ -253,32 +282,6 @@
*
* This setting only takes effect when probing the device.
*
- * Enable multi-queue
- * ------------------
- *
- * Multi-queue support on the device is enabled by default where the
- * hardware supports it. Writing 0 force-disables multi-queue support:
- * multi-queue exec-queue group creation via ioctl is refused, and the
- * GuC feature is disabled::
- *
- * # echo 0 > /sys/kernel/config/xe/0000:03:00.0/enable_multi_queue
- *
- * This attribute can only be set before binding to the device.
- *
- * Migrate ULLS Period (ms)
- * ------------------------
- *
- * Migrate ULLS period, in milliseconds. This is the delay between entering
- * migrate ULLS (a continuously running batch) and exiting it. Migrate ULLS is
- * currently entered during page faults and SVM prefetch operations. Default 5,
- * zero indicates ULLS is disabled.
- *
- * How to disable migration ULLS:
- *
- * # echo 0 > /sys/kernel/config/xe/0000:03:00.0/migrate_ulls_period_ms
- *
- * This attribute can only be set before binding to the device.
- *
* Remove devices
* ==============
*
@@ -297,15 +300,20 @@ struct xe_config_group_device {
struct config_group group;
struct config_group sriov;
+ /*
+ * Fields sorted by type (largest first) then name: struct arrays,
+ * u64, u32/unsigned int, u8, bool, sub-structs last. Within each
+ * type, entries are sorted alphabetically.
+ */
struct xe_config_device {
- u64 gt_types_allowed;
+ struct wa_bb ctx_restore_mid_bb[XE_ENGINE_CLASS_MAX];
+ struct wa_bb ctx_restore_post_bb[XE_ENGINE_CLASS_MAX];
u64 engines_allowed;
+ u64 gt_types_allowed;
u32 migrate_ulls_period_ms;
- struct wa_bb ctx_restore_post_bb[XE_ENGINE_CLASS_MAX];
- struct wa_bb ctx_restore_mid_bb[XE_ENGINE_CLASS_MAX];
u8 survivability_mode;
- bool enable_psmi;
bool enable_multi_queue;
+ bool enable_psmi;
bool enable_vram_page_offline;
struct {
unsigned int max_vfs;
@@ -322,12 +330,12 @@ struct xe_config_group_device {
};
static const struct xe_config_device device_defaults = {
- .gt_types_allowed = U64_MAX,
.engines_allowed = U64_MAX,
+ .gt_types_allowed = U64_MAX,
.migrate_ulls_period_ms = 5,
.survivability_mode = 0,
- .enable_psmi = false,
.enable_multi_queue = true,
+ .enable_psmi = false,
.enable_vram_page_offline = true,
.sriov = {
.max_vfs = XE_DEFAULT_MAX_VFS,
@@ -405,84 +413,345 @@ static bool is_bound(struct xe_config_group_device *dev)
return ret;
}
-static ssize_t survivability_mode_show(struct config_item *item, char *page)
-{
- struct xe_config_device *dev = to_xe_config_device(item);
-
- return sprintf(page, "%u\n", dev->survivability_mode);
-}
-
-static ssize_t survivability_mode_store(struct config_item *item, const char *page, size_t len)
-{
- struct xe_config_group_device *dev = to_xe_config_group_device(item);
- u8 survivability_mode;
- int ret;
-
- ret = kstrtou8(page, 0, &survivability_mode);
- if (ret)
- return ret;
+static struct xe_config_group_device *find_xe_config_group_device(struct pci_dev *pdev);
- if (survivability_mode & ~XE_CONFIGFS_SURVIVABILITY_MASK)
+/**
+ * xe_configfs_get_ctx_restore_mid_bb - get configfs ctx_restore_mid_bb setting
+ * @pdev: pci device
+ * @class: hw engine class
+ * @cs: destination buffer for the batch, or NULL to only query the length
+ * @max_len: capacity of @cs, in dwords
+ *
+ * Copy the configured batch into @cs while holding the configfs lock, so the
+ * caller never gets a pointer to storage owned by the configfs group.
+ *
+ * Return: Number of dwords used in the mid_ctx_restore setting in configfs, or
+ * -ENOSPC if it does not fit in @max_len
+ */
+ssize_t xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
+ enum xe_engine_class class,
+ u32 *cs, size_t max_len)
+{
+ struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ ssize_t len;
+
+ if (!dev)
+ return 0;
+
+ scoped_guard(mutex, &dev->lock) {
+ len = dev->config.ctx_restore_mid_bb[class].len;
+ if (cs && len) {
+ if (len > max_len)
+ len = -ENOSPC;
+ else
+ memcpy(cs, dev->config.ctx_restore_mid_bb[class].cs,
+ len * sizeof(u32));
+ }
+ }
+ config_group_put(&dev->group);
+
+ return len;
+}
+
+/**
+ * xe_configfs_get_ctx_restore_post_bb - get configfs ctx_restore_post_bb setting
+ * @pdev: pci device
+ * @class: hw engine class
+ * @cs: destination buffer for the batch, or NULL to only query the length
+ * @max_len: capacity of @cs, in dwords
+ *
+ * Copy the configured batch into @cs while holding the configfs lock, so the
+ * caller never gets a pointer to storage owned by the configfs group.
+ *
+ * Return: Number of dwords used in the post_ctx_restore setting in configfs, or
+ * -ENOSPC if it does not fit in @max_len
+ */
+ssize_t xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
+ enum xe_engine_class class,
+ u32 *cs, size_t max_len)
+{
+ struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ ssize_t len;
+
+ if (!dev)
+ return 0;
+
+ scoped_guard(mutex, &dev->lock) {
+ len = dev->config.ctx_restore_post_bb[class].len;
+ if (cs && len) {
+ if (len > max_len)
+ len = -ENOSPC;
+ else
+ memcpy(cs, dev->config.ctx_restore_post_bb[class].cs,
+ len * sizeof(u32));
+ }
+ }
+ config_group_put(&dev->group);
+
+ return len;
+}
+
+static bool wa_bb_read_advance(bool dereference, char **p,
+ const char *append, size_t len,
+ size_t *max_size)
+{
+ if (dereference) {
+ if (len >= *max_size)
+ return false;
+ *max_size -= len;
+ if (append)
+ memcpy(*p, append, len);
+ }
+
+ *p += len;
+
+ return true;
+}
+
+static ssize_t wa_bb_show(struct xe_config_group_device *dev,
+ struct wa_bb wa_bb[static XE_ENGINE_CLASS_MAX],
+ char *data, size_t sz)
+{
+ char *p = data;
+
+ guard(mutex)(&dev->lock);
+
+ for (size_t i = 0; i < ARRAY_SIZE(engine_info); i++) {
+ enum xe_engine_class ec = engine_info[i].engine_class;
+ size_t len;
+
+ if (!wa_bb[ec].len)
+ continue;
+
+ len = snprintf(p, sz, "%s:", engine_info[i].cls);
+ if (!wa_bb_read_advance(data, &p, NULL, len, &sz))
+ return -ENOBUFS;
+
+ for (size_t j = 0; j < wa_bb[ec].len; j++) {
+ len = snprintf(p, sz, " %08x", wa_bb[ec].cs[j]);
+ if (!wa_bb_read_advance(data, &p, NULL, len, &sz))
+ return -ENOBUFS;
+ }
+
+ if (!wa_bb_read_advance(data, &p, "\n", 1, &sz))
+ return -ENOBUFS;
+ }
+
+ if (!wa_bb_read_advance(data, &p, "", 1, &sz))
+ return -ENOBUFS;
+
+ /* Reserve one more to match check for '\0' */
+ if (!data)
+ p++;
+
+ return p - data;
+}
+
+static ssize_t ctx_restore_mid_bb_show(struct config_item *item, char *page)
+{
+ struct xe_config_group_device *dev = to_xe_config_group_device(item);
+
+ return wa_bb_show(dev, dev->config.ctx_restore_mid_bb, page, SZ_4K);
+}
+
+static ssize_t ctx_restore_post_bb_show(struct config_item *item, char *page)
+{
+ struct xe_config_group_device *dev = to_xe_config_group_device(item);
+
+ return wa_bb_show(dev, dev->config.ctx_restore_post_bb, page, SZ_4K);
+}
+
+static void wa_bb_append(struct wa_bb *wa_bb, u32 val)
+{
+ if (wa_bb->cs)
+ wa_bb->cs[wa_bb->len] = val;
+
+ wa_bb->len++;
+}
+
+static ssize_t parse_hex(const char *line, u32 *pval)
+{
+ char numstr[12];
+ const char *p;
+ ssize_t numlen;
+
+ p = line + strspn(line, " \t");
+ if (!*p || *p == '\n')
+ return 0;
+
+ numlen = strcspn(p, " \t\n");
+ if (!numlen || numlen >= sizeof(numstr) - 1)
+ return -EINVAL;
+
+ memcpy(numstr, p, numlen);
+ numstr[numlen] = '\0';
+ p += numlen;
+
+ if (kstrtou32(numstr, 16, pval))
return -EINVAL;
+ return p - line;
+}
+
+static int parse_engine(const char *s, const char *end_chars, u64 *mask,
+ const struct engine_info **pinfo);
+
+/*
+ * Parse lines with the format
+ *
+ * <engine-class> cmd <u32> <u32...>
+ * <engine-class> reg <u32_addr> <u32_val>
+ *
+ * and optionally save them in @wa_bb[i].cs is non-NULL.
+ *
+ * Return the number of dwords parsed.
+ */
+static ssize_t parse_wa_bb_lines(const char *lines,
+ struct wa_bb wa_bb[static XE_ENGINE_CLASS_MAX])
+{
+ ssize_t dwords = 0, ret;
+ const char *p;
+
+ /*
+ * Each iteration consumes at least the engine class token if it doesn't
+ * error out, so the loop always makes progress without advancing @p.
+ */
+ for (p = lines; *p;) {
+ const struct engine_info *info = NULL;
+ u32 val, val2;
+
+ /* Also allow empty lines */
+ p += strspn(p, " \t\n");
+ if (!*p)
+ break;
+
+ ret = parse_engine(p, " \t\n", NULL, &info);
+ if (ret < 0)
+ return ret;
+
+ p += ret;
+ p += strspn(p, " \t");
+
+ if (str_has_prefix(p, "cmd")) {
+ for (p += strlen("cmd"); *p;) {
+ ret = parse_hex(p, &val);
+ if (ret < 0)
+ return -EINVAL;
+ if (!ret)
+ break;
+
+ p += ret;
+ dwords++;
+ wa_bb_append(&wa_bb[info->engine_class], val);
+ }
+ } else if (str_has_prefix(p, "reg")) {
+ p += strlen("reg");
+ ret = parse_hex(p, &val);
+ if (ret <= 0)
+ return -EINVAL;
+
+ p += ret;
+ ret = parse_hex(p, &val2);
+ if (ret <= 0)
+ return -EINVAL;
+
+ p += ret;
+ dwords += 3;
+ wa_bb_append(&wa_bb[info->engine_class],
+ MI_LOAD_REGISTER_IMM | MI_LRI_NUM_REGS(1));
+ wa_bb_append(&wa_bb[info->engine_class], val);
+ wa_bb_append(&wa_bb[info->engine_class], val2);
+ } else {
+ return -EINVAL;
+ }
+ }
+
+ return dwords;
+}
+
+static ssize_t wa_bb_store(struct wa_bb wa_bb[static XE_ENGINE_CLASS_MAX],
+ struct xe_config_group_device *dev,
+ const char *page, size_t len)
+{
+ /* tmp_wa_bb must match wa_bb's size */
+ struct wa_bb tmp_wa_bb[XE_ENGINE_CLASS_MAX] = { };
+ ssize_t count, class;
+ u32 *tmp;
+
+ /* 1. Count dwords - wa_bb[i].cs is NULL for all classes */
+ count = parse_wa_bb_lines(page, tmp_wa_bb);
+ if (count < 0)
+ return count;
+
guard(mutex)(&dev->lock);
+
if (is_bound(dev))
return -EBUSY;
- dev->config.survivability_mode = survivability_mode;
+ /*
+ * 2. Allocate a u32 array and set the pointers to the right positions
+ * according to the length of each class' wa_bb
+ */
+ tmp = krealloc(wa_bb[0].cs, count * sizeof(u32), GFP_KERNEL);
+ if (!tmp)
+ return -ENOMEM;
- return len;
-}
+ if (!count) {
+ memset(wa_bb, 0, sizeof(tmp_wa_bb));
+ return len;
+ }
-static ssize_t gt_types_allowed_show(struct config_item *item, char *page)
-{
- struct xe_config_device *dev = to_xe_config_device(item);
- char *p = page;
+ for (class = 0, count = 0; class < XE_ENGINE_CLASS_MAX; ++class) {
+ tmp_wa_bb[class].cs = tmp + count;
+ count += tmp_wa_bb[class].len;
+ tmp_wa_bb[class].len = 0;
+ }
- for (size_t i = 0; i < ARRAY_SIZE(gt_types); i++)
- if (dev->gt_types_allowed & BIT_ULL(gt_types[i].type))
- p += sprintf(p, "%s\n", gt_types[i].name);
+ /* 3. Parse wa_bb lines again, this time saving the values */
+ count = parse_wa_bb_lines(page, tmp_wa_bb);
+ if (count < 0)
+ return count;
- return p - page;
+ memcpy(wa_bb, tmp_wa_bb, sizeof(tmp_wa_bb));
+
+ return len;
}
-static ssize_t gt_types_allowed_store(struct config_item *item, const char *page,
- size_t len)
+static ssize_t ctx_restore_mid_bb_store(struct config_item *item,
+ const char *data, size_t sz)
{
struct xe_config_group_device *dev = to_xe_config_group_device(item);
- char *buf __free(kfree) = kstrdup(page, GFP_KERNEL);
- char *p = buf;
- u64 typemask = 0;
- if (!buf)
- return -ENOMEM;
-
- while (p) {
- char *typename = strsep(&p, ",\n");
- bool matched = false;
+ return wa_bb_store(dev->config.ctx_restore_mid_bb, dev, data, sz);
+}
- if (typename[0] == '\0')
- continue;
+static ssize_t ctx_restore_post_bb_store(struct config_item *item,
+ const char *data, size_t sz)
+{
+ struct xe_config_group_device *dev = to_xe_config_group_device(item);
- for (size_t i = 0; i < ARRAY_SIZE(gt_types); i++) {
- if (strcmp(typename, gt_types[i].name) == 0) {
- typemask |= BIT(gt_types[i].type);
- matched = true;
- break;
- }
- }
+ return wa_bb_store(dev->config.ctx_restore_post_bb, dev, data, sz);
+}
- if (!matched)
- return -EINVAL;
- }
+/**
+ * xe_configfs_get_engines_allowed - get engine allowed mask from configfs
+ * @pdev: pci device
+ *
+ * Return: engine mask with allowed engines set in configfs
+ */
+u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev)
+{
+ struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ u64 engines_allowed;
- guard(mutex)(&dev->lock);
- if (is_bound(dev))
- return -EBUSY;
+ if (!dev)
+ return device_defaults.engines_allowed;
- dev->config.gt_types_allowed = typemask;
+ scoped_guard(mutex, &dev->lock)
+ engines_allowed = dev->config.engines_allowed;
+ config_group_put(&dev->group);
- return len;
+ return engines_allowed;
}
static ssize_t engines_allowed_show(struct config_item *item, char *page)
@@ -600,59 +869,117 @@ static ssize_t engines_allowed_store(struct config_item *item, const char *page,
return len;
}
-static ssize_t enable_psmi_show(struct config_item *item, char *page)
+static u64 get_gt_types_allowed(struct pci_dev *pdev)
{
- struct xe_config_device *dev = to_xe_config_device(item);
-
- return sprintf(page, "%d\n", dev->enable_psmi);
-}
+ struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ u64 mask;
-static ssize_t enable_psmi_store(struct config_item *item, const char *page, size_t len)
-{
- struct xe_config_group_device *dev = to_xe_config_group_device(item);
- bool val;
- int ret;
+ if (!dev)
+ return device_defaults.gt_types_allowed;
- ret = kstrtobool(page, &val);
- if (ret)
- return ret;
+ scoped_guard(mutex, &dev->lock)
+ mask = dev->config.gt_types_allowed;
+ config_group_put(&dev->group);
- guard(mutex)(&dev->lock);
- if (is_bound(dev))
- return -EBUSY;
+ return mask;
+}
- dev->config.enable_psmi = val;
+/**
+ * xe_configfs_primary_gt_allowed - determine whether primary GTs are supported
+ * @pdev: pci device
+ *
+ * Return: True if primary GTs are enabled, false if they have been disabled via
+ * configfs.
+ */
+bool xe_configfs_primary_gt_allowed(struct pci_dev *pdev)
+{
+ return get_gt_types_allowed(pdev) & BIT_ULL(XE_GT_TYPE_MAIN);
+}
- return len;
+/**
+ * xe_configfs_media_gt_allowed - determine whether media GTs are supported
+ * @pdev: pci device
+ *
+ * Return: True if the media GTs are enabled, false if they have been disabled
+ * via configfs.
+ */
+bool xe_configfs_media_gt_allowed(struct pci_dev *pdev)
+{
+ return get_gt_types_allowed(pdev) & BIT_ULL(XE_GT_TYPE_MEDIA);
}
-static ssize_t enable_multi_queue_show(struct config_item *item, char *page)
+static ssize_t gt_types_allowed_show(struct config_item *item, char *page)
{
struct xe_config_device *dev = to_xe_config_device(item);
+ char *p = page;
- return sprintf(page, "%d\n", dev->enable_multi_queue);
+ for (size_t i = 0; i < ARRAY_SIZE(gt_types); i++)
+ if (dev->gt_types_allowed & BIT_ULL(gt_types[i].type))
+ p += sprintf(p, "%s\n", gt_types[i].name);
+
+ return p - page;
}
-static ssize_t enable_multi_queue_store(struct config_item *item, const char *page,
- size_t len)
+static ssize_t gt_types_allowed_store(struct config_item *item, const char *page,
+ size_t len)
{
struct xe_config_group_device *dev = to_xe_config_group_device(item);
- bool val;
- int ret;
+ char *buf __free(kfree) = kstrdup(page, GFP_KERNEL);
+ char *p = buf;
+ u64 typemask = 0;
- ret = kstrtobool(page, &val);
- if (ret)
- return ret;
+ if (!buf)
+ return -ENOMEM;
+
+ while (p) {
+ char *typename = strsep(&p, ",\n");
+ bool matched = false;
+
+ if (typename[0] == '\0')
+ continue;
+
+ for (size_t i = 0; i < ARRAY_SIZE(gt_types); i++) {
+ if (strcmp(typename, gt_types[i].name) == 0) {
+ typemask |= BIT(gt_types[i].type);
+ matched = true;
+ break;
+ }
+ }
+
+ if (!matched)
+ return -EINVAL;
+ }
guard(mutex)(&dev->lock);
if (is_bound(dev))
return -EBUSY;
- dev->config.enable_multi_queue = val;
+ dev->config.gt_types_allowed = typemask;
return len;
}
+/**
+ * xe_configfs_get_migrate_ulls_period_ms - get configfs migrate_ulls_period_ms setting
+ * @pdev: pci device
+ *
+ * Return: Migrate ULLS period in milliseconds (zero is disabled).
+ */
+u32 xe_configfs_get_migrate_ulls_period_ms(struct pci_dev *pdev)
+{
+ struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ u32 ret;
+
+ if (!dev)
+ return device_defaults.migrate_ulls_period_ms;
+
+ scoped_guard(mutex, &dev->lock)
+ ret = dev->config.migrate_ulls_period_ms;
+ config_group_put(&dev->group);
+
+ return ret;
+}
+
static ssize_t migrate_ulls_period_ms_show(struct config_item *item, char *page)
{
struct xe_config_device *dev = to_xe_config_device(item);
@@ -680,292 +1007,220 @@ static ssize_t migrate_ulls_period_ms_store(struct config_item *item,
return len;
}
-static ssize_t enable_vram_page_offline_show(struct config_item *item, char *page)
-{
- struct xe_config_device *dev = to_xe_config_device(item);
-
- return sprintf(page, "%s\n", str_yes_no(dev->enable_vram_page_offline));
-}
-
-static ssize_t enable_vram_page_offline_store(struct config_item *item,
- const char *page, size_t len)
-{
- struct xe_config_group_device *dev = to_xe_config_group_device(item);
- bool val;
- int ret;
-
- ret = kstrtobool(page, &val);
- if (ret)
- return ret;
-
- guard(mutex)(&dev->lock);
- if (is_bound(dev))
- return -EBUSY;
-
- dev->config.enable_vram_page_offline = val;
-
- return len;
-}
-
-static bool wa_bb_read_advance(bool dereference, char **p,
- const char *append, size_t len,
- size_t *max_size)
-{
- if (dereference) {
- if (len >= *max_size)
- return false;
- *max_size -= len;
- if (append)
- memcpy(*p, append, len);
- }
-
- *p += len;
-
- return true;
-}
-
-static ssize_t wa_bb_show(struct xe_config_group_device *dev,
- struct wa_bb wa_bb[static XE_ENGINE_CLASS_MAX],
- char *data, size_t sz)
+/**
+ * xe_configfs_get_survivability_mode - get configfs survivability mode attribute
+ * @pdev: pci device
+ *
+ * Return: survivability_mode attribute in configfs
+ */
+u8 xe_configfs_get_survivability_mode(struct pci_dev *pdev)
{
- char *p = data;
-
- guard(mutex)(&dev->lock);
-
- for (size_t i = 0; i < ARRAY_SIZE(engine_info); i++) {
- enum xe_engine_class ec = engine_info[i].engine_class;
- size_t len;
-
- if (!wa_bb[ec].len)
- continue;
-
- len = snprintf(p, sz, "%s:", engine_info[i].cls);
- if (!wa_bb_read_advance(data, &p, NULL, len, &sz))
- return -ENOBUFS;
-
- for (size_t j = 0; j < wa_bb[ec].len; j++) {
- len = snprintf(p, sz, " %08x", wa_bb[ec].cs[j]);
- if (!wa_bb_read_advance(data, &p, NULL, len, &sz))
- return -ENOBUFS;
- }
-
- if (!wa_bb_read_advance(data, &p, "\n", 1, &sz))
- return -ENOBUFS;
- }
+ struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ u8 mode;
- if (!wa_bb_read_advance(data, &p, "", 1, &sz))
- return -ENOBUFS;
+ if (!dev)
+ return device_defaults.survivability_mode;
- /* Reserve one more to match check for '\0' */
- if (!data)
- p++;
+ scoped_guard(mutex, &dev->lock)
+ mode = dev->config.survivability_mode;
+ config_group_put(&dev->group);
- return p - data;
+ return mode;
}
-static ssize_t ctx_restore_mid_bb_show(struct config_item *item, char *page)
+static ssize_t survivability_mode_show(struct config_item *item, char *page)
{
- struct xe_config_group_device *dev = to_xe_config_group_device(item);
+ struct xe_config_device *dev = to_xe_config_device(item);
- return wa_bb_show(dev, dev->config.ctx_restore_mid_bb, page, SZ_4K);
+ return sprintf(page, "%u\n", dev->survivability_mode);
}
-static ssize_t ctx_restore_post_bb_show(struct config_item *item, char *page)
+static ssize_t survivability_mode_store(struct config_item *item, const char *page, size_t len)
{
struct xe_config_group_device *dev = to_xe_config_group_device(item);
+ u8 survivability_mode;
+ int ret;
- return wa_bb_show(dev, dev->config.ctx_restore_post_bb, page, SZ_4K);
-}
+ ret = kstrtou8(page, 0, &survivability_mode);
+ if (ret)
+ return ret;
-static void wa_bb_append(struct wa_bb *wa_bb, u32 val)
-{
- if (wa_bb->cs)
- wa_bb->cs[wa_bb->len] = val;
+ if (survivability_mode & ~XE_CONFIGFS_SURVIVABILITY_MASK)
+ return -EINVAL;
- wa_bb->len++;
+ guard(mutex)(&dev->lock);
+ if (is_bound(dev))
+ return -EBUSY;
+
+ dev->config.survivability_mode = survivability_mode;
+
+ return len;
}
-static ssize_t parse_hex(const char *line, u32 *pval)
+/**
+ * xe_configfs_get_enable_multi_queue - get configfs enable_multi_queue setting
+ * @pdev: pci device
+ *
+ * Return: true if multi-queue is enabled for this device (the default),
+ * false if it has been force-disabled via configfs.
+ */
+bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev)
{
- char numstr[12];
- const char *p;
- ssize_t numlen;
+ struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ bool ret;
- p = line + strspn(line, " \t");
- if (!*p || *p == '\n')
- return 0;
+ if (!dev)
+ return true;
- numlen = strcspn(p, " \t\n");
- if (!numlen || numlen >= sizeof(numstr) - 1)
- return -EINVAL;
+ scoped_guard(mutex, &dev->lock)
+ ret = dev->config.enable_multi_queue;
+ config_group_put(&dev->group);
- memcpy(numstr, p, numlen);
- numstr[numlen] = '\0';
- p += numlen;
+ return ret;
+}
- if (kstrtou32(numstr, 16, pval))
- return -EINVAL;
+static ssize_t enable_multi_queue_show(struct config_item *item, char *page)
+{
+ struct xe_config_device *dev = to_xe_config_device(item);
- return p - line;
+ return sprintf(page, "%d\n", dev->enable_multi_queue);
}
-/*
- * Parse lines with the format
- *
- * <engine-class> cmd <u32> <u32...>
- * <engine-class> reg <u32_addr> <u32_val>
- *
- * and optionally save them in @wa_bb[i].cs is non-NULL.
- *
- * Return the number of dwords parsed.
- */
-static ssize_t parse_wa_bb_lines(const char *lines,
- struct wa_bb wa_bb[static XE_ENGINE_CLASS_MAX])
+static ssize_t enable_multi_queue_store(struct config_item *item, const char *page,
+ size_t len)
{
- ssize_t dwords = 0, ret;
- const char *p;
+ struct xe_config_group_device *dev = to_xe_config_group_device(item);
+ bool val;
+ int ret;
- /*
- * Each iteration consumes at least the engine class token if it doesn't
- * error out, so the loop always makes progress without advancing @p.
- */
- for (p = lines; *p;) {
- const struct engine_info *info = NULL;
- u32 val, val2;
+ ret = kstrtobool(page, &val);
+ if (ret)
+ return ret;
- /* Also allow empty lines */
- p += strspn(p, " \t\n");
- if (!*p)
- break;
+ guard(mutex)(&dev->lock);
+ if (is_bound(dev))
+ return -EBUSY;
- ret = parse_engine(p, " \t\n", NULL, &info);
- if (ret < 0)
- return ret;
+ dev->config.enable_multi_queue = val;
- p += ret;
- p += strspn(p, " \t");
+ return len;
+}
- if (str_has_prefix(p, "cmd")) {
- for (p += strlen("cmd"); *p;) {
- ret = parse_hex(p, &val);
- if (ret < 0)
- return -EINVAL;
- if (!ret)
- break;
+/**
+ * xe_configfs_get_psmi_enabled - get configfs enable_psmi setting
+ * @pdev: pci device
+ *
+ * Return: enable_psmi setting in configfs
+ */
+bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev)
+{
+ struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ bool ret;
- p += ret;
- dwords++;
- wa_bb_append(&wa_bb[info->engine_class], val);
- }
- } else if (str_has_prefix(p, "reg")) {
- p += strlen("reg");
- ret = parse_hex(p, &val);
- if (ret <= 0)
- return -EINVAL;
+ if (!dev)
+ return false;
- p += ret;
- ret = parse_hex(p, &val2);
- if (ret <= 0)
- return -EINVAL;
+ scoped_guard(mutex, &dev->lock)
+ ret = dev->config.enable_psmi;
+ config_group_put(&dev->group);
- p += ret;
- dwords += 3;
- wa_bb_append(&wa_bb[info->engine_class],
- MI_LOAD_REGISTER_IMM | MI_LRI_NUM_REGS(1));
- wa_bb_append(&wa_bb[info->engine_class], val);
- wa_bb_append(&wa_bb[info->engine_class], val2);
- } else {
- return -EINVAL;
- }
- }
+ return ret;
+}
- return dwords;
+static ssize_t enable_psmi_show(struct config_item *item, char *page)
+{
+ struct xe_config_device *dev = to_xe_config_device(item);
+
+ return sprintf(page, "%d\n", dev->enable_psmi);
}
-static ssize_t wa_bb_store(struct wa_bb wa_bb[static XE_ENGINE_CLASS_MAX],
- struct xe_config_group_device *dev,
- const char *page, size_t len)
+static ssize_t enable_psmi_store(struct config_item *item, const char *page, size_t len)
{
- /* tmp_wa_bb must match wa_bb's size */
- struct wa_bb tmp_wa_bb[XE_ENGINE_CLASS_MAX] = { };
- ssize_t count, class;
- u32 *tmp;
+ struct xe_config_group_device *dev = to_xe_config_group_device(item);
+ bool val;
+ int ret;
- /* 1. Count dwords - wa_bb[i].cs is NULL for all classes */
- count = parse_wa_bb_lines(page, tmp_wa_bb);
- if (count < 0)
- return count;
+ ret = kstrtobool(page, &val);
+ if (ret)
+ return ret;
guard(mutex)(&dev->lock);
-
if (is_bound(dev))
return -EBUSY;
- /*
- * 2. Allocate a u32 array and set the pointers to the right positions
- * according to the length of each class' wa_bb
- */
- tmp = krealloc(wa_bb[0].cs, count * sizeof(u32), GFP_KERNEL);
- if (!tmp)
- return -ENOMEM;
+ dev->config.enable_psmi = val;
- if (!count) {
- memset(wa_bb, 0, sizeof(tmp_wa_bb));
- return len;
- }
+ return len;
+}
- for (class = 0, count = 0; class < XE_ENGINE_CLASS_MAX; ++class) {
- tmp_wa_bb[class].cs = tmp + count;
- count += tmp_wa_bb[class].len;
- tmp_wa_bb[class].len = 0;
- }
+/**
+ * xe_configfs_get_enable_vram_page_offline - get configfs enable_vram_page_offline setting
+ * @pdev: pci device
+ *
+ * Return: enable_vram_page_offline setting in configfs
+ */
+bool xe_configfs_get_enable_vram_page_offline(struct pci_dev *pdev)
+{
+ struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ bool ret;
- /* 3. Parse wa_bb lines again, this time saving the values */
- count = parse_wa_bb_lines(page, tmp_wa_bb);
- if (count < 0)
- return count;
+ if (!dev)
+ return device_defaults.enable_vram_page_offline;
- memcpy(wa_bb, tmp_wa_bb, sizeof(tmp_wa_bb));
+ scoped_guard(mutex, &dev->lock)
+ ret = dev->config.enable_vram_page_offline;
+ config_group_put(&dev->group);
- return len;
+ return ret;
}
-static ssize_t ctx_restore_mid_bb_store(struct config_item *item,
- const char *data, size_t sz)
+static ssize_t enable_vram_page_offline_show(struct config_item *item, char *page)
{
- struct xe_config_group_device *dev = to_xe_config_group_device(item);
+ struct xe_config_device *dev = to_xe_config_device(item);
- return wa_bb_store(dev->config.ctx_restore_mid_bb, dev, data, sz);
+ return sprintf(page, "%s\n", str_yes_no(dev->enable_vram_page_offline));
}
-static ssize_t ctx_restore_post_bb_store(struct config_item *item,
- const char *data, size_t sz)
+static ssize_t enable_vram_page_offline_store(struct config_item *item,
+ const char *page, size_t len)
{
struct xe_config_group_device *dev = to_xe_config_group_device(item);
+ bool val;
+ int ret;
- return wa_bb_store(dev->config.ctx_restore_post_bb, dev, data, sz);
+ ret = kstrtobool(page, &val);
+ if (ret)
+ return ret;
+
+ guard(mutex)(&dev->lock);
+ if (is_bound(dev))
+ return -EBUSY;
+
+ dev->config.enable_vram_page_offline = val;
+
+ return len;
}
CONFIGFS_ATTR(, ctx_restore_mid_bb);
CONFIGFS_ATTR(, ctx_restore_post_bb);
-CONFIGFS_ATTR(, enable_multi_queue);
-CONFIGFS_ATTR(, migrate_ulls_period_ms);
-CONFIGFS_ATTR(, enable_psmi);
-CONFIGFS_ATTR(, enable_vram_page_offline);
CONFIGFS_ATTR(, engines_allowed);
CONFIGFS_ATTR(, gt_types_allowed);
+CONFIGFS_ATTR(, migrate_ulls_period_ms);
CONFIGFS_ATTR(, survivability_mode);
+CONFIGFS_ATTR(, enable_multi_queue);
+CONFIGFS_ATTR(, enable_psmi);
+CONFIGFS_ATTR(, enable_vram_page_offline);
static struct configfs_attribute *xe_config_device_attrs[] = {
&attr_ctx_restore_mid_bb,
&attr_ctx_restore_post_bb,
- &attr_enable_multi_queue,
- &attr_migrate_ulls_period_ms,
- &attr_enable_psmi,
- &attr_enable_vram_page_offline,
&attr_engines_allowed,
&attr_gt_types_allowed,
+ &attr_migrate_ulls_period_ms,
&attr_survivability_mode,
+ &attr_enable_multi_queue,
+ &attr_enable_psmi,
+ &attr_enable_vram_page_offline,
NULL,
};
@@ -1242,13 +1497,13 @@ static void dump_custom_dev_config(struct pci_dev *pdev,
dev->config.attr_); \
} while (0)
- PRI_CUSTOM_ATTR("%llx", gt_types_allowed);
PRI_CUSTOM_ATTR("%llx", engines_allowed);
+ PRI_CUSTOM_ATTR("%llx", gt_types_allowed);
PRI_CUSTOM_ATTR("%u", migrate_ulls_period_ms);
+ PRI_CUSTOM_ATTR("%u", survivability_mode);
PRI_CUSTOM_ATTR("%d", enable_multi_queue);
PRI_CUSTOM_ATTR("%d", enable_psmi);
PRI_CUSTOM_ATTR("%d", enable_vram_page_offline);
- PRI_CUSTOM_ATTR("%u", survivability_mode);
PRI_CUSTOM_ATTR("%u", sriov.admin_only_pf);
#undef PRI_CUSTOM_ATTR
@@ -1277,247 +1532,6 @@ void xe_configfs_check_device(struct pci_dev *pdev)
config_group_put(&dev->group);
}
-/**
- * xe_configfs_get_survivability_mode - get configfs survivability mode attribute
- * @pdev: pci device
- *
- * Return: survivability_mode attribute in configfs
- */
-u8 xe_configfs_get_survivability_mode(struct pci_dev *pdev)
-{
- struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
- u8 mode;
-
- if (!dev)
- return device_defaults.survivability_mode;
-
- scoped_guard(mutex, &dev->lock)
- mode = dev->config.survivability_mode;
- config_group_put(&dev->group);
-
- return mode;
-}
-
-static u64 get_gt_types_allowed(struct pci_dev *pdev)
-{
- struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
- u64 mask;
-
- if (!dev)
- return device_defaults.gt_types_allowed;
-
- scoped_guard(mutex, &dev->lock)
- mask = dev->config.gt_types_allowed;
- config_group_put(&dev->group);
-
- return mask;
-}
-
-/**
- * xe_configfs_primary_gt_allowed - determine whether primary GTs are supported
- * @pdev: pci device
- *
- * Return: True if primary GTs are enabled, false if they have been disabled via
- * configfs.
- */
-bool xe_configfs_primary_gt_allowed(struct pci_dev *pdev)
-{
- return get_gt_types_allowed(pdev) & BIT_ULL(XE_GT_TYPE_MAIN);
-}
-
-/**
- * xe_configfs_media_gt_allowed - determine whether media GTs are supported
- * @pdev: pci device
- *
- * Return: True if the media GTs are enabled, false if they have been disabled
- * via configfs.
- */
-bool xe_configfs_media_gt_allowed(struct pci_dev *pdev)
-{
- return get_gt_types_allowed(pdev) & BIT_ULL(XE_GT_TYPE_MEDIA);
-}
-
-/**
- * xe_configfs_get_engines_allowed - get engine allowed mask from configfs
- * @pdev: pci device
- *
- * Return: engine mask with allowed engines set in configfs
- */
-u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev)
-{
- struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
- u64 engines_allowed;
-
- if (!dev)
- return device_defaults.engines_allowed;
-
- scoped_guard(mutex, &dev->lock)
- engines_allowed = dev->config.engines_allowed;
- config_group_put(&dev->group);
-
- return engines_allowed;
-}
-
-/**
- * xe_configfs_get_psmi_enabled - get configfs enable_psmi setting
- * @pdev: pci device
- *
- * Return: enable_psmi setting in configfs
- */
-bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev)
-{
- struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
- bool ret;
-
- if (!dev)
- return false;
-
- scoped_guard(mutex, &dev->lock)
- ret = dev->config.enable_psmi;
- config_group_put(&dev->group);
-
- return ret;
-}
-
-/**
- * xe_configfs_get_enable_multi_queue - get configfs enable_multi_queue setting
- * @pdev: pci device
- *
- * Return: true if multi-queue is enabled for this device (the default),
- * false if it has been force-disabled via configfs.
- */
-bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev)
-{
- struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
- bool ret;
-
- if (!dev)
- return true;
-
- scoped_guard(mutex, &dev->lock)
- ret = dev->config.enable_multi_queue;
- config_group_put(&dev->group);
-
- return ret;
-}
-
-/**
- * xe_configfs_get_migrate_ulls_period_ms - get configfs migrate_ulls_period_ms setting
- * @pdev: pci device
- *
- * Return: Migrate ULLS period in milliseconds (zero is disabled).
- */
-u32 xe_configfs_get_migrate_ulls_period_ms(struct pci_dev *pdev)
-{
- struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
- u32 ret;
-
- if (!dev)
- return device_defaults.migrate_ulls_period_ms;
-
- ret = dev->config.migrate_ulls_period_ms;
- config_group_put(&dev->group);
-
- return ret;
-}
-
-/**
- * xe_configfs_get_enable_vram_page_offline - get configfs enable_vram_page_offline setting
- * @pdev: pci device
- *
- * Return: enable_vram_page_offline setting in configfs
- */
-bool xe_configfs_get_enable_vram_page_offline(struct pci_dev *pdev)
-{
- struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
- bool ret;
-
- if (!dev)
- return device_defaults.enable_vram_page_offline;
-
- scoped_guard(mutex, &dev->lock)
- ret = dev->config.enable_vram_page_offline;
- config_group_put(&dev->group);
-
- return ret;
-}
-
-/**
- * xe_configfs_get_ctx_restore_mid_bb - get configfs ctx_restore_mid_bb setting
- * @pdev: pci device
- * @class: hw engine class
- * @cs: destination buffer for the batch, or NULL to only query the length
- * @max_len: capacity of @cs, in dwords
- *
- * Copy the configured batch into @cs while holding the configfs lock, so the
- * caller never gets a pointer to storage owned by the configfs group.
- *
- * Return: Number of dwords used in the mid_ctx_restore setting in configfs, or
- * -ENOSPC if it does not fit in @max_len
- */
-ssize_t xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
- enum xe_engine_class class,
- u32 *cs, size_t max_len)
-{
- struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
- ssize_t len;
-
- if (!dev)
- return 0;
-
- scoped_guard(mutex, &dev->lock) {
- len = dev->config.ctx_restore_mid_bb[class].len;
- if (cs && len) {
- if (len > max_len)
- len = -ENOSPC;
- else
- memcpy(cs, dev->config.ctx_restore_mid_bb[class].cs,
- len * sizeof(u32));
- }
- }
- config_group_put(&dev->group);
-
- return len;
-}
-
-/**
- * xe_configfs_get_ctx_restore_post_bb - get configfs ctx_restore_post_bb setting
- * @pdev: pci device
- * @class: hw engine class
- * @cs: destination buffer for the batch, or NULL to only query the length
- * @max_len: capacity of @cs, in dwords
- *
- * Copy the configured batch into @cs while holding the configfs lock, so the
- * caller never gets a pointer to storage owned by the configfs group.
- *
- * Return: Number of dwords used in the post_ctx_restore setting in configfs, or
- * -ENOSPC if it does not fit in @max_len
- */
-ssize_t xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
- enum xe_engine_class class,
- u32 *cs, size_t max_len)
-{
- struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
- ssize_t len;
-
- if (!dev)
- return 0;
-
- scoped_guard(mutex, &dev->lock) {
- len = dev->config.ctx_restore_post_bb[class].len;
- if (cs && len) {
- if (len > max_len)
- len = -ENOSPC;
- else
- memcpy(cs, dev->config.ctx_restore_post_bb[class].cs,
- len * sizeof(u32));
- }
- }
- config_group_put(&dev->group);
-
- return len;
-}
-
#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 a9442ab56a2e..78aa320e60df 100644
--- a/drivers/gpu/drm/xe/xe_configfs.h
+++ b/drivers/gpu/drm/xe/xe_configfs.h
@@ -29,20 +29,20 @@ struct pci_dev;
int xe_configfs_init(void);
void xe_configfs_exit(void);
void xe_configfs_check_device(struct pci_dev *pdev);
-u8 xe_configfs_get_survivability_mode(struct pci_dev *pdev);
-bool xe_configfs_primary_gt_allowed(struct pci_dev *pdev);
-bool xe_configfs_media_gt_allowed(struct pci_dev *pdev);
-u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev);
-bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev);
-bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev);
-u32 xe_configfs_get_migrate_ulls_period_ms(struct pci_dev *pdev);
-bool xe_configfs_get_enable_vram_page_offline(struct pci_dev *pdev);
ssize_t xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
enum xe_engine_class class,
u32 *cs, size_t max_len);
ssize_t xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
enum xe_engine_class class,
u32 *cs, size_t max_len);
+u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev);
+bool xe_configfs_primary_gt_allowed(struct pci_dev *pdev);
+bool xe_configfs_media_gt_allowed(struct pci_dev *pdev);
+u32 xe_configfs_get_migrate_ulls_period_ms(struct pci_dev *pdev);
+u8 xe_configfs_get_survivability_mode(struct pci_dev *pdev);
+bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev);
+bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev);
+bool xe_configfs_get_enable_vram_page_offline(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);
--
2.43.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 7/8] drm/xe: Split out configfs data structures
2026-11-12 21:35 [PATCH 0/8] Set up for debug configfs group Stuart Summers
` (5 preceding siblings ...)
2026-11-12 21:35 ` [PATCH 6/8] drm/xe: Sort xe_config_device fields Stuart Summers
@ 2026-11-12 21:35 ` Stuart Summers
2026-11-12 21:35 ` [PATCH 8/8] drm/xe: Add a new debug focused configfs group Stuart Summers
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Stuart Summers @ 2026-11-12 21:35 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.d.roper, gustavo.sousa,
Stuart Summers
Planning on moving debug specific configfs parameters
to their own file in a future patch. In preparation for
that change, move the structures in xe_configfs.c to a
new _types.h file so we can easily access them in the
different configfs files.
Doing that separately here instead of combining with
the patch that adds the debug file for ease of review.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
---
drivers/gpu/drm/xe/xe_configfs.c | 43 --------------------
drivers/gpu/drm/xe/xe_configfs.h | 1 +
drivers/gpu/drm/xe/xe_configfs_types.h | 55 ++++++++++++++++++++++++++
3 files changed, 56 insertions(+), 43 deletions(-)
create mode 100644 drivers/gpu/drm/xe/xe_configfs_types.h
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 68d1db7bd1af..e810cd2a00be 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -4,7 +4,6 @@
*/
#include <linux/bitops.h>
-#include <linux/ctype.h>
#include <linux/configfs.h>
#include <linux/cleanup.h>
#include <linux/find.h>
@@ -17,10 +16,7 @@
#include "xe_configfs.h"
#include "xe_defaults.h"
#include "xe_gt_types.h"
-#include "xe_hw_engine_types.h"
#include "xe_module.h"
-#include "xe_pci_types.h"
-#include "xe_sriov_types.h"
/**
* DOC: Xe Configfs
@@ -290,45 +286,6 @@
* # rmdir /sys/kernel/config/xe/0000:03:00.0/
*/
-/* Similar to struct xe_bb, but not tied to HW (yet) */
-struct wa_bb {
- u32 *cs;
- u32 len; /* in dwords */
-};
-
-struct xe_config_group_device {
- struct config_group group;
- struct config_group sriov;
-
- /*
- * Fields sorted by type (largest first) then name: struct arrays,
- * u64, u32/unsigned int, u8, bool, sub-structs last. Within each
- * type, entries are sorted alphabetically.
- */
- struct xe_config_device {
- struct wa_bb ctx_restore_mid_bb[XE_ENGINE_CLASS_MAX];
- struct wa_bb ctx_restore_post_bb[XE_ENGINE_CLASS_MAX];
- u64 engines_allowed;
- u64 gt_types_allowed;
- u32 migrate_ulls_period_ms;
- u8 survivability_mode;
- bool enable_multi_queue;
- bool enable_psmi;
- bool enable_vram_page_offline;
- struct {
- unsigned int max_vfs;
- bool admin_only_pf;
- } sriov;
- } config;
-
- /* protects attributes */
- struct mutex lock;
- /* matching descriptor */
- const struct xe_device_desc *desc;
- /* tentative SR-IOV mode */
- enum xe_sriov_mode mode;
-};
-
static const struct xe_config_device device_defaults = {
.engines_allowed = U64_MAX,
.gt_types_allowed = U64_MAX,
diff --git a/drivers/gpu/drm/xe/xe_configfs.h b/drivers/gpu/drm/xe/xe_configfs.h
index 78aa320e60df..97ee615e3eb6 100644
--- a/drivers/gpu/drm/xe/xe_configfs.h
+++ b/drivers/gpu/drm/xe/xe_configfs.h
@@ -9,6 +9,7 @@
#include <linux/limits.h>
#include <linux/types.h>
+#include "xe_configfs_types.h"
#include "xe_defaults.h"
#include "xe_hw_engine_types.h"
#include "xe_module.h"
diff --git a/drivers/gpu/drm/xe/xe_configfs_types.h b/drivers/gpu/drm/xe/xe_configfs_types.h
new file mode 100644
index 000000000000..b1e351761d69
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_configfs_types.h
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+#ifndef _XE_CONFIGFS_TYPES_H_
+#define _XE_CONFIGFS_TYPES_H_
+
+#include <linux/configfs.h>
+#include <linux/mutex.h>
+#include <linux/types.h>
+
+#include "xe_hw_engine_types.h"
+#include "xe_pci_types.h"
+#include "xe_sriov_types.h"
+
+/* Similar to struct xe_bb, but not tied to HW (yet) */
+struct wa_bb {
+ u32 *cs;
+ u32 len; /* in dwords */
+};
+
+struct xe_config_group_device {
+ struct config_group group;
+ struct config_group sriov;
+
+ /*
+ * Fields sorted by type (largest first) then name: struct arrays,
+ * u64, u32/unsigned int, u8, bool, sub-structs last. Within each
+ * type, entries are sorted alphabetically.
+ */
+ struct xe_config_device {
+ struct wa_bb ctx_restore_mid_bb[XE_ENGINE_CLASS_MAX];
+ struct wa_bb ctx_restore_post_bb[XE_ENGINE_CLASS_MAX];
+ u64 engines_allowed;
+ u64 gt_types_allowed;
+ u32 migrate_ulls_period_ms;
+ u8 survivability_mode;
+ bool enable_multi_queue;
+ bool enable_psmi;
+ bool enable_vram_page_offline;
+ struct {
+ unsigned int max_vfs;
+ bool admin_only_pf;
+ } sriov;
+ } config;
+
+ /* protects attributes */
+ struct mutex lock;
+ /* matching descriptor */
+ const struct xe_device_desc *desc;
+ /* tentative SR-IOV mode */
+ enum xe_sriov_mode mode;
+};
+
+#endif /* _XE_CONFIGFS_TYPES_H_ */
--
2.43.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 8/8] drm/xe: Add a new debug focused configfs group
2026-11-12 21:35 [PATCH 0/8] Set up for debug configfs group Stuart Summers
` (6 preceding siblings ...)
2026-11-12 21:35 ` [PATCH 7/8] drm/xe: Split out configfs data structures Stuart Summers
@ 2026-11-12 21:35 ` Stuart Summers
2026-11-12 21:42 ` ✗ CI.checkpatch: warning for Set up for debug " Patchwork
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Stuart Summers @ 2026-11-12 21:35 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.d.roper, gustavo.sousa,
Stuart Summers
Add the skeleton code for a new debug specific configfs group.
Just add the structure for now. Actual debug content will be
added in a subsequent patch.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/xe/Makefile | 3 +++
drivers/gpu/drm/xe/xe_configfs.c | 5 +++++
drivers/gpu/drm/xe/xe_configfs_debug.c | 14 ++++++++++++++
drivers/gpu/drm/xe/xe_configfs_debug.h | 13 +++++++++++++
drivers/gpu/drm/xe/xe_configfs_types.h | 3 +++
5 files changed, 38 insertions(+)
create mode 100644 drivers/gpu/drm/xe/xe_configfs_debug.c
create mode 100644 drivers/gpu/drm/xe/xe_configfs_debug.h
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 0392ba58dd65..57e74a8039d0 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -168,6 +168,9 @@ xe-$(CONFIG_HWMON) += xe_hwmon.o
xe-$(CONFIG_PERF_EVENTS) += xe_pmu.o
xe-$(CONFIG_CONFIGFS_FS) += xe_configfs.o
+ifeq ($(CONFIG_CONFIGFS_FS),y)
+xe-$(CONFIG_DRM_XE_DEBUG) += xe_configfs_debug.o
+endif
xe-$(CONFIG_UEFI_CPER) += xe_cper.o \
xe_trace_cper.o
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index e810cd2a00be..8547fc53fc2f 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -14,6 +14,7 @@
#include "instructions/xe_mi_commands.h"
#include "xe_configfs.h"
+#include "xe_configfs_debug.h"
#include "xe_defaults.h"
#include "xe_gt_types.h"
#include "xe_module.h"
@@ -1407,6 +1408,10 @@ static struct config_group *xe_config_make_device_group(struct config_group *gro
config_group_init_type_name(&dev->sriov, "sriov", &xe_config_sriov_type);
configfs_add_default_group(&dev->sriov, &dev->group);
}
+#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
+ config_group_init_type_name(&dev->debug, "debug", &xe_configfs_debug_type);
+ configfs_add_default_group(&dev->debug, &dev->group);
+#endif
mutex_init(&dev->lock);
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug.c b/drivers/gpu/drm/xe/xe_configfs_debug.c
new file mode 100644
index 000000000000..45617282cec5
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_configfs_debug.c
@@ -0,0 +1,14 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#include <linux/configfs.h>
+#include <linux/module.h>
+
+#include "xe_configfs_debug.h"
+#include "xe_configfs_types.h"
+
+const struct config_item_type xe_configfs_debug_type = {
+ .ct_owner = THIS_MODULE,
+};
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug.h b/drivers/gpu/drm/xe/xe_configfs_debug.h
new file mode 100644
index 000000000000..5f938450aed2
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_configfs_debug.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+#ifndef _XE_CONFIGFS_DEBUG_H_
+#define _XE_CONFIGFS_DEBUG_H_
+
+#if IS_ENABLED(CONFIG_DRM_XE_DEBUG) && IS_ENABLED(CONFIG_CONFIGFS_FS)
+struct config_item_type;
+extern const struct config_item_type xe_configfs_debug_type;
+#endif
+
+#endif /* _XE_CONFIGFS_DEBUG_H_ */
diff --git a/drivers/gpu/drm/xe/xe_configfs_types.h b/drivers/gpu/drm/xe/xe_configfs_types.h
index b1e351761d69..3a9ab40d519b 100644
--- a/drivers/gpu/drm/xe/xe_configfs_types.h
+++ b/drivers/gpu/drm/xe/xe_configfs_types.h
@@ -22,6 +22,9 @@ struct wa_bb {
struct xe_config_group_device {
struct config_group group;
struct config_group sriov;
+#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
+ struct config_group debug;
+#endif
/*
* Fields sorted by type (largest first) then name: struct arrays,
--
2.43.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* ✗ CI.checkpatch: warning for Set up for debug configfs group
2026-11-12 21:35 [PATCH 0/8] Set up for debug configfs group Stuart Summers
` (7 preceding siblings ...)
2026-11-12 21:35 ` [PATCH 8/8] drm/xe: Add a new debug focused configfs group Stuart Summers
@ 2026-11-12 21:42 ` Patchwork
2026-11-12 21:44 ` ✓ CI.KUnit: success " Patchwork
2026-11-12 22:15 ` ✓ Xe.CI.BAT: " Patchwork
10 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2026-11-12 21:42 UTC (permalink / raw)
To: Stuart Summers; +Cc: intel-xe
== Series Details ==
Series: Set up for debug configfs group
URL : https://patchwork.freedesktop.org/series/178440/
State : warning
== Summary ==
+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
3009867cd31863246e4afc138520a7a8bd37bb11
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 5c1d4e0c3c180126d73edf78e99987c0a899cdfb
Author: Stuart Summers <stuart.summers@intel.com>
Date: Thu Nov 12 21:35:13 2026 +0000
drm/xe: Add a new debug focused configfs group
Add the skeleton code for a new debug specific configfs group.
Just add the structure for now. Actual debug content will be
added in a subsequent patch.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
+ /mt/dim checkpatch 4b7f549c713601ea1dabb0b949ab3b3d883e49ca drm-intel
6c370e434ebe drm/xe: Guard configfs attribute reads in getters
24cbe908295b drm/xe/configfs: Fix out-of-bounds read in parse_wa_bb_lines()
2d7669aebfa8 drm/xe/configfs: Copy wa_bb out under the configfs lock
398b04b3018b drm/xe: Invert vram_page_offline configfs attribute
35d0ff32c824 drm/xe: Make survivability_mode configfs attribute a bitmap
4206594c36f2 drm/xe: Sort xe_config_device fields
011fc1fa8f6b drm/xe: Split out configfs data structures
-:100: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#100:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 124 lines checked
5c1d4e0c3c18 drm/xe: Add a new debug focused configfs group
-:51: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#51:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 62 lines checked
^ permalink raw reply [flat|nested] 12+ messages in thread
* ✓ CI.KUnit: success for Set up for debug configfs group
2026-11-12 21:35 [PATCH 0/8] Set up for debug configfs group Stuart Summers
` (8 preceding siblings ...)
2026-11-12 21:42 ` ✗ CI.checkpatch: warning for Set up for debug " Patchwork
@ 2026-11-12 21:44 ` Patchwork
2026-11-12 22:15 ` ✓ Xe.CI.BAT: " Patchwork
10 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2026-11-12 21:44 UTC (permalink / raw)
To: Stuart Summers; +Cc: intel-xe
== Series Details ==
Series: Set up for debug configfs group
URL : https://patchwork.freedesktop.org/series/178440/
State : success
== Summary ==
+ trap cleanup EXIT
+ kunitconfigs=('/kernel/drivers/gpu/tests/.kunitconfig' '/kernel/drivers/gpu/drm/xe/.kunitconfig' '/kernel/drivers/gpu/drm/tests/.kunitconfig' '/kernel/drivers/gpu/drm/ttm/tests/.kunitconfig' '/kernel/drivers/dma-buf/.kunitconfig')
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/tests/.kunitconfig
[21:42:25] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[21:42:30] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[21:42:50] Starting KUnit Kernel (1/1)...
[21:42:50] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[21:42:50] ================= gpu_buddy (15 subtests) ==================
[21:42:50] [PASSED] gpu_test_buddy_alloc_limit
[21:42:50] [PASSED] gpu_test_buddy_alloc_optimistic
[21:42:50] [PASSED] gpu_test_buddy_alloc_pessimistic
[21:42:50] [PASSED] gpu_test_buddy_alloc_pathological
[21:42:50] [PASSED] gpu_test_buddy_alloc_contiguous
[21:42:50] [PASSED] gpu_test_buddy_alloc_clear
[21:42:50] [PASSED] gpu_test_buddy_alloc_range
[21:42:50] [PASSED] gpu_test_buddy_alloc_range_bias
[21:42:50] [PASSED] gpu_test_buddy_alloc_range_clear_guard
[21:42:51] [PASSED] gpu_test_buddy_fragmentation_performance
[21:42:52] [PASSED] gpu_test_buddy_dirty_tracker_performance
[21:42:52] [PASSED] gpu_test_buddy_alloc_exceeds_max_order
[21:42:52] [PASSED] gpu_test_buddy_offset_aligned_allocation
[21:42:52] [PASSED] gpu_test_buddy_subtree_offset_alignment_stress
[21:42:52] [PASSED] gpu_test_buddy_addr_to_block
[21:42:52] ==================== [PASSED] gpu_buddy ====================
[21:42:52] ============================================================
[21:42:52] Testing complete. Ran 15 tests: passed: 15
[21:42:52] Elapsed time: 27.302s total, 5.122s configuring, 20.262s building, 1.869s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/xe/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[21:42:52] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[21:42:55] 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
[21:43:32] Starting KUnit Kernel (1/1)...
[21:43:32] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[21:43:32] ================== guc_buf (11 subtests) ===================
[21:43:32] [PASSED] test_smallest
[21:43:32] [PASSED] test_largest
[21:43:32] [PASSED] test_granular
[21:43:32] [PASSED] test_unique
[21:43:32] [PASSED] test_overlap
[21:43:32] [PASSED] test_reusable
[21:43:32] [PASSED] test_too_big
[21:43:32] [PASSED] test_flush
[21:43:32] [PASSED] test_lookup
[21:43:32] [PASSED] test_data
[21:43:32] [PASSED] test_class
[21:43:32] ===================== [PASSED] guc_buf =====================
[21:43:32] =================== guc_dbm (7 subtests) ===================
[21:43:32] [PASSED] test_empty
[21:43:32] [PASSED] test_default
[21:43:32] ======================== test_size ========================
[21:43:32] [PASSED] 4
[21:43:32] [PASSED] 8
[21:43:32] [PASSED] 32
[21:43:32] [PASSED] 256
[21:43:32] ==================== [PASSED] test_size ====================
[21:43:32] ======================= test_reuse ========================
[21:43:32] [PASSED] 4
[21:43:32] [PASSED] 8
[21:43:32] [PASSED] 32
[21:43:32] [PASSED] 256
[21:43:32] =================== [PASSED] test_reuse ====================
[21:43:32] =================== test_range_overlap ====================
[21:43:32] [PASSED] 4
[21:43:32] [PASSED] 8
[21:43:32] [PASSED] 32
[21:43:32] [PASSED] 256
[21:43:32] =============== [PASSED] test_range_overlap ================
[21:43:32] =================== test_range_compact ====================
[21:43:32] [PASSED] 4
[21:43:32] [PASSED] 8
[21:43:32] [PASSED] 32
[21:43:32] [PASSED] 256
[21:43:32] =============== [PASSED] test_range_compact ================
[21:43:32] ==================== test_range_spare =====================
[21:43:32] [PASSED] 4
[21:43:32] [PASSED] 8
[21:43:32] [PASSED] 32
[21:43:32] [PASSED] 256
[21:43:32] ================ [PASSED] test_range_spare =================
[21:43:32] ===================== [PASSED] guc_dbm =====================
[21:43:32] ================== guc_idm (22 subtests) ===================
[21:43:32] [PASSED] bad_init
[21:43:32] [PASSED] no_init
[21:43:32] [PASSED] init_fini
[21:43:32] [PASSED] check_init_small
[21:43:32] [PASSED] check_init_shared
[21:43:32] [PASSED] check_used
[21:43:33] [PASSED] check_quota
[21:43:33] [PASSED] check_all
[21:43:33] [PASSED] check_limits
[21:43:33] [PASSED] check_overlap
[21:43:33] [PASSED] check_overlap_alloc
[21:43:33] [PASSED] check_overlap_release
[21:43:33] [PASSED] check_overlap_partial_init
[21:43:33] [PASSED] check_overlap_partial_shared_range_blocking
[21:43:33] [PASSED] check_used_usable
[21:43:33] [PASSED] check_used_shareable
[21:43:33] [PASSED] check_used_mixed
[21:43:33] [PASSED] check_release_usable_range
[21:43:33] [PASSED] check_release_shareable_range
[21:43:33] [PASSED] check_split_boundaries
[21:43:33] [PASSED] check_shareable_spare
[21:43:33] [PASSED] check_shareable_spare_fragmented_tail
[21:43:33] ===================== [PASSED] guc_idm =====================
[21:43:33] ============== guc_klv_helpers (13 subtests) ===============
[21:43:33] [PASSED] test_count
[21:43:33] [PASSED] test_encode_u32
[21:43:33] [PASSED] test_encode_u64
[21:43:33] [PASSED] test_encode_string
[21:43:33] [PASSED] test_encode_object_raw
[21:43:33] [PASSED] test_encode_object_klv
[21:43:33] [PASSED] test_encode_object_nested
[21:43:33] [PASSED] test_encode_object_basic
[21:43:33] ===================== test_decode_u16 =====================
[21:43:33] [PASSED] empty
[21:43:33] [PASSED] valid
[21:43:33] [PASSED] max
[21:43:33] [PASSED] big
[21:43:33] [PASSED] long
[21:43:33] ================= [PASSED] test_decode_u16 =================
[21:43:33] ===================== test_decode_u32 =====================
[21:43:33] [PASSED] empty
[21:43:33] [PASSED] valid
[21:43:33] [PASSED] max
[21:43:33] [PASSED] long
[21:43:33] ================= [PASSED] test_decode_u32 =================
[21:43:33] ===================== test_decode_u64 =====================
[21:43:33] [PASSED] empty
[21:43:33] [PASSED] short
[21:43:33] [PASSED] valid
[21:43:33] [PASSED] max
[21:43:33] [PASSED] long
[21:43:33] ================= [PASSED] test_decode_u64 =================
[21:43:33] ===================== test_decode_str =====================
[21:43:33] [PASSED] empty
[21:43:33] [PASSED] one
[21:43:33] [PASSED] one_trash
[21:43:33] [PASSED] two
[21:43:33] [PASSED] two_trash
[21:43:33] [PASSED] three
[21:43:33] [PASSED] dword
[21:43:33] [PASSED] four
[21:43:33] [PASSED] five
[21:43:33] [PASSED] six
[21:43:33] [PASSED] seven
[21:43:33] [PASSED] qword
[21:43:33] ================= [PASSED] test_decode_str =================
[21:43:33] [PASSED] test_print
[21:43:33] ================= [PASSED] guc_klv_helpers =================
[21:43:33] =================== xe_log (4 subtests) ====================
[21:43:33] [PASSED] demo_cper
[21:43:33] [PASSED] demo_dmesg
[21:43:33] ======================= test_dmesg ========================
[21:43:33] [PASSED] test_fatal
[21:43:33] [PASSED] test_fatal_tile
[21:43:33] [PASSED] test_fatal_gt
[21:43:33] [PASSED] test_fatal_comp
[21:43:33] [PASSED] test_fatal_comp_tile
[21:43:33] [PASSED] test_fatal_comp_gt
[21:43:33] [PASSED] test_fatal_all
[21:43:33] [PASSED] test_recoverable
[21:43:33] [PASSED] test_recoverable_tile
[21:43:33] [PASSED] test_recoverable_gt
[21:43:33] [PASSED] test_recoverable_comp
[21:43:33] [PASSED] test_recoverable_comp_tile
[21:43:33] [PASSED] test_recoverable_comp_gt
[21:43:33] [PASSED] test_recoverable_all
[21:43:33] [PASSED] test_info
[21:43:33] [PASSED] test_info_tile
[21:43:33] [PASSED] test_info_gt
[21:43:33] [PASSED] test_info_err
[21:43:33] [PASSED] test_info_comp
[21:43:33] [PASSED] test_info_comp_tile
[21:43:33] [PASSED] test_info_comp_gt
[21:43:33] [PASSED] test_info_all
[21:43:33] [PASSED] test_hw_fatal
[21:43:33] [PASSED] test_hw_recoverable
[21:43:33] [PASSED] test_hw_corrected
[21:43:33] [PASSED] test_hw_informational
[21:43:33] =================== [PASSED] test_dmesg ====================
[21:43:33] ====================== test_invalid =======================
[21:43:33] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[21:43:33] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[21:43:33] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[21:43:33] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[21:43:33] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[21:43:33] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[21:43:33] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[21:43:33] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[21:43:33] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[21:43:33] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[21:43:33] ================== [SKIPPED] test_invalid ==================
[21:43:33] ===================== [PASSED] xe_log ======================
[21:43:33] ================== no_relay (3 subtests) ===================
[21:43:33] [PASSED] xe_drops_guc2pf_if_not_ready
[21:43:33] [PASSED] xe_drops_guc2vf_if_not_ready
[21:43:33] [PASSED] xe_rejects_send_if_not_ready
[21:43:33] ==================== [PASSED] no_relay =====================
[21:43:33] ================== pf_relay (14 subtests) ==================
[21:43:33] [PASSED] pf_rejects_guc2pf_too_short
[21:43:33] [PASSED] pf_rejects_guc2pf_too_long
[21:43:33] [PASSED] pf_rejects_guc2pf_no_payload
[21:43:33] [PASSED] pf_fails_no_payload
[21:43:33] [PASSED] pf_fails_bad_origin
[21:43:33] [PASSED] pf_fails_bad_type
[21:43:33] [PASSED] pf_txn_reports_error
[21:43:33] [PASSED] pf_txn_sends_pf2guc
[21:43:33] [PASSED] pf_sends_pf2guc
[21:43:33] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[21:43:33] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[21:43:33] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[21:43:33] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[21:43:33] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[21:43:33] ==================== [PASSED] pf_relay =====================
[21:43:33] ================== vf_relay (3 subtests) ===================
[21:43:33] [PASSED] vf_rejects_guc2vf_too_short
[21:43:33] [PASSED] vf_rejects_guc2vf_too_long
[21:43:33] [PASSED] vf_rejects_guc2vf_no_payload
[21:43:33] ==================== [PASSED] vf_relay =====================
[21:43:33] ================ pf_gt_config (9 subtests) =================
[21:43:33] [PASSED] fair_contexts_1vf
[21:43:33] [PASSED] fair_doorbells_1vf
[21:43:33] [PASSED] fair_ggtt_1vf
[21:43:33] ====================== fair_vram_1vf ======================
[21:43:33] [PASSED] 3.50 GiB
[21:43:33] [PASSED] 11.5 GiB
[21:43:33] [PASSED] 15.5 GiB
[21:43:33] [PASSED] 31.5 GiB
[21:43:33] [PASSED] 63.5 GiB
[21:43:33] [PASSED] 1.91 GiB
[21:43:33] ================== [PASSED] fair_vram_1vf ==================
[21:43:33] ================ fair_vram_1vf_admin_only =================
[21:43:33] [PASSED] 3.50 GiB
[21:43:33] [PASSED] 11.5 GiB
[21:43:33] [PASSED] 15.5 GiB
[21:43:33] [PASSED] 31.5 GiB
[21:43:33] [PASSED] 63.5 GiB
[21:43:33] [PASSED] 1.91 GiB
[21:43:33] ============ [PASSED] fair_vram_1vf_admin_only =============
[21:43:33] ====================== fair_contexts ======================
[21:43:33] [PASSED] 1 VF
[21:43:33] [PASSED] 2 VFs
[21:43:33] [PASSED] 3 VFs
[21:43:33] [PASSED] 4 VFs
[21:43:33] [PASSED] 5 VFs
[21:43:33] [PASSED] 6 VFs
[21:43:33] [PASSED] 7 VFs
[21:43:33] [PASSED] 8 VFs
[21:43:33] [PASSED] 9 VFs
[21:43:33] [PASSED] 10 VFs
[21:43:33] [PASSED] 11 VFs
[21:43:33] [PASSED] 12 VFs
[21:43:33] [PASSED] 13 VFs
[21:43:33] [PASSED] 14 VFs
[21:43:33] [PASSED] 15 VFs
[21:43:33] [PASSED] 16 VFs
[21:43:33] [PASSED] 17 VFs
[21:43:33] [PASSED] 18 VFs
[21:43:33] [PASSED] 19 VFs
[21:43:33] [PASSED] 20 VFs
[21:43:33] [PASSED] 21 VFs
[21:43:33] [PASSED] 22 VFs
[21:43:33] [PASSED] 23 VFs
[21:43:33] [PASSED] 24 VFs
[21:43:33] [PASSED] 25 VFs
[21:43:33] [PASSED] 26 VFs
[21:43:33] [PASSED] 27 VFs
[21:43:33] [PASSED] 28 VFs
[21:43:33] [PASSED] 29 VFs
[21:43:33] [PASSED] 30 VFs
[21:43:33] [PASSED] 31 VFs
[21:43:33] [PASSED] 32 VFs
[21:43:33] [PASSED] 33 VFs
[21:43:33] [PASSED] 34 VFs
[21:43:33] [PASSED] 35 VFs
[21:43:33] [PASSED] 36 VFs
[21:43:33] [PASSED] 37 VFs
[21:43:33] [PASSED] 38 VFs
[21:43:33] [PASSED] 39 VFs
[21:43:33] [PASSED] 40 VFs
[21:43:33] [PASSED] 41 VFs
[21:43:33] [PASSED] 42 VFs
[21:43:33] [PASSED] 43 VFs
[21:43:33] [PASSED] 44 VFs
[21:43:33] [PASSED] 45 VFs
[21:43:33] [PASSED] 46 VFs
[21:43:33] [PASSED] 47 VFs
[21:43:33] [PASSED] 48 VFs
[21:43:33] [PASSED] 49 VFs
[21:43:33] [PASSED] 50 VFs
[21:43:33] [PASSED] 51 VFs
[21:43:33] [PASSED] 52 VFs
[21:43:33] [PASSED] 53 VFs
[21:43:33] [PASSED] 54 VFs
[21:43:33] [PASSED] 55 VFs
[21:43:33] [PASSED] 56 VFs
[21:43:33] [PASSED] 57 VFs
[21:43:33] [PASSED] 58 VFs
[21:43:33] [PASSED] 59 VFs
[21:43:33] [PASSED] 60 VFs
[21:43:33] [PASSED] 61 VFs
[21:43:33] [PASSED] 62 VFs
[21:43:33] [PASSED] 63 VFs
[21:43:33] ================== [PASSED] fair_contexts ==================
[21:43:33] ===================== fair_doorbells ======================
[21:43:33] [PASSED] 1 VF
[21:43:33] [PASSED] 2 VFs
[21:43:33] [PASSED] 3 VFs
[21:43:33] [PASSED] 4 VFs
[21:43:33] [PASSED] 5 VFs
[21:43:33] [PASSED] 6 VFs
[21:43:33] [PASSED] 7 VFs
[21:43:33] [PASSED] 8 VFs
[21:43:33] [PASSED] 9 VFs
[21:43:33] [PASSED] 10 VFs
[21:43:33] [PASSED] 11 VFs
[21:43:33] [PASSED] 12 VFs
[21:43:33] [PASSED] 13 VFs
[21:43:33] [PASSED] 14 VFs
[21:43:33] [PASSED] 15 VFs
[21:43:33] [PASSED] 16 VFs
[21:43:33] [PASSED] 17 VFs
[21:43:33] [PASSED] 18 VFs
[21:43:33] [PASSED] 19 VFs
[21:43:33] [PASSED] 20 VFs
[21:43:33] [PASSED] 21 VFs
[21:43:33] [PASSED] 22 VFs
[21:43:33] [PASSED] 23 VFs
[21:43:33] [PASSED] 24 VFs
[21:43:33] [PASSED] 25 VFs
[21:43:33] [PASSED] 26 VFs
[21:43:33] [PASSED] 27 VFs
[21:43:33] [PASSED] 28 VFs
[21:43:33] [PASSED] 29 VFs
[21:43:33] [PASSED] 30 VFs
[21:43:33] [PASSED] 31 VFs
[21:43:33] [PASSED] 32 VFs
[21:43:33] [PASSED] 33 VFs
[21:43:33] [PASSED] 34 VFs
[21:43:33] [PASSED] 35 VFs
[21:43:33] [PASSED] 36 VFs
[21:43:33] [PASSED] 37 VFs
[21:43:33] [PASSED] 38 VFs
[21:43:33] [PASSED] 39 VFs
[21:43:33] [PASSED] 40 VFs
[21:43:33] [PASSED] 41 VFs
[21:43:33] [PASSED] 42 VFs
[21:43:33] [PASSED] 43 VFs
[21:43:33] [PASSED] 44 VFs
[21:43:33] [PASSED] 45 VFs
[21:43:33] [PASSED] 46 VFs
[21:43:33] [PASSED] 47 VFs
[21:43:33] [PASSED] 48 VFs
[21:43:33] [PASSED] 49 VFs
[21:43:33] [PASSED] 50 VFs
[21:43:33] [PASSED] 51 VFs
[21:43:33] [PASSED] 52 VFs
[21:43:33] [PASSED] 53 VFs
[21:43:33] [PASSED] 54 VFs
[21:43:33] [PASSED] 55 VFs
[21:43:33] [PASSED] 56 VFs
[21:43:33] [PASSED] 57 VFs
[21:43:33] [PASSED] 58 VFs
[21:43:33] [PASSED] 59 VFs
[21:43:33] [PASSED] 60 VFs
[21:43:33] [PASSED] 61 VFs
[21:43:33] [PASSED] 62 VFs
[21:43:33] [PASSED] 63 VFs
[21:43:33] ================= [PASSED] fair_doorbells ==================
[21:43:33] ======================== fair_ggtt ========================
[21:43:33] [PASSED] 1 VF
[21:43:33] [PASSED] 2 VFs
[21:43:33] [PASSED] 3 VFs
[21:43:33] [PASSED] 4 VFs
[21:43:33] [PASSED] 5 VFs
[21:43:33] [PASSED] 6 VFs
[21:43:33] [PASSED] 7 VFs
[21:43:33] [PASSED] 8 VFs
[21:43:33] [PASSED] 9 VFs
[21:43:33] [PASSED] 10 VFs
[21:43:33] [PASSED] 11 VFs
[21:43:33] [PASSED] 12 VFs
[21:43:33] [PASSED] 13 VFs
[21:43:33] [PASSED] 14 VFs
[21:43:33] [PASSED] 15 VFs
[21:43:33] [PASSED] 16 VFs
[21:43:33] [PASSED] 17 VFs
[21:43:33] [PASSED] 18 VFs
[21:43:33] [PASSED] 19 VFs
[21:43:33] [PASSED] 20 VFs
[21:43:33] [PASSED] 21 VFs
[21:43:33] [PASSED] 22 VFs
[21:43:33] [PASSED] 23 VFs
[21:43:33] [PASSED] 24 VFs
[21:43:33] [PASSED] 25 VFs
[21:43:33] [PASSED] 26 VFs
[21:43:33] [PASSED] 27 VFs
[21:43:33] [PASSED] 28 VFs
[21:43:33] [PASSED] 29 VFs
[21:43:33] [PASSED] 30 VFs
[21:43:33] [PASSED] 31 VFs
[21:43:33] [PASSED] 32 VFs
[21:43:33] [PASSED] 33 VFs
[21:43:33] [PASSED] 34 VFs
[21:43:33] [PASSED] 35 VFs
[21:43:33] [PASSED] 36 VFs
[21:43:33] [PASSED] 37 VFs
[21:43:33] [PASSED] 38 VFs
[21:43:33] [PASSED] 39 VFs
[21:43:33] [PASSED] 40 VFs
[21:43:33] [PASSED] 41 VFs
[21:43:33] [PASSED] 42 VFs
[21:43:33] [PASSED] 43 VFs
[21:43:33] [PASSED] 44 VFs
[21:43:33] [PASSED] 45 VFs
[21:43:33] [PASSED] 46 VFs
[21:43:33] [PASSED] 47 VFs
[21:43:33] [PASSED] 48 VFs
[21:43:33] [PASSED] 49 VFs
[21:43:33] [PASSED] 50 VFs
[21:43:33] [PASSED] 51 VFs
[21:43:33] [PASSED] 52 VFs
[21:43:33] [PASSED] 53 VFs
[21:43:33] [PASSED] 54 VFs
[21:43:33] [PASSED] 55 VFs
[21:43:33] [PASSED] 56 VFs
[21:43:33] [PASSED] 57 VFs
[21:43:33] [PASSED] 58 VFs
[21:43:33] [PASSED] 59 VFs
[21:43:33] [PASSED] 60 VFs
[21:43:33] [PASSED] 61 VFs
[21:43:33] [PASSED] 62 VFs
[21:43:33] [PASSED] 63 VFs
[21:43:33] ==================== [PASSED] fair_ggtt ====================
[21:43:33] ======================== fair_vram ========================
[21:43:33] [PASSED] 1 VF
[21:43:33] [PASSED] 2 VFs
[21:43:33] [PASSED] 3 VFs
[21:43:33] [PASSED] 4 VFs
[21:43:33] [PASSED] 5 VFs
[21:43:33] [PASSED] 6 VFs
[21:43:33] [PASSED] 7 VFs
[21:43:33] [PASSED] 8 VFs
[21:43:33] [PASSED] 9 VFs
[21:43:33] [PASSED] 10 VFs
[21:43:33] [PASSED] 11 VFs
[21:43:33] [PASSED] 12 VFs
[21:43:33] [PASSED] 13 VFs
[21:43:33] [PASSED] 14 VFs
[21:43:33] [PASSED] 15 VFs
[21:43:33] [PASSED] 16 VFs
[21:43:33] [PASSED] 17 VFs
[21:43:33] [PASSED] 18 VFs
[21:43:33] [PASSED] 19 VFs
[21:43:33] [PASSED] 20 VFs
[21:43:33] [PASSED] 21 VFs
[21:43:33] [PASSED] 22 VFs
[21:43:33] [PASSED] 23 VFs
[21:43:33] [PASSED] 24 VFs
[21:43:33] [PASSED] 25 VFs
[21:43:33] [PASSED] 26 VFs
[21:43:33] [PASSED] 27 VFs
[21:43:33] [PASSED] 28 VFs
[21:43:33] [PASSED] 29 VFs
[21:43:33] [PASSED] 30 VFs
[21:43:33] [PASSED] 31 VFs
[21:43:33] [PASSED] 32 VFs
[21:43:33] [PASSED] 33 VFs
[21:43:33] [PASSED] 34 VFs
[21:43:33] [PASSED] 35 VFs
[21:43:33] [PASSED] 36 VFs
[21:43:33] [PASSED] 37 VFs
[21:43:33] [PASSED] 38 VFs
[21:43:33] [PASSED] 39 VFs
[21:43:33] [PASSED] 40 VFs
[21:43:33] [PASSED] 41 VFs
[21:43:33] [PASSED] 42 VFs
[21:43:33] [PASSED] 43 VFs
[21:43:33] [PASSED] 44 VFs
[21:43:33] [PASSED] 45 VFs
[21:43:33] [PASSED] 46 VFs
[21:43:33] [PASSED] 47 VFs
[21:43:33] [PASSED] 48 VFs
[21:43:33] [PASSED] 49 VFs
[21:43:33] [PASSED] 50 VFs
[21:43:33] [PASSED] 51 VFs
[21:43:33] [PASSED] 52 VFs
[21:43:33] [PASSED] 53 VFs
[21:43:33] [PASSED] 54 VFs
[21:43:33] [PASSED] 55 VFs
[21:43:33] [PASSED] 56 VFs
[21:43:33] [PASSED] 57 VFs
[21:43:33] [PASSED] 58 VFs
[21:43:33] [PASSED] 59 VFs
[21:43:33] [PASSED] 60 VFs
[21:43:33] [PASSED] 61 VFs
[21:43:33] [PASSED] 62 VFs
[21:43:33] [PASSED] 63 VFs
[21:43:33] ==================== [PASSED] fair_vram ====================
[21:43:33] ================== [PASSED] pf_gt_config ===================
[21:43:33] ===================== lmtt (1 subtest) =====================
[21:43:33] ======================== test_ops =========================
[21:43:33] [PASSED] 2-level
[21:43:33] [PASSED] multi-level
[21:43:33] ==================== [PASSED] test_ops =====================
[21:43:33] ====================== [PASSED] lmtt =======================
[21:43:33] ================= sriov_packet (1 subtest) =================
[21:43:33] [PASSED] test_descriptor_init
[21:43:33] ================== [PASSED] sriov_packet ===================
[21:43:33] ================= pf_service (11 subtests) =================
[21:43:33] [PASSED] pf_negotiate_any
[21:43:33] [PASSED] pf_negotiate_base_match
[21:43:33] [PASSED] pf_negotiate_base_newer
[21:43:33] [PASSED] pf_negotiate_base_next
[21:43:33] [SKIPPED] pf_negotiate_base_older (no older minor)
[21:43:33] [PASSED] pf_negotiate_base_prev
[21:43:33] [PASSED] pf_negotiate_latest_match
[21:43:33] [PASSED] pf_negotiate_latest_newer
[21:43:33] [PASSED] pf_negotiate_latest_next
[21:43:33] [SKIPPED] pf_negotiate_latest_older (no older minor)
[21:43:33] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[21:43:33] =================== [PASSED] pf_service ====================
[21:43:33] ================= xe_guc_g2g (2 subtests) ==================
[21:43:33] ============== xe_live_guc_g2g_kunit_default ==============
[21:43:33] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[21:43:33] ============== xe_live_guc_g2g_kunit_allmem ===============
[21:43:33] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[21:43:33] =================== [SKIPPED] xe_guc_g2g ===================
[21:43:33] =================== xe_mocs (2 subtests) ===================
[21:43:33] ================ xe_live_mocs_kernel_kunit ================
[21:43:33] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[21:43:33] ================ xe_live_mocs_reset_kunit =================
[21:43:33] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[21:43:33] ==================== [SKIPPED] xe_mocs =====================
[21:43:33] ================= xe_migrate (3 subtests) ==================
[21:43:33] ================= xe_migrate_sanity_kunit =================
[21:43:33] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[21:43:33] ================== xe_validate_ccs_kunit ==================
[21:43:33] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[21:43:33] ============= xe_migrate_access_memory_kunit ==============
[21:43:33] ========= [SKIPPED] xe_migrate_access_memory_kunit =========
[21:43:33] =================== [SKIPPED] xe_migrate ===================
[21:43:33] ================== xe_dma_buf (1 subtest) ==================
[21:43:33] ==================== xe_dma_buf_kunit =====================
[21:43:33] ================ [SKIPPED] xe_dma_buf_kunit ================
[21:43:33] =================== [SKIPPED] xe_dma_buf ===================
[21:43:33] ================= xe_bo_shrink (1 subtest) =================
[21:43:33] =================== xe_bo_shrink_kunit ====================
[21:43:33] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[21:43:33] ================== [SKIPPED] xe_bo_shrink ==================
[21:43:33] ==================== xe_bo (2 subtests) ====================
[21:43:33] ================== xe_ccs_migrate_kunit ===================
[21:43:33] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[21:43:33] ==================== xe_bo_evict_kunit ====================
[21:43:33] =============== [SKIPPED] xe_bo_evict_kunit ================
[21:43:33] ===================== [SKIPPED] xe_bo ======================
[21:43:33] =================== xe_any (9 subtests) ====================
[21:43:33] [PASSED] test_to_xe
[21:43:33] [PASSED] test_to_dev
[21:43:33] [PASSED] test_to_pdev
[21:43:33] [PASSED] test_to_drm
[21:43:33] [PASSED] test_if_pdev
[21:43:33] [PASSED] test_if_xe
[21:43:33] [PASSED] test_if_tile
[21:43:33] [PASSED] test_if_gt
[21:43:33] [PASSED] test_to_id
[21:43:33] ===================== [PASSED] xe_any ======================
[21:43:33] ==================== args (13 subtests) ====================
[21:43:33] [PASSED] count_args_test
[21:43:33] [PASSED] call_args_example
[21:43:33] [PASSED] call_args_test
[21:43:33] [PASSED] drop_first_arg_example
[21:43:33] [PASSED] drop_first_arg_test
[21:43:33] [PASSED] first_arg_example
[21:43:33] [PASSED] first_arg_test
[21:43:33] [PASSED] last_arg_example
[21:43:33] [PASSED] last_arg_test
[21:43:33] [PASSED] pick_arg_example
[21:43:33] [PASSED] if_args_example
[21:43:33] [PASSED] if_args_test
[21:43:33] [PASSED] sep_comma_example
[21:43:33] ====================== [PASSED] args =======================
[21:43:33] =================== xe_pci (3 subtests) ====================
[21:43:33] ==================== check_graphics_ip ====================
[21:43:33] [PASSED] 12.00 Xe_LP
[21:43:33] [PASSED] 12.10 Xe_LP+
[21:43:33] [PASSED] 12.55 Xe_HPG
[21:43:33] [PASSED] 12.60 Xe_HPC
[21:43:33] [PASSED] 12.70 Xe_LPG
[21:43:33] [PASSED] 12.71 Xe_LPG
[21:43:33] [PASSED] 12.74 Xe_LPG+
[21:43:33] [PASSED] 20.01 Xe2_HPG
[21:43:33] [PASSED] 20.02 Xe2_HPG
[21:43:33] [PASSED] 20.04 Xe2_LPG
[21:43:33] [PASSED] 30.00 Xe3_LPG
[21:43:33] [PASSED] 30.01 Xe3_LPG
[21:43:33] [PASSED] 30.03 Xe3_LPG
[21:43:33] [PASSED] 30.04 Xe3_LPG
[21:43:33] [PASSED] 30.05 Xe3_LPG
[21:43:33] [PASSED] 35.10 Xe3p_LPG
[21:43:33] [PASSED] 35.11 Xe3p_XPC
[21:43:33] ================ [PASSED] check_graphics_ip ================
[21:43:33] ===================== check_media_ip ======================
[21:43:33] [PASSED] 12.00 Xe_M
[21:43:33] [PASSED] 12.55 Xe_HPM
[21:43:33] [PASSED] 13.00 Xe_LPM+
[21:43:33] [PASSED] 13.01 Xe2_HPM
[21:43:33] [PASSED] 20.00 Xe2_LPM
[21:43:33] [PASSED] 30.00 Xe3_LPM
[21:43:33] [PASSED] 30.02 Xe3_LPM
[21:43:33] [PASSED] 35.00 Xe3p_LPM
[21:43:33] [PASSED] 35.03 Xe3p_HPM
[21:43:33] ================= [PASSED] check_media_ip ==================
[21:43:33] =================== check_platform_desc ===================
[21:43:33] [PASSED] 0x9A60 (TIGERLAKE)
[21:43:33] [PASSED] 0x9A68 (TIGERLAKE)
[21:43:33] [PASSED] 0x9A70 (TIGERLAKE)
[21:43:33] [PASSED] 0x9A40 (TIGERLAKE)
[21:43:33] [PASSED] 0x9A49 (TIGERLAKE)
[21:43:33] [PASSED] 0x9A59 (TIGERLAKE)
[21:43:33] [PASSED] 0x9A78 (TIGERLAKE)
[21:43:33] [PASSED] 0x9AC0 (TIGERLAKE)
[21:43:33] [PASSED] 0x9AC9 (TIGERLAKE)
[21:43:33] [PASSED] 0x9AD9 (TIGERLAKE)
[21:43:33] [PASSED] 0x9AF8 (TIGERLAKE)
[21:43:33] [PASSED] 0x4C80 (ROCKETLAKE)
[21:43:33] [PASSED] 0x4C8A (ROCKETLAKE)
[21:43:33] [PASSED] 0x4C8B (ROCKETLAKE)
[21:43:33] [PASSED] 0x4C8C (ROCKETLAKE)
[21:43:33] [PASSED] 0x4C90 (ROCKETLAKE)
[21:43:33] [PASSED] 0x4C9A (ROCKETLAKE)
[21:43:33] [PASSED] 0x4680 (ALDERLAKE_S)
[21:43:33] [PASSED] 0x4682 (ALDERLAKE_S)
[21:43:33] [PASSED] 0x4688 (ALDERLAKE_S)
[21:43:33] [PASSED] 0x468A (ALDERLAKE_S)
[21:43:33] [PASSED] 0x468B (ALDERLAKE_S)
[21:43:33] [PASSED] 0x4690 (ALDERLAKE_S)
[21:43:33] [PASSED] 0x4692 (ALDERLAKE_S)
[21:43:33] [PASSED] 0x4693 (ALDERLAKE_S)
[21:43:33] [PASSED] 0x46A0 (ALDERLAKE_P)
[21:43:33] [PASSED] 0x46A1 (ALDERLAKE_P)
[21:43:33] [PASSED] 0x46A2 (ALDERLAKE_P)
[21:43:33] [PASSED] 0x46A3 (ALDERLAKE_P)
[21:43:33] [PASSED] 0x46A6 (ALDERLAKE_P)
[21:43:33] [PASSED] 0x46A8 (ALDERLAKE_P)
[21:43:33] [PASSED] 0x46AA (ALDERLAKE_P)
[21:43:33] [PASSED] 0x462A (ALDERLAKE_P)
[21:43:33] [PASSED] 0x4626 (ALDERLAKE_P)
[21:43:33] [PASSED] 0x4628 (ALDERLAKE_P)
[21:43:33] [PASSED] 0x46B0 (ALDERLAKE_P)
[21:43:33] [PASSED] 0x46B1 (ALDERLAKE_P)
[21:43:33] [PASSED] 0x46B2 (ALDERLAKE_P)
[21:43:33] [PASSED] 0x46B3 (ALDERLAKE_P)
[21:43:33] [PASSED] 0x46C0 (ALDERLAKE_P)
[21:43:33] [PASSED] 0x46C1 (ALDERLAKE_P)
[21:43:33] [PASSED] 0x46C2 (ALDERLAKE_P)
[21:43:33] [PASSED] 0x46C3 (ALDERLAKE_P)
[21:43:33] [PASSED] 0x46D0 (ALDERLAKE_N)
[21:43:33] [PASSED] 0x46D1 (ALDERLAKE_N)
[21:43:33] [PASSED] 0x46D2 (ALDERLAKE_N)
[21:43:33] [PASSED] 0x46D3 (ALDERLAKE_N)
[21:43:33] [PASSED] 0x46D4 (ALDERLAKE_N)
[21:43:33] [PASSED] 0xA721 (ALDERLAKE_P)
[21:43:33] [PASSED] 0xA7A1 (ALDERLAKE_P)
[21:43:33] [PASSED] 0xA7A9 (ALDERLAKE_P)
[21:43:33] [PASSED] 0xA7AC (ALDERLAKE_P)
[21:43:33] [PASSED] 0xA7AD (ALDERLAKE_P)
[21:43:33] [PASSED] 0xA720 (ALDERLAKE_P)
[21:43:33] [PASSED] 0xA7A0 (ALDERLAKE_P)
[21:43:33] [PASSED] 0xA7A8 (ALDERLAKE_P)
[21:43:33] [PASSED] 0xA7AA (ALDERLAKE_P)
[21:43:33] [PASSED] 0xA7AB (ALDERLAKE_P)
[21:43:33] [PASSED] 0xA780 (ALDERLAKE_S)
[21:43:33] [PASSED] 0xA781 (ALDERLAKE_S)
[21:43:33] [PASSED] 0xA782 (ALDERLAKE_S)
[21:43:33] [PASSED] 0xA783 (ALDERLAKE_S)
[21:43:33] [PASSED] 0xA788 (ALDERLAKE_S)
[21:43:33] [PASSED] 0xA789 (ALDERLAKE_S)
[21:43:33] [PASSED] 0xA78A (ALDERLAKE_S)
[21:43:33] [PASSED] 0xA78B (ALDERLAKE_S)
[21:43:33] [PASSED] 0x4905 (DG1)
[21:43:33] [PASSED] 0x4906 (DG1)
[21:43:33] [PASSED] 0x4907 (DG1)
[21:43:33] [PASSED] 0x4908 (DG1)
[21:43:33] [PASSED] 0x4909 (DG1)
[21:43:33] [PASSED] 0x56C0 (DG2)
[21:43:33] [PASSED] 0x56C2 (DG2)
[21:43:33] [PASSED] 0x56C1 (DG2)
[21:43:33] [PASSED] 0x7D51 (METEORLAKE)
[21:43:33] [PASSED] 0x7DD1 (METEORLAKE)
[21:43:33] [PASSED] 0x7D41 (METEORLAKE)
[21:43:33] [PASSED] 0x7D67 (METEORLAKE)
[21:43:33] [PASSED] 0xB640 (METEORLAKE)
[21:43:33] [PASSED] 0x56A0 (DG2)
[21:43:33] [PASSED] 0x56A1 (DG2)
[21:43:33] [PASSED] 0x56A2 (DG2)
[21:43:33] [PASSED] 0x56BE (DG2)
[21:43:33] [PASSED] 0x56BF (DG2)
[21:43:33] [PASSED] 0x5690 (DG2)
[21:43:33] [PASSED] 0x5691 (DG2)
[21:43:33] [PASSED] 0x5692 (DG2)
[21:43:33] [PASSED] 0x56A5 (DG2)
[21:43:33] [PASSED] 0x56A6 (DG2)
[21:43:33] [PASSED] 0x56B0 (DG2)
[21:43:33] [PASSED] 0x56B1 (DG2)
[21:43:33] [PASSED] 0x56BA (DG2)
[21:43:33] [PASSED] 0x56BB (DG2)
[21:43:33] [PASSED] 0x56BC (DG2)
[21:43:33] [PASSED] 0x56BD (DG2)
[21:43:33] [PASSED] 0x5693 (DG2)
[21:43:33] [PASSED] 0x5694 (DG2)
[21:43:33] [PASSED] 0x5695 (DG2)
[21:43:33] [PASSED] 0x56A3 (DG2)
[21:43:33] [PASSED] 0x56A4 (DG2)
[21:43:33] [PASSED] 0x56B2 (DG2)
[21:43:33] [PASSED] 0x56B3 (DG2)
[21:43:33] [PASSED] 0x5696 (DG2)
[21:43:33] [PASSED] 0x5697 (DG2)
[21:43:33] [PASSED] 0xB69 (PVC)
[21:43:33] [PASSED] 0xB6E (PVC)
[21:43:33] [PASSED] 0xBD4 (PVC)
[21:43:33] [PASSED] 0xBD5 (PVC)
[21:43:33] [PASSED] 0xBD6 (PVC)
[21:43:33] [PASSED] 0xBD7 (PVC)
[21:43:33] [PASSED] 0xBD8 (PVC)
[21:43:33] [PASSED] 0xBD9 (PVC)
[21:43:33] [PASSED] 0xBDA (PVC)
[21:43:33] [PASSED] 0xBDB (PVC)
[21:43:33] [PASSED] 0xBE0 (PVC)
[21:43:33] [PASSED] 0xBE1 (PVC)
[21:43:33] [PASSED] 0xBE5 (PVC)
[21:43:33] [PASSED] 0x7D40 (METEORLAKE)
[21:43:33] [PASSED] 0x7D45 (METEORLAKE)
[21:43:33] [PASSED] 0x7D55 (METEORLAKE)
[21:43:33] [PASSED] 0x7D60 (METEORLAKE)
[21:43:33] [PASSED] 0x7DD5 (METEORLAKE)
[21:43:33] [PASSED] 0x6420 (LUNARLAKE)
[21:43:33] [PASSED] 0x64A0 (LUNARLAKE)
[21:43:33] [PASSED] 0x64B0 (LUNARLAKE)
[21:43:33] [PASSED] 0xE202 (BATTLEMAGE)
[21:43:33] [PASSED] 0xE209 (BATTLEMAGE)
[21:43:33] [PASSED] 0xE20B (BATTLEMAGE)
[21:43:33] [PASSED] 0xE20C (BATTLEMAGE)
[21:43:33] [PASSED] 0xE20D (BATTLEMAGE)
[21:43:33] [PASSED] 0xE210 (BATTLEMAGE)
[21:43:33] [PASSED] 0xE211 (BATTLEMAGE)
[21:43:33] [PASSED] 0xE212 (BATTLEMAGE)
[21:43:33] [PASSED] 0xE216 (BATTLEMAGE)
[21:43:33] [PASSED] 0xE220 (BATTLEMAGE)
[21:43:33] [PASSED] 0xE221 (BATTLEMAGE)
[21:43:33] [PASSED] 0xE222 (BATTLEMAGE)
[21:43:33] [PASSED] 0xE223 (BATTLEMAGE)
[21:43:33] [PASSED] 0xB080 (PANTHERLAKE)
[21:43:33] [PASSED] 0xB081 (PANTHERLAKE)
[21:43:33] [PASSED] 0xB082 (PANTHERLAKE)
[21:43:33] [PASSED] 0xB083 (PANTHERLAKE)
[21:43:33] [PASSED] 0xB084 (PANTHERLAKE)
[21:43:33] [PASSED] 0xB085 (PANTHERLAKE)
[21:43:33] [PASSED] 0xB086 (PANTHERLAKE)
[21:43:33] [PASSED] 0xB087 (PANTHERLAKE)
[21:43:33] [PASSED] 0xB08F (PANTHERLAKE)
[21:43:33] [PASSED] 0xB090 (PANTHERLAKE)
[21:43:33] [PASSED] 0xB0A0 (PANTHERLAKE)
[21:43:33] [PASSED] 0xB0A1 (PANTHERLAKE)
[21:43:33] [PASSED] 0xB0B0 (PANTHERLAKE)
[21:43:33] [PASSED] 0xFD80 (PANTHERLAKE)
[21:43:33] [PASSED] 0xFD81 (PANTHERLAKE)
[21:43:33] [PASSED] 0xD740 (NOVALAKE_S)
[21:43:33] [PASSED] 0xD741 (NOVALAKE_S)
[21:43:33] [PASSED] 0xD742 (NOVALAKE_S)
[21:43:33] [PASSED] 0xD743 (NOVALAKE_S)
[21:43:33] [PASSED] 0xD745 (NOVALAKE_S)
[21:43:33] [PASSED] 0xD74A (NOVALAKE_S)
[21:43:33] [PASSED] 0xD74B (NOVALAKE_S)
[21:43:33] [PASSED] 0x674C (CRESCENTISLAND)
[21:43:33] [PASSED] 0x674D (CRESCENTISLAND)
[21:43:33] [PASSED] 0x674E (CRESCENTISLAND)
[21:43:33] [PASSED] 0x674F (CRESCENTISLAND)
[21:43:33] [PASSED] 0x6750 (CRESCENTISLAND)
[21:43:33] [PASSED] 0x6751 (CRESCENTISLAND)
[21:43:33] [PASSED] 0x6752 (CRESCENTISLAND)
[21:43:33] [PASSED] 0xD750 (NOVALAKE_P)
[21:43:33] [PASSED] 0xD751 (NOVALAKE_P)
[21:43:33] [PASSED] 0xD752 (NOVALAKE_P)
[21:43:33] [PASSED] 0xD753 (NOVALAKE_P)
[21:43:33] [PASSED] 0xD754 (NOVALAKE_P)
[21:43:33] [PASSED] 0xD755 (NOVALAKE_P)
[21:43:33] [PASSED] 0xD756 (NOVALAKE_P)
[21:43:33] [PASSED] 0xD757 (NOVALAKE_P)
[21:43:33] [PASSED] 0xD75F (NOVALAKE_P)
[21:43:33] =============== [PASSED] check_platform_desc ===============
[21:43:33] ===================== [PASSED] xe_pci ======================
[21:43:33] ============= xe_rtp_tables_test (5 subtests) ==============
[21:43:33] ================== xe_rtp_table_gt_test ===================
[21:43:33] [PASSED] gt_was/14011060649
[21:43:33] [PASSED] gt_was/14011059788
[21:43:33] [PASSED] gt_was/14015795083
[21:43:33] [PASSED] gt_was/16021867713
[21:43:33] [PASSED] gt_was/14019449301
[21:43:33] [PASSED] gt_was/16028005424
[21:43:33] [PASSED] gt_was/14026578760
[21:43:33] [PASSED] gt_was/1409420604
[21:43:33] [PASSED] gt_was/1408615072
[21:43:33] [PASSED] gt_was/22010523718
[21:43:33] [PASSED] gt_was/14011006942
[21:43:33] [PASSED] gt_was/14014830051
[21:43:33] [PASSED] gt_was/18018781329
[21:43:33] [PASSED] gt_was/1509235366
[21:43:33] [PASSED] gt_was/18018781329
[21:43:33] [PASSED] gt_was/16016694945
[21:43:33] [PASSED] gt_was/14018575942
[21:43:33] [PASSED] gt_was/22016670082
[21:43:33] [PASSED] gt_was/22016670082
[21:43:33] [PASSED] gt_was/14017421178
[21:43:33] [PASSED] gt_was/16025250150
[21:43:33] [PASSED] gt_was/14021871409
[21:43:33] [PASSED] gt_was/16021865536
[21:43:33] [PASSED] gt_was/14021486841
[21:43:33] [PASSED] gt_was/14025160223
[21:43:33] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[21:43:33] [PASSED] gt_was/14025635424
[21:43:33] [PASSED] gt_was/16028005424
[21:43:33] ============== [PASSED] xe_rtp_table_gt_test ===============
[21:43:33] ================== xe_rtp_table_gt_test ===================
[21:43:33] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[21:43:33] [PASSED] gt_tunings/Tuning: 32B Access Enable
[21:43:33] [PASSED] gt_tunings/Tuning: L3 cache
[21:43:33] [PASSED] gt_tunings/Tuning: L3 cache - media
[21:43:33] [PASSED] gt_tunings/Tuning: Compression Overfetch
[21:43:33] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[21:43:33] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[21:43:33] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[21:43:33] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[21:43:33] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[21:43:33] [PASSED] gt_tunings/Tuning: Stateless compression control
[21:43:33] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[21:43:33] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[21:43:33] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[21:43:33] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[21:43:33] [PASSED] gt_tunings/Tuning: Force All Non-Compressible Memory Reads to be 256B Overfetches
[21:43:33] ============== [PASSED] xe_rtp_table_gt_test ===============
[21:43:33] ================== xe_rtp_table_oob_test ==================
[21:43:33] [PASSED] oob_was/1607983814
[21:43:33] [PASSED] oob_was/16010904313
[21:43:33] [PASSED] oob_was/18022495364
[21:43:33] [PASSED] oob_was/22012773006
[21:43:33] [PASSED] oob_was/14014475959
[21:43:33] [PASSED] oob_was/22011391025
[21:43:33] [PASSED] oob_was/22012727170
[21:43:33] [PASSED] oob_was/22012727685
[21:43:33] [PASSED] oob_was/22016596838
[21:43:33] [PASSED] oob_was/18020744125
[21:43:33] [PASSED] oob_was/1409600907
[21:43:33] [PASSED] oob_was/22014953428
[21:43:33] [PASSED] oob_was/16017236439
[21:43:33] [PASSED] oob_was/14019821291
[21:43:33] [PASSED] oob_was/14015076503
[21:43:33] [PASSED] oob_was/22016122933
[21:43:33] [PASSED] oob_was/14018913170
[21:43:33] [PASSED] oob_was/14018094691
[21:43:33] [PASSED] oob_was/18024947630
[21:43:33] [PASSED] oob_was/16022287689
[21:43:33] [PASSED] oob_was/13011645652
[21:43:33] [PASSED] oob_was/14022293748
[21:43:33] [PASSED] oob_was/22019794406
[21:43:33] [PASSED] oob_was/22019338487
[21:43:33] [PASSED] oob_was/16023588340
[21:43:33] [PASSED] oob_was/14019789679
[21:43:33] [PASSED] oob_was/14022866841
[21:43:33] [PASSED] oob_was/16021333562
[21:43:33] [PASSED] oob_was/14016712196
[21:43:33] [PASSED] oob_was/14015568240
[21:43:33] [PASSED] oob_was/18013179988
[21:43:33] [PASSED] oob_was/1508761755
[21:43:33] [PASSED] oob_was/16023105232
[21:43:33] [PASSED] oob_was/16026508708
[21:43:33] [PASSED] oob_was/14020001231
[21:43:33] [PASSED] oob_was/16023683509
[21:43:33] [PASSED] oob_was/14025515070
[21:43:33] [PASSED] oob_was/15015404425_disable
[21:43:33] [PASSED] oob_was/16026007364
[21:43:33] [PASSED] oob_was/14020316580
[21:43:33] [PASSED] oob_was/14025883347
[21:43:33] [PASSED] oob_was/16029380221
[21:43:33] [PASSED] oob_was/22022079272
[21:43:33] [PASSED] oob_was/16029897822
[21:43:33] [PASSED] oob_was/14026539277
[21:43:33] [PASSED] oob_was/14027054324
[21:43:33] [PASSED] oob_was/14025941587
[21:43:33] [PASSED] oob_was/16030224309
[21:43:33] [PASSED] oob_was/14028709524
[21:43:33] [PASSED] oob_was/14028250015
[21:43:33] [PASSED] oob_was/16031259911
[21:43:33] ============== [PASSED] xe_rtp_table_oob_test ==============
[21:43:33] ================ xe_rtp_table_dev_oob_test ================
[21:43:33] [PASSED] device_oob_was/22010954014
[21:43:33] [PASSED] device_oob_was/15015404425
[21:43:33] [PASSED] device_oob_was/22019338487_display
[21:43:33] [PASSED] device_oob_was/14022085890
[21:43:33] [PASSED] device_oob_was/14026633728
[21:43:33] [PASSED] device_oob_was/14026746987
[21:43:33] [PASSED] device_oob_was/14026779378
[21:43:33] [PASSED] device_oob_was/14028586678
[21:43:33] [PASSED] device_oob_was/14028434957
[21:43:33] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[21:43:33] ========== xe_rtp_table_missing_upper_bound_test ==========
[21:43:33] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[21:43:33] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[21:43:33] [PASSED] register_whitelist/1806527549
[21:43:33] [PASSED] register_whitelist/allow_read_ctx_timestamp
[21:43:33] [PASSED] register_whitelist/allow_read_queue_timestamp
[21:43:33] [PASSED] register_whitelist/16014440446
[21:43:33] [PASSED] register_whitelist/16017236439
[21:43:33] [PASSED] register_whitelist/16020183090
[21:43:33] [PASSED] register_whitelist/14024997852
[21:43:33] [PASSED] register_whitelist/14024997852
[21:43:33] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[21:43:33] =============== [PASSED] xe_rtp_tables_test ================
[21:43:33] =================== xe_rtp (3 subtests) ====================
[21:43:33] =================== xe_rtp_rules_tests ====================
[21:43:33] [PASSED] no
[21:43:33] [PASSED] yes
[21:43:33] [PASSED] no-and-no
[21:43:33] [PASSED] no-and-yes
[21:43:33] [PASSED] yes-and-no
[21:43:33] [PASSED] yes-and-yes
[21:43:33] [PASSED] no-or-no
[21:43:33] [PASSED] no-or-yes
[21:43:33] [PASSED] yes-or-no
[21:43:33] [PASSED] yes-or-yes
[21:43:33] [PASSED] no-yes-or-yes-no
[21:43:33] [PASSED] no-yes-or-yes-yes
[21:43:33] [PASSED] yes-yes-or-no-yes
[21:43:33] [PASSED] yes-yes-or-yes-yes
[21:43:33] [PASSED] no-no-or-yes-or-no
[21:43:33] [PASSED] or
[21:43:33] [PASSED] or-yes
[21:43:33] [PASSED] or-no
[21:43:33] [PASSED] yes-or
[21:43:33] [PASSED] no-or
[21:43:33] [PASSED] no-or-or-yes
[21:43:33] [PASSED] yes-or-or-no
[21:43:33] [PASSED] no-or-or-no
[21:43:33] [PASSED] missing-context-engine-class
[21:43:33] [PASSED] missing-context-engine-class-or-yes
[21:43:33] [PASSED] missing-context-engine-class-or-or-yes
[21:43:33] =============== [PASSED] xe_rtp_rules_tests ================
[21:43:33] =============== xe_rtp_process_to_sr_tests ================
[21:43:33] [PASSED] coalesce-same-reg
[21:43:33] [PASSED] coalesce-same-reg-literal-and-func
[21:43:33] [PASSED] no-match-no-add
[21:43:33] [PASSED] two-regs-two-entries
[21:43:33] [PASSED] clr-one-set-other
[21:43:33] [PASSED] set-field
[21:43:33] [PASSED] conflict-duplicate
[21:43:33] [PASSED] conflict-not-disjoint
[21:43:33] [PASSED] conflict-not-disjoint-literal-and-func
[21:43:33] [PASSED] conflict-reg-type
[21:43:33] [PASSED] bad-mcr-reg-forced-to-regular
[21:43:33] [PASSED] bad-regular-reg-forced-to-mcr
[21:43:33] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[21:43:33] ================== xe_rtp_process_tests ===================
[21:43:33] [PASSED] active1
[21:43:33] [PASSED] active2
[21:43:33] [PASSED] active-inactive
[21:43:33] [PASSED] inactive-active
[21:43:33] [PASSED] inactive-active-inactive
[21:43:33] [PASSED] inactive-inactive-inactive
[21:43:33] ============== [PASSED] xe_rtp_process_tests ===============
[21:43:33] ===================== [PASSED] xe_rtp ======================
[21:43:33] ==================== xe_wa (1 subtest) =====================
[21:43:33] ======================== xe_wa_gt =========================
[21:43:33] [PASSED] TIGERLAKE B0
[21:43:33] [PASSED] DG1 A0
[21:43:33] [PASSED] DG1 B0
[21:43:33] [PASSED] ALDERLAKE_S A0
[21:43:33] [PASSED] ALDERLAKE_S B0
[21:43:33] [PASSED] ALDERLAKE_S C0
[21:43:33] [PASSED] ALDERLAKE_S D0
[21:43:33] [PASSED] ALDERLAKE_P A0
[21:43:33] [PASSED] ALDERLAKE_P B0
[21:43:33] [PASSED] ALDERLAKE_P C0
[21:43:33] [PASSED] ALDERLAKE_S RPLS D0
[21:43:33] [PASSED] ALDERLAKE_P RPLU E0
[21:43:33] [PASSED] DG2 G10 C0
[21:43:33] [PASSED] DG2 G11 B1
[21:43:33] [PASSED] DG2 G12 A1
[21:43:33] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[21:43:33] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[21:43:33] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[21:43:33] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[21:43:33] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[21:43:33] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[21:43:33] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[21:43:33] ==================== [PASSED] xe_wa_gt =====================
[21:43:33] ====================== [PASSED] xe_wa ======================
[21:43:33] ============================================================
[21:43:33] Testing complete. Ran 844 tests: passed: 815, skipped: 29
[21:43:33] Elapsed time: 40.809s total, 2.470s configuring, 37.573s building, 0.713s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[21:43:33] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[21:43:36] 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
[21:44:01] Starting KUnit Kernel (1/1)...
[21:44:01] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[21:44:01] ============ drm_test_pick_cmdline (2 subtests) ============
[21:44:01] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[21:44:01] =============== drm_test_pick_cmdline_named ===============
[21:44:01] [PASSED] NTSC
[21:44:01] [PASSED] NTSC-J
[21:44:01] [PASSED] PAL
[21:44:01] [PASSED] PAL-M
[21:44:01] =========== [PASSED] drm_test_pick_cmdline_named ===========
[21:44:01] ============== [PASSED] drm_test_pick_cmdline ==============
[21:44:01] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[21:44:01] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[21:44:01] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[21:44:01] =========== drm_validate_clone_mode (2 subtests) ===========
[21:44:01] ============== drm_test_check_in_clone_mode ===============
[21:44:01] [PASSED] in_clone_mode
[21:44:01] [PASSED] not_in_clone_mode
[21:44:01] ========== [PASSED] drm_test_check_in_clone_mode ===========
[21:44:01] =============== drm_test_check_valid_clones ===============
[21:44:01] [PASSED] not_in_clone_mode
[21:44:01] [PASSED] valid_clone
[21:44:01] [PASSED] invalid_clone
[21:44:01] =========== [PASSED] drm_test_check_valid_clones ===========
[21:44:01] ============= [PASSED] drm_validate_clone_mode =============
[21:44:01] ============= drm_validate_modeset (1 subtest) =============
[21:44:01] [PASSED] drm_test_check_connector_changed_modeset
[21:44:01] ============== [PASSED] drm_validate_modeset ===============
[21:44:01] ====== drm_test_bridge_get_current_state (1 subtest) =======
[21:44:01] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[21:44:01] ======== [PASSED] drm_test_bridge_get_current_state ========
[21:44:01] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[21:44:01] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[21:44:01] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[21:44:01] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[21:44:01] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[21:44:01] ============== drm_bridge_alloc (2 subtests) ===============
[21:44:01] [PASSED] drm_test_drm_bridge_alloc_basic
[21:44:01] [PASSED] drm_test_drm_bridge_alloc_get_put
[21:44:01] ================ [PASSED] drm_bridge_alloc =================
[21:44:01] ============= drm_bridge_bus_fmt (5 subtests) ==============
[21:44:01] [PASSED] drm_test_bridge_rgb_yuv_rgb
[21:44:01] [PASSED] drm_test_bridge_must_convert_to_yuv444
[21:44:01] [PASSED] drm_test_bridge_hdmi_auto_rgb
[21:44:01] [PASSED] drm_test_bridge_auto_first
[21:44:01] [PASSED] drm_test_bridge_rgb_yuv_no_path
[21:44:01] =============== [PASSED] drm_bridge_bus_fmt ================
[21:44:01] ============= drm_cmdline_parser (40 subtests) =============
[21:44:01] [PASSED] drm_test_cmdline_force_d_only
[21:44:01] [PASSED] drm_test_cmdline_force_D_only_dvi
[21:44:01] [PASSED] drm_test_cmdline_force_D_only_hdmi
[21:44:01] [PASSED] drm_test_cmdline_force_D_only_not_digital
[21:44:01] [PASSED] drm_test_cmdline_force_e_only
[21:44:01] [PASSED] drm_test_cmdline_res
[21:44:01] [PASSED] drm_test_cmdline_res_vesa
[21:44:01] [PASSED] drm_test_cmdline_res_vesa_rblank
[21:44:01] [PASSED] drm_test_cmdline_res_rblank
[21:44:01] [PASSED] drm_test_cmdline_res_bpp
[21:44:01] [PASSED] drm_test_cmdline_res_refresh
[21:44:01] [PASSED] drm_test_cmdline_res_bpp_refresh
[21:44:01] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[21:44:01] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[21:44:01] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[21:44:01] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[21:44:01] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[21:44:01] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[21:44:01] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[21:44:01] [PASSED] drm_test_cmdline_res_margins_force_on
[21:44:01] [PASSED] drm_test_cmdline_res_vesa_margins
[21:44:01] [PASSED] drm_test_cmdline_name
[21:44:01] [PASSED] drm_test_cmdline_name_bpp
[21:44:01] [PASSED] drm_test_cmdline_name_option
[21:44:01] [PASSED] drm_test_cmdline_name_bpp_option
[21:44:01] [PASSED] drm_test_cmdline_rotate_0
[21:44:01] [PASSED] drm_test_cmdline_rotate_90
[21:44:01] [PASSED] drm_test_cmdline_rotate_180
[21:44:01] [PASSED] drm_test_cmdline_rotate_270
[21:44:01] [PASSED] drm_test_cmdline_hmirror
[21:44:01] [PASSED] drm_test_cmdline_vmirror
[21:44:01] [PASSED] drm_test_cmdline_margin_options
[21:44:01] [PASSED] drm_test_cmdline_multiple_options
[21:44:01] [PASSED] drm_test_cmdline_bpp_extra_and_option
[21:44:01] [PASSED] drm_test_cmdline_extra_and_option
[21:44:01] [PASSED] drm_test_cmdline_freestanding_options
[21:44:01] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[21:44:01] [PASSED] drm_test_cmdline_panel_orientation
[21:44:01] ================ drm_test_cmdline_invalid =================
[21:44:01] [PASSED] margin_only
[21:44:01] [PASSED] interlace_only
[21:44:01] [PASSED] res_missing_x
[21:44:01] [PASSED] res_missing_y
[21:44:01] [PASSED] res_bad_y
[21:44:01] [PASSED] res_missing_y_bpp
[21:44:01] [PASSED] res_bad_bpp
[21:44:01] [PASSED] res_bad_refresh
[21:44:01] [PASSED] res_bpp_refresh_force_on_off
[21:44:01] [PASSED] res_invalid_mode
[21:44:01] [PASSED] res_bpp_wrong_place_mode
[21:44:01] [PASSED] name_bpp_refresh
[21:44:01] [PASSED] name_refresh
[21:44:01] [PASSED] name_refresh_wrong_mode
[21:44:01] [PASSED] name_refresh_invalid_mode
[21:44:01] [PASSED] rotate_multiple
[21:44:01] [PASSED] rotate_invalid_val
[21:44:01] [PASSED] rotate_truncated
[21:44:01] [PASSED] invalid_option
[21:44:01] [PASSED] invalid_tv_option
[21:44:01] [PASSED] truncated_tv_option
[21:44:01] ============ [PASSED] drm_test_cmdline_invalid =============
[21:44:01] =============== drm_test_cmdline_tv_options ===============
[21:44:01] [PASSED] NTSC
[21:44:01] [PASSED] NTSC_443
[21:44:01] [PASSED] NTSC_J
[21:44:01] [PASSED] PAL
[21:44:01] [PASSED] PAL_M
[21:44:01] [PASSED] PAL_N
[21:44:01] [PASSED] SECAM
[21:44:01] [PASSED] MONO_525
[21:44:01] [PASSED] MONO_625
[21:44:01] =========== [PASSED] drm_test_cmdline_tv_options ===========
[21:44:01] =============== [PASSED] drm_cmdline_parser ================
[21:44:01] ========== drmm_connector_hdmi_init (20 subtests) ==========
[21:44:01] [PASSED] drm_test_connector_hdmi_init_valid
[21:44:01] [PASSED] drm_test_connector_hdmi_init_bpc_8
[21:44:01] [PASSED] drm_test_connector_hdmi_init_bpc_10
[21:44:01] [PASSED] drm_test_connector_hdmi_init_bpc_12
[21:44:01] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[21:44:01] [PASSED] drm_test_connector_hdmi_init_bpc_null
[21:44:01] [PASSED] drm_test_connector_hdmi_init_formats_empty
[21:44:01] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[21:44:01] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[21:44:01] [PASSED] supported_formats=0x9 yuv420_allowed=1
[21:44:01] [PASSED] supported_formats=0x9 yuv420_allowed=0
[21:44:01] [PASSED] supported_formats=0x5 yuv420_allowed=1
[21:44:01] [PASSED] supported_formats=0x5 yuv420_allowed=0
[21:44:01] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[21:44:01] [PASSED] drm_test_connector_hdmi_init_null_ddc
[21:44:01] [PASSED] drm_test_connector_hdmi_init_null_product
[21:44:01] [PASSED] drm_test_connector_hdmi_init_null_vendor
[21:44:01] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[21:44:01] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[21:44:01] [PASSED] drm_test_connector_hdmi_init_product_valid
[21:44:01] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[21:44:01] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[21:44:01] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[21:44:01] ========= drm_test_connector_hdmi_init_type_valid =========
[21:44:01] [PASSED] HDMI-A
[21:44:01] [PASSED] HDMI-B
[21:44:01] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[21:44:01] ======== drm_test_connector_hdmi_init_type_invalid ========
[21:44:01] [PASSED] Unknown
[21:44:01] [PASSED] VGA
[21:44:01] [PASSED] DVI-I
[21:44:01] [PASSED] DVI-D
[21:44:01] [PASSED] DVI-A
[21:44:01] [PASSED] Composite
[21:44:01] [PASSED] SVIDEO
[21:44:01] [PASSED] LVDS
[21:44:01] [PASSED] Component
[21:44:01] [PASSED] DIN
[21:44:01] [PASSED] DP
[21:44:01] [PASSED] TV
[21:44:01] [PASSED] eDP
[21:44:01] [PASSED] Virtual
[21:44:01] [PASSED] DSI
[21:44:01] [PASSED] DPI
[21:44:01] [PASSED] Writeback
[21:44:01] [PASSED] SPI
[21:44:01] [PASSED] USB
[21:44:01] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[21:44:01] ============ [PASSED] drmm_connector_hdmi_init =============
[21:44:01] ============= drmm_connector_init (3 subtests) =============
[21:44:01] [PASSED] drm_test_drmm_connector_init
[21:44:01] [PASSED] drm_test_drmm_connector_init_null_ddc
[21:44:01] ========= drm_test_drmm_connector_init_type_valid =========
[21:44:01] [PASSED] Unknown
[21:44:01] [PASSED] VGA
[21:44:01] [PASSED] DVI-I
[21:44:01] [PASSED] DVI-D
[21:44:01] [PASSED] DVI-A
[21:44:01] [PASSED] Composite
[21:44:01] [PASSED] SVIDEO
[21:44:01] [PASSED] LVDS
[21:44:01] [PASSED] Component
[21:44:01] [PASSED] DIN
[21:44:01] [PASSED] DP
[21:44:01] [PASSED] HDMI-A
[21:44:01] [PASSED] HDMI-B
[21:44:01] [PASSED] TV
[21:44:01] [PASSED] eDP
[21:44:01] [PASSED] Virtual
[21:44:01] [PASSED] DSI
[21:44:01] [PASSED] DPI
[21:44:01] [PASSED] Writeback
[21:44:01] [PASSED] SPI
[21:44:01] [PASSED] USB
[21:44:01] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[21:44:01] =============== [PASSED] drmm_connector_init ===============
[21:44:01] ========= drm_connector_dynamic_init (6 subtests) ==========
[21:44:01] [PASSED] drm_test_drm_connector_dynamic_init
[21:44:01] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[21:44:01] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[21:44:01] [PASSED] drm_test_drm_connector_dynamic_init_properties
[21:44:01] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[21:44:01] [PASSED] Unknown
[21:44:01] [PASSED] VGA
[21:44:01] [PASSED] DVI-I
[21:44:01] [PASSED] DVI-D
[21:44:01] [PASSED] DVI-A
[21:44:01] [PASSED] Composite
[21:44:01] [PASSED] SVIDEO
[21:44:01] [PASSED] LVDS
[21:44:01] [PASSED] Component
[21:44:01] [PASSED] DIN
[21:44:01] [PASSED] DP
[21:44:01] [PASSED] HDMI-A
[21:44:01] [PASSED] HDMI-B
[21:44:01] [PASSED] TV
[21:44:01] [PASSED] eDP
[21:44:01] [PASSED] Virtual
[21:44:01] [PASSED] DSI
[21:44:01] [PASSED] DPI
[21:44:01] [PASSED] Writeback
[21:44:01] [PASSED] SPI
[21:44:01] [PASSED] USB
[21:44:01] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[21:44:01] ======== drm_test_drm_connector_dynamic_init_name =========
[21:44:01] [PASSED] Unknown
[21:44:01] [PASSED] VGA
[21:44:01] [PASSED] DVI-I
[21:44:01] [PASSED] DVI-D
[21:44:01] [PASSED] DVI-A
[21:44:01] [PASSED] Composite
[21:44:01] [PASSED] SVIDEO
[21:44:01] [PASSED] LVDS
[21:44:01] [PASSED] Component
[21:44:01] [PASSED] DIN
[21:44:01] [PASSED] DP
[21:44:01] [PASSED] HDMI-A
[21:44:01] [PASSED] HDMI-B
[21:44:01] [PASSED] TV
[21:44:01] [PASSED] eDP
[21:44:01] [PASSED] Virtual
[21:44:01] [PASSED] DSI
[21:44:01] [PASSED] DPI
[21:44:01] [PASSED] Writeback
[21:44:01] [PASSED] SPI
[21:44:01] [PASSED] USB
[21:44:01] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[21:44:01] =========== [PASSED] drm_connector_dynamic_init ============
[21:44:01] ==== drm_connector_dynamic_register_early (4 subtests) =====
[21:44:01] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[21:44:01] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[21:44:01] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[21:44:01] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[21:44:01] ====== [PASSED] drm_connector_dynamic_register_early =======
[21:44:01] ======= drm_connector_dynamic_register (7 subtests) ========
[21:44:01] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[21:44:01] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[21:44:01] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[21:44:01] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[21:44:01] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[21:44:01] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[21:44:01] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[21:44:01] ========= [PASSED] drm_connector_dynamic_register ==========
[21:44:01] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[21:44:01] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[21:44:01] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[21:44:01] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[21:44:01] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[21:44:01] ========== drm_test_get_tv_mode_from_name_valid ===========
[21:44:01] [PASSED] NTSC
[21:44:01] [PASSED] NTSC-443
[21:44:01] [PASSED] NTSC-J
[21:44:01] [PASSED] PAL
[21:44:01] [PASSED] PAL-M
[21:44:01] [PASSED] PAL-N
[21:44:01] [PASSED] SECAM
[21:44:01] [PASSED] Mono
[21:44:01] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[21:44:01] [PASSED] drm_test_get_tv_mode_from_name_truncated
[21:44:01] ============ [PASSED] drm_get_tv_mode_from_name ============
[21:44:01] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[21:44:01] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[21:44:01] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[21:44:01] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[21:44:01] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[21:44:01] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[21:44:01] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[21:44:01] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[21:44:01] [PASSED] VIC 96
[21:44:01] [PASSED] VIC 97
[21:44:01] [PASSED] VIC 101
[21:44:01] [PASSED] VIC 102
[21:44:01] [PASSED] VIC 106
[21:44:01] [PASSED] VIC 107
[21:44:01] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[21:44:01] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[21:44:01] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[21:44:01] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[21:44:01] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[21:44:01] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[21:44:01] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[21:44:01] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[21:44:01] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[21:44:01] [PASSED] Automatic
[21:44:01] [PASSED] Full
[21:44:01] [PASSED] Limited 16:235
[21:44:01] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[21:44:01] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[21:44:01] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[21:44:01] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[21:44:01] === drm_test_drm_hdmi_connector_get_output_format_name ====
[21:44:01] [PASSED] RGB
[21:44:01] [PASSED] YUV 4:2:0
[21:44:01] [PASSED] YUV 4:2:2
[21:44:01] [PASSED] YUV 4:4:4
[21:44:01] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[21:44:01] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[21:44:01] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[21:44:01] ============= drm_damage_helper (21 subtests) ==============
[21:44:01] [PASSED] drm_test_damage_iter_no_damage
[21:44:01] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[21:44:01] [PASSED] drm_test_damage_iter_no_damage_src_moved
[21:44:01] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[21:44:01] [PASSED] drm_test_damage_iter_no_damage_not_visible
[21:44:01] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[21:44:01] [PASSED] drm_test_damage_iter_no_damage_no_fb
[21:44:01] [PASSED] drm_test_damage_iter_simple_damage
[21:44:01] [PASSED] drm_test_damage_iter_single_damage
[21:44:01] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[21:44:01] [PASSED] drm_test_damage_iter_single_damage_outside_src
[21:44:01] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[21:44:01] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[21:44:01] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[21:44:01] [PASSED] drm_test_damage_iter_single_damage_src_moved
[21:44:01] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[21:44:01] [PASSED] drm_test_damage_iter_damage
[21:44:01] [PASSED] drm_test_damage_iter_damage_one_intersect
[21:44:01] [PASSED] drm_test_damage_iter_damage_one_outside
[21:44:01] [PASSED] drm_test_damage_iter_damage_src_moved
[21:44:01] [PASSED] drm_test_damage_iter_damage_not_visible
[21:44:01] ================ [PASSED] drm_damage_helper ================
[21:44:01] ============== drm_dp_mst_helper (3 subtests) ==============
[21:44:01] ============== drm_test_dp_mst_calc_pbn_mode ==============
[21:44:01] [PASSED] Clock 154000 BPP 30 DSC disabled
[21:44:01] [PASSED] Clock 234000 BPP 30 DSC disabled
[21:44:01] [PASSED] Clock 297000 BPP 24 DSC disabled
[21:44:01] [PASSED] Clock 332880 BPP 24 DSC enabled
[21:44:01] [PASSED] Clock 324540 BPP 24 DSC enabled
[21:44:01] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[21:44:01] ============== drm_test_dp_mst_calc_pbn_div ===============
[21:44:01] [PASSED] Link rate 2000000 lane count 4
[21:44:01] [PASSED] Link rate 2000000 lane count 2
[21:44:01] [PASSED] Link rate 2000000 lane count 1
[21:44:01] [PASSED] Link rate 1350000 lane count 4
[21:44:01] [PASSED] Link rate 1350000 lane count 2
[21:44:01] [PASSED] Link rate 1350000 lane count 1
[21:44:01] [PASSED] Link rate 1000000 lane count 4
[21:44:01] [PASSED] Link rate 1000000 lane count 2
[21:44:01] [PASSED] Link rate 1000000 lane count 1
[21:44:01] [PASSED] Link rate 810000 lane count 4
[21:44:01] [PASSED] Link rate 810000 lane count 2
[21:44:01] [PASSED] Link rate 810000 lane count 1
[21:44:01] [PASSED] Link rate 540000 lane count 4
[21:44:01] [PASSED] Link rate 540000 lane count 2
[21:44:01] [PASSED] Link rate 540000 lane count 1
[21:44:01] [PASSED] Link rate 270000 lane count 4
[21:44:01] [PASSED] Link rate 270000 lane count 2
[21:44:01] [PASSED] Link rate 270000 lane count 1
[21:44:01] [PASSED] Link rate 162000 lane count 4
[21:44:01] [PASSED] Link rate 162000 lane count 2
[21:44:01] [PASSED] Link rate 162000 lane count 1
[21:44:01] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[21:44:01] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[21:44:01] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[21:44:01] [PASSED] DP_POWER_UP_PHY with port number
[21:44:01] [PASSED] DP_POWER_DOWN_PHY with port number
[21:44:01] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[21:44:01] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[21:44:01] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[21:44:01] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[21:44:01] [PASSED] DP_QUERY_PAYLOAD with port number
[21:44:01] [PASSED] DP_QUERY_PAYLOAD with VCPI
[21:44:01] [PASSED] DP_REMOTE_DPCD_READ with port number
[21:44:01] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[21:44:01] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[21:44:01] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[21:44:01] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[21:44:01] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[21:44:01] [PASSED] DP_REMOTE_I2C_READ with port number
[21:44:01] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[21:44:01] [PASSED] DP_REMOTE_I2C_READ with transactions array
[21:44:01] [PASSED] DP_REMOTE_I2C_WRITE with port number
[21:44:01] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[21:44:01] [PASSED] DP_REMOTE_I2C_WRITE with data array
[21:44:01] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[21:44:01] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[21:44:01] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[21:44:01] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[21:44:01] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[21:44:01] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[21:44:01] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[21:44:01] ================ [PASSED] drm_dp_mst_helper ================
[21:44:01] ================== drm_exec (7 subtests) ===================
[21:44:01] [PASSED] sanitycheck
[21:44:01] [PASSED] test_lock
[21:44:01] [PASSED] test_lock_unlock
[21:44:01] [PASSED] test_duplicates
[21:44:01] [PASSED] test_prepare
[21:44:01] [PASSED] test_prepare_array
[21:44:01] [PASSED] test_multiple_loops
[21:44:01] ==================== [PASSED] drm_exec =====================
[21:44:01] =========== drm_format_helper_test (17 subtests) ===========
[21:44:01] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[21:44:01] [PASSED] single_pixel_source_buffer
[21:44:01] [PASSED] single_pixel_clip_rectangle
[21:44:01] [PASSED] well_known_colors
[21:44:01] [PASSED] destination_pitch
[21:44:01] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[21:44:01] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[21:44:01] [PASSED] single_pixel_source_buffer
[21:44:01] [PASSED] single_pixel_clip_rectangle
[21:44:01] [PASSED] well_known_colors
[21:44:01] [PASSED] destination_pitch
[21:44:01] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[21:44:01] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[21:44:01] [PASSED] single_pixel_source_buffer
[21:44:01] [PASSED] single_pixel_clip_rectangle
[21:44:01] [PASSED] well_known_colors
[21:44:01] [PASSED] destination_pitch
[21:44:01] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[21:44:01] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[21:44:01] [PASSED] single_pixel_source_buffer
[21:44:01] [PASSED] single_pixel_clip_rectangle
[21:44:01] [PASSED] well_known_colors
[21:44:01] [PASSED] destination_pitch
[21:44:01] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[21:44:01] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[21:44:01] [PASSED] single_pixel_source_buffer
[21:44:01] [PASSED] single_pixel_clip_rectangle
[21:44:01] [PASSED] well_known_colors
[21:44:01] [PASSED] destination_pitch
[21:44:01] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[21:44:01] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[21:44:01] [PASSED] single_pixel_source_buffer
[21:44:01] [PASSED] single_pixel_clip_rectangle
[21:44:01] [PASSED] well_known_colors
[21:44:01] [PASSED] destination_pitch
[21:44:01] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[21:44:01] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[21:44:01] [PASSED] single_pixel_source_buffer
[21:44:01] [PASSED] single_pixel_clip_rectangle
[21:44:01] [PASSED] well_known_colors
[21:44:01] [PASSED] destination_pitch
[21:44:01] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[21:44:01] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[21:44:01] [PASSED] single_pixel_source_buffer
[21:44:01] [PASSED] single_pixel_clip_rectangle
[21:44:01] [PASSED] well_known_colors
[21:44:01] [PASSED] destination_pitch
[21:44:01] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[21:44:01] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[21:44:01] [PASSED] single_pixel_source_buffer
[21:44:01] [PASSED] single_pixel_clip_rectangle
[21:44:01] [PASSED] well_known_colors
[21:44:01] [PASSED] destination_pitch
[21:44:01] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[21:44:01] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[21:44:01] [PASSED] single_pixel_source_buffer
[21:44:01] [PASSED] single_pixel_clip_rectangle
[21:44:01] [PASSED] well_known_colors
[21:44:01] [PASSED] destination_pitch
[21:44:01] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[21:44:01] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[21:44:01] [PASSED] single_pixel_source_buffer
[21:44:01] [PASSED] single_pixel_clip_rectangle
[21:44:01] [PASSED] well_known_colors
[21:44:01] [PASSED] destination_pitch
[21:44:01] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[21:44:01] ============== drm_test_fb_xrgb8888_to_mono ===============
[21:44:01] [PASSED] single_pixel_source_buffer
[21:44:01] [PASSED] single_pixel_clip_rectangle
[21:44:01] [PASSED] well_known_colors
[21:44:01] [PASSED] destination_pitch
[21:44:01] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[21:44:01] ==================== drm_test_fb_swab =====================
[21:44:01] [PASSED] single_pixel_source_buffer
[21:44:01] [PASSED] single_pixel_clip_rectangle
[21:44:01] [PASSED] well_known_colors
[21:44:01] [PASSED] destination_pitch
[21:44:01] ================ [PASSED] drm_test_fb_swab =================
[21:44:01] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[21:44:01] [PASSED] single_pixel_source_buffer
[21:44:01] [PASSED] single_pixel_clip_rectangle
[21:44:01] [PASSED] well_known_colors
[21:44:01] [PASSED] destination_pitch
[21:44:01] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[21:44:01] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[21:44:01] [PASSED] single_pixel_source_buffer
[21:44:01] [PASSED] single_pixel_clip_rectangle
[21:44:01] [PASSED] well_known_colors
[21:44:01] [PASSED] destination_pitch
[21:44:01] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[21:44:01] ================= drm_test_fb_clip_offset =================
[21:44:01] [PASSED] pass through
[21:44:01] [PASSED] horizontal offset
[21:44:01] [PASSED] vertical offset
[21:44:01] [PASSED] horizontal and vertical offset
[21:44:01] [PASSED] horizontal offset (custom pitch)
[21:44:01] [PASSED] vertical offset (custom pitch)
[21:44:01] [PASSED] horizontal and vertical offset (custom pitch)
[21:44:01] ============= [PASSED] drm_test_fb_clip_offset =============
[21:44:01] =================== drm_test_fb_memcpy ====================
[21:44:01] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[21:44:01] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[21:44:01] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[21:44:01] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[21:44:01] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[21:44:01] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[21:44:01] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[21:44:01] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[21:44:01] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[21:44:01] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[21:44:01] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[21:44:01] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[21:44:01] =============== [PASSED] drm_test_fb_memcpy ================
[21:44:01] ============= [PASSED] drm_format_helper_test ==============
[21:44:01] ================= drm_format (18 subtests) =================
[21:44:01] [PASSED] drm_test_format_block_width_invalid
[21:44:01] [PASSED] drm_test_format_block_width_one_plane
[21:44:01] [PASSED] drm_test_format_block_width_two_plane
[21:44:01] [PASSED] drm_test_format_block_width_three_plane
[21:44:01] [PASSED] drm_test_format_block_width_tiled
[21:44:01] [PASSED] drm_test_format_block_height_invalid
[21:44:01] [PASSED] drm_test_format_block_height_one_plane
[21:44:01] [PASSED] drm_test_format_block_height_two_plane
[21:44:01] [PASSED] drm_test_format_block_height_three_plane
[21:44:01] [PASSED] drm_test_format_block_height_tiled
[21:44:01] [PASSED] drm_test_format_min_pitch_invalid
[21:44:01] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[21:44:01] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[21:44:01] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[21:44:01] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[21:44:01] [PASSED] drm_test_format_min_pitch_two_plane
[21:44:01] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[21:44:01] [PASSED] drm_test_format_min_pitch_tiled
[21:44:01] =================== [PASSED] drm_format ====================
[21:44:01] ============== drm_framebuffer (10 subtests) ===============
[21:44:01] ========== drm_test_framebuffer_check_src_coords ==========
[21:44:01] [PASSED] Success: source fits into fb
[21:44:01] [PASSED] Fail: overflowing fb with x-axis coordinate
[21:44:01] [PASSED] Fail: overflowing fb with y-axis coordinate
[21:44:01] [PASSED] Fail: overflowing fb with source width
[21:44:01] [PASSED] Fail: overflowing fb with source height
[21:44:01] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[21:44:01] [PASSED] drm_test_framebuffer_cleanup
[21:44:01] =============== drm_test_framebuffer_create ===============
[21:44:01] [PASSED] ABGR8888 normal sizes
[21:44:01] [PASSED] ABGR8888 max sizes
[21:44:01] [PASSED] ABGR8888 pitch greater than min required
[21:44:01] [PASSED] ABGR8888 pitch less than min required
[21:44:01] [PASSED] ABGR8888 Invalid width
[21:44:01] [PASSED] ABGR8888 Invalid buffer handle
[21:44:01] [PASSED] No pixel format
[21:44:01] [PASSED] ABGR8888 Width 0
[21:44:01] [PASSED] ABGR8888 Height 0
[21:44:01] [PASSED] ABGR8888 Out of bound height * pitch combination
[21:44:01] [PASSED] ABGR8888 Large buffer offset
[21:44:01] [PASSED] ABGR8888 Buffer offset for inexistent plane
[21:44:01] [PASSED] ABGR8888 Invalid flag
[21:44:01] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[21:44:01] [PASSED] ABGR8888 Valid buffer modifier
[21:44:01] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[21:44:01] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[21:44:01] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[21:44:01] [PASSED] NV12 Normal sizes
[21:44:01] [PASSED] NV12 Max sizes
[21:44:01] [PASSED] NV12 Invalid pitch
[21:44:01] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[21:44:01] [PASSED] NV12 different modifier per-plane
[21:44:01] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[21:44:01] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[21:44:01] [PASSED] NV12 Modifier for inexistent plane
[21:44:01] [PASSED] NV12 Handle for inexistent plane
[21:44:01] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[21:44:01] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[21:44:01] [PASSED] YVU420 Normal sizes
[21:44:01] [PASSED] YVU420 Max sizes
[21:44:01] [PASSED] YVU420 Invalid pitch
[21:44:01] [PASSED] YVU420 Different pitches
[21:44:01] [PASSED] YVU420 Different buffer offsets/pitches
[21:44:01] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[21:44:01] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[21:44:01] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[21:44:01] [PASSED] YVU420 Valid modifier
[21:44:01] [PASSED] YVU420 Different modifiers per plane
[21:44:01] [PASSED] YVU420 Modifier for inexistent plane
[21:44:01] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[21:44:01] [PASSED] X0L2 Normal sizes
[21:44:01] [PASSED] X0L2 Max sizes
[21:44:01] [PASSED] X0L2 Invalid pitch
[21:44:01] [PASSED] X0L2 Pitch greater than minimum required
[21:44:01] [PASSED] X0L2 Handle for inexistent plane
[21:44:01] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[21:44:01] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[21:44:01] [PASSED] X0L2 Valid modifier
[21:44:01] [PASSED] X0L2 Modifier for inexistent plane
[21:44:01] =========== [PASSED] drm_test_framebuffer_create ===========
[21:44:01] [PASSED] drm_test_framebuffer_free
[21:44:01] [PASSED] drm_test_framebuffer_init
[21:44:01] [PASSED] drm_test_framebuffer_init_bad_format
[21:44:01] [PASSED] drm_test_framebuffer_init_dev_mismatch
[21:44:01] [PASSED] drm_test_framebuffer_lookup
[21:44:01] [PASSED] drm_test_framebuffer_lookup_inexistent
[21:44:01] [PASSED] drm_test_framebuffer_modifiers_not_supported
[21:44:01] ================= [PASSED] drm_framebuffer =================
[21:44:01] ================ drm_gem_shmem (8 subtests) ================
[21:44:01] [PASSED] drm_gem_shmem_test_obj_create
[21:44:01] [PASSED] drm_gem_shmem_test_obj_create_private
[21:44:01] [PASSED] drm_gem_shmem_test_pin_pages
[21:44:01] [PASSED] drm_gem_shmem_test_vmap
[21:44:01] [PASSED] drm_gem_shmem_test_get_sg_table
[21:44:01] [PASSED] drm_gem_shmem_test_get_pages_sgt
[21:44:01] [PASSED] drm_gem_shmem_test_madvise
[21:44:01] [PASSED] drm_gem_shmem_test_purge
[21:44:01] ================== [PASSED] drm_gem_shmem ==================
[21:44:01] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[21:44:01] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[21:44:01] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[21:44:01] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[21:44:01] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[21:44:01] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[21:44:01] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[21:44:01] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[21:44:01] [PASSED] Automatic
[21:44:01] [PASSED] Full
[21:44:01] [PASSED] Limited 16:235
[21:44:01] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[21:44:01] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[21:44:01] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[21:44:01] [PASSED] drm_test_check_disable_connector
[21:44:01] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[21:44:01] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[21:44:01] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[21:44:01] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[21:44:01] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[21:44:01] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[21:44:01] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[21:44:01] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[21:44:01] [PASSED] drm_test_check_output_bpc_dvi
[21:44:01] [PASSED] drm_test_check_output_bpc_format_vic_1
[21:44:01] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[21:44:01] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[21:44:01] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[21:44:01] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[21:44:01] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[21:44:01] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[21:44:01] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[21:44:01] ============ drm_test_check_hdmi_color_format =============
[21:44:01] [PASSED] AUTO -> RGB
[21:44:01] [PASSED] YCBCR422 -> YUV422
[21:44:01] [PASSED] YCBCR420 -> YUV420
[21:44:01] [PASSED] YCBCR444 -> YUV444
[21:44:01] [PASSED] RGB -> RGB
[21:44:01] ======== [PASSED] drm_test_check_hdmi_color_format =========
[21:44:01] ======== drm_test_check_hdmi_color_format_420_only ========
[21:44:01] [PASSED] RGB should fail
[21:44:01] [PASSED] YUV444 should fail
[21:44:01] [PASSED] YUV422 should fail
[21:44:01] [PASSED] YUV420 should work
[21:44:01] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[21:44:01] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[21:44:01] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[21:44:01] [PASSED] drm_test_check_broadcast_rgb_value
[21:44:01] [PASSED] drm_test_check_bpc_8_value
[21:44:01] [PASSED] drm_test_check_bpc_10_value
[21:44:01] [PASSED] drm_test_check_bpc_12_value
[21:44:01] [PASSED] drm_test_check_format_value
[21:44:01] [PASSED] drm_test_check_tmds_char_value
[21:44:01] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[21:44:01] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[21:44:01] [PASSED] drm_test_check_mode_valid
[21:44:01] [PASSED] drm_test_check_mode_valid_reject
[21:44:01] [PASSED] drm_test_check_mode_valid_reject_rate
[21:44:01] [PASSED] drm_test_check_mode_valid_reject_max_clock
[21:44:01] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[21:44:01] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[21:44:01] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[21:44:01] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[21:44:01] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[21:44:01] [PASSED] drm_test_check_infoframes
[21:44:01] [PASSED] drm_test_check_reject_avi_infoframe
[21:44:01] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[21:44:01] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[21:44:01] [PASSED] drm_test_check_reject_audio_infoframe
[21:44:01] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[21:44:01] ================= drm_managed (2 subtests) =================
[21:44:01] [PASSED] drm_test_managed_release_action
[21:44:01] [PASSED] drm_test_managed_run_action
[21:44:01] =================== [PASSED] drm_managed ===================
[21:44:01] =================== drm_mm (6 subtests) ====================
[21:44:01] [PASSED] drm_test_mm_init
[21:44:01] [PASSED] drm_test_mm_debug
[21:44:01] [PASSED] drm_test_mm_align32
[21:44:01] [PASSED] drm_test_mm_align64
[21:44:01] [PASSED] drm_test_mm_lowest
[21:44:01] [PASSED] drm_test_mm_highest
[21:44:01] ===================== [PASSED] drm_mm ======================
[21:44:01] ============= drm_modes_analog_tv (5 subtests) =============
[21:44:01] [PASSED] drm_test_modes_analog_tv_mono_576i
[21:44:01] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[21:44:01] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[21:44:01] [PASSED] drm_test_modes_analog_tv_pal_576i
[21:44:01] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[21:44:01] =============== [PASSED] drm_modes_analog_tv ===============
[21:44:01] ============== drm_panic_helper (3 subtests) ===============
[21:44:01] ============= drm_test_panic_screen_user_map ==============
[21:44:01] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[21:44:01] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[21:44:01] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[21:44:01] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[21:44:01] ========= [PASSED] drm_test_panic_screen_user_map ==========
[21:44:01] ============= drm_test_panic_screen_user_page =============
[21:44:01] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[21:44:01] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[21:44:01] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[21:44:01] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[21:44:01] ========= [PASSED] drm_test_panic_screen_user_page =========
[21:44:01] ========== drm_test_panic_screen_user_set_pixel ===========
[21:44:01] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[21:44:01] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[21:44:01] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[21:44:01] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[21:44:01] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[21:44:01] ====== [PASSED] drm_test_panic_screen_user_set_pixel =======
[21:44:01] ================ [PASSED] drm_panic_helper =================
[21:44:01] ============== drm_plane_helper (2 subtests) ===============
[21:44:01] =============== drm_test_check_plane_state ================
[21:44:01] [PASSED] clipping_simple
[21:44:01] [PASSED] clipping_rotate_reflect
[21:44:01] [PASSED] positioning_simple
[21:44:01] [PASSED] upscaling
[21:44:01] [PASSED] downscaling
[21:44:01] [PASSED] rounding1
[21:44:01] [PASSED] rounding2
[21:44:01] [PASSED] rounding3
[21:44:01] [PASSED] rounding4
[21:44:01] =========== [PASSED] drm_test_check_plane_state ============
[21:44:01] =========== drm_test_check_invalid_plane_state ============
[21:44:01] [PASSED] positioning_invalid
[21:44:01] [PASSED] upscaling_invalid
[21:44:01] [PASSED] downscaling_invalid
[21:44:01] ======= [PASSED] drm_test_check_invalid_plane_state ========
[21:44:01] ================ [PASSED] drm_plane_helper =================
[21:44:01] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[21:44:01] ====== drm_test_connector_helper_tv_get_modes_check =======
[21:44:01] [PASSED] None
[21:44:01] [PASSED] PAL
[21:44:01] [PASSED] NTSC
[21:44:01] [PASSED] Both, NTSC Default
[21:44:01] [PASSED] Both, PAL Default
[21:44:01] [PASSED] Both, NTSC Default, with PAL on command-line
[21:44:01] [PASSED] Both, PAL Default, with NTSC on command-line
[21:44:01] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[21:44:01] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[21:44:01] ================== drm_rect (9 subtests) ===================
[21:44:01] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[21:44:01] [PASSED] drm_test_rect_clip_scaled_not_clipped
[21:44:01] [PASSED] drm_test_rect_clip_scaled_clipped
[21:44:01] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[21:44:01] ================= drm_test_rect_intersect =================
[21:44:01] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[21:44:01] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[21:44:01] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[21:44:01] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[21:44:01] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[21:44:01] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[21:44:01] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[21:44:01] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[21:44:01] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[21:44:01] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[21:44:01] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[21:44:01] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[21:44:01] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[21:44:01] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[21:44:01] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[21:44:01] ============= [PASSED] drm_test_rect_intersect =============
[21:44:01] ================ drm_test_rect_calc_hscale ================
[21:44:01] [PASSED] normal use
[21:44:01] [PASSED] out of max range
[21:44:01] [PASSED] out of min range
[21:44:01] [PASSED] zero dst
[21:44:01] [PASSED] negative src
[21:44:01] [PASSED] negative dst
[21:44:01] ============ [PASSED] drm_test_rect_calc_hscale ============
[21:44:01] ================ drm_test_rect_calc_vscale ================
[21:44:01] [PASSED] normal use
[21:44:01] [PASSED] out of max range
[21:44:01] [PASSED] out of min range
[21:44:01] [PASSED] zero dst
[21:44:01] [PASSED] negative src
[21:44:01] [PASSED] negative dst
[21:44:01] ============ [PASSED] drm_test_rect_calc_vscale ============
[21:44:01] ================== drm_test_rect_rotate ===================
[21:44:01] [PASSED] reflect-x
[21:44:01] [PASSED] reflect-y
[21:44:01] [PASSED] rotate-0
[21:44:01] [PASSED] rotate-90
[21:44:01] [PASSED] rotate-180
[21:44:01] [PASSED] rotate-270
[21:44:01] ============== [PASSED] drm_test_rect_rotate ===============
[21:44:01] ================ drm_test_rect_rotate_inv =================
[21:44:01] [PASSED] reflect-x
[21:44:01] [PASSED] reflect-y
[21:44:01] [PASSED] rotate-0
[21:44:01] [PASSED] rotate-90
[21:44:01] [PASSED] rotate-180
[21:44:01] [PASSED] rotate-270
[21:44:01] ============ [PASSED] drm_test_rect_rotate_inv =============
[21:44:01] ==================== [PASSED] drm_rect =====================
[21:44:01] ============ drm_sysfb_modeset_test (1 subtest) ============
[21:44:01] ============ drm_test_sysfb_build_fourcc_list =============
[21:44:01] [PASSED] no native formats
[21:44:01] [PASSED] XRGB8888 as native format
[21:44:01] [PASSED] remove duplicates
[21:44:01] [PASSED] convert alpha formats
[21:44:01] [PASSED] random formats
[21:44:01] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[21:44:01] ============= [PASSED] drm_sysfb_modeset_test ==============
[21:44:01] ================== drm_fixp (2 subtests) ===================
[21:44:01] [PASSED] drm_test_int2fixp
[21:44:01] [PASSED] drm_test_sm2fixp
[21:44:01] ==================== [PASSED] drm_fixp =====================
[21:44:01] ============================================================
[21:44:01] Testing complete. Ran 667 tests: passed: 667
[21:44:01] Elapsed time: 28.131s total, 2.447s configuring, 25.218s building, 0.459s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[21:44:01] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[21:44:04] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[21:44:14] Starting KUnit Kernel (1/1)...
[21:44:14] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[21:44:14] ================= ttm_device (5 subtests) ==================
[21:44:14] [PASSED] ttm_device_init_basic
[21:44:14] [PASSED] ttm_device_init_multiple
[21:44:14] [PASSED] ttm_device_fini_basic
[21:44:14] [PASSED] ttm_device_init_no_vma_man
[21:44:14] ================== ttm_device_init_pools ==================
[21:44:14] [PASSED] No DMA allocations, no DMA32 required
[21:44:14] [PASSED] DMA allocations, DMA32 required
[21:44:14] [PASSED] No DMA allocations, DMA32 required
[21:44:14] [PASSED] DMA allocations, no DMA32 required
[21:44:14] ============== [PASSED] ttm_device_init_pools ==============
[21:44:14] =================== [PASSED] ttm_device ====================
[21:44:14] ================== ttm_pool (8 subtests) ===================
[21:44:14] ================== ttm_pool_alloc_basic ===================
[21:44:14] [PASSED] One page
[21:44:14] [PASSED] More than one page
[21:44:14] [PASSED] Above the allocation limit
[21:44:14] [PASSED] One page, with coherent DMA mappings enabled
[21:44:14] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[21:44:14] ============== [PASSED] ttm_pool_alloc_basic ===============
[21:44:14] ============== ttm_pool_alloc_basic_dma_addr ==============
[21:44:14] [PASSED] One page
[21:44:14] [PASSED] More than one page
[21:44:14] [PASSED] Above the allocation limit
[21:44:14] [PASSED] One page, with coherent DMA mappings enabled
[21:44:14] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[21:44:14] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[21:44:14] [PASSED] ttm_pool_alloc_order_caching_match
[21:44:14] [PASSED] ttm_pool_alloc_caching_mismatch
[21:44:14] [PASSED] ttm_pool_alloc_order_mismatch
[21:44:14] [PASSED] ttm_pool_free_dma_alloc
[21:44:14] [PASSED] ttm_pool_free_no_dma_alloc
[21:44:14] [PASSED] ttm_pool_fini_basic
[21:44:14] ==================== [PASSED] ttm_pool =====================
[21:44:14] ================ ttm_resource (8 subtests) =================
[21:44:14] ================= ttm_resource_init_basic =================
[21:44:14] [PASSED] Init resource in TTM_PL_SYSTEM
[21:44:14] [PASSED] Init resource in TTM_PL_VRAM
[21:44:14] [PASSED] Init resource in a private placement
[21:44:14] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[21:44:14] ============= [PASSED] ttm_resource_init_basic =============
[21:44:14] [PASSED] ttm_resource_init_pinned
[21:44:14] [PASSED] ttm_resource_fini_basic
[21:44:14] [PASSED] ttm_resource_manager_init_basic
[21:44:14] [PASSED] ttm_resource_manager_usage_basic
[21:44:14] [PASSED] ttm_resource_manager_set_used_basic
[21:44:14] [PASSED] ttm_sys_man_alloc_basic
[21:44:14] [PASSED] ttm_sys_man_free_basic
[21:44:14] ================== [PASSED] ttm_resource ===================
[21:44:14] =================== ttm_tt (15 subtests) ===================
[21:44:14] ==================== ttm_tt_init_basic ====================
[21:44:14] [PASSED] Page-aligned size
[21:44:14] [PASSED] Extra pages requested
[21:44:14] ================ [PASSED] ttm_tt_init_basic ================
[21:44:14] [PASSED] ttm_tt_init_misaligned
[21:44:14] [PASSED] ttm_tt_fini_basic
[21:44:14] [PASSED] ttm_tt_fini_sg
[21:44:14] [PASSED] ttm_tt_fini_shmem
[21:44:14] [PASSED] ttm_tt_create_basic
[21:44:14] [PASSED] ttm_tt_create_invalid_bo_type
[21:44:14] [PASSED] ttm_tt_create_ttm_exists
[21:44:14] [PASSED] ttm_tt_create_failed
[21:44:14] [PASSED] ttm_tt_destroy_basic
[21:44:14] [PASSED] ttm_tt_populate_null_ttm
[21:44:14] [PASSED] ttm_tt_populate_populated_ttm
[21:44:14] [PASSED] ttm_tt_unpopulate_basic
[21:44:14] [PASSED] ttm_tt_unpopulate_empty_ttm
[21:44:14] [PASSED] ttm_tt_swapin_basic
[21:44:14] ===================== [PASSED] ttm_tt ======================
[21:44:14] =================== ttm_bo (14 subtests) ===================
[21:44:14] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[21:44:14] [PASSED] Cannot be interrupted and sleeps
[21:44:14] [PASSED] Cannot be interrupted, locks straight away
[21:44:14] [PASSED] Can be interrupted, sleeps
[21:44:14] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[21:44:14] [PASSED] ttm_bo_reserve_locked_no_sleep
[21:44:14] [PASSED] ttm_bo_reserve_no_wait_ticket
[21:44:14] [PASSED] ttm_bo_reserve_double_resv
[21:44:14] [PASSED] ttm_bo_reserve_interrupted
[21:44:14] [PASSED] ttm_bo_reserve_deadlock
[21:44:14] [PASSED] ttm_bo_unreserve_basic
[21:44:14] [PASSED] ttm_bo_unreserve_pinned
[21:44:14] [PASSED] ttm_bo_unreserve_bulk
[21:44:14] [PASSED] ttm_bo_fini_basic
[21:44:14] [PASSED] ttm_bo_fini_shared_resv
[21:44:14] [PASSED] ttm_bo_pin_basic
[21:44:14] [PASSED] ttm_bo_pin_unpin_resource
[21:44:14] [PASSED] ttm_bo_multiple_pin_one_unpin
[21:44:14] ===================== [PASSED] ttm_bo ======================
[21:44:14] ============== ttm_bo_validate (22 subtests) ===============
[21:44:14] ============== ttm_bo_init_reserved_sys_man ===============
[21:44:14] [PASSED] Buffer object for userspace
[21:44:14] [PASSED] Kernel buffer object
[21:44:14] [PASSED] Shared buffer object
[21:44:14] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[21:44:14] ============== ttm_bo_init_reserved_mock_man ==============
[21:44:14] [PASSED] Buffer object for userspace
[21:44:14] [PASSED] Kernel buffer object
[21:44:14] [PASSED] Shared buffer object
[21:44:14] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[21:44:14] [PASSED] ttm_bo_init_reserved_resv
[21:44:14] ================== ttm_bo_validate_basic ==================
[21:44:14] [PASSED] Buffer object for userspace
[21:44:14] [PASSED] Kernel buffer object
[21:44:14] [PASSED] Shared buffer object
[21:44:14] ============== [PASSED] ttm_bo_validate_basic ==============
[21:44:14] [PASSED] ttm_bo_validate_invalid_placement
[21:44:14] ============= ttm_bo_validate_same_placement ==============
[21:44:14] [PASSED] System manager
[21:44:14] [PASSED] VRAM manager
[21:44:14] ========= [PASSED] ttm_bo_validate_same_placement ==========
[21:44:14] [PASSED] ttm_bo_validate_failed_alloc
[21:44:14] [PASSED] ttm_bo_validate_pinned
[21:44:14] [PASSED] ttm_bo_validate_busy_placement
[21:44:14] ================ ttm_bo_validate_multihop =================
[21:44:14] [PASSED] Buffer object for userspace
[21:44:14] [PASSED] Kernel buffer object
[21:44:14] [PASSED] Shared buffer object
[21:44:14] ============ [PASSED] ttm_bo_validate_multihop =============
[21:44:14] ========== ttm_bo_validate_no_placement_signaled ==========
[21:44:14] [PASSED] Buffer object in system domain, no page vector
[21:44:14] [PASSED] Buffer object in system domain with an existing page vector
[21:44:14] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[21:44:14] ======== ttm_bo_validate_no_placement_not_signaled ========
[21:44:14] [PASSED] Buffer object for userspace
[21:44:14] [PASSED] Kernel buffer object
[21:44:14] [PASSED] Shared buffer object
[21:44:14] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[21:44:14] [PASSED] ttm_bo_validate_move_fence_signaled
[21:44:14] ========= ttm_bo_validate_move_fence_not_signaled =========
[21:44:14] [PASSED] Waits for GPU
[21:44:14] [PASSED] Tries to lock straight away
[21:44:14] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[21:44:14] [PASSED] ttm_bo_validate_swapout
[21:44:14] [PASSED] ttm_bo_validate_happy_evict
[21:44:14] [PASSED] ttm_bo_validate_all_pinned_evict
[21:44:14] [PASSED] ttm_bo_validate_allowed_only_evict
[21:44:14] [PASSED] ttm_bo_validate_deleted_evict
[21:44:14] [PASSED] ttm_bo_validate_busy_domain_evict
[21:44:14] [PASSED] ttm_bo_validate_evict_gutting
[21:44:14] [PASSED] ttm_bo_validate_recrusive_evict
[21:44:14] ================= [PASSED] ttm_bo_validate =================
[21:44:14] ============================================================
[21:44:14] Testing complete. Ran 102 tests: passed: 102
[21:44:14] Elapsed time: 12.844s total, 2.535s configuring, 10.094s building, 0.185s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/dma-buf/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[21:44:14] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[21:44:17] 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
[21:44:26] Starting KUnit Kernel (1/1)...
[21:44:26] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[21:44:26] =============== dma-buf-fence (12 subtests) ================
[21:44:26] [PASSED] test_sanitycheck
[21:44:26] [PASSED] test_signaling
[21:44:26] [PASSED] test_add_callback
[21:44:26] [PASSED] test_late_add_callback
[21:44:26] [PASSED] test_rm_callback
[21:44:26] [PASSED] test_late_rm_callback
[21:44:26] [PASSED] test_status
[21:44:26] [PASSED] test_error
[21:44:26] [PASSED] test_wait
[21:44:26] [PASSED] test_wait_timeout
[21:44:26] [PASSED] test_stub
[21:44:26] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[21:44:26] ================== [PASSED] dma-buf-fence ==================
[21:44:26] ============ dma-buf-fence-chain (11 subtests) =============
[21:44:26] [PASSED] test_sanitycheck
[21:44:26] [PASSED] test_find_seqno
[21:44:26] [PASSED] test_find_signaled
[21:44:26] [PASSED] test_find_out_of_order
[21:44:31] [PASSED] test_find_gap
[21:44:31] [PASSED] test_find_race
[21:44:31] [PASSED] test_signal_forward
[21:44:31] [PASSED] test_signal_backward
[21:44:31] [PASSED] test_wait_forward
[21:44:31] [PASSED] test_wait_backward
[21:44:31] [PASSED] test_wait_random
[21:44:31] =============== [PASSED] dma-buf-fence-chain ===============
[21:44:31] ============ dma-buf-fence-unwrap (11 subtests) ============
[21:44:31] [PASSED] test_sanitycheck
[21:44:31] [PASSED] test_unwrap_array
[21:44:31] [PASSED] test_unwrap_chain
[21:44:31] [PASSED] test_unwrap_chain_array
[21:44:31] [PASSED] test_unwrap_merge
[21:44:31] [PASSED] test_unwrap_merge_duplicate
[21:44:31] [PASSED] test_unwrap_merge_seqno
[21:44:31] [PASSED] test_unwrap_merge_order
[21:44:31] [PASSED] test_unwrap_merge_complex
[21:44:31] [PASSED] test_unwrap_merge_complex_seqno
[21:44:31] [PASSED] test_dedup_empty
[21:44:31] ============== [PASSED] dma-buf-fence-unwrap ===============
[21:44:31] ================ dma-buf-resv (5 subtests) =================
[21:44:31] [PASSED] test_sanitycheck
[21:44:31] ===================== test_signaling ======================
[21:44:31] [PASSED] kernel
[21:44:31] [PASSED] write
[21:44:31] [PASSED] read
[21:44:31] [PASSED] bookkeep
[21:44:31] ================= [PASSED] test_signaling ==================
[21:44:31] ====================== test_for_each ======================
[21:44:31] [PASSED] kernel
[21:44:31] [PASSED] write
[21:44:31] [PASSED] read
[21:44:31] [PASSED] bookkeep
[21:44:31] ================== [PASSED] test_for_each ==================
[21:44:31] ================= test_for_each_unlocked ==================
[21:44:31] [PASSED] kernel
[21:44:31] [PASSED] write
[21:44:31] [PASSED] read
[21:44:31] [PASSED] bookkeep
[21:44:31] ============= [PASSED] test_for_each_unlocked ==============
[21:44:31] ===================== test_get_fences =====================
[21:44:31] [PASSED] kernel
[21:44:31] [PASSED] write
[21:44:31] [PASSED] read
[21:44:31] [PASSED] bookkeep
[21:44:31] ================= [PASSED] test_get_fences =================
[21:44:31] ================== [PASSED] dma-buf-resv ===================
[21:44:31] ============================================================
[21:44:31] Testing complete. Ran 51 tests: passed: 50, skipped: 1
[21:44:31] Elapsed time: 16.778s total, 2.510s configuring, 8.897s building, 5.336s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 12+ messages in thread
* ✓ Xe.CI.BAT: success for Set up for debug configfs group
2026-11-12 21:35 [PATCH 0/8] Set up for debug configfs group Stuart Summers
` (9 preceding siblings ...)
2026-11-12 21:44 ` ✓ CI.KUnit: success " Patchwork
@ 2026-11-12 22:15 ` Patchwork
10 siblings, 0 replies; 12+ messages in thread
From: Patchwork @ 2026-11-12 22:15 UTC (permalink / raw)
To: Stuart Summers; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 1418 bytes --]
== Series Details ==
Series: Set up for debug configfs group
URL : https://patchwork.freedesktop.org/series/178440/
State : success
== Summary ==
CI Bug Log - changes from xe-6129-ff450c62bc560177d72d0520f53ed445bbf704f6_BAT -> xe-pw-178440v1_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-178440v1_BAT that come from known issues:
### IGT changes ###
#### Possible fixes ####
* igt@core_hotunplug@unbind-rebind:
- bat-bmg-2: [ABORT][1] ([Intel XE#9463]) -> [PASS][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-6129-ff450c62bc560177d72d0520f53ed445bbf704f6/bat-bmg-2/igt@core_hotunplug@unbind-rebind.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178440v1/bat-bmg-2/igt@core_hotunplug@unbind-rebind.html
[Intel XE#9463]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9463
Build changes
-------------
* Linux: xe-6129-ff450c62bc560177d72d0520f53ed445bbf704f6 -> xe-pw-178440v1
IGT_9189: 9189
xe-6129-ff450c62bc560177d72d0520f53ed445bbf704f6: ff450c62bc560177d72d0520f53ed445bbf704f6
xe-pw-178440v1: 178440v1
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-178440v1/index.html
[-- Attachment #2: Type: text/html, Size: 1983 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2026-11-12 22:15 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-12 21:35 [PATCH 0/8] Set up for debug configfs group Stuart Summers
2026-11-12 21:35 ` [PATCH 1/8] drm/xe: Guard configfs attribute reads in getters Stuart Summers
2026-11-12 21:35 ` [PATCH 2/8] drm/xe/configfs: Fix out-of-bounds read in parse_wa_bb_lines() Stuart Summers
2026-11-12 21:35 ` [PATCH 3/8] drm/xe/configfs: Copy wa_bb out under the configfs lock Stuart Summers
2026-11-12 21:35 ` [PATCH 4/8] drm/xe: Invert vram_page_offline configfs attribute Stuart Summers
2026-11-12 21:35 ` [PATCH 5/8] drm/xe: Make survivability_mode configfs attribute a bitmap Stuart Summers
2026-11-12 21:35 ` [PATCH 6/8] drm/xe: Sort xe_config_device fields Stuart Summers
2026-11-12 21:35 ` [PATCH 7/8] drm/xe: Split out configfs data structures Stuart Summers
2026-11-12 21:35 ` [PATCH 8/8] drm/xe: Add a new debug focused configfs group Stuart Summers
2026-11-12 21:42 ` ✗ CI.checkpatch: warning for Set up for debug " Patchwork
2026-11-12 21:44 ` ✓ CI.KUnit: success " Patchwork
2026-11-12 22:15 ` ✓ Xe.CI.BAT: " 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.