* [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure
@ 2026-08-12 19:14 Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 01/32] drm/xe: Introduce xe_any helpers Michal Wajdeczko
` (35 more replies)
0 siblings, 36 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Mallesh Koujalagi, Rodrigo Vivi,
Thomas Hellström, Matthew Brost, Aravind Iddamsetty,
Riana Tauro, Raag Jadav, Badal Nilawar
Today the driver reports faults with ad-hoc drm_err()/xe_gt_err()
strings that have no stable shape. That is readable for a human, but it
gives fleet tooling nothing durable to match on: the wording changes
between releases, lines can be rate-limited or dropped under an error
storm, and there is no consistent way to ask "which recognised fault
just happened?".
Introduce a signature identifier (SIGID): a small, stable integer that
names one recognised Xe fault situation and serves as the primary handle
for triage. A SIGID maps, through published end-user documentation, to a
description and a recommended action; the driver only has to emit the
right SIGID next to the usual human-readable text.
Design decisions:
- Software-emitted signatures only. This header enumerates just the
situations the driver detects and reports itself. Signatures that
originate in firmware or hardware are identified by those layers (via
their own records/counters) and are logged as received -- minting a
driver-side id for them would duplicate an id the reporting layer
already owns.
- Flat catalogue, chosen per report site. Each site emits the single
most specific situation for that site, so a multi-layer failure
produces a chain of reports rather than one ambiguous classification
(e.g. a failed GT reset reports GT_TDR and then WEDGED). A site that
matches no defined situation keeps using ordinary xe_err() /
xe_gt_err() rather than forcing a wrong id.
- Stable numbering. A single flat list numbered sequentially from 1, in
introduction order. Values are only ever appended, never renumbered
or reused.
- Severity is decoupled from the SIGID and chosen at the call site via
xe_ras_log_fatal() / _recoverable() / _info(); the same situation can
be reported at different severities depending on the instance.
- dmesg stays close to a normal xe error line by reusing xe_err() /
xe_gt_err() (and their Tile/GT decoration); the only stable,
machine-matchable token added is SIGID=<n>. dmesg is not an ABI --
the durable machine record is the CPER carrying the same SIGID (a
planned follow-up, left as a TODO).
Wire up a representative site for each software signature so the set is
exercised rather than merely declared.
Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Riana Tauro <riana.tauro@intel.com>
Cc: Raag Jadav <raag.jadav@intel.com>
Cc: Badal Nilawar <badal.nilawar@intel.com>
v1: https://patchwork.freedesktop.org/series/171022/#rev1
v2: https://patchwork.freedesktop.org/series/171022/#rev2
component/location dmesg decorations moved away from macros
HW component identifiers related to RAS/FW enum values
CORRECTED severity rendered as an error
more support for const pointers
log 'probe blocked' as INFO
fix kunit device setup
more tests
v3: https://patchwork.freedesktop.org/series/171022/#rev3
fix typos, args list and to_dev() corner case (Sashiko)
use assoc macros in xe_any (Jani)
add xe_any kunit test suite (Michal)
add more xe_log test cases (Michal)
v4: more patches with SIGID usage (Michal)
support for printk index (Jani)
more macros and other fixes (Mallesh)
no recovery buckets (all)
Mallesh Koujalagi (1):
drm/xe/log: Add structured SIGID error logging infrastructure
Michal Wajdeczko (31):
drm/xe: Introduce xe_any helpers
drm/xe/log: Introduce structured component/location identifiers
drm/xe/log: Add component/location decorations to dmesg
drm/xe/log: Add SIGID log helpers for severity
drm/xe/log: Add SIGID log helpers for location
drm/xe/log: Add SIGID log helpers for location & severity
drm/xe/log: Add SIGID log helpers for components
drm/xe/log: Add SIGID log helpers for component & severity
drm/xe/log: Add SIGID log helpers for errno-only
drm/xe/log: Index all SIGID printk messages
drm/xe/log: Add hardware error signatures
drm/xe/log: Extend components list with hardware items
drm/xe/ras: Check RAS and LOG component definitions
drm/xe/kunit: Setup driver data in the test device
drm/xe/tests: Add Kunit tests for xe_log
drm/xe/tests: Add kunit tests for xe_any
drm/xe: Report 'probe blocked' error using SIGID
drm/xe: Report all probe errors using SIGID
drm/xe/survivability: Report 'boot status' using SIGID
drm/xe/survivability: Report 'sysfs failure' error using SIGID
drm/xe/survivability: Report 'Boot Mode enabled' status using SIGID
drm/xe/survivability: Report 'Runtime Mode enabled' status using SIGID
drm/xe: Report 'device wedged' errors using SIGID
drm/xe/pcode: Report 'Mailbox failed' error using SIGID
drm/xe/pcode: Report 'timeout, retrying' error using SIGID
drm/xe/pcode: Report 'initialization timedout' error using SIGID
drm/xe/guc: Report 'GuC mmio' errors using SIGID
drm/xe/gt: Report 'reset failed' errors using SIGID
drm/xe/gt: Report 'Fault response' pagefault error using SIGID
drm/xe/gt: Report 'Queue full' pagefault error using SIGID
drm/xe/pci: Report 'cannot re-enable' error using SIGID
Documentation/gpu/xe/index.rst | 1 +
Documentation/gpu/xe/xe_sigid.rst | 14 +
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/abi/xe_log_abi.h | 199 +++++++
drivers/gpu/drm/xe/abi/xe_sigid_abi.h | 172 +++++++
drivers/gpu/drm/xe/tests/Makefile | 1 +
drivers/gpu/drm/xe/tests/xe_any_kunit.c | 213 ++++++++
drivers/gpu/drm/xe/tests/xe_kunit_helpers.c | 4 +
drivers/gpu/drm/xe/tests/xe_log_kunit.c | 543 ++++++++++++++++++++
drivers/gpu/drm/xe/xe_any.h | 137 +++++
drivers/gpu/drm/xe/xe_device.c | 16 +-
drivers/gpu/drm/xe/xe_gt.c | 7 +-
drivers/gpu/drm/xe/xe_guc.c | 18 +-
drivers/gpu/drm/xe/xe_log.c | 235 +++++++++
drivers/gpu/drm/xe/xe_log.h | 178 +++++++
drivers/gpu/drm/xe/xe_pagefault.c | 8 +-
drivers/gpu/drm/xe/xe_pci.c | 32 +-
drivers/gpu/drm/xe/xe_pci_error.c | 7 +-
drivers/gpu/drm/xe/xe_pcode.c | 14 +-
drivers/gpu/drm/xe/xe_ras.c | 11 +
drivers/gpu/drm/xe/xe_survivability_mode.c | 84 +--
21 files changed, 1821 insertions(+), 74 deletions(-)
create mode 100644 Documentation/gpu/xe/xe_sigid.rst
create mode 100644 drivers/gpu/drm/xe/abi/xe_log_abi.h
create mode 100644 drivers/gpu/drm/xe/abi/xe_sigid_abi.h
create mode 100644 drivers/gpu/drm/xe/tests/xe_any_kunit.c
create mode 100644 drivers/gpu/drm/xe/tests/xe_log_kunit.c
create mode 100644 drivers/gpu/drm/xe/xe_any.h
create mode 100644 drivers/gpu/drm/xe/xe_log.c
create mode 100644 drivers/gpu/drm/xe/xe_log.h
--
2.47.1
^ permalink raw reply [flat|nested] 73+ messages in thread
* [PATCH v4 01/32] drm/xe: Introduce xe_any helpers
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:29 ` sashiko-bot
2026-08-13 16:51 ` Rodrigo Vivi
2026-08-12 19:14 ` [PATCH v4 02/32] drm/xe/log: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (34 subsequent siblings)
35 siblings, 2 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Thomas Hellström,
Matthew Brost, Mallesh Koujalagi, Jani Nikula
In upcoming patches we want to define macros that will work with
either xe_device or xe_tile or xe_gt pointers. To make them work
and to allow compiler optimizations, introduce set of helpers
that will return either expected pointer type or NULL or make
necessary conversions to/from the struct xe/device/pci_dev.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> #v2
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> #v2
Cc: Jani Nikula <jani.nikula@intel.com>
---
v2: add include (Sashiko) and const support (Mallesh)
reuse existing to_xe() helpers (Michal)
v3: fix another typo and fix to_pdev (Sashiko)
use assoc macros/helpers (Jani)
add support for drm_device (Michal)
---
drivers/gpu/drm/xe/xe_any.h | 137 ++++++++++++++++++++++++++++++++++++
1 file changed, 137 insertions(+)
create mode 100644 drivers/gpu/drm/xe/xe_any.h
diff --git a/drivers/gpu/drm/xe/xe_any.h b/drivers/gpu/drm/xe/xe_any.h
new file mode 100644
index 000000000000..5d97afa76915
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_any.h
@@ -0,0 +1,137 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#ifndef _XE_ANY_H_
+#define _XE_ANY_H_
+
+#include "xe_device.h"
+
+#define __xe_any_to_self_assoc(type, any) \
+ const type * : (any), \
+ type * : (any)
+
+/**
+ * xe_any_if_type() - Get the pointer only if it is @type pointer.
+ * @any: any pointer
+ * @type: data type to look for
+ *
+ * Return: the @type pointer or NULL.
+ */
+#define xe_any_if_type(any, type) \
+ _Generic((any), \
+ __xe_any_to_self_assoc(type, (any)), \
+ default : NULL)
+
+/**
+ * xe_any_if_gt() - Get the pointer only if it is &xe_gt.
+ * @any: any pointer
+ *
+ * Return: the @xe_gt pointer or NULL.
+ */
+#define xe_any_if_gt(any) xe_any_if_type((any), struct xe_gt)
+
+/**
+ * xe_any_if_tile() - Get the pointer only if it is &xe_tile.
+ * @any: any pointer
+ *
+ * Return: the @xe_tile pointer or NULL.
+ */
+#define xe_any_if_tile(any) xe_any_if_type((any), struct xe_tile)
+
+/**
+ * xe_any_if_xe() - Get the pointer only if it is &xe_device.
+ * @any: any pointer
+ *
+ * Return: the @xe_device pointer or NULL.
+ */
+#define xe_any_if_xe(any) xe_any_if_type((any), struct xe_device)
+
+/**
+ * xe_any_if_pdev() - Get the pointer only if it is &pci_dev.
+ * @any: any pointer
+ *
+ * Return: the @pci_dev pointer or NULL.
+ */
+#define xe_any_if_pdev(any) xe_any_if_type((any), struct pci_dev)
+
+#define __xe_any_to_other_assoc(const, from, other, p) \
+ const struct from * : __##from##_to_##other((const struct from *)(p))
+
+#define __xe_tile_to_xe_device(p) tile_to_xe(p)
+#define __xe_gt_to_xe_device(p) gt_to_xe(p)
+#define __pci_dev_to_xe_device(p) pdev_to_xe_device(p)
+#define __device_to_xe_device(p) kdev_to_xe_device(p)
+#define __drm_device_to_xe_device(p) to_xe_device(p)
+#define __pci_dev_to_device(p) (&(p)->dev)
+
+/**
+ * xe_any_to_xe() - Obtain the &xe_device pointer.
+ * @any: the &pci_dev or the &xe_device or &xe_tile or &xe_gt pointer
+ *
+ * Return: the @xe_device pointer or backpointer.
+ */
+#define xe_any_to_xe(any) \
+ _Generic((any), \
+ __xe_any_to_self_assoc(struct xe_device, (any)), \
+ __xe_any_to_other_assoc(/* */, xe_tile, xe_device, (any)), \
+ __xe_any_to_other_assoc(const, xe_tile, xe_device, (any)), \
+ __xe_any_to_other_assoc(/* */, xe_gt, xe_device, (any)), \
+ __xe_any_to_other_assoc(const, xe_gt, xe_device, (any)), \
+ __xe_any_to_other_assoc(, drm_device, xe_device, (any)), \
+ __xe_any_to_other_assoc(, pci_dev, xe_device, (any)), \
+ __xe_any_to_other_assoc(, device, xe_device, (any)))
+
+/**
+ * xe_any_to_drm() - Obtain the &drm_device pointer.
+ * @any: the &pci_dev or the &xe_device or &xe_tile or &xe_gt pointer
+ *
+ * Return: the @drm_device pointer or backpointer.
+ */
+#define xe_any_to_drm(any) \
+ _Generic((any), \
+ __xe_any_to_self_assoc(struct drm_device, (any)), \
+ default : &xe_any_to_xe(any)->drm)
+
+/**
+ * xe_any_to_dev() - Obtain the &device pointer.
+ * @any: the &pci_dev or the &xe_device or &xe_tile or &xe_gt pointer
+ *
+ * Return: the @device pointer or backpointer.
+ */
+#define xe_any_to_dev(any) \
+ _Generic((any), \
+ __xe_any_to_self_assoc(struct device, (any)), \
+ __xe_any_to_other_assoc(, pci_dev, device, (any)), \
+ default : xe_any_to_drm(any)->dev)
+
+/**
+ * xe_any_to_pdev() - Obtain the &pci_dev pointer.
+ * @any: the &pci_dev or the &xe_device or &xe_tile or &xe_gt pointer
+ *
+ * Return: the @pci_dev pointer or backpointer.
+ */
+#define xe_any_to_pdev(any) \
+ _Generic((any), \
+ __xe_any_to_self_assoc(struct pci_dev, (any)), \
+ default : to_pci_dev(xe_any_to_dev(any)))
+
+#define __xe_tile_to_id(p) ((p)->id)
+#define __xe_gt_to_id(p) ((p)->info.id)
+
+/**
+ * xe_any_id() - Get the identifier of the underlying object.
+ * @any: the &pci_dev or the &xe_device or &xe_tile or &xe_gt pointer
+ *
+ * Return: the identifier of the object, or 0 if not applicable/available.
+ */
+#define xe_any_id(any) \
+ _Generic((any), \
+ __xe_any_to_other_assoc(/* */, xe_tile, id, (any)), \
+ __xe_any_to_other_assoc(const, xe_tile, id, (any)), \
+ __xe_any_to_other_assoc(/* */, xe_gt, id, (any)), \
+ __xe_any_to_other_assoc(const, xe_gt, id, (any)), \
+ default : 0)
+
+#endif
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 02/32] drm/xe/log: Add structured SIGID error logging infrastructure
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 01/32] drm/xe: Introduce xe_any helpers Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-13 13:33 ` Mallesh, Koujalagi
2026-08-13 13:42 ` Nilawar, Badal
2026-08-12 19:14 ` [PATCH v4 03/32] drm/xe/log: Introduce structured component/location identifiers Michal Wajdeczko
` (33 subsequent siblings)
35 siblings, 2 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Mallesh Koujalagi, Rodrigo Vivi, Michal Wajdeczko, Riana Tauro,
Stuart Summers, Yoni Levitt, Aravind Iddamsetty, Raag Jadav
From: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
Today the driver reports faults with ad-hoc drm_err()/xe_gt_err()
strings that have no stable shape. That is readable for a human, but it
gives fleet tooling nothing durable to match on: the wording changes
between releases, lines can be rate-limited or dropped under an error
storm, and there is no consistent way to ask "which recognised fault
just happened?".
Introduce a signature identifier (SIGID): a small, stable integer that
names one recognised Xe fault site and serves as the primary handle for
triage. A SIGID maps, through published end-user documentation, to a
description and a recommended action; the driver only has to emit the
right SIGID next to the usual human-readable text.
Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
Assisted-by: Copilot:Opus-4.8
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Co-developed-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Riana Tauro <riana.tauro@intel.com>
Cc: Stuart Summers <stuart.summers@intel.com>
---
Cc: Yoni Levitt <yoni.levitt@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Raag Jadav <raag.jadav@intel.com>
---
v2: CORRECTED is still an error (Michal)
prepare to decorate dmesg with comp/loc (Michal)
v3: update SIGID DOC section (Riana/Aravind)
warn about unknown severity (Mallesh)
---
Documentation/gpu/xe/index.rst | 1 +
Documentation/gpu/xe/xe_sigid.rst | 14 +++
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/abi/xe_sigid_abi.h | 159 ++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_log.c | 138 ++++++++++++++++++++++
drivers/gpu/drm/xe/xe_log.h | 20 ++++
6 files changed, 333 insertions(+)
create mode 100644 Documentation/gpu/xe/xe_sigid.rst
create mode 100644 drivers/gpu/drm/xe/abi/xe_sigid_abi.h
create mode 100644 drivers/gpu/drm/xe/xe_log.c
create mode 100644 drivers/gpu/drm/xe/xe_log.h
diff --git a/Documentation/gpu/xe/index.rst b/Documentation/gpu/xe/index.rst
index 665c0e93601c..0247a255f7e6 100644
--- a/Documentation/gpu/xe/index.rst
+++ b/Documentation/gpu/xe/index.rst
@@ -35,3 +35,4 @@ The display, or :ref:`drm-kms`, support for drm/xe is provided by
xe-drm-usage-stats.rst
xe_configfs
xe_gt_stats
+ xe_sigid
diff --git a/Documentation/gpu/xe/xe_sigid.rst b/Documentation/gpu/xe/xe_sigid.rst
new file mode 100644
index 000000000000..45d84a62f185
--- /dev/null
+++ b/Documentation/gpu/xe/xe_sigid.rst
@@ -0,0 +1,14 @@
+.. SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+
+========
+Xe SIGID
+========
+
+.. kernel-doc:: drivers/gpu/drm/xe/abi/xe_sigid_abi.h
+ :doc: Xe Error Signatures (SIGID)
+
+Signature Identifiers
+=====================
+
+.. kernel-doc:: drivers/gpu/drm/xe/abi/xe_sigid_abi.h
+ :internal:
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 44ed055439d4..92134709d998 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -87,6 +87,7 @@ xe-y += xe_bb.o \
xe_hw_fence.o \
xe_irq.o \
xe_late_bind_fw.o \
+ xe_log.o \
xe_lrc.o \
xe_mem_pool.o \
xe_migrate.o \
diff --git a/drivers/gpu/drm/xe/abi/xe_sigid_abi.h b/drivers/gpu/drm/xe/abi/xe_sigid_abi.h
new file mode 100644
index 000000000000..93967183ae51
--- /dev/null
+++ b/drivers/gpu/drm/xe/abi/xe_sigid_abi.h
@@ -0,0 +1,159 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#ifndef _ABI_XE_SIGID_ABI_H_
+#define _ABI_XE_SIGID_ABI_H_
+
+/**
+ * DOC: Xe Error Signatures (SIGID)
+ *
+ * What SIGID stands for
+ * ---------------------
+ *
+ * SIGID is short for *Signature Identifier*. It is a small, stable integer
+ * that names one of *recognised fault site* -- nothing more. It is the
+ * primary handle used for triage and maps directly to specific report site.
+ *
+ * Numbering
+ * ---------
+ *
+ * SIGIDs are a single flat list numbered sequentially within the assigned range,
+ * in the order the fault sites were introduced. Values are stable: once assigned
+ * they are only ever appended, never renumbered or reused. A retired fault site
+ * SIGID value is deprecated in place, never re-purposed.
+ *
+ * Why this exists
+ * ---------------
+ *
+ * Today the driver reports faults with ad-hoc ``xe_err()`` / ``xe_gt_err()``
+ * strings that have no stable shape. That is fine for a human reading dmesg,
+ * but it gives fleet tooling nothing durable to match on: the wording changes
+ * between releases, lines can be rate-limited or dropped under an error storm,
+ * and there is no consistent way to ask "which recognised fault just happened?"
+ *
+ * A SIGID answers exactly that one question, identically across driver and
+ * firmware versions, and (eventually) across other Intel devices in a node.
+ *
+ * What a SIGID is not
+ * -------------------
+ *
+ * SIGID deliberately does not encode the detailed reason or the outcome. Those
+ * are carried alongside it::
+ *
+ * SIGID -> which recognised fault site is being reported
+ * severity -> how serious this instance is
+ * errno -> the failing operation's error, if available, shown with %pe
+ * message -> free-form human-readable context
+ *
+ * Severity is independent of the SIGID. The same SIGID can be reported at
+ * different severities depending on the instance and the recovery taken.
+ *
+ * When to use SIGID logging
+ * -------------------------
+ *
+ * The xe_log_*() helpers are for these recognised fault sites only --
+ * important, operator-relevant faults and events. The driver's only job is to
+ * emit the right SIGID next to the usual human-readable text.
+
+ * They are not a replacement for ``xe_info()`` / ``xe_dbg()`` / tracing, nor
+ * for one-off diagnostics; using them for ordinary logging would dilute the
+ * fault stream. Not every ``xe_err()`` needs to become a SIGID report -- only
+ * those that correspond to a published fault sites.
+ *
+ * SIGID log output (dmesg vs. the machine record)
+ * -----------------------------------------------
+ *
+ * The dmesg line stays close to a normal xe error message so it remains
+ * readable for admins; the only stable, machine-matchable token on it is
+ * ``SIGID=<n>`` (``dmesg | grep SIGID=``).
+ *
+ * The full dmesg line is not an ABI: the surrounding text may change freely,
+ * and lines may be dropped. The durable record for tooling is the CPER record
+ * carrying the same SIGID (generation is a planned follow-up).
+ *
+ * How to pick a SIGID (the uniqueness rule)
+ * -----------------------------------------
+ *
+ * Pick per *report site*, not per incident. Each site emits the single most
+ * specific recognised SIGID *for that site* -- so the question is never
+ * "classify this whole failure", it is "what does this site detect?", which has
+ * one answer. A single underlying failure therefore legitimately produces a
+ * *chain* of reports from different layers, each with its own SIGID -- e.g. a
+ * GuC communication failure is reported as %XE_SIGID_RUNTIME_FW by the firmware
+ * path, the failed recovery as %XE_SIGID_GT_TDR by the reset path, and an
+ * aborted bind as %XE_SIGID_PROBE by the probe path. That chain lets triage
+ * follow a fault from origin to final effect; it is not a duplicate.
+ *
+ * If a site does not match any defined SIGID, keep using the ordinary
+ * ``xe_err()`` / ``xe_gt_err()`` logging rather than forcing a SIGID: a wrong
+ * or over-broad classification is harder to retire than a missing one. When a
+ * new report site is genuinely worth triaging, add it to the list below.
+ *
+ * Usage of the existing SIGID reports must reevaluated according to this section
+ * after making significant changes to the site that emits this SIGID.
+ *
+ * Scope: software vs hardware emitted signatures
+ * ----------------------------------------------
+ *
+ * Some SIGID represents fault sites that the *driver itself* detects and
+ * reports from the software POV: probe abort, wedged, survivability, driver-
+ * detected firmware failures, engine TDR, memory faults and IO/bus faults.
+ * These are the only values the driver assigns on its own.
+ *
+ * Signatures that *originate* in firmware or hardware are a different thing:
+ * they are produced and identified by the firmware or the hardware itself
+ * (e.g. via their own records or error counters), and the driver merely logs
+ * them as they are given to us. They are deliberately enumerated separately.
+ *
+ * The two driver-detected firmware report sites below (%XE_SIGID_RUNTIME_FW,
+ * %XE_SIGID_DEVICE_FW) are software signatures: they mark that *the driver*
+ * observed a firmware problem, not a signature reported by the firmware.
+ */
+
+/*
+ * Top level Intel Error Signature Identifiers.
+ */
+#define INTEL_SIGID_INVALID 0
+#define INTEL_SIGID_BATCH 100
+#define INTEL_SIGID_RANGE_START(n) ((n) * INTEL_SIGID_BATCH)
+#define INTEL_SIGID_RANGE_END(n) (INTEL_SIGID_RANGE_START((n) + 1) - 1)
+
+/* SIGIDs 1xx are reserved for Xe GPU software and 2xx for Xe GPU hardware */
+#define INTEL_SIGID_GPU_XE_SOFTWARE_START INTEL_SIGID_RANGE_START(1)
+#define INTEL_SIGID_GPU_XE_SOFTWARE_END INTEL_SIGID_RANGE_END(1)
+#define INTEL_SIGID_GPU_XE_HARDWARE_START INTEL_SIGID_RANGE_START(2)
+#define INTEL_SIGID_GPU_XE_HARDWARE_END INTEL_SIGID_RANGE_END(2)
+
+/**
+ * enum xe_sigid - Stable Xe Error Signature Identifiers (SIGID).
+ * @XE_SIGID_SW: Software component failure.
+ * @XE_SIGID_PROBE: Device probe/bind was aborted.
+ * @XE_SIGID_WEDGED: Device was declared wedged and is no longer usable.
+ * @XE_SIGID_SURVIVABILITY: Device entered survivability mode.
+ * @XE_SIGID_RUNTIME_FW: Driver-detected runtime firmware failure, GuC/HuC/GSC.
+ * @XE_SIGID_DEVICE_FW: Driver-detected device firmware failure, PCODE/sysctrl.
+ * @XE_SIGID_GT_TDR: Engine hang / timeout detection and recovery (reset).
+ * @XE_SIGID_MEM_FAULT: VM bind, page fault or GTT fault.
+ * @XE_SIGID_IO_BUS: Runtime PCIe / IOMMU / MMIO access fault.
+ *
+ * Each SIGID represents the report sites the driver detects and reports.
+ * Values are numbered sequentially, are only ever appended, and are never
+ * renumbered or reused.
+ *
+ * Firmware- and hardware-originated signatures are not listed yet here.
+ */
+enum xe_sigid {
+ XE_SIGID_SW = INTEL_SIGID_GPU_XE_SOFTWARE_START,
+ XE_SIGID_PROBE = INTEL_SIGID_GPU_XE_SOFTWARE_START + 1,
+ XE_SIGID_WEDGED = INTEL_SIGID_GPU_XE_SOFTWARE_START + 2,
+ XE_SIGID_SURVIVABILITY = INTEL_SIGID_GPU_XE_SOFTWARE_START + 3,
+ XE_SIGID_RUNTIME_FW = INTEL_SIGID_GPU_XE_SOFTWARE_START + 4,
+ XE_SIGID_DEVICE_FW = INTEL_SIGID_GPU_XE_SOFTWARE_START + 5,
+ XE_SIGID_GT_TDR = INTEL_SIGID_GPU_XE_SOFTWARE_START + 6,
+ XE_SIGID_MEM_FAULT = INTEL_SIGID_GPU_XE_SOFTWARE_START + 7,
+ XE_SIGID_IO_BUS = INTEL_SIGID_GPU_XE_SOFTWARE_START + 8,
+};
+
+#endif
diff --git a/drivers/gpu/drm/xe/xe_log.c b/drivers/gpu/drm/xe/xe_log.c
new file mode 100644
index 000000000000..ae4f6e33f5b8
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_log.c
@@ -0,0 +1,138 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#include "xe_log.h"
+#include "xe_printk.h"
+
+static void log_emit_cper(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
+ u32 component, u32 location, const void *data, size_t len,
+ struct va_format *vaf)
+{
+ /* TODO */
+}
+
+static bool is_hw_sigid(enum xe_sigid sigid)
+{
+ return (int)sigid >= INTEL_SIGID_GPU_XE_HARDWARE_START;
+}
+
+static bool is_sev_error(int cper_sev)
+{
+ return cper_sev != CPER_SEV_INFORMATIONAL;
+}
+
+static const char *log_hwe_prefix(int cper_sev, enum xe_sigid sigid)
+{
+ return is_sev_error(cper_sev) && is_hw_sigid(sigid) ? HW_ERR : "";
+}
+
+static const char *log_sev_prefix(int cper_sev)
+{
+ switch (cper_sev) {
+ case CPER_SEV_FATAL:
+ return "FATAL ";
+ case CPER_SEV_RECOVERABLE:
+ return "";
+ case CPER_SEV_CORRECTED:
+ return "CORRECTED ";
+ case CPER_SEV_INFORMATIONAL:
+ return "";
+ default:
+ WARN(IS_ENABLED(CONFIG_DRM_XE_DEBUG), "LOG: unknown severity %d\n", cper_sev);
+ return "";
+ }
+}
+
+#define __LOG_DRM_PRINTK_FMT(fmt, args...) "[drm] " fmt, ##args
+#define __LOG_DRM_PRINTK_ERR_FMT(fmt, args...) __LOG_DRM_PRINTK_FMT("*ERROR* " fmt, args)
+
+static void log_dmesg_vprintk(struct pci_dev *pdev, int cper_sev, struct va_format *vaf)
+{
+ if (cper_sev == CPER_SEV_INFORMATIONAL)
+ pci_info(pdev, __LOG_DRM_PRINTK_FMT("%pV", vaf));
+ else
+ pci_err(pdev, __LOG_DRM_PRINTK_ERR_FMT("%pV", vaf));
+}
+
+static void log_dmesg_printf(struct pci_dev *pdev, int cper_sev, const char *fmt, ...)
+{
+ struct va_format vaf;
+ va_list args;
+
+ va_start(args, fmt);
+ vaf.fmt = fmt;
+ vaf.va = &args;
+
+ log_dmesg_vprintk(pdev, cper_sev, &vaf);
+
+ va_end(args);
+}
+
+static void log_emit_dmesg(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
+ u32 component, u32 location, const void *data, size_t len,
+ struct va_format *vaf)
+{
+ const char *hwe_prefix = log_hwe_prefix(cper_sev, sigid);
+ const char *sev_prefix = log_sev_prefix(cper_sev);
+
+ /* TODO: add component/location details */
+
+ if (IS_ERR(data))
+ log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s(%pe) %s%pV",
+ sigid, sev_prefix, data, hwe_prefix, vaf);
+ else if (data && len)
+ log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s(%*phN) %s%pV",
+ sigid, sev_prefix, (int)len, data, hwe_prefix, vaf);
+ else
+ log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s%s%pV",
+ sigid, sev_prefix, hwe_prefix, vaf);
+}
+
+/**
+ * xe_log_emit() - Emit a structured SIGID log entry
+ * @pdev: the &pci_dev device
+ * @cper_sev: CPER severity (CPER_SEV_FATAL, CPER_SEV_RECOVERABLE, ...)
+ * @sigid: signature identifier, see &enum xe_sigid
+ * @component: component identifer
+ * @location: location details of the @component
+ * @data: pointer to the additional details, or ERR_PTR, or NULL if not applicable
+ * @len: length of the @data in bytes, or 0 if not applicable
+ * @fmt: printf-style format string
+ * @...: format arguments
+ *
+ * Emits a dmesg line that includes a single stable, machine-matchable token
+ * ``SIGID=<n>`` followed by the optional severity token (like ``FATAL``) and,
+ * when @data pointer is set, either the error printed with %pe or a packed hex
+ * dump of the @data binary blob. The dmesg line will also include printf-style
+ * text message.
+ *
+ * Note that the full dmesg line, with the free text message, is only a debugging
+ * aid, not an interface! Only the ``SIGID=<n>`` token is stable there.
+ * The durable machine record is the CPER carrying the same SIGID.
+ *
+ * Note: generation of the CPER record is a planned follow-up.
+ *
+ * Examples::
+ *
+ * <3> xe 0000:03:00.0: [drm] *ERROR* SIGID=104 FATAL (-EPROTO) Invalid GuC reply
+ * <3> xe 0000:03:00.0: [drm] *ERROR* SIGID=106 (-ETIMEDOUT) Engine 'rcs0' hung
+ * <6> xe 0000:03:00.0: [drm] SIGID=103 In survivability mode
+ */
+void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
+ u32 component, u32 location, const void *data, size_t len,
+ const char *fmt, ...)
+{
+ struct va_format vaf;
+ va_list args;
+
+ va_start(args, fmt);
+ vaf.fmt = fmt;
+ vaf.va = &args;
+
+ log_emit_dmesg(pdev, cper_sev, sigid, component, location, data, len, &vaf);
+ log_emit_cper(pdev, cper_sev, sigid, component, location, data, len, &vaf);
+
+ va_end(args);
+}
diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h
new file mode 100644
index 000000000000..d475e816ee0b
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_log.h
@@ -0,0 +1,20 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#ifndef _XE_LOG_H_
+#define _XE_LOG_H_
+
+#include <linux/cper.h>
+
+#include "abi/xe_sigid_abi.h"
+
+struct pci_dev;
+
+__printf(8, 9)
+void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
+ u32 component, u32 location, const void *data, size_t len,
+ const char *fmt, ...);
+
+#endif
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 03/32] drm/xe/log: Introduce structured component/location identifiers
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 01/32] drm/xe: Introduce xe_any helpers Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 02/32] drm/xe/log: Add structured SIGID error logging infrastructure Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-13 17:20 ` Rodrigo Vivi
2026-08-12 19:14 ` [PATCH v4 04/32] drm/xe/log: Add component/location decorations to dmesg Michal Wajdeczko
` (32 subsequent siblings)
35 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Mallesh Koujalagi,
Aravind Iddamsetty, Raag Jadav, Riana Tauro
Introduce structured identifiers for each component type that
could emit a SIGID log entry and for their locations. We plan
to store those IDs in the CPER records for better filtering.
Define also structured identifiers for the supported locations.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
Cc: Raag Jadav <raag.jadav@intel.com>
Cc: Riana Tauro <riana.tauro@intel.com>
---
v2: fix typo, define reserved ids (Michal)
v3: fix kernel-doc to match code (Sashiko)
v4: update comment (Michal)
---
drivers/gpu/drm/xe/abi/xe_log_abi.h | 187 ++++++++++++++++++++++++++++
1 file changed, 187 insertions(+)
create mode 100644 drivers/gpu/drm/xe/abi/xe_log_abi.h
diff --git a/drivers/gpu/drm/xe/abi/xe_log_abi.h b/drivers/gpu/drm/xe/abi/xe_log_abi.h
new file mode 100644
index 000000000000..92547805326f
--- /dev/null
+++ b/drivers/gpu/drm/xe/abi/xe_log_abi.h
@@ -0,0 +1,187 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#ifndef _ABI_XE_LOG_ABI_H_
+#define _ABI_XE_LOG_ABI_H_
+
+#include <linux/bits.h>
+#include <linux/bitfield.h>
+
+#include "abi/xe_sigid_abi.h"
+
+/**
+ * enum xe_log_component_bits - bits for components structure definitions
+ *
+ * Component identifiers are structured based on::
+ *
+ * COMPONENT = CLASS(8b).TYPE(8b)
+ *
+ * and the structure looks like this::
+ *
+ * ├── SYSTEM(0)
+ * │ └── ...
+ * ├── DRIVER(1)
+ * │ └── ...
+ * ├── FEATURE(2)
+ * │ └── ...
+ * ├── FIRMWARE(4)
+ * │ └── ...
+ * └── HARDWARE(8)
+ * └── ...
+ *
+ * Examples::
+ *
+ * COMPONENT(0.type) = SYSTEM.type = system component
+ * COMPONENT(1.type) = DRIVER.type = driver core component
+ * COMPONENT(3.type) = DRIVER_FEATURE.type = driver feature
+ * COMPONENT(5.type) = DRIVER_FIRMWARE.type = firmware driver component
+ * COMPONENT(9.type) = DRIVER_HARDWARE.type = hardware driver component
+ *
+ */
+enum xe_log_component_bits {
+ /* private: */
+ XE_LOG_COMPONENT_CLASS_MASK = GENMASK_U16(7, 0),
+ XE_LOG_COMPONENT_TYPE_MASK = GENMASK_U16(15, 8),
+ /* private: component classes */
+ XE_LOG_COMPONENT_CLASS_SYSTEM = 0u,
+ XE_LOG_COMPONENT_CLASS_DRIVER = 1u,
+ XE_LOG_COMPONENT_CLASS_FEATURE = 2u,
+ XE_LOG_COMPONENT_CLASS_FIRMWARE = 4u,
+ XE_LOG_COMPONENT_CLASS_HARDWARE = 8u,
+ XE_LOG_COMPONENT_CLASS_DRIVER_FEATURE = XE_LOG_COMPONENT_CLASS_DRIVER |
+ XE_LOG_COMPONENT_CLASS_FEATURE,
+ XE_LOG_COMPONENT_CLASS_DRIVER_FIRMWARE = XE_LOG_COMPONENT_CLASS_DRIVER |
+ XE_LOG_COMPONENT_CLASS_FIRMWARE,
+ XE_LOG_COMPONENT_CLASS_DRIVER_HARDWARE = XE_LOG_COMPONENT_CLASS_DRIVER |
+ XE_LOG_COMPONENT_CLASS_HARDWARE,
+ /* private: reserved identifiers */
+ XE_LOG_COMPONENT_NONE = 0u,
+};
+
+#define MAKE_XE_LOG_COMPONENT(_CLASS, type) \
+ (FIELD_PREP_CONST(XE_LOG_COMPONENT_CLASS_MASK, \
+ XE_LOG_COMPONENT_CLASS_##_CLASS) | \
+ FIELD_PREP_CONST(XE_LOG_COMPONENT_TYPE_MASK, (type)))
+
+/**
+ * enum xe_log_location_bits - bits for location structure definitions
+ *
+ * Location identifiers are structured based on::
+ *
+ * LOCATION = TYPE(8b).ID(8b)
+ *
+ * and the structure looks like this::
+ *
+ * ├── DEVICE(0)
+ * │ └── MBZ(0)
+ * ├── TILE(1)
+ * │ ├── Tile0(0)
+ * │ ├── ...
+ * │ └── TileN(n)
+ * ├── GT(1)
+ * │ ├── GT0(0)
+ * │ ├── ...
+ * │ └── GTn(n)
+ * └── ...
+ *
+ * Examples::
+ *
+ * LOCATION(0.0) = NONE
+ * LOCATION(1.0) = DEVICE.0 = "Device"
+ * LOCATION(2.1) = TILE.1 = "Tile1"
+ * LOCATION(3.2) = GT.2 = "GT2"
+ *
+ */
+enum xe_log_location_bits {
+ /* private: */
+ XE_LOG_LOCATION_TYPE_MASK = GENMASK_U16(7, 0),
+ XE_LOG_LOCATION_ID_MASK = GENMASK_U16(15, 8),
+ /* private: location types */
+ XE_LOG_LOCATION_TYPE_DEVICE = 1u,
+ XE_LOG_LOCATION_TYPE_TILE = 2u,
+ XE_LOG_LOCATION_TYPE_GT = 3u,
+ /* private: reserved identifiers */
+ XE_LOG_LOCATION_NONE = 0u,
+};
+
+#define PREP_XE_LOG_LOCATION(type, id) \
+ (FIELD_PREP(XE_LOG_LOCATION_TYPE_MASK, (type)) | \
+ FIELD_PREP(XE_LOG_LOCATION_ID_MASK, (id)))
+
+#define MAKE_XE_LOG_LOCATION(_TYPE, id) \
+ PREP_XE_LOG_LOCATION(XE_LOG_LOCATION_TYPE_##_TYPE, (id))
+
+/**
+ * DEFINE_XE_LOG_COMPONENTS() - Define log components.
+ * @define: name of the inner macro to expand.
+ *
+ * Use this super macro to define custom code for the log components.
+ * The following parameters are available for each component::
+ *
+ * define(CLASS, ID, TAG, SIGID, NAME)
+ *
+ * where:
+ *
+ * @CLASS is the component class name (without the XE_LOG_COMPONENT_CLASS_ prefix)
+ * @ID is the unique component identifier within @CLASS
+ * @TAG is unique component tag (across all components)
+ * @SIGID is the default xe_sigid for the component (without the XE_SIGID_ prefix)
+ */
+#define DEFINE_XE_LOG_COMPONENTS(define) \
+ /* */ \
+ define(SYSTEM, 1, PCI, SW, "Linux PCI Subsystem") \
+ define(SYSTEM, 2, DRM, SW, "DRM") \
+ /* */ \
+ define(DRIVER, 1, XE, SW, "Xe Driver") \
+ define(DRIVER, 2, PROBE, PROBE, "Driver Initialization") \
+ define(DRIVER, 3, WEDGED, WEDGED, "Device Malfunction") \
+ define(DRIVER, 4, RTP, SW, "Register Table Processing") \
+ define(DRIVER, 5, WA, SW, "Workarounds") \
+ define(DRIVER, 6, PAGEFAULT, MEM_FAULT, "Page Fault") \
+ /* */ \
+ define(DRIVER_HARDWARE, 1, REGS, IO_BUS, "Registers") \
+ define(DRIVER_HARDWARE, 2, GGTT, IO_BUS, "Global GTT") \
+ define(DRIVER_HARDWARE, 3, GT, GT_TDR, "Graphics Technology") \
+ define(DRIVER_HARDWARE, 4, LMTT, IO_BUS, "LMEM Translation Table") \
+ define(DRIVER_HARDWARE, 5, MEMIRQ, IO_BUS, "Memory Based IRQ") \
+ /* */ \
+ define(DRIVER_FEATURE, 1, PF, SW, "SR-IOV Physical Function") \
+ define(DRIVER_FEATURE, 2, VF, SW, "SR-IOV Virtual Function") \
+ define(DRIVER_FEATURE, 3, SURVIVABILITY, SURVIVABILITY, "Survivability") \
+ define(DRIVER_FEATURE, 4, RAS, SW, "Reliability, Accessibility, Serviceability") \
+ /* */ \
+ define(DRIVER_FIRMWARE, 1, GUC, RUNTIME_FW, "GuC") \
+ define(DRIVER_FIRMWARE, 2, HUC, RUNTIME_FW, "HuC") \
+ define(DRIVER_FIRMWARE, 3, GSC, RUNTIME_FW, "GSC") \
+ define(DRIVER_FIRMWARE, 16, PCODE, DEVICE_FW, "PCode") \
+ define(DRIVER_FIRMWARE, 17, SYSCTRL, DEVICE_FW, "System Controller") \
+ /* eod */
+
+/**
+ * enum xe_log_component_tags - TAGs of all supported components
+ */
+enum xe_log_component_tags {
+ /* private: */
+#define MAKE_XE_LOG_COMPONENT_ENUM(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ XE_LOG_COMPONENT_##_TAG = MAKE_XE_LOG_COMPONENT(_CLASS, (_ID)), \
+ XE_LOG_COMPONENT_##_CLASS##_##_ID = XE_LOG_COMPONENT_##_TAG, \
+ /* eod */
+ DEFINE_XE_LOG_COMPONENTS(MAKE_XE_LOG_COMPONENT_ENUM)
+#undef MAKE_XE_LOG_COMPONENT_ENUM
+};
+
+/**
+ * enum xe_log_component_sigids - SIGIDs of all supported components
+ */
+enum xe_log_component_sigids {
+ /* private: */
+#define MAKE_XE_LOG_COMPONENT_SIGID(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ XE_LOG_COMPONENT_##_TAG##_SIGID = XE_SIGID_##_SIG, \
+ /* eod */
+ DEFINE_XE_LOG_COMPONENTS(MAKE_XE_LOG_COMPONENT_SIGID)
+#undef MAKE_XE_LOG_COMPONENT_SIGID
+};
+
+#endif
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 04/32] drm/xe/log: Add component/location decorations to dmesg
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (2 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 03/32] drm/xe/log: Introduce structured component/location identifiers Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 05/32] drm/xe/log: Add SIGID log helpers for severity Michal Wajdeczko
` (31 subsequent siblings)
35 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Aravind Iddamsetty,
Mallesh Koujalagi
While we can't directly use our xe_tile|gt_err|info helpers to get
nice Tile/GT decorations, we can still add them manually based on
the structured location parameter. Similarly, we can add component
name prefix based on the component identifier.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
v2: check against info->tile_count (Sashiko)
more diagnostics on bad usage (Michal)
---
drivers/gpu/drm/xe/xe_log.c | 102 +++++++++++++++++++++++++++++++++---
1 file changed, 94 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_log.c b/drivers/gpu/drm/xe/xe_log.c
index ae4f6e33f5b8..0b423ed121cd 100644
--- a/drivers/gpu/drm/xe/xe_log.c
+++ b/drivers/gpu/drm/xe/xe_log.c
@@ -3,6 +3,9 @@
* Copyright © 2026 Intel Corporation
*/
+#include "abi/xe_log_abi.h"
+
+#include "xe_device.h"
#include "xe_log.h"
#include "xe_printk.h"
@@ -13,6 +16,85 @@ static void log_emit_cper(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigi
/* TODO */
}
+static const char *log_unknown_component_prefix(u32 component)
+{
+ u32 class = FIELD_GET(XE_LOG_COMPONENT_CLASS_MASK, component);
+ u32 type = FIELD_GET(XE_LOG_COMPONENT_TYPE_MASK, component);
+
+ WARN(IS_ENABLED(CONFIG_DRM_XE_DEBUG), "LOG: unrecognized component %u.%u\n", class, type);
+ switch (class) {
+#define MAKE_XE_LOG_COMPONENT_CLASS_PREFIX(_CLASS) \
+ case XE_LOG_COMPONENT_CLASS_##_CLASS: return #_CLASS "? ";
+ MAKE_XE_LOG_COMPONENT_CLASS_PREFIX(SYSTEM)
+ MAKE_XE_LOG_COMPONENT_CLASS_PREFIX(DRIVER)
+ MAKE_XE_LOG_COMPONENT_CLASS_PREFIX(FEATURE)
+ MAKE_XE_LOG_COMPONENT_CLASS_PREFIX(FIRMWARE)
+ MAKE_XE_LOG_COMPONENT_CLASS_PREFIX(HARDWARE)
+#undef MAKE_XE_LOG_COMPONENT_CLASS_PREFIX
+ }
+ return "COMP? ";
+}
+
+static const char *log_component_prefix(u32 component)
+{
+ switch (component) {
+#define MAKE_XE_LOG_COMPONENT_CASE_PREFIX(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ case XE_LOG_COMPONENT_##_TAG: return #_TAG ": ";
+ DEFINE_XE_LOG_COMPONENTS(MAKE_XE_LOG_COMPONENT_CASE_PREFIX)
+#undef MAKE_XE_LOG_COMPONENT_CASE_PREFIX
+ }
+
+ return component ? log_unknown_component_prefix(component) : "";
+}
+
+static struct xe_gt *get_gt_safe(struct pci_dev *pdev, u8 id)
+{
+ struct xe_device *xe = pdev_to_xe_device(pdev);
+
+ return xe ? xe_device_get_gt(xe, id) : NULL;
+}
+
+static struct xe_tile *get_tile_safe(struct pci_dev *pdev, u8 id)
+{
+ struct xe_device *xe = pdev_to_xe_device(pdev);
+
+ return xe && id < xe->info.tile_count ? &xe->tiles[id] : NULL;
+}
+
+static const char *log_location_prefix(struct pci_dev *pdev, u32 location, char *buf, size_t size)
+{
+ u32 type = FIELD_GET(XE_LOG_LOCATION_TYPE_MASK, location);
+ u32 id = FIELD_GET(XE_LOG_LOCATION_ID_MASK, location);
+
+ if (!location || type == XE_LOG_LOCATION_TYPE_DEVICE) {
+ if (id)
+ goto unrecognized;
+ strscpy(buf, "", size);
+ } else if (type == XE_LOG_LOCATION_TYPE_TILE) {
+ struct xe_tile *tile = get_tile_safe(pdev, id);
+
+ if (!tile)
+ goto unrecognized;
+ snprintf(buf, size, "Tile%u: ", id);
+ } else if (type == XE_LOG_LOCATION_TYPE_GT) {
+ struct xe_gt *gt = get_gt_safe(pdev, id);
+
+ if (!gt)
+ goto unrecognized;
+ snprintf(buf, size, "Tile%u: GT%u: ", gt->tile->id, id);
+ } else {
+ goto unrecognized;
+ }
+
+ return buf;
+
+unrecognized:
+ pci_WARN(pdev, IS_ENABLED(CONFIG_DRM_XE_DEBUG),
+ "LOG: unrecognized location %u.%u\n", type, id);
+ snprintf(buf, size, "LOC%u.%u? ", type, id);
+ return buf;
+}
+
static bool is_hw_sigid(enum xe_sigid sigid)
{
return (int)sigid >= INTEL_SIGID_GPU_XE_HARDWARE_START;
@@ -74,20 +156,24 @@ static void log_emit_dmesg(struct pci_dev *pdev, int cper_sev, enum xe_sigid sig
u32 component, u32 location, const void *data, size_t len,
struct va_format *vaf)
{
+ char buf[32];
+ const char *loc_prefix = log_location_prefix(pdev, location, buf, sizeof(buf));
+ const char *comp_prefix = log_component_prefix(component);
const char *hwe_prefix = log_hwe_prefix(cper_sev, sigid);
const char *sev_prefix = log_sev_prefix(cper_sev);
- /* TODO: add component/location details */
-
if (IS_ERR(data))
- log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s(%pe) %s%pV",
- sigid, sev_prefix, data, hwe_prefix, vaf);
+ log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s(%pe) %s%s%s%pV",
+ sigid, sev_prefix, data, hwe_prefix,
+ loc_prefix, comp_prefix, vaf);
else if (data && len)
- log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s(%*phN) %s%pV",
- sigid, sev_prefix, (int)len, data, hwe_prefix, vaf);
+ log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s(%*phN) %s%s%s%pV",
+ sigid, sev_prefix, (int)len, data, hwe_prefix,
+ loc_prefix, comp_prefix, vaf);
else
- log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s%s%pV",
- sigid, sev_prefix, hwe_prefix, vaf);
+ log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s%s%s%s%pV",
+ sigid, sev_prefix, hwe_prefix,
+ loc_prefix, comp_prefix, vaf);
}
/**
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 05/32] drm/xe/log: Add SIGID log helpers for severity
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (3 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 04/32] drm/xe/log: Add component/location decorations to dmesg Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 06/32] drm/xe/log: Add SIGID log helpers for location Michal Wajdeczko
` (30 subsequent siblings)
35 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe; +Cc: Michal Wajdeczko, Rodrigo Vivi, Mallesh Koujalagi
There are only few CPER severity levels defined, add simple helper
for each of them, to avoid forcing developers to write full severity
name in every function call.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
v2: drop support for any_to_pdev (Michal)
---
drivers/gpu/drm/xe/xe_log.h | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h
index d475e816ee0b..73daf37d6463 100644
--- a/drivers/gpu/drm/xe/xe_log.h
+++ b/drivers/gpu/drm/xe/xe_log.h
@@ -17,4 +17,20 @@ void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
u32 component, u32 location, const void *data, size_t len,
const char *fmt, ...);
+#define xe_log_emit_fatal(pdev, sig, comp, loc, data, len, fmt, args...) \
+ xe_log_emit((pdev), CPER_SEV_FATAL, (sig), (comp), (loc), \
+ (data), (len), fmt, ##args)
+
+#define xe_log_emit_recoverable(pdev, sig, comp, loc, data, len, fmt, args...) \
+ xe_log_emit((pdev), CPER_SEV_RECOVERABLE, (sig), (comp), (loc), \
+ (data), (len), fmt, ##args)
+
+#define xe_log_emit_corrected(pdev, sig, comp, loc, data, len, fmt, args...) \
+ xe_log_emit((pdev), CPER_SEV_CORRECTED, (sig), (comp), (loc), \
+ (data), (len), fmt, ##args)
+
+#define xe_log_emit_info(pdev, sig, comp, loc, data, len, fmt, args...) \
+ xe_log_emit((pdev), CPER_SEV_INFORMATIONAL, (sig), (comp), (loc), \
+ (data), (len), fmt, ##args)
+
#endif
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 06/32] drm/xe/log: Add SIGID log helpers for location
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (4 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 05/32] drm/xe/log: Add SIGID log helpers for severity Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 07/32] drm/xe/log: Add SIGID log helpers for location & severity Michal Wajdeczko
` (29 subsequent siblings)
35 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Mallesh Koujalagi,
Aravind Iddamsetty
We can determine the location of the SIGID error source based on the
type of the xe pointer being currently available. Add helper macros
that will accept any of xe_device, xe_tile or xe_gt pointers instead
of plain pci_dev to generate valid XE_LOG_LOCATION identifier and then
call low-level xe_log_emit(pdev) function.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/xe_log.h | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h
index 73daf37d6463..510cedae6e14 100644
--- a/drivers/gpu/drm/xe/xe_log.h
+++ b/drivers/gpu/drm/xe/xe_log.h
@@ -8,7 +8,9 @@
#include <linux/cper.h>
+#include "abi/xe_log_abi.h"
#include "abi/xe_sigid_abi.h"
+#include "xe_any.h"
struct pci_dev;
@@ -33,4 +35,38 @@ void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
xe_log_emit((pdev), CPER_SEV_INFORMATIONAL, (sig), (comp), (loc), \
(data), (len), fmt, ##args)
+#define xe_log_location_type(any) \
+ _Generic((any), \
+ struct xe_gt * : XE_LOG_LOCATION_TYPE_GT, \
+ const struct xe_gt * : XE_LOG_LOCATION_TYPE_GT, \
+ struct xe_tile * : XE_LOG_LOCATION_TYPE_TILE, \
+ const struct xe_tile * : XE_LOG_LOCATION_TYPE_TILE, \
+ struct xe_device * : XE_LOG_LOCATION_TYPE_DEVICE, \
+ const struct xe_device * : XE_LOG_LOCATION_TYPE_DEVICE, \
+ struct pci_dev * : XE_LOG_LOCATION_TYPE_DEVICE, \
+ struct device * : XE_LOG_LOCATION_TYPE_DEVICE)
+
+#define xe_log_location(any) \
+ PREP_XE_LOG_LOCATION(xe_log_location_type(any), xe_any_id(any))
+
+/**
+ * xe_log_from() - Emit a structured SIGID log entry using @any pointer as location.
+ * @any: the &xe_device or &xe_tile or &xe_gt pointer this report relates to
+ * @cper_sev: CPER severity (CPER_SEV_FATAL, CPER_SEV_RECOVERABLE, ...)
+ * @sigid: signature identifier, see &enum xe_sigid
+ * @component: component identifer
+ * @data: pointer to the additional details, or ERR_PTR, or NULL if not applicable
+ * @len: length of the @data in bytes, or 0 if not applicable
+ * @fmt: printf-style format string
+ * @args: arguments for the @fmt format string
+ *
+ * The location used to emit SIGID entry will be based on the @any pointer type.
+ * See xe_log_emit() for more details.
+ */
+#define xe_log_from(any, cper_sev, sigid, component, data, len, fmt, args...) do { \
+ typeof(any) ___any = (any); \
+ xe_log_emit(xe_any_to_pdev(___any), (cper_sev), (sigid), (component), \
+ xe_log_location(___any), (data), (len), fmt, ##args); \
+} while (0)
+
#endif
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 07/32] drm/xe/log: Add SIGID log helpers for location & severity
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (5 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 06/32] drm/xe/log: Add SIGID log helpers for location Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 08/32] drm/xe/log: Add SIGID log helpers for components Michal Wajdeczko
` (28 subsequent siblings)
35 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe; +Cc: Michal Wajdeczko, Rodrigo Vivi, Mallesh Koujalagi
There are only few CPER severity levels defined, add more helpers
to avoid forcing developers to write full CPER severity name in
every function call.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
v2: fix argument list (Sashiko)
---
drivers/gpu/drm/xe/xe_log.h | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h
index 510cedae6e14..916218560297 100644
--- a/drivers/gpu/drm/xe/xe_log.h
+++ b/drivers/gpu/drm/xe/xe_log.h
@@ -69,4 +69,20 @@ void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
xe_log_location(___any), (data), (len), fmt, ##args); \
} while (0)
+#define xe_log_from_fatal(any, sig, comp, data, len, fmt, args...) \
+ xe_log_from((any), CPER_SEV_FATAL, (sig), (comp), \
+ (data), (len), fmt, ##args)
+
+#define xe_log_from_recoverable(any, sig, comp, data, len, fmt, args...) \
+ xe_log_from((any), CPER_SEV_RECOVERABLE, (sig), (comp), \
+ (data), (len), fmt, ##args)
+
+#define xe_log_from_corrected(any, sig, comp, data, len, fmt, args...) \
+ xe_log_from((any), CPER_SEV_CORRECTED, (sig), (comp), \
+ (data), (len), fmt, ##args)
+
+#define xe_log_from_info(any, sig, comp, data, len, fmt, args...) \
+ xe_log_from((any), CPER_SEV_INFORMATIONAL, (sig), (comp), \
+ (data), (len), fmt, ##args)
+
#endif
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 08/32] drm/xe/log: Add SIGID log helpers for components
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (6 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 07/32] drm/xe/log: Add SIGID log helpers for location & severity Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 09/32] drm/xe/log: Add SIGID log helpers for component & severity Michal Wajdeczko
` (27 subsequent siblings)
35 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Mallesh Koujalagi,
Aravind Iddamsetty
Our component list already defines relation between the component
name, identified by the TAG, and its numerical identifier and the
assigned SIGID. We can also already prepare location identifier
based on the pointer type used to emit the log entry. Add helper
that will prepare SIGID, COMPONENT and LOCATION parameters for
xe_log_emit() using provided components TAG and the pointer.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
---
v2: rebased/simplified (Michal)
---
drivers/gpu/drm/xe/xe_log.h | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h
index 916218560297..c30db02950b0 100644
--- a/drivers/gpu/drm/xe/xe_log.h
+++ b/drivers/gpu/drm/xe/xe_log.h
@@ -85,4 +85,22 @@ void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
xe_log_from((any), CPER_SEV_INFORMATIONAL, (sig), (comp), \
(data), (len), fmt, ##args)
+/**
+ * xe_log_comp() - Emit a structured SIGID log entry on the component behalf.
+ * @any: the &xe_device or &xe_tile or &xe_gt pointer this report relates to
+ * @cper_sev: CPER severity (CPER_SEV_FATAL, CPER_SEV_RECOVERABLE, ...)
+ * @TAG: the component tag to use
+ * @data: pointer to the additional details, or ERR_PTR, or NULL if not applicable
+ * @len: length of the @data in bytes, or 0 if not applicable
+ * @fmt: printf-style free text format string (not a stable interface)
+ * @args: arguments for the @fmt format string
+ *
+ * The SIGID will be determined from the component's @TAG.
+ * The component identifier will be determined from the component's @TAG.
+ * The location used to emit SIGID entry will be based on the @any pointer type.
+ */
+#define xe_log_comp(any, cper_sev, TAG, data, len, fmt, args...) \
+ xe_log_from((any), (cper_sev), (int)XE_LOG_COMPONENT_##TAG##_SIGID, \
+ XE_LOG_COMPONENT_##TAG, (data), (len), fmt, ##args)
+
#endif
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 09/32] drm/xe/log: Add SIGID log helpers for component & severity
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (7 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 08/32] drm/xe/log: Add SIGID log helpers for components Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-13 4:38 ` Mallesh, Koujalagi
2026-08-12 19:14 ` [PATCH v4 10/32] drm/xe/log: Add SIGID log helpers for errno-only Michal Wajdeczko
` (26 subsequent siblings)
35 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe; +Cc: Michal Wajdeczko, Rodrigo Vivi, Mallesh Koujalagi
There are only few CPER severity levels defined, add some helpers
to avoid forcing developers to write full CPER severity enum name
in every macro call.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/xe_log.h | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h
index c30db02950b0..c56306a183e7 100644
--- a/drivers/gpu/drm/xe/xe_log.h
+++ b/drivers/gpu/drm/xe/xe_log.h
@@ -103,4 +103,16 @@ void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
xe_log_from((any), (cper_sev), (int)XE_LOG_COMPONENT_##TAG##_SIGID, \
XE_LOG_COMPONENT_##TAG, (data), (len), fmt, ##args)
+#define xe_log_comp_fatal(any, TAG, data, len, fmt, args...) \
+ xe_log_comp((any), CPER_SEV_FATAL, TAG, (data), (len), fmt, ##args)
+
+#define xe_log_comp_recoverable(any, TAG, data, len, fmt, args...) \
+ xe_log_comp((any), CPER_SEV_RECOVERABLE, TAG, (data), (len), fmt, ##args)
+
+#define xe_log_comp_corrected(any, TAG, data, len, fmt, args...) \
+ xe_log_comp((any), CPER_SEV_CORRECTED, TAG, (data), (len), fmt, ##args)
+
+#define xe_log_comp_info(any, TAG, data, len, fmt, args...) \
+ xe_log_comp((any), CPER_SEV_INFORMATIONAL, TAG, (data), (len), fmt, ##args)
+
#endif
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 10/32] drm/xe/log: Add SIGID log helpers for errno-only
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (8 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 09/32] drm/xe/log: Add SIGID log helpers for component & severity Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 11/32] drm/xe/log: Index all SIGID printk messages Michal Wajdeczko
` (25 subsequent siblings)
35 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Mallesh Koujalagi,
Aravind Iddamsetty
For the software based SIGID errors, we will usually want to pass
only the errno value as the data to be logged in the dmesg line or
the CPER record. Add simple wrappers for that.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
---
v2: include linux/err.h (Sashiko)
add xe_log_err_corrected (Michal)
v3: use xe_log_comp_sev helpers (Mallesh)
---
drivers/gpu/drm/xe/xe_log.h | 52 +++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h
index c56306a183e7..0928b0866617 100644
--- a/drivers/gpu/drm/xe/xe_log.h
+++ b/drivers/gpu/drm/xe/xe_log.h
@@ -7,6 +7,7 @@
#define _XE_LOG_H_
#include <linux/cper.h>
+#include <linux/err.h>
#include "abi/xe_log_abi.h"
#include "abi/xe_sigid_abi.h"
@@ -115,4 +116,55 @@ void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
#define xe_log_comp_info(any, TAG, data, len, fmt, args...) \
xe_log_comp((any), CPER_SEV_INFORMATIONAL, TAG, (data), (len), fmt, ##args)
+/**
+ * xe_log_err() - Emit a structured SIGID error log entry on the component behalf.
+ * @any: the &xe_device or &xe_tile or &xe_gt pointer this report relates to
+ * @TAG: the component tag to use
+ * @err: negative errno for the failing operation, or 0 if not applicable
+ * @fmt: printf-style free text format string (not a stable interface)
+ * @args: arguments for the @fmt format string
+ *
+ * The log entry will be emitted with @CPER_SEV_RECOVERABLE severity.
+ */
+#define xe_log_err(any, TAG, err, fmt, args...) \
+ xe_log_comp_recoverable((any), TAG, ERR_PTR(err), 0, fmt, ##args)
+
+/**
+ * xe_log_err_fatal() - Emit a structured SIGID error log entry on the component behalf.
+ * @any: the &xe_device or &xe_tile or &xe_gt pointer this report relates to
+ * @TAG: the component tag to use
+ * @err: negative errno for the failing operation, or 0 if not applicable
+ * @fmt: printf-style free text format string (not a stable interface)
+ * @args: arguments for the @fmt format string
+ *
+ * The log entry will be emitted with @CPER_SEV_FATAL severity.
+ */
+#define xe_log_err_fatal(any, TAG, err, fmt, args...) \
+ xe_log_comp_fatal((any), TAG, ERR_PTR(err), 0, fmt, ##args)
+
+/**
+ * xe_log_err_corrected() - Emit a structured SIGID error log entry on the component behalf.
+ * @any: the &xe_device or &xe_tile or &xe_gt pointer this report relates to
+ * @TAG: the component tag to use
+ * @err: negative errno for the failing operation, or 0 if not applicable
+ * @fmt: printf-style free text format string (not a stable interface)
+ * @args: arguments for the @fmt format string
+ *
+ * The log entry will be emitted with @CPER_SEV_CORRECTED severity.
+ */
+#define xe_log_err_corrected(any, TAG, err, fmt, args...) \
+ xe_log_comp_corrected((any), TAG, ERR_PTR(err), 0, fmt, ##args)
+
+/**
+ * xe_log_info() - Emit a structured SIGID information log entry on the component behalf.
+ * @any: the &xe_device or &xe_tile or &xe_gt pointer this report relates to
+ * @TAG: the component tag to use
+ * @fmt: printf-style free text format string (not a stable interface)
+ * @args: arguments for the @fmt format string
+ *
+ * The log entry will be emitted with @CPER_SEV_INFORMATIONAL severity.
+ */
+#define xe_log_info(any, TAG, fmt, args...) \
+ xe_log_comp_info((any), TAG, NULL, 0, fmt, ##args)
+
#endif
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 11/32] drm/xe/log: Index all SIGID printk messages
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (9 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 10/32] drm/xe/log: Add SIGID log helpers for errno-only Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:35 ` sashiko-bot
2026-08-13 12:31 ` Mallesh, Koujalagi
2026-08-12 19:14 ` [PATCH v4 12/32] drm/xe/log: Add hardware error signatures Michal Wajdeczko
` (24 subsequent siblings)
35 siblings, 2 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe; +Cc: Michal Wajdeczko, Jani Nikula, Rodrigo Vivi
When CONFIG_PRINTK_INDEX is enabled, it is expected that all device
level printk messages are indexed for audit. While usually this is
done automatically behind the scenes when code is using regular
dev_printk macros, since we are generating different dmesg messages
inside xe_log_emit() based on the severity, component and location,
we only get those entries in /sys/kernel/debug/printk/index/xe:
<3> drivers/gpu/drm/xe/xe_log.c:142 log_dmesg_vprintk "%s %s: [drm] *ERROR* %pV"
<6> drivers/gpu/drm/xe/xe_log.c:140 log_dmesg_vprintk "%s %s: [drm] %pV"
Explicitly generate printk index using dev_printk_index_emit() with
some generic prefix that includes the SIGID tag.
Suggested-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
---
drivers/gpu/drm/xe/xe_log.c | 8 ++++----
drivers/gpu/drm/xe/xe_log.h | 14 +++++++++++---
2 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_log.c b/drivers/gpu/drm/xe/xe_log.c
index 0b423ed121cd..50a9b35e5b3e 100644
--- a/drivers/gpu/drm/xe/xe_log.c
+++ b/drivers/gpu/drm/xe/xe_log.c
@@ -177,7 +177,7 @@ static void log_emit_dmesg(struct pci_dev *pdev, int cper_sev, enum xe_sigid sig
}
/**
- * xe_log_emit() - Emit a structured SIGID log entry
+ * __xe_log_emit() - Emit a structured SIGID log entry
* @pdev: the &pci_dev device
* @cper_sev: CPER severity (CPER_SEV_FATAL, CPER_SEV_RECOVERABLE, ...)
* @sigid: signature identifier, see &enum xe_sigid
@@ -206,9 +206,9 @@ static void log_emit_dmesg(struct pci_dev *pdev, int cper_sev, enum xe_sigid sig
* <3> xe 0000:03:00.0: [drm] *ERROR* SIGID=106 (-ETIMEDOUT) Engine 'rcs0' hung
* <6> xe 0000:03:00.0: [drm] SIGID=103 In survivability mode
*/
-void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
- u32 component, u32 location, const void *data, size_t len,
- const char *fmt, ...)
+void __xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
+ u32 component, u32 location, const void *data, size_t len,
+ const char *fmt, ...)
{
struct va_format vaf;
va_list args;
diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h
index 0928b0866617..53fe2bb7ddd3 100644
--- a/drivers/gpu/drm/xe/xe_log.h
+++ b/drivers/gpu/drm/xe/xe_log.h
@@ -16,9 +16,17 @@
struct pci_dev;
__printf(8, 9)
-void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
- u32 component, u32 location, const void *data, size_t len,
- const char *fmt, ...);
+void __xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
+ u32 component, u32 location, const void *data, size_t len,
+ const char *fmt, ...);
+
+#define __xe_log_emit_printk_index(fmt) \
+ dev_printk_index_emit(NULL, "[drm]%s SIGID=%u %s(%s)%s%s%s: " fmt);
+
+#define xe_log_emit(pdev, sev, sig, comp, loc, data, len, fmt, args...) ({ \
+ __xe_log_emit_printk_index(fmt); \
+ __xe_log_emit((pdev), (sev), (sig), (comp), (loc), (data), (len), fmt, ##args); \
+})
#define xe_log_emit_fatal(pdev, sig, comp, loc, data, len, fmt, args...) \
xe_log_emit((pdev), CPER_SEV_FATAL, (sig), (comp), (loc), \
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 12/32] drm/xe/log: Add hardware error signatures
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (10 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 11/32] drm/xe/log: Index all SIGID printk messages Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-13 5:03 ` Mallesh, Koujalagi
2026-08-12 19:14 ` [PATCH v4 13/32] drm/xe/log: Extend components list with hardware items Michal Wajdeczko
` (23 subsequent siblings)
35 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe; +Cc: Michal Wajdeczko, Rodrigo Vivi, Yoni Levitt, Mallesh Koujalagi
Extend our error signatures definitions xe_sigid to cover also
hardware-originated errors and make them distinguishable from
initially defined software-initiated errors.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Yoni Levitt <yoni.levitt@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
v2: update comment (Sashiko)
v3: rebased
---
drivers/gpu/drm/xe/abi/xe_sigid_abi.h | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/abi/xe_sigid_abi.h b/drivers/gpu/drm/xe/abi/xe_sigid_abi.h
index 93967183ae51..8e3c7ef579b9 100644
--- a/drivers/gpu/drm/xe/abi/xe_sigid_abi.h
+++ b/drivers/gpu/drm/xe/abi/xe_sigid_abi.h
@@ -137,12 +137,18 @@
* @XE_SIGID_GT_TDR: Engine hang / timeout detection and recovery (reset).
* @XE_SIGID_MEM_FAULT: VM bind, page fault or GTT fault.
* @XE_SIGID_IO_BUS: Runtime PCIe / IOMMU / MMIO access fault.
+ * @XE_SIGID_HW: Generic hardware failure.
+ * @XE_SIGID_PCIE: PCIe interface errors.
+ * @XE_SIGID_DEVICE_MEMORY: Device memory errors.
+ * @XE_SIGID_CORE_COMPUTE: Compute/shader core errors.
+ * @XE_SIGID_FABRIC: Fabric errors.
+ * @XE_SIGID_SOC_INTERNAL: SoC-internal errors.
*
* Each SIGID represents the report sites the driver detects and reports.
* Values are numbered sequentially, are only ever appended, and are never
* renumbered or reused.
*
- * Firmware- and hardware-originated signatures are not listed yet here.
+ * Firmware- and hardware-originated signatures are numbered separately.
*/
enum xe_sigid {
XE_SIGID_SW = INTEL_SIGID_GPU_XE_SOFTWARE_START,
@@ -154,6 +160,13 @@ enum xe_sigid {
XE_SIGID_GT_TDR = INTEL_SIGID_GPU_XE_SOFTWARE_START + 6,
XE_SIGID_MEM_FAULT = INTEL_SIGID_GPU_XE_SOFTWARE_START + 7,
XE_SIGID_IO_BUS = INTEL_SIGID_GPU_XE_SOFTWARE_START + 8,
+
+ XE_SIGID_HW = INTEL_SIGID_GPU_XE_HARDWARE_START,
+ XE_SIGID_PCIE = INTEL_SIGID_GPU_XE_HARDWARE_START + 1,
+ XE_SIGID_DEVICE_MEMORY = INTEL_SIGID_GPU_XE_HARDWARE_START + 2,
+ XE_SIGID_CORE_COMPUTE = INTEL_SIGID_GPU_XE_HARDWARE_START + 3,
+ XE_SIGID_FABRIC = INTEL_SIGID_GPU_XE_HARDWARE_START + 4,
+ XE_SIGID_SOC_INTERNAL = INTEL_SIGID_GPU_XE_HARDWARE_START + 5,
};
#endif
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 13/32] drm/xe/log: Extend components list with hardware items
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (11 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 12/32] drm/xe/log: Add hardware error signatures Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 14/32] drm/xe/ras: Check RAS and LOG component definitions Michal Wajdeczko
` (22 subsequent siblings)
35 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Aravind Iddamsetty,
Mallesh Koujalagi, Riana Tauro
Update our super macro with new top level hardware components.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> #v2
Cc: Riana Tauro <riana.tauro@intel.com>
---
v2: follow enum xe_ras_component values (Aravind)
v3: use same COMP tags as in SIGID (Riana)
---
drivers/gpu/drm/xe/abi/xe_log_abi.h | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/drivers/gpu/drm/xe/abi/xe_log_abi.h b/drivers/gpu/drm/xe/abi/xe_log_abi.h
index 92547805326f..bb29003e2646 100644
--- a/drivers/gpu/drm/xe/abi/xe_log_abi.h
+++ b/drivers/gpu/drm/xe/abi/xe_log_abi.h
@@ -130,6 +130,10 @@ enum xe_log_location_bits {
* @SIGID is the default xe_sigid for the component (without the XE_SIGID_ prefix)
*/
#define DEFINE_XE_LOG_COMPONENTS(define) \
+ DEFINE_XE_LOG_SOFTWARE_COMPONENTS(define) \
+ DEFINE_XE_LOG_HARDWARE_COMPONENTS(define)
+
+#define DEFINE_XE_LOG_SOFTWARE_COMPONENTS(define) \
/* */ \
define(SYSTEM, 1, PCI, SW, "Linux PCI Subsystem") \
define(SYSTEM, 2, DRM, SW, "DRM") \
@@ -157,6 +161,14 @@ enum xe_log_location_bits {
define(DRIVER_FIRMWARE, 3, GSC, RUNTIME_FW, "GSC") \
define(DRIVER_FIRMWARE, 16, PCODE, DEVICE_FW, "PCode") \
define(DRIVER_FIRMWARE, 17, SYSCTRL, DEVICE_FW, "System Controller") \
+
+#define DEFINE_XE_LOG_HARDWARE_COMPONENTS(define) \
+ define(HARDWARE, 1, DEVICE_MEMORY, DEVICE_MEMORY, "Device Memory") \
+ define(HARDWARE, 2, CORE_COMPUTE, CORE_COMPUTE, "Core Compute") \
+ /* HARDWARE, 3, RESERVED */ \
+ define(HARDWARE, 4, PCIE, PCIE, "PCIe Interface") \
+ define(HARDWARE, 5, FABRIC, FABRIC, "Fabric") \
+ define(HARDWARE, 6, SOC_INTERNAL, SOC_INTERNAL, "SoC Internal") \
/* eod */
/**
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 14/32] drm/xe/ras: Check RAS and LOG component definitions
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (12 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 13/32] drm/xe/log: Extend components list with hardware items Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 15/32] drm/xe/kunit: Setup driver data in the test device Michal Wajdeczko
` (21 subsequent siblings)
35 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Aravind Iddamsetty,
Mallesh Koujalagi
While not strictly required, we want to make sure that components
definitions used by the RAS firmware are in the same fixed relation
with HW components definitions used by the LOG infrastructure to
allow code simplification. Add static asserts to enforce that.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
v2: rebased after comp tag renames (Michal)
---
drivers/gpu/drm/xe/xe_ras.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_ras.c b/drivers/gpu/drm/xe/xe_ras.c
index 93e45ef49bae..18f05a55fc61 100644
--- a/drivers/gpu/drm/xe/xe_ras.c
+++ b/drivers/gpu/drm/xe/xe_ras.c
@@ -5,6 +5,7 @@
#include "xe_device.h"
#include "xe_drm_ras.h"
+#include "xe_log.h"
#include "xe_pm.h"
#include "xe_printk.h"
#include "xe_ras.h"
@@ -45,6 +46,16 @@ enum xe_ras_component {
XE_RAS_COMP_MAX
};
+#define CHECK_COMPONENT(RAS_COMP, LOG_COMP) \
+ static_assert(MAKE_XE_LOG_COMPONENT(HARDWARE, (RAS_COMP)) == (LOG_COMP))
+ /* make sure components definitions maintain stable relation */
+ CHECK_COMPONENT(XE_RAS_COMP_DEVICE_MEMORY, XE_LOG_COMPONENT_DEVICE_MEMORY);
+ CHECK_COMPONENT(XE_RAS_COMP_CORE_COMPUTE, XE_LOG_COMPONENT_CORE_COMPUTE);
+ CHECK_COMPONENT(XE_RAS_COMP_PCIE, XE_LOG_COMPONENT_PCIE);
+ CHECK_COMPONENT(XE_RAS_COMP_FABRIC, XE_LOG_COMPONENT_FABRIC);
+ CHECK_COMPONENT(XE_RAS_COMP_SOC_INTERNAL, XE_LOG_COMPONENT_SOC_INTERNAL);
+#undef CHECK_COMPONENT
+
/* RAS response status codes */
enum xe_ras_response_status {
XE_RAS_STATUS_SUCCESS = 0,
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 15/32] drm/xe/kunit: Setup driver data in the test device
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (13 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 14/32] drm/xe/ras: Check RAS and LOG component definitions Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 16/32] drm/xe/tests: Add Kunit tests for xe_log Michal Wajdeczko
` (20 subsequent siblings)
35 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe; +Cc: Michal Wajdeczko, Mallesh Koujalagi
While we have helpers pdev_to_xe_device() and kdev_to_xe_device()
to obtain the xe_device pointer from the struct device pointer or
from the struct pci_dev pointer, we must also setup the drm_device
pointer as driver data in the device to make them work.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/tests/xe_kunit_helpers.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/gpu/drm/xe/tests/xe_kunit_helpers.c b/drivers/gpu/drm/xe/tests/xe_kunit_helpers.c
index bc5156966ce9..27740b40c8ae 100644
--- a/drivers/gpu/drm/xe/tests/xe_kunit_helpers.c
+++ b/drivers/gpu/drm/xe/tests/xe_kunit_helpers.c
@@ -39,6 +39,10 @@ struct xe_device *xe_kunit_helper_alloc_xe_device(struct kunit *test,
struct xe_device,
drm, DRIVER_GEM);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xe);
+
+ dev_set_drvdata(xe->drm.dev, &xe->drm);
+ KUNIT_ASSERT_PTR_EQ(test, xe, kdev_to_xe_device(dev));
+
return xe;
}
EXPORT_SYMBOL_IF_KUNIT(xe_kunit_helper_alloc_xe_device);
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 16/32] drm/xe/tests: Add Kunit tests for xe_log
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (14 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 15/32] drm/xe/kunit: Setup driver data in the test device Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 17/32] drm/xe/tests: Add kunit tests for xe_any Michal Wajdeczko
` (19 subsequent siblings)
35 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Mallesh Koujalagi,
Aravind Iddamsetty, Yoni Levitt
All dmesg log lines generated by the xe_log() functions or helper
macros are expected to have a stable format. Add tests to verify
that generated output is not accidentally changed. Add demo pseudo
tests to show how to use all variants of the xe_log() helpers.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Yoni Levitt <yoni.levitt@intel.com>
---
v2: less demos/more tests (Michal)
v3: expect tile.id is already set (Michal)
add invalid params test (Michal)
v4: move/drop err local var (Mallesh/Michal)
---
drivers/gpu/drm/xe/tests/xe_log_kunit.c | 543 ++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_log.c | 11 +
2 files changed, 554 insertions(+)
create mode 100644 drivers/gpu/drm/xe/tests/xe_log_kunit.c
diff --git a/drivers/gpu/drm/xe/tests/xe_log_kunit.c b/drivers/gpu/drm/xe/tests/xe_log_kunit.c
new file mode 100644
index 000000000000..b524db818f8b
--- /dev/null
+++ b/drivers/gpu/drm/xe/tests/xe_log_kunit.c
@@ -0,0 +1,543 @@
+// SPDX-License-Identifier: GPL-2.0 AND MIT
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#include <kunit/static_stub.h>
+#include <kunit/test.h>
+#include <kunit/test-bug.h>
+
+#include "tests/xe_kunit_helpers.h"
+#include "tests/xe_pci_test.h"
+#include "xe_device.h"
+#include "xe_log.h"
+
+static void nop_dmesg_vprintk(struct pci_dev *pdev, int cper_sev, struct va_format *vaf)
+{
+}
+
+static void nop_emit_cper(struct pci_dev *pdev, int cper_sev,
+ enum xe_sigid sigid, u32 component, u32 location,
+ const void *data, size_t len, struct va_format *vaf)
+{
+}
+
+static const char *component_name(u32 component)
+{
+ switch (component) {
+#define make_component_tag_case(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ case XE_LOG_COMPONENT_##_TAG: return _NAME;
+ DEFINE_XE_LOG_COMPONENTS(make_component_tag_case)
+#undef make_component_tag_case
+ }
+ return component ? "???" : "";
+}
+
+static const char *location_type(u32 location)
+{
+ u32 type = FIELD_GET(XE_LOG_LOCATION_TYPE_MASK, location);
+
+ return type == XE_LOG_LOCATION_TYPE_DEVICE ? "DEVICE" :
+ type == XE_LOG_LOCATION_TYPE_TILE ? "TILE" :
+ type == XE_LOG_LOCATION_TYPE_GT ? "GT" :
+ location ? "?" : "";
+}
+
+static void fake_emit_cper(struct pci_dev *pdev, int cper_sev,
+ enum xe_sigid sigid, u32 component, u32 location,
+ const void *data, size_t len, struct va_format *vaf)
+{
+ char msg[64];
+ int n;
+
+ pr_info("\n");
+ pr_info("CPER SEV=%u SIGID=%u\n", cper_sev, sigid);
+ pr_info("CPER DEVICE=%s\n", dev_name(&pdev->dev));
+ if (location)
+ pr_info("CPER LOCATION=%#x \t# %s.%u\n",
+ location, location_type(location),
+ FIELD_GET(XE_LOG_LOCATION_ID_MASK, location));
+ if (component)
+ pr_info("CPER COMPONENT=%#x \t# %s\n",
+ component, component_name(component));
+ if (IS_ERR(data))
+ pr_info("CPER ERR=%ld \t\t# %pe\n", PTR_ERR(data), data);
+ else if (len)
+ print_hex_dump(KERN_INFO, "CPER BIN=", DUMP_PREFIX_OFFSET,
+ 16, 1, data, len, false);
+
+ n = vscnprintf(msg, sizeof(msg), vaf->fmt, *vaf->va);
+ print_hex_dump(KERN_INFO, "CPER MSG=", DUMP_PREFIX_OFFSET, 16, 1, msg, n, true);
+ pr_info("CPER END\n");
+}
+
+static const u8 blob[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
+static const u8 dead[] = { 0xde, 0xad, 0xbe, 0xef };
+
+static struct xe_tile *to_tile_safe(struct xe_device *xe)
+{
+ return xe ? &xe->tiles[1] : NULL;
+}
+
+static struct xe_gt *to_gt_safe(struct xe_device *xe)
+{
+ return xe ? to_tile_safe(xe)->primary_gt : NULL;
+}
+
+static struct pci_dev *to_pdev_safe(struct xe_device *xe)
+{
+ return xe ? xe_any_to_pdev(xe) : NULL;
+}
+
+static void demo(struct xe_device *xe)
+{
+ struct pci_dev *pdev = xe_any_to_pdev(xe);
+ struct xe_tile *tile = to_tile_safe(xe);
+ struct xe_gt *gt = to_gt_safe(xe);
+
+ /* SW errno */
+ xe_log_emit(pdev, CPER_SEV_FATAL, XE_SIGID_PROBE,
+ XE_LOG_COMPONENT_NONE, XE_LOG_LOCATION_NONE,
+ ERR_PTR(-ENODEV), 0, "testing %s signature\n", "software");
+
+ xe_log_err(tile, PROBE, -ENODEV, "testing %s signature\n", "software");
+ xe_log_err_corrected(gt, PROBE, -ENODEV, "testing %s signature\n", "software");
+ xe_log_info(gt, PROBE, "testing %s signature\n", "software");
+
+ /* HW data */
+ xe_log_emit(pdev, CPER_SEV_FATAL, XE_SIGID_PCIE,
+ XE_LOG_COMPONENT_NONE, XE_LOG_LOCATION_NONE,
+ blob, sizeof(blob), "testing %s signature\n", "HARDWARE");
+ xe_log_emit_recoverable(pdev, XE_SIGID_FABRIC,
+ XE_LOG_COMPONENT_NONE, XE_LOG_LOCATION_NONE,
+ blob, sizeof(blob), "testing %s signature\n", "HARDWARE");
+ xe_log_from_corrected(tile, XE_SIGID_DEVICE_MEMORY, XE_LOG_COMPONENT_NONE,
+ blob, sizeof(blob), "testing %s signature\n", "HARDWARE");
+ xe_log_from_info(gt, XE_SIGID_CORE_COMPUTE, XE_LOG_COMPONENT_NONE,
+ blob, sizeof(blob), "testing %s signature\n", "HARDWARE");
+}
+
+static void demo_dmesg(struct kunit *test)
+{
+ kunit_activate_static_stub(test, log_emit_cper, nop_emit_cper);
+ demo(test->priv);
+}
+
+static void demo_cper(struct kunit *test)
+{
+ kunit_activate_static_stub(test, log_emit_cper, fake_emit_cper);
+ kunit_activate_static_stub(test, log_dmesg_vprintk, nop_dmesg_vprintk);
+ demo(test->priv);
+}
+
+static const char *test_fatal(struct xe_device *xe)
+{
+ struct pci_dev *pdev = to_pdev_safe(xe);
+
+ if (pdev)
+ xe_log_emit_fatal(pdev, XE_SIGID_PROBE,
+ XE_LOG_COMPONENT_NONE, XE_LOG_LOCATION_NONE,
+ NULL, 0, "testing %d\n", 123);
+ return "SIGID=101 FATAL testing 123\n";
+}
+
+static const char *test_fatal_tile(struct xe_device *xe)
+{
+ struct xe_tile *tile = to_tile_safe(xe);
+
+ if (tile)
+ xe_log_from_fatal(tile, XE_SIGID_PROBE, XE_LOG_COMPONENT_NONE,
+ ERR_PTR(-ENODEV), 0, "testing %d\n", 123);
+ return "SIGID=101 FATAL (-ENODEV) Tile1: testing 123\n";
+}
+
+static const char *test_fatal_gt(struct xe_device *xe)
+{
+ struct xe_gt *gt = to_gt_safe(xe);
+
+ if (gt)
+ xe_log_from_fatal(gt, XE_SIGID_PROBE, XE_LOG_COMPONENT_NONE,
+ ERR_PTR(-ENODEV), 0, "testing %d\n", 123);
+ return "SIGID=101 FATAL (-ENODEV) Tile1: GT1: testing 123\n";
+}
+
+static const char *test_fatal_comp(struct xe_device *xe)
+{
+ struct pci_dev *pdev = to_pdev_safe(xe);
+
+ if (pdev)
+ xe_log_err_fatal(pdev, PROBE, -ENODEV, "testing %d\n", 123);
+ return "SIGID=101 FATAL (-ENODEV) PROBE: testing 123\n";
+}
+
+static const char *test_fatal_comp_tile(struct xe_device *xe)
+{
+ struct xe_tile *tile = to_tile_safe(xe);
+
+ if (tile)
+ xe_log_err_fatal(tile, PROBE, -ENODEV, "testing %d\n", 123);
+ return "SIGID=101 FATAL (-ENODEV) Tile1: PROBE: testing 123\n";
+}
+
+static const char *test_fatal_comp_gt(struct xe_device *xe)
+{
+ struct xe_gt *gt = to_gt_safe(xe);
+
+ if (gt)
+ xe_log_err_fatal(gt, PROBE, -ENODEV, "testing %d\n", 123);
+ return "SIGID=101 FATAL (-ENODEV) Tile1: GT1: PROBE: testing 123\n";
+}
+
+static const char *test_fatal_all(struct xe_device *xe)
+{
+ struct pci_dev *pdev = to_pdev_safe(xe);
+ struct xe_gt *gt = to_gt_safe(xe);
+
+ if (pdev)
+ xe_log_emit(pdev, CPER_SEV_FATAL, XE_SIGID_PROBE,
+ XE_LOG_COMPONENT_PROBE, MAKE_XE_LOG_LOCATION(GT, gt->info.id),
+ ERR_PTR(-ENODEV), 0, "testing %d\n", 123);
+ return "SIGID=101 FATAL (-ENODEV) Tile1: GT1: PROBE: testing 123\n";
+}
+
+static const char *test_recoverable(struct xe_device *xe)
+{
+ struct pci_dev *pdev = to_pdev_safe(xe);
+
+ if (pdev)
+ xe_log_emit_recoverable(pdev, XE_SIGID_RUNTIME_FW,
+ XE_LOG_COMPONENT_NONE, XE_LOG_LOCATION_NONE,
+ ERR_PTR(-EIO), 0, "testing %d\n", 123);
+ return "SIGID=104 (-EIO) testing 123\n";
+}
+
+static const char *test_recoverable_tile(struct xe_device *xe)
+{
+ struct xe_tile *tile = to_tile_safe(xe);
+
+ if (tile)
+ xe_log_from_recoverable(tile, XE_SIGID_RUNTIME_FW, XE_LOG_COMPONENT_NONE,
+ ERR_PTR(-EIO), 0, "testing %d\n", 123);
+ return "SIGID=104 (-EIO) Tile1: testing 123\n";
+}
+
+static const char *test_recoverable_gt(struct xe_device *xe)
+{
+ struct xe_gt *gt = to_gt_safe(xe);
+
+ if (gt)
+ xe_log_from_recoverable(gt, XE_SIGID_RUNTIME_FW, XE_LOG_COMPONENT_NONE,
+ ERR_PTR(-EIO), 0, "testing %d\n", 123);
+ return "SIGID=104 (-EIO) Tile1: GT1: testing 123\n";
+}
+
+static const char *test_recoverable_comp(struct xe_device *xe)
+{
+ struct pci_dev *pdev = to_pdev_safe(xe);
+
+ if (pdev)
+ xe_log_err(pdev, GUC, -EIO, "testing %d\n", 123);
+ return "SIGID=104 (-EIO) GUC: testing 123\n";
+}
+
+static const char *test_recoverable_comp_tile(struct xe_device *xe)
+{
+ struct xe_tile *tile = to_tile_safe(xe);
+
+ if (tile)
+ xe_log_err(tile, GUC, -EIO, "testing %d\n", 123);
+ return "SIGID=104 (-EIO) Tile1: GUC: testing 123\n";
+}
+
+static const char *test_recoverable_comp_gt(struct xe_device *xe)
+{
+ struct xe_gt *gt = to_gt_safe(xe);
+
+ if (gt)
+ xe_log_err(gt, GUC, -EIO, "testing %d\n", 123);
+ return "SIGID=104 (-EIO) Tile1: GT1: GUC: testing 123\n";
+}
+
+static const char *test_recoverable_all(struct xe_device *xe)
+{
+ struct pci_dev *pdev = to_pdev_safe(xe);
+ struct xe_gt *gt = to_gt_safe(xe);
+
+ if (pdev)
+ xe_log_emit(pdev, CPER_SEV_RECOVERABLE, XE_SIGID_RUNTIME_FW,
+ XE_LOG_COMPONENT_GUC, MAKE_XE_LOG_LOCATION(GT, gt->info.id),
+ ERR_PTR(-EIO), 0, "testing %d\n", 123);
+ return "SIGID=104 (-EIO) Tile1: GT1: GUC: testing 123\n";
+}
+
+static const char *test_info(struct xe_device *xe)
+{
+ struct pci_dev *pdev = to_pdev_safe(xe);
+
+ if (pdev)
+ xe_log_emit(pdev, CPER_SEV_INFORMATIONAL, XE_SIGID_DEVICE_FW,
+ XE_LOG_COMPONENT_NONE, XE_LOG_LOCATION_NONE,
+ NULL, 0, "testing %d\n", 123);
+ return "SIGID=105 testing 123\n";
+}
+
+static const char *test_info_tile(struct xe_device *xe)
+{
+ struct xe_tile *tile = to_tile_safe(xe);
+
+ if (tile)
+ xe_log_from_info(tile, XE_SIGID_DEVICE_FW, XE_LOG_COMPONENT_NONE,
+ NULL, 0, "testing %d\n", 123);
+ return "SIGID=105 Tile1: testing 123\n";
+}
+
+static const char *test_info_gt(struct xe_device *xe)
+{
+ struct xe_gt *gt = to_gt_safe(xe);
+
+ if (gt)
+ xe_log_from_info(gt, XE_SIGID_DEVICE_FW, XE_LOG_COMPONENT_NONE,
+ NULL, 0, "testing %d\n", 123);
+ return "SIGID=105 Tile1: GT1: testing 123\n";
+}
+
+static const char *test_info_comp(struct xe_device *xe)
+{
+ struct pci_dev *pdev = to_pdev_safe(xe);
+
+ if (pdev)
+ xe_log_info(pdev, PCODE, "testing %d\n", 123);
+ return "SIGID=105 PCODE: testing 123\n";
+}
+
+static const char *test_info_comp_tile(struct xe_device *xe)
+{
+ struct xe_tile *tile = to_tile_safe(xe);
+
+ if (tile)
+ xe_log_info(tile, PCODE, "testing %d\n", 123);
+ return "SIGID=105 Tile1: PCODE: testing 123\n";
+}
+
+static const char *test_info_comp_gt(struct xe_device *xe)
+{
+ struct xe_gt *gt = to_gt_safe(xe);
+
+ if (gt)
+ xe_log_info(gt, PCODE, "testing %d\n", 123);
+ return "SIGID=105 Tile1: GT1: PCODE: testing 123\n";
+}
+
+static const char *test_info_all(struct xe_device *xe)
+{
+ struct pci_dev *pdev = to_pdev_safe(xe);
+ struct xe_gt *gt = to_gt_safe(xe);
+
+ if (pdev)
+ xe_log_emit(pdev, CPER_SEV_INFORMATIONAL, XE_SIGID_DEVICE_FW,
+ XE_LOG_COMPONENT_PCODE, MAKE_XE_LOG_LOCATION(GT, gt->info.id),
+ NULL, 0, "testing %d\n", 123);
+ return "SIGID=105 Tile1: GT1: PCODE: testing 123\n";
+}
+
+static const char *test_hw_fatal(struct xe_device *xe)
+{
+ struct pci_dev *pdev = to_pdev_safe(xe);
+
+ if (pdev)
+ xe_log_emit_fatal(pdev, XE_SIGID_PCIE,
+ XE_LOG_COMPONENT_NONE, XE_LOG_LOCATION_NONE,
+ dead, sizeof(dead), "testing %d\n", 123);
+ return "SIGID=201 FATAL (deadbeef) " HW_ERR "testing 123\n";
+}
+
+static const char *test_hw_recoverable(struct xe_device *xe)
+{
+ struct pci_dev *pdev = to_pdev_safe(xe);
+
+ if (pdev)
+ xe_log_emit_recoverable(pdev, XE_SIGID_DEVICE_MEMORY,
+ XE_LOG_COMPONENT_NONE, XE_LOG_LOCATION_NONE,
+ dead, sizeof(dead), "testing %d\n", 123);
+ return "SIGID=202 (deadbeef) " HW_ERR "testing 123\n";
+}
+
+static const char *test_hw_corrected(struct xe_device *xe)
+{
+ struct pci_dev *pdev = to_pdev_safe(xe);
+
+ if (pdev)
+ xe_log_emit_corrected(pdev, XE_SIGID_DEVICE_MEMORY,
+ XE_LOG_COMPONENT_NONE, XE_LOG_LOCATION_NONE,
+ dead, sizeof(dead), "testing %d\n", 123);
+ return "SIGID=202 CORRECTED (deadbeef) " HW_ERR "testing 123\n";
+}
+
+static const char *test_hw_informational(struct xe_device *xe)
+{
+ struct pci_dev *pdev = to_pdev_safe(xe);
+
+ if (pdev)
+ xe_log_emit_info(pdev, XE_SIGID_DEVICE_MEMORY,
+ XE_LOG_COMPONENT_NONE, XE_LOG_LOCATION_NONE,
+ dead, sizeof(dead), "testing %d\n", 123);
+ return "SIGID=202 (deadbeef) testing 123\n";
+}
+
+static const struct log_test_param {
+ const char *(*func)(struct xe_device *xe);
+} log_test_params[] = {
+ { .func = test_fatal },
+ { .func = test_fatal_tile },
+ { .func = test_fatal_gt },
+ { .func = test_fatal_comp },
+ { .func = test_fatal_comp_tile },
+ { .func = test_fatal_comp_gt },
+ { .func = test_fatal_all },
+ { .func = test_recoverable },
+ { .func = test_recoverable_tile },
+ { .func = test_recoverable_gt },
+ { .func = test_recoverable_comp },
+ { .func = test_recoverable_comp_tile },
+ { .func = test_recoverable_comp_gt },
+ { .func = test_recoverable_all },
+ { .func = test_info },
+ { .func = test_info_tile },
+ { .func = test_info_gt },
+ { .func = test_info_comp },
+ { .func = test_info_comp_tile },
+ { .func = test_info_comp_gt },
+ { .func = test_info_all },
+ { .func = test_hw_fatal },
+ { .func = test_hw_recoverable },
+ { .func = test_hw_corrected },
+ { .func = test_hw_informational },
+};
+
+static void log_param_get_desc(const struct log_test_param *p, char *desc)
+{
+ snprintf(desc, KUNIT_PARAM_DESC_SIZE, "%ps", p->func);
+}
+
+KUNIT_ARRAY_PARAM(log, log_test_params, log_param_get_desc);
+
+static void check_dmesg_vprintk(struct pci_dev *pdev, int cper_sev, struct va_format *vaf)
+{
+ struct kunit *test = kunit_get_current_test();
+ const struct log_test_param *param = test->param_value;
+ const char *exp = param->func(NULL);
+ char msg[64];
+ int n;
+
+ n = vsnprintf(msg, sizeof(msg), vaf->fmt, *vaf->va);
+ KUNIT_EXPECT_LT(test, n, sizeof(msg));
+ KUNIT_EXPECT_STREQ(test, msg, exp);
+}
+
+static void test_dmesg(struct kunit *test)
+{
+ const struct log_test_param *param = test->param_value;
+
+ kunit_activate_static_stub(test, log_emit_cper, nop_emit_cper);
+ kunit_activate_static_stub(test, log_dmesg_vprintk, check_dmesg_vprintk);
+
+ param->func(test->priv);
+}
+
+#define INVALID_TILEID (XE_MAX_TILES_PER_DEVICE + 1)
+#define INVALID_GTID (XE_MAX_TILES_PER_DEVICE * XE_MAX_GT_PER_TILE + 1)
+
+#define PREP_TEST_LOCATION(type, id) \
+ (FIELD_PREP_CONST(XE_LOG_LOCATION_TYPE_MASK, (type)) | \
+ FIELD_PREP_CONST(XE_LOG_LOCATION_ID_MASK, (id)))
+#define PREP_TEST_COMPONENT(class, type) \
+ (FIELD_PREP_CONST(XE_LOG_COMPONENT_CLASS_MASK, (class)) | \
+ FIELD_PREP_CONST(XE_LOG_COMPONENT_TYPE_MASK, (type)))
+
+static const struct {
+ u32 comp;
+ u32 loc;
+ const char *name;
+} invalid_params[] = {
+ { .name = "no-component no-location no-warn" },
+ { .loc = PREP_TEST_LOCATION(0, 1),
+ .name = "reserved location" },
+ { .loc = PREP_TEST_LOCATION(255, 0),
+ .name = "unknown location" },
+ { .loc = PREP_TEST_LOCATION(XE_LOG_LOCATION_TYPE_DEVICE, 1),
+ .name = "nonzero-device-id location" },
+ { .loc = PREP_TEST_LOCATION(XE_LOG_LOCATION_TYPE_TILE, INVALID_TILEID),
+ .name = "invalid-tile-id location" },
+ { .loc = PREP_TEST_LOCATION(XE_LOG_LOCATION_TYPE_GT, INVALID_GTID),
+ .name = "invalid-gt-id location" },
+ { .comp = PREP_TEST_COMPONENT(255, 0),
+ .name = "unknown component class" },
+ { .comp = PREP_TEST_COMPONENT(XE_LOG_COMPONENT_CLASS_SYSTEM, 255),
+ .name = "unknown system component" },
+ { .comp = PREP_TEST_COMPONENT(XE_LOG_COMPONENT_CLASS_HARDWARE, 255),
+ .name = "unknown hardware component" },
+ { .comp = PREP_TEST_COMPONENT(255, 1),
+ .loc = PREP_TEST_LOCATION(255, 1),
+ .name = "unknown component and location" },
+};
+
+KUNIT_ARRAY_PARAM_DESC(invalid_param, invalid_params, name);
+
+static void test_invalid(struct kunit *test)
+{
+ struct xe_device *xe = test->priv;
+ typeof(invalid_params[0]) *param = test->param_value;
+
+ struct pci_dev *pdev = xe_any_to_pdev(xe);
+
+ if (!IS_ENABLED(CONFIG_DRM_XE_DEBUG))
+ kunit_skip(test, "requires CONFIG_DRM_XE_DEBUG\n");
+
+ kunit_activate_static_stub(test, log_emit_cper, nop_emit_cper);
+ kunit_activate_static_stub(test, log_dmesg_vprintk, nop_dmesg_vprintk);
+
+ kunit_warning_suppress(test) {
+ xe_log_emit(pdev, CPER_SEV_FATAL, XE_SIGID_PROBE,
+ param->comp, param->loc,
+ NULL, 0, "testing %s\n", param->name);
+ KUNIT_EXPECT_SUPPRESSED_WARNING_COUNT(test, !!param->comp + !!param->loc);
+ }
+}
+
+static int xe_log_test_init(struct kunit *test)
+{
+ struct xe_pci_fake_data fake = {
+ .platform = XE_PVC, /* with max_remote_tiles != 0 */
+ .subplatform = XE_SUBPLATFORM_NONE,
+ .graphics_verx100 = 2001,
+ .media_verx100 = 2001,
+ };
+ struct xe_device *xe;
+
+ test->priv = &fake;
+ xe_kunit_helper_xe_device_test_init(test);
+ xe = test->priv;
+
+ KUNIT_ASSERT_NOT_NULL(test, to_tile_safe(xe));
+ KUNIT_ASSERT_NOT_NULL(test, to_gt_safe(xe));
+ KUNIT_EXPECT_EQ(test, 1, xe_any_id(to_tile_safe(xe)));
+ KUNIT_EXPECT_EQ(test, 1, xe_any_id(to_gt_safe(xe)));
+
+ return 0;
+}
+
+static struct kunit_case xe_log_test_cases[] = {
+ KUNIT_CASE(demo_cper),
+ KUNIT_CASE(demo_dmesg),
+ KUNIT_CASE_PARAM(test_dmesg, log_gen_params),
+ KUNIT_CASE_PARAM(test_invalid, invalid_param_gen_params),
+ {}
+};
+
+static struct kunit_suite xe_log_suite = {
+ .name = "xe_log",
+ .test_cases = xe_log_test_cases,
+ .init = xe_log_test_init,
+};
+
+kunit_test_suites(&xe_log_suite);
diff --git a/drivers/gpu/drm/xe/xe_log.c b/drivers/gpu/drm/xe/xe_log.c
index 50a9b35e5b3e..5b56f69ce559 100644
--- a/drivers/gpu/drm/xe/xe_log.c
+++ b/drivers/gpu/drm/xe/xe_log.c
@@ -3,6 +3,9 @@
* Copyright © 2026 Intel Corporation
*/
+#include <kunit/static_stub.h>
+#include <kunit/visibility.h>
+
#include "abi/xe_log_abi.h"
#include "xe_device.h"
@@ -13,6 +16,8 @@ static void log_emit_cper(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigi
u32 component, u32 location, const void *data, size_t len,
struct va_format *vaf)
{
+ KUNIT_STATIC_STUB_REDIRECT(log_emit_cper, pdev, cper_sev, sigid,
+ component, location, data, len, vaf);
/* TODO */
}
@@ -132,6 +137,8 @@ static const char *log_sev_prefix(int cper_sev)
static void log_dmesg_vprintk(struct pci_dev *pdev, int cper_sev, struct va_format *vaf)
{
+ KUNIT_STATIC_STUB_REDIRECT(log_dmesg_vprintk, pdev, cper_sev, vaf);
+
if (cper_sev == CPER_SEV_INFORMATIONAL)
pci_info(pdev, __LOG_DRM_PRINTK_FMT("%pV", vaf));
else
@@ -222,3 +229,7 @@ void __xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
va_end(args);
}
+
+#if IS_BUILTIN(CONFIG_DRM_XE_KUNIT_TEST)
+#include "tests/xe_log_kunit.c"
+#endif
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 17/32] drm/xe/tests: Add kunit tests for xe_any
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (15 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 16/32] drm/xe/tests: Add Kunit tests for xe_log Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 18/32] drm/xe: Report 'probe blocked' error using SIGID Michal Wajdeczko
` (18 subsequent siblings)
35 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe; +Cc: Michal Wajdeczko, Mallesh Koujalagi
Add simple sanity tests for all xe_any macros to make sure they
are working as expected.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
v2: add test_if_pdev, check drm casts (Mallesh)
---
drivers/gpu/drm/xe/tests/Makefile | 1 +
drivers/gpu/drm/xe/tests/xe_any_kunit.c | 213 ++++++++++++++++++++++++
2 files changed, 214 insertions(+)
create mode 100644 drivers/gpu/drm/xe/tests/xe_any_kunit.c
diff --git a/drivers/gpu/drm/xe/tests/Makefile b/drivers/gpu/drm/xe/tests/Makefile
index f7aa47f11a36..0b809a252cfa 100644
--- a/drivers/gpu/drm/xe/tests/Makefile
+++ b/drivers/gpu/drm/xe/tests/Makefile
@@ -7,6 +7,7 @@ xe_live_test-y = xe_live_test_mod.o
# Normal kunit tests
obj-$(CONFIG_DRM_XE_KUNIT_TEST) += xe_test.o
xe_test-y = xe_test_mod.o \
+ xe_any_kunit.o \
xe_args_test.o \
xe_pci_test.o \
xe_rtp_tables_test.o \
diff --git a/drivers/gpu/drm/xe/tests/xe_any_kunit.c b/drivers/gpu/drm/xe/tests/xe_any_kunit.c
new file mode 100644
index 000000000000..0a5f28894cd2
--- /dev/null
+++ b/drivers/gpu/drm/xe/tests/xe_any_kunit.c
@@ -0,0 +1,213 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#include <kunit/test.h>
+
+#include "tests/xe_kunit_helpers.h"
+#include "tests/xe_pci_test.h"
+#include "xe_any.h"
+#include "xe_device.h"
+
+static void test_to_xe(struct kunit *test)
+{
+ struct xe_device *xe = test->priv;
+ struct xe_tile *tile = xe_device_get_root_tile(xe);
+ struct xe_gt *gt = tile->primary_gt;
+ struct drm_device *drm = &xe->drm;
+ struct device *dev = xe->drm.dev;
+ struct pci_dev *pdev = to_pci_dev(dev);
+ const struct xe_device *cxe = xe;
+ const struct xe_tile *ctile = tile;
+ const struct xe_gt *cgt = gt;
+
+ KUNIT_EXPECT_PTR_EQ(test, xe, xe_any_to_xe(xe));
+ KUNIT_EXPECT_PTR_EQ(test, xe, xe_any_to_xe(tile));
+ KUNIT_EXPECT_PTR_EQ(test, xe, xe_any_to_xe(gt));
+ KUNIT_EXPECT_PTR_EQ(test, xe, xe_any_to_xe(drm));
+ KUNIT_EXPECT_PTR_EQ(test, xe, xe_any_to_xe(dev));
+ KUNIT_EXPECT_PTR_EQ(test, xe, xe_any_to_xe(pdev));
+
+ KUNIT_EXPECT_PTR_EQ(test, cxe, xe_any_to_xe(cxe));
+ KUNIT_EXPECT_PTR_EQ(test, cxe, xe_any_to_xe(ctile));
+ KUNIT_EXPECT_PTR_EQ(test, cxe, xe_any_to_xe(cgt));
+}
+
+static void test_to_pdev(struct kunit *test)
+{
+ struct xe_device *xe = test->priv;
+ struct xe_tile *tile = xe_device_get_root_tile(xe);
+ struct xe_gt *gt = tile->primary_gt;
+ struct drm_device *drm = &xe->drm;
+ struct device *dev = xe->drm.dev;
+ struct pci_dev *pdev = to_pci_dev(dev);
+
+ KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_to_pdev(xe));
+ KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_to_pdev(tile));
+ KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_to_pdev(gt));
+ KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_to_pdev(drm));
+ KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_to_pdev(dev));
+ KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_to_pdev(pdev));
+
+ /* mimic early probe stage */
+ dev_set_drvdata(xe->drm.dev, NULL);
+ KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_to_pdev(dev));
+ KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_to_pdev(pdev));
+}
+
+static void test_to_dev(struct kunit *test)
+{
+ struct xe_device *xe = test->priv;
+ struct xe_tile *tile = xe_device_get_root_tile(xe);
+ struct xe_gt *gt = tile->primary_gt;
+ struct drm_device *drm = &xe->drm;
+ struct device *dev = xe->drm.dev;
+ struct pci_dev *pdev = to_pci_dev(dev);
+
+ KUNIT_EXPECT_PTR_EQ(test, dev, xe_any_to_dev(xe));
+ KUNIT_EXPECT_PTR_EQ(test, dev, xe_any_to_dev(tile));
+ KUNIT_EXPECT_PTR_EQ(test, dev, xe_any_to_dev(gt));
+ KUNIT_EXPECT_PTR_EQ(test, dev, xe_any_to_dev(drm));
+ KUNIT_EXPECT_PTR_EQ(test, dev, xe_any_to_dev(dev));
+ KUNIT_EXPECT_PTR_EQ(test, dev, xe_any_to_dev(pdev));
+
+ /* mimic early probe stage */
+ dev_set_drvdata(xe->drm.dev, NULL);
+ KUNIT_EXPECT_PTR_EQ(test, dev, xe_any_to_dev(dev));
+ KUNIT_EXPECT_PTR_EQ(test, dev, xe_any_to_dev(pdev));
+}
+
+static void test_to_drm(struct kunit *test)
+{
+ struct xe_device *xe = test->priv;
+ struct xe_tile *tile = xe_device_get_root_tile(xe);
+ struct xe_gt *gt = tile->primary_gt;
+ struct drm_device *drm = &xe->drm;
+ struct device *dev = xe->drm.dev;
+ struct pci_dev *pdev = to_pci_dev(dev);
+
+ KUNIT_EXPECT_PTR_EQ(test, drm, xe_any_to_drm(xe));
+ KUNIT_EXPECT_PTR_EQ(test, drm, xe_any_to_drm(tile));
+ KUNIT_EXPECT_PTR_EQ(test, drm, xe_any_to_drm(gt));
+ KUNIT_EXPECT_PTR_EQ(test, drm, xe_any_to_drm(drm));
+ KUNIT_EXPECT_PTR_EQ(test, drm, xe_any_to_drm(dev));
+ KUNIT_EXPECT_PTR_EQ(test, drm, xe_any_to_drm(pdev));
+}
+
+static void test_if_pdev(struct kunit *test)
+{
+ struct xe_device *xe = test->priv;
+ struct xe_tile *tile = xe_device_get_root_tile(xe);
+ struct xe_gt *gt = tile->primary_gt;
+ struct drm_device *drm = &xe->drm;
+ struct device *dev = xe->drm.dev;
+ struct pci_dev *pdev = to_pci_dev(dev);
+
+ KUNIT_EXPECT_TRUE(test, xe && drm && tile && gt && dev && pdev);
+ KUNIT_EXPECT_NULL(test, xe_any_if_pdev(xe));
+ KUNIT_EXPECT_NULL(test, xe_any_if_pdev(tile));
+ KUNIT_EXPECT_NULL(test, xe_any_if_pdev(gt));
+ KUNIT_EXPECT_NULL(test, xe_any_if_pdev(drm));
+ KUNIT_EXPECT_NULL(test, xe_any_if_pdev(dev));
+ KUNIT_EXPECT_PTR_EQ(test, pdev, xe_any_if_pdev(pdev));
+}
+
+static void test_if_xe(struct kunit *test)
+{
+ struct xe_device *xe = test->priv;
+ struct xe_tile *tile = xe_device_get_root_tile(xe);
+ struct xe_gt *gt = tile->primary_gt;
+ struct drm_device *drm = &xe->drm;
+ struct device *dev = xe->drm.dev;
+ struct pci_dev *pdev = to_pci_dev(dev);
+
+ KUNIT_EXPECT_TRUE(test, xe && drm && tile && gt && dev && pdev);
+ KUNIT_EXPECT_PTR_EQ(test, xe, xe_any_if_xe(xe));
+ KUNIT_EXPECT_NULL(test, xe_any_if_xe(tile));
+ KUNIT_EXPECT_NULL(test, xe_any_if_xe(gt));
+ KUNIT_EXPECT_NULL(test, xe_any_if_xe(drm));
+ KUNIT_EXPECT_NULL(test, xe_any_if_xe(dev));
+ KUNIT_EXPECT_NULL(test, xe_any_if_xe(pdev));
+}
+
+static void test_if_tile(struct kunit *test)
+{
+ struct xe_device *xe = test->priv;
+ struct xe_tile *tile = xe_device_get_root_tile(xe);
+ struct xe_gt *gt = tile->primary_gt;
+ struct drm_device *drm = &xe->drm;
+ struct device *dev = xe->drm.dev;
+ struct pci_dev *pdev = to_pci_dev(dev);
+
+ KUNIT_EXPECT_TRUE(test, xe && drm && tile && gt && dev && pdev);
+ KUNIT_EXPECT_NULL(test, xe_any_if_tile(xe));
+ KUNIT_EXPECT_PTR_EQ(test, tile, xe_any_if_tile(tile));
+ KUNIT_EXPECT_NULL(test, xe_any_if_tile(gt));
+ KUNIT_EXPECT_NULL(test, xe_any_if_tile(drm));
+ KUNIT_EXPECT_NULL(test, xe_any_if_tile(dev));
+ KUNIT_EXPECT_NULL(test, xe_any_if_tile(pdev));
+}
+
+static void test_if_gt(struct kunit *test)
+{
+ struct xe_device *xe = test->priv;
+ struct xe_tile *tile = xe_device_get_root_tile(xe);
+ struct xe_gt *gt = tile->primary_gt;
+ struct drm_device *drm = &xe->drm;
+ struct device *dev = xe->drm.dev;
+ struct pci_dev *pdev = to_pci_dev(dev);
+
+ KUNIT_EXPECT_TRUE(test, xe && drm && tile && gt && dev && pdev);
+ KUNIT_EXPECT_NULL(test, xe_any_if_gt(xe));
+ KUNIT_EXPECT_NULL(test, xe_any_if_gt(tile));
+ KUNIT_EXPECT_PTR_EQ(test, gt, xe_any_if_gt(gt));
+ KUNIT_EXPECT_NULL(test, xe_any_if_gt(drm));
+ KUNIT_EXPECT_NULL(test, xe_any_if_gt(dev));
+ KUNIT_EXPECT_NULL(test, xe_any_if_gt(pdev));
+}
+
+static void test_to_id(struct kunit *test)
+{
+ struct xe_device *xe = test->priv;
+ struct xe_tile *tile = xe_device_get_root_tile(xe);
+ struct xe_gt *gt = tile->primary_gt;
+ struct device *dev = xe->drm.dev;
+ struct pci_dev *pdev = to_pci_dev(dev);
+ const struct xe_device *cxe = xe;
+ const struct xe_tile *ctile = tile;
+ const struct xe_gt *cgt = gt;
+
+ tile->id = 1;
+ gt->info.id = 2;
+
+ KUNIT_EXPECT_EQ(test, 0, xe_any_id(xe));
+ KUNIT_EXPECT_EQ(test, 1, xe_any_id(tile));
+ KUNIT_EXPECT_EQ(test, 2, xe_any_id(gt));
+ KUNIT_EXPECT_EQ(test, 0, xe_any_id(dev));
+ KUNIT_EXPECT_EQ(test, 0, xe_any_id(pdev));
+ KUNIT_EXPECT_EQ(test, 0, xe_any_id(cxe));
+ KUNIT_EXPECT_EQ(test, 1, xe_any_id(ctile));
+ KUNIT_EXPECT_EQ(test, 2, xe_any_id(cgt));
+}
+
+static struct kunit_case xe_any_tests[] = {
+ KUNIT_CASE(test_to_xe),
+ KUNIT_CASE(test_to_dev),
+ KUNIT_CASE(test_to_pdev),
+ KUNIT_CASE(test_to_drm),
+ KUNIT_CASE(test_if_pdev),
+ KUNIT_CASE(test_if_xe),
+ KUNIT_CASE(test_if_tile),
+ KUNIT_CASE(test_if_gt),
+ KUNIT_CASE(test_to_id),
+ {}
+};
+
+static struct kunit_suite xe_any_test_suite = {
+ .name = "xe_any",
+ .test_cases = xe_any_tests,
+ .init = xe_kunit_helper_xe_device_test_init,
+};
+
+kunit_test_suite(xe_any_test_suite);
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 18/32] drm/xe: Report 'probe blocked' error using SIGID
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (16 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 17/32] drm/xe/tests: Add kunit tests for xe_any Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-13 6:26 ` Mallesh, Koujalagi
2026-08-12 19:14 ` [PATCH v4 19/32] drm/xe: Report all probe errors " Michal Wajdeczko
` (17 subsequent siblings)
35 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Aravind Iddamsetty,
Mallesh Koujalagi
Report 'driver loading blocked' error using xe_log_info() helper.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
v2: use info severity (Aravind)
v3: drop "Probe " prefix (Mallesh)
drop redundant vendor code, update message (Michal)
---
drivers/gpu/drm/xe/xe_pci.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index 36d62927b969..b19efef1c5cd 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -25,6 +25,7 @@
#include "xe_gt_printk.h"
#include "xe_gt_sriov_vf.h"
#include "xe_guc.h"
+#include "xe_log.h"
#include "xe_mmio.h"
#include "xe_module.h"
#include "xe_pci_error.h"
@@ -1172,8 +1173,8 @@ static int xe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
}
if (id_blocked(pdev->device)) {
- dev_info(&pdev->dev, "Probe blocked for device [%04x:%04x].\n",
- pdev->vendor, pdev->device);
+ xe_log_info(pdev, PROBE, "driver loading blocked for device '%04x'\n",
+ pdev->device);
return -ENODEV;
}
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 19/32] drm/xe: Report all probe errors using SIGID
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (17 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 18/32] drm/xe: Report 'probe blocked' error using SIGID Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-13 6:50 ` Mallesh, Koujalagi
2026-08-12 19:14 ` [PATCH v4 20/32] drm/xe/survivability: Report 'boot status' " Michal Wajdeczko
` (16 subsequent siblings)
35 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Aravind Iddamsetty,
Mallesh Koujalagi, Dnyaneshwar Bhadane
For completeness, we should catch and report all probe errors, not
just the ones that have explicit error message. Split xe_pci_probe()
function after a display check to avoid reporting -EPROBE_DEFER and
use xe_log_err_fatal() helper to report all returned errors.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
Cc: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com>
---
drivers/gpu/drm/xe/xe_pci.c | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index b19efef1c5cd..ab4da1d9a9f1 100644
--- a/drivers/gpu/drm/xe/xe_pci.c
+++ b/drivers/gpu/drm/xe/xe_pci.c
@@ -1147,17 +1147,12 @@ static void xe_pci_remove(struct pci_dev *pdev)
* caller. Therefore there is no consequence on those specific callers when
* function error injection skips the whole function.
*/
+static int __xe_pci_probe(struct pci_dev *pdev, const struct xe_device_desc *desc);
static int xe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
{
- struct xe_probed_info probed_info = {};
const struct xe_device_desc *desc = (const void *)ent->driver_data;
- const struct xe_subplatform_desc *subplatform_desc;
- struct xe_device *xe;
- void *group;
int err;
- subplatform_desc = find_subplatform(desc, pdev->device);
-
xe_configfs_check_device(pdev);
if (desc->require_force_probe && !id_forced(pdev->device)) {
@@ -1181,6 +1176,26 @@ static int xe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
if (xe_display_driver_probe_defer(pdev))
return -EPROBE_DEFER;
+ err = __xe_pci_probe(pdev, desc);
+ if (err) {
+ xe_log_err_fatal(pdev, PROBE, err, "driver loading failed for device '%04x'\n",
+ pdev->device);
+ return err;
+ }
+
+ return 0;
+}
+
+static int __xe_pci_probe(struct pci_dev *pdev, const struct xe_device_desc *desc)
+{
+ const struct xe_subplatform_desc *subplatform_desc;
+ struct xe_probed_info probed_info = {};
+ struct xe_device *xe;
+ void *group;
+ int err;
+
+ subplatform_desc = find_subplatform(desc, pdev->device);
+
/* Group all devres so xe_pci_error_slot_reset() can release them as a unit. */
group = devres_open_group(&pdev->dev, NULL, GFP_KERNEL);
if (!group)
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 20/32] drm/xe/survivability: Report 'boot status' using SIGID
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (18 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 19/32] drm/xe: Report all probe errors " Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-13 8:38 ` Mallesh, Koujalagi
2026-08-12 19:14 ` [PATCH v4 21/32] drm/xe/survivability: Report 'sysfs failure' error " Michal Wajdeczko
` (15 subsequent siblings)
35 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Riana Tauro, Aravind Iddamsetty,
Mallesh Koujalagi
Report 'boot status' details using xe_log_err_fatal/info() macros.
While around, move static helper code closer to the caller and let
it take xe instead of pdev.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Riana Tauro <riana.tauro@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/xe_survivability_mode.c | 35 ++++++++++++----------
1 file changed, 19 insertions(+), 16 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
index 4c506027fa94..85b4c125a217 100644
--- a/drivers/gpu/drm/xe/xe_survivability_mode.c
+++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
@@ -14,6 +14,7 @@
#include "xe_device.h"
#include "xe_heci_gsc.h"
#include "xe_i2c.h"
+#include "xe_log.h"
#include "xe_mmio.h"
#include "xe_nvm.h"
#include "xe_pcode_api.h"
@@ -172,21 +173,6 @@ static void populate_survivability_info(struct xe_device *xe)
}
}
-static void log_survivability_info(struct pci_dev *pdev)
-{
- struct xe_device *xe = pdev_to_xe_device(pdev);
- struct xe_survivability *survivability = &xe->survivability;
- u32 *info = survivability->info;
- int id;
-
- dev_info(&pdev->dev, "Survivability Boot Status : Critical Failure (%d)\n",
- survivability->boot_status);
- for (id = 0; id < MAX_SCRATCH_REG; id++) {
- if (info[id])
- dev_info(&pdev->dev, "%s: 0x%x\n", reg_map[id], info[id]);
- }
-}
-
static int check_boot_failure(struct xe_device *xe)
{
struct xe_survivability *survivability = &xe->survivability;
@@ -429,6 +415,23 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
dev_err(&pdev->dev, "Firmware flash required, Please refer to the userspace documentation for more details!\n");
}
+static void log_survivability_info(struct xe_device *xe)
+{
+ struct xe_survivability *survivability = &xe->survivability;
+ u32 *info = survivability->info;
+ int id;
+
+ xe_log_err_fatal(xe, SURVIVABILITY, -ENXIO, "Boot Status: %s (%u)\n",
+ survivability->boot_status == CRITICAL_FAILURE ?
+ "Critical Failure" : "Other", survivability->boot_status);
+
+ for (id = 0; id < MAX_SCRATCH_REG; id++) {
+ if (!info[id])
+ continue;
+ xe_log_info(xe, SURVIVABILITY, "%s: %#x\n", reg_map[id], info[id]);
+ }
+}
+
/**
* xe_survivability_mode_boot_enable - Initialize and enable boot survivability mode
* @xe: xe device instance
@@ -452,7 +455,7 @@ int xe_survivability_mode_boot_enable(struct xe_device *xe)
* v2 supports survivability mode for critical errors
*/
if (survivability->version < 2 && survivability->boot_status == CRITICAL_FAILURE) {
- log_survivability_info(pdev);
+ log_survivability_info(xe);
return -ENXIO;
}
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 21/32] drm/xe/survivability: Report 'sysfs failure' error using SIGID
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (19 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 20/32] drm/xe/survivability: Report 'boot status' " Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-13 8:54 ` Mallesh, Koujalagi
2026-08-12 19:14 ` [PATCH v4 22/32] drm/xe/survivability: Report 'Boot Mode enabled' status " Michal Wajdeczko
` (14 subsequent siblings)
35 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Riana Tauro, Aravind Iddamsetty,
Mallesh Koujalagi
Report 'failed to create sysfs files' error using xe_log_err() helper
from all sysfs failure points and for all call sites.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Riana Tauro <riana.tauro@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/xe_survivability_mode.c | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
index 85b4c125a217..2d8c532157fd 100644
--- a/drivers/gpu/drm/xe/xe_survivability_mode.c
+++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
@@ -280,24 +280,26 @@ static int create_survivability_sysfs(struct pci_dev *pdev)
int ret;
ret = device_create_file(dev, &dev_attr_survivability_mode);
- if (ret) {
- dev_warn(dev, "Failed to create survivability sysfs files\n");
- return ret;
- }
+ if (ret)
+ goto failed;
ret = devm_add_action_or_reset(xe->drm.dev,
xe_survivability_mode_fini, xe);
if (ret)
- return ret;
+ goto failed;
/* Survivability info is not required if enabled via configfs */
if (!xe_configfs_get_survivability_mode(pdev)) {
ret = devm_device_add_group(dev, &survivability_info_group);
if (ret)
- return ret;
+ goto failed;
}
return 0;
+
+failed:
+ xe_log_err(xe, SURVIVABILITY, ret, "Failed to create sysfs files!\n");
+ return ret;
}
static int enable_boot_survivability_mode(struct pci_dev *pdev)
@@ -403,9 +405,7 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
}
populate_survivability_info(xe);
-
- if (create_survivability_sysfs(pdev))
- dev_err(&pdev->dev, "Failed to create survivability sysfs\n");
+ create_survivability_sysfs(pdev);
survivability->type = XE_SURVIVABILITY_TYPE_RUNTIME;
dev_err(&pdev->dev, "Runtime Survivability mode enabled\n");
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 22/32] drm/xe/survivability: Report 'Boot Mode enabled' status using SIGID
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (20 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 21/32] drm/xe/survivability: Report 'sysfs failure' error " Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-13 10:52 ` Mallesh, Koujalagi
2026-08-12 19:14 ` [PATCH v4 23/32] drm/xe/survivability: Report 'Runtime " Michal Wajdeczko
` (13 subsequent siblings)
35 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Riana Tauro, Aravind Iddamsetty,
Mallesh Koujalagi
Report 'Boot Mode' status or failure using various xe_log() helpers.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Riana Tauro <riana.tauro@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/xe_survivability_mode.c | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
index 2d8c532157fd..ebd288986c11 100644
--- a/drivers/gpu/drm/xe/xe_survivability_mode.c
+++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
@@ -304,14 +304,13 @@ static int create_survivability_sysfs(struct pci_dev *pdev)
static int enable_boot_survivability_mode(struct pci_dev *pdev)
{
- struct device *dev = &pdev->dev;
struct xe_device *xe = pdev_to_xe_device(pdev);
struct xe_survivability *survivability = &xe->survivability;
- int ret = 0;
+ int ret;
ret = create_survivability_sysfs(pdev);
if (ret)
- return ret;
+ goto failed;
/* Make sure xe_heci_gsc_init() and xe_i2c_probe() are aware of survivability */
survivability->mode = true;
@@ -323,19 +322,25 @@ static int enable_boot_survivability_mode(struct pci_dev *pdev)
if (survivability->fdo_mode) {
ret = xe_nvm_init(xe);
if (ret)
- goto err;
+ goto failed;
}
ret = xe_i2c_probe(xe);
if (ret)
- goto err;
+ goto failed;
- dev_err(dev, "In Survivability Mode\n");
+ if (check_boot_failure(xe))
+ xe_log_comp_fatal(pdev, SURVIVABILITY,
+ &survivability->boot_status,
+ sizeof(survivability->boot_status),
+ "Boot Mode enabled!\n");
+ else
+ xe_log_info(pdev, SURVIVABILITY, "Boot Mode enabled!\n");
return 0;
-err:
- dev_err(dev, "Failed to enable Survivability Mode\n");
+failed:
+ xe_log_err_fatal(pdev, SURVIVABILITY, ret, "Failed to enable Boot Mode!\n");
survivability->mode = false;
return ret;
}
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 23/32] drm/xe/survivability: Report 'Runtime Mode enabled' status using SIGID
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (21 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 22/32] drm/xe/survivability: Report 'Boot Mode enabled' status " Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-13 11:40 ` Mallesh, Koujalagi
2026-08-12 19:14 ` [PATCH v4 24/32] drm/xe: Report 'device wedged' errors " Michal Wajdeczko
` (12 subsequent siblings)
35 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Riana Tauro, Aravind Iddamsetty,
Mallesh Koujalagi
Report 'Runtime Mode' status using various xe_log() helpers.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Riana Tauro <riana.tauro@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/xe_survivability_mode.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
index ebd288986c11..5d3315ac735c 100644
--- a/drivers/gpu/drm/xe/xe_survivability_mode.c
+++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
@@ -18,6 +18,7 @@
#include "xe_mmio.h"
#include "xe_nvm.h"
#include "xe_pcode_api.h"
+#include "xe_printk.h"
#include "xe_vsec.h"
/**
@@ -405,7 +406,7 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
if (!IS_DGFX(xe) || IS_SRIOV_VF(xe) || xe->info.platform < XE_BATTLEMAGE) {
- dev_err(&pdev->dev, "Runtime Survivability Mode not supported\n");
+ xe_log_err(xe, SURVIVABILITY, -EOPNOTSUPP, "Runtime Mode not supported!\n");
return;
}
@@ -413,11 +414,14 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
create_survivability_sysfs(pdev);
survivability->type = XE_SURVIVABILITY_TYPE_RUNTIME;
- dev_err(&pdev->dev, "Runtime Survivability mode enabled\n");
+ xe_log_info(xe, SURVIVABILITY, "Runtime Mode enabled!\n");
xe_device_set_wedged_method(xe, DRM_WEDGE_RECOVERY_VENDOR);
xe_device_declare_wedged(xe);
- dev_err(&pdev->dev, "Firmware flash required, Please refer to the userspace documentation for more details!\n");
+
+ xe_log_info(xe, SURVIVABILITY, "Firmware flash required!\n");
+ xe_info(xe, "Please refer to the userspace documentation for more details how to flash the firmware on %s!\n",
+ xe->info.platform_name);
}
static void log_survivability_info(struct xe_device *xe)
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 24/32] drm/xe: Report 'device wedged' errors using SIGID
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (22 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 23/32] drm/xe/survivability: Report 'Runtime " Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 22:28 ` Rodrigo Vivi
2026-08-13 11:56 ` Mallesh, Koujalagi
2026-08-12 19:14 ` [PATCH v4 25/32] drm/xe/pcode: Report 'Mailbox failed' error " Michal Wajdeczko
` (11 subsequent siblings)
35 siblings, 2 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Aravind Iddamsetty,
Mallesh Koujalagi
Report 'device wedged' error using xe_log_err_fatal() helper.
Use -EIO as the error cause, as nothing else is provided here.
The hints about the recovery method and bug filing are now
separated as it only needs to be printed once.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/xe_device.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 71111ad32465..74d566693dfd 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -48,6 +48,7 @@
#include "xe_i2c.h"
#include "xe_irq.h"
#include "xe_late_bind_fw.h"
+#include "xe_log.h"
#include "xe_mmio.h"
#include "xe_module.h"
#include "xe_nvm.h"
@@ -1442,6 +1443,9 @@ void xe_device_set_wedged_method(struct xe_device *xe, unsigned long method)
xe->wedged.method = method;
}
+#define WEDGED_URL "https://docs.kernel.org/gpu/drm-uapi.html#device-wedging"
+#define XE_BUG_URL "https://gitlab.freedesktop.org/drm/xe/kernel/issues/new"
+
/**
* xe_device_declare_wedged - Declare device wedged
* @xe: xe device instance
@@ -1473,12 +1477,12 @@ void xe_device_declare_wedged(struct xe_device *xe)
if (!atomic_xchg(&xe->wedged.flag, 1)) {
xe->needs_flr_on_fini = true;
xe_pm_runtime_get_noresume(xe);
- drm_err(&xe->drm,
- "CRITICAL: Xe has declared device %s as wedged.\n"
- "IOCTLs and executions are blocked.\n"
- "For recovery procedure, refer to https://docs.kernel.org/gpu/drm-uapi.html#device-wedging\n"
- "Please file a _new_ bug report at https://gitlab.freedesktop.org/drm/xe/kernel/issues/new\n",
- dev_name(xe->drm.dev));
+
+ xe_log_err_fatal(xe, WEDGED, -EIO, "Device declared wedged!\n");
+ xe_err_once(xe, "IOCTLs and executions are now blocked!\n"
+ "For recovery procedure, refer to %s\n"
+ "Please file a _new_ bug report at %s\n",
+ WEDGED_URL, XE_BUG_URL);
}
for_each_gt(gt, xe, id)
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 25/32] drm/xe/pcode: Report 'Mailbox failed' error using SIGID
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (23 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 24/32] drm/xe: Report 'device wedged' errors " Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-13 12:10 ` Bhadane, Dnyaneshwar
2026-08-12 19:14 ` [PATCH v4 26/32] drm/xe/pcode: Report 'timeout, retrying' " Michal Wajdeczko
` (10 subsequent siblings)
35 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Riana Tauro, Aravind Iddamsetty,
Mallesh Koujalagi
Report 'Mailbox failed' error using xe_log_err() helper.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Riana Tauro <riana.tauro@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
v2: say xe_log_err() in commit msg (Mallesh)
---
drivers/gpu/drm/xe/xe_pcode.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_pcode.c b/drivers/gpu/drm/xe/xe_pcode.c
index ccc3bdeed6bb..014632e11338 100644
--- a/drivers/gpu/drm/xe/xe_pcode.c
+++ b/drivers/gpu/drm/xe/xe_pcode.c
@@ -14,6 +14,7 @@
#include "regs/xe_pmt.h"
#include "xe_assert.h"
#include "xe_device.h"
+#include "xe_log.h"
#include "xe_mmio.h"
#include "xe_pcode_api.h"
#include "xe_pm.h"
@@ -61,9 +62,7 @@ static int pcode_mailbox_status(struct xe_tile *tile)
}
if (err) {
- drm_err(&tile_to_xe(tile)->drm, "PCODE Mailbox failed: %d %s",
- err_decode, err_str);
-
+ xe_log_err(tile, PCODE, err_decode, "Mailbox failed: %s\n", err_str);
return err_decode;
}
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 26/32] drm/xe/pcode: Report 'timeout, retrying' error using SIGID
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (24 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 25/32] drm/xe/pcode: Report 'Mailbox failed' error " Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:51 ` sashiko-bot
2026-08-13 16:46 ` Umesh Nerlige Ramappa
2026-08-12 19:14 ` [PATCH v4 27/32] drm/xe/pcode: Report 'initialization timedout' " Michal Wajdeczko
` (9 subsequent siblings)
35 siblings, 2 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Riana Tauro, Aravind Iddamsetty,
Mallesh Koujalagi
Report 'timeout, retrying with preemption disabled' error using
xe_log_err() helper.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Riana Tauro <riana.tauro@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/xe_pcode.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_pcode.c b/drivers/gpu/drm/xe/xe_pcode.c
index 014632e11338..14b13a11d1d6 100644
--- a/drivers/gpu/drm/xe/xe_pcode.c
+++ b/drivers/gpu/drm/xe/xe_pcode.c
@@ -218,8 +218,7 @@ int xe_pcode_request(struct xe_tile *tile, u32 mbox, u32 request,
* requests, and for any quirks of the PCODE firmware that delays
* the request completion.
*/
- drm_err(&tile_to_xe(tile)->drm,
- "PCODE timeout, retrying with preemption disabled\n");
+ xe_log_err(tile, PCODE, ret, "timeout, retrying with preemption disabled\n");
preempt_disable();
ret = pcode_try_request(tile, mbox, request, reply_mask, reply, &status,
true, 50 * 1000, true);
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 27/32] drm/xe/pcode: Report 'initialization timedout' error using SIGID
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (25 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 26/32] drm/xe/pcode: Report 'timeout, retrying' " Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:49 ` sashiko-bot
2026-08-12 19:14 ` [PATCH v4 28/32] drm/xe/guc: Report 'GuC mmio' errors " Michal Wajdeczko
` (8 subsequent siblings)
35 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Riana Tauro, Aravind Iddamsetty,
Mallesh Koujalagi, Umesh Nerlige Ramappa
Report 'initialization timedout' error using xe_log_err() helper.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Riana Tauro <riana.tauro@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
---
drivers/gpu/drm/xe/xe_pcode.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_pcode.c b/drivers/gpu/drm/xe/xe_pcode.c
index 14b13a11d1d6..e1b8062541a9 100644
--- a/drivers/gpu/drm/xe/xe_pcode.c
+++ b/drivers/gpu/drm/xe/xe_pcode.c
@@ -297,7 +297,7 @@ int xe_pcode_ready(struct xe_device *xe, bool locked)
{
u32 status, request = DGFX_GET_INIT_STATUS;
struct xe_tile *tile = xe_device_get_root_tile(xe);
- int timeout_us = 180000000; /* 3 min */
+ long timeout_us = 3 * 60 * USEC_PER_SEC; /* 3 min */
int ret;
if (xe->info.skip_pcode)
@@ -318,8 +318,8 @@ int xe_pcode_ready(struct xe_device *xe, bool locked)
mutex_unlock(&tile->pcode.lock);
if (ret)
- drm_err(&xe->drm,
- "PCODE initialization timedout after: 3 min\n");
+ xe_log_err(tile, PCODE, ret, "initialization timedout after %ld seconds\n",
+ timeout_us / USEC_PER_SEC);
return ret;
}
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 28/32] drm/xe/guc: Report 'GuC mmio' errors using SIGID
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (26 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 27/32] drm/xe/pcode: Report 'initialization timedout' " Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 29/32] drm/xe/gt: Report 'reset failed' " Michal Wajdeczko
` (7 subsequent siblings)
35 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Daniele Ceraolo Spurio,
Aravind Iddamsetty, Mallesh Koujalagi
Report various 'GuC mmio' errors using xe_log() helpers.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/xe_guc.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
index 4286bd05c686..c7f8bbd4cb92 100644
--- a/drivers/gpu/drm/xe/xe_guc.c
+++ b/drivers/gpu/drm/xe/xe_guc.c
@@ -39,6 +39,7 @@
#include "xe_guc_rc.h"
#include "xe_guc_relay.h"
#include "xe_guc_submit.h"
+#include "xe_log.h"
#include "xe_memirq.h"
#include "xe_mmio.h"
#include "xe_platform_types.h"
@@ -1542,8 +1543,9 @@ int xe_guc_mmio_send_recv(struct xe_guc *guc, const u32 *request,
/* scratch registers might be cleared during FLR, try once more */
if (!header) {
if (++lost > MAX_RETRIES_ON_FLR) {
- xe_gt_err(gt, "GuC mmio request %#x: lost, too many retries %u\n",
- request[0], lost);
+ xe_log_err(gt, GUC, -ENOLINK,
+ "MMIO request %#x: lost, too many retries %u\n",
+ request[0], lost);
return -ENOLINK;
}
xe_gt_dbg(gt, "GuC mmio request %#x: lost, trying again\n", request[0]);
@@ -1551,8 +1553,8 @@ int xe_guc_mmio_send_recv(struct xe_guc *guc, const u32 *request,
goto retry;
}
timeout:
- xe_gt_err(gt, "GuC mmio request %#x: no reply %#x\n",
- request[0], header);
+ xe_log_err(gt, GUC, ret, "MMIO request %#x: no reply %#x\n",
+ request[0], header);
return ret;
}
@@ -1607,16 +1609,16 @@ int xe_guc_mmio_send_recv(struct xe_guc *guc, const u32 *request,
return -EREMCHG;
}
- xe_gt_err(gt, "GuC mmio request %#x: failure %#x hint %#x\n",
- request[0], error, hint);
+ xe_log_err(gt, GUC, -ENXIO, "MMIO request %#x: failure %#x hint %#x\n",
+ request[0], error, hint);
return -ENXIO;
}
if (FIELD_GET(GUC_HXG_MSG_0_TYPE, header) !=
GUC_HXG_TYPE_RESPONSE_SUCCESS) {
proto:
- xe_gt_err(gt, "GuC mmio request %#x: unexpected reply %#x\n",
- request[0], header);
+ xe_log_err(gt, GUC, -EPROTO, "MMIO request %#x: unexpected reply %#x\n",
+ request[0], header);
return -EPROTO;
}
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 29/32] drm/xe/gt: Report 'reset failed' errors using SIGID
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (27 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 28/32] drm/xe/guc: Report 'GuC mmio' errors " Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 30/32] drm/xe/gt: Report 'Fault response' pagefault error " Michal Wajdeczko
` (6 subsequent siblings)
35 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Matthew Brost,
Daniele Ceraolo Spurio, Aravind Iddamsetty, Mallesh Koujalagi
Report 'reset' related err/info messages using xe_log() helpers.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/xe_gt.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
index dfdacc0f6de9..6805e0d3bf21 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -48,6 +48,7 @@
#include "xe_hw_engine_class_sysfs.h"
#include "xe_irq.h"
#include "xe_lmtt.h"
+#include "xe_log.h"
#include "xe_lrc.h"
#include "xe_map.h"
#include "xe_migrate.h"
@@ -925,7 +926,7 @@ static void gt_reset_worker(struct work_struct *w)
if (!xe_device_uc_enabled(gt_to_xe(gt)))
goto err_pm_put;
- xe_gt_info(gt, "reset started\n");
+ xe_log_info(gt, GT, "reset started\n");
if (xe_fault_gt_reset()) {
err = -ECANCELED;
@@ -964,7 +965,7 @@ static void gt_reset_worker(struct work_struct *w)
/* Pair with get while enqueueing the work in xe_gt_reset_async() */
xe_pm_runtime_put(gt_to_xe(gt));
- xe_gt_info(gt, "reset done\n");
+ xe_log_info(gt, GT, "reset done\n");
return;
@@ -973,7 +974,7 @@ static void gt_reset_worker(struct work_struct *w)
XE_WARN_ON(xe_uc_start(>->uc));
err_fail:
- xe_gt_err(gt, "reset failed (%pe)\n", ERR_PTR(err));
+ xe_log_err_fatal(gt, GT, err, "reset failed\n");
xe_device_declare_wedged(gt_to_xe(gt));
err_pm_put:
xe_pm_runtime_put(gt_to_xe(gt));
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 30/32] drm/xe/gt: Report 'Fault response' pagefault error using SIGID
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (28 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 29/32] drm/xe/gt: Report 'reset failed' " Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 31/32] drm/xe/gt: Report 'Queue full' " Michal Wajdeczko
` (5 subsequent siblings)
35 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Matthew Brost,
Daniele Ceraolo Spurio, Aravind Iddamsetty, Mallesh Koujalagi
Report 'Unsuccessful response' error using xe_log_err() helper.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
v2: rebased (Michal) reword message (Mallesh)
---
drivers/gpu/drm/xe/xe_pagefault.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_pagefault.c b/drivers/gpu/drm/xe/xe_pagefault.c
index 7e829c61387f..eb600c466187 100644
--- a/drivers/gpu/drm/xe/xe_pagefault.c
+++ b/drivers/gpu/drm/xe/xe_pagefault.c
@@ -14,6 +14,7 @@
#include "xe_gt_types.h"
#include "xe_gt_stats.h"
#include "xe_hw_engine.h"
+#include "xe_log.h"
#include "xe_pagefault.h"
#include "xe_pagefault_types.h"
#include "xe_svm.h"
@@ -625,8 +626,7 @@ static void xe_pagefault_queue_work(struct work_struct *w)
xe_pagefault_save_to_vm(gt_to_xe(gt), pf);
xe_pagefault_cache_start_invalidate(cache_start);
xe_pagefault_print(pf);
- xe_gt_info(pf->gt, "Fault response: Unsuccessful %pe\n",
- ERR_PTR(err));
+ xe_log_err(pf->gt, PAGEFAULT, err, "Unsuccessful response\n");
} else {
xe_gt_stats_incr(pf->gt, XE_GT_STATS_ID_INVALID_PREFETCH_PAGEFAULT_COUNT, 1);
xe_gt_dbg(pf->gt, "Prefetch Fault response: Unsuccessful %pe\n",
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 31/32] drm/xe/gt: Report 'Queue full' pagefault error using SIGID
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (29 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 30/32] drm/xe/gt: Report 'Fault response' pagefault error " Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-13 17:25 ` Rodrigo Vivi
2026-08-12 19:14 ` [PATCH v4 32/32] drm/xe/pci: Report 'cannot re-enable' " Michal Wajdeczko
` (4 subsequent siblings)
35 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Matthew Brost,
Daniele Ceraolo Spurio, Aravind Iddamsetty, Mallesh Koujalagi
Report 'Queue full' error using xe_log_err() helper.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/xe_pagefault.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_pagefault.c b/drivers/gpu/drm/xe/xe_pagefault.c
index eb600c466187..f0e173a251e4 100644
--- a/drivers/gpu/drm/xe/xe_pagefault.c
+++ b/drivers/gpu/drm/xe/xe_pagefault.c
@@ -328,8 +328,10 @@ xe_pagefault_queue_add(struct xe_pagefault_queue *pf_queue,
do {
/* Not possible, warn on and drop page fault */
- if (WARN_ON(xe_pagefault_queue_full(pf_queue)))
+ if (WARN_ON_ONCE(xe_pagefault_queue_full(pf_queue))) {
+ xe_log_err(xe, PAGEFAULT, -ENOSPC, "Queue full!\n");
return NULL;
+ }
lpf = (pf_queue->data + pf_queue->head);
pf_queue->head = (pf_queue->head + xe_pagefault_entry_size()) %
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* [PATCH v4 32/32] drm/xe/pci: Report 'cannot re-enable' error using SIGID
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (30 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 31/32] drm/xe/gt: Report 'Queue full' " Michal Wajdeczko
@ 2026-08-12 19:14 ` Michal Wajdeczko
2026-08-13 17:21 ` Rodrigo Vivi
2026-08-12 19:22 ` ✗ CI.checkpatch: warning for drm/xe: Add structured SIGID error logging infrastructure (rev4) Patchwork
` (3 subsequent siblings)
35 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-12 19:14 UTC (permalink / raw)
To: intel-xe
Cc: Michal Wajdeczko, Rodrigo Vivi, Riana Tauro, Aravind Iddamsetty,
Mallesh Koujalagi
Report 'cannot re-enable PCI device' error using xe_log() helper.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Riana Tauro <riana.tauro@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/xe_pci_error.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_pci_error.c b/drivers/gpu/drm/xe/xe_pci_error.c
index e41af2ac7f23..fb965f52be5e 100644
--- a/drivers/gpu/drm/xe/xe_pci_error.c
+++ b/drivers/gpu/drm/xe/xe_pci_error.c
@@ -7,6 +7,7 @@
#include "xe_device.h"
#include "xe_gt.h"
+#include "xe_log.h"
#include "xe_pci.h"
#include "xe_pm.h"
#include "xe_printk.h"
@@ -90,13 +91,15 @@ static pci_ers_result_t xe_pci_error_slot_reset(struct pci_dev *pdev)
{
const struct pci_device_id *ent = pci_match_id(pdev->driver->id_table, pdev);
struct xe_device *xe = pdev_to_xe_device(pdev);
+ int err;
xe_info(xe, "PCI error: slot reset\n");
pci_restore_state(pdev);
- if (pci_enable_device(pdev)) {
- xe_err(xe, "Cannot re-enable PCI device after reset\n");
+ err = pci_enable_device(pdev);
+ if (err) {
+ xe_log_err_fatal(xe, PCI, err, "Cannot re-enable PCI device after reset\n");
return PCI_ERS_RESULT_DISCONNECT;
}
--
2.47.1
^ permalink raw reply related [flat|nested] 73+ messages in thread
* ✗ CI.checkpatch: warning for drm/xe: Add structured SIGID error logging infrastructure (rev4)
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (31 preceding siblings ...)
2026-08-12 19:14 ` [PATCH v4 32/32] drm/xe/pci: Report 'cannot re-enable' " Michal Wajdeczko
@ 2026-08-12 19:22 ` Patchwork
2026-08-12 19:24 ` ✓ CI.KUnit: success " Patchwork
` (2 subsequent siblings)
35 siblings, 0 replies; 73+ messages in thread
From: Patchwork @ 2026-08-12 19:22 UTC (permalink / raw)
To: Michal Wajdeczko; +Cc: intel-xe
== Series Details ==
Series: drm/xe: Add structured SIGID error logging infrastructure (rev4)
URL : https://patchwork.freedesktop.org/series/171022/
State : warning
== Summary ==
+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
061140b9bc586ae7f40abc1249c97e1cc72d1b9d
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 08c65472290df95ed8b8b2f9230739e07a5c91e6
Author: Michal Wajdeczko <michal.wajdeczko@intel.com>
Date: Wed Aug 12 21:14:48 2026 +0200
drm/xe/pci: Report 'cannot re-enable' error using SIGID
Report 'cannot re-enable PCI device' error using xe_log() helper.
Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Riana Tauro <riana.tauro@intel.com>
Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
+ /mt/dim checkpatch 43db79ba5c8eac68b393cca2faa0b13a6505de1a drm-intel
9a9e651fdd25 drm/xe: Introduce xe_any helpers
-:24: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#24:
new file mode 100644
-:39: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#39: FILE: drivers/gpu/drm/xe/xe_any.h:11:
+#define __xe_any_to_self_assoc(type, any) \
+ const type * : (any), \
+ type * : (any)
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.
-:39: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'any' - possible side-effects?
#39: FILE: drivers/gpu/drm/xe/xe_any.h:11:
+#define __xe_any_to_self_assoc(type, any) \
+ const type * : (any), \
+ type * : (any)
-:50: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'any' - possible side-effects?
#50: FILE: drivers/gpu/drm/xe/xe_any.h:22:
+#define xe_any_if_type(any, type) \
+ _Generic((any), \
+ __xe_any_to_self_assoc(type, (any)), \
+ default : NULL)
-:53: WARNING:TABSTOP: Statements should start on a tabstop
#53: FILE: drivers/gpu/drm/xe/xe_any.h:25:
+ default : NULL)
-:53: ERROR:TRAILING_STATEMENTS: trailing statements should be on next line
#53: FILE: drivers/gpu/drm/xe/xe_any.h:25:
+ default : NULL)
-:87: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'const' - possible side-effects?
#87: FILE: drivers/gpu/drm/xe/xe_any.h:59:
+#define __xe_any_to_other_assoc(const, from, other, p) \
+ const struct from * : __##from##_to_##other((const struct from *)(p))
-:87: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'from' - possible side-effects?
#87: FILE: drivers/gpu/drm/xe/xe_any.h:59:
+#define __xe_any_to_other_assoc(const, from, other, p) \
+ const struct from * : __##from##_to_##other((const struct from *)(p))
-:87: CHECK:MACRO_ARG_PRECEDENCE: Macro argument 'from' may be better as '(from)' to avoid precedence issues
#87: FILE: drivers/gpu/drm/xe/xe_any.h:59:
+#define __xe_any_to_other_assoc(const, from, other, p) \
+ const struct from * : __##from##_to_##other((const struct from *)(p))
-:103: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'any' - possible side-effects?
#103: FILE: drivers/gpu/drm/xe/xe_any.h:75:
+#define xe_any_to_xe(any) \
+ _Generic((any), \
+ __xe_any_to_self_assoc(struct xe_device, (any)), \
+ __xe_any_to_other_assoc(/* */, xe_tile, xe_device, (any)), \
+ __xe_any_to_other_assoc(const, xe_tile, xe_device, (any)), \
+ __xe_any_to_other_assoc(/* */, xe_gt, xe_device, (any)), \
+ __xe_any_to_other_assoc(const, xe_gt, xe_device, (any)), \
+ __xe_any_to_other_assoc(, drm_device, xe_device, (any)), \
+ __xe_any_to_other_assoc(, pci_dev, xe_device, (any)), \
+ __xe_any_to_other_assoc(, device, xe_device, (any)))
-:120: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'any' - possible side-effects?
#120: FILE: drivers/gpu/drm/xe/xe_any.h:92:
+#define xe_any_to_drm(any) \
+ _Generic((any), \
+ __xe_any_to_self_assoc(struct drm_device, (any)), \
+ default : &xe_any_to_xe(any)->drm)
-:123: WARNING:TABSTOP: Statements should start on a tabstop
#123: FILE: drivers/gpu/drm/xe/xe_any.h:95:
+ default : &xe_any_to_xe(any)->drm)
-:123: ERROR:TRAILING_STATEMENTS: trailing statements should be on next line
#123: FILE: drivers/gpu/drm/xe/xe_any.h:95:
+ default : &xe_any_to_xe(any)->drm)
-:131: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'any' - possible side-effects?
#131: FILE: drivers/gpu/drm/xe/xe_any.h:103:
+#define xe_any_to_dev(any) \
+ _Generic((any), \
+ __xe_any_to_self_assoc(struct device, (any)), \
+ __xe_any_to_other_assoc(, pci_dev, device, (any)), \
+ default : xe_any_to_drm(any)->dev)
-:135: WARNING:TABSTOP: Statements should start on a tabstop
#135: FILE: drivers/gpu/drm/xe/xe_any.h:107:
+ default : xe_any_to_drm(any)->dev)
-:135: ERROR:TRAILING_STATEMENTS: trailing statements should be on next line
#135: FILE: drivers/gpu/drm/xe/xe_any.h:107:
+ default : xe_any_to_drm(any)->dev)
-:143: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'any' - possible side-effects?
#143: FILE: drivers/gpu/drm/xe/xe_any.h:115:
+#define xe_any_to_pdev(any) \
+ _Generic((any), \
+ __xe_any_to_self_assoc(struct pci_dev, (any)), \
+ default : to_pci_dev(xe_any_to_dev(any)))
-:146: WARNING:TABSTOP: Statements should start on a tabstop
#146: FILE: drivers/gpu/drm/xe/xe_any.h:118:
+ default : to_pci_dev(xe_any_to_dev(any)))
-:146: ERROR:TRAILING_STATEMENTS: trailing statements should be on next line
#146: FILE: drivers/gpu/drm/xe/xe_any.h:118:
+ default : to_pci_dev(xe_any_to_dev(any)))
-:157: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'any' - possible side-effects?
#157: FILE: drivers/gpu/drm/xe/xe_any.h:129:
+#define xe_any_id(any) \
+ _Generic((any), \
+ __xe_any_to_other_assoc(/* */, xe_tile, id, (any)), \
+ __xe_any_to_other_assoc(const, xe_tile, id, (any)), \
+ __xe_any_to_other_assoc(/* */, xe_gt, id, (any)), \
+ __xe_any_to_other_assoc(const, xe_gt, id, (any)), \
+ default : 0)
-:163: WARNING:TABSTOP: Statements should start on a tabstop
#163: FILE: drivers/gpu/drm/xe/xe_any.h:135:
+ default : 0)
-:163: ERROR:TRAILING_STATEMENTS: trailing statements should be on next line
#163: FILE: drivers/gpu/drm/xe/xe_any.h:135:
+ default : 0)
total: 6 errors, 6 warnings, 10 checks, 137 lines checked
e4feac4d1fa3 drm/xe/log: Add structured SIGID error logging infrastructure
-:37: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#37:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 342 lines checked
70d69beed1d4 drm/xe/log: Introduce structured component/location identifiers
-:18: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#18:
new file mode 100644
-:154: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#154: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:132:
+#define DEFINE_XE_LOG_COMPONENTS(define) \
+ /* */ \
+ define(SYSTEM, 1, PCI, SW, "Linux PCI Subsystem") \
+ define(SYSTEM, 2, DRM, SW, "DRM") \
+ /* */ \
+ define(DRIVER, 1, XE, SW, "Xe Driver") \
+ define(DRIVER, 2, PROBE, PROBE, "Driver Initialization") \
+ define(DRIVER, 3, WEDGED, WEDGED, "Device Malfunction") \
+ define(DRIVER, 4, RTP, SW, "Register Table Processing") \
+ define(DRIVER, 5, WA, SW, "Workarounds") \
+ define(DRIVER, 6, PAGEFAULT, MEM_FAULT, "Page Fault") \
+ /* */ \
+ define(DRIVER_HARDWARE, 1, REGS, IO_BUS, "Registers") \
+ define(DRIVER_HARDWARE, 2, GGTT, IO_BUS, "Global GTT") \
+ define(DRIVER_HARDWARE, 3, GT, GT_TDR, "Graphics Technology") \
+ define(DRIVER_HARDWARE, 4, LMTT, IO_BUS, "LMEM Translation Table") \
+ define(DRIVER_HARDWARE, 5, MEMIRQ, IO_BUS, "Memory Based IRQ") \
+ /* */ \
+ define(DRIVER_FEATURE, 1, PF, SW, "SR-IOV Physical Function") \
+ define(DRIVER_FEATURE, 2, VF, SW, "SR-IOV Virtual Function") \
+ define(DRIVER_FEATURE, 3, SURVIVABILITY, SURVIVABILITY, "Survivability") \
+ define(DRIVER_FEATURE, 4, RAS, SW, "Reliability, Accessibility, Serviceability") \
+ /* */ \
+ define(DRIVER_FIRMWARE, 1, GUC, RUNTIME_FW, "GuC") \
+ define(DRIVER_FIRMWARE, 2, HUC, RUNTIME_FW, "HuC") \
+ define(DRIVER_FIRMWARE, 3, GSC, RUNTIME_FW, "GSC") \
+ define(DRIVER_FIRMWARE, 16, PCODE, DEVICE_FW, "PCode") \
+ define(DRIVER_FIRMWARE, 17, SYSCTRL, DEVICE_FW, "System Controller") \
+ /* eod */
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.
-:154: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'define' - possible side-effects?
#154: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:132:
+#define DEFINE_XE_LOG_COMPONENTS(define) \
+ /* */ \
+ define(SYSTEM, 1, PCI, SW, "Linux PCI Subsystem") \
+ define(SYSTEM, 2, DRM, SW, "DRM") \
+ /* */ \
+ define(DRIVER, 1, XE, SW, "Xe Driver") \
+ define(DRIVER, 2, PROBE, PROBE, "Driver Initialization") \
+ define(DRIVER, 3, WEDGED, WEDGED, "Device Malfunction") \
+ define(DRIVER, 4, RTP, SW, "Register Table Processing") \
+ define(DRIVER, 5, WA, SW, "Workarounds") \
+ define(DRIVER, 6, PAGEFAULT, MEM_FAULT, "Page Fault") \
+ /* */ \
+ define(DRIVER_HARDWARE, 1, REGS, IO_BUS, "Registers") \
+ define(DRIVER_HARDWARE, 2, GGTT, IO_BUS, "Global GTT") \
+ define(DRIVER_HARDWARE, 3, GT, GT_TDR, "Graphics Technology") \
+ define(DRIVER_HARDWARE, 4, LMTT, IO_BUS, "LMEM Translation Table") \
+ define(DRIVER_HARDWARE, 5, MEMIRQ, IO_BUS, "Memory Based IRQ") \
+ /* */ \
+ define(DRIVER_FEATURE, 1, PF, SW, "SR-IOV Physical Function") \
+ define(DRIVER_FEATURE, 2, VF, SW, "SR-IOV Virtual Function") \
+ define(DRIVER_FEATURE, 3, SURVIVABILITY, SURVIVABILITY, "Survivability") \
+ define(DRIVER_FEATURE, 4, RAS, SW, "Reliability, Accessibility, Serviceability") \
+ /* */ \
+ define(DRIVER_FIRMWARE, 1, GUC, RUNTIME_FW, "GuC") \
+ define(DRIVER_FIRMWARE, 2, HUC, RUNTIME_FW, "HuC") \
+ define(DRIVER_FIRMWARE, 3, GSC, RUNTIME_FW, "GSC") \
+ define(DRIVER_FIRMWARE, 16, PCODE, DEVICE_FW, "PCode") \
+ define(DRIVER_FIRMWARE, 17, SYSCTRL, DEVICE_FW, "System Controller") \
+ /* eod */
-:189: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#189: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:167:
+#define MAKE_XE_LOG_COMPONENT_ENUM(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ XE_LOG_COMPONENT_##_TAG = MAKE_XE_LOG_COMPONENT(_CLASS, (_ID)), \
+ XE_LOG_COMPONENT_##_CLASS##_##_ID = XE_LOG_COMPONENT_##_TAG, \
+ /* eod */
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.
-:189: WARNING:MACRO_ARG_UNUSED: Argument '_SIG' is not used in function-like macro
#189: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:167:
+#define MAKE_XE_LOG_COMPONENT_ENUM(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ XE_LOG_COMPONENT_##_TAG = MAKE_XE_LOG_COMPONENT(_CLASS, (_ID)), \
+ XE_LOG_COMPONENT_##_CLASS##_##_ID = XE_LOG_COMPONENT_##_TAG, \
+ /* eod */
-:189: WARNING:MACRO_ARG_UNUSED: Argument '_NAME' is not used in function-like macro
#189: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:167:
+#define MAKE_XE_LOG_COMPONENT_ENUM(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ XE_LOG_COMPONENT_##_TAG = MAKE_XE_LOG_COMPONENT(_CLASS, (_ID)), \
+ XE_LOG_COMPONENT_##_CLASS##_##_ID = XE_LOG_COMPONENT_##_TAG, \
+ /* eod */
-:202: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#202: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:180:
+#define MAKE_XE_LOG_COMPONENT_SIGID(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ XE_LOG_COMPONENT_##_TAG##_SIGID = XE_SIGID_##_SIG, \
+ /* eod */
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.
-:202: WARNING:MACRO_ARG_UNUSED: Argument '_CLASS' is not used in function-like macro
#202: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:180:
+#define MAKE_XE_LOG_COMPONENT_SIGID(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ XE_LOG_COMPONENT_##_TAG##_SIGID = XE_SIGID_##_SIG, \
+ /* eod */
-:202: WARNING:MACRO_ARG_UNUSED: Argument '_ID' is not used in function-like macro
#202: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:180:
+#define MAKE_XE_LOG_COMPONENT_SIGID(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ XE_LOG_COMPONENT_##_TAG##_SIGID = XE_SIGID_##_SIG, \
+ /* eod */
-:202: WARNING:MACRO_ARG_UNUSED: Argument '_NAME' is not used in function-like macro
#202: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:180:
+#define MAKE_XE_LOG_COMPONENT_SIGID(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ XE_LOG_COMPONENT_##_TAG##_SIGID = XE_SIGID_##_SIG, \
+ /* eod */
total: 3 errors, 6 warnings, 1 checks, 187 lines checked
f3feb2a7198b drm/xe/log: Add component/location decorations to dmesg
-:40: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#40: FILE: drivers/gpu/drm/xe/xe_log.c:26:
+#define MAKE_XE_LOG_COMPONENT_CLASS_PREFIX(_CLASS) \
+ case XE_LOG_COMPONENT_CLASS_##_CLASS: return #_CLASS "? ";
-:55: WARNING:MACRO_ARG_UNUSED: Argument '_CLASS' is not used in function-like macro
#55: FILE: drivers/gpu/drm/xe/xe_log.c:41:
+#define MAKE_XE_LOG_COMPONENT_CASE_PREFIX(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ case XE_LOG_COMPONENT_##_TAG: return #_TAG ": ";
-:55: WARNING:MACRO_ARG_UNUSED: Argument '_ID' is not used in function-like macro
#55: FILE: drivers/gpu/drm/xe/xe_log.c:41:
+#define MAKE_XE_LOG_COMPONENT_CASE_PREFIX(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ case XE_LOG_COMPONENT_##_TAG: return #_TAG ": ";
-:55: WARNING:MACRO_ARG_UNUSED: Argument '_SIG' is not used in function-like macro
#55: FILE: drivers/gpu/drm/xe/xe_log.c:41:
+#define MAKE_XE_LOG_COMPONENT_CASE_PREFIX(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ case XE_LOG_COMPONENT_##_TAG: return #_TAG ": ";
-:55: WARNING:MACRO_ARG_UNUSED: Argument '_NAME' is not used in function-like macro
#55: FILE: drivers/gpu/drm/xe/xe_log.c:41:
+#define MAKE_XE_LOG_COMPONENT_CASE_PREFIX(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ case XE_LOG_COMPONENT_##_TAG: return #_TAG ": ";
-:55: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#55: FILE: drivers/gpu/drm/xe/xe_log.c:41:
+#define MAKE_XE_LOG_COMPONENT_CASE_PREFIX(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ case XE_LOG_COMPONENT_##_TAG: return #_TAG ": ";
total: 0 errors, 6 warnings, 0 checks, 126 lines checked
0a8ebef72139 drm/xe/log: Add SIGID log helpers for severity
5506af2cffb2 drm/xe/log: Add SIGID log helpers for location
-:45: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'any' - possible side-effects?
#45: FILE: drivers/gpu/drm/xe/xe_log.h:49:
+#define xe_log_location(any) \
+ PREP_XE_LOG_LOCATION(xe_log_location_type(any), xe_any_id(any))
total: 0 errors, 0 warnings, 1 checks, 47 lines checked
21f7f0662e9c drm/xe/log: Add SIGID log helpers for location & severity
f8c4ed0492d0 drm/xe/log: Add SIGID log helpers for components
8002a547f86a drm/xe/log: Add SIGID log helpers for component & severity
e3ba2be7f884 drm/xe/log: Add SIGID log helpers for errno-only
03b62a1d302f drm/xe/log: Index all SIGID printk messages
-:13: WARNING:COMMIT_LOG_LONG_LINE: Prefer a maximum 75 chars per line (possible unwrapped commit description?)
#13:
<3> drivers/gpu/drm/xe/xe_log.c:142 log_dmesg_vprintk "%s %s: [drm] *ERROR* %pV"
-:65: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#65: FILE: drivers/gpu/drm/xe/xe_log.h:23:
+#define __xe_log_emit_printk_index(fmt) \
+ dev_printk_index_emit(NULL, "[drm]%s SIGID=%u %s(%s)%s%s%s: " fmt);
-:68: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'fmt' - possible side-effects?
#68: FILE: drivers/gpu/drm/xe/xe_log.h:26:
+#define xe_log_emit(pdev, sev, sig, comp, loc, data, len, fmt, args...) ({ \
+ __xe_log_emit_printk_index(fmt); \
+ __xe_log_emit((pdev), (sev), (sig), (comp), (loc), (data), (len), fmt, ##args); \
+})
total: 0 errors, 2 warnings, 1 checks, 40 lines checked
eec656f53be3 drm/xe/log: Add hardware error signatures
dc9453a92f4f drm/xe/log: Extend components list with hardware items
-:25: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#25: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:136:
+#define DEFINE_XE_LOG_SOFTWARE_COMPONENTS(define) \
/* */ \
define(SYSTEM, 1, PCI, SW, "Linux PCI Subsystem") \
define(SYSTEM, 2, DRM, SW, "DRM") \
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.
-:25: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'define' - possible side-effects?
#25: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:136:
+#define DEFINE_XE_LOG_SOFTWARE_COMPONENTS(define) \
/* */ \
define(SYSTEM, 1, PCI, SW, "Linux PCI Subsystem") \
define(SYSTEM, 2, DRM, SW, "DRM") \
-:34: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#34: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:165:
+#define DEFINE_XE_LOG_HARDWARE_COMPONENTS(define) \
+ define(HARDWARE, 1, DEVICE_MEMORY, DEVICE_MEMORY, "Device Memory") \
+ define(HARDWARE, 2, CORE_COMPUTE, CORE_COMPUTE, "Core Compute") \
+ /* HARDWARE, 3, RESERVED */ \
+ define(HARDWARE, 4, PCIE, PCIE, "PCIe Interface") \
+ define(HARDWARE, 5, FABRIC, FABRIC, "Fabric") \
+ define(HARDWARE, 6, SOC_INTERNAL, SOC_INTERNAL, "SoC Internal") \
/* eod */
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.
-:34: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'define' - possible side-effects?
#34: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:165:
+#define DEFINE_XE_LOG_HARDWARE_COMPONENTS(define) \
+ define(HARDWARE, 1, DEVICE_MEMORY, DEVICE_MEMORY, "Device Memory") \
+ define(HARDWARE, 2, CORE_COMPUTE, CORE_COMPUTE, "Core Compute") \
+ /* HARDWARE, 3, RESERVED */ \
+ define(HARDWARE, 4, PCIE, PCIE, "PCIe Interface") \
+ define(HARDWARE, 5, FABRIC, FABRIC, "Fabric") \
+ define(HARDWARE, 6, SOC_INTERNAL, SOC_INTERNAL, "SoC Internal") \
/* eod */
total: 2 errors, 0 warnings, 2 checks, 24 lines checked
da1d6bdfd18d drm/xe/ras: Check RAS and LOG component definitions
ccbcce25c8fd drm/xe/kunit: Setup driver data in the test device
8c4626206f98 drm/xe/tests: Add Kunit tests for xe_log
-:16: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#16:
new file mode 100644
-:48: WARNING:MACRO_ARG_UNUSED: Argument '_CLASS' is not used in function-like macro
#48: FILE: drivers/gpu/drm/xe/tests/xe_log_kunit.c:28:
+#define make_component_tag_case(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ case XE_LOG_COMPONENT_##_TAG: return _NAME;
-:48: WARNING:MACRO_ARG_UNUSED: Argument '_ID' is not used in function-like macro
#48: FILE: drivers/gpu/drm/xe/tests/xe_log_kunit.c:28:
+#define make_component_tag_case(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ case XE_LOG_COMPONENT_##_TAG: return _NAME;
-:48: WARNING:MACRO_ARG_UNUSED: Argument '_SIG' is not used in function-like macro
#48: FILE: drivers/gpu/drm/xe/tests/xe_log_kunit.c:28:
+#define make_component_tag_case(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ case XE_LOG_COMPONENT_##_TAG: return _NAME;
-:48: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#48: FILE: drivers/gpu/drm/xe/tests/xe_log_kunit.c:28:
+#define make_component_tag_case(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ case XE_LOG_COMPONENT_##_TAG: return _NAME;
total: 0 errors, 5 warnings, 0 checks, 575 lines checked
11ca6a01a930 drm/xe/tests: Add kunit tests for xe_any
-:25: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#25:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 220 lines checked
dfaafa58c78f drm/xe: Report 'probe blocked' error using SIGID
9ca9593a8fd5 drm/xe: Report all probe errors using SIGID
ab7260857768 drm/xe/survivability: Report 'boot status' using SIGID
a1ae329226c7 drm/xe/survivability: Report 'sysfs failure' error using SIGID
acb7a9ddca31 drm/xe/survivability: Report 'Boot Mode enabled' status using SIGID
9555113f1179 drm/xe/survivability: Report 'Runtime Mode enabled' status using SIGID
1460c28e63a1 drm/xe: Report 'device wedged' errors using SIGID
227ad65d2228 drm/xe/pcode: Report 'Mailbox failed' error using SIGID
ed915805975b drm/xe/pcode: Report 'timeout, retrying' error using SIGID
19b535f69317 drm/xe/pcode: Report 'initialization timedout' error using SIGID
6ec7ae86f36b drm/xe/guc: Report 'GuC mmio' errors using SIGID
5cf4606f7590 drm/xe/gt: Report 'reset failed' errors using SIGID
9811f3d47640 drm/xe/gt: Report 'Fault response' pagefault error using SIGID
5e1412781ea6 drm/xe/gt: Report 'Queue full' pagefault error using SIGID
08c65472290d drm/xe/pci: Report 'cannot re-enable' error using SIGID
^ permalink raw reply [flat|nested] 73+ messages in thread
* ✓ CI.KUnit: success for drm/xe: Add structured SIGID error logging infrastructure (rev4)
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (32 preceding siblings ...)
2026-08-12 19:22 ` ✗ CI.checkpatch: warning for drm/xe: Add structured SIGID error logging infrastructure (rev4) Patchwork
@ 2026-08-12 19:24 ` Patchwork
2026-08-12 20:34 ` ✗ Xe.CI.BAT: failure " Patchwork
2026-08-13 2:47 ` ✗ Xe.CI.FULL: " Patchwork
35 siblings, 0 replies; 73+ messages in thread
From: Patchwork @ 2026-08-12 19:24 UTC (permalink / raw)
To: Michal Wajdeczko; +Cc: intel-xe
== Series Details ==
Series: drm/xe: Add structured SIGID error logging infrastructure (rev4)
URL : https://patchwork.freedesktop.org/series/171022/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/tests/.kunitconfig
[19:22:47] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[19:22: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
[19:23:12] Starting KUnit Kernel (1/1)...
[19:23:12] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[19:23:12] ================= gpu_buddy (13 subtests) ==================
[19:23:12] [PASSED] gpu_test_buddy_alloc_limit
[19:23:12] [PASSED] gpu_test_buddy_alloc_optimistic
[19:23:12] [PASSED] gpu_test_buddy_alloc_pessimistic
[19:23:12] [PASSED] gpu_test_buddy_alloc_pathological
[19:23:12] [PASSED] gpu_test_buddy_alloc_contiguous
[19:23:12] [PASSED] gpu_test_buddy_alloc_clear
[19:23:12] [PASSED] gpu_test_buddy_alloc_range
[19:23:12] [PASSED] gpu_test_buddy_alloc_range_bias
[19:23:12] [PASSED] gpu_test_buddy_fragmentation_performance
[19:23:12] [PASSED] gpu_test_buddy_alloc_exceeds_max_order
[19:23:12] [PASSED] gpu_test_buddy_offset_aligned_allocation
[19:23:12] [PASSED] gpu_test_buddy_subtree_offset_alignment_stress
[19:23:12] [PASSED] gpu_test_buddy_addr_to_block
[19:23:12] ==================== [PASSED] gpu_buddy ====================
[19:23:12] ============================================================
[19:23:12] Testing complete. Ran 13 tests: passed: 13
[19:23:12] Elapsed time: 25.041s total, 4.366s configuring, 20.259s building, 0.402s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[19:23:12] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[19:23:14] 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
[19:23:47] Starting KUnit Kernel (1/1)...
[19:23:47] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[19:23:48] ================== guc_buf (11 subtests) ===================
[19:23:48] [PASSED] test_smallest
[19:23:48] [PASSED] test_largest
[19:23:48] [PASSED] test_granular
[19:23:48] [PASSED] test_unique
[19:23:48] [PASSED] test_overlap
[19:23:48] [PASSED] test_reusable
[19:23:48] [PASSED] test_too_big
[19:23:48] [PASSED] test_flush
[19:23:48] [PASSED] test_lookup
[19:23:48] [PASSED] test_data
[19:23:48] [PASSED] test_class
[19:23:48] ===================== [PASSED] guc_buf =====================
[19:23:48] =================== guc_dbm (7 subtests) ===================
[19:23:48] [PASSED] test_empty
[19:23:48] [PASSED] test_default
[19:23:48] ======================== test_size ========================
[19:23:48] [PASSED] 4
[19:23:48] [PASSED] 8
[19:23:48] [PASSED] 32
[19:23:48] [PASSED] 256
[19:23:48] ==================== [PASSED] test_size ====================
[19:23:48] ======================= test_reuse ========================
[19:23:48] [PASSED] 4
[19:23:48] [PASSED] 8
[19:23:48] [PASSED] 32
[19:23:48] [PASSED] 256
[19:23:48] =================== [PASSED] test_reuse ====================
[19:23:48] =================== test_range_overlap ====================
[19:23:48] [PASSED] 4
[19:23:48] [PASSED] 8
[19:23:48] [PASSED] 32
[19:23:48] [PASSED] 256
[19:23:48] =============== [PASSED] test_range_overlap ================
[19:23:48] =================== test_range_compact ====================
[19:23:48] [PASSED] 4
[19:23:48] [PASSED] 8
[19:23:48] [PASSED] 32
[19:23:48] [PASSED] 256
[19:23:48] =============== [PASSED] test_range_compact ================
[19:23:48] ==================== test_range_spare =====================
[19:23:48] [PASSED] 4
[19:23:48] [PASSED] 8
[19:23:48] [PASSED] 32
[19:23:48] [PASSED] 256
[19:23:48] ================ [PASSED] test_range_spare =================
[19:23:48] ===================== [PASSED] guc_dbm =====================
[19:23:48] =================== guc_idm (6 subtests) ===================
[19:23:48] [PASSED] bad_init
[19:23:48] [PASSED] no_init
[19:23:48] [PASSED] init_fini
[19:23:48] [PASSED] check_used
[19:23:48] [PASSED] check_quota
[19:23:48] [PASSED] check_all
[19:23:48] ===================== [PASSED] guc_idm =====================
[19:23:48] =============== guc_klv_helpers (9 subtests) ===============
[19:23:48] [PASSED] test_count
[19:23:48] [PASSED] test_encode_u32
[19:23:48] [PASSED] test_encode_u64
[19:23:48] [PASSED] test_encode_string
[19:23:48] [PASSED] test_encode_object_raw
[19:23:48] [PASSED] test_encode_object_klv
[19:23:48] [PASSED] test_encode_object_nested
[19:23:48] [PASSED] test_encode_object_basic
[19:23:48] [PASSED] test_print
[19:23:48] ================= [PASSED] guc_klv_helpers =================
[19:23:48] =================== xe_log (4 subtests) ====================
[19:23:48] [PASSED] demo_cper
[19:23:48] [PASSED] demo_dmesg
[19:23:48] ======================= test_dmesg ========================
[19:23:48] [PASSED] test_fatal
[19:23:48] [PASSED] test_fatal_tile
[19:23:48] [PASSED] test_fatal_gt
[19:23:48] [PASSED] test_fatal_comp
[19:23:48] [PASSED] test_fatal_comp_tile
[19:23:48] [PASSED] test_fatal_comp_gt
[19:23:48] [PASSED] test_fatal_all
[19:23:48] [PASSED] test_recoverable
[19:23:48] [PASSED] test_recoverable_tile
[19:23:48] [PASSED] test_recoverable_gt
[19:23:48] [PASSED] test_recoverable_comp
[19:23:48] [PASSED] test_recoverable_comp_tile
[19:23:48] [PASSED] test_recoverable_comp_gt
[19:23:48] [PASSED] test_recoverable_all
[19:23:48] [PASSED] test_info
[19:23:48] [PASSED] test_info_tile
[19:23:48] [PASSED] test_info_gt
[19:23:48] [PASSED] test_info_comp
[19:23:48] [PASSED] test_info_comp_tile
[19:23:48] [PASSED] test_info_comp_gt
[19:23:48] [PASSED] test_info_all
[19:23:48] [PASSED] test_hw_fatal
[19:23:48] [PASSED] test_hw_recoverable
[19:23:48] [PASSED] test_hw_corrected
[19:23:48] [PASSED] test_hw_informational
[19:23:48] =================== [PASSED] test_dmesg ====================
[19:23:48] ====================== test_invalid =======================
[19:23:48] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[19:23:48] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[19:23:48] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[19:23:48] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[19:23:48] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[19:23:48] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[19:23:48] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[19:23:48] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[19:23:48] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[19:23:48] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[19:23:48] ================== [SKIPPED] test_invalid ==================
[19:23:48] ===================== [PASSED] xe_log ======================
[19:23:48] ================== no_relay (3 subtests) ===================
[19:23:48] [PASSED] xe_drops_guc2pf_if_not_ready
[19:23:48] [PASSED] xe_drops_guc2vf_if_not_ready
[19:23:48] [PASSED] xe_rejects_send_if_not_ready
[19:23:48] ==================== [PASSED] no_relay =====================
[19:23:48] ================== pf_relay (14 subtests) ==================
[19:23:48] [PASSED] pf_rejects_guc2pf_too_short
[19:23:48] [PASSED] pf_rejects_guc2pf_too_long
[19:23:48] [PASSED] pf_rejects_guc2pf_no_payload
[19:23:48] [PASSED] pf_fails_no_payload
[19:23:48] [PASSED] pf_fails_bad_origin
[19:23:48] [PASSED] pf_fails_bad_type
[19:23:48] [PASSED] pf_txn_reports_error
[19:23:48] [PASSED] pf_txn_sends_pf2guc
[19:23:48] [PASSED] pf_sends_pf2guc
[19:23:48] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[19:23:48] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[19:23:48] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[19:23:48] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[19:23:48] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[19:23:48] ==================== [PASSED] pf_relay =====================
[19:23:48] ================== vf_relay (3 subtests) ===================
[19:23:48] [PASSED] vf_rejects_guc2vf_too_short
[19:23:48] [PASSED] vf_rejects_guc2vf_too_long
[19:23:48] [PASSED] vf_rejects_guc2vf_no_payload
[19:23:48] ==================== [PASSED] vf_relay =====================
[19:23:48] ================ pf_gt_config (9 subtests) =================
[19:23:48] [PASSED] fair_contexts_1vf
[19:23:48] [PASSED] fair_doorbells_1vf
[19:23:48] [PASSED] fair_ggtt_1vf
[19:23:48] ====================== fair_vram_1vf ======================
[19:23:48] [PASSED] 3.50 GiB
[19:23:48] [PASSED] 11.5 GiB
[19:23:48] [PASSED] 15.5 GiB
[19:23:48] [PASSED] 31.5 GiB
[19:23:48] [PASSED] 63.5 GiB
[19:23:48] [PASSED] 1.91 GiB
[19:23:48] ================== [PASSED] fair_vram_1vf ==================
[19:23:48] ================ fair_vram_1vf_admin_only =================
[19:23:48] [PASSED] 3.50 GiB
[19:23:48] [PASSED] 11.5 GiB
[19:23:48] [PASSED] 15.5 GiB
[19:23:48] [PASSED] 31.5 GiB
[19:23:48] [PASSED] 63.5 GiB
[19:23:48] [PASSED] 1.91 GiB
[19:23:48] ============ [PASSED] fair_vram_1vf_admin_only =============
[19:23:48] ====================== fair_contexts ======================
[19:23:48] [PASSED] 1 VF
[19:23:48] [PASSED] 2 VFs
[19:23:48] [PASSED] 3 VFs
[19:23:48] [PASSED] 4 VFs
[19:23:48] [PASSED] 5 VFs
[19:23:48] [PASSED] 6 VFs
[19:23:48] [PASSED] 7 VFs
[19:23:48] [PASSED] 8 VFs
[19:23:48] [PASSED] 9 VFs
[19:23:48] [PASSED] 10 VFs
[19:23:48] [PASSED] 11 VFs
[19:23:48] [PASSED] 12 VFs
[19:23:48] [PASSED] 13 VFs
[19:23:48] [PASSED] 14 VFs
[19:23:48] [PASSED] 15 VFs
[19:23:48] [PASSED] 16 VFs
[19:23:48] [PASSED] 17 VFs
[19:23:48] [PASSED] 18 VFs
[19:23:48] [PASSED] 19 VFs
[19:23:48] [PASSED] 20 VFs
[19:23:48] [PASSED] 21 VFs
[19:23:48] [PASSED] 22 VFs
[19:23:48] [PASSED] 23 VFs
[19:23:48] [PASSED] 24 VFs
[19:23:48] [PASSED] 25 VFs
[19:23:48] [PASSED] 26 VFs
[19:23:48] [PASSED] 27 VFs
[19:23:48] [PASSED] 28 VFs
[19:23:48] [PASSED] 29 VFs
[19:23:48] [PASSED] 30 VFs
[19:23:48] [PASSED] 31 VFs
[19:23:48] [PASSED] 32 VFs
[19:23:48] [PASSED] 33 VFs
[19:23:48] [PASSED] 34 VFs
[19:23:48] [PASSED] 35 VFs
[19:23:48] [PASSED] 36 VFs
[19:23:48] [PASSED] 37 VFs
[19:23:48] [PASSED] 38 VFs
[19:23:48] [PASSED] 39 VFs
[19:23:48] [PASSED] 40 VFs
[19:23:48] [PASSED] 41 VFs
[19:23:48] [PASSED] 42 VFs
[19:23:48] [PASSED] 43 VFs
[19:23:48] [PASSED] 44 VFs
[19:23:48] [PASSED] 45 VFs
[19:23:48] [PASSED] 46 VFs
[19:23:48] [PASSED] 47 VFs
[19:23:48] [PASSED] 48 VFs
[19:23:48] [PASSED] 49 VFs
[19:23:48] [PASSED] 50 VFs
[19:23:48] [PASSED] 51 VFs
[19:23:48] [PASSED] 52 VFs
[19:23:48] [PASSED] 53 VFs
[19:23:48] [PASSED] 54 VFs
[19:23:48] [PASSED] 55 VFs
[19:23:48] [PASSED] 56 VFs
[19:23:48] [PASSED] 57 VFs
[19:23:48] [PASSED] 58 VFs
[19:23:48] [PASSED] 59 VFs
[19:23:48] [PASSED] 60 VFs
[19:23:48] [PASSED] 61 VFs
[19:23:48] [PASSED] 62 VFs
[19:23:48] [PASSED] 63 VFs
[19:23:48] ================== [PASSED] fair_contexts ==================
[19:23:48] ===================== fair_doorbells ======================
[19:23:48] [PASSED] 1 VF
[19:23:48] [PASSED] 2 VFs
[19:23:48] [PASSED] 3 VFs
[19:23:48] [PASSED] 4 VFs
[19:23:48] [PASSED] 5 VFs
[19:23:48] [PASSED] 6 VFs
[19:23:48] [PASSED] 7 VFs
[19:23:48] [PASSED] 8 VFs
[19:23:48] [PASSED] 9 VFs
[19:23:48] [PASSED] 10 VFs
[19:23:48] [PASSED] 11 VFs
[19:23:48] [PASSED] 12 VFs
[19:23:48] [PASSED] 13 VFs
[19:23:48] [PASSED] 14 VFs
[19:23:48] [PASSED] 15 VFs
[19:23:48] [PASSED] 16 VFs
[19:23:48] [PASSED] 17 VFs
[19:23:48] [PASSED] 18 VFs
[19:23:48] [PASSED] 19 VFs
[19:23:48] [PASSED] 20 VFs
[19:23:48] [PASSED] 21 VFs
[19:23:48] [PASSED] 22 VFs
[19:23:48] [PASSED] 23 VFs
[19:23:48] [PASSED] 24 VFs
[19:23:48] [PASSED] 25 VFs
[19:23:48] [PASSED] 26 VFs
[19:23:48] [PASSED] 27 VFs
[19:23:48] [PASSED] 28 VFs
[19:23:48] [PASSED] 29 VFs
[19:23:48] [PASSED] 30 VFs
[19:23:48] [PASSED] 31 VFs
[19:23:48] [PASSED] 32 VFs
[19:23:48] [PASSED] 33 VFs
[19:23:48] [PASSED] 34 VFs
[19:23:48] [PASSED] 35 VFs
[19:23:48] [PASSED] 36 VFs
[19:23:48] [PASSED] 37 VFs
[19:23:48] [PASSED] 38 VFs
[19:23:48] [PASSED] 39 VFs
[19:23:48] [PASSED] 40 VFs
[19:23:48] [PASSED] 41 VFs
[19:23:48] [PASSED] 42 VFs
[19:23:48] [PASSED] 43 VFs
[19:23:48] [PASSED] 44 VFs
[19:23:48] [PASSED] 45 VFs
[19:23:48] [PASSED] 46 VFs
[19:23:48] [PASSED] 47 VFs
[19:23:48] [PASSED] 48 VFs
[19:23:48] [PASSED] 49 VFs
[19:23:48] [PASSED] 50 VFs
[19:23:48] [PASSED] 51 VFs
[19:23:48] [PASSED] 52 VFs
[19:23:48] [PASSED] 53 VFs
[19:23:48] [PASSED] 54 VFs
[19:23:48] [PASSED] 55 VFs
[19:23:48] [PASSED] 56 VFs
[19:23:48] [PASSED] 57 VFs
[19:23:48] [PASSED] 58 VFs
[19:23:48] [PASSED] 59 VFs
[19:23:48] [PASSED] 60 VFs
[19:23:48] [PASSED] 61 VFs
[19:23:48] [PASSED] 62 VFs
[19:23:48] [PASSED] 63 VFs
[19:23:48] ================= [PASSED] fair_doorbells ==================
[19:23:48] ======================== fair_ggtt ========================
[19:23:48] [PASSED] 1 VF
[19:23:48] [PASSED] 2 VFs
[19:23:48] [PASSED] 3 VFs
[19:23:48] [PASSED] 4 VFs
[19:23:48] [PASSED] 5 VFs
[19:23:48] [PASSED] 6 VFs
[19:23:48] [PASSED] 7 VFs
[19:23:48] [PASSED] 8 VFs
[19:23:48] [PASSED] 9 VFs
[19:23:48] [PASSED] 10 VFs
[19:23:48] [PASSED] 11 VFs
[19:23:48] [PASSED] 12 VFs
[19:23:48] [PASSED] 13 VFs
[19:23:48] [PASSED] 14 VFs
[19:23:48] [PASSED] 15 VFs
[19:23:48] [PASSED] 16 VFs
[19:23:48] [PASSED] 17 VFs
[19:23:48] [PASSED] 18 VFs
[19:23:48] [PASSED] 19 VFs
[19:23:48] [PASSED] 20 VFs
[19:23:48] [PASSED] 21 VFs
[19:23:48] [PASSED] 22 VFs
[19:23:48] [PASSED] 23 VFs
[19:23:48] [PASSED] 24 VFs
[19:23:48] [PASSED] 25 VFs
[19:23:48] [PASSED] 26 VFs
[19:23:48] [PASSED] 27 VFs
[19:23:48] [PASSED] 28 VFs
[19:23:48] [PASSED] 29 VFs
[19:23:48] [PASSED] 30 VFs
[19:23:48] [PASSED] 31 VFs
[19:23:48] [PASSED] 32 VFs
[19:23:48] [PASSED] 33 VFs
[19:23:48] [PASSED] 34 VFs
[19:23:48] [PASSED] 35 VFs
[19:23:48] [PASSED] 36 VFs
[19:23:48] [PASSED] 37 VFs
[19:23:48] [PASSED] 38 VFs
[19:23:48] [PASSED] 39 VFs
[19:23:48] [PASSED] 40 VFs
[19:23:48] [PASSED] 41 VFs
[19:23:48] [PASSED] 42 VFs
[19:23:48] [PASSED] 43 VFs
[19:23:48] [PASSED] 44 VFs
[19:23:48] [PASSED] 45 VFs
[19:23:48] [PASSED] 46 VFs
[19:23:48] [PASSED] 47 VFs
[19:23:48] [PASSED] 48 VFs
[19:23:48] [PASSED] 49 VFs
[19:23:48] [PASSED] 50 VFs
[19:23:48] [PASSED] 51 VFs
[19:23:48] [PASSED] 52 VFs
[19:23:48] [PASSED] 53 VFs
[19:23:48] [PASSED] 54 VFs
[19:23:48] [PASSED] 55 VFs
[19:23:48] [PASSED] 56 VFs
[19:23:48] [PASSED] 57 VFs
[19:23:48] [PASSED] 58 VFs
[19:23:48] [PASSED] 59 VFs
[19:23:48] [PASSED] 60 VFs
[19:23:48] [PASSED] 61 VFs
[19:23:48] [PASSED] 62 VFs
[19:23:48] [PASSED] 63 VFs
[19:23:48] ==================== [PASSED] fair_ggtt ====================
[19:23:48] ======================== fair_vram ========================
[19:23:48] [PASSED] 1 VF
[19:23:48] [PASSED] 2 VFs
[19:23:48] [PASSED] 3 VFs
[19:23:48] [PASSED] 4 VFs
[19:23:48] [PASSED] 5 VFs
[19:23:48] [PASSED] 6 VFs
[19:23:48] [PASSED] 7 VFs
[19:23:48] [PASSED] 8 VFs
[19:23:48] [PASSED] 9 VFs
[19:23:48] [PASSED] 10 VFs
[19:23:48] [PASSED] 11 VFs
[19:23:48] [PASSED] 12 VFs
[19:23:48] [PASSED] 13 VFs
[19:23:48] [PASSED] 14 VFs
[19:23:48] [PASSED] 15 VFs
[19:23:48] [PASSED] 16 VFs
[19:23:48] [PASSED] 17 VFs
[19:23:48] [PASSED] 18 VFs
[19:23:48] [PASSED] 19 VFs
[19:23:48] [PASSED] 20 VFs
[19:23:48] [PASSED] 21 VFs
[19:23:48] [PASSED] 22 VFs
[19:23:48] [PASSED] 23 VFs
[19:23:48] [PASSED] 24 VFs
[19:23:48] [PASSED] 25 VFs
[19:23:48] [PASSED] 26 VFs
[19:23:48] [PASSED] 27 VFs
[19:23:48] [PASSED] 28 VFs
[19:23:48] [PASSED] 29 VFs
[19:23:48] [PASSED] 30 VFs
[19:23:48] [PASSED] 31 VFs
[19:23:48] [PASSED] 32 VFs
[19:23:48] [PASSED] 33 VFs
[19:23:48] [PASSED] 34 VFs
[19:23:48] [PASSED] 35 VFs
[19:23:48] [PASSED] 36 VFs
[19:23:48] [PASSED] 37 VFs
[19:23:48] [PASSED] 38 VFs
[19:23:48] [PASSED] 39 VFs
[19:23:48] [PASSED] 40 VFs
[19:23:48] [PASSED] 41 VFs
[19:23:48] [PASSED] 42 VFs
[19:23:48] [PASSED] 43 VFs
[19:23:48] [PASSED] 44 VFs
[19:23:48] [PASSED] 45 VFs
[19:23:48] [PASSED] 46 VFs
[19:23:48] [PASSED] 47 VFs
[19:23:48] [PASSED] 48 VFs
[19:23:48] [PASSED] 49 VFs
[19:23:48] [PASSED] 50 VFs
[19:23:48] [PASSED] 51 VFs
[19:23:48] [PASSED] 52 VFs
[19:23:48] [PASSED] 53 VFs
[19:23:48] [PASSED] 54 VFs
[19:23:48] [PASSED] 55 VFs
[19:23:48] [PASSED] 56 VFs
[19:23:48] [PASSED] 57 VFs
[19:23:48] [PASSED] 58 VFs
[19:23:48] [PASSED] 59 VFs
[19:23:48] [PASSED] 60 VFs
[19:23:48] [PASSED] 61 VFs
[19:23:48] [PASSED] 62 VFs
[19:23:48] [PASSED] 63 VFs
[19:23:48] ==================== [PASSED] fair_vram ====================
[19:23:48] ================== [PASSED] pf_gt_config ===================
[19:23:48] ===================== lmtt (1 subtest) =====================
[19:23:48] ======================== test_ops =========================
[19:23:48] [PASSED] 2-level
[19:23:48] [PASSED] multi-level
[19:23:48] ==================== [PASSED] test_ops =====================
[19:23:48] ====================== [PASSED] lmtt =======================
[19:23:48] ================= sriov_packet (1 subtest) =================
[19:23:48] [PASSED] test_descriptor_init
[19:23:48] ================== [PASSED] sriov_packet ===================
[19:23:48] ================= pf_service (11 subtests) =================
[19:23:48] [PASSED] pf_negotiate_any
[19:23:48] [PASSED] pf_negotiate_base_match
[19:23:48] [PASSED] pf_negotiate_base_newer
[19:23:48] [PASSED] pf_negotiate_base_next
[19:23:48] [SKIPPED] pf_negotiate_base_older (no older minor)
[19:23:48] [PASSED] pf_negotiate_base_prev
[19:23:48] [PASSED] pf_negotiate_latest_match
[19:23:48] [PASSED] pf_negotiate_latest_newer
[19:23:48] [PASSED] pf_negotiate_latest_next
[19:23:48] [SKIPPED] pf_negotiate_latest_older (no older minor)
[19:23:48] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[19:23:48] =================== [PASSED] pf_service ====================
[19:23:48] ================= xe_guc_g2g (2 subtests) ==================
[19:23:48] ============== xe_live_guc_g2g_kunit_default ==============
[19:23:48] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[19:23:48] ============== xe_live_guc_g2g_kunit_allmem ===============
[19:23:48] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[19:23:48] =================== [SKIPPED] xe_guc_g2g ===================
[19:23:48] =================== xe_mocs (2 subtests) ===================
[19:23:48] ================ xe_live_mocs_kernel_kunit ================
[19:23:48] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[19:23:48] ================ xe_live_mocs_reset_kunit =================
[19:23:48] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[19:23:48] ==================== [SKIPPED] xe_mocs =====================
[19:23:48] ================= xe_migrate (2 subtests) ==================
[19:23:48] ================= xe_migrate_sanity_kunit =================
[19:23:48] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[19:23:48] ================== xe_validate_ccs_kunit ==================
[19:23:48] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[19:23:48] =================== [SKIPPED] xe_migrate ===================
[19:23:48] ================== xe_dma_buf (1 subtest) ==================
[19:23:48] ==================== xe_dma_buf_kunit =====================
[19:23:48] ================ [SKIPPED] xe_dma_buf_kunit ================
[19:23:48] =================== [SKIPPED] xe_dma_buf ===================
[19:23:48] ================= xe_bo_shrink (1 subtest) =================
[19:23:48] =================== xe_bo_shrink_kunit ====================
[19:23:48] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[19:23:48] ================== [SKIPPED] xe_bo_shrink ==================
[19:23:48] ==================== xe_bo (2 subtests) ====================
[19:23:48] ================== xe_ccs_migrate_kunit ===================
[19:23:48] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[19:23:48] ==================== xe_bo_evict_kunit ====================
[19:23:48] =============== [SKIPPED] xe_bo_evict_kunit ================
[19:23:48] ===================== [SKIPPED] xe_bo ======================
[19:23:48] =================== xe_any (9 subtests) ====================
[19:23:48] [PASSED] test_to_xe
[19:23:48] [PASSED] test_to_dev
[19:23:48] [PASSED] test_to_pdev
[19:23:48] [PASSED] test_to_drm
[19:23:48] [PASSED] test_if_pdev
[19:23:48] [PASSED] test_if_xe
[19:23:48] [PASSED] test_if_tile
[19:23:48] [PASSED] test_if_gt
[19:23:48] [PASSED] test_to_id
[19:23:48] ===================== [PASSED] xe_any ======================
[19:23:48] ==================== args (13 subtests) ====================
[19:23:48] [PASSED] count_args_test
[19:23:48] [PASSED] call_args_example
[19:23:48] [PASSED] call_args_test
[19:23:48] [PASSED] drop_first_arg_example
[19:23:48] [PASSED] drop_first_arg_test
[19:23:48] [PASSED] first_arg_example
[19:23:48] [PASSED] first_arg_test
[19:23:48] [PASSED] last_arg_example
[19:23:48] [PASSED] last_arg_test
[19:23:48] [PASSED] pick_arg_example
[19:23:48] [PASSED] if_args_example
[19:23:48] [PASSED] if_args_test
[19:23:48] [PASSED] sep_comma_example
[19:23:48] ====================== [PASSED] args =======================
[19:23:48] =================== xe_pci (3 subtests) ====================
[19:23:48] ==================== check_graphics_ip ====================
[19:23:48] [PASSED] 12.00 Xe_LP
[19:23:48] [PASSED] 12.10 Xe_LP+
[19:23:48] [PASSED] 12.55 Xe_HPG
[19:23:48] [PASSED] 12.60 Xe_HPC
[19:23:48] [PASSED] 12.70 Xe_LPG
[19:23:48] [PASSED] 12.71 Xe_LPG
[19:23:48] [PASSED] 12.74 Xe_LPG+
[19:23:48] [PASSED] 20.01 Xe2_HPG
[19:23:48] [PASSED] 20.02 Xe2_HPG
[19:23:48] [PASSED] 20.04 Xe2_LPG
[19:23:48] [PASSED] 30.00 Xe3_LPG
[19:23:48] [PASSED] 30.01 Xe3_LPG
[19:23:48] [PASSED] 30.03 Xe3_LPG
[19:23:48] [PASSED] 30.04 Xe3_LPG
[19:23:48] [PASSED] 30.05 Xe3_LPG
[19:23:48] [PASSED] 35.10 Xe3p_LPG
[19:23:48] [PASSED] 35.11 Xe3p_XPC
[19:23:48] ================ [PASSED] check_graphics_ip ================
[19:23:48] ===================== check_media_ip ======================
[19:23:48] [PASSED] 12.00 Xe_M
[19:23:48] [PASSED] 12.55 Xe_HPM
[19:23:48] [PASSED] 13.00 Xe_LPM+
[19:23:48] [PASSED] 13.01 Xe2_HPM
[19:23:48] [PASSED] 20.00 Xe2_LPM
[19:23:48] [PASSED] 30.00 Xe3_LPM
[19:23:48] [PASSED] 30.02 Xe3_LPM
[19:23:48] [PASSED] 35.00 Xe3p_LPM
[19:23:48] [PASSED] 35.03 Xe3p_HPM
[19:23:48] ================= [PASSED] check_media_ip ==================
[19:23:48] =================== check_platform_desc ===================
[19:23:48] [PASSED] 0x9A60 (TIGERLAKE)
[19:23:48] [PASSED] 0x9A68 (TIGERLAKE)
[19:23:48] [PASSED] 0x9A70 (TIGERLAKE)
[19:23:48] [PASSED] 0x9A40 (TIGERLAKE)
[19:23:48] [PASSED] 0x9A49 (TIGERLAKE)
[19:23:48] [PASSED] 0x9A59 (TIGERLAKE)
[19:23:48] [PASSED] 0x9A78 (TIGERLAKE)
[19:23:48] [PASSED] 0x9AC0 (TIGERLAKE)
[19:23:48] [PASSED] 0x9AC9 (TIGERLAKE)
[19:23:48] [PASSED] 0x9AD9 (TIGERLAKE)
[19:23:48] [PASSED] 0x9AF8 (TIGERLAKE)
[19:23:48] [PASSED] 0x4C80 (ROCKETLAKE)
[19:23:48] [PASSED] 0x4C8A (ROCKETLAKE)
[19:23:48] [PASSED] 0x4C8B (ROCKETLAKE)
[19:23:48] [PASSED] 0x4C8C (ROCKETLAKE)
[19:23:48] [PASSED] 0x4C90 (ROCKETLAKE)
[19:23:48] [PASSED] 0x4C9A (ROCKETLAKE)
[19:23:48] [PASSED] 0x4680 (ALDERLAKE_S)
[19:23:48] [PASSED] 0x4682 (ALDERLAKE_S)
[19:23:48] [PASSED] 0x4688 (ALDERLAKE_S)
[19:23:48] [PASSED] 0x468A (ALDERLAKE_S)
[19:23:48] [PASSED] 0x468B (ALDERLAKE_S)
[19:23:48] [PASSED] 0x4690 (ALDERLAKE_S)
[19:23:48] [PASSED] 0x4692 (ALDERLAKE_S)
[19:23:48] [PASSED] 0x4693 (ALDERLAKE_S)
[19:23:48] [PASSED] 0x46A0 (ALDERLAKE_P)
[19:23:48] [PASSED] 0x46A1 (ALDERLAKE_P)
[19:23:48] [PASSED] 0x46A2 (ALDERLAKE_P)
[19:23:48] [PASSED] 0x46A3 (ALDERLAKE_P)
[19:23:48] [PASSED] 0x46A6 (ALDERLAKE_P)
[19:23:48] [PASSED] 0x46A8 (ALDERLAKE_P)
[19:23:48] [PASSED] 0x46AA (ALDERLAKE_P)
[19:23:48] [PASSED] 0x462A (ALDERLAKE_P)
[19:23:48] [PASSED] 0x4626 (ALDERLAKE_P)
[19:23:48] [PASSED] 0x4628 (ALDERLAKE_P)
[19:23:48] [PASSED] 0x46B0 (ALDERLAKE_P)
[19:23:48] [PASSED] 0x46B1 (ALDERLAKE_P)
[19:23:48] [PASSED] 0x46B2 (ALDERLAKE_P)
[19:23:48] [PASSED] 0x46B3 (ALDERLAKE_P)
[19:23:48] [PASSED] 0x46C0 (ALDERLAKE_P)
[19:23:48] [PASSED] 0x46C1 (ALDERLAKE_P)
[19:23:48] [PASSED] 0x46C2 (ALDERLAKE_P)
[19:23:48] [PASSED] 0x46C3 (ALDERLAKE_P)
[19:23:48] [PASSED] 0x46D0 (ALDERLAKE_N)
[19:23:48] [PASSED] 0x46D1 (ALDERLAKE_N)
[19:23:48] [PASSED] 0x46D2 (ALDERLAKE_N)
[19:23:48] [PASSED] 0x46D3 (ALDERLAKE_N)
[19:23:48] [PASSED] 0x46D4 (ALDERLAKE_N)
[19:23:48] [PASSED] 0xA721 (ALDERLAKE_P)
[19:23:48] [PASSED] 0xA7A1 (ALDERLAKE_P)
[19:23:48] [PASSED] 0xA7A9 (ALDERLAKE_P)
[19:23:48] [PASSED] 0xA7AC (ALDERLAKE_P)
[19:23:48] [PASSED] 0xA7AD (ALDERLAKE_P)
[19:23:48] [PASSED] 0xA720 (ALDERLAKE_P)
[19:23:48] [PASSED] 0xA7A0 (ALDERLAKE_P)
[19:23:48] [PASSED] 0xA7A8 (ALDERLAKE_P)
[19:23:48] [PASSED] 0xA7AA (ALDERLAKE_P)
[19:23:48] [PASSED] 0xA7AB (ALDERLAKE_P)
[19:23:48] [PASSED] 0xA780 (ALDERLAKE_S)
[19:23:48] [PASSED] 0xA781 (ALDERLAKE_S)
[19:23:48] [PASSED] 0xA782 (ALDERLAKE_S)
[19:23:48] [PASSED] 0xA783 (ALDERLAKE_S)
[19:23:48] [PASSED] 0xA788 (ALDERLAKE_S)
[19:23:48] [PASSED] 0xA789 (ALDERLAKE_S)
[19:23:48] [PASSED] 0xA78A (ALDERLAKE_S)
[19:23:48] [PASSED] 0xA78B (ALDERLAKE_S)
[19:23:48] [PASSED] 0x4905 (DG1)
[19:23:48] [PASSED] 0x4906 (DG1)
[19:23:48] [PASSED] 0x4907 (DG1)
[19:23:48] [PASSED] 0x4908 (DG1)
[19:23:48] [PASSED] 0x4909 (DG1)
[19:23:48] [PASSED] 0x56C0 (DG2)
[19:23:48] [PASSED] 0x56C2 (DG2)
[19:23:48] [PASSED] 0x56C1 (DG2)
[19:23:48] [PASSED] 0x7D51 (METEORLAKE)
[19:23:48] [PASSED] 0x7DD1 (METEORLAKE)
[19:23:48] [PASSED] 0x7D41 (METEORLAKE)
[19:23:48] [PASSED] 0x7D67 (METEORLAKE)
[19:23:48] [PASSED] 0xB640 (METEORLAKE)
[19:23:48] [PASSED] 0x56A0 (DG2)
[19:23:48] [PASSED] 0x56A1 (DG2)
[19:23:48] [PASSED] 0x56A2 (DG2)
[19:23:48] [PASSED] 0x56BE (DG2)
[19:23:48] [PASSED] 0x56BF (DG2)
[19:23:48] [PASSED] 0x5690 (DG2)
[19:23:48] [PASSED] 0x5691 (DG2)
[19:23:48] [PASSED] 0x5692 (DG2)
[19:23:48] [PASSED] 0x56A5 (DG2)
[19:23:48] [PASSED] 0x56A6 (DG2)
[19:23:48] [PASSED] 0x56B0 (DG2)
[19:23:48] [PASSED] 0x56B1 (DG2)
[19:23:48] [PASSED] 0x56BA (DG2)
[19:23:48] [PASSED] 0x56BB (DG2)
[19:23:48] [PASSED] 0x56BC (DG2)
[19:23:48] [PASSED] 0x56BD (DG2)
[19:23:48] [PASSED] 0x5693 (DG2)
[19:23:48] [PASSED] 0x5694 (DG2)
[19:23:48] [PASSED] 0x5695 (DG2)
[19:23:48] [PASSED] 0x56A3 (DG2)
[19:23:48] [PASSED] 0x56A4 (DG2)
[19:23:48] [PASSED] 0x56B2 (DG2)
[19:23:48] [PASSED] 0x56B3 (DG2)
[19:23:48] [PASSED] 0x5696 (DG2)
[19:23:48] [PASSED] 0x5697 (DG2)
[19:23:48] [PASSED] 0xB69 (PVC)
[19:23:48] [PASSED] 0xB6E (PVC)
[19:23:48] [PASSED] 0xBD4 (PVC)
[19:23:48] [PASSED] 0xBD5 (PVC)
[19:23:48] [PASSED] 0xBD6 (PVC)
[19:23:48] [PASSED] 0xBD7 (PVC)
[19:23:48] [PASSED] 0xBD8 (PVC)
[19:23:48] [PASSED] 0xBD9 (PVC)
[19:23:48] [PASSED] 0xBDA (PVC)
[19:23:48] [PASSED] 0xBDB (PVC)
[19:23:48] [PASSED] 0xBE0 (PVC)
[19:23:48] [PASSED] 0xBE1 (PVC)
[19:23:48] [PASSED] 0xBE5 (PVC)
[19:23:48] [PASSED] 0x7D40 (METEORLAKE)
[19:23:48] [PASSED] 0x7D45 (METEORLAKE)
[19:23:48] [PASSED] 0x7D55 (METEORLAKE)
[19:23:48] [PASSED] 0x7D60 (METEORLAKE)
[19:23:48] [PASSED] 0x7DD5 (METEORLAKE)
[19:23:48] [PASSED] 0x6420 (LUNARLAKE)
[19:23:48] [PASSED] 0x64A0 (LUNARLAKE)
[19:23:48] [PASSED] 0x64B0 (LUNARLAKE)
[19:23:48] [PASSED] 0xE202 (BATTLEMAGE)
[19:23:48] [PASSED] 0xE209 (BATTLEMAGE)
[19:23:48] [PASSED] 0xE20B (BATTLEMAGE)
[19:23:48] [PASSED] 0xE20C (BATTLEMAGE)
[19:23:48] [PASSED] 0xE20D (BATTLEMAGE)
[19:23:48] [PASSED] 0xE210 (BATTLEMAGE)
[19:23:48] [PASSED] 0xE211 (BATTLEMAGE)
[19:23:48] [PASSED] 0xE212 (BATTLEMAGE)
[19:23:48] [PASSED] 0xE216 (BATTLEMAGE)
[19:23:48] [PASSED] 0xE220 (BATTLEMAGE)
[19:23:48] [PASSED] 0xE221 (BATTLEMAGE)
[19:23:48] [PASSED] 0xE222 (BATTLEMAGE)
[19:23:48] [PASSED] 0xE223 (BATTLEMAGE)
[19:23:48] [PASSED] 0xB080 (PANTHERLAKE)
[19:23:48] [PASSED] 0xB081 (PANTHERLAKE)
[19:23:48] [PASSED] 0xB082 (PANTHERLAKE)
[19:23:48] [PASSED] 0xB083 (PANTHERLAKE)
[19:23:48] [PASSED] 0xB084 (PANTHERLAKE)
[19:23:48] [PASSED] 0xB085 (PANTHERLAKE)
[19:23:48] [PASSED] 0xB086 (PANTHERLAKE)
[19:23:48] [PASSED] 0xB087 (PANTHERLAKE)
[19:23:48] [PASSED] 0xB08F (PANTHERLAKE)
[19:23:48] [PASSED] 0xB090 (PANTHERLAKE)
[19:23:48] [PASSED] 0xB0A0 (PANTHERLAKE)
[19:23:48] [PASSED] 0xB0B0 (PANTHERLAKE)
[19:23:48] [PASSED] 0xFD80 (PANTHERLAKE)
[19:23:48] [PASSED] 0xFD81 (PANTHERLAKE)
[19:23:48] [PASSED] 0xD740 (NOVALAKE_S)
[19:23:48] [PASSED] 0xD741 (NOVALAKE_S)
[19:23:48] [PASSED] 0xD742 (NOVALAKE_S)
[19:23:48] [PASSED] 0xD743 (NOVALAKE_S)
[19:23:48] [PASSED] 0xD745 (NOVALAKE_S)
[19:23:48] [PASSED] 0xD74A (NOVALAKE_S)
[19:23:48] [PASSED] 0xD74B (NOVALAKE_S)
[19:23:48] [PASSED] 0x674C (CRESCENTISLAND)
[19:23:48] [PASSED] 0x674D (CRESCENTISLAND)
[19:23:48] [PASSED] 0x674E (CRESCENTISLAND)
[19:23:48] [PASSED] 0x674F (CRESCENTISLAND)
[19:23:48] [PASSED] 0x6750 (CRESCENTISLAND)
[19:23:48] [PASSED] 0xD750 (NOVALAKE_P)
[19:23:48] [PASSED] 0xD751 (NOVALAKE_P)
[19:23:48] [PASSED] 0xD752 (NOVALAKE_P)
[19:23:48] [PASSED] 0xD753 (NOVALAKE_P)
[19:23:48] [PASSED] 0xD754 (NOVALAKE_P)
[19:23:48] [PASSED] 0xD755 (NOVALAKE_P)
[19:23:48] [PASSED] 0xD756 (NOVALAKE_P)
[19:23:48] [PASSED] 0xD757 (NOVALAKE_P)
[19:23:48] [PASSED] 0xD75F (NOVALAKE_P)
[19:23:48] =============== [PASSED] check_platform_desc ===============
[19:23:48] ===================== [PASSED] xe_pci ======================
[19:23:48] ============= xe_rtp_tables_test (5 subtests) ==============
[19:23:48] ================== xe_rtp_table_gt_test ===================
[19:23:48] [PASSED] gt_was/14011060649
[19:23:48] [PASSED] gt_was/14011059788
[19:23:48] [PASSED] gt_was/14015795083
[19:23:48] [PASSED] gt_was/16021867713
[19:23:48] [PASSED] gt_was/14019449301
[19:23:48] [PASSED] gt_was/16028005424
[19:23:48] [PASSED] gt_was/14026578760
[19:23:48] [PASSED] gt_was/1409420604
[19:23:48] [PASSED] gt_was/1408615072
[19:23:48] [PASSED] gt_was/22010523718
[19:23:48] [PASSED] gt_was/14011006942
[19:23:48] [PASSED] gt_was/14014830051
[19:23:48] [PASSED] gt_was/18018781329
[19:23:48] [PASSED] gt_was/1509235366
[19:23:48] [PASSED] gt_was/18018781329
[19:23:48] [PASSED] gt_was/16016694945
[19:23:48] [PASSED] gt_was/14018575942
[19:23:48] [PASSED] gt_was/22016670082
[19:23:48] [PASSED] gt_was/22016670082
[19:23:48] [PASSED] gt_was/14017421178
[19:23:48] [PASSED] gt_was/16025250150
[19:23:48] [PASSED] gt_was/14021871409
[19:23:48] [PASSED] gt_was/16021865536
[19:23:48] [PASSED] gt_was/14021486841
[19:23:48] [PASSED] gt_was/14025160223
[19:23:48] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[19:23:48] [PASSED] gt_was/14025635424
[19:23:48] [PASSED] gt_was/16028005424
[19:23:48] ============== [PASSED] xe_rtp_table_gt_test ===============
[19:23:48] ================== xe_rtp_table_gt_test ===================
[19:23:48] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[19:23:48] [PASSED] gt_tunings/Tuning: 32B Access Enable
[19:23:48] [PASSED] gt_tunings/Tuning: L3 cache
[19:23:48] [PASSED] gt_tunings/Tuning: L3 cache - media
[19:23:48] [PASSED] gt_tunings/Tuning: Compression Overfetch
[19:23:48] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[19:23:48] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[19:23:48] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[19:23:48] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[19:23:48] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[19:23:48] [PASSED] gt_tunings/Tuning: Stateless compression control
[19:23:48] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[19:23:48] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[19:23:48] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[19:23:48] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[19:23:48] ============== [PASSED] xe_rtp_table_gt_test ===============
[19:23:48] ================== xe_rtp_table_oob_test ==================
[19:23:48] [PASSED] oob_was/1607983814
[19:23:48] [PASSED] oob_was/16010904313
[19:23:48] [PASSED] oob_was/18022495364
[19:23:48] [PASSED] oob_was/22012773006
[19:23:48] [PASSED] oob_was/14014475959
[19:23:48] [PASSED] oob_was/22011391025
[19:23:48] [PASSED] oob_was/22012727170
[19:23:48] [PASSED] oob_was/22012727685
[19:23:48] [PASSED] oob_was/22016596838
[19:23:48] [PASSED] oob_was/18020744125
[19:23:48] [PASSED] oob_was/1409600907
[19:23:48] [PASSED] oob_was/22014953428
[19:23:48] [PASSED] oob_was/16017236439
[19:23:48] [PASSED] oob_was/14019821291
[19:23:48] [PASSED] oob_was/14015076503
[19:23:48] [PASSED] oob_was/14018913170
[19:23:48] [PASSED] oob_was/14018094691
[19:23:48] [PASSED] oob_was/18024947630
[19:23:48] [PASSED] oob_was/16022287689
[19:23:48] [PASSED] oob_was/13011645652
[19:23:48] [PASSED] oob_was/14022293748
[19:23:48] [PASSED] oob_was/22019794406
[19:23:48] [PASSED] oob_was/22019338487
[19:23:48] [PASSED] oob_was/16023588340
[19:23:48] [PASSED] oob_was/14019789679
[19:23:48] [PASSED] oob_was/14022866841
[19:23:48] [PASSED] oob_was/16021333562
[19:23:48] [PASSED] oob_was/14016712196
[19:23:48] [PASSED] oob_was/14015568240
[19:23:48] [PASSED] oob_was/18013179988
[19:23:48] [PASSED] oob_was/1508761755
[19:23:48] [PASSED] oob_was/16023105232
[19:23:48] [PASSED] oob_was/16026508708
[19:23:48] [PASSED] oob_was/14020001231
[19:23:48] [PASSED] oob_was/16023683509
[19:23:48] [PASSED] oob_was/14025515070
[19:23:48] [PASSED] oob_was/15015404425_disable
[19:23:48] [PASSED] oob_was/16026007364
[19:23:48] [PASSED] oob_was/14020316580
[19:23:48] [PASSED] oob_was/14025883347
[19:23:48] [PASSED] oob_was/16029380221
[19:23:48] [PASSED] oob_was/22022079272
[19:23:48] [PASSED] oob_was/16029897822
[19:23:48] [PASSED] oob_was/14027054324
[19:23:48] ============== [PASSED] xe_rtp_table_oob_test ==============
[19:23:48] ================ xe_rtp_table_dev_oob_test ================
[19:23:48] [PASSED] device_oob_was/22010954014
[19:23:48] [PASSED] device_oob_was/15015404425
[19:23:48] [PASSED] device_oob_was/22019338487_display
[19:23:48] [PASSED] device_oob_was/14022085890
[19:23:48] [PASSED] device_oob_was/14026539277
[19:23:48] [PASSED] device_oob_was/14026633728
[19:23:48] [PASSED] device_oob_was/14026746987
[19:23:48] [PASSED] device_oob_was/14026779378
[19:23:48] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[19:23:48] ========== xe_rtp_table_missing_upper_bound_test ==========
[19:23:48] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[19:23:48] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[19:23:48] [PASSED] register_whitelist/1806527549
[19:23:48] [PASSED] register_whitelist/allow_read_ctx_timestamp
[19:23:48] [PASSED] register_whitelist/allow_read_queue_timestamp
[19:23:48] [PASSED] register_whitelist/16014440446
[19:23:48] [PASSED] register_whitelist/16017236439
[19:23:48] [PASSED] register_whitelist/16020183090
[19:23:48] [PASSED] register_whitelist/14024997852
[19:23:48] [PASSED] register_whitelist/14024997852
[19:23:48] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[19:23:48] =============== [PASSED] xe_rtp_tables_test ================
[19:23:48] =================== xe_rtp (3 subtests) ====================
[19:23:48] =================== xe_rtp_rules_tests ====================
[19:23:48] [PASSED] no
[19:23:48] [PASSED] yes
[19:23:48] [PASSED] no-and-no
[19:23:48] [PASSED] no-and-yes
[19:23:48] [PASSED] yes-and-no
[19:23:48] [PASSED] yes-and-yes
[19:23:48] [PASSED] no-or-no
[19:23:48] [PASSED] no-or-yes
[19:23:48] [PASSED] yes-or-no
[19:23:48] [PASSED] yes-or-yes
[19:23:48] [PASSED] no-yes-or-yes-no
[19:23:48] [PASSED] no-yes-or-yes-yes
[19:23:48] [PASSED] yes-yes-or-no-yes
[19:23:48] [PASSED] yes-yes-or-yes-yes
[19:23:48] [PASSED] no-no-or-yes-or-no
[19:23:48] [PASSED] or
[19:23:48] [PASSED] or-yes
[19:23:48] [PASSED] or-no
[19:23:48] [PASSED] yes-or
[19:23:48] [PASSED] no-or
[19:23:48] [PASSED] no-or-or-yes
[19:23:48] [PASSED] yes-or-or-no
[19:23:48] [PASSED] no-or-or-no
[19:23:48] [PASSED] missing-context-engine-class
[19:23:48] [PASSED] missing-context-engine-class-or-yes
[19:23:48] [PASSED] missing-context-engine-class-or-or-yes
[19:23:48] =============== [PASSED] xe_rtp_rules_tests ================
[19:23:48] =============== xe_rtp_process_to_sr_tests ================
[19:23:48] [PASSED] coalesce-same-reg
[19:23:48] [PASSED] coalesce-same-reg-literal-and-func
[19:23:48] [PASSED] no-match-no-add
[19:23:48] [PASSED] two-regs-two-entries
[19:23:48] [PASSED] clr-one-set-other
[19:23:48] [PASSED] set-field
[19:23:48] [PASSED] conflict-duplicate
[19:23:48] [PASSED] conflict-not-disjoint
[19:23:48] [PASSED] conflict-not-disjoint-literal-and-func
[19:23:48] [PASSED] conflict-reg-type
[19:23:48] [PASSED] bad-mcr-reg-forced-to-regular
[19:23:48] [PASSED] bad-regular-reg-forced-to-mcr
[19:23:48] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[19:23:48] ================== xe_rtp_process_tests ===================
[19:23:48] [PASSED] active1
[19:23:48] [PASSED] active2
[19:23:48] [PASSED] active-inactive
[19:23:48] [PASSED] inactive-active
[19:23:48] [PASSED] inactive-active-inactive
[19:23:48] [PASSED] inactive-inactive-inactive
[19:23:48] ============== [PASSED] xe_rtp_process_tests ===============
[19:23:48] ===================== [PASSED] xe_rtp ======================
[19:23:48] ==================== xe_wa (1 subtest) =====================
[19:23:48] ======================== xe_wa_gt =========================
[19:23:48] [PASSED] TIGERLAKE B0
[19:23:48] [PASSED] DG1 A0
[19:23:48] [PASSED] DG1 B0
[19:23:48] [PASSED] ALDERLAKE_S A0
[19:23:48] [PASSED] ALDERLAKE_S B0
[19:23:48] [PASSED] ALDERLAKE_S C0
[19:23:48] [PASSED] ALDERLAKE_S D0
[19:23:48] [PASSED] ALDERLAKE_P A0
[19:23:48] [PASSED] ALDERLAKE_P B0
[19:23:48] [PASSED] ALDERLAKE_P C0
[19:23:48] [PASSED] ALDERLAKE_S RPLS D0
[19:23:48] [PASSED] ALDERLAKE_P RPLU E0
[19:23:48] [PASSED] DG2 G10 C0
[19:23:48] [PASSED] DG2 G11 B1
[19:23:48] [PASSED] DG2 G12 A1
[19:23:48] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[19:23:48] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[19:23:48] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[19:23:48] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[19:23:48] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[19:23:48] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[19:23:48] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[19:23:48] ==================== [PASSED] xe_wa_gt =====================
[19:23:48] ====================== [PASSED] xe_wa ======================
[19:23:48] ============================================================
[19:23:48] Testing complete. Ran 788 tests: passed: 760, skipped: 28
[19:23:48] Elapsed time: 35.822s total, 1.693s configuring, 33.412s building, 0.675s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[19:23:48] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[19:23:50] 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
[19:24:15] Starting KUnit Kernel (1/1)...
[19:24:15] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[19:24:15] ============ drm_test_pick_cmdline (2 subtests) ============
[19:24:15] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[19:24:15] =============== drm_test_pick_cmdline_named ===============
[19:24:15] [PASSED] NTSC
[19:24:15] [PASSED] NTSC-J
[19:24:15] [PASSED] PAL
[19:24:15] [PASSED] PAL-M
[19:24:15] =========== [PASSED] drm_test_pick_cmdline_named ===========
[19:24:15] ============== [PASSED] drm_test_pick_cmdline ==============
[19:24:15] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[19:24:15] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[19:24:15] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[19:24:15] =========== drm_validate_clone_mode (2 subtests) ===========
[19:24:15] ============== drm_test_check_in_clone_mode ===============
[19:24:15] [PASSED] in_clone_mode
[19:24:15] [PASSED] not_in_clone_mode
[19:24:15] ========== [PASSED] drm_test_check_in_clone_mode ===========
[19:24:15] =============== drm_test_check_valid_clones ===============
[19:24:15] [PASSED] not_in_clone_mode
[19:24:15] [PASSED] valid_clone
[19:24:15] [PASSED] invalid_clone
[19:24:15] =========== [PASSED] drm_test_check_valid_clones ===========
[19:24:15] ============= [PASSED] drm_validate_clone_mode =============
[19:24:15] ============= drm_validate_modeset (1 subtest) =============
[19:24:15] [PASSED] drm_test_check_connector_changed_modeset
[19:24:15] ============== [PASSED] drm_validate_modeset ===============
[19:24:15] ====== drm_test_bridge_get_current_state (1 subtest) =======
[19:24:15] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[19:24:15] ======== [PASSED] drm_test_bridge_get_current_state ========
[19:24:15] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[19:24:15] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[19:24:15] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[19:24:15] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[19:24:15] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[19:24:15] ============== drm_bridge_alloc (2 subtests) ===============
[19:24:15] [PASSED] drm_test_drm_bridge_alloc_basic
[19:24:15] [PASSED] drm_test_drm_bridge_alloc_get_put
[19:24:15] ================ [PASSED] drm_bridge_alloc =================
[19:24:15] ============= drm_bridge_bus_fmt (5 subtests) ==============
[19:24:15] [PASSED] drm_test_bridge_rgb_yuv_rgb
[19:24:15] [PASSED] drm_test_bridge_must_convert_to_yuv444
[19:24:15] [PASSED] drm_test_bridge_hdmi_auto_rgb
[19:24:15] [PASSED] drm_test_bridge_auto_first
[19:24:15] [PASSED] drm_test_bridge_rgb_yuv_no_path
[19:24:15] =============== [PASSED] drm_bridge_bus_fmt ================
[19:24:15] ============= drm_cmdline_parser (40 subtests) =============
[19:24:15] [PASSED] drm_test_cmdline_force_d_only
[19:24:15] [PASSED] drm_test_cmdline_force_D_only_dvi
[19:24:15] [PASSED] drm_test_cmdline_force_D_only_hdmi
[19:24:15] [PASSED] drm_test_cmdline_force_D_only_not_digital
[19:24:15] [PASSED] drm_test_cmdline_force_e_only
[19:24:15] [PASSED] drm_test_cmdline_res
[19:24:15] [PASSED] drm_test_cmdline_res_vesa
[19:24:15] [PASSED] drm_test_cmdline_res_vesa_rblank
[19:24:15] [PASSED] drm_test_cmdline_res_rblank
[19:24:15] [PASSED] drm_test_cmdline_res_bpp
[19:24:15] [PASSED] drm_test_cmdline_res_refresh
[19:24:15] [PASSED] drm_test_cmdline_res_bpp_refresh
[19:24:15] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[19:24:15] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[19:24:15] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[19:24:15] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[19:24:15] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[19:24:15] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[19:24:15] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[19:24:15] [PASSED] drm_test_cmdline_res_margins_force_on
[19:24:15] [PASSED] drm_test_cmdline_res_vesa_margins
[19:24:15] [PASSED] drm_test_cmdline_name
[19:24:15] [PASSED] drm_test_cmdline_name_bpp
[19:24:15] [PASSED] drm_test_cmdline_name_option
[19:24:15] [PASSED] drm_test_cmdline_name_bpp_option
[19:24:15] [PASSED] drm_test_cmdline_rotate_0
[19:24:15] [PASSED] drm_test_cmdline_rotate_90
[19:24:15] [PASSED] drm_test_cmdline_rotate_180
[19:24:15] [PASSED] drm_test_cmdline_rotate_270
[19:24:15] [PASSED] drm_test_cmdline_hmirror
[19:24:15] [PASSED] drm_test_cmdline_vmirror
[19:24:15] [PASSED] drm_test_cmdline_margin_options
[19:24:15] [PASSED] drm_test_cmdline_multiple_options
[19:24:15] [PASSED] drm_test_cmdline_bpp_extra_and_option
[19:24:15] [PASSED] drm_test_cmdline_extra_and_option
[19:24:15] [PASSED] drm_test_cmdline_freestanding_options
[19:24:15] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[19:24:15] [PASSED] drm_test_cmdline_panel_orientation
[19:24:15] ================ drm_test_cmdline_invalid =================
[19:24:15] [PASSED] margin_only
[19:24:15] [PASSED] interlace_only
[19:24:15] [PASSED] res_missing_x
[19:24:15] [PASSED] res_missing_y
[19:24:15] [PASSED] res_bad_y
[19:24:15] [PASSED] res_missing_y_bpp
[19:24:15] [PASSED] res_bad_bpp
[19:24:15] [PASSED] res_bad_refresh
[19:24:15] [PASSED] res_bpp_refresh_force_on_off
[19:24:15] [PASSED] res_invalid_mode
[19:24:15] [PASSED] res_bpp_wrong_place_mode
[19:24:15] [PASSED] name_bpp_refresh
[19:24:15] [PASSED] name_refresh
[19:24:15] [PASSED] name_refresh_wrong_mode
[19:24:15] [PASSED] name_refresh_invalid_mode
[19:24:15] [PASSED] rotate_multiple
[19:24:15] [PASSED] rotate_invalid_val
[19:24:15] [PASSED] rotate_truncated
[19:24:15] [PASSED] invalid_option
[19:24:15] [PASSED] invalid_tv_option
[19:24:15] [PASSED] truncated_tv_option
[19:24:15] ============ [PASSED] drm_test_cmdline_invalid =============
[19:24:15] =============== drm_test_cmdline_tv_options ===============
[19:24:15] [PASSED] NTSC
[19:24:15] [PASSED] NTSC_443
[19:24:15] [PASSED] NTSC_J
[19:24:15] [PASSED] PAL
[19:24:15] [PASSED] PAL_M
[19:24:15] [PASSED] PAL_N
[19:24:15] [PASSED] SECAM
[19:24:15] [PASSED] MONO_525
[19:24:15] [PASSED] MONO_625
[19:24:15] =========== [PASSED] drm_test_cmdline_tv_options ===========
[19:24:15] =============== [PASSED] drm_cmdline_parser ================
[19:24:15] ========== drmm_connector_hdmi_init (20 subtests) ==========
[19:24:15] [PASSED] drm_test_connector_hdmi_init_valid
[19:24:15] [PASSED] drm_test_connector_hdmi_init_bpc_8
[19:24:15] [PASSED] drm_test_connector_hdmi_init_bpc_10
[19:24:15] [PASSED] drm_test_connector_hdmi_init_bpc_12
[19:24:15] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[19:24:15] [PASSED] drm_test_connector_hdmi_init_bpc_null
[19:24:15] [PASSED] drm_test_connector_hdmi_init_formats_empty
[19:24:15] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[19:24:15] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[19:24:15] [PASSED] supported_formats=0x9 yuv420_allowed=1
[19:24:15] [PASSED] supported_formats=0x9 yuv420_allowed=0
[19:24:15] [PASSED] supported_formats=0x5 yuv420_allowed=1
[19:24:15] [PASSED] supported_formats=0x5 yuv420_allowed=0
[19:24:15] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[19:24:15] [PASSED] drm_test_connector_hdmi_init_null_ddc
[19:24:15] [PASSED] drm_test_connector_hdmi_init_null_product
[19:24:15] [PASSED] drm_test_connector_hdmi_init_null_vendor
[19:24:15] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[19:24:15] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[19:24:15] [PASSED] drm_test_connector_hdmi_init_product_valid
[19:24:15] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[19:24:15] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[19:24:15] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[19:24:15] ========= drm_test_connector_hdmi_init_type_valid =========
[19:24:15] [PASSED] HDMI-A
[19:24:15] [PASSED] HDMI-B
[19:24:15] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[19:24:15] ======== drm_test_connector_hdmi_init_type_invalid ========
[19:24:15] [PASSED] Unknown
[19:24:15] [PASSED] VGA
[19:24:15] [PASSED] DVI-I
[19:24:15] [PASSED] DVI-D
[19:24:15] [PASSED] DVI-A
[19:24:15] [PASSED] Composite
[19:24:15] [PASSED] SVIDEO
[19:24:15] [PASSED] LVDS
[19:24:15] [PASSED] Component
[19:24:15] [PASSED] DIN
[19:24:15] [PASSED] DP
[19:24:15] [PASSED] TV
[19:24:15] [PASSED] eDP
[19:24:15] [PASSED] Virtual
[19:24:15] [PASSED] DSI
[19:24:15] [PASSED] DPI
[19:24:15] [PASSED] Writeback
[19:24:15] [PASSED] SPI
[19:24:15] [PASSED] USB
[19:24:15] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[19:24:15] ============ [PASSED] drmm_connector_hdmi_init =============
[19:24:15] ============= drmm_connector_init (3 subtests) =============
[19:24:15] [PASSED] drm_test_drmm_connector_init
[19:24:15] [PASSED] drm_test_drmm_connector_init_null_ddc
[19:24:15] ========= drm_test_drmm_connector_init_type_valid =========
[19:24:15] [PASSED] Unknown
[19:24:15] [PASSED] VGA
[19:24:15] [PASSED] DVI-I
[19:24:15] [PASSED] DVI-D
[19:24:15] [PASSED] DVI-A
[19:24:15] [PASSED] Composite
[19:24:15] [PASSED] SVIDEO
[19:24:15] [PASSED] LVDS
[19:24:15] [PASSED] Component
[19:24:15] [PASSED] DIN
[19:24:15] [PASSED] DP
[19:24:15] [PASSED] HDMI-A
[19:24:15] [PASSED] HDMI-B
[19:24:15] [PASSED] TV
[19:24:15] [PASSED] eDP
[19:24:15] [PASSED] Virtual
[19:24:15] [PASSED] DSI
[19:24:15] [PASSED] DPI
[19:24:15] [PASSED] Writeback
[19:24:15] [PASSED] SPI
[19:24:15] [PASSED] USB
[19:24:15] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[19:24:15] =============== [PASSED] drmm_connector_init ===============
[19:24:15] ========= drm_connector_dynamic_init (6 subtests) ==========
[19:24:15] [PASSED] drm_test_drm_connector_dynamic_init
[19:24:15] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[19:24:15] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[19:24:15] [PASSED] drm_test_drm_connector_dynamic_init_properties
[19:24:15] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[19:24:15] [PASSED] Unknown
[19:24:15] [PASSED] VGA
[19:24:15] [PASSED] DVI-I
[19:24:15] [PASSED] DVI-D
[19:24:15] [PASSED] DVI-A
[19:24:15] [PASSED] Composite
[19:24:15] [PASSED] SVIDEO
[19:24:15] [PASSED] LVDS
[19:24:15] [PASSED] Component
[19:24:15] [PASSED] DIN
[19:24:15] [PASSED] DP
[19:24:15] [PASSED] HDMI-A
[19:24:15] [PASSED] HDMI-B
[19:24:15] [PASSED] TV
[19:24:15] [PASSED] eDP
[19:24:15] [PASSED] Virtual
[19:24:15] [PASSED] DSI
[19:24:15] [PASSED] DPI
[19:24:15] [PASSED] Writeback
[19:24:15] [PASSED] SPI
[19:24:15] [PASSED] USB
[19:24:15] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[19:24:15] ======== drm_test_drm_connector_dynamic_init_name =========
[19:24:15] [PASSED] Unknown
[19:24:15] [PASSED] VGA
[19:24:15] [PASSED] DVI-I
[19:24:15] [PASSED] DVI-D
[19:24:15] [PASSED] DVI-A
[19:24:15] [PASSED] Composite
[19:24:15] [PASSED] SVIDEO
[19:24:15] [PASSED] LVDS
[19:24:15] [PASSED] Component
[19:24:15] [PASSED] DIN
[19:24:15] [PASSED] DP
[19:24:15] [PASSED] HDMI-A
[19:24:15] [PASSED] HDMI-B
[19:24:15] [PASSED] TV
[19:24:15] [PASSED] eDP
[19:24:15] [PASSED] Virtual
[19:24:15] [PASSED] DSI
[19:24:15] [PASSED] DPI
[19:24:15] [PASSED] Writeback
[19:24:15] [PASSED] SPI
[19:24:15] [PASSED] USB
[19:24:15] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[19:24:15] =========== [PASSED] drm_connector_dynamic_init ============
[19:24:15] ==== drm_connector_dynamic_register_early (4 subtests) =====
[19:24:15] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[19:24:15] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[19:24:15] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[19:24:15] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[19:24:15] ====== [PASSED] drm_connector_dynamic_register_early =======
[19:24:15] ======= drm_connector_dynamic_register (7 subtests) ========
[19:24:15] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[19:24:15] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[19:24:15] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[19:24:15] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[19:24:15] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[19:24:15] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[19:24:15] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[19:24:15] ========= [PASSED] drm_connector_dynamic_register ==========
[19:24:15] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[19:24:15] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[19:24:15] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[19:24:15] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[19:24:15] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[19:24:15] ========== drm_test_get_tv_mode_from_name_valid ===========
[19:24:15] [PASSED] NTSC
[19:24:15] [PASSED] NTSC-443
[19:24:15] [PASSED] NTSC-J
[19:24:15] [PASSED] PAL
[19:24:15] [PASSED] PAL-M
[19:24:15] [PASSED] PAL-N
[19:24:15] [PASSED] SECAM
[19:24:15] [PASSED] Mono
[19:24:15] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[19:24:15] [PASSED] drm_test_get_tv_mode_from_name_truncated
[19:24:15] ============ [PASSED] drm_get_tv_mode_from_name ============
[19:24:15] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[19:24:15] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[19:24:15] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[19:24:15] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[19:24:15] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[19:24:15] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[19:24:15] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[19:24:15] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[19:24:15] [PASSED] VIC 96
[19:24:15] [PASSED] VIC 97
[19:24:15] [PASSED] VIC 101
[19:24:15] [PASSED] VIC 102
[19:24:15] [PASSED] VIC 106
[19:24:15] [PASSED] VIC 107
[19:24:15] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[19:24:15] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[19:24:15] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[19:24:15] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[19:24:15] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[19:24:15] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[19:24:15] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[19:24:15] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[19:24:15] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[19:24:15] [PASSED] Automatic
[19:24:15] [PASSED] Full
[19:24:15] [PASSED] Limited 16:235
[19:24:15] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[19:24:15] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[19:24:15] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[19:24:15] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[19:24:15] === drm_test_drm_hdmi_connector_get_output_format_name ====
[19:24:15] [PASSED] RGB
[19:24:15] [PASSED] YUV 4:2:0
[19:24:15] [PASSED] YUV 4:2:2
[19:24:15] [PASSED] YUV 4:4:4
[19:24:15] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[19:24:15] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[19:24:15] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[19:24:15] ============= drm_damage_helper (21 subtests) ==============
[19:24:15] [PASSED] drm_test_damage_iter_no_damage
[19:24:15] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[19:24:15] [PASSED] drm_test_damage_iter_no_damage_src_moved
[19:24:15] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[19:24:15] [PASSED] drm_test_damage_iter_no_damage_not_visible
[19:24:15] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[19:24:15] [PASSED] drm_test_damage_iter_no_damage_no_fb
[19:24:15] [PASSED] drm_test_damage_iter_simple_damage
[19:24:15] [PASSED] drm_test_damage_iter_single_damage
[19:24:15] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[19:24:15] [PASSED] drm_test_damage_iter_single_damage_outside_src
[19:24:15] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[19:24:15] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[19:24:15] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[19:24:15] [PASSED] drm_test_damage_iter_single_damage_src_moved
[19:24:15] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[19:24:15] [PASSED] drm_test_damage_iter_damage
[19:24:15] [PASSED] drm_test_damage_iter_damage_one_intersect
[19:24:15] [PASSED] drm_test_damage_iter_damage_one_outside
[19:24:15] [PASSED] drm_test_damage_iter_damage_src_moved
[19:24:15] [PASSED] drm_test_damage_iter_damage_not_visible
[19:24:15] ================ [PASSED] drm_damage_helper ================
[19:24:15] ============== drm_dp_mst_helper (3 subtests) ==============
[19:24:15] ============== drm_test_dp_mst_calc_pbn_mode ==============
[19:24:15] [PASSED] Clock 154000 BPP 30 DSC disabled
[19:24:15] [PASSED] Clock 234000 BPP 30 DSC disabled
[19:24:15] [PASSED] Clock 297000 BPP 24 DSC disabled
[19:24:15] [PASSED] Clock 332880 BPP 24 DSC enabled
[19:24:15] [PASSED] Clock 324540 BPP 24 DSC enabled
[19:24:15] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[19:24:15] ============== drm_test_dp_mst_calc_pbn_div ===============
[19:24:15] [PASSED] Link rate 2000000 lane count 4
[19:24:15] [PASSED] Link rate 2000000 lane count 2
[19:24:15] [PASSED] Link rate 2000000 lane count 1
[19:24:15] [PASSED] Link rate 1350000 lane count 4
[19:24:15] [PASSED] Link rate 1350000 lane count 2
[19:24:15] [PASSED] Link rate 1350000 lane count 1
[19:24:15] [PASSED] Link rate 1000000 lane count 4
[19:24:15] [PASSED] Link rate 1000000 lane count 2
[19:24:15] [PASSED] Link rate 1000000 lane count 1
[19:24:15] [PASSED] Link rate 810000 lane count 4
[19:24:15] [PASSED] Link rate 810000 lane count 2
[19:24:15] [PASSED] Link rate 810000 lane count 1
[19:24:15] [PASSED] Link rate 540000 lane count 4
[19:24:15] [PASSED] Link rate 540000 lane count 2
[19:24:15] [PASSED] Link rate 540000 lane count 1
[19:24:15] [PASSED] Link rate 270000 lane count 4
[19:24:15] [PASSED] Link rate 270000 lane count 2
[19:24:15] [PASSED] Link rate 270000 lane count 1
[19:24:15] [PASSED] Link rate 162000 lane count 4
[19:24:15] [PASSED] Link rate 162000 lane count 2
[19:24:15] [PASSED] Link rate 162000 lane count 1
[19:24:15] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[19:24:15] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[19:24:15] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[19:24:15] [PASSED] DP_POWER_UP_PHY with port number
[19:24:15] [PASSED] DP_POWER_DOWN_PHY with port number
[19:24:15] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[19:24:15] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[19:24:15] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[19:24:15] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[19:24:15] [PASSED] DP_QUERY_PAYLOAD with port number
[19:24:15] [PASSED] DP_QUERY_PAYLOAD with VCPI
[19:24:15] [PASSED] DP_REMOTE_DPCD_READ with port number
[19:24:15] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[19:24:15] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[19:24:15] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[19:24:15] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[19:24:15] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[19:24:15] [PASSED] DP_REMOTE_I2C_READ with port number
[19:24:15] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[19:24:15] [PASSED] DP_REMOTE_I2C_READ with transactions array
[19:24:15] [PASSED] DP_REMOTE_I2C_WRITE with port number
[19:24:15] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[19:24:15] [PASSED] DP_REMOTE_I2C_WRITE with data array
[19:24:15] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[19:24:15] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[19:24:15] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[19:24:15] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[19:24:15] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[19:24:15] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[19:24:15] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[19:24:15] ================ [PASSED] drm_dp_mst_helper ================
[19:24:15] ================== drm_exec (7 subtests) ===================
[19:24:15] [PASSED] sanitycheck
[19:24:15] [PASSED] test_lock
[19:24:15] [PASSED] test_lock_unlock
[19:24:15] [PASSED] test_duplicates
[19:24:15] [PASSED] test_prepare
[19:24:15] [PASSED] test_prepare_array
[19:24:15] [PASSED] test_multiple_loops
[19:24:15] ==================== [PASSED] drm_exec =====================
[19:24:15] =========== drm_format_helper_test (17 subtests) ===========
[19:24:15] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[19:24:15] [PASSED] single_pixel_source_buffer
[19:24:15] [PASSED] single_pixel_clip_rectangle
[19:24:15] [PASSED] well_known_colors
[19:24:15] [PASSED] destination_pitch
[19:24:15] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[19:24:15] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[19:24:15] [PASSED] single_pixel_source_buffer
[19:24:15] [PASSED] single_pixel_clip_rectangle
[19:24:15] [PASSED] well_known_colors
[19:24:15] [PASSED] destination_pitch
[19:24:15] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[19:24:15] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[19:24:15] [PASSED] single_pixel_source_buffer
[19:24:15] [PASSED] single_pixel_clip_rectangle
[19:24:15] [PASSED] well_known_colors
[19:24:15] [PASSED] destination_pitch
[19:24:15] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[19:24:15] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[19:24:15] [PASSED] single_pixel_source_buffer
[19:24:15] [PASSED] single_pixel_clip_rectangle
[19:24:15] [PASSED] well_known_colors
[19:24:15] [PASSED] destination_pitch
[19:24:15] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[19:24:15] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[19:24:15] [PASSED] single_pixel_source_buffer
[19:24:15] [PASSED] single_pixel_clip_rectangle
[19:24:15] [PASSED] well_known_colors
[19:24:15] [PASSED] destination_pitch
[19:24:15] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[19:24:15] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[19:24:15] [PASSED] single_pixel_source_buffer
[19:24:15] [PASSED] single_pixel_clip_rectangle
[19:24:15] [PASSED] well_known_colors
[19:24:15] [PASSED] destination_pitch
[19:24:15] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[19:24:15] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[19:24:15] [PASSED] single_pixel_source_buffer
[19:24:15] [PASSED] single_pixel_clip_rectangle
[19:24:15] [PASSED] well_known_colors
[19:24:15] [PASSED] destination_pitch
[19:24:15] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[19:24:15] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[19:24:15] [PASSED] single_pixel_source_buffer
[19:24:15] [PASSED] single_pixel_clip_rectangle
[19:24:15] [PASSED] well_known_colors
[19:24:15] [PASSED] destination_pitch
[19:24:15] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[19:24:15] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[19:24:15] [PASSED] single_pixel_source_buffer
[19:24:15] [PASSED] single_pixel_clip_rectangle
[19:24:15] [PASSED] well_known_colors
[19:24:15] [PASSED] destination_pitch
[19:24:15] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[19:24:15] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[19:24:15] [PASSED] single_pixel_source_buffer
[19:24:15] [PASSED] single_pixel_clip_rectangle
[19:24:15] [PASSED] well_known_colors
[19:24:15] [PASSED] destination_pitch
[19:24:15] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[19:24:15] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[19:24:15] [PASSED] single_pixel_source_buffer
[19:24:15] [PASSED] single_pixel_clip_rectangle
[19:24:15] [PASSED] well_known_colors
[19:24:15] [PASSED] destination_pitch
[19:24:15] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[19:24:15] ============== drm_test_fb_xrgb8888_to_mono ===============
[19:24:15] [PASSED] single_pixel_source_buffer
[19:24:15] [PASSED] single_pixel_clip_rectangle
[19:24:15] [PASSED] well_known_colors
[19:24:15] [PASSED] destination_pitch
[19:24:15] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[19:24:15] ==================== drm_test_fb_swab =====================
[19:24:15] [PASSED] single_pixel_source_buffer
[19:24:15] [PASSED] single_pixel_clip_rectangle
[19:24:15] [PASSED] well_known_colors
[19:24:15] [PASSED] destination_pitch
[19:24:15] ================ [PASSED] drm_test_fb_swab =================
[19:24:15] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[19:24:15] [PASSED] single_pixel_source_buffer
[19:24:15] [PASSED] single_pixel_clip_rectangle
[19:24:15] [PASSED] well_known_colors
[19:24:15] [PASSED] destination_pitch
[19:24:15] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[19:24:15] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[19:24:15] [PASSED] single_pixel_source_buffer
[19:24:15] [PASSED] single_pixel_clip_rectangle
[19:24:15] [PASSED] well_known_colors
[19:24:15] [PASSED] destination_pitch
[19:24:15] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[19:24:15] ================= drm_test_fb_clip_offset =================
[19:24:15] [PASSED] pass through
[19:24:15] [PASSED] horizontal offset
[19:24:15] [PASSED] vertical offset
[19:24:15] [PASSED] horizontal and vertical offset
[19:24:15] [PASSED] horizontal offset (custom pitch)
[19:24:15] [PASSED] vertical offset (custom pitch)
[19:24:15] [PASSED] horizontal and vertical offset (custom pitch)
[19:24:15] ============= [PASSED] drm_test_fb_clip_offset =============
[19:24:15] =================== drm_test_fb_memcpy ====================
[19:24:15] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[19:24:15] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[19:24:15] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[19:24:15] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[19:24:15] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[19:24:15] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[19:24:15] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[19:24:15] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[19:24:15] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[19:24:15] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[19:24:15] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[19:24:15] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[19:24:15] =============== [PASSED] drm_test_fb_memcpy ================
[19:24:15] ============= [PASSED] drm_format_helper_test ==============
[19:24:15] ================= drm_format (18 subtests) =================
[19:24:15] [PASSED] drm_test_format_block_width_invalid
[19:24:15] [PASSED] drm_test_format_block_width_one_plane
[19:24:15] [PASSED] drm_test_format_block_width_two_plane
[19:24:15] [PASSED] drm_test_format_block_width_three_plane
[19:24:15] [PASSED] drm_test_format_block_width_tiled
[19:24:15] [PASSED] drm_test_format_block_height_invalid
[19:24:15] [PASSED] drm_test_format_block_height_one_plane
[19:24:15] [PASSED] drm_test_format_block_height_two_plane
[19:24:15] [PASSED] drm_test_format_block_height_three_plane
[19:24:15] [PASSED] drm_test_format_block_height_tiled
[19:24:15] [PASSED] drm_test_format_min_pitch_invalid
[19:24:15] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[19:24:15] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[19:24:15] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[19:24:15] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[19:24:15] [PASSED] drm_test_format_min_pitch_two_plane
[19:24:15] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[19:24:15] [PASSED] drm_test_format_min_pitch_tiled
[19:24:15] =================== [PASSED] drm_format ====================
[19:24:15] ============== drm_framebuffer (10 subtests) ===============
[19:24:15] ========== drm_test_framebuffer_check_src_coords ==========
[19:24:15] [PASSED] Success: source fits into fb
[19:24:15] [PASSED] Fail: overflowing fb with x-axis coordinate
[19:24:15] [PASSED] Fail: overflowing fb with y-axis coordinate
[19:24:15] [PASSED] Fail: overflowing fb with source width
[19:24:15] [PASSED] Fail: overflowing fb with source height
[19:24:15] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[19:24:15] [PASSED] drm_test_framebuffer_cleanup
[19:24:15] =============== drm_test_framebuffer_create ===============
[19:24:15] [PASSED] ABGR8888 normal sizes
[19:24:15] [PASSED] ABGR8888 max sizes
[19:24:15] [PASSED] ABGR8888 pitch greater than min required
[19:24:15] [PASSED] ABGR8888 pitch less than min required
[19:24:15] [PASSED] ABGR8888 Invalid width
[19:24:15] [PASSED] ABGR8888 Invalid buffer handle
[19:24:15] [PASSED] No pixel format
[19:24:15] [PASSED] ABGR8888 Width 0
[19:24:15] [PASSED] ABGR8888 Height 0
[19:24:15] [PASSED] ABGR8888 Out of bound height * pitch combination
[19:24:15] [PASSED] ABGR8888 Large buffer offset
[19:24:15] [PASSED] ABGR8888 Buffer offset for inexistent plane
[19:24:15] [PASSED] ABGR8888 Invalid flag
[19:24:15] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[19:24:15] [PASSED] ABGR8888 Valid buffer modifier
[19:24:15] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[19:24:15] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[19:24:15] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[19:24:15] [PASSED] NV12 Normal sizes
[19:24:15] [PASSED] NV12 Max sizes
[19:24:15] [PASSED] NV12 Invalid pitch
[19:24:15] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[19:24:15] [PASSED] NV12 different modifier per-plane
[19:24:15] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[19:24:15] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[19:24:15] [PASSED] NV12 Modifier for inexistent plane
[19:24:15] [PASSED] NV12 Handle for inexistent plane
[19:24:15] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[19:24:15] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[19:24:15] [PASSED] YVU420 Normal sizes
[19:24:15] [PASSED] YVU420 Max sizes
[19:24:15] [PASSED] YVU420 Invalid pitch
[19:24:15] [PASSED] YVU420 Different pitches
[19:24:15] [PASSED] YVU420 Different buffer offsets/pitches
[19:24:15] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[19:24:15] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[19:24:15] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[19:24:15] [PASSED] YVU420 Valid modifier
[19:24:15] [PASSED] YVU420 Different modifiers per plane
[19:24:15] [PASSED] YVU420 Modifier for inexistent plane
[19:24:15] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[19:24:15] [PASSED] X0L2 Normal sizes
[19:24:15] [PASSED] X0L2 Max sizes
[19:24:15] [PASSED] X0L2 Invalid pitch
[19:24:15] [PASSED] X0L2 Pitch greater than minimum required
[19:24:15] [PASSED] X0L2 Handle for inexistent plane
[19:24:15] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[19:24:15] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[19:24:15] [PASSED] X0L2 Valid modifier
[19:24:15] [PASSED] X0L2 Modifier for inexistent plane
[19:24:15] =========== [PASSED] drm_test_framebuffer_create ===========
[19:24:15] [PASSED] drm_test_framebuffer_free
[19:24:15] [PASSED] drm_test_framebuffer_init
[19:24:15] [PASSED] drm_test_framebuffer_init_bad_format
[19:24:15] [PASSED] drm_test_framebuffer_init_dev_mismatch
[19:24:15] [PASSED] drm_test_framebuffer_lookup
[19:24:15] [PASSED] drm_test_framebuffer_lookup_inexistent
[19:24:15] [PASSED] drm_test_framebuffer_modifiers_not_supported
[19:24:15] ================= [PASSED] drm_framebuffer =================
[19:24:15] ================ drm_gem_shmem (8 subtests) ================
[19:24:15] [PASSED] drm_gem_shmem_test_obj_create
[19:24:15] [PASSED] drm_gem_shmem_test_obj_create_private
[19:24:15] [PASSED] drm_gem_shmem_test_pin_pages
[19:24:15] [PASSED] drm_gem_shmem_test_vmap
[19:24:15] [PASSED] drm_gem_shmem_test_get_sg_table
[19:24:15] [PASSED] drm_gem_shmem_test_get_pages_sgt
[19:24:15] [PASSED] drm_gem_shmem_test_madvise
[19:24:15] [PASSED] drm_gem_shmem_test_purge
[19:24:15] ================== [PASSED] drm_gem_shmem ==================
[19:24:15] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[19:24:15] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[19:24:15] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[19:24:15] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[19:24:15] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[19:24:15] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[19:24:15] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[19:24:15] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[19:24:15] [PASSED] Automatic
[19:24:15] [PASSED] Full
[19:24:15] [PASSED] Limited 16:235
[19:24:15] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[19:24:15] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[19:24:15] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[19:24:15] [PASSED] drm_test_check_disable_connector
[19:24:15] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[19:24:15] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[19:24:15] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[19:24:15] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[19:24:15] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[19:24:15] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[19:24:15] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[19:24:15] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[19:24:15] [PASSED] drm_test_check_output_bpc_dvi
[19:24:15] [PASSED] drm_test_check_output_bpc_format_vic_1
[19:24:15] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[19:24:15] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[19:24:15] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[19:24:15] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[19:24:15] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[19:24:15] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[19:24:15] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[19:24:15] ============ drm_test_check_hdmi_color_format =============
[19:24:15] [PASSED] AUTO -> RGB
[19:24:15] [PASSED] YCBCR422 -> YUV422
[19:24:15] [PASSED] YCBCR420 -> YUV420
[19:24:15] [PASSED] YCBCR444 -> YUV444
[19:24:15] [PASSED] RGB -> RGB
[19:24:15] ======== [PASSED] drm_test_check_hdmi_color_format =========
[19:24:15] ======== drm_test_check_hdmi_color_format_420_only ========
[19:24:15] [PASSED] RGB should fail
[19:24:15] [PASSED] YUV444 should fail
[19:24:15] [PASSED] YUV422 should fail
[19:24:15] [PASSED] YUV420 should work
[19:24:15] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[19:24:15] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[19:24:15] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[19:24:15] [PASSED] drm_test_check_broadcast_rgb_value
[19:24:15] [PASSED] drm_test_check_bpc_8_value
[19:24:15] [PASSED] drm_test_check_bpc_10_value
[19:24:15] [PASSED] drm_test_check_bpc_12_value
[19:24:15] [PASSED] drm_test_check_format_value
[19:24:15] [PASSED] drm_test_check_tmds_char_value
[19:24:15] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[19:24:15] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[19:24:15] [PASSED] drm_test_check_mode_valid
[19:24:15] [PASSED] drm_test_check_mode_valid_reject
[19:24:15] [PASSED] drm_test_check_mode_valid_reject_rate
[19:24:15] [PASSED] drm_test_check_mode_valid_reject_max_clock
[19:24:15] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[19:24:15] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[19:24:15] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[19:24:15] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[19:24:15] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[19:24:15] [PASSED] drm_test_check_infoframes
[19:24:15] [PASSED] drm_test_check_reject_avi_infoframe
[19:24:15] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[19:24:15] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[19:24:15] [PASSED] drm_test_check_reject_audio_infoframe
[19:24:15] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[19:24:15] ================= drm_managed (2 subtests) =================
[19:24:15] [PASSED] drm_test_managed_release_action
[19:24:15] [PASSED] drm_test_managed_run_action
[19:24:15] =================== [PASSED] drm_managed ===================
[19:24:15] =================== drm_mm (6 subtests) ====================
[19:24:15] [PASSED] drm_test_mm_init
[19:24:15] [PASSED] drm_test_mm_debug
[19:24:15] [PASSED] drm_test_mm_align32
[19:24:15] [PASSED] drm_test_mm_align64
[19:24:15] [PASSED] drm_test_mm_lowest
[19:24:15] [PASSED] drm_test_mm_highest
[19:24:15] ===================== [PASSED] drm_mm ======================
[19:24:15] ============= drm_modes_analog_tv (5 subtests) =============
[19:24:15] [PASSED] drm_test_modes_analog_tv_mono_576i
[19:24:15] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[19:24:15] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[19:24:15] [PASSED] drm_test_modes_analog_tv_pal_576i
[19:24:15] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[19:24:15] =============== [PASSED] drm_modes_analog_tv ===============
[19:24:15] ============== drm_plane_helper (2 subtests) ===============
[19:24:15] =============== drm_test_check_plane_state ================
[19:24:15] [PASSED] clipping_simple
[19:24:15] [PASSED] clipping_rotate_reflect
[19:24:15] [PASSED] positioning_simple
[19:24:15] [PASSED] upscaling
[19:24:15] [PASSED] downscaling
[19:24:15] [PASSED] rounding1
[19:24:15] [PASSED] rounding2
[19:24:15] [PASSED] rounding3
[19:24:15] [PASSED] rounding4
[19:24:15] =========== [PASSED] drm_test_check_plane_state ============
[19:24:15] =========== drm_test_check_invalid_plane_state ============
[19:24:15] [PASSED] positioning_invalid
[19:24:15] [PASSED] upscaling_invalid
[19:24:15] [PASSED] downscaling_invalid
[19:24:15] ======= [PASSED] drm_test_check_invalid_plane_state ========
[19:24:15] ================ [PASSED] drm_plane_helper =================
[19:24:15] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[19:24:15] ====== drm_test_connector_helper_tv_get_modes_check =======
[19:24:15] [PASSED] None
[19:24:15] [PASSED] PAL
[19:24:15] [PASSED] NTSC
[19:24:15] [PASSED] Both, NTSC Default
[19:24:15] [PASSED] Both, PAL Default
[19:24:15] [PASSED] Both, NTSC Default, with PAL on command-line
[19:24:15] [PASSED] Both, PAL Default, with NTSC on command-line
[19:24:15] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[19:24:15] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[19:24:15] ================== drm_rect (9 subtests) ===================
[19:24:15] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[19:24:15] [PASSED] drm_test_rect_clip_scaled_not_clipped
[19:24:15] [PASSED] drm_test_rect_clip_scaled_clipped
[19:24:15] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[19:24:15] ================= drm_test_rect_intersect =================
[19:24:15] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[19:24:15] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[19:24:15] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[19:24:15] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[19:24:15] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[19:24:15] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[19:24:15] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[19:24:15] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[19:24:15] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[19:24:15] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[19:24:15] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[19:24:15] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[19:24:15] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[19:24:15] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[19:24:15] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[19:24:15] ============= [PASSED] drm_test_rect_intersect =============
[19:24:15] ================ drm_test_rect_calc_hscale ================
[19:24:15] [PASSED] normal use
[19:24:15] [PASSED] out of max range
[19:24:15] [PASSED] out of min range
[19:24:15] [PASSED] zero dst
[19:24:15] [PASSED] negative src
[19:24:15] [PASSED] negative dst
[19:24:15] ============ [PASSED] drm_test_rect_calc_hscale ============
[19:24:15] ================ drm_test_rect_calc_vscale ================
[19:24:15] [PASSED] normal use
[19:24:15] [PASSED] out of max range
[19:24:15] [PASSED] out of min range
[19:24:15] [PASSED] zero dst
[19:24:15] [PASSED] negative src
[19:24:15] [PASSED] negative dst
[19:24:15] ============ [PASSED] drm_test_rect_calc_vscale ============
[19:24:15] ================== drm_test_rect_rotate ===================
[19:24:15] [PASSED] reflect-x
[19:24:15] [PASSED] reflect-y
[19:24:15] [PASSED] rotate-0
[19:24:15] [PASSED] rotate-90
[19:24:15] [PASSED] rotate-180
[19:24:15] [PASSED] rotate-270
[19:24:15] ============== [PASSED] drm_test_rect_rotate ===============
[19:24:15] ================ drm_test_rect_rotate_inv =================
[19:24:15] [PASSED] reflect-x
[19:24:15] [PASSED] reflect-y
[19:24:15] [PASSED] rotate-0
[19:24:15] [PASSED] rotate-90
[19:24:15] [PASSED] rotate-180
[19:24:15] [PASSED] rotate-270
[19:24:15] ============ [PASSED] drm_test_rect_rotate_inv =============
[19:24:15] ==================== [PASSED] drm_rect =====================
[19:24:15] ============ drm_sysfb_modeset_test (1 subtest) ============
[19:24:15] ============ drm_test_sysfb_build_fourcc_list =============
[19:24:15] [PASSED] no native formats
[19:24:15] [PASSED] XRGB8888 as native format
[19:24:15] [PASSED] remove duplicates
[19:24:15] [PASSED] convert alpha formats
[19:24:15] [PASSED] random formats
[19:24:15] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[19:24:15] ============= [PASSED] drm_sysfb_modeset_test ==============
[19:24:15] ================== drm_fixp (2 subtests) ===================
[19:24:15] [PASSED] drm_test_int2fixp
[19:24:15] [PASSED] drm_test_sm2fixp
[19:24:15] ==================== [PASSED] drm_fixp =====================
[19:24:15] ============================================================
[19:24:15] Testing complete. Ran 637 tests: passed: 637
[19:24:15] Elapsed time: 26.487s total, 1.799s configuring, 24.523s building, 0.135s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[19:24:15] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[19:24:17] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[19:24:26] Starting KUnit Kernel (1/1)...
[19:24:26] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[19:24:27] ================= ttm_device (5 subtests) ==================
[19:24:27] [PASSED] ttm_device_init_basic
[19:24:27] [PASSED] ttm_device_init_multiple
[19:24:27] [PASSED] ttm_device_fini_basic
[19:24:27] [PASSED] ttm_device_init_no_vma_man
[19:24:27] ================== ttm_device_init_pools ==================
[19:24:27] [PASSED] No DMA allocations, no DMA32 required
[19:24:27] [PASSED] DMA allocations, DMA32 required
[19:24:27] [PASSED] No DMA allocations, DMA32 required
[19:24:27] [PASSED] DMA allocations, no DMA32 required
[19:24:27] ============== [PASSED] ttm_device_init_pools ==============
[19:24:27] =================== [PASSED] ttm_device ====================
[19:24:27] ================== ttm_pool (8 subtests) ===================
[19:24:27] ================== ttm_pool_alloc_basic ===================
[19:24:27] [PASSED] One page
[19:24:27] [PASSED] More than one page
[19:24:27] [PASSED] Above the allocation limit
[19:24:27] [PASSED] One page, with coherent DMA mappings enabled
[19:24:27] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[19:24:27] ============== [PASSED] ttm_pool_alloc_basic ===============
[19:24:27] ============== ttm_pool_alloc_basic_dma_addr ==============
[19:24:27] [PASSED] One page
[19:24:27] [PASSED] More than one page
[19:24:27] [PASSED] Above the allocation limit
[19:24:27] [PASSED] One page, with coherent DMA mappings enabled
[19:24:27] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[19:24:27] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[19:24:27] [PASSED] ttm_pool_alloc_order_caching_match
[19:24:27] [PASSED] ttm_pool_alloc_caching_mismatch
[19:24:27] [PASSED] ttm_pool_alloc_order_mismatch
[19:24:27] [PASSED] ttm_pool_free_dma_alloc
[19:24:27] [PASSED] ttm_pool_free_no_dma_alloc
[19:24:27] [PASSED] ttm_pool_fini_basic
[19:24:27] ==================== [PASSED] ttm_pool =====================
[19:24:27] ================ ttm_resource (8 subtests) =================
[19:24:27] ================= ttm_resource_init_basic =================
[19:24:27] [PASSED] Init resource in TTM_PL_SYSTEM
[19:24:27] [PASSED] Init resource in TTM_PL_VRAM
[19:24:27] [PASSED] Init resource in a private placement
[19:24:27] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[19:24:27] ============= [PASSED] ttm_resource_init_basic =============
[19:24:27] [PASSED] ttm_resource_init_pinned
[19:24:27] [PASSED] ttm_resource_fini_basic
[19:24:27] [PASSED] ttm_resource_manager_init_basic
[19:24:27] [PASSED] ttm_resource_manager_usage_basic
[19:24:27] [PASSED] ttm_resource_manager_set_used_basic
[19:24:27] [PASSED] ttm_sys_man_alloc_basic
[19:24:27] [PASSED] ttm_sys_man_free_basic
[19:24:27] ================== [PASSED] ttm_resource ===================
[19:24:27] =================== ttm_tt (15 subtests) ===================
[19:24:27] ==================== ttm_tt_init_basic ====================
[19:24:27] [PASSED] Page-aligned size
[19:24:27] [PASSED] Extra pages requested
[19:24:27] ================ [PASSED] ttm_tt_init_basic ================
[19:24:27] [PASSED] ttm_tt_init_misaligned
[19:24:27] [PASSED] ttm_tt_fini_basic
[19:24:27] [PASSED] ttm_tt_fini_sg
[19:24:27] [PASSED] ttm_tt_fini_shmem
[19:24:27] [PASSED] ttm_tt_create_basic
[19:24:27] [PASSED] ttm_tt_create_invalid_bo_type
[19:24:27] [PASSED] ttm_tt_create_ttm_exists
[19:24:27] [PASSED] ttm_tt_create_failed
[19:24:27] [PASSED] ttm_tt_destroy_basic
[19:24:27] [PASSED] ttm_tt_populate_null_ttm
[19:24:27] [PASSED] ttm_tt_populate_populated_ttm
[19:24:27] [PASSED] ttm_tt_unpopulate_basic
[19:24:27] [PASSED] ttm_tt_unpopulate_empty_ttm
[19:24:27] [PASSED] ttm_tt_swapin_basic
[19:24:27] ===================== [PASSED] ttm_tt ======================
[19:24:27] =================== ttm_bo (14 subtests) ===================
[19:24:27] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[19:24:27] [PASSED] Cannot be interrupted and sleeps
[19:24:27] [PASSED] Cannot be interrupted, locks straight away
[19:24:27] [PASSED] Can be interrupted, sleeps
[19:24:27] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[19:24:27] [PASSED] ttm_bo_reserve_locked_no_sleep
[19:24:27] [PASSED] ttm_bo_reserve_no_wait_ticket
[19:24:27] [PASSED] ttm_bo_reserve_double_resv
[19:24:27] [PASSED] ttm_bo_reserve_interrupted
[19:24:27] [PASSED] ttm_bo_reserve_deadlock
[19:24:27] [PASSED] ttm_bo_unreserve_basic
[19:24:27] [PASSED] ttm_bo_unreserve_pinned
[19:24:27] [PASSED] ttm_bo_unreserve_bulk
[19:24:27] [PASSED] ttm_bo_fini_basic
[19:24:27] [PASSED] ttm_bo_fini_shared_resv
[19:24:27] [PASSED] ttm_bo_pin_basic
[19:24:27] [PASSED] ttm_bo_pin_unpin_resource
[19:24:27] [PASSED] ttm_bo_multiple_pin_one_unpin
[19:24:27] ===================== [PASSED] ttm_bo ======================
[19:24:27] ============== ttm_bo_validate (22 subtests) ===============
[19:24:27] ============== ttm_bo_init_reserved_sys_man ===============
[19:24:27] [PASSED] Buffer object for userspace
[19:24:27] [PASSED] Kernel buffer object
[19:24:27] [PASSED] Shared buffer object
[19:24:27] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[19:24:27] ============== ttm_bo_init_reserved_mock_man ==============
[19:24:27] [PASSED] Buffer object for userspace
[19:24:27] [PASSED] Kernel buffer object
[19:24:27] [PASSED] Shared buffer object
[19:24:27] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[19:24:27] [PASSED] ttm_bo_init_reserved_resv
[19:24:27] ================== ttm_bo_validate_basic ==================
[19:24:27] [PASSED] Buffer object for userspace
[19:24:27] [PASSED] Kernel buffer object
[19:24:27] [PASSED] Shared buffer object
[19:24:27] ============== [PASSED] ttm_bo_validate_basic ==============
[19:24:27] [PASSED] ttm_bo_validate_invalid_placement
[19:24:27] ============= ttm_bo_validate_same_placement ==============
[19:24:27] [PASSED] System manager
[19:24:27] [PASSED] VRAM manager
[19:24:27] ========= [PASSED] ttm_bo_validate_same_placement ==========
[19:24:27] [PASSED] ttm_bo_validate_failed_alloc
[19:24:27] [PASSED] ttm_bo_validate_pinned
[19:24:27] [PASSED] ttm_bo_validate_busy_placement
[19:24:27] ================ ttm_bo_validate_multihop =================
[19:24:27] [PASSED] Buffer object for userspace
[19:24:27] [PASSED] Kernel buffer object
[19:24:27] [PASSED] Shared buffer object
[19:24:27] ============ [PASSED] ttm_bo_validate_multihop =============
[19:24:27] ========== ttm_bo_validate_no_placement_signaled ==========
[19:24:27] [PASSED] Buffer object in system domain, no page vector
[19:24:27] [PASSED] Buffer object in system domain with an existing page vector
[19:24:27] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[19:24:27] ======== ttm_bo_validate_no_placement_not_signaled ========
[19:24:27] [PASSED] Buffer object for userspace
[19:24:27] [PASSED] Kernel buffer object
[19:24:27] [PASSED] Shared buffer object
[19:24:27] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[19:24:27] [PASSED] ttm_bo_validate_move_fence_signaled
[19:24:27] ========= ttm_bo_validate_move_fence_not_signaled =========
[19:24:27] [PASSED] Waits for GPU
[19:24:27] [PASSED] Tries to lock straight away
[19:24:27] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[19:24:27] [PASSED] ttm_bo_validate_swapout
[19:24:27] [PASSED] ttm_bo_validate_happy_evict
[19:24:27] [PASSED] ttm_bo_validate_all_pinned_evict
[19:24:27] [PASSED] ttm_bo_validate_allowed_only_evict
[19:24:27] [PASSED] ttm_bo_validate_deleted_evict
[19:24:27] [PASSED] ttm_bo_validate_busy_domain_evict
[19:24:27] [PASSED] ttm_bo_validate_evict_gutting
[19:24:27] [PASSED] ttm_bo_validate_recrusive_evict
[19:24:27] ================= [PASSED] ttm_bo_validate =================
[19:24:27] ============================================================
[19:24:27] Testing complete. Ran 102 tests: passed: 102
[19:24:27] Elapsed time: 11.781s total, 1.774s configuring, 9.742s building, 0.226s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[19:24:27] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[19:24:29] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[19:24:37] Starting KUnit Kernel (1/1)...
[19:24:37] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[19:24:37] =============== dma-buf-fence (12 subtests) ================
[19:24:37] [PASSED] test_sanitycheck
[19:24:37] [PASSED] test_signaling
[19:24:37] [PASSED] test_add_callback
[19:24:37] [PASSED] test_late_add_callback
[19:24:37] [PASSED] test_rm_callback
[19:24:37] [PASSED] test_late_rm_callback
[19:24:37] [PASSED] test_status
[19:24:37] [PASSED] test_error
[19:24:37] [PASSED] test_wait
[19:24:37] [PASSED] test_wait_timeout
[19:24:37] [PASSED] test_stub
[19:24:37] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[19:24:37] ================== [PASSED] dma-buf-fence ==================
[19:24:37] ============ dma-buf-fence-chain (11 subtests) =============
[19:24:37] [PASSED] test_sanitycheck
[19:24:37] [PASSED] test_find_seqno
[19:24:37] [PASSED] test_find_signaled
[19:24:37] [PASSED] test_find_out_of_order
[19:24:42] [PASSED] test_find_gap
[19:24:42] [PASSED] test_find_race
[19:24:42] [PASSED] test_signal_forward
[19:24:42] [PASSED] test_signal_backward
[19:24:42] [PASSED] test_wait_forward
[19:24:42] [PASSED] test_wait_backward
[19:24:42] [PASSED] test_wait_random
[19:24:42] =============== [PASSED] dma-buf-fence-chain ===============
[19:24:42] ============ dma-buf-fence-unwrap (10 subtests) ============
[19:24:42] [PASSED] test_sanitycheck
[19:24:42] [PASSED] test_unwrap_array
[19:24:42] [PASSED] test_unwrap_chain
[19:24:42] [PASSED] test_unwrap_chain_array
[19:24:42] [PASSED] test_unwrap_merge
[19:24:42] [PASSED] test_unwrap_merge_duplicate
[19:24:42] [PASSED] test_unwrap_merge_seqno
[19:24:42] [PASSED] test_unwrap_merge_order
[19:24:42] [PASSED] test_unwrap_merge_complex
[19:24:42] [PASSED] test_unwrap_merge_complex_seqno
[19:24:42] ============== [PASSED] dma-buf-fence-unwrap ===============
[19:24:42] ================ dma-buf-resv (5 subtests) =================
[19:24:42] [PASSED] test_sanitycheck
[19:24:42] ===================== test_signaling ======================
[19:24:42] [PASSED] kernel
[19:24:42] [PASSED] write
[19:24:42] [PASSED] read
[19:24:42] [PASSED] bookkeep
[19:24:42] ================= [PASSED] test_signaling ==================
[19:24:42] ====================== test_for_each ======================
[19:24:42] [PASSED] kernel
[19:24:42] [PASSED] write
[19:24:42] [PASSED] read
[19:24:42] [PASSED] bookkeep
[19:24:42] ================== [PASSED] test_for_each ==================
[19:24:42] ================= test_for_each_unlocked ==================
[19:24:42] [PASSED] kernel
[19:24:42] [PASSED] write
[19:24:42] [PASSED] read
[19:24:42] [PASSED] bookkeep
[19:24:42] ============= [PASSED] test_for_each_unlocked ==============
[19:24:42] ===================== test_get_fences =====================
[19:24:42] [PASSED] kernel
[19:24:42] [PASSED] write
[19:24:42] [PASSED] read
[19:24:42] [PASSED] bookkeep
[19:24:42] ================= [PASSED] test_get_fences =================
[19:24:42] ================== [PASSED] dma-buf-resv ===================
[19:24:42] ============================================================
[19:24:42] Testing complete. Ran 50 tests: passed: 49, skipped: 1
[19:24:43] Elapsed time: 15.667s total, 1.808s configuring, 8.537s building, 5.284s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 01/32] drm/xe: Introduce xe_any helpers
2026-08-12 19:14 ` [PATCH v4 01/32] drm/xe: Introduce xe_any helpers Michal Wajdeczko
@ 2026-08-12 19:29 ` sashiko-bot
2026-08-13 16:51 ` Rodrigo Vivi
1 sibling, 0 replies; 73+ messages in thread
From: sashiko-bot @ 2026-08-12 19:29 UTC (permalink / raw)
To: Michal Wajdeczko; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Low] Macros xe_any_to_drm, xe_any_to_dev, and xe_any_to_pdev fail to compile when passed const pointers due to a C11 constraint violation in the underlying xe_any_to_xe macro.
- [Low] The macros xe_any_if_type and xe_any_id silently discard side effects for unmatched types.
--
--- Patch [1]: [PATCH v4 01/32] drm/xe: Introduce xe_any helpers ---
commit 933eba9892b749844655f0d89de25fa2cfc22f5b
Author: Michal Wajdeczko <michal.wajdeczko@intel.com>
Subject: drm/xe: Introduce xe_any helpers
This commit introduces a set of macros using _Generic to convert between
xe_device, xe_tile, xe_gt, drm_device, pci_dev, and device pointers. It
provides type-checking helpers and object identifier retrievals across the
xe driver.
> diff --git a/drivers/gpu/drm/xe/xe_any.h b/drivers/gpu/drm/xe/xe_any.h
> new file mode 100644
> index 0000000000000..5d97afa76915a
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_any.h
[ ... ]
> +/**
> + * xe_any_if_type() - Get the pointer only if it is @type pointer.
> + * @any: any pointer
> + * @type: data type to look for
> + *
> + * Return: the @type pointer or NULL.
> + */
> +#define xe_any_if_type(any, type) \
> + _Generic((any), \
> + __xe_any_to_self_assoc(type, (any)), \
> + default : NULL)
[Severity: Low]
Could this macro discard side effects for unmatched types?
If a caller passes an expression with side effects, like a function call or
pointer increment, to xe_any_if_type() or any macro that uses it, the side
effects will be evaluated if the type matches.
However, if the type falls to the default branch, the side effects will be
completely discarded because (any) is not evaluated in the default : NULL
association.
[ ... ]
> +/**
> + * xe_any_to_xe() - Obtain the &xe_device pointer.
> + * @any: the &pci_dev or the &xe_device or &xe_tile or &xe_gt pointer
> + *
> + * Return: the @xe_device pointer or backpointer.
> + */
> +#define xe_any_to_xe(any) \
> + _Generic((any), \
> + __xe_any_to_self_assoc(struct xe_device, (any)), \
> + __xe_any_to_other_assoc(/* */, xe_tile, xe_device, (any)), \
> + __xe_any_to_other_assoc(const, xe_tile, xe_device, (any)), \
> + __xe_any_to_other_assoc(/* */, xe_gt, xe_device, (any)), \
> + __xe_any_to_other_assoc(const, xe_gt, xe_device, (any)), \
> + __xe_any_to_other_assoc(, drm_device, xe_device, (any)), \
> + __xe_any_to_other_assoc(, pci_dev, xe_device, (any)), \
> + __xe_any_to_other_assoc(, device, xe_device, (any)))
> +
> +/**
> + * xe_any_to_drm() - Obtain the &drm_device pointer.
> + * @any: the &pci_dev or the &xe_device or &xe_tile or &xe_gt pointer
> + *
> + * Return: the @drm_device pointer or backpointer.
> + */
> +#define xe_any_to_drm(any) \
> + _Generic((any), \
> + __xe_any_to_self_assoc(struct drm_device, (any)), \
> + default : &xe_any_to_xe(any)->drm)
[Severity: Low]
Will this cause a C11 constraint violation during compilation if the parameter
is a const struct drm_device pointer?
When xe_any_to_drm is called with a const struct drm_device pointer, it falls
to the default branch which contains xe_any_to_xe(any).
The xe_any_to_xe macro lacks const associations for drm_device, pci_dev, and
device, and it does not have a default branch. This will cause compilation to
fail even though it is inside an unselected branch of the outer _Generic block.
[ ... ]
> +/**
> + * xe_any_id() - Get the identifier of the underlying object.
> + * @any: the &pci_dev or the &xe_device or &xe_tile or &xe_gt pointer
> + *
> + * Return: the identifier of the object, or 0 if not applicable/available.
> + */
> +#define xe_any_id(any) \
> + _Generic((any), \
> + __xe_any_to_other_assoc(/* */, xe_tile, id, (any)), \
> + __xe_any_to_other_assoc(const, xe_tile, id, (any)), \
> + __xe_any_to_other_assoc(/* */, xe_gt, id, (any)), \
> + __xe_any_to_other_assoc(const, xe_gt, id, (any)), \
> + default : 0)
[Severity: Low]
Does this macro also discard side effects for unmatched types, similar to
xe_any_if_type?
If (any) is an expression with side effects, they are evaluated if the type
matches, but are lost in the default : 0 branch because (any) is omitted.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812191450.11690-1-michal.wajdeczko@intel.com?part=1
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 11/32] drm/xe/log: Index all SIGID printk messages
2026-08-12 19:14 ` [PATCH v4 11/32] drm/xe/log: Index all SIGID printk messages Michal Wajdeczko
@ 2026-08-12 19:35 ` sashiko-bot
2026-08-13 12:31 ` Mallesh, Koujalagi
1 sibling, 0 replies; 73+ messages in thread
From: sashiko-bot @ 2026-08-12 19:35 UTC (permalink / raw)
To: Michal Wajdeczko; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The generic format string injected into the printk index does not structurally match the actual strings emitted to dmesg, breaking userspace log matching.
--
--- Patch [11]: [PATCH v4 11/32] drm/xe/log: Index all SIGID printk messages ---
commit f6d6ae64e4098e49206f6df0c6d973a867e46f50
Author: Michal Wajdeczko <michal.wajdeczko@intel.com>
drm/xe/log: Index all SIGID printk messages
This commit explicitly generates printk index entries using
dev_printk_index_emit() for xe_log_emit() messages. This ensures that
device level printk messages generated with varying prefixes are correctly
indexed for audit.
> diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h
> index 0928b08666171..53fe2bb7ddd37 100644
> --- a/drivers/gpu/drm/xe/xe_log.h
> +++ b/drivers/gpu/drm/xe/xe_log.h
> @@ -16,9 +16,17 @@
> struct pci_dev;
>
> __printf(8, 9)
> -void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
> - u32 component, u32 location, const void *data, size_t len,
> - const char *fmt, ...);
> +void __xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
> + u32 component, u32 location, const void *data, size_t len,
> + const char *fmt, ...);
> +
> +#define __xe_log_emit_printk_index(fmt) \
> + dev_printk_index_emit(NULL, "[drm]%s SIGID=%u %s(%s)%s%s%s: " fmt);
[Severity: Medium]
Does this hardcoded format string structurally diverge from the actual strings
emitted to dmesg?
Looking at log_emit_dmesg() in drivers/gpu/drm/xe/xe_log.c, when the data
parameter is NULL, the format string dynamically omits the parentheses:
else
log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s%s%s%s%pV",
sigid, sev_prefix, hwe_prefix,
loc_prefix, comp_prefix, vaf);
Since the static string registered here contains literal parentheses and a
trailing colon, but these characters are dynamically omitted when data is
NULL or component is 0, will this mismatch cause regexes or exact-match
parsers generated from the index to fail to match the logs?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812191450.11690-1-michal.wajdeczko@intel.com?part=11
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 27/32] drm/xe/pcode: Report 'initialization timedout' error using SIGID
2026-08-12 19:14 ` [PATCH v4 27/32] drm/xe/pcode: Report 'initialization timedout' " Michal Wajdeczko
@ 2026-08-12 19:49 ` sashiko-bot
0 siblings, 0 replies; 73+ messages in thread
From: sashiko-bot @ 2026-08-12 19:49 UTC (permalink / raw)
To: Michal Wajdeczko; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] Uncapped exponential backoff causes massive over-sleeping and potential kernel panic.
--
--- Patch [27]: [PATCH v4 27/32] drm/xe/pcode: Report 'initialization timedout' error using SIGID ---
commit 3feb217014d673b0d9d119f4debacacb0e357e77
Author: Michal Wajdeczko <michal.wajdeczko@intel.com>
drm/xe/pcode: Report 'initialization timedout' error using SIGID
This commit updates the PCODE initialization timeout error to use the
xe_log_err() helper instead of drm_err(). It also refactors the 3 minute
timeout constant to use USEC_PER_SEC.
> diff --git a/drivers/gpu/drm/xe/xe_pcode.c b/drivers/gpu/drm/xe/xe_pcode.c
> index 14b13a11d1d6d..e1b8062541a91 100644
> --- a/drivers/gpu/drm/xe/xe_pcode.c
> +++ b/drivers/gpu/drm/xe/xe_pcode.c
> @@ -297,7 +297,7 @@ int xe_pcode_ready(struct xe_device *xe, bool locked)
[ ... ]
> if (locked)
> mutex_lock(&tile->pcode.lock);
>
> ret = pcode_try_request(tile, DGFX_PCODE_STATUS, request,
> DGFX_INIT_STATUS_COMPLETE,
> DGFX_INIT_STATUS_COMPLETE,
> &status, false, timeout_us, locked);
[Severity: High]
This is a pre-existing issue, but can the 3-minute timeout passed here
trigger a kernel panic via the Hung Task Detector if PCODE is unresponsive?
Looking at pcode_try_request() in drivers/gpu/drm/xe/xe_pcode.c, the wait
duration is exponentially increased without any cap:
usleep_range(wait, wait << 1);
wait <<= 1;
When the timeout is 180,000,000 us (3 minutes), the polling loop doubles the
wait variable every iteration. When the total slept time reaches ~167 seconds,
the wait variable becomes ~83.8 seconds. The loop then executes:
usleep_range(83886080, 167772160);
Since usleep_range() sleeps in TASK_UNINTERRUPTIBLE, sleeping for up to 167.7
seconds exceeds the default 120-second hung task watchdog timeout, causing a
panic. Furthermore, if atomic=true was used with a large timeout, it would
result in a massive udelay(), violating architectural limits with preemption
disabled.
Could a cap be added to the maximum wait time in pcode_try_request() to
prevent massive over-sleeping?
>
> if (locked)
> mutex_unlock(&tile->pcode.lock);
>
> if (ret)
> - drm_err(&xe->drm,
> - "PCODE initialization timedout after: 3 min\n");
> + xe_log_err(tile, PCODE, ret, "initialization timedout after %ld seconds\n",
> + timeout_us / USEC_PER_SEC);
>
> return ret;
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812191450.11690-1-michal.wajdeczko@intel.com?part=27
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 26/32] drm/xe/pcode: Report 'timeout, retrying' error using SIGID
2026-08-12 19:14 ` [PATCH v4 26/32] drm/xe/pcode: Report 'timeout, retrying' " Michal Wajdeczko
@ 2026-08-12 19:51 ` sashiko-bot
2026-08-13 16:46 ` Umesh Nerlige Ramappa
1 sibling, 0 replies; 73+ messages in thread
From: sashiko-bot @ 2026-08-12 19:51 UTC (permalink / raw)
To: Michal Wajdeczko; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] Uncapped exponential backoff causes udelay() to exceed architecture limits, risking integer overflow and undefined delay times.
--
--- Patch [26]: [PATCH v4 26/32] drm/xe/pcode: Report 'timeout, retrying' error using SIGID ---
commit 75f6f9c4d8c1d251fab2b4d894d2352070119c43
Author: Michal Wajdeczko <michal.wajdeczko@intel.com>
drm/xe/pcode: Report 'timeout, retrying' error using SIGID
This commit replaces a drm_err message with the xe_log_err helper to report
PCODE timeout retries using the SIGID tagging infrastructure.
> diff --git a/drivers/gpu/drm/xe/xe_pcode.c b/drivers/gpu/drm/xe/xe_pcode.c
> index 014632e113388..14b13a11d1d6d 100644
> --- a/drivers/gpu/drm/xe/xe_pcode.c
> +++ b/drivers/gpu/drm/xe/xe_pcode.c
[ ... ]
> @@ -218,8 +218,7 @@ int xe_pcode_request(struct xe_tile *tile, u32 mbox, u32 request,
> * requests, and for any quirks of the PCODE firmware that delays
> * the request completion.
> */
> - drm_err(&tile_to_xe(tile)->drm,
> - "PCODE timeout, retrying with preemption disabled\n");
> + xe_log_err(tile, PCODE, ret, "timeout, retrying with preemption disabled\n");
> preempt_disable();
> ret = pcode_try_request(tile, mbox, request, reply_mask, reply, &status,
> true, 50 * 1000, true);
[Severity: High]
This is a pre-existing issue, but does this 50ms atomic timeout risk
integer overflow in udelay?
Looking at pcode_try_request, which is called here with atomic set to true:
static int pcode_try_request(..., bool atomic, int timeout_us, ...)
{
int slept, wait = 10;
...
for (slept = 0; slept < timeout_us; slept += wait) {
...
if (atomic)
udelay(wait);
else
usleep_range(wait, wait << 1);
wait <<= 1;
}
...
}
The wait variable grows exponentially without a cap. For a 50,000us timeout
loop, wait will repeatedly double and can reach well over 20,000us before the
timeout expires. This significantly exceeds typical architecture limits for
udelay, which are often around 1 to 2 milliseconds.
Can this uncapped exponential growth cause internal timer math to overflow
and trigger the hard lockup detector when firmware becomes unresponsive?
> preempt_enable();
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812191450.11690-1-michal.wajdeczko@intel.com?part=26
^ permalink raw reply [flat|nested] 73+ messages in thread
* ✗ Xe.CI.BAT: failure for drm/xe: Add structured SIGID error logging infrastructure (rev4)
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (33 preceding siblings ...)
2026-08-12 19:24 ` ✓ CI.KUnit: success " Patchwork
@ 2026-08-12 20:34 ` Patchwork
2026-08-13 2:47 ` ✗ Xe.CI.FULL: " Patchwork
35 siblings, 0 replies; 73+ messages in thread
From: Patchwork @ 2026-08-12 20:34 UTC (permalink / raw)
To: Michal Wajdeczko; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 4309 bytes --]
== Series Details ==
Series: drm/xe: Add structured SIGID error logging infrastructure (rev4)
URL : https://patchwork.freedesktop.org/series/171022/
State : failure
== Summary ==
CI Bug Log - changes from xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a_BAT -> xe-pw-171022v4_BAT
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-171022v4_BAT absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-171022v4_BAT, 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 (13 -> 11)
------------------------------
Missing (2): bat-bmg-2 bat-nvls-1
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-171022v4_BAT:
### IGT changes ###
#### Possible regressions ####
* igt@xe_exec_fault_mode@invalid-va:
- bat-bmg-1: [PASS][1] -> [DMESG-WARN][2] +1 other test dmesg-warn
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/bat-bmg-1/igt@xe_exec_fault_mode@invalid-va.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/bat-bmg-1/igt@xe_exec_fault_mode@invalid-va.html
- bat-lnl-2: [PASS][3] -> [DMESG-WARN][4] +1 other test dmesg-warn
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/bat-lnl-2/igt@xe_exec_fault_mode@invalid-va.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/bat-lnl-2/igt@xe_exec_fault_mode@invalid-va.html
- bat-nvls-2: [PASS][5] -> [DMESG-WARN][6] +1 other test dmesg-warn
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/bat-nvls-2/igt@xe_exec_fault_mode@invalid-va.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/bat-nvls-2/igt@xe_exec_fault_mode@invalid-va.html
- bat-wcl-1: [PASS][7] -> [DMESG-WARN][8] +1 other test dmesg-warn
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/bat-wcl-1/igt@xe_exec_fault_mode@invalid-va.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/bat-wcl-1/igt@xe_exec_fault_mode@invalid-va.html
- bat-ptl-1: [PASS][9] -> [DMESG-WARN][10] +1 other test dmesg-warn
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/bat-ptl-1/igt@xe_exec_fault_mode@invalid-va.html
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/bat-ptl-1/igt@xe_exec_fault_mode@invalid-va.html
- bat-lnl-1: [PASS][11] -> [DMESG-WARN][12] +1 other test dmesg-warn
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/bat-lnl-1/igt@xe_exec_fault_mode@invalid-va.html
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/bat-lnl-1/igt@xe_exec_fault_mode@invalid-va.html
* igt@xe_exec_system_allocator@fault:
- bat-wcl-2: [PASS][13] -> [DMESG-WARN][14] +1 other test dmesg-warn
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/bat-wcl-2/igt@xe_exec_system_allocator@fault.html
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/bat-wcl-2/igt@xe_exec_system_allocator@fault.html
- bat-ptl-2: [PASS][15] -> [DMESG-WARN][16] +1 other test dmesg-warn
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/bat-ptl-2/igt@xe_exec_system_allocator@fault.html
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/bat-ptl-2/igt@xe_exec_system_allocator@fault.html
Build changes
-------------
* Linux: xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a -> xe-pw-171022v4
IGT_9054: 3d819a8f511b2bcd844647bcf7e433b9407d058e @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a: 43db79ba5c8eac68b393cca2faa0b13a6505de1a
xe-pw-171022v4: 171022v4
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/index.html
[-- Attachment #2: Type: text/html, Size: 4969 bytes --]
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 24/32] drm/xe: Report 'device wedged' errors using SIGID
2026-08-12 19:14 ` [PATCH v4 24/32] drm/xe: Report 'device wedged' errors " Michal Wajdeczko
@ 2026-08-12 22:28 ` Rodrigo Vivi
2026-08-13 11:56 ` Mallesh, Koujalagi
1 sibling, 0 replies; 73+ messages in thread
From: Rodrigo Vivi @ 2026-08-12 22:28 UTC (permalink / raw)
To: Michal Wajdeczko; +Cc: intel-xe, Aravind Iddamsetty, Mallesh Koujalagi
On Wed, Aug 12, 2026 at 09:14:40PM +0200, Michal Wajdeczko wrote:
> Report 'device wedged' error using xe_log_err_fatal() helper.
> Use -EIO as the error cause, as nothing else is provided here.
> The hints about the recovery method and bug filing are now
> separated as it only needs to be printed once.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_device.c | 16 ++++++++++------
> 1 file changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> index 71111ad32465..74d566693dfd 100644
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c
> @@ -48,6 +48,7 @@
> #include "xe_i2c.h"
> #include "xe_irq.h"
> #include "xe_late_bind_fw.h"
> +#include "xe_log.h"
> #include "xe_mmio.h"
> #include "xe_module.h"
> #include "xe_nvm.h"
> @@ -1442,6 +1443,9 @@ void xe_device_set_wedged_method(struct xe_device *xe, unsigned long method)
> xe->wedged.method = method;
> }
>
> +#define WEDGED_URL "https://docs.kernel.org/gpu/drm-uapi.html#device-wedging"
> +#define XE_BUG_URL "https://gitlab.freedesktop.org/drm/xe/kernel/issues/new"
From the old comments:
yes, let's keep these defines as is and where they are. No
need for changes.
> +
> /**
> * xe_device_declare_wedged - Declare device wedged
> * @xe: xe device instance
> @@ -1473,12 +1477,12 @@ void xe_device_declare_wedged(struct xe_device *xe)
> if (!atomic_xchg(&xe->wedged.flag, 1)) {
> xe->needs_flr_on_fini = true;
> xe_pm_runtime_get_noresume(xe);
> - drm_err(&xe->drm,
> - "CRITICAL: Xe has declared device %s as wedged.\n"
> - "IOCTLs and executions are blocked.\n"
> - "For recovery procedure, refer to https://docs.kernel.org/gpu/drm-uapi.html#device-wedging\n"
> - "Please file a _new_ bug report at https://gitlab.freedesktop.org/drm/xe/kernel/issues/new\n",
> - dev_name(xe->drm.dev));
> +
> + xe_log_err_fatal(xe, WEDGED, -EIO, "Device declared wedged!\n");
> + xe_err_once(xe, "IOCTLs and executions are now blocked!\n"
> + "For recovery procedure, refer to %s\n"
> + "Please file a _new_ bug report at %s\n",
> + WEDGED_URL, XE_BUG_URL);
I like the idea of refactor the wedge functions to give a proper errno,
but definitely for a separate future thought.
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> }
>
> for_each_gt(gt, xe, id)
> --
> 2.47.1
>
^ permalink raw reply [flat|nested] 73+ messages in thread
* ✗ Xe.CI.FULL: failure for drm/xe: Add structured SIGID error logging infrastructure (rev4)
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
` (34 preceding siblings ...)
2026-08-12 20:34 ` ✗ Xe.CI.BAT: failure " Patchwork
@ 2026-08-13 2:47 ` Patchwork
35 siblings, 0 replies; 73+ messages in thread
From: Patchwork @ 2026-08-13 2:47 UTC (permalink / raw)
To: Michal Wajdeczko; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 20783 bytes --]
== Series Details ==
Series: drm/xe: Add structured SIGID error logging infrastructure (rev4)
URL : https://patchwork.freedesktop.org/series/171022/
State : failure
== Summary ==
CI Bug Log - changes from xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a_FULL -> xe-pw-171022v4_FULL
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-171022v4_FULL absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-171022v4_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 (2 -> 2)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-171022v4_FULL:
### IGT changes ###
#### Possible regressions ####
* igt@kms_frontbuffer_tracking@fbchdr-2p-scndscrn-indfb-msflip-blt:
- shard-bmg: [PASS][1] -> [ABORT][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/shard-bmg-2/igt@kms_frontbuffer_tracking@fbchdr-2p-scndscrn-indfb-msflip-blt.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-4/igt@kms_frontbuffer_tracking@fbchdr-2p-scndscrn-indfb-msflip-blt.html
* igt@xe_exec_fault_mode@invalid-va:
- shard-bmg: [PASS][3] -> [DMESG-WARN][4] +11 other tests dmesg-warn
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/shard-bmg-9/igt@xe_exec_fault_mode@invalid-va.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-6/igt@xe_exec_fault_mode@invalid-va.html
* igt@xe_waitfence@exec_queue-reset-wait:
- shard-lnl: [PASS][5] -> [DMESG-WARN][6] +9 other tests dmesg-warn
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/shard-lnl-7/igt@xe_waitfence@exec_queue-reset-wait.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-lnl-3/igt@xe_waitfence@exec_queue-reset-wait.html
#### Warnings ####
* igt@xe_survivability@runtime-survivability:
- shard-bmg: [DMESG-WARN][7] ([Intel XE#6627] / [Intel XE#7419]) -> [DMESG-WARN][8]
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/shard-bmg-10/igt@xe_survivability@runtime-survivability.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-6/igt@xe_survivability@runtime-survivability.html
* igt@xe_wedged@wedged-at-any-timeout:
- shard-bmg: [DMESG-WARN][9] ([Intel XE#5545]) -> [DMESG-WARN][10]
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/shard-bmg-1/igt@xe_wedged@wedged-at-any-timeout.html
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-9/igt@xe_wedged@wedged-at-any-timeout.html
Known issues
------------
Here are the changes found in xe-pw-171022v4_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip:
- shard-bmg: NOTRUN -> [SKIP][11] ([Intel XE#1124]) +1 other test skip
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html
* igt@kms_big_fb@yf-tiled-addfb:
- shard-bmg: NOTRUN -> [SKIP][12] ([Intel XE#2328] / [Intel XE#7367])
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_big_fb@yf-tiled-addfb.html
* igt@kms_ccs@bad-rotation-90-4-tiled-mtl-mc-ccs:
- shard-bmg: NOTRUN -> [SKIP][13] ([Intel XE#2887]) +1 other test skip
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-mc-ccs.html
* igt@kms_ccs@crc-primary-suspend-y-tiled-ccs:
- shard-bmg: NOTRUN -> [SKIP][14] ([Intel XE#3432])
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_ccs@crc-primary-suspend-y-tiled-ccs.html
* igt@kms_cdclk@plane-scaling:
- shard-bmg: NOTRUN -> [SKIP][15] ([Intel XE#2724] / [Intel XE#7449])
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_cdclk@plane-scaling.html
* igt@kms_chamelium_color@ctm-red-to-blue:
- shard-bmg: NOTRUN -> [SKIP][16] ([Intel XE#2325] / [Intel XE#7358])
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_chamelium_color@ctm-red-to-blue.html
* igt@kms_chamelium_hpd@dp-hpd-after-suspend:
- shard-bmg: NOTRUN -> [SKIP][17] ([Intel XE#2252])
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_chamelium_hpd@dp-hpd-after-suspend.html
* igt@kms_content_protection@uevent-hdcp14:
- shard-bmg: NOTRUN -> [FAIL][18] ([Intel XE#6707] / [Intel XE#7439]) +1 other test fail
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_content_protection@uevent-hdcp14.html
* igt@kms_cursor_crc@cursor-random-256x256:
- shard-bmg: [PASS][19] -> [INCOMPLETE][20] ([Intel XE#6819]) +1 other test incomplete
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/shard-bmg-2/igt@kms_cursor_crc@cursor-random-256x256.html
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-3/igt@kms_cursor_crc@cursor-random-256x256.html
* igt@kms_dp_link_training@uhbr-mst:
- shard-bmg: NOTRUN -> [SKIP][21] ([Intel XE#4354] / [Intel XE#7386])
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_dp_link_training@uhbr-mst.html
* igt@kms_feature_discovery@display-3x:
- shard-bmg: NOTRUN -> [SKIP][22] ([Intel XE#2373] / [Intel XE#7448])
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_feature_discovery@display-3x.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@c-dp2:
- shard-bmg: [PASS][23] -> [FAIL][24] ([Intel XE#3321]) +1 other test fail
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/shard-bmg-5/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-dp2.html
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-9/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-dp2.html
* igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling:
- shard-bmg: NOTRUN -> [SKIP][25] ([Intel XE#7178] / [Intel XE#7351])
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-downscaling.html
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-mmap-wc:
- shard-bmg: NOTRUN -> [SKIP][26] ([Intel XE#2311]) +10 other tests skip
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbc-2p-rte:
- shard-bmg: NOTRUN -> [SKIP][27] ([Intel XE#4141]) +2 other tests skip
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_frontbuffer_tracking@fbc-2p-rte.html
* igt@kms_frontbuffer_tracking@fbcdrrs-argb161616f-draw-mmap-wc:
- shard-bmg: NOTRUN -> [SKIP][28] ([Intel XE#7061] / [Intel XE#7356])
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_frontbuffer_tracking@fbcdrrs-argb161616f-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbchdr-tiling-y:
- shard-bmg: NOTRUN -> [SKIP][29] ([Intel XE#7399])
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_frontbuffer_tracking@fbchdr-tiling-y.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-blt:
- shard-bmg: NOTRUN -> [SKIP][30] ([Intel XE#2313]) +7 other tests skip
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-pri-shrfb-draw-blt.html
* igt@kms_frontbuffer_tracking@plane-fbc-rte:
- shard-bmg: NOTRUN -> [SKIP][31] ([Intel XE#2350] / [Intel XE#7503])
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_frontbuffer_tracking@plane-fbc-rte.html
* igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier:
- shard-bmg: NOTRUN -> [SKIP][32] ([Intel XE#7283])
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_plane@pixel-format-4-tiled-mtl-mc-ccs-modifier.html
* igt@kms_pm_dc@dc3co-vpb-simulation:
- shard-bmg: NOTRUN -> [SKIP][33] ([Intel XE#8395] / [Intel XE#8396]) +1 other test skip
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_pm_dc@dc3co-vpb-simulation.html
* igt@kms_pm_dc@dc3co-vpb-simulation@psr2-xrgb8888:
- shard-bmg: NOTRUN -> [SKIP][34] ([Intel XE#8396]) +1 other test skip
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_pm_dc@dc3co-vpb-simulation@psr2-xrgb8888.html
* igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-sf:
- shard-bmg: NOTRUN -> [SKIP][35] ([Intel XE#1489])
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-exceed-sf.html
* igt@kms_psr@fbc-psr-sprite-blt:
- shard-bmg: NOTRUN -> [SKIP][36] ([Intel XE#2234] / [Intel XE#2850]) +1 other test skip
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_psr@fbc-psr-sprite-blt.html
* igt@xe_evict@evict-small-multi-queue-cm:
- shard-bmg: NOTRUN -> [SKIP][37] ([Intel XE#8370])
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@xe_evict@evict-small-multi-queue-cm.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-null-defer-bind:
- shard-bmg: NOTRUN -> [SKIP][38] ([Intel XE#2322] / [Intel XE#7372]) +1 other test skip
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-null-defer-bind.html
* igt@xe_exec_multi_queue@two-queues-basic-smem:
- shard-bmg: NOTRUN -> [SKIP][39] ([Intel XE#8364]) +5 other tests skip
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@xe_exec_multi_queue@two-queues-basic-smem.html
* igt@xe_exec_threads@threads-multi-queue-mixed-basic:
- shard-bmg: NOTRUN -> [SKIP][40] ([Intel XE#8378])
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@xe_exec_threads@threads-multi-queue-mixed-basic.html
* igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_create:
- shard-bmg: [PASS][41] -> [ABORT][42] ([Intel XE#8007])
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/shard-bmg-8/igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_create.html
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-2/igt@xe_fault_injection@vm-bind-fail-vm_bind_ioctl_ops_create.html
* igt@xe_multigpu_svm@mgpu-atomic-op-prefetch:
- shard-bmg: NOTRUN -> [SKIP][43] ([Intel XE#6964]) +1 other test skip
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@xe_multigpu_svm@mgpu-atomic-op-prefetch.html
* igt@xe_page_reclaim@binds-null-vma:
- shard-bmg: NOTRUN -> [SKIP][44] ([Intel XE#7793])
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@xe_page_reclaim@binds-null-vma.html
* igt@xe_pm@d3cold-mmap-vram:
- shard-bmg: NOTRUN -> [SKIP][45] ([Intel XE#2284] / [Intel XE#7370])
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@xe_pm@d3cold-mmap-vram.html
#### Possible fixes ####
* igt@kms_async_flips@alternate-sync-async-flip:
- shard-bmg: [FAIL][46] ([Intel XE#3718] / [Intel XE#6078]) -> [PASS][47] +2 other tests pass
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/shard-bmg-6/igt@kms_async_flips@alternate-sync-async-flip.html
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-5/igt@kms_async_flips@alternate-sync-async-flip.html
* igt@kms_async_flips@alternate-sync-async-flip@pipe-d-hdmi-a-3:
- shard-bmg: [FAIL][48] ([Intel XE#6078]) -> [PASS][49] +1 other test pass
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/shard-bmg-6/igt@kms_async_flips@alternate-sync-async-flip@pipe-d-hdmi-a-3.html
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-5/igt@kms_async_flips@alternate-sync-async-flip@pipe-d-hdmi-a-3.html
* igt@kms_cursor_legacy@flip-vs-cursor-legacy:
- shard-bmg: [FAIL][50] ([Intel XE#7571]) -> [PASS][51]
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/shard-bmg-5/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@kms_cursor_legacy@flip-vs-cursor-legacy.html
* igt@kms_flip@flip-vs-expired-vblank@c-edp1:
- shard-lnl: [FAIL][52] ([Intel XE#301] / [Intel XE#3149]) -> [PASS][53]
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html
* igt@xe_fault_injection@inject-fault-probe-function-xe_mmio_probe_early:
- shard-bmg: [ABORT][54] ([Intel XE#8007]) -> [PASS][55]
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/shard-bmg-4/igt@xe_fault_injection@inject-fault-probe-function-xe_mmio_probe_early.html
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-1/igt@xe_fault_injection@inject-fault-probe-function-xe_mmio_probe_early.html
* igt@xe_pmu@engine-activity-accuracy-90@engine-drm_xe_engine_class_video_enhance0:
- shard-bmg: [FAIL][56] ([Intel XE#8555]) -> [PASS][57] +7 other tests pass
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/shard-bmg-8/igt@xe_pmu@engine-activity-accuracy-90@engine-drm_xe_engine_class_video_enhance0.html
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-4/igt@xe_pmu@engine-activity-accuracy-90@engine-drm_xe_engine_class_video_enhance0.html
#### Warnings ####
* igt@kms_flip@flip-vs-expired-vblank:
- shard-lnl: [FAIL][58] ([Intel XE#301] / [Intel XE#3149]) -> [FAIL][59] ([Intel XE#301])
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank.html
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-bmg: [SKIP][60] ([Intel XE#2426] / [Intel XE#5848]) -> [SKIP][61] ([Intel XE#2509] / [Intel XE#7437])
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a/shard-bmg-2/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/shard-bmg-4/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
[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#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
[Intel XE#2328]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2328
[Intel XE#2350]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2350
[Intel XE#2373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2373
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
[Intel XE#2724]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2724
[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#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
[Intel XE#3321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3321
[Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
[Intel XE#3718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3718
[Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
[Intel XE#4354]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4354
[Intel XE#5545]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5545
[Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
[Intel XE#6078]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6078
[Intel XE#6627]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6627
[Intel XE#6707]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6707
[Intel XE#6819]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6819
[Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
[Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
[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#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
[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#7367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7367
[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#7386]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7386
[Intel XE#7399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7399
[Intel XE#7419]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7419
[Intel XE#7437]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7437
[Intel XE#7439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7439
[Intel XE#7448]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7448
[Intel XE#7449]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7449
[Intel XE#7503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7503
[Intel XE#7571]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7571
[Intel XE#7793]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7793
[Intel XE#8007]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8007
[Intel XE#8364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8364
[Intel XE#8370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8370
[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#8555]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8555
Build changes
-------------
* Linux: xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a -> xe-pw-171022v4
IGT_9054: 3d819a8f511b2bcd844647bcf7e433b9407d058e @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-5582-43db79ba5c8eac68b393cca2faa0b13a6505de1a: 43db79ba5c8eac68b393cca2faa0b13a6505de1a
xe-pw-171022v4: 171022v4
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171022v4/index.html
[-- Attachment #2: Type: text/html, Size: 22689 bytes --]
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 09/32] drm/xe/log: Add SIGID log helpers for component & severity
2026-08-12 19:14 ` [PATCH v4 09/32] drm/xe/log: Add SIGID log helpers for component & severity Michal Wajdeczko
@ 2026-08-13 4:38 ` Mallesh, Koujalagi
0 siblings, 0 replies; 73+ messages in thread
From: Mallesh, Koujalagi @ 2026-08-13 4:38 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe; +Cc: Rodrigo Vivi
On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
> There are only few CPER severity levels defined, add some helpers
> to avoid forcing developers to write full CPER severity enum name
> in every macro call.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
LGTM,
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_log.h | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h
> index c30db02950b0..c56306a183e7 100644
> --- a/drivers/gpu/drm/xe/xe_log.h
> +++ b/drivers/gpu/drm/xe/xe_log.h
> @@ -103,4 +103,16 @@ void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
> xe_log_from((any), (cper_sev), (int)XE_LOG_COMPONENT_##TAG##_SIGID, \
> XE_LOG_COMPONENT_##TAG, (data), (len), fmt, ##args)
>
> +#define xe_log_comp_fatal(any, TAG, data, len, fmt, args...) \
> + xe_log_comp((any), CPER_SEV_FATAL, TAG, (data), (len), fmt, ##args)
> +
> +#define xe_log_comp_recoverable(any, TAG, data, len, fmt, args...) \
> + xe_log_comp((any), CPER_SEV_RECOVERABLE, TAG, (data), (len), fmt, ##args)
> +
> +#define xe_log_comp_corrected(any, TAG, data, len, fmt, args...) \
> + xe_log_comp((any), CPER_SEV_CORRECTED, TAG, (data), (len), fmt, ##args)
> +
> +#define xe_log_comp_info(any, TAG, data, len, fmt, args...) \
> + xe_log_comp((any), CPER_SEV_INFORMATIONAL, TAG, (data), (len), fmt, ##args)
> +
> #endif
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 12/32] drm/xe/log: Add hardware error signatures
2026-08-12 19:14 ` [PATCH v4 12/32] drm/xe/log: Add hardware error signatures Michal Wajdeczko
@ 2026-08-13 5:03 ` Mallesh, Koujalagi
0 siblings, 0 replies; 73+ messages in thread
From: Mallesh, Koujalagi @ 2026-08-13 5:03 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe; +Cc: Rodrigo Vivi, Yoni Levitt
On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
> Extend our error signatures definitions xe_sigid to cover also
> hardware-originated errors and make them distinguishable from
> initially defined software-initiated errors.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Please add "firmware/hardware-originated errors" in comment message.
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Yoni Levitt <yoni.levitt@intel.com>
> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> ---
> v2: update comment (Sashiko)
> v3: rebased
> ---
> drivers/gpu/drm/xe/abi/xe_sigid_abi.h | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/xe/abi/xe_sigid_abi.h b/drivers/gpu/drm/xe/abi/xe_sigid_abi.h
> index 93967183ae51..8e3c7ef579b9 100644
> --- a/drivers/gpu/drm/xe/abi/xe_sigid_abi.h
> +++ b/drivers/gpu/drm/xe/abi/xe_sigid_abi.h
> @@ -137,12 +137,18 @@
> * @XE_SIGID_GT_TDR: Engine hang / timeout detection and recovery (reset).
> * @XE_SIGID_MEM_FAULT: VM bind, page fault or GTT fault.
> * @XE_SIGID_IO_BUS: Runtime PCIe / IOMMU / MMIO access fault.
> + * @XE_SIGID_HW: Generic hardware failure.
> + * @XE_SIGID_PCIE: PCIe interface errors.
> + * @XE_SIGID_DEVICE_MEMORY: Device memory errors.
> + * @XE_SIGID_CORE_COMPUTE: Compute/shader core errors.
> + * @XE_SIGID_FABRIC: Fabric errors.
> + * @XE_SIGID_SOC_INTERNAL: SoC-internal errors.
> *
> * Each SIGID represents the report sites the driver detects and reports.
> * Values are numbered sequentially, are only ever appended, and are never
> * renumbered or reused.
> *
> - * Firmware- and hardware-originated signatures are not listed yet here.
> + * Firmware- and hardware-originated signatures are numbered separately.
> */
> enum xe_sigid {
> XE_SIGID_SW = INTEL_SIGID_GPU_XE_SOFTWARE_START,
> @@ -154,6 +160,13 @@ enum xe_sigid {
> XE_SIGID_GT_TDR = INTEL_SIGID_GPU_XE_SOFTWARE_START + 6,
> XE_SIGID_MEM_FAULT = INTEL_SIGID_GPU_XE_SOFTWARE_START + 7,
> XE_SIGID_IO_BUS = INTEL_SIGID_GPU_XE_SOFTWARE_START + 8,
> +
> + XE_SIGID_HW = INTEL_SIGID_GPU_XE_HARDWARE_START,
> + XE_SIGID_PCIE = INTEL_SIGID_GPU_XE_HARDWARE_START + 1,
> + XE_SIGID_DEVICE_MEMORY = INTEL_SIGID_GPU_XE_HARDWARE_START + 2,
> + XE_SIGID_CORE_COMPUTE = INTEL_SIGID_GPU_XE_HARDWARE_START + 3,
> + XE_SIGID_FABRIC = INTEL_SIGID_GPU_XE_HARDWARE_START + 4,
> + XE_SIGID_SOC_INTERNAL = INTEL_SIGID_GPU_XE_HARDWARE_START + 5,
> };
>
> #endif
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 18/32] drm/xe: Report 'probe blocked' error using SIGID
2026-08-12 19:14 ` [PATCH v4 18/32] drm/xe: Report 'probe blocked' error using SIGID Michal Wajdeczko
@ 2026-08-13 6:26 ` Mallesh, Koujalagi
0 siblings, 0 replies; 73+ messages in thread
From: Mallesh, Koujalagi @ 2026-08-13 6:26 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe; +Cc: Rodrigo Vivi, Aravind Iddamsetty
On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
> Report 'driver loading blocked' error using xe_log_info() helper.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Simply we are logging information using xe_log_info right? not error.
If you want to log as error then please use xe_log_err right?
Please update commit accordingly.
After above changes
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> ---
> v2: use info severity (Aravind)
> v3: drop "Probe " prefix (Mallesh)
> drop redundant vendor code, update message (Michal)
> ---
> drivers/gpu/drm/xe/xe_pci.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
> index 36d62927b969..b19efef1c5cd 100644
> --- a/drivers/gpu/drm/xe/xe_pci.c
> +++ b/drivers/gpu/drm/xe/xe_pci.c
> @@ -25,6 +25,7 @@
> #include "xe_gt_printk.h"
> #include "xe_gt_sriov_vf.h"
> #include "xe_guc.h"
> +#include "xe_log.h"
> #include "xe_mmio.h"
> #include "xe_module.h"
> #include "xe_pci_error.h"
> @@ -1172,8 +1173,8 @@ static int xe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
> }
>
> if (id_blocked(pdev->device)) {
> - dev_info(&pdev->dev, "Probe blocked for device [%04x:%04x].\n",
> - pdev->vendor, pdev->device);
> + xe_log_info(pdev, PROBE, "driver loading blocked for device '%04x'\n",
> + pdev->device);
> return -ENODEV;
> }
>
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 19/32] drm/xe: Report all probe errors using SIGID
2026-08-12 19:14 ` [PATCH v4 19/32] drm/xe: Report all probe errors " Michal Wajdeczko
@ 2026-08-13 6:50 ` Mallesh, Koujalagi
2026-08-13 9:12 ` Michal Wajdeczko
0 siblings, 1 reply; 73+ messages in thread
From: Mallesh, Koujalagi @ 2026-08-13 6:50 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe
Cc: Rodrigo Vivi, Aravind Iddamsetty, Dnyaneshwar Bhadane
On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
> For completeness, we should catch and report all probe errors, not
> just the ones that have explicit error message. Split xe_pci_probe()
> function after a display check to avoid reporting -EPROBE_DEFER and
> use xe_log_err_fatal() helper to report all returned errors.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> ---
> Cc: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com>
> ---
> drivers/gpu/drm/xe/xe_pci.c | 27 +++++++++++++++++++++------
> 1 file changed, 21 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
> index b19efef1c5cd..ab4da1d9a9f1 100644
> --- a/drivers/gpu/drm/xe/xe_pci.c
> +++ b/drivers/gpu/drm/xe/xe_pci.c
> @@ -1147,17 +1147,12 @@ static void xe_pci_remove(struct pci_dev *pdev)
> * caller. Therefore there is no consequence on those specific callers when
> * function error injection skips the whole function.
> */
nit: Align xe_pci_probe comment message with latest changes.
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> +static int __xe_pci_probe(struct pci_dev *pdev, const struct xe_device_desc *desc);
> static int xe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
> {
> - struct xe_probed_info probed_info = {};
> const struct xe_device_desc *desc = (const void *)ent->driver_data;
> - const struct xe_subplatform_desc *subplatform_desc;
> - struct xe_device *xe;
> - void *group;
> int err;
>
> - subplatform_desc = find_subplatform(desc, pdev->device);
> -
> xe_configfs_check_device(pdev);
>
> if (desc->require_force_probe && !id_forced(pdev->device)) {
> @@ -1181,6 +1176,26 @@ static int xe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
> if (xe_display_driver_probe_defer(pdev))
> return -EPROBE_DEFER;
>
> + err = __xe_pci_probe(pdev, desc);
> + if (err) {
> + xe_log_err_fatal(pdev, PROBE, err, "driver loading failed for device '%04x'\n",
> + pdev->device);
> + return err;
> + }
> +
> + return 0;
> +}
> +
> +static int __xe_pci_probe(struct pci_dev *pdev, const struct xe_device_desc *desc)
> +{
> + const struct xe_subplatform_desc *subplatform_desc;
> + struct xe_probed_info probed_info = {};
> + struct xe_device *xe;
> + void *group;
> + int err;
> +
> + subplatform_desc = find_subplatform(desc, pdev->device);
> +
> /* Group all devres so xe_pci_error_slot_reset() can release them as a unit. */
> group = devres_open_group(&pdev->dev, NULL, GFP_KERNEL);
> if (!group)
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 20/32] drm/xe/survivability: Report 'boot status' using SIGID
2026-08-12 19:14 ` [PATCH v4 20/32] drm/xe/survivability: Report 'boot status' " Michal Wajdeczko
@ 2026-08-13 8:38 ` Mallesh, Koujalagi
2026-08-13 9:28 ` Michal Wajdeczko
0 siblings, 1 reply; 73+ messages in thread
From: Mallesh, Koujalagi @ 2026-08-13 8:38 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe; +Cc: Rodrigo Vivi, Riana Tauro, Aravind Iddamsetty
[-- Attachment #1: Type: text/plain, Size: 3239 bytes --]
On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
> Report 'boot status' details using xe_log_err_fatal/info() macros.
> While around, move static helper code closer to the caller and let
> it take xe instead of pdev.
>
> Signed-off-by: Michal Wajdeczko<michal.wajdeczko@intel.com>
> Cc: Rodrigo Vivi<rodrigo.vivi@intel.com>
> Cc: Riana Tauro<riana.tauro@intel.com>
> Cc: Aravind Iddamsetty<aravind.iddamsetty@intel.com>
> Cc: Mallesh Koujalagi<mallesh.koujalagi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_survivability_mode.c | 35 ++++++++++++----------
> 1 file changed, 19 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
> index 4c506027fa94..85b4c125a217 100644
> --- a/drivers/gpu/drm/xe/xe_survivability_mode.c
> +++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
> @@ -14,6 +14,7 @@
> #include "xe_device.h"
> #include "xe_heci_gsc.h"
> #include "xe_i2c.h"
> +#include "xe_log.h"
> #include "xe_mmio.h"
> #include "xe_nvm.h"
> #include "xe_pcode_api.h"
> @@ -172,21 +173,6 @@ static void populate_survivability_info(struct xe_device *xe)
> }
> }
>
> -static void log_survivability_info(struct pci_dev *pdev)
> -{
> - struct xe_device *xe = pdev_to_xe_device(pdev);
> - struct xe_survivability *survivability = &xe->survivability;
> - u32 *info = survivability->info;
> - int id;
> -
> - dev_info(&pdev->dev, "Survivability Boot Status : Critical Failure (%d)\n",
> - survivability->boot_status);
> - for (id = 0; id < MAX_SCRATCH_REG; id++) {
> - if (info[id])
> - dev_info(&pdev->dev, "%s: 0x%x\n", reg_map[id], info[id]);
> - }
> -}
> -
> static int check_boot_failure(struct xe_device *xe)
> {
> struct xe_survivability *survivability = &xe->survivability;
> @@ -429,6 +415,23 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
> dev_err(&pdev->dev, "Firmware flash required, Please refer to the userspace documentation for more details!\n");
> }
>
> +static void log_survivability_info(struct xe_device *xe)
> +{
> + struct xe_survivability *survivability = &xe->survivability;
> + u32 *info = survivability->info;
> + int id;
> +
> + xe_log_err_fatal(xe, SURVIVABILITY, -ENXIO, "Boot Status: %s (%u)\n",
> + survivability->boot_status == CRITICAL_FAILURE ?
> + "Critical Failure" : "Other", survivability->boot_status);
Since log_survivability_info is called when survivability->boot_status
== CRITICAL_FAILURE true, so please use "Critical Failure" string directly.
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> +
> + for (id = 0; id < MAX_SCRATCH_REG; id++) {
> + if (!info[id])
> + continue;
> + xe_log_info(xe, SURVIVABILITY, "%s: %#x\n", reg_map[id], info[id]);
> + }
> +}
> +
> /**
> * xe_survivability_mode_boot_enable - Initialize and enable boot survivability mode
> * @xe: xe device instance
> @@ -452,7 +455,7 @@ int xe_survivability_mode_boot_enable(struct xe_device *xe)
> * v2 supports survivability mode for critical errors
> */
> if (survivability->version < 2 && survivability->boot_status == CRITICAL_FAILURE) {
> - log_survivability_info(pdev);
> + log_survivability_info(xe);
> return -ENXIO;
> }
>
[-- Attachment #2: Type: text/html, Size: 4497 bytes --]
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 21/32] drm/xe/survivability: Report 'sysfs failure' error using SIGID
2026-08-12 19:14 ` [PATCH v4 21/32] drm/xe/survivability: Report 'sysfs failure' error " Michal Wajdeczko
@ 2026-08-13 8:54 ` Mallesh, Koujalagi
0 siblings, 0 replies; 73+ messages in thread
From: Mallesh, Koujalagi @ 2026-08-13 8:54 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe; +Cc: Rodrigo Vivi, Riana Tauro, Aravind Iddamsetty
On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
> Report 'failed to create sysfs files' error using xe_log_err() helper
> from all sysfs failure points and for all call sites.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
LGTM,
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Riana Tauro <riana.tauro@intel.com>
> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_survivability_mode.c | 18 +++++++++---------
> 1 file changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
> index 85b4c125a217..2d8c532157fd 100644
> --- a/drivers/gpu/drm/xe/xe_survivability_mode.c
> +++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
> @@ -280,24 +280,26 @@ static int create_survivability_sysfs(struct pci_dev *pdev)
> int ret;
>
> ret = device_create_file(dev, &dev_attr_survivability_mode);
> - if (ret) {
> - dev_warn(dev, "Failed to create survivability sysfs files\n");
> - return ret;
> - }
> + if (ret)
> + goto failed;
>
> ret = devm_add_action_or_reset(xe->drm.dev,
> xe_survivability_mode_fini, xe);
> if (ret)
> - return ret;
> + goto failed;
>
> /* Survivability info is not required if enabled via configfs */
> if (!xe_configfs_get_survivability_mode(pdev)) {
> ret = devm_device_add_group(dev, &survivability_info_group);
> if (ret)
> - return ret;
> + goto failed;
> }
>
> return 0;
> +
> +failed:
> + xe_log_err(xe, SURVIVABILITY, ret, "Failed to create sysfs files!\n");
> + return ret;
> }
>
> static int enable_boot_survivability_mode(struct pci_dev *pdev)
> @@ -403,9 +405,7 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
> }
>
> populate_survivability_info(xe);
> -
> - if (create_survivability_sysfs(pdev))
> - dev_err(&pdev->dev, "Failed to create survivability sysfs\n");
> + create_survivability_sysfs(pdev);
>
> survivability->type = XE_SURVIVABILITY_TYPE_RUNTIME;
> dev_err(&pdev->dev, "Runtime Survivability mode enabled\n");
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 19/32] drm/xe: Report all probe errors using SIGID
2026-08-13 6:50 ` Mallesh, Koujalagi
@ 2026-08-13 9:12 ` Michal Wajdeczko
2026-08-13 9:58 ` Mallesh, Koujalagi
0 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-13 9:12 UTC (permalink / raw)
To: Mallesh, Koujalagi, intel-xe
Cc: Rodrigo Vivi, Aravind Iddamsetty, Dnyaneshwar Bhadane
On 8/13/2026 8:50 AM, Mallesh, Koujalagi wrote:
>
> On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
>> For completeness, we should catch and report all probe errors, not
>> just the ones that have explicit error message. Split xe_pci_probe()
>> function after a display check to avoid reporting -EPROBE_DEFER and
>> use xe_log_err_fatal() helper to report all returned errors.
>>
>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
>> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>> ---
>> Cc: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com>
>> ---
>> drivers/gpu/drm/xe/xe_pci.c | 27 +++++++++++++++++++++------
>> 1 file changed, 21 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
>> index b19efef1c5cd..ab4da1d9a9f1 100644
>> --- a/drivers/gpu/drm/xe/xe_pci.c
>> +++ b/drivers/gpu/drm/xe/xe_pci.c
>> @@ -1147,17 +1147,12 @@ static void xe_pci_remove(struct pci_dev *pdev)
>> * caller. Therefore there is no consequence on those specific callers when
>> * function error injection skips the whole function.
>> */
>
> nit: Align xe_pci_probe comment message with latest changes.
hmm, what exactly do you want to change here?
comment above is about "Probe the PCI device" sequence in general
not about the specific xe_pci_probe() function
>
> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
thanks!
>
>> +static int __xe_pci_probe(struct pci_dev *pdev, const struct xe_device_desc *desc);
>> static int xe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
>> {
>> - struct xe_probed_info probed_info = {};
>> const struct xe_device_desc *desc = (const void *)ent->driver_data;
>> - const struct xe_subplatform_desc *subplatform_desc;
>> - struct xe_device *xe;
>> - void *group;
>> int err;
>> - subplatform_desc = find_subplatform(desc, pdev->device);
>> -
>> xe_configfs_check_device(pdev);
>> if (desc->require_force_probe && !id_forced(pdev->device)) {
>> @@ -1181,6 +1176,26 @@ static int xe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
>> if (xe_display_driver_probe_defer(pdev))
>> return -EPROBE_DEFER;
>> + err = __xe_pci_probe(pdev, desc);
>> + if (err) {
>> + xe_log_err_fatal(pdev, PROBE, err, "driver loading failed for device '%04x'\n",
>> + pdev->device);
>> + return err;
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +static int __xe_pci_probe(struct pci_dev *pdev, const struct xe_device_desc *desc)
>> +{
>> + const struct xe_subplatform_desc *subplatform_desc;
>> + struct xe_probed_info probed_info = {};
>> + struct xe_device *xe;
>> + void *group;
>> + int err;
>> +
>> + subplatform_desc = find_subplatform(desc, pdev->device);
>> +
>> /* Group all devres so xe_pci_error_slot_reset() can release them as a unit. */
>> group = devres_open_group(&pdev->dev, NULL, GFP_KERNEL);
>> if (!group)
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 20/32] drm/xe/survivability: Report 'boot status' using SIGID
2026-08-13 8:38 ` Mallesh, Koujalagi
@ 2026-08-13 9:28 ` Michal Wajdeczko
2026-08-13 10:07 ` Mallesh, Koujalagi
0 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-13 9:28 UTC (permalink / raw)
To: Mallesh, Koujalagi, intel-xe
Cc: Rodrigo Vivi, Riana Tauro, Aravind Iddamsetty
On 8/13/2026 10:38 AM, Mallesh, Koujalagi wrote:
>
> On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
>> Report 'boot status' details using xe_log_err_fatal/info() macros.
>> While around, move static helper code closer to the caller and let
>> it take xe instead of pdev.
>>
>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Cc: Riana Tauro <riana.tauro@intel.com>
>> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
>> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>> ---
>> drivers/gpu/drm/xe/xe_survivability_mode.c | 35 ++++++++++++----------
>> 1 file changed, 19 insertions(+), 16 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
>> index 4c506027fa94..85b4c125a217 100644
>> --- a/drivers/gpu/drm/xe/xe_survivability_mode.c
>> +++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
>> @@ -14,6 +14,7 @@
>> #include "xe_device.h"
>> #include "xe_heci_gsc.h"
>> #include "xe_i2c.h"
>> +#include "xe_log.h"
>> #include "xe_mmio.h"
>> #include "xe_nvm.h"
>> #include "xe_pcode_api.h"
>> @@ -172,21 +173,6 @@ static void populate_survivability_info(struct xe_device *xe)
>> }
>> }
>>
>> -static void log_survivability_info(struct pci_dev *pdev)
>> -{
>> - struct xe_device *xe = pdev_to_xe_device(pdev);
>> - struct xe_survivability *survivability = &xe->survivability;
>> - u32 *info = survivability->info;
>> - int id;
>> -
>> - dev_info(&pdev->dev, "Survivability Boot Status : Critical Failure (%d)\n",
>> - survivability->boot_status);
>> - for (id = 0; id < MAX_SCRATCH_REG; id++) {
>> - if (info[id])
>> - dev_info(&pdev->dev, "%s: 0x%x\n", reg_map[id], info[id]);
>> - }
>> -}
>> -
>> static int check_boot_failure(struct xe_device *xe)
>> {
>> struct xe_survivability *survivability = &xe->survivability;
>> @@ -429,6 +415,23 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
>> dev_err(&pdev->dev, "Firmware flash required, Please refer to the userspace documentation for more details!\n");
>> }
>>
>> +static void log_survivability_info(struct xe_device *xe)
>> +{
>> + struct xe_survivability *survivability = &xe->survivability;
>> + u32 *info = survivability->info;
>> + int id;
>> +
>> + xe_log_err_fatal(xe, SURVIVABILITY, -ENXIO, "Boot Status: %s (%u)\n",
>> + survivability->boot_status == CRITICAL_FAILURE ?
>> + "Critical Failure" : "Other", survivability->boot_status);
>
> Since log_survivability_info is called when survivability->boot_status == CRITICAL_FAILURE true, so please use "Critical Failure" string directly.
well, that's the current usage and function name didn't strictly say "log critical failure" only
btw, printing fixed "Critical Failure" string followed by flexible %d also doesn't make sense IMO
that's why I decided to make this function more flexible and reusable if needed
>
> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>
>> +
>> + for (id = 0; id < MAX_SCRATCH_REG; id++) {
>> + if (!info[id])
>> + continue;
>> + xe_log_info(xe, SURVIVABILITY, "%s: %#x\n", reg_map[id], info[id]);
>> + }
>> +}
>> +
>> /**
>> * xe_survivability_mode_boot_enable - Initialize and enable boot survivability mode
>> * @xe: xe device instance
>> @@ -452,7 +455,7 @@ int xe_survivability_mode_boot_enable(struct xe_device *xe)
>> * v2 supports survivability mode for critical errors
>> */
>> if (survivability->version < 2 && survivability->boot_status == CRITICAL_FAILURE) {
>> - log_survivability_info(pdev);
>> + log_survivability_info(xe);
>> return -ENXIO;
>> }
>>
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 19/32] drm/xe: Report all probe errors using SIGID
2026-08-13 9:12 ` Michal Wajdeczko
@ 2026-08-13 9:58 ` Mallesh, Koujalagi
2026-08-13 10:09 ` Michal Wajdeczko
0 siblings, 1 reply; 73+ messages in thread
From: Mallesh, Koujalagi @ 2026-08-13 9:58 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe
Cc: Rodrigo Vivi, Aravind Iddamsetty, Dnyaneshwar Bhadane
On 13-08-2026 02:42 pm, Michal Wajdeczko wrote:
>
> On 8/13/2026 8:50 AM, Mallesh, Koujalagi wrote:
>> On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
>>> For completeness, we should catch and report all probe errors, not
>>> just the ones that have explicit error message. Split xe_pci_probe()
>>> function after a display check to avoid reporting -EPROBE_DEFER and
>>> use xe_log_err_fatal() helper to report all returned errors.
>>>
>>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
>>> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>>> ---
>>> Cc: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com>
>>> ---
>>> drivers/gpu/drm/xe/xe_pci.c | 27 +++++++++++++++++++++------
>>> 1 file changed, 21 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
>>> index b19efef1c5cd..ab4da1d9a9f1 100644
>>> --- a/drivers/gpu/drm/xe/xe_pci.c
>>> +++ b/drivers/gpu/drm/xe/xe_pci.c
>>> @@ -1147,17 +1147,12 @@ static void xe_pci_remove(struct pci_dev *pdev)
>>> * caller. Therefore there is no consequence on those specific callers when
>>> * function error injection skips the whole function.
>>> */
>> nit: Align xe_pci_probe comment message with latest changes.
> hmm, what exactly do you want to change here?
Since after refactoring the code, xe_device_probe move to __xe_pci_probe so
we need to change "functions called directly from __xe_pci_probe() or
indirectly" right?
>
> comment above is about "Probe the PCI device" sequence in general
> not about the specific xe_pci_probe() function
Agreed! however the are using xe_device_probe function name etc, which
is part of __xe_pci_probe right.
Thanks,
-/Mallesh
>> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> thanks!
>
>>> +static int __xe_pci_probe(struct pci_dev *pdev, const struct xe_device_desc *desc);
>>> static int xe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
>>> {
>>> - struct xe_probed_info probed_info = {};
>>> const struct xe_device_desc *desc = (const void *)ent->driver_data;
>>> - const struct xe_subplatform_desc *subplatform_desc;
>>> - struct xe_device *xe;
>>> - void *group;
>>> int err;
>>> - subplatform_desc = find_subplatform(desc, pdev->device);
>>> -
>>> xe_configfs_check_device(pdev);
>>> if (desc->require_force_probe && !id_forced(pdev->device)) {
>>> @@ -1181,6 +1176,26 @@ static int xe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
>>> if (xe_display_driver_probe_defer(pdev))
>>> return -EPROBE_DEFER;
>>> + err = __xe_pci_probe(pdev, desc);
>>> + if (err) {
>>> + xe_log_err_fatal(pdev, PROBE, err, "driver loading failed for device '%04x'\n",
>>> + pdev->device);
>>> + return err;
>>> + }
>>> +
>>> + return 0;
>>> +}
>>> +
>>> +static int __xe_pci_probe(struct pci_dev *pdev, const struct xe_device_desc *desc)
>>> +{
>>> + const struct xe_subplatform_desc *subplatform_desc;
>>> + struct xe_probed_info probed_info = {};
>>> + struct xe_device *xe;
>>> + void *group;
>>> + int err;
>>> +
>>> + subplatform_desc = find_subplatform(desc, pdev->device);
>>> +
>>> /* Group all devres so xe_pci_error_slot_reset() can release them as a unit. */
>>> group = devres_open_group(&pdev->dev, NULL, GFP_KERNEL);
>>> if (!group)
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 20/32] drm/xe/survivability: Report 'boot status' using SIGID
2026-08-13 9:28 ` Michal Wajdeczko
@ 2026-08-13 10:07 ` Mallesh, Koujalagi
2026-08-13 10:18 ` Michal Wajdeczko
0 siblings, 1 reply; 73+ messages in thread
From: Mallesh, Koujalagi @ 2026-08-13 10:07 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe; +Cc: Rodrigo Vivi, Riana Tauro, Aravind Iddamsetty
On 13-08-2026 02:58 pm, Michal Wajdeczko wrote:
>
> On 8/13/2026 10:38 AM, Mallesh, Koujalagi wrote:
>> On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
>>> Report 'boot status' details using xe_log_err_fatal/info() macros.
>>> While around, move static helper code closer to the caller and let
>>> it take xe instead of pdev.
>>>
>>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>> Cc: Riana Tauro <riana.tauro@intel.com>
>>> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
>>> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>>> ---
>>> drivers/gpu/drm/xe/xe_survivability_mode.c | 35 ++++++++++++----------
>>> 1 file changed, 19 insertions(+), 16 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
>>> index 4c506027fa94..85b4c125a217 100644
>>> --- a/drivers/gpu/drm/xe/xe_survivability_mode.c
>>> +++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
>>> @@ -14,6 +14,7 @@
>>> #include "xe_device.h"
>>> #include "xe_heci_gsc.h"
>>> #include "xe_i2c.h"
>>> +#include "xe_log.h"
>>> #include "xe_mmio.h"
>>> #include "xe_nvm.h"
>>> #include "xe_pcode_api.h"
>>> @@ -172,21 +173,6 @@ static void populate_survivability_info(struct xe_device *xe)
>>> }
>>> }
>>>
>>> -static void log_survivability_info(struct pci_dev *pdev)
>>> -{
>>> - struct xe_device *xe = pdev_to_xe_device(pdev);
>>> - struct xe_survivability *survivability = &xe->survivability;
>>> - u32 *info = survivability->info;
>>> - int id;
>>> -
>>> - dev_info(&pdev->dev, "Survivability Boot Status : Critical Failure (%d)\n",
>>> - survivability->boot_status);
>>> - for (id = 0; id < MAX_SCRATCH_REG; id++) {
>>> - if (info[id])
>>> - dev_info(&pdev->dev, "%s: 0x%x\n", reg_map[id], info[id]);
>>> - }
>>> -}
>>> -
>>> static int check_boot_failure(struct xe_device *xe)
>>> {
>>> struct xe_survivability *survivability = &xe->survivability;
>>> @@ -429,6 +415,23 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
>>> dev_err(&pdev->dev, "Firmware flash required, Please refer to the userspace documentation for more details!\n");
>>> }
>>>
>>> +static void log_survivability_info(struct xe_device *xe)
>>> +{
>>> + struct xe_survivability *survivability = &xe->survivability;
>>> + u32 *info = survivability->info;
>>> + int id;
>>> +
>>> + xe_log_err_fatal(xe, SURVIVABILITY, -ENXIO, "Boot Status: %s (%u)\n",
>>> + survivability->boot_status == CRITICAL_FAILURE ?
>>> + "Critical Failure" : "Other", survivability->boot_status);
>> Since log_survivability_info is called when survivability->boot_status == CRITICAL_FAILURE true, so please use "Critical Failure" string directly.
> well, that's the current usage and function name didn't strictly say "log critical failure" only
>
> btw, printing fixed "Critical Failure" string followed by flexible %d also doesn't make sense IMO
>
> that's why I decided to make this function more flexible and reusable if needed
Totally agreed, u made it generic one, however current usage, we never
going to hit "Other" case, which is dead here.
btw, "Other" is "Non Critical Failure" right?
Thanks,
-/Mallesh
>
>> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>>
>>> +
>>> + for (id = 0; id < MAX_SCRATCH_REG; id++) {
>>> + if (!info[id])
>>> + continue;
>>> + xe_log_info(xe, SURVIVABILITY, "%s: %#x\n", reg_map[id], info[id]);
>>> + }
>>> +}
>>> +
>>> /**
>>> * xe_survivability_mode_boot_enable - Initialize and enable boot survivability mode
>>> * @xe: xe device instance
>>> @@ -452,7 +455,7 @@ int xe_survivability_mode_boot_enable(struct xe_device *xe)
>>> * v2 supports survivability mode for critical errors
>>> */
>>> if (survivability->version < 2 && survivability->boot_status == CRITICAL_FAILURE) {
>>> - log_survivability_info(pdev);
>>> + log_survivability_info(xe);
>>> return -ENXIO;
>>> }
>>>
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 19/32] drm/xe: Report all probe errors using SIGID
2026-08-13 9:58 ` Mallesh, Koujalagi
@ 2026-08-13 10:09 ` Michal Wajdeczko
0 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-13 10:09 UTC (permalink / raw)
To: Mallesh, Koujalagi, intel-xe
Cc: Rodrigo Vivi, Aravind Iddamsetty, Dnyaneshwar Bhadane
On 8/13/2026 11:58 AM, Mallesh, Koujalagi wrote:
>
> On 13-08-2026 02:42 pm, Michal Wajdeczko wrote:
>>
>> On 8/13/2026 8:50 AM, Mallesh, Koujalagi wrote:
>>> On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
>>>> For completeness, we should catch and report all probe errors, not
>>>> just the ones that have explicit error message. Split xe_pci_probe()
>>>> function after a display check to avoid reporting -EPROBE_DEFER and
>>>> use xe_log_err_fatal() helper to report all returned errors.
>>>>
>>>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>>> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
>>>> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>>>> ---
>>>> Cc: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com>
>>>> ---
>>>> drivers/gpu/drm/xe/xe_pci.c | 27 +++++++++++++++++++++------
>>>> 1 file changed, 21 insertions(+), 6 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
>>>> index b19efef1c5cd..ab4da1d9a9f1 100644
>>>> --- a/drivers/gpu/drm/xe/xe_pci.c
>>>> +++ b/drivers/gpu/drm/xe/xe_pci.c
>>>> @@ -1147,17 +1147,12 @@ static void xe_pci_remove(struct pci_dev *pdev)
>>>> * caller. Therefore there is no consequence on those specific callers when
>>>> * function error injection skips the whole function.
>>>> */
>>> nit: Align xe_pci_probe comment message with latest changes.
>> hmm, what exactly do you want to change here?
>
> Since after refactoring the code, xe_device_probe move to __xe_pci_probe so
>
> we need to change "functions called directly from __xe_pci_probe() or indirectly" right?
I guess it's a matter or the missing comma in the comment
"directly from xe_pci_probe() or indirectly, for example through xe_device_probe()"
^
here
>
>>
>> comment above is about "Probe the PCI device" sequence in general
>> not about the specific xe_pci_probe() function
>
> Agreed! however the are using xe_device_probe function name etc, which is part of __xe_pci_probe right.
which IMO still makes xe_device_probe part of the xe_pci_probe()
those are just technical code splits, to avoid large refactoring
or error prone use of goto's - either way not worth to be mentioned
in a general comment which is more about error injection anyway
>
> Thanks,
>
> -/Mallesh
>
>>> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>> thanks!
>>
>>>> +static int __xe_pci_probe(struct pci_dev *pdev, const struct xe_device_desc *desc);
>>>> static int xe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
>>>> {
>>>> - struct xe_probed_info probed_info = {};
>>>> const struct xe_device_desc *desc = (const void *)ent->driver_data;
>>>> - const struct xe_subplatform_desc *subplatform_desc;
>>>> - struct xe_device *xe;
>>>> - void *group;
>>>> int err;
>>>> - subplatform_desc = find_subplatform(desc, pdev->device);
>>>> -
>>>> xe_configfs_check_device(pdev);
>>>> if (desc->require_force_probe && !id_forced(pdev->device)) {
>>>> @@ -1181,6 +1176,26 @@ static int xe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
>>>> if (xe_display_driver_probe_defer(pdev))
>>>> return -EPROBE_DEFER;
>>>> + err = __xe_pci_probe(pdev, desc);
>>>> + if (err) {
>>>> + xe_log_err_fatal(pdev, PROBE, err, "driver loading failed for device '%04x'\n",
>>>> + pdev->device);
>>>> + return err;
>>>> + }
>>>> +
>>>> + return 0;
>>>> +}
>>>> +
>>>> +static int __xe_pci_probe(struct pci_dev *pdev, const struct xe_device_desc *desc)
>>>> +{
>>>> + const struct xe_subplatform_desc *subplatform_desc;
>>>> + struct xe_probed_info probed_info = {};
>>>> + struct xe_device *xe;
>>>> + void *group;
>>>> + int err;
>>>> +
>>>> + subplatform_desc = find_subplatform(desc, pdev->device);
>>>> +
>>>> /* Group all devres so xe_pci_error_slot_reset() can release them as a unit. */
>>>> group = devres_open_group(&pdev->dev, NULL, GFP_KERNEL);
>>>> if (!group)
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 20/32] drm/xe/survivability: Report 'boot status' using SIGID
2026-08-13 10:07 ` Mallesh, Koujalagi
@ 2026-08-13 10:18 ` Michal Wajdeczko
0 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-13 10:18 UTC (permalink / raw)
To: Mallesh, Koujalagi, intel-xe
Cc: Rodrigo Vivi, Riana Tauro, Aravind Iddamsetty
On 8/13/2026 12:07 PM, Mallesh, Koujalagi wrote:
>
> On 13-08-2026 02:58 pm, Michal Wajdeczko wrote:
>>
>> On 8/13/2026 10:38 AM, Mallesh, Koujalagi wrote:
>>> On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
>>>> Report 'boot status' details using xe_log_err_fatal/info() macros.
>>>> While around, move static helper code closer to the caller and let
>>>> it take xe instead of pdev.
>>>>
>>>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>>> Cc: Riana Tauro <riana.tauro@intel.com>
>>>> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
>>>> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>>>> ---
>>>> drivers/gpu/drm/xe/xe_survivability_mode.c | 35 ++++++++++++----------
>>>> 1 file changed, 19 insertions(+), 16 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
>>>> index 4c506027fa94..85b4c125a217 100644
>>>> --- a/drivers/gpu/drm/xe/xe_survivability_mode.c
>>>> +++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
>>>> @@ -14,6 +14,7 @@
>>>> #include "xe_device.h"
>>>> #include "xe_heci_gsc.h"
>>>> #include "xe_i2c.h"
>>>> +#include "xe_log.h"
>>>> #include "xe_mmio.h"
>>>> #include "xe_nvm.h"
>>>> #include "xe_pcode_api.h"
>>>> @@ -172,21 +173,6 @@ static void populate_survivability_info(struct xe_device *xe)
>>>> }
>>>> }
>>>> -static void log_survivability_info(struct pci_dev *pdev)
>>>> -{
>>>> - struct xe_device *xe = pdev_to_xe_device(pdev);
>>>> - struct xe_survivability *survivability = &xe->survivability;
>>>> - u32 *info = survivability->info;
>>>> - int id;
>>>> -
>>>> - dev_info(&pdev->dev, "Survivability Boot Status : Critical Failure (%d)\n",
>>>> - survivability->boot_status);
>>>> - for (id = 0; id < MAX_SCRATCH_REG; id++) {
>>>> - if (info[id])
>>>> - dev_info(&pdev->dev, "%s: 0x%x\n", reg_map[id], info[id]);
>>>> - }
>>>> -}
>>>> -
>>>> static int check_boot_failure(struct xe_device *xe)
>>>> {
>>>> struct xe_survivability *survivability = &xe->survivability;
>>>> @@ -429,6 +415,23 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
>>>> dev_err(&pdev->dev, "Firmware flash required, Please refer to the userspace documentation for more details!\n");
>>>> }
>>>> +static void log_survivability_info(struct xe_device *xe)
>>>> +{
>>>> + struct xe_survivability *survivability = &xe->survivability;
>>>> + u32 *info = survivability->info;
>>>> + int id;
>>>> +
>>>> + xe_log_err_fatal(xe, SURVIVABILITY, -ENXIO, "Boot Status: %s (%u)\n",
>>>> + survivability->boot_status == CRITICAL_FAILURE ?
>>>> + "Critical Failure" : "Other", survivability->boot_status);
>>> Since log_survivability_info is called when survivability->boot_status == CRITICAL_FAILURE true, so please use "Critical Failure" string directly.
>> well, that's the current usage and function name didn't strictly say "log critical failure" only
>>
>> btw, printing fixed "Critical Failure" string followed by flexible %d also doesn't make sense IMO
>>
>> that's why I decided to make this function more flexible and reusable if needed
>
> Totally agreed, u made it generic one, however current usage, we never going to hit "Other" case, which is dead here.
>
> btw, "Other" is "Non Critical Failure" right?
only if boot_status == 7
but since BOOT_STATUS is REG_GENMASK(3, 1) I assume that there
might be other values, beyond currently documented 4 & 7
so even if we print "Other" there will be still numerical
value "(7)" or "(1)" that could be used for debug/triage
but I can add helper
static const char *boot_status_str(u8 boot_status)
to return friendly name for all currently known codes
(and "Other" or NULL for unknown codes)
>
>
> Thanks,
>
> -/Mallesh
>
>>
>>> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>>>
>>>> +
>>>> + for (id = 0; id < MAX_SCRATCH_REG; id++) {
>>>> + if (!info[id])
>>>> + continue;
>>>> + xe_log_info(xe, SURVIVABILITY, "%s: %#x\n", reg_map[id], info[id]);
>>>> + }
>>>> +}
>>>> +
>>>> /**
>>>> * xe_survivability_mode_boot_enable - Initialize and enable boot survivability mode
>>>> * @xe: xe device instance
>>>> @@ -452,7 +455,7 @@ int xe_survivability_mode_boot_enable(struct xe_device *xe)
>>>> * v2 supports survivability mode for critical errors
>>>> */
>>>> if (survivability->version < 2 && survivability->boot_status == CRITICAL_FAILURE) {
>>>> - log_survivability_info(pdev);
>>>> + log_survivability_info(xe);
>>>> return -ENXIO;
>>>> }
>>>>
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 22/32] drm/xe/survivability: Report 'Boot Mode enabled' status using SIGID
2026-08-12 19:14 ` [PATCH v4 22/32] drm/xe/survivability: Report 'Boot Mode enabled' status " Michal Wajdeczko
@ 2026-08-13 10:52 ` Mallesh, Koujalagi
2026-08-13 11:01 ` Michal Wajdeczko
0 siblings, 1 reply; 73+ messages in thread
From: Mallesh, Koujalagi @ 2026-08-13 10:52 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe; +Cc: Rodrigo Vivi, Riana Tauro, Aravind Iddamsetty
On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
> Report 'Boot Mode' status or failure using various xe_log() helpers.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Riana Tauro <riana.tauro@intel.com>
> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_survivability_mode.c | 21 +++++++++++++--------
> 1 file changed, 13 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
> index 2d8c532157fd..ebd288986c11 100644
> --- a/drivers/gpu/drm/xe/xe_survivability_mode.c
> +++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
> @@ -304,14 +304,13 @@ static int create_survivability_sysfs(struct pci_dev *pdev)
>
> static int enable_boot_survivability_mode(struct pci_dev *pdev)
> {
> - struct device *dev = &pdev->dev;
> struct xe_device *xe = pdev_to_xe_device(pdev);
> struct xe_survivability *survivability = &xe->survivability;
> - int ret = 0;
> + int ret;
>
> ret = create_survivability_sysfs(pdev);
> if (ret)
> - return ret;
> + goto failed;
>
> /* Make sure xe_heci_gsc_init() and xe_i2c_probe() are aware of survivability */
> survivability->mode = true;
> @@ -323,19 +322,25 @@ static int enable_boot_survivability_mode(struct pci_dev *pdev)
> if (survivability->fdo_mode) {
> ret = xe_nvm_init(xe);
> if (ret)
> - goto err;
> + goto failed;
> }
>
> ret = xe_i2c_probe(xe);
> if (ret)
> - goto err;
> + goto failed;
>
> - dev_err(dev, "In Survivability Mode\n");
> + if (check_boot_failure(xe))
> + xe_log_comp_fatal(pdev, SURVIVABILITY,
> + &survivability->boot_status,
> + sizeof(survivability->boot_status),
> + "Boot Mode enabled!\n");
In case of fatal, will make sense to return "0" OR we can add return as
-ENXIO right? any thoughts?
After handling fatal case
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> + else
> + xe_log_info(pdev, SURVIVABILITY, "Boot Mode enabled!\n");
>
> return 0;
>
> -err:
> - dev_err(dev, "Failed to enable Survivability Mode\n");
> +failed:
> + xe_log_err_fatal(pdev, SURVIVABILITY, ret, "Failed to enable Boot Mode!\n");
> survivability->mode = false;
> return ret;
> }
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 22/32] drm/xe/survivability: Report 'Boot Mode enabled' status using SIGID
2026-08-13 10:52 ` Mallesh, Koujalagi
@ 2026-08-13 11:01 ` Michal Wajdeczko
0 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-13 11:01 UTC (permalink / raw)
To: Mallesh, Koujalagi, intel-xe, Riana Tauro
Cc: Rodrigo Vivi, Aravind Iddamsetty
On 8/13/2026 12:52 PM, Mallesh, Koujalagi wrote:
>
> On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
>> Report 'Boot Mode' status or failure using various xe_log() helpers.
>>
>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Cc: Riana Tauro <riana.tauro@intel.com>
>> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
>> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>> ---
>> drivers/gpu/drm/xe/xe_survivability_mode.c | 21 +++++++++++++--------
>> 1 file changed, 13 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
>> index 2d8c532157fd..ebd288986c11 100644
>> --- a/drivers/gpu/drm/xe/xe_survivability_mode.c
>> +++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
>> @@ -304,14 +304,13 @@ static int create_survivability_sysfs(struct pci_dev *pdev)
>> static int enable_boot_survivability_mode(struct pci_dev *pdev)
>> {
>> - struct device *dev = &pdev->dev;
>> struct xe_device *xe = pdev_to_xe_device(pdev);
>> struct xe_survivability *survivability = &xe->survivability;
>> - int ret = 0;
>> + int ret;
>> ret = create_survivability_sysfs(pdev);
>> if (ret)
>> - return ret;
>> + goto failed;
>> /* Make sure xe_heci_gsc_init() and xe_i2c_probe() are aware of survivability */
>> survivability->mode = true;
>> @@ -323,19 +322,25 @@ static int enable_boot_survivability_mode(struct pci_dev *pdev)
>> if (survivability->fdo_mode) {
>> ret = xe_nvm_init(xe);
>> if (ret)
>> - goto err;
>> + goto failed;
>> }
>> ret = xe_i2c_probe(xe);
>> if (ret)
>> - goto err;
>> + goto failed;
>> - dev_err(dev, "In Survivability Mode\n");
>> + if (check_boot_failure(xe))
>> + xe_log_comp_fatal(pdev, SURVIVABILITY,
>> + &survivability->boot_status,
>> + sizeof(survivability->boot_status),
>> + "Boot Mode enabled!\n");
>
> In case of fatal, will make sense to return "0" OR we can add return as -ENXIO right? any thoughts?
you're a reviewer here ;)
but seriously, enable_boot_survivability_mode() is called from
xe_survivability_mode_boot_enable() which says:
* Return: 0 if boot survivability mode is enabled or not requested, negative error
* code otherwise.
so returning 0 as success code in enabling boot mode is the correct one
returning -ENXIO will be no different than failing to enter boot mode
@Riana, this is your code, can you please confirm that
>
> After handling fatal case
>
> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>
>> + else
>> + xe_log_info(pdev, SURVIVABILITY, "Boot Mode enabled!\n");
>> return 0;
>> -err:
>> - dev_err(dev, "Failed to enable Survivability Mode\n");
>> +failed:
>> + xe_log_err_fatal(pdev, SURVIVABILITY, ret, "Failed to enable Boot Mode!\n");
>> survivability->mode = false;
>> return ret;
>> }
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 23/32] drm/xe/survivability: Report 'Runtime Mode enabled' status using SIGID
2026-08-12 19:14 ` [PATCH v4 23/32] drm/xe/survivability: Report 'Runtime " Michal Wajdeczko
@ 2026-08-13 11:40 ` Mallesh, Koujalagi
2026-08-13 12:46 ` Michal Wajdeczko
0 siblings, 1 reply; 73+ messages in thread
From: Mallesh, Koujalagi @ 2026-08-13 11:40 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe; +Cc: Rodrigo Vivi, Riana Tauro, Aravind Iddamsetty
[-- Attachment #1: Type: text/plain, Size: 2667 bytes --]
On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
> Report 'Runtime Mode' status using various xe_log() helpers.
>
> Signed-off-by: Michal Wajdeczko<michal.wajdeczko@intel.com>
> Cc: Rodrigo Vivi<rodrigo.vivi@intel.com>
> Cc: Riana Tauro<riana.tauro@intel.com>
> Cc: Aravind Iddamsetty<aravind.iddamsetty@intel.com>
> Cc: Mallesh Koujalagi<mallesh.koujalagi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_survivability_mode.c | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
> index ebd288986c11..5d3315ac735c 100644
> --- a/drivers/gpu/drm/xe/xe_survivability_mode.c
> +++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
> @@ -18,6 +18,7 @@
> #include "xe_mmio.h"
> #include "xe_nvm.h"
> #include "xe_pcode_api.h"
> +#include "xe_printk.h"
> #include "xe_vsec.h"
>
> /**
> @@ -405,7 +406,7 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
> struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
>
> if (!IS_DGFX(xe) || IS_SRIOV_VF(xe) || xe->info.platform < XE_BATTLEMAGE) {
> - dev_err(&pdev->dev, "Runtime Survivability Mode not supported\n");
> + xe_log_err(xe, SURVIVABILITY, -EOPNOTSUPP, "Runtime Mode not supported!\n");
> return;
> }
>
> @@ -413,11 +414,14 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
> create_survivability_sysfs(pdev);
>
> survivability->type = XE_SURVIVABILITY_TYPE_RUNTIME;
> - dev_err(&pdev->dev, "Runtime Survivability mode enabled\n");
> + xe_log_info(xe, SURVIVABILITY, "Runtime Mode enabled!\n");
>
> xe_device_set_wedged_method(xe, DRM_WEDGE_RECOVERY_VENDOR);
> xe_device_declare_wedged(xe);
> - dev_err(&pdev->dev, "Firmware flash required, Please refer to the userspace documentation for more details!\n");
> +
> + xe_log_info(xe, SURVIVABILITY, "Firmware flash required!\n");
IMO, we need to use xe_log_err (recoverable) here instead of xe_log_info.
Already mentioned in original changes [1], runtime firmware errors cause
device unstable:
[1]
https://gitlab.freedesktop.org/drm/tip/-/commit/a2ca0633a0fef925a0d8125d8f3e4495a5ecb310
As I know xe_survivability_mode_runtime_enable function need to carry
errno as parameter to pass into xe_log_err,
however we need to create separate refactor patch for that in future.
With above changes:
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> + xe_info(xe, "Please refer to the userspace documentation for more details how to flash the firmware on %s!\n",
> + xe->info.platform_name);
> }
>
> static void log_survivability_info(struct xe_device *xe)
[-- Attachment #2: Type: text/html, Size: 4053 bytes --]
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 24/32] drm/xe: Report 'device wedged' errors using SIGID
2026-08-12 19:14 ` [PATCH v4 24/32] drm/xe: Report 'device wedged' errors " Michal Wajdeczko
2026-08-12 22:28 ` Rodrigo Vivi
@ 2026-08-13 11:56 ` Mallesh, Koujalagi
1 sibling, 0 replies; 73+ messages in thread
From: Mallesh, Koujalagi @ 2026-08-13 11:56 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe; +Cc: Rodrigo Vivi, Aravind Iddamsetty
On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
> Report 'device wedged' error using xe_log_err_fatal() helper.
> Use -EIO as the error cause, as nothing else is provided here.
> The hints about the recovery method and bug filing are now
> separated as it only needs to be printed once.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
LGTM,
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_device.c | 16 ++++++++++------
> 1 file changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> index 71111ad32465..74d566693dfd 100644
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c
> @@ -48,6 +48,7 @@
> #include "xe_i2c.h"
> #include "xe_irq.h"
> #include "xe_late_bind_fw.h"
> +#include "xe_log.h"
> #include "xe_mmio.h"
> #include "xe_module.h"
> #include "xe_nvm.h"
> @@ -1442,6 +1443,9 @@ void xe_device_set_wedged_method(struct xe_device *xe, unsigned long method)
> xe->wedged.method = method;
> }
>
> +#define WEDGED_URL "https://docs.kernel.org/gpu/drm-uapi.html#device-wedging"
> +#define XE_BUG_URL "https://gitlab.freedesktop.org/drm/xe/kernel/issues/new"
> +
> /**
> * xe_device_declare_wedged - Declare device wedged
> * @xe: xe device instance
> @@ -1473,12 +1477,12 @@ void xe_device_declare_wedged(struct xe_device *xe)
> if (!atomic_xchg(&xe->wedged.flag, 1)) {
> xe->needs_flr_on_fini = true;
> xe_pm_runtime_get_noresume(xe);
> - drm_err(&xe->drm,
> - "CRITICAL: Xe has declared device %s as wedged.\n"
> - "IOCTLs and executions are blocked.\n"
> - "For recovery procedure, refer to https://docs.kernel.org/gpu/drm-uapi.html#device-wedging\n"
> - "Please file a _new_ bug report at https://gitlab.freedesktop.org/drm/xe/kernel/issues/new\n",
> - dev_name(xe->drm.dev));
> +
> + xe_log_err_fatal(xe, WEDGED, -EIO, "Device declared wedged!\n");
> + xe_err_once(xe, "IOCTLs and executions are now blocked!\n"
> + "For recovery procedure, refer to %s\n"
> + "Please file a _new_ bug report at %s\n",
> + WEDGED_URL, XE_BUG_URL);
> }
>
> for_each_gt(gt, xe, id)
^ permalink raw reply [flat|nested] 73+ messages in thread
* RE: [PATCH v4 25/32] drm/xe/pcode: Report 'Mailbox failed' error using SIGID
2026-08-12 19:14 ` [PATCH v4 25/32] drm/xe/pcode: Report 'Mailbox failed' error " Michal Wajdeczko
@ 2026-08-13 12:10 ` Bhadane, Dnyaneshwar
2026-08-13 12:35 ` Michal Wajdeczko
0 siblings, 1 reply; 73+ messages in thread
From: Bhadane, Dnyaneshwar @ 2026-08-13 12:10 UTC (permalink / raw)
To: Wajdeczko, Michal, intel-xe@lists.freedesktop.org
Cc: Wajdeczko, Michal, Vivi, Rodrigo, Tauro, Riana,
Iddamsetty, Aravind, Koujalagi, Mallesh, Kalvala, Haridhar
> -----Original Message-----
> From: Intel-xe <intel-xe-bounces@lists.freedesktop.org> On Behalf Of Michal
> Wajdeczko
> Sent: Thursday, August 13, 2026 12:45 AM
> To: intel-xe@lists.freedesktop.org
> Cc: Wajdeczko, Michal <michal.wajdeczko@intel.com>; Vivi, Rodrigo
> <rodrigo.vivi@intel.com>; Tauro, Riana <riana.tauro@intel.com>; Iddamsetty,
> Aravind <aravind.iddamsetty@intel.com>; Koujalagi, Mallesh
> <mallesh.koujalagi@intel.com>
> Subject: [PATCH v4 25/32] drm/xe/pcode: Report 'Mailbox failed' error using
> SIGID
>
> Report 'Mailbox failed' error using xe_log_err() helper.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Riana Tauro <riana.tauro@intel.com>
> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> ---
> v2: say xe_log_err() in commit msg (Mallesh)
> ---
> drivers/gpu/drm/xe/xe_pcode.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_pcode.c b/drivers/gpu/drm/xe/xe_pcode.c
> index ccc3bdeed6bb..014632e11338 100644
> --- a/drivers/gpu/drm/xe/xe_pcode.c
> +++ b/drivers/gpu/drm/xe/xe_pcode.c
> @@ -14,6 +14,7 @@
> #include "regs/xe_pmt.h"
> #include "xe_assert.h"
> #include "xe_device.h"
> +#include "xe_log.h"
> #include "xe_mmio.h"
> #include "xe_pcode_api.h"
> #include "xe_pm.h"
> @@ -61,9 +62,7 @@ static int pcode_mailbox_status(struct xe_tile *tile)
> }
>
> if (err) {
> - drm_err(&tile_to_xe(tile)->drm, "PCODE Mailbox failed: %d %s",
> - err_decode, err_str);
> -
> + xe_log_err(tile, PCODE, err_decode, "Mailbox failed: %s\n",
> err_str);
> return err_decode;
Hey,
Could you please merge patch number #25, #26 and #27 into single patch ?
Or is there any thought to kept as separate. ?
Regards,
Dnyaneshwar
> }
>
> --
> 2.47.1
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 11/32] drm/xe/log: Index all SIGID printk messages
2026-08-12 19:14 ` [PATCH v4 11/32] drm/xe/log: Index all SIGID printk messages Michal Wajdeczko
2026-08-12 19:35 ` sashiko-bot
@ 2026-08-13 12:31 ` Mallesh, Koujalagi
2026-08-13 12:54 ` Michal Wajdeczko
1 sibling, 1 reply; 73+ messages in thread
From: Mallesh, Koujalagi @ 2026-08-13 12:31 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe; +Cc: Jani Nikula, Rodrigo Vivi
On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
> When CONFIG_PRINTK_INDEX is enabled, it is expected that all device
> level printk messages are indexed for audit. While usually this is
> done automatically behind the scenes when code is using regular
> dev_printk macros, since we are generating different dmesg messages
> inside xe_log_emit() based on the severity, component and location,
> we only get those entries in /sys/kernel/debug/printk/index/xe:
>
> <3> drivers/gpu/drm/xe/xe_log.c:142 log_dmesg_vprintk "%s %s: [drm] *ERROR* %pV"
> <6> drivers/gpu/drm/xe/xe_log.c:140 log_dmesg_vprintk "%s %s: [drm] %pV"
>
> Explicitly generate printk index using dev_printk_index_emit() with
> some generic prefix that includes the SIGID tag.
>
> Suggested-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Jani Nikula <jani.nikula@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_log.c | 8 ++++----
> drivers/gpu/drm/xe/xe_log.h | 14 +++++++++++---
> 2 files changed, 15 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_log.c b/drivers/gpu/drm/xe/xe_log.c
> index 0b423ed121cd..50a9b35e5b3e 100644
> --- a/drivers/gpu/drm/xe/xe_log.c
> +++ b/drivers/gpu/drm/xe/xe_log.c
> @@ -177,7 +177,7 @@ static void log_emit_dmesg(struct pci_dev *pdev, int cper_sev, enum xe_sigid sig
> }
>
> /**
> - * xe_log_emit() - Emit a structured SIGID log entry
> + * __xe_log_emit() - Emit a structured SIGID log entry
> * @pdev: the &pci_dev device
> * @cper_sev: CPER severity (CPER_SEV_FATAL, CPER_SEV_RECOVERABLE, ...)
> * @sigid: signature identifier, see &enum xe_sigid
> @@ -206,9 +206,9 @@ static void log_emit_dmesg(struct pci_dev *pdev, int cper_sev, enum xe_sigid sig
> * <3> xe 0000:03:00.0: [drm] *ERROR* SIGID=106 (-ETIMEDOUT) Engine 'rcs0' hung
> * <6> xe 0000:03:00.0: [drm] SIGID=103 In survivability mode
> */
> -void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
> - u32 component, u32 location, const void *data, size_t len,
> - const char *fmt, ...)
> +void __xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
> + u32 component, u32 location, const void *data, size_t len,
> + const char *fmt, ...)
> {
> struct va_format vaf;
> va_list args;
> diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h
> index 0928b0866617..53fe2bb7ddd3 100644
> --- a/drivers/gpu/drm/xe/xe_log.h
> +++ b/drivers/gpu/drm/xe/xe_log.h
> @@ -16,9 +16,17 @@
> struct pci_dev;
>
> __printf(8, 9)
> -void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
> - u32 component, u32 location, const void *data, size_t len,
> - const char *fmt, ...);
> +void __xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
> + u32 component, u32 location, const void *data, size_t len,
> + const char *fmt, ...);
> +
> +#define __xe_log_emit_printk_index(fmt) \
> + dev_printk_index_emit(NULL, "[drm]%s SIGID=%u %s(%s)%s%s%s: " fmt);
We need to change format for a. error path b. blob path c. plain or info
path right?
> +
> +#define xe_log_emit(pdev, sev, sig, comp, loc, data, len, fmt, args...) ({ \
> + __xe_log_emit_printk_index(fmt); \
> + __xe_log_emit((pdev), (sev), (sig), (comp), (loc), (data), (len), fmt, ##args); \
> +})
nit: use do{} while (0)
Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>
> #define xe_log_emit_fatal(pdev, sig, comp, loc, data, len, fmt, args...) \
> xe_log_emit((pdev), CPER_SEV_FATAL, (sig), (comp), (loc), \
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 25/32] drm/xe/pcode: Report 'Mailbox failed' error using SIGID
2026-08-13 12:10 ` Bhadane, Dnyaneshwar
@ 2026-08-13 12:35 ` Michal Wajdeczko
0 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-13 12:35 UTC (permalink / raw)
To: Bhadane, Dnyaneshwar, intel-xe@lists.freedesktop.org
Cc: Vivi, Rodrigo, Tauro, Riana, Iddamsetty, Aravind,
Koujalagi, Mallesh, Kalvala, Haridhar
On 8/13/2026 2:10 PM, Bhadane, Dnyaneshwar wrote:
>
>
>> -----Original Message-----
>> From: Intel-xe <intel-xe-bounces@lists.freedesktop.org> On Behalf Of Michal
>> Wajdeczko
>> Sent: Thursday, August 13, 2026 12:45 AM
>> To: intel-xe@lists.freedesktop.org
>> Cc: Wajdeczko, Michal <michal.wajdeczko@intel.com>; Vivi, Rodrigo
>> <rodrigo.vivi@intel.com>; Tauro, Riana <riana.tauro@intel.com>; Iddamsetty,
>> Aravind <aravind.iddamsetty@intel.com>; Koujalagi, Mallesh
>> <mallesh.koujalagi@intel.com>
>> Subject: [PATCH v4 25/32] drm/xe/pcode: Report 'Mailbox failed' error using
>> SIGID
>>
>> Report 'Mailbox failed' error using xe_log_err() helper.
>>
>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Cc: Riana Tauro <riana.tauro@intel.com>
>> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
>> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>> ---
>> v2: say xe_log_err() in commit msg (Mallesh)
>> ---
>> drivers/gpu/drm/xe/xe_pcode.c | 5 ++---
>> 1 file changed, 2 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_pcode.c b/drivers/gpu/drm/xe/xe_pcode.c
>> index ccc3bdeed6bb..014632e11338 100644
>> --- a/drivers/gpu/drm/xe/xe_pcode.c
>> +++ b/drivers/gpu/drm/xe/xe_pcode.c
>> @@ -14,6 +14,7 @@
>> #include "regs/xe_pmt.h"
>> #include "xe_assert.h"
>> #include "xe_device.h"
>> +#include "xe_log.h"
>> #include "xe_mmio.h"
>> #include "xe_pcode_api.h"
>> #include "xe_pm.h"
>> @@ -61,9 +62,7 @@ static int pcode_mailbox_status(struct xe_tile *tile)
>> }
>>
>> if (err) {
>> - drm_err(&tile_to_xe(tile)->drm, "PCODE Mailbox failed: %d %s",
>> - err_decode, err_str);
>> -
>> + xe_log_err(tile, PCODE, err_decode, "Mailbox failed: %s\n",
>> err_str);
>> return err_decode;
> Hey,
> Could you please merge patch number #25, #26 and #27 into single patch ?
> Or is there any thought to kept as separate. ?
the idea was to have proper discussion on each new SIGID usage
then we can merge each acked/r-b'ed patch separately if needed
and as the side-effect we indicate that we don't aim to have
single giant patch per each SIGID and after that topic is closed
as you know, earlier attempt like [1] to do everything in single
patch was far from ready to merge and it would be hard to finish
that in a finite time
[1] https://patchwork.freedesktop.org/patch/744652/?series=171725&rev=1
>
> Regards,
> Dnyaneshwar
>> }
>>
>> --
>> 2.47.1
>
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 23/32] drm/xe/survivability: Report 'Runtime Mode enabled' status using SIGID
2026-08-13 11:40 ` Mallesh, Koujalagi
@ 2026-08-13 12:46 ` Michal Wajdeczko
2026-08-13 13:16 ` Mallesh, Koujalagi
0 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-13 12:46 UTC (permalink / raw)
To: Mallesh, Koujalagi, intel-xe, Riana Tauro, Rodrigo Vivi,
Aravind Iddamsetty
On 8/13/2026 1:40 PM, Mallesh, Koujalagi wrote:
>
> On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
>> Report 'Runtime Mode' status using various xe_log() helpers.
>>
>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Cc: Riana Tauro <riana.tauro@intel.com>
>> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
>> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>> ---
>> drivers/gpu/drm/xe/xe_survivability_mode.c | 10 +++++++---
>> 1 file changed, 7 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
>> index ebd288986c11..5d3315ac735c 100644
>> --- a/drivers/gpu/drm/xe/xe_survivability_mode.c
>> +++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
>> @@ -18,6 +18,7 @@
>> #include "xe_mmio.h"
>> #include "xe_nvm.h"
>> #include "xe_pcode_api.h"
>> +#include "xe_printk.h"
>> #include "xe_vsec.h"
>>
>> /**
>> @@ -405,7 +406,7 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
>> struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
>>
>> if (!IS_DGFX(xe) || IS_SRIOV_VF(xe) || xe->info.platform < XE_BATTLEMAGE) {
>> - dev_err(&pdev->dev, "Runtime Survivability Mode not supported\n");
>> + xe_log_err(xe, SURVIVABILITY, -EOPNOTSUPP, "Runtime Mode not supported!\n");
>> return;
>> }
>>
>> @@ -413,11 +414,14 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
>> create_survivability_sysfs(pdev);
>>
>> survivability->type = XE_SURVIVABILITY_TYPE_RUNTIME;
>> - dev_err(&pdev->dev, "Runtime Survivability mode enabled\n");
>> + xe_log_info(xe, SURVIVABILITY, "Runtime Mode enabled!\n");
>>
>> xe_device_set_wedged_method(xe, DRM_WEDGE_RECOVERY_VENDOR);
>> xe_device_declare_wedged(xe);
>> - dev_err(&pdev->dev, "Firmware flash required, Please refer to the userspace documentation for more details!\n");
>> +
>> + xe_log_info(xe, SURVIVABILITY, "Firmware flash required!\n");
>
> IMO, we need to use xe_log_err (recoverable) here instead of xe_log_info.
>
> Already mentioned in original changes [1], runtime firmware errors cause device unstable:
>
> [1] https://gitlab.freedesktop.org/drm/tip/-/commit/a2ca0633a0fef925a0d8125d8f3e4495a5ecb310
but in recent comment [2] you said that Arch team wanted that to be logged as info rather than fatal
[2] https://patchwork.freedesktop.org/patch/743324/?series=171022&rev=3#comment_1373731
@Riana, @Rodrigo, @Aravind ?
I need a decider here
>
>
> As I know xe_survivability_mode_runtime_enable function need to carry errno as parameter to pass into xe_log_err,
>
> however we need to create separate refactor patch for that in future.
>
>
> With above changes:
>
> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>
>> + xe_info(xe, "Please refer to the userspace documentation for more details how to flash the firmware on %s!\n",
>> + xe->info.platform_name);
>> }
>>
>> static void log_survivability_info(struct xe_device *xe)
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 11/32] drm/xe/log: Index all SIGID printk messages
2026-08-13 12:31 ` Mallesh, Koujalagi
@ 2026-08-13 12:54 ` Michal Wajdeczko
2026-08-13 13:29 ` Michal Wajdeczko
0 siblings, 1 reply; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-13 12:54 UTC (permalink / raw)
To: Mallesh, Koujalagi, intel-xe, Jani Nikula; +Cc: Rodrigo Vivi
On 8/13/2026 2:31 PM, Mallesh, Koujalagi wrote:
>
> On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
>> When CONFIG_PRINTK_INDEX is enabled, it is expected that all device
>> level printk messages are indexed for audit. While usually this is
>> done automatically behind the scenes when code is using regular
>> dev_printk macros, since we are generating different dmesg messages
>> inside xe_log_emit() based on the severity, component and location,
>> we only get those entries in /sys/kernel/debug/printk/index/xe:
>>
>> <3> drivers/gpu/drm/xe/xe_log.c:142 log_dmesg_vprintk "%s %s: [drm] *ERROR* %pV"
>> <6> drivers/gpu/drm/xe/xe_log.c:140 log_dmesg_vprintk "%s %s: [drm] %pV"
>>
>> Explicitly generate printk index using dev_printk_index_emit() with
>> some generic prefix that includes the SIGID tag.
>>
>> Suggested-by: Jani Nikula <jani.nikula@intel.com>
>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>> Cc: Jani Nikula <jani.nikula@intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> ---
>> drivers/gpu/drm/xe/xe_log.c | 8 ++++----
>> drivers/gpu/drm/xe/xe_log.h | 14 +++++++++++---
>> 2 files changed, 15 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_log.c b/drivers/gpu/drm/xe/xe_log.c
>> index 0b423ed121cd..50a9b35e5b3e 100644
>> --- a/drivers/gpu/drm/xe/xe_log.c
>> +++ b/drivers/gpu/drm/xe/xe_log.c
>> @@ -177,7 +177,7 @@ static void log_emit_dmesg(struct pci_dev *pdev, int cper_sev, enum xe_sigid sig
>> }
>> /**
>> - * xe_log_emit() - Emit a structured SIGID log entry
>> + * __xe_log_emit() - Emit a structured SIGID log entry
>> * @pdev: the &pci_dev device
>> * @cper_sev: CPER severity (CPER_SEV_FATAL, CPER_SEV_RECOVERABLE, ...)
>> * @sigid: signature identifier, see &enum xe_sigid
>> @@ -206,9 +206,9 @@ static void log_emit_dmesg(struct pci_dev *pdev, int cper_sev, enum xe_sigid sig
>> * <3> xe 0000:03:00.0: [drm] *ERROR* SIGID=106 (-ETIMEDOUT) Engine 'rcs0' hung
>> * <6> xe 0000:03:00.0: [drm] SIGID=103 In survivability mode
>> */
>> -void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
>> - u32 component, u32 location, const void *data, size_t len,
>> - const char *fmt, ...)
>> +void __xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
>> + u32 component, u32 location, const void *data, size_t len,
>> + const char *fmt, ...)
>> {
>> struct va_format vaf;
>> va_list args;
>> diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h
>> index 0928b0866617..53fe2bb7ddd3 100644
>> --- a/drivers/gpu/drm/xe/xe_log.h
>> +++ b/drivers/gpu/drm/xe/xe_log.h
>> @@ -16,9 +16,17 @@
>> struct pci_dev;
>> __printf(8, 9)
>> -void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
>> - u32 component, u32 location, const void *data, size_t len,
>> - const char *fmt, ...);
>> +void __xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
>> + u32 component, u32 location, const void *data, size_t len,
>> + const char *fmt, ...);
>> +
>> +#define __xe_log_emit_printk_index(fmt) \
>> + dev_printk_index_emit(NULL, "[drm]%s SIGID=%u %s(%s)%s%s%s: " fmt);
> We need to change format for a. error path b. blob path c. plain or info path right?
well, that's not doable as final format/output depends on the
severity and data value, which could be non-const at compile
time, while printk-index requires this to emit right entry
I can change that to a something more generic (and unfriendly), like:
dev_printk_index_emit(NULL, "%sSIGID=%u %s" fmt);
but that will catch and match all our outputs.
@Jani, are you OK with that?
>> +
>> +#define xe_log_emit(pdev, sev, sig, comp, loc, data, len, fmt, args...) ({ \
>> + __xe_log_emit_printk_index(fmt); \
>> + __xe_log_emit((pdev), (sev), (sig), (comp), (loc), (data), (len), fmt, ##args); \
>> +})
>
> nit: use do{} while (0)
>
> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>
>> #define xe_log_emit_fatal(pdev, sig, comp, loc, data, len, fmt, args...) \
>> xe_log_emit((pdev), CPER_SEV_FATAL, (sig), (comp), (loc), \
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 23/32] drm/xe/survivability: Report 'Runtime Mode enabled' status using SIGID
2026-08-13 12:46 ` Michal Wajdeczko
@ 2026-08-13 13:16 ` Mallesh, Koujalagi
0 siblings, 0 replies; 73+ messages in thread
From: Mallesh, Koujalagi @ 2026-08-13 13:16 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe, Riana Tauro, Rodrigo Vivi,
Aravind Iddamsetty
On 13-08-2026 06:16 pm, Michal Wajdeczko wrote:
>
> On 8/13/2026 1:40 PM, Mallesh, Koujalagi wrote:
>> On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
>>> Report 'Runtime Mode' status using various xe_log() helpers.
>>>
>>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>> Cc: Riana Tauro <riana.tauro@intel.com>
>>> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
>>> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>>> ---
>>> drivers/gpu/drm/xe/xe_survivability_mode.c | 10 +++++++---
>>> 1 file changed, 7 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
>>> index ebd288986c11..5d3315ac735c 100644
>>> --- a/drivers/gpu/drm/xe/xe_survivability_mode.c
>>> +++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
>>> @@ -18,6 +18,7 @@
>>> #include "xe_mmio.h"
>>> #include "xe_nvm.h"
>>> #include "xe_pcode_api.h"
>>> +#include "xe_printk.h"
>>> #include "xe_vsec.h"
>>>
>>> /**
>>> @@ -405,7 +406,7 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
>>> struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
>>>
>>> if (!IS_DGFX(xe) || IS_SRIOV_VF(xe) || xe->info.platform < XE_BATTLEMAGE) {
>>> - dev_err(&pdev->dev, "Runtime Survivability Mode not supported\n");
>>> + xe_log_err(xe, SURVIVABILITY, -EOPNOTSUPP, "Runtime Mode not supported!\n");
>>> return;
>>> }
>>>
>>> @@ -413,11 +414,14 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
>>> create_survivability_sysfs(pdev);
>>>
>>> survivability->type = XE_SURVIVABILITY_TYPE_RUNTIME;
>>> - dev_err(&pdev->dev, "Runtime Survivability mode enabled\n");
>>> + xe_log_info(xe, SURVIVABILITY, "Runtime Mode enabled!\n");
>>>
>>> xe_device_set_wedged_method(xe, DRM_WEDGE_RECOVERY_VENDOR);
>>> xe_device_declare_wedged(xe);
>>> - dev_err(&pdev->dev, "Firmware flash required, Please refer to the userspace documentation for more details!\n");
>>> +
>>> + xe_log_info(xe, SURVIVABILITY, "Firmware flash required!\n");
>> IMO, we need to use xe_log_err (recoverable) here instead of xe_log_info.
>>
>> Already mentioned in original changes [1], runtime firmware errors cause device unstable:
>>
>> [1] https://gitlab.freedesktop.org/drm/tip/-/commit/a2ca0633a0fef925a0d8125d8f3e4495a5ecb310
> but in recent comment [2] you said that Arch team wanted that to be logged as info rather than fatal
>
> [2] https://patchwork.freedesktop.org/patch/743324/?series=171022&rev=3#comment_1373731
When we pass zero as errno, that time we can use it *_info (boot
survivability mode), that's what Arch team told me.
@Aravind, can u please comment here.
Thanks,
-/Mallesh
>
> @Riana, @Rodrigo, @Aravind ?
>
> I need a decider here
>
>>
>> As I know xe_survivability_mode_runtime_enable function need to carry errno as parameter to pass into xe_log_err,
>>
>> however we need to create separate refactor patch for that in future.
>>
>>
>> With above changes:
>>
>> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>>
>>> + xe_info(xe, "Please refer to the userspace documentation for more details how to flash the firmware on %s!\n",
>>> + xe->info.platform_name);
>>> }
>>>
>>> static void log_survivability_info(struct xe_device *xe)
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 11/32] drm/xe/log: Index all SIGID printk messages
2026-08-13 12:54 ` Michal Wajdeczko
@ 2026-08-13 13:29 ` Michal Wajdeczko
0 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-13 13:29 UTC (permalink / raw)
To: Mallesh, Koujalagi, intel-xe, Jani Nikula; +Cc: Rodrigo Vivi
On 8/13/2026 2:54 PM, Michal Wajdeczko wrote:
>
>
> On 8/13/2026 2:31 PM, Mallesh, Koujalagi wrote:
>>
>> On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
>>> When CONFIG_PRINTK_INDEX is enabled, it is expected that all device
>>> level printk messages are indexed for audit. While usually this is
>>> done automatically behind the scenes when code is using regular
>>> dev_printk macros, since we are generating different dmesg messages
>>> inside xe_log_emit() based on the severity, component and location,
>>> we only get those entries in /sys/kernel/debug/printk/index/xe:
>>>
>>> <3> drivers/gpu/drm/xe/xe_log.c:142 log_dmesg_vprintk "%s %s: [drm] *ERROR* %pV"
>>> <6> drivers/gpu/drm/xe/xe_log.c:140 log_dmesg_vprintk "%s %s: [drm] %pV"
>>>
>>> Explicitly generate printk index using dev_printk_index_emit() with
>>> some generic prefix that includes the SIGID tag.
>>>
>>> Suggested-by: Jani Nikula <jani.nikula@intel.com>
>>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>>> Cc: Jani Nikula <jani.nikula@intel.com>
>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>> ---
>>> drivers/gpu/drm/xe/xe_log.c | 8 ++++----
>>> drivers/gpu/drm/xe/xe_log.h | 14 +++++++++++---
>>> 2 files changed, 15 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/xe/xe_log.c b/drivers/gpu/drm/xe/xe_log.c
>>> index 0b423ed121cd..50a9b35e5b3e 100644
>>> --- a/drivers/gpu/drm/xe/xe_log.c
>>> +++ b/drivers/gpu/drm/xe/xe_log.c
>>> @@ -177,7 +177,7 @@ static void log_emit_dmesg(struct pci_dev *pdev, int cper_sev, enum xe_sigid sig
>>> }
>>> /**
>>> - * xe_log_emit() - Emit a structured SIGID log entry
>>> + * __xe_log_emit() - Emit a structured SIGID log entry
>>> * @pdev: the &pci_dev device
>>> * @cper_sev: CPER severity (CPER_SEV_FATAL, CPER_SEV_RECOVERABLE, ...)
>>> * @sigid: signature identifier, see &enum xe_sigid
>>> @@ -206,9 +206,9 @@ static void log_emit_dmesg(struct pci_dev *pdev, int cper_sev, enum xe_sigid sig
>>> * <3> xe 0000:03:00.0: [drm] *ERROR* SIGID=106 (-ETIMEDOUT) Engine 'rcs0' hung
>>> * <6> xe 0000:03:00.0: [drm] SIGID=103 In survivability mode
>>> */
>>> -void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
>>> - u32 component, u32 location, const void *data, size_t len,
>>> - const char *fmt, ...)
>>> +void __xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
>>> + u32 component, u32 location, const void *data, size_t len,
>>> + const char *fmt, ...)
>>> {
>>> struct va_format vaf;
>>> va_list args;
>>> diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h
>>> index 0928b0866617..53fe2bb7ddd3 100644
>>> --- a/drivers/gpu/drm/xe/xe_log.h
>>> +++ b/drivers/gpu/drm/xe/xe_log.h
>>> @@ -16,9 +16,17 @@
>>> struct pci_dev;
>>> __printf(8, 9)
>>> -void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
>>> - u32 component, u32 location, const void *data, size_t len,
>>> - const char *fmt, ...);
>>> +void __xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
>>> + u32 component, u32 location, const void *data, size_t len,
>>> + const char *fmt, ...);
>>> +
>>> +#define __xe_log_emit_printk_index(fmt) \
>>> + dev_printk_index_emit(NULL, "[drm]%s SIGID=%u %s(%s)%s%s%s: " fmt);
>> We need to change format for a. error path b. blob path c. plain or info path right?
>
> well, that's not doable as final format/output depends on the
> severity and data value, which could be non-const at compile
> time, while printk-index requires this to emit right entry
>
> I can change that to a something more generic (and unfriendly), like:
>
> dev_printk_index_emit(NULL, "%sSIGID=%u %s" fmt);
>
> but that will catch and match all our outputs.
and this is how this will look like for current series:
$ sudo cat /sys/kernel/debug/printk/index/xe | grep SIGID
<3> drivers/gpu/drm/xe/xe_device.c:1481 xe_device_declare_wedged "%s %s: %s SIGID=%u %sDevice declared wedged!\n"
<3> drivers/gpu/drm/xe/xe_gt.c:977 gt_reset_worker "%s %s: %s SIGID=%u %sreset failed\n"
<6> drivers/gpu/drm/xe/xe_gt.c:968 gt_reset_worker "%s %s: %s SIGID=%u %sreset done\n"
<6> drivers/gpu/drm/xe/xe_gt.c:929 gt_reset_worker "%s %s: %s SIGID=%u %sreset started\n"
<3> drivers/gpu/drm/xe/xe_guc.c:1620 xe_guc_mmio_send_recv "%s %s: %s SIGID=%u %sMMIO request %#x: unexpected reply %#x\n"
<3> drivers/gpu/drm/xe/xe_guc.c:1612 xe_guc_mmio_send_recv "%s %s: %s SIGID=%u %sMMIO request %#x: failure %#x hint %#x\n"
<3> drivers/gpu/drm/xe/xe_guc.c:1556 xe_guc_mmio_send_recv "%s %s: %s SIGID=%u %sMMIO request %#x: no reply %#x\n"
<3> drivers/gpu/drm/xe/xe_guc.c:1546 xe_guc_mmio_send_recv "%s %s: %s SIGID=%u %sMMIO request %#x: lost, too many retries %u\n"
<3> drivers/gpu/drm/xe/xe_pagefault.c:631 xe_pagefault_queue_work "%s %s: %s SIGID=%u %sUnsuccessful response\n"
<3> drivers/gpu/drm/xe/xe_pagefault.c:332 xe_pagefault_queue_add "%s %s: %s SIGID=%u %sQueue full!\n"
<3> drivers/gpu/drm/xe/xe_pci.c:1181 xe_pci_probe "%s %s: %s SIGID=%u %sdriver loading failed for device '%04x'\n"
<6> drivers/gpu/drm/xe/xe_pci.c:1171 xe_pci_probe "%s %s: %s SIGID=%u %sdriver loading blocked for device '%04x'\n"
<3> drivers/gpu/drm/xe/xe_pci_error.c:102 xe_pci_error_slot_reset "%s %s: %s SIGID=%u %sCannot re-enable PCI device after reset\n"
<3> drivers/gpu/drm/xe/xe_pcode.c:321 xe_pcode_ready "%s %s: %s SIGID=%u %sinitialization timedout after %ld seconds\n"
<3> drivers/gpu/drm/xe/xe_pcode.c:221 xe_pcode_request "%s %s: %s SIGID=%u %stimeout, retrying with preemption disabled\n"
<3> drivers/gpu/drm/xe/xe_pcode.c:65 pcode_mailbox_status "%s %s: %s SIGID=%u %sMailbox failed: %s\n"
<6> drivers/gpu/drm/xe/xe_survivability_mode.c:440 log_survivability_info "%s %s: %s SIGID=%u %s%s: %#x\n"
<3> drivers/gpu/drm/xe/xe_survivability_mode.c:433 log_survivability_info "%s %s: %s SIGID=%u %sBoot Status: %s (%u)\n"
<6> drivers/gpu/drm/xe/xe_survivability_mode.c:422 xe_survivability_mode_runtime_enable "%s %s: %s SIGID=%u %sFirmware flash required!\n"
<6> drivers/gpu/drm/xe/xe_survivability_mode.c:417 xe_survivability_mode_runtime_enable "%s %s: %s SIGID=%u %sRuntime Mode enabled!\n"
<3> drivers/gpu/drm/xe/xe_survivability_mode.c:409 xe_survivability_mode_runtime_enable "%s %s: %s SIGID=%u %sRuntime Mode not supported!\n"
<3> drivers/gpu/drm/xe/xe_survivability_mode.c:344 enable_boot_survivability_mode "%s %s: %s SIGID=%u %sFailed to enable Boot Mode!\n"
<6> drivers/gpu/drm/xe/xe_survivability_mode.c:339 enable_boot_survivability_mode "%s %s: %s SIGID=%u %sBoot Mode enabled!\n"
<3> drivers/gpu/drm/xe/xe_survivability_mode.c:334 enable_boot_survivability_mode "%s %s: %s SIGID=%u %sBoot Mode enabled!\n"
<3> drivers/gpu/drm/xe/xe_survivability_mode.c:302 create_survivability_sysfs "%s %s: %s SIGID=%u %sFailed to create sysfs files!\n"
>
> @Jani, are you OK with that?
>
>>> +
>>> +#define xe_log_emit(pdev, sev, sig, comp, loc, data, len, fmt, args...) ({ \
>>> + __xe_log_emit_printk_index(fmt); \
>>> + __xe_log_emit((pdev), (sev), (sig), (comp), (loc), (data), (len), fmt, ##args); \
>>> +})
>>
>> nit: use do{} while (0)
>>
>> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>>
>>> #define xe_log_emit_fatal(pdev, sig, comp, loc, data, len, fmt, args...) \
>>> xe_log_emit((pdev), CPER_SEV_FATAL, (sig), (comp), (loc), \
>
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 02/32] drm/xe/log: Add structured SIGID error logging infrastructure
2026-08-12 19:14 ` [PATCH v4 02/32] drm/xe/log: Add structured SIGID error logging infrastructure Michal Wajdeczko
@ 2026-08-13 13:33 ` Mallesh, Koujalagi
2026-08-13 13:57 ` Michal Wajdeczko
2026-08-13 13:42 ` Nilawar, Badal
1 sibling, 1 reply; 73+ messages in thread
From: Mallesh, Koujalagi @ 2026-08-13 13:33 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe
Cc: Rodrigo Vivi, Riana Tauro, Stuart Summers, Yoni Levitt,
Aravind Iddamsetty, Raag Jadav
[-- Attachment #1: Type: text/plain, Size: 16950 bytes --]
On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
> From: Mallesh Koujalagi<mallesh.koujalagi@intel.com>
>
> Today the driver reports faults with ad-hoc drm_err()/xe_gt_err()
> strings that have no stable shape. That is readable for a human, but it
> gives fleet tooling nothing durable to match on: the wording changes
> between releases, lines can be rate-limited or dropped under an error
> storm, and there is no consistent way to ask "which recognised fault
> just happened?".
>
> Introduce a signature identifier (SIGID): a small, stable integer that
> names one recognised Xe fault site and serves as the primary handle for
> triage. A SIGID maps, through published end-user documentation, to a
> description and a recommended action; the driver only has to emit the
> right SIGID next to the usual human-readable text.
>
> Signed-off-by: Mallesh Koujalagi<mallesh.koujalagi@intel.com>
> Assisted-by: Copilot:Opus-4.8
> Signed-off-by: Rodrigo Vivi<rodrigo.vivi@intel.com>
> Co-developed-by: Michal Wajdeczko<michal.wajdeczko@intel.com>
> Signed-off-by: Michal Wajdeczko<michal.wajdeczko@intel.com>
> Cc: Riana Tauro<riana.tauro@intel.com>
> Cc: Stuart Summers<stuart.summers@intel.com>
> ---
> Cc: Yoni Levitt<yoni.levitt@intel.com>
> Cc: Aravind Iddamsetty<aravind.iddamsetty@intel.com>
> Cc: Raag Jadav<raag.jadav@intel.com>
> ---
> v2: CORRECTED is still an error (Michal)
> prepare to decorate dmesg with comp/loc (Michal)
> v3: update SIGID DOC section (Riana/Aravind)
> warn about unknown severity (Mallesh)
> ---
> Documentation/gpu/xe/index.rst | 1 +
> Documentation/gpu/xe/xe_sigid.rst | 14 +++
> drivers/gpu/drm/xe/Makefile | 1 +
> drivers/gpu/drm/xe/abi/xe_sigid_abi.h | 159 ++++++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_log.c | 138 ++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_log.h | 20 ++++
> 6 files changed, 333 insertions(+)
> create mode 100644 Documentation/gpu/xe/xe_sigid.rst
> create mode 100644 drivers/gpu/drm/xe/abi/xe_sigid_abi.h
> create mode 100644 drivers/gpu/drm/xe/xe_log.c
> create mode 100644 drivers/gpu/drm/xe/xe_log.h
>
> diff --git a/Documentation/gpu/xe/index.rst b/Documentation/gpu/xe/index.rst
> index 665c0e93601c..0247a255f7e6 100644
> --- a/Documentation/gpu/xe/index.rst
> +++ b/Documentation/gpu/xe/index.rst
> @@ -35,3 +35,4 @@ The display, or :ref:`drm-kms`, support for drm/xe is provided by
> xe-drm-usage-stats.rst
> xe_configfs
> xe_gt_stats
> + xe_sigid
> diff --git a/Documentation/gpu/xe/xe_sigid.rst b/Documentation/gpu/xe/xe_sigid.rst
> new file mode 100644
> index 000000000000..45d84a62f185
> --- /dev/null
> +++ b/Documentation/gpu/xe/xe_sigid.rst
> @@ -0,0 +1,14 @@
> +.. SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +
> +========
> +Xe SIGID
> +========
> +
> +.. kernel-doc:: drivers/gpu/drm/xe/abi/xe_sigid_abi.h
> + :doc: Xe Error Signatures (SIGID)
> +
> +Signature Identifiers
> +=====================
> +
> +.. kernel-doc:: drivers/gpu/drm/xe/abi/xe_sigid_abi.h
> + :internal:
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> index 44ed055439d4..92134709d998 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -87,6 +87,7 @@ xe-y += xe_bb.o \
> xe_hw_fence.o \
> xe_irq.o \
> xe_late_bind_fw.o \
> + xe_log.o \
> xe_lrc.o \
> xe_mem_pool.o \
> xe_migrate.o \
> diff --git a/drivers/gpu/drm/xe/abi/xe_sigid_abi.h b/drivers/gpu/drm/xe/abi/xe_sigid_abi.h
> new file mode 100644
> index 000000000000..93967183ae51
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/abi/xe_sigid_abi.h
> @@ -0,0 +1,159 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2026 Intel Corporation
> + */
> +
> +#ifndef _ABI_XE_SIGID_ABI_H_
> +#define _ABI_XE_SIGID_ABI_H_
> +
> +/**
> + * DOC: Xe Error Signatures (SIGID)
> + *
> + * What SIGID stands for
> + * ---------------------
> + *
> + * SIGID is short for *Signature Identifier*. It is a small, stable integer
> + * that names one of *recognised fault site* -- nothing more. It is the
> + * primary handle used for triage and maps directly to specific report site.
> + *
> + * Numbering
> + * ---------
> + *
> + * SIGIDs are a single flat list numbered sequentially within the assigned range,
> + * in the order the fault sites were introduced. Values are stable: once assigned
> + * they are only ever appended, never renumbered or reused. A retired fault site
> + * SIGID value is deprecated in place, never re-purposed.
> + *
> + * Why this exists
> + * ---------------
> + *
> + * Today the driver reports faults with ad-hoc ``xe_err()`` / ``xe_gt_err()``
> + * strings that have no stable shape. That is fine for a human reading dmesg,
> + * but it gives fleet tooling nothing durable to match on: the wording changes
> + * between releases, lines can be rate-limited or dropped under an error storm,
> + * and there is no consistent way to ask "which recognised fault just happened?"
> + *
> + * A SIGID answers exactly that one question, identically across driver and
> + * firmware versions, and (eventually) across other Intel devices in a node.
> + *
> + * What a SIGID is not
> + * -------------------
> + *
> + * SIGID deliberately does not encode the detailed reason or the outcome. Those
> + * are carried alongside it::
> + *
> + * SIGID -> which recognised fault site is being reported
> + * severity -> how serious this instance is
> + * errno -> the failing operation's error, if available, shown with %pe
> + * message -> free-form human-readable context
> + *
> + * Severity is independent of the SIGID. The same SIGID can be reported at
> + * different severities depending on the instance and the recovery taken.
> + *
> + * When to use SIGID logging
> + * -------------------------
> + *
> + * The xe_log_*() helpers are for these recognised fault sites only --
> + * important, operator-relevant faults and events. The driver's only job is to
> + * emit the right SIGID next to the usual human-readable text.
> +
> + * They are not a replacement for ``xe_info()`` / ``xe_dbg()`` / tracing, nor
> + * for one-off diagnostics; using them for ordinary logging would dilute the
> + * fault stream. Not every ``xe_err()`` needs to become a SIGID report -- only
> + * those that correspond to a published fault sites.
> + *
> + * SIGID log output (dmesg vs. the machine record)
> + * -----------------------------------------------
> + *
> + * The dmesg line stays close to a normal xe error message so it remains
> + * readable for admins; the only stable, machine-matchable token on it is
> + * ``SIGID=<n>`` (``dmesg | grep SIGID=``).
> + *
> + * The full dmesg line is not an ABI: the surrounding text may change freely,
> + * and lines may be dropped. The durable record for tooling is the CPER record
> + * carrying the same SIGID (generation is a planned follow-up).
> + *
> + * How to pick a SIGID (the uniqueness rule)
> + * -----------------------------------------
> + *
> + * Pick per *report site*, not per incident. Each site emits the single most
> + * specific recognised SIGID *for that site* -- so the question is never
> + * "classify this whole failure", it is "what does this site detect?", which has + * one answer. A single underlying failure therefore
> legitimately produces a + * *chain* of reports from different layers,
> each with its own SIGID -- e.g. a + * GuC communication failure is
> reported as %XE_SIGID_RUNTIME_FW by the firmware + * path, the failed
> recovery as %XE_SIGID_GT_TDR by the reset path, and an + * aborted
> bind as %XE_SIGID_PROBE by the probe path. That chain lets triage + *
> follow a fault from origin to final effect; it is not a duplicate. + *
> + * If a site does not match any defined SIGID, keep using the
> ordinary + * ``xe_err()`` / ``xe_gt_err()`` logging rather than
> forcing a SIGID: a wrong + * or over-broad classification is harder to
> retire than a missing one. When a + * new report site is genuinely
> worth triaging, add it to the list below. + * + * Usage of the
> existing SIGID reports must reevaluated according to this section + *
> after making significant changes to the site that emits this SIGID. +
> * + * Scope: software vs hardware emitted signatures + *
> ---------------------------------------------- + * + * Some SIGID
> represents fault sites that the *driver itself* detects and + *
> reports from the software POV: probe abort, wedged, survivability,
> driver- + * detected firmware failures, engine TDR, memory faults and
> IO/bus faults. + * These are the only values the driver assigns on its
> own. + * + * Signatures that *originate* in firmware or hardware are a
> different thing: + * they are produced and identified by the firmware
> or the hardware itself + * (e.g. via their own records or error
> counters), and the driver merely logs + * them as they are given to
> us. They are deliberately enumerated separately. + * + * The two
> driver-detected firmware report sites below (%XE_SIGID_RUNTIME_FW, + *
> %XE_SIGID_DEVICE_FW) are software signatures: they mark that *the
> driver* + * observed a firmware problem, not a signature reported by
> the firmware. + */ + +/* + * Top level Intel Error Signature
> Identifiers. + */ +#define INTEL_SIGID_INVALID 0 +#define
> INTEL_SIGID_BATCH 100 +#define INTEL_SIGID_RANGE_START(n) ((n) *
> INTEL_SIGID_BATCH) +#define INTEL_SIGID_RANGE_END(n)
> (INTEL_SIGID_RANGE_START((n) + 1) - 1) + +/* SIGIDs 1xx are reserved
> for Xe GPU software and 2xx for Xe GPU hardware */ +#define
> INTEL_SIGID_GPU_XE_SOFTWARE_START INTEL_SIGID_RANGE_START(1) +#define
> INTEL_SIGID_GPU_XE_SOFTWARE_END INTEL_SIGID_RANGE_END(1) +#define
> INTEL_SIGID_GPU_XE_HARDWARE_START INTEL_SIGID_RANGE_START(2) +#define
> INTEL_SIGID_GPU_XE_HARDWARE_END INTEL_SIGID_RANGE_END(2) + +/** + *
> enum xe_sigid - Stable Xe Error Signature Identifiers (SIGID). + *
> @XE_SIGID_SW: Software component failure. + * @XE_SIGID_PROBE: Device
> probe/bind was aborted. + * @XE_SIGID_WEDGED: Device was declared
> wedged and is no longer usable. + * @XE_SIGID_SURVIVABILITY: Device
> entered survivability mode. + * @XE_SIGID_RUNTIME_FW: Driver-detected
> runtime firmware failure, GuC/HuC/GSC. + * @XE_SIGID_DEVICE_FW:
> Driver-detected device firmware failure, PCODE/sysctrl. + *
> @XE_SIGID_GT_TDR: Engine hang / timeout detection and recovery
> (reset). + * @XE_SIGID_MEM_FAULT: VM bind, page fault or GTT fault. +
> * @XE_SIGID_IO_BUS: Runtime PCIe / IOMMU / MMIO access fault. + * + *
> Each SIGID represents the report sites the driver detects and reports.
> + * Values are numbered sequentially, are only ever appended, and are
> never + * renumbered or reused. + * + * Firmware- and
> hardware-originated signatures are not listed yet here. + */ +enum
> xe_sigid { + XE_SIGID_SW = INTEL_SIGID_GPU_XE_SOFTWARE_START, +
> XE_SIGID_PROBE = INTEL_SIGID_GPU_XE_SOFTWARE_START + 1, +
> XE_SIGID_WEDGED = INTEL_SIGID_GPU_XE_SOFTWARE_START + 2, +
> XE_SIGID_SURVIVABILITY = INTEL_SIGID_GPU_XE_SOFTWARE_START + 3, +
> XE_SIGID_RUNTIME_FW = INTEL_SIGID_GPU_XE_SOFTWARE_START + 4, +
> XE_SIGID_DEVICE_FW = INTEL_SIGID_GPU_XE_SOFTWARE_START + 5, +
> XE_SIGID_GT_TDR = INTEL_SIGID_GPU_XE_SOFTWARE_START + 6, +
> XE_SIGID_MEM_FAULT = INTEL_SIGID_GPU_XE_SOFTWARE_START + 7, +
> XE_SIGID_IO_BUS = INTEL_SIGID_GPU_XE_SOFTWARE_START + 8, +}; + +#endif
> diff --git a/drivers/gpu/drm/xe/xe_log.c b/drivers/gpu/drm/xe/xe_log.c
> new file mode 100644 index 000000000000..ae4f6e33f5b8 --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_log.c @@ -0,0 +1,138 @@ +//
> SPDX-License-Identifier: MIT +/* + * Copyright © 2026 Intel
> Corporation + */ + +#include "xe_log.h"
> +#include "xe_printk.h"
> +
> +static void log_emit_cper(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
> + u32 component, u32 location, const void *data, size_t len,
> + struct va_format *vaf)
> +{
> + /* TODO */
> +}
> +
> +static bool is_hw_sigid(enum xe_sigid sigid)
> +{
> + return (int)sigid >= INTEL_SIGID_GPU_XE_HARDWARE_START;
> +}
> +
> +static bool is_sev_error(int cper_sev)
> +{
> + return cper_sev != CPER_SEV_INFORMATIONAL;
> +}
> +
> +static const char *log_hwe_prefix(int cper_sev, enum xe_sigid sigid)
> +{
> + return is_sev_error(cper_sev) && is_hw_sigid(sigid) ? HW_ERR : "";
> +}
> +
> +static const char *log_sev_prefix(int cper_sev)
> +{
> + switch (cper_sev) {
> + case CPER_SEV_FATAL:
> + return "FATAL ";
> + case CPER_SEV_RECOVERABLE:
> + return "";
> + case CPER_SEV_CORRECTED:
> + return "CORRECTED ";
> + case CPER_SEV_INFORMATIONAL:
> + return "";
> + default:
> + WARN(IS_ENABLED(CONFIG_DRM_XE_DEBUG), "LOG: unknown severity %d\n", cper_sev);
> + return "";
> + }
> +}
> +
> +#define __LOG_DRM_PRINTK_FMT(fmt, args...) "[drm] " fmt, ##args
> +#define __LOG_DRM_PRINTK_ERR_FMT(fmt, args...) __LOG_DRM_PRINTK_FMT("*ERROR* " fmt, args)
> +
> +static void log_dmesg_vprintk(struct pci_dev *pdev, int cper_sev, struct va_format *vaf)
> +{
> + if (cper_sev == CPER_SEV_INFORMATIONAL)
> + pci_info(pdev, __LOG_DRM_PRINTK_FMT("%pV", vaf));
> + else
> + pci_err(pdev, __LOG_DRM_PRINTK_ERR_FMT("%pV", vaf));
> +}
> +
> +static void log_dmesg_printf(struct pci_dev *pdev, int cper_sev, const char *fmt, ...)
> +{
> + struct va_format vaf;
> + va_list args;
> +
> + va_start(args, fmt);
> + vaf.fmt = fmt;
> + vaf.va = &args;
> +
> + log_dmesg_vprintk(pdev, cper_sev, &vaf);
> +
> + va_end(args);
> +}
> +
> +static void log_emit_dmesg(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
> + u32 component, u32 location, const void *data, size_t len,
> + struct va_format *vaf)
> +{
> + const char *hwe_prefix = log_hwe_prefix(cper_sev, sigid);
> + const char *sev_prefix = log_sev_prefix(cper_sev);
> +
> + /* TODO: add component/location details */
> +
> + if (IS_ERR(data))
> + log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s(%pe) %s%pV",
> + sigid, sev_prefix, data, hwe_prefix, vaf);
> + else if (data && len)
> + log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s(%*phN) %s%pV",
> + sigid, sev_prefix, (int)len, data, hwe_prefix, vaf);
> + else
> + log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s%s%pV",
> + sigid, sev_prefix, hwe_prefix, vaf);
> +}
> +
> +/**
> + * xe_log_emit() - Emit a structured SIGID log entry
> + * @pdev: the &pci_dev device
> + * @cper_sev: CPER severity (CPER_SEV_FATAL, CPER_SEV_RECOVERABLE, ...)
> + * @sigid: signature identifier, see &enum xe_sigid
> + * @component: component identifer
Typo "identifier"
> + * @location: location details of the @component
> + * @data: pointer to the additional details, or ERR_PTR, or NULL if not applicable
> + * @len: length of the @data in bytes, or 0 if not applicable
> + * @fmt: printf-style format string
> + * @...: format arguments
> + *
> + * Emits a dmesg line that includes a single stable, machine-matchable token
> + * ``SIGID=<n>`` followed by the optional severity token (like ``FATAL``) and,
> + * when @data pointer is set, either the error printed with %pe or a packed hex
> + * dump of the @data binary blob. The dmesg line will also include printf-style
> + * text message.
> + *
> + * Note that the full dmesg line, with the free text message, is only a debugging
> + * aid, not an interface! Only the ``SIGID=<n>`` token is stable there.
> + * The durable machine record is the CPER carrying the same SIGID.
> + *
> + * Note: generation of the CPER record is a planned follow-up.
> + *
> + * Examples::
> + *
> + * <3> xe 0000:03:00.0: [drm] *ERROR* SIGID=104 FATAL (-EPROTO) Invalid GuC reply
Missing TAG: in this case GuC/HuC/GSC:
right?
> + * <3> xe 0000:03:00.0: [drm] *ERROR* SIGID=106 (-ETIMEDOUT) Engine 'rcs0' hung
ditto
> + * <6> xe 0000:03:00.0: [drm] SIGID=103 In survivability mode
> + */
> +void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
> + u32 component, u32 location, const void *data, size_t len,
> + const char *fmt, ...)
> +{
> + struct va_format vaf;
> + va_list args;
> +
> + va_start(args, fmt);
> + vaf.fmt = fmt;
> + vaf.va = &args;
> +
> + log_emit_dmesg(pdev, cper_sev, sigid, component, location, data, len, &vaf);
> + log_emit_cper(pdev, cper_sev, sigid, component, location, data, len, &vaf);
> +
> + va_end(args);
> +}
> diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h
> new file mode 100644
> index 000000000000..d475e816ee0b
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_log.h
> @@ -0,0 +1,20 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2026 Intel Corporation
> + */
> +
> +#ifndef _XE_LOG_H_
> +#define _XE_LOG_H_
> +
> +#include <linux/cper.h>
> +
> +#include "abi/xe_sigid_abi.h"
> +
> +struct pci_dev;
> +
> +__printf(8, 9)
> +void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
> + u32 component, u32 location, const void *data, size_t len,
> + const char *fmt, ...);
> +
> +#endif
[-- Attachment #2: Type: text/html, Size: 22355 bytes --]
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 02/32] drm/xe/log: Add structured SIGID error logging infrastructure
2026-08-12 19:14 ` [PATCH v4 02/32] drm/xe/log: Add structured SIGID error logging infrastructure Michal Wajdeczko
2026-08-13 13:33 ` Mallesh, Koujalagi
@ 2026-08-13 13:42 ` Nilawar, Badal
1 sibling, 0 replies; 73+ messages in thread
From: Nilawar, Badal @ 2026-08-13 13:42 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe
Cc: Mallesh Koujalagi, Rodrigo Vivi, Riana Tauro, Stuart Summers,
Yoni Levitt, Aravind Iddamsetty, Raag Jadav
Hi Michal,
Couple of comments, on rate-limiting and XE_SIGID_WEDGED, from v3
https://patchwork.freedesktop.org/patch/743308/?series=171022&rev=3#comment_1373861
are not answered/addressed.
On 13-08-2026 00:44, Michal Wajdeczko wrote:
> From: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>
> Today the driver reports faults with ad-hoc drm_err()/xe_gt_err()
> strings that have no stable shape. That is readable for a human, but it
> gives fleet tooling nothing durable to match on: the wording changes
> between releases, lines can be rate-limited or dropped under an error
> storm, and there is no consistent way to ask "which recognised fault
> just happened?".
>
> Introduce a signature identifier (SIGID): a small, stable integer that
> names one recognised Xe fault site and serves as the primary handle for
> triage. A SIGID maps, through published end-user documentation, to a
> description and a recommended action; the driver only has to emit the
> right SIGID next to the usual human-readable text.
>
> Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> Assisted-by: Copilot:Opus-4.8
> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Co-developed-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Riana Tauro <riana.tauro@intel.com>
> Cc: Stuart Summers <stuart.summers@intel.com>
> ---
> Cc: Yoni Levitt <yoni.levitt@intel.com>
> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
> Cc: Raag Jadav <raag.jadav@intel.com>
> ---
> v2: CORRECTED is still an error (Michal)
> prepare to decorate dmesg with comp/loc (Michal)
> v3: update SIGID DOC section (Riana/Aravind)
> warn about unknown severity (Mallesh)
> ---
> Documentation/gpu/xe/index.rst | 1 +
> Documentation/gpu/xe/xe_sigid.rst | 14 +++
> drivers/gpu/drm/xe/Makefile | 1 +
> drivers/gpu/drm/xe/abi/xe_sigid_abi.h | 159 ++++++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_log.c | 138 ++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_log.h | 20 ++++
> 6 files changed, 333 insertions(+)
> create mode 100644 Documentation/gpu/xe/xe_sigid.rst
> create mode 100644 drivers/gpu/drm/xe/abi/xe_sigid_abi.h
> create mode 100644 drivers/gpu/drm/xe/xe_log.c
> create mode 100644 drivers/gpu/drm/xe/xe_log.h
>
> diff --git a/Documentation/gpu/xe/index.rst b/Documentation/gpu/xe/index.rst
> index 665c0e93601c..0247a255f7e6 100644
> --- a/Documentation/gpu/xe/index.rst
> +++ b/Documentation/gpu/xe/index.rst
> @@ -35,3 +35,4 @@ The display, or :ref:`drm-kms`, support for drm/xe is provided by
> xe-drm-usage-stats.rst
> xe_configfs
> xe_gt_stats
> + xe_sigid
> diff --git a/Documentation/gpu/xe/xe_sigid.rst b/Documentation/gpu/xe/xe_sigid.rst
> new file mode 100644
> index 000000000000..45d84a62f185
> --- /dev/null
> +++ b/Documentation/gpu/xe/xe_sigid.rst
> @@ -0,0 +1,14 @@
> +.. SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +
> +========
> +Xe SIGID
> +========
> +
> +.. kernel-doc:: drivers/gpu/drm/xe/abi/xe_sigid_abi.h
> + :doc: Xe Error Signatures (SIGID)
> +
> +Signature Identifiers
> +=====================
> +
> +.. kernel-doc:: drivers/gpu/drm/xe/abi/xe_sigid_abi.h
> + :internal:
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> index 44ed055439d4..92134709d998 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -87,6 +87,7 @@ xe-y += xe_bb.o \
> xe_hw_fence.o \
> xe_irq.o \
> xe_late_bind_fw.o \
> + xe_log.o \
> xe_lrc.o \
> xe_mem_pool.o \
> xe_migrate.o \
> diff --git a/drivers/gpu/drm/xe/abi/xe_sigid_abi.h b/drivers/gpu/drm/xe/abi/xe_sigid_abi.h
> new file mode 100644
> index 000000000000..93967183ae51
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/abi/xe_sigid_abi.h
> @@ -0,0 +1,159 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2026 Intel Corporation
> + */
> +
> +#ifndef _ABI_XE_SIGID_ABI_H_
> +#define _ABI_XE_SIGID_ABI_H_
> +
> +/**
> + * DOC: Xe Error Signatures (SIGID)
> + *
> + * What SIGID stands for
> + * ---------------------
> + *
> + * SIGID is short for *Signature Identifier*. It is a small, stable integer
> + * that names one of *recognised fault site* -- nothing more. It is the
> + * primary handle used for triage and maps directly to specific report site.
> + *
> + * Numbering
> + * ---------
> + *
> + * SIGIDs are a single flat list numbered sequentially within the assigned range,
> + * in the order the fault sites were introduced. Values are stable: once assigned
> + * they are only ever appended, never renumbered or reused. A retired fault site
> + * SIGID value is deprecated in place, never re-purposed.
> + *
> + * Why this exists
> + * ---------------
> + *
> + * Today the driver reports faults with ad-hoc ``xe_err()`` / ``xe_gt_err()``
> + * strings that have no stable shape. That is fine for a human reading dmesg,
> + * but it gives fleet tooling nothing durable to match on: the wording changes
> + * between releases, lines can be rate-limited or dropped under an error storm,
> + * and there is no consistent way to ask "which recognised fault just happened?"
> + *
> + * A SIGID answers exactly that one question, identically across driver and
> + * firmware versions, and (eventually) across other Intel devices in a node.
> + *
> + * What a SIGID is not
> + * -------------------
> + *
> + * SIGID deliberately does not encode the detailed reason or the outcome. Those
> + * are carried alongside it::
> + *
> + * SIGID -> which recognised fault site is being reported
> + * severity -> how serious this instance is
> + * errno -> the failing operation's error, if available, shown with %pe
> + * message -> free-form human-readable context
> + *
> + * Severity is independent of the SIGID. The same SIGID can be reported at
> + * different severities depending on the instance and the recovery taken.
> + *
> + * When to use SIGID logging
> + * -------------------------
> + *
> + * The xe_log_*() helpers are for these recognised fault sites only --
> + * important, operator-relevant faults and events. The driver's only job is to
> + * emit the right SIGID next to the usual human-readable text.
> +
> + * They are not a replacement for ``xe_info()`` / ``xe_dbg()`` / tracing, nor
> + * for one-off diagnostics; using them for ordinary logging would dilute the
> + * fault stream. Not every ``xe_err()`` needs to become a SIGID report -- only
> + * those that correspond to a published fault sites.
> + *
> + * SIGID log output (dmesg vs. the machine record)
> + * -----------------------------------------------
> + *
> + * The dmesg line stays close to a normal xe error message so it remains
> + * readable for admins; the only stable, machine-matchable token on it is
> + * ``SIGID=<n>`` (``dmesg | grep SIGID=``).
> + *
> + * The full dmesg line is not an ABI: the surrounding text may change freely,
> + * and lines may be dropped. The durable record for tooling is the CPER record
> + * carrying the same SIGID (generation is a planned follow-up).
> + *
> + * How to pick a SIGID (the uniqueness rule)
> + * -----------------------------------------
> + *
> + * Pick per *report site*, not per incident. Each site emits the single most
> + * specific recognised SIGID *for that site* -- so the question is never
> + * "classify this whole failure", it is "what does this site detect?", which has
> + * one answer. A single underlying failure therefore legitimately produces a
> + * *chain* of reports from different layers, each with its own SIGID -- e.g. a
> + * GuC communication failure is reported as %XE_SIGID_RUNTIME_FW by the firmware
> + * path, the failed recovery as %XE_SIGID_GT_TDR by the reset path, and an
> + * aborted bind as %XE_SIGID_PROBE by the probe path. That chain lets triage
> + * follow a fault from origin to final effect; it is not a duplicate.
> + *
> + * If a site does not match any defined SIGID, keep using the ordinary
> + * ``xe_err()`` / ``xe_gt_err()`` logging rather than forcing a SIGID: a wrong
> + * or over-broad classification is harder to retire than a missing one. When a
> + * new report site is genuinely worth triaging, add it to the list below.
> + *
> + * Usage of the existing SIGID reports must reevaluated according to this section
> + * after making significant changes to the site that emits this SIGID.
> + *
> + * Scope: software vs hardware emitted signatures
> + * ----------------------------------------------
> + *
> + * Some SIGID represents fault sites that the *driver itself* detects and
> + * reports from the software POV: probe abort, wedged, survivability, driver-
> + * detected firmware failures, engine TDR, memory faults and IO/bus faults.
> + * These are the only values the driver assigns on its own.
> + *
> + * Signatures that *originate* in firmware or hardware are a different thing:
> + * they are produced and identified by the firmware or the hardware itself
> + * (e.g. via their own records or error counters), and the driver merely logs
> + * them as they are given to us. They are deliberately enumerated separately.
> + *
> + * The two driver-detected firmware report sites below (%XE_SIGID_RUNTIME_FW,
> + * %XE_SIGID_DEVICE_FW) are software signatures: they mark that *the driver*
> + * observed a firmware problem, not a signature reported by the firmware.
> + */
> +
> +/*
> + * Top level Intel Error Signature Identifiers.
> + */
> +#define INTEL_SIGID_INVALID 0
> +#define INTEL_SIGID_BATCH 100
> +#define INTEL_SIGID_RANGE_START(n) ((n) * INTEL_SIGID_BATCH)
> +#define INTEL_SIGID_RANGE_END(n) (INTEL_SIGID_RANGE_START((n) + 1) - 1)
> +
> +/* SIGIDs 1xx are reserved for Xe GPU software and 2xx for Xe GPU hardware */
> +#define INTEL_SIGID_GPU_XE_SOFTWARE_START INTEL_SIGID_RANGE_START(1)
> +#define INTEL_SIGID_GPU_XE_SOFTWARE_END INTEL_SIGID_RANGE_END(1)
> +#define INTEL_SIGID_GPU_XE_HARDWARE_START INTEL_SIGID_RANGE_START(2)
> +#define INTEL_SIGID_GPU_XE_HARDWARE_END INTEL_SIGID_RANGE_END(2)
> +
> +/**
> + * enum xe_sigid - Stable Xe Error Signature Identifiers (SIGID).
> + * @XE_SIGID_SW: Software component failure.
> + * @XE_SIGID_PROBE: Device probe/bind was aborted.
> + * @XE_SIGID_WEDGED: Device was declared wedged and is no longer usable.
> + * @XE_SIGID_SURVIVABILITY: Device entered survivability mode.
> + * @XE_SIGID_RUNTIME_FW: Driver-detected runtime firmware failure, GuC/HuC/GSC.
> + * @XE_SIGID_DEVICE_FW: Driver-detected device firmware failure, PCODE/sysctrl.
> + * @XE_SIGID_GT_TDR: Engine hang / timeout detection and recovery (reset).
> + * @XE_SIGID_MEM_FAULT: VM bind, page fault or GTT fault.
> + * @XE_SIGID_IO_BUS: Runtime PCIe / IOMMU / MMIO access fault.
> + *
> + * Each SIGID represents the report sites the driver detects and reports.
> + * Values are numbered sequentially, are only ever appended, and are never
> + * renumbered or reused.
> + *
> + * Firmware- and hardware-originated signatures are not listed yet here.
> + */
> +enum xe_sigid {
> + XE_SIGID_SW = INTEL_SIGID_GPU_XE_SOFTWARE_START,
> + XE_SIGID_PROBE = INTEL_SIGID_GPU_XE_SOFTWARE_START + 1,
> + XE_SIGID_WEDGED = INTEL_SIGID_GPU_XE_SOFTWARE_START + 2,
> + XE_SIGID_SURVIVABILITY = INTEL_SIGID_GPU_XE_SOFTWARE_START + 3,
> + XE_SIGID_RUNTIME_FW = INTEL_SIGID_GPU_XE_SOFTWARE_START + 4,
> + XE_SIGID_DEVICE_FW = INTEL_SIGID_GPU_XE_SOFTWARE_START + 5,
> + XE_SIGID_GT_TDR = INTEL_SIGID_GPU_XE_SOFTWARE_START + 6,
> + XE_SIGID_MEM_FAULT = INTEL_SIGID_GPU_XE_SOFTWARE_START + 7,
> + XE_SIGID_IO_BUS = INTEL_SIGID_GPU_XE_SOFTWARE_START + 8,
> +};
> +
> +#endif
> diff --git a/drivers/gpu/drm/xe/xe_log.c b/drivers/gpu/drm/xe/xe_log.c
> new file mode 100644
> index 000000000000..ae4f6e33f5b8
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_log.c
> @@ -0,0 +1,138 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2026 Intel Corporation
> + */
> +
> +#include "xe_log.h"
> +#include "xe_printk.h"
> +
> +static void log_emit_cper(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
> + u32 component, u32 location, const void *data, size_t len,
> + struct va_format *vaf)
> +{
> + /* TODO */
> +}
> +
> +static bool is_hw_sigid(enum xe_sigid sigid)
> +{
> + return (int)sigid >= INTEL_SIGID_GPU_XE_HARDWARE_START;
> +}
> +
> +static bool is_sev_error(int cper_sev)
> +{
> + return cper_sev != CPER_SEV_INFORMATIONAL;
> +}
> +
> +static const char *log_hwe_prefix(int cper_sev, enum xe_sigid sigid)
> +{
> + return is_sev_error(cper_sev) && is_hw_sigid(sigid) ? HW_ERR : "";
> +}
> +
> +static const char *log_sev_prefix(int cper_sev)
> +{
> + switch (cper_sev) {
> + case CPER_SEV_FATAL:
> + return "FATAL ";
> + case CPER_SEV_RECOVERABLE:
> + return "";
> + case CPER_SEV_CORRECTED:
> + return "CORRECTED ";
> + case CPER_SEV_INFORMATIONAL:
> + return "";
> + default:
> + WARN(IS_ENABLED(CONFIG_DRM_XE_DEBUG), "LOG: unknown severity %d\n", cper_sev);
> + return "";
> + }
> +}
> +
> +#define __LOG_DRM_PRINTK_FMT(fmt, args...) "[drm] " fmt, ##args
> +#define __LOG_DRM_PRINTK_ERR_FMT(fmt, args...) __LOG_DRM_PRINTK_FMT("*ERROR* " fmt, args)
> +
> +static void log_dmesg_vprintk(struct pci_dev *pdev, int cper_sev, struct va_format *vaf)
> +{
> + if (cper_sev == CPER_SEV_INFORMATIONAL)
> + pci_info(pdev, __LOG_DRM_PRINTK_FMT("%pV", vaf));
> + else
> + pci_err(pdev, __LOG_DRM_PRINTK_ERR_FMT("%pV", vaf));
> +}
> +
> +static void log_dmesg_printf(struct pci_dev *pdev, int cper_sev, const char *fmt, ...)
> +{
> + struct va_format vaf;
> + va_list args;
> +
> + va_start(args, fmt);
> + vaf.fmt = fmt;
> + vaf.va = &args;
> +
> + log_dmesg_vprintk(pdev, cper_sev, &vaf);
> +
> + va_end(args);
> +}
> +
> +static void log_emit_dmesg(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
> + u32 component, u32 location, const void *data, size_t len,
> + struct va_format *vaf)
> +{
> + const char *hwe_prefix = log_hwe_prefix(cper_sev, sigid);
> + const char *sev_prefix = log_sev_prefix(cper_sev);
> +
> + /* TODO: add component/location details */
> +
> + if (IS_ERR(data))
> + log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s(%pe) %s%pV",
> + sigid, sev_prefix, data, hwe_prefix, vaf);
> + else if (data && len)
> + log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s(%*phN) %s%pV",
> + sigid, sev_prefix, (int)len, data, hwe_prefix, vaf);
> + else
> + log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s%s%pV",
> + sigid, sev_prefix, hwe_prefix, vaf);
> +}
> +
> +/**
> + * xe_log_emit() - Emit a structured SIGID log entry
> + * @pdev: the &pci_dev device
> + * @cper_sev: CPER severity (CPER_SEV_FATAL, CPER_SEV_RECOVERABLE, ...)
> + * @sigid: signature identifier, see &enum xe_sigid
> + * @component: component identifer
> + * @location: location details of the @component
> + * @data: pointer to the additional details, or ERR_PTR, or NULL if not applicable
> + * @len: length of the @data in bytes, or 0 if not applicable
> + * @fmt: printf-style format string
> + * @...: format arguments
> + *
> + * Emits a dmesg line that includes a single stable, machine-matchable token
> + * ``SIGID=<n>`` followed by the optional severity token (like ``FATAL``) and,
> + * when @data pointer is set, either the error printed with %pe or a packed hex
> + * dump of the @data binary blob. The dmesg line will also include printf-style
> + * text message.
> + *
> + * Note that the full dmesg line, with the free text message, is only a debugging
> + * aid, not an interface! Only the ``SIGID=<n>`` token is stable there.
> + * The durable machine record is the CPER carrying the same SIGID.
> + *
> + * Note: generation of the CPER record is a planned follow-up.
> + *
> + * Examples::
> + *
> + * <3> xe 0000:03:00.0: [drm] *ERROR* SIGID=104 FATAL (-EPROTO) Invalid GuC reply
> + * <3> xe 0000:03:00.0: [drm] *ERROR* SIGID=106 (-ETIMEDOUT) Engine 'rcs0' hung
> + * <6> xe 0000:03:00.0: [drm] SIGID=103 In survivability mode
> + */
> +void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
> + u32 component, u32 location, const void *data, size_t len,
> + const char *fmt, ...)
> +{
> + struct va_format vaf;
> + va_list args;
> +
> + va_start(args, fmt);
> + vaf.fmt = fmt;
> + vaf.va = &args;
> +
> + log_emit_dmesg(pdev, cper_sev, sigid, component, location, data, len, &vaf);
> + log_emit_cper(pdev, cper_sev, sigid, component, location, data, len, &vaf);
> +
From kunit example I got this output for hardware errors.
drm-kunit-mock-device demo_dmesg.drm-kunit-mock-device: [drm] *ERROR*
SIGID=204 (0102030405060708090a0b0c) [Hardware Error]: testing HARDWARE
signature
drm-kunit-mock-device demo_dmesg.drm-kunit-mock-device: [drm] *ERROR*
SIGID=202 CORRECTED (0102030405060708090a0b0c) [Hardware Error]: Tile1:
testing HARDWARE signature
SIGIDs 202 and 204 correspond to the XE_RAS_COMP_DEVICE_MEMORY and
XE_RAS_COMP_FABRIC components returned by firmware via xe_ras_error_class.
If we want the component name to be included in the error message, what
should be passed to the logging helper? The current KUnit test uses
XE_LOG_COMPONENT_NONE, so no component information is being emitted.
Thanks,
Badal
> + va_end(args);
> +}
> diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h
> new file mode 100644
> index 000000000000..d475e816ee0b
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_log.h
> @@ -0,0 +1,20 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2026 Intel Corporation
> + */
> +
> +#ifndef _XE_LOG_H_
> +#define _XE_LOG_H_
> +
> +#include <linux/cper.h>
> +
> +#include "abi/xe_sigid_abi.h"
> +
> +struct pci_dev;
> +
> +__printf(8, 9)
> +void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
> + u32 component, u32 location, const void *data, size_t len,
> + const char *fmt, ...);
> +
> +#endif
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 02/32] drm/xe/log: Add structured SIGID error logging infrastructure
2026-08-13 13:33 ` Mallesh, Koujalagi
@ 2026-08-13 13:57 ` Michal Wajdeczko
0 siblings, 0 replies; 73+ messages in thread
From: Michal Wajdeczko @ 2026-08-13 13:57 UTC (permalink / raw)
To: Mallesh, Koujalagi, intel-xe
Cc: Rodrigo Vivi, Riana Tauro, Stuart Summers, Yoni Levitt,
Aravind Iddamsetty, Raag Jadav
On 8/13/2026 3:33 PM, Mallesh, Koujalagi wrote:
>
> On 13-08-2026 12:44 am, Michal Wajdeczko wrote:
>> From: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>>
>> Today the driver reports faults with ad-hoc drm_err()/xe_gt_err()
>> strings that have no stable shape. That is readable for a human, but it
>> gives fleet tooling nothing durable to match on: the wording changes
>> between releases, lines can be rate-limited or dropped under an error
>> storm, and there is no consistent way to ask "which recognised fault
>> just happened?".
>>
>> Introduce a signature identifier (SIGID): a small, stable integer that
>> names one recognised Xe fault site and serves as the primary handle for
>> triage. A SIGID maps, through published end-user documentation, to a
>> description and a recommended action; the driver only has to emit the
>> right SIGID next to the usual human-readable text.
>>
>> Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>> Assisted-by: Copilot:Opus-4.8
>> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Co-developed-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>> Cc: Riana Tauro <riana.tauro@intel.com>
>> Cc: Stuart Summers <stuart.summers@intel.com>
>> ---
>> Cc: Yoni Levitt <yoni.levitt@intel.com>
>> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
>> Cc: Raag Jadav <raag.jadav@intel.com>
>> ---
>> v2: CORRECTED is still an error (Michal)
>> prepare to decorate dmesg with comp/loc (Michal)
>> v3: update SIGID DOC section (Riana/Aravind)
>> warn about unknown severity (Mallesh)
>> ---
>> Documentation/gpu/xe/index.rst | 1 +
>> Documentation/gpu/xe/xe_sigid.rst | 14 +++
>> drivers/gpu/drm/xe/Makefile | 1 +
>> drivers/gpu/drm/xe/abi/xe_sigid_abi.h | 159 ++++++++++++++++++++++++++
>> drivers/gpu/drm/xe/xe_log.c | 138 ++++++++++++++++++++++
>> drivers/gpu/drm/xe/xe_log.h | 20 ++++
>> 6 files changed, 333 insertions(+)
>> create mode 100644 Documentation/gpu/xe/xe_sigid.rst
>> create mode 100644 drivers/gpu/drm/xe/abi/xe_sigid_abi.h
>> create mode 100644 drivers/gpu/drm/xe/xe_log.c
>> create mode 100644 drivers/gpu/drm/xe/xe_log.h
>>
>> diff --git a/Documentation/gpu/xe/index.rst b/Documentation/gpu/xe/index.rst
>> index 665c0e93601c..0247a255f7e6 100644
>> --- a/Documentation/gpu/xe/index.rst
>> +++ b/Documentation/gpu/xe/index.rst
>> @@ -35,3 +35,4 @@ The display, or :ref:`drm-kms`, support for drm/xe is provided by
>> xe-drm-usage-stats.rst
>> xe_configfs
>> xe_gt_stats
>> + xe_sigid
>> diff --git a/Documentation/gpu/xe/xe_sigid.rst b/Documentation/gpu/xe/xe_sigid.rst
>> new file mode 100644
>> index 000000000000..45d84a62f185
>> --- /dev/null
>> +++ b/Documentation/gpu/xe/xe_sigid.rst
>> @@ -0,0 +1,14 @@
>> +.. SPDX-License-Identifier: (GPL-2.0+ OR MIT)
>> +
>> +========
>> +Xe SIGID
>> +========
>> +
>> +.. kernel-doc:: drivers/gpu/drm/xe/abi/xe_sigid_abi.h
>> + :doc: Xe Error Signatures (SIGID)
>> +
>> +Signature Identifiers
>> +=====================
>> +
>> +.. kernel-doc:: drivers/gpu/drm/xe/abi/xe_sigid_abi.h
>> + :internal:
>> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
>> index 44ed055439d4..92134709d998 100644
>> --- a/drivers/gpu/drm/xe/Makefile
>> +++ b/drivers/gpu/drm/xe/Makefile
>> @@ -87,6 +87,7 @@ xe-y += xe_bb.o \
>> xe_hw_fence.o \
>> xe_irq.o \
>> xe_late_bind_fw.o \
>> + xe_log.o \
>> xe_lrc.o \
>> xe_mem_pool.o \
>> xe_migrate.o \
>> diff --git a/drivers/gpu/drm/xe/abi/xe_sigid_abi.h b/drivers/gpu/drm/xe/abi/xe_sigid_abi.h
>> new file mode 100644
>> index 000000000000..93967183ae51
>> --- /dev/null
>> +++ b/drivers/gpu/drm/xe/abi/xe_sigid_abi.h
>> @@ -0,0 +1,159 @@
>> +/* SPDX-License-Identifier: MIT */
>> +/*
>> + * Copyright © 2026 Intel Corporation
>> + */
>> +
>> +#ifndef _ABI_XE_SIGID_ABI_H_
>> +#define _ABI_XE_SIGID_ABI_H_
>> +
>> +/**
>> + * DOC: Xe Error Signatures (SIGID)
>> + *
>> + * What SIGID stands for
>> + * ---------------------
>> + *
>> + * SIGID is short for *Signature Identifier*. It is a small, stable integer
>> + * that names one of *recognised fault site* -- nothing more. It is the
>> + * primary handle used for triage and maps directly to specific report site.
>> + *
>> + * Numbering
>> + * ---------
>> + *
>> + * SIGIDs are a single flat list numbered sequentially within the assigned range,
>> + * in the order the fault sites were introduced. Values are stable: once assigned
>> + * they are only ever appended, never renumbered or reused. A retired fault site
>> + * SIGID value is deprecated in place, never re-purposed.
>> + *
>> + * Why this exists
>> + * ---------------
>> + *
>> + * Today the driver reports faults with ad-hoc ``xe_err()`` / ``xe_gt_err()``
>> + * strings that have no stable shape. That is fine for a human reading dmesg,
>> + * but it gives fleet tooling nothing durable to match on: the wording changes
>> + * between releases, lines can be rate-limited or dropped under an error storm,
>> + * and there is no consistent way to ask "which recognised fault just happened?"
>> + *
>> + * A SIGID answers exactly that one question, identically across driver and
>> + * firmware versions, and (eventually) across other Intel devices in a node.
>> + *
>> + * What a SIGID is not
>> + * -------------------
>> + *
>> + * SIGID deliberately does not encode the detailed reason or the outcome. Those
>> + * are carried alongside it::
>> + *
>> + * SIGID -> which recognised fault site is being reported
>> + * severity -> how serious this instance is
>> + * errno -> the failing operation's error, if available, shown with %pe
>> + * message -> free-form human-readable context
>> + *
>> + * Severity is independent of the SIGID. The same SIGID can be reported at
>> + * different severities depending on the instance and the recovery taken.
>> + *
>> + * When to use SIGID logging
>> + * -------------------------
>> + *
>> + * The xe_log_*() helpers are for these recognised fault sites only --
>> + * important, operator-relevant faults and events. The driver's only job is to
>> + * emit the right SIGID next to the usual human-readable text.
>> +
>> + * They are not a replacement for ``xe_info()`` / ``xe_dbg()`` / tracing, nor
>> + * for one-off diagnostics; using them for ordinary logging would dilute the
>> + * fault stream. Not every ``xe_err()`` needs to become a SIGID report -- only
>> + * those that correspond to a published fault sites.
>> + *
>> + * SIGID log output (dmesg vs. the machine record)
>> + * -----------------------------------------------
>> + *
>> + * The dmesg line stays close to a normal xe error message so it remains
>> + * readable for admins; the only stable, machine-matchable token on it is
>> + * ``SIGID=<n>`` (``dmesg | grep SIGID=``).
>> + *
>> + * The full dmesg line is not an ABI: the surrounding text may change freely,
>> + * and lines may be dropped. The durable record for tooling is the CPER record
>> + * carrying the same SIGID (generation is a planned follow-up).
>> + *
>> + * How to pick a SIGID (the uniqueness rule)
>> + * -----------------------------------------
>> + *
>> + * Pick per *report site*, not per incident. Each site emits the single most
>> + * specific recognised SIGID *for that site* -- so the question is never
>> + * "classify this whole failure", it is "what does this site detect?", which has + * one answer. A single underlying failure therefore legitimately produces a + * *chain* of reports from different layers, each with its own SIGID -- e.g. a + * GuC communication failure is reported as %XE_SIGID_RUNTIME_FW by the firmware + * path, the failed recovery as %XE_SIGID_GT_TDR by the reset path, and an + * aborted bind as %XE_SIGID_PROBE by the probe path. That chain lets triage + * follow a fault from origin to final effect; it is not a duplicate. + * + * If a site does not match any defined SIGID, keep using the ordinary + * ``xe_err()`` / ``xe_gt_err()`` logging rather than forcing a SIGID: a wrong + * or over-broad classification is harder to retire than a missing one. When a + * new report site is genuinely worth triaging, add it to the list below. + * + * Usage of the existing SIGID reports must reevaluated according to this section + * after making significant changes to the site that emits this SIGID. + * + * Scope: software vs hardware
>> emitted signatures + * ---------------------------------------------- + * + * Some SIGID represents fault sites that the *driver itself* detects and + * reports from the software POV: probe abort, wedged, survivability, driver- + * detected firmware failures, engine TDR, memory faults and IO/bus faults. + * These are the only values the driver assigns on its own. + * + * Signatures that *originate* in firmware or hardware are a different thing: + * they are produced and identified by the firmware or the hardware itself + * (e.g. via their own records or error counters), and the driver merely logs + * them as they are given to us. They are deliberately enumerated separately. + * + * The two driver-detected firmware report sites below (%XE_SIGID_RUNTIME_FW, + * %XE_SIGID_DEVICE_FW) are software signatures: they mark that *the driver* + * observed a firmware problem, not a signature reported by the firmware. + */ + +/* + * Top level Intel Error Signature Identifiers. + */
>> +#define INTEL_SIGID_INVALID 0 +#define INTEL_SIGID_BATCH 100 +#define INTEL_SIGID_RANGE_START(n) ((n) * INTEL_SIGID_BATCH) +#define INTEL_SIGID_RANGE_END(n) (INTEL_SIGID_RANGE_START((n) + 1) - 1) + +/* SIGIDs 1xx are reserved for Xe GPU software and 2xx for Xe GPU hardware */ +#define INTEL_SIGID_GPU_XE_SOFTWARE_START INTEL_SIGID_RANGE_START(1) +#define INTEL_SIGID_GPU_XE_SOFTWARE_END INTEL_SIGID_RANGE_END(1) +#define INTEL_SIGID_GPU_XE_HARDWARE_START INTEL_SIGID_RANGE_START(2) +#define INTEL_SIGID_GPU_XE_HARDWARE_END INTEL_SIGID_RANGE_END(2) + +/** + * enum xe_sigid - Stable Xe Error Signature Identifiers (SIGID). + * @XE_SIGID_SW: Software component failure. + * @XE_SIGID_PROBE: Device probe/bind was aborted. + * @XE_SIGID_WEDGED: Device was declared wedged and is no longer usable. + * @XE_SIGID_SURVIVABILITY: Device entered survivability mode. + * @XE_SIGID_RUNTIME_FW: Driver-detected runtime firmware failure, GuC/HuC/GSC. + * @XE_SIGID_DEVICE_FW: Driver-detected device
>> firmware failure, PCODE/sysctrl. + * @XE_SIGID_GT_TDR: Engine hang / timeout detection and recovery (reset). + * @XE_SIGID_MEM_FAULT: VM bind, page fault or GTT fault. + * @XE_SIGID_IO_BUS: Runtime PCIe / IOMMU / MMIO access fault. + * + * Each SIGID represents the report sites the driver detects and reports. + * Values are numbered sequentially, are only ever appended, and are never + * renumbered or reused. + * + * Firmware- and hardware-originated signatures are not listed yet here. + */ +enum xe_sigid { + XE_SIGID_SW = INTEL_SIGID_GPU_XE_SOFTWARE_START, + XE_SIGID_PROBE = INTEL_SIGID_GPU_XE_SOFTWARE_START + 1, + XE_SIGID_WEDGED = INTEL_SIGID_GPU_XE_SOFTWARE_START + 2, + XE_SIGID_SURVIVABILITY = INTEL_SIGID_GPU_XE_SOFTWARE_START + 3, + XE_SIGID_RUNTIME_FW = INTEL_SIGID_GPU_XE_SOFTWARE_START + 4, + XE_SIGID_DEVICE_FW = INTEL_SIGID_GPU_XE_SOFTWARE_START + 5, + XE_SIGID_GT_TDR = INTEL_SIGID_GPU_XE_SOFTWARE_START + 6, + XE_SIGID_MEM_FAULT = INTEL_SIGID_GPU_XE_SOFTWARE_START
>> + 7, + XE_SIGID_IO_BUS = INTEL_SIGID_GPU_XE_SOFTWARE_START + 8, +}; + +#endif diff --git a/drivers/gpu/drm/xe/xe_log.c b/drivers/gpu/drm/xe/xe_log.c new file mode 100644 index 000000000000..ae4f6e33f5b8 --- /dev/null +++ b/drivers/gpu/drm/xe/xe_log.c @@ -0,0 +1,138 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright © 2026 Intel Corporation + */ + +#include "xe_log.h"
>> +#include "xe_printk.h"
>> +
>> +static void log_emit_cper(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
>> + u32 component, u32 location, const void *data, size_t len,
>> + struct va_format *vaf)
>> +{
>> + /* TODO */
>> +}
>> +
>> +static bool is_hw_sigid(enum xe_sigid sigid)
>> +{
>> + return (int)sigid >= INTEL_SIGID_GPU_XE_HARDWARE_START;
>> +}
>> +
>> +static bool is_sev_error(int cper_sev)
>> +{
>> + return cper_sev != CPER_SEV_INFORMATIONAL;
>> +}
>> +
>> +static const char *log_hwe_prefix(int cper_sev, enum xe_sigid sigid)
>> +{
>> + return is_sev_error(cper_sev) && is_hw_sigid(sigid) ? HW_ERR : "";
>> +}
>> +
>> +static const char *log_sev_prefix(int cper_sev)
>> +{
>> + switch (cper_sev) {
>> + case CPER_SEV_FATAL:
>> + return "FATAL ";
>> + case CPER_SEV_RECOVERABLE:
>> + return "";
>> + case CPER_SEV_CORRECTED:
>> + return "CORRECTED ";
>> + case CPER_SEV_INFORMATIONAL:
>> + return "";
>> + default:
>> + WARN(IS_ENABLED(CONFIG_DRM_XE_DEBUG), "LOG: unknown severity %d\n", cper_sev);
>> + return "";
>> + }
>> +}
>> +
>> +#define __LOG_DRM_PRINTK_FMT(fmt, args...) "[drm] " fmt, ##args
>> +#define __LOG_DRM_PRINTK_ERR_FMT(fmt, args...) __LOG_DRM_PRINTK_FMT("*ERROR* " fmt, args)
>> +
>> +static void log_dmesg_vprintk(struct pci_dev *pdev, int cper_sev, struct va_format *vaf)
>> +{
>> + if (cper_sev == CPER_SEV_INFORMATIONAL)
>> + pci_info(pdev, __LOG_DRM_PRINTK_FMT("%pV", vaf));
>> + else
>> + pci_err(pdev, __LOG_DRM_PRINTK_ERR_FMT("%pV", vaf));
>> +}
>> +
>> +static void log_dmesg_printf(struct pci_dev *pdev, int cper_sev, const char *fmt, ...)
>> +{
>> + struct va_format vaf;
>> + va_list args;
>> +
>> + va_start(args, fmt);
>> + vaf.fmt = fmt;
>> + vaf.va = &args;
>> +
>> + log_dmesg_vprintk(pdev, cper_sev, &vaf);
>> +
>> + va_end(args);
>> +}
>> +
>> +static void log_emit_dmesg(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
>> + u32 component, u32 location, const void *data, size_t len,
>> + struct va_format *vaf)
>> +{
>> + const char *hwe_prefix = log_hwe_prefix(cper_sev, sigid);
>> + const char *sev_prefix = log_sev_prefix(cper_sev);
>> +
>> + /* TODO: add component/location details */
>> +
>> + if (IS_ERR(data))
>> + log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s(%pe) %s%pV",
>> + sigid, sev_prefix, data, hwe_prefix, vaf);
>> + else if (data && len)
>> + log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s(%*phN) %s%pV",
>> + sigid, sev_prefix, (int)len, data, hwe_prefix, vaf);
>> + else
>> + log_dmesg_printf(pdev, cper_sev, "SIGID=%u %s%s%pV",
>> + sigid, sev_prefix, hwe_prefix, vaf);
>> +}
>> +
>> +/**
>> + * xe_log_emit() - Emit a structured SIGID log entry
>> + * @pdev: the &pci_dev device
>> + * @cper_sev: CPER severity (CPER_SEV_FATAL, CPER_SEV_RECOVERABLE, ...)
>> + * @sigid: signature identifier, see &enum xe_sigid
>> + * @component: component identifer
> Typo "identifier"
>> + * @location: location details of the @component
>> + * @data: pointer to the additional details, or ERR_PTR, or NULL if not applicable
>> + * @len: length of the @data in bytes, or 0 if not applicable
>> + * @fmt: printf-style format string
>> + * @...: format arguments
>> + *
>> + * Emits a dmesg line that includes a single stable, machine-matchable token
>> + * ``SIGID=<n>`` followed by the optional severity token (like ``FATAL``) and,
>> + * when @data pointer is set, either the error printed with %pe or a packed hex
>> + * dump of the @data binary blob. The dmesg line will also include printf-style
>> + * text message.
>> + *
>> + * Note that the full dmesg line, with the free text message, is only a debugging
>> + * aid, not an interface! Only the ``SIGID=<n>`` token is stable there.
>> + * The durable machine record is the CPER carrying the same SIGID.
>> + *
>> + * Note: generation of the CPER record is a planned follow-up.
>> + *
>> + * Examples::
>> + *
>> + * <3> xe 0000:03:00.0: [drm] *ERROR* SIGID=104 FATAL (-EPROTO) Invalid GuC reply
>
> Missing TAG: in this case GuC/HuC/GSC:
>
> right?
not really
at the current patch there is only xe_log_emit() function available,
there is no other macros, no component definitions, so for the call
like this:
xe_log_emit(pdev, CPER_SEV_FATAL, XE_SIGID_RUNTIME_FW,
ERR_PTR(-EPROTO), 0, "Invalid GuC reply");
the output will be:
<3> xe 0000:03:00.0: [drm] *ERROR* SIGID=104 FATAL (-EPROTO) Invalid GuC reply
but later, after introducing more macros and component/location
definitions, one can use this instead:
xe_log_err_fatal(gt, GUC, -EPROTO, "Invalid GuC reply");
and then indeed the output will be decorated with location/component info:
<3> xe 0000:03:00.0: [drm] *ERROR* SIGID=104 FATAL (-EPROTO) Tile0: GT1: GUC: Invalid GuC reply
>
>> + * <3> xe 0000:03:00.0: [drm] *ERROR* SIGID=106 (-ETIMEDOUT) Engine 'rcs0' hung
>
> ditto
>
>> + * <6> xe 0000:03:00.0: [drm] SIGID=103 In survivability mode
>> + */
>> +void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
>> + u32 component, u32 location, const void *data, size_t len,
>> + const char *fmt, ...)
>> +{
>> + struct va_format vaf;
>> + va_list args;
>> +
>> + va_start(args, fmt);
>> + vaf.fmt = fmt;
>> + vaf.va = &args;
>> +
>> + log_emit_dmesg(pdev, cper_sev, sigid, component, location, data, len, &vaf);
>> + log_emit_cper(pdev, cper_sev, sigid, component, location, data, len, &vaf);
>> +
>> + va_end(args);
>> +}
>> diff --git a/drivers/gpu/drm/xe/xe_log.h b/drivers/gpu/drm/xe/xe_log.h
>> new file mode 100644
>> index 000000000000..d475e816ee0b
>> --- /dev/null
>> +++ b/drivers/gpu/drm/xe/xe_log.h
>> @@ -0,0 +1,20 @@
>> +/* SPDX-License-Identifier: MIT */
>> +/*
>> + * Copyright © 2026 Intel Corporation
>> + */
>> +
>> +#ifndef _XE_LOG_H_
>> +#define _XE_LOG_H_
>> +
>> +#include <linux/cper.h>
>> +
>> +#include "abi/xe_sigid_abi.h"
>> +
>> +struct pci_dev;
>> +
>> +__printf(8, 9)
>> +void xe_log_emit(struct pci_dev *pdev, int cper_sev, enum xe_sigid sigid,
>> + u32 component, u32 location, const void *data, size_t len,
>> + const char *fmt, ...);
>> +
>> +#endif
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 26/32] drm/xe/pcode: Report 'timeout, retrying' error using SIGID
2026-08-12 19:14 ` [PATCH v4 26/32] drm/xe/pcode: Report 'timeout, retrying' " Michal Wajdeczko
2026-08-12 19:51 ` sashiko-bot
@ 2026-08-13 16:46 ` Umesh Nerlige Ramappa
1 sibling, 0 replies; 73+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-08-13 16:46 UTC (permalink / raw)
To: Michal Wajdeczko
Cc: intel-xe, Rodrigo Vivi, Riana Tauro, Aravind Iddamsetty,
Mallesh Koujalagi, Badal Nilawar
On Wed, Aug 12, 2026 at 09:14:42PM +0200, Michal Wajdeczko wrote:
>Report 'timeout, retrying with preemption disabled' error using
>xe_log_err() helper.
>
>Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>Cc: Riana Tauro <riana.tauro@intel.com>
>Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
>Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>---
> drivers/gpu/drm/xe/xe_pcode.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_pcode.c b/drivers/gpu/drm/xe/xe_pcode.c
>index 014632e11338..14b13a11d1d6 100644
>--- a/drivers/gpu/drm/xe/xe_pcode.c
>+++ b/drivers/gpu/drm/xe/xe_pcode.c
>@@ -218,8 +218,7 @@ int xe_pcode_request(struct xe_tile *tile, u32 mbox, u32 request,
> * requests, and for any quirks of the PCODE firmware that delays
> * the request completion.
> */
>- drm_err(&tile_to_xe(tile)->drm,
>- "PCODE timeout, retrying with preemption disabled\n");
>+ xe_log_err(tile, PCODE, ret, "timeout, retrying with preemption disabled\n");
> preempt_disable();
> ret = pcode_try_request(tile, mbox, request, reply_mask, reply, &status,
> true, 50 * 1000, true);
+ Badal
Should we report the drm_err before retrying?
Should we add a new log to report a failure after retry?
Thanks,
Umesh
>-- 2.47.1
>
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 01/32] drm/xe: Introduce xe_any helpers
2026-08-12 19:14 ` [PATCH v4 01/32] drm/xe: Introduce xe_any helpers Michal Wajdeczko
2026-08-12 19:29 ` sashiko-bot
@ 2026-08-13 16:51 ` Rodrigo Vivi
1 sibling, 0 replies; 73+ messages in thread
From: Rodrigo Vivi @ 2026-08-13 16:51 UTC (permalink / raw)
To: Michal Wajdeczko
Cc: intel-xe, Thomas Hellström, Matthew Brost, Mallesh Koujalagi,
Jani Nikula
On Wed, Aug 12, 2026 at 09:14:17PM +0200, Michal Wajdeczko wrote:
> In upcoming patches we want to define macros that will work with
> either xe_device or xe_tile or xe_gt pointers. To make them work
> and to allow compiler optimizations, introduce set of helpers
> that will return either expected pointer type or NULL or make
> necessary conversions to/from the struct xe/device/pci_dev.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> #v2
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> #v2
> Cc: Jani Nikula <jani.nikula@intel.com>
> ---
> v2: add include (Sashiko) and const support (Mallesh)
> reuse existing to_xe() helpers (Michal)
> v3: fix another typo and fix to_pdev (Sashiko)
> use assoc macros/helpers (Jani)
> add support for drm_device (Michal)
> ---
> drivers/gpu/drm/xe/xe_any.h | 137 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 137 insertions(+)
> create mode 100644 drivers/gpu/drm/xe/xe_any.h
>
> diff --git a/drivers/gpu/drm/xe/xe_any.h b/drivers/gpu/drm/xe/xe_any.h
> new file mode 100644
> index 000000000000..5d97afa76915
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_any.h
> @@ -0,0 +1,137 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2026 Intel Corporation
> + */
> +
> +#ifndef _XE_ANY_H_
> +#define _XE_ANY_H_
> +
> +#include "xe_device.h"
> +
> +#define __xe_any_to_self_assoc(type, any) \
> + const type * : (any), \
> + type * : (any)
> +
> +/**
> + * xe_any_if_type() - Get the pointer only if it is @type pointer.
> + * @any: any pointer
> + * @type: data type to look for
> + *
> + * Return: the @type pointer or NULL.
> + */
> +#define xe_any_if_type(any, type) \
> + _Generic((any), \
> + __xe_any_to_self_assoc(type, (any)), \
> + default : NULL)
> +
> +/**
> + * xe_any_if_gt() - Get the pointer only if it is &xe_gt.
> + * @any: any pointer
> + *
> + * Return: the @xe_gt pointer or NULL.
> + */
> +#define xe_any_if_gt(any) xe_any_if_type((any), struct xe_gt)
> +
> +/**
> + * xe_any_if_tile() - Get the pointer only if it is &xe_tile.
> + * @any: any pointer
> + *
> + * Return: the @xe_tile pointer or NULL.
> + */
> +#define xe_any_if_tile(any) xe_any_if_type((any), struct xe_tile)
> +
> +/**
> + * xe_any_if_xe() - Get the pointer only if it is &xe_device.
> + * @any: any pointer
> + *
> + * Return: the @xe_device pointer or NULL.
> + */
> +#define xe_any_if_xe(any) xe_any_if_type((any), struct xe_device)
> +
> +/**
> + * xe_any_if_pdev() - Get the pointer only if it is &pci_dev.
> + * @any: any pointer
> + *
> + * Return: the @pci_dev pointer or NULL.
> + */
> +#define xe_any_if_pdev(any) xe_any_if_type((any), struct pci_dev)
> +
> +#define __xe_any_to_other_assoc(const, from, other, p) \
> + const struct from * : __##from##_to_##other((const struct from *)(p))
> +
> +#define __xe_tile_to_xe_device(p) tile_to_xe(p)
> +#define __xe_gt_to_xe_device(p) gt_to_xe(p)
> +#define __pci_dev_to_xe_device(p) pdev_to_xe_device(p)
> +#define __device_to_xe_device(p) kdev_to_xe_device(p)
> +#define __drm_device_to_xe_device(p) to_xe_device(p)
> +#define __pci_dev_to_device(p) (&(p)->dev)
> +
> +/**
> + * xe_any_to_xe() - Obtain the &xe_device pointer.
> + * @any: the &pci_dev or the &xe_device or &xe_tile or &xe_gt pointer
> + *
> + * Return: the @xe_device pointer or backpointer.
> + */
> +#define xe_any_to_xe(any) \
> + _Generic((any), \
> + __xe_any_to_self_assoc(struct xe_device, (any)), \
> + __xe_any_to_other_assoc(/* */, xe_tile, xe_device, (any)), \
> + __xe_any_to_other_assoc(const, xe_tile, xe_device, (any)), \
> + __xe_any_to_other_assoc(/* */, xe_gt, xe_device, (any)), \
> + __xe_any_to_other_assoc(const, xe_gt, xe_device, (any)), \
> + __xe_any_to_other_assoc(, drm_device, xe_device, (any)), \
> + __xe_any_to_other_assoc(, pci_dev, xe_device, (any)), \
> + __xe_any_to_other_assoc(, device, xe_device, (any)))
> +
> +/**
> + * xe_any_to_drm() - Obtain the &drm_device pointer.
> + * @any: the &pci_dev or the &xe_device or &xe_tile or &xe_gt pointer
> + *
> + * Return: the @drm_device pointer or backpointer.
> + */
> +#define xe_any_to_drm(any) \
> + _Generic((any), \
> + __xe_any_to_self_assoc(struct drm_device, (any)), \
> + default : &xe_any_to_xe(any)->drm)
> +
> +/**
> + * xe_any_to_dev() - Obtain the &device pointer.
> + * @any: the &pci_dev or the &xe_device or &xe_tile or &xe_gt pointer
> + *
> + * Return: the @device pointer or backpointer.
> + */
> +#define xe_any_to_dev(any) \
> + _Generic((any), \
> + __xe_any_to_self_assoc(struct device, (any)), \
> + __xe_any_to_other_assoc(, pci_dev, device, (any)), \
> + default : xe_any_to_drm(any)->dev)
> +
> +/**
> + * xe_any_to_pdev() - Obtain the &pci_dev pointer.
> + * @any: the &pci_dev or the &xe_device or &xe_tile or &xe_gt pointer
> + *
> + * Return: the @pci_dev pointer or backpointer.
> + */
> +#define xe_any_to_pdev(any) \
> + _Generic((any), \
> + __xe_any_to_self_assoc(struct pci_dev, (any)), \
> + default : to_pci_dev(xe_any_to_dev(any)))
> +
> +#define __xe_tile_to_id(p) ((p)->id)
> +#define __xe_gt_to_id(p) ((p)->info.id)
> +
> +/**
> + * xe_any_id() - Get the identifier of the underlying object.
> + * @any: the &pci_dev or the &xe_device or &xe_tile or &xe_gt pointer
> + *
> + * Return: the identifier of the object, or 0 if not applicable/available.
> + */
> +#define xe_any_id(any) \
> + _Generic((any), \
> + __xe_any_to_other_assoc(/* */, xe_tile, id, (any)), \
> + __xe_any_to_other_assoc(const, xe_tile, id, (any)), \
> + __xe_any_to_other_assoc(/* */, xe_gt, id, (any)), \
> + __xe_any_to_other_assoc(const, xe_gt, id, (any)), \
> + default : 0)
> +
> +#endif
> --
> 2.47.1
>
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 03/32] drm/xe/log: Introduce structured component/location identifiers
2026-08-12 19:14 ` [PATCH v4 03/32] drm/xe/log: Introduce structured component/location identifiers Michal Wajdeczko
@ 2026-08-13 17:20 ` Rodrigo Vivi
0 siblings, 0 replies; 73+ messages in thread
From: Rodrigo Vivi @ 2026-08-13 17:20 UTC (permalink / raw)
To: Michal Wajdeczko
Cc: intel-xe, Mallesh Koujalagi, Aravind Iddamsetty, Raag Jadav,
Riana Tauro
On Wed, Aug 12, 2026 at 09:14:19PM +0200, Michal Wajdeczko wrote:
> Introduce structured identifiers for each component type that
> could emit a SIGID log entry and for their locations. We plan
> to store those IDs in the CPER records for better filtering.
> Define also structured identifiers for the supported locations.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> ---
> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> Cc: Raag Jadav <raag.jadav@intel.com>
> Cc: Riana Tauro <riana.tauro@intel.com>
> ---
> v2: fix typo, define reserved ids (Michal)
> v3: fix kernel-doc to match code (Sashiko)
> v4: update comment (Michal)
> ---
> drivers/gpu/drm/xe/abi/xe_log_abi.h | 187 ++++++++++++++++++++++++++++
> 1 file changed, 187 insertions(+)
> create mode 100644 drivers/gpu/drm/xe/abi/xe_log_abi.h
>
> diff --git a/drivers/gpu/drm/xe/abi/xe_log_abi.h b/drivers/gpu/drm/xe/abi/xe_log_abi.h
> new file mode 100644
> index 000000000000..92547805326f
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/abi/xe_log_abi.h
> @@ -0,0 +1,187 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2026 Intel Corporation
> + */
> +
> +#ifndef _ABI_XE_LOG_ABI_H_
> +#define _ABI_XE_LOG_ABI_H_
> +
> +#include <linux/bits.h>
> +#include <linux/bitfield.h>
> +
> +#include "abi/xe_sigid_abi.h"
> +
> +/**
> + * enum xe_log_component_bits - bits for components structure definitions
> + *
> + * Component identifiers are structured based on::
> + *
> + * COMPONENT = CLASS(8b).TYPE(8b)
> + *
> + * and the structure looks like this::
> + *
> + * ├── SYSTEM(0)
> + * │ └── ...
> + * ├── DRIVER(1)
> + * │ └── ...
> + * ├── FEATURE(2)
> + * │ └── ...
> + * ├── FIRMWARE(4)
> + * │ └── ...
> + * └── HARDWARE(8)
> + * └── ...
> + *
> + * Examples::
> + *
> + * COMPONENT(0.type) = SYSTEM.type = system component
> + * COMPONENT(1.type) = DRIVER.type = driver core component
> + * COMPONENT(3.type) = DRIVER_FEATURE.type = driver feature
> + * COMPONENT(5.type) = DRIVER_FIRMWARE.type = firmware driver component
> + * COMPONENT(9.type) = DRIVER_HARDWARE.type = hardware driver component
> + *
> + */
> +enum xe_log_component_bits {
> + /* private: */
> + XE_LOG_COMPONENT_CLASS_MASK = GENMASK_U16(7, 0),
> + XE_LOG_COMPONENT_TYPE_MASK = GENMASK_U16(15, 8),
> + /* private: component classes */
> + XE_LOG_COMPONENT_CLASS_SYSTEM = 0u,
> + XE_LOG_COMPONENT_CLASS_DRIVER = 1u,
> + XE_LOG_COMPONENT_CLASS_FEATURE = 2u,
> + XE_LOG_COMPONENT_CLASS_FIRMWARE = 4u,
> + XE_LOG_COMPONENT_CLASS_HARDWARE = 8u,
> + XE_LOG_COMPONENT_CLASS_DRIVER_FEATURE = XE_LOG_COMPONENT_CLASS_DRIVER |
> + XE_LOG_COMPONENT_CLASS_FEATURE,
> + XE_LOG_COMPONENT_CLASS_DRIVER_FIRMWARE = XE_LOG_COMPONENT_CLASS_DRIVER |
> + XE_LOG_COMPONENT_CLASS_FIRMWARE,
> + XE_LOG_COMPONENT_CLASS_DRIVER_HARDWARE = XE_LOG_COMPONENT_CLASS_DRIVER |
> + XE_LOG_COMPONENT_CLASS_HARDWARE,
> + /* private: reserved identifiers */
> + XE_LOG_COMPONENT_NONE = 0u,
> +};
> +
> +#define MAKE_XE_LOG_COMPONENT(_CLASS, type) \
> + (FIELD_PREP_CONST(XE_LOG_COMPONENT_CLASS_MASK, \
> + XE_LOG_COMPONENT_CLASS_##_CLASS) | \
> + FIELD_PREP_CONST(XE_LOG_COMPONENT_TYPE_MASK, (type)))
> +
> +/**
> + * enum xe_log_location_bits - bits for location structure definitions
> + *
> + * Location identifiers are structured based on::
> + *
> + * LOCATION = TYPE(8b).ID(8b)
> + *
> + * and the structure looks like this::
> + *
> + * ├── DEVICE(0)
> + * │ └── MBZ(0)
> + * ├── TILE(1)
> + * │ ├── Tile0(0)
> + * │ ├── ...
> + * │ └── TileN(n)
> + * ├── GT(1)
> + * │ ├── GT0(0)
> + * │ ├── ...
> + * │ └── GTn(n)
> + * └── ...
> + *
> + * Examples::
> + *
> + * LOCATION(0.0) = NONE
> + * LOCATION(1.0) = DEVICE.0 = "Device"
> + * LOCATION(2.1) = TILE.1 = "Tile1"
> + * LOCATION(3.2) = GT.2 = "GT2"
> + *
> + */
> +enum xe_log_location_bits {
> + /* private: */
> + XE_LOG_LOCATION_TYPE_MASK = GENMASK_U16(7, 0),
> + XE_LOG_LOCATION_ID_MASK = GENMASK_U16(15, 8),
> + /* private: location types */
> + XE_LOG_LOCATION_TYPE_DEVICE = 1u,
> + XE_LOG_LOCATION_TYPE_TILE = 2u,
> + XE_LOG_LOCATION_TYPE_GT = 3u,
> + /* private: reserved identifiers */
> + XE_LOG_LOCATION_NONE = 0u,
> +};
> +
> +#define PREP_XE_LOG_LOCATION(type, id) \
> + (FIELD_PREP(XE_LOG_LOCATION_TYPE_MASK, (type)) | \
> + FIELD_PREP(XE_LOG_LOCATION_ID_MASK, (id)))
> +
> +#define MAKE_XE_LOG_LOCATION(_TYPE, id) \
> + PREP_XE_LOG_LOCATION(XE_LOG_LOCATION_TYPE_##_TYPE, (id))
> +
> +/**
> + * DEFINE_XE_LOG_COMPONENTS() - Define log components.
> + * @define: name of the inner macro to expand.
> + *
> + * Use this super macro to define custom code for the log components.
> + * The following parameters are available for each component::
> + *
> + * define(CLASS, ID, TAG, SIGID, NAME)
> + *
> + * where:
> + *
> + * @CLASS is the component class name (without the XE_LOG_COMPONENT_CLASS_ prefix)
> + * @ID is the unique component identifier within @CLASS
> + * @TAG is unique component tag (across all components)
> + * @SIGID is the default xe_sigid for the component (without the XE_SIGID_ prefix)
> + */
> +#define DEFINE_XE_LOG_COMPONENTS(define) \
> + /* */ \
> + define(SYSTEM, 1, PCI, SW, "Linux PCI Subsystem") \
As we discussed offline, based on the review of the last patch of this series
it becomes clear that this PCI bucket should be IO_BUS.
Let's change this and keep my rv-b...
> + define(SYSTEM, 2, DRM, SW, "DRM") \
> + /* */ \
> + define(DRIVER, 1, XE, SW, "Xe Driver") \
> + define(DRIVER, 2, PROBE, PROBE, "Driver Initialization") \
> + define(DRIVER, 3, WEDGED, WEDGED, "Device Malfunction") \
> + define(DRIVER, 4, RTP, SW, "Register Table Processing") \
> + define(DRIVER, 5, WA, SW, "Workarounds") \
> + define(DRIVER, 6, PAGEFAULT, MEM_FAULT, "Page Fault") \
> + /* */ \
> + define(DRIVER_HARDWARE, 1, REGS, IO_BUS, "Registers") \
> + define(DRIVER_HARDWARE, 2, GGTT, IO_BUS, "Global GTT") \
> + define(DRIVER_HARDWARE, 3, GT, GT_TDR, "Graphics Technology") \
> + define(DRIVER_HARDWARE, 4, LMTT, IO_BUS, "LMEM Translation Table") \
> + define(DRIVER_HARDWARE, 5, MEMIRQ, IO_BUS, "Memory Based IRQ") \
> + /* */ \
> + define(DRIVER_FEATURE, 1, PF, SW, "SR-IOV Physical Function") \
> + define(DRIVER_FEATURE, 2, VF, SW, "SR-IOV Virtual Function") \
> + define(DRIVER_FEATURE, 3, SURVIVABILITY, SURVIVABILITY, "Survivability") \
> + define(DRIVER_FEATURE, 4, RAS, SW, "Reliability, Accessibility, Serviceability") \
> + /* */ \
> + define(DRIVER_FIRMWARE, 1, GUC, RUNTIME_FW, "GuC") \
> + define(DRIVER_FIRMWARE, 2, HUC, RUNTIME_FW, "HuC") \
> + define(DRIVER_FIRMWARE, 3, GSC, RUNTIME_FW, "GSC") \
> + define(DRIVER_FIRMWARE, 16, PCODE, DEVICE_FW, "PCode") \
> + define(DRIVER_FIRMWARE, 17, SYSCTRL, DEVICE_FW, "System Controller") \
> + /* eod */
> +
> +/**
> + * enum xe_log_component_tags - TAGs of all supported components
> + */
> +enum xe_log_component_tags {
> + /* private: */
> +#define MAKE_XE_LOG_COMPONENT_ENUM(_CLASS, _ID, _TAG, _SIG, _NAME) \
> + XE_LOG_COMPONENT_##_TAG = MAKE_XE_LOG_COMPONENT(_CLASS, (_ID)), \
> + XE_LOG_COMPONENT_##_CLASS##_##_ID = XE_LOG_COMPONENT_##_TAG, \
> + /* eod */
> + DEFINE_XE_LOG_COMPONENTS(MAKE_XE_LOG_COMPONENT_ENUM)
> +#undef MAKE_XE_LOG_COMPONENT_ENUM
> +};
> +
> +/**
> + * enum xe_log_component_sigids - SIGIDs of all supported components
> + */
> +enum xe_log_component_sigids {
> + /* private: */
> +#define MAKE_XE_LOG_COMPONENT_SIGID(_CLASS, _ID, _TAG, _SIG, _NAME) \
> + XE_LOG_COMPONENT_##_TAG##_SIGID = XE_SIGID_##_SIG, \
> + /* eod */
> + DEFINE_XE_LOG_COMPONENTS(MAKE_XE_LOG_COMPONENT_SIGID)
> +#undef MAKE_XE_LOG_COMPONENT_SIGID
> +};
> +
> +#endif
> --
> 2.47.1
>
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 32/32] drm/xe/pci: Report 'cannot re-enable' error using SIGID
2026-08-12 19:14 ` [PATCH v4 32/32] drm/xe/pci: Report 'cannot re-enable' " Michal Wajdeczko
@ 2026-08-13 17:21 ` Rodrigo Vivi
0 siblings, 0 replies; 73+ messages in thread
From: Rodrigo Vivi @ 2026-08-13 17:21 UTC (permalink / raw)
To: Michal Wajdeczko
Cc: intel-xe, Riana Tauro, Aravind Iddamsetty, Mallesh Koujalagi
On Wed, Aug 12, 2026 at 09:14:48PM +0200, Michal Wajdeczko wrote:
> Report 'cannot re-enable PCI device' error using xe_log() helper.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Riana Tauro <riana.tauro@intel.com>
> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_pci_error.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_pci_error.c b/drivers/gpu/drm/xe/xe_pci_error.c
> index e41af2ac7f23..fb965f52be5e 100644
> --- a/drivers/gpu/drm/xe/xe_pci_error.c
> +++ b/drivers/gpu/drm/xe/xe_pci_error.c
> @@ -7,6 +7,7 @@
>
> #include "xe_device.h"
> #include "xe_gt.h"
> +#include "xe_log.h"
> #include "xe_pci.h"
> #include "xe_pm.h"
> #include "xe_printk.h"
> @@ -90,13 +91,15 @@ static pci_ers_result_t xe_pci_error_slot_reset(struct pci_dev *pdev)
> {
> const struct pci_device_id *ent = pci_match_id(pdev->driver->id_table, pdev);
> struct xe_device *xe = pdev_to_xe_device(pdev);
> + int err;
>
> xe_info(xe, "PCI error: slot reset\n");
>
> pci_restore_state(pdev);
>
> - if (pci_enable_device(pdev)) {
this looks IO_BUS more than SW... But that is the change for the patch 3.
This patch here is great.
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> - xe_err(xe, "Cannot re-enable PCI device after reset\n");
> + err = pci_enable_device(pdev);
> + if (err) {
> + xe_log_err_fatal(xe, PCI, err, "Cannot re-enable PCI device after reset\n");
> return PCI_ERS_RESULT_DISCONNECT;
> }
>
> --
> 2.47.1
>
^ permalink raw reply [flat|nested] 73+ messages in thread
* Re: [PATCH v4 31/32] drm/xe/gt: Report 'Queue full' pagefault error using SIGID
2026-08-12 19:14 ` [PATCH v4 31/32] drm/xe/gt: Report 'Queue full' " Michal Wajdeczko
@ 2026-08-13 17:25 ` Rodrigo Vivi
0 siblings, 0 replies; 73+ messages in thread
From: Rodrigo Vivi @ 2026-08-13 17:25 UTC (permalink / raw)
To: Michal Wajdeczko
Cc: intel-xe, Matthew Brost, Daniele Ceraolo Spurio,
Aravind Iddamsetty, Mallesh Koujalagi
On Wed, Aug 12, 2026 at 09:14:47PM +0200, Michal Wajdeczko wrote:
> Report 'Queue full' error using xe_log_err() helper.
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Matthew Brost <matthew.brost@intel.com>
> Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
> Cc: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_pagefault.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_pagefault.c b/drivers/gpu/drm/xe/xe_pagefault.c
> index eb600c466187..f0e173a251e4 100644
> --- a/drivers/gpu/drm/xe/xe_pagefault.c
> +++ b/drivers/gpu/drm/xe/xe_pagefault.c
> @@ -328,8 +328,10 @@ xe_pagefault_queue_add(struct xe_pagefault_queue *pf_queue,
>
> do {
> /* Not possible, warn on and drop page fault */
> - if (WARN_ON(xe_pagefault_queue_full(pf_queue)))
> + if (WARN_ON_ONCE(xe_pagefault_queue_full(pf_queue))) {
Please mention in the commit message that we are replacing the WARN_ON
per WARN_ON_ONCE to avoid the extra noise and also because once is
enough anyway.
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> + xe_log_err(xe, PAGEFAULT, -ENOSPC, "Queue full!\n");
> return NULL;
> + }
>
> lpf = (pf_queue->data + pf_queue->head);
> pf_queue->head = (pf_queue->head + xe_pagefault_entry_size()) %
> --
> 2.47.1
>
^ permalink raw reply [flat|nested] 73+ messages in thread
end of thread, other threads:[~2026-08-13 17:26 UTC | newest]
Thread overview: 73+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-12 19:14 [PATCH v4 00/32] drm/xe: Add structured SIGID error logging infrastructure Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 01/32] drm/xe: Introduce xe_any helpers Michal Wajdeczko
2026-08-12 19:29 ` sashiko-bot
2026-08-13 16:51 ` Rodrigo Vivi
2026-08-12 19:14 ` [PATCH v4 02/32] drm/xe/log: Add structured SIGID error logging infrastructure Michal Wajdeczko
2026-08-13 13:33 ` Mallesh, Koujalagi
2026-08-13 13:57 ` Michal Wajdeczko
2026-08-13 13:42 ` Nilawar, Badal
2026-08-12 19:14 ` [PATCH v4 03/32] drm/xe/log: Introduce structured component/location identifiers Michal Wajdeczko
2026-08-13 17:20 ` Rodrigo Vivi
2026-08-12 19:14 ` [PATCH v4 04/32] drm/xe/log: Add component/location decorations to dmesg Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 05/32] drm/xe/log: Add SIGID log helpers for severity Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 06/32] drm/xe/log: Add SIGID log helpers for location Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 07/32] drm/xe/log: Add SIGID log helpers for location & severity Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 08/32] drm/xe/log: Add SIGID log helpers for components Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 09/32] drm/xe/log: Add SIGID log helpers for component & severity Michal Wajdeczko
2026-08-13 4:38 ` Mallesh, Koujalagi
2026-08-12 19:14 ` [PATCH v4 10/32] drm/xe/log: Add SIGID log helpers for errno-only Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 11/32] drm/xe/log: Index all SIGID printk messages Michal Wajdeczko
2026-08-12 19:35 ` sashiko-bot
2026-08-13 12:31 ` Mallesh, Koujalagi
2026-08-13 12:54 ` Michal Wajdeczko
2026-08-13 13:29 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 12/32] drm/xe/log: Add hardware error signatures Michal Wajdeczko
2026-08-13 5:03 ` Mallesh, Koujalagi
2026-08-12 19:14 ` [PATCH v4 13/32] drm/xe/log: Extend components list with hardware items Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 14/32] drm/xe/ras: Check RAS and LOG component definitions Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 15/32] drm/xe/kunit: Setup driver data in the test device Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 16/32] drm/xe/tests: Add Kunit tests for xe_log Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 17/32] drm/xe/tests: Add kunit tests for xe_any Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 18/32] drm/xe: Report 'probe blocked' error using SIGID Michal Wajdeczko
2026-08-13 6:26 ` Mallesh, Koujalagi
2026-08-12 19:14 ` [PATCH v4 19/32] drm/xe: Report all probe errors " Michal Wajdeczko
2026-08-13 6:50 ` Mallesh, Koujalagi
2026-08-13 9:12 ` Michal Wajdeczko
2026-08-13 9:58 ` Mallesh, Koujalagi
2026-08-13 10:09 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 20/32] drm/xe/survivability: Report 'boot status' " Michal Wajdeczko
2026-08-13 8:38 ` Mallesh, Koujalagi
2026-08-13 9:28 ` Michal Wajdeczko
2026-08-13 10:07 ` Mallesh, Koujalagi
2026-08-13 10:18 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 21/32] drm/xe/survivability: Report 'sysfs failure' error " Michal Wajdeczko
2026-08-13 8:54 ` Mallesh, Koujalagi
2026-08-12 19:14 ` [PATCH v4 22/32] drm/xe/survivability: Report 'Boot Mode enabled' status " Michal Wajdeczko
2026-08-13 10:52 ` Mallesh, Koujalagi
2026-08-13 11:01 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 23/32] drm/xe/survivability: Report 'Runtime " Michal Wajdeczko
2026-08-13 11:40 ` Mallesh, Koujalagi
2026-08-13 12:46 ` Michal Wajdeczko
2026-08-13 13:16 ` Mallesh, Koujalagi
2026-08-12 19:14 ` [PATCH v4 24/32] drm/xe: Report 'device wedged' errors " Michal Wajdeczko
2026-08-12 22:28 ` Rodrigo Vivi
2026-08-13 11:56 ` Mallesh, Koujalagi
2026-08-12 19:14 ` [PATCH v4 25/32] drm/xe/pcode: Report 'Mailbox failed' error " Michal Wajdeczko
2026-08-13 12:10 ` Bhadane, Dnyaneshwar
2026-08-13 12:35 ` Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 26/32] drm/xe/pcode: Report 'timeout, retrying' " Michal Wajdeczko
2026-08-12 19:51 ` sashiko-bot
2026-08-13 16:46 ` Umesh Nerlige Ramappa
2026-08-12 19:14 ` [PATCH v4 27/32] drm/xe/pcode: Report 'initialization timedout' " Michal Wajdeczko
2026-08-12 19:49 ` sashiko-bot
2026-08-12 19:14 ` [PATCH v4 28/32] drm/xe/guc: Report 'GuC mmio' errors " Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 29/32] drm/xe/gt: Report 'reset failed' " Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 30/32] drm/xe/gt: Report 'Fault response' pagefault error " Michal Wajdeczko
2026-08-12 19:14 ` [PATCH v4 31/32] drm/xe/gt: Report 'Queue full' " Michal Wajdeczko
2026-08-13 17:25 ` Rodrigo Vivi
2026-08-12 19:14 ` [PATCH v4 32/32] drm/xe/pci: Report 'cannot re-enable' " Michal Wajdeczko
2026-08-13 17:21 ` Rodrigo Vivi
2026-08-12 19:22 ` ✗ CI.checkpatch: warning for drm/xe: Add structured SIGID error logging infrastructure (rev4) Patchwork
2026-08-12 19:24 ` ✓ CI.KUnit: success " Patchwork
2026-08-12 20:34 ` ✗ Xe.CI.BAT: failure " Patchwork
2026-08-13 2:47 ` ✗ Xe.CI.FULL: " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox