intel-xe.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/1] Add support for EU stall sampling
@ 2024-09-09  7:36 Harish Chegondi
  2024-09-09  7:36 ` [PATCH v3 1/1] drm/xe/eustall: " Harish Chegondi
                   ` (9 more replies)
  0 siblings, 10 replies; 20+ messages in thread
From: Harish Chegondi @ 2024-09-09  7:36 UTC (permalink / raw)
  To: intel-xe
  Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, jose.souza,
	matias.a.cabral, joshua.santosh.ranjan, Harish Chegondi

The following patch adds support for EU stall sampling, a new hardware
feature first added in PVC and is being supported in XE2 and later
architecture GPUs. This feature would enable capturing of EU stall
data which include the IP address of the instruction stalled and
various stall reason counts. More details are explained in the patch
commit message.

Support for this feature is being added into Mesa.
https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30142

A new test in the IGT repo: 
https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
is also under development to test this feature in the driver. This
patch has undergone basic testing with the new IGT test that is under
development.

Thank You.

v3: a. Removed data header and changed read() to return -EIO when data is dropped by the HW.
    b. Added a new DRM_XE_OBSERVATION_IOCTL_INFO to query EU stall data record info
    c. Added struct drm_xe_eu_stall_data_pvc and struct drm_xe_eu_stall_data_xe2
       to xe_drm.h. These declarations would help user space to parse the
       EU stall data
    d. Addressed other review comments from v2
v2: Rename xe perf layer as xe observation layer (Ashutosh)

Harish Chegondi (1):
  drm/xe/eustall: Add support for EU stall sampling

 drivers/gpu/drm/xe/Makefile                |    1 +
 drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h |   33 +
 drivers/gpu/drm/xe/xe_eustall_cntr.c       | 1000 ++++++++++++++++++++
 drivers/gpu/drm/xe/xe_eustall_cntr.h       |   60 ++
 drivers/gpu/drm/xe/xe_gt.c                 |    6 +
 drivers/gpu/drm/xe/xe_gt_topology.c        |    9 +
 drivers/gpu/drm/xe/xe_gt_topology.h        |    3 +
 drivers/gpu/drm/xe/xe_gt_types.h           |    3 +
 drivers/gpu/drm/xe/xe_observation.c        |   14 +
 drivers/gpu/drm/xe/xe_trace.h              |   35 +
 include/uapi/drm/xe_drm.h                  |  134 +++
 11 files changed, 1298 insertions(+)
 create mode 100644 drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
 create mode 100644 drivers/gpu/drm/xe/xe_eustall_cntr.c
 create mode 100644 drivers/gpu/drm/xe/xe_eustall_cntr.h

-- 
2.45.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH v3 1/1] drm/xe/eustall: Add support for EU stall sampling
  2024-09-09  7:36 [PATCH v3 0/1] Add support for EU stall sampling Harish Chegondi
@ 2024-09-09  7:36 ` Harish Chegondi
  2024-09-09 19:27   ` Dixit, Ashutosh
  2024-09-10  0:09   ` Matt Roper
  2024-09-09  7:42 ` [PATCH v3 0/1] " Ranjan, Joshua Santhosh
                   ` (8 subsequent siblings)
  9 siblings, 2 replies; 20+ messages in thread
From: Harish Chegondi @ 2024-09-09  7:36 UTC (permalink / raw)
  To: intel-xe
  Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, jose.souza,
	matias.a.cabral, joshua.santosh.ranjan, Harish Chegondi

A new hardware feature first introduced in PVC gives capability to
periodically sample EU stall state and record counts for different stall
reasons, on a per IP basis, aggregate across all EUs in a subslice and
record the samples in a buffer in each subslice. Eventually, the aggregated
data is written out to a buffer in the memory. This feature is also
supported in XE2 architecture GPUs - LNL and BMG.

Use an existing IOCTL DRM_IOCTL_XE_OBSERVATION as interface into the driver
from the user space to do initial setup and obtain a file descriptor for
the EU stall counter data stream.  Input parameter to the IOCTL is a struct
drm_xe_observation_param in which observation_type should be set to
DRM_XE_OBSERVATION_TYPE_EU_STALL, observation_op should be
DRM_XE_OBSERVATION_OP_STREAM_OPEN and param should point to a chain of
drm_xe_ext_set_property structures in which each structure has a pair of
property and value. The EU stall sampling input properties are defined in
drm_xe_eu_stall_property_id enum.

With the file descriptor obtained from DRM_IOCTL_XE_OBSERVATION, user space
can enable and disable EU stall sampling with the IOCTLs:
DRM_XE_OBSERVATION_IOCTL_ENABLE and DRM_XE_OBSERVATION_IOCTL_DISABLE.
User space can find the EU stall data record size with the IOCTL
DRM_XE_OBSERVATION_IOCTL_INFO through struct drm_xe_eu_stall_stream_info
parameter. User space can also call poll() to check for availability of
data. The data can be read with read(). If the user space doesn't read
the EU stall data fast enough, it is possible that the EU stall data buffer
can get filled up and if the hardware wants to write more data, it
simply drops data due to unavailable buffer space. In that case hardware
sets a bit in a register. The driver read() returns -EIO error to let
the user space know that the hardware has dropped data. A subsequent
read by the user space returns the remaining EU stall data.

v3: a. Removed data header.
    b. Changed read() to return -EIO when data is dropped by the HW.
    c. Added a new DRM_XE_OBSERVATION_IOCTL_INFO to query data record info
    d. Added struct drm_xe_eu_stall_data_pvc and struct drm_xe_eu_stall_data_xe2
       to xe_drm.h. These declarations would help user space to parse the
       EU stall data
    e. Addressed other review comments from v2
v2: Rename xe perf layer as xe observation layer (Ashutosh)

Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/Makefile                |    1 +
 drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h |   33 +
 drivers/gpu/drm/xe/xe_eustall_cntr.c       | 1000 ++++++++++++++++++++
 drivers/gpu/drm/xe/xe_eustall_cntr.h       |   60 ++
 drivers/gpu/drm/xe/xe_gt.c                 |    6 +
 drivers/gpu/drm/xe/xe_gt_topology.c        |    9 +
 drivers/gpu/drm/xe/xe_gt_topology.h        |    3 +
 drivers/gpu/drm/xe/xe_gt_types.h           |    3 +
 drivers/gpu/drm/xe/xe_observation.c        |   14 +
 drivers/gpu/drm/xe/xe_trace.h              |   35 +
 include/uapi/drm/xe_drm.h                  |  134 +++
 11 files changed, 1298 insertions(+)
 create mode 100644 drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
 create mode 100644 drivers/gpu/drm/xe/xe_eustall_cntr.c
 create mode 100644 drivers/gpu/drm/xe/xe_eustall_cntr.h

diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index edfd812e0f41..9c5325796bd7 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -33,6 +33,7 @@ xe-y += xe_bb.o \
 	xe_device_sysfs.o \
 	xe_dma_buf.o \
 	xe_drm_client.o \
+	xe_eustall_cntr.o \
 	xe_exec.o \
 	xe_execlist.o \
 	xe_exec_queue.o \
diff --git a/drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h b/drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
new file mode 100644
index 000000000000..c70f35f82cc5
--- /dev/null
+++ b/drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#ifndef _XE_EU_STALL_REGS_H_
+#define _XE_EU_STALL_REGS_H_
+
+#include "regs/xe_reg_defs.h"
+
+#define XEHPC_EUSTALL_BASE			XE_REG_MCR(0xe520)
+#define   XEHPC_EUSTALL_BASE_BUF_ADDR		REG_GENMASK(31, 6)
+#define   XEHPC_EUSTALL_BASE_DSS_BUF_SZ		REG_GENMASK(5, 3)
+#define   XEHPC_EUSTALL_BASE_ENABLE_SAMPLING	REG_BIT(1)
+#define   XEHPC_EUSTALL_BASE_EVICT_TDL_STALL_BUF	REG_BIT(0)
+
+#define XEHPC_EUSTALL_BASE_UPPER		XE_REG_MCR(0xe524)
+
+#define XEHPC_EUSTALL_REPORT			XE_REG_MCR(0xe528)
+#define   XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK	REG_GENMASK(15, 2)
+#define   XEHPC_EUSTALL_REPORT_WRITE_PTR_SHIFT	2
+#define   XEHPC_EUSTALL_REPORT_OVERFLOW_DROP	REG_BIT(1)
+
+#define XEHPC_EUSTALL_REPORT1			XE_REG_MCR(0xe52c)
+#define   XEHPC_EUSTALL_REPORT1_MASK_SHIFT	16
+#define   XEHPC_EUSTALL_REPORT1_READ_PTR_MASK	REG_GENMASK(15, 2)
+#define   XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT	2
+
+#define XEHPC_EUSTALL_CTRL			XE_REG_MCR(0xe53c)
+#define   EUSTALL_MOCS				REG_GENMASK(9, 3)
+#define   EUSTALL_SAMPLE_RATE			REG_GENMASK(2, 0)
+
+#endif
diff --git a/drivers/gpu/drm/xe/xe_eustall_cntr.c b/drivers/gpu/drm/xe/xe_eustall_cntr.c
new file mode 100644
index 000000000000..d8546fef8dd6
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_eustall_cntr.c
@@ -0,0 +1,1000 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#include <linux/anon_inodes.h>
+#include <linux/nospec.h>
+#include <linux/poll.h>
+#include <drm/drm_drv.h>
+#include "xe_gt.h"
+#include "xe_bo.h"
+#include "xe_pm.h"
+#include "xe_trace.h"
+#include "xe_device.h"
+#include "xe_gt_mcr.h"
+#include "xe_force_wake.h"
+#include "xe_gt_topology.h"
+#include "xe_eustall_cntr.h"
+#include "regs/xe_gt_regs.h"
+
+#define DEFAULT_POLL_FREQUENCY_HZ 100
+#define DEFAULT_POLL_PERIOD_NS (NSEC_PER_SEC / DEFAULT_POLL_FREQUENCY_HZ)
+#define MISSING_CASE(x) WARN(1, "Missing case (%s == %ld)\n", \
+			     __stringify(x), (long)(x))
+
+extern u32 xe_observation_paranoid;
+
+/**
+ * struct eu_stall_open_properties
+ *
+ * @eu_stall_sampling_rate: Hardware EU stall sampling rate.
+ * @event_report_count: Minimum no of EU stall data rows for poll to set POLLIN.
+ * @eu_stall_buf_sz: Per subslice EU stall data buffer size.
+ * @open_disabled: Should EU stall sampling be disabled at open.
+ * @poll_period: The period in nanoseconds at which the CPU will check for
+ *		 EU stall data in the buffer.
+ * @gt_id: GT ID of the GT on which EU stall data will be captured.
+ */
+struct eu_stall_open_properties {
+	u8 eu_stall_sampling_rate;
+	u32 event_report_count;
+	u32 eu_stall_buf_sz;
+	bool open_disabled;
+	u64 poll_period;
+	u8 gt_id;
+};
+
+/**
+ * num_data_rows - Return the number of EU stall data rows of 64B each
+ *		   for a given data size.
+ *
+ * @data_size: EU stall data size
+ */
+static inline u32
+num_data_rows(u32 data_size)
+{
+	return (data_size >> 6);
+}
+
+int xe_eustall_cntr_init(struct xe_gt *gt)
+{
+	gt->eu_stall_cntr = kzalloc(sizeof(*gt->eu_stall_cntr), GFP_KERNEL);
+	if (!gt->eu_stall_cntr)
+		return -ENOMEM;
+
+	mutex_init(&gt->eu_stall_cntr->lock);
+	return 0;
+}
+
+static int set_prop_eu_stall_buffer_size(struct xe_device *xe, u64 value,
+					 struct eu_stall_open_properties *props)
+{
+	if (value != SZ_128K &&
+	    value != SZ_256K &&
+	    value != SZ_512K) {
+		drm_dbg(&xe->drm, "Invalid EU stall buffer size %llu\n", value);
+		return -EINVAL;
+	}
+	props->eu_stall_buf_sz = value;
+	return 0;
+}
+
+static int set_prop_eu_stall_sampling_rate(struct xe_device *xe, u64 value,
+					   struct eu_stall_open_properties *props)
+{
+	if (value == 0 || value > 7) {
+		drm_dbg(&xe->drm, "Invalid EU stall sampling rate %llu\n", value);
+		return -EINVAL;
+	}
+	props->eu_stall_sampling_rate = value;
+	return 0;
+}
+
+static int set_prop_eu_stall_poll_period(struct xe_device *xe, u64 value,
+					 struct eu_stall_open_properties *props)
+{
+	if (value < 100000 /* 100us */) {
+		drm_dbg(&xe->drm, "EU stall data poll period %lluns less than 100us\n", value);
+		return -EINVAL;
+	}
+	props->poll_period = value;
+	return 0;
+}
+
+static int set_prop_eu_stall_event_report_count(struct xe_device *xe, u64 value,
+						struct eu_stall_open_properties *props)
+{
+	if (value == 0) {
+		drm_dbg(&xe->drm, "Invalid EU stall poll event report count %llu\n", value);
+		return -EINVAL;
+	}
+	props->event_report_count = (u32)value;
+	return 0;
+}
+
+static int set_prop_eu_stall_gt_id(struct xe_device *xe, u64 value,
+				   struct eu_stall_open_properties *props)
+{
+	if (value >= XE_MAX_GT_PER_TILE) {
+		drm_dbg(&xe->drm, "Invalid GT ID %llu for EU stall sampling\n", value);
+		return -EINVAL;
+	}
+	props->gt_id = (u8)value;
+	return 0;
+}
+
+static int set_prop_eu_stall_open_disabled(struct xe_device *xe, u64 value,
+					   struct eu_stall_open_properties *props)
+{
+	props->open_disabled = value;
+	return 0;
+}
+
+typedef int (*set_eu_stall_property_fn)(struct xe_device *xe, u64 value,
+					struct eu_stall_open_properties *props);
+
+static const set_eu_stall_property_fn xe_set_eu_stall_property_funcs[] = {
+	[DRM_XE_EU_STALL_PROP_BUF_SZ] = set_prop_eu_stall_buffer_size,
+	[DRM_XE_EU_STALL_PROP_SAMPLE_RATE] = set_prop_eu_stall_sampling_rate,
+	[DRM_XE_EU_STALL_PROP_POLL_PERIOD] = set_prop_eu_stall_poll_period,
+	[DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT] = set_prop_eu_stall_event_report_count,
+	[DRM_XE_EU_STALL_PROP_GT_ID] = set_prop_eu_stall_gt_id,
+	[DRM_XE_EU_STALL_PROP_OPEN_DISABLED] = set_prop_eu_stall_open_disabled,
+};
+
+static int xe_eu_stall_user_ext_set_property(struct xe_device *xe, u64 extension,
+					     struct eu_stall_open_properties *props)
+{
+	u64 __user *address = u64_to_user_ptr(extension);
+	struct drm_xe_ext_set_property ext;
+	int err;
+	u32 idx;
+
+	err = __copy_from_user(&ext, address, sizeof(ext));
+	if (XE_IOCTL_DBG(xe, err))
+		return -EFAULT;
+
+	if (XE_IOCTL_DBG(xe, ext.property >= ARRAY_SIZE(xe_set_eu_stall_property_funcs)) ||
+	    XE_IOCTL_DBG(xe, ext.pad))
+		return -EINVAL;
+
+	idx = array_index_nospec(ext.property, ARRAY_SIZE(xe_set_eu_stall_property_funcs));
+	return xe_set_eu_stall_property_funcs[idx](xe, ext.value, props);
+}
+
+typedef int (*xe_eu_stall_user_extension_fn)(struct xe_device *xe, u64 extension,
+					     struct eu_stall_open_properties *props);
+static const xe_eu_stall_user_extension_fn xe_eu_stall_user_extension_funcs[] = {
+	[DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY] = xe_eu_stall_user_ext_set_property,
+};
+
+static int xe_eu_stall_user_extensions(struct xe_device *xe, u64 extension,
+				       struct eu_stall_open_properties *props)
+{
+	u64 __user *address = u64_to_user_ptr(extension);
+	struct drm_xe_user_extension ext;
+	int err;
+	u32 idx;
+
+	err = __copy_from_user(&ext, address, sizeof(ext));
+	if (XE_IOCTL_DBG(xe, err))
+		return -EFAULT;
+
+	if (XE_IOCTL_DBG(xe, ext.pad) ||
+	    XE_IOCTL_DBG(xe, ext.name >= ARRAY_SIZE(xe_eu_stall_user_extension_funcs)))
+		return -EINVAL;
+
+	idx = array_index_nospec(ext.name, ARRAY_SIZE(xe_eu_stall_user_extension_funcs));
+	err = xe_eu_stall_user_extension_funcs[idx](xe, extension, props);
+	if (XE_IOCTL_DBG(xe, err))
+		return err;
+
+	if (ext.next_extension)
+		return xe_eu_stall_user_extensions(xe, ext.next_extension, props);
+
+	return 0;
+}
+
+/**
+ * buf_data_size - Calculate the number of bytes in a circular buffer
+ *		   of size buf_size given the read and write pointers
+ *		   into the buffer.
+ *
+ * @read_ptr: Read pointer. Uses an additional overflow bit
+ * @write_ptr: Write pointer. Uses an additional overflow bit
+ *
+ * Returns: number of bytes of data in the buffer
+ */
+static u32
+buf_data_size(size_t buf_size, u32 read_ptr, u32 write_ptr)
+{
+	u32 read_offset, write_offset, size = 0;
+
+	read_offset = read_ptr & (buf_size - 1);
+	write_offset = write_ptr & (buf_size - 1);
+
+	if (write_offset > read_offset)
+		size = write_offset - read_offset;
+	else
+		size = buf_size - read_offset + write_offset;
+
+	return size;
+}
+
+/**
+ * eu_stall_cntr_buf_check - check for data in the EU stall counter buffer
+ *
+ * @stream: xe EU stall data stream instance
+ *
+ * Returns: true if the EU stall buffer contains minimum stall data as
+ *	    specified by the event report count, else false.
+ */
+static bool
+eu_stall_cntr_buf_check(struct xe_eu_stall_cntr_stream *stream)
+{
+	u32 read_ptr, write_ptr_reg, write_ptr, total_data = 0;
+	u32 buf_size = stream->per_dss_buf_size;
+	struct xe_gt *gt = stream->gt;
+	struct per_dss_buf *dss_buf;
+	bool min_data_present;
+	u16 group, instance;
+	unsigned int dss;
+
+	min_data_present = false;
+	for_each_dss_steering(dss, gt, group, instance) {
+		dss_buf = &stream->dss_buf[dss];
+		mutex_lock(&dss_buf->lock);
+		read_ptr = dss_buf->read;
+		write_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT,
+						       group, instance);
+		write_ptr = write_ptr_reg & XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK;
+		write_ptr <<= (6 - XEHPC_EUSTALL_REPORT_WRITE_PTR_SHIFT);
+		write_ptr &= ((buf_size << 1) - 1);
+		if ((write_ptr != read_ptr) && !min_data_present) {
+			total_data += buf_data_size(buf_size, read_ptr, write_ptr);
+			/*
+			 * Check if there are at least minimum number of stall data
+			 * rows for poll() to indicate that the data is present.
+			 * Each stall data row is 64B (cacheline size).
+			 */
+			if (num_data_rows(total_data) >= stream->event_report_count)
+				min_data_present = true;
+		}
+		if (write_ptr_reg & XEHPC_EUSTALL_REPORT_OVERFLOW_DROP) {
+			spin_lock(&stream->data_drop.lock);
+			bitmap_set(stream->data_drop.mask, dss, 1);
+			spin_unlock(&stream->data_drop.lock);
+		}
+		dss_buf->write = write_ptr;
+		mutex_unlock(&dss_buf->lock);
+	}
+	return min_data_present;
+}
+
+static void
+clear_dropped_eviction_line_bit(struct xe_gt *gt, u16 group, u16 instance)
+{
+	enum xe_platform platform;
+	u32 write_ptr_reg;
+
+	platform = gt_to_xe(gt)->info.platform;
+
+	/* On PVC, the overflow bit has to be cleared by writing 1 to it.
+	 * On other GPUs, the bit has to be cleared by writing 0 to it.
+	 */
+	if (platform == XE_PVC)
+		write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
+	else
+		write_ptr_reg = _MASKED_BIT_DISABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
+
+	xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT, write_ptr_reg, group, instance);
+	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_REPORT.__reg).addr,
+			write_ptr_reg, sizeof(write_ptr_reg));
+}
+
+static int
+__xe_eu_stall_buf_read(struct xe_eu_stall_cntr_stream *stream,
+		       char __user *buf, size_t count,
+		       size_t *total_size, struct xe_gt *gt,
+		       u16 group, u16 instance, unsigned int dss)
+{
+	u32 read_ptr_reg, read_ptr, write_ptr;
+	u8 *dss_start_vaddr, *read_vaddr;
+	u32 read_offset, write_offset;
+	struct per_dss_buf *dss_buf;
+	size_t size, buf_size;
+
+	/* Hardware increments the read and write pointers such that they can
+	 * overflow into one additional bit. For example, a 256KB size buffer
+	 * offset pointer needs 18 bits. But HW uses 19 bits for the read and
+	 * write pointers. This technique avoids wasting a slot in the buffer.
+	 * Read and write offsets are calculated from the pointers in order to
+	 * check if the write pointer has wrapped around the array.
+	 */
+	dss_buf = &stream->dss_buf[dss];
+	mutex_lock(&dss_buf->lock);
+	dss_start_vaddr = dss_buf->vaddr;
+	read_ptr = dss_buf->read;
+	write_ptr = dss_buf->write;
+	buf_size = stream->per_dss_buf_size;
+	read_offset = read_ptr & (buf_size - 1);
+	write_offset = write_ptr & (buf_size - 1);
+
+	trace_xe_eu_stall_cntr_read(group, instance, read_ptr, write_ptr,
+				    read_offset, write_offset, *total_size);
+	if (write_ptr == read_ptr) {
+		mutex_unlock(&dss_buf->lock);
+		return 0;
+	}
+
+	/* If write pointer offset is less than the read pointer offset,
+	 * it means, write pointer has wrapped around the array.
+	 */
+	if (write_offset > read_offset)
+		size = write_offset - read_offset;
+	else
+		size = buf_size - read_offset + write_offset;
+
+	/* Read only the data that the user space buffer can accommodate */
+	if ((*total_size + size) > count) {
+		mutex_unlock(&dss_buf->lock);
+		return 0;
+	}
+
+	read_vaddr = dss_start_vaddr + read_offset;
+
+	if (write_offset > read_offset) {
+		if (copy_to_user((buf + *total_size), read_vaddr, size)) {
+			mutex_unlock(&dss_buf->lock);
+			return -EFAULT;
+		}
+	} else {
+		if (copy_to_user((buf + *total_size), read_vaddr, (buf_size - read_offset))) {
+			mutex_unlock(&dss_buf->lock);
+			return -EFAULT;
+		}
+		if (copy_to_user((buf + *total_size), dss_start_vaddr, write_offset)) {
+			mutex_unlock(&dss_buf->lock);
+			return -EFAULT;
+		}
+	}
+
+	*total_size += size;
+	read_ptr += size;
+
+	/* Read pointer can overflow into one additional bit */
+	read_ptr &= ((buf_size << 1) - 1);
+	read_ptr_reg = ((read_ptr >> 6) << XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT);
+	read_ptr_reg &= XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
+	read_ptr_reg |= (XEHPC_EUSTALL_REPORT1_READ_PTR_MASK <<
+			 XEHPC_EUSTALL_REPORT1_MASK_SHIFT);
+	xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT1, read_ptr_reg, group, instance);
+	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_REPORT1.__reg).addr,
+			read_ptr_reg, sizeof(read_ptr_reg));
+	if (test_bit(dss, stream->data_drop.mask)) {
+		clear_dropped_eviction_line_bit(gt, group, instance);
+		spin_lock(&stream->data_drop.lock);
+		bitmap_clear(stream->data_drop.mask, dss, 1);
+		spin_unlock(&stream->data_drop.lock);
+	}
+	dss_buf->read = read_ptr;
+	mutex_unlock(&dss_buf->lock);
+	trace_xe_eu_stall_cntr_read(group, instance, read_ptr, write_ptr,
+				    read_offset, write_offset, *total_size);
+	return 0;
+}
+
+/**
+ * xe_eu_stall_buf_read_locked - copy EU stall counters data from the
+ *				   per dss buffers to the userspace buffer
+ * @stream: A stream opened for EU stall count metrics
+ * @buf: destination buffer given by userspace
+ * @count: the number of bytes userspace wants to read
+ * @ppos: (inout) file seek position (unused)
+ *
+ * Returns: Number of bytes copied or a negative error code
+ * If we've successfully copied any data then reporting that takes
+ * precedence over any internal error status, so the data isn't lost.
+ */
+static ssize_t
+xe_eu_stall_buf_read_locked(struct xe_eu_stall_cntr_stream *stream,
+			    struct file *file, char __user *buf,
+			    size_t count, loff_t *ppos)
+{
+	struct xe_gt *gt = stream->gt;
+	size_t total_size = 0;
+	u16 group, instance;
+	unsigned int dss;
+	int ret = 0;
+
+	if (count == 0)
+		return -EINVAL;
+
+	for_each_dss_steering(dss, gt, group, instance) {
+		ret = __xe_eu_stall_buf_read(stream, buf, count, &total_size,
+					     gt, group, instance, dss);
+		if (ret || count == total_size)
+			goto exit;
+	}
+exit:
+	if (total_size)
+		return total_size;
+	else if (ret)
+		return ret;
+	else
+		return -EAGAIN;
+}
+
+static void
+free_eu_stall_cntr_buf(struct xe_eu_stall_cntr_stream *stream)
+{
+	if (stream->bo) {
+		xe_bo_unpin_map_no_vm(stream->bo);
+		stream->vaddr = NULL;
+		stream->bo = NULL;
+	}
+	destroy_workqueue(stream->buf_check_wq);
+}
+
+static int alloc_eu_stall_cntr_buf(struct xe_eu_stall_cntr_stream *stream,
+				   u32 per_dss_buf_size, u16 num_dss)
+{
+	struct xe_tile *tile = stream->gt->tile;
+	struct xe_bo *bo;
+	u32 size;
+
+	size = per_dss_buf_size * num_dss;
+
+	bo = xe_bo_create_pin_map(tile->xe, tile, NULL,
+				  size, ttm_bo_type_kernel,
+				  XE_BO_FLAG_VRAM_IF_DGFX(tile) |
+				  XE_BO_FLAG_GGTT);
+	if (IS_ERR(bo))
+		return PTR_ERR(bo);
+
+	stream->bo = bo;
+	stream->vaddr = bo->vmap.is_iomem ? bo->vmap.vaddr_iomem : bo->vmap.vaddr;
+
+	return 0;
+}
+
+static u32
+gen_eustall_base(struct xe_eu_stall_cntr_stream *stream, bool enable)
+{
+	u32 val = xe_bo_ggtt_addr(stream->bo);
+	u32 sz;
+
+	XE_WARN_ON(!IS_ALIGNED(val, 64));
+
+	switch (stream->per_dss_buf_size) {
+	case SZ_128K:
+		sz = 0;
+		break;
+	case SZ_256K:
+		sz = 1;
+		break;
+	case SZ_512K:
+		sz = 2;
+		break;
+	default:
+		MISSING_CASE(stream->per_dss_buf_size);
+		sz = 2;
+	}
+
+	val |= REG_FIELD_PREP(XEHPC_EUSTALL_BASE_DSS_BUF_SZ, sz);
+	if (enable)
+		val |= XEHPC_EUSTALL_BASE_ENABLE_SAMPLING;
+
+	return val;
+}
+
+static void
+xe_eu_stall_stream_enable(struct xe_eu_stall_cntr_stream *stream)
+{
+	struct xe_gt *gt = stream->gt;
+	enum xe_platform platform;
+	u32 reg_value;
+
+	platform = gt_to_xe(gt)->info.platform;
+
+	/* Take runtime pm ref and forcewake to disable RC6 */
+	xe_pm_runtime_get(gt_to_xe(gt));
+	XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+
+	/*
+	 * Wa_22016596838:pvc
+	 * Disable EU DOP gating for PVC.
+	 */
+	if (platform == XE_PVC)
+		xe_gt_mcr_multicast_write(gt, ROW_CHICKEN2,
+					  _MASKED_BIT_ENABLE(DISABLE_DOP_GATING));
+
+	reg_value = gen_eustall_base(stream, true);
+	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, reg_value);
+	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_BASE.__reg).addr,
+			reg_value, sizeof(reg_value));
+}
+
+static void
+xe_eu_stall_stream_disable(struct xe_eu_stall_cntr_stream *stream)
+{
+	struct xe_gt *gt = stream->gt;
+	enum xe_platform platform;
+	u16 group, instance;
+	unsigned int dss;
+	u32 reg_value;
+
+	platform = gt_to_xe(gt)->info.platform;
+
+	/*
+	 * Before disabling EU stall sampling, check if any of the
+	 * XEHPC_EUSTALL_REPORT registers have the drop bit set. If set,
+	 * clear the bit. If the user space application reads all the
+	 * stall data, the drop bit would be cleared during the read.
+	 * But if there is any unread data and the drop bit is set for
+	 * any subslice, the drop bit would continue to be set even
+	 * after disabling EU stall sampling and may cause erroneous
+	 * stall data in the subsequent stall data sampling run.
+	 */
+	for_each_dss_steering(dss, gt, group, instance) {
+		reg_value = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT,
+						   group, instance);
+		if (reg_value & XEHPC_EUSTALL_REPORT_OVERFLOW_DROP)
+			clear_dropped_eviction_line_bit(gt, group, instance);
+	}
+	reg_value = gen_eustall_base(stream, false);
+	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, reg_value);
+	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_BASE.__reg).addr,
+			reg_value, sizeof(reg_value));
+
+	/* Wa_22016596838:pvc */
+	if (platform == XE_PVC)
+		xe_gt_mcr_multicast_write(gt, ROW_CHICKEN2,
+					  _MASKED_BIT_DISABLE(DISABLE_DOP_GATING));
+
+	XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+	xe_pm_runtime_put(gt_to_xe(gt));
+}
+
+static void eu_stall_buf_check_work_fn(struct work_struct *work)
+{
+	struct xe_eu_stall_cntr_stream *stream =
+		container_of(work, typeof(*stream), buf_check_work);
+
+	if (eu_stall_cntr_buf_check(stream)) {
+		stream->pollin = true;
+		wake_up(&stream->poll_wq);
+	}
+}
+
+static enum
+hrtimer_restart eu_stall_poll_check_timer_cb(struct hrtimer *hrtimer)
+{
+	struct xe_eu_stall_cntr_stream *stream =
+		container_of(hrtimer, typeof(*stream), poll_check_timer);
+
+	queue_work(stream->buf_check_wq, &stream->buf_check_work);
+	hrtimer_forward_now(hrtimer, ns_to_ktime(stream->poll_period));
+
+	return HRTIMER_RESTART;
+}
+
+static int xe_eu_stall_stream_init(struct xe_eu_stall_cntr_stream *stream,
+				   struct eu_stall_open_properties *props,
+				   u16 num_dss)
+{
+	u32 write_ptr_reg, write_ptr, read_ptr_reg;
+	u32 vaddr_offset, reg_value;
+	struct xe_gt *gt = stream->gt;
+	struct per_dss_buf *dss_buf;
+	u16 group, instance;
+	int ret, dss;
+
+	init_waitqueue_head(&stream->poll_wq);
+	INIT_WORK(&stream->buf_check_work, eu_stall_buf_check_work_fn);
+	stream->buf_check_wq = alloc_ordered_workqueue("xe_eustall_cntr", 0);
+	if (!stream->buf_check_wq)
+		return -ENOMEM;
+	hrtimer_init(&stream->poll_check_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
+	stream->poll_check_timer.function = eu_stall_poll_check_timer_cb;
+	stream->event_report_count = props->event_report_count;
+	stream->per_dss_buf_size = props->eu_stall_buf_sz;
+	stream->poll_period = props->poll_period;
+
+	ret = alloc_eu_stall_cntr_buf(stream, props->eu_stall_buf_sz, num_dss);
+	if (ret)
+		return ret;
+
+	stream->dss_buf = kcalloc(num_dss, sizeof(*stream->dss_buf), GFP_KERNEL);
+	if (!stream->dss_buf)
+		return -ENOMEM;
+
+	spin_lock_init(&stream->data_drop.lock);
+	stream->data_drop.reported_to_user = false;
+	bitmap_zero(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS);
+
+	xe_pm_runtime_get(gt_to_xe(gt));
+	XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+
+	reg_value = gen_eustall_base(stream, false);
+	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, reg_value);
+	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_BASE.__reg).addr,
+			reg_value, sizeof(reg_value));
+	/* GGTT addresses can never be > 32 bits */
+	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE_UPPER, 0);
+	reg_value = _MASKED_FIELD(EUSTALL_MOCS | EUSTALL_SAMPLE_RATE,
+				  REG_FIELD_PREP(EUSTALL_MOCS, gt->mocs.uc_index << 1) |
+				  REG_FIELD_PREP(EUSTALL_SAMPLE_RATE,
+						 props->eu_stall_sampling_rate));
+	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_CTRL, reg_value);
+	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_CTRL.__reg).addr,
+			reg_value, sizeof(reg_value));
+
+	for_each_dss_steering(dss, gt, group, instance) {
+		write_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT,
+						       group, instance);
+		write_ptr = write_ptr_reg & XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK;
+		write_ptr <<= (6 - XEHPC_EUSTALL_REPORT_WRITE_PTR_SHIFT);
+		write_ptr &= ((stream->per_dss_buf_size << 1) - 1);
+		read_ptr_reg = write_ptr >> (6 - XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT);
+		read_ptr_reg &= XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
+		read_ptr_reg |= (XEHPC_EUSTALL_REPORT1_READ_PTR_MASK <<
+				 XEHPC_EUSTALL_REPORT1_MASK_SHIFT);
+		xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT1,
+					read_ptr_reg, group, instance);
+		dss_buf = &stream->dss_buf[dss];
+		vaddr_offset = dss * props->eu_stall_buf_sz;
+		dss_buf->vaddr = stream->vaddr + vaddr_offset;
+		dss_buf->write = write_ptr;
+		dss_buf->read = write_ptr;
+		mutex_init(&dss_buf->lock);
+	}
+	XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+	xe_pm_runtime_put(gt_to_xe(gt));
+	return 0;
+}
+
+/**
+ * xe_eu_stall_buf_read - handles read FOP for xe EU stall cntr stream FDs
+ * @file: An xe EU stall cntr stream file
+ * @buf: destination buffer given by userspace
+ * @count: the number of bytes userspace wants to read
+ * @ppos: (inout) file seek position (unused)
+ *
+ * Returns: The number of bytes copied or a negative error code on failure.
+ */
+static ssize_t xe_eu_stall_buf_read(struct file *file, char __user *buf,
+				    size_t count, loff_t *ppos)
+{
+	struct xe_eu_stall_cntr_stream *stream = file->private_data;
+	struct xe_gt *gt = stream->gt;
+	ssize_t ret;
+
+	if (!stream->enabled) {
+		drm_dbg(&gt->tile->xe->drm, "EU stall data stream not enabled to read\n");
+		return -EINVAL;
+	}
+
+	if (bitmap_weight(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS)) {
+		if (!stream->data_drop.reported_to_user) {
+			stream->data_drop.reported_to_user = true;
+			drm_dbg(&gt->tile->xe->drm, "EU stall data drop reported\n");
+			return -EIO;
+		}
+		stream->data_drop.reported_to_user = false;
+	}
+
+	if (!(file->f_flags & O_NONBLOCK)) {
+		do {
+			if (!stream->pollin) {
+				ret = wait_event_interruptible(stream->poll_wq, stream->pollin);
+				if (ret)
+					return -EINTR;
+			}
+
+			mutex_lock(&gt->eu_stall_cntr->lock);
+			ret = xe_eu_stall_buf_read_locked(stream, file, buf, count, ppos);
+			mutex_unlock(&gt->eu_stall_cntr->lock);
+		} while (ret == -EAGAIN);
+	} else {
+		mutex_lock(&gt->eu_stall_cntr->lock);
+		ret = xe_eu_stall_buf_read_locked(stream, file, buf, count, ppos);
+		mutex_unlock(&gt->eu_stall_cntr->lock);
+	}
+
+	stream->pollin = false;
+
+	return ret;
+}
+
+static __poll_t
+xe_eu_stall_buf_poll_locked(struct xe_eu_stall_cntr_stream *stream,
+			    struct file *file, poll_table *wait)
+{
+	__poll_t events = 0;
+
+	poll_wait(file, &stream->poll_wq, wait);
+
+	if (stream->pollin)
+		events |= EPOLLIN;
+
+	return events;
+}
+
+static __poll_t
+xe_eu_stall_buf_poll(struct file *file, poll_table *wait)
+{
+	struct xe_eu_stall_cntr_stream *stream = file->private_data;
+	struct xe_gt *gt = stream->gt;
+	__poll_t ret;
+
+	mutex_lock(&gt->eu_stall_cntr->lock);
+	ret = xe_eu_stall_buf_poll_locked(stream, file, wait);
+	mutex_unlock(&gt->eu_stall_cntr->lock);
+
+	return ret;
+}
+
+static void
+xe_eu_stall_cntr_enable_locked(struct xe_eu_stall_cntr_stream *stream)
+{
+	if (stream->enabled)
+		return;
+
+	stream->enabled = true;
+
+	xe_eu_stall_stream_enable(stream);
+	hrtimer_start(&stream->poll_check_timer,
+		      ns_to_ktime(stream->poll_period),
+		      HRTIMER_MODE_REL);
+}
+
+static void
+xe_eu_stall_cntr_disable_locked(struct xe_eu_stall_cntr_stream *stream)
+{
+	if (!stream->enabled)
+		return;
+
+	stream->enabled = false;
+
+	hrtimer_cancel(&stream->poll_check_timer);
+	flush_workqueue(stream->buf_check_wq);
+	xe_eu_stall_stream_disable(stream);
+}
+
+static long
+xe_eu_stall_cntr_info_locked(struct xe_eu_stall_cntr_stream *stream,
+			     unsigned long arg)
+{
+	struct drm_xe_eu_stall_stream_info info = { .record_size = 0, };
+	void __user *uaddr = (void __user *)arg;
+	struct xe_gt *gt = stream->gt;
+	enum xe_platform platform;
+
+	platform = gt_to_xe(gt)->info.platform;
+
+	if (platform == XE_PVC)
+		info.record_size = sizeof(struct drm_xe_eu_stall_data_pvc);
+	else if ((platform == XE_LUNARLAKE) || (platform == XE_BATTLEMAGE))
+		info.record_size = sizeof(struct drm_xe_eu_stall_data_xe2);
+
+	if (copy_to_user(uaddr, &info, sizeof(info)))
+		return -EFAULT;
+
+	return 0;
+}
+
+static long
+xe_eu_stall_cntr_ioctl_locked(struct xe_eu_stall_cntr_stream *stream,
+			      unsigned int cmd, unsigned long arg)
+{
+	switch (cmd) {
+	case DRM_XE_OBSERVATION_IOCTL_ENABLE:
+		xe_eu_stall_cntr_enable_locked(stream);
+		return 0;
+	case DRM_XE_OBSERVATION_IOCTL_DISABLE:
+		xe_eu_stall_cntr_disable_locked(stream);
+		return 0;
+	case DRM_XE_OBSERVATION_IOCTL_INFO:
+		return xe_eu_stall_cntr_info_locked(stream, arg);
+	}
+
+	return -EINVAL;
+}
+
+/**
+ * xe_eu_stall_cntr_ioctl - support ioctl() usage with xe EU stall counter
+ *								stream FDs
+ * @file: An xe EU stall cntr stream file
+ * @cmd: the ioctl request
+ * @arg: the ioctl data
+ *
+ * Implementation deferred to xe_eu_stall_cntr_ioctl_locked().
+ *
+ * Returns: zero on success or a negative error code. Returns -EINVAL for
+ * an unknown ioctl request.
+ */
+static long xe_eu_stall_cntr_ioctl(struct file *file,
+				   unsigned int cmd,
+				   unsigned long arg)
+{
+	struct xe_eu_stall_cntr_stream *stream = file->private_data;
+	struct xe_gt *gt = stream->gt;
+	long ret;
+
+	mutex_lock(&gt->eu_stall_cntr->lock);
+	ret = xe_eu_stall_cntr_ioctl_locked(stream, cmd, arg);
+	mutex_unlock(&gt->eu_stall_cntr->lock);
+
+	return ret;
+}
+
+static void
+xe_eu_stall_destroy_locked(struct xe_eu_stall_cntr_stream *stream)
+{
+	xe_eu_stall_cntr_disable_locked(stream);
+	free_eu_stall_cntr_buf(stream);
+}
+
+/**
+ * xe_eu_stall_release - handles userspace close() of a EU stall data
+ *			   stream file.
+ * @inode: anonymous inode associated with file
+ * @file: An xe EU stall stream file
+ *
+ * Cleans up any resources associated with an open EU stall data stream file.
+ */
+static int xe_eu_stall_release(struct inode *inode, struct file *file)
+{
+	struct xe_eu_stall_cntr_stream *stream = file->private_data;
+	struct xe_gt *gt = stream->gt;
+
+	mutex_lock(&gt->eu_stall_cntr->lock);
+	xe_eu_stall_destroy_locked(stream);
+	kfree(stream->dss_buf);
+	kfree(stream);
+	gt->eu_stall_cntr->stream = NULL;
+	mutex_unlock(&gt->eu_stall_cntr->lock);
+
+	/* Release the reference the EU stall stream kept on the driver */
+	drm_dev_put(&gt->tile->xe->drm);
+
+	return 0;
+}
+
+static const struct file_operations fops_eu_stall = {
+	.owner		= THIS_MODULE,
+	.llseek		= no_llseek,
+	.release	= xe_eu_stall_release,
+	.poll		= xe_eu_stall_buf_poll,
+	.read		= xe_eu_stall_buf_read,
+	.unlocked_ioctl = xe_eu_stall_cntr_ioctl,
+	.compat_ioctl   = xe_eu_stall_cntr_ioctl,
+};
+
+/**
+ * xe_open_eu_stall_stream_locked - Open a EU stall data stream FD.
+ * @dev: drm device instance
+ * @props: individually validated u64 property value pairs
+ * @file: drm file
+ * @gt: GT from which the EU stall data will be captured
+ *
+ * Returns: zero on success or a negative error code.
+ */
+static int
+xe_open_eu_stall_stream_locked(struct drm_device *dev,
+			       struct eu_stall_open_properties *props,
+			       struct drm_file *file,
+			       struct xe_gt *gt)
+{
+	struct xe_device *xe = to_xe_device(dev);
+	struct xe_eu_stall_cntr_stream *stream;
+	unsigned long f_flags = 0;
+	xe_dss_mask_t all_dss;
+	int ret, stream_fd;
+	u32 tile_buf_size;
+	u16 num_dss;
+
+	if (xe_observation_paranoid && !perfmon_capable()) {
+		drm_dbg(&xe->drm, "Insufficient privileges for EU stall monitoring\n");
+		return -EACCES;
+	}
+
+	/* Only one session can be active at any time */
+	if (gt->eu_stall_cntr->stream) {
+		drm_dbg(&xe->drm, "EU stall cntr session already active\n");
+		return -EBUSY;
+	}
+
+	bitmap_or(all_dss, gt->fuse_topo.g_dss_mask, gt->fuse_topo.c_dss_mask,
+		  XE_MAX_DSS_FUSE_BITS);
+	/*
+	 * Enabled subslices can be discontiguous. Find the last subslice
+	 * and calculate total buffer size based on that.
+	 * intel_sseu_highest_xehp_dss returns zero based position.
+	 * Therefore the result is incremented.
+	 */
+	num_dss = xe_dss_mask_last_dss(all_dss) + 1;
+	tile_buf_size = props->eu_stall_buf_sz * num_dss;
+	if (props->event_report_count > num_data_rows(tile_buf_size)) {
+		drm_dbg(&xe->drm, "Invalid EU stall data poll event report count %u\n",
+			props->event_report_count);
+		drm_dbg(&xe->drm, "Maximum event report count for the given buffer size is %u\n",
+			num_data_rows(tile_buf_size));
+		return -EINVAL;
+	}
+
+	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+	if (!stream)
+		return -ENOMEM;
+
+	gt->eu_stall_cntr->stream = stream;
+	stream->gt = gt;
+
+	ret = xe_eu_stall_stream_init(stream, props, num_dss);
+	if (ret) {
+		drm_dbg(&xe->drm, "EU stall stream init failed : %d\n", ret);
+		goto err_alloc;
+	}
+
+	stream_fd = anon_inode_getfd("[xe_eu_stall]", &fops_eu_stall,
+				     stream, f_flags);
+	if (stream_fd < 0) {
+		ret = stream_fd;
+		drm_dbg(&xe->drm, "EU stall inode get fd failed : %d\n", ret);
+		goto err_open;
+	}
+
+	if (!props->open_disabled)
+		xe_eu_stall_cntr_enable_locked(stream);
+
+	/* Take a reference on the driver that will be kept with stream_fd
+	 * until its release.
+	 */
+	drm_dev_get(&gt->tile->xe->drm);
+
+	return stream_fd;
+
+err_open:
+	free_eu_stall_cntr_buf(stream);
+err_alloc:
+	gt->eu_stall_cntr->stream = NULL;
+	kfree(stream->dss_buf);
+	kfree(stream);
+	return ret;
+}
+
+int xe_open_eu_stall_stream(struct drm_device *dev,
+			    u64 data,
+			    struct drm_file *file)
+{
+	struct xe_device *xe = to_xe_device(dev);
+	struct eu_stall_open_properties props;
+	struct xe_gt *gt;
+	int ret;
+
+	memset(&props, 0, sizeof(struct eu_stall_open_properties));
+
+	/* Set default values */
+	props.gt_id = 0;
+	props.eu_stall_buf_sz = SZ_256K;
+	props.eu_stall_sampling_rate = 4;
+	props.poll_period = DEFAULT_POLL_PERIOD_NS;
+	props.event_report_count = 1;
+
+	ret = xe_eu_stall_user_extensions(xe, data, &props);
+	if (ret)
+		return ret;
+
+	gt = xe_device_get_gt(xe, props.gt_id);
+	if (!gt) {
+		drm_dbg(&xe->drm, "Invalid GT for EU stall sampling\n");
+		return -EINVAL;
+	}
+
+	mutex_lock(&gt->eu_stall_cntr->lock);
+	ret = xe_open_eu_stall_stream_locked(dev, &props, file, gt);
+	mutex_unlock(&gt->eu_stall_cntr->lock);
+	return ret;
+}
diff --git a/drivers/gpu/drm/xe/xe_eustall_cntr.h b/drivers/gpu/drm/xe/xe_eustall_cntr.h
new file mode 100644
index 000000000000..417c38838432
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_eustall_cntr.h
@@ -0,0 +1,60 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#ifndef __XE_EUSTALL_CNTR_H__
+#define __XE_EUSTALL_CNTR_H__
+
+#include <drm/xe_drm.h>
+#include <drm/drm_file.h>
+#include "xe_gt_types.h"
+#include "regs/xe_eu_stall_regs.h"
+
+struct per_dss_buf {
+	u8 *vaddr;
+	u32 write;
+	u32 read;
+	/* lock to protect read and write pointers */
+	struct mutex lock;
+};
+
+/**
+ * struct xe_eu_stall_cntr_stream - state of EU stall counter stream FD
+ */
+struct xe_eu_stall_cntr_stream {
+	u8 *vaddr;
+	bool pollin;
+	bool enabled;
+	u64 poll_period;
+	u32 event_report_count;
+	size_t per_dss_buf_size;
+	wait_queue_head_t poll_wq;
+
+	struct xe_gt *gt;
+	struct xe_bo *bo;
+	struct per_dss_buf *dss_buf;
+	struct {
+		bool reported_to_user;
+		xe_dss_mask_t mask;
+		/* lock to protect mask */
+		spinlock_t lock;
+	} data_drop;
+	struct hrtimer poll_check_timer;
+	struct work_struct buf_check_work;
+	struct workqueue_struct *buf_check_wq;
+};
+
+struct xe_eu_stall_cntr_gt {
+	/* Lock to protect stream */
+	struct mutex lock;
+
+	/* Execution Unit (EU) stall counter stream */
+	struct xe_eu_stall_cntr_stream *stream;
+};
+
+int xe_eustall_cntr_init(struct xe_gt *gt);
+int xe_open_eu_stall_stream(struct drm_device *dev,
+			    u64 data,
+			    struct drm_file *file);
+#endif
diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
index f0dc2bf24c7b..0f661ebe9403 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -59,6 +59,7 @@
 #include "xe_vm.h"
 #include "xe_wa.h"
 #include "xe_wopcm.h"
+#include "xe_eustall_cntr.h"
 
 static void gt_fini(struct drm_device *drm, void *arg)
 {
@@ -158,6 +159,7 @@ void xe_gt_remove(struct xe_gt *gt)
 		xe_hw_fence_irq_finish(&gt->fence_irq[i]);
 
 	xe_gt_disable_host_l2_vram(gt);
+	kfree(gt->eu_stall_cntr);
 }
 
 static void gt_reset_worker(struct work_struct *w);
@@ -620,6 +622,10 @@ int xe_gt_init(struct xe_gt *gt)
 
 	xe_gt_record_user_engines(gt);
 
+	err = xe_eustall_cntr_init(gt);
+	if (err)
+		return err;
+
 	return 0;
 }
 
diff --git a/drivers/gpu/drm/xe/xe_gt_topology.c b/drivers/gpu/drm/xe/xe_gt_topology.c
index 0662f71c6ede..031782247723 100644
--- a/drivers/gpu/drm/xe/xe_gt_topology.c
+++ b/drivers/gpu/drm/xe/xe_gt_topology.c
@@ -264,6 +264,15 @@ xe_dss_mask_group_ffs(const xe_dss_mask_t mask, int groupsize, int groupnum)
 	return find_next_bit(mask, XE_MAX_DSS_FUSE_BITS, groupnum * groupsize);
 }
 
+/*
+ * Used to obtain the index of the last DSS.
+ */
+unsigned int
+xe_dss_mask_last_dss(const xe_dss_mask_t mask)
+{
+	return find_last_bit(mask, XE_MAX_DSS_FUSE_BITS);
+}
+
 bool xe_dss_mask_empty(const xe_dss_mask_t mask)
 {
 	return bitmap_empty(mask, XE_MAX_DSS_FUSE_BITS);
diff --git a/drivers/gpu/drm/xe/xe_gt_topology.h b/drivers/gpu/drm/xe/xe_gt_topology.h
index 746b325bbf6e..7ee022784397 100644
--- a/drivers/gpu/drm/xe/xe_gt_topology.h
+++ b/drivers/gpu/drm/xe/xe_gt_topology.h
@@ -28,6 +28,9 @@ void xe_gt_topology_dump(struct xe_gt *gt, struct drm_printer *p);
 unsigned int
 xe_dss_mask_group_ffs(const xe_dss_mask_t mask, int groupsize, int groupnum);
 
+unsigned int
+xe_dss_mask_last_dss(const xe_dss_mask_t mask);
+
 bool xe_dss_mask_empty(const xe_dss_mask_t mask);
 
 bool
diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
index 3d1c51de0268..a8eb312c28fd 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -428,6 +428,9 @@ struct xe_gt {
 
 	/** @oa: oa observation subsystem per gt info */
 	struct xe_oa_gt oa;
+
+	/** @eu_stall_cntr: EU stall counters subsystem per gt info */
+	struct xe_eu_stall_cntr_gt *eu_stall_cntr;
 };
 
 #endif
diff --git a/drivers/gpu/drm/xe/xe_observation.c b/drivers/gpu/drm/xe/xe_observation.c
index 8ec1b84cbb9e..b1942bc72ae0 100644
--- a/drivers/gpu/drm/xe/xe_observation.c
+++ b/drivers/gpu/drm/xe/xe_observation.c
@@ -8,6 +8,7 @@
 
 #include <uapi/drm/xe_drm.h>
 
+#include "xe_eustall_cntr.h"
 #include "xe_oa.h"
 #include "xe_observation.h"
 
@@ -29,6 +30,17 @@ static int xe_oa_ioctl(struct drm_device *dev, struct drm_xe_observation_param *
 	}
 }
 
+static int xe_eu_stall_ioctl(struct drm_device *dev, struct drm_xe_observation_param *arg,
+			     struct drm_file *file)
+{
+	switch (arg->observation_op) {
+	case DRM_XE_OBSERVATION_OP_STREAM_OPEN:
+		return xe_open_eu_stall_stream(dev, arg->param, file);
+	default:
+		return -EINVAL;
+	}
+}
+
 /**
  * xe_observation_ioctl - The top level observation layer ioctl
  * @dev: @drm_device
@@ -51,6 +63,8 @@ int xe_observation_ioctl(struct drm_device *dev, void *data, struct drm_file *fi
 	switch (arg->observation_type) {
 	case DRM_XE_OBSERVATION_TYPE_OA:
 		return xe_oa_ioctl(dev, arg, file);
+	case DRM_XE_OBSERVATION_TYPE_EU_STALL:
+		return xe_eu_stall_ioctl(dev, arg, file);
 	default:
 		return -EINVAL;
 	}
diff --git a/drivers/gpu/drm/xe/xe_trace.h b/drivers/gpu/drm/xe/xe_trace.h
index 8573d7a87d84..dfb1eb121337 100644
--- a/drivers/gpu/drm/xe/xe_trace.h
+++ b/drivers/gpu/drm/xe/xe_trace.h
@@ -421,6 +421,41 @@ DEFINE_EVENT(xe_pm_runtime, xe_pm_runtime_get_ioctl,
 	     TP_ARGS(xe, caller)
 );
 
+TRACE_EVENT(xe_eu_stall_cntr_read,
+	    TP_PROTO(u8 slice, u8 subslice,
+		     u32 read_ptr, u32 write_ptr,
+		     u32 read_offset, u32 write_offset,
+		     size_t total_size),
+	    TP_ARGS(slice, subslice, read_ptr, write_ptr,
+		    read_offset, write_offset, total_size),
+
+	    TP_STRUCT__entry(
+			     __field(u8, slice)
+			     __field(u8, subslice)
+			     __field(u32, read_ptr)
+			     __field(u32, write_ptr)
+			     __field(u32, read_offset)
+			     __field(u32, write_offset)
+			     __field(size_t, total_size)
+			     ),
+
+	    TP_fast_assign(
+			   __entry->slice = slice;
+			   __entry->subslice = subslice;
+			   __entry->read_ptr = read_ptr;
+			   __entry->write_ptr = write_ptr;
+			   __entry->read_offset = read_offset;
+			   __entry->write_offset = write_offset;
+			   __entry->total_size = total_size;
+			   ),
+
+	    TP_printk("slice:%u subslice:%u readptr:0x%x writeptr:0x%x read off:%u write off:%u size:%zu ",
+		      __entry->slice, __entry->subslice,
+		      __entry->read_ptr, __entry->write_ptr,
+		      __entry->read_offset, __entry->write_offset,
+		      __entry->total_size)
+);
+
 #endif
 
 /* This part must be outside protection */
diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
index b6fbe4988f2e..c836227d064f 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -1395,6 +1395,8 @@ struct drm_xe_wait_user_fence {
 enum drm_xe_observation_type {
 	/** @DRM_XE_OBSERVATION_TYPE_OA: OA observation stream type */
 	DRM_XE_OBSERVATION_TYPE_OA,
+	/** @DRM_XE_OBSERVATION_TYPE_EU_STALL: EU stall sampling observation stream type */
+	DRM_XE_OBSERVATION_TYPE_EU_STALL,
 };
 
 /**
@@ -1694,6 +1696,138 @@ struct drm_xe_oa_stream_info {
 	__u64 reserved[3];
 };
 
+/**
+ * enum drm_xe_eu_stall_property_id - EU stall data stream property ids.
+ *
+ * These properties are passed to the driver as a chain of
+ * @drm_xe_ext_set_property structures with @property set to these
+ * properties' enums and @value set to the corresponding values of these
+ * properties. @drm_xe_user_extension base.name should be set to
+ * @DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY.
+ */
+enum drm_xe_eu_stall_property_id {
+#define DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY		0
+	/**
+	 * @DRM_XE_EU_STALL_PROP_BUF_SZ: Per DSS Memory Buffer Size.
+	 * Valid values are 128 KB, 256 KB, and 512 KB.
+	 */
+	DRM_XE_EU_STALL_PROP_BUF_SZ = 1,
+
+	/**
+	 * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
+	 * in multiples of 251 cycles. Valid values are 1 to 7.
+	 * If the value is 1, sampling interval is 251 cycles.
+	 * If the value is 7, sampling interval is 7 x 251 cycles.
+	 */
+	DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
+
+	/**
+	 * @DRM_XE_EU_STALL_PROP_POLL_PERIOD: EU stall data
+	 * poll period in nanoseconds. should be at least 100000 ns.
+	 */
+	DRM_XE_EU_STALL_PROP_POLL_PERIOD,
+
+	/**
+	 * @DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT: Minimum number of
+	 * EU stall data rows to be present in the kernel buffer for
+	 * poll() to set POLLIN (data present).
+	 */
+	DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT,
+
+	/**
+	 * @DRM_XE_EU_STALL_PROP_GT_ID: GT ID of the GT on which
+	 * EU stall data will be captured.
+	 */
+	DRM_XE_EU_STALL_PROP_GT_ID,
+
+	/**
+	 * @DRM_XE_EU_STALL_PROP_OPEN_DISABLED: A value of 1 will open
+	 * the EU stall data stream without enabling EU stall sampling.
+	 */
+	DRM_XE_EU_STALL_PROP_OPEN_DISABLED,
+};
+
+/**
+ * struct drm_xe_eu_stall_stream_info - EU stall stream info returned from
+ * @DRM_XE_OBSERVATION_IOCTL_INFO observation stream fd ioctl
+ */
+struct drm_xe_eu_stall_stream_info {
+	/** @extensions: Pointer to the first extension struct, if any */
+	__u64 extensions;
+
+	/** @record_size: size of each EU stall data record */
+	__u64 record_size;
+
+	/** @reserved: reserved for future use */
+	__u64 reserved[3];
+};
+
+/**
+ * struct drm_xe_eu_stall_data_pvc - EU stall data format for PVC
+ *
+ * Bits		Field
+ * 0  to 28	IP (addr)
+ * 29 to 36	active count
+ * 37 to 44	other count
+ * 45 to 52	control count
+ * 53 to 60	pipestall count
+ * 61 to 68	send count
+ * 69 to 76	dist_acc count
+ * 77 to 84	sbid count
+ * 85 to 92	sync count
+ * 93 to 100	inst_fetch count
+ */
+struct drm_xe_eu_stall_data_pvc {
+	__u64 ip_addr:29;
+	__u64 active_count:8;
+	__u64 other_count:8;
+	__u64 control_count:8;
+	__u64 pipestall_count:8;
+	__u64 send_count:8;
+	__u64 dist_acc_count:8;
+	__u64 sbid_count:8;
+	__u64 sync_count:8;
+	__u64 inst_fetch_count:8;
+	__u64 unused_bits:27;
+	__u64 unused[6];
+} __attribute__((packed));
+
+/**
+ * struct drm_xe_eu_stall_data_xe2 - EU stall data format for LNL, BMG
+ *
+ * Bits		Field
+ * 0  to 28	IP (addr)
+ * 29 to 36	Tdr count
+ * 37 to 44	other count
+ * 45 to 52	control count
+ * 53 to 60	pipestall count
+ * 61 to 68	send count
+ * 69 to 76	dist_acc count
+ * 77 to 84	sbid count
+ * 85 to 92	sync count
+ * 93 to 100	inst_fetch count
+ * 101 to 108	Active count
+ * 109 to 111	Exid
+ * 112		EndFlag (is always 1)
+ */
+struct drm_xe_eu_stall_data_xe2 {
+	__u64 ip_addr:29;
+	__u64 tdr_count:8;
+	__u64 other_count:8;
+	__u64 control_count:8;
+	__u64 pipestall_count:8;
+	__u64 send_count:8;
+	__u64 dist_acc_count:8;
+	__u64 sbid_count:8;
+	__u64 sync_count:8;
+	__u64 inst_fetch_count:8;
+	__u64 active_count:8;
+	__u64 ex_id:3;
+	__u64 end_flag:1;
+	__u64 unused_bits:15;
+	__u64 unused[6];
+} __attribute__((packed));
+
 #if defined(__cplusplus)
 }
 #endif
-- 
2.45.1


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* RE: [PATCH v3 0/1] Add support for EU stall sampling
  2024-09-09  7:36 [PATCH v3 0/1] Add support for EU stall sampling Harish Chegondi
  2024-09-09  7:36 ` [PATCH v3 1/1] drm/xe/eustall: " Harish Chegondi
@ 2024-09-09  7:42 ` Ranjan, Joshua Santhosh
  2024-09-10  6:33 ` ✓ CI.Patch_applied: success for " Patchwork
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 20+ messages in thread
From: Ranjan, Joshua Santhosh @ 2024-09-09  7:42 UTC (permalink / raw)
  To: Chegondi, Harish, intel-xe@lists.freedesktop.org, Kumar, Shubham
  Cc: Dixit, Ashutosh, Ausmus, James, Degrood, Felix J, Souza, Jose,
	Cabral, Matias A

+ @Kumar, Shubham

-----Original Message-----
From: Chegondi, Harish <harish.chegondi@intel.com> 
Sent: Monday, September 9, 2024 1:07 PM
To: intel-xe@lists.freedesktop.org
Cc: Dixit, Ashutosh <ashutosh.dixit@intel.com>; Ausmus, James <james.ausmus@intel.com>; Degrood, Felix J <felix.j.degrood@intel.com>; Souza, Jose <jose.souza@intel.com>; Cabral, Matias A <matias.a.cabral@intel.com>; Ranjan, Joshua Santhosh <joshua.santosh.ranjan@intel.com>; Chegondi, Harish <harish.chegondi@intel.com>
Subject: [PATCH v3 0/1] Add support for EU stall sampling

The following patch adds support for EU stall sampling, a new hardware feature first added in PVC and is being supported in XE2 and later architecture GPUs. This feature would enable capturing of EU stall data which include the IP address of the instruction stalled and various stall reason counts. More details are explained in the patch commit message.

Support for this feature is being added into Mesa.
https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30142

A new test in the IGT repo: 
https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
is also under development to test this feature in the driver. This patch has undergone basic testing with the new IGT test that is under development.

Thank You.

v3: a. Removed data header and changed read() to return -EIO when data is dropped by the HW.
    b. Added a new DRM_XE_OBSERVATION_IOCTL_INFO to query EU stall data record info
    c. Added struct drm_xe_eu_stall_data_pvc and struct drm_xe_eu_stall_data_xe2
       to xe_drm.h. These declarations would help user space to parse the
       EU stall data
    d. Addressed other review comments from v2
v2: Rename xe perf layer as xe observation layer (Ashutosh)

Harish Chegondi (1):
  drm/xe/eustall: Add support for EU stall sampling

 drivers/gpu/drm/xe/Makefile                |    1 +
 drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h |   33 +
 drivers/gpu/drm/xe/xe_eustall_cntr.c       | 1000 ++++++++++++++++++++
 drivers/gpu/drm/xe/xe_eustall_cntr.h       |   60 ++
 drivers/gpu/drm/xe/xe_gt.c                 |    6 +
 drivers/gpu/drm/xe/xe_gt_topology.c        |    9 +
 drivers/gpu/drm/xe/xe_gt_topology.h        |    3 +
 drivers/gpu/drm/xe/xe_gt_types.h           |    3 +
 drivers/gpu/drm/xe/xe_observation.c        |   14 +
 drivers/gpu/drm/xe/xe_trace.h              |   35 +
 include/uapi/drm/xe_drm.h                  |  134 +++
 11 files changed, 1298 insertions(+)
 create mode 100644 drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
 create mode 100644 drivers/gpu/drm/xe/xe_eustall_cntr.c
 create mode 100644 drivers/gpu/drm/xe/xe_eustall_cntr.h

--
2.45.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v3 1/1] drm/xe/eustall: Add support for EU stall sampling
  2024-09-09  7:36 ` [PATCH v3 1/1] drm/xe/eustall: " Harish Chegondi
@ 2024-09-09 19:27   ` Dixit, Ashutosh
  2024-09-10  0:09   ` Matt Roper
  1 sibling, 0 replies; 20+ messages in thread
From: Dixit, Ashutosh @ 2024-09-09 19:27 UTC (permalink / raw)
  To: Harish Chegondi
  Cc: intel-xe, james.ausmus, felix.j.degrood, jose.souza,
	matias.a.cabral, joshua.santosh.ranjan, shubham.kumar

On Mon, 09 Sep 2024 00:36:40 -0700, Harish Chegondi wrote:
>

Hi Harish,

A few new comments on just the uapi, which I missed out previously.

> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index b6fbe4988f2e..c836227d064f 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -1395,6 +1395,8 @@ struct drm_xe_wait_user_fence {
>  enum drm_xe_observation_type {
>	/** @DRM_XE_OBSERVATION_TYPE_OA: OA observation stream type */
>	DRM_XE_OBSERVATION_TYPE_OA,
> +	/** @DRM_XE_OBSERVATION_TYPE_EU_STALL: EU stall sampling observation stream type */
> +	DRM_XE_OBSERVATION_TYPE_EU_STALL,
>  };
>
>  /**
> @@ -1694,6 +1696,138 @@ struct drm_xe_oa_stream_info {
>	__u64 reserved[3];
>  };
>
> +/**
> + * enum drm_xe_eu_stall_property_id - EU stall data stream property ids.
> + *
> + * These properties are passed to the driver as a chain of
> + * @drm_xe_ext_set_property structures with @property set to these
> + * properties' enums and @value set to the corresponding values of these
> + * properties. @drm_xe_user_extension base.name should be set to
> + * @DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY.
> + */
> +enum drm_xe_eu_stall_property_id {
> +#define DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY		0
> +	/**
> +	 * @DRM_XE_EU_STALL_PROP_BUF_SZ: Per DSS Memory Buffer Size.
> +	 * Valid values are 128 KB, 256 KB, and 512 KB.
> +	 */
> +	DRM_XE_EU_STALL_PROP_BUF_SZ = 1,
> +
> +	/**
> +	 * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
> +	 * in multiples of 251 cycles. Valid values are 1 to 7.
> +	 * If the value is 1, sampling interval is 251 cycles.
> +	 * If the value is 7, sampling interval is 7 x 251 cycles.
> +	 */
> +	DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
> +
> +	/**
> +	 * @DRM_XE_EU_STALL_PROP_POLL_PERIOD: EU stall data
> +	 * poll period in nanoseconds. should be at least 100000 ns.
> +	 */
> +	DRM_XE_EU_STALL_PROP_POLL_PERIOD,
> +
> +	/**
> +	 * @DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT: Minimum number of
> +	 * EU stall data rows to be present in the kernel buffer for
> +	 * poll() to set POLLIN (data present).
> +	 */
> +	DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT,
> +
> +	/**
> +	 * @DRM_XE_EU_STALL_PROP_GT_ID: GT ID of the GT on which
> +	 * EU stall data will be captured.
> +	 */
> +	DRM_XE_EU_STALL_PROP_GT_ID,
> +
> +	/**
> +	 * @DRM_XE_EU_STALL_PROP_OPEN_DISABLED: A value of 1 will open
> +	 * the EU stall data stream without enabling EU stall sampling.
> +	 */
> +	DRM_XE_EU_STALL_PROP_OPEN_DISABLED,
> +};

If we add new properties in the future, UMD's would need to be able to
query if a particular kernel supports these new properties. For this, we
need a query even before the EU Stall stream is opened.

Here we should follow the same scheme as in OA and introduce an EU stall
'capabilities'. For how this is done in OA, see 'struct drm_xe_oa_unit' in
xe_drm.h which is returned from DRM_XE_DEVICE_QUERY_OA_UNITS. For example,
after the https://patchwork.freedesktop.org/series/137058/ series, OA
capabilities will look like this:

	/** @capabilities: OA capabilities bit-mask */
	__u64 capabilities;
#define DRM_XE_OA_CAPS_BASE		(1 << 0)
#define DRM_XE_OA_CAPS_SYNCS		(1 << 1)

Let's call this DRM_XE_DEVICE_QUERY_EU_STALL for EU stall.

> +
> +/**
> + * struct drm_xe_eu_stall_stream_info - EU stall stream info returned from
> + * @DRM_XE_OBSERVATION_IOCTL_INFO observation stream fd ioctl
> + */
> +struct drm_xe_eu_stall_stream_info {
> +	/** @extensions: Pointer to the first extension struct, if any */
> +	__u64 extensions;
> +
> +	/** @record_size: size of each EU stall data record */
> +	__u64 record_size;

If this is only platform specific, not stream specific, we should add this
also to the DRM_XE_DEVICE_QUERY_EU_STALL. If we do this, we won't have a
'struct drm_xe_eu_stall_stream_info', unless we need to return some other
stream specific information in the future.

> +
> +	/** @reserved: reserved for future use */
> +	__u64 reserved[3];
> +};

Also, in response to the EIO return code, if we ever want to return a
status different from "RECORDS DROPPED" (say a status that GPU was reset
during data collection), we need to support DRM_XE_OBSERVATION_IOCTL_STATUS
for EU stall, similar to how it is done for OA.

IMO, DRM_XE_DEVICE_QUERY_EU_STALL and DRM_XE_OBSERVATION_IOCTL_STATUS need
to be introduced now, as part of this patch. Otherwise UMD's will see error
returns for older kernels, if these are introduced later.

> +
> +/**
> + * struct drm_xe_eu_stall_data_pvc - EU stall data format for PVC
> + *
> + * Bits		Field
> + * 0  to 28	IP (addr)
> + * 29 to 36	active count
> + * 37 to 44	other count
> + * 45 to 52	control count
> + * 53 to 60	pipestall count
> + * 61 to 68	send count
> + * 69 to 76	dist_acc count
> + * 77 to 84	sbid count
> + * 85 to 92	sync count
> + * 93 to 100	inst_fetch count
> + */
> +struct drm_xe_eu_stall_data_pvc {
> +	__u64 ip_addr:29;
> +	__u64 active_count:8;
> +	__u64 other_count:8;
> +	__u64 control_count:8;
> +	__u64 pipestall_count:8;
> +	__u64 send_count:8;
> +	__u64 dist_acc_count:8;
> +	__u64 sbid_count:8;
> +	__u64 sync_count:8;
> +	__u64 inst_fetch_count:8;
> +	__u64 unused_bits:27;
> +	__u64 unused[6];
> +} __attribute__((packed));
> +
> +/**
> + * struct drm_xe_eu_stall_data_xe2 - EU stall data format for LNL, BMG
> + *
> + * Bits		Field
> + * 0  to 28	IP (addr)
> + * 29 to 36	Tdr count
> + * 37 to 44	other count
> + * 45 to 52	control count
> + * 53 to 60	pipestall count
> + * 61 to 68	send count
> + * 69 to 76	dist_acc count
> + * 77 to 84	sbid count
> + * 85 to 92	sync count
> + * 93 to 100	inst_fetch count
> + * 101 to 108	Active count
> + * 109 to 111	Exid
> + * 112		EndFlag (is always 1)
> + */
> +struct drm_xe_eu_stall_data_xe2 {
> +	__u64 ip_addr:29;
> +	__u64 tdr_count:8;
> +	__u64 other_count:8;
> +	__u64 control_count:8;
> +	__u64 pipestall_count:8;
> +	__u64 send_count:8;
> +	__u64 dist_acc_count:8;
> +	__u64 sbid_count:8;
> +	__u64 sync_count:8;
> +	__u64 inst_fetch_count:8;
> +	__u64 active_count:8;
> +	__u64 ex_id:3;
> +	__u64 end_flag:1;
> +	__u64 unused_bits:15;
> +	__u64 unused[6];
> +} __attribute__((packed));

IMO, these data struct's are uapi between HW and UMD, not between KMD and
UMD, so these structs should *not* be in xe_drm.h. KMD just forwards opaque
records to UMD, UMD uses "outside" knowledge to make sense of these
records.

We have not included such record formats for OA either. Record formats are
documented in Bspec and UMD's know how to interpret the records. Also note
that Linux kernel does not use bit-fields (to avoid issues related to
endianness).

Thanks.
--
Ashutosh

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v3 1/1] drm/xe/eustall: Add support for EU stall sampling
  2024-09-09  7:36 ` [PATCH v3 1/1] drm/xe/eustall: " Harish Chegondi
  2024-09-09 19:27   ` Dixit, Ashutosh
@ 2024-09-10  0:09   ` Matt Roper
  2024-09-11 23:21     ` Dixit, Ashutosh
  2024-09-12 18:43     ` Harish Chegondi
  1 sibling, 2 replies; 20+ messages in thread
From: Matt Roper @ 2024-09-10  0:09 UTC (permalink / raw)
  To: Harish Chegondi
  Cc: intel-xe, ashutosh.dixit, james.ausmus, felix.j.degrood,
	jose.souza, matias.a.cabral, joshua.santosh.ranjan

On Mon, Sep 09, 2024 at 12:36:40AM -0700, Harish Chegondi wrote:
> A new hardware feature first introduced in PVC gives capability to
> periodically sample EU stall state and record counts for different stall
> reasons, on a per IP basis, aggregate across all EUs in a subslice and
> record the samples in a buffer in each subslice. Eventually, the aggregated
> data is written out to a buffer in the memory. This feature is also
> supported in XE2 architecture GPUs - LNL and BMG.
> 
> Use an existing IOCTL DRM_IOCTL_XE_OBSERVATION as interface into the driver
> from the user space to do initial setup and obtain a file descriptor for
> the EU stall counter data stream.  Input parameter to the IOCTL is a struct
> drm_xe_observation_param in which observation_type should be set to
> DRM_XE_OBSERVATION_TYPE_EU_STALL, observation_op should be
> DRM_XE_OBSERVATION_OP_STREAM_OPEN and param should point to a chain of
> drm_xe_ext_set_property structures in which each structure has a pair of
> property and value. The EU stall sampling input properties are defined in
> drm_xe_eu_stall_property_id enum.
> 
> With the file descriptor obtained from DRM_IOCTL_XE_OBSERVATION, user space
> can enable and disable EU stall sampling with the IOCTLs:
> DRM_XE_OBSERVATION_IOCTL_ENABLE and DRM_XE_OBSERVATION_IOCTL_DISABLE.
> User space can find the EU stall data record size with the IOCTL
> DRM_XE_OBSERVATION_IOCTL_INFO through struct drm_xe_eu_stall_stream_info
> parameter. User space can also call poll() to check for availability of
> data. The data can be read with read(). If the user space doesn't read
> the EU stall data fast enough, it is possible that the EU stall data buffer
> can get filled up and if the hardware wants to write more data, it
> simply drops data due to unavailable buffer space. In that case hardware
> sets a bit in a register. The driver read() returns -EIO error to let
> the user space know that the hardware has dropped data. A subsequent
> read by the user space returns the remaining EU stall data.
> 
> v3: a. Removed data header.
>     b. Changed read() to return -EIO when data is dropped by the HW.
>     c. Added a new DRM_XE_OBSERVATION_IOCTL_INFO to query data record info
>     d. Added struct drm_xe_eu_stall_data_pvc and struct drm_xe_eu_stall_data_xe2
>        to xe_drm.h. These declarations would help user space to parse the
>        EU stall data
>     e. Addressed other review comments from v2
> v2: Rename xe perf layer as xe observation layer (Ashutosh)
> 
> Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>

A couple general comments, then more inline below.

 - I may have missed it, but I don't see anything that prevents this
   functionality from being invoked on platforms that don't support it
   (e.g., pre-PVC hardware).  Presumably there should be a feature flag
   or IP version check somewhere to block this.

 - This is kind of a megapatch.  It might be best to split this up a
   bit.  E.g., an initial patch that implements the basic interface
   and such, but just stubs out the parts that actually go touch
   hardware.  Going back to my first comment above, with just the first
   patch landed you'd effectively treat every platform as a platform
   that didn't support EU stall sampling.  Then the follow-up patch(es)
   you can add the hardware implementation for PVC/Xe2.

 - I know Intel has changed terminology several times over the years,
   which makes our driver codebase a confusing mix, but for new features
   like this (and also for the EU debugger stuff that other people are
   working on), it might be best to just use the term "XeCore" instead
   of the older terms "subslice" and "DSS" for naming local variables
   and functions.  Since "XeCore" seems to be the preferred term these
   days, we may go back and rename other parts of the driver at some
   point too, but for brand-new files like this one it's probably not
   worth starting out with already-obsolete terminology.

 - Do we truly need all of the API extension properties defined here?  I
   commented farther down, but some of them (like the buffer size) seem
   pretty pointless...there doesn't seem to be a good justification for
   just not using the largest size always.  If we're just exposing stuff
   because the hardware has a knob, then that's needlessly complicating
   the API; part of the reason we have uapi extensions is so that we can
   add extra things later only if/when we decide we actually have a real
   use for them.  On the flip side, some of the stuff like GT ID seems
   like it shouldn't be an extension; that feels like it should be an
   intrinsic part of the API and it shouldn't even be possible to open
   an EU stall stream without specifying which GT you're working with.


I didn't go through the entire patch in detail, but more comments inline below.

> ---
>  drivers/gpu/drm/xe/Makefile                |    1 +
>  drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h |   33 +
>  drivers/gpu/drm/xe/xe_eustall_cntr.c       | 1000 ++++++++++++++++++++
>  drivers/gpu/drm/xe/xe_eustall_cntr.h       |   60 ++
>  drivers/gpu/drm/xe/xe_gt.c                 |    6 +
>  drivers/gpu/drm/xe/xe_gt_topology.c        |    9 +
>  drivers/gpu/drm/xe/xe_gt_topology.h        |    3 +
>  drivers/gpu/drm/xe/xe_gt_types.h           |    3 +
>  drivers/gpu/drm/xe/xe_observation.c        |   14 +
>  drivers/gpu/drm/xe/xe_trace.h              |   35 +
>  include/uapi/drm/xe_drm.h                  |  134 +++
>  11 files changed, 1298 insertions(+)
>  create mode 100644 drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
>  create mode 100644 drivers/gpu/drm/xe/xe_eustall_cntr.c
>  create mode 100644 drivers/gpu/drm/xe/xe_eustall_cntr.h
> 
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> index edfd812e0f41..9c5325796bd7 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -33,6 +33,7 @@ xe-y += xe_bb.o \
>  	xe_device_sysfs.o \
>  	xe_dma_buf.o \
>  	xe_drm_client.o \
> +	xe_eustall_cntr.o \
>  	xe_exec.o \
>  	xe_execlist.o \
>  	xe_exec_queue.o \
> diff --git a/drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h b/drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
> new file mode 100644
> index 000000000000..c70f35f82cc5
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
> @@ -0,0 +1,33 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#ifndef _XE_EU_STALL_REGS_H_
> +#define _XE_EU_STALL_REGS_H_
> +
> +#include "regs/xe_reg_defs.h"
> +
> +#define XEHPC_EUSTALL_BASE			XE_REG_MCR(0xe520)
> +#define   XEHPC_EUSTALL_BASE_BUF_ADDR		REG_GENMASK(31, 6)
> +#define   XEHPC_EUSTALL_BASE_DSS_BUF_SZ		REG_GENMASK(5, 3)
> +#define   XEHPC_EUSTALL_BASE_ENABLE_SAMPLING	REG_BIT(1)
> +#define   XEHPC_EUSTALL_BASE_EVICT_TDL_STALL_BUF	REG_BIT(0)
> +
> +#define XEHPC_EUSTALL_BASE_UPPER		XE_REG_MCR(0xe524)
> +
> +#define XEHPC_EUSTALL_REPORT			XE_REG_MCR(0xe528)
> +#define   XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK	REG_GENMASK(15, 2)
> +#define   XEHPC_EUSTALL_REPORT_WRITE_PTR_SHIFT	2

Do we need a "_SHIFT" macro like this?  Generally we can use the field
get/prep macros to handle shifting (and get extra compile-time sanity
checking in some cases too).

> +#define   XEHPC_EUSTALL_REPORT_OVERFLOW_DROP	REG_BIT(1)
> +
> +#define XEHPC_EUSTALL_REPORT1			XE_REG_MCR(0xe52c)

This is a masked register, but we're missing the flag.

> +#define   XEHPC_EUSTALL_REPORT1_MASK_SHIFT	16

As above, we probably don't want to be open-coding our shifts (or our
masks).  There's helpers like _MASKED_FIELD() for generating the proper
value for masked registers (with extra checking for mistakes).

> +#define   XEHPC_EUSTALL_REPORT1_READ_PTR_MASK	REG_GENMASK(15, 2)
> +#define   XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT	2
> +
> +#define XEHPC_EUSTALL_CTRL			XE_REG_MCR(0xe53c)
> +#define   EUSTALL_MOCS				REG_GENMASK(9, 3)
> +#define   EUSTALL_SAMPLE_RATE			REG_GENMASK(2, 0)
> +
> +#endif
> diff --git a/drivers/gpu/drm/xe/xe_eustall_cntr.c b/drivers/gpu/drm/xe/xe_eustall_cntr.c
> new file mode 100644
> index 000000000000..d8546fef8dd6
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_eustall_cntr.c
> @@ -0,0 +1,1000 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#include <linux/anon_inodes.h>
> +#include <linux/nospec.h>
> +#include <linux/poll.h>
> +#include <drm/drm_drv.h>
> +#include "xe_gt.h"
> +#include "xe_bo.h"
> +#include "xe_pm.h"
> +#include "xe_trace.h"
> +#include "xe_device.h"
> +#include "xe_gt_mcr.h"
> +#include "xe_force_wake.h"
> +#include "xe_gt_topology.h"
> +#include "xe_eustall_cntr.h"
> +#include "regs/xe_gt_regs.h"

Aren't you missing an include of the EU stall register header you added
above?

> +
> +#define DEFAULT_POLL_FREQUENCY_HZ 100
> +#define DEFAULT_POLL_PERIOD_NS (NSEC_PER_SEC / DEFAULT_POLL_FREQUENCY_HZ)
> +#define MISSING_CASE(x) WARN(1, "Missing case (%s == %ld)\n", \
> +			     __stringify(x), (long)(x))

We probably shouldn't be using a non-device-specific WARN.  drm_WARN or
gt_WARN would be preferred since they'd let us know which device or GT
actually triggered the warning.

Also, it looks like this is only used in a single place so it might not
even be worth using a macro.  You can just implement the warning
directly at the single callsite.

> +
> +extern u32 xe_observation_paranoid;

If this is meant to be used directly like this, then shouldn't we be
getting the extern declaration from xe_observation.h instead of placing
it here?

> +
> +/**
> + * struct eu_stall_open_properties
> + *
> + * @eu_stall_sampling_rate: Hardware EU stall sampling rate.
> + * @event_report_count: Minimum no of EU stall data rows for poll to set POLLIN.
> + * @eu_stall_buf_sz: Per subslice EU stall data buffer size.
> + * @open_disabled: Should EU stall sampling be disabled at open.
> + * @poll_period: The period in nanoseconds at which the CPU will check for
> + *		 EU stall data in the buffer.
> + * @gt_id: GT ID of the GT on which EU stall data will be captured.
> + */
> +struct eu_stall_open_properties {
> +	u8 eu_stall_sampling_rate;
> +	u32 event_report_count;
> +	u32 eu_stall_buf_sz;
> +	bool open_disabled;
> +	u64 poll_period;
> +	u8 gt_id;

Nitpick, but the current ordering of these fields isn't very good for
packing the structure...

> +};
> +
> +/**
> + * num_data_rows - Return the number of EU stall data rows of 64B each
> + *		   for a given data size.
> + *
> + * @data_size: EU stall data size
> + */
> +static inline u32
> +num_data_rows(u32 data_size)
> +{
> +	return (data_size >> 6);
> +}
> +
> +int xe_eustall_cntr_init(struct xe_gt *gt)
> +{
> +	gt->eu_stall_cntr = kzalloc(sizeof(*gt->eu_stall_cntr), GFP_KERNEL);
> +	if (!gt->eu_stall_cntr)
> +		return -ENOMEM;
> +
> +	mutex_init(&gt->eu_stall_cntr->lock);

Should there be a corresponding mutex_destroy() in the fini routine to
help catch accidental use-after-free?

> +	return 0;
> +}
> +
> +static int set_prop_eu_stall_buffer_size(struct xe_device *xe, u64 value,
> +					 struct eu_stall_open_properties *props)
> +{
> +	if (value != SZ_128K &&
> +	    value != SZ_256K &&
> +	    value != SZ_512K) {
> +		drm_dbg(&xe->drm, "Invalid EU stall buffer size %llu\n", value);
> +		return -EINVAL;
> +	}
> +	props->eu_stall_buf_sz = value;
> +	return 0;
> +}
> +
> +static int set_prop_eu_stall_sampling_rate(struct xe_device *xe, u64 value,
> +					   struct eu_stall_open_properties *props)
> +{
> +	if (value == 0 || value > 7) {
> +		drm_dbg(&xe->drm, "Invalid EU stall sampling rate %llu\n", value);
> +		return -EINVAL;
> +	}
> +	props->eu_stall_sampling_rate = value;
> +	return 0;
> +}
> +
> +static int set_prop_eu_stall_poll_period(struct xe_device *xe, u64 value,
> +					 struct eu_stall_open_properties *props)
> +{
> +	if (value < 100000 /* 100us */) {
> +		drm_dbg(&xe->drm, "EU stall data poll period %lluns less than 100us\n", value);
> +		return -EINVAL;
> +	}
> +	props->poll_period = value;
> +	return 0;
> +}
> +
> +static int set_prop_eu_stall_event_report_count(struct xe_device *xe, u64 value,
> +						struct eu_stall_open_properties *props)
> +{
> +	if (value == 0) {
> +		drm_dbg(&xe->drm, "Invalid EU stall poll event report count %llu\n", value);
> +		return -EINVAL;
> +	}
> +	props->event_report_count = (u32)value;
> +	return 0;
> +}
> +
> +static int set_prop_eu_stall_gt_id(struct xe_device *xe, u64 value,
> +				   struct eu_stall_open_properties *props)
> +{
> +	if (value >= XE_MAX_GT_PER_TILE) {

I'm not sure what the goal of this check is.  If you want to make sure
it's a valid GT, then comparing against a compile-time constant doesn't
really help since what really matters is the runtime error check we do
on the return from xe_device_get_gt().

On the other hand, if we have platforms at some point with more tiles
than 2, then this will artificially prevent you from doing EU stall
sampling on the third tile and beyond.  Same if we have a multi-tile
platform with multiple GTs per tile.

> +		drm_dbg(&xe->drm, "Invalid GT ID %llu for EU stall sampling\n", value);
> +		return -EINVAL;
> +	}
> +	props->gt_id = (u8)value;
> +	return 0;
> +}
> +
> +static int set_prop_eu_stall_open_disabled(struct xe_device *xe, u64 value,
> +					   struct eu_stall_open_properties *props)
> +{
> +	props->open_disabled = value;
> +	return 0;
> +}
> +
> +typedef int (*set_eu_stall_property_fn)(struct xe_device *xe, u64 value,
> +					struct eu_stall_open_properties *props);
> +
> +static const set_eu_stall_property_fn xe_set_eu_stall_property_funcs[] = {
> +	[DRM_XE_EU_STALL_PROP_BUF_SZ] = set_prop_eu_stall_buffer_size,
> +	[DRM_XE_EU_STALL_PROP_SAMPLE_RATE] = set_prop_eu_stall_sampling_rate,
> +	[DRM_XE_EU_STALL_PROP_POLL_PERIOD] = set_prop_eu_stall_poll_period,
> +	[DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT] = set_prop_eu_stall_event_report_count,
> +	[DRM_XE_EU_STALL_PROP_GT_ID] = set_prop_eu_stall_gt_id,
> +	[DRM_XE_EU_STALL_PROP_OPEN_DISABLED] = set_prop_eu_stall_open_disabled,
> +};
> +
> +static int xe_eu_stall_user_ext_set_property(struct xe_device *xe, u64 extension,
> +					     struct eu_stall_open_properties *props)
> +{
> +	u64 __user *address = u64_to_user_ptr(extension);
> +	struct drm_xe_ext_set_property ext;
> +	int err;
> +	u32 idx;
> +
> +	err = __copy_from_user(&ext, address, sizeof(ext));
> +	if (XE_IOCTL_DBG(xe, err))
> +		return -EFAULT;
> +
> +	if (XE_IOCTL_DBG(xe, ext.property >= ARRAY_SIZE(xe_set_eu_stall_property_funcs)) ||
> +	    XE_IOCTL_DBG(xe, ext.pad))
> +		return -EINVAL;
> +
> +	idx = array_index_nospec(ext.property, ARRAY_SIZE(xe_set_eu_stall_property_funcs));
> +	return xe_set_eu_stall_property_funcs[idx](xe, ext.value, props);
> +}
> +
> +typedef int (*xe_eu_stall_user_extension_fn)(struct xe_device *xe, u64 extension,
> +					     struct eu_stall_open_properties *props);
> +static const xe_eu_stall_user_extension_fn xe_eu_stall_user_extension_funcs[] = {
> +	[DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY] = xe_eu_stall_user_ext_set_property,
> +};
> +
> +static int xe_eu_stall_user_extensions(struct xe_device *xe, u64 extension,
> +				       struct eu_stall_open_properties *props)
> +{
> +	u64 __user *address = u64_to_user_ptr(extension);
> +	struct drm_xe_user_extension ext;
> +	int err;
> +	u32 idx;
> +
> +	err = __copy_from_user(&ext, address, sizeof(ext));
> +	if (XE_IOCTL_DBG(xe, err))
> +		return -EFAULT;
> +
> +	if (XE_IOCTL_DBG(xe, ext.pad) ||
> +	    XE_IOCTL_DBG(xe, ext.name >= ARRAY_SIZE(xe_eu_stall_user_extension_funcs)))
> +		return -EINVAL;
> +
> +	idx = array_index_nospec(ext.name, ARRAY_SIZE(xe_eu_stall_user_extension_funcs));
> +	err = xe_eu_stall_user_extension_funcs[idx](xe, extension, props);
> +	if (XE_IOCTL_DBG(xe, err))
> +		return err;
> +
> +	if (ext.next_extension)
> +		return xe_eu_stall_user_extensions(xe, ext.next_extension, props);
> +
> +	return 0;
> +}
> +
> +/**
> + * buf_data_size - Calculate the number of bytes in a circular buffer
> + *		   of size buf_size given the read and write pointers
> + *		   into the buffer.
> + *
> + * @read_ptr: Read pointer. Uses an additional overflow bit
> + * @write_ptr: Write pointer. Uses an additional overflow bit
> + *
> + * Returns: number of bytes of data in the buffer
> + */
> +static u32
> +buf_data_size(size_t buf_size, u32 read_ptr, u32 write_ptr)
> +{
> +	u32 read_offset, write_offset, size = 0;
> +
> +	read_offset = read_ptr & (buf_size - 1);
> +	write_offset = write_ptr & (buf_size - 1);
> +
> +	if (write_offset > read_offset)
> +		size = write_offset - read_offset;
> +	else
> +		size = buf_size - read_offset + write_offset;
> +
> +	return size;
> +}
> +
> +/**
> + * eu_stall_cntr_buf_check - check for data in the EU stall counter buffer
> + *
> + * @stream: xe EU stall data stream instance
> + *
> + * Returns: true if the EU stall buffer contains minimum stall data as
> + *	    specified by the event report count, else false.
> + */
> +static bool
> +eu_stall_cntr_buf_check(struct xe_eu_stall_cntr_stream *stream)
> +{
> +	u32 read_ptr, write_ptr_reg, write_ptr, total_data = 0;
> +	u32 buf_size = stream->per_dss_buf_size;
> +	struct xe_gt *gt = stream->gt;
> +	struct per_dss_buf *dss_buf;
> +	bool min_data_present;
> +	u16 group, instance;
> +	unsigned int dss;
> +
> +	min_data_present = false;
> +	for_each_dss_steering(dss, gt, group, instance) {
> +		dss_buf = &stream->dss_buf[dss];
> +		mutex_lock(&dss_buf->lock);
> +		read_ptr = dss_buf->read;
> +		write_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT,
> +						       group, instance);
> +		write_ptr = write_ptr_reg & XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK;
> +		write_ptr <<= (6 - XEHPC_EUSTALL_REPORT_WRITE_PTR_SHIFT);
> +		write_ptr &= ((buf_size << 1) - 1);
> +		if ((write_ptr != read_ptr) && !min_data_present) {
> +			total_data += buf_data_size(buf_size, read_ptr, write_ptr);
> +			/*
> +			 * Check if there are at least minimum number of stall data
> +			 * rows for poll() to indicate that the data is present.
> +			 * Each stall data row is 64B (cacheline size).
> +			 */
> +			if (num_data_rows(total_data) >= stream->event_report_count)
> +				min_data_present = true;
> +		}
> +		if (write_ptr_reg & XEHPC_EUSTALL_REPORT_OVERFLOW_DROP) {
> +			spin_lock(&stream->data_drop.lock);
> +			bitmap_set(stream->data_drop.mask, dss, 1);
> +			spin_unlock(&stream->data_drop.lock);
> +		}
> +		dss_buf->write = write_ptr;
> +		mutex_unlock(&dss_buf->lock);
> +	}
> +	return min_data_present;
> +}
> +
> +static void
> +clear_dropped_eviction_line_bit(struct xe_gt *gt, u16 group, u16 instance)
> +{
> +	enum xe_platform platform;
> +	u32 write_ptr_reg;
> +
> +	platform = gt_to_xe(gt)->info.platform;
> +
> +	/* On PVC, the overflow bit has to be cleared by writing 1 to it.
> +	 * On other GPUs, the bit has to be cleared by writing 0 to it.
> +	 */
> +	if (platform == XE_PVC)

We shouldn't really be doing platform checks in code like this.  A
graphics version check would be better:

        if (GRAPHICS_VER(xe) >= 20)
                ...w0c...
        else
                ...w1c...

> +		write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> +	else
> +		write_ptr_reg = _MASKED_BIT_DISABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> +
> +	xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT, write_ptr_reg, group, instance);
> +	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_REPORT.__reg).addr,
> +			write_ptr_reg, sizeof(write_ptr_reg));

Why are we doing manual traces here?  The xe_mmio_*() functions invoked
by xe_gt_mcr_unicast_write() should already be showing up in the trace
log, right?  Same question for the rest of the trace calls farther down
this patch.

> +}
> +
> +static int
> +__xe_eu_stall_buf_read(struct xe_eu_stall_cntr_stream *stream,
> +		       char __user *buf, size_t count,
> +		       size_t *total_size, struct xe_gt *gt,
> +		       u16 group, u16 instance, unsigned int dss)
> +{
> +	u32 read_ptr_reg, read_ptr, write_ptr;
> +	u8 *dss_start_vaddr, *read_vaddr;
> +	u32 read_offset, write_offset;
> +	struct per_dss_buf *dss_buf;
> +	size_t size, buf_size;
> +
> +	/* Hardware increments the read and write pointers such that they can
> +	 * overflow into one additional bit. For example, a 256KB size buffer
> +	 * offset pointer needs 18 bits. But HW uses 19 bits for the read and
> +	 * write pointers. This technique avoids wasting a slot in the buffer.
> +	 * Read and write offsets are calculated from the pointers in order to
> +	 * check if the write pointer has wrapped around the array.
> +	 */
> +	dss_buf = &stream->dss_buf[dss];
> +	mutex_lock(&dss_buf->lock);
> +	dss_start_vaddr = dss_buf->vaddr;
> +	read_ptr = dss_buf->read;
> +	write_ptr = dss_buf->write;
> +	buf_size = stream->per_dss_buf_size;
> +	read_offset = read_ptr & (buf_size - 1);
> +	write_offset = write_ptr & (buf_size - 1);
> +
> +	trace_xe_eu_stall_cntr_read(group, instance, read_ptr, write_ptr,
> +				    read_offset, write_offset, *total_size);
> +	if (write_ptr == read_ptr) {
> +		mutex_unlock(&dss_buf->lock);
> +		return 0;
> +	}
> +
> +	/* If write pointer offset is less than the read pointer offset,
> +	 * it means, write pointer has wrapped around the array.
> +	 */
> +	if (write_offset > read_offset)
> +		size = write_offset - read_offset;
> +	else
> +		size = buf_size - read_offset + write_offset;
> +
> +	/* Read only the data that the user space buffer can accommodate */
> +	if ((*total_size + size) > count) {
> +		mutex_unlock(&dss_buf->lock);
> +		return 0;
> +	}
> +
> +	read_vaddr = dss_start_vaddr + read_offset;
> +
> +	if (write_offset > read_offset) {
> +		if (copy_to_user((buf + *total_size), read_vaddr, size)) {
> +			mutex_unlock(&dss_buf->lock);
> +			return -EFAULT;
> +		}
> +	} else {
> +		if (copy_to_user((buf + *total_size), read_vaddr, (buf_size - read_offset))) {
> +			mutex_unlock(&dss_buf->lock);
> +			return -EFAULT;
> +		}
> +		if (copy_to_user((buf + *total_size), dss_start_vaddr, write_offset)) {
> +			mutex_unlock(&dss_buf->lock);
> +			return -EFAULT;
> +		}
> +	}
> +
> +	*total_size += size;
> +	read_ptr += size;
> +
> +	/* Read pointer can overflow into one additional bit */
> +	read_ptr &= ((buf_size << 1) - 1);
> +	read_ptr_reg = ((read_ptr >> 6) << XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT);
> +	read_ptr_reg &= XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
> +	read_ptr_reg |= (XEHPC_EUSTALL_REPORT1_READ_PTR_MASK <<
> +			 XEHPC_EUSTALL_REPORT1_MASK_SHIFT);
> +	xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT1, read_ptr_reg, group, instance);
> +	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_REPORT1.__reg).addr,
> +			read_ptr_reg, sizeof(read_ptr_reg));
> +	if (test_bit(dss, stream->data_drop.mask)) {
> +		clear_dropped_eviction_line_bit(gt, group, instance);
> +		spin_lock(&stream->data_drop.lock);
> +		bitmap_clear(stream->data_drop.mask, dss, 1);
> +		spin_unlock(&stream->data_drop.lock);
> +	}
> +	dss_buf->read = read_ptr;
> +	mutex_unlock(&dss_buf->lock);
> +	trace_xe_eu_stall_cntr_read(group, instance, read_ptr, write_ptr,
> +				    read_offset, write_offset, *total_size);

We do this same trace twice in the function (both before and after we
modify some of the values like read_ptr).  Was that intentional?

> +	return 0;
> +}
> +
> +/**
> + * xe_eu_stall_buf_read_locked - copy EU stall counters data from the
> + *				   per dss buffers to the userspace buffer
> + * @stream: A stream opened for EU stall count metrics
> + * @buf: destination buffer given by userspace
> + * @count: the number of bytes userspace wants to read
> + * @ppos: (inout) file seek position (unused)
> + *
> + * Returns: Number of bytes copied or a negative error code
> + * If we've successfully copied any data then reporting that takes
> + * precedence over any internal error status, so the data isn't lost.
> + */
> +static ssize_t
> +xe_eu_stall_buf_read_locked(struct xe_eu_stall_cntr_stream *stream,
> +			    struct file *file, char __user *buf,
> +			    size_t count, loff_t *ppos)
> +{
> +	struct xe_gt *gt = stream->gt;
> +	size_t total_size = 0;
> +	u16 group, instance;
> +	unsigned int dss;
> +	int ret = 0;
> +
> +	if (count == 0)
> +		return -EINVAL;
> +
> +	for_each_dss_steering(dss, gt, group, instance) {
> +		ret = __xe_eu_stall_buf_read(stream, buf, count, &total_size,
> +					     gt, group, instance, dss);
> +		if (ret || count == total_size)
> +			goto exit;
> +	}
> +exit:
> +	if (total_size)
> +		return total_size;
> +	else if (ret)
> +		return ret;
> +	else
> +		return -EAGAIN;
> +}
> +
> +static void
> +free_eu_stall_cntr_buf(struct xe_eu_stall_cntr_stream *stream)
> +{
> +	if (stream->bo) {
> +		xe_bo_unpin_map_no_vm(stream->bo);
> +		stream->vaddr = NULL;
> +		stream->bo = NULL;
> +	}
> +	destroy_workqueue(stream->buf_check_wq);
> +}
> +
> +static int alloc_eu_stall_cntr_buf(struct xe_eu_stall_cntr_stream *stream,
> +				   u32 per_dss_buf_size, u16 num_dss)
> +{
> +	struct xe_tile *tile = stream->gt->tile;
> +	struct xe_bo *bo;
> +	u32 size;
> +
> +	size = per_dss_buf_size * num_dss;
> +
> +	bo = xe_bo_create_pin_map(tile->xe, tile, NULL,
> +				  size, ttm_bo_type_kernel,
> +				  XE_BO_FLAG_VRAM_IF_DGFX(tile) |
> +				  XE_BO_FLAG_GGTT);
> +	if (IS_ERR(bo))
> +		return PTR_ERR(bo);
> +
> +	stream->bo = bo;
> +	stream->vaddr = bo->vmap.is_iomem ? bo->vmap.vaddr_iomem : bo->vmap.vaddr;

Aren't we losing the important details of the iosys_map here?  And then
potentially doing non-IO operations on an IO pointer later?  It seems
like we should be storing the iosys_map in the stream and then using the
appropriate functions on it elsewhere.

> +
> +	return 0;
> +}
> +
> +static u32
> +gen_eustall_base(struct xe_eu_stall_cntr_stream *stream, bool enable)
> +{
> +	u32 val = xe_bo_ggtt_addr(stream->bo);
> +	u32 sz;
> +
> +	XE_WARN_ON(!IS_ALIGNED(val, 64));
> +
> +	switch (stream->per_dss_buf_size) {
> +	case SZ_128K:
> +		sz = 0;
> +		break;
> +	case SZ_256K:
> +		sz = 1;
> +		break;
> +	case SZ_512K:
> +		sz = 2;
> +		break;
> +	default:
> +		MISSING_CASE(stream->per_dss_buf_size);
> +		sz = 2;
> +	}
> +
> +	val |= REG_FIELD_PREP(XEHPC_EUSTALL_BASE_DSS_BUF_SZ, sz);
> +	if (enable)
> +		val |= XEHPC_EUSTALL_BASE_ENABLE_SAMPLING;
> +
> +	return val;
> +}
> +
> +static void
> +xe_eu_stall_stream_enable(struct xe_eu_stall_cntr_stream *stream)
> +{
> +	struct xe_gt *gt = stream->gt;
> +	enum xe_platform platform;
> +	u32 reg_value;
> +
> +	platform = gt_to_xe(gt)->info.platform;
> +
> +	/* Take runtime pm ref and forcewake to disable RC6 */
> +	xe_pm_runtime_get(gt_to_xe(gt));
> +	XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));

Do we really need XE_FORCEWAKE_ALL?  Are we doing anything outside the
render domain that requires waking all the other domains?

> +
> +	/*
> +	 * Wa_22016596838:pvc
> +	 * Disable EU DOP gating for PVC.
> +	 */
> +	if (platform == XE_PVC)

This should be an OOB workaround, not a platform check.

> +		xe_gt_mcr_multicast_write(gt, ROW_CHICKEN2,
> +					  _MASKED_BIT_ENABLE(DISABLE_DOP_GATING));
> +
> +	reg_value = gen_eustall_base(stream, true);
> +	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, reg_value);
> +	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_BASE.__reg).addr,
> +			reg_value, sizeof(reg_value));
> +}
> +
> +static void
> +xe_eu_stall_stream_disable(struct xe_eu_stall_cntr_stream *stream)
> +{
> +	struct xe_gt *gt = stream->gt;
> +	enum xe_platform platform;
> +	u16 group, instance;
> +	unsigned int dss;
> +	u32 reg_value;
> +
> +	platform = gt_to_xe(gt)->info.platform;
> +
> +	/*
> +	 * Before disabling EU stall sampling, check if any of the
> +	 * XEHPC_EUSTALL_REPORT registers have the drop bit set. If set,
> +	 * clear the bit. If the user space application reads all the
> +	 * stall data, the drop bit would be cleared during the read.
> +	 * But if there is any unread data and the drop bit is set for
> +	 * any subslice, the drop bit would continue to be set even
> +	 * after disabling EU stall sampling and may cause erroneous
> +	 * stall data in the subsequent stall data sampling run.
> +	 */
> +	for_each_dss_steering(dss, gt, group, instance) {
> +		reg_value = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT,
> +						   group, instance);
> +		if (reg_value & XEHPC_EUSTALL_REPORT_OVERFLOW_DROP)
> +			clear_dropped_eviction_line_bit(gt, group, instance);
> +	}
> +	reg_value = gen_eustall_base(stream, false);
> +	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, reg_value);
> +	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_BASE.__reg).addr,
> +			reg_value, sizeof(reg_value));
> +
> +	/* Wa_22016596838:pvc */
> +	if (platform == XE_PVC)
> +		xe_gt_mcr_multicast_write(gt, ROW_CHICKEN2,
> +					  _MASKED_BIT_DISABLE(DISABLE_DOP_GATING));
> +
> +	XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> +	xe_pm_runtime_put(gt_to_xe(gt));
> +}
> +
> +static void eu_stall_buf_check_work_fn(struct work_struct *work)
> +{
> +	struct xe_eu_stall_cntr_stream *stream =
> +		container_of(work, typeof(*stream), buf_check_work);
> +
> +	if (eu_stall_cntr_buf_check(stream)) {
> +		stream->pollin = true;
> +		wake_up(&stream->poll_wq);
> +	}
> +}
> +
> +static enum
> +hrtimer_restart eu_stall_poll_check_timer_cb(struct hrtimer *hrtimer)
> +{
> +	struct xe_eu_stall_cntr_stream *stream =
> +		container_of(hrtimer, typeof(*stream), poll_check_timer);
> +
> +	queue_work(stream->buf_check_wq, &stream->buf_check_work);
> +	hrtimer_forward_now(hrtimer, ns_to_ktime(stream->poll_period));
> +
> +	return HRTIMER_RESTART;
> +}
> +
> +static int xe_eu_stall_stream_init(struct xe_eu_stall_cntr_stream *stream,
> +				   struct eu_stall_open_properties *props,
> +				   u16 num_dss)
> +{
> +	u32 write_ptr_reg, write_ptr, read_ptr_reg;
> +	u32 vaddr_offset, reg_value;
> +	struct xe_gt *gt = stream->gt;
> +	struct per_dss_buf *dss_buf;
> +	u16 group, instance;
> +	int ret, dss;
> +
> +	init_waitqueue_head(&stream->poll_wq);
> +	INIT_WORK(&stream->buf_check_work, eu_stall_buf_check_work_fn);
> +	stream->buf_check_wq = alloc_ordered_workqueue("xe_eustall_cntr", 0);
> +	if (!stream->buf_check_wq)
> +		return -ENOMEM;
> +	hrtimer_init(&stream->poll_check_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
> +	stream->poll_check_timer.function = eu_stall_poll_check_timer_cb;
> +	stream->event_report_count = props->event_report_count;
> +	stream->per_dss_buf_size = props->eu_stall_buf_sz;
> +	stream->poll_period = props->poll_period;
> +
> +	ret = alloc_eu_stall_cntr_buf(stream, props->eu_stall_buf_sz, num_dss);
> +	if (ret)
> +		return ret;
> +
> +	stream->dss_buf = kcalloc(num_dss, sizeof(*stream->dss_buf), GFP_KERNEL);
> +	if (!stream->dss_buf)
> +		return -ENOMEM;
> +
> +	spin_lock_init(&stream->data_drop.lock);
> +	stream->data_drop.reported_to_user = false;
> +	bitmap_zero(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS);
> +
> +	xe_pm_runtime_get(gt_to_xe(gt));
> +	XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> +
> +	reg_value = gen_eustall_base(stream, false);
> +	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, reg_value);
> +	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_BASE.__reg).addr,
> +			reg_value, sizeof(reg_value));
> +	/* GGTT addresses can never be > 32 bits */
> +	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE_UPPER, 0);
> +	reg_value = _MASKED_FIELD(EUSTALL_MOCS | EUSTALL_SAMPLE_RATE,
> +				  REG_FIELD_PREP(EUSTALL_MOCS, gt->mocs.uc_index << 1) |
> +				  REG_FIELD_PREP(EUSTALL_SAMPLE_RATE,
> +						 props->eu_stall_sampling_rate));
> +	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_CTRL, reg_value);
> +	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_CTRL.__reg).addr,
> +			reg_value, sizeof(reg_value));
> +
> +	for_each_dss_steering(dss, gt, group, instance) {
> +		write_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT,
> +						       group, instance);
> +		write_ptr = write_ptr_reg & XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK;
> +		write_ptr <<= (6 - XEHPC_EUSTALL_REPORT_WRITE_PTR_SHIFT);
> +		write_ptr &= ((stream->per_dss_buf_size << 1) - 1);
> +		read_ptr_reg = write_ptr >> (6 - XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT);
> +		read_ptr_reg &= XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
> +		read_ptr_reg |= (XEHPC_EUSTALL_REPORT1_READ_PTR_MASK <<
> +				 XEHPC_EUSTALL_REPORT1_MASK_SHIFT);
> +		xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT1,
> +					read_ptr_reg, group, instance);
> +		dss_buf = &stream->dss_buf[dss];
> +		vaddr_offset = dss * props->eu_stall_buf_sz;
> +		dss_buf->vaddr = stream->vaddr + vaddr_offset;
> +		dss_buf->write = write_ptr;
> +		dss_buf->read = write_ptr;
> +		mutex_init(&dss_buf->lock);
> +	}
> +	XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> +	xe_pm_runtime_put(gt_to_xe(gt));
> +	return 0;
> +}
> +
> +/**
> + * xe_eu_stall_buf_read - handles read FOP for xe EU stall cntr stream FDs
> + * @file: An xe EU stall cntr stream file
> + * @buf: destination buffer given by userspace
> + * @count: the number of bytes userspace wants to read
> + * @ppos: (inout) file seek position (unused)
> + *
> + * Returns: The number of bytes copied or a negative error code on failure.
> + */
> +static ssize_t xe_eu_stall_buf_read(struct file *file, char __user *buf,
> +				    size_t count, loff_t *ppos)
> +{
> +	struct xe_eu_stall_cntr_stream *stream = file->private_data;
> +	struct xe_gt *gt = stream->gt;
> +	ssize_t ret;
> +
> +	if (!stream->enabled) {
> +		drm_dbg(&gt->tile->xe->drm, "EU stall data stream not enabled to read\n");

Here and elsewhere throughout this patch, it would be much better to use
xe_gt_dbg() and such so that we have more useful log output that
identifies which GT the messages came from.

> +		return -EINVAL;
> +	}
> +
> +	if (bitmap_weight(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS)) {
> +		if (!stream->data_drop.reported_to_user) {
> +			stream->data_drop.reported_to_user = true;
> +			drm_dbg(&gt->tile->xe->drm, "EU stall data drop reported\n");
> +			return -EIO;
> +		}
> +		stream->data_drop.reported_to_user = false;
> +	}
> +
> +	if (!(file->f_flags & O_NONBLOCK)) {
> +		do {
> +			if (!stream->pollin) {
> +				ret = wait_event_interruptible(stream->poll_wq, stream->pollin);
> +				if (ret)
> +					return -EINTR;
> +			}
> +
> +			mutex_lock(&gt->eu_stall_cntr->lock);
> +			ret = xe_eu_stall_buf_read_locked(stream, file, buf, count, ppos);
> +			mutex_unlock(&gt->eu_stall_cntr->lock);
> +		} while (ret == -EAGAIN);
> +	} else {
> +		mutex_lock(&gt->eu_stall_cntr->lock);
> +		ret = xe_eu_stall_buf_read_locked(stream, file, buf, count, ppos);
> +		mutex_unlock(&gt->eu_stall_cntr->lock);
> +	}
> +
> +	stream->pollin = false;
> +
> +	return ret;
> +}
> +
> +static __poll_t
> +xe_eu_stall_buf_poll_locked(struct xe_eu_stall_cntr_stream *stream,
> +			    struct file *file, poll_table *wait)
> +{
> +	__poll_t events = 0;
> +
> +	poll_wait(file, &stream->poll_wq, wait);
> +
> +	if (stream->pollin)
> +		events |= EPOLLIN;
> +
> +	return events;
> +}
> +
> +static __poll_t
> +xe_eu_stall_buf_poll(struct file *file, poll_table *wait)
> +{
> +	struct xe_eu_stall_cntr_stream *stream = file->private_data;
> +	struct xe_gt *gt = stream->gt;
> +	__poll_t ret;
> +
> +	mutex_lock(&gt->eu_stall_cntr->lock);
> +	ret = xe_eu_stall_buf_poll_locked(stream, file, wait);
> +	mutex_unlock(&gt->eu_stall_cntr->lock);
> +
> +	return ret;
> +}
> +
> +static void
> +xe_eu_stall_cntr_enable_locked(struct xe_eu_stall_cntr_stream *stream)
> +{
> +	if (stream->enabled)
> +		return;
> +
> +	stream->enabled = true;
> +
> +	xe_eu_stall_stream_enable(stream);
> +	hrtimer_start(&stream->poll_check_timer,
> +		      ns_to_ktime(stream->poll_period),
> +		      HRTIMER_MODE_REL);
> +}
> +
> +static void
> +xe_eu_stall_cntr_disable_locked(struct xe_eu_stall_cntr_stream *stream)
> +{
> +	if (!stream->enabled)
> +		return;
> +
> +	stream->enabled = false;
> +
> +	hrtimer_cancel(&stream->poll_check_timer);
> +	flush_workqueue(stream->buf_check_wq);
> +	xe_eu_stall_stream_disable(stream);
> +}
> +
> +static long
> +xe_eu_stall_cntr_info_locked(struct xe_eu_stall_cntr_stream *stream,
> +			     unsigned long arg)
> +{
> +	struct drm_xe_eu_stall_stream_info info = { .record_size = 0, };
> +	void __user *uaddr = (void __user *)arg;
> +	struct xe_gt *gt = stream->gt;
> +	enum xe_platform platform;
> +
> +	platform = gt_to_xe(gt)->info.platform;
> +
> +	if (platform == XE_PVC)
> +		info.record_size = sizeof(struct drm_xe_eu_stall_data_pvc);
> +	else if ((platform == XE_LUNARLAKE) || (platform == XE_BATTLEMAGE))
> +		info.record_size = sizeof(struct drm_xe_eu_stall_data_xe2);
> +
> +	if (copy_to_user(uaddr, &info, sizeof(info)))
> +		return -EFAULT;
> +
> +	return 0;
> +}
> +
> +static long
> +xe_eu_stall_cntr_ioctl_locked(struct xe_eu_stall_cntr_stream *stream,
> +			      unsigned int cmd, unsigned long arg)
> +{
> +	switch (cmd) {
> +	case DRM_XE_OBSERVATION_IOCTL_ENABLE:
> +		xe_eu_stall_cntr_enable_locked(stream);
> +		return 0;
> +	case DRM_XE_OBSERVATION_IOCTL_DISABLE:
> +		xe_eu_stall_cntr_disable_locked(stream);
> +		return 0;
> +	case DRM_XE_OBSERVATION_IOCTL_INFO:
> +		return xe_eu_stall_cntr_info_locked(stream, arg);
> +	}
> +
> +	return -EINVAL;
> +}
> +
> +/**
> + * xe_eu_stall_cntr_ioctl - support ioctl() usage with xe EU stall counter
> + *								stream FDs
> + * @file: An xe EU stall cntr stream file
> + * @cmd: the ioctl request
> + * @arg: the ioctl data
> + *
> + * Implementation deferred to xe_eu_stall_cntr_ioctl_locked().
> + *
> + * Returns: zero on success or a negative error code. Returns -EINVAL for
> + * an unknown ioctl request.
> + */
> +static long xe_eu_stall_cntr_ioctl(struct file *file,
> +				   unsigned int cmd,
> +				   unsigned long arg)
> +{
> +	struct xe_eu_stall_cntr_stream *stream = file->private_data;
> +	struct xe_gt *gt = stream->gt;
> +	long ret;
> +
> +	mutex_lock(&gt->eu_stall_cntr->lock);
> +	ret = xe_eu_stall_cntr_ioctl_locked(stream, cmd, arg);
> +	mutex_unlock(&gt->eu_stall_cntr->lock);
> +
> +	return ret;
> +}
> +
> +static void
> +xe_eu_stall_destroy_locked(struct xe_eu_stall_cntr_stream *stream)
> +{
> +	xe_eu_stall_cntr_disable_locked(stream);
> +	free_eu_stall_cntr_buf(stream);
> +}
> +
> +/**
> + * xe_eu_stall_release - handles userspace close() of a EU stall data
> + *			   stream file.
> + * @inode: anonymous inode associated with file
> + * @file: An xe EU stall stream file
> + *
> + * Cleans up any resources associated with an open EU stall data stream file.
> + */
> +static int xe_eu_stall_release(struct inode *inode, struct file *file)
> +{
> +	struct xe_eu_stall_cntr_stream *stream = file->private_data;
> +	struct xe_gt *gt = stream->gt;
> +
> +	mutex_lock(&gt->eu_stall_cntr->lock);
> +	xe_eu_stall_destroy_locked(stream);
> +	kfree(stream->dss_buf);
> +	kfree(stream);
> +	gt->eu_stall_cntr->stream = NULL;
> +	mutex_unlock(&gt->eu_stall_cntr->lock);
> +
> +	/* Release the reference the EU stall stream kept on the driver */
> +	drm_dev_put(&gt->tile->xe->drm);
> +
> +	return 0;
> +}
> +
> +static const struct file_operations fops_eu_stall = {
> +	.owner		= THIS_MODULE,
> +	.llseek		= no_llseek,
> +	.release	= xe_eu_stall_release,
> +	.poll		= xe_eu_stall_buf_poll,
> +	.read		= xe_eu_stall_buf_read,
> +	.unlocked_ioctl = xe_eu_stall_cntr_ioctl,
> +	.compat_ioctl   = xe_eu_stall_cntr_ioctl,
> +};
> +
> +/**
> + * xe_open_eu_stall_stream_locked - Open a EU stall data stream FD.
> + * @dev: drm device instance
> + * @props: individually validated u64 property value pairs
> + * @file: drm file
> + * @gt: GT from which the EU stall data will be captured
> + *
> + * Returns: zero on success or a negative error code.
> + */
> +static int
> +xe_open_eu_stall_stream_locked(struct drm_device *dev,
> +			       struct eu_stall_open_properties *props,
> +			       struct drm_file *file,
> +			       struct xe_gt *gt)
> +{
> +	struct xe_device *xe = to_xe_device(dev);
> +	struct xe_eu_stall_cntr_stream *stream;
> +	unsigned long f_flags = 0;
> +	xe_dss_mask_t all_dss;
> +	int ret, stream_fd;
> +	u32 tile_buf_size;
> +	u16 num_dss;
> +
> +	if (xe_observation_paranoid && !perfmon_capable()) {
> +		drm_dbg(&xe->drm, "Insufficient privileges for EU stall monitoring\n");
> +		return -EACCES;
> +	}
> +
> +	/* Only one session can be active at any time */
> +	if (gt->eu_stall_cntr->stream) {
> +		drm_dbg(&xe->drm, "EU stall cntr session already active\n");
> +		return -EBUSY;
> +	}
> +
> +	bitmap_or(all_dss, gt->fuse_topo.g_dss_mask, gt->fuse_topo.c_dss_mask,
> +		  XE_MAX_DSS_FUSE_BITS);
> +	/*
> +	 * Enabled subslices can be discontiguous. Find the last subslice
> +	 * and calculate total buffer size based on that.
> +	 * intel_sseu_highest_xehp_dss returns zero based position.

What is intel_sseu_highest_xehp_dss?  That sounds like an i915 function
name, but this is Xe (and no such function exists in i915 either).

> +	 * Therefore the result is incremented.
> +	 */
> +	num_dss = xe_dss_mask_last_dss(all_dss) + 1;
> +	tile_buf_size = props->eu_stall_buf_sz * num_dss;
> +	if (props->event_report_count > num_data_rows(tile_buf_size)) {
> +		drm_dbg(&xe->drm, "Invalid EU stall data poll event report count %u\n",
> +			props->event_report_count);
> +		drm_dbg(&xe->drm, "Maximum event report count for the given buffer size is %u\n",
> +			num_data_rows(tile_buf_size));
> +		return -EINVAL;
> +	}
> +
> +	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
> +	if (!stream)
> +		return -ENOMEM;
> +
> +	gt->eu_stall_cntr->stream = stream;
> +	stream->gt = gt;
> +
> +	ret = xe_eu_stall_stream_init(stream, props, num_dss);
> +	if (ret) {
> +		drm_dbg(&xe->drm, "EU stall stream init failed : %d\n", ret);
> +		goto err_alloc;
> +	}
> +
> +	stream_fd = anon_inode_getfd("[xe_eu_stall]", &fops_eu_stall,
> +				     stream, f_flags);
> +	if (stream_fd < 0) {
> +		ret = stream_fd;
> +		drm_dbg(&xe->drm, "EU stall inode get fd failed : %d\n", ret);
> +		goto err_open;
> +	}
> +
> +	if (!props->open_disabled)
> +		xe_eu_stall_cntr_enable_locked(stream);
> +
> +	/* Take a reference on the driver that will be kept with stream_fd
> +	 * until its release.
> +	 */
> +	drm_dev_get(&gt->tile->xe->drm);
> +
> +	return stream_fd;
> +
> +err_open:
> +	free_eu_stall_cntr_buf(stream);
> +err_alloc:
> +	gt->eu_stall_cntr->stream = NULL;
> +	kfree(stream->dss_buf);
> +	kfree(stream);
> +	return ret;
> +}
> +
> +int xe_open_eu_stall_stream(struct drm_device *dev,
> +			    u64 data,
> +			    struct drm_file *file)
> +{
> +	struct xe_device *xe = to_xe_device(dev);
> +	struct eu_stall_open_properties props;
> +	struct xe_gt *gt;
> +	int ret;
> +
> +	memset(&props, 0, sizeof(struct eu_stall_open_properties));
> +
> +	/* Set default values */
> +	props.gt_id = 0;
> +	props.eu_stall_buf_sz = SZ_256K;
> +	props.eu_stall_sampling_rate = 4;
> +	props.poll_period = DEFAULT_POLL_PERIOD_NS;
> +	props.event_report_count = 1;
> +
> +	ret = xe_eu_stall_user_extensions(xe, data, &props);
> +	if (ret)
> +		return ret;
> +
> +	gt = xe_device_get_gt(xe, props.gt_id);
> +	if (!gt) {
> +		drm_dbg(&xe->drm, "Invalid GT for EU stall sampling\n");
> +		return -EINVAL;
> +	}
> +
> +	mutex_lock(&gt->eu_stall_cntr->lock);
> +	ret = xe_open_eu_stall_stream_locked(dev, &props, file, gt);
> +	mutex_unlock(&gt->eu_stall_cntr->lock);
> +	return ret;
> +}
> diff --git a/drivers/gpu/drm/xe/xe_eustall_cntr.h b/drivers/gpu/drm/xe/xe_eustall_cntr.h
> new file mode 100644
> index 000000000000..417c38838432
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_eustall_cntr.h
> @@ -0,0 +1,60 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#ifndef __XE_EUSTALL_CNTR_H__
> +#define __XE_EUSTALL_CNTR_H__
> +
> +#include <drm/xe_drm.h>
> +#include <drm/drm_file.h>
> +#include "xe_gt_types.h"
> +#include "regs/xe_eu_stall_regs.h"
> +
> +struct per_dss_buf {
> +	u8 *vaddr;
> +	u32 write;
> +	u32 read;
> +	/* lock to protect read and write pointers */
> +	struct mutex lock;
> +};
> +
> +/**
> + * struct xe_eu_stall_cntr_stream - state of EU stall counter stream FD
> + */
> +struct xe_eu_stall_cntr_stream {
> +	u8 *vaddr;
> +	bool pollin;
> +	bool enabled;
> +	u64 poll_period;
> +	u32 event_report_count;
> +	size_t per_dss_buf_size;
> +	wait_queue_head_t poll_wq;
> +
> +	struct xe_gt *gt;
> +	struct xe_bo *bo;
> +	struct per_dss_buf *dss_buf;
> +	struct {
> +		bool reported_to_user;
> +		xe_dss_mask_t mask;
> +		/* lock to protect mask */
> +		spinlock_t lock;
> +	} data_drop;
> +	struct hrtimer poll_check_timer;
> +	struct work_struct buf_check_work;
> +	struct workqueue_struct *buf_check_wq;
> +};
> +
> +struct xe_eu_stall_cntr_gt {
> +	/* Lock to protect stream */
> +	struct mutex lock;
> +
> +	/* Execution Unit (EU) stall counter stream */
> +	struct xe_eu_stall_cntr_stream *stream;
> +};
> +
> +int xe_eustall_cntr_init(struct xe_gt *gt);
> +int xe_open_eu_stall_stream(struct drm_device *dev,
> +			    u64 data,
> +			    struct drm_file *file);
> +#endif
> diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
> index f0dc2bf24c7b..0f661ebe9403 100644
> --- a/drivers/gpu/drm/xe/xe_gt.c
> +++ b/drivers/gpu/drm/xe/xe_gt.c
> @@ -59,6 +59,7 @@
>  #include "xe_vm.h"
>  #include "xe_wa.h"
>  #include "xe_wopcm.h"
> +#include "xe_eustall_cntr.h"
>  
>  static void gt_fini(struct drm_device *drm, void *arg)
>  {
> @@ -158,6 +159,7 @@ void xe_gt_remove(struct xe_gt *gt)
>  		xe_hw_fence_irq_finish(&gt->fence_irq[i]);
>  
>  	xe_gt_disable_host_l2_vram(gt);
> +	kfree(gt->eu_stall_cntr);
>  }
>  
>  static void gt_reset_worker(struct work_struct *w);
> @@ -620,6 +622,10 @@ int xe_gt_init(struct xe_gt *gt)
>  
>  	xe_gt_record_user_engines(gt);
>  
> +	err = xe_eustall_cntr_init(gt);
> +	if (err)
> +		return err;
> +
>  	return 0;
>  }
>  
> diff --git a/drivers/gpu/drm/xe/xe_gt_topology.c b/drivers/gpu/drm/xe/xe_gt_topology.c
> index 0662f71c6ede..031782247723 100644
> --- a/drivers/gpu/drm/xe/xe_gt_topology.c
> +++ b/drivers/gpu/drm/xe/xe_gt_topology.c
> @@ -264,6 +264,15 @@ xe_dss_mask_group_ffs(const xe_dss_mask_t mask, int groupsize, int groupnum)
>  	return find_next_bit(mask, XE_MAX_DSS_FUSE_BITS, groupnum * groupsize);
>  }
>  
> +/*
> + * Used to obtain the index of the last DSS.
> + */
> +unsigned int
> +xe_dss_mask_last_dss(const xe_dss_mask_t mask)
> +{
> +	return find_last_bit(mask, XE_MAX_DSS_FUSE_BITS);
> +}
> +
>  bool xe_dss_mask_empty(const xe_dss_mask_t mask)
>  {
>  	return bitmap_empty(mask, XE_MAX_DSS_FUSE_BITS);
> diff --git a/drivers/gpu/drm/xe/xe_gt_topology.h b/drivers/gpu/drm/xe/xe_gt_topology.h
> index 746b325bbf6e..7ee022784397 100644
> --- a/drivers/gpu/drm/xe/xe_gt_topology.h
> +++ b/drivers/gpu/drm/xe/xe_gt_topology.h
> @@ -28,6 +28,9 @@ void xe_gt_topology_dump(struct xe_gt *gt, struct drm_printer *p);
>  unsigned int
>  xe_dss_mask_group_ffs(const xe_dss_mask_t mask, int groupsize, int groupnum);
>  
> +unsigned int
> +xe_dss_mask_last_dss(const xe_dss_mask_t mask);
> +
>  bool xe_dss_mask_empty(const xe_dss_mask_t mask);
>  
>  bool
> diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
> index 3d1c51de0268..a8eb312c28fd 100644
> --- a/drivers/gpu/drm/xe/xe_gt_types.h
> +++ b/drivers/gpu/drm/xe/xe_gt_types.h
> @@ -428,6 +428,9 @@ struct xe_gt {
>  
>  	/** @oa: oa observation subsystem per gt info */
>  	struct xe_oa_gt oa;
> +
> +	/** @eu_stall_cntr: EU stall counters subsystem per gt info */
> +	struct xe_eu_stall_cntr_gt *eu_stall_cntr;
>  };
>  
>  #endif
> diff --git a/drivers/gpu/drm/xe/xe_observation.c b/drivers/gpu/drm/xe/xe_observation.c
> index 8ec1b84cbb9e..b1942bc72ae0 100644
> --- a/drivers/gpu/drm/xe/xe_observation.c
> +++ b/drivers/gpu/drm/xe/xe_observation.c
> @@ -8,6 +8,7 @@
>  
>  #include <uapi/drm/xe_drm.h>
>  
> +#include "xe_eustall_cntr.h"
>  #include "xe_oa.h"
>  #include "xe_observation.h"
>  
> @@ -29,6 +30,17 @@ static int xe_oa_ioctl(struct drm_device *dev, struct drm_xe_observation_param *
>  	}
>  }
>  
> +static int xe_eu_stall_ioctl(struct drm_device *dev, struct drm_xe_observation_param *arg,
> +			     struct drm_file *file)
> +{
> +	switch (arg->observation_op) {
> +	case DRM_XE_OBSERVATION_OP_STREAM_OPEN:
> +		return xe_open_eu_stall_stream(dev, arg->param, file);
> +	default:
> +		return -EINVAL;
> +	}
> +}
> +
>  /**
>   * xe_observation_ioctl - The top level observation layer ioctl
>   * @dev: @drm_device
> @@ -51,6 +63,8 @@ int xe_observation_ioctl(struct drm_device *dev, void *data, struct drm_file *fi
>  	switch (arg->observation_type) {
>  	case DRM_XE_OBSERVATION_TYPE_OA:
>  		return xe_oa_ioctl(dev, arg, file);
> +	case DRM_XE_OBSERVATION_TYPE_EU_STALL:
> +		return xe_eu_stall_ioctl(dev, arg, file);
>  	default:
>  		return -EINVAL;
>  	}
> diff --git a/drivers/gpu/drm/xe/xe_trace.h b/drivers/gpu/drm/xe/xe_trace.h
> index 8573d7a87d84..dfb1eb121337 100644
> --- a/drivers/gpu/drm/xe/xe_trace.h
> +++ b/drivers/gpu/drm/xe/xe_trace.h
> @@ -421,6 +421,41 @@ DEFINE_EVENT(xe_pm_runtime, xe_pm_runtime_get_ioctl,
>  	     TP_ARGS(xe, caller)
>  );
>  
> +TRACE_EVENT(xe_eu_stall_cntr_read,
> +	    TP_PROTO(u8 slice, u8 subslice,
> +		     u32 read_ptr, u32 write_ptr,
> +		     u32 read_offset, u32 write_offset,
> +		     size_t total_size),
> +	    TP_ARGS(slice, subslice, read_ptr, write_ptr,
> +		    read_offset, write_offset, total_size),
> +
> +	    TP_STRUCT__entry(
> +			     __field(u8, slice)
> +			     __field(u8, subslice)
> +			     __field(u32, read_ptr)
> +			     __field(u32, write_ptr)
> +			     __field(u32, read_offset)
> +			     __field(u32, write_offset)
> +			     __field(size_t, total_size)
> +			     ),
> +
> +	    TP_fast_assign(
> +			   __entry->slice = slice;
> +			   __entry->subslice = subslice;
> +			   __entry->read_ptr = read_ptr;
> +			   __entry->write_ptr = write_ptr;
> +			   __entry->read_offset = read_offset;
> +			   __entry->write_offset = write_offset;
> +			   __entry->total_size = total_size;
> +			   ),
> +
> +	    TP_printk("slice:%u subslice:%u readptr:0x%x writeptr:0x%x read off:%u write off:%u size:%zu ",
> +		      __entry->slice, __entry->subslice,
> +		      __entry->read_ptr, __entry->write_ptr,
> +		      __entry->read_offset, __entry->write_offset,
> +		      __entry->total_size)
> +);
> +
>  #endif
>  
>  /* This part must be outside protection */
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index b6fbe4988f2e..c836227d064f 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -1395,6 +1395,8 @@ struct drm_xe_wait_user_fence {
>  enum drm_xe_observation_type {
>  	/** @DRM_XE_OBSERVATION_TYPE_OA: OA observation stream type */
>  	DRM_XE_OBSERVATION_TYPE_OA,
> +	/** @DRM_XE_OBSERVATION_TYPE_EU_STALL: EU stall sampling observation stream type */
> +	DRM_XE_OBSERVATION_TYPE_EU_STALL,
>  };
>  
>  /**
> @@ -1694,6 +1696,138 @@ struct drm_xe_oa_stream_info {
>  	__u64 reserved[3];
>  };
>  
> +/**
> + * enum drm_xe_eu_stall_property_id - EU stall data stream property ids.
> + *
> + * These properties are passed to the driver as a chain of
> + * @drm_xe_ext_set_property structures with @property set to these
> + * properties' enums and @value set to the corresponding values of these
> + * properties. @drm_xe_user_extension base.name should be set to
> + * @DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY.
> + */
> +enum drm_xe_eu_stall_property_id {
> +#define DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY		0
> +	/**
> +	 * @DRM_XE_EU_STALL_PROP_BUF_SZ: Per DSS Memory Buffer Size.
> +	 * Valid values are 128 KB, 256 KB, and 512 KB.
> +	 */
> +	DRM_XE_EU_STALL_PROP_BUF_SZ = 1,

Does userspace really care about this being configurable?  Even if we
have a platform with XE_MAX_DSS_FUSE_BITS total XeCores, the difference
between the largest and smallest sizes here only saves 48MB of memory.
The hardware makes this configurable, but is there actually an ask to
expose this through the uapi?  If not, I'd say we should just always
pick 512KB internally and keep things simple.

> +
> +	/**
> +	 * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
> +	 * in multiples of 251 cycles. Valid values are 1 to 7.
> +	 * If the value is 1, sampling interval is 251 cycles.
> +	 * If the value is 7, sampling interval is 7 x 251 cycles.
> +	 */
> +	DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
> +
> +	/**
> +	 * @DRM_XE_EU_STALL_PROP_POLL_PERIOD: EU stall data
> +	 * poll period in nanoseconds. should be at least 100000 ns.
> +	 */
> +	DRM_XE_EU_STALL_PROP_POLL_PERIOD,
> +
> +	/**
> +	 * @DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT: Minimum number of
> +	 * EU stall data rows to be present in the kernel buffer for
> +	 * poll() to set POLLIN (data present).
> +	 */
> +	DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT,
> +
> +	/**
> +	 * @DRM_XE_EU_STALL_PROP_GT_ID: GT ID of the GT on which
> +	 * EU stall data will be captured.
> +	 */
> +	DRM_XE_EU_STALL_PROP_GT_ID,

I mentioned above, but it feels like this should be an intrinsic part of
the API, not something coming in through an optional extension...

> +
> +	/**
> +	 * @DRM_XE_EU_STALL_PROP_OPEN_DISABLED: A value of 1 will open
> +	 * the EU stall data stream without enabling EU stall sampling.
> +	 */
> +	DRM_XE_EU_STALL_PROP_OPEN_DISABLED,

Is there a reason not to make this one the default behavior?  Is there
really a benefit to auto-enabling on open that makes it worth the extra
API complexity to make this configurable?

> +};
> +
> +/**
> + * struct drm_xe_eu_stall_stream_info - EU stall stream info returned from
> + * @DRM_XE_OBSERVATION_IOCTL_INFO observation stream fd ioctl
> + */
> +struct drm_xe_eu_stall_stream_info {
> +	/** @extensions: Pointer to the first extension struct, if any */
> +	__u64 extensions;
> +
> +	/** @record_size: size of each EU stall data record */
> +	__u64 record_size;
> +
> +	/** @reserved: reserved for future use */
> +	__u64 reserved[3];
> +};
> +
> +/**
> + * struct drm_xe_eu_stall_data_pvc - EU stall data format for PVC

I thought there was an ask from one of the userspace teams that we make
the layout discoverable?  I.e., a runtime-queryable format description
that lists the counter type, size, and offset in the record of each
counter that has usable data in the records?  Did we change directions
on that?


Matt

> + *
> + * Bits		Field
> + * 0  to 28	IP (addr)
> + * 29 to 36	active count
> + * 37 to 44	other count
> + * 45 to 52	control count
> + * 53 to 60	pipestall count
> + * 61 to 68	send count
> + * 69 to 76	dist_acc count
> + * 77 to 84	sbid count
> + * 85 to 92	sync count
> + * 93 to 100	inst_fetch count
> + */
> +struct drm_xe_eu_stall_data_pvc {
> +	__u64 ip_addr:29;
> +	__u64 active_count:8;
> +	__u64 other_count:8;
> +	__u64 control_count:8;
> +	__u64 pipestall_count:8;
> +	__u64 send_count:8;
> +	__u64 dist_acc_count:8;
> +	__u64 sbid_count:8;
> +	__u64 sync_count:8;
> +	__u64 inst_fetch_count:8;
> +	__u64 unused_bits:27;
> +	__u64 unused[6];
> +} __attribute__((packed));
> +
> +/**
> + * struct drm_xe_eu_stall_data_xe2 - EU stall data format for LNL, BMG
> + *
> + * Bits		Field
> + * 0  to 28	IP (addr)
> + * 29 to 36	Tdr count
> + * 37 to 44	other count
> + * 45 to 52	control count
> + * 53 to 60	pipestall count
> + * 61 to 68	send count
> + * 69 to 76	dist_acc count
> + * 77 to 84	sbid count
> + * 85 to 92	sync count
> + * 93 to 100	inst_fetch count
> + * 101 to 108	Active count
> + * 109 to 111	Exid
> + * 112		EndFlag (is always 1)
> + */
> +struct drm_xe_eu_stall_data_xe2 {
> +	__u64 ip_addr:29;
> +	__u64 tdr_count:8;
> +	__u64 other_count:8;
> +	__u64 control_count:8;
> +	__u64 pipestall_count:8;
> +	__u64 send_count:8;
> +	__u64 dist_acc_count:8;
> +	__u64 sbid_count:8;
> +	__u64 sync_count:8;
> +	__u64 inst_fetch_count:8;
> +	__u64 active_count:8;
> +	__u64 ex_id:3;
> +	__u64 end_flag:1;
> +	__u64 unused_bits:15;
> +	__u64 unused[6];
> +} __attribute__((packed));
> +
>  #if defined(__cplusplus)
>  }
>  #endif
> -- 
> 2.45.1
> 

-- 
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation

^ permalink raw reply	[flat|nested] 20+ messages in thread

* ✓ CI.Patch_applied: success for Add support for EU stall sampling
  2024-09-09  7:36 [PATCH v3 0/1] Add support for EU stall sampling Harish Chegondi
  2024-09-09  7:36 ` [PATCH v3 1/1] drm/xe/eustall: " Harish Chegondi
  2024-09-09  7:42 ` [PATCH v3 0/1] " Ranjan, Joshua Santhosh
@ 2024-09-10  6:33 ` Patchwork
  2024-09-10  6:33 ` ✗ CI.checkpatch: warning " Patchwork
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2024-09-10  6:33 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

== Series Details ==

Series: Add support for EU stall sampling
URL   : https://patchwork.freedesktop.org/series/138389/
State : success

== Summary ==

=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: bab1666fc237 drm-tip: 2024y-09m-10d-03h-10m-44s UTC integration manifest
=== git am output follows ===
Applying: drm/xe/eustall: Add support for EU stall sampling



^ permalink raw reply	[flat|nested] 20+ messages in thread

* ✗ CI.checkpatch: warning for Add support for EU stall sampling
  2024-09-09  7:36 [PATCH v3 0/1] Add support for EU stall sampling Harish Chegondi
                   ` (2 preceding siblings ...)
  2024-09-10  6:33 ` ✓ CI.Patch_applied: success for " Patchwork
@ 2024-09-10  6:33 ` Patchwork
  2024-09-10  6:34 ` ✓ CI.KUnit: success " Patchwork
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2024-09-10  6:33 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

== Series Details ==

Series: Add support for EU stall sampling
URL   : https://patchwork.freedesktop.org/series/138389/
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
c62d7e164862503a3662a095da1c6c9014248cb2
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 56119e9fbd1fb7b6c1703e7ce7516944f25f6ac2
Author: Harish Chegondi <harish.chegondi@intel.com>
Date:   Mon Sep 9 00:36:40 2024 -0700

    drm/xe/eustall: Add support for EU stall sampling
    
    A new hardware feature first introduced in PVC gives capability to
    periodically sample EU stall state and record counts for different stall
    reasons, on a per IP basis, aggregate across all EUs in a subslice and
    record the samples in a buffer in each subslice. Eventually, the aggregated
    data is written out to a buffer in the memory. This feature is also
    supported in XE2 architecture GPUs - LNL and BMG.
    
    Use an existing IOCTL DRM_IOCTL_XE_OBSERVATION as interface into the driver
    from the user space to do initial setup and obtain a file descriptor for
    the EU stall counter data stream.  Input parameter to the IOCTL is a struct
    drm_xe_observation_param in which observation_type should be set to
    DRM_XE_OBSERVATION_TYPE_EU_STALL, observation_op should be
    DRM_XE_OBSERVATION_OP_STREAM_OPEN and param should point to a chain of
    drm_xe_ext_set_property structures in which each structure has a pair of
    property and value. The EU stall sampling input properties are defined in
    drm_xe_eu_stall_property_id enum.
    
    With the file descriptor obtained from DRM_IOCTL_XE_OBSERVATION, user space
    can enable and disable EU stall sampling with the IOCTLs:
    DRM_XE_OBSERVATION_IOCTL_ENABLE and DRM_XE_OBSERVATION_IOCTL_DISABLE.
    User space can find the EU stall data record size with the IOCTL
    DRM_XE_OBSERVATION_IOCTL_INFO through struct drm_xe_eu_stall_stream_info
    parameter. User space can also call poll() to check for availability of
    data. The data can be read with read(). If the user space doesn't read
    the EU stall data fast enough, it is possible that the EU stall data buffer
    can get filled up and if the hardware wants to write more data, it
    simply drops data due to unavailable buffer space. In that case hardware
    sets a bit in a register. The driver read() returns -EIO error to let
    the user space know that the hardware has dropped data. A subsequent
    read by the user space returns the remaining EU stall data.
    
    v3: a. Removed data header.
        b. Changed read() to return -EIO when data is dropped by the HW.
        c. Added a new DRM_XE_OBSERVATION_IOCTL_INFO to query data record info
        d. Added struct drm_xe_eu_stall_data_pvc and struct drm_xe_eu_stall_data_xe2
           to xe_drm.h. These declarations would help user space to parse the
           EU stall data
        e. Addressed other review comments from v2
    v2: Rename xe perf layer as xe observation layer (Ashutosh)
    
    Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
    Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
+ /mt/dim checkpatch bab1666fc2379a31ac48e7d61683d3edeaf29244 drm-intel
56119e9fbd1f drm/xe/eustall: Add support for EU stall sampling
-:40: WARNING:COMMIT_LOG_LONG_LINE: Prefer a maximum 75 chars per line (possible unwrapped commit description?)
#40: 
    d. Added struct drm_xe_eu_stall_data_pvc and struct drm_xe_eu_stall_data_xe2

-:62: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#62: 
new file mode 100644

-:131: WARNING:AVOID_EXTERNS: externs should be avoided in .c files
#131: FILE: drivers/gpu/drm/xe/xe_eustall_cntr.c:26:
+extern u32 xe_observation_paranoid;

-:359: CHECK:UNNECESSARY_PARENTHESES: Unnecessary parentheses around 'write_ptr != read_ptr'
#359: FILE: drivers/gpu/drm/xe/xe_eustall_cntr.c:254:
+		if ((write_ptr != read_ptr) && !min_data_present) {

-:1306: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#1306: FILE: drivers/gpu/drm/xe/xe_trace.h:432:
+	    TP_STRUCT__entry(

-:1316: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#1316: FILE: drivers/gpu/drm/xe/xe_trace.h:442:
+	    TP_fast_assign(

total: 0 errors, 3 warnings, 3 checks, 1376 lines checked



^ permalink raw reply	[flat|nested] 20+ messages in thread

* ✓ CI.KUnit: success for Add support for EU stall sampling
  2024-09-09  7:36 [PATCH v3 0/1] Add support for EU stall sampling Harish Chegondi
                   ` (3 preceding siblings ...)
  2024-09-10  6:33 ` ✗ CI.checkpatch: warning " Patchwork
@ 2024-09-10  6:34 ` Patchwork
  2024-09-10  6:52 ` ✓ CI.Build: " Patchwork
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2024-09-10  6:34 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

== Series Details ==

Series: Add support for EU stall sampling
URL   : https://patchwork.freedesktop.org/series/138389/
State : success

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[06:33:36] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[06:33:40] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
../lib/iomap.c:156:5: warning: no previous prototype for ‘ioread64_lo_hi’ [-Wmissing-prototypes]
  156 | u64 ioread64_lo_hi(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~
../lib/iomap.c:163:5: warning: no previous prototype for ‘ioread64_hi_lo’ [-Wmissing-prototypes]
  163 | u64 ioread64_hi_lo(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~
../lib/iomap.c:170:5: warning: no previous prototype for ‘ioread64be_lo_hi’ [-Wmissing-prototypes]
  170 | u64 ioread64be_lo_hi(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~~~
../lib/iomap.c:178:5: warning: no previous prototype for ‘ioread64be_hi_lo’ [-Wmissing-prototypes]
  178 | u64 ioread64be_hi_lo(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~~~
../lib/iomap.c:264:6: warning: no previous prototype for ‘iowrite64_lo_hi’ [-Wmissing-prototypes]
  264 | void iowrite64_lo_hi(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~
../lib/iomap.c:272:6: warning: no previous prototype for ‘iowrite64_hi_lo’ [-Wmissing-prototypes]
  272 | void iowrite64_hi_lo(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~
../lib/iomap.c:280:6: warning: no previous prototype for ‘iowrite64be_lo_hi’ [-Wmissing-prototypes]
  280 | void iowrite64be_lo_hi(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~~~
../lib/iomap.c:288:6: warning: no previous prototype for ‘iowrite64be_hi_lo’ [-Wmissing-prototypes]
  288 | void iowrite64be_hi_lo(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~~~

[06:34:07] Starting KUnit Kernel (1/1)...
[06:34:07] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[06:34:07] =================== guc_dbm (7 subtests) ===================
[06:34:07] [PASSED] test_empty
[06:34:07] [PASSED] test_default
[06:34:07] ======================== test_size  ========================
[06:34:07] [PASSED] 4
[06:34:07] [PASSED] 8
[06:34:07] [PASSED] 32
[06:34:07] [PASSED] 256
[06:34:07] ==================== [PASSED] test_size ====================
[06:34:07] ======================= test_reuse  ========================
[06:34:07] [PASSED] 4
[06:34:07] [PASSED] 8
[06:34:07] [PASSED] 32
[06:34:07] [PASSED] 256
[06:34:07] =================== [PASSED] test_reuse ====================
[06:34:07] =================== test_range_overlap  ====================
[06:34:07] [PASSED] 4
[06:34:07] [PASSED] 8
[06:34:07] [PASSED] 32
[06:34:07] [PASSED] 256
[06:34:07] =============== [PASSED] test_range_overlap ================
[06:34:07] =================== test_range_compact  ====================
[06:34:07] [PASSED] 4
[06:34:07] [PASSED] 8
[06:34:07] [PASSED] 32
[06:34:07] [PASSED] 256
[06:34:07] =============== [PASSED] test_range_compact ================
[06:34:07] ==================== test_range_spare  =====================
[06:34:07] [PASSED] 4
[06:34:07] [PASSED] 8
[06:34:07] [PASSED] 32
[06:34:07] [PASSED] 256
[06:34:07] ================ [PASSED] test_range_spare =================
[06:34:07] ===================== [PASSED] guc_dbm =====================
[06:34:07] =================== guc_idm (6 subtests) ===================
[06:34:07] [PASSED] bad_init
[06:34:07] [PASSED] no_init
[06:34:07] [PASSED] init_fini
[06:34:07] [PASSED] check_used
[06:34:07] [PASSED] check_quota
[06:34:07] [PASSED] check_all
[06:34:07] ===================== [PASSED] guc_idm =====================
[06:34:07] ================== no_relay (3 subtests) ===================
[06:34:07] [PASSED] xe_drops_guc2pf_if_not_ready
[06:34:07] [PASSED] xe_drops_guc2vf_if_not_ready
[06:34:07] [PASSED] xe_rejects_send_if_not_ready
[06:34:07] ==================== [PASSED] no_relay =====================
[06:34:07] ================== pf_relay (14 subtests) ==================
[06:34:07] [PASSED] pf_rejects_guc2pf_too_short
[06:34:07] [PASSED] pf_rejects_guc2pf_too_long
[06:34:07] [PASSED] pf_rejects_guc2pf_no_payload
[06:34:07] [PASSED] pf_fails_no_payload
[06:34:07] [PASSED] pf_fails_bad_origin
[06:34:07] [PASSED] pf_fails_bad_type
[06:34:07] [PASSED] pf_txn_reports_error
[06:34:07] [PASSED] pf_txn_sends_pf2guc
[06:34:07] [PASSED] pf_sends_pf2guc
[06:34:07] [SKIPPED] pf_loopback_nop
[06:34:07] [SKIPPED] pf_loopback_echo
[06:34:07] [SKIPPED] pf_loopback_fail
[06:34:07] [SKIPPED] pf_loopback_busy
[06:34:07] [SKIPPED] pf_loopback_retry
[06:34:07] ==================== [PASSED] pf_relay =====================
[06:34:07] ================== vf_relay (3 subtests) ===================
[06:34:07] [PASSED] vf_rejects_guc2vf_too_short
[06:34:07] [PASSED] vf_rejects_guc2vf_too_long
[06:34:07] [PASSED] vf_rejects_guc2vf_no_payload
[06:34:07] ==================== [PASSED] vf_relay =====================
[06:34:07] ================= pf_service (11 subtests) =================
[06:34:07] [PASSED] pf_negotiate_any
[06:34:07] [PASSED] pf_negotiate_base_match
[06:34:07] [PASSED] pf_negotiate_base_newer
[06:34:07] [PASSED] pf_negotiate_base_next
[06:34:07] [SKIPPED] pf_negotiate_base_older
[06:34:07] [PASSED] pf_negotiate_base_prev
[06:34:07] [PASSED] pf_negotiate_latest_match
[06:34:07] [PASSED] pf_negotiate_latest_newer
[06:34:07] [PASSED] pf_negotiate_latest_next
[06:34:07] [SKIPPED] pf_negotiate_latest_older
[06:34:07] [SKIPPED] pf_negotiate_latest_prev
[06:34:07] =================== [PASSED] pf_service ====================
[06:34:07] ===================== lmtt (1 subtest) =====================
[06:34:07] ======================== test_ops  =========================
[06:34:07] [PASSED] 2-level
[06:34:07] [PASSED] multi-level
[06:34:07] ==================== [PASSED] test_ops =====================
[06:34:07] ====================== [PASSED] lmtt =======================
[06:34:07] =================== xe_mocs (2 subtests) ===================
[06:34:07] ================ xe_live_mocs_kernel_kunit  ================
[06:34:07] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[06:34:07] ================ xe_live_mocs_reset_kunit  =================
[06:34:07] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[06:34:07] ==================== [SKIPPED] xe_mocs =====================
[06:34:07] ================= xe_migrate (2 subtests) ==================
[06:34:07] ================= xe_migrate_sanity_kunit  =================
[06:34:07] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[06:34:07] ================== xe_validate_ccs_kunit  ==================
[06:34:07] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[06:34:07] =================== [SKIPPED] xe_migrate ===================
[06:34:07] ================== xe_dma_buf (1 subtest) ==================
[06:34:07] ==================== xe_dma_buf_kunit  =====================
[06:34:07] ================ [SKIPPED] xe_dma_buf_kunit ================
[06:34:07] =================== [SKIPPED] xe_dma_buf ===================
[06:34:07] ==================== xe_bo (2 subtests) ====================
[06:34:07] ================== xe_ccs_migrate_kunit  ===================
[06:34:07] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[06:34:07] ==================== xe_bo_evict_kunit  ====================
[06:34:07] =============== [SKIPPED] xe_bo_evict_kunit ================
[06:34:07] ===================== [SKIPPED] xe_bo ======================
[06:34:07] ==================== args (11 subtests) ====================
[06:34:07] [PASSED] count_args_test
[06:34:07] [PASSED] call_args_example
[06:34:07] [PASSED] call_args_test
[06:34:07] [PASSED] drop_first_arg_example
[06:34:07] [PASSED] drop_first_arg_test
[06:34:07] [PASSED] first_arg_example
[06:34:07] [PASSED] first_arg_test
[06:34:07] [PASSED] last_arg_example
[06:34:07] [PASSED] last_arg_test
[06:34:07] [PASSED] pick_arg_example
[06:34:07] [PASSED] sep_comma_example
[06:34:07] ====================== [PASSED] args =======================
[06:34:07] =================== xe_pci (2 subtests) ====================
stty: 'standard input': Inappropriate ioctl for device
[06:34:07] [PASSED] xe_gmdid_graphics_ip
[06:34:07] [PASSED] xe_gmdid_media_ip
[06:34:07] ===================== [PASSED] xe_pci ======================
[06:34:07] =================== xe_rtp (2 subtests) ====================
[06:34:07] =============== xe_rtp_process_to_sr_tests  ================
[06:34:07] [PASSED] coalesce-same-reg
[06:34:07] [PASSED] no-match-no-add
[06:34:07] [PASSED] match-or
[06:34:07] [PASSED] match-or-xfail
[06:34:07] [PASSED] no-match-no-add-multiple-rules
[06:34:07] [PASSED] two-regs-two-entries
[06:34:07] [PASSED] clr-one-set-other
[06:34:07] [PASSED] set-field
[06:34:07] [PASSED] conflict-duplicate
[06:34:07] [PASSED] conflict-not-disjoint
[06:34:07] [PASSED] conflict-reg-type
[06:34:07] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[06:34:07] ================== xe_rtp_process_tests  ===================
[06:34:07] [PASSED] active1
[06:34:07] [PASSED] active2
[06:34:07] [PASSED] active-inactive
[06:34:07] [PASSED] inactive-active
[06:34:07] [PASSED] inactive-1st_or_active-inactive
[06:34:07] [PASSED] inactive-2nd_or_active-inactive
[06:34:07] [PASSED] inactive-last_or_active-inactive
[06:34:07] [PASSED] inactive-no_or_active-inactive
[06:34:07] ============== [PASSED] xe_rtp_process_tests ===============
[06:34:07] ===================== [PASSED] xe_rtp ======================
[06:34:07] ==================== xe_wa (1 subtest) =====================
[06:34:07] ======================== xe_wa_gt  =========================
[06:34:07] [PASSED] TIGERLAKE (B0)
[06:34:07] [PASSED] DG1 (A0)
[06:34:07] [PASSED] DG1 (B0)
[06:34:07] [PASSED] ALDERLAKE_S (A0)
[06:34:07] [PASSED] ALDERLAKE_S (B0)
[06:34:07] [PASSED] ALDERLAKE_S (C0)
[06:34:07] [PASSED] ALDERLAKE_S (D0)
[06:34:07] [PASSED] ALDERLAKE_P (A0)
[06:34:07] [PASSED] ALDERLAKE_P (B0)
[06:34:07] [PASSED] ALDERLAKE_P (C0)
[06:34:07] [PASSED] ALDERLAKE_S_RPLS (D0)
[06:34:07] [PASSED] ALDERLAKE_P_RPLU (E0)
[06:34:07] [PASSED] DG2_G10 (C0)
[06:34:07] [PASSED] DG2_G11 (B1)
[06:34:07] [PASSED] DG2_G12 (A1)
[06:34:07] [PASSED] METEORLAKE (g:A0, m:A0)
[06:34:07] [PASSED] METEORLAKE (g:A0, m:A0)
[06:34:07] [PASSED] METEORLAKE (g:A0, m:A0)
[06:34:07] [PASSED] LUNARLAKE (g:A0, m:A0)
[06:34:07] [PASSED] LUNARLAKE (g:B0, m:A0)
[06:34:07] [PASSED] BATTLEMAGE (g:A0, m:A1)
[06:34:07] ==================== [PASSED] xe_wa_gt =====================
[06:34:07] ====================== [PASSED] xe_wa ======================
[06:34:07] ============================================================
[06:34:07] Testing complete. Ran 121 tests: passed: 106, skipped: 15
[06:34:07] Elapsed time: 30.624s total, 4.182s configuring, 26.172s building, 0.228s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[06:34:07] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[06:34:09] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
../lib/iomap.c:156:5: warning: no previous prototype for ‘ioread64_lo_hi’ [-Wmissing-prototypes]
  156 | u64 ioread64_lo_hi(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~
../lib/iomap.c:163:5: warning: no previous prototype for ‘ioread64_hi_lo’ [-Wmissing-prototypes]
  163 | u64 ioread64_hi_lo(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~
../lib/iomap.c:170:5: warning: no previous prototype for ‘ioread64be_lo_hi’ [-Wmissing-prototypes]
  170 | u64 ioread64be_lo_hi(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~~~
../lib/iomap.c:178:5: warning: no previous prototype for ‘ioread64be_hi_lo’ [-Wmissing-prototypes]
  178 | u64 ioread64be_hi_lo(const void __iomem *addr)
      |     ^~~~~~~~~~~~~~~~
../lib/iomap.c:264:6: warning: no previous prototype for ‘iowrite64_lo_hi’ [-Wmissing-prototypes]
  264 | void iowrite64_lo_hi(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~
../lib/iomap.c:272:6: warning: no previous prototype for ‘iowrite64_hi_lo’ [-Wmissing-prototypes]
  272 | void iowrite64_hi_lo(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~
../lib/iomap.c:280:6: warning: no previous prototype for ‘iowrite64be_lo_hi’ [-Wmissing-prototypes]
  280 | void iowrite64be_lo_hi(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~~~
../lib/iomap.c:288:6: warning: no previous prototype for ‘iowrite64be_hi_lo’ [-Wmissing-prototypes]
  288 | void iowrite64be_hi_lo(u64 val, void __iomem *addr)
      |      ^~~~~~~~~~~~~~~~~

[06:34:31] Starting KUnit Kernel (1/1)...
[06:34:31] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[06:34:31] ============ drm_test_pick_cmdline (2 subtests) ============
[06:34:31] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[06:34:31] =============== drm_test_pick_cmdline_named  ===============
[06:34:31] [PASSED] NTSC
[06:34:31] [PASSED] NTSC-J
[06:34:31] [PASSED] PAL
[06:34:31] [PASSED] PAL-M
[06:34:31] =========== [PASSED] drm_test_pick_cmdline_named ===========
[06:34:31] ============== [PASSED] drm_test_pick_cmdline ==============
[06:34:31] ================== drm_buddy (7 subtests) ==================
[06:34:31] [PASSED] drm_test_buddy_alloc_limit
[06:34:31] [PASSED] drm_test_buddy_alloc_optimistic
[06:34:31] [PASSED] drm_test_buddy_alloc_pessimistic
[06:34:31] [PASSED] drm_test_buddy_alloc_pathological
[06:34:31] [PASSED] drm_test_buddy_alloc_contiguous
[06:34:31] [PASSED] drm_test_buddy_alloc_clear
[06:34:31] [PASSED] drm_test_buddy_alloc_range_bias
[06:34:31] ==================== [PASSED] drm_buddy ====================
[06:34:31] ============= drm_cmdline_parser (40 subtests) =============
[06:34:31] [PASSED] drm_test_cmdline_force_d_only
[06:34:31] [PASSED] drm_test_cmdline_force_D_only_dvi
[06:34:31] [PASSED] drm_test_cmdline_force_D_only_hdmi
[06:34:31] [PASSED] drm_test_cmdline_force_D_only_not_digital
[06:34:31] [PASSED] drm_test_cmdline_force_e_only
[06:34:31] [PASSED] drm_test_cmdline_res
[06:34:31] [PASSED] drm_test_cmdline_res_vesa
[06:34:31] [PASSED] drm_test_cmdline_res_vesa_rblank
[06:34:31] [PASSED] drm_test_cmdline_res_rblank
[06:34:31] [PASSED] drm_test_cmdline_res_bpp
[06:34:31] [PASSED] drm_test_cmdline_res_refresh
[06:34:31] [PASSED] drm_test_cmdline_res_bpp_refresh
[06:34:31] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[06:34:31] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[06:34:31] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[06:34:31] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[06:34:31] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[06:34:31] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[06:34:31] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[06:34:31] [PASSED] drm_test_cmdline_res_margins_force_on
[06:34:31] [PASSED] drm_test_cmdline_res_vesa_margins
[06:34:31] [PASSED] drm_test_cmdline_name
[06:34:31] [PASSED] drm_test_cmdline_name_bpp
[06:34:31] [PASSED] drm_test_cmdline_name_option
[06:34:31] [PASSED] drm_test_cmdline_name_bpp_option
[06:34:31] [PASSED] drm_test_cmdline_rotate_0
[06:34:31] [PASSED] drm_test_cmdline_rotate_90
[06:34:31] [PASSED] drm_test_cmdline_rotate_180
[06:34:31] [PASSED] drm_test_cmdline_rotate_270
[06:34:31] [PASSED] drm_test_cmdline_hmirror
[06:34:31] [PASSED] drm_test_cmdline_vmirror
[06:34:31] [PASSED] drm_test_cmdline_margin_options
[06:34:31] [PASSED] drm_test_cmdline_multiple_options
[06:34:31] [PASSED] drm_test_cmdline_bpp_extra_and_option
[06:34:31] [PASSED] drm_test_cmdline_extra_and_option
[06:34:31] [PASSED] drm_test_cmdline_freestanding_options
[06:34:31] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[06:34:31] [PASSED] drm_test_cmdline_panel_orientation
[06:34:31] ================ drm_test_cmdline_invalid  =================
[06:34:31] [PASSED] margin_only
[06:34:31] [PASSED] interlace_only
[06:34:31] [PASSED] res_missing_x
[06:34:31] [PASSED] res_missing_y
[06:34:31] [PASSED] res_bad_y
[06:34:31] [PASSED] res_missing_y_bpp
[06:34:31] [PASSED] res_bad_bpp
[06:34:31] [PASSED] res_bad_refresh
[06:34:31] [PASSED] res_bpp_refresh_force_on_off
[06:34:31] [PASSED] res_invalid_mode
[06:34:31] [PASSED] res_bpp_wrong_place_mode
[06:34:31] [PASSED] name_bpp_refresh
[06:34:31] [PASSED] name_refresh
[06:34:31] [PASSED] name_refresh_wrong_mode
[06:34:31] [PASSED] name_refresh_invalid_mode
[06:34:31] [PASSED] rotate_multiple
[06:34:31] [PASSED] rotate_invalid_val
[06:34:31] [PASSED] rotate_truncated
[06:34:31] [PASSED] invalid_option
[06:34:31] [PASSED] invalid_tv_option
[06:34:31] [PASSED] truncated_tv_option
[06:34:31] ============ [PASSED] drm_test_cmdline_invalid =============
[06:34:31] =============== drm_test_cmdline_tv_options  ===============
[06:34:31] [PASSED] NTSC
[06:34:31] [PASSED] NTSC_443
[06:34:31] [PASSED] NTSC_J
[06:34:31] [PASSED] PAL
[06:34:31] [PASSED] PAL_M
[06:34:31] [PASSED] PAL_N
[06:34:31] [PASSED] SECAM
[06:34:31] [PASSED] MONO_525
[06:34:31] [PASSED] MONO_625
[06:34:31] =========== [PASSED] drm_test_cmdline_tv_options ===========
[06:34:31] =============== [PASSED] drm_cmdline_parser ================
[06:34:31] ========== drmm_connector_hdmi_init (19 subtests) ==========
[06:34:31] [PASSED] drm_test_connector_hdmi_init_valid
[06:34:31] [PASSED] drm_test_connector_hdmi_init_bpc_8
[06:34:31] [PASSED] drm_test_connector_hdmi_init_bpc_10
[06:34:31] [PASSED] drm_test_connector_hdmi_init_bpc_12
[06:34:31] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[06:34:31] [PASSED] drm_test_connector_hdmi_init_bpc_null
[06:34:31] [PASSED] drm_test_connector_hdmi_init_formats_empty
[06:34:31] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[06:34:31] [PASSED] drm_test_connector_hdmi_init_null_ddc
[06:34:31] [PASSED] drm_test_connector_hdmi_init_null_product
[06:34:31] [PASSED] drm_test_connector_hdmi_init_null_vendor
[06:34:31] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[06:34:31] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[06:34:31] [PASSED] drm_test_connector_hdmi_init_product_valid
[06:34:31] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[06:34:31] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[06:34:31] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[06:34:31] ========= drm_test_connector_hdmi_init_type_valid  =========
[06:34:31] [PASSED] HDMI-A
[06:34:31] [PASSED] HDMI-B
[06:34:31] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[06:34:31] ======== drm_test_connector_hdmi_init_type_invalid  ========
[06:34:31] [PASSED] Unknown
[06:34:31] [PASSED] VGA
[06:34:31] [PASSED] DVI-I
[06:34:31] [PASSED] DVI-D
[06:34:31] [PASSED] DVI-A
[06:34:31] [PASSED] Composite
[06:34:31] [PASSED] SVIDEO
[06:34:31] [PASSED] LVDS
[06:34:31] [PASSED] Component
[06:34:31] [PASSED] DIN
[06:34:31] [PASSED] DP
[06:34:31] [PASSED] TV
[06:34:31] [PASSED] eDP
[06:34:31] [PASSED] Virtual
[06:34:31] [PASSED] DSI
[06:34:31] [PASSED] DPI
[06:34:31] [PASSED] Writeback
[06:34:31] [PASSED] SPI
[06:34:31] [PASSED] USB
[06:34:31] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[06:34:31] ============ [PASSED] drmm_connector_hdmi_init =============
[06:34:31] ============= drmm_connector_init (3 subtests) =============
[06:34:31] [PASSED] drm_test_drmm_connector_init
[06:34:31] [PASSED] drm_test_drmm_connector_init_null_ddc
[06:34:31] ========= drm_test_drmm_connector_init_type_valid  =========
[06:34:31] [PASSED] Unknown
[06:34:31] [PASSED] VGA
[06:34:31] [PASSED] DVI-I
[06:34:31] [PASSED] DVI-D
[06:34:31] [PASSED] DVI-A
[06:34:31] [PASSED] Composite
[06:34:31] [PASSED] SVIDEO
[06:34:31] [PASSED] LVDS
[06:34:31] [PASSED] Component
[06:34:31] [PASSED] DIN
[06:34:31] [PASSED] DP
[06:34:31] [PASSED] HDMI-A
[06:34:31] [PASSED] HDMI-B
[06:34:31] [PASSED] TV
[06:34:31] [PASSED] eDP
[06:34:31] [PASSED] Virtual
[06:34:31] [PASSED] DSI
[06:34:31] [PASSED] DPI
[06:34:31] [PASSED] Writeback
[06:34:31] [PASSED] SPI
[06:34:31] [PASSED] USB
[06:34:31] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[06:34:31] =============== [PASSED] drmm_connector_init ===============
[06:34:31] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[06:34:31] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[06:34:31] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[06:34:31] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[06:34:31] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[06:34:31] ========== drm_test_get_tv_mode_from_name_valid  ===========
[06:34:31] [PASSED] NTSC
[06:34:31] [PASSED] NTSC-443
[06:34:31] [PASSED] NTSC-J
[06:34:31] [PASSED] PAL
[06:34:31] [PASSED] PAL-M
[06:34:31] [PASSED] PAL-N
[06:34:31] [PASSED] SECAM
[06:34:31] [PASSED] Mono
[06:34:31] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[06:34:31] [PASSED] drm_test_get_tv_mode_from_name_truncated
[06:34:31] ============ [PASSED] drm_get_tv_mode_from_name ============
[06:34:31] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[06:34:31] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[06:34:31] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[06:34:31] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[06:34:31] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[06:34:31] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[06:34:31] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[06:34:31] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid  =
[06:34:31] [PASSED] VIC 96
[06:34:31] [PASSED] VIC 97
[06:34:31] [PASSED] VIC 101
[06:34:31] [PASSED] VIC 102
[06:34:31] [PASSED] VIC 106
[06:34:31] [PASSED] VIC 107
[06:34:31] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[06:34:31] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[06:34:31] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[06:34:31] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[06:34:31] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[06:34:31] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[06:34:31] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[06:34:31] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[06:34:31] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name  ====
[06:34:31] [PASSED] Automatic
[06:34:31] [PASSED] Full
[06:34:31] [PASSED] Limited 16:235
[06:34:31] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[06:34:31] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[06:34:31] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[06:34:31] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[06:34:31] === drm_test_drm_hdmi_connector_get_output_format_name  ====
[06:34:31] [PASSED] RGB
[06:34:31] [PASSED] YUV 4:2:0
[06:34:31] [PASSED] YUV 4:2:2
[06:34:31] [PASSED] YUV 4:4:4
[06:34:31] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[06:34:31] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[06:34:31] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[06:34:31] ============= drm_damage_helper (21 subtests) ==============
[06:34:31] [PASSED] drm_test_damage_iter_no_damage
[06:34:31] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[06:34:31] [PASSED] drm_test_damage_iter_no_damage_src_moved
[06:34:31] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[06:34:31] [PASSED] drm_test_damage_iter_no_damage_not_visible
[06:34:31] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[06:34:31] [PASSED] drm_test_damage_iter_no_damage_no_fb
[06:34:31] [PASSED] drm_test_damage_iter_simple_damage
[06:34:31] [PASSED] drm_test_damage_iter_single_damage
[06:34:31] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[06:34:31] [PASSED] drm_test_damage_iter_single_damage_outside_src
[06:34:31] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[06:34:31] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[06:34:31] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[06:34:31] [PASSED] drm_test_damage_iter_single_damage_src_moved
[06:34:31] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[06:34:31] [PASSED] drm_test_damage_iter_damage
[06:34:31] [PASSED] drm_test_damage_iter_damage_one_intersect
[06:34:31] [PASSED] drm_test_damage_iter_damage_one_outside
[06:34:31] [PASSED] drm_test_damage_iter_damage_src_moved
[06:34:31] [PASSED] drm_test_damage_iter_damage_not_visible
[06:34:31] ================ [PASSED] drm_damage_helper ================
[06:34:31] ============== drm_dp_mst_helper (3 subtests) ==============
[06:34:31] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[06:34:31] [PASSED] Clock 154000 BPP 30 DSC disabled
[06:34:31] [PASSED] Clock 234000 BPP 30 DSC disabled
[06:34:31] [PASSED] Clock 297000 BPP 24 DSC disabled
[06:34:31] [PASSED] Clock 332880 BPP 24 DSC enabled
[06:34:31] [PASSED] Clock 324540 BPP 24 DSC enabled
[06:34:31] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[06:34:31] ============== drm_test_dp_mst_calc_pbn_div  ===============
[06:34:31] [PASSED] Link rate 2000000 lane count 4
[06:34:31] [PASSED] Link rate 2000000 lane count 2
[06:34:31] [PASSED] Link rate 2000000 lane count 1
[06:34:31] [PASSED] Link rate 1350000 lane count 4
[06:34:31] [PASSED] Link rate 1350000 lane count 2
[06:34:31] [PASSED] Link rate 1350000 lane count 1
[06:34:31] [PASSED] Link rate 1000000 lane count 4
[06:34:31] [PASSED] Link rate 1000000 lane count 2
[06:34:31] [PASSED] Link rate 1000000 lane count 1
[06:34:31] [PASSED] Link rate 810000 lane count 4
[06:34:31] [PASSED] Link rate 810000 lane count 2
[06:34:31] [PASSED] Link rate 810000 lane count 1
[06:34:31] [PASSED] Link rate 540000 lane count 4
[06:34:31] [PASSED] Link rate 540000 lane count 2
[06:34:31] [PASSED] Link rate 540000 lane count 1
[06:34:31] [PASSED] Link rate 270000 lane count 4
[06:34:31] [PASSED] Link rate 270000 lane count 2
[06:34:31] [PASSED] Link rate 270000 lane count 1
[06:34:31] [PASSED] Link rate 162000 lane count 4
[06:34:31] [PASSED] Link rate 162000 lane count 2
[06:34:31] [PASSED] Link rate 162000 lane count 1
[06:34:31] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[06:34:31] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[06:34:31] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[06:34:31] [PASSED] DP_POWER_UP_PHY with port number
[06:34:31] [PASSED] DP_POWER_DOWN_PHY with port number
[06:34:31] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[06:34:31] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[06:34:31] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[06:34:31] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[06:34:31] [PASSED] DP_QUERY_PAYLOAD with port number
[06:34:31] [PASSED] DP_QUERY_PAYLOAD with VCPI
[06:34:31] [PASSED] DP_REMOTE_DPCD_READ with port number
[06:34:31] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[06:34:31] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[06:34:31] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[06:34:31] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[06:34:31] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[06:34:31] [PASSED] DP_REMOTE_I2C_READ with port number
[06:34:31] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[06:34:31] [PASSED] DP_REMOTE_I2C_READ with transactions array
[06:34:31] [PASSED] DP_REMOTE_I2C_WRITE with port number
[06:34:31] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[06:34:31] [PASSED] DP_REMOTE_I2C_WRITE with data array
[06:34:31] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[06:34:31] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[06:34:31] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[06:34:31] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[06:34:31] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[06:34:31] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[06:34:31] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[06:34:31] ================ [PASSED] drm_dp_mst_helper ================
[06:34:31] ================== drm_exec (7 subtests) ===================
[06:34:31] [PASSED] sanitycheck
[06:34:31] [PASSED] test_lock
[06:34:31] [PASSED] test_lock_unlock
[06:34:31] [PASSED] test_duplicates
[06:34:31] [PASSED] test_prepare
[06:34:31] [PASSED] test_prepare_array
[06:34:31] [PASSED] test_multiple_loops
[06:34:31] ==================== [PASSED] drm_exec =====================
[06:34:31] =========== drm_format_helper_test (17 subtests) ===========
[06:34:31] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[06:34:31] [PASSED] single_pixel_source_buffer
[06:34:31] [PASSED] single_pixel_clip_rectangle
[06:34:31] [PASSED] well_known_colors
[06:34:31] [PASSED] destination_pitch
[06:34:31] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[06:34:31] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[06:34:31] [PASSED] single_pixel_source_buffer
[06:34:31] [PASSED] single_pixel_clip_rectangle
[06:34:31] [PASSED] well_known_colors
[06:34:31] [PASSED] destination_pitch
[06:34:31] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[06:34:31] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[06:34:31] [PASSED] single_pixel_source_buffer
[06:34:31] [PASSED] single_pixel_clip_rectangle
[06:34:31] [PASSED] well_known_colors
[06:34:31] [PASSED] destination_pitch
[06:34:31] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[06:34:31] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[06:34:31] [PASSED] single_pixel_source_buffer
[06:34:31] [PASSED] single_pixel_clip_rectangle
[06:34:31] [PASSED] well_known_colors
[06:34:31] [PASSED] destination_pitch
[06:34:31] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[06:34:31] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[06:34:31] [PASSED] single_pixel_source_buffer
[06:34:31] [PASSED] single_pixel_clip_rectangle
[06:34:31] [PASSED] well_known_colors
[06:34:31] [PASSED] destination_pitch
[06:34:31] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[06:34:31] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[06:34:31] [PASSED] single_pixel_source_buffer
[06:34:31] [PASSED] single_pixel_clip_rectangle
[06:34:31] [PASSED] well_known_colors
[06:34:31] [PASSED] destination_pitch
[06:34:31] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[06:34:31] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[06:34:31] [PASSED] single_pixel_source_buffer
[06:34:31] [PASSED] single_pixel_clip_rectangle
[06:34:31] [PASSED] well_known_colors
[06:34:31] [PASSED] destination_pitch
[06:34:31] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[06:34:31] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[06:34:31] [PASSED] single_pixel_source_buffer
[06:34:31] [PASSED] single_pixel_clip_rectangle
[06:34:31] [PASSED] well_known_colors
[06:34:31] [PASSED] destination_pitch
[06:34:31] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[06:34:31] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[06:34:31] [PASSED] single_pixel_source_buffer
[06:34:31] [PASSED] single_pixel_clip_rectangle
[06:34:31] [PASSED] well_known_colors
[06:34:31] [PASSED] destination_pitch
[06:34:31] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[06:34:31] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[06:34:31] [PASSED] single_pixel_source_buffer
[06:34:31] [PASSED] single_pixel_clip_rectangle
[06:34:31] [PASSED] well_known_colors
[06:34:31] [PASSED] destination_pitch
[06:34:31] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[06:34:31] ============== drm_test_fb_xrgb8888_to_mono  ===============
[06:34:31] [PASSED] single_pixel_source_buffer
[06:34:31] [PASSED] single_pixel_clip_rectangle
[06:34:31] [PASSED] well_known_colors
[06:34:31] [PASSED] destination_pitch
[06:34:31] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[06:34:31] ==================== drm_test_fb_swab  =====================
[06:34:31] [PASSED] single_pixel_source_buffer
[06:34:31] [PASSED] single_pixel_clip_rectangle
[06:34:31] [PASSED] well_known_colors
[06:34:31] [PASSED] destination_pitch
[06:34:31] ================ [PASSED] drm_test_fb_swab =================
[06:34:31] ============ drm_test_fb_xrgb8888_to_xbgr8888  =============
[06:34:31] [PASSED] single_pixel_source_buffer
[06:34:31] [PASSED] single_pixel_clip_rectangle
[06:34:31] [PASSED] well_known_colors
[06:34:31] [PASSED] destination_pitch
[06:34:31] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[06:34:31] ============ drm_test_fb_xrgb8888_to_abgr8888  =============
[06:34:31] [PASSED] single_pixel_source_buffer
[06:34:31] [PASSED] single_pixel_clip_rectangle
[06:34:31] [PASSED] well_known_colors
[06:34:31] [PASSED] destination_pitch
[06:34:31] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[06:34:31] ================= drm_test_fb_clip_offset  =================
[06:34:31] [PASSED] pass through
[06:34:31] [PASSED] horizontal offset
[06:34:31] [PASSED] vertical offset
[06:34:31] [PASSED] horizontal and vertical offset
[06:34:31] [PASSED] horizontal offset (custom pitch)
[06:34:31] [PASSED] vertical offset (custom pitch)
[06:34:31] [PASSED] horizontal and vertical offset (custom pitch)
[06:34:31] ============= [PASSED] drm_test_fb_clip_offset =============
[06:34:31] ============== drm_test_fb_build_fourcc_list  ==============
[06:34:31] [PASSED] no native formats
[06:34:31] [PASSED] XRGB8888 as native format
[06:34:31] [PASSED] remove duplicates
[06:34:31] [PASSED] convert alpha formats
[06:34:31] [PASSED] random formats
[06:34:31] ========== [PASSED] drm_test_fb_build_fourcc_list ==========
[06:34:31] =================== drm_test_fb_memcpy  ====================
[06:34:31] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[06:34:31] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[06:34:31] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[06:34:31] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[06:34:31] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[06:34:31] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[06:34:31] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[06:34:31] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[06:34:31] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[06:34:31] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[06:34:31] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[06:34:31] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[06:34:31] =============== [PASSED] drm_test_fb_memcpy ================
[06:34:31] ============= [PASSED] drm_format_helper_test ==============
[06:34:31] ================= drm_format (18 subtests) =================
[06:34:31] [PASSED] drm_test_format_block_width_invalid
[06:34:31] [PASSED] drm_test_format_block_width_one_plane
[06:34:31] [PASSED] drm_test_format_block_width_two_plane
[06:34:31] [PASSED] drm_test_format_block_width_three_plane
[06:34:31] [PASSED] drm_test_format_block_width_tiled
[06:34:31] [PASSED] drm_test_format_block_height_invalid
[06:34:31] [PASSED] drm_test_format_block_height_one_plane
[06:34:31] [PASSED] drm_test_format_block_height_two_plane
[06:34:31] [PASSED] drm_test_format_block_height_three_plane
[06:34:31] [PASSED] drm_test_format_block_height_tiled
[06:34:31] [PASSED] drm_test_format_min_pitch_invalid
[06:34:31] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[06:34:31] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[06:34:31] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[06:34:31] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[06:34:31] [PASSED] drm_test_format_min_pitch_two_plane
[06:34:31] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[06:34:31] [PASSED] drm_test_format_min_pitch_tiled
[06:34:31] =================== [PASSED] drm_format ====================
[06:34:31] =============== drm_framebuffer (1 subtest) ================
[06:34:31] =============== drm_test_framebuffer_create  ===============
[06:34:31] [PASSED] ABGR8888 normal sizes
[06:34:31] [PASSED] ABGR8888 max sizes
[06:34:31] [PASSED] ABGR8888 pitch greater than min required
[06:34:31] [PASSED] ABGR8888 pitch less than min required
[06:34:31] [PASSED] ABGR8888 Invalid width
[06:34:31] [PASSED] ABGR8888 Invalid buffer handle
[06:34:31] [PASSED] No pixel format
[06:34:31] [PASSED] ABGR8888 Width 0
[06:34:31] [PASSED] ABGR8888 Height 0
[06:34:31] [PASSED] ABGR8888 Out of bound height * pitch combination
[06:34:31] [PASSED] ABGR8888 Large buffer offset
[06:34:31] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[06:34:31] [PASSED] ABGR8888 Valid buffer modifier
[06:34:31] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[06:34:31] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[06:34:31] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[06:34:31] [PASSED] NV12 Normal sizes
[06:34:31] [PASSED] NV12 Max sizes
[06:34:31] [PASSED] NV12 Invalid pitch
[06:34:31] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[06:34:31] [PASSED] NV12 different  modifier per-plane
[06:34:31] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[06:34:31] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[06:34:31] [PASSED] NV12 Modifier for inexistent plane
[06:34:31] [PASSED] NV12 Handle for inexistent plane
[06:34:31] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[06:34:31] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[06:34:31] [PASSED] YVU420 Normal sizes
[06:34:31] [PASSED] YVU420 Max sizes
[06:34:31] [PASSED] YVU420 Invalid pitch
[06:34:31] [PASSED] YVU420 Different pitches
[06:34:31] [PASSED] YVU420 Different buffer offsets/pitches
[06:34:31] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[06:34:31] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[06:34:31] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[06:34:31] [PASSED] YVU420 Valid modifier
[06:34:31] [PASSED] YVU420 Different modifiers per plane
[06:34:31] [PASSED] YVU420 Modifier for inexistent plane
[06:34:31] [PASSED] X0L2 Normal sizes
[06:34:31] [PASSED] X0L2 Max sizes
[06:34:31] [PASSED] X0L2 Invalid pitch
[06:34:31] [PASSED] X0L2 Pitch greater than minimum required
[06:34:31] [PASSED] X0L2 Handle for inexistent plane
[06:34:31] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[06:34:31] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[06:34:31] [PASSED] X0L2 Valid modifier
[06:34:31] [PASSED] X0L2 Modifier for inexistent plane
[06:34:31] =========== [PASSED] drm_test_framebuffer_create ===========
[06:34:31] ================= [PASSED] drm_framebuffer =================
[06:34:31] ================ drm_gem_shmem (8 subtests) ================
[06:34:31] [PASSED] drm_gem_shmem_test_obj_create
[06:34:31] [PASSED] drm_gem_shmem_test_obj_create_private
[06:34:31] [PASSED] drm_gem_shmem_test_pin_pages
[06:34:31] [PASSED] drm_gem_shmem_test_vmap
[06:34:31] [PASSED] drm_gem_shmem_test_get_pages_sgt
[06:34:31] [PASSED] drm_gem_shmem_test_get_sg_table
[06:34:31] [PASSED] drm_gem_shmem_test_madvise
[06:34:31] [PASSED] drm_gem_shmem_test_purge
[06:34:31] ================== [PASSED] drm_gem_shmem ==================
[06:34:31] === drm_atomic_helper_connector_hdmi_check (22 subtests) ===
[06:34:31] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[06:34:31] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[06:34:31] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[06:34:31] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[06:34:31] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[06:34:31] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[06:34:31] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[06:34:31] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[06:34:31] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[06:34:31] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback
[06:34:31] [PASSED] drm_test_check_max_tmds_rate_format_fallback
[06:34:31] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[06:34:31] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[06:34:31] [PASSED] drm_test_check_output_bpc_dvi
[06:34:31] [PASSED] drm_test_check_output_bpc_format_vic_1
[06:34:31] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[06:34:31] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[06:34:31] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[06:34:31] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[06:34:31] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[06:34:31] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[06:34:31] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[06:34:31] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[06:34:31] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[06:34:31] [PASSED] drm_test_check_broadcast_rgb_value
[06:34:31] [PASSED] drm_test_check_bpc_8_value
[06:34:31] [PASSED] drm_test_check_bpc_10_value
[06:34:31] [PASSED] drm_test_check_bpc_12_value
[06:34:31] [PASSED] drm_test_check_format_value
[06:34:31] [PASSED] drm_test_check_tmds_char_value
[06:34:31] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[06:34:31] ================= drm_managed (2 subtests) =================
[06:34:31] [PASSED] drm_test_managed_release_action
[06:34:31] [PASSED] drm_test_managed_run_action
[06:34:31] =================== [PASSED] drm_managed ===================
[06:34:31] =================== drm_mm (6 subtests) ====================
[06:34:31] [PASSED] drm_test_mm_init
[06:34:31] [PASSED] drm_test_mm_debug
[06:34:31] [PASSED] drm_test_mm_align32
[06:34:31] [PASSED] drm_test_mm_align64
[06:34:31] [PASSED] drm_test_mm_lowest
[06:34:31] [PASSED] drm_test_mm_highest
[06:34:31] ===================== [PASSED] drm_mm ======================
[06:34:31] ============= drm_modes_analog_tv (5 subtests) =============
[06:34:31] [PASSED] drm_test_modes_analog_tv_mono_576i
[06:34:31] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[06:34:31] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[06:34:31] [PASSED] drm_test_modes_analog_tv_pal_576i
[06:34:31] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[06:34:31] =============== [PASSED] drm_modes_analog_tv ===============
[06:34:31] ============== drm_plane_helper (2 subtests) ===============
[06:34:31] =============== drm_test_check_plane_state  ================
[06:34:31] [PASSED] clipping_simple
[06:34:31] [PASSED] clipping_rotate_reflect
[06:34:31] [PASSED] positioning_simple
[06:34:31] [PASSED] upscaling
[06:34:31] [PASSED] downscaling
[06:34:31] [PASSED] rounding1
[06:34:31] [PASSED] rounding2
[06:34:31] [PASSED] rounding3
[06:34:31] [PASSED] rounding4
[06:34:31] =========== [PASSED] drm_test_check_plane_state ============
[06:34:31] =========== drm_test_check_invalid_plane_state  ============
[06:34:31] [PASSED] positioning_invalid
[06:34:31] [PASSED] upscaling_invalid
stty: 'standard input': Inappropriate ioctl for device
[06:34:31] [PASSED] downscaling_invalid
[06:34:31] ======= [PASSED] drm_test_check_invalid_plane_state ========
[06:34:31] ================ [PASSED] drm_plane_helper =================
[06:34:31] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[06:34:31] ====== drm_test_connector_helper_tv_get_modes_check  =======
[06:34:31] [PASSED] None
[06:34:31] [PASSED] PAL
[06:34:31] [PASSED] NTSC
[06:34:31] [PASSED] Both, NTSC Default
[06:34:31] [PASSED] Both, PAL Default
[06:34:31] [PASSED] Both, NTSC Default, with PAL on command-line
[06:34:31] [PASSED] Both, PAL Default, with NTSC on command-line
[06:34:31] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[06:34:31] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[06:34:31] ================== drm_rect (9 subtests) ===================
[06:34:31] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[06:34:31] [PASSED] drm_test_rect_clip_scaled_not_clipped
[06:34:31] [PASSED] drm_test_rect_clip_scaled_clipped
[06:34:31] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[06:34:31] ================= drm_test_rect_intersect  =================
[06:34:31] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[06:34:31] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[06:34:31] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[06:34:31] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[06:34:31] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[06:34:31] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[06:34:31] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[06:34:31] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[06:34:31] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[06:34:31] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[06:34:31] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[06:34:31] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[06:34:31] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[06:34:31] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[06:34:31] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[06:34:31] ============= [PASSED] drm_test_rect_intersect =============
[06:34:31] ================ drm_test_rect_calc_hscale  ================
[06:34:31] [PASSED] normal use
[06:34:31] [PASSED] out of max range
[06:34:31] [PASSED] out of min range
[06:34:31] [PASSED] zero dst
[06:34:31] [PASSED] negative src
[06:34:31] [PASSED] negative dst
[06:34:31] ============ [PASSED] drm_test_rect_calc_hscale ============
[06:34:31] ================ drm_test_rect_calc_vscale  ================
[06:34:31] [PASSED] normal use
[06:34:31] [PASSED] out of max range
[06:34:31] [PASSED] out of min range
[06:34:31] [PASSED] zero dst
[06:34:31] [PASSED] negative src
[06:34:31] [PASSED] negative dst
[06:34:31] ============ [PASSED] drm_test_rect_calc_vscale ============
[06:34:31] ================== drm_test_rect_rotate  ===================
[06:34:31] [PASSED] reflect-x
[06:34:31] [PASSED] reflect-y
[06:34:31] [PASSED] rotate-0
[06:34:31] [PASSED] rotate-90
[06:34:31] [PASSED] rotate-180
[06:34:31] [PASSED] rotate-270
[06:34:31] ============== [PASSED] drm_test_rect_rotate ===============
[06:34:31] ================ drm_test_rect_rotate_inv  =================
[06:34:31] [PASSED] reflect-x
[06:34:31] [PASSED] reflect-y
[06:34:31] [PASSED] rotate-0
[06:34:31] [PASSED] rotate-90
[06:34:31] [PASSED] rotate-180
[06:34:31] [PASSED] rotate-270
[06:34:31] ============ [PASSED] drm_test_rect_rotate_inv =============
[06:34:31] ==================== [PASSED] drm_rect =====================
[06:34:31] ============================================================
[06:34:31] Testing complete. Ran 515 tests: passed: 515
[06:34:31] Elapsed time: 23.873s total, 1.757s configuring, 21.946s building, 0.156s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[06:34:31] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[06:34:33] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
[06:34:42] Starting KUnit Kernel (1/1)...
[06:34:42] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[06:34:42] ================= ttm_device (5 subtests) ==================
[06:34:42] [PASSED] ttm_device_init_basic
[06:34:42] [PASSED] ttm_device_init_multiple
[06:34:42] [PASSED] ttm_device_fini_basic
[06:34:42] [PASSED] ttm_device_init_no_vma_man
[06:34:42] ================== ttm_device_init_pools  ==================
[06:34:42] [PASSED] No DMA allocations, no DMA32 required
[06:34:42] [PASSED] DMA allocations, DMA32 required
[06:34:42] [PASSED] No DMA allocations, DMA32 required
[06:34:42] [PASSED] DMA allocations, no DMA32 required
[06:34:42] ============== [PASSED] ttm_device_init_pools ==============
[06:34:42] =================== [PASSED] ttm_device ====================
[06:34:42] ================== ttm_pool (8 subtests) ===================
[06:34:42] ================== ttm_pool_alloc_basic  ===================
[06:34:42] [PASSED] One page
[06:34:42] [PASSED] More than one page
[06:34:42] [PASSED] Above the allocation limit
[06:34:42] [PASSED] One page, with coherent DMA mappings enabled
[06:34:42] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[06:34:42] ============== [PASSED] ttm_pool_alloc_basic ===============
[06:34:42] ============== ttm_pool_alloc_basic_dma_addr  ==============
[06:34:42] [PASSED] One page
[06:34:42] [PASSED] More than one page
[06:34:42] [PASSED] Above the allocation limit
[06:34:42] [PASSED] One page, with coherent DMA mappings enabled
[06:34:42] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[06:34:42] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[06:34:42] [PASSED] ttm_pool_alloc_order_caching_match
[06:34:42] [PASSED] ttm_pool_alloc_caching_mismatch
[06:34:42] [PASSED] ttm_pool_alloc_order_mismatch
[06:34:42] [PASSED] ttm_pool_free_dma_alloc
[06:34:42] [PASSED] ttm_pool_free_no_dma_alloc
[06:34:42] [PASSED] ttm_pool_fini_basic
[06:34:42] ==================== [PASSED] ttm_pool =====================
[06:34:42] ================ ttm_resource (8 subtests) =================
[06:34:42] ================= ttm_resource_init_basic  =================
[06:34:42] [PASSED] Init resource in TTM_PL_SYSTEM
[06:34:42] [PASSED] Init resource in TTM_PL_VRAM
[06:34:42] [PASSED] Init resource in a private placement
[06:34:42] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[06:34:42] ============= [PASSED] ttm_resource_init_basic =============
[06:34:42] [PASSED] ttm_resource_init_pinned
[06:34:42] [PASSED] ttm_resource_fini_basic
[06:34:42] [PASSED] ttm_resource_manager_init_basic
[06:34:42] [PASSED] ttm_resource_manager_usage_basic
[06:34:42] [PASSED] ttm_resource_manager_set_used_basic
[06:34:42] [PASSED] ttm_sys_man_alloc_basic
[06:34:42] [PASSED] ttm_sys_man_free_basic
[06:34:42] ================== [PASSED] ttm_resource ===================
[06:34:42] =================== ttm_tt (15 subtests) ===================
[06:34:42] ==================== ttm_tt_init_basic  ====================
[06:34:42] [PASSED] Page-aligned size
[06:34:42] [PASSED] Extra pages requested
[06:34:42] ================ [PASSED] ttm_tt_init_basic ================
[06:34:42] [PASSED] ttm_tt_init_misaligned
[06:34:42] [PASSED] ttm_tt_fini_basic
[06:34:42] [PASSED] ttm_tt_fini_sg
[06:34:42] [PASSED] ttm_tt_fini_shmem
[06:34:42] [PASSED] ttm_tt_create_basic
[06:34:42] [PASSED] ttm_tt_create_invalid_bo_type
[06:34:42] [PASSED] ttm_tt_create_ttm_exists
[06:34:42] [PASSED] ttm_tt_create_failed
[06:34:42] [PASSED] ttm_tt_destroy_basic
[06:34:42] [PASSED] ttm_tt_populate_null_ttm
[06:34:42] [PASSED] ttm_tt_populate_populated_ttm
[06:34:42] [PASSED] ttm_tt_unpopulate_basic
[06:34:42] [PASSED] ttm_tt_unpopulate_empty_ttm
[06:34:42] [PASSED] ttm_tt_swapin_basic
[06:34:42] ===================== [PASSED] ttm_tt ======================
[06:34:42] =================== ttm_bo (14 subtests) ===================
[06:34:42] =========== ttm_bo_reserve_optimistic_no_ticket  ===========
[06:34:42] [PASSED] Cannot be interrupted and sleeps
[06:34:42] [PASSED] Cannot be interrupted, locks straight away
[06:34:42] [PASSED] Can be interrupted, sleeps
[06:34:42] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[06:34:42] [PASSED] ttm_bo_reserve_locked_no_sleep
[06:34:42] [PASSED] ttm_bo_reserve_no_wait_ticket
[06:34:42] [PASSED] ttm_bo_reserve_double_resv
[06:34:42] [PASSED] ttm_bo_reserve_interrupted
[06:34:42] [PASSED] ttm_bo_reserve_deadlock
[06:34:42] [PASSED] ttm_bo_unreserve_basic
[06:34:42] [PASSED] ttm_bo_unreserve_pinned
[06:34:42] [PASSED] ttm_bo_unreserve_bulk
[06:34:42] [PASSED] ttm_bo_put_basic
[06:34:42] [PASSED] ttm_bo_put_shared_resv
[06:34:42] [PASSED] ttm_bo_pin_basic
[06:34:42] [PASSED] ttm_bo_pin_unpin_resource
[06:34:42] [PASSED] ttm_bo_multiple_pin_one_unpin
[06:34:42] ===================== [PASSED] ttm_bo ======================
[06:34:42] ============== ttm_bo_validate (22 subtests) ===============
[06:34:42] ============== ttm_bo_init_reserved_sys_man  ===============
[06:34:42] [PASSED] Buffer object for userspace
[06:34:42] [PASSED] Kernel buffer object
[06:34:42] [PASSED] Shared buffer object
[06:34:42] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[06:34:42] ============== ttm_bo_init_reserved_mock_man  ==============
[06:34:42] [PASSED] Buffer object for userspace
[06:34:42] [PASSED] Kernel buffer object
[06:34:42] [PASSED] Shared buffer object
[06:34:42] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[06:34:42] [PASSED] ttm_bo_init_reserved_resv
[06:34:42] ================== ttm_bo_validate_basic  ==================
[06:34:42] [PASSED] Buffer object for userspace
[06:34:42] [PASSED] Kernel buffer object
[06:34:42] [PASSED] Shared buffer object
[06:34:42] ============== [PASSED] ttm_bo_validate_basic ==============
[06:34:42] [PASSED] ttm_bo_validate_invalid_placement
[06:34:42] ============= ttm_bo_validate_same_placement  ==============
[06:34:42] [PASSED] System manager
[06:34:42] [PASSED] VRAM manager
[06:34:42] ========= [PASSED] ttm_bo_validate_same_placement ==========
[06:34:42] [PASSED] ttm_bo_validate_failed_alloc
[06:34:42] [PASSED] ttm_bo_validate_pinned
[06:34:42] [PASSED] ttm_bo_validate_busy_placement
[06:34:42] ================ ttm_bo_validate_multihop  =================
[06:34:42] [PASSED] Buffer object for userspace
[06:34:42] [PASSED] Kernel buffer object
[06:34:42] [PASSED] Shared buffer object
[06:34:42] ============ [PASSED] ttm_bo_validate_multihop =============
[06:34:42] ========== ttm_bo_validate_no_placement_signaled  ==========
[06:34:42] [PASSED] Buffer object in system domain, no page vector
[06:34:42] [PASSED] Buffer object in system domain with an existing page vector
[06:34:42] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[06:34:42] ======== ttm_bo_validate_no_placement_not_signaled  ========
[06:34:42] [PASSED] Buffer object for userspace
[06:34:42] [PASSED] Kernel buffer object
[06:34:42] [PASSED] Shared buffer object
[06:34:42] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[06:34:42] [PASSED] ttm_bo_validate_move_fence_signaled
[06:34:42] ========= ttm_bo_validate_move_fence_not_signaled  =========
[06:34:42] [PASSED] Waits for GPU
[06:34:42] [PASSED] Tries to lock straight away
[06:34:42] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[06:34:42] [PASSED] ttm_bo_validate_swapout
[06:34:42] [PASSED] ttm_bo_validate_happy_evict
[06:34:42] [PASSED] ttm_bo_validate_all_pinned_evict
[06:34:42] [PASSED] ttm_bo_validate_allowed_only_evict
[06:34:42] [PASSED] ttm_bo_validate_deleted_evict
[06:34:42] [PASSED] ttm_bo_validate_busy_domain_evict
[06:34:42] [PASSED] ttm_bo_validate_evict_gutting
[06:34:42] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[06:34:42] ================= [PASSED] ttm_bo_validate =================
[06:34:42] ============================================================
[06:34:42] Testing complete. Ran 102 tests: passed: 102
[06:34:42] Elapsed time: 11.284s total, 1.736s configuring, 8.876s building, 0.559s running

+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



^ permalink raw reply	[flat|nested] 20+ messages in thread

* ✓ CI.Build: success for Add support for EU stall sampling
  2024-09-09  7:36 [PATCH v3 0/1] Add support for EU stall sampling Harish Chegondi
                   ` (4 preceding siblings ...)
  2024-09-10  6:34 ` ✓ CI.KUnit: success " Patchwork
@ 2024-09-10  6:52 ` Patchwork
  2024-09-10  7:02 ` ✗ CI.Hooks: failure " Patchwork
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2024-09-10  6:52 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

== Series Details ==

Series: Add support for EU stall sampling
URL   : https://patchwork.freedesktop.org/series/138389/
State : success

== Summary ==

lib/modules/6.11.0-rc7-xe/kernel/sound/core/seq/
lib/modules/6.11.0-rc7-xe/kernel/sound/core/seq/snd-seq.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/core/snd-seq-device.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/core/snd-hwdep.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/core/snd.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/core/snd-pcm.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/core/snd-compress.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/core/snd-timer.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soundcore.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/intel/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/intel/atom/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/intel/atom/sst/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/intel/atom/sst/snd-intel-sst-acpi.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/intel/atom/sst/snd-intel-sst-core.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/intel/common/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/intel/common/snd-soc-acpi-intel-match.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/amd/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/amd/snd-acp-config.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-tgl.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-mlink.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-cnl.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-lnl.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-common.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-generic.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-mtl.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/amd/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/amd/snd-sof-amd-renoir.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/amd/snd-sof-amd-acp.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/snd-sof-utils.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/snd-sof-pci.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/snd-sof.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/snd-sof-probes.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/xtensa/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/xtensa/snd-sof-xtensa-dsp.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/snd-soc-core.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/snd-soc-acpi.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/codecs/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/codecs/snd-soc-hdac-hda.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/hda/
lib/modules/6.11.0-rc7-xe/kernel/sound/hda/snd-intel-sdw-acpi.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/hda/ext/
lib/modules/6.11.0-rc7-xe/kernel/sound/hda/ext/snd-hda-ext-core.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/hda/snd-intel-dspcfg.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/hda/snd-hda-core.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/kernel/
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/kernel/msr.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/kernel/cpuid.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/sha512-ssse3.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/crct10dif-pclmul.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/ghash-clmulni-intel.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/sha1-ssse3.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/crc32-pclmul.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/sha256-ssse3.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/aesni-intel.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/polyval-clmulni.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/events/
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/events/intel/
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/events/intel/intel-cstate.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/events/rapl.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/kvm/
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/kvm/kvm.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/kvm/kvm-intel.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/
lib/modules/6.11.0-rc7-xe/kernel/crypto/crypto_simd.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/cmac.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/ccm.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/cryptd.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/polyval-generic.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/async_tx/
lib/modules/6.11.0-rc7-xe/kernel/crypto/async_tx/async_xor.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/async_tx/async_tx.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/async_tx/async_memcpy.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/async_tx/async_pq.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/async_tx/async_raid6_recov.ko
lib/modules/6.11.0-rc7-xe/build
lib/modules/6.11.0-rc7-xe/modules.alias.bin
lib/modules/6.11.0-rc7-xe/modules.builtin
lib/modules/6.11.0-rc7-xe/modules.softdep
lib/modules/6.11.0-rc7-xe/modules.alias
lib/modules/6.11.0-rc7-xe/modules.order
lib/modules/6.11.0-rc7-xe/modules.symbols
lib/modules/6.11.0-rc7-xe/modules.dep.bin
+ mv kernel-nodebug.tar.gz ..
+ cd ..
+ rm -rf archive
++ date +%s
+ echo -e '\e[0Ksection_end:1725950779:package_x86_64_nodebug\r\e[0K'
+ sync
^[[0Ksection_end:1725950779:package_x86_64_nodebug
^[[0K
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



^ permalink raw reply	[flat|nested] 20+ messages in thread

* ✗ CI.Hooks: failure for Add support for EU stall sampling
  2024-09-09  7:36 [PATCH v3 0/1] Add support for EU stall sampling Harish Chegondi
                   ` (5 preceding siblings ...)
  2024-09-10  6:52 ` ✓ CI.Build: " Patchwork
@ 2024-09-10  7:02 ` Patchwork
  2024-09-10  7:05 ` ✓ CI.checksparse: success " Patchwork
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2024-09-10  7:02 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

== Series Details ==

Series: Add support for EU stall sampling
URL   : https://patchwork.freedesktop.org/series/138389/
State : failure

== Summary ==

run-parts: executing /workspace/ci/hooks/00-showenv
+ export
+ grep -Ei '(^|\W)CI_'
declare -x CI_KERNEL_BUILD_DIR="/workspace/kernel/build64-default"
declare -x CI_KERNEL_SRC_DIR="/workspace/kernel"
declare -x CI_TOOLS_SRC_DIR="/workspace/ci"
declare -x CI_WORKSPACE_DIR="/workspace"
run-parts: executing /workspace/ci/hooks/10-build-W1
+ SRC_DIR=/workspace/kernel
+ RESTORE_DISPLAY_CONFIG=0
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ cd /workspace/kernel
++ nproc
+ make -j48 O=/workspace/kernel/build64-default modules_prepare
make[1]: Entering directory '/workspace/kernel/build64-default'
  GEN     Makefile
  UPD     include/generated/compile.h
mkdir -p /workspace/kernel/build64-default/tools/objtool && make O=/workspace/kernel/build64-default subdir=tools/objtool --no-print-directory -C objtool 
  UPD     include/config/kernel.release
  UPD     include/generated/utsrelease.h
  HOSTCC  /workspace/kernel/build64-default/tools/objtool/fixdep.o
  CALL    ../scripts/checksyscalls.sh
  HOSTLD  /workspace/kernel/build64-default/tools/objtool/fixdep-in.o
  LINK    /workspace/kernel/build64-default/tools/objtool/fixdep
  INSTALL libsubcmd_headers
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/exec-cmd.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/help.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/pager.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/parse-options.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/run-command.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/sigchain.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/subcmd-config.o
  LD      /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd-in.o
  AR      /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd.a
  CC      /workspace/kernel/build64-default/tools/objtool/weak.o
  CC      /workspace/kernel/build64-default/tools/objtool/check.o
  CC      /workspace/kernel/build64-default/tools/objtool/special.o
  CC      /workspace/kernel/build64-default/tools/objtool/builtin-check.o
  CC      /workspace/kernel/build64-default/tools/objtool/elf.o
  CC      /workspace/kernel/build64-default/tools/objtool/objtool.o
  CC      /workspace/kernel/build64-default/tools/objtool/orc_gen.o
  CC      /workspace/kernel/build64-default/tools/objtool/orc_dump.o
  CC      /workspace/kernel/build64-default/tools/objtool/libstring.o
  CC      /workspace/kernel/build64-default/tools/objtool/libctype.o
  CC      /workspace/kernel/build64-default/tools/objtool/str_error_r.o
  CC      /workspace/kernel/build64-default/tools/objtool/librbtree.o
  CC      /workspace/kernel/build64-default/tools/objtool/arch/x86/special.o
  CC      /workspace/kernel/build64-default/tools/objtool/arch/x86/decode.o
  CC      /workspace/kernel/build64-default/tools/objtool/arch/x86/orc.o
  LD      /workspace/kernel/build64-default/tools/objtool/arch/x86/objtool-in.o
  LD      /workspace/kernel/build64-default/tools/objtool/objtool-in.o
  LINK    /workspace/kernel/build64-default/tools/objtool/objtool
make[1]: Leaving directory '/workspace/kernel/build64-default'
++ nproc
+ make -j48 O=/workspace/kernel/build64-default W=1 drivers/gpu/drm/xe
make[1]: Entering directory '/workspace/kernel/build64-default'
make[2]: Nothing to be done for 'drivers/gpu/drm/xe'.
make[1]: Leaving directory '/workspace/kernel/build64-default'
run-parts: executing /workspace/ci/hooks/11-build-32b
+++ realpath /workspace/ci/hooks/11-build-32b
++ dirname /workspace/ci/hooks/11-build-32b
+ THIS_SCRIPT_DIR=/workspace/ci/hooks
+ SRC_DIR=/workspace/kernel
+ TOOLS_SRC_DIR=/workspace/ci
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ BUILD_DIR=/workspace/kernel/build64-default/build32
+ cd /workspace/kernel
+ mkdir -p /workspace/kernel/build64-default/build32
++ nproc
+ make -j48 ARCH=i386 O=/workspace/kernel/build64-default/build32 defconfig
make[1]: Entering directory '/workspace/kernel/build64-default/build32'
  GEN     Makefile
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  LEX     scripts/kconfig/lexer.lex.c
  YACC    scripts/kconfig/parser.tab.[ch]
  HOSTCC  scripts/kconfig/menu.o
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/util.o
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTLD  scripts/kconfig/conf
*** Default configuration is based on 'i386_defconfig'
#
# configuration written to .config
#
make[1]: Leaving directory '/workspace/kernel/build64-default/build32'
+ cd /workspace/kernel/build64-default/build32
+ /workspace/kernel/scripts/kconfig/merge_config.sh .config /workspace/ci/kernel/10-xe.fragment
Using .config as base
Merging /workspace/ci/kernel/10-xe.fragment
Value of CONFIG_DRM_XE is redefined by fragment /workspace/ci/kernel/10-xe.fragment:
Previous value: # CONFIG_DRM_XE is not set
New value: CONFIG_DRM_XE=m

Value of CONFIG_SND_DEBUG is redefined by fragment /workspace/ci/kernel/10-xe.fragment:
Previous value: # CONFIG_SND_DEBUG is not set
New value: CONFIG_SND_DEBUG=y

Value of CONFIG_SND_HDA_INTEL is redefined by fragment /workspace/ci/kernel/10-xe.fragment:
Previous value: CONFIG_SND_HDA_INTEL=y
New value: CONFIG_SND_HDA_INTEL=m

Value of CONFIG_SND_HDA_CODEC_HDMI is redefined by fragment /workspace/ci/kernel/10-xe.fragment:
Previous value: # CONFIG_SND_HDA_CODEC_HDMI is not set
New value: CONFIG_SND_HDA_CODEC_HDMI=m

  GEN     Makefile

WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
  Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
  Selected by [m]:
  - DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
#
# configuration written to .config
#
Value requested for CONFIG_HAVE_UID16 not in final .config
Requested value:  CONFIG_HAVE_UID16=y
Actual value:     

Value requested for CONFIG_UID16 not in final .config
Requested value:  CONFIG_UID16=y
Actual value:     

Value requested for CONFIG_X86_32 not in final .config
Requested value:  CONFIG_X86_32=y
Actual value:     

Value requested for CONFIG_OUTPUT_FORMAT not in final .config
Requested value:  CONFIG_OUTPUT_FORMAT="elf32-i386"
Actual value:     CONFIG_OUTPUT_FORMAT="elf64-x86-64"

Value requested for CONFIG_ARCH_MMAP_RND_BITS_MIN not in final .config
Requested value:  CONFIG_ARCH_MMAP_RND_BITS_MIN=8
Actual value:     CONFIG_ARCH_MMAP_RND_BITS_MIN=28

Value requested for CONFIG_ARCH_MMAP_RND_BITS_MAX not in final .config
Requested value:  CONFIG_ARCH_MMAP_RND_BITS_MAX=16
Actual value:     CONFIG_ARCH_MMAP_RND_BITS_MAX=32

Value requested for CONFIG_PGTABLE_LEVELS not in final .config
Requested value:  CONFIG_PGTABLE_LEVELS=2
Actual value:     CONFIG_PGTABLE_LEVELS=5

Value requested for CONFIG_X86_BIGSMP not in final .config
Requested value:  # CONFIG_X86_BIGSMP is not set
Actual value:     

Value requested for CONFIG_X86_INTEL_QUARK not in final .config
Requested value:  # CONFIG_X86_INTEL_QUARK is not set
Actual value:     

Value requested for CONFIG_X86_RDC321X not in final .config
Requested value:  # CONFIG_X86_RDC321X is not set
Actual value:     

Value requested for CONFIG_X86_32_NON_STANDARD not in final .config
Requested value:  # CONFIG_X86_32_NON_STANDARD is not set
Actual value:     

Value requested for CONFIG_X86_32_IRIS not in final .config
Requested value:  # CONFIG_X86_32_IRIS is not set
Actual value:     

Value requested for CONFIG_M486SX not in final .config
Requested value:  # CONFIG_M486SX is not set
Actual value:     

Value requested for CONFIG_M486 not in final .config
Requested value:  # CONFIG_M486 is not set
Actual value:     

Value requested for CONFIG_M586 not in final .config
Requested value:  # CONFIG_M586 is not set
Actual value:     

Value requested for CONFIG_M586TSC not in final .config
Requested value:  # CONFIG_M586TSC is not set
Actual value:     

Value requested for CONFIG_M586MMX not in final .config
Requested value:  # CONFIG_M586MMX is not set
Actual value:     

Value requested for CONFIG_M686 not in final .config
Requested value:  CONFIG_M686=y
Actual value:     

Value requested for CONFIG_MPENTIUMII not in final .config
Requested value:  # CONFIG_MPENTIUMII is not set
Actual value:     

Value requested for CONFIG_MPENTIUMIII not in final .config
Requested value:  # CONFIG_MPENTIUMIII is not set
Actual value:     

Value requested for CONFIG_MPENTIUMM not in final .config
Requested value:  # CONFIG_MPENTIUMM is not set
Actual value:     

Value requested for CONFIG_MPENTIUM4 not in final .config
Requested value:  # CONFIG_MPENTIUM4 is not set
Actual value:     

Value requested for CONFIG_MK6 not in final .config
Requested value:  # CONFIG_MK6 is not set
Actual value:     

Value requested for CONFIG_MK7 not in final .config
Requested value:  # CONFIG_MK7 is not set
Actual value:     

Value requested for CONFIG_MCRUSOE not in final .config
Requested value:  # CONFIG_MCRUSOE is not set
Actual value:     

Value requested for CONFIG_MEFFICEON not in final .config
Requested value:  # CONFIG_MEFFICEON is not set
Actual value:     

Value requested for CONFIG_MWINCHIPC6 not in final .config
Requested value:  # CONFIG_MWINCHIPC6 is not set
Actual value:     

Value requested for CONFIG_MWINCHIP3D not in final .config
Requested value:  # CONFIG_MWINCHIP3D is not set
Actual value:     

Value requested for CONFIG_MELAN not in final .config
Requested value:  # CONFIG_MELAN is not set
Actual value:     

Value requested for CONFIG_MGEODEGX1 not in final .config
Requested value:  # CONFIG_MGEODEGX1 is not set
Actual value:     

Value requested for CONFIG_MGEODE_LX not in final .config
Requested value:  # CONFIG_MGEODE_LX is not set
Actual value:     

Value requested for CONFIG_MCYRIXIII not in final .config
Requested value:  # CONFIG_MCYRIXIII is not set
Actual value:     

Value requested for CONFIG_MVIAC3_2 not in final .config
Requested value:  # CONFIG_MVIAC3_2 is not set
Actual value:     

Value requested for CONFIG_MVIAC7 not in final .config
Requested value:  # CONFIG_MVIAC7 is not set
Actual value:     

Value requested for CONFIG_X86_GENERIC not in final .config
Requested value:  # CONFIG_X86_GENERIC is not set
Actual value:     

Value requested for CONFIG_X86_INTERNODE_CACHE_SHIFT not in final .config
Requested value:  CONFIG_X86_INTERNODE_CACHE_SHIFT=5
Actual value:     CONFIG_X86_INTERNODE_CACHE_SHIFT=6

Value requested for CONFIG_X86_L1_CACHE_SHIFT not in final .config
Requested value:  CONFIG_X86_L1_CACHE_SHIFT=5
Actual value:     CONFIG_X86_L1_CACHE_SHIFT=6

Value requested for CONFIG_X86_USE_PPRO_CHECKSUM not in final .config
Requested value:  CONFIG_X86_USE_PPRO_CHECKSUM=y
Actual value:     

Value requested for CONFIG_X86_MINIMUM_CPU_FAMILY not in final .config
Requested value:  CONFIG_X86_MINIMUM_CPU_FAMILY=6
Actual value:     CONFIG_X86_MINIMUM_CPU_FAMILY=64

Value requested for CONFIG_CPU_SUP_TRANSMETA_32 not in final .config
Requested value:  CONFIG_CPU_SUP_TRANSMETA_32=y
Actual value:     

Value requested for CONFIG_CPU_SUP_VORTEX_32 not in final .config
Requested value:  CONFIG_CPU_SUP_VORTEX_32=y
Actual value:     

Value requested for CONFIG_HPET_TIMER not in final .config
Requested value:  # CONFIG_HPET_TIMER is not set
Actual value:     CONFIG_HPET_TIMER=y

Value requested for CONFIG_NR_CPUS_RANGE_END not in final .config
Requested value:  CONFIG_NR_CPUS_RANGE_END=8
Actual value:     CONFIG_NR_CPUS_RANGE_END=512

Value requested for CONFIG_NR_CPUS_DEFAULT not in final .config
Requested value:  CONFIG_NR_CPUS_DEFAULT=8
Actual value:     CONFIG_NR_CPUS_DEFAULT=64

Value requested for CONFIG_X86_ANCIENT_MCE not in final .config
Requested value:  # CONFIG_X86_ANCIENT_MCE is not set
Actual value:     

Value requested for CONFIG_X86_LEGACY_VM86 not in final .config
Requested value:  # CONFIG_X86_LEGACY_VM86 is not set
Actual value:     

Value requested for CONFIG_X86_ESPFIX32 not in final .config
Requested value:  CONFIG_X86_ESPFIX32=y
Actual value:     

Value requested for CONFIG_TOSHIBA not in final .config
Requested value:  # CONFIG_TOSHIBA is not set
Actual value:     

Value requested for CONFIG_X86_REBOOTFIXUPS not in final .config
Requested value:  # CONFIG_X86_REBOOTFIXUPS is not set
Actual value:     

Value requested for CONFIG_MICROCODE_INITRD32 not in final .config
Requested value:  CONFIG_MICROCODE_INITRD32=y
Actual value:     

Value requested for CONFIG_NOHIGHMEM not in final .config
Requested value:  # CONFIG_NOHIGHMEM is not set
Actual value:     

Value requested for CONFIG_HIGHMEM4G not in final .config
Requested value:  CONFIG_HIGHMEM4G=y
Actual value:     

Value requested for CONFIG_HIGHMEM64G not in final .config
Requested value:  # CONFIG_HIGHMEM64G is not set
Actual value:     

Value requested for CONFIG_VMSPLIT_3G not in final .config
Requested value:  CONFIG_VMSPLIT_3G=y
Actual value:     

Value requested for CONFIG_VMSPLIT_3G_OPT not in final .config
Requested value:  # CONFIG_VMSPLIT_3G_OPT is not set
Actual value:     

Value requested for CONFIG_VMSPLIT_2G not in final .config
Requested value:  # CONFIG_VMSPLIT_2G is not set
Actual value:     

Value requested for CONFIG_VMSPLIT_2G_OPT not in final .config
Requested value:  # CONFIG_VMSPLIT_2G_OPT is not set
Actual value:     

Value requested for CONFIG_VMSPLIT_1G not in final .config
Requested value:  # CONFIG_VMSPLIT_1G is not set
Actual value:     

Value requested for CONFIG_PAGE_OFFSET not in final .config
Requested value:  CONFIG_PAGE_OFFSET=0xC0000000
Actual value:     

Value requested for CONFIG_HIGHMEM not in final .config
Requested value:  CONFIG_HIGHMEM=y
Actual value:     

Value requested for CONFIG_X86_PAE not in final .config
Requested value:  # CONFIG_X86_PAE is not set
Actual value:     

Value requested for CONFIG_ARCH_FLATMEM_ENABLE not in final .config
Requested value:  CONFIG_ARCH_FLATMEM_ENABLE=y
Actual value:     

Value requested for CONFIG_ARCH_SELECT_MEMORY_MODEL not in final .config
Requested value:  CONFIG_ARCH_SELECT_MEMORY_MODEL=y
Actual value:     

Value requested for CONFIG_ILLEGAL_POINTER_VALUE not in final .config
Requested value:  CONFIG_ILLEGAL_POINTER_VALUE=0
Actual value:     CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000

Value requested for CONFIG_HIGHPTE not in final .config
Requested value:  # CONFIG_HIGHPTE is not set
Actual value:     

Value requested for CONFIG_COMPAT_VDSO not in final .config
Requested value:  # CONFIG_COMPAT_VDSO is not set
Actual value:     

Value requested for CONFIG_FUNCTION_PADDING_CFI not in final .config
Requested value:  CONFIG_FUNCTION_PADDING_CFI=0
Actual value:     CONFIG_FUNCTION_PADDING_CFI=11

Value requested for CONFIG_FUNCTION_PADDING_BYTES not in final .config
Requested value:  CONFIG_FUNCTION_PADDING_BYTES=4
Actual value:     CONFIG_FUNCTION_PADDING_BYTES=16

Value requested for CONFIG_APM not in final .config
Requested value:  # CONFIG_APM is not set
Actual value:     

Value requested for CONFIG_X86_POWERNOW_K6 not in final .config
Requested value:  # CONFIG_X86_POWERNOW_K6 is not set
Actual value:     

Value requested for CONFIG_X86_POWERNOW_K7 not in final .config
Requested value:  # CONFIG_X86_POWERNOW_K7 is not set
Actual value:     

Value requested for CONFIG_X86_GX_SUSPMOD not in final .config
Requested value:  # CONFIG_X86_GX_SUSPMOD is not set
Actual value:     

Value requested for CONFIG_X86_SPEEDSTEP_ICH not in final .config
Requested value:  # CONFIG_X86_SPEEDSTEP_ICH is not set
Actual value:     

Value requested for CONFIG_X86_SPEEDSTEP_SMI not in final .config
Requested value:  # CONFIG_X86_SPEEDSTEP_SMI is not set
Actual value:     

Value requested for CONFIG_X86_CPUFREQ_NFORCE2 not in final .config
Requested value:  # CONFIG_X86_CPUFREQ_NFORCE2 is not set
Actual value:     

Value requested for CONFIG_X86_LONGRUN not in final .config
Requested value:  # CONFIG_X86_LONGRUN is not set
Actual value:     

Value requested for CONFIG_X86_LONGHAUL not in final .config
Requested value:  # CONFIG_X86_LONGHAUL is not set
Actual value:     

Value requested for CONFIG_X86_E_POWERSAVER not in final .config
Requested value:  # CONFIG_X86_E_POWERSAVER is not set
Actual value:     

Value requested for CONFIG_PCI_GOBIOS not in final .config
Requested value:  # CONFIG_PCI_GOBIOS is not set
Actual value:     

Value requested for CONFIG_PCI_GOMMCONFIG not in final .config
Requested value:  # CONFIG_PCI_GOMMCONFIG is not set
Actual value:     

Value requested for CONFIG_PCI_GODIRECT not in final .config
Requested value:  # CONFIG_PCI_GODIRECT is not set
Actual value:     

Value requested for CONFIG_PCI_GOANY not in final .config
Requested value:  CONFIG_PCI_GOANY=y
Actual value:     

Value requested for CONFIG_PCI_BIOS not in final .config
Requested value:  CONFIG_PCI_BIOS=y
Actual value:     

Value requested for CONFIG_ISA not in final .config
Requested value:  # CONFIG_ISA is not set
Actual value:     

Value requested for CONFIG_SCx200 not in final .config
Requested value:  # CONFIG_SCx200 is not set
Actual value:     

Value requested for CONFIG_OLPC not in final .config
Requested value:  # CONFIG_OLPC is not set
Actual value:     

Value requested for CONFIG_ALIX not in final .config
Requested value:  # CONFIG_ALIX is not set
Actual value:     

Value requested for CONFIG_NET5501 not in final .config
Requested value:  # CONFIG_NET5501 is not set
Actual value:     

Value requested for CONFIG_GEOS not in final .config
Requested value:  # CONFIG_GEOS is not set
Actual value:     

Value requested for CONFIG_COMPAT_32 not in final .config
Requested value:  CONFIG_COMPAT_32=y
Actual value:     

Value requested for CONFIG_HAVE_ATOMIC_IOMAP not in final .config
Requested value:  CONFIG_HAVE_ATOMIC_IOMAP=y
Actual value:     

Value requested for CONFIG_ARCH_32BIT_OFF_T not in final .config
Requested value:  CONFIG_ARCH_32BIT_OFF_T=y
Actual value:     

Value requested for CONFIG_ARCH_WANT_IPC_PARSE_VERSION not in final .config
Requested value:  CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
Actual value:     

Value requested for CONFIG_MODULES_USE_ELF_REL not in final .config
Requested value:  CONFIG_MODULES_USE_ELF_REL=y
Actual value:     

Value requested for CONFIG_ARCH_MMAP_RND_BITS not in final .config
Requested value:  CONFIG_ARCH_MMAP_RND_BITS=8
Actual value:     CONFIG_ARCH_MMAP_RND_BITS=28

Value requested for CONFIG_CLONE_BACKWARDS not in final .config
Requested value:  CONFIG_CLONE_BACKWARDS=y
Actual value:     

Value requested for CONFIG_OLD_SIGSUSPEND3 not in final .config
Requested value:  CONFIG_OLD_SIGSUSPEND3=y
Actual value:     

Value requested for CONFIG_OLD_SIGACTION not in final .config
Requested value:  CONFIG_OLD_SIGACTION=y
Actual value:     

Value requested for CONFIG_ARCH_SPLIT_ARG64 not in final .config
Requested value:  CONFIG_ARCH_SPLIT_ARG64=y
Actual value:     

Value requested for CONFIG_FUNCTION_ALIGNMENT not in final .config
Requested value:  CONFIG_FUNCTION_ALIGNMENT=4
Actual value:     CONFIG_FUNCTION_ALIGNMENT=16

Value requested for CONFIG_SELECT_MEMORY_MODEL not in final .config
Requested value:  CONFIG_SELECT_MEMORY_MODEL=y
Actual value:     

Value requested for CONFIG_FLATMEM_MANUAL not in final .config
Requested value:  CONFIG_FLATMEM_MANUAL=y
Actual value:     

Value requested for CONFIG_SPARSEMEM_MANUAL not in final .config
Requested value:  # CONFIG_SPARSEMEM_MANUAL is not set
Actual value:     

Value requested for CONFIG_FLATMEM not in final .config
Requested value:  CONFIG_FLATMEM=y
Actual value:     

Value requested for CONFIG_SPARSEMEM_STATIC not in final .config
Requested value:  CONFIG_SPARSEMEM_STATIC=y
Actual value:     

Value requested for CONFIG_BOUNCE not in final .config
Requested value:  CONFIG_BOUNCE=y
Actual value:     

Value requested for CONFIG_KMAP_LOCAL not in final .config
Requested value:  CONFIG_KMAP_LOCAL=y
Actual value:     

Value requested for CONFIG_HOTPLUG_PCI_COMPAQ not in final .config
Requested value:  # CONFIG_HOTPLUG_PCI_COMPAQ is not set
Actual value:     

Value requested for CONFIG_HOTPLUG_PCI_IBM not in final .config
Requested value:  # CONFIG_HOTPLUG_PCI_IBM is not set
Actual value:     

Value requested for CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH not in final .config
Requested value:  CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH=y
Actual value:     

Value requested for CONFIG_PCH_PHUB not in final .config
Requested value:  # CONFIG_PCH_PHUB is not set
Actual value:     

Value requested for CONFIG_SCSI_NSP32 not in final .config
Requested value:  # CONFIG_SCSI_NSP32 is not set
Actual value:     

Value requested for CONFIG_PATA_CS5520 not in final .config
Requested value:  # CONFIG_PATA_CS5520 is not set
Actual value:     

Value requested for CONFIG_PATA_CS5530 not in final .config
Requested value:  # CONFIG_PATA_CS5530 is not set
Actual value:     

Value requested for CONFIG_PATA_CS5535 not in final .config
Requested value:  # CONFIG_PATA_CS5535 is not set
Actual value:     

Value requested for CONFIG_PATA_CS5536 not in final .config
Requested value:  # CONFIG_PATA_CS5536 is not set
Actual value:     

Value requested for CONFIG_PATA_SC1200 not in final .config
Requested value:  # CONFIG_PATA_SC1200 is not set
Actual value:     

Value requested for CONFIG_PCH_GBE not in final .config
Requested value:  # CONFIG_PCH_GBE is not set
Actual value:     

Value requested for CONFIG_INPUT_WISTRON_BTNS not in final .config
Requested value:  # CONFIG_INPUT_WISTRON_BTNS is not set
Actual value:     

Value requested for CONFIG_SERIAL_TIMBERDALE not in final .config
Requested value:  # CONFIG_SERIAL_TIMBERDALE is not set
Actual value:     

Value requested for CONFIG_SERIAL_PCH_UART not in final .config
Requested value:  # CONFIG_SERIAL_PCH_UART is not set
Actual value:     

Value requested for CONFIG_HW_RANDOM_GEODE not in final .config
Requested value:  CONFIG_HW_RANDOM_GEODE=y
Actual value:     

Value requested for CONFIG_SONYPI not in final .config
Requested value:  # CONFIG_SONYPI is not set
Actual value:     

Value requested for CONFIG_PC8736x_GPIO not in final .config
Requested value:  # CONFIG_PC8736x_GPIO is not set
Actual value:     

Value requested for CONFIG_NSC_GPIO not in final .config
Requested value:  # CONFIG_NSC_GPIO is not set
Actual value:     

Value requested for CONFIG_I2C_EG20T not in final .config
Requested value:  # CONFIG_I2C_EG20T is not set
Actual value:     

Value requested for CONFIG_SCx200_ACB not in final .config
Requested value:  # CONFIG_SCx200_ACB is not set
Actual value:     

Value requested for CONFIG_PTP_1588_CLOCK_PCH not in final .config
Requested value:  # CONFIG_PTP_1588_CLOCK_PCH is not set
Actual value:     

Value requested for CONFIG_SBC8360_WDT not in final .config
Requested value:  # CONFIG_SBC8360_WDT is not set
Actual value:     

Value requested for CONFIG_SBC7240_WDT not in final .config
Requested value:  # CONFIG_SBC7240_WDT is not set
Actual value:     

Value requested for CONFIG_MFD_CS5535 not in final .config
Requested value:  # CONFIG_MFD_CS5535 is not set
Actual value:     

Value requested for CONFIG_AGP_ALI not in final .config
Requested value:  # CONFIG_AGP_ALI is not set
Actual value:     

Value requested for CONFIG_AGP_ATI not in final .config
Requested value:  # CONFIG_AGP_ATI is not set
Actual value:     

Value requested for CONFIG_AGP_AMD not in final .config
Requested value:  # CONFIG_AGP_AMD is not set
Actual value:     

Value requested for CONFIG_AGP_NVIDIA not in final .config
Requested value:  # CONFIG_AGP_NVIDIA is not set
Actual value:     

Value requested for CONFIG_AGP_SWORKS not in final .config
Requested value:  # CONFIG_AGP_SWORKS is not set
Actual value:     

Value requested for CONFIG_AGP_EFFICEON not in final .config
Requested value:  # CONFIG_AGP_EFFICEON is not set
Actual value:     

Value requested for CONFIG_SND_PCM not in final .config
Requested value:  CONFIG_SND_PCM=y
Actual value:     CONFIG_SND_PCM=m

Value requested for CONFIG_SND_HWDEP not in final .config
Requested value:  CONFIG_SND_HWDEP=y
Actual value:     CONFIG_SND_HWDEP=m

Value requested for CONFIG_SND_DYNAMIC_MINORS not in final .config
Requested value:  # CONFIG_SND_DYNAMIC_MINORS is not set
Actual value:     CONFIG_SND_DYNAMIC_MINORS=y

Value requested for CONFIG_SND_CS5530 not in final .config
Requested value:  # CONFIG_SND_CS5530 is not set
Actual value:     

Value requested for CONFIG_SND_CS5535AUDIO not in final .config
Requested value:  # CONFIG_SND_CS5535AUDIO is not set
Actual value:     

Value requested for CONFIG_SND_SIS7019 not in final .config
Requested value:  # CONFIG_SND_SIS7019 is not set
Actual value:     

Value requested for CONFIG_SND_HDA not in final .config
Requested value:  CONFIG_SND_HDA=y
Actual value:     CONFIG_SND_HDA=m

Value requested for CONFIG_SND_HDA_CORE not in final .config
Requested value:  CONFIG_SND_HDA_CORE=y
Actual value:     CONFIG_SND_HDA_CORE=m

Value requested for CONFIG_SND_INTEL_DSP_CONFIG not in final .config
Requested value:  CONFIG_SND_INTEL_DSP_CONFIG=y
Actual value:     CONFIG_SND_INTEL_DSP_CONFIG=m

Value requested for CONFIG_SND_INTEL_SOUNDWIRE_ACPI not in final .config
Requested value:  CONFIG_SND_INTEL_SOUNDWIRE_ACPI=y
Actual value:     CONFIG_SND_INTEL_SOUNDWIRE_ACPI=m

Value requested for CONFIG_LEDS_OT200 not in final .config
Requested value:  # CONFIG_LEDS_OT200 is not set
Actual value:     

Value requested for CONFIG_PCH_DMA not in final .config
Requested value:  # CONFIG_PCH_DMA is not set
Actual value:     

Value requested for CONFIG_CLKSRC_I8253 not in final .config
Requested value:  CONFIG_CLKSRC_I8253=y
Actual value:     

Value requested for CONFIG_MAILBOX not in final .config
Requested value:  # CONFIG_MAILBOX is not set
Actual value:     CONFIG_MAILBOX=y

Value requested for CONFIG_CRYPTO_SERPENT_SSE2_586 not in final .config
Requested value:  # CONFIG_CRYPTO_SERPENT_SSE2_586 is not set
Actual value:     

Value requested for CONFIG_CRYPTO_TWOFISH_586 not in final .config
Requested value:  # CONFIG_CRYPTO_TWOFISH_586 is not set
Actual value:     

Value requested for CONFIG_CRYPTO_DEV_GEODE not in final .config
Requested value:  # CONFIG_CRYPTO_DEV_GEODE is not set
Actual value:     

Value requested for CONFIG_CRYPTO_DEV_HIFN_795X not in final .config
Requested value:  # CONFIG_CRYPTO_DEV_HIFN_795X is not set
Actual value:     

Value requested for CONFIG_CRYPTO_LIB_POLY1305_RSIZE not in final .config
Requested value:  CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
Actual value:     CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11

Value requested for CONFIG_AUDIT_GENERIC not in final .config
Requested value:  CONFIG_AUDIT_GENERIC=y
Actual value:     

Value requested for CONFIG_GENERIC_VDSO_32 not in final .config
Requested value:  CONFIG_GENERIC_VDSO_32=y
Actual value:     

Value requested for CONFIG_DEBUG_KMAP_LOCAL not in final .config
Requested value:  # CONFIG_DEBUG_KMAP_LOCAL is not set
Actual value:     

Value requested for CONFIG_DEBUG_HIGHMEM not in final .config
Requested value:  # CONFIG_DEBUG_HIGHMEM is not set
Actual value:     

Value requested for CONFIG_HAVE_DEBUG_STACKOVERFLOW not in final .config
Requested value:  CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
Actual value:     

Value requested for CONFIG_DEBUG_STACKOVERFLOW not in final .config
Requested value:  # CONFIG_DEBUG_STACKOVERFLOW is not set
Actual value:     

Value requested for CONFIG_HAVE_FUNCTION_GRAPH_TRACER not in final .config
Requested value:  CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
Actual value:     

Value requested for CONFIG_HAVE_FUNCTION_GRAPH_RETVAL not in final .config
Requested value:  CONFIG_HAVE_FUNCTION_GRAPH_RETVAL=y
Actual value:     

Value requested for CONFIG_DRM_KUNIT_TEST not in final .config
Requested value:  CONFIG_DRM_KUNIT_TEST=m
Actual value:     

Value requested for CONFIG_DRM_XE_WERROR not in final .config
Requested value:  CONFIG_DRM_XE_WERROR=y
Actual value:     

Value requested for CONFIG_DRM_XE_DEBUG not in final .config
Requested value:  CONFIG_DRM_XE_DEBUG=y
Actual value:     

Value requested for CONFIG_DRM_XE_DEBUG_MEM not in final .config
Requested value:  CONFIG_DRM_XE_DEBUG_MEM=y
Actual value:     

Value requested for CONFIG_DRM_XE_KUNIT_TEST not in final .config
Requested value:  CONFIG_DRM_XE_KUNIT_TEST=m
Actual value:     

++ nproc
+ make -j48 ARCH=i386 olddefconfig
  GEN     Makefile

WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
  Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
  Selected by [m]:
  - DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
#
# configuration written to .config
#
++ nproc
+ make -j48 ARCH=i386
  SYNC    include/config/auto.conf.cmd
  GEN     Makefile

WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
  Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
  Selected by [m]:
  - DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]

WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
  Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
  Selected by [m]:
  - DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]

WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
  Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
  Selected by [m]:
  - DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
  GEN     Makefile
  WRAP    arch/x86/include/generated/uapi/asm/bpf_perf_event.h
  WRAP    arch/x86/include/generated/uapi/asm/errno.h
  WRAP    arch/x86/include/generated/uapi/asm/fcntl.h
  UPD     include/generated/uapi/linux/version.h
  WRAP    arch/x86/include/generated/uapi/asm/ioctl.h
  WRAP    arch/x86/include/generated/uapi/asm/ioctls.h
  WRAP    arch/x86/include/generated/uapi/asm/ipcbuf.h
  WRAP    arch/x86/include/generated/uapi/asm/param.h
  WRAP    arch/x86/include/generated/uapi/asm/poll.h
  WRAP    arch/x86/include/generated/uapi/asm/resource.h
  WRAP    arch/x86/include/generated/uapi/asm/socket.h
  WRAP    arch/x86/include/generated/uapi/asm/sockios.h
  WRAP    arch/x86/include/generated/uapi/asm/types.h
  WRAP    arch/x86/include/generated/uapi/asm/termbits.h
  WRAP    arch/x86/include/generated/uapi/asm/termios.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_32.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_64.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_x32.h
  SYSTBL  arch/x86/include/generated/asm/syscalls_32.h
  WRAP    arch/x86/include/generated/asm/early_ioremap.h
  WRAP    arch/x86/include/generated/asm/mcs_spinlock.h
  WRAP    arch/x86/include/generated/asm/irq_regs.h
  WRAP    arch/x86/include/generated/asm/kmap_size.h
  WRAP    arch/x86/include/generated/asm/local64.h
  UPD     include/generated/compile.h
  WRAP    arch/x86/include/generated/asm/mmiowb.h
  WRAP    arch/x86/include/generated/asm/module.lds.h
  WRAP    arch/x86/include/generated/asm/rwonce.h
  WRAP    arch/x86/include/generated/asm/unaligned.h
  HOSTCC  arch/x86/tools/relocs_32.o
  HOSTCC  arch/x86/tools/relocs_64.o
  HOSTCC  arch/x86/tools/relocs_common.o
  HOSTCC  scripts/kallsyms
  HOSTCC  scripts/sorttable
  HOSTCC  scripts/asn1_compiler
  HOSTCC  scripts/selinux/genheaders/genheaders
  HOSTCC  scripts/selinux/mdp/mdp
  HOSTLD  arch/x86/tools/relocs
  UPD     include/config/kernel.release
  UPD     include/generated/utsrelease.h
  CC      scripts/mod/empty.o
  HOSTCC  scripts/mod/mk_elfconfig
  CC      scripts/mod/devicetable-offsets.s
  UPD     scripts/mod/devicetable-offsets.h
  MKELF   scripts/mod/elfconfig.h
  HOSTCC  scripts/mod/modpost.o
  HOSTCC  scripts/mod/file2alias.o
  HOSTCC  scripts/mod/sumversion.o
  HOSTCC  scripts/mod/symsearch.o
  HOSTLD  scripts/mod/modpost
  CC      kernel/bounds.s
  CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-arch-fallback.h
  CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-long.h
  CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-instrumented.h
  UPD     include/generated/timeconst.h
  UPD     include/generated/bounds.h
  CC      arch/x86/kernel/asm-offsets.s
  UPD     include/generated/asm-offsets.h
  CALL    /workspace/kernel/scripts/checksyscalls.sh
  LDS     scripts/module.lds
  CC      ipc/util.o
  CC      ipc/msgutil.o
  CC      ipc/msg.o
  CC      ipc/sem.o
  CC      init/main.o
  HOSTCC  usr/gen_init_cpio
  CC      ipc/shm.o
  AS      arch/x86/lib/atomic64_cx8_32.o
  AS      arch/x86/lib/checksum_32.o
  CC      ipc/syscall.o
  CC      ipc/ipc_sysctl.o
  CC      certs/system_keyring.o
  CC      arch/x86/lib/cmdline.o
  AS      arch/x86/lib/cmpxchg8b_emu.o
  CC      ipc/mqueue.o
  CC      init/do_mounts.o
  UPD     init/utsversion-tmp.h
  CC      ipc/namespace.o
  CC      security/commoncap.o
  CC      arch/x86/lib/cpu.o
  CC      io_uring/io_uring.o
  CC      ipc/mq_sysctl.o
  CC      mm/filemap.o
  AR      arch/x86/net/built-in.a
  CC      arch/x86/pci/i386.o
  CC      arch/x86/realmode/init.o
  CC      arch/x86/video/video-common.o
  CC      mm/mempool.o
  CC      arch/x86/power/cpu.o
  GEN     security/selinux/flask.h security/selinux/av_permissions.h
  CC      security/integrity/iint.o
  CC      security/keys/gc.o
  AR      arch/x86/crypto/built-in.a
  CC      net/ethernet/eth.o
  CC      net/core/sock.o
  AR      drivers/cache/built-in.a
  AR      virt/lib/built-in.a
  AR      arch/x86/platform/atom/built-in.a
  CC      lib/math/div64.o
  AR      arch/x86/virt/svm/built-in.a
  CC      security/selinux/avc.o
  CC      arch/x86/events/amd/core.o
  CC      block/partitions/core.o
  CC      arch/x86/mm/pat/set_memory.o
  CC      block/partitions/msdos.o
  CC      sound/core/seq/seq.o
  CC      arch/x86/mm/init.o
  AR      arch/x86/virt/vmx/built-in.a
  CC      sound/core/seq/seq_lock.o
  CC      arch/x86/kernel/fpu/init.o
  AR      virt/built-in.a
  AR      arch/x86/platform/ce4100/built-in.a
  CC      fs/notify/dnotify/dnotify.o
  CC      arch/x86/entry/vdso/vma.o
  AR      drivers/bus/mhi/built-in.a
  CC      arch/x86/entry/vdso/extable.o
  AR      drivers/irqchip/built-in.a
  AR      arch/x86/virt/built-in.a
  AR      drivers/bus/built-in.a
  CC      arch/x86/platform/efi/memmap.o
  CC      kernel/sched/core.o
  AR      arch/x86/platform/geode/built-in.a
  AR      arch/x86/platform/iris/built-in.a
  CC      sound/core/sound.o
  CC      mm/oom_kill.o
  AR      drivers/pwm/built-in.a
  CC      drivers/pci/msi/pcidev_msi.o
  CC      crypto/asymmetric_keys/asymmetric_type.o
  CC      drivers/pci/pcie/portdrv.o
  CC      drivers/pci/msi/api.o
  CC      lib/math/gcd.o
  CC      lib/math/lcm.o
  CC      lib/math/int_log.o
  GEN     usr/initramfs_data.cpio
  COPY    usr/initramfs_inc_data
  AS      usr/initramfs_data.o
  HOSTCC  certs/extract-cert
  AR      usr/built-in.a
  CC      lib/math/int_pow.o
  CC      sound/core/init.o
  CC      arch/x86/kernel/fpu/bugs.o
  CC      drivers/pci/pcie/rcec.o
  CC      arch/x86/lib/delay.o
  CC      security/keys/key.o
  CC      lib/math/int_sqrt.o
  AR      net/802/built-in.a
  CC      arch/x86/kernel/fpu/core.o
  CC      net/sched/sch_generic.o
  CC      lib/math/reciprocal_div.o
  CC      drivers/pci/pcie/aspm.o
  CC      sound/core/seq/seq_clientmgr.o
  AS      arch/x86/realmode/rm/header.o
  CERT    certs/x509_certificate_list
  CERT    certs/signing_key.x509
  AS      arch/x86/realmode/rm/trampoline_32.o
  AS      certs/system_certificates.o
  AR      arch/x86/video/built-in.a
  CC      drivers/pci/msi/msi.o
  CC      lib/math/rational.o
  AR      certs/built-in.a
  AS      arch/x86/realmode/rm/stack.o
  AR      arch/x86/entry/vsyscall/built-in.a
  AS      arch/x86/entry/entry.o
  AS      arch/x86/lib/getuser.o
  CC      arch/x86/platform/efi/quirks.o
  CC      security/integrity/integrity_audit.o
  AS      arch/x86/realmode/rm/reboot.o
  CC      arch/x86/platform/intel/iosf_mbi.o
  CC      arch/x86/pci/init.o
  GEN     arch/x86/lib/inat-tables.c
  CC      arch/x86/pci/pcbios.o
  AS      arch/x86/realmode/rm/wakeup_asm.o
  CC      arch/x86/pci/mmconfig_32.o
  CC      net/sched/sch_mq.o
  CC      arch/x86/realmode/rm/wakemain.o
  CC      drivers/pci/pcie/pme.o
  CC      crypto/asymmetric_keys/restrict.o
  CC      fs/notify/inotify/inotify_fsnotify.o
  CC      arch/x86/lib/insn-eval.o
  CC      fs/notify/inotify/inotify_user.o
  LDS     arch/x86/entry/vdso/vdso32/vdso32.lds
  CC      arch/x86/power/hibernate_32.o
  AS      arch/x86/entry/entry_32.o
  CC      arch/x86/entry/syscall_32.o
  AR      fs/notify/dnotify/built-in.a
  AS      arch/x86/entry/vdso/vdso32/note.o
  CC      fs/nfs_common/nfsacl.o
  CC      fs/iomap/trace.o
  CC      arch/x86/realmode/rm/video-mode.o
  CC      fs/iomap/iter.o
  AS      arch/x86/entry/vdso/vdso32/system_call.o
  AS      arch/x86/entry/vdso/vdso32/sigreturn.o
  CC      block/partitions/efi.o
  CC      drivers/pci/msi/irqdomain.o
  AR      arch/x86/platform/intel-mid/built-in.a
  CC      security/keys/keyring.o
  CC      arch/x86/entry/vdso/vdso32/vclock_gettime.o
  AS      arch/x86/realmode/rm/copy.o
  AR      lib/math/built-in.a
  AS      arch/x86/realmode/rm/bioscall.o
  CC      fs/nfs_common/grace.o
  CC      lib/crypto/mpi/generic_mpih-lshift.o
  CC      crypto/asymmetric_keys/signature.o
  CC      arch/x86/realmode/rm/regs.o
  CC      lib/zlib_inflate/inffast.o
  CC      crypto/asymmetric_keys/public_key.o
  CC      arch/x86/realmode/rm/video-vga.o
  CC      arch/x86/events/amd/lbr.o
  CC      lib/crypto/memneq.o
  CC      lib/zlib_inflate/inflate.o
  CC      arch/x86/realmode/rm/video-vesa.o
  CC      arch/x86/events/amd/ibs.o
  CC      arch/x86/platform/efi/efi.o
  CC      arch/x86/entry/vdso/vdso32/vgetcpu.o
  CC      arch/x86/realmode/rm/video-bios.o
  AR      net/ethernet/built-in.a
  CC      arch/x86/mm/pat/memtype.o
  HOSTCC  arch/x86/entry/vdso/vdso2c
  CC      arch/x86/entry/vdso/vdso32-setup.o
  AR      sound/i2c/other/built-in.a
  CC      arch/x86/pci/direct.o
  ASN.1   crypto/asymmetric_keys/x509.asn1.[ch]
  CC      net/core/request_sock.o
  AS      arch/x86/power/hibernate_asm_32.o
  AR      arch/x86/platform/intel/built-in.a
  PASYMS  arch/x86/realmode/rm/pasyms.h
  AR      sound/i2c/built-in.a
  CC      arch/x86/lib/insn.o
  LDS     arch/x86/realmode/rm/realmode.lds
  AR      security/integrity/built-in.a
  CC      init/do_mounts_initrd.o
  CC      kernel/locking/mutex.o
  CC      arch/x86/power/hibernate.o
  AR      arch/x86/platform/intel-quark/built-in.a
  LD      arch/x86/realmode/rm/realmode.elf
  CC      kernel/locking/semaphore.o
  CC      security/lsm_syscalls.o
  RELOCS  arch/x86/realmode/rm/realmode.relocs
  AR      arch/x86/platform/olpc/built-in.a
  OBJCOPY arch/x86/realmode/rm/realmode.bin
  CC      kernel/locking/rwsem.o
  CC      security/selinux/hooks.o
  AS      arch/x86/realmode/rmpiggy.o
  CC      security/selinux/selinuxfs.o
  CC      kernel/locking/percpu-rwsem.o
  CC      kernel/locking/spinlock.o
  AR      sound/drivers/opl3/built-in.a
  CC      arch/x86/mm/init_32.o
  CC      arch/x86/events/amd/uncore.o
  AR      arch/x86/realmode/built-in.a
  CC      arch/x86/mm/fault.o
  CC      fs/iomap/buffered-io.o
  AR      ipc/built-in.a
  AR      sound/drivers/opl4/built-in.a
  CC      lib/crypto/mpi/generic_mpih-mul1.o
  CC      fs/iomap/direct-io.o
  AR      sound/drivers/mpu401/built-in.a
  CC      security/min_addr.o
  AR      sound/drivers/vx/built-in.a
  AR      sound/drivers/pcsp/built-in.a
  CC      kernel/sched/fair.o
  AR      drivers/pci/msi/built-in.a
  CC      lib/zlib_inflate/infutil.o
  CC      arch/x86/events/intel/core.o
  AR      sound/drivers/built-in.a
  CC      net/netlink/af_netlink.o
  CC      arch/x86/events/intel/bts.o
  AR      fs/nfs_common/built-in.a
  AR      drivers/pci/pwrctl/built-in.a
  AR      drivers/pci/pcie/built-in.a
  CC      arch/x86/kernel/fpu/regset.o
  CC      kernel/power/qos.o
  ASN.1   crypto/asymmetric_keys/x509_akid.asn1.[ch]
  CC      kernel/printk/printk.o
  CC      drivers/pci/hotplug/pci_hotplug_core.o
  CC      crypto/asymmetric_keys/x509_loader.o
  AR      block/partitions/built-in.a
  AR      fs/notify/inotify/built-in.a
  CC      kernel/printk/printk_safe.o
  CC      block/bdev.o
  AR      fs/notify/fanotify/built-in.a
  CC      arch/x86/lib/kaslr.o
  CC      block/fops.o
  CC      fs/notify/fsnotify.o
  CC      sound/core/seq/seq_memory.o
  VDSO    arch/x86/entry/vdso/vdso32.so.dbg
  OBJCOPY arch/x86/entry/vdso/vdso32.so
  VDSO2C  arch/x86/entry/vdso/vdso-image-32.c
  CC      arch/x86/entry/vdso/vdso-image-32.o
  CC      kernel/printk/nbcon.o
  CC      arch/x86/kernel/fpu/signal.o
  CC      crypto/asymmetric_keys/x509_public_key.o
  CC      arch/x86/lib/memcpy_32.o
  ASN.1   crypto/asymmetric_keys/pkcs7.asn1.[ch]
  CC      arch/x86/kernel/fpu/xstate.o
  CC      lib/zlib_inflate/inftrees.o
  AS      arch/x86/lib/memmove_32.o
  CC      security/keys/keyctl.o
  CC      security/keys/permission.o
  CC      arch/x86/lib/misc.o
  AR      arch/x86/entry/vdso/built-in.a
  CC      arch/x86/pci/mmconfig-shared.o
  CC      arch/x86/entry/common.o
  CC      arch/x86/lib/pc-conf-reg.o
  CC      lib/zlib_inflate/inflate_syms.o
  CC      lib/crypto/mpi/generic_mpih-mul2.o
  AR      arch/x86/power/built-in.a
  CC      init/initramfs.o
  CC      arch/x86/platform/efi/efi_32.o
  CC      arch/x86/events/zhaoxin/core.o
  CC      lib/crypto/mpi/generic_mpih-mul3.o
  AS      arch/x86/entry/thunk.o
  CC      arch/x86/mm/pat/memtype_interval.o
  CC      security/security.o
  AS      arch/x86/lib/putuser.o
  CC      security/selinux/netlink.o
  CC      fs/notify/notification.o
  CC      fs/notify/group.o
  AS      arch/x86/lib/retpoline.o
  CC      fs/notify/mark.o
  CC      security/lsm_audit.o
  CC      arch/x86/lib/string_32.o
  CC      block/bio.o
  CC      drivers/pci/hotplug/acpi_pcihp.o
  CC      kernel/power/main.o
  CC      arch/x86/lib/strstr_32.o
  CC      net/sched/sch_frag.o
  CC      arch/x86/lib/usercopy.o
  AR      lib/zlib_inflate/built-in.a
  CC      kernel/locking/osq_lock.o
  CC      crypto/asymmetric_keys/pkcs7_trust.o
  CC      arch/x86/kernel/cpu/mce/core.o
  CC      arch/x86/mm/ioremap.o
  CC      arch/x86/kernel/cpu/mtrr/mtrr.o
  CC      sound/core/seq/seq_queue.o
  CC      arch/x86/kernel/cpu/microcode/core.o
  CC      arch/x86/kernel/cpu/mce/severity.o
  AR      arch/x86/events/amd/built-in.a
  CC      crypto/asymmetric_keys/pkcs7_verify.o
  CC      kernel/locking/qspinlock.o
  CC      arch/x86/pci/fixup.o
  CC      net/sched/sch_api.o
  CC      arch/x86/lib/usercopy_32.o
  CC      security/keys/process_keys.o
  CC      lib/crypto/mpi/generic_mpih-rshift.o
  CC      block/elevator.o
  CC      arch/x86/mm/extable.o
  CC      arch/x86/kernel/cpu/microcode/intel.o
  CC      kernel/power/console.o
  CC      kernel/power/process.o
  CC      net/core/skbuff.o
  AR      arch/x86/mm/pat/built-in.a
  CC      security/selinux/nlmsgtab.o
  CC      arch/x86/kernel/cpu/mtrr/if.o
  AS      arch/x86/platform/efi/efi_stub_32.o
  CC      arch/x86/kernel/cpu/mtrr/generic.o
  AR      arch/x86/entry/built-in.a
  CC      mm/fadvise.o
  CC      arch/x86/pci/acpi.o
  CC      arch/x86/platform/efi/runtime-map.o
  CC      io_uring/opdef.o
  AR      arch/x86/events/zhaoxin/built-in.a
  CC      kernel/power/suspend.o
  AR      arch/x86/platform/scx200/built-in.a
  CC      arch/x86/lib/msr-smp.o
  AR      arch/x86/platform/ts5500/built-in.a
  CC      crypto/asymmetric_keys/x509.asn1.o
  CC      arch/x86/events/core.o
  AR      arch/x86/platform/uv/built-in.a
  CC      arch/x86/pci/legacy.o
  CC      kernel/locking/rtmutex_api.o
  CC      crypto/asymmetric_keys/x509_akid.asn1.o
  AR      arch/x86/kernel/fpu/built-in.a
  CC      security/selinux/netif.o
  CC      crypto/asymmetric_keys/x509_cert_parser.o
  CC      arch/x86/kernel/acpi/boot.o
  AR      drivers/pci/hotplug/built-in.a
  CC      init/calibrate.o
  CC      arch/x86/kernel/acpi/sleep.o
  AR      drivers/pci/controller/dwc/built-in.a
  CC      fs/notify/fdinfo.o
  AR      drivers/pci/controller/mobiveil/built-in.a
  AS      arch/x86/kernel/acpi/wakeup_32.o
  AR      drivers/pci/controller/plda/built-in.a
  AR      drivers/pci/controller/built-in.a
  CC      arch/x86/kernel/acpi/cstate.o
  AR      drivers/pci/switch/built-in.a
  CC      drivers/pci/access.o
  CC      arch/x86/events/probe.o
  CC      arch/x86/lib/cache-smp.o
  CC      drivers/pci/bus.o
  CC      sound/core/seq/seq_fifo.o
  CC      lib/crypto/mpi/generic_mpih-sub1.o
  CC      fs/iomap/fiemap.o
  CC      arch/x86/kernel/cpu/mtrr/cleanup.o
  CC      arch/x86/kernel/cpu/microcode/amd.o
  CC      arch/x86/pci/irq.o
  CC      net/netlink/genetlink.o
  CC      kernel/power/hibernate.o
  CC      init/init_task.o
  CC      arch/x86/lib/msr.o
  AS      arch/x86/lib/msr-reg.o
  CC      drivers/pci/probe.o
  CC      arch/x86/kernel/cpu/mtrr/amd.o
  CC      io_uring/kbuf.o
  AR      sound/isa/ad1816a/built-in.a
  AR      sound/isa/ad1848/built-in.a
  CC      arch/x86/mm/mmap.o
  CC      mm/maccess.o
  AR      sound/isa/cs423x/built-in.a
  AR      arch/x86/platform/efi/built-in.a
  AR      sound/isa/es1688/built-in.a
  CC      kernel/printk/printk_ringbuffer.o
  CC      mm/page-writeback.o
  AR      arch/x86/platform/built-in.a
  AR      sound/isa/galaxy/built-in.a
  AR      sound/pci/ac97/built-in.a
  CC      crypto/asymmetric_keys/pkcs7.asn1.o
  CC      arch/x86/pci/common.o
  AR      sound/isa/gus/built-in.a
  AR      sound/pci/ali5451/built-in.a
  AR      sound/isa/msnd/built-in.a
  AR      sound/pci/asihpi/built-in.a
  CC      arch/x86/pci/early.o
  CC      crypto/asymmetric_keys/pkcs7_parser.o
  AR      sound/isa/opti9xx/built-in.a
  AR      sound/pci/au88x0/built-in.a
  CC      security/keys/request_key.o
  CC      kernel/printk/sysctl.o
  AR      sound/isa/sb/built-in.a
  AR      sound/pci/aw2/built-in.a
  AR      sound/isa/wavefront/built-in.a
  AR      sound/pci/ctxfi/built-in.a
  AR      sound/isa/wss/built-in.a
  AR      sound/isa/built-in.a
  AR      sound/pci/ca0106/built-in.a
  AR      sound/pci/cs46xx/built-in.a
  AR      fs/notify/built-in.a
  AR      sound/pci/cs5535audio/built-in.a
  CC      drivers/pci/host-bridge.o
  CC      sound/core/seq/seq_prioq.o
  CC      fs/quota/dquot.o
  AR      sound/pci/lola/built-in.a
  CC      fs/proc/task_mmu.o
  CC      fs/quota/quota_v2.o
  AR      sound/pci/lx6464es/built-in.a
  CC      arch/x86/pci/bus_numa.o
  CC      arch/x86/kernel/cpu/mce/genpool.o
  AR      sound/pci/echoaudio/built-in.a
  CC      fs/proc/inode.o
  AR      sound/pci/emu10k1/built-in.a
  CC      arch/x86/pci/amd_bus.o
  AR      sound/pci/hda/built-in.a
  CC      arch/x86/kernel/cpu/mce/intel.o
  CC [M]  sound/pci/hda/hda_bind.o
  CC      lib/crypto/mpi/generic_mpih-add1.o
  CC      kernel/power/snapshot.o
  CC      block/blk-core.o
  CC      kernel/locking/qrwlock.o
  CC      security/selinux/netnode.o
  CC      fs/iomap/seek.o
  CC      fs/proc/root.o
  CC      drivers/pci/remove.o
  CC      kernel/power/swap.o
  CC      arch/x86/kernel/cpu/mtrr/cyrix.o
  CC      init/version.o
  CC      lib/crypto/mpi/ec.o
  CC      arch/x86/kernel/cpu/mce/amd.o
  AR      arch/x86/kernel/acpi/built-in.a
  CC      arch/x86/kernel/cpu/cacheinfo.o
  AR      kernel/printk/built-in.a
  CC      arch/x86/mm/pgtable.o
  AR      arch/x86/kernel/cpu/microcode/built-in.a
  CC      kernel/irq/irqdesc.o
  CC      arch/x86/kernel/cpu/scattered.o
  AR      crypto/asymmetric_keys/built-in.a
  CC      crypto/api.o
  CC      arch/x86/lib/msr-reg-export.o
  AR      init/built-in.a
  CC [M]  sound/pci/hda/hda_codec.o
  CC      arch/x86/kernel/cpu/topology_common.o
  CC      arch/x86/kernel/cpu/topology_ext.o
  CC      fs/quota/quota_tree.o
  CC      sound/core/seq/seq_timer.o
  CC      arch/x86/mm/physaddr.o
  AR      kernel/locking/built-in.a
  CC      arch/x86/mm/tlb.o
  CC      arch/x86/kernel/cpu/mce/threshold.o
  CC      mm/folio-compat.o
  CC [M]  sound/pci/hda/hda_jack.o
  AR      net/bpf/built-in.a
  CC      security/keys/request_key_auth.o
  CC [M]  sound/pci/hda/hda_auto_parser.o
  AS      arch/x86/lib/hweight.o
  CC      lib/crypto/utils.o
  CC      lib/crypto/chacha.o
  CC      arch/x86/lib/iomem.o
  CC      io_uring/rsrc.o
  AR      arch/x86/pci/built-in.a
  CC      net/sched/sch_blackhole.o
  CC      io_uring/notif.o
  CC      kernel/irq/handle.o
  CC      arch/x86/events/intel/ds.o
  CC      mm/readahead.o
  CC      kernel/irq/manage.o
  CC      lib/crypto/aes.o
  CC      arch/x86/kernel/cpu/mtrr/centaur.o
  CC      kernel/sched/build_policy.o
  CC      fs/proc/base.o
  CC [M]  sound/pci/hda/hda_sysfs.o
  CC      fs/iomap/swapfile.o
  CC      kernel/power/user.o
  CC      arch/x86/lib/atomic64_32.o
  CC      arch/x86/events/intel/knc.o
  CC      lib/crypto/mpi/mpicoder.o
  CC      security/keys/user_defined.o
  CC      lib/crypto/arc4.o
  CC      security/keys/proc.o
  CC      arch/x86/mm/cpu_entry_area.o
  CC      net/ethtool/ioctl.o
  CC      kernel/irq/spurious.o
  CC      arch/x86/mm/maccess.o
  CC      arch/x86/lib/inat.o
  CC      net/netlink/policy.o
  CC      drivers/pci/pci.o
  CC      security/selinux/netport.o
  CC      crypto/cipher.o
  CC      io_uring/tctx.o
  CC      sound/core/seq/seq_system.o
  CC      lib/crypto/gf128mul.o
  AR      arch/x86/lib/built-in.a
  CC      lib/crypto/mpi/mpi-add.o
  AR      arch/x86/lib/lib.a
  CC      net/ethtool/common.o
  CC      arch/x86/events/intel/lbr.o
  CC      arch/x86/events/intel/p4.o
  CC      arch/x86/kernel/cpu/mtrr/legacy.o
  CC      arch/x86/events/intel/p6.o
  CC      crypto/compress.o
  CC      sound/core/seq/seq_ports.o
  CC      arch/x86/events/intel/pt.o
  CC      arch/x86/kernel/cpu/topology_amd.o
  CC [M]  sound/pci/hda/hda_controller.o
  CC [M]  sound/pci/hda/hda_proc.o
  CC      security/keys/sysctl.o
  CC      net/sched/cls_api.o
  AR      fs/iomap/built-in.a
  CC      arch/x86/kernel/cpu/common.o
  CC      lib/crypto/blake2s.o
  CC      kernel/irq/resend.o
  CC      security/keys/keyctl_pkey.o
  CC [M]  sound/pci/hda/hda_hwdep.o
  CC      mm/swap.o
  CC      kernel/power/poweroff.o
  CC      arch/x86/mm/pgprot.o
  CC [M]  sound/pci/hda/patch_hdmi.o
  CC      net/sched/act_api.o
  CC      kernel/irq/chip.o
  AR      arch/x86/kernel/cpu/mtrr/built-in.a
  CC      sound/core/seq/seq_info.o
  CC      mm/truncate.o
  CC      arch/x86/kernel/cpu/rdrand.o
  CC      fs/quota/quota.o
  CC      arch/x86/mm/pgtable_32.o
  AR      arch/x86/kernel/cpu/mce/built-in.a
  CC [M]  sound/pci/hda/hda_eld.o
  CC      arch/x86/kernel/cpu/match.o
  CC      crypto/algapi.o
  CC      arch/x86/kernel/cpu/bugs.o
  CC      io_uring/filetable.o
  CC      lib/crypto/blake2s-generic.o
  CC      kernel/sched/build_utility.o
  AR      kernel/power/built-in.a
  CC      lib/crypto/mpi/mpi-bit.o
  CC      kernel/rcu/update.o
  CC      arch/x86/events/intel/uncore.o
  CC [M]  sound/pci/hda/hda_intel.o
  CC      lib/crypto/mpi/mpi-cmp.o
  CC      lib/crypto/mpi/mpi-sub-ui.o
  AR      net/netlink/built-in.a
  AR      sound/ppc/built-in.a
  CC      arch/x86/events/utils.o
  CC      kernel/irq/dummychip.o
  CC      arch/x86/kernel/cpu/aperfmperf.o
  AR      sound/arm/built-in.a
  CC      arch/x86/kernel/cpu/cpuid-deps.o
  CC      lib/crypto/sha1.o
  CC      arch/x86/mm/iomap_32.o
  CC      block/blk-sysfs.o
  AR      kernel/livepatch/built-in.a
  CC      arch/x86/mm/hugetlbpage.o
  CC      kernel/rcu/sync.o
  AR      security/keys/built-in.a
  CC      kernel/irq/devres.o
  CC      security/device_cgroup.o
  CC      security/selinux/status.o
  CC      arch/x86/events/intel/uncore_nhmex.o
  CC      sound/core/seq/seq_dummy.o
  CC      arch/x86/kernel/cpu/umwait.o
  CC      crypto/scatterwalk.o
  CC      arch/x86/events/intel/uncore_snb.o
  CC      arch/x86/events/intel/uncore_snbep.o
  CC      security/selinux/ss/ebitmap.o
  CC      io_uring/rw.o
  CC      net/netfilter/core.o
  MKCAP   arch/x86/kernel/cpu/capflags.c
  CC      lib/crypto/sha256.o
  CC      net/netfilter/nf_log.o
  CC      arch/x86/events/intel/uncore_discovery.o
  CC      io_uring/net.o
  CC      net/netfilter/nf_queue.o
  CC      net/netfilter/nf_sockopt.o
  CC      lib/crypto/mpi/mpi-div.o
  CC      net/core/datagram.o
  CC      mm/vmscan.o
  CC      mm/shrinker.o
  CC      arch/x86/events/rapl.o
  CC      fs/proc/generic.o
  CC      mm/shmem.o
  CC      kernel/irq/autoprobe.o
  CC      security/selinux/ss/hashtab.o
  CC      io_uring/poll.o
  CC      arch/x86/events/msr.o
  CC      fs/quota/kqid.o
  AR      sound/core/seq/built-in.a
  CC      sound/core/memory.o
  CC      arch/x86/mm/dump_pagetables.o
  CC      arch/x86/kernel/cpu/powerflags.o
  CC      arch/x86/kernel/cpu/topology.o
  CC      crypto/proc.o
  CC      net/sched/sch_fifo.o
  CC      lib/crypto/mpi/mpi-inv.o
  CC      net/ethtool/netlink.o
  CC      kernel/irq/irqdomain.o
  CC      net/core/stream.o
  CC      block/blk-flush.o
  CC      security/selinux/ss/symtab.o
  CC      kernel/irq/proc.o
  CC      security/selinux/ss/sidtab.o
  CC      drivers/video/console/dummycon.o
  CC      drivers/video/backlight/backlight.o
  CC      arch/x86/events/intel/cstate.o
  CC      fs/quota/netlink.o
  CC      kernel/irq/migration.o
  AR      drivers/video/fbdev/core/built-in.a
  AR      drivers/video/fbdev/omap/built-in.a
  AR      drivers/video/fbdev/omap2/omapfb/dss/built-in.a
  AR      drivers/video/fbdev/omap2/omapfb/displays/built-in.a
  CC      lib/zlib_deflate/deflate.o
  AR      drivers/video/fbdev/omap2/omapfb/built-in.a
  CC      net/ipv4/netfilter/nf_defrag_ipv4.o
  CC      net/ipv4/route.o
  CC      lib/lzo/lzo1x_compress.o
  LD [M]  sound/pci/hda/snd-hda-codec.o
  AR      drivers/video/fbdev/omap2/built-in.a
  LD [M]  sound/pci/hda/snd-hda-codec-hdmi.o
  LD [M]  sound/pci/hda/snd-hda-intel.o
  AR      drivers/video/fbdev/built-in.a
  AR      sound/pci/ice1712/built-in.a
  CC      lib/lzo/lzo1x_decompress_safe.o
  AR      sound/pci/korg1212/built-in.a
  CC      sound/core/control.o
  AR      sound/pci/mixart/built-in.a
  CC      net/ipv4/netfilter/nf_reject_ipv4.o
  CC      security/selinux/ss/avtab.o
  CC      fs/proc/array.o
  AR      sound/pci/nm256/built-in.a
  CC      fs/proc/fd.o
  CC      crypto/aead.o
  CC      net/ipv4/netfilter/ip_tables.o
  CC      security/selinux/ss/policydb.o
  AR      sound/pci/oxygen/built-in.a
  CC      io_uring/eventfd.o
  AR      sound/pci/pcxhr/built-in.a
  CC      security/selinux/ss/services.o
  AR      sound/pci/riptide/built-in.a
  AR      sound/pci/rme9652/built-in.a
  AR      sound/pci/trident/built-in.a
  CC      drivers/pci/pci-driver.o
  CC      mm/util.o
  CC      kernel/rcu/srcutree.o
  CC      lib/crypto/mpi/mpi-mod.o
  CC      arch/x86/mm/highmem_32.o
  AR      sound/pci/ymfpci/built-in.a
  AR      sound/pci/vx222/built-in.a
  CC      security/selinux/ss/conditional.o
  AR      sound/pci/built-in.a
  AR      sound/sh/built-in.a
  AR      sound/synth/emux/built-in.a
  AR      sound/synth/built-in.a
  AR      sound/usb/misc/built-in.a
  CC      security/selinux/ss/mls.o
  AR      sound/firewire/built-in.a
  AR      sound/usb/usx2y/built-in.a
  AR      sound/usb/caiaq/built-in.a
  AR      sound/sparc/built-in.a
  AR      sound/spi/built-in.a
  CC      net/ipv4/netfilter/iptable_filter.o
  CC      net/ipv4/netfilter/iptable_mangle.o
  AR      sound/usb/6fire/built-in.a
  CC      kernel/rcu/tree.o
  AR      sound/usb/hiface/built-in.a
  CC      net/netfilter/utils.o
  AR      sound/usb/bcd2000/built-in.a
  AR      sound/usb/built-in.a
  CC      kernel/irq/cpuhotplug.o
  CC      block/blk-settings.o
  CC      drivers/video/console/vgacon.o
  CC      kernel/irq/pm.o
  CC      kernel/irq/msi.o
  AR      lib/lzo/built-in.a
  CC      io_uring/uring_cmd.o
  CC      net/sched/cls_cgroup.o
  CC      lib/zlib_deflate/deftree.o
  AR      drivers/video/backlight/built-in.a
  CC      sound/core/misc.o
  CC      net/ethtool/bitset.o
  AR      fs/quota/built-in.a
  CC      drivers/video/aperture.o
  CC      net/ipv4/netfilter/ipt_REJECT.o
  CC      net/core/scm.o
  CC      security/selinux/ss/context.o
  CC      io_uring/openclose.o
  CC      kernel/irq/affinity.o
  CC      lib/zlib_deflate/deflate_syms.o
  AR      arch/x86/mm/built-in.a
  CC      lib/crypto/mpi/mpi-mul.o
  CC [M]  net/ipv4/netfilter/iptable_nat.o
  CC      lib/crypto/mpi/mpih-cmp.o
  CC      net/core/gen_stats.o
  CC      crypto/geniv.o
  CC      lib/crypto/mpi/mpih-div.o
  AR      arch/x86/events/intel/built-in.a
  AR      arch/x86/events/built-in.a
  AR      drivers/idle/built-in.a
  CC      security/selinux/netlabel.o
  AR      drivers/char/ipmi/built-in.a
  CC      fs/proc/proc_tty.o
  CC      drivers/acpi/acpica/dsargs.o
  CC      arch/x86/kernel/cpu/proc.o
  CC      drivers/acpi/acpica/dscontrol.o
  CC      arch/x86/kernel/apic/apic.o
  AR      drivers/acpi/pmic/built-in.a
  AR      lib/zlib_deflate/built-in.a
  CC      arch/x86/kernel/kprobes/core.o
  CC      drivers/acpi/dptf/int340x_thermal.o
  CC      arch/x86/kernel/kprobes/opt.o
  CC      kernel/irq/matrix.o
  CC      mm/mmzone.o
  CC      block/blk-ioc.o
  CC      arch/x86/kernel/apic/apic_common.o
  CC      drivers/acpi/acpica/dsdebug.o
  CC      drivers/acpi/tables.o
  CC      drivers/acpi/x86/apple.o
  CC      drivers/acpi/osi.o
  CC      sound/core/device.o
  CC      sound/core/info.o
  CC      arch/x86/kernel/apic/apic_noop.o
  CC      drivers/pci/search.o
  CC      arch/x86/kernel/apic/ipi.o
  CC      arch/x86/kernel/apic/vector.o
  AR      drivers/video/console/built-in.a
  CC      io_uring/sqpoll.o
  CC      io_uring/xattr.o
  CC      drivers/video/cmdline.o
  CC      drivers/video/nomodeset.o
  CC      drivers/pci/rom.o
  CC      lib/lz4/lz4_decompress.o
  CC      net/sched/ematch.o
  CC      net/core/gen_estimator.o
  CC      net/netfilter/nfnetlink.o
  CC      fs/proc/cmdline.o
  AR      drivers/acpi/dptf/built-in.a
  CC      drivers/video/hdmi.o
  CC      fs/kernfs/mount.o
  CC      net/netfilter/nfnetlink_log.o
  CC      drivers/acpi/acpica/dsfield.o
  CC      fs/kernfs/inode.o
  CC      lib/zstd/zstd_decompress_module.o
  CC      fs/kernfs/dir.o
  CC      lib/crypto/mpi/mpih-mul.o
  CC      drivers/pci/setup-res.o
  CC      lib/zstd/decompress/huf_decompress.o
  CC      net/core/net_namespace.o
  CC      crypto/lskcipher.o
  CC      net/ipv4/inetpeer.o
  CC      lib/crypto/mpi/mpi-pow.o
  AR      net/ipv4/netfilter/built-in.a
  CC      lib/zstd/decompress/zstd_ddict.o
  CC      net/ethtool/strset.o
  CC      lib/zstd/decompress/zstd_decompress.o
  CC      sound/core/isadma.o
  CC      mm/vmstat.o
  CC      drivers/acpi/x86/cmos_rtc.o
  CC      lib/xz/xz_dec_syms.o
  CC      fs/kernfs/file.o
  CC      drivers/pci/irq.o
  CC      drivers/pci/vpd.o
  AR      kernel/sched/built-in.a
  CC      arch/x86/kernel/apic/init.o
  CC      kernel/dma/mapping.o
  CC      kernel/entry/common.o
  CC      block/blk-map.o
  CC      kernel/entry/syscall_user_dispatch.o
  CC      fs/proc/consoles.o
  CC      kernel/rcu/rcu_segcblist.o
  AR      arch/x86/kernel/kprobes/built-in.a
  CC      drivers/acpi/osl.o
  CC      drivers/pci/setup-bus.o
  CC      drivers/acpi/acpica/dsinit.o
  CC      drivers/acpi/utils.o
  CC      arch/x86/kernel/apic/hw_nmi.o
  CC      net/netfilter/nf_conntrack_core.o
  CC      lib/xz/xz_dec_stream.o
  CC      sound/core/vmaster.o
  LDS     arch/x86/kernel/vmlinux.lds
  CC      fs/kernfs/symlink.o
  AR      drivers/video/built-in.a
  CC      drivers/acpi/x86/lpss.o
  AS      arch/x86/kernel/head_32.o
  AR      kernel/irq/built-in.a
  CC      net/ethtool/linkinfo.o
  CC      kernel/module/main.o
  CC      arch/x86/kernel/apic/io_apic.o
  CC      arch/x86/kernel/head32.o
  CC      arch/x86/kernel/ebda.o
  CC      arch/x86/kernel/platform-quirks.o
  CC      drivers/acpi/x86/s2idle.o
  CC      kernel/time/time.o
  CC      lib/crypto/mpi/mpiutil.o
  CC      net/ethtool/linkmodes.o
  AR      security/selinux/built-in.a
  AR      net/sched/built-in.a
  AR      security/built-in.a
  CC      drivers/acpi/x86/utils.o
  CC      drivers/acpi/acpica/dsmethod.o
  CC      kernel/futex/core.o
  CC      kernel/time/timer.o
  CC      arch/x86/kernel/process_32.o
  CC      net/xfrm/xfrm_policy.o
  AR      lib/lz4/built-in.a
  CC      kernel/futex/syscalls.o
  CC      net/unix/af_unix.o
  CC      fs/proc/cpuinfo.o
  CC      net/xfrm/xfrm_state.o
  CC      arch/x86/kernel/apic/msi.o
  CC      crypto/skcipher.o
  CC      lib/xz/xz_dec_lzma2.o
  CC      net/xfrm/xfrm_hash.o
  CC      net/ipv4/protocol.o
  CC      drivers/pnp/pnpacpi/core.o
  CC      sound/core/ctljack.o
  CC      drivers/pnp/pnpacpi/rsparser.o
  CC      arch/x86/kernel/apic/probe_32.o
  CC      net/ipv4/ip_input.o
  CC      net/netfilter/nf_conntrack_standalone.o
  CC      net/ipv4/ip_fragment.o
  CC      drivers/pnp/core.o
  CC      io_uring/nop.o
  CC      net/ipv4/ip_forward.o
  CC      drivers/acpi/acpica/dsmthdat.o
  CC      arch/x86/kernel/signal.o
  CC      drivers/acpi/x86/blacklist.o
  CC      kernel/dma/direct.o
  CC      lib/zstd/decompress/zstd_decompress_block.o
  CC      arch/x86/kernel/signal_32.o
  CC      arch/x86/kernel/cpu/feat_ctl.o
  AR      kernel/entry/built-in.a
  AR      fs/kernfs/built-in.a
  CC      block/blk-merge.o
  CC      kernel/futex/pi.o
  CC      kernel/time/hrtimer.o
  AR      lib/crypto/mpi/built-in.a
  AR      lib/crypto/built-in.a
  AR      sound/parisc/built-in.a
  CC      net/core/secure_seq.o
  CC      net/core/flow_dissector.o
  AR      sound/pcmcia/vx/built-in.a
  AR      sound/pcmcia/pdaudiocf/built-in.a
  AR      sound/pcmcia/built-in.a
  CC      drivers/pnp/card.o
  CC      mm/backing-dev.o
  CC      sound/core/jack.o
  CC      fs/proc/devices.o
  CC      fs/proc/interrupts.o
  CC      net/core/sysctl_net_core.o
  CC      kernel/time/timekeeping.o
  CC      net/ethtool/rss.o
  CC      sound/core/timer.o
  CC      drivers/acpi/acpica/dsobject.o
  CC      drivers/acpi/acpica/dsopcode.o
  CC      kernel/time/ntp.o
  AR      sound/mips/built-in.a
  CC      net/unix/garbage.o
  CC      net/unix/sysctl_net_unix.o
  AR      drivers/acpi/x86/built-in.a
  CC      lib/xz/xz_dec_bcj.o
  CC      block/blk-timeout.o
  CC      kernel/futex/requeue.o
  CC      drivers/acpi/reboot.o
  CC      drivers/acpi/nvs.o
  CC      drivers/acpi/acpica/dspkginit.o
  CC      net/xfrm/xfrm_input.o
  CC      drivers/pci/vc.o
  CC      io_uring/fs.o
  CC      net/ethtool/linkstate.o
  CC      io_uring/splice.o
  CC      net/ethtool/debug.o
  CC      net/ipv4/ip_options.o
  CC      drivers/pci/mmap.o
  CC      drivers/acpi/acpica/dsutils.o
  AR      drivers/pnp/pnpacpi/built-in.a
  CC      drivers/pci/devres.o
  CC      net/ipv6/netfilter/ip6_tables.o
  CC      crypto/seqiv.o
  CC      kernel/dma/ops_helpers.o
  AR      lib/xz/built-in.a
  CC      drivers/pci/proc.o
  CC      drivers/acpi/acpica/dswexec.o
  CC      drivers/acpi/acpica/dswload.o
  CC      fs/proc/loadavg.o
  CC      net/ethtool/wol.o
  CC      drivers/pnp/driver.o
  AR      arch/x86/kernel/apic/built-in.a
  CC      kernel/time/clocksource.o
  CC      fs/sysfs/file.o
  CC      kernel/futex/waitwake.o
  CC      mm/mm_init.o
  CC      kernel/time/jiffies.o
  CC      net/core/dev.o
  CC      io_uring/sync.o
  CC      arch/x86/kernel/traps.o
  CC      fs/devpts/inode.o
  AR      kernel/rcu/built-in.a
  CC      kernel/time/timer_list.o
  CC      net/netfilter/nf_conntrack_expect.o
  CC      net/ipv4/ip_output.o
  CC      net/core/dev_addr_lists.o
  CC      drivers/pci/pci-sysfs.o
  CC      drivers/pnp/resource.o
  CC      block/blk-lib.o
  CC      sound/core/hrtimer.o
  CC      drivers/acpi/acpica/dswload2.o
  CC      block/blk-mq.o
  CC      kernel/module/strict_rwx.o
  CC      arch/x86/kernel/cpu/intel.o
  CC      net/ipv6/netfilter/ip6table_filter.o
  CC      fs/proc/meminfo.o
  CC      drivers/pnp/manager.o
  CC      drivers/pnp/support.o
  CC      kernel/dma/dummy.o
  CC      crypto/echainiv.o
  CC      crypto/ahash.o
  CC      crypto/shash.o
  CC      kernel/time/timeconv.o
  CC      net/ipv4/ip_sockglue.o
  CC      fs/proc/stat.o
  CC      kernel/cgroup/cgroup.o
  CC      kernel/trace/trace_clock.o
  CC      drivers/pci/slot.o
  CC      kernel/cgroup/rstat.o
  CC      drivers/pnp/interface.o
  CC      kernel/trace/ring_buffer.o
  CC      net/ethtool/features.o
  CC      drivers/acpi/acpica/dswscope.o
  AR      net/unix/built-in.a
  CC      arch/x86/kernel/cpu/tsx.o
  CC      kernel/bpf/core.o
  CC      sound/core/seq_device.o
  AR      kernel/futex/built-in.a
  CC      fs/sysfs/dir.o
  CC      net/packet/af_packet.o
  CC      kernel/events/core.o
  AR      net/dsa/built-in.a
  CC      kernel/time/timecounter.o
  CC      kernel/module/kmod.o
  CC      fs/sysfs/symlink.o
  CC      lib/zstd/zstd_common_module.o
  CC      fs/sysfs/mount.o
  AR      fs/devpts/built-in.a
  CC      arch/x86/kernel/cpu/intel_epb.o
  CC      kernel/time/alarmtimer.o
  CC      fs/netfs/buffered_read.o
  CC      block/blk-mq-tag.o
  CC      io_uring/msg_ring.o
  CC      kernel/trace/trace.o
  CC      kernel/trace/trace_output.o
  CC      block/blk-stat.o
  CC      kernel/trace/trace_seq.o
  CC      kernel/dma/remap.o
  CC      net/sunrpc/clnt.o
  CC      net/sunrpc/auth_gss/auth_gss.o
  CC      net/core/dst.o
  CC      drivers/acpi/acpica/dswstate.o
  CC      fs/proc/uptime.o
  CC      net/core/netevent.o
  CC      mm/percpu.o
  CC      net/sunrpc/auth_gss/gss_generic_token.o
  CC      net/sunrpc/xprt.o
  CC      net/sunrpc/socklib.o
  CC      fs/sysfs/group.o
  CC      drivers/pnp/quirks.o
  CC      lib/zstd/common/debug.o
  CC      lib/zstd/common/entropy_common.o
  CC      net/xfrm/xfrm_output.o
  CC [M]  sound/core/hwdep.o
  CC      drivers/pci/pci-acpi.o
  CC      fs/netfs/buffered_write.o
  CC      arch/x86/kernel/cpu/amd.o
  CC [M]  sound/core/pcm.o
  CC      crypto/akcipher.o
  CC      net/netfilter/nf_conntrack_helper.o
  CC      fs/ext4/balloc.o
  CC      lib/zstd/common/error_private.o
  CC      net/ipv6/netfilter/ip6table_mangle.o
  CC      lib/zstd/common/fse_decompress.o
  CC      lib/zstd/common/zstd_common.o
  CC      fs/ext4/bitmap.o
  CC      kernel/module/tree_lookup.o
  CC      drivers/acpi/acpica/evevent.o
  AR      kernel/dma/built-in.a
  CC      drivers/acpi/acpica/evgpe.o
  CC      mm/slab_common.o
  CC      kernel/module/kallsyms.o
  CC      kernel/cgroup/namespace.o
  CC      kernel/module/procfs.o
  CC      net/ethtool/privflags.o
  CC      fs/proc/util.o
  CC      arch/x86/kernel/idt.o
  CC      kernel/trace/trace_stat.o
  CC      block/blk-mq-sysfs.o
  CC      io_uring/advise.o
  AR      fs/sysfs/built-in.a
  CC      fs/jbd2/transaction.o
  CC      io_uring/epoll.o
  CC      net/core/neighbour.o
  CC      drivers/acpi/acpica/evgpeblk.o
  CC      drivers/pnp/system.o
  CC      kernel/time/posix-timers.o
  CC      block/blk-mq-cpumap.o
  AR      lib/zstd/built-in.a
  CC      arch/x86/kernel/irq.o
  CC      lib/dim/dim.o
  CC      block/blk-mq-sched.o
  CC      block/ioctl.o
  CC      net/ethtool/rings.o
  CC      fs/proc/version.o
  CC      crypto/sig.o
  CC      net/xfrm/xfrm_sysctl.o
  CC      kernel/module/sysfs.o
  CC      lib/dim/net_dim.o
  CC      arch/x86/kernel/cpu/hygon.o
  CC      fs/netfs/direct_read.o
  CC      net/ipv4/inet_hashtables.o
  CC      net/ethtool/channels.o
  CC      kernel/fork.o
  CC [M]  sound/core/pcm_native.o
  CC      drivers/acpi/acpica/evgpeinit.o
  CC      drivers/pci/iomap.o
  CC      fs/netfs/direct_write.o
  AR      drivers/pnp/built-in.a
  CC      net/core/rtnetlink.o
  AR      drivers/amba/built-in.a
  CC      drivers/pci/quirks.o
  CC      kernel/exec_domain.o
  CC      arch/x86/kernel/cpu/centaur.o
  CC      net/xfrm/xfrm_replay.o
  CC      kernel/cgroup/cgroup-v1.o
  CC      net/ipv6/netfilter/nf_defrag_ipv6_hooks.o
  CC      arch/x86/kernel/irq_32.o
  CC      drivers/acpi/wakeup.o
  CC      io_uring/statx.o
  CC      drivers/acpi/sleep.o
  CC      net/netfilter/nf_conntrack_proto.o
  CC      fs/proc/softirqs.o
  CC      arch/x86/kernel/cpu/transmeta.o
  CC      drivers/acpi/acpica/evgpeutil.o
  CC      fs/ramfs/inode.o
  AR      sound/soc/built-in.a
  CC      arch/x86/kernel/cpu/zhaoxin.o
  CC      crypto/kpp.o
  AR      sound/atmel/built-in.a
  AR      kernel/module/built-in.a
  CC      kernel/trace/trace_printk.o
  CC      fs/jbd2/commit.o
  CC      lib/dim/rdma_dim.o
  CC      net/netfilter/nf_conntrack_proto_generic.o
  CC      net/sunrpc/auth_gss/gss_mech_switch.o
  CC      net/netfilter/nf_conntrack_proto_tcp.o
  CC      fs/netfs/io.o
  CC      kernel/time/posix-cpu-timers.o
  CC [M]  sound/core/pcm_lib.o
  CC      drivers/pci/pci-label.o
  CC      block/genhd.o
  CC      drivers/acpi/device_sysfs.o
  CC      kernel/time/posix-clock.o
  CC      mm/compaction.o
  CC      kernel/time/itimer.o
  CC      drivers/acpi/acpica/evglock.o
  CC      kernel/cgroup/freezer.o
  CC      net/netfilter/nf_conntrack_proto_udp.o
  CC      fs/proc/namespaces.o
  CC      net/ethtool/coalesce.o
  CC      block/ioprio.o
  CC      fs/jbd2/recovery.o
  AR      kernel/bpf/built-in.a
  CC      fs/proc/self.o
  CC      arch/x86/kernel/cpu/vortex.o
  CC      fs/proc/thread_self.o
  AR      lib/dim/built-in.a
  CC      lib/fonts/fonts.o
  CC      fs/ext4/block_validity.o
  CC      io_uring/timeout.o
  CC      fs/ramfs/file-mmu.o
  CC      drivers/acpi/acpica/evhandler.o
  CC      net/ipv6/netfilter/nf_conntrack_reasm.o
  CC      net/xfrm/xfrm_device.o
  CC      arch/x86/kernel/cpu/perfctr-watchdog.o
  ASN.1   crypto/rsapubkey.asn1.[ch]
  ASN.1   crypto/rsaprivkey.asn1.[ch]
  CC      crypto/rsa.o
  CC      lib/fonts/font_8x16.o
  CC      kernel/cgroup/legacy_freezer.o
  AR      net/packet/built-in.a
  CC      kernel/cgroup/pids.o
  AR      sound/hda/built-in.a
  AR      sound/x86/built-in.a
  CC      drivers/acpi/device_pm.o
  CC [M]  sound/hda/hda_bus_type.o
  AR      sound/xen/built-in.a
  AR      sound/virtio/built-in.a
  CC      kernel/trace/pid_list.o
  CC      drivers/pci/vgaarb.o
  CC      drivers/acpi/acpica/evmisc.o
  CC      block/badblocks.o
  CC      kernel/panic.o
  CC [M]  sound/core/pcm_misc.o
  CC      mm/show_mem.o
  CC      net/sunrpc/auth_gss/svcauth_gss.o
  CC      sound/sound_core.o
  CC      net/netfilter/nf_conntrack_proto_icmp.o
  CC      fs/proc/proc_sysctl.o
  CC      net/ipv4/inet_timewait_sock.o
  AR      lib/fonts/built-in.a
  CC      lib/argv_split.o
  CC      kernel/cpu.o
  AR      fs/ramfs/built-in.a
  CC      kernel/time/clockevents.o
  CC      kernel/cgroup/rdma.o
  AR      net/wireless/tests/built-in.a
  CC      net/wireless/core.o
  CC [M]  sound/hda/hdac_bus.o
  CC      fs/netfs/iterator.o
  CC      net/wireless/sysfs.o
  CC      fs/ext4/dir.o
  CC      net/wireless/radiotap.o
  AR      net/mac80211/tests/built-in.a
  CC      net/wireless/util.o
  CC      fs/jbd2/checkpoint.o
  CC      net/mac80211/main.o
  CC      kernel/exit.o
  CC      drivers/acpi/acpica/evregion.o
  CC      kernel/softirq.o
  CC      crypto/rsa_helper.o
  CC      net/wireless/reg.o
  CC      net/wireless/scan.o
  CC      arch/x86/kernel/cpu/vmware.o
  CC      arch/x86/kernel/cpu/hypervisor.o
  CC      fs/jbd2/revoke.o
  CC      net/ethtool/pause.o
  CC      lib/bug.o
  CC      net/sunrpc/auth_gss/gss_rpc_upcall.o
  CC      crypto/rsa-pkcs1pad.o
  CC      net/netlabel/netlabel_user.o
  CC      io_uring/fdinfo.o
  CC      net/core/utils.o
  CC      net/rfkill/core.o
  CC      kernel/resource.o
  CC      net/xfrm/xfrm_nat_keepalive.o
  CC      net/sunrpc/auth_gss/gss_rpc_xdr.o
  CC      net/netlabel/netlabel_kapi.o
  CC      kernel/trace/trace_sched_switch.o
  CC [M]  sound/core/pcm_memory.o
  CC      fs/hugetlbfs/inode.o
  CC      drivers/acpi/acpica/evrgnini.o
  CC      kernel/time/tick-common.o
  CC      kernel/cgroup/cpuset.o
  CC      net/ethtool/eee.o
  CC [M]  sound/core/memalloc.o
  CC      block/blk-rq-qos.o
  CC [M]  sound/hda/hdac_device.o
  AR      drivers/pci/built-in.a
  CC      net/ipv6/netfilter/nf_reject_ipv6.o
  CC      fs/jbd2/journal.o
  CC      block/disk-events.o
  CC      arch/x86/kernel/cpu/mshyperv.o
  CC      fs/ext4/ext4_jbd2.o
  CC      lib/buildid.o
  CC      fs/netfs/locking.o
  CC      net/netfilter/nf_conntrack_extend.o
  CC      net/ipv4/inet_connection_sock.o
  CC      fs/netfs/main.o
  CC      drivers/acpi/acpica/evsci.o
  CC      drivers/acpi/acpica/evxface.o
  CC      crypto/acompress.o
  CC      kernel/events/ring_buffer.o
  CC      kernel/cgroup/misc.o
  CC      fs/proc/proc_net.o
  CC [M]  sound/core/pcm_timer.o
  CC      io_uring/cancel.o
  LD [M]  sound/core/snd-hwdep.o
  CC      net/ipv4/tcp.o
  CC      mm/shmem_quota.o
  CC      net/rfkill/input.o
  CC      crypto/scompress.o
  CC      net/sunrpc/auth_gss/trace.o
  CC      block/blk-ia-ranges.o
  CC      net/ethtool/tsinfo.o
  CC      net/core/link_watch.o
  CC      kernel/time/tick-broadcast.o
  CC      kernel/cgroup/debug.o
  CC      fs/ext4/extents.o
  CC      drivers/acpi/acpica/evxfevnt.o
  CC      lib/clz_tab.o
  CC      net/xfrm/xfrm_algo.o
  CC      lib/cmdline.o
  CC      net/wireless/nl80211.o
  CC      net/sunrpc/auth_gss/gss_krb5_mech.o
  CC      net/core/filter.o
  CC [M]  sound/hda/hdac_sysfs.o
  CC      lib/cpumask.o
  AR      fs/hugetlbfs/built-in.a
  CC      lib/ctype.o
  CC      fs/ext4/extents_status.o
  CC      net/core/sock_diag.o
  CC      net/netlabel/netlabel_domainhash.o
  CC [M]  sound/hda/hdac_regmap.o
  CC      arch/x86/kernel/cpu/debugfs.o
  CC      net/ethtool/cabletest.o
  CC      block/early-lookup.o
  AR      sound/core/built-in.a
  LD [M]  sound/core/snd-pcm.o
  CC      sound/last.o
  AR      net/rfkill/built-in.a
  CC      net/9p/mod.o
  CC      net/dns_resolver/dns_key.o
  CC      kernel/trace/trace_nop.o
  CC      mm/interval_tree.o
  CC      drivers/acpi/acpica/evxfgpe.o
  CC      kernel/sysctl.o
  CC      fs/proc/kcore.o
  CC      kernel/events/callchain.o
  CC      net/netfilter/nf_conntrack_acct.o
  CC      net/netfilter/nf_conntrack_seqadj.o
  CC      io_uring/waitid.o
  CC      net/ipv6/netfilter/ip6t_ipv6header.o
  CC      block/bounce.o
  CC      kernel/time/tick-broadcast-hrtimer.o
  CC      net/ethtool/tunnels.o
  CC      mm/list_lru.o
  CC      crypto/algboss.o
  CC      net/handshake/alert.o
  CC      lib/dec_and_lock.o
  CC      net/sunrpc/xprtsock.o
  CC      arch/x86/kernel/cpu/capflags.o
  AR      arch/x86/kernel/cpu/built-in.a
  CC      arch/x86/kernel/dumpstack_32.o
  CC      net/handshake/genl.o
  CC      drivers/acpi/acpica/evxfregn.o
  CC      net/9p/client.o
  CC      net/handshake/netlink.o
  CC      lib/decompress.o
  CC [M]  sound/hda/hdac_controller.o
  CC      block/bsg.o
  CC      net/dns_resolver/dns_query.o
  CC      net/wireless/mlme.o
  CC      lib/decompress_bunzip2.o
  CC      fs/netfs/misc.o
  CC      net/wireless/ibss.o
  CC      kernel/time/tick-oneshot.o
  CC [M]  sound/hda/hdac_stream.o
  CC      net/xfrm/xfrm_user.o
  CC      kernel/trace/blktrace.o
  AR      kernel/cgroup/built-in.a
  CC      kernel/capability.o
  CC      fs/proc/vmcore.o
  CC      net/sunrpc/sched.o
  CC      drivers/acpi/acpica/exconcat.o
  CC      kernel/events/hw_breakpoint.o
  CC      net/sunrpc/auth.o
  CC      drivers/acpi/proc.o
  CC      net/sunrpc/auth_null.o
  CC      net/netlabel/netlabel_addrlist.o
  CC      net/mac80211/status.o
  CC      mm/workingset.o
  CC      io_uring/register.o
  CC      net/sunrpc/auth_tls.o
  CC      kernel/time/tick-sched.o
  CC      arch/x86/kernel/time.o
  CC      crypto/testmgr.o
  AR      fs/jbd2/built-in.a
  CC      kernel/time/timer_migration.o
  CC      lib/decompress_inflate.o
  CC      block/blk-cgroup.o
  CC      block/blk-ioprio.o
  CC      net/netfilter/nf_conntrack_proto_icmpv6.o
  CC      net/netfilter/nf_conntrack_netlink.o
  CC      net/ipv4/tcp_input.o
  AR      net/dns_resolver/built-in.a
  CC      drivers/acpi/acpica/exconfig.o
  CC      kernel/time/vsyscall.o
  CC      net/ipv6/netfilter/ip6t_REJECT.o
  CC      net/ethtool/fec.o
  CC      net/core/dev_ioctl.o
  CC      lib/decompress_unlz4.o
  CC      arch/x86/kernel/ioport.o
  CC      fs/netfs/objects.o
  CC      lib/decompress_unlzma.o
  CC [M]  sound/hda/array.o
  CC      net/devres.o
  CC      net/netlabel/netlabel_mgmt.o
  CC      net/sunrpc/auth_gss/gss_krb5_seal.o
  CC      net/handshake/request.o
  CC      net/netlabel/netlabel_unlabeled.o
  CC      crypto/cmac.o
  CC      lib/decompress_unlzo.o
  CC      lib/decompress_unxz.o
  CC      drivers/acpi/acpica/exconvrt.o
  CC      net/ethtool/eeprom.o
  CC      fs/proc/kmsg.o
  CC      mm/debug.o
  CC      net/sunrpc/auth_unix.o
  CC      block/blk-iolatency.o
  CC      lib/decompress_unzstd.o
  CC      kernel/events/uprobes.o
  CC      net/wireless/sme.o
  CC      net/sunrpc/svc.o
  CC      fs/proc/page.o
  CC      drivers/acpi/bus.o
  CC [M]  sound/hda/hdmi_chmap.o
  CC      kernel/trace/trace_events.o
  CC      drivers/acpi/glue.o
  CC      drivers/acpi/acpica/excreate.o
  CC      net/9p/error.o
  CC      crypto/hmac.o
  CC      arch/x86/kernel/dumpstack.o
  AR      drivers/clk/actions/built-in.a
  CC      net/sunrpc/auth_gss/gss_krb5_unseal.o
  AR      drivers/clk/analogbits/built-in.a
  CC      net/sunrpc/auth_gss/gss_krb5_wrap.o
  AR      drivers/clk/bcm/built-in.a
  CC      fs/ext4/file.o
  AR      drivers/clk/imgtec/built-in.a
  CC      net/wireless/chan.o
  CC      net/ipv6/af_inet6.o
  AR      drivers/clk/imx/built-in.a
  AR      drivers/clk/ingenic/built-in.a
  AR      drivers/clk/mediatek/built-in.a
  CC      fs/fat/cache.o
  AR      drivers/clk/microchip/built-in.a
  AR      drivers/clk/mstar/built-in.a
  CC      net/ethtool/stats.o
  AR      drivers/clk/mvebu/built-in.a
  CC      lib/dump_stack.o
  AR      drivers/clk/ralink/built-in.a
  AR      net/ipv6/netfilter/built-in.a
  AR      drivers/clk/renesas/built-in.a
  CC      net/ipv4/tcp_output.o
  AR      drivers/clk/socfpga/built-in.a
  CC      io_uring/truncate.o
  CC      fs/netfs/write_collect.o
  AR      drivers/clk/sprd/built-in.a
  AR      drivers/clk/sophgo/built-in.a
  CC      net/socket.o
  CC      kernel/time/timekeeping_debug.o
  AR      drivers/clk/starfive/built-in.a
  AR      drivers/clk/sunxi-ng/built-in.a
  AR      drivers/clk/ti/built-in.a
  CC      drivers/acpi/acpica/exdebug.o
  CC      fs/ext4/fsmap.o
  AR      drivers/clk/versatile/built-in.a
  AR      drivers/clk/xilinx/built-in.a
  AR      drivers/clk/built-in.a
  CC      net/9p/protocol.o
  CC      net/sysctl_net.o
  CC      net/core/tso.o
  CC      net/netlabel/netlabel_cipso_v4.o
  CC      mm/gup.o
  AR      fs/proc/built-in.a
  CC      mm/mmap_lock.o
  CC      fs/isofs/namei.o
  CC      mm/highmem.o
  CC      net/handshake/tlshd.o
  CC      net/sunrpc/auth_gss/gss_krb5_crypto.o
  CC      crypto/crypto_null.o
  CC      net/sunrpc/svcsock.o
  CC      drivers/acpi/acpica/exdump.o
  AR      net/xfrm/built-in.a
  CC      arch/x86/kernel/nmi.o
  CC      crypto/md5.o
  CC      fs/isofs/inode.o
  CC      fs/nfs/client.o
  CC      fs/isofs/dir.o
  CC [M]  sound/hda/trace.o
  CC      lib/earlycpio.o
  CC      drivers/acpi/scan.o
  CC      kernel/time/namespace.o
  CC      lib/extable.o
  CC      fs/fat/dir.o
  CC      fs/ext4/fsync.o
  CC      block/blk-iocost.o
  CC      net/handshake/trace.o
  CC      drivers/acpi/acpica/exfield.o
  CC      net/netfilter/nf_conntrack_ftp.o
  CC      net/9p/trans_common.o
  CC      net/sunrpc/svcauth.o
  CC      io_uring/memmap.o
  AR      kernel/events/built-in.a
  CC      block/mq-deadline.o
  CC      fs/exportfs/expfs.o
  CC      fs/ext4/hash.o
  CC      fs/lockd/clntlock.o
  CC      net/ethtool/phc_vclocks.o
  CC      net/ethtool/mm.o
  CC      crypto/sha256_generic.o
  CC      lib/flex_proportions.o
  CC      mm/memory.o
  CC      net/wireless/ethtool.o
  CC      drivers/acpi/acpica/exfldio.o
  CC      fs/isofs/util.o
  CC      mm/mincore.o
  CC      mm/mlock.o
  CC      crypto/sha512_generic.o
  AR      kernel/time/built-in.a
  CC      kernel/ptrace.o
  CC      net/mac80211/driver-ops.o
  CC      arch/x86/kernel/ldt.o
  CC      net/ipv6/anycast.o
  CC      net/sunrpc/auth_gss/gss_krb5_keys.o
  CC      drivers/dma/dw/core.o
  CC      fs/netfs/write_issue.o
  CC      net/netlabel/netlabel_calipso.o
  CC      net/9p/trans_fd.o
  CC [M]  sound/hda/hdac_component.o
  CC      lib/idr.o
  AR      fs/exportfs/built-in.a
  CC      fs/isofs/rock.o
  CC      drivers/dma/hsu/hsu.o
  CC      io_uring/io-wq.o
  CC      crypto/sha3_generic.o
  CC      drivers/acpi/acpica/exmisc.o
  CC      kernel/trace/trace_export.o
  CC      crypto/ecb.o
  AR      drivers/dma/idxd/built-in.a
  AR      drivers/soc/apple/built-in.a
  AR      drivers/soc/aspeed/built-in.a
  AR      drivers/soc/bcm/built-in.a
  AR      drivers/soc/fsl/built-in.a
  AR      drivers/dma/mediatek/built-in.a
  AR      drivers/soc/fujitsu/built-in.a
  AR      drivers/dma/qcom/built-in.a
  AR      drivers/soc/hisilicon/built-in.a
  AR      drivers/soc/imx/built-in.a
  CC      fs/isofs/export.o
  AR      drivers/soc/loongson/built-in.a
  AR      drivers/soc/ixp4xx/built-in.a
  CC      fs/ext4/ialloc.o
  CC      fs/ext4/indirect.o
  AR      drivers/soc/mediatek/built-in.a
  CC      drivers/virtio/virtio.o
  CC      fs/nfs/dir.o
  AR      drivers/soc/microchip/built-in.a
  AR      drivers/soc/nuvoton/built-in.a
  CC      fs/fat/fatent.o
  AR      drivers/soc/pxa/built-in.a
  CC      drivers/virtio/virtio_ring.o
  AR      drivers/soc/amlogic/built-in.a
  CC      lib/irq_regs.o
  CC      net/ethtool/module.o
  CC      net/ethtool/cmis_fw_update.o
  CC      lib/is_single_threaded.o
  AR      drivers/soc/qcom/built-in.a
  AR      drivers/dma/stm32/built-in.a
  AR      drivers/soc/renesas/built-in.a
  CC      kernel/trace/trace_event_perf.o
  AR      drivers/soc/rockchip/built-in.a
  AR      net/handshake/built-in.a
  AR      drivers/soc/sunxi/built-in.a
  CC      fs/lockd/clntproc.o
  CC      crypto/cbc.o
  AR      drivers/soc/ti/built-in.a
  CC      drivers/acpi/acpica/exmutex.o
  AR      drivers/soc/xilinx/built-in.a
  CC [M]  sound/hda/hdac_i915.o
  AR      drivers/soc/built-in.a
  CC      net/netfilter/nf_conntrack_irc.o
  CC      crypto/ctr.o
  CC      arch/x86/kernel/setup.o
  CC      mm/mmap.o
  CC      net/9p/trans_virtio.o
  CC      net/sunrpc/svcauth_unix.o
  CC      block/kyber-iosched.o
  AR      net/sunrpc/auth_gss/built-in.a
  CC      net/sunrpc/addr.o
  CC      mm/mmu_gather.o
  CC      kernel/user.o
  CC      drivers/acpi/acpica/exnames.o
  AR      net/netlabel/built-in.a
  CC      fs/isofs/joliet.o
  CC      lib/klist.o
  AR      drivers/dma/hsu/built-in.a
  CC      kernel/trace/trace_events_filter.o
  CC      lib/kobject.o
  CC      drivers/dma/dw/dw.o
  CC      fs/ext4/inline.o
  CC      fs/ext4/inode.o
  CC      fs/isofs/compress.o
  CC      net/wireless/mesh.o
  AR      fs/netfs/built-in.a
  CC      fs/nls/nls_base.o
  CC      net/ipv6/ip6_output.o
  CC      crypto/gcm.o
  CC      fs/nls/nls_cp437.o
  CC      drivers/virtio/virtio_anchor.o
  CC      lib/kobject_uevent.o
  CC [M]  sound/hda/intel-dsp-config.o
  CC      fs/ext4/ioctl.o
  CC      drivers/acpi/acpica/exoparg1.o
  AR      drivers/dma/ti/built-in.a
  AR      drivers/dma/xilinx/built-in.a
  CC      io_uring/futex.o
  CC      kernel/trace/trace_events_trigger.o
  CC      drivers/dma/dmaengine.o
  CC      net/netfilter/nf_conntrack_sip.o
  CC      fs/nfs/file.o
  CC      fs/nfs/getroot.o
  CC      net/ipv4/tcp_timer.o
  CC      fs/nfs/inode.o
  CC [M]  sound/hda/intel-nhlt.o
  CC      fs/nls/nls_ascii.o
  CC      fs/fat/file.o
  CC      drivers/dma/dw/idma32.o
  CC [M]  sound/hda/intel-sdw-acpi.o
  CC      drivers/tty/vt/vt_ioctl.o
  CC      drivers/acpi/mipi-disco-img.o
  CC      kernel/trace/trace_eprobe.o
  CC      drivers/acpi/resource.o
  CC      drivers/acpi/acpi_processor.o
  CC      net/ethtool/cmis_cdb.o
  CC      arch/x86/kernel/x86_init.o
  CC      mm/mprotect.o
  CC      fs/lockd/clntxdr.o
  LD [M]  sound/hda/snd-hda-core.o
  CC      drivers/acpi/acpica/exoparg2.o
  CC      drivers/virtio/virtio_pci_modern_dev.o
  AR      fs/isofs/built-in.a
  CC      fs/nfs/super.o
  CC      drivers/virtio/virtio_pci_legacy_dev.o
  CC      fs/nls/nls_iso8859-1.o
  AR      net/9p/built-in.a
  CC      fs/nfs/io.o
  CC      fs/nls/nls_utf8.o
  LD [M]  sound/hda/snd-intel-dspcfg.o
  CC      fs/nfs/direct.o
  CC      crypto/ccm.o
  LD [M]  sound/hda/snd-intel-sdw-acpi.o
  AR      sound/built-in.a
  CC      block/blk-mq-pci.o
  CC      fs/ext4/mballoc.o
  CC      drivers/acpi/acpica/exoparg3.o
  CC      net/core/sock_reuseport.o
  CC      drivers/dma/dw/acpi.o
  CC      lib/logic_pio.o
  CC      block/blk-mq-virtio.o
  CC      io_uring/napi.o
  CC      fs/ext4/migrate.o
  CC      fs/nfs/pagelist.o
  CC      net/ipv4/tcp_ipv4.o
  AR      fs/nls/built-in.a
  CC      fs/fat/inode.o
  CC      drivers/acpi/acpica/exoparg6.o
  CC      arch/x86/kernel/i8259.o
  CC      fs/ext4/mmp.o
  CC      fs/ext4/move_extent.o
  CC      net/mac80211/sta_info.o
  CC      net/mac80211/wep.o
  CC      net/mac80211/aead_api.o
  CC      fs/fat/misc.o
  CC      net/ipv4/tcp_minisocks.o
  AR      fs/unicode/built-in.a
  CC      drivers/virtio/virtio_pci_modern.o
  CC      fs/autofs/init.o
  CC      drivers/virtio/virtio_pci_common.o
  CC      drivers/acpi/acpica/exprep.o
  CC      drivers/tty/vt/vc_screen.o
  CC      fs/ext4/namei.o
  CC      drivers/acpi/acpica/exregion.o
  CC      block/blk-mq-debugfs.o
  CC      drivers/acpi/processor_core.o
  CC      fs/autofs/inode.o
  CC      kernel/trace/trace_kprobe.o
  CC      net/ethtool/pse-pd.o
  CC      fs/lockd/host.o
  AR      drivers/dma/dw/built-in.a
  CC      drivers/dma/virt-dma.o
  CC      fs/lockd/svc.o
  CC      lib/maple_tree.o
  CC      block/blk-pm.o
  CC      mm/mremap.o
  CC      crypto/aes_generic.o
  CC      fs/9p/vfs_super.o
  CC      arch/x86/kernel/irqinit.o
  AR      fs/hostfs/built-in.a
  CC      net/core/fib_notifier.o
  CC      fs/nfs/read.o
  CC      fs/debugfs/inode.o
  CC      net/sunrpc/rpcb_clnt.o
  CC      drivers/acpi/acpica/exresnte.o
  CC      net/netfilter/nf_nat_core.o
  CC      fs/debugfs/file.o
  CC      fs/ext4/page-io.o
  CC      arch/x86/kernel/jump_label.o
  CC      drivers/acpi/acpica/exresolv.o
  CC      net/core/xdp.o
  CC      net/netfilter/nf_nat_proto.o
  CC      net/ipv4/tcp_cong.o
  CC      drivers/virtio/virtio_pci_legacy.o
  CC      fs/autofs/root.o
  CC      drivers/acpi/acpica/exresop.o
  CC      net/ipv6/ip6_input.o
  CC      drivers/dma/acpi-dma.o
  CC      net/mac80211/wpa.o
  CC      fs/nfs/symlink.o
  CC      drivers/tty/vt/selection.o
  CC      net/ipv4/tcp_metrics.o
  CC      net/netfilter/nf_nat_helper.o
  CC      block/holder.o
  CC      fs/nfs/unlink.o
  CC      drivers/virtio/virtio_pci_admin_legacy_io.o
  AR      io_uring/built-in.a
  CC      fs/9p/vfs_inode.o
  CC      fs/fat/nfs.o
  CC      arch/x86/kernel/irq_work.o
  CC      drivers/virtio/virtio_input.o
  CC      fs/fat/namei_vfat.o
  CC      crypto/crc32c_generic.o
  CC      mm/msync.o
  CC      net/ethtool/plca.o
  CC      drivers/acpi/acpica/exserial.o
  CC      mm/page_vma_mapped.o
  CC      crypto/authenc.o
  CC      net/mac80211/scan.o
  CC      net/sunrpc/timer.o
  CC      net/core/flow_offload.o
  CC      fs/nfs/write.o
  CC      net/ipv6/addrconf.o
  CC      lib/memcat_p.o
  CC      fs/lockd/svclock.o
  AR      drivers/dma/built-in.a
  CC      net/ipv6/addrlabel.o
  CC      crypto/authencesn.o
  CC      net/core/gro.o
  CC      drivers/acpi/acpica/exstore.o
  AR      block/built-in.a
  CC      net/sunrpc/xdr.o
  CC      fs/autofs/symlink.o
  CC      drivers/tty/vt/keyboard.o
  AR      fs/debugfs/built-in.a
  CC      net/sunrpc/sunrpc_syms.o
  CC      net/sunrpc/cache.o
  CC      kernel/signal.o
  CC      net/sunrpc/rpc_pipe.o
  CC      fs/fat/namei_msdos.o
  CC      drivers/virtio/virtio_dma_buf.o
  CC      net/wireless/ap.o
  CC      kernel/trace/error_report-traces.o
  CC      mm/pagewalk.o
  CC      mm/pgtable-generic.o
  CC      drivers/acpi/acpica/exstoren.o
  CC      net/wireless/trace.o
  CC      kernel/trace/power-traces.o
  CC      fs/9p/vfs_inode_dotl.o
  CC      drivers/acpi/processor_pdc.o
  CC      arch/x86/kernel/probe_roms.o
  CC      arch/x86/kernel/sys_ia32.o
  CC      fs/tracefs/inode.o
  CC      net/netfilter/nf_nat_masquerade.o
  CC      fs/open.o
  CC [M]  fs/efivarfs/inode.o
  AR      net/ethtool/built-in.a
  CC      fs/read_write.o
  CC      net/mac80211/offchannel.o
  CC [M]  fs/efivarfs/file.o
  CC      mm/rmap.o
  CC      fs/lockd/svcshare.o
  CC      fs/autofs/waitq.o
  AR      drivers/virtio/built-in.a
  CC      fs/autofs/expire.o
  CC      drivers/tty/hvc/hvc_console.o
  CC      drivers/acpi/acpica/exstorob.o
  CC      net/core/netdev-genl.o
  CC      crypto/lzo.o
  CC      fs/lockd/svcproc.o
  CC      net/ipv4/tcp_fastopen.o
  CC      fs/nfs/namespace.o
  CC      net/netfilter/nf_nat_ftp.o
  CC      net/sunrpc/sysfs.o
  CC      mm/vmalloc.o
  CC      drivers/acpi/ec.o
  AR      fs/fat/built-in.a
  CC      net/ipv4/tcp_rate.o
  CC      kernel/trace/rpm-traces.o
  CC      fs/autofs/dev-ioctl.o
  CC      fs/nfs/mount_clnt.o
  CC      arch/x86/kernel/ksysfs.o
  CC      drivers/acpi/dock.o
  CC      crypto/lzo-rle.o
  CC      drivers/acpi/acpica/exsystem.o
  CC      fs/tracefs/event_inode.o
  CC [M]  fs/efivarfs/super.o
  CC      fs/9p/vfs_addr.o
  CC      fs/nfs/nfstrace.o
  CC      fs/nfs/export.o
  CC      drivers/tty/vt/vt.o
  CC      drivers/acpi/pci_root.o
  CC      fs/ext4/readpage.o
  CC      net/sunrpc/svc_xprt.o
  CC      fs/9p/vfs_file.o
  AR      drivers/tty/hvc/built-in.a
  CC      drivers/tty/serial/8250/8250_core.o
  CC      drivers/acpi/acpica/extrace.o
  CC      drivers/tty/serial/8250/8250_platform.o
  CC      drivers/tty/serial/serial_core.o
  CC      drivers/acpi/pci_link.o
  CC      drivers/acpi/pci_irq.o
  CC      arch/x86/kernel/bootflag.o
  CC      crypto/rng.o
  CC      fs/ext4/resize.o
  AR      fs/autofs/built-in.a
  CC      mm/process_vm_access.o
  CC      fs/lockd/svcsubs.o
  CC      net/sunrpc/xprtmultipath.o
  CC      crypto/drbg.o
  CC      arch/x86/kernel/e820.o
  CC      kernel/trace/trace_dynevent.o
  CC [M]  fs/efivarfs/vars.o
  CC      drivers/acpi/acpica/exutils.o
  CC      net/netfilter/nf_nat_irc.o
  CC      drivers/tty/serial/8250/8250_pnp.o
  CC      net/mac80211/ht.o
  CC      drivers/tty/serial/serial_base_bus.o
  CC      lib/nmi_backtrace.o
  CC      net/ipv4/tcp_recovery.o
  COPY    drivers/tty/vt/defkeymap.c
  CC      drivers/tty/vt/consolemap.o
  CC      net/ipv4/tcp_ulp.o
  CC      net/sunrpc/stats.o
  AR      fs/tracefs/built-in.a
  CC      net/core/netdev-genl-gen.o
  CC      net/ipv4/tcp_offload.o
  CC      fs/9p/vfs_dir.o
  CC      fs/9p/vfs_dentry.o
  CC      fs/ext4/super.o
  CC      drivers/acpi/acpica/hwacpi.o
  CC      drivers/tty/serial/serial_ctrl.o
  CC      drivers/acpi/acpi_apd.o
  CC      net/mac80211/agg-tx.o
  CC      fs/ext4/symlink.o
  CC      drivers/acpi/acpica/hwesleep.o
  CC      drivers/acpi/acpica/hwgpe.o
  CC      fs/ext4/sysfs.o
  CC      drivers/acpi/acpi_platform.o
  CC      lib/objpool.o
  CC      net/mac80211/agg-rx.o
  CC      net/sunrpc/sysctl.o
  LD [M]  fs/efivarfs/efivarfs.o
  CC      mm/page_alloc.o
  CC      fs/file_table.o
  CC      drivers/acpi/acpica/hwregs.o
  CC      drivers/tty/serial/8250/8250_rsa.o
  CC      net/mac80211/vht.o
  CC      net/mac80211/he.o
  CC      fs/9p/v9fs.o
  CC      crypto/jitterentropy.o
  CC      drivers/acpi/acpi_pnp.o
  CC      crypto/jitterentropy-kcapi.o
  CC      kernel/trace/trace_probe.o
  CC      net/ipv6/route.o
  CC      crypto/ghash-generic.o
  CC      net/netfilter/nf_nat_sip.o
  CC      drivers/acpi/power.o
  CC      net/wireless/ocb.o
  CC      fs/nfs/sysfs.o
  CC      net/core/gso.o
  CC      fs/lockd/mon.o
  CC      fs/lockd/trace.o
  AR      drivers/tty/ipwireless/built-in.a
  CC      drivers/tty/tty_io.o
  CC      fs/nfs/fs_context.o
  CC      arch/x86/kernel/pci-dma.o
  CC      fs/ext4/xattr.o
  CC      net/core/net-sysfs.o
  CC      net/netfilter/x_tables.o
  CC      crypto/hash_info.o
  CC      drivers/acpi/acpica/hwsleep.o
  CC      drivers/char/hw_random/core.o
  AR      drivers/iommu/amd/built-in.a
  AR      drivers/iommu/intel/built-in.a
  AR      drivers/iommu/arm/arm-smmu/built-in.a
  CC      fs/nfs/nfsroot.o
  CC      drivers/char/hw_random/intel-rng.o
  AR      drivers/iommu/arm/arm-smmu-v3/built-in.a
  CC      drivers/char/mem.o
  CC      drivers/char/agp/backend.o
  CC      drivers/char/random.o
  AR      drivers/iommu/arm/built-in.a
  CC      fs/ext4/xattr_hurd.o
  CC      drivers/acpi/event.o
  CC      drivers/tty/serial/8250/8250_port.o
  CC      crypto/rsapubkey.asn1.o
  CC      crypto/rsaprivkey.asn1.o
  AR      drivers/iommu/iommufd/built-in.a
  AR      crypto/built-in.a
  CC      drivers/iommu/iommu.o
  CC      net/mac80211/s1g.o
  CC      net/mac80211/ibss.o
  CC      drivers/tty/serial/serial_port.o
  CC      drivers/tty/serial/earlycon.o
  CC      fs/super.o
  CC      fs/9p/fid.o
  CC      fs/char_dev.o
  CC      drivers/acpi/acpica/hwvalid.o
  CC      lib/plist.o
  CC      net/wireless/pmsr.o
  CC      drivers/acpi/evged.o
  CC      net/ipv4/tcp_plb.o
  CC      lib/radix-tree.o
  HOSTCC  drivers/tty/vt/conmakehash
  CC      arch/x86/kernel/quirks.o
  CC      net/mac80211/iface.o
  CC      net/core/hotdata.o
  CC      drivers/tty/vt/defkeymap.o
  CC      drivers/char/hw_random/amd-rng.o
  CC      drivers/char/hw_random/geode-rng.o
  CC      kernel/trace/trace_uprobe.o
  CC      drivers/acpi/acpica/hwxface.o
  CC      fs/lockd/xdr.o
  CC      fs/9p/xattr.o
  CC      drivers/char/agp/generic.o
  CC      net/ipv4/datagram.o
  CC      drivers/acpi/sysfs.o
  CONMK   drivers/tty/vt/consolemap_deftbl.c
  CC      arch/x86/kernel/kdebugfs.o
  CC      drivers/tty/vt/consolemap_deftbl.o
  AR      drivers/tty/vt/built-in.a
  CC      drivers/tty/n_tty.o
  CC      drivers/tty/tty_ioctl.o
  CC      arch/x86/kernel/alternative.o
  CC      drivers/char/agp/isoch.o
  CC      drivers/acpi/acpica/hwxfsleep.o
  CC      drivers/char/agp/amd64-agp.o
  CC      fs/stat.o
  CC      drivers/char/agp/intel-agp.o
  CC      net/ipv4/raw.o
  AR      net/sunrpc/built-in.a
  CC      drivers/acpi/acpica/hwpci.o
  CC      fs/exec.o
  CC      mm/init-mm.o
  CC      net/mac80211/link.o
  CC      fs/ext4/xattr_trusted.o
  CC      lib/ratelimit.o
  CC      drivers/char/hw_random/via-rng.o
  CC      drivers/acpi/property.o
  CC      kernel/trace/rethook.o
  CC      net/ipv4/udp.o
  CC      drivers/acpi/acpica/nsaccess.o
  AR      fs/9p/built-in.a
  CC      drivers/acpi/acpica/nsalloc.o
  CC      drivers/acpi/acpica/nsarguments.o
  CC      lib/rbtree.o
  CC      fs/pipe.o
  CC      net/mac80211/rate.o
  CC      net/ipv4/udplite.o
  CC      net/core/net-procfs.o
  CC      net/netfilter/xt_tcpudp.o
  CC      drivers/tty/serial/8250/8250_dma.o
  CC      fs/namei.o
  AR      drivers/char/hw_random/built-in.a
  CC      net/core/netpoll.o
  CC      drivers/iommu/iommu-traces.o
  CC      drivers/char/agp/intel-gtt.o
  CC      mm/memblock.o
  CC      fs/ext4/xattr_user.o
  CC      drivers/tty/serial/8250/8250_dwlib.o
  CC      fs/fcntl.o
  CC      net/mac80211/michael.o
  CC      net/ipv4/udp_offload.o
  CC      drivers/char/misc.o
  CC      drivers/char/virtio_console.o
  CC      lib/seq_buf.o
  CC      drivers/acpi/acpica/nsconvert.o
  CC      drivers/tty/tty_ldisc.o
  CC      drivers/tty/serial/8250/8250_pcilib.o
  CC      fs/lockd/clnt4xdr.o
  CC      fs/nfs/sysctl.o
  CC      net/mac80211/tkip.o
  CC      fs/lockd/xdr4.o
  CC      net/mac80211/aes_cmac.o
  CC      net/mac80211/aes_gmac.o
  CC      mm/slub.o
  CC      fs/ioctl.o
  CC      fs/readdir.o
  CC      arch/x86/kernel/i8253.o
  CC      drivers/acpi/debugfs.o
  CC      drivers/acpi/acpica/nsdump.o
  CC      mm/madvise.o
  CC      net/netfilter/xt_CONNSECMARK.o
  GEN     net/wireless/shipped-certs.c
  CC      kernel/sys.o
  CC      kernel/umh.o
  CC      lib/siphash.o
  AR      drivers/gpu/host1x/built-in.a
  AR      kernel/trace/built-in.a
  CC      drivers/tty/serial/8250/8250_early.o
  CC      drivers/tty/serial/8250/8250_exar.o
  CC      net/netfilter/xt_NFLOG.o
  AR      drivers/gpu/vga/built-in.a
  CC      net/ipv4/arp.o
  CC      net/ipv6/ip6_fib.o
  CC      net/ipv6/ipv6_sockglue.o
  CC      mm/page_io.o
  CC      drivers/acpi/acpica/nseval.o
  CC      arch/x86/kernel/hw_breakpoint.o
  CC      mm/swap_state.o
  CC      net/mac80211/fils_aead.o
  CC      net/mac80211/cfg.o
  CC      fs/lockd/svc4proc.o
  AR      drivers/gpu/drm/tests/built-in.a
  CC      drivers/iommu/iommu-sysfs.o
  AR      drivers/char/agp/built-in.a
  CC      fs/lockd/procfs.o
  AR      drivers/gpu/drm/arm/built-in.a
  CC      drivers/gpu/drm/display/drm_display_helper_mod.o
  CC      drivers/gpu/drm/ttm/ttm_tt.o
  CC      fs/select.o
  CC      net/mac80211/ethtool.o
  CC      drivers/gpu/drm/i915/i915_config.o
  CC      drivers/acpi/acpi_lpat.o
  CC      drivers/gpu/drm/display/drm_dp_dual_mode_helper.o
  CC      fs/nfs/nfs3super.o
  CC      net/netfilter/xt_SECMARK.o
  CC      drivers/acpi/acpica/nsinit.o
  CC      mm/swapfile.o
  CC      lib/string.o
  AR      drivers/gpu/drm/renesas/rcar-du/built-in.a
  CC      drivers/gpu/drm/display/drm_dp_helper.o
  CC      lib/timerqueue.o
  AR      drivers/gpu/drm/renesas/rz-du/built-in.a
  AR      drivers/gpu/drm/renesas/built-in.a
  CC      drivers/char/hpet.o
  CC      lib/vsprintf.o
  CC      drivers/gpu/drm/ttm/ttm_bo.o
  CC      drivers/gpu/drm/i915/i915_driver.o
  CC      drivers/iommu/dma-iommu.o
  CC      fs/dcache.o
  CC      net/core/fib_rules.o
  CC      drivers/iommu/iova.o
  CC      net/mac80211/rx.o
  CC      net/wireless/shipped-certs.o
  CC      drivers/connector/cn_queue.o
  CC      net/netfilter/xt_TCPMSS.o
  CC      net/mac80211/spectmgmt.o
  CC      net/ipv6/ndisc.o
  CC      drivers/tty/serial/8250/8250_lpss.o
  CC      net/netfilter/xt_conntrack.o
  CC      drivers/tty/serial/8250/8250_mid.o
  CC      net/netfilter/xt_policy.o
  CC      drivers/tty/serial/8250/8250_pci.o
  CC      drivers/acpi/acpica/nsload.o
  CC      drivers/gpu/drm/i915/i915_drm_client.o
  CC      drivers/gpu/drm/ttm/ttm_bo_util.o
  CC      arch/x86/kernel/tsc.o
  CC      net/mac80211/tx.o
  AR      drivers/gpu/drm/omapdrm/built-in.a
  CC      mm/swap_slots.o
  AR      drivers/gpu/drm/tilcdc/built-in.a
  CC      net/mac80211/key.o
  CC      drivers/gpu/drm/virtio/virtgpu_drv.o
  AR      drivers/gpu/drm/imx/built-in.a
  CC      mm/dmapool.o
  CC      drivers/acpi/acpica/nsnames.o
  CC      drivers/acpi/acpica/nsobject.o
  CC      net/netfilter/xt_state.o
  AR      fs/lockd/built-in.a
  CC      drivers/gpu/drm/ttm/ttm_bo_vm.o
  CC      fs/nfs/nfs3client.o
  CC      drivers/gpu/drm/ttm/ttm_module.o
  CC      drivers/char/nvram.o
  CC      fs/nfs/nfs3proc.o
  CC      kernel/workqueue.o
  CC      net/ipv4/icmp.o
  CC      drivers/gpu/drm/virtio/virtgpu_kms.o
  CC      net/mac80211/util.o
  CC [M]  net/netfilter/nf_log_syslog.o
  CC      fs/inode.o
  CC      lib/win_minmax.o
  CC      drivers/acpi/acpica/nsparse.o
  CC      net/core/net-traces.o
  CC      drivers/connector/connector.o
  CC      fs/attr.o
  CC      drivers/gpu/drm/virtio/virtgpu_gem.o
  CC      kernel/pid.o
  CC      drivers/base/power/sysfs.o
  AR      drivers/iommu/built-in.a
  CC      drivers/base/firmware_loader/builtin/main.o
  CC      drivers/base/power/generic_ops.o
  CC      mm/hugetlb.o
  CC      drivers/base/power/common.o
  CC      drivers/tty/tty_buffer.o
  CC      drivers/gpu/drm/ttm/ttm_execbuf_util.o
  CC      drivers/gpu/drm/virtio/virtgpu_vram.o
  CC      drivers/base/regmap/regmap.o
  CC      drivers/base/component.o
  AR      drivers/base/test/built-in.a
  CC      drivers/base/core.o
  CC      drivers/acpi/acpica/nspredef.o
  CC      drivers/base/regmap/regcache.o
  CC      drivers/base/bus.o
  CC      drivers/gpu/drm/ttm/ttm_range_manager.o
  CC      arch/x86/kernel/tsc_msr.o
  CC      net/core/selftests.o
  CC      drivers/gpu/drm/i915/i915_getparam.o
  CC      drivers/tty/serial/8250/8250_pericom.o
  CC      drivers/gpu/drm/virtio/virtgpu_display.o
  AR      drivers/base/firmware_loader/builtin/built-in.a
  CC      drivers/base/firmware_loader/main.o
  AR      drivers/char/built-in.a
  CC      drivers/block/loop.o
  CC      fs/bad_inode.o
  CC      drivers/gpu/drm/display/drm_dp_mst_topology.o
  CC      drivers/block/virtio_blk.o
  CC      drivers/base/power/qos.o
  CC      arch/x86/kernel/io_delay.o
  CC      drivers/gpu/drm/i915/i915_ioctl.o
  CC      drivers/acpi/acpica/nsprepkg.o
  CC      drivers/base/regmap/regcache-rbtree.o
  CC      drivers/base/power/runtime.o
  CC      drivers/base/power/wakeirq.o
  CC      mm/mmu_notifier.o
  CC      mm/migrate.o
  CC      arch/x86/kernel/rtc.o
  CC      arch/x86/kernel/resource.o
  CC      drivers/connector/cn_proc.o
  CC      drivers/base/dd.o
  AR      drivers/misc/eeprom/built-in.a
  AR      drivers/misc/cb710/built-in.a
  CC      net/mac80211/parse.o
  AS      arch/x86/kernel/irqflags.o
  AR      drivers/misc/ti-st/built-in.a
  CC      lib/xarray.o
  AR      drivers/misc/lis3lv02d/built-in.a
  AR      drivers/misc/cardreader/built-in.a
  CC      drivers/base/syscore.o
  AR      drivers/misc/keba/built-in.a
  CC      drivers/base/driver.o
  CC      drivers/gpu/drm/ttm/ttm_resource.o
  AR      drivers/misc/built-in.a
  CC      drivers/base/class.o
  CC      fs/file.o
  CC      drivers/base/regmap/regcache-flat.o
  CC      drivers/acpi/acpi_pcc.o
  CC      drivers/acpi/ac.o
  CC      fs/nfs/nfs3xdr.o
  AR      drivers/tty/serial/8250/built-in.a
  CC      drivers/acpi/acpica/nsrepair.o
  AR      drivers/tty/serial/built-in.a
  CC      drivers/tty/tty_port.o
  CC      net/ipv6/udp.o
  CC      drivers/gpu/drm/virtio/virtgpu_vq.o
  CC      drivers/gpu/drm/virtio/virtgpu_fence.o
  AR      drivers/mfd/built-in.a
  CC      drivers/acpi/button.o
  CC      kernel/task_work.o
  CC      drivers/base/platform.o
  CC [M]  net/netfilter/xt_mark.o
  AR      drivers/base/firmware_loader/built-in.a
  CC      drivers/base/cpu.o
  CC      arch/x86/kernel/static_call.o
  CC      drivers/base/regmap/regcache-maple.o
  CC      net/mac80211/wme.o
  CC      net/ipv4/devinet.o
  CC      mm/page_counter.o
  CC      drivers/acpi/acpica/nsrepair2.o
  CC      drivers/acpi/fan_core.o
  CC      drivers/gpu/drm/i915/i915_irq.o
  CC      drivers/base/regmap/regmap-debugfs.o
  AR      drivers/gpu/drm/i2c/built-in.a
  CC      drivers/acpi/acpica/nssearch.o
  CC      fs/filesystems.o
  CC      drivers/acpi/acpica/nsutils.o
  CC      net/core/ptp_classifier.o
  CC      drivers/base/power/main.o
  CC      drivers/base/firmware.o
  CC      drivers/gpu/drm/display/drm_dsc_helper.o
  CC      kernel/extable.o
  CC      arch/x86/kernel/process.o
  CC      net/core/netprio_cgroup.o
  AR      drivers/block/built-in.a
  CC      net/mac80211/chan.o
  CC      drivers/gpu/drm/ttm/ttm_pool.o
  AR      drivers/connector/built-in.a
  CC      kernel/params.o
  AR      drivers/nfc/built-in.a
  CC      kernel/kthread.o
  CC      drivers/tty/tty_mutex.o
  CC      drivers/acpi/acpica/nswalk.o
  CC      drivers/acpi/fan_attr.o
  CC      net/ipv4/af_inet.o
  CC      mm/hugetlb_cgroup.o
  CC      net/core/netclassid_cgroup.o
  CC      kernel/sys_ni.o
  CC      fs/namespace.o
  CC      arch/x86/kernel/ptrace.o
  CC      lib/lockref.o
  CC [M]  net/netfilter/xt_nat.o
  CC      drivers/base/init.o
  CC      drivers/gpu/drm/virtio/virtgpu_object.o
  CC      net/core/dst_cache.o
  CC      drivers/tty/tty_ldsem.o
  CC      drivers/base/map.o
  CC      drivers/acpi/acpica/nsxfeval.o
  CC      drivers/gpu/drm/virtio/virtgpu_debugfs.o
  CC      fs/ext4/fast_commit.o
  CC      lib/bcd.o
  CC      arch/x86/kernel/tls.o
  CC      fs/ext4/orphan.o
  CC      lib/sort.o
  CC      fs/ext4/acl.o
  AR      net/wireless/built-in.a
  CC      drivers/base/devres.o
  AR      drivers/gpu/drm/panel/built-in.a
  CC      fs/seq_file.o
  AR      drivers/gpu/drm/bridge/analogix/built-in.a
  CC      lib/parser.o
  AR      drivers/gpu/drm/bridge/cadence/built-in.a
  AR      drivers/gpu/drm/hisilicon/built-in.a
  AR      drivers/gpu/drm/bridge/imx/built-in.a
  CC      fs/ext4/xattr_security.o
  CC      net/mac80211/trace.o
  AR      drivers/gpu/drm/bridge/synopsys/built-in.a
  AR      drivers/gpu/drm/bridge/built-in.a
  CC      drivers/acpi/fan_hwmon.o
  CC [M]  net/netfilter/xt_LOG.o
  CC      net/core/gro_cells.o
  CC      drivers/acpi/acpica/nsxfname.o
  CC      drivers/gpu/drm/display/drm_hdcp_helper.o
  CC      net/mac80211/mlme.o
  AR      drivers/gpu/drm/mxsfb/built-in.a
  CC      drivers/base/attribute_container.o
  CC      drivers/gpu/drm/virtio/virtgpu_plane.o
  AR      drivers/base/regmap/built-in.a
  AR      drivers/gpu/drm/tiny/built-in.a
  CC      drivers/base/transport_class.o
  AR      drivers/gpu/drm/xlnx/built-in.a
  CC      kernel/nsproxy.o
  CC      drivers/acpi/acpica/nsxfobj.o
  CC      drivers/gpu/drm/ttm/ttm_device.o
  CC      drivers/gpu/drm/i915/i915_mitigations.o
  CC      mm/early_ioremap.o
  CC      drivers/base/topology.o
  CC      drivers/tty/tty_baudrate.o
  CC      lib/debug_locks.o
  CC      mm/secretmem.o
  AR      drivers/gpu/drm/gud/built-in.a
  CC      drivers/gpu/drm/virtio/virtgpu_ioctl.o
  CC      mm/hmm.o
  CC      drivers/gpu/drm/virtio/virtgpu_prime.o
  CC      drivers/gpu/drm/display/drm_hdmi_helper.o
  CC      drivers/gpu/drm/i915/i915_module.o
  CC      lib/random32.o
  CC      drivers/acpi/acpica/psargs.o
  CC      drivers/gpu/drm/i915/i915_params.o
  CC      drivers/acpi/acpi_video.o
  CC      drivers/acpi/video_detect.o
  CC      net/ipv4/igmp.o
  AR      drivers/dax/hmem/built-in.a
  AR      drivers/dax/built-in.a
  CC      drivers/gpu/drm/virtio/virtgpu_trace_points.o
  CC      lib/bust_spinlocks.o
  CC      drivers/base/container.o
  CC      lib/kasprintf.o
  CC      net/ipv4/fib_frontend.o
  CC      drivers/acpi/acpica/psloop.o
  CC      drivers/base/power/wakeup.o
  CC      arch/x86/kernel/step.o
  CC      lib/bitmap.o
  AR      drivers/gpu/drm/solomon/built-in.a
  CC      net/ipv6/udplite.o
  CC      fs/nfs/nfs3acl.o
  CC [M]  drivers/gpu/drm/scheduler/sched_main.o
  CC      fs/nfs/nfs4proc.o
  CC      net/mac80211/tdls.o
  CC      arch/x86/kernel/i8237.o
  CC      fs/nfs/nfs4xdr.o
  CC [M]  drivers/gpu/drm/scheduler/sched_fence.o
  CC      drivers/base/property.o
  CC      fs/xattr.o
  CC      drivers/tty/tty_jobctrl.o
  CC      net/ipv4/fib_semantics.o
  CC      drivers/acpi/acpica/psobject.o
  CC      drivers/acpi/acpica/psopcode.o
  CC      lib/scatterlist.o
  CC      drivers/acpi/processor_driver.o
  CC      drivers/gpu/drm/ttm/ttm_sys_manager.o
  CC      drivers/gpu/drm/virtio/virtgpu_submit.o
  CC      drivers/acpi/acpica/psopinfo.o
  CC      drivers/tty/n_null.o
  CC      drivers/gpu/drm/display/drm_scdc_helper.o
  CC [M]  net/netfilter/xt_MASQUERADE.o
  CC      arch/x86/kernel/stacktrace.o
  CC      kernel/notifier.o
  CC      drivers/gpu/drm/drm_aperture.o
  CC      net/core/failover.o
  CC      lib/list_sort.o
  HOSTCC  drivers/gpu/drm/xe/xe_gen_wa_oob
  CC      mm/memfd.o
  CC      net/ipv4/fib_trie.o
  CC      drivers/gpu/drm/ttm/ttm_agp_backend.o
  CC      fs/nfs/nfs4state.o
  CC      drivers/acpi/processor_thermal.o
  CC      drivers/acpi/processor_idle.o
  GEN     xe_wa_oob.c xe_wa_oob.h
  CC [M]  drivers/gpu/drm/xe/xe_bb.o
  CC [M]  drivers/gpu/drm/scheduler/sched_entity.o
  CC      drivers/acpi/acpica/psparse.o
  CC      lib/uuid.o
  CC      drivers/acpi/acpica/psscope.o
  CC      net/ipv4/fib_notifier.o
  CC      drivers/gpu/drm/i915/i915_pci.o
  CC      net/ipv4/inet_fragment.o
  CC      net/mac80211/ocb.o
  CC      lib/iov_iter.o
  CC      fs/libfs.o
  CC      drivers/acpi/processor_throttling.o
  CC      kernel/ksysfs.o
  CC      drivers/gpu/drm/drm_atomic.o
  CC      net/ipv4/ping.o
  CC      net/ipv4/ip_tunnel_core.o
  CC      drivers/tty/pty.o
  CC      drivers/acpi/acpica/pstree.o
  CC      net/ipv6/raw.o
  CC      arch/x86/kernel/reboot.o
  CC      drivers/tty/tty_audit.o
  CC      drivers/acpi/acpica/psutils.o
  CC      net/ipv6/icmp.o
  AR      drivers/gpu/drm/virtio/built-in.a
  CC      drivers/gpu/drm/drm_atomic_uapi.o
  CC [M]  drivers/gpu/drm/xe/xe_bo.o
  CC      drivers/base/power/wakeup_stats.o
  AR      drivers/gpu/drm/display/built-in.a
  CC      drivers/acpi/processor_perflib.o
  CC      drivers/gpu/drm/drm_auth.o
  AR      drivers/gpu/drm/ttm/built-in.a
  CC      net/ipv6/mcast.o
  CC      lib/clz_ctz.o
  CC      lib/bsearch.o
  CC      drivers/tty/sysrq.o
  CC      mm/ptdump.o
  LD [M]  drivers/gpu/drm/scheduler/gpu-sched.o
  CC      drivers/acpi/acpica/pswalk.o
  CC      fs/nfs/nfs4renewd.o
  CC      arch/x86/kernel/msr.o
  CC [M]  drivers/gpu/drm/xe/xe_bo_evict.o
  CC [M]  drivers/gpu/drm/xe/xe_devcoredump.o
  CC      kernel/cred.o
  AR      net/core/built-in.a
  CC      drivers/acpi/acpica/psxface.o
  CC      net/ipv6/reassembly.o
  CC [M]  net/netfilter/xt_addrtype.o
  CC      drivers/acpi/container.o
  AR      fs/ext4/built-in.a
  CC      fs/fs-writeback.o
  CC      drivers/base/cacheinfo.o
  CC      drivers/base/power/trace.o
  CC      net/ipv4/gre_offload.o
  CC      drivers/acpi/thermal_lib.o
  CC      drivers/acpi/thermal.o
  CC      drivers/gpu/drm/i915/i915_scatterlist.o
  CC      drivers/acpi/nhlt.o
  CC      fs/pnode.o
  CC      fs/splice.o
  CC      net/mac80211/airtime.o
  CC      drivers/acpi/acpica/rsaddr.o
  CC      arch/x86/kernel/cpuid.o
  CC [M]  drivers/gpu/drm/xe/xe_device.o
  CC      drivers/gpu/drm/drm_blend.o
  CC      mm/execmem.o
  CC      drivers/acpi/acpi_memhotplug.o
  CC      drivers/acpi/ioapic.o
  CC      drivers/gpu/drm/drm_bridge.o
  CC      net/ipv4/metrics.o
  CC      arch/x86/kernel/early-quirks.o
  CC      drivers/gpu/drm/i915/i915_suspend.o
  CC      fs/sync.o
  CC      lib/find_bit.o
  CC      drivers/acpi/acpica/rscalc.o
  CC [M]  drivers/gpu/drm/xe/xe_device_sysfs.o
  CC      fs/utimes.o
  CC      drivers/base/swnode.o
  AR      drivers/tty/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_dma_buf.o
  CC      drivers/base/auxiliary.o
  AR      drivers/base/power/built-in.a
  CC      drivers/base/devtmpfs.o
  CC      drivers/base/module.o
  CC      net/ipv4/netlink.o
  CC      kernel/reboot.o
  CC      drivers/acpi/acpica/rscreate.o
  CC      drivers/gpu/drm/drm_cache.o
  CC      fs/nfs/nfs4super.o
  CC      arch/x86/kernel/smp.o
  CC      drivers/acpi/battery.o
  CC      drivers/acpi/acpica/rsdumpinfo.o
  CC      lib/llist.o
  CC      drivers/gpu/drm/i915/i915_switcheroo.o
  CC      drivers/acpi/bgrt.o
  AR      mm/built-in.a
  CC      drivers/acpi/spcr.o
  CC      drivers/dma-buf/dma-buf.o
  CC      drivers/dma-buf/dma-fence.o
  CC      lib/lwq.o
  CC      kernel/async.o
  CC      drivers/base/auxiliary_sysfs.o
  CC      net/ipv4/nexthop.o
  CC      net/ipv6/tcp_ipv6.o
  CC      net/ipv6/ping.o
  CC      drivers/dma-buf/dma-fence-array.o
  CC [M]  drivers/gpu/drm/xe/xe_drm_client.o
  CC [M]  drivers/gpu/drm/xe/xe_eustall_cntr.o
  AR      net/netfilter/built-in.a
  CC      lib/memweight.o
  CC      arch/x86/kernel/smpboot.o
  CC      net/ipv4/udp_tunnel_stub.o
  CC      drivers/acpi/acpica/rsinfo.o
  CC      lib/kfifo.o
  CC      net/ipv4/ip_tunnel.o
  CC      drivers/gpu/drm/drm_client.o
  CC      fs/nfs/nfs4file.o
  CC      drivers/gpu/drm/drm_client_modeset.o
  CC      drivers/acpi/acpica/rsio.o
  CC      arch/x86/kernel/tsc_sync.o
  CC      net/mac80211/eht.o
  CC      fs/nfs/delegation.o
  CC      lib/percpu-refcount.o
  CC      fs/d_path.o
  CC      drivers/gpu/drm/drm_color_mgmt.o
  CC      fs/stack.o
  CC      fs/nfs/nfs4idmap.o
  CC      net/mac80211/led.o
  CC [M]  drivers/gpu/drm/xe/xe_exec.o
  CC      drivers/base/devcoredump.o
  CC      lib/rhashtable.o
  CC      drivers/base/platform-msi.o
  CC      drivers/acpi/acpica/rsirq.o
  CC [M]  drivers/gpu/drm/xe/xe_execlist.o
  CC      drivers/acpi/acpica/rslist.o
  CC      kernel/range.o
  AR      drivers/cxl/core/built-in.a
  AR      drivers/cxl/built-in.a
  CC      net/mac80211/pm.o
  CC      net/ipv4/sysctl_net_ipv4.o
  CC      drivers/gpu/drm/i915/i915_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_exec_queue.o
  CC      net/ipv4/proc.o
  CC      drivers/base/physical_location.o
  CC      kernel/smpboot.o
  CC      drivers/gpu/drm/i915/i915_utils.o
  CC      net/ipv6/exthdrs.o
  CC      arch/x86/kernel/setup_percpu.o
  CC      fs/nfs/callback.o
  CC      arch/x86/kernel/mpparse.o
  CC      kernel/ucount.o
  CC      net/mac80211/rc80211_minstrel_ht.o
  CC      fs/nfs/callback_xdr.o
  CC      fs/fs_struct.o
  CC      net/ipv4/fib_rules.o
  CC      drivers/acpi/acpica/rsmemory.o
  CC      drivers/dma-buf/dma-fence-chain.o
  CC      lib/base64.o
  CC      fs/nfs/callback_proc.o
  CC      net/ipv4/ipmr.o
  CC      lib/once.o
  CC      fs/nfs/nfs4namespace.o
  CC      lib/refcount.o
  CC      drivers/acpi/acpica/rsmisc.o
  CC      drivers/gpu/drm/drm_connector.o
  CC      lib/rcuref.o
  CC      kernel/regset.o
  CC      drivers/base/trace.o
  CC      net/ipv4/ipmr_base.o
  CC [M]  drivers/gpu/drm/xe/xe_force_wake.o
  CC      fs/nfs/nfs4getroot.o
  CC      arch/x86/kernel/trace_clock.o
  CC      lib/usercopy.o
  CC      fs/nfs/nfs4client.o
  CC      lib/errseq.o
  CC      drivers/acpi/acpica/rsserial.o
  CC      lib/bucket_locks.o
  CC      kernel/ksyms_common.o
  CC      fs/nfs/nfs4session.o
  CC [M]  drivers/gpu/drm/xe/xe_ggtt.o
  CC      lib/generic-radix-tree.o
  CC      drivers/acpi/acpica/rsutils.o
  CC      fs/statfs.o
  CC      fs/nfs/dns_resolve.o
  CC      net/ipv6/datagram.o
  CC      drivers/gpu/drm/i915/intel_clock_gating.o
  CC      arch/x86/kernel/trace.o
  CC [M]  drivers/gpu/drm/xe/xe_gpu_scheduler.o
  CC      drivers/acpi/acpica/rsxface.o
  CC      drivers/dma-buf/dma-fence-unwrap.o
  CC      drivers/gpu/drm/i915/intel_device_info.o
  CC [M]  drivers/gpu/drm/xe/xe_gsc.o
  CC      lib/bitmap-str.o
  CC      fs/fs_pin.o
  CC      drivers/gpu/drm/i915/intel_memory_region.o
  CC      drivers/acpi/acpica/tbdata.o
  CC      fs/nfs/nfs4trace.o
  CC      drivers/macintosh/mac_hid.o
  CC      arch/x86/kernel/rethook.o
  CC      lib/string_helpers.o
  CC      kernel/groups.o
  CC      lib/hexdump.o
  CC      drivers/acpi/acpica/tbfadt.o
  CC      drivers/gpu/drm/drm_crtc.o
  CC      fs/nfs/nfs4sysctl.o
  CC      kernel/kcmp.o
  CC      arch/x86/kernel/vmcore_info_32.o
  CC      kernel/freezer.o
  CC [M]  drivers/gpu/drm/xe/xe_gsc_debugfs.o
  CC      lib/kstrtox.o
  CC [M]  drivers/gpu/drm/xe/xe_gsc_proxy.o
  CC      drivers/dma-buf/dma-resv.o
  AR      drivers/base/built-in.a
  AR      drivers/scsi/pcmcia/built-in.a
  CC      drivers/scsi/scsi.o
  CC      lib/iomap.o
  CC      drivers/scsi/hosts.o
  CC      drivers/scsi/scsi_ioctl.o
  CC      arch/x86/kernel/machine_kexec_32.o
  CC [M]  drivers/gpu/drm/xe/xe_gsc_submit.o
  CC [M]  drivers/gpu/drm/xe/xe_gt.o
  CC      fs/nsfs.o
  CC      net/ipv4/syncookies.o
  CC      lib/iomap_copy.o
  CC      lib/devres.o
  CC      drivers/gpu/drm/drm_displayid.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_ccs_mode.o
  AR      drivers/macintosh/built-in.a
  CC      net/ipv4/tunnel4.o
  CC      net/mac80211/wbrf.o
  CC      drivers/acpi/acpica/tbfind.o
  CC      fs/fs_types.o
  CC      drivers/acpi/acpica/tbinstal.o
  CC      drivers/gpu/drm/drm_drv.o
  CC      drivers/gpu/drm/drm_dumb_buffers.o
  CC      lib/check_signature.o
  CC      net/ipv4/ipconfig.o
  CC      net/ipv4/netfilter.o
  CC      fs/fs_context.o
  CC      net/ipv4/tcp_cubic.o
  CC      net/ipv4/tcp_sigpool.o
  CC      drivers/acpi/acpica/tbprint.o
  CC      kernel/profile.o
  CC      net/ipv6/ip6_flowlabel.o
  CC      kernel/stacktrace.o
  CC      drivers/gpu/drm/i915/intel_pcode.o
  AS      arch/x86/kernel/relocate_kernel_32.o
  CC      kernel/dma.o
  CC      drivers/gpu/drm/i915/intel_region_ttm.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_clock.o
  CC      net/ipv4/cipso_ipv4.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_freq.o
  CC      drivers/scsi/scsicam.o
  CC      drivers/acpi/acpica/tbutils.o
  CC      kernel/smp.o
  CC      drivers/gpu/drm/i915/intel_runtime_pm.o
  CC      drivers/gpu/drm/drm_edid.o
  CC      lib/interval_tree.o
  CC      kernel/uid16.o
  CC      drivers/acpi/acpica/tbxface.o
  CC      drivers/scsi/scsi_error.o
  CC      fs/fs_parser.o
  CC      drivers/dma-buf/sync_file.o
  CC      arch/x86/kernel/crash_dump_32.o
  CC      fs/fsopen.o
  CC      net/ipv4/xfrm4_policy.o
  CC      drivers/scsi/scsi_lib.o
  CC      lib/assoc_array.o
  CC      net/ipv4/xfrm4_state.o
  AR      drivers/nvme/common/built-in.a
  CC      fs/init.o
  CC      net/ipv4/xfrm4_input.o
  AR      drivers/nvme/host/built-in.a
  CC      lib/bitrev.o
  AR      drivers/nvme/target/built-in.a
  AR      drivers/nvme/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_gt_idle.o
  CC      lib/crc-ccitt.o
  CC      drivers/scsi/constants.o
  CC      fs/kernel_read_file.o
  CC      kernel/kallsyms.o
  CC      drivers/scsi/scsi_lib_dma.o
  CC      net/ipv6/inet6_connection_sock.o
  CC      drivers/acpi/acpica/tbxfload.o
  CC      drivers/acpi/acpica/tbxfroot.o
  CC      drivers/scsi/scsi_scan.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_mcr.o
  GEN     drivers/scsi/scsi_devinfo_tbl.c
  CC      drivers/scsi/scsi_devinfo.o
  CC      lib/crc16.o
  CC      net/ipv4/xfrm4_output.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_pagefault.o
  CC      net/ipv6/udp_offload.o
  CC      drivers/acpi/acpica/utaddress.o
  CC      fs/mnt_idmapping.o
  CC      fs/remap_range.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_sysfs.o
  AR      drivers/dma-buf/built-in.a
  CC      net/ipv4/xfrm4_protocol.o
  CC      drivers/ata/libata-core.o
  CC      arch/x86/kernel/crash.o
  CC      drivers/ata/libata-scsi.o
  CC      drivers/ata/libata-eh.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_throttle.o
  CC      drivers/ata/libata-transport.o
  CC      drivers/scsi/scsi_sysctl.o
  CC      fs/pidfs.o
  CC      kernel/acct.o
  CC      kernel/vmcore_info.o
  CC      drivers/acpi/acpica/utalloc.o
  HOSTCC  lib/gen_crc32table
  CC      drivers/gpu/drm/i915/intel_sbi.o
  CC      lib/xxhash.o
  CC      fs/buffer.o
  CC      net/ipv6/seg6.o
  CC      drivers/gpu/drm/drm_eld.o
  CC      drivers/net/phy/mdio-boardinfo.o
  AR      drivers/net/phy/qcom/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
  CC      lib/genalloc.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_topology.o
  CC      fs/mpage.o
  CC      lib/percpu_counter.o
  CC      drivers/acpi/acpica/utascii.o
  CC      drivers/gpu/drm/drm_encoder.o
  CC      net/ipv6/fib6_notifier.o
  CC      net/ipv6/rpl.o
  CC      drivers/gpu/drm/i915/intel_step.o
  CC      lib/audit.o
  CC      lib/syscall.o
  CC      net/ipv6/ioam6.o
  CC      drivers/scsi/scsi_proc.o
  AR      net/mac80211/built-in.a
  CC      drivers/acpi/acpica/utbuffer.o
  CC      drivers/acpi/acpica/utcksum.o
  CC      drivers/scsi/scsi_debugfs.o
  CC      drivers/scsi/scsi_trace.o
  CC      arch/x86/kernel/module.o
  CC [M]  drivers/gpu/drm/xe/xe_guc.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_ads.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_ct.o
  CC      drivers/gpu/drm/drm_file.o
  AR      drivers/net/pse-pd/built-in.a
  CC      drivers/gpu/drm/drm_fourcc.o
  CC      drivers/acpi/acpica/utcopy.o
  CC      drivers/firewire/init_ohci1394_dma.o
  CC      drivers/cdrom/cdrom.o
  CC      net/ipv6/sysctl_net_ipv6.o
  CC      arch/x86/kernel/doublefault_32.o
  CC      kernel/elfcorehdr.o
  CC      kernel/crash_reserve.o
  CC      drivers/gpu/drm/drm_framebuffer.o
  CC      fs/proc_namespace.o
  CC      drivers/gpu/drm/i915/intel_uncore.o
  CC      drivers/gpu/drm/drm_gem.o
  CC      drivers/ata/libata-trace.o
  CC      drivers/scsi/scsi_logging.o
  CC      drivers/acpi/acpica/utexcep.o
  CC      fs/direct-io.o
  CC      kernel/kexec_core.o
  AR      net/ipv4/built-in.a
  CC      lib/errname.o
  CC      lib/nlattr.o
  CC      net/ipv6/xfrm6_policy.o
  CC      drivers/gpu/drm/i915/intel_wakeref.o
  CC      drivers/gpu/drm/drm_ioctl.o
  CC      net/ipv6/xfrm6_state.o
  CC      drivers/gpu/drm/i915/vlv_sideband.o
  CC      drivers/scsi/scsi_pm.o
  AR      drivers/auxdisplay/built-in.a
  CC      drivers/acpi/acpica/utdebug.o
  CC      drivers/pcmcia/cs.o
  CC      fs/eventpoll.o
  CC      drivers/net/phy/stubs.o
  CC      drivers/pcmcia/socket_sysfs.o
  CC      kernel/crash_core.o
  CC      arch/x86/kernel/early_printk.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_db_mgr.o
  CC      drivers/gpu/drm/drm_lease.o
  AR      fs/nfs/built-in.a
  CC      kernel/kexec.o
  CC      drivers/net/phy/mdio_devres.o
  CC      drivers/acpi/acpica/utdecode.o
  CC      drivers/scsi/scsi_bsg.o
  CC      kernel/utsname.o
  CC      drivers/usb/common/common.o
  CC      drivers/input/serio/serio.o
  AR      drivers/firewire/built-in.a
  CC      lib/cpu_rmap.o
  CC      drivers/usb/common/debug.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_hwconfig.o
  CC      lib/dynamic_queue_limits.o
  CC      arch/x86/kernel/hpet.o
  CC      kernel/pid_namespace.o
  CC      arch/x86/kernel/amd_nb.o
  CC      net/ipv6/xfrm6_input.o
  CC      drivers/acpi/acpica/utdelete.o
  CC      arch/x86/kernel/kvm.o
  CC      drivers/gpu/drm/drm_managed.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_id_mgr.o
  CC      fs/anon_inodes.o
  CC      net/ipv6/xfrm6_output.o
  CC      drivers/ata/libata-sata.o
  CC      drivers/scsi/scsi_common.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_klv_helpers.o
  CC      arch/x86/kernel/kvmclock.o
  CC      arch/x86/kernel/paravirt.o
  CC      drivers/gpu/drm/drm_mm.o
  CC      arch/x86/kernel/pvclock.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_log.o
  CC      drivers/net/mdio/acpi_mdio.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_pc.o
  CC      drivers/net/mdio/fwnode_mdio.o
  CC      drivers/pcmcia/cardbus.o
  CC      drivers/usb/core/usb.o
  CC      drivers/usb/core/hub.o
  CC      drivers/acpi/acpica/uterror.o
  CC      drivers/net/phy/phy.o
  AR      drivers/net/pcs/built-in.a
  CC      drivers/acpi/acpica/uteval.o
  CC      fs/signalfd.o
  CC      drivers/usb/core/hcd.o
  CC      drivers/input/serio/i8042.o
  CC      drivers/usb/core/urb.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_submit.o
  AR      drivers/usb/common/built-in.a
  AR      drivers/usb/phy/built-in.a
  CC      fs/timerfd.o
  CC      drivers/usb/mon/mon_main.o
  CC      fs/eventfd.o
  CC      fs/aio.o
  CC      drivers/gpu/drm/drm_mode_config.o
  CC      drivers/acpi/acpica/utglobal.o
  CC      arch/x86/kernel/pcspeaker.o
  CC      drivers/usb/mon/mon_stat.o
  CC      arch/x86/kernel/check.o
  CC      drivers/gpu/drm/drm_mode_object.o
  CC      drivers/scsi/scsi_transport_spi.o
  CC      drivers/usb/mon/mon_text.o
  CC      lib/glob.o
  AR      drivers/cdrom/built-in.a
  CC      drivers/ata/libata-sff.o
  CC      drivers/input/keyboard/atkbd.o
  CC      drivers/usb/host/pci-quirks.o
  CC      arch/x86/kernel/uprobes.o
  CC      drivers/usb/host/ehci-hcd.o
  CC      drivers/gpu/drm/drm_modes.o
  CC      drivers/ata/libata-pmp.o
  CC      fs/locks.o
  CC      kernel/stop_machine.o
  CC      fs/binfmt_misc.o
  CC      drivers/input/mouse/psmouse-base.o
  CC      drivers/acpi/acpica/uthex.o
  CC      drivers/input/mouse/synaptics.o
  CC      drivers/ata/libata-acpi.o
  AR      drivers/input/joystick/built-in.a
  CC      drivers/input/mouse/focaltech.o
  CC      fs/binfmt_script.o
  CC      drivers/pcmcia/ds.o
  CC      lib/strncpy_from_user.o
  CC [M]  drivers/gpu/drm/xe/xe_heci_gsc.o
  CC      drivers/rtc/lib.o
  CC      drivers/gpu/drm/drm_modeset_lock.o
  AR      drivers/i3c/built-in.a
  CC      drivers/i2c/algos/i2c-algo-bit.o
  CC      drivers/i2c/busses/i2c-i801.o
  CC      fs/binfmt_elf.o
  AR      drivers/i2c/muxes/built-in.a
  CC      drivers/gpu/drm/drm_plane.o
  CC      drivers/acpi/acpica/utids.o
  CC      drivers/rtc/class.o
  CC      fs/mbcache.o
  CC      drivers/usb/class/usblp.o
  AR      drivers/net/mdio/built-in.a
  CC      drivers/usb/storage/scsiglue.o
  CC      drivers/usb/core/message.o
  CC      drivers/usb/core/driver.o
  CC      arch/x86/kernel/perf_regs.o
  AR      drivers/net/ethernet/3com/built-in.a
  CC      drivers/net/ethernet/8390/ne2k-pci.o
  CC      drivers/usb/storage/protocol.o
  CC      net/ipv6/xfrm6_protocol.o
  AR      drivers/input/tablet/built-in.a
  CC      drivers/usb/host/ehci-pci.o
  AR      drivers/net/ethernet/adaptec/built-in.a
  CC      drivers/net/phy/phy-c45.o
  AR      drivers/input/touchscreen/built-in.a
  AR      drivers/input/misc/built-in.a
  CC      drivers/usb/mon/mon_bin.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine.o
  CC      arch/x86/kernel/tracepoint.o
  CC      fs/posix_acl.o
  CC      drivers/gpu/drm/i915/vlv_suspend.o
  CC      lib/strnlen_user.o
  CC      drivers/usb/core/config.o
  CC      kernel/audit.o
  CC      drivers/input/serio/serport.o
  AR      drivers/usb/misc/built-in.a
  CC      net/ipv6/netfilter.o
  CC      drivers/acpi/acpica/utinit.o
  CC      net/ipv6/proc.o
  AR      drivers/input/keyboard/built-in.a
  CC      drivers/ata/libata-pata-timings.o
  CC      drivers/input/input.o
  CC      drivers/ata/ahci.o
  CC      drivers/ata/libahci.o
  CC      arch/x86/kernel/itmt.o
  AR      drivers/net/ethernet/agere/built-in.a
  CC      drivers/ata/ata_piix.o
  CC      drivers/ata/pata_amd.o
  CC      drivers/rtc/interface.o
  CC      drivers/usb/core/file.o
  CC      drivers/net/ethernet/8390/8390.o
  CC      arch/x86/kernel/umip.o
  CC      drivers/usb/storage/transport.o
  CC      drivers/pcmcia/pcmcia_resource.o
  CC      drivers/scsi/virtio_scsi.o
  AR      drivers/i2c/algos/built-in.a
  CC      drivers/usb/storage/usb.o
  CC      drivers/input/serio/libps2.o
  CC      arch/x86/kernel/unwind_frame.o
  CC      lib/net_utils.o
  CC      drivers/acpi/acpica/utlock.o
  CC      drivers/input/mouse/alps.o
  CC      drivers/input/input-compat.o
  CC      drivers/input/mouse/byd.o
  CC      drivers/usb/storage/initializers.o
  CC      lib/sg_pool.o
  CC      drivers/ata/pata_oldpiix.o
  AR      drivers/usb/class/built-in.a
  CC      drivers/scsi/sd.o
  AR      drivers/i2c/busses/built-in.a
  CC      drivers/i2c/i2c-boardinfo.o
  CC      drivers/gpu/drm/drm_prime.o
  CC      drivers/gpu/drm/drm_print.o
  CC      fs/coredump.o
  CC      drivers/usb/storage/sierra_ms.o
  CC      drivers/pcmcia/cistpl.o
  CC      drivers/pcmcia/pcmcia_cis.o
  CC      fs/drop_caches.o
  CC      drivers/acpi/acpica/utmath.o
  AR      drivers/usb/mon/built-in.a
  CC      lib/stackdepot.o
  CC      drivers/usb/host/ohci-hcd.o
  CC      drivers/ata/pata_sch.o
  CC      drivers/rtc/nvmem.o
  CC      drivers/ata/pata_mpiix.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.o
  CC      drivers/input/input-mt.o
  CC      drivers/usb/host/ohci-pci.o
  CC      drivers/usb/host/uhci-hcd.o
  CC      drivers/net/phy/phy-core.o
  CC      drivers/net/phy/phy_device.o
  AR      drivers/input/serio/built-in.a
  CC      drivers/net/phy/linkmode.o
  CC      drivers/net/phy/mdio_bus.o
  CC      drivers/net/phy/mdio_device.o
  CC      drivers/rtc/dev.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine_group.o
  CC      drivers/usb/host/xhci.o
  AR      drivers/net/ethernet/alacritech/built-in.a
  CC      drivers/usb/storage/option_ms.o
  AR      arch/x86/kernel/built-in.a
  AR      arch/x86/built-in.a
  CC      drivers/acpi/acpica/utmisc.o
  CC      drivers/gpu/drm/i915/soc/intel_dram.o
  CC      drivers/usb/host/xhci-mem.o
  CC      drivers/usb/core/buffer.o
  CC      fs/sysctls.o
  AR      drivers/media/i2c/built-in.a
  AR      drivers/media/tuners/built-in.a
  AR      drivers/pps/clients/built-in.a
  CC      drivers/ptp/ptp_clock.o
  AR      drivers/pps/generators/built-in.a
  CC      drivers/gpu/drm/i915/soc/intel_gmch.o
  AR      drivers/media/rc/keymaps/built-in.a
  CC      drivers/pps/pps.o
  CC      drivers/power/supply/power_supply_core.o
  AR      drivers/media/rc/built-in.a
  CC      drivers/i2c/i2c-core-base.o
  CC      drivers/input/input-poller.o
  CC      drivers/power/supply/power_supply_sysfs.o
  CC      net/ipv6/syncookies.o
  AR      drivers/media/common/b2c2/built-in.a
  CC      drivers/input/ff-core.o
  AR      drivers/net/ethernet/8390/built-in.a
  AR      drivers/media/common/saa7146/built-in.a
  AR      drivers/net/ethernet/alteon/built-in.a
  AR      drivers/media/common/siano/built-in.a
  AR      drivers/net/ethernet/amazon/built-in.a
  AR      drivers/media/common/v4l2-tpg/built-in.a
  AR      drivers/media/common/videobuf2/built-in.a
  CC      drivers/i2c/i2c-core-smbus.o
  CC      drivers/usb/storage/usual-tables.o
  AR      drivers/net/ethernet/amd/built-in.a
  AR      drivers/net/ethernet/aquantia/built-in.a
  AR      drivers/media/common/built-in.a
  CC      drivers/pps/kapi.o
  AR      drivers/net/ethernet/arc/built-in.a
  CC      drivers/ptp/ptp_chardev.o
  AR      drivers/net/ethernet/asix/built-in.a
  AR      drivers/media/platform/allegro-dvt/built-in.a
  CC      drivers/ptp/ptp_sysfs.o
  AR      drivers/net/ethernet/atheros/built-in.a
  AR      drivers/media/platform/amlogic/meson-ge2d/built-in.a
  AR      drivers/net/ethernet/cadence/built-in.a
  AR      drivers/media/platform/amlogic/built-in.a
  CC      drivers/net/ethernet/broadcom/bnx2.o
  AR      drivers/media/platform/amphion/built-in.a
  CC      drivers/usb/early/ehci-dbgp.o
  AR      drivers/media/platform/aspeed/built-in.a
  CC      drivers/input/touchscreen.o
  CC      drivers/acpi/acpica/utmutex.o
  AR      drivers/media/platform/atmel/built-in.a
  CC      lib/asn1_decoder.o
  AR      drivers/media/platform/broadcom/built-in.a
  AR      drivers/media/platform/cadence/built-in.a
  CC      kernel/auditfilter.o
  CC      drivers/acpi/acpica/utnonansi.o
  AR      drivers/media/platform/chips-media/coda/built-in.a
  AR      drivers/media/platform/chips-media/wave5/built-in.a
  CC      drivers/usb/host/xhci-ext-caps.o
  CC      drivers/scsi/sr.o
  AR      drivers/media/platform/chips-media/built-in.a
  CC      drivers/usb/host/xhci-ring.o
  CC      drivers/input/ff-memless.o
  CC      drivers/usb/host/xhci-hub.o
  AR      drivers/media/platform/imagination/built-in.a
  CC      drivers/rtc/proc.o
  AR      drivers/media/platform/intel/built-in.a
  AR      drivers/media/platform/marvell/built-in.a
  AR      drivers/media/platform/mediatek/jpeg/built-in.a
  CC      drivers/pps/sysfs.o
  CC      drivers/ata/ata_generic.o
  AR      drivers/media/platform/mediatek/mdp/built-in.a
  CC      drivers/usb/host/xhci-dbg.o
  AR      drivers/media/platform/mediatek/vcodec/common/built-in.a
  CC      drivers/usb/core/sysfs.o
  CC      drivers/usb/host/xhci-trace.o
  AR      drivers/media/platform/mediatek/vcodec/encoder/built-in.a
  AR      drivers/media/platform/mediatek/vcodec/decoder/built-in.a
  CC      drivers/power/supply/power_supply_leds.o
  CC      drivers/usb/host/xhci-debugfs.o
  AR      drivers/media/platform/mediatek/vcodec/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_hw_fence.o
  CC      drivers/input/mouse/logips2pp.o
  AR      drivers/media/platform/mediatek/vpu/built-in.a
  CC      drivers/usb/core/endpoint.o
  CC      drivers/input/sparse-keymap.o
  AR      drivers/media/platform/mediatek/mdp3/built-in.a
  CC      drivers/acpi/acpica/utobject.o
  AR      drivers/media/platform/mediatek/built-in.a
  CC      drivers/input/vivaldi-fmap.o
  AR      drivers/usb/storage/built-in.a
  CC      drivers/input/input-leds.o
  AR      drivers/media/platform/microchip/built-in.a
  CC      drivers/usb/core/devio.o
  CC      drivers/pcmcia/rsrc_mgr.o
  AR      drivers/media/platform/nuvoton/built-in.a
  CC      drivers/acpi/acpica/utosi.o
  CC      drivers/usb/core/notify.o
  CC      drivers/input/mouse/lifebook.o
  AR      drivers/media/platform/nvidia/tegra-vde/built-in.a
  AR      drivers/media/platform/nvidia/built-in.a
  AR      drivers/media/platform/nxp/dw100/built-in.a
  GEN     lib/oid_registry_data.c
  AR      drivers/media/platform/nxp/imx-jpeg/built-in.a
  CC      lib/ucs2_string.o
  CC      lib/sbitmap.o
  AR      drivers/media/platform/nxp/imx8-isi/built-in.a
  CC      lib/group_cpus.o
  AR      drivers/media/platform/nxp/built-in.a
  AR      drivers/media/platform/qcom/camss/built-in.a
  AR      drivers/media/platform/qcom/venus/built-in.a
  AR      drivers/media/platform/qcom/built-in.a
  AR      drivers/media/platform/raspberrypi/pisp_be/built-in.a
  AR      drivers/media/platform/raspberrypi/built-in.a
  AR      drivers/pps/built-in.a
  CC      drivers/input/mouse/trackpoint.o
  AR      drivers/media/platform/renesas/rcar-vin/built-in.a
  AR      drivers/media/platform/renesas/rzg2l-cru/built-in.a
  CC      drivers/rtc/sysfs.o
  CC      drivers/net/phy/swphy.o
  AR      drivers/media/platform/renesas/vsp1/built-in.a
  CC      drivers/net/phy/fixed_phy.o
  CC      drivers/net/phy/realtek.o
  AR      drivers/media/platform/renesas/built-in.a
  CC      drivers/gpu/drm/i915/soc/intel_pch.o
  CC      drivers/power/supply/power_supply_hwmon.o
  CC      drivers/ptp/ptp_vclock.o
  CC      lib/fw_table.o
  CC      fs/fhandle.o
  AR      drivers/media/platform/rockchip/rga/built-in.a
  AR      drivers/media/platform/rockchip/rkisp1/built-in.a
  AR      drivers/media/platform/rockchip/built-in.a
  CC      drivers/usb/host/xhci-pci.o
  AR      drivers/media/platform/samsung/exynos-gsc/built-in.a
  AR      drivers/usb/early/built-in.a
  AR      drivers/media/platform/st/sti/bdisp/built-in.a
  AR      drivers/media/platform/samsung/exynos4-is/built-in.a
  AR      drivers/media/platform/st/sti/c8sectpfe/built-in.a
  CC      drivers/rtc/rtc-mc146818-lib.o
  AR      drivers/media/platform/samsung/s3c-camif/built-in.a
  CC      drivers/acpi/acpica/utownerid.o
  CC      drivers/acpi/acpica/utpredef.o
  AR      drivers/media/platform/st/sti/delta/built-in.a
  AR      drivers/media/platform/samsung/s5p-g2d/built-in.a
  CC      drivers/scsi/sr_ioctl.o
  AR      drivers/media/platform/st/sti/hva/built-in.a
  CC      drivers/scsi/sr_vendor.o
  AR      drivers/media/platform/samsung/s5p-jpeg/built-in.a
  AR      drivers/media/platform/st/stm32/built-in.a
  AR      drivers/media/platform/st/built-in.a
  AR      drivers/media/platform/samsung/s5p-mfc/built-in.a
  AR      drivers/media/platform/samsung/built-in.a
  CC      drivers/acpi/acpica/utresdecode.o
  AR      drivers/media/platform/sunxi/sun4i-csi/built-in.a
  CC      drivers/gpu/drm/drm_property.o
  AR      drivers/media/platform/sunxi/sun6i-csi/built-in.a
  AR      drivers/media/platform/sunxi/sun6i-mipi-csi2/built-in.a
  CC      drivers/pcmcia/rsrc_nonstatic.o
  AR      lib/lib.a
  CC      drivers/rtc/rtc-cmos.o
  AR      drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/built-in.a
  AR      drivers/media/platform/ti/am437x/built-in.a
  AR      drivers/ata/built-in.a
  CC      drivers/scsi/sg.o
  AR      drivers/media/platform/sunxi/sun8i-di/built-in.a
  AR      drivers/net/ethernet/brocade/built-in.a
  AR      drivers/media/platform/ti/vpe/built-in.a
  AR      drivers/media/platform/ti/cal/built-in.a
  GEN     lib/crc32table.h
  AR      drivers/media/pci/ttpci/built-in.a
  AR      drivers/media/platform/sunxi/sun8i-rotate/built-in.a
  CC      lib/oid_registry.o
  AR      drivers/media/platform/sunxi/built-in.a
  AR      drivers/net/ethernet/cavium/common/built-in.a
  AR      drivers/media/platform/ti/davinci/built-in.a
  AR      drivers/media/pci/b2c2/built-in.a
  CC      net/ipv6/calipso.o
  AR      drivers/media/pci/pluto2/built-in.a
  AR      drivers/net/ethernet/cavium/thunder/built-in.a
  AR      drivers/media/platform/ti/j721e-csi2rx/built-in.a
  AR      drivers/media/platform/ti/omap/built-in.a
  CC      drivers/gpu/drm/drm_syncobj.o
  AR      drivers/net/ethernet/cavium/liquidio/built-in.a
  AR      drivers/media/pci/dm1105/built-in.a
  AR      drivers/media/pci/pt1/built-in.a
  AR      drivers/media/platform/ti/omap3isp/built-in.a
  CC      drivers/input/evdev.o
  CC [M]  drivers/gpu/drm/xe/xe_huc.o
  AR      drivers/net/ethernet/cavium/octeon/built-in.a
  AR      drivers/media/platform/ti/built-in.a
  AR      drivers/net/ethernet/cavium/built-in.a
  AR      drivers/media/pci/pt3/built-in.a
  AR      drivers/net/ethernet/chelsio/built-in.a
  CC      net/ipv6/ah6.o
  CC      drivers/usb/core/generic.o
  AR      drivers/media/pci/ngene/built-in.a
  AR      drivers/media/pci/mantis/built-in.a
  AR      drivers/media/platform/verisilicon/built-in.a
  AR      drivers/net/ethernet/cisco/built-in.a
  AR      drivers/media/pci/ddbridge/built-in.a
  AR      drivers/media/usb/b2c2/built-in.a
  AR      drivers/media/platform/via/built-in.a
  AR      drivers/media/pci/saa7146/built-in.a
  AR      drivers/media/mmc/siano/built-in.a
  AR      drivers/media/usb/dvb-usb/built-in.a
  AR      drivers/media/platform/xilinx/built-in.a
  AR      drivers/media/mmc/built-in.a
  AR      drivers/media/pci/smipcie/built-in.a
  AR      drivers/media/platform/built-in.a
  AR      drivers/media/usb/dvb-usb-v2/built-in.a
  AR      drivers/media/pci/netup_unidvb/built-in.a
  AR      drivers/media/usb/s2255/built-in.a
  AR      drivers/media/usb/siano/built-in.a
  AR      drivers/media/firewire/built-in.a
  AR      drivers/media/usb/ttusb-budget/built-in.a
  AR      drivers/media/pci/intel/ipu3/built-in.a
  CC      drivers/input/mouse/cypress_ps2.o
  AR      drivers/media/usb/ttusb-dec/built-in.a
  AR      drivers/media/pci/intel/ivsc/built-in.a
  AR      drivers/media/usb/built-in.a
  CC      net/ipv6/esp6.o
  AR      drivers/media/pci/intel/built-in.a
  CC      drivers/usb/core/quirks.o
  AR      drivers/media/pci/built-in.a
  CC      lib/crc32.o
  CC      drivers/acpi/acpica/utresrc.o
  CC      drivers/acpi/acpica/utstate.o
  CC      drivers/usb/core/devices.o
  AR      drivers/power/supply/built-in.a
  AR      drivers/power/built-in.a
  AR      drivers/media/spi/built-in.a
  AR      drivers/media/test-drivers/built-in.a
  CC      drivers/usb/core/phy.o
  CC      drivers/pcmcia/yenta_socket.o
  CC      drivers/acpi/acpica/utstring.o
  AR      drivers/media/built-in.a
  AR      drivers/net/usb/built-in.a
  AR      drivers/net/wireless/admtek/built-in.a
  CC      drivers/usb/core/port.o
  AR      drivers/net/wireless/ath/built-in.a
  CC      net/ipv6/sit.o
  CC      drivers/hwmon/hwmon.o
  AR      drivers/net/wireless/atmel/built-in.a
  AR      drivers/thermal/broadcom/built-in.a
  AR      drivers/net/wireless/broadcom/built-in.a
  AR      drivers/net/wireless/intel/built-in.a
  AR      drivers/thermal/renesas/built-in.a
  AR      drivers/net/wireless/intersil/built-in.a
  AR      drivers/thermal/samsung/built-in.a
  AR      drivers/net/wireless/mediatek/built-in.a
  AR      drivers/net/wireless/marvell/built-in.a
  CC      drivers/gpu/drm/i915/i915_memcpy.o
  CC      drivers/thermal/intel/intel_tcc.o
  AR      drivers/net/wireless/microchip/built-in.a
  AR      drivers/net/wireless/purelifi/built-in.a
  CC      drivers/net/ethernet/broadcom/tg3.o
  AR      drivers/net/wireless/quantenna/built-in.a
  AR      drivers/thermal/st/built-in.a
  CC      drivers/gpu/drm/i915/i915_mm.o
  AR      drivers/net/wireless/ralink/built-in.a
  AR      drivers/thermal/qcom/built-in.a
  CC      drivers/i2c/i2c-core-acpi.o
  CC      drivers/ptp/ptp_kvm_x86.o
  CC      drivers/ptp/ptp_kvm_common.o
  AR      drivers/net/wireless/realtek/built-in.a
  AR      drivers/watchdog/built-in.a
  CC      drivers/usb/core/hcd-pci.o
  AR      drivers/net/wireless/rsi/built-in.a
  CC      drivers/md/md.o
  AR      drivers/net/wireless/silabs/built-in.a
  CC      kernel/auditsc.o
  AR      drivers/net/wireless/st/built-in.a
  CC      drivers/input/mouse/psmouse-smbus.o
  AR      drivers/net/wireless/ti/built-in.a
  AR      drivers/net/wireless/zydas/built-in.a
  AR      drivers/thermal/tegra/built-in.a
  CC      drivers/md/md-bitmap.o
  AR      drivers/net/wireless/virtual/built-in.a
  AR      drivers/thermal/mediatek/built-in.a
  AR      drivers/net/wireless/built-in.a
  CC      drivers/thermal/thermal_core.o
  AR      fs/built-in.a
  CC      drivers/thermal/thermal_sysfs.o
  CC      drivers/gpu/drm/i915/i915_sw_fence.o
  AR      drivers/net/ethernet/cortina/built-in.a
  CC      drivers/acpi/acpica/utstrsuppt.o
  CC      drivers/i2c/i2c-smbus.o
  CC      drivers/scsi/scsi_sysfs.o
  AR      drivers/net/ethernet/dec/tulip/built-in.a
  CC      drivers/thermal/intel/therm_throt.o
  AR      drivers/net/ethernet/dec/built-in.a
  CC [M]  drivers/thermal/intel/x86_pkg_temp_thermal.o
  CC      drivers/gpu/drm/i915/i915_sw_fence_work.o
  CC      drivers/usb/core/usb-acpi.o
  AR      lib/built-in.a
  CC      drivers/cpufreq/cpufreq.o
  CC      drivers/cpuidle/governors/menu.o
  CC [M]  drivers/gpu/drm/xe/xe_irq.o
  AR      drivers/net/phy/built-in.a
  CC      drivers/cpuidle/cpuidle.o
  AR      drivers/mmc/built-in.a
  CC      drivers/net/mii.o
  AR      drivers/ufs/built-in.a
  CC      drivers/cpuidle/driver.o
  AR      drivers/leds/trigger/built-in.a
  AR      drivers/rtc/built-in.a
  AR      drivers/leds/blink/built-in.a
  AR      drivers/crypto/stm32/built-in.a
  AR      drivers/leds/simple/built-in.a
  AR      drivers/firmware/arm_ffa/built-in.a
  CC      drivers/leds/led-core.o
  CC [M]  drivers/gpu/drm/xe/xe_lrc.o
  AR      drivers/crypto/xilinx/built-in.a
  AR      drivers/firmware/arm_scmi/built-in.a
  AR      drivers/crypto/hisilicon/built-in.a
  AR      drivers/firmware/broadcom/built-in.a
  CC      drivers/clocksource/acpi_pm.o
  AR      drivers/crypto/intel/keembay/built-in.a
  AR      drivers/firmware/cirrus/built-in.a
  AR      drivers/crypto/intel/ixp4xx/built-in.a
  AR      drivers/crypto/intel/built-in.a
  AR      drivers/firmware/meson/built-in.a
  CC      drivers/clocksource/i8253.o
  AR      drivers/crypto/starfive/built-in.a
  AR      drivers/firmware/microchip/built-in.a
  AR      drivers/crypto/built-in.a
  AR      drivers/net/ethernet/dlink/built-in.a
  AR      drivers/net/ethernet/emulex/built-in.a
  AR      drivers/net/ethernet/engleder/built-in.a
  CC      drivers/acpi/acpica/utstrtoul64.o
  CC      drivers/firmware/efi/efi-bgrt.o
  CC      drivers/hid/usbhid/hid-core.o
  CC      drivers/gpu/drm/i915/i915_syncmap.o
  CC      drivers/firmware/efi/libstub/efi-stub-helper.o
  CC      drivers/hid/usbhid/hiddev.o
  CC      drivers/firmware/efi/efi.o
  CC      drivers/hid/hid-core.o
  CC      drivers/hid/usbhid/hid-pidff.o
  CC      drivers/acpi/acpica/utxface.o
  AR      drivers/ptp/built-in.a
  CC      drivers/acpi/acpica/utxfinit.o
  AR      drivers/input/mouse/built-in.a
  AR      drivers/input/built-in.a
  CC      drivers/acpi/acpica/utxferror.o
  CC      drivers/hid/hid-input.o
  AR      drivers/net/ethernet/ezchip/built-in.a
  CC      drivers/acpi/acpica/utxfmutex.o
  CC      drivers/gpu/drm/i915/i915_user_extensions.o
  CC      drivers/cpuidle/governors/haltpoll.o
  AR      drivers/firmware/imx/built-in.a
  AR      drivers/net/ethernet/fujitsu/built-in.a
  CC      drivers/md/md-autodetect.o
  AR      drivers/net/ethernet/fungible/built-in.a
  CC      drivers/gpu/drm/i915/i915_debugfs.o
  AR      drivers/firmware/psci/built-in.a
  CC      drivers/gpu/drm/i915/i915_debugfs_params.o
  CC      drivers/net/loopback.o
  AR      drivers/firmware/qcom/built-in.a
  AR      drivers/i2c/built-in.a
  CC      drivers/hid/hid-quirks.o
  CC      drivers/hid/hid-debug.o
  CC      drivers/gpu/drm/i915/i915_pmu.o
  CC      drivers/leds/led-class.o
  CC      drivers/firmware/efi/vars.o
  AR      drivers/usb/core/built-in.a
  AR      drivers/platform/x86/amd/built-in.a
  CC      drivers/mailbox/mailbox.o
  AR      drivers/pcmcia/built-in.a
  AR      drivers/platform/x86/intel/built-in.a
  CC      drivers/platform/x86/wmi.o
  CC      drivers/mailbox/pcc.o
  CC      drivers/platform/x86/wmi-bmof.o
  CC      drivers/leds/led-triggers.o
  CC      net/ipv6/addrconf_core.o
  CC      drivers/gpu/drm/i915/gt/gen2_engine_cs.o
  AR      drivers/hwmon/built-in.a
  AR      drivers/usb/host/built-in.a
  AR      drivers/usb/built-in.a
  CC      drivers/gpu/drm/i915/gt/gen6_engine_cs.o
  CC [M]  drivers/gpu/drm/xe/xe_migrate.o
  CC      drivers/md/dm.o
  AR      drivers/clocksource/built-in.a
  CC      drivers/firmware/efi/reboot.o
  CC      drivers/net/netconsole.o
  CC      drivers/firmware/efi/libstub/gop.o
  AR      drivers/thermal/intel/built-in.a
  AR      drivers/acpi/acpica/built-in.a
  CC      drivers/thermal/thermal_trip.o
  AR      drivers/firmware/smccc/built-in.a
  CC      drivers/firmware/efi/memattr.o
  AR      drivers/perf/built-in.a
  AR      drivers/acpi/built-in.a
  AR      drivers/firmware/tegra/built-in.a
  CC      drivers/thermal/thermal_helpers.o
  CC      drivers/gpu/drm/i915/gt/gen6_ppgtt.o
  CC      net/ipv6/exthdrs_core.o
  AR      drivers/hwtracing/intel_th/built-in.a
  CC      drivers/thermal/thermal_hwmon.o
  AR      drivers/scsi/built-in.a
  CC      drivers/net/virtio_net.o
  CC      drivers/gpu/drm/i915/gt/gen7_renderclear.o
  AR      drivers/android/built-in.a
  CC      drivers/thermal/gov_step_wise.o
  CC      drivers/thermal/gov_user_space.o
  CC      net/ipv6/ip6_checksum.o
  CC      kernel/audit_watch.o
  CC      kernel/audit_fsnotify.o
  CC      drivers/firmware/efi/tpm.o
  CC      drivers/cpuidle/governor.o
  CC      drivers/gpu/drm/drm_sysfs.o
  CC      drivers/md/dm-table.o
  AR      drivers/mailbox/built-in.a
  CC      drivers/gpu/drm/drm_trace_points.o
  CC      drivers/hid/hidraw.o
  CC      kernel/audit_tree.o
  CC      drivers/firmware/efi/memmap.o
  AR      drivers/leds/built-in.a
  CC      drivers/firmware/efi/capsule.o
  CC      kernel/kprobes.o
  AR      drivers/nvmem/layouts/built-in.a
  CC      drivers/nvmem/core.o
  CC      kernel/seccomp.o
  AR      drivers/cpuidle/governors/built-in.a
  CC      drivers/firmware/efi/esrt.o
  CC      drivers/firmware/efi/runtime-wrappers.o
  AR      drivers/net/ethernet/google/built-in.a
  CC      drivers/firmware/efi/capsule-loader.o
  AR      drivers/hid/usbhid/built-in.a
  CC      drivers/md/dm-target.o
  CC      drivers/platform/x86/eeepc-laptop.o
  CC      drivers/firmware/efi/libstub/secureboot.o
  CC      kernel/relay.o
  CC      drivers/hid/hid-generic.o
  CC      drivers/md/dm-linear.o
  CC      drivers/net/net_failover.o
  AR      drivers/net/ethernet/huawei/built-in.a
  CC      drivers/md/dm-stripe.o
  AR      drivers/thermal/built-in.a
  CC      drivers/gpu/drm/i915/gt/gen8_engine_cs.o
  CC      drivers/cpuidle/sysfs.o
  CC      drivers/cpufreq/freq_table.o
  CC      drivers/net/ethernet/intel/e1000/e1000_main.o
  AR      drivers/platform/surface/built-in.a
  CC      drivers/gpu/drm/i915/gt/gen8_ppgtt.o
  CC      drivers/gpu/drm/i915/gt/intel_breadcrumbs.o
  CC      drivers/md/dm-ioctl.o
  CC      drivers/gpu/drm/i915/gt/intel_context.o
  CC      drivers/net/ethernet/intel/e1000/e1000_hw.o
  CC      drivers/gpu/drm/i915/gt/intel_context_sseu.o
  CC      kernel/utsname_sysctl.o
  CC      drivers/hid/hid-a4tech.o
  CC      net/ipv6/ip6_icmp.o
  CC      drivers/cpuidle/poll_state.o
  CC      kernel/delayacct.o
  CC      net/ipv6/output_core.o
  CC      drivers/firmware/efi/earlycon.o
  CC      kernel/taskstats.o
  AR      drivers/net/ethernet/i825xx/built-in.a
  CC      kernel/tsacct.o
  CC      kernel/tracepoint.o
  CC      drivers/firmware/efi/libstub/tpm.o
  AR      drivers/net/ethernet/microsoft/built-in.a
  CC      drivers/hid/hid-apple.o
  CC      drivers/net/ethernet/intel/e1000e/82571.o
  CC      drivers/hid/hid-belkin.o
  CC      drivers/cpufreq/cpufreq_performance.o
  CC      drivers/net/ethernet/intel/e100.o
  AR      drivers/net/ethernet/litex/built-in.a
  CC      drivers/cpuidle/cpuidle-haltpoll.o
  CC      kernel/irq_work.o
  CC      drivers/cpufreq/cpufreq_userspace.o
  CC      drivers/net/ethernet/intel/e1000e/ich8lan.o
  CC      drivers/net/ethernet/intel/e1000e/80003es2lan.o
  CC      net/ipv6/protocol.o
  CC      drivers/net/ethernet/intel/e1000e/mac.o
  CC      net/ipv6/ip6_offload.o
  CC      drivers/md/dm-io.o
  CC      drivers/hid/hid-cherry.o
  AR      drivers/net/ethernet/marvell/octeon_ep/built-in.a
  AR      drivers/net/ethernet/marvell/octeon_ep_vf/built-in.a
  AR      drivers/net/ethernet/marvell/octeontx2/built-in.a
  CC      kernel/static_call.o
  CC      drivers/md/dm-kcopyd.o
  AR      drivers/net/ethernet/marvell/prestera/built-in.a
  CC      drivers/platform/x86/p2sb.o
  CC      drivers/net/ethernet/marvell/sky2.o
  AR      drivers/nvmem/built-in.a
  CC      kernel/padata.o
  CC      kernel/jump_label.o
  CC      drivers/cpufreq/cpufreq_ondemand.o
  CC      kernel/context_tracking.o
  CC      drivers/gpu/drm/drm_vblank.o
  AR      drivers/cpuidle/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_mmio.o
  CC      drivers/gpu/drm/drm_vblank_work.o
  CC      drivers/gpu/drm/drm_vma_manager.o
  CC      drivers/md/dm-sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_mocs.o
  CC      drivers/hid/hid-chicony.o
  CC      kernel/iomem.o
  CC      net/ipv6/tcpv6_offload.o
  CC      net/ipv6/exthdrs_offload.o
  CC      drivers/net/ethernet/intel/e1000e/manage.o
  CC      kernel/rseq.o
  CC      drivers/firmware/efi/libstub/file.o
  CC      drivers/firmware/efi/libstub/mem.o
  AR      drivers/net/ethernet/mellanox/built-in.a
  CC      drivers/net/ethernet/intel/e1000/e1000_ethtool.o
  AR      drivers/net/ethernet/meta/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_module.o
  CC      drivers/md/dm-stats.o
  CC      drivers/gpu/drm/i915/gt/intel_engine_cs.o
  CC      drivers/hid/hid-cypress.o
  CC      drivers/net/ethernet/intel/e1000/e1000_param.o
  CC      drivers/gpu/drm/i915/gt/intel_engine_heartbeat.o
  AR      drivers/platform/x86/built-in.a
  CC      net/ipv6/inet6_hashtables.o
  AR      drivers/platform/built-in.a
  CC      drivers/firmware/efi/libstub/random.o
  AR      drivers/net/ethernet/micrel/built-in.a
  CC      drivers/net/ethernet/intel/e1000e/nvm.o
  AR      drivers/net/ethernet/microchip/built-in.a
  AR      drivers/net/ethernet/mscc/built-in.a
  CC      drivers/net/ethernet/intel/e1000e/phy.o
  AR      drivers/net/ethernet/myricom/built-in.a
  CC      drivers/net/ethernet/intel/e1000e/param.o
  AR      drivers/firmware/efi/built-in.a
  CC      drivers/gpu/drm/i915/gt/intel_engine_pm.o
  CC      drivers/md/dm-rq.o
  CC      drivers/md/dm-io-rewind.o
  CC [M]  drivers/gpu/drm/xe/xe_oa.o
  CC      drivers/gpu/drm/drm_writeback.o
  CC      drivers/gpu/drm/drm_panel.o
  CC      drivers/gpu/drm/drm_pci.o
  CC      drivers/gpu/drm/drm_debugfs.o
  CC      drivers/cpufreq/cpufreq_governor.o
  CC [M]  drivers/gpu/drm/xe/xe_observation.o
  CC      drivers/gpu/drm/drm_debugfs_crc.o
  CC      drivers/md/dm-builtin.o
  CC      drivers/net/ethernet/intel/e1000e/ethtool.o
  CC      drivers/net/ethernet/intel/e1000e/netdev.o
  CC      drivers/md/dm-raid1.o
  CC      drivers/gpu/drm/i915/gt/intel_engine_user.o
  CC      drivers/firmware/efi/libstub/randomalloc.o
  CC      net/ipv6/mcast_snoop.o
  CC [M]  drivers/gpu/drm/xe/xe_pat.o
  CC      drivers/net/ethernet/intel/e1000e/ptp.o
  CC      drivers/md/dm-log.o
  AR      drivers/firmware/xilinx/built-in.a
  CC      drivers/cpufreq/cpufreq_governor_attr_set.o
  CC      drivers/cpufreq/acpi-cpufreq.o
  AR      kernel/built-in.a
  CC      drivers/hid/hid-ezkey.o
  CC      drivers/md/dm-region-hash.o
  CC      drivers/md/dm-zero.o
  CC [M]  drivers/gpu/drm/xe/xe_pci.o
  CC [M]  drivers/gpu/drm/xe/xe_pcode.o
  CC [M]  drivers/gpu/drm/xe/xe_pm.o
  CC      drivers/gpu/drm/drm_panel_orientation_quirks.o
  CC [M]  drivers/gpu/drm/xe/xe_preempt_fence.o
  CC      drivers/gpu/drm/drm_buddy.o
  CC      drivers/gpu/drm/drm_gem_shmem_helper.o
  CC      drivers/gpu/drm/i915/gt/intel_execlists_submission.o
  CC      drivers/firmware/dmi_scan.o
  AR      drivers/net/ethernet/natsemi/built-in.a
  AR      drivers/net/ethernet/neterion/built-in.a
  CC      drivers/gpu/drm/drm_atomic_helper.o
  AR      drivers/net/ethernet/netronome/built-in.a
  AR      drivers/net/ethernet/ni/built-in.a
  CC      drivers/net/ethernet/nvidia/forcedeth.o
  CC      drivers/firmware/dmi-id.o
  CC      drivers/firmware/memmap.o
  CC [M]  drivers/gpu/drm/xe/xe_pt.o
  CC      drivers/firmware/efi/libstub/pci.o
  CC      drivers/firmware/efi/libstub/skip_spaces.o
  CC      drivers/cpufreq/amd-pstate.o
  CC      drivers/gpu/drm/drm_atomic_state_helper.o
  CC      drivers/firmware/efi/libstub/lib-cmdline.o
  CC      drivers/gpu/drm/i915/gt/intel_ggtt.o
  CC      drivers/cpufreq/amd-pstate-trace.o
  CC [M]  drivers/gpu/drm/xe/xe_pt_walk.o
  CC [M]  drivers/gpu/drm/xe/xe_query.o
  CC [M]  drivers/gpu/drm/xe/xe_range_fence.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_sr.o
  AR      drivers/net/ethernet/oki-semi/built-in.a
  CC      drivers/cpufreq/intel_pstate.o
  AR      drivers/net/ethernet/packetengines/built-in.a
  AR      drivers/net/ethernet/qlogic/built-in.a
  CC      drivers/hid/hid-gyration.o
  AR      drivers/net/ethernet/qualcomm/emac/built-in.a
  CC      drivers/hid/hid-ite.o
  AR      drivers/net/ethernet/qualcomm/built-in.a
  CC      drivers/gpu/drm/drm_crtc_helper.o
  CC      drivers/net/ethernet/realtek/8139too.o
  AR      drivers/net/ethernet/renesas/built-in.a
  CC      drivers/gpu/drm/i915/gt/intel_ggtt_fencing.o
  CC      drivers/gpu/drm/drm_damage_helper.o
  CC      drivers/hid/hid-kensington.o
  AR      drivers/net/ethernet/rdc/built-in.a
  CC      drivers/gpu/drm/drm_encoder_slave.o
  CC      drivers/hid/hid-lg.o
  AR      drivers/net/ethernet/intel/e1000/built-in.a
  CC      drivers/firmware/efi/libstub/lib-ctype.o
  CC      drivers/gpu/drm/i915/gt/intel_gt.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.o
  CC      drivers/gpu/drm/drm_flip_work.o
  CC      drivers/firmware/efi/libstub/alignedmem.o
  CC      drivers/firmware/efi/libstub/relocate.o
  CC      drivers/gpu/drm/drm_format_helper.o
  AR      net/ipv6/built-in.a
  CC      drivers/gpu/drm/drm_gem_atomic_helper.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_whitelist.o
  AR      net/built-in.a
  AR      drivers/md/built-in.a
  CC      drivers/firmware/efi/libstub/printk.o
  CC      drivers/firmware/efi/libstub/vsprintf.o
  CC [M]  drivers/gpu/drm/xe/xe_rtp.o
  AR      drivers/net/ethernet/rocker/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_ring_ops.o
  CC [M]  drivers/gpu/drm/xe/xe_sa.o
  CC [M]  drivers/gpu/drm/xe/xe_sched_job.o
  CC [M]  drivers/gpu/drm/xe/xe_step.o
  CC      drivers/firmware/efi/libstub/x86-stub.o
  CC      drivers/firmware/efi/libstub/smbios.o
  CC      drivers/gpu/drm/drm_gem_framebuffer_helper.o
  CC      drivers/gpu/drm/drm_kms_helper_common.o
  CC      drivers/gpu/drm/drm_modeset_helper.o
  CC      drivers/hid/hid-lgff.o
  CC [M]  drivers/gpu/drm/xe/xe_sync.o
  CC [M]  drivers/gpu/drm/xe/xe_tile.o
  CC [M]  drivers/gpu/drm/xe/xe_tile_sysfs.o
  CC      drivers/gpu/drm/drm_plane_helper.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.o
  CC [M]  drivers/gpu/drm/xe/xe_trace.o
  CC [M]  drivers/gpu/drm/xe/xe_trace_bo.o
  CC      drivers/hid/hid-lg4ff.o
  AR      drivers/net/ethernet/samsung/built-in.a
  AR      drivers/net/ethernet/seeq/built-in.a
  CC      drivers/gpu/drm/drm_probe_helper.o
  CC      drivers/hid/hid-lg-g15.o
  AR      drivers/net/ethernet/silan/built-in.a
  CC      drivers/gpu/drm/drm_rect.o
  AR      drivers/net/ethernet/sis/built-in.a
  CC      drivers/gpu/drm/drm_self_refresh_helper.o
  AR      drivers/net/ethernet/sfc/built-in.a
  CC      drivers/hid/hid-microsoft.o
  AR      drivers/net/ethernet/smsc/built-in.a
  CC      drivers/hid/hid-monterey.o
  AR      drivers/net/ethernet/socionext/built-in.a
  AR      drivers/net/ethernet/stmicro/built-in.a
  CC      drivers/hid/hid-ntrig.o
  AR      drivers/net/ethernet/sun/built-in.a
  AR      drivers/net/ethernet/tehuti/built-in.a
  AR      drivers/net/ethernet/ti/built-in.a
  STUBCPY drivers/firmware/efi/libstub/efi-stub-helper.stub.o
  STUBCPY drivers/firmware/efi/libstub/file.stub.o
  AR      drivers/net/ethernet/vertexcom/built-in.a
  CC      drivers/net/ethernet/realtek/r8169_main.o
  CC      drivers/gpu/drm/drm_simple_kms_helper.o
  AR      drivers/net/ethernet/via/built-in.a
  CC      drivers/net/ethernet/realtek/r8169_firmware.o
  STUBCPY drivers/firmware/efi/libstub/gop.stub.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_clock_utils.o
  STUBCPY drivers/firmware/efi/libstub/lib-cmdline.stub.o
  CC      drivers/hid/hid-pl.o
  CC      drivers/hid/hid-petalynx.o
  AR      drivers/net/ethernet/marvell/built-in.a
  CC      drivers/hid/hid-redragon.o
  AR      drivers/net/ethernet/wangxun/built-in.a
  AR      drivers/net/ethernet/wiznet/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_trace_guc.o
  AR      drivers/net/ethernet/xilinx/built-in.a
  CC      drivers/hid/hid-samsung.o
  AR      drivers/net/ethernet/xircom/built-in.a
  CC      drivers/hid/hid-sony.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
  AR      drivers/net/ethernet/synopsys/built-in.a
  AR      drivers/net/ethernet/pensando/built-in.a
  CC      drivers/gpu/drm/i915/gt/intel_gt_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
  CC      drivers/hid/hid-sunplus.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_vram_mgr.o
  CC      drivers/net/ethernet/realtek/r8169_phy_config.o
  CC      drivers/hid/hid-topseed.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.o
  STUBCPY drivers/firmware/efi/libstub/lib-ctype.stub.o
  CC [M]  drivers/gpu/drm/xe/xe_tuning.o
  CC [M]  drivers/gpu/drm/xe/xe_uc.o
  STUBCPY drivers/firmware/efi/libstub/mem.stub.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_fw.o
  STUBCPY drivers/firmware/efi/libstub/pci.stub.o
  CC [M]  drivers/gpu/drm/xe/xe_vm.o
  STUBCPY drivers/firmware/efi/libstub/printk.stub.o
  CC [M]  drivers/gpu/drm/xe/xe_vram.o
  STUBCPY drivers/firmware/efi/libstub/random.stub.o
  CC [M]  drivers/gpu/drm/xe/xe_vram_freq.o
  CC      drivers/gpu/drm/bridge/panel.o
  STUBCPY drivers/firmware/efi/libstub/randomalloc.stub.o
  STUBCPY drivers/firmware/efi/libstub/relocate.stub.o
  STUBCPY drivers/firmware/efi/libstub/secureboot.stub.o
  STUBCPY drivers/firmware/efi/libstub/skip_spaces.stub.o
  STUBCPY drivers/firmware/efi/libstub/smbios.stub.o
  STUBCPY drivers/firmware/efi/libstub/tpm.stub.o
  STUBCPY drivers/firmware/efi/libstub/vsprintf.stub.o
  STUBCPY drivers/firmware/efi/libstub/x86-stub.stub.o
  STUBCPY drivers/firmware/efi/libstub/alignedmem.stub.o
  CC      drivers/gpu/drm/drm_mipi_dsi.o
  CC [M]  drivers/gpu/drm/xe/xe_wait_user_fence.o
  AR      drivers/firmware/efi/libstub/lib.a
  CC [M]  drivers/gpu/drm/xe/xe_wa.o
  AR      drivers/firmware/built-in.a
  CC [M]  drivers/gpu/drm/drm_exec.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_irq.o
  CC [M]  drivers/gpu/drm/xe/xe_wopcm.o
  CC [M]  drivers/gpu/drm/drm_gpuvm.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_mcr.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_pm.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_pm_irq.o
  CC [M]  drivers/gpu/drm/drm_suballoc.o
  CC [M]  drivers/gpu/drm/xe/xe_hmm.o
  CC [M]  drivers/gpu/drm/xe/xe_hwmon.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_sriov_vf.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_relay.o
  CC [M]  drivers/gpu/drm/drm_gem_ttm_helper.o
  CC [M]  drivers/gpu/drm/xe/xe_memirq.o
  CC [M]  drivers/gpu/drm/xe/xe_sriov.o
  CC [M]  drivers/gpu/drm/xe/display/ext/i915_irq.o
  CC [M]  drivers/gpu/drm/xe/display/ext/i915_utils.o
  CC [M]  drivers/gpu/drm/xe/display/intel_fb_bo.o
  CC [M]  drivers/gpu/drm/xe/display/intel_fbdev_fb.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_requests.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display_misc.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display_rps.o
  AR      drivers/cpufreq/built-in.a
  CC [M]  drivers/gpu/drm/xe/display/xe_display_wa.o
  CC [M]  drivers/gpu/drm/xe/display/xe_dsb_buffer.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_sysfs.o
  CC [M]  drivers/gpu/drm/xe/display/xe_fb_pin.o
  CC      drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.o
  CC [M]  drivers/gpu/drm/xe/display/xe_hdcp_gsc.o
  CC [M]  drivers/gpu/drm/xe/display/xe_plane_initial.o
  CC      drivers/gpu/drm/i915/gt/intel_gtt.o
  CC [M]  drivers/gpu/drm/xe/display/xe_tdf.o
  CC [M]  drivers/gpu/drm/xe/i915-soc/intel_dram.o
  CC      drivers/gpu/drm/i915/gt/intel_llc.o
  CC [M]  drivers/gpu/drm/xe/i915-soc/intel_pch.o
  CC [M]  drivers/gpu/drm/xe/i915-display/icl_dsi.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_alpm.o
  CC      drivers/gpu/drm/i915/gt/intel_lrc.o
  CC      drivers/gpu/drm/i915/gt/intel_migrate.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_atomic.o
  AR      drivers/hid/built-in.a
  LD [M]  drivers/gpu/drm/drm_suballoc_helper.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_atomic_plane.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_audio.o
  CC      drivers/gpu/drm/i915/gt/intel_mocs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_backlight.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_bios.o
  LD [M]  drivers/gpu/drm/drm_ttm_helper.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_bw.o
  AR      drivers/net/ethernet/nvidia/built-in.a
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cdclk.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_color.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_combo_phy.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_connector.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_crtc.o
  CC      drivers/gpu/drm/i915/gt/intel_ppgtt.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_crtc_state_dump.o
  CC      drivers/gpu/drm/i915/gt/intel_rc6.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cursor.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cx0_phy.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_ddi.o
  CC      drivers/gpu/drm/i915/gt/intel_region_lmem.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_ddi_buf_trans.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_device.o
  CC      drivers/gpu/drm/i915/gt/intel_renderstate.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_driver.o
  CC      drivers/gpu/drm/i915/gt/intel_reset.o
  AR      drivers/net/ethernet/intel/e1000e/built-in.a
  AR      drivers/net/ethernet/intel/built-in.a
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_irq.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_params.o
  CC      drivers/gpu/drm/i915/gt/intel_ring.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_power.o
  CC      drivers/gpu/drm/i915/gt/intel_ring_submission.o
  CC      drivers/gpu/drm/i915/gt/intel_rps.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_power_map.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_power_well.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_trace.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_wa.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dkl_phy.o
  CC      drivers/gpu/drm/i915/gt/intel_sa_media.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dmc.o
  CC      drivers/gpu/drm/i915/gt/intel_sseu.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_aux.o
  CC      drivers/gpu/drm/i915/gt/intel_sseu_debugfs.o
  CC      drivers/gpu/drm/i915/gt/intel_timeline.o
  AR      drivers/net/ethernet/broadcom/built-in.a
  CC      drivers/gpu/drm/i915/gt/intel_tlb.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_aux_backlight.o
  CC      drivers/gpu/drm/i915/gt/intel_wopcm.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_hdcp.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_link_training.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_mst.o
  AR      drivers/net/ethernet/realtek/built-in.a
  AR      drivers/net/ethernet/built-in.a
  CC      drivers/gpu/drm/i915/gt/intel_workarounds.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpll.o
  CC      drivers/gpu/drm/i915/gt/shmem_utils.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpll_mgr.o
  CC      drivers/gpu/drm/i915/gt/sysfs_engines.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpt_common.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_drrs.o
  CC      drivers/gpu/drm/i915/gt/intel_ggtt_gmch.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsb.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi.o
  AR      drivers/net/built-in.a
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi_dcs_backlight.o
  CC      drivers/gpu/drm/i915/gt/gen6_renderstate.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi_vbt.o
  CC      drivers/gpu/drm/i915/gt/gen7_renderstate.o
  CC      drivers/gpu/drm/i915/gt/gen8_renderstate.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_encoder.o
  CC      drivers/gpu/drm/i915/gt/gen9_renderstate.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_busy.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_clflush.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fb.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fbc.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_context.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fdi.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_create.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_dmabuf.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fifo_underrun.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_domain.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_execbuffer.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_internal.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_frontbuffer.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_global_state.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_lmem.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_gmbus.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_mman.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_object.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hdcp.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_pages.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_phys.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_pm.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hdcp_gsc_message.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hdmi.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hotplug.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hotplug_irq.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_region.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hti.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_shmem.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_link_bw.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_shrinker.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_lspcon.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_lock.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_stolen.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_throttle.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_setup.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_tiling.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_verify.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_panel.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_ttm.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pmdemand.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pps.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_ttm_move.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_psr.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_qp_tables.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_userptr.o
  CC      drivers/gpu/drm/i915/gem/i915_gem_wait.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_quirks.o
  CC      drivers/gpu/drm/i915/gem/i915_gemfs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_snps_phy.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_tc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vblank.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vdsc.o
  CC      drivers/gpu/drm/i915/i915_active.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vga.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vrr.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dmc_wl.o
  CC      drivers/gpu/drm/i915/i915_cmd_parser.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_wm.o
  CC      drivers/gpu/drm/i915/i915_deps.o
  CC      drivers/gpu/drm/i915/i915_gem.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_scaler.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_universal_plane.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_watermark.o
  CC      drivers/gpu/drm/i915/i915_gem_evict.o
  CC      drivers/gpu/drm/i915/i915_gem_gtt.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_acpi.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_opregion.o
  CC      drivers/gpu/drm/i915/i915_gem_ww.o
  CC      drivers/gpu/drm/i915/i915_query.o
  CC [M]  drivers/gpu/drm/xe/xe_debugfs.o
  CC      drivers/gpu/drm/i915/i915_request.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.o
  CC      drivers/gpu/drm/i915/i915_scheduler.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_stats.o
  CC      drivers/gpu/drm/i915/i915_trace_points.o
  CC      drivers/gpu/drm/i915/i915_ttm_buddy_manager.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_debugfs.o
  CC      drivers/gpu/drm/i915/i915_vma.o
  CC      drivers/gpu/drm/i915/i915_vma_resource.o
  CC [M]  drivers/gpu/drm/xe/xe_huc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_debugfs.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_debugfs.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_debugfs_params.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pipe_crc.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_ads.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_capture.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_ct.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_fw.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_hwconfig.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_log.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_rc.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_guc_submission.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_huc.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_huc_fw.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_uc.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.o
  CC      drivers/gpu/drm/i915/gt/uc/intel_uc_fw.o
  CC      drivers/gpu/drm/i915/gt/intel_gsc.o
  CC      drivers/gpu/drm/i915/i915_hwmon.o
  CC      drivers/gpu/drm/i915/display/hsw_ips.o
  CC      drivers/gpu/drm/i915/display/i9xx_plane.o
  CC      drivers/gpu/drm/i915/display/i9xx_wm.o
  CC      drivers/gpu/drm/i915/display/intel_alpm.o
  CC      drivers/gpu/drm/i915/display/intel_atomic.o
  CC      drivers/gpu/drm/i915/display/intel_atomic_plane.o
  CC      drivers/gpu/drm/i915/display/intel_audio.o
  CC      drivers/gpu/drm/i915/display/intel_bios.o
  CC      drivers/gpu/drm/i915/display/intel_bw.o
  CC      drivers/gpu/drm/i915/display/intel_cdclk.o
  CC      drivers/gpu/drm/i915/display/intel_color.o
  CC      drivers/gpu/drm/i915/display/intel_combo_phy.o
  CC      drivers/gpu/drm/i915/display/intel_connector.o
  CC      drivers/gpu/drm/i915/display/intel_crtc.o
  CC      drivers/gpu/drm/i915/display/intel_crtc_state_dump.o
  CC      drivers/gpu/drm/i915/display/intel_cursor.o
  CC      drivers/gpu/drm/i915/display/intel_display.o
  CC      drivers/gpu/drm/i915/display/intel_display_driver.o
  CC      drivers/gpu/drm/i915/display/intel_display_irq.o
  CC      drivers/gpu/drm/i915/display/intel_display_params.o
  CC      drivers/gpu/drm/i915/display/intel_display_power.o
  CC      drivers/gpu/drm/i915/display/intel_display_power_map.o
  CC      drivers/gpu/drm/i915/display/intel_display_power_well.o
  CC      drivers/gpu/drm/i915/display/intel_display_reset.o
  CC      drivers/gpu/drm/i915/display/intel_display_rps.o
  CC      drivers/gpu/drm/i915/display/intel_display_wa.o
  CC      drivers/gpu/drm/i915/display/intel_dmc.o
  CC      drivers/gpu/drm/i915/display/intel_dmc_wl.o
  CC      drivers/gpu/drm/i915/display/intel_dpio_phy.o
  CC      drivers/gpu/drm/i915/display/intel_dpll.o
  CC      drivers/gpu/drm/i915/display/intel_dpll_mgr.o
  CC      drivers/gpu/drm/i915/display/intel_dpt.o
  CC      drivers/gpu/drm/i915/display/intel_dpt_common.o
  CC      drivers/gpu/drm/i915/display/intel_drrs.o
  CC      drivers/gpu/drm/i915/display/intel_dsb.o
  CC      drivers/gpu/drm/i915/display/intel_dsb_buffer.o
  CC      drivers/gpu/drm/i915/display/intel_fb.o
  CC      drivers/gpu/drm/i915/display/intel_fb_bo.o
  CC      drivers/gpu/drm/i915/display/intel_fb_pin.o
  CC      drivers/gpu/drm/i915/display/intel_fbc.o
  CC      drivers/gpu/drm/i915/display/intel_fdi.o
  CC      drivers/gpu/drm/i915/display/intel_fifo_underrun.o
  CC      drivers/gpu/drm/i915/display/intel_frontbuffer.o
  CC      drivers/gpu/drm/i915/display/intel_global_state.o
  CC      drivers/gpu/drm/i915/display/intel_hdcp.o
  CC      drivers/gpu/drm/i915/display/intel_hdcp_gsc.o
  CC      drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.o
  CC      drivers/gpu/drm/i915/display/intel_hotplug.o
  CC      drivers/gpu/drm/i915/display/intel_hotplug_irq.o
  CC      drivers/gpu/drm/i915/display/intel_hti.o
  CC      drivers/gpu/drm/i915/display/intel_link_bw.o
  CC      drivers/gpu/drm/i915/display/intel_load_detect.o
  CC      drivers/gpu/drm/i915/display/intel_lpe_audio.o
  CC      drivers/gpu/drm/i915/display/intel_modeset_lock.o
  CC      drivers/gpu/drm/i915/display/intel_modeset_setup.o
  CC      drivers/gpu/drm/i915/display/intel_modeset_verify.o
  CC      drivers/gpu/drm/i915/display/intel_overlay.o
  CC      drivers/gpu/drm/i915/display/intel_pch_display.o
  CC      drivers/gpu/drm/i915/display/intel_pch_refclk.o
  CC      drivers/gpu/drm/i915/display/intel_plane_initial.o
  CC      drivers/gpu/drm/i915/display/intel_pmdemand.o
  LD [M]  drivers/gpu/drm/xe/xe.o
  CC      drivers/gpu/drm/i915/display/intel_psr.o
  CC      drivers/gpu/drm/i915/display/intel_quirks.o
  CC      drivers/gpu/drm/i915/display/intel_sprite.o
  CC      drivers/gpu/drm/i915/display/intel_sprite_uapi.o
  CC      drivers/gpu/drm/i915/display/intel_tc.o
  CC      drivers/gpu/drm/i915/display/intel_vblank.o
  CC      drivers/gpu/drm/i915/display/intel_vga.o
  CC      drivers/gpu/drm/i915/display/intel_wm.o
  CC      drivers/gpu/drm/i915/display/skl_scaler.o
  CC      drivers/gpu/drm/i915/display/skl_universal_plane.o
  CC      drivers/gpu/drm/i915/display/skl_watermark.o
  CC      drivers/gpu/drm/i915/display/intel_acpi.o
  CC      drivers/gpu/drm/i915/display/intel_opregion.o
  CC      drivers/gpu/drm/i915/display/intel_display_debugfs.o
  CC      drivers/gpu/drm/i915/display/intel_display_debugfs_params.o
  CC      drivers/gpu/drm/i915/display/intel_pipe_crc.o
  CC      drivers/gpu/drm/i915/display/dvo_ch7017.o
  CC      drivers/gpu/drm/i915/display/dvo_ch7xxx.o
  CC      drivers/gpu/drm/i915/display/dvo_ivch.o
  CC      drivers/gpu/drm/i915/display/dvo_ns2501.o
  CC      drivers/gpu/drm/i915/display/dvo_sil164.o
  CC      drivers/gpu/drm/i915/display/dvo_tfp410.o
  CC      drivers/gpu/drm/i915/display/g4x_dp.o
  CC      drivers/gpu/drm/i915/display/g4x_hdmi.o
  CC      drivers/gpu/drm/i915/display/icl_dsi.o
  CC      drivers/gpu/drm/i915/display/intel_backlight.o
  CC      drivers/gpu/drm/i915/display/intel_crt.o
  CC      drivers/gpu/drm/i915/display/intel_cx0_phy.o
  CC      drivers/gpu/drm/i915/display/intel_ddi.o
  CC      drivers/gpu/drm/i915/display/intel_ddi_buf_trans.o
  CC      drivers/gpu/drm/i915/display/intel_display_device.o
  CC      drivers/gpu/drm/i915/display/intel_display_trace.o
  CC      drivers/gpu/drm/i915/display/intel_dkl_phy.o
  CC      drivers/gpu/drm/i915/display/intel_dp.o
  CC      drivers/gpu/drm/i915/display/intel_dp_aux.o
  CC      drivers/gpu/drm/i915/display/intel_dp_aux_backlight.o
  CC      drivers/gpu/drm/i915/display/intel_dp_hdcp.o
  CC      drivers/gpu/drm/i915/display/intel_dp_link_training.o
  CC      drivers/gpu/drm/i915/display/intel_dp_mst.o
  CC      drivers/gpu/drm/i915/display/intel_dsi.o
  CC      drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.o
  CC      drivers/gpu/drm/i915/display/intel_dsi_vbt.o
  CC      drivers/gpu/drm/i915/display/intel_dvo.o
  CC      drivers/gpu/drm/i915/display/intel_encoder.o
  CC      drivers/gpu/drm/i915/display/intel_gmbus.o
  CC      drivers/gpu/drm/i915/display/intel_hdmi.o
  CC      drivers/gpu/drm/i915/display/intel_lspcon.o
  CC      drivers/gpu/drm/i915/display/intel_lvds.o
  CC      drivers/gpu/drm/i915/display/intel_panel.o
  CC      drivers/gpu/drm/i915/display/intel_pps.o
  CC      drivers/gpu/drm/i915/display/intel_qp_tables.o
  CC      drivers/gpu/drm/i915/display/intel_sdvo.o
  CC      drivers/gpu/drm/i915/display/intel_snps_phy.o
  CC      drivers/gpu/drm/i915/display/intel_tv.o
  CC      drivers/gpu/drm/i915/display/intel_vdsc.o
  CC      drivers/gpu/drm/i915/display/intel_vrr.o
  CC      drivers/gpu/drm/i915/display/vlv_dsi.o
  CC      drivers/gpu/drm/i915/display/vlv_dsi_pll.o
  CC      drivers/gpu/drm/i915/i915_perf.o
  CC      drivers/gpu/drm/i915/pxp/intel_pxp.o
  CC      drivers/gpu/drm/i915/pxp/intel_pxp_huc.o
  CC      drivers/gpu/drm/i915/pxp/intel_pxp_tee.o
  CC      drivers/gpu/drm/i915/i915_gpu_error.o
  CC      drivers/gpu/drm/i915/i915_vgpu.o
  AR      drivers/gpu/drm/i915/built-in.a
  AR      drivers/gpu/drm/built-in.a
  AR      drivers/gpu/built-in.a
  AR      drivers/built-in.a
  AR      built-in.a
  AR      vmlinux.a
  LD      vmlinux.o
  OBJCOPY modules.builtin.modinfo
  GEN     modules.builtin
  MODPOST Module.symvers
  CC      .vmlinux.export.o
  CC [M]  fs/efivarfs/efivarfs.mod.o
  CC [M]  drivers/gpu/drm/drm_exec.mod.o
  CC [M]  drivers/gpu/drm/drm_gpuvm.mod.o
  CC [M]  drivers/gpu/drm/drm_suballoc_helper.mod.o
  CC [M]  drivers/gpu/drm/drm_ttm_helper.mod.o
  CC [M]  drivers/gpu/drm/scheduler/gpu-sched.mod.o
  CC [M]  drivers/gpu/drm/xe/xe.mod.o
  CC [M]  drivers/thermal/intel/x86_pkg_temp_thermal.mod.o
  CC [M]  sound/core/snd-hwdep.mod.o
  CC [M]  sound/core/snd-pcm.mod.o
  CC [M]  sound/pci/hda/snd-hda-codec.mod.o
  CC [M]  sound/pci/hda/snd-hda-codec-hdmi.mod.o
  CC [M]  sound/pci/hda/snd-hda-intel.mod.o
  CC [M]  sound/hda/snd-hda-core.mod.o
  CC [M]  sound/hda/snd-intel-dspcfg.mod.o
  CC [M]  sound/hda/snd-intel-sdw-acpi.mod.o
  CC [M]  net/netfilter/nf_log_syslog.mod.o
  CC [M]  net/netfilter/xt_mark.mod.o
  CC [M]  net/netfilter/xt_nat.mod.o
  CC [M]  net/netfilter/xt_LOG.mod.o
  CC [M]  net/netfilter/xt_MASQUERADE.mod.o
  CC [M]  net/netfilter/xt_addrtype.mod.o
  CC [M]  net/ipv4/netfilter/iptable_nat.mod.o
  LD [M]  drivers/gpu/drm/drm_ttm_helper.ko
  LD [M]  sound/core/snd-pcm.ko
  LD [M]  sound/hda/snd-hda-core.ko
  LD [M]  sound/pci/hda/snd-hda-codec.ko
  LD [M]  net/netfilter/xt_addrtype.ko
  LD [M]  drivers/gpu/drm/drm_gpuvm.ko
  LD [M]  sound/pci/hda/snd-hda-codec-hdmi.ko
  LD [M]  net/ipv4/netfilter/iptable_nat.ko
  LD [M]  drivers/gpu/drm/xe/xe.ko
  LD [M]  fs/efivarfs/efivarfs.ko
  LD [M]  net/netfilter/xt_MASQUERADE.ko
  LD [M]  net/netfilter/xt_mark.ko
  LD [M]  net/netfilter/nf_log_syslog.ko
  LD [M]  sound/hda/snd-intel-sdw-acpi.ko
  LD [M]  drivers/gpu/drm/drm_exec.ko
  LD [M]  net/netfilter/xt_LOG.ko
  LD [M]  net/netfilter/xt_nat.ko
  LD [M]  drivers/thermal/intel/x86_pkg_temp_thermal.ko
  LD [M]  sound/core/snd-hwdep.ko
  LD [M]  drivers/gpu/drm/drm_suballoc_helper.ko
  LD [M]  sound/hda/snd-intel-dspcfg.ko
  LD [M]  sound/pci/hda/snd-hda-intel.ko
  LD [M]  drivers/gpu/drm/scheduler/gpu-sched.ko
  UPD     include/generated/utsversion.h
  CC      init/version-timestamp.o
  KSYMS   .tmp_vmlinux0.kallsyms.S
  AS      .tmp_vmlinux0.kallsyms.o
  LD      .tmp_vmlinux1
  NM      .tmp_vmlinux1.syms
  KSYMS   .tmp_vmlinux1.kallsyms.S
  AS      .tmp_vmlinux1.kallsyms.o
  LD      .tmp_vmlinux2
  NM      .tmp_vmlinux2.syms
  KSYMS   .tmp_vmlinux2.kallsyms.S
  AS      .tmp_vmlinux2.kallsyms.o
  LD      vmlinux
  NM      System.map
  SORTTAB vmlinux
  RELOCS  arch/x86/boot/compressed/vmlinux.relocs
  RSTRIP  vmlinux
  CC      arch/x86/boot/a20.o
  AS      arch/x86/boot/bioscall.o
  CC      arch/x86/boot/cmdline.o
  AS      arch/x86/boot/copy.o
  HOSTCC  arch/x86/boot/mkcpustr
  CC      arch/x86/boot/cpuflags.o
  CC      arch/x86/boot/cpucheck.o
  CC      arch/x86/boot/early_serial_console.o
  CC      arch/x86/boot/edd.o
  CC      arch/x86/boot/main.o
  CC      arch/x86/boot/memory.o
  CC      arch/x86/boot/pm.o
  AS      arch/x86/boot/pmjump.o
  CC      arch/x86/boot/printf.o
  CC      arch/x86/boot/regs.o
  CC      arch/x86/boot/string.o
  CC      arch/x86/boot/tty.o
  CC      arch/x86/boot/video.o
  CC      arch/x86/boot/video-mode.o
  CC      arch/x86/boot/version.o
  CC      arch/x86/boot/video-vga.o
  CC      arch/x86/boot/video-vesa.o
  CC      arch/x86/boot/video-bios.o
  HOSTCC  arch/x86/boot/tools/build
  CPUSTR  arch/x86/boot/cpustr.h
  CC      arch/x86/boot/cpu.o
  LDS     arch/x86/boot/compressed/vmlinux.lds
  AS      arch/x86/boot/compressed/kernel_info.o
  AS      arch/x86/boot/compressed/head_32.o
  VOFFSET arch/x86/boot/compressed/../voffset.h
  CC      arch/x86/boot/compressed/string.o
  CC      arch/x86/boot/compressed/cmdline.o
  CC      arch/x86/boot/compressed/error.o
  OBJCOPY arch/x86/boot/compressed/vmlinux.bin
  HOSTCC  arch/x86/boot/compressed/mkpiggy
  CC      arch/x86/boot/compressed/cpuflags.o
  CC      arch/x86/boot/compressed/early_serial_console.o
  CC      arch/x86/boot/compressed/kaslr.o
  CC      arch/x86/boot/compressed/acpi.o
  CC      arch/x86/boot/compressed/efi.o
  GZIP    arch/x86/boot/compressed/vmlinux.bin.gz
  CC      arch/x86/boot/compressed/misc.o
  MKPIGGY arch/x86/boot/compressed/piggy.S
  AS      arch/x86/boot/compressed/piggy.o
  LD      arch/x86/boot/compressed/vmlinux
  ZOFFSET arch/x86/boot/zoffset.h
  OBJCOPY arch/x86/boot/vmlinux.bin
  AS      arch/x86/boot/header.o
  LD      arch/x86/boot/setup.elf
  OBJCOPY arch/x86/boot/setup.bin
  BUILD   arch/x86/boot/bzImage
Kernel: arch/x86/boot/bzImage is ready  (#1)
run-parts: executing /workspace/ci/hooks/20-kernel-doc
+ SRC_DIR=/workspace/kernel
+ cd /workspace/kernel
+ find drivers/gpu/drm/xe/ -name '*.[ch]' -not -path 'drivers/gpu/drm/xe/display/*'
+ xargs ./scripts/kernel-doc -Werror -none include/uapi/drm/xe_drm.h
include/uapi/drm/xe_drm.h:1793: warning: Function parameter or struct member 'ip_addr' not described in 'drm_xe_eu_stall_data_pvc'
include/uapi/drm/xe_drm.h:1793: warning: Function parameter or struct member 'active_count' not described in 'drm_xe_eu_stall_data_pvc'
include/uapi/drm/xe_drm.h:1793: warning: Function parameter or struct member 'other_count' not described in 'drm_xe_eu_stall_data_pvc'
include/uapi/drm/xe_drm.h:1793: warning: Function parameter or struct member 'control_count' not described in 'drm_xe_eu_stall_data_pvc'
include/uapi/drm/xe_drm.h:1793: warning: Function parameter or struct member 'pipestall_count' not described in 'drm_xe_eu_stall_data_pvc'
include/uapi/drm/xe_drm.h:1793: warning: Function parameter or struct member 'send_count' not described in 'drm_xe_eu_stall_data_pvc'
include/uapi/drm/xe_drm.h:1793: warning: Function parameter or struct member 'dist_acc_count' not described in 'drm_xe_eu_stall_data_pvc'
include/uapi/drm/xe_drm.h:1793: warning: Function parameter or struct member 'sbid_count' not described in 'drm_xe_eu_stall_data_pvc'
include/uapi/drm/xe_drm.h:1793: warning: Function parameter or struct member 'sync_count' not described in 'drm_xe_eu_stall_data_pvc'
include/uapi/drm/xe_drm.h:1793: warning: Function parameter or struct member 'inst_fetch_count' not described in 'drm_xe_eu_stall_data_pvc'
include/uapi/drm/xe_drm.h:1793: warning: Function parameter or struct member 'unused_bits' not described in 'drm_xe_eu_stall_data_pvc'
include/uapi/drm/xe_drm.h:1793: warning: Function parameter or struct member 'unused' not described in 'drm_xe_eu_stall_data_pvc'
include/uapi/drm/xe_drm.h:1829: warning: Function parameter or struct member 'ip_addr' not described in 'drm_xe_eu_stall_data_xe2'
include/uapi/drm/xe_drm.h:1829: warning: Function parameter or struct member 'tdr_count' not described in 'drm_xe_eu_stall_data_xe2'
include/uapi/drm/xe_drm.h:1829: warning: Function parameter or struct member 'other_count' not described in 'drm_xe_eu_stall_data_xe2'
include/uapi/drm/xe_drm.h:1829: warning: Function parameter or struct member 'control_count' not described in 'drm_xe_eu_stall_data_xe2'
include/uapi/drm/xe_drm.h:1829: warning: Function parameter or struct member 'pipestall_count' not described in 'drm_xe_eu_stall_data_xe2'
include/uapi/drm/xe_drm.h:1829: warning: Function parameter or struct member 'send_count' not described in 'drm_xe_eu_stall_data_xe2'
include/uapi/drm/xe_drm.h:1829: warning: Function parameter or struct member 'dist_acc_count' not described in 'drm_xe_eu_stall_data_xe2'
include/uapi/drm/xe_drm.h:1829: warning: Function parameter or struct member 'sbid_count' not described in 'drm_xe_eu_stall_data_xe2'
include/uapi/drm/xe_drm.h:1829: warning: Function parameter or struct member 'sync_count' not described in 'drm_xe_eu_stall_data_xe2'
include/uapi/drm/xe_drm.h:1829: warning: Function parameter or struct member 'inst_fetch_count' not described in 'drm_xe_eu_stall_data_xe2'
include/uapi/drm/xe_drm.h:1829: warning: Function parameter or struct member 'active_count' not described in 'drm_xe_eu_stall_data_xe2'
include/uapi/drm/xe_drm.h:1829: warning: Function parameter or struct member 'ex_id' not described in 'drm_xe_eu_stall_data_xe2'
include/uapi/drm/xe_drm.h:1829: warning: Function parameter or struct member 'end_flag' not described in 'drm_xe_eu_stall_data_xe2'
include/uapi/drm/xe_drm.h:1829: warning: Function parameter or struct member 'unused_bits' not described in 'drm_xe_eu_stall_data_xe2'
include/uapi/drm/xe_drm.h:1829: warning: Function parameter or struct member 'unused' not described in 'drm_xe_eu_stall_data_xe2'
drivers/gpu/drm/xe/xe_eustall_cntr.c:212: warning: Function parameter or struct member 'buf_size' not described in 'buf_data_size'
drivers/gpu/drm/xe/xe_eustall_cntr.c:405: warning: Function parameter or struct member 'file' not described in 'xe_eu_stall_buf_read_locked'
drivers/gpu/drm/xe/xe_eustall_cntr.h:47: warning: Function parameter or struct member 'vaddr' not described in 'xe_eu_stall_cntr_stream'
drivers/gpu/drm/xe/xe_eustall_cntr.h:47: warning: Function parameter or struct member 'pollin' not described in 'xe_eu_stall_cntr_stream'
drivers/gpu/drm/xe/xe_eustall_cntr.h:47: warning: Function parameter or struct member 'enabled' not described in 'xe_eu_stall_cntr_stream'
drivers/gpu/drm/xe/xe_eustall_cntr.h:47: warning: Function parameter or struct member 'poll_period' not described in 'xe_eu_stall_cntr_stream'
drivers/gpu/drm/xe/xe_eustall_cntr.h:47: warning: Function parameter or struct member 'event_report_count' not described in 'xe_eu_stall_cntr_stream'
drivers/gpu/drm/xe/xe_eustall_cntr.h:47: warning: Function parameter or struct member 'per_dss_buf_size' not described in 'xe_eu_stall_cntr_stream'
drivers/gpu/drm/xe/xe_eustall_cntr.h:47: warning: Function parameter or struct member 'poll_wq' not described in 'xe_eu_stall_cntr_stream'
drivers/gpu/drm/xe/xe_eustall_cntr.h:47: warning: Function parameter or struct member 'gt' not described in 'xe_eu_stall_cntr_stream'
drivers/gpu/drm/xe/xe_eustall_cntr.h:47: warning: Function parameter or struct member 'bo' not described in 'xe_eu_stall_cntr_stream'
drivers/gpu/drm/xe/xe_eustall_cntr.h:47: warning: Function parameter or struct member 'dss_buf' not described in 'xe_eu_stall_cntr_stream'
drivers/gpu/drm/xe/xe_eustall_cntr.h:47: warning: Function parameter or struct member 'data_drop' not described in 'xe_eu_stall_cntr_stream'
drivers/gpu/drm/xe/xe_eustall_cntr.h:47: warning: Function parameter or struct member 'poll_check_timer' not described in 'xe_eu_stall_cntr_stream'
drivers/gpu/drm/xe/xe_eustall_cntr.h:47: warning: Function parameter or struct member 'buf_check_work' not described in 'xe_eu_stall_cntr_stream'
drivers/gpu/drm/xe/xe_eustall_cntr.h:47: warning: Function parameter or struct member 'buf_check_wq' not described in 'xe_eu_stall_cntr_stream'
43 warnings as Errors
run-parts: /workspace/ci/hooks/20-kernel-doc exited with return code 123



^ permalink raw reply	[flat|nested] 20+ messages in thread

* ✓ CI.checksparse: success for Add support for EU stall sampling
  2024-09-09  7:36 [PATCH v3 0/1] Add support for EU stall sampling Harish Chegondi
                   ` (6 preceding siblings ...)
  2024-09-10  7:02 ` ✗ CI.Hooks: failure " Patchwork
@ 2024-09-10  7:05 ` Patchwork
  2024-09-10  7:26 ` ✓ CI.BAT: " Patchwork
  2024-09-10  8:53 ` ✗ CI.FULL: failure " Patchwork
  9 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2024-09-10  7:05 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

== Series Details ==

Series: Add support for EU stall sampling
URL   : https://patchwork.freedesktop.org/series/138389/
State : success

== Summary ==

+ trap cleanup EXIT
+ KERNEL=/kernel
+ MT=/root/linux/maintainer-tools
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools /root/linux/maintainer-tools
Cloning into '/root/linux/maintainer-tools'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ make -C /root/linux/maintainer-tools
make: Entering directory '/root/linux/maintainer-tools'
cc -O2 -g -Wextra -o remap-log remap-log.c
make: Leaving directory '/root/linux/maintainer-tools'
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ /root/linux/maintainer-tools/dim sparse --fast bab1666fc2379a31ac48e7d61683d3edeaf29244
Sparse version: 0.6.1 (Ubuntu: 0.6.1-2build1)
Fast mode used, each commit won't be checked separately.
Okay!

+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



^ permalink raw reply	[flat|nested] 20+ messages in thread

* ✓ CI.BAT: success for Add support for EU stall sampling
  2024-09-09  7:36 [PATCH v3 0/1] Add support for EU stall sampling Harish Chegondi
                   ` (7 preceding siblings ...)
  2024-09-10  7:05 ` ✓ CI.checksparse: success " Patchwork
@ 2024-09-10  7:26 ` Patchwork
  2024-09-10  8:53 ` ✗ CI.FULL: failure " Patchwork
  9 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2024-09-10  7:26 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

[-- Attachment #1: Type: text/plain, Size: 945 bytes --]

== Series Details ==

Series: Add support for EU stall sampling
URL   : https://patchwork.freedesktop.org/series/138389/
State : success

== Summary ==

CI Bug Log - changes from xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114_BAT -> xe-pw-138389v1_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

Participating hosts (8 -> 8)
------------------------------

  No changes in participating hosts


Changes
-------

  No changes found


Build changes
-------------

  * Linux: xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114 -> xe-pw-138389v1

  IGT_8011: 26dca87f1252b7f6f0c0f833050256f0244d61e9 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114: 40360ec4ceee7e8c16a187299cadf3e6babc8114
  xe-pw-138389v1: 138389v1

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/index.html

[-- Attachment #2: Type: text/html, Size: 1493 bytes --]

^ permalink raw reply	[flat|nested] 20+ messages in thread

* ✗ CI.FULL: failure for Add support for EU stall sampling
  2024-09-09  7:36 [PATCH v3 0/1] Add support for EU stall sampling Harish Chegondi
                   ` (8 preceding siblings ...)
  2024-09-10  7:26 ` ✓ CI.BAT: " Patchwork
@ 2024-09-10  8:53 ` Patchwork
  9 siblings, 0 replies; 20+ messages in thread
From: Patchwork @ 2024-09-10  8:53 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

[-- Attachment #1: Type: text/plain, Size: 70344 bytes --]

== Series Details ==

Series: Add support for EU stall sampling
URL   : https://patchwork.freedesktop.org/series/138389/
State : failure

== Summary ==

CI Bug Log - changes from xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114_full -> xe-pw-138389v1_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with xe-pw-138389v1_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in xe-pw-138389v1_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Participating hosts (4 -> 4)
------------------------------

  No changes in participating hosts

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in xe-pw-138389v1_full:

### IGT changes ###

#### Possible regressions ####

  * igt@xe_drm_fdinfo@utilization-single-full-load-destroy-queue:
    - shard-lnl:          [PASS][1] -> [FAIL][2]
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-lnl-3/igt@xe_drm_fdinfo@utilization-single-full-load-destroy-queue.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-3/igt@xe_drm_fdinfo@utilization-single-full-load-destroy-queue.html

  * igt@xe_wedged@wedged-at-any-timeout:
    - shard-adlp:         [PASS][3] -> [FAIL][4]
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-adlp-9/igt@xe_wedged@wedged-at-any-timeout.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-4/igt@xe_wedged@wedged-at-any-timeout.html

  
Known issues
------------

  Here are the changes found in xe-pw-138389v1_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-x:
    - shard-adlp:         [PASS][5] -> [DMESG-WARN][6] ([Intel XE#1033]) +1 other test dmesg-warn
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-adlp-9/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-x.html
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-4/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-x.html

  * igt@kms_atomic_transition@modeset-transition-nonblocking:
    - shard-lnl:          [PASS][7] -> [FAIL][8] ([Intel XE#1701]) +1 other test fail
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-lnl-2/igt@kms_atomic_transition@modeset-transition-nonblocking.html
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-1/igt@kms_atomic_transition@modeset-transition-nonblocking.html

  * igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-edp-1:
    - shard-lnl:          [PASS][9] -> [FAIL][10] ([Intel XE#1426]) +1 other test fail
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-lnl-1/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-edp-1.html
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-3/igt@kms_atomic_transition@plane-toggle-modeset-transition@pipe-a-edp-1.html

  * igt@kms_big_fb@4-tiled-16bpp-rotate-270:
    - shard-lnl:          NOTRUN -> [SKIP][11] ([Intel XE#1407]) +2 other tests skip
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_big_fb@4-tiled-16bpp-rotate-270.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0:
    - shard-adlp:         NOTRUN -> [SKIP][12] ([Intel XE#1124] / [Intel XE#1201]) +1 other test skip
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-1/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-0.html

  * igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180:
    - shard-lnl:          [PASS][13] -> [FAIL][14] ([Intel XE#1659])
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-lnl-2/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180.html
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180.html

  * igt@kms_big_fb@linear-16bpp-rotate-90:
    - shard-dg2-set2:     NOTRUN -> [SKIP][15] ([Intel XE#1201] / [Intel XE#316]) +2 other tests skip
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_big_fb@linear-16bpp-rotate-90.html

  * igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0:
    - shard-adlp:         NOTRUN -> [FAIL][16] ([Intel XE#1874])
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip:
    - shard-adlp:         NOTRUN -> [FAIL][17] ([Intel XE#1231])
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html

  * igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow:
    - shard-dg2-set2:     NOTRUN -> [SKIP][18] ([Intel XE#1201] / [Intel XE#607])
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow.html
    - shard-lnl:          NOTRUN -> [SKIP][19] ([Intel XE#1477])
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
    - shard-dg2-set2:     NOTRUN -> [SKIP][20] ([Intel XE#1124] / [Intel XE#1201]) +2 other tests skip
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
    - shard-lnl:          NOTRUN -> [SKIP][21] ([Intel XE#1124]) +1 other test skip
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html

  * igt@kms_bw@connected-linear-tiling-3-displays-3840x2160p:
    - shard-adlp:         NOTRUN -> [SKIP][22] ([Intel XE#1201] / [Intel XE#2191])
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@kms_bw@connected-linear-tiling-3-displays-3840x2160p.html

  * igt@kms_bw@linear-tiling-1-displays-3840x2160p:
    - shard-dg2-set2:     NOTRUN -> [SKIP][23] ([Intel XE#1201] / [Intel XE#367])
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_bw@linear-tiling-1-displays-3840x2160p.html

  * igt@kms_ccs@crc-primary-rotation-180-y-tiled-ccs@pipe-b-hdmi-a-6:
    - shard-dg2-set2:     NOTRUN -> [SKIP][24] ([Intel XE#1201] / [Intel XE#787]) +27 other tests skip
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_ccs@crc-primary-rotation-180-y-tiled-ccs@pipe-b-hdmi-a-6.html

  * igt@kms_ccs@crc-primary-rotation-180-y-tiled-ccs@pipe-c-hdmi-a-1:
    - shard-adlp:         NOTRUN -> [SKIP][25] ([Intel XE#1201] / [Intel XE#787]) +5 other tests skip
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@kms_ccs@crc-primary-rotation-180-y-tiled-ccs@pipe-c-hdmi-a-1.html

  * igt@kms_ccs@crc-primary-rotation-180-y-tiled-ccs@pipe-d-hdmi-a-1:
    - shard-adlp:         NOTRUN -> [SKIP][26] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) +3 other tests skip
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@kms_ccs@crc-primary-rotation-180-y-tiled-ccs@pipe-d-hdmi-a-1.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-mc-ccs:
    - shard-lnl:          NOTRUN -> [SKIP][27] ([Intel XE#1399]) +3 other tests skip
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-mc-ccs.html

  * igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs:
    - shard-dg2-set2:     NOTRUN -> [SKIP][28] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) +7 other tests skip
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_ccs@random-ccs-data-4-tiled-mtl-rc-ccs.html

  * igt@kms_chamelium_color@ctm-max:
    - shard-lnl:          NOTRUN -> [SKIP][29] ([Intel XE#306])
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_chamelium_color@ctm-max.html
    - shard-dg2-set2:     NOTRUN -> [SKIP][30] ([Intel XE#1201] / [Intel XE#306])
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_chamelium_color@ctm-max.html

  * igt@kms_chamelium_hpd@common-hpd-after-suspend:
    - shard-lnl:          NOTRUN -> [SKIP][31] ([Intel XE#373])
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_chamelium_hpd@common-hpd-after-suspend.html

  * igt@kms_chamelium_hpd@dp-hpd-fast:
    - shard-dg2-set2:     NOTRUN -> [SKIP][32] ([Intel XE#1201] / [Intel XE#373]) +1 other test skip
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_chamelium_hpd@dp-hpd-fast.html
    - shard-adlp:         NOTRUN -> [SKIP][33] ([Intel XE#1201] / [Intel XE#373])
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@kms_chamelium_hpd@dp-hpd-fast.html

  * igt@kms_cursor_crc@cursor-offscreen-32x32:
    - shard-lnl:          NOTRUN -> [SKIP][34] ([Intel XE#1424])
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_cursor_crc@cursor-offscreen-32x32.html

  * igt@kms_cursor_crc@cursor-random-32x32:
    - shard-adlp:         NOTRUN -> [SKIP][35] ([Intel XE#1201] / [Intel XE#455]) +4 other tests skip
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-1/igt@kms_cursor_crc@cursor-random-32x32.html

  * igt@kms_cursor_crc@cursor-random-512x512:
    - shard-adlp:         NOTRUN -> [SKIP][36] ([Intel XE#1201] / [Intel XE#308])
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-1/igt@kms_cursor_crc@cursor-random-512x512.html

  * igt@kms_cursor_crc@cursor-rapid-movement-512x512:
    - shard-dg2-set2:     NOTRUN -> [SKIP][37] ([Intel XE#1201] / [Intel XE#308])
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html
    - shard-lnl:          NOTRUN -> [SKIP][38] ([Intel XE#1413])
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_cursor_crc@cursor-rapid-movement-512x512.html

  * igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy:
    - shard-lnl:          NOTRUN -> [SKIP][39] ([Intel XE#309])
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size:
    - shard-dg2-set2:     NOTRUN -> [SKIP][40] ([Intel XE#1201] / [Intel XE#323])
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html
    - shard-lnl:          NOTRUN -> [SKIP][41] ([Intel XE#323])
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html

  * igt@kms_cursor_legacy@torture-bo@pipe-a:
    - shard-lnl:          [PASS][42] -> [DMESG-WARN][43] ([Intel XE#877]) +1 other test dmesg-warn
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-lnl-8/igt@kms_cursor_legacy@torture-bo@pipe-a.html
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-3/igt@kms_cursor_legacy@torture-bo@pipe-a.html

  * igt@kms_flip@2x-blocking-wf_vblank:
    - shard-lnl:          NOTRUN -> [SKIP][44] ([Intel XE#1421])
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_flip@2x-blocking-wf_vblank.html

  * igt@kms_flip@2x-single-buffer-flip-vs-dpms-off-vs-modeset:
    - shard-adlp:         NOTRUN -> [SKIP][45] ([Intel XE#1201] / [Intel XE#310])
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@kms_flip@2x-single-buffer-flip-vs-dpms-off-vs-modeset.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling:
    - shard-lnl:          NOTRUN -> [SKIP][46] ([Intel XE#1401] / [Intel XE#1745])
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-default-mode:
    - shard-lnl:          NOTRUN -> [SKIP][47] ([Intel XE#1401])
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling@pipe-a-default-mode.html

  * igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-blt:
    - shard-lnl:          NOTRUN -> [SKIP][48] ([Intel XE#651]) +3 other tests skip
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-blt:
    - shard-adlp:         NOTRUN -> [SKIP][49] ([Intel XE#1201] / [Intel XE#656]) +2 other tests skip
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-render:
    - shard-adlp:         NOTRUN -> [SKIP][50] ([Intel XE#1201] / [Intel XE#651]) +2 other tests skip
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-render.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-pgflip-blt:
    - shard-dg2-set2:     NOTRUN -> [SKIP][51] ([Intel XE#1201] / [Intel XE#651]) +8 other tests skip
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-wc:
    - shard-lnl:          NOTRUN -> [SKIP][52] ([Intel XE#656]) +9 other tests skip
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-spr-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-slowdraw:
    - shard-dg2-set2:     NOTRUN -> [SKIP][53] ([Intel XE#1201] / [Intel XE#653]) +10 other tests skip
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcpsr-slowdraw.html

  * igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-wc:
    - shard-adlp:         NOTRUN -> [SKIP][54] ([Intel XE#1201] / [Intel XE#653]) +1 other test skip
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-wc.html

  * igt@kms_plane_lowres@tiling-y:
    - shard-dg2-set2:     NOTRUN -> [SKIP][55] ([Intel XE#1201] / [Intel XE#455]) +5 other tests skip
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_plane_lowres@tiling-y.html
    - shard-lnl:          NOTRUN -> [SKIP][56] ([Intel XE#599]) +1 other test skip
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_plane_lowres@tiling-y.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-75@pipe-c-edp-1:
    - shard-lnl:          NOTRUN -> [SKIP][57] ([Intel XE#2318]) +7 other tests skip
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-75@pipe-c-edp-1.html

  * igt@kms_pm_dc@dc6-dpms:
    - shard-dg2-set2:     NOTRUN -> [SKIP][58] ([Intel XE#1201] / [Intel XE#908])
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_pm_dc@dc6-dpms.html

  * igt@kms_psr2_sf@overlay-plane-move-continuous-sf:
    - shard-dg2-set2:     NOTRUN -> [SKIP][59] ([Intel XE#1201] / [Intel XE#1489])
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_psr2_sf@overlay-plane-move-continuous-sf.html

  * igt@kms_psr@pr-no-drrs:
    - shard-lnl:          NOTRUN -> [SKIP][60] ([Intel XE#1406])
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_psr@pr-no-drrs.html

  * igt@kms_psr@psr-cursor-render:
    - shard-dg2-set2:     NOTRUN -> [SKIP][61] ([Intel XE#1201] / [Intel XE#929]) +2 other tests skip
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_psr@psr-cursor-render.html

  * igt@kms_psr@psr2-cursor-plane-move:
    - shard-adlp:         NOTRUN -> [SKIP][62] ([Intel XE#1201] / [Intel XE#929]) +2 other tests skip
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@kms_psr@psr2-cursor-plane-move.html

  * igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90:
    - shard-dg2-set2:     NOTRUN -> [SKIP][63] ([Intel XE#1201] / [Intel XE#327])
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-90.html

  * igt@kms_rotation_crc@sprite-rotation-90-pos-100-0:
    - shard-adlp:         NOTRUN -> [SKIP][64] ([Intel XE#1201] / [Intel XE#327]) +1 other test skip
   [64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@kms_rotation_crc@sprite-rotation-90-pos-100-0.html

  * igt@kms_writeback@writeback-check-output:
    - shard-adlp:         NOTRUN -> [SKIP][65] ([Intel XE#1201] / [Intel XE#756])
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@kms_writeback@writeback-check-output.html
    - shard-dg2-set2:     NOTRUN -> [SKIP][66] ([Intel XE#1201] / [Intel XE#756])
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_writeback@writeback-check-output.html

  * igt@xe_copy_basic@mem-set-linear-0x369:
    - shard-adlp:         NOTRUN -> [SKIP][67] ([Intel XE#1126] / [Intel XE#1201])
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-1/igt@xe_copy_basic@mem-set-linear-0x369.html

  * igt@xe_evict@evict-beng-large-multi-vm-cm:
    - shard-lnl:          NOTRUN -> [SKIP][68] ([Intel XE#688])
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@xe_evict@evict-beng-large-multi-vm-cm.html

  * igt@xe_evict@evict-beng-threads-large:
    - shard-dg2-set2:     [PASS][69] -> [TIMEOUT][70] ([Intel XE#1473])
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-433/igt@xe_evict@evict-beng-threads-large.html
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-466/igt@xe_evict@evict-beng-threads-large.html

  * igt@xe_evict@evict-large-multi-vm-cm:
    - shard-adlp:         NOTRUN -> [SKIP][71] ([Intel XE#1201] / [Intel XE#261])
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@xe_evict@evict-large-multi-vm-cm.html

  * igt@xe_evict_ccs@evict-overcommit-parallel-nofree-samefd:
    - shard-adlp:         NOTRUN -> [SKIP][72] ([Intel XE#1201] / [Intel XE#688])
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@xe_evict_ccs@evict-overcommit-parallel-nofree-samefd.html

  * igt@xe_exec_basic@multigpu-no-exec-basic-defer-mmap:
    - shard-adlp:         NOTRUN -> [SKIP][73] ([Intel XE#1201] / [Intel XE#1392])
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@xe_exec_basic@multigpu-no-exec-basic-defer-mmap.html

  * igt@xe_exec_basic@multigpu-no-exec-bindexecqueue-userptr-rebind:
    - shard-lnl:          NOTRUN -> [SKIP][74] ([Intel XE#1392]) +1 other test skip
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@xe_exec_basic@multigpu-no-exec-bindexecqueue-userptr-rebind.html

  * igt@xe_exec_compute_mode@twice-userptr-unmap:
    - shard-dg2-set2:     NOTRUN -> [DMESG-FAIL][75] ([Intel XE#1069])
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@xe_exec_compute_mode@twice-userptr-unmap.html

  * igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-imm:
    - shard-adlp:         NOTRUN -> [SKIP][76] ([Intel XE#1201] / [Intel XE#288]) +3 other tests skip
   [76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-imm.html

  * igt@xe_exec_fault_mode@once-userptr-invalidate-race:
    - shard-dg2-set2:     NOTRUN -> [SKIP][77] ([Intel XE#1201] / [Intel XE#288]) +4 other tests skip
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@xe_exec_fault_mode@once-userptr-invalidate-race.html

  * igt@xe_exec_mix_modes@exec-simple-batch-store-dma-fence:
    - shard-adlp:         NOTRUN -> [SKIP][78] ([Intel XE#1201] / [Intel XE#2360])
   [78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@xe_exec_mix_modes@exec-simple-batch-store-dma-fence.html
    - shard-dg2-set2:     NOTRUN -> [SKIP][79] ([Intel XE#1201] / [Intel XE#2360])
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@xe_exec_mix_modes@exec-simple-batch-store-dma-fence.html

  * igt@xe_exec_reset@parallel-gt-reset:
    - shard-dg2-set2:     [PASS][80] -> [TIMEOUT][81] ([Intel XE#2105])
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@xe_exec_reset@parallel-gt-reset.html
   [81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@xe_exec_reset@parallel-gt-reset.html

  * igt@xe_exec_threads@threads-bal-fd-userptr-rebind:
    - shard-adlp:         [PASS][82] -> [INCOMPLETE][83] ([Intel XE#1169] / [Intel XE#1195])
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-adlp-2/igt@xe_exec_threads@threads-bal-fd-userptr-rebind.html
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-1/igt@xe_exec_threads@threads-bal-fd-userptr-rebind.html

  * igt@xe_module_load@many-reload:
    - shard-adlp:         [PASS][84] -> [TIMEOUT][85] ([Intel XE#1353] / [Intel XE#1961] / [Intel XE#2026])
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-adlp-4/igt@xe_module_load@many-reload.html
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-6/igt@xe_module_load@many-reload.html

  * igt@xe_oa@closed-fd-and-unmapped-access:
    - shard-dg2-set2:     NOTRUN -> [SKIP][86] ([Intel XE#1201] / [Intel XE#2541]) +1 other test skip
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@xe_oa@closed-fd-and-unmapped-access.html

  * igt@xe_oa@non-sampling-read-error:
    - shard-adlp:         NOTRUN -> [SKIP][87] ([Intel XE#1201] / [Intel XE#2541])
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@xe_oa@non-sampling-read-error.html

  * igt@xe_pat@display-vs-wb-transient:
    - shard-adlp:         NOTRUN -> [SKIP][88] ([Intel XE#1201] / [Intel XE#1337])
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@xe_pat@display-vs-wb-transient.html

  * igt@xe_pm@d3cold-mmap-system:
    - shard-dg2-set2:     NOTRUN -> [SKIP][89] ([Intel XE#1201] / [Intel XE#2284] / [Intel XE#366])
   [89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@xe_pm@d3cold-mmap-system.html
    - shard-lnl:          NOTRUN -> [SKIP][90] ([Intel XE#2284] / [Intel XE#366])
   [90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@xe_pm@d3cold-mmap-system.html

  * igt@xe_pm@s4-mocs:
    - shard-adlp:         [PASS][91] -> [ABORT][92] ([Intel XE#1794])
   [91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-adlp-6/igt@xe_pm@s4-mocs.html
   [92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-9/igt@xe_pm@s4-mocs.html

  * igt@xe_pm@s4-vm-bind-userptr:
    - shard-lnl:          [PASS][93] -> [ABORT][94] ([Intel XE#1794])
   [93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-lnl-4/igt@xe_pm@s4-vm-bind-userptr.html
   [94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-2/igt@xe_pm@s4-vm-bind-userptr.html

  * igt@xe_query@multigpu-query-oa-units:
    - shard-adlp:         NOTRUN -> [SKIP][95] ([Intel XE#1201] / [Intel XE#944])
   [95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@xe_query@multigpu-query-oa-units.html

  
#### Possible fixes ####

  * igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-y:
    - shard-adlp:         [DMESG-WARN][96] ([Intel XE#1033]) -> [PASS][97]
   [96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-adlp-9/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-y.html
   [97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-4/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-y.html

  * igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
    - shard-lnl:          [FAIL][98] ([Intel XE#1426]) -> [PASS][99] +1 other test pass
   [98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-lnl-6/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
   [99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-4/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html

  * igt@kms_big_fb@linear-32bpp-rotate-0:
    - shard-lnl:          [FAIL][100] ([Intel XE#1659]) -> [PASS][101]
   [100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-lnl-2/igt@kms_big_fb@linear-32bpp-rotate-0.html
   [101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@kms_big_fb@linear-32bpp-rotate-0.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs@pipe-b-hdmi-a-3:
    - {shard-bmg}:        [FAIL][102] ([Intel XE#2436]) -> [PASS][103]
   [102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-bmg-4/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs@pipe-b-hdmi-a-3.html
   [103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-bmg-7/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-bmg-ccs@pipe-b-hdmi-a-3.html

  * igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy:
    - {shard-bmg}:        [INCOMPLETE][104] -> [PASS][105] +1 other test pass
   [104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-bmg-7/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy.html
   [105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-bmg-8/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size:
    - {shard-bmg}:        [DMESG-WARN][106] ([Intel XE#877]) -> [PASS][107] +4 other tests pass
   [106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-bmg-2/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size.html
   [107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-bmg-8/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@d-hdmi-a1:
    - shard-adlp:         [FAIL][108] ([Intel XE#301]) -> [PASS][109] +1 other test pass
   [108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-adlp-6/igt@kms_flip@flip-vs-expired-vblank-interruptible@d-hdmi-a1.html
   [109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-1/igt@kms_flip@flip-vs-expired-vblank-interruptible@d-hdmi-a1.html

  * igt@kms_flip@wf_vblank-ts-check@b-edp1:
    - shard-lnl:          [FAIL][110] ([Intel XE#886]) -> [PASS][111] +1 other test pass
   [110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-lnl-3/igt@kms_flip@wf_vblank-ts-check@b-edp1.html
   [111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-3/igt@kms_flip@wf_vblank-ts-check@b-edp1.html

  * igt@kms_plane@plane-position-hole:
    - shard-lnl:          [DMESG-FAIL][112] ([Intel XE#324]) -> [PASS][113] +1 other test pass
   [112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-lnl-8/igt@kms_plane@plane-position-hole.html
   [113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-1/igt@kms_plane@plane-position-hole.html

  * igt@kms_plane@plane-position-hole-dpms@pipe-a-plane-1:
    - shard-lnl:          [DMESG-WARN][114] ([Intel XE#324]) -> [PASS][115] +2 other tests pass
   [114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-lnl-5/igt@kms_plane@plane-position-hole-dpms@pipe-a-plane-1.html
   [115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-7/igt@kms_plane@plane-position-hole-dpms@pipe-a-plane-1.html

  * igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6:
    - shard-dg2-set2:     [FAIL][116] ([Intel XE#361]) -> [PASS][117]
   [116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-433/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6.html
   [117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-436/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6.html

  * igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe-a-hdmi-a-6:
    - shard-dg2-set2:     [INCOMPLETE][118] ([Intel XE#1195]) -> [PASS][119] +1 other test pass
   [118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-434/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe-a-hdmi-a-6.html
   [119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_plane_scaling@planes-unity-scaling-downscale-factor-0-5@pipe-a-hdmi-a-6.html

  * igt@kms_universal_plane@cursor-fb-leak:
    - shard-adlp:         [FAIL][120] ([Intel XE#771] / [Intel XE#899]) -> [PASS][121]
   [120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-adlp-9/igt@kms_universal_plane@cursor-fb-leak.html
   [121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-1/igt@kms_universal_plane@cursor-fb-leak.html
    - shard-dg2-set2:     [FAIL][122] ([Intel XE#771] / [Intel XE#899]) -> [PASS][123]
   [122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-434/igt@kms_universal_plane@cursor-fb-leak.html
   [123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-433/igt@kms_universal_plane@cursor-fb-leak.html
    - shard-lnl:          [FAIL][124] ([Intel XE#899]) -> [PASS][125] +1 other test pass
   [124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-lnl-4/igt@kms_universal_plane@cursor-fb-leak.html
   [125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-2/igt@kms_universal_plane@cursor-fb-leak.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-1:
    - shard-adlp:         [FAIL][126] ([Intel XE#899]) -> [PASS][127]
   [126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-adlp-9/igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-1.html
   [127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-1/igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-1.html

  * igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-6:
    - shard-dg2-set2:     [FAIL][128] ([Intel XE#899]) -> [PASS][129]
   [128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-434/igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-6.html
   [129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-433/igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-6.html

  * igt@xe_evict@evict-large-multi-vm-cm:
    - {shard-bmg}:        [FAIL][130] ([Intel XE#2364]) -> [PASS][131]
   [130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-bmg-4/igt@xe_evict@evict-large-multi-vm-cm.html
   [131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-bmg-2/igt@xe_evict@evict-large-multi-vm-cm.html

  * igt@xe_evict@evict-mixed-many-threads-small:
    - {shard-bmg}:        [TIMEOUT][132] ([Intel XE#1473] / [Intel XE#2472]) -> [PASS][133]
   [132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-bmg-3/igt@xe_evict@evict-mixed-many-threads-small.html
   [133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-bmg-7/igt@xe_evict@evict-mixed-many-threads-small.html
    - shard-dg2-set2:     [TIMEOUT][134] ([Intel XE#1473]) -> [PASS][135]
   [134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-433/igt@xe_evict@evict-mixed-many-threads-small.html
   [135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-436/igt@xe_evict@evict-mixed-many-threads-small.html

  * igt@xe_oa@oa-exponents:
    - shard-lnl:          [FAIL][136] ([Intel XE#2723]) -> [PASS][137]
   [136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-lnl-1/igt@xe_oa@oa-exponents.html
   [137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-3/igt@xe_oa@oa-exponents.html

  * igt@xe_pm@s4-basic:
    - shard-lnl:          [ABORT][138] ([Intel XE#1358] / [Intel XE#1607]) -> [PASS][139]
   [138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-lnl-2/igt@xe_pm@s4-basic.html
   [139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-lnl-5/igt@xe_pm@s4-basic.html

  * igt@xe_pm@s4-multiple-execs:
    - shard-adlp:         [ABORT][140] ([Intel XE#1358] / [Intel XE#1607] / [Intel XE#1794]) -> [PASS][141]
   [140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-adlp-2/igt@xe_pm@s4-multiple-execs.html
   [141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-8/igt@xe_pm@s4-multiple-execs.html

  * igt@xe_pm@s4-vm-bind-userptr:
    - shard-adlp:         [ABORT][142] ([Intel XE#1794]) -> [PASS][143]
   [142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-adlp-9/igt@xe_pm@s4-vm-bind-userptr.html
   [143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-adlp-1/igt@xe_pm@s4-vm-bind-userptr.html

  
#### Warnings ####

  * igt@kms_big_fb@x-tiled-16bpp-rotate-90:
    - shard-dg2-set2:     [SKIP][144] ([Intel XE#316]) -> [SKIP][145] ([Intel XE#1201] / [Intel XE#316])
   [144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_big_fb@x-tiled-16bpp-rotate-90.html
   [145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-434/igt@kms_big_fb@x-tiled-16bpp-rotate-90.html

  * igt@kms_big_fb@x-tiled-64bpp-rotate-90:
    - shard-dg2-set2:     [SKIP][146] ([Intel XE#1201] / [Intel XE#316]) -> [SKIP][147] ([Intel XE#316]) +1 other test skip
   [146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_big_fb@x-tiled-64bpp-rotate-90.html
   [147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_big_fb@x-tiled-64bpp-rotate-90.html

  * igt@kms_big_fb@y-tiled-addfb:
    - shard-dg2-set2:     [SKIP][148] ([Intel XE#619]) -> [SKIP][149] ([Intel XE#1201] / [Intel XE#619])
   [148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_big_fb@y-tiled-addfb.html
   [149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-435/igt@kms_big_fb@y-tiled-addfb.html

  * igt@kms_big_fb@yf-tiled-16bpp-rotate-0:
    - shard-dg2-set2:     [SKIP][150] ([Intel XE#1124]) -> [SKIP][151] ([Intel XE#1124] / [Intel XE#1201]) +4 other tests skip
   [150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_big_fb@yf-tiled-16bpp-rotate-0.html
   [151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-435/igt@kms_big_fb@yf-tiled-16bpp-rotate-0.html

  * igt@kms_big_fb@yf-tiled-8bpp-rotate-270:
    - shard-dg2-set2:     [SKIP][152] ([Intel XE#1124] / [Intel XE#1201]) -> [SKIP][153] ([Intel XE#1124]) +4 other tests skip
   [152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_big_fb@yf-tiled-8bpp-rotate-270.html
   [153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_big_fb@yf-tiled-8bpp-rotate-270.html

  * igt@kms_bw@connected-linear-tiling-2-displays-2160x1440p:
    - shard-dg2-set2:     [SKIP][154] ([Intel XE#367]) -> [SKIP][155] ([Intel XE#1201] / [Intel XE#367]) +1 other test skip
   [154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_bw@connected-linear-tiling-2-displays-2160x1440p.html
   [155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-435/igt@kms_bw@connected-linear-tiling-2-displays-2160x1440p.html

  * igt@kms_bw@connected-linear-tiling-2-displays-2560x1440p:
    - shard-dg2-set2:     [SKIP][156] ([Intel XE#1201] / [Intel XE#367]) -> [SKIP][157] ([Intel XE#367])
   [156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_bw@connected-linear-tiling-2-displays-2560x1440p.html
   [157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_bw@connected-linear-tiling-2-displays-2560x1440p.html

  * igt@kms_bw@connected-linear-tiling-4-displays-1920x1080p:
    - shard-dg2-set2:     [SKIP][158] ([Intel XE#1201] / [Intel XE#2191]) -> [SKIP][159] ([Intel XE#2191])
   [158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_bw@connected-linear-tiling-4-displays-1920x1080p.html
   [159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_bw@connected-linear-tiling-4-displays-1920x1080p.html

  * igt@kms_ccs@bad-aux-stride-y-tiled-gen12-rc-ccs:
    - shard-dg2-set2:     [SKIP][160] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) -> [SKIP][161] ([Intel XE#455] / [Intel XE#787]) +11 other tests skip
   [160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_ccs@bad-aux-stride-y-tiled-gen12-rc-ccs.html
   [161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_ccs@bad-aux-stride-y-tiled-gen12-rc-ccs.html

  * igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-6:
    - shard-dg2-set2:     [SKIP][162] ([Intel XE#787]) -> [SKIP][163] ([Intel XE#1201] / [Intel XE#787]) +34 other tests skip
   [162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-6.html
   [163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-435/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-rc-ccs-cc@pipe-a-hdmi-a-6.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs:
    - shard-dg2-set2:     [SKIP][164] ([Intel XE#1252]) -> [SKIP][165] ([Intel XE#1201] / [Intel XE#1252])
   [164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs.html
   [165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-434/igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs:
    - shard-dg2-set2:     [SKIP][166] ([Intel XE#1201] / [Intel XE#1252]) -> [SKIP][167] ([Intel XE#1252])
   [166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs.html
   [167]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs.html

  * igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-rc-ccs-cc@pipe-d-dp-4:
    - shard-dg2-set2:     [SKIP][168] ([Intel XE#455] / [Intel XE#787]) -> [SKIP][169] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) +9 other tests skip
   [168]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-rc-ccs-cc@pipe-d-dp-4.html
   [169]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-434/igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-rc-ccs-cc@pipe-d-dp-4.html

  * igt@kms_ccs@crc-sprite-planes-basic-yf-tiled-ccs@pipe-c-hdmi-a-6:
    - shard-dg2-set2:     [SKIP][170] ([Intel XE#1201] / [Intel XE#787]) -> [SKIP][171] ([Intel XE#787]) +41 other tests skip
   [170]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_ccs@crc-sprite-planes-basic-yf-tiled-ccs@pipe-c-hdmi-a-6.html
   [171]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_ccs@crc-sprite-planes-basic-yf-tiled-ccs@pipe-c-hdmi-a-6.html

  * igt@kms_cdclk@mode-transition@pipe-d-dp-4:
    - shard-dg2-set2:     [SKIP][172] ([Intel XE#314]) -> [SKIP][173] ([Intel XE#1201] / [Intel XE#314]) +3 other tests skip
   [172]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_cdclk@mode-transition@pipe-d-dp-4.html
   [173]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-435/igt@kms_cdclk@mode-transition@pipe-d-dp-4.html

  * igt@kms_chamelium_color@ctm-red-to-blue:
    - shard-dg2-set2:     [SKIP][174] ([Intel XE#1201] / [Intel XE#306]) -> [SKIP][175] ([Intel XE#306])
   [174]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_chamelium_color@ctm-red-to-blue.html
   [175]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_chamelium_color@ctm-red-to-blue.html

  * igt@kms_chamelium_hpd@vga-hpd:
    - shard-dg2-set2:     [SKIP][176] ([Intel XE#373]) -> [SKIP][177] ([Intel XE#1201] / [Intel XE#373]) +5 other tests skip
   [176]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_chamelium_hpd@vga-hpd.html
   [177]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-435/igt@kms_chamelium_hpd@vga-hpd.html

  * igt@kms_chamelium_hpd@vga-hpd-fast:
    - shard-dg2-set2:     [SKIP][178] ([Intel XE#1201] / [Intel XE#373]) -> [SKIP][179] ([Intel XE#373]) +3 other tests skip
   [178]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_chamelium_hpd@vga-hpd-fast.html
   [179]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_chamelium_hpd@vga-hpd-fast.html

  * igt@kms_content_protection@atomic-dpms:
    - shard-dg2-set2:     [INCOMPLETE][180] ([Intel XE#1195] / [Intel XE#2715]) -> [FAIL][181] ([Intel XE#1178])
   [180]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_content_protection@atomic-dpms.html
   [181]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_content_protection@atomic-dpms.html

  * igt@kms_content_protection@atomic-dpms@pipe-a-dp-4:
    - shard-dg2-set2:     [INCOMPLETE][182] ([Intel XE#1195]) -> [FAIL][183] ([Intel XE#1178])
   [182]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_content_protection@atomic-dpms@pipe-a-dp-4.html
   [183]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-463/igt@kms_content_protection@atomic-dpms@pipe-a-dp-4.html

  * igt@kms_cursor_crc@cursor-onscreen-512x170:
    - shard-dg2-set2:     [SKIP][184] ([Intel XE#1201] / [Intel XE#308]) -> [SKIP][185] ([Intel XE#308])
   [184]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_cursor_crc@cursor-onscreen-512x170.html
   [185]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_cursor_crc@cursor-onscreen-512x170.html

  * igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions:
    - shard-dg2-set2:     [SKIP][186] ([Intel XE#1201] / [Intel XE#323]) -> [SKIP][187] ([Intel XE#323])
   [186]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html
   [187]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions.html

  * igt@kms_feature_discovery@display-3x:
    - shard-dg2-set2:     [SKIP][188] ([Intel XE#703]) -> [SKIP][189] ([Intel XE#1201] / [Intel XE#703])
   [188]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_feature_discovery@display-3x.html
   [189]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-434/igt@kms_feature_discovery@display-3x.html

  * igt@kms_feature_discovery@psr2:
    - shard-dg2-set2:     [SKIP][190] ([Intel XE#1135]) -> [SKIP][191] ([Intel XE#1135] / [Intel XE#1201])
   [190]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_feature_discovery@psr2.html
   [191]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-434/igt@kms_feature_discovery@psr2.html

  * igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling:
    - shard-dg2-set2:     [SKIP][192] ([Intel XE#455]) -> [SKIP][193] ([Intel XE#1201] / [Intel XE#455]) +6 other tests skip
   [192]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html
   [193]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-434/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-indfb-plflip-blt:
    - shard-dg2-set2:     [SKIP][194] ([Intel XE#1201] / [Intel XE#651]) -> [SKIP][195] ([Intel XE#651]) +15 other tests skip
   [194]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-indfb-plflip-blt.html
   [195]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-indfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-wc:
    - shard-dg2-set2:     [SKIP][196] ([Intel XE#651]) -> [SKIP][197] ([Intel XE#1201] / [Intel XE#651]) +13 other tests skip
   [196]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-wc.html
   [197]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-435/igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-move:
    - shard-dg2-set2:     [SKIP][198] ([Intel XE#653]) -> [SKIP][199] ([Intel XE#1201] / [Intel XE#653]) +13 other tests skip
   [198]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-move.html
   [199]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-434/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-move.html

  * igt@kms_frontbuffer_tracking@psr-slowdraw:
    - shard-dg2-set2:     [SKIP][200] ([Intel XE#1201] / [Intel XE#653]) -> [SKIP][201] ([Intel XE#653]) +14 other tests skip
   [200]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_frontbuffer_tracking@psr-slowdraw.html
   [201]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_frontbuffer_tracking@psr-slowdraw.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling:
    - shard-dg2-set2:     [SKIP][202] ([Intel XE#1201] / [Intel XE#2318] / [Intel XE#455]) -> [SKIP][203] ([Intel XE#2318] / [Intel XE#455]) +1 other test skip
   [202]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling.html
   [203]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling.html

  * igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-a-hdmi-a-6:
    - shard-dg2-set2:     [SKIP][204] ([Intel XE#1201] / [Intel XE#2318]) -> [SKIP][205] ([Intel XE#2318]) +2 other tests skip
   [204]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-a-hdmi-a-6.html
   [205]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_plane_scaling@planes-downscale-factor-0-25-unity-scaling@pipe-a-hdmi-a-6.html

  * igt@kms_pm_backlight@basic-brightness:
    - shard-dg2-set2:     [SKIP][206] ([Intel XE#870]) -> [SKIP][207] ([Intel XE#1201] / [Intel XE#870])
   [206]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_pm_backlight@basic-brightness.html
   [207]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-434/igt@kms_pm_backlight@basic-brightness.html

  * igt@kms_pm_dc@dc6-psr:
    - shard-dg2-set2:     [SKIP][208] ([Intel XE#1129]) -> [SKIP][209] ([Intel XE#1129] / [Intel XE#1201])
   [208]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_pm_dc@dc6-psr.html
   [209]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-435/igt@kms_pm_dc@dc6-psr.html

  * igt@kms_psr2_sf@cursor-plane-move-continuous-sf:
    - shard-dg2-set2:     [SKIP][210] ([Intel XE#1489]) -> [SKIP][211] ([Intel XE#1201] / [Intel XE#1489]) +1 other test skip
   [210]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_psr2_sf@cursor-plane-move-continuous-sf.html
   [211]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-434/igt@kms_psr2_sf@cursor-plane-move-continuous-sf.html

  * igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area:
    - shard-dg2-set2:     [SKIP][212] ([Intel XE#1201] / [Intel XE#1489]) -> [SKIP][213] ([Intel XE#1489]) +2 other tests skip
   [212]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area.html
   [213]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area.html

  * igt@kms_psr2_su@frontbuffer-xrgb8888:
    - shard-dg2-set2:     [SKIP][214] ([Intel XE#1122]) -> [SKIP][215] ([Intel XE#1122] / [Intel XE#1201])
   [214]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_psr2_su@frontbuffer-xrgb8888.html
   [215]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-435/igt@kms_psr2_su@frontbuffer-xrgb8888.html

  * igt@kms_psr@fbc-psr-no-drrs:
    - shard-dg2-set2:     [SKIP][216] ([Intel XE#929]) -> [SKIP][217] ([Intel XE#1201] / [Intel XE#929]) +6 other tests skip
   [216]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@kms_psr@fbc-psr-no-drrs.html
   [217]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-434/igt@kms_psr@fbc-psr-no-drrs.html

  * igt@kms_psr@fbc-psr2-sprite-plane-move:
    - shard-dg2-set2:     [SKIP][218] ([Intel XE#1201] / [Intel XE#929]) -> [SKIP][219] ([Intel XE#929]) +6 other tests skip
   [218]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_psr@fbc-psr2-sprite-plane-move.html
   [219]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_psr@fbc-psr2-sprite-plane-move.html

  * igt@kms_psr_stress_test@flip-primary-invalidate-overlay:
    - shard-dg2-set2:     [SKIP][220] ([Intel XE#1149] / [Intel XE#1201]) -> [SKIP][221] ([Intel XE#1149])
   [220]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html
   [221]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html

  * igt@kms_rotation_crc@sprite-rotation-90:
    - shard-dg2-set2:     [SKIP][222] ([Intel XE#1201] / [Intel XE#327]) -> [SKIP][223] ([Intel XE#327])
   [222]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_rotation_crc@sprite-rotation-90.html
   [223]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_rotation_crc@sprite-rotation-90.html

  * igt@kms_vrr@flipline:
    - shard-dg2-set2:     [SKIP][224] ([Intel XE#1201] / [Intel XE#455]) -> [SKIP][225] ([Intel XE#455]) +5 other tests skip
   [224]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@kms_vrr@flipline.html
   [225]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@kms_vrr@flipline.html

  * igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all:
    - shard-dg2-set2:     [SKIP][226] ([Intel XE#1091]) -> [SKIP][227] ([Intel XE#1091] / [Intel XE#1201])
   [226]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all.html
   [227]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-434/igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all.html

  * igt@xe_copy_basic@mem-copy-linear-0xfffe:
    - shard-dg2-set2:     [SKIP][228] ([Intel XE#1123]) -> [SKIP][229] ([Intel XE#1123] / [Intel XE#1201])
   [228]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@xe_copy_basic@mem-copy-linear-0xfffe.html
   [229]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-435/igt@xe_copy_basic@mem-copy-linear-0xfffe.html

  * igt@xe_copy_basic@mem-set-linear-0xfd:
    - shard-dg2-set2:     [SKIP][230] ([Intel XE#1126] / [Intel XE#1201]) -> [SKIP][231] ([Intel XE#1126]) +1 other test skip
   [230]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@xe_copy_basic@mem-set-linear-0xfd.html
   [231]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@xe_copy_basic@mem-set-linear-0xfd.html

  * igt@xe_copy_basic@mem-set-linear-0xfffe:
    - shard-dg2-set2:     [SKIP][232] ([Intel XE#1126]) -> [SKIP][233] ([Intel XE#1126] / [Intel XE#1201])
   [232]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@xe_copy_basic@mem-set-linear-0xfffe.html
   [233]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-434/igt@xe_copy_basic@mem-set-linear-0xfffe.html

  * igt@xe_exec_fault_mode@many-basic:
    - shard-dg2-set2:     [SKIP][234] ([Intel XE#1201] / [Intel XE#288]) -> [SKIP][235] ([Intel XE#288]) +12 other tests skip
   [234]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@xe_exec_fault_mode@many-basic.html
   [235]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@xe_exec_fault_mode@many-basic.html

  * igt@xe_exec_fault_mode@once-rebind-imm:
    - shard-dg2-set2:     [SKIP][236] ([Intel XE#288]) -> [SKIP][237] ([Intel XE#1201] / [Intel XE#288]) +13 other tests skip
   [236]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@xe_exec_fault_mode@once-rebind-imm.html
   [237]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-434/igt@xe_exec_fault_mode@once-rebind-imm.html

  * igt@xe_exec_mix_modes@exec-simple-batch-store-lr:
    - shard-dg2-set2:     [SKIP][238] ([Intel XE#1201] / [Intel XE#2360]) -> [SKIP][239] ([Intel XE#2360])
   [238]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@xe_exec_mix_modes@exec-simple-batch-store-lr.html
   [239]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@xe_exec_mix_modes@exec-simple-batch-store-lr.html

  * igt@xe_module_load@load:
    - shard-dg2-set2:     [SKIP][240] ([Intel XE#1201] / [Intel XE#378]) -> [SKIP][241] ([Intel XE#378])
   [240]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@xe_module_load@load.html
   [241]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@xe_module_load@load.html

  * igt@xe_oa@disabled-read-error:
    - shard-dg2-set2:     [SKIP][242] ([Intel XE#2541]) -> [SKIP][243] ([Intel XE#1201] / [Intel XE#2541]) +3 other tests skip
   [242]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@xe_oa@disabled-read-error.html
   [243]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-435/igt@xe_oa@disabled-read-error.html

  * igt@xe_oa@invalid-create-userspace-config:
    - shard-dg2-set2:     [SKIP][244] ([Intel XE#1201] / [Intel XE#2541]) -> [SKIP][245] ([Intel XE#2541]) +1 other test skip
   [244]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@xe_oa@invalid-create-userspace-config.html
   [245]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@xe_oa@invalid-create-userspace-config.html

  * igt@xe_pm@d3cold-basic-exec:
    - shard-dg2-set2:     [SKIP][246] ([Intel XE#1201] / [Intel XE#2284] / [Intel XE#366]) -> [SKIP][247] ([Intel XE#2284] / [Intel XE#366]) +1 other test skip
   [246]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@xe_pm@d3cold-basic-exec.html
   [247]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@xe_pm@d3cold-basic-exec.html

  * igt@xe_pm@d3cold-mocs:
    - shard-dg2-set2:     [SKIP][248] ([Intel XE#1201] / [Intel XE#2284]) -> [SKIP][249] ([Intel XE#2284])
   [248]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@xe_pm@d3cold-mocs.html
   [249]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@xe_pm@d3cold-mocs.html

  * igt@xe_pm@vram-d3cold-threshold:
    - shard-dg2-set2:     [SKIP][250] ([Intel XE#579]) -> [SKIP][251] ([Intel XE#1201] / [Intel XE#579])
   [250]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@xe_pm@vram-d3cold-threshold.html
   [251]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-434/igt@xe_pm@vram-d3cold-threshold.html

  * igt@xe_query@multigpu-query-invalid-query:
    - shard-dg2-set2:     [SKIP][252] ([Intel XE#944]) -> [SKIP][253] ([Intel XE#1201] / [Intel XE#944])
   [252]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-432/igt@xe_query@multigpu-query-invalid-query.html
   [253]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-435/igt@xe_query@multigpu-query-invalid-query.html

  * igt@xe_query@multigpu-query-mem-usage:
    - shard-dg2-set2:     [SKIP][254] ([Intel XE#1201] / [Intel XE#944]) -> [SKIP][255] ([Intel XE#944]) +1 other test skip
   [254]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114/shard-dg2-463/igt@xe_query@multigpu-query-mem-usage.html
   [255]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/shard-dg2-432/igt@xe_query@multigpu-query-mem-usage.html

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [Intel XE#1033]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1033
  [Intel XE#1069]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1069
  [Intel XE#1091]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1091
  [Intel XE#1122]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1122
  [Intel XE#1123]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1123
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1126]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1126
  [Intel XE#1129]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1129
  [Intel XE#1135]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1135
  [Intel XE#1149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1149
  [Intel XE#1169]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1169
  [Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
  [Intel XE#1195]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1195
  [Intel XE#1201]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1201
  [Intel XE#1231]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1231
  [Intel XE#1252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1252
  [Intel XE#1337]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1337
  [Intel XE#1353]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1353
  [Intel XE#1358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1358
  [Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
  [Intel XE#1399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1399
  [Intel XE#1401]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1401
  [Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
  [Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
  [Intel XE#1413]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1413
  [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#1426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1426
  [Intel XE#1473]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1473
  [Intel XE#1477]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1477
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1508]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1508
  [Intel XE#1607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1607
  [Intel XE#1659]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1659
  [Intel XE#1695]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1695
  [Intel XE#1701]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1701
  [Intel XE#1745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1745
  [Intel XE#1794]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1794
  [Intel XE#1874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1874
  [Intel XE#1961]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1961
  [Intel XE#2026]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2026
  [Intel XE#2105]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2105
  [Intel XE#2191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2191
  [Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
  [Intel XE#2244]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2244
  [Intel XE#2251]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2251
  [Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
  [Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
  [Intel XE#2293]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2293
  [Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
  [Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
  [Intel XE#2318]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2318
  [Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
  [Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
  [Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
  [Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
  [Intel XE#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
  [Intel XE#2330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2330
  [Intel XE#2333]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2333
  [Intel XE#2357]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2357
  [Intel XE#2360]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2360
  [Intel XE#2364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2364
  [Intel XE#2380]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2380
  [Intel XE#2393]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2393
  [Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
  [Intel XE#2436]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2436
  [Intel XE#2472]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2472
  [Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
  [Intel XE#2541]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2541
  [Intel XE#261]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/261
  [Intel XE#2715]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2715
  [Intel XE#2723]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2723
  [Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
  [Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
  [Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
  [Intel XE#308]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/308
  [Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
  [Intel XE#310]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/310
  [Intel XE#314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/314
  [Intel XE#316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/316
  [Intel XE#323]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/323
  [Intel XE#324]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/324
  [Intel XE#327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/327
  [Intel XE#361]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/361
  [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#378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/378
  [Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
  [Intel XE#498]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/498
  [Intel XE#579]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/579
  [Intel XE#599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/599
  [Intel XE#607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/607
  [Intel XE#610]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/610
  [Intel XE#619]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/619
  [Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
  [Intel XE#653]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/653
  [Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
  [Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
  [Intel XE#703]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/703
  [Intel XE#756]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/756
  [Intel XE#771]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/771
  [Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
  [Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
  [Intel XE#877]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/877
  [Intel XE#886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/886
  [Intel XE#899]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/899
  [Intel XE#908]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/908
  [Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
  [Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944


Build changes
-------------

  * Linux: xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114 -> xe-pw-138389v1

  IGT_8011: 26dca87f1252b7f6f0c0f833050256f0244d61e9 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-1918-40360ec4ceee7e8c16a187299cadf3e6babc8114: 40360ec4ceee7e8c16a187299cadf3e6babc8114
  xe-pw-138389v1: 138389v1

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-138389v1/index.html

[-- Attachment #2: Type: text/html, Size: 89772 bytes --]

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v3 1/1] drm/xe/eustall: Add support for EU stall sampling
  2024-09-10  0:09   ` Matt Roper
@ 2024-09-11 23:21     ` Dixit, Ashutosh
  2024-09-13  1:53       ` Harish Chegondi
  2024-09-12 18:43     ` Harish Chegondi
  1 sibling, 1 reply; 20+ messages in thread
From: Dixit, Ashutosh @ 2024-09-11 23:21 UTC (permalink / raw)
  To: Matt Roper
  Cc: Harish Chegondi, intel-xe, james.ausmus, felix.j.degrood,
	jose.souza, matias.a.cabral, joshua.santosh.ranjan

On Mon, 09 Sep 2024 17:09:14 -0700, Matt Roper wrote:
>

Hi Matt,

Some comments about the uapi below.

> > @@ -1694,6 +1696,138 @@ struct drm_xe_oa_stream_info {
> >	__u64 reserved[3];
> >  };
> >
> > +/**
> > + * enum drm_xe_eu_stall_property_id - EU stall data stream property ids.
> > + *
> > + * These properties are passed to the driver as a chain of
> > + * @drm_xe_ext_set_property structures with @property set to these
> > + * properties' enums and @value set to the corresponding values of these
> > + * properties. @drm_xe_user_extension base.name should be set to
> > + * @DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY.
> > + */
> > +enum drm_xe_eu_stall_property_id {
> > +#define DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY		0
> > +	/**
> > +	 * @DRM_XE_EU_STALL_PROP_BUF_SZ: Per DSS Memory Buffer Size.
> > +	 * Valid values are 128 KB, 256 KB, and 512 KB.
> > +	 */
> > +	DRM_XE_EU_STALL_PROP_BUF_SZ = 1,
>
> Does userspace really care about this being configurable?  Even if we
> have a platform with XE_MAX_DSS_FUSE_BITS total XeCores, the difference
> between the largest and smallest sizes here only saves 48MB of memory.
> The hardware makes this configurable, but is there actually an ask to
> expose this through the uapi?  If not, I'd say we should just always
> pick 512KB internally and keep things simple.

Agreed.

>
> > +
> > +	/**
> > +	 * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
> > +	 * in multiples of 251 cycles. Valid values are 1 to 7.
> > +	 * If the value is 1, sampling interval is 251 cycles.
> > +	 * If the value is 7, sampling interval is 7 x 251 cycles.
> > +	 */
> > +	DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
> > +
> > +	/**
> > +	 * @DRM_XE_EU_STALL_PROP_POLL_PERIOD: EU stall data
> > +	 * poll period in nanoseconds. should be at least 100000 ns.
> > +	 */
> > +	DRM_XE_EU_STALL_PROP_POLL_PERIOD,
> > +
> > +	/**
> > +	 * @DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT: Minimum number of
> > +	 * EU stall data rows to be present in the kernel buffer for
> > +	 * poll() to set POLLIN (data present).
> > +	 */
> > +	DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT,
> > +
> > +	/**
> > +	 * @DRM_XE_EU_STALL_PROP_GT_ID: GT ID of the GT on which
> > +	 * EU stall data will be captured.
> > +	 */
> > +	DRM_XE_EU_STALL_PROP_GT_ID,
>
> I mentioned above, but it feels like this should be an intrinsic part of
> the API, not something coming in through an optional extension...

Not sure what "intrinsic part of the API" should be. EU Stall, OA etc. are
now types of "observation streams" and there is no other opportunity in the
observation stream interface for this kind of information. Also, gt_id is
EU stall specific (e.g. OA uses oa_unit_id not gt_id) so it should come in
as an EU Stall property.

Though question for Harish: do we really need this? What if we return data
from all tiles/gt's in a single read() call? Since we have already
determined subslice number is not interesting to UMD's for EU Stall data,
maybe gt_id is similarly not interesting?

>
> > +
> > +	/**
> > +	 * @DRM_XE_EU_STALL_PROP_OPEN_DISABLED: A value of 1 will open
> > +	 * the EU stall data stream without enabling EU stall sampling.
> > +	 */
> > +	DRM_XE_EU_STALL_PROP_OPEN_DISABLED,
>
> Is there a reason not to make this one the default behavior?  Is there
> really a benefit to auto-enabling on open that makes it worth the extra
> API complexity to make this configurable?

I agree, this would be a good idea. But unfortunately this got in for OA
(if I were doing OA now I would have taken Matt's suggestion). So we either
(a) keep it the same as OA for uniformity, or (b) document that EU stall
streams have to be explicity enabled before read()'ing data.

>
> > +};
> > +
> > +/**
> > + * struct drm_xe_eu_stall_stream_info - EU stall stream info returned from
> > + * @DRM_XE_OBSERVATION_IOCTL_INFO observation stream fd ioctl
> > + */
> > +struct drm_xe_eu_stall_stream_info {
> > +	/** @extensions: Pointer to the first extension struct, if any */
> > +	__u64 extensions;
> > +
> > +	/** @record_size: size of each EU stall data record */
> > +	__u64 record_size;
> > +
> > +	/** @reserved: reserved for future use */
> > +	__u64 reserved[3];
> > +};
> > +
> > +/**
> > + * struct drm_xe_eu_stall_data_pvc - EU stall data format for PVC
>
> I thought there was an ask from one of the userspace teams that we make
> the layout discoverable?  I.e., a runtime-queryable format description
> that lists the counter type, size, and offset in the record of each
> counter that has usable data in the records?  Did we change directions
> on that?

My suggestion is to eliminate these struct's from the KMD uapi header. See
my earlier response to Harish's patch.

Thanks.
--
Ashutosh


>
> > + *
> > + * Bits		Field
> > + * 0  to 28	IP (addr)
> > + * 29 to 36	active count
> > + * 37 to 44	other count
> > + * 45 to 52	control count
> > + * 53 to 60	pipestall count
> > + * 61 to 68	send count
> > + * 69 to 76	dist_acc count
> > + * 77 to 84	sbid count
> > + * 85 to 92	sync count
> > + * 93 to 100	inst_fetch count
> > + */
> > +struct drm_xe_eu_stall_data_pvc {
> > +	__u64 ip_addr:29;
> > +	__u64 active_count:8;
> > +	__u64 other_count:8;
> > +	__u64 control_count:8;
> > +	__u64 pipestall_count:8;
> > +	__u64 send_count:8;
> > +	__u64 dist_acc_count:8;
> > +	__u64 sbid_count:8;
> > +	__u64 sync_count:8;
> > +	__u64 inst_fetch_count:8;
> > +	__u64 unused_bits:27;
> > +	__u64 unused[6];
> > +} __attribute__((packed));
> > +
> > +/**
> > + * struct drm_xe_eu_stall_data_xe2 - EU stall data format for LNL, BMG
> > + *
> > + * Bits		Field
> > + * 0  to 28	IP (addr)
> > + * 29 to 36	Tdr count
> > + * 37 to 44	other count
> > + * 45 to 52	control count
> > + * 53 to 60	pipestall count
> > + * 61 to 68	send count
> > + * 69 to 76	dist_acc count
> > + * 77 to 84	sbid count
> > + * 85 to 92	sync count
> > + * 93 to 100	inst_fetch count
> > + * 101 to 108	Active count
> > + * 109 to 111	Exid
> > + * 112		EndFlag (is always 1)
> > + */
> > +struct drm_xe_eu_stall_data_xe2 {
> > +	__u64 ip_addr:29;
> > +	__u64 tdr_count:8;
> > +	__u64 other_count:8;
> > +	__u64 control_count:8;
> > +	__u64 pipestall_count:8;
> > +	__u64 send_count:8;
> > +	__u64 dist_acc_count:8;
> > +	__u64 sbid_count:8;
> > +	__u64 sync_count:8;
> > +	__u64 inst_fetch_count:8;
> > +	__u64 active_count:8;
> > +	__u64 ex_id:3;
> > +	__u64 end_flag:1;
> > +	__u64 unused_bits:15;
> > +	__u64 unused[6];
> > +} __attribute__((packed));
> > +
> >  #if defined(__cplusplus)
> >  }
> >  #endif
> > --
> > 2.45.1
> >
>
> --
> Matt Roper
> Graphics Software Engineer
> Linux GPU Platform Enablement
> Intel Corporation

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v3 1/1] drm/xe/eustall: Add support for EU stall sampling
  2024-09-10  0:09   ` Matt Roper
  2024-09-11 23:21     ` Dixit, Ashutosh
@ 2024-09-12 18:43     ` Harish Chegondi
  1 sibling, 0 replies; 20+ messages in thread
From: Harish Chegondi @ 2024-09-12 18:43 UTC (permalink / raw)
  To: Matt Roper
  Cc: intel-xe, ashutosh.dixit, james.ausmus, felix.j.degrood,
	jose.souza, matias.a.cabral, joshua.santosh.ranjan

On Mon, Sep 09, 2024 at 05:09:14PM -0700, Matt Roper wrote:
> On Mon, Sep 09, 2024 at 12:36:40AM -0700, Harish Chegondi wrote:
> > A new hardware feature first introduced in PVC gives capability to
> > periodically sample EU stall state and record counts for different stall
> > reasons, on a per IP basis, aggregate across all EUs in a subslice and
> > record the samples in a buffer in each subslice. Eventually, the aggregated
> > data is written out to a buffer in the memory. This feature is also
> > supported in XE2 architecture GPUs - LNL and BMG.
> > 
> > Use an existing IOCTL DRM_IOCTL_XE_OBSERVATION as interface into the driver
> > from the user space to do initial setup and obtain a file descriptor for
> > the EU stall counter data stream.  Input parameter to the IOCTL is a struct
> > drm_xe_observation_param in which observation_type should be set to
> > DRM_XE_OBSERVATION_TYPE_EU_STALL, observation_op should be
> > DRM_XE_OBSERVATION_OP_STREAM_OPEN and param should point to a chain of
> > drm_xe_ext_set_property structures in which each structure has a pair of
> > property and value. The EU stall sampling input properties are defined in
> > drm_xe_eu_stall_property_id enum.
> > 
> > With the file descriptor obtained from DRM_IOCTL_XE_OBSERVATION, user space
> > can enable and disable EU stall sampling with the IOCTLs:
> > DRM_XE_OBSERVATION_IOCTL_ENABLE and DRM_XE_OBSERVATION_IOCTL_DISABLE.
> > User space can find the EU stall data record size with the IOCTL
> > DRM_XE_OBSERVATION_IOCTL_INFO through struct drm_xe_eu_stall_stream_info
> > parameter. User space can also call poll() to check for availability of
> > data. The data can be read with read(). If the user space doesn't read
> > the EU stall data fast enough, it is possible that the EU stall data buffer
> > can get filled up and if the hardware wants to write more data, it
> > simply drops data due to unavailable buffer space. In that case hardware
> > sets a bit in a register. The driver read() returns -EIO error to let
> > the user space know that the hardware has dropped data. A subsequent
> > read by the user space returns the remaining EU stall data.
> > 
> > v3: a. Removed data header.
> >     b. Changed read() to return -EIO when data is dropped by the HW.
> >     c. Added a new DRM_XE_OBSERVATION_IOCTL_INFO to query data record info
> >     d. Added struct drm_xe_eu_stall_data_pvc and struct drm_xe_eu_stall_data_xe2
> >        to xe_drm.h. These declarations would help user space to parse the
> >        EU stall data
> >     e. Addressed other review comments from v2
> > v2: Rename xe perf layer as xe observation layer (Ashutosh)
> > 
> > Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> > Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
> 
> A couple general comments, then more inline below.
> 
>  - I may have missed it, but I don't see anything that prevents this
>    functionality from being invoked on platforms that don't support it
>    (e.g., pre-PVC hardware).  Presumably there should be a feature flag
>    or IP version check somewhere to block this.
Yes, I missed this check. Will add it in the next version of the patch.

> 
>  - This is kind of a megapatch.  It might be best to split this up a
>    bit.  E.g., an initial patch that implements the basic interface
>    and such, but just stubs out the parts that actually go touch
>    hardware.  Going back to my first comment above, with just the first
>    patch landed you'd effectively treat every platform as a platform
>    that didn't support EU stall sampling.  Then the follow-up patch(es)
>    you can add the hardware implementation for PVC/Xe2.
Will split the patch into two in the next version.
> 
>  - I know Intel has changed terminology several times over the years,
>    which makes our driver codebase a confusing mix, but for new features
>    like this (and also for the EU debugger stuff that other people are
>    working on), it might be best to just use the term "XeCore" instead
>    of the older terms "subslice" and "DSS" for naming local variables
>    and functions.  Since "XeCore" seems to be the preferred term these
>    days, we may go back and rename other parts of the driver at some
>    point too, but for brand-new files like this one it's probably not
>    worth starting out with already-obsolete terminology.
Will change all dss/subslice to xecore.
> 
>  - Do we truly need all of the API extension properties defined here?  I
>    commented farther down, but some of them (like the buffer size) seem
>    pretty pointless...there doesn't seem to be a good justification for
>    just not using the largest size always.  If we're just exposing stuff
Yes, it makes sense to use the largest buffer size always. The only
reason I can think of using the smallest buffer size is when we want to
test HW dropping stall data which happens only when the buffer is full.
It is easier to create this condition with the smallest buffer size.

>    because the hardware has a knob, then that's needlessly complicating
>    the API; part of the reason we have uapi extensions is so that we can
>    add extra things later only if/when we decide we actually have a real
>    use for them.  On the flip side, some of the stuff like GT ID seems
>    like it shouldn't be an extension; that feels like it should be an
>    intrinsic part of the API and it shouldn't even be possible to open
>    an EU stall stream without specifying which GT you're working with.
> 
> 
> I didn't go through the entire patch in detail, but more comments inline below.
I am still working through your review comments and will address them in
the next version of the patch.

Thank You
Harish.
> 
> > ---
> >  drivers/gpu/drm/xe/Makefile                |    1 +
> >  drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h |   33 +
> >  drivers/gpu/drm/xe/xe_eustall_cntr.c       | 1000 ++++++++++++++++++++
> >  drivers/gpu/drm/xe/xe_eustall_cntr.h       |   60 ++
> >  drivers/gpu/drm/xe/xe_gt.c                 |    6 +
> >  drivers/gpu/drm/xe/xe_gt_topology.c        |    9 +
> >  drivers/gpu/drm/xe/xe_gt_topology.h        |    3 +
> >  drivers/gpu/drm/xe/xe_gt_types.h           |    3 +
> >  drivers/gpu/drm/xe/xe_observation.c        |   14 +
> >  drivers/gpu/drm/xe/xe_trace.h              |   35 +
> >  include/uapi/drm/xe_drm.h                  |  134 +++
> >  11 files changed, 1298 insertions(+)
> >  create mode 100644 drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
> >  create mode 100644 drivers/gpu/drm/xe/xe_eustall_cntr.c
> >  create mode 100644 drivers/gpu/drm/xe/xe_eustall_cntr.h
> > 
> > diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> > index edfd812e0f41..9c5325796bd7 100644
> > --- a/drivers/gpu/drm/xe/Makefile
> > +++ b/drivers/gpu/drm/xe/Makefile
> > @@ -33,6 +33,7 @@ xe-y += xe_bb.o \
> >  	xe_device_sysfs.o \
> >  	xe_dma_buf.o \
> >  	xe_drm_client.o \
> > +	xe_eustall_cntr.o \
> >  	xe_exec.o \
> >  	xe_execlist.o \
> >  	xe_exec_queue.o \
> > diff --git a/drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h b/drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
> > new file mode 100644
> > index 000000000000..c70f35f82cc5
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
> > @@ -0,0 +1,33 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2024 Intel Corporation
> > + */
> > +
> > +#ifndef _XE_EU_STALL_REGS_H_
> > +#define _XE_EU_STALL_REGS_H_
> > +
> > +#include "regs/xe_reg_defs.h"
> > +
> > +#define XEHPC_EUSTALL_BASE			XE_REG_MCR(0xe520)
> > +#define   XEHPC_EUSTALL_BASE_BUF_ADDR		REG_GENMASK(31, 6)
> > +#define   XEHPC_EUSTALL_BASE_DSS_BUF_SZ		REG_GENMASK(5, 3)
> > +#define   XEHPC_EUSTALL_BASE_ENABLE_SAMPLING	REG_BIT(1)
> > +#define   XEHPC_EUSTALL_BASE_EVICT_TDL_STALL_BUF	REG_BIT(0)
> > +
> > +#define XEHPC_EUSTALL_BASE_UPPER		XE_REG_MCR(0xe524)
> > +
> > +#define XEHPC_EUSTALL_REPORT			XE_REG_MCR(0xe528)
> > +#define   XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK	REG_GENMASK(15, 2)
> > +#define   XEHPC_EUSTALL_REPORT_WRITE_PTR_SHIFT	2
> 
> Do we need a "_SHIFT" macro like this?  Generally we can use the field
> get/prep macros to handle shifting (and get extra compile-time sanity
> checking in some cases too).
> 
> > +#define   XEHPC_EUSTALL_REPORT_OVERFLOW_DROP	REG_BIT(1)
> > +
> > +#define XEHPC_EUSTALL_REPORT1			XE_REG_MCR(0xe52c)
> 
> This is a masked register, but we're missing the flag.
> 
> > +#define   XEHPC_EUSTALL_REPORT1_MASK_SHIFT	16
> 
> As above, we probably don't want to be open-coding our shifts (or our
> masks).  There's helpers like _MASKED_FIELD() for generating the proper
> value for masked registers (with extra checking for mistakes).
> 
> > +#define   XEHPC_EUSTALL_REPORT1_READ_PTR_MASK	REG_GENMASK(15, 2)
> > +#define   XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT	2
> > +
> > +#define XEHPC_EUSTALL_CTRL			XE_REG_MCR(0xe53c)
> > +#define   EUSTALL_MOCS				REG_GENMASK(9, 3)
> > +#define   EUSTALL_SAMPLE_RATE			REG_GENMASK(2, 0)
> > +
> > +#endif
> > diff --git a/drivers/gpu/drm/xe/xe_eustall_cntr.c b/drivers/gpu/drm/xe/xe_eustall_cntr.c
> > new file mode 100644
> > index 000000000000..d8546fef8dd6
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_eustall_cntr.c
> > @@ -0,0 +1,1000 @@
> > +// SPDX-License-Identifier: MIT
> > +/*
> > + * Copyright © 2024 Intel Corporation
> > + */
> > +
> > +#include <linux/anon_inodes.h>
> > +#include <linux/nospec.h>
> > +#include <linux/poll.h>
> > +#include <drm/drm_drv.h>
> > +#include "xe_gt.h"
> > +#include "xe_bo.h"
> > +#include "xe_pm.h"
> > +#include "xe_trace.h"
> > +#include "xe_device.h"
> > +#include "xe_gt_mcr.h"
> > +#include "xe_force_wake.h"
> > +#include "xe_gt_topology.h"
> > +#include "xe_eustall_cntr.h"
> > +#include "regs/xe_gt_regs.h"
> 
> Aren't you missing an include of the EU stall register header you added
> above?
> 
> > +
> > +#define DEFAULT_POLL_FREQUENCY_HZ 100
> > +#define DEFAULT_POLL_PERIOD_NS (NSEC_PER_SEC / DEFAULT_POLL_FREQUENCY_HZ)
> > +#define MISSING_CASE(x) WARN(1, "Missing case (%s == %ld)\n", \
> > +			     __stringify(x), (long)(x))
> 
> We probably shouldn't be using a non-device-specific WARN.  drm_WARN or
> gt_WARN would be preferred since they'd let us know which device or GT
> actually triggered the warning.
> 
> Also, it looks like this is only used in a single place so it might not
> even be worth using a macro.  You can just implement the warning
> directly at the single callsite.
> 
> > +
> > +extern u32 xe_observation_paranoid;
> 
> If this is meant to be used directly like this, then shouldn't we be
> getting the extern declaration from xe_observation.h instead of placing
> it here?
> 
> > +
> > +/**
> > + * struct eu_stall_open_properties
> > + *
> > + * @eu_stall_sampling_rate: Hardware EU stall sampling rate.
> > + * @event_report_count: Minimum no of EU stall data rows for poll to set POLLIN.
> > + * @eu_stall_buf_sz: Per subslice EU stall data buffer size.
> > + * @open_disabled: Should EU stall sampling be disabled at open.
> > + * @poll_period: The period in nanoseconds at which the CPU will check for
> > + *		 EU stall data in the buffer.
> > + * @gt_id: GT ID of the GT on which EU stall data will be captured.
> > + */
> > +struct eu_stall_open_properties {
> > +	u8 eu_stall_sampling_rate;
> > +	u32 event_report_count;
> > +	u32 eu_stall_buf_sz;
> > +	bool open_disabled;
> > +	u64 poll_period;
> > +	u8 gt_id;
> 
> Nitpick, but the current ordering of these fields isn't very good for
> packing the structure...
> 
> > +};
> > +
> > +/**
> > + * num_data_rows - Return the number of EU stall data rows of 64B each
> > + *		   for a given data size.
> > + *
> > + * @data_size: EU stall data size
> > + */
> > +static inline u32
> > +num_data_rows(u32 data_size)
> > +{
> > +	return (data_size >> 6);
> > +}
> > +
> > +int xe_eustall_cntr_init(struct xe_gt *gt)
> > +{
> > +	gt->eu_stall_cntr = kzalloc(sizeof(*gt->eu_stall_cntr), GFP_KERNEL);
> > +	if (!gt->eu_stall_cntr)
> > +		return -ENOMEM;
> > +
> > +	mutex_init(&gt->eu_stall_cntr->lock);
> 
> Should there be a corresponding mutex_destroy() in the fini routine to
> help catch accidental use-after-free?
> 
> > +	return 0;
> > +}
> > +
> > +static int set_prop_eu_stall_buffer_size(struct xe_device *xe, u64 value,
> > +					 struct eu_stall_open_properties *props)
> > +{
> > +	if (value != SZ_128K &&
> > +	    value != SZ_256K &&
> > +	    value != SZ_512K) {
> > +		drm_dbg(&xe->drm, "Invalid EU stall buffer size %llu\n", value);
> > +		return -EINVAL;
> > +	}
> > +	props->eu_stall_buf_sz = value;
> > +	return 0;
> > +}
> > +
> > +static int set_prop_eu_stall_sampling_rate(struct xe_device *xe, u64 value,
> > +					   struct eu_stall_open_properties *props)
> > +{
> > +	if (value == 0 || value > 7) {
> > +		drm_dbg(&xe->drm, "Invalid EU stall sampling rate %llu\n", value);
> > +		return -EINVAL;
> > +	}
> > +	props->eu_stall_sampling_rate = value;
> > +	return 0;
> > +}
> > +
> > +static int set_prop_eu_stall_poll_period(struct xe_device *xe, u64 value,
> > +					 struct eu_stall_open_properties *props)
> > +{
> > +	if (value < 100000 /* 100us */) {
> > +		drm_dbg(&xe->drm, "EU stall data poll period %lluns less than 100us\n", value);
> > +		return -EINVAL;
> > +	}
> > +	props->poll_period = value;
> > +	return 0;
> > +}
> > +
> > +static int set_prop_eu_stall_event_report_count(struct xe_device *xe, u64 value,
> > +						struct eu_stall_open_properties *props)
> > +{
> > +	if (value == 0) {
> > +		drm_dbg(&xe->drm, "Invalid EU stall poll event report count %llu\n", value);
> > +		return -EINVAL;
> > +	}
> > +	props->event_report_count = (u32)value;
> > +	return 0;
> > +}
> > +
> > +static int set_prop_eu_stall_gt_id(struct xe_device *xe, u64 value,
> > +				   struct eu_stall_open_properties *props)
> > +{
> > +	if (value >= XE_MAX_GT_PER_TILE) {
> 
> I'm not sure what the goal of this check is.  If you want to make sure
> it's a valid GT, then comparing against a compile-time constant doesn't
> really help since what really matters is the runtime error check we do
> on the return from xe_device_get_gt().
> 
> On the other hand, if we have platforms at some point with more tiles
> than 2, then this will artificially prevent you from doing EU stall
> sampling on the third tile and beyond.  Same if we have a multi-tile
> platform with multiple GTs per tile.
> 
> > +		drm_dbg(&xe->drm, "Invalid GT ID %llu for EU stall sampling\n", value);
> > +		return -EINVAL;
> > +	}
> > +	props->gt_id = (u8)value;
> > +	return 0;
> > +}
> > +
> > +static int set_prop_eu_stall_open_disabled(struct xe_device *xe, u64 value,
> > +					   struct eu_stall_open_properties *props)
> > +{
> > +	props->open_disabled = value;
> > +	return 0;
> > +}
> > +
> > +typedef int (*set_eu_stall_property_fn)(struct xe_device *xe, u64 value,
> > +					struct eu_stall_open_properties *props);
> > +
> > +static const set_eu_stall_property_fn xe_set_eu_stall_property_funcs[] = {
> > +	[DRM_XE_EU_STALL_PROP_BUF_SZ] = set_prop_eu_stall_buffer_size,
> > +	[DRM_XE_EU_STALL_PROP_SAMPLE_RATE] = set_prop_eu_stall_sampling_rate,
> > +	[DRM_XE_EU_STALL_PROP_POLL_PERIOD] = set_prop_eu_stall_poll_period,
> > +	[DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT] = set_prop_eu_stall_event_report_count,
> > +	[DRM_XE_EU_STALL_PROP_GT_ID] = set_prop_eu_stall_gt_id,
> > +	[DRM_XE_EU_STALL_PROP_OPEN_DISABLED] = set_prop_eu_stall_open_disabled,
> > +};
> > +
> > +static int xe_eu_stall_user_ext_set_property(struct xe_device *xe, u64 extension,
> > +					     struct eu_stall_open_properties *props)
> > +{
> > +	u64 __user *address = u64_to_user_ptr(extension);
> > +	struct drm_xe_ext_set_property ext;
> > +	int err;
> > +	u32 idx;
> > +
> > +	err = __copy_from_user(&ext, address, sizeof(ext));
> > +	if (XE_IOCTL_DBG(xe, err))
> > +		return -EFAULT;
> > +
> > +	if (XE_IOCTL_DBG(xe, ext.property >= ARRAY_SIZE(xe_set_eu_stall_property_funcs)) ||
> > +	    XE_IOCTL_DBG(xe, ext.pad))
> > +		return -EINVAL;
> > +
> > +	idx = array_index_nospec(ext.property, ARRAY_SIZE(xe_set_eu_stall_property_funcs));
> > +	return xe_set_eu_stall_property_funcs[idx](xe, ext.value, props);
> > +}
> > +
> > +typedef int (*xe_eu_stall_user_extension_fn)(struct xe_device *xe, u64 extension,
> > +					     struct eu_stall_open_properties *props);
> > +static const xe_eu_stall_user_extension_fn xe_eu_stall_user_extension_funcs[] = {
> > +	[DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY] = xe_eu_stall_user_ext_set_property,
> > +};
> > +
> > +static int xe_eu_stall_user_extensions(struct xe_device *xe, u64 extension,
> > +				       struct eu_stall_open_properties *props)
> > +{
> > +	u64 __user *address = u64_to_user_ptr(extension);
> > +	struct drm_xe_user_extension ext;
> > +	int err;
> > +	u32 idx;
> > +
> > +	err = __copy_from_user(&ext, address, sizeof(ext));
> > +	if (XE_IOCTL_DBG(xe, err))
> > +		return -EFAULT;
> > +
> > +	if (XE_IOCTL_DBG(xe, ext.pad) ||
> > +	    XE_IOCTL_DBG(xe, ext.name >= ARRAY_SIZE(xe_eu_stall_user_extension_funcs)))
> > +		return -EINVAL;
> > +
> > +	idx = array_index_nospec(ext.name, ARRAY_SIZE(xe_eu_stall_user_extension_funcs));
> > +	err = xe_eu_stall_user_extension_funcs[idx](xe, extension, props);
> > +	if (XE_IOCTL_DBG(xe, err))
> > +		return err;
> > +
> > +	if (ext.next_extension)
> > +		return xe_eu_stall_user_extensions(xe, ext.next_extension, props);
> > +
> > +	return 0;
> > +}
> > +
> > +/**
> > + * buf_data_size - Calculate the number of bytes in a circular buffer
> > + *		   of size buf_size given the read and write pointers
> > + *		   into the buffer.
> > + *
> > + * @read_ptr: Read pointer. Uses an additional overflow bit
> > + * @write_ptr: Write pointer. Uses an additional overflow bit
> > + *
> > + * Returns: number of bytes of data in the buffer
> > + */
> > +static u32
> > +buf_data_size(size_t buf_size, u32 read_ptr, u32 write_ptr)
> > +{
> > +	u32 read_offset, write_offset, size = 0;
> > +
> > +	read_offset = read_ptr & (buf_size - 1);
> > +	write_offset = write_ptr & (buf_size - 1);
> > +
> > +	if (write_offset > read_offset)
> > +		size = write_offset - read_offset;
> > +	else
> > +		size = buf_size - read_offset + write_offset;
> > +
> > +	return size;
> > +}
> > +
> > +/**
> > + * eu_stall_cntr_buf_check - check for data in the EU stall counter buffer
> > + *
> > + * @stream: xe EU stall data stream instance
> > + *
> > + * Returns: true if the EU stall buffer contains minimum stall data as
> > + *	    specified by the event report count, else false.
> > + */
> > +static bool
> > +eu_stall_cntr_buf_check(struct xe_eu_stall_cntr_stream *stream)
> > +{
> > +	u32 read_ptr, write_ptr_reg, write_ptr, total_data = 0;
> > +	u32 buf_size = stream->per_dss_buf_size;
> > +	struct xe_gt *gt = stream->gt;
> > +	struct per_dss_buf *dss_buf;
> > +	bool min_data_present;
> > +	u16 group, instance;
> > +	unsigned int dss;
> > +
> > +	min_data_present = false;
> > +	for_each_dss_steering(dss, gt, group, instance) {
> > +		dss_buf = &stream->dss_buf[dss];
> > +		mutex_lock(&dss_buf->lock);
> > +		read_ptr = dss_buf->read;
> > +		write_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT,
> > +						       group, instance);
> > +		write_ptr = write_ptr_reg & XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK;
> > +		write_ptr <<= (6 - XEHPC_EUSTALL_REPORT_WRITE_PTR_SHIFT);
> > +		write_ptr &= ((buf_size << 1) - 1);
> > +		if ((write_ptr != read_ptr) && !min_data_present) {
> > +			total_data += buf_data_size(buf_size, read_ptr, write_ptr);
> > +			/*
> > +			 * Check if there are at least minimum number of stall data
> > +			 * rows for poll() to indicate that the data is present.
> > +			 * Each stall data row is 64B (cacheline size).
> > +			 */
> > +			if (num_data_rows(total_data) >= stream->event_report_count)
> > +				min_data_present = true;
> > +		}
> > +		if (write_ptr_reg & XEHPC_EUSTALL_REPORT_OVERFLOW_DROP) {
> > +			spin_lock(&stream->data_drop.lock);
> > +			bitmap_set(stream->data_drop.mask, dss, 1);
> > +			spin_unlock(&stream->data_drop.lock);
> > +		}
> > +		dss_buf->write = write_ptr;
> > +		mutex_unlock(&dss_buf->lock);
> > +	}
> > +	return min_data_present;
> > +}
> > +
> > +static void
> > +clear_dropped_eviction_line_bit(struct xe_gt *gt, u16 group, u16 instance)
> > +{
> > +	enum xe_platform platform;
> > +	u32 write_ptr_reg;
> > +
> > +	platform = gt_to_xe(gt)->info.platform;
> > +
> > +	/* On PVC, the overflow bit has to be cleared by writing 1 to it.
> > +	 * On other GPUs, the bit has to be cleared by writing 0 to it.
> > +	 */
> > +	if (platform == XE_PVC)
> 
> We shouldn't really be doing platform checks in code like this.  A
> graphics version check would be better:
> 
>         if (GRAPHICS_VER(xe) >= 20)
>                 ...w0c...
>         else
>                 ...w1c...
> 
> > +		write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> > +	else
> > +		write_ptr_reg = _MASKED_BIT_DISABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> > +
> > +	xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT, write_ptr_reg, group, instance);
> > +	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_REPORT.__reg).addr,
> > +			write_ptr_reg, sizeof(write_ptr_reg));
> 
> Why are we doing manual traces here?  The xe_mmio_*() functions invoked
> by xe_gt_mcr_unicast_write() should already be showing up in the trace
> log, right?  Same question for the rest of the trace calls farther down
> this patch.
> 
> > +}
> > +
> > +static int
> > +__xe_eu_stall_buf_read(struct xe_eu_stall_cntr_stream *stream,
> > +		       char __user *buf, size_t count,
> > +		       size_t *total_size, struct xe_gt *gt,
> > +		       u16 group, u16 instance, unsigned int dss)
> > +{
> > +	u32 read_ptr_reg, read_ptr, write_ptr;
> > +	u8 *dss_start_vaddr, *read_vaddr;
> > +	u32 read_offset, write_offset;
> > +	struct per_dss_buf *dss_buf;
> > +	size_t size, buf_size;
> > +
> > +	/* Hardware increments the read and write pointers such that they can
> > +	 * overflow into one additional bit. For example, a 256KB size buffer
> > +	 * offset pointer needs 18 bits. But HW uses 19 bits for the read and
> > +	 * write pointers. This technique avoids wasting a slot in the buffer.
> > +	 * Read and write offsets are calculated from the pointers in order to
> > +	 * check if the write pointer has wrapped around the array.
> > +	 */
> > +	dss_buf = &stream->dss_buf[dss];
> > +	mutex_lock(&dss_buf->lock);
> > +	dss_start_vaddr = dss_buf->vaddr;
> > +	read_ptr = dss_buf->read;
> > +	write_ptr = dss_buf->write;
> > +	buf_size = stream->per_dss_buf_size;
> > +	read_offset = read_ptr & (buf_size - 1);
> > +	write_offset = write_ptr & (buf_size - 1);
> > +
> > +	trace_xe_eu_stall_cntr_read(group, instance, read_ptr, write_ptr,
> > +				    read_offset, write_offset, *total_size);
> > +	if (write_ptr == read_ptr) {
> > +		mutex_unlock(&dss_buf->lock);
> > +		return 0;
> > +	}
> > +
> > +	/* If write pointer offset is less than the read pointer offset,
> > +	 * it means, write pointer has wrapped around the array.
> > +	 */
> > +	if (write_offset > read_offset)
> > +		size = write_offset - read_offset;
> > +	else
> > +		size = buf_size - read_offset + write_offset;
> > +
> > +	/* Read only the data that the user space buffer can accommodate */
> > +	if ((*total_size + size) > count) {
> > +		mutex_unlock(&dss_buf->lock);
> > +		return 0;
> > +	}
> > +
> > +	read_vaddr = dss_start_vaddr + read_offset;
> > +
> > +	if (write_offset > read_offset) {
> > +		if (copy_to_user((buf + *total_size), read_vaddr, size)) {
> > +			mutex_unlock(&dss_buf->lock);
> > +			return -EFAULT;
> > +		}
> > +	} else {
> > +		if (copy_to_user((buf + *total_size), read_vaddr, (buf_size - read_offset))) {
> > +			mutex_unlock(&dss_buf->lock);
> > +			return -EFAULT;
> > +		}
> > +		if (copy_to_user((buf + *total_size), dss_start_vaddr, write_offset)) {
> > +			mutex_unlock(&dss_buf->lock);
> > +			return -EFAULT;
> > +		}
> > +	}
> > +
> > +	*total_size += size;
> > +	read_ptr += size;
> > +
> > +	/* Read pointer can overflow into one additional bit */
> > +	read_ptr &= ((buf_size << 1) - 1);
> > +	read_ptr_reg = ((read_ptr >> 6) << XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT);
> > +	read_ptr_reg &= XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
> > +	read_ptr_reg |= (XEHPC_EUSTALL_REPORT1_READ_PTR_MASK <<
> > +			 XEHPC_EUSTALL_REPORT1_MASK_SHIFT);
> > +	xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT1, read_ptr_reg, group, instance);
> > +	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_REPORT1.__reg).addr,
> > +			read_ptr_reg, sizeof(read_ptr_reg));
> > +	if (test_bit(dss, stream->data_drop.mask)) {
> > +		clear_dropped_eviction_line_bit(gt, group, instance);
> > +		spin_lock(&stream->data_drop.lock);
> > +		bitmap_clear(stream->data_drop.mask, dss, 1);
> > +		spin_unlock(&stream->data_drop.lock);
> > +	}
> > +	dss_buf->read = read_ptr;
> > +	mutex_unlock(&dss_buf->lock);
> > +	trace_xe_eu_stall_cntr_read(group, instance, read_ptr, write_ptr,
> > +				    read_offset, write_offset, *total_size);
> 
> We do this same trace twice in the function (both before and after we
> modify some of the values like read_ptr).  Was that intentional?
> 
> > +	return 0;
> > +}
> > +
> > +/**
> > + * xe_eu_stall_buf_read_locked - copy EU stall counters data from the
> > + *				   per dss buffers to the userspace buffer
> > + * @stream: A stream opened for EU stall count metrics
> > + * @buf: destination buffer given by userspace
> > + * @count: the number of bytes userspace wants to read
> > + * @ppos: (inout) file seek position (unused)
> > + *
> > + * Returns: Number of bytes copied or a negative error code
> > + * If we've successfully copied any data then reporting that takes
> > + * precedence over any internal error status, so the data isn't lost.
> > + */
> > +static ssize_t
> > +xe_eu_stall_buf_read_locked(struct xe_eu_stall_cntr_stream *stream,
> > +			    struct file *file, char __user *buf,
> > +			    size_t count, loff_t *ppos)
> > +{
> > +	struct xe_gt *gt = stream->gt;
> > +	size_t total_size = 0;
> > +	u16 group, instance;
> > +	unsigned int dss;
> > +	int ret = 0;
> > +
> > +	if (count == 0)
> > +		return -EINVAL;
> > +
> > +	for_each_dss_steering(dss, gt, group, instance) {
> > +		ret = __xe_eu_stall_buf_read(stream, buf, count, &total_size,
> > +					     gt, group, instance, dss);
> > +		if (ret || count == total_size)
> > +			goto exit;
> > +	}
> > +exit:
> > +	if (total_size)
> > +		return total_size;
> > +	else if (ret)
> > +		return ret;
> > +	else
> > +		return -EAGAIN;
> > +}
> > +
> > +static void
> > +free_eu_stall_cntr_buf(struct xe_eu_stall_cntr_stream *stream)
> > +{
> > +	if (stream->bo) {
> > +		xe_bo_unpin_map_no_vm(stream->bo);
> > +		stream->vaddr = NULL;
> > +		stream->bo = NULL;
> > +	}
> > +	destroy_workqueue(stream->buf_check_wq);
> > +}
> > +
> > +static int alloc_eu_stall_cntr_buf(struct xe_eu_stall_cntr_stream *stream,
> > +				   u32 per_dss_buf_size, u16 num_dss)
> > +{
> > +	struct xe_tile *tile = stream->gt->tile;
> > +	struct xe_bo *bo;
> > +	u32 size;
> > +
> > +	size = per_dss_buf_size * num_dss;
> > +
> > +	bo = xe_bo_create_pin_map(tile->xe, tile, NULL,
> > +				  size, ttm_bo_type_kernel,
> > +				  XE_BO_FLAG_VRAM_IF_DGFX(tile) |
> > +				  XE_BO_FLAG_GGTT);
> > +	if (IS_ERR(bo))
> > +		return PTR_ERR(bo);
> > +
> > +	stream->bo = bo;
> > +	stream->vaddr = bo->vmap.is_iomem ? bo->vmap.vaddr_iomem : bo->vmap.vaddr;
> 
> Aren't we losing the important details of the iosys_map here?  And then
> potentially doing non-IO operations on an IO pointer later?  It seems
> like we should be storing the iosys_map in the stream and then using the
> appropriate functions on it elsewhere.
> 
> > +
> > +	return 0;
> > +}
> > +
> > +static u32
> > +gen_eustall_base(struct xe_eu_stall_cntr_stream *stream, bool enable)
> > +{
> > +	u32 val = xe_bo_ggtt_addr(stream->bo);
> > +	u32 sz;
> > +
> > +	XE_WARN_ON(!IS_ALIGNED(val, 64));
> > +
> > +	switch (stream->per_dss_buf_size) {
> > +	case SZ_128K:
> > +		sz = 0;
> > +		break;
> > +	case SZ_256K:
> > +		sz = 1;
> > +		break;
> > +	case SZ_512K:
> > +		sz = 2;
> > +		break;
> > +	default:
> > +		MISSING_CASE(stream->per_dss_buf_size);
> > +		sz = 2;
> > +	}
> > +
> > +	val |= REG_FIELD_PREP(XEHPC_EUSTALL_BASE_DSS_BUF_SZ, sz);
> > +	if (enable)
> > +		val |= XEHPC_EUSTALL_BASE_ENABLE_SAMPLING;
> > +
> > +	return val;
> > +}
> > +
> > +static void
> > +xe_eu_stall_stream_enable(struct xe_eu_stall_cntr_stream *stream)
> > +{
> > +	struct xe_gt *gt = stream->gt;
> > +	enum xe_platform platform;
> > +	u32 reg_value;
> > +
> > +	platform = gt_to_xe(gt)->info.platform;
> > +
> > +	/* Take runtime pm ref and forcewake to disable RC6 */
> > +	xe_pm_runtime_get(gt_to_xe(gt));
> > +	XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> 
> Do we really need XE_FORCEWAKE_ALL?  Are we doing anything outside the
> render domain that requires waking all the other domains?
> 
> > +
> > +	/*
> > +	 * Wa_22016596838:pvc
> > +	 * Disable EU DOP gating for PVC.
> > +	 */
> > +	if (platform == XE_PVC)
> 
> This should be an OOB workaround, not a platform check.
> 
> > +		xe_gt_mcr_multicast_write(gt, ROW_CHICKEN2,
> > +					  _MASKED_BIT_ENABLE(DISABLE_DOP_GATING));
> > +
> > +	reg_value = gen_eustall_base(stream, true);
> > +	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, reg_value);
> > +	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_BASE.__reg).addr,
> > +			reg_value, sizeof(reg_value));
> > +}
> > +
> > +static void
> > +xe_eu_stall_stream_disable(struct xe_eu_stall_cntr_stream *stream)
> > +{
> > +	struct xe_gt *gt = stream->gt;
> > +	enum xe_platform platform;
> > +	u16 group, instance;
> > +	unsigned int dss;
> > +	u32 reg_value;
> > +
> > +	platform = gt_to_xe(gt)->info.platform;
> > +
> > +	/*
> > +	 * Before disabling EU stall sampling, check if any of the
> > +	 * XEHPC_EUSTALL_REPORT registers have the drop bit set. If set,
> > +	 * clear the bit. If the user space application reads all the
> > +	 * stall data, the drop bit would be cleared during the read.
> > +	 * But if there is any unread data and the drop bit is set for
> > +	 * any subslice, the drop bit would continue to be set even
> > +	 * after disabling EU stall sampling and may cause erroneous
> > +	 * stall data in the subsequent stall data sampling run.
> > +	 */
> > +	for_each_dss_steering(dss, gt, group, instance) {
> > +		reg_value = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT,
> > +						   group, instance);
> > +		if (reg_value & XEHPC_EUSTALL_REPORT_OVERFLOW_DROP)
> > +			clear_dropped_eviction_line_bit(gt, group, instance);
> > +	}
> > +	reg_value = gen_eustall_base(stream, false);
> > +	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, reg_value);
> > +	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_BASE.__reg).addr,
> > +			reg_value, sizeof(reg_value));
> > +
> > +	/* Wa_22016596838:pvc */
> > +	if (platform == XE_PVC)
> > +		xe_gt_mcr_multicast_write(gt, ROW_CHICKEN2,
> > +					  _MASKED_BIT_DISABLE(DISABLE_DOP_GATING));
> > +
> > +	XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> > +	xe_pm_runtime_put(gt_to_xe(gt));
> > +}
> > +
> > +static void eu_stall_buf_check_work_fn(struct work_struct *work)
> > +{
> > +	struct xe_eu_stall_cntr_stream *stream =
> > +		container_of(work, typeof(*stream), buf_check_work);
> > +
> > +	if (eu_stall_cntr_buf_check(stream)) {
> > +		stream->pollin = true;
> > +		wake_up(&stream->poll_wq);
> > +	}
> > +}
> > +
> > +static enum
> > +hrtimer_restart eu_stall_poll_check_timer_cb(struct hrtimer *hrtimer)
> > +{
> > +	struct xe_eu_stall_cntr_stream *stream =
> > +		container_of(hrtimer, typeof(*stream), poll_check_timer);
> > +
> > +	queue_work(stream->buf_check_wq, &stream->buf_check_work);
> > +	hrtimer_forward_now(hrtimer, ns_to_ktime(stream->poll_period));
> > +
> > +	return HRTIMER_RESTART;
> > +}
> > +
> > +static int xe_eu_stall_stream_init(struct xe_eu_stall_cntr_stream *stream,
> > +				   struct eu_stall_open_properties *props,
> > +				   u16 num_dss)
> > +{
> > +	u32 write_ptr_reg, write_ptr, read_ptr_reg;
> > +	u32 vaddr_offset, reg_value;
> > +	struct xe_gt *gt = stream->gt;
> > +	struct per_dss_buf *dss_buf;
> > +	u16 group, instance;
> > +	int ret, dss;
> > +
> > +	init_waitqueue_head(&stream->poll_wq);
> > +	INIT_WORK(&stream->buf_check_work, eu_stall_buf_check_work_fn);
> > +	stream->buf_check_wq = alloc_ordered_workqueue("xe_eustall_cntr", 0);
> > +	if (!stream->buf_check_wq)
> > +		return -ENOMEM;
> > +	hrtimer_init(&stream->poll_check_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
> > +	stream->poll_check_timer.function = eu_stall_poll_check_timer_cb;
> > +	stream->event_report_count = props->event_report_count;
> > +	stream->per_dss_buf_size = props->eu_stall_buf_sz;
> > +	stream->poll_period = props->poll_period;
> > +
> > +	ret = alloc_eu_stall_cntr_buf(stream, props->eu_stall_buf_sz, num_dss);
> > +	if (ret)
> > +		return ret;
> > +
> > +	stream->dss_buf = kcalloc(num_dss, sizeof(*stream->dss_buf), GFP_KERNEL);
> > +	if (!stream->dss_buf)
> > +		return -ENOMEM;
> > +
> > +	spin_lock_init(&stream->data_drop.lock);
> > +	stream->data_drop.reported_to_user = false;
> > +	bitmap_zero(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS);
> > +
> > +	xe_pm_runtime_get(gt_to_xe(gt));
> > +	XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> > +
> > +	reg_value = gen_eustall_base(stream, false);
> > +	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, reg_value);
> > +	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_BASE.__reg).addr,
> > +			reg_value, sizeof(reg_value));
> > +	/* GGTT addresses can never be > 32 bits */
> > +	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE_UPPER, 0);
> > +	reg_value = _MASKED_FIELD(EUSTALL_MOCS | EUSTALL_SAMPLE_RATE,
> > +				  REG_FIELD_PREP(EUSTALL_MOCS, gt->mocs.uc_index << 1) |
> > +				  REG_FIELD_PREP(EUSTALL_SAMPLE_RATE,
> > +						 props->eu_stall_sampling_rate));
> > +	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_CTRL, reg_value);
> > +	trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_CTRL.__reg).addr,
> > +			reg_value, sizeof(reg_value));
> > +
> > +	for_each_dss_steering(dss, gt, group, instance) {
> > +		write_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT,
> > +						       group, instance);
> > +		write_ptr = write_ptr_reg & XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK;
> > +		write_ptr <<= (6 - XEHPC_EUSTALL_REPORT_WRITE_PTR_SHIFT);
> > +		write_ptr &= ((stream->per_dss_buf_size << 1) - 1);
> > +		read_ptr_reg = write_ptr >> (6 - XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT);
> > +		read_ptr_reg &= XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
> > +		read_ptr_reg |= (XEHPC_EUSTALL_REPORT1_READ_PTR_MASK <<
> > +				 XEHPC_EUSTALL_REPORT1_MASK_SHIFT);
> > +		xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT1,
> > +					read_ptr_reg, group, instance);
> > +		dss_buf = &stream->dss_buf[dss];
> > +		vaddr_offset = dss * props->eu_stall_buf_sz;
> > +		dss_buf->vaddr = stream->vaddr + vaddr_offset;
> > +		dss_buf->write = write_ptr;
> > +		dss_buf->read = write_ptr;
> > +		mutex_init(&dss_buf->lock);
> > +	}
> > +	XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> > +	xe_pm_runtime_put(gt_to_xe(gt));
> > +	return 0;
> > +}
> > +
> > +/**
> > + * xe_eu_stall_buf_read - handles read FOP for xe EU stall cntr stream FDs
> > + * @file: An xe EU stall cntr stream file
> > + * @buf: destination buffer given by userspace
> > + * @count: the number of bytes userspace wants to read
> > + * @ppos: (inout) file seek position (unused)
> > + *
> > + * Returns: The number of bytes copied or a negative error code on failure.
> > + */
> > +static ssize_t xe_eu_stall_buf_read(struct file *file, char __user *buf,
> > +				    size_t count, loff_t *ppos)
> > +{
> > +	struct xe_eu_stall_cntr_stream *stream = file->private_data;
> > +	struct xe_gt *gt = stream->gt;
> > +	ssize_t ret;
> > +
> > +	if (!stream->enabled) {
> > +		drm_dbg(&gt->tile->xe->drm, "EU stall data stream not enabled to read\n");
> 
> Here and elsewhere throughout this patch, it would be much better to use
> xe_gt_dbg() and such so that we have more useful log output that
> identifies which GT the messages came from.
> 
> > +		return -EINVAL;
> > +	}
> > +
> > +	if (bitmap_weight(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS)) {
> > +		if (!stream->data_drop.reported_to_user) {
> > +			stream->data_drop.reported_to_user = true;
> > +			drm_dbg(&gt->tile->xe->drm, "EU stall data drop reported\n");
> > +			return -EIO;
> > +		}
> > +		stream->data_drop.reported_to_user = false;
> > +	}
> > +
> > +	if (!(file->f_flags & O_NONBLOCK)) {
> > +		do {
> > +			if (!stream->pollin) {
> > +				ret = wait_event_interruptible(stream->poll_wq, stream->pollin);
> > +				if (ret)
> > +					return -EINTR;
> > +			}
> > +
> > +			mutex_lock(&gt->eu_stall_cntr->lock);
> > +			ret = xe_eu_stall_buf_read_locked(stream, file, buf, count, ppos);
> > +			mutex_unlock(&gt->eu_stall_cntr->lock);
> > +		} while (ret == -EAGAIN);
> > +	} else {
> > +		mutex_lock(&gt->eu_stall_cntr->lock);
> > +		ret = xe_eu_stall_buf_read_locked(stream, file, buf, count, ppos);
> > +		mutex_unlock(&gt->eu_stall_cntr->lock);
> > +	}
> > +
> > +	stream->pollin = false;
> > +
> > +	return ret;
> > +}
> > +
> > +static __poll_t
> > +xe_eu_stall_buf_poll_locked(struct xe_eu_stall_cntr_stream *stream,
> > +			    struct file *file, poll_table *wait)
> > +{
> > +	__poll_t events = 0;
> > +
> > +	poll_wait(file, &stream->poll_wq, wait);
> > +
> > +	if (stream->pollin)
> > +		events |= EPOLLIN;
> > +
> > +	return events;
> > +}
> > +
> > +static __poll_t
> > +xe_eu_stall_buf_poll(struct file *file, poll_table *wait)
> > +{
> > +	struct xe_eu_stall_cntr_stream *stream = file->private_data;
> > +	struct xe_gt *gt = stream->gt;
> > +	__poll_t ret;
> > +
> > +	mutex_lock(&gt->eu_stall_cntr->lock);
> > +	ret = xe_eu_stall_buf_poll_locked(stream, file, wait);
> > +	mutex_unlock(&gt->eu_stall_cntr->lock);
> > +
> > +	return ret;
> > +}
> > +
> > +static void
> > +xe_eu_stall_cntr_enable_locked(struct xe_eu_stall_cntr_stream *stream)
> > +{
> > +	if (stream->enabled)
> > +		return;
> > +
> > +	stream->enabled = true;
> > +
> > +	xe_eu_stall_stream_enable(stream);
> > +	hrtimer_start(&stream->poll_check_timer,
> > +		      ns_to_ktime(stream->poll_period),
> > +		      HRTIMER_MODE_REL);
> > +}
> > +
> > +static void
> > +xe_eu_stall_cntr_disable_locked(struct xe_eu_stall_cntr_stream *stream)
> > +{
> > +	if (!stream->enabled)
> > +		return;
> > +
> > +	stream->enabled = false;
> > +
> > +	hrtimer_cancel(&stream->poll_check_timer);
> > +	flush_workqueue(stream->buf_check_wq);
> > +	xe_eu_stall_stream_disable(stream);
> > +}
> > +
> > +static long
> > +xe_eu_stall_cntr_info_locked(struct xe_eu_stall_cntr_stream *stream,
> > +			     unsigned long arg)
> > +{
> > +	struct drm_xe_eu_stall_stream_info info = { .record_size = 0, };
> > +	void __user *uaddr = (void __user *)arg;
> > +	struct xe_gt *gt = stream->gt;
> > +	enum xe_platform platform;
> > +
> > +	platform = gt_to_xe(gt)->info.platform;
> > +
> > +	if (platform == XE_PVC)
> > +		info.record_size = sizeof(struct drm_xe_eu_stall_data_pvc);
> > +	else if ((platform == XE_LUNARLAKE) || (platform == XE_BATTLEMAGE))
> > +		info.record_size = sizeof(struct drm_xe_eu_stall_data_xe2);
> > +
> > +	if (copy_to_user(uaddr, &info, sizeof(info)))
> > +		return -EFAULT;
> > +
> > +	return 0;
> > +}
> > +
> > +static long
> > +xe_eu_stall_cntr_ioctl_locked(struct xe_eu_stall_cntr_stream *stream,
> > +			      unsigned int cmd, unsigned long arg)
> > +{
> > +	switch (cmd) {
> > +	case DRM_XE_OBSERVATION_IOCTL_ENABLE:
> > +		xe_eu_stall_cntr_enable_locked(stream);
> > +		return 0;
> > +	case DRM_XE_OBSERVATION_IOCTL_DISABLE:
> > +		xe_eu_stall_cntr_disable_locked(stream);
> > +		return 0;
> > +	case DRM_XE_OBSERVATION_IOCTL_INFO:
> > +		return xe_eu_stall_cntr_info_locked(stream, arg);
> > +	}
> > +
> > +	return -EINVAL;
> > +}
> > +
> > +/**
> > + * xe_eu_stall_cntr_ioctl - support ioctl() usage with xe EU stall counter
> > + *								stream FDs
> > + * @file: An xe EU stall cntr stream file
> > + * @cmd: the ioctl request
> > + * @arg: the ioctl data
> > + *
> > + * Implementation deferred to xe_eu_stall_cntr_ioctl_locked().
> > + *
> > + * Returns: zero on success or a negative error code. Returns -EINVAL for
> > + * an unknown ioctl request.
> > + */
> > +static long xe_eu_stall_cntr_ioctl(struct file *file,
> > +				   unsigned int cmd,
> > +				   unsigned long arg)
> > +{
> > +	struct xe_eu_stall_cntr_stream *stream = file->private_data;
> > +	struct xe_gt *gt = stream->gt;
> > +	long ret;
> > +
> > +	mutex_lock(&gt->eu_stall_cntr->lock);
> > +	ret = xe_eu_stall_cntr_ioctl_locked(stream, cmd, arg);
> > +	mutex_unlock(&gt->eu_stall_cntr->lock);
> > +
> > +	return ret;
> > +}
> > +
> > +static void
> > +xe_eu_stall_destroy_locked(struct xe_eu_stall_cntr_stream *stream)
> > +{
> > +	xe_eu_stall_cntr_disable_locked(stream);
> > +	free_eu_stall_cntr_buf(stream);
> > +}
> > +
> > +/**
> > + * xe_eu_stall_release - handles userspace close() of a EU stall data
> > + *			   stream file.
> > + * @inode: anonymous inode associated with file
> > + * @file: An xe EU stall stream file
> > + *
> > + * Cleans up any resources associated with an open EU stall data stream file.
> > + */
> > +static int xe_eu_stall_release(struct inode *inode, struct file *file)
> > +{
> > +	struct xe_eu_stall_cntr_stream *stream = file->private_data;
> > +	struct xe_gt *gt = stream->gt;
> > +
> > +	mutex_lock(&gt->eu_stall_cntr->lock);
> > +	xe_eu_stall_destroy_locked(stream);
> > +	kfree(stream->dss_buf);
> > +	kfree(stream);
> > +	gt->eu_stall_cntr->stream = NULL;
> > +	mutex_unlock(&gt->eu_stall_cntr->lock);
> > +
> > +	/* Release the reference the EU stall stream kept on the driver */
> > +	drm_dev_put(&gt->tile->xe->drm);
> > +
> > +	return 0;
> > +}
> > +
> > +static const struct file_operations fops_eu_stall = {
> > +	.owner		= THIS_MODULE,
> > +	.llseek		= no_llseek,
> > +	.release	= xe_eu_stall_release,
> > +	.poll		= xe_eu_stall_buf_poll,
> > +	.read		= xe_eu_stall_buf_read,
> > +	.unlocked_ioctl = xe_eu_stall_cntr_ioctl,
> > +	.compat_ioctl   = xe_eu_stall_cntr_ioctl,
> > +};
> > +
> > +/**
> > + * xe_open_eu_stall_stream_locked - Open a EU stall data stream FD.
> > + * @dev: drm device instance
> > + * @props: individually validated u64 property value pairs
> > + * @file: drm file
> > + * @gt: GT from which the EU stall data will be captured
> > + *
> > + * Returns: zero on success or a negative error code.
> > + */
> > +static int
> > +xe_open_eu_stall_stream_locked(struct drm_device *dev,
> > +			       struct eu_stall_open_properties *props,
> > +			       struct drm_file *file,
> > +			       struct xe_gt *gt)
> > +{
> > +	struct xe_device *xe = to_xe_device(dev);
> > +	struct xe_eu_stall_cntr_stream *stream;
> > +	unsigned long f_flags = 0;
> > +	xe_dss_mask_t all_dss;
> > +	int ret, stream_fd;
> > +	u32 tile_buf_size;
> > +	u16 num_dss;
> > +
> > +	if (xe_observation_paranoid && !perfmon_capable()) {
> > +		drm_dbg(&xe->drm, "Insufficient privileges for EU stall monitoring\n");
> > +		return -EACCES;
> > +	}
> > +
> > +	/* Only one session can be active at any time */
> > +	if (gt->eu_stall_cntr->stream) {
> > +		drm_dbg(&xe->drm, "EU stall cntr session already active\n");
> > +		return -EBUSY;
> > +	}
> > +
> > +	bitmap_or(all_dss, gt->fuse_topo.g_dss_mask, gt->fuse_topo.c_dss_mask,
> > +		  XE_MAX_DSS_FUSE_BITS);
> > +	/*
> > +	 * Enabled subslices can be discontiguous. Find the last subslice
> > +	 * and calculate total buffer size based on that.
> > +	 * intel_sseu_highest_xehp_dss returns zero based position.
> 
> What is intel_sseu_highest_xehp_dss?  That sounds like an i915 function
> name, but this is Xe (and no such function exists in i915 either).
> 
> > +	 * Therefore the result is incremented.
> > +	 */
> > +	num_dss = xe_dss_mask_last_dss(all_dss) + 1;
> > +	tile_buf_size = props->eu_stall_buf_sz * num_dss;
> > +	if (props->event_report_count > num_data_rows(tile_buf_size)) {
> > +		drm_dbg(&xe->drm, "Invalid EU stall data poll event report count %u\n",
> > +			props->event_report_count);
> > +		drm_dbg(&xe->drm, "Maximum event report count for the given buffer size is %u\n",
> > +			num_data_rows(tile_buf_size));
> > +		return -EINVAL;
> > +	}
> > +
> > +	stream = kzalloc(sizeof(*stream), GFP_KERNEL);
> > +	if (!stream)
> > +		return -ENOMEM;
> > +
> > +	gt->eu_stall_cntr->stream = stream;
> > +	stream->gt = gt;
> > +
> > +	ret = xe_eu_stall_stream_init(stream, props, num_dss);
> > +	if (ret) {
> > +		drm_dbg(&xe->drm, "EU stall stream init failed : %d\n", ret);
> > +		goto err_alloc;
> > +	}
> > +
> > +	stream_fd = anon_inode_getfd("[xe_eu_stall]", &fops_eu_stall,
> > +				     stream, f_flags);
> > +	if (stream_fd < 0) {
> > +		ret = stream_fd;
> > +		drm_dbg(&xe->drm, "EU stall inode get fd failed : %d\n", ret);
> > +		goto err_open;
> > +	}
> > +
> > +	if (!props->open_disabled)
> > +		xe_eu_stall_cntr_enable_locked(stream);
> > +
> > +	/* Take a reference on the driver that will be kept with stream_fd
> > +	 * until its release.
> > +	 */
> > +	drm_dev_get(&gt->tile->xe->drm);
> > +
> > +	return stream_fd;
> > +
> > +err_open:
> > +	free_eu_stall_cntr_buf(stream);
> > +err_alloc:
> > +	gt->eu_stall_cntr->stream = NULL;
> > +	kfree(stream->dss_buf);
> > +	kfree(stream);
> > +	return ret;
> > +}
> > +
> > +int xe_open_eu_stall_stream(struct drm_device *dev,
> > +			    u64 data,
> > +			    struct drm_file *file)
> > +{
> > +	struct xe_device *xe = to_xe_device(dev);
> > +	struct eu_stall_open_properties props;
> > +	struct xe_gt *gt;
> > +	int ret;
> > +
> > +	memset(&props, 0, sizeof(struct eu_stall_open_properties));
> > +
> > +	/* Set default values */
> > +	props.gt_id = 0;
> > +	props.eu_stall_buf_sz = SZ_256K;
> > +	props.eu_stall_sampling_rate = 4;
> > +	props.poll_period = DEFAULT_POLL_PERIOD_NS;
> > +	props.event_report_count = 1;
> > +
> > +	ret = xe_eu_stall_user_extensions(xe, data, &props);
> > +	if (ret)
> > +		return ret;
> > +
> > +	gt = xe_device_get_gt(xe, props.gt_id);
> > +	if (!gt) {
> > +		drm_dbg(&xe->drm, "Invalid GT for EU stall sampling\n");
> > +		return -EINVAL;
> > +	}
> > +
> > +	mutex_lock(&gt->eu_stall_cntr->lock);
> > +	ret = xe_open_eu_stall_stream_locked(dev, &props, file, gt);
> > +	mutex_unlock(&gt->eu_stall_cntr->lock);
> > +	return ret;
> > +}
> > diff --git a/drivers/gpu/drm/xe/xe_eustall_cntr.h b/drivers/gpu/drm/xe/xe_eustall_cntr.h
> > new file mode 100644
> > index 000000000000..417c38838432
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_eustall_cntr.h
> > @@ -0,0 +1,60 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2024 Intel Corporation
> > + */
> > +
> > +#ifndef __XE_EUSTALL_CNTR_H__
> > +#define __XE_EUSTALL_CNTR_H__
> > +
> > +#include <drm/xe_drm.h>
> > +#include <drm/drm_file.h>
> > +#include "xe_gt_types.h"
> > +#include "regs/xe_eu_stall_regs.h"
> > +
> > +struct per_dss_buf {
> > +	u8 *vaddr;
> > +	u32 write;
> > +	u32 read;
> > +	/* lock to protect read and write pointers */
> > +	struct mutex lock;
> > +};
> > +
> > +/**
> > + * struct xe_eu_stall_cntr_stream - state of EU stall counter stream FD
> > + */
> > +struct xe_eu_stall_cntr_stream {
> > +	u8 *vaddr;
> > +	bool pollin;
> > +	bool enabled;
> > +	u64 poll_period;
> > +	u32 event_report_count;
> > +	size_t per_dss_buf_size;
> > +	wait_queue_head_t poll_wq;
> > +
> > +	struct xe_gt *gt;
> > +	struct xe_bo *bo;
> > +	struct per_dss_buf *dss_buf;
> > +	struct {
> > +		bool reported_to_user;
> > +		xe_dss_mask_t mask;
> > +		/* lock to protect mask */
> > +		spinlock_t lock;
> > +	} data_drop;
> > +	struct hrtimer poll_check_timer;
> > +	struct work_struct buf_check_work;
> > +	struct workqueue_struct *buf_check_wq;
> > +};
> > +
> > +struct xe_eu_stall_cntr_gt {
> > +	/* Lock to protect stream */
> > +	struct mutex lock;
> > +
> > +	/* Execution Unit (EU) stall counter stream */
> > +	struct xe_eu_stall_cntr_stream *stream;
> > +};
> > +
> > +int xe_eustall_cntr_init(struct xe_gt *gt);
> > +int xe_open_eu_stall_stream(struct drm_device *dev,
> > +			    u64 data,
> > +			    struct drm_file *file);
> > +#endif
> > diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
> > index f0dc2bf24c7b..0f661ebe9403 100644
> > --- a/drivers/gpu/drm/xe/xe_gt.c
> > +++ b/drivers/gpu/drm/xe/xe_gt.c
> > @@ -59,6 +59,7 @@
> >  #include "xe_vm.h"
> >  #include "xe_wa.h"
> >  #include "xe_wopcm.h"
> > +#include "xe_eustall_cntr.h"
> >  
> >  static void gt_fini(struct drm_device *drm, void *arg)
> >  {
> > @@ -158,6 +159,7 @@ void xe_gt_remove(struct xe_gt *gt)
> >  		xe_hw_fence_irq_finish(&gt->fence_irq[i]);
> >  
> >  	xe_gt_disable_host_l2_vram(gt);
> > +	kfree(gt->eu_stall_cntr);
> >  }
> >  
> >  static void gt_reset_worker(struct work_struct *w);
> > @@ -620,6 +622,10 @@ int xe_gt_init(struct xe_gt *gt)
> >  
> >  	xe_gt_record_user_engines(gt);
> >  
> > +	err = xe_eustall_cntr_init(gt);
> > +	if (err)
> > +		return err;
> > +
> >  	return 0;
> >  }
> >  
> > diff --git a/drivers/gpu/drm/xe/xe_gt_topology.c b/drivers/gpu/drm/xe/xe_gt_topology.c
> > index 0662f71c6ede..031782247723 100644
> > --- a/drivers/gpu/drm/xe/xe_gt_topology.c
> > +++ b/drivers/gpu/drm/xe/xe_gt_topology.c
> > @@ -264,6 +264,15 @@ xe_dss_mask_group_ffs(const xe_dss_mask_t mask, int groupsize, int groupnum)
> >  	return find_next_bit(mask, XE_MAX_DSS_FUSE_BITS, groupnum * groupsize);
> >  }
> >  
> > +/*
> > + * Used to obtain the index of the last DSS.
> > + */
> > +unsigned int
> > +xe_dss_mask_last_dss(const xe_dss_mask_t mask)
> > +{
> > +	return find_last_bit(mask, XE_MAX_DSS_FUSE_BITS);
> > +}
> > +
> >  bool xe_dss_mask_empty(const xe_dss_mask_t mask)
> >  {
> >  	return bitmap_empty(mask, XE_MAX_DSS_FUSE_BITS);
> > diff --git a/drivers/gpu/drm/xe/xe_gt_topology.h b/drivers/gpu/drm/xe/xe_gt_topology.h
> > index 746b325bbf6e..7ee022784397 100644
> > --- a/drivers/gpu/drm/xe/xe_gt_topology.h
> > +++ b/drivers/gpu/drm/xe/xe_gt_topology.h
> > @@ -28,6 +28,9 @@ void xe_gt_topology_dump(struct xe_gt *gt, struct drm_printer *p);
> >  unsigned int
> >  xe_dss_mask_group_ffs(const xe_dss_mask_t mask, int groupsize, int groupnum);
> >  
> > +unsigned int
> > +xe_dss_mask_last_dss(const xe_dss_mask_t mask);
> > +
> >  bool xe_dss_mask_empty(const xe_dss_mask_t mask);
> >  
> >  bool
> > diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
> > index 3d1c51de0268..a8eb312c28fd 100644
> > --- a/drivers/gpu/drm/xe/xe_gt_types.h
> > +++ b/drivers/gpu/drm/xe/xe_gt_types.h
> > @@ -428,6 +428,9 @@ struct xe_gt {
> >  
> >  	/** @oa: oa observation subsystem per gt info */
> >  	struct xe_oa_gt oa;
> > +
> > +	/** @eu_stall_cntr: EU stall counters subsystem per gt info */
> > +	struct xe_eu_stall_cntr_gt *eu_stall_cntr;
> >  };
> >  
> >  #endif
> > diff --git a/drivers/gpu/drm/xe/xe_observation.c b/drivers/gpu/drm/xe/xe_observation.c
> > index 8ec1b84cbb9e..b1942bc72ae0 100644
> > --- a/drivers/gpu/drm/xe/xe_observation.c
> > +++ b/drivers/gpu/drm/xe/xe_observation.c
> > @@ -8,6 +8,7 @@
> >  
> >  #include <uapi/drm/xe_drm.h>
> >  
> > +#include "xe_eustall_cntr.h"
> >  #include "xe_oa.h"
> >  #include "xe_observation.h"
> >  
> > @@ -29,6 +30,17 @@ static int xe_oa_ioctl(struct drm_device *dev, struct drm_xe_observation_param *
> >  	}
> >  }
> >  
> > +static int xe_eu_stall_ioctl(struct drm_device *dev, struct drm_xe_observation_param *arg,
> > +			     struct drm_file *file)
> > +{
> > +	switch (arg->observation_op) {
> > +	case DRM_XE_OBSERVATION_OP_STREAM_OPEN:
> > +		return xe_open_eu_stall_stream(dev, arg->param, file);
> > +	default:
> > +		return -EINVAL;
> > +	}
> > +}
> > +
> >  /**
> >   * xe_observation_ioctl - The top level observation layer ioctl
> >   * @dev: @drm_device
> > @@ -51,6 +63,8 @@ int xe_observation_ioctl(struct drm_device *dev, void *data, struct drm_file *fi
> >  	switch (arg->observation_type) {
> >  	case DRM_XE_OBSERVATION_TYPE_OA:
> >  		return xe_oa_ioctl(dev, arg, file);
> > +	case DRM_XE_OBSERVATION_TYPE_EU_STALL:
> > +		return xe_eu_stall_ioctl(dev, arg, file);
> >  	default:
> >  		return -EINVAL;
> >  	}
> > diff --git a/drivers/gpu/drm/xe/xe_trace.h b/drivers/gpu/drm/xe/xe_trace.h
> > index 8573d7a87d84..dfb1eb121337 100644
> > --- a/drivers/gpu/drm/xe/xe_trace.h
> > +++ b/drivers/gpu/drm/xe/xe_trace.h
> > @@ -421,6 +421,41 @@ DEFINE_EVENT(xe_pm_runtime, xe_pm_runtime_get_ioctl,
> >  	     TP_ARGS(xe, caller)
> >  );
> >  
> > +TRACE_EVENT(xe_eu_stall_cntr_read,
> > +	    TP_PROTO(u8 slice, u8 subslice,
> > +		     u32 read_ptr, u32 write_ptr,
> > +		     u32 read_offset, u32 write_offset,
> > +		     size_t total_size),
> > +	    TP_ARGS(slice, subslice, read_ptr, write_ptr,
> > +		    read_offset, write_offset, total_size),
> > +
> > +	    TP_STRUCT__entry(
> > +			     __field(u8, slice)
> > +			     __field(u8, subslice)
> > +			     __field(u32, read_ptr)
> > +			     __field(u32, write_ptr)
> > +			     __field(u32, read_offset)
> > +			     __field(u32, write_offset)
> > +			     __field(size_t, total_size)
> > +			     ),
> > +
> > +	    TP_fast_assign(
> > +			   __entry->slice = slice;
> > +			   __entry->subslice = subslice;
> > +			   __entry->read_ptr = read_ptr;
> > +			   __entry->write_ptr = write_ptr;
> > +			   __entry->read_offset = read_offset;
> > +			   __entry->write_offset = write_offset;
> > +			   __entry->total_size = total_size;
> > +			   ),
> > +
> > +	    TP_printk("slice:%u subslice:%u readptr:0x%x writeptr:0x%x read off:%u write off:%u size:%zu ",
> > +		      __entry->slice, __entry->subslice,
> > +		      __entry->read_ptr, __entry->write_ptr,
> > +		      __entry->read_offset, __entry->write_offset,
> > +		      __entry->total_size)
> > +);
> > +
> >  #endif
> >  
> >  /* This part must be outside protection */
> > diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> > index b6fbe4988f2e..c836227d064f 100644
> > --- a/include/uapi/drm/xe_drm.h
> > +++ b/include/uapi/drm/xe_drm.h
> > @@ -1395,6 +1395,8 @@ struct drm_xe_wait_user_fence {
> >  enum drm_xe_observation_type {
> >  	/** @DRM_XE_OBSERVATION_TYPE_OA: OA observation stream type */
> >  	DRM_XE_OBSERVATION_TYPE_OA,
> > +	/** @DRM_XE_OBSERVATION_TYPE_EU_STALL: EU stall sampling observation stream type */
> > +	DRM_XE_OBSERVATION_TYPE_EU_STALL,
> >  };
> >  
> >  /**
> > @@ -1694,6 +1696,138 @@ struct drm_xe_oa_stream_info {
> >  	__u64 reserved[3];
> >  };
> >  
> > +/**
> > + * enum drm_xe_eu_stall_property_id - EU stall data stream property ids.
> > + *
> > + * These properties are passed to the driver as a chain of
> > + * @drm_xe_ext_set_property structures with @property set to these
> > + * properties' enums and @value set to the corresponding values of these
> > + * properties. @drm_xe_user_extension base.name should be set to
> > + * @DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY.
> > + */
> > +enum drm_xe_eu_stall_property_id {
> > +#define DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY		0
> > +	/**
> > +	 * @DRM_XE_EU_STALL_PROP_BUF_SZ: Per DSS Memory Buffer Size.
> > +	 * Valid values are 128 KB, 256 KB, and 512 KB.
> > +	 */
> > +	DRM_XE_EU_STALL_PROP_BUF_SZ = 1,
> 
> Does userspace really care about this being configurable?  Even if we
> have a platform with XE_MAX_DSS_FUSE_BITS total XeCores, the difference
> between the largest and smallest sizes here only saves 48MB of memory.
> The hardware makes this configurable, but is there actually an ask to
> expose this through the uapi?  If not, I'd say we should just always
> pick 512KB internally and keep things simple.
> 
> > +
> > +	/**
> > +	 * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
> > +	 * in multiples of 251 cycles. Valid values are 1 to 7.
> > +	 * If the value is 1, sampling interval is 251 cycles.
> > +	 * If the value is 7, sampling interval is 7 x 251 cycles.
> > +	 */
> > +	DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
> > +
> > +	/**
> > +	 * @DRM_XE_EU_STALL_PROP_POLL_PERIOD: EU stall data
> > +	 * poll period in nanoseconds. should be at least 100000 ns.
> > +	 */
> > +	DRM_XE_EU_STALL_PROP_POLL_PERIOD,
> > +
> > +	/**
> > +	 * @DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT: Minimum number of
> > +	 * EU stall data rows to be present in the kernel buffer for
> > +	 * poll() to set POLLIN (data present).
> > +	 */
> > +	DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT,
> > +
> > +	/**
> > +	 * @DRM_XE_EU_STALL_PROP_GT_ID: GT ID of the GT on which
> > +	 * EU stall data will be captured.
> > +	 */
> > +	DRM_XE_EU_STALL_PROP_GT_ID,
> 
> I mentioned above, but it feels like this should be an intrinsic part of
> the API, not something coming in through an optional extension...
> 
> > +
> > +	/**
> > +	 * @DRM_XE_EU_STALL_PROP_OPEN_DISABLED: A value of 1 will open
> > +	 * the EU stall data stream without enabling EU stall sampling.
> > +	 */
> > +	DRM_XE_EU_STALL_PROP_OPEN_DISABLED,
> 
> Is there a reason not to make this one the default behavior?  Is there
> really a benefit to auto-enabling on open that makes it worth the extra
> API complexity to make this configurable?
> 
> > +};
> > +
> > +/**
> > + * struct drm_xe_eu_stall_stream_info - EU stall stream info returned from
> > + * @DRM_XE_OBSERVATION_IOCTL_INFO observation stream fd ioctl
> > + */
> > +struct drm_xe_eu_stall_stream_info {
> > +	/** @extensions: Pointer to the first extension struct, if any */
> > +	__u64 extensions;
> > +
> > +	/** @record_size: size of each EU stall data record */
> > +	__u64 record_size;
> > +
> > +	/** @reserved: reserved for future use */
> > +	__u64 reserved[3];
> > +};
> > +
> > +/**
> > + * struct drm_xe_eu_stall_data_pvc - EU stall data format for PVC
> 
> I thought there was an ask from one of the userspace teams that we make
> the layout discoverable?  I.e., a runtime-queryable format description
> that lists the counter type, size, and offset in the record of each
> counter that has usable data in the records?  Did we change directions
> on that?
> 
> 
> Matt
> 
> > + *
> > + * Bits		Field
> > + * 0  to 28	IP (addr)
> > + * 29 to 36	active count
> > + * 37 to 44	other count
> > + * 45 to 52	control count
> > + * 53 to 60	pipestall count
> > + * 61 to 68	send count
> > + * 69 to 76	dist_acc count
> > + * 77 to 84	sbid count
> > + * 85 to 92	sync count
> > + * 93 to 100	inst_fetch count
> > + */
> > +struct drm_xe_eu_stall_data_pvc {
> > +	__u64 ip_addr:29;
> > +	__u64 active_count:8;
> > +	__u64 other_count:8;
> > +	__u64 control_count:8;
> > +	__u64 pipestall_count:8;
> > +	__u64 send_count:8;
> > +	__u64 dist_acc_count:8;
> > +	__u64 sbid_count:8;
> > +	__u64 sync_count:8;
> > +	__u64 inst_fetch_count:8;
> > +	__u64 unused_bits:27;
> > +	__u64 unused[6];
> > +} __attribute__((packed));
> > +
> > +/**
> > + * struct drm_xe_eu_stall_data_xe2 - EU stall data format for LNL, BMG
> > + *
> > + * Bits		Field
> > + * 0  to 28	IP (addr)
> > + * 29 to 36	Tdr count
> > + * 37 to 44	other count
> > + * 45 to 52	control count
> > + * 53 to 60	pipestall count
> > + * 61 to 68	send count
> > + * 69 to 76	dist_acc count
> > + * 77 to 84	sbid count
> > + * 85 to 92	sync count
> > + * 93 to 100	inst_fetch count
> > + * 101 to 108	Active count
> > + * 109 to 111	Exid
> > + * 112		EndFlag (is always 1)
> > + */
> > +struct drm_xe_eu_stall_data_xe2 {
> > +	__u64 ip_addr:29;
> > +	__u64 tdr_count:8;
> > +	__u64 other_count:8;
> > +	__u64 control_count:8;
> > +	__u64 pipestall_count:8;
> > +	__u64 send_count:8;
> > +	__u64 dist_acc_count:8;
> > +	__u64 sbid_count:8;
> > +	__u64 sync_count:8;
> > +	__u64 inst_fetch_count:8;
> > +	__u64 active_count:8;
> > +	__u64 ex_id:3;
> > +	__u64 end_flag:1;
> > +	__u64 unused_bits:15;
> > +	__u64 unused[6];
> > +} __attribute__((packed));
> > +
> >  #if defined(__cplusplus)
> >  }
> >  #endif
> > -- 
> > 2.45.1
> > 
> 
> -- 
> Matt Roper
> Graphics Software Engineer
> Linux GPU Platform Enablement
> Intel Corporation

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v3 1/1] drm/xe/eustall: Add support for EU stall sampling
  2024-09-11 23:21     ` Dixit, Ashutosh
@ 2024-09-13  1:53       ` Harish Chegondi
  2024-09-13  7:35         ` Ranjan, Joshua Santhosh
  2024-09-19 14:44         ` Cabral, Matias A
  0 siblings, 2 replies; 20+ messages in thread
From: Harish Chegondi @ 2024-09-13  1:53 UTC (permalink / raw)
  To: Dixit, Ashutosh
  Cc: Matt Roper, intel-xe, james.ausmus, felix.j.degrood, jose.souza,
	matias.a.cabral, joshua.santosh.ranjan

On Wed, Sep 11, 2024 at 04:21:12PM -0700, Dixit, Ashutosh wrote:
> On Mon, 09 Sep 2024 17:09:14 -0700, Matt Roper wrote:
> >
> 
> Hi Matt,
> 
> Some comments about the uapi below.
> 
> > > @@ -1694,6 +1696,138 @@ struct drm_xe_oa_stream_info {
> > >	__u64 reserved[3];
> > >  };
> > >
> > > +/**
> > > + * enum drm_xe_eu_stall_property_id - EU stall data stream property ids.
> > > + *
> > > + * These properties are passed to the driver as a chain of
> > > + * @drm_xe_ext_set_property structures with @property set to these
> > > + * properties' enums and @value set to the corresponding values of these
> > > + * properties. @drm_xe_user_extension base.name should be set to
> > > + * @DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY.
> > > + */
> > > +enum drm_xe_eu_stall_property_id {
> > > +#define DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY		0
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_BUF_SZ: Per DSS Memory Buffer Size.
> > > +	 * Valid values are 128 KB, 256 KB, and 512 KB.
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_BUF_SZ = 1,
> >
> > Does userspace really care about this being configurable?  Even if we
> > have a platform with XE_MAX_DSS_FUSE_BITS total XeCores, the difference
> > between the largest and smallest sizes here only saves 48MB of memory.
> > The hardware makes this configurable, but is there actually an ask to
> > expose this through the uapi?  If not, I'd say we should just always
> > pick 512KB internally and keep things simple.
> 
> Agreed.
> 
> >
> > > +
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
> > > +	 * in multiples of 251 cycles. Valid values are 1 to 7.
> > > +	 * If the value is 1, sampling interval is 251 cycles.
> > > +	 * If the value is 7, sampling interval is 7 x 251 cycles.
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
> > > +
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_POLL_PERIOD: EU stall data
> > > +	 * poll period in nanoseconds. should be at least 100000 ns.
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_POLL_PERIOD,
> > > +
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT: Minimum number of
> > > +	 * EU stall data rows to be present in the kernel buffer for
> > > +	 * poll() to set POLLIN (data present).
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT,
> > > +
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_GT_ID: GT ID of the GT on which
> > > +	 * EU stall data will be captured.
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_GT_ID,
> >
> > I mentioned above, but it feels like this should be an intrinsic part of
> > the API, not something coming in through an optional extension...
> 
> Not sure what "intrinsic part of the API" should be. EU Stall, OA etc. are
> now types of "observation streams" and there is no other opportunity in the
> observation stream interface for this kind of information. Also, gt_id is
> EU stall specific (e.g. OA uses oa_unit_id not gt_id) so it should come in
> as an EU Stall property.
> 
> Though question for Harish: do we really need this? What if we return data
> from all tiles/gt's in a single read() call? Since we have already
> determined subslice number is not interesting to UMD's for EU Stall data,
> maybe gt_id is similarly not interesting?
User space folks said that they are interested in the EU stall data at
the GT level. So if we decide to return stall data from all the GTs, we
may have to append the GT ID to the data. I will seek feedback from the
user space folks regarding this.

Thanks
Harish.
> 
> >
> > > +
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_OPEN_DISABLED: A value of 1 will open
> > > +	 * the EU stall data stream without enabling EU stall sampling.
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_OPEN_DISABLED,
> >
> > Is there a reason not to make this one the default behavior?  Is there
> > really a benefit to auto-enabling on open that makes it worth the extra
> > API complexity to make this configurable?
> 
> I agree, this would be a good idea. But unfortunately this got in for OA
> (if I were doing OA now I would have taken Matt's suggestion). So we either
> (a) keep it the same as OA for uniformity, or (b) document that EU stall
> streams have to be explicity enabled before read()'ing data.
> 
> >
> > > +};
> > > +
> > > +/**
> > > + * struct drm_xe_eu_stall_stream_info - EU stall stream info returned from
> > > + * @DRM_XE_OBSERVATION_IOCTL_INFO observation stream fd ioctl
> > > + */
> > > +struct drm_xe_eu_stall_stream_info {
> > > +	/** @extensions: Pointer to the first extension struct, if any */
> > > +	__u64 extensions;
> > > +
> > > +	/** @record_size: size of each EU stall data record */
> > > +	__u64 record_size;
> > > +
> > > +	/** @reserved: reserved for future use */
> > > +	__u64 reserved[3];
> > > +};
> > > +
> > > +/**
> > > + * struct drm_xe_eu_stall_data_pvc - EU stall data format for PVC
> >
> > I thought there was an ask from one of the userspace teams that we make
> > the layout discoverable?  I.e., a runtime-queryable format description
> > that lists the counter type, size, and offset in the record of each
> > counter that has usable data in the records?  Did we change directions
> > on that?
> 
> My suggestion is to eliminate these struct's from the KMD uapi header. See
> my earlier response to Harish's patch.
> 
> Thanks.
> --
> Ashutosh
> 
> 
> >
> > > + *
> > > + * Bits		Field
> > > + * 0  to 28	IP (addr)
> > > + * 29 to 36	active count
> > > + * 37 to 44	other count
> > > + * 45 to 52	control count
> > > + * 53 to 60	pipestall count
> > > + * 61 to 68	send count
> > > + * 69 to 76	dist_acc count
> > > + * 77 to 84	sbid count
> > > + * 85 to 92	sync count
> > > + * 93 to 100	inst_fetch count
> > > + */
> > > +struct drm_xe_eu_stall_data_pvc {
> > > +	__u64 ip_addr:29;
> > > +	__u64 active_count:8;
> > > +	__u64 other_count:8;
> > > +	__u64 control_count:8;
> > > +	__u64 pipestall_count:8;
> > > +	__u64 send_count:8;
> > > +	__u64 dist_acc_count:8;
> > > +	__u64 sbid_count:8;
> > > +	__u64 sync_count:8;
> > > +	__u64 inst_fetch_count:8;
> > > +	__u64 unused_bits:27;
> > > +	__u64 unused[6];
> > > +} __attribute__((packed));
> > > +
> > > +/**
> > > + * struct drm_xe_eu_stall_data_xe2 - EU stall data format for LNL, BMG
> > > + *
> > > + * Bits		Field
> > > + * 0  to 28	IP (addr)
> > > + * 29 to 36	Tdr count
> > > + * 37 to 44	other count
> > > + * 45 to 52	control count
> > > + * 53 to 60	pipestall count
> > > + * 61 to 68	send count
> > > + * 69 to 76	dist_acc count
> > > + * 77 to 84	sbid count
> > > + * 85 to 92	sync count
> > > + * 93 to 100	inst_fetch count
> > > + * 101 to 108	Active count
> > > + * 109 to 111	Exid
> > > + * 112		EndFlag (is always 1)
> > > + */
> > > +struct drm_xe_eu_stall_data_xe2 {
> > > +	__u64 ip_addr:29;
> > > +	__u64 tdr_count:8;
> > > +	__u64 other_count:8;
> > > +	__u64 control_count:8;
> > > +	__u64 pipestall_count:8;
> > > +	__u64 send_count:8;
> > > +	__u64 dist_acc_count:8;
> > > +	__u64 sbid_count:8;
> > > +	__u64 sync_count:8;
> > > +	__u64 inst_fetch_count:8;
> > > +	__u64 active_count:8;
> > > +	__u64 ex_id:3;
> > > +	__u64 end_flag:1;
> > > +	__u64 unused_bits:15;
> > > +	__u64 unused[6];
> > > +} __attribute__((packed));
> > > +
> > >  #if defined(__cplusplus)
> > >  }
> > >  #endif
> > > --
> > > 2.45.1
> > >
> >
> > --
> > Matt Roper
> > Graphics Software Engineer
> > Linux GPU Platform Enablement
> > Intel Corporation

^ permalink raw reply	[flat|nested] 20+ messages in thread

* RE: [PATCH v3 1/1] drm/xe/eustall: Add support for EU stall sampling
  2024-09-13  1:53       ` Harish Chegondi
@ 2024-09-13  7:35         ` Ranjan, Joshua Santhosh
  2024-09-20 18:07           ` Harish Chegondi
  2024-09-19 14:44         ` Cabral, Matias A
  1 sibling, 1 reply; 20+ messages in thread
From: Ranjan, Joshua Santhosh @ 2024-09-13  7:35 UTC (permalink / raw)
  To: Chegondi, Harish, Dixit, Ashutosh
  Cc: Roper, Matthew D, intel-xe@lists.freedesktop.org, Ausmus, James,
	Degrood, Felix J, Souza, Jose, Cabral, Matias A, Kumar, Shubham

Hi 

Please find responses ([Santhosh]) inline.

-----Original Message-----
From: Chegondi, Harish <harish.chegondi@intel.com> 
Sent: Friday, September 13, 2024 7:24 AM
To: Dixit, Ashutosh <ashutosh.dixit@intel.com>
Cc: Roper, Matthew D <matthew.d.roper@intel.com>; intel-xe@lists.freedesktop.org; Ausmus, James <james.ausmus@intel.com>; Degrood, Felix J <felix.j.degrood@intel.com>; Souza, Jose <jose.souza@intel.com>; Cabral, Matias A <matias.a.cabral@intel.com>; Ranjan, Joshua Santhosh <joshua.santosh.ranjan@intel.com>
Subject: Re: [PATCH v3 1/1] drm/xe/eustall: Add support for EU stall sampling

On Wed, Sep 11, 2024 at 04:21:12PM -0700, Dixit, Ashutosh wrote:
> On Mon, 09 Sep 2024 17:09:14 -0700, Matt Roper wrote:
> >
> 
> Hi Matt,
> 
> Some comments about the uapi below.
> 
> > > @@ -1694,6 +1696,138 @@ struct drm_xe_oa_stream_info {
> > >	__u64 reserved[3];
> > >  };
> > >
> > > +/**
> > > + * enum drm_xe_eu_stall_property_id - EU stall data stream property ids.
> > > + *
> > > + * These properties are passed to the driver as a chain of
> > > + * @drm_xe_ext_set_property structures with @property set to 
> > > +these
> > > + * properties' enums and @value set to the corresponding values 
> > > +of these
> > > + * properties. @drm_xe_user_extension base.name should be set to
> > > + * @DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY.
> > > + */
> > > +enum drm_xe_eu_stall_property_id {
> > > +#define DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY		0
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_BUF_SZ: Per DSS Memory Buffer Size.
> > > +	 * Valid values are 128 KB, 256 KB, and 512 KB.
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_BUF_SZ = 1,
> >
> > Does userspace really care about this being configurable?  Even if 
> > we have a platform with XE_MAX_DSS_FUSE_BITS total XeCores, the 
> > difference between the largest and smallest sizes here only saves 48MB of memory.
> > The hardware makes this configurable, but is there actually an ask 
> > to expose this through the uapi?  If not, I'd say we should just 
> > always pick 512KB internally and keep things simple.
> 
> Agreed.
> 
> >
> > > +
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
> > > +	 * in multiples of 251 cycles. Valid values are 1 to 7.
> > > +	 * If the value is 1, sampling interval is 251 cycles.
> > > +	 * If the value is 7, sampling interval is 7 x 251 cycles.
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
> > > +
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_POLL_PERIOD: EU stall data
> > > +	 * poll period in nanoseconds. should be at least 100000 ns.
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_POLL_PERIOD,
> > > +
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT: Minimum number of
> > > +	 * EU stall data rows to be present in the kernel buffer for
> > > +	 * poll() to set POLLIN (data present).
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT,
> > > +
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_GT_ID: GT ID of the GT on which
> > > +	 * EU stall data will be captured.
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_GT_ID,
> >
> > I mentioned above, but it feels like this should be an intrinsic 
> > part of the API, not something coming in through an optional extension...
> 
> Not sure what "intrinsic part of the API" should be. EU Stall, OA etc. 
> are now types of "observation streams" and there is no other 
> opportunity in the observation stream interface for this kind of 
> information. Also, gt_id is EU stall specific (e.g. OA uses oa_unit_id 
> not gt_id) so it should come in as an EU Stall property.
> 
> Though question for Harish: do we really need this? What if we return 
> data from all tiles/gt's in a single read() call? Since we have 
> already determined subslice number is not interesting to UMD's for EU 
> Stall data, maybe gt_id is similarly not interesting?
User space folks said that they are interested in the EU stall data at the GT level. So if we decide to return stall data from all the GTs, we may have to append the GT ID to the data. I will seek feedback from the user space folks regarding this.

[Santhosh]  Yes. L0 allows Metric collection at a tile level granularity. 

Thanks
Harish.
> 
> >
> > > +
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_OPEN_DISABLED: A value of 1 will open
> > > +	 * the EU stall data stream without enabling EU stall sampling.
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_OPEN_DISABLED,
> >
> > Is there a reason not to make this one the default behavior?  Is 
> > there really a benefit to auto-enabling on open that makes it worth 
> > the extra API complexity to make this configurable?
> 
> I agree, this would be a good idea. But unfortunately this got in for 
> OA (if I were doing OA now I would have taken Matt's suggestion). So 
> we either
> (a) keep it the same as OA for uniformity, or (b) document that EU 
> stall streams have to be explicity enabled before read()'ing data.
> 
> >
> > > +};
> > > +
> > > +/**
> > > + * struct drm_xe_eu_stall_stream_info - EU stall stream info 
> > > +returned from
> > > + * @DRM_XE_OBSERVATION_IOCTL_INFO observation stream fd ioctl  */ 
> > > +struct drm_xe_eu_stall_stream_info {
> > > +	/** @extensions: Pointer to the first extension struct, if any */
> > > +	__u64 extensions;
> > > +
> > > +	/** @record_size: size of each EU stall data record */
> > > +	__u64 record_size;
> > > +
> > > +	/** @reserved: reserved for future use */
> > > +	__u64 reserved[3];
> > > +};
> > > +
> > > +/**
> > > + * struct drm_xe_eu_stall_data_pvc - EU stall data format for PVC
> >
> > I thought there was an ask from one of the userspace teams that we 
> > make the layout discoverable?  I.e., a runtime-queryable format 
> > description that lists the counter type, size, and offset in the 
> > record of each counter that has usable data in the records?  Did we 
> > change directions on that?

[Santhosh] Yes. From L0, there was a request made to have a runtime-queryable format.

> 
> My suggestion is to eliminate these struct's from the KMD uapi header. 
> See my earlier response to Harish's patch.
> 
> Thanks.
> --
> Ashutosh
> 
> 
> >
> > > + *
> > > + * Bits		Field
> > > + * 0  to 28	IP (addr)
> > > + * 29 to 36	active count
> > > + * 37 to 44	other count
> > > + * 45 to 52	control count
> > > + * 53 to 60	pipestall count
> > > + * 61 to 68	send count
> > > + * 69 to 76	dist_acc count
> > > + * 77 to 84	sbid count
> > > + * 85 to 92	sync count
> > > + * 93 to 100	inst_fetch count
> > > + */
> > > +struct drm_xe_eu_stall_data_pvc {
> > > +	__u64 ip_addr:29;
> > > +	__u64 active_count:8;
> > > +	__u64 other_count:8;
> > > +	__u64 control_count:8;
> > > +	__u64 pipestall_count:8;
> > > +	__u64 send_count:8;
> > > +	__u64 dist_acc_count:8;
> > > +	__u64 sbid_count:8;
> > > +	__u64 sync_count:8;
> > > +	__u64 inst_fetch_count:8;
> > > +	__u64 unused_bits:27;
> > > +	__u64 unused[6];
> > > +} __attribute__((packed));
> > > +
> > > +/**
> > > + * struct drm_xe_eu_stall_data_xe2 - EU stall data format for 
> > > +LNL, BMG
> > > + *
> > > + * Bits		Field
> > > + * 0  to 28	IP (addr)
> > > + * 29 to 36	Tdr count
> > > + * 37 to 44	other count
> > > + * 45 to 52	control count
> > > + * 53 to 60	pipestall count
> > > + * 61 to 68	send count
> > > + * 69 to 76	dist_acc count
> > > + * 77 to 84	sbid count
> > > + * 85 to 92	sync count
> > > + * 93 to 100	inst_fetch count
> > > + * 101 to 108	Active count
> > > + * 109 to 111	Exid
> > > + * 112		EndFlag (is always 1)
> > > + */
> > > +struct drm_xe_eu_stall_data_xe2 {
> > > +	__u64 ip_addr:29;
> > > +	__u64 tdr_count:8;
> > > +	__u64 other_count:8;
> > > +	__u64 control_count:8;
> > > +	__u64 pipestall_count:8;
> > > +	__u64 send_count:8;
> > > +	__u64 dist_acc_count:8;
> > > +	__u64 sbid_count:8;
> > > +	__u64 sync_count:8;
> > > +	__u64 inst_fetch_count:8;
> > > +	__u64 active_count:8;
> > > +	__u64 ex_id:3;
> > > +	__u64 end_flag:1;
> > > +	__u64 unused_bits:15;
> > > +	__u64 unused[6];
> > > +} __attribute__((packed));
> > > +
> > >  #if defined(__cplusplus)
> > >  }
> > >  #endif
> > > --
> > > 2.45.1
> > >
> >
> > --
> > Matt Roper
> > Graphics Software Engineer
> > Linux GPU Platform Enablement
> > Intel Corporation

^ permalink raw reply	[flat|nested] 20+ messages in thread

* RE: [PATCH v3 1/1] drm/xe/eustall: Add support for EU stall sampling
  2024-09-13  1:53       ` Harish Chegondi
  2024-09-13  7:35         ` Ranjan, Joshua Santhosh
@ 2024-09-19 14:44         ` Cabral, Matias A
  1 sibling, 0 replies; 20+ messages in thread
From: Cabral, Matias A @ 2024-09-19 14:44 UTC (permalink / raw)
  To: Chegondi, Harish, Dixit, Ashutosh
  Cc: Roper, Matthew D, intel-xe@lists.freedesktop.org, Ausmus, James,
	Degrood, Felix J, Souza, Jose, Ranjan, Joshua Santhosh,
	Kumar, Shubham

Hi Harish, 

Any updates on the definition of the uAPI? 
Btw, any igt content available ? 

Thanks, 
_MAC

-----Original Message-----
From: Chegondi, Harish <harish.chegondi@intel.com> 
Sent: Thursday, September 12, 2024 6:54 PM
To: Dixit, Ashutosh <ashutosh.dixit@intel.com>
Cc: Roper, Matthew D <matthew.d.roper@intel.com>; intel-xe@lists.freedesktop.org; Ausmus, James <james.ausmus@intel.com>; Degrood, Felix J <felix.j.degrood@intel.com>; Souza, Jose <jose.souza@intel.com>; Cabral, Matias A <matias.a.cabral@intel.com>; Ranjan, Joshua Santhosh <joshua.santosh.ranjan@intel.com>
Subject: Re: [PATCH v3 1/1] drm/xe/eustall: Add support for EU stall sampling

On Wed, Sep 11, 2024 at 04:21:12PM -0700, Dixit, Ashutosh wrote:
> On Mon, 09 Sep 2024 17:09:14 -0700, Matt Roper wrote:
> >
> 
> Hi Matt,
> 
> Some comments about the uapi below.
> 
> > > @@ -1694,6 +1696,138 @@ struct drm_xe_oa_stream_info {
> > >	__u64 reserved[3];
> > >  };
> > >
> > > +/**
> > > + * enum drm_xe_eu_stall_property_id - EU stall data stream property ids.
> > > + *
> > > + * These properties are passed to the driver as a chain of
> > > + * @drm_xe_ext_set_property structures with @property set to 
> > > +these
> > > + * properties' enums and @value set to the corresponding values 
> > > +of these
> > > + * properties. @drm_xe_user_extension base.name should be set to
> > > + * @DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY.
> > > + */
> > > +enum drm_xe_eu_stall_property_id {
> > > +#define DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY		0
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_BUF_SZ: Per DSS Memory Buffer Size.
> > > +	 * Valid values are 128 KB, 256 KB, and 512 KB.
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_BUF_SZ = 1,
> >
> > Does userspace really care about this being configurable?  Even if 
> > we have a platform with XE_MAX_DSS_FUSE_BITS total XeCores, the 
> > difference between the largest and smallest sizes here only saves 48MB of memory.
> > The hardware makes this configurable, but is there actually an ask 
> > to expose this through the uapi?  If not, I'd say we should just 
> > always pick 512KB internally and keep things simple.
> 
> Agreed.
> 
> >
> > > +
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
> > > +	 * in multiples of 251 cycles. Valid values are 1 to 7.
> > > +	 * If the value is 1, sampling interval is 251 cycles.
> > > +	 * If the value is 7, sampling interval is 7 x 251 cycles.
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
> > > +
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_POLL_PERIOD: EU stall data
> > > +	 * poll period in nanoseconds. should be at least 100000 ns.
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_POLL_PERIOD,
> > > +
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT: Minimum number of
> > > +	 * EU stall data rows to be present in the kernel buffer for
> > > +	 * poll() to set POLLIN (data present).
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT,
> > > +
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_GT_ID: GT ID of the GT on which
> > > +	 * EU stall data will be captured.
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_GT_ID,
> >
> > I mentioned above, but it feels like this should be an intrinsic 
> > part of the API, not something coming in through an optional extension...
> 
> Not sure what "intrinsic part of the API" should be. EU Stall, OA etc. 
> are now types of "observation streams" and there is no other 
> opportunity in the observation stream interface for this kind of 
> information. Also, gt_id is EU stall specific (e.g. OA uses oa_unit_id 
> not gt_id) so it should come in as an EU Stall property.
> 
> Though question for Harish: do we really need this? What if we return 
> data from all tiles/gt's in a single read() call? Since we have 
> already determined subslice number is not interesting to UMD's for EU 
> Stall data, maybe gt_id is similarly not interesting?
User space folks said that they are interested in the EU stall data at the GT level. So if we decide to return stall data from all the GTs, we may have to append the GT ID to the data. I will seek feedback from the user space folks regarding this.

Thanks
Harish.
> 
> >
> > > +
> > > +	/**
> > > +	 * @DRM_XE_EU_STALL_PROP_OPEN_DISABLED: A value of 1 will open
> > > +	 * the EU stall data stream without enabling EU stall sampling.
> > > +	 */
> > > +	DRM_XE_EU_STALL_PROP_OPEN_DISABLED,
> >
> > Is there a reason not to make this one the default behavior?  Is 
> > there really a benefit to auto-enabling on open that makes it worth 
> > the extra API complexity to make this configurable?
> 
> I agree, this would be a good idea. But unfortunately this got in for 
> OA (if I were doing OA now I would have taken Matt's suggestion). So 
> we either
> (a) keep it the same as OA for uniformity, or (b) document that EU 
> stall streams have to be explicity enabled before read()'ing data.
> 
> >
> > > +};
> > > +
> > > +/**
> > > + * struct drm_xe_eu_stall_stream_info - EU stall stream info 
> > > +returned from
> > > + * @DRM_XE_OBSERVATION_IOCTL_INFO observation stream fd ioctl  */ 
> > > +struct drm_xe_eu_stall_stream_info {
> > > +	/** @extensions: Pointer to the first extension struct, if any */
> > > +	__u64 extensions;
> > > +
> > > +	/** @record_size: size of each EU stall data record */
> > > +	__u64 record_size;
> > > +
> > > +	/** @reserved: reserved for future use */
> > > +	__u64 reserved[3];
> > > +};
> > > +
> > > +/**
> > > + * struct drm_xe_eu_stall_data_pvc - EU stall data format for PVC
> >
> > I thought there was an ask from one of the userspace teams that we 
> > make the layout discoverable?  I.e., a runtime-queryable format 
> > description that lists the counter type, size, and offset in the 
> > record of each counter that has usable data in the records?  Did we 
> > change directions on that?
> 
> My suggestion is to eliminate these struct's from the KMD uapi header. 
> See my earlier response to Harish's patch.
> 
> Thanks.
> --
> Ashutosh
> 
> 
> >
> > > + *
> > > + * Bits		Field
> > > + * 0  to 28	IP (addr)
> > > + * 29 to 36	active count
> > > + * 37 to 44	other count
> > > + * 45 to 52	control count
> > > + * 53 to 60	pipestall count
> > > + * 61 to 68	send count
> > > + * 69 to 76	dist_acc count
> > > + * 77 to 84	sbid count
> > > + * 85 to 92	sync count
> > > + * 93 to 100	inst_fetch count
> > > + */
> > > +struct drm_xe_eu_stall_data_pvc {
> > > +	__u64 ip_addr:29;
> > > +	__u64 active_count:8;
> > > +	__u64 other_count:8;
> > > +	__u64 control_count:8;
> > > +	__u64 pipestall_count:8;
> > > +	__u64 send_count:8;
> > > +	__u64 dist_acc_count:8;
> > > +	__u64 sbid_count:8;
> > > +	__u64 sync_count:8;
> > > +	__u64 inst_fetch_count:8;
> > > +	__u64 unused_bits:27;
> > > +	__u64 unused[6];
> > > +} __attribute__((packed));
> > > +
> > > +/**
> > > + * struct drm_xe_eu_stall_data_xe2 - EU stall data format for 
> > > +LNL, BMG
> > > + *
> > > + * Bits		Field
> > > + * 0  to 28	IP (addr)
> > > + * 29 to 36	Tdr count
> > > + * 37 to 44	other count
> > > + * 45 to 52	control count
> > > + * 53 to 60	pipestall count
> > > + * 61 to 68	send count
> > > + * 69 to 76	dist_acc count
> > > + * 77 to 84	sbid count
> > > + * 85 to 92	sync count
> > > + * 93 to 100	inst_fetch count
> > > + * 101 to 108	Active count
> > > + * 109 to 111	Exid
> > > + * 112		EndFlag (is always 1)
> > > + */
> > > +struct drm_xe_eu_stall_data_xe2 {
> > > +	__u64 ip_addr:29;
> > > +	__u64 tdr_count:8;
> > > +	__u64 other_count:8;
> > > +	__u64 control_count:8;
> > > +	__u64 pipestall_count:8;
> > > +	__u64 send_count:8;
> > > +	__u64 dist_acc_count:8;
> > > +	__u64 sbid_count:8;
> > > +	__u64 sync_count:8;
> > > +	__u64 inst_fetch_count:8;
> > > +	__u64 active_count:8;
> > > +	__u64 ex_id:3;
> > > +	__u64 end_flag:1;
> > > +	__u64 unused_bits:15;
> > > +	__u64 unused[6];
> > > +} __attribute__((packed));
> > > +
> > >  #if defined(__cplusplus)
> > >  }
> > >  #endif
> > > --
> > > 2.45.1
> > >
> >
> > --
> > Matt Roper
> > Graphics Software Engineer
> > Linux GPU Platform Enablement
> > Intel Corporation

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH v3 1/1] drm/xe/eustall: Add support for EU stall sampling
  2024-09-13  7:35         ` Ranjan, Joshua Santhosh
@ 2024-09-20 18:07           ` Harish Chegondi
  2024-10-02 17:14             ` Cabral, Matias A
  0 siblings, 1 reply; 20+ messages in thread
From: Harish Chegondi @ 2024-09-20 18:07 UTC (permalink / raw)
  To: Ranjan, Joshua Santhosh
  Cc: Dixit, Ashutosh, Roper, Matthew D, intel-xe@lists.freedesktop.org,
	Ausmus, James, Degrood, Felix J, Souza, Jose, Cabral, Matias A,
	Kumar, Shubham

On Fri, Sep 13, 2024 at 12:35:28AM -0700, Ranjan, Joshua Santhosh wrote:
> Hi 
> 
> Please find responses ([Santhosh]) inline.
> 
> -----Original Message-----
> From: Chegondi, Harish <harish.chegondi@intel.com> 
> Sent: Friday, September 13, 2024 7:24 AM
> To: Dixit, Ashutosh <ashutosh.dixit@intel.com>
> Cc: Roper, Matthew D <matthew.d.roper@intel.com>; intel-xe@lists.freedesktop.org; Ausmus, James <james.ausmus@intel.com>; Degrood, Felix J <felix.j.degrood@intel.com>; Souza, Jose <jose.souza@intel.com>; Cabral, Matias A <matias.a.cabral@intel.com>; Ranjan, Joshua Santhosh <joshua.santosh.ranjan@intel.com>
> Subject: Re: [PATCH v3 1/1] drm/xe/eustall: Add support for EU stall sampling
> 
> On Wed, Sep 11, 2024 at 04:21:12PM -0700, Dixit, Ashutosh wrote:
> > On Mon, 09 Sep 2024 17:09:14 -0700, Matt Roper wrote:
> > >
> > 
> > Hi Matt,
> > 
> > Some comments about the uapi below.
> > 
> > > > @@ -1694,6 +1696,138 @@ struct drm_xe_oa_stream_info {
> > > >	__u64 reserved[3];
> > > >  };
> > > >
> > > > +/**
> > > > + * enum drm_xe_eu_stall_property_id - EU stall data stream property ids.
> > > > + *
> > > > + * These properties are passed to the driver as a chain of
> > > > + * @drm_xe_ext_set_property structures with @property set to 
> > > > +these
> > > > + * properties' enums and @value set to the corresponding values 
> > > > +of these
> > > > + * properties. @drm_xe_user_extension base.name should be set to
> > > > + * @DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY.
> > > > + */
> > > > +enum drm_xe_eu_stall_property_id {
> > > > +#define DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY		0
> > > > +	/**
> > > > +	 * @DRM_XE_EU_STALL_PROP_BUF_SZ: Per DSS Memory Buffer Size.
> > > > +	 * Valid values are 128 KB, 256 KB, and 512 KB.
> > > > +	 */
> > > > +	DRM_XE_EU_STALL_PROP_BUF_SZ = 1,
> > >
> > > Does userspace really care about this being configurable?  Even if 
> > > we have a platform with XE_MAX_DSS_FUSE_BITS total XeCores, the 
> > > difference between the largest and smallest sizes here only saves 48MB of memory.
> > > The hardware makes this configurable, but is there actually an ask 
> > > to expose this through the uapi?  If not, I'd say we should just 
> > > always pick 512KB internally and keep things simple.
> > 
> > Agreed.
> > 
> > >
> > > > +
> > > > +	/**
> > > > +	 * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
> > > > +	 * in multiples of 251 cycles. Valid values are 1 to 7.
> > > > +	 * If the value is 1, sampling interval is 251 cycles.
> > > > +	 * If the value is 7, sampling interval is 7 x 251 cycles.
> > > > +	 */
> > > > +	DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
> > > > +
> > > > +	/**
> > > > +	 * @DRM_XE_EU_STALL_PROP_POLL_PERIOD: EU stall data
> > > > +	 * poll period in nanoseconds. should be at least 100000 ns.
> > > > +	 */
> > > > +	DRM_XE_EU_STALL_PROP_POLL_PERIOD,
> > > > +
> > > > +	/**
> > > > +	 * @DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT: Minimum number of
> > > > +	 * EU stall data rows to be present in the kernel buffer for
> > > > +	 * poll() to set POLLIN (data present).
> > > > +	 */
> > > > +	DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT,
> > > > +
> > > > +	/**
> > > > +	 * @DRM_XE_EU_STALL_PROP_GT_ID: GT ID of the GT on which
> > > > +	 * EU stall data will be captured.
> > > > +	 */
> > > > +	DRM_XE_EU_STALL_PROP_GT_ID,
> > >
> > > I mentioned above, but it feels like this should be an intrinsic 
> > > part of the API, not something coming in through an optional extension...
> > 
> > Not sure what "intrinsic part of the API" should be. EU Stall, OA etc. 
> > are now types of "observation streams" and there is no other 
> > opportunity in the observation stream interface for this kind of 
> > information. Also, gt_id is EU stall specific (e.g. OA uses oa_unit_id 
> > not gt_id) so it should come in as an EU Stall property.
> > 
> > Though question for Harish: do we really need this? What if we return 
> > data from all tiles/gt's in a single read() call? Since we have 
> > already determined subslice number is not interesting to UMD's for EU 
> > Stall data, maybe gt_id is similarly not interesting?
> User space folks said that they are interested in the EU stall data at the GT level. So if we decide to return stall data from all the GTs, we may have to append the GT ID to the data. I will seek feedback from the user space folks regarding this.
> 
> [Santhosh]  Yes. L0 allows Metric collection at a tile level granularity. 
> 
> Thanks
> Harish.
> > 
> > >
> > > > +
> > > > +	/**
> > > > +	 * @DRM_XE_EU_STALL_PROP_OPEN_DISABLED: A value of 1 will open
> > > > +	 * the EU stall data stream without enabling EU stall sampling.
> > > > +	 */
> > > > +	DRM_XE_EU_STALL_PROP_OPEN_DISABLED,
> > >
> > > Is there a reason not to make this one the default behavior?  Is 
> > > there really a benefit to auto-enabling on open that makes it worth 
> > > the extra API complexity to make this configurable?
> > 
> > I agree, this would be a good idea. But unfortunately this got in for 
> > OA (if I were doing OA now I would have taken Matt's suggestion). So 
> > we either
> > (a) keep it the same as OA for uniformity, or (b) document that EU 
> > stall streams have to be explicity enabled before read()'ing data.
> > 
> > >
> > > > +};
> > > > +
> > > > +/**
> > > > + * struct drm_xe_eu_stall_stream_info - EU stall stream info 
> > > > +returned from
> > > > + * @DRM_XE_OBSERVATION_IOCTL_INFO observation stream fd ioctl  */ 
> > > > +struct drm_xe_eu_stall_stream_info {
> > > > +	/** @extensions: Pointer to the first extension struct, if any */
> > > > +	__u64 extensions;
> > > > +
> > > > +	/** @record_size: size of each EU stall data record */
> > > > +	__u64 record_size;
> > > > +
> > > > +	/** @reserved: reserved for future use */
> > > > +	__u64 reserved[3];
> > > > +};
> > > > +
> > > > +/**
> > > > + * struct drm_xe_eu_stall_data_pvc - EU stall data format for PVC
> > >
> > > I thought there was an ask from one of the userspace teams that we 
> > > make the layout discoverable?  I.e., a runtime-queryable format 
> > > description that lists the counter type, size, and offset in the 
> > > record of each counter that has usable data in the records?  Did we 
> > > change directions on that?
> 
> [Santhosh] Yes. From L0, there was a request made to have a runtime-queryable format.
Yes, there was a request for a runtime-queryable format. But as per the
request, the driver would parse the data and would send only the
non-zero data to the user space. But as per the most recent discussion,
it was agreed that the driver would send all data it receives from the
HW without parsing/re-formatting the data as one bigger memcpy() would
be more performant than several smaller memcpy()s.

If the driver is sending all the HW data as-is, would it still help user
space to get runtime-queryable format from the driver ?

Thanks
Harish.

> 
> > 
> > My suggestion is to eliminate these struct's from the KMD uapi header. 
> > See my earlier response to Harish's patch.
> > 
> > Thanks.
> > --
> > Ashutosh
> > 
> > 
> > >
> > > > + *
> > > > + * Bits		Field
> > > > + * 0  to 28	IP (addr)
> > > > + * 29 to 36	active count
> > > > + * 37 to 44	other count
> > > > + * 45 to 52	control count
> > > > + * 53 to 60	pipestall count
> > > > + * 61 to 68	send count
> > > > + * 69 to 76	dist_acc count
> > > > + * 77 to 84	sbid count
> > > > + * 85 to 92	sync count
> > > > + * 93 to 100	inst_fetch count
> > > > + */
> > > > +struct drm_xe_eu_stall_data_pvc {
> > > > +	__u64 ip_addr:29;
> > > > +	__u64 active_count:8;
> > > > +	__u64 other_count:8;
> > > > +	__u64 control_count:8;
> > > > +	__u64 pipestall_count:8;
> > > > +	__u64 send_count:8;
> > > > +	__u64 dist_acc_count:8;
> > > > +	__u64 sbid_count:8;
> > > > +	__u64 sync_count:8;
> > > > +	__u64 inst_fetch_count:8;
> > > > +	__u64 unused_bits:27;
> > > > +	__u64 unused[6];
> > > > +} __attribute__((packed));
> > > > +
> > > > +/**
> > > > + * struct drm_xe_eu_stall_data_xe2 - EU stall data format for 
> > > > +LNL, BMG
> > > > + *
> > > > + * Bits		Field
> > > > + * 0  to 28	IP (addr)
> > > > + * 29 to 36	Tdr count
> > > > + * 37 to 44	other count
> > > > + * 45 to 52	control count
> > > > + * 53 to 60	pipestall count
> > > > + * 61 to 68	send count
> > > > + * 69 to 76	dist_acc count
> > > > + * 77 to 84	sbid count
> > > > + * 85 to 92	sync count
> > > > + * 93 to 100	inst_fetch count
> > > > + * 101 to 108	Active count
> > > > + * 109 to 111	Exid
> > > > + * 112		EndFlag (is always 1)
> > > > + */
> > > > +struct drm_xe_eu_stall_data_xe2 {
> > > > +	__u64 ip_addr:29;
> > > > +	__u64 tdr_count:8;
> > > > +	__u64 other_count:8;
> > > > +	__u64 control_count:8;
> > > > +	__u64 pipestall_count:8;
> > > > +	__u64 send_count:8;
> > > > +	__u64 dist_acc_count:8;
> > > > +	__u64 sbid_count:8;
> > > > +	__u64 sync_count:8;
> > > > +	__u64 inst_fetch_count:8;
> > > > +	__u64 active_count:8;
> > > > +	__u64 ex_id:3;
> > > > +	__u64 end_flag:1;
> > > > +	__u64 unused_bits:15;
> > > > +	__u64 unused[6];
> > > > +} __attribute__((packed));
> > > > +
> > > >  #if defined(__cplusplus)
> > > >  }
> > > >  #endif
> > > > --
> > > > 2.45.1
> > > >
> > >
> > > --
> > > Matt Roper
> > > Graphics Software Engineer
> > > Linux GPU Platform Enablement
> > > Intel Corporation

^ permalink raw reply	[flat|nested] 20+ messages in thread

* RE: [PATCH v3 1/1] drm/xe/eustall: Add support for EU stall sampling
  2024-09-20 18:07           ` Harish Chegondi
@ 2024-10-02 17:14             ` Cabral, Matias A
  0 siblings, 0 replies; 20+ messages in thread
From: Cabral, Matias A @ 2024-10-02 17:14 UTC (permalink / raw)
  To: Chegondi, Harish, Ranjan, Joshua Santhosh
  Cc: Dixit, Ashutosh, Roper, Matthew D, intel-xe@lists.freedesktop.org,
	Ausmus, James, Degrood, Felix J, Souza, Jose, Kumar, Shubham

Hi Harish, 

Any updates on the upstream PR? Can we expect xe-internal to be updated with the upstream uAPI during Q4 ? 

Thanks, 
_MAC

-----Original Message-----
From: Chegondi, Harish <harish.chegondi@intel.com> 
Sent: Friday, September 20, 2024 11:08 AM
To: Ranjan, Joshua Santhosh <joshua.santosh.ranjan@intel.com>
Cc: Dixit, Ashutosh <ashutosh.dixit@intel.com>; Roper, Matthew D <matthew.d.roper@intel.com>; intel-xe@lists.freedesktop.org; Ausmus, James <james.ausmus@intel.com>; Degrood, Felix J <felix.j.degrood@intel.com>; Souza, Jose <jose.souza@intel.com>; Cabral, Matias A <matias.a.cabral@intel.com>; Kumar, Shubham <shubham.kumar@intel.com>
Subject: Re: [PATCH v3 1/1] drm/xe/eustall: Add support for EU stall sampling

On Fri, Sep 13, 2024 at 12:35:28AM -0700, Ranjan, Joshua Santhosh wrote:
> Hi
> 
> Please find responses ([Santhosh]) inline.
> 
> -----Original Message-----
> From: Chegondi, Harish <harish.chegondi@intel.com>
> Sent: Friday, September 13, 2024 7:24 AM
> To: Dixit, Ashutosh <ashutosh.dixit@intel.com>
> Cc: Roper, Matthew D <matthew.d.roper@intel.com>; 
> intel-xe@lists.freedesktop.org; Ausmus, James 
> <james.ausmus@intel.com>; Degrood, Felix J 
> <felix.j.degrood@intel.com>; Souza, Jose <jose.souza@intel.com>; 
> Cabral, Matias A <matias.a.cabral@intel.com>; Ranjan, Joshua Santhosh 
> <joshua.santosh.ranjan@intel.com>
> Subject: Re: [PATCH v3 1/1] drm/xe/eustall: Add support for EU stall 
> sampling
> 
> On Wed, Sep 11, 2024 at 04:21:12PM -0700, Dixit, Ashutosh wrote:
> > On Mon, 09 Sep 2024 17:09:14 -0700, Matt Roper wrote:
> > >
> > 
> > Hi Matt,
> > 
> > Some comments about the uapi below.
> > 
> > > > @@ -1694,6 +1696,138 @@ struct drm_xe_oa_stream_info {
> > > >	__u64 reserved[3];
> > > >  };
> > > >
> > > > +/**
> > > > + * enum drm_xe_eu_stall_property_id - EU stall data stream property ids.
> > > > + *
> > > > + * These properties are passed to the driver as a chain of
> > > > + * @drm_xe_ext_set_property structures with @property set to 
> > > > +these
> > > > + * properties' enums and @value set to the corresponding values 
> > > > +of these
> > > > + * properties. @drm_xe_user_extension base.name should be set 
> > > > +to
> > > > + * @DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY.
> > > > + */
> > > > +enum drm_xe_eu_stall_property_id {
> > > > +#define DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY		0
> > > > +	/**
> > > > +	 * @DRM_XE_EU_STALL_PROP_BUF_SZ: Per DSS Memory Buffer Size.
> > > > +	 * Valid values are 128 KB, 256 KB, and 512 KB.
> > > > +	 */
> > > > +	DRM_XE_EU_STALL_PROP_BUF_SZ = 1,
> > >
> > > Does userspace really care about this being configurable?  Even if 
> > > we have a platform with XE_MAX_DSS_FUSE_BITS total XeCores, the 
> > > difference between the largest and smallest sizes here only saves 48MB of memory.
> > > The hardware makes this configurable, but is there actually an ask 
> > > to expose this through the uapi?  If not, I'd say we should just 
> > > always pick 512KB internally and keep things simple.
> > 
> > Agreed.
> > 
> > >
> > > > +
> > > > +	/**
> > > > +	 * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
> > > > +	 * in multiples of 251 cycles. Valid values are 1 to 7.
> > > > +	 * If the value is 1, sampling interval is 251 cycles.
> > > > +	 * If the value is 7, sampling interval is 7 x 251 cycles.
> > > > +	 */
> > > > +	DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
> > > > +
> > > > +	/**
> > > > +	 * @DRM_XE_EU_STALL_PROP_POLL_PERIOD: EU stall data
> > > > +	 * poll period in nanoseconds. should be at least 100000 ns.
> > > > +	 */
> > > > +	DRM_XE_EU_STALL_PROP_POLL_PERIOD,
> > > > +
> > > > +	/**
> > > > +	 * @DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT: Minimum number of
> > > > +	 * EU stall data rows to be present in the kernel buffer for
> > > > +	 * poll() to set POLLIN (data present).
> > > > +	 */
> > > > +	DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT,
> > > > +
> > > > +	/**
> > > > +	 * @DRM_XE_EU_STALL_PROP_GT_ID: GT ID of the GT on which
> > > > +	 * EU stall data will be captured.
> > > > +	 */
> > > > +	DRM_XE_EU_STALL_PROP_GT_ID,
> > >
> > > I mentioned above, but it feels like this should be an intrinsic 
> > > part of the API, not something coming in through an optional extension...
> > 
> > Not sure what "intrinsic part of the API" should be. EU Stall, OA etc. 
> > are now types of "observation streams" and there is no other 
> > opportunity in the observation stream interface for this kind of 
> > information. Also, gt_id is EU stall specific (e.g. OA uses 
> > oa_unit_id not gt_id) so it should come in as an EU Stall property.
> > 
> > Though question for Harish: do we really need this? What if we 
> > return data from all tiles/gt's in a single read() call? Since we 
> > have already determined subslice number is not interesting to UMD's 
> > for EU Stall data, maybe gt_id is similarly not interesting?
> User space folks said that they are interested in the EU stall data at the GT level. So if we decide to return stall data from all the GTs, we may have to append the GT ID to the data. I will seek feedback from the user space folks regarding this.
> 
> [Santhosh]  Yes. L0 allows Metric collection at a tile level granularity. 
> 
> Thanks
> Harish.
> > 
> > >
> > > > +
> > > > +	/**
> > > > +	 * @DRM_XE_EU_STALL_PROP_OPEN_DISABLED: A value of 1 will open
> > > > +	 * the EU stall data stream without enabling EU stall sampling.
> > > > +	 */
> > > > +	DRM_XE_EU_STALL_PROP_OPEN_DISABLED,
> > >
> > > Is there a reason not to make this one the default behavior?  Is 
> > > there really a benefit to auto-enabling on open that makes it 
> > > worth the extra API complexity to make this configurable?
> > 
> > I agree, this would be a good idea. But unfortunately this got in 
> > for OA (if I were doing OA now I would have taken Matt's 
> > suggestion). So we either
> > (a) keep it the same as OA for uniformity, or (b) document that EU 
> > stall streams have to be explicity enabled before read()'ing data.
> > 
> > >
> > > > +};
> > > > +
> > > > +/**
> > > > + * struct drm_xe_eu_stall_stream_info - EU stall stream info 
> > > > +returned from
> > > > + * @DRM_XE_OBSERVATION_IOCTL_INFO observation stream fd ioctl  
> > > > +*/ struct drm_xe_eu_stall_stream_info {
> > > > +	/** @extensions: Pointer to the first extension struct, if any */
> > > > +	__u64 extensions;
> > > > +
> > > > +	/** @record_size: size of each EU stall data record */
> > > > +	__u64 record_size;
> > > > +
> > > > +	/** @reserved: reserved for future use */
> > > > +	__u64 reserved[3];
> > > > +};
> > > > +
> > > > +/**
> > > > + * struct drm_xe_eu_stall_data_pvc - EU stall data format for 
> > > > +PVC
> > >
> > > I thought there was an ask from one of the userspace teams that we 
> > > make the layout discoverable?  I.e., a runtime-queryable format 
> > > description that lists the counter type, size, and offset in the 
> > > record of each counter that has usable data in the records?  Did 
> > > we change directions on that?
> 
> [Santhosh] Yes. From L0, there was a request made to have a runtime-queryable format.
Yes, there was a request for a runtime-queryable format. But as per the request, the driver would parse the data and would send only the non-zero data to the user space. But as per the most recent discussion, it was agreed that the driver would send all data it receives from the HW without parsing/re-formatting the data as one bigger memcpy() would be more performant than several smaller memcpy()s.

If the driver is sending all the HW data as-is, would it still help user space to get runtime-queryable format from the driver ?

Thanks
Harish.

> 
> > 
> > My suggestion is to eliminate these struct's from the KMD uapi header. 
> > See my earlier response to Harish's patch.
> > 
> > Thanks.
> > --
> > Ashutosh
> > 
> > 
> > >
> > > > + *
> > > > + * Bits		Field
> > > > + * 0  to 28	IP (addr)
> > > > + * 29 to 36	active count
> > > > + * 37 to 44	other count
> > > > + * 45 to 52	control count
> > > > + * 53 to 60	pipestall count
> > > > + * 61 to 68	send count
> > > > + * 69 to 76	dist_acc count
> > > > + * 77 to 84	sbid count
> > > > + * 85 to 92	sync count
> > > > + * 93 to 100	inst_fetch count
> > > > + */
> > > > +struct drm_xe_eu_stall_data_pvc {
> > > > +	__u64 ip_addr:29;
> > > > +	__u64 active_count:8;
> > > > +	__u64 other_count:8;
> > > > +	__u64 control_count:8;
> > > > +	__u64 pipestall_count:8;
> > > > +	__u64 send_count:8;
> > > > +	__u64 dist_acc_count:8;
> > > > +	__u64 sbid_count:8;
> > > > +	__u64 sync_count:8;
> > > > +	__u64 inst_fetch_count:8;
> > > > +	__u64 unused_bits:27;
> > > > +	__u64 unused[6];
> > > > +} __attribute__((packed));
> > > > +
> > > > +/**
> > > > + * struct drm_xe_eu_stall_data_xe2 - EU stall data format for 
> > > > +LNL, BMG
> > > > + *
> > > > + * Bits		Field
> > > > + * 0  to 28	IP (addr)
> > > > + * 29 to 36	Tdr count
> > > > + * 37 to 44	other count
> > > > + * 45 to 52	control count
> > > > + * 53 to 60	pipestall count
> > > > + * 61 to 68	send count
> > > > + * 69 to 76	dist_acc count
> > > > + * 77 to 84	sbid count
> > > > + * 85 to 92	sync count
> > > > + * 93 to 100	inst_fetch count
> > > > + * 101 to 108	Active count
> > > > + * 109 to 111	Exid
> > > > + * 112		EndFlag (is always 1)
> > > > + */
> > > > +struct drm_xe_eu_stall_data_xe2 {
> > > > +	__u64 ip_addr:29;
> > > > +	__u64 tdr_count:8;
> > > > +	__u64 other_count:8;
> > > > +	__u64 control_count:8;
> > > > +	__u64 pipestall_count:8;
> > > > +	__u64 send_count:8;
> > > > +	__u64 dist_acc_count:8;
> > > > +	__u64 sbid_count:8;
> > > > +	__u64 sync_count:8;
> > > > +	__u64 inst_fetch_count:8;
> > > > +	__u64 active_count:8;
> > > > +	__u64 ex_id:3;
> > > > +	__u64 end_flag:1;
> > > > +	__u64 unused_bits:15;
> > > > +	__u64 unused[6];
> > > > +} __attribute__((packed));
> > > > +
> > > >  #if defined(__cplusplus)
> > > >  }
> > > >  #endif
> > > > --
> > > > 2.45.1
> > > >
> > >
> > > --
> > > Matt Roper
> > > Graphics Software Engineer
> > > Linux GPU Platform Enablement
> > > Intel Corporation

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2024-10-02 17:14 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-09  7:36 [PATCH v3 0/1] Add support for EU stall sampling Harish Chegondi
2024-09-09  7:36 ` [PATCH v3 1/1] drm/xe/eustall: " Harish Chegondi
2024-09-09 19:27   ` Dixit, Ashutosh
2024-09-10  0:09   ` Matt Roper
2024-09-11 23:21     ` Dixit, Ashutosh
2024-09-13  1:53       ` Harish Chegondi
2024-09-13  7:35         ` Ranjan, Joshua Santhosh
2024-09-20 18:07           ` Harish Chegondi
2024-10-02 17:14             ` Cabral, Matias A
2024-09-19 14:44         ` Cabral, Matias A
2024-09-12 18:43     ` Harish Chegondi
2024-09-09  7:42 ` [PATCH v3 0/1] " Ranjan, Joshua Santhosh
2024-09-10  6:33 ` ✓ CI.Patch_applied: success for " Patchwork
2024-09-10  6:33 ` ✗ CI.checkpatch: warning " Patchwork
2024-09-10  6:34 ` ✓ CI.KUnit: success " Patchwork
2024-09-10  6:52 ` ✓ CI.Build: " Patchwork
2024-09-10  7:02 ` ✗ CI.Hooks: failure " Patchwork
2024-09-10  7:05 ` ✓ CI.checksparse: success " Patchwork
2024-09-10  7:26 ` ✓ CI.BAT: " Patchwork
2024-09-10  8:53 ` ✗ CI.FULL: failure " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).