* [PATCH v2 0/1] Add support for EU stall sampling
@ 2024-07-07 22:41 Ashutosh Dixit
2024-07-07 22:41 ` [PATCH v2 1/1] drm/xe/eustall: " Ashutosh Dixit
` (9 more replies)
0 siblings, 10 replies; 27+ messages in thread
From: Ashutosh Dixit @ 2024-07-07 22:41 UTC (permalink / raw)
To: intel-xe; +Cc: 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.
I am posting this patch as an RFC to get early feedback in the uAPI
while support for this feature is being added into Mesa. 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.
The EU stall data from the driver include a header with additional
information about the data that follows the header. The header
includes flags one of which indicate if data has been dropped has
been dropped by the hardware due to buffer being full. While read
returns the total bytes read, any data dropped by the hardware will
be indicated in the flags. One feedback received so far is to make
read return an error when data has been dropped by the hardware
instead of setting a flag in the header. One suggestion received
is to consider two FDs per EU stall data stream with one fd to read
data and other fd to pass any errors. please comment on this idea
that's not represented in the code
Thank You.
v2: Rename xe perf layer as xe observation layer
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 | 1005 ++++++++++++++++++++
drivers/gpu/drm/xe/xe_eustall_cntr.h | 62 ++
drivers/gpu/drm/xe/xe_gt.c | 3 +
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 | 4 +
drivers/gpu/drm/xe/xe_observation.c | 14 +
drivers/gpu/drm/xe/xe_trace.h | 35 +
include/uapi/drm/xe_drm.h | 77 ++
11 files changed, 1246 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.41.0
^ permalink raw reply [flat|nested] 27+ messages in thread
* [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-07-07 22:41 [PATCH v2 0/1] Add support for EU stall sampling Ashutosh Dixit
@ 2024-07-07 22:41 ` Ashutosh Dixit
2024-07-12 20:34 ` Souza, Jose
` (3 more replies)
2024-07-07 22:46 ` ✓ CI.Patch_applied: success for Add support for EU stall sampling (rev2) Patchwork
` (8 subsequent siblings)
9 siblings, 4 replies; 27+ messages in thread
From: Ashutosh Dixit @ 2024-07-07 22:41 UTC (permalink / raw)
To: intel-xe; +Cc: Harish Chegondi
From: Harish Chegondi <harish.chegondi@intel.com>
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
DRM_XE_OBSERVATION_IOCTL_ENABLE and DRM_XE_OBSERVATION_IOCTL_DISABLE
IOCTLs. User space can also call poll() to check for availability of
data. The data can be read with read(). EU stall data consists of header
and data pairs. The header format is defined in struct
drm_xe_eu_stall_data_header. 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 data, it simply drops data due
to unavailable buffer space. In that case hardware sets a bit in a
register. The driver sets a flag in the EU stall data header flags field
to let the user space know that the hardware has dropped data.
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 | 1005 ++++++++++++++++++++
drivers/gpu/drm/xe/xe_eustall_cntr.h | 62 ++
drivers/gpu/drm/xe/xe_gt.c | 3 +
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 | 4 +
drivers/gpu/drm/xe/xe_observation.c | 14 +
drivers/gpu/drm/xe/xe_trace.h | 35 +
include/uapi/drm/xe_drm.h | 77 ++
11 files changed, 1246 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 0eb0acc4f198..13d935ac40b3 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -54,6 +54,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..183638f8e1e2
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_eustall_cntr.c
@@ -0,0 +1,1005 @@
+// 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_gt_topology.h"
+#include "xe_eustall_cntr.h"
+#include "xe_force_wake.h"
+#include "regs/xe_gt_regs.h"
+
+#define CACHELINE_BYTES 64
+#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);
+}
+
+void xe_eustall_cntr_init(struct xe_gt *gt)
+{
+ mutex_init(>->eu_stall_cntr.lock);
+}
+
+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, int ext_number,
+ struct eu_stall_open_properties *props)
+{
+ u64 __user *address = u64_to_user_ptr(extension);
+ struct drm_xe_user_extension ext;
+ int err;
+ u32 idx;
+
+ if (XE_IOCTL_DBG(xe, ext_number >= DRM_XE_EU_STALL_PROP_MAX))
+ return -E2BIG;
+
+ 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, ++ext_number, 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_reg, 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;
+ 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 there has been an engine reset by GuC, and GuC doesn't restore
+ * the read and write pointer registers, the pointers will reset to 0.
+ * If so, update the cached read pointer.
+ */
+ if (unlikely((write_ptr < read_ptr) &&
+ ((read_ptr & buf_size) == (write_ptr & buf_size)))) {
+ read_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT1,
+ group, instance);
+ read_ptr = read_ptr_reg & XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
+ read_ptr <<= (6 - XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT);
+ read_ptr &= ((buf_size << 1) - 1);
+ dss_buf->read = read_ptr;
+ }
+ 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)
+ dss_buf->line_drop = true;
+ 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, u8 s, u8 ss)
+{
+ 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, s, ss);
+ 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,
+ u8 s, u8 ss)
+{
+ unsigned int dss_per_grp = gt_to_xe(gt)->info.platform == XE_PVC ? 8 : 4;
+ size_t size, buf_size = stream->per_dss_buf_size;
+ u16 flags = 0, subslice = (s * dss_per_grp) + ss;
+ struct drm_xe_eu_stall_data_header header;
+ 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;
+ bool line_drop = false;
+ int ret = 0;
+
+ /* 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[subslice];
+ mutex_lock(&dss_buf->lock);
+ dss_start_vaddr = dss_buf->vaddr;
+ read_ptr = dss_buf->read;
+ write_ptr = dss_buf->write;
+ line_drop = dss_buf->line_drop;
+ read_offset = read_ptr & (buf_size - 1);
+ write_offset = write_ptr & (buf_size - 1);
+ /*
+ * If there has been an engine reset by GuC, and GuC doesn't restore
+ * the read and write pointer registers, the pointers will reset to 0.
+ * If so, update the cached read pointer.
+ */
+ if (unlikely((write_ptr < read_ptr) &&
+ ((read_ptr & buf_size) == (write_ptr & buf_size)))) {
+ read_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT1,
+ s, ss);
+ read_ptr = read_ptr_reg & XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
+ read_ptr <<= (6 - XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT);
+ read_ptr &= ((buf_size << 1) - 1);
+ read_offset = read_ptr & (buf_size - 1);
+ dss_buf->read = read_ptr;
+ }
+
+ trace_xe_eu_stall_cntr_read(s, ss, 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 + sizeof(header)) > count) {
+ mutex_unlock(&dss_buf->lock);
+ return 0;
+ }
+
+ if (line_drop)
+ flags = XE_EU_STALL_FLAG_OVERFLOW_DROP;
+
+ /* Driver doesn't expose the number of C-slices to user space.
+ * A PVC configuration of 8 c-slices x 8 sub-slices will be
+ * exposed to the user space as 1 slice x 64 sub-slices.
+ */
+ header.subslice = subslice;
+ header.flags = flags;
+ header.record_size = CACHELINE_BYTES;
+ header.num_records = size / header.record_size;
+
+ if (copy_to_user((buf + *total_size), &header, sizeof(header))) {
+ mutex_unlock(&dss_buf->lock);
+ return -EFAULT;
+ }
+ *total_size += sizeof(header);
+
+ 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, s, ss);
+ trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_REPORT1.__reg).addr,
+ read_ptr_reg, sizeof(read_ptr_reg));
+ if (dss_buf->line_drop) {
+ clear_dropped_eviction_line_bit(gt, s, ss);
+ dss_buf->line_drop = false;
+ }
+ dss_buf->read = read_ptr;
+ mutex_unlock(&dss_buf->lock);
+ trace_xe_eu_stall_cntr_read(s, ss, read_ptr, write_ptr,
+ read_offset, write_offset, *total_size);
+ return ret;
+}
+
+/**
+ * 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;
+ int ret = 0, dss;
+
+ 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);
+ 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)
+{
+ struct xe_tile *tile = stream->gt->tile;
+ struct xe_gt *gt = stream->gt;
+ struct xe_bo *bo;
+ u32 size;
+ int ret = 0;
+ unsigned int last_dss;
+ xe_dss_mask_t all_dss;
+
+ 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.
+ */
+ last_dss = xe_dss_mask_last_dss(all_dss);
+ size = per_dss_buf_size * (last_dss + 1);
+
+ 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))
+ ret = PTR_ERR(bo);
+
+ stream->bo = bo;
+ stream->vaddr = bo->vmap.is_iomem ? bo->vmap.vaddr_iomem : bo->vmap.vaddr;
+
+ return ret;
+}
+
+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;
+ u32 reg_value;
+ int dss;
+
+ 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)
+{
+ 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);
+ if (ret)
+ return ret;
+
+ 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;
+ dss_buf->line_drop = false;
+ 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)
+ return -EIO;
+
+ 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(>->eu_stall_cntr.lock);
+ ret = xe_eu_stall_buf_read_locked(stream, file, buf, count, ppos);
+ mutex_unlock(>->eu_stall_cntr.lock);
+ } while (ret == -EAGAIN);
+ } else {
+ mutex_lock(>->eu_stall_cntr.lock);
+ ret = xe_eu_stall_buf_read_locked(stream, file, buf, count, ppos);
+ mutex_unlock(>->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(>->eu_stall_cntr.lock);
+ ret = xe_eu_stall_buf_poll_locked(stream, file, wait);
+ mutex_unlock(>->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_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;
+ }
+
+ 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(>->eu_stall_cntr.lock);
+ ret = xe_eu_stall_cntr_ioctl_locked(stream, cmd, arg);
+ mutex_unlock(>->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(>->eu_stall_cntr.lock);
+ xe_eu_stall_destroy_locked(stream);
+ kfree(stream);
+ gt->eu_stall_cntr.stream = NULL;
+ mutex_unlock(>->eu_stall_cntr.lock);
+
+ /* Release the reference the EU stall stream kept on the driver */
+ drm_dev_put(>->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;
+
+ bitmap_or(all_dss, gt->fuse_topo.g_dss_mask, gt->fuse_topo.c_dss_mask,
+ XE_MAX_DSS_FUSE_BITS);
+
+ 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;
+ }
+
+ tile_buf_size = props->eu_stall_buf_sz * (xe_dss_mask_last_dss(all_dss) + 1);
+ 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);
+ 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(>->tile->xe->drm);
+
+ return stream_fd;
+
+err_open:
+ free_eu_stall_cntr_buf(stream);
+err_alloc:
+ gt->eu_stall_cntr.stream = NULL;
+ 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, 0, &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(>->eu_stall_cntr.lock);
+ ret = xe_open_eu_stall_stream_locked(dev, &props, file, gt);
+ mutex_unlock(>->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..7a99b8c819d3
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_eustall_cntr.h
@@ -0,0 +1,62 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#ifndef __XE_EUSTALL_CNTR_H__
+#define __XE_EUSTALL_CNTR_H__
+
+#include <drm/drm_file.h>
+#include <drm/xe_drm.h>
+#include "regs/xe_eu_stall_regs.h"
+
+#define XE_MAX_DSS 128
+
+struct per_dss_buf {
+ u8 *vaddr;
+ u32 write;
+ u32 read;
+ bool line_drop;
+ /* 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 {
+ struct xe_bo *bo;
+ struct xe_gt *gt;
+
+ bool enabled;
+ bool pollin;
+ size_t per_dss_buf_size;
+ struct hrtimer poll_check_timer;
+ struct work_struct buf_check_work;
+ struct workqueue_struct *buf_check_wq;
+ wait_queue_head_t poll_wq;
+ u32 event_report_count;
+ u64 poll_period;
+
+ /**
+ * State of the EU stall counter buffer.
+ */
+ u8 *vaddr;
+ struct per_dss_buf dss_buf[XE_MAX_DSS];
+};
+
+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;
+};
+
+void 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 ce8994b808fe..74f4205a6d60 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -61,6 +61,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)
{
@@ -622,6 +623,8 @@ int xe_gt_init(struct xe_gt *gt)
xe_gt_record_user_engines(gt);
+ xe_eustall_cntr_init(gt);
+
return 0;
}
diff --git a/drivers/gpu/drm/xe/xe_gt_topology.c b/drivers/gpu/drm/xe/xe_gt_topology.c
index 25ff03ab8448..54a57179a53c 100644
--- a/drivers/gpu/drm/xe/xe_gt_topology.c
+++ b/drivers/gpu/drm/xe/xe_gt_topology.c
@@ -247,6 +247,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 6b5e0b45efb0..609db0154122 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -16,6 +16,7 @@
#include "xe_reg_sr_types.h"
#include "xe_sa_types.h"
#include "xe_uc_types.h"
+#include "xe_eustall_cntr.h"
struct xe_exec_queue_ops;
struct xe_migrate;
@@ -391,6 +392,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 fcb584b42a7d..5db9c589ce24 100644
--- a/drivers/gpu/drm/xe/xe_observation.c
+++ b/drivers/gpu/drm/xe/xe_observation.c
@@ -8,6 +8,7 @@
#include <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 09ca1ad057b0..ef532eae3f88 100644
--- a/drivers/gpu/drm/xe/xe_trace.h
+++ b/drivers/gpu/drm/xe/xe_trace.h
@@ -374,6 +374,41 @@ TRACE_EVENT(xe_reg_rw,
(u32)(__entry->val >> 32))
);
+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 19619d4952a8..343de700d10d 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -1387,6 +1387,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,
};
/**
@@ -1686,6 +1688,81 @@ 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,
+
+ DRM_XE_EU_STALL_PROP_MAX
+};
+
+/**
+ * struct drm_xe_eu_stall_data_header - EU stall data header.
+ * Header with additional information that the driver adds
+ * before EU stall data of each subslice during read().
+ */
+struct drm_xe_eu_stall_data_header {
+ /** @subslice: subslice number from which the following data
+ * has been captured.
+ */
+ __u16 subslice;
+ /** @flags: flags */
+ __u16 flags;
+/* EU stall data dropped by the HW due to memory buffer being full */
+#define XE_EU_STALL_FLAG_OVERFLOW_DROP (1 << 0)
+ /** @record_size: size of each EU stall data record */
+ __u16 record_size;
+ /** @num_records: number of records following the header */
+ __u16 num_records;
+ /** @reserved: Reserved */
+ __u16 reserved[4];
+};
+
#if defined(__cplusplus)
}
#endif
--
2.41.0
^ permalink raw reply related [flat|nested] 27+ messages in thread
* ✓ CI.Patch_applied: success for Add support for EU stall sampling (rev2)
2024-07-07 22:41 [PATCH v2 0/1] Add support for EU stall sampling Ashutosh Dixit
2024-07-07 22:41 ` [PATCH v2 1/1] drm/xe/eustall: " Ashutosh Dixit
@ 2024-07-07 22:46 ` Patchwork
2024-07-07 22:46 ` ✗ CI.checkpatch: warning " Patchwork
` (7 subsequent siblings)
9 siblings, 0 replies; 27+ messages in thread
From: Patchwork @ 2024-07-07 22:46 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
== Series Details ==
Series: Add support for EU stall sampling (rev2)
URL : https://patchwork.freedesktop.org/series/135559/
State : success
== Summary ==
=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: 70f1d41b827f drm-tip: 2024y-07m-07d-18h-38m-49s UTC integration manifest
=== git am output follows ===
Applying: drm/xe/eustall: Add support for EU stall sampling
^ permalink raw reply [flat|nested] 27+ messages in thread
* ✗ CI.checkpatch: warning for Add support for EU stall sampling (rev2)
2024-07-07 22:41 [PATCH v2 0/1] Add support for EU stall sampling Ashutosh Dixit
2024-07-07 22:41 ` [PATCH v2 1/1] drm/xe/eustall: " Ashutosh Dixit
2024-07-07 22:46 ` ✓ CI.Patch_applied: success for Add support for EU stall sampling (rev2) Patchwork
@ 2024-07-07 22:46 ` Patchwork
2024-07-07 22:47 ` ✓ CI.KUnit: success " Patchwork
` (6 subsequent siblings)
9 siblings, 0 replies; 27+ messages in thread
From: Patchwork @ 2024-07-07 22:46 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
== Series Details ==
Series: Add support for EU stall sampling (rev2)
URL : https://patchwork.freedesktop.org/series/135559/
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
51ce9f6cd981d42d7467409d7dbc559a450abc1e
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit dc4e0d1d5ac604330391460728a91e9e586e4061
Author: Harish Chegondi <harish.chegondi@intel.com>
Date: Sun Jul 7 15:41:41 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
DRM_XE_OBSERVATION_IOCTL_ENABLE and DRM_XE_OBSERVATION_IOCTL_DISABLE
IOCTLs. User space can also call poll() to check for availability of
data. The data can be read with read(). EU stall data consists of header
and data pairs. The header format is defined in struct
drm_xe_eu_stall_data_header. 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 data, it simply drops data due
to unavailable buffer space. In that case hardware sets a bit in a
register. The driver sets a flag in the EU stall data header flags field
to let the user space know that the hardware has dropped data.
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 70f1d41b827fa9d1275748e655912f991635f595 drm-intel
dc4e0d1d5ac6 drm/xe/eustall: Add support for EU stall sampling
Traceback (most recent call last):
File "scripts/spdxcheck.py", line 6, in <module>
from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
Traceback (most recent call last):
File "scripts/spdxcheck.py", line 6, in <module>
from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
Traceback (most recent call last):
File "scripts/spdxcheck.py", line 6, in <module>
from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
-:54: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#54:
new file mode 100644
-:355: CHECK:UNNECESSARY_PARENTHESES: Unnecessary parentheses around 'write_ptr < read_ptr'
#355: FILE: drivers/gpu/drm/xe/xe_eustall_cntr.c:258:
+ if (unlikely((write_ptr < read_ptr) &&
+ ((read_ptr & buf_size) == (write_ptr & buf_size)))) {
-:364: CHECK:UNNECESSARY_PARENTHESES: Unnecessary parentheses around 'write_ptr != read_ptr'
#364: FILE: drivers/gpu/drm/xe/xe_eustall_cntr.c:267:
+ if ((write_ptr != read_ptr) && !min_data_present) {
-:439: CHECK:UNNECESSARY_PARENTHESES: Unnecessary parentheses around 'write_ptr < read_ptr'
#439: FILE: drivers/gpu/drm/xe/xe_eustall_cntr.c:342:
+ if (unlikely((write_ptr < read_ptr) &&
+ ((read_ptr & buf_size) == (write_ptr & buf_size)))) {
-:1094: WARNING:QUOTED_WHITESPACE_BEFORE_NEWLINE: unnecessary whitespace before a quoted newline
#1094: FILE: drivers/gpu/drm/xe/xe_eustall_cntr.c:997:
+ drm_dbg(&xe->drm, "Invalid GT for EU stall sampling \n");
-:1303: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#1303: FILE: drivers/gpu/drm/xe/xe_trace.h:385:
+ TP_STRUCT__entry(
-:1313: CHECK:OPEN_ENDED_LINE: Lines should not end with a '('
#1313: FILE: drivers/gpu/drm/xe/xe_trace.h:395:
+ TP_fast_assign(
total: 0 errors, 2 warnings, 5 checks, 1324 lines checked
^ permalink raw reply [flat|nested] 27+ messages in thread
* ✓ CI.KUnit: success for Add support for EU stall sampling (rev2)
2024-07-07 22:41 [PATCH v2 0/1] Add support for EU stall sampling Ashutosh Dixit
` (2 preceding siblings ...)
2024-07-07 22:46 ` ✗ CI.checkpatch: warning " Patchwork
@ 2024-07-07 22:47 ` Patchwork
2024-07-07 22:59 ` ✓ CI.Build: " Patchwork
` (5 subsequent siblings)
9 siblings, 0 replies; 27+ messages in thread
From: Patchwork @ 2024-07-07 22:47 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
== Series Details ==
Series: Add support for EU stall sampling (rev2)
URL : https://patchwork.freedesktop.org/series/135559/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[22:46:49] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[22:46:53] 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)
| ^~~~~~~~~~~~~~~~~
[22:47:19] Starting KUnit Kernel (1/1)...
[22:47:19] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[22:47:19] =================== guc_dbm (7 subtests) ===================
[22:47:19] [PASSED] test_empty
[22:47:19] [PASSED] test_default
[22:47:19] ======================== test_size ========================
[22:47:19] [PASSED] 4
[22:47:19] [PASSED] 8
[22:47:19] [PASSED] 32
[22:47:19] [PASSED] 256
[22:47:19] ==================== [PASSED] test_size ====================
[22:47:19] ======================= test_reuse ========================
[22:47:19] [PASSED] 4
[22:47:19] [PASSED] 8
[22:47:19] [PASSED] 32
[22:47:19] [PASSED] 256
[22:47:19] =================== [PASSED] test_reuse ====================
[22:47:19] =================== test_range_overlap ====================
[22:47:19] [PASSED] 4
[22:47:19] [PASSED] 8
[22:47:19] [PASSED] 32
[22:47:19] [PASSED] 256
[22:47:19] =============== [PASSED] test_range_overlap ================
[22:47:19] =================== test_range_compact ====================
[22:47:19] [PASSED] 4
[22:47:19] [PASSED] 8
[22:47:19] [PASSED] 32
[22:47:19] [PASSED] 256
[22:47:19] =============== [PASSED] test_range_compact ================
[22:47:19] ==================== test_range_spare =====================
[22:47:19] [PASSED] 4
[22:47:19] [PASSED] 8
[22:47:19] [PASSED] 32
[22:47:19] [PASSED] 256
[22:47:19] ================ [PASSED] test_range_spare =================
[22:47:19] ===================== [PASSED] guc_dbm =====================
[22:47:19] =================== guc_idm (6 subtests) ===================
[22:47:19] [PASSED] bad_init
[22:47:19] [PASSED] no_init
[22:47:19] [PASSED] init_fini
[22:47:19] [PASSED] check_used
[22:47:19] [PASSED] check_quota
[22:47:19] [PASSED] check_all
[22:47:19] ===================== [PASSED] guc_idm =====================
[22:47:19] ================== no_relay (3 subtests) ===================
[22:47:19] [PASSED] xe_drops_guc2pf_if_not_ready
[22:47:19] [PASSED] xe_drops_guc2vf_if_not_ready
[22:47:19] [PASSED] xe_rejects_send_if_not_ready
[22:47:19] ==================== [PASSED] no_relay =====================
[22:47:19] ================== pf_relay (14 subtests) ==================
[22:47:19] [PASSED] pf_rejects_guc2pf_too_short
[22:47:19] [PASSED] pf_rejects_guc2pf_too_long
[22:47:19] [PASSED] pf_rejects_guc2pf_no_payload
[22:47:19] [PASSED] pf_fails_no_payload
[22:47:19] [PASSED] pf_fails_bad_origin
[22:47:19] [PASSED] pf_fails_bad_type
[22:47:19] [PASSED] pf_txn_reports_error
[22:47:19] [PASSED] pf_txn_sends_pf2guc
[22:47:19] [PASSED] pf_sends_pf2guc
[22:47:19] [SKIPPED] pf_loopback_nop
[22:47:19] [SKIPPED] pf_loopback_echo
[22:47:19] [SKIPPED] pf_loopback_fail
[22:47:19] [SKIPPED] pf_loopback_busy
[22:47:19] [SKIPPED] pf_loopback_retry
[22:47:19] ==================== [PASSED] pf_relay =====================
[22:47:19] ================== vf_relay (3 subtests) ===================
[22:47:19] [PASSED] vf_rejects_guc2vf_too_short
[22:47:19] [PASSED] vf_rejects_guc2vf_too_long
[22:47:19] [PASSED] vf_rejects_guc2vf_no_payload
[22:47:19] ==================== [PASSED] vf_relay =====================
[22:47:19] ================= pf_service (11 subtests) =================
[22:47:19] [PASSED] pf_negotiate_any
[22:47:19] [PASSED] pf_negotiate_base_match
[22:47:19] [PASSED] pf_negotiate_base_newer
[22:47:19] [PASSED] pf_negotiate_base_next
[22:47:19] [SKIPPED] pf_negotiate_base_older
[22:47:19] [PASSED] pf_negotiate_base_prev
[22:47:19] [PASSED] pf_negotiate_latest_match
[22:47:19] [PASSED] pf_negotiate_latest_newer
[22:47:19] [PASSED] pf_negotiate_latest_next
[22:47:19] [SKIPPED] pf_negotiate_latest_older
[22:47:19] [SKIPPED] pf_negotiate_latest_prev
[22:47:19] =================== [PASSED] pf_service ====================
[22:47:19] ===================== lmtt (1 subtest) =====================
[22:47:19] ======================== test_ops =========================
[22:47:19] [PASSED] 2-level
[22:47:19] [PASSED] multi-level
[22:47:19] ==================== [PASSED] test_ops =====================
[22:47:19] ====================== [PASSED] lmtt =======================
[22:47:19] ==================== xe_bo (2 subtests) ====================
[22:47:19] [SKIPPED] xe_ccs_migrate_kunit
[22:47:19] [SKIPPED] xe_bo_evict_kunit
[22:47:19] ===================== [SKIPPED] xe_bo ======================
[22:47:19] ================== xe_dma_buf (1 subtest) ==================
[22:47:19] [SKIPPED] xe_dma_buf_kunit
[22:47:19] =================== [SKIPPED] xe_dma_buf ===================
[22:47:19] ================== xe_migrate (1 subtest) ==================
[22:47:19] [SKIPPED] xe_migrate_sanity_kunit
[22:47:19] =================== [SKIPPED] xe_migrate ===================
[22:47:19] =================== xe_mocs (2 subtests) ===================
[22:47:19] [SKIPPED] xe_live_mocs_kernel_kunit
[22:47:19] [SKIPPED] xe_live_mocs_reset_kunit
[22:47:19] ==================== [SKIPPED] xe_mocs =====================
[22:47:19] ==================== args (11 subtests) ====================
[22:47:19] [PASSED] count_args_test
[22:47:19] [PASSED] call_args_example
[22:47:19] [PASSED] call_args_test
[22:47:19] [PASSED] drop_first_arg_example
[22:47:19] [PASSED] drop_first_arg_test
[22:47:19] [PASSED] first_arg_example
[22:47:19] [PASSED] first_arg_test
[22:47:19] [PASSED] last_arg_example
[22:47:19] [PASSED] last_arg_test
[22:47:19] [PASSED] pick_arg_example
[22:47:19] [PASSED] sep_comma_example
[22:47:19] ====================== [PASSED] args =======================
[22:47:19] =================== xe_pci (2 subtests) ====================
[22:47:19] [PASSED] xe_gmdid_graphics_ip
[22:47:19] [PASSED] xe_gmdid_media_ip
[22:47:19] ===================== [PASSED] xe_pci ======================
[22:47:19] ==================== xe_rtp (1 subtest) ====================
[22:47:19] ================== xe_rtp_process_tests ===================
[22:47:19] [PASSED] coalesce-same-reg
[22:47:19] [PASSED] no-match-no-add
[22:47:19] [PASSED] match-or
[22:47:19] [PASSED] match-or-xfail
[22:47:19] [PASSED] no-match-no-add-multiple-rules
[22:47:19] [PASSED] two-regs-two-entries
[22:47:19] [PASSED] clr-one-set-other
[22:47:19] [PASSED] set-field
[22:47:19] [PASSED] conflict-duplicate
[22:47:19] [PASSED] conflict-not-disjoint
[22:47:19] [PASSED] conflict-reg-type
stty: 'standard input': Inappropriate ioctl for device
[22:47:19] ============== [PASSED] xe_rtp_process_tests ===============
[22:47:19] ===================== [PASSED] xe_rtp ======================
[22:47:19] ==================== xe_wa (1 subtest) =====================
[22:47:19] ======================== xe_wa_gt =========================
[22:47:19] [PASSED] TIGERLAKE (B0)
[22:47:19] [PASSED] DG1 (A0)
[22:47:19] [PASSED] DG1 (B0)
[22:47:19] [PASSED] ALDERLAKE_S (A0)
[22:47:19] [PASSED] ALDERLAKE_S (B0)
[22:47:19] [PASSED] ALDERLAKE_S (C0)
[22:47:19] [PASSED] ALDERLAKE_S (D0)
[22:47:19] [PASSED] ALDERLAKE_P (A0)
[22:47:19] [PASSED] ALDERLAKE_P (B0)
[22:47:19] [PASSED] ALDERLAKE_P (C0)
[22:47:19] [PASSED] ALDERLAKE_S_RPLS (D0)
[22:47:19] [PASSED] ALDERLAKE_P_RPLU (E0)
[22:47:19] [PASSED] DG2_G10 (C0)
[22:47:19] [PASSED] DG2_G11 (B1)
[22:47:19] [PASSED] DG2_G12 (A1)
[22:47:19] [PASSED] METEORLAKE (g:A0, m:A0)
[22:47:19] [PASSED] METEORLAKE (g:A0, m:A0)
[22:47:19] [PASSED] METEORLAKE (g:A0, m:A0)
[22:47:19] [PASSED] LUNARLAKE (g:A0, m:A0)
[22:47:19] [PASSED] LUNARLAKE (g:B0, m:A0)
[22:47:19] ==================== [PASSED] xe_wa_gt =====================
[22:47:19] ====================== [PASSED] xe_wa ======================
[22:47:19] ============================================================
[22:47:19] Testing complete. Ran 111 tests: passed: 97, skipped: 14
[22:47:19] Elapsed time: 29.983s total, 4.251s configuring, 25.462s building, 0.221s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[22:47:19] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[22:47:21] 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)
| ^~~~~~~~~~~~~~~~~
[22:47:42] Starting KUnit Kernel (1/1)...
[22:47:42] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[22:47:43] ============ drm_test_pick_cmdline (2 subtests) ============
[22:47:43] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[22:47:43] =============== drm_test_pick_cmdline_named ===============
[22:47:43] [PASSED] NTSC
[22:47:43] [PASSED] NTSC-J
[22:47:43] [PASSED] PAL
[22:47:43] [PASSED] PAL-M
[22:47:43] =========== [PASSED] drm_test_pick_cmdline_named ===========
[22:47:43] ============== [PASSED] drm_test_pick_cmdline ==============
[22:47:43] ================== drm_buddy (7 subtests) ==================
[22:47:43] [PASSED] drm_test_buddy_alloc_limit
[22:47:43] [PASSED] drm_test_buddy_alloc_optimistic
[22:47:43] [PASSED] drm_test_buddy_alloc_pessimistic
[22:47:43] [PASSED] drm_test_buddy_alloc_pathological
[22:47:43] [PASSED] drm_test_buddy_alloc_contiguous
[22:47:43] [PASSED] drm_test_buddy_alloc_clear
[22:47:43] [PASSED] drm_test_buddy_alloc_range_bias
[22:47:43] ==================== [PASSED] drm_buddy ====================
[22:47:43] ============= drm_cmdline_parser (40 subtests) =============
[22:47:43] [PASSED] drm_test_cmdline_force_d_only
[22:47:43] [PASSED] drm_test_cmdline_force_D_only_dvi
[22:47:43] [PASSED] drm_test_cmdline_force_D_only_hdmi
[22:47:43] [PASSED] drm_test_cmdline_force_D_only_not_digital
[22:47:43] [PASSED] drm_test_cmdline_force_e_only
[22:47:43] [PASSED] drm_test_cmdline_res
[22:47:43] [PASSED] drm_test_cmdline_res_vesa
[22:47:43] [PASSED] drm_test_cmdline_res_vesa_rblank
[22:47:43] [PASSED] drm_test_cmdline_res_rblank
[22:47:43] [PASSED] drm_test_cmdline_res_bpp
[22:47:43] [PASSED] drm_test_cmdline_res_refresh
[22:47:43] [PASSED] drm_test_cmdline_res_bpp_refresh
[22:47:43] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[22:47:43] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[22:47:43] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[22:47:43] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[22:47:43] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[22:47:43] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[22:47:43] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[22:47:43] [PASSED] drm_test_cmdline_res_margins_force_on
[22:47:43] [PASSED] drm_test_cmdline_res_vesa_margins
[22:47:43] [PASSED] drm_test_cmdline_name
[22:47:43] [PASSED] drm_test_cmdline_name_bpp
[22:47:43] [PASSED] drm_test_cmdline_name_option
[22:47:43] [PASSED] drm_test_cmdline_name_bpp_option
[22:47:43] [PASSED] drm_test_cmdline_rotate_0
[22:47:43] [PASSED] drm_test_cmdline_rotate_90
[22:47:43] [PASSED] drm_test_cmdline_rotate_180
[22:47:43] [PASSED] drm_test_cmdline_rotate_270
[22:47:43] [PASSED] drm_test_cmdline_hmirror
[22:47:43] [PASSED] drm_test_cmdline_vmirror
[22:47:43] [PASSED] drm_test_cmdline_margin_options
[22:47:43] [PASSED] drm_test_cmdline_multiple_options
[22:47:43] [PASSED] drm_test_cmdline_bpp_extra_and_option
[22:47:43] [PASSED] drm_test_cmdline_extra_and_option
[22:47:43] [PASSED] drm_test_cmdline_freestanding_options
[22:47:43] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[22:47:43] [PASSED] drm_test_cmdline_panel_orientation
[22:47:43] ================ drm_test_cmdline_invalid =================
[22:47:43] [PASSED] margin_only
[22:47:43] [PASSED] interlace_only
[22:47:43] [PASSED] res_missing_x
[22:47:43] [PASSED] res_missing_y
[22:47:43] [PASSED] res_bad_y
[22:47:43] [PASSED] res_missing_y_bpp
[22:47:43] [PASSED] res_bad_bpp
[22:47:43] [PASSED] res_bad_refresh
[22:47:43] [PASSED] res_bpp_refresh_force_on_off
[22:47:43] [PASSED] res_invalid_mode
[22:47:43] [PASSED] res_bpp_wrong_place_mode
[22:47:43] [PASSED] name_bpp_refresh
[22:47:43] [PASSED] name_refresh
[22:47:43] [PASSED] name_refresh_wrong_mode
[22:47:43] [PASSED] name_refresh_invalid_mode
[22:47:43] [PASSED] rotate_multiple
[22:47:43] [PASSED] rotate_invalid_val
[22:47:43] [PASSED] rotate_truncated
[22:47:43] [PASSED] invalid_option
[22:47:43] [PASSED] invalid_tv_option
[22:47:43] [PASSED] truncated_tv_option
[22:47:43] ============ [PASSED] drm_test_cmdline_invalid =============
[22:47:43] =============== drm_test_cmdline_tv_options ===============
[22:47:43] [PASSED] NTSC
[22:47:43] [PASSED] NTSC_443
[22:47:43] [PASSED] NTSC_J
[22:47:43] [PASSED] PAL
[22:47:43] [PASSED] PAL_M
[22:47:43] [PASSED] PAL_N
[22:47:43] [PASSED] SECAM
[22:47:43] [PASSED] MONO_525
[22:47:43] [PASSED] MONO_625
[22:47:43] =========== [PASSED] drm_test_cmdline_tv_options ===========
[22:47:43] =============== [PASSED] drm_cmdline_parser ================
[22:47:43] ========== drmm_connector_hdmi_init (19 subtests) ==========
[22:47:43] [PASSED] drm_test_connector_hdmi_init_valid
[22:47:43] [PASSED] drm_test_connector_hdmi_init_bpc_8
[22:47:43] [PASSED] drm_test_connector_hdmi_init_bpc_10
[22:47:43] [PASSED] drm_test_connector_hdmi_init_bpc_12
[22:47:43] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[22:47:43] [PASSED] drm_test_connector_hdmi_init_bpc_null
[22:47:43] [PASSED] drm_test_connector_hdmi_init_formats_empty
[22:47:43] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[22:47:43] [PASSED] drm_test_connector_hdmi_init_null_ddc
[22:47:43] [PASSED] drm_test_connector_hdmi_init_null_product
[22:47:43] [PASSED] drm_test_connector_hdmi_init_null_vendor
[22:47:43] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[22:47:43] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[22:47:43] [PASSED] drm_test_connector_hdmi_init_product_valid
[22:47:43] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[22:47:43] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[22:47:43] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[22:47:43] ========= drm_test_connector_hdmi_init_type_valid =========
[22:47:43] [PASSED] HDMI-A
[22:47:43] [PASSED] HDMI-B
[22:47:43] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[22:47:43] ======== drm_test_connector_hdmi_init_type_invalid ========
[22:47:43] [PASSED] Unknown
[22:47:43] [PASSED] VGA
[22:47:43] [PASSED] DVI-I
[22:47:43] [PASSED] DVI-D
[22:47:43] [PASSED] DVI-A
[22:47:43] [PASSED] Composite
[22:47:43] [PASSED] SVIDEO
[22:47:43] [PASSED] LVDS
[22:47:43] [PASSED] Component
[22:47:43] [PASSED] DIN
[22:47:43] [PASSED] DP
[22:47:43] [PASSED] TV
[22:47:43] [PASSED] eDP
[22:47:43] [PASSED] Virtual
[22:47:43] [PASSED] DSI
[22:47:43] [PASSED] DPI
[22:47:43] [PASSED] Writeback
[22:47:43] [PASSED] SPI
[22:47:43] [PASSED] USB
[22:47:43] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[22:47:43] ============ [PASSED] drmm_connector_hdmi_init =============
[22:47:43] ============= drmm_connector_init (3 subtests) =============
[22:47:43] [PASSED] drm_test_drmm_connector_init
[22:47:43] [PASSED] drm_test_drmm_connector_init_null_ddc
[22:47:43] ========= drm_test_drmm_connector_init_type_valid =========
[22:47:43] [PASSED] Unknown
[22:47:43] [PASSED] VGA
[22:47:43] [PASSED] DVI-I
[22:47:43] [PASSED] DVI-D
[22:47:43] [PASSED] DVI-A
[22:47:43] [PASSED] Composite
[22:47:43] [PASSED] SVIDEO
[22:47:43] [PASSED] LVDS
[22:47:43] [PASSED] Component
[22:47:43] [PASSED] DIN
[22:47:43] [PASSED] DP
[22:47:43] [PASSED] HDMI-A
[22:47:43] [PASSED] HDMI-B
[22:47:43] [PASSED] TV
[22:47:43] [PASSED] eDP
[22:47:43] [PASSED] Virtual
[22:47:43] [PASSED] DSI
[22:47:43] [PASSED] DPI
[22:47:43] [PASSED] Writeback
[22:47:43] [PASSED] SPI
[22:47:43] [PASSED] USB
[22:47:43] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[22:47:43] =============== [PASSED] drmm_connector_init ===============
[22:47:43] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[22:47:43] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[22:47:43] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[22:47:43] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[22:47:43] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[22:47:43] ========== drm_test_get_tv_mode_from_name_valid ===========
[22:47:43] [PASSED] NTSC
[22:47:43] [PASSED] NTSC-443
[22:47:43] [PASSED] NTSC-J
[22:47:43] [PASSED] PAL
[22:47:43] [PASSED] PAL-M
[22:47:43] [PASSED] PAL-N
[22:47:43] [PASSED] SECAM
[22:47:43] [PASSED] Mono
[22:47:43] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[22:47:43] [PASSED] drm_test_get_tv_mode_from_name_truncated
[22:47:43] ============ [PASSED] drm_get_tv_mode_from_name ============
[22:47:43] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[22:47:43] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[22:47:43] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[22:47:43] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[22:47:43] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[22:47:43] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[22:47:43] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[22:47:43] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[22:47:43] [PASSED] VIC 96
[22:47:43] [PASSED] VIC 97
[22:47:43] [PASSED] VIC 101
[22:47:43] [PASSED] VIC 102
[22:47:43] [PASSED] VIC 106
[22:47:43] [PASSED] VIC 107
[22:47:43] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[22:47:43] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[22:47:43] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[22:47:43] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[22:47:43] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[22:47:43] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[22:47:43] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[22:47:43] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[22:47:43] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[22:47:43] [PASSED] Automatic
[22:47:43] [PASSED] Full
[22:47:43] [PASSED] Limited 16:235
[22:47:43] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[22:47:43] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[22:47:43] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[22:47:43] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[22:47:43] === drm_test_drm_hdmi_connector_get_output_format_name ====
[22:47:43] [PASSED] RGB
[22:47:43] [PASSED] YUV 4:2:0
[22:47:43] [PASSED] YUV 4:2:2
[22:47:43] [PASSED] YUV 4:4:4
[22:47:43] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[22:47:43] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[22:47:43] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[22:47:43] ============= drm_damage_helper (21 subtests) ==============
[22:47:43] [PASSED] drm_test_damage_iter_no_damage
[22:47:43] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[22:47:43] [PASSED] drm_test_damage_iter_no_damage_src_moved
[22:47:43] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[22:47:43] [PASSED] drm_test_damage_iter_no_damage_not_visible
[22:47:43] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[22:47:43] [PASSED] drm_test_damage_iter_no_damage_no_fb
[22:47:43] [PASSED] drm_test_damage_iter_simple_damage
[22:47:43] [PASSED] drm_test_damage_iter_single_damage
[22:47:43] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[22:47:43] [PASSED] drm_test_damage_iter_single_damage_outside_src
[22:47:43] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[22:47:43] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[22:47:43] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[22:47:43] [PASSED] drm_test_damage_iter_single_damage_src_moved
[22:47:43] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[22:47:43] [PASSED] drm_test_damage_iter_damage
[22:47:43] [PASSED] drm_test_damage_iter_damage_one_intersect
[22:47:43] [PASSED] drm_test_damage_iter_damage_one_outside
[22:47:43] [PASSED] drm_test_damage_iter_damage_src_moved
[22:47:43] [PASSED] drm_test_damage_iter_damage_not_visible
[22:47:43] ================ [PASSED] drm_damage_helper ================
[22:47:43] ============== drm_dp_mst_helper (3 subtests) ==============
[22:47:43] ============== drm_test_dp_mst_calc_pbn_mode ==============
[22:47:43] [PASSED] Clock 154000 BPP 30 DSC disabled
[22:47:43] [PASSED] Clock 234000 BPP 30 DSC disabled
[22:47:43] [PASSED] Clock 297000 BPP 24 DSC disabled
[22:47:43] [PASSED] Clock 332880 BPP 24 DSC enabled
[22:47:43] [PASSED] Clock 324540 BPP 24 DSC enabled
[22:47:43] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[22:47:43] ============== drm_test_dp_mst_calc_pbn_div ===============
[22:47:43] [PASSED] Link rate 2000000 lane count 4
[22:47:43] [PASSED] Link rate 2000000 lane count 2
[22:47:43] [PASSED] Link rate 2000000 lane count 1
[22:47:43] [PASSED] Link rate 1350000 lane count 4
[22:47:43] [PASSED] Link rate 1350000 lane count 2
[22:47:43] [PASSED] Link rate 1350000 lane count 1
[22:47:43] [PASSED] Link rate 1000000 lane count 4
[22:47:43] [PASSED] Link rate 1000000 lane count 2
[22:47:43] [PASSED] Link rate 1000000 lane count 1
[22:47:43] [PASSED] Link rate 810000 lane count 4
[22:47:43] [PASSED] Link rate 810000 lane count 2
[22:47:43] [PASSED] Link rate 810000 lane count 1
[22:47:43] [PASSED] Link rate 540000 lane count 4
[22:47:43] [PASSED] Link rate 540000 lane count 2
[22:47:43] [PASSED] Link rate 540000 lane count 1
[22:47:43] [PASSED] Link rate 270000 lane count 4
[22:47:43] [PASSED] Link rate 270000 lane count 2
[22:47:43] [PASSED] Link rate 270000 lane count 1
[22:47:43] [PASSED] Link rate 162000 lane count 4
[22:47:43] [PASSED] Link rate 162000 lane count 2
[22:47:43] [PASSED] Link rate 162000 lane count 1
[22:47:43] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[22:47:43] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[22:47:43] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[22:47:43] [PASSED] DP_POWER_UP_PHY with port number
[22:47:43] [PASSED] DP_POWER_DOWN_PHY with port number
[22:47:43] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[22:47:43] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[22:47:43] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[22:47:43] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[22:47:43] [PASSED] DP_QUERY_PAYLOAD with port number
[22:47:43] [PASSED] DP_QUERY_PAYLOAD with VCPI
[22:47:43] [PASSED] DP_REMOTE_DPCD_READ with port number
[22:47:43] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[22:47:43] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[22:47:43] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[22:47:43] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[22:47:43] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[22:47:43] [PASSED] DP_REMOTE_I2C_READ with port number
[22:47:43] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[22:47:43] [PASSED] DP_REMOTE_I2C_READ with transactions array
[22:47:43] [PASSED] DP_REMOTE_I2C_WRITE with port number
[22:47:43] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[22:47:43] [PASSED] DP_REMOTE_I2C_WRITE with data array
[22:47:43] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[22:47:43] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[22:47:43] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[22:47:43] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[22:47:43] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[22:47:43] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[22:47:43] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[22:47:43] ================ [PASSED] drm_dp_mst_helper ================
[22:47:43] ================== drm_exec (7 subtests) ===================
[22:47:43] [PASSED] sanitycheck
[22:47:43] [PASSED] test_lock
[22:47:43] [PASSED] test_lock_unlock
[22:47:43] [PASSED] test_duplicates
[22:47:43] [PASSED] test_prepare
[22:47:43] [PASSED] test_prepare_array
[22:47:43] [PASSED] test_multiple_loops
[22:47:43] ==================== [PASSED] drm_exec =====================
[22:47:43] =========== drm_format_helper_test (17 subtests) ===========
[22:47:43] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[22:47:43] [PASSED] single_pixel_source_buffer
[22:47:43] [PASSED] single_pixel_clip_rectangle
[22:47:43] [PASSED] well_known_colors
[22:47:43] [PASSED] destination_pitch
[22:47:43] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[22:47:43] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[22:47:43] [PASSED] single_pixel_source_buffer
[22:47:43] [PASSED] single_pixel_clip_rectangle
[22:47:43] [PASSED] well_known_colors
[22:47:43] [PASSED] destination_pitch
[22:47:43] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[22:47:43] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[22:47:43] [PASSED] single_pixel_source_buffer
[22:47:43] [PASSED] single_pixel_clip_rectangle
[22:47:43] [PASSED] well_known_colors
[22:47:43] [PASSED] destination_pitch
[22:47:43] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[22:47:43] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[22:47:43] [PASSED] single_pixel_source_buffer
[22:47:43] [PASSED] single_pixel_clip_rectangle
[22:47:43] [PASSED] well_known_colors
[22:47:43] [PASSED] destination_pitch
[22:47:43] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[22:47:43] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[22:47:43] [PASSED] single_pixel_source_buffer
[22:47:43] [PASSED] single_pixel_clip_rectangle
[22:47:43] [PASSED] well_known_colors
[22:47:43] [PASSED] destination_pitch
[22:47:43] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[22:47:43] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[22:47:43] [PASSED] single_pixel_source_buffer
[22:47:43] [PASSED] single_pixel_clip_rectangle
[22:47:43] [PASSED] well_known_colors
[22:47:43] [PASSED] destination_pitch
[22:47:43] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[22:47:43] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[22:47:43] [PASSED] single_pixel_source_buffer
[22:47:43] [PASSED] single_pixel_clip_rectangle
[22:47:43] [PASSED] well_known_colors
[22:47:43] [PASSED] destination_pitch
[22:47:43] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[22:47:43] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[22:47:43] [PASSED] single_pixel_source_buffer
[22:47:43] [PASSED] single_pixel_clip_rectangle
[22:47:43] [PASSED] well_known_colors
[22:47:43] [PASSED] destination_pitch
[22:47:43] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[22:47:43] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[22:47:43] [PASSED] single_pixel_source_buffer
[22:47:43] [PASSED] single_pixel_clip_rectangle
[22:47:43] [PASSED] well_known_colors
[22:47:43] [PASSED] destination_pitch
[22:47:43] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[22:47:43] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[22:47:43] [PASSED] single_pixel_source_buffer
[22:47:43] [PASSED] single_pixel_clip_rectangle
[22:47:43] [PASSED] well_known_colors
[22:47:43] [PASSED] destination_pitch
[22:47:43] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[22:47:43] ============== drm_test_fb_xrgb8888_to_mono ===============
[22:47:43] [PASSED] single_pixel_source_buffer
[22:47:43] [PASSED] single_pixel_clip_rectangle
[22:47:43] [PASSED] well_known_colors
[22:47:43] [PASSED] destination_pitch
[22:47:43] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[22:47:43] ==================== drm_test_fb_swab =====================
[22:47:43] [PASSED] single_pixel_source_buffer
[22:47:43] [PASSED] single_pixel_clip_rectangle
[22:47:43] [PASSED] well_known_colors
[22:47:43] [PASSED] destination_pitch
[22:47:43] ================ [PASSED] drm_test_fb_swab =================
[22:47:43] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[22:47:43] [PASSED] single_pixel_source_buffer
[22:47:43] [PASSED] single_pixel_clip_rectangle
[22:47:43] [PASSED] well_known_colors
[22:47:43] [PASSED] destination_pitch
[22:47:43] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[22:47:43] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[22:47:43] [PASSED] single_pixel_source_buffer
[22:47:43] [PASSED] single_pixel_clip_rectangle
[22:47:43] [PASSED] well_known_colors
[22:47:43] [PASSED] destination_pitch
[22:47:43] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[22:47:43] ================= drm_test_fb_clip_offset =================
[22:47:43] [PASSED] pass through
[22:47:43] [PASSED] horizontal offset
[22:47:43] [PASSED] vertical offset
[22:47:43] [PASSED] horizontal and vertical offset
[22:47:43] [PASSED] horizontal offset (custom pitch)
[22:47:43] [PASSED] vertical offset (custom pitch)
[22:47:43] [PASSED] horizontal and vertical offset (custom pitch)
[22:47:43] ============= [PASSED] drm_test_fb_clip_offset =============
[22:47:43] ============== drm_test_fb_build_fourcc_list ==============
[22:47:43] [PASSED] no native formats
[22:47:43] [PASSED] XRGB8888 as native format
[22:47:43] [PASSED] remove duplicates
[22:47:43] [PASSED] convert alpha formats
[22:47:43] [PASSED] random formats
[22:47:43] ========== [PASSED] drm_test_fb_build_fourcc_list ==========
[22:47:43] =================== drm_test_fb_memcpy ====================
[22:47:43] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[22:47:43] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[22:47:43] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[22:47:43] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[22:47:43] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[22:47:43] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[22:47:43] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[22:47:43] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[22:47:43] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[22:47:43] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[22:47:43] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[22:47:43] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[22:47:43] =============== [PASSED] drm_test_fb_memcpy ================
[22:47:43] ============= [PASSED] drm_format_helper_test ==============
[22:47:43] ================= drm_format (18 subtests) =================
[22:47:43] [PASSED] drm_test_format_block_width_invalid
[22:47:43] [PASSED] drm_test_format_block_width_one_plane
[22:47:43] [PASSED] drm_test_format_block_width_two_plane
[22:47:43] [PASSED] drm_test_format_block_width_three_plane
[22:47:43] [PASSED] drm_test_format_block_width_tiled
[22:47:43] [PASSED] drm_test_format_block_height_invalid
[22:47:43] [PASSED] drm_test_format_block_height_one_plane
[22:47:43] [PASSED] drm_test_format_block_height_two_plane
[22:47:43] [PASSED] drm_test_format_block_height_three_plane
[22:47:43] [PASSED] drm_test_format_block_height_tiled
[22:47:43] [PASSED] drm_test_format_min_pitch_invalid
[22:47:43] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[22:47:43] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[22:47:43] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[22:47:43] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[22:47:43] [PASSED] drm_test_format_min_pitch_two_plane
[22:47:43] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[22:47:43] [PASSED] drm_test_format_min_pitch_tiled
[22:47:43] =================== [PASSED] drm_format ====================
[22:47:43] =============== drm_framebuffer (1 subtest) ================
[22:47:43] =============== drm_test_framebuffer_create ===============
[22:47:43] [PASSED] ABGR8888 normal sizes
[22:47:43] [PASSED] ABGR8888 max sizes
[22:47:43] [PASSED] ABGR8888 pitch greater than min required
[22:47:43] [PASSED] ABGR8888 pitch less than min required
[22:47:43] [PASSED] ABGR8888 Invalid width
[22:47:43] [PASSED] ABGR8888 Invalid buffer handle
[22:47:43] [PASSED] No pixel format
[22:47:43] [PASSED] ABGR8888 Width 0
[22:47:43] [PASSED] ABGR8888 Height 0
[22:47:43] [PASSED] ABGR8888 Out of bound height * pitch combination
[22:47:43] [PASSED] ABGR8888 Large buffer offset
[22:47:43] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[22:47:43] [PASSED] ABGR8888 Valid buffer modifier
[22:47:43] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[22:47:43] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[22:47:43] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[22:47:43] [PASSED] NV12 Normal sizes
[22:47:43] [PASSED] NV12 Max sizes
[22:47:43] [PASSED] NV12 Invalid pitch
[22:47:43] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[22:47:43] [PASSED] NV12 different modifier per-plane
[22:47:43] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[22:47:43] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[22:47:43] [PASSED] NV12 Modifier for inexistent plane
[22:47:43] [PASSED] NV12 Handle for inexistent plane
[22:47:43] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[22:47:43] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[22:47:43] [PASSED] YVU420 Normal sizes
[22:47:43] [PASSED] YVU420 Max sizes
[22:47:43] [PASSED] YVU420 Invalid pitch
[22:47:43] [PASSED] YVU420 Different pitches
[22:47:43] [PASSED] YVU420 Different buffer offsets/pitches
[22:47:43] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[22:47:43] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[22:47:43] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[22:47:43] [PASSED] YVU420 Valid modifier
[22:47:43] [PASSED] YVU420 Different modifiers per plane
[22:47:43] [PASSED] YVU420 Modifier for inexistent plane
[22:47:43] [PASSED] X0L2 Normal sizes
[22:47:43] [PASSED] X0L2 Max sizes
[22:47:43] [PASSED] X0L2 Invalid pitch
[22:47:43] [PASSED] X0L2 Pitch greater than minimum required
[22:47:43] [PASSED] X0L2 Handle for inexistent plane
[22:47:43] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[22:47:43] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[22:47:43] [PASSED] X0L2 Valid modifier
[22:47:43] [PASSED] X0L2 Modifier for inexistent plane
[22:47:43] =========== [PASSED] drm_test_framebuffer_create ===========
[22:47:43] ================= [PASSED] drm_framebuffer =================
[22:47:43] ================ drm_gem_shmem (8 subtests) ================
[22:47:43] [PASSED] drm_gem_shmem_test_obj_create
[22:47:43] [PASSED] drm_gem_shmem_test_obj_create_private
[22:47:43] [PASSED] drm_gem_shmem_test_pin_pages
[22:47:43] [PASSED] drm_gem_shmem_test_vmap
[22:47:43] [PASSED] drm_gem_shmem_test_get_pages_sgt
[22:47:43] [PASSED] drm_gem_shmem_test_get_sg_table
[22:47:43] [PASSED] drm_gem_shmem_test_madvise
[22:47:43] [PASSED] drm_gem_shmem_test_purge
[22:47:43] ================== [PASSED] drm_gem_shmem ==================
[22:47:43] === drm_atomic_helper_connector_hdmi_check (22 subtests) ===
[22:47:43] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[22:47:43] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[22:47:43] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[22:47:43] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[22:47:43] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[22:47:43] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[22:47:43] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[22:47:43] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[22:47:43] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[22:47:43] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback
[22:47:43] [PASSED] drm_test_check_max_tmds_rate_format_fallback
[22:47:43] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[22:47:43] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[22:47:43] [PASSED] drm_test_check_output_bpc_dvi
[22:47:43] [PASSED] drm_test_check_output_bpc_format_vic_1
[22:47:43] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[22:47:43] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[22:47:43] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[22:47:43] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[22:47:43] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[22:47:43] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[22:47:43] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[22:47:43] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[22:47:43] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[22:47:43] [PASSED] drm_test_check_broadcast_rgb_value
[22:47:43] [PASSED] drm_test_check_bpc_8_value
[22:47:43] [PASSED] drm_test_check_bpc_10_value
[22:47:43] [PASSED] drm_test_check_bpc_12_value
[22:47:43] [PASSED] drm_test_check_format_value
[22:47:43] [PASSED] drm_test_check_tmds_char_value
[22:47:43] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[22:47:43] ================= drm_managed (2 subtests) =================
[22:47:43] [PASSED] drm_test_managed_release_action
[22:47:43] [PASSED] drm_test_managed_run_action
[22:47:43] =================== [PASSED] drm_managed ===================
[22:47:43] =================== drm_mm (6 subtests) ====================
[22:47:43] [PASSED] drm_test_mm_init
[22:47:43] [PASSED] drm_test_mm_debug
[22:47:43] [PASSED] drm_test_mm_align32
[22:47:43] [PASSED] drm_test_mm_align64
[22:47:43] [PASSED] drm_test_mm_lowest
[22:47:43] [PASSED] drm_test_mm_highest
[22:47:43] ===================== [PASSED] drm_mm ======================
[22:47:43] ============= drm_modes_analog_tv (5 subtests) =============
[22:47:43] [PASSED] drm_test_modes_analog_tv_mono_576i
[22:47:43] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[22:47:43] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[22:47:43] [PASSED] drm_test_modes_analog_tv_pal_576i
[22:47:43] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[22:47:43] =============== [PASSED] drm_modes_analog_tv ===============
[22:47:43] ============== drm_plane_helper (2 subtests) ===============
[22:47:43] =============== drm_test_check_plane_state ================
[22:47:43] [PASSED] clipping_simple
[22:47:43] [PASSED] clipping_rotate_reflect
[22:47:43] [PASSED] positioning_simple
[22:47:43] [PASSED] upscaling
[22:47:43] [PASSED] downscaling
[22:47:43] [PASSED] rounding1
[22:47:43] [PASSED] rounding2
[22:47:43] [PASSED] rounding3
[22:47:43] [PASSED] rounding4
[22:47:43] =========== [PASSED] drm_test_check_plane_state ============
[22:47:43] =========== drm_test_check_invalid_plane_state ============
[22:47:43] [PASSED] positioning_invalid
[22:47:43] [PASSED] upscaling_invalid
stty: 'standard input': Inappropriate ioctl for device
[22:47:43] [PASSED] downscaling_invalid
[22:47:43] ======= [PASSED] drm_test_check_invalid_plane_state ========
[22:47:43] ================ [PASSED] drm_plane_helper =================
[22:47:43] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[22:47:43] ====== drm_test_connector_helper_tv_get_modes_check =======
[22:47:43] [PASSED] None
[22:47:43] [PASSED] PAL
[22:47:43] [PASSED] NTSC
[22:47:43] [PASSED] Both, NTSC Default
[22:47:43] [PASSED] Both, PAL Default
[22:47:43] [PASSED] Both, NTSC Default, with PAL on command-line
[22:47:43] [PASSED] Both, PAL Default, with NTSC on command-line
[22:47:43] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[22:47:43] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[22:47:43] ================== drm_rect (9 subtests) ===================
[22:47:43] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[22:47:43] [PASSED] drm_test_rect_clip_scaled_not_clipped
[22:47:43] [PASSED] drm_test_rect_clip_scaled_clipped
[22:47:43] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[22:47:43] ================= drm_test_rect_intersect =================
[22:47:43] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[22:47:43] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[22:47:43] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[22:47:43] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[22:47:43] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[22:47:43] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[22:47:43] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[22:47:43] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[22:47:43] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[22:47:43] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[22:47:43] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[22:47:43] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[22:47:43] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[22:47:43] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[22:47:43] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[22:47:43] ============= [PASSED] drm_test_rect_intersect =============
[22:47:43] ================ drm_test_rect_calc_hscale ================
[22:47:43] [PASSED] normal use
[22:47:43] [PASSED] out of max range
[22:47:43] [PASSED] out of min range
[22:47:43] [PASSED] zero dst
[22:47:43] [PASSED] negative src
[22:47:43] [PASSED] negative dst
[22:47:43] ============ [PASSED] drm_test_rect_calc_hscale ============
[22:47:43] ================ drm_test_rect_calc_vscale ================
[22:47:43] [PASSED] normal use
[22:47:43] [PASSED] out of max range
[22:47:43] [PASSED] out of min range
[22:47:43] [PASSED] zero dst
[22:47:43] [PASSED] negative src
[22:47:43] [PASSED] negative dst
[22:47:43] ============ [PASSED] drm_test_rect_calc_vscale ============
[22:47:43] ================== drm_test_rect_rotate ===================
[22:47:43] [PASSED] reflect-x
[22:47:43] [PASSED] reflect-y
[22:47:43] [PASSED] rotate-0
[22:47:43] [PASSED] rotate-90
[22:47:43] [PASSED] rotate-180
[22:47:43] [PASSED] rotate-270
[22:47:43] ============== [PASSED] drm_test_rect_rotate ===============
[22:47:43] ================ drm_test_rect_rotate_inv =================
[22:47:43] [PASSED] reflect-x
[22:47:43] [PASSED] reflect-y
[22:47:43] [PASSED] rotate-0
[22:47:43] [PASSED] rotate-90
[22:47:43] [PASSED] rotate-180
[22:47:43] [PASSED] rotate-270
[22:47:43] ============ [PASSED] drm_test_rect_rotate_inv =============
[22:47:43] ==================== [PASSED] drm_rect =====================
[22:47:43] ============================================================
[22:47:43] Testing complete. Ran 515 tests: passed: 515
[22:47:43] Elapsed time: 23.344s total, 1.713s configuring, 21.460s building, 0.153s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[22:47:43] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[22:47:44] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
[22:47:53] Starting KUnit Kernel (1/1)...
[22:47:53] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[22:47:53] ================= ttm_device (5 subtests) ==================
[22:47:53] [PASSED] ttm_device_init_basic
[22:47:53] [PASSED] ttm_device_init_multiple
[22:47:53] [PASSED] ttm_device_fini_basic
[22:47:53] [PASSED] ttm_device_init_no_vma_man
[22:47:53] ================== ttm_device_init_pools ==================
[22:47:53] [PASSED] No DMA allocations, no DMA32 required
[22:47:53] [PASSED] DMA allocations, DMA32 required
[22:47:53] [PASSED] No DMA allocations, DMA32 required
[22:47:53] [PASSED] DMA allocations, no DMA32 required
[22:47:53] ============== [PASSED] ttm_device_init_pools ==============
[22:47:53] =================== [PASSED] ttm_device ====================
[22:47:53] ================== ttm_pool (8 subtests) ===================
[22:47:53] ================== ttm_pool_alloc_basic ===================
[22:47:53] [PASSED] One page
[22:47:53] [PASSED] More than one page
[22:47:53] [PASSED] Above the allocation limit
[22:47:53] [PASSED] One page, with coherent DMA mappings enabled
[22:47:53] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[22:47:53] ============== [PASSED] ttm_pool_alloc_basic ===============
[22:47:53] ============== ttm_pool_alloc_basic_dma_addr ==============
[22:47:53] [PASSED] One page
[22:47:53] [PASSED] More than one page
[22:47:53] [PASSED] Above the allocation limit
[22:47:53] [PASSED] One page, with coherent DMA mappings enabled
[22:47:53] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[22:47:53] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[22:47:53] [PASSED] ttm_pool_alloc_order_caching_match
[22:47:53] [PASSED] ttm_pool_alloc_caching_mismatch
[22:47:53] [PASSED] ttm_pool_alloc_order_mismatch
[22:47:53] [PASSED] ttm_pool_free_dma_alloc
[22:47:53] [PASSED] ttm_pool_free_no_dma_alloc
[22:47:53] [PASSED] ttm_pool_fini_basic
[22:47:53] ==================== [PASSED] ttm_pool =====================
[22:47:53] ================ ttm_resource (8 subtests) =================
[22:47:53] ================= ttm_resource_init_basic =================
[22:47:53] [PASSED] Init resource in TTM_PL_SYSTEM
[22:47:53] [PASSED] Init resource in TTM_PL_VRAM
[22:47:53] [PASSED] Init resource in a private placement
[22:47:53] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[22:47:53] ============= [PASSED] ttm_resource_init_basic =============
[22:47:53] [PASSED] ttm_resource_init_pinned
[22:47:53] [PASSED] ttm_resource_fini_basic
[22:47:53] [PASSED] ttm_resource_manager_init_basic
[22:47:53] [PASSED] ttm_resource_manager_usage_basic
[22:47:53] [PASSED] ttm_resource_manager_set_used_basic
[22:47:53] [PASSED] ttm_sys_man_alloc_basic
[22:47:53] [PASSED] ttm_sys_man_free_basic
[22:47:53] ================== [PASSED] ttm_resource ===================
[22:47:53] =================== ttm_tt (15 subtests) ===================
[22:47:53] ==================== ttm_tt_init_basic ====================
[22:47:53] [PASSED] Page-aligned size
[22:47:53] [PASSED] Extra pages requested
[22:47:53] ================ [PASSED] ttm_tt_init_basic ================
[22:47:53] [PASSED] ttm_tt_init_misaligned
[22:47:53] [PASSED] ttm_tt_fini_basic
[22:47:53] [PASSED] ttm_tt_fini_sg
[22:47:53] [PASSED] ttm_tt_fini_shmem
[22:47:53] [PASSED] ttm_tt_create_basic
[22:47:53] [PASSED] ttm_tt_create_invalid_bo_type
[22:47:53] [PASSED] ttm_tt_create_ttm_exists
[22:47:53] [PASSED] ttm_tt_create_failed
[22:47:53] [PASSED] ttm_tt_destroy_basic
[22:47:53] [PASSED] ttm_tt_populate_null_ttm
[22:47:53] [PASSED] ttm_tt_populate_populated_ttm
[22:47:53] [PASSED] ttm_tt_unpopulate_basic
[22:47:53] [PASSED] ttm_tt_unpopulate_empty_ttm
[22:47:53] [PASSED] ttm_tt_swapin_basic
[22:47:53] ===================== [PASSED] ttm_tt ======================
[22:47:53] =================== ttm_bo (14 subtests) ===================
[22:47:53] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[22:47:53] [PASSED] Cannot be interrupted and sleeps
[22:47:53] [PASSED] Cannot be interrupted, locks straight away
[22:47:53] [PASSED] Can be interrupted, sleeps
[22:47:53] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[22:47:53] [PASSED] ttm_bo_reserve_locked_no_sleep
[22:47:53] [PASSED] ttm_bo_reserve_no_wait_ticket
[22:47:53] [PASSED] ttm_bo_reserve_double_resv
[22:47:53] [PASSED] ttm_bo_reserve_interrupted
[22:47:53] [PASSED] ttm_bo_reserve_deadlock
[22:47:53] [PASSED] ttm_bo_unreserve_basic
[22:47:53] [PASSED] ttm_bo_unreserve_pinned
[22:47:53] [PASSED] ttm_bo_unreserve_bulk
[22:47:53] [PASSED] ttm_bo_put_basic
[22:47:53] [PASSED] ttm_bo_put_shared_resv
[22:47:53] [PASSED] ttm_bo_pin_basic
[22:47:53] [PASSED] ttm_bo_pin_unpin_resource
[22:47:53] [PASSED] ttm_bo_multiple_pin_one_unpin
[22:47:53] ===================== [PASSED] ttm_bo ======================
[22:47:53] ============== ttm_bo_validate (22 subtests) ===============
[22:47:53] ============== ttm_bo_init_reserved_sys_man ===============
[22:47:53] [PASSED] Buffer object for userspace
[22:47:53] [PASSED] Kernel buffer object
[22:47:53] [PASSED] Shared buffer object
[22:47:53] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[22:47:53] ============== ttm_bo_init_reserved_mock_man ==============
[22:47:53] [PASSED] Buffer object for userspace
[22:47:53] [PASSED] Kernel buffer object
[22:47:53] [PASSED] Shared buffer object
[22:47:53] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[22:47:53] [PASSED] ttm_bo_init_reserved_resv
[22:47:53] ================== ttm_bo_validate_basic ==================
[22:47:53] [PASSED] Buffer object for userspace
[22:47:53] [PASSED] Kernel buffer object
[22:47:53] [PASSED] Shared buffer object
[22:47:53] ============== [PASSED] ttm_bo_validate_basic ==============
[22:47:53] [PASSED] ttm_bo_validate_invalid_placement
[22:47:53] ============= ttm_bo_validate_same_placement ==============
[22:47:53] [PASSED] System manager
[22:47:53] [PASSED] VRAM manager
[22:47:53] ========= [PASSED] ttm_bo_validate_same_placement ==========
[22:47:53] [PASSED] ttm_bo_validate_failed_alloc
[22:47:53] [PASSED] ttm_bo_validate_pinned
[22:47:53] [PASSED] ttm_bo_validate_busy_placement
[22:47:53] ================ ttm_bo_validate_multihop =================
[22:47:53] [PASSED] Buffer object for userspace
[22:47:53] [PASSED] Kernel buffer object
[22:47:53] [PASSED] Shared buffer object
[22:47:53] ============ [PASSED] ttm_bo_validate_multihop =============
[22:47:53] ========== ttm_bo_validate_no_placement_signaled ==========
[22:47:53] [PASSED] Buffer object in system domain, no page vector
[22:47:53] [PASSED] Buffer object in system domain with an existing page vector
[22:47:53] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[22:47:53] ======== ttm_bo_validate_no_placement_not_signaled ========
[22:47:53] [PASSED] Buffer object for userspace
[22:47:53] [PASSED] Kernel buffer object
[22:47:53] [PASSED] Shared buffer object
[22:47:53] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[22:47:53] [PASSED] ttm_bo_validate_move_fence_signaled
[22:47:53] ========= ttm_bo_validate_move_fence_not_signaled =========
[22:47:53] [PASSED] Waits for GPU
[22:47:53] [PASSED] Tries to lock straight away
[22:47:54] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[22:47:54] [PASSED] ttm_bo_validate_swapout
[22:47:54] [PASSED] ttm_bo_validate_happy_evict
[22:47:54] [PASSED] ttm_bo_validate_all_pinned_evict
[22:47:54] [PASSED] ttm_bo_validate_allowed_only_evict
[22:47:54] [PASSED] ttm_bo_validate_deleted_evict
[22:47:54] [PASSED] ttm_bo_validate_busy_domain_evict
[22:47:54] [PASSED] ttm_bo_validate_evict_gutting
[22:47:54] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[22:47:54] ================= [PASSED] ttm_bo_validate =================
[22:47:54] ============================================================
[22:47:54] Testing complete. Ran 102 tests: passed: 102
[22:47:54] Elapsed time: 11.211s total, 1.710s configuring, 8.829s building, 0.561s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 27+ messages in thread
* ✓ CI.Build: success for Add support for EU stall sampling (rev2)
2024-07-07 22:41 [PATCH v2 0/1] Add support for EU stall sampling Ashutosh Dixit
` (3 preceding siblings ...)
2024-07-07 22:47 ` ✓ CI.KUnit: success " Patchwork
@ 2024-07-07 22:59 ` Patchwork
2024-07-07 23:02 ` ✗ CI.Hooks: failure " Patchwork
` (4 subsequent siblings)
9 siblings, 0 replies; 27+ messages in thread
From: Patchwork @ 2024-07-07 22:59 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
== Series Details ==
Series: Add support for EU stall sampling (rev2)
URL : https://patchwork.freedesktop.org/series/135559/
State : success
== Summary ==
lib/modules/6.10.0-rc6-xe/kernel/sound/core/seq/
lib/modules/6.10.0-rc6-xe/kernel/sound/core/seq/snd-seq.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/core/snd-seq-device.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/core/snd-hwdep.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/core/snd.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/core/snd-pcm.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/core/snd-compress.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/core/snd-timer.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soundcore.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/intel/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/intel/atom/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/intel/atom/sst/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/intel/atom/sst/snd-intel-sst-acpi.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/intel/atom/sst/snd-intel-sst-core.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/intel/common/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/intel/common/snd-soc-acpi-intel-match.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/amd/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/amd/snd-acp-config.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-tgl.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-mlink.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-cnl.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-lnl.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-common.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-generic.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-mtl.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/amd/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/amd/snd-sof-amd-renoir.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/amd/snd-sof-amd-acp.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/snd-sof-utils.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/snd-sof-pci.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/snd-sof.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/snd-sof-probes.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/xtensa/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/xtensa/snd-sof-xtensa-dsp.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/snd-soc-core.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/snd-soc-acpi.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/codecs/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/codecs/snd-soc-hdac-hda.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/hda/
lib/modules/6.10.0-rc6-xe/kernel/sound/hda/snd-intel-sdw-acpi.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/hda/ext/
lib/modules/6.10.0-rc6-xe/kernel/sound/hda/ext/snd-hda-ext-core.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/hda/snd-intel-dspcfg.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/hda/snd-hda-core.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/kernel/
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/kernel/msr.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/kernel/cpuid.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/sha512-ssse3.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/crct10dif-pclmul.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/ghash-clmulni-intel.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/sha1-ssse3.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/crc32-pclmul.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/sha256-ssse3.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/aesni-intel.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/polyval-clmulni.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/events/
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/events/intel/
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/events/intel/intel-cstate.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/events/rapl.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/kvm/
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/kvm/kvm.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/kvm/kvm-intel.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/
lib/modules/6.10.0-rc6-xe/kernel/crypto/crypto_simd.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/cmac.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/ccm.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/cryptd.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/polyval-generic.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/async_tx/
lib/modules/6.10.0-rc6-xe/kernel/crypto/async_tx/async_xor.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/async_tx/async_tx.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/async_tx/async_memcpy.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/async_tx/async_pq.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/async_tx/async_raid6_recov.ko
lib/modules/6.10.0-rc6-xe/build
lib/modules/6.10.0-rc6-xe/modules.alias.bin
lib/modules/6.10.0-rc6-xe/modules.builtin
lib/modules/6.10.0-rc6-xe/modules.softdep
lib/modules/6.10.0-rc6-xe/modules.alias
lib/modules/6.10.0-rc6-xe/modules.order
lib/modules/6.10.0-rc6-xe/modules.symbols
lib/modules/6.10.0-rc6-xe/modules.dep.bin
+ mv kernel-nodebug.tar.gz ..
+ cd ..
+ rm -rf archive
++ date +%s
+ echo -e '\e[0Ksection_end:1720393179:package_x86_64_nodebug\r\e[0K'
+ sync
^[[0Ksection_end:1720393179:package_x86_64_nodebug
^[[0K
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 27+ messages in thread
* ✗ CI.Hooks: failure for Add support for EU stall sampling (rev2)
2024-07-07 22:41 [PATCH v2 0/1] Add support for EU stall sampling Ashutosh Dixit
` (4 preceding siblings ...)
2024-07-07 22:59 ` ✓ CI.Build: " Patchwork
@ 2024-07-07 23:02 ` Patchwork
2024-07-07 23:03 ` ✓ CI.checksparse: success " Patchwork
` (3 subsequent siblings)
9 siblings, 0 replies; 27+ messages in thread
From: Patchwork @ 2024-07-07 23:02 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
== Series Details ==
Series: Add support for EU stall sampling (rev2)
URL : https://patchwork.freedesktop.org/series/135559/
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
UPD include/config/kernel.release
mkdir -p /workspace/kernel/build64-default/tools/objtool && make O=/workspace/kernel/build64-default subdir=tools/objtool --no-print-directory -C objtool
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/preprocess.o
HOSTCC scripts/kconfig/menu.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_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
UPD include/generated/uapi/linux/version.h
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
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
SYSHDR arch/x86/include/generated/uapi/asm/unistd_32.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_64.h
WRAP arch/x86/include/generated/uapi/asm/termbits.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_x32.h
WRAP arch/x86/include/generated/uapi/asm/termios.h
SYSTBL arch/x86/include/generated/asm/syscalls_32.h
WRAP arch/x86/include/generated/uapi/asm/types.h
HOSTCC arch/x86/tools/relocs_32.o
HOSTCC arch/x86/tools/relocs_64.o
HOSTCC arch/x86/tools/relocs_common.o
UPD include/generated/compile.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/kmap_size.h
WRAP arch/x86/include/generated/asm/irq_regs.h
HOSTCC scripts/kallsyms
HOSTCC scripts/sorttable
WRAP arch/x86/include/generated/asm/local64.h
HOSTCC scripts/asn1_compiler
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 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-instrumented.h
CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-long.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 security/commoncap.o
CC security/lsm_syscalls.o
HOSTCC usr/gen_init_cpio
CC security/min_addr.o
CC init/main.o
CC security/security.o
CC arch/x86/pci/i386.o
CC certs/system_keyring.o
AS arch/x86/lib/atomic64_cx8_32.o
CC arch/x86/pci/init.o
CC security/lsm_audit.o
CC arch/x86/pci/pcbios.o
AS arch/x86/lib/checksum_32.o
CC arch/x86/power/cpu.o
CC security/device_cgroup.o
CC init/do_mounts.o
CC ipc/util.o
CC arch/x86/pci/mmconfig_32.o
CC block/bdev.o
UPD init/utsversion-tmp.h
CC io_uring/io_uring.o
CC mm/filemap.o
CC arch/x86/video/video-common.o
CC security/keys/gc.o
AR virt/lib/built-in.a
CC arch/x86/realmode/init.o
GEN security/selinux/flask.h security/selinux/av_permissions.h
CC block/partitions/core.o
AR arch/x86/crypto/built-in.a
CC arch/x86/power/hibernate_32.o
CC security/integrity/iint.o
AR arch/x86/net/built-in.a
AR arch/x86/platform/atom/built-in.a
AR drivers/cache/built-in.a
AR arch/x86/virt/svm/built-in.a
AS arch/x86/realmode/rm/header.o
AR sound/i2c/other/built-in.a
AR virt/built-in.a
CC arch/x86/events/amd/core.o
CC security/selinux/avc.o
AR sound/drivers/opl3/built-in.a
CC lib/math/div64.o
CC arch/x86/mm/pat/set_memory.o
CC arch/x86/lib/cmdline.o
AR sound/i2c/built-in.a
CC io_uring/opdef.o
AR sound/isa/ad1816a/built-in.a
CC io_uring/kbuf.o
CC net/core/sock.o
CC sound/core/seq/seq.o
CC arch/x86/kernel/fpu/init.o
CC fs/notify/dnotify/dnotify.o
CC io_uring/rsrc.o
AR drivers/irqchip/built-in.a
AR arch/x86/platform/ce4100/built-in.a
AR sound/drivers/opl4/built-in.a
AR arch/x86/virt/vmx/built-in.a
CC arch/x86/kernel/fpu/bugs.o
CC arch/x86/entry/vdso/vma.o
AS arch/x86/realmode/rm/trampoline_32.o
AR arch/x86/virt/built-in.a
AR sound/isa/ad1848/built-in.a
AR drivers/pwm/built-in.a
CC arch/x86/platform/efi/memmap.o
AR drivers/bus/mhi/built-in.a
AR sound/drivers/mpu401/built-in.a
AR sound/isa/cs423x/built-in.a
CC kernel/sched/core.o
AR sound/isa/galaxy/built-in.a
AR drivers/bus/built-in.a
AR sound/isa/es1688/built-in.a
AS arch/x86/realmode/rm/stack.o
AR sound/drivers/vx/built-in.a
AS arch/x86/realmode/rm/reboot.o
CC crypto/asymmetric_keys/asymmetric_type.o
AR sound/isa/gus/built-in.a
AR sound/isa/msnd/built-in.a
AR sound/drivers/pcsp/built-in.a
AS arch/x86/realmode/rm/wakeup_asm.o
AR sound/drivers/built-in.a
AR sound/isa/opti9xx/built-in.a
AR sound/isa/sb/built-in.a
CC drivers/pci/msi/pcidev_msi.o
CC drivers/pci/msi/api.o
AR sound/isa/wavefront/built-in.a
CC arch/x86/realmode/rm/wakemain.o
AS arch/x86/lib/cmpxchg8b_emu.o
CC lib/math/gcd.o
CC arch/x86/kernel/cpu/mce/core.o
AR sound/isa/wss/built-in.a
CC arch/x86/kernel/cpu/mce/severity.o
CC arch/x86/platform/efi/quirks.o
AR sound/isa/built-in.a
CC arch/x86/lib/cpu.o
CC arch/x86/kernel/cpu/mce/genpool.o
CC lib/math/lcm.o
CC arch/x86/realmode/rm/video-mode.o
CC lib/math/int_log.o
GEN usr/initramfs_data.cpio
CC lib/math/int_pow.o
COPY usr/initramfs_inc_data
AS arch/x86/realmode/rm/copy.o
HOSTCC certs/extract-cert
AS usr/initramfs_data.o
CC arch/x86/kernel/fpu/core.o
AR usr/built-in.a
AS arch/x86/realmode/rm/bioscall.o
CC arch/x86/kernel/cpu/mce/intel.o
CC lib/math/int_sqrt.o
CC arch/x86/realmode/rm/regs.o
CC arch/x86/realmode/rm/video-vga.o
CC lib/math/reciprocal_div.o
CC lib/math/rational.o
CC arch/x86/lib/delay.o
CC sound/core/seq/seq_lock.o
CC arch/x86/realmode/rm/video-vesa.o
AS arch/x86/lib/getuser.o
AR arch/x86/video/built-in.a
CC security/keys/key.o
CC arch/x86/platform/efi/efi.o
CERT certs/x509_certificate_list
CERT certs/signing_key.x509
AS certs/system_certificates.o
CC io_uring/notif.o
CC arch/x86/platform/efi/efi_32.o
CC arch/x86/kernel/fpu/regset.o
AR certs/built-in.a
CC arch/x86/realmode/rm/video-bios.o
CC crypto/api.o
CC arch/x86/kernel/cpu/mce/amd.o
AS arch/x86/platform/efi/efi_stub_32.o
CC security/integrity/integrity_audit.o
GEN arch/x86/lib/inat-tables.c
CC drivers/pci/msi/msi.o
CC sound/core/seq/seq_clientmgr.o
CC arch/x86/pci/direct.o
CC arch/x86/lib/insn-eval.o
AR fs/notify/dnotify/built-in.a
CC crypto/asymmetric_keys/restrict.o
PASYMS arch/x86/realmode/rm/pasyms.h
CC arch/x86/lib/insn.o
LDS arch/x86/realmode/rm/realmode.lds
CC fs/notify/inotify/inotify_fsnotify.o
CC arch/x86/entry/vdso/extable.o
LD arch/x86/realmode/rm/realmode.elf
RELOCS arch/x86/realmode/rm/realmode.relocs
OBJCOPY arch/x86/realmode/rm/realmode.bin
AS arch/x86/realmode/rmpiggy.o
CC ipc/msgutil.o
CC fs/notify/inotify/inotify_user.o
AS arch/x86/power/hibernate_asm_32.o
CC arch/x86/platform/efi/runtime-map.o
CC arch/x86/power/hibernate.o
AR arch/x86/realmode/built-in.a
CC kernel/sched/fair.o
AR fs/notify/fanotify/built-in.a
CC security/selinux/hooks.o
CC block/partitions/msdos.o
AR lib/math/built-in.a
CC block/partitions/efi.o
CC lib/crypto/mpi/generic_mpih-lshift.o
CC lib/zlib_inflate/inffast.o
CC lib/crypto/mpi/generic_mpih-mul1.o
CC sound/core/seq/seq_memory.o
CC lib/crypto/mpi/generic_mpih-mul2.o
CC kernel/sched/build_policy.o
CC lib/zlib_deflate/deflate.o
CC lib/crypto/mpi/generic_mpih-mul3.o
CC lib/zlib_deflate/deftree.o
CC arch/x86/events/amd/lbr.o
CC lib/zlib_inflate/inflate.o
CC arch/x86/lib/kaslr.o
CC drivers/video/console/dummycon.o
CC crypto/asymmetric_keys/signature.o
AR drivers/idle/built-in.a
CC io_uring/tctx.o
CC drivers/video/console/vgacon.o
CC security/keys/keyring.o
CC arch/x86/mm/pat/memtype.o
CC drivers/pci/msi/irqdomain.o
CC crypto/asymmetric_keys/public_key.o
CC block/fops.o
AR security/integrity/built-in.a
CC sound/core/sound.o
CC arch/x86/pci/mmconfig-shared.o
CC io_uring/filetable.o
CC init/do_mounts_initrd.o
CC lib/zlib_deflate/deflate_syms.o
AR arch/x86/power/built-in.a
CC crypto/cipher.o
CC lib/crypto/mpi/generic_mpih-rshift.o
CC ipc/msg.o
LDS arch/x86/entry/vdso/vdso32/vdso32.lds
CC arch/x86/lib/memcpy_32.o
CC ipc/sem.o
ASN.1 crypto/asymmetric_keys/x509.asn1.[ch]
AS arch/x86/entry/vdso/vdso32/note.o
CC arch/x86/events/amd/ibs.o
CC security/selinux/selinuxfs.o
CC lib/lzo/lzo1x_compress.o
CC arch/x86/kernel/fpu/signal.o
AR arch/x86/platform/efi/built-in.a
AS arch/x86/entry/vdso/vdso32/system_call.o
AS arch/x86/lib/memmove_32.o
AR arch/x86/platform/geode/built-in.a
AS arch/x86/entry/vdso/vdso32/sigreturn.o
CC lib/crypto/mpi/generic_mpih-sub1.o
AR arch/x86/platform/iris/built-in.a
CC arch/x86/entry/vdso/vdso32/vclock_gettime.o
CC arch/x86/lib/misc.o
CC arch/x86/platform/intel/iosf_mbi.o
CC arch/x86/lib/pc-conf-reg.o
AS arch/x86/lib/putuser.o
CC lib/crypto/mpi/generic_mpih-add1.o
AS arch/x86/lib/retpoline.o
CC lib/crypto/mpi/ec.o
ASN.1 crypto/asymmetric_keys/x509_akid.asn1.[ch]
CC arch/x86/entry/vdso/vdso32/vgetcpu.o
CC arch/x86/lib/string_32.o
AR fs/notify/inotify/built-in.a
CC fs/notify/fsnotify.o
CC lib/zlib_inflate/infutil.o
CC arch/x86/lib/strstr_32.o
CC arch/x86/lib/usercopy.o
AR drivers/char/ipmi/built-in.a
CC security/keys/keyctl.o
CC lib/crypto/mpi/mpicoder.o
CC kernel/locking/mutex.o
CC kernel/power/qos.o
CC arch/x86/kernel/cpu/mce/threshold.o
CC kernel/locking/semaphore.o
CC drivers/acpi/acpica/dsargs.o
CC drivers/pnp/pnpacpi/core.o
AR lib/zlib_deflate/built-in.a
CC drivers/pnp/core.o
CC sound/core/seq/seq_queue.o
AR block/partitions/built-in.a
CC lib/lz4/lz4_decompress.o
CC crypto/asymmetric_keys/x509_loader.o
CC crypto/asymmetric_keys/x509_public_key.o
ASN.1 crypto/asymmetric_keys/pkcs7.asn1.[ch]
CC block/bio.o
CC arch/x86/lib/usercopy_32.o
CC drivers/pnp/pnpacpi/rsparser.o
CC lib/lzo/lzo1x_decompress_safe.o
CC lib/zlib_inflate/inftrees.o
AR drivers/pci/msi/built-in.a
CC arch/x86/events/amd/uncore.o
CC drivers/pci/pcie/portdrv.o
CC drivers/acpi/acpica/dscontrol.o
CC arch/x86/mm/pat/memtype_interval.o
AR drivers/amba/built-in.a
CC init/initramfs.o
CC kernel/sched/build_utility.o
CC lib/crypto/mpi/mpi-add.o
CC crypto/compress.o
AR drivers/video/console/built-in.a
CC drivers/pnp/card.o
CC lib/zlib_inflate/inflate_syms.o
CC drivers/video/backlight/backlight.o
CC drivers/pnp/driver.o
HOSTCC arch/x86/entry/vdso/vdso2c
CC drivers/acpi/acpica/dsdebug.o
CC arch/x86/pci/fixup.o
CC arch/x86/lib/msr-smp.o
AR arch/x86/platform/intel/built-in.a
AR arch/x86/platform/intel-mid/built-in.a
AR arch/x86/platform/intel-quark/built-in.a
AR arch/x86/platform/olpc/built-in.a
AR arch/x86/platform/scx200/built-in.a
AR arch/x86/platform/ts5500/built-in.a
CC drivers/pci/pcie/rcec.o
AR arch/x86/platform/uv/built-in.a
CC drivers/pci/pcie/aspm.o
CC arch/x86/kernel/fpu/xstate.o
AR arch/x86/platform/built-in.a
CC kernel/power/main.o
CC kernel/power/console.o
CC security/selinux/netlink.o
CC arch/x86/lib/cache-smp.o
AR lib/lzo/built-in.a
CC fs/notify/notification.o
CC arch/x86/lib/msr.o
CC arch/x86/pci/acpi.o
CC crypto/asymmetric_keys/pkcs7_trust.o
CC kernel/locking/rwsem.o
CC kernel/locking/percpu-rwsem.o
CC security/keys/permission.o
AR lib/zlib_inflate/built-in.a
CC lib/crypto/mpi/mpi-bit.o
CC lib/crypto/mpi/mpi-cmp.o
CC drivers/acpi/acpica/dsfield.o
CC io_uring/rw.o
CC arch/x86/entry/vdso/vdso32-setup.o
CC block/elevator.o
CC security/selinux/nlmsgtab.o
CC sound/core/seq/seq_fifo.o
CC crypto/algapi.o
AR arch/x86/mm/pat/built-in.a
CC sound/core/seq/seq_prioq.o
CC arch/x86/mm/init.o
CC sound/core/init.o
CC io_uring/net.o
CC drivers/pci/pcie/pme.o
AR arch/x86/kernel/cpu/mce/built-in.a
CC kernel/power/process.o
CC net/core/request_sock.o
CC mm/mempool.o
CC crypto/asymmetric_keys/pkcs7_verify.o
CC arch/x86/kernel/cpu/mtrr/mtrr.o
AR drivers/pnp/pnpacpi/built-in.a
CC arch/x86/kernel/cpu/microcode/core.o
CC drivers/pnp/resource.o
VDSO arch/x86/entry/vdso/vdso32.so.dbg
CC arch/x86/kernel/cpu/microcode/intel.o
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
AR drivers/video/backlight/built-in.a
CC kernel/power/suspend.o
AR drivers/video/fbdev/core/built-in.a
CC drivers/acpi/acpica/dsinit.o
AR drivers/video/fbdev/omap/built-in.a
CC ipc/shm.o
AR lib/lz4/built-in.a
CC init/calibrate.o
CC drivers/pnp/manager.o
AR drivers/video/fbdev/omap2/omapfb/dss/built-in.a
CC fs/notify/group.o
AR drivers/video/fbdev/omap2/omapfb/displays/built-in.a
CC drivers/pnp/support.o
AR arch/x86/events/amd/built-in.a
AR drivers/video/fbdev/omap2/omapfb/built-in.a
CC security/keys/process_keys.o
CC arch/x86/mm/init_32.o
AR drivers/video/fbdev/omap2/built-in.a
CC arch/x86/events/intel/core.o
AR drivers/video/fbdev/built-in.a
CC drivers/video/aperture.o
CC arch/x86/mm/fault.o
CC io_uring/poll.o
CC arch/x86/events/intel/bts.o
AR arch/x86/entry/vdso/built-in.a
CC lib/crypto/mpi/mpi-sub-ui.o
CC arch/x86/events/intel/ds.o
CC arch/x86/pci/legacy.o
AR arch/x86/entry/vsyscall/built-in.a
CC arch/x86/events/intel/knc.o
AS arch/x86/entry/entry.o
AS arch/x86/entry/entry_32.o
CC crypto/asymmetric_keys/x509.asn1.o
CC kernel/locking/spinlock.o
AS arch/x86/lib/msr-reg.o
CC sound/core/seq/seq_timer.o
CC arch/x86/lib/msr-reg-export.o
CC arch/x86/entry/syscall_32.o
CC crypto/asymmetric_keys/x509_akid.asn1.o
CC init/init_task.o
CC crypto/asymmetric_keys/x509_cert_parser.o
CC drivers/acpi/acpica/dsmethod.o
CC kernel/power/hibernate.o
AR arch/x86/kernel/fpu/built-in.a
AS arch/x86/lib/hweight.o
CC kernel/power/snapshot.o
CC sound/core/seq/seq_system.o
CC arch/x86/lib/iomem.o
CC security/keys/request_key.o
CC security/selinux/netif.o
CC arch/x86/kernel/cpu/microcode/amd.o
AR drivers/pci/pcie/built-in.a
CC mm/oom_kill.o
CC drivers/pci/hotplug/pci_hotplug_core.o
CC arch/x86/kernel/cpu/mtrr/if.o
CC drivers/pci/hotplug/acpi_pcihp.o
CC security/selinux/netnode.o
CC security/keys/request_key_auth.o
AR drivers/pci/controller/dwc/built-in.a
CC security/keys/user_defined.o
CC kernel/locking/osq_lock.o
AR drivers/pci/controller/mobiveil/built-in.a
AR drivers/pci/controller/built-in.a
AR drivers/pci/switch/built-in.a
CC arch/x86/kernel/cpu/mtrr/generic.o
CC net/core/skbuff.o
CC lib/crypto/mpi/mpi-div.o
CC arch/x86/kernel/cpu/mtrr/cleanup.o
CC fs/notify/mark.o
CC block/blk-core.o
CC arch/x86/pci/irq.o
CC drivers/acpi/acpica/dsmthdat.o
CC crypto/scatterwalk.o
CC kernel/locking/qspinlock.o
CC drivers/pnp/interface.o
CC security/selinux/netport.o
CC crypto/asymmetric_keys/pkcs7.asn1.o
CC arch/x86/lib/atomic64_32.o
CC arch/x86/mm/ioremap.o
CC crypto/asymmetric_keys/pkcs7_parser.o
CC drivers/video/cmdline.o
CC arch/x86/mm/extable.o
CC drivers/pci/access.o
CC arch/x86/lib/inat.o
CC init/version.o
CC drivers/pnp/quirks.o
CC sound/core/seq/seq_ports.o
CC arch/x86/events/intel/lbr.o
CC drivers/pnp/system.o
AR arch/x86/lib/built-in.a
AR arch/x86/lib/lib.a
CC block/blk-sysfs.o
AR sound/pci/ac97/built-in.a
AR sound/pci/ali5451/built-in.a
AR sound/ppc/built-in.a
AR sound/pci/asihpi/built-in.a
CC arch/x86/kernel/cpu/mtrr/amd.o
AR sound/pci/au88x0/built-in.a
AR init/built-in.a
AR sound/pci/aw2/built-in.a
CC arch/x86/events/intel/p4.o
CC mm/fadvise.o
CC ipc/syscall.o
AR sound/pci/ctxfi/built-in.a
CC drivers/acpi/acpica/dsobject.o
CC security/keys/proc.o
AR sound/pci/cs46xx/built-in.a
AR sound/pci/ca0106/built-in.a
CC security/keys/sysctl.o
CC security/keys/keyctl_pkey.o
AR sound/pci/cs5535audio/built-in.a
AR sound/pci/lola/built-in.a
CC kernel/locking/rtmutex_api.o
AR sound/pci/lx6464es/built-in.a
CC sound/core/seq/seq_info.o
AR sound/pci/echoaudio/built-in.a
AR arch/x86/kernel/cpu/microcode/built-in.a
CC drivers/acpi/acpica/dsopcode.o
CC lib/crypto/mpi/mpi-inv.o
AR sound/pci/emu10k1/built-in.a
CC drivers/pci/bus.o
AR sound/pci/hda/built-in.a
AR drivers/pci/hotplug/built-in.a
CC block/blk-flush.o
CC [M] sound/pci/hda/hda_bind.o
CC sound/core/seq/seq_dummy.o
CC arch/x86/entry/common.o
CC drivers/acpi/acpica/dspkginit.o
CC lib/crypto/mpi/mpi-mod.o
AR crypto/asymmetric_keys/built-in.a
CC arch/x86/kernel/cpu/cacheinfo.o
CC crypto/proc.o
CC fs/notify/fdinfo.o
CC fs/nfs_common/nfsacl.o
CC drivers/acpi/acpica/dsutils.o
CC arch/x86/kernel/cpu/mtrr/cyrix.o
CC drivers/video/nomodeset.o
CC fs/nfs_common/grace.o
CC arch/x86/kernel/cpu/mtrr/centaur.o
CC arch/x86/mm/mmap.o
CC arch/x86/mm/pgtable.o
CC arch/x86/mm/physaddr.o
CC io_uring/uring_cmd.o
CC arch/x86/kernel/cpu/mtrr/legacy.o
AR drivers/pnp/built-in.a
CC drivers/acpi/acpica/dswexec.o
CC [M] sound/pci/hda/hda_codec.o
CC arch/x86/mm/tlb.o
CC drivers/pci/probe.o
AS arch/x86/entry/thunk.o
CC [M] sound/pci/hda/hda_jack.o
AR drivers/clk/actions/built-in.a
CC arch/x86/events/intel/p6.o
CC arch/x86/pci/common.o
AR drivers/clk/analogbits/built-in.a
CC kernel/power/swap.o
CC security/selinux/status.o
AR drivers/clk/bcm/built-in.a
CC arch/x86/mm/cpu_entry_area.o
AR drivers/clk/imgtec/built-in.a
AR security/keys/built-in.a
AR drivers/clk/imx/built-in.a
CC drivers/video/hdmi.o
CC arch/x86/mm/maccess.o
AR drivers/clk/ingenic/built-in.a
AR drivers/clk/mediatek/built-in.a
AR drivers/clk/microchip/built-in.a
CC ipc/ipc_sysctl.o
CC lib/crypto/mpi/mpi-mul.o
AR drivers/clk/mstar/built-in.a
CC lib/crypto/mpi/mpih-cmp.o
CC arch/x86/kernel/cpu/scattered.o
AR drivers/clk/mvebu/built-in.a
AR sound/core/seq/built-in.a
CC sound/core/memory.o
AR drivers/clk/ralink/built-in.a
AR drivers/clk/renesas/built-in.a
CC io_uring/openclose.o
CC mm/maccess.o
CC mm/page-writeback.o
AR drivers/clk/socfpga/built-in.a
CC block/blk-settings.o
AR drivers/clk/sophgo/built-in.a
CC drivers/pci/host-bridge.o
AR drivers/clk/sprd/built-in.a
CC ipc/mqueue.o
CC arch/x86/kernel/cpu/topology_common.o
AR drivers/clk/starfive/built-in.a
CC crypto/aead.o
AR drivers/clk/sunxi-ng/built-in.a
CC arch/x86/events/zhaoxin/core.o
CC drivers/dma/dw/core.o
AR drivers/clk/ti/built-in.a
CC drivers/dma/hsu/hsu.o
AR fs/notify/built-in.a
AR drivers/clk/versatile/built-in.a
AR drivers/dma/idxd/built-in.a
CC sound/core/control.o
AR drivers/clk/xilinx/built-in.a
CC arch/x86/events/core.o
CC drivers/pci/remove.o
CC arch/x86/mm/pgprot.o
CC kernel/locking/qrwlock.o
AR drivers/clk/built-in.a
CC drivers/acpi/acpica/dswload.o
AR arch/x86/kernel/cpu/mtrr/built-in.a
CC drivers/dma/dw/dw.o
AR arch/x86/entry/built-in.a
CC arch/x86/events/intel/pt.o
CC lib/crypto/mpi/mpih-div.o
CC lib/crypto/mpi/mpih-mul.o
AR sound/pci/ice1712/built-in.a
CC kernel/power/user.o
CC arch/x86/pci/early.o
CC kernel/power/poweroff.o
CC fs/iomap/trace.o
AR fs/nfs_common/built-in.a
AR drivers/soc/apple/built-in.a
AR sound/pci/korg1212/built-in.a
CC mm/folio-compat.o
CC mm/readahead.o
AR drivers/soc/aspeed/built-in.a
AR drivers/soc/bcm/built-in.a
CC arch/x86/mm/pgtable_32.o
CC fs/quota/dquot.o
AR drivers/soc/fsl/built-in.a
AR drivers/soc/fujitsu/built-in.a
AR drivers/soc/hisilicon/built-in.a
CC fs/quota/quota_v2.o
CC security/selinux/ss/ebitmap.o
AR kernel/sched/built-in.a
AR drivers/soc/imx/built-in.a
CC security/selinux/ss/hashtab.o
CC arch/x86/pci/bus_numa.o
AR drivers/soc/ixp4xx/built-in.a
CC arch/x86/pci/amd_bus.o
AR drivers/soc/loongson/built-in.a
CC arch/x86/kernel/cpu/topology_ext.o
AR drivers/soc/mediatek/built-in.a
CC security/selinux/ss/symtab.o
CC drivers/acpi/acpica/dswload2.o
AR drivers/soc/microchip/built-in.a
AR drivers/soc/nuvoton/built-in.a
CC arch/x86/mm/iomap_32.o
AR kernel/locking/built-in.a
AR drivers/soc/pxa/built-in.a
CC arch/x86/events/intel/uncore.o
AR drivers/soc/amlogic/built-in.a
AR sound/arm/built-in.a
AR drivers/video/built-in.a
AR drivers/soc/qcom/built-in.a
AR drivers/soc/renesas/built-in.a
CC fs/kernfs/mount.o
CC fs/proc/task_mmu.o
CC arch/x86/mm/hugetlbpage.o
CC fs/kernfs/inode.o
AR drivers/soc/rockchip/built-in.a
CC fs/kernfs/dir.o
CC [M] sound/pci/hda/hda_auto_parser.o
CC fs/kernfs/file.o
AR drivers/soc/sunxi/built-in.a
AR drivers/soc/ti/built-in.a
CC fs/kernfs/symlink.o
AR drivers/soc/xilinx/built-in.a
AR drivers/soc/built-in.a
CC fs/sysfs/file.o
CC fs/sysfs/dir.o
CC arch/x86/kernel/cpu/topology_amd.o
CC arch/x86/events/probe.o
CC kernel/printk/printk.o
CC fs/iomap/iter.o
CC kernel/printk/printk_safe.o
AR drivers/dma/hsu/built-in.a
CC security/selinux/ss/sidtab.o
CC drivers/acpi/acpica/dswscope.o
CC crypto/geniv.o
CC block/blk-ioc.o
CC kernel/irq/irqdesc.o
CC io_uring/sqpoll.o
CC arch/x86/events/utils.o
CC lib/crypto/mpi/mpi-pow.o
CC ipc/namespace.o
CC arch/x86/kernel/acpi/boot.o
CC kernel/printk/nbcon.o
AR arch/x86/events/zhaoxin/built-in.a
CC lib/crypto/mpi/mpiutil.o
AR kernel/power/built-in.a
CC arch/x86/kernel/acpi/sleep.o
CC arch/x86/events/rapl.o
CC lib/crypto/memneq.o
CC fs/quota/quota_tree.o
AS arch/x86/kernel/acpi/wakeup_32.o
CC drivers/dma/dw/idma32.o
CC fs/quota/quota.o
CC io_uring/xattr.o
CC mm/swap.o
CC drivers/pci/pci.o
AR arch/x86/pci/built-in.a
CC drivers/acpi/acpica/dswstate.o
CC arch/x86/kernel/cpu/common.o
CC drivers/acpi/acpica/evevent.o
CC mm/truncate.o
CC arch/x86/mm/dump_pagetables.o
CC arch/x86/mm/highmem_32.o
CC arch/x86/events/intel/uncore_nhmex.o
CC drivers/pci/pci-driver.o
CC drivers/acpi/acpica/evgpe.o
CC fs/iomap/buffered-io.o
CC sound/core/misc.o
CC drivers/pci/search.o
CC mm/vmscan.o
CC ipc/mq_sysctl.o
CC arch/x86/events/msr.o
CC fs/sysfs/symlink.o
CC lib/crypto/utils.o
AR drivers/dma/mediatek/built-in.a
AR drivers/dma/qcom/built-in.a
AR drivers/dma/ti/built-in.a
AR drivers/dma/xilinx/built-in.a
CC arch/x86/events/intel/uncore_snb.o
CC security/selinux/ss/avtab.o
CC fs/iomap/direct-io.o
CC kernel/irq/handle.o
CC [M] sound/pci/hda/hda_sysfs.o
CC mm/shrinker.o
CC fs/sysfs/mount.o
CC block/blk-map.o
AR lib/crypto/mpi/built-in.a
CC block/blk-merge.o
CC kernel/irq/manage.o
CC block/blk-timeout.o
CC mm/shmem.o
CC kernel/irq/spurious.o
CC crypto/lskcipher.o
CC sound/core/device.o
AR fs/kernfs/built-in.a
CC drivers/dma/dw/acpi.o
AR ipc/built-in.a
CC drivers/pci/rom.o
CC mm/util.o
CC fs/devpts/inode.o
CC drivers/acpi/acpica/evgpeblk.o
CC lib/crypto/chacha.o
CC lib/crypto/aes.o
CC kernel/irq/resend.o
CC drivers/pci/setup-res.o
CC [M] sound/pci/hda/hda_controller.o
CC drivers/dma/dmaengine.o
CC arch/x86/kernel/cpu/rdrand.o
AR arch/x86/mm/built-in.a
CC arch/x86/kernel/acpi/cstate.o
CC kernel/rcu/update.o
CC arch/x86/events/intel/uncore_snbep.o
CC arch/x86/kernel/apic/apic.o
CC arch/x86/kernel/kprobes/core.o
CC fs/netfs/buffered_read.o
CC arch/x86/kernel/kprobes/opt.o
CC block/blk-lib.o
CC block/blk-mq.o
CC fs/sysfs/group.o
CC fs/proc/inode.o
CC security/selinux/ss/policydb.o
CC sound/core/info.o
CC io_uring/nop.o
CC fs/quota/kqid.o
CC drivers/acpi/acpica/evgpeinit.o
CC fs/quota/netlink.o
CC drivers/acpi/acpica/evgpeutil.o
AR kernel/livepatch/built-in.a
CC lib/crypto/arc4.o
CC kernel/dma/mapping.o
CC kernel/dma/direct.o
AR drivers/dma/dw/built-in.a
CC [M] sound/pci/hda/hda_proc.o
CC io_uring/fs.o
CC kernel/entry/common.o
CC io_uring/splice.o
CC kernel/rcu/sync.o
CC lib/crypto/gf128mul.o
CC [M] sound/pci/hda/hda_hwdep.o
CC drivers/dma/virt-dma.o
CC kernel/dma/ops_helpers.o
AR fs/devpts/built-in.a
CC kernel/dma/dummy.o
AR arch/x86/kernel/acpi/built-in.a
CC kernel/rcu/srcutree.o
CC arch/x86/kernel/cpu/match.o
CC crypto/skcipher.o
CC kernel/entry/syscall_user_dispatch.o
CC mm/mmzone.o
CC arch/x86/kernel/apic/apic_common.o
CC mm/vmstat.o
CC arch/x86/kernel/apic/apic_noop.o
CC block/blk-mq-tag.o
CC drivers/acpi/acpica/evglock.o
CC kernel/printk/printk_ringbuffer.o
CC arch/x86/events/intel/uncore_discovery.o
CC arch/x86/events/intel/cstate.o
CC fs/ext4/balloc.o
AR fs/sysfs/built-in.a
CC [M] sound/pci/hda/patch_hdmi.o
CC block/blk-stat.o
CC block/blk-mq-sysfs.o
CC fs/proc/root.o
CC net/core/datagram.o
AR fs/quota/built-in.a
CC arch/x86/kernel/cpu/bugs.o
CC kernel/irq/chip.o
CC arch/x86/kernel/cpu/aperfmperf.o
AR arch/x86/kernel/kprobes/built-in.a
CC sound/core/isadma.o
CC drivers/acpi/acpica/evhandler.o
CC fs/jbd2/transaction.o
CC lib/crypto/blake2s.o
CC fs/jbd2/commit.o
CC block/blk-mq-cpumap.o
CC io_uring/sync.o
CC net/ethernet/eth.o
CC io_uring/msg_ring.o
CC kernel/dma/remap.o
CC [M] sound/pci/hda/hda_eld.o
CC drivers/dma/acpi-dma.o
CC block/blk-mq-sched.o
CC fs/jbd2/recovery.o
AR net/802/built-in.a
CC kernel/printk/sysctl.o
CC arch/x86/kernel/apic/ipi.o
CC arch/x86/kernel/apic/vector.o
CC fs/netfs/buffered_write.o
CC fs/iomap/fiemap.o
CC io_uring/advise.o
CC fs/ramfs/inode.o
CC fs/hugetlbfs/inode.o
CC fs/fat/cache.o
AR kernel/entry/built-in.a
CC kernel/irq/dummychip.o
CC lib/crypto/blake2s-generic.o
CC fs/jbd2/checkpoint.o
CC drivers/acpi/acpica/evmisc.o
AR kernel/printk/built-in.a
CC lib/crypto/sha1.o
CC sound/core/vmaster.o
CC sound/core/ctljack.o
CC arch/x86/kernel/cpu/cpuid-deps.o
CC drivers/pci/irq.o
CC arch/x86/kernel/cpu/umwait.o
MKCAP arch/x86/kernel/cpu/capflags.c
AR kernel/dma/built-in.a
CC kernel/rcu/tree.o
CC crypto/seqiv.o
AR drivers/acpi/pmic/built-in.a
CC kernel/module/main.o
CC crypto/echainiv.o
CC crypto/ahash.o
CC fs/proc/base.o
CC kernel/rcu/rcu_segcblist.o
CC drivers/acpi/dptf/int340x_thermal.o
CC drivers/acpi/acpica/evregion.o
CC kernel/irq/devres.o
CC arch/x86/kernel/cpu/powerflags.o
CC [M] sound/pci/hda/hda_intel.o
AR drivers/dma/built-in.a
CC drivers/acpi/x86/apple.o
CC lib/crypto/sha256.o
CC kernel/module/strict_rwx.o
CC kernel/module/kmod.o
CC kernel/irq/autoprobe.o
CC mm/backing-dev.o
CC drivers/acpi/tables.o
CC fs/iomap/seek.o
LD [M] sound/pci/hda/snd-hda-codec.o
CC drivers/acpi/osi.o
CC drivers/acpi/osl.o
CC drivers/acpi/utils.o
CC fs/netfs/direct_read.o
CC fs/ramfs/file-mmu.o
CC sound/core/jack.o
CC fs/fat/dir.o
CC io_uring/epoll.o
CC sound/core/timer.o
AR arch/x86/events/intel/built-in.a
CC fs/ext4/bitmap.o
AR arch/x86/events/built-in.a
CC drivers/virtio/virtio.o
AR sound/sh/built-in.a
AR sound/pci/mixart/built-in.a
AR sound/synth/emux/built-in.a
AR sound/synth/built-in.a
CC mm/mm_init.o
AR drivers/acpi/dptf/built-in.a
CC fs/fat/fatent.o
CC drivers/tty/vt/vt_ioctl.o
CC drivers/acpi/acpica/evrgnini.o
CC drivers/pci/vpd.o
CC kernel/irq/irqdomain.o
CC arch/x86/kernel/cpu/topology.o
CC drivers/pci/setup-bus.o
AR net/ethernet/built-in.a
CC drivers/tty/vt/vc_screen.o
CC drivers/tty/hvc/hvc_console.o
CC net/sched/sch_generic.o
AR drivers/tty/ipwireless/built-in.a
CC drivers/tty/serial/8250/8250_core.o
CC drivers/tty/tty_io.o
CC drivers/acpi/x86/cmos_rtc.o
CC sound/core/hrtimer.o
CC drivers/tty/serial/serial_core.o
CC net/sched/sch_mq.o
AR lib/crypto/built-in.a
CC lib/zstd/zstd_decompress_module.o
CC net/sched/sch_frag.o
AR fs/hugetlbfs/built-in.a
CC arch/x86/kernel/apic/init.o
CC drivers/acpi/x86/lpss.o
CC fs/jbd2/revoke.o
CC net/core/stream.o
CC fs/iomap/swapfile.o
CC drivers/acpi/reboot.o
AR fs/ramfs/built-in.a
CC drivers/pci/vc.o
CC security/selinux/ss/services.o
CC drivers/acpi/acpica/evsci.o
CC drivers/pci/mmap.o
CC block/ioctl.o
CC crypto/shash.o
AR sound/usb/misc/built-in.a
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
CC drivers/acpi/x86/s2idle.o
AR sound/usb/6fire/built-in.a
AR sound/usb/hiface/built-in.a
CC arch/x86/kernel/apic/hw_nmi.o
CC mm/percpu.o
AR sound/usb/bcd2000/built-in.a
CC lib/zstd/decompress/huf_decompress.o
CC fs/isofs/namei.o
AR sound/usb/built-in.a
CC fs/ext4/block_validity.o
CC sound/core/seq_device.o
CC fs/netfs/direct_write.o
CC io_uring/statx.o
CC drivers/virtio/virtio_ring.o
AR sound/pci/nm256/built-in.a
CC lib/zstd/decompress/zstd_ddict.o
CC [M] sound/core/hwdep.o
AR sound/spi/built-in.a
CC drivers/acpi/x86/utils.o
CC drivers/virtio/virtio_anchor.o
CC drivers/acpi/acpica/evxface.o
CC lib/zstd/decompress/zstd_decompress.o
CC kernel/futex/core.o
CC kernel/time/time.o
CC kernel/time/timer.o
AR drivers/tty/hvc/built-in.a
CC drivers/virtio/virtio_pci_modern_dev.o
CC drivers/tty/vt/selection.o
CC net/sched/sch_api.o
LD [M] sound/pci/hda/snd-hda-codec-hdmi.o
LD [M] sound/pci/hda/snd-hda-intel.o
AR sound/pci/oxygen/built-in.a
AR sound/pci/pcxhr/built-in.a
CC net/sched/sch_blackhole.o
CC fs/isofs/inode.o
AR sound/pci/riptide/built-in.a
AR sound/pci/rme9652/built-in.a
CC kernel/module/tree_lookup.o
AR sound/pci/trident/built-in.a
CC kernel/irq/proc.o
AR sound/pci/ymfpci/built-in.a
CC drivers/tty/serial/8250/8250_pnp.o
CC drivers/pci/devres.o
AR sound/pci/vx222/built-in.a
CC fs/fat/file.o
AR sound/pci/built-in.a
CC kernel/cgroup/cgroup.o
CC lib/xz/xz_dec_syms.o
AR fs/iomap/built-in.a
CC kernel/trace/trace_clock.o
CC io_uring/timeout.o
CC fs/fat/inode.o
CC fs/fat/misc.o
CC security/selinux/ss/conditional.o
CC fs/jbd2/journal.o
CC arch/x86/kernel/apic/io_apic.o
CC drivers/acpi/x86/blacklist.o
CC [M] sound/core/pcm.o
CC drivers/acpi/acpica/evxfevnt.o
CC lib/zstd/decompress/zstd_decompress_block.o
CC crypto/akcipher.o
CC fs/proc/generic.o
CC lib/zstd/zstd_common_module.o
CC net/core/scm.o
CC [M] sound/core/pcm_native.o
CC block/genhd.o
CC fs/ext4/dir.o
CC lib/xz/xz_dec_stream.o
CC lib/xz/xz_dec_lzma2.o
CC lib/xz/xz_dec_bcj.o
CC kernel/module/kallsyms.o
CC drivers/acpi/nvs.o
CC kernel/trace/ring_buffer.o
CC fs/netfs/io.o
CC lib/dim/dim.o
CC drivers/tty/n_tty.o
CC lib/zstd/common/debug.o
CC kernel/futex/syscalls.o
CC kernel/futex/pi.o
CC fs/ext4/ext4_jbd2.o
AR drivers/acpi/x86/built-in.a
CC drivers/tty/vt/keyboard.o
CC lib/fonts/fonts.o
CC drivers/acpi/acpica/evxfgpe.o
CC drivers/tty/tty_ioctl.o
CC kernel/irq/migration.o
CC drivers/acpi/acpica/evxfregn.o
CC drivers/tty/serial/8250/8250_port.o
CC drivers/pci/proc.o
CC drivers/pci/pci-sysfs.o
CC fs/proc/array.o
CC io_uring/fdinfo.o
CC kernel/trace/trace.o
CC kernel/trace/trace_output.o
CC lib/dim/net_dim.o
CC fs/fat/nfs.o
CC fs/ext4/extents.o
CC drivers/virtio/virtio_pci_legacy_dev.o
CC lib/fonts/font_8x16.o
CC drivers/tty/serial/serial_base_bus.o
AR lib/xz/built-in.a
CC kernel/cgroup/rstat.o
AR sound/parisc/built-in.a
CC lib/argv_split.o
CC crypto/sig.o
AR sound/pcmcia/vx/built-in.a
CC drivers/acpi/wakeup.o
AR sound/pcmcia/pdaudiocf/built-in.a
CC crypto/kpp.o
CC drivers/acpi/acpica/exconcat.o
AR sound/pcmcia/built-in.a
CC drivers/acpi/acpica/exconfig.o
CC kernel/irq/cpuhotplug.o
ASN.1 crypto/rsapubkey.asn1.[ch]
CC io_uring/cancel.o
CC fs/isofs/dir.o
CC kernel/module/procfs.o
CC drivers/tty/vt/vt.o
CC security/selinux/ss/mls.o
CC lib/dim/rdma_dim.o
CC fs/netfs/iterator.o
AR lib/fonts/built-in.a
CC fs/netfs/locking.o
CC io_uring/waitid.o
CC lib/bug.o
CC net/core/gen_stats.o
CC kernel/futex/requeue.o
CC drivers/tty/serial/serial_ctrl.o
CC drivers/tty/serial/8250/8250_dma.o
CC kernel/module/sysfs.o
CC drivers/acpi/acpica/exconvrt.o
CC drivers/acpi/acpica/excreate.o
CC mm/slab_common.o
CC drivers/tty/tty_ldisc.o
CC fs/fat/namei_vfat.o
CC block/ioprio.o
CC drivers/virtio/virtio_pci_modern.o
CC lib/buildid.o
CC security/selinux/ss/context.o
AR lib/dim/built-in.a
CC lib/clz_tab.o
CC kernel/time/hrtimer.o
CC kernel/time/timekeeping.o
CC arch/x86/kernel/apic/msi.o
CC arch/x86/kernel/apic/probe_32.o
CC net/sched/cls_api.o
CC io_uring/register.o
CC fs/proc/fd.o
CC kernel/irq/pm.o
CC kernel/irq/msi.o
CC fs/isofs/util.o
ASN.1 crypto/rsaprivkey.asn1.[ch]
CC crypto/rsa.o
CC drivers/pci/slot.o
CC kernel/irq/affinity.o
CC net/core/gen_estimator.o
CC drivers/acpi/acpica/exdebug.o
CC net/core/net_namespace.o
CC crypto/rsa_helper.o
CC drivers/pci/pci-acpi.o
CC drivers/tty/tty_buffer.o
CC kernel/futex/waitwake.o
AR kernel/rcu/built-in.a
CC fs/fat/namei_msdos.o
CC lib/cmdline.o
CC lib/zstd/common/entropy_common.o
CC lib/zstd/common/error_private.o
CC lib/cpumask.o
CC io_uring/truncate.o
AR kernel/module/built-in.a
CC kernel/time/ntp.o
CC fs/proc/proc_tty.o
CC kernel/time/clocksource.o
CC fs/proc/cmdline.o
CC drivers/tty/serial/8250/8250_dwlib.o
CC fs/netfs/main.o
CC crypto/rsa-pkcs1pad.o
CC kernel/time/jiffies.o
CC kernel/time/timer_list.o
CC kernel/time/timeconv.o
CC lib/zstd/common/fse_decompress.o
CC drivers/virtio/virtio_pci_common.o
CC fs/isofs/rock.o
CC drivers/acpi/sleep.o
CC lib/zstd/common/zstd_common.o
CC block/badblocks.o
CC drivers/acpi/acpica/exdump.o
CC io_uring/memmap.o
CC io_uring/io-wq.o
AR arch/x86/kernel/apic/built-in.a
LDS arch/x86/kernel/vmlinux.lds
CC drivers/acpi/device_sysfs.o
AS arch/x86/kernel/head_32.o
CC block/blk-rq-qos.o
CC arch/x86/kernel/head32.o
CC security/selinux/netlabel.o
AR fs/jbd2/built-in.a
CC arch/x86/kernel/cpu/proc.o
CC io_uring/futex.o
CC kernel/bpf/core.o
CC io_uring/napi.o
CC [M] sound/core/pcm_lib.o
CC kernel/events/core.o
CC kernel/fork.o
CC fs/proc/consoles.o
CC kernel/time/timecounter.o
CC kernel/trace/trace_seq.o
CC kernel/events/ring_buffer.o
CC drivers/acpi/acpica/exfield.o
CC kernel/events/callchain.o
AR kernel/futex/built-in.a
CC kernel/events/hw_breakpoint.o
CC arch/x86/kernel/ebda.o
AR lib/zstd/built-in.a
CC lib/ctype.o
CC kernel/events/uprobes.o
CC lib/dec_and_lock.o
CC drivers/acpi/acpica/exfldio.o
AR fs/fat/built-in.a
COPY drivers/tty/vt/defkeymap.c
CC drivers/tty/vt/consolemap.o
CC drivers/tty/serial/8250/8250_pcilib.o
CC fs/netfs/misc.o
CC kernel/irq/matrix.o
HOSTCC drivers/tty/vt/conmakehash
CC crypto/acompress.o
CC kernel/time/alarmtimer.o
CC drivers/pci/iomap.o
CC lib/decompress.o
CC kernel/cgroup/namespace.o
CC kernel/time/posix-timers.o
CC lib/decompress_bunzip2.o
CC kernel/time/posix-cpu-timers.o
CC mm/compaction.o
CC arch/x86/kernel/platform-quirks.o
CC arch/x86/kernel/process_32.o
CC kernel/time/posix-clock.o
CC crypto/scompress.o
CC drivers/virtio/virtio_pci_legacy.o
CC drivers/tty/tty_port.o
CC fs/proc/cpuinfo.o
CC fs/proc/devices.o
CC fs/ext4/extents_status.o
CC fs/isofs/export.o
CC lib/decompress_inflate.o
CC block/disk-events.o
CC crypto/algboss.o
CC drivers/acpi/acpica/exmisc.o
CC net/core/secure_seq.o
CC kernel/time/itimer.o
AR sound/mips/built-in.a
CC crypto/testmgr.o
CC fs/ext4/file.o
CC fs/ext4/fsmap.o
CC drivers/acpi/device_pm.o
CC drivers/acpi/proc.o
CC drivers/tty/serial/8250/8250_early.o
CC arch/x86/kernel/cpu/feat_ctl.o
CC drivers/pci/quirks.o
CC drivers/acpi/acpica/exmutex.o
CC kernel/cgroup/cgroup-v1.o
AR sound/soc/built-in.a
AR security/selinux/built-in.a
CC kernel/cgroup/freezer.o
CC drivers/tty/vt/defkeymap.o
AR security/built-in.a
CC crypto/cmac.o
CONMK drivers/tty/vt/consolemap_deftbl.c
CC kernel/cgroup/legacy_freezer.o
CC drivers/tty/vt/consolemap_deftbl.o
CC drivers/acpi/acpica/exnames.o
CC [M] sound/core/pcm_misc.o
AR sound/atmel/built-in.a
CC lib/decompress_unlz4.o
CC drivers/acpi/acpica/exoparg1.o
CC [M] sound/core/pcm_memory.o
CC drivers/acpi/acpica/exoparg2.o
CC drivers/virtio/virtio_pci_admin_legacy_io.o
CC fs/proc/interrupts.o
CC fs/isofs/joliet.o
CC fs/netfs/objects.o
CC fs/nfs/client.o
CC net/core/flow_dissector.o
AR drivers/tty/vt/built-in.a
CC fs/nfs/dir.o
CC fs/exportfs/expfs.o
CC fs/lockd/clntlock.o
CC lib/decompress_unlzma.o
CC fs/lockd/clntproc.o
AR io_uring/built-in.a
CC net/core/sysctl_net_core.o
CC arch/x86/kernel/cpu/intel.o
AR kernel/irq/built-in.a
CC lib/decompress_unlzo.o
CC drivers/tty/tty_mutex.o
CC block/blk-ia-ranges.o
CC fs/ext4/fsync.o
CC net/core/dev.o
CC crypto/hmac.o
CC crypto/crypto_null.o
CC kernel/trace/trace_stat.o
CC drivers/tty/serial/8250/8250_exar.o
CC crypto/md5.o
CC arch/x86/kernel/cpu/intel_pconfig.o
CC net/sched/act_api.o
CC fs/ext4/hash.o
CC crypto/sha256_generic.o
CC drivers/acpi/acpica/exoparg3.o
CC net/sched/sch_fifo.o
CC drivers/acpi/bus.o
CC kernel/time/clockevents.o
CC fs/proc/loadavg.o
CC lib/decompress_unxz.o
CC fs/ext4/ialloc.o
CC kernel/cgroup/pids.o
CC [M] sound/core/memalloc.o
CC net/core/dev_addr_lists.o
CC drivers/virtio/virtio_input.o
CC fs/isofs/compress.o
CC [M] sound/core/pcm_timer.o
CC fs/ext4/indirect.o
CC block/early-lookup.o
AR fs/exportfs/built-in.a
CC drivers/tty/tty_ldsem.o
CC kernel/exec_domain.o
CC drivers/acpi/acpica/exoparg6.o
CC kernel/panic.o
CC fs/nls/nls_base.o
CC kernel/cpu.o
CC net/core/dst.o
CC fs/nls/nls_cp437.o
LD [M] sound/core/snd-hwdep.o
CC crypto/sha512_generic.o
CC lib/decompress_unzstd.o
CC crypto/sha3_generic.o
CC fs/proc/meminfo.o
AR fs/unicode/built-in.a
CC drivers/acpi/acpica/exprep.o
CC fs/netfs/write_collect.o
CC kernel/time/tick-common.o
CC drivers/acpi/acpica/exregion.o
CC kernel/trace/trace_printk.o
CC kernel/cgroup/rdma.o
CC drivers/pci/pci-label.o
CC drivers/acpi/glue.o
CC fs/netfs/write_issue.o
CC fs/proc/stat.o
AR kernel/bpf/built-in.a
AR sound/core/built-in.a
CC drivers/tty/tty_baudrate.o
CC drivers/tty/serial/8250/8250_lpss.o
CC kernel/exit.o
CC block/bounce.o
CC fs/nls/nls_ascii.o
CC fs/ext4/inline.o
CC arch/x86/kernel/cpu/tsx.o
CC drivers/virtio/virtio_dma_buf.o
CC fs/nls/nls_iso8859-1.o
CC fs/ext4/inode.o
CC block/bsg.o
CC drivers/acpi/acpica/exresnte.o
CC block/blk-cgroup.o
CC fs/lockd/clntxdr.o
CC drivers/acpi/acpica/exresolv.o
CC fs/nls/nls_utf8.o
LD [M] sound/core/snd-pcm.o
CC arch/x86/kernel/cpu/intel_epb.o
AR sound/hda/built-in.a
CC lib/dump_stack.o
CC [M] sound/hda/hda_bus_type.o
AR fs/isofs/built-in.a
CC fs/autofs/init.o
CC [M] sound/hda/hdac_bus.o
CC kernel/softirq.o
CC arch/x86/kernel/cpu/amd.o
CC arch/x86/kernel/cpu/hygon.o
CC crypto/ecb.o
CC [M] sound/hda/hdac_device.o
CC [M] sound/hda/hdac_sysfs.o
CC kernel/time/tick-broadcast.o
AR sound/x86/built-in.a
CC fs/ext4/ioctl.o
CC crypto/cbc.o
CC arch/x86/kernel/cpu/centaur.o
CC kernel/cgroup/cpuset.o
CC drivers/acpi/acpica/exresop.o
CC arch/x86/kernel/cpu/transmeta.o
AR fs/nls/built-in.a
CC fs/proc/uptime.o
CC drivers/pci/vgaarb.o
CC drivers/acpi/acpica/exserial.o
CC fs/ext4/mballoc.o
CC drivers/tty/tty_jobctrl.o
AR sound/xen/built-in.a
AR drivers/virtio/built-in.a
CC kernel/trace/pid_list.o
AR sound/virtio/built-in.a
CC sound/sound_core.o
CC drivers/tty/serial/8250/8250_mid.o
CC fs/9p/vfs_super.o
CC drivers/char/hw_random/core.o
CC mm/show_mem.o
CC drivers/char/agp/backend.o
CC fs/ext4/migrate.o
CC drivers/char/agp/generic.o
CC drivers/char/mem.o
CC net/sched/cls_cgroup.o
CC fs/autofs/inode.o
CC kernel/time/tick-broadcast-hrtimer.o
CC fs/autofs/root.o
CC kernel/trace/trace_sched_switch.o
CC lib/earlycpio.o
CC drivers/tty/n_null.o
CC crypto/ctr.o
CC crypto/gcm.o
CC crypto/ccm.o
CC drivers/acpi/acpica/exstore.o
CC lib/extable.o
CC lib/flex_proportions.o
CC drivers/char/hw_random/intel-rng.o
CC block/blk-ioprio.o
CC fs/proc/util.o
CC net/core/netevent.o
CC arch/x86/kernel/cpu/zhaoxin.o
AR fs/netfs/built-in.a
CC drivers/tty/pty.o
CC [M] sound/hda/hdac_regmap.o
CC drivers/char/agp/isoch.o
CC kernel/time/tick-oneshot.o
CC lib/idr.o
CC fs/lockd/host.o
CC [M] sound/hda/hdac_controller.o
CC drivers/acpi/acpica/exstoren.o
CC fs/9p/vfs_inode.o
AR drivers/iommu/amd/built-in.a
AR drivers/gpu/host1x/built-in.a
AR drivers/iommu/intel/built-in.a
CC drivers/tty/serial/8250/8250_pci.o
CC drivers/tty/tty_audit.o
CC drivers/char/random.o
CC lib/irq_regs.o
AR drivers/iommu/arm/arm-smmu/built-in.a
AR drivers/iommu/arm/arm-smmu-v3/built-in.a
AR drivers/iommu/arm/built-in.a
CC drivers/char/agp/amd64-agp.o
CC drivers/char/agp/intel-agp.o
AR drivers/iommu/iommufd/built-in.a
CC drivers/char/agp/intel-gtt.o
CC crypto/aes_generic.o
CC drivers/iommu/iommu.o
CC drivers/tty/sysrq.o
CC fs/ext4/mmp.o
CC arch/x86/kernel/cpu/vortex.o
CC fs/proc/version.o
CC drivers/connector/cn_queue.o
CC mm/shmem_quota.o
AR drivers/pci/built-in.a
AR drivers/gpu/drm/tests/built-in.a
AR drivers/gpu/drm/arm/built-in.a
CC fs/ext4/move_extent.o
CC fs/nfs/file.o
CC drivers/acpi/scan.o
CC drivers/gpu/drm/display/drm_display_helper_mod.o
CC fs/nfs/getroot.o
CC drivers/base/power/sysfs.o
CC lib/is_single_threaded.o
CC drivers/char/hw_random/amd-rng.o
CC kernel/time/tick-sched.o
CC drivers/gpu/drm/display/drm_dp_dual_mode_helper.o
CC fs/autofs/symlink.o
CC drivers/acpi/acpica/exstorob.o
CC block/blk-iolatency.o
CC drivers/base/regmap/regmap.o
AR fs/hostfs/built-in.a
CC drivers/base/firmware_loader/builtin/main.o
CC drivers/base/regmap/regcache.o
CC kernel/resource.o
CC drivers/base/regmap/regcache-rbtree.o
CC net/sched/ematch.o
CC crypto/crc32c_generic.o
CC drivers/base/regmap/regcache-flat.o
CC arch/x86/kernel/cpu/perfctr-watchdog.o
AR drivers/base/test/built-in.a
CC fs/ext4/namei.o
CC sound/last.o
CC drivers/block/loop.o
CC block/blk-iocost.o
CC fs/proc/softirqs.o
CC lib/klist.o
CC kernel/trace/trace_nop.o
CC drivers/acpi/acpica/exsystem.o
CC [M] sound/hda/hdac_stream.o
AR drivers/base/firmware_loader/builtin/built-in.a
CC drivers/base/firmware_loader/main.o
CC drivers/block/virtio_blk.o
CC drivers/base/power/generic_ops.o
CC mm/interval_tree.o
CC drivers/gpu/drm/ttm/ttm_tt.o
CC drivers/gpu/drm/ttm/ttm_bo.o
CC drivers/base/power/common.o
CC crypto/authenc.o
CC drivers/char/hw_random/geode-rng.o
CC fs/proc/namespaces.o
CC fs/autofs/waitq.o
CC lib/kobject.o
AR drivers/misc/eeprom/built-in.a
AR drivers/misc/cb710/built-in.a
AR drivers/misc/ti-st/built-in.a
CC fs/9p/vfs_inode_dotl.o
AR drivers/char/agp/built-in.a
AR drivers/gpu/vga/built-in.a
AR drivers/misc/lis3lv02d/built-in.a
CC drivers/base/regmap/regcache-maple.o
CC fs/9p/vfs_addr.o
CC drivers/connector/connector.o
AR drivers/misc/cardreader/built-in.a
CC fs/lockd/svc.o
AR drivers/misc/built-in.a
CC drivers/gpu/drm/display/drm_dp_helper.o
CC drivers/acpi/acpica/extrace.o
CC drivers/connector/cn_proc.o
CC lib/kobject_uevent.o
CC drivers/base/power/qos.o
CC net/netlink/af_netlink.o
CC arch/x86/kernel/cpu/vmware.o
CC drivers/gpu/drm/ttm/ttm_bo_util.o
CC kernel/cgroup/misc.o
CC net/netlink/genetlink.o
CC drivers/tty/serial/8250/8250_pericom.o
CC lib/logic_pio.o
CC fs/autofs/expire.o
CC lib/maple_tree.o
CC kernel/time/timer_migration.o
CC fs/ext4/page-io.o
CC kernel/trace/blktrace.o
CC drivers/char/hw_random/via-rng.o
CC drivers/acpi/acpica/exutils.o
AR net/sched/built-in.a
CC block/mq-deadline.o
AR kernel/events/built-in.a
CC lib/memcat_p.o
CC drivers/base/power/runtime.o
CC kernel/cgroup/debug.o
CC arch/x86/kernel/signal.o
CC lib/nmi_backtrace.o
CC mm/list_lru.o
CC fs/lockd/svclock.o
CC fs/proc/self.o
CC [M] sound/hda/array.o
CC fs/proc/thread_self.o
AR drivers/base/firmware_loader/built-in.a
CC arch/x86/kernel/cpu/hypervisor.o
CC fs/nfs/inode.o
CC lib/objpool.o
CC lib/plist.o
CC kernel/time/vsyscall.o
CC drivers/iommu/iommu-traces.o
CC fs/autofs/dev-ioctl.o
AR drivers/char/hw_random/built-in.a
CC drivers/char/misc.o
CC arch/x86/kernel/cpu/mshyperv.o
CC crypto/authencesn.o
CC drivers/iommu/iommu-sysfs.o
CC arch/x86/kernel/signal_32.o
CC fs/ext4/readpage.o
CC drivers/acpi/acpica/hwacpi.o
AR drivers/tty/serial/8250/built-in.a
CC fs/9p/vfs_file.o
CC drivers/tty/serial/serial_port.o
CC arch/x86/kernel/cpu/debugfs.o
CC drivers/gpu/drm/ttm/ttm_bo_vm.o
CC drivers/gpu/drm/ttm/ttm_module.o
CC drivers/gpu/drm/ttm/ttm_execbuf_util.o
AR drivers/block/built-in.a
AR drivers/connector/built-in.a
CC drivers/gpu/drm/ttm/ttm_range_manager.o
CC fs/ext4/resize.o
CC fs/proc/proc_sysctl.o
CC fs/ext4/super.o
AR drivers/mfd/built-in.a
CC [M] sound/hda/hdmi_chmap.o
AR drivers/nfc/built-in.a
CC fs/proc/proc_net.o
CC kernel/time/timekeeping_debug.o
CC fs/9p/vfs_dir.o
CC drivers/acpi/acpica/hwesleep.o
AR drivers/dax/hmem/built-in.a
AR drivers/dax/built-in.a
CC drivers/acpi/acpica/hwgpe.o
CC fs/proc/kcore.o
AR kernel/cgroup/built-in.a
CC drivers/gpu/drm/display/drm_dp_mst_topology.o
CC mm/workingset.o
CC kernel/sysctl.o
CC arch/x86/kernel/traps.o
CC crypto/lzo.o
CC fs/ext4/symlink.o
CC drivers/base/component.o
CC drivers/tty/serial/earlycon.o
CC drivers/char/virtio_console.o
CC drivers/base/power/wakeirq.o
CC drivers/gpu/drm/ttm/ttm_resource.o
CC arch/x86/kernel/cpu/capflags.o
CC drivers/gpu/drm/display/drm_dsc_helper.o
AR fs/autofs/built-in.a
CC drivers/gpu/drm/ttm/ttm_pool.o
CC [M] sound/hda/trace.o
CC fs/debugfs/inode.o
CC fs/tracefs/inode.o
CC [M] fs/efivarfs/inode.o
CC drivers/acpi/acpica/hwregs.o
AR arch/x86/kernel/cpu/built-in.a
CC drivers/iommu/dma-iommu.o
CC drivers/base/regmap/regmap-debugfs.o
CC arch/x86/kernel/idt.o
CC drivers/dma-buf/dma-buf.o
CC drivers/acpi/acpica/hwsleep.o
CC arch/x86/kernel/irq.o
CC fs/9p/vfs_dentry.o
AR drivers/cxl/core/built-in.a
CC fs/9p/v9fs.o
AR drivers/cxl/built-in.a
CC drivers/base/power/main.o
CC drivers/macintosh/mac_hid.o
AR drivers/scsi/pcmcia/built-in.a
CC drivers/scsi/scsi.o
CC fs/ext4/sysfs.o
CC kernel/time/namespace.o
CC drivers/scsi/hosts.o
CC fs/lockd/svcshare.o
CC crypto/lzo-rle.o
CC drivers/iommu/iova.o
CC fs/9p/fid.o
AR drivers/nvme/common/built-in.a
AR drivers/nvme/host/built-in.a
AR drivers/nvme/target/built-in.a
AR drivers/nvme/built-in.a
CC kernel/trace/trace_events.o
CC kernel/trace/trace_export.o
CC kernel/trace/trace_event_perf.o
CC mm/debug.o
CC fs/tracefs/event_inode.o
CC block/kyber-iosched.o
CC drivers/acpi/acpica/hwvalid.o
CC drivers/acpi/acpica/hwxface.o
CC fs/proc/vmcore.o
AR drivers/tty/serial/built-in.a
CC drivers/acpi/acpica/hwxfsleep.o
AR drivers/tty/built-in.a
CC fs/9p/xattr.o
CC [M] fs/efivarfs/file.o
CC arch/x86/kernel/irq_32.o
CC drivers/gpu/drm/ttm/ttm_device.o
AR drivers/macintosh/built-in.a
CC drivers/ata/libata-core.o
CC net/netlink/policy.o
CC drivers/ata/libata-scsi.o
AR drivers/base/regmap/built-in.a
CC drivers/gpu/drm/ttm/ttm_sys_manager.o
CC drivers/gpu/drm/display/drm_hdcp_helper.o
CC arch/x86/kernel/dumpstack_32.o
CC fs/ext4/xattr.o
CC arch/x86/kernel/time.o
CC drivers/base/core.o
CC arch/x86/kernel/ioport.o
CC fs/debugfs/file.o
CC crypto/rng.o
CC drivers/acpi/acpica/hwpci.o
CC fs/proc/kmsg.o
CC drivers/gpu/drm/display/drm_hdmi_helper.o
CC drivers/gpu/drm/display/drm_scdc_helper.o
CC [M] sound/hda/hdac_component.o
AR kernel/time/built-in.a
CC fs/ext4/xattr_hurd.o
CC mm/gup.o
CC drivers/char/hpet.o
CC fs/ext4/xattr_trusted.o
CC drivers/scsi/scsi_ioctl.o
CC drivers/dma-buf/dma-fence.o
CC drivers/scsi/scsicam.o
CC drivers/scsi/scsi_error.o
CC fs/ext4/xattr_user.o
CC drivers/gpu/drm/i915/i915_config.o
CC [M] fs/efivarfs/super.o
CC fs/ext4/fast_commit.o
AR fs/9p/built-in.a
CC drivers/dma-buf/dma-fence-array.o
CC [M] fs/efivarfs/vars.o
CC drivers/gpu/drm/i915/i915_driver.o
CC drivers/dma-buf/dma-fence-chain.o
CC fs/lockd/svcproc.o
CC drivers/acpi/acpica/nsaccess.o
CC fs/nfs/super.o
CC mm/mmap_lock.o
CC net/core/neighbour.o
AR fs/tracefs/built-in.a
CC drivers/scsi/scsi_lib.o
AR drivers/gpu/drm/renesas/rcar-du/built-in.a
AR drivers/gpu/drm/renesas/rz-du/built-in.a
AR drivers/gpu/drm/renesas/built-in.a
CC lib/radix-tree.o
CC drivers/gpu/drm/ttm/ttm_agp_backend.o
AR drivers/iommu/built-in.a
CC lib/ratelimit.o
CC lib/rbtree.o
CC drivers/char/nvram.o
CC fs/proc/page.o
CC drivers/scsi/constants.o
CC block/blk-mq-pci.o
CC [M] sound/hda/hdac_i915.o
CC drivers/acpi/mipi-disco-img.o
AR net/netlink/built-in.a
CC arch/x86/kernel/dumpstack.o
CC drivers/base/bus.o
CC crypto/drbg.o
AR drivers/gpu/drm/omapdrm/built-in.a
AR drivers/gpu/drm/tilcdc/built-in.a
CC fs/ext4/orphan.o
CC mm/highmem.o
CC drivers/gpu/drm/virtio/virtgpu_drv.o
CC drivers/base/power/wakeup.o
CC drivers/base/power/wakeup_stats.o
CC drivers/acpi/acpica/nsalloc.o
CC lib/seq_buf.o
CC arch/x86/kernel/nmi.o
CC drivers/acpi/resource.o
CC drivers/dma-buf/dma-fence-unwrap.o
CC drivers/acpi/acpi_processor.o
CC arch/x86/kernel/ldt.o
AR fs/debugfs/built-in.a
CC drivers/acpi/processor_core.o
CC block/blk-mq-virtio.o
CC fs/nfs/io.o
CC lib/siphash.o
LD [M] fs/efivarfs/efivarfs.o
CC drivers/base/power/trace.o
CC mm/memory.o
CC block/blk-mq-debugfs.o
AR drivers/gpu/drm/ttm/built-in.a
CC lib/string.o
CC drivers/acpi/acpica/nsarguments.o
CC mm/mincore.o
AR drivers/char/built-in.a
CC drivers/gpu/drm/virtio/virtgpu_kms.o
CC drivers/acpi/processor_pdc.o
AR fs/proc/built-in.a
CC [M] sound/hda/intel-dsp-config.o
CC lib/timerqueue.o
CC fs/open.o
CC lib/vsprintf.o
CC drivers/acpi/ec.o
CC drivers/firewire/init_ohci1394_dma.o
CC drivers/cdrom/cdrom.o
AR drivers/net/phy/qcom/built-in.a
CC drivers/net/phy/mdio-boardinfo.o
AR drivers/gpu/drm/display/built-in.a
CC lib/win_minmax.o
CC drivers/net/phy/stubs.o
CC fs/lockd/svcsubs.o
CC drivers/dma-buf/dma-resv.o
CC drivers/net/phy/mdio_devres.o
CC drivers/net/phy/phy.o
CC drivers/ata/libata-eh.o
CC lib/xarray.o
CC crypto/jitterentropy.o
CC drivers/scsi/scsi_lib_dma.o
CC kernel/trace/trace_events_filter.o
CC drivers/scsi/scsi_scan.o
CC drivers/acpi/acpica/nsconvert.o
CC fs/nfs/direct.o
CC crypto/jitterentropy-kcapi.o
AR drivers/net/pse-pd/built-in.a
CC [M] sound/hda/intel-nhlt.o
CC fs/ext4/acl.o
CC fs/nfs/pagelist.o
CC mm/mlock.o
CC fs/read_write.o
CC lib/lockref.o
CC drivers/net/phy/phy-c45.o
CC drivers/gpu/drm/virtio/virtgpu_gem.o
CC drivers/gpu/drm/virtio/virtgpu_vram.o
CC drivers/acpi/dock.o
CC drivers/net/phy/phy-core.o
CC arch/x86/kernel/setup.o
CC lib/bcd.o
CC fs/ext4/xattr_security.o
CC lib/sort.o
CC fs/lockd/mon.o
AR drivers/firewire/built-in.a
CC kernel/trace/trace_events_trigger.o
CC drivers/acpi/acpica/nsdump.o
CC drivers/gpu/drm/i915/i915_drm_client.o
AR drivers/auxdisplay/built-in.a
CC kernel/trace/trace_eprobe.o
CC drivers/acpi/acpica/nseval.o
CC block/blk-pm.o
AR drivers/base/power/built-in.a
CC drivers/ata/libata-transport.o
CC mm/mmap.o
CC arch/x86/kernel/x86_init.o
CC arch/x86/kernel/i8259.o
CC crypto/ghash-generic.o
CC drivers/acpi/pci_root.o
CC drivers/net/phy/phy_device.o
CC lib/parser.o
CC drivers/base/dd.o
CC [M] sound/hda/intel-sdw-acpi.o
CC drivers/net/mdio/acpi_mdio.o
CC drivers/dma-buf/sync_file.o
CC drivers/net/mdio/fwnode_mdio.o
CC arch/x86/kernel/irqinit.o
CC drivers/acpi/acpica/nsinit.o
CC drivers/acpi/pci_link.o
CC net/core/rtnetlink.o
CC drivers/gpu/drm/virtio/virtgpu_display.o
CC crypto/hash_info.o
CC fs/lockd/trace.o
CC fs/lockd/xdr.o
CC drivers/gpu/drm/virtio/virtgpu_vq.o
CC fs/lockd/clnt4xdr.o
CC crypto/rsapubkey.asn1.o
CC crypto/rsaprivkey.asn1.o
CC fs/lockd/xdr4.o
AR crypto/built-in.a
CC arch/x86/kernel/jump_label.o
CC net/core/utils.o
CC drivers/net/phy/linkmode.o
CC drivers/net/phy/mdio_bus.o
LD [M] sound/hda/snd-hda-core.o
LD [M] sound/hda/snd-intel-dspcfg.o
LD [M] sound/hda/snd-intel-sdw-acpi.o
AR sound/built-in.a
AR drivers/net/pcs/built-in.a
CC block/holder.o
CC drivers/net/phy/mdio_device.o
CC drivers/net/phy/swphy.o
GEN drivers/scsi/scsi_devinfo_tbl.c
CC drivers/acpi/acpica/nsload.o
CC drivers/scsi/scsi_devinfo.o
AR drivers/net/ethernet/3com/built-in.a
AR drivers/dma-buf/built-in.a
CC drivers/acpi/acpica/nsnames.o
CC drivers/net/ethernet/8390/ne2k-pci.o
CC fs/lockd/svc4proc.o
CC drivers/net/ethernet/8390/8390.o
AR drivers/net/wireless/admtek/built-in.a
AR drivers/net/wireless/ath/built-in.a
AR drivers/net/wireless/atmel/built-in.a
CC fs/lockd/procfs.o
AR drivers/net/wireless/broadcom/built-in.a
AR drivers/cdrom/built-in.a
AR drivers/net/wireless/intel/built-in.a
CC drivers/scsi/scsi_sysctl.o
AR drivers/net/wireless/intersil/built-in.a
CC drivers/net/phy/fixed_phy.o
AR drivers/net/wireless/marvell/built-in.a
CC fs/nfs/read.o
AR drivers/net/wireless/mediatek/built-in.a
CC fs/file_table.o
AR drivers/net/wireless/microchip/built-in.a
AR drivers/net/wireless/purelifi/built-in.a
CC fs/super.o
CC drivers/base/syscore.o
AR drivers/net/wireless/quantenna/built-in.a
CC kernel/trace/trace_kprobe.o
AR drivers/net/wireless/ralink/built-in.a
CC net/core/link_watch.o
AR drivers/net/wireless/realtek/built-in.a
CC drivers/ata/libata-trace.o
AR drivers/net/wireless/rsi/built-in.a
AR drivers/net/wireless/silabs/built-in.a
AR drivers/net/wireless/st/built-in.a
CC drivers/net/phy/realtek.o
AR drivers/net/mdio/built-in.a
CC drivers/pcmcia/cs.o
AR drivers/net/wireless/ti/built-in.a
CC drivers/acpi/acpica/nsobject.o
AR drivers/net/usb/built-in.a
AR drivers/net/wireless/zydas/built-in.a
CC arch/x86/kernel/irq_work.o
CC drivers/pcmcia/socket_sysfs.o
AR drivers/net/wireless/virtual/built-in.a
AR drivers/net/wireless/built-in.a
CC drivers/gpu/drm/i915/i915_getparam.o
CC drivers/pcmcia/cardbus.o
CC drivers/acpi/acpica/nsparse.o
CC drivers/gpu/drm/virtio/virtgpu_fence.o
CC drivers/pcmcia/ds.o
CC drivers/scsi/scsi_proc.o
AR drivers/gpu/drm/imx/built-in.a
CC drivers/pcmcia/pcmcia_resource.o
CC drivers/usb/common/common.o
AR block/built-in.a
CC drivers/usb/core/usb.o
AR drivers/usb/phy/built-in.a
CC drivers/usb/core/hub.o
CC drivers/acpi/acpica/nspredef.o
CC drivers/acpi/acpica/nsprepkg.o
CC lib/debug_locks.o
CC lib/random32.o
CC drivers/usb/core/hcd.o
CC drivers/ata/libata-sata.o
CC drivers/usb/mon/mon_main.o
CC drivers/usb/host/pci-quirks.o
CC drivers/acpi/acpica/nsrepair.o
CC drivers/usb/class/usblp.o
CC drivers/acpi/acpica/nsrepair2.o
CC drivers/input/serio/serio.o
CC drivers/usb/mon/mon_stat.o
AR drivers/gpu/drm/i2c/built-in.a
CC drivers/usb/mon/mon_text.o
CC drivers/usb/mon/mon_bin.o
AR drivers/gpu/drm/panel/built-in.a
CC fs/nfs/symlink.o
AR drivers/gpu/drm/bridge/analogix/built-in.a
CC mm/mmu_gather.o
AR drivers/gpu/drm/bridge/cadence/built-in.a
CC drivers/acpi/acpica/nssearch.o
CC drivers/gpu/drm/i915/i915_ioctl.o
AR drivers/gpu/drm/bridge/imx/built-in.a
AR drivers/net/ethernet/8390/built-in.a
AR drivers/gpu/drm/bridge/synopsys/built-in.a
AR drivers/gpu/drm/bridge/built-in.a
CC drivers/gpu/drm/i915/i915_irq.o
AR drivers/net/ethernet/adaptec/built-in.a
AR drivers/net/ethernet/agere/built-in.a
CC drivers/input/keyboard/atkbd.o
AR drivers/net/ethernet/alacritech/built-in.a
CC drivers/acpi/acpica/nsutils.o
AR drivers/net/ethernet/alteon/built-in.a
CC drivers/pcmcia/cistpl.o
CC lib/bust_spinlocks.o
AR fs/lockd/built-in.a
CC fs/nfs/unlink.o
AR drivers/net/ethernet/amazon/built-in.a
CC fs/char_dev.o
CC lib/kasprintf.o
AR drivers/net/ethernet/amd/built-in.a
CC lib/bitmap.o
CC drivers/usb/common/debug.o
CC kernel/trace/error_report-traces.o
AR drivers/net/ethernet/aquantia/built-in.a
CC drivers/base/driver.o
CC drivers/input/serio/i8042.o
AR drivers/net/ethernet/arc/built-in.a
CC drivers/gpu/drm/virtio/virtgpu_object.o
CC fs/nfs/write.o
AR drivers/net/ethernet/asix/built-in.a
AR drivers/net/ethernet/atheros/built-in.a
AR drivers/net/ethernet/cadence/built-in.a
CC kernel/capability.o
CC drivers/net/ethernet/broadcom/bnx2.o
AR drivers/usb/common/built-in.a
AR net/bpf/built-in.a
CC mm/mprotect.o
CC drivers/scsi/scsi_debugfs.o
CC drivers/acpi/acpica/nswalk.o
CC mm/mremap.o
CC drivers/input/serio/serport.o
AR drivers/net/phy/built-in.a
CC drivers/acpi/acpica/nsxfeval.o
CC drivers/rtc/lib.o
CC drivers/net/mii.o
CC arch/x86/kernel/probe_roms.o
CC drivers/input/serio/libps2.o
CC drivers/rtc/class.o
CC drivers/ata/libata-sff.o
CC arch/x86/kernel/sys_ia32.o
CC fs/stat.o
CC mm/msync.o
CC drivers/net/loopback.o
CC net/ethtool/ioctl.o
CC arch/x86/kernel/ksysfs.o
CC lib/scatterlist.o
CC drivers/net/netconsole.o
CC drivers/base/class.o
AR drivers/usb/class/built-in.a
CC drivers/usb/host/ehci-hcd.o
CC lib/list_sort.o
CC drivers/rtc/interface.o
CC drivers/input/mouse/psmouse-base.o
CC lib/uuid.o
CC drivers/input/mouse/synaptics.o
CC drivers/pcmcia/pcmcia_cis.o
CC arch/x86/kernel/bootflag.o
CC drivers/net/virtio_net.o
CC drivers/acpi/acpica/nsxfname.o
CC drivers/net/ethernet/broadcom/tg3.o
CC drivers/ata/libata-pmp.o
CC drivers/gpu/drm/i915/i915_mitigations.o
CC lib/iov_iter.o
CC kernel/trace/power-traces.o
AR drivers/usb/mon/built-in.a
CC drivers/gpu/drm/virtio/virtgpu_debugfs.o
CC fs/exec.o
CC kernel/trace/rpm-traces.o
CC drivers/usb/storage/scsiglue.o
AR drivers/usb/misc/built-in.a
CC drivers/pcmcia/rsrc_mgr.o
CC drivers/usb/storage/protocol.o
AR drivers/input/keyboard/built-in.a
CC lib/clz_ctz.o
CC arch/x86/kernel/e820.o
CC drivers/scsi/scsi_trace.o
CC arch/x86/kernel/pci-dma.o
CC net/netfilter/core.o
CC net/netfilter/nf_log.o
CC drivers/rtc/nvmem.o
CC fs/nfs/namespace.o
CC arch/x86/kernel/quirks.o
CC drivers/usb/storage/transport.o
CC drivers/usb/storage/usb.o
CC drivers/acpi/acpica/nsxfobj.o
AR drivers/input/serio/built-in.a
CC fs/nfs/mount_clnt.o
CC drivers/acpi/acpica/psargs.o
CC drivers/acpi/pci_irq.o
CC mm/page_vma_mapped.o
CC net/ipv4/netfilter/nf_defrag_ipv4.o
CC drivers/base/platform.o
CC net/ipv4/route.o
CC drivers/acpi/acpi_apd.o
CC drivers/rtc/dev.o
CC fs/pipe.o
CC drivers/gpu/drm/virtio/virtgpu_plane.o
CC drivers/acpi/acpica/psloop.o
CC drivers/gpu/drm/i915/i915_module.o
CC drivers/usb/storage/initializers.o
CC net/ipv4/netfilter/nf_reject_ipv4.o
CC fs/namei.o
CC mm/pagewalk.o
CC drivers/pcmcia/rsrc_nonstatic.o
CC drivers/usb/core/urb.o
CC lib/bsearch.o
CC drivers/gpu/drm/virtio/virtgpu_ioctl.o
CC drivers/gpu/drm/i915/i915_params.o
CC drivers/acpi/acpica/psobject.o
CC drivers/scsi/scsi_logging.o
CC net/ipv4/netfilter/ip_tables.o
CC drivers/rtc/proc.o
CC drivers/acpi/acpi_platform.o
CC drivers/input/mouse/focaltech.o
CC drivers/acpi/acpi_pnp.o
CC mm/pgtable-generic.o
CC drivers/gpu/drm/i915/i915_pci.o
CC net/core/filter.o
CC drivers/usb/core/message.o
CC arch/x86/kernel/kdebugfs.o
CC mm/rmap.o
CC mm/vmalloc.o
CC arch/x86/kernel/alternative.o
CC arch/x86/kernel/i8253.o
CC drivers/scsi/scsi_pm.o
CC net/netfilter/nf_queue.o
CC drivers/usb/storage/sierra_ms.o
CC drivers/acpi/acpica/psopcode.o
CC drivers/input/mouse/alps.o
CC net/ipv4/inetpeer.o
CC lib/find_bit.o
CC drivers/ata/libata-acpi.o
CC drivers/i2c/algos/i2c-algo-bit.o
CC drivers/base/cpu.o
CC drivers/base/firmware.o
CC drivers/i2c/busses/i2c-i801.o
CC drivers/base/init.o
CC drivers/rtc/sysfs.o
CC drivers/rtc/rtc-mc146818-lib.o
AR fs/ext4/built-in.a
CC net/ipv4/netfilter/iptable_filter.o
AR drivers/i2c/muxes/built-in.a
CC mm/process_vm_access.o
CC kernel/trace/trace_dynevent.o
AR drivers/net/ethernet/brocade/built-in.a
CC net/netfilter/nf_sockopt.o
CC net/ipv4/protocol.o
CC drivers/acpi/acpica/psopinfo.o
CC net/ipv4/netfilter/iptable_mangle.o
CC drivers/pcmcia/yenta_socket.o
CC drivers/gpu/drm/virtio/virtgpu_prime.o
CC arch/x86/kernel/hw_breakpoint.o
CC drivers/gpu/drm/virtio/virtgpu_trace_points.o
CC arch/x86/kernel/tsc.o
CC fs/fcntl.o
CC lib/llist.o
CC drivers/ata/libata-pata-timings.o
AR drivers/net/ethernet/chelsio/built-in.a
AR drivers/net/ethernet/cavium/common/built-in.a
CC drivers/gpu/drm/i915/i915_scatterlist.o
CC fs/ioctl.o
AR drivers/net/ethernet/cavium/liquidio/built-in.a
AR drivers/net/ethernet/cavium/thunder/built-in.a
CC drivers/gpu/drm/i915/i915_suspend.o
AR drivers/net/ethernet/cavium/octeon/built-in.a
AR drivers/net/ethernet/cavium/built-in.a
CC net/ipv4/ip_input.o
CC drivers/scsi/scsi_bsg.o
CC lib/lwq.o
CC fs/nfs/nfstrace.o
CC net/ethtool/common.o
CC net/ipv4/netfilter/ipt_REJECT.o
CC drivers/usb/storage/option_ms.o
CC fs/readdir.o
CC drivers/acpi/acpica/psparse.o
CC drivers/usb/storage/usual-tables.o
CC lib/memweight.o
CC arch/x86/kernel/tsc_msr.o
CC kernel/ptrace.o
CC lib/kfifo.o
CC drivers/rtc/rtc-cmos.o
AR drivers/i2c/algos/built-in.a
CC drivers/i2c/i2c-boardinfo.o
CC drivers/base/map.o
CC drivers/usb/host/ehci-pci.o
CC drivers/i2c/i2c-core-base.o
CC drivers/acpi/acpica/psscope.o
CC mm/page_alloc.o
CC drivers/base/devres.o
CC lib/percpu-refcount.o
CC [M] net/ipv4/netfilter/iptable_nat.o
CC kernel/trace/trace_probe.o
CC drivers/usb/host/ohci-hcd.o
CC drivers/usb/core/driver.o
CC drivers/base/attribute_container.o
CC drivers/base/transport_class.o
CC drivers/scsi/scsi_common.o
CC net/ipv4/ip_fragment.o
CC drivers/gpu/drm/virtio/virtgpu_submit.o
CC net/netfilter/utils.o
CC drivers/usb/core/config.o
CC drivers/ata/ahci.o
CC drivers/ata/libahci.o
CC drivers/scsi/scsi_transport_spi.o
CC drivers/scsi/virtio_scsi.o
CC net/netfilter/nfnetlink.o
CC drivers/base/topology.o
AR drivers/i2c/busses/built-in.a
AR drivers/usb/storage/built-in.a
CC drivers/scsi/sd.o
CC drivers/usb/early/ehci-dbgp.o
CC drivers/scsi/sr.o
CC drivers/acpi/acpica/pstree.o
CC arch/x86/kernel/io_delay.o
CC fs/select.o
CC drivers/input/mouse/byd.o
CC drivers/gpu/drm/i915/i915_switcheroo.o
AR drivers/pcmcia/built-in.a
CC drivers/ata/ata_piix.o
CC arch/x86/kernel/rtc.o
CC lib/rhashtable.o
CC net/ipv4/ip_forward.o
CC drivers/scsi/sr_ioctl.o
CC drivers/scsi/sr_vendor.o
CC drivers/i2c/i2c-core-smbus.o
CC net/ethtool/netlink.o
CC net/core/sock_diag.o
CC drivers/base/container.o
CC drivers/scsi/sg.o
CC arch/x86/kernel/resource.o
AR drivers/i3c/built-in.a
AR net/ipv4/netfilter/built-in.a
CC net/ipv4/ip_options.o
CC drivers/base/property.o
CC drivers/acpi/acpica/psutils.o
AR drivers/rtc/built-in.a
CC net/xfrm/xfrm_policy.o
CC lib/base64.o
CC mm/init-mm.o
CC net/xfrm/xfrm_state.o
CC drivers/input/mouse/logips2pp.o
CC net/ipv4/ip_output.o
AR drivers/media/i2c/built-in.a
AR drivers/media/tuners/built-in.a
AR drivers/media/rc/keymaps/built-in.a
AR drivers/media/rc/built-in.a
AR drivers/gpu/drm/virtio/built-in.a
CC kernel/user.o
CC kernel/signal.o
AR drivers/media/common/b2c2/built-in.a
AR drivers/media/common/saa7146/built-in.a
CC drivers/net/net_failover.o
AR drivers/media/common/siano/built-in.a
CC drivers/base/cacheinfo.o
CC kernel/sys.o
AR drivers/media/common/v4l2-tpg/built-in.a
AR drivers/media/common/videobuf2/built-in.a
AR drivers/media/common/built-in.a
AS arch/x86/kernel/irqflags.o
CC drivers/acpi/acpica/pswalk.o
AR drivers/net/ethernet/cisco/built-in.a
CC arch/x86/kernel/static_call.o
AR drivers/media/platform/allegro-dvt/built-in.a
CC drivers/acpi/acpica/psxface.o
CC drivers/acpi/acpica/rsaddr.o
AR drivers/media/platform/amlogic/meson-ge2d/built-in.a
AR drivers/media/platform/amlogic/built-in.a
AR drivers/media/platform/amphion/built-in.a
AR drivers/media/platform/aspeed/built-in.a
CC drivers/base/swnode.o
AR drivers/media/platform/atmel/built-in.a
AR drivers/usb/early/built-in.a
CC net/ethtool/bitset.o
CC drivers/usb/core/file.o
AR drivers/media/platform/broadcom/built-in.a
AR drivers/media/platform/cadence/built-in.a
AR drivers/media/platform/chips-media/coda/built-in.a
AR drivers/media/platform/chips-media/wave5/built-in.a
AR drivers/media/platform/chips-media/built-in.a
CC drivers/base/auxiliary.o
CC net/ethtool/strset.o
AR drivers/media/platform/intel/built-in.a
AR drivers/media/platform/marvell/built-in.a
CC drivers/usb/core/buffer.o
AR drivers/media/platform/mediatek/jpeg/built-in.a
CC net/ethtool/linkinfo.o
CC kernel/umh.o
AR drivers/media/platform/microchip/built-in.a
CC net/netfilter/nfnetlink_log.o
CC net/xfrm/xfrm_hash.o
AR drivers/media/platform/mediatek/mdp/built-in.a
AR drivers/net/ethernet/cortina/built-in.a
AR drivers/media/platform/mediatek/vcodec/common/built-in.a
AR drivers/net/ethernet/dec/tulip/built-in.a
AR drivers/media/platform/mediatek/vcodec/encoder/built-in.a
AR drivers/net/ethernet/dec/built-in.a
CC lib/once.o
AR drivers/media/platform/mediatek/vcodec/decoder/built-in.a
CC drivers/gpu/drm/i915/i915_sysfs.o
AR drivers/media/platform/mediatek/vcodec/built-in.a
CC drivers/input/mouse/lifebook.o
CC drivers/usb/core/sysfs.o
CC net/netfilter/nf_conntrack_core.o
CC net/ipv4/ip_sockglue.o
AR drivers/media/platform/mediatek/vpu/built-in.a
CC lib/refcount.o
AR drivers/media/platform/mediatek/mdp3/built-in.a
AR drivers/media/platform/mediatek/built-in.a
CC kernel/trace/trace_uprobe.o
AR drivers/media/platform/nuvoton/built-in.a
CC kernel/trace/rethook.o
AR drivers/media/platform/nvidia/tegra-vde/built-in.a
CC arch/x86/kernel/process.o
CC arch/x86/kernel/ptrace.o
CC drivers/acpi/acpica/rscalc.o
AR drivers/media/platform/nvidia/built-in.a
AR drivers/media/platform/nxp/dw100/built-in.a
AR drivers/media/platform/nxp/imx-jpeg/built-in.a
AR drivers/media/platform/qcom/camss/built-in.a
AR drivers/media/platform/nxp/imx8-isi/built-in.a
AR drivers/media/platform/nxp/built-in.a
AR drivers/media/platform/qcom/venus/built-in.a
AR drivers/media/platform/qcom/built-in.a
CC arch/x86/kernel/tls.o
AR drivers/media/platform/renesas/rcar-vin/built-in.a
AR drivers/media/platform/renesas/rzg2l-cru/built-in.a
CC arch/x86/kernel/step.o
AR drivers/media/platform/renesas/vsp1/built-in.a
AR drivers/media/platform/renesas/built-in.a
AR drivers/media/platform/rockchip/rga/built-in.a
CC fs/nfs/export.o
AR drivers/media/platform/rockchip/rkisp1/built-in.a
CC lib/rcuref.o
AR drivers/media/platform/rockchip/built-in.a
CC drivers/scsi/scsi_sysfs.o
CC mm/memblock.o
AR drivers/media/platform/samsung/exynos-gsc/built-in.a
CC net/netfilter/nf_conntrack_standalone.o
AR drivers/media/platform/samsung/exynos4-is/built-in.a
CC net/netfilter/nf_conntrack_expect.o
AR drivers/media/platform/samsung/s3c-camif/built-in.a
CC kernel/workqueue.o
AR drivers/media/platform/samsung/s5p-g2d/built-in.a
CC drivers/ata/pata_amd.o
CC net/xfrm/xfrm_input.o
CC net/ethtool/linkmodes.o
AR drivers/media/platform/samsung/s5p-jpeg/built-in.a
CC drivers/ata/pata_oldpiix.o
CC net/ipv4/inet_hashtables.o
AR drivers/media/platform/samsung/s5p-mfc/built-in.a
AR drivers/media/platform/samsung/built-in.a
CC drivers/usb/host/ohci-pci.o
CC lib/usercopy.o
CC drivers/i2c/i2c-core-acpi.o
AR drivers/media/platform/st/sti/bdisp/built-in.a
AR drivers/media/platform/sunxi/sun4i-csi/built-in.a
AR drivers/media/platform/st/sti/c8sectpfe/built-in.a
CC net/ipv4/inet_timewait_sock.o
AR drivers/media/platform/sunxi/sun6i-csi/built-in.a
AR drivers/media/platform/st/sti/delta/built-in.a
CC drivers/base/devtmpfs.o
CC drivers/acpi/acpica/rscreate.o
AR drivers/media/platform/sunxi/sun6i-mipi-csi2/built-in.a
AR drivers/media/platform/st/sti/hva/built-in.a
AR drivers/pps/clients/built-in.a
AR drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/built-in.a
AR drivers/media/platform/st/stm32/built-in.a
AR drivers/media/platform/st/built-in.a
AR drivers/pps/generators/built-in.a
CC drivers/input/mouse/trackpoint.o
AR drivers/media/platform/sunxi/sun8i-di/built-in.a
CC drivers/pps/pps.o
CC drivers/ptp/ptp_clock.o
AR drivers/media/platform/sunxi/sun8i-rotate/built-in.a
AR drivers/media/platform/sunxi/built-in.a
AR drivers/media/platform/ti/am437x/built-in.a
AR drivers/media/platform/ti/cal/built-in.a
CC net/core/dev_ioctl.o
AR drivers/media/platform/ti/vpe/built-in.a
AR drivers/media/platform/verisilicon/built-in.a
CC net/core/tso.o
AR drivers/media/platform/ti/davinci/built-in.a
AR drivers/media/platform/ti/j721e-csi2rx/built-in.a
AR drivers/media/platform/ti/omap/built-in.a
AR drivers/media/platform/ti/omap3isp/built-in.a
CC drivers/i2c/i2c-smbus.o
AR drivers/media/platform/ti/built-in.a
CC lib/errseq.o
CC lib/bucket_locks.o
CC net/ipv4/inet_connection_sock.o
AR drivers/media/platform/via/built-in.a
AR drivers/media/platform/xilinx/built-in.a
AR drivers/media/platform/built-in.a
CC mm/slub.o
CC drivers/gpu/drm/i915/i915_utils.o
CC lib/generic-radix-tree.o
CC net/ethtool/rss.o
CC drivers/usb/core/endpoint.o
AR drivers/media/pci/ttpci/built-in.a
CC drivers/acpi/acpica/rsdumpinfo.o
AR drivers/media/pci/b2c2/built-in.a
CC drivers/acpi/acpica/rsinfo.o
AR drivers/media/pci/pluto2/built-in.a
AR drivers/media/pci/dm1105/built-in.a
AR drivers/media/pci/pt1/built-in.a
AR drivers/media/pci/pt3/built-in.a
AR drivers/media/pci/mantis/built-in.a
CC drivers/acpi/acpica/rsio.o
AR drivers/media/pci/ngene/built-in.a
CC net/ipv4/tcp.o
AR drivers/media/pci/ddbridge/built-in.a
CC mm/madvise.o
AR drivers/media/pci/saa7146/built-in.a
CC drivers/usb/host/uhci-hcd.o
AR drivers/media/pci/smipcie/built-in.a
AR drivers/media/pci/netup_unidvb/built-in.a
AR drivers/media/pci/intel/ipu3/built-in.a
AR drivers/media/pci/intel/ivsc/built-in.a
AR drivers/media/pci/intel/built-in.a
AR drivers/media/pci/built-in.a
CC drivers/pps/kapi.o
CC drivers/ata/pata_sch.o
CC drivers/ata/pata_mpiix.o
AR drivers/media/usb/b2c2/built-in.a
AR drivers/media/usb/dvb-usb/built-in.a
CC drivers/input/mouse/cypress_ps2.o
AR drivers/media/usb/dvb-usb-v2/built-in.a
AR drivers/media/usb/s2255/built-in.a
CC drivers/input/mouse/psmouse-smbus.o
AR drivers/media/usb/siano/built-in.a
CC kernel/pid.o
CC drivers/acpi/acpica/rsirq.o
AR drivers/media/usb/ttusb-budget/built-in.a
CC arch/x86/kernel/i8237.o
AR drivers/media/usb/ttusb-dec/built-in.a
AR drivers/media/usb/built-in.a
CC drivers/acpi/acpica/rslist.o
CC lib/bitmap-str.o
CC arch/x86/kernel/stacktrace.o
AR drivers/media/mmc/siano/built-in.a
CC drivers/base/module.o
CC drivers/power/supply/power_supply_core.o
AR drivers/media/mmc/built-in.a
CC drivers/hwmon/hwmon.o
AR drivers/media/firewire/built-in.a
AR drivers/media/spi/built-in.a
CC drivers/power/supply/power_supply_sysfs.o
CC net/ipv4/tcp_input.o
AR drivers/media/test-drivers/built-in.a
AR drivers/media/built-in.a
AR drivers/scsi/built-in.a
CC net/netfilter/nf_conntrack_helper.o
CC lib/string_helpers.o
CC drivers/ptp/ptp_chardev.o
CC drivers/ata/ata_generic.o
AR drivers/i2c/built-in.a
CC drivers/ptp/ptp_sysfs.o
CC drivers/usb/core/devio.o
CC fs/dcache.o
CC drivers/acpi/power.o
CC fs/nfs/sysfs.o
CC fs/nfs/fs_context.o
AR drivers/net/ethernet/dlink/built-in.a
CC net/ipv4/tcp_output.o
CC arch/x86/kernel/reboot.o
AR drivers/net/ethernet/emulex/built-in.a
AR kernel/trace/built-in.a
AR drivers/net/ethernet/engleder/built-in.a
CC net/core/sock_reuseport.o
CC drivers/acpi/acpica/rsmemory.o
CC kernel/task_work.o
AR drivers/input/joystick/built-in.a
CC drivers/pps/sysfs.o
CC net/ipv4/tcp_timer.o
AR drivers/input/tablet/built-in.a
AR drivers/input/touchscreen/built-in.a
CC drivers/gpu/drm/i915/intel_clock_gating.o
CC drivers/base/devcoredump.o
CC drivers/gpu/drm/i915/intel_device_info.o
CC net/ethtool/linkstate.o
CC net/ethtool/debug.o
AR drivers/thermal/broadcom/built-in.a
CC net/core/fib_notifier.o
AR drivers/thermal/samsung/built-in.a
CC drivers/thermal/intel/intel_tcc.o
AR drivers/thermal/st/built-in.a
AR drivers/thermal/qcom/built-in.a
CC drivers/usb/core/notify.o
CC drivers/usb/core/generic.o
CC drivers/thermal/intel/therm_throt.o
CC drivers/usb/core/quirks.o
CC net/ethtool/wol.o
CC [M] drivers/thermal/intel/x86_pkg_temp_thermal.o
AR drivers/thermal/tegra/built-in.a
CC drivers/acpi/acpica/rsmisc.o
CC drivers/acpi/acpica/rsserial.o
AR drivers/input/mouse/built-in.a
CC arch/x86/kernel/msr.o
AR drivers/input/misc/built-in.a
CC drivers/ptp/ptp_vclock.o
CC drivers/input/input.o
AR drivers/pps/built-in.a
CC drivers/power/supply/power_supply_leds.o
CC kernel/extable.o
CC lib/hexdump.o
CC net/ipv4/tcp_ipv4.o
CC arch/x86/kernel/cpuid.o
CC fs/inode.o
AR drivers/ata/built-in.a
CC drivers/acpi/acpica/rsutils.o
CC net/ethtool/features.o
CC lib/kstrtox.o
CC drivers/ptp/ptp_kvm_x86.o
CC net/ipv4/tcp_minisocks.o
CC drivers/ptp/ptp_kvm_common.o
CC net/xfrm/xfrm_output.o
CC net/xfrm/xfrm_sysctl.o
CC drivers/base/platform-msi.o
CC drivers/acpi/event.o
AR drivers/hwmon/built-in.a
AR drivers/watchdog/built-in.a
CC drivers/gpu/drm/i915/intel_memory_region.o
CC net/unix/af_unix.o
AR drivers/thermal/mediatek/built-in.a
CC drivers/power/supply/power_supply_hwmon.o
CC drivers/gpu/drm/i915/intel_pcode.o
CC drivers/thermal/thermal_core.o
CC net/unix/garbage.o
CC net/netfilter/nf_conntrack_proto.o
CC drivers/usb/host/xhci.o
CC net/ipv4/tcp_cong.o
CC drivers/md/md.o
CC drivers/md/md-bitmap.o
CC drivers/md/md-autodetect.o
CC net/ipv6/af_inet6.o
CC net/ipv6/netfilter/ip6_tables.o
CC drivers/acpi/acpica/rsxface.o
CC net/ipv6/anycast.o
CC lib/iomap.o
CC net/netfilter/nf_conntrack_proto_generic.o
CC lib/iomap_copy.o
CC arch/x86/kernel/early-quirks.o
CC net/ipv6/netfilter/ip6table_filter.o
CC net/xfrm/xfrm_replay.o
CC drivers/base/physical_location.o
CC drivers/gpu/drm/i915/intel_region_ttm.o
CC lib/devres.o
CC drivers/usb/host/xhci-mem.o
AR drivers/thermal/intel/built-in.a
CC arch/x86/kernel/smp.o
AR drivers/power/supply/built-in.a
CC kernel/params.o
AR drivers/power/built-in.a
CC drivers/cpufreq/cpufreq.o
CC net/ethtool/privflags.o
AR drivers/ptp/built-in.a
CC drivers/cpufreq/freq_table.o
CC drivers/acpi/acpica/tbdata.o
CC net/ethtool/rings.o
CC drivers/gpu/drm/i915/intel_runtime_pm.o
CC drivers/base/trace.o
CC drivers/usb/core/devices.o
CC net/ethtool/channels.o
CC net/ipv4/tcp_metrics.o
CC net/xfrm/xfrm_device.o
CC lib/check_signature.o
CC drivers/acpi/acpica/tbfadt.o
CC drivers/input/input-compat.o
CC net/ipv4/tcp_fastopen.o
CC net/unix/sysctl_net_unix.o
CC lib/interval_tree.o
CC net/packet/af_packet.o
CC net/core/xdp.o
CC drivers/cpufreq/cpufreq_performance.o
CC drivers/usb/core/phy.o
CC net/ipv6/netfilter/ip6table_mangle.o
CC net/xfrm/xfrm_algo.o
CC drivers/md/dm.o
CC drivers/cpuidle/governors/menu.o
CC net/xfrm/xfrm_user.o
CC lib/assoc_array.o
AR drivers/mmc/built-in.a
CC fs/nfs/nfsroot.o
AR net/dsa/built-in.a
CC drivers/acpi/acpica/tbfind.o
CC net/ipv4/tcp_rate.o
CC mm/page_io.o
CC fs/nfs/sysctl.o
CC net/core/flow_offload.o
CC drivers/thermal/thermal_sysfs.o
CC net/netfilter/nf_conntrack_proto_tcp.o
CC drivers/md/dm-table.o
AR drivers/base/built-in.a
CC drivers/input/input-mt.o
CC kernel/kthread.o
CC drivers/acpi/evged.o
CC net/ipv4/tcp_recovery.o
CC net/ethtool/coalesce.o
CC net/core/gro.o
CC net/ethtool/pause.o
CC drivers/gpu/drm/i915/intel_sbi.o
CC drivers/thermal/thermal_trip.o
CC arch/x86/kernel/smpboot.o
CC net/ethtool/eee.o
AR drivers/net/ethernet/broadcom/built-in.a
CC drivers/acpi/acpica/tbinstal.o
AR drivers/net/ethernet/ezchip/built-in.a
CC drivers/gpu/drm/i915/intel_step.o
AR drivers/net/ethernet/fujitsu/built-in.a
AR drivers/net/ethernet/fungible/built-in.a
AR drivers/net/ethernet/google/built-in.a
CC net/ipv6/ip6_output.o
AR drivers/net/ethernet/huawei/built-in.a
CC drivers/cpuidle/governors/haltpoll.o
CC drivers/usb/core/port.o
AR drivers/net/ethernet/i825xx/built-in.a
CC drivers/net/ethernet/intel/e1000/e1000_main.o
CC drivers/usb/core/hcd-pci.o
CC drivers/net/ethernet/intel/e1000/e1000_hw.o
CC net/ipv6/ip6_input.o
CC drivers/usb/core/usb-acpi.o
CC net/ipv4/tcp_ulp.o
CC mm/swap_state.o
CC fs/attr.o
CC lib/bitrev.o
CC drivers/thermal/thermal_helpers.o
CC drivers/acpi/acpica/tbprint.o
CC drivers/input/input-poller.o
CC drivers/md/dm-target.o
CC drivers/md/dm-linear.o
AR net/unix/built-in.a
CC net/ipv4/tcp_offload.o
CC net/ipv6/netfilter/nf_defrag_ipv6_hooks.o
CC net/ipv6/netfilter/nf_conntrack_reasm.o
AR drivers/net/ethernet/microsoft/built-in.a
CC net/ipv4/tcp_plb.o
CC drivers/input/ff-core.o
CC net/ipv4/datagram.o
CC net/ethtool/tsinfo.o
CC drivers/cpufreq/cpufreq_userspace.o
CC fs/nfs/nfs3super.o
CC lib/crc-ccitt.o
CC drivers/acpi/sysfs.o
CC mm/swapfile.o
AR drivers/ufs/built-in.a
CC drivers/usb/host/xhci-ext-caps.o
CC drivers/acpi/acpica/tbutils.o
AR drivers/leds/trigger/built-in.a
CC drivers/usb/host/xhci-ring.o
AR drivers/leds/blink/built-in.a
CC drivers/usb/host/xhci-hub.o
AR drivers/leds/simple/built-in.a
CC net/ipv4/raw.o
CC drivers/leds/led-core.o
CC drivers/thermal/thermal_hwmon.o
CC mm/swap_slots.o
CC drivers/md/dm-stripe.o
CC net/sunrpc/auth_gss/auth_gss.o
CC net/sunrpc/auth_gss/gss_generic_token.o
AR net/wireless/tests/built-in.a
CC net/wireless/core.o
AR drivers/usb/core/built-in.a
CC drivers/gpu/drm/i915/intel_uncore.o
CC arch/x86/kernel/tsc_sync.o
CC net/sunrpc/clnt.o
AR drivers/firmware/arm_ffa/built-in.a
AR drivers/firmware/arm_scmi/built-in.a
AR drivers/cpuidle/governors/built-in.a
AR drivers/firmware/broadcom/built-in.a
CC lib/crc16.o
CC drivers/cpuidle/cpuidle.o
AR drivers/firmware/cirrus/built-in.a
AR drivers/firmware/meson/built-in.a
AR drivers/firmware/microchip/built-in.a
CC kernel/sys_ni.o
CC drivers/firmware/efi/efi-bgrt.o
CC drivers/cpufreq/cpufreq_ondemand.o
CC fs/bad_inode.o
CC drivers/acpi/acpica/tbxface.o
CC fs/file.o
CC drivers/input/touchscreen.o
CC drivers/firmware/efi/libstub/efi-stub-helper.o
CC drivers/acpi/acpica/tbxfload.o
CC drivers/cpuidle/driver.o
CC drivers/thermal/gov_step_wise.o
CC net/netfilter/nf_conntrack_proto_udp.o
CC net/core/netdev-genl.o
CC arch/x86/kernel/setup_percpu.o
CC drivers/leds/led-class.o
CC drivers/acpi/property.o
CC drivers/cpuidle/governor.o
HOSTCC lib/gen_crc32table
CC arch/x86/kernel/mpparse.o
CC drivers/firmware/efi/libstub/gop.o
CC kernel/nsproxy.o
CC drivers/net/ethernet/intel/e1000e/82571.o
CC lib/xxhash.o
CC drivers/net/ethernet/intel/e1000e/ich8lan.o
CC arch/x86/kernel/trace_clock.o
CC net/ethtool/cabletest.o
CC drivers/md/dm-ioctl.o
CC net/sunrpc/auth_gss/gss_mech_switch.o
CC drivers/acpi/acpica/tbxfroot.o
CC kernel/notifier.o
CC fs/nfs/nfs3client.o
CC drivers/acpi/debugfs.o
CC mm/dmapool.o
CC drivers/input/ff-memless.o
CC kernel/ksysfs.o
CC drivers/gpu/drm/i915/intel_wakeref.o
CC arch/x86/kernel/trace.o
CC drivers/cpufreq/cpufreq_governor.o
CC drivers/thermal/gov_user_space.o
CC net/ipv6/netfilter/nf_reject_ipv6.o
CC kernel/cred.o
CC net/ipv4/udp.o
CC drivers/net/ethernet/intel/e100.o
CC drivers/leds/led-triggers.o
AR net/xfrm/built-in.a
CC net/ipv4/udplite.o
AR net/mac80211/tests/built-in.a
CC net/netlabel/netlabel_user.o
CC net/mac80211/main.o
CC arch/x86/kernel/rethook.o
CC net/netlabel/netlabel_kapi.o
CC drivers/acpi/acpica/utaddress.o
CC lib/genalloc.o
AR net/packet/built-in.a
CC drivers/firmware/efi/libstub/secureboot.o
CC net/netlabel/netlabel_domainhash.o
CC net/ipv6/addrconf.o
CC net/ethtool/tunnels.o
CC drivers/cpuidle/sysfs.o
AR drivers/thermal/built-in.a
AR drivers/crypto/stm32/built-in.a
CC drivers/clocksource/acpi_pm.o
CC net/core/netdev-genl-gen.o
CC drivers/firmware/efi/efi.o
CC net/netfilter/nf_conntrack_proto_icmp.o
AR drivers/crypto/xilinx/built-in.a
CC net/netfilter/nf_conntrack_extend.o
CC net/netfilter/nf_conntrack_acct.o
AR drivers/crypto/hisilicon/built-in.a
CC drivers/gpu/drm/i915/vlv_sideband.o
CC drivers/acpi/acpica/utalloc.o
CC drivers/cpufreq/cpufreq_governor_attr_set.o
AR drivers/crypto/intel/keembay/built-in.a
CC drivers/cpufreq/acpi-cpufreq.o
CC drivers/usb/host/xhci-dbg.o
AR drivers/crypto/intel/ixp4xx/built-in.a
CC drivers/usb/host/xhci-trace.o
CC drivers/input/sparse-keymap.o
AR drivers/crypto/intel/built-in.a
AR drivers/crypto/starfive/built-in.a
AR drivers/crypto/built-in.a
CC drivers/acpi/acpica/utascii.o
AR drivers/leds/built-in.a
CC drivers/cpuidle/poll_state.o
CC net/core/gso.o
CC arch/x86/kernel/vmcore_info_32.o
CC net/ipv6/addrlabel.o
CC drivers/input/vivaldi-fmap.o
CC fs/nfs/nfs3proc.o
CC net/wireless/sysfs.o
CC kernel/reboot.o
AR drivers/net/ethernet/litex/built-in.a
CC net/core/net-sysfs.o
CC arch/x86/kernel/machine_kexec_32.o
CC mm/hugetlb.o
CC lib/percpu_counter.o
CC drivers/firmware/efi/libstub/tpm.o
CC drivers/net/ethernet/intel/e1000e/80003es2lan.o
CC drivers/firmware/efi/libstub/file.o
CC drivers/cpuidle/cpuidle-haltpoll.o
CC drivers/net/ethernet/intel/e1000/e1000_ethtool.o
CC net/ipv4/udp_offload.o
CC net/ipv6/netfilter/ip6t_ipv6header.o
CC drivers/acpi/acpica/utbuffer.o
CC drivers/md/dm-io.o
CC drivers/acpi/acpica/utcksum.o
CC net/core/hotdata.o
CC drivers/clocksource/i8253.o
CC drivers/net/ethernet/intel/e1000e/mac.o
CC drivers/input/input-leds.o
CC net/sunrpc/auth_gss/svcauth_gss.o
CC drivers/usb/host/xhci-debugfs.o
CC drivers/usb/host/xhci-pci.o
CC net/core/net-procfs.o
CC drivers/firmware/efi/vars.o
AR drivers/cpuidle/built-in.a
CC drivers/firmware/efi/libstub/mem.o
CC drivers/hid/usbhid/hid-core.o
CC drivers/cpufreq/amd-pstate.o
CC drivers/hid/hid-core.o
AR drivers/platform/x86/amd/built-in.a
AR drivers/platform/x86/intel/built-in.a
CC drivers/platform/x86/wmi.o
CC lib/audit.o
CC drivers/hid/hid-input.o
CC drivers/acpi/acpica/utcopy.o
AR drivers/clocksource/built-in.a
CC net/netlabel/netlabel_addrlist.o
CC lib/syscall.o
CC drivers/gpu/drm/i915/vlv_suspend.o
CC net/ethtool/fec.o
CC drivers/hid/usbhid/hiddev.o
CC drivers/acpi/acpica/utexcep.o
AR drivers/platform/surface/built-in.a
CC drivers/firmware/efi/reboot.o
AS arch/x86/kernel/relocate_kernel_32.o
CC arch/x86/kernel/crash_dump_32.o
CC net/netfilter/nf_conntrack_seqadj.o
CC drivers/md/dm-kcopyd.o
CC drivers/firmware/efi/libstub/random.o
CC drivers/mailbox/mailbox.o
AR drivers/perf/built-in.a
CC drivers/firmware/efi/libstub/randomalloc.o
CC drivers/mailbox/pcc.o
CC drivers/input/evdev.o
CC kernel/async.o
CC net/mac80211/status.o
CC drivers/platform/x86/wmi-bmof.o
CC net/ethtool/eeprom.o
CC drivers/acpi/acpica/utdebug.o
CC net/wireless/radiotap.o
AR drivers/hwtracing/intel_th/built-in.a
CC net/core/netpoll.o
CC fs/nfs/nfs3xdr.o
CC drivers/net/ethernet/intel/e1000e/manage.o
CC kernel/range.o
CC lib/errname.o
CC drivers/net/ethernet/intel/e1000e/nvm.o
CC drivers/firmware/efi/memattr.o
CC lib/nlattr.o
CC drivers/firmware/efi/tpm.o
AR drivers/android/built-in.a
CC drivers/acpi/acpica/utdecode.o
CC net/ipv6/netfilter/ip6t_REJECT.o
CC arch/x86/kernel/crash.o
CC drivers/acpi/acpica/utdelete.o
CC drivers/acpi/acpica/uterror.o
CC drivers/firmware/efi/memmap.o
CC drivers/net/ethernet/intel/e1000e/phy.o
CC arch/x86/kernel/module.o
CC kernel/smpboot.o
CC drivers/firmware/efi/libstub/pci.o
CC net/mac80211/driver-ops.o
CC drivers/acpi/acpica/uteval.o
CC drivers/firmware/efi/capsule.o
AR drivers/mailbox/built-in.a
AR drivers/firmware/imx/built-in.a
CC drivers/md/dm-sysfs.o
CC drivers/cpufreq/amd-pstate-trace.o
CC net/wireless/util.o
CC drivers/platform/x86/eeepc-laptop.o
CC drivers/hid/usbhid/hid-pidff.o
CC net/ipv6/route.o
CC drivers/firmware/efi/libstub/skip_spaces.o
CC net/ipv4/arp.o
CC net/core/fib_rules.o
CC net/netlabel/netlabel_mgmt.o
CC drivers/firmware/efi/libstub/lib-cmdline.o
CC net/core/net-traces.o
CC net/core/selftests.o
CC arch/x86/kernel/doublefault_32.o
CC net/ethtool/stats.o
CC drivers/net/ethernet/intel/e1000/e1000_param.o
CC drivers/firmware/efi/libstub/lib-ctype.o
CC net/netlabel/netlabel_unlabeled.o
AR drivers/usb/host/built-in.a
CC drivers/acpi/acpica/utglobal.o
AR drivers/input/built-in.a
AR drivers/usb/built-in.a
CC drivers/firmware/efi/libstub/alignedmem.o
CC net/ipv6/ip6_fib.o
CC drivers/gpu/drm/i915/soc/intel_dram.o
CC drivers/firmware/efi/libstub/relocate.o
CC mm/mmu_notifier.o
CC drivers/acpi/acpica/uthex.o
CC kernel/ucount.o
CC net/ethtool/phc_vclocks.o
CC net/rfkill/core.o
CC drivers/hid/hid-quirks.o
CC net/netfilter/nf_conntrack_proto_icmpv6.o
CC lib/cpu_rmap.o
CC net/netfilter/nf_conntrack_netlink.o
CC drivers/firmware/efi/libstub/printk.o
CC drivers/md/dm-stats.o
AR drivers/firmware/psci/built-in.a
CC fs/filesystems.o
AR drivers/firmware/qcom/built-in.a
AR drivers/firmware/smccc/built-in.a
CC drivers/net/ethernet/intel/e1000e/param.o
CC drivers/firmware/efi/esrt.o
CC net/core/ptp_classifier.o
CC net/ipv6/ipv6_sockglue.o
CC net/sunrpc/auth_gss/gss_rpc_upcall.o
CC drivers/acpi/acpica/utids.o
CC drivers/net/ethernet/intel/e1000e/ethtool.o
CC drivers/cpufreq/intel_pstate.o
CC lib/dynamic_queue_limits.o
CC kernel/regset.o
AR net/ipv6/netfilter/built-in.a
CC net/wireless/reg.o
CC drivers/gpu/drm/i915/soc/intel_gmch.o
CC drivers/net/ethernet/intel/e1000e/netdev.o
CC lib/glob.o
CC drivers/firmware/efi/libstub/vsprintf.o
CC drivers/acpi/acpica/utinit.o
CC net/9p/mod.o
CC net/dns_resolver/dns_key.o
CC drivers/platform/x86/p2sb.o
CC arch/x86/kernel/early_printk.o
AR drivers/hid/usbhid/built-in.a
CC mm/migrate.o
CC drivers/acpi/acpica/utlock.o
CC net/9p/client.o
CC net/handshake/alert.o
CC drivers/firmware/efi/libstub/x86-stub.o
CC drivers/hid/hid-debug.o
CC kernel/ksyms_common.o
CC net/handshake/genl.o
CC drivers/acpi/acpica/utmath.o
AR drivers/firmware/tegra/built-in.a
CC net/ethtool/mm.o
CC drivers/hid/hidraw.o
CC net/9p/error.o
CC net/core/netprio_cgroup.o
CC net/rfkill/input.o
AR drivers/net/ethernet/intel/e1000/built-in.a
CC net/handshake/netlink.o
CC kernel/groups.o
CC arch/x86/kernel/hpet.o
CC drivers/hid/hid-generic.o
STUBCPY drivers/firmware/efi/libstub/alignedmem.stub.o
CC arch/x86/kernel/amd_nb.o
CC drivers/net/ethernet/intel/e1000e/ptp.o
CC drivers/acpi/acpica/utmisc.o
CC net/core/netclassid_cgroup.o
CC net/netlabel/netlabel_cipso_v4.o
CC net/dns_resolver/dns_query.o
CC net/core/dst_cache.o
CC drivers/md/dm-rq.o
CC kernel/kcmp.o
CC lib/strncpy_from_user.o
CC kernel/freezer.o
CC drivers/firmware/efi/runtime-wrappers.o
AR drivers/platform/x86/built-in.a
CC drivers/acpi/acpi_lpat.o
CC arch/x86/kernel/kvm.o
CC fs/nfs/nfs3acl.o
AR drivers/platform/built-in.a
STUBCPY drivers/firmware/efi/libstub/efi-stub-helper.stub.o
CC arch/x86/kernel/kvmclock.o
CC net/sunrpc/auth_gss/gss_rpc_xdr.o
CC net/ipv4/icmp.o
AR drivers/nvmem/layouts/built-in.a
CC drivers/nvmem/core.o
CC drivers/gpu/drm/i915/soc/intel_pch.o
CC kernel/profile.o
CC drivers/acpi/acpica/utmutex.o
AR net/rfkill/built-in.a
AR drivers/gpu/drm/hisilicon/built-in.a
CC net/netlabel/netlabel_calipso.o
CC fs/namespace.o
STUBCPY drivers/firmware/efi/libstub/file.stub.o
CC net/handshake/request.o
STUBCPY drivers/firmware/efi/libstub/gop.stub.o
STUBCPY drivers/firmware/efi/libstub/lib-cmdline.stub.o
STUBCPY drivers/firmware/efi/libstub/lib-ctype.stub.o
STUBCPY drivers/firmware/efi/libstub/mem.stub.o
STUBCPY drivers/firmware/efi/libstub/pci.stub.o
CC net/wireless/scan.o
CC drivers/acpi/acpi_pcc.o
STUBCPY drivers/firmware/efi/libstub/printk.stub.o
STUBCPY drivers/firmware/efi/libstub/random.stub.o
CC drivers/firmware/efi/capsule-loader.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
CC drivers/acpi/ac.o
CC drivers/gpu/drm/i915/i915_memcpy.o
STUBCPY drivers/firmware/efi/libstub/skip_spaces.stub.o
CC drivers/hid/hid-a4tech.o
STUBCPY drivers/firmware/efi/libstub/tpm.stub.o
CC lib/strnlen_user.o
STUBCPY drivers/firmware/efi/libstub/vsprintf.stub.o
STUBCPY drivers/firmware/efi/libstub/x86-stub.stub.o
CC lib/net_utils.o
AR drivers/firmware/efi/libstub/lib.a
CC arch/x86/kernel/paravirt.o
CC mm/page_counter.o
CC net/ethtool/module.o
AR net/dns_resolver/built-in.a
CC drivers/firmware/efi/earlycon.o
CC drivers/acpi/acpica/utnonansi.o
CC net/devres.o
CC net/socket.o
CC drivers/gpu/drm/i915/i915_mm.o
CC net/core/gro_cells.o
CC drivers/hid/hid-apple.o
CC mm/hugetlb_cgroup.o
CC net/handshake/tlshd.o
CC kernel/stacktrace.o
CC drivers/gpu/drm/i915/i915_sw_fence.o
CC net/netfilter/nf_conntrack_ftp.o
CC kernel/dma.o
CC net/ipv6/ndisc.o
CC net/core/failover.o
CC net/handshake/trace.o
CC net/ipv6/udp.o
CC net/mac80211/sta_info.o
CC net/9p/protocol.o
CC drivers/acpi/button.o
CC kernel/smp.o
CC net/9p/trans_common.o
CC drivers/md/dm-io-rewind.o
CC drivers/acpi/acpica/utobject.o
CC net/ipv6/udplite.o
AR drivers/gpu/drm/mxsfb/built-in.a
CC lib/sg_pool.o
AR drivers/cpufreq/built-in.a
CC net/netfilter/nf_conntrack_irc.o
CC net/sunrpc/auth_gss/trace.o
CC lib/stackdepot.o
CC mm/early_ioremap.o
CC drivers/md/dm-builtin.o
CC kernel/uid16.o
AR drivers/nvmem/built-in.a
CC fs/nfs/nfs4proc.o
CC kernel/kallsyms.o
CC drivers/md/dm-raid1.o
AR drivers/gpu/drm/tiny/built-in.a
CC arch/x86/kernel/pvclock.o
CC kernel/acct.o
CC net/ethtool/pse-pd.o
AR net/netlabel/built-in.a
CC net/9p/trans_fd.o
CC kernel/vmcore_info.o
CC net/ethtool/plca.o
AR drivers/firmware/efi/built-in.a
CC kernel/elfcorehdr.o
CC drivers/acpi/acpica/utosi.o
AR drivers/firmware/xilinx/built-in.a
CC drivers/firmware/dmi_scan.o
CC drivers/firmware/dmi-id.o
CC net/netfilter/nf_conntrack_sip.o
CC lib/asn1_decoder.o
CC drivers/hid/hid-belkin.o
CC drivers/gpu/drm/i915/i915_sw_fence_work.o
GEN lib/oid_registry_data.c
CC lib/ucs2_string.o
CC arch/x86/kernel/pcspeaker.o
CC drivers/acpi/acpica/utownerid.o
CC net/sysctl_net.o
CC drivers/md/dm-log.o
CC drivers/firmware/memmap.o
CC kernel/crash_reserve.o
CC kernel/kexec_core.o
CC drivers/gpu/drm/i915/i915_syncmap.o
CC lib/sbitmap.o
CC mm/secretmem.o
CC net/ipv4/devinet.o
CC lib/group_cpus.o
CC drivers/md/dm-region-hash.o
CC lib/fw_table.o
CC fs/nfs/nfs4xdr.o
CC drivers/gpu/drm/i915/i915_user_extensions.o
CC kernel/crash_core.o
CC kernel/kexec.o
CC kernel/utsname.o
CC net/ipv4/af_inet.o
CC arch/x86/kernel/check.o
CC net/ipv4/igmp.o
CC drivers/acpi/acpica/utpredef.o
CC net/9p/trans_virtio.o
CC mm/hmm.o
CC fs/nfs/nfs4state.o
CC drivers/hid/hid-cherry.o
CC drivers/acpi/fan_core.o
CC net/sunrpc/auth_gss/gss_krb5_mech.o
CC net/wireless/nl80211.o
AR net/core/built-in.a
CC net/wireless/mlme.o
CC mm/memfd.o
CC net/netfilter/nf_nat_core.o
CC drivers/acpi/acpica/utresdecode.o
AR net/handshake/built-in.a
CC net/sunrpc/xprt.o
CC net/sunrpc/socklib.o
CC drivers/gpu/drm/i915/i915_debugfs.o
AR net/ethtool/built-in.a
CC drivers/hid/hid-chicony.o
CC drivers/hid/hid-cypress.o
AR drivers/firmware/built-in.a
CC fs/nfs/nfs4renewd.o
CC net/wireless/ibss.o
CC kernel/pid_namespace.o
AR drivers/net/ethernet/marvell/octeon_ep/built-in.a
CC net/sunrpc/xprtsock.o
AR drivers/net/ethernet/marvell/octeon_ep_vf/built-in.a
CC kernel/stop_machine.o
AR drivers/net/ethernet/marvell/prestera/built-in.a
AR drivers/net/ethernet/marvell/octeontx2/built-in.a
AR lib/lib.a
CC drivers/net/ethernet/marvell/sky2.o
CC net/sunrpc/auth_gss/gss_krb5_seal.o
CC net/sunrpc/auth_gss/gss_krb5_unseal.o
CC drivers/md/dm-zero.o
CC arch/x86/kernel/uprobes.o
GEN lib/crc32table.h
CC lib/oid_registry.o
CC drivers/acpi/acpica/utresrc.o
CC arch/x86/kernel/perf_regs.o
CC net/mac80211/wep.o
CC kernel/audit.o
CC drivers/acpi/acpica/utstate.o
CC drivers/acpi/fan_attr.o
CC drivers/hid/hid-ezkey.o
CC net/sunrpc/sched.o
CC net/wireless/sme.o
CC kernel/auditfilter.o
CC mm/ptdump.o
CC drivers/acpi/acpica/utstring.o
CC net/sunrpc/auth_gss/gss_krb5_wrap.o
CC net/sunrpc/auth_gss/gss_krb5_crypto.o
AR drivers/net/ethernet/intel/e1000e/built-in.a
AR drivers/net/ethernet/intel/built-in.a
CC net/ipv4/fib_frontend.o
CC net/wireless/chan.o
CC drivers/gpu/drm/i915/i915_debugfs_params.o
CC net/mac80211/aead_api.o
CC lib/crc32.o
CC kernel/auditsc.o
CC arch/x86/kernel/tracepoint.o
CC net/ipv6/raw.o
CC net/sunrpc/auth_gss/gss_krb5_keys.o
CC kernel/audit_watch.o
CC drivers/gpu/drm/i915/i915_pmu.o
CC mm/execmem.o
CC drivers/gpu/drm/i915/gt/gen2_engine_cs.o
CC drivers/acpi/acpica/utstrsuppt.o
AR drivers/md/built-in.a
CC drivers/hid/hid-gyration.o
AR net/9p/built-in.a
AR drivers/net/ethernet/mellanox/built-in.a
AR drivers/net/ethernet/micrel/built-in.a
CC net/netfilter/nf_nat_proto.o
CC drivers/acpi/acpica/utstrtoul64.o
CC fs/nfs/nfs4super.o
AR drivers/net/ethernet/microchip/built-in.a
CC drivers/acpi/acpica/utxface.o
CC drivers/hid/hid-ite.o
CC arch/x86/kernel/itmt.o
CC arch/x86/kernel/umip.o
CC kernel/audit_fsnotify.o
CC drivers/hid/hid-kensington.o
CC net/sunrpc/auth.o
CC arch/x86/kernel/unwind_frame.o
AR lib/built-in.a
CC net/mac80211/wpa.o
CC net/mac80211/scan.o
CC drivers/acpi/acpica/utxfinit.o
CC drivers/acpi/acpica/utxferror.o
CC fs/nfs/nfs4file.o
CC drivers/hid/hid-lg.o
CC kernel/audit_tree.o
CC fs/seq_file.o
AR mm/built-in.a
CC net/mac80211/offchannel.o
CC net/mac80211/ht.o
CC net/ipv4/fib_semantics.o
CC net/ipv4/fib_trie.o
CC drivers/gpu/drm/i915/gt/gen6_engine_cs.o
CC net/wireless/ethtool.o
CC drivers/hid/hid-lgff.o
CC drivers/acpi/acpica/utxfmutex.o
CC drivers/gpu/drm/i915/gt/gen6_ppgtt.o
CC kernel/kprobes.o
AR net/sunrpc/auth_gss/built-in.a
CC drivers/gpu/drm/i915/gt/gen7_renderclear.o
CC kernel/seccomp.o
CC drivers/acpi/acpi_video.o
CC drivers/acpi/video_detect.o
AR arch/x86/kernel/built-in.a
CC kernel/relay.o
AR arch/x86/built-in.a
CC net/netfilter/nf_nat_helper.o
CC drivers/gpu/drm/i915/gt/gen8_engine_cs.o
CC drivers/gpu/drm/i915/gt/gen8_ppgtt.o
AR drivers/gpu/drm/xlnx/built-in.a
CC net/sunrpc/auth_null.o
CC drivers/hid/hid-lg4ff.o
AR drivers/gpu/drm/gud/built-in.a
AR drivers/gpu/drm/solomon/built-in.a
CC fs/nfs/delegation.o
CC [M] drivers/gpu/drm/scheduler/sched_main.o
CC fs/nfs/nfs4idmap.o
AR drivers/acpi/acpica/built-in.a
CC [M] drivers/gpu/drm/scheduler/sched_fence.o
CC fs/nfs/callback.o
CC drivers/gpu/drm/i915/gt/intel_breadcrumbs.o
CC drivers/hid/hid-lg-g15.o
CC drivers/gpu/drm/i915/gt/intel_context.o
CC drivers/acpi/processor_driver.o
CC net/mac80211/agg-tx.o
CC net/ipv6/icmp.o
CC kernel/utsname_sysctl.o
CC [M] drivers/gpu/drm/scheduler/sched_entity.o
CC net/ipv4/fib_notifier.o
CC net/mac80211/agg-rx.o
CC net/sunrpc/auth_tls.o
CC drivers/acpi/processor_thermal.o
CC net/ipv6/mcast.o
CC drivers/gpu/drm/i915/gt/intel_context_sseu.o
CC net/wireless/mesh.o
CC net/ipv4/inet_fragment.o
CC kernel/delayacct.o
CC kernel/taskstats.o
CC net/sunrpc/auth_unix.o
AR drivers/net/ethernet/marvell/built-in.a
CC net/sunrpc/svc.o
AR drivers/net/ethernet/mscc/built-in.a
CC fs/nfs/callback_xdr.o
AR drivers/net/ethernet/myricom/built-in.a
AR drivers/net/ethernet/natsemi/built-in.a
CC fs/nfs/callback_proc.o
AR drivers/net/ethernet/neterion/built-in.a
CC drivers/acpi/processor_idle.o
CC net/wireless/ap.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 net/sunrpc/svcsock.o
CC drivers/acpi/processor_throttling.o
CC net/wireless/trace.o
CC fs/nfs/nfs4namespace.o
CC kernel/tsacct.o
CC net/ipv6/reassembly.o
CC drivers/acpi/processor_perflib.o
CC drivers/hid/hid-microsoft.o
CC net/sunrpc/svcauth.o
CC net/netfilter/nf_nat_masquerade.o
CC drivers/gpu/drm/i915/gt/intel_engine_cs.o
CC fs/xattr.o
CC drivers/hid/hid-monterey.o
LD [M] drivers/gpu/drm/scheduler/gpu-sched.o
CC [M] drivers/gpu/drm/xe/xe_bb.o
CC drivers/hid/hid-ntrig.o
CC drivers/gpu/drm/drm_aperture.o
CC drivers/acpi/container.o
CC kernel/tracepoint.o
CC net/sunrpc/svcauth_unix.o
CC net/ipv4/ping.o
CC net/wireless/ocb.o
CC drivers/gpu/drm/i915/gt/intel_engine_heartbeat.o
CC drivers/hid/hid-pl.o
CC net/ipv6/tcp_ipv6.o
CC net/ipv4/ip_tunnel_core.o
AR drivers/net/ethernet/oki-semi/built-in.a
CC net/wireless/pmsr.o
AR drivers/net/ethernet/packetengines/built-in.a
GEN net/wireless/shipped-certs.c
CC [M] drivers/gpu/drm/xe/xe_bo.o
CC [M] drivers/gpu/drm/xe/xe_bo_evict.o
CC drivers/gpu/drm/i915/gt/intel_engine_pm.o
CC drivers/gpu/drm/drm_atomic.o
CC net/sunrpc/addr.o
AR drivers/net/ethernet/qlogic/built-in.a
AR drivers/net/ethernet/qualcomm/emac/built-in.a
AR drivers/net/ethernet/qualcomm/built-in.a
CC drivers/net/ethernet/realtek/8139too.o
CC drivers/net/ethernet/realtek/r8169_main.o
CC drivers/acpi/thermal_lib.o
AR drivers/net/ethernet/renesas/built-in.a
CC drivers/acpi/thermal.o
CC drivers/hid/hid-petalynx.o
CC drivers/net/ethernet/realtek/r8169_firmware.o
CC drivers/hid/hid-redragon.o
CC drivers/gpu/drm/drm_atomic_uapi.o
CC fs/nfs/nfs4getroot.o
CC drivers/gpu/drm/i915/gt/intel_engine_user.o
AR drivers/net/ethernet/rdc/built-in.a
CC net/sunrpc/rpcb_clnt.o
CC fs/libfs.o
CC kernel/irq_work.o
CC net/ipv4/gre_offload.o
CC net/mac80211/vht.o
CC drivers/net/ethernet/realtek/r8169_phy_config.o
CC fs/nfs/nfs4client.o
CC drivers/hid/hid-samsung.o
CC fs/nfs/nfs4session.o
CC [M] drivers/gpu/drm/xe/xe_debugfs.o
CC net/sunrpc/timer.o
CC drivers/gpu/drm/drm_auth.o
CC net/ipv4/metrics.o
CC fs/nfs/dns_resolve.o
CC [M] drivers/gpu/drm/xe/xe_devcoredump.o
CC net/netfilter/nf_nat_ftp.o
CC drivers/hid/hid-sony.o
CC drivers/hid/hid-sunplus.o
CC drivers/acpi/nhlt.o
CC kernel/static_call.o
CC net/sunrpc/xdr.o
CC net/mac80211/he.o
CC net/wireless/shipped-certs.o
CC net/mac80211/s1g.o
CC net/netfilter/nf_nat_irc.o
CC net/ipv4/netlink.o
CC fs/fs-writeback.o
CC fs/pnode.o
CC drivers/gpu/drm/i915/gt/intel_execlists_submission.o
CC net/ipv6/ping.o
CC drivers/gpu/drm/i915/gt/intel_ggtt.o
CC kernel/padata.o
CC drivers/hid/hid-topseed.o
CC drivers/gpu/drm/drm_blend.o
CC drivers/gpu/drm/drm_bridge.o
CC drivers/acpi/acpi_memhotplug.o
HOSTCC drivers/gpu/drm/xe/xe_gen_wa_oob
CC fs/nfs/nfs4trace.o
CC drivers/gpu/drm/i915/gt/intel_ggtt_fencing.o
CC net/netfilter/nf_nat_sip.o
CC net/sunrpc/sunrpc_syms.o
CC drivers/gpu/drm/i915/gt/intel_gt.o
CC drivers/gpu/drm/drm_cache.o
CC fs/nfs/nfs4sysctl.o
CC [M] drivers/gpu/drm/xe/xe_device_sysfs.o
CC [M] drivers/gpu/drm/xe/xe_dma_buf.o
CC [M] drivers/gpu/drm/xe/xe_drm_client.o
CC drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.o
CC fs/splice.o
CC drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.o
CC drivers/gpu/drm/drm_client.o
CC drivers/acpi/ioapic.o
CC net/mac80211/ibss.o
CC net/mac80211/iface.o
CC net/ipv4/nexthop.o
CC drivers/acpi/battery.o
AR drivers/net/ethernet/nvidia/built-in.a
CC net/netfilter/x_tables.o
AR drivers/net/ethernet/rocker/built-in.a
AR drivers/net/ethernet/samsung/built-in.a
CC net/sunrpc/cache.o
AR drivers/net/ethernet/seeq/built-in.a
CC [M] drivers/gpu/drm/xe/xe_eustall_cntr.o
CC net/sunrpc/rpc_pipe.o
CC drivers/gpu/drm/drm_client_modeset.o
CC net/sunrpc/sysfs.o
CC kernel/jump_label.o
AR drivers/hid/built-in.a
CC net/ipv6/exthdrs.o
AR drivers/net/ethernet/silan/built-in.a
CC fs/sync.o
CC net/mac80211/link.o
CC drivers/acpi/bgrt.o
CC net/ipv4/udp_tunnel_stub.o
CC net/sunrpc/svc_xprt.o
CC net/ipv6/datagram.o
CC [M] drivers/gpu/drm/xe/xe_exec.o
CC drivers/gpu/drm/drm_color_mgmt.o
CC [M] drivers/gpu/drm/xe/xe_execlist.o
CC drivers/acpi/spcr.o
CC net/ipv6/ip6_flowlabel.o
CC net/ipv4/ip_tunnel.o
CC net/mac80211/rate.o
CC net/sunrpc/xprtmultipath.o
CC drivers/gpu/drm/i915/gt/intel_gt_clock_utils.o
CC fs/utimes.o
CC fs/d_path.o
CC net/sunrpc/stats.o
CC net/sunrpc/sysctl.o
CC [M] drivers/gpu/drm/xe/xe_exec_queue.o
CC [M] drivers/gpu/drm/xe/xe_force_wake.o
CC drivers/gpu/drm/i915/gt/intel_gt_debugfs.o
CC kernel/context_tracking.o
GEN xe_wa_oob.c xe_wa_oob.h
CC kernel/iomem.o
AR drivers/net/ethernet/realtek/built-in.a
AR drivers/net/ethernet/sis/built-in.a
AR drivers/net/ethernet/sfc/built-in.a
AR drivers/net/ethernet/smsc/built-in.a
CC net/netfilter/xt_tcpudp.o
AR drivers/net/ethernet/socionext/built-in.a
CC net/netfilter/xt_CONNSECMARK.o
AR drivers/net/ethernet/stmicro/built-in.a
AR drivers/net/ethernet/sun/built-in.a
CC fs/stack.o
AR drivers/net/ethernet/tehuti/built-in.a
AR drivers/net/ethernet/ti/built-in.a
CC fs/fs_struct.o
AR drivers/net/ethernet/vertexcom/built-in.a
AR drivers/net/ethernet/via/built-in.a
AR drivers/net/ethernet/wangxun/built-in.a
CC net/mac80211/michael.o
AR drivers/net/ethernet/wiznet/built-in.a
CC kernel/rseq.o
AR drivers/net/ethernet/xilinx/built-in.a
AR drivers/net/ethernet/xircom/built-in.a
AR drivers/net/ethernet/synopsys/built-in.a
AR drivers/net/ethernet/pensando/built-in.a
CC net/ipv4/sysctl_net_ipv4.o
AR drivers/net/ethernet/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gpu_scheduler.o
CC fs/statfs.o
AR drivers/acpi/built-in.a
CC drivers/gpu/drm/drm_connector.o
CC drivers/gpu/drm/drm_crtc.o
CC [M] drivers/gpu/drm/xe/xe_gsc.o
CC net/ipv4/proc.o
CC drivers/gpu/drm/drm_displayid.o
CC net/ipv4/fib_rules.o
AR drivers/net/built-in.a
CC net/ipv4/ipmr.o
CC fs/fs_pin.o
CC net/ipv4/ipmr_base.o
CC net/netfilter/xt_NFLOG.o
CC fs/nsfs.o
CC net/netfilter/xt_SECMARK.o
CC net/netfilter/xt_TCPMSS.o
CC [M] drivers/gpu/drm/xe/xe_gsc_proxy.o
CC net/mac80211/tkip.o
CC drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_gsc_submit.o
CC net/ipv4/syncookies.o
CC drivers/gpu/drm/i915/gt/intel_gt_irq.o
CC drivers/gpu/drm/i915/gt/intel_gt_mcr.o
CC fs/fs_types.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm.o
CC net/ipv6/inet6_connection_sock.o
CC net/mac80211/aes_cmac.o
CC drivers/gpu/drm/drm_drv.o
CC net/ipv4/tunnel4.o
CC drivers/gpu/drm/drm_dumb_buffers.o
CC net/ipv6/udp_offload.o
CC [M] drivers/gpu/drm/xe/xe_gt.o
CC fs/fs_context.o
CC net/mac80211/aes_gmac.o
CC net/netfilter/xt_conntrack.o
AR kernel/built-in.a
CC fs/fs_parser.o
CC [M] drivers/gpu/drm/xe/xe_gt_ccs_mode.o
CC [M] drivers/gpu/drm/xe/xe_gt_clock.o
CC [M] drivers/gpu/drm/xe/xe_gt_debugfs.o
CC drivers/gpu/drm/drm_edid.o
CC fs/fsopen.o
CC fs/init.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_gt_freq.o
CC net/netfilter/xt_policy.o
CC net/ipv4/ipconfig.o
CC net/netfilter/xt_state.o
CC [M] drivers/gpu/drm/xe/xe_gt_idle.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm_irq.o
CC net/ipv4/netfilter.o
CC drivers/gpu/drm/drm_eld.o
CC fs/kernel_read_file.o
CC drivers/gpu/drm/drm_encoder.o
CC net/ipv6/seg6.o
CC net/ipv4/tcp_cubic.o
CC net/ipv6/fib6_notifier.o
CC net/ipv4/tcp_sigpool.o
CC net/mac80211/fils_aead.o
CC net/ipv4/cipso_ipv4.o
CC [M] drivers/gpu/drm/xe/xe_gt_mcr.o
CC drivers/gpu/drm/drm_file.o
CC net/ipv6/rpl.o
AR fs/nfs/built-in.a
CC drivers/gpu/drm/i915/gt/intel_gt_requests.o
CC [M] drivers/gpu/drm/xe/xe_gt_pagefault.o
CC fs/mnt_idmapping.o
CC net/ipv4/xfrm4_policy.o
CC net/ipv4/xfrm4_state.o
CC [M] drivers/gpu/drm/xe/xe_gt_sysfs.o
CC net/mac80211/cfg.o
CC drivers/gpu/drm/drm_fourcc.o
CC [M] drivers/gpu/drm/xe/xe_gt_throttle.o
CC [M] net/netfilter/nf_log_syslog.o
CC net/ipv4/xfrm4_input.o
CC drivers/gpu/drm/i915/gt/intel_gt_sysfs.o
CC [M] drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
CC net/ipv4/xfrm4_output.o
CC net/ipv4/xfrm4_protocol.o
CC [M] drivers/gpu/drm/xe/xe_gt_topology.o
CC fs/remap_range.o
CC net/mac80211/ethtool.o
CC drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.o
CC fs/pidfs.o
CC fs/buffer.o
CC fs/mpage.o
AR net/sunrpc/built-in.a
CC net/ipv6/ioam6.o
CC [M] net/netfilter/xt_mark.o
CC [M] drivers/gpu/drm/xe/xe_guc.o
CC drivers/gpu/drm/drm_framebuffer.o
CC drivers/gpu/drm/drm_gem.o
CC net/mac80211/rx.o
CC [M] net/netfilter/xt_nat.o
CC fs/proc_namespace.o
CC [M] net/netfilter/xt_LOG.o
CC net/mac80211/spectmgmt.o
CC drivers/gpu/drm/i915/gt/intel_gtt.o
CC net/ipv6/sysctl_net_ipv6.o
CC [M] drivers/gpu/drm/xe/xe_guc_ads.o
CC [M] drivers/gpu/drm/xe/xe_guc_ct.o
CC [M] drivers/gpu/drm/xe/xe_guc_db_mgr.o
CC net/ipv6/xfrm6_policy.o
CC [M] drivers/gpu/drm/xe/xe_guc_debugfs.o
CC net/ipv6/xfrm6_state.o
CC drivers/gpu/drm/drm_ioctl.o
CC net/ipv6/xfrm6_input.o
CC fs/direct-io.o
CC net/ipv6/xfrm6_output.o
CC [M] net/netfilter/xt_MASQUERADE.o
CC net/mac80211/tx.o
CC drivers/gpu/drm/i915/gt/intel_llc.o
CC drivers/gpu/drm/i915/gt/intel_lrc.o
CC fs/eventpoll.o
CC fs/anon_inodes.o
CC fs/signalfd.o
CC drivers/gpu/drm/i915/gt/intel_migrate.o
CC [M] drivers/gpu/drm/xe/xe_guc_hwconfig.o
CC [M] drivers/gpu/drm/xe/xe_guc_id_mgr.o
CC fs/timerfd.o
CC fs/eventfd.o
CC fs/aio.o
CC fs/locks.o
CC [M] net/netfilter/xt_addrtype.o
CC [M] drivers/gpu/drm/xe/xe_guc_klv_helpers.o
CC [M] drivers/gpu/drm/xe/xe_guc_log.o
CC drivers/gpu/drm/drm_lease.o
CC fs/binfmt_misc.o
CC drivers/gpu/drm/i915/gt/intel_mocs.o
CC [M] drivers/gpu/drm/xe/xe_guc_pc.o
CC drivers/gpu/drm/drm_managed.o
CC [M] drivers/gpu/drm/xe/xe_guc_submit.o
CC [M] drivers/gpu/drm/xe/xe_heci_gsc.o
CC net/ipv6/xfrm6_protocol.o
CC net/ipv6/netfilter.o
AR net/ipv4/built-in.a
CC [M] drivers/gpu/drm/xe/xe_hw_engine.o
CC net/mac80211/key.o
AR net/netfilter/built-in.a
CC drivers/gpu/drm/drm_mm.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.o
CC fs/binfmt_script.o
CC net/mac80211/util.o
CC net/mac80211/parse.o
CC drivers/gpu/drm/drm_mode_config.o
CC net/ipv6/proc.o
CC [M] drivers/gpu/drm/xe/xe_hw_fence.o
CC fs/binfmt_elf.o
CC net/ipv6/syncookies.o
CC net/ipv6/calipso.o
CC [M] drivers/gpu/drm/xe/xe_huc.o
CC drivers/gpu/drm/i915/gt/intel_ppgtt.o
CC drivers/gpu/drm/i915/gt/intel_rc6.o
CC drivers/gpu/drm/i915/gt/intel_region_lmem.o
CC [M] drivers/gpu/drm/xe/xe_huc_debugfs.o
CC net/ipv6/ah6.o
CC fs/mbcache.o
CC fs/posix_acl.o
CC drivers/gpu/drm/drm_mode_object.o
CC fs/coredump.o
CC fs/drop_caches.o
CC drivers/gpu/drm/drm_modes.o
CC net/ipv6/esp6.o
CC net/ipv6/sit.o
CC fs/sysctls.o
CC drivers/gpu/drm/drm_modeset_lock.o
CC net/ipv6/addrconf_core.o
CC [M] drivers/gpu/drm/xe/xe_irq.o
CC drivers/gpu/drm/i915/gt/intel_renderstate.o
CC fs/fhandle.o
CC drivers/gpu/drm/i915/gt/intel_reset.o
CC [M] drivers/gpu/drm/xe/xe_lrc.o
CC [M] drivers/gpu/drm/xe/xe_migrate.o
CC net/mac80211/wme.o
CC net/mac80211/chan.o
CC drivers/gpu/drm/drm_plane.o
CC net/mac80211/trace.o
CC net/mac80211/mlme.o
CC drivers/gpu/drm/drm_prime.o
CC drivers/gpu/drm/drm_print.o
CC [M] drivers/gpu/drm/xe/xe_mmio.o
CC [M] drivers/gpu/drm/xe/xe_mocs.o
CC net/ipv6/exthdrs_core.o
CC net/ipv6/ip6_checksum.o
CC [M] drivers/gpu/drm/xe/xe_module.o
CC [M] drivers/gpu/drm/xe/xe_oa.o
CC [M] drivers/gpu/drm/xe/xe_observation.o
CC net/ipv6/ip6_icmp.o
CC drivers/gpu/drm/i915/gt/intel_ring.o
CC [M] drivers/gpu/drm/xe/xe_pat.o
CC drivers/gpu/drm/drm_property.o
CC drivers/gpu/drm/drm_syncobj.o
CC net/ipv6/output_core.o
CC net/ipv6/protocol.o
CC [M] drivers/gpu/drm/xe/xe_pci.o
CC drivers/gpu/drm/i915/gt/intel_ring_submission.o
CC drivers/gpu/drm/i915/gt/intel_rps.o
CC drivers/gpu/drm/i915/gt/intel_sa_media.o
CC drivers/gpu/drm/i915/gt/intel_sseu.o
CC drivers/gpu/drm/i915/gt/intel_sseu_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_pcode.o
CC drivers/gpu/drm/i915/gt/intel_timeline.o
CC drivers/gpu/drm/drm_sysfs.o
CC drivers/gpu/drm/drm_trace_points.o
CC net/ipv6/ip6_offload.o
CC [M] drivers/gpu/drm/xe/xe_pm.o
CC [M] drivers/gpu/drm/xe/xe_preempt_fence.o
CC [M] drivers/gpu/drm/xe/xe_pt.o
CC drivers/gpu/drm/drm_vblank.o
CC drivers/gpu/drm/drm_vblank_work.o
CC drivers/gpu/drm/i915/gt/intel_tlb.o
AR fs/built-in.a
CC drivers/gpu/drm/i915/gt/intel_wopcm.o
CC drivers/gpu/drm/drm_vma_manager.o
CC drivers/gpu/drm/drm_writeback.o
CC net/ipv6/tcpv6_offload.o
CC [M] drivers/gpu/drm/xe/xe_pt_walk.o
CC net/mac80211/tdls.o
CC net/ipv6/exthdrs_offload.o
CC net/ipv6/inet6_hashtables.o
CC drivers/gpu/drm/drm_panel.o
CC drivers/gpu/drm/i915/gt/intel_workarounds.o
CC net/ipv6/mcast_snoop.o
CC drivers/gpu/drm/drm_pci.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
CC drivers/gpu/drm/i915/gt/shmem_utils.o
CC drivers/gpu/drm/drm_debugfs.o
CC drivers/gpu/drm/drm_debugfs_crc.o
CC [M] drivers/gpu/drm/xe/xe_reg_whitelist.o
CC drivers/gpu/drm/i915/gt/sysfs_engines.o
CC drivers/gpu/drm/drm_panel_orientation_quirks.o
CC [M] drivers/gpu/drm/xe/xe_rtp.o
CC drivers/gpu/drm/i915/gt/intel_ggtt_gmch.o
CC [M] drivers/gpu/drm/xe/xe_ring_ops.o
CC drivers/gpu/drm/drm_buddy.o
CC drivers/gpu/drm/drm_gem_shmem_helper.o
CC drivers/gpu/drm/i915/gt/gen6_renderstate.o
AR net/wireless/built-in.a
CC drivers/gpu/drm/drm_atomic_helper.o
CC drivers/gpu/drm/drm_atomic_state_helper.o
CC [M] drivers/gpu/drm/xe/xe_sa.o
CC drivers/gpu/drm/drm_bridge_connector.o
CC [M] drivers/gpu/drm/xe/xe_sched_job.o
CC drivers/gpu/drm/i915/gt/gen7_renderstate.o
CC net/mac80211/ocb.o
CC drivers/gpu/drm/drm_crtc_helper.o
CC net/mac80211/airtime.o
CC [M] drivers/gpu/drm/xe/xe_step.o
CC drivers/gpu/drm/i915/gt/gen8_renderstate.o
CC net/mac80211/eht.o
CC drivers/gpu/drm/i915/gt/gen9_renderstate.o
CC drivers/gpu/drm/drm_damage_helper.o
CC drivers/gpu/drm/i915/gem/i915_gem_busy.o
CC drivers/gpu/drm/i915/gem/i915_gem_clflush.o
CC drivers/gpu/drm/i915/gem/i915_gem_context.o
CC drivers/gpu/drm/i915/gem/i915_gem_create.o
CC drivers/gpu/drm/drm_encoder_slave.o
CC drivers/gpu/drm/i915/gem/i915_gem_dmabuf.o
CC drivers/gpu/drm/i915/gem/i915_gem_domain.o
CC [M] drivers/gpu/drm/xe/xe_sync.o
CC drivers/gpu/drm/drm_flip_work.o
CC drivers/gpu/drm/i915/gem/i915_gem_execbuffer.o
CC drivers/gpu/drm/drm_format_helper.o
CC drivers/gpu/drm/drm_gem_atomic_helper.o
CC [M] drivers/gpu/drm/xe/xe_tile.o
CC drivers/gpu/drm/i915/gem/i915_gem_internal.o
CC net/mac80211/led.o
CC net/mac80211/pm.o
CC drivers/gpu/drm/drm_gem_framebuffer_helper.o
CC drivers/gpu/drm/drm_kms_helper_common.o
CC [M] drivers/gpu/drm/xe/xe_tile_sysfs.o
CC net/mac80211/rc80211_minstrel_ht.o
CC [M] drivers/gpu/drm/xe/xe_trace.o
CC drivers/gpu/drm/i915/gem/i915_gem_lmem.o
CC drivers/gpu/drm/drm_modeset_helper.o
CC drivers/gpu/drm/i915/gem/i915_gem_mman.o
CC drivers/gpu/drm/i915/gem/i915_gem_object.o
CC drivers/gpu/drm/i915/gem/i915_gem_pages.o
CC [M] drivers/gpu/drm/xe/xe_trace_bo.o
CC drivers/gpu/drm/drm_plane_helper.o
CC drivers/gpu/drm/drm_probe_helper.o
CC drivers/gpu/drm/i915/gem/i915_gem_phys.o
CC [M] drivers/gpu/drm/xe/xe_trace_guc.o
AR net/ipv6/built-in.a
CC drivers/gpu/drm/drm_rect.o
CC [M] drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
CC drivers/gpu/drm/drm_self_refresh_helper.o
CC drivers/gpu/drm/drm_simple_kms_helper.o
CC [M] drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
CC [M] drivers/gpu/drm/xe/xe_ttm_vram_mgr.o
CC [M] drivers/gpu/drm/xe/xe_tuning.o
CC drivers/gpu/drm/bridge/panel.o
CC drivers/gpu/drm/drm_mipi_dsi.o
CC drivers/gpu/drm/i915/gem/i915_gem_pm.o
CC [M] drivers/gpu/drm/drm_exec.o
CC [M] drivers/gpu/drm/xe/xe_uc.o
CC [M] drivers/gpu/drm/drm_gpuvm.o
CC drivers/gpu/drm/i915/gem/i915_gem_region.o
CC net/mac80211/wbrf.o
CC [M] drivers/gpu/drm/xe/xe_uc_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_uc_fw.o
CC [M] drivers/gpu/drm/drm_suballoc.o
CC drivers/gpu/drm/i915/gem/i915_gem_shmem.o
CC [M] drivers/gpu/drm/drm_gem_ttm_helper.o
CC drivers/gpu/drm/i915/gem/i915_gem_shrinker.o
CC [M] drivers/gpu/drm/xe/xe_vm.o
CC drivers/gpu/drm/i915/gem/i915_gem_stolen.o
CC drivers/gpu/drm/i915/gem/i915_gem_throttle.o
CC drivers/gpu/drm/i915/gem/i915_gem_tiling.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm_move.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 drivers/gpu/drm/i915/gem/i915_gemfs.o
CC [M] drivers/gpu/drm/xe/xe_vram.o
CC drivers/gpu/drm/i915/i915_active.o
CC [M] drivers/gpu/drm/xe/xe_vram_freq.o
CC [M] drivers/gpu/drm/xe/xe_wait_user_fence.o
CC [M] drivers/gpu/drm/xe/xe_wa.o
CC [M] drivers/gpu/drm/xe/xe_wopcm.o
CC [M] drivers/gpu/drm/xe/xe_hmm.o
CC drivers/gpu/drm/i915/i915_cmd_parser.o
CC drivers/gpu/drm/i915/i915_deps.o
CC drivers/gpu/drm/i915/i915_gem.o
CC drivers/gpu/drm/i915/i915_gem_evict.o
CC drivers/gpu/drm/i915/i915_gem_gtt.o
CC drivers/gpu/drm/i915/i915_gem_ww.o
CC [M] drivers/gpu/drm/xe/xe_hwmon.o
CC [M] drivers/gpu/drm/xe/xe_gt_sriov_vf.o
LD [M] drivers/gpu/drm/drm_suballoc_helper.o
CC [M] drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_guc_relay.o
CC [M] drivers/gpu/drm/xe/xe_memirq.o
LD [M] drivers/gpu/drm/drm_ttm_helper.o
CC [M] drivers/gpu/drm/xe/xe_sriov.o
CC [M] drivers/gpu/drm/xe/display/ext/i915_irq.o
CC drivers/gpu/drm/i915/i915_query.o
CC drivers/gpu/drm/i915/i915_request.o
CC drivers/gpu/drm/i915/i915_scheduler.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/display/ext/i915_utils.o
CC drivers/gpu/drm/i915/i915_vma.o
CC [M] drivers/gpu/drm/xe/display/intel_fb_bo.o
CC [M] drivers/gpu/drm/xe/display/intel_fbdev_fb.o
CC drivers/gpu/drm/i915/i915_vma_resource.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.o
CC [M] drivers/gpu/drm/xe/display/xe_display.o
CC [M] drivers/gpu/drm/xe/display/xe_display_misc.o
CC [M] drivers/gpu/drm/xe/display/xe_display_rps.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/display/xe_display_wa.o
CC [M] drivers/gpu/drm/xe/display/xe_dsb_buffer.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc.o
CC [M] drivers/gpu/drm/xe/display/xe_fb_pin.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_ads.o
CC [M] drivers/gpu/drm/xe/display/xe_hdcp_gsc.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 [M] drivers/gpu/drm/xe/display/xe_plane_initial.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_fw.o
CC [M] drivers/gpu/drm/xe/display/xe_tdf.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 [M] drivers/gpu/drm/xe/i915-soc/intel_dram.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 [M] drivers/gpu/drm/xe/i915-display/intel_atomic.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_atomic_plane.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 [M] drivers/gpu/drm/xe/i915-display/intel_audio.o
CC drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_backlight.o
CC drivers/gpu/drm/i915/gt/uc/intel_uc_fw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_bios.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_bw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_cdclk.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 [M] drivers/gpu/drm/xe/i915-display/intel_color.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_combo_phy.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 [M] drivers/gpu/drm/xe/i915-display/intel_connector.o
CC drivers/gpu/drm/i915/display/intel_atomic_plane.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_crtc.o
CC drivers/gpu/drm/i915/display/intel_audio.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_crtc_state_dump.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 drivers/gpu/drm/i915/display/intel_bios.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_ddi.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 [M] drivers/gpu/drm/xe/i915-display/intel_ddi_buf_trans.o
CC drivers/gpu/drm/i915/display/intel_crtc.o
CC drivers/gpu/drm/i915/display/intel_crtc_state_dump.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/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 [M] drivers/gpu/drm/xe/i915-display/intel_display_driver.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_irq.o
CC drivers/gpu/drm/i915/display/intel_dmc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_params.o
CC drivers/gpu/drm/i915/display/intel_dmc_wl.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power.o
CC drivers/gpu/drm/i915/display/intel_dpio_phy.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 drivers/gpu/drm/i915/display/intel_dpll.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_trace.o
CC drivers/gpu/drm/i915/display/intel_dpll_mgr.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_wa.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 [M] drivers/gpu/drm/xe/i915-display/intel_dkl_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dmc.o
CC drivers/gpu/drm/i915/display/intel_dsb.o
CC drivers/gpu/drm/i915/display/intel_dsb_buffer.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp.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 [M] drivers/gpu/drm/xe/i915-display/intel_dp_aux.o
CC drivers/gpu/drm/i915/display/intel_fdi.o
CC drivers/gpu/drm/i915/display/intel_fifo_underrun.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_aux_backlight.o
CC drivers/gpu/drm/i915/display/intel_frontbuffer.o
CC drivers/gpu/drm/i915/display/intel_global_state.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_hdcp.o
CC drivers/gpu/drm/i915/display/intel_hdcp.o
CC drivers/gpu/drm/i915/display/intel_hdcp_gsc.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 net/mac80211/built-in.a
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpll.o
AR net/built-in.a
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpll_mgr.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 [M] drivers/gpu/drm/xe/i915-display/intel_dpt_common.o
CC drivers/gpu/drm/i915/display/intel_hti.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_drrs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsb.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 [M] drivers/gpu/drm/xe/i915-display/intel_dsi.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 [M] drivers/gpu/drm/xe/i915-display/intel_dsi_dcs_backlight.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi_vbt.o
CC drivers/gpu/drm/i915/display/intel_plane_initial.o
CC drivers/gpu/drm/i915/display/intel_pmdemand.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 [M] drivers/gpu/drm/xe/i915-display/intel_encoder.o
CC drivers/gpu/drm/i915/display/intel_sprite_uapi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fb.o
CC drivers/gpu/drm/i915/display/intel_tc.o
CC drivers/gpu/drm/i915/display/intel_vblank.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fbc.o
CC drivers/gpu/drm/i915/display/intel_vga.o
CC drivers/gpu/drm/i915/display/intel_wm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fdi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fifo_underrun.o
CC drivers/gpu/drm/i915/display/skl_scaler.o
CC drivers/gpu/drm/i915/display/skl_universal_plane.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_frontbuffer.o
CC drivers/gpu/drm/i915/display/skl_watermark.o
CC drivers/gpu/drm/i915/display/intel_acpi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_global_state.o
CC drivers/gpu/drm/i915/display/intel_opregion.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_gmbus.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdcp.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 [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 drivers/gpu/drm/i915/display/dvo_ch7xxx.o
CC drivers/gpu/drm/i915/display/dvo_ivch.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hotplug_irq.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hti.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 [M] drivers/gpu/drm/xe/i915-display/intel_link_bw.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 [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/display/intel_dp.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_setup.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 [M] drivers/gpu/drm/xe/i915-display/intel_pmdemand.o
CC drivers/gpu/drm/i915/display/intel_dp_aux.o
CC drivers/gpu/drm/i915/display/intel_dp_aux_backlight.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pps.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_psr.o
CC drivers/gpu/drm/i915/display/intel_dp_hdcp.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_qp_tables.o
CC drivers/gpu/drm/i915/display/intel_dp_link_training.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_quirks.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_snps_phy.o
CC drivers/gpu/drm/i915/display/intel_dp_mst.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_tc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vblank.o
CC drivers/gpu/drm/i915/display/intel_dsi.o
CC drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vdsc.o
CC drivers/gpu/drm/i915/display/intel_dsi_vbt.o
CC drivers/gpu/drm/i915/display/intel_dvo.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vga.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 [M] drivers/gpu/drm/xe/i915-display/intel_vrr.o
CC drivers/gpu/drm/i915/display/intel_lvds.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dmc_wl.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_wm.o
CC drivers/gpu/drm/i915/display/intel_panel.o
CC drivers/gpu/drm/i915/display/intel_pps.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/display/intel_qp_tables.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_acpi.o
CC drivers/gpu/drm/i915/display/intel_sdvo.o
CC drivers/gpu/drm/i915/display/intel_snps_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_opregion.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_debugfs.o
CC drivers/gpu/drm/i915/display/intel_tv.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_debugfs_params.o
CC drivers/gpu/drm/i915/display/intel_vdsc.o
CC drivers/gpu/drm/i915/display/intel_vrr.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pipe_crc.o
CC drivers/gpu/drm/i915/display/vlv_dsi.o
CC [M] drivers/gpu/drm/xe/xe_device.o
CC [M] drivers/gpu/drm/xe/xe_ggtt.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
LD [M] drivers/gpu/drm/xe/xe.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_suballoc_helper.ko
LD [M] drivers/gpu/drm/drm_exec.ko
LD [M] drivers/gpu/drm/drm_ttm_helper.ko
LD [M] drivers/gpu/drm/scheduler/gpu-sched.ko
LD [M] sound/core/snd-pcm.ko
LD [M] drivers/gpu/drm/drm_gpuvm.ko
LD [M] net/netfilter/xt_nat.ko
LD [M] net/netfilter/xt_MASQUERADE.ko
LD [M] net/netfilter/xt_LOG.ko
LD [M] sound/pci/hda/snd-hda-intel.ko
LD [M] sound/hda/snd-intel-sdw-acpi.ko
LD [M] net/netfilter/xt_mark.ko
LD [M] net/netfilter/xt_addrtype.ko
LD [M] net/ipv4/netfilter/iptable_nat.ko
LD [M] drivers/gpu/drm/xe/xe.ko
LD [M] net/netfilter/nf_log_syslog.ko
LD [M] sound/hda/snd-intel-dspcfg.ko
LD [M] fs/efivarfs/efivarfs.ko
LD [M] drivers/thermal/intel/x86_pkg_temp_thermal.ko
LD [M] sound/core/snd-hwdep.ko
LD [M] sound/pci/hda/snd-hda-codec.ko
LD [M] sound/hda/snd-hda-core.ko
LD [M] sound/pci/hda/snd-hda-codec-hdmi.ko
UPD include/generated/utsversion.h
CC init/version-timestamp.o
LD .tmp_vmlinux.kallsyms1
NM .tmp_vmlinux.kallsyms1.syms
KSYMS .tmp_vmlinux.kallsyms1.S
AS .tmp_vmlinux.kallsyms1.o
LD .tmp_vmlinux.kallsyms2
NM .tmp_vmlinux.kallsyms2.syms
KSYMS .tmp_vmlinux.kallsyms2.S
AS .tmp_vmlinux.kallsyms2.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:1742: warning: Enum value 'DRM_XE_EU_STALL_PROP_MAX' not described in enum 'drm_xe_eu_stall_property_id'
include/uapi/drm/xe_drm.h:1764: warning: Function parameter or struct member 'subslice' not described in 'drm_xe_eu_stall_data_header'
drivers/gpu/drm/xe/xe_eustall_cntr.c:211: warning: Function parameter or struct member 'buf_size' not described in 'buf_data_size'
drivers/gpu/drm/xe/xe_eustall_cntr.c:450: warning: Function parameter or struct member 'file' not described in 'xe_eu_stall_buf_read_locked'
drivers/gpu/drm/xe/xe_eustall_cntr.h:43: warning: Incorrect use of kernel-doc format: * State of the EU stall counter buffer.
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 'gt' 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 'pollin' 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_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'
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 '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 '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 'vaddr' 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'
18 warnings as Errors
run-parts: /workspace/ci/hooks/20-kernel-doc exited with return code 123
^ permalink raw reply [flat|nested] 27+ messages in thread
* ✓ CI.checksparse: success for Add support for EU stall sampling (rev2)
2024-07-07 22:41 [PATCH v2 0/1] Add support for EU stall sampling Ashutosh Dixit
` (5 preceding siblings ...)
2024-07-07 23:02 ` ✗ CI.Hooks: failure " Patchwork
@ 2024-07-07 23:03 ` Patchwork
2024-07-07 23:22 ` ✓ CI.BAT: " Patchwork
` (2 subsequent siblings)
9 siblings, 0 replies; 27+ messages in thread
From: Patchwork @ 2024-07-07 23:03 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
== Series Details ==
Series: Add support for EU stall sampling (rev2)
URL : https://patchwork.freedesktop.org/series/135559/
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 70f1d41b827fa9d1275748e655912f991635f595
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] 27+ messages in thread
* ✓ CI.BAT: success for Add support for EU stall sampling (rev2)
2024-07-07 22:41 [PATCH v2 0/1] Add support for EU stall sampling Ashutosh Dixit
` (6 preceding siblings ...)
2024-07-07 23:03 ` ✓ CI.checksparse: success " Patchwork
@ 2024-07-07 23:22 ` Patchwork
2024-07-08 0:25 ` ✗ CI.FULL: failure " Patchwork
2024-07-19 21:32 ` [PATCH v2 0/1] Add support for EU stall sampling Umesh Nerlige Ramappa
9 siblings, 0 replies; 27+ messages in thread
From: Patchwork @ 2024-07-07 23:22 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 952 bytes --]
== Series Details ==
Series: Add support for EU stall sampling (rev2)
URL : https://patchwork.freedesktop.org/series/135559/
State : success
== Summary ==
CI Bug Log - changes from xe-1569-70f1d41b827fa9d1275748e655912f991635f595_BAT -> xe-pw-135559v2_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (5 -> 5)
------------------------------
No changes in participating hosts
Changes
-------
No changes found
Build changes
-------------
* Linux: xe-1569-70f1d41b827fa9d1275748e655912f991635f595 -> xe-pw-135559v2
IGT_7918: aab1a4b6a9b7855fe6e38ea3b3987a1399ee5816 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-1569-70f1d41b827fa9d1275748e655912f991635f595: 70f1d41b827fa9d1275748e655912f991635f595
xe-pw-135559v2: 135559v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/index.html
[-- Attachment #2: Type: text/html, Size: 1500 bytes --]
^ permalink raw reply [flat|nested] 27+ messages in thread
* ✗ CI.FULL: failure for Add support for EU stall sampling (rev2)
2024-07-07 22:41 [PATCH v2 0/1] Add support for EU stall sampling Ashutosh Dixit
` (7 preceding siblings ...)
2024-07-07 23:22 ` ✓ CI.BAT: " Patchwork
@ 2024-07-08 0:25 ` Patchwork
2024-07-19 21:32 ` [PATCH v2 0/1] Add support for EU stall sampling Umesh Nerlige Ramappa
9 siblings, 0 replies; 27+ messages in thread
From: Patchwork @ 2024-07-08 0:25 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 28421 bytes --]
== Series Details ==
Series: Add support for EU stall sampling (rev2)
URL : https://patchwork.freedesktop.org/series/135559/
State : failure
== Summary ==
CI Bug Log - changes from xe-1569-70f1d41b827fa9d1275748e655912f991635f595_full -> xe-pw-135559v2_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-135559v2_full absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-135559v2_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (3 -> 3)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-135559v2_full:
### IGT changes ###
#### Possible regressions ####
* igt@xe_exec_basic@many-execqueues-many-vm-null:
- shard-adlp: [PASS][1] -> [TIMEOUT][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-8/igt@xe_exec_basic@many-execqueues-many-vm-null.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-6/igt@xe_exec_basic@many-execqueues-many-vm-null.html
* {igt@xe_oa@mmio-triggered-reports@rcs-0} (NEW):
- {shard-lnl}: NOTRUN -> [FAIL][3]
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-lnl-7/igt@xe_oa@mmio-triggered-reports@rcs-0.html
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* {igt@xe_oa@unprivileged-single-ctx-counters}:
- {shard-lnl}: NOTRUN -> [SKIP][4]
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-lnl-4/igt@xe_oa@unprivileged-single-ctx-counters.html
New tests
---------
New tests have been introduced between xe-1569-70f1d41b827fa9d1275748e655912f991635f595_full and xe-pw-135559v2_full:
### New IGT tests (4) ###
* igt@xe_oa@mi-rpc@rcs-0:
- Statuses : 1 pass(s)
- Exec time: [0.02] s
* igt@xe_oa@mmio-triggered-reports@rcs-0:
- Statuses : 1 fail(s)
- Exec time: [0.03] s
* igt@xe_oa@non-zero-reason@rcs-0:
- Statuses : 1 pass(s)
- Exec time: [2.84] s
* igt@xe_oa@polling@rcs-0:
- Statuses : 1 pass(s)
- Exec time: [1.02] s
Known issues
------------
Here are the changes found in xe-pw-135559v2_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] / [Intel XE#1214]) +1 other test dmesg-warn
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-6/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-135559v2/shard-adlp-2/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-x.html
* igt@kms_big_fb@linear-16bpp-rotate-90:
- shard-dg2-set2: NOTRUN -> [SKIP][7] ([Intel XE#1201] / [Intel XE#316])
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-435/igt@kms_big_fb@linear-16bpp-rotate-90.html
* igt@kms_big_fb@x-tiled-8bpp-rotate-90:
- shard-adlp: NOTRUN -> [SKIP][8] ([Intel XE#1201] / [Intel XE#316])
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-2/igt@kms_big_fb@x-tiled-8bpp-rotate-90.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0:
- shard-adlp: NOTRUN -> [SKIP][9] ([Intel XE#1124] / [Intel XE#1201]) +1 other test skip
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-2/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0.html
* igt@kms_ccs@bad-pixel-format-y-tiled-gen12-rc-ccs-cc:
- shard-adlp: NOTRUN -> [SKIP][10] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) +3 other tests skip
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-1/igt@kms_ccs@bad-pixel-format-y-tiled-gen12-rc-ccs-cc.html
* igt@kms_ccs@bad-pixel-format-y-tiled-gen12-rc-ccs-cc@pipe-b-hdmi-a-1:
- shard-adlp: NOTRUN -> [SKIP][11] ([Intel XE#1201] / [Intel XE#787]) +5 other tests skip
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-1/igt@kms_ccs@bad-pixel-format-y-tiled-gen12-rc-ccs-cc@pipe-b-hdmi-a-1.html
* igt@kms_ccs@crc-primary-basic-4-tiled-xe2-ccs:
- shard-adlp: NOTRUN -> [SKIP][12] ([Intel XE#1201] / [Intel XE#1252])
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-2/igt@kms_ccs@crc-primary-basic-4-tiled-xe2-ccs.html
* igt@kms_chamelium_hpd@vga-hpd-after-suspend:
- shard-adlp: NOTRUN -> [SKIP][13] ([Intel XE#1201] / [Intel XE#373])
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-2/igt@kms_chamelium_hpd@vga-hpd-after-suspend.html
* igt@kms_content_protection@dp-mst-type-1:
- shard-dg2-set2: NOTRUN -> [SKIP][14] ([Intel XE#1201] / [Intel XE#307])
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-435/igt@kms_content_protection@dp-mst-type-1.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions:
- shard-adlp: NOTRUN -> [SKIP][15] ([Intel XE#1201] / [Intel XE#309]) +1 other test skip
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-2/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html
* igt@kms_feature_discovery@chamelium:
- shard-adlp: NOTRUN -> [SKIP][16] ([Intel XE#1201] / [Intel XE#701])
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-2/igt@kms_feature_discovery@chamelium.html
* igt@kms_flip@2x-nonexisting-fb-interruptible:
- shard-adlp: NOTRUN -> [SKIP][17] ([Intel XE#1201] / [Intel XE#310]) +1 other test skip
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-1/igt@kms_flip@2x-nonexisting-fb-interruptible.html
* igt@kms_flip@dpms-vs-vblank-race-interruptible@b-hdmi-a6:
- shard-dg2-set2: NOTRUN -> [INCOMPLETE][18] ([Intel XE#1195]) +1 other test incomplete
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-435/igt@kms_flip@dpms-vs-vblank-race-interruptible@b-hdmi-a6.html
* igt@kms_flip@flip-vs-suspend:
- shard-dg2-set2: [PASS][19] -> [INCOMPLETE][20] ([Intel XE#1195] / [Intel XE#2049])
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-434/igt@kms_flip@flip-vs-suspend.html
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-433/igt@kms_flip@flip-vs-suspend.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling@pipe-a-valid-mode:
- shard-adlp: NOTRUN -> [SKIP][21] ([Intel XE#1201] / [Intel XE#455]) +5 other tests skip
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-2/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling@pipe-a-valid-mode.html
* igt@kms_flip_tiling@flip-change-tiling@pipe-c-hdmi-a-1-y-to-x:
- shard-adlp: [PASS][22] -> [FAIL][23] ([Intel XE#1874]) +1 other test fail
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-4/igt@kms_flip_tiling@flip-change-tiling@pipe-c-hdmi-a-1-y-to-x.html
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-8/igt@kms_flip_tiling@flip-change-tiling@pipe-c-hdmi-a-1-y-to-x.html
* igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-render:
- shard-adlp: NOTRUN -> [SKIP][24] ([Intel XE#1201] / [Intel XE#651]) +1 other test skip
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-1/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-render.html
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-render:
- shard-dg2-set2: NOTRUN -> [SKIP][25] ([Intel XE#1201] / [Intel XE#651])
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-435/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-wc:
- shard-adlp: NOTRUN -> [FAIL][26] ([Intel XE#1861])
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-1/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-msflip-blt:
- shard-adlp: NOTRUN -> [SKIP][27] ([Intel XE#1201] / [Intel XE#656]) +4 other tests skip
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-2/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-msflip-blt:
- shard-dg2-set2: NOTRUN -> [SKIP][28] ([Intel XE#1201] / [Intel XE#653]) +1 other test skip
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-435/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@psr-suspend:
- shard-adlp: NOTRUN -> [SKIP][29] ([Intel XE#1201] / [Intel XE#653]) +1 other test skip
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-2/igt@kms_frontbuffer_tracking@psr-suspend.html
* igt@kms_hdr@static-toggle-suspend@pipe-a-hdmi-a-6:
- shard-dg2-set2: NOTRUN -> [FAIL][30] ([Intel XE#616])
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-433/igt@kms_hdr@static-toggle-suspend@pipe-a-hdmi-a-6.html
* igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4:
- shard-dg2-set2: [PASS][31] -> [FAIL][32] ([Intel XE#361]) +1 other test fail
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-466/igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4.html
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-436/igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4.html
* igt@kms_psr@fbc-psr-cursor-plane-onoff:
- shard-dg2-set2: NOTRUN -> [SKIP][33] ([Intel XE#1201] / [Intel XE#929]) +1 other test skip
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-435/igt@kms_psr@fbc-psr-cursor-plane-onoff.html
* igt@kms_psr@psr-cursor-blt:
- shard-adlp: NOTRUN -> [SKIP][34] ([Intel XE#1201] / [Intel XE#929]) +2 other tests skip
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-2/igt@kms_psr@psr-cursor-blt.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
- shard-adlp: NOTRUN -> [SKIP][35] ([Intel XE#1127] / [Intel XE#1201])
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-1/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html
* igt@kms_sequence@queue-idle:
- shard-dg2-set2: [PASS][36] -> [INCOMPLETE][37] ([Intel XE#1195]) +3 other tests incomplete
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-463/igt@kms_sequence@queue-idle.html
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-464/igt@kms_sequence@queue-idle.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-adlp: NOTRUN -> [SKIP][38] ([Intel XE#1201] / [Intel XE#362])
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-2/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-b-dp-4:
- shard-dg2-set2: [PASS][39] -> [FAIL][40] ([Intel XE#899])
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-464/igt@kms_universal_plane@cursor-fb-leak@pipe-b-dp-4.html
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-466/igt@kms_universal_plane@cursor-fb-leak@pipe-b-dp-4.html
* igt@xe_compute@ccs-mode-basic:
- shard-adlp: NOTRUN -> [SKIP][41] ([Intel XE#1201] / [Intel XE#1447])
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-2/igt@xe_compute@ccs-mode-basic.html
* igt@xe_evict@evict-beng-large-multi-vm-cm:
- shard-adlp: NOTRUN -> [SKIP][42] ([Intel XE#1201] / [Intel XE#261])
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-2/igt@xe_evict@evict-beng-large-multi-vm-cm.html
* igt@xe_evict@evict-threads-large:
- shard-dg2-set2: [PASS][43] -> [TIMEOUT][44] ([Intel XE#1473] / [Intel XE#392]) +2 other tests timeout
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-433/igt@xe_evict@evict-threads-large.html
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-466/igt@xe_evict@evict-threads-large.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-invalidate:
- shard-adlp: NOTRUN -> [SKIP][45] ([Intel XE#1201] / [Intel XE#1392]) +1 other test skip
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-2/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-invalidate.html
* igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-userptr-invalidate-race-imm:
- shard-adlp: NOTRUN -> [SKIP][46] ([Intel XE#1201] / [Intel XE#288]) +3 other tests skip
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-1/igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-userptr-invalidate-race-imm.html
* igt@xe_exec_threads@threads-fd-userptr:
- shard-adlp: [PASS][47] -> [INCOMPLETE][48] ([Intel XE#1169] / [Intel XE#1195])
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-8/igt@xe_exec_threads@threads-fd-userptr.html
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-6/igt@xe_exec_threads@threads-fd-userptr.html
* igt@xe_gt_freq@freq_fixed_exec:
- shard-adlp: NOTRUN -> [FAIL][49] ([Intel XE#1414])
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-1/igt@xe_gt_freq@freq_fixed_exec.html
* igt@xe_pm@s4-basic-exec:
- shard-adlp: [PASS][50] -> [ABORT][51] ([Intel XE#1358] / [Intel XE#1794]) +1 other test abort
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-6/igt@xe_pm@s4-basic-exec.html
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-9/igt@xe_pm@s4-basic-exec.html
* igt@xe_pm@s4-vm-bind-userptr:
- shard-adlp: [PASS][52] -> [ABORT][53] ([Intel XE#1794])
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-6/igt@xe_pm@s4-vm-bind-userptr.html
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-9/igt@xe_pm@s4-vm-bind-userptr.html
* igt@xe_query@multigpu-query-invalid-uc-fw-version-mbz:
- shard-dg2-set2: NOTRUN -> [SKIP][54] ([Intel XE#1201] / [Intel XE#944])
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-435/igt@xe_query@multigpu-query-invalid-uc-fw-version-mbz.html
#### Possible fixes ####
* igt@kms_flip@2x-absolute-wf_vblank-interruptible:
- shard-dg2-set2: [INCOMPLETE][55] ([Intel XE#1195]) -> [PASS][56] +1 other test pass
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-433/igt@kms_flip@2x-absolute-wf_vblank-interruptible.html
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-435/igt@kms_flip@2x-absolute-wf_vblank-interruptible.html
* igt@kms_flip_tiling@flip-change-tiling@pipe-b-hdmi-a-1-y-to-y:
- shard-adlp: [FAIL][57] ([Intel XE#1874]) -> [PASS][58] +1 other test pass
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-4/igt@kms_flip_tiling@flip-change-tiling@pipe-b-hdmi-a-1-y-to-y.html
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-8/igt@kms_flip_tiling@flip-change-tiling@pipe-b-hdmi-a-1-y-to-y.html
* igt@kms_plane@plane-position-covered:
- {shard-lnl}: [DMESG-FAIL][59] ([Intel XE#324]) -> [PASS][60] +1 other test pass
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-lnl-7/igt@kms_plane@plane-position-covered.html
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-lnl-3/igt@kms_plane@plane-position-covered.html
* {igt@kms_plane@plane-position-hole-dpms@pipe-b-plane-4}:
- {shard-lnl}: [DMESG-WARN][61] ([Intel XE#324]) -> [PASS][62] +1 other test pass
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-lnl-4/igt@kms_plane@plane-position-hole-dpms@pipe-b-plane-4.html
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-lnl-5/igt@kms_plane@plane-position-hole-dpms@pipe-b-plane-4.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-6:
- shard-dg2-set2: [FAIL][63] ([Intel XE#899]) -> [PASS][64]
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-464/igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-6.html
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-466/igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-6.html
* igt@xe_evict@evict-beng-threads-large:
- shard-dg2-set2: [TIMEOUT][65] ([Intel XE#1473]) -> [PASS][66]
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-464/igt@xe_evict@evict-beng-threads-large.html
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-436/igt@xe_evict@evict-beng-threads-large.html
* igt@xe_exec_threads@threads-mixed-userptr-invalidate-race:
- shard-dg2-set2: [DMESG-FAIL][67] ([Intel XE#1069]) -> [PASS][68]
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-435/igt@xe_exec_threads@threads-mixed-userptr-invalidate-race.html
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-434/igt@xe_exec_threads@threads-mixed-userptr-invalidate-race.html
* igt@xe_pm@s4-d3hot-basic-exec:
- {shard-lnl}: [ABORT][69] ([Intel XE#1358] / [Intel XE#1607]) -> [PASS][70]
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-lnl-2/igt@xe_pm@s4-d3hot-basic-exec.html
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-lnl-6/igt@xe_pm@s4-d3hot-basic-exec.html
* igt@xe_pm@s4-exec-after:
- shard-adlp: [ABORT][71] ([Intel XE#1358]) -> [PASS][72]
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-9/igt@xe_pm@s4-exec-after.html
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-2/igt@xe_pm@s4-exec-after.html
* igt@xe_pm@s4-vm-bind-prefetch:
- {shard-lnl}: [ABORT][73] ([Intel XE#1794]) -> [PASS][74]
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-lnl-2/igt@xe_pm@s4-vm-bind-prefetch.html
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-lnl-8/igt@xe_pm@s4-vm-bind-prefetch.html
- shard-adlp: [ABORT][75] ([Intel XE#1794]) -> [PASS][76]
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-9/igt@xe_pm@s4-vm-bind-prefetch.html
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-1/igt@xe_pm@s4-vm-bind-prefetch.html
#### Warnings ####
* igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
- shard-adlp: [DMESG-FAIL][77] ([Intel XE#324]) -> [FAIL][78] ([Intel XE#1231])
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-2/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-8/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
* igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip:
- shard-adlp: [FAIL][79] ([Intel XE#1231]) -> [DMESG-FAIL][80] ([Intel XE#324])
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-4/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-1/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html
* igt@kms_pm_dc@dc9-dpms:
- shard-adlp: [FAIL][81] ([Intel XE#1204]) -> [SKIP][82] ([Intel XE#1201] / [Intel XE#734])
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-8/igt@kms_pm_dc@dc9-dpms.html
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-6/igt@kms_pm_dc@dc9-dpms.html
* igt@xe_wedged@wedged-at-any-timeout:
- shard-dg2-set2: [DMESG-FAIL][83] ([Intel XE#1760]) -> [DMESG-WARN][84] ([Intel XE#1214] / [Intel XE#1760])
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-463/igt@xe_wedged@wedged-at-any-timeout.html
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-dg2-433/igt@xe_wedged@wedged-at-any-timeout.html
- shard-adlp: [DMESG-WARN][85] ([Intel XE#1214] / [Intel XE#1330] / [Intel XE#1760]) -> [DMESG-FAIL][86] ([Intel XE#1760])
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-8/igt@xe_wedged@wedged-at-any-timeout.html
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/shard-adlp-2/igt@xe_wedged@wedged-at-any-timeout.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#1062]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1062
[Intel XE#1069]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1069
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
[Intel XE#1152]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1152
[Intel XE#1169]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1169
[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#1204]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1204
[Intel XE#1214]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1214
[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#1330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1330
[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#1397]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1397
[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#1414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1414
[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#1435]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1435
[Intel XE#1447]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1447
[Intel XE#1469]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1469
[Intel XE#1473]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1473
[Intel XE#1512]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1512
[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#1745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1745
[Intel XE#1760]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1760
[Intel XE#1794]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1794
[Intel XE#1861]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1861
[Intel XE#1874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1874
[Intel XE#1948]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1948
[Intel XE#2049]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2049
[Intel XE#261]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/261
[Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
[Intel XE#305]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/305
[Intel XE#307]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/307
[Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#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#346]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/346
[Intel XE#356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/356
[Intel XE#361]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/361
[Intel XE#362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/362
[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#392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/392
[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#512]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/512
[Intel XE#599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/599
[Intel XE#616]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/616
[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#701]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/701
[Intel XE#734]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/734
[Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
[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#911]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/911
[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-1569-70f1d41b827fa9d1275748e655912f991635f595 -> xe-pw-135559v2
IGT_7918: aab1a4b6a9b7855fe6e38ea3b3987a1399ee5816 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-1569-70f1d41b827fa9d1275748e655912f991635f595: 70f1d41b827fa9d1275748e655912f991635f595
xe-pw-135559v2: 135559v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135559v2/index.html
[-- Attachment #2: Type: text/html, Size: 32052 bytes --]
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-07-07 22:41 ` [PATCH v2 1/1] drm/xe/eustall: " Ashutosh Dixit
@ 2024-07-12 20:34 ` Souza, Jose
2024-07-19 20:21 ` Souza, Jose
` (2 subsequent siblings)
3 siblings, 0 replies; 27+ messages in thread
From: Souza, Jose @ 2024-07-12 20:34 UTC (permalink / raw)
To: Dixit, Ashutosh, intel-xe@lists.freedesktop.org; +Cc: Chegondi, Harish
On Sun, 2024-07-07 at 15:41 -0700, Ashutosh Dixit wrote:
> From: Harish Chegondi <harish.chegondi@intel.com>
>
>
> +/**
> + * 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,
> +
> + DRM_XE_EU_STALL_PROP_MAX
> +};
> +
> +/**
>
The PROP_MAX was removed from OA counters, I think this should also not have it.
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-07-07 22:41 ` [PATCH v2 1/1] drm/xe/eustall: " Ashutosh Dixit
2024-07-12 20:34 ` Souza, Jose
@ 2024-07-19 20:21 ` Souza, Jose
2024-08-26 17:32 ` Harish Chegondi
2024-08-16 22:37 ` Dixit, Ashutosh
2024-08-22 23:41 ` Matt Roper
3 siblings, 1 reply; 27+ messages in thread
From: Souza, Jose @ 2024-07-19 20:21 UTC (permalink / raw)
To: Dixit, Ashutosh, intel-xe@lists.freedesktop.org, Degrood, Felix J
Cc: Chegondi, Harish
On Sun, 2024-07-07 at 15:41 -0700, Ashutosh Dixit wrote:
> From: Harish Chegondi <harish.chegondi@intel.com>
>
> 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
> DRM_XE_OBSERVATION_IOCTL_ENABLE and DRM_XE_OBSERVATION_IOCTL_DISABLE
> IOCTLs. User space can also call poll() to check for availability of
> data. The data can be read with read(). EU stall data consists of header
> and data pairs. The header format is defined in struct
> drm_xe_eu_stall_data_header. 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 data, it simply drops data due
> to unavailable buffer space. In that case hardware sets a bit in a
> register. The driver sets a flag in the EU stall data header flags field
> to let the user space know that the hardware has dropped data.
>
> 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 | 1005 ++++++++++++++++++++
> drivers/gpu/drm/xe/xe_eustall_cntr.h | 62 ++
> drivers/gpu/drm/xe/xe_gt.c | 3 +
> 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 | 4 +
> drivers/gpu/drm/xe/xe_observation.c | 14 +
> drivers/gpu/drm/xe/xe_trace.h | 35 +
> include/uapi/drm/xe_drm.h | 77 ++
> 11 files changed, 1246 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 0eb0acc4f198..13d935ac40b3 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -54,6 +54,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..183638f8e1e2
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_eustall_cntr.c
> @@ -0,0 +1,1005 @@
> +// 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_gt_topology.h"
> +#include "xe_eustall_cntr.h"
> +#include "xe_force_wake.h"
> +#include "regs/xe_gt_regs.h"
> +
> +#define CACHELINE_BYTES 64
> +#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);
> +}
> +
> +void xe_eustall_cntr_init(struct xe_gt *gt)
> +{
> + mutex_init(>->eu_stall_cntr.lock);
> +}
> +
> +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, int ext_number,
> + struct eu_stall_open_properties *props)
> +{
> + u64 __user *address = u64_to_user_ptr(extension);
> + struct drm_xe_user_extension ext;
> + int err;
> + u32 idx;
> +
> + if (XE_IOCTL_DBG(xe, ext_number >= DRM_XE_EU_STALL_PROP_MAX))
> + return -E2BIG;
> +
> + 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, ++ext_number, 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_reg, 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;
> + 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 there has been an engine reset by GuC, and GuC doesn't restore
> + * the read and write pointer registers, the pointers will reset to 0.
> + * If so, update the cached read pointer.
> + */
> + if (unlikely((write_ptr < read_ptr) &&
> + ((read_ptr & buf_size) == (write_ptr & buf_size)))) {
> + read_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT1,
> + group, instance);
> + read_ptr = read_ptr_reg & XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
> + read_ptr <<= (6 - XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT);
> + read_ptr &= ((buf_size << 1) - 1);
> + dss_buf->read = read_ptr;
> + }
> + 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)
> + dss_buf->line_drop = true;
> + 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, u8 s, u8 ss)
> +{
> + 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, s, ss);
> + 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,
> + u8 s, u8 ss)
> +{
> + unsigned int dss_per_grp = gt_to_xe(gt)->info.platform == XE_PVC ? 8 : 4;
> + size_t size, buf_size = stream->per_dss_buf_size;
> + u16 flags = 0, subslice = (s * dss_per_grp) + ss;
> + struct drm_xe_eu_stall_data_header header;
> + 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;
> + bool line_drop = false;
> + int ret = 0;
> +
> + /* 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[subslice];
> + mutex_lock(&dss_buf->lock);
> + dss_start_vaddr = dss_buf->vaddr;
> + read_ptr = dss_buf->read;
> + write_ptr = dss_buf->write;
> + line_drop = dss_buf->line_drop;
> + read_offset = read_ptr & (buf_size - 1);
> + write_offset = write_ptr & (buf_size - 1);
> + /*
> + * If there has been an engine reset by GuC, and GuC doesn't restore
> + * the read and write pointer registers, the pointers will reset to 0.
> + * If so, update the cached read pointer.
> + */
> + if (unlikely((write_ptr < read_ptr) &&
> + ((read_ptr & buf_size) == (write_ptr & buf_size)))) {
> + read_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT1,
> + s, ss);
> + read_ptr = read_ptr_reg & XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
> + read_ptr <<= (6 - XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT);
> + read_ptr &= ((buf_size << 1) - 1);
> + read_offset = read_ptr & (buf_size - 1);
> + dss_buf->read = read_ptr;
> + }
> +
> + trace_xe_eu_stall_cntr_read(s, ss, 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 + sizeof(header)) > count) {
> + mutex_unlock(&dss_buf->lock);
> + return 0;
> + }
> +
> + if (line_drop)
> + flags = XE_EU_STALL_FLAG_OVERFLOW_DROP;
> +
> + /* Driver doesn't expose the number of C-slices to user space.
> + * A PVC configuration of 8 c-slices x 8 sub-slices will be
> + * exposed to the user space as 1 slice x 64 sub-slices.
> + */
> + header.subslice = subslice;
> + header.flags = flags;
> + header.record_size = CACHELINE_BYTES;
why CACHELINE_BYTES?
I would expected it to be the same size as drm_xe_eu_stall_data_xe2.
If it is for performance optimization then add reserved fields to drm_xe_eu_stall_data_xe2 until it is the same size as CACHELINE_BYTES.
> + header.num_records = size / header.record_size;
> +
> + if (copy_to_user((buf + *total_size), &header, sizeof(header))) {
> + mutex_unlock(&dss_buf->lock);
> + return -EFAULT;
> + }
> + *total_size += sizeof(header);
> +
> + 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, s, ss);
> + trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_REPORT1.__reg).addr,
> + read_ptr_reg, sizeof(read_ptr_reg));
> + if (dss_buf->line_drop) {
> + clear_dropped_eviction_line_bit(gt, s, ss);
> + dss_buf->line_drop = false;
> + }
> + dss_buf->read = read_ptr;
> + mutex_unlock(&dss_buf->lock);
> + trace_xe_eu_stall_cntr_read(s, ss, read_ptr, write_ptr,
> + read_offset, write_offset, *total_size);
> + return ret;
ret is only set in the beginning of the function...
> +}
> +
> +/**
> + * 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;
> + int ret = 0, dss;
> +
> + 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);
> + 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)
> +{
> + struct xe_tile *tile = stream->gt->tile;
> + struct xe_gt *gt = stream->gt;
> + struct xe_bo *bo;
> + u32 size;
> + int ret = 0;
> + unsigned int last_dss;
> + xe_dss_mask_t all_dss;
> +
> + 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.
> + */
> + last_dss = xe_dss_mask_last_dss(all_dss);
> + size = per_dss_buf_size * (last_dss + 1);
> +
> + 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))
> + ret = PTR_ERR(bo);
> +
> + stream->bo = bo;
> + stream->vaddr = bo->vmap.is_iomem ? bo->vmap.vaddr_iomem : bo->vmap.vaddr;
> +
> + return ret;
> +}
> +
> +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;
> + u32 reg_value;
> + int dss;
> +
> + 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)
> +{
> + 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);
> + if (ret)
> + return ret;
> +
> + 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;
> + dss_buf->line_drop = false;
> + 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)
> + return -EIO;
> +
> + 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(>->eu_stall_cntr.lock);
> + ret = xe_eu_stall_buf_read_locked(stream, file, buf, count, ppos);
> + mutex_unlock(>->eu_stall_cntr.lock);
> + } while (ret == -EAGAIN);
> + } else {
> + mutex_lock(>->eu_stall_cntr.lock);
> + ret = xe_eu_stall_buf_read_locked(stream, file, buf, count, ppos);
> + mutex_unlock(>->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(>->eu_stall_cntr.lock);
> + ret = xe_eu_stall_buf_poll_locked(stream, file, wait);
> + mutex_unlock(>->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_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;
> + }
> +
> + 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(>->eu_stall_cntr.lock);
> + ret = xe_eu_stall_cntr_ioctl_locked(stream, cmd, arg);
> + mutex_unlock(>->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(>->eu_stall_cntr.lock);
> + xe_eu_stall_destroy_locked(stream);
> + kfree(stream);
> + gt->eu_stall_cntr.stream = NULL;
> + mutex_unlock(>->eu_stall_cntr.lock);
> +
> + /* Release the reference the EU stall stream kept on the driver */
> + drm_dev_put(>->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;
> +
> + bitmap_or(all_dss, gt->fuse_topo.g_dss_mask, gt->fuse_topo.c_dss_mask,
> + XE_MAX_DSS_FUSE_BITS);
> +
> + 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;
> + }
> +
> + tile_buf_size = props->eu_stall_buf_sz * (xe_dss_mask_last_dss(all_dss) + 1);
> + 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);
> + 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(>->tile->xe->drm);
> +
> + return stream_fd;
> +
> +err_open:
> + free_eu_stall_cntr_buf(stream);
> +err_alloc:
> + gt->eu_stall_cntr.stream = NULL;
> + 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, 0, &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(>->eu_stall_cntr.lock);
> + ret = xe_open_eu_stall_stream_locked(dev, &props, file, gt);
> + mutex_unlock(>->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..7a99b8c819d3
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_eustall_cntr.h
> @@ -0,0 +1,62 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#ifndef __XE_EUSTALL_CNTR_H__
> +#define __XE_EUSTALL_CNTR_H__
> +
> +#include <drm/drm_file.h>
> +#include <drm/xe_drm.h>
> +#include "regs/xe_eu_stall_regs.h"
> +
> +#define XE_MAX_DSS 128
> +
> +struct per_dss_buf {
> + u8 *vaddr;
> + u32 write;
> + u32 read;
> + bool line_drop;
> + /* 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 {
> + struct xe_bo *bo;
> + struct xe_gt *gt;
> +
> + bool enabled;
> + bool pollin;
> + size_t per_dss_buf_size;
> + struct hrtimer poll_check_timer;
> + struct work_struct buf_check_work;
> + struct workqueue_struct *buf_check_wq;
> + wait_queue_head_t poll_wq;
> + u32 event_report_count;
> + u64 poll_period;
> +
> + /**
> + * State of the EU stall counter buffer.
> + */
> + u8 *vaddr;
> + struct per_dss_buf dss_buf[XE_MAX_DSS];
> +};
> +
> +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;
> +};
> +
> +void 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 ce8994b808fe..74f4205a6d60 100644
> --- a/drivers/gpu/drm/xe/xe_gt.c
> +++ b/drivers/gpu/drm/xe/xe_gt.c
> @@ -61,6 +61,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)
> {
> @@ -622,6 +623,8 @@ int xe_gt_init(struct xe_gt *gt)
>
> xe_gt_record_user_engines(gt);
>
> + xe_eustall_cntr_init(gt);
> +
> return 0;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_gt_topology.c b/drivers/gpu/drm/xe/xe_gt_topology.c
> index 25ff03ab8448..54a57179a53c 100644
> --- a/drivers/gpu/drm/xe/xe_gt_topology.c
> +++ b/drivers/gpu/drm/xe/xe_gt_topology.c
> @@ -247,6 +247,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 6b5e0b45efb0..609db0154122 100644
> --- a/drivers/gpu/drm/xe/xe_gt_types.h
> +++ b/drivers/gpu/drm/xe/xe_gt_types.h
> @@ -16,6 +16,7 @@
> #include "xe_reg_sr_types.h"
> #include "xe_sa_types.h"
> #include "xe_uc_types.h"
> +#include "xe_eustall_cntr.h"
>
> struct xe_exec_queue_ops;
> struct xe_migrate;
> @@ -391,6 +392,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 fcb584b42a7d..5db9c589ce24 100644
> --- a/drivers/gpu/drm/xe/xe_observation.c
> +++ b/drivers/gpu/drm/xe/xe_observation.c
> @@ -8,6 +8,7 @@
>
> #include <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 09ca1ad057b0..ef532eae3f88 100644
> --- a/drivers/gpu/drm/xe/xe_trace.h
> +++ b/drivers/gpu/drm/xe/xe_trace.h
> @@ -374,6 +374,41 @@ TRACE_EVENT(xe_reg_rw,
> (u32)(__entry->val >> 32))
> );
>
> +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 19619d4952a8..343de700d10d 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -1387,6 +1387,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,
> };
>
> /**
> @@ -1686,6 +1688,81 @@ 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,
> +
> + DRM_XE_EU_STALL_PROP_MAX
> +};
> +
> +/**
> + * struct drm_xe_eu_stall_data_header - EU stall data header.
> + * Header with additional information that the driver adds
> + * before EU stall data of each subslice during read().
> + */
> +struct drm_xe_eu_stall_data_header {
> + /** @subslice: subslice number from which the following data
> + * has been captured.
> + */
> + __u16 subslice;
> + /** @flags: flags */
> + __u16 flags;
> +/* EU stall data dropped by the HW due to memory buffer being full */
> +#define XE_EU_STALL_FLAG_OVERFLOW_DROP (1 << 0)
> + /** @record_size: size of each EU stall data record */
> + __u16 record_size;
> + /** @num_records: number of records following the header */
> + __u16 num_records;
> + /** @reserved: Reserved */
> + __u16 reserved[4];
> +};
> +
> #if defined(__cplusplus)
> }
> #endif
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 0/1] Add support for EU stall sampling
2024-07-07 22:41 [PATCH v2 0/1] Add support for EU stall sampling Ashutosh Dixit
` (8 preceding siblings ...)
2024-07-08 0:25 ` ✗ CI.FULL: failure " Patchwork
@ 2024-07-19 21:32 ` Umesh Nerlige Ramappa
9 siblings, 0 replies; 27+ messages in thread
From: Umesh Nerlige Ramappa @ 2024-07-19 21:32 UTC (permalink / raw)
To: Ashutosh Dixit; +Cc: intel-xe, Harish Chegondi
On Sun, Jul 07, 2024 at 03:41:40PM -0700, Ashutosh Dixit wrote:
> 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.
>
>I am posting this patch as an RFC to get early feedback in the uAPI
maybe not an RFC anymore?
>while support for this feature is being added into Mesa. 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.
>
>The EU stall data from the driver include a header with additional
>information about the data that follows the header. The header
>includes flags one of which indicate if data has been dropped has
s/has been dropped//
>been dropped by the hardware due to buffer being full. While read
>returns the total bytes read, any data dropped by the hardware will
>be indicated in the flags.
>One feedback received so far is to make
>read return an error when data has been dropped by the hardware
>instead of setting a flag in the header.
if dropped data can be mapped to an intuitive error in the return of
read, we should definitely do that. If multiple headers are returned in
a read call and only some header blobs are affected, then, IMO, we
should also set the flag for the relevant headers.
>One suggestion received
>is to consider two FDs per EU stall data stream with one fd to read
>data and other fd to pass any errors. please comment on this idea
>that's not represented in the code
If it is just one stream of data, then I would avoid an additional FD
for passing errors. Read should be able to handle returning errors. Is
there a limitation in the generic file ops (like read()) that EU stall
supports? Are errors very common when consuming EU stall data?
Regards,
Umesh
>
>Thank You.
>
>v2: Rename xe perf layer as xe observation layer
>
>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 | 1005 ++++++++++++++++++++
> drivers/gpu/drm/xe/xe_eustall_cntr.h | 62 ++
> drivers/gpu/drm/xe/xe_gt.c | 3 +
> 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 | 4 +
> drivers/gpu/drm/xe/xe_observation.c | 14 +
> drivers/gpu/drm/xe/xe_trace.h | 35 +
> include/uapi/drm/xe_drm.h | 77 ++
> 11 files changed, 1246 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.41.0
>
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-07-07 22:41 ` [PATCH v2 1/1] drm/xe/eustall: " Ashutosh Dixit
2024-07-12 20:34 ` Souza, Jose
2024-07-19 20:21 ` Souza, Jose
@ 2024-08-16 22:37 ` Dixit, Ashutosh
2024-08-21 19:35 ` Cabral, Matias A
2024-08-22 23:41 ` Matt Roper
3 siblings, 1 reply; 27+ messages in thread
From: Dixit, Ashutosh @ 2024-08-16 22:37 UTC (permalink / raw)
To: intel-xe
Cc: Harish Chegondi, Umesh Nerlige Ramappa, felix.j.degrood,
Jose Souza, matias.a.cabral
On Sun, 07 Jul 2024 15:41:41 -0700, Ashutosh Dixit wrote:
Hi Harish,
Some comments below on just the uapi first, towards finalizing the uapi
with the UMD's who consume this data. And also comparing the uapi with what
we did in OA.
>
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index 19619d4952a8..343de700d10d 100644
/snip/
> +/**
> + * struct drm_xe_eu_stall_data_header - EU stall data header.
> + * Header with additional information that the driver adds
> + * before EU stall data of each subslice during read().
One question to resolve is if we really need this header and if UMD's are
actually using the information in this header. In OA we dropped the
header and are providing information in the header via different means (see
below).
Another option is to actually add a property for the header. So headers are
added only when user space requests headers.
> + */
> +struct drm_xe_eu_stall_data_header {
> + /** @subslice: subslice number from which the following data
> + * has been captured.
> + */
> + __u16 subslice;
Do UMD's use this subslice information? We should check with L0 and Mesa
about this.
Also about whether UMD's need or want the header itself. For OA, UMD's were
happy not having to parse the header.
> + /** @flags: flags */
> + __u16 flags;
> +/* EU stall data dropped by the HW due to memory buffer being full */
> +#define XE_EU_STALL_FLAG_OVERFLOW_DROP (1 << 0)
In OA such information is returned via DRM_XE_OBSERVATION_IOCTL_STATUS. For
EU stall, e.g. we could return a bit mask of subslices which reporting
drops. So similar to OA, we could return -EIO when HW reports drops and
userspace optionally issues DRM_XE_OBSERVATION_IOCTL_STATUS to retrieve
which subslices are reporting drops.
> + /** @record_size: size of each EU stall data record */
> + __u16 record_size;
This is static information. Does it need to be in each packet header?
E.g. it can be returned via DRM_XE_OBSERVATION_IOCTL_INFO after a EU Stall
stream has been opened.
The INFO data struct could also include a capabilities field. So if new
features are added to EU stall in the future, they would be advertized to
user space using the capabilities field.
> + /** @num_records: number of records following the header */
> + __u16 num_records;
This will not be needed if just return raw EU Stall data without
headers. Or even otherwise it is probably not needed, it is the total size
of returned data minus the size of the header. Provided we return all
available data.
> + /** @reserved: Reserved */
> + __u16 reserved[4];
This can be handled via 'extensions'. And if headers change they can be
advertized in capabilities.
> +};
> +
> #if defined(__cplusplus)
> }
> #endif
> --
> 2.41.0
>
Thanks.
--
Ashutosh
^ permalink raw reply [flat|nested] 27+ messages in thread
* RE: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-08-16 22:37 ` Dixit, Ashutosh
@ 2024-08-21 19:35 ` Cabral, Matias A
2024-08-22 22:53 ` Dixit, Ashutosh
0 siblings, 1 reply; 27+ messages in thread
From: Cabral, Matias A @ 2024-08-21 19:35 UTC (permalink / raw)
To: Dixit, Ashutosh, intel-xe@lists.freedesktop.org
Cc: Chegondi, Harish, Nerlige Ramappa, Umesh, Degrood, Felix J,
Souza, Jose, Ranjan, Joshua Santhosh, Kumar, Shubham
Hi Ashutosh,
Some inline questions below [MAC]
Thanks,
_MAC
-----Original Message-----
From: Dixit, Ashutosh <ashutosh.dixit@intel.com>
Sent: Friday, August 16, 2024 3:38 PM
To: intel-xe@lists.freedesktop.org
Cc: Chegondi, Harish <harish.chegondi@intel.com>; Nerlige Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Degrood, Felix J <felix.j.degrood@intel.com>; Souza, Jose <jose.souza@intel.com>; Cabral, Matias A <matias.a.cabral@intel.com>
Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
On Sun, 07 Jul 2024 15:41:41 -0700, Ashutosh Dixit wrote:
Hi Harish,
Some comments below on just the uapi first, towards finalizing the uapi with the UMD's who consume this data. And also comparing the uapi with what we did in OA.
>
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index 19619d4952a8..343de700d10d 100644
/snip/
> +/**
> + * struct drm_xe_eu_stall_data_header - EU stall data header.
> + * Header with additional information that the driver adds
> + * before EU stall data of each subslice during read().
One question to resolve is if we really need this header and if UMD's are actually using the information in this header. In OA we dropped the header and are providing information in the header via different means (see below).
Another option is to actually add a property for the header. So headers are added only when user space requests headers.
> + */
> +struct drm_xe_eu_stall_data_header {
> + /** @subslice: subslice number from which the following data
> + * has been captured.
> + */
> + __u16 subslice;
Do UMD's use this subslice information? We should check with L0 and Mesa about this.
[MAC] L0 does not currently use this.
Also about whether UMD's need or want the header itself. For OA, UMD's were happy not having to parse the header.
> + /** @flags: flags */
> + __u16 flags;
> +/* EU stall data dropped by the HW due to memory buffer being full */
> +#define XE_EU_STALL_FLAG_OVERFLOW_DROP (1 << 0)
In OA such information is returned via DRM_XE_OBSERVATION_IOCTL_STATUS. For EU stall, e.g. we could return a bit mask of subslices which reporting drops. So similar to OA, we could return -EIO when HW reports drops and userspace optionally issues DRM_XE_OBSERVATION_IOCTL_STATUS to retrieve which subslices are reporting drops.
[MAC] having a return code to notify of reports drops would be much preferable. This would allow the UMD detecting this condition during the read phase without needing to process/parse each report.
> + /** @record_size: size of each EU stall data record */
> + __u16 record_size;
This is static information. Does it need to be in each packet header?
E.g. it can be returned via DRM_XE_OBSERVATION_IOCTL_INFO after a EU Stall stream has been opened.
[MAC] since the size is constant, it seems an overhead including the info in every report.
The INFO data struct could also include a capabilities field. So if new features are added to EU stall in the future, they would be advertized to user space using the capabilities field.
> + /** @num_records: number of records following the header */
> + __u16 num_records;
This will not be needed if just return raw EU Stall data without headers. Or even otherwise it is probably not needed, it is the total size of returned data minus the size of the header. Provided we return all available data.
[MAC] the KMD will always return atomic units of reports, right? Then this is not needed, having UMD the possibility to query report size when opening the stream, the UMD can know how many reports are in each read.
> + /** @reserved: Reserved */
> + __u16 reserved[4];
This can be handled via 'extensions'. And if headers change they can be advertized in capabilities.
> +};
> +
> #if defined(__cplusplus)
> }
> #endif
> --
> 2.41.0
>
Thanks.
--
Ashutosh
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-08-21 19:35 ` Cabral, Matias A
@ 2024-08-22 22:53 ` Dixit, Ashutosh
2024-08-23 13:09 ` Souza, Jose
2024-08-23 21:22 ` Souza, Jose
0 siblings, 2 replies; 27+ messages in thread
From: Dixit, Ashutosh @ 2024-08-22 22:53 UTC (permalink / raw)
To: Cabral, Matias A
Cc: intel-xe@lists.freedesktop.org, Chegondi, Harish,
Nerlige Ramappa, Umesh, Degrood, Felix J, Souza, Jose,
Ranjan, Joshua Santhosh, Kumar, Shubham, James Ausmus
On Wed, 21 Aug 2024 12:35:51 -0700, Cabral, Matias A wrote:
Hi Matias,
Thanks for responding, the input is _very_ helpful.
Mesa folks: would it be possible for you to provide similar input too?
Thanks.
--
Ashutosh
>
> Hi Ashutosh,
>
> Some inline questions below [MAC]
>
> Thanks,
> _MAC
>
> -----Original Message-----
> From: Dixit, Ashutosh <ashutosh.dixit@intel.com>
> Sent: Friday, August 16, 2024 3:38 PM
> To: intel-xe@lists.freedesktop.org
> Cc: Chegondi, Harish <harish.chegondi@intel.com>; Nerlige Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Degrood, Felix J <felix.j.degrood@intel.com>; Souza, Jose <jose.souza@intel.com>; Cabral, Matias A <matias.a.cabral@intel.com>
> Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
>
> On Sun, 07 Jul 2024 15:41:41 -0700, Ashutosh Dixit wrote:
>
> Hi Harish,
>
> Some comments below on just the uapi first, towards finalizing the uapi
> with the UMD's who consume this data. And also comparing the uapi with
> what we did in OA.
>
> >
> > diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> > index 19619d4952a8..343de700d10d 100644
>
> /snip/
>
> > +/**
> > + * struct drm_xe_eu_stall_data_header - EU stall data header.
> > + * Header with additional information that the driver adds
> > + * before EU stall data of each subslice during read().
>
> One question to resolve is if we really need this header and if UMD's are
> actually using the information in this header. In OA we dropped the
> header and are providing information in the header via different means
> (see below).
>
> Another option is to actually add a property for the header. So headers
> are added only when user space requests headers.
>
> > + */
> > +struct drm_xe_eu_stall_data_header {
> > + /** @subslice: subslice number from which the following data
> > + * has been captured.
> > + */
> > + __u16 subslice;
>
> Do UMD's use this subslice information? We should check with L0 and Mesa about this.
>
> [MAC] L0 does not currently use this.
>
> Also about whether UMD's need or want the header itself. For OA, UMD's
> were happy not having to parse the header.
>
> > + /** @flags: flags */
> > + __u16 flags;
> > +/* EU stall data dropped by the HW due to memory buffer being full */
> > +#define XE_EU_STALL_FLAG_OVERFLOW_DROP (1 << 0)
>
> In OA such information is returned via
> DRM_XE_OBSERVATION_IOCTL_STATUS. For EU stall, e.g. we could return a bit
> mask of subslices which reporting drops. So similar to OA, we could
> return -EIO when HW reports drops and userspace optionally issues
> DRM_XE_OBSERVATION_IOCTL_STATUS to retrieve which subslices are reporting
> drops.
>
> [MAC] having a return code to notify of reports drops would be much
> preferable. This would allow the UMD detecting this condition during the
> read phase without needing to process/parse each report.
>
> > + /** @record_size: size of each EU stall data record */
> > + __u16 record_size;
>
> This is static information. Does it need to be in each packet header?
> E.g. it can be returned via DRM_XE_OBSERVATION_IOCTL_INFO after a EU
> Stall stream has been opened.
>
> [MAC] since the size is constant, it seems an overhead including the info
> in every report.
>
> The INFO data struct could also include a capabilities field. So if new
> features are added to EU stall in the future, they would be advertized to
> user space using the capabilities field.
>
> > + /** @num_records: number of records following the header */
> > + __u16 num_records;
>
> This will not be needed if just return raw EU Stall data without
> headers. Or even otherwise it is probably not needed, it is the total
> size of returned data minus the size of the header. Provided we return
> all available data.
>
> [MAC] the KMD will always return atomic units of reports, right? Then
> this is not needed, having UMD the possibility to query report size when
> opening the stream, the UMD can know how many reports are in each read.
>
> > + /** @reserved: Reserved */
> > + __u16 reserved[4];
>
> This can be handled via 'extensions'. And if headers change they can be
> advertized in capabilities.
>
> > +};
> > +
> > #if defined(__cplusplus)
> > }
> > #endif
> > --
> > 2.41.0
> >
>
> Thanks.
> --
> Ashutosh
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-07-07 22:41 ` [PATCH v2 1/1] drm/xe/eustall: " Ashutosh Dixit
` (2 preceding siblings ...)
2024-08-16 22:37 ` Dixit, Ashutosh
@ 2024-08-22 23:41 ` Matt Roper
3 siblings, 0 replies; 27+ messages in thread
From: Matt Roper @ 2024-08-22 23:41 UTC (permalink / raw)
To: Ashutosh Dixit; +Cc: intel-xe, Harish Chegondi
On Sun, Jul 07, 2024 at 03:41:41PM -0700, Ashutosh Dixit wrote:
> From: Harish Chegondi <harish.chegondi@intel.com>
>
> 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
> DRM_XE_OBSERVATION_IOCTL_ENABLE and DRM_XE_OBSERVATION_IOCTL_DISABLE
> IOCTLs. User space can also call poll() to check for availability of
> data. The data can be read with read(). EU stall data consists of header
> and data pairs. The header format is defined in struct
> drm_xe_eu_stall_data_header. 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 data, it simply drops data due
> to unavailable buffer space. In that case hardware sets a bit in a
> register. The driver sets a flag in the EU stall data header flags field
> to let the user space know that the hardware has dropped data.
>
> 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 | 1005 ++++++++++++++++++++
> drivers/gpu/drm/xe/xe_eustall_cntr.h | 62 ++
> drivers/gpu/drm/xe/xe_gt.c | 3 +
> 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 | 4 +
> drivers/gpu/drm/xe/xe_observation.c | 14 +
> drivers/gpu/drm/xe/xe_trace.h | 35 +
> include/uapi/drm/xe_drm.h | 77 ++
> 11 files changed, 1246 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 0eb0acc4f198..13d935ac40b3 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -54,6 +54,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..183638f8e1e2
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_eustall_cntr.c
> @@ -0,0 +1,1005 @@
> +// 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_gt_topology.h"
> +#include "xe_eustall_cntr.h"
> +#include "xe_force_wake.h"
> +#include "regs/xe_gt_regs.h"
> +
> +#define CACHELINE_BYTES 64
> +#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);
> +}
> +
> +void xe_eustall_cntr_init(struct xe_gt *gt)
> +{
> + mutex_init(>->eu_stall_cntr.lock);
> +}
> +
> +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, int ext_number,
> + struct eu_stall_open_properties *props)
> +{
> + u64 __user *address = u64_to_user_ptr(extension);
> + struct drm_xe_user_extension ext;
> + int err;
> + u32 idx;
> +
> + if (XE_IOCTL_DBG(xe, ext_number >= DRM_XE_EU_STALL_PROP_MAX))
> + return -E2BIG;
> +
> + 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, ++ext_number, 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_reg, 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;
> + 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 there has been an engine reset by GuC, and GuC doesn't restore
> + * the read and write pointer registers, the pointers will reset to 0.
> + * If so, update the cached read pointer.
> + */
> + if (unlikely((write_ptr < read_ptr) &&
> + ((read_ptr & buf_size) == (write_ptr & buf_size)))) {
> + read_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT1,
> + group, instance);
> + read_ptr = read_ptr_reg & XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
> + read_ptr <<= (6 - XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT);
> + read_ptr &= ((buf_size << 1) - 1);
> + dss_buf->read = read_ptr;
> + }
> + 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)
> + dss_buf->line_drop = true;
> + 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, u8 s, u8 ss)
> +{
> + 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, s, ss);
> + 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,
> + u8 s, u8 ss)
> +{
> + unsigned int dss_per_grp = gt_to_xe(gt)->info.platform == XE_PVC ? 8 : 4;
I haven't really looked at this patch in detail, but one drive-by
comment: we shouldn't be open-coding this assignment. There's now a
dss_per_group() in xe_gt_mcr.c that determines this in a future-proof
manner that will continue to work even if future platforms change the
physical layout. You probably don't want to call that function on every
read, but you can call it once and stash the value somewhere to be
re-used later.
Although I also wonder if we even want to be directly working with
steering targets at this level of the code. It seems like the per-DSS
accesses are common enough in this eustall code (and also other upcoming
stuff like eudebug) that maybe it would make more sense to add a
dedicated xe_gt_mcr_unicast_read_dss() helper to the MCR library to
reduce the duplicated complexity in these other components.
Matt
> + size_t size, buf_size = stream->per_dss_buf_size;
> + u16 flags = 0, subslice = (s * dss_per_grp) + ss;
> + struct drm_xe_eu_stall_data_header header;
> + 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;
> + bool line_drop = false;
> + int ret = 0;
> +
> + /* 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[subslice];
> + mutex_lock(&dss_buf->lock);
> + dss_start_vaddr = dss_buf->vaddr;
> + read_ptr = dss_buf->read;
> + write_ptr = dss_buf->write;
> + line_drop = dss_buf->line_drop;
> + read_offset = read_ptr & (buf_size - 1);
> + write_offset = write_ptr & (buf_size - 1);
> + /*
> + * If there has been an engine reset by GuC, and GuC doesn't restore
> + * the read and write pointer registers, the pointers will reset to 0.
> + * If so, update the cached read pointer.
> + */
> + if (unlikely((write_ptr < read_ptr) &&
> + ((read_ptr & buf_size) == (write_ptr & buf_size)))) {
> + read_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT1,
> + s, ss);
> + read_ptr = read_ptr_reg & XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
> + read_ptr <<= (6 - XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT);
> + read_ptr &= ((buf_size << 1) - 1);
> + read_offset = read_ptr & (buf_size - 1);
> + dss_buf->read = read_ptr;
> + }
> +
> + trace_xe_eu_stall_cntr_read(s, ss, 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 + sizeof(header)) > count) {
> + mutex_unlock(&dss_buf->lock);
> + return 0;
> + }
> +
> + if (line_drop)
> + flags = XE_EU_STALL_FLAG_OVERFLOW_DROP;
> +
> + /* Driver doesn't expose the number of C-slices to user space.
> + * A PVC configuration of 8 c-slices x 8 sub-slices will be
> + * exposed to the user space as 1 slice x 64 sub-slices.
> + */
> + header.subslice = subslice;
> + header.flags = flags;
> + header.record_size = CACHELINE_BYTES;
> + header.num_records = size / header.record_size;
> +
> + if (copy_to_user((buf + *total_size), &header, sizeof(header))) {
> + mutex_unlock(&dss_buf->lock);
> + return -EFAULT;
> + }
> + *total_size += sizeof(header);
> +
> + 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, s, ss);
> + trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_REPORT1.__reg).addr,
> + read_ptr_reg, sizeof(read_ptr_reg));
> + if (dss_buf->line_drop) {
> + clear_dropped_eviction_line_bit(gt, s, ss);
> + dss_buf->line_drop = false;
> + }
> + dss_buf->read = read_ptr;
> + mutex_unlock(&dss_buf->lock);
> + trace_xe_eu_stall_cntr_read(s, ss, read_ptr, write_ptr,
> + read_offset, write_offset, *total_size);
> + return ret;
> +}
> +
> +/**
> + * 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;
> + int ret = 0, dss;
> +
> + 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);
> + 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)
> +{
> + struct xe_tile *tile = stream->gt->tile;
> + struct xe_gt *gt = stream->gt;
> + struct xe_bo *bo;
> + u32 size;
> + int ret = 0;
> + unsigned int last_dss;
> + xe_dss_mask_t all_dss;
> +
> + 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.
> + */
> + last_dss = xe_dss_mask_last_dss(all_dss);
> + size = per_dss_buf_size * (last_dss + 1);
> +
> + 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))
> + ret = PTR_ERR(bo);
> +
> + stream->bo = bo;
> + stream->vaddr = bo->vmap.is_iomem ? bo->vmap.vaddr_iomem : bo->vmap.vaddr;
> +
> + return ret;
> +}
> +
> +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;
> + u32 reg_value;
> + int dss;
> +
> + 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)
> +{
> + 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);
> + if (ret)
> + return ret;
> +
> + 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;
> + dss_buf->line_drop = false;
> + 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)
> + return -EIO;
> +
> + 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(>->eu_stall_cntr.lock);
> + ret = xe_eu_stall_buf_read_locked(stream, file, buf, count, ppos);
> + mutex_unlock(>->eu_stall_cntr.lock);
> + } while (ret == -EAGAIN);
> + } else {
> + mutex_lock(>->eu_stall_cntr.lock);
> + ret = xe_eu_stall_buf_read_locked(stream, file, buf, count, ppos);
> + mutex_unlock(>->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(>->eu_stall_cntr.lock);
> + ret = xe_eu_stall_buf_poll_locked(stream, file, wait);
> + mutex_unlock(>->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_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;
> + }
> +
> + 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(>->eu_stall_cntr.lock);
> + ret = xe_eu_stall_cntr_ioctl_locked(stream, cmd, arg);
> + mutex_unlock(>->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(>->eu_stall_cntr.lock);
> + xe_eu_stall_destroy_locked(stream);
> + kfree(stream);
> + gt->eu_stall_cntr.stream = NULL;
> + mutex_unlock(>->eu_stall_cntr.lock);
> +
> + /* Release the reference the EU stall stream kept on the driver */
> + drm_dev_put(>->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;
> +
> + bitmap_or(all_dss, gt->fuse_topo.g_dss_mask, gt->fuse_topo.c_dss_mask,
> + XE_MAX_DSS_FUSE_BITS);
> +
> + 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;
> + }
> +
> + tile_buf_size = props->eu_stall_buf_sz * (xe_dss_mask_last_dss(all_dss) + 1);
> + 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);
> + 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(>->tile->xe->drm);
> +
> + return stream_fd;
> +
> +err_open:
> + free_eu_stall_cntr_buf(stream);
> +err_alloc:
> + gt->eu_stall_cntr.stream = NULL;
> + 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, 0, &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(>->eu_stall_cntr.lock);
> + ret = xe_open_eu_stall_stream_locked(dev, &props, file, gt);
> + mutex_unlock(>->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..7a99b8c819d3
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_eustall_cntr.h
> @@ -0,0 +1,62 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#ifndef __XE_EUSTALL_CNTR_H__
> +#define __XE_EUSTALL_CNTR_H__
> +
> +#include <drm/drm_file.h>
> +#include <drm/xe_drm.h>
> +#include "regs/xe_eu_stall_regs.h"
> +
> +#define XE_MAX_DSS 128
> +
> +struct per_dss_buf {
> + u8 *vaddr;
> + u32 write;
> + u32 read;
> + bool line_drop;
> + /* 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 {
> + struct xe_bo *bo;
> + struct xe_gt *gt;
> +
> + bool enabled;
> + bool pollin;
> + size_t per_dss_buf_size;
> + struct hrtimer poll_check_timer;
> + struct work_struct buf_check_work;
> + struct workqueue_struct *buf_check_wq;
> + wait_queue_head_t poll_wq;
> + u32 event_report_count;
> + u64 poll_period;
> +
> + /**
> + * State of the EU stall counter buffer.
> + */
> + u8 *vaddr;
> + struct per_dss_buf dss_buf[XE_MAX_DSS];
> +};
> +
> +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;
> +};
> +
> +void 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 ce8994b808fe..74f4205a6d60 100644
> --- a/drivers/gpu/drm/xe/xe_gt.c
> +++ b/drivers/gpu/drm/xe/xe_gt.c
> @@ -61,6 +61,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)
> {
> @@ -622,6 +623,8 @@ int xe_gt_init(struct xe_gt *gt)
>
> xe_gt_record_user_engines(gt);
>
> + xe_eustall_cntr_init(gt);
> +
> return 0;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_gt_topology.c b/drivers/gpu/drm/xe/xe_gt_topology.c
> index 25ff03ab8448..54a57179a53c 100644
> --- a/drivers/gpu/drm/xe/xe_gt_topology.c
> +++ b/drivers/gpu/drm/xe/xe_gt_topology.c
> @@ -247,6 +247,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 6b5e0b45efb0..609db0154122 100644
> --- a/drivers/gpu/drm/xe/xe_gt_types.h
> +++ b/drivers/gpu/drm/xe/xe_gt_types.h
> @@ -16,6 +16,7 @@
> #include "xe_reg_sr_types.h"
> #include "xe_sa_types.h"
> #include "xe_uc_types.h"
> +#include "xe_eustall_cntr.h"
>
> struct xe_exec_queue_ops;
> struct xe_migrate;
> @@ -391,6 +392,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 fcb584b42a7d..5db9c589ce24 100644
> --- a/drivers/gpu/drm/xe/xe_observation.c
> +++ b/drivers/gpu/drm/xe/xe_observation.c
> @@ -8,6 +8,7 @@
>
> #include <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 09ca1ad057b0..ef532eae3f88 100644
> --- a/drivers/gpu/drm/xe/xe_trace.h
> +++ b/drivers/gpu/drm/xe/xe_trace.h
> @@ -374,6 +374,41 @@ TRACE_EVENT(xe_reg_rw,
> (u32)(__entry->val >> 32))
> );
>
> +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 19619d4952a8..343de700d10d 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -1387,6 +1387,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,
> };
>
> /**
> @@ -1686,6 +1688,81 @@ 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,
> +
> + DRM_XE_EU_STALL_PROP_MAX
> +};
> +
> +/**
> + * struct drm_xe_eu_stall_data_header - EU stall data header.
> + * Header with additional information that the driver adds
> + * before EU stall data of each subslice during read().
> + */
> +struct drm_xe_eu_stall_data_header {
> + /** @subslice: subslice number from which the following data
> + * has been captured.
> + */
> + __u16 subslice;
> + /** @flags: flags */
> + __u16 flags;
> +/* EU stall data dropped by the HW due to memory buffer being full */
> +#define XE_EU_STALL_FLAG_OVERFLOW_DROP (1 << 0)
> + /** @record_size: size of each EU stall data record */
> + __u16 record_size;
> + /** @num_records: number of records following the header */
> + __u16 num_records;
> + /** @reserved: Reserved */
> + __u16 reserved[4];
> +};
> +
> #if defined(__cplusplus)
> }
> #endif
> --
> 2.41.0
>
--
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-08-22 22:53 ` Dixit, Ashutosh
@ 2024-08-23 13:09 ` Souza, Jose
2024-08-23 19:24 ` Dixit, Ashutosh
2024-08-23 21:22 ` Souza, Jose
1 sibling, 1 reply; 27+ messages in thread
From: Souza, Jose @ 2024-08-23 13:09 UTC (permalink / raw)
To: Dixit, Ashutosh, Cabral, Matias A
Cc: intel-xe@lists.freedesktop.org, Degrood, Felix J,
Nerlige Ramappa, Umesh, Ranjan, Joshua Santhosh, Chegondi, Harish,
Kumar, Shubham, Ausmus, James
On Thu, 2024-08-22 at 15:53 -0700, Dixit, Ashutosh wrote:
> On Wed, 21 Aug 2024 12:35:51 -0700, Cabral, Matias A wrote:
>
> Hi Matias,
>
> Thanks for responding, the input is _very_ helpful.
>
> Mesa folks: would it be possible for you to provide similar input too?
https://patchwork.freedesktop.org/patch/602553/?series=135559&rev=2#comment_1098100
https://patchwork.freedesktop.org/patch/602553/?series=135559&rev=2#comment_1099803
>
> Thanks.
> --
> Ashutosh
>
>
> >
> > Hi Ashutosh,
> >
> > Some inline questions below [MAC]
> >
> > Thanks,
> > _MAC
> >
> > -----Original Message-----
> > From: Dixit, Ashutosh <ashutosh.dixit@intel.com>
> > Sent: Friday, August 16, 2024 3:38 PM
> > To: intel-xe@lists.freedesktop.org
> > Cc: Chegondi, Harish <harish.chegondi@intel.com>; Nerlige Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Degrood, Felix J <felix.j.degrood@intel.com>; Souza, Jose <jose.souza@intel.com>; Cabral, Matias A <matias.a.cabral@intel.com>
> > Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
> >
> > On Sun, 07 Jul 2024 15:41:41 -0700, Ashutosh Dixit wrote:
> >
> > Hi Harish,
> >
> > Some comments below on just the uapi first, towards finalizing the uapi
> > with the UMD's who consume this data. And also comparing the uapi with
> > what we did in OA.
> >
> > >
> > > diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> > > index 19619d4952a8..343de700d10d 100644
> >
> > /snip/
> >
> > > +/**
> > > + * struct drm_xe_eu_stall_data_header - EU stall data header.
> > > + * Header with additional information that the driver adds
> > > + * before EU stall data of each subslice during read().
> >
> > One question to resolve is if we really need this header and if UMD's are
> > actually using the information in this header. In OA we dropped the
> > header and are providing information in the header via different means
> > (see below).
> >
> > Another option is to actually add a property for the header. So headers
> > are added only when user space requests headers.
> >
> > > + */
> > > +struct drm_xe_eu_stall_data_header {
> > > + /** @subslice: subslice number from which the following data
> > > + * has been captured.
> > > + */
> > > + __u16 subslice;
> >
> > Do UMD's use this subslice information? We should check with L0 and Mesa about this.
> >
> > [MAC] L0 does not currently use this.
> >
> > Also about whether UMD's need or want the header itself. For OA, UMD's
> > were happy not having to parse the header.
> >
> > > + /** @flags: flags */
> > > + __u16 flags;
> > > +/* EU stall data dropped by the HW due to memory buffer being full */
> > > +#define XE_EU_STALL_FLAG_OVERFLOW_DROP (1 << 0)
> >
> > In OA such information is returned via
> > DRM_XE_OBSERVATION_IOCTL_STATUS. For EU stall, e.g. we could return a bit
> > mask of subslices which reporting drops. So similar to OA, we could
> > return -EIO when HW reports drops and userspace optionally issues
> > DRM_XE_OBSERVATION_IOCTL_STATUS to retrieve which subslices are reporting
> > drops.
> >
> > [MAC] having a return code to notify of reports drops would be much
> > preferable. This would allow the UMD detecting this condition during the
> > read phase without needing to process/parse each report.
> >
> > > + /** @record_size: size of each EU stall data record */
> > > + __u16 record_size;
> >
> > This is static information. Does it need to be in each packet header?
> > E.g. it can be returned via DRM_XE_OBSERVATION_IOCTL_INFO after a EU
> > Stall stream has been opened.
> >
> > [MAC] since the size is constant, it seems an overhead including the info
> > in every report.
> >
> > The INFO data struct could also include a capabilities field. So if new
> > features are added to EU stall in the future, they would be advertized to
> > user space using the capabilities field.
> >
> > > + /** @num_records: number of records following the header */
> > > + __u16 num_records;
> >
> > This will not be needed if just return raw EU Stall data without
> > headers. Or even otherwise it is probably not needed, it is the total
> > size of returned data minus the size of the header. Provided we return
> > all available data.
> >
> > [MAC] the KMD will always return atomic units of reports, right? Then
> > this is not needed, having UMD the possibility to query report size when
> > opening the stream, the UMD can know how many reports are in each read.
> >
> > > + /** @reserved: Reserved */
> > > + __u16 reserved[4];
> >
> > This can be handled via 'extensions'. And if headers change they can be
> > advertized in capabilities.
> >
> > > +};
> > > +
> > > #if defined(__cplusplus)
> > > }
> > > #endif
> > > --
> > > 2.41.0
> > >
> >
> > Thanks.
> > --
> > Ashutosh
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-08-23 13:09 ` Souza, Jose
@ 2024-08-23 19:24 ` Dixit, Ashutosh
0 siblings, 0 replies; 27+ messages in thread
From: Dixit, Ashutosh @ 2024-08-23 19:24 UTC (permalink / raw)
To: Souza, Jose
Cc: Cabral, Matias A, intel-xe@lists.freedesktop.org,
Degrood, Felix J, Nerlige Ramappa, Umesh, Ranjan, Joshua Santhosh,
Chegondi, Harish, Kumar, Shubham, Ausmus, James
On Fri, 23 Aug 2024 06:09:58 -0700, Souza, Jose wrote:
>
Hi Jose,
> On Thu, 2024-08-22 at 15:53 -0700, Dixit, Ashutosh wrote:
> > On Wed, 21 Aug 2024 12:35:51 -0700, Cabral, Matias A wrote:
> >
> > Hi Matias,
> >
> > Thanks for responding, the input is _very_ helpful.
> >
> > Mesa folks: would it be possible for you to provide similar input too?
>
> https://patchwork.freedesktop.org/patch/602553/?series=135559&rev=2#comment_1098100
> https://patchwork.freedesktop.org/patch/602553/?series=135559&rev=2#comment_1099803
This is not what I meant, these comments are more in the nature of code
reviews. What I meant was review of the uapi itself. E.g., following the
discussion below, what we are interested in is things like:
a. Whether Mesa is actually consuming fields in the EU Stall header which
KMD appends to EU stall packets sent to user space.
b. Whether Mesa prefers to parse the header or get status from a return
code
So things like that. It would be great if someone from Mesa could respond
to my original email and address the points raised there.
Thanks.
--
Ashutosh
>
> >
> > Thanks.
> > --
> > Ashutosh
> >
> >
> > >
> > > Hi Ashutosh,
> > >
> > > Some inline questions below [MAC]
> > >
> > > Thanks,
> > > _MAC
> > >
> > > -----Original Message-----
> > > From: Dixit, Ashutosh <ashutosh.dixit@intel.com>
> > > Sent: Friday, August 16, 2024 3:38 PM
> > > To: intel-xe@lists.freedesktop.org
> > > Cc: Chegondi, Harish <harish.chegondi@intel.com>; Nerlige Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Degrood, Felix J <felix.j.degrood@intel.com>; Souza, Jose <jose.souza@intel.com>; Cabral, Matias A <matias.a.cabral@intel.com>
> > > Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
> > >
> > > On Sun, 07 Jul 2024 15:41:41 -0700, Ashutosh Dixit wrote:
> > >
> > > Hi Harish,
> > >
> > > Some comments below on just the uapi first, towards finalizing the uapi
> > > with the UMD's who consume this data. And also comparing the uapi with
> > > what we did in OA.
> > >
> > > >
> > > > diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> > > > index 19619d4952a8..343de700d10d 100644
> > >
> > > /snip/
> > >
> > > > +/**
> > > > + * struct drm_xe_eu_stall_data_header - EU stall data header.
> > > > + * Header with additional information that the driver adds
> > > > + * before EU stall data of each subslice during read().
> > >
> > > One question to resolve is if we really need this header and if UMD's are
> > > actually using the information in this header. In OA we dropped the
> > > header and are providing information in the header via different means
> > > (see below).
> > >
> > > Another option is to actually add a property for the header. So headers
> > > are added only when user space requests headers.
> > >
> > > > + */
> > > > +struct drm_xe_eu_stall_data_header {
> > > > + /** @subslice: subslice number from which the following data
> > > > + * has been captured.
> > > > + */
> > > > + __u16 subslice;
> > >
> > > Do UMD's use this subslice information? We should check with L0 and Mesa about this.
> > >
> > > [MAC] L0 does not currently use this.
> > >
> > > Also about whether UMD's need or want the header itself. For OA, UMD's
> > > were happy not having to parse the header.
> > >
> > > > + /** @flags: flags */
> > > > + __u16 flags;
> > > > +/* EU stall data dropped by the HW due to memory buffer being full */
> > > > +#define XE_EU_STALL_FLAG_OVERFLOW_DROP (1 << 0)
> > >
> > > In OA such information is returned via
> > > DRM_XE_OBSERVATION_IOCTL_STATUS. For EU stall, e.g. we could return a bit
> > > mask of subslices which reporting drops. So similar to OA, we could
> > > return -EIO when HW reports drops and userspace optionally issues
> > > DRM_XE_OBSERVATION_IOCTL_STATUS to retrieve which subslices are reporting
> > > drops.
> > >
> > > [MAC] having a return code to notify of reports drops would be much
> > > preferable. This would allow the UMD detecting this condition during the
> > > read phase without needing to process/parse each report.
> > >
> > > > + /** @record_size: size of each EU stall data record */
> > > > + __u16 record_size;
> > >
> > > This is static information. Does it need to be in each packet header?
> > > E.g. it can be returned via DRM_XE_OBSERVATION_IOCTL_INFO after a EU
> > > Stall stream has been opened.
> > >
> > > [MAC] since the size is constant, it seems an overhead including the info
> > > in every report.
> > >
> > > The INFO data struct could also include a capabilities field. So if new
> > > features are added to EU stall in the future, they would be advertized to
> > > user space using the capabilities field.
> > >
> > > > + /** @num_records: number of records following the header */
> > > > + __u16 num_records;
> > >
> > > This will not be needed if just return raw EU Stall data without
> > > headers. Or even otherwise it is probably not needed, it is the total
> > > size of returned data minus the size of the header. Provided we return
> > > all available data.
> > >
> > > [MAC] the KMD will always return atomic units of reports, right? Then
> > > this is not needed, having UMD the possibility to query report size when
> > > opening the stream, the UMD can know how many reports are in each read.
> > >
> > > > + /** @reserved: Reserved */
> > > > + __u16 reserved[4];
> > >
> > > This can be handled via 'extensions'. And if headers change they can be
> > > advertized in capabilities.
> > >
> > > > +};
> > > > +
> > > > #if defined(__cplusplus)
> > > > }
> > > > #endif
> > > > --
> > > > 2.41.0
> > > >
> > >
> > > Thanks.
> > > --
> > > Ashutosh
>
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-08-22 22:53 ` Dixit, Ashutosh
2024-08-23 13:09 ` Souza, Jose
@ 2024-08-23 21:22 ` Souza, Jose
2024-08-26 16:48 ` Dixit, Ashutosh
1 sibling, 1 reply; 27+ messages in thread
From: Souza, Jose @ 2024-08-23 21:22 UTC (permalink / raw)
To: Dixit, Ashutosh, Cabral, Matias A
Cc: intel-xe@lists.freedesktop.org, Degrood, Felix J,
Nerlige Ramappa, Umesh, Ranjan, Joshua Santhosh, Chegondi, Harish,
Kumar, Shubham, Ausmus, James
Hi
On Thu, 2024-08-22 at 15:53 -0700, Dixit, Ashutosh wrote:
> On Wed, 21 Aug 2024 12:35:51 -0700, Cabral, Matias A wrote:
>
> Hi Matias,
>
> Thanks for responding, the input is _very_ helpful.
>
> Mesa folks: would it be possible for you to provide similar input too?
Felix's MR[1] is only using record_size and num_records, if the drm_xe_eu_stall_data_xe2 was the same size and the sample we would not need the header
at all, inline replies below.
[1] https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30142
>
> Thanks.
> --
> Ashutosh
>
>
> >
> > Hi Ashutosh,
> >
> > Some inline questions below [MAC]
> >
> > Thanks,
> > _MAC
> >
> > -----Original Message-----
> > From: Dixit, Ashutosh <ashutosh.dixit@intel.com>
> > Sent: Friday, August 16, 2024 3:38 PM
> > To: intel-xe@lists.freedesktop.org
> > Cc: Chegondi, Harish <harish.chegondi@intel.com>; Nerlige Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Degrood, Felix J <felix.j.degrood@intel.com>; Souza, Jose <jose.souza@intel.com>; Cabral, Matias A <matias.a.cabral@intel.com>
> > Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
> >
> > On Sun, 07 Jul 2024 15:41:41 -0700, Ashutosh Dixit wrote:
> >
> > Hi Harish,
> >
> > Some comments below on just the uapi first, towards finalizing the uapi
> > with the UMD's who consume this data. And also comparing the uapi with
> > what we did in OA.
> >
> > >
> > > diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> > > index 19619d4952a8..343de700d10d 100644
> >
> > /snip/
> >
> > > +/**
> > > + * struct drm_xe_eu_stall_data_header - EU stall data header.
> > > + * Header with additional information that the driver adds
> > > + * before EU stall data of each subslice during read().
> >
> > One question to resolve is if we really need this header and if UMD's are
> > actually using the information in this header. In OA we dropped the
> > header and are providing information in the header via different means
> > (see below).
> >
> > Another option is to actually add a property for the header. So headers
> > are added only when user space requests headers.
> >
> > > + */
> > > +struct drm_xe_eu_stall_data_header {
> > > + /** @subslice: subslice number from which the following data
> > > + * has been captured.
> > > + */
> > > + __u16 subslice;
> >
> > Do UMD's use this subslice information? We should check with L0 and Mesa about this.
> >
> > [MAC] L0 does not currently use this.
No usage for sublice at the moment in Mesa
> >
> > Also about whether UMD's need or want the header itself. For OA, UMD's
> > were happy not having to parse the header.
> >
> > > + /** @flags: flags */
> > > + __u16 flags;
> > > +/* EU stall data dropped by the HW due to memory buffer being full */
> > > +#define XE_EU_STALL_FLAG_OVERFLOW_DROP (1 << 0)
> >
> > In OA such information is returned via
> > DRM_XE_OBSERVATION_IOCTL_STATUS. For EU stall, e.g. we could return a bit
> > mask of subslices which reporting drops. So similar to OA, we could
> > return -EIO when HW reports drops and userspace optionally issues
> > DRM_XE_OBSERVATION_IOCTL_STATUS to retrieve which subslices are reporting
> > drops.
> >
> > [MAC] having a return code to notify of reports drops would be much
> > preferable. This would allow the UMD detecting this condition during the
> > read phase without needing to process/parse each report.
But what can UMD do when that is set?
I would rather have a warn once printed on dmesg, so the issues don't go silent but it don't need to go to the uAPI.
> >
> > > + /** @record_size: size of each EU stall data record */
> > > + __u16 record_size;
> >
> > This is static information. Does it need to be in each packet header?
> > E.g. it can be returned via DRM_XE_OBSERVATION_IOCTL_INFO after a EU
> > Stall stream has been opened.
> >
> > [MAC] since the size is constant, it seems an overhead including the info
> > in every report.
drm_xe_eu_stall_data_xe2 should be of the same size as record_size so it can also be dropped.
> >
> > The INFO data struct could also include a capabilities field. So if new
> > features are added to EU stall in the future, they would be advertized to
> > user space using the capabilities field.
> >
> > > + /** @num_records: number of records following the header */
> > > + __u16 num_records;
> >
> > This will not be needed if just return raw EU Stall data without
> > headers. Or even otherwise it is probably not needed, it is the total
> > size of returned data minus the size of the header. Provided we return
> > all available data.
Same as above, would not be needed if drm_xe_eu_stall_data_xe2 matches samples size.
> >
> > [MAC] the KMD will always return atomic units of reports, right? Then
> > this is not needed, having UMD the possibility to query report size when
> > opening the stream, the UMD can know how many reports are in each read.
> >
> > > + /** @reserved: Reserved */
> > > + __u16 reserved[4];
> >
> > This can be handled via 'extensions'. And if headers change they can be
> > advertized in capabilities.
> >
> > > +};
> > > +
> > > #if defined(__cplusplus)
> > > }
> > > #endif
> > > --
> > > 2.41.0
> > >
> >
> > Thanks.
> > --
> > Ashutosh
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-08-23 21:22 ` Souza, Jose
@ 2024-08-26 16:48 ` Dixit, Ashutosh
2024-08-26 17:31 ` Cabral, Matias A
0 siblings, 1 reply; 27+ messages in thread
From: Dixit, Ashutosh @ 2024-08-26 16:48 UTC (permalink / raw)
To: Souza, Jose
Cc: Cabral, Matias A, intel-xe@lists.freedesktop.org,
Degrood, Felix J, Nerlige Ramappa, Umesh, Ranjan, Joshua Santhosh,
Chegondi, Harish, Kumar, Shubham, Ausmus, James
On Fri, 23 Aug 2024 14:22:19 -0700, Souza, Jose wrote:
>
> Hi
Thanks Jose. One question for Matias/L0 below.
> On Thu, 2024-08-22 at 15:53 -0700, Dixit, Ashutosh wrote:
> > On Wed, 21 Aug 2024 12:35:51 -0700, Cabral, Matias A wrote:
> >
> > Hi Matias,
> >
> > Thanks for responding, the input is _very_ helpful.
> >
> > Mesa folks: would it be possible for you to provide similar input too?
>
> Felix's MR[1] is only using record_size and num_records, if the
> drm_xe_eu_stall_data_xe2 was the same size and the sample we would not
> need the header at all, inline replies below.
>
> [1] https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30142
>
> >
> > Thanks.
> > --
> > Ashutosh
> >
> >
> > >
> > > Hi Ashutosh,
> > >
> > > Some inline questions below [MAC]
> > >
> > > Thanks,
> > > _MAC
> > >
> > > -----Original Message-----
> > > From: Dixit, Ashutosh <ashutosh.dixit@intel.com>
> > > Sent: Friday, August 16, 2024 3:38 PM
> > > To: intel-xe@lists.freedesktop.org
> > > Cc: Chegondi, Harish <harish.chegondi@intel.com>; Nerlige Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Degrood, Felix J <felix.j.degrood@intel.com>; Souza, Jose <jose.souza@intel.com>; Cabral, Matias A <matias.a.cabral@intel.com>
> > > Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
> > >
> > > On Sun, 07 Jul 2024 15:41:41 -0700, Ashutosh Dixit wrote:
> > >
> > > Hi Harish,
> > >
> > > Some comments below on just the uapi first, towards finalizing the uapi
> > > with the UMD's who consume this data. And also comparing the uapi with
> > > what we did in OA.
> > >
> > > >
> > > > diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> > > > index 19619d4952a8..343de700d10d 100644
> > >
> > > /snip/
> > >
> > > > +/**
> > > > + * struct drm_xe_eu_stall_data_header - EU stall data header.
> > > > + * Header with additional information that the driver adds
> > > > + * before EU stall data of each subslice during read().
> > >
> > > One question to resolve is if we really need this header and if UMD's are
> > > actually using the information in this header. In OA we dropped the
> > > header and are providing information in the header via different means
> > > (see below).
> > >
> > > Another option is to actually add a property for the header. So headers
> > > are added only when user space requests headers.
> > >
> > > > + */
> > > > +struct drm_xe_eu_stall_data_header {
> > > > + /** @subslice: subslice number from which the following data
> > > > + * has been captured.
> > > > + */
> > > > + __u16 subslice;
> > >
> > > Do UMD's use this subslice information? We should check with L0 and Mesa about this.
> > >
> > > [MAC] L0 does not currently use this.
>
> No usage for sublice at the moment in Mesa
>
> > >
> > > Also about whether UMD's need or want the header itself. For OA, UMD's
> > > were happy not having to parse the header.
> > >
> > > > + /** @flags: flags */
> > > > + __u16 flags;
> > > > +/* EU stall data dropped by the HW due to memory buffer being full */
> > > > +#define XE_EU_STALL_FLAG_OVERFLOW_DROP (1 << 0)
> > >
> > > In OA such information is returned via
> > > DRM_XE_OBSERVATION_IOCTL_STATUS. For EU stall, e.g. we could return a bit
> > > mask of subslices which reporting drops. So similar to OA, we could
> > > return -EIO when HW reports drops and userspace optionally issues
> > > DRM_XE_OBSERVATION_IOCTL_STATUS to retrieve which subslices are reporting
> > > drops.
> > >
> > > [MAC] having a return code to notify of reports drops would be much
> > > preferable. This would allow the UMD detecting this condition during the
> > > read phase without needing to process/parse each report.
Matias: could you please explain what L0 does with this dropped flag?
Harish: do we know what is the reason HW sets this dropped flag? Is it
because userland is not reading fast enough so HW is forced to drop data?
>
> But what can UMD do when that is set?
Mesa can ignore this if they don't need it.
>
> I would rather have a warn once printed on dmesg, so the issues don't go
> silent but it don't need to go to the uAPI.
dmesg warn is likely not an option because it will trigger bugs in our
CI.
>
> > >
> > > > + /** @record_size: size of each EU stall data record */
> > > > + __u16 record_size;
> > >
> > > This is static information. Does it need to be in each packet header?
> > > E.g. it can be returned via DRM_XE_OBSERVATION_IOCTL_INFO after a EU
> > > Stall stream has been opened.
> > >
> > > [MAC] since the size is constant, it seems an overhead including the info
> > > in every report.
>
> drm_xe_eu_stall_data_xe2 should be of the same size as record_size so it can also be dropped.
>
> > >
> > > The INFO data struct could also include a capabilities field. So if new
> > > features are added to EU stall in the future, they would be advertized to
> > > user space using the capabilities field.
> > >
> > > > + /** @num_records: number of records following the header */
> > > > + __u16 num_records;
> > >
> > > This will not be needed if just return raw EU Stall data without
> > > headers. Or even otherwise it is probably not needed, it is the total
> > > size of returned data minus the size of the header. Provided we return
> > > all available data.
>
> Same as above, would not be needed if drm_xe_eu_stall_data_xe2 matches samples size.
>
> > >
> > > [MAC] the KMD will always return atomic units of reports, right? Then
> > > this is not needed, having UMD the possibility to query report size when
> > > opening the stream, the UMD can know how many reports are in each read.
> > >
> > > > + /** @reserved: Reserved */
> > > > + __u16 reserved[4];
> > >
> > > This can be handled via 'extensions'. And if headers change they can be
> > > advertized in capabilities.
> > >
> > > > +};
> > > > +
> > > > #if defined(__cplusplus)
> > > > }
> > > > #endif
> > > > --
> > > > 2.41.0
> > > >
> > >
> > > Thanks.
> > > --
> > > Ashutosh
>
^ permalink raw reply [flat|nested] 27+ messages in thread
* RE: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-08-26 16:48 ` Dixit, Ashutosh
@ 2024-08-26 17:31 ` Cabral, Matias A
2024-08-30 6:20 ` Harish Chegondi
0 siblings, 1 reply; 27+ messages in thread
From: Cabral, Matias A @ 2024-08-26 17:31 UTC (permalink / raw)
To: Dixit, Ashutosh, Souza, Jose
Cc: intel-xe@lists.freedesktop.org, Degrood, Felix J,
Nerlige Ramappa, Umesh, Ranjan, Joshua Santhosh, Chegondi, Harish,
Kumar, Shubham, Ausmus, James
> Matias: could you please explain what L0 does with this dropped flag?
During the processing of the data, L0 returns a warning message. VTune ( I think) also warns the user that results were collected but will be inaccurate because the draining/reading of data was not done fast enough. By moving the warning to be returned at earlier/reading step, VTune may a) on the fly increase the reading frequency reducing the amount of data lost b) cancel the collection immediately, saving time to the user that may collect data in one node and process in a different one.
Thanks,
_MAC
-----Original Message-----
From: Dixit, Ashutosh <ashutosh.dixit@intel.com>
Sent: Monday, August 26, 2024 9:48 AM
To: Souza, Jose <jose.souza@intel.com>
Cc: Cabral, Matias A <matias.a.cabral@intel.com>; intel-xe@lists.freedesktop.org; Degrood, Felix J <felix.j.degrood@intel.com>; Nerlige Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Ranjan, Joshua Santhosh <joshua.santosh.ranjan@intel.com>; Chegondi, Harish <harish.chegondi@intel.com>; Kumar, Shubham <shubham.kumar@intel.com>; Ausmus, James <james.ausmus@intel.com>
Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
On Fri, 23 Aug 2024 14:22:19 -0700, Souza, Jose wrote:
>
> Hi
Thanks Jose. One question for Matias/L0 below.
> On Thu, 2024-08-22 at 15:53 -0700, Dixit, Ashutosh wrote:
> > On Wed, 21 Aug 2024 12:35:51 -0700, Cabral, Matias A wrote:
> >
> > Hi Matias,
> >
> > Thanks for responding, the input is _very_ helpful.
> >
> > Mesa folks: would it be possible for you to provide similar input too?
>
> Felix's MR[1] is only using record_size and num_records, if the
> drm_xe_eu_stall_data_xe2 was the same size and the sample we would not
> need the header at all, inline replies below.
>
> [1] https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30142
>
> >
> > Thanks.
> > --
> > Ashutosh
> >
> >
> > >
> > > Hi Ashutosh,
> > >
> > > Some inline questions below [MAC]
> > >
> > > Thanks,
> > > _MAC
> > >
> > > -----Original Message-----
> > > From: Dixit, Ashutosh <ashutosh.dixit@intel.com>
> > > Sent: Friday, August 16, 2024 3:38 PM
> > > To: intel-xe@lists.freedesktop.org
> > > Cc: Chegondi, Harish <harish.chegondi@intel.com>; Nerlige Ramappa,
> > > Umesh <umesh.nerlige.ramappa@intel.com>; Degrood, Felix J
> > > <felix.j.degrood@intel.com>; Souza, Jose <jose.souza@intel.com>;
> > > Cabral, Matias A <matias.a.cabral@intel.com>
> > > Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU
> > > stall sampling
> > >
> > > On Sun, 07 Jul 2024 15:41:41 -0700, Ashutosh Dixit wrote:
> > >
> > > Hi Harish,
> > >
> > > Some comments below on just the uapi first, towards finalizing the
> > > uapi with the UMD's who consume this data. And also comparing the
> > > uapi with what we did in OA.
> > >
> > > >
> > > > diff --git a/include/uapi/drm/xe_drm.h
> > > > b/include/uapi/drm/xe_drm.h index 19619d4952a8..343de700d10d
> > > > 100644
> > >
> > > /snip/
> > >
> > > > +/**
> > > > + * struct drm_xe_eu_stall_data_header - EU stall data header.
> > > > + * Header with additional information that the driver adds
> > > > + * before EU stall data of each subslice during read().
> > >
> > > One question to resolve is if we really need this header and if
> > > UMD's are actually using the information in this header. In OA we
> > > dropped the header and are providing information in the header via
> > > different means (see below).
> > >
> > > Another option is to actually add a property for the header. So
> > > headers are added only when user space requests headers.
> > >
> > > > + */
> > > > +struct drm_xe_eu_stall_data_header {
> > > > + /** @subslice: subslice number from which the following data
> > > > + * has been captured.
> > > > + */
> > > > + __u16 subslice;
> > >
> > > Do UMD's use this subslice information? We should check with L0 and Mesa about this.
> > >
> > > [MAC] L0 does not currently use this.
>
> No usage for sublice at the moment in Mesa
>
> > >
> > > Also about whether UMD's need or want the header itself. For OA,
> > > UMD's were happy not having to parse the header.
> > >
> > > > + /** @flags: flags */
> > > > + __u16 flags;
> > > > +/* EU stall data dropped by the HW due to memory buffer being full */
> > > > +#define XE_EU_STALL_FLAG_OVERFLOW_DROP (1 << 0)
> > >
> > > In OA such information is returned via
> > > DRM_XE_OBSERVATION_IOCTL_STATUS. For EU stall, e.g. we could
> > > return a bit mask of subslices which reporting drops. So similar
> > > to OA, we could return -EIO when HW reports drops and userspace
> > > optionally issues DRM_XE_OBSERVATION_IOCTL_STATUS to retrieve
> > > which subslices are reporting drops.
> > >
> > > [MAC] having a return code to notify of reports drops would be
> > > much preferable. This would allow the UMD detecting this condition
> > > during the read phase without needing to process/parse each report.
Matias: could you please explain what L0 does with this dropped flag?
Harish: do we know what is the reason HW sets this dropped flag? Is it because userland is not reading fast enough so HW is forced to drop data?
>
> But what can UMD do when that is set?
Mesa can ignore this if they don't need it.
>
> I would rather have a warn once printed on dmesg, so the issues don't
> go silent but it don't need to go to the uAPI.
dmesg warn is likely not an option because it will trigger bugs in our CI.
>
> > >
> > > > + /** @record_size: size of each EU stall data record */
> > > > + __u16 record_size;
> > >
> > > This is static information. Does it need to be in each packet header?
> > > E.g. it can be returned via DRM_XE_OBSERVATION_IOCTL_INFO after a
> > > EU Stall stream has been opened.
> > >
> > > [MAC] since the size is constant, it seems an overhead including
> > > the info in every report.
>
> drm_xe_eu_stall_data_xe2 should be of the same size as record_size so it can also be dropped.
>
> > >
> > > The INFO data struct could also include a capabilities field. So
> > > if new features are added to EU stall in the future, they would be
> > > advertized to user space using the capabilities field.
> > >
> > > > + /** @num_records: number of records following the header */
> > > > + __u16 num_records;
> > >
> > > This will not be needed if just return raw EU Stall data without
> > > headers. Or even otherwise it is probably not needed, it is the
> > > total size of returned data minus the size of the header. Provided
> > > we return all available data.
>
> Same as above, would not be needed if drm_xe_eu_stall_data_xe2 matches samples size.
>
> > >
> > > [MAC] the KMD will always return atomic units of reports, right?
> > > Then this is not needed, having UMD the possibility to query
> > > report size when opening the stream, the UMD can know how many reports are in each read.
> > >
> > > > + /** @reserved: Reserved */
> > > > + __u16 reserved[4];
> > >
> > > This can be handled via 'extensions'. And if headers change they
> > > can be advertized in capabilities.
> > >
> > > > +};
> > > > +
> > > > #if defined(__cplusplus)
> > > > }
> > > > #endif
> > > > --
> > > > 2.41.0
> > > >
> > >
> > > Thanks.
> > > --
> > > Ashutosh
>
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-07-19 20:21 ` Souza, Jose
@ 2024-08-26 17:32 ` Harish Chegondi
0 siblings, 0 replies; 27+ messages in thread
From: Harish Chegondi @ 2024-08-26 17:32 UTC (permalink / raw)
To: Souza, Jose
Cc: Dixit, Ashutosh, intel-xe@lists.freedesktop.org, Degrood, Felix J
On Fri, Jul 19, 2024 at 01:21:43PM -0700, Souza, Jose wrote:
> On Sun, 2024-07-07 at 15:41 -0700, Ashutosh Dixit wrote:
> > From: Harish Chegondi <harish.chegondi@intel.com>
> >
> > 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
> > DRM_XE_OBSERVATION_IOCTL_ENABLE and DRM_XE_OBSERVATION_IOCTL_DISABLE
> > IOCTLs. User space can also call poll() to check for availability of
> > data. The data can be read with read(). EU stall data consists of header
> > and data pairs. The header format is defined in struct
> > drm_xe_eu_stall_data_header. 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 data, it simply drops data due
> > to unavailable buffer space. In that case hardware sets a bit in a
> > register. The driver sets a flag in the EU stall data header flags field
> > to let the user space know that the hardware has dropped data.
> >
> > 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 | 1005 ++++++++++++++++++++
> > drivers/gpu/drm/xe/xe_eustall_cntr.h | 62 ++
> > drivers/gpu/drm/xe/xe_gt.c | 3 +
> > 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 | 4 +
> > drivers/gpu/drm/xe/xe_observation.c | 14 +
> > drivers/gpu/drm/xe/xe_trace.h | 35 +
> > include/uapi/drm/xe_drm.h | 77 ++
> > 11 files changed, 1246 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 0eb0acc4f198..13d935ac40b3 100644
> > --- a/drivers/gpu/drm/xe/Makefile
> > +++ b/drivers/gpu/drm/xe/Makefile
> > @@ -54,6 +54,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..183638f8e1e2
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_eustall_cntr.c
> > @@ -0,0 +1,1005 @@
> > +// 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_gt_topology.h"
> > +#include "xe_eustall_cntr.h"
> > +#include "xe_force_wake.h"
> > +#include "regs/xe_gt_regs.h"
> > +
> > +#define CACHELINE_BYTES 64
> > +#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);
> > +}
> > +
> > +void xe_eustall_cntr_init(struct xe_gt *gt)
> > +{
> > + mutex_init(>->eu_stall_cntr.lock);
> > +}
> > +
> > +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, int ext_number,
> > + struct eu_stall_open_properties *props)
> > +{
> > + u64 __user *address = u64_to_user_ptr(extension);
> > + struct drm_xe_user_extension ext;
> > + int err;
> > + u32 idx;
> > +
> > + if (XE_IOCTL_DBG(xe, ext_number >= DRM_XE_EU_STALL_PROP_MAX))
> > + return -E2BIG;
> > +
> > + 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, ++ext_number, 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_reg, 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;
> > + 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 there has been an engine reset by GuC, and GuC doesn't restore
> > + * the read and write pointer registers, the pointers will reset to 0.
> > + * If so, update the cached read pointer.
> > + */
> > + if (unlikely((write_ptr < read_ptr) &&
> > + ((read_ptr & buf_size) == (write_ptr & buf_size)))) {
> > + read_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT1,
> > + group, instance);
> > + read_ptr = read_ptr_reg & XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
> > + read_ptr <<= (6 - XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT);
> > + read_ptr &= ((buf_size << 1) - 1);
> > + dss_buf->read = read_ptr;
> > + }
> > + 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)
> > + dss_buf->line_drop = true;
> > + 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, u8 s, u8 ss)
> > +{
> > + 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, s, ss);
> > + 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,
> > + u8 s, u8 ss)
> > +{
> > + unsigned int dss_per_grp = gt_to_xe(gt)->info.platform == XE_PVC ? 8 : 4;
> > + size_t size, buf_size = stream->per_dss_buf_size;
> > + u16 flags = 0, subslice = (s * dss_per_grp) + ss;
> > + struct drm_xe_eu_stall_data_header header;
> > + 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;
> > + bool line_drop = false;
> > + int ret = 0;
> > +
> > + /* 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[subslice];
> > + mutex_lock(&dss_buf->lock);
> > + dss_start_vaddr = dss_buf->vaddr;
> > + read_ptr = dss_buf->read;
> > + write_ptr = dss_buf->write;
> > + line_drop = dss_buf->line_drop;
> > + read_offset = read_ptr & (buf_size - 1);
> > + write_offset = write_ptr & (buf_size - 1);
> > + /*
> > + * If there has been an engine reset by GuC, and GuC doesn't restore
> > + * the read and write pointer registers, the pointers will reset to 0.
> > + * If so, update the cached read pointer.
> > + */
> > + if (unlikely((write_ptr < read_ptr) &&
> > + ((read_ptr & buf_size) == (write_ptr & buf_size)))) {
> > + read_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT1,
> > + s, ss);
> > + read_ptr = read_ptr_reg & XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
> > + read_ptr <<= (6 - XEHPC_EUSTALL_REPORT1_READ_PTR_SHIFT);
> > + read_ptr &= ((buf_size << 1) - 1);
> > + read_offset = read_ptr & (buf_size - 1);
> > + dss_buf->read = read_ptr;
> > + }
> > +
> > + trace_xe_eu_stall_cntr_read(s, ss, 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 + sizeof(header)) > count) {
> > + mutex_unlock(&dss_buf->lock);
> > + return 0;
> > + }
> > +
> > + if (line_drop)
> > + flags = XE_EU_STALL_FLAG_OVERFLOW_DROP;
> > +
> > + /* Driver doesn't expose the number of C-slices to user space.
> > + * A PVC configuration of 8 c-slices x 8 sub-slices will be
> > + * exposed to the user space as 1 slice x 64 sub-slices.
> > + */
> > + header.subslice = subslice;
> > + header.flags = flags;
> > + header.record_size = CACHELINE_BYTES;
>
> why CACHELINE_BYTES?
> I would expected it to be the same size as drm_xe_eu_stall_data_xe2.
> If it is for performance optimization then add reserved fields to drm_xe_eu_stall_data_xe2 until it is the same size as CACHELINE_BYTES.
The size of each EU stall data record written by the HW is CACHELINE_BYTES,
eventhough only the first 100 to 120 bits approximately have valid data.
The rest of the record is zeros.
>
> > + header.num_records = size / header.record_size;
> > +
> > + if (copy_to_user((buf + *total_size), &header, sizeof(header))) {
> > + mutex_unlock(&dss_buf->lock);
> > + return -EFAULT;
> > + }
> > + *total_size += sizeof(header);
> > +
> > + 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, s, ss);
> > + trace_xe_reg_rw(gt, true, (XEHPC_EUSTALL_REPORT1.__reg).addr,
> > + read_ptr_reg, sizeof(read_ptr_reg));
> > + if (dss_buf->line_drop) {
> > + clear_dropped_eviction_line_bit(gt, s, ss);
> > + dss_buf->line_drop = false;
> > + }
> > + dss_buf->read = read_ptr;
> > + mutex_unlock(&dss_buf->lock);
> > + trace_xe_eu_stall_cntr_read(s, ss, read_ptr, write_ptr,
> > + read_offset, write_offset, *total_size);
> > + return ret;
>
> ret is only set in the beginning of the function...
Will fix this in the next version of the patch.
Thank You
Harish.
>
> > +}
> > +
> > +/**
> > + * 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;
> > + int ret = 0, dss;
> > +
> > + 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);
> > + 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)
> > +{
> > + struct xe_tile *tile = stream->gt->tile;
> > + struct xe_gt *gt = stream->gt;
> > + struct xe_bo *bo;
> > + u32 size;
> > + int ret = 0;
> > + unsigned int last_dss;
> > + xe_dss_mask_t all_dss;
> > +
> > + 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.
> > + */
> > + last_dss = xe_dss_mask_last_dss(all_dss);
> > + size = per_dss_buf_size * (last_dss + 1);
> > +
> > + 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))
> > + ret = PTR_ERR(bo);
> > +
> > + stream->bo = bo;
> > + stream->vaddr = bo->vmap.is_iomem ? bo->vmap.vaddr_iomem : bo->vmap.vaddr;
> > +
> > + return ret;
> > +}
> > +
> > +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;
> > + u32 reg_value;
> > + int dss;
> > +
> > + 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)
> > +{
> > + 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);
> > + if (ret)
> > + return ret;
> > +
> > + 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;
> > + dss_buf->line_drop = false;
> > + 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)
> > + return -EIO;
> > +
> > + 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(>->eu_stall_cntr.lock);
> > + ret = xe_eu_stall_buf_read_locked(stream, file, buf, count, ppos);
> > + mutex_unlock(>->eu_stall_cntr.lock);
> > + } while (ret == -EAGAIN);
> > + } else {
> > + mutex_lock(>->eu_stall_cntr.lock);
> > + ret = xe_eu_stall_buf_read_locked(stream, file, buf, count, ppos);
> > + mutex_unlock(>->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(>->eu_stall_cntr.lock);
> > + ret = xe_eu_stall_buf_poll_locked(stream, file, wait);
> > + mutex_unlock(>->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_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;
> > + }
> > +
> > + 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(>->eu_stall_cntr.lock);
> > + ret = xe_eu_stall_cntr_ioctl_locked(stream, cmd, arg);
> > + mutex_unlock(>->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(>->eu_stall_cntr.lock);
> > + xe_eu_stall_destroy_locked(stream);
> > + kfree(stream);
> > + gt->eu_stall_cntr.stream = NULL;
> > + mutex_unlock(>->eu_stall_cntr.lock);
> > +
> > + /* Release the reference the EU stall stream kept on the driver */
> > + drm_dev_put(>->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;
> > +
> > + bitmap_or(all_dss, gt->fuse_topo.g_dss_mask, gt->fuse_topo.c_dss_mask,
> > + XE_MAX_DSS_FUSE_BITS);
> > +
> > + 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;
> > + }
> > +
> > + tile_buf_size = props->eu_stall_buf_sz * (xe_dss_mask_last_dss(all_dss) + 1);
> > + 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);
> > + 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(>->tile->xe->drm);
> > +
> > + return stream_fd;
> > +
> > +err_open:
> > + free_eu_stall_cntr_buf(stream);
> > +err_alloc:
> > + gt->eu_stall_cntr.stream = NULL;
> > + 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, 0, &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(>->eu_stall_cntr.lock);
> > + ret = xe_open_eu_stall_stream_locked(dev, &props, file, gt);
> > + mutex_unlock(>->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..7a99b8c819d3
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_eustall_cntr.h
> > @@ -0,0 +1,62 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2024 Intel Corporation
> > + */
> > +
> > +#ifndef __XE_EUSTALL_CNTR_H__
> > +#define __XE_EUSTALL_CNTR_H__
> > +
> > +#include <drm/drm_file.h>
> > +#include <drm/xe_drm.h>
> > +#include "regs/xe_eu_stall_regs.h"
> > +
> > +#define XE_MAX_DSS 128
> > +
> > +struct per_dss_buf {
> > + u8 *vaddr;
> > + u32 write;
> > + u32 read;
> > + bool line_drop;
> > + /* 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 {
> > + struct xe_bo *bo;
> > + struct xe_gt *gt;
> > +
> > + bool enabled;
> > + bool pollin;
> > + size_t per_dss_buf_size;
> > + struct hrtimer poll_check_timer;
> > + struct work_struct buf_check_work;
> > + struct workqueue_struct *buf_check_wq;
> > + wait_queue_head_t poll_wq;
> > + u32 event_report_count;
> > + u64 poll_period;
> > +
> > + /**
> > + * State of the EU stall counter buffer.
> > + */
> > + u8 *vaddr;
> > + struct per_dss_buf dss_buf[XE_MAX_DSS];
> > +};
> > +
> > +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;
> > +};
> > +
> > +void 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 ce8994b808fe..74f4205a6d60 100644
> > --- a/drivers/gpu/drm/xe/xe_gt.c
> > +++ b/drivers/gpu/drm/xe/xe_gt.c
> > @@ -61,6 +61,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)
> > {
> > @@ -622,6 +623,8 @@ int xe_gt_init(struct xe_gt *gt)
> >
> > xe_gt_record_user_engines(gt);
> >
> > + xe_eustall_cntr_init(gt);
> > +
> > return 0;
> > }
> >
> > diff --git a/drivers/gpu/drm/xe/xe_gt_topology.c b/drivers/gpu/drm/xe/xe_gt_topology.c
> > index 25ff03ab8448..54a57179a53c 100644
> > --- a/drivers/gpu/drm/xe/xe_gt_topology.c
> > +++ b/drivers/gpu/drm/xe/xe_gt_topology.c
> > @@ -247,6 +247,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 6b5e0b45efb0..609db0154122 100644
> > --- a/drivers/gpu/drm/xe/xe_gt_types.h
> > +++ b/drivers/gpu/drm/xe/xe_gt_types.h
> > @@ -16,6 +16,7 @@
> > #include "xe_reg_sr_types.h"
> > #include "xe_sa_types.h"
> > #include "xe_uc_types.h"
> > +#include "xe_eustall_cntr.h"
> >
> > struct xe_exec_queue_ops;
> > struct xe_migrate;
> > @@ -391,6 +392,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 fcb584b42a7d..5db9c589ce24 100644
> > --- a/drivers/gpu/drm/xe/xe_observation.c
> > +++ b/drivers/gpu/drm/xe/xe_observation.c
> > @@ -8,6 +8,7 @@
> >
> > #include <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 09ca1ad057b0..ef532eae3f88 100644
> > --- a/drivers/gpu/drm/xe/xe_trace.h
> > +++ b/drivers/gpu/drm/xe/xe_trace.h
> > @@ -374,6 +374,41 @@ TRACE_EVENT(xe_reg_rw,
> > (u32)(__entry->val >> 32))
> > );
> >
> > +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 19619d4952a8..343de700d10d 100644
> > --- a/include/uapi/drm/xe_drm.h
> > +++ b/include/uapi/drm/xe_drm.h
> > @@ -1387,6 +1387,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,
> > };
> >
> > /**
> > @@ -1686,6 +1688,81 @@ 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,
> > +
> > + DRM_XE_EU_STALL_PROP_MAX
> > +};
> > +
> > +/**
> > + * struct drm_xe_eu_stall_data_header - EU stall data header.
> > + * Header with additional information that the driver adds
> > + * before EU stall data of each subslice during read().
> > + */
> > +struct drm_xe_eu_stall_data_header {
> > + /** @subslice: subslice number from which the following data
> > + * has been captured.
> > + */
> > + __u16 subslice;
> > + /** @flags: flags */
> > + __u16 flags;
> > +/* EU stall data dropped by the HW due to memory buffer being full */
> > +#define XE_EU_STALL_FLAG_OVERFLOW_DROP (1 << 0)
> > + /** @record_size: size of each EU stall data record */
> > + __u16 record_size;
> > + /** @num_records: number of records following the header */
> > + __u16 num_records;
> > + /** @reserved: Reserved */
> > + __u16 reserved[4];
> > +};
> > +
> > #if defined(__cplusplus)
> > }
> > #endif
>
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-08-26 17:31 ` Cabral, Matias A
@ 2024-08-30 6:20 ` Harish Chegondi
2024-08-30 8:24 ` Ranjan, Joshua Santhosh
0 siblings, 1 reply; 27+ messages in thread
From: Harish Chegondi @ 2024-08-30 6:20 UTC (permalink / raw)
To: Cabral, Matias A
Cc: Dixit, Ashutosh, Souza, Jose, intel-xe@lists.freedesktop.org,
Degrood, Felix J, Nerlige Ramappa, Umesh, Ranjan, Joshua Santhosh,
Kumar, Shubham, Ausmus, James
Here is the summary of the discussion regarding the uAPI
1. Eliminate the data header from the data copied by the
driver to the user space.
2. Subslice information in the header is NOT used by the user space since
the data is collected at the tile granularity.
3. The only flags bit(0) in the header currently used, is to indicate if
the HW has dropped any EU stall data due to insufficient space in the
kernel buffer. Instead of a flag in the header, the driver would return
an error during a read() if *any* subslice in the tile has dropped data.
Any EU stall data present in the kernel buffer would NOT be read.
The subsequent read() would return EU stall data for all subslices on
the tile and also clear the drop bit in the HW registers for all
subslices that dropped data.
4. User space doesn't seem to be interested to know which subslices have
dropped data. So, the driver would not provide any STATUS IOCTL to get
this info.
5. Record size in the header is a static info which can be queried
through an INFO IOCTL after a file descriptor is opened. Based on the
GPU, user space can determine this as well.
Thanks
Harish.
On Mon, Aug 26, 2024 at 10:31:04AM -0700, Cabral, Matias A wrote:
> > Matias: could you please explain what L0 does with this dropped flag?
>
> During the processing of the data, L0 returns a warning message. VTune ( I think) also warns the user that results were collected but will be inaccurate because the draining/reading of data was not done fast enough. By moving the warning to be returned at earlier/reading step, VTune may a) on the fly increase the reading frequency reducing the amount of data lost b) cancel the collection immediately, saving time to the user that may collect data in one node and process in a different one.
>
> Thanks,
> _MAC
>
> -----Original Message-----
> From: Dixit, Ashutosh <ashutosh.dixit@intel.com>
> Sent: Monday, August 26, 2024 9:48 AM
> To: Souza, Jose <jose.souza@intel.com>
> Cc: Cabral, Matias A <matias.a.cabral@intel.com>; intel-xe@lists.freedesktop.org; Degrood, Felix J <felix.j.degrood@intel.com>; Nerlige Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Ranjan, Joshua Santhosh <joshua.santosh.ranjan@intel.com>; Chegondi, Harish <harish.chegondi@intel.com>; Kumar, Shubham <shubham.kumar@intel.com>; Ausmus, James <james.ausmus@intel.com>
> Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
>
> On Fri, 23 Aug 2024 14:22:19 -0700, Souza, Jose wrote:
> >
> > Hi
>
> Thanks Jose. One question for Matias/L0 below.
>
> > On Thu, 2024-08-22 at 15:53 -0700, Dixit, Ashutosh wrote:
> > > On Wed, 21 Aug 2024 12:35:51 -0700, Cabral, Matias A wrote:
> > >
> > > Hi Matias,
> > >
> > > Thanks for responding, the input is _very_ helpful.
> > >
> > > Mesa folks: would it be possible for you to provide similar input too?
> >
> > Felix's MR[1] is only using record_size and num_records, if the
> > drm_xe_eu_stall_data_xe2 was the same size and the sample we would not
> > need the header at all, inline replies below.
> >
> > [1] https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30142
> >
> > >
> > > Thanks.
> > > --
> > > Ashutosh
> > >
> > >
> > > >
> > > > Hi Ashutosh,
> > > >
> > > > Some inline questions below [MAC]
> > > >
> > > > Thanks,
> > > > _MAC
> > > >
> > > > -----Original Message-----
> > > > From: Dixit, Ashutosh <ashutosh.dixit@intel.com>
> > > > Sent: Friday, August 16, 2024 3:38 PM
> > > > To: intel-xe@lists.freedesktop.org
> > > > Cc: Chegondi, Harish <harish.chegondi@intel.com>; Nerlige Ramappa,
> > > > Umesh <umesh.nerlige.ramappa@intel.com>; Degrood, Felix J
> > > > <felix.j.degrood@intel.com>; Souza, Jose <jose.souza@intel.com>;
> > > > Cabral, Matias A <matias.a.cabral@intel.com>
> > > > Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU
> > > > stall sampling
> > > >
> > > > On Sun, 07 Jul 2024 15:41:41 -0700, Ashutosh Dixit wrote:
> > > >
> > > > Hi Harish,
> > > >
> > > > Some comments below on just the uapi first, towards finalizing the
> > > > uapi with the UMD's who consume this data. And also comparing the
> > > > uapi with what we did in OA.
> > > >
> > > > >
> > > > > diff --git a/include/uapi/drm/xe_drm.h
> > > > > b/include/uapi/drm/xe_drm.h index 19619d4952a8..343de700d10d
> > > > > 100644
> > > >
> > > > /snip/
> > > >
> > > > > +/**
> > > > > + * struct drm_xe_eu_stall_data_header - EU stall data header.
> > > > > + * Header with additional information that the driver adds
> > > > > + * before EU stall data of each subslice during read().
> > > >
> > > > One question to resolve is if we really need this header and if
> > > > UMD's are actually using the information in this header. In OA we
> > > > dropped the header and are providing information in the header via
> > > > different means (see below).
> > > >
> > > > Another option is to actually add a property for the header. So
> > > > headers are added only when user space requests headers.
> > > >
> > > > > + */
> > > > > +struct drm_xe_eu_stall_data_header {
> > > > > + /** @subslice: subslice number from which the following data
> > > > > + * has been captured.
> > > > > + */
> > > > > + __u16 subslice;
> > > >
> > > > Do UMD's use this subslice information? We should check with L0 and Mesa about this.
> > > >
> > > > [MAC] L0 does not currently use this.
> >
> > No usage for sublice at the moment in Mesa
> >
> > > >
> > > > Also about whether UMD's need or want the header itself. For OA,
> > > > UMD's were happy not having to parse the header.
> > > >
> > > > > + /** @flags: flags */
> > > > > + __u16 flags;
> > > > > +/* EU stall data dropped by the HW due to memory buffer being full */
> > > > > +#define XE_EU_STALL_FLAG_OVERFLOW_DROP (1 << 0)
> > > >
> > > > In OA such information is returned via
> > > > DRM_XE_OBSERVATION_IOCTL_STATUS. For EU stall, e.g. we could
> > > > return a bit mask of subslices which reporting drops. So similar
> > > > to OA, we could return -EIO when HW reports drops and userspace
> > > > optionally issues DRM_XE_OBSERVATION_IOCTL_STATUS to retrieve
> > > > which subslices are reporting drops.
> > > >
> > > > [MAC] having a return code to notify of reports drops would be
> > > > much preferable. This would allow the UMD detecting this condition
> > > > during the read phase without needing to process/parse each report.
>
> Matias: could you please explain what L0 does with this dropped flag?
>
> Harish: do we know what is the reason HW sets this dropped flag? Is it because userland is not reading fast enough so HW is forced to drop data?
>
> >
> > But what can UMD do when that is set?
>
> Mesa can ignore this if they don't need it.
>
> >
> > I would rather have a warn once printed on dmesg, so the issues don't
> > go silent but it don't need to go to the uAPI.
>
> dmesg warn is likely not an option because it will trigger bugs in our CI.
>
> >
> > > >
> > > > > + /** @record_size: size of each EU stall data record */
> > > > > + __u16 record_size;
> > > >
> > > > This is static information. Does it need to be in each packet header?
> > > > E.g. it can be returned via DRM_XE_OBSERVATION_IOCTL_INFO after a
> > > > EU Stall stream has been opened.
> > > >
> > > > [MAC] since the size is constant, it seems an overhead including
> > > > the info in every report.
> >
> > drm_xe_eu_stall_data_xe2 should be of the same size as record_size so it can also be dropped.
> >
> > > >
> > > > The INFO data struct could also include a capabilities field. So
> > > > if new features are added to EU stall in the future, they would be
> > > > advertized to user space using the capabilities field.
> > > >
> > > > > + /** @num_records: number of records following the header */
> > > > > + __u16 num_records;
> > > >
> > > > This will not be needed if just return raw EU Stall data without
> > > > headers. Or even otherwise it is probably not needed, it is the
> > > > total size of returned data minus the size of the header. Provided
> > > > we return all available data.
> >
> > Same as above, would not be needed if drm_xe_eu_stall_data_xe2 matches samples size.
> >
> > > >
> > > > [MAC] the KMD will always return atomic units of reports, right?
> > > > Then this is not needed, having UMD the possibility to query
> > > > report size when opening the stream, the UMD can know how many reports are in each read.
> > > >
> > > > > + /** @reserved: Reserved */
> > > > > + __u16 reserved[4];
> > > >
> > > > This can be handled via 'extensions'. And if headers change they
> > > > can be advertized in capabilities.
> > > >
> > > > > +};
> > > > > +
> > > > > #if defined(__cplusplus)
> > > > > }
> > > > > #endif
> > > > > --
> > > > > 2.41.0
> > > > >
> > > >
> > > > Thanks.
> > > > --
> > > > Ashutosh
> >
^ permalink raw reply [flat|nested] 27+ messages in thread
* RE: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-08-30 6:20 ` Harish Chegondi
@ 2024-08-30 8:24 ` Ranjan, Joshua Santhosh
2024-08-30 15:58 ` Cabral, Matias A
0 siblings, 1 reply; 27+ messages in thread
From: Ranjan, Joshua Santhosh @ 2024-08-30 8:24 UTC (permalink / raw)
To: Chegondi, Harish, Cabral, Matias A
Cc: Dixit, Ashutosh, Souza, Jose, intel-xe@lists.freedesktop.org,
Degrood, Felix J, Nerlige Ramappa, Umesh, Kumar, Shubham,
Ausmus, James
Hi Harish,
One clarification:
> the driver would return an error during a read() if *any* subslice in the tile has dropped data.
>Any EU stall data present in the kernel buffer would NOT be read.
> The subsequent read() would return EU stall data for all subslices on the tile and also clear the drop bit in the HW registers for all subslices that dropped data.
Just to confirm, in case of buffer overflow 2 read() calls are expected to be done to read out the stall data ?
Thanks,
Joshua Santhosh
-----Original Message-----
From: Chegondi, Harish <harish.chegondi@intel.com>
Sent: Friday, August 30, 2024 11:51 AM
To: Cabral, Matias A <matias.a.cabral@intel.com>
Cc: Dixit, Ashutosh <ashutosh.dixit@intel.com>; Souza, Jose <jose.souza@intel.com>; intel-xe@lists.freedesktop.org; Degrood, Felix J <felix.j.degrood@intel.com>; Nerlige Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Ranjan, Joshua Santhosh <joshua.santosh.ranjan@intel.com>; Kumar, Shubham <shubham.kumar@intel.com>; Ausmus, James <james.ausmus@intel.com>
Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
Here is the summary of the discussion regarding the uAPI
1. Eliminate the data header from the data copied by the driver to the user space.
2. Subslice information in the header is NOT used by the user space since the data is collected at the tile granularity.
3. The only flags bit(0) in the header currently used, is to indicate if the HW has dropped any EU stall data due to insufficient space in the kernel buffer. Instead of a flag in the header, the driver would return an error during a read() if *any* subslice in the tile has dropped data.
Any EU stall data present in the kernel buffer would NOT be read.
The subsequent read() would return EU stall data for all subslices on the tile and also clear the drop bit in the HW registers for all subslices that dropped data.
4. User space doesn't seem to be interested to know which subslices have dropped data. So, the driver would not provide any STATUS IOCTL to get this info.
5. Record size in the header is a static info which can be queried through an INFO IOCTL after a file descriptor is opened. Based on the GPU, user space can determine this as well.
Thanks
Harish.
On Mon, Aug 26, 2024 at 10:31:04AM -0700, Cabral, Matias A wrote:
> > Matias: could you please explain what L0 does with this dropped flag?
>
> During the processing of the data, L0 returns a warning message. VTune ( I think) also warns the user that results were collected but will be inaccurate because the draining/reading of data was not done fast enough. By moving the warning to be returned at earlier/reading step, VTune may a) on the fly increase the reading frequency reducing the amount of data lost b) cancel the collection immediately, saving time to the user that may collect data in one node and process in a different one.
>
> Thanks,
> _MAC
>
> -----Original Message-----
> From: Dixit, Ashutosh <ashutosh.dixit@intel.com>
> Sent: Monday, August 26, 2024 9:48 AM
> To: Souza, Jose <jose.souza@intel.com>
> Cc: Cabral, Matias A <matias.a.cabral@intel.com>;
> intel-xe@lists.freedesktop.org; Degrood, Felix J
> <felix.j.degrood@intel.com>; Nerlige Ramappa, Umesh
> <umesh.nerlige.ramappa@intel.com>; Ranjan, Joshua Santhosh
> <joshua.santosh.ranjan@intel.com>; Chegondi, Harish
> <harish.chegondi@intel.com>; Kumar, Shubham <shubham.kumar@intel.com>;
> Ausmus, James <james.ausmus@intel.com>
> Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall
> sampling
>
> On Fri, 23 Aug 2024 14:22:19 -0700, Souza, Jose wrote:
> >
> > Hi
>
> Thanks Jose. One question for Matias/L0 below.
>
> > On Thu, 2024-08-22 at 15:53 -0700, Dixit, Ashutosh wrote:
> > > On Wed, 21 Aug 2024 12:35:51 -0700, Cabral, Matias A wrote:
> > >
> > > Hi Matias,
> > >
> > > Thanks for responding, the input is _very_ helpful.
> > >
> > > Mesa folks: would it be possible for you to provide similar input too?
> >
> > Felix's MR[1] is only using record_size and num_records, if the
> > drm_xe_eu_stall_data_xe2 was the same size and the sample we would
> > not need the header at all, inline replies below.
> >
> > [1] https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30142
> >
> > >
> > > Thanks.
> > > --
> > > Ashutosh
> > >
> > >
> > > >
> > > > Hi Ashutosh,
> > > >
> > > > Some inline questions below [MAC]
> > > >
> > > > Thanks,
> > > > _MAC
> > > >
> > > > -----Original Message-----
> > > > From: Dixit, Ashutosh <ashutosh.dixit@intel.com>
> > > > Sent: Friday, August 16, 2024 3:38 PM
> > > > To: intel-xe@lists.freedesktop.org
> > > > Cc: Chegondi, Harish <harish.chegondi@intel.com>; Nerlige
> > > > Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Degrood, Felix
> > > > J <felix.j.degrood@intel.com>; Souza, Jose
> > > > <jose.souza@intel.com>; Cabral, Matias A
> > > > <matias.a.cabral@intel.com>
> > > > Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU
> > > > stall sampling
> > > >
> > > > On Sun, 07 Jul 2024 15:41:41 -0700, Ashutosh Dixit wrote:
> > > >
> > > > Hi Harish,
> > > >
> > > > Some comments below on just the uapi first, towards finalizing
> > > > the uapi with the UMD's who consume this data. And also
> > > > comparing the uapi with what we did in OA.
> > > >
> > > > >
> > > > > diff --git a/include/uapi/drm/xe_drm.h
> > > > > b/include/uapi/drm/xe_drm.h index 19619d4952a8..343de700d10d
> > > > > 100644
> > > >
> > > > /snip/
> > > >
> > > > > +/**
> > > > > + * struct drm_xe_eu_stall_data_header - EU stall data header.
> > > > > + * Header with additional information that the driver adds
> > > > > + * before EU stall data of each subslice during read().
> > > >
> > > > One question to resolve is if we really need this header and if
> > > > UMD's are actually using the information in this header. In OA
> > > > we dropped the header and are providing information in the
> > > > header via different means (see below).
> > > >
> > > > Another option is to actually add a property for the header. So
> > > > headers are added only when user space requests headers.
> > > >
> > > > > + */
> > > > > +struct drm_xe_eu_stall_data_header {
> > > > > + /** @subslice: subslice number from which the following data
> > > > > + * has been captured.
> > > > > + */
> > > > > + __u16 subslice;
> > > >
> > > > Do UMD's use this subslice information? We should check with L0 and Mesa about this.
> > > >
> > > > [MAC] L0 does not currently use this.
> >
> > No usage for sublice at the moment in Mesa
> >
> > > >
> > > > Also about whether UMD's need or want the header itself. For OA,
> > > > UMD's were happy not having to parse the header.
> > > >
> > > > > + /** @flags: flags */
> > > > > + __u16 flags;
> > > > > +/* EU stall data dropped by the HW due to memory buffer being full */
> > > > > +#define XE_EU_STALL_FLAG_OVERFLOW_DROP (1 << 0)
> > > >
> > > > In OA such information is returned via
> > > > DRM_XE_OBSERVATION_IOCTL_STATUS. For EU stall, e.g. we could
> > > > return a bit mask of subslices which reporting drops. So similar
> > > > to OA, we could return -EIO when HW reports drops and userspace
> > > > optionally issues DRM_XE_OBSERVATION_IOCTL_STATUS to retrieve
> > > > which subslices are reporting drops.
> > > >
> > > > [MAC] having a return code to notify of reports drops would be
> > > > much preferable. This would allow the UMD detecting this
> > > > condition during the read phase without needing to process/parse each report.
>
> Matias: could you please explain what L0 does with this dropped flag?
>
> Harish: do we know what is the reason HW sets this dropped flag? Is it because userland is not reading fast enough so HW is forced to drop data?
>
> >
> > But what can UMD do when that is set?
>
> Mesa can ignore this if they don't need it.
>
> >
> > I would rather have a warn once printed on dmesg, so the issues
> > don't go silent but it don't need to go to the uAPI.
>
> dmesg warn is likely not an option because it will trigger bugs in our CI.
>
> >
> > > >
> > > > > + /** @record_size: size of each EU stall data record */
> > > > > + __u16 record_size;
> > > >
> > > > This is static information. Does it need to be in each packet header?
> > > > E.g. it can be returned via DRM_XE_OBSERVATION_IOCTL_INFO after
> > > > a EU Stall stream has been opened.
> > > >
> > > > [MAC] since the size is constant, it seems an overhead including
> > > > the info in every report.
> >
> > drm_xe_eu_stall_data_xe2 should be of the same size as record_size so it can also be dropped.
> >
> > > >
> > > > The INFO data struct could also include a capabilities field. So
> > > > if new features are added to EU stall in the future, they would
> > > > be advertized to user space using the capabilities field.
> > > >
> > > > > + /** @num_records: number of records following the header */
> > > > > + __u16 num_records;
> > > >
> > > > This will not be needed if just return raw EU Stall data without
> > > > headers. Or even otherwise it is probably not needed, it is the
> > > > total size of returned data minus the size of the header.
> > > > Provided we return all available data.
> >
> > Same as above, would not be needed if drm_xe_eu_stall_data_xe2 matches samples size.
> >
> > > >
> > > > [MAC] the KMD will always return atomic units of reports, right?
> > > > Then this is not needed, having UMD the possibility to query
> > > > report size when opening the stream, the UMD can know how many reports are in each read.
> > > >
> > > > > + /** @reserved: Reserved */
> > > > > + __u16 reserved[4];
> > > >
> > > > This can be handled via 'extensions'. And if headers change they
> > > > can be advertized in capabilities.
> > > >
> > > > > +};
> > > > > +
> > > > > #if defined(__cplusplus)
> > > > > }
> > > > > #endif
> > > > > --
> > > > > 2.41.0
> > > > >
> > > >
> > > > Thanks.
> > > > --
> > > > Ashutosh
> >
^ permalink raw reply [flat|nested] 27+ messages in thread
* RE: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-08-30 8:24 ` Ranjan, Joshua Santhosh
@ 2024-08-30 15:58 ` Cabral, Matias A
2024-08-30 20:31 ` Harish Chegondi
0 siblings, 1 reply; 27+ messages in thread
From: Cabral, Matias A @ 2024-08-30 15:58 UTC (permalink / raw)
To: Ranjan, Joshua Santhosh, Chegondi, Harish
Cc: Dixit, Ashutosh, Souza, Jose, intel-xe@lists.freedesktop.org,
Degrood, Felix J, Nerlige Ramappa, Umesh, Kumar, Shubham,
Ausmus, James
Hi Santhosh,
> Just to confirm, in case of buffer overflow 2 read() calls are expected to be done to read out the stall data ?
Yes, this will be handled internally by the UMD. The user calling L0 won't know this happened under the hood.
Hi Harish,
>4. User space doesn't seem to be interested to know which subslices have dropped data. So, the driver would not provide any STATUS IOCTL to get this info.
During the discussion the question came around the fact if in reality this can actually happen, since both slices are sampling at same frequency and active threads state do produce reports. You mentioned you would check with HW team.
ETA for this changes pushed upstream ?
Thanks,
_MAC
-----Original Message-----
From: Ranjan, Joshua Santhosh <joshua.santosh.ranjan@intel.com>
Sent: Friday, August 30, 2024 1:24 AM
To: Chegondi, Harish <harish.chegondi@intel.com>; Cabral, Matias A <matias.a.cabral@intel.com>
Cc: Dixit, Ashutosh <ashutosh.dixit@intel.com>; Souza, Jose <jose.souza@intel.com>; intel-xe@lists.freedesktop.org; Degrood, Felix J <felix.j.degrood@intel.com>; Nerlige Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Kumar, Shubham <shubham.kumar@intel.com>; Ausmus, James <james.ausmus@intel.com>
Subject: RE: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
Hi Harish,
One clarification:
> the driver would return an error during a read() if *any* subslice in the tile has dropped data.
>Any EU stall data present in the kernel buffer would NOT be read.
> The subsequent read() would return EU stall data for all subslices on the tile and also clear the drop bit in the HW registers for all subslices that dropped data.
Just to confirm, in case of buffer overflow 2 read() calls are expected to be done to read out the stall data ?
Thanks,
Joshua Santhosh
-----Original Message-----
From: Chegondi, Harish <harish.chegondi@intel.com>
Sent: Friday, August 30, 2024 11:51 AM
To: Cabral, Matias A <matias.a.cabral@intel.com>
Cc: Dixit, Ashutosh <ashutosh.dixit@intel.com>; Souza, Jose <jose.souza@intel.com>; intel-xe@lists.freedesktop.org; Degrood, Felix J <felix.j.degrood@intel.com>; Nerlige Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Ranjan, Joshua Santhosh <joshua.santosh.ranjan@intel.com>; Kumar, Shubham <shubham.kumar@intel.com>; Ausmus, James <james.ausmus@intel.com>
Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
Here is the summary of the discussion regarding the uAPI
1. Eliminate the data header from the data copied by the driver to the user space.
2. Subslice information in the header is NOT used by the user space since the data is collected at the tile granularity.
3. The only flags bit(0) in the header currently used, is to indicate if the HW has dropped any EU stall data due to insufficient space in the kernel buffer. Instead of a flag in the header, the driver would return an error during a read() if *any* subslice in the tile has dropped data.
Any EU stall data present in the kernel buffer would NOT be read.
The subsequent read() would return EU stall data for all subslices on the tile and also clear the drop bit in the HW registers for all subslices that dropped data.
4. User space doesn't seem to be interested to know which subslices have dropped data. So, the driver would not provide any STATUS IOCTL to get this info.
5. Record size in the header is a static info which can be queried through an INFO IOCTL after a file descriptor is opened. Based on the GPU, user space can determine this as well.
Thanks
Harish.
On Mon, Aug 26, 2024 at 10:31:04AM -0700, Cabral, Matias A wrote:
> > Matias: could you please explain what L0 does with this dropped flag?
>
> During the processing of the data, L0 returns a warning message. VTune ( I think) also warns the user that results were collected but will be inaccurate because the draining/reading of data was not done fast enough. By moving the warning to be returned at earlier/reading step, VTune may a) on the fly increase the reading frequency reducing the amount of data lost b) cancel the collection immediately, saving time to the user that may collect data in one node and process in a different one.
>
> Thanks,
> _MAC
>
> -----Original Message-----
> From: Dixit, Ashutosh <ashutosh.dixit@intel.com>
> Sent: Monday, August 26, 2024 9:48 AM
> To: Souza, Jose <jose.souza@intel.com>
> Cc: Cabral, Matias A <matias.a.cabral@intel.com>;
> intel-xe@lists.freedesktop.org; Degrood, Felix J
> <felix.j.degrood@intel.com>; Nerlige Ramappa, Umesh
> <umesh.nerlige.ramappa@intel.com>; Ranjan, Joshua Santhosh
> <joshua.santosh.ranjan@intel.com>; Chegondi, Harish
> <harish.chegondi@intel.com>; Kumar, Shubham <shubham.kumar@intel.com>;
> Ausmus, James <james.ausmus@intel.com>
> Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall
> sampling
>
> On Fri, 23 Aug 2024 14:22:19 -0700, Souza, Jose wrote:
> >
> > Hi
>
> Thanks Jose. One question for Matias/L0 below.
>
> > On Thu, 2024-08-22 at 15:53 -0700, Dixit, Ashutosh wrote:
> > > On Wed, 21 Aug 2024 12:35:51 -0700, Cabral, Matias A wrote:
> > >
> > > Hi Matias,
> > >
> > > Thanks for responding, the input is _very_ helpful.
> > >
> > > Mesa folks: would it be possible for you to provide similar input too?
> >
> > Felix's MR[1] is only using record_size and num_records, if the
> > drm_xe_eu_stall_data_xe2 was the same size and the sample we would
> > not need the header at all, inline replies below.
> >
> > [1] https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30142
> >
> > >
> > > Thanks.
> > > --
> > > Ashutosh
> > >
> > >
> > > >
> > > > Hi Ashutosh,
> > > >
> > > > Some inline questions below [MAC]
> > > >
> > > > Thanks,
> > > > _MAC
> > > >
> > > > -----Original Message-----
> > > > From: Dixit, Ashutosh <ashutosh.dixit@intel.com>
> > > > Sent: Friday, August 16, 2024 3:38 PM
> > > > To: intel-xe@lists.freedesktop.org
> > > > Cc: Chegondi, Harish <harish.chegondi@intel.com>; Nerlige
> > > > Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Degrood, Felix
> > > > J <felix.j.degrood@intel.com>; Souza, Jose
> > > > <jose.souza@intel.com>; Cabral, Matias A
> > > > <matias.a.cabral@intel.com>
> > > > Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU
> > > > stall sampling
> > > >
> > > > On Sun, 07 Jul 2024 15:41:41 -0700, Ashutosh Dixit wrote:
> > > >
> > > > Hi Harish,
> > > >
> > > > Some comments below on just the uapi first, towards finalizing
> > > > the uapi with the UMD's who consume this data. And also
> > > > comparing the uapi with what we did in OA.
> > > >
> > > > >
> > > > > diff --git a/include/uapi/drm/xe_drm.h
> > > > > b/include/uapi/drm/xe_drm.h index 19619d4952a8..343de700d10d
> > > > > 100644
> > > >
> > > > /snip/
> > > >
> > > > > +/**
> > > > > + * struct drm_xe_eu_stall_data_header - EU stall data header.
> > > > > + * Header with additional information that the driver adds
> > > > > + * before EU stall data of each subslice during read().
> > > >
> > > > One question to resolve is if we really need this header and if
> > > > UMD's are actually using the information in this header. In OA
> > > > we dropped the header and are providing information in the
> > > > header via different means (see below).
> > > >
> > > > Another option is to actually add a property for the header. So
> > > > headers are added only when user space requests headers.
> > > >
> > > > > + */
> > > > > +struct drm_xe_eu_stall_data_header {
> > > > > + /** @subslice: subslice number from which the following data
> > > > > + * has been captured.
> > > > > + */
> > > > > + __u16 subslice;
> > > >
> > > > Do UMD's use this subslice information? We should check with L0 and Mesa about this.
> > > >
> > > > [MAC] L0 does not currently use this.
> >
> > No usage for sublice at the moment in Mesa
> >
> > > >
> > > > Also about whether UMD's need or want the header itself. For OA,
> > > > UMD's were happy not having to parse the header.
> > > >
> > > > > + /** @flags: flags */
> > > > > + __u16 flags;
> > > > > +/* EU stall data dropped by the HW due to memory buffer being full */
> > > > > +#define XE_EU_STALL_FLAG_OVERFLOW_DROP (1 << 0)
> > > >
> > > > In OA such information is returned via
> > > > DRM_XE_OBSERVATION_IOCTL_STATUS. For EU stall, e.g. we could
> > > > return a bit mask of subslices which reporting drops. So similar
> > > > to OA, we could return -EIO when HW reports drops and userspace
> > > > optionally issues DRM_XE_OBSERVATION_IOCTL_STATUS to retrieve
> > > > which subslices are reporting drops.
> > > >
> > > > [MAC] having a return code to notify of reports drops would be
> > > > much preferable. This would allow the UMD detecting this
> > > > condition during the read phase without needing to process/parse each report.
>
> Matias: could you please explain what L0 does with this dropped flag?
>
> Harish: do we know what is the reason HW sets this dropped flag? Is it because userland is not reading fast enough so HW is forced to drop data?
>
> >
> > But what can UMD do when that is set?
>
> Mesa can ignore this if they don't need it.
>
> >
> > I would rather have a warn once printed on dmesg, so the issues
> > don't go silent but it don't need to go to the uAPI.
>
> dmesg warn is likely not an option because it will trigger bugs in our CI.
>
> >
> > > >
> > > > > + /** @record_size: size of each EU stall data record */
> > > > > + __u16 record_size;
> > > >
> > > > This is static information. Does it need to be in each packet header?
> > > > E.g. it can be returned via DRM_XE_OBSERVATION_IOCTL_INFO after
> > > > a EU Stall stream has been opened.
> > > >
> > > > [MAC] since the size is constant, it seems an overhead including
> > > > the info in every report.
> >
> > drm_xe_eu_stall_data_xe2 should be of the same size as record_size so it can also be dropped.
> >
> > > >
> > > > The INFO data struct could also include a capabilities field. So
> > > > if new features are added to EU stall in the future, they would
> > > > be advertized to user space using the capabilities field.
> > > >
> > > > > + /** @num_records: number of records following the header */
> > > > > + __u16 num_records;
> > > >
> > > > This will not be needed if just return raw EU Stall data without
> > > > headers. Or even otherwise it is probably not needed, it is the
> > > > total size of returned data minus the size of the header.
> > > > Provided we return all available data.
> >
> > Same as above, would not be needed if drm_xe_eu_stall_data_xe2 matches samples size.
> >
> > > >
> > > > [MAC] the KMD will always return atomic units of reports, right?
> > > > Then this is not needed, having UMD the possibility to query
> > > > report size when opening the stream, the UMD can know how many reports are in each read.
> > > >
> > > > > + /** @reserved: Reserved */
> > > > > + __u16 reserved[4];
> > > >
> > > > This can be handled via 'extensions'. And if headers change they
> > > > can be advertized in capabilities.
> > > >
> > > > > +};
> > > > > +
> > > > > #if defined(__cplusplus)
> > > > > }
> > > > > #endif
> > > > > --
> > > > > 2.41.0
> > > > >
> > > >
> > > > Thanks.
> > > > --
> > > > Ashutosh
> >
^ permalink raw reply [flat|nested] 27+ messages in thread
* Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
2024-08-30 15:58 ` Cabral, Matias A
@ 2024-08-30 20:31 ` Harish Chegondi
0 siblings, 0 replies; 27+ messages in thread
From: Harish Chegondi @ 2024-08-30 20:31 UTC (permalink / raw)
To: Cabral, Matias A
Cc: Ranjan, Joshua Santhosh, Dixit, Ashutosh, Souza, Jose,
intel-xe@lists.freedesktop.org, Degrood, Felix J,
Nerlige Ramappa, Umesh, Kumar, Shubham, Ausmus, James
On Fri, Aug 30, 2024 at 08:58:17AM -0700, Cabral, Matias A wrote:
> Hi Santhosh,
>
> > Just to confirm, in case of buffer overflow 2 read() calls are expected to be done to read out the stall data ?
> Yes, this will be handled internally by the UMD. The user calling L0 won't know this happened under the hood.
>
> Hi Harish,
>
> >4. User space doesn't seem to be interested to know which subslices have dropped data. So, the driver would not provide any STATUS IOCTL to get this info.
> During the discussion the question came around the fact if in reality this can actually happen, since both slices are sampling at same frequency and active threads state do produce reports. You mentioned you would check with HW team.
Hi Matias, I did check on this and I was told that different threads
have different cache hit/miss profiles and therefore generate different EU
stall data. So, in theory all subslices with EU stall data may not have
dropped data at the same time. But in reality this may not be the case.
This would be a good thing to check during testing.
Would user space be interested in knowing which subslices have dropped
data?
>
>
> ETA for this changes pushed upstream ?
My plan is to make the uAPI changes and address other review comments
and push the next version of the patch by the end of next week.
Thanks
Harish.
>
> Thanks,
> _MAC
>
> -----Original Message-----
> From: Ranjan, Joshua Santhosh <joshua.santosh.ranjan@intel.com>
> Sent: Friday, August 30, 2024 1:24 AM
> To: Chegondi, Harish <harish.chegondi@intel.com>; Cabral, Matias A <matias.a.cabral@intel.com>
> Cc: Dixit, Ashutosh <ashutosh.dixit@intel.com>; Souza, Jose <jose.souza@intel.com>; intel-xe@lists.freedesktop.org; Degrood, Felix J <felix.j.degrood@intel.com>; Nerlige Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Kumar, Shubham <shubham.kumar@intel.com>; Ausmus, James <james.ausmus@intel.com>
> Subject: RE: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
>
> Hi Harish,
>
> One clarification:
> > the driver would return an error during a read() if *any* subslice in the tile has dropped data.
> >Any EU stall data present in the kernel buffer would NOT be read.
> > The subsequent read() would return EU stall data for all subslices on the tile and also clear the drop bit in the HW registers for all subslices that dropped data.
>
> Just to confirm, in case of buffer overflow 2 read() calls are expected to be done to read out the stall data ?
>
> Thanks,
> Joshua Santhosh
>
> -----Original Message-----
> From: Chegondi, Harish <harish.chegondi@intel.com>
> Sent: Friday, August 30, 2024 11:51 AM
> To: Cabral, Matias A <matias.a.cabral@intel.com>
> Cc: Dixit, Ashutosh <ashutosh.dixit@intel.com>; Souza, Jose <jose.souza@intel.com>; intel-xe@lists.freedesktop.org; Degrood, Felix J <felix.j.degrood@intel.com>; Nerlige Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Ranjan, Joshua Santhosh <joshua.santosh.ranjan@intel.com>; Kumar, Shubham <shubham.kumar@intel.com>; Ausmus, James <james.ausmus@intel.com>
> Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall sampling
>
> Here is the summary of the discussion regarding the uAPI
>
> 1. Eliminate the data header from the data copied by the driver to the user space.
>
> 2. Subslice information in the header is NOT used by the user space since the data is collected at the tile granularity.
>
> 3. The only flags bit(0) in the header currently used, is to indicate if the HW has dropped any EU stall data due to insufficient space in the kernel buffer. Instead of a flag in the header, the driver would return an error during a read() if *any* subslice in the tile has dropped data.
> Any EU stall data present in the kernel buffer would NOT be read.
> The subsequent read() would return EU stall data for all subslices on the tile and also clear the drop bit in the HW registers for all subslices that dropped data.
>
> 4. User space doesn't seem to be interested to know which subslices have dropped data. So, the driver would not provide any STATUS IOCTL to get this info.
>
> 5. Record size in the header is a static info which can be queried through an INFO IOCTL after a file descriptor is opened. Based on the GPU, user space can determine this as well.
>
> Thanks
> Harish.
>
> On Mon, Aug 26, 2024 at 10:31:04AM -0700, Cabral, Matias A wrote:
> > > Matias: could you please explain what L0 does with this dropped flag?
> >
> > During the processing of the data, L0 returns a warning message. VTune ( I think) also warns the user that results were collected but will be inaccurate because the draining/reading of data was not done fast enough. By moving the warning to be returned at earlier/reading step, VTune may a) on the fly increase the reading frequency reducing the amount of data lost b) cancel the collection immediately, saving time to the user that may collect data in one node and process in a different one.
> >
> > Thanks,
> > _MAC
> >
> > -----Original Message-----
> > From: Dixit, Ashutosh <ashutosh.dixit@intel.com>
> > Sent: Monday, August 26, 2024 9:48 AM
> > To: Souza, Jose <jose.souza@intel.com>
> > Cc: Cabral, Matias A <matias.a.cabral@intel.com>;
> > intel-xe@lists.freedesktop.org; Degrood, Felix J
> > <felix.j.degrood@intel.com>; Nerlige Ramappa, Umesh
> > <umesh.nerlige.ramappa@intel.com>; Ranjan, Joshua Santhosh
> > <joshua.santosh.ranjan@intel.com>; Chegondi, Harish
> > <harish.chegondi@intel.com>; Kumar, Shubham <shubham.kumar@intel.com>;
> > Ausmus, James <james.ausmus@intel.com>
> > Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU stall
> > sampling
> >
> > On Fri, 23 Aug 2024 14:22:19 -0700, Souza, Jose wrote:
> > >
> > > Hi
> >
> > Thanks Jose. One question for Matias/L0 below.
> >
> > > On Thu, 2024-08-22 at 15:53 -0700, Dixit, Ashutosh wrote:
> > > > On Wed, 21 Aug 2024 12:35:51 -0700, Cabral, Matias A wrote:
> > > >
> > > > Hi Matias,
> > > >
> > > > Thanks for responding, the input is _very_ helpful.
> > > >
> > > > Mesa folks: would it be possible for you to provide similar input too?
> > >
> > > Felix's MR[1] is only using record_size and num_records, if the
> > > drm_xe_eu_stall_data_xe2 was the same size and the sample we would
> > > not need the header at all, inline replies below.
> > >
> > > [1] https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30142
> > >
> > > >
> > > > Thanks.
> > > > --
> > > > Ashutosh
> > > >
> > > >
> > > > >
> > > > > Hi Ashutosh,
> > > > >
> > > > > Some inline questions below [MAC]
> > > > >
> > > > > Thanks,
> > > > > _MAC
> > > > >
> > > > > -----Original Message-----
> > > > > From: Dixit, Ashutosh <ashutosh.dixit@intel.com>
> > > > > Sent: Friday, August 16, 2024 3:38 PM
> > > > > To: intel-xe@lists.freedesktop.org
> > > > > Cc: Chegondi, Harish <harish.chegondi@intel.com>; Nerlige
> > > > > Ramappa, Umesh <umesh.nerlige.ramappa@intel.com>; Degrood, Felix
> > > > > J <felix.j.degrood@intel.com>; Souza, Jose
> > > > > <jose.souza@intel.com>; Cabral, Matias A
> > > > > <matias.a.cabral@intel.com>
> > > > > Subject: Re: [PATCH v2 1/1] drm/xe/eustall: Add support for EU
> > > > > stall sampling
> > > > >
> > > > > On Sun, 07 Jul 2024 15:41:41 -0700, Ashutosh Dixit wrote:
> > > > >
> > > > > Hi Harish,
> > > > >
> > > > > Some comments below on just the uapi first, towards finalizing
> > > > > the uapi with the UMD's who consume this data. And also
> > > > > comparing the uapi with what we did in OA.
> > > > >
> > > > > >
> > > > > > diff --git a/include/uapi/drm/xe_drm.h
> > > > > > b/include/uapi/drm/xe_drm.h index 19619d4952a8..343de700d10d
> > > > > > 100644
> > > > >
> > > > > /snip/
> > > > >
> > > > > > +/**
> > > > > > + * struct drm_xe_eu_stall_data_header - EU stall data header.
> > > > > > + * Header with additional information that the driver adds
> > > > > > + * before EU stall data of each subslice during read().
> > > > >
> > > > > One question to resolve is if we really need this header and if
> > > > > UMD's are actually using the information in this header. In OA
> > > > > we dropped the header and are providing information in the
> > > > > header via different means (see below).
> > > > >
> > > > > Another option is to actually add a property for the header. So
> > > > > headers are added only when user space requests headers.
> > > > >
> > > > > > + */
> > > > > > +struct drm_xe_eu_stall_data_header {
> > > > > > + /** @subslice: subslice number from which the following data
> > > > > > + * has been captured.
> > > > > > + */
> > > > > > + __u16 subslice;
> > > > >
> > > > > Do UMD's use this subslice information? We should check with L0 and Mesa about this.
> > > > >
> > > > > [MAC] L0 does not currently use this.
> > >
> > > No usage for sublice at the moment in Mesa
> > >
> > > > >
> > > > > Also about whether UMD's need or want the header itself. For OA,
> > > > > UMD's were happy not having to parse the header.
> > > > >
> > > > > > + /** @flags: flags */
> > > > > > + __u16 flags;
> > > > > > +/* EU stall data dropped by the HW due to memory buffer being full */
> > > > > > +#define XE_EU_STALL_FLAG_OVERFLOW_DROP (1 << 0)
> > > > >
> > > > > In OA such information is returned via
> > > > > DRM_XE_OBSERVATION_IOCTL_STATUS. For EU stall, e.g. we could
> > > > > return a bit mask of subslices which reporting drops. So similar
> > > > > to OA, we could return -EIO when HW reports drops and userspace
> > > > > optionally issues DRM_XE_OBSERVATION_IOCTL_STATUS to retrieve
> > > > > which subslices are reporting drops.
> > > > >
> > > > > [MAC] having a return code to notify of reports drops would be
> > > > > much preferable. This would allow the UMD detecting this
> > > > > condition during the read phase without needing to process/parse each report.
> >
> > Matias: could you please explain what L0 does with this dropped flag?
> >
> > Harish: do we know what is the reason HW sets this dropped flag? Is it because userland is not reading fast enough so HW is forced to drop data?
> >
> > >
> > > But what can UMD do when that is set?
> >
> > Mesa can ignore this if they don't need it.
> >
> > >
> > > I would rather have a warn once printed on dmesg, so the issues
> > > don't go silent but it don't need to go to the uAPI.
> >
> > dmesg warn is likely not an option because it will trigger bugs in our CI.
> >
> > >
> > > > >
> > > > > > + /** @record_size: size of each EU stall data record */
> > > > > > + __u16 record_size;
> > > > >
> > > > > This is static information. Does it need to be in each packet header?
> > > > > E.g. it can be returned via DRM_XE_OBSERVATION_IOCTL_INFO after
> > > > > a EU Stall stream has been opened.
> > > > >
> > > > > [MAC] since the size is constant, it seems an overhead including
> > > > > the info in every report.
> > >
> > > drm_xe_eu_stall_data_xe2 should be of the same size as record_size so it can also be dropped.
> > >
> > > > >
> > > > > The INFO data struct could also include a capabilities field. So
> > > > > if new features are added to EU stall in the future, they would
> > > > > be advertized to user space using the capabilities field.
> > > > >
> > > > > > + /** @num_records: number of records following the header */
> > > > > > + __u16 num_records;
> > > > >
> > > > > This will not be needed if just return raw EU Stall data without
> > > > > headers. Or even otherwise it is probably not needed, it is the
> > > > > total size of returned data minus the size of the header.
> > > > > Provided we return all available data.
> > >
> > > Same as above, would not be needed if drm_xe_eu_stall_data_xe2 matches samples size.
> > >
> > > > >
> > > > > [MAC] the KMD will always return atomic units of reports, right?
> > > > > Then this is not needed, having UMD the possibility to query
> > > > > report size when opening the stream, the UMD can know how many reports are in each read.
> > > > >
> > > > > > + /** @reserved: Reserved */
> > > > > > + __u16 reserved[4];
> > > > >
> > > > > This can be handled via 'extensions'. And if headers change they
> > > > > can be advertized in capabilities.
> > > > >
> > > > > > +};
> > > > > > +
> > > > > > #if defined(__cplusplus)
> > > > > > }
> > > > > > #endif
> > > > > > --
> > > > > > 2.41.0
> > > > > >
> > > > >
> > > > > Thanks.
> > > > > --
> > > > > Ashutosh
> > >
^ permalink raw reply [flat|nested] 27+ messages in thread
end of thread, other threads:[~2024-08-30 20:31 UTC | newest]
Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-07 22:41 [PATCH v2 0/1] Add support for EU stall sampling Ashutosh Dixit
2024-07-07 22:41 ` [PATCH v2 1/1] drm/xe/eustall: " Ashutosh Dixit
2024-07-12 20:34 ` Souza, Jose
2024-07-19 20:21 ` Souza, Jose
2024-08-26 17:32 ` Harish Chegondi
2024-08-16 22:37 ` Dixit, Ashutosh
2024-08-21 19:35 ` Cabral, Matias A
2024-08-22 22:53 ` Dixit, Ashutosh
2024-08-23 13:09 ` Souza, Jose
2024-08-23 19:24 ` Dixit, Ashutosh
2024-08-23 21:22 ` Souza, Jose
2024-08-26 16:48 ` Dixit, Ashutosh
2024-08-26 17:31 ` Cabral, Matias A
2024-08-30 6:20 ` Harish Chegondi
2024-08-30 8:24 ` Ranjan, Joshua Santhosh
2024-08-30 15:58 ` Cabral, Matias A
2024-08-30 20:31 ` Harish Chegondi
2024-08-22 23:41 ` Matt Roper
2024-07-07 22:46 ` ✓ CI.Patch_applied: success for Add support for EU stall sampling (rev2) Patchwork
2024-07-07 22:46 ` ✗ CI.checkpatch: warning " Patchwork
2024-07-07 22:47 ` ✓ CI.KUnit: success " Patchwork
2024-07-07 22:59 ` ✓ CI.Build: " Patchwork
2024-07-07 23:02 ` ✗ CI.Hooks: failure " Patchwork
2024-07-07 23:03 ` ✓ CI.checksparse: success " Patchwork
2024-07-07 23:22 ` ✓ CI.BAT: " Patchwork
2024-07-08 0:25 ` ✗ CI.FULL: failure " Patchwork
2024-07-19 21:32 ` [PATCH v2 0/1] Add support for EU stall sampling Umesh Nerlige Ramappa
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox