* [PATCH 0/4] drm/xe: Adopt xe_log SIGID API for structured error reporting
@ 2026-08-06 11:00 Mallesh Koujalagi
2026-08-06 11:00 ` [PATCH 1/4] drm/xe/log: DO NOT REVIEW Mallesh Koujalagi
` (7 more replies)
0 siblings, 8 replies; 15+ messages in thread
From: Mallesh Koujalagi @ 2026-08-06 11:00 UTC (permalink / raw)
To: intel-xe, rodrigo.vivi, matthew.brost
Cc: anshuman.gupta, badal.nilawar, vinay.belgaumkar, riana.tauro,
karthik.poosa, sk.anirban, raag.jadav, michal.wajdeczko,
aravind.iddamsetty, Mallesh Koujalagi
This series updates error logging in the Xe driver to use the new
xe_log SIGID API introduced in:
https://patchwork.freedesktop.org/series/171022/
The xe_log API provides stable and machine-readable error IDs (SIGIDs),
making it easier for monitoring and fleet tools to identify and track
known issues without relying on log message text matching.
This series converts existing drm_err()/xe_err() calls in the following
areas:
- Probe path
- PCODE
- System Controller (SYSCTRL)
Dnyaneshwar Bhadane (1):
drm/xe: Use xe_log SIGID API for probe-path error reporting
Mallesh Koujalagi (3):
drm/xe/log: DO NOT REVIEW
drm/xe/pcode: Improve pcode timeout logging
drm/xe/sysctrl: Add better sysctrl error reporting
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 | 198 +++++++++++++++++++++
drivers/gpu/drm/xe/abi/xe_sigid_abi.h | 195 +++++++++++++++++++++
drivers/gpu/drm/xe/xe_any.h | 142 +++++++++++++++
drivers/gpu/drm/xe/xe_device.c | 6 +-
drivers/gpu/drm/xe/xe_hwmon.c | 4 +-
drivers/gpu/drm/xe/xe_irq.c | 9 +-
drivers/gpu/drm/xe/xe_log.c | 221 ++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_log.h | 158 +++++++++++++++++
drivers/gpu/drm/xe/xe_mmio.c | 5 +-
drivers/gpu/drm/xe/xe_pat.c | 6 +-
drivers/gpu/drm/xe/xe_pci.c | 14 +-
drivers/gpu/drm/xe/xe_pcode.c | 9 +-
drivers/gpu/drm/xe/xe_ras.c | 11 ++
drivers/gpu/drm/xe/xe_sysctrl_event.c | 11 +-
drivers/gpu/drm/xe/xe_sysctrl_mailbox.c | 29 ++--
drivers/gpu/drm/xe/xe_vram.c | 5 +-
19 files changed, 1003 insertions(+), 36 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/xe_any.h
create mode 100644 drivers/gpu/drm/xe/xe_log.c
create mode 100644 drivers/gpu/drm/xe/xe_log.h
--
2.48.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 1/4] drm/xe/log: DO NOT REVIEW
2026-08-06 11:00 [PATCH 0/4] drm/xe: Adopt xe_log SIGID API for structured error reporting Mallesh Koujalagi
@ 2026-08-06 11:00 ` Mallesh Koujalagi
2026-08-06 11:00 ` [PATCH 2/4] drm/xe: Use xe_log SIGID API for probe-path error reporting Mallesh Koujalagi
` (6 subsequent siblings)
7 siblings, 0 replies; 15+ messages in thread
From: Mallesh Koujalagi @ 2026-08-06 11:00 UTC (permalink / raw)
To: intel-xe, rodrigo.vivi, matthew.brost
Cc: anshuman.gupta, badal.nilawar, vinay.belgaumkar, riana.tauro,
karthik.poosa, sk.anirban, raag.jadav, michal.wajdeczko,
aravind.iddamsetty, Mallesh Koujalagi
DO NOT REVIEW. COMPILATION ONLY
This patch is from https://patchwork.freedesktop.org/series/171022/
Added only for Compilation.
Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
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>
---
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 | 198 +++++++++++++++++++++++
drivers/gpu/drm/xe/abi/xe_sigid_abi.h | 195 +++++++++++++++++++++++
drivers/gpu/drm/xe/xe_any.h | 142 +++++++++++++++++
drivers/gpu/drm/xe/xe_log.c | 221 ++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_log.h | 158 ++++++++++++++++++
drivers/gpu/drm/xe/xe_ras.c | 11 ++
9 files changed, 941 insertions(+)
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/xe_any.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_log_abi.h b/drivers/gpu/drm/xe/abi/xe_log_abi.h
new file mode 100644
index 000000000000..b3373d4b29d5
--- /dev/null
+++ b/drivers/gpu/drm/xe/abi/xe_log_abi.h
@@ -0,0 +1,198 @@
+/* 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:
+ *
+ * @ID is the unique component identifier within CLASS.SUBCLASS.CATEGORY
+ * @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_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") \
+ /* */ \
+ 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") \
+
+#define DEFINE_XE_LOG_HARDWARE_COMPONENTS(define) \
+ define(HARDWARE, 1, DEVMEM, DEVICE_MEMORY, "Device Memory") \
+ define(HARDWARE, 2, HWCORE, CORE_COMPUTE, "Core Compute") \
+ /* HARDWARE, 3, RESERVED */ \
+ define(HARDWARE, 4, PCIE, PCIE, "PCIe Interface") \
+ define(HARDWARE, 5, FABRIC, FABRIC, "Fabric") \
+ define(HARDWARE, 6, SOC, SOC_INTERNAL, "SoC Internal") \
+ /* 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
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..69cce4b45635
--- /dev/null
+++ b/drivers/gpu/drm/xe/abi/xe_sigid_abi.h
@@ -0,0 +1,195 @@
+/* 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*. A SIGID is a small, stable integer
+ * that names one *recognised Xe fault situation* -- nothing more. It is the
+ * primary handle used for triage: a SIGID maps to a human description and a
+ * recommended first action. A coarse first-order action is documented in-tree
+ * per SIGID (see "First-order action" below) so the id is actionable on its
+ * own; published end-user documentation refines it with finer, cross-product
+ * detail. The driver's only job is to emit the right SIGID next to the usual
+ * human-readable text.
+ *
+ * Why this exists
+ * ---------------
+ *
+ * Today the driver reports faults with ad-hoc ``drm_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 (and is not)
+ * ----------------------------
+ *
+ * A SIGID names *which situation* is being reported. It deliberately does not
+ * encode the detailed reason or the outcome. Those are carried alongside it::
+ *
+ * SIGID -> which recognised situation is being reported
+ * severity -> how serious this instance is (see below -- not fixed per SIGID)
+ * errno -> the failing operation's error, shown with %pe
+ * message -> free-form human-readable context
+ *
+ * Severity is independent of the SIGID. The same situation can be reported at
+ * different severities depending on the instance and the recovery taken, so a
+ * SIGID is never tied to one severity; the reporting site chooses it by calling
+ * the matching xe_log_*() helper (see xe_log.h).
+ *
+ * How to pick a SIGID (the uniqueness rule)
+ * -----------------------------------------
+ *
+ * Pick per *report site*, not per incident. Each site emits the single most
+ * specific recognised situation *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 situation, 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 situation is genuinely worth triaging, add it to the list below.
+ *
+ * Scope: software-emitted signatures only
+ * ---------------------------------------
+ *
+ * This header enumerates only the situations that the *driver itself* detects
+ * and reports from software: probe abort, wedged, survivability, driver-
+ * detected firmware failures, engine TDR, memory faults and IO/bus faults.
+ * These are the only values the driver assigns.
+ *
+ * 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 *not* enumerated here --
+ * minting a driver-side id for a firmware/hardware-reported error would only
+ * duplicate an identifier the reporting layer already owns. The two
+ * driver-detected firmware situations 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.
+ *
+ * Numbering
+ * ---------
+ *
+ * SIGIDs are a single flat list numbered sequentially within the assigned range,
+ * in the order the situations were introduced. Values are stable: once assigned
+ * they are only ever appended, never renumbered or reused.
+ *
+ * A retired situation is deprecated in place, never re-purposed.
+ *
+ * First-order action (resolution buckets)
+ * ---------------------------------------
+ *
+ * So that a SIGID is actionable on its own, each one is tagged with a coarse
+ * *resolution bucket*: the first thing an operator should do on seeing it. The
+ * bucket is a stable, driver-owned hint; external documentation may refine it,
+ * but the in-tree value always stands on its own. Every new SIGID must pick a
+ * bucket, which forces the question "what should someone do about this?" to be
+ * answered up front. The buckets are::
+ *
+ * COLLECT -- capture logs and open a bug report
+ * RETRY -- transient or already recovered; watch for recurrence
+ * UPDATE -- a firmware update / flash is required
+ * RECOVER -- an explicit recovery step is needed (rebind, bus reset)
+ * IGNORE -- ignore if the SIGID severity is INFORMATIONAL
+ *
+ * The bucket is documentation only -- it is recorded per SIGID in the enum
+ * kernel-doc below and is not printed on the (deliberately lean) dmesg line.
+ *
+ * When to use SIGID logging
+ * -------------------------
+ *
+ * The xe_log_*() helpers are for these recognised fault situations only --
+ * important, operator-relevant faults and events. 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 situation.
+ *
+ * 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=``). dmesg 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).
+ */
+
+/*
+ * Top level Intel Error Signature Identifiers.
+ */
+#define INTEL_SIGID_INVALID 0
+#define INTEL_SIGID_GPU_START 100
+#define INTEL_SIGID_GPU_END 999
+
+#define INTEL_SIGID_GPU_XE_START 100
+#define INTEL_SIGID_GPU_XE_END 299
+
+#define INTEL_SIGID_GPU_XE_SOFTWARE_START 100
+#define INTEL_SIGID_GPU_XE_SOFTWARE_END 199
+#define INTEL_SIGID_GPU_XE_HARDWARE_START 200
+#define INTEL_SIGID_GPU_XE_HARDWARE_END 299
+
+/**
+ * enum xe_sigid - Stable Xe Error Signature Identifiers (SIGID).
+ * @XE_SIGID_SW: Software component failure. [COLLECT]
+ * @XE_SIGID_PROBE: Device probe/bind was aborted. [COLLECT]
+ * @XE_SIGID_WEDGED: Device was declared wedged and is no longer usable. [RECOVER]
+ * @XE_SIGID_SURVIVABILITY: Device entered survivability mode. [UPDATE]
+ * @XE_SIGID_RUNTIME_FW: Driver-detected runtime firmware failure, GuC/HuC/GSC. [RETRY]
+ * @XE_SIGID_DEVICE_FW: Driver-detected device firmware failure, PCODE/sysctrl. [RETRY]
+ * @XE_SIGID_GT_TDR: Engine hang / timeout detection and recovery (reset). [RETRY]
+ * @XE_SIGID_MEM_FAULT: VM bind, page fault or GTT fault. [COLLECT]
+ * @XE_SIGID_IO_BUS: Runtime PCIe / IOMMU / MMIO access fault. [RECOVER]
+ * @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.
+ *
+ * The situations the driver detects and reports in software. Values are
+ * numbered sequentially, are only ever appended, and are never renumbered or
+ * reused. The tag in brackets is the default resolution bucket (see the `Xe
+ * Error Signatures (SIGID)`_ section).
+ *
+ * Firmware- and hardware-originated signatures are numbered separately.
+ */
+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,
+
+ 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
diff --git a/drivers/gpu/drm/xe/xe_any.h b/drivers/gpu/drm/xe/xe_any.h
new file mode 100644
index 000000000000..c49f87ccdb47
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_any.h
@@ -0,0 +1,142 @@
+/* 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
diff --git a/drivers/gpu/drm/xe/xe_log.c b/drivers/gpu/drm/xe/xe_log.c
new file mode 100644
index 000000000000..32fbf83fd992
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_log.c
@@ -0,0 +1,221 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#include "abi/xe_log_abi.h"
+
+#include "xe_device.h"
+#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 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 /* _CLASS _ID _SIG _NAME */ #_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;
+}
+
+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 ";
+ default:
+ 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)
+{
+ 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);
+
+ if (IS_ERR(data))
+ 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%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%s%s%pV",
+ sigid, sev_prefix, hwe_prefix,
+ loc_prefix, comp_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 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
+ * <3> xe 0000:03:00.0: [drm] *ERROR* SIGID=106 (-ETIMEDOUT) Engine 'rcs0' hung
+ * <6> xe 0000:03:00.0: [drm] *ERROR* 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..7b90e39b97be
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_log.h
@@ -0,0 +1,158 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2026 Intel Corporation
+ */
+
+#ifndef _XE_LOG_H_
+#define _XE_LOG_H_
+
+#include <linux/cper.h>
+#include <linux/err.h>
+
+#include "abi/xe_log_abi.h"
+#include "abi/xe_sigid_abi.h"
+#include "xe_any.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, ...);
+
+#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)
+
+#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 identifier
+ * @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)
+
+#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)
+
+/**
+ * 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)
+
+/**
+ * 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((any), CPER_SEV_RECOVERABLE, 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((any), CPER_SEV_FATAL, 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((any), CPER_SEV_CORRECTED, 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((any), CPER_SEV_INFORMATIONAL, TAG, NULL, 0, fmt, ##args)
+
+#endif
diff --git a/drivers/gpu/drm/xe/xe_ras.c b/drivers/gpu/drm/xe/xe_ras.c
index 352f056fd9ef..65dd77250ff3 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_DEVMEM);
+ CHECK_COMPONENT(XE_RAS_COMP_CORE_COMPUTE, XE_LOG_COMPONENT_HWCORE);
+ 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);
+#undef CHECK_COMPONENT
+
/* RAS response status codes */
enum xe_ras_response_status {
XE_RAS_STATUS_SUCCESS = 0,
--
2.48.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 2/4] drm/xe: Use xe_log SIGID API for probe-path error reporting
2026-08-06 11:00 [PATCH 0/4] drm/xe: Adopt xe_log SIGID API for structured error reporting Mallesh Koujalagi
2026-08-06 11:00 ` [PATCH 1/4] drm/xe/log: DO NOT REVIEW Mallesh Koujalagi
@ 2026-08-06 11:00 ` Mallesh Koujalagi
2026-08-06 17:52 ` Michal Wajdeczko
2026-08-06 11:00 ` [PATCH 3/4] drm/xe/pcode: Improve pcode timeout logging Mallesh Koujalagi
` (5 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Mallesh Koujalagi @ 2026-08-06 11:00 UTC (permalink / raw)
To: intel-xe, rodrigo.vivi, matthew.brost
Cc: anshuman.gupta, badal.nilawar, vinay.belgaumkar, riana.tauro,
karthik.poosa, sk.anirban, raag.jadav, michal.wajdeczko,
aravind.iddamsetty, Dnyaneshwar Bhadane, Mallesh Koujalagi
From: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com>
Replace ad-hoc drm_err()/xe_err() calls in the probe path with
structured SIGID logging helpers. This gives fleet tooling a stable,
machine-parseable identifier (SIGID) for each recognised fault
situation rather than relying on fragile string matching.
Signed-off-by: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com>
Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/xe_device.c | 6 ++++--
drivers/gpu/drm/xe/xe_hwmon.c | 4 +++-
drivers/gpu/drm/xe/xe_irq.c | 9 +++++----
drivers/gpu/drm/xe/xe_mmio.c | 5 +++--
drivers/gpu/drm/xe/xe_pat.c | 6 ++++--
drivers/gpu/drm/xe/xe_pci.c | 14 +++++++++-----
drivers/gpu/drm/xe/xe_pcode.c | 5 +++--
drivers/gpu/drm/xe/xe_vram.c | 5 +++--
8 files changed, 34 insertions(+), 20 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index d25d02b24898..52bafe708d74 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"
@@ -586,7 +587,8 @@ int xe_device_init_early(struct xe_device *xe)
* Cleanup done in xe_device_destroy via
* drmm_add_action_or_reset register above
*/
- drm_err(&xe->drm, "Failed to allocate xe workqueues\n");
+ xe_log_err_fatal(xe, PROBE, -ENOMEM, "Failed to allocate xe workqueues\n");
+
return -ENOMEM;
}
@@ -717,7 +719,7 @@ static int xe_set_dma_info(struct xe_device *xe)
return 0;
mask_err:
- drm_err(&xe->drm, "Can't set DMA mask/consistent mask (%d)\n", err);
+ xe_log_err(xe, PROBE, err, "Can't set DMA mask/consistent mask\n");
return err;
}
diff --git a/drivers/gpu/drm/xe/xe_hwmon.c b/drivers/gpu/drm/xe/xe_hwmon.c
index de3f2aeffc3f..e4c319598dd0 100644
--- a/drivers/gpu/drm/xe/xe_hwmon.c
+++ b/drivers/gpu/drm/xe/xe_hwmon.c
@@ -15,6 +15,7 @@
#include "regs/xe_pcode_regs.h"
#include "xe_device.h"
#include "xe_hwmon.h"
+#include "xe_log.h"
#include "xe_mmio.h"
#include "xe_pcode.h"
#include "xe_pcode_api.h"
@@ -1575,7 +1576,8 @@ int xe_hwmon_register(struct xe_device *xe)
&hwmon_chip_info,
hwmon_groups);
if (IS_ERR(hwmon->hwmon_dev)) {
- drm_err(&xe->drm, "Failed to register xe hwmon (%pe)\n", hwmon->hwmon_dev);
+ xe_log_err(xe, PROBE, PTR_ERR(hwmon->hwmon_dev),
+ "Failed to register xe hwmon\n");
xe->hwmon = NULL;
return PTR_ERR(hwmon->hwmon_dev);
}
diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
index 9e49e2241da4..74d2b63cd505 100644
--- a/drivers/gpu/drm/xe/xe_irq.c
+++ b/drivers/gpu/drm/xe/xe_irq.c
@@ -19,6 +19,7 @@
#include "xe_hw_engine.h"
#include "xe_hw_error.h"
#include "xe_i2c.h"
+#include "xe_log.h"
#include "xe_memirq.h"
#include "xe_mert.h"
#include "xe_mmio.h"
@@ -759,14 +760,14 @@ static int xe_irq_msi_request_irqs(struct xe_device *xe)
irq_handler = xe_irq_handler(xe);
if (!irq_handler) {
- drm_err(&xe->drm, "No supported interrupt handler");
+ xe_log_err(xe, PROBE, -EINVAL, "No supported interrupt handler\n");
return -EINVAL;
}
irq = pci_irq_vector(pdev, 0);
err = request_irq(irq, irq_handler, IRQF_SHARED, DRIVER_NAME, xe);
if (err < 0) {
- drm_err(&xe->drm, "Failed to request MSI IRQ %d\n", err);
+ xe_log_err(xe, PROBE, err, "Failed to request MSI IRQ\n");
return err;
}
@@ -822,7 +823,7 @@ int xe_irq_install(struct xe_device *xe)
err = pci_alloc_irq_vectors(pdev, nvec, nvec, irq_flags);
if (err < 0) {
- drm_err(&xe->drm, "Failed to allocate IRQ vectors: %d\n", err);
+ xe_log_err(xe, PROBE, err, "Failed to allocate IRQ vectors\n");
return err;
}
@@ -891,7 +892,7 @@ static int xe_irq_msix_init(struct xe_device *xe)
return 0; /* MSI */
if (nvec < 0) {
- drm_err(&xe->drm, "Failed getting MSI-X vectors count: %d\n", nvec);
+ xe_log_err(xe, PROBE, nvec, "Failed getting MSI-X vectors count\n");
return nvec;
}
diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
index 7fa18dfcb5a2..bcf36a381424 100644
--- a/drivers/gpu/drm/xe/xe_mmio.c
+++ b/drivers/gpu/drm/xe/xe_mmio.c
@@ -15,6 +15,7 @@
#include "regs/xe_bars.h"
#include "xe_device.h"
#include "xe_gt_sriov_vf.h"
+#include "xe_log.h"
#include "xe_printk.h"
#include "xe_sriov.h"
#include "xe_tile_printk.h"
@@ -105,13 +106,13 @@ int xe_mmio_probe_early(struct xe_device *xe)
xe->mmio.regs = pcim_iomap(pdev, GTTMMADR_BAR, 0);
if (!xe->mmio.regs) {
- xe_err(xe, "Failed to map GTTMMADR_BAR\n");
+ xe_log_err(xe, PROBE, -EIO, "Failed to map GTTMMADR_BAR\n");
return -EIO;
}
xe->mmio.size = pci_resource_len(pdev, GTTMMADR_BAR);
if (xe->mmio.size < SZ_16M) {
- xe_err(xe, "GTTMMADR_BAR is too small: %zu\n", xe->mmio.size);
+ xe_log_err(xe, PROBE, -EIO, "GTTMMADR_BAR is too small: %zu\n", xe->mmio.size);
return -EIO;
}
diff --git a/drivers/gpu/drm/xe/xe_pat.c b/drivers/gpu/drm/xe/xe_pat.c
index a5fe1beec652..aad15a4b0ac3 100644
--- a/drivers/gpu/drm/xe/xe_pat.c
+++ b/drivers/gpu/drm/xe/xe_pat.c
@@ -16,6 +16,7 @@
#include "xe_force_wake.h"
#include "xe_gt.h"
#include "xe_gt_mcr.h"
+#include "xe_log.h"
#include "xe_mmio.h"
#include "xe_sriov.h"
#include "xe_wa.h"
@@ -686,8 +687,9 @@ void xe_pat_init_early(struct xe_device *xe)
* raise an error rather than trying to silently inherit the
* most recent platform's behavior.
*/
- drm_err(&xe->drm, "Missing PAT table for platform with graphics version %d.%02d!\n",
- GRAPHICS_VER(xe), GRAPHICS_VERx100(xe) % 100);
+ xe_log_err(xe, PROBE, -ENODEV,
+ "Missing PAT table for platform with graphics version %d.%02d!\n",
+ GRAPHICS_VER(xe), GRAPHICS_VERx100(xe) % 100);
}
xe_assert(xe, xe->pat.ops->dump);
diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
index 36d62927b969..3c452f399e6d 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"
@@ -718,8 +719,9 @@ static int handle_gmdid(struct xe_device *xe,
*graphics_ip = find_graphics_ip(ver);
if (!*graphics_ip) {
- drm_err(&xe->drm, "Hardware reports unknown graphics version %u.%02u\n",
- ver / 100, ver % 100);
+ xe_log_err(xe, PROBE, -ENODEV,
+ "Hardware reports unknown graphics version %u.%02u\n",
+ ver / 100, ver % 100);
}
ret = read_gmdid(xe, GMDID_MEDIA, &ver, media_revid);
@@ -732,8 +734,9 @@ static int handle_gmdid(struct xe_device *xe,
*media_ip = find_media_ip(ver);
if (!*media_ip) {
- drm_err(&xe->drm, "Hardware reports unknown media version %u.%02u\n",
- ver / 100, ver % 100);
+ xe_log_err(xe, PROBE, -ENODEV,
+ "Hardware reports unknown media version %u.%02u\n",
+ ver / 100, ver % 100);
}
return 0;
@@ -1088,7 +1091,8 @@ static int xe_info_init(struct xe_device *xe,
* required for VRAM management).
*/
if (!tile->primary_gt) {
- drm_err(&xe->drm, "Cannot probe device with without a primary GT\n");
+ xe_log_err_fatal(xe, PROBE, -ENODEV,
+ "Cannot probe device without a primary GT\n");
return -ENODEV;
}
diff --git a/drivers/gpu/drm/xe/xe_pcode.c b/drivers/gpu/drm/xe/xe_pcode.c
index ccc3bdeed6bb..c492737242d3 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"
@@ -320,8 +321,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(xe, PCODE, -ret,
+ "PCODE initialization timedout after: 3 min\n");
return ret;
}
diff --git a/drivers/gpu/drm/xe/xe_vram.c b/drivers/gpu/drm/xe/xe_vram.c
index 23eb7edbdd57..dada430d7ed5 100644
--- a/drivers/gpu/drm/xe/xe_vram.c
+++ b/drivers/gpu/drm/xe/xe_vram.c
@@ -17,6 +17,7 @@
#include "xe_device.h"
#include "xe_force_wake.h"
#include "xe_gt_mcr.h"
+#include "xe_log.h"
#include "xe_mmio.h"
#include "xe_sriov.h"
#include "xe_tile_sriov_vf.h"
@@ -43,7 +44,7 @@ static int determine_lmem_bar_size(struct xe_device *xe, struct xe_vram_region *
struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
if (!resource_is_valid(pdev, LMEM_BAR)) {
- drm_err(&xe->drm, "pci resource is not valid\n");
+ xe_log_err(xe, PROBE, -ENXIO, "pci resource is not valid\n");
return -ENXIO;
}
@@ -237,7 +238,7 @@ static int vram_region_init(struct xe_device *xe, struct xe_vram_region *vram,
vram->io_size = min_t(u64, usable_size, remain_io_size);
if (!vram->io_size) {
- drm_err(&xe->drm, "Tile without any CPU visible VRAM. Aborting.\n");
+ xe_log_err(xe, PROBE, -ENODEV, "Tile without any CPU visible VRAM. Aborting.\n");
return -ENODEV;
}
--
2.48.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 3/4] drm/xe/pcode: Improve pcode timeout logging
2026-08-06 11:00 [PATCH 0/4] drm/xe: Adopt xe_log SIGID API for structured error reporting Mallesh Koujalagi
2026-08-06 11:00 ` [PATCH 1/4] drm/xe/log: DO NOT REVIEW Mallesh Koujalagi
2026-08-06 11:00 ` [PATCH 2/4] drm/xe: Use xe_log SIGID API for probe-path error reporting Mallesh Koujalagi
@ 2026-08-06 11:00 ` Mallesh Koujalagi
2026-08-06 14:42 ` Michal Wajdeczko
2026-08-06 11:00 ` [PATCH 4/4] drm/xe/sysctrl: Add better sysctrl error reporting Mallesh Koujalagi
` (4 subsequent siblings)
7 siblings, 1 reply; 15+ messages in thread
From: Mallesh Koujalagi @ 2026-08-06 11:00 UTC (permalink / raw)
To: intel-xe, rodrigo.vivi, matthew.brost
Cc: anshuman.gupta, badal.nilawar, vinay.belgaumkar, riana.tauro,
karthik.poosa, sk.anirban, raag.jadav, michal.wajdeczko,
aravind.iddamsetty, Mallesh Koujalagi
Use xe_log_err() for pcode timeout errors instead of drm_err(). This
adds PCODE component tag, making timeout issues easier to detect and
track with automated tools.
Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/xe_pcode.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_pcode.c b/drivers/gpu/drm/xe/xe_pcode.c
index c492737242d3..b5a59a227167 100644
--- a/drivers/gpu/drm/xe/xe_pcode.c
+++ b/drivers/gpu/drm/xe/xe_pcode.c
@@ -220,8 +220,8 @@ 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, -ETIMEDOUT,
+ "PCODE timeout, retrying with preemption disabled\n");
preempt_disable();
ret = pcode_try_request(tile, mbox, request, reply_mask, reply, &status,
true, 50 * 1000, true);
--
2.48.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH 4/4] drm/xe/sysctrl: Add better sysctrl error reporting
2026-08-06 11:00 [PATCH 0/4] drm/xe: Adopt xe_log SIGID API for structured error reporting Mallesh Koujalagi
` (2 preceding siblings ...)
2026-08-06 11:00 ` [PATCH 3/4] drm/xe/pcode: Improve pcode timeout logging Mallesh Koujalagi
@ 2026-08-06 11:00 ` Mallesh Koujalagi
2026-08-06 14:41 ` Michal Wajdeczko
2026-08-06 19:14 ` Umesh Nerlige Ramappa
2026-08-06 11:07 ` ✗ CI.checkpatch: warning for drm/xe: Adopt xe_log SIGID API for structured " Patchwork
` (3 subsequent siblings)
7 siblings, 2 replies; 15+ messages in thread
From: Mallesh Koujalagi @ 2026-08-06 11:00 UTC (permalink / raw)
To: intel-xe, rodrigo.vivi, matthew.brost
Cc: anshuman.gupta, badal.nilawar, vinay.belgaumkar, riana.tauro,
karthik.poosa, sk.anirban, raag.jadav, michal.wajdeczko,
aravind.iddamsetty, Mallesh Koujalagi
Switch sysctrl error messages to xe_log_err() with SYSCTRL tags so
tools can reliably detect and categorize common sysctrl failures.
Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
---
drivers/gpu/drm/xe/xe_sysctrl_event.c | 11 ++++++----
drivers/gpu/drm/xe/xe_sysctrl_mailbox.c | 29 ++++++++++++++++---------
2 files changed, 26 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_sysctrl_event.c b/drivers/gpu/drm/xe/xe_sysctrl_event.c
index da395148ee9d..1805a0b4d0d0 100644
--- a/drivers/gpu/drm/xe/xe_sysctrl_event.c
+++ b/drivers/gpu/drm/xe/xe_sysctrl_event.c
@@ -5,6 +5,7 @@
#include "xe_device.h"
#include "xe_irq.h"
+#include "xe_log.h"
#include "xe_printk.h"
#include "xe_ras.h"
#include "xe_sysctrl.h"
@@ -25,13 +26,15 @@ static void get_pending_event(struct xe_sysctrl *sc, struct xe_sysctrl_mailbox_c
ret = xe_sysctrl_send_command(sc, command, &len);
if (ret) {
- xe_err(xe, "sysctrl: failed to get pending event %d\n", ret);
+ xe_log_err(xe, SYSCTRL, ret,
+ "sysctrl: failed to get pending event\n");
return;
}
if (len != sizeof(*response)) {
- xe_err(xe, "sysctrl: unexpected event response length %zu (expected %zu)\n",
- len, sizeof(*response));
+ xe_log_err(xe, SYSCTRL, 0,
+ "sysctrl: unexpected event response length %zu (expected %zu)\n",
+ len, sizeof(*response));
return;
}
@@ -41,7 +44,7 @@ static void get_pending_event(struct xe_sysctrl *sc, struct xe_sysctrl_mailbox_c
xe_warn(xe, "sysctrl: unexpected event %#x\n", response->event);
if (!--count) {
- xe_err(xe, "sysctrl: event flooding\n");
+ xe_log_err(xe, SYSCTRL, 0, "sysctrl: event flooding\n");
return;
}
diff --git a/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c b/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
index e13eebaac1d0..5c8edf9871c6 100644
--- a/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
+++ b/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
@@ -11,6 +11,7 @@
#include "regs/xe_sysctrl_regs.h"
#include "xe_device.h"
+#include "xe_log.h"
#include "xe_mmio.h"
#include "xe_pm.h"
#include "xe_printk.h"
@@ -115,7 +116,8 @@ static int sysctrl_prepare_command(struct xe_device *xe,
xe_assert(xe, command <= SYSCTRL_HDR_COMMAND_MAX);
if (data_in_len > XE_SYSCTRL_MB_MAX_MESSAGE_SIZE - sizeof(*hdr)) {
- xe_err(xe, "sysctrl: Input data too large: %zu bytes\n", data_in_len);
+ xe_log_err(xe, SYSCTRL, -EINVAL,
+ "sysctrl: Input data too large: %zu bytes\n", data_in_len);
return -EINVAL;
}
@@ -149,7 +151,7 @@ static int sysctrl_send_frames(struct xe_sysctrl *sc,
total_frames = DIV_ROUND_UP(cmd_size, XE_SYSCTRL_MB_FRAME_SIZE);
if (!sysctrl_wait_bit_clear(sc, SYSCTRL_MB_CTRL_RUN_BUSY, timeout_ms)) {
- xe_err(xe, "sysctrl: Mailbox busy\n");
+ xe_log_err(xe, SYSCTRL, -EBUSY, "sysctrl: Mailbox busy\n");
return -EBUSY;
}
@@ -160,7 +162,8 @@ static int sysctrl_send_frames(struct xe_sysctrl *sc,
frame_size = min_t(size_t, cmd_size - bytes_sent, XE_SYSCTRL_MB_FRAME_SIZE);
if (sysctrl_write_frame(sc, mbox_cmd + bytes_sent, frame_size)) {
- xe_err(xe, "sysctrl: Failed to write frame %u\n", frame);
+ xe_log_err(xe, SYSCTRL, -EIO,
+ "sysctrl: Failed to write frame %u\n", frame);
sc->phase_bit = 0;
return -EIO;
}
@@ -174,7 +177,8 @@ static int sysctrl_send_frames(struct xe_sysctrl *sc,
xe_mmio_write32(sc->mmio, SYSCTRL_MB_CTRL, ctrl_reg);
if (!sysctrl_wait_bit_clear(sc, SYSCTRL_MB_CTRL_RUN_BUSY, timeout_ms)) {
- xe_err(xe, "sysctrl: Frame %u acknowledgment timeout\n", frame);
+ xe_log_err(xe, SYSCTRL, -ETIMEDOUT,
+ "sysctrl: Frame %u acknowledgment timeout\n", frame);
sc->phase_bit = 0;
return -ETIMEDOUT;
}
@@ -194,7 +198,8 @@ static int sysctrl_process_frame(struct xe_sysctrl *sc, void *out,
int ret;
if (!sysctrl_wait_bit_set(sc, SYSCTRL_MB_CTRL_RUN_BUSY_OUT, timeout_ms)) {
- xe_err(xe, "sysctrl: Response frame timeout\n");
+ xe_log_err(xe, SYSCTRL, -ETIMEDOUT,
+ "sysctrl: Response frame timeout\n");
return -ETIMEDOUT;
}
@@ -249,13 +254,15 @@ static int sysctrl_receive_frames(struct xe_sysctrl *sc,
if (!XE_SYSCTRL_HDR_IS_RESPONSE(hdr) ||
XE_SYSCTRL_HDR_GROUP_ID(hdr) != XE_SYSCTRL_HDR_GROUP_ID(req) ||
XE_SYSCTRL_HDR_COMMAND(hdr) != XE_SYSCTRL_HDR_COMMAND(req)) {
- xe_err(xe, "sysctrl: Response header mismatch\n");
+ xe_log_err(xe, SYSCTRL, -EPROTO,
+ "sysctrl: Response header mismatch\n");
return -EPROTO;
}
if (XE_SYSCTRL_HDR_RESULT(hdr) != 0) {
- xe_err(xe, "sysctrl: Firmware error: 0x%02lx\n",
- XE_SYSCTRL_HDR_RESULT(hdr));
+ xe_log_err(xe, SYSCTRL, -EIO,
+ "sysctrl: Firmware error: 0x%02lx\n",
+ XE_SYSCTRL_HDR_RESULT(hdr));
return -EIO;
}
@@ -381,7 +388,8 @@ int xe_sysctrl_send_command(struct xe_sysctrl *sc,
cmd->data_in, cmd->data_in_len,
&mbox_cmd, &cmd_size);
if (ret) {
- xe_err(xe, "sysctrl: Failed to prepare command: %pe\n", ERR_PTR(ret));
+ xe_log_err(xe, SYSCTRL, ret,
+ "sysctrl: Failed to prepare command: %pe\n", ERR_PTR(ret));
return ret;
}
@@ -391,7 +399,8 @@ int xe_sysctrl_send_command(struct xe_sysctrl *sc,
cmd->data_out, cmd->data_out_len, rdata_len,
XE_SYSCTRL_MB_DEFAULT_TIMEOUT_MS);
if (ret)
- xe_err(xe, "sysctrl: Mailbox command failed: %pe\n", ERR_PTR(ret));
+ xe_log_err(xe, SYSCTRL, ret,
+ "sysctrl: Mailbox command failed: %pe\n", ERR_PTR(ret));
kfree(mbox_cmd);
--
2.48.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* ✗ CI.checkpatch: warning for drm/xe: Adopt xe_log SIGID API for structured error reporting
2026-08-06 11:00 [PATCH 0/4] drm/xe: Adopt xe_log SIGID API for structured error reporting Mallesh Koujalagi
` (3 preceding siblings ...)
2026-08-06 11:00 ` [PATCH 4/4] drm/xe/sysctrl: Add better sysctrl error reporting Mallesh Koujalagi
@ 2026-08-06 11:07 ` Patchwork
2026-08-06 11:08 ` ✓ CI.KUnit: success " Patchwork
` (2 subsequent siblings)
7 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-08-06 11:07 UTC (permalink / raw)
To: Mallesh Koujalagi; +Cc: intel-xe
== Series Details ==
Series: drm/xe: Adopt xe_log SIGID API for structured error reporting
URL : https://patchwork.freedesktop.org/series/171725/
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 06c8696ee12d8fa781fd4cc0e43692cf295e1f3b
Author: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
Date: Thu Aug 6 16:30:44 2026 +0530
drm/xe/sysctrl: Add better sysctrl error reporting
Switch sysctrl error messages to xe_log_err() with SYSCTRL tags so
tools can reliably detect and categorize common sysctrl failures.
Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
+ /mt/dim checkpatch 8d11ccdc98daac5e969243b42907fd060a650091 drm-intel
b1acd10c82c7 drm/xe/log: DO NOT REVIEW
-:25: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#25:
new file mode 100644
-:192: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#192: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:131:
+#define DEFINE_XE_LOG_COMPONENTS(define) \
+ DEFINE_XE_LOG_SOFTWARE_COMPONENTS(define) \
+ DEFINE_XE_LOG_HARDWARE_COMPONENTS(define)
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.
-:192: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'define' - possible side-effects?
#192: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:131:
+#define DEFINE_XE_LOG_COMPONENTS(define) \
+ DEFINE_XE_LOG_SOFTWARE_COMPONENTS(define) \
+ DEFINE_XE_LOG_HARDWARE_COMPONENTS(define)
-:196: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#196: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:135:
+#define DEFINE_XE_LOG_SOFTWARE_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") \
+
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.
-:196: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'define' - possible side-effects?
#196: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:135:
+#define DEFINE_XE_LOG_SOFTWARE_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") \
+
-:225: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#225: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:164:
+#define DEFINE_XE_LOG_HARDWARE_COMPONENTS(define) \
+ define(HARDWARE, 1, DEVMEM, DEVICE_MEMORY, "Device Memory") \
+ define(HARDWARE, 2, HWCORE, CORE_COMPUTE, "Core Compute") \
+ /* HARDWARE, 3, RESERVED */ \
+ define(HARDWARE, 4, PCIE, PCIE, "PCIe Interface") \
+ define(HARDWARE, 5, FABRIC, FABRIC, "Fabric") \
+ define(HARDWARE, 6, SOC, 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.
-:225: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'define' - possible side-effects?
#225: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:164:
+#define DEFINE_XE_LOG_HARDWARE_COMPONENTS(define) \
+ define(HARDWARE, 1, DEVMEM, DEVICE_MEMORY, "Device Memory") \
+ define(HARDWARE, 2, HWCORE, CORE_COMPUTE, "Core Compute") \
+ /* HARDWARE, 3, RESERVED */ \
+ define(HARDWARE, 4, PCIE, PCIE, "PCIe Interface") \
+ define(HARDWARE, 5, FABRIC, FABRIC, "Fabric") \
+ define(HARDWARE, 6, SOC, SOC_INTERNAL, "SoC Internal") \
+ /* eod */
-:239: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#239: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:178:
+#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.
-:239: WARNING:MACRO_ARG_UNUSED: Argument '_SIG' is not used in function-like macro
#239: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:178:
+#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 */
-:239: WARNING:MACRO_ARG_UNUSED: Argument '_NAME' is not used in function-like macro
#239: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:178:
+#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 */
-:252: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#252: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:191:
+#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.
-:252: WARNING:MACRO_ARG_UNUSED: Argument '_CLASS' is not used in function-like macro
#252: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:191:
+#define MAKE_XE_LOG_COMPONENT_SIGID(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ XE_LOG_COMPONENT_##_TAG##_SIGID = XE_SIGID_##_SIG, \
+ /* eod */
-:252: WARNING:MACRO_ARG_UNUSED: Argument '_ID' is not used in function-like macro
#252: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:191:
+#define MAKE_XE_LOG_COMPONENT_SIGID(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ XE_LOG_COMPONENT_##_TAG##_SIGID = XE_SIGID_##_SIG, \
+ /* eod */
-:252: WARNING:MACRO_ARG_UNUSED: Argument '_NAME' is not used in function-like macro
#252: FILE: drivers/gpu/drm/xe/abi/xe_log_abi.h:191:
+#define MAKE_XE_LOG_COMPONENT_SIGID(_CLASS, _ID, _TAG, _SIG, _NAME) \
+ XE_LOG_COMPONENT_##_TAG##_SIGID = XE_SIGID_##_SIG, \
+ /* eod */
-:477: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in parentheses
#477: 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.
-:477: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'any' - possible side-effects?
#477: FILE: drivers/gpu/drm/xe/xe_any.h:11:
+#define __xe_any_to_self_assoc(type, any) \
+ const type * : (any), \
+ type * : (any)
-:488: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'any' - possible side-effects?
#488: 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)
-:526: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'const' - possible side-effects?
#526: FILE: drivers/gpu/drm/xe/xe_any.h:60:
+#define __xe_any_to_other_assoc(const, from, other, p) \
+ const struct from * : __##from##_to_##other((const struct from *)(p))
-:526: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'from' - possible side-effects?
#526: FILE: drivers/gpu/drm/xe/xe_any.h:60:
+#define __xe_any_to_other_assoc(const, from, other, p) \
+ const struct from * : __##from##_to_##other((const struct from *)(p))
-:526: CHECK:MACRO_ARG_PRECEDENCE: Macro argument 'from' may be better as '(from)' to avoid precedence issues
#526: FILE: drivers/gpu/drm/xe/xe_any.h:60:
+#define __xe_any_to_other_assoc(const, from, other, p) \
+ const struct from * : __##from##_to_##other((const struct from *)(p))
-:542: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'any' - possible side-effects?
#542: FILE: drivers/gpu/drm/xe/xe_any.h:76:
+#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)))
-:559: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'any' - possible side-effects?
#559: FILE: drivers/gpu/drm/xe/xe_any.h:93:
+#define xe_any_to_drm(any) \
+ _Generic((any), \
+ __xe_any_to_self_assoc(struct drm_device, (any)), \
+ default : \
+ &xe_any_to_xe(any)->drm)
-:571: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'any' - possible side-effects?
#571: FILE: drivers/gpu/drm/xe/xe_any.h:105:
+#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)
-:584: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'any' - possible side-effects?
#584: FILE: drivers/gpu/drm/xe/xe_any.h:118:
+#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)))
-:599: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'any' - possible side-effects?
#599: FILE: drivers/gpu/drm/xe/xe_any.h:133:
+#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)
-:655: WARNING:MACRO_ARG_UNUSED: Argument '_CLASS' is not used in function-like macro
#655: 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 /* _CLASS _ID _SIG _NAME */ #_TAG ": ";
-:655: WARNING:MACRO_ARG_UNUSED: Argument '_ID' is not used in function-like macro
#655: 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 /* _CLASS _ID _SIG _NAME */ #_TAG ": ";
-:655: WARNING:MACRO_ARG_UNUSED: Argument '_SIG' is not used in function-like macro
#655: 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 /* _CLASS _ID _SIG _NAME */ #_TAG ": ";
-:655: WARNING:MACRO_ARG_UNUSED: Argument '_NAME' is not used in function-like macro
#655: 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 /* _CLASS _ID _SIG _NAME */ #_TAG ": ";
-:655: WARNING:TRAILING_SEMICOLON: macros should not use a trailing semicolon
#655: 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 /* _CLASS _ID _SIG _NAME */ #_TAG ": ";
-:891: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'any' - possible side-effects?
#891: FILE: drivers/gpu/drm/xe/xe_log.h:50:
+#define xe_log_location(any) \
+ PREP_XE_LOG_LOCATION(xe_log_location_type(any), xe_any_id(any))
total: 6 errors, 11 warnings, 14 checks, 962 lines checked
33bac8a8db6d drm/xe: Use xe_log SIGID API for probe-path error reporting
794091d2d800 drm/xe/pcode: Improve pcode timeout logging
06c8696ee12d drm/xe/sysctrl: Add better sysctrl error reporting
^ permalink raw reply [flat|nested] 15+ messages in thread
* ✓ CI.KUnit: success for drm/xe: Adopt xe_log SIGID API for structured error reporting
2026-08-06 11:00 [PATCH 0/4] drm/xe: Adopt xe_log SIGID API for structured error reporting Mallesh Koujalagi
` (4 preceding siblings ...)
2026-08-06 11:07 ` ✗ CI.checkpatch: warning for drm/xe: Adopt xe_log SIGID API for structured " Patchwork
@ 2026-08-06 11:08 ` Patchwork
2026-08-06 12:13 ` ✓ Xe.CI.BAT: " Patchwork
2026-08-06 20:44 ` ✓ Xe.CI.FULL: " Patchwork
7 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-08-06 11:08 UTC (permalink / raw)
To: Mallesh Koujalagi; +Cc: intel-xe
== Series Details ==
Series: drm/xe: Adopt xe_log SIGID API for structured error reporting
URL : https://patchwork.freedesktop.org/series/171725/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[11:07:17] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[11:07:21] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[11:07:53] Starting KUnit Kernel (1/1)...
[11:07:53] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[11:07:53] ================== guc_buf (11 subtests) ===================
[11:07:53] [PASSED] test_smallest
[11:07:53] [PASSED] test_largest
[11:07:53] [PASSED] test_granular
[11:07:53] [PASSED] test_unique
[11:07:53] [PASSED] test_overlap
[11:07:53] [PASSED] test_reusable
[11:07:53] [PASSED] test_too_big
[11:07:53] [PASSED] test_flush
[11:07:53] [PASSED] test_lookup
[11:07:53] [PASSED] test_data
[11:07:53] [PASSED] test_class
[11:07:53] ===================== [PASSED] guc_buf =====================
[11:07:53] =================== guc_dbm (7 subtests) ===================
[11:07:53] [PASSED] test_empty
[11:07:53] [PASSED] test_default
[11:07:53] ======================== test_size ========================
[11:07:53] [PASSED] 4
[11:07:53] [PASSED] 8
[11:07:53] [PASSED] 32
[11:07:53] [PASSED] 256
[11:07:53] ==================== [PASSED] test_size ====================
[11:07:53] ======================= test_reuse ========================
[11:07:53] [PASSED] 4
[11:07:53] [PASSED] 8
[11:07:53] [PASSED] 32
[11:07:53] [PASSED] 256
[11:07:53] =================== [PASSED] test_reuse ====================
[11:07:53] =================== test_range_overlap ====================
[11:07:53] [PASSED] 4
[11:07:53] [PASSED] 8
[11:07:53] [PASSED] 32
[11:07:53] [PASSED] 256
[11:07:53] =============== [PASSED] test_range_overlap ================
[11:07:53] =================== test_range_compact ====================
[11:07:53] [PASSED] 4
[11:07:53] [PASSED] 8
[11:07:53] [PASSED] 32
[11:07:53] [PASSED] 256
[11:07:53] =============== [PASSED] test_range_compact ================
[11:07:53] ==================== test_range_spare =====================
[11:07:53] [PASSED] 4
[11:07:53] [PASSED] 8
[11:07:53] [PASSED] 32
[11:07:53] [PASSED] 256
[11:07:53] ================ [PASSED] test_range_spare =================
[11:07:53] ===================== [PASSED] guc_dbm =====================
[11:07:53] =================== guc_idm (6 subtests) ===================
[11:07:53] [PASSED] bad_init
[11:07:53] [PASSED] no_init
[11:07:53] [PASSED] init_fini
[11:07:53] [PASSED] check_used
[11:07:53] [PASSED] check_quota
[11:07:53] [PASSED] check_all
[11:07:53] ===================== [PASSED] guc_idm =====================
[11:07:53] =============== guc_klv_helpers (9 subtests) ===============
[11:07:53] [PASSED] test_count
[11:07:53] [PASSED] test_encode_u32
[11:07:53] [PASSED] test_encode_u64
[11:07:53] [PASSED] test_encode_string
[11:07:53] [PASSED] test_encode_object_raw
[11:07:53] [PASSED] test_encode_object_klv
[11:07:53] [PASSED] test_encode_object_nested
[11:07:53] [PASSED] test_encode_object_basic
[11:07:53] [PASSED] test_print
[11:07:53] ================= [PASSED] guc_klv_helpers =================
[11:07:53] ================== no_relay (3 subtests) ===================
[11:07:53] [PASSED] xe_drops_guc2pf_if_not_ready
[11:07:53] [PASSED] xe_drops_guc2vf_if_not_ready
[11:07:53] [PASSED] xe_rejects_send_if_not_ready
[11:07:53] ==================== [PASSED] no_relay =====================
[11:07:53] ================== pf_relay (14 subtests) ==================
[11:07:53] [PASSED] pf_rejects_guc2pf_too_short
[11:07:53] [PASSED] pf_rejects_guc2pf_too_long
[11:07:53] [PASSED] pf_rejects_guc2pf_no_payload
[11:07:53] [PASSED] pf_fails_no_payload
[11:07:53] [PASSED] pf_fails_bad_origin
[11:07:53] [PASSED] pf_fails_bad_type
[11:07:53] [PASSED] pf_txn_reports_error
[11:07:53] [PASSED] pf_txn_sends_pf2guc
[11:07:53] [PASSED] pf_sends_pf2guc
[11:07:53] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:07:53] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:07:53] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:07:53] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:07:53] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:07:53] ==================== [PASSED] pf_relay =====================
[11:07:53] ================== vf_relay (3 subtests) ===================
[11:07:53] [PASSED] vf_rejects_guc2vf_too_short
[11:07:53] [PASSED] vf_rejects_guc2vf_too_long
[11:07:53] [PASSED] vf_rejects_guc2vf_no_payload
[11:07:53] ==================== [PASSED] vf_relay =====================
[11:07:53] ================ pf_gt_config (9 subtests) =================
[11:07:53] [PASSED] fair_contexts_1vf
[11:07:53] [PASSED] fair_doorbells_1vf
[11:07:53] [PASSED] fair_ggtt_1vf
[11:07:53] ====================== fair_vram_1vf ======================
[11:07:53] [PASSED] 3.50 GiB
[11:07:53] [PASSED] 11.5 GiB
[11:07:53] [PASSED] 15.5 GiB
[11:07:53] [PASSED] 31.5 GiB
[11:07:53] [PASSED] 63.5 GiB
[11:07:53] [PASSED] 1.91 GiB
[11:07:53] ================== [PASSED] fair_vram_1vf ==================
[11:07:53] ================ fair_vram_1vf_admin_only =================
[11:07:53] [PASSED] 3.50 GiB
[11:07:53] [PASSED] 11.5 GiB
[11:07:53] [PASSED] 15.5 GiB
[11:07:53] [PASSED] 31.5 GiB
[11:07:53] [PASSED] 63.5 GiB
[11:07:53] [PASSED] 1.91 GiB
[11:07:53] ============ [PASSED] fair_vram_1vf_admin_only =============
[11:07:53] ====================== fair_contexts ======================
[11:07:53] [PASSED] 1 VF
[11:07:53] [PASSED] 2 VFs
[11:07:53] [PASSED] 3 VFs
[11:07:53] [PASSED] 4 VFs
[11:07:53] [PASSED] 5 VFs
[11:07:53] [PASSED] 6 VFs
[11:07:53] [PASSED] 7 VFs
[11:07:53] [PASSED] 8 VFs
[11:07:53] [PASSED] 9 VFs
[11:07:53] [PASSED] 10 VFs
[11:07:53] [PASSED] 11 VFs
[11:07:53] [PASSED] 12 VFs
[11:07:53] [PASSED] 13 VFs
[11:07:53] [PASSED] 14 VFs
[11:07:53] [PASSED] 15 VFs
[11:07:53] [PASSED] 16 VFs
[11:07:53] [PASSED] 17 VFs
[11:07:53] [PASSED] 18 VFs
[11:07:53] [PASSED] 19 VFs
[11:07:53] [PASSED] 20 VFs
[11:07:53] [PASSED] 21 VFs
[11:07:53] [PASSED] 22 VFs
[11:07:53] [PASSED] 23 VFs
[11:07:53] [PASSED] 24 VFs
[11:07:53] [PASSED] 25 VFs
[11:07:53] [PASSED] 26 VFs
[11:07:53] [PASSED] 27 VFs
[11:07:53] [PASSED] 28 VFs
[11:07:53] [PASSED] 29 VFs
[11:07:53] [PASSED] 30 VFs
[11:07:53] [PASSED] 31 VFs
[11:07:53] [PASSED] 32 VFs
[11:07:53] [PASSED] 33 VFs
[11:07:53] [PASSED] 34 VFs
[11:07:53] [PASSED] 35 VFs
[11:07:53] [PASSED] 36 VFs
[11:07:53] [PASSED] 37 VFs
[11:07:53] [PASSED] 38 VFs
[11:07:53] [PASSED] 39 VFs
[11:07:53] [PASSED] 40 VFs
[11:07:53] [PASSED] 41 VFs
[11:07:53] [PASSED] 42 VFs
[11:07:53] [PASSED] 43 VFs
[11:07:53] [PASSED] 44 VFs
[11:07:53] [PASSED] 45 VFs
[11:07:53] [PASSED] 46 VFs
[11:07:53] [PASSED] 47 VFs
[11:07:53] [PASSED] 48 VFs
[11:07:53] [PASSED] 49 VFs
[11:07:53] [PASSED] 50 VFs
[11:07:53] [PASSED] 51 VFs
[11:07:53] [PASSED] 52 VFs
[11:07:53] [PASSED] 53 VFs
[11:07:53] [PASSED] 54 VFs
[11:07:53] [PASSED] 55 VFs
[11:07:53] [PASSED] 56 VFs
[11:07:53] [PASSED] 57 VFs
[11:07:53] [PASSED] 58 VFs
[11:07:53] [PASSED] 59 VFs
[11:07:53] [PASSED] 60 VFs
[11:07:53] [PASSED] 61 VFs
[11:07:53] [PASSED] 62 VFs
[11:07:53] [PASSED] 63 VFs
[11:07:53] ================== [PASSED] fair_contexts ==================
[11:07:53] ===================== fair_doorbells ======================
[11:07:53] [PASSED] 1 VF
[11:07:53] [PASSED] 2 VFs
[11:07:53] [PASSED] 3 VFs
[11:07:53] [PASSED] 4 VFs
[11:07:53] [PASSED] 5 VFs
[11:07:53] [PASSED] 6 VFs
[11:07:53] [PASSED] 7 VFs
[11:07:53] [PASSED] 8 VFs
[11:07:53] [PASSED] 9 VFs
[11:07:53] [PASSED] 10 VFs
[11:07:53] [PASSED] 11 VFs
[11:07:53] [PASSED] 12 VFs
[11:07:53] [PASSED] 13 VFs
[11:07:53] [PASSED] 14 VFs
[11:07:53] [PASSED] 15 VFs
[11:07:53] [PASSED] 16 VFs
[11:07:53] [PASSED] 17 VFs
[11:07:53] [PASSED] 18 VFs
[11:07:53] [PASSED] 19 VFs
[11:07:53] [PASSED] 20 VFs
[11:07:53] [PASSED] 21 VFs
[11:07:53] [PASSED] 22 VFs
[11:07:53] [PASSED] 23 VFs
[11:07:53] [PASSED] 24 VFs
[11:07:53] [PASSED] 25 VFs
[11:07:53] [PASSED] 26 VFs
[11:07:53] [PASSED] 27 VFs
[11:07:53] [PASSED] 28 VFs
[11:07:53] [PASSED] 29 VFs
[11:07:53] [PASSED] 30 VFs
[11:07:53] [PASSED] 31 VFs
[11:07:53] [PASSED] 32 VFs
[11:07:53] [PASSED] 33 VFs
[11:07:53] [PASSED] 34 VFs
[11:07:53] [PASSED] 35 VFs
[11:07:53] [PASSED] 36 VFs
[11:07:53] [PASSED] 37 VFs
[11:07:53] [PASSED] 38 VFs
[11:07:53] [PASSED] 39 VFs
[11:07:53] [PASSED] 40 VFs
[11:07:53] [PASSED] 41 VFs
[11:07:53] [PASSED] 42 VFs
[11:07:53] [PASSED] 43 VFs
[11:07:53] [PASSED] 44 VFs
[11:07:53] [PASSED] 45 VFs
[11:07:53] [PASSED] 46 VFs
[11:07:53] [PASSED] 47 VFs
[11:07:53] [PASSED] 48 VFs
[11:07:53] [PASSED] 49 VFs
[11:07:53] [PASSED] 50 VFs
[11:07:53] [PASSED] 51 VFs
[11:07:53] [PASSED] 52 VFs
[11:07:53] [PASSED] 53 VFs
[11:07:53] [PASSED] 54 VFs
[11:07:53] [PASSED] 55 VFs
[11:07:53] [PASSED] 56 VFs
[11:07:53] [PASSED] 57 VFs
[11:07:53] [PASSED] 58 VFs
[11:07:53] [PASSED] 59 VFs
[11:07:53] [PASSED] 60 VFs
[11:07:53] [PASSED] 61 VFs
[11:07:53] [PASSED] 62 VFs
[11:07:53] [PASSED] 63 VFs
[11:07:53] ================= [PASSED] fair_doorbells ==================
[11:07:53] ======================== fair_ggtt ========================
[11:07:53] [PASSED] 1 VF
[11:07:53] [PASSED] 2 VFs
[11:07:53] [PASSED] 3 VFs
[11:07:53] [PASSED] 4 VFs
[11:07:53] [PASSED] 5 VFs
[11:07:53] [PASSED] 6 VFs
[11:07:53] [PASSED] 7 VFs
[11:07:53] [PASSED] 8 VFs
[11:07:53] [PASSED] 9 VFs
[11:07:53] [PASSED] 10 VFs
[11:07:53] [PASSED] 11 VFs
[11:07:53] [PASSED] 12 VFs
[11:07:53] [PASSED] 13 VFs
[11:07:53] [PASSED] 14 VFs
[11:07:53] [PASSED] 15 VFs
[11:07:53] [PASSED] 16 VFs
[11:07:53] [PASSED] 17 VFs
[11:07:53] [PASSED] 18 VFs
[11:07:53] [PASSED] 19 VFs
[11:07:53] [PASSED] 20 VFs
[11:07:53] [PASSED] 21 VFs
[11:07:53] [PASSED] 22 VFs
[11:07:53] [PASSED] 23 VFs
[11:07:53] [PASSED] 24 VFs
[11:07:53] [PASSED] 25 VFs
[11:07:53] [PASSED] 26 VFs
[11:07:53] [PASSED] 27 VFs
[11:07:53] [PASSED] 28 VFs
[11:07:53] [PASSED] 29 VFs
[11:07:53] [PASSED] 30 VFs
[11:07:53] [PASSED] 31 VFs
[11:07:53] [PASSED] 32 VFs
[11:07:53] [PASSED] 33 VFs
[11:07:53] [PASSED] 34 VFs
[11:07:53] [PASSED] 35 VFs
[11:07:53] [PASSED] 36 VFs
[11:07:53] [PASSED] 37 VFs
[11:07:53] [PASSED] 38 VFs
[11:07:53] [PASSED] 39 VFs
[11:07:53] [PASSED] 40 VFs
[11:07:53] [PASSED] 41 VFs
[11:07:53] [PASSED] 42 VFs
[11:07:53] [PASSED] 43 VFs
[11:07:53] [PASSED] 44 VFs
[11:07:53] [PASSED] 45 VFs
[11:07:53] [PASSED] 46 VFs
[11:07:53] [PASSED] 47 VFs
[11:07:53] [PASSED] 48 VFs
[11:07:53] [PASSED] 49 VFs
[11:07:53] [PASSED] 50 VFs
[11:07:53] [PASSED] 51 VFs
[11:07:53] [PASSED] 52 VFs
[11:07:53] [PASSED] 53 VFs
[11:07:53] [PASSED] 54 VFs
[11:07:53] [PASSED] 55 VFs
[11:07:53] [PASSED] 56 VFs
[11:07:53] [PASSED] 57 VFs
[11:07:53] [PASSED] 58 VFs
[11:07:53] [PASSED] 59 VFs
[11:07:53] [PASSED] 60 VFs
[11:07:53] [PASSED] 61 VFs
[11:07:53] [PASSED] 62 VFs
[11:07:53] [PASSED] 63 VFs
[11:07:53] ==================== [PASSED] fair_ggtt ====================
[11:07:53] ======================== fair_vram ========================
[11:07:53] [PASSED] 1 VF
[11:07:53] [PASSED] 2 VFs
[11:07:53] [PASSED] 3 VFs
[11:07:53] [PASSED] 4 VFs
[11:07:53] [PASSED] 5 VFs
[11:07:53] [PASSED] 6 VFs
[11:07:53] [PASSED] 7 VFs
[11:07:53] [PASSED] 8 VFs
[11:07:53] [PASSED] 9 VFs
[11:07:53] [PASSED] 10 VFs
[11:07:53] [PASSED] 11 VFs
[11:07:53] [PASSED] 12 VFs
[11:07:53] [PASSED] 13 VFs
[11:07:53] [PASSED] 14 VFs
[11:07:53] [PASSED] 15 VFs
[11:07:53] [PASSED] 16 VFs
[11:07:53] [PASSED] 17 VFs
[11:07:53] [PASSED] 18 VFs
[11:07:53] [PASSED] 19 VFs
[11:07:53] [PASSED] 20 VFs
[11:07:53] [PASSED] 21 VFs
[11:07:53] [PASSED] 22 VFs
[11:07:53] [PASSED] 23 VFs
[11:07:53] [PASSED] 24 VFs
[11:07:53] [PASSED] 25 VFs
[11:07:53] [PASSED] 26 VFs
[11:07:53] [PASSED] 27 VFs
[11:07:53] [PASSED] 28 VFs
[11:07:53] [PASSED] 29 VFs
[11:07:53] [PASSED] 30 VFs
[11:07:53] [PASSED] 31 VFs
[11:07:53] [PASSED] 32 VFs
[11:07:53] [PASSED] 33 VFs
[11:07:53] [PASSED] 34 VFs
[11:07:53] [PASSED] 35 VFs
[11:07:53] [PASSED] 36 VFs
[11:07:53] [PASSED] 37 VFs
[11:07:53] [PASSED] 38 VFs
[11:07:53] [PASSED] 39 VFs
[11:07:53] [PASSED] 40 VFs
[11:07:53] [PASSED] 41 VFs
[11:07:53] [PASSED] 42 VFs
[11:07:53] [PASSED] 43 VFs
[11:07:53] [PASSED] 44 VFs
[11:07:53] [PASSED] 45 VFs
[11:07:53] [PASSED] 46 VFs
[11:07:53] [PASSED] 47 VFs
[11:07:53] [PASSED] 48 VFs
[11:07:53] [PASSED] 49 VFs
[11:07:53] [PASSED] 50 VFs
[11:07:53] [PASSED] 51 VFs
[11:07:53] [PASSED] 52 VFs
[11:07:53] [PASSED] 53 VFs
[11:07:53] [PASSED] 54 VFs
[11:07:53] [PASSED] 55 VFs
[11:07:53] [PASSED] 56 VFs
[11:07:53] [PASSED] 57 VFs
[11:07:53] [PASSED] 58 VFs
[11:07:53] [PASSED] 59 VFs
[11:07:53] [PASSED] 60 VFs
[11:07:53] [PASSED] 61 VFs
[11:07:53] [PASSED] 62 VFs
[11:07:53] [PASSED] 63 VFs
[11:07:53] ==================== [PASSED] fair_vram ====================
[11:07:53] ================== [PASSED] pf_gt_config ===================
[11:07:53] ===================== lmtt (1 subtest) =====================
[11:07:53] ======================== test_ops =========================
[11:07:53] [PASSED] 2-level
[11:07:53] [PASSED] multi-level
[11:07:53] ==================== [PASSED] test_ops =====================
[11:07:53] ====================== [PASSED] lmtt =======================
[11:07:53] ================= sriov_packet (1 subtest) =================
[11:07:53] [PASSED] test_descriptor_init
[11:07:53] ================== [PASSED] sriov_packet ===================
[11:07:53] ================= pf_service (11 subtests) =================
[11:07:53] [PASSED] pf_negotiate_any
[11:07:53] [PASSED] pf_negotiate_base_match
[11:07:53] [PASSED] pf_negotiate_base_newer
[11:07:53] [PASSED] pf_negotiate_base_next
[11:07:53] [SKIPPED] pf_negotiate_base_older (no older minor)
[11:07:53] [PASSED] pf_negotiate_base_prev
[11:07:53] [PASSED] pf_negotiate_latest_match
[11:07:53] [PASSED] pf_negotiate_latest_newer
[11:07:53] [PASSED] pf_negotiate_latest_next
[11:07:53] [SKIPPED] pf_negotiate_latest_older (no older minor)
[11:07:53] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[11:07:53] =================== [PASSED] pf_service ====================
[11:07:53] ================= xe_guc_g2g (2 subtests) ==================
[11:07:53] ============== xe_live_guc_g2g_kunit_default ==============
[11:07:53] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[11:07:53] ============== xe_live_guc_g2g_kunit_allmem ===============
[11:07:53] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[11:07:53] =================== [SKIPPED] xe_guc_g2g ===================
[11:07:53] =================== xe_mocs (2 subtests) ===================
[11:07:53] ================ xe_live_mocs_kernel_kunit ================
[11:07:53] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[11:07:53] ================ xe_live_mocs_reset_kunit =================
[11:07:53] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[11:07:53] ==================== [SKIPPED] xe_mocs =====================
[11:07:53] ================= xe_migrate (2 subtests) ==================
[11:07:53] ================= xe_migrate_sanity_kunit =================
[11:07:53] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[11:07:53] ================== xe_validate_ccs_kunit ==================
[11:07:53] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[11:07:53] =================== [SKIPPED] xe_migrate ===================
[11:07:53] ================== xe_dma_buf (1 subtest) ==================
[11:07:53] ==================== xe_dma_buf_kunit =====================
[11:07:53] ================ [SKIPPED] xe_dma_buf_kunit ================
[11:07:53] =================== [SKIPPED] xe_dma_buf ===================
[11:07:53] ================= xe_bo_shrink (1 subtest) =================
[11:07:53] =================== xe_bo_shrink_kunit ====================
[11:07:53] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[11:07:53] ================== [SKIPPED] xe_bo_shrink ==================
[11:07:53] ==================== xe_bo (2 subtests) ====================
[11:07:53] ================== xe_ccs_migrate_kunit ===================
[11:07:53] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[11:07:53] ==================== xe_bo_evict_kunit ====================
[11:07:53] =============== [SKIPPED] xe_bo_evict_kunit ================
[11:07:53] ===================== [SKIPPED] xe_bo ======================
[11:07:53] ==================== args (13 subtests) ====================
[11:07:53] [PASSED] count_args_test
[11:07:53] [PASSED] call_args_example
[11:07:53] [PASSED] call_args_test
[11:07:53] [PASSED] drop_first_arg_example
[11:07:53] [PASSED] drop_first_arg_test
[11:07:53] [PASSED] first_arg_example
[11:07:53] [PASSED] first_arg_test
[11:07:53] [PASSED] last_arg_example
[11:07:53] [PASSED] last_arg_test
[11:07:53] [PASSED] pick_arg_example
[11:07:53] [PASSED] if_args_example
[11:07:53] [PASSED] if_args_test
[11:07:53] [PASSED] sep_comma_example
[11:07:53] ====================== [PASSED] args =======================
[11:07:53] =================== xe_pci (3 subtests) ====================
[11:07:53] ==================== check_graphics_ip ====================
[11:07:53] [PASSED] 12.00 Xe_LP
[11:07:53] [PASSED] 12.10 Xe_LP+
[11:07:53] [PASSED] 12.55 Xe_HPG
[11:07:53] [PASSED] 12.60 Xe_HPC
[11:07:53] [PASSED] 12.70 Xe_LPG
[11:07:53] [PASSED] 12.71 Xe_LPG
[11:07:53] [PASSED] 12.74 Xe_LPG+
[11:07:53] [PASSED] 20.01 Xe2_HPG
[11:07:53] [PASSED] 20.02 Xe2_HPG
[11:07:53] [PASSED] 20.04 Xe2_LPG
[11:07:53] [PASSED] 30.00 Xe3_LPG
[11:07:53] [PASSED] 30.01 Xe3_LPG
[11:07:53] [PASSED] 30.03 Xe3_LPG
[11:07:53] [PASSED] 30.04 Xe3_LPG
[11:07:53] [PASSED] 30.05 Xe3_LPG
[11:07:53] [PASSED] 35.10 Xe3p_LPG
[11:07:53] [PASSED] 35.11 Xe3p_XPC
[11:07:53] ================ [PASSED] check_graphics_ip ================
[11:07:53] ===================== check_media_ip ======================
[11:07:53] [PASSED] 12.00 Xe_M
[11:07:53] [PASSED] 12.55 Xe_HPM
[11:07:53] [PASSED] 13.00 Xe_LPM+
[11:07:53] [PASSED] 13.01 Xe2_HPM
[11:07:53] [PASSED] 20.00 Xe2_LPM
[11:07:53] [PASSED] 30.00 Xe3_LPM
[11:07:53] [PASSED] 30.02 Xe3_LPM
[11:07:53] [PASSED] 35.00 Xe3p_LPM
[11:07:53] [PASSED] 35.03 Xe3p_HPM
[11:07:53] ================= [PASSED] check_media_ip ==================
[11:07:53] =================== check_platform_desc ===================
[11:07:53] [PASSED] 0x9A60 (TIGERLAKE)
[11:07:53] [PASSED] 0x9A68 (TIGERLAKE)
[11:07:53] [PASSED] 0x9A70 (TIGERLAKE)
[11:07:53] [PASSED] 0x9A40 (TIGERLAKE)
[11:07:53] [PASSED] 0x9A49 (TIGERLAKE)
[11:07:53] [PASSED] 0x9A59 (TIGERLAKE)
[11:07:53] [PASSED] 0x9A78 (TIGERLAKE)
[11:07:53] [PASSED] 0x9AC0 (TIGERLAKE)
[11:07:53] [PASSED] 0x9AC9 (TIGERLAKE)
[11:07:53] [PASSED] 0x9AD9 (TIGERLAKE)
[11:07:53] [PASSED] 0x9AF8 (TIGERLAKE)
[11:07:53] [PASSED] 0x4C80 (ROCKETLAKE)
[11:07:53] [PASSED] 0x4C8A (ROCKETLAKE)
[11:07:53] [PASSED] 0x4C8B (ROCKETLAKE)
[11:07:53] [PASSED] 0x4C8C (ROCKETLAKE)
[11:07:53] [PASSED] 0x4C90 (ROCKETLAKE)
[11:07:53] [PASSED] 0x4C9A (ROCKETLAKE)
[11:07:53] [PASSED] 0x4680 (ALDERLAKE_S)
[11:07:53] [PASSED] 0x4682 (ALDERLAKE_S)
[11:07:53] [PASSED] 0x4688 (ALDERLAKE_S)
[11:07:53] [PASSED] 0x468A (ALDERLAKE_S)
[11:07:53] [PASSED] 0x468B (ALDERLAKE_S)
[11:07:53] [PASSED] 0x4690 (ALDERLAKE_S)
[11:07:53] [PASSED] 0x4692 (ALDERLAKE_S)
[11:07:53] [PASSED] 0x4693 (ALDERLAKE_S)
[11:07:53] [PASSED] 0x46A0 (ALDERLAKE_P)
[11:07:53] [PASSED] 0x46A1 (ALDERLAKE_P)
[11:07:53] [PASSED] 0x46A2 (ALDERLAKE_P)
[11:07:53] [PASSED] 0x46A3 (ALDERLAKE_P)
[11:07:53] [PASSED] 0x46A6 (ALDERLAKE_P)
[11:07:53] [PASSED] 0x46A8 (ALDERLAKE_P)
[11:07:53] [PASSED] 0x46AA (ALDERLAKE_P)
[11:07:53] [PASSED] 0x462A (ALDERLAKE_P)
[11:07:53] [PASSED] 0x4626 (ALDERLAKE_P)
[11:07:53] [PASSED] 0x4628 (ALDERLAKE_P)
[11:07:53] [PASSED] 0x46B0 (ALDERLAKE_P)
[11:07:53] [PASSED] 0x46B1 (ALDERLAKE_P)
[11:07:53] [PASSED] 0x46B2 (ALDERLAKE_P)
[11:07:53] [PASSED] 0x46B3 (ALDERLAKE_P)
[11:07:53] [PASSED] 0x46C0 (ALDERLAKE_P)
[11:07:53] [PASSED] 0x46C1 (ALDERLAKE_P)
[11:07:53] [PASSED] 0x46C2 (ALDERLAKE_P)
[11:07:53] [PASSED] 0x46C3 (ALDERLAKE_P)
[11:07:53] [PASSED] 0x46D0 (ALDERLAKE_N)
[11:07:53] [PASSED] 0x46D1 (ALDERLAKE_N)
[11:07:53] [PASSED] 0x46D2 (ALDERLAKE_N)
[11:07:53] [PASSED] 0x46D3 (ALDERLAKE_N)
[11:07:53] [PASSED] 0x46D4 (ALDERLAKE_N)
[11:07:53] [PASSED] 0xA721 (ALDERLAKE_P)
[11:07:53] [PASSED] 0xA7A1 (ALDERLAKE_P)
[11:07:53] [PASSED] 0xA7A9 (ALDERLAKE_P)
[11:07:53] [PASSED] 0xA7AC (ALDERLAKE_P)
[11:07:53] [PASSED] 0xA7AD (ALDERLAKE_P)
[11:07:53] [PASSED] 0xA720 (ALDERLAKE_P)
[11:07:53] [PASSED] 0xA7A0 (ALDERLAKE_P)
[11:07:53] [PASSED] 0xA7A8 (ALDERLAKE_P)
[11:07:53] [PASSED] 0xA7AA (ALDERLAKE_P)
[11:07:53] [PASSED] 0xA7AB (ALDERLAKE_P)
[11:07:53] [PASSED] 0xA780 (ALDERLAKE_S)
[11:07:53] [PASSED] 0xA781 (ALDERLAKE_S)
[11:07:53] [PASSED] 0xA782 (ALDERLAKE_S)
[11:07:53] [PASSED] 0xA783 (ALDERLAKE_S)
[11:07:53] [PASSED] 0xA788 (ALDERLAKE_S)
[11:07:53] [PASSED] 0xA789 (ALDERLAKE_S)
[11:07:53] [PASSED] 0xA78A (ALDERLAKE_S)
[11:07:53] [PASSED] 0xA78B (ALDERLAKE_S)
[11:07:53] [PASSED] 0x4905 (DG1)
[11:07:53] [PASSED] 0x4906 (DG1)
[11:07:53] [PASSED] 0x4907 (DG1)
[11:07:53] [PASSED] 0x4908 (DG1)
[11:07:53] [PASSED] 0x4909 (DG1)
[11:07:53] [PASSED] 0x56C0 (DG2)
[11:07:53] [PASSED] 0x56C2 (DG2)
[11:07:53] [PASSED] 0x56C1 (DG2)
[11:07:53] [PASSED] 0x7D51 (METEORLAKE)
[11:07:53] [PASSED] 0x7DD1 (METEORLAKE)
[11:07:53] [PASSED] 0x7D41 (METEORLAKE)
[11:07:53] [PASSED] 0x7D67 (METEORLAKE)
[11:07:53] [PASSED] 0xB640 (METEORLAKE)
[11:07:53] [PASSED] 0x56A0 (DG2)
[11:07:53] [PASSED] 0x56A1 (DG2)
[11:07:53] [PASSED] 0x56A2 (DG2)
[11:07:53] [PASSED] 0x56BE (DG2)
[11:07:53] [PASSED] 0x56BF (DG2)
[11:07:53] [PASSED] 0x5690 (DG2)
[11:07:53] [PASSED] 0x5691 (DG2)
[11:07:53] [PASSED] 0x5692 (DG2)
[11:07:53] [PASSED] 0x56A5 (DG2)
[11:07:53] [PASSED] 0x56A6 (DG2)
[11:07:53] [PASSED] 0x56B0 (DG2)
[11:07:53] [PASSED] 0x56B1 (DG2)
[11:07:53] [PASSED] 0x56BA (DG2)
[11:07:53] [PASSED] 0x56BB (DG2)
[11:07:53] [PASSED] 0x56BC (DG2)
[11:07:53] [PASSED] 0x56BD (DG2)
[11:07:53] [PASSED] 0x5693 (DG2)
[11:07:53] [PASSED] 0x5694 (DG2)
[11:07:53] [PASSED] 0x5695 (DG2)
[11:07:53] [PASSED] 0x56A3 (DG2)
[11:07:53] [PASSED] 0x56A4 (DG2)
[11:07:53] [PASSED] 0x56B2 (DG2)
[11:07:53] [PASSED] 0x56B3 (DG2)
[11:07:53] [PASSED] 0x5696 (DG2)
[11:07:53] [PASSED] 0x5697 (DG2)
[11:07:53] [PASSED] 0xB69 (PVC)
[11:07:53] [PASSED] 0xB6E (PVC)
[11:07:53] [PASSED] 0xBD4 (PVC)
[11:07:53] [PASSED] 0xBD5 (PVC)
[11:07:53] [PASSED] 0xBD6 (PVC)
[11:07:53] [PASSED] 0xBD7 (PVC)
[11:07:53] [PASSED] 0xBD8 (PVC)
[11:07:53] [PASSED] 0xBD9 (PVC)
[11:07:53] [PASSED] 0xBDA (PVC)
[11:07:53] [PASSED] 0xBDB (PVC)
[11:07:53] [PASSED] 0xBE0 (PVC)
[11:07:53] [PASSED] 0xBE1 (PVC)
[11:07:53] [PASSED] 0xBE5 (PVC)
[11:07:53] [PASSED] 0x7D40 (METEORLAKE)
[11:07:53] [PASSED] 0x7D45 (METEORLAKE)
[11:07:53] [PASSED] 0x7D55 (METEORLAKE)
[11:07:53] [PASSED] 0x7D60 (METEORLAKE)
[11:07:53] [PASSED] 0x7DD5 (METEORLAKE)
[11:07:53] [PASSED] 0x6420 (LUNARLAKE)
[11:07:53] [PASSED] 0x64A0 (LUNARLAKE)
[11:07:53] [PASSED] 0x64B0 (LUNARLAKE)
[11:07:53] [PASSED] 0xE202 (BATTLEMAGE)
[11:07:53] [PASSED] 0xE209 (BATTLEMAGE)
[11:07:53] [PASSED] 0xE20B (BATTLEMAGE)
[11:07:53] [PASSED] 0xE20C (BATTLEMAGE)
[11:07:53] [PASSED] 0xE20D (BATTLEMAGE)
[11:07:53] [PASSED] 0xE210 (BATTLEMAGE)
[11:07:53] [PASSED] 0xE211 (BATTLEMAGE)
[11:07:53] [PASSED] 0xE212 (BATTLEMAGE)
[11:07:53] [PASSED] 0xE216 (BATTLEMAGE)
[11:07:53] [PASSED] 0xE220 (BATTLEMAGE)
[11:07:53] [PASSED] 0xE221 (BATTLEMAGE)
[11:07:53] [PASSED] 0xE222 (BATTLEMAGE)
[11:07:53] [PASSED] 0xE223 (BATTLEMAGE)
[11:07:53] [PASSED] 0xB080 (PANTHERLAKE)
[11:07:53] [PASSED] 0xB081 (PANTHERLAKE)
[11:07:53] [PASSED] 0xB082 (PANTHERLAKE)
[11:07:53] [PASSED] 0xB083 (PANTHERLAKE)
[11:07:53] [PASSED] 0xB084 (PANTHERLAKE)
[11:07:53] [PASSED] 0xB085 (PANTHERLAKE)
[11:07:53] [PASSED] 0xB086 (PANTHERLAKE)
[11:07:53] [PASSED] 0xB087 (PANTHERLAKE)
[11:07:53] [PASSED] 0xB08F (PANTHERLAKE)
[11:07:53] [PASSED] 0xB090 (PANTHERLAKE)
[11:07:53] [PASSED] 0xB0A0 (PANTHERLAKE)
[11:07:53] [PASSED] 0xB0B0 (PANTHERLAKE)
[11:07:53] [PASSED] 0xFD80 (PANTHERLAKE)
[11:07:53] [PASSED] 0xFD81 (PANTHERLAKE)
[11:07:53] [PASSED] 0xD740 (NOVALAKE_S)
[11:07:53] [PASSED] 0xD741 (NOVALAKE_S)
[11:07:53] [PASSED] 0xD742 (NOVALAKE_S)
[11:07:53] [PASSED] 0xD743 (NOVALAKE_S)
[11:07:53] [PASSED] 0xD745 (NOVALAKE_S)
[11:07:53] [PASSED] 0xD74A (NOVALAKE_S)
[11:07:53] [PASSED] 0xD74B (NOVALAKE_S)
[11:07:53] [PASSED] 0x674C (CRESCENTISLAND)
[11:07:53] [PASSED] 0x674D (CRESCENTISLAND)
[11:07:53] [PASSED] 0x674E (CRESCENTISLAND)
[11:07:53] [PASSED] 0x674F (CRESCENTISLAND)
[11:07:53] [PASSED] 0x6750 (CRESCENTISLAND)
[11:07:53] [PASSED] 0xD750 (NOVALAKE_P)
[11:07:53] [PASSED] 0xD751 (NOVALAKE_P)
[11:07:53] [PASSED] 0xD752 (NOVALAKE_P)
[11:07:53] [PASSED] 0xD753 (NOVALAKE_P)
[11:07:53] [PASSED] 0xD754 (NOVALAKE_P)
[11:07:53] [PASSED] 0xD755 (NOVALAKE_P)
[11:07:53] [PASSED] 0xD756 (NOVALAKE_P)
[11:07:53] [PASSED] 0xD757 (NOVALAKE_P)
[11:07:53] [PASSED] 0xD75F (NOVALAKE_P)
[11:07:53] =============== [PASSED] check_platform_desc ===============
[11:07:53] ===================== [PASSED] xe_pci ======================
[11:07:53] ============= xe_rtp_tables_test (5 subtests) ==============
[11:07:53] ================== xe_rtp_table_gt_test ===================
[11:07:53] [PASSED] gt_was/14011060649
[11:07:53] [PASSED] gt_was/14011059788
[11:07:53] [PASSED] gt_was/14015795083
[11:07:53] [PASSED] gt_was/16021867713
[11:07:53] [PASSED] gt_was/14019449301
[11:07:53] [PASSED] gt_was/16028005424
[11:07:53] [PASSED] gt_was/14026578760
[11:07:53] [PASSED] gt_was/1409420604
[11:07:53] [PASSED] gt_was/1408615072
[11:07:53] [PASSED] gt_was/22010523718
[11:07:53] [PASSED] gt_was/14011006942
[11:07:53] [PASSED] gt_was/14014830051
[11:07:53] [PASSED] gt_was/18018781329
[11:07:53] [PASSED] gt_was/1509235366
[11:07:53] [PASSED] gt_was/18018781329
[11:07:53] [PASSED] gt_was/16016694945
[11:07:53] [PASSED] gt_was/14018575942
[11:07:53] [PASSED] gt_was/22016670082
[11:07:53] [PASSED] gt_was/22016670082
[11:07:53] [PASSED] gt_was/14017421178
[11:07:53] [PASSED] gt_was/16025250150
[11:07:53] [PASSED] gt_was/14021871409
[11:07:53] [PASSED] gt_was/16021865536
[11:07:53] [PASSED] gt_was/14021486841
[11:07:53] [PASSED] gt_was/14025160223
[11:07:53] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[11:07:53] [PASSED] gt_was/14025635424
[11:07:53] [PASSED] gt_was/16028005424
[11:07:53] ============== [PASSED] xe_rtp_table_gt_test ===============
[11:07:53] ================== xe_rtp_table_gt_test ===================
[11:07:53] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[11:07:53] [PASSED] gt_tunings/Tuning: 32B Access Enable
[11:07:53] [PASSED] gt_tunings/Tuning: L3 cache
[11:07:53] [PASSED] gt_tunings/Tuning: L3 cache - media
[11:07:53] [PASSED] gt_tunings/Tuning: Compression Overfetch
[11:07:53] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[11:07:53] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[11:07:53] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[11:07:53] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[11:07:53] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[11:07:53] [PASSED] gt_tunings/Tuning: Stateless compression control
[11:07:53] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[11:07:53] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[11:07:53] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[11:07:53] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[11:07:53] ============== [PASSED] xe_rtp_table_gt_test ===============
[11:07:53] ================== xe_rtp_table_oob_test ==================
[11:07:53] [PASSED] oob_was/1607983814
[11:07:53] [PASSED] oob_was/16010904313
[11:07:53] [PASSED] oob_was/18022495364
[11:07:53] [PASSED] oob_was/22012773006
[11:07:53] [PASSED] oob_was/14014475959
[11:07:53] [PASSED] oob_was/22011391025
[11:07:53] [PASSED] oob_was/22012727170
[11:07:53] [PASSED] oob_was/22012727685
[11:07:53] [PASSED] oob_was/22016596838
[11:07:53] [PASSED] oob_was/18020744125
[11:07:53] [PASSED] oob_was/1409600907
[11:07:53] [PASSED] oob_was/22014953428
[11:07:53] [PASSED] oob_was/16017236439
[11:07:53] [PASSED] oob_was/14019821291
[11:07:53] [PASSED] oob_was/14015076503
[11:07:53] [PASSED] oob_was/14018913170
[11:07:53] [PASSED] oob_was/14018094691
[11:07:53] [PASSED] oob_was/18024947630
[11:07:53] [PASSED] oob_was/16022287689
[11:07:53] [PASSED] oob_was/13011645652
[11:07:53] [PASSED] oob_was/14022293748
[11:07:53] [PASSED] oob_was/22019794406
[11:07:53] [PASSED] oob_was/22019338487
[11:07:53] [PASSED] oob_was/16023588340
[11:07:53] [PASSED] oob_was/14019789679
[11:07:53] [PASSED] oob_was/14022866841
[11:07:53] [PASSED] oob_was/16021333562
[11:07:53] [PASSED] oob_was/14016712196
[11:07:53] [PASSED] oob_was/14015568240
[11:07:53] [PASSED] oob_was/18013179988
[11:07:53] [PASSED] oob_was/1508761755
[11:07:53] [PASSED] oob_was/16023105232
[11:07:53] [PASSED] oob_was/16026508708
[11:07:53] [PASSED] oob_was/14020001231
[11:07:53] [PASSED] oob_was/16023683509
[11:07:53] [PASSED] oob_was/14025515070
[11:07:53] [PASSED] oob_was/15015404425_disable
[11:07:53] [PASSED] oob_was/16026007364
[11:07:53] [PASSED] oob_was/14020316580
[11:07:53] [PASSED] oob_was/14025883347
[11:07:53] [PASSED] oob_was/16029380221
[11:07:53] [PASSED] oob_was/22022079272
[11:07:53] [PASSED] oob_was/16029897822
[11:07:53] [PASSED] oob_was/14027054324
[11:07:53] ============== [PASSED] xe_rtp_table_oob_test ==============
[11:07:53] ================ xe_rtp_table_dev_oob_test ================
[11:07:53] [PASSED] device_oob_was/22010954014
[11:07:53] [PASSED] device_oob_was/15015404425
[11:07:53] [PASSED] device_oob_was/22019338487_display
[11:07:53] [PASSED] device_oob_was/14022085890
[11:07:53] [PASSED] device_oob_was/14026539277
[11:07:53] [PASSED] device_oob_was/14026633728
[11:07:53] [PASSED] device_oob_was/14026746987
[11:07:53] [PASSED] device_oob_was/14026779378
[11:07:53] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[11:07:53] ========== xe_rtp_table_missing_upper_bound_test ==========
[11:07:53] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[11:07:53] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[11:07:53] [PASSED] register_whitelist/1806527549
[11:07:53] [PASSED] register_whitelist/allow_read_ctx_timestamp
[11:07:53] [PASSED] register_whitelist/allow_read_queue_timestamp
[11:07:53] [PASSED] register_whitelist/16014440446
[11:07:53] [PASSED] register_whitelist/16017236439
[11:07:53] [PASSED] register_whitelist/16020183090
[11:07:53] [PASSED] register_whitelist/14024997852
[11:07:53] [PASSED] register_whitelist/14024997852
[11:07:53] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[11:07:53] =============== [PASSED] xe_rtp_tables_test ================
[11:07:53] =================== xe_rtp (3 subtests) ====================
[11:07:53] =================== xe_rtp_rules_tests ====================
[11:07:53] [PASSED] no
[11:07:53] [PASSED] yes
[11:07:53] [PASSED] no-and-no
[11:07:53] [PASSED] no-and-yes
[11:07:53] [PASSED] yes-and-no
[11:07:53] [PASSED] yes-and-yes
[11:07:53] [PASSED] no-or-no
[11:07:53] [PASSED] no-or-yes
[11:07:53] [PASSED] yes-or-no
[11:07:53] [PASSED] yes-or-yes
[11:07:53] [PASSED] no-yes-or-yes-no
[11:07:53] [PASSED] no-yes-or-yes-yes
[11:07:53] [PASSED] yes-yes-or-no-yes
[11:07:53] [PASSED] yes-yes-or-yes-yes
[11:07:53] [PASSED] no-no-or-yes-or-no
[11:07:53] [PASSED] or
[11:07:53] [PASSED] or-yes
[11:07:53] [PASSED] or-no
[11:07:53] [PASSED] yes-or
[11:07:53] [PASSED] no-or
[11:07:53] [PASSED] no-or-or-yes
[11:07:53] [PASSED] yes-or-or-no
[11:07:53] [PASSED] no-or-or-no
[11:07:53] [PASSED] missing-context-engine-class
[11:07:53] [PASSED] missing-context-engine-class-or-yes
[11:07:53] [PASSED] missing-context-engine-class-or-or-yes
[11:07:53] =============== [PASSED] xe_rtp_rules_tests ================
[11:07:53] =============== xe_rtp_process_to_sr_tests ================
[11:07:53] [PASSED] coalesce-same-reg
[11:07:53] [PASSED] coalesce-same-reg-literal-and-func
[11:07:53] [PASSED] no-match-no-add
[11:07:53] [PASSED] two-regs-two-entries
[11:07:53] [PASSED] clr-one-set-other
[11:07:53] [PASSED] set-field
[11:07:53] [PASSED] conflict-duplicate
[11:07:53] [PASSED] conflict-not-disjoint
[11:07:53] [PASSED] conflict-not-disjoint-literal-and-func
[11:07:53] [PASSED] conflict-reg-type
[11:07:53] [PASSED] bad-mcr-reg-forced-to-regular
[11:07:53] [PASSED] bad-regular-reg-forced-to-mcr
[11:07:53] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[11:07:53] ================== xe_rtp_process_tests ===================
[11:07:53] [PASSED] active1
[11:07:53] [PASSED] active2
[11:07:53] [PASSED] active-inactive
[11:07:53] [PASSED] inactive-active
[11:07:53] [PASSED] inactive-active-inactive
[11:07:53] [PASSED] inactive-inactive-inactive
[11:07:53] ============== [PASSED] xe_rtp_process_tests ===============
[11:07:53] ===================== [PASSED] xe_rtp ======================
[11:07:53] ==================== xe_wa (1 subtest) =====================
[11:07:53] ======================== xe_wa_gt =========================
[11:07:53] [PASSED] TIGERLAKE B0
[11:07:53] [PASSED] DG1 A0
[11:07:53] [PASSED] DG1 B0
[11:07:53] [PASSED] ALDERLAKE_S A0
[11:07:53] [PASSED] ALDERLAKE_S B0
[11:07:53] [PASSED] ALDERLAKE_S C0
[11:07:53] [PASSED] ALDERLAKE_S D0
[11:07:53] [PASSED] ALDERLAKE_P A0
[11:07:53] [PASSED] ALDERLAKE_P B0
[11:07:53] [PASSED] ALDERLAKE_P C0
[11:07:53] [PASSED] ALDERLAKE_S RPLS D0
[11:07:53] [PASSED] ALDERLAKE_P RPLU E0
[11:07:53] [PASSED] DG2 G10 C0
[11:07:53] [PASSED] DG2 G11 B1
[11:07:53] [PASSED] DG2 G12 A1
[11:07:53] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[11:07:53] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[11:07:53] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[11:07:53] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[11:07:53] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[11:07:53] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[11:07:53] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[11:07:53] ==================== [PASSED] xe_wa_gt =====================
[11:07:53] ====================== [PASSED] xe_wa ======================
[11:07:53] ============================================================
[11:07:53] Testing complete. Ran 742 tests: passed: 724, skipped: 18
[11:07:53] Elapsed time: 36.926s total, 4.335s configuring, 31.925s building, 0.637s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[11:07:54] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[11:07:55] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[11:08:20] Starting KUnit Kernel (1/1)...
[11:08:20] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[11:08:20] ============ drm_test_pick_cmdline (2 subtests) ============
[11:08:20] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[11:08:20] =============== drm_test_pick_cmdline_named ===============
[11:08:20] [PASSED] NTSC
[11:08:20] [PASSED] NTSC-J
[11:08:20] [PASSED] PAL
[11:08:20] [PASSED] PAL-M
[11:08:20] =========== [PASSED] drm_test_pick_cmdline_named ===========
[11:08:20] ============== [PASSED] drm_test_pick_cmdline ==============
[11:08:20] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[11:08:20] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[11:08:20] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[11:08:20] =========== drm_validate_clone_mode (2 subtests) ===========
[11:08:20] ============== drm_test_check_in_clone_mode ===============
[11:08:20] [PASSED] in_clone_mode
[11:08:20] [PASSED] not_in_clone_mode
[11:08:20] ========== [PASSED] drm_test_check_in_clone_mode ===========
[11:08:20] =============== drm_test_check_valid_clones ===============
[11:08:20] [PASSED] not_in_clone_mode
[11:08:20] [PASSED] valid_clone
[11:08:20] [PASSED] invalid_clone
[11:08:20] =========== [PASSED] drm_test_check_valid_clones ===========
[11:08:20] ============= [PASSED] drm_validate_clone_mode =============
[11:08:20] ============= drm_validate_modeset (1 subtest) =============
[11:08:20] [PASSED] drm_test_check_connector_changed_modeset
[11:08:20] ============== [PASSED] drm_validate_modeset ===============
[11:08:20] ====== drm_test_bridge_get_current_state (1 subtest) =======
[11:08:20] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[11:08:20] ======== [PASSED] drm_test_bridge_get_current_state ========
[11:08:20] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[11:08:20] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[11:08:20] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[11:08:20] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[11:08:20] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[11:08:20] ============== drm_bridge_alloc (2 subtests) ===============
[11:08:20] [PASSED] drm_test_drm_bridge_alloc_basic
[11:08:20] [PASSED] drm_test_drm_bridge_alloc_get_put
[11:08:20] ================ [PASSED] drm_bridge_alloc =================
[11:08:20] ============= drm_bridge_bus_fmt (5 subtests) ==============
[11:08:20] [PASSED] drm_test_bridge_rgb_yuv_rgb
[11:08:20] [PASSED] drm_test_bridge_must_convert_to_yuv444
[11:08:20] [PASSED] drm_test_bridge_hdmi_auto_rgb
[11:08:20] [PASSED] drm_test_bridge_auto_first
[11:08:20] [PASSED] drm_test_bridge_rgb_yuv_no_path
[11:08:20] =============== [PASSED] drm_bridge_bus_fmt ================
[11:08:20] ============= drm_cmdline_parser (40 subtests) =============
[11:08:20] [PASSED] drm_test_cmdline_force_d_only
[11:08:20] [PASSED] drm_test_cmdline_force_D_only_dvi
[11:08:20] [PASSED] drm_test_cmdline_force_D_only_hdmi
[11:08:20] [PASSED] drm_test_cmdline_force_D_only_not_digital
[11:08:20] [PASSED] drm_test_cmdline_force_e_only
[11:08:20] [PASSED] drm_test_cmdline_res
[11:08:20] [PASSED] drm_test_cmdline_res_vesa
[11:08:20] [PASSED] drm_test_cmdline_res_vesa_rblank
[11:08:20] [PASSED] drm_test_cmdline_res_rblank
[11:08:20] [PASSED] drm_test_cmdline_res_bpp
[11:08:20] [PASSED] drm_test_cmdline_res_refresh
[11:08:20] [PASSED] drm_test_cmdline_res_bpp_refresh
[11:08:20] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[11:08:20] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[11:08:20] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[11:08:20] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[11:08:20] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[11:08:20] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[11:08:20] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[11:08:20] [PASSED] drm_test_cmdline_res_margins_force_on
[11:08:20] [PASSED] drm_test_cmdline_res_vesa_margins
[11:08:20] [PASSED] drm_test_cmdline_name
[11:08:20] [PASSED] drm_test_cmdline_name_bpp
[11:08:20] [PASSED] drm_test_cmdline_name_option
[11:08:20] [PASSED] drm_test_cmdline_name_bpp_option
[11:08:20] [PASSED] drm_test_cmdline_rotate_0
[11:08:20] [PASSED] drm_test_cmdline_rotate_90
[11:08:20] [PASSED] drm_test_cmdline_rotate_180
[11:08:20] [PASSED] drm_test_cmdline_rotate_270
[11:08:20] [PASSED] drm_test_cmdline_hmirror
[11:08:20] [PASSED] drm_test_cmdline_vmirror
[11:08:20] [PASSED] drm_test_cmdline_margin_options
[11:08:20] [PASSED] drm_test_cmdline_multiple_options
[11:08:20] [PASSED] drm_test_cmdline_bpp_extra_and_option
[11:08:20] [PASSED] drm_test_cmdline_extra_and_option
[11:08:20] [PASSED] drm_test_cmdline_freestanding_options
[11:08:20] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[11:08:20] [PASSED] drm_test_cmdline_panel_orientation
[11:08:20] ================ drm_test_cmdline_invalid =================
[11:08:20] [PASSED] margin_only
[11:08:20] [PASSED] interlace_only
[11:08:20] [PASSED] res_missing_x
[11:08:20] [PASSED] res_missing_y
[11:08:20] [PASSED] res_bad_y
[11:08:20] [PASSED] res_missing_y_bpp
[11:08:20] [PASSED] res_bad_bpp
[11:08:20] [PASSED] res_bad_refresh
[11:08:20] [PASSED] res_bpp_refresh_force_on_off
[11:08:20] [PASSED] res_invalid_mode
[11:08:20] [PASSED] res_bpp_wrong_place_mode
[11:08:20] [PASSED] name_bpp_refresh
[11:08:20] [PASSED] name_refresh
[11:08:20] [PASSED] name_refresh_wrong_mode
[11:08:20] [PASSED] name_refresh_invalid_mode
[11:08:20] [PASSED] rotate_multiple
[11:08:20] [PASSED] rotate_invalid_val
[11:08:20] [PASSED] rotate_truncated
[11:08:20] [PASSED] invalid_option
[11:08:20] [PASSED] invalid_tv_option
[11:08:20] [PASSED] truncated_tv_option
[11:08:20] ============ [PASSED] drm_test_cmdline_invalid =============
[11:08:20] =============== drm_test_cmdline_tv_options ===============
[11:08:20] [PASSED] NTSC
[11:08:20] [PASSED] NTSC_443
[11:08:20] [PASSED] NTSC_J
[11:08:20] [PASSED] PAL
[11:08:20] [PASSED] PAL_M
[11:08:20] [PASSED] PAL_N
[11:08:20] [PASSED] SECAM
[11:08:20] [PASSED] MONO_525
[11:08:20] [PASSED] MONO_625
[11:08:20] =========== [PASSED] drm_test_cmdline_tv_options ===========
[11:08:20] =============== [PASSED] drm_cmdline_parser ================
[11:08:20] ========== drmm_connector_hdmi_init (20 subtests) ==========
[11:08:20] [PASSED] drm_test_connector_hdmi_init_valid
[11:08:20] [PASSED] drm_test_connector_hdmi_init_bpc_8
[11:08:20] [PASSED] drm_test_connector_hdmi_init_bpc_10
[11:08:20] [PASSED] drm_test_connector_hdmi_init_bpc_12
[11:08:20] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[11:08:20] [PASSED] drm_test_connector_hdmi_init_bpc_null
[11:08:20] [PASSED] drm_test_connector_hdmi_init_formats_empty
[11:08:20] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[11:08:20] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[11:08:20] [PASSED] supported_formats=0x9 yuv420_allowed=1
[11:08:20] [PASSED] supported_formats=0x9 yuv420_allowed=0
[11:08:20] [PASSED] supported_formats=0x5 yuv420_allowed=1
[11:08:20] [PASSED] supported_formats=0x5 yuv420_allowed=0
[11:08:20] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[11:08:20] [PASSED] drm_test_connector_hdmi_init_null_ddc
[11:08:20] [PASSED] drm_test_connector_hdmi_init_null_product
[11:08:20] [PASSED] drm_test_connector_hdmi_init_null_vendor
[11:08:20] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[11:08:20] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[11:08:20] [PASSED] drm_test_connector_hdmi_init_product_valid
[11:08:20] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[11:08:20] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[11:08:20] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[11:08:20] ========= drm_test_connector_hdmi_init_type_valid =========
[11:08:20] [PASSED] HDMI-A
[11:08:20] [PASSED] HDMI-B
[11:08:20] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[11:08:20] ======== drm_test_connector_hdmi_init_type_invalid ========
[11:08:20] [PASSED] Unknown
[11:08:20] [PASSED] VGA
[11:08:20] [PASSED] DVI-I
[11:08:20] [PASSED] DVI-D
[11:08:20] [PASSED] DVI-A
[11:08:20] [PASSED] Composite
[11:08:20] [PASSED] SVIDEO
[11:08:20] [PASSED] LVDS
[11:08:20] [PASSED] Component
[11:08:20] [PASSED] DIN
[11:08:20] [PASSED] DP
[11:08:20] [PASSED] TV
[11:08:20] [PASSED] eDP
[11:08:20] [PASSED] Virtual
[11:08:20] [PASSED] DSI
[11:08:20] [PASSED] DPI
[11:08:20] [PASSED] Writeback
[11:08:20] [PASSED] SPI
[11:08:20] [PASSED] USB
[11:08:20] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[11:08:20] ============ [PASSED] drmm_connector_hdmi_init =============
[11:08:20] ============= drmm_connector_init (3 subtests) =============
[11:08:20] [PASSED] drm_test_drmm_connector_init
[11:08:20] [PASSED] drm_test_drmm_connector_init_null_ddc
[11:08:20] ========= drm_test_drmm_connector_init_type_valid =========
[11:08:20] [PASSED] Unknown
[11:08:20] [PASSED] VGA
[11:08:20] [PASSED] DVI-I
[11:08:20] [PASSED] DVI-D
[11:08:20] [PASSED] DVI-A
[11:08:20] [PASSED] Composite
[11:08:20] [PASSED] SVIDEO
[11:08:20] [PASSED] LVDS
[11:08:20] [PASSED] Component
[11:08:20] [PASSED] DIN
[11:08:20] [PASSED] DP
[11:08:20] [PASSED] HDMI-A
[11:08:20] [PASSED] HDMI-B
[11:08:20] [PASSED] TV
[11:08:20] [PASSED] eDP
[11:08:20] [PASSED] Virtual
[11:08:20] [PASSED] DSI
[11:08:20] [PASSED] DPI
[11:08:20] [PASSED] Writeback
[11:08:20] [PASSED] SPI
[11:08:20] [PASSED] USB
[11:08:20] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[11:08:20] =============== [PASSED] drmm_connector_init ===============
[11:08:20] ========= drm_connector_dynamic_init (6 subtests) ==========
[11:08:20] [PASSED] drm_test_drm_connector_dynamic_init
[11:08:20] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[11:08:20] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[11:08:20] [PASSED] drm_test_drm_connector_dynamic_init_properties
[11:08:20] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[11:08:20] [PASSED] Unknown
[11:08:20] [PASSED] VGA
[11:08:20] [PASSED] DVI-I
[11:08:20] [PASSED] DVI-D
[11:08:20] [PASSED] DVI-A
[11:08:20] [PASSED] Composite
[11:08:20] [PASSED] SVIDEO
[11:08:20] [PASSED] LVDS
[11:08:20] [PASSED] Component
[11:08:20] [PASSED] DIN
[11:08:20] [PASSED] DP
[11:08:20] [PASSED] HDMI-A
[11:08:20] [PASSED] HDMI-B
[11:08:20] [PASSED] TV
[11:08:20] [PASSED] eDP
[11:08:20] [PASSED] Virtual
[11:08:20] [PASSED] DSI
[11:08:20] [PASSED] DPI
[11:08:20] [PASSED] Writeback
[11:08:20] [PASSED] SPI
[11:08:20] [PASSED] USB
[11:08:20] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[11:08:20] ======== drm_test_drm_connector_dynamic_init_name =========
[11:08:20] [PASSED] Unknown
[11:08:20] [PASSED] VGA
[11:08:20] [PASSED] DVI-I
[11:08:20] [PASSED] DVI-D
[11:08:20] [PASSED] DVI-A
[11:08:20] [PASSED] Composite
[11:08:20] [PASSED] SVIDEO
[11:08:20] [PASSED] LVDS
[11:08:20] [PASSED] Component
[11:08:20] [PASSED] DIN
[11:08:20] [PASSED] DP
[11:08:20] [PASSED] HDMI-A
[11:08:20] [PASSED] HDMI-B
[11:08:20] [PASSED] TV
[11:08:20] [PASSED] eDP
[11:08:20] [PASSED] Virtual
[11:08:20] [PASSED] DSI
[11:08:20] [PASSED] DPI
[11:08:20] [PASSED] Writeback
[11:08:20] [PASSED] SPI
[11:08:20] [PASSED] USB
[11:08:20] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[11:08:20] =========== [PASSED] drm_connector_dynamic_init ============
[11:08:20] ==== drm_connector_dynamic_register_early (4 subtests) =====
[11:08:20] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[11:08:20] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[11:08:20] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[11:08:20] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[11:08:20] ====== [PASSED] drm_connector_dynamic_register_early =======
[11:08:20] ======= drm_connector_dynamic_register (7 subtests) ========
[11:08:20] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[11:08:20] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[11:08:20] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[11:08:20] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[11:08:20] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[11:08:20] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[11:08:20] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[11:08:20] ========= [PASSED] drm_connector_dynamic_register ==========
[11:08:20] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[11:08:20] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[11:08:20] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[11:08:20] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[11:08:20] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[11:08:20] ========== drm_test_get_tv_mode_from_name_valid ===========
[11:08:20] [PASSED] NTSC
[11:08:20] [PASSED] NTSC-443
[11:08:20] [PASSED] NTSC-J
[11:08:20] [PASSED] PAL
[11:08:20] [PASSED] PAL-M
[11:08:20] [PASSED] PAL-N
[11:08:20] [PASSED] SECAM
[11:08:20] [PASSED] Mono
[11:08:20] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[11:08:20] [PASSED] drm_test_get_tv_mode_from_name_truncated
[11:08:20] ============ [PASSED] drm_get_tv_mode_from_name ============
[11:08:20] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[11:08:20] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[11:08:20] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[11:08:20] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[11:08:20] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[11:08:20] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[11:08:20] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[11:08:20] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[11:08:20] [PASSED] VIC 96
[11:08:20] [PASSED] VIC 97
[11:08:20] [PASSED] VIC 101
[11:08:20] [PASSED] VIC 102
[11:08:20] [PASSED] VIC 106
[11:08:20] [PASSED] VIC 107
[11:08:20] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[11:08:20] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[11:08:20] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[11:08:20] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[11:08:20] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[11:08:20] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[11:08:20] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[11:08:20] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[11:08:20] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[11:08:20] [PASSED] Automatic
[11:08:20] [PASSED] Full
[11:08:20] [PASSED] Limited 16:235
[11:08:20] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[11:08:20] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[11:08:20] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[11:08:20] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[11:08:20] === drm_test_drm_hdmi_connector_get_output_format_name ====
[11:08:20] [PASSED] RGB
[11:08:20] [PASSED] YUV 4:2:0
[11:08:20] [PASSED] YUV 4:2:2
[11:08:20] [PASSED] YUV 4:4:4
[11:08:20] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[11:08:20] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[11:08:20] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[11:08:20] ============= drm_damage_helper (21 subtests) ==============
[11:08:20] [PASSED] drm_test_damage_iter_no_damage
[11:08:20] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[11:08:20] [PASSED] drm_test_damage_iter_no_damage_src_moved
[11:08:20] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[11:08:20] [PASSED] drm_test_damage_iter_no_damage_not_visible
[11:08:20] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[11:08:20] [PASSED] drm_test_damage_iter_no_damage_no_fb
[11:08:20] [PASSED] drm_test_damage_iter_simple_damage
[11:08:20] [PASSED] drm_test_damage_iter_single_damage
[11:08:20] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[11:08:20] [PASSED] drm_test_damage_iter_single_damage_outside_src
[11:08:20] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[11:08:20] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[11:08:20] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[11:08:20] [PASSED] drm_test_damage_iter_single_damage_src_moved
[11:08:20] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[11:08:20] [PASSED] drm_test_damage_iter_damage
[11:08:20] [PASSED] drm_test_damage_iter_damage_one_intersect
[11:08:20] [PASSED] drm_test_damage_iter_damage_one_outside
[11:08:20] [PASSED] drm_test_damage_iter_damage_src_moved
[11:08:20] [PASSED] drm_test_damage_iter_damage_not_visible
[11:08:20] ================ [PASSED] drm_damage_helper ================
[11:08:20] ============== drm_dp_mst_helper (3 subtests) ==============
[11:08:20] ============== drm_test_dp_mst_calc_pbn_mode ==============
[11:08:20] [PASSED] Clock 154000 BPP 30 DSC disabled
[11:08:20] [PASSED] Clock 234000 BPP 30 DSC disabled
[11:08:20] [PASSED] Clock 297000 BPP 24 DSC disabled
[11:08:20] [PASSED] Clock 332880 BPP 24 DSC enabled
[11:08:20] [PASSED] Clock 324540 BPP 24 DSC enabled
[11:08:20] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[11:08:20] ============== drm_test_dp_mst_calc_pbn_div ===============
[11:08:20] [PASSED] Link rate 2000000 lane count 4
[11:08:20] [PASSED] Link rate 2000000 lane count 2
[11:08:20] [PASSED] Link rate 2000000 lane count 1
[11:08:20] [PASSED] Link rate 1350000 lane count 4
[11:08:20] [PASSED] Link rate 1350000 lane count 2
[11:08:20] [PASSED] Link rate 1350000 lane count 1
[11:08:20] [PASSED] Link rate 1000000 lane count 4
[11:08:20] [PASSED] Link rate 1000000 lane count 2
[11:08:20] [PASSED] Link rate 1000000 lane count 1
[11:08:20] [PASSED] Link rate 810000 lane count 4
[11:08:20] [PASSED] Link rate 810000 lane count 2
[11:08:20] [PASSED] Link rate 810000 lane count 1
[11:08:20] [PASSED] Link rate 540000 lane count 4
[11:08:20] [PASSED] Link rate 540000 lane count 2
[11:08:20] [PASSED] Link rate 540000 lane count 1
[11:08:20] [PASSED] Link rate 270000 lane count 4
[11:08:20] [PASSED] Link rate 270000 lane count 2
[11:08:20] [PASSED] Link rate 270000 lane count 1
[11:08:20] [PASSED] Link rate 162000 lane count 4
[11:08:20] [PASSED] Link rate 162000 lane count 2
[11:08:20] [PASSED] Link rate 162000 lane count 1
[11:08:20] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[11:08:20] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[11:08:20] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[11:08:20] [PASSED] DP_POWER_UP_PHY with port number
[11:08:20] [PASSED] DP_POWER_DOWN_PHY with port number
[11:08:20] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[11:08:20] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[11:08:20] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[11:08:20] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[11:08:20] [PASSED] DP_QUERY_PAYLOAD with port number
[11:08:20] [PASSED] DP_QUERY_PAYLOAD with VCPI
[11:08:20] [PASSED] DP_REMOTE_DPCD_READ with port number
[11:08:20] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[11:08:20] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[11:08:20] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[11:08:20] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[11:08:20] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[11:08:20] [PASSED] DP_REMOTE_I2C_READ with port number
[11:08:20] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[11:08:20] [PASSED] DP_REMOTE_I2C_READ with transactions array
[11:08:20] [PASSED] DP_REMOTE_I2C_WRITE with port number
[11:08:20] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[11:08:20] [PASSED] DP_REMOTE_I2C_WRITE with data array
[11:08:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[11:08:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[11:08:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[11:08:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[11:08:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[11:08:20] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[11:08:20] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[11:08:20] ================ [PASSED] drm_dp_mst_helper ================
[11:08:20] ================== drm_exec (7 subtests) ===================
[11:08:20] [PASSED] sanitycheck
[11:08:20] [PASSED] test_lock
[11:08:20] [PASSED] test_lock_unlock
[11:08:20] [PASSED] test_duplicates
[11:08:20] [PASSED] test_prepare
[11:08:20] [PASSED] test_prepare_array
[11:08:20] [PASSED] test_multiple_loops
[11:08:20] ==================== [PASSED] drm_exec =====================
[11:08:20] =========== drm_format_helper_test (17 subtests) ===========
[11:08:20] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[11:08:20] [PASSED] single_pixel_source_buffer
[11:08:20] [PASSED] single_pixel_clip_rectangle
[11:08:20] [PASSED] well_known_colors
[11:08:20] [PASSED] destination_pitch
[11:08:20] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[11:08:20] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[11:08:20] [PASSED] single_pixel_source_buffer
[11:08:20] [PASSED] single_pixel_clip_rectangle
[11:08:20] [PASSED] well_known_colors
[11:08:20] [PASSED] destination_pitch
[11:08:20] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[11:08:20] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[11:08:20] [PASSED] single_pixel_source_buffer
[11:08:20] [PASSED] single_pixel_clip_rectangle
[11:08:20] [PASSED] well_known_colors
[11:08:20] [PASSED] destination_pitch
[11:08:20] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[11:08:20] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[11:08:20] [PASSED] single_pixel_source_buffer
[11:08:20] [PASSED] single_pixel_clip_rectangle
[11:08:20] [PASSED] well_known_colors
[11:08:20] [PASSED] destination_pitch
[11:08:20] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[11:08:20] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[11:08:20] [PASSED] single_pixel_source_buffer
[11:08:20] [PASSED] single_pixel_clip_rectangle
[11:08:20] [PASSED] well_known_colors
[11:08:20] [PASSED] destination_pitch
[11:08:20] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[11:08:20] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[11:08:20] [PASSED] single_pixel_source_buffer
[11:08:20] [PASSED] single_pixel_clip_rectangle
[11:08:20] [PASSED] well_known_colors
[11:08:20] [PASSED] destination_pitch
[11:08:20] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[11:08:20] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[11:08:20] [PASSED] single_pixel_source_buffer
[11:08:20] [PASSED] single_pixel_clip_rectangle
[11:08:20] [PASSED] well_known_colors
[11:08:20] [PASSED] destination_pitch
[11:08:20] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[11:08:20] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[11:08:20] [PASSED] single_pixel_source_buffer
[11:08:20] [PASSED] single_pixel_clip_rectangle
[11:08:20] [PASSED] well_known_colors
[11:08:20] [PASSED] destination_pitch
[11:08:20] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[11:08:20] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[11:08:20] [PASSED] single_pixel_source_buffer
[11:08:20] [PASSED] single_pixel_clip_rectangle
[11:08:20] [PASSED] well_known_colors
[11:08:20] [PASSED] destination_pitch
[11:08:20] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[11:08:20] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[11:08:20] [PASSED] single_pixel_source_buffer
[11:08:20] [PASSED] single_pixel_clip_rectangle
[11:08:20] [PASSED] well_known_colors
[11:08:20] [PASSED] destination_pitch
[11:08:20] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[11:08:20] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[11:08:20] [PASSED] single_pixel_source_buffer
[11:08:20] [PASSED] single_pixel_clip_rectangle
[11:08:20] [PASSED] well_known_colors
[11:08:20] [PASSED] destination_pitch
[11:08:20] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[11:08:20] ============== drm_test_fb_xrgb8888_to_mono ===============
[11:08:20] [PASSED] single_pixel_source_buffer
[11:08:20] [PASSED] single_pixel_clip_rectangle
[11:08:20] [PASSED] well_known_colors
[11:08:20] [PASSED] destination_pitch
[11:08:20] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[11:08:20] ==================== drm_test_fb_swab =====================
[11:08:20] [PASSED] single_pixel_source_buffer
[11:08:20] [PASSED] single_pixel_clip_rectangle
[11:08:20] [PASSED] well_known_colors
[11:08:20] [PASSED] destination_pitch
[11:08:20] ================ [PASSED] drm_test_fb_swab =================
[11:08:20] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[11:08:20] [PASSED] single_pixel_source_buffer
[11:08:20] [PASSED] single_pixel_clip_rectangle
[11:08:20] [PASSED] well_known_colors
[11:08:20] [PASSED] destination_pitch
[11:08:20] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[11:08:20] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[11:08:20] [PASSED] single_pixel_source_buffer
[11:08:20] [PASSED] single_pixel_clip_rectangle
[11:08:20] [PASSED] well_known_colors
[11:08:20] [PASSED] destination_pitch
[11:08:20] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[11:08:20] ================= drm_test_fb_clip_offset =================
[11:08:20] [PASSED] pass through
[11:08:20] [PASSED] horizontal offset
[11:08:20] [PASSED] vertical offset
[11:08:20] [PASSED] horizontal and vertical offset
[11:08:20] [PASSED] horizontal offset (custom pitch)
[11:08:20] [PASSED] vertical offset (custom pitch)
[11:08:20] [PASSED] horizontal and vertical offset (custom pitch)
[11:08:20] ============= [PASSED] drm_test_fb_clip_offset =============
[11:08:20] =================== drm_test_fb_memcpy ====================
[11:08:20] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[11:08:20] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[11:08:20] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[11:08:20] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[11:08:20] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[11:08:20] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[11:08:20] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[11:08:20] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[11:08:20] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[11:08:20] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[11:08:20] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[11:08:20] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[11:08:20] =============== [PASSED] drm_test_fb_memcpy ================
[11:08:20] ============= [PASSED] drm_format_helper_test ==============
[11:08:20] ================= drm_format (18 subtests) =================
[11:08:20] [PASSED] drm_test_format_block_width_invalid
[11:08:20] [PASSED] drm_test_format_block_width_one_plane
[11:08:20] [PASSED] drm_test_format_block_width_two_plane
[11:08:20] [PASSED] drm_test_format_block_width_three_plane
[11:08:20] [PASSED] drm_test_format_block_width_tiled
[11:08:20] [PASSED] drm_test_format_block_height_invalid
[11:08:20] [PASSED] drm_test_format_block_height_one_plane
[11:08:20] [PASSED] drm_test_format_block_height_two_plane
[11:08:20] [PASSED] drm_test_format_block_height_three_plane
[11:08:20] [PASSED] drm_test_format_block_height_tiled
[11:08:20] [PASSED] drm_test_format_min_pitch_invalid
[11:08:20] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[11:08:20] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[11:08:20] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[11:08:20] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[11:08:20] [PASSED] drm_test_format_min_pitch_two_plane
[11:08:20] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[11:08:20] [PASSED] drm_test_format_min_pitch_tiled
[11:08:20] =================== [PASSED] drm_format ====================
[11:08:20] ============== drm_framebuffer (10 subtests) ===============
[11:08:20] ========== drm_test_framebuffer_check_src_coords ==========
[11:08:20] [PASSED] Success: source fits into fb
[11:08:20] [PASSED] Fail: overflowing fb with x-axis coordinate
[11:08:20] [PASSED] Fail: overflowing fb with y-axis coordinate
[11:08:20] [PASSED] Fail: overflowing fb with source width
[11:08:20] [PASSED] Fail: overflowing fb with source height
[11:08:20] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[11:08:20] [PASSED] drm_test_framebuffer_cleanup
[11:08:20] =============== drm_test_framebuffer_create ===============
[11:08:20] [PASSED] ABGR8888 normal sizes
[11:08:20] [PASSED] ABGR8888 max sizes
[11:08:20] [PASSED] ABGR8888 pitch greater than min required
[11:08:20] [PASSED] ABGR8888 pitch less than min required
[11:08:20] [PASSED] ABGR8888 Invalid width
[11:08:20] [PASSED] ABGR8888 Invalid buffer handle
[11:08:20] [PASSED] No pixel format
[11:08:20] [PASSED] ABGR8888 Width 0
[11:08:20] [PASSED] ABGR8888 Height 0
[11:08:20] [PASSED] ABGR8888 Out of bound height * pitch combination
[11:08:20] [PASSED] ABGR8888 Large buffer offset
[11:08:20] [PASSED] ABGR8888 Buffer offset for inexistent plane
[11:08:20] [PASSED] ABGR8888 Invalid flag
[11:08:20] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[11:08:20] [PASSED] ABGR8888 Valid buffer modifier
[11:08:20] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[11:08:20] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[11:08:20] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[11:08:20] [PASSED] NV12 Normal sizes
[11:08:20] [PASSED] NV12 Max sizes
[11:08:20] [PASSED] NV12 Invalid pitch
[11:08:20] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[11:08:20] [PASSED] NV12 different modifier per-plane
[11:08:20] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[11:08:20] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[11:08:20] [PASSED] NV12 Modifier for inexistent plane
[11:08:20] [PASSED] NV12 Handle for inexistent plane
[11:08:20] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[11:08:20] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[11:08:20] [PASSED] YVU420 Normal sizes
[11:08:20] [PASSED] YVU420 Max sizes
[11:08:20] [PASSED] YVU420 Invalid pitch
[11:08:20] [PASSED] YVU420 Different pitches
[11:08:20] [PASSED] YVU420 Different buffer offsets/pitches
[11:08:20] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[11:08:20] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[11:08:20] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[11:08:20] [PASSED] YVU420 Valid modifier
[11:08:20] [PASSED] YVU420 Different modifiers per plane
[11:08:20] [PASSED] YVU420 Modifier for inexistent plane
[11:08:20] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[11:08:20] [PASSED] X0L2 Normal sizes
[11:08:20] [PASSED] X0L2 Max sizes
[11:08:20] [PASSED] X0L2 Invalid pitch
[11:08:20] [PASSED] X0L2 Pitch greater than minimum required
[11:08:20] [PASSED] X0L2 Handle for inexistent plane
[11:08:20] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[11:08:20] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[11:08:20] [PASSED] X0L2 Valid modifier
[11:08:20] [PASSED] X0L2 Modifier for inexistent plane
[11:08:20] =========== [PASSED] drm_test_framebuffer_create ===========
[11:08:20] [PASSED] drm_test_framebuffer_free
[11:08:20] [PASSED] drm_test_framebuffer_init
[11:08:20] [PASSED] drm_test_framebuffer_init_bad_format
[11:08:20] [PASSED] drm_test_framebuffer_init_dev_mismatch
[11:08:20] [PASSED] drm_test_framebuffer_lookup
[11:08:20] [PASSED] drm_test_framebuffer_lookup_inexistent
[11:08:20] [PASSED] drm_test_framebuffer_modifiers_not_supported
[11:08:20] ================= [PASSED] drm_framebuffer =================
[11:08:20] ================ drm_gem_shmem (8 subtests) ================
[11:08:20] [PASSED] drm_gem_shmem_test_obj_create
[11:08:20] [PASSED] drm_gem_shmem_test_obj_create_private
[11:08:20] [PASSED] drm_gem_shmem_test_pin_pages
[11:08:20] [PASSED] drm_gem_shmem_test_vmap
[11:08:20] [PASSED] drm_gem_shmem_test_get_sg_table
[11:08:20] [PASSED] drm_gem_shmem_test_get_pages_sgt
[11:08:20] [PASSED] drm_gem_shmem_test_madvise
[11:08:20] [PASSED] drm_gem_shmem_test_purge
[11:08:20] ================== [PASSED] drm_gem_shmem ==================
[11:08:20] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[11:08:20] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[11:08:20] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[11:08:20] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[11:08:20] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[11:08:20] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[11:08:20] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[11:08:20] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[11:08:20] [PASSED] Automatic
[11:08:20] [PASSED] Full
[11:08:20] [PASSED] Limited 16:235
[11:08:20] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[11:08:20] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[11:08:20] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[11:08:20] [PASSED] drm_test_check_disable_connector
[11:08:20] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[11:08:20] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[11:08:20] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[11:08:20] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[11:08:20] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[11:08:20] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[11:08:20] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[11:08:20] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[11:08:20] [PASSED] drm_test_check_output_bpc_dvi
[11:08:20] [PASSED] drm_test_check_output_bpc_format_vic_1
[11:08:20] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[11:08:20] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[11:08:20] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[11:08:20] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[11:08:20] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[11:08:20] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[11:08:20] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[11:08:20] ============ drm_test_check_hdmi_color_format =============
[11:08:20] [PASSED] AUTO -> RGB
[11:08:20] [PASSED] YCBCR422 -> YUV422
[11:08:20] [PASSED] YCBCR420 -> YUV420
[11:08:20] [PASSED] YCBCR444 -> YUV444
[11:08:20] [PASSED] RGB -> RGB
[11:08:20] ======== [PASSED] drm_test_check_hdmi_color_format =========
[11:08:20] ======== drm_test_check_hdmi_color_format_420_only ========
[11:08:20] [PASSED] RGB should fail
[11:08:20] [PASSED] YUV444 should fail
[11:08:20] [PASSED] YUV422 should fail
[11:08:20] [PASSED] YUV420 should work
[11:08:20] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[11:08:20] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[11:08:20] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[11:08:20] [PASSED] drm_test_check_broadcast_rgb_value
[11:08:20] [PASSED] drm_test_check_bpc_8_value
[11:08:20] [PASSED] drm_test_check_bpc_10_value
[11:08:20] [PASSED] drm_test_check_bpc_12_value
[11:08:20] [PASSED] drm_test_check_format_value
[11:08:20] [PASSED] drm_test_check_tmds_char_value
[11:08:20] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[11:08:20] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[11:08:20] [PASSED] drm_test_check_mode_valid
[11:08:20] [PASSED] drm_test_check_mode_valid_reject
[11:08:20] [PASSED] drm_test_check_mode_valid_reject_rate
[11:08:20] [PASSED] drm_test_check_mode_valid_reject_max_clock
[11:08:20] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[11:08:20] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[11:08:20] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[11:08:20] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[11:08:20] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[11:08:20] [PASSED] drm_test_check_infoframes
[11:08:20] [PASSED] drm_test_check_reject_avi_infoframe
[11:08:20] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[11:08:20] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[11:08:20] [PASSED] drm_test_check_reject_audio_infoframe
[11:08:20] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[11:08:20] ================= drm_managed (2 subtests) =================
[11:08:20] [PASSED] drm_test_managed_release_action
[11:08:20] [PASSED] drm_test_managed_run_action
[11:08:20] =================== [PASSED] drm_managed ===================
[11:08:20] =================== drm_mm (6 subtests) ====================
[11:08:20] [PASSED] drm_test_mm_init
[11:08:20] [PASSED] drm_test_mm_debug
[11:08:20] [PASSED] drm_test_mm_align32
[11:08:20] [PASSED] drm_test_mm_align64
[11:08:20] [PASSED] drm_test_mm_lowest
[11:08:20] [PASSED] drm_test_mm_highest
[11:08:20] ===================== [PASSED] drm_mm ======================
[11:08:20] ============= drm_modes_analog_tv (5 subtests) =============
[11:08:20] [PASSED] drm_test_modes_analog_tv_mono_576i
[11:08:20] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[11:08:20] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[11:08:20] [PASSED] drm_test_modes_analog_tv_pal_576i
[11:08:20] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[11:08:20] =============== [PASSED] drm_modes_analog_tv ===============
[11:08:20] ============== drm_plane_helper (2 subtests) ===============
[11:08:20] =============== drm_test_check_plane_state ================
[11:08:20] [PASSED] clipping_simple
[11:08:20] [PASSED] clipping_rotate_reflect
[11:08:20] [PASSED] positioning_simple
[11:08:20] [PASSED] upscaling
[11:08:20] [PASSED] downscaling
[11:08:20] [PASSED] rounding1
[11:08:20] [PASSED] rounding2
[11:08:20] [PASSED] rounding3
[11:08:20] [PASSED] rounding4
[11:08:20] =========== [PASSED] drm_test_check_plane_state ============
[11:08:20] =========== drm_test_check_invalid_plane_state ============
[11:08:20] [PASSED] positioning_invalid
[11:08:20] [PASSED] upscaling_invalid
[11:08:20] [PASSED] downscaling_invalid
[11:08:20] ======= [PASSED] drm_test_check_invalid_plane_state ========
[11:08:20] ================ [PASSED] drm_plane_helper =================
[11:08:20] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[11:08:20] ====== drm_test_connector_helper_tv_get_modes_check =======
[11:08:20] [PASSED] None
[11:08:20] [PASSED] PAL
[11:08:20] [PASSED] NTSC
[11:08:20] [PASSED] Both, NTSC Default
[11:08:20] [PASSED] Both, PAL Default
[11:08:20] [PASSED] Both, NTSC Default, with PAL on command-line
[11:08:20] [PASSED] Both, PAL Default, with NTSC on command-line
[11:08:20] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[11:08:20] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[11:08:20] ================== drm_rect (9 subtests) ===================
[11:08:20] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[11:08:20] [PASSED] drm_test_rect_clip_scaled_not_clipped
[11:08:20] [PASSED] drm_test_rect_clip_scaled_clipped
[11:08:20] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[11:08:20] ================= drm_test_rect_intersect =================
[11:08:20] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[11:08:20] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[11:08:20] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[11:08:20] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[11:08:20] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[11:08:20] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[11:08:20] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[11:08:20] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[11:08:20] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[11:08:20] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[11:08:20] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[11:08:20] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[11:08:20] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[11:08:20] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[11:08:20] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[11:08:20] ============= [PASSED] drm_test_rect_intersect =============
[11:08:20] ================ drm_test_rect_calc_hscale ================
[11:08:20] [PASSED] normal use
[11:08:20] [PASSED] out of max range
[11:08:20] [PASSED] out of min range
[11:08:20] [PASSED] zero dst
[11:08:20] [PASSED] negative src
[11:08:20] [PASSED] negative dst
[11:08:20] ============ [PASSED] drm_test_rect_calc_hscale ============
[11:08:20] ================ drm_test_rect_calc_vscale ================
[11:08:20] [PASSED] normal use
[11:08:20] [PASSED] out of max range
[11:08:20] [PASSED] out of min range
[11:08:20] [PASSED] zero dst
[11:08:20] [PASSED] negative src
[11:08:20] [PASSED] negative dst
[11:08:20] ============ [PASSED] drm_test_rect_calc_vscale ============
[11:08:20] ================== drm_test_rect_rotate ===================
[11:08:20] [PASSED] reflect-x
[11:08:20] [PASSED] reflect-y
[11:08:20] [PASSED] rotate-0
[11:08:20] [PASSED] rotate-90
[11:08:20] [PASSED] rotate-180
[11:08:20] [PASSED] rotate-270
[11:08:20] ============== [PASSED] drm_test_rect_rotate ===============
[11:08:20] ================ drm_test_rect_rotate_inv =================
[11:08:20] [PASSED] reflect-x
[11:08:20] [PASSED] reflect-y
[11:08:20] [PASSED] rotate-0
[11:08:20] [PASSED] rotate-90
[11:08:20] [PASSED] rotate-180
[11:08:20] [PASSED] rotate-270
[11:08:20] ============ [PASSED] drm_test_rect_rotate_inv =============
[11:08:20] ==================== [PASSED] drm_rect =====================
[11:08:20] ============ drm_sysfb_modeset_test (1 subtest) ============
[11:08:20] ============ drm_test_sysfb_build_fourcc_list =============
[11:08:20] [PASSED] no native formats
[11:08:20] [PASSED] XRGB8888 as native format
[11:08:20] [PASSED] remove duplicates
[11:08:20] [PASSED] convert alpha formats
[11:08:20] [PASSED] random formats
[11:08:20] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[11:08:20] ============= [PASSED] drm_sysfb_modeset_test ==============
[11:08:20] ================== drm_fixp (2 subtests) ===================
[11:08:20] [PASSED] drm_test_int2fixp
[11:08:20] [PASSED] drm_test_sm2fixp
[11:08:20] ==================== [PASSED] drm_fixp =====================
[11:08:20] ============================================================
[11:08:20] Testing complete. Ran 637 tests: passed: 637
[11:08:20] Elapsed time: 26.694s total, 1.822s configuring, 24.702s building, 0.147s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[11:08:20] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[11:08:22] 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
[11:08:32] Starting KUnit Kernel (1/1)...
[11:08:32] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[11:08:32] ================= ttm_device (5 subtests) ==================
[11:08:32] [PASSED] ttm_device_init_basic
[11:08:32] [PASSED] ttm_device_init_multiple
[11:08:32] [PASSED] ttm_device_fini_basic
[11:08:32] [PASSED] ttm_device_init_no_vma_man
[11:08:32] ================== ttm_device_init_pools ==================
[11:08:32] [PASSED] No DMA allocations, no DMA32 required
[11:08:32] [PASSED] DMA allocations, DMA32 required
[11:08:32] [PASSED] No DMA allocations, DMA32 required
[11:08:32] [PASSED] DMA allocations, no DMA32 required
[11:08:32] ============== [PASSED] ttm_device_init_pools ==============
[11:08:32] =================== [PASSED] ttm_device ====================
[11:08:32] ================== ttm_pool (8 subtests) ===================
[11:08:32] ================== ttm_pool_alloc_basic ===================
[11:08:32] [PASSED] One page
[11:08:32] [PASSED] More than one page
[11:08:32] [PASSED] Above the allocation limit
[11:08:32] [PASSED] One page, with coherent DMA mappings enabled
[11:08:32] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[11:08:32] ============== [PASSED] ttm_pool_alloc_basic ===============
[11:08:32] ============== ttm_pool_alloc_basic_dma_addr ==============
[11:08:32] [PASSED] One page
[11:08:32] [PASSED] More than one page
[11:08:32] [PASSED] Above the allocation limit
[11:08:32] [PASSED] One page, with coherent DMA mappings enabled
[11:08:32] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[11:08:32] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[11:08:32] [PASSED] ttm_pool_alloc_order_caching_match
[11:08:32] [PASSED] ttm_pool_alloc_caching_mismatch
[11:08:32] [PASSED] ttm_pool_alloc_order_mismatch
[11:08:32] [PASSED] ttm_pool_free_dma_alloc
[11:08:32] [PASSED] ttm_pool_free_no_dma_alloc
[11:08:32] [PASSED] ttm_pool_fini_basic
[11:08:32] ==================== [PASSED] ttm_pool =====================
[11:08:32] ================ ttm_resource (8 subtests) =================
[11:08:32] ================= ttm_resource_init_basic =================
[11:08:32] [PASSED] Init resource in TTM_PL_SYSTEM
[11:08:32] [PASSED] Init resource in TTM_PL_VRAM
[11:08:32] [PASSED] Init resource in a private placement
[11:08:32] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[11:08:32] ============= [PASSED] ttm_resource_init_basic =============
[11:08:32] [PASSED] ttm_resource_init_pinned
[11:08:32] [PASSED] ttm_resource_fini_basic
[11:08:32] [PASSED] ttm_resource_manager_init_basic
[11:08:32] [PASSED] ttm_resource_manager_usage_basic
[11:08:32] [PASSED] ttm_resource_manager_set_used_basic
[11:08:32] [PASSED] ttm_sys_man_alloc_basic
[11:08:32] [PASSED] ttm_sys_man_free_basic
[11:08:32] ================== [PASSED] ttm_resource ===================
[11:08:32] =================== ttm_tt (15 subtests) ===================
[11:08:32] ==================== ttm_tt_init_basic ====================
[11:08:32] [PASSED] Page-aligned size
[11:08:32] [PASSED] Extra pages requested
[11:08:32] ================ [PASSED] ttm_tt_init_basic ================
[11:08:32] [PASSED] ttm_tt_init_misaligned
[11:08:32] [PASSED] ttm_tt_fini_basic
[11:08:32] [PASSED] ttm_tt_fini_sg
[11:08:32] [PASSED] ttm_tt_fini_shmem
[11:08:32] [PASSED] ttm_tt_create_basic
[11:08:32] [PASSED] ttm_tt_create_invalid_bo_type
[11:08:32] [PASSED] ttm_tt_create_ttm_exists
[11:08:32] [PASSED] ttm_tt_create_failed
[11:08:32] [PASSED] ttm_tt_destroy_basic
[11:08:32] [PASSED] ttm_tt_populate_null_ttm
[11:08:32] [PASSED] ttm_tt_populate_populated_ttm
[11:08:32] [PASSED] ttm_tt_unpopulate_basic
[11:08:32] [PASSED] ttm_tt_unpopulate_empty_ttm
[11:08:32] [PASSED] ttm_tt_swapin_basic
[11:08:32] ===================== [PASSED] ttm_tt ======================
[11:08:32] =================== ttm_bo (14 subtests) ===================
[11:08:32] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[11:08:32] [PASSED] Cannot be interrupted and sleeps
[11:08:32] [PASSED] Cannot be interrupted, locks straight away
[11:08:32] [PASSED] Can be interrupted, sleeps
[11:08:32] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[11:08:32] [PASSED] ttm_bo_reserve_locked_no_sleep
[11:08:32] [PASSED] ttm_bo_reserve_no_wait_ticket
[11:08:32] [PASSED] ttm_bo_reserve_double_resv
[11:08:32] [PASSED] ttm_bo_reserve_interrupted
[11:08:32] [PASSED] ttm_bo_reserve_deadlock
[11:08:32] [PASSED] ttm_bo_unreserve_basic
[11:08:32] [PASSED] ttm_bo_unreserve_pinned
[11:08:32] [PASSED] ttm_bo_unreserve_bulk
[11:08:32] [PASSED] ttm_bo_fini_basic
[11:08:32] [PASSED] ttm_bo_fini_shared_resv
[11:08:32] [PASSED] ttm_bo_pin_basic
[11:08:32] [PASSED] ttm_bo_pin_unpin_resource
[11:08:32] [PASSED] ttm_bo_multiple_pin_one_unpin
[11:08:32] ===================== [PASSED] ttm_bo ======================
[11:08:32] ============== ttm_bo_validate (22 subtests) ===============
[11:08:32] ============== ttm_bo_init_reserved_sys_man ===============
[11:08:32] [PASSED] Buffer object for userspace
[11:08:32] [PASSED] Kernel buffer object
[11:08:32] [PASSED] Shared buffer object
[11:08:32] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[11:08:32] ============== ttm_bo_init_reserved_mock_man ==============
[11:08:32] [PASSED] Buffer object for userspace
[11:08:32] [PASSED] Kernel buffer object
[11:08:32] [PASSED] Shared buffer object
[11:08:32] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[11:08:32] [PASSED] ttm_bo_init_reserved_resv
[11:08:32] ================== ttm_bo_validate_basic ==================
[11:08:32] [PASSED] Buffer object for userspace
[11:08:32] [PASSED] Kernel buffer object
[11:08:32] [PASSED] Shared buffer object
[11:08:32] ============== [PASSED] ttm_bo_validate_basic ==============
[11:08:32] [PASSED] ttm_bo_validate_invalid_placement
[11:08:32] ============= ttm_bo_validate_same_placement ==============
[11:08:32] [PASSED] System manager
[11:08:32] [PASSED] VRAM manager
[11:08:32] ========= [PASSED] ttm_bo_validate_same_placement ==========
[11:08:32] [PASSED] ttm_bo_validate_failed_alloc
[11:08:32] [PASSED] ttm_bo_validate_pinned
[11:08:32] [PASSED] ttm_bo_validate_busy_placement
[11:08:32] ================ ttm_bo_validate_multihop =================
[11:08:32] [PASSED] Buffer object for userspace
[11:08:32] [PASSED] Kernel buffer object
[11:08:32] [PASSED] Shared buffer object
[11:08:32] ============ [PASSED] ttm_bo_validate_multihop =============
[11:08:32] ========== ttm_bo_validate_no_placement_signaled ==========
[11:08:32] [PASSED] Buffer object in system domain, no page vector
[11:08:32] [PASSED] Buffer object in system domain with an existing page vector
[11:08:32] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[11:08:32] ======== ttm_bo_validate_no_placement_not_signaled ========
[11:08:32] [PASSED] Buffer object for userspace
[11:08:32] [PASSED] Kernel buffer object
[11:08:32] [PASSED] Shared buffer object
[11:08:32] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[11:08:32] [PASSED] ttm_bo_validate_move_fence_signaled
[11:08:32] ========= ttm_bo_validate_move_fence_not_signaled =========
[11:08:32] [PASSED] Waits for GPU
[11:08:32] [PASSED] Tries to lock straight away
[11:08:32] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[11:08:32] [PASSED] ttm_bo_validate_swapout
[11:08:32] [PASSED] ttm_bo_validate_happy_evict
[11:08:32] [PASSED] ttm_bo_validate_all_pinned_evict
[11:08:32] [PASSED] ttm_bo_validate_allowed_only_evict
[11:08:32] [PASSED] ttm_bo_validate_deleted_evict
[11:08:32] [PASSED] ttm_bo_validate_busy_domain_evict
[11:08:32] [PASSED] ttm_bo_validate_evict_gutting
[11:08:32] [PASSED] ttm_bo_validate_recrusive_evict
[11:08:32] ================= [PASSED] ttm_bo_validate =================
[11:08:32] ============================================================
[11:08:32] Testing complete. Ran 102 tests: passed: 102
[11:08:32] Elapsed time: 11.775s total, 1.771s configuring, 9.789s building, 0.182s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 15+ messages in thread
* ✓ Xe.CI.BAT: success for drm/xe: Adopt xe_log SIGID API for structured error reporting
2026-08-06 11:00 [PATCH 0/4] drm/xe: Adopt xe_log SIGID API for structured error reporting Mallesh Koujalagi
` (5 preceding siblings ...)
2026-08-06 11:08 ` ✓ CI.KUnit: success " Patchwork
@ 2026-08-06 12:13 ` Patchwork
2026-08-06 20:44 ` ✓ Xe.CI.FULL: " Patchwork
7 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-08-06 12:13 UTC (permalink / raw)
To: Mallesh Koujalagi; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 924 bytes --]
== Series Details ==
Series: drm/xe: Adopt xe_log SIGID API for structured error reporting
URL : https://patchwork.freedesktop.org/series/171725/
State : success
== Summary ==
CI Bug Log - changes from xe-5552-8d11ccdc98daac5e969243b42907fd060a650091_BAT -> xe-pw-171725v1_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (15 -> 14)
------------------------------
Missing (1): bat-wcl-2
Changes
-------
No changes found
Build changes
-------------
* IGT: IGT_9041 -> IGT_9042
* Linux: xe-5552-8d11ccdc98daac5e969243b42907fd060a650091 -> xe-pw-171725v1
IGT_9041: 9041
IGT_9042: 9042
xe-5552-8d11ccdc98daac5e969243b42907fd060a650091: 8d11ccdc98daac5e969243b42907fd060a650091
xe-pw-171725v1: 171725v1
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/index.html
[-- Attachment #2: Type: text/html, Size: 1486 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 4/4] drm/xe/sysctrl: Add better sysctrl error reporting
2026-08-06 11:00 ` [PATCH 4/4] drm/xe/sysctrl: Add better sysctrl error reporting Mallesh Koujalagi
@ 2026-08-06 14:41 ` Michal Wajdeczko
2026-08-07 8:48 ` Mallesh, Koujalagi
2026-08-06 19:14 ` Umesh Nerlige Ramappa
1 sibling, 1 reply; 15+ messages in thread
From: Michal Wajdeczko @ 2026-08-06 14:41 UTC (permalink / raw)
To: Mallesh Koujalagi, intel-xe, rodrigo.vivi, matthew.brost
Cc: anshuman.gupta, badal.nilawar, vinay.belgaumkar, riana.tauro,
karthik.poosa, sk.anirban, raag.jadav, aravind.iddamsetty
On 8/6/2026 1:00 PM, Mallesh Koujalagi wrote:
> Switch sysctrl error messages to xe_log_err() with SYSCTRL tags so
> tools can reliably detect and categorize common sysctrl failures.
>
> Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_sysctrl_event.c | 11 ++++++----
> drivers/gpu/drm/xe/xe_sysctrl_mailbox.c | 29 ++++++++++++++++---------
> 2 files changed, 26 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_sysctrl_event.c b/drivers/gpu/drm/xe/xe_sysctrl_event.c
> index da395148ee9d..1805a0b4d0d0 100644
> --- a/drivers/gpu/drm/xe/xe_sysctrl_event.c
> +++ b/drivers/gpu/drm/xe/xe_sysctrl_event.c
> @@ -5,6 +5,7 @@
>
> #include "xe_device.h"
> #include "xe_irq.h"
> +#include "xe_log.h"
> #include "xe_printk.h"
> #include "xe_ras.h"
> #include "xe_sysctrl.h"
> @@ -25,13 +26,15 @@ static void get_pending_event(struct xe_sysctrl *sc, struct xe_sysctrl_mailbox_c
>
> ret = xe_sysctrl_send_command(sc, command, &len);
> if (ret) {
> - xe_err(xe, "sysctrl: failed to get pending event %d\n", ret);
> + xe_log_err(xe, SYSCTRL, ret,
> + "sysctrl: failed to get pending event\n");
using "sysctrl: " prefix here is now redundant, as xe_log_err will add "SYSCTRL: " based on the TAG
> return;
> }
>
> if (len != sizeof(*response)) {
> - xe_err(xe, "sysctrl: unexpected event response length %zu (expected %zu)\n",
> - len, sizeof(*response));
> + xe_log_err(xe, SYSCTRL, 0,
> + "sysctrl: unexpected event response length %zu (expected %zu)\n",
> + len, sizeof(*response));
ditto
also since this is unexpected protocol error we should use -EPROTO or similar errno
> return;
> }
>
> @@ -41,7 +44,7 @@ static void get_pending_event(struct xe_sysctrl *sc, struct xe_sysctrl_mailbox_c
> xe_warn(xe, "sysctrl: unexpected event %#x\n", response->event);
btw, shouldn't we also report that ^^^ warn case?
>
> if (!--count) {
> - xe_err(xe, "sysctrl: event flooding\n");
> + xe_log_err(xe, SYSCTRL, 0, "sysctrl: event flooding\n");
again, drop the "sysctrl:" prefix
and use some errno, maybe -ETOOMANYREFS ?
and maybe also print response->count to show how many events we left behind?
hmm, but what will happen to those events that we don't retrieve now?
are they lost (and that's why we need to report an error)
or maybe we will be able to retrieve them in another cycle?
(but then I'm not sure we should report that as an error)
> return;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c b/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
> index e13eebaac1d0..5c8edf9871c6 100644
> --- a/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
> +++ b/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
> @@ -11,6 +11,7 @@
>
> #include "regs/xe_sysctrl_regs.h"
> #include "xe_device.h"
> +#include "xe_log.h"
> #include "xe_mmio.h"
> #include "xe_pm.h"
> #include "xe_printk.h"
> @@ -115,7 +116,8 @@ static int sysctrl_prepare_command(struct xe_device *xe,
> xe_assert(xe, command <= SYSCTRL_HDR_COMMAND_MAX);
>
> if (data_in_len > XE_SYSCTRL_MB_MAX_MESSAGE_SIZE - sizeof(*hdr)) {
hmm, shouldn't this be a simple xe_assert() instead?
after all, it is us who prepares these cmds, right?
> - xe_err(xe, "sysctrl: Input data too large: %zu bytes\n", data_in_len);
> + xe_log_err(xe, SYSCTRL, -EINVAL,
> + "sysctrl: Input data too large: %zu bytes\n", data_in_len);
> return -EINVAL;
> }
>
> @@ -149,7 +151,7 @@ static int sysctrl_send_frames(struct xe_sysctrl *sc,
> total_frames = DIV_ROUND_UP(cmd_size, XE_SYSCTRL_MB_FRAME_SIZE);
>
> if (!sysctrl_wait_bit_clear(sc, SYSCTRL_MB_CTRL_RUN_BUSY, timeout_ms)) {
> - xe_err(xe, "sysctrl: Mailbox busy\n");
> + xe_log_err(xe, SYSCTRL, -EBUSY, "sysctrl: Mailbox busy\n");
drop "sysctrl:" prefix
> return -EBUSY;
> }
>
> @@ -160,7 +162,8 @@ static int sysctrl_send_frames(struct xe_sysctrl *sc,
> frame_size = min_t(size_t, cmd_size - bytes_sent, XE_SYSCTRL_MB_FRAME_SIZE);
>
> if (sysctrl_write_frame(sc, mbox_cmd + bytes_sent, frame_size)) {
> - xe_err(xe, "sysctrl: Failed to write frame %u\n", frame);
> + xe_log_err(xe, SYSCTRL, -EIO,
> + "sysctrl: Failed to write frame %u\n", frame);
ditto
> sc->phase_bit = 0;
> return -EIO;
> }
> @@ -174,7 +177,8 @@ static int sysctrl_send_frames(struct xe_sysctrl *sc,
> xe_mmio_write32(sc->mmio, SYSCTRL_MB_CTRL, ctrl_reg);
>
> if (!sysctrl_wait_bit_clear(sc, SYSCTRL_MB_CTRL_RUN_BUSY, timeout_ms)) {
> - xe_err(xe, "sysctrl: Frame %u acknowledgment timeout\n", frame);
> + xe_log_err(xe, SYSCTRL, -ETIMEDOUT,
> + "sysctrl: Frame %u acknowledgment timeout\n", frame);
ditto
> sc->phase_bit = 0;
> return -ETIMEDOUT;
> }
> @@ -194,7 +198,8 @@ static int sysctrl_process_frame(struct xe_sysctrl *sc, void *out,
> int ret;
>
> if (!sysctrl_wait_bit_set(sc, SYSCTRL_MB_CTRL_RUN_BUSY_OUT, timeout_ms)) {
> - xe_err(xe, "sysctrl: Response frame timeout\n");
> + xe_log_err(xe, SYSCTRL, -ETIMEDOUT,
> + "sysctrl: Response frame timeout\n");
ditto
> return -ETIMEDOUT;
> }
>
> @@ -249,13 +254,15 @@ static int sysctrl_receive_frames(struct xe_sysctrl *sc,
> if (!XE_SYSCTRL_HDR_IS_RESPONSE(hdr) ||
> XE_SYSCTRL_HDR_GROUP_ID(hdr) != XE_SYSCTRL_HDR_GROUP_ID(req) ||
> XE_SYSCTRL_HDR_COMMAND(hdr) != XE_SYSCTRL_HDR_COMMAND(req)) {
> - xe_err(xe, "sysctrl: Response header mismatch\n");
> + xe_log_err(xe, SYSCTRL, -EPROTO,
> + "sysctrl: Response header mismatch\n");
ditto
> return -EPROTO;
> }
>
> if (XE_SYSCTRL_HDR_RESULT(hdr) != 0) {
> - xe_err(xe, "sysctrl: Firmware error: 0x%02lx\n",
> - XE_SYSCTRL_HDR_RESULT(hdr));
> + xe_log_err(xe, SYSCTRL, -EIO,
> + "sysctrl: Firmware error: 0x%02lx\n",
> + XE_SYSCTRL_HDR_RESULT(hdr));
ditto
> return -EIO;
> }
>
> @@ -381,7 +388,8 @@ int xe_sysctrl_send_command(struct xe_sysctrl *sc,
> cmd->data_in, cmd->data_in_len,
> &mbox_cmd, &cmd_size);
> if (ret) {
> - xe_err(xe, "sysctrl: Failed to prepare command: %pe\n", ERR_PTR(ret));
> + xe_log_err(xe, SYSCTRL, ret,
> + "sysctrl: Failed to prepare command: %pe\n", ERR_PTR(ret));
ditto
and drop redundant %pe as xe_log_err() will also print that error
> return ret;
> }
>
> @@ -391,7 +399,8 @@ int xe_sysctrl_send_command(struct xe_sysctrl *sc,
> cmd->data_out, cmd->data_out_len, rdata_len,
> XE_SYSCTRL_MB_DEFAULT_TIMEOUT_MS);
> if (ret)
> - xe_err(xe, "sysctrl: Mailbox command failed: %pe\n", ERR_PTR(ret));
> + xe_log_err(xe, SYSCTRL, ret,
> + "sysctrl: Mailbox command failed: %pe\n", ERR_PTR(ret));
ditto
>
> kfree(mbox_cmd);
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 3/4] drm/xe/pcode: Improve pcode timeout logging
2026-08-06 11:00 ` [PATCH 3/4] drm/xe/pcode: Improve pcode timeout logging Mallesh Koujalagi
@ 2026-08-06 14:42 ` Michal Wajdeczko
0 siblings, 0 replies; 15+ messages in thread
From: Michal Wajdeczko @ 2026-08-06 14:42 UTC (permalink / raw)
To: Mallesh Koujalagi, intel-xe, rodrigo.vivi, matthew.brost
Cc: anshuman.gupta, badal.nilawar, vinay.belgaumkar, riana.tauro,
karthik.poosa, sk.anirban, raag.jadav, aravind.iddamsetty
On 8/6/2026 1:00 PM, Mallesh Koujalagi wrote:
> Use xe_log_err() for pcode timeout errors instead of drm_err(). This
s/pcode/PCODE ?
> adds PCODE component tag, making timeout issues easier to detect and
> track with automated tools.
>
> Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_pcode.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_pcode.c b/drivers/gpu/drm/xe/xe_pcode.c
> index c492737242d3..b5a59a227167 100644
> --- a/drivers/gpu/drm/xe/xe_pcode.c
> +++ b/drivers/gpu/drm/xe/xe_pcode.c
> @@ -220,8 +220,8 @@ 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, -ETIMEDOUT,
> + "PCODE timeout, retrying with preemption disabled\n");
drop the "PCODE" prefix, as xe_log_err() will decorate dmesg with "PCODE: " for you
> preempt_disable();
> ret = pcode_try_request(tile, mbox, request, reply_mask, reply, &status,
> true, 50 * 1000, true);
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 2/4] drm/xe: Use xe_log SIGID API for probe-path error reporting
2026-08-06 11:00 ` [PATCH 2/4] drm/xe: Use xe_log SIGID API for probe-path error reporting Mallesh Koujalagi
@ 2026-08-06 17:52 ` Michal Wajdeczko
0 siblings, 0 replies; 15+ messages in thread
From: Michal Wajdeczko @ 2026-08-06 17:52 UTC (permalink / raw)
To: Mallesh Koujalagi, intel-xe, rodrigo.vivi, matthew.brost
Cc: anshuman.gupta, badal.nilawar, vinay.belgaumkar, riana.tauro,
karthik.poosa, sk.anirban, raag.jadav, aravind.iddamsetty,
Dnyaneshwar Bhadane
On 8/6/2026 1:00 PM, Mallesh Koujalagi wrote:
> From: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com>
>
> Replace ad-hoc drm_err()/xe_err() calls in the probe path with
> structured SIGID logging helpers. This gives fleet tooling a stable,
> machine-parseable identifier (SIGID) for each recognised fault
> situation rather than relying on fragile string matching.
>
> Signed-off-by: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com>
> Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_device.c | 6 ++++--
> drivers/gpu/drm/xe/xe_hwmon.c | 4 +++-
> drivers/gpu/drm/xe/xe_irq.c | 9 +++++----
> drivers/gpu/drm/xe/xe_mmio.c | 5 +++--
> drivers/gpu/drm/xe/xe_pat.c | 6 ++++--
> drivers/gpu/drm/xe/xe_pci.c | 14 +++++++++-----
> drivers/gpu/drm/xe/xe_pcode.c | 5 +++--
> drivers/gpu/drm/xe/xe_vram.c | 5 +++--
> 8 files changed, 34 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> index d25d02b24898..52bafe708d74 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"
> @@ -586,7 +587,8 @@ int xe_device_init_early(struct xe_device *xe)
> * Cleanup done in xe_device_destroy via
> * drmm_add_action_or_reset register above
> */
> - drm_err(&xe->drm, "Failed to allocate xe workqueues\n");
> + xe_log_err_fatal(xe, PROBE, -ENOMEM, "Failed to allocate xe workqueues\n");
OOM errors will be already printed by the MM, we likely shouldn't have this drm_err here...
can't we just leave it as-is and add xe_log_err somewhere in xe_pci_probe()?
also, maybe we should wait with submitting more patches that use xe_log() until we actually get some agreement and merge that first?
> +
> return -ENOMEM;
> }
>
> @@ -717,7 +719,7 @@ static int xe_set_dma_info(struct xe_device *xe)
> return 0;
>
> mask_err:
> - drm_err(&xe->drm, "Can't set DMA mask/consistent mask (%d)\n", err);
> + xe_log_err(xe, PROBE, err, "Can't set DMA mask/consistent mask\n");
> return err;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_hwmon.c b/drivers/gpu/drm/xe/xe_hwmon.c
> index de3f2aeffc3f..e4c319598dd0 100644
> --- a/drivers/gpu/drm/xe/xe_hwmon.c
> +++ b/drivers/gpu/drm/xe/xe_hwmon.c
> @@ -15,6 +15,7 @@
> #include "regs/xe_pcode_regs.h"
> #include "xe_device.h"
> #include "xe_hwmon.h"
> +#include "xe_log.h"
> #include "xe_mmio.h"
> #include "xe_pcode.h"
> #include "xe_pcode_api.h"
> @@ -1575,7 +1576,8 @@ int xe_hwmon_register(struct xe_device *xe)
> &hwmon_chip_info,
> hwmon_groups);
> if (IS_ERR(hwmon->hwmon_dev)) {
> - drm_err(&xe->drm, "Failed to register xe hwmon (%pe)\n", hwmon->hwmon_dev);
> + xe_log_err(xe, PROBE, PTR_ERR(hwmon->hwmon_dev),
> + "Failed to register xe hwmon\n");
while this is during the probe, shouldn't we use HWMON as a component?
we allow chained SIGID reports from different layers, and this error
will eventually lead to final xe_log_err(PROBE) anyway
also, there are at least 2 other cases where hwmon initialization can fail
why only this one is so special that requires use of xe_log ?
and IMO it would be good to add each new SIGID usage (across
different files) in separate patches
> xe->hwmon = NULL;
> return PTR_ERR(hwmon->hwmon_dev);
> }
> diff --git a/drivers/gpu/drm/xe/xe_irq.c b/drivers/gpu/drm/xe/xe_irq.c
> index 9e49e2241da4..74d2b63cd505 100644
> --- a/drivers/gpu/drm/xe/xe_irq.c
> +++ b/drivers/gpu/drm/xe/xe_irq.c
> @@ -19,6 +19,7 @@
> #include "xe_hw_engine.h"
> #include "xe_hw_error.h"
> #include "xe_i2c.h"
> +#include "xe_log.h"
> #include "xe_memirq.h"
> #include "xe_mert.h"
> #include "xe_mmio.h"
> @@ -759,14 +760,14 @@ static int xe_irq_msi_request_irqs(struct xe_device *xe)
>
> irq_handler = xe_irq_handler(xe);
> if (!irq_handler) {
> - drm_err(&xe->drm, "No supported interrupt handler");
> + xe_log_err(xe, PROBE, -EINVAL, "No supported interrupt handler\n");
this is already a dead code, as xe_irq_handler() never returns NULL
we can use xe_assert instead
> return -EINVAL;
> }
>
> irq = pci_irq_vector(pdev, 0);
> err = request_irq(irq, irq_handler, IRQF_SHARED, DRIVER_NAME, xe);
> if (err < 0) {
> - drm_err(&xe->drm, "Failed to request MSI IRQ %d\n", err);
> + xe_log_err(xe, PROBE, err, "Failed to request MSI IRQ\n");
> return err;
> }
>
> @@ -822,7 +823,7 @@ int xe_irq_install(struct xe_device *xe)
>
> err = pci_alloc_irq_vectors(pdev, nvec, nvec, irq_flags);
> if (err < 0) {
> - drm_err(&xe->drm, "Failed to allocate IRQ vectors: %d\n", err);
> + xe_log_err(xe, PROBE, err, "Failed to allocate IRQ vectors\n");
> return err;
> }
>
> @@ -891,7 +892,7 @@ static int xe_irq_msix_init(struct xe_device *xe)
> return 0; /* MSI */
>
> if (nvec < 0) {
> - drm_err(&xe->drm, "Failed getting MSI-X vectors count: %d\n", nvec);
> + xe_log_err(xe, PROBE, nvec, "Failed getting MSI-X vectors count\n");
maybe we should have IRQ component with SIGID_SW and use it here?
> return nvec;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_mmio.c b/drivers/gpu/drm/xe/xe_mmio.c
> index 7fa18dfcb5a2..bcf36a381424 100644
> --- a/drivers/gpu/drm/xe/xe_mmio.c
> +++ b/drivers/gpu/drm/xe/xe_mmio.c
> @@ -15,6 +15,7 @@
> #include "regs/xe_bars.h"
> #include "xe_device.h"
> #include "xe_gt_sriov_vf.h"
> +#include "xe_log.h"
> #include "xe_printk.h"
> #include "xe_sriov.h"
> #include "xe_tile_printk.h"
> @@ -105,13 +106,13 @@ int xe_mmio_probe_early(struct xe_device *xe)
>
> xe->mmio.regs = pcim_iomap(pdev, GTTMMADR_BAR, 0);
> if (!xe->mmio.regs) {
> - xe_err(xe, "Failed to map GTTMMADR_BAR\n");
> + xe_log_err(xe, PROBE, -EIO, "Failed to map GTTMMADR_BAR\n");
shouldn't we use REGS component (SIGID_IO_BUS) here?
and this is a FATAL error, no?
> return -EIO;
> }
>
> xe->mmio.size = pci_resource_len(pdev, GTTMMADR_BAR);
> if (xe->mmio.size < SZ_16M) {
> - xe_err(xe, "GTTMMADR_BAR is too small: %zu\n", xe->mmio.size);
> + xe_log_err(xe, PROBE, -EIO, "GTTMMADR_BAR is too small: %zu\n", xe->mmio.size);
ditto
> return -EIO;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_pat.c b/drivers/gpu/drm/xe/xe_pat.c
> index a5fe1beec652..aad15a4b0ac3 100644
> --- a/drivers/gpu/drm/xe/xe_pat.c
> +++ b/drivers/gpu/drm/xe/xe_pat.c
> @@ -16,6 +16,7 @@
> #include "xe_force_wake.h"
> #include "xe_gt.h"
> #include "xe_gt_mcr.h"
> +#include "xe_log.h"
> #include "xe_mmio.h"
> #include "xe_sriov.h"
> #include "xe_wa.h"
> @@ -686,8 +687,9 @@ void xe_pat_init_early(struct xe_device *xe)
> * raise an error rather than trying to silently inherit the
> * most recent platform's behavior.
> */
> - drm_err(&xe->drm, "Missing PAT table for platform with graphics version %d.%02d!\n",
> - GRAPHICS_VER(xe), GRAPHICS_VERx100(xe) % 100);
> + xe_log_err(xe, PROBE, -ENODEV,
> + "Missing PAT table for platform with graphics version %d.%02d!\n",
> + GRAPHICS_VER(xe), GRAPHICS_VERx100(xe) % 100);
this here is pure SW gap and it is broken as right after
logging this error we might crash in the xe_assert() below
or later in xe_pat_init() as xe->pat.ops is NULL
maybe instead of blindly adding xe_log_err we can just
fix that first and return some error to abort the probe?
also maybe we should add PAT component (with SIGID_IO_BUS?)
> }
>
> xe_assert(xe, xe->pat.ops->dump);
> diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
> index 36d62927b969..3c452f399e6d 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"
> @@ -718,8 +719,9 @@ static int handle_gmdid(struct xe_device *xe,
>
> *graphics_ip = find_graphics_ip(ver);
> if (!*graphics_ip) {
> - drm_err(&xe->drm, "Hardware reports unknown graphics version %u.%02u\n",
> - ver / 100, ver % 100);
> + xe_log_err(xe, PROBE, -ENODEV,
> + "Hardware reports unknown graphics version %u.%02u\n",
> + ver / 100, ver % 100);
maybe use REGS component here (SIGID_IO_BUS)
also, isn't that actually broken?
with graphics_ip = NULL set here we will crash later in xe_info_init()
> }
>
> ret = read_gmdid(xe, GMDID_MEDIA, &ver, media_revid);
> @@ -732,8 +734,9 @@ static int handle_gmdid(struct xe_device *xe,
>
> *media_ip = find_media_ip(ver);
> if (!*media_ip) {
> - drm_err(&xe->drm, "Hardware reports unknown media version %u.%02u\n",
> - ver / 100, ver % 100);
> + xe_log_err(xe, PROBE, -ENODEV,
> + "Hardware reports unknown media version %u.%02u\n",
> + ver / 100, ver % 100);
> }
>
> return 0;
> @@ -1088,7 +1091,8 @@ static int xe_info_init(struct xe_device *xe,
> * required for VRAM management).
> */
> if (!tile->primary_gt) {
> - drm_err(&xe->drm, "Cannot probe device with without a primary GT\n");
> + xe_log_err_fatal(xe, PROBE, -ENODEV,
> + "Cannot probe device without a primary GT\n");
> return -ENODEV;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_pcode.c b/drivers/gpu/drm/xe/xe_pcode.c
> index ccc3bdeed6bb..c492737242d3 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"
> @@ -320,8 +321,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(xe, PCODE, -ret,
> + "PCODE initialization timedout after: 3 min\n");
drop "PCODE" prefix
and move to separate patch
>
> return ret;
> }
> diff --git a/drivers/gpu/drm/xe/xe_vram.c b/drivers/gpu/drm/xe/xe_vram.c
> index 23eb7edbdd57..dada430d7ed5 100644
> --- a/drivers/gpu/drm/xe/xe_vram.c
> +++ b/drivers/gpu/drm/xe/xe_vram.c
> @@ -17,6 +17,7 @@
> #include "xe_device.h"
> #include "xe_force_wake.h"
> #include "xe_gt_mcr.h"
> +#include "xe_log.h"
> #include "xe_mmio.h"
> #include "xe_sriov.h"
> #include "xe_tile_sriov_vf.h"
> @@ -43,7 +44,7 @@ static int determine_lmem_bar_size(struct xe_device *xe, struct xe_vram_region *
> struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
>
> if (!resource_is_valid(pdev, LMEM_BAR)) {
> - drm_err(&xe->drm, "pci resource is not valid\n");
> + xe_log_err(xe, PROBE, -ENXIO, "pci resource is not valid\n");
shouldn't we use REGS here ? (SIGID_IO_BUS)
or add VRAM component (also SIGID_IO_BUS?)
> return -ENXIO;
> }
>
> @@ -237,7 +238,7 @@ static int vram_region_init(struct xe_device *xe, struct xe_vram_region *vram,
> vram->io_size = min_t(u64, usable_size, remain_io_size);
>
> if (!vram->io_size) {
> - drm_err(&xe->drm, "Tile without any CPU visible VRAM. Aborting.\n");
> + xe_log_err(xe, PROBE, -ENODEV, "Tile without any CPU visible VRAM. Aborting.\n");
we should first fix the vram_region_init() as now it is used
in two scenarios: to init each tile region, and to init device
level region info
and this error is meaningful for tile-based usage, where
we should use tile as a location
> return -ENODEV;
> }
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 4/4] drm/xe/sysctrl: Add better sysctrl error reporting
2026-08-06 11:00 ` [PATCH 4/4] drm/xe/sysctrl: Add better sysctrl error reporting Mallesh Koujalagi
2026-08-06 14:41 ` Michal Wajdeczko
@ 2026-08-06 19:14 ` Umesh Nerlige Ramappa
2026-08-07 8:59 ` Mallesh, Koujalagi
1 sibling, 1 reply; 15+ messages in thread
From: Umesh Nerlige Ramappa @ 2026-08-06 19:14 UTC (permalink / raw)
To: Mallesh Koujalagi
Cc: intel-xe, rodrigo.vivi, matthew.brost, anshuman.gupta,
badal.nilawar, vinay.belgaumkar, riana.tauro, karthik.poosa,
sk.anirban, raag.jadav, michal.wajdeczko, aravind.iddamsetty
On Thu, Aug 06, 2026 at 04:30:44PM +0530, Mallesh Koujalagi wrote:
>Switch sysctrl error messages to xe_log_err() with SYSCTRL tags so
>tools can reliably detect and categorize common sysctrl failures.
>
>Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>---
> drivers/gpu/drm/xe/xe_sysctrl_event.c | 11 ++++++----
> drivers/gpu/drm/xe/xe_sysctrl_mailbox.c | 29 ++++++++++++++++---------
> 2 files changed, 26 insertions(+), 14 deletions(-)
>
>diff --git a/drivers/gpu/drm/xe/xe_sysctrl_event.c b/drivers/gpu/drm/xe/xe_sysctrl_event.c
>index da395148ee9d..1805a0b4d0d0 100644
>--- a/drivers/gpu/drm/xe/xe_sysctrl_event.c
>+++ b/drivers/gpu/drm/xe/xe_sysctrl_event.c
>@@ -5,6 +5,7 @@
>
> #include "xe_device.h"
> #include "xe_irq.h"
>+#include "xe_log.h"
> #include "xe_printk.h"
> #include "xe_ras.h"
> #include "xe_sysctrl.h"
>@@ -25,13 +26,15 @@ static void get_pending_event(struct xe_sysctrl *sc, struct xe_sysctrl_mailbox_c
This seems to be running in a worker started from probe, but it does not
fail probe. Do we still need to report this as xe_log_err/SIG_ID?
>
> ret = xe_sysctrl_send_command(sc, command, &len);
> if (ret) {
>- xe_err(xe, "sysctrl: failed to get pending event %d\n", ret);
>+ xe_log_err(xe, SYSCTRL, ret,
>+ "sysctrl: failed to get pending event\n");
> return;
> }
>
> if (len != sizeof(*response)) {
>- xe_err(xe, "sysctrl: unexpected event response length %zu (expected %zu)\n",
>- len, sizeof(*response));
>+ xe_log_err(xe, SYSCTRL, 0,
>+ "sysctrl: unexpected event response length %zu (expected %zu)\n",
>+ len, sizeof(*response));
> return;
> }
>
>@@ -41,7 +44,7 @@ static void get_pending_event(struct xe_sysctrl *sc, struct xe_sysctrl_mailbox_c
> xe_warn(xe, "sysctrl: unexpected event %#x\n", response->event);
>
> if (!--count) {
>- xe_err(xe, "sysctrl: event flooding\n");
>+ xe_log_err(xe, SYSCTRL, 0, "sysctrl: event flooding\n");
> return;
> }
>
>diff --git a/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c b/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
>index e13eebaac1d0..5c8edf9871c6 100644
>--- a/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
>+++ b/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
>@@ -11,6 +11,7 @@
>
> #include "regs/xe_sysctrl_regs.h"
> #include "xe_device.h"
>+#include "xe_log.h"
> #include "xe_mmio.h"
> #include "xe_pm.h"
> #include "xe_printk.h"
>@@ -115,7 +116,8 @@ static int sysctrl_prepare_command(struct xe_device *xe,
> xe_assert(xe, command <= SYSCTRL_HDR_COMMAND_MAX);
>
> if (data_in_len > XE_SYSCTRL_MB_MAX_MESSAGE_SIZE - sizeof(*hdr)) {
>- xe_err(xe, "sysctrl: Input data too large: %zu bytes\n", data_in_len);
>+ xe_log_err(xe, SYSCTRL, -EINVAL,
>+ "sysctrl: Input data too large: %zu bytes\n", data_in_len);
> return -EINVAL;
> }
>
>@@ -149,7 +151,7 @@ static int sysctrl_send_frames(struct xe_sysctrl *sc,
> total_frames = DIV_ROUND_UP(cmd_size, XE_SYSCTRL_MB_FRAME_SIZE);
>
> if (!sysctrl_wait_bit_clear(sc, SYSCTRL_MB_CTRL_RUN_BUSY, timeout_ms)) {
>- xe_err(xe, "sysctrl: Mailbox busy\n");
>+ xe_log_err(xe, SYSCTRL, -EBUSY, "sysctrl: Mailbox busy\n");
> return -EBUSY;
> }
>
>@@ -160,7 +162,8 @@ static int sysctrl_send_frames(struct xe_sysctrl *sc,
> frame_size = min_t(size_t, cmd_size - bytes_sent, XE_SYSCTRL_MB_FRAME_SIZE);
>
> if (sysctrl_write_frame(sc, mbox_cmd + bytes_sent, frame_size)) {
>- xe_err(xe, "sysctrl: Failed to write frame %u\n", frame);
>+ xe_log_err(xe, SYSCTRL, -EIO,
>+ "sysctrl: Failed to write frame %u\n", frame);
> sc->phase_bit = 0;
> return -EIO;
> }
>@@ -174,7 +177,8 @@ static int sysctrl_send_frames(struct xe_sysctrl *sc,
> xe_mmio_write32(sc->mmio, SYSCTRL_MB_CTRL, ctrl_reg);
>
> if (!sysctrl_wait_bit_clear(sc, SYSCTRL_MB_CTRL_RUN_BUSY, timeout_ms)) {
>- xe_err(xe, "sysctrl: Frame %u acknowledgment timeout\n", frame);
>+ xe_log_err(xe, SYSCTRL, -ETIMEDOUT,
>+ "sysctrl: Frame %u acknowledgment timeout\n", frame);
> sc->phase_bit = 0;
> return -ETIMEDOUT;
> }
>@@ -194,7 +198,8 @@ static int sysctrl_process_frame(struct xe_sysctrl *sc, void *out,
> int ret;
>
> if (!sysctrl_wait_bit_set(sc, SYSCTRL_MB_CTRL_RUN_BUSY_OUT, timeout_ms)) {
>- xe_err(xe, "sysctrl: Response frame timeout\n");
>+ xe_log_err(xe, SYSCTRL, -ETIMEDOUT,
>+ "sysctrl: Response frame timeout\n");
> return -ETIMEDOUT;
> }
>
>@@ -249,13 +254,15 @@ static int sysctrl_receive_frames(struct xe_sysctrl *sc,
> if (!XE_SYSCTRL_HDR_IS_RESPONSE(hdr) ||
> XE_SYSCTRL_HDR_GROUP_ID(hdr) != XE_SYSCTRL_HDR_GROUP_ID(req) ||
> XE_SYSCTRL_HDR_COMMAND(hdr) != XE_SYSCTRL_HDR_COMMAND(req)) {
>- xe_err(xe, "sysctrl: Response header mismatch\n");
>+ xe_log_err(xe, SYSCTRL, -EPROTO,
>+ "sysctrl: Response header mismatch\n");
> return -EPROTO;
> }
>
> if (XE_SYSCTRL_HDR_RESULT(hdr) != 0) {
>- xe_err(xe, "sysctrl: Firmware error: 0x%02lx\n",
>- XE_SYSCTRL_HDR_RESULT(hdr));
>+ xe_log_err(xe, SYSCTRL, -EIO,
>+ "sysctrl: Firmware error: 0x%02lx\n",
>+ XE_SYSCTRL_HDR_RESULT(hdr));
Other than this ^ one "Firmware error", I am not sure if we want to
report every sysctrl mailbox error using xe_log_err. Are there callers
in the probe path that are using these functions and would probe benefit
from reporting all of these?
Thanks,
Umesh
> return -EIO;
> }
>
>@@ -381,7 +388,8 @@ int xe_sysctrl_send_command(struct xe_sysctrl *sc,
> cmd->data_in, cmd->data_in_len,
> &mbox_cmd, &cmd_size);
> if (ret) {
>- xe_err(xe, "sysctrl: Failed to prepare command: %pe\n", ERR_PTR(ret));
>+ xe_log_err(xe, SYSCTRL, ret,
>+ "sysctrl: Failed to prepare command: %pe\n", ERR_PTR(ret));
> return ret;
> }
>
>@@ -391,7 +399,8 @@ int xe_sysctrl_send_command(struct xe_sysctrl *sc,
> cmd->data_out, cmd->data_out_len, rdata_len,
> XE_SYSCTRL_MB_DEFAULT_TIMEOUT_MS);
> if (ret)
>- xe_err(xe, "sysctrl: Mailbox command failed: %pe\n", ERR_PTR(ret));
>+ xe_log_err(xe, SYSCTRL, ret,
>+ "sysctrl: Mailbox command failed: %pe\n", ERR_PTR(ret));
>
> kfree(mbox_cmd);
>
>--
>2.48.1
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* ✓ Xe.CI.FULL: success for drm/xe: Adopt xe_log SIGID API for structured error reporting
2026-08-06 11:00 [PATCH 0/4] drm/xe: Adopt xe_log SIGID API for structured error reporting Mallesh Koujalagi
` (6 preceding siblings ...)
2026-08-06 12:13 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-08-06 20:44 ` Patchwork
7 siblings, 0 replies; 15+ messages in thread
From: Patchwork @ 2026-08-06 20:44 UTC (permalink / raw)
To: Mallesh Koujalagi; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 20770 bytes --]
== Series Details ==
Series: drm/xe: Adopt xe_log SIGID API for structured error reporting
URL : https://patchwork.freedesktop.org/series/171725/
State : success
== Summary ==
CI Bug Log - changes from xe-5552-8d11ccdc98daac5e969243b42907fd060a650091_FULL -> xe-pw-171725v1_FULL
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (2 -> 2)
------------------------------
No changes in participating hosts
Known issues
------------
Here are the changes found in xe-pw-171725v1_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip:
- shard-lnl: NOTRUN -> [SKIP][1] ([Intel XE#3658] / [Intel XE#7360])
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-7/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-0-hflip-async-flip.html
* igt@kms_big_fb@y-tiled-32bpp-rotate-0:
- shard-lnl: NOTRUN -> [SKIP][2] ([Intel XE#1124]) +2 other tests skip
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-8/igt@kms_big_fb@y-tiled-32bpp-rotate-0.html
* igt@kms_bw@linear-tiling-3-displays-target-2160x1440p:
- shard-lnl: NOTRUN -> [SKIP][3] ([Intel XE#367])
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-6/igt@kms_bw@linear-tiling-3-displays-target-2160x1440p.html
* igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-rc-ccs-cc:
- shard-lnl: NOTRUN -> [SKIP][4] ([Intel XE#2887]) +3 other tests skip
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-1/igt@kms_ccs@missing-ccs-buffer-y-tiled-gen12-rc-ccs-cc.html
* igt@kms_chamelium_hpd@dp-hpd-storm:
- shard-lnl: NOTRUN -> [SKIP][5] ([Intel XE#373])
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-6/igt@kms_chamelium_hpd@dp-hpd-storm.html
* igt@kms_content_protection@dp-mst-lic-type-0:
- shard-lnl: NOTRUN -> [SKIP][6] ([Intel XE#307] / [Intel XE#6974])
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-1/igt@kms_content_protection@dp-mst-lic-type-0.html
* igt@kms_cursor_crc@cursor-sliding-128x42:
- shard-lnl: NOTRUN -> [SKIP][7] ([Intel XE#1424]) +1 other test skip
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-5/igt@kms_cursor_crc@cursor-sliding-128x42.html
* igt@kms_cursor_legacy@cursora-vs-flipb-varying-size:
- shard-lnl: NOTRUN -> [SKIP][8] ([Intel XE#309] / [Intel XE#7343])
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-3/igt@kms_cursor_legacy@cursora-vs-flipb-varying-size.html
* igt@kms_dsc@dsc-fractional-bpp:
- shard-lnl: NOTRUN -> [SKIP][9] ([Intel XE#8265])
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-4/igt@kms_dsc@dsc-fractional-bpp.html
* igt@kms_flip@2x-dpms-vs-vblank-race:
- shard-lnl: NOTRUN -> [SKIP][10] ([Intel XE#1421])
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-4/igt@kms_flip@2x-dpms-vs-vblank-race.html
* igt@kms_flip@flip-vs-expired-vblank@c-edp1:
- shard-lnl: [PASS][11] -> [FAIL][12] ([Intel XE#301] / [Intel XE#3149])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5552-8d11ccdc98daac5e969243b42907fd060a650091/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling:
- shard-lnl: NOTRUN -> [SKIP][13] ([Intel XE#7178] / [Intel XE#7351])
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-4/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling.html
* igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-msflip-blt:
- shard-lnl: NOTRUN -> [SKIP][14] ([Intel XE#6312] / [Intel XE#651]) +2 other tests skip
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-5/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-shrfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@drrshdr-1p-rte:
- shard-lnl: NOTRUN -> [SKIP][15] ([Intel XE#6312]) +3 other tests skip
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-2/igt@kms_frontbuffer_tracking@drrshdr-1p-rte.html
* igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-primscrn-spr-indfb-draw-render:
- shard-lnl: NOTRUN -> [SKIP][16] ([Intel XE#7905]) +6 other tests skip
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-2/igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-primscrn-spr-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-shrfb-draw-render:
- shard-lnl: NOTRUN -> [SKIP][17] ([Intel XE#7865]) +2 other tests skip
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-8/igt@kms_frontbuffer_tracking@fbchdr-1p-primscrn-pri-shrfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-fullscreen:
- shard-lnl: NOTRUN -> [SKIP][18] ([Intel XE#656] / [Intel XE#7905]) +6 other tests skip
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-7/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-fullscreen.html
* igt@kms_frontbuffer_tracking@fbcpsrhdr-abgr161616f-draw-mmap-wc:
- shard-lnl: NOTRUN -> [SKIP][19] ([Intel XE#7061])
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-7/igt@kms_frontbuffer_tracking@fbcpsrhdr-abgr161616f-draw-mmap-wc.html
* igt@kms_joiner@invalid-modeset-force-big-joiner:
- shard-lnl: NOTRUN -> [SKIP][20] ([Intel XE#7086] / [Intel XE#7390])
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-6/igt@kms_joiner@invalid-modeset-force-big-joiner.html
* igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf:
- shard-lnl: NOTRUN -> [SKIP][21] ([Intel XE#2893] / [Intel XE#4608] / [Intel XE#7304])
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-3/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf.html
* igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf@pipe-a-edp-1:
- shard-lnl: NOTRUN -> [SKIP][22] ([Intel XE#4608])
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-3/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf@pipe-a-edp-1.html
* igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf@pipe-b-edp-1:
- shard-lnl: NOTRUN -> [SKIP][23] ([Intel XE#4608] / [Intel XE#7304])
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-3/igt@kms_psr2_sf@fbc-psr2-cursor-plane-move-continuous-exceed-sf@pipe-b-edp-1.html
* igt@kms_psr@pr-primary-render:
- shard-lnl: NOTRUN -> [SKIP][24] ([Intel XE#1406])
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-1/igt@kms_psr@pr-primary-render.html
* igt@kms_rotation_crc@bad-pixel-format:
- shard-lnl: NOTRUN -> [SKIP][25] ([Intel XE#3414] / [Intel XE#3904] / [Intel XE#7342])
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-3/igt@kms_rotation_crc@bad-pixel-format.html
* igt@kms_vrr@flipline:
- shard-lnl: NOTRUN -> [FAIL][26] ([Intel XE#4227] / [Intel XE#7397]) +1 other test fail
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-8/igt@kms_vrr@flipline.html
* igt@xe_evict@evict-mixed-many-threads-small:
- shard-bmg: [PASS][27] -> [INCOMPLETE][28] ([Intel XE#6321] / [Intel XE#8355])
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5552-8d11ccdc98daac5e969243b42907fd060a650091/shard-bmg-9/igt@xe_evict@evict-mixed-many-threads-small.html
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-bmg-10/igt@xe_evict@evict-mixed-many-threads-small.html
* igt@xe_evict@evict-threads-small-multi-vm:
- shard-lnl: NOTRUN -> [SKIP][29] ([Intel XE#6540] / [Intel XE#688]) +2 other tests skip
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-3/igt@xe_evict@evict-threads-small-multi-vm.html
* igt@xe_exec_balancer@no-exec-virtual-userptr-invalidate-race:
- shard-lnl: NOTRUN -> [SKIP][30] ([Intel XE#7482]) +2 other tests skip
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-3/igt@xe_exec_balancer@no-exec-virtual-userptr-invalidate-race.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-basic-defer-mmap:
- shard-lnl: NOTRUN -> [SKIP][31] ([Intel XE#1392]) +1 other test skip
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-3/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-basic-defer-mmap.html
* igt@xe_exec_fault_mode@many-multi-queue-invalid-fault:
- shard-lnl: NOTRUN -> [SKIP][32] ([Intel XE#8374])
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-1/igt@xe_exec_fault_mode@many-multi-queue-invalid-fault.html
* igt@xe_exec_multi_queue@two-queues-preempt-mode-fault-userptr-invalidate:
- shard-lnl: NOTRUN -> [SKIP][33] ([Intel XE#8364]) +6 other tests skip
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-7/igt@xe_exec_multi_queue@two-queues-preempt-mode-fault-userptr-invalidate.html
* igt@xe_exec_system_allocator@threads-shared-vm-many-stride-mmap-free-race-nomemset:
- shard-bmg: [PASS][34] -> [INCOMPLETE][35] ([Intel XE#8159])
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5552-8d11ccdc98daac5e969243b42907fd060a650091/shard-bmg-9/igt@xe_exec_system_allocator@threads-shared-vm-many-stride-mmap-free-race-nomemset.html
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-bmg-9/igt@xe_exec_system_allocator@threads-shared-vm-many-stride-mmap-free-race-nomemset.html
* igt@xe_exec_threads@threads-multi-queue-cm-shared-vm-basic:
- shard-lnl: NOTRUN -> [SKIP][36] ([Intel XE#8378]) +2 other tests skip
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-8/igt@xe_exec_threads@threads-multi-queue-cm-shared-vm-basic.html
* igt@xe_pat@pat-index-xelp:
- shard-lnl: NOTRUN -> [SKIP][37] ([Intel XE#7590] / [Intel XE#977])
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-2/igt@xe_pat@pat-index-xelp.html
* igt@xe_pm@s4-d3cold-basic-exec:
- shard-lnl: NOTRUN -> [SKIP][38] ([Intel XE#2284] / [Intel XE#366] / [Intel XE#7370])
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-3/igt@xe_pm@s4-d3cold-basic-exec.html
* igt@xe_sriov_flr@flr-each-isolation:
- shard-bmg: [PASS][39] -> [FAIL][40] ([Intel XE#6569])
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5552-8d11ccdc98daac5e969243b42907fd060a650091/shard-bmg-5/igt@xe_sriov_flr@flr-each-isolation.html
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-bmg-4/igt@xe_sriov_flr@flr-each-isolation.html
* igt@xe_survivability@i2c-functionality:
- shard-lnl: NOTRUN -> [SKIP][41] ([Intel XE#8415])
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-8/igt@xe_survivability@i2c-functionality.html
* igt@xe_vm@overcommit-nonfault-vram-lr-external-nodefer:
- shard-lnl: NOTRUN -> [SKIP][42] ([Intel XE#7892])
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-5/igt@xe_vm@overcommit-nonfault-vram-lr-external-nodefer.html
#### Possible fixes ####
* igt@kms_cursor_legacy@flip-vs-cursor-atomic:
- shard-bmg: [FAIL][43] ([Intel XE#7571]) -> [PASS][44]
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5552-8d11ccdc98daac5e969243b42907fd060a650091/shard-bmg-6/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-bmg-3/igt@kms_cursor_legacy@flip-vs-cursor-atomic.html
* igt@kms_flip@flip-vs-expired-vblank@a-edp1:
- shard-lnl: [FAIL][45] ([Intel XE#301]) -> [PASS][46] +1 other test pass
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5552-8d11ccdc98daac5e969243b42907fd060a650091/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank@a-edp1.html
* igt@kms_pm_dc@dc5-psr:
- shard-lnl: [FAIL][47] ([Intel XE#8399]) -> [PASS][48]
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5552-8d11ccdc98daac5e969243b42907fd060a650091/shard-lnl-4/igt@kms_pm_dc@dc5-psr.html
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-1/igt@kms_pm_dc@dc5-psr.html
* igt@kms_setmode@basic@pipe-b-edp-1:
- shard-lnl: [FAIL][49] ([Intel XE#8618]) -> [PASS][50] +2 other tests pass
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5552-8d11ccdc98daac5e969243b42907fd060a650091/shard-lnl-2/igt@kms_setmode@basic@pipe-b-edp-1.html
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-1/igt@kms_setmode@basic@pipe-b-edp-1.html
* igt@xe_sriov_scheduling@equal-throughput-normal-priority@numvfs-random-gt1-vcs0:
- shard-bmg: [FAIL][51] ([Intel XE#8526]) -> [PASS][52]
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5552-8d11ccdc98daac5e969243b42907fd060a650091/shard-bmg-10/igt@xe_sriov_scheduling@equal-throughput-normal-priority@numvfs-random-gt1-vcs0.html
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-bmg-4/igt@xe_sriov_scheduling@equal-throughput-normal-priority@numvfs-random-gt1-vcs0.html
* igt@xe_sriov_vfio@bind-unbind-vfs@numvfs-16:
- shard-bmg: [FAIL][53] ([Intel XE#7992]) -> [PASS][54] +28 other tests pass
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5552-8d11ccdc98daac5e969243b42907fd060a650091/shard-bmg-6/igt@xe_sriov_vfio@bind-unbind-vfs@numvfs-16.html
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-bmg-5/igt@xe_sriov_vfio@bind-unbind-vfs@numvfs-16.html
#### Warnings ####
* igt@kms_flip@flip-vs-expired-vblank:
- shard-lnl: [FAIL][55] ([Intel XE#301]) -> [FAIL][56] ([Intel XE#301] / [Intel XE#3149])
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5552-8d11ccdc98daac5e969243b42907fd060a650091/shard-lnl-4/igt@kms_flip@flip-vs-expired-vblank.html
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank.html
* igt@kms_hdr@brightness-with-hdr:
- shard-bmg: [SKIP][57] ([Intel XE#3374] / [Intel XE#3544]) -> [SKIP][58] ([Intel XE#3544])
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5552-8d11ccdc98daac5e969243b42907fd060a650091/shard-bmg-2/igt@kms_hdr@brightness-with-hdr.html
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-bmg-3/igt@kms_hdr@brightness-with-hdr.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-bmg: [SKIP][59] ([Intel XE#2426] / [Intel XE#5848]) -> [FAIL][60] ([Intel XE#1729] / [Intel XE#7424])
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5552-8d11ccdc98daac5e969243b42907fd060a650091/shard-bmg-8/igt@kms_tiled_display@basic-test-pattern.html
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/shard-bmg-10/igt@kms_tiled_display@basic-test-pattern.html
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
[Intel XE#1424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1424
[Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#2893]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2893
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#307]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/307
[Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
[Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
[Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
[Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
[Intel XE#3658]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3658
[Intel XE#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
[Intel XE#4227]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4227
[Intel XE#4608]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4608
[Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
[Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
[Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#6540]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6540
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#6569]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6569
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#6974]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6974
[Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
[Intel XE#7086]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7086
[Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
[Intel XE#7304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7304
[Intel XE#7342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7342
[Intel XE#7343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7343
[Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
[Intel XE#7360]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7360
[Intel XE#7370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7370
[Intel XE#7390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7390
[Intel XE#7397]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7397
[Intel XE#7424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7424
[Intel XE#7482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7482
[Intel XE#7571]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7571
[Intel XE#7590]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7590
[Intel XE#7865]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7865
[Intel XE#7892]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7892
[Intel XE#7905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7905
[Intel XE#7992]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7992
[Intel XE#8159]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8159
[Intel XE#8265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8265
[Intel XE#8355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8355
[Intel XE#8364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8364
[Intel XE#8374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8374
[Intel XE#8378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8378
[Intel XE#8399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8399
[Intel XE#8415]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8415
[Intel XE#8526]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8526
[Intel XE#8618]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8618
[Intel XE#977]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/977
Build changes
-------------
* IGT: IGT_9041 -> IGT_9042
* Linux: xe-5552-8d11ccdc98daac5e969243b42907fd060a650091 -> xe-pw-171725v1
IGT_9041: 9041
IGT_9042: 9042
xe-5552-8d11ccdc98daac5e969243b42907fd060a650091: 8d11ccdc98daac5e969243b42907fd060a650091
xe-pw-171725v1: 171725v1
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-171725v1/index.html
[-- Attachment #2: Type: text/html, Size: 22969 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 4/4] drm/xe/sysctrl: Add better sysctrl error reporting
2026-08-06 14:41 ` Michal Wajdeczko
@ 2026-08-07 8:48 ` Mallesh, Koujalagi
0 siblings, 0 replies; 15+ messages in thread
From: Mallesh, Koujalagi @ 2026-08-07 8:48 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe, rodrigo.vivi, matthew.brost
Cc: anshuman.gupta, badal.nilawar, vinay.belgaumkar, riana.tauro,
karthik.poosa, sk.anirban, raag.jadav, aravind.iddamsetty
On 06-08-2026 08:11 pm, Michal Wajdeczko wrote:
>
> On 8/6/2026 1:00 PM, Mallesh Koujalagi wrote:
>> Switch sysctrl error messages to xe_log_err() with SYSCTRL tags so
>> tools can reliably detect and categorize common sysctrl failures.
>>
>> Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>> ---
>> drivers/gpu/drm/xe/xe_sysctrl_event.c | 11 ++++++----
>> drivers/gpu/drm/xe/xe_sysctrl_mailbox.c | 29 ++++++++++++++++---------
>> 2 files changed, 26 insertions(+), 14 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_sysctrl_event.c b/drivers/gpu/drm/xe/xe_sysctrl_event.c
>> index da395148ee9d..1805a0b4d0d0 100644
>> --- a/drivers/gpu/drm/xe/xe_sysctrl_event.c
>> +++ b/drivers/gpu/drm/xe/xe_sysctrl_event.c
>> @@ -5,6 +5,7 @@
>>
>> #include "xe_device.h"
>> #include "xe_irq.h"
>> +#include "xe_log.h"
>> #include "xe_printk.h"
>> #include "xe_ras.h"
>> #include "xe_sysctrl.h"
>> @@ -25,13 +26,15 @@ static void get_pending_event(struct xe_sysctrl *sc, struct xe_sysctrl_mailbox_c
>>
>> ret = xe_sysctrl_send_command(sc, command, &len);
>> if (ret) {
>> - xe_err(xe, "sysctrl: failed to get pending event %d\n", ret);
>> + xe_log_err(xe, SYSCTRL, ret,
>> + "sysctrl: failed to get pending event\n");
> using "sysctrl: " prefix here is now redundant, as xe_log_err will add "SYSCTRL: " based on the TAG
Sure, will remove in next revision.
>
>> return;
>> }
>>
>> if (len != sizeof(*response)) {
>> - xe_err(xe, "sysctrl: unexpected event response length %zu (expected %zu)\n",
>> - len, sizeof(*response));
>> + xe_log_err(xe, SYSCTRL, 0,
>> + "sysctrl: unexpected event response length %zu (expected %zu)\n",
>> + len, sizeof(*response));
> ditto
>
> also since this is unexpected protocol error we should use -EPROTO or similar errno
Ok.
>
>
>> return;
>> }
>>
>> @@ -41,7 +44,7 @@ static void get_pending_event(struct xe_sysctrl *sc, struct xe_sysctrl_mailbox_c
>> xe_warn(xe, "sysctrl: unexpected event %#x\n", response->event);
> btw, shouldn't we also report that ^^^ warn case?
btw, do we've any SIGID based warning helper function? we can see that
warning message in dmesg right..any suggestion.
>>
>> if (!--count) {
>> - xe_err(xe, "sysctrl: event flooding\n");
>> + xe_log_err(xe, SYSCTRL, 0, "sysctrl: event flooding\n");
> again, drop the "sysctrl:" prefix
Sure
> and use some errno, maybe -ETOOMANYREFS ?
We can use -EOVERFLOW right.
> and maybe also print response->count to show how many events we left behind?
will add next revision.
> hmm, but what will happen to those events that we don't retrieve now?
> are they lost (and that's why we need to report an error)
> or maybe we will be able to retrieve them in another cycle?
> (but then I'm not sure we should report that as an error)
Hitting the flood limit (16) that means something is abnormal @ firmware
side which
generate event faster than we can drain them. If we would not use flood
limit, it would not break the loop.
In such scenario, we would not retry, simply report it.
>
>> return;
>> }
>>
>> diff --git a/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c b/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
>> index e13eebaac1d0..5c8edf9871c6 100644
>> --- a/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
>> +++ b/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
>> @@ -11,6 +11,7 @@
>>
>> #include "regs/xe_sysctrl_regs.h"
>> #include "xe_device.h"
>> +#include "xe_log.h"
>> #include "xe_mmio.h"
>> #include "xe_pm.h"
>> #include "xe_printk.h"
>> @@ -115,7 +116,8 @@ static int sysctrl_prepare_command(struct xe_device *xe,
>> xe_assert(xe, command <= SYSCTRL_HDR_COMMAND_MAX);
>>
>> if (data_in_len > XE_SYSCTRL_MB_MAX_MESSAGE_SIZE - sizeof(*hdr)) {
> hmm, shouldn't this be a simple xe_assert() instead?
> after all, it is us who prepares these cmds, right?
Agreed, instead of condition, they would have used xe_assert.
>> - xe_err(xe, "sysctrl: Input data too large: %zu bytes\n", data_in_len);
>> + xe_log_err(xe, SYSCTRL, -EINVAL,
>> + "sysctrl: Input data too large: %zu bytes\n", data_in_len);
>> return -EINVAL;
>> }
>>
>> @@ -149,7 +151,7 @@ static int sysctrl_send_frames(struct xe_sysctrl *sc,
>> total_frames = DIV_ROUND_UP(cmd_size, XE_SYSCTRL_MB_FRAME_SIZE);
>>
>> if (!sysctrl_wait_bit_clear(sc, SYSCTRL_MB_CTRL_RUN_BUSY, timeout_ms)) {
>> - xe_err(xe, "sysctrl: Mailbox busy\n");
>> + xe_log_err(xe, SYSCTRL, -EBUSY, "sysctrl: Mailbox busy\n");
> drop "sysctrl:" prefix
>
>> return -EBUSY;
>> }
>>
>> @@ -160,7 +162,8 @@ static int sysctrl_send_frames(struct xe_sysctrl *sc,
>> frame_size = min_t(size_t, cmd_size - bytes_sent, XE_SYSCTRL_MB_FRAME_SIZE);
>>
>> if (sysctrl_write_frame(sc, mbox_cmd + bytes_sent, frame_size)) {
>> - xe_err(xe, "sysctrl: Failed to write frame %u\n", frame);
>> + xe_log_err(xe, SYSCTRL, -EIO,
>> + "sysctrl: Failed to write frame %u\n", frame);
> ditto
>
>> sc->phase_bit = 0;
>> return -EIO;
>> }
>> @@ -174,7 +177,8 @@ static int sysctrl_send_frames(struct xe_sysctrl *sc,
>> xe_mmio_write32(sc->mmio, SYSCTRL_MB_CTRL, ctrl_reg);
>>
>> if (!sysctrl_wait_bit_clear(sc, SYSCTRL_MB_CTRL_RUN_BUSY, timeout_ms)) {
>> - xe_err(xe, "sysctrl: Frame %u acknowledgment timeout\n", frame);
>> + xe_log_err(xe, SYSCTRL, -ETIMEDOUT,
>> + "sysctrl: Frame %u acknowledgment timeout\n", frame);
> ditto
>
>> sc->phase_bit = 0;
>> return -ETIMEDOUT;
>> }
>> @@ -194,7 +198,8 @@ static int sysctrl_process_frame(struct xe_sysctrl *sc, void *out,
>> int ret;
>>
>> if (!sysctrl_wait_bit_set(sc, SYSCTRL_MB_CTRL_RUN_BUSY_OUT, timeout_ms)) {
>> - xe_err(xe, "sysctrl: Response frame timeout\n");
>> + xe_log_err(xe, SYSCTRL, -ETIMEDOUT,
>> + "sysctrl: Response frame timeout\n");
> ditto
>
>> return -ETIMEDOUT;
>> }
>>
>> @@ -249,13 +254,15 @@ static int sysctrl_receive_frames(struct xe_sysctrl *sc,
>> if (!XE_SYSCTRL_HDR_IS_RESPONSE(hdr) ||
>> XE_SYSCTRL_HDR_GROUP_ID(hdr) != XE_SYSCTRL_HDR_GROUP_ID(req) ||
>> XE_SYSCTRL_HDR_COMMAND(hdr) != XE_SYSCTRL_HDR_COMMAND(req)) {
>> - xe_err(xe, "sysctrl: Response header mismatch\n");
>> + xe_log_err(xe, SYSCTRL, -EPROTO,
>> + "sysctrl: Response header mismatch\n");
> ditto
>
>> return -EPROTO;
>> }
>>
>> if (XE_SYSCTRL_HDR_RESULT(hdr) != 0) {
>> - xe_err(xe, "sysctrl: Firmware error: 0x%02lx\n",
>> - XE_SYSCTRL_HDR_RESULT(hdr));
>> + xe_log_err(xe, SYSCTRL, -EIO,
>> + "sysctrl: Firmware error: 0x%02lx\n",
>> + XE_SYSCTRL_HDR_RESULT(hdr));
> ditto
>
>> return -EIO;
>> }
>>
>> @@ -381,7 +388,8 @@ int xe_sysctrl_send_command(struct xe_sysctrl *sc,
>> cmd->data_in, cmd->data_in_len,
>> &mbox_cmd, &cmd_size);
>> if (ret) {
>> - xe_err(xe, "sysctrl: Failed to prepare command: %pe\n", ERR_PTR(ret));
>> + xe_log_err(xe, SYSCTRL, ret,
>> + "sysctrl: Failed to prepare command: %pe\n", ERR_PTR(ret));
> ditto
>
> and drop redundant %pe as xe_log_err() will also print that error
Sure, will update in next revision
Thanks,
-/Mallesh
>> return ret;
>> }
>>
>> @@ -391,7 +399,8 @@ int xe_sysctrl_send_command(struct xe_sysctrl *sc,
>> cmd->data_out, cmd->data_out_len, rdata_len,
>> XE_SYSCTRL_MB_DEFAULT_TIMEOUT_MS);
>> if (ret)
>> - xe_err(xe, "sysctrl: Mailbox command failed: %pe\n", ERR_PTR(ret));
>> + xe_log_err(xe, SYSCTRL, ret,
>> + "sysctrl: Mailbox command failed: %pe\n", ERR_PTR(ret));
> ditto
>
>>
>> kfree(mbox_cmd);
>>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH 4/4] drm/xe/sysctrl: Add better sysctrl error reporting
2026-08-06 19:14 ` Umesh Nerlige Ramappa
@ 2026-08-07 8:59 ` Mallesh, Koujalagi
0 siblings, 0 replies; 15+ messages in thread
From: Mallesh, Koujalagi @ 2026-08-07 8:59 UTC (permalink / raw)
To: Umesh Nerlige Ramappa
Cc: intel-xe, rodrigo.vivi, matthew.brost, anshuman.gupta,
badal.nilawar, vinay.belgaumkar, riana.tauro, karthik.poosa,
sk.anirban, raag.jadav, michal.wajdeczko, aravind.iddamsetty
On 07-08-2026 12:44 am, Umesh Nerlige Ramappa wrote:
> On Thu, Aug 06, 2026 at 04:30:44PM +0530, Mallesh Koujalagi wrote:
>> Switch sysctrl error messages to xe_log_err() with SYSCTRL tags so
>> tools can reliably detect and categorize common sysctrl failures.
>>
>> Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com>
>> ---
>> drivers/gpu/drm/xe/xe_sysctrl_event.c | 11 ++++++----
>> drivers/gpu/drm/xe/xe_sysctrl_mailbox.c | 29 ++++++++++++++++---------
>> 2 files changed, 26 insertions(+), 14 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_sysctrl_event.c
>> b/drivers/gpu/drm/xe/xe_sysctrl_event.c
>> index da395148ee9d..1805a0b4d0d0 100644
>> --- a/drivers/gpu/drm/xe/xe_sysctrl_event.c
>> +++ b/drivers/gpu/drm/xe/xe_sysctrl_event.c
>> @@ -5,6 +5,7 @@
>>
>> #include "xe_device.h"
>> #include "xe_irq.h"
>> +#include "xe_log.h"
>> #include "xe_printk.h"
>> #include "xe_ras.h"
>> #include "xe_sysctrl.h"
>> @@ -25,13 +26,15 @@ static void get_pending_event(struct xe_sysctrl
>> *sc, struct xe_sysctrl_mailbox_c
>
> This seems to be running in a worker started from probe, but it does
> not fail probe. Do we still need to report this as xe_log_err/SIG_ID?
Yes, we need to report all System controller errors using SIGID API,
please refer
https://patchwork.freedesktop.org/patch/743308/?series=171022&rev=3
>
>>
>> ret = xe_sysctrl_send_command(sc, command, &len);
>> if (ret) {
>> - xe_err(xe, "sysctrl: failed to get pending event %d\n",
>> ret);
>> + xe_log_err(xe, SYSCTRL, ret,
>> + "sysctrl: failed to get pending event\n");
>> return;
>> }
>>
>> if (len != sizeof(*response)) {
>> - xe_err(xe, "sysctrl: unexpected event response length
>> %zu (expected %zu)\n",
>> - len, sizeof(*response));
>> + xe_log_err(xe, SYSCTRL, 0,
>> + "sysctrl: unexpected event response length %zu
>> (expected %zu)\n",
>> + len, sizeof(*response));
>> return;
>> }
>>
>> @@ -41,7 +44,7 @@ static void get_pending_event(struct xe_sysctrl
>> *sc, struct xe_sysctrl_mailbox_c
>> xe_warn(xe, "sysctrl: unexpected event %#x\n",
>> response->event);
>>
>> if (!--count) {
>> - xe_err(xe, "sysctrl: event flooding\n");
>> + xe_log_err(xe, SYSCTRL, 0, "sysctrl: event flooding\n");
>> return;
>> }
>>
>> diff --git a/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
>> b/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
>> index e13eebaac1d0..5c8edf9871c6 100644
>> --- a/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
>> +++ b/drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
>> @@ -11,6 +11,7 @@
>>
>> #include "regs/xe_sysctrl_regs.h"
>> #include "xe_device.h"
>> +#include "xe_log.h"
>> #include "xe_mmio.h"
>> #include "xe_pm.h"
>> #include "xe_printk.h"
>> @@ -115,7 +116,8 @@ static int sysctrl_prepare_command(struct
>> xe_device *xe,
>> xe_assert(xe, command <= SYSCTRL_HDR_COMMAND_MAX);
>>
>> if (data_in_len > XE_SYSCTRL_MB_MAX_MESSAGE_SIZE - sizeof(*hdr)) {
>> - xe_err(xe, "sysctrl: Input data too large: %zu bytes\n",
>> data_in_len);
>> + xe_log_err(xe, SYSCTRL, -EINVAL,
>> + "sysctrl: Input data too large: %zu bytes\n",
>> data_in_len);
>> return -EINVAL;
>> }
>>
>> @@ -149,7 +151,7 @@ static int sysctrl_send_frames(struct xe_sysctrl
>> *sc,
>> total_frames = DIV_ROUND_UP(cmd_size, XE_SYSCTRL_MB_FRAME_SIZE);
>>
>> if (!sysctrl_wait_bit_clear(sc, SYSCTRL_MB_CTRL_RUN_BUSY,
>> timeout_ms)) {
>> - xe_err(xe, "sysctrl: Mailbox busy\n");
>> + xe_log_err(xe, SYSCTRL, -EBUSY, "sysctrl: Mailbox busy\n");
>> return -EBUSY;
>> }
>>
>> @@ -160,7 +162,8 @@ static int sysctrl_send_frames(struct xe_sysctrl
>> *sc,
>> frame_size = min_t(size_t, cmd_size - bytes_sent,
>> XE_SYSCTRL_MB_FRAME_SIZE);
>>
>> if (sysctrl_write_frame(sc, mbox_cmd + bytes_sent,
>> frame_size)) {
>> - xe_err(xe, "sysctrl: Failed to write frame %u\n", frame);
>> + xe_log_err(xe, SYSCTRL, -EIO,
>> + "sysctrl: Failed to write frame %u\n", frame);
>> sc->phase_bit = 0;
>> return -EIO;
>> }
>> @@ -174,7 +177,8 @@ static int sysctrl_send_frames(struct xe_sysctrl
>> *sc,
>> xe_mmio_write32(sc->mmio, SYSCTRL_MB_CTRL, ctrl_reg);
>>
>> if (!sysctrl_wait_bit_clear(sc, SYSCTRL_MB_CTRL_RUN_BUSY,
>> timeout_ms)) {
>> - xe_err(xe, "sysctrl: Frame %u acknowledgment timeout\n",
>> frame);
>> + xe_log_err(xe, SYSCTRL, -ETIMEDOUT,
>> + "sysctrl: Frame %u acknowledgment timeout\n",
>> frame);
>> sc->phase_bit = 0;
>> return -ETIMEDOUT;
>> }
>> @@ -194,7 +198,8 @@ static int sysctrl_process_frame(struct
>> xe_sysctrl *sc, void *out,
>> int ret;
>>
>> if (!sysctrl_wait_bit_set(sc, SYSCTRL_MB_CTRL_RUN_BUSY_OUT,
>> timeout_ms)) {
>> - xe_err(xe, "sysctrl: Response frame timeout\n");
>> + xe_log_err(xe, SYSCTRL, -ETIMEDOUT,
>> + "sysctrl: Response frame timeout\n");
>> return -ETIMEDOUT;
>> }
>>
>> @@ -249,13 +254,15 @@ static int sysctrl_receive_frames(struct
>> xe_sysctrl *sc,
>> if (!XE_SYSCTRL_HDR_IS_RESPONSE(hdr) ||
>> XE_SYSCTRL_HDR_GROUP_ID(hdr) != XE_SYSCTRL_HDR_GROUP_ID(req) ||
>> XE_SYSCTRL_HDR_COMMAND(hdr) != XE_SYSCTRL_HDR_COMMAND(req)) {
>> - xe_err(xe, "sysctrl: Response header mismatch\n");
>> + xe_log_err(xe, SYSCTRL, -EPROTO,
>> + "sysctrl: Response header mismatch\n");
>> return -EPROTO;
>> }
>>
>> if (XE_SYSCTRL_HDR_RESULT(hdr) != 0) {
>> - xe_err(xe, "sysctrl: Firmware error: 0x%02lx\n",
>> - XE_SYSCTRL_HDR_RESULT(hdr));
>> + xe_log_err(xe, SYSCTRL, -EIO,
>> + "sysctrl: Firmware error: 0x%02lx\n",
>> + XE_SYSCTRL_HDR_RESULT(hdr));
>
> Other than this ^ one "Firmware error", I am not sure if we want to
> report every sysctrl mailbox error using xe_log_err. Are there callers
> in the probe path that are using these functions and would probe
> benefit from reporting all of these?
Yes, all System Controller errors should be reported using the SYSCTRL
SIGID API. In addition, probe path failures should be reported
independently using the PROBE SIGID API.
This separation ensures that System Controller errors and probe-related
failures are tracked and categorized appropriately.
For more details about the SIGID reporting framework,
please refer to: https://patchwork.freedesktop.org/series/171022/
Thanks,
-/Mallesh
>
> Thanks,
> Umesh
>> return -EIO;
>> }
>>
>> @@ -381,7 +388,8 @@ int xe_sysctrl_send_command(struct xe_sysctrl *sc,
>> cmd->data_in, cmd->data_in_len,
>> &mbox_cmd, &cmd_size);
>> if (ret) {
>> - xe_err(xe, "sysctrl: Failed to prepare command: %pe\n",
>> ERR_PTR(ret));
>> + xe_log_err(xe, SYSCTRL, ret,
>> + "sysctrl: Failed to prepare command: %pe\n",
>> ERR_PTR(ret));
>> return ret;
>> }
>>
>> @@ -391,7 +399,8 @@ int xe_sysctrl_send_command(struct xe_sysctrl *sc,
>> cmd->data_out, cmd->data_out_len, rdata_len,
>> XE_SYSCTRL_MB_DEFAULT_TIMEOUT_MS);
>> if (ret)
>> - xe_err(xe, "sysctrl: Mailbox command failed: %pe\n",
>> ERR_PTR(ret));
>> + xe_log_err(xe, SYSCTRL, ret,
>> + "sysctrl: Mailbox command failed: %pe\n", ERR_PTR(ret));
>>
>> kfree(mbox_cmd);
>>
>> --
>> 2.48.1
>>
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2026-08-07 9:00 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-06 11:00 [PATCH 0/4] drm/xe: Adopt xe_log SIGID API for structured error reporting Mallesh Koujalagi
2026-08-06 11:00 ` [PATCH 1/4] drm/xe/log: DO NOT REVIEW Mallesh Koujalagi
2026-08-06 11:00 ` [PATCH 2/4] drm/xe: Use xe_log SIGID API for probe-path error reporting Mallesh Koujalagi
2026-08-06 17:52 ` Michal Wajdeczko
2026-08-06 11:00 ` [PATCH 3/4] drm/xe/pcode: Improve pcode timeout logging Mallesh Koujalagi
2026-08-06 14:42 ` Michal Wajdeczko
2026-08-06 11:00 ` [PATCH 4/4] drm/xe/sysctrl: Add better sysctrl error reporting Mallesh Koujalagi
2026-08-06 14:41 ` Michal Wajdeczko
2026-08-07 8:48 ` Mallesh, Koujalagi
2026-08-06 19:14 ` Umesh Nerlige Ramappa
2026-08-07 8:59 ` Mallesh, Koujalagi
2026-08-06 11:07 ` ✗ CI.checkpatch: warning for drm/xe: Adopt xe_log SIGID API for structured " Patchwork
2026-08-06 11:08 ` ✓ CI.KUnit: success " Patchwork
2026-08-06 12:13 ` ✓ Xe.CI.BAT: " Patchwork
2026-08-06 20:44 ` ✓ 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