* [PATCH 02/15] drm/xe/configfs: Fix out-of-bounds read in parse_wa_bb_lines()
2026-10-05 19:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
@ 2026-10-05 19:06 ` Stuart Summers
0 siblings, 0 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 19:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, 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>
Assisted-by: LLM
---
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 e1cf5af958bc..1c7a096aa046 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] 22+ messages in thread
* [PATCH 00/15] Add new debug infrastructure for configfs
@ 2026-10-05 22:06 Stuart Summers
2026-10-05 22:06 ` [PATCH 01/15] drm/xe: Guard configfs attribute reads in getters Stuart Summers
` (18 more replies)
0 siblings, 19 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 22:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, Stuart Summers
Add a new configfs debug group. The intent of this structure is
to allow us to separate ABI facing configfs entries from those
which are purely for debug purposes. And it allows us more flexibility
in how we define those parameters used for debug.
Add a new infrastructure to this debug configfs group that lets us
easily define the parameters in a quick list. This is primarily
useful for simple, single-type parameters such as enable/disable
features or simple values passed. For more complex parameters,
we will still need to define these separately.
Pull the GuC target related changes from [1] to fit within
this new structure and add a new definition for guc_log_level
on top of the existing module parameter (to ensure we aren't
impacting existing users of the module parameter).
Note that the debug parameters here are all to be used "at your
own risk". Without having in depth knowledge of how these impact
the software and hardware, there could be unforeseen consequences
of setting them. As such, they are all wrapped in a
CONFIG_DRM_XE_DEBUG configfs option.
In terms of the patches here, I'm sorting the existing parameters
by name/type. I know we have a few other module parameters that
could migrate here, but I didn't want to overload this series
too much, so the focus for now is on the existing configfs entries
and demonstrating the new structures with the GuC log level and
target parameters.
I used GitHub Copilot with Claude pretty extensively through the
process here and attributed as such. Happy to answer any questions
around this. Took a bit of time getting back to this series around
other work, and in that time I was playing around with a few different
models, hence some of the patches are showing multiple of them. I
tried to attribute each as I was implementing the changes.
I also decided to drop John Harrison from the NPK patch. It has
been modified quite a bit from the original, but more importantly
John is no longer with Intel and that email address isn't available
any more. If it makes a difference here, John and I had both separately
implemented this same change at different occasions for debug. The
one I used to start that initial series was cherry-picked from his
latest variant.
v2:
- In this second revision I did confirm that the guc_log_level
module parameter is taking precedence over the configfs parameter
and ensured the other parameters seem to be autogenerating and
working as expected.
- I tried to address all the review feedback from the first
revision, [2].
- I also did another pass on the sorting since there were a few
discrepancies I noticed in the first revision. I kept Gustavo's
R-B on that one, but would like an ack before merging at least
to confirm the patch is sane.
- And finally I moved the getter functions into the X-macro
generators so we can autogenerate more of the similar functions
between the different parameters in that debug param list.
v3:
- Address a couple of comments from Sashiko around GuC log level
input checking and proper guard implementation.
v4:
- More review feedback from Sashiko addressed...
v5:
- Move the goto to a return (more Sashiko feedback) in the GuC
log level setter before moving to the X-macro solution.
v6:
- Make the autogenerated X-macro function names more specific to
avoid naming collisions (Sashiko again).
v7:
- Fix the couple of pre-existing bugs called out by Sashiko in
the prior rev...
- Make CONFIGFS_FS a required config for xe to avoid issues with
stale values in the fallback getters.
- Renamed disable_vram_page_offline to enable_vram_page_offline
for a more consistent naming scheme (this was a new configfs
entry added since the prior rev).
- Converted survivability_mode to a u8 bitmap to allow for
extendability in the future. Only bit 0 is defined, so the behavior
should be the same.
- Added an enable_media module parameter at the end of the series.
gt_types_allowed is debug-only, so this gives production builds a
supported way to leave the media GT alone. The modparam takes
precedence over configfs.
- Adjust the sorting to be alphabetical for the documentation
specifically (Matt)
v8:
- Revert the CONFIGFS_FS require change from the previous rev (Matt)
- Rebase on the latest which adds a new ulls configfs that is going
into the production list.
- Use Assisted-by: LLM as documented on the latest kernel.org site for
AI attribution.
v9:
- Fix regression in previous rev where the engine and GT type configfs
default masks weren't set properly causing driver load to fail.
Stuart Summers (15):
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
drm/xe: Move debug configfs entries to xe_configfs_debug.c
drm/xe/guc: Add configfs support for guc_log_level
drm/xe/guc: Add support for NPK as a GuC log target
drm/xe: Add infrastructure for debug configfs parameters
drm/xe: Migrate existing debug configfs entries to params
infrastructure
drm/xe: Taint kernel when debug configfs parameters are set
drm/xe: Add enable_media module parameter
drivers/gpu/drm/xe/Makefile | 3 +
drivers/gpu/drm/xe/abi/guc_log_abi.h | 8 +
drivers/gpu/drm/xe/xe_configfs.c | 1112 ++---------------
drivers/gpu/drm/xe/xe_configfs.h | 105 +-
drivers/gpu/drm/xe/xe_configfs_debug.c | 899 +++++++++++++
drivers/gpu/drm/xe/xe_configfs_debug.h | 51 +
drivers/gpu/drm/xe/xe_configfs_debug_params.c | 158 +++
drivers/gpu/drm/xe/xe_configfs_debug_params.h | 194 +++
drivers/gpu/drm/xe/xe_configfs_types.h | 61 +
drivers/gpu/drm/xe/xe_defaults.h | 6 +
drivers/gpu/drm/xe/xe_drm_ras_types.h | 4 +-
drivers/gpu/drm/xe/xe_guc.c | 14 +-
drivers/gpu/drm/xe/xe_guc_ads.c | 1 +
drivers/gpu/drm/xe/xe_guc_log.c | 3 +-
drivers/gpu/drm/xe/xe_hw_engine.c | 1 +
drivers/gpu/drm/xe/xe_lrc.c | 39 +-
drivers/gpu/drm/xe/xe_module.c | 6 +
drivers/gpu/drm/xe/xe_module.h | 1 +
drivers/gpu/drm/xe/xe_pci.c | 20 +-
drivers/gpu/drm/xe/xe_psmi.c | 3 +-
drivers/gpu/drm/xe/xe_ras.c | 9 +-
drivers/gpu/drm/xe/xe_rtp.c | 3 +-
drivers/gpu/drm/xe/xe_survivability_mode.c | 7 +-
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 2 +-
24 files changed, 1648 insertions(+), 1062 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_debug_params.c
create mode 100644 drivers/gpu/drm/xe/xe_configfs_debug_params.h
create mode 100644 drivers/gpu/drm/xe/xe_configfs_types.h
--
2.43.0
^ permalink raw reply [flat|nested] 22+ messages in thread
* [PATCH 01/15] drm/xe: Guard configfs attribute reads in getters
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
@ 2026-10-05 22:06 ` Stuart Summers
2026-10-05 22:06 ` [PATCH 02/15] drm/xe/configfs: Fix out-of-bounds read in parse_wa_bb_lines() Stuart Summers
` (17 subsequent siblings)
18 siblings, 0 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 22:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, 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>
Assisted-by: LLM
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 ad4bfd3c0703..e1cf5af958bc 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] 22+ messages in thread
* [PATCH 02/15] drm/xe/configfs: Fix out-of-bounds read in parse_wa_bb_lines()
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
2026-10-05 22:06 ` [PATCH 01/15] drm/xe: Guard configfs attribute reads in getters Stuart Summers
@ 2026-10-05 22:06 ` Stuart Summers
2026-10-05 22:06 ` [PATCH 03/15] drm/xe/configfs: Copy wa_bb out under the configfs lock Stuart Summers
` (16 subsequent siblings)
18 siblings, 0 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 22:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, 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>
Assisted-by: LLM
---
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 e1cf5af958bc..1c7a096aa046 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] 22+ messages in thread
* [PATCH 03/15] drm/xe/configfs: Copy wa_bb out under the configfs lock
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
2026-10-05 22:06 ` [PATCH 01/15] drm/xe: Guard configfs attribute reads in getters Stuart Summers
2026-10-05 22:06 ` [PATCH 02/15] drm/xe/configfs: Fix out-of-bounds read in parse_wa_bb_lines() Stuart Summers
@ 2026-10-05 22:06 ` Stuart Summers
2026-10-05 22:06 ` [PATCH 04/15] drm/xe: Invert vram_page_offline configfs attribute Stuart Summers
` (15 subsequent siblings)
18 siblings, 0 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 22:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, 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>
Assisted-by: LLM
---
drivers/gpu/drm/xe/xe_configfs.c | 52 ++++++++++++++++++++++----------
drivers/gpu/drm/xe/xe_configfs.h | 24 +++++++--------
drivers/gpu/drm/xe/xe_lrc.c | 38 +++++++----------------
3 files changed, 59 insertions(+), 55 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 1c7a096aa046..6e62fdccb4c4 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 10a00d6bbf8f..14e49f23306f 100644
--- a/drivers/gpu/drm/xe/xe_configfs.h
+++ b/drivers/gpu/drm/xe/xe_configfs.h
@@ -26,12 +26,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);
@@ -48,12 +48,12 @@ static inline bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev) { return f
static inline bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev) { return true; }
static inline u32 xe_configfs_get_migrate_ulls_period_ms(struct pci_dev *pdev) { return 5; }
static inline bool xe_configfs_get_disable_vram_page_offline(struct pci_dev *pdev) { return false; }
-static inline u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
- enum xe_engine_class class,
- const u32 **cs) { return 0; }
-static inline u32 xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
- enum xe_engine_class class,
- const u32 **cs) { return 0; }
+static inline ssize_t xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
+ enum xe_engine_class class,
+ u32 *cs, size_t max_len) { return 0; }
+static inline ssize_t xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
+ enum xe_engine_class class,
+ u32 *cs, size_t max_len) { return 0; }
#ifdef CONFIG_PCI_IOV
static inline unsigned int xe_configfs_get_max_vfs(struct pci_dev *pdev)
{
diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
index de9a9560ecf3..f751687dc568 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] 22+ messages in thread
* [PATCH 04/15] drm/xe: Invert vram_page_offline configfs attribute
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
` (2 preceding siblings ...)
2026-10-05 22:06 ` [PATCH 03/15] drm/xe/configfs: Copy wa_bb out under the configfs lock Stuart Summers
@ 2026-10-05 22:06 ` Stuart Summers
2026-10-05 22:06 ` [PATCH 05/15] drm/xe: Make survivability_mode configfs attribute a bitmap Stuart Summers
` (14 subsequent siblings)
18 siblings, 0 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 22:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, 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>
Assisted-by: LLM
---
drivers/gpu/drm/xe/xe_configfs.c | 44 +++++++++++++--------------
drivers/gpu/drm/xe/xe_configfs.h | 2 +-
drivers/gpu/drm/xe/xe_drm_ras_types.h | 4 +--
drivers/gpu/drm/xe/xe_ras.c | 8 +++--
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 2 +-
5 files changed, 31 insertions(+), 29 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 6e62fdccb4c4..0ccf163306fc 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 14e49f23306f..1d538ce0ed2c 100644
--- a/drivers/gpu/drm/xe/xe_configfs.h
+++ b/drivers/gpu/drm/xe/xe_configfs.h
@@ -25,7 +25,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_drm_ras_types.h b/drivers/gpu/drm/xe/xe_drm_ras_types.h
index 0be218ba2db7..60cbc35a6b35 100644
--- a/drivers/gpu/drm/xe/xe_drm_ras_types.h
+++ b/drivers/gpu/drm/xe/xe_drm_ras_types.h
@@ -44,8 +44,8 @@ struct xe_drm_ras {
/** @info: info array for all types of errors */
struct xe_drm_ras_counter *info[DRM_XE_RAS_ERR_SEV_MAX];
- /** @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;
};
#endif
diff --git a/drivers/gpu/drm/xe/xe_ras.c b/drivers/gpu/drm/xe/xe_ras.c
index 7a85735c57d5..ce9b57b3eede 100644
--- a/drivers/gpu/drm/xe/xe_ras.c
+++ b/drivers/gpu/drm/xe/xe_ras.c
@@ -916,13 +916,15 @@ void xe_ras_init(struct xe_device *xe)
{
int ret;
+ xe->ras.enable_vram_page_offline = true;
+
/*
- * TODO: Replace platform check with xe->info.has_disable_vram_page_offline
+ * TODO: Replace platform check with xe->info.has_vram_page_offline
* once the feature flag is plumbed through device info.
*/
if (xe->info.platform == XE_CRESCENTISLAND)
- xe->ras.disable_vram_page_offline =
- xe_configfs_get_disable_vram_page_offline(to_pci_dev(xe->drm.dev));
+ xe->ras.enable_vram_page_offline =
+ xe_configfs_get_enable_vram_page_offline(to_pci_dev(xe->drm.dev));
xe_drm_ras_init(xe);
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 9a514d983e90..1dad94a153b7 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -933,7 +933,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.disable_vram_page_offline) {
+ if (!xe->ras.enable_vram_page_offline) {
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] 22+ messages in thread
* [PATCH 05/15] drm/xe: Make survivability_mode configfs attribute a bitmap
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
` (3 preceding siblings ...)
2026-10-05 22:06 ` [PATCH 04/15] drm/xe: Invert vram_page_offline configfs attribute Stuart Summers
@ 2026-10-05 22:06 ` Stuart Summers
2026-10-05 22:06 ` [PATCH 06/15] drm/xe: Sort xe_config_device fields Stuart Summers
` (13 subsequent siblings)
18 siblings, 0 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 22:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, 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>
Assisted-by: LLM
---
drivers/gpu/drm/xe/xe_configfs.c | 25 +++++++++++++---------
drivers/gpu/drm/xe/xe_configfs.h | 16 ++++++++++++--
drivers/gpu/drm/xe/xe_survivability_mode.c | 7 +++---
3 files changed, 33 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 0ccf163306fc..a16e2f48b01a 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 1d538ce0ed2c..a5c081fc1672 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,11 +15,22 @@
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
+
#if IS_ENABLED(CONFIG_CONFIGFS_FS)
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);
@@ -40,7 +52,7 @@ bool xe_configfs_admin_only_pf(struct pci_dev *pdev);
static inline int xe_configfs_init(void) { return 0; }
static inline void xe_configfs_exit(void) { }
static inline void xe_configfs_check_device(struct pci_dev *pdev) { }
-static inline bool xe_configfs_get_survivability_mode(struct pci_dev *pdev) { return false; }
+static inline u8 xe_configfs_get_survivability_mode(struct pci_dev *pdev) { return 0; }
static inline bool xe_configfs_primary_gt_allowed(struct pci_dev *pdev) { return true; }
static inline bool xe_configfs_media_gt_allowed(struct pci_dev *pdev) { return true; }
static inline u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev) { return U64_MAX; }
diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
index 45d44ebe288b..3b96097f6ee6 100644
--- a/drivers/gpu/drm/xe/xe_survivability_mode.c
+++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
@@ -306,7 +306,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;
@@ -405,14 +406,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] 22+ messages in thread
* [PATCH 06/15] drm/xe: Sort xe_config_device fields
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
` (4 preceding siblings ...)
2026-10-05 22:06 ` [PATCH 05/15] drm/xe: Make survivability_mode configfs attribute a bitmap Stuart Summers
@ 2026-10-05 22:06 ` Stuart Summers
2026-10-05 22:06 ` [PATCH 07/15] drm/xe: Split out configfs data structures Stuart Summers
` (12 subsequent siblings)
18 siblings, 0 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 22:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, 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>
Assisted-by: LLM
Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com>
---
drivers/gpu/drm/xe/xe_configfs.c | 1338 +++++++++++++++---------------
drivers/gpu/drm/xe/xe_configfs.h | 32 +-
2 files changed, 692 insertions(+), 678 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index a16e2f48b01a..4a92a6f22311 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 a5c081fc1672..275086e50451 100644
--- a/drivers/gpu/drm/xe/xe_configfs.h
+++ b/drivers/gpu/drm/xe/xe_configfs.h
@@ -30,20 +30,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);
@@ -52,20 +52,20 @@ bool xe_configfs_admin_only_pf(struct pci_dev *pdev);
static inline int xe_configfs_init(void) { return 0; }
static inline void xe_configfs_exit(void) { }
static inline void xe_configfs_check_device(struct pci_dev *pdev) { }
-static inline u8 xe_configfs_get_survivability_mode(struct pci_dev *pdev) { return 0; }
-static inline bool xe_configfs_primary_gt_allowed(struct pci_dev *pdev) { return true; }
-static inline bool xe_configfs_media_gt_allowed(struct pci_dev *pdev) { return true; }
-static inline u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev) { return U64_MAX; }
-static inline bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev) { return false; }
-static inline bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev) { return true; }
-static inline u32 xe_configfs_get_migrate_ulls_period_ms(struct pci_dev *pdev) { return 5; }
-static inline bool xe_configfs_get_disable_vram_page_offline(struct pci_dev *pdev) { return false; }
static inline ssize_t xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
enum xe_engine_class class,
u32 *cs, size_t max_len) { return 0; }
static inline ssize_t xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
enum xe_engine_class class,
u32 *cs, size_t max_len) { return 0; }
+static inline u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev) { return U64_MAX; }
+static inline bool xe_configfs_primary_gt_allowed(struct pci_dev *pdev) { return true; }
+static inline bool xe_configfs_media_gt_allowed(struct pci_dev *pdev) { return true; }
+static inline u32 xe_configfs_get_migrate_ulls_period_ms(struct pci_dev *pdev) { return 5; }
+static inline u8 xe_configfs_get_survivability_mode(struct pci_dev *pdev) { return 0; }
+static inline bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev) { return true; }
+static inline bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev) { return false; }
+static inline bool xe_configfs_get_disable_vram_page_offline(struct pci_dev *pdev) { return false; }
#ifdef CONFIG_PCI_IOV
static inline unsigned int xe_configfs_get_max_vfs(struct pci_dev *pdev)
{
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 07/15] drm/xe: Split out configfs data structures
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
` (5 preceding siblings ...)
2026-10-05 22:06 ` [PATCH 06/15] drm/xe: Sort xe_config_device fields Stuart Summers
@ 2026-10-05 22:06 ` Stuart Summers
2026-10-05 22:06 ` [PATCH 08/15] drm/xe: Add a new debug focused configfs group Stuart Summers
` (11 subsequent siblings)
18 siblings, 0 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 22:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, 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>
Assisted-by: LLM
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 4a92a6f22311..16884fa035a8 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 275086e50451..c832de85b771 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] 22+ messages in thread
* [PATCH 08/15] drm/xe: Add a new debug focused configfs group
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
` (6 preceding siblings ...)
2026-10-05 22:06 ` [PATCH 07/15] drm/xe: Split out configfs data structures Stuart Summers
@ 2026-10-05 22:06 ` Stuart Summers
2026-10-05 22:06 ` [PATCH 09/15] drm/xe: Move debug configfs entries to xe_configfs_debug.c Stuart Summers
` (10 subsequent siblings)
18 siblings, 0 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 22:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, 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>
Assisted-by: LLM
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 10930c924070..23accd9e6503 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -167,6 +167,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
# graphics virtualization (SR-IOV) support
xe-y += \
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 16884fa035a8..8c2c912594fa 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] 22+ messages in thread
* [PATCH 09/15] drm/xe: Move debug configfs entries to xe_configfs_debug.c
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
` (7 preceding siblings ...)
2026-10-05 22:06 ` [PATCH 08/15] drm/xe: Add a new debug focused configfs group Stuart Summers
@ 2026-10-05 22:06 ` Stuart Summers
2026-10-05 22:06 ` [PATCH 10/15] drm/xe/guc: Add configfs support for guc_log_level Stuart Summers
` (9 subsequent siblings)
18 siblings, 0 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 22:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, Stuart Summers
Move the debug specific configfs attributes into the new
xe_configfs_debug.c file under a new debug configfs subdirectory.
Ensure these are wrapped in CONFIG_DRM_XE_DEBUG to allow finer grained
debug changes outside of more ABI specific configfs entries.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: LLM
---
drivers/gpu/drm/xe/xe_configfs.c | 1058 ++----------------------
drivers/gpu/drm/xe/xe_configfs.h | 88 +-
drivers/gpu/drm/xe/xe_configfs_debug.c | 979 ++++++++++++++++++++++
drivers/gpu/drm/xe/xe_configfs_debug.h | 42 +-
drivers/gpu/drm/xe/xe_configfs_types.h | 18 +-
drivers/gpu/drm/xe/xe_guc.c | 1 +
drivers/gpu/drm/xe/xe_guc_ads.c | 1 +
drivers/gpu/drm/xe/xe_hw_engine.c | 1 +
drivers/gpu/drm/xe/xe_lrc.c | 1 +
drivers/gpu/drm/xe/xe_pci.c | 1 +
drivers/gpu/drm/xe/xe_psmi.c | 1 +
drivers/gpu/drm/xe/xe_ras.c | 1 +
drivers/gpu/drm/xe/xe_rtp.c | 1 +
13 files changed, 1190 insertions(+), 1003 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 8c2c912594fa..8e5ebb3ecfa7 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -6,17 +6,14 @@
#include <linux/bitops.h>
#include <linux/configfs.h>
#include <linux/cleanup.h>
-#include <linux/find.h>
#include <linux/init.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/string.h>
-#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"
/**
@@ -55,13 +52,6 @@
* │ └── ...
* :
* └── 0000:03:00.0
- * ├── 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
* └── survivability_mode
*
@@ -75,158 +65,18 @@
* Configure Attributes
* ====================
*
- * Context restore BB
- * ------------------
- *
- * 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.
- *
- * The syntax allows to pass straight instructions to be executed by the engine
- * in a batch buffer or set specific registers.
- *
- * #. Generic instruction::
- *
- * <engine-class> cmd <instr> [[dword0] [dword1] [...]]
- *
- * #. Simple register setting::
- *
- * <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.
- *
- * PSMI
- * ----
- *
- * 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 1 > /sys/kernel/config/xe/0000:03:00.0/enable_psmi
- *
- * 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
- *
- * This attribute can only be set on CRI before binding to the device.
- *
- * Allowed engines:
- * ----------------
- *
- * Allow only a set of engine(s) to be available, disabling the other engines
- * even if they are available in hardware. This is applied after HW fuses are
- * considered on each tile. Examples:
- *
- * Allow only one render and one copy engines, nothing else::
- *
- * # echo 'rcs0,bcs0' > /sys/kernel/config/xe/0000:03:00.0/engines_allowed
- *
- * Allow only compute engines and first copy engine::
- *
- * # echo 'ccs*,bcs0' > /sys/kernel/config/xe/0000:03:00.0/engines_allowed
- *
- * Note that the engine names are the per-GT hardware names. On multi-tile
- * platforms, writing ``rcs0,bcs0`` to this file would allow the first render
- * and copy engines on each tile.
- *
- * The requested configuration may not be supported by the platform and driver
- * may fail to probe. For example: if at least one copy engine is expected to be
- * available for migrations, but it's disabled. This is intended for debugging
- * purposes only.
- *
- * This attribute can only be set before binding to the device.
- *
- * Allowed GT types:
- * -----------------
+ * Survivability mode:
+ * -------------------
*
- * 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.
+ * 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::
*
- * 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.
+ * # echo 1 > /sys/kernel/config/xe/0000:03:00.0/survivability_mode
*
* This attribute can only be set before binding to the device.
*
- * Examples:
- *
- * Allow both primary and media GTs to be initialized and used. This matches
- * the driver's default behavior::
- *
- * # echo 'primary,media' > /sys/kernel/config/xe/0000:03:00.0/gt_types_allowed
- *
- * Allow only the primary GT of each tile to be initialized and used,
- * effectively disabling the media GT if it exists on the platform::
- *
- * # echo 'primary' > /sys/kernel/config/xe/0000:03:00.0/gt_types_allowed
- *
- * 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**::
- *
- * # echo 'media' > /sys/kernel/config/xe/0000:03:00.0/gt_types_allowed
- *
- * 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 '' > /sys/kernel/config/xe/0000:03:00.0/gt_types_allowed
- *
* Migrate ULLS Period (ms)
* ------------------------
*
@@ -241,18 +91,6 @@
*
* This attribute can only be set before binding to the device.
*
- * Survivability mode:
- * -------------------
- *
- * 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
- *
- * This attribute can only be set before binding to the device.
- *
* Max SR-IOV Virtual Functions
* ----------------------------
*
@@ -287,14 +125,18 @@
* # rmdir /sys/kernel/config/xe/0000:03:00.0/
*/
-static const struct xe_config_device device_defaults = {
- .engines_allowed = U64_MAX,
- .gt_types_allowed = U64_MAX,
+const struct xe_config_device xe_configfs_device_defaults = {
.migrate_ulls_period_ms = 5,
.survivability_mode = 0,
- .enable_multi_queue = true,
- .enable_psmi = false,
- .enable_vram_page_offline = true,
+#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
+ .debug = {
+ .engines_allowed = U64_MAX,
+ .gt_types_allowed = U64_MAX,
+ .enable_multi_queue = true,
+ .enable_psmi = false,
+ .enable_vram_page_offline = true,
+ },
+#endif
.sriov = {
.max_vfs = XE_DEFAULT_MAX_VFS,
.admin_only_pf = XE_DEFAULT_ADMIN_ONLY_PF,
@@ -303,50 +145,22 @@ static const struct xe_config_device device_defaults = {
static void set_device_defaults(struct xe_config_device *config)
{
- *config = device_defaults;
+ *config = xe_configfs_device_defaults;
#ifdef CONFIG_PCI_IOV
config->sriov.max_vfs = xe_modparam.max_vfs;
#endif
}
-struct engine_info {
- const char *cls;
- u64 mask;
- enum xe_engine_class engine_class;
-};
-
-/* Some helpful macros to aid on the sizing of buffer allocation when parsing */
-#define MAX_ENGINE_CLASS_CHARS 5
-#define MAX_ENGINE_INSTANCE_CHARS 2
-
-static const struct engine_info engine_info[] = {
- { .cls = "rcs", .mask = XE_HW_ENGINE_RCS_MASK, .engine_class = XE_ENGINE_CLASS_RENDER },
- { .cls = "bcs", .mask = XE_HW_ENGINE_BCS_MASK, .engine_class = XE_ENGINE_CLASS_COPY },
- { .cls = "vcs", .mask = XE_HW_ENGINE_VCS_MASK, .engine_class = XE_ENGINE_CLASS_VIDEO_DECODE },
- { .cls = "vecs", .mask = XE_HW_ENGINE_VECS_MASK, .engine_class = XE_ENGINE_CLASS_VIDEO_ENHANCE },
- { .cls = "ccs", .mask = XE_HW_ENGINE_CCS_MASK, .engine_class = XE_ENGINE_CLASS_COMPUTE },
- { .cls = "gsccs", .mask = XE_HW_ENGINE_GSCCS_MASK, .engine_class = XE_ENGINE_CLASS_OTHER },
-};
-
-static const struct {
- const char *name;
- enum xe_gt_type type;
-} gt_types[] = {
- { .name = "primary", .type = XE_GT_TYPE_MAIN },
- { .name = "media", .type = XE_GT_TYPE_MEDIA },
-};
-
-static struct xe_config_group_device *to_xe_config_group_device(struct config_item *item)
-{
- return container_of(to_config_group(item), struct xe_config_group_device, group);
-}
-
-static struct xe_config_device *to_xe_config_device(struct config_item *item)
-{
- return &to_xe_config_group_device(item)->config;
-}
-
-static bool is_bound(struct xe_config_group_device *dev)
+/**
+ * xe_configfs_is_bound - check whether the matching pci device is bound
+ * @dev: configfs group device
+ *
+ * Caller must hold @dev->lock.
+ *
+ * Return: true if the matching pci_dev is already bound to a driver,
+ * false otherwise.
+ */
+bool xe_configfs_is_bound(struct xe_config_group_device *dev)
{
unsigned int domain, bus, slot, function;
struct pci_dev *pdev;
@@ -371,598 +185,14 @@ static bool is_bound(struct xe_config_group_device *dev)
return ret;
}
-static struct xe_config_group_device *find_xe_config_group_device(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: 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;
-
- /*
- * 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;
-
- if (!count) {
- memset(wa_bb, 0, sizeof(tmp_wa_bb));
- 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;
- }
-
- /* 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;
-
- memcpy(wa_bb, tmp_wa_bb, sizeof(tmp_wa_bb));
-
- return 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);
-
- return wa_bb_store(dev->config.ctx_restore_mid_bb, dev, data, sz);
-}
-
-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);
-
- return wa_bb_store(dev->config.ctx_restore_post_bb, dev, data, sz);
-}
-
-/**
- * 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;
-}
-
-static ssize_t engines_allowed_show(struct config_item *item, char *page)
-{
- struct xe_config_device *dev = to_xe_config_device(item);
- char *p = page;
-
- for (size_t i = 0; i < ARRAY_SIZE(engine_info); i++) {
- u64 mask = engine_info[i].mask;
-
- if ((dev->engines_allowed & mask) == mask) {
- p += sprintf(p, "%s*\n", engine_info[i].cls);
- } else if (mask & dev->engines_allowed) {
- u16 bit0 = __ffs64(mask), bit;
-
- mask &= dev->engines_allowed;
-
- for_each_set_bit(bit, (const unsigned long *)&mask, 64)
- p += sprintf(p, "%s%u\n", engine_info[i].cls,
- bit - bit0);
- }
- }
-
- return p - page;
-}
-
-/*
- * Lookup engine_info. If @mask is not NULL, reduce the mask according to the
- * instance in @pattern.
- *
- * Examples of inputs:
- * - lookup_engine_info("rcs0", &mask): return "rcs" entry from @engine_info and
- * mask == BIT_ULL(XE_HW_ENGINE_RCS0)
- * - lookup_engine_info("rcs*", &mask): return "rcs" entry from @engine_info and
- * mask == XE_HW_ENGINE_RCS_MASK
- * - lookup_engine_info("rcs", NULL): return "rcs" entry from @engine_info
- */
-static const struct engine_info *lookup_engine_info(const char *pattern, u64 *mask)
-{
- for (size_t i = 0; i < ARRAY_SIZE(engine_info); i++) {
- u8 instance;
- u16 bit;
-
- if (!str_has_prefix(pattern, engine_info[i].cls))
- continue;
-
- pattern += strlen(engine_info[i].cls);
- if (!mask)
- return *pattern ? NULL : &engine_info[i];
-
- if (!strcmp(pattern, "*")) {
- *mask = engine_info[i].mask;
- return &engine_info[i];
- }
-
- if (kstrtou8(pattern, 10, &instance))
- return NULL;
-
- bit = __ffs64(engine_info[i].mask) + instance;
- if (bit >= fls64(engine_info[i].mask))
- return NULL;
-
- *mask = BIT_ULL(bit);
- return &engine_info[i];
- }
-
- return NULL;
-}
-
-static int parse_engine(const char *s, const char *end_chars, u64 *mask,
- const struct engine_info **pinfo)
-{
- char buf[MAX_ENGINE_CLASS_CHARS + MAX_ENGINE_INSTANCE_CHARS + 1];
- const struct engine_info *info;
- size_t len;
-
- len = strcspn(s, end_chars);
- if (len >= sizeof(buf))
- return -EINVAL;
-
- memcpy(buf, s, len);
- buf[len] = '\0';
-
- info = lookup_engine_info(buf, mask);
- if (!info)
- return -ENOENT;
-
- if (pinfo)
- *pinfo = info;
-
- return len;
-}
-
-static ssize_t engines_allowed_store(struct config_item *item, const char *page,
- size_t len)
-{
- struct xe_config_group_device *dev = to_xe_config_group_device(item);
- ssize_t patternlen, p;
- u64 mask, val = 0;
-
- for (p = 0; p < len; p += patternlen + 1) {
- patternlen = parse_engine(page + p, ",\n", &mask, NULL);
- if (patternlen < 0)
- return -EINVAL;
-
- val |= mask;
- }
-
- guard(mutex)(&dev->lock);
- if (is_bound(dev))
- return -EBUSY;
-
- dev->config.engines_allowed = val;
-
- return len;
-}
-
-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);
-}
-
-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 (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 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);
- 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;
-
- 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.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);
-
- return sprintf(page, "%u\n", dev->migrate_ulls_period_ms);
-}
-
-static ssize_t migrate_ulls_period_ms_store(struct config_item *item,
- const char *page, size_t len)
+static void xe_config_device_release(struct config_item *item)
{
- struct xe_config_group_device *dev = to_xe_config_group_device(item);
- u32 val;
- int ret;
-
- ret = kstrtou32(page, 0, &val);
- if (ret)
- return ret;
-
- guard(mutex)(&dev->lock);
- if (is_bound(dev))
- return -EBUSY;
+ struct xe_config_group_device *dev = xe_configfs_to_group_device(item);
- dev->config.migrate_ulls_period_ms = val;
+ mutex_destroy(&dev->lock);
- return len;
+ xe_configfs_debug_release_config(&dev->config);
+ kfree(dev);
}
/**
@@ -973,11 +203,11 @@ static ssize_t migrate_ulls_period_ms_store(struct config_item *item,
*/
u8 xe_configfs_get_survivability_mode(struct pci_dev *pdev)
{
- struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ struct xe_config_group_device *dev = xe_configfs_find_group_device(pdev);
u8 mode;
if (!dev)
- return device_defaults.survivability_mode;
+ return xe_configfs_device_defaults.survivability_mode;
scoped_guard(mutex, &dev->lock)
mode = dev->config.survivability_mode;
@@ -988,14 +218,14 @@ u8 xe_configfs_get_survivability_mode(struct pci_dev *pdev)
static ssize_t survivability_mode_show(struct config_item *item, char *page)
{
- struct xe_config_device *dev = to_xe_config_device(item);
+ struct xe_config_device *dev = xe_configfs_to_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);
+ struct xe_config_group_device *dev = xe_configfs_to_group_device(item);
u8 survivability_mode;
int ret;
@@ -1007,7 +237,7 @@ static ssize_t survivability_mode_store(struct config_item *item, const char *pa
return -EINVAL;
guard(mutex)(&dev->lock);
- if (is_bound(dev))
+ if (xe_configfs_is_bound(dev))
return -EBUSY;
dev->config.survivability_mode = survivability_mode;
@@ -1016,183 +246,62 @@ static ssize_t survivability_mode_store(struct config_item *item, const char *pa
}
/**
- * 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;
-}
-
-static ssize_t enable_multi_queue_show(struct config_item *item, char *page)
-{
- struct xe_config_device *dev = to_xe_config_device(item);
-
- return sprintf(page, "%d\n", dev->enable_multi_queue);
-}
-
-static ssize_t enable_multi_queue_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_multi_queue = val;
-
- return len;
-}
-
-/**
- * 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;
-}
-
-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 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;
-
- ret = kstrtobool(page, &val);
- if (ret)
- return ret;
-
- guard(mutex)(&dev->lock);
- if (is_bound(dev))
- return -EBUSY;
-
- dev->config.enable_psmi = val;
-
- return len;
-}
-
-/**
- * xe_configfs_get_enable_vram_page_offline - get configfs enable_vram_page_offline setting
+ * xe_configfs_get_migrate_ulls_period_ms - get configfs migrate_ulls_period_ms setting
* @pdev: pci device
*
- * Return: enable_vram_page_offline setting in configfs
+ * Return: Migrate ULLS period in milliseconds (zero is disabled).
*/
-bool xe_configfs_get_enable_vram_page_offline(struct pci_dev *pdev)
+u32 xe_configfs_get_migrate_ulls_period_ms(struct pci_dev *pdev)
{
- struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
- bool ret;
+ struct xe_config_group_device *dev = xe_configfs_find_group_device(pdev);
+ u32 ret;
if (!dev)
- return device_defaults.enable_vram_page_offline;
+ return xe_configfs_device_defaults.migrate_ulls_period_ms;
scoped_guard(mutex, &dev->lock)
- ret = dev->config.enable_vram_page_offline;
+ ret = dev->config.migrate_ulls_period_ms;
config_group_put(&dev->group);
return ret;
}
-static ssize_t enable_vram_page_offline_show(struct config_item *item, char *page)
+static ssize_t migrate_ulls_period_ms_show(struct config_item *item, char *page)
{
- struct xe_config_device *dev = to_xe_config_device(item);
+ struct xe_config_device *dev = xe_configfs_to_device(item);
- return sprintf(page, "%s\n", str_yes_no(dev->enable_vram_page_offline));
+ return sprintf(page, "%u\n", dev->migrate_ulls_period_ms);
}
-static ssize_t enable_vram_page_offline_store(struct config_item *item,
- const char *page, size_t len)
+static ssize_t migrate_ulls_period_ms_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;
+ struct xe_config_group_device *dev = xe_configfs_to_group_device(item);
+ u32 val;
int ret;
- ret = kstrtobool(page, &val);
+ ret = kstrtou32(page, 0, &val);
if (ret)
return ret;
guard(mutex)(&dev->lock);
- if (is_bound(dev))
+ if (xe_configfs_is_bound(dev))
return -EBUSY;
- dev->config.enable_vram_page_offline = val;
+ dev->config.migrate_ulls_period_ms = val;
return len;
}
-CONFIGFS_ATTR(, ctx_restore_mid_bb);
-CONFIGFS_ATTR(, ctx_restore_post_bb);
-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_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,
};
-static void xe_config_device_release(struct config_item *item)
-{
- struct xe_config_group_device *dev = to_xe_config_group_device(item);
-
- mutex_destroy(&dev->lock);
-
- kfree(dev->config.ctx_restore_mid_bb[0].cs);
- kfree(dev->config.ctx_restore_post_bb[0].cs);
- kfree(dev);
-}
-
static struct configfs_item_operations xe_config_device_ops = {
.release = xe_config_device_release,
};
@@ -1200,18 +309,13 @@ static struct configfs_item_operations xe_config_device_ops = {
static bool xe_config_device_is_visible(struct config_item *item,
struct configfs_attribute *attr, int n)
{
- struct xe_config_group_device *dev = to_xe_config_group_device(item);
+ struct xe_config_group_device *dev = xe_configfs_to_group_device(item);
if (attr == &attr_survivability_mode) {
if (!dev->desc->is_dgfx || dev->desc->platform < XE_BATTLEMAGE)
return false;
}
- if (attr == &attr_enable_vram_page_offline) {
- if (!dev->desc->is_dgfx || dev->desc->platform != XE_CRESCENTISLAND)
- return false;
- }
-
return true;
}
@@ -1228,7 +332,7 @@ static const struct config_item_type xe_config_device_type = {
static ssize_t sriov_max_vfs_show(struct config_item *item, char *page)
{
- struct xe_config_group_device *dev = to_xe_config_group_device(item->ci_parent);
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item);
guard(mutex)(&dev->lock);
@@ -1240,13 +344,13 @@ static ssize_t sriov_max_vfs_show(struct config_item *item, char *page)
static ssize_t sriov_max_vfs_store(struct config_item *item, const char *page, size_t len)
{
- struct xe_config_group_device *dev = to_xe_config_group_device(item->ci_parent);
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item);
unsigned int max_vfs;
int ret;
guard(mutex)(&dev->lock);
- if (is_bound(dev))
+ if (xe_configfs_is_bound(dev))
return -EBUSY;
ret = kstrtouint(page, 0, &max_vfs);
@@ -1262,7 +366,7 @@ static ssize_t sriov_max_vfs_store(struct config_item *item, const char *page, s
static ssize_t sriov_admin_only_pf_show(struct config_item *item, char *page)
{
- struct xe_config_group_device *dev = to_xe_config_group_device(item->ci_parent);
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item);
guard(mutex)(&dev->lock);
@@ -1271,13 +375,13 @@ static ssize_t sriov_admin_only_pf_show(struct config_item *item, char *page)
static ssize_t sriov_admin_only_pf_store(struct config_item *item, const char *page, size_t len)
{
- struct xe_config_group_device *dev = to_xe_config_group_device(item->ci_parent);
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item);
bool admin_only_pf;
int ret;
guard(mutex)(&dev->lock);
- if (is_bound(dev))
+ if (xe_configfs_is_bound(dev))
return -EBUSY;
ret = kstrtobool(page, &admin_only_pf);
@@ -1300,7 +404,7 @@ static struct configfs_attribute *xe_config_sriov_attrs[] = {
static bool xe_config_sriov_is_visible(struct config_item *item,
struct configfs_attribute *attr, int n)
{
- struct xe_config_group_device *dev = to_xe_config_group_device(item->ci_parent);
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item);
if (attr == &sriov_attr_max_vfs && dev->mode != XE_SRIOV_MODE_PF)
return false;
@@ -1436,7 +540,17 @@ static struct configfs_subsystem xe_configfs = {
},
};
-static struct xe_config_group_device *find_xe_config_group_device(struct pci_dev *pdev)
+/**
+ * xe_configfs_find_group_device() - Find a configfs group by PCI device.
+ * @pdev: the &pci_dev to look up
+ *
+ * Searches the configfs subsystem for a group whose name matches @pdev.
+ * If found, the returned group has an elevated reference count; the caller
+ * must call config_group_put() when done.
+ *
+ * Return: pointer to the matching &xe_config_group_device, or NULL.
+ */
+struct xe_config_group_device *xe_configfs_find_group_device(struct pci_dev *pdev)
{
struct config_item *item;
@@ -1447,25 +561,27 @@ static struct xe_config_group_device *find_xe_config_group_device(struct pci_dev
if (!item)
return NULL;
- return to_xe_config_group_device(item);
+ return xe_configfs_to_group_device(item);
}
static void dump_custom_dev_config(struct pci_dev *pdev,
struct xe_config_group_device *dev)
{
#define PRI_CUSTOM_ATTR(fmt_, attr_) do { \
- if (dev->config.attr_ != device_defaults.attr_) \
+ if (dev->config.attr_ != xe_configfs_device_defaults.attr_) \
pci_info(pdev, "configfs: " __stringify(attr_) " = " fmt_ "\n", \
dev->config.attr_); \
} while (0)
- 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);
+#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
+ PRI_CUSTOM_ATTR("%llx", debug.engines_allowed);
+ PRI_CUSTOM_ATTR("%llx", debug.gt_types_allowed);
+ PRI_CUSTOM_ATTR("%d", debug.enable_multi_queue);
+ PRI_CUSTOM_ATTR("%d", debug.enable_psmi);
+ PRI_CUSTOM_ATTR("%d", debug.enable_vram_page_offline);
+#endif
PRI_CUSTOM_ATTR("%u", sriov.admin_only_pf);
#undef PRI_CUSTOM_ATTR
@@ -1480,13 +596,13 @@ static void dump_custom_dev_config(struct pci_dev *pdev,
*/
void xe_configfs_check_device(struct pci_dev *pdev)
{
- struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ struct xe_config_group_device *dev = xe_configfs_find_group_device(pdev);
if (!dev)
return;
/* memcmp here is safe as both are zero-initialized */
- if (memcmp(&dev->config, &device_defaults, sizeof(dev->config))) {
+ if (memcmp(&dev->config, &xe_configfs_device_defaults, sizeof(dev->config))) {
pci_info(pdev, "Found custom settings in configfs\n");
dump_custom_dev_config(pdev, dev);
}
@@ -1508,7 +624,7 @@ void xe_configfs_check_device(struct pci_dev *pdev)
*/
bool xe_configfs_admin_only_pf(struct pci_dev *pdev)
{
- struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ struct xe_config_group_device *dev = xe_configfs_find_group_device(pdev);
bool admin_only_pf;
if (!dev)
@@ -1533,7 +649,7 @@ bool xe_configfs_admin_only_pf(struct pci_dev *pdev)
*/
unsigned int xe_configfs_get_max_vfs(struct pci_dev *pdev)
{
- struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ struct xe_config_group_device *dev = xe_configfs_find_group_device(pdev);
unsigned int max_vfs;
if (!dev)
diff --git a/drivers/gpu/drm/xe/xe_configfs.h b/drivers/gpu/drm/xe/xe_configfs.h
index c832de85b771..cb7185044d6a 100644
--- a/drivers/gpu/drm/xe/xe_configfs.h
+++ b/drivers/gpu/drm/xe/xe_configfs.h
@@ -14,7 +14,11 @@
#include "xe_hw_engine_types.h"
#include "xe_module.h"
+struct config_item;
struct pci_dev;
+struct xe_config_group_device;
+
+extern const struct xe_config_device xe_configfs_device_defaults;
/**
* DOC: survivability_mode configfs bits
@@ -28,23 +32,71 @@ struct pci_dev;
#define XE_CONFIGFS_SURVIVABILITY_MASK XE_CONFIGFS_SURVIVABILITY_ENABLE
#if IS_ENABLED(CONFIG_CONFIGFS_FS)
+/**
+ * xe_configfs_to_group_device() - Cast a config_item to &xe_config_group_device.
+ * @item: the &config_item embedded in the device group
+ *
+ * The @item must be the top-level device group's cg_item, not a subgroup item.
+ * Use xe_configfs_subgroup_to_group_device() for subgroup show/store callbacks.
+ *
+ * Return: pointer to the enclosing &xe_config_group_device.
+ */
+static inline struct xe_config_group_device *
+xe_configfs_to_group_device(struct config_item *item)
+{
+ return container_of(to_config_group(item), struct xe_config_group_device, group);
+}
+
+/**
+ * xe_configfs_to_device() - Cast a config_item to &xe_config_device.
+ * @item: the &config_item embedded in the device group
+ *
+ * Convenience wrapper around xe_configfs_to_group_device().
+ *
+ * Return: pointer to the &xe_config_device nested in the group.
+ */
+static inline struct xe_config_device *xe_configfs_to_device(struct config_item *item)
+{
+ return &xe_configfs_to_group_device(item)->config;
+}
+
+/**
+ * xe_configfs_subgroup_to_group_device() - Cast a subgroup item to &xe_config_group_device.
+ * @item: the &config_item of a subgroup (e.g. sriov or debug)
+ *
+ * In configfs, show/store callbacks for a subgroup's attributes receive the
+ * subgroup's cg_item, whose parent is the device group's cg_item.
+ * This helper walks up one level to return the enclosing device group.
+ *
+ * Return: pointer to the enclosing &xe_config_group_device.
+ */
+static inline struct xe_config_group_device *
+xe_configfs_subgroup_to_group_device(struct config_item *item)
+{
+ return xe_configfs_to_group_device(item->ci_parent);
+}
+
+/**
+ * xe_configfs_subgroup_to_device() - Cast a subgroup item to &xe_config_device.
+ * @item: the &config_item of a subgroup (e.g. sriov or debug)
+ *
+ * Convenience wrapper for a subgroup item to get the &xe_config_device.
+ *
+ * Return: pointer to the &xe_config_device nested in the parent device group.
+ */
+static inline struct xe_config_device *
+xe_configfs_subgroup_to_device(struct config_item *item)
+{
+ return xe_configfs_to_device(item->ci_parent);
+}
+
+bool xe_configfs_is_bound(struct xe_config_group_device *dev);
+struct xe_config_group_device *xe_configfs_find_group_device(struct pci_dev *pdev);
int xe_configfs_init(void);
void xe_configfs_exit(void);
void xe_configfs_check_device(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);
@@ -53,20 +105,8 @@ bool xe_configfs_admin_only_pf(struct pci_dev *pdev);
static inline int xe_configfs_init(void) { return 0; }
static inline void xe_configfs_exit(void) { }
static inline void xe_configfs_check_device(struct pci_dev *pdev) { }
-static inline ssize_t xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
- enum xe_engine_class class,
- u32 *cs, size_t max_len) { return 0; }
-static inline ssize_t xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
- enum xe_engine_class class,
- u32 *cs, size_t max_len) { return 0; }
-static inline u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev) { return U64_MAX; }
-static inline bool xe_configfs_primary_gt_allowed(struct pci_dev *pdev) { return true; }
-static inline bool xe_configfs_media_gt_allowed(struct pci_dev *pdev) { return true; }
static inline u32 xe_configfs_get_migrate_ulls_period_ms(struct pci_dev *pdev) { return 5; }
static inline u8 xe_configfs_get_survivability_mode(struct pci_dev *pdev) { return 0; }
-static inline bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev) { return true; }
-static inline bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev) { return false; }
-static inline bool xe_configfs_get_disable_vram_page_offline(struct pci_dev *pdev) { return false; }
#ifdef CONFIG_PCI_IOV
static inline unsigned int xe_configfs_get_max_vfs(struct pci_dev *pdev)
{
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug.c b/drivers/gpu/drm/xe/xe_configfs_debug.c
index 45617282cec5..a6800706eefa 100644
--- a/drivers/gpu/drm/xe/xe_configfs_debug.c
+++ b/drivers/gpu/drm/xe/xe_configfs_debug.c
@@ -3,12 +3,991 @@
* Copyright © 2026 Intel Corporation
*/
+#include <linux/bitops.h>
#include <linux/configfs.h>
#include <linux/module.h>
+#include <linux/cleanup.h>
+#include <linux/find.h>
+#include <linux/pci.h>
+#include <linux/string.h>
+#include "abi/guc_log_abi.h"
+#include "instructions/xe_mi_commands.h"
+#include "xe_configfs.h"
#include "xe_configfs_debug.h"
#include "xe_configfs_types.h"
+#include "xe_gt_types.h"
+#include "xe_hw_engine_types.h"
+#include "xe_pci_types.h"
+
+/**
+ * DOC: Xe Configfs Debug Attributes
+ *
+ * Overview
+ * ========
+ *
+ * The following configfs attributes are only available when the kernel is
+ * built with ``CONFIG_DRM_XE_DEBUG=y``. They appear under the ``debug/``
+ * subdirectory of each xe configfs device. They are intended for hardware
+ * and driver debugging and are not stable ABI. Using them is "at your own
+ * risk".
+ *
+ * See the top-level ``Xe Configfs`` documentation in ``xe_configfs.c``
+ * for how to create, probe and remove configfs devices. Once a device
+ * directory exists, the driver populates it with a ``debug/`` subdirectory
+ * containing the entries described below::
+ *
+ * /sys/kernel/config/xe/
+ * └── 0000:03:00.0
+ * └── debug/
+ * ├── ctx_restore_mid_bb
+ * ├── ctx_restore_post_bb
+ * ├── enable_multi_queue
+ * ├── enable_psmi
+ * ├── enable_vram_page_offline
+ * ├── engines_allowed
+ * └── gt_types_allowed
+ *
+ * Configure Attributes
+ * ====================
+ *
+ * Context restore BB
+ * ------------------
+ *
+ * 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.
+ *
+ * The syntax allows to pass straight instructions to be executed by the engine
+ * in a batch buffer or set specific registers.
+ *
+ * #. Generic instruction::
+ *
+ * <engine-class> cmd <instr> [[dword0] [dword1] [...]]
+ *
+ * #. Simple register setting::
+ *
+ * <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/debug/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/debug/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/debug/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/debug/enable_multi_queue
+ *
+ * This attribute can only be set before binding to the device.
+ *
+ * PSMI
+ * ----
+ *
+ * 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 1 > /sys/kernel/config/xe/0000:03:00.0/debug/enable_psmi
+ *
+ * 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/debug/enable_vram_page_offline
+ *
+ * This attribute can only be set on CRI before binding to the device.
+ *
+ * Allowed engines:
+ * ----------------
+ *
+ * Allow only a set of engine(s) to be available, disabling the other engines
+ * even if they are available in hardware. This is applied after HW fuses are
+ * considered on each tile. Examples:
+ *
+ * Allow only one render and one copy engines, nothing else::
+ *
+ * # echo 'rcs0,bcs0' > /sys/kernel/config/xe/0000:03:00.0/debug/engines_allowed
+ *
+ * Allow only compute engines and first copy engine::
+ *
+ * # echo 'ccs*,bcs0' > /sys/kernel/config/xe/0000:03:00.0/debug/engines_allowed
+ *
+ * Note that the engine names are the per-GT hardware names. On multi-tile
+ * platforms, writing ``rcs0,bcs0`` to this file would allow the first render
+ * and copy engines on each tile.
+ *
+ * The requested configuration may not be supported by the platform and driver
+ * may fail to probe. For example: if at least one copy engine is expected to be
+ * available for migrations, but it's disabled. This is intended for debugging
+ * purposes only.
+ *
+ * This attribute can only be set before binding to the device.
+ *
+ * Allowed GT types:
+ * -----------------
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * Examples:
+ *
+ * Allow both primary and media GTs to be initialized and used. This matches
+ * the driver's default behavior::
+ *
+ * # echo 'primary,media' > /sys/kernel/config/xe/0000:03:00.0/debug/gt_types_allowed
+ *
+ * Allow only the primary GT of each tile to be initialized and used,
+ * effectively disabling the media GT if it exists on the platform::
+ *
+ * # echo 'primary' > /sys/kernel/config/xe/0000:03:00.0/debug/gt_types_allowed
+ *
+ * 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**::
+ *
+ * # echo 'media' > /sys/kernel/config/xe/0000:03:00.0/debug/gt_types_allowed
+ *
+ * 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 '' > /sys/kernel/config/xe/0000:03:00.0/debug/gt_types_allowed
+ */
+
+struct engine_info {
+ const char *cls;
+ u64 mask;
+ enum xe_engine_class engine_class;
+};
+
+/* Some helpful macros to aid on the sizing of buffer allocation when parsing */
+#define MAX_ENGINE_CLASS_CHARS 5
+#define MAX_ENGINE_INSTANCE_CHARS 2
+
+static const struct engine_info engine_info[] = {
+ { .cls = "rcs", .mask = XE_HW_ENGINE_RCS_MASK, .engine_class = XE_ENGINE_CLASS_RENDER },
+ { .cls = "bcs", .mask = XE_HW_ENGINE_BCS_MASK, .engine_class = XE_ENGINE_CLASS_COPY },
+ { .cls = "vcs", .mask = XE_HW_ENGINE_VCS_MASK, .engine_class = XE_ENGINE_CLASS_VIDEO_DECODE },
+ { .cls = "vecs", .mask = XE_HW_ENGINE_VECS_MASK, .engine_class = XE_ENGINE_CLASS_VIDEO_ENHANCE },
+ { .cls = "ccs", .mask = XE_HW_ENGINE_CCS_MASK, .engine_class = XE_ENGINE_CLASS_COMPUTE },
+ { .cls = "gsccs", .mask = XE_HW_ENGINE_GSCCS_MASK, .engine_class = XE_ENGINE_CLASS_OTHER },
+};
+
+static const struct {
+ const char *name;
+ enum xe_gt_type type;
+} gt_types[] = {
+ { .name = "primary", .type = XE_GT_TYPE_MAIN },
+ { .name = "media", .type = XE_GT_TYPE_MEDIA },
+};
+
+static struct xe_config_group_device *find_device(struct pci_dev *pdev)
+{
+ return xe_configfs_find_group_device(pdev);
+}
+
+/**
+ * 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_device(pdev);
+ ssize_t len;
+
+ if (!dev)
+ return 0;
+
+ scoped_guard(mutex, &dev->lock) {
+ len = dev->config.debug.ctx_restore_mid_bb[class].len;
+ if (cs && len) {
+ if (len > max_len)
+ len = -ENOSPC;
+ else
+ memcpy(cs, dev->config.debug.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_device(pdev);
+ ssize_t len;
+
+ if (!dev)
+ return 0;
+
+ scoped_guard(mutex, &dev->lock) {
+ len = dev->config.debug.ctx_restore_post_bb[class].len;
+ if (cs && len) {
+ if (len > max_len)
+ len = -ENOSPC;
+ else
+ memcpy(cs, dev->config.debug.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 = xe_configfs_subgroup_to_group_device(item);
+
+ return wa_bb_show(dev, dev->config.debug.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 = xe_configfs_subgroup_to_group_device(item);
+
+ return wa_bb_show(dev, dev->config.debug.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 (xe_configfs_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;
+
+ if (!count) {
+ memset(wa_bb, 0, sizeof(tmp_wa_bb));
+ 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;
+ }
+
+ /* 3. Parse wa_bb lines again, this time saving the values */
+ count = parse_wa_bb_lines(page, tmp_wa_bb);
+ if (count < 0) {
+ kfree(tmp);
+ memset(wa_bb, 0, sizeof(tmp_wa_bb));
+ return count;
+ }
+
+ memcpy(wa_bb, tmp_wa_bb, sizeof(tmp_wa_bb));
+
+ return 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 = xe_configfs_subgroup_to_group_device(item);
+
+ return wa_bb_store(dev->config.debug.ctx_restore_mid_bb, dev, data, sz);
+}
+
+static ssize_t ctx_restore_post_bb_store(struct config_item *item,
+ const char *data, size_t sz)
+{
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item);
+
+ return wa_bb_store(dev->config.debug.ctx_restore_post_bb, dev, data, sz);
+}
+
+/**
+ * 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_device(pdev);
+ u64 engines_allowed;
+
+ if (!dev)
+ return xe_configfs_device_defaults.debug.engines_allowed;
+
+ scoped_guard(mutex, &dev->lock)
+ engines_allowed = dev->config.debug.engines_allowed;
+ config_group_put(&dev->group);
+
+ return engines_allowed;
+}
+
+static ssize_t engines_allowed_show(struct config_item *item, char *page)
+{
+ struct xe_config_device *dev = xe_configfs_subgroup_to_device(item);
+ char *p = page;
+
+ for (size_t i = 0; i < ARRAY_SIZE(engine_info); i++) {
+ u64 mask = engine_info[i].mask;
+
+ if ((dev->debug.engines_allowed & mask) == mask) {
+ p += sprintf(p, "%s*\n", engine_info[i].cls);
+ } else if (mask & dev->debug.engines_allowed) {
+ u16 bit0 = __ffs64(mask), bit;
+
+ mask &= dev->debug.engines_allowed;
+
+ for_each_set_bit(bit, (const unsigned long *)&mask, 64)
+ p += sprintf(p, "%s%u\n", engine_info[i].cls,
+ bit - bit0);
+ }
+ }
+
+ return p - page;
+}
+
+/*
+ * Lookup engine_info. If @mask is not NULL, reduce the mask according to the
+ * instance in @pattern.
+ *
+ * Examples of inputs:
+ * - lookup_engine_info("rcs0", &mask): return "rcs" entry from @engine_info and
+ * mask == BIT_ULL(XE_HW_ENGINE_RCS0)
+ * - lookup_engine_info("rcs*", &mask): return "rcs" entry from @engine_info and
+ * mask == XE_HW_ENGINE_RCS_MASK
+ * - lookup_engine_info("rcs", NULL): return "rcs" entry from @engine_info
+ */
+static const struct engine_info *lookup_engine_info(const char *pattern, u64 *mask)
+{
+ for (size_t i = 0; i < ARRAY_SIZE(engine_info); i++) {
+ u8 instance;
+ u16 bit;
+
+ if (!str_has_prefix(pattern, engine_info[i].cls))
+ continue;
+
+ pattern += strlen(engine_info[i].cls);
+ if (!mask)
+ return *pattern ? NULL : &engine_info[i];
+
+ if (!strcmp(pattern, "*")) {
+ *mask = engine_info[i].mask;
+ return &engine_info[i];
+ }
+
+ if (kstrtou8(pattern, 10, &instance))
+ return NULL;
+
+ bit = __ffs64(engine_info[i].mask) + instance;
+ if (bit >= fls64(engine_info[i].mask))
+ return NULL;
+
+ *mask = BIT_ULL(bit);
+ return &engine_info[i];
+ }
+
+ return NULL;
+}
+
+static int parse_engine(const char *s, const char *end_chars, u64 *mask,
+ const struct engine_info **pinfo)
+{
+ char buf[MAX_ENGINE_CLASS_CHARS + MAX_ENGINE_INSTANCE_CHARS + 1];
+ const struct engine_info *info;
+ size_t len;
+
+ len = strcspn(s, end_chars);
+ if (len >= sizeof(buf))
+ return -EINVAL;
+
+ memcpy(buf, s, len);
+ buf[len] = '\0';
+
+ info = lookup_engine_info(buf, mask);
+ if (!info)
+ return -ENOENT;
+
+ if (pinfo)
+ *pinfo = info;
+
+ return len;
+}
+
+static ssize_t engines_allowed_store(struct config_item *item, const char *page,
+ size_t len)
+{
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item);
+ ssize_t patternlen, p;
+ u64 mask, val = 0;
+
+ for (p = 0; p < len; p += patternlen + 1) {
+ patternlen = parse_engine(page + p, ",\n", &mask, NULL);
+ if (patternlen < 0)
+ return -EINVAL;
+
+ val |= mask;
+ }
+
+ guard(mutex)(&dev->lock);
+ if (xe_configfs_is_bound(dev))
+ return -EBUSY;
+
+ dev->config.debug.engines_allowed = val;
+
+ return len;
+}
+
+static u64 get_gt_types_allowed(struct pci_dev *pdev)
+{
+ struct xe_config_group_device *dev = find_device(pdev);
+ u64 mask;
+
+ if (!dev)
+ return xe_configfs_device_defaults.debug.gt_types_allowed;
+
+ scoped_guard(mutex, &dev->lock)
+ mask = dev->config.debug.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);
+}
+
+static ssize_t gt_types_allowed_show(struct config_item *item, char *page)
+{
+ struct xe_config_device *dev = xe_configfs_subgroup_to_device(item);
+ char *p = page;
+
+ for (size_t i = 0; i < ARRAY_SIZE(gt_types); i++)
+ if (dev->debug.gt_types_allowed & BIT_ULL(gt_types[i].type))
+ p += sprintf(p, "%s\n", gt_types[i].name);
+
+ return p - page;
+}
+
+static ssize_t gt_types_allowed_store(struct config_item *item, const char *page,
+ size_t len)
+{
+ char *buf __free(kfree) = kstrdup(page, GFP_KERNEL);
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item);
+ u64 typemask = 0;
+ char *p = buf;
+
+ 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 (xe_configfs_is_bound(dev))
+ return -EBUSY;
+
+ dev->config.debug.gt_types_allowed = typemask;
+
+ return len;
+}
+
+/**
+ * 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_device(pdev);
+ bool ret;
+
+ if (!dev)
+ return xe_configfs_device_defaults.debug.enable_multi_queue;
+
+ scoped_guard(mutex, &dev->lock)
+ ret = dev->config.debug.enable_multi_queue;
+ config_group_put(&dev->group);
+
+ return ret;
+}
+
+static ssize_t enable_multi_queue_show(struct config_item *item, char *page)
+{
+ struct xe_config_device *dev = xe_configfs_subgroup_to_device(item);
+
+ return sprintf(page, "%d\n", dev->debug.enable_multi_queue);
+}
+
+static ssize_t enable_multi_queue_store(struct config_item *item, const char *page, size_t len)
+{
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item);
+ bool val;
+ int ret;
+
+ ret = kstrtobool(page, &val);
+ if (ret)
+ return ret;
+
+ guard(mutex)(&dev->lock);
+ if (xe_configfs_is_bound(dev))
+ return -EBUSY;
+
+ dev->config.debug.enable_multi_queue = val;
+
+ return len;
+}
+
+/**
+ * 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_device(pdev);
+ bool ret;
+
+ if (!dev)
+ return false;
+
+ scoped_guard(mutex, &dev->lock)
+ ret = dev->config.debug.enable_psmi;
+ config_group_put(&dev->group);
+
+ return ret;
+}
+
+static ssize_t enable_psmi_show(struct config_item *item, char *page)
+{
+ struct xe_config_device *dev = xe_configfs_subgroup_to_device(item);
+
+ return sprintf(page, "%d\n", dev->debug.enable_psmi);
+}
+
+static ssize_t enable_psmi_store(struct config_item *item, const char *page, size_t len)
+{
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item);
+ bool val;
+ int ret;
+
+ ret = kstrtobool(page, &val);
+ if (ret)
+ return ret;
+
+ guard(mutex)(&dev->lock);
+ if (xe_configfs_is_bound(dev))
+ return -EBUSY;
+
+ dev->config.debug.enable_psmi = val;
+
+ return len;
+}
+
+/**
+ * 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_device(pdev);
+ bool ret;
+
+ if (!dev)
+ return xe_configfs_device_defaults.debug.enable_vram_page_offline;
+
+ scoped_guard(mutex, &dev->lock)
+ ret = dev->config.debug.enable_vram_page_offline;
+ config_group_put(&dev->group);
+
+ return ret;
+}
+
+static ssize_t enable_vram_page_offline_show(struct config_item *item, char *page)
+{
+ struct xe_config_device *dev = xe_configfs_subgroup_to_device(item);
+
+ return sprintf(page, "%s\n", str_yes_no(dev->debug.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 = xe_configfs_subgroup_to_group_device(item);
+ bool val;
+ int ret;
+
+ ret = kstrtobool(page, &val);
+ if (ret)
+ return ret;
+
+ guard(mutex)(&dev->lock);
+ if (xe_configfs_is_bound(dev))
+ return -EBUSY;
+
+ dev->config.debug.enable_vram_page_offline = val;
+
+ return len;
+}
+
+CONFIGFS_ATTR(, ctx_restore_mid_bb);
+CONFIGFS_ATTR(, ctx_restore_post_bb);
+CONFIGFS_ATTR(, engines_allowed);
+CONFIGFS_ATTR(, gt_types_allowed);
+CONFIGFS_ATTR(, enable_multi_queue);
+CONFIGFS_ATTR(, enable_psmi);
+CONFIGFS_ATTR(, enable_vram_page_offline);
+
+static struct configfs_attribute *xe_configfs_debug_attrs[] = {
+ &attr_ctx_restore_mid_bb,
+ &attr_ctx_restore_post_bb,
+ &attr_engines_allowed,
+ &attr_gt_types_allowed,
+ &attr_enable_multi_queue,
+ &attr_enable_psmi,
+ &attr_enable_vram_page_offline,
+ NULL,
+};
+
+/*
+ * Per-parameter visibility predicates.
+ *
+ * XE_PARAM_VISIBLE_ALWAYS - attribute is always shown.
+ *
+ * These macros are only evaluated here, where the platform descriptor is
+ * reachable. xe_configfs_debug_params.h treats them as opaque tokens.
+ */
+#define XE_PARAM_VISIBLE_ALWAYS(_item) \
+ (true)
+
+static bool xe_configfs_debug_is_visible(struct config_item *item,
+ struct configfs_attribute *attr, int n)
+{
+ struct xe_config_group_device *dev;
+
+ if (attr == &attr_enable_vram_page_offline) {
+ dev = xe_configfs_to_group_device(item->ci_parent);
+
+ return dev->desc->is_dgfx && dev->desc->platform == XE_CRESCENTISLAND;
+ }
+
+ return true;
+}
+
+static struct configfs_group_operations xe_configfs_debug_group_ops = {
+ .is_visible = xe_configfs_debug_is_visible,
+};
const struct config_item_type xe_configfs_debug_type = {
+ .ct_attrs = xe_configfs_debug_attrs,
+ .ct_group_ops = &xe_configfs_debug_group_ops,
.ct_owner = THIS_MODULE,
};
+
+/**
+ * xe_configfs_debug_release_config - release debug-specific config resources
+ * @config: xe config device structure
+ *
+ * Frees any memory allocated for debug configfs parameters.
+ */
+void xe_configfs_debug_release_config(struct xe_config_device *config)
+{
+ kfree(config->debug.ctx_restore_mid_bb[0].cs);
+ kfree(config->debug.ctx_restore_post_bb[0].cs);
+}
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug.h b/drivers/gpu/drm/xe/xe_configfs_debug.h
index 5f938450aed2..5d0875d47a1f 100644
--- a/drivers/gpu/drm/xe/xe_configfs_debug.h
+++ b/drivers/gpu/drm/xe/xe_configfs_debug.h
@@ -5,9 +5,49 @@
#ifndef _XE_CONFIGFS_DEBUG_H_
#define _XE_CONFIGFS_DEBUG_H_
+#include <linux/types.h>
+
+#include "xe_hw_engine_types.h"
+
+struct pci_dev;
+struct xe_config_device;
+
#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;
+void xe_configfs_debug_release_config(struct xe_config_device *config);
+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);
+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);
+#else
+/*
+ * Callers gate these accesses on CONFIG_DRM_XE_DEBUG, so when that's
+ * disabled the returned defaults are dead code. When CONFIG_DRM_XE_DEBUG=y
+ * but CONFIG_CONFIGFS_FS=n there is no configfs group to consult, so the
+ * defaults below are used for real to keep debug knobs functional (at
+ * their default values) even without configfs support.
+ */
+static inline void xe_configfs_debug_release_config(struct xe_config_device *config) { }
+static inline ssize_t xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
+ enum xe_engine_class class,
+ u32 *cs, size_t max_len) { return 0; }
+static inline ssize_t xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
+ enum xe_engine_class class,
+ u32 *cs, size_t max_len) { return 0; }
+static inline u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev) { return U64_MAX; }
+static inline bool xe_configfs_primary_gt_allowed(struct pci_dev *pdev) { return true; }
+static inline bool xe_configfs_media_gt_allowed(struct pci_dev *pdev) { return true; }
+static inline bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev) { return true; }
+static inline bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev) { return false; }
+static inline bool xe_configfs_get_enable_vram_page_offline(struct pci_dev *pdev) { return true; }
#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 3a9ab40d519b..72f97dcad8f4 100644
--- a/drivers/gpu/drm/xe/xe_configfs_types.h
+++ b/drivers/gpu/drm/xe/xe_configfs_types.h
@@ -32,15 +32,19 @@ struct xe_config_group_device {
* 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;
+#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
+ struct {
+ 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;
+ bool enable_multi_queue;
+ bool enable_psmi;
+ bool enable_vram_page_offline;
+ } debug;
+#endif
struct {
unsigned int max_vfs;
bool admin_only_pf;
diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
index 3ab4cb9e4964..c0398789081a 100644
--- a/drivers/gpu/drm/xe/xe_guc.c
+++ b/drivers/gpu/drm/xe/xe_guc.c
@@ -19,6 +19,7 @@
#include "regs/xe_irq_regs.h"
#include "xe_bo.h"
#include "xe_configfs.h"
+#include "xe_configfs_debug.h"
#include "xe_device.h"
#include "xe_force_wake.h"
#include "xe_gt.h"
diff --git a/drivers/gpu/drm/xe/xe_guc_ads.c b/drivers/gpu/drm/xe/xe_guc_ads.c
index 43a2951a66d6..f5ca687e847d 100644
--- a/drivers/gpu/drm/xe/xe_guc_ads.c
+++ b/drivers/gpu/drm/xe/xe_guc_ads.c
@@ -17,6 +17,7 @@
#include "regs/xe_guc_regs.h"
#include "xe_bo.h"
#include "xe_configfs.h"
+#include "xe_configfs_debug.h"
#include "xe_gt.h"
#include "xe_gt_ccs_mode.h"
#include "xe_gt_mcr.h"
diff --git a/drivers/gpu/drm/xe/xe_hw_engine.c b/drivers/gpu/drm/xe/xe_hw_engine.c
index 265f95c0c899..62a080f6fa23 100644
--- a/drivers/gpu/drm/xe/xe_hw_engine.c
+++ b/drivers/gpu/drm/xe/xe_hw_engine.c
@@ -18,6 +18,7 @@
#include "xe_assert.h"
#include "xe_bo.h"
#include "xe_configfs.h"
+#include "xe_configfs_debug.h"
#include "xe_device.h"
#include "xe_execlist.h"
#include "xe_force_wake.h"
diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
index f751687dc568..70494c4b5deb 100644
--- a/drivers/gpu/drm/xe/xe_lrc.c
+++ b/drivers/gpu/drm/xe/xe_lrc.c
@@ -19,6 +19,7 @@
#include "xe_bb.h"
#include "xe_bo.h"
#include "xe_configfs.h"
+#include "xe_configfs_debug.h"
#include "xe_device.h"
#include "xe_drm_client.h"
#include "xe_exec_queue.h"
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index 57c6f778ca24..18fa9d4f2f6d 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -19,6 +19,7 @@
#include "regs/xe_gt_regs.h"
#include "regs/xe_regs.h"
#include "xe_configfs.h"
+#include "xe_configfs_debug.h"
#include "xe_device.h"
#include "xe_drv.h"
#include "xe_gt.h"
diff --git a/drivers/gpu/drm/xe/xe_psmi.c b/drivers/gpu/drm/xe/xe_psmi.c
index 899b01f72ba3..59af3d145418 100644
--- a/drivers/gpu/drm/xe/xe_psmi.c
+++ b/drivers/gpu/drm/xe/xe_psmi.c
@@ -8,6 +8,7 @@
#include "xe_bo.h"
#include "xe_device_types.h"
#include "xe_configfs.h"
+#include "xe_configfs_debug.h"
#include "xe_psmi.h"
/*
diff --git a/drivers/gpu/drm/xe/xe_ras.c b/drivers/gpu/drm/xe/xe_ras.c
index ce9b57b3eede..1336c0aff6b9 100644
--- a/drivers/gpu/drm/xe/xe_ras.c
+++ b/drivers/gpu/drm/xe/xe_ras.c
@@ -4,6 +4,7 @@
*/
#include "xe_configfs.h"
+#include "xe_configfs_debug.h"
#include "xe_debugfs.h"
#include "xe_device.h"
#include "xe_drm_ras.h"
diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
index 6a8d6ea68f25..62068189320f 100644
--- a/drivers/gpu/drm/xe/xe_rtp.c
+++ b/drivers/gpu/drm/xe/xe_rtp.c
@@ -10,6 +10,7 @@
#include <uapi/drm/xe_drm.h>
#include "xe_configfs.h"
+#include "xe_configfs_debug.h"
#include "xe_device.h"
#include "xe_gt.h"
#include "xe_gt_topology.h"
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 10/15] drm/xe/guc: Add configfs support for guc_log_level
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
` (8 preceding siblings ...)
2026-10-05 22:06 ` [PATCH 09/15] drm/xe: Move debug configfs entries to xe_configfs_debug.c Stuart Summers
@ 2026-10-05 22:06 ` Stuart Summers
2026-10-05 22:06 ` [PATCH 11/15] drm/xe/guc: Add support for NPK as a GuC log target Stuart Summers
` (8 subsequent siblings)
18 siblings, 0 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 22:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, Stuart Summers
Allow the GuC log level to be selected per-device via configfs in
addition to the existing 'guc_log_level' module parameter. The configfs
attribute lives under the new 'debug' configfs subdirectory:
/sys/kernel/config/xe/<bdf>/debug/guc_log_level
When the configfs attribute is set to a valid level (0-5), it overrides
the module parameter for that device. The default value is -1
(XE_GUC_LOG_LEVEL_UNSET), which means 'unset' and falls back to the
'guc_log_level' module parameter, ensuring existing users that rely
solely on the module parameter are unaffected by this change.
The module parameter implementation itself is untouched.
Note that the expectation is a user will only set the log level when
CONFIG_DRM_XE_DEBUG is set.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: LLM
---
drivers/gpu/drm/xe/xe_configfs.c | 2 +
drivers/gpu/drm/xe/xe_configfs_debug.c | 86 +++++++++++++++++++++++++-
drivers/gpu/drm/xe/xe_configfs_debug.h | 7 +++
drivers/gpu/drm/xe/xe_configfs_types.h | 1 +
drivers/gpu/drm/xe/xe_defaults.h | 3 +
drivers/gpu/drm/xe/xe_guc_log.c | 3 +-
6 files changed, 100 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 8e5ebb3ecfa7..4aa5b7c488eb 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -132,6 +132,7 @@ const struct xe_config_device xe_configfs_device_defaults = {
.debug = {
.engines_allowed = U64_MAX,
.gt_types_allowed = U64_MAX,
+ .guc_log_level = XE_GUC_LOG_LEVEL_UNSET,
.enable_multi_queue = true,
.enable_psmi = false,
.enable_vram_page_offline = true,
@@ -578,6 +579,7 @@ static void dump_custom_dev_config(struct pci_dev *pdev,
#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
PRI_CUSTOM_ATTR("%llx", debug.engines_allowed);
PRI_CUSTOM_ATTR("%llx", debug.gt_types_allowed);
+ PRI_CUSTOM_ATTR("%d", debug.guc_log_level);
PRI_CUSTOM_ATTR("%d", debug.enable_multi_queue);
PRI_CUSTOM_ATTR("%d", debug.enable_psmi);
PRI_CUSTOM_ATTR("%d", debug.enable_vram_page_offline);
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug.c b/drivers/gpu/drm/xe/xe_configfs_debug.c
index a6800706eefa..cbfb12266bf4 100644
--- a/drivers/gpu/drm/xe/xe_configfs_debug.c
+++ b/drivers/gpu/drm/xe/xe_configfs_debug.c
@@ -17,6 +17,7 @@
#include "xe_configfs_debug.h"
#include "xe_configfs_types.h"
#include "xe_gt_types.h"
+#include "xe_guc_log.h"
#include "xe_hw_engine_types.h"
#include "xe_pci_types.h"
@@ -46,7 +47,8 @@
* ├── enable_psmi
* ├── enable_vram_page_offline
* ├── engines_allowed
- * └── gt_types_allowed
+ * ├── gt_types_allowed
+ * └── guc_log_level
*
* Configure Attributes
* ====================
@@ -202,6 +204,27 @@
* platforms, but may be allowed on igpu platforms in the future**::
*
* # echo '' > /sys/kernel/config/xe/0000:03:00.0/debug/gt_types_allowed
+ *
+ * GuC log level:
+ * --------------
+ *
+ * Set the GuC firmware logging verbosity for this device. Accepted values
+ * match the ``guc_log_level`` module parameter:
+ *
+ * - 0: disable
+ * - 1: normal (non-verbose)
+ * - 2..%GUC_LOG_LEVEL_MAX: verbose levels
+ *
+ * Example::
+ *
+ * # echo 3 > /sys/kernel/config/xe/0000:03:00.0/debug/guc_log_level
+ *
+ * The default value is %XE_GUC_LOG_LEVEL_UNSET (-1), which means the value
+ * of the ``guc_log_level`` module parameter is used. Any value greater
+ * than -1 written to this attribute overrides the module parameter for
+ * this device.
+ *
+ * This attribute can only be set before binding to the device.
*/
struct engine_info {
@@ -783,6 +806,65 @@ static ssize_t gt_types_allowed_store(struct config_item *item, const char *page
return len;
}
+/**
+ * xe_configfs_get_guc_log_level - get configfs guc_log_level setting
+ * @pdev: pci device
+ *
+ * Returns the guc_log_level value configured via configfs. If the configfs
+ * value is negative (the default is %XE_GUC_LOG_LEVEL_UNSET, -1), the value
+ * of the ``guc_log_level`` module parameter is returned instead, allowing
+ * the configfs entry to override the module parameter without affecting
+ * users that rely solely on the module parameter.
+ *
+ * Return: GuC log level to use for this device.
+ */
+int xe_configfs_get_guc_log_level(struct pci_dev *pdev)
+{
+ struct xe_config_group_device *dev = find_device(pdev);
+ int level = xe_modparam.guc_log_level;
+
+ if (!dev)
+ return level;
+
+ scoped_guard(mutex, &dev->lock)
+ if (dev->config.debug.guc_log_level >= 0)
+ level = dev->config.debug.guc_log_level;
+
+ config_group_put(&dev->group);
+
+ return level;
+}
+
+static ssize_t guc_log_level_show(struct config_item *item, char *page)
+{
+ struct xe_config_device *dev = xe_configfs_subgroup_to_device(item);
+
+ return sprintf(page, "%d\n", dev->debug.guc_log_level);
+}
+
+static ssize_t guc_log_level_store(struct config_item *item, const char *page, size_t len)
+{
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item);
+ int val;
+ int ret;
+
+ ret = kstrtoint(page, 0, &val);
+ if (ret)
+ return ret;
+
+ if (val != XE_GUC_LOG_LEVEL_UNSET &&
+ (val < 0 || val > GUC_LOG_LEVEL_MAX))
+ return -EINVAL;
+
+ guard(mutex)(&dev->lock);
+ if (xe_configfs_is_bound(dev))
+ return -EBUSY;
+
+ dev->config.debug.guc_log_level = val;
+
+ return len;
+}
+
/**
* xe_configfs_get_enable_multi_queue - get configfs enable_multi_queue setting
* @pdev: pci device
@@ -930,6 +1012,7 @@ CONFIGFS_ATTR(, ctx_restore_mid_bb);
CONFIGFS_ATTR(, ctx_restore_post_bb);
CONFIGFS_ATTR(, engines_allowed);
CONFIGFS_ATTR(, gt_types_allowed);
+CONFIGFS_ATTR(, guc_log_level);
CONFIGFS_ATTR(, enable_multi_queue);
CONFIGFS_ATTR(, enable_psmi);
CONFIGFS_ATTR(, enable_vram_page_offline);
@@ -939,6 +1022,7 @@ static struct configfs_attribute *xe_configfs_debug_attrs[] = {
&attr_ctx_restore_post_bb,
&attr_engines_allowed,
&attr_gt_types_allowed,
+ &attr_guc_log_level,
&attr_enable_multi_queue,
&attr_enable_psmi,
&attr_enable_vram_page_offline,
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug.h b/drivers/gpu/drm/xe/xe_configfs_debug.h
index 5d0875d47a1f..c4915832f539 100644
--- a/drivers/gpu/drm/xe/xe_configfs_debug.h
+++ b/drivers/gpu/drm/xe/xe_configfs_debug.h
@@ -7,7 +7,9 @@
#include <linux/types.h>
+#include "xe_defaults.h"
#include "xe_hw_engine_types.h"
+#include "xe_module.h"
struct pci_dev;
struct xe_config_device;
@@ -24,6 +26,7 @@ ssize_t xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
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);
+int xe_configfs_get_guc_log_level(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);
@@ -45,6 +48,10 @@ static inline ssize_t xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
static inline u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev) { return U64_MAX; }
static inline bool xe_configfs_primary_gt_allowed(struct pci_dev *pdev) { return true; }
static inline bool xe_configfs_media_gt_allowed(struct pci_dev *pdev) { return true; }
+static inline int xe_configfs_get_guc_log_level(struct pci_dev *pdev)
+{
+ return xe_modparam.guc_log_level;
+}
static inline bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev) { return true; }
static inline bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev) { return false; }
static inline bool xe_configfs_get_enable_vram_page_offline(struct pci_dev *pdev) { return true; }
diff --git a/drivers/gpu/drm/xe/xe_configfs_types.h b/drivers/gpu/drm/xe/xe_configfs_types.h
index 72f97dcad8f4..01903cb4423e 100644
--- a/drivers/gpu/drm/xe/xe_configfs_types.h
+++ b/drivers/gpu/drm/xe/xe_configfs_types.h
@@ -40,6 +40,7 @@ struct xe_config_group_device {
struct wa_bb ctx_restore_post_bb[XE_ENGINE_CLASS_MAX];
u64 engines_allowed;
u64 gt_types_allowed;
+ int guc_log_level;
bool enable_multi_queue;
bool enable_psmi;
bool enable_vram_page_offline;
diff --git a/drivers/gpu/drm/xe/xe_defaults.h b/drivers/gpu/drm/xe/xe_defaults.h
index 0884224ef7c7..a9467b77fabd 100644
--- a/drivers/gpu/drm/xe/xe_defaults.h
+++ b/drivers/gpu/drm/xe/xe_defaults.h
@@ -13,6 +13,9 @@
#define XE_DEFAULT_GUC_LOG_LEVEL 1
#endif
+/* Sentinel value for guc_log_level configfs: not set, fall back to module param */
+#define XE_GUC_LOG_LEVEL_UNSET -1
+
#define XE_DEFAULT_PROBE_DISPLAY IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
#define XE_DEFAULT_VRAM_BAR_SIZE 0
#define XE_DEFAULT_FORCE_PROBE CONFIG_DRM_XE_FORCE_PROBE
diff --git a/drivers/gpu/drm/xe/xe_guc_log.c b/drivers/gpu/drm/xe/xe_guc_log.c
index 7d006268ce91..e22ab08ab172 100644
--- a/drivers/gpu/drm/xe/xe_guc_log.c
+++ b/drivers/gpu/drm/xe/xe_guc_log.c
@@ -13,6 +13,7 @@
#include "abi/guc_lfd_abi.h"
#include "regs/xe_guc_regs.h"
#include "xe_bo.h"
+#include "xe_configfs_debug.h"
#include "xe_devcoredump.h"
#include "xe_force_wake.h"
#include "xe_gt_printk.h"
@@ -640,7 +641,7 @@ int xe_guc_log_init(struct xe_guc_log *log)
xe_map_memset(xe, &bo->vmap, 0, 0, xe_bo_size(bo));
log->bo = bo;
- log->level = xe_modparam.guc_log_level;
+ log->level = xe_configfs_get_guc_log_level(to_pci_dev(xe->drm.dev));
return 0;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 11/15] drm/xe/guc: Add support for NPK as a GuC log target
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
` (9 preceding siblings ...)
2026-10-05 22:06 ` [PATCH 10/15] drm/xe/guc: Add configfs support for guc_log_level Stuart Summers
@ 2026-10-05 22:06 ` Stuart Summers
2026-10-05 22:06 ` [PATCH 12/15] drm/xe: Add infrastructure for debug configfs parameters Stuart Summers
` (7 subsequent siblings)
18 siblings, 0 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 22:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, Stuart Summers
GuC provides the ability to gather logs through a hardware interface
called NPK. For certain debugging scenarios this can be advantageous
over getting logs from memory (or in addition to).
Add a hook for this alternate debugging mode via a configfs. This
translates into a parameter passed to GuC during load time.
v2: Convert to configfs from modparam (Matt)
v3: Configfs documentation formatting (Shuicheng)
Kerneldoc/comment add + configfs entry ordering
Only set the guc_log_target when GuC log is enabled (Daniele)
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: LLM
---
drivers/gpu/drm/xe/abi/guc_log_abi.h | 8 ++++
drivers/gpu/drm/xe/xe_configfs.c | 2 +
drivers/gpu/drm/xe/xe_configfs_debug.c | 65 +++++++++++++++++++++++++-
drivers/gpu/drm/xe/xe_configfs_debug.h | 5 ++
drivers/gpu/drm/xe/xe_configfs_types.h | 1 +
drivers/gpu/drm/xe/xe_defaults.h | 2 +
drivers/gpu/drm/xe/xe_guc.c | 11 +++--
7 files changed, 90 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/xe/abi/guc_log_abi.h b/drivers/gpu/drm/xe/abi/guc_log_abi.h
index fbf212d59a40..e1b121bff549 100644
--- a/drivers/gpu/drm/xe/abi/guc_log_abi.h
+++ b/drivers/gpu/drm/xe/abi/guc_log_abi.h
@@ -51,6 +51,14 @@ enum guc_log_type {
#define GUC_LOG_BUFFER_TYPE_MAX 3
+enum guc_log_target {
+ GUC_LOG_TARGET_MEM = 0,
+ GUC_LOG_TARGET_NPK,
+ GUC_LOG_TARGET_MEM_AND_NPK,
+};
+
+#define GUC_LOG_TARGET_MAX GUC_LOG_TARGET_MEM_AND_NPK
+
/**
* struct guc_log_buffer_state - GuC log buffer state
*
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 4aa5b7c488eb..d09c97eb8120 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -133,6 +133,7 @@ const struct xe_config_device xe_configfs_device_defaults = {
.engines_allowed = U64_MAX,
.gt_types_allowed = U64_MAX,
.guc_log_level = XE_GUC_LOG_LEVEL_UNSET,
+ .guc_log_target = XE_DEFAULT_GUC_LOG_TARGET,
.enable_multi_queue = true,
.enable_psmi = false,
.enable_vram_page_offline = true,
@@ -580,6 +581,7 @@ static void dump_custom_dev_config(struct pci_dev *pdev,
PRI_CUSTOM_ATTR("%llx", debug.engines_allowed);
PRI_CUSTOM_ATTR("%llx", debug.gt_types_allowed);
PRI_CUSTOM_ATTR("%d", debug.guc_log_level);
+ PRI_CUSTOM_ATTR("%d", debug.guc_log_target);
PRI_CUSTOM_ATTR("%d", debug.enable_multi_queue);
PRI_CUSTOM_ATTR("%d", debug.enable_psmi);
PRI_CUSTOM_ATTR("%d", debug.enable_vram_page_offline);
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug.c b/drivers/gpu/drm/xe/xe_configfs_debug.c
index cbfb12266bf4..ff8e38ed717d 100644
--- a/drivers/gpu/drm/xe/xe_configfs_debug.c
+++ b/drivers/gpu/drm/xe/xe_configfs_debug.c
@@ -48,7 +48,8 @@
* ├── enable_vram_page_offline
* ├── engines_allowed
* ├── gt_types_allowed
- * └── guc_log_level
+ * ├── guc_log_level
+ * └── guc_log_target
*
* Configure Attributes
* ====================
@@ -225,6 +226,16 @@
* this device.
*
* This attribute can only be set before binding to the device.
+ *
+ * GuC log target:
+ * ---------------
+ *
+ * Set the destination for the GuC log. 0 - memory only (default),
+ * 1 - NPK only, 2 - memory + NPK. Example::
+ *
+ * # echo 2 > /sys/kernel/config/xe/0000:03:00.0/debug/guc_log_target
+ *
+ * This attribute can only be set before binding to the device.
*/
struct engine_info {
@@ -865,6 +876,56 @@ static ssize_t guc_log_level_store(struct config_item *item, const char *page, s
return len;
}
+/**
+ * xe_configfs_get_guc_log_target - get configfs GuC log target attribute
+ * @pdev: pci device
+ *
+ * Return: guc_log_target attribute in configfs
+ */
+u8 xe_configfs_get_guc_log_target(struct pci_dev *pdev)
+{
+ struct xe_config_group_device *dev = find_device(pdev);
+ u8 target;
+
+ if (!dev)
+ return xe_configfs_device_defaults.debug.guc_log_target;
+
+ scoped_guard(mutex, &dev->lock)
+ target = dev->config.debug.guc_log_target;
+ config_group_put(&dev->group);
+
+ return target;
+}
+
+static ssize_t guc_log_target_show(struct config_item *item, char *page)
+{
+ struct xe_config_device *dev = xe_configfs_subgroup_to_device(item);
+
+ return sprintf(page, "%d\n", dev->debug.guc_log_target);
+}
+
+static ssize_t guc_log_target_store(struct config_item *item, const char *page, size_t len)
+{
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item);
+ u8 guc_log_target;
+ int ret;
+
+ ret = kstrtou8(page, 0, &guc_log_target);
+ if (ret)
+ return ret;
+
+ if (guc_log_target > GUC_LOG_TARGET_MAX)
+ return -EINVAL;
+
+ guard(mutex)(&dev->lock);
+ if (xe_configfs_is_bound(dev))
+ return -EBUSY;
+
+ dev->config.debug.guc_log_target = guc_log_target;
+
+ return len;
+}
+
/**
* xe_configfs_get_enable_multi_queue - get configfs enable_multi_queue setting
* @pdev: pci device
@@ -1013,6 +1074,7 @@ CONFIGFS_ATTR(, ctx_restore_post_bb);
CONFIGFS_ATTR(, engines_allowed);
CONFIGFS_ATTR(, gt_types_allowed);
CONFIGFS_ATTR(, guc_log_level);
+CONFIGFS_ATTR(, guc_log_target);
CONFIGFS_ATTR(, enable_multi_queue);
CONFIGFS_ATTR(, enable_psmi);
CONFIGFS_ATTR(, enable_vram_page_offline);
@@ -1023,6 +1085,7 @@ static struct configfs_attribute *xe_configfs_debug_attrs[] = {
&attr_engines_allowed,
&attr_gt_types_allowed,
&attr_guc_log_level,
+ &attr_guc_log_target,
&attr_enable_multi_queue,
&attr_enable_psmi,
&attr_enable_vram_page_offline,
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug.h b/drivers/gpu/drm/xe/xe_configfs_debug.h
index c4915832f539..d8e08d64a410 100644
--- a/drivers/gpu/drm/xe/xe_configfs_debug.h
+++ b/drivers/gpu/drm/xe/xe_configfs_debug.h
@@ -27,6 +27,7 @@ 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);
int xe_configfs_get_guc_log_level(struct pci_dev *pdev);
+u8 xe_configfs_get_guc_log_target(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);
@@ -52,6 +53,10 @@ static inline int xe_configfs_get_guc_log_level(struct pci_dev *pdev)
{
return xe_modparam.guc_log_level;
}
+static inline u8 xe_configfs_get_guc_log_target(struct pci_dev *pdev)
+{
+ return XE_DEFAULT_GUC_LOG_TARGET;
+}
static inline bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev) { return true; }
static inline bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev) { return false; }
static inline bool xe_configfs_get_enable_vram_page_offline(struct pci_dev *pdev) { return true; }
diff --git a/drivers/gpu/drm/xe/xe_configfs_types.h b/drivers/gpu/drm/xe/xe_configfs_types.h
index 01903cb4423e..f9c71954114d 100644
--- a/drivers/gpu/drm/xe/xe_configfs_types.h
+++ b/drivers/gpu/drm/xe/xe_configfs_types.h
@@ -41,6 +41,7 @@ struct xe_config_group_device {
u64 engines_allowed;
u64 gt_types_allowed;
int guc_log_level;
+ u8 guc_log_target;
bool enable_multi_queue;
bool enable_psmi;
bool enable_vram_page_offline;
diff --git a/drivers/gpu/drm/xe/xe_defaults.h b/drivers/gpu/drm/xe/xe_defaults.h
index a9467b77fabd..20292e682bf9 100644
--- a/drivers/gpu/drm/xe/xe_defaults.h
+++ b/drivers/gpu/drm/xe/xe_defaults.h
@@ -5,6 +5,7 @@
#ifndef _XE_DEFAULTS_H_
#define _XE_DEFAULTS_H_
+#include "abi/guc_log_abi.h"
#include "xe_device_types.h"
#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
@@ -12,6 +13,7 @@
#else
#define XE_DEFAULT_GUC_LOG_LEVEL 1
#endif
+#define XE_DEFAULT_GUC_LOG_TARGET GUC_LOG_TARGET_MEM
/* Sentinel value for guc_log_level configfs: not set, fall back to module param */
#define XE_GUC_LOG_LEVEL_UNSET -1
diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
index c0398789081a..41ab68dab150 100644
--- a/drivers/gpu/drm/xe/xe_guc.c
+++ b/drivers/gpu/drm/xe/xe_guc.c
@@ -76,13 +76,18 @@ static u32 guc_bo_ggtt_addr(struct xe_guc *guc,
static u32 guc_ctl_debug_flags(struct xe_guc *guc)
{
+ struct pci_dev *pdev = to_pci_dev(guc_to_xe(guc)->drm.dev);
u32 level = xe_guc_log_get_level(&guc->log);
u32 flags = 0;
- if (!GUC_LOG_LEVEL_IS_VERBOSE(level))
+ if (!GUC_LOG_LEVEL_IS_VERBOSE(level)) {
flags |= GUC_LOG_DISABLED;
- else
- flags |= FIELD_PREP(GUC_LOG_VERBOSITY, GUC_LOG_LEVEL_TO_VERBOSITY(level));
+ } else {
+ flags |= FIELD_PREP(GUC_LOG_VERBOSITY,
+ GUC_LOG_LEVEL_TO_VERBOSITY(level));
+ flags |= FIELD_PREP(GUC_LOG_DESTINATION,
+ xe_configfs_get_guc_log_target(pdev));
+ }
return flags;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 12/15] drm/xe: Add infrastructure for debug configfs parameters
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
` (10 preceding siblings ...)
2026-10-05 22:06 ` [PATCH 11/15] drm/xe/guc: Add support for NPK as a GuC log target Stuart Summers
@ 2026-10-05 22:06 ` Stuart Summers
2026-10-05 22:06 ` [PATCH 13/15] drm/xe: Migrate existing debug configfs entries to params infrastructure Stuart Summers
` (6 subsequent siblings)
18 siblings, 0 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 22:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, Stuart Summers
Borrow the X-macro pattern from i915_debugfs_params.c and adapt it to
the Xe debug configfs interface, so future debug-only configfs entries
can be added with a single line.
Add a new header xe_configfs_debug_params.h that defines:
XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH(param)
invoked as
'param(type, name, default, validator, visibility, getter, fallback)'
for each debug configfs parameter. The matching backing struct, default
initializer fragment, configfs_attribute objects, show/store handlers,
entries in xe_configfs_debug_attrs[] and the xe_configfs_get_<name>()
accessor are all generated from this single list.
Supported type tokens are int, bool, u8, u16, u32 and u64. Sized
unsigned types are used directly rather than mirroring i915's
int/unsigned int (which exists there only because those debugfs
entries shadow module_param values, and module_param itself does not
support sized types).
The validator slot is a function-like macro that takes the parsed
typed value and returns 0 or a negative errno. XE_PARAM_VALIDATE_NONE
is provided for parameters whose full type range is acceptable.
Function-like macros (rather than function pointers) let the compiler
fold trivial validators away entirely.
The visibility slot is a function-like macro that takes a config_item
and returns whether the attribute should be visible.
The getter and fallback slots drive the generated
xe_configfs_get_<name>(pdev) accessor: getter(dev, name) computes the
return value from a found device group, while fallback is returned
when no device group matches. Most parameters just read the stored
value and repeat their default as the fallback (XE_PARAM_GETTER_READ);
a parameter can override either slot when its accessor needs different
behavior.
The auto-generated handlers, configfs_attribute objects and getters
live in a new xe_configfs_debug_params.c so they do not crowd the
hand-written entries in xe_configfs_debug.c. The attribute objects are
non-static (declared 'extern' in the header) so xe_configfs_debug.c can
splice them into xe_configfs_debug_attrs[] and reference them from
is_visible().
The parameter list is intentionally empty in this patch; converting
existing entries (or adding new ones) is left to follow-up changes so
this infrastructure can be reviewed in isolation.
Note that the expectation is a user will only set these debug
parameters when CONFIG_DRM_XE_DEBUG is set; the entire facility lives
behind that Kconfig.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: LLM
---
drivers/gpu/drm/xe/Makefile | 2 +-
drivers/gpu/drm/xe/xe_configfs_debug_params.c | 151 +++++++++++++++
drivers/gpu/drm/xe/xe_configfs_debug_params.h | 174 ++++++++++++++++++
3 files changed, 326 insertions(+), 1 deletion(-)
create mode 100644 drivers/gpu/drm/xe/xe_configfs_debug_params.c
create mode 100644 drivers/gpu/drm/xe/xe_configfs_debug_params.h
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 23accd9e6503..c8280a05aff0 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -168,7 +168,7 @@ 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
+xe-$(CONFIG_DRM_XE_DEBUG) += xe_configfs_debug.o xe_configfs_debug_params.o
endif
# graphics virtualization (SR-IOV) support
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug_params.c b/drivers/gpu/drm/xe/xe_configfs_debug_params.c
new file mode 100644
index 000000000000..c28d2e4693f8
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_configfs_debug_params.c
@@ -0,0 +1,151 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+/*
+ * Auto-generated debug configfs parameters.
+ *
+ * This file expands XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH() (defined in
+ * xe_configfs_debug_params.h) to define the show/store handlers and
+ * configfs_attribute objects for every parameter in the list.
+ *
+ * Per-type ops generators are provided for the simple scalar types
+ * supported by &struct xe_configfs_debug_params: int, bool, u8, u16,
+ * u32, u64. The integer template is parameterised on the kstrto helper
+ * and the printf format string; bool gets its own template because
+ * kstrtobool() has a different signature.
+ *
+ * Each store handler invokes the per-parameter validator (a
+ * function-like macro from the X-macro list), allowing range or
+ * sentinel checks to be expressed declaratively next to the parameter
+ * definition.
+ *
+ * Generated configfs_attribute objects are non-static so that
+ * xe_configfs_debug.c can reference them by symbol (xe_configfs_attr_<name>)
+ * when assembling its xe_configfs_debug_attrs[] array and its is_visible()
+ * callback.
+ *
+ * This file also generates the xe_configfs_get_<name>() accessors used
+ * by the rest of the driver to read a parameter's effective value; see
+ * the DOC section below.
+ */
+
+#include <linux/cleanup.h>
+#include <linux/configfs.h>
+#include <linux/kernel.h>
+#include <linux/pci.h>
+#include <linux/string.h>
+#include <linux/sysfs.h>
+
+#include "xe_configfs_debug_params.h"
+#include "xe_configfs.h"
+
+#define _XE_PARAM_DEFINE_OPS_NUMERIC(_T, _name, _kstrto, _fmt, _validator) \
+static ssize_t _name##_show(struct config_item *item, char *page) \
+{ \
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item); \
+ XE_PARAM_TYPE_##_T val; \
+ scoped_guard(mutex, &dev->lock) \
+ val = dev->config.debug.params._name; \
+ return sprintf(page, _fmt "\n", val); \
+} \
+static ssize_t _name##_store(struct config_item *item, const char *page, size_t len) \
+{ \
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item); \
+ XE_PARAM_TYPE_##_T val; \
+ int ret = _kstrto(page, 0, &val); \
+ if (ret) \
+ return ret; \
+ ret = _validator(val); \
+ if (ret) \
+ return ret; \
+ guard(mutex)(&dev->lock); \
+ if (xe_configfs_is_bound(dev)) \
+ return -EBUSY; \
+ dev->config.debug.params._name = val; \
+ return len; \
+}
+
+#define _XE_PARAM_DEFINE_OPS_int(_name, _validator) \
+ _XE_PARAM_DEFINE_OPS_NUMERIC(int, _name, kstrtoint, "%d", _validator)
+#define _XE_PARAM_DEFINE_OPS_u8(_name, _validator) \
+ _XE_PARAM_DEFINE_OPS_NUMERIC(u8, _name, kstrtou8, "%u", _validator)
+#define _XE_PARAM_DEFINE_OPS_u16(_name, _validator) \
+ _XE_PARAM_DEFINE_OPS_NUMERIC(u16, _name, kstrtou16, "%u", _validator)
+#define _XE_PARAM_DEFINE_OPS_u32(_name, _validator) \
+ _XE_PARAM_DEFINE_OPS_NUMERIC(u32, _name, kstrtou32, "%u", _validator)
+#define _XE_PARAM_DEFINE_OPS_u64(_name, _validator) \
+ _XE_PARAM_DEFINE_OPS_NUMERIC(u64, _name, kstrtou64, "%llu", _validator)
+#define _XE_PARAM_DEFINE_OPS_bool(_name, _validator) \
+static ssize_t _name##_show(struct config_item *item, char *page) \
+{ \
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item); \
+ bool val; \
+ scoped_guard(mutex, &dev->lock) \
+ val = dev->config.debug.params._name; \
+ return sprintf(page, "%d\n", val); \
+} \
+static ssize_t _name##_store(struct config_item *item, const char *page, size_t len) \
+{ \
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item); \
+ bool val; \
+ int ret = kstrtobool(page, &val); \
+ if (ret) \
+ return ret; \
+ ret = _validator(val); \
+ if (ret) \
+ return ret; \
+ guard(mutex)(&dev->lock); \
+ if (xe_configfs_is_bound(dev)) \
+ return -EBUSY; \
+ dev->config.debug.params._name = val; \
+ return len; \
+}
+
+#define _XE_PARAM_DEFINE_OPS(_T, _name, _def, _validator, _vis, _get, _fallback) \
+ _XE_PARAM_DEFINE_OPS_##_T(_name, _validator)
+XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH(_XE_PARAM_DEFINE_OPS)
+
+/*
+ * Define the configfs_attribute objects. These are non-static so they
+ * can be referenced from xe_configfs_debug.c.
+ */
+#define _XE_PARAM_DEFINE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+struct configfs_attribute xe_configfs_attr_##_name = { \
+ .ca_name = __stringify(_name), \
+ .ca_owner = THIS_MODULE, \
+ .ca_mode = 0644, \
+ .show = _name##_show, \
+ .store = _name##_store, \
+};
+
+XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH(_XE_PARAM_DEFINE_ATTR)
+
+/**
+ * DOC: Debug configfs parameter getters
+ *
+ * xe_configfs_get_<name>() accessors for every parameter declared via
+ * XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH() are generated below from that
+ * same list. Each looks up the &xe_config_group_device matching @pdev,
+ * applies the parameter's "getter" macro to compute the return value,
+ * and drops the reference before returning. If no matching device
+ * group exists, the parameter's "fallback" value is returned instead.
+ *
+ * The CONFIG_DRM_XE_DEBUG=n stub for each of these accessors is
+ * generated separately, in xe_configfs_debug.h.
+ */
+#define _XE_PARAM_DEFINE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+ struct xe_config_group_device *dev = xe_configfs_find_group_device(pdev); \
+ XE_PARAM_TYPE_##_T ret; \
+ if (!dev) \
+ return (_fallback); \
+ scoped_guard(mutex, &dev->lock) \
+ ret = _get(dev, _name); \
+ config_group_put(&dev->group); \
+ return ret; \
+}
+XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH(_XE_PARAM_DEFINE_GETTER)
+#undef _XE_PARAM_DEFINE_GETTER
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug_params.h b/drivers/gpu/drm/xe/xe_configfs_debug_params.h
new file mode 100644
index 000000000000..3ed7ed22961f
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_configfs_debug_params.h
@@ -0,0 +1,174 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#ifndef _XE_CONFIGFS_DEBUG_PARAMS_H_
+#define _XE_CONFIGFS_DEBUG_PARAMS_H_
+
+#include <linux/configfs.h>
+#include <linux/errno.h>
+#include <linux/types.h>
+
+struct pci_dev;
+
+/*
+ * Internal type/format aliases resolved by XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH().
+ *
+ * Each parameter declares its type using one of these tokens; the helper
+ * macros below and in xe_configfs_debug_params.c resolve the token to the
+ * underlying C type, printf format, and kstrto helper.
+ *
+ * Supported type tokens: int, bool, u8, u16, u32, u64. Add new types by
+ * defining matching XE_PARAM_TYPE_<token> and XE_PARAM_FMT_<token> here,
+ * plus an ops generator in xe_configfs_debug_params.c.
+ */
+#define XE_PARAM_TYPE_int int
+#define XE_PARAM_TYPE_bool bool
+#define XE_PARAM_TYPE_u8 u8
+#define XE_PARAM_TYPE_u16 u16
+#define XE_PARAM_TYPE_u32 u32
+#define XE_PARAM_TYPE_u64 u64
+
+#define XE_PARAM_FMT_int "%d"
+#define XE_PARAM_FMT_bool "%d"
+#define XE_PARAM_FMT_u8 "%u"
+#define XE_PARAM_FMT_u16 "%u"
+#define XE_PARAM_FMT_u32 "%u"
+#define XE_PARAM_FMT_u64 "%llu"
+
+/*
+ * Per-parameter validators
+ *
+ * A validator is a function-like macro that takes the (already-parsed)
+ * typed value and expands to an int expression: 0 if the value is
+ * acceptable, a negative errno (typically -EINVAL) otherwise.
+ *
+ * XE_PARAM_VALIDATE_NONE is the no-op validator for parameters whose
+ * full type range is acceptable.
+ */
+#define XE_PARAM_VALIDATE_NONE(_v) (0)
+
+/*
+ * Per-parameter getter helpers.
+ *
+ * "getter" is a function-like macro invoked as ``getter(dev, name)``,
+ * where @dev is a non-NULL, already-looked-up &xe_config_group_device;
+ * it expands to the value xe_configfs_get_<name>() should return.
+ * XE_PARAM_GETTER_READ is the default for parameters with no special
+ * behavior: read the value straight out of the stored params struct.
+ *
+ * "fallback" is the value xe_configfs_get_<name>() returns when no
+ * device group is found for the given PCI device, and unconditionally
+ * when CONFIG_DRM_XE_DEBUG is disabled (the generated accessor is then
+ * a static inline stub in xe_configfs_debug.h, with no device group to
+ * look up at all). Because it must be evaluable in both of those
+ * contexts, it must never reference @dev or &xe_config_group_device.
+ * It is usually just the parameter's default value; override it when
+ * the "nothing configured" value differs from the initial stored
+ * value, as with guc_log_level falling back to the guc_log_level
+ * module parameter.
+ */
+#define XE_PARAM_GETTER_READ(_dev, _name) ((_dev)->config.debug.params._name)
+
+/**
+ * XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH - iterate over debug configfs params
+ * @param: function-like macro called as
+ * ``param(type, name, default, validator, visibility, getter, fallback)``
+ *
+ * type: parameter type token, one of {int, bool, u8, u16, u32, u64}
+ * name: parameter name; appears as a configfs file at
+ * /sys/kernel/config/xe/<bdf>/debug/<name>
+ * default: initial/default value of the parameter
+ * validator: function-like macro ``v -> int`` returning 0 or a negative
+ * errno; use XE_PARAM_VALIDATE_NONE when no extra constraints
+ * apply beyond the underlying type's range
+ * visibility: function-like macro ``item -> bool`` returning true when
+ * the attribute should be visible; evaluated in
+ * xe_configfs_debug.c where the platform descriptor is
+ * accessible; use XE_PARAM_VISIBLE_ALWAYS for unconditional
+ * visibility
+ * getter: function-like macro ``(dev, name) -> value``; use
+ * XE_PARAM_GETTER_READ unless the accessor needs bespoke
+ * behavior
+ * fallback: value returned when there is no configfs override to
+ * consult; usually just repeat the default
+ *
+ * To add a new debug-only configfs parameter, append a single line to
+ * this list. The infrastructure auto-generates the struct member,
+ * default initialization, configfs attribute (show/store), inclusion in
+ * the debug attrs[] array, the xe_configfs_get_<name>() accessor (both
+ * its CONFIG_DRM_XE_DEBUG=y implementation and its =n stub), and the
+ * diagnostic dump in dump_custom_dev_config().
+ *
+ * Generated configfs files use the default permissions provided by the
+ * configfs core (read-write); a system administrator can restrict them
+ * at runtime if needed.
+ */
+#define XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH(param) \
+ /* No parameters yet - add entries above this line. */
+
+/* Generate the struct that backs all debug params in xe_config_device. */
+#define _XE_PARAM_MEMBER(_T, _name, _def, _val, _vis, _get, _fallback) XE_PARAM_TYPE_##_T _name;
+struct xe_configfs_debug_params {
+ XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH(_XE_PARAM_MEMBER)
+};
+
+#undef _XE_PARAM_MEMBER
+
+/*
+ * Designated-initializer fragment for &xe_configfs_device_defaults. Use as:
+ *
+ * .debug.params = {
+ * XE_CONFIGFS_DEBUG_PARAMS_DEFAULTS
+ * },
+ */
+#define _XE_PARAM_DEFAULT_INIT(_T, _name, _def, _val, _vis, _get, _fallback) ._name = (_def),
+#define XE_CONFIGFS_DEBUG_PARAMS_DEFAULTS \
+ XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH(_XE_PARAM_DEFAULT_INIT)
+
+/*
+ * Forward declarations of the per-parameter configfs_attribute objects.
+ *
+ * The objects themselves are defined in xe_configfs_debug_params.c (as
+ * non-static so they can be referenced from xe_configfs_debug.c's
+ * xe_configfs_debug_attrs[] array and is_visible() callback). They live
+ * in the same translation unit as the X-macro-generated show/store
+ * handlers; consumers should reference them via xe_configfs_attr_<name>.
+ */
+#define _XE_PARAM_DECLARE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+ extern struct configfs_attribute xe_configfs_attr_##_name;
+XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH(_XE_PARAM_DECLARE_ATTR)
+#undef _XE_PARAM_DECLARE_ATTR
+
+/*
+ * Helper used by xe_configfs_debug.c to splice the auto-generated
+ * attribute pointers into its xe_configfs_debug_attrs[] array.
+ */
+#define XE_PARAM_ATTR_PTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+ &xe_configfs_attr_##_name,
+
+/*
+ * Declarations of the per-parameter xe_configfs_get_<name>() accessors.
+ *
+ * The CONFIG_DRM_XE_DEBUG=y implementations are generated alongside the
+ * show/store handlers in xe_configfs_debug_params.c; see the DOC section
+ * there for what they do. xe_configfs_debug.h uses this macro to declare
+ * the matching prototypes for its callers.
+ */
+#define XE_PARAM_DECLARE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+ XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev);
+
+/*
+ * CONFIG_DRM_XE_DEBUG=n stub for xe_configfs_get_<name>(). There is no
+ * configfs facility to consult in this configuration, so the accessor
+ * unconditionally returns its "fallback" value. Used by
+ * xe_configfs_debug.h.
+ */
+#define XE_PARAM_DECLARE_GETTER_STUB(_T, _name, _def, _val, _vis, _get, _fallback) \
+static inline XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+ return _fallback; \
+}
+
+#endif /* _XE_CONFIGFS_DEBUG_PARAMS_H_ */
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 13/15] drm/xe: Migrate existing debug configfs entries to params infrastructure
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
` (11 preceding siblings ...)
2026-10-05 22:06 ` [PATCH 12/15] drm/xe: Add infrastructure for debug configfs parameters Stuart Summers
@ 2026-10-05 22:06 ` Stuart Summers
2026-10-05 22:06 ` [PATCH 14/15] drm/xe: Taint kernel when debug configfs parameters are set Stuart Summers
` (5 subsequent siblings)
18 siblings, 0 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 22:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, Stuart Summers
Move the existing debug configfs entries whose semantics fit the
generic show/store template into the new parameter list.
Add validators for the guc_log_level and guc_log_target.
Add a custom getter for the guc_log_level to fall back to the modparam.
The new parameters are intentionally longer than the normal 80
character limit for readability.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: LLM
---
drivers/gpu/drm/xe/xe_configfs.c | 17 +-
drivers/gpu/drm/xe/xe_configfs_debug.c | 282 +-----------------
drivers/gpu/drm/xe/xe_configfs_debug.h | 20 +-
drivers/gpu/drm/xe/xe_configfs_debug_params.c | 1 +
drivers/gpu/drm/xe/xe_configfs_debug_params.h | 22 +-
drivers/gpu/drm/xe/xe_configfs_types.h | 7 +-
drivers/gpu/drm/xe/xe_guc.c | 2 +-
drivers/gpu/drm/xe/xe_psmi.c | 2 +-
drivers/gpu/drm/xe/xe_rtp.c | 2 +-
9 files changed, 50 insertions(+), 305 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index d09c97eb8120..cf7b25a9eced 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -132,11 +132,9 @@ const struct xe_config_device xe_configfs_device_defaults = {
.debug = {
.engines_allowed = U64_MAX,
.gt_types_allowed = U64_MAX,
- .guc_log_level = XE_GUC_LOG_LEVEL_UNSET,
- .guc_log_target = XE_DEFAULT_GUC_LOG_TARGET,
- .enable_multi_queue = true,
- .enable_psmi = false,
- .enable_vram_page_offline = true,
+ .params = {
+ XE_CONFIGFS_DEBUG_PARAMS_DEFAULTS
+ },
},
#endif
.sriov = {
@@ -580,11 +578,10 @@ static void dump_custom_dev_config(struct pci_dev *pdev,
#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
PRI_CUSTOM_ATTR("%llx", debug.engines_allowed);
PRI_CUSTOM_ATTR("%llx", debug.gt_types_allowed);
- PRI_CUSTOM_ATTR("%d", debug.guc_log_level);
- PRI_CUSTOM_ATTR("%d", debug.guc_log_target);
- PRI_CUSTOM_ATTR("%d", debug.enable_multi_queue);
- PRI_CUSTOM_ATTR("%d", debug.enable_psmi);
- PRI_CUSTOM_ATTR("%d", debug.enable_vram_page_offline);
+#define _XE_PARAM_DUMP(_T, _name, _def, _val, _vis, _get, _fallback) \
+ PRI_CUSTOM_ATTR(XE_PARAM_FMT_##_T, debug.params._name);
+ XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH(_XE_PARAM_DUMP)
+#undef _XE_PARAM_DUMP
#endif
PRI_CUSTOM_ATTR("%u", sriov.admin_only_pf);
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug.c b/drivers/gpu/drm/xe/xe_configfs_debug.c
index ff8e38ed717d..3524706bc654 100644
--- a/drivers/gpu/drm/xe/xe_configfs_debug.c
+++ b/drivers/gpu/drm/xe/xe_configfs_debug.c
@@ -817,278 +817,17 @@ static ssize_t gt_types_allowed_store(struct config_item *item, const char *page
return len;
}
-/**
- * xe_configfs_get_guc_log_level - get configfs guc_log_level setting
- * @pdev: pci device
- *
- * Returns the guc_log_level value configured via configfs. If the configfs
- * value is negative (the default is %XE_GUC_LOG_LEVEL_UNSET, -1), the value
- * of the ``guc_log_level`` module parameter is returned instead, allowing
- * the configfs entry to override the module parameter without affecting
- * users that rely solely on the module parameter.
- *
- * Return: GuC log level to use for this device.
- */
-int xe_configfs_get_guc_log_level(struct pci_dev *pdev)
-{
- struct xe_config_group_device *dev = find_device(pdev);
- int level = xe_modparam.guc_log_level;
-
- if (!dev)
- return level;
-
- scoped_guard(mutex, &dev->lock)
- if (dev->config.debug.guc_log_level >= 0)
- level = dev->config.debug.guc_log_level;
-
- config_group_put(&dev->group);
-
- return level;
-}
-
-static ssize_t guc_log_level_show(struct config_item *item, char *page)
-{
- struct xe_config_device *dev = xe_configfs_subgroup_to_device(item);
-
- return sprintf(page, "%d\n", dev->debug.guc_log_level);
-}
-
-static ssize_t guc_log_level_store(struct config_item *item, const char *page, size_t len)
-{
- struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item);
- int val;
- int ret;
-
- ret = kstrtoint(page, 0, &val);
- if (ret)
- return ret;
-
- if (val != XE_GUC_LOG_LEVEL_UNSET &&
- (val < 0 || val > GUC_LOG_LEVEL_MAX))
- return -EINVAL;
-
- guard(mutex)(&dev->lock);
- if (xe_configfs_is_bound(dev))
- return -EBUSY;
-
- dev->config.debug.guc_log_level = val;
-
- return len;
-}
-
-/**
- * xe_configfs_get_guc_log_target - get configfs GuC log target attribute
- * @pdev: pci device
- *
- * Return: guc_log_target attribute in configfs
- */
-u8 xe_configfs_get_guc_log_target(struct pci_dev *pdev)
-{
- struct xe_config_group_device *dev = find_device(pdev);
- u8 target;
-
- if (!dev)
- return xe_configfs_device_defaults.debug.guc_log_target;
-
- scoped_guard(mutex, &dev->lock)
- target = dev->config.debug.guc_log_target;
- config_group_put(&dev->group);
-
- return target;
-}
-
-static ssize_t guc_log_target_show(struct config_item *item, char *page)
-{
- struct xe_config_device *dev = xe_configfs_subgroup_to_device(item);
-
- return sprintf(page, "%d\n", dev->debug.guc_log_target);
-}
-
-static ssize_t guc_log_target_store(struct config_item *item, const char *page, size_t len)
-{
- struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item);
- u8 guc_log_target;
- int ret;
-
- ret = kstrtou8(page, 0, &guc_log_target);
- if (ret)
- return ret;
-
- if (guc_log_target > GUC_LOG_TARGET_MAX)
- return -EINVAL;
-
- guard(mutex)(&dev->lock);
- if (xe_configfs_is_bound(dev))
- return -EBUSY;
-
- dev->config.debug.guc_log_target = guc_log_target;
-
- return len;
-}
-
-/**
- * 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_device(pdev);
- bool ret;
-
- if (!dev)
- return xe_configfs_device_defaults.debug.enable_multi_queue;
-
- scoped_guard(mutex, &dev->lock)
- ret = dev->config.debug.enable_multi_queue;
- config_group_put(&dev->group);
-
- return ret;
-}
-
-static ssize_t enable_multi_queue_show(struct config_item *item, char *page)
-{
- struct xe_config_device *dev = xe_configfs_subgroup_to_device(item);
-
- return sprintf(page, "%d\n", dev->debug.enable_multi_queue);
-}
-
-static ssize_t enable_multi_queue_store(struct config_item *item, const char *page, size_t len)
-{
- struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item);
- bool val;
- int ret;
-
- ret = kstrtobool(page, &val);
- if (ret)
- return ret;
-
- guard(mutex)(&dev->lock);
- if (xe_configfs_is_bound(dev))
- return -EBUSY;
-
- dev->config.debug.enable_multi_queue = val;
-
- return len;
-}
-
-/**
- * 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_device(pdev);
- bool ret;
-
- if (!dev)
- return false;
-
- scoped_guard(mutex, &dev->lock)
- ret = dev->config.debug.enable_psmi;
- config_group_put(&dev->group);
-
- return ret;
-}
-
-static ssize_t enable_psmi_show(struct config_item *item, char *page)
-{
- struct xe_config_device *dev = xe_configfs_subgroup_to_device(item);
-
- return sprintf(page, "%d\n", dev->debug.enable_psmi);
-}
-
-static ssize_t enable_psmi_store(struct config_item *item, const char *page, size_t len)
-{
- struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item);
- bool val;
- int ret;
-
- ret = kstrtobool(page, &val);
- if (ret)
- return ret;
-
- guard(mutex)(&dev->lock);
- if (xe_configfs_is_bound(dev))
- return -EBUSY;
-
- dev->config.debug.enable_psmi = val;
-
- return len;
-}
-
-/**
- * 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_device(pdev);
- bool ret;
-
- if (!dev)
- return xe_configfs_device_defaults.debug.enable_vram_page_offline;
-
- scoped_guard(mutex, &dev->lock)
- ret = dev->config.debug.enable_vram_page_offline;
- config_group_put(&dev->group);
-
- return ret;
-}
-
-static ssize_t enable_vram_page_offline_show(struct config_item *item, char *page)
-{
- struct xe_config_device *dev = xe_configfs_subgroup_to_device(item);
-
- return sprintf(page, "%s\n", str_yes_no(dev->debug.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 = xe_configfs_subgroup_to_group_device(item);
- bool val;
- int ret;
-
- ret = kstrtobool(page, &val);
- if (ret)
- return ret;
-
- guard(mutex)(&dev->lock);
- if (xe_configfs_is_bound(dev))
- return -EBUSY;
-
- dev->config.debug.enable_vram_page_offline = val;
-
- return len;
-}
-
CONFIGFS_ATTR(, ctx_restore_mid_bb);
CONFIGFS_ATTR(, ctx_restore_post_bb);
CONFIGFS_ATTR(, engines_allowed);
CONFIGFS_ATTR(, gt_types_allowed);
-CONFIGFS_ATTR(, guc_log_level);
-CONFIGFS_ATTR(, guc_log_target);
-CONFIGFS_ATTR(, enable_multi_queue);
-CONFIGFS_ATTR(, enable_psmi);
-CONFIGFS_ATTR(, enable_vram_page_offline);
static struct configfs_attribute *xe_configfs_debug_attrs[] = {
&attr_ctx_restore_mid_bb,
&attr_ctx_restore_post_bb,
&attr_engines_allowed,
&attr_gt_types_allowed,
- &attr_guc_log_level,
- &attr_guc_log_target,
- &attr_enable_multi_queue,
- &attr_enable_psmi,
- &attr_enable_vram_page_offline,
+ XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH(XE_PARAM_ATTR_PTR)
NULL,
};
@@ -1096,27 +835,32 @@ static struct configfs_attribute *xe_configfs_debug_attrs[] = {
* Per-parameter visibility predicates.
*
* XE_PARAM_VISIBLE_ALWAYS - attribute is always shown.
+ * XE_PARAM_VISIBLE_VRAM_PAGE_OFFLINE - only shown on dGFX Crescent Island.
*
* These macros are only evaluated here, where the platform descriptor is
* reachable. xe_configfs_debug_params.h treats them as opaque tokens.
*/
#define XE_PARAM_VISIBLE_ALWAYS(_item) \
(true)
+#define XE_PARAM_VISIBLE_VRAM_PAGE_OFFLINE(_item) \
+ (xe_configfs_subgroup_to_group_device(_item)->desc->is_dgfx && \
+ xe_configfs_subgroup_to_group_device(_item)->desc->platform == XE_CRESCENTISLAND)
static bool xe_configfs_debug_is_visible(struct config_item *item,
struct configfs_attribute *attr, int n)
{
- struct xe_config_group_device *dev;
-
- if (attr == &attr_enable_vram_page_offline) {
- dev = xe_configfs_to_group_device(item->ci_parent);
-
- return dev->desc->is_dgfx && dev->desc->platform == XE_CRESCENTISLAND;
- }
+#define _XE_PARAM_VIS_CHECK(_T, _name, _def, _val, _vis, _get, _fallback) \
+ if (attr == &xe_configfs_attr_##_name) \
+ return _vis(item);
+ XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH(_XE_PARAM_VIS_CHECK)
+#undef _XE_PARAM_VIS_CHECK
return true;
}
+#undef XE_PARAM_VISIBLE_ALWAYS
+#undef XE_PARAM_VISIBLE_VRAM_PAGE_OFFLINE
+
static struct configfs_group_operations xe_configfs_debug_group_ops = {
.is_visible = xe_configfs_debug_is_visible,
};
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug.h b/drivers/gpu/drm/xe/xe_configfs_debug.h
index d8e08d64a410..136d3fb679ff 100644
--- a/drivers/gpu/drm/xe/xe_configfs_debug.h
+++ b/drivers/gpu/drm/xe/xe_configfs_debug.h
@@ -7,7 +7,7 @@
#include <linux/types.h>
-#include "xe_defaults.h"
+#include "xe_configfs_debug_params.h"
#include "xe_hw_engine_types.h"
#include "xe_module.h"
@@ -26,11 +26,7 @@ ssize_t xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
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);
-int xe_configfs_get_guc_log_level(struct pci_dev *pdev);
-u8 xe_configfs_get_guc_log_target(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);
+XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH(XE_PARAM_DECLARE_GETTER)
#else
/*
* Callers gate these accesses on CONFIG_DRM_XE_DEBUG, so when that's
@@ -49,17 +45,7 @@ static inline ssize_t xe_configfs_get_ctx_restore_post_bb(struct pci_dev *pdev,
static inline u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev) { return U64_MAX; }
static inline bool xe_configfs_primary_gt_allowed(struct pci_dev *pdev) { return true; }
static inline bool xe_configfs_media_gt_allowed(struct pci_dev *pdev) { return true; }
-static inline int xe_configfs_get_guc_log_level(struct pci_dev *pdev)
-{
- return xe_modparam.guc_log_level;
-}
-static inline u8 xe_configfs_get_guc_log_target(struct pci_dev *pdev)
-{
- return XE_DEFAULT_GUC_LOG_TARGET;
-}
-static inline bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev) { return true; }
-static inline bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev) { return false; }
-static inline bool xe_configfs_get_enable_vram_page_offline(struct pci_dev *pdev) { return true; }
+XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH(XE_PARAM_DECLARE_GETTER_STUB)
#endif
#endif /* _XE_CONFIGFS_DEBUG_H_ */
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug_params.c b/drivers/gpu/drm/xe/xe_configfs_debug_params.c
index c28d2e4693f8..b85bd82c8c94 100644
--- a/drivers/gpu/drm/xe/xe_configfs_debug_params.c
+++ b/drivers/gpu/drm/xe/xe_configfs_debug_params.c
@@ -40,6 +40,7 @@
#include "xe_configfs_debug_params.h"
#include "xe_configfs.h"
+#include "xe_configfs_debug.h"
#define _XE_PARAM_DEFINE_OPS_NUMERIC(_T, _name, _kstrto, _fmt, _validator) \
static ssize_t _name##_show(struct config_item *item, char *page) \
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug_params.h b/drivers/gpu/drm/xe/xe_configfs_debug_params.h
index 3ed7ed22961f..b469ae365aa1 100644
--- a/drivers/gpu/drm/xe/xe_configfs_debug_params.h
+++ b/drivers/gpu/drm/xe/xe_configfs_debug_params.h
@@ -10,6 +10,12 @@
#include <linux/errno.h>
#include <linux/types.h>
+#include "abi/guc_log_abi.h"
+#include "xe_defaults.h"
+#include "xe_guc_fwif.h"
+#include "xe_guc_log.h"
+#include "xe_module.h"
+
struct pci_dev;
/*
@@ -49,6 +55,12 @@ struct pci_dev;
*/
#define XE_PARAM_VALIDATE_NONE(_v) (0)
+#define XE_PARAM_VALIDATE_GUC_LOG_LEVEL(_v) \
+ (((_v) == XE_GUC_LOG_LEVEL_UNSET || \
+ ((_v) >= 0 && (_v) <= GUC_LOG_LEVEL_MAX)) ? 0 : -EINVAL)
+#define XE_PARAM_VALIDATE_GUC_LOG_TARGET(_v) \
+ (((_v) <= GUC_LOG_TARGET_MAX) ? 0 : -EINVAL)
+
/*
* Per-parameter getter helpers.
*
@@ -71,6 +83,10 @@ struct pci_dev;
*/
#define XE_PARAM_GETTER_READ(_dev, _name) ((_dev)->config.debug.params._name)
+#define XE_PARAM_GETTER_GUC_LOG_LEVEL(_dev, _name) \
+ ({ typeof((_dev)->config.debug.params._name) __v = (_dev)->config.debug.params._name; \
+ __v >= 0 ? __v : xe_modparam.guc_log_level; })
+
/**
* XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH - iterate over debug configfs params
* @param: function-like macro called as
@@ -106,7 +122,11 @@ struct pci_dev;
* at runtime if needed.
*/
#define XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH(param) \
- /* No parameters yet - add entries above this line. */
+ param(int, guc_log_level, XE_GUC_LOG_LEVEL_UNSET, XE_PARAM_VALIDATE_GUC_LOG_LEVEL, XE_PARAM_VISIBLE_ALWAYS, XE_PARAM_GETTER_GUC_LOG_LEVEL, xe_modparam.guc_log_level) \
+ param(u8, guc_log_target, XE_DEFAULT_GUC_LOG_TARGET, XE_PARAM_VALIDATE_GUC_LOG_TARGET, XE_PARAM_VISIBLE_ALWAYS, XE_PARAM_GETTER_READ, XE_DEFAULT_GUC_LOG_TARGET) \
+ param(bool, enable_multi_queue, true, XE_PARAM_VALIDATE_NONE, XE_PARAM_VISIBLE_ALWAYS, XE_PARAM_GETTER_READ, true) \
+ param(bool, enable_psmi, false, XE_PARAM_VALIDATE_NONE, XE_PARAM_VISIBLE_ALWAYS, XE_PARAM_GETTER_READ, false) \
+ param(bool, enable_vram_page_offline, true, XE_PARAM_VALIDATE_NONE, XE_PARAM_VISIBLE_VRAM_PAGE_OFFLINE, XE_PARAM_GETTER_READ, true)
/* Generate the struct that backs all debug params in xe_config_device. */
#define _XE_PARAM_MEMBER(_T, _name, _def, _val, _vis, _get, _fallback) XE_PARAM_TYPE_##_T _name;
diff --git a/drivers/gpu/drm/xe/xe_configfs_types.h b/drivers/gpu/drm/xe/xe_configfs_types.h
index f9c71954114d..7cee4daabdb0 100644
--- a/drivers/gpu/drm/xe/xe_configfs_types.h
+++ b/drivers/gpu/drm/xe/xe_configfs_types.h
@@ -9,6 +9,7 @@
#include <linux/mutex.h>
#include <linux/types.h>
+#include "xe_configfs_debug_params.h"
#include "xe_hw_engine_types.h"
#include "xe_pci_types.h"
#include "xe_sriov_types.h"
@@ -40,11 +41,7 @@ struct xe_config_group_device {
struct wa_bb ctx_restore_post_bb[XE_ENGINE_CLASS_MAX];
u64 engines_allowed;
u64 gt_types_allowed;
- int guc_log_level;
- u8 guc_log_target;
- bool enable_multi_queue;
- bool enable_psmi;
- bool enable_vram_page_offline;
+ struct xe_configfs_debug_params params;
} debug;
#endif
struct {
diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
index 41ab68dab150..14e93dda0180 100644
--- a/drivers/gpu/drm/xe/xe_guc.c
+++ b/drivers/gpu/drm/xe/xe_guc.c
@@ -100,7 +100,7 @@ static u32 guc_ctl_feature_flags(struct xe_guc *guc)
if (!xe->info.skip_guc_pc)
flags |= GUC_CTL_ENABLE_SLPC;
- if (xe_configfs_get_psmi_enabled(to_pci_dev(xe->drm.dev)))
+ if (xe_configfs_get_enable_psmi(to_pci_dev(xe->drm.dev)))
flags |= GUC_CTL_ENABLE_PSMI_LOGGING;
if (xe_guc_using_main_gamctrl_queues(guc))
diff --git a/drivers/gpu/drm/xe/xe_psmi.c b/drivers/gpu/drm/xe/xe_psmi.c
index 59af3d145418..ff9a14949339 100644
--- a/drivers/gpu/drm/xe/xe_psmi.c
+++ b/drivers/gpu/drm/xe/xe_psmi.c
@@ -34,7 +34,7 @@
static bool psmi_enabled(struct xe_device *xe)
{
- return xe_configfs_get_psmi_enabled(to_pci_dev(xe->drm.dev));
+ return xe_configfs_get_enable_psmi(to_pci_dev(xe->drm.dev));
}
static void psmi_free_object(struct xe_bo *bo)
diff --git a/drivers/gpu/drm/xe/xe_rtp.c b/drivers/gpu/drm/xe/xe_rtp.c
index 62068189320f..3ead1eac93f5 100644
--- a/drivers/gpu/drm/xe/xe_rtp.c
+++ b/drivers/gpu/drm/xe/xe_rtp.c
@@ -450,7 +450,7 @@ bool xe_rtp_match_psmi_enabled(const struct xe_device *xe,
const struct xe_gt *gt,
const struct xe_hw_engine *hwe)
{
- return xe_configfs_get_psmi_enabled(to_pci_dev(xe->drm.dev));
+ return xe_configfs_get_enable_psmi(to_pci_dev(xe->drm.dev));
}
bool xe_rtp_match_gt_has_discontiguous_dss_groups(const struct xe_device *xe,
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 14/15] drm/xe: Taint kernel when debug configfs parameters are set
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
` (12 preceding siblings ...)
2026-10-05 22:06 ` [PATCH 13/15] drm/xe: Migrate existing debug configfs entries to params infrastructure Stuart Summers
@ 2026-10-05 22:06 ` Stuart Summers
2026-10-05 22:06 ` [PATCH 15/15] drm/xe: Add enable_media module parameter Stuart Summers
` (4 subsequent siblings)
18 siblings, 0 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 22:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, Stuart Summers
Writing any debug configfs attribute indicates the system is running
in a non-standard configuration that may mask bugs or produce misleading
behaviour. Taint the kernel with TAINT_TEST on each successful write so
bug reports clearly reflect when debug settings were active.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: LLM
---
drivers/gpu/drm/xe/xe_configfs_debug.c | 12 ++++++++++++
drivers/gpu/drm/xe/xe_configfs_debug_params.c | 6 ++++++
2 files changed, 18 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug.c b/drivers/gpu/drm/xe/xe_configfs_debug.c
index 3524706bc654..aa8b73cb2a64 100644
--- a/drivers/gpu/drm/xe/xe_configfs_debug.c
+++ b/drivers/gpu/drm/xe/xe_configfs_debug.c
@@ -8,6 +8,7 @@
#include <linux/module.h>
#include <linux/cleanup.h>
#include <linux/find.h>
+#include <linux/panic.h>
#include <linux/pci.h>
#include <linux/string.h>
@@ -33,6 +34,10 @@
* and driver debugging and are not stable ABI. Using them is "at your own
* risk".
*
+ * Writing any debug attribute taints the kernel with ``TAINT_TEST``. This
+ * makes it visible in bug reports when a non-standard or unsafe configuration
+ * was active.
+ *
* See the top-level ``Xe Configfs`` documentation in ``xe_configfs.c``
* for how to create, probe and remove configfs devices. Once a device
* directory exists, the driver populates it with a ``debug/`` subdirectory
@@ -553,6 +558,7 @@ static ssize_t wa_bb_store(struct wa_bb wa_bb[static XE_ENGINE_CLASS_MAX],
if (!count) {
memset(wa_bb, 0, sizeof(tmp_wa_bb));
+ add_taint(TAINT_TEST, LOCKDEP_STILL_OK);
return len;
}
@@ -572,6 +578,8 @@ static ssize_t wa_bb_store(struct wa_bb wa_bb[static XE_ENGINE_CLASS_MAX],
memcpy(wa_bb, tmp_wa_bb, sizeof(tmp_wa_bb));
+ add_taint(TAINT_TEST, LOCKDEP_STILL_OK);
+
return len;
}
@@ -724,6 +732,8 @@ static ssize_t engines_allowed_store(struct config_item *item, const char *page,
dev->config.debug.engines_allowed = val;
+ add_taint(TAINT_TEST, LOCKDEP_STILL_OK);
+
return len;
}
@@ -814,6 +824,8 @@ static ssize_t gt_types_allowed_store(struct config_item *item, const char *page
dev->config.debug.gt_types_allowed = typemask;
+ add_taint(TAINT_TEST, LOCKDEP_STILL_OK);
+
return len;
}
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug_params.c b/drivers/gpu/drm/xe/xe_configfs_debug_params.c
index b85bd82c8c94..5a69d4b15442 100644
--- a/drivers/gpu/drm/xe/xe_configfs_debug_params.c
+++ b/drivers/gpu/drm/xe/xe_configfs_debug_params.c
@@ -29,11 +29,15 @@
* This file also generates the xe_configfs_get_<name>() accessors used
* by the rest of the driver to read a parameter's effective value; see
* the DOC section below.
+ *
+ * Setting these parameters taints the kernel since these are intended
+ * for debug and testing purposes only.
*/
#include <linux/cleanup.h>
#include <linux/configfs.h>
#include <linux/kernel.h>
+#include <linux/panic.h>
#include <linux/pci.h>
#include <linux/string.h>
#include <linux/sysfs.h>
@@ -65,6 +69,7 @@ static ssize_t _name##_store(struct config_item *item, const char *page, size_t
if (xe_configfs_is_bound(dev)) \
return -EBUSY; \
dev->config.debug.params._name = val; \
+ add_taint(TAINT_TEST, LOCKDEP_STILL_OK); \
return len; \
}
@@ -101,6 +106,7 @@ static ssize_t _name##_store(struct config_item *item, const char *page, size_t
if (xe_configfs_is_bound(dev)) \
return -EBUSY; \
dev->config.debug.params._name = val; \
+ add_taint(TAINT_TEST, LOCKDEP_STILL_OK); \
return len; \
}
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread
* [PATCH 15/15] drm/xe: Add enable_media module parameter
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
` (13 preceding siblings ...)
2026-10-05 22:06 ` [PATCH 14/15] drm/xe: Taint kernel when debug configfs parameters are set Stuart Summers
@ 2026-10-05 22:06 ` Stuart Summers
2026-10-05 22:13 ` ✗ CI.checkpatch: warning for Add new debug infrastructure for configfs (rev10) Patchwork
` (3 subsequent siblings)
18 siblings, 0 replies; 22+ messages in thread
From: Stuart Summers @ 2026-10-05 22:06 UTC (permalink / raw)
Cc: intel-xe, rodrigo.vivi, matthew.brost, umesh.nerlige.ramappa,
gustavo.sousa, matthew.d.roper, daniele.ceraolospurio,
shuicheng.lin, Stuart Summers
The gt_types_allowed configfs attribute is debug-only, so provide a
supported way to disable the media GT on production builds. The
modparam takes precedence over configfs so a single knob is enough to
guarantee the media GT is left alone.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: LLM
---
drivers/gpu/drm/xe/xe_configfs_debug.c | 3 +++
drivers/gpu/drm/xe/xe_defaults.h | 1 +
drivers/gpu/drm/xe/xe_module.c | 6 ++++++
drivers/gpu/drm/xe/xe_module.h | 1 +
drivers/gpu/drm/xe/xe_pci.c | 19 ++++++++++++++++---
5 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs_debug.c b/drivers/gpu/drm/xe/xe_configfs_debug.c
index aa8b73cb2a64..e6a0b1f960bc 100644
--- a/drivers/gpu/drm/xe/xe_configfs_debug.c
+++ b/drivers/gpu/drm/xe/xe_configfs_debug.c
@@ -184,6 +184,9 @@
* will always return one GT type per line. "primary" and "media" are the
* GT type names supported by this interface.
*
+ * Note that the ``enable_media=0`` module parameter takes precedence over
+ * this attribute: it disables the media GT even if "media" is listed here.
+ *
* This attribute can only be set before binding to the device.
*
* Examples:
diff --git a/drivers/gpu/drm/xe/xe_defaults.h b/drivers/gpu/drm/xe/xe_defaults.h
index 20292e682bf9..fdb12ebfa4e4 100644
--- a/drivers/gpu/drm/xe/xe_defaults.h
+++ b/drivers/gpu/drm/xe/xe_defaults.h
@@ -18,6 +18,7 @@
/* Sentinel value for guc_log_level configfs: not set, fall back to module param */
#define XE_GUC_LOG_LEVEL_UNSET -1
+#define XE_DEFAULT_ENABLE_MEDIA true
#define XE_DEFAULT_PROBE_DISPLAY IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
#define XE_DEFAULT_VRAM_BAR_SIZE 0
#define XE_DEFAULT_FORCE_PROBE CONFIG_DRM_XE_FORCE_PROBE
diff --git a/drivers/gpu/drm/xe/xe_module.c b/drivers/gpu/drm/xe/xe_module.c
index 897724cb5cfb..be6a3a439cb0 100644
--- a/drivers/gpu/drm/xe/xe_module.c
+++ b/drivers/gpu/drm/xe/xe_module.c
@@ -22,6 +22,7 @@
#include "xe_sched_job.h"
struct xe_modparam xe_modparam = {
+ .enable_media = XE_DEFAULT_ENABLE_MEDIA,
.probe_display = XE_DEFAULT_PROBE_DISPLAY,
.guc_log_level = XE_DEFAULT_GUC_LOG_LEVEL,
.force_probe = XE_DEFAULT_FORCE_PROBE,
@@ -38,6 +39,11 @@ module_param_named(svm_notifier_size, xe_modparam.svm_notifier_size, uint, 0600)
MODULE_PARM_DESC(svm_notifier_size, "Set the svm notifier size in MiB, must be power of 2 "
"[default=" __stringify(XE_DEFAULT_SVM_NOTIFIER_SIZE) "]");
+module_param_named(enable_media, xe_modparam.enable_media, bool, 0444);
+MODULE_PARM_DESC(enable_media, "Enable the media GT, when present. Disabling overrides any "
+ "media GT selected via the gt_types_allowed configfs attribute "
+ "[default=" __stringify(XE_DEFAULT_ENABLE_MEDIA) "])");
+
#if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
module_param_named(probe_display, xe_modparam.probe_display, bool, 0444);
MODULE_PARM_DESC(probe_display, "Probe display HW, otherwise it's left untouched "
diff --git a/drivers/gpu/drm/xe/xe_module.h b/drivers/gpu/drm/xe/xe_module.h
index 6272d9e41207..b10010e0a007 100644
--- a/drivers/gpu/drm/xe/xe_module.h
+++ b/drivers/gpu/drm/xe/xe_module.h
@@ -12,6 +12,7 @@ struct work_struct;
/* Module modprobe variables */
struct xe_modparam {
+ bool enable_media;
bool probe_display;
int force_vram_bar_size;
int guc_log_level;
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index 18fa9d4f2f6d..6544c373af8c 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -613,6 +613,19 @@ enum xe_gmdid_type {
GMDID_MEDIA
};
+/*
+ * The media GT is usable only if both the enable_media modparam and the
+ * gt_types_allowed configfs attribute allow it; the modparam takes
+ * precedence and disables the media GT regardless of the configfs setting.
+ */
+static bool media_gt_allowed(struct xe_device *xe)
+{
+ if (!xe_modparam.enable_media)
+ return false;
+
+ return xe_configfs_media_gt_allowed(to_pci_dev(xe->drm.dev));
+}
+
static int read_gmdid(struct xe_device *xe, enum xe_gmdid_type type, u32 *ver, u32 *revid)
{
struct xe_mmio *mmio = xe_root_tile_mmio(xe);
@@ -634,7 +647,7 @@ static int read_gmdid(struct xe_device *xe, enum xe_gmdid_type type, u32 *ver, u
int err;
/* Don't try to read media ver if media GT is not allowed */
- if (type == GMDID_MEDIA && !xe_configfs_media_gt_allowed(to_pci_dev(xe->drm.dev))) {
+ if (type == GMDID_MEDIA && !media_gt_allowed(xe)) {
*ver = *revid = 0;
return 0;
}
@@ -929,8 +942,8 @@ static struct xe_gt *alloc_media_gt(struct xe_tile *tile,
struct xe_device *xe = tile_to_xe(tile);
struct xe_gt *gt;
- if (!xe_configfs_media_gt_allowed(to_pci_dev(xe->drm.dev))) {
- xe_tile_info(tile, "Media GT disabled via configfs\n");
+ if (!media_gt_allowed(xe)) {
+ xe_tile_info(tile, "Media GT disabled\n");
return NULL;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 22+ messages in thread
* ✗ CI.checkpatch: warning for Add new debug infrastructure for configfs (rev10)
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
` (14 preceding siblings ...)
2026-10-05 22:06 ` [PATCH 15/15] drm/xe: Add enable_media module parameter Stuart Summers
@ 2026-10-05 22:13 ` Patchwork
2026-10-05 22:15 ` ✓ CI.KUnit: success " Patchwork
` (2 subsequent siblings)
18 siblings, 0 replies; 22+ messages in thread
From: Patchwork @ 2026-10-05 22:13 UTC (permalink / raw)
To: Stuart Summers; +Cc: intel-xe
== Series Details ==
Series: Add new debug infrastructure for configfs (rev10)
URL : https://patchwork.freedesktop.org/series/165879/
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
6bef5ce5c74dc76b4ee69ab2832c0d1fd63c91c7
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 6898366ee724f72f17d9d8d88fa82c0a9d20e682
Author: Stuart Summers <stuart.summers@intel.com>
Date: Mon Oct 5 22:06:51 2026 +0000
drm/xe: Add enable_media module parameter
The gt_types_allowed configfs attribute is debug-only, so provide a
supported way to disable the media GT on production builds. The
modparam takes precedence over configfs so a single knob is enough to
guarantee the media GT is left alone.
Signed-off-by: Stuart Summers <stuart.summers@intel.com>
Assisted-by: LLM
+ /mt/dim checkpatch 8c3a206e2315b84f2d349b180c297a807d31b326 drm-intel
c2bc6235a38a drm/xe: Guard configfs attribute reads in getters
fd0e176d4bc5 drm/xe/configfs: Fix out-of-bounds read in parse_wa_bb_lines()
f813fc74fdb9 drm/xe/configfs: Copy wa_bb out under the configfs lock
9f5607406cd1 drm/xe: Invert vram_page_offline configfs attribute
a988627edd82 drm/xe: Make survivability_mode configfs attribute a bitmap
6614228c9802 drm/xe: Sort xe_config_device fields
1050333b6a82 drm/xe: Split out configfs data structures
-:101: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#101:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 124 lines checked
48a24efa7068 drm/xe: Add a new debug focused configfs group
-:52: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#52:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 62 lines checked
d4085c6108b5 drm/xe: Move debug configfs entries to xe_configfs_debug.c
-:1677: WARNING:LONG_LINE: line length of 102 exceeds 100 columns
#1677: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:220:
+ { .cls = "vcs", .mask = XE_HW_ENGINE_VCS_MASK, .engine_class = XE_ENGINE_CLASS_VIDEO_DECODE },
-:1678: WARNING:LONG_LINE: line length of 105 exceeds 100 columns
#1678: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:221:
+ { .cls = "vecs", .mask = XE_HW_ENGINE_VECS_MASK, .engine_class = XE_ENGINE_CLASS_VIDEO_ENHANCE },
-:2413: WARNING:MACRO_ARG_UNUSED: Argument '_item' is not used in function-like macro
#2413: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:956:
+#define XE_PARAM_VISIBLE_ALWAYS(_item) \
+ (true)
total: 0 errors, 3 warnings, 0 checks, 2531 lines checked
a4a6428448c8 drm/xe/guc: Add configfs support for guc_log_level
8a291f3f8474 drm/xe/guc: Add support for NPK as a GuC log target
-:180: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#180: FILE: drivers/gpu/drm/xe/xe_configfs_debug.h:56:
}
+static inline u8 xe_configfs_get_guc_log_target(struct pci_dev *pdev)
total: 0 errors, 0 warnings, 1 checks, 182 lines checked
d11aa20d345a drm/xe: Add infrastructure for debug configfs parameters
-:76: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#76:
new file mode 100644
-:124: CHECK:MACRO_ARG_REUSE: Macro argument reuse '_name' - possible side-effects?
#124: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:44:
+#define _XE_PARAM_DEFINE_OPS_NUMERIC(_T, _name, _kstrto, _fmt, _validator) \
+static ssize_t _name##_show(struct config_item *item, char *page) \
+{ \
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item); \
+ XE_PARAM_TYPE_##_T val; \
+ scoped_guard(mutex, &dev->lock) \
+ val = dev->config.debug.params._name; \
+ return sprintf(page, _fmt "\n", val); \
+} \
+static ssize_t _name##_store(struct config_item *item, const char *page, size_t len) \
+{ \
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item); \
+ XE_PARAM_TYPE_##_T val; \
+ int ret = _kstrto(page, 0, &val); \
+ if (ret) \
+ return ret; \
+ ret = _validator(val); \
+ if (ret) \
+ return ret; \
+ guard(mutex)(&dev->lock); \
+ if (xe_configfs_is_bound(dev)) \
+ return -EBUSY; \
+ dev->config.debug.params._name = val; \
+ return len; \
+}
-:160: CHECK:MACRO_ARG_REUSE: Macro argument reuse '_name' - possible side-effects?
#160: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:80:
+#define _XE_PARAM_DEFINE_OPS_bool(_name, _validator) \
+static ssize_t _name##_show(struct config_item *item, char *page) \
+{ \
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item); \
+ bool val; \
+ scoped_guard(mutex, &dev->lock) \
+ val = dev->config.debug.params._name; \
+ return sprintf(page, "%d\n", val); \
+} \
+static ssize_t _name##_store(struct config_item *item, const char *page, size_t len) \
+{ \
+ struct xe_config_group_device *dev = xe_configfs_subgroup_to_group_device(item); \
+ bool val; \
+ int ret = kstrtobool(page, &val); \
+ if (ret) \
+ return ret; \
+ ret = _validator(val); \
+ if (ret) \
+ return ret; \
+ guard(mutex)(&dev->lock); \
+ if (xe_configfs_is_bound(dev)) \
+ return -EBUSY; \
+ dev->config.debug.params._name = val; \
+ return len; \
+}
-:186: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#186: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:106:
+#define _XE_PARAM_DEFINE_OPS(_T, _name, _def, _validator, _vis, _get, _fallback) \
+ _XE_PARAM_DEFINE_OPS_##_T(_name, _validator)
-:186: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#186: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:106:
+#define _XE_PARAM_DEFINE_OPS(_T, _name, _def, _validator, _vis, _get, _fallback) \
+ _XE_PARAM_DEFINE_OPS_##_T(_name, _validator)
-:186: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#186: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:106:
+#define _XE_PARAM_DEFINE_OPS(_T, _name, _def, _validator, _vis, _get, _fallback) \
+ _XE_PARAM_DEFINE_OPS_##_T(_name, _validator)
-:186: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#186: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:106:
+#define _XE_PARAM_DEFINE_OPS(_T, _name, _def, _validator, _vis, _get, _fallback) \
+ _XE_PARAM_DEFINE_OPS_##_T(_name, _validator)
-:194: WARNING:MACRO_ARG_UNUSED: Argument '_T' is not used in function-like macro
#194: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:114:
+#define _XE_PARAM_DEFINE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+struct configfs_attribute xe_configfs_attr_##_name = { \
+ .ca_name = __stringify(_name), \
+ .ca_owner = THIS_MODULE, \
+ .ca_mode = 0644, \
+ .show = _name##_show, \
+ .store = _name##_store, \
+};
-:194: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#194: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:114:
+#define _XE_PARAM_DEFINE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+struct configfs_attribute xe_configfs_attr_##_name = { \
+ .ca_name = __stringify(_name), \
+ .ca_owner = THIS_MODULE, \
+ .ca_mode = 0644, \
+ .show = _name##_show, \
+ .store = _name##_store, \
+};
-:194: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#194: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:114:
+#define _XE_PARAM_DEFINE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+struct configfs_attribute xe_configfs_attr_##_name = { \
+ .ca_name = __stringify(_name), \
+ .ca_owner = THIS_MODULE, \
+ .ca_mode = 0644, \
+ .show = _name##_show, \
+ .store = _name##_store, \
+};
-:194: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#194: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:114:
+#define _XE_PARAM_DEFINE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+struct configfs_attribute xe_configfs_attr_##_name = { \
+ .ca_name = __stringify(_name), \
+ .ca_owner = THIS_MODULE, \
+ .ca_mode = 0644, \
+ .show = _name##_show, \
+ .store = _name##_store, \
+};
-:194: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#194: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:114:
+#define _XE_PARAM_DEFINE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+struct configfs_attribute xe_configfs_attr_##_name = { \
+ .ca_name = __stringify(_name), \
+ .ca_owner = THIS_MODULE, \
+ .ca_mode = 0644, \
+ .show = _name##_show, \
+ .store = _name##_store, \
+};
-:194: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#194: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:114:
+#define _XE_PARAM_DEFINE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+struct configfs_attribute xe_configfs_attr_##_name = { \
+ .ca_name = __stringify(_name), \
+ .ca_owner = THIS_MODULE, \
+ .ca_mode = 0644, \
+ .show = _name##_show, \
+ .store = _name##_store, \
+};
-:194: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#194: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:114:
+#define _XE_PARAM_DEFINE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+struct configfs_attribute xe_configfs_attr_##_name = { \
+ .ca_name = __stringify(_name), \
+ .ca_owner = THIS_MODULE, \
+ .ca_mode = 0644, \
+ .show = _name##_show, \
+ .store = _name##_store, \
+};
-:218: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#218: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:138:
+#define _XE_PARAM_DEFINE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+ struct xe_config_group_device *dev = xe_configfs_find_group_device(pdev); \
+ XE_PARAM_TYPE_##_T ret; \
+ if (!dev) \
+ return (_fallback); \
+ scoped_guard(mutex, &dev->lock) \
+ ret = _get(dev, _name); \
+ config_group_put(&dev->group); \
+ return ret; \
+}
BUT SEE:
do {} while (0) advice is over-stated in a few situations:
The more obvious case is macros, like MODULE_PARM_DESC, invoked at
file-scope, where C disallows code (it must be in functions). See
$exceptions if you have one to add by name.
More troublesome is declarative macros used at top of new scope,
like DECLARE_PER_CPU. These might just compile with a do-while-0
wrapper, but would be incorrect. Most of these are handled by
detecting struct,union,etc declaration primitives in $exceptions.
Theres also macros called inside an if (block), which "return" an
expression. These cannot do-while, and need a ({}) wrapper.
Enjoy this qualification while we work to improve our heuristics.
-:218: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#218: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:138:
+#define _XE_PARAM_DEFINE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+ struct xe_config_group_device *dev = xe_configfs_find_group_device(pdev); \
+ XE_PARAM_TYPE_##_T ret; \
+ if (!dev) \
+ return (_fallback); \
+ scoped_guard(mutex, &dev->lock) \
+ ret = _get(dev, _name); \
+ config_group_put(&dev->group); \
+ return ret; \
+}
-:218: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#218: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:138:
+#define _XE_PARAM_DEFINE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+ struct xe_config_group_device *dev = xe_configfs_find_group_device(pdev); \
+ XE_PARAM_TYPE_##_T ret; \
+ if (!dev) \
+ return (_fallback); \
+ scoped_guard(mutex, &dev->lock) \
+ ret = _get(dev, _name); \
+ config_group_put(&dev->group); \
+ return ret; \
+}
-:218: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#218: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:138:
+#define _XE_PARAM_DEFINE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+ struct xe_config_group_device *dev = xe_configfs_find_group_device(pdev); \
+ XE_PARAM_TYPE_##_T ret; \
+ if (!dev) \
+ return (_fallback); \
+ scoped_guard(mutex, &dev->lock) \
+ ret = _get(dev, _name); \
+ config_group_put(&dev->group); \
+ return ret; \
+}
-:230: CHECK:LINE_SPACING: Please use a blank line after function/struct/union/enum declarations
#230: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.c:150:
+}
+XE_CONFIGFS_DEBUG_PARAMS_FOR_EACH(_XE_PARAM_DEFINE_GETTER)
-:287: WARNING:MACRO_ARG_UNUSED: Argument '_v' is not used in function-like macro
#287: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:50:
+#define XE_PARAM_VALIDATE_NONE(_v) (0)
-:349: WARNING:MULTISTATEMENT_MACRO_USE_DO_WHILE: Non-declarative macros with multiple statements should be enclosed in a do - while loop
#349: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:112:
+#define _XE_PARAM_MEMBER(_T, _name, _def, _val, _vis, _get, _fallback) XE_PARAM_TYPE_##_T _name;
BUT SEE:
do {} while (0) advice is over-stated in a few situations:
The more obvious case is macros, like MODULE_PARM_DESC, invoked at
file-scope, where C disallows code (it must be in functions). See
$exceptions if you have one to add by name.
More troublesome is declarative macros used at top of new scope,
like DECLARE_PER_CPU. These might just compile with a do-while-0
wrapper, but would be incorrect. Most of these are handled by
detecting struct,union,etc declaration primitives in $exceptions.
Theres also macros called inside an if (block), which "return" an
expression. These cannot do-while, and need a ({}) wrapper.
Enjoy this qualification while we work to improve our heuristics.
-:349: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#349: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:112:
+#define _XE_PARAM_MEMBER(_T, _name, _def, _val, _vis, _get, _fallback) XE_PARAM_TYPE_##_T _name;
-:349: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#349: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:112:
+#define _XE_PARAM_MEMBER(_T, _name, _def, _val, _vis, _get, _fallback) XE_PARAM_TYPE_##_T _name;
-:349: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#349: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:112:
+#define _XE_PARAM_MEMBER(_T, _name, _def, _val, _vis, _get, _fallback) XE_PARAM_TYPE_##_T _name;
-:349: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#349: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:112:
+#define _XE_PARAM_MEMBER(_T, _name, _def, _val, _vis, _get, _fallback) XE_PARAM_TYPE_##_T _name;
-:349: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#349: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:112:
+#define _XE_PARAM_MEMBER(_T, _name, _def, _val, _vis, _get, _fallback) XE_PARAM_TYPE_##_T _name;
-:349: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#349: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:112:
+#define _XE_PARAM_MEMBER(_T, _name, _def, _val, _vis, _get, _fallback) XE_PARAM_TYPE_##_T _name;
-:363: WARNING:MACRO_ARG_UNUSED: Argument '_T' is not used in function-like macro
#363: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:126:
+#define _XE_PARAM_DEFAULT_INIT(_T, _name, _def, _val, _vis, _get, _fallback) ._name = (_def),
-:363: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#363: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:126:
+#define _XE_PARAM_DEFAULT_INIT(_T, _name, _def, _val, _vis, _get, _fallback) ._name = (_def),
-:363: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#363: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:126:
+#define _XE_PARAM_DEFAULT_INIT(_T, _name, _def, _val, _vis, _get, _fallback) ._name = (_def),
-:363: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#363: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:126:
+#define _XE_PARAM_DEFAULT_INIT(_T, _name, _def, _val, _vis, _get, _fallback) ._name = (_def),
-:363: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#363: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:126:
+#define _XE_PARAM_DEFAULT_INIT(_T, _name, _def, _val, _vis, _get, _fallback) ._name = (_def),
-:376: WARNING:MACRO_ARG_UNUSED: Argument '_T' is not used in function-like macro
#376: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:139:
+#define _XE_PARAM_DECLARE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+ extern struct configfs_attribute xe_configfs_attr_##_name;
-:376: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#376: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:139:
+#define _XE_PARAM_DECLARE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+ extern struct configfs_attribute xe_configfs_attr_##_name;
-:376: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#376: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:139:
+#define _XE_PARAM_DECLARE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+ extern struct configfs_attribute xe_configfs_attr_##_name;
-:376: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#376: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:139:
+#define _XE_PARAM_DECLARE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+ extern struct configfs_attribute xe_configfs_attr_##_name;
-:376: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#376: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:139:
+#define _XE_PARAM_DECLARE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+ extern struct configfs_attribute xe_configfs_attr_##_name;
-:376: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#376: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:139:
+#define _XE_PARAM_DECLARE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+ extern struct configfs_attribute xe_configfs_attr_##_name;
-:376: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#376: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:139:
+#define _XE_PARAM_DECLARE_ATTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+ extern struct configfs_attribute xe_configfs_attr_##_name;
-:385: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#385: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:148:
+#define XE_PARAM_ATTR_PTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+ &xe_configfs_attr_##_name,
BUT SEE:
do {} while (0) advice is over-stated in a few situations:
The more obvious case is macros, like MODULE_PARM_DESC, invoked at
file-scope, where C disallows code (it must be in functions). See
$exceptions if you have one to add by name.
More troublesome is declarative macros used at top of new scope,
like DECLARE_PER_CPU. These might just compile with a do-while-0
wrapper, but would be incorrect. Most of these are handled by
detecting struct,union,etc declaration primitives in $exceptions.
Theres also macros called inside an if (block), which "return" an
expression. These cannot do-while, and need a ({}) wrapper.
Enjoy this qualification while we work to improve our heuristics.
-:385: WARNING:MACRO_ARG_UNUSED: Argument '_T' is not used in function-like macro
#385: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:148:
+#define XE_PARAM_ATTR_PTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+ &xe_configfs_attr_##_name,
-:385: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#385: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:148:
+#define XE_PARAM_ATTR_PTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+ &xe_configfs_attr_##_name,
-:385: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#385: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:148:
+#define XE_PARAM_ATTR_PTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+ &xe_configfs_attr_##_name,
-:385: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#385: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:148:
+#define XE_PARAM_ATTR_PTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+ &xe_configfs_attr_##_name,
-:385: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#385: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:148:
+#define XE_PARAM_ATTR_PTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+ &xe_configfs_attr_##_name,
-:385: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#385: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:148:
+#define XE_PARAM_ATTR_PTR(_T, _name, _def, _val, _vis, _get, _fallback) \
+ &xe_configfs_attr_##_name,
-:396: WARNING:MULTISTATEMENT_MACRO_USE_DO_WHILE: Non-declarative macros with multiple statements should be enclosed in a do - while loop
#396: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:159:
+#define XE_PARAM_DECLARE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+ XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev);
BUT SEE:
do {} while (0) advice is over-stated in a few situations:
The more obvious case is macros, like MODULE_PARM_DESC, invoked at
file-scope, where C disallows code (it must be in functions). See
$exceptions if you have one to add by name.
More troublesome is declarative macros used at top of new scope,
like DECLARE_PER_CPU. These might just compile with a do-while-0
wrapper, but would be incorrect. Most of these are handled by
detecting struct,union,etc declaration primitives in $exceptions.
Theres also macros called inside an if (block), which "return" an
expression. These cannot do-while, and need a ({}) wrapper.
Enjoy this qualification while we work to improve our heuristics.
-:396: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#396: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:159:
+#define XE_PARAM_DECLARE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+ XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev);
-:396: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#396: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:159:
+#define XE_PARAM_DECLARE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+ XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev);
-:396: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#396: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:159:
+#define XE_PARAM_DECLARE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+ XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev);
-:396: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#396: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:159:
+#define XE_PARAM_DECLARE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+ XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev);
-:396: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#396: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:159:
+#define XE_PARAM_DECLARE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+ XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev);
-:396: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#396: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:159:
+#define XE_PARAM_DECLARE_GETTER(_T, _name, _def, _val, _vis, _get, _fallback) \
+ XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev);
-:405: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#405: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:168:
+#define XE_PARAM_DECLARE_GETTER_STUB(_T, _name, _def, _val, _vis, _get, _fallback) \
+static inline XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+ return _fallback; \
+}
BUT SEE:
do {} while (0) advice is over-stated in a few situations:
The more obvious case is macros, like MODULE_PARM_DESC, invoked at
file-scope, where C disallows code (it must be in functions). See
$exceptions if you have one to add by name.
More troublesome is declarative macros used at top of new scope,
like DECLARE_PER_CPU. These might just compile with a do-while-0
wrapper, but would be incorrect. Most of these are handled by
detecting struct,union,etc declaration primitives in $exceptions.
Theres also macros called inside an if (block), which "return" an
expression. These cannot do-while, and need a ({}) wrapper.
Enjoy this qualification while we work to improve our heuristics.
-:405: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#405: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:168:
+#define XE_PARAM_DECLARE_GETTER_STUB(_T, _name, _def, _val, _vis, _get, _fallback) \
+static inline XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+ return _fallback; \
+}
-:405: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#405: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:168:
+#define XE_PARAM_DECLARE_GETTER_STUB(_T, _name, _def, _val, _vis, _get, _fallback) \
+static inline XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+ return _fallback; \
+}
-:405: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#405: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:168:
+#define XE_PARAM_DECLARE_GETTER_STUB(_T, _name, _def, _val, _vis, _get, _fallback) \
+static inline XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+ return _fallback; \
+}
-:405: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#405: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:168:
+#define XE_PARAM_DECLARE_GETTER_STUB(_T, _name, _def, _val, _vis, _get, _fallback) \
+static inline XE_PARAM_TYPE_##_T xe_configfs_get_##_name(struct pci_dev *pdev) \
+{ \
+ return _fallback; \
+}
total: 3 errors, 52 warnings, 3 checks, 333 lines checked
2eca27c3aec7 drm/xe: Migrate existing debug configfs entries to params infrastructure
-:48: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#48: FILE: drivers/gpu/drm/xe/xe_configfs.c:581:
+#define _XE_PARAM_DUMP(_T, _name, _def, _val, _vis, _get, _fallback) \
+ PRI_CUSTOM_ATTR(XE_PARAM_FMT_##_T, debug.params._name);
-:48: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#48: FILE: drivers/gpu/drm/xe/xe_configfs.c:581:
+#define _XE_PARAM_DUMP(_T, _name, _def, _val, _vis, _get, _fallback) \
+ PRI_CUSTOM_ATTR(XE_PARAM_FMT_##_T, debug.params._name);
-:48: WARNING:MACRO_ARG_UNUSED: Argument '_vis' is not used in function-like macro
#48: FILE: drivers/gpu/drm/xe/xe_configfs.c:581:
+#define _XE_PARAM_DUMP(_T, _name, _def, _val, _vis, _get, _fallback) \
+ PRI_CUSTOM_ATTR(XE_PARAM_FMT_##_T, debug.params._name);
-:48: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#48: FILE: drivers/gpu/drm/xe/xe_configfs.c:581:
+#define _XE_PARAM_DUMP(_T, _name, _def, _val, _vis, _get, _fallback) \
+ PRI_CUSTOM_ATTR(XE_PARAM_FMT_##_T, debug.params._name);
-:48: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#48: FILE: drivers/gpu/drm/xe/xe_configfs.c:581:
+#define _XE_PARAM_DUMP(_T, _name, _def, _val, _vis, _get, _fallback) \
+ PRI_CUSTOM_ATTR(XE_PARAM_FMT_##_T, debug.params._name);
-:48: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#48: FILE: drivers/gpu/drm/xe/xe_configfs.c:581:
+#define _XE_PARAM_DUMP(_T, _name, _def, _val, _vis, _get, _fallback) \
+ PRI_CUSTOM_ATTR(XE_PARAM_FMT_##_T, debug.params._name);
-:350: CHECK:MACRO_ARG_REUSE: Macro argument reuse '_item' - possible side-effects?
#350: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:845:
+#define XE_PARAM_VISIBLE_VRAM_PAGE_OFFLINE(_item) \
+ (xe_configfs_subgroup_to_group_device(_item)->desc->is_dgfx && \
+ xe_configfs_subgroup_to_group_device(_item)->desc->platform == XE_CRESCENTISLAND)
-:364: ERROR:MULTISTATEMENT_MACRO_USE_DO_WHILE: Macros starting with if should be enclosed by a do - while loop to avoid possible if/else logic defects
#364: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:852:
+#define _XE_PARAM_VIS_CHECK(_T, _name, _def, _val, _vis, _get, _fallback) \
+ if (attr == &xe_configfs_attr_##_name) \
+ return _vis(item);
-:364: WARNING:MACRO_ARG_UNUSED: Argument '_T' is not used in function-like macro
#364: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:852:
+#define _XE_PARAM_VIS_CHECK(_T, _name, _def, _val, _vis, _get, _fallback) \
+ if (attr == &xe_configfs_attr_##_name) \
+ return _vis(item);
-:364: WARNING:MACRO_ARG_UNUSED: Argument '_def' is not used in function-like macro
#364: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:852:
+#define _XE_PARAM_VIS_CHECK(_T, _name, _def, _val, _vis, _get, _fallback) \
+ if (attr == &xe_configfs_attr_##_name) \
+ return _vis(item);
-:364: WARNING:MACRO_ARG_UNUSED: Argument '_val' is not used in function-like macro
#364: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:852:
+#define _XE_PARAM_VIS_CHECK(_T, _name, _def, _val, _vis, _get, _fallback) \
+ if (attr == &xe_configfs_attr_##_name) \
+ return _vis(item);
-:364: WARNING:MACRO_ARG_UNUSED: Argument '_get' is not used in function-like macro
#364: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:852:
+#define _XE_PARAM_VIS_CHECK(_T, _name, _def, _val, _vis, _get, _fallback) \
+ if (attr == &xe_configfs_attr_##_name) \
+ return _vis(item);
-:364: WARNING:MACRO_ARG_UNUSED: Argument '_fallback' is not used in function-like macro
#364: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:852:
+#define _XE_PARAM_VIS_CHECK(_T, _name, _def, _val, _vis, _get, _fallback) \
+ if (attr == &xe_configfs_attr_##_name) \
+ return _vis(item);
-:364: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#364: FILE: drivers/gpu/drm/xe/xe_configfs_debug.c:852:
+#define _XE_PARAM_VIS_CHECK(_T, _name, _def, _val, _vis, _get, _fallback) \
+ if (attr == &xe_configfs_attr_##_name) \
+ return _vis(item);
-:457: CHECK:MACRO_ARG_REUSE: Macro argument reuse '_v' - possible side-effects?
#457: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:58:
+#define XE_PARAM_VALIDATE_GUC_LOG_LEVEL(_v) \
+ (((_v) == XE_GUC_LOG_LEVEL_UNSET || \
+ ((_v) >= 0 && (_v) <= GUC_LOG_LEVEL_MAX)) ? 0 : -EINVAL)
-:470: CHECK:MACRO_ARG_REUSE: Macro argument reuse '_name' - possible side-effects?
#470: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:86:
+#define XE_PARAM_GETTER_GUC_LOG_LEVEL(_dev, _name) \
+ ({ typeof((_dev)->config.debug.params._name) __v = (_dev)->config.debug.params._name; \
+ __v >= 0 ? __v : xe_modparam.guc_log_level; })
-:482: WARNING:LONG_LINE: line length of 202 exceeds 100 columns
#482: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:125:
+ param(int, guc_log_level, XE_GUC_LOG_LEVEL_UNSET, XE_PARAM_VALIDATE_GUC_LOG_LEVEL, XE_PARAM_VISIBLE_ALWAYS, XE_PARAM_GETTER_GUC_LOG_LEVEL, xe_modparam.guc_log_level) \
-:483: WARNING:LONG_LINE: line length of 202 exceeds 100 columns
#483: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:126:
+ param(u8, guc_log_target, XE_DEFAULT_GUC_LOG_TARGET, XE_PARAM_VALIDATE_GUC_LOG_TARGET, XE_PARAM_VISIBLE_ALWAYS, XE_PARAM_GETTER_READ, XE_DEFAULT_GUC_LOG_TARGET) \
-:484: WARNING:LONG_LINE: line length of 181 exceeds 100 columns
#484: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:127:
+ param(bool, enable_multi_queue, true, XE_PARAM_VALIDATE_NONE, XE_PARAM_VISIBLE_ALWAYS, XE_PARAM_GETTER_READ, true) \
-:485: WARNING:LONG_LINE: line length of 182 exceeds 100 columns
#485: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:128:
+ param(bool, enable_psmi, false, XE_PARAM_VALIDATE_NONE, XE_PARAM_VISIBLE_ALWAYS, XE_PARAM_GETTER_READ, false) \
-:486: WARNING:LONG_LINE: line length of 179 exceeds 100 columns
#486: FILE: drivers/gpu/drm/xe/xe_configfs_debug_params.h:129:
+ param(bool, enable_vram_page_offline, true, XE_PARAM_VALIDATE_NONE, XE_PARAM_VISIBLE_VRAM_PAGE_OFFLINE, XE_PARAM_GETTER_READ, true)
total: 1 errors, 17 warnings, 3 checks, 481 lines checked
2e0ede287501 drm/xe: Taint kernel when debug configfs parameters are set
6898366ee724 drm/xe: Add enable_media module parameter
^ permalink raw reply [flat|nested] 22+ messages in thread
* ✓ CI.KUnit: success for Add new debug infrastructure for configfs (rev10)
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
` (15 preceding siblings ...)
2026-10-05 22:13 ` ✗ CI.checkpatch: warning for Add new debug infrastructure for configfs (rev10) Patchwork
@ 2026-10-05 22:15 ` Patchwork
2026-10-05 23:17 ` ✓ Xe.CI.BAT: " Patchwork
2026-10-06 6:22 ` ✗ Xe.CI.FULL: failure " Patchwork
18 siblings, 0 replies; 22+ messages in thread
From: Patchwork @ 2026-10-05 22:15 UTC (permalink / raw)
To: Stuart Summers; +Cc: intel-xe
== Series Details ==
Series: Add new debug infrastructure for configfs (rev10)
URL : https://patchwork.freedesktop.org/series/165879/
State : success
== Summary ==
+ trap cleanup EXIT
+ kunitconfigs=('/kernel/drivers/gpu/tests/.kunitconfig' '/kernel/drivers/gpu/drm/xe/.kunitconfig' '/kernel/drivers/gpu/drm/tests/.kunitconfig' '/kernel/drivers/gpu/drm/ttm/tests/.kunitconfig' '/kernel/drivers/dma-buf/.kunitconfig')
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/tests/.kunitconfig
[22:13:05] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[22:13:09] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[22:13:30] Starting KUnit Kernel (1/1)...
[22:13:30] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[22:13:30] ================= gpu_buddy (14 subtests) ==================
[22:13:30] [PASSED] gpu_test_buddy_alloc_limit
[22:13:30] [PASSED] gpu_test_buddy_alloc_optimistic
[22:13:30] [PASSED] gpu_test_buddy_alloc_pessimistic
[22:13:30] [PASSED] gpu_test_buddy_alloc_pathological
[22:13:30] [PASSED] gpu_test_buddy_alloc_contiguous
[22:13:30] [PASSED] gpu_test_buddy_alloc_clear
[22:13:30] [PASSED] gpu_test_buddy_alloc_range
[22:13:30] [PASSED] gpu_test_buddy_alloc_range_bias
[22:13:31] [PASSED] gpu_test_buddy_fragmentation_performance
[22:13:32] [PASSED] gpu_test_buddy_dirty_tracker_performance
[22:13:32] [PASSED] gpu_test_buddy_alloc_exceeds_max_order
[22:13:32] [PASSED] gpu_test_buddy_offset_aligned_allocation
[22:13:32] [PASSED] gpu_test_buddy_subtree_offset_alignment_stress
[22:13:32] [PASSED] gpu_test_buddy_addr_to_block
[22:13:32] ==================== [PASSED] gpu_buddy ====================
[22:13:32] ============================================================
[22:13:32] Testing complete. Ran 14 tests: passed: 14
[22:13:32] Elapsed time: 27.445s total, 4.526s configuring, 20.752s building, 2.123s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/xe/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[22:13:32] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[22:13:34] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[22:14:09] Starting KUnit Kernel (1/1)...
[22:14:09] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[22:14:09] ================== guc_buf (11 subtests) ===================
[22:14:09] [PASSED] test_smallest
[22:14:09] [PASSED] test_largest
[22:14:09] [PASSED] test_granular
[22:14:09] [PASSED] test_unique
[22:14:09] [PASSED] test_overlap
[22:14:09] [PASSED] test_reusable
[22:14:09] [PASSED] test_too_big
[22:14:09] [PASSED] test_flush
[22:14:09] [PASSED] test_lookup
[22:14:09] [PASSED] test_data
[22:14:09] [PASSED] test_class
[22:14:09] ===================== [PASSED] guc_buf =====================
[22:14:09] =================== guc_dbm (7 subtests) ===================
[22:14:09] [PASSED] test_empty
[22:14:09] [PASSED] test_default
[22:14:09] ======================== test_size ========================
[22:14:09] [PASSED] 4
[22:14:09] [PASSED] 8
[22:14:09] [PASSED] 32
[22:14:09] [PASSED] 256
[22:14:09] ==================== [PASSED] test_size ====================
[22:14:09] ======================= test_reuse ========================
[22:14:09] [PASSED] 4
[22:14:09] [PASSED] 8
[22:14:09] [PASSED] 32
[22:14:09] [PASSED] 256
[22:14:09] =================== [PASSED] test_reuse ====================
[22:14:09] =================== test_range_overlap ====================
[22:14:09] [PASSED] 4
[22:14:09] [PASSED] 8
[22:14:09] [PASSED] 32
[22:14:09] [PASSED] 256
[22:14:09] =============== [PASSED] test_range_overlap ================
[22:14:09] =================== test_range_compact ====================
[22:14:09] [PASSED] 4
[22:14:09] [PASSED] 8
[22:14:09] [PASSED] 32
[22:14:09] [PASSED] 256
[22:14:09] =============== [PASSED] test_range_compact ================
[22:14:09] ==================== test_range_spare =====================
[22:14:09] [PASSED] 4
[22:14:09] [PASSED] 8
[22:14:09] [PASSED] 32
[22:14:09] [PASSED] 256
[22:14:09] ================ [PASSED] test_range_spare =================
[22:14:09] ===================== [PASSED] guc_dbm =====================
[22:14:09] =================== guc_idm (6 subtests) ===================
[22:14:09] [PASSED] bad_init
[22:14:09] [PASSED] no_init
[22:14:09] [PASSED] init_fini
[22:14:09] [PASSED] check_used
[22:14:09] [PASSED] check_quota
[22:14:09] [PASSED] check_all
[22:14:09] ===================== [PASSED] guc_idm =====================
[22:14:09] ============== guc_klv_helpers (13 subtests) ===============
[22:14:09] [PASSED] test_count
[22:14:09] [PASSED] test_encode_u32
[22:14:09] [PASSED] test_encode_u64
[22:14:09] [PASSED] test_encode_string
[22:14:09] [PASSED] test_encode_object_raw
[22:14:09] [PASSED] test_encode_object_klv
[22:14:09] [PASSED] test_encode_object_nested
[22:14:09] [PASSED] test_encode_object_basic
[22:14:09] ===================== test_decode_u16 =====================
[22:14:09] [PASSED] empty
[22:14:09] [PASSED] valid
[22:14:09] [PASSED] max
[22:14:09] [PASSED] big
[22:14:09] [PASSED] long
[22:14:09] ================= [PASSED] test_decode_u16 =================
[22:14:09] ===================== test_decode_u32 =====================
[22:14:09] [PASSED] empty
[22:14:09] [PASSED] valid
[22:14:09] [PASSED] max
[22:14:09] [PASSED] long
[22:14:09] ================= [PASSED] test_decode_u32 =================
[22:14:09] ===================== test_decode_u64 =====================
[22:14:09] [PASSED] empty
[22:14:09] [PASSED] short
[22:14:09] [PASSED] valid
[22:14:09] [PASSED] max
[22:14:09] [PASSED] long
[22:14:09] ================= [PASSED] test_decode_u64 =================
[22:14:09] ===================== test_decode_str =====================
[22:14:09] [PASSED] empty
[22:14:09] [PASSED] one
[22:14:09] [PASSED] one_trash
[22:14:09] [PASSED] two
[22:14:09] [PASSED] two_trash
[22:14:09] [PASSED] three
[22:14:09] [PASSED] dword
[22:14:09] [PASSED] four
[22:14:09] [PASSED] five
[22:14:09] [PASSED] six
[22:14:09] [PASSED] seven
[22:14:09] [PASSED] qword
[22:14:09] ================= [PASSED] test_decode_str =================
[22:14:09] [PASSED] test_print
[22:14:09] ================= [PASSED] guc_klv_helpers =================
[22:14:09] =================== xe_log (4 subtests) ====================
[22:14:09] [PASSED] demo_cper
[22:14:09] [PASSED] demo_dmesg
[22:14:09] ======================= test_dmesg ========================
[22:14:09] [PASSED] test_fatal
[22:14:09] [PASSED] test_fatal_tile
[22:14:09] [PASSED] test_fatal_gt
[22:14:09] [PASSED] test_fatal_comp
[22:14:09] [PASSED] test_fatal_comp_tile
[22:14:09] [PASSED] test_fatal_comp_gt
[22:14:09] [PASSED] test_fatal_all
[22:14:09] [PASSED] test_recoverable
[22:14:09] [PASSED] test_recoverable_tile
[22:14:09] [PASSED] test_recoverable_gt
[22:14:09] [PASSED] test_recoverable_comp
[22:14:09] [PASSED] test_recoverable_comp_tile
[22:14:09] [PASSED] test_recoverable_comp_gt
[22:14:09] [PASSED] test_recoverable_all
[22:14:09] [PASSED] test_info
[22:14:09] [PASSED] test_info_tile
[22:14:09] [PASSED] test_info_gt
[22:14:09] [PASSED] test_info_err
[22:14:09] [PASSED] test_info_comp
[22:14:09] [PASSED] test_info_comp_tile
[22:14:09] [PASSED] test_info_comp_gt
[22:14:09] [PASSED] test_info_all
[22:14:09] [PASSED] test_hw_fatal
[22:14:09] [PASSED] test_hw_recoverable
[22:14:09] [PASSED] test_hw_corrected
[22:14:09] [PASSED] test_hw_informational
[22:14:09] =================== [PASSED] test_dmesg ====================
[22:14:09] ====================== test_invalid =======================
[22:14:09] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[22:14:09] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[22:14:09] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[22:14:09] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[22:14:09] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[22:14:09] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[22:14:09] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[22:14:09] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[22:14:09] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[22:14:09] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[22:14:09] ================== [SKIPPED] test_invalid ==================
[22:14:09] ===================== [PASSED] xe_log ======================
[22:14:09] ================== no_relay (3 subtests) ===================
[22:14:09] [PASSED] xe_drops_guc2pf_if_not_ready
[22:14:09] [PASSED] xe_drops_guc2vf_if_not_ready
[22:14:09] [PASSED] xe_rejects_send_if_not_ready
[22:14:09] ==================== [PASSED] no_relay =====================
[22:14:09] ================== pf_relay (14 subtests) ==================
[22:14:09] [PASSED] pf_rejects_guc2pf_too_short
[22:14:09] [PASSED] pf_rejects_guc2pf_too_long
[22:14:09] [PASSED] pf_rejects_guc2pf_no_payload
[22:14:09] [PASSED] pf_fails_no_payload
[22:14:09] [PASSED] pf_fails_bad_origin
[22:14:09] [PASSED] pf_fails_bad_type
[22:14:09] [PASSED] pf_txn_reports_error
[22:14:09] [PASSED] pf_txn_sends_pf2guc
[22:14:09] [PASSED] pf_sends_pf2guc
[22:14:09] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[22:14:09] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[22:14:09] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[22:14:09] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[22:14:09] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[22:14:09] ==================== [PASSED] pf_relay =====================
[22:14:09] ================== vf_relay (3 subtests) ===================
[22:14:09] [PASSED] vf_rejects_guc2vf_too_short
[22:14:09] [PASSED] vf_rejects_guc2vf_too_long
[22:14:09] [PASSED] vf_rejects_guc2vf_no_payload
[22:14:09] ==================== [PASSED] vf_relay =====================
[22:14:09] ================ pf_gt_config (9 subtests) =================
[22:14:09] [PASSED] fair_contexts_1vf
[22:14:09] [PASSED] fair_doorbells_1vf
[22:14:09] [PASSED] fair_ggtt_1vf
[22:14:09] ====================== fair_vram_1vf ======================
[22:14:09] [PASSED] 3.50 GiB
[22:14:09] [PASSED] 11.5 GiB
[22:14:09] [PASSED] 15.5 GiB
[22:14:09] [PASSED] 31.5 GiB
[22:14:09] [PASSED] 63.5 GiB
[22:14:09] [PASSED] 1.91 GiB
[22:14:09] ================== [PASSED] fair_vram_1vf ==================
[22:14:09] ================ fair_vram_1vf_admin_only =================
[22:14:09] [PASSED] 3.50 GiB
[22:14:09] [PASSED] 11.5 GiB
[22:14:09] [PASSED] 15.5 GiB
[22:14:09] [PASSED] 31.5 GiB
[22:14:09] [PASSED] 63.5 GiB
[22:14:09] [PASSED] 1.91 GiB
[22:14:09] ============ [PASSED] fair_vram_1vf_admin_only =============
[22:14:09] ====================== fair_contexts ======================
[22:14:09] [PASSED] 1 VF
[22:14:09] [PASSED] 2 VFs
[22:14:09] [PASSED] 3 VFs
[22:14:09] [PASSED] 4 VFs
[22:14:09] [PASSED] 5 VFs
[22:14:09] [PASSED] 6 VFs
[22:14:09] [PASSED] 7 VFs
[22:14:09] [PASSED] 8 VFs
[22:14:09] [PASSED] 9 VFs
[22:14:09] [PASSED] 10 VFs
[22:14:09] [PASSED] 11 VFs
[22:14:09] [PASSED] 12 VFs
[22:14:09] [PASSED] 13 VFs
[22:14:09] [PASSED] 14 VFs
[22:14:09] [PASSED] 15 VFs
[22:14:09] [PASSED] 16 VFs
[22:14:09] [PASSED] 17 VFs
[22:14:09] [PASSED] 18 VFs
[22:14:09] [PASSED] 19 VFs
[22:14:09] [PASSED] 20 VFs
[22:14:09] [PASSED] 21 VFs
[22:14:09] [PASSED] 22 VFs
[22:14:09] [PASSED] 23 VFs
[22:14:09] [PASSED] 24 VFs
[22:14:09] [PASSED] 25 VFs
[22:14:09] [PASSED] 26 VFs
[22:14:09] [PASSED] 27 VFs
[22:14:09] [PASSED] 28 VFs
[22:14:09] [PASSED] 29 VFs
[22:14:09] [PASSED] 30 VFs
[22:14:09] [PASSED] 31 VFs
[22:14:09] [PASSED] 32 VFs
[22:14:09] [PASSED] 33 VFs
[22:14:09] [PASSED] 34 VFs
[22:14:09] [PASSED] 35 VFs
[22:14:09] [PASSED] 36 VFs
[22:14:09] [PASSED] 37 VFs
[22:14:09] [PASSED] 38 VFs
[22:14:09] [PASSED] 39 VFs
[22:14:09] [PASSED] 40 VFs
[22:14:09] [PASSED] 41 VFs
[22:14:09] [PASSED] 42 VFs
[22:14:09] [PASSED] 43 VFs
[22:14:09] [PASSED] 44 VFs
[22:14:09] [PASSED] 45 VFs
[22:14:09] [PASSED] 46 VFs
[22:14:09] [PASSED] 47 VFs
[22:14:09] [PASSED] 48 VFs
[22:14:09] [PASSED] 49 VFs
[22:14:09] [PASSED] 50 VFs
[22:14:09] [PASSED] 51 VFs
[22:14:09] [PASSED] 52 VFs
[22:14:09] [PASSED] 53 VFs
[22:14:09] [PASSED] 54 VFs
[22:14:09] [PASSED] 55 VFs
[22:14:09] [PASSED] 56 VFs
[22:14:09] [PASSED] 57 VFs
[22:14:09] [PASSED] 58 VFs
[22:14:09] [PASSED] 59 VFs
[22:14:09] [PASSED] 60 VFs
[22:14:09] [PASSED] 61 VFs
[22:14:09] [PASSED] 62 VFs
[22:14:09] [PASSED] 63 VFs
[22:14:09] ================== [PASSED] fair_contexts ==================
[22:14:09] ===================== fair_doorbells ======================
[22:14:09] [PASSED] 1 VF
[22:14:09] [PASSED] 2 VFs
[22:14:09] [PASSED] 3 VFs
[22:14:09] [PASSED] 4 VFs
[22:14:09] [PASSED] 5 VFs
[22:14:09] [PASSED] 6 VFs
[22:14:09] [PASSED] 7 VFs
[22:14:09] [PASSED] 8 VFs
[22:14:09] [PASSED] 9 VFs
[22:14:09] [PASSED] 10 VFs
[22:14:09] [PASSED] 11 VFs
[22:14:09] [PASSED] 12 VFs
[22:14:09] [PASSED] 13 VFs
[22:14:09] [PASSED] 14 VFs
[22:14:09] [PASSED] 15 VFs
[22:14:09] [PASSED] 16 VFs
[22:14:09] [PASSED] 17 VFs
[22:14:09] [PASSED] 18 VFs
[22:14:09] [PASSED] 19 VFs
[22:14:09] [PASSED] 20 VFs
[22:14:09] [PASSED] 21 VFs
[22:14:09] [PASSED] 22 VFs
[22:14:09] [PASSED] 23 VFs
[22:14:09] [PASSED] 24 VFs
[22:14:09] [PASSED] 25 VFs
[22:14:09] [PASSED] 26 VFs
[22:14:09] [PASSED] 27 VFs
[22:14:09] [PASSED] 28 VFs
[22:14:09] [PASSED] 29 VFs
[22:14:09] [PASSED] 30 VFs
[22:14:09] [PASSED] 31 VFs
[22:14:09] [PASSED] 32 VFs
[22:14:09] [PASSED] 33 VFs
[22:14:09] [PASSED] 34 VFs
[22:14:09] [PASSED] 35 VFs
[22:14:09] [PASSED] 36 VFs
[22:14:09] [PASSED] 37 VFs
[22:14:09] [PASSED] 38 VFs
[22:14:09] [PASSED] 39 VFs
[22:14:09] [PASSED] 40 VFs
[22:14:09] [PASSED] 41 VFs
[22:14:09] [PASSED] 42 VFs
[22:14:09] [PASSED] 43 VFs
[22:14:09] [PASSED] 44 VFs
[22:14:09] [PASSED] 45 VFs
[22:14:09] [PASSED] 46 VFs
[22:14:09] [PASSED] 47 VFs
[22:14:09] [PASSED] 48 VFs
[22:14:09] [PASSED] 49 VFs
[22:14:09] [PASSED] 50 VFs
[22:14:09] [PASSED] 51 VFs
[22:14:09] [PASSED] 52 VFs
[22:14:09] [PASSED] 53 VFs
[22:14:09] [PASSED] 54 VFs
[22:14:09] [PASSED] 55 VFs
[22:14:09] [PASSED] 56 VFs
[22:14:09] [PASSED] 57 VFs
[22:14:09] [PASSED] 58 VFs
[22:14:09] [PASSED] 59 VFs
[22:14:09] [PASSED] 60 VFs
[22:14:09] [PASSED] 61 VFs
[22:14:09] [PASSED] 62 VFs
[22:14:09] [PASSED] 63 VFs
[22:14:09] ================= [PASSED] fair_doorbells ==================
[22:14:09] ======================== fair_ggtt ========================
[22:14:09] [PASSED] 1 VF
[22:14:09] [PASSED] 2 VFs
[22:14:09] [PASSED] 3 VFs
[22:14:09] [PASSED] 4 VFs
[22:14:09] [PASSED] 5 VFs
[22:14:09] [PASSED] 6 VFs
[22:14:09] [PASSED] 7 VFs
[22:14:09] [PASSED] 8 VFs
[22:14:09] [PASSED] 9 VFs
[22:14:09] [PASSED] 10 VFs
[22:14:09] [PASSED] 11 VFs
[22:14:09] [PASSED] 12 VFs
[22:14:09] [PASSED] 13 VFs
[22:14:09] [PASSED] 14 VFs
[22:14:09] [PASSED] 15 VFs
[22:14:09] [PASSED] 16 VFs
[22:14:09] [PASSED] 17 VFs
[22:14:09] [PASSED] 18 VFs
[22:14:09] [PASSED] 19 VFs
[22:14:09] [PASSED] 20 VFs
[22:14:09] [PASSED] 21 VFs
[22:14:09] [PASSED] 22 VFs
[22:14:09] [PASSED] 23 VFs
[22:14:09] [PASSED] 24 VFs
[22:14:09] [PASSED] 25 VFs
[22:14:09] [PASSED] 26 VFs
[22:14:09] [PASSED] 27 VFs
[22:14:09] [PASSED] 28 VFs
[22:14:09] [PASSED] 29 VFs
[22:14:09] [PASSED] 30 VFs
[22:14:09] [PASSED] 31 VFs
[22:14:09] [PASSED] 32 VFs
[22:14:09] [PASSED] 33 VFs
[22:14:09] [PASSED] 34 VFs
[22:14:09] [PASSED] 35 VFs
[22:14:09] [PASSED] 36 VFs
[22:14:09] [PASSED] 37 VFs
[22:14:09] [PASSED] 38 VFs
[22:14:09] [PASSED] 39 VFs
[22:14:09] [PASSED] 40 VFs
[22:14:09] [PASSED] 41 VFs
[22:14:09] [PASSED] 42 VFs
[22:14:09] [PASSED] 43 VFs
[22:14:09] [PASSED] 44 VFs
[22:14:09] [PASSED] 45 VFs
[22:14:09] [PASSED] 46 VFs
[22:14:09] [PASSED] 47 VFs
[22:14:09] [PASSED] 48 VFs
[22:14:09] [PASSED] 49 VFs
[22:14:09] [PASSED] 50 VFs
[22:14:09] [PASSED] 51 VFs
[22:14:09] [PASSED] 52 VFs
[22:14:09] [PASSED] 53 VFs
[22:14:09] [PASSED] 54 VFs
[22:14:09] [PASSED] 55 VFs
[22:14:09] [PASSED] 56 VFs
[22:14:09] [PASSED] 57 VFs
[22:14:09] [PASSED] 58 VFs
[22:14:09] [PASSED] 59 VFs
[22:14:09] [PASSED] 60 VFs
[22:14:09] [PASSED] 61 VFs
[22:14:09] [PASSED] 62 VFs
[22:14:09] [PASSED] 63 VFs
[22:14:09] ==================== [PASSED] fair_ggtt ====================
[22:14:09] ======================== fair_vram ========================
[22:14:09] [PASSED] 1 VF
[22:14:09] [PASSED] 2 VFs
[22:14:09] [PASSED] 3 VFs
[22:14:09] [PASSED] 4 VFs
[22:14:09] [PASSED] 5 VFs
[22:14:09] [PASSED] 6 VFs
[22:14:09] [PASSED] 7 VFs
[22:14:09] [PASSED] 8 VFs
[22:14:09] [PASSED] 9 VFs
[22:14:09] [PASSED] 10 VFs
[22:14:09] [PASSED] 11 VFs
[22:14:09] [PASSED] 12 VFs
[22:14:09] [PASSED] 13 VFs
[22:14:09] [PASSED] 14 VFs
[22:14:09] [PASSED] 15 VFs
[22:14:09] [PASSED] 16 VFs
[22:14:09] [PASSED] 17 VFs
[22:14:09] [PASSED] 18 VFs
[22:14:09] [PASSED] 19 VFs
[22:14:09] [PASSED] 20 VFs
[22:14:09] [PASSED] 21 VFs
[22:14:09] [PASSED] 22 VFs
[22:14:09] [PASSED] 23 VFs
[22:14:09] [PASSED] 24 VFs
[22:14:09] [PASSED] 25 VFs
[22:14:09] [PASSED] 26 VFs
[22:14:09] [PASSED] 27 VFs
[22:14:09] [PASSED] 28 VFs
[22:14:09] [PASSED] 29 VFs
[22:14:09] [PASSED] 30 VFs
[22:14:09] [PASSED] 31 VFs
[22:14:09] [PASSED] 32 VFs
[22:14:09] [PASSED] 33 VFs
[22:14:09] [PASSED] 34 VFs
[22:14:09] [PASSED] 35 VFs
[22:14:09] [PASSED] 36 VFs
[22:14:09] [PASSED] 37 VFs
[22:14:09] [PASSED] 38 VFs
[22:14:09] [PASSED] 39 VFs
[22:14:09] [PASSED] 40 VFs
[22:14:09] [PASSED] 41 VFs
[22:14:09] [PASSED] 42 VFs
[22:14:09] [PASSED] 43 VFs
[22:14:09] [PASSED] 44 VFs
[22:14:09] [PASSED] 45 VFs
[22:14:09] [PASSED] 46 VFs
[22:14:09] [PASSED] 47 VFs
[22:14:09] [PASSED] 48 VFs
[22:14:09] [PASSED] 49 VFs
[22:14:09] [PASSED] 50 VFs
[22:14:09] [PASSED] 51 VFs
[22:14:09] [PASSED] 52 VFs
[22:14:09] [PASSED] 53 VFs
[22:14:09] [PASSED] 54 VFs
[22:14:09] [PASSED] 55 VFs
[22:14:09] [PASSED] 56 VFs
[22:14:09] [PASSED] 57 VFs
[22:14:09] [PASSED] 58 VFs
[22:14:09] [PASSED] 59 VFs
[22:14:09] [PASSED] 60 VFs
[22:14:09] [PASSED] 61 VFs
[22:14:09] [PASSED] 62 VFs
[22:14:09] [PASSED] 63 VFs
[22:14:09] ==================== [PASSED] fair_vram ====================
[22:14:09] ================== [PASSED] pf_gt_config ===================
[22:14:09] ===================== lmtt (1 subtest) =====================
[22:14:09] ======================== test_ops =========================
[22:14:09] [PASSED] 2-level
[22:14:09] [PASSED] multi-level
[22:14:09] ==================== [PASSED] test_ops =====================
[22:14:09] ====================== [PASSED] lmtt =======================
[22:14:09] ================= sriov_packet (1 subtest) =================
[22:14:09] [PASSED] test_descriptor_init
[22:14:09] ================== [PASSED] sriov_packet ===================
[22:14:09] ================= pf_service (11 subtests) =================
[22:14:09] [PASSED] pf_negotiate_any
[22:14:09] [PASSED] pf_negotiate_base_match
[22:14:09] [PASSED] pf_negotiate_base_newer
[22:14:09] [PASSED] pf_negotiate_base_next
[22:14:09] [SKIPPED] pf_negotiate_base_older (no older minor)
[22:14:09] [PASSED] pf_negotiate_base_prev
[22:14:09] [PASSED] pf_negotiate_latest_match
[22:14:09] [PASSED] pf_negotiate_latest_newer
[22:14:09] [PASSED] pf_negotiate_latest_next
[22:14:09] [SKIPPED] pf_negotiate_latest_older (no older minor)
[22:14:09] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[22:14:09] =================== [PASSED] pf_service ====================
[22:14:09] ================= xe_guc_g2g (2 subtests) ==================
[22:14:09] ============== xe_live_guc_g2g_kunit_default ==============
[22:14:09] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[22:14:09] ============== xe_live_guc_g2g_kunit_allmem ===============
[22:14:09] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[22:14:09] =================== [SKIPPED] xe_guc_g2g ===================
[22:14:09] =================== xe_mocs (2 subtests) ===================
[22:14:09] ================ xe_live_mocs_kernel_kunit ================
[22:14:09] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[22:14:09] ================ xe_live_mocs_reset_kunit =================
[22:14:09] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[22:14:09] ==================== [SKIPPED] xe_mocs =====================
[22:14:09] ================= xe_migrate (2 subtests) ==================
[22:14:09] ================= xe_migrate_sanity_kunit =================
[22:14:09] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[22:14:09] ================== xe_validate_ccs_kunit ==================
[22:14:09] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[22:14:09] =================== [SKIPPED] xe_migrate ===================
[22:14:09] ================== xe_dma_buf (1 subtest) ==================
[22:14:09] ==================== xe_dma_buf_kunit =====================
[22:14:09] ================ [SKIPPED] xe_dma_buf_kunit ================
[22:14:09] =================== [SKIPPED] xe_dma_buf ===================
[22:14:09] ================= xe_bo_shrink (1 subtest) =================
[22:14:09] =================== xe_bo_shrink_kunit ====================
[22:14:09] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[22:14:09] ================== [SKIPPED] xe_bo_shrink ==================
[22:14:09] ==================== xe_bo (2 subtests) ====================
[22:14:09] ================== xe_ccs_migrate_kunit ===================
[22:14:09] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[22:14:09] ==================== xe_bo_evict_kunit ====================
[22:14:09] =============== [SKIPPED] xe_bo_evict_kunit ================
[22:14:09] ===================== [SKIPPED] xe_bo ======================
[22:14:09] =================== xe_any (9 subtests) ====================
[22:14:09] [PASSED] test_to_xe
[22:14:09] [PASSED] test_to_dev
[22:14:09] [PASSED] test_to_pdev
[22:14:09] [PASSED] test_to_drm
[22:14:09] [PASSED] test_if_pdev
[22:14:09] [PASSED] test_if_xe
[22:14:09] [PASSED] test_if_tile
[22:14:09] [PASSED] test_if_gt
[22:14:09] [PASSED] test_to_id
[22:14:09] ===================== [PASSED] xe_any ======================
[22:14:09] ==================== args (13 subtests) ====================
[22:14:09] [PASSED] count_args_test
[22:14:09] [PASSED] call_args_example
[22:14:09] [PASSED] call_args_test
[22:14:09] [PASSED] drop_first_arg_example
[22:14:09] [PASSED] drop_first_arg_test
[22:14:09] [PASSED] first_arg_example
[22:14:09] [PASSED] first_arg_test
[22:14:09] [PASSED] last_arg_example
[22:14:09] [PASSED] last_arg_test
[22:14:09] [PASSED] pick_arg_example
[22:14:09] [PASSED] if_args_example
[22:14:09] [PASSED] if_args_test
[22:14:09] [PASSED] sep_comma_example
[22:14:09] ====================== [PASSED] args =======================
[22:14:09] =================== xe_pci (3 subtests) ====================
[22:14:09] ==================== check_graphics_ip ====================
[22:14:09] [PASSED] 12.00 Xe_LP
[22:14:09] [PASSED] 12.10 Xe_LP+
[22:14:09] [PASSED] 12.55 Xe_HPG
[22:14:09] [PASSED] 12.60 Xe_HPC
[22:14:09] [PASSED] 12.70 Xe_LPG
[22:14:09] [PASSED] 12.71 Xe_LPG
[22:14:09] [PASSED] 12.74 Xe_LPG+
[22:14:09] [PASSED] 20.01 Xe2_HPG
[22:14:09] [PASSED] 20.02 Xe2_HPG
[22:14:09] [PASSED] 20.04 Xe2_LPG
[22:14:09] [PASSED] 30.00 Xe3_LPG
[22:14:09] [PASSED] 30.01 Xe3_LPG
[22:14:09] [PASSED] 30.03 Xe3_LPG
[22:14:09] [PASSED] 30.04 Xe3_LPG
[22:14:09] [PASSED] 30.05 Xe3_LPG
[22:14:09] [PASSED] 35.10 Xe3p_LPG
[22:14:09] [PASSED] 35.11 Xe3p_XPC
[22:14:09] ================ [PASSED] check_graphics_ip ================
[22:14:09] ===================== check_media_ip ======================
[22:14:09] [PASSED] 12.00 Xe_M
[22:14:09] [PASSED] 12.55 Xe_HPM
[22:14:09] [PASSED] 13.00 Xe_LPM+
[22:14:09] [PASSED] 13.01 Xe2_HPM
[22:14:09] [PASSED] 20.00 Xe2_LPM
[22:14:09] [PASSED] 30.00 Xe3_LPM
[22:14:09] [PASSED] 30.02 Xe3_LPM
[22:14:09] [PASSED] 35.00 Xe3p_LPM
[22:14:09] [PASSED] 35.03 Xe3p_HPM
[22:14:09] ================= [PASSED] check_media_ip ==================
[22:14:09] =================== check_platform_desc ===================
[22:14:09] [PASSED] 0x9A60 (TIGERLAKE)
[22:14:09] [PASSED] 0x9A68 (TIGERLAKE)
[22:14:09] [PASSED] 0x9A70 (TIGERLAKE)
[22:14:09] [PASSED] 0x9A40 (TIGERLAKE)
[22:14:09] [PASSED] 0x9A49 (TIGERLAKE)
[22:14:09] [PASSED] 0x9A59 (TIGERLAKE)
[22:14:09] [PASSED] 0x9A78 (TIGERLAKE)
[22:14:09] [PASSED] 0x9AC0 (TIGERLAKE)
[22:14:09] [PASSED] 0x9AC9 (TIGERLAKE)
[22:14:09] [PASSED] 0x9AD9 (TIGERLAKE)
[22:14:09] [PASSED] 0x9AF8 (TIGERLAKE)
[22:14:09] [PASSED] 0x4C80 (ROCKETLAKE)
[22:14:09] [PASSED] 0x4C8A (ROCKETLAKE)
[22:14:09] [PASSED] 0x4C8B (ROCKETLAKE)
[22:14:09] [PASSED] 0x4C8C (ROCKETLAKE)
[22:14:09] [PASSED] 0x4C90 (ROCKETLAKE)
[22:14:09] [PASSED] 0x4C9A (ROCKETLAKE)
[22:14:09] [PASSED] 0x4680 (ALDERLAKE_S)
[22:14:09] [PASSED] 0x4682 (ALDERLAKE_S)
[22:14:09] [PASSED] 0x4688 (ALDERLAKE_S)
[22:14:09] [PASSED] 0x468A (ALDERLAKE_S)
[22:14:09] [PASSED] 0x468B (ALDERLAKE_S)
[22:14:09] [PASSED] 0x4690 (ALDERLAKE_S)
[22:14:09] [PASSED] 0x4692 (ALDERLAKE_S)
[22:14:09] [PASSED] 0x4693 (ALDERLAKE_S)
[22:14:09] [PASSED] 0x46A0 (ALDERLAKE_P)
[22:14:09] [PASSED] 0x46A1 (ALDERLAKE_P)
[22:14:09] [PASSED] 0x46A2 (ALDERLAKE_P)
[22:14:09] [PASSED] 0x46A3 (ALDERLAKE_P)
[22:14:09] [PASSED] 0x46A6 (ALDERLAKE_P)
[22:14:09] [PASSED] 0x46A8 (ALDERLAKE_P)
[22:14:09] [PASSED] 0x46AA (ALDERLAKE_P)
[22:14:09] [PASSED] 0x462A (ALDERLAKE_P)
[22:14:09] [PASSED] 0x4626 (ALDERLAKE_P)
[22:14:09] [PASSED] 0x4628 (ALDERLAKE_P)
[22:14:09] [PASSED] 0x46B0 (ALDERLAKE_P)
[22:14:09] [PASSED] 0x46B1 (ALDERLAKE_P)
[22:14:09] [PASSED] 0x46B2 (ALDERLAKE_P)
[22:14:09] [PASSED] 0x46B3 (ALDERLAKE_P)
[22:14:09] [PASSED] 0x46C0 (ALDERLAKE_P)
[22:14:09] [PASSED] 0x46C1 (ALDERLAKE_P)
[22:14:09] [PASSED] 0x46C2 (ALDERLAKE_P)
[22:14:09] [PASSED] 0x46C3 (ALDERLAKE_P)
[22:14:09] [PASSED] 0x46D0 (ALDERLAKE_N)
[22:14:09] [PASSED] 0x46D1 (ALDERLAKE_N)
[22:14:09] [PASSED] 0x46D2 (ALDERLAKE_N)
[22:14:09] [PASSED] 0x46D3 (ALDERLAKE_N)
[22:14:09] [PASSED] 0x46D4 (ALDERLAKE_N)
[22:14:09] [PASSED] 0xA721 (ALDERLAKE_P)
[22:14:09] [PASSED] 0xA7A1 (ALDERLAKE_P)
[22:14:09] [PASSED] 0xA7A9 (ALDERLAKE_P)
[22:14:09] [PASSED] 0xA7AC (ALDERLAKE_P)
[22:14:09] [PASSED] 0xA7AD (ALDERLAKE_P)
[22:14:09] [PASSED] 0xA720 (ALDERLAKE_P)
[22:14:09] [PASSED] 0xA7A0 (ALDERLAKE_P)
[22:14:09] [PASSED] 0xA7A8 (ALDERLAKE_P)
[22:14:09] [PASSED] 0xA7AA (ALDERLAKE_P)
[22:14:09] [PASSED] 0xA7AB (ALDERLAKE_P)
[22:14:09] [PASSED] 0xA780 (ALDERLAKE_S)
[22:14:09] [PASSED] 0xA781 (ALDERLAKE_S)
[22:14:09] [PASSED] 0xA782 (ALDERLAKE_S)
[22:14:09] [PASSED] 0xA783 (ALDERLAKE_S)
[22:14:09] [PASSED] 0xA788 (ALDERLAKE_S)
[22:14:09] [PASSED] 0xA789 (ALDERLAKE_S)
[22:14:09] [PASSED] 0xA78A (ALDERLAKE_S)
[22:14:09] [PASSED] 0xA78B (ALDERLAKE_S)
[22:14:09] [PASSED] 0x4905 (DG1)
[22:14:09] [PASSED] 0x4906 (DG1)
[22:14:09] [PASSED] 0x4907 (DG1)
[22:14:09] [PASSED] 0x4908 (DG1)
[22:14:09] [PASSED] 0x4909 (DG1)
[22:14:09] [PASSED] 0x56C0 (DG2)
[22:14:09] [PASSED] 0x56C2 (DG2)
[22:14:09] [PASSED] 0x56C1 (DG2)
[22:14:09] [PASSED] 0x7D51 (METEORLAKE)
[22:14:09] [PASSED] 0x7DD1 (METEORLAKE)
[22:14:09] [PASSED] 0x7D41 (METEORLAKE)
[22:14:09] [PASSED] 0x7D67 (METEORLAKE)
[22:14:09] [PASSED] 0xB640 (METEORLAKE)
[22:14:09] [PASSED] 0x56A0 (DG2)
[22:14:09] [PASSED] 0x56A1 (DG2)
[22:14:09] [PASSED] 0x56A2 (DG2)
[22:14:09] [PASSED] 0x56BE (DG2)
[22:14:09] [PASSED] 0x56BF (DG2)
[22:14:09] [PASSED] 0x5690 (DG2)
[22:14:09] [PASSED] 0x5691 (DG2)
[22:14:09] [PASSED] 0x5692 (DG2)
[22:14:09] [PASSED] 0x56A5 (DG2)
[22:14:09] [PASSED] 0x56A6 (DG2)
[22:14:09] [PASSED] 0x56B0 (DG2)
[22:14:09] [PASSED] 0x56B1 (DG2)
[22:14:09] [PASSED] 0x56BA (DG2)
[22:14:09] [PASSED] 0x56BB (DG2)
[22:14:09] [PASSED] 0x56BC (DG2)
[22:14:09] [PASSED] 0x56BD (DG2)
[22:14:09] [PASSED] 0x5693 (DG2)
[22:14:09] [PASSED] 0x5694 (DG2)
[22:14:09] [PASSED] 0x5695 (DG2)
[22:14:09] [PASSED] 0x56A3 (DG2)
[22:14:09] [PASSED] 0x56A4 (DG2)
[22:14:09] [PASSED] 0x56B2 (DG2)
[22:14:09] [PASSED] 0x56B3 (DG2)
[22:14:09] [PASSED] 0x5696 (DG2)
[22:14:09] [PASSED] 0x5697 (DG2)
[22:14:09] [PASSED] 0xB69 (PVC)
[22:14:09] [PASSED] 0xB6E (PVC)
[22:14:09] [PASSED] 0xBD4 (PVC)
[22:14:09] [PASSED] 0xBD5 (PVC)
[22:14:09] [PASSED] 0xBD6 (PVC)
[22:14:09] [PASSED] 0xBD7 (PVC)
[22:14:09] [PASSED] 0xBD8 (PVC)
[22:14:09] [PASSED] 0xBD9 (PVC)
[22:14:09] [PASSED] 0xBDA (PVC)
[22:14:09] [PASSED] 0xBDB (PVC)
[22:14:09] [PASSED] 0xBE0 (PVC)
[22:14:09] [PASSED] 0xBE1 (PVC)
[22:14:09] [PASSED] 0xBE5 (PVC)
[22:14:09] [PASSED] 0x7D40 (METEORLAKE)
[22:14:09] [PASSED] 0x7D45 (METEORLAKE)
[22:14:09] [PASSED] 0x7D55 (METEORLAKE)
[22:14:09] [PASSED] 0x7D60 (METEORLAKE)
[22:14:09] [PASSED] 0x7DD5 (METEORLAKE)
[22:14:09] [PASSED] 0x6420 (LUNARLAKE)
[22:14:09] [PASSED] 0x64A0 (LUNARLAKE)
[22:14:09] [PASSED] 0x64B0 (LUNARLAKE)
[22:14:09] [PASSED] 0xE202 (BATTLEMAGE)
[22:14:09] [PASSED] 0xE209 (BATTLEMAGE)
[22:14:09] [PASSED] 0xE20B (BATTLEMAGE)
[22:14:09] [PASSED] 0xE20C (BATTLEMAGE)
[22:14:09] [PASSED] 0xE20D (BATTLEMAGE)
[22:14:09] [PASSED] 0xE210 (BATTLEMAGE)
[22:14:09] [PASSED] 0xE211 (BATTLEMAGE)
[22:14:09] [PASSED] 0xE212 (BATTLEMAGE)
[22:14:09] [PASSED] 0xE216 (BATTLEMAGE)
[22:14:09] [PASSED] 0xE220 (BATTLEMAGE)
[22:14:09] [PASSED] 0xE221 (BATTLEMAGE)
[22:14:09] [PASSED] 0xE222 (BATTLEMAGE)
[22:14:09] [PASSED] 0xE223 (BATTLEMAGE)
[22:14:09] [PASSED] 0xB080 (PANTHERLAKE)
[22:14:09] [PASSED] 0xB081 (PANTHERLAKE)
[22:14:09] [PASSED] 0xB082 (PANTHERLAKE)
[22:14:09] [PASSED] 0xB083 (PANTHERLAKE)
[22:14:09] [PASSED] 0xB084 (PANTHERLAKE)
[22:14:09] [PASSED] 0xB085 (PANTHERLAKE)
[22:14:09] [PASSED] 0xB086 (PANTHERLAKE)
[22:14:09] [PASSED] 0xB087 (PANTHERLAKE)
[22:14:09] [PASSED] 0xB08F (PANTHERLAKE)
[22:14:09] [PASSED] 0xB090 (PANTHERLAKE)
[22:14:09] [PASSED] 0xB0A0 (PANTHERLAKE)
[22:14:09] [PASSED] 0xB0A1 (PANTHERLAKE)
[22:14:09] [PASSED] 0xB0B0 (PANTHERLAKE)
[22:14:09] [PASSED] 0xFD80 (PANTHERLAKE)
[22:14:09] [PASSED] 0xFD81 (PANTHERLAKE)
[22:14:09] [PASSED] 0xD740 (NOVALAKE_S)
[22:14:09] [PASSED] 0xD741 (NOVALAKE_S)
[22:14:09] [PASSED] 0xD742 (NOVALAKE_S)
[22:14:09] [PASSED] 0xD743 (NOVALAKE_S)
[22:14:09] [PASSED] 0xD745 (NOVALAKE_S)
[22:14:09] [PASSED] 0xD74A (NOVALAKE_S)
[22:14:09] [PASSED] 0xD74B (NOVALAKE_S)
[22:14:09] [PASSED] 0x674C (CRESCENTISLAND)
[22:14:09] [PASSED] 0x674D (CRESCENTISLAND)
[22:14:09] [PASSED] 0x674E (CRESCENTISLAND)
[22:14:09] [PASSED] 0x674F (CRESCENTISLAND)
[22:14:09] [PASSED] 0x6750 (CRESCENTISLAND)
[22:14:09] [PASSED] 0x6751 (CRESCENTISLAND)
[22:14:09] [PASSED] 0xD750 (NOVALAKE_P)
[22:14:09] [PASSED] 0xD751 (NOVALAKE_P)
[22:14:09] [PASSED] 0xD752 (NOVALAKE_P)
[22:14:09] [PASSED] 0xD753 (NOVALAKE_P)
[22:14:09] [PASSED] 0xD754 (NOVALAKE_P)
[22:14:09] [PASSED] 0xD755 (NOVALAKE_P)
[22:14:09] [PASSED] 0xD756 (NOVALAKE_P)
[22:14:09] [PASSED] 0xD757 (NOVALAKE_P)
[22:14:09] [PASSED] 0xD75F (NOVALAKE_P)
[22:14:09] =============== [PASSED] check_platform_desc ===============
[22:14:09] ===================== [PASSED] xe_pci ======================
[22:14:09] ============= xe_rtp_tables_test (5 subtests) ==============
[22:14:09] ================== xe_rtp_table_gt_test ===================
[22:14:09] [PASSED] gt_was/14011060649
[22:14:09] [PASSED] gt_was/14011059788
[22:14:09] [PASSED] gt_was/14015795083
[22:14:09] [PASSED] gt_was/16021867713
[22:14:09] [PASSED] gt_was/14019449301
[22:14:09] [PASSED] gt_was/16028005424
[22:14:09] [PASSED] gt_was/14026578760
[22:14:09] [PASSED] gt_was/1409420604
[22:14:09] [PASSED] gt_was/1408615072
[22:14:09] [PASSED] gt_was/22010523718
[22:14:09] [PASSED] gt_was/14011006942
[22:14:09] [PASSED] gt_was/14014830051
[22:14:09] [PASSED] gt_was/18018781329
[22:14:09] [PASSED] gt_was/1509235366
[22:14:09] [PASSED] gt_was/18018781329
[22:14:09] [PASSED] gt_was/16016694945
[22:14:09] [PASSED] gt_was/14018575942
[22:14:09] [PASSED] gt_was/22016670082
[22:14:09] [PASSED] gt_was/22016670082
[22:14:09] [PASSED] gt_was/14017421178
[22:14:09] [PASSED] gt_was/16025250150
[22:14:09] [PASSED] gt_was/14021871409
[22:14:09] [PASSED] gt_was/16021865536
[22:14:09] [PASSED] gt_was/14021486841
[22:14:09] [PASSED] gt_was/14025160223
[22:14:09] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[22:14:09] [PASSED] gt_was/14025635424
[22:14:09] [PASSED] gt_was/16028005424
[22:14:09] ============== [PASSED] xe_rtp_table_gt_test ===============
[22:14:09] ================== xe_rtp_table_gt_test ===================
[22:14:09] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[22:14:09] [PASSED] gt_tunings/Tuning: 32B Access Enable
[22:14:09] [PASSED] gt_tunings/Tuning: L3 cache
[22:14:09] [PASSED] gt_tunings/Tuning: L3 cache - media
[22:14:09] [PASSED] gt_tunings/Tuning: Compression Overfetch
[22:14:09] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[22:14:09] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[22:14:09] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[22:14:09] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[22:14:09] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[22:14:09] [PASSED] gt_tunings/Tuning: Stateless compression control
[22:14:09] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[22:14:09] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[22:14:09] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[22:14:09] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[22:14:09] [PASSED] gt_tunings/Tuning: Force All Non-Compressible Memory Reads to be 256B Overfetches
[22:14:09] ============== [PASSED] xe_rtp_table_gt_test ===============
[22:14:09] ================== xe_rtp_table_oob_test ==================
[22:14:09] [PASSED] oob_was/1607983814
[22:14:09] [PASSED] oob_was/16010904313
[22:14:09] [PASSED] oob_was/18022495364
[22:14:09] [PASSED] oob_was/22012773006
[22:14:09] [PASSED] oob_was/14014475959
[22:14:09] [PASSED] oob_was/22011391025
[22:14:09] [PASSED] oob_was/22012727170
[22:14:09] [PASSED] oob_was/22012727685
[22:14:09] [PASSED] oob_was/22016596838
[22:14:09] [PASSED] oob_was/18020744125
[22:14:09] [PASSED] oob_was/1409600907
[22:14:09] [PASSED] oob_was/22014953428
[22:14:09] [PASSED] oob_was/16017236439
[22:14:09] [PASSED] oob_was/14019821291
[22:14:09] [PASSED] oob_was/14015076503
[22:14:09] [PASSED] oob_was/22016122933
[22:14:09] [PASSED] oob_was/14018913170
[22:14:09] [PASSED] oob_was/14018094691
[22:14:09] [PASSED] oob_was/18024947630
[22:14:09] [PASSED] oob_was/16022287689
[22:14:09] [PASSED] oob_was/13011645652
[22:14:09] [PASSED] oob_was/14022293748
[22:14:09] [PASSED] oob_was/22019794406
[22:14:09] [PASSED] oob_was/22019338487
[22:14:09] [PASSED] oob_was/16023588340
[22:14:09] [PASSED] oob_was/14019789679
[22:14:09] [PASSED] oob_was/14022866841
[22:14:09] [PASSED] oob_was/16021333562
[22:14:09] [PASSED] oob_was/14016712196
[22:14:09] [PASSED] oob_was/14015568240
[22:14:09] [PASSED] oob_was/18013179988
[22:14:09] [PASSED] oob_was/1508761755
[22:14:09] [PASSED] oob_was/16023105232
[22:14:09] [PASSED] oob_was/16026508708
[22:14:09] [PASSED] oob_was/14020001231
[22:14:09] [PASSED] oob_was/16023683509
[22:14:09] [PASSED] oob_was/14025515070
[22:14:09] [PASSED] oob_was/15015404425_disable
[22:14:09] [PASSED] oob_was/16026007364
[22:14:09] [PASSED] oob_was/14020316580
[22:14:09] [PASSED] oob_was/14025883347
[22:14:09] [PASSED] oob_was/16029380221
[22:14:09] [PASSED] oob_was/22022079272
[22:14:09] [PASSED] oob_was/16029897822
[22:14:09] [PASSED] oob_was/14027054324
[22:14:09] [PASSED] oob_was/14025941587
[22:14:09] [PASSED] oob_was/16030224309
[22:14:09] ============== [PASSED] xe_rtp_table_oob_test ==============
[22:14:09] ================ xe_rtp_table_dev_oob_test ================
[22:14:09] [PASSED] device_oob_was/22010954014
[22:14:09] [PASSED] device_oob_was/15015404425
[22:14:09] [PASSED] device_oob_was/22019338487_display
[22:14:09] [PASSED] device_oob_was/14022085890
[22:14:09] [PASSED] device_oob_was/14026539277
[22:14:09] [PASSED] device_oob_was/14026633728
[22:14:09] [PASSED] device_oob_was/14026746987
[22:14:09] [PASSED] device_oob_was/14026779378
[22:14:09] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[22:14:09] ========== xe_rtp_table_missing_upper_bound_test ==========
[22:14:09] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[22:14:09] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[22:14:09] [PASSED] register_whitelist/1806527549
[22:14:09] [PASSED] register_whitelist/allow_read_ctx_timestamp
[22:14:09] [PASSED] register_whitelist/allow_read_queue_timestamp
[22:14:09] [PASSED] register_whitelist/16014440446
[22:14:09] [PASSED] register_whitelist/16017236439
[22:14:09] [PASSED] register_whitelist/16020183090
[22:14:09] [PASSED] register_whitelist/14024997852
[22:14:09] [PASSED] register_whitelist/14024997852
[22:14:09] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[22:14:09] =============== [PASSED] xe_rtp_tables_test ================
[22:14:09] =================== xe_rtp (3 subtests) ====================
[22:14:09] =================== xe_rtp_rules_tests ====================
[22:14:09] [PASSED] no
[22:14:09] [PASSED] yes
[22:14:09] [PASSED] no-and-no
[22:14:09] [PASSED] no-and-yes
[22:14:09] [PASSED] yes-and-no
[22:14:09] [PASSED] yes-and-yes
[22:14:09] [PASSED] no-or-no
[22:14:09] [PASSED] no-or-yes
[22:14:09] [PASSED] yes-or-no
[22:14:09] [PASSED] yes-or-yes
[22:14:09] [PASSED] no-yes-or-yes-no
[22:14:09] [PASSED] no-yes-or-yes-yes
[22:14:09] [PASSED] yes-yes-or-no-yes
[22:14:09] [PASSED] yes-yes-or-yes-yes
[22:14:09] [PASSED] no-no-or-yes-or-no
[22:14:09] [PASSED] or
[22:14:09] [PASSED] or-yes
[22:14:09] [PASSED] or-no
[22:14:09] [PASSED] yes-or
[22:14:09] [PASSED] no-or
[22:14:09] [PASSED] no-or-or-yes
[22:14:09] [PASSED] yes-or-or-no
[22:14:09] [PASSED] no-or-or-no
[22:14:09] [PASSED] missing-context-engine-class
[22:14:09] [PASSED] missing-context-engine-class-or-yes
[22:14:09] [PASSED] missing-context-engine-class-or-or-yes
[22:14:09] =============== [PASSED] xe_rtp_rules_tests ================
[22:14:09] =============== xe_rtp_process_to_sr_tests ================
[22:14:09] [PASSED] coalesce-same-reg
[22:14:09] [PASSED] coalesce-same-reg-literal-and-func
[22:14:09] [PASSED] no-match-no-add
[22:14:09] [PASSED] two-regs-two-entries
[22:14:09] [PASSED] clr-one-set-other
[22:14:09] [PASSED] set-field
[22:14:09] [PASSED] conflict-duplicate
[22:14:09] [PASSED] conflict-not-disjoint
[22:14:09] [PASSED] conflict-not-disjoint-literal-and-func
[22:14:09] [PASSED] conflict-reg-type
[22:14:09] [PASSED] bad-mcr-reg-forced-to-regular
[22:14:09] [PASSED] bad-regular-reg-forced-to-mcr
[22:14:09] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[22:14:09] ================== xe_rtp_process_tests ===================
[22:14:09] [PASSED] active1
[22:14:09] [PASSED] active2
[22:14:09] [PASSED] active-inactive
[22:14:09] [PASSED] inactive-active
[22:14:09] [PASSED] inactive-active-inactive
[22:14:09] [PASSED] inactive-inactive-inactive
[22:14:09] ============== [PASSED] xe_rtp_process_tests ===============
[22:14:09] ===================== [PASSED] xe_rtp ======================
[22:14:09] ==================== xe_wa (1 subtest) =====================
[22:14:09] ======================== xe_wa_gt =========================
[22:14:09] [PASSED] TIGERLAKE B0
[22:14:09] [PASSED] DG1 A0
[22:14:09] [PASSED] DG1 B0
[22:14:09] [PASSED] ALDERLAKE_S A0
[22:14:09] [PASSED] ALDERLAKE_S B0
[22:14:09] [PASSED] ALDERLAKE_S C0
[22:14:09] [PASSED] ALDERLAKE_S D0
[22:14:09] [PASSED] ALDERLAKE_P A0
[22:14:09] [PASSED] ALDERLAKE_P B0
[22:14:09] [PASSED] ALDERLAKE_P C0
[22:14:09] [PASSED] ALDERLAKE_S RPLS D0
[22:14:09] [PASSED] ALDERLAKE_P RPLU E0
[22:14:09] [PASSED] DG2 G10 C0
[22:14:09] [PASSED] DG2 G11 B1
[22:14:09] [PASSED] DG2 G12 A1
[22:14:09] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[22:14:09] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[22:14:09] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[22:14:09] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[22:14:09] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[22:14:09] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[22:14:09] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[22:14:09] ==================== [PASSED] xe_wa_gt =====================
[22:14:09] ====================== [PASSED] xe_wa ======================
[22:14:09] ============================================================
[22:14:09] Testing complete. Ran 821 tests: passed: 793, skipped: 28
[22:14:09] Elapsed time: 37.065s total, 1.877s configuring, 34.420s building, 0.726s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[22:14:10] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[22:14:11] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[22:14:37] Starting KUnit Kernel (1/1)...
[22:14:37] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[22:14:37] ============ drm_test_pick_cmdline (2 subtests) ============
[22:14:37] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[22:14:37] =============== drm_test_pick_cmdline_named ===============
[22:14:37] [PASSED] NTSC
[22:14:37] [PASSED] NTSC-J
[22:14:37] [PASSED] PAL
[22:14:37] [PASSED] PAL-M
[22:14:37] =========== [PASSED] drm_test_pick_cmdline_named ===========
[22:14:37] ============== [PASSED] drm_test_pick_cmdline ==============
[22:14:37] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[22:14:37] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[22:14:37] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[22:14:37] =========== drm_validate_clone_mode (2 subtests) ===========
[22:14:37] ============== drm_test_check_in_clone_mode ===============
[22:14:37] [PASSED] in_clone_mode
[22:14:37] [PASSED] not_in_clone_mode
[22:14:37] ========== [PASSED] drm_test_check_in_clone_mode ===========
[22:14:37] =============== drm_test_check_valid_clones ===============
[22:14:37] [PASSED] not_in_clone_mode
[22:14:37] [PASSED] valid_clone
[22:14:37] [PASSED] invalid_clone
[22:14:37] =========== [PASSED] drm_test_check_valid_clones ===========
[22:14:37] ============= [PASSED] drm_validate_clone_mode =============
[22:14:37] ============= drm_validate_modeset (1 subtest) =============
[22:14:37] [PASSED] drm_test_check_connector_changed_modeset
[22:14:37] ============== [PASSED] drm_validate_modeset ===============
[22:14:37] ====== drm_test_bridge_get_current_state (1 subtest) =======
[22:14:37] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[22:14:37] ======== [PASSED] drm_test_bridge_get_current_state ========
[22:14:37] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[22:14:37] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[22:14:37] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[22:14:37] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[22:14:37] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[22:14:37] ============== drm_bridge_alloc (2 subtests) ===============
[22:14:37] [PASSED] drm_test_drm_bridge_alloc_basic
[22:14:37] [PASSED] drm_test_drm_bridge_alloc_get_put
[22:14:37] ================ [PASSED] drm_bridge_alloc =================
[22:14:37] ============= drm_bridge_bus_fmt (5 subtests) ==============
[22:14:37] [PASSED] drm_test_bridge_rgb_yuv_rgb
[22:14:37] [PASSED] drm_test_bridge_must_convert_to_yuv444
[22:14:37] [PASSED] drm_test_bridge_hdmi_auto_rgb
[22:14:37] [PASSED] drm_test_bridge_auto_first
[22:14:37] [PASSED] drm_test_bridge_rgb_yuv_no_path
[22:14:37] =============== [PASSED] drm_bridge_bus_fmt ================
[22:14:37] ============= drm_cmdline_parser (40 subtests) =============
[22:14:37] [PASSED] drm_test_cmdline_force_d_only
[22:14:37] [PASSED] drm_test_cmdline_force_D_only_dvi
[22:14:37] [PASSED] drm_test_cmdline_force_D_only_hdmi
[22:14:37] [PASSED] drm_test_cmdline_force_D_only_not_digital
[22:14:37] [PASSED] drm_test_cmdline_force_e_only
[22:14:37] [PASSED] drm_test_cmdline_res
[22:14:37] [PASSED] drm_test_cmdline_res_vesa
[22:14:37] [PASSED] drm_test_cmdline_res_vesa_rblank
[22:14:37] [PASSED] drm_test_cmdline_res_rblank
[22:14:37] [PASSED] drm_test_cmdline_res_bpp
[22:14:37] [PASSED] drm_test_cmdline_res_refresh
[22:14:37] [PASSED] drm_test_cmdline_res_bpp_refresh
[22:14:37] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[22:14:37] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[22:14:37] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[22:14:37] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[22:14:37] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[22:14:37] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[22:14:37] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[22:14:37] [PASSED] drm_test_cmdline_res_margins_force_on
[22:14:37] [PASSED] drm_test_cmdline_res_vesa_margins
[22:14:37] [PASSED] drm_test_cmdline_name
[22:14:37] [PASSED] drm_test_cmdline_name_bpp
[22:14:37] [PASSED] drm_test_cmdline_name_option
[22:14:37] [PASSED] drm_test_cmdline_name_bpp_option
[22:14:37] [PASSED] drm_test_cmdline_rotate_0
[22:14:37] [PASSED] drm_test_cmdline_rotate_90
[22:14:37] [PASSED] drm_test_cmdline_rotate_180
[22:14:37] [PASSED] drm_test_cmdline_rotate_270
[22:14:37] [PASSED] drm_test_cmdline_hmirror
[22:14:37] [PASSED] drm_test_cmdline_vmirror
[22:14:37] [PASSED] drm_test_cmdline_margin_options
[22:14:37] [PASSED] drm_test_cmdline_multiple_options
[22:14:37] [PASSED] drm_test_cmdline_bpp_extra_and_option
[22:14:37] [PASSED] drm_test_cmdline_extra_and_option
[22:14:37] [PASSED] drm_test_cmdline_freestanding_options
[22:14:37] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[22:14:37] [PASSED] drm_test_cmdline_panel_orientation
[22:14:37] ================ drm_test_cmdline_invalid =================
[22:14:37] [PASSED] margin_only
[22:14:37] [PASSED] interlace_only
[22:14:37] [PASSED] res_missing_x
[22:14:37] [PASSED] res_missing_y
[22:14:37] [PASSED] res_bad_y
[22:14:37] [PASSED] res_missing_y_bpp
[22:14:37] [PASSED] res_bad_bpp
[22:14:37] [PASSED] res_bad_refresh
[22:14:37] [PASSED] res_bpp_refresh_force_on_off
[22:14:37] [PASSED] res_invalid_mode
[22:14:37] [PASSED] res_bpp_wrong_place_mode
[22:14:37] [PASSED] name_bpp_refresh
[22:14:37] [PASSED] name_refresh
[22:14:37] [PASSED] name_refresh_wrong_mode
[22:14:37] [PASSED] name_refresh_invalid_mode
[22:14:37] [PASSED] rotate_multiple
[22:14:37] [PASSED] rotate_invalid_val
[22:14:37] [PASSED] rotate_truncated
[22:14:37] [PASSED] invalid_option
[22:14:37] [PASSED] invalid_tv_option
[22:14:37] [PASSED] truncated_tv_option
[22:14:37] ============ [PASSED] drm_test_cmdline_invalid =============
[22:14:37] =============== drm_test_cmdline_tv_options ===============
[22:14:37] [PASSED] NTSC
[22:14:37] [PASSED] NTSC_443
[22:14:37] [PASSED] NTSC_J
[22:14:37] [PASSED] PAL
[22:14:37] [PASSED] PAL_M
[22:14:37] [PASSED] PAL_N
[22:14:37] [PASSED] SECAM
[22:14:37] [PASSED] MONO_525
[22:14:37] [PASSED] MONO_625
[22:14:37] =========== [PASSED] drm_test_cmdline_tv_options ===========
[22:14:37] =============== [PASSED] drm_cmdline_parser ================
[22:14:37] ========== drmm_connector_hdmi_init (20 subtests) ==========
[22:14:37] [PASSED] drm_test_connector_hdmi_init_valid
[22:14:37] [PASSED] drm_test_connector_hdmi_init_bpc_8
[22:14:37] [PASSED] drm_test_connector_hdmi_init_bpc_10
[22:14:37] [PASSED] drm_test_connector_hdmi_init_bpc_12
[22:14:37] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[22:14:37] [PASSED] drm_test_connector_hdmi_init_bpc_null
[22:14:37] [PASSED] drm_test_connector_hdmi_init_formats_empty
[22:14:37] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[22:14:37] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[22:14:37] [PASSED] supported_formats=0x9 yuv420_allowed=1
[22:14:37] [PASSED] supported_formats=0x9 yuv420_allowed=0
[22:14:37] [PASSED] supported_formats=0x5 yuv420_allowed=1
[22:14:37] [PASSED] supported_formats=0x5 yuv420_allowed=0
[22:14:37] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[22:14:37] [PASSED] drm_test_connector_hdmi_init_null_ddc
[22:14:37] [PASSED] drm_test_connector_hdmi_init_null_product
[22:14:37] [PASSED] drm_test_connector_hdmi_init_null_vendor
[22:14:37] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[22:14:37] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[22:14:37] [PASSED] drm_test_connector_hdmi_init_product_valid
[22:14:37] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[22:14:37] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[22:14:37] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[22:14:37] ========= drm_test_connector_hdmi_init_type_valid =========
[22:14:37] [PASSED] HDMI-A
[22:14:37] [PASSED] HDMI-B
[22:14:37] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[22:14:37] ======== drm_test_connector_hdmi_init_type_invalid ========
[22:14:37] [PASSED] Unknown
[22:14:37] [PASSED] VGA
[22:14:37] [PASSED] DVI-I
[22:14:37] [PASSED] DVI-D
[22:14:37] [PASSED] DVI-A
[22:14:37] [PASSED] Composite
[22:14:37] [PASSED] SVIDEO
[22:14:37] [PASSED] LVDS
[22:14:37] [PASSED] Component
[22:14:37] [PASSED] DIN
[22:14:37] [PASSED] DP
[22:14:37] [PASSED] TV
[22:14:37] [PASSED] eDP
[22:14:37] [PASSED] Virtual
[22:14:37] [PASSED] DSI
[22:14:37] [PASSED] DPI
[22:14:37] [PASSED] Writeback
[22:14:37] [PASSED] SPI
[22:14:37] [PASSED] USB
[22:14:37] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[22:14:37] ============ [PASSED] drmm_connector_hdmi_init =============
[22:14:37] ============= drmm_connector_init (3 subtests) =============
[22:14:37] [PASSED] drm_test_drmm_connector_init
[22:14:37] [PASSED] drm_test_drmm_connector_init_null_ddc
[22:14:37] ========= drm_test_drmm_connector_init_type_valid =========
[22:14:37] [PASSED] Unknown
[22:14:37] [PASSED] VGA
[22:14:37] [PASSED] DVI-I
[22:14:37] [PASSED] DVI-D
[22:14:37] [PASSED] DVI-A
[22:14:37] [PASSED] Composite
[22:14:37] [PASSED] SVIDEO
[22:14:37] [PASSED] LVDS
[22:14:37] [PASSED] Component
[22:14:37] [PASSED] DIN
[22:14:37] [PASSED] DP
[22:14:37] [PASSED] HDMI-A
[22:14:37] [PASSED] HDMI-B
[22:14:37] [PASSED] TV
[22:14:37] [PASSED] eDP
[22:14:37] [PASSED] Virtual
[22:14:37] [PASSED] DSI
[22:14:37] [PASSED] DPI
[22:14:37] [PASSED] Writeback
[22:14:37] [PASSED] SPI
[22:14:37] [PASSED] USB
[22:14:37] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[22:14:37] =============== [PASSED] drmm_connector_init ===============
[22:14:37] ========= drm_connector_dynamic_init (6 subtests) ==========
[22:14:37] [PASSED] drm_test_drm_connector_dynamic_init
[22:14:37] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[22:14:37] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[22:14:37] [PASSED] drm_test_drm_connector_dynamic_init_properties
[22:14:37] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[22:14:37] [PASSED] Unknown
[22:14:37] [PASSED] VGA
[22:14:37] [PASSED] DVI-I
[22:14:37] [PASSED] DVI-D
[22:14:37] [PASSED] DVI-A
[22:14:37] [PASSED] Composite
[22:14:37] [PASSED] SVIDEO
[22:14:37] [PASSED] LVDS
[22:14:37] [PASSED] Component
[22:14:37] [PASSED] DIN
[22:14:37] [PASSED] DP
[22:14:37] [PASSED] HDMI-A
[22:14:37] [PASSED] HDMI-B
[22:14:37] [PASSED] TV
[22:14:37] [PASSED] eDP
[22:14:37] [PASSED] Virtual
[22:14:37] [PASSED] DSI
[22:14:37] [PASSED] DPI
[22:14:37] [PASSED] Writeback
[22:14:37] [PASSED] SPI
[22:14:37] [PASSED] USB
[22:14:37] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[22:14:37] ======== drm_test_drm_connector_dynamic_init_name =========
[22:14:37] [PASSED] Unknown
[22:14:37] [PASSED] VGA
[22:14:37] [PASSED] DVI-I
[22:14:37] [PASSED] DVI-D
[22:14:37] [PASSED] DVI-A
[22:14:37] [PASSED] Composite
[22:14:37] [PASSED] SVIDEO
[22:14:37] [PASSED] LVDS
[22:14:37] [PASSED] Component
[22:14:37] [PASSED] DIN
[22:14:37] [PASSED] DP
[22:14:37] [PASSED] HDMI-A
[22:14:37] [PASSED] HDMI-B
[22:14:37] [PASSED] TV
[22:14:37] [PASSED] eDP
[22:14:37] [PASSED] Virtual
[22:14:37] [PASSED] DSI
[22:14:37] [PASSED] DPI
[22:14:37] [PASSED] Writeback
[22:14:37] [PASSED] SPI
[22:14:37] [PASSED] USB
[22:14:37] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[22:14:37] =========== [PASSED] drm_connector_dynamic_init ============
[22:14:37] ==== drm_connector_dynamic_register_early (4 subtests) =====
[22:14:37] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[22:14:37] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[22:14:37] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[22:14:37] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[22:14:37] ====== [PASSED] drm_connector_dynamic_register_early =======
[22:14:37] ======= drm_connector_dynamic_register (7 subtests) ========
[22:14:37] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[22:14:37] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[22:14:37] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[22:14:37] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[22:14:37] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[22:14:37] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[22:14:37] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[22:14:37] ========= [PASSED] drm_connector_dynamic_register ==========
[22:14:37] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[22:14:37] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[22:14:37] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[22:14:37] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[22:14:37] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[22:14:37] ========== drm_test_get_tv_mode_from_name_valid ===========
[22:14:37] [PASSED] NTSC
[22:14:37] [PASSED] NTSC-443
[22:14:37] [PASSED] NTSC-J
[22:14:37] [PASSED] PAL
[22:14:37] [PASSED] PAL-M
[22:14:37] [PASSED] PAL-N
[22:14:37] [PASSED] SECAM
[22:14:37] [PASSED] Mono
[22:14:37] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[22:14:37] [PASSED] drm_test_get_tv_mode_from_name_truncated
[22:14:37] ============ [PASSED] drm_get_tv_mode_from_name ============
[22:14:37] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[22:14:37] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[22:14:37] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[22:14:37] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[22:14:37] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[22:14:37] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[22:14:37] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[22:14:37] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[22:14:37] [PASSED] VIC 96
[22:14:37] [PASSED] VIC 97
[22:14:37] [PASSED] VIC 101
[22:14:37] [PASSED] VIC 102
[22:14:37] [PASSED] VIC 106
[22:14:37] [PASSED] VIC 107
[22:14:37] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[22:14:37] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[22:14:37] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[22:14:37] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[22:14:37] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[22:14:37] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[22:14:37] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[22:14:37] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[22:14:37] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[22:14:37] [PASSED] Automatic
[22:14:37] [PASSED] Full
[22:14:37] [PASSED] Limited 16:235
[22:14:37] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[22:14:37] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[22:14:37] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[22:14:37] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[22:14:37] === drm_test_drm_hdmi_connector_get_output_format_name ====
[22:14:37] [PASSED] RGB
[22:14:37] [PASSED] YUV 4:2:0
[22:14:37] [PASSED] YUV 4:2:2
[22:14:37] [PASSED] YUV 4:4:4
[22:14:37] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[22:14:37] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[22:14:37] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[22:14:37] ============= drm_damage_helper (21 subtests) ==============
[22:14:37] [PASSED] drm_test_damage_iter_no_damage
[22:14:37] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[22:14:37] [PASSED] drm_test_damage_iter_no_damage_src_moved
[22:14:37] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[22:14:37] [PASSED] drm_test_damage_iter_no_damage_not_visible
[22:14:37] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[22:14:37] [PASSED] drm_test_damage_iter_no_damage_no_fb
[22:14:37] [PASSED] drm_test_damage_iter_simple_damage
[22:14:37] [PASSED] drm_test_damage_iter_single_damage
[22:14:37] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[22:14:37] [PASSED] drm_test_damage_iter_single_damage_outside_src
[22:14:37] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[22:14:37] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[22:14:37] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[22:14:37] [PASSED] drm_test_damage_iter_single_damage_src_moved
[22:14:37] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[22:14:37] [PASSED] drm_test_damage_iter_damage
[22:14:37] [PASSED] drm_test_damage_iter_damage_one_intersect
[22:14:37] [PASSED] drm_test_damage_iter_damage_one_outside
[22:14:37] [PASSED] drm_test_damage_iter_damage_src_moved
[22:14:37] [PASSED] drm_test_damage_iter_damage_not_visible
[22:14:37] ================ [PASSED] drm_damage_helper ================
[22:14:37] ============== drm_dp_mst_helper (3 subtests) ==============
[22:14:37] ============== drm_test_dp_mst_calc_pbn_mode ==============
[22:14:37] [PASSED] Clock 154000 BPP 30 DSC disabled
[22:14:37] [PASSED] Clock 234000 BPP 30 DSC disabled
[22:14:37] [PASSED] Clock 297000 BPP 24 DSC disabled
[22:14:37] [PASSED] Clock 332880 BPP 24 DSC enabled
[22:14:37] [PASSED] Clock 324540 BPP 24 DSC enabled
[22:14:37] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[22:14:37] ============== drm_test_dp_mst_calc_pbn_div ===============
[22:14:37] [PASSED] Link rate 2000000 lane count 4
[22:14:37] [PASSED] Link rate 2000000 lane count 2
[22:14:37] [PASSED] Link rate 2000000 lane count 1
[22:14:37] [PASSED] Link rate 1350000 lane count 4
[22:14:37] [PASSED] Link rate 1350000 lane count 2
[22:14:37] [PASSED] Link rate 1350000 lane count 1
[22:14:37] [PASSED] Link rate 1000000 lane count 4
[22:14:37] [PASSED] Link rate 1000000 lane count 2
[22:14:37] [PASSED] Link rate 1000000 lane count 1
[22:14:37] [PASSED] Link rate 810000 lane count 4
[22:14:37] [PASSED] Link rate 810000 lane count 2
[22:14:37] [PASSED] Link rate 810000 lane count 1
[22:14:37] [PASSED] Link rate 540000 lane count 4
[22:14:37] [PASSED] Link rate 540000 lane count 2
[22:14:37] [PASSED] Link rate 540000 lane count 1
[22:14:37] [PASSED] Link rate 270000 lane count 4
[22:14:37] [PASSED] Link rate 270000 lane count 2
[22:14:37] [PASSED] Link rate 270000 lane count 1
[22:14:37] [PASSED] Link rate 162000 lane count 4
[22:14:37] [PASSED] Link rate 162000 lane count 2
[22:14:37] [PASSED] Link rate 162000 lane count 1
[22:14:37] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[22:14:37] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[22:14:37] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[22:14:37] [PASSED] DP_POWER_UP_PHY with port number
[22:14:37] [PASSED] DP_POWER_DOWN_PHY with port number
[22:14:37] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[22:14:37] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[22:14:37] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[22:14:37] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[22:14:37] [PASSED] DP_QUERY_PAYLOAD with port number
[22:14:37] [PASSED] DP_QUERY_PAYLOAD with VCPI
[22:14:37] [PASSED] DP_REMOTE_DPCD_READ with port number
[22:14:37] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[22:14:37] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[22:14:37] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[22:14:37] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[22:14:37] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[22:14:37] [PASSED] DP_REMOTE_I2C_READ with port number
[22:14:37] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[22:14:37] [PASSED] DP_REMOTE_I2C_READ with transactions array
[22:14:37] [PASSED] DP_REMOTE_I2C_WRITE with port number
[22:14:37] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[22:14:37] [PASSED] DP_REMOTE_I2C_WRITE with data array
[22:14:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[22:14:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[22:14:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[22:14:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[22:14:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[22:14:37] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[22:14:37] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[22:14:37] ================ [PASSED] drm_dp_mst_helper ================
[22:14:37] ================== drm_exec (7 subtests) ===================
[22:14:37] [PASSED] sanitycheck
[22:14:37] [PASSED] test_lock
[22:14:37] [PASSED] test_lock_unlock
[22:14:37] [PASSED] test_duplicates
[22:14:37] [PASSED] test_prepare
[22:14:37] [PASSED] test_prepare_array
[22:14:37] [PASSED] test_multiple_loops
[22:14:37] ==================== [PASSED] drm_exec =====================
[22:14:37] =========== drm_format_helper_test (17 subtests) ===========
[22:14:37] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[22:14:37] [PASSED] single_pixel_source_buffer
[22:14:37] [PASSED] single_pixel_clip_rectangle
[22:14:37] [PASSED] well_known_colors
[22:14:37] [PASSED] destination_pitch
[22:14:37] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[22:14:37] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[22:14:37] [PASSED] single_pixel_source_buffer
[22:14:37] [PASSED] single_pixel_clip_rectangle
[22:14:37] [PASSED] well_known_colors
[22:14:37] [PASSED] destination_pitch
[22:14:37] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[22:14:37] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[22:14:37] [PASSED] single_pixel_source_buffer
[22:14:37] [PASSED] single_pixel_clip_rectangle
[22:14:37] [PASSED] well_known_colors
[22:14:37] [PASSED] destination_pitch
[22:14:37] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[22:14:37] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[22:14:37] [PASSED] single_pixel_source_buffer
[22:14:37] [PASSED] single_pixel_clip_rectangle
[22:14:37] [PASSED] well_known_colors
[22:14:37] [PASSED] destination_pitch
[22:14:37] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[22:14:37] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[22:14:37] [PASSED] single_pixel_source_buffer
[22:14:37] [PASSED] single_pixel_clip_rectangle
[22:14:37] [PASSED] well_known_colors
[22:14:37] [PASSED] destination_pitch
[22:14:37] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[22:14:37] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[22:14:37] [PASSED] single_pixel_source_buffer
[22:14:37] [PASSED] single_pixel_clip_rectangle
[22:14:37] [PASSED] well_known_colors
[22:14:37] [PASSED] destination_pitch
[22:14:37] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[22:14:37] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[22:14:37] [PASSED] single_pixel_source_buffer
[22:14:37] [PASSED] single_pixel_clip_rectangle
[22:14:37] [PASSED] well_known_colors
[22:14:37] [PASSED] destination_pitch
[22:14:37] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[22:14:37] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[22:14:37] [PASSED] single_pixel_source_buffer
[22:14:37] [PASSED] single_pixel_clip_rectangle
[22:14:37] [PASSED] well_known_colors
[22:14:37] [PASSED] destination_pitch
[22:14:37] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[22:14:37] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[22:14:37] [PASSED] single_pixel_source_buffer
[22:14:37] [PASSED] single_pixel_clip_rectangle
[22:14:37] [PASSED] well_known_colors
[22:14:37] [PASSED] destination_pitch
[22:14:37] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[22:14:37] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[22:14:37] [PASSED] single_pixel_source_buffer
[22:14:37] [PASSED] single_pixel_clip_rectangle
[22:14:37] [PASSED] well_known_colors
[22:14:37] [PASSED] destination_pitch
[22:14:37] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[22:14:37] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[22:14:37] [PASSED] single_pixel_source_buffer
[22:14:37] [PASSED] single_pixel_clip_rectangle
[22:14:37] [PASSED] well_known_colors
[22:14:37] [PASSED] destination_pitch
[22:14:37] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[22:14:37] ============== drm_test_fb_xrgb8888_to_mono ===============
[22:14:37] [PASSED] single_pixel_source_buffer
[22:14:37] [PASSED] single_pixel_clip_rectangle
[22:14:37] [PASSED] well_known_colors
[22:14:37] [PASSED] destination_pitch
[22:14:37] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[22:14:37] ==================== drm_test_fb_swab =====================
[22:14:37] [PASSED] single_pixel_source_buffer
[22:14:37] [PASSED] single_pixel_clip_rectangle
[22:14:37] [PASSED] well_known_colors
[22:14:37] [PASSED] destination_pitch
[22:14:37] ================ [PASSED] drm_test_fb_swab =================
[22:14:37] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[22:14:37] [PASSED] single_pixel_source_buffer
[22:14:37] [PASSED] single_pixel_clip_rectangle
[22:14:37] [PASSED] well_known_colors
[22:14:37] [PASSED] destination_pitch
[22:14:37] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[22:14:37] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[22:14:37] [PASSED] single_pixel_source_buffer
[22:14:37] [PASSED] single_pixel_clip_rectangle
[22:14:37] [PASSED] well_known_colors
[22:14:37] [PASSED] destination_pitch
[22:14:37] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[22:14:37] ================= drm_test_fb_clip_offset =================
[22:14:37] [PASSED] pass through
[22:14:37] [PASSED] horizontal offset
[22:14:37] [PASSED] vertical offset
[22:14:37] [PASSED] horizontal and vertical offset
[22:14:37] [PASSED] horizontal offset (custom pitch)
[22:14:37] [PASSED] vertical offset (custom pitch)
[22:14:37] [PASSED] horizontal and vertical offset (custom pitch)
[22:14:37] ============= [PASSED] drm_test_fb_clip_offset =============
[22:14:37] =================== drm_test_fb_memcpy ====================
[22:14:37] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[22:14:37] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[22:14:37] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[22:14:37] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[22:14:37] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[22:14:37] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[22:14:37] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[22:14:37] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[22:14:37] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[22:14:37] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[22:14:37] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[22:14:37] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[22:14:37] =============== [PASSED] drm_test_fb_memcpy ================
[22:14:37] ============= [PASSED] drm_format_helper_test ==============
[22:14:37] ================= drm_format (18 subtests) =================
[22:14:37] [PASSED] drm_test_format_block_width_invalid
[22:14:37] [PASSED] drm_test_format_block_width_one_plane
[22:14:37] [PASSED] drm_test_format_block_width_two_plane
[22:14:37] [PASSED] drm_test_format_block_width_three_plane
[22:14:37] [PASSED] drm_test_format_block_width_tiled
[22:14:37] [PASSED] drm_test_format_block_height_invalid
[22:14:37] [PASSED] drm_test_format_block_height_one_plane
[22:14:37] [PASSED] drm_test_format_block_height_two_plane
[22:14:37] [PASSED] drm_test_format_block_height_three_plane
[22:14:37] [PASSED] drm_test_format_block_height_tiled
[22:14:37] [PASSED] drm_test_format_min_pitch_invalid
[22:14:37] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[22:14:37] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[22:14:37] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[22:14:37] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[22:14:37] [PASSED] drm_test_format_min_pitch_two_plane
[22:14:37] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[22:14:37] [PASSED] drm_test_format_min_pitch_tiled
[22:14:37] =================== [PASSED] drm_format ====================
[22:14:37] ============== drm_framebuffer (10 subtests) ===============
[22:14:37] ========== drm_test_framebuffer_check_src_coords ==========
[22:14:37] [PASSED] Success: source fits into fb
[22:14:37] [PASSED] Fail: overflowing fb with x-axis coordinate
[22:14:37] [PASSED] Fail: overflowing fb with y-axis coordinate
[22:14:37] [PASSED] Fail: overflowing fb with source width
[22:14:37] [PASSED] Fail: overflowing fb with source height
[22:14:37] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[22:14:37] [PASSED] drm_test_framebuffer_cleanup
[22:14:37] =============== drm_test_framebuffer_create ===============
[22:14:37] [PASSED] ABGR8888 normal sizes
[22:14:37] [PASSED] ABGR8888 max sizes
[22:14:37] [PASSED] ABGR8888 pitch greater than min required
[22:14:37] [PASSED] ABGR8888 pitch less than min required
[22:14:37] [PASSED] ABGR8888 Invalid width
[22:14:37] [PASSED] ABGR8888 Invalid buffer handle
[22:14:37] [PASSED] No pixel format
[22:14:37] [PASSED] ABGR8888 Width 0
[22:14:37] [PASSED] ABGR8888 Height 0
[22:14:37] [PASSED] ABGR8888 Out of bound height * pitch combination
[22:14:37] [PASSED] ABGR8888 Large buffer offset
[22:14:37] [PASSED] ABGR8888 Buffer offset for inexistent plane
[22:14:37] [PASSED] ABGR8888 Invalid flag
[22:14:37] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[22:14:37] [PASSED] ABGR8888 Valid buffer modifier
[22:14:37] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[22:14:37] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[22:14:37] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[22:14:37] [PASSED] NV12 Normal sizes
[22:14:37] [PASSED] NV12 Max sizes
[22:14:37] [PASSED] NV12 Invalid pitch
[22:14:37] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[22:14:37] [PASSED] NV12 different modifier per-plane
[22:14:37] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[22:14:37] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[22:14:37] [PASSED] NV12 Modifier for inexistent plane
[22:14:37] [PASSED] NV12 Handle for inexistent plane
[22:14:37] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[22:14:37] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[22:14:37] [PASSED] YVU420 Normal sizes
[22:14:37] [PASSED] YVU420 Max sizes
[22:14:37] [PASSED] YVU420 Invalid pitch
[22:14:37] [PASSED] YVU420 Different pitches
[22:14:37] [PASSED] YVU420 Different buffer offsets/pitches
[22:14:37] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[22:14:37] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[22:14:37] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[22:14:37] [PASSED] YVU420 Valid modifier
[22:14:37] [PASSED] YVU420 Different modifiers per plane
[22:14:37] [PASSED] YVU420 Modifier for inexistent plane
[22:14:37] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[22:14:37] [PASSED] X0L2 Normal sizes
[22:14:37] [PASSED] X0L2 Max sizes
[22:14:37] [PASSED] X0L2 Invalid pitch
[22:14:37] [PASSED] X0L2 Pitch greater than minimum required
[22:14:37] [PASSED] X0L2 Handle for inexistent plane
[22:14:37] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[22:14:37] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[22:14:37] [PASSED] X0L2 Valid modifier
[22:14:37] [PASSED] X0L2 Modifier for inexistent plane
[22:14:37] =========== [PASSED] drm_test_framebuffer_create ===========
[22:14:37] [PASSED] drm_test_framebuffer_free
[22:14:37] [PASSED] drm_test_framebuffer_init
[22:14:37] [PASSED] drm_test_framebuffer_init_bad_format
[22:14:37] [PASSED] drm_test_framebuffer_init_dev_mismatch
[22:14:37] [PASSED] drm_test_framebuffer_lookup
[22:14:37] [PASSED] drm_test_framebuffer_lookup_inexistent
[22:14:37] [PASSED] drm_test_framebuffer_modifiers_not_supported
[22:14:37] ================= [PASSED] drm_framebuffer =================
[22:14:37] ================ drm_gem_shmem (8 subtests) ================
[22:14:37] [PASSED] drm_gem_shmem_test_obj_create
[22:14:37] [PASSED] drm_gem_shmem_test_obj_create_private
[22:14:37] [PASSED] drm_gem_shmem_test_pin_pages
[22:14:37] [PASSED] drm_gem_shmem_test_vmap
[22:14:37] [PASSED] drm_gem_shmem_test_get_sg_table
[22:14:37] [PASSED] drm_gem_shmem_test_get_pages_sgt
[22:14:37] [PASSED] drm_gem_shmem_test_madvise
[22:14:37] [PASSED] drm_gem_shmem_test_purge
[22:14:37] ================== [PASSED] drm_gem_shmem ==================
[22:14:37] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[22:14:37] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[22:14:37] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[22:14:37] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[22:14:37] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[22:14:37] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[22:14:37] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[22:14:37] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[22:14:37] [PASSED] Automatic
[22:14:37] [PASSED] Full
[22:14:37] [PASSED] Limited 16:235
[22:14:37] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[22:14:37] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[22:14:37] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[22:14:37] [PASSED] drm_test_check_disable_connector
[22:14:37] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[22:14:37] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[22:14:37] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[22:14:37] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[22:14:37] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[22:14:37] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[22:14:37] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[22:14:37] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[22:14:37] [PASSED] drm_test_check_output_bpc_dvi
[22:14:37] [PASSED] drm_test_check_output_bpc_format_vic_1
[22:14:37] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[22:14:37] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[22:14:37] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[22:14:37] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[22:14:37] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[22:14:37] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[22:14:37] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[22:14:37] ============ drm_test_check_hdmi_color_format =============
[22:14:37] [PASSED] AUTO -> RGB
[22:14:37] [PASSED] YCBCR422 -> YUV422
[22:14:37] [PASSED] YCBCR420 -> YUV420
[22:14:37] [PASSED] YCBCR444 -> YUV444
[22:14:37] [PASSED] RGB -> RGB
[22:14:37] ======== [PASSED] drm_test_check_hdmi_color_format =========
[22:14:37] ======== drm_test_check_hdmi_color_format_420_only ========
[22:14:37] [PASSED] RGB should fail
[22:14:37] [PASSED] YUV444 should fail
[22:14:37] [PASSED] YUV422 should fail
[22:14:37] [PASSED] YUV420 should work
[22:14:37] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[22:14:37] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[22:14:37] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[22:14:37] [PASSED] drm_test_check_broadcast_rgb_value
[22:14:37] [PASSED] drm_test_check_bpc_8_value
[22:14:37] [PASSED] drm_test_check_bpc_10_value
[22:14:37] [PASSED] drm_test_check_bpc_12_value
[22:14:37] [PASSED] drm_test_check_format_value
[22:14:37] [PASSED] drm_test_check_tmds_char_value
[22:14:37] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[22:14:37] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[22:14:37] [PASSED] drm_test_check_mode_valid
[22:14:37] [PASSED] drm_test_check_mode_valid_reject
[22:14:37] [PASSED] drm_test_check_mode_valid_reject_rate
[22:14:37] [PASSED] drm_test_check_mode_valid_reject_max_clock
[22:14:37] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[22:14:37] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[22:14:37] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[22:14:37] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[22:14:37] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[22:14:37] [PASSED] drm_test_check_infoframes
[22:14:37] [PASSED] drm_test_check_reject_avi_infoframe
[22:14:37] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[22:14:37] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[22:14:37] [PASSED] drm_test_check_reject_audio_infoframe
[22:14:37] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[22:14:37] ================= drm_managed (2 subtests) =================
[22:14:37] [PASSED] drm_test_managed_release_action
[22:14:37] [PASSED] drm_test_managed_run_action
[22:14:37] =================== [PASSED] drm_managed ===================
[22:14:37] =================== drm_mm (6 subtests) ====================
[22:14:37] [PASSED] drm_test_mm_init
[22:14:37] [PASSED] drm_test_mm_debug
[22:14:37] [PASSED] drm_test_mm_align32
[22:14:37] [PASSED] drm_test_mm_align64
[22:14:37] [PASSED] drm_test_mm_lowest
[22:14:37] [PASSED] drm_test_mm_highest
[22:14:37] ===================== [PASSED] drm_mm ======================
[22:14:37] ============= drm_modes_analog_tv (5 subtests) =============
[22:14:37] [PASSED] drm_test_modes_analog_tv_mono_576i
[22:14:37] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[22:14:37] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[22:14:37] [PASSED] drm_test_modes_analog_tv_pal_576i
[22:14:37] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[22:14:37] =============== [PASSED] drm_modes_analog_tv ===============
[22:14:37] ============== drm_panic_helper (3 subtests) ===============
[22:14:37] ============= drm_test_panic_screen_user_map ==============
[22:14:37] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[22:14:37] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[22:14:37] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[22:14:37] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[22:14:37] ========= [PASSED] drm_test_panic_screen_user_map ==========
[22:14:37] ============= drm_test_panic_screen_user_page =============
[22:14:37] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[22:14:37] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[22:14:37] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[22:14:37] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[22:14:37] ========= [PASSED] drm_test_panic_screen_user_page =========
[22:14:37] ========== drm_test_panic_screen_user_set_pixel ===========
[22:14:37] [PASSED] Panic screen user, mode: 1024 x 768 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen user, mode: 494 x 494 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen user, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen user, mode: 1024 x 768 RG16 little-endian (0x36314752)
[22:14:37] [PASSED] Panic screen user, mode: 1024 x 768 RG24 little-endian (0x34324752)
[22:14:37] [PASSED] Panic screen kmsg, mode: 1024 x 768 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen kmsg, mode: 494 x 494 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen kmsg, mode: 1920 x 1080 XR24 little-endian (0x34325258)
[22:14:37] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG16 little-endian (0x36314752)
[22:14:37] [PASSED] Panic screen kmsg, mode: 1024 x 768 RG24 little-endian (0x34324752)
[22:14:37] ====== [PASSED] drm_test_panic_screen_user_set_pixel =======
[22:14:37] ================ [PASSED] drm_panic_helper =================
[22:14:37] ============== drm_plane_helper (2 subtests) ===============
[22:14:37] =============== drm_test_check_plane_state ================
[22:14:37] [PASSED] clipping_simple
[22:14:37] [PASSED] clipping_rotate_reflect
[22:14:37] [PASSED] positioning_simple
[22:14:37] [PASSED] upscaling
[22:14:37] [PASSED] downscaling
[22:14:37] [PASSED] rounding1
[22:14:37] [PASSED] rounding2
[22:14:37] [PASSED] rounding3
[22:14:37] [PASSED] rounding4
[22:14:37] =========== [PASSED] drm_test_check_plane_state ============
[22:14:37] =========== drm_test_check_invalid_plane_state ============
[22:14:37] [PASSED] positioning_invalid
[22:14:37] [PASSED] upscaling_invalid
[22:14:37] [PASSED] downscaling_invalid
[22:14:37] ======= [PASSED] drm_test_check_invalid_plane_state ========
[22:14:37] ================ [PASSED] drm_plane_helper =================
[22:14:37] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[22:14:37] ====== drm_test_connector_helper_tv_get_modes_check =======
[22:14:37] [PASSED] None
[22:14:37] [PASSED] PAL
[22:14:37] [PASSED] NTSC
[22:14:37] [PASSED] Both, NTSC Default
[22:14:37] [PASSED] Both, PAL Default
[22:14:37] [PASSED] Both, NTSC Default, with PAL on command-line
[22:14:37] [PASSED] Both, PAL Default, with NTSC on command-line
[22:14:37] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[22:14:37] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[22:14:37] ================== drm_rect (9 subtests) ===================
[22:14:37] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[22:14:37] [PASSED] drm_test_rect_clip_scaled_not_clipped
[22:14:37] [PASSED] drm_test_rect_clip_scaled_clipped
[22:14:37] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[22:14:37] ================= drm_test_rect_intersect =================
[22:14:37] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[22:14:37] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[22:14:37] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[22:14:37] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[22:14:37] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[22:14:37] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[22:14:37] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[22:14:37] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[22:14:37] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[22:14:37] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[22:14:37] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[22:14:37] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[22:14:37] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[22:14:37] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[22:14:37] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[22:14:37] ============= [PASSED] drm_test_rect_intersect =============
[22:14:37] ================ drm_test_rect_calc_hscale ================
[22:14:37] [PASSED] normal use
[22:14:37] [PASSED] out of max range
[22:14:37] [PASSED] out of min range
[22:14:37] [PASSED] zero dst
[22:14:37] [PASSED] negative src
[22:14:37] [PASSED] negative dst
[22:14:37] ============ [PASSED] drm_test_rect_calc_hscale ============
[22:14:37] ================ drm_test_rect_calc_vscale ================
[22:14:37] [PASSED] normal use
[22:14:37] [PASSED] out of max range
[22:14:37] [PASSED] out of min range
[22:14:37] [PASSED] zero dst
[22:14:37] [PASSED] negative src
[22:14:37] [PASSED] negative dst
[22:14:37] ============ [PASSED] drm_test_rect_calc_vscale ============
[22:14:37] ================== drm_test_rect_rotate ===================
[22:14:37] [PASSED] reflect-x
[22:14:37] [PASSED] reflect-y
[22:14:37] [PASSED] rotate-0
[22:14:37] [PASSED] rotate-90
[22:14:37] [PASSED] rotate-180
[22:14:37] [PASSED] rotate-270
[22:14:37] ============== [PASSED] drm_test_rect_rotate ===============
[22:14:37] ================ drm_test_rect_rotate_inv =================
[22:14:37] [PASSED] reflect-x
[22:14:37] [PASSED] reflect-y
[22:14:37] [PASSED] rotate-0
[22:14:37] [PASSED] rotate-90
[22:14:37] [PASSED] rotate-180
[22:14:37] [PASSED] rotate-270
[22:14:37] ============ [PASSED] drm_test_rect_rotate_inv =============
[22:14:37] ==================== [PASSED] drm_rect =====================
[22:14:37] ============ drm_sysfb_modeset_test (1 subtest) ============
[22:14:37] ============ drm_test_sysfb_build_fourcc_list =============
[22:14:37] [PASSED] no native formats
[22:14:37] [PASSED] XRGB8888 as native format
[22:14:37] [PASSED] remove duplicates
[22:14:37] [PASSED] convert alpha formats
[22:14:37] [PASSED] random formats
[22:14:37] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[22:14:37] ============= [PASSED] drm_sysfb_modeset_test ==============
[22:14:37] ================== drm_fixp (2 subtests) ===================
[22:14:37] [PASSED] drm_test_int2fixp
[22:14:37] [PASSED] drm_test_sm2fixp
[22:14:37] ==================== [PASSED] drm_fixp =====================
[22:14:37] ============================================================
[22:14:37] Testing complete. Ran 667 tests: passed: 667
[22:14:37] Elapsed time: 27.652s total, 1.845s configuring, 25.392s building, 0.406s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[22:14:37] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[22:14:39] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[22:14:49] Starting KUnit Kernel (1/1)...
[22:14:49] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[22:14:50] ================= ttm_device (5 subtests) ==================
[22:14:50] [PASSED] ttm_device_init_basic
[22:14:50] [PASSED] ttm_device_init_multiple
[22:14:50] [PASSED] ttm_device_fini_basic
[22:14:50] [PASSED] ttm_device_init_no_vma_man
[22:14:50] ================== ttm_device_init_pools ==================
[22:14:50] [PASSED] No DMA allocations, no DMA32 required
[22:14:50] [PASSED] DMA allocations, DMA32 required
[22:14:50] [PASSED] No DMA allocations, DMA32 required
[22:14:50] [PASSED] DMA allocations, no DMA32 required
[22:14:50] ============== [PASSED] ttm_device_init_pools ==============
[22:14:50] =================== [PASSED] ttm_device ====================
[22:14:50] ================== ttm_pool (8 subtests) ===================
[22:14:50] ================== ttm_pool_alloc_basic ===================
[22:14:50] [PASSED] One page
[22:14:50] [PASSED] More than one page
[22:14:50] [PASSED] Above the allocation limit
[22:14:50] [PASSED] One page, with coherent DMA mappings enabled
[22:14:50] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[22:14:50] ============== [PASSED] ttm_pool_alloc_basic ===============
[22:14:50] ============== ttm_pool_alloc_basic_dma_addr ==============
[22:14:50] [PASSED] One page
[22:14:50] [PASSED] More than one page
[22:14:50] [PASSED] Above the allocation limit
[22:14:50] [PASSED] One page, with coherent DMA mappings enabled
[22:14:50] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[22:14:50] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[22:14:50] [PASSED] ttm_pool_alloc_order_caching_match
[22:14:50] [PASSED] ttm_pool_alloc_caching_mismatch
[22:14:50] [PASSED] ttm_pool_alloc_order_mismatch
[22:14:50] [PASSED] ttm_pool_free_dma_alloc
[22:14:50] [PASSED] ttm_pool_free_no_dma_alloc
[22:14:50] [PASSED] ttm_pool_fini_basic
[22:14:50] ==================== [PASSED] ttm_pool =====================
[22:14:50] ================ ttm_resource (8 subtests) =================
[22:14:50] ================= ttm_resource_init_basic =================
[22:14:50] [PASSED] Init resource in TTM_PL_SYSTEM
[22:14:50] [PASSED] Init resource in TTM_PL_VRAM
[22:14:50] [PASSED] Init resource in a private placement
[22:14:50] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[22:14:50] ============= [PASSED] ttm_resource_init_basic =============
[22:14:50] [PASSED] ttm_resource_init_pinned
[22:14:50] [PASSED] ttm_resource_fini_basic
[22:14:50] [PASSED] ttm_resource_manager_init_basic
[22:14:50] [PASSED] ttm_resource_manager_usage_basic
[22:14:50] [PASSED] ttm_resource_manager_set_used_basic
[22:14:50] [PASSED] ttm_sys_man_alloc_basic
[22:14:50] [PASSED] ttm_sys_man_free_basic
[22:14:50] ================== [PASSED] ttm_resource ===================
[22:14:50] =================== ttm_tt (15 subtests) ===================
[22:14:50] ==================== ttm_tt_init_basic ====================
[22:14:50] [PASSED] Page-aligned size
[22:14:50] [PASSED] Extra pages requested
[22:14:50] ================ [PASSED] ttm_tt_init_basic ================
[22:14:50] [PASSED] ttm_tt_init_misaligned
[22:14:50] [PASSED] ttm_tt_fini_basic
[22:14:50] [PASSED] ttm_tt_fini_sg
[22:14:50] [PASSED] ttm_tt_fini_shmem
[22:14:50] [PASSED] ttm_tt_create_basic
[22:14:50] [PASSED] ttm_tt_create_invalid_bo_type
[22:14:50] [PASSED] ttm_tt_create_ttm_exists
[22:14:50] [PASSED] ttm_tt_create_failed
[22:14:50] [PASSED] ttm_tt_destroy_basic
[22:14:50] [PASSED] ttm_tt_populate_null_ttm
[22:14:50] [PASSED] ttm_tt_populate_populated_ttm
[22:14:50] [PASSED] ttm_tt_unpopulate_basic
[22:14:50] [PASSED] ttm_tt_unpopulate_empty_ttm
[22:14:50] [PASSED] ttm_tt_swapin_basic
[22:14:50] ===================== [PASSED] ttm_tt ======================
[22:14:50] =================== ttm_bo (14 subtests) ===================
[22:14:50] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[22:14:50] [PASSED] Cannot be interrupted and sleeps
[22:14:50] [PASSED] Cannot be interrupted, locks straight away
[22:14:50] [PASSED] Can be interrupted, sleeps
[22:14:50] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[22:14:50] [PASSED] ttm_bo_reserve_locked_no_sleep
[22:14:50] [PASSED] ttm_bo_reserve_no_wait_ticket
[22:14:50] [PASSED] ttm_bo_reserve_double_resv
[22:14:50] [PASSED] ttm_bo_reserve_interrupted
[22:14:50] [PASSED] ttm_bo_reserve_deadlock
[22:14:50] [PASSED] ttm_bo_unreserve_basic
[22:14:50] [PASSED] ttm_bo_unreserve_pinned
[22:14:50] [PASSED] ttm_bo_unreserve_bulk
[22:14:50] [PASSED] ttm_bo_fini_basic
[22:14:50] [PASSED] ttm_bo_fini_shared_resv
[22:14:50] [PASSED] ttm_bo_pin_basic
[22:14:50] [PASSED] ttm_bo_pin_unpin_resource
[22:14:50] [PASSED] ttm_bo_multiple_pin_one_unpin
[22:14:50] ===================== [PASSED] ttm_bo ======================
[22:14:50] ============== ttm_bo_validate (22 subtests) ===============
[22:14:50] ============== ttm_bo_init_reserved_sys_man ===============
[22:14:50] [PASSED] Buffer object for userspace
[22:14:50] [PASSED] Kernel buffer object
[22:14:50] [PASSED] Shared buffer object
[22:14:50] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[22:14:50] ============== ttm_bo_init_reserved_mock_man ==============
[22:14:50] [PASSED] Buffer object for userspace
[22:14:50] [PASSED] Kernel buffer object
[22:14:50] [PASSED] Shared buffer object
[22:14:50] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[22:14:50] [PASSED] ttm_bo_init_reserved_resv
[22:14:50] ================== ttm_bo_validate_basic ==================
[22:14:50] [PASSED] Buffer object for userspace
[22:14:50] [PASSED] Kernel buffer object
[22:14:50] [PASSED] Shared buffer object
[22:14:50] ============== [PASSED] ttm_bo_validate_basic ==============
[22:14:50] [PASSED] ttm_bo_validate_invalid_placement
[22:14:50] ============= ttm_bo_validate_same_placement ==============
[22:14:50] [PASSED] System manager
[22:14:50] [PASSED] VRAM manager
[22:14:50] ========= [PASSED] ttm_bo_validate_same_placement ==========
[22:14:50] [PASSED] ttm_bo_validate_failed_alloc
[22:14:50] [PASSED] ttm_bo_validate_pinned
[22:14:50] [PASSED] ttm_bo_validate_busy_placement
[22:14:50] ================ ttm_bo_validate_multihop =================
[22:14:50] [PASSED] Buffer object for userspace
[22:14:50] [PASSED] Kernel buffer object
[22:14:50] [PASSED] Shared buffer object
[22:14:50] ============ [PASSED] ttm_bo_validate_multihop =============
[22:14:50] ========== ttm_bo_validate_no_placement_signaled ==========
[22:14:50] [PASSED] Buffer object in system domain, no page vector
[22:14:50] [PASSED] Buffer object in system domain with an existing page vector
[22:14:50] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[22:14:50] ======== ttm_bo_validate_no_placement_not_signaled ========
[22:14:50] [PASSED] Buffer object for userspace
[22:14:50] [PASSED] Kernel buffer object
[22:14:50] [PASSED] Shared buffer object
[22:14:50] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[22:14:50] [PASSED] ttm_bo_validate_move_fence_signaled
[22:14:50] ========= ttm_bo_validate_move_fence_not_signaled =========
[22:14:50] [PASSED] Waits for GPU
[22:14:50] [PASSED] Tries to lock straight away
[22:14:50] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[22:14:50] [PASSED] ttm_bo_validate_swapout
[22:14:50] [PASSED] ttm_bo_validate_happy_evict
[22:14:50] [PASSED] ttm_bo_validate_all_pinned_evict
[22:14:50] [PASSED] ttm_bo_validate_allowed_only_evict
[22:14:50] [PASSED] ttm_bo_validate_deleted_evict
[22:14:50] [PASSED] ttm_bo_validate_busy_domain_evict
[22:14:50] [PASSED] ttm_bo_validate_evict_gutting
[22:14:50] [PASSED] ttm_bo_validate_recrusive_evict
[22:14:50] ================= [PASSED] ttm_bo_validate =================
[22:14:50] ============================================================
[22:14:50] Testing complete. Ran 102 tests: passed: 102
[22:14:50] Elapsed time: 12.354s total, 1.875s configuring, 10.214s building, 0.227s running
+ for kcfg in "${kunitconfigs[@]}"
+ [[ ! -f /kernel/drivers/dma-buf/.kunitconfig ]]
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[22:14:50] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[22:14:52] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[22:15:01] Starting KUnit Kernel (1/1)...
[22:15:01] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[22:15:01] =============== dma-buf-fence (12 subtests) ================
[22:15:01] [PASSED] test_sanitycheck
[22:15:01] [PASSED] test_signaling
[22:15:01] [PASSED] test_add_callback
[22:15:01] [PASSED] test_late_add_callback
[22:15:01] [PASSED] test_rm_callback
[22:15:01] [PASSED] test_late_rm_callback
[22:15:01] [PASSED] test_status
[22:15:01] [PASSED] test_error
[22:15:01] [PASSED] test_wait
[22:15:01] [PASSED] test_wait_timeout
[22:15:01] [PASSED] test_stub
[22:15:01] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[22:15:01] ================== [PASSED] dma-buf-fence ==================
[22:15:01] ============ dma-buf-fence-chain (11 subtests) =============
[22:15:01] [PASSED] test_sanitycheck
[22:15:01] [PASSED] test_find_seqno
[22:15:01] [PASSED] test_find_signaled
[22:15:01] [PASSED] test_find_out_of_order
[22:15:06] [PASSED] test_find_gap
[22:15:06] [PASSED] test_find_race
[22:15:06] [PASSED] test_signal_forward
[22:15:06] [PASSED] test_signal_backward
[22:15:06] [PASSED] test_wait_forward
[22:15:06] [PASSED] test_wait_backward
[22:15:06] [PASSED] test_wait_random
[22:15:06] =============== [PASSED] dma-buf-fence-chain ===============
[22:15:06] ============ dma-buf-fence-unwrap (10 subtests) ============
[22:15:06] [PASSED] test_sanitycheck
[22:15:06] [PASSED] test_unwrap_array
[22:15:06] [PASSED] test_unwrap_chain
[22:15:06] [PASSED] test_unwrap_chain_array
[22:15:06] [PASSED] test_unwrap_merge
[22:15:06] [PASSED] test_unwrap_merge_duplicate
[22:15:06] [PASSED] test_unwrap_merge_seqno
[22:15:06] [PASSED] test_unwrap_merge_order
[22:15:06] [PASSED] test_unwrap_merge_complex
[22:15:06] [PASSED] test_unwrap_merge_complex_seqno
[22:15:06] ============== [PASSED] dma-buf-fence-unwrap ===============
[22:15:06] ================ dma-buf-resv (5 subtests) =================
[22:15:06] [PASSED] test_sanitycheck
[22:15:06] ===================== test_signaling ======================
[22:15:06] [PASSED] kernel
[22:15:06] [PASSED] write
[22:15:06] [PASSED] read
[22:15:06] [PASSED] bookkeep
[22:15:06] ================= [PASSED] test_signaling ==================
[22:15:06] ====================== test_for_each ======================
[22:15:06] [PASSED] kernel
[22:15:06] [PASSED] write
[22:15:06] [PASSED] read
[22:15:06] [PASSED] bookkeep
[22:15:06] ================== [PASSED] test_for_each ==================
[22:15:06] ================= test_for_each_unlocked ==================
[22:15:06] [PASSED] kernel
[22:15:06] [PASSED] write
[22:15:06] [PASSED] read
[22:15:06] [PASSED] bookkeep
[22:15:06] ============= [PASSED] test_for_each_unlocked ==============
[22:15:06] ===================== test_get_fences =====================
[22:15:06] [PASSED] kernel
[22:15:06] [PASSED] write
[22:15:06] [PASSED] read
[22:15:06] [PASSED] bookkeep
[22:15:06] ================= [PASSED] test_get_fences =================
[22:15:06] ================== [PASSED] dma-buf-resv ===================
[22:15:06] ============================================================
[22:15:06] Testing complete. Ran 50 tests: passed: 49, skipped: 1
[22:15:06] Elapsed time: 16.078s total, 1.879s configuring, 8.876s building, 5.285s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 22+ messages in thread
* ✓ Xe.CI.BAT: success for Add new debug infrastructure for configfs (rev10)
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
` (16 preceding siblings ...)
2026-10-05 22:15 ` ✓ CI.KUnit: success " Patchwork
@ 2026-10-05 23:17 ` Patchwork
2026-10-06 6:22 ` ✗ Xe.CI.FULL: failure " Patchwork
18 siblings, 0 replies; 22+ messages in thread
From: Patchwork @ 2026-10-05 23:17 UTC (permalink / raw)
To: Stuart Summers; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 877 bytes --]
== Series Details ==
Series: Add new debug infrastructure for configfs (rev10)
URL : https://patchwork.freedesktop.org/series/165879/
State : success
== Summary ==
CI Bug Log - changes from xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f_BAT -> xe-pw-165879v10_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (15 -> 15)
------------------------------
No changes in participating hosts
Changes
-------
No changes found
Build changes
-------------
* Linux: xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f -> xe-pw-165879v10
IGT_9130: 9130
xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f: 5d226b433e3f4d7b1fee2cec0030813806f5510f
xe-pw-165879v10: 165879v10
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/index.html
[-- Attachment #2: Type: text/html, Size: 1426 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* ✗ Xe.CI.FULL: failure for Add new debug infrastructure for configfs (rev10)
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
` (17 preceding siblings ...)
2026-10-05 23:17 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-10-06 6:22 ` Patchwork
2026-10-07 19:13 ` Summers, Stuart
18 siblings, 1 reply; 22+ messages in thread
From: Patchwork @ 2026-10-06 6:22 UTC (permalink / raw)
To: Stuart Summers; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 71044 bytes --]
== Series Details ==
Series: Add new debug infrastructure for configfs (rev10)
URL : https://patchwork.freedesktop.org/series/165879/
State : failure
== Summary ==
CI Bug Log - changes from xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f_FULL -> xe-pw-165879v10_FULL
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-165879v10_FULL absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-165879v10_FULL, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (3 -> 3)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-165879v10_FULL:
### IGT changes ###
#### Possible regressions ####
* igt@kms_dp_link_training@uhbr-sst-direct-train:
- shard-ptl: NOTRUN -> [SKIP][1] +2 other tests skip
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_dp_link_training@uhbr-sst-direct-train.html
* igt@kms_dp_link_training@uhbr-sst-tbtalt-train:
- shard-bmg: NOTRUN -> [SKIP][2] +4 other tests skip
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@kms_dp_link_training@uhbr-sst-tbtalt-train.html
* igt@xe_configfs@ctx-restore-post-bb:
- shard-ptl: [PASS][3] -> [FAIL][4] +3 other tests fail
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-ptl-3/igt@xe_configfs@ctx-restore-post-bb.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-8/igt@xe_configfs@ctx-restore-post-bb.html
- shard-lnl: [PASS][5] -> [FAIL][6] +2 other tests fail
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-lnl-1/igt@xe_configfs@ctx-restore-post-bb.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-7/igt@xe_configfs@ctx-restore-post-bb.html
* igt@xe_configfs@gt-types-allowed:
- shard-bmg: [PASS][7] -> [FAIL][8] +3 other tests fail
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-bmg-3/igt@xe_configfs@gt-types-allowed.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-3/igt@xe_configfs@gt-types-allowed.html
- shard-lnl: NOTRUN -> [FAIL][9]
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@xe_configfs@gt-types-allowed.html
Known issues
------------
Here are the changes found in xe-pw-165879v10_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_3d@basic:
- shard-lnl: NOTRUN -> [SKIP][10] ([Intel XE#6011])
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@kms_3d@basic.html
* igt@kms_atomic_transition@plane-all-modeset-transition:
- shard-ptl: NOTRUN -> [SKIP][11] ([Intel XE#5947])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-7/igt@kms_atomic_transition@plane-all-modeset-transition.html
* igt@kms_big_fb@4-tiled-64bpp-rotate-90:
- shard-lnl: NOTRUN -> [SKIP][12] ([Intel XE#1407]) +2 other tests skip
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_big_fb@4-tiled-64bpp-rotate-90.html
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip:
- shard-ptl: NOTRUN -> [SKIP][13] ([Intel XE#5901])
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-7/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
* igt@kms_big_fb@linear-32bpp-rotate-90:
- shard-bmg: NOTRUN -> [SKIP][14] ([Intel XE#2327]) +4 other tests skip
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_big_fb@linear-32bpp-rotate-90.html
* igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip:
- shard-bmg: NOTRUN -> [SKIP][15] ([Intel XE#7059] / [Intel XE#7085])
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-4/igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip.html
* igt@kms_big_fb@y-tiled-16bpp-rotate-180:
- shard-bmg: NOTRUN -> [SKIP][16] ([Intel XE#1124]) +10 other tests skip
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@kms_big_fb@y-tiled-16bpp-rotate-180.html
* igt@kms_big_fb@y-tiled-addfb-size-overflow:
- shard-lnl: NOTRUN -> [SKIP][17] ([Intel XE#1428] / [Intel XE#7387])
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@kms_big_fb@y-tiled-addfb-size-overflow.html
* igt@kms_big_fb@yf-tiled-64bpp-rotate-180:
- shard-ptl: NOTRUN -> [SKIP][18] ([Intel XE#5808]) +5 other tests skip
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
- shard-lnl: NOTRUN -> [SKIP][19] ([Intel XE#1124]) +3 other tests skip
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
* igt@kms_bw@connected-linear-tiling-3-displays-target-1920x1080p:
- shard-bmg: NOTRUN -> [SKIP][20] ([Intel XE#7679])
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-4/igt@kms_bw@connected-linear-tiling-3-displays-target-1920x1080p.html
* igt@kms_bw@connected-linear-tiling-3-displays-target-2160x1440p:
- shard-lnl: NOTRUN -> [SKIP][21] ([Intel XE#7679]) +1 other test skip
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_bw@connected-linear-tiling-3-displays-target-2160x1440p.html
* igt@kms_bw@connected-linear-tiling-4-displays-target-1920x1080p:
- shard-ptl: NOTRUN -> [SKIP][22] ([Intel XE#7679])
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-7/igt@kms_bw@connected-linear-tiling-4-displays-target-1920x1080p.html
* igt@kms_bw@linear-tiling-2-displays-target-2560x1440p:
- shard-bmg: NOTRUN -> [SKIP][23] ([Intel XE#367])
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@kms_bw@linear-tiling-2-displays-target-2560x1440p.html
- shard-ptl: NOTRUN -> [SKIP][24] ([Intel XE#367])
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_bw@linear-tiling-2-displays-target-2560x1440p.html
* igt@kms_ccs@crc-primary-basic-4-tiled-dg2-rc-ccs:
- shard-bmg: NOTRUN -> [SKIP][25] ([Intel XE#2887]) +13 other tests skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@kms_ccs@crc-primary-basic-4-tiled-dg2-rc-ccs.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs@pipe-a-edp-1:
- shard-ptl: [PASS][26] -> [ABORT][27] ([Intel XE#7084] / [Intel XE#9362]) +1 other test abort
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-ptl-3/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs@pipe-a-edp-1.html
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-8/igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs@pipe-a-edp-1.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-mc-ccs:
- shard-lnl: NOTRUN -> [SKIP][28] ([Intel XE#3432])
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-mc-ccs.html
* igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc:
- shard-bmg: NOTRUN -> [SKIP][29] ([Intel XE#3432]) +1 other test skip
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc.html
* igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-mc-ccs:
- shard-ptl: NOTRUN -> [SKIP][30] ([Intel XE#5822]) +7 other tests skip
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-mc-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs:
- shard-lnl: NOTRUN -> [SKIP][31] ([Intel XE#2669] / [Intel XE#7389]) +3 other tests skip
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs:
- shard-lnl: NOTRUN -> [SKIP][32] ([Intel XE#2887]) +5 other tests skip
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs.html
* igt@kms_cdclk@mode-rejected-max-dotclock:
- shard-bmg: NOTRUN -> [SKIP][33] ([Intel XE#9311])
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@kms_cdclk@mode-rejected-max-dotclock.html
* igt@kms_chamelium_color@ctm-0-25:
- shard-ptl: NOTRUN -> [SKIP][34] ([Intel XE#5824])
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_chamelium_color@ctm-0-25.html
* igt@kms_chamelium_color@ctm-green-to-red:
- shard-bmg: NOTRUN -> [SKIP][35] ([Intel XE#2325] / [Intel XE#7358]) +1 other test skip
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_chamelium_color@ctm-green-to-red.html
* igt@kms_chamelium_color@ctm-negative:
- shard-lnl: NOTRUN -> [SKIP][36] ([Intel XE#306] / [Intel XE#7358])
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@kms_chamelium_color@ctm-negative.html
* igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lim-lut1d:
- shard-lnl: NOTRUN -> [SKIP][37] ([Intel XE#7358]) +1 other test skip
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lim-lut1d.html
* igt@kms_chamelium_color_pipeline@plane-lut1d-post-ctm3x4:
- shard-bmg: NOTRUN -> [SKIP][38] ([Intel XE#7358])
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_chamelium_color_pipeline@plane-lut1d-post-ctm3x4.html
* igt@kms_chamelium_edid@dp-edid-change-during-hibernate:
- shard-bmg: NOTRUN -> [SKIP][39] ([Intel XE#2252]) +7 other tests skip
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@kms_chamelium_edid@dp-edid-change-during-hibernate.html
* igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats:
- shard-ptl: NOTRUN -> [SKIP][40] ([Intel XE#2252]) +4 other tests skip
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats.html
* igt@kms_chamelium_hpd@dp-hpd-storm:
- shard-lnl: NOTRUN -> [SKIP][41] ([Intel XE#373])
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_chamelium_hpd@dp-hpd-storm.html
* igt@kms_color_pipeline@plane-ctm3x4@pipe-a-plane-3:
- shard-ptl: NOTRUN -> [SKIP][42] ([Intel XE#6969]) +7 other tests skip
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_color_pipeline@plane-ctm3x4@pipe-a-plane-3.html
* igt@kms_color_pipeline@plane-ctm3x4@pipe-c-plane-3:
- shard-bmg: NOTRUN -> [SKIP][43] ([Intel XE#6969]) +7 other tests skip
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@kms_color_pipeline@plane-ctm3x4@pipe-c-plane-3.html
* igt@kms_content_protection@atomic-dpms:
- shard-ptl: NOTRUN -> [SKIP][44] ([Intel XE#7642]) +1 other test skip
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-3/igt@kms_content_protection@atomic-dpms.html
* igt@kms_content_protection@atomic-dpms-hdcp14@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [FAIL][45] ([Intel XE#3304] / [Intel XE#7374]) +1 other test fail
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@kms_content_protection@atomic-dpms-hdcp14@pipe-a-dp-2.html
* igt@kms_content_protection@atomic-dpms@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [FAIL][46] ([Intel XE#1178] / [Intel XE#3304] / [Intel XE#7374]) +1 other test fail
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_content_protection@atomic-dpms@pipe-a-dp-2.html
* igt@kms_content_protection@dp-mst-lic-type-0:
- shard-bmg: NOTRUN -> [SKIP][47] ([Intel XE#2390] / [Intel XE#6974])
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@kms_content_protection@dp-mst-lic-type-0.html
* igt@kms_content_protection@dp-mst-lic-type-1:
- shard-ptl: NOTRUN -> [SKIP][48] ([Intel XE#5832] / [Intel XE#6974])
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-7/igt@kms_content_protection@dp-mst-lic-type-1.html
* igt@kms_content_protection@dp-mst-type-0-hdcp14:
- shard-lnl: NOTRUN -> [SKIP][49] ([Intel XE#6974])
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_content_protection@dp-mst-type-0-hdcp14.html
* igt@kms_content_protection@srm:
- shard-lnl: NOTRUN -> [SKIP][50] ([Intel XE#7642])
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@kms_content_protection@srm.html
* igt@kms_cursor_crc@cursor-offscreen-32x32:
- shard-bmg: NOTRUN -> [SKIP][51] ([Intel XE#2320]) +2 other tests skip
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@kms_cursor_crc@cursor-offscreen-32x32.html
* igt@kms_cursor_crc@cursor-random-128x42:
- shard-ptl: NOTRUN -> [SKIP][52] ([Intel XE#5900]) +2 other tests skip
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-7/igt@kms_cursor_crc@cursor-random-128x42.html
* igt@kms_cursor_crc@cursor-random-32x10:
- shard-lnl: NOTRUN -> [SKIP][53] ([Intel XE#1424]) +2 other tests skip
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@kms_cursor_crc@cursor-random-32x10.html
* igt@kms_cursor_crc@cursor-sliding-512x512:
- shard-bmg: NOTRUN -> [SKIP][54] ([Intel XE#2321] / [Intel XE#7355]) +1 other test skip
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_cursor_crc@cursor-sliding-512x512.html
* igt@kms_cursor_legacy@cursora-vs-flipb-varying-size:
- shard-ptl: NOTRUN -> [SKIP][55] ([Intel XE#5962])
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_cursor_legacy@cursora-vs-flipb-varying-size.html
* igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size:
- shard-lnl: NOTRUN -> [SKIP][56] ([Intel XE#309] / [Intel XE#7343])
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
- shard-lnl: NOTRUN -> [SKIP][57] ([Intel XE#323] / [Intel XE#6035])
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html
* igt@kms_dp_linktrain_fallback@dp-fallback:
- shard-lnl: NOTRUN -> [SKIP][58] ([Intel XE#9009])
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_dp_linktrain_fallback@dp-fallback.html
* igt@kms_dp_linktrain_fallback@uhbr-to-hbr-fallback:
- shard-bmg: NOTRUN -> [SKIP][59] ([Intel XE#9009])
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_dp_linktrain_fallback@uhbr-to-hbr-fallback.html
* igt@kms_dsc@dsc-with-bpc:
- shard-lnl: NOTRUN -> [SKIP][60] ([Intel XE#8265]) +1 other test skip
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_dsc@dsc-with-bpc.html
* igt@kms_dsc@dsc-with-bpc-ultrajoiner:
- shard-bmg: NOTRUN -> [SKIP][61] ([Intel XE#8265])
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_dsc@dsc-with-bpc-ultrajoiner.html
* igt@kms_dsc@dsc-with-output-formats-with-bpc-ultrajoiner:
- shard-ptl: NOTRUN -> [SKIP][62] ([Intel XE#5907])
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-7/igt@kms_dsc@dsc-with-output-formats-with-bpc-ultrajoiner.html
* igt@kms_feature_discovery@chamelium:
- shard-bmg: NOTRUN -> [SKIP][63] ([Intel XE#2372] / [Intel XE#7359])
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_feature_discovery@chamelium.html
* igt@kms_feature_discovery@dsc:
- shard-bmg: NOTRUN -> [SKIP][64] ([Intel XE#8586])
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@kms_feature_discovery@dsc.html
- shard-ptl: NOTRUN -> [SKIP][65] ([Intel XE#9287])
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_feature_discovery@dsc.html
* igt@kms_feature_discovery@psr2:
- shard-bmg: NOTRUN -> [SKIP][66] ([Intel XE#2374] / [Intel XE#6128])
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_feature_discovery@psr2.html
* igt@kms_flip@2x-flip-vs-suspend-interruptible:
- shard-lnl: NOTRUN -> [SKIP][67] ([Intel XE#1421]) +2 other tests skip
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_flip@2x-flip-vs-suspend-interruptible.html
* igt@kms_flip@2x-nonexisting-fb:
- shard-ptl: NOTRUN -> [SKIP][68] ([Intel XE#2316]) +2 other tests skip
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_flip@2x-nonexisting-fb.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@a-hdmi-a3:
- shard-bmg: [PASS][69] -> [FAIL][70] ([Intel XE#3321])
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-bmg-5/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-hdmi-a3.html
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-hdmi-a3.html
* igt@kms_flip@flip-vs-expired-vblank@b-edp1:
- shard-lnl: [PASS][71] -> [FAIL][72] ([Intel XE#301]) +2 other tests fail
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-3/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-downscaling:
- shard-ptl: NOTRUN -> [SKIP][73] ([Intel XE#7178]) +1 other test skip
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-7/igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-downscaling.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling:
- shard-lnl: NOTRUN -> [SKIP][74] ([Intel XE#7178] / [Intel XE#7351]) +2 other tests skip
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling:
- shard-bmg: NOTRUN -> [SKIP][75] ([Intel XE#7178] / [Intel XE#7351]) +3 other tests skip
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling.html
* igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-msflip-blt:
- shard-lnl: NOTRUN -> [SKIP][76] ([Intel XE#6312] / [Intel XE#651]) +5 other tests skip
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][77] ([Intel XE#656] / [Intel XE#7905]) +16 other tests skip
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-blt.html
* igt@kms_frontbuffer_tracking@drrs-argb161616f-draw-render:
- shard-bmg: NOTRUN -> [SKIP][78] ([Intel XE#7061] / [Intel XE#7356]) +1 other test skip
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@kms_frontbuffer_tracking@drrs-argb161616f-draw-render.html
* igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-wc:
- shard-ptl: NOTRUN -> [SKIP][79] ([Intel XE#5800] / [Intel XE#6312]) +3 other tests skip
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@drrshdr-2p-primscrn-cur-indfb-draw-render:
- shard-bmg: NOTRUN -> [SKIP][80] ([Intel XE#2311]) +44 other tests skip
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@kms_frontbuffer_tracking@drrshdr-2p-primscrn-cur-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@drrshdr-shrfb-scaledprimary:
- shard-lnl: NOTRUN -> [SKIP][81] ([Intel XE#6312]) +6 other tests skip
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_frontbuffer_tracking@drrshdr-shrfb-scaledprimary.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-render:
- shard-bmg: NOTRUN -> [SKIP][82] ([Intel XE#4141]) +15 other tests skip
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbcdrrs-abgr161616f-draw-render:
- shard-lnl: NOTRUN -> [SKIP][83] ([Intel XE#7061] / [Intel XE#7356])
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_frontbuffer_tracking@fbcdrrs-abgr161616f-draw-render.html
* igt@kms_frontbuffer_tracking@fbcdrrshdr-1p-primscrn-indfb-plflip-blt:
- shard-ptl: NOTRUN -> [SKIP][84] ([Intel XE#6312]) +3 other tests skip
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-7/igt@kms_frontbuffer_tracking@fbcdrrshdr-1p-primscrn-indfb-plflip-blt.html
* igt@kms_frontbuffer_tracking@fbchdr-2p-primscrn-shrfb-msflip-blt:
- shard-lnl: NOTRUN -> [SKIP][85] ([Intel XE#7905]) +19 other tests skip
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@kms_frontbuffer_tracking@fbchdr-2p-primscrn-shrfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@fbchdr-abgr161616f-draw-render:
- shard-bmg: NOTRUN -> [SKIP][86] ([Intel XE#7061]) +4 other tests skip
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@kms_frontbuffer_tracking@fbchdr-abgr161616f-draw-render.html
* igt@kms_frontbuffer_tracking@fbcpsrhdr-abgr161616f-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][87] ([Intel XE#7061])
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_frontbuffer_tracking@fbcpsrhdr-abgr161616f-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcpsrhdr-slowdraw:
- shard-ptl: NOTRUN -> [SKIP][88] ([Intel XE#7865]) +12 other tests skip
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_frontbuffer_tracking@fbcpsrhdr-slowdraw.html
* igt@kms_frontbuffer_tracking@hdr-1p-primscrn-indfb-msflip-blt:
- shard-lnl: NOTRUN -> [SKIP][89] ([Intel XE#7865]) +7 other tests skip
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_frontbuffer_tracking@hdr-1p-primscrn-indfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@hdr-2p-primscrn-cur-indfb-draw-mmap-wc:
- shard-ptl: NOTRUN -> [SKIP][90] ([Intel XE#5812]) +30 other tests skip
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_frontbuffer_tracking@hdr-2p-primscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@psr-argb161616f-draw-render:
- shard-ptl: NOTRUN -> [SKIP][91] ([Intel XE#7061] / [Intel XE#7356])
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_frontbuffer_tracking@psr-argb161616f-draw-render.html
* igt@kms_frontbuffer_tracking@psrhdr-argb161616f-draw-render:
- shard-ptl: NOTRUN -> [SKIP][92] ([Intel XE#7061]) +1 other test skip
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_frontbuffer_tracking@psrhdr-argb161616f-draw-render.html
* igt@kms_frontbuffer_tracking@psrhdr-rgb565-draw-render:
- shard-bmg: NOTRUN -> [SKIP][93] ([Intel XE#2313]) +49 other tests skip
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_frontbuffer_tracking@psrhdr-rgb565-draw-render.html
* igt@kms_hdmi_audio_bw@audio-bw-hblank80:
- shard-bmg: NOTRUN -> [FAIL][94] ([Intel XE#9313])
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@kms_hdmi_audio_bw@audio-bw-hblank80.html
* igt@kms_joiner@basic-big-joiner:
- shard-bmg: NOTRUN -> [SKIP][95] ([Intel XE#6901])
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@kms_joiner@basic-big-joiner.html
* igt@kms_joiner@basic-force-ultra-joiner:
- shard-ptl: NOTRUN -> [SKIP][96] ([Intel XE#6900])
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_joiner@basic-force-ultra-joiner.html
* igt@kms_joiner@basic-max-non-joiner:
- shard-bmg: NOTRUN -> [SKIP][97] ([Intel XE#4298] / [Intel XE#5873])
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_joiner@basic-max-non-joiner.html
* igt@kms_pipe_stress@stress-xrgb8888-xtiled:
- shard-ptl: NOTRUN -> [SKIP][98] ([Intel XE#6912]) +1 other test skip
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_pipe_stress@stress-xrgb8888-xtiled.html
* igt@kms_pipe_stress@stress-xrgb8888-ytiled:
- shard-bmg: NOTRUN -> [SKIP][99] ([Intel XE#4329] / [Intel XE#6912] / [Intel XE#7375])
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@kms_pipe_stress@stress-xrgb8888-ytiled.html
* igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier-source-clamping:
- shard-lnl: NOTRUN -> [SKIP][100] ([Intel XE#7283])
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier-source-clamping.html
* igt@kms_plane@pixel-format-4-tiled-modifier@pipe-a-plane-5:
- shard-bmg: NOTRUN -> [SKIP][101] ([Intel XE#8303]) +1 other test skip
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_plane@pixel-format-4-tiled-modifier@pipe-a-plane-5.html
* igt@kms_plane@pixel-format-x-tiled-modifier@pipe-b-plane-5:
- shard-lnl: NOTRUN -> [SKIP][102] ([Intel XE#8303]) +1 other test skip
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_plane@pixel-format-x-tiled-modifier@pipe-b-plane-5.html
* igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-cc-modifier-source-clamping:
- shard-ptl: NOTRUN -> [SKIP][103] ([Intel XE#7283]) +1 other test skip
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-cc-modifier-source-clamping.html
* igt@kms_plane@pixel-format-yf-tiled-modifier:
- shard-bmg: NOTRUN -> [SKIP][104] ([Intel XE#7283]) +3 other tests skip
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_plane@pixel-format-yf-tiled-modifier.html
* igt@kms_plane@plane-panning-bottom-right-suspend:
- shard-ptl: [PASS][105] -> [ABORT][106] ([Intel XE#9363]) +1 other test abort
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-ptl-2/igt@kms_plane@plane-panning-bottom-right-suspend.html
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-6/igt@kms_plane@plane-panning-bottom-right-suspend.html
* igt@kms_plane_multiple@2x-tiling-y:
- shard-ptl: NOTRUN -> [SKIP][107] ([Intel XE#4596] / [Intel XE#5854])
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_plane_multiple@2x-tiling-y.html
* igt@kms_plane_multiple@2x-tiling-yf:
- shard-bmg: NOTRUN -> [SKIP][108] ([Intel XE#5021] / [Intel XE#7377])
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-4/igt@kms_plane_multiple@2x-tiling-yf.html
* igt@kms_plane_scaling@planes-downscale-factor-0-75@pipe-a:
- shard-bmg: NOTRUN -> [SKIP][109] ([Intel XE#2763] / [Intel XE#6886]) +4 other tests skip
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_plane_scaling@planes-downscale-factor-0-75@pipe-a.html
* igt@kms_pm_backlight@fade-with-dpms:
- shard-bmg: NOTRUN -> [SKIP][110] ([Intel XE#7376] / [Intel XE#7760] / [Intel XE#870]) +1 other test skip
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@kms_pm_backlight@fade-with-dpms.html
* igt@kms_pm_dc@dc3co-after-dc6@pr-xrgb8888:
- shard-lnl: NOTRUN -> [SKIP][111] ([Intel XE#8395] / [Intel XE#8396]) +1 other test skip
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_pm_dc@dc3co-after-dc6@pr-xrgb8888.html
* igt@kms_pm_dc@dc3co-after-dc6@psr2-yuv420:
- shard-lnl: NOTRUN -> [SKIP][112] ([Intel XE#8396]) +1 other test skip
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_pm_dc@dc3co-after-dc6@psr2-yuv420.html
* igt@kms_pm_dc@dc5-psr:
- shard-bmg: NOTRUN -> [SKIP][113] ([Intel XE#7794])
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@kms_pm_dc@dc5-psr.html
* igt@kms_pm_rpm@dpms-lpsp:
- shard-bmg: NOTRUN -> [SKIP][114] ([Intel XE#1439] / [Intel XE#3141] / [Intel XE#7383] / [Intel XE#836])
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@kms_pm_rpm@dpms-lpsp.html
* igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
- shard-lnl: NOTRUN -> [SKIP][115] ([Intel XE#1439] / [Intel XE#7402] / [Intel XE#836])
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
* igt@kms_pm_rpm@package-g7:
- shard-lnl: NOTRUN -> [SKIP][116] ([Intel XE#6813])
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_pm_rpm@package-g7.html
* igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-sf:
- shard-ptl: NOTRUN -> [SKIP][117] ([Intel XE#7304]) +1 other test skip
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-sf.html
* igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf:
- shard-bmg: NOTRUN -> [SKIP][118] ([Intel XE#1489]) +6 other tests skip
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf.html
* igt@kms_psr2_sf@pr-overlay-plane-move-continuous-sf:
- shard-lnl: NOTRUN -> [SKIP][119] ([Intel XE#2893] / [Intel XE#7304]) +1 other test skip
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-sf.html
* igt@kms_psr2_su@page_flip-xrgb8888:
- shard-ptl: NOTRUN -> [SKIP][120] ([Intel XE#7413])
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_psr2_su@page_flip-xrgb8888.html
* igt@kms_psr@fbc-psr2-basic:
- shard-bmg: NOTRUN -> [SKIP][121] ([Intel XE#2234] / [Intel XE#2850]) +7 other tests skip
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@kms_psr@fbc-psr2-basic.html
* igt@kms_psr@fbc-psr2-primary-render:
- shard-lnl: NOTRUN -> [SKIP][122] ([Intel XE#1406] / [Intel XE#7345])
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@kms_psr@fbc-psr2-primary-render.html
* igt@kms_psr@fbc-psr2-primary-render@edp-1:
- shard-lnl: NOTRUN -> [SKIP][123] ([Intel XE#1406] / [Intel XE#4609] / [Intel XE#7345])
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@kms_psr@fbc-psr2-primary-render@edp-1.html
* igt@kms_psr@fbc-psr2-sprite-plane-onoff@edp-1:
- shard-ptl: NOTRUN -> [SKIP][124] ([Intel XE#1406] / [Intel XE#5835]) +1 other test skip
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_psr@fbc-psr2-sprite-plane-onoff@edp-1.html
* igt@kms_psr@pr-dpms:
- shard-lnl: NOTRUN -> [SKIP][125] ([Intel XE#1406]) +1 other test skip
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@kms_psr@pr-dpms.html
* igt@kms_psr@pr-sprite-render:
- shard-ptl: NOTRUN -> [SKIP][126] ([Intel XE#1406])
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_psr@pr-sprite-render.html
* igt@kms_rotation_crc@primary-rotation-90:
- shard-bmg: NOTRUN -> [SKIP][127] ([Intel XE#3904] / [Intel XE#7342]) +1 other test skip
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@kms_rotation_crc@primary-rotation-90.html
* igt@kms_rotation_crc@sprite-rotation-90-pos-100-0:
- shard-ptl: NOTRUN -> [SKIP][128] ([Intel XE#5821])
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_rotation_crc@sprite-rotation-90-pos-100-0.html
* igt@kms_sharpness_filter@filter-basic:
- shard-bmg: NOTRUN -> [SKIP][129] ([Intel XE#6503]) +2 other tests skip
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_sharpness_filter@filter-basic.html
* igt@kms_tv_load_detect@load-detect:
- shard-bmg: NOTRUN -> [SKIP][130] ([Intel XE#2450] / [Intel XE#5857])
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-4/igt@kms_tv_load_detect@load-detect.html
* igt@kms_vblank@ts-continuation-dpms-suspend:
- shard-bmg: [PASS][131] -> [DMESG-WARN][132] ([Intel XE#9365] / [Intel XE#9465])
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-bmg-6/igt@kms_vblank@ts-continuation-dpms-suspend.html
[132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_vblank@ts-continuation-dpms-suspend.html
* igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-dp-2:
- shard-bmg: [PASS][133] -> [DMESG-WARN][134] ([Intel XE#9365])
[133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-bmg-6/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-dp-2.html
[134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-dp-2.html
* igt@kms_vrr@cmrr-desktop-mode:
- shard-ptl: NOTRUN -> [SKIP][135] ([Intel XE#9277])
[135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_vrr@cmrr-desktop-mode.html
* igt@kms_vrr@cmrr-desktop-mode@pipe-a-edp-1:
- shard-ptl: NOTRUN -> [SKIP][136] ([Intel XE#9277] / [Intel XE#9278])
[136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_vrr@cmrr-desktop-mode@pipe-a-edp-1.html
* igt@kms_vrr@flip-suspend:
- shard-bmg: NOTRUN -> [SKIP][137] ([Intel XE#1499] / [Intel XE#9271]) +1 other test skip
[137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_vrr@flip-suspend.html
* igt@kms_vrr@seamless-rr-switch-drrs:
- shard-ptl: NOTRUN -> [SKIP][138] ([Intel XE#5948] / [Intel XE#9277])
[138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@kms_vrr@seamless-rr-switch-drrs.html
* igt@sriov_basic@pf-unbind-with-vf-probed:
- shard-ptl: NOTRUN -> [ABORT][139] ([Intel XE#8868])
[139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-7/igt@sriov_basic@pf-unbind-with-vf-probed.html
* igt@xe_compute@ccs-mode-basic:
- shard-bmg: NOTRUN -> [SKIP][140] ([Intel XE#6599])
[140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@xe_compute@ccs-mode-basic.html
* igt@xe_compute_preempt@compute-preempt-many-vram:
- shard-lnl: NOTRUN -> [SKIP][141] ([Intel XE#5191] / [Intel XE#7316] / [Intel XE#7346])
[141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@xe_compute_preempt@compute-preempt-many-vram.html
* igt@xe_evict@evict-beng-cm-threads-small-multi-vm:
- shard-lnl: NOTRUN -> [SKIP][142] ([Intel XE#6540] / [Intel XE#688]) +5 other tests skip
[142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@xe_evict@evict-beng-cm-threads-small-multi-vm.html
* igt@xe_evict@evict-beng-mixed-many-threads-small:
- shard-bmg: [PASS][143] -> [INCOMPLETE][144] ([Intel XE#6321] / [Intel XE#8355])
[143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-bmg-9/igt@xe_evict@evict-beng-mixed-many-threads-small.html
[144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-1/igt@xe_evict@evict-beng-mixed-many-threads-small.html
* igt@xe_evict@evict-beng-mixed-threads-small-multi-vm:
- shard-ptl: NOTRUN -> [SKIP][145] ([Intel XE#5764]) +1 other test skip
[145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@xe_evict@evict-beng-mixed-threads-small-multi-vm.html
* igt@xe_evict@evict-small-external-multi-queue-cm:
- shard-bmg: NOTRUN -> [SKIP][146] ([Intel XE#8370])
[146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@xe_evict@evict-small-external-multi-queue-cm.html
* igt@xe_evict_ccs@evict-overcommit-standalone-nofree-reopen:
- shard-ptl: NOTRUN -> [SKIP][147] ([Intel XE#6144])
[147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@xe_evict_ccs@evict-overcommit-standalone-nofree-reopen.html
* igt@xe_exec_balancer@many-parallel-userptr-invalidate-race:
- shard-lnl: NOTRUN -> [SKIP][148] ([Intel XE#7482]) +9 other tests skip
[148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@xe_exec_balancer@many-parallel-userptr-invalidate-race.html
* igt@xe_exec_balancer@twice-cm-virtual-userptr-rebind:
- shard-ptl: NOTRUN -> [SKIP][149] ([Intel XE#7482]) +4 other tests skip
[149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@xe_exec_balancer@twice-cm-virtual-userptr-rebind.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr:
- shard-bmg: NOTRUN -> [SKIP][150] ([Intel XE#2322] / [Intel XE#7372]) +4 other tests skip
[150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr.html
- shard-ptl: NOTRUN -> [SKIP][151] ([Intel XE#5575] / [Intel XE#7484])
[151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-rebind:
- shard-lnl: NOTRUN -> [SKIP][152] ([Intel XE#1392]) +4 other tests skip
[152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-rebind.html
* igt@xe_exec_fault_mode@many-multi-queue-rebind-imm:
- shard-ptl: NOTRUN -> [SKIP][153] ([Intel XE#8374]) +3 other tests skip
[153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@xe_exec_fault_mode@many-multi-queue-rebind-imm.html
* igt@xe_exec_fault_mode@many-multi-queue-userptr-invalidate:
- shard-bmg: NOTRUN -> [SKIP][154] ([Intel XE#8374]) +7 other tests skip
[154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@xe_exec_fault_mode@many-multi-queue-userptr-invalidate.html
* igt@xe_exec_fault_mode@once-multi-queue-userptr-rebind:
- shard-lnl: NOTRUN -> [SKIP][155] ([Intel XE#8374]) +5 other tests skip
[155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@xe_exec_fault_mode@once-multi-queue-userptr-rebind.html
* igt@xe_exec_multi_queue@many-execs-preempt-mode-fault-dyn-priority:
- shard-lnl: NOTRUN -> [SKIP][156] ([Intel XE#8364]) +12 other tests skip
[156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@xe_exec_multi_queue@many-execs-preempt-mode-fault-dyn-priority.html
* igt@xe_exec_multi_queue@max-queues-preempt-mode-fault-dyn-priority-smem:
- shard-ptl: NOTRUN -> [SKIP][157] ([Intel XE#8364]) +10 other tests skip
[157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@xe_exec_multi_queue@max-queues-preempt-mode-fault-dyn-priority-smem.html
* igt@xe_exec_multi_queue@two-queues-preempt-mode-basic-smem:
- shard-bmg: NOTRUN -> [SKIP][158] ([Intel XE#8364]) +25 other tests skip
[158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@xe_exec_multi_queue@two-queues-preempt-mode-basic-smem.html
* igt@xe_exec_reset@cm-multi-queue-close-fd:
- shard-lnl: NOTRUN -> [SKIP][159] ([Intel XE#8369]) +1 other test skip
[159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@xe_exec_reset@cm-multi-queue-close-fd.html
* igt@xe_exec_reset@multi-queue-cat-error:
- shard-bmg: NOTRUN -> [SKIP][160] ([Intel XE#8369]) +1 other test skip
[160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@xe_exec_reset@multi-queue-cat-error.html
- shard-ptl: NOTRUN -> [SKIP][161] ([Intel XE#8369])
[161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@xe_exec_reset@multi-queue-cat-error.html
* igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr:
- shard-bmg: NOTRUN -> [SKIP][162] ([Intel XE#8378]) +8 other tests skip
[162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr.html
* igt@xe_exec_threads@threads-multi-queue-userptr-invalidate-race:
- shard-lnl: NOTRUN -> [SKIP][163] ([Intel XE#8378]) +4 other tests skip
[163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@xe_exec_threads@threads-multi-queue-userptr-invalidate-race.html
* igt@xe_exec_threads@threads-multi-queue-userptr-rebind:
- shard-ptl: NOTRUN -> [SKIP][164] ([Intel XE#8378]) +3 other tests skip
[164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@xe_exec_threads@threads-multi-queue-userptr-rebind.html
* igt@xe_mempage_offline@inject-single-page:
- shard-bmg: NOTRUN -> [SKIP][165] ([Intel XE#9203])
[165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@xe_mempage_offline@inject-single-page.html
* igt@xe_multigpu_svm@mgpu-coherency-conflict:
- shard-bmg: NOTRUN -> [SKIP][166] ([Intel XE#6964]) +1 other test skip
[166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@xe_multigpu_svm@mgpu-coherency-conflict.html
* igt@xe_multigpu_svm@mgpu-pagefault-conflict:
- shard-ptl: NOTRUN -> [SKIP][167] ([Intel XE#6964]) +1 other test skip
[167]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-7/igt@xe_multigpu_svm@mgpu-pagefault-conflict.html
* igt@xe_page_reclaim@basic-mixed:
- shard-bmg: NOTRUN -> [SKIP][168] ([Intel XE#7793])
[168]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@xe_page_reclaim@basic-mixed.html
* igt@xe_pat@xa-app-transient-media-off:
- shard-bmg: NOTRUN -> [SKIP][169] ([Intel XE#7590])
[169]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@xe_pat@xa-app-transient-media-off.html
* igt@xe_pm@d3cold-i2c:
- shard-ptl: NOTRUN -> [SKIP][170] ([Intel XE#5741])
[170]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@xe_pm@d3cold-i2c.html
* igt@xe_pm@d3cold-mmap-vram:
- shard-bmg: NOTRUN -> [SKIP][171] ([Intel XE#2284] / [Intel XE#7370])
[171]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@xe_pm@d3cold-mmap-vram.html
* igt@xe_pm@d3hot-mmap-vram:
- shard-ptl: NOTRUN -> [SKIP][172] ([Intel XE#5834])
[172]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@xe_pm@d3hot-mmap-vram.html
* igt@xe_pm@s4-exec-after:
- shard-lnl: NOTRUN -> [ABORT][173] ([Intel XE#9362])
[173]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@xe_pm@s4-exec-after.html
* igt@xe_pm@s4-vm-bind-userptr:
- shard-ptl: [PASS][174] -> [ABORT][175] ([Intel XE#9362])
[174]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-ptl-2/igt@xe_pm@s4-vm-bind-userptr.html
[175]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-6/igt@xe_pm@s4-vm-bind-userptr.html
- shard-lnl: [PASS][176] -> [ABORT][177] ([Intel XE#9362]) +1 other test abort
[176]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-lnl-3/igt@xe_pm@s4-vm-bind-userptr.html
[177]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@xe_pm@s4-vm-bind-userptr.html
* igt@xe_pm@vram-d3cold-threshold-show:
- shard-bmg: NOTRUN -> [SKIP][178] ([Intel XE#9487]) +1 other test skip
[178]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@xe_pm@vram-d3cold-threshold-show.html
- shard-ptl: NOTRUN -> [SKIP][179] ([Intel XE#9487])
[179]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@xe_pm@vram-d3cold-threshold-show.html
* igt@xe_pmu@all-fn-engine-activity-load@engine-drm_xe_engine_class_compute0:
- shard-bmg: [PASS][180] -> [FAIL][181] ([Intel XE#9395]) +2 other tests fail
[180]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-bmg-1/igt@xe_pmu@all-fn-engine-activity-load@engine-drm_xe_engine_class_compute0.html
[181]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-4/igt@xe_pmu@all-fn-engine-activity-load@engine-drm_xe_engine_class_compute0.html
* igt@xe_prefetch_fault@prefetch-fault-svm:
- shard-lnl: NOTRUN -> [SKIP][182] ([Intel XE#7599])
[182]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@xe_prefetch_fault@prefetch-fault-svm.html
* igt@xe_pxp@pxp-stale-queue-post-termination-irq:
- shard-bmg: NOTRUN -> [SKIP][183] ([Intel XE#4733] / [Intel XE#7417]) +1 other test skip
[183]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@xe_pxp@pxp-stale-queue-post-termination-irq.html
* igt@xe_query@multigpu-query-invalid-size:
- shard-ptl: NOTRUN -> [SKIP][184] ([Intel XE#6019])
[184]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@xe_query@multigpu-query-invalid-size.html
- shard-bmg: NOTRUN -> [SKIP][185] ([Intel XE#944])
[185]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@xe_query@multigpu-query-invalid-size.html
* igt@xe_survivability@runtime-survivability:
- shard-lnl: NOTRUN -> [SKIP][186] ([Intel XE#8415])
[186]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-2/igt@xe_survivability@runtime-survivability.html
* igt@xe_sync_file@sync_file_race:
- shard-lnl: NOTRUN -> [FAIL][187] ([Intel XE#9457])
[187]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@xe_sync_file@sync_file_race.html
* igt@xe_vm@out-of-memory:
- shard-ptl: NOTRUN -> [SKIP][188] ([Intel XE#5745] / [Intel XE#7892])
[188]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-7/igt@xe_vm@out-of-memory.html
* igt@xe_vm@overcommit-nonfault-vram-no-lr:
- shard-lnl: NOTRUN -> [SKIP][189] ([Intel XE#7892])
[189]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-6/igt@xe_vm@overcommit-nonfault-vram-no-lr.html
#### Possible fixes ####
* igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:
- shard-bmg: [INCOMPLETE][190] ([Intel XE#7084] / [Intel XE#8150]) -> [PASS][191] +1 other test pass
[190]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-bmg-10/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
[191]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-4/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-b-hdmi-a-3:
- shard-bmg: [DMESG-WARN][192] ([Intel XE#9365]) -> [PASS][193]
[192]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-bmg-10/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-b-hdmi-a-3.html
[193]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-4/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-b-hdmi-a-3.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1:
- shard-lnl: [FAIL][194] ([Intel XE#301] / [Intel XE#3149]) -> [PASS][195]
[194]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html
[195]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@d-hdmi-a3:
- shard-bmg: [FAIL][196] ([Intel XE#3149] / [Intel XE#3321]) -> [PASS][197]
[196]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-bmg-5/igt@kms_flip@flip-vs-expired-vblank-interruptible@d-hdmi-a3.html
[197]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@kms_flip@flip-vs-expired-vblank-interruptible@d-hdmi-a3.html
* igt@kms_pm_dc@deep-pkgc:
- shard-lnl: [FAIL][198] ([Intel XE#2029] / [Intel XE#7395]) -> [PASS][199]
[198]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-lnl-4/igt@kms_pm_dc@deep-pkgc.html
[199]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-3/igt@kms_pm_dc@deep-pkgc.html
* igt@kms_vblank@ts-continuation-suspend:
- shard-ptl: [ABORT][200] ([Intel XE#9375]) -> [PASS][201] +1 other test pass
[200]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-ptl-1/igt@kms_vblank@ts-continuation-suspend.html
[201]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-7/igt@kms_vblank@ts-continuation-suspend.html
* igt@kms_vrr@flipline:
- shard-lnl: [FAIL][202] ([Intel XE#4227] / [Intel XE#7397]) -> [PASS][203] +1 other test pass
[202]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-lnl-2/igt@kms_vrr@flipline.html
[203]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-5/igt@kms_vrr@flipline.html
* igt@xe_ccs@suspend-resume:
- shard-bmg: [ABORT][204] ([Intel XE#9362]) -> [PASS][205] +1 other test pass
[204]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-bmg-1/igt@xe_ccs@suspend-resume.html
[205]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@xe_ccs@suspend-resume.html
* igt@xe_ccs@suspend-resume@tile64-compressed-compfmt0-system-system:
- shard-ptl: [ABORT][206] ([Intel XE#9362]) -> [PASS][207] +4 other tests pass
[206]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-ptl-2/igt@xe_ccs@suspend-resume@tile64-compressed-compfmt0-system-system.html
[207]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-5/igt@xe_ccs@suspend-resume@tile64-compressed-compfmt0-system-system.html
* igt@xe_fault_injection@inject-fault-probe-function-xe_guc_log_init:
- shard-bmg: [ABORT][208] ([Intel XE#9463]) -> [PASS][209] +1 other test pass
[208]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-bmg-2/igt@xe_fault_injection@inject-fault-probe-function-xe_guc_log_init.html
[209]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@xe_fault_injection@inject-fault-probe-function-xe_guc_log_init.html
#### Warnings ####
* igt@kms_flip@flip-vs-expired-vblank-interruptible:
- shard-bmg: [FAIL][210] ([Intel XE#3149] / [Intel XE#3321]) -> [FAIL][211] ([Intel XE#3321])
[210]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-bmg-5/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
[211]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-6/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
- shard-lnl: [FAIL][212] ([Intel XE#301] / [Intel XE#3149]) -> [FAIL][213] ([Intel XE#301])
[212]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
[213]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
* igt@kms_hdr@brightness-with-hdr:
- shard-bmg: [SKIP][214] ([Intel XE#3374] / [Intel XE#3544]) -> [SKIP][215] ([Intel XE#3544])
[214]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-bmg-2/igt@kms_hdr@brightness-with-hdr.html
[215]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-5/igt@kms_hdr@brightness-with-hdr.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-bmg: [SKIP][216] ([Intel XE#2509] / [Intel XE#7437]) -> [SKIP][217] ([Intel XE#2426] / [Intel XE#5848])
[216]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-bmg-10/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[217]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-2/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
* igt@xe_pat@pat-sw-hw-suspend:
- shard-ptl: [FAIL][218] ([Intel XE#7695]) -> [ABORT][219] ([Intel XE#9362])
[218]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-ptl-6/igt@xe_pat@pat-sw-hw-suspend.html
[219]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-ptl-1/igt@xe_pat@pat-sw-hw-suspend.html
* igt@xe_wedged@wedged-at-any-timeout:
- shard-bmg: [ABORT][220] ([Intel XE#8963] / [Intel XE#9463]) -> [DMESG-WARN][221] ([Intel XE#8963])
[220]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f/shard-bmg-2/igt@xe_wedged@wedged-at-any-timeout.html
[221]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/shard-bmg-9/igt@xe_wedged@wedged-at-any-timeout.html
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
[Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
[Intel XE#1424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1424
[Intel XE#1428]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1428
[Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
[Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
[Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
[Intel XE#2029]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2029
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
[Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
[Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
[Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
[Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
[Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
[Intel XE#2372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2372
[Intel XE#2374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2374
[Intel XE#2390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2390
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2450]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2450
[Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
[Intel XE#2669]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2669
[Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#2893]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2893
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
[Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#3141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3141
[Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
[Intel XE#323]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/323
[Intel XE#3304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3304
[Intel XE#3321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3321
[Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
[Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
[Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
[Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
[Intel XE#4227]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4227
[Intel XE#4298]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4298
[Intel XE#4329]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4329
[Intel XE#4596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4596
[Intel XE#4609]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4609
[Intel XE#4733]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4733
[Intel XE#5021]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5021
[Intel XE#5191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5191
[Intel XE#5575]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5575
[Intel XE#5741]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5741
[Intel XE#5745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5745
[Intel XE#5764]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5764
[Intel XE#5800]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5800
[Intel XE#5808]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5808
[Intel XE#5812]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5812
[Intel XE#5821]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5821
[Intel XE#5822]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5822
[Intel XE#5824]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5824
[Intel XE#5832]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5832
[Intel XE#5834]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5834
[Intel XE#5835]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5835
[Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
[Intel XE#5854]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5854
[Intel XE#5857]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5857
[Intel XE#5873]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5873
[Intel XE#5900]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5900
[Intel XE#5901]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5901
[Intel XE#5907]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5907
[Intel XE#5947]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5947
[Intel XE#5948]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5948
[Intel XE#5962]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5962
[Intel XE#6011]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6011
[Intel XE#6019]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6019
[Intel XE#6035]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6035
[Intel XE#6128]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6128
[Intel XE#6144]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6144
[Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
[Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
[Intel XE#6503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6503
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#6540]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6540
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#6599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6599
[Intel XE#6813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6813
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#6886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6886
[Intel XE#6900]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6900
[Intel XE#6901]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6901
[Intel XE#6912]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6912
[Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
[Intel XE#6969]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6969
[Intel XE#6974]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6974
[Intel XE#7059]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7059
[Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
[Intel XE#7084]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7084
[Intel XE#7085]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7085
[Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
[Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
[Intel XE#7304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7304
[Intel XE#7316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7316
[Intel XE#7342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7342
[Intel XE#7343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7343
[Intel XE#7345]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7345
[Intel XE#7346]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7346
[Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
[Intel XE#7355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7355
[Intel XE#7356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7356
[Intel XE#7358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7358
[Intel XE#7359]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7359
[Intel XE#7370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7370
[Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
[Intel XE#7374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7374
[Intel XE#7375]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7375
[Intel XE#7376]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7376
[Intel XE#7377]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7377
[Intel XE#7383]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7383
[Intel XE#7387]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7387
[Intel XE#7389]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7389
[Intel XE#7395]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7395
[Intel XE#7397]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7397
[Intel XE#7402]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7402
[Intel XE#7413]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7413
[Intel XE#7417]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7417
[Intel XE#7437]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7437
[Intel XE#7482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7482
[Intel XE#7484]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7484
[Intel XE#7590]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7590
[Intel XE#7599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7599
[Intel XE#7642]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7642
[Intel XE#7679]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7679
[Intel XE#7695]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7695
[Intel XE#7760]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7760
[Intel XE#7793]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7793
[Intel XE#7794]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7794
[Intel XE#7865]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7865
[Intel XE#7892]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7892
[Intel XE#7905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7905
[Intel XE#8150]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8150
[Intel XE#8265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8265
[Intel XE#8303]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8303
[Intel XE#8355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8355
[Intel XE#836]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/836
[Intel XE#8364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8364
[Intel XE#8369]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8369
[Intel XE#8370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8370
[Intel XE#8374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8374
[Intel XE#8378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8378
[Intel XE#8395]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8395
[Intel XE#8396]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8396
[Intel XE#8415]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8415
[Intel XE#8586]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8586
[Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
[Intel XE#8868]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8868
[Intel XE#8963]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8963
[Intel XE#9009]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9009
[Intel XE#9203]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9203
[Intel XE#9271]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9271
[Intel XE#9277]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9277
[Intel XE#9278]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9278
[Intel XE#9287]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9287
[Intel XE#9311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9311
[Intel XE#9313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9313
[Intel XE#9362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9362
[Intel XE#9363]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9363
[Intel XE#9365]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9365
[Intel XE#9375]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9375
[Intel XE#9395]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9395
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
[Intel XE#9457]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9457
[Intel XE#9463]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9463
[Intel XE#9465]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9465
[Intel XE#9487]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/9487
Build changes
-------------
* Linux: xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f -> xe-pw-165879v10
IGT_9130: 9130
xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f: 5d226b433e3f4d7b1fee2cec0030813806f5510f
xe-pw-165879v10: 165879v10
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/index.html
[-- Attachment #2: Type: text/html, Size: 81026 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: Xe.CI.FULL: failure for Add new debug infrastructure for configfs (rev10)
2026-10-06 6:22 ` ✗ Xe.CI.FULL: failure " Patchwork
@ 2026-10-07 19:13 ` Summers, Stuart
0 siblings, 0 replies; 22+ messages in thread
From: Summers, Stuart @ 2026-10-07 19:13 UTC (permalink / raw)
To: intel-xe@lists.freedesktop.org
On Tue, 2026-10-06 at 06:22 +0000, Patchwork wrote:
> Patch Details
> Series: Add new debug infrastructure for configfs (rev10) URL:
> https://patchwork.freedesktop.org/series/165879/ State: failure
> Details:
> https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-165879v10/index.html
> CI Bug Log - changes from xe-5891-
> 5d226b433e3f4d7b1fee2cec0030813806f5510f_FULL -> xe-pw-
> 165879v10_FULLSummaryFAILURE
> Serious unknown changes coming with xe-pw-165879v10_FULL absolutely
> need to be
> verified manually.
> If you think the reported changes have nothing to do with the changes
> introduced in xe-pw-165879v10_FULL, please notify your bug team
> (I915-ci-infra@lists.freedesktop.org) to allow them
> to document this new failure mode, which will reduce false positives
> in CI.
> Participating hosts (3 -> 3)No changes in participating hosts
> Possible new issuesHere are the unknown changes that may have been
> introduced in xe-pw-165879v10_FULL:
> IGT changesPossible regressions *
> igt@kms_dp_link_training@uhbr-sst-direct-train:shard-ptl: NOTRUN ->
> SKIP +2 other tests skip
> * igt@kms_dp_link_training@uhbr-sst-tbtalt-train:shard-bmg: NOTRUN -
> > SKIP +4 other tests skip
> * igt@xe_configfs@ctx-restore-post-bb:shard-ptl: PASS -> FAIL +3
> other tests failshard-lnl: PASS -> FAIL +2 other tests fail
> * igt@xe_configfs@gt-types-allowed:shard-bmg: PASS -> FAIL +3 other
These are expected and should be fixed in [1] which I'll plan on
merging when this series merges (once all the reviews are in, etc).
Thanks,
Stuart
[1]: https://patchwork.freedesktop.org/series/172602/
> tests failshard-lnl: NOTRUN -> FAIL
> Known issuesHere are the changes found in xe-pw-165879v10_FULL that
> come from known issues:
> IGT changesIssues hit * igt@kms_3d@basic:shard-lnl: NOTRUN -> SKIP
> (Intel XE#6011)
> * igt@kms_atomic_transition@plane-all-modeset-transition:shard-ptl:
> NOTRUN -> SKIP (Intel XE#5947)
> * igt@kms_big_fb@4-tiled-64bpp-rotate-90:shard-lnl: NOTRUN -> SKIP
> (Intel XE#1407) +2 other tests skip
> * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0-hflip:shard-
> ptl: NOTRUN -> SKIP (Intel XE#5901)
> * igt@kms_big_fb@linear-32bpp-rotate-90:shard-bmg: NOTRUN -> SKIP
> (Intel XE#2327) +4 other tests skip
> * igt@kms_big_fb@linear-max-hw-stride-32bpp-rotate-0-hflip:shard-
> bmg: NOTRUN -> SKIP (Intel XE#7059 / Intel XE#7085)
> * igt@kms_big_fb@y-tiled-16bpp-rotate-180:shard-bmg: NOTRUN -> SKIP
> (Intel XE#1124) +10 other tests skip
> * igt@kms_big_fb@y-tiled-addfb-size-overflow:shard-lnl: NOTRUN ->
> SKIP (Intel XE#1428 / Intel XE#7387)
> * igt@kms_big_fb@yf-tiled-64bpp-rotate-180:shard-ptl: NOTRUN -> SKIP
> (Intel XE#5808) +5 other tests skip
> *
> igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip
> :shard-lnl: NOTRUN -> SKIP (Intel XE#1124) +3 other tests skip
> *
> igt@kms_bw@connected-linear-tiling-3-displays-target-1920x1080p:shard
> -bmg: NOTRUN -> SKIP (Intel XE#7679)
> *
> igt@kms_bw@connected-linear-tiling-3-displays-target-2160x1440p:shard
> -lnl: NOTRUN -> SKIP (Intel XE#7679) +1 other test skip
> *
> igt@kms_bw@connected-linear-tiling-4-displays-target-1920x1080p:shard
> -ptl: NOTRUN -> SKIP (Intel XE#7679)
> * igt@kms_bw@linear-tiling-2-displays-target-2560x1440p:shard-bmg:
> NOTRUN -> SKIP (Intel XE#367)shard-ptl: NOTRUN -> SKIP (Intel XE#367)
> * igt@kms_ccs@crc-primary-basic-4-tiled-dg2-rc-ccs:shard-bmg: NOTRUN
> -> SKIP (Intel XE#2887) +13 other tests skip
> * igt@kms_ccs@crc-primary-suspend-4-tiled-lnl-ccs@pipe-a-edp-
> 1:shard-ptl: PASS -> ABORT (Intel XE#7084 / Intel XE#9362) +1 other
> test abort
> * igt@kms_ccs@crc-primary-suspend-4-tiled-mtl-mc-ccs:shard-lnl:
> NOTRUN -> SKIP (Intel XE#3432)
> * igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs-cc:shard-bmg:
> NOTRUN -> SKIP (Intel XE#3432) +1 other test skip
> * igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-mc-ccs:shard-ptl:
> NOTRUN -> SKIP (Intel XE#5822) +7 other tests skip
> * igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs:shard-lnl: NOTRUN ->
> SKIP (Intel XE#2669 / Intel XE#7389) +3 other tests skip
> * igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs:shard-lnl: NOTRUN -
> > SKIP (Intel XE#2887) +5 other tests skip
> * igt@kms_cdclk@mode-rejected-max-dotclock:shard-bmg: NOTRUN -> SKIP
> (Intel XE#9311)
> * igt@kms_chamelium_color@ctm-0-25:shard-ptl: NOTRUN -> SKIP (Intel
> XE#5824)
> * igt@kms_chamelium_color@ctm-green-to-red:shard-bmg: NOTRUN -> SKIP
> (Intel XE#2325 / Intel XE#7358) +1 other test skip
> * igt@kms_chamelium_color@ctm-negative:shard-lnl: NOTRUN -> SKIP
> (Intel XE#306 / Intel XE#7358)
> *
> igt@kms_chamelium_color_pipeline@plane-fixed-matrix-yuv-rgb-bt709-lim-lut1d
> :shard-lnl: NOTRUN -> SKIP (Intel XE#7358) +1 other test skip
> * igt@kms_chamelium_color_pipeline@plane-lut1d-post-ctm3x4:shard-
> bmg: NOTRUN -> SKIP (Intel XE#7358)
> * igt@kms_chamelium_edid@dp-edid-change-during-hibernate:shard-bmg:
> NOTRUN -> SKIP (Intel XE#2252) +7 other tests skip
> * igt@kms_chamelium_frames@hdmi-crc-nonplanar-formats:shard-ptl:
> NOTRUN -> SKIP (Intel XE#2252) +4 other tests skip
> * igt@kms_chamelium_hpd@dp-hpd-storm:shard-lnl: NOTRUN -> SKIP
> (Intel XE#373)
> * igt@kms_color_pipeline@plane-ctm3x4@pipe-a-plane-3:shard-ptl:
> NOTRUN -> SKIP (Intel XE#6969) +7 other tests skip
> * igt@kms_color_pipeline@plane-ctm3x4@pipe-c-plane-3:shard-bmg:
> NOTRUN -> SKIP (Intel XE#6969) +7 other tests skip
> * igt@kms_content_protection@atomic-dpms:shard-ptl: NOTRUN -> SKIP
> (Intel XE#7642) +1 other test skip
> * igt@kms_content_protection@atomic-dpms-hdcp14@pipe-a-dp-2:shard-
> bmg: NOTRUN -> FAIL (Intel XE#3304 / Intel XE#7374) +1 other test
> fail
> * igt@kms_content_protection@atomic-dpms@pipe-a-dp-2:shard-bmg:
> NOTRUN -> FAIL (Intel XE#1178 / Intel XE#3304 / Intel XE#7374) +1
> other test fail
> * igt@kms_content_protection@dp-mst-lic-type-0:shard-bmg: NOTRUN ->
> SKIP (Intel XE#2390 / Intel XE#6974)
> * igt@kms_content_protection@dp-mst-lic-type-1:shard-ptl: NOTRUN ->
> SKIP (Intel XE#5832 / Intel XE#6974)
> * igt@kms_content_protection@dp-mst-type-0-hdcp14:shard-lnl: NOTRUN
> -> SKIP (Intel XE#6974)
> * igt@kms_content_protection@srm:shard-lnl: NOTRUN -> SKIP (Intel
> XE#7642)
> * igt@kms_cursor_crc@cursor-offscreen-32x32:shard-bmg: NOTRUN ->
> SKIP (Intel XE#2320) +2 other tests skip
> * igt@kms_cursor_crc@cursor-random-128x42:shard-ptl: NOTRUN -> SKIP
> (Intel XE#5900) +2 other tests skip
> * igt@kms_cursor_crc@cursor-random-32x10:shard-lnl: NOTRUN -> SKIP
> (Intel XE#1424) +2 other tests skip
> * igt@kms_cursor_crc@cursor-sliding-512x512:shard-bmg: NOTRUN ->
> SKIP (Intel XE#2321 / Intel XE#7355) +1 other test skip
> * igt@kms_cursor_legacy@cursora-vs-flipb-varying-size:shard-ptl:
> NOTRUN -> SKIP (Intel XE#5962)
> * igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size:shard-lnl:
> NOTRUN -> SKIP (Intel XE#309 / Intel XE#7343)
> *
> igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size
> :shard-lnl: NOTRUN -> SKIP (Intel XE#323 / Intel XE#6035)
> * igt@kms_dp_linktrain_fallback@dp-fallback:shard-lnl: NOTRUN ->
> SKIP (Intel XE#9009)
> * igt@kms_dp_linktrain_fallback@uhbr-to-hbr-fallback:shard-bmg:
> NOTRUN -> SKIP (Intel XE#9009)
> * igt@kms_dsc@dsc-with-bpc:shard-lnl: NOTRUN -> SKIP (Intel XE#8265)
> +1 other test skip
> * igt@kms_dsc@dsc-with-bpc-ultrajoiner:shard-bmg: NOTRUN -> SKIP
> (Intel XE#8265)
> * igt@kms_dsc@dsc-with-output-formats-with-bpc-ultrajoiner:shard-
> ptl: NOTRUN -> SKIP (Intel XE#5907)
> * igt@kms_feature_discovery@chamelium:shard-bmg: NOTRUN -> SKIP
> (Intel XE#2372 / Intel XE#7359)
> * igt@kms_feature_discovery@dsc:shard-bmg: NOTRUN -> SKIP (Intel
> XE#8586)shard-ptl: NOTRUN -> SKIP (Intel XE#9287)
> * igt@kms_feature_discovery@psr2:shard-bmg: NOTRUN -> SKIP (Intel
> XE#2374 / Intel XE#6128)
> * igt@kms_flip@2x-flip-vs-suspend-interruptible:shard-lnl: NOTRUN ->
> SKIP (Intel XE#1421) +2 other tests skip
> * igt@kms_flip@2x-nonexisting-fb:shard-ptl: NOTRUN -> SKIP (Intel
> XE#2316) +2 other tests skip
> * igt@kms_flip@flip-vs-expired-vblank-interruptible@a-hdmi-a3:shard-
> bmg: PASS -> FAIL (Intel XE#3321)
> * igt@kms_flip@flip-vs-expired-vblank@b-edp1:shard-lnl: PASS -> FAIL
> (Intel XE#301) +2 other tests fail
> *
> igt@kms_flip_scaled_crc@flip-32bpp-yftile-to-64bpp-yftile-downscaling
> :shard-ptl: NOTRUN -> SKIP (Intel XE#7178) +1 other test skip
> *
> igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling
> :shard-lnl: NOTRUN -> SKIP (Intel XE#7178 / Intel XE#7351) +2 other
> tests skip
> *
> igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-downscaling
> :shard-bmg: NOTRUN -> SKIP (Intel XE#7178 / Intel XE#7351) +3 other
> tests skip
> *
> igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-msflip-blt:shard-
> lnl: NOTRUN -> SKIP (Intel XE#6312 / Intel XE#651) +5 other tests
> skip
> *
> igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-blt:shar
> d-lnl: NOTRUN -> SKIP (Intel XE#656 / Intel XE#7905) +16 other tests
> skip
> * igt@kms_frontbuffer_tracking@drrs-argb161616f-draw-render:shard-
> bmg: NOTRUN -> SKIP (Intel XE#7061 / Intel XE#7356) +1 other test
> skip
> * igt@kms_frontbuffer_tracking@drrs-rgb101010-draw-mmap-wc:shard-
> ptl: NOTRUN -> SKIP (Intel XE#5800 / Intel XE#6312) +3 other tests
> skip
> *
> igt@kms_frontbuffer_tracking@drrshdr-2p-primscrn-cur-indfb-draw-render
> :shard-bmg: NOTRUN -> SKIP (Intel XE#2311) +44 other tests skip
> * igt@kms_frontbuffer_tracking@drrshdr-shrfb-scaledprimary:shard-
> lnl: NOTRUN -> SKIP (Intel XE#6312) +6 other tests skip
> *
> igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-render:sh
> ard-bmg: NOTRUN -> SKIP (Intel XE#4141) +15 other tests skip
> *
> igt@kms_frontbuffer_tracking@fbcdrrs-abgr161616f-draw-render:shard-
> lnl: NOTRUN -> SKIP (Intel XE#7061 / Intel XE#7356)
> *
> igt@kms_frontbuffer_tracking@fbcdrrshdr-1p-primscrn-indfb-plflip-blt:
> shard-ptl: NOTRUN -> SKIP (Intel XE#6312) +3 other tests skip
> *
> igt@kms_frontbuffer_tracking@fbchdr-2p-primscrn-shrfb-msflip-blt:shar
> d-lnl: NOTRUN -> SKIP (Intel XE#7905) +19 other tests skip
> * igt@kms_frontbuffer_tracking@fbchdr-abgr161616f-draw-render:shard-
> bmg: NOTRUN -> SKIP (Intel XE#7061) +4 other tests skip
> * igt@kms_frontbuffer_tracking@fbcpsrhdr-abgr161616f-draw-blt:shard-
> lnl: NOTRUN -> SKIP (Intel XE#7061)
> * igt@kms_frontbuffer_tracking@fbcpsrhdr-slowdraw:shard-ptl: NOTRUN
> -> SKIP (Intel XE#7865) +12 other tests skip
> *
> igt@kms_frontbuffer_tracking@hdr-1p-primscrn-indfb-msflip-blt:shard-
> lnl: NOTRUN -> SKIP (Intel XE#7865) +7 other tests skip
> *
> igt@kms_frontbuffer_tracking@hdr-2p-primscrn-cur-indfb-draw-mmap-wc:s
> hard-ptl: NOTRUN -> SKIP (Intel XE#5812) +30 other tests skip
> * igt@kms_frontbuffer_tracking@psr-argb161616f-draw-render:shard-
> ptl: NOTRUN -> SKIP (Intel XE#7061 / Intel XE#7356)
> * igt@kms_frontbuffer_tracking@psrhdr-argb161616f-draw-render:shard-
> ptl: NOTRUN -> SKIP (Intel XE#7061) +1 other test skip
> * igt@kms_frontbuffer_tracking@psrhdr-rgb565-draw-render:shard-bmg:
> NOTRUN -> SKIP (Intel XE#2313) +49 other tests skip
> * igt@kms_hdmi_audio_bw@audio-bw-hblank80:shard-bmg: NOTRUN -> FAIL
> (Intel XE#9313)
> * igt@kms_joiner@basic-big-joiner:shard-bmg: NOTRUN -> SKIP (Intel
> XE#6901)
> * igt@kms_joiner@basic-force-ultra-joiner:shard-ptl: NOTRUN -> SKIP
> (Intel XE#6900)
> * igt@kms_joiner@basic-max-non-joiner:shard-bmg: NOTRUN -> SKIP
> (Intel XE#4298 / Intel XE#5873)
> * igt@kms_pipe_stress@stress-xrgb8888-xtiled:shard-ptl: NOTRUN ->
> SKIP (Intel XE#6912) +1 other test skip
> * igt@kms_pipe_stress@stress-xrgb8888-ytiled:shard-bmg: NOTRUN ->
> SKIP (Intel XE#4329 / Intel XE#6912 / Intel XE#7375)
> *
> igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier-source-clamping
> :shard-lnl: NOTRUN -> SKIP (Intel XE#7283)
> * igt@kms_plane@pixel-format-4-tiled-modifier@pipe-a-plane-5:shard-
> bmg: NOTRUN -> SKIP (Intel XE#8303) +1 other test skip
> * igt@kms_plane@pixel-format-x-tiled-modifier@pipe-b-plane-5:shard-
> lnl: NOTRUN -> SKIP (Intel XE#8303) +1 other test skip
> *
> igt@kms_plane@pixel-format-y-tiled-gen12-rc-ccs-cc-modifier-source-clamping
> :shard-ptl: NOTRUN -> SKIP (Intel XE#7283) +1 other test skip
> * igt@kms_plane@pixel-format-yf-tiled-modifier:shard-bmg: NOTRUN ->
> SKIP (Intel XE#7283) +3 other tests skip
> * igt@kms_plane@plane-panning-bottom-right-suspend:shard-ptl: PASS -
> > ABORT (Intel XE#9363) +1 other test abort
> * igt@kms_plane_multiple@2x-tiling-y:shard-ptl: NOTRUN -> SKIP
> (Intel XE#4596 / Intel XE#5854)
> * igt@kms_plane_multiple@2x-tiling-yf:shard-bmg: NOTRUN -> SKIP
> (Intel XE#5021 / Intel XE#7377)
> * igt@kms_plane_scaling@planes-downscale-factor-0-75@pipe-a:shard-
> bmg: NOTRUN -> SKIP (Intel XE#2763 / Intel XE#6886) +4 other tests
> skip
> * igt@kms_pm_backlight@fade-with-dpms:shard-bmg: NOTRUN -> SKIP
> (Intel XE#7376 / Intel XE#7760 / Intel XE#870) +1 other test skip
> * igt@kms_pm_dc@dc3co-after-dc6@pr-xrgb8888:shard-lnl: NOTRUN ->
> SKIP (Intel XE#8395 / Intel XE#8396) +1 other test skip
> * igt@kms_pm_dc@dc3co-after-dc6@psr2-yuv420:shard-lnl: NOTRUN ->
> SKIP (Intel XE#8396) +1 other test skip
> * igt@kms_pm_dc@dc5-psr:shard-bmg: NOTRUN -> SKIP (Intel XE#7794)
> * igt@kms_pm_rpm@dpms-lpsp:shard-bmg: NOTRUN -> SKIP (Intel XE#1439
> / Intel XE#3141 / Intel XE#7383 / Intel XE#836)
> * igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:shard-lnl: NOTRUN -> SKIP
> (Intel XE#1439 / Intel XE#7402 / Intel XE#836)
> * igt@kms_pm_rpm@package-g7:shard-lnl: NOTRUN -> SKIP (Intel
> XE#6813)
> *
> igt@kms_psr2_sf@fbc-pr-cursor-plane-move-continuous-exceed-sf:shard-
> ptl: NOTRUN -> SKIP (Intel XE#7304) +1 other test skip
> * igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-sf:shard-
> bmg: NOTRUN -> SKIP (Intel XE#1489) +6 other tests skip
> * igt@kms_psr2_sf@pr-overlay-plane-move-continuous-sf:shard-lnl:
> NOTRUN -> SKIP (Intel XE#2893 / Intel XE#7304) +1 other test skip
> * igt@kms_psr2_su@page_flip-xrgb8888:shard-ptl: NOTRUN -> SKIP
> (Intel XE#7413)
> * igt@kms_psr@fbc-psr2-basic:shard-bmg: NOTRUN -> SKIP (Intel
> XE#2234 / Intel XE#2850) +7 other tests skip
> * igt@kms_psr@fbc-psr2-primary-render:shard-lnl: NOTRUN -> SKIP
> (Intel XE#1406 / Intel XE#7345)
> * igt@kms_psr@fbc-psr2-primary-render@edp-1:shard-lnl: NOTRUN ->
> SKIP (Intel XE#1406 / Intel XE#4609 / Intel XE#7345)
> * igt@kms_psr@fbc-psr2-sprite-plane-onoff@edp-1:shard-ptl: NOTRUN ->
> SKIP (Intel XE#1406 / Intel XE#5835) +1 other test skip
> * igt@kms_psr@pr-dpms:shard-lnl: NOTRUN -> SKIP (Intel XE#1406) +1
> other test skip
> * igt@kms_psr@pr-sprite-render:shard-ptl: NOTRUN -> SKIP (Intel
> XE#1406)
> * igt@kms_rotation_crc@primary-rotation-90:shard-bmg: NOTRUN -> SKIP
> (Intel XE#3904 / Intel XE#7342) +1 other test skip
> * igt@kms_rotation_crc@sprite-rotation-90-pos-100-0:shard-ptl:
> NOTRUN -> SKIP (Intel XE#5821)
> * igt@kms_sharpness_filter@filter-basic:shard-bmg: NOTRUN -> SKIP
> (Intel XE#6503) +2 other tests skip
> * igt@kms_tv_load_detect@load-detect:shard-bmg: NOTRUN -> SKIP
> (Intel XE#2450 / Intel XE#5857)
> * igt@kms_vblank@ts-continuation-dpms-suspend:shard-bmg: PASS ->
> DMESG-WARN (Intel XE#9365 / Intel XE#9465)
> * igt@kms_vblank@ts-continuation-dpms-suspend@pipe-a-dp-2:shard-bmg:
> PASS -> DMESG-WARN (Intel XE#9365)
> * igt@kms_vrr@cmrr-desktop-mode:shard-ptl: NOTRUN -> SKIP (Intel
> XE#9277)
> * igt@kms_vrr@cmrr-desktop-mode@pipe-a-edp-1:shard-ptl: NOTRUN ->
> SKIP (Intel XE#9277 / Intel XE#9278)
> * igt@kms_vrr@flip-suspend:shard-bmg: NOTRUN -> SKIP (Intel XE#1499
> / Intel XE#9271) +1 other test skip
> * igt@kms_vrr@seamless-rr-switch-drrs:shard-ptl: NOTRUN -> SKIP
> (Intel XE#5948 / Intel XE#9277)
> * igt@sriov_basic@pf-unbind-with-vf-probed:shard-ptl: NOTRUN ->
> ABORT (Intel XE#8868)
> * igt@xe_compute@ccs-mode-basic:shard-bmg: NOTRUN -> SKIP (Intel
> XE#6599)
> * igt@xe_compute_preempt@compute-preempt-many-vram:shard-lnl: NOTRUN
> -> SKIP (Intel XE#5191 / Intel XE#7316 / Intel XE#7346)
> * igt@xe_evict@evict-beng-cm-threads-small-multi-vm:shard-lnl:
> NOTRUN -> SKIP (Intel XE#6540 / Intel XE#688) +5 other tests skip
> * igt@xe_evict@evict-beng-mixed-many-threads-small:shard-bmg: PASS -
> > INCOMPLETE (Intel XE#6321 / Intel XE#8355)
> * igt@xe_evict@evict-beng-mixed-threads-small-multi-vm:shard-ptl:
> NOTRUN -> SKIP (Intel XE#5764) +1 other test skip
> * igt@xe_evict@evict-small-external-multi-queue-cm:shard-bmg: NOTRUN
> -> SKIP (Intel XE#8370)
> * igt@xe_evict_ccs@evict-overcommit-standalone-nofree-reopen:shard-
> ptl: NOTRUN -> SKIP (Intel XE#6144)
> * igt@xe_exec_balancer@many-parallel-userptr-invalidate-race:shard-
> lnl: NOTRUN -> SKIP (Intel XE#7482) +9 other tests skip
> * igt@xe_exec_balancer@twice-cm-virtual-userptr-rebind:shard-ptl:
> NOTRUN -> SKIP (Intel XE#7482) +4 other tests skip
> *
> igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr
> :shard-bmg: NOTRUN -> SKIP (Intel XE#2322 / Intel XE#7372) +4 other
> tests skipshard-ptl: NOTRUN -> SKIP (Intel XE#5575 / Intel XE#7484)
> *
> igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-rebind
> :shard-lnl: NOTRUN -> SKIP (Intel XE#1392) +4 other tests skip
> * igt@xe_exec_fault_mode@many-multi-queue-rebind-imm:shard-ptl:
> NOTRUN -> SKIP (Intel XE#8374) +3 other tests skip
> * igt@xe_exec_fault_mode@many-multi-queue-userptr-invalidate:shard-
> bmg: NOTRUN -> SKIP (Intel XE#8374) +7 other tests skip
> * igt@xe_exec_fault_mode@once-multi-queue-userptr-rebind:shard-lnl:
> NOTRUN -> SKIP (Intel XE#8374) +5 other tests skip
> *
> igt@xe_exec_multi_queue@many-execs-preempt-mode-fault-dyn-priority:sh
> ard-lnl: NOTRUN -> SKIP (Intel XE#8364) +12 other tests skip
> *
> igt@xe_exec_multi_queue@max-queues-preempt-mode-fault-dyn-priority-smem
> :shard-ptl: NOTRUN -> SKIP (Intel XE#8364) +10 other tests skip
> * igt@xe_exec_multi_queue@two-queues-preempt-mode-basic-smem:shard-
> bmg: NOTRUN -> SKIP (Intel XE#8364) +25 other tests skip
> * igt@xe_exec_reset@cm-multi-queue-close-fd:shard-lnl: NOTRUN ->
> SKIP (Intel XE#8369) +1 other test skip
> * igt@xe_exec_reset@multi-queue-cat-error:shard-bmg: NOTRUN -> SKIP
> (Intel XE#8369) +1 other test skipshard-ptl: NOTRUN -> SKIP (Intel
> XE#8369)
> * igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr:shard-bmg:
> NOTRUN -> SKIP (Intel XE#8378) +8 other tests skip
> *
> igt@xe_exec_threads@threads-multi-queue-userptr-invalidate-race:shard
> -lnl: NOTRUN -> SKIP (Intel XE#8378) +4 other tests skip
> * igt@xe_exec_threads@threads-multi-queue-userptr-rebind:shard-ptl:
> NOTRUN -> SKIP (Intel XE#8378) +3 other tests skip
> * igt@xe_mempage_offline@inject-single-page:shard-bmg: NOTRUN ->
> SKIP (Intel XE#9203)
> * igt@xe_multigpu_svm@mgpu-coherency-conflict:shard-bmg: NOTRUN ->
> SKIP (Intel XE#6964) +1 other test skip
> * igt@xe_multigpu_svm@mgpu-pagefault-conflict:shard-ptl: NOTRUN ->
> SKIP (Intel XE#6964) +1 other test skip
> * igt@xe_page_reclaim@basic-mixed:shard-bmg: NOTRUN -> SKIP (Intel
> XE#7793)
> * igt@xe_pat@xa-app-transient-media-off:shard-bmg: NOTRUN -> SKIP
> (Intel XE#7590)
> * igt@xe_pm@d3cold-i2c:shard-ptl: NOTRUN -> SKIP (Intel XE#5741)
> * igt@xe_pm@d3cold-mmap-vram:shard-bmg: NOTRUN -> SKIP (Intel
> XE#2284 / Intel XE#7370)
> * igt@xe_pm@d3hot-mmap-vram:shard-ptl: NOTRUN -> SKIP (Intel
> XE#5834)
> * igt@xe_pm@s4-exec-after:shard-lnl: NOTRUN -> ABORT (Intel XE#9362)
> * igt@xe_pm@s4-vm-bind-userptr:shard-ptl: PASS -> ABORT (Intel
> XE#9362)shard-lnl: PASS -> ABORT (Intel XE#9362) +1 other test abort
> * igt@xe_pm@vram-d3cold-threshold-show:shard-bmg: NOTRUN -> SKIP
> (Intel XE#9487) +1 other test skipshard-ptl: NOTRUN -> SKIP (Intel
> XE#9487)
> * igt@xe_pmu@all-fn-engine-activity-load@engine-
> drm_xe_engine_class_compute0:shard-bmg: PASS -> FAIL (Intel XE#9395)
> +2 other tests fail
> * igt@xe_prefetch_fault@prefetch-fault-svm:shard-lnl: NOTRUN -> SKIP
> (Intel XE#7599)
> * igt@xe_pxp@pxp-stale-queue-post-termination-irq:shard-bmg: NOTRUN
> -> SKIP (Intel XE#4733 / Intel XE#7417) +1 other test skip
> * igt@xe_query@multigpu-query-invalid-size:shard-ptl: NOTRUN -> SKIP
> (Intel XE#6019)shard-bmg: NOTRUN -> SKIP (Intel XE#944)
> * igt@xe_survivability@runtime-survivability:shard-lnl: NOTRUN ->
> SKIP (Intel XE#8415)
> * igt@xe_sync_file@sync_file_race:shard-lnl: NOTRUN -> FAIL (Intel
> XE#9457)
> * igt@xe_vm@out-of-memory:shard-ptl: NOTRUN -> SKIP (Intel XE#5745 /
> Intel XE#7892)
> * igt@xe_vm@overcommit-nonfault-vram-no-lr:shard-lnl: NOTRUN -> SKIP
> (Intel XE#7892)
> Possible fixes *
> igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs:shard-bmg: INCOMPLETE
> (Intel XE#7084 / Intel XE#8150) -> PASS +1 other test pass
> * igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-b-hdmi-a-
> 3:shard-bmg: DMESG-WARN (Intel XE#9365) -> PASS
> * igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1:shard-
> lnl: FAIL (Intel XE#301 / Intel XE#3149) -> PASS
> * igt@kms_flip@flip-vs-expired-vblank-interruptible@d-hdmi-a3:shard-
> bmg: FAIL (Intel XE#3149 / Intel XE#3321) -> PASS
> * igt@kms_pm_dc@deep-pkgc:shard-lnl: FAIL (Intel XE#2029 / Intel
> XE#7395) -> PASS
> * igt@kms_vblank@ts-continuation-suspend:shard-ptl: ABORT (Intel
> XE#9375) -> PASS +1 other test pass
> * igt@kms_vrr@flipline:shard-lnl: FAIL (Intel XE#4227 / Intel
> XE#7397) -> PASS +1 other test pass
> * igt@xe_ccs@suspend-resume:shard-bmg: ABORT (Intel XE#9362) -> PASS
> +1 other test pass
> * igt@xe_ccs@suspend-resume@tile64-compressed-compfmt0-system-
> system:shard-ptl: ABORT (Intel XE#9362) -> PASS +4 other tests pass
> *
> igt@xe_fault_injection@inject-fault-probe-function-xe_guc_log_init:sh
> ard-bmg: ABORT (Intel XE#9463) -> PASS +1 other test pass
> Warnings * igt@kms_flip@flip-vs-expired-vblank-interruptible:shard-
> bmg: FAIL (Intel XE#3149 / Intel XE#3321) -> FAIL (Intel
> XE#3321)shard-lnl: FAIL (Intel XE#301 / Intel XE#3149) -> FAIL (Intel
> XE#301)
> * igt@kms_hdr@brightness-with-hdr:shard-bmg: SKIP (Intel XE#3374 /
> Intel XE#3544) -> SKIP (Intel XE#3544)
> * igt@kms_tiled_display@basic-test-pattern-with-chamelium:shard-bmg:
> SKIP (Intel XE#2509 / Intel XE#7437) -> SKIP (Intel XE#2426 / Intel
> XE#5848)
> * igt@xe_pat@pat-sw-hw-suspend:shard-ptl: FAIL (Intel XE#7695) ->
> ABORT (Intel XE#9362)
> * igt@xe_wedged@wedged-at-any-timeout:shard-bmg: ABORT (Intel
> XE#8963 / Intel XE#9463) -> DMESG-WARN (Intel XE#8963)
> Build changes * Linux: xe-5891-
> 5d226b433e3f4d7b1fee2cec0030813806f5510f -> xe-pw-165879v10
> IGT_9130: 9130
> xe-5891-5d226b433e3f4d7b1fee2cec0030813806f5510f:
> 5d226b433e3f4d7b1fee2cec0030813806f5510f
> xe-pw-165879v10: 165879v10
^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2026-10-07 19:13 UTC | newest]
Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-05 22:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
2026-10-05 22:06 ` [PATCH 01/15] drm/xe: Guard configfs attribute reads in getters Stuart Summers
2026-10-05 22:06 ` [PATCH 02/15] drm/xe/configfs: Fix out-of-bounds read in parse_wa_bb_lines() Stuart Summers
2026-10-05 22:06 ` [PATCH 03/15] drm/xe/configfs: Copy wa_bb out under the configfs lock Stuart Summers
2026-10-05 22:06 ` [PATCH 04/15] drm/xe: Invert vram_page_offline configfs attribute Stuart Summers
2026-10-05 22:06 ` [PATCH 05/15] drm/xe: Make survivability_mode configfs attribute a bitmap Stuart Summers
2026-10-05 22:06 ` [PATCH 06/15] drm/xe: Sort xe_config_device fields Stuart Summers
2026-10-05 22:06 ` [PATCH 07/15] drm/xe: Split out configfs data structures Stuart Summers
2026-10-05 22:06 ` [PATCH 08/15] drm/xe: Add a new debug focused configfs group Stuart Summers
2026-10-05 22:06 ` [PATCH 09/15] drm/xe: Move debug configfs entries to xe_configfs_debug.c Stuart Summers
2026-10-05 22:06 ` [PATCH 10/15] drm/xe/guc: Add configfs support for guc_log_level Stuart Summers
2026-10-05 22:06 ` [PATCH 11/15] drm/xe/guc: Add support for NPK as a GuC log target Stuart Summers
2026-10-05 22:06 ` [PATCH 12/15] drm/xe: Add infrastructure for debug configfs parameters Stuart Summers
2026-10-05 22:06 ` [PATCH 13/15] drm/xe: Migrate existing debug configfs entries to params infrastructure Stuart Summers
2026-10-05 22:06 ` [PATCH 14/15] drm/xe: Taint kernel when debug configfs parameters are set Stuart Summers
2026-10-05 22:06 ` [PATCH 15/15] drm/xe: Add enable_media module parameter Stuart Summers
2026-10-05 22:13 ` ✗ CI.checkpatch: warning for Add new debug infrastructure for configfs (rev10) Patchwork
2026-10-05 22:15 ` ✓ CI.KUnit: success " Patchwork
2026-10-05 23:17 ` ✓ Xe.CI.BAT: " Patchwork
2026-10-06 6:22 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-10-07 19:13 ` Summers, Stuart
-- strict thread matches above, loose matches on Subject: below --
2026-10-05 19:06 [PATCH 00/15] Add new debug infrastructure for configfs Stuart Summers
2026-10-05 19:06 ` [PATCH 02/15] drm/xe/configfs: Fix out-of-bounds read in parse_wa_bb_lines() Stuart Summers
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox