* [PATCH v8 0/7] Add support for EU stall sampling
@ 2025-01-15 20:02 Harish Chegondi
2025-01-15 20:02 ` [PATCH v8 1/7] drm/xe/topology: Add a function to find the index of the last enabled DSS in a mask Harish Chegondi
` (16 more replies)
0 siblings, 17 replies; 49+ messages in thread
From: Harish Chegondi @ 2025-01-15 20:02 UTC (permalink / raw)
To: intel-xe
Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi, Harish Chegondi
The following patch series add 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.
Support for this feature is being added into Mesa:
https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30142
New IGT tests for EU stall sampling are being added:
https://patchwork.freedesktop.org/series/143030/
This patch series has undergone basic testing with the new IGT tests.
Thank You.
v8: a. Used div_u64() instead of / to fix 32-bit build issue.
b. Changed copyright year in new files to 2025.
c. Renamed struct drm_xe_eu_stall_data_pvc to struct xe_eu_stall_data_pvc
d. Renamed struct drm_xe_eu_stall_data_xe2 to struct xe_eu_stall_data_xe2
v7: a. Renamed input property DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT
to DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS to be consistent with
OA. Renamed the corresponding internal variables.
b. Fixed some commit messages based on review feedback.
c. Changed sampling_rates from a pointer to flexible array.
v6: a. Changed the uAPI input to accept sampling rate in GPU cycles
instead of sampling rate multiplier.
b. Fix buffer wrap around over write bug (Matt Olson).
c. Include EU stall sampling rates information and per XeCore buffer size in the query information.
v5: Addressed review feedback from v4 including
a. Removed DRM_XE_EU_STALL_PROP_POLL_PERIOD from the uAPI (Ashutosh)
b. Separated the patches for Xe_HPC and Xe2 (Matt R)
c. Moved read() returning -EIO into a separate patch
d. Removed spinlocks around set_bit() and clear_bit() (Matt R)
e. Renamed several variables, structures and enums (Ashutosh and
Matt R)
f. Addressed other review feedback.
v4: Addressed review feedback from v3 including
a. Split the patch into multiple patches (Matt R)
b. Added a new device query to get EU stall info (Ashutosh)
c. Renamed all Dss to xecore (Matt R)
d. Removed buffer size and disable at open input properties. (Matt R)
e. Removed the "_SHIFT" macros (Matt R)
f. Allocate the EU stall buffer only on system memory.
g. Changed the work arounds to OOB (Matt R)
h. Other review feedback.
v3: a. Removed data header and changed read() to return -EIO when data is dropped by the HW.
b. Added a new DRM_XE_OBSERVATION_IOCTL_INFO to query EU stall data record info
c. Added struct drm_xe_eu_stall_data_pvc and struct drm_xe_eu_stall_data_xe2
to xe_drm.h. These declarations would help user space to parse the
EU stall data
d. Addressed other review comments from v2
v2: Rename xe perf layer as xe observation layer (Ashutosh)
Cc: Felix Degrood <felix.j.degrood@intel.com>
Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Harish Chegondi (7):
drm/xe/topology: Add a function to find the index of the last enabled
DSS in a mask
drm/xe/uapi: Introduce API for EU stall sampling
drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC
drm/xe/eustall: Return -EIO error from read() if HW drops data
drm/xe/eustall: Add EU stall sampling support for Xe2
drm/xe/uapi: Add a device query to get EU stall sampling information
drm/xe/eustall: Add workaround 22016596838 which applies to PVC.
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h | 29 +
drivers/gpu/drm/xe/xe_eu_stall.c | 1103 ++++++++++++++++++++
drivers/gpu/drm/xe/xe_eu_stall.h | 61 ++
drivers/gpu/drm/xe/xe_gt.c | 6 +
drivers/gpu/drm/xe/xe_gt_topology.h | 13 +
drivers/gpu/drm/xe/xe_gt_types.h | 3 +
drivers/gpu/drm/xe/xe_observation.c | 14 +
drivers/gpu/drm/xe/xe_query.c | 38 +
drivers/gpu/drm/xe/xe_trace.h | 33 +
drivers/gpu/drm/xe/xe_wa_oob.rules | 1 +
include/uapi/drm/xe_drm.h | 74 ++
12 files changed, 1376 insertions(+)
create mode 100644 drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
create mode 100644 drivers/gpu/drm/xe/xe_eu_stall.c
create mode 100644 drivers/gpu/drm/xe/xe_eu_stall.h
--
2.47.1
^ permalink raw reply [flat|nested] 49+ messages in thread
* [PATCH v8 1/7] drm/xe/topology: Add a function to find the index of the last enabled DSS in a mask
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
@ 2025-01-15 20:02 ` Harish Chegondi
2025-01-17 17:25 ` Dixit, Ashutosh
2025-01-15 20:02 ` [PATCH v8 2/7] drm/xe/uapi: Introduce API for EU stall sampling Harish Chegondi
` (15 subsequent siblings)
16 siblings, 1 reply; 49+ messages in thread
From: Harish Chegondi @ 2025-01-15 20:02 UTC (permalink / raw)
To: intel-xe
Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi, Harish Chegondi
Last enabled DSS in a DSS mask can help estimate the maximum DSSes enabled
in the DSS mask, as the enabled DSSes can be discontiguous.
Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
---
drivers/gpu/drm/xe/xe_gt_topology.h | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_gt_topology.h b/drivers/gpu/drm/xe/xe_gt_topology.h
index 746b325bbf6e..a72d26ba0653 100644
--- a/drivers/gpu/drm/xe/xe_gt_topology.h
+++ b/drivers/gpu/drm/xe/xe_gt_topology.h
@@ -25,6 +25,19 @@ void xe_gt_topology_init(struct xe_gt *gt);
void xe_gt_topology_dump(struct xe_gt *gt, struct drm_printer *p);
+/**
+ * xe_gt_topology_mask_last_dss() - Returns the index of the last DSS in a mask.
+ * @mask: Input DSS mask
+ *
+ * Return: Index of the last DSS in the input DSS mask,
+ * XE_MAX_DSS_FUSE_BITS if DSS mask is empty.
+ */
+static inline unsigned int
+xe_gt_topology_mask_last_dss(const xe_dss_mask_t mask)
+{
+ return find_last_bit(mask, XE_MAX_DSS_FUSE_BITS);
+}
+
unsigned int
xe_dss_mask_group_ffs(const xe_dss_mask_t mask, int groupsize, int groupnum);
--
2.47.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v8 2/7] drm/xe/uapi: Introduce API for EU stall sampling
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
2025-01-15 20:02 ` [PATCH v8 1/7] drm/xe/topology: Add a function to find the index of the last enabled DSS in a mask Harish Chegondi
@ 2025-01-15 20:02 ` Harish Chegondi
2025-01-17 19:02 ` Dixit, Ashutosh
2025-01-15 20:02 ` [PATCH v8 3/7] drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC Harish Chegondi
` (14 subsequent siblings)
16 siblings, 1 reply; 49+ messages in thread
From: Harish Chegondi @ 2025-01-15 20:02 UTC (permalink / raw)
To: intel-xe
Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi, Harish Chegondi
A new hardware feature first introduced in PVC gives capability to
periodically sample EU stall state and record counts for different stall
reasons, on a per IP basis, aggregate across all EUs in a subslice and
record the samples in a buffer in each subslice. Eventually, the aggregated
data is written out to a buffer in the memory. This feature is also
supported in XE2 and later architecture GPUs.
Use an existing IOCTL - DRM_IOCTL_XE_OBSERVATION as the interface into the
driver from the user space to do initial setup and obtain a file descriptor
for the EU stall data stream. Input parameter to the IOCTL is a struct
drm_xe_observation_param in which observation_type should be set to
DRM_XE_OBSERVATION_TYPE_EU_STALL, observation_op should be
DRM_XE_OBSERVATION_OP_STREAM_OPEN and param should point to a chain of
drm_xe_ext_set_property structures in which each structure has a pair of
property and value. The EU stall sampling input properties are defined in
drm_xe_eu_stall_property_id enum.
With the file descriptor obtained from DRM_IOCTL_XE_OBSERVATION, user space
can enable and disable EU stall sampling with the IOCTLs:
DRM_XE_OBSERVATION_IOCTL_ENABLE and DRM_XE_OBSERVATION_IOCTL_DISABLE.
User space can also call poll() to check for availability of data in the
buffer. The data can be read with read(). Finally, the file descriptor
can be closed with close().
v8: Used div_u64 instead of / to fix 32-bit build issue.
Changed copyright year in xe_eu_stall.c/h to 2025.
v7: Renamed input property DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT
to DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS to be consistent with
OA. Renamed the corresponding internal variables.
Fixed some commit messages based on review feedback.
v6: Change the input sampling rate to GPU cycles instead of
GPU cycles multiplier.
Cc: Felix Degrood <felix.j.degrood@intel.com>
Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
---
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/xe_eu_stall.c | 283 ++++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_eu_stall.h | 12 ++
drivers/gpu/drm/xe/xe_observation.c | 14 ++
include/uapi/drm/xe_drm.h | 38 ++++
5 files changed, 348 insertions(+)
create mode 100644 drivers/gpu/drm/xe/xe_eu_stall.c
create mode 100644 drivers/gpu/drm/xe/xe_eu_stall.h
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 7730e0596299..259ccbb0c031 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -33,6 +33,7 @@ xe-y += xe_bb.o \
xe_device_sysfs.o \
xe_dma_buf.o \
xe_drm_client.o \
+ xe_eu_stall.o \
xe_exec.o \
xe_execlist.o \
xe_exec_queue.o \
diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
new file mode 100644
index 000000000000..48dcc7cb7791
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_eu_stall.c
@@ -0,0 +1,283 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2025 Intel Corporation
+ */
+
+#include <linux/anon_inodes.h>
+#include <linux/types.h>
+#include <linux/poll.h>
+#include <linux/fs.h>
+
+#include <uapi/drm/xe_drm.h>
+
+#include "xe_macros.h"
+#include "xe_device.h"
+#include "xe_eu_stall.h"
+#include "xe_gt_printk.h"
+#include "xe_gt_topology.h"
+#include "xe_observation.h"
+
+/**
+ * struct eu_stall_open_properties - EU stall sampling properties received
+ * from user space at open.
+ * @eu_stall_sampling_rate: EU stall sampling rate multiplier.
+ * HW will sample every (eu_stall_sampling_rate x 251) cycles.
+ * @wait_num_reports: Minimum number of EU stall data reports to unblock poll().
+ * @gt: GT on which EU stall data will be captured.
+ */
+struct eu_stall_open_properties {
+ u8 eu_stall_sampling_rate;
+ u32 wait_num_reports;
+ struct xe_gt *gt;
+};
+
+/**
+ * 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);
+}
+
+static int set_prop_eu_stall_sampling_rate(struct xe_device *xe, u64 value,
+ struct eu_stall_open_properties *props)
+{
+ value = div_u64(value, 251);
+ 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_wait_num_reports(struct xe_device *xe, u64 value,
+ struct eu_stall_open_properties *props)
+{
+ u32 max_wait_num_reports;
+
+ max_wait_num_reports = num_data_rows(SZ_512K * XE_MAX_DSS_FUSE_BITS);
+ if (value == 0 || value > max_wait_num_reports) {
+ drm_dbg(&xe->drm, "Invalid EU stall event report count %llu\n", value);
+ drm_dbg(&xe->drm, "Minimum event report count is 1, maximum is %u\n",
+ max_wait_num_reports);
+ return -EINVAL;
+ }
+ props->wait_num_reports = 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->info.gt_count) {
+ drm_dbg(&xe->drm, "Invalid GT ID %llu for EU stall sampling\n", value);
+ return -EINVAL;
+ }
+ props->gt = xe_device_get_gt(xe, 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_SAMPLE_RATE] = set_prop_eu_stall_sampling_rate,
+ [DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS] = set_prop_eu_stall_wait_num_reports,
+ [DRM_XE_EU_STALL_PROP_GT_ID] = set_prop_eu_stall_gt_id,
+};
+
+static int xe_eu_stall_user_ext_set_property(struct xe_device *xe, u64 extension,
+ struct eu_stall_open_properties *props)
+{
+ u64 __user *address = u64_to_user_ptr(extension);
+ struct drm_xe_ext_set_property ext;
+ int err;
+ u32 idx;
+
+ err = __copy_from_user(&ext, address, sizeof(ext));
+ if (XE_IOCTL_DBG(xe, err))
+ return -EFAULT;
+
+ if (XE_IOCTL_DBG(xe, ext.property >= ARRAY_SIZE(xe_set_eu_stall_property_funcs)) ||
+ XE_IOCTL_DBG(xe, ext.pad))
+ return -EINVAL;
+
+ idx = array_index_nospec(ext.property, ARRAY_SIZE(xe_set_eu_stall_property_funcs));
+ return xe_set_eu_stall_property_funcs[idx](xe, ext.value, props);
+}
+
+typedef int (*xe_eu_stall_user_extension_fn)(struct xe_device *xe, u64 extension,
+ struct eu_stall_open_properties *props);
+static const xe_eu_stall_user_extension_fn xe_eu_stall_user_extension_funcs[] = {
+ [DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY] = xe_eu_stall_user_ext_set_property,
+};
+
+static int xe_eu_stall_user_extensions(struct xe_device *xe, u64 extension,
+ struct eu_stall_open_properties *props)
+{
+ u64 __user *address = u64_to_user_ptr(extension);
+ struct drm_xe_user_extension ext;
+ int err;
+ u32 idx;
+
+ err = __copy_from_user(&ext, address, sizeof(ext));
+ if (XE_IOCTL_DBG(xe, err))
+ return -EFAULT;
+
+ if (XE_IOCTL_DBG(xe, ext.pad) ||
+ XE_IOCTL_DBG(xe, ext.name >= ARRAY_SIZE(xe_eu_stall_user_extension_funcs)))
+ return -EINVAL;
+
+ idx = array_index_nospec(ext.name, ARRAY_SIZE(xe_eu_stall_user_extension_funcs));
+ err = xe_eu_stall_user_extension_funcs[idx](xe, extension, props);
+ if (XE_IOCTL_DBG(xe, err))
+ return err;
+
+ if (ext.next_extension)
+ return xe_eu_stall_user_extensions(xe, ext.next_extension, props);
+
+ return 0;
+}
+
+/**
+ * xe_eu_stall_stream_read - handles userspace read() of a EU stall data stream fd.
+ *
+ * @file: An xe EU stall data stream file
+ * @buf: destination buffer given by userspace
+ * @count: the number of bytes userspace wants to read
+ * @ppos: (inout) file seek position (unused)
+ *
+ * Userspace must enable the EU stall stream with DRM_XE_OBSERVATION_IOCTL_ENABLE
+ * before calling read().
+ *
+ * Returns: The number of bytes copied or a negative error code on failure.
+ */
+static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
+ size_t count, loff_t *ppos)
+{
+ ssize_t ret = 0;
+
+ return ret;
+}
+
+/**
+ * xe_eu_stall_stream_poll - handles userspace poll() of a EU stall data stream fd.
+ *
+ * @file: An xe EU stall data stream file
+ * @wait: Poll table
+ *
+ * Returns: Bit mask of returned events.
+ */
+static __poll_t
+xe_eu_stall_stream_poll(struct file *file, poll_table *wait)
+{
+ __poll_t ret = 0;
+
+ return ret;
+}
+
+/**
+ * xe_eu_stall_stream_ioctl - support ioctl() of a xe EU stall data stream fd.
+ *
+ * @file: An xe EU stall data stream file
+ * @cmd: the ioctl request
+ * @arg: the ioctl data
+ *
+ * Returns: zero on success or a negative error code.
+ * -EINVAL for an unknown ioctl request.
+ */
+static long xe_eu_stall_stream_ioctl(struct file *file,
+ unsigned int cmd,
+ unsigned long arg)
+{
+ switch (cmd) {
+ case DRM_XE_OBSERVATION_IOCTL_ENABLE:
+ return 0;
+ case DRM_XE_OBSERVATION_IOCTL_DISABLE:
+ return 0;
+ }
+
+ return -EINVAL;
+}
+
+/**
+ * xe_eu_stall_stream_close - handles userspace close() of a EU stall data
+ * stream file.
+ * @inode: anonymous inode associated with file
+ * @file: An xe EU stall data stream file
+ *
+ * Cleans up any resources associated with an open EU stall data stream file.
+ */
+static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
+{
+ return 0;
+}
+
+static const struct file_operations fops_eu_stall = {
+ .owner = THIS_MODULE,
+ .llseek = noop_llseek,
+ .release = xe_eu_stall_stream_close,
+ .poll = xe_eu_stall_stream_poll,
+ .read = xe_eu_stall_stream_read,
+ .unlocked_ioctl = xe_eu_stall_stream_ioctl,
+ .compat_ioctl = xe_eu_stall_stream_ioctl,
+};
+
+static inline bool has_eu_stall_sampling_support(struct xe_device *xe)
+{
+ return false;
+}
+
+/**
+ * xe_eu_stall_stream_open - Open a xe EU stall data stream fd
+ *
+ * @dev: DRM device pointer
+ * @data: pointer to first struct @drm_xe_ext_set_property in
+ * the chain of input properties from the user space.
+ * @file: DRM file pointer
+ *
+ * This function opens a EU stall data stream with input properties from
+ * the user space.
+ *
+ * Returns: EU stall data stream fd on success or a negative error code.
+ */
+int xe_eu_stall_stream_open(struct drm_device *dev,
+ u64 data,
+ struct drm_file *file)
+{
+ struct xe_device *xe = to_xe_device(dev);
+ struct eu_stall_open_properties props;
+ int ret, stream_fd;
+
+ memset(&props, 0, sizeof(struct eu_stall_open_properties));
+
+ ret = xe_eu_stall_user_extensions(xe, data, &props);
+ if (ret)
+ return ret;
+
+ if (!props.gt) {
+ drm_dbg(&xe->drm, "GT ID not provided for EU stall sampling\n");
+ return -EINVAL;
+ }
+
+ if (xe_observation_paranoid && !perfmon_capable()) {
+ xe_gt_dbg(props.gt, "Insufficient privileges for EU stall monitoring\n");
+ return -EACCES;
+ }
+
+ if (!has_eu_stall_sampling_support(xe)) {
+ xe_gt_dbg(props.gt, "EU stall monitoring is not supported on this platform\n");
+ return -EPERM;
+ }
+ stream_fd = anon_inode_getfd("[xe_eu_stall]", &fops_eu_stall,
+ NULL, 0);
+ if (stream_fd < 0)
+ xe_gt_dbg(props.gt, "EU stall inode get fd failed : %d\n", stream_fd);
+
+ return stream_fd;
+}
diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
new file mode 100644
index 000000000000..3447958a7a22
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_eu_stall.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2025 Intel Corporation
+ */
+
+#ifndef __XE_EU_STALL_H__
+#define __XE_EU_STALL_H__
+
+int xe_eu_stall_stream_open(struct drm_device *dev,
+ u64 data,
+ struct drm_file *file);
+#endif
diff --git a/drivers/gpu/drm/xe/xe_observation.c b/drivers/gpu/drm/xe/xe_observation.c
index 8ec1b84cbb9e..cca661de60ac 100644
--- a/drivers/gpu/drm/xe/xe_observation.c
+++ b/drivers/gpu/drm/xe/xe_observation.c
@@ -9,6 +9,7 @@
#include <uapi/drm/xe_drm.h>
#include "xe_oa.h"
+#include "xe_eu_stall.h"
#include "xe_observation.h"
u32 xe_observation_paranoid = true;
@@ -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_eu_stall_stream_open(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/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
index f62689ca861a..d9b20afc57c1 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -1397,6 +1397,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,
};
/**
@@ -1729,6 +1731,42 @@ struct drm_xe_oa_stream_info {
__u64 reserved[3];
};
+/**
+ * enum drm_xe_eu_stall_property_id - EU stall sampling input property ids.
+ *
+ * These properties are passed to the driver at open 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.
+ *
+ * With the file descriptor obtained from open, user space must enable
+ * the EU stall stream fd with @DRM_XE_OBSERVATION_IOCTL_ENABLE before
+ * calling read(). EIO errno from read() indicates HW dropped data
+ * due to full buffer.
+ */
+enum drm_xe_eu_stall_property_id {
+#define DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY 0
+ /**
+ * @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 = 1,
+
+ /**
+ * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
+ * in GPU cycles.
+ */
+ DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
+
+ /**
+ * @DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS: Minimum number of
+ * EU stall data reports to be present in the kernel buffer
+ * before unblocking poll or read that is blocked.
+ */
+ DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS,
+};
+
#if defined(__cplusplus)
}
#endif
--
2.47.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v8 3/7] drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
2025-01-15 20:02 ` [PATCH v8 1/7] drm/xe/topology: Add a function to find the index of the last enabled DSS in a mask Harish Chegondi
2025-01-15 20:02 ` [PATCH v8 2/7] drm/xe/uapi: Introduce API for EU stall sampling Harish Chegondi
@ 2025-01-15 20:02 ` Harish Chegondi
2025-01-18 2:34 ` Dixit, Ashutosh
` (3 more replies)
2025-01-15 20:02 ` [PATCH v8 4/7] drm/xe/eustall: Return -EIO error from read() if HW drops data Harish Chegondi
` (13 subsequent siblings)
16 siblings, 4 replies; 49+ messages in thread
From: Harish Chegondi @ 2025-01-15 20:02 UTC (permalink / raw)
To: intel-xe
Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi, Harish Chegondi
Implement EU stall sampling APIs introduced in the previous patch for
Xe_HPC (PVC). Add register definitions and the code that accesses these
registers to the APIs.
Add initialization and clean up functions and their implementations,
EU stall enable and disable functions, poll() and read() implementations.
A timer thread periodically polls the EU stall data buffer write pointer
registers to look for any new data and caches the write pointer. The read
function compares the cached read and write pointers and copies any new
data to the user space.
v8: Updated copyright year in xe_eu_stall_regs.h to 2025.
Renamed struct drm_xe_eu_stall_data_pvc to struct xe_eu_stall_data_pvc
since it is a local structure.
v6: Fix buffer wrap around over write bug (Matt Olson)
Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
---
drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h | 29 +
drivers/gpu/drm/xe/xe_eu_stall.c | 759 ++++++++++++++++++++-
drivers/gpu/drm/xe/xe_eu_stall.h | 43 ++
drivers/gpu/drm/xe/xe_gt.c | 6 +
drivers/gpu/drm/xe/xe_gt_types.h | 3 +
drivers/gpu/drm/xe/xe_trace.h | 33 +
6 files changed, 847 insertions(+), 26 deletions(-)
create mode 100644 drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
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..c53f57fdde65
--- /dev/null
+++ b/drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
@@ -0,0 +1,29 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2025 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_XECORE_BUF_SZ REG_GENMASK(5, 3)
+#define XEHPC_EUSTALL_BASE_ENABLE_SAMPLING REG_BIT(1)
+
+#define XEHPC_EUSTALL_BASE_UPPER XE_REG_MCR(0xe524)
+
+#define XEHPC_EUSTALL_REPORT XE_REG_MCR(0xe528, XE_REG_OPTION_MASKED)
+#define XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK REG_GENMASK(15, 2)
+#define XEHPC_EUSTALL_REPORT_OVERFLOW_DROP REG_BIT(1)
+
+#define XEHPC_EUSTALL_REPORT1 XE_REG_MCR(0xe52c, XE_REG_OPTION_MASKED)
+#define XEHPC_EUSTALL_REPORT1_READ_PTR_MASK REG_GENMASK(15, 2)
+
+#define XEHPC_EUSTALL_CTRL XE_REG_MCR(0xe53c, XE_REG_OPTION_MASKED)
+#define EUSTALL_MOCS REG_GENMASK(9, 3)
+#define EUSTALL_SAMPLE_RATE REG_GENMASK(2, 0)
+
+#endif
diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
index 48dcc7cb7791..c388d733b857 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.c
+++ b/drivers/gpu/drm/xe/xe_eu_stall.c
@@ -8,15 +8,27 @@
#include <linux/poll.h>
#include <linux/fs.h>
+#include <drm/drm_drv.h>
#include <uapi/drm/xe_drm.h>
+#include "xe_bo.h"
+#include "xe_pm.h"
+#include "xe_trace.h"
#include "xe_macros.h"
#include "xe_device.h"
+#include "xe_gt_mcr.h"
#include "xe_eu_stall.h"
#include "xe_gt_printk.h"
+#include "xe_force_wake.h"
#include "xe_gt_topology.h"
#include "xe_observation.h"
+#include "regs/xe_gt_regs.h"
+#include "regs/xe_eu_stall_regs.h"
+
+#define POLL_FREQUENCY_HZ 100
+#define POLL_PERIOD_NS (NSEC_PER_SEC / POLL_FREQUENCY_HZ)
+
/**
* struct eu_stall_open_properties - EU stall sampling properties received
* from user space at open.
@@ -31,6 +43,50 @@ struct eu_stall_open_properties {
struct xe_gt *gt;
};
+/**
+ * struct xe_eu_stall_data_pvc - EU stall data format for PVC
+ *
+ * Bits Field
+ * 0 to 28 IP (addr)
+ * 29 to 36 active count
+ * 37 to 44 other count
+ * 45 to 52 control count
+ * 53 to 60 pipestall count
+ * 61 to 68 send count
+ * 69 to 76 dist_acc count
+ * 77 to 84 sbid count
+ * 85 to 92 sync count
+ * 93 to 100 inst_fetch count
+ */
+struct xe_eu_stall_data_pvc {
+ __u64 ip_addr:29;
+ __u64 active_count:8;
+ __u64 other_count:8;
+ __u64 control_count:8;
+ __u64 pipestall_count:8;
+ __u64 send_count:8;
+ __u64 dist_acc_count:8;
+ __u64 sbid_count:8;
+ __u64 sync_count:8;
+ __u64 inst_fetch_count:8;
+ __u64 unused_bits:27;
+ __u64 unused[6];
+} __packed;
+
+static u64 per_xecore_buf_size = SZ_512K;
+
+static unsigned long
+xe_eu_stall_data_record_size(struct xe_device *xe)
+{
+ enum xe_platform platform = xe->info.platform;
+ unsigned long record_size = 0;
+
+ if (platform == XE_PVC)
+ record_size = sizeof(struct xe_eu_stall_data_pvc);
+
+ return record_size;
+}
+
/**
* num_data_rows - Return the number of EU stall data rows of 64B each
* for a given data size.
@@ -43,6 +99,36 @@ num_data_rows(u32 data_size)
return (data_size >> 6);
}
+/**
+ * xe_eu_stall_init() - Allocate and initialize GT level EU stall data
+ * structure xe_eu_stall_gt within struct xe_gt.
+ *
+ * @gt: GT being initialized.
+ *
+ * Returns: zero on success or a negative error code.
+ */
+int xe_eu_stall_init(struct xe_gt *gt)
+{
+ gt->eu_stall = kzalloc(sizeof(*gt->eu_stall), GFP_KERNEL);
+ if (!gt->eu_stall)
+ return -ENOMEM;
+
+ mutex_init(>->eu_stall->lock);
+ return 0;
+}
+
+/**
+ * xe_eu_stall_fini() - Clean up the GT level EU stall data
+ * structure xe_eu_stall_gt within struct xe_gt.
+ *
+ * @gt: GT being cleaned up.
+ */
+void xe_eu_stall_fini(struct xe_gt *gt)
+{
+ mutex_destroy(>->eu_stall->lock);
+ kfree(gt->eu_stall);
+}
+
static int set_prop_eu_stall_sampling_rate(struct xe_device *xe, u64 value,
struct eu_stall_open_properties *props)
{
@@ -60,7 +146,7 @@ static int set_prop_eu_stall_wait_num_reports(struct xe_device *xe, u64 value,
{
u32 max_wait_num_reports;
- max_wait_num_reports = num_data_rows(SZ_512K * XE_MAX_DSS_FUSE_BITS);
+ max_wait_num_reports = num_data_rows(per_xecore_buf_size * XE_MAX_DSS_FUSE_BITS);
if (value == 0 || value > max_wait_num_reports) {
drm_dbg(&xe->drm, "Invalid EU stall event report count %llu\n", value);
drm_dbg(&xe->drm, "Minimum event report count is 1, maximum is %u\n",
@@ -144,6 +230,236 @@ static int xe_eu_stall_user_extensions(struct xe_device *xe, u64 extension,
return 0;
}
+/**
+ * buf_data_size - Calculate the number of bytes in a circular buffer
+ * given the read and write pointers and the size of
+ * the buffer.
+ *
+ * @buf_size: Size of the circular buffer
+ * @read_ptr: Read pointer with an additional overflow bit
+ * @write_ptr: Write pointer with an additional overflow bit
+ *
+ * Since the read and write pointers have an additional overflow bit,
+ * this function calculates the offsets from the pointers and use the
+ * offsets to calculate the data size in the buffer.
+ *
+ * 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_data_buf_check - check for EU stall data in the 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_data_buf_check(struct xe_eu_stall_data_stream *stream)
+{
+ u32 read_ptr, write_ptr_reg, write_ptr, total_data = 0;
+ u32 buf_size = stream->per_xecore_buf_size;
+ struct xe_gt *gt = stream->gt;
+ struct per_xecore_buf *xecore_buf;
+ bool min_data_present;
+ u16 group, instance;
+ unsigned int xecore;
+
+ min_data_present = false;
+ for_each_dss_steering(xecore, gt, group, instance) {
+ xecore_buf = &stream->xecore_buf[xecore];
+ mutex_lock(&xecore_buf->lock);
+ read_ptr = xecore_buf->read;
+ write_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT,
+ group, instance);
+ write_ptr = REG_FIELD_GET(XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK, write_ptr_reg);
+ write_ptr <<= 6;
+ write_ptr &= ((buf_size << 1) - 1);
+ if (write_ptr != read_ptr && !min_data_present) {
+ total_data += buf_data_size(buf_size, read_ptr, write_ptr);
+ /*
+ * Check if there are at least minimum number of stall data
+ * rows for poll() to indicate that the data is present.
+ * Each stall data row is 64B (cacheline size).
+ */
+ if (num_data_rows(total_data) >= stream->wait_num_reports)
+ min_data_present = true;
+ }
+ if (write_ptr_reg & XEHPC_EUSTALL_REPORT_OVERFLOW_DROP)
+ set_bit(xecore, stream->data_drop.mask);
+ xecore_buf->write = write_ptr;
+ mutex_unlock(&xecore_buf->lock);
+ }
+ return min_data_present;
+}
+
+static void
+clear_dropped_eviction_line_bit(struct xe_gt *gt, u16 group, u16 instance)
+{
+ u32 write_ptr_reg;
+
+ /* On PVC, the overflow bit has to be cleared by writing 1 to it. */
+ write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
+
+ xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT, write_ptr_reg, group, instance);
+}
+
+static int
+xe_eu_stall_data_buf_read(struct xe_eu_stall_data_stream *stream,
+ char __user *buf, size_t count,
+ size_t *total_size, struct xe_gt *gt,
+ u16 group, u16 instance, unsigned int xecore)
+{
+ u32 read_ptr_reg, read_ptr, write_ptr;
+ u8 *xecore_start_vaddr, *read_vaddr;
+ struct xe_device *xe = gt_to_xe(gt);
+ struct per_xecore_buf *xecore_buf;
+ size_t size, copy_size, buf_size;
+ u32 read_offset, write_offset;
+ unsigned long record_size;
+
+ /* Hardware increments the read and write pointers such that they can
+ * overflow into one additional bit. For example, a 256KB size buffer
+ * offset pointer needs 18 bits. But HW uses 19 bits for the read and
+ * write pointers. This technique avoids wasting a slot in the buffer.
+ * Read and write offsets are calculated from the pointers in order to
+ * check if the write pointer has wrapped around the array.
+ */
+ xecore_buf = &stream->xecore_buf[xecore];
+ mutex_lock(&xecore_buf->lock);
+ xecore_start_vaddr = xecore_buf->vaddr;
+ read_ptr = xecore_buf->read;
+ write_ptr = xecore_buf->write;
+ buf_size = stream->per_xecore_buf_size;
+ read_offset = read_ptr & (buf_size - 1);
+ write_offset = write_ptr & (buf_size - 1);
+
+ if (write_ptr == read_ptr) {
+ mutex_unlock(&xecore_buf->lock);
+ return 0;
+ }
+
+ trace_xe_eu_stall_data_read(group, instance, read_ptr, write_ptr,
+ read_offset, write_offset, *total_size);
+ /* If write pointer offset is less than the read pointer offset,
+ * it means, write pointer has wrapped around the array.
+ */
+ if (write_offset > read_offset)
+ size = write_offset - read_offset;
+ else
+ size = buf_size - read_offset + write_offset;
+
+ /* Read only the data that the user space buffer can accommodate */
+ if ((*total_size + size) > count) {
+ record_size = xe_eu_stall_data_record_size(xe);
+ size = count - *total_size;
+ size = (size / record_size) * record_size;
+ }
+
+ if (size == 0) {
+ mutex_unlock(&xecore_buf->lock);
+ return 0;
+ }
+
+ read_vaddr = xecore_start_vaddr + read_offset;
+
+ if (write_offset > read_offset) {
+ if (copy_to_user((buf + *total_size), read_vaddr, size)) {
+ mutex_unlock(&xecore_buf->lock);
+ return -EFAULT;
+ }
+ } else {
+ if (size >= (buf_size - read_offset))
+ copy_size = buf_size - read_offset;
+ else
+ copy_size = size;
+ if (copy_to_user((buf + *total_size), read_vaddr, copy_size)) {
+ mutex_unlock(&xecore_buf->lock);
+ return -EFAULT;
+ }
+ if (copy_to_user((buf + *total_size + copy_size),
+ xecore_start_vaddr, size - copy_size)) {
+ mutex_unlock(&xecore_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 = REG_FIELD_PREP(XEHPC_EUSTALL_REPORT1_READ_PTR_MASK, (read_ptr >> 6));
+ read_ptr_reg &= XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
+ read_ptr_reg = _MASKED_FIELD(XEHPC_EUSTALL_REPORT1_READ_PTR_MASK, read_ptr_reg);
+ xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT1, read_ptr_reg, group, instance);
+ if (test_bit(xecore, stream->data_drop.mask)) {
+ clear_dropped_eviction_line_bit(gt, group, instance);
+ clear_bit(xecore, stream->data_drop.mask);
+ }
+ xecore_buf->read = read_ptr;
+ mutex_unlock(&xecore_buf->lock);
+ trace_xe_eu_stall_data_read(group, instance, read_ptr, write_ptr,
+ read_offset, write_offset, *total_size);
+ return 0;
+}
+
+/**
+ * xe_eu_stall_stream_read_locked - copy EU stall counters data from the
+ * per xecore 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_stream_read_locked(struct xe_eu_stall_data_stream *stream,
+ struct file *file, char __user *buf,
+ size_t count, loff_t *ppos)
+{
+ struct xe_gt *gt = stream->gt;
+ size_t total_size = 0;
+ u16 group, instance;
+ unsigned int xecore;
+ int ret = 0;
+
+ if (count == 0)
+ return -EINVAL;
+
+ for_each_dss_steering(xecore, gt, group, instance) {
+ ret = xe_eu_stall_data_buf_read(stream, buf, count, &total_size,
+ gt, group, instance, xecore);
+ if (ret || count == total_size)
+ goto exit;
+ }
+exit:
+ if (total_size)
+ return total_size;
+ else if (ret)
+ return ret;
+ else
+ return -EAGAIN;
+}
+
/**
* xe_eu_stall_stream_read - handles userspace read() of a EU stall data stream fd.
*
@@ -160,11 +476,265 @@ static int xe_eu_stall_user_extensions(struct xe_device *xe, u64 extension,
static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
size_t count, loff_t *ppos)
{
- ssize_t ret = 0;
+ struct xe_eu_stall_data_stream *stream = file->private_data;
+ struct xe_gt *gt = stream->gt;
+ ssize_t ret;
+
+ if (!stream->enabled) {
+ xe_gt_dbg(gt, "EU stall data stream not enabled to read\n");
+ return -EINVAL;
+ }
+
+ 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->lock);
+ ret = xe_eu_stall_stream_read_locked(stream, file, buf, count, ppos);
+ mutex_unlock(>->eu_stall->lock);
+ } while (ret == -EAGAIN);
+ } else {
+ mutex_lock(>->eu_stall->lock);
+ ret = xe_eu_stall_stream_read_locked(stream, file, buf, count, ppos);
+ mutex_unlock(>->eu_stall->lock);
+ }
+
+ stream->pollin = false;
return ret;
}
+static void
+free_eu_stall_data_buf(struct xe_eu_stall_data_stream *stream)
+{
+ if (stream->bo) {
+ xe_bo_unpin_map_no_vm(stream->bo);
+ stream->bo = NULL;
+ }
+ destroy_workqueue(stream->buf_check_wq);
+}
+
+static int alloc_eu_stall_data_buf(struct xe_eu_stall_data_stream *stream,
+ u16 num_xecore)
+{
+ struct xe_tile *tile = stream->gt->tile;
+ struct xe_bo *bo;
+ u32 size;
+
+ size = stream->per_xecore_buf_size * num_xecore;
+
+ bo = xe_bo_create_pin_map(tile->xe, tile, NULL,
+ size, ttm_bo_type_kernel,
+ XE_BO_FLAG_SYSTEM |
+ XE_BO_FLAG_GGTT);
+ if (IS_ERR(bo))
+ return PTR_ERR(bo);
+
+ stream->bo = bo;
+
+ return 0;
+}
+
+static u32
+gen_eustall_base(struct xe_eu_stall_data_stream *stream, bool enable)
+{
+ u32 val = xe_bo_ggtt_addr(stream->bo);
+ u32 sz;
+
+ XE_WARN_ON(!IS_ALIGNED(val, 64));
+
+ switch (stream->per_xecore_buf_size) {
+ case SZ_128K:
+ sz = 0;
+ break;
+ case SZ_256K:
+ sz = 1;
+ break;
+ case SZ_512K:
+ sz = 2;
+ break;
+ default:
+ xe_gt_warn(stream->gt, "Missing case per XeCore buffer size == %lu)\n",
+ (long)(stream->per_xecore_buf_size));
+ sz = 2;
+ }
+
+ val |= REG_FIELD_PREP(XEHPC_EUSTALL_BASE_XECORE_BUF_SZ, sz);
+ if (enable)
+ val |= XEHPC_EUSTALL_BASE_ENABLE_SAMPLING;
+
+ return val;
+}
+
+static void
+xe_eu_stall_stream_enable(struct xe_eu_stall_data_stream *stream)
+{
+ struct xe_gt *gt = stream->gt;
+ unsigned int fw_ref;
+ u32 reg_value;
+
+ /* Take runtime pm ref and forcewake to disable RC6 */
+ xe_pm_runtime_get(gt_to_xe(gt));
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_RENDER);
+ if (!xe_force_wake_ref_has_domain(fw_ref, XE_FW_RENDER))
+ xe_gt_err(gt, "Failed to get RENDER forcewake\n");
+
+ reg_value = gen_eustall_base(stream, true);
+ xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, reg_value);
+}
+
+static void
+xe_eu_stall_stream_disable(struct xe_eu_stall_data_stream *stream)
+{
+ struct xe_gt *gt = stream->gt;
+ u16 group, instance;
+ unsigned int xecore;
+ u32 reg_value;
+
+ /*
+ * 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(xecore, 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);
+
+ xe_force_wake_put(gt_to_fw(gt), XE_FW_RENDER);
+ xe_pm_runtime_put(gt_to_xe(gt));
+}
+
+static void eu_stall_buf_check_work_fn(struct work_struct *work)
+{
+ struct xe_eu_stall_data_stream *stream =
+ container_of(work, typeof(*stream), buf_check_work);
+
+ if (eu_stall_data_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_data_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_data_stream *stream,
+ struct eu_stall_open_properties *props)
+{
+ u32 write_ptr_reg, write_ptr, read_ptr_reg;
+ u32 vaddr_offset, base_reg_value;
+ struct xe_gt *gt = stream->gt;
+ struct per_xecore_buf *xecore_buf;
+ u16 group, instance, num_xecore;
+ xe_dss_mask_t all_xecore;
+ unsigned int fw_ref;
+ int ret, xecore;
+
+ 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", 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->wait_num_reports = props->wait_num_reports;
+ stream->per_xecore_buf_size = per_xecore_buf_size;
+ stream->poll_period = POLL_PERIOD_NS;
+
+ bitmap_or(all_xecore, gt->fuse_topo.g_dss_mask, gt->fuse_topo.c_dss_mask,
+ XE_MAX_DSS_FUSE_BITS);
+ /*
+ * Enabled subslices can be discontiguous. Find the maximum number of subslices
+ * that are enabled.
+ */
+ num_xecore = xe_gt_topology_mask_last_dss(all_xecore) + 1;
+
+ ret = alloc_eu_stall_data_buf(stream, num_xecore);
+ if (ret)
+ return ret;
+
+ stream->xecore_buf = kcalloc(num_xecore, sizeof(*stream->xecore_buf), GFP_KERNEL);
+ if (!stream->xecore_buf)
+ return -ENOMEM;
+
+ bitmap_zero(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS);
+
+ xe_pm_runtime_get(gt_to_xe(gt));
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_RENDER);
+ if (!xe_force_wake_ref_has_domain(fw_ref, XE_FW_RENDER))
+ xe_gt_err(gt, "Failed to get RENDER forcewake\n");
+
+ base_reg_value = gen_eustall_base(stream, false);
+ xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, base_reg_value);
+ /* GGTT addresses can never be > 32 bits */
+ xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE_UPPER, 0);
+ base_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, base_reg_value);
+
+ for_each_dss_steering(xecore, gt, group, instance) {
+ write_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT,
+ group, instance);
+ write_ptr = REG_FIELD_GET(XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK, write_ptr_reg);
+ write_ptr <<= 6;
+ write_ptr &= ((stream->per_xecore_buf_size << 1) - 1);
+ read_ptr_reg = write_ptr >> 6;
+ read_ptr_reg = REG_FIELD_PREP(XEHPC_EUSTALL_REPORT1_READ_PTR_MASK, write_ptr);
+ read_ptr_reg &= XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
+ read_ptr_reg = _MASKED_FIELD(XEHPC_EUSTALL_REPORT1_READ_PTR_MASK, read_ptr_reg);
+ xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT1,
+ read_ptr_reg, group, instance);
+ xecore_buf = &stream->xecore_buf[xecore];
+ vaddr_offset = xecore * stream->per_xecore_buf_size;
+ xecore_buf->vaddr = stream->bo->vmap.vaddr + vaddr_offset;
+ xecore_buf->write = write_ptr;
+ xecore_buf->read = write_ptr;
+ mutex_init(&xecore_buf->lock);
+ }
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
+ xe_pm_runtime_put(gt_to_xe(gt));
+ return 0;
+}
+
+static __poll_t
+xe_eu_stall_stream_poll_locked(struct xe_eu_stall_data_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;
+}
+
/**
* xe_eu_stall_stream_poll - handles userspace poll() of a EU stall data stream fd.
*
@@ -176,11 +746,60 @@ static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
static __poll_t
xe_eu_stall_stream_poll(struct file *file, poll_table *wait)
{
- __poll_t ret = 0;
+ struct xe_eu_stall_data_stream *stream = file->private_data;
+ struct xe_gt *gt = stream->gt;
+ __poll_t ret;
+
+ mutex_lock(>->eu_stall->lock);
+ ret = xe_eu_stall_stream_poll_locked(stream, file, wait);
+ mutex_unlock(>->eu_stall->lock);
return ret;
}
+static void
+xe_eu_stall_enable_locked(struct xe_eu_stall_data_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_disable_locked(struct xe_eu_stall_data_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_stream_ioctl_locked(struct xe_eu_stall_data_stream *stream,
+ unsigned int cmd, unsigned long arg)
+{
+ switch (cmd) {
+ case DRM_XE_OBSERVATION_IOCTL_ENABLE:
+ xe_eu_stall_enable_locked(stream);
+ return 0;
+ case DRM_XE_OBSERVATION_IOCTL_DISABLE:
+ xe_eu_stall_disable_locked(stream);
+ return 0;
+ }
+
+ return -EINVAL;
+}
+
/**
* xe_eu_stall_stream_ioctl - support ioctl() of a xe EU stall data stream fd.
*
@@ -195,14 +814,22 @@ static long xe_eu_stall_stream_ioctl(struct file *file,
unsigned int cmd,
unsigned long arg)
{
- switch (cmd) {
- case DRM_XE_OBSERVATION_IOCTL_ENABLE:
- return 0;
- case DRM_XE_OBSERVATION_IOCTL_DISABLE:
- return 0;
- }
+ struct xe_eu_stall_data_stream *stream = file->private_data;
+ struct xe_gt *gt = stream->gt;
+ long ret;
- return -EINVAL;
+ mutex_lock(>->eu_stall->lock);
+ ret = xe_eu_stall_stream_ioctl_locked(stream, cmd, arg);
+ mutex_unlock(>->eu_stall->lock);
+
+ return ret;
+}
+
+static void
+xe_eu_stall_stream_close_locked(struct xe_eu_stall_data_stream *stream)
+{
+ xe_eu_stall_disable_locked(stream);
+ free_eu_stall_data_buf(stream);
}
/**
@@ -215,6 +842,19 @@ static long xe_eu_stall_stream_ioctl(struct file *file,
*/
static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
{
+ struct xe_eu_stall_data_stream *stream = file->private_data;
+ struct xe_gt *gt = stream->gt;
+
+ mutex_lock(>->eu_stall->lock);
+ xe_eu_stall_stream_close_locked(stream);
+ kfree(stream->xecore_buf);
+ kfree(stream);
+ gt->eu_stall->stream = NULL;
+ mutex_unlock(>->eu_stall->lock);
+
+ /* Release the reference the EU stall stream kept on the driver */
+ drm_dev_put(>->tile->xe->drm);
+
return 0;
}
@@ -230,7 +870,79 @@ static const struct file_operations fops_eu_stall = {
static inline bool has_eu_stall_sampling_support(struct xe_device *xe)
{
- return false;
+ return ((xe->info.platform == XE_PVC) ? true : false);
+}
+
+/**
+ * xe_eu_stall_stream_open_locked - Open a EU stall data stream FD.
+ * @dev: drm device instance
+ * @props: individually validated u64 property value pairs
+ * @file: drm file
+ *
+ * Returns: zero on success or a negative error code.
+ */
+static int
+xe_eu_stall_stream_open_locked(struct drm_device *dev,
+ struct eu_stall_open_properties *props,
+ struct drm_file *file)
+{
+ struct xe_device *xe = to_xe_device(dev);
+ struct xe_eu_stall_data_stream *stream;
+ struct xe_gt *gt = props->gt;
+ unsigned long f_flags = 0;
+ int ret, stream_fd;
+
+ if (!has_eu_stall_sampling_support(xe)) {
+ xe_gt_dbg(gt, "EU stall monitoring is not supported on this platform\n");
+ return -EPERM;
+ }
+
+ if (xe_observation_paranoid && !perfmon_capable()) {
+ xe_gt_dbg(gt, "Insufficient privileges for EU stall monitoring\n");
+ return -EACCES;
+ }
+
+ /* Only one session can be active at any time */
+ if (gt->eu_stall->stream) {
+ xe_gt_dbg(gt, "EU stall sampling session already active\n");
+ return -EBUSY;
+ }
+
+ stream = kzalloc(sizeof(*stream), GFP_KERNEL);
+ if (!stream)
+ return -ENOMEM;
+
+ gt->eu_stall->stream = stream;
+ stream->gt = gt;
+
+ ret = xe_eu_stall_stream_init(stream, props);
+ if (ret) {
+ xe_gt_dbg(gt, "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;
+ xe_gt_dbg(gt, "EU stall inode get fd failed : %d\n", ret);
+ goto err_open;
+ }
+
+ /* 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_data_buf(stream);
+err_alloc:
+ gt->eu_stall->stream = NULL;
+ kfree(stream->xecore_buf);
+ kfree(stream);
+ return ret;
}
/**
@@ -252,10 +964,15 @@ int xe_eu_stall_stream_open(struct drm_device *dev,
{
struct xe_device *xe = to_xe_device(dev);
struct eu_stall_open_properties props;
- int ret, stream_fd;
+ int ret;
memset(&props, 0, sizeof(struct eu_stall_open_properties));
+ /* Set default values */
+ props.gt = NULL;
+ props.eu_stall_sampling_rate = 4;
+ props.wait_num_reports = 1;
+
ret = xe_eu_stall_user_extensions(xe, data, &props);
if (ret)
return ret;
@@ -265,19 +982,9 @@ int xe_eu_stall_stream_open(struct drm_device *dev,
return -EINVAL;
}
- if (xe_observation_paranoid && !perfmon_capable()) {
- xe_gt_dbg(props.gt, "Insufficient privileges for EU stall monitoring\n");
- return -EACCES;
- }
+ mutex_lock(&props.gt->eu_stall->lock);
+ ret = xe_eu_stall_stream_open_locked(dev, &props, file);
+ mutex_unlock(&props.gt->eu_stall->lock);
- if (!has_eu_stall_sampling_support(xe)) {
- xe_gt_dbg(props.gt, "EU stall monitoring is not supported on this platform\n");
- return -EPERM;
- }
- stream_fd = anon_inode_getfd("[xe_eu_stall]", &fops_eu_stall,
- NULL, 0);
- if (stream_fd < 0)
- xe_gt_dbg(props.gt, "EU stall inode get fd failed : %d\n", stream_fd);
-
- return stream_fd;
+ return ret;
}
diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
index 3447958a7a22..f97c8bf8e852 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.h
+++ b/drivers/gpu/drm/xe/xe_eu_stall.h
@@ -6,6 +6,49 @@
#ifndef __XE_EU_STALL_H__
#define __XE_EU_STALL_H__
+#include "xe_gt_types.h"
+
+struct per_xecore_buf {
+ u8 *vaddr;
+ u32 write;
+ u32 read;
+ /* lock to protect read and write pointers */
+ struct mutex lock;
+};
+
+/**
+ * struct xe_eu_stall_data_stream - state of EU stall data stream FD
+ */
+struct xe_eu_stall_data_stream {
+ bool pollin;
+ bool enabled;
+ u64 poll_period;
+ u32 wait_num_reports;
+ size_t per_xecore_buf_size;
+ wait_queue_head_t poll_wq;
+
+ struct xe_gt *gt;
+ struct xe_bo *bo;
+ struct per_xecore_buf *xecore_buf;
+ struct {
+ xe_dss_mask_t mask;
+ } data_drop;
+ struct hrtimer poll_check_timer;
+ struct work_struct buf_check_work;
+ struct workqueue_struct *buf_check_wq;
+};
+
+struct xe_eu_stall_gt {
+ /* Lock to protect stream */
+ struct mutex lock;
+
+ /* Execution Unit (EU) stall data stream */
+ struct xe_eu_stall_data_stream *stream;
+};
+
+int xe_eu_stall_init(struct xe_gt *gt);
+void xe_eu_stall_fini(struct xe_gt *gt);
+
int xe_eu_stall_stream_open(struct drm_device *dev,
u64 data,
struct drm_file *file);
diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
index 26e64530ada2..50a86ed45942 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -59,6 +59,7 @@
#include "xe_vm.h"
#include "xe_wa.h"
#include "xe_wopcm.h"
+#include "xe_eu_stall.h"
static void gt_fini(struct drm_device *drm, void *arg)
{
@@ -158,6 +159,7 @@ void xe_gt_remove(struct xe_gt *gt)
xe_hw_fence_irq_finish(>->fence_irq[i]);
xe_gt_disable_host_l2_vram(gt);
+ xe_eu_stall_fini(gt);
}
static void gt_reset_worker(struct work_struct *w);
@@ -622,6 +624,10 @@ int xe_gt_init(struct xe_gt *gt)
xe_gt_record_user_engines(gt);
+ err = xe_eu_stall_init(gt);
+ if (err)
+ return err;
+
return 0;
}
diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
index 6e66bf0e8b3f..833a1a67e9ae 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -430,6 +430,9 @@ struct xe_gt {
/** @oa: oa observation subsystem per gt info */
struct xe_oa_gt oa;
+
+ /** @eu_stall: EU stall counters subsystem per gt info */
+ struct xe_eu_stall_gt *eu_stall;
};
#endif
diff --git a/drivers/gpu/drm/xe/xe_trace.h b/drivers/gpu/drm/xe/xe_trace.h
index d5281de04d54..1cc6bfc34ccb 100644
--- a/drivers/gpu/drm/xe/xe_trace.h
+++ b/drivers/gpu/drm/xe/xe_trace.h
@@ -427,6 +427,39 @@ DEFINE_EVENT(xe_pm_runtime, xe_pm_runtime_get_ioctl,
TP_ARGS(xe, caller)
);
+TRACE_EVENT(xe_eu_stall_data_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 */
--
2.47.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v8 4/7] drm/xe/eustall: Return -EIO error from read() if HW drops data
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
` (2 preceding siblings ...)
2025-01-15 20:02 ` [PATCH v8 3/7] drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC Harish Chegondi
@ 2025-01-15 20:02 ` Harish Chegondi
2025-01-30 4:45 ` Dixit, Ashutosh
2025-01-15 20:02 ` [PATCH v8 5/7] drm/xe/eustall: Add EU stall sampling support for Xe2 Harish Chegondi
` (12 subsequent siblings)
16 siblings, 1 reply; 49+ messages in thread
From: Harish Chegondi @ 2025-01-15 20:02 UTC (permalink / raw)
To: intel-xe
Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi, Harish Chegondi
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,
and if the hardware wants to write more data, it simply drops
data due to unavailable buffer space. In that case, hardware
sets a bit in a register. If the driver detects data drop,
the driver read() returns -EIO error to let the user space
know that HW has dropped data. The -EIO error is returned
even if there is EU stall data in the buffer. A subsequent
read by the user space returns the remaining EU stall data.
Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
---
drivers/gpu/drm/xe/xe_eu_stall.c | 12 ++++++++++++
drivers/gpu/drm/xe/xe_eu_stall.h | 1 +
2 files changed, 13 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
index c388d733b857..437782f8433c 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.c
+++ b/drivers/gpu/drm/xe/xe_eu_stall.c
@@ -472,6 +472,7 @@ xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *stream,
* before calling read().
*
* Returns: The number of bytes copied or a negative error code on failure.
+ * -EIO if HW drops any EU stall data when the buffer is full.
*/
static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
size_t count, loff_t *ppos)
@@ -485,6 +486,16 @@ static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
return -EINVAL;
}
+ if (bitmap_weight(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS)) {
+ if (!stream->data_drop.reported_to_user) {
+ stream->data_drop.reported_to_user = true;
+ xe_gt_dbg(gt, "EU stall data dropped in XeCores: %*pb\n",
+ XE_MAX_DSS_FUSE_BITS, stream->data_drop.mask);
+ return -EIO;
+ }
+ stream->data_drop.reported_to_user = false;
+ }
+
if (!(file->f_flags & O_NONBLOCK)) {
do {
if (!stream->pollin) {
@@ -680,6 +691,7 @@ static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
if (!stream->xecore_buf)
return -ENOMEM;
+ stream->data_drop.reported_to_user = false;
bitmap_zero(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS);
xe_pm_runtime_get(gt_to_xe(gt));
diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
index f97c8bf8e852..8bc44e9e98af 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.h
+++ b/drivers/gpu/drm/xe/xe_eu_stall.h
@@ -31,6 +31,7 @@ struct xe_eu_stall_data_stream {
struct xe_bo *bo;
struct per_xecore_buf *xecore_buf;
struct {
+ bool reported_to_user;
xe_dss_mask_t mask;
} data_drop;
struct hrtimer poll_check_timer;
--
2.47.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v8 5/7] drm/xe/eustall: Add EU stall sampling support for Xe2
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
` (3 preceding siblings ...)
2025-01-15 20:02 ` [PATCH v8 4/7] drm/xe/eustall: Return -EIO error from read() if HW drops data Harish Chegondi
@ 2025-01-15 20:02 ` Harish Chegondi
2025-01-30 4:55 ` Dixit, Ashutosh
2025-01-15 20:02 ` [PATCH v8 6/7] drm/xe/uapi: Add a device query to get EU stall sampling information Harish Chegondi
` (11 subsequent siblings)
16 siblings, 1 reply; 49+ messages in thread
From: Harish Chegondi @ 2025-01-15 20:02 UTC (permalink / raw)
To: intel-xe
Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi, Harish Chegondi
Add EU stall sampling support for Xe2 architecture GPUs - LNL and BMG.
EU stall data format for LNL and BMG is different from that of PVC.
v8: Renamed struct drm_xe_eu_stall_data_xe2 to struct xe_eu_stall_data_xe2
since it is a local structure.
Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
---
drivers/gpu/drm/xe/xe_eu_stall.c | 52 ++++++++++++++++++++++++++++++--
1 file changed, 49 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
index 437782f8433c..d72f80a9dfe4 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.c
+++ b/drivers/gpu/drm/xe/xe_eu_stall.c
@@ -73,6 +73,42 @@ struct xe_eu_stall_data_pvc {
__u64 unused[6];
} __packed;
+/**
+ * struct xe_eu_stall_data_xe2 - EU stall data format for LNL, BMG
+ *
+ * Bits Field
+ * 0 to 28 IP (addr)
+ * 29 to 36 Tdr count
+ * 37 to 44 other count
+ * 45 to 52 control count
+ * 53 to 60 pipestall count
+ * 61 to 68 send count
+ * 69 to 76 dist_acc count
+ * 77 to 84 sbid count
+ * 85 to 92 sync count
+ * 93 to 100 inst_fetch count
+ * 101 to 108 Active count
+ * 109 to 111 Exid
+ * 112 EndFlag (is always 1)
+ */
+struct xe_eu_stall_data_xe2 {
+ __u64 ip_addr:29;
+ __u64 tdr_count:8;
+ __u64 other_count:8;
+ __u64 control_count:8;
+ __u64 pipestall_count:8;
+ __u64 send_count:8;
+ __u64 dist_acc_count:8;
+ __u64 sbid_count:8;
+ __u64 sync_count:8;
+ __u64 inst_fetch_count:8;
+ __u64 active_count:8;
+ __u64 ex_id:3;
+ __u64 end_flag:1;
+ __u64 unused_bits:15;
+ __u64 unused[6];
+} __packed;
+
static u64 per_xecore_buf_size = SZ_512K;
static unsigned long
@@ -83,6 +119,8 @@ xe_eu_stall_data_record_size(struct xe_device *xe)
if (platform == XE_PVC)
record_size = sizeof(struct xe_eu_stall_data_pvc);
+ else if ((platform == XE_LUNARLAKE) || (platform == XE_BATTLEMAGE))
+ record_size = sizeof(struct xe_eu_stall_data_xe2);
return record_size;
}
@@ -311,10 +349,16 @@ eu_stall_data_buf_check(struct xe_eu_stall_data_stream *stream)
static void
clear_dropped_eviction_line_bit(struct xe_gt *gt, u16 group, u16 instance)
{
+ struct xe_device *xe = gt_to_xe(gt);
u32 write_ptr_reg;
- /* On PVC, the overflow bit has to be cleared by writing 1 to it. */
- write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
+ /* 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 (GRAPHICS_VER(xe) >= 20)
+ write_ptr_reg = _MASKED_BIT_DISABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
+ else
+ write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT, write_ptr_reg, group, instance);
}
@@ -882,7 +926,9 @@ static const struct file_operations fops_eu_stall = {
static inline bool has_eu_stall_sampling_support(struct xe_device *xe)
{
- return ((xe->info.platform == XE_PVC) ? true : false);
+ return ((xe->info.platform == XE_PVC ||
+ xe->info.platform == XE_LUNARLAKE ||
+ xe->info.platform == XE_BATTLEMAGE) ? true : false);
}
/**
--
2.47.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v8 6/7] drm/xe/uapi: Add a device query to get EU stall sampling information
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
` (4 preceding siblings ...)
2025-01-15 20:02 ` [PATCH v8 5/7] drm/xe/eustall: Add EU stall sampling support for Xe2 Harish Chegondi
@ 2025-01-15 20:02 ` Harish Chegondi
2025-01-16 22:34 ` Dixit, Ashutosh
2025-01-30 17:36 ` Dixit, Ashutosh
2025-01-15 20:02 ` [PATCH v8 7/7] drm/xe/eustall: Add workaround 22016596838 which applies to PVC Harish Chegondi
` (10 subsequent siblings)
16 siblings, 2 replies; 49+ messages in thread
From: Harish Chegondi @ 2025-01-15 20:02 UTC (permalink / raw)
To: intel-xe
Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi, Harish Chegondi
User space can get the EU stall data record size, EU stall capabilities,
EU stall sampling rates, and per XeCore buffer size with query IOCTL
DRM_IOCTL_XE_DEVICE_QUERY with .query set to DRM_XE_DEVICE_QUERY_EU_STALL.
A struct drm_xe_query_eu_stall will be returned to the user space along
with an array of supported sampling rates sorted in the fastest sampling
rate first order. sampling_rates in struct drm_xe_query_eu_stall will
point to the array of sampling rates.
Any capabilities in EU stall sampling as of this patch are considered
as base capabilities. New capability bits will be added for any new
functionality added later.
v7: Change sampling_rates from a pointer to flexible array.
v6: Include EU stall sampling rates information and
per XeCore buffer size in the query information.
Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
---
drivers/gpu/drm/xe/xe_eu_stall.c | 41 +++++++++++++++++++++++++++++++-
drivers/gpu/drm/xe/xe_eu_stall.h | 5 ++++
drivers/gpu/drm/xe/xe_query.c | 38 +++++++++++++++++++++++++++++
include/uapi/drm/xe_drm.h | 40 +++++++++++++++++++++++++++++--
4 files changed, 121 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
index d72f80a9dfe4..6acfd369d808 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.c
+++ b/drivers/gpu/drm/xe/xe_eu_stall.c
@@ -111,7 +111,46 @@ struct xe_eu_stall_data_xe2 {
static u64 per_xecore_buf_size = SZ_512K;
-static unsigned long
+const u64 eu_stall_sampling_rates[] = {251, 251 * 2, 251 * 3, 251 * 4, 251 * 5, 251 * 6, 251 * 7};
+
+/**
+ * xe_eu_stall_get_sampling_rates - get EU stall sampling rates information.
+ *
+ * @num_rates_ptr: Pointer to a u32 to return the number of sampling rates.
+ * @rates_ptr: double u64 pointer to point to an array of sampling rates.
+ *
+ * Stores the number of sampling rates and pointer to the array of
+ * sampling rates in the input pointers.
+ *
+ * Returns: Size of the EU stall sampling rates array.
+ */
+size_t xe_eu_stall_get_sampling_rates(u32 *num_rates_ptr, const u64 **rates_ptr)
+{
+ *num_rates_ptr = ARRAY_SIZE(eu_stall_sampling_rates);
+ *rates_ptr = eu_stall_sampling_rates;
+
+ return sizeof(eu_stall_sampling_rates);
+}
+
+/**
+ * xe_eu_stall_get_per_xecore_buf_size - get per XeCore buffer size.
+ *
+ * Returns: The per XeCore buffer size used to allocate the per GT
+ * EU stall data buffer.
+ */
+u64 xe_eu_stall_get_per_xecore_buf_size(void)
+{
+ return per_xecore_buf_size;
+}
+
+/**
+ * xe_eu_stall_data_record_size - get EU stall data record size.
+ *
+ * @xe: Pointer to a Xe device.
+ *
+ * Returns: EU stall data record size.
+ */
+unsigned long
xe_eu_stall_data_record_size(struct xe_device *xe)
{
enum xe_platform platform = xe->info.platform;
diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
index 8bc44e9e98af..c00d1af794a1 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.h
+++ b/drivers/gpu/drm/xe/xe_eu_stall.h
@@ -47,10 +47,15 @@ struct xe_eu_stall_gt {
struct xe_eu_stall_data_stream *stream;
};
+u64 xe_eu_stall_get_per_xecore_buf_size(void);
+size_t xe_eu_stall_get_sampling_rates(u32 *num_rates_ptr,
+ const u64 **rates_ptr);
int xe_eu_stall_init(struct xe_gt *gt);
void xe_eu_stall_fini(struct xe_gt *gt);
int xe_eu_stall_stream_open(struct drm_device *dev,
u64 data,
struct drm_file *file);
+unsigned long
+xe_eu_stall_data_record_size(struct xe_device *xe);
#endif
diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
index c059639613f7..544a4a2ce07f 100644
--- a/drivers/gpu/drm/xe/xe_query.c
+++ b/drivers/gpu/drm/xe/xe_query.c
@@ -26,6 +26,7 @@
#include "xe_oa.h"
#include "xe_ttm_vram_mgr.h"
#include "xe_wa.h"
+#include "xe_eu_stall.h"
static const u16 xe_to_user_engine_class[] = {
[XE_ENGINE_CLASS_RENDER] = DRM_XE_ENGINE_CLASS_RENDER,
@@ -698,6 +699,42 @@ static int query_oa_units(struct xe_device *xe,
return ret ? -EFAULT : 0;
}
+static int query_eu_stall(struct xe_device *xe,
+ struct drm_xe_device_query *query)
+{
+ void __user *query_ptr = u64_to_user_ptr(query->data);
+ struct drm_xe_query_eu_stall *info;
+ size_t size, array_size;
+ const u64 *rates_ptr;
+ u32 num_rates;
+ int ret;
+
+ array_size = xe_eu_stall_get_sampling_rates(&num_rates, &rates_ptr);
+ size = sizeof(struct drm_xe_query_eu_stall) + array_size;
+
+ if (query->size == 0) {
+ query->size = size;
+ return 0;
+ } else if (XE_IOCTL_DBG(xe, query->size != size)) {
+ return -EINVAL;
+ }
+
+ info = kzalloc(size, GFP_KERNEL);
+ if (!info)
+ return -ENOMEM;
+
+ info->num_sampling_rates = num_rates;
+ info->capabilities = DRM_XE_EU_STALL_CAPS_BASE;
+ info->record_size = xe_eu_stall_data_record_size(xe);
+ info->per_xecore_buf_size = xe_eu_stall_get_per_xecore_buf_size();
+ memcpy(info->sampling_rates, rates_ptr, array_size);
+
+ ret = copy_to_user(query_ptr, info, size);
+ kfree(info);
+
+ return ret ? -EFAULT : 0;
+}
+
static int (* const xe_query_funcs[])(struct xe_device *xe,
struct drm_xe_device_query *query) = {
query_engines,
@@ -709,6 +746,7 @@ static int (* const xe_query_funcs[])(struct xe_device *xe,
query_engine_cycles,
query_uc_fw_version,
query_oa_units,
+ query_eu_stall,
};
int xe_query_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
index d9b20afc57c1..7d518f97ba34 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -700,6 +700,7 @@ struct drm_xe_device_query {
#define DRM_XE_DEVICE_QUERY_ENGINE_CYCLES 6
#define DRM_XE_DEVICE_QUERY_UC_FW_VERSION 7
#define DRM_XE_DEVICE_QUERY_OA_UNITS 8
+#define DRM_XE_DEVICE_QUERY_EU_STALL 9
/** @query: The type of data to query */
__u32 query;
@@ -1754,8 +1755,8 @@ enum drm_xe_eu_stall_property_id {
DRM_XE_EU_STALL_PROP_GT_ID = 1,
/**
- * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
- * in GPU cycles.
+ * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate in
+ * GPU cycles from @sampling_rates in struct @drm_xe_query_eu_stall
*/
DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
@@ -1767,6 +1768,41 @@ enum drm_xe_eu_stall_property_id {
DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS,
};
+/**
+ * struct drm_xe_query_eu_stall - Information about EU stall sampling.
+ *
+ * If a query is made with a struct @drm_xe_device_query where .query
+ * is equal to @DRM_XE_DEVICE_QUERY_EU_STALL, then the reply uses
+ * struct @drm_xe_query_eu_stall in .data.
+ */
+struct drm_xe_query_eu_stall {
+ /** @extensions: Pointer to the first extension struct, if any */
+ __u64 extensions;
+
+ /** @capabilities: EU stall capabilities bit-mask */
+ __u64 capabilities;
+#define DRM_XE_EU_STALL_CAPS_BASE (1 << 0)
+
+ /** @record_size: size of each EU stall data record */
+ __u64 record_size;
+
+ /** @per_xecore_buf_size: Per XeCore buffer size */
+ __u64 per_xecore_buf_size;
+
+ /** @num_sampling_rates: Number of sampling rates supported */
+ __u64 num_sampling_rates;
+
+ /** @reserved: Reserved */
+ __u64 reserved[5];
+
+ /**
+ * @sampling_rates: Flexible array of sampling rates
+ * sorted in the fastest to slowest order.
+ * Sampling rates are specified in GPU clock cycles.
+ */
+ __u64 sampling_rates[];
+};
+
#if defined(__cplusplus)
}
#endif
--
2.47.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* [PATCH v8 7/7] drm/xe/eustall: Add workaround 22016596838 which applies to PVC.
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
` (5 preceding siblings ...)
2025-01-15 20:02 ` [PATCH v8 6/7] drm/xe/uapi: Add a device query to get EU stall sampling information Harish Chegondi
@ 2025-01-15 20:02 ` Harish Chegondi
2025-01-30 5:14 ` Dixit, Ashutosh
2025-01-15 20:46 ` ✓ CI.Patch_applied: success for Add support for EU stall sampling Patchwork
` (9 subsequent siblings)
16 siblings, 1 reply; 49+ messages in thread
From: Harish Chegondi @ 2025-01-15 20:02 UTC (permalink / raw)
To: intel-xe
Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi, Harish Chegondi
Add PVC workaround 22016596838 that disables EU DOP gating
during EU stall sampling.
Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
---
drivers/gpu/drm/xe/xe_eu_stall.c | 16 ++++++++++++++++
drivers/gpu/drm/xe/xe_wa_oob.rules | 1 +
2 files changed, 17 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
index 6acfd369d808..f030a9c1af84 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.c
+++ b/drivers/gpu/drm/xe/xe_eu_stall.c
@@ -13,6 +13,7 @@
#include "xe_bo.h"
#include "xe_pm.h"
+#include "xe_wa.h"
#include "xe_trace.h"
#include "xe_macros.h"
#include "xe_device.h"
@@ -26,6 +27,8 @@
#include "regs/xe_gt_regs.h"
#include "regs/xe_eu_stall_regs.h"
+#include <generated/xe_wa_oob.h>
+
#define POLL_FREQUENCY_HZ 100
#define POLL_PERIOD_NS (NSEC_PER_SEC / POLL_FREQUENCY_HZ)
@@ -677,6 +680,14 @@ xe_eu_stall_stream_enable(struct xe_eu_stall_data_stream *stream)
if (!xe_force_wake_ref_has_domain(fw_ref, XE_FW_RENDER))
xe_gt_err(gt, "Failed to get RENDER forcewake\n");
+ /*
+ * Wa_22016596838:pvc
+ * Disable EU DOP gating for PVC.
+ */
+ if (XE_WA(gt, 22016596838))
+ 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);
}
@@ -708,6 +719,11 @@ xe_eu_stall_stream_disable(struct xe_eu_stall_data_stream *stream)
reg_value = gen_eustall_base(stream, false);
xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, reg_value);
+ /* Wa_22016596838:pvc */
+ if (XE_WA(gt, 22016596838))
+ xe_gt_mcr_multicast_write(gt, ROW_CHICKEN2,
+ _MASKED_BIT_DISABLE(DISABLE_DOP_GATING));
+
xe_force_wake_put(gt_to_fw(gt), XE_FW_RENDER);
xe_pm_runtime_put(gt_to_xe(gt));
}
diff --git a/drivers/gpu/drm/xe/xe_wa_oob.rules b/drivers/gpu/drm/xe/xe_wa_oob.rules
index 40438c3d9b72..7dad548dbe9f 100644
--- a/drivers/gpu/drm/xe/xe_wa_oob.rules
+++ b/drivers/gpu/drm/xe/xe_wa_oob.rules
@@ -5,6 +5,7 @@
22011391025 PLATFORM(DG2)
22012727170 SUBPLATFORM(DG2, G11)
22012727685 SUBPLATFORM(DG2, G11)
+22016596838 PLATFORM(PVC)
18020744125 PLATFORM(PVC)
1509372804 PLATFORM(PVC), GRAPHICS_STEP(A0, C0)
1409600907 GRAPHICS_VERSION_RANGE(1200, 1250)
--
2.47.1
^ permalink raw reply related [flat|nested] 49+ messages in thread
* ✓ CI.Patch_applied: success for Add support for EU stall sampling
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
` (6 preceding siblings ...)
2025-01-15 20:02 ` [PATCH v8 7/7] drm/xe/eustall: Add workaround 22016596838 which applies to PVC Harish Chegondi
@ 2025-01-15 20:46 ` Patchwork
2025-01-15 20:46 ` ✗ CI.checkpatch: warning " Patchwork
` (8 subsequent siblings)
16 siblings, 0 replies; 49+ messages in thread
From: Patchwork @ 2025-01-15 20:46 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
== Series Details ==
Series: Add support for EU stall sampling
URL : https://patchwork.freedesktop.org/series/143572/
State : success
== Summary ==
=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: 83dd30e2ec24 drm-tip: 2025y-01m-15d-20h-39m-52s UTC integration manifest
=== git am output follows ===
Applying: drm/xe/topology: Add a function to find the index of the last enabled DSS in a mask
Applying: drm/xe/uapi: Introduce API for EU stall sampling
Applying: drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC
Applying: drm/xe/eustall: Return -EIO error from read() if HW drops data
Applying: drm/xe/eustall: Add EU stall sampling support for Xe2
Applying: drm/xe/uapi: Add a device query to get EU stall sampling information
Applying: drm/xe/eustall: Add workaround 22016596838 which applies to PVC.
^ permalink raw reply [flat|nested] 49+ messages in thread
* ✗ CI.checkpatch: warning for Add support for EU stall sampling
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
` (7 preceding siblings ...)
2025-01-15 20:46 ` ✓ CI.Patch_applied: success for Add support for EU stall sampling Patchwork
@ 2025-01-15 20:46 ` Patchwork
2025-01-15 20:48 ` ✓ CI.KUnit: success " Patchwork
` (7 subsequent siblings)
16 siblings, 0 replies; 49+ messages in thread
From: Patchwork @ 2025-01-15 20:46 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
== Series Details ==
Series: Add support for EU stall sampling
URL : https://patchwork.freedesktop.org/series/143572/
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
30ab6715fc09baee6cc14cb3c89ad8858688d474
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 9ba311d0f5bac8998e42efa23fc24dbf50d86b34
Author: Harish Chegondi <harish.chegondi@intel.com>
Date: Wed Jan 15 12:02:13 2025 -0800
drm/xe/eustall: Add workaround 22016596838 which applies to PVC.
Add PVC workaround 22016596838 that disables EU DOP gating
during EU stall sampling.
Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
+ /mt/dim checkpatch 83dd30e2ec24ab8307774b149fcd998a4191eec2 drm-intel
a3ff85a8751f drm/xe/topology: Add a function to find the index of the last enabled DSS in a mask
1434e458b1a1 drm/xe/uapi: Introduce API for EU stall sampling
-:55: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#55:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 384 lines checked
64c6ca7abdcf drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC
-:26: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#26:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 1001 lines checked
4c3b8806c9cf drm/xe/eustall: Return -EIO error from read() if HW drops data
e01ed6a5a342 drm/xe/eustall: Add EU stall sampling support for Xe2
6313cc94030b drm/xe/uapi: Add a device query to get EU stall sampling information
9ba311d0f5ba drm/xe/eustall: Add workaround 22016596838 which applies to PVC.
^ permalink raw reply [flat|nested] 49+ messages in thread
* ✓ CI.KUnit: success for Add support for EU stall sampling
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
` (8 preceding siblings ...)
2025-01-15 20:46 ` ✗ CI.checkpatch: warning " Patchwork
@ 2025-01-15 20:48 ` Patchwork
2025-01-15 21:14 ` ✓ CI.Build: " Patchwork
` (6 subsequent siblings)
16 siblings, 0 replies; 49+ messages in thread
From: Patchwork @ 2025-01-15 20:48 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
== Series Details ==
Series: Add support for EU stall sampling
URL : https://patchwork.freedesktop.org/series/143572/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[20:46:59] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[20:47:07] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json 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)
| ^~~~~~~~~~~~~~~~~
[20:48:03] Starting KUnit Kernel (1/1)...
[20:48:03] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[20:48:03] =================== guc_dbm (7 subtests) ===================
[20:48:03] [PASSED] test_empty
[20:48:03] [PASSED] test_default
[20:48:03] ======================== test_size ========================
[20:48:03] [PASSED] 4
[20:48:03] [PASSED] 8
[20:48:03] [PASSED] 32
[20:48:03] [PASSED] 256
[20:48:03] ==================== [PASSED] test_size ====================
[20:48:03] ======================= test_reuse ========================
[20:48:03] [PASSED] 4
[20:48:03] [PASSED] 8
[20:48:03] [PASSED] 32
[20:48:03] [PASSED] 256
[20:48:03] =================== [PASSED] test_reuse ====================
[20:48:03] =================== test_range_overlap ====================
[20:48:03] [PASSED] 4
[20:48:03] [PASSED] 8
[20:48:03] [PASSED] 32
[20:48:03] [PASSED] 256
[20:48:03] =============== [PASSED] test_range_overlap ================
[20:48:03] =================== test_range_compact ====================
[20:48:03] [PASSED] 4
[20:48:03] [PASSED] 8
[20:48:03] [PASSED] 32
[20:48:03] [PASSED] 256
[20:48:03] =============== [PASSED] test_range_compact ================
[20:48:03] ==================== test_range_spare =====================
[20:48:03] [PASSED] 4
[20:48:03] [PASSED] 8
[20:48:03] [PASSED] 32
[20:48:03] [PASSED] 256
[20:48:03] ================ [PASSED] test_range_spare =================
[20:48:03] ===================== [PASSED] guc_dbm =====================
[20:48:03] =================== guc_idm (6 subtests) ===================
[20:48:03] [PASSED] bad_init
[20:48:03] [PASSED] no_init
[20:48:03] [PASSED] init_fini
[20:48:03] [PASSED] check_used
[20:48:03] [PASSED] check_quota
[20:48:03] [PASSED] check_all
[20:48:03] ===================== [PASSED] guc_idm =====================
[20:48:03] ================== no_relay (3 subtests) ===================
[20:48:03] [PASSED] xe_drops_guc2pf_if_not_ready
[20:48:03] [PASSED] xe_drops_guc2vf_if_not_ready
[20:48:03] [PASSED] xe_rejects_send_if_not_ready
[20:48:03] ==================== [PASSED] no_relay =====================
[20:48:03] ================== pf_relay (14 subtests) ==================
[20:48:03] [PASSED] pf_rejects_guc2pf_too_short
[20:48:03] [PASSED] pf_rejects_guc2pf_too_long
[20:48:03] [PASSED] pf_rejects_guc2pf_no_payload
[20:48:03] [PASSED] pf_fails_no_payload
[20:48:03] [PASSED] pf_fails_bad_origin
[20:48:03] [PASSED] pf_fails_bad_type
[20:48:03] [PASSED] pf_txn_reports_error
[20:48:03] [PASSED] pf_txn_sends_pf2guc
[20:48:03] [PASSED] pf_sends_pf2guc
[20:48:03] [SKIPPED] pf_loopback_nop
[20:48:03] [SKIPPED] pf_loopback_echo
[20:48:03] [SKIPPED] pf_loopback_fail
[20:48:03] [SKIPPED] pf_loopback_busy
[20:48:03] [SKIPPED] pf_loopback_retry
[20:48:03] ==================== [PASSED] pf_relay =====================
[20:48:03] ================== vf_relay (3 subtests) ===================
[20:48:03] [PASSED] vf_rejects_guc2vf_too_short
[20:48:03] [PASSED] vf_rejects_guc2vf_too_long
[20:48:03] [PASSED] vf_rejects_guc2vf_no_payload
[20:48:03] ==================== [PASSED] vf_relay =====================
[20:48:03] ================= pf_service (11 subtests) =================
[20:48:03] [PASSED] pf_negotiate_any
[20:48:03] [PASSED] pf_negotiate_base_match
[20:48:03] [PASSED] pf_negotiate_base_newer
[20:48:03] [PASSED] pf_negotiate_base_next
[20:48:03] [SKIPPED] pf_negotiate_base_older
[20:48:03] [PASSED] pf_negotiate_base_prev
[20:48:03] [PASSED] pf_negotiate_latest_match
[20:48:03] [PASSED] pf_negotiate_latest_newer
[20:48:03] [PASSED] pf_negotiate_latest_next
[20:48:03] [SKIPPED] pf_negotiate_latest_older
[20:48:03] [SKIPPED] pf_negotiate_latest_prev
[20:48:03] =================== [PASSED] pf_service ====================
[20:48:03] ===================== lmtt (1 subtest) =====================
[20:48:03] ======================== test_ops =========================
[20:48:03] [PASSED] 2-level
[20:48:03] [PASSED] multi-level
[20:48:03] ==================== [PASSED] test_ops =====================
[20:48:03] ====================== [PASSED] lmtt =======================
[20:48:03] =================== xe_mocs (2 subtests) ===================
[20:48:03] ================ xe_live_mocs_kernel_kunit ================
[20:48:03] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[20:48:03] ================ xe_live_mocs_reset_kunit =================
[20:48:03] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[20:48:03] ==================== [SKIPPED] xe_mocs =====================
[20:48:03] ================= xe_migrate (2 subtests) ==================
[20:48:03] ================= xe_migrate_sanity_kunit =================
[20:48:03] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[20:48:03] ================== xe_validate_ccs_kunit ==================
[20:48:03] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[20:48:03] =================== [SKIPPED] xe_migrate ===================
[20:48:03] ================== xe_dma_buf (1 subtest) ==================
[20:48:03] ==================== xe_dma_buf_kunit =====================
[20:48:03] ================ [SKIPPED] xe_dma_buf_kunit ================
[20:48:03] =================== [SKIPPED] xe_dma_buf ===================
[20:48:03] ================= xe_bo_shrink (1 subtest) =================
[20:48:03] =================== xe_bo_shrink_kunit ====================
[20:48:03] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[20:48:03] ================== [SKIPPED] xe_bo_shrink ==================
[20:48:03] ==================== xe_bo (2 subtests) ====================
[20:48:03] ================== xe_ccs_migrate_kunit ===================
[20:48:03] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[20:48:03] ==================== xe_bo_evict_kunit ====================
[20:48:03] =============== [SKIPPED] xe_bo_evict_kunit ================
[20:48:03] ===================== [SKIPPED] xe_bo ======================
[20:48:03] ==================== args (11 subtests) ====================
[20:48:03] [PASSED] count_args_test
[20:48:03] [PASSED] call_args_example
[20:48:03] [PASSED] call_args_test
[20:48:03] [PASSED] drop_first_arg_example
[20:48:03] [PASSED] drop_first_arg_test
[20:48:03] [PASSED] first_arg_example
[20:48:03] [PASSED] first_arg_test
stty: 'standard input': Inappropriate ioctl for device
[20:48:03] [PASSED] last_arg_example
[20:48:03] [PASSED] last_arg_test
[20:48:03] [PASSED] pick_arg_example
[20:48:03] [PASSED] sep_comma_example
[20:48:03] ====================== [PASSED] args =======================
[20:48:03] =================== xe_pci (2 subtests) ====================
[20:48:03] [PASSED] xe_gmdid_graphics_ip
[20:48:03] [PASSED] xe_gmdid_media_ip
[20:48:03] ===================== [PASSED] xe_pci ======================
[20:48:03] =================== xe_rtp (2 subtests) ====================
[20:48:03] =============== xe_rtp_process_to_sr_tests ================
[20:48:03] [PASSED] coalesce-same-reg
[20:48:03] [PASSED] no-match-no-add
[20:48:03] [PASSED] match-or
[20:48:03] [PASSED] match-or-xfail
[20:48:03] [PASSED] no-match-no-add-multiple-rules
[20:48:03] [PASSED] two-regs-two-entries
[20:48:03] [PASSED] clr-one-set-other
[20:48:03] [PASSED] set-field
[20:48:03] [PASSED] conflict-duplicate
[20:48:03] [PASSED] conflict-not-disjoint
[20:48:03] [PASSED] conflict-reg-type
[20:48:03] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[20:48:03] ================== xe_rtp_process_tests ===================
[20:48:03] [PASSED] active1
[20:48:03] [PASSED] active2
[20:48:03] [PASSED] active-inactive
[20:48:03] [PASSED] inactive-active
[20:48:03] [PASSED] inactive-1st_or_active-inactive
[20:48:03] [PASSED] inactive-2nd_or_active-inactive
[20:48:03] [PASSED] inactive-last_or_active-inactive
[20:48:03] [PASSED] inactive-no_or_active-inactive
[20:48:03] ============== [PASSED] xe_rtp_process_tests ===============
[20:48:03] ===================== [PASSED] xe_rtp ======================
[20:48:03] ==================== xe_wa (1 subtest) =====================
[20:48:03] ======================== xe_wa_gt =========================
[20:48:03] [PASSED] TIGERLAKE (B0)
[20:48:03] [PASSED] DG1 (A0)
[20:48:03] [PASSED] DG1 (B0)
[20:48:03] [PASSED] ALDERLAKE_S (A0)
[20:48:03] [PASSED] ALDERLAKE_S (B0)
[20:48:03] [PASSED] ALDERLAKE_S (C0)
[20:48:03] [PASSED] ALDERLAKE_S (D0)
[20:48:03] [PASSED] ALDERLAKE_P (A0)
[20:48:03] [PASSED] ALDERLAKE_P (B0)
[20:48:03] [PASSED] ALDERLAKE_P (C0)
[20:48:03] [PASSED] ALDERLAKE_S_RPLS (D0)
[20:48:03] [PASSED] ALDERLAKE_P_RPLU (E0)
[20:48:03] [PASSED] DG2_G10 (C0)
[20:48:03] [PASSED] DG2_G11 (B1)
[20:48:03] [PASSED] DG2_G12 (A1)
[20:48:03] [PASSED] METEORLAKE (g:A0, m:A0)
[20:48:03] [PASSED] METEORLAKE (g:A0, m:A0)
[20:48:03] [PASSED] METEORLAKE (g:A0, m:A0)
[20:48:03] [PASSED] LUNARLAKE (g:A0, m:A0)
[20:48:03] [PASSED] LUNARLAKE (g:B0, m:A0)
[20:48:03] [PASSED] BATTLEMAGE (g:A0, m:A1)
[20:48:03] ==================== [PASSED] xe_wa_gt =====================
[20:48:03] ====================== [PASSED] xe_wa ======================
[20:48:03] ============================================================
[20:48:03] Testing complete. Ran 122 tests: passed: 106, skipped: 16
[20:48:03] Elapsed time: 64.145s total, 7.576s configuring, 56.196s building, 0.341s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[20:48:03] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[20:48:06] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json 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)
| ^~~~~~~~~~~~~~~~~
[20:48:38] Starting KUnit Kernel (1/1)...
[20:48:38] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[20:48:39] =========== drm_validate_clone_mode (2 subtests) ===========
[20:48:39] ============== drm_test_check_in_clone_mode ===============
[20:48:39] [PASSED] in_clone_mode
[20:48:39] [PASSED] not_in_clone_mode
[20:48:39] ========== [PASSED] drm_test_check_in_clone_mode ===========
[20:48:39] =============== drm_test_check_valid_clones ===============
[20:48:39] [PASSED] not_in_clone_mode
[20:48:39] [PASSED] valid_clone
[20:48:39] [PASSED] invalid_clone
[20:48:39] =========== [PASSED] drm_test_check_valid_clones ===========
[20:48:39] ============= [PASSED] drm_validate_clone_mode =============
[20:48:39] ============= drm_validate_modeset (1 subtest) =============
[20:48:39] [PASSED] drm_test_check_connector_changed_modeset
[20:48:39] ============== [PASSED] drm_validate_modeset ===============
[20:48:39] ================== drm_buddy (7 subtests) ==================
[20:48:39] [PASSED] drm_test_buddy_alloc_limit
[20:48:39] [PASSED] drm_test_buddy_alloc_optimistic
[20:48:39] [PASSED] drm_test_buddy_alloc_pessimistic
[20:48:39] [PASSED] drm_test_buddy_alloc_pathological
[20:48:39] [PASSED] drm_test_buddy_alloc_contiguous
[20:48:39] [PASSED] drm_test_buddy_alloc_clear
[20:48:39] [PASSED] drm_test_buddy_alloc_range_bias
[20:48:39] ==================== [PASSED] drm_buddy ====================
[20:48:39] ============= drm_cmdline_parser (40 subtests) =============
[20:48:39] [PASSED] drm_test_cmdline_force_d_only
[20:48:39] [PASSED] drm_test_cmdline_force_D_only_dvi
[20:48:39] [PASSED] drm_test_cmdline_force_D_only_hdmi
[20:48:39] [PASSED] drm_test_cmdline_force_D_only_not_digital
[20:48:39] [PASSED] drm_test_cmdline_force_e_only
[20:48:39] [PASSED] drm_test_cmdline_res
[20:48:39] [PASSED] drm_test_cmdline_res_vesa
[20:48:39] [PASSED] drm_test_cmdline_res_vesa_rblank
[20:48:39] [PASSED] drm_test_cmdline_res_rblank
[20:48:39] [PASSED] drm_test_cmdline_res_bpp
[20:48:39] [PASSED] drm_test_cmdline_res_refresh
[20:48:39] [PASSED] drm_test_cmdline_res_bpp_refresh
[20:48:39] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[20:48:39] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[20:48:39] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[20:48:39] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[20:48:39] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[20:48:39] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[20:48:39] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[20:48:39] [PASSED] drm_test_cmdline_res_margins_force_on
[20:48:39] [PASSED] drm_test_cmdline_res_vesa_margins
[20:48:39] [PASSED] drm_test_cmdline_name
[20:48:39] [PASSED] drm_test_cmdline_name_bpp
[20:48:39] [PASSED] drm_test_cmdline_name_option
[20:48:39] [PASSED] drm_test_cmdline_name_bpp_option
[20:48:39] [PASSED] drm_test_cmdline_rotate_0
[20:48:39] [PASSED] drm_test_cmdline_rotate_90
[20:48:39] [PASSED] drm_test_cmdline_rotate_180
[20:48:39] [PASSED] drm_test_cmdline_rotate_270
[20:48:39] [PASSED] drm_test_cmdline_hmirror
[20:48:39] [PASSED] drm_test_cmdline_vmirror
[20:48:39] [PASSED] drm_test_cmdline_margin_options
[20:48:39] [PASSED] drm_test_cmdline_multiple_options
[20:48:39] [PASSED] drm_test_cmdline_bpp_extra_and_option
[20:48:39] [PASSED] drm_test_cmdline_extra_and_option
[20:48:39] [PASSED] drm_test_cmdline_freestanding_options
[20:48:39] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[20:48:39] [PASSED] drm_test_cmdline_panel_orientation
[20:48:39] ================ drm_test_cmdline_invalid =================
[20:48:39] [PASSED] margin_only
[20:48:39] [PASSED] interlace_only
[20:48:39] [PASSED] res_missing_x
[20:48:39] [PASSED] res_missing_y
[20:48:39] [PASSED] res_bad_y
[20:48:39] [PASSED] res_missing_y_bpp
[20:48:39] [PASSED] res_bad_bpp
[20:48:39] [PASSED] res_bad_refresh
[20:48:39] [PASSED] res_bpp_refresh_force_on_off
[20:48:39] [PASSED] res_invalid_mode
[20:48:39] [PASSED] res_bpp_wrong_place_mode
[20:48:39] [PASSED] name_bpp_refresh
[20:48:39] [PASSED] name_refresh
[20:48:39] [PASSED] name_refresh_wrong_mode
[20:48:39] [PASSED] name_refresh_invalid_mode
[20:48:39] [PASSED] rotate_multiple
[20:48:39] [PASSED] rotate_invalid_val
[20:48:39] [PASSED] rotate_truncated
[20:48:39] [PASSED] invalid_option
[20:48:39] [PASSED] invalid_tv_option
[20:48:39] [PASSED] truncated_tv_option
[20:48:39] ============ [PASSED] drm_test_cmdline_invalid =============
[20:48:39] =============== drm_test_cmdline_tv_options ===============
[20:48:39] [PASSED] NTSC
[20:48:39] [PASSED] NTSC_443
[20:48:39] [PASSED] NTSC_J
[20:48:39] [PASSED] PAL
[20:48:39] [PASSED] PAL_M
[20:48:39] [PASSED] PAL_N
[20:48:39] [PASSED] SECAM
[20:48:39] [PASSED] MONO_525
[20:48:39] [PASSED] MONO_625
[20:48:39] =========== [PASSED] drm_test_cmdline_tv_options ===========
[20:48:39] =============== [PASSED] drm_cmdline_parser ================
[20:48:39] ========== drmm_connector_hdmi_init (20 subtests) ==========
[20:48:39] [PASSED] drm_test_connector_hdmi_init_valid
[20:48:39] [PASSED] drm_test_connector_hdmi_init_bpc_8
[20:48:39] [PASSED] drm_test_connector_hdmi_init_bpc_10
[20:48:39] [PASSED] drm_test_connector_hdmi_init_bpc_12
[20:48:39] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[20:48:39] [PASSED] drm_test_connector_hdmi_init_bpc_null
[20:48:39] [PASSED] drm_test_connector_hdmi_init_formats_empty
[20:48:39] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[20:48:39] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[20:48:39] [PASSED] supported_formats=0x9 yuv420_allowed=1
[20:48:39] [PASSED] supported_formats=0x9 yuv420_allowed=0
[20:48:39] [PASSED] supported_formats=0x3 yuv420_allowed=1
[20:48:39] [PASSED] supported_formats=0x3 yuv420_allowed=0
[20:48:39] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[20:48:39] [PASSED] drm_test_connector_hdmi_init_null_ddc
[20:48:39] [PASSED] drm_test_connector_hdmi_init_null_product
[20:48:39] [PASSED] drm_test_connector_hdmi_init_null_vendor
[20:48:39] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[20:48:39] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[20:48:39] [PASSED] drm_test_connector_hdmi_init_product_valid
[20:48:39] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[20:48:39] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[20:48:39] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[20:48:39] ========= drm_test_connector_hdmi_init_type_valid =========
[20:48:39] [PASSED] HDMI-A
[20:48:39] [PASSED] HDMI-B
[20:48:39] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[20:48:39] ======== drm_test_connector_hdmi_init_type_invalid ========
[20:48:39] [PASSED] Unknown
[20:48:39] [PASSED] VGA
[20:48:39] [PASSED] DVI-I
[20:48:39] [PASSED] DVI-D
[20:48:39] [PASSED] DVI-A
[20:48:39] [PASSED] Composite
[20:48:39] [PASSED] SVIDEO
[20:48:39] [PASSED] LVDS
[20:48:39] [PASSED] Component
[20:48:39] [PASSED] DIN
[20:48:39] [PASSED] DP
[20:48:39] [PASSED] TV
[20:48:39] [PASSED] eDP
[20:48:39] [PASSED] Virtual
[20:48:39] [PASSED] DSI
[20:48:39] [PASSED] DPI
[20:48:39] [PASSED] Writeback
[20:48:39] [PASSED] SPI
[20:48:39] [PASSED] USB
[20:48:39] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[20:48:39] ============ [PASSED] drmm_connector_hdmi_init =============
[20:48:39] ============= drmm_connector_init (3 subtests) =============
[20:48:39] [PASSED] drm_test_drmm_connector_init
[20:48:39] [PASSED] drm_test_drmm_connector_init_null_ddc
[20:48:39] ========= drm_test_drmm_connector_init_type_valid =========
[20:48:39] [PASSED] Unknown
[20:48:39] [PASSED] VGA
[20:48:39] [PASSED] DVI-I
[20:48:39] [PASSED] DVI-D
[20:48:39] [PASSED] DVI-A
[20:48:39] [PASSED] Composite
[20:48:39] [PASSED] SVIDEO
[20:48:39] [PASSED] LVDS
[20:48:39] [PASSED] Component
[20:48:39] [PASSED] DIN
[20:48:39] [PASSED] DP
[20:48:39] [PASSED] HDMI-A
[20:48:39] [PASSED] HDMI-B
[20:48:39] [PASSED] TV
[20:48:39] [PASSED] eDP
[20:48:39] [PASSED] Virtual
[20:48:39] [PASSED] DSI
[20:48:39] [PASSED] DPI
[20:48:39] [PASSED] Writeback
[20:48:39] [PASSED] SPI
[20:48:39] [PASSED] USB
[20:48:39] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[20:48:39] =============== [PASSED] drmm_connector_init ===============
[20:48:39] ========= drm_connector_dynamic_init (6 subtests) ==========
[20:48:39] [PASSED] drm_test_drm_connector_dynamic_init
[20:48:39] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[20:48:39] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[20:48:39] [PASSED] drm_test_drm_connector_dynamic_init_properties
[20:48:39] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[20:48:39] [PASSED] Unknown
[20:48:39] [PASSED] VGA
[20:48:39] [PASSED] DVI-I
[20:48:39] [PASSED] DVI-D
[20:48:39] [PASSED] DVI-A
[20:48:39] [PASSED] Composite
[20:48:39] [PASSED] SVIDEO
[20:48:39] [PASSED] LVDS
[20:48:39] [PASSED] Component
[20:48:39] [PASSED] DIN
[20:48:39] [PASSED] DP
[20:48:39] [PASSED] HDMI-A
[20:48:39] [PASSED] HDMI-B
[20:48:39] [PASSED] TV
[20:48:39] [PASSED] eDP
[20:48:39] [PASSED] Virtual
[20:48:39] [PASSED] DSI
[20:48:39] [PASSED] DPI
[20:48:39] [PASSED] Writeback
[20:48:39] [PASSED] SPI
[20:48:39] [PASSED] USB
[20:48:39] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[20:48:39] ======== drm_test_drm_connector_dynamic_init_name =========
[20:48:39] [PASSED] Unknown
[20:48:39] [PASSED] VGA
[20:48:39] [PASSED] DVI-I
[20:48:39] [PASSED] DVI-D
[20:48:39] [PASSED] DVI-A
[20:48:39] [PASSED] Composite
[20:48:39] [PASSED] SVIDEO
[20:48:39] [PASSED] LVDS
[20:48:39] [PASSED] Component
[20:48:39] [PASSED] DIN
[20:48:39] [PASSED] DP
[20:48:39] [PASSED] HDMI-A
[20:48:39] [PASSED] HDMI-B
[20:48:39] [PASSED] TV
[20:48:39] [PASSED] eDP
[20:48:39] [PASSED] Virtual
[20:48:39] [PASSED] DSI
[20:48:39] [PASSED] DPI
[20:48:39] [PASSED] Writeback
[20:48:39] [PASSED] SPI
[20:48:39] [PASSED] USB
[20:48:39] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[20:48:39] =========== [PASSED] drm_connector_dynamic_init ============
[20:48:39] ==== drm_connector_dynamic_register_early (4 subtests) =====
[20:48:39] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[20:48:39] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[20:48:39] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[20:48:39] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[20:48:39] ====== [PASSED] drm_connector_dynamic_register_early =======
[20:48:39] ======= drm_connector_dynamic_register (7 subtests) ========
[20:48:39] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[20:48:39] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[20:48:39] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[20:48:39] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[20:48:39] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[20:48:39] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[20:48:39] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[20:48:39] ========= [PASSED] drm_connector_dynamic_register ==========
[20:48:39] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[20:48:39] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[20:48:39] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[20:48:39] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[20:48:39] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[20:48:39] ========== drm_test_get_tv_mode_from_name_valid ===========
[20:48:39] [PASSED] NTSC
[20:48:39] [PASSED] NTSC-443
[20:48:39] [PASSED] NTSC-J
[20:48:39] [PASSED] PAL
[20:48:39] [PASSED] PAL-M
[20:48:39] [PASSED] PAL-N
[20:48:39] [PASSED] SECAM
[20:48:39] [PASSED] Mono
[20:48:39] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[20:48:39] [PASSED] drm_test_get_tv_mode_from_name_truncated
[20:48:39] ============ [PASSED] drm_get_tv_mode_from_name ============
[20:48:39] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[20:48:39] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[20:48:39] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[20:48:39] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[20:48:39] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[20:48:39] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[20:48:39] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[20:48:39] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[20:48:39] [PASSED] VIC 96
[20:48:39] [PASSED] VIC 97
[20:48:39] [PASSED] VIC 101
[20:48:39] [PASSED] VIC 102
[20:48:39] [PASSED] VIC 106
[20:48:39] [PASSED] VIC 107
[20:48:39] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[20:48:39] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[20:48:39] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[20:48:39] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[20:48:39] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[20:48:39] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[20:48:39] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[20:48:39] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[20:48:39] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[20:48:39] [PASSED] Automatic
[20:48:39] [PASSED] Full
[20:48:39] [PASSED] Limited 16:235
[20:48:39] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[20:48:39] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[20:48:39] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[20:48:39] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[20:48:39] === drm_test_drm_hdmi_connector_get_output_format_name ====
[20:48:39] [PASSED] RGB
[20:48:39] [PASSED] YUV 4:2:0
[20:48:39] [PASSED] YUV 4:2:2
[20:48:39] [PASSED] YUV 4:4:4
[20:48:39] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[20:48:39] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[20:48:39] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[20:48:39] ============= drm_damage_helper (21 subtests) ==============
[20:48:39] [PASSED] drm_test_damage_iter_no_damage
[20:48:39] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[20:48:39] [PASSED] drm_test_damage_iter_no_damage_src_moved
[20:48:39] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[20:48:39] [PASSED] drm_test_damage_iter_no_damage_not_visible
[20:48:39] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[20:48:39] [PASSED] drm_test_damage_iter_no_damage_no_fb
[20:48:39] [PASSED] drm_test_damage_iter_simple_damage
[20:48:39] [PASSED] drm_test_damage_iter_single_damage
[20:48:39] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[20:48:39] [PASSED] drm_test_damage_iter_single_damage_outside_src
[20:48:39] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[20:48:39] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[20:48:39] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[20:48:39] [PASSED] drm_test_damage_iter_single_damage_src_moved
[20:48:39] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[20:48:39] [PASSED] drm_test_damage_iter_damage
[20:48:39] [PASSED] drm_test_damage_iter_damage_one_intersect
[20:48:39] [PASSED] drm_test_damage_iter_damage_one_outside
[20:48:39] [PASSED] drm_test_damage_iter_damage_src_moved
[20:48:39] [PASSED] drm_test_damage_iter_damage_not_visible
[20:48:39] ================ [PASSED] drm_damage_helper ================
[20:48:39] ============== drm_dp_mst_helper (3 subtests) ==============
[20:48:39] ============== drm_test_dp_mst_calc_pbn_mode ==============
[20:48:39] [PASSED] Clock 154000 BPP 30 DSC disabled
[20:48:39] [PASSED] Clock 234000 BPP 30 DSC disabled
[20:48:39] [PASSED] Clock 297000 BPP 24 DSC disabled
[20:48:39] [PASSED] Clock 332880 BPP 24 DSC enabled
[20:48:39] [PASSED] Clock 324540 BPP 24 DSC enabled
[20:48:39] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[20:48:39] ============== drm_test_dp_mst_calc_pbn_div ===============
[20:48:39] [PASSED] Link rate 2000000 lane count 4
[20:48:39] [PASSED] Link rate 2000000 lane count 2
[20:48:39] [PASSED] Link rate 2000000 lane count 1
[20:48:39] [PASSED] Link rate 1350000 lane count 4
[20:48:39] [PASSED] Link rate 1350000 lane count 2
[20:48:39] [PASSED] Link rate 1350000 lane count 1
[20:48:39] [PASSED] Link rate 1000000 lane count 4
[20:48:39] [PASSED] Link rate 1000000 lane count 2
[20:48:39] [PASSED] Link rate 1000000 lane count 1
[20:48:39] [PASSED] Link rate 810000 lane count 4
[20:48:39] [PASSED] Link rate 810000 lane count 2
[20:48:39] [PASSED] Link rate 810000 lane count 1
[20:48:39] [PASSED] Link rate 540000 lane count 4
[20:48:39] [PASSED] Link rate 540000 lane count 2
[20:48:39] [PASSED] Link rate 540000 lane count 1
[20:48:39] [PASSED] Link rate 270000 lane count 4
[20:48:39] [PASSED] Link rate 270000 lane count 2
[20:48:39] [PASSED] Link rate 270000 lane count 1
[20:48:39] [PASSED] Link rate 162000 lane count 4
[20:48:39] [PASSED] Link rate 162000 lane count 2
[20:48:39] [PASSED] Link rate 162000 lane count 1
[20:48:39] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[20:48:39] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[20:48:39] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[20:48:39] [PASSED] DP_POWER_UP_PHY with port number
[20:48:39] [PASSED] DP_POWER_DOWN_PHY with port number
[20:48:39] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[20:48:39] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[20:48:39] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[20:48:39] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[20:48:39] [PASSED] DP_QUERY_PAYLOAD with port number
[20:48:39] [PASSED] DP_QUERY_PAYLOAD with VCPI
[20:48:39] [PASSED] DP_REMOTE_DPCD_READ with port number
[20:48:39] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[20:48:39] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[20:48:39] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[20:48:39] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[20:48:39] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[20:48:39] [PASSED] DP_REMOTE_I2C_READ with port number
[20:48:39] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[20:48:39] [PASSED] DP_REMOTE_I2C_READ with transactions array
[20:48:39] [PASSED] DP_REMOTE_I2C_WRITE with port number
[20:48:39] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[20:48:39] [PASSED] DP_REMOTE_I2C_WRITE with data array
[20:48:39] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[20:48:39] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[20:48:39] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[20:48:39] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[20:48:39] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[20:48:39] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[20:48:39] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[20:48:39] ================ [PASSED] drm_dp_mst_helper ================
[20:48:39] ================== drm_exec (7 subtests) ===================
[20:48:39] [PASSED] sanitycheck
[20:48:39] [PASSED] test_lock
[20:48:39] [PASSED] test_lock_unlock
[20:48:39] [PASSED] test_duplicates
[20:48:39] [PASSED] test_prepare
[20:48:39] [PASSED] test_prepare_array
[20:48:39] [PASSED] test_multiple_loops
[20:48:39] ==================== [PASSED] drm_exec =====================
[20:48:39] =========== drm_format_helper_test (17 subtests) ===========
[20:48:39] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[20:48:39] [PASSED] single_pixel_source_buffer
[20:48:39] [PASSED] single_pixel_clip_rectangle
[20:48:39] [PASSED] well_known_colors
[20:48:39] [PASSED] destination_pitch
[20:48:39] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[20:48:39] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[20:48:39] [PASSED] single_pixel_source_buffer
[20:48:39] [PASSED] single_pixel_clip_rectangle
[20:48:39] [PASSED] well_known_colors
[20:48:39] [PASSED] destination_pitch
[20:48:39] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[20:48:39] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[20:48:39] [PASSED] single_pixel_source_buffer
[20:48:39] [PASSED] single_pixel_clip_rectangle
[20:48:39] [PASSED] well_known_colors
[20:48:39] [PASSED] destination_pitch
[20:48:39] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[20:48:39] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[20:48:39] [PASSED] single_pixel_source_buffer
[20:48:39] [PASSED] single_pixel_clip_rectangle
[20:48:39] [PASSED] well_known_colors
[20:48:39] [PASSED] destination_pitch
[20:48:39] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[20:48:39] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[20:48:39] [PASSED] single_pixel_source_buffer
[20:48:39] [PASSED] single_pixel_clip_rectangle
[20:48:39] [PASSED] well_known_colors
[20:48:39] [PASSED] destination_pitch
[20:48:39] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[20:48:39] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[20:48:39] [PASSED] single_pixel_source_buffer
[20:48:39] [PASSED] single_pixel_clip_rectangle
[20:48:39] [PASSED] well_known_colors
[20:48:39] [PASSED] destination_pitch
[20:48:39] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[20:48:39] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[20:48:39] [PASSED] single_pixel_source_buffer
[20:48:39] [PASSED] single_pixel_clip_rectangle
[20:48:39] [PASSED] well_known_colors
[20:48:39] [PASSED] destination_pitch
[20:48:39] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[20:48:39] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[20:48:39] [PASSED] single_pixel_source_buffer
[20:48:39] [PASSED] single_pixel_clip_rectangle
[20:48:39] [PASSED] well_known_colors
[20:48:39] [PASSED] destination_pitch
[20:48:39] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[20:48:39] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[20:48:39] [PASSED] single_pixel_source_buffer
[20:48:39] [PASSED] single_pixel_clip_rectangle
[20:48:39] [PASSED] well_known_colors
[20:48:39] [PASSED] destination_pitch
[20:48:39] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[20:48:39] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[20:48:39] [PASSED] single_pixel_source_buffer
[20:48:39] [PASSED] single_pixel_clip_rectangle
[20:48:39] [PASSED] well_known_colors
[20:48:39] [PASSED] destination_pitch
[20:48:39] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[20:48:39] ============== drm_test_fb_xrgb8888_to_mono ===============
[20:48:39] [PASSED] single_pixel_source_buffer
[20:48:39] [PASSED] single_pixel_clip_rectangle
[20:48:39] [PASSED] well_known_colors
[20:48:39] [PASSED] destination_pitch
[20:48:39] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[20:48:39] ==================== drm_test_fb_swab =====================
[20:48:39] [PASSED] single_pixel_source_buffer
[20:48:39] [PASSED] single_pixel_clip_rectangle
[20:48:39] [PASSED] well_known_colors
[20:48:39] [PASSED] destination_pitch
[20:48:39] ================ [PASSED] drm_test_fb_swab =================
[20:48:39] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[20:48:39] [PASSED] single_pixel_source_buffer
[20:48:39] [PASSED] single_pixel_clip_rectangle
[20:48:39] [PASSED] well_known_colors
[20:48:39] [PASSED] destination_pitch
[20:48:39] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[20:48:39] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[20:48:39] [PASSED] single_pixel_source_buffer
[20:48:39] [PASSED] single_pixel_clip_rectangle
[20:48:39] [PASSED] well_known_colors
[20:48:39] [PASSED] destination_pitch
[20:48:39] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[20:48:39] ================= drm_test_fb_clip_offset =================
[20:48:39] [PASSED] pass through
[20:48:39] [PASSED] horizontal offset
[20:48:39] [PASSED] vertical offset
[20:48:39] [PASSED] horizontal and vertical offset
[20:48:39] [PASSED] horizontal offset (custom pitch)
[20:48:39] [PASSED] vertical offset (custom pitch)
[20:48:39] [PASSED] horizontal and vertical offset (custom pitch)
[20:48:39] ============= [PASSED] drm_test_fb_clip_offset =============
[20:48:39] ============== drm_test_fb_build_fourcc_list ==============
[20:48:39] [PASSED] no native formats
[20:48:39] [PASSED] XRGB8888 as native format
[20:48:39] [PASSED] remove duplicates
[20:48:39] [PASSED] convert alpha formats
[20:48:39] [PASSED] random formats
[20:48:39] ========== [PASSED] drm_test_fb_build_fourcc_list ==========
[20:48:39] =================== drm_test_fb_memcpy ====================
[20:48:39] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[20:48:39] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[20:48:39] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[20:48:39] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[20:48:39] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[20:48:39] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[20:48:39] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[20:48:39] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[20:48:39] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[20:48:39] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[20:48:39] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[20:48:39] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[20:48:39] =============== [PASSED] drm_test_fb_memcpy ================
[20:48:39] ============= [PASSED] drm_format_helper_test ==============
[20:48:39] ================= drm_format (18 subtests) =================
[20:48:39] [PASSED] drm_test_format_block_width_invalid
[20:48:39] [PASSED] drm_test_format_block_width_one_plane
[20:48:39] [PASSED] drm_test_format_block_width_two_plane
[20:48:39] [PASSED] drm_test_format_block_width_three_plane
[20:48:39] [PASSED] drm_test_format_block_width_tiled
[20:48:39] [PASSED] drm_test_format_block_height_invalid
[20:48:39] [PASSED] drm_test_format_block_height_one_plane
[20:48:39] [PASSED] drm_test_format_block_height_two_plane
[20:48:39] [PASSED] drm_test_format_block_height_three_plane
[20:48:39] [PASSED] drm_test_format_block_height_tiled
[20:48:39] [PASSED] drm_test_format_min_pitch_invalid
[20:48:39] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[20:48:39] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[20:48:39] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[20:48:39] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[20:48:39] [PASSED] drm_test_format_min_pitch_two_plane
[20:48:39] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[20:48:39] [PASSED] drm_test_format_min_pitch_tiled
[20:48:39] =================== [PASSED] drm_format ====================
[20:48:39] ============== drm_framebuffer (10 subtests) ===============
[20:48:39] ========== drm_test_framebuffer_check_src_coords ==========
[20:48:39] [PASSED] Success: source fits into fb
[20:48:39] [PASSED] Fail: overflowing fb with x-axis coordinate
[20:48:39] [PASSED] Fail: overflowing fb with y-axis coordinate
[20:48:39] [PASSED] Fail: overflowing fb with source width
[20:48:39] [PASSED] Fail: overflowing fb with source height
[20:48:39] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[20:48:39] [PASSED] drm_test_framebuffer_cleanup
[20:48:39] =============== drm_test_framebuffer_create ===============
[20:48:39] [PASSED] ABGR8888 normal sizes
[20:48:39] [PASSED] ABGR8888 max sizes
[20:48:39] [PASSED] ABGR8888 pitch greater than min required
[20:48:39] [PASSED] ABGR8888 pitch less than min required
[20:48:39] [PASSED] ABGR8888 Invalid width
[20:48:39] [PASSED] ABGR8888 Invalid buffer handle
[20:48:39] [PASSED] No pixel format
[20:48:39] [PASSED] ABGR8888 Width 0
[20:48:39] [PASSED] ABGR8888 Height 0
[20:48:39] [PASSED] ABGR8888 Out of bound height * pitch combination
[20:48:39] [PASSED] ABGR8888 Large buffer offset
[20:48:39] [PASSED] ABGR8888 Buffer offset for inexistent plane
[20:48:39] [PASSED] ABGR8888 Invalid flag
[20:48:39] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[20:48:39] [PASSED] ABGR8888 Valid buffer modifier
[20:48:39] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[20:48:39] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[20:48:39] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[20:48:39] [PASSED] NV12 Normal sizes
[20:48:39] [PASSED] NV12 Max sizes
[20:48:39] [PASSED] NV12 Invalid pitch
[20:48:39] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[20:48:39] [PASSED] NV12 different modifier per-plane
[20:48:39] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[20:48:39] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[20:48:39] [PASSED] NV12 Modifier for inexistent plane
[20:48:39] [PASSED] NV12 Handle for inexistent plane
[20:48:39] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[20:48:39] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[20:48:39] [PASSED] YVU420 Normal sizes
[20:48:39] [PASSED] YVU420 Max sizes
[20:48:39] [PASSED] YVU420 Invalid pitch
[20:48:39] [PASSED] YVU420 Different pitches
[20:48:39] [PASSED] YVU420 Different buffer offsets/pitches
[20:48:39] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[20:48:39] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[20:48:39] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[20:48:39] [PASSED] YVU420 Valid modifier
[20:48:39] [PASSED] YVU420 Different modifiers per plane
[20:48:39] [PASSED] YVU420 Modifier for inexistent plane
[20:48:39] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[20:48:39] [PASSED] X0L2 Normal sizes
[20:48:39] [PASSED] X0L2 Max sizes
[20:48:39] [PASSED] X0L2 Invalid pitch
[20:48:39] [PASSED] X0L2 Pitch greater than minimum required
[20:48:39] [PASSED] X0L2 Handle for inexistent plane
[20:48:39] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[20:48:39] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[20:48:39] [PASSED] X0L2 Valid modifier
[20:48:39] [PASSED] X0L2 Modifier for inexistent plane
[20:48:39] =========== [PASSED] drm_test_framebuffer_create ===========
[20:48:39] [PASSED] drm_test_framebuffer_free
[20:48:39] [PASSED] drm_test_framebuffer_init
[20:48:39] [PASSED] drm_test_framebuffer_init_bad_format
[20:48:39] [PASSED] drm_test_framebuffer_init_dev_mismatch
[20:48:39] [PASSED] drm_test_framebuffer_lookup
[20:48:39] [PASSED] drm_test_framebuffer_lookup_inexistent
[20:48:39] [PASSED] drm_test_framebuffer_modifiers_not_supported
[20:48:39] ================= [PASSED] drm_framebuffer =================
[20:48:39] ================ drm_gem_shmem (8 subtests) ================
[20:48:39] [PASSED] drm_gem_shmem_test_obj_create
[20:48:39] [PASSED] drm_gem_shmem_test_obj_create_private
[20:48:39] [PASSED] drm_gem_shmem_test_pin_pages
[20:48:39] [PASSED] drm_gem_shmem_test_vmap
[20:48:39] [PASSED] drm_gem_shmem_test_get_pages_sgt
[20:48:39] [PASSED] drm_gem_shmem_test_get_sg_table
[20:48:39] [PASSED] drm_gem_shmem_test_madvise
[20:48:39] [PASSED] drm_gem_shmem_test_purge
[20:48:39] ================== [PASSED] drm_gem_shmem ==================
[20:48:39] === drm_atomic_helper_connector_hdmi_check (23 subtests) ===
[20:48:39] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[20:48:39] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[20:48:39] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[20:48:39] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[20:48:39] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[20:48:39] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[20:48:39] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[20:48:39] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[20:48:39] [PASSED] drm_test_check_disable_connector
[20:48:39] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[20:48:39] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback
[20:48:39] [PASSED] drm_test_check_max_tmds_rate_format_fallback
[20:48:39] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[20:48:39] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[20:48:39] [PASSED] drm_test_check_output_bpc_dvi
[20:48:39] [PASSED] drm_test_check_output_bpc_format_vic_1
[20:48:39] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[20:48:39] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[20:48:39] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[20:48:39] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[20:48:39] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[20:48:39] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[20:48:39] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[20:48:39] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[20:48:39] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[20:48:39] [PASSED] drm_test_check_broadcast_rgb_value
[20:48:39] [PASSED] drm_test_check_bpc_8_value
[20:48:39] [PASSED] drm_test_check_bpc_10_value
[20:48:39] [PASSED] drm_test_check_bpc_12_value
[20:48:39] [PASSED] drm_test_check_format_value
[20:48:39] [PASSED] drm_test_check_tmds_char_value
[20:48:39] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[20:48:39] = drm_atomic_helper_connector_hdmi_mode_valid (4 subtests) =
[20:48:39] [PASSED] drm_test_check_mode_valid
[20:48:39] [PASSED] drm_test_check_mode_valid_reject
[20:48:39] [PASSED] drm_test_check_mode_valid_reject_rate
[20:48:39] [PASSED] drm_test_check_mode_valid_reject_max_clock
[20:48:39] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[20:48:39] ================= drm_managed (2 subtests) =================
[20:48:39] [PASSED] drm_test_managed_release_action
[20:48:39] [PASSED] drm_test_managed_run_action
[20:48:39] =================== [PASSED] drm_managed ===================
[20:48:39] =================== drm_mm (6 subtests) ====================
[20:48:39] [PASSED] drm_test_mm_init
[20:48:39] [PASSED] drm_test_mm_debug
[20:48:39] [PASSED] drm_test_mm_align32
[20:48:39] [PASSED] drm_test_mm_align64
[20:48:39] [PASSED] drm_test_mm_lowest
[20:48:39] [PASSED] drm_test_mm_highest
[20:48:39] ===================== [PASSED] drm_mm ======================
[20:48:39] ============= drm_modes_analog_tv (5 subtests) =============
[20:48:39] [PASSED] drm_test_modes_analog_tv_mono_576i
[20:48:39] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[20:48:39] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[20:48:39] [PASSED] drm_test_modes_analog_tv_pal_576i
[20:48:39] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[20:48:39] =============== [PASSED] drm_modes_analog_tv ===============
[20:48:39] ============== drm_plane_helper (2 subtests) ===============
[20:48:39] =============== drm_test_check_plane_state ================
[20:48:39] [PASSED] clipping_simple
[20:48:39] [PASSED] clipping_rotate_reflect
[20:48:39] [PASSED] positioning_simple
[20:48:39] [PASSED] upscaling
[20:48:39] [PASSED] downscaling
[20:48:39] [PASSED] rounding1
[20:48:39] [PASSED] rounding2
[20:48:39] [PASSED] rounding3
[20:48:39] [PASSED] rounding4
[20:48:39] =========== [PASSED] drm_test_check_plane_state ============
[20:48:39] =========== drm_test_check_invalid_plane_state ============
[20:48:39] [PASSED] positioning_invalid
[20:48:39] [PASSED] upscaling_invalid
[20:48:39] [PASSED] downscaling_invalid
[20:48:39] ======= [PASSED] drm_test_check_invalid_plane_state ========
[20:48:39] ================ [PASSED] drm_plane_helper =================
[20:48:39] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[20:48:39] ====== drm_test_connector_helper_tv_get_modes_check =======
[20:48:39] [PASSED] None
[20:48:39] [PASSED] PAL
[20:48:39] [PASSED] NTSC
[20:48:39] [PASSED] Both, NTSC Default
[20:48:39] [PASSED] Both, PAL Default
[20:48:39] [PASSED] Both, NTSC Default, with PAL on command-line
[20:48:39] [PASSED] Both, PAL Default, with NTSC on command-line
[20:48:39] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[20:48:39] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[20:48:39] ================== drm_rect (9 subtests) ===================
[20:48:39] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[20:48:39] [PASSED] drm_test_rect_clip_scaled_not_clipped
[20:48:39] [PASSED] drm_test_rect_clip_scaled_clipped
[20:48:39] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[20:48:39] ================= drm_test_rect_intersect =================
[20:48:39] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[20:48:39] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[20:48:39] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[20:48:39] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[20:48:39] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[20:48:39] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[20:48:39] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[20:48:39] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[20:48:39] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[20:48:39] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[20:48:39] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[20:48:39] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[20:48:39] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[20:48:39] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[20:48:39] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[20:48:39] ============= [PASSED] drm_test_rect_intersect =============
[20:48:39] ================ drm_test_rect_calc_hscale ================
[20:48:39] [PASSED] normal use
[20:48:39] [PASSED] out of max range
[20:48:39] [PASSED] out of min range
[20:48:39] [PASSED] zero dst
[20:48:39] [PASSED] negative src
[20:48:39] [PASSED] negative dst
[20:48:39] ============ [PASSED] drm_test_rect_calc_hscale ============
[20:48:39] ================ drm_test_rect_calc_vscale ================
[20:48:39] [PASSED] normal use
[20:48:39] [PASSED] out of max range
[20:48:39] [PASSED] out of min range
[20:48:39] [PASSED] zero dst
[20:48:39] [PASSED] negative src
[20:48:39] [PASSED] negative dst
[20:48:39] ============ [PASSED] drm_test_rect_calc_vscale ============
[20:48:39] ================== drm_test_rect_rotate ===================
[20:48:39] [PASSED] reflect-x
[20:48:39] [PASSED] reflect-y
[20:48:39] [PASSED] rotate-0
[20:48:39] [PASSED] rotate-90
[20:48:39] [PASSED] rotate-180
[20:48:39] [PASSED] rotate-270
stty: 'standard input': Inappropriate ioctl for device
[20:48:39] ============== [PASSED] drm_test_rect_rotate ===============
[20:48:39] ================ drm_test_rect_rotate_inv =================
[20:48:39] [PASSED] reflect-x
[20:48:39] [PASSED] reflect-y
[20:48:39] [PASSED] rotate-0
[20:48:39] [PASSED] rotate-90
[20:48:39] [PASSED] rotate-180
[20:48:39] [PASSED] rotate-270
[20:48:39] ============ [PASSED] drm_test_rect_rotate_inv =============
[20:48:39] ==================== [PASSED] drm_rect =====================
[20:48:39] ============================================================
[20:48:39] Testing complete. Ran 598 tests: passed: 598
[20:48:39] Elapsed time: 35.117s total, 2.612s configuring, 32.288s building, 0.183s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[20:48:39] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[20:48:40] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json ARCH=um O=.kunit --jobs=48
[20:48:49] Starting KUnit Kernel (1/1)...
[20:48:49] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[20:48:49] ================= ttm_device (5 subtests) ==================
[20:48:49] [PASSED] ttm_device_init_basic
[20:48:49] [PASSED] ttm_device_init_multiple
[20:48:49] [PASSED] ttm_device_fini_basic
[20:48:49] [PASSED] ttm_device_init_no_vma_man
[20:48:49] ================== ttm_device_init_pools ==================
[20:48:49] [PASSED] No DMA allocations, no DMA32 required
[20:48:49] [PASSED] DMA allocations, DMA32 required
[20:48:49] [PASSED] No DMA allocations, DMA32 required
[20:48:49] [PASSED] DMA allocations, no DMA32 required
[20:48:49] ============== [PASSED] ttm_device_init_pools ==============
[20:48:49] =================== [PASSED] ttm_device ====================
[20:48:49] ================== ttm_pool (8 subtests) ===================
[20:48:49] ================== ttm_pool_alloc_basic ===================
[20:48:49] [PASSED] One page
[20:48:49] [PASSED] More than one page
[20:48:49] [PASSED] Above the allocation limit
[20:48:49] [PASSED] One page, with coherent DMA mappings enabled
[20:48:49] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[20:48:49] ============== [PASSED] ttm_pool_alloc_basic ===============
[20:48:49] ============== ttm_pool_alloc_basic_dma_addr ==============
[20:48:49] [PASSED] One page
[20:48:49] [PASSED] More than one page
[20:48:49] [PASSED] Above the allocation limit
[20:48:49] [PASSED] One page, with coherent DMA mappings enabled
[20:48:49] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[20:48:49] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[20:48:49] [PASSED] ttm_pool_alloc_order_caching_match
[20:48:49] [PASSED] ttm_pool_alloc_caching_mismatch
[20:48:49] [PASSED] ttm_pool_alloc_order_mismatch
[20:48:49] [PASSED] ttm_pool_free_dma_alloc
[20:48:49] [PASSED] ttm_pool_free_no_dma_alloc
[20:48:49] [PASSED] ttm_pool_fini_basic
[20:48:49] ==================== [PASSED] ttm_pool =====================
[20:48:49] ================ ttm_resource (8 subtests) =================
[20:48:49] ================= ttm_resource_init_basic =================
[20:48:49] [PASSED] Init resource in TTM_PL_SYSTEM
[20:48:49] [PASSED] Init resource in TTM_PL_VRAM
[20:48:49] [PASSED] Init resource in a private placement
[20:48:49] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[20:48:49] ============= [PASSED] ttm_resource_init_basic =============
[20:48:49] [PASSED] ttm_resource_init_pinned
[20:48:49] [PASSED] ttm_resource_fini_basic
[20:48:49] [PASSED] ttm_resource_manager_init_basic
[20:48:49] [PASSED] ttm_resource_manager_usage_basic
[20:48:49] [PASSED] ttm_resource_manager_set_used_basic
[20:48:49] [PASSED] ttm_sys_man_alloc_basic
[20:48:49] [PASSED] ttm_sys_man_free_basic
[20:48:49] ================== [PASSED] ttm_resource ===================
[20:48:49] =================== ttm_tt (15 subtests) ===================
[20:48:49] ==================== ttm_tt_init_basic ====================
[20:48:49] [PASSED] Page-aligned size
[20:48:49] [PASSED] Extra pages requested
[20:48:49] ================ [PASSED] ttm_tt_init_basic ================
[20:48:49] [PASSED] ttm_tt_init_misaligned
[20:48:49] [PASSED] ttm_tt_fini_basic
[20:48:49] [PASSED] ttm_tt_fini_sg
[20:48:49] [PASSED] ttm_tt_fini_shmem
[20:48:49] [PASSED] ttm_tt_create_basic
[20:48:49] [PASSED] ttm_tt_create_invalid_bo_type
[20:48:49] [PASSED] ttm_tt_create_ttm_exists
[20:48:49] [PASSED] ttm_tt_create_failed
[20:48:49] [PASSED] ttm_tt_destroy_basic
[20:48:49] [PASSED] ttm_tt_populate_null_ttm
[20:48:49] [PASSED] ttm_tt_populate_populated_ttm
[20:48:49] [PASSED] ttm_tt_unpopulate_basic
[20:48:49] [PASSED] ttm_tt_unpopulate_empty_ttm
[20:48:49] [PASSED] ttm_tt_swapin_basic
[20:48:49] ===================== [PASSED] ttm_tt ======================
[20:48:49] =================== ttm_bo (14 subtests) ===================
[20:48:49] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[20:48:49] [PASSED] Cannot be interrupted and sleeps
[20:48:49] [PASSED] Cannot be interrupted, locks straight away
[20:48:49] [PASSED] Can be interrupted, sleeps
[20:48:49] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[20:48:49] [PASSED] ttm_bo_reserve_locked_no_sleep
[20:48:49] [PASSED] ttm_bo_reserve_no_wait_ticket
[20:48:49] [PASSED] ttm_bo_reserve_double_resv
[20:48:49] [PASSED] ttm_bo_reserve_interrupted
[20:48:49] [PASSED] ttm_bo_reserve_deadlock
[20:48:49] [PASSED] ttm_bo_unreserve_basic
[20:48:49] [PASSED] ttm_bo_unreserve_pinned
[20:48:49] [PASSED] ttm_bo_unreserve_bulk
[20:48:49] [PASSED] ttm_bo_put_basic
[20:48:49] [PASSED] ttm_bo_put_shared_resv
[20:48:49] [PASSED] ttm_bo_pin_basic
[20:48:49] [PASSED] ttm_bo_pin_unpin_resource
[20:48:49] [PASSED] ttm_bo_multiple_pin_one_unpin
[20:48:49] ===================== [PASSED] ttm_bo ======================
[20:48:49] ============== ttm_bo_validate (22 subtests) ===============
[20:48:49] ============== ttm_bo_init_reserved_sys_man ===============
[20:48:49] [PASSED] Buffer object for userspace
[20:48:49] [PASSED] Kernel buffer object
[20:48:49] [PASSED] Shared buffer object
[20:48:49] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[20:48:49] ============== ttm_bo_init_reserved_mock_man ==============
[20:48:49] [PASSED] Buffer object for userspace
[20:48:49] [PASSED] Kernel buffer object
[20:48:49] [PASSED] Shared buffer object
[20:48:49] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[20:48:49] [PASSED] ttm_bo_init_reserved_resv
[20:48:49] ================== ttm_bo_validate_basic ==================
[20:48:49] [PASSED] Buffer object for userspace
[20:48:49] [PASSED] Kernel buffer object
[20:48:49] [PASSED] Shared buffer object
[20:48:49] ============== [PASSED] ttm_bo_validate_basic ==============
[20:48:49] [PASSED] ttm_bo_validate_invalid_placement
[20:48:49] ============= ttm_bo_validate_same_placement ==============
[20:48:49] [PASSED] System manager
[20:48:49] [PASSED] VRAM manager
[20:48:49] ========= [PASSED] ttm_bo_validate_same_placement ==========
[20:48:49] [PASSED] ttm_bo_validate_failed_alloc
[20:48:49] [PASSED] ttm_bo_validate_pinned
[20:48:49] [PASSED] ttm_bo_validate_busy_placement
[20:48:49] ================ ttm_bo_validate_multihop =================
[20:48:49] [PASSED] Buffer object for userspace
[20:48:49] [PASSED] Kernel buffer object
[20:48:49] [PASSED] Shared buffer object
[20:48:49] ============ [PASSED] ttm_bo_validate_multihop =============
[20:48:49] ========== ttm_bo_validate_no_placement_signaled ==========
[20:48:49] [PASSED] Buffer object in system domain, no page vector
[20:48:49] [PASSED] Buffer object in system domain with an existing page vector
[20:48:49] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[20:48:49] ======== ttm_bo_validate_no_placement_not_signaled ========
[20:48:49] [PASSED] Buffer object for userspace
[20:48:49] [PASSED] Kernel buffer object
[20:48:49] [PASSED] Shared buffer object
[20:48:49] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[20:48:49] [PASSED] ttm_bo_validate_move_fence_signaled
[20:48:49] ========= ttm_bo_validate_move_fence_not_signaled =========
[20:48:49] [PASSED] Waits for GPU
[20:48:49] [PASSED] Tries to lock straight away
[20:48:49] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[20:48:49] [PASSED] ttm_bo_validate_swapout
[20:48:49] [PASSED] ttm_bo_validate_happy_evict
[20:48:49] [PASSED] ttm_bo_validate_all_pinned_evict
[20:48:49] [PASSED] ttm_bo_validate_allowed_only_evict
[20:48:49] [PASSED] ttm_bo_validate_deleted_evict
[20:48:49] [PASSED] ttm_bo_validate_busy_domain_evict
[20:48:49] [PASSED] ttm_bo_validate_evict_gutting
[20:48:49] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[20:48:49] ================= [PASSED] ttm_bo_validate =================
[20:48:49] ============================================================
[20:48:49] Testing complete. Ran 102 tests: passed: 102
[20:48:50] Elapsed time: 10.843s total, 1.620s configuring, 8.341s building, 0.720s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 49+ messages in thread
* ✓ CI.Build: success for Add support for EU stall sampling
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
` (9 preceding siblings ...)
2025-01-15 20:48 ` ✓ CI.KUnit: success " Patchwork
@ 2025-01-15 21:14 ` Patchwork
2025-01-15 21:16 ` ✗ CI.Hooks: failure " Patchwork
` (5 subsequent siblings)
16 siblings, 0 replies; 49+ messages in thread
From: Patchwork @ 2025-01-15 21:14 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
== Series Details ==
Series: Add support for EU stall sampling
URL : https://patchwork.freedesktop.org/series/143572/
State : success
== Summary ==
lib/modules/6.13.0-rc7-xe+/kernel/arch/x86/events/rapl.ko
lib/modules/6.13.0-rc7-xe+/kernel/arch/x86/kvm/
lib/modules/6.13.0-rc7-xe+/kernel/arch/x86/kvm/kvm.ko
lib/modules/6.13.0-rc7-xe+/kernel/arch/x86/kvm/kvm-intel.ko
lib/modules/6.13.0-rc7-xe+/kernel/arch/x86/kvm/kvm-amd.ko
lib/modules/6.13.0-rc7-xe+/kernel/kernel/
lib/modules/6.13.0-rc7-xe+/kernel/kernel/kheaders.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/
lib/modules/6.13.0-rc7-xe+/kernel/crypto/ecrdsa_generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/xcbc.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/serpent_generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/aria_generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/crypto_simd.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/adiantum.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/tcrypt.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/crypto_engine.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/zstd.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/asymmetric_keys/
lib/modules/6.13.0-rc7-xe+/kernel/crypto/asymmetric_keys/pkcs7_test_key.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/asymmetric_keys/pkcs8_key_parser.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/des_generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/xctr.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/authenc.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/sm4_generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/keywrap.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/camellia_generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/sm3.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/pcrypt.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/aegis128.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/af_alg.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/algif_aead.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/cmac.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/sm3_generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/aes_ti.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/chacha_generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/poly1305_generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/nhpoly1305.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/crc32_generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/essiv.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/ccm.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/wp512.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/streebog_generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/authencesn.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/echainiv.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/lrw.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/cryptd.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/crypto_user.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/algif_hash.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/vmac.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/polyval-generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/hctr2.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/842.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/pcbc.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/ansi_cprng.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/cast6_generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/twofish_common.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/twofish_generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/lz4hc.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/blowfish_generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/md4.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/chacha20poly1305.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/curve25519-generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/lz4.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/rmd160.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/algif_skcipher.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/cast5_generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/fcrypt.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/ecdsa_generic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/sm4.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/cast_common.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/blowfish_common.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/michael_mic.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/async_tx/
lib/modules/6.13.0-rc7-xe+/kernel/crypto/async_tx/async_xor.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/async_tx/async_tx.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/async_tx/async_memcpy.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/async_tx/async_pq.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/async_tx/async_raid6_recov.ko
lib/modules/6.13.0-rc7-xe+/kernel/crypto/algif_rng.ko
lib/modules/6.13.0-rc7-xe+/kernel/block/
lib/modules/6.13.0-rc7-xe+/kernel/block/bfq.ko
lib/modules/6.13.0-rc7-xe+/kernel/block/kyber-iosched.ko
lib/modules/6.13.0-rc7-xe+/build
lib/modules/6.13.0-rc7-xe+/modules.alias.bin
lib/modules/6.13.0-rc7-xe+/modules.builtin
lib/modules/6.13.0-rc7-xe+/modules.softdep
lib/modules/6.13.0-rc7-xe+/modules.alias
lib/modules/6.13.0-rc7-xe+/modules.order
lib/modules/6.13.0-rc7-xe+/modules.symbols
lib/modules/6.13.0-rc7-xe+/modules.dep.bin
+ mv kernel-nodebug.tar.gz ..
+ cd ..
+ rm -rf archive
++ date +%s
^[[0Ksection_end:1736975670:package_x86_64_nodebug
^[[0K
+ echo -e '\e[0Ksection_end:1736975670:package_x86_64_nodebug\r\e[0K'
+ sync
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 49+ messages in thread
* ✗ CI.Hooks: failure for Add support for EU stall sampling
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
` (10 preceding siblings ...)
2025-01-15 21:14 ` ✓ CI.Build: " Patchwork
@ 2025-01-15 21:16 ` Patchwork
2025-01-15 21:18 ` ✓ CI.checksparse: success " Patchwork
` (4 subsequent siblings)
16 siblings, 0 replies; 49+ messages in thread
From: Patchwork @ 2025-01-15 21:16 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
== Series Details ==
Series: Add support for EU stall sampling
URL : https://patchwork.freedesktop.org/series/143572/
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
mkdir -p /workspace/kernel/build64-default/tools/objtool && make O=/workspace/kernel/build64-default subdir=tools/objtool --no-print-directory -C objtool
CALL ../scripts/checksyscalls.sh
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/arch/x86/special.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/decode.o
CC /workspace/kernel/build64-default/tools/objtool/arch/x86/orc.o
LD /workspace/kernel/build64-default/tools/objtool/arch/x86/objtool-in.o
LD /workspace/kernel/build64-default/tools/objtool/objtool-in.o
LINK /workspace/kernel/build64-default/tools/objtool/objtool
make[1]: Leaving directory '/workspace/kernel/build64-default'
++ nproc
+ make -j48 O=/workspace/kernel/build64-default W=1 drivers/gpu/drm/xe
make[1]: Entering directory '/workspace/kernel/build64-default'
make[2]: Nothing to be done for 'drivers/gpu/drm/xe'.
make[1]: Leaving directory '/workspace/kernel/build64-default'
run-parts: executing /workspace/ci/hooks/11-build-32b
+++ realpath /workspace/ci/hooks/11-build-32b
++ dirname /workspace/ci/hooks/11-build-32b
+ THIS_SCRIPT_DIR=/workspace/ci/hooks
+ SRC_DIR=/workspace/kernel
+ TOOLS_SRC_DIR=/workspace/ci
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ BUILD_DIR=/workspace/kernel/build64-default/build32
+ cd /workspace/kernel
+ mkdir -p /workspace/kernel/build64-default/build32
++ nproc
+ make -j48 ARCH=i386 O=/workspace/kernel/build64-default/build32 defconfig
make[1]: Entering directory '/workspace/kernel/build64-default/build32'
GEN Makefile
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
YACC scripts/kconfig/parser.tab.[ch]
HOSTCC scripts/kconfig/menu.o
HOSTCC scripts/kconfig/preprocess.o
HOSTCC scripts/kconfig/util.o
HOSTCC scripts/kconfig/symbol.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/fragments/10-xe.fragment
Using .config as base
Merging /workspace/ci/kernel/fragments/10-xe.fragment
Value of CONFIG_DRM_XE is redefined by fragment /workspace/ci/kernel/fragments/10-xe.fragment:
Previous value: # CONFIG_DRM_XE is not set
New value: CONFIG_DRM_XE=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] && HAS_IOPORT [=y]
#
# configuration written to .config
#
Value requested for CONFIG_HAVE_UID16 not in final .config
Requested value: CONFIG_HAVE_UID16=y
Actual value:
Value requested for CONFIG_UID16 not in final .config
Requested value: CONFIG_UID16=y
Actual value:
Value requested for CONFIG_X86_32 not in final .config
Requested value: CONFIG_X86_32=y
Actual value:
Value requested for CONFIG_OUTPUT_FORMAT not in final .config
Requested value: CONFIG_OUTPUT_FORMAT="elf32-i386"
Actual value: CONFIG_OUTPUT_FORMAT="elf64-x86-64"
Value requested for CONFIG_ARCH_MMAP_RND_BITS_MIN not in final .config
Requested value: CONFIG_ARCH_MMAP_RND_BITS_MIN=8
Actual value: CONFIG_ARCH_MMAP_RND_BITS_MIN=28
Value requested for CONFIG_ARCH_MMAP_RND_BITS_MAX not in final .config
Requested value: CONFIG_ARCH_MMAP_RND_BITS_MAX=16
Actual value: CONFIG_ARCH_MMAP_RND_BITS_MAX=32
Value requested for CONFIG_PGTABLE_LEVELS not in final .config
Requested value: CONFIG_PGTABLE_LEVELS=2
Actual value: CONFIG_PGTABLE_LEVELS=5
Value requested for CONFIG_X86_BIGSMP not in final .config
Requested value: # CONFIG_X86_BIGSMP is not set
Actual value:
Value requested for CONFIG_X86_INTEL_QUARK not in final .config
Requested value: # CONFIG_X86_INTEL_QUARK is not set
Actual value:
Value requested for CONFIG_X86_RDC321X not in final .config
Requested value: # CONFIG_X86_RDC321X is not set
Actual value:
Value requested for CONFIG_X86_32_NON_STANDARD not in final .config
Requested value: # CONFIG_X86_32_NON_STANDARD is not set
Actual value:
Value requested for CONFIG_X86_32_IRIS not in final .config
Requested value: # CONFIG_X86_32_IRIS is not set
Actual value:
Value requested for CONFIG_M486SX not in final .config
Requested value: # CONFIG_M486SX is not set
Actual value:
Value requested for CONFIG_M486 not in final .config
Requested value: # CONFIG_M486 is not set
Actual value:
Value requested for CONFIG_M586 not in final .config
Requested value: # CONFIG_M586 is not set
Actual value:
Value requested for CONFIG_M586TSC not in final .config
Requested value: # CONFIG_M586TSC is not set
Actual value:
Value requested for CONFIG_M586MMX not in final .config
Requested value: # CONFIG_M586MMX is not set
Actual value:
Value requested for CONFIG_M686 not in final .config
Requested value: CONFIG_M686=y
Actual value:
Value requested for CONFIG_MPENTIUMII not in final .config
Requested value: # CONFIG_MPENTIUMII is not set
Actual value:
Value requested for CONFIG_MPENTIUMIII not in final .config
Requested value: # CONFIG_MPENTIUMIII is not set
Actual value:
Value requested for CONFIG_MPENTIUMM not in final .config
Requested value: # CONFIG_MPENTIUMM is not set
Actual value:
Value requested for CONFIG_MPENTIUM4 not in final .config
Requested value: # CONFIG_MPENTIUM4 is not set
Actual value:
Value requested for CONFIG_MK6 not in final .config
Requested value: # CONFIG_MK6 is not set
Actual value:
Value requested for CONFIG_MK7 not in final .config
Requested value: # CONFIG_MK7 is not set
Actual value:
Value requested for CONFIG_MCRUSOE not in final .config
Requested value: # CONFIG_MCRUSOE is not set
Actual value:
Value requested for CONFIG_MEFFICEON not in final .config
Requested value: # CONFIG_MEFFICEON is not set
Actual value:
Value requested for CONFIG_MWINCHIPC6 not in final .config
Requested value: # CONFIG_MWINCHIPC6 is not set
Actual value:
Value requested for CONFIG_MWINCHIP3D not in final .config
Requested value: # CONFIG_MWINCHIP3D is not set
Actual value:
Value requested for CONFIG_MELAN not in final .config
Requested value: # CONFIG_MELAN is not set
Actual value:
Value requested for CONFIG_MGEODEGX1 not in final .config
Requested value: # CONFIG_MGEODEGX1 is not set
Actual value:
Value requested for CONFIG_MGEODE_LX not in final .config
Requested value: # CONFIG_MGEODE_LX is not set
Actual value:
Value requested for CONFIG_MCYRIXIII not in final .config
Requested value: # CONFIG_MCYRIXIII is not set
Actual value:
Value requested for CONFIG_MVIAC3_2 not in final .config
Requested value: # CONFIG_MVIAC3_2 is not set
Actual value:
Value requested for CONFIG_MVIAC7 not in final .config
Requested value: # CONFIG_MVIAC7 is not set
Actual value:
Value requested for CONFIG_X86_GENERIC not in final .config
Requested value: # CONFIG_X86_GENERIC is not set
Actual value:
Value requested for CONFIG_X86_INTERNODE_CACHE_SHIFT not in final .config
Requested value: CONFIG_X86_INTERNODE_CACHE_SHIFT=5
Actual value: CONFIG_X86_INTERNODE_CACHE_SHIFT=6
Value requested for CONFIG_X86_L1_CACHE_SHIFT not in final .config
Requested value: CONFIG_X86_L1_CACHE_SHIFT=5
Actual value: CONFIG_X86_L1_CACHE_SHIFT=6
Value requested for CONFIG_X86_USE_PPRO_CHECKSUM not in final .config
Requested value: CONFIG_X86_USE_PPRO_CHECKSUM=y
Actual value:
Value requested for CONFIG_X86_MINIMUM_CPU_FAMILY not in final .config
Requested value: CONFIG_X86_MINIMUM_CPU_FAMILY=6
Actual value: CONFIG_X86_MINIMUM_CPU_FAMILY=64
Value requested for CONFIG_CPU_SUP_TRANSMETA_32 not in final .config
Requested value: CONFIG_CPU_SUP_TRANSMETA_32=y
Actual value:
Value requested for CONFIG_CPU_SUP_VORTEX_32 not in final .config
Requested value: CONFIG_CPU_SUP_VORTEX_32=y
Actual value:
Value requested for CONFIG_HPET_TIMER not in final .config
Requested value: # CONFIG_HPET_TIMER is not set
Actual value: CONFIG_HPET_TIMER=y
Value requested for CONFIG_NR_CPUS_RANGE_END not in final .config
Requested value: CONFIG_NR_CPUS_RANGE_END=8
Actual value: CONFIG_NR_CPUS_RANGE_END=512
Value requested for CONFIG_NR_CPUS_DEFAULT not in final .config
Requested value: CONFIG_NR_CPUS_DEFAULT=8
Actual value: CONFIG_NR_CPUS_DEFAULT=64
Value requested for CONFIG_X86_ANCIENT_MCE not in final .config
Requested value: # CONFIG_X86_ANCIENT_MCE is not set
Actual value:
Value requested for CONFIG_X86_LEGACY_VM86 not in final .config
Requested value: # CONFIG_X86_LEGACY_VM86 is not set
Actual value:
Value requested for CONFIG_X86_ESPFIX32 not in final .config
Requested value: CONFIG_X86_ESPFIX32=y
Actual value:
Value requested for CONFIG_TOSHIBA not in final .config
Requested value: # CONFIG_TOSHIBA is not set
Actual value:
Value requested for CONFIG_X86_REBOOTFIXUPS not in final .config
Requested value: # CONFIG_X86_REBOOTFIXUPS is not set
Actual value:
Value requested for CONFIG_MICROCODE_INITRD32 not in final .config
Requested value: CONFIG_MICROCODE_INITRD32=y
Actual value:
Value requested for CONFIG_NOHIGHMEM not in final .config
Requested value: # CONFIG_NOHIGHMEM is not set
Actual value:
Value requested for CONFIG_HIGHMEM4G not in final .config
Requested value: CONFIG_HIGHMEM4G=y
Actual value:
Value requested for CONFIG_HIGHMEM64G not in final .config
Requested value: # CONFIG_HIGHMEM64G is not set
Actual value:
Value requested for CONFIG_VMSPLIT_3G not in final .config
Requested value: CONFIG_VMSPLIT_3G=y
Actual value:
Value requested for CONFIG_VMSPLIT_3G_OPT not in final .config
Requested value: # CONFIG_VMSPLIT_3G_OPT is not set
Actual value:
Value requested for CONFIG_VMSPLIT_2G not in final .config
Requested value: # CONFIG_VMSPLIT_2G is not set
Actual value:
Value requested for CONFIG_VMSPLIT_2G_OPT not in final .config
Requested value: # CONFIG_VMSPLIT_2G_OPT is not set
Actual value:
Value requested for CONFIG_VMSPLIT_1G not in final .config
Requested value: # CONFIG_VMSPLIT_1G is not set
Actual value:
Value requested for CONFIG_PAGE_OFFSET not in final .config
Requested value: CONFIG_PAGE_OFFSET=0xC0000000
Actual value:
Value requested for CONFIG_HIGHMEM not in final .config
Requested value: CONFIG_HIGHMEM=y
Actual value:
Value requested for CONFIG_X86_PAE not in final .config
Requested value: # CONFIG_X86_PAE is not set
Actual value:
Value requested for CONFIG_ARCH_FLATMEM_ENABLE not in final .config
Requested value: CONFIG_ARCH_FLATMEM_ENABLE=y
Actual value:
Value requested for CONFIG_ARCH_SELECT_MEMORY_MODEL not in final .config
Requested value: CONFIG_ARCH_SELECT_MEMORY_MODEL=y
Actual value:
Value requested for CONFIG_ILLEGAL_POINTER_VALUE not in final .config
Requested value: CONFIG_ILLEGAL_POINTER_VALUE=0
Actual value: CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
Value requested for CONFIG_HIGHPTE not in final .config
Requested value: # CONFIG_HIGHPTE is not set
Actual value:
Value requested for CONFIG_COMPAT_VDSO not in final .config
Requested value: # CONFIG_COMPAT_VDSO is not set
Actual value:
Value requested for CONFIG_FUNCTION_PADDING_CFI not in final .config
Requested value: CONFIG_FUNCTION_PADDING_CFI=0
Actual value: CONFIG_FUNCTION_PADDING_CFI=11
Value requested for CONFIG_FUNCTION_PADDING_BYTES not in final .config
Requested value: CONFIG_FUNCTION_PADDING_BYTES=4
Actual value: CONFIG_FUNCTION_PADDING_BYTES=16
Value requested for CONFIG_APM not in final .config
Requested value: # CONFIG_APM is not set
Actual value:
Value requested for CONFIG_X86_POWERNOW_K6 not in final .config
Requested value: # CONFIG_X86_POWERNOW_K6 is not set
Actual value:
Value requested for CONFIG_X86_POWERNOW_K7 not in final .config
Requested value: # CONFIG_X86_POWERNOW_K7 is not set
Actual value:
Value requested for CONFIG_X86_GX_SUSPMOD not in final .config
Requested value: # CONFIG_X86_GX_SUSPMOD is not set
Actual value:
Value requested for CONFIG_X86_SPEEDSTEP_ICH not in final .config
Requested value: # CONFIG_X86_SPEEDSTEP_ICH is not set
Actual value:
Value requested for CONFIG_X86_SPEEDSTEP_SMI not in final .config
Requested value: # CONFIG_X86_SPEEDSTEP_SMI is not set
Actual value:
Value requested for CONFIG_X86_CPUFREQ_NFORCE2 not in final .config
Requested value: # CONFIG_X86_CPUFREQ_NFORCE2 is not set
Actual value:
Value requested for CONFIG_X86_LONGRUN not in final .config
Requested value: # CONFIG_X86_LONGRUN is not set
Actual value:
Value requested for CONFIG_X86_LONGHAUL not in final .config
Requested value: # CONFIG_X86_LONGHAUL is not set
Actual value:
Value requested for CONFIG_X86_E_POWERSAVER not in final .config
Requested value: # CONFIG_X86_E_POWERSAVER is not set
Actual value:
Value requested for CONFIG_PCI_GOBIOS not in final .config
Requested value: # CONFIG_PCI_GOBIOS is not set
Actual value:
Value requested for CONFIG_PCI_GOMMCONFIG not in final .config
Requested value: # CONFIG_PCI_GOMMCONFIG is not set
Actual value:
Value requested for CONFIG_PCI_GODIRECT not in final .config
Requested value: # CONFIG_PCI_GODIRECT is not set
Actual value:
Value requested for CONFIG_PCI_GOANY not in final .config
Requested value: CONFIG_PCI_GOANY=y
Actual value:
Value requested for CONFIG_PCI_BIOS not in final .config
Requested value: CONFIG_PCI_BIOS=y
Actual value:
Value requested for CONFIG_ISA not in final .config
Requested value: # CONFIG_ISA is not set
Actual value:
Value requested for CONFIG_SCx200 not in final .config
Requested value: # CONFIG_SCx200 is not set
Actual value:
Value requested for CONFIG_OLPC not in final .config
Requested value: # CONFIG_OLPC is not set
Actual value:
Value requested for CONFIG_ALIX not in final .config
Requested value: # CONFIG_ALIX is not set
Actual value:
Value requested for CONFIG_NET5501 not in final .config
Requested value: # CONFIG_NET5501 is not set
Actual value:
Value requested for CONFIG_GEOS not in final .config
Requested value: # CONFIG_GEOS is not set
Actual value:
Value requested for CONFIG_COMPAT_32 not in final .config
Requested value: CONFIG_COMPAT_32=y
Actual value:
Value requested for CONFIG_HAVE_ATOMIC_IOMAP not in final .config
Requested value: CONFIG_HAVE_ATOMIC_IOMAP=y
Actual value:
Value requested for CONFIG_ARCH_32BIT_OFF_T not in final .config
Requested value: CONFIG_ARCH_32BIT_OFF_T=y
Actual value:
Value requested for CONFIG_ARCH_WANT_IPC_PARSE_VERSION not in final .config
Requested value: CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
Actual value:
Value requested for CONFIG_MODULES_USE_ELF_REL not in final .config
Requested value: CONFIG_MODULES_USE_ELF_REL=y
Actual value:
Value requested for CONFIG_ARCH_MMAP_RND_BITS not in final .config
Requested value: CONFIG_ARCH_MMAP_RND_BITS=8
Actual value: CONFIG_ARCH_MMAP_RND_BITS=28
Value requested for CONFIG_CLONE_BACKWARDS not in final .config
Requested value: CONFIG_CLONE_BACKWARDS=y
Actual value:
Value requested for CONFIG_OLD_SIGSUSPEND3 not in final .config
Requested value: CONFIG_OLD_SIGSUSPEND3=y
Actual value:
Value requested for CONFIG_OLD_SIGACTION not in final .config
Requested value: CONFIG_OLD_SIGACTION=y
Actual value:
Value requested for CONFIG_ARCH_SPLIT_ARG64 not in final .config
Requested value: CONFIG_ARCH_SPLIT_ARG64=y
Actual value:
Value requested for CONFIG_FUNCTION_ALIGNMENT not in final .config
Requested value: CONFIG_FUNCTION_ALIGNMENT=4
Actual value: CONFIG_FUNCTION_ALIGNMENT=16
Value requested for CONFIG_SELECT_MEMORY_MODEL not in final .config
Requested value: CONFIG_SELECT_MEMORY_MODEL=y
Actual value:
Value requested for CONFIG_FLATMEM_MANUAL not in final .config
Requested value: CONFIG_FLATMEM_MANUAL=y
Actual value:
Value requested for CONFIG_SPARSEMEM_MANUAL not in final .config
Requested value: # CONFIG_SPARSEMEM_MANUAL is not set
Actual value:
Value requested for CONFIG_FLATMEM not in final .config
Requested value: CONFIG_FLATMEM=y
Actual value:
Value requested for CONFIG_SPARSEMEM_STATIC not in final .config
Requested value: CONFIG_SPARSEMEM_STATIC=y
Actual value:
Value requested for CONFIG_BOUNCE not in final .config
Requested value: CONFIG_BOUNCE=y
Actual value:
Value requested for CONFIG_KMAP_LOCAL not in final .config
Requested value: CONFIG_KMAP_LOCAL=y
Actual value:
Value requested for CONFIG_HOTPLUG_PCI_COMPAQ not in final .config
Requested value: # CONFIG_HOTPLUG_PCI_COMPAQ is not set
Actual value:
Value requested for CONFIG_HOTPLUG_PCI_IBM not in final .config
Requested value: # CONFIG_HOTPLUG_PCI_IBM is not set
Actual value:
Value requested for CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH not in final .config
Requested value: CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH=y
Actual value:
Value requested for CONFIG_PCH_PHUB not in final .config
Requested value: # CONFIG_PCH_PHUB is not set
Actual value:
Value requested for CONFIG_SCSI_NSP32 not in final .config
Requested value: # CONFIG_SCSI_NSP32 is not set
Actual value:
Value requested for CONFIG_PATA_CS5520 not in final .config
Requested value: # CONFIG_PATA_CS5520 is not set
Actual value:
Value requested for CONFIG_PATA_CS5530 not in final .config
Requested value: # CONFIG_PATA_CS5530 is not set
Actual value:
Value requested for CONFIG_PATA_CS5535 not in final .config
Requested value: # CONFIG_PATA_CS5535 is not set
Actual value:
Value requested for CONFIG_PATA_CS5536 not in final .config
Requested value: # CONFIG_PATA_CS5536 is not set
Actual value:
Value requested for CONFIG_PATA_SC1200 not in final .config
Requested value: # CONFIG_PATA_SC1200 is not set
Actual value:
Value requested for CONFIG_PCH_GBE not in final .config
Requested value: # CONFIG_PCH_GBE is not set
Actual value:
Value requested for CONFIG_INPUT_WISTRON_BTNS not in final .config
Requested value: # CONFIG_INPUT_WISTRON_BTNS is not set
Actual value:
Value requested for CONFIG_SERIAL_TIMBERDALE not in final .config
Requested value: # CONFIG_SERIAL_TIMBERDALE is not set
Actual value:
Value requested for CONFIG_SERIAL_PCH_UART not in final .config
Requested value: # CONFIG_SERIAL_PCH_UART is not set
Actual value:
Value requested for CONFIG_HW_RANDOM_GEODE not in final .config
Requested value: CONFIG_HW_RANDOM_GEODE=y
Actual value:
Value requested for CONFIG_SONYPI not in final .config
Requested value: # CONFIG_SONYPI is not set
Actual value:
Value requested for CONFIG_PC8736x_GPIO not in final .config
Requested value: # CONFIG_PC8736x_GPIO is not set
Actual value:
Value requested for CONFIG_NSC_GPIO not in final .config
Requested value: # CONFIG_NSC_GPIO is not set
Actual value:
Value requested for CONFIG_I2C_EG20T not in final .config
Requested value: # CONFIG_I2C_EG20T is not set
Actual value:
Value requested for CONFIG_SCx200_ACB not in final .config
Requested value: # CONFIG_SCx200_ACB is not set
Actual value:
Value requested for CONFIG_PTP_1588_CLOCK_PCH not in final .config
Requested value: # CONFIG_PTP_1588_CLOCK_PCH is not set
Actual value:
Value requested for CONFIG_SBC8360_WDT not in final .config
Requested value: # CONFIG_SBC8360_WDT is not set
Actual value:
Value requested for CONFIG_SBC7240_WDT not in final .config
Requested value: # CONFIG_SBC7240_WDT is not set
Actual value:
Value requested for CONFIG_MFD_CS5535 not in final .config
Requested value: # CONFIG_MFD_CS5535 is not set
Actual value:
Value requested for CONFIG_AGP_ALI not in final .config
Requested value: # CONFIG_AGP_ALI is not set
Actual value:
Value requested for CONFIG_AGP_ATI not in final .config
Requested value: # CONFIG_AGP_ATI is not set
Actual value:
Value requested for CONFIG_AGP_AMD not in final .config
Requested value: # CONFIG_AGP_AMD is not set
Actual value:
Value requested for CONFIG_AGP_NVIDIA not in final .config
Requested value: # CONFIG_AGP_NVIDIA is not set
Actual value:
Value requested for CONFIG_AGP_SWORKS not in final .config
Requested value: # CONFIG_AGP_SWORKS is not set
Actual value:
Value requested for CONFIG_AGP_EFFICEON not in final .config
Requested value: # CONFIG_AGP_EFFICEON is not set
Actual value:
Value requested for CONFIG_SND_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_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] && HAS_IOPORT [=y]
#
# 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] && HAS_IOPORT [=y]
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] && HAS_IOPORT [=y]
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] && HAS_IOPORT [=y]
GEN Makefile
WRAP arch/x86/include/generated/uapi/asm/bpf_perf_event.h
WRAP arch/x86/include/generated/uapi/asm/errno.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_32.h
WRAP arch/x86/include/generated/uapi/asm/fcntl.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_64.h
UPD include/generated/uapi/linux/version.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_x32.h
WRAP arch/x86/include/generated/uapi/asm/ioctl.h
SYSTBL arch/x86/include/generated/asm/syscalls_32.h
WRAP arch/x86/include/generated/uapi/asm/ioctls.h
WRAP arch/x86/include/generated/uapi/asm/ipcbuf.h
WRAP arch/x86/include/generated/uapi/asm/param.h
WRAP arch/x86/include/generated/uapi/asm/poll.h
WRAP arch/x86/include/generated/uapi/asm/resource.h
WRAP arch/x86/include/generated/uapi/asm/socket.h
WRAP arch/x86/include/generated/uapi/asm/sockios.h
WRAP arch/x86/include/generated/uapi/asm/termbits.h
WRAP arch/x86/include/generated/uapi/asm/termios.h
UPD include/generated/compile.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
WRAP arch/x86/include/generated/asm/early_ioremap.h
WRAP arch/x86/include/generated/asm/mcs_spinlock.h
WRAP arch/x86/include/generated/asm/mmzone.h
HOSTCC scripts/kallsyms
WRAP arch/x86/include/generated/asm/irq_regs.h
HOSTCC scripts/sorttable
WRAP arch/x86/include/generated/asm/kmap_size.h
HOSTCC scripts/asn1_compiler
WRAP arch/x86/include/generated/asm/local64.h
WRAP arch/x86/include/generated/asm/mmiowb.h
WRAP arch/x86/include/generated/asm/module.lds.h
WRAP arch/x86/include/generated/asm/rwonce.h
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/file2alias.o
HOSTCC scripts/mod/modpost.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
HOSTCC usr/gen_init_cpio
CC init/main.o
CC certs/system_keyring.o
CC init/do_mounts.o
CC init/do_mounts_initrd.o
CC ipc/util.o
UPD init/utsversion-tmp.h
CC init/initramfs.o
CC ipc/msgutil.o
CC init/calibrate.o
CC security/commoncap.o
CC ipc/msg.o
CC init/init_task.o
CC security/lsm_syscalls.o
CC ipc/sem.o
CC io_uring/io_uring.o
CC mm/filemap.o
CC security/min_addr.o
CC ipc/shm.o
AS arch/x86/lib/atomic64_cx8_32.o
CC block/bdev.o
CC mm/mempool.o
CC arch/x86/realmode/init.o
AR arch/x86/crypto/built-in.a
CC arch/x86/video/video-common.o
CC arch/x86/power/cpu.o
AR arch/x86/net/built-in.a
CC security/integrity/iint.o
CC security/keys/gc.o
HOSTCC security/selinux/genheaders
CC block/partitions/core.o
CC arch/x86/pci/i386.o
CC fs/nfs_common/nfsacl.o
AR virt/lib/built-in.a
CC arch/x86/events/amd/core.o
CC lib/math/div64.o
CC arch/x86/mm/pat/set_memory.o
CC net/core/sock.o
AR arch/x86/platform/atom/built-in.a
CC arch/x86/events/intel/core.o
CC arch/x86/virt/svm/cmdline.o
CC net/ethernet/eth.o
AR drivers/cache/built-in.a
CC fs/notify/dnotify/dnotify.o
CC arch/x86/events/intel/bts.o
CC arch/x86/kernel/fpu/init.o
CC sound/core/seq/seq.o
AR virt/built-in.a
AR arch/x86/platform/ce4100/built-in.a
CC arch/x86/kernel/cpu/mce/core.o
AR drivers/irqchip/built-in.a
AS arch/x86/lib/checksum_32.o
CC arch/x86/entry/vdso/vma.o
CC io_uring/opdef.o
CC arch/x86/platform/efi/memmap.o
AR drivers/bus/mhi/built-in.a
CC kernel/sched/core.o
AR drivers/bus/built-in.a
CC arch/x86/lib/cmdline.o
AR drivers/pwm/built-in.a
CC crypto/asymmetric_keys/asymmetric_type.o
AR drivers/leds/trigger/built-in.a
AR drivers/leds/blink/built-in.a
AR drivers/leds/simple/built-in.a
CC drivers/leds/led-core.o
AR arch/x86/virt/svm/built-in.a
AR arch/x86/virt/vmx/built-in.a
AR arch/x86/virt/built-in.a
CC arch/x86/platform/efi/quirks.o
AS arch/x86/lib/cmpxchg8b_emu.o
CC lib/math/gcd.o
GEN security/selinux/flask.h security/selinux/av_permissions.h
CC security/selinux/avc.o
CC arch/x86/lib/cpu.o
CC lib/math/lcm.o
CC lib/math/int_log.o
CC arch/x86/platform/efi/efi.o
GEN usr/initramfs_data.cpio
COPY usr/initramfs_inc_data
AS usr/initramfs_data.o
AR usr/built-in.a
AR net/802/built-in.a
CC lib/math/int_pow.o
CC fs/nfs_common/grace.o
CC arch/x86/kernel/fpu/bugs.o
HOSTCC certs/extract-cert
CC lib/math/int_sqrt.o
CC arch/x86/kernel/fpu/core.o
CC lib/math/reciprocal_div.o
CC sound/core/seq/seq_lock.o
CC arch/x86/lib/delay.o
CC lib/math/rational.o
AS arch/x86/realmode/rm/header.o
AS arch/x86/realmode/rm/trampoline_32.o
AR arch/x86/video/built-in.a
AS arch/x86/realmode/rm/stack.o
CC io_uring/kbuf.o
AS arch/x86/realmode/rm/reboot.o
AS arch/x86/realmode/rm/wakeup_asm.o
CC lib/crypto/mpi/generic_mpih-lshift.o
CC security/integrity/integrity_audit.o
CC drivers/leds/led-class.o
CC lib/zlib_inflate/inffast.o
CC crypto/api.o
CC arch/x86/realmode/rm/wakemain.o
CC lib/zlib_deflate/deflate.o
CERT certs/x509_certificate_list
CERT certs/signing_key.x509
AS certs/system_certificates.o
CC arch/x86/mm/init.o
CC fs/iomap/trace.o
CC crypto/asymmetric_keys/restrict.o
CC arch/x86/pci/init.o
CC arch/x86/pci/pcbios.o
AR certs/built-in.a
AR fs/notify/dnotify/built-in.a
CC security/keys/key.o
CC arch/x86/events/intel/ds.o
CC arch/x86/entry/vdso/extable.o
CC arch/x86/realmode/rm/video-mode.o
CC fs/notify/inotify/inotify_fsnotify.o
AS arch/x86/realmode/rm/copy.o
LDS arch/x86/entry/vdso/vdso32/vdso32.lds
CC arch/x86/power/hibernate_32.o
CC fs/nfs_common/common.o
CC sound/core/seq/seq_clientmgr.o
AS arch/x86/lib/getuser.o
CC lib/zlib_inflate/inflate.o
CC block/partitions/msdos.o
GEN arch/x86/lib/inat-tables.c
AS arch/x86/realmode/rm/bioscall.o
CC arch/x86/lib/insn-eval.o
CC arch/x86/realmode/rm/regs.o
CC arch/x86/mm/pat/memtype.o
CC arch/x86/pci/mmconfig_32.o
CC arch/x86/realmode/rm/video-vga.o
AR lib/math/built-in.a
CC ipc/syscall.o
CC security/keys/keyring.o
CC arch/x86/mm/init_32.o
CC arch/x86/realmode/rm/video-vesa.o
AS arch/x86/entry/vdso/vdso32/note.o
CC kernel/locking/mutex.o
CC drivers/leds/led-triggers.o
CC kernel/power/qos.o
CC arch/x86/realmode/rm/video-bios.o
CC kernel/locking/semaphore.o
AR arch/x86/entry/vsyscall/built-in.a
CC crypto/asymmetric_keys/signature.o
PASYMS arch/x86/realmode/rm/pasyms.h
CC arch/x86/kernel/fpu/regset.o
CC arch/x86/events/amd/lbr.o
CC kernel/sched/fair.o
LDS arch/x86/realmode/rm/realmode.lds
CC arch/x86/kernel/fpu/signal.o
LD arch/x86/realmode/rm/realmode.elf
CC lib/crypto/mpi/generic_mpih-mul1.o
CC block/fops.o
RELOCS arch/x86/realmode/rm/realmode.relocs
OBJCOPY arch/x86/realmode/rm/realmode.bin
AS arch/x86/realmode/rmpiggy.o
AR arch/x86/realmode/built-in.a
AR arch/x86/platform/geode/built-in.a
CC arch/x86/mm/fault.o
CC fs/notify/inotify/inotify_user.o
AR net/ethernet/built-in.a
AS arch/x86/entry/entry.o
CC arch/x86/platform/efi/efi_32.o
AS arch/x86/entry/entry_32.o
CC lib/crypto/memneq.o
CC crypto/asymmetric_keys/public_key.o
CC arch/x86/events/amd/ibs.o
AR security/integrity/built-in.a
AR arch/x86/platform/iris/built-in.a
CC sound/core/sound.o
CC init/version.o
CC lib/zlib_inflate/infutil.o
CC sound/core/init.o
CC kernel/locking/rwsem.o
AS arch/x86/power/hibernate_asm_32.o
CC lib/zlib_deflate/deftree.o
AR fs/nfs_common/built-in.a
AS arch/x86/entry/vdso/vdso32/system_call.o
CC arch/x86/lib/insn.o
CC arch/x86/power/hibernate.o
AS arch/x86/entry/vdso/vdso32/sigreturn.o
CC arch/x86/pci/direct.o
CC arch/x86/entry/vdso/vdso32/vclock_gettime.o
AR init/built-in.a
CC lib/lzo/lzo1x_compress.o
CC arch/x86/events/intel/knc.o
CC block/partitions/efi.o
CC io_uring/rsrc.o
AS arch/x86/platform/efi/efi_stub_32.o
CC arch/x86/kernel/cpu/mtrr/mtrr.o
CC ipc/ipc_sysctl.o
CC lib/zlib_deflate/deflate_syms.o
CC net/sched/sch_generic.o
CC lib/lzo/lzo1x_decompress_safe.o
CC security/selinux/hooks.o
CC arch/x86/kernel/acpi/boot.o
CC lib/zlib_inflate/inftrees.o
CC arch/x86/kernel/cpu/mce/severity.o
CC fs/iomap/iter.o
AR drivers/leds/built-in.a
CC lib/crypto/mpi/generic_mpih-mul2.o
CC drivers/pci/msi/pcidev_msi.o
CC drivers/video/console/dummycon.o
CC arch/x86/lib/kaslr.o
CC arch/x86/mm/pat/memtype_interval.o
CC drivers/video/console/vgacon.o
CC lib/crypto/utils.o
CC lib/zlib_inflate/inflate_syms.o
CC lib/crypto/chacha.o
ASN.1 crypto/asymmetric_keys/x509.asn1.[ch]
CC security/keys/keyctl.o
ASN.1 crypto/asymmetric_keys/x509_akid.asn1.[ch]
CC crypto/asymmetric_keys/x509_loader.o
CC arch/x86/lib/memcpy_32.o
CC arch/x86/platform/efi/runtime-map.o
CC crypto/cipher.o
CC drivers/pci/msi/api.o
CC kernel/locking/percpu-rwsem.o
AR lib/zlib_deflate/built-in.a
CC arch/x86/kernel/fpu/xstate.o
CC kernel/locking/spinlock.o
AS arch/x86/lib/memmove_32.o
CC sound/core/seq/seq_memory.o
CC arch/x86/lib/misc.o
CC kernel/power/main.o
CC arch/x86/lib/pc-conf-reg.o
CC kernel/printk/printk.o
CC ipc/mqueue.o
CC arch/x86/entry/vdso/vdso32/vgetcpu.o
CC kernel/printk/printk_safe.o
AR arch/x86/power/built-in.a
CC kernel/locking/osq_lock.o
AR fs/notify/inotify/built-in.a
AR lib/lzo/built-in.a
AR fs/notify/fanotify/built-in.a
CC crypto/compress.o
CC crypto/asymmetric_keys/x509_public_key.o
CC fs/notify/fsnotify.o
HOSTCC arch/x86/entry/vdso/vdso2c
CC arch/x86/pci/mmconfig-shared.o
CC arch/x86/kernel/acpi/sleep.o
CC kernel/power/console.o
CC kernel/power/process.o
AR lib/zlib_inflate/built-in.a
CC drivers/video/backlight/backlight.o
AS arch/x86/lib/putuser.o
CC kernel/power/suspend.o
CC arch/x86/events/intel/lbr.o
AS arch/x86/lib/retpoline.o
CC arch/x86/lib/string_32.o
CC lib/crypto/mpi/generic_mpih-mul3.o
ASN.1 crypto/asymmetric_keys/pkcs7.asn1.[ch]
AR drivers/video/fbdev/core/built-in.a
CC arch/x86/events/amd/uncore.o
CC net/core/request_sock.o
AR drivers/video/fbdev/omap/built-in.a
CC arch/x86/kernel/cpu/mtrr/if.o
AS arch/x86/kernel/acpi/wakeup_32.o
CC arch/x86/lib/strstr_32.o
AR drivers/video/fbdev/omap2/omapfb/dss/built-in.a
CC security/keys/permission.o
AR drivers/video/fbdev/omap2/omapfb/displays/built-in.a
CC block/bio.o
AR drivers/video/fbdev/omap2/omapfb/built-in.a
AR drivers/video/fbdev/omap2/built-in.a
CC arch/x86/lib/usercopy.o
AR drivers/video/fbdev/built-in.a
CC io_uring/notif.o
AR arch/x86/mm/pat/built-in.a
CC net/netlink/af_netlink.o
CC arch/x86/mm/ioremap.o
AR block/partitions/built-in.a
CC lib/crypto/aes.o
CC fs/iomap/buffered-io.o
CC arch/x86/kernel/cpu/mce/genpool.o
CC mm/oom_kill.o
CC arch/x86/kernel/cpu/mtrr/generic.o
CC arch/x86/entry/vdso/vdso32-setup.o
CC kernel/locking/qspinlock.o
CC arch/x86/pci/fixup.o
CC drivers/pci/msi/msi.o
CC arch/x86/kernel/cpu/mtrr/cleanup.o
CC crypto/asymmetric_keys/pkcs7_trust.o
CC arch/x86/kernel/cpu/mtrr/amd.o
CC arch/x86/lib/usercopy_32.o
AR arch/x86/platform/efi/built-in.a
CC arch/x86/platform/intel/iosf_mbi.o
CC kernel/locking/rtmutex_api.o
AR arch/x86/platform/intel-mid/built-in.a
CC net/sched/sch_mq.o
AR drivers/video/console/built-in.a
CC drivers/pci/pcie/portdrv.o
CC arch/x86/kernel/cpu/mtrr/cyrix.o
CC sound/core/seq/seq_queue.o
VDSO arch/x86/entry/vdso/vdso32.so.dbg
CC arch/x86/pci/acpi.o
OBJCOPY arch/x86/entry/vdso/vdso32.so
VDSO2C arch/x86/entry/vdso/vdso-image-32.c
CC lib/crypto/mpi/generic_mpih-rshift.o
CC arch/x86/entry/vdso/vdso-image-32.o
CC kernel/printk/nbcon.o
CC arch/x86/kernel/acpi/cstate.o
CC lib/crypto/arc4.o
CC fs/notify/notification.o
CC kernel/printk/printk_ringbuffer.o
CC arch/x86/lib/msr-smp.o
CC fs/iomap/direct-io.o
CC security/keys/process_keys.o
CC crypto/asymmetric_keys/pkcs7_verify.o
CC security/keys/request_key.o
CC fs/notify/group.o
AR drivers/video/backlight/built-in.a
CC arch/x86/kernel/apic/apic.o
CC drivers/video/aperture.o
CC security/selinux/selinuxfs.o
CC arch/x86/kernel/cpu/mce/intel.o
AR arch/x86/kernel/fpu/built-in.a
AR arch/x86/entry/vdso/built-in.a
CC arch/x86/entry/syscall_32.o
CC kernel/irq/irqdesc.o
CC arch/x86/kernel/cpu/mtrr/centaur.o
AR drivers/pci/pwrctrl/built-in.a
CC mm/fadvise.o
CC net/core/skbuff.o
CC arch/x86/mm/extable.o
CC arch/x86/lib/cache-smp.o
CC fs/quota/dquot.o
CC kernel/power/hibernate.o
CC ipc/namespace.o
AR arch/x86/events/amd/built-in.a
CC kernel/irq/handle.o
CC arch/x86/events/zhaoxin/core.o
AR arch/x86/kernel/acpi/built-in.a
CC sound/core/memory.o
AR arch/x86/platform/intel/built-in.a
CC drivers/pci/pcie/rcec.o
CC crypto/asymmetric_keys/x509.asn1.o
CC lib/crypto/mpi/generic_mpih-sub1.o
AR arch/x86/platform/intel-quark/built-in.a
CC arch/x86/lib/msr.o
AR arch/x86/platform/olpc/built-in.a
CC crypto/asymmetric_keys/x509_akid.asn1.o
AR arch/x86/platform/scx200/built-in.a
AR arch/x86/platform/ts5500/built-in.a
CC crypto/asymmetric_keys/x509_cert_parser.o
AR arch/x86/platform/uv/built-in.a
CC security/selinux/netlink.o
AR arch/x86/platform/built-in.a
CC fs/quota/quota_v2.o
CC security/selinux/nlmsgtab.o
CC drivers/pci/msi/irqdomain.o
AR sound/i2c/other/built-in.a
CC kernel/rcu/update.o
AR sound/i2c/built-in.a
CC security/keys/request_key_auth.o
CC sound/core/seq/seq_fifo.o
CC fs/proc/task_mmu.o
CC arch/x86/events/intel/p4.o
CC io_uring/tctx.o
CC lib/lz4/lz4_decompress.o
CC kernel/locking/qrwlock.o
CC arch/x86/pci/legacy.o
CC lib/zstd/zstd_decompress_module.o
CC arch/x86/kernel/cpu/mce/amd.o
CC lib/xz/xz_dec_syms.o
CC fs/notify/mark.o
CC net/sched/sch_frag.o
CC arch/x86/kernel/cpu/mtrr/legacy.o
CC drivers/video/cmdline.o
CC net/core/datagram.o
CC drivers/pci/hotplug/pci_hotplug_core.o
CC kernel/irq/manage.o
CC ipc/mq_sysctl.o
CC block/elevator.o
CC kernel/rcu/sync.o
CC lib/crypto/mpi/generic_mpih-add1.o
CC crypto/asymmetric_keys/pkcs7.asn1.o
CC lib/zstd/decompress/huf_decompress.o
CC kernel/power/snapshot.o
CC mm/maccess.o
CC lib/xz/xz_dec_stream.o
CC crypto/asymmetric_keys/pkcs7_parser.o
CC arch/x86/events/intel/p6.o
CC drivers/pci/pcie/bwctrl.o
AR arch/x86/kernel/cpu/mtrr/built-in.a
AR kernel/locking/built-in.a
CC arch/x86/events/core.o
CC arch/x86/entry/common.o
AR sound/drivers/opl3/built-in.a
CC arch/x86/mm/mmap.o
AR sound/drivers/opl4/built-in.a
AR sound/drivers/mpu401/built-in.a
AR sound/drivers/vx/built-in.a
CC sound/core/seq/seq_prioq.o
AR sound/isa/ad1816a/built-in.a
AR sound/drivers/pcsp/built-in.a
AR sound/isa/ad1848/built-in.a
AR sound/drivers/built-in.a
CC kernel/rcu/srcutree.o
AR sound/isa/cs423x/built-in.a
CC security/keys/user_defined.o
CC arch/x86/events/probe.o
AR sound/isa/es1688/built-in.a
AR sound/isa/galaxy/built-in.a
AR sound/isa/gus/built-in.a
CC drivers/pci/hotplug/acpi_pcihp.o
CC kernel/printk/sysctl.o
AR sound/isa/msnd/built-in.a
AR arch/x86/events/zhaoxin/built-in.a
AR sound/isa/opti9xx/built-in.a
CC arch/x86/events/utils.o
AR sound/isa/sb/built-in.a
CC arch/x86/pci/irq.o
AR sound/isa/wavefront/built-in.a
AS arch/x86/lib/msr-reg.o
AR sound/isa/wss/built-in.a
AR sound/isa/built-in.a
CC arch/x86/pci/common.o
CC arch/x86/lib/msr-reg-export.o
AR ipc/built-in.a
CC arch/x86/kernel/cpu/mce/threshold.o
AR net/bpf/built-in.a
AR drivers/pci/msi/built-in.a
CC net/core/stream.o
CC kernel/power/swap.o
CC fs/iomap/fiemap.o
AS arch/x86/lib/hweight.o
CC kernel/power/user.o
CC arch/x86/lib/iomem.o
CC io_uring/filetable.o
CC drivers/video/nomodeset.o
CC block/blk-core.o
CC lib/xz/xz_dec_lzma2.o
AR kernel/printk/built-in.a
CC block/blk-sysfs.o
AR crypto/asymmetric_keys/built-in.a
CC crypto/algapi.o
CC net/netlink/genetlink.o
CC lib/crypto/mpi/mpicoder.o
CC fs/iomap/seek.o
CC fs/iomap/swapfile.o
CC arch/x86/kernel/apic/apic_common.o
CC fs/notify/fdinfo.o
CC arch/x86/kernel/cpu/microcode/core.o
CC arch/x86/mm/pgtable.o
CC lib/dim/dim.o
CC mm/page-writeback.o
CC kernel/irq/spurious.o
CC drivers/pci/pcie/aspm.o
CC sound/core/seq/seq_timer.o
CC arch/x86/events/intel/pt.o
CC security/keys/proc.o
CC arch/x86/lib/atomic64_32.o
CC net/sched/sch_api.o
CC drivers/video/hdmi.o
AR lib/lz4/built-in.a
CC net/sched/sch_blackhole.o
AS arch/x86/entry/thunk.o
AR drivers/pci/hotplug/built-in.a
CC net/netlink/policy.o
CC arch/x86/lib/inat.o
AR arch/x86/entry/built-in.a
CC arch/x86/events/intel/uncore.o
CC fs/kernfs/mount.o
AR arch/x86/lib/built-in.a
AR arch/x86/lib/lib.a
CC sound/core/control.o
CC net/core/scm.o
CC lib/crypto/gf128mul.o
CC lib/dim/net_dim.o
CC fs/proc/inode.o
CC arch/x86/kernel/apic/apic_noop.o
CC arch/x86/kernel/apic/ipi.o
CC fs/quota/quota_tree.o
CC lib/xz/xz_dec_bcj.o
CC lib/zstd/decompress/zstd_ddict.o
CC kernel/power/poweroff.o
AR sound/pci/ac97/built-in.a
CC io_uring/rw.o
AR sound/pci/ali5451/built-in.a
CC lib/crypto/mpi/mpi-add.o
CC kernel/irq/resend.o
AR drivers/pci/controller/dwc/built-in.a
AR sound/pci/asihpi/built-in.a
AR drivers/pci/controller/mobiveil/built-in.a
AR sound/pci/au88x0/built-in.a
AR fs/iomap/built-in.a
AR sound/pci/aw2/built-in.a
AR fs/notify/built-in.a
AR drivers/pci/controller/plda/built-in.a
CC sound/core/misc.o
AR drivers/pci/controller/built-in.a
CC security/selinux/netif.o
AR sound/pci/ctxfi/built-in.a
CC security/selinux/netnode.o
CC drivers/pci/pcie/pme.o
AR sound/pci/ca0106/built-in.a
AR sound/pci/cs46xx/built-in.a
CC io_uring/net.o
AR arch/x86/kernel/cpu/mce/built-in.a
CC sound/core/device.o
AR sound/pci/cs5535audio/built-in.a
CC net/ethtool/ioctl.o
AR sound/pci/lola/built-in.a
AR sound/pci/lx6464es/built-in.a
CC lib/zstd/decompress/zstd_decompress.o
CC net/netfilter/core.o
AR sound/pci/echoaudio/built-in.a
CC arch/x86/pci/early.o
AR sound/pci/emu10k1/built-in.a
CC arch/x86/kernel/cpu/microcode/intel.o
CC sound/pci/hda/hda_bind.o
CC arch/x86/mm/physaddr.o
AR kernel/livepatch/built-in.a
AR sound/pci/ice1712/built-in.a
CC sound/pci/hda/hda_codec.o
CC mm/folio-compat.o
CC sound/core/seq/seq_system.o
CC arch/x86/events/intel/uncore_nhmex.o
CC kernel/sched/build_policy.o
CC net/core/gen_stats.o
CC lib/fonts/fonts.o
CC security/keys/sysctl.o
AR kernel/power/built-in.a
CC sound/core/info.o
AR drivers/video/built-in.a
CC kernel/irq/chip.o
AR lib/xz/built-in.a
CC kernel/irq/dummychip.o
AR sound/ppc/built-in.a
CC arch/x86/events/rapl.o
CC arch/x86/kernel/cpu/microcode/amd.o
CC crypto/scatterwalk.o
CC block/blk-flush.o
CC arch/x86/kernel/apic/vector.o
CC fs/kernfs/inode.o
CC net/netfilter/nf_log.o
CC security/security.o
CC fs/proc/root.o
CC lib/crypto/mpi/mpi-bit.o
CC lib/fonts/font_8x16.o
CC sound/pci/hda/hda_jack.o
CC arch/x86/pci/bus_numa.o
CC net/ethtool/common.o
CC arch/x86/mm/tlb.o
CC kernel/sched/build_utility.o
CC lib/dim/rdma_dim.o
CC kernel/rcu/tree.o
CC sound/core/seq/seq_ports.o
AR drivers/pci/pcie/built-in.a
CC kernel/rcu/rcu_segcblist.o
AR drivers/pci/switch/built-in.a
CC drivers/pci/access.o
CC fs/quota/quota.o
CC security/keys/keyctl_pkey.o
AR sound/arm/built-in.a
AR drivers/idle/built-in.a
CC lib/argv_split.o
CC arch/x86/kernel/cpu/cacheinfo.o
CC net/sched/cls_api.o
CC lib/zstd/decompress/zstd_decompress_block.o
AR net/netlink/built-in.a
CC arch/x86/kernel/kprobes/core.o
CC net/netfilter/nf_queue.o
CC lib/crypto/mpi/mpi-cmp.o
AR lib/fonts/built-in.a
CC sound/core/seq/seq_info.o
CC crypto/proc.o
AR lib/dim/built-in.a
CC arch/x86/kernel/kprobes/opt.o
CC kernel/irq/devres.o
CC security/selinux/netport.o
CC lib/crypto/blake2s.o
CC mm/readahead.o
CC arch/x86/events/intel/uncore_snb.o
CC sound/core/seq/seq_dummy.o
CC arch/x86/pci/amd_bus.o
CC net/ipv4/netfilter/nf_defrag_ipv4.o
CC lib/crypto/blake2s-generic.o
CC arch/x86/mm/cpu_entry_area.o
CC fs/kernfs/dir.o
CC block/blk-settings.o
CC arch/x86/kernel/cpu/scattered.o
CC net/ethtool/netlink.o
AR sound/sh/built-in.a
CC net/core/gen_estimator.o
AR arch/x86/kernel/cpu/microcode/built-in.a
CC lib/crypto/sha1.o
CC net/core/net_namespace.o
AR sound/synth/emux/built-in.a
AR sound/synth/built-in.a
CC fs/proc/base.o
CC lib/crypto/sha256.o
CC mm/swap.o
CC security/selinux/status.o
AR security/keys/built-in.a
AR drivers/char/ipmi/built-in.a
CC sound/core/isadma.o
CC lib/crypto/mpi/mpi-sub-ui.o
CC net/ethtool/bitset.o
CC mm/truncate.o
CC drivers/acpi/acpica/dsargs.o
CC kernel/irq/autoprobe.o
CC net/sched/act_api.o
CC lib/zstd/zstd_common_module.o
CC drivers/pci/bus.o
CC fs/sysfs/file.o
CC arch/x86/mm/maccess.o
CC net/core/secure_seq.o
CC security/selinux/ss/ebitmap.o
AR sound/core/seq/built-in.a
CC crypto/aead.o
CC kernel/dma/mapping.o
CC kernel/entry/common.o
CC arch/x86/kernel/cpu/topology_common.o
CC net/ipv4/netfilter/nf_reject_ipv4.o
CC io_uring/poll.o
CC net/ipv4/netfilter/ip_tables.o
CC io_uring/eventfd.o
CC drivers/acpi/acpica/dscontrol.o
CC sound/core/vmaster.o
AR arch/x86/kernel/kprobes/built-in.a
CC arch/x86/mm/pgprot.o
CC net/netfilter/nf_sockopt.o
CC arch/x86/kernel/apic/init.o
AR arch/x86/pci/built-in.a
CC fs/quota/kqid.o
CC fs/sysfs/dir.o
CC security/lsm_audit.o
AR sound/usb/misc/built-in.a
AR sound/usb/usx2y/built-in.a
CC kernel/irq/irqdomain.o
AR sound/usb/caiaq/built-in.a
AR sound/usb/6fire/built-in.a
AR sound/usb/hiface/built-in.a
AR sound/usb/bcd2000/built-in.a
AR sound/usb/built-in.a
CC net/sched/sch_fifo.o
CC lib/crypto/mpi/mpi-div.o
CC block/blk-ioc.o
CC security/selinux/ss/hashtab.o
CC net/ipv4/route.o
CC arch/x86/events/intel/uncore_snbep.o
CC drivers/pnp/pnpacpi/core.o
CC drivers/acpi/acpica/dsdebug.o
CC fs/quota/netlink.o
CC arch/x86/kernel/cpu/topology_ext.o
CC sound/pci/hda/hda_auto_parser.o
CC crypto/geniv.o
CC arch/x86/kernel/apic/hw_nmi.o
CC drivers/pci/probe.o
AR drivers/acpi/pmic/built-in.a
CC net/ipv4/inetpeer.o
CC net/ethtool/strset.o
CC fs/kernfs/file.o
CC fs/sysfs/symlink.o
CC net/netfilter/utils.o
CC sound/core/ctljack.o
CC arch/x86/mm/pgtable_32.o
CC kernel/entry/syscall_user_dispatch.o
CC io_uring/uring_cmd.o
CC io_uring/openclose.o
CC drivers/pnp/core.o
CC net/ipv4/netfilter/iptable_filter.o
CC sound/core/jack.o
CC arch/x86/kernel/apic/io_apic.o
CC drivers/acpi/acpica/dsfield.o
CC mm/vmscan.o
CC lib/crypto/mpi/mpi-mod.o
CC arch/x86/kernel/cpu/topology_amd.o
CC kernel/module/main.o
CC net/core/flow_dissector.o
CC drivers/acpi/dptf/int340x_thermal.o
CC lib/crypto/mpi/mpi-mul.o
CC block/blk-map.o
CC block/blk-merge.o
CC block/blk-timeout.o
CC drivers/pnp/pnpacpi/rsparser.o
CC security/selinux/ss/symtab.o
CC kernel/irq/proc.o
CC lib/zstd/common/debug.o
CC lib/zstd/common/entropy_common.o
CC arch/x86/events/msr.o
CC net/sched/cls_cgroup.o
AR fs/quota/built-in.a
CC drivers/acpi/acpica/dsinit.o
CC fs/devpts/inode.o
AR kernel/entry/built-in.a
CC arch/x86/mm/iomap_32.o
CC kernel/time/time.o
CC fs/kernfs/symlink.o
CC security/selinux/ss/sidtab.o
CC net/core/sysctl_net_core.o
CC lib/zstd/common/error_private.o
CC kernel/futex/core.o
CC lib/zstd/common/fse_decompress.o
CC kernel/cgroup/cgroup.o
CC arch/x86/kernel/cpu/common.o
CC fs/sysfs/mount.o
CC crypto/lskcipher.o
CC fs/proc/generic.o
AR drivers/acpi/dptf/built-in.a
CC kernel/cgroup/rstat.o
CC net/xfrm/xfrm_policy.o
CC sound/core/hwdep.o
CC io_uring/sqpoll.o
CC net/xfrm/xfrm_state.o
CC net/xfrm/xfrm_hash.o
CC net/ipv4/protocol.o
CC sound/pci/hda/hda_sysfs.o
CC lib/crypto/mpi/mpih-cmp.o
CC drivers/acpi/x86/apple.o
CC drivers/acpi/acpica/dsmethod.o
CC net/ipv4/ip_input.o
CC security/selinux/ss/avtab.o
CC sound/pci/hda/hda_controller.o
CC net/ethtool/linkinfo.o
CC net/ipv4/netfilter/iptable_mangle.o
CC net/netfilter/nfnetlink.o
CC kernel/irq/migration.o
CC lib/zstd/common/zstd_common.o
CC net/ipv4/netfilter/ipt_REJECT.o
CC arch/x86/mm/hugetlbpage.o
AR lib/zstd/built-in.a
AR drivers/amba/built-in.a
LDS arch/x86/kernel/vmlinux.lds
AR drivers/pnp/pnpacpi/built-in.a
CC drivers/pnp/card.o
CC kernel/time/timer.o
AR fs/kernfs/built-in.a
AR fs/devpts/built-in.a
CC sound/pci/hda/hda_proc.o
AR drivers/clk/actions/built-in.a
AR drivers/clk/analogbits/built-in.a
AR sound/firewire/built-in.a
CC sound/core/timer.o
CC lib/bug.o
AR drivers/clk/bcm/built-in.a
CC kernel/dma/direct.o
AR drivers/clk/imgtec/built-in.a
AR drivers/clk/imx/built-in.a
CC drivers/acpi/acpica/dsmthdat.o
AR drivers/clk/ingenic/built-in.a
AR drivers/clk/mediatek/built-in.a
CC drivers/pci/host-bridge.o
AR drivers/clk/microchip/built-in.a
AR drivers/clk/mstar/built-in.a
AR drivers/clk/mvebu/built-in.a
AR drivers/clk/ralink/built-in.a
CC drivers/acpi/x86/cmos_rtc.o
CC fs/sysfs/group.o
AR drivers/clk/renesas/built-in.a
CC lib/buildid.o
CC lib/crypto/mpi/mpih-div.o
AR drivers/clk/socfpga/built-in.a
CC kernel/futex/syscalls.o
CC lib/clz_tab.o
AR drivers/clk/sophgo/built-in.a
AR drivers/clk/sprd/built-in.a
CC net/core/dev.o
AR drivers/clk/starfive/built-in.a
CC fs/proc/array.o
AR drivers/clk/sunxi-ng/built-in.a
AR drivers/clk/ti/built-in.a
AR drivers/clk/versatile/built-in.a
AR drivers/clk/xilinx/built-in.a
CC drivers/dma/dw/core.o
AR drivers/clk/built-in.a
CC kernel/irq/cpuhotplug.o
CC block/blk-lib.o
CC net/sched/ematch.o
CC kernel/futex/pi.o
CC kernel/dma/ops_helpers.o
CC crypto/skcipher.o
CC drivers/acpi/acpica/dsobject.o
CC arch/x86/events/intel/uncore_discovery.o
AR drivers/soc/apple/built-in.a
CC arch/x86/kernel/apic/msi.o
CC arch/x86/mm/dump_pagetables.o
AR drivers/soc/aspeed/built-in.a
CC crypto/seqiv.o
AR drivers/soc/bcm/built-in.a
CC arch/x86/events/intel/cstate.o
AR drivers/soc/fsl/built-in.a
AS arch/x86/kernel/head_32.o
CC mm/shrinker.o
AR drivers/soc/fujitsu/built-in.a
AR drivers/soc/hisilicon/built-in.a
AR drivers/soc/imx/built-in.a
CC kernel/irq/pm.o
AR drivers/soc/ixp4xx/built-in.a
AR drivers/soc/loongson/built-in.a
AR drivers/soc/mediatek/built-in.a
AR drivers/soc/microchip/built-in.a
AR drivers/soc/nuvoton/built-in.a
AR drivers/soc/pxa/built-in.a
AR drivers/soc/amlogic/built-in.a
AR drivers/soc/qcom/built-in.a
CC net/unix/af_unix.o
AR drivers/soc/renesas/built-in.a
CC net/ethtool/linkmodes.o
AR drivers/soc/rockchip/built-in.a
AR drivers/soc/sunxi/built-in.a
AR drivers/soc/ti/built-in.a
AR drivers/soc/versatile/built-in.a
CC drivers/pnp/driver.o
AR drivers/soc/xilinx/built-in.a
AR drivers/soc/built-in.a
CC drivers/acpi/x86/lpss.o
CC drivers/pci/remove.o
CC arch/x86/kernel/cpu/rdrand.o
CC drivers/pnp/resource.o
AR kernel/sched/built-in.a
CC security/selinux/ss/policydb.o
CC drivers/acpi/x86/s2idle.o
AR kernel/rcu/built-in.a
CC drivers/dma/hsu/hsu.o
AR fs/sysfs/built-in.a
CC kernel/time/hrtimer.o
CC kernel/futex/requeue.o
CC drivers/acpi/acpica/dsopcode.o
CC net/ethtool/rss.o
CC arch/x86/kernel/cpu/match.o
CC [M] net/ipv4/netfilter/iptable_nat.o
CC arch/x86/kernel/cpu/bugs.o
CC kernel/dma/remap.o
CC net/unix/garbage.o
CC drivers/acpi/x86/utils.o
CC kernel/module/strict_rwx.o
CC net/netfilter/nfnetlink_log.o
CC lib/crypto/mpi/mpih-mul.o
CC block/blk-mq.o
AR sound/pci/korg1212/built-in.a
CC drivers/pci/pci.o
CC drivers/acpi/tables.o
CC fs/proc/fd.o
CC mm/shmem.o
CC io_uring/xattr.o
CC net/ethtool/linkstate.o
CC sound/pci/hda/hda_hwdep.o
CC drivers/dma/dw/dw.o
CC arch/x86/kernel/apic/probe_32.o
CC arch/x86/mm/highmem_32.o
CC kernel/irq/msi.o
CC drivers/acpi/acpica/dspkginit.o
CC kernel/irq/affinity.o
CC kernel/time/sleep_timeout.o
CC drivers/dma/dw/idma32.o
AR net/sched/built-in.a
CC sound/core/hrtimer.o
AR net/ipv4/netfilter/built-in.a
CC sound/core/pcm.o
CC fs/proc/proc_tty.o
CC lib/cmdline.o
CC kernel/module/kmod.o
CC drivers/acpi/x86/blacklist.o
AR arch/x86/events/intel/built-in.a
CC kernel/irq/matrix.o
AR arch/x86/events/built-in.a
CC crypto/echainiv.o
CC sound/pci/hda/hda_intel.o
AR kernel/dma/built-in.a
CC lib/crypto/mpi/mpi-pow.o
CC kernel/futex/waitwake.o
CC net/unix/sysctl_net_unix.o
CC drivers/virtio/virtio.o
AR sound/pci/mixart/built-in.a
CC arch/x86/kernel/cpu/aperfmperf.o
CC kernel/time/timekeeping.o
CC lib/cpumask.o
CC drivers/pci/pci-driver.o
CC drivers/acpi/acpica/dsutils.o
AR arch/x86/kernel/apic/built-in.a
CC lib/ctype.o
CC security/selinux/ss/services.o
CC kernel/cgroup/namespace.o
CC lib/crypto/mpi/mpiutil.o
CC net/netfilter/nf_conntrack_core.o
AR drivers/dma/hsu/built-in.a
CC security/device_cgroup.o
CC drivers/pnp/manager.o
CC lib/dec_and_lock.o
CC net/ipv6/netfilter/ip6_tables.o
CC drivers/acpi/osi.o
CC kernel/cgroup/cgroup-v1.o
CC net/ipv6/af_inet6.o
AR drivers/acpi/x86/built-in.a
CC arch/x86/kernel/head32.o
CC io_uring/nop.o
AR arch/x86/mm/built-in.a
CC crypto/ahash.o
CC crypto/shash.o
CC net/ipv4/ip_fragment.o
AR sound/pci/nm256/built-in.a
CC security/selinux/ss/conditional.o
CC drivers/dma/dw/acpi.o
CC drivers/tty/vt/vt_ioctl.o
CC fs/proc/cmdline.o
CC drivers/tty/hvc/hvc_console.o
CC net/ethtool/debug.o
CC drivers/char/hw_random/core.o
CC drivers/acpi/acpica/dswexec.o
CC kernel/module/tree_lookup.o
CC drivers/acpi/osl.o
CC fs/netfs/buffered_read.o
CC sound/core/pcm_native.o
CC net/packet/af_packet.o
AR kernel/futex/built-in.a
CC block/blk-mq-tag.o
CC sound/core/pcm_lib.o
CC drivers/virtio/virtio_ring.o
CC block/blk-stat.o
CC drivers/tty/serial/serial_core.o
CC drivers/tty/serial/8250/8250_core.o
AR drivers/tty/ipwireless/built-in.a
CC kernel/module/kallsyms.o
CC drivers/pnp/support.o
CC sound/core/pcm_misc.o
CC arch/x86/kernel/ebda.o
AR lib/crypto/mpi/built-in.a
AR lib/crypto/built-in.a
CC lib/decompress.o
CC arch/x86/kernel/cpu/cpuid-deps.o
CC lib/decompress_bunzip2.o
CC net/ipv6/anycast.o
CC fs/proc/consoles.o
CC drivers/acpi/acpica/dswload.o
AR drivers/dma/dw/built-in.a
AR drivers/dma/idxd/built-in.a
AR drivers/dma/amd/built-in.a
AR kernel/irq/built-in.a
CC net/core/dev_addr_lists.o
AR drivers/dma/mediatek/built-in.a
AR drivers/dma/qcom/built-in.a
AR drivers/dma/stm32/built-in.a
AR drivers/dma/ti/built-in.a
AR drivers/dma/xilinx/built-in.a
CC io_uring/fs.o
CC net/xfrm/xfrm_input.o
CC drivers/dma/dmaengine.o
CC net/ipv4/ip_forward.o
CC net/netfilter/nf_conntrack_standalone.o
CC drivers/char/hw_random/intel-rng.o
CC arch/x86/kernel/cpu/umwait.o
AR drivers/tty/hvc/built-in.a
CC mm/util.o
CC arch/x86/kernel/platform-quirks.o
CC crypto/akcipher.o
CC drivers/pnp/interface.o
AR net/dsa/built-in.a
CC arch/x86/kernel/process_32.o
CC drivers/acpi/acpica/dswload2.o
AR sound/pci/hda/built-in.a
AR net/unix/built-in.a
CC drivers/char/agp/backend.o
CC drivers/char/mem.o
AR sound/pci/oxygen/built-in.a
CC net/ethtool/wol.o
AR sound/pci/pcxhr/built-in.a
AR sound/pci/riptide/built-in.a
AR sound/pci/rme9652/built-in.a
AR sound/pci/trident/built-in.a
AR sound/pci/ymfpci/built-in.a
AR sound/pci/vx222/built-in.a
CC drivers/tty/vt/vc_screen.o
AR sound/pci/built-in.a
AR drivers/iommu/amd/built-in.a
AR drivers/iommu/intel/built-in.a
CC fs/proc/cpuinfo.o
CC drivers/char/agp/generic.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
AR drivers/gpu/host1x/built-in.a
AR drivers/iommu/iommufd/built-in.a
CC kernel/module/procfs.o
AR drivers/iommu/riscv/built-in.a
CC drivers/iommu/iommu.o
CC drivers/connector/cn_queue.o
CC kernel/time/ntp.o
CC drivers/base/power/sysfs.o
CC drivers/block/loop.o
CC lib/decompress_inflate.o
CC drivers/char/hw_random/amd-rng.o
AR drivers/gpu/drm/tests/built-in.a
CC drivers/iommu/iommu-traces.o
AR drivers/gpu/drm/arm/built-in.a
AR drivers/gpu/drm/clients/built-in.a
CC drivers/gpu/drm/display/drm_display_helper_mod.o
CC drivers/tty/serial/8250/8250_platform.o
CC drivers/iommu/iommu-sysfs.o
CC drivers/acpi/acpica/dswscope.o
CC fs/ext4/balloc.o
CC net/ipv6/netfilter/ip6table_filter.o
AR sound/sparc/built-in.a
AR sound/spi/built-in.a
CC net/ethtool/features.o
CC security/selinux/ss/mls.o
CC fs/netfs/buffered_write.o
CC drivers/pci/search.o
MKCAP arch/x86/kernel/cpu/capflags.c
CC kernel/cgroup/freezer.o
CC io_uring/splice.o
CC drivers/pnp/quirks.o
CC drivers/gpu/drm/display/drm_dp_dual_mode_helper.o
CC fs/proc/devices.o
AR drivers/gpu/vga/built-in.a
CC drivers/char/random.o
CC drivers/acpi/acpica/dswstate.o
CC kernel/module/sysfs.o
CC crypto/sig.o
CC lib/decompress_unlz4.o
CC drivers/tty/serial/8250/8250_pnp.o
CC drivers/dma/virt-dma.o
CC drivers/base/firmware_loader/builtin/main.o
CC drivers/base/power/generic_ops.o
CC net/ipv6/ip6_output.o
CC mm/mmzone.o
CC drivers/tty/vt/selection.o
CC net/xfrm/xfrm_output.o
CC drivers/char/hw_random/geode-rng.o
CC fs/jbd2/transaction.o
CC net/netfilter/nf_conntrack_expect.o
CC fs/ramfs/inode.o
CC net/netfilter/nf_conntrack_helper.o
CC fs/hugetlbfs/inode.o
CC net/xfrm/xfrm_sysctl.o
CC kernel/time/clocksource.o
CC drivers/virtio/virtio_anchor.o
CC net/ipv4/ip_options.o
CC fs/ramfs/file-mmu.o
AR drivers/base/firmware_loader/builtin/built-in.a
CC drivers/char/agp/isoch.o
CC drivers/base/firmware_loader/main.o
CC drivers/connector/connector.o
CC drivers/acpi/acpica/evevent.o
CC drivers/block/virtio_blk.o
CC drivers/pci/rom.o
CC drivers/base/power/common.o
CC lib/decompress_unlzma.o
CC drivers/pci/setup-res.o
CC fs/proc/interrupts.o
CC drivers/connector/cn_proc.o
CC block/blk-mq-sysfs.o
CC drivers/pnp/system.o
CC io_uring/sync.o
CC net/ethtool/privflags.o
CC mm/vmstat.o
CC sound/core/pcm_memory.o
AR kernel/module/built-in.a
CC drivers/acpi/acpica/evgpe.o
CC drivers/tty/serial/8250/8250_rsa.o
CC drivers/dma/acpi-dma.o
CC drivers/gpu/drm/display/drm_dp_helper.o
CC fs/netfs/direct_read.o
CC drivers/char/hw_random/via-rng.o
CC drivers/iommu/dma-iommu.o
CC kernel/cgroup/legacy_freezer.o
CC drivers/virtio/virtio_pci_modern_dev.o
CC crypto/kpp.o
CC drivers/iommu/iova.o
CC net/ipv6/netfilter/ip6table_mangle.o
CC security/selinux/ss/context.o
CC net/ipv6/netfilter/nf_defrag_ipv6_hooks.o
CC drivers/tty/vt/keyboard.o
CC fs/fat/cache.o
CC fs/proc/loadavg.o
AR fs/ramfs/built-in.a
AR sound/parisc/built-in.a
CC net/core/dst.o
CC drivers/base/power/qos.o
AR drivers/pnp/built-in.a
CC drivers/char/agp/amd64-agp.o
CC drivers/acpi/utils.o
CC kernel/cgroup/pids.o
CC kernel/time/jiffies.o
AR drivers/char/hw_random/built-in.a
CC kernel/cgroup/rdma.o
CC net/ipv6/ip6_input.o
CC drivers/acpi/acpica/evgpeblk.o
CC block/blk-mq-cpumap.o
CC fs/jbd2/commit.o
CC lib/decompress_unlzo.o
CC drivers/pci/irq.o
CC fs/jbd2/recovery.o
AR drivers/base/firmware_loader/built-in.a
CC drivers/acpi/reboot.o
CC fs/isofs/namei.o
CC drivers/tty/serial/8250/8250_port.o
CC sound/core/memalloc.o
AR drivers/dma/built-in.a
CC drivers/base/power/runtime.o
CC fs/isofs/inode.o
CC io_uring/msg_ring.o
CC net/netfilter/nf_conntrack_proto.o
CC fs/netfs/direct_write.o
CC kernel/time/timer_list.o
AR net/packet/built-in.a
CC net/xfrm/xfrm_replay.o
CC fs/proc/meminfo.o
CC drivers/tty/tty_io.o
CC fs/ext4/bitmap.o
CC net/ipv4/ip_output.o
CC drivers/virtio/virtio_pci_legacy_dev.o
AR drivers/connector/built-in.a
CC drivers/acpi/acpica/evgpeinit.o
CC arch/x86/kernel/cpu/powerflags.o
AR drivers/block/built-in.a
CC drivers/char/misc.o
CC net/ethtool/rings.o
ASN.1 crypto/rsapubkey.asn1.[ch]
ASN.1 crypto/rsaprivkey.asn1.[ch]
CC crypto/rsa.o
AR fs/hugetlbfs/built-in.a
CC fs/isofs/dir.o
CC fs/isofs/util.o
CC net/netfilter/nf_conntrack_proto_generic.o
CC fs/fat/dir.o
CC arch/x86/kernel/signal.o
CC fs/fat/fatent.o
CC fs/proc/stat.o
CC security/selinux/netlabel.o
CC drivers/tty/serial/serial_base_bus.o
CC kernel/cgroup/cpuset.o
CC block/blk-mq-sched.o
CC lib/decompress_unxz.o
CC drivers/char/agp/intel-agp.o
CC drivers/pci/vpd.o
CC drivers/acpi/acpica/evgpeutil.o
CC drivers/acpi/acpica/evglock.o
CC net/ipv6/netfilter/nf_conntrack_reasm.o
CC net/core/netevent.o
CC mm/backing-dev.o
CC drivers/char/agp/intel-gtt.o
AR drivers/iommu/built-in.a
CC block/ioctl.o
CC drivers/tty/vt/vt.o
CC drivers/base/power/wakeirq.o
CC drivers/base/power/main.o
CC kernel/time/timeconv.o
CC crypto/rsa_helper.o
CC fs/proc/uptime.o
CC drivers/virtio/virtio_pci_modern.o
CC net/netfilter/nf_conntrack_proto_tcp.o
CC fs/ext4/block_validity.o
CC sound/core/pcm_timer.o
CC net/ipv6/netfilter/nf_reject_ipv6.o
CC arch/x86/kernel/signal_32.o
CC net/core/neighbour.o
CC arch/x86/kernel/traps.o
CC drivers/acpi/acpica/evhandler.o
CC drivers/pci/setup-bus.o
CC lib/decompress_unzstd.o
CC io_uring/advise.o
CC kernel/trace/trace_clock.o
CC fs/netfs/iterator.o
CC arch/x86/kernel/cpu/topology.o
CC fs/jbd2/checkpoint.o
AR sound/pcmcia/vx/built-in.a
CC net/ethtool/channels.o
CC kernel/time/timecounter.o
AR sound/pcmcia/pdaudiocf/built-in.a
AR sound/pcmcia/built-in.a
CC drivers/gpu/drm/display/drm_dp_mst_topology.o
CC fs/nfs/client.o
CC crypto/rsa-pkcs1pad.o
CC kernel/time/alarmtimer.o
CC fs/nfs/dir.o
CC fs/isofs/rock.o
CC fs/isofs/export.o
CC arch/x86/kernel/cpu/proc.o
CC drivers/tty/serial/8250/8250_dma.o
CC net/xfrm/xfrm_device.o
CC net/sunrpc/auth_gss/auth_gss.o
CC drivers/acpi/acpica/evmisc.o
AR net/wireless/tests/built-in.a
CC net/wireless/core.o
CC kernel/trace/ring_buffer.o
CC fs/proc/util.o
COPY drivers/tty/vt/defkeymap.c
CC fs/exportfs/expfs.o
AR sound/mips/built-in.a
CC net/sunrpc/clnt.o
CC fs/proc/version.o
CC fs/proc/softirqs.o
CC sound/core/seq_device.o
CC lib/dump_stack.o
AR drivers/char/agp/built-in.a
CC drivers/char/virtio_console.o
AR security/selinux/built-in.a
AR security/built-in.a
CC fs/proc/namespaces.o
CC drivers/misc/eeprom/eeprom_93cx6.o
CC block/genhd.o
CC fs/ext4/dir.o
CC net/ipv6/addrconf.o
CC drivers/acpi/acpica/evregion.o
CC net/sunrpc/auth_gss/gss_generic_token.o
CC mm/mm_init.o
CC fs/fat/file.o
CC net/xfrm/xfrm_nat_keepalive.o
AR drivers/misc/cb710/built-in.a
CC net/sunrpc/xprt.o
CC io_uring/epoll.o
CC drivers/virtio/virtio_pci_common.o
AR drivers/misc/lis3lv02d/built-in.a
CC kernel/time/posix-timers.o
CC net/ipv6/netfilter/ip6t_ipv6header.o
CC crypto/rsassa-pkcs1.o
CC lib/earlycpio.o
CC fs/netfs/locking.o
CC net/xfrm/xfrm_algo.o
CC drivers/pci/vc.o
AR drivers/mfd/built-in.a
CC fs/ext4/ext4_jbd2.o
CC net/ipv6/addrlabel.o
CC drivers/tty/serial/8250/8250_dwlib.o
AR drivers/misc/eeprom/built-in.a
CC drivers/tty/serial/8250/8250_pcilib.o
AR fs/exportfs/built-in.a
CC fs/isofs/joliet.o
AR drivers/misc/cardreader/built-in.a
CC kernel/bpf/core.o
AR sound/core/built-in.a
AR drivers/misc/keba/built-in.a
AR drivers/misc/built-in.a
CC fs/jbd2/revoke.o
AR sound/soc/built-in.a
CC net/ethtool/coalesce.o
AR sound/atmel/built-in.a
CC sound/hda/hda_bus_type.o
CC drivers/acpi/acpica/evrgnini.o
CC mm/percpu.o
CC lib/extable.o
CC kernel/time/posix-cpu-timers.o
CC arch/x86/kernel/cpu/feat_ctl.o
CC net/ipv4/ip_sockglue.o
CC drivers/base/power/wakeup.o
CC net/sunrpc/auth_gss/gss_mech_switch.o
CC fs/proc/self.o
CC kernel/cgroup/misc.o
CC arch/x86/kernel/idt.o
CC net/netfilter/nf_conntrack_proto_udp.o
CC drivers/acpi/acpica/evsci.o
CC drivers/acpi/nvs.o
CC lib/flex_proportions.o
CC drivers/gpu/drm/ttm/ttm_tt.o
CC crypto/acompress.o
CC io_uring/statx.o
CC net/core/rtnetlink.o
CC drivers/pci/mmap.o
CC drivers/virtio/virtio_pci_legacy.o
CC fs/isofs/compress.o
CC kernel/trace/trace.o
CC fs/fat/inode.o
CC arch/x86/kernel/cpu/intel.o
CC sound/hda/hdac_bus.o
CC drivers/tty/serial/8250/8250_early.o
CC fs/netfs/main.o
CC drivers/tty/serial/8250/8250_exar.o
CC block/ioprio.o
CC drivers/acpi/acpica/evxface.o
CC fs/ext4/extents.o
CC kernel/cgroup/debug.o
CC fs/proc/thread_self.o
CC drivers/char/hpet.o
CC fs/jbd2/journal.o
CC lib/idr.o
CC net/ipv6/route.o
CC drivers/tty/vt/consolemap.o
CC net/ipv6/netfilter/ip6t_REJECT.o
CC net/xfrm/xfrm_user.o
CC drivers/tty/n_tty.o
CC kernel/events/core.o
CC drivers/gpu/drm/ttm/ttm_bo.o
CC net/ethtool/pause.o
CC fs/lockd/clntlock.o
CC drivers/pci/devres.o
CC kernel/time/posix-clock.o
CC drivers/acpi/acpica/evxfevnt.o
CC kernel/time/itimer.o
CC fs/lockd/clntproc.o
CC arch/x86/kernel/cpu/tsx.o
CC io_uring/timeout.o
CC crypto/scompress.o
CC drivers/virtio/virtio_pci_admin_legacy_io.o
CC fs/proc/proc_sysctl.o
CC io_uring/fdinfo.o
CC sound/hda/hdac_device.o
CC lib/iomem_copy.o
AR fs/isofs/built-in.a
CC drivers/acpi/acpica/evxfgpe.o
CC drivers/base/power/wakeup_stats.o
CC lib/irq_regs.o
AR kernel/cgroup/built-in.a
CC block/badblocks.o
CC net/sunrpc/socklib.o
CC net/sunrpc/xprtsock.o
CC drivers/gpu/drm/i915/i915_config.o
CC net/sunrpc/auth_gss/svcauth_gss.o
CC net/netfilter/nf_conntrack_proto_icmp.o
CC kernel/events/ring_buffer.o
CC drivers/tty/serial/8250/8250_lpss.o
CC lib/is_single_threaded.o
CC drivers/char/nvram.o
CC arch/x86/kernel/cpu/intel_epb.o
CC drivers/gpu/drm/i915/i915_driver.o
HOSTCC drivers/tty/vt/conmakehash
CC drivers/acpi/acpica/evxfregn.o
CC fs/proc/proc_net.o
CC drivers/base/power/trace.o
CC fs/fat/misc.o
CC drivers/gpu/drm/display/drm_dsc_helper.o
CC net/ipv4/inet_hashtables.o
CC drivers/pci/proc.o
CC drivers/virtio/virtio_input.o
CC drivers/gpu/drm/display/drm_hdcp_helper.o
CC drivers/tty/vt/defkeymap.o
CC lib/klist.o
CC fs/nfs/file.o
AR net/ipv6/netfilter/built-in.a
CC drivers/gpu/drm/ttm/ttm_bo_util.o
CC net/ethtool/eee.o
CC kernel/events/callchain.o
CC arch/x86/kernel/cpu/amd.o
CC kernel/time/clockevents.o
CC crypto/algboss.o
CC net/wireless/sysfs.o
CC mm/slab_common.o
CONMK drivers/tty/vt/consolemap_deftbl.c
CC drivers/tty/vt/consolemap_deftbl.o
CC block/blk-rq-qos.o
AR drivers/tty/vt/built-in.a
CC fs/netfs/misc.o
CC net/core/utils.o
CC drivers/acpi/acpica/exconcat.o
CC net/ethtool/tsinfo.o
CC sound/hda/hdac_sysfs.o
CC io_uring/cancel.o
CC fs/ext4/extents_status.o
CC drivers/tty/serial/8250/8250_mid.o
CC lib/kobject.o
CC arch/x86/kernel/irq.o
CC drivers/tty/serial/serial_ctrl.o
AR drivers/char/built-in.a
CC arch/x86/kernel/cpu/hygon.o
CC drivers/base/regmap/regmap.o
CC net/ipv4/inet_timewait_sock.o
AR kernel/bpf/built-in.a
CC net/ethtool/cabletest.o
AR drivers/base/power/built-in.a
CC fs/lockd/clntxdr.o
CC kernel/time/tick-common.o
CC kernel/events/hw_breakpoint.o
CC drivers/acpi/acpica/exconfig.o
CC fs/fat/nfs.o
CC drivers/virtio/virtio_dma_buf.o
CC kernel/events/uprobes.o
CC drivers/acpi/wakeup.o
CC fs/proc/kcore.o
CC net/netfilter/nf_conntrack_extend.o
CC fs/proc/vmcore.o
CC drivers/pci/pci-sysfs.o
CC drivers/gpu/drm/display/drm_hdmi_helper.o
AR drivers/nfc/built-in.a
CC drivers/base/regmap/regcache.o
CC drivers/gpu/drm/ttm/ttm_bo_vm.o
CC block/disk-events.o
CC net/ipv6/ip6_fib.o
CC net/core/link_watch.o
CC lib/kobject_uevent.o
AR drivers/base/test/built-in.a
CC drivers/tty/serial/8250/8250_pci.o
CC crypto/testmgr.o
CC drivers/acpi/acpica/exconvrt.o
CC arch/x86/kernel/cpu/centaur.o
CC drivers/acpi/acpica/excreate.o
CC sound/hda/hdac_regmap.o
AR fs/jbd2/built-in.a
CC net/wireless/radiotap.o
CC io_uring/waitid.o
CC fs/netfs/objects.o
CC net/sunrpc/auth_gss/gss_rpc_upcall.o
AR drivers/virtio/built-in.a
CC mm/compaction.o
CC fs/nfs/getroot.o
CC drivers/pci/slot.o
AR net/xfrm/built-in.a
CC drivers/gpu/drm/i915/i915_drm_client.o
CC net/sunrpc/sched.o
CC net/sunrpc/auth.o
CC fs/fat/namei_vfat.o
CC net/ipv4/inet_connection_sock.o
CC drivers/gpu/drm/display/drm_scdc_helper.o
CC net/wireless/util.o
CC drivers/acpi/acpica/exdebug.o
CC arch/x86/kernel/cpu/transmeta.o
CC net/ethtool/tunnels.o
CC crypto/cmac.o
CC drivers/base/regmap/regcache-rbtree.o
CC fs/lockd/host.o
CC kernel/time/tick-broadcast.o
CC drivers/gpu/drm/ttm/ttm_module.o
CC drivers/base/regmap/regcache-flat.o
CC block/blk-ia-ranges.o
CC drivers/base/regmap/regcache-maple.o
CC fs/proc/kmsg.o
CC arch/x86/kernel/irq_32.o
AR drivers/dax/hmem/built-in.a
AR drivers/dax/built-in.a
CC net/sunrpc/auth_gss/gss_rpc_xdr.o
CC arch/x86/kernel/cpu/zhaoxin.o
CC net/netfilter/nf_conntrack_acct.o
CC sound/hda/hdac_controller.o
CC drivers/acpi/acpica/exdump.o
CC net/core/filter.o
CC fs/ext4/file.o
CC lib/logic_pio.o
CC drivers/base/component.o
CC io_uring/register.o
CC fs/lockd/svc.o
CC drivers/pci/pci-acpi.o
CC kernel/trace/trace_output.o
CC drivers/base/regmap/regmap-debugfs.o
CC fs/netfs/read_collect.o
CC crypto/hmac.o
CC drivers/dma-buf/dma-buf.o
AR drivers/gpu/drm/renesas/rcar-du/built-in.a
AR drivers/gpu/drm/renesas/rz-du/built-in.a
CC drivers/gpu/drm/ttm/ttm_execbuf_util.o
AR drivers/gpu/drm/renesas/built-in.a
CC fs/ext4/fsmap.o
CC drivers/acpi/acpica/exfield.o
CC arch/x86/kernel/cpu/vortex.o
CC drivers/pci/iomap.o
AR drivers/gpu/drm/display/built-in.a
CC io_uring/truncate.o
CC fs/proc/page.o
CC net/sunrpc/auth_null.o
CC drivers/tty/serial/8250/8250_pericom.o
CC kernel/time/tick-broadcast-hrtimer.o
CC drivers/base/core.o
CC drivers/tty/serial/serial_port.o
CC fs/nfs/inode.o
CC block/early-lookup.o
CC lib/maple_tree.o
CC fs/netfs/read_pgpriv2.o
CC drivers/acpi/sleep.o
CC crypto/crypto_null.o
CC drivers/gpu/drm/i915/i915_getparam.o
CC arch/x86/kernel/cpu/perfctr-watchdog.o
CC fs/fat/namei_msdos.o
CC drivers/acpi/acpica/exfldio.o
CC drivers/dma-buf/dma-fence.o
CC net/wireless/reg.o
CC net/netfilter/nf_conntrack_seqadj.o
CC kernel/time/tick-oneshot.o
CC sound/hda/hdac_stream.o
CC drivers/gpu/drm/i915/i915_ioctl.o
CC arch/x86/kernel/cpu/vmware.o
AR net/mac80211/tests/built-in.a
CC net/mac80211/main.o
CC drivers/gpu/drm/ttm/ttm_range_manager.o
CC net/ethtool/fec.o
CC sound/hda/array.o
CC crypto/md5.o
CC net/netfilter/nf_conntrack_proto_icmpv6.o
CC drivers/base/bus.o
CC net/sunrpc/auth_gss/trace.o
CC net/ipv6/ipv6_sockglue.o
CC fs/nfs/super.o
AR drivers/tty/serial/8250/built-in.a
CC mm/show_mem.o
AR fs/proc/built-in.a
AR drivers/base/regmap/built-in.a
CC drivers/tty/tty_ioctl.o
CC lib/memcat_p.o
CC drivers/tty/serial/earlycon.o
CC drivers/acpi/acpica/exmisc.o
CC block/bounce.o
CC kernel/fork.o
CC net/ethtool/eeprom.o
CC kernel/time/tick-sched.o
CC drivers/pci/quirks.o
CC fs/lockd/svclock.o
CC drivers/acpi/acpica/exmutex.o
CC drivers/dma-buf/dma-fence-array.o
CC fs/netfs/read_retry.o
CC net/ipv4/tcp.o
CC drivers/acpi/device_sysfs.o
CC crypto/sha256_generic.o
AR drivers/gpu/drm/omapdrm/built-in.a
CC block/bsg.o
CC arch/x86/kernel/cpu/hypervisor.o
CC net/netlabel/netlabel_user.o
CC sound/hda/hdmi_chmap.o
CC drivers/gpu/drm/ttm/ttm_resource.o
CC net/mac80211/status.o
AR fs/fat/built-in.a
CC mm/interval_tree.o
CC kernel/trace/trace_seq.o
CC block/blk-cgroup.o
CC net/core/sock_diag.o
CC drivers/tty/tty_ldisc.o
CC crypto/sha512_generic.o
CC kernel/time/timer_migration.o
CC io_uring/memmap.o
CC drivers/acpi/acpica/exnames.o
CC drivers/gpu/drm/i915/i915_irq.o
CC arch/x86/kernel/cpu/mshyperv.o
AR drivers/tty/serial/built-in.a
CC block/blk-ioprio.o
CC net/sunrpc/auth_gss/gss_krb5_mech.o
CC drivers/dma-buf/dma-fence-chain.o
CC net/netfilter/nf_conntrack_netlink.o
CC arch/x86/kernel/dumpstack_32.o
CC fs/lockd/svcshare.o
CC net/rfkill/core.o
CC kernel/exec_domain.o
CC net/wireless/scan.o
CC block/blk-iolatency.o
CC fs/ext4/fsync.o
CC fs/netfs/write_collect.o
CC arch/x86/kernel/cpu/debugfs.o
CC kernel/trace/trace_stat.o
CC drivers/acpi/acpica/exoparg1.o
CC net/ethtool/stats.o
CC drivers/gpu/drm/i915/i915_mitigations.o
CC net/rfkill/input.o
CC arch/x86/kernel/time.o
CC mm/list_lru.o
CC drivers/dma-buf/dma-fence-unwrap.o
CC drivers/tty/tty_buffer.o
CC net/netlabel/netlabel_kapi.o
CC crypto/sha3_generic.o
CC sound/hda/trace.o
CC io_uring/io-wq.o
CC net/ipv6/ndisc.o
CC drivers/gpu/drm/ttm/ttm_pool.o
CC net/sunrpc/auth_tls.o
CC net/sunrpc/auth_unix.o
CC net/sunrpc/svc.o
CC fs/nfs/io.o
CC drivers/acpi/acpica/exoparg2.o
CC lib/nmi_backtrace.o
CC net/netfilter/nf_conntrack_ftp.o
CC sound/hda/hdac_component.o
CC arch/x86/kernel/cpu/bus_lock.o
CC net/ipv6/udp.o
CC drivers/base/dd.o
CC net/9p/mod.o
AR net/rfkill/built-in.a
CC drivers/pci/pci-label.o
CC crypto/ecb.o
CC drivers/dma-buf/dma-resv.o
CC drivers/base/syscore.o
CC fs/lockd/svcproc.o
CC kernel/trace/trace_printk.o
CC drivers/tty/tty_port.o
CC net/sunrpc/auth_gss/gss_krb5_seal.o
AR drivers/gpu/drm/tilcdc/built-in.a
CC fs/netfs/write_issue.o
CC drivers/gpu/drm/virtio/virtgpu_drv.o
CC io_uring/futex.o
CC drivers/gpu/drm/i915/i915_module.o
CC drivers/acpi/acpica/exoparg3.o
CC mm/workingset.o
CC mm/debug.o
CC io_uring/napi.o
AR kernel/events/built-in.a
CC kernel/time/vsyscall.o
CC kernel/time/timekeeping_debug.o
CC block/blk-iocost.o
CC net/ethtool/phc_vclocks.o
CC drivers/acpi/device_pm.o
CC crypto/cbc.o
CC kernel/panic.o
AR drivers/cxl/core/built-in.a
CC net/9p/client.o
AR drivers/cxl/built-in.a
CC net/ethtool/mm.o
CC net/netfilter/nf_conntrack_irc.o
CC sound/hda/hdac_i915.o
CC drivers/gpu/drm/ttm/ttm_device.o
CC drivers/acpi/acpica/exoparg6.o
CC fs/ext4/hash.o
CC net/wireless/nl80211.o
CC drivers/pci/vgaarb.o
CC net/core/dev_ioctl.o
CC net/ipv6/udplite.o
CC arch/x86/kernel/cpu/capflags.o
CC drivers/acpi/proc.o
AR arch/x86/kernel/cpu/built-in.a
CC arch/x86/kernel/ioport.o
CC fs/nfs/direct.o
CC drivers/tty/tty_mutex.o
CC net/netlabel/netlabel_domainhash.o
CC drivers/dma-buf/sync_file.o
CC drivers/gpu/drm/virtio/virtgpu_kms.o
CC drivers/gpu/drm/virtio/virtgpu_gem.o
CC crypto/ctr.o
CC sound/hda/intel-dsp-config.o
CC drivers/acpi/acpica/exprep.o
CC drivers/base/driver.o
CC kernel/trace/pid_list.o
CC mm/gup.o
CC kernel/time/namespace.o
CC lib/objpool.o
CC net/mac80211/driver-ops.o
AR sound/x86/built-in.a
CC net/ipv4/tcp_input.o
CC crypto/gcm.o
AR drivers/gpu/drm/imx/built-in.a
CC arch/x86/kernel/dumpstack.o
CC net/sunrpc/auth_gss/gss_krb5_unseal.o
CC fs/lockd/svcsubs.o
CC drivers/gpu/drm/i915/i915_params.o
CC net/9p/error.o
AR fs/netfs/built-in.a
CC drivers/gpu/drm/virtio/virtgpu_vram.o
CC drivers/gpu/drm/ttm/ttm_sys_manager.o
CC net/netlabel/netlabel_addrlist.o
CC drivers/acpi/acpica/exregion.o
CC net/wireless/mlme.o
CC drivers/acpi/acpica/exresnte.o
CC drivers/tty/tty_ldsem.o
CC fs/ext4/ialloc.o
CC drivers/base/class.o
CC net/ipv4/tcp_output.o
AR drivers/dma-buf/built-in.a
CC fs/nfs/pagelist.o
CC kernel/trace/trace_sched_switch.o
CC lib/plist.o
CC net/ethtool/module.o
CC net/core/tso.o
CC sound/hda/intel-nhlt.o
CC net/ipv4/tcp_timer.o
CC drivers/tty/tty_baudrate.o
CC net/netfilter/nf_conntrack_sip.o
CC fs/nfs/read.o
CC fs/nfs/symlink.o
CC block/mq-deadline.o
CC block/kyber-iosched.o
AR io_uring/built-in.a
CC drivers/acpi/bus.o
AR drivers/pci/built-in.a
CC drivers/gpu/drm/i915/i915_pci.o
CC net/sunrpc/auth_gss/gss_krb5_wrap.o
CC fs/lockd/mon.o
CC drivers/acpi/acpica/exresolv.o
AR kernel/time/built-in.a
CC drivers/gpu/drm/ttm/ttm_agp_backend.o
CC fs/ext4/indirect.o
AR sound/xen/built-in.a
CC arch/x86/kernel/nmi.o
CC lib/radix-tree.o
CC fs/nls/nls_base.o
CC net/9p/protocol.o
CC drivers/gpu/drm/virtio/virtgpu_display.o
CC block/blk-mq-pci.o
CC sound/hda/intel-sdw-acpi.o
CC net/netfilter/nf_nat_core.o
CC crypto/ccm.o
CC fs/nfs/unlink.o
CC drivers/acpi/acpica/exresop.o
AR drivers/gpu/drm/i2c/built-in.a
CC kernel/cpu.o
CC drivers/tty/tty_jobctrl.o
CC net/ipv6/raw.o
CC net/9p/trans_common.o
CC drivers/base/platform.o
CC net/ipv6/icmp.o
CC arch/x86/kernel/ldt.o
AR drivers/gpu/drm/ttm/built-in.a
CC net/netlabel/netlabel_mgmt.o
CC net/netlabel/netlabel_unlabeled.o
CC fs/nls/nls_cp437.o
CC drivers/acpi/acpica/exserial.o
CC arch/x86/kernel/setup.o
CC net/ethtool/cmis_fw_update.o
AR sound/hda/built-in.a
CC fs/nfs/write.o
AR sound/virtio/built-in.a
CC sound/sound_core.o
CC kernel/trace/trace_nop.o
CC drivers/gpu/drm/i915/i915_scatterlist.o
CC net/9p/trans_fd.o
CC drivers/acpi/glue.o
CC drivers/tty/n_null.o
CC net/wireless/ibss.o
CC arch/x86/kernel/x86_init.o
CC drivers/gpu/drm/virtio/virtgpu_vq.o
CC net/sunrpc/auth_gss/gss_krb5_crypto.o
CC net/ipv4/tcp_ipv4.o
CC lib/ratelimit.o
CC fs/nls/nls_ascii.o
CC fs/lockd/trace.o
CC drivers/tty/pty.o
CC drivers/macintosh/mac_hid.o
CC net/mac80211/sta_info.o
AR drivers/gpu/drm/panel/built-in.a
CC drivers/acpi/acpica/exstore.o
CC net/wireless/sme.o
CC net/ethtool/cmis_cdb.o
CC drivers/base/cpu.o
CC mm/mmap_lock.o
CC crypto/aes_generic.o
CC sound/last.o
CC lib/rbtree.o
CC drivers/gpu/drm/i915/i915_switcheroo.o
CC block/blk-mq-virtio.o
CC fs/nls/nls_iso8859-1.o
CC lib/seq_buf.o
CC block/blk-mq-debugfs.o
CC net/sunrpc/svcsock.o
CC drivers/acpi/acpica/exstoren.o
AR drivers/macintosh/built-in.a
CC kernel/trace/blktrace.o
CC drivers/gpu/drm/virtio/virtgpu_fence.o
CC net/9p/trans_virtio.o
CC fs/lockd/xdr.o
CC net/mac80211/wep.o
AR sound/built-in.a
CC kernel/exit.o
CC fs/nls/nls_utf8.o
CC net/dns_resolver/dns_key.o
CC drivers/base/firmware.o
CC net/mac80211/aead_api.o
CC fs/ext4/inline.o
AR fs/unicode/built-in.a
CC net/sunrpc/svcauth.o
CC drivers/gpu/drm/virtio/virtgpu_object.o
CC drivers/tty/tty_audit.o
CC arch/x86/kernel/i8259.o
CC mm/highmem.o
CC drivers/acpi/acpica/exstorob.o
CC drivers/acpi/acpica/exsystem.o
CC net/handshake/alert.o
CC net/netfilter/nf_nat_proto.o
CC crypto/crc32c_generic.o
CC kernel/trace/trace_events.o
AR fs/nls/built-in.a
CC net/ethtool/pse-pd.o
CC drivers/acpi/acpica/extrace.o
CC net/netlabel/netlabel_cipso_v4.o
CC net/netlabel/netlabel_calipso.o
CC lib/siphash.o
AR drivers/gpu/drm/bridge/analogix/built-in.a
AR drivers/gpu/drm/bridge/cadence/built-in.a
CC drivers/base/init.o
AR drivers/gpu/drm/bridge/imx/built-in.a
CC net/dns_resolver/dns_query.o
AR drivers/gpu/drm/bridge/synopsys/built-in.a
AR drivers/gpu/drm/bridge/built-in.a
CC mm/memory.o
CC net/handshake/genl.o
CC net/wireless/chan.o
CC net/ipv6/mcast.o
CC net/core/sock_reuseport.o
CC net/mac80211/wpa.o
CC drivers/gpu/drm/i915/i915_sysfs.o
CC fs/ext4/inode.o
CC net/wireless/ethtool.o
CC fs/lockd/clnt4xdr.o
CC arch/x86/kernel/irqinit.o
CC net/sunrpc/auth_gss/gss_krb5_keys.o
CC block/blk-pm.o
CC net/netfilter/nf_nat_helper.o
CC net/netfilter/nf_nat_masquerade.o
CC mm/mincore.o
CC drivers/acpi/acpica/exutils.o
CC crypto/authenc.o
CC net/ethtool/plca.o
CC drivers/tty/sysrq.o
CC lib/string.o
CC drivers/gpu/drm/virtio/virtgpu_debugfs.o
CC drivers/base/map.o
CC lib/timerqueue.o
CC net/ipv6/reassembly.o
AR drivers/scsi/pcmcia/built-in.a
CC lib/union_find.o
CC drivers/scsi/scsi.o
CC arch/x86/kernel/jump_label.o
CC net/devres.o
CC drivers/acpi/acpica/hwacpi.o
CC lib/vsprintf.o
AR net/dns_resolver/built-in.a
CC fs/autofs/init.o
AR net/9p/built-in.a
CC fs/nfs/namespace.o
CC kernel/softirq.o
CC net/ipv4/tcp_minisocks.o
CC block/holder.o
CC drivers/acpi/acpica/hwesleep.o
CC net/netfilter/nf_nat_ftp.o
CC drivers/base/devres.o
CC drivers/base/attribute_container.o
CC drivers/gpu/drm/i915/i915_utils.o
CC net/handshake/netlink.o
CC net/handshake/request.o
AR net/netlabel/built-in.a
CC fs/lockd/xdr4.o
CC drivers/acpi/acpica/hwgpe.o
CC fs/ext4/ioctl.o
CC drivers/gpu/drm/virtio/virtgpu_plane.o
CC net/ethtool/phy.o
CC fs/autofs/inode.o
CC crypto/authencesn.o
CC arch/x86/kernel/irq_work.o
CC lib/win_minmax.o
AR net/sunrpc/auth_gss/built-in.a
CC fs/nfs/mount_clnt.o
CC kernel/resource.o
CC net/ipv4/tcp_cong.o
CC kernel/trace/trace_export.o
AR drivers/tty/built-in.a
CC net/core/fib_notifier.o
AR drivers/nvme/common/built-in.a
AR drivers/nvme/host/built-in.a
CC drivers/acpi/acpica/hwregs.o
CC lib/xarray.o
AR drivers/nvme/target/built-in.a
AR drivers/nvme/built-in.a
CC crypto/lzo.o
AR drivers/gpu/drm/hisilicon/built-in.a
CC net/wireless/mesh.o
CC net/socket.o
AR block/built-in.a
CC lib/lockref.o
CC fs/autofs/root.o
CC drivers/scsi/hosts.o
CC fs/ext4/mballoc.o
CC drivers/acpi/scan.o
CC kernel/trace/trace_event_perf.o
CC net/handshake/tlshd.o
CC fs/autofs/symlink.o
CC drivers/scsi/scsi_ioctl.o
CC net/mac80211/scan.o
CC drivers/ata/libata-core.o
CC drivers/acpi/acpica/hwsleep.o
CC drivers/base/transport_class.o
CC drivers/acpi/acpica/hwvalid.o
CC drivers/gpu/drm/virtio/virtgpu_ioctl.o
CC drivers/base/topology.o
CC drivers/acpi/mipi-disco-img.o
CC net/sunrpc/svcauth_unix.o
CC drivers/gpu/drm/i915/intel_clock_gating.o
CC fs/nfs/nfstrace.o
CC net/sysctl_net.o
AR drivers/net/phy/mediatek/built-in.a
CC net/netfilter/nf_nat_irc.o
AR drivers/net/phy/qcom/built-in.a
AR drivers/net/pse-pd/built-in.a
CC drivers/net/phy/mdio-boardinfo.o
CC kernel/sysctl.o
CC fs/9p/vfs_super.o
CC crypto/lzo-rle.o
CC drivers/net/phy/stubs.o
AR net/ethtool/built-in.a
CC lib/bcd.o
CC net/mac80211/offchannel.o
CC net/core/xdp.o
CC drivers/gpu/drm/i915/intel_cpu_info.o
CC fs/lockd/svc4proc.o
CC net/mac80211/ht.o
CC arch/x86/kernel/probe_roms.o
CC drivers/acpi/acpica/hwxface.o
CC net/wireless/ap.o
CC fs/ext4/migrate.o
CC net/ipv6/tcp_ipv6.o
CC lib/sort.o
CC arch/x86/kernel/sys_ia32.o
CC fs/autofs/waitq.o
CC arch/x86/kernel/ksysfs.o
CC fs/lockd/procfs.o
CC drivers/acpi/resource.o
AR drivers/gpu/drm/mxsfb/built-in.a
CC drivers/firewire/init_ohci1394_dma.o
CC kernel/trace/trace_events_filter.o
CC drivers/cdrom/cdrom.o
CC drivers/scsi/scsicam.o
AR drivers/gpu/drm/tiny/built-in.a
CC drivers/net/phy/mdio_devres.o
CC drivers/gpu/drm/i915/intel_device_info.o
CC fs/autofs/expire.o
CC drivers/base/container.o
CC net/handshake/trace.o
CC drivers/acpi/acpica/hwxfsleep.o
CC net/wireless/trace.o
CC crypto/rng.o
CC drivers/gpu/drm/virtio/virtgpu_prime.o
CC fs/9p/vfs_inode.o
CC net/ipv4/tcp_metrics.o
AR fs/hostfs/built-in.a
AR drivers/gpu/drm/xlnx/built-in.a
CC lib/parser.o
CC crypto/drbg.o
CC drivers/net/mdio/acpi_mdio.o
CC drivers/ata/libata-scsi.o
CC net/sunrpc/addr.o
CC drivers/base/property.o
CC lib/debug_locks.o
CC drivers/acpi/acpica/hwpci.o
CC net/netfilter/nf_nat_sip.o
CC net/core/flow_offload.o
CC fs/debugfs/inode.o
CC arch/x86/kernel/bootflag.o
AR drivers/firewire/built-in.a
CC drivers/gpu/drm/i915/intel_memory_region.o
CC kernel/capability.o
CC kernel/trace/trace_events_trigger.o
CC net/ipv4/tcp_fastopen.o
CC drivers/base/cacheinfo.o
CC drivers/acpi/acpica/nsaccess.o
CC drivers/scsi/scsi_error.o
CC fs/9p/vfs_inode_dotl.o
CC mm/mlock.o
CC drivers/gpu/drm/virtio/virtgpu_trace_points.o
CC lib/random32.o
CC drivers/net/phy/phy.o
AR fs/lockd/built-in.a
CC net/sunrpc/rpcb_clnt.o
CC fs/autofs/dev-ioctl.o
CC net/ipv4/tcp_rate.o
CC net/ipv6/ping.o
CC fs/debugfs/file.o
CC drivers/acpi/acpica/nsalloc.o
CC arch/x86/kernel/e820.o
CC lib/bust_spinlocks.o
CC net/wireless/ocb.o
CC crypto/jitterentropy.o
CC kernel/trace/trace_eprobe.o
CC drivers/net/mdio/fwnode_mdio.o
CC drivers/acpi/acpi_processor.o
CC drivers/ata/libata-eh.o
CC crypto/jitterentropy-kcapi.o
CC net/ipv4/tcp_recovery.o
AR drivers/net/pcs/built-in.a
CC drivers/net/phy/phy-c45.o
CC fs/nfs/export.o
CC net/ipv6/exthdrs.o
CC drivers/gpu/drm/i915/intel_pcode.o
CC net/netfilter/x_tables.o
CC drivers/acpi/processor_core.o
CC drivers/acpi/acpica/nsarguments.o
AR net/handshake/built-in.a
CC net/ipv6/datagram.o
CC arch/x86/kernel/pci-dma.o
CC fs/9p/vfs_addr.o
CC drivers/base/swnode.o
AR drivers/cdrom/built-in.a
CC net/mac80211/agg-tx.o
CC drivers/gpu/drm/virtio/virtgpu_submit.o
CC crypto/ghash-generic.o
CC net/core/gro.o
AR drivers/auxdisplay/built-in.a
CC fs/9p/vfs_file.o
CC lib/kasprintf.o
CC fs/ext4/mmp.o
AR fs/autofs/built-in.a
CC fs/tracefs/inode.o
CC [M] fs/efivarfs/inode.o
CC crypto/hash_info.o
CC net/core/netdev-genl.o
CC drivers/acpi/processor_pdc.o
CC drivers/acpi/acpica/nsconvert.o
CC net/sunrpc/timer.o
CC drivers/net/phy/phy-core.o
CC mm/mmap.o
CC mm/mmu_gather.o
AR drivers/net/ethernet/3com/built-in.a
CC drivers/net/ethernet/8390/ne2k-pci.o
CC kernel/trace/trace_kprobe.o
CC lib/bitmap.o
CC fs/open.o
CC drivers/net/phy/phy_device.o
AR drivers/net/mdio/built-in.a
CC crypto/rsapubkey.asn1.o
CC net/core/netdev-genl-gen.o
CC drivers/scsi/scsi_lib.o
CC crypto/rsaprivkey.asn1.o
AR crypto/built-in.a
CC mm/mprotect.o
CC drivers/pcmcia/cs.o
AR fs/debugfs/built-in.a
CC kernel/trace/error_report-traces.o
CC lib/scatterlist.o
CC fs/nfs/sysfs.o
CC net/netfilter/xt_tcpudp.o
CC net/ipv4/tcp_ulp.o
CC drivers/base/auxiliary.o
CC arch/x86/kernel/quirks.o
CC [M] fs/efivarfs/file.o
CC drivers/acpi/acpica/nsdump.o
AR drivers/gpu/drm/gud/built-in.a
CC net/wireless/pmsr.o
AR drivers/net/ethernet/adaptec/built-in.a
GEN net/wireless/shipped-certs.c
CC drivers/gpu/drm/i915/intel_region_ttm.o
AR drivers/net/usb/built-in.a
AR drivers/net/wireless/admtek/built-in.a
CC drivers/net/mii.o
AR drivers/net/wireless/ath/built-in.a
AR drivers/net/wireless/atmel/built-in.a
CC drivers/pcmcia/socket_sysfs.o
AR drivers/net/wireless/broadcom/built-in.a
CC fs/9p/vfs_dir.o
AR drivers/net/wireless/intel/built-in.a
AR drivers/net/wireless/intersil/built-in.a
AR drivers/net/wireless/marvell/built-in.a
AR drivers/net/wireless/mediatek/built-in.a
AR drivers/net/wireless/microchip/built-in.a
CC [M] fs/efivarfs/super.o
AR drivers/net/wireless/purelifi/built-in.a
AR drivers/gpu/drm/virtio/built-in.a
AR drivers/net/wireless/quantenna/built-in.a
CC arch/x86/kernel/kdebugfs.o
AR drivers/net/wireless/ralink/built-in.a
AR drivers/net/wireless/realtek/built-in.a
AR drivers/net/wireless/rsi/built-in.a
AR drivers/net/wireless/silabs/built-in.a
CC [M] fs/efivarfs/vars.o
AR drivers/net/wireless/st/built-in.a
AR drivers/net/wireless/ti/built-in.a
AR drivers/net/wireless/zydas/built-in.a
CC fs/tracefs/event_inode.o
CC fs/read_write.o
AR drivers/net/wireless/virtual/built-in.a
AR drivers/net/wireless/built-in.a
CC drivers/usb/common/common.o
CC drivers/acpi/acpica/nseval.o
CC drivers/usb/core/usb.o
CC arch/x86/kernel/alternative.o
CC drivers/base/devtmpfs.o
CC net/mac80211/agg-rx.o
CC net/netfilter/xt_CONNSECMARK.o
CC net/sunrpc/xdr.o
CC drivers/net/ethernet/8390/8390.o
CC net/ipv6/ip6_flowlabel.o
CC drivers/pcmcia/cardbus.o
CC fs/ext4/move_extent.o
AR drivers/gpu/drm/solomon/built-in.a
AR drivers/usb/phy/built-in.a
CC [M] drivers/gpu/drm/scheduler/sched_main.o
CC drivers/net/phy/linkmode.o
CC net/mac80211/vht.o
CC fs/file_table.o
CC kernel/trace/power-traces.o
CC drivers/acpi/acpica/nsinit.o
CC drivers/usb/mon/mon_main.o
CC mm/mremap.o
CC drivers/gpu/drm/i915/intel_runtime_pm.o
CC fs/9p/vfs_dentry.o
CC lib/list_sort.o
CC drivers/gpu/drm/i915/intel_sbi.o
CC drivers/usb/common/debug.o
CC drivers/scsi/constants.o
CC net/netfilter/xt_NFLOG.o
CC net/core/gso.o
CC lib/uuid.o
CC kernel/trace/rpm-traces.o
AR drivers/net/ethernet/agere/built-in.a
CC fs/super.o
CC drivers/ata/libata-transport.o
CC kernel/ptrace.o
LD [M] fs/efivarfs/efivarfs.o
CC drivers/acpi/ec.o
AR drivers/net/ethernet/alacritech/built-in.a
CC net/netfilter/xt_SECMARK.o
AR drivers/usb/common/built-in.a
CC [M] drivers/gpu/drm/scheduler/sched_fence.o
CC lib/iov_iter.o
CC net/ipv4/tcp_offload.o
CC drivers/pcmcia/ds.o
CC net/ipv4/tcp_plb.o
CC fs/nfs/fs_context.o
CC drivers/acpi/acpica/nsload.o
CC mm/msync.o
AR fs/tracefs/built-in.a
CC [M] drivers/gpu/drm/scheduler/sched_entity.o
AR drivers/net/ethernet/alteon/built-in.a
HOSTCC drivers/gpu/drm/xe/xe_gen_wa_oob
CC drivers/ata/libata-trace.o
CC drivers/base/module.o
GEN xe_wa_oob.c xe_wa_oob.h
CC [M] drivers/gpu/drm/xe/xe_bb.o
CC drivers/usb/mon/mon_stat.o
CC arch/x86/kernel/i8253.o
CC drivers/usb/core/hub.o
CC fs/9p/v9fs.o
CC fs/char_dev.o
CC net/ipv4/datagram.o
CC drivers/acpi/acpica/nsnames.o
CC net/core/net-sysfs.o
CC net/mac80211/he.o
CC drivers/gpu/drm/drm_atomic.o
CC drivers/net/phy/phy_link_topology.o
CC drivers/scsi/scsi_lib_dma.o
CC drivers/pcmcia/pcmcia_resource.o
AR drivers/net/ethernet/8390/built-in.a
AR drivers/net/ethernet/amazon/built-in.a
CC fs/ext4/namei.o
CC drivers/usb/host/pci-quirks.o
AR drivers/net/ethernet/amd/built-in.a
AR drivers/net/ethernet/aquantia/built-in.a
CC drivers/usb/class/usblp.o
AR drivers/net/ethernet/arc/built-in.a
AR drivers/net/ethernet/asix/built-in.a
CC drivers/base/auxiliary_sysfs.o
AR drivers/net/ethernet/atheros/built-in.a
AR drivers/net/ethernet/cadence/built-in.a
CC drivers/net/ethernet/broadcom/bnx2.o
CC [M] drivers/gpu/drm/xe/xe_bo.o
CC drivers/base/devcoredump.o
CC net/ipv6/inet6_connection_sock.o
CC drivers/usb/storage/scsiglue.o
CC drivers/gpu/drm/drm_atomic_uapi.o
CC mm/page_vma_mapped.o
CC net/ipv4/raw.o
CC arch/x86/kernel/hw_breakpoint.o
CC net/netfilter/xt_TCPMSS.o
CC fs/stat.o
CC drivers/gpu/drm/i915/intel_step.o
CC drivers/acpi/acpica/nsobject.o
CC drivers/usb/mon/mon_text.o
CC drivers/pcmcia/cistpl.o
LD [M] drivers/gpu/drm/scheduler/gpu-sched.o
CC net/netfilter/xt_conntrack.o
CC kernel/user.o
CC mm/pagewalk.o
CC net/netfilter/xt_policy.o
AR drivers/usb/misc/built-in.a
CC fs/ext4/page-io.o
CC drivers/pcmcia/pcmcia_cis.o
CC fs/9p/fid.o
CC net/ipv4/udp.o
CC drivers/scsi/scsi_scan.o
CC drivers/acpi/dock.o
CC drivers/ata/libata-sata.o
CC net/sunrpc/sunrpc_syms.o
CC kernel/trace/trace_dynevent.o
CC drivers/acpi/acpica/nsparse.o
CC net/core/hotdata.o
CC drivers/usb/early/ehci-dbgp.o
CC drivers/base/platform-msi.o
CC drivers/net/phy/mdio_bus.o
CC drivers/usb/mon/mon_bin.o
CC drivers/usb/host/ehci-hcd.o
AR drivers/usb/class/built-in.a
CC drivers/net/loopback.o
GEN drivers/scsi/scsi_devinfo_tbl.c
CC drivers/gpu/drm/drm_auth.o
CC arch/x86/kernel/tsc.o
CC mm/pgtable-generic.o
CC drivers/acpi/acpica/nspredef.o
CC drivers/ata/libata-sff.o
CC fs/exec.o
CC drivers/usb/storage/protocol.o
CC [M] drivers/gpu/drm/xe/xe_bo_evict.o
CC net/sunrpc/cache.o
CC net/sunrpc/rpc_pipe.o
CC drivers/net/netconsole.o
CC drivers/base/physical_location.o
CC [M] drivers/gpu/drm/xe/xe_devcoredump.o
CC drivers/gpu/drm/i915/intel_uncore.o
CC fs/9p/xattr.o
CC net/mac80211/s1g.o
CC net/ipv6/udp_offload.o
CC drivers/base/trace.o
CC drivers/acpi/acpica/nsprepkg.o
CC drivers/gpu/drm/i915/intel_uncore_trace.o
CC drivers/gpu/drm/i915/intel_wakeref.o
CC net/core/netdev_rx_queue.o
CC net/core/net-procfs.o
CC kernel/trace/trace_probe.o
CC lib/clz_ctz.o
CC fs/nfs/nfsroot.o
CC drivers/gpu/drm/i915/vlv_sideband.o
CC drivers/gpu/drm/i915/vlv_suspend.o
CC lib/bsearch.o
CC net/netfilter/xt_state.o
CC drivers/pcmcia/rsrc_mgr.o
AR drivers/usb/early/built-in.a
CC [M] net/netfilter/nf_log_syslog.o
CC net/core/netpoll.o
CC drivers/gpu/drm/i915/soc/intel_dram.o
CC net/ipv4/udplite.o
AR drivers/net/ethernet/brocade/built-in.a
CC mm/rmap.o
CC lib/find_bit.o
CC fs/nfs/sysctl.o
CC drivers/net/virtio_net.o
CC kernel/trace/trace_uprobe.o
CC drivers/scsi/scsi_devinfo.o
CC drivers/usb/storage/transport.o
CC net/mac80211/ibss.o
CC drivers/acpi/acpica/nsrepair.o
CC kernel/signal.o
CC drivers/gpu/drm/drm_blend.o
AR drivers/usb/mon/built-in.a
CC fs/nfs/nfs3super.o
AR fs/9p/built-in.a
CC drivers/usb/host/ehci-pci.o
CC drivers/net/phy/mdio_device.o
CC [M] net/netfilter/xt_mark.o
CC arch/x86/kernel/tsc_msr.o
CC [M] drivers/gpu/drm/xe/xe_device.o
CC net/sunrpc/sysfs.o
CC lib/llist.o
CC drivers/net/ethernet/broadcom/tg3.o
AR drivers/base/built-in.a
CC drivers/pcmcia/rsrc_nonstatic.o
CC net/ipv4/udp_offload.o
CC drivers/acpi/acpica/nsrepair2.o
CC lib/lwq.o
CC kernel/trace/rethook.o
CC drivers/usb/core/hcd.o
CC drivers/usb/storage/usb.o
CC net/mac80211/iface.o
CC net/ipv6/seg6.o
CC drivers/usb/core/urb.o
CC lib/memweight.o
CC arch/x86/kernel/io_delay.o
CC arch/x86/kernel/rtc.o
CC lib/kfifo.o
CC drivers/scsi/scsi_sysctl.o
CC net/mac80211/link.o
CC net/mac80211/rate.o
CC drivers/usb/storage/initializers.o
CC drivers/gpu/drm/i915/soc/intel_gmch.o
CC mm/vmalloc.o
CC drivers/acpi/acpica/nssearch.o
CC lib/percpu-refcount.o
CC fs/ext4/readpage.o
CC drivers/input/serio/serio.o
CC arch/x86/kernel/resource.o
CC drivers/pcmcia/yenta_socket.o
CC drivers/gpu/drm/i915/soc/intel_pch.o
CC net/core/fib_rules.o
CC lib/rhashtable.o
CC drivers/net/phy/swphy.o
CC drivers/net/net_failover.o
CC drivers/ata/libata-pmp.o
CC mm/vma.o
CC drivers/usb/core/message.o
AR drivers/net/ethernet/cavium/common/built-in.a
CC fs/nfs/nfs3client.o
AR drivers/net/ethernet/cavium/thunder/built-in.a
AR drivers/net/ethernet/cavium/liquidio/built-in.a
AR drivers/net/ethernet/cavium/octeon/built-in.a
AR drivers/net/ethernet/cavium/built-in.a
CC net/sunrpc/svc_xprt.o
CC drivers/acpi/acpica/nsutils.o
CC fs/ext4/resize.o
CC drivers/acpi/pci_root.o
AS arch/x86/kernel/irqflags.o
CC lib/base64.o
CC arch/x86/kernel/static_call.o
CC [M] net/netfilter/xt_nat.o
CC drivers/scsi/scsi_proc.o
CC kernel/sys.o
CC [M] drivers/gpu/drm/xe/xe_device_sysfs.o
CC net/ipv6/fib6_notifier.o
CC lib/once.o
CC drivers/usb/host/ohci-hcd.o
CC drivers/gpu/drm/drm_bridge.o
CC drivers/usb/storage/sierra_ms.o
CC drivers/input/serio/i8042.o
CC fs/pipe.o
CC drivers/gpu/drm/drm_cache.o
AR drivers/net/ethernet/chelsio/built-in.a
CC drivers/gpu/drm/i915/soc/intel_rom.o
CC net/core/net-traces.o
AR kernel/trace/built-in.a
CC net/wireless/shipped-certs.o
AR drivers/net/ethernet/cisco/built-in.a
AR drivers/net/ethernet/cortina/built-in.a
CC drivers/acpi/acpica/nswalk.o
CC fs/namei.o
CC arch/x86/kernel/process.o
CC fs/fcntl.o
CC drivers/input/keyboard/atkbd.o
CC drivers/rtc/lib.o
CC net/ipv4/arp.o
CC drivers/net/phy/fixed_phy.o
CC drivers/acpi/acpica/nsxfeval.o
CC drivers/gpu/drm/drm_color_mgmt.o
CC [M] drivers/gpu/drm/xe/xe_dma_buf.o
CC [M] drivers/gpu/drm/xe/xe_drm_client.o
CC [M] drivers/gpu/drm/xe/xe_eu_stall.o
CC lib/refcount.o
CC drivers/ata/libata-acpi.o
CC [M] drivers/gpu/drm/xe/xe_exec.o
CC drivers/scsi/scsi_debugfs.o
CC fs/ioctl.o
CC fs/readdir.o
AR drivers/pcmcia/built-in.a
CC drivers/input/serio/serport.o
CC drivers/usb/storage/option_ms.o
CC fs/select.o
CC fs/nfs/nfs3proc.o
CC lib/rcuref.o
CC net/core/selftests.o
CC drivers/usb/core/driver.o
CC drivers/rtc/class.o
CC drivers/acpi/acpica/nsxfname.o
CC [M] net/netfilter/xt_LOG.o
CC lib/usercopy.o
CC kernel/umh.o
CC drivers/input/mouse/psmouse-base.o
CC net/ipv6/rpl.o
CC net/sunrpc/xprtmultipath.o
CC net/ipv4/icmp.o
CC drivers/ata/libata-pata-timings.o
CC drivers/gpu/drm/i915/i915_memcpy.o
CC drivers/acpi/pci_link.o
AR drivers/net/ethernet/dec/tulip/built-in.a
AR drivers/net/ethernet/dec/built-in.a
CC drivers/net/phy/realtek.o
CC net/core/ptp_classifier.o
CC drivers/gpu/drm/i915/i915_mm.o
AR drivers/input/joystick/built-in.a
CC drivers/gpu/drm/i915/i915_sw_fence.o
CC net/sunrpc/stats.o
CC lib/errseq.o
CC fs/ext4/super.o
AR drivers/input/keyboard/built-in.a
CC drivers/usb/host/ohci-pci.o
CC drivers/scsi/scsi_trace.o
CC drivers/usb/storage/usual-tables.o
CC drivers/input/serio/libps2.o
CC drivers/ata/ahci.o
CC lib/bucket_locks.o
CC drivers/acpi/acpica/nsxfobj.o
CC fs/nfs/nfs3xdr.o
CC drivers/rtc/interface.o
CC arch/x86/kernel/ptrace.o
CC net/ipv6/ioam6.o
CC net/ipv4/devinet.o
CC [M] net/netfilter/xt_MASQUERADE.o
AR drivers/input/tablet/built-in.a
CC fs/ext4/symlink.o
AR drivers/net/ethernet/dlink/built-in.a
CC drivers/usb/host/uhci-hcd.o
CC fs/ext4/sysfs.o
CC drivers/gpu/drm/i915/i915_sw_fence_work.o
CC fs/nfs/nfs3acl.o
CC drivers/acpi/acpica/psargs.o
CC drivers/i2c/algos/i2c-algo-bit.o
CC kernel/workqueue.o
AR drivers/usb/storage/built-in.a
CC drivers/rtc/nvmem.o
CC mm/process_vm_access.o
CC lib/generic-radix-tree.o
CC drivers/scsi/scsi_logging.o
CC net/ipv6/sysctl_net_ipv6.o
CC net/mac80211/michael.o
CC drivers/acpi/pci_irq.o
CC drivers/usb/core/config.o
CC drivers/usb/core/file.o
CC [M] drivers/gpu/drm/xe/xe_execlist.o
CC net/ipv4/af_inet.o
CC drivers/acpi/acpica/psloop.o
AR drivers/input/serio/built-in.a
CC drivers/input/mouse/synaptics.o
CC drivers/acpi/acpi_apd.o
AR drivers/input/touchscreen/built-in.a
CC drivers/acpi/acpica/psobject.o
CC fs/dcache.o
AR drivers/net/ethernet/emulex/built-in.a
CC [M] drivers/gpu/drm/xe/xe_exec_queue.o
CC drivers/i2c/busses/i2c-i801.o
AR drivers/i3c/built-in.a
CC drivers/scsi/scsi_pm.o
CC drivers/gpu/drm/i915/i915_syncmap.o
CC net/mac80211/tkip.o
CC lib/bitmap-str.o
CC drivers/usb/core/buffer.o
CC net/ipv4/igmp.o
CC fs/inode.o
CC arch/x86/kernel/tls.o
AR drivers/net/ethernet/engleder/built-in.a
CC drivers/rtc/dev.o
CC drivers/ata/libahci.o
CC [M] drivers/gpu/drm/xe/xe_force_wake.o
CC fs/nfs/nfs4proc.o
CC net/ipv6/xfrm6_policy.o
CC [M] net/netfilter/xt_addrtype.o
CC drivers/acpi/acpica/psopcode.o
CC net/mac80211/aes_cmac.o
AR drivers/i2c/muxes/built-in.a
AR drivers/net/phy/built-in.a
CC kernel/pid.o
AR drivers/net/ethernet/ezchip/built-in.a
AR drivers/net/ethernet/fujitsu/built-in.a
CC [M] drivers/gpu/drm/xe/xe_ggtt.o
AR drivers/media/i2c/built-in.a
CC lib/string_helpers.o
AR drivers/media/tuners/built-in.a
AR drivers/media/rc/keymaps/built-in.a
AR drivers/media/rc/built-in.a
AR drivers/media/common/b2c2/built-in.a
CC drivers/gpu/drm/i915/i915_user_extensions.o
AR drivers/media/common/saa7146/built-in.a
AR drivers/media/common/siano/built-in.a
CC mm/page_alloc.o
AR drivers/media/common/v4l2-tpg/built-in.a
CC lib/hexdump.o
AR drivers/media/common/videobuf2/built-in.a
AR drivers/media/common/built-in.a
AR drivers/input/misc/built-in.a
AR drivers/i2c/algos/built-in.a
CC net/mac80211/aes_gmac.o
CC fs/nfs/nfs4xdr.o
CC drivers/usb/core/sysfs.o
AR drivers/media/platform/allegro-dvt/built-in.a
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
AR drivers/media/platform/atmel/built-in.a
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 net/wireless/built-in.a
CC drivers/scsi/scsi_bsg.o
CC drivers/acpi/acpica/psopinfo.o
AR drivers/media/platform/chips-media/wave5/built-in.a
CC arch/x86/kernel/step.o
AR drivers/media/platform/chips-media/built-in.a
AR drivers/media/platform/imagination/built-in.a
AR drivers/media/platform/intel/built-in.a
CC arch/x86/kernel/i8237.o
AR drivers/media/platform/marvell/built-in.a
CC fs/attr.o
AR drivers/media/platform/mediatek/jpeg/built-in.a
AR drivers/media/platform/microchip/built-in.a
CC drivers/rtc/proc.o
CC net/sunrpc/sysctl.o
CC net/ipv6/xfrm6_state.o
CC drivers/gpu/drm/i915/i915_debugfs.o
CC mm/page_frag_cache.o
AR drivers/media/platform/mediatek/mdp/built-in.a
CC mm/init-mm.o
CC net/core/netprio_cgroup.o
AR drivers/media/platform/mediatek/vcodec/common/built-in.a
AR drivers/media/platform/mediatek/vcodec/encoder/built-in.a
AR drivers/media/platform/mediatek/vcodec/decoder/built-in.a
AR drivers/media/platform/mediatek/vcodec/built-in.a
AR drivers/media/platform/mediatek/vpu/built-in.a
AR drivers/media/platform/mediatek/mdp3/built-in.a
AR drivers/media/platform/mediatek/built-in.a
AR drivers/media/platform/nuvoton/built-in.a
AR drivers/media/platform/nvidia/tegra-vde/built-in.a
AR drivers/media/platform/nvidia/built-in.a
CC net/core/netclassid_cgroup.o
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
CC arch/x86/kernel/stacktrace.o
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 drivers/usb/host/xhci.o
AR drivers/media/platform/raspberrypi/pisp_be/built-in.a
AR drivers/media/platform/raspberrypi/rp1-cfe/built-in.a
AR drivers/media/platform/raspberrypi/built-in.a
CC mm/memblock.o
AR drivers/media/platform/renesas/rcar-vin/built-in.a
AR drivers/media/platform/renesas/rzg2l-cru/built-in.a
AR drivers/media/platform/renesas/vsp1/built-in.a
CC fs/bad_inode.o
AR drivers/media/platform/renesas/built-in.a
CC drivers/acpi/acpica/psparse.o
AR drivers/media/platform/rockchip/rga/built-in.a
AR drivers/media/platform/samsung/exynos-gsc/built-in.a
AR drivers/media/platform/rockchip/rkisp1/built-in.a
AR drivers/media/platform/samsung/exynos4-is/built-in.a
CC net/ipv6/xfrm6_input.o
CC drivers/rtc/sysfs.o
AR drivers/media/platform/rockchip/built-in.a
AR drivers/media/platform/samsung/s3c-camif/built-in.a
CC drivers/rtc/rtc-mc146818-lib.o
AR drivers/media/platform/samsung/s5p-g2d/built-in.a
AR drivers/media/platform/samsung/s5p-jpeg/built-in.a
CC drivers/usb/core/endpoint.o
AR drivers/media/platform/samsung/s5p-mfc/built-in.a
CC lib/kstrtox.o
AR drivers/media/platform/samsung/built-in.a
CC drivers/input/mouse/focaltech.o
AR drivers/i2c/busses/built-in.a
AR drivers/media/platform/st/sti/bdisp/built-in.a
CC drivers/i2c/i2c-boardinfo.o
AR drivers/media/platform/st/sti/c8sectpfe/built-in.a
AR drivers/media/platform/st/sti/delta/built-in.a
AR drivers/media/platform/st/sti/hva/built-in.a
AR drivers/media/platform/st/stm32/built-in.a
AR drivers/media/platform/st/built-in.a
AR drivers/media/platform/sunxi/sun4i-csi/built-in.a
AR drivers/media/platform/sunxi/sun6i-csi/built-in.a
AR drivers/media/platform/sunxi/sun6i-mipi-csi2/built-in.a
AR drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/built-in.a
AR drivers/media/platform/sunxi/sun8i-di/built-in.a
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/net/ethernet/fungible/built-in.a
AR drivers/media/platform/ti/cal/built-in.a
CC arch/x86/kernel/reboot.o
AR drivers/media/platform/ti/vpe/built-in.a
CC fs/nfs/nfs4state.o
AR drivers/media/platform/ti/davinci/built-in.a
CC fs/ext4/xattr.o
AR drivers/media/platform/ti/j721e-csi2rx/built-in.a
AR drivers/net/ethernet/google/built-in.a
AR drivers/media/platform/ti/omap/built-in.a
CC drivers/scsi/scsi_common.o
CC drivers/gpu/drm/drm_connector.o
CC lib/iomap.o
AR drivers/media/platform/ti/omap3isp/built-in.a
CC fs/nfs/nfs4renewd.o
AR drivers/media/platform/ti/built-in.a
CC net/ipv4/fib_frontend.o
AR drivers/media/platform/verisilicon/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gpu_scheduler.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 drivers/i2c/i2c-core-base.o
CC drivers/acpi/acpica/psscope.o
AR drivers/media/pci/ttpci/built-in.a
AR drivers/media/pci/b2c2/built-in.a
CC drivers/usb/host/xhci-mem.o
CC drivers/input/mouse/alps.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
CC drivers/usb/core/devio.o
AR drivers/media/pci/mantis/built-in.a
CC drivers/ata/ata_piix.o
CC net/ipv4/fib_semantics.o
AR drivers/media/pci/ngene/built-in.a
AR net/netfilter/built-in.a
AR drivers/media/pci/ddbridge/built-in.a
CC drivers/acpi/acpi_platform.o
AR drivers/media/pci/saa7146/built-in.a
AR drivers/media/pci/smipcie/built-in.a
AR drivers/media/pci/netup_unidvb/built-in.a
CC drivers/gpu/drm/drm_crtc.o
CC drivers/scsi/scsi_transport_spi.o
CC drivers/input/mouse/byd.o
CC drivers/usb/host/xhci-ext-caps.o
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 net/ipv4/fib_trie.o
AR drivers/media/usb/b2c2/built-in.a
AR drivers/media/usb/dvb-usb/built-in.a
AR drivers/media/usb/dvb-usb-v2/built-in.a
AR drivers/media/usb/s2255/built-in.a
CC drivers/acpi/acpi_pnp.o
AR drivers/media/usb/siano/built-in.a
CC drivers/i2c/i2c-core-smbus.o
AR drivers/media/usb/ttusb-budget/built-in.a
CC drivers/rtc/rtc-cmos.o
AR drivers/media/usb/ttusb-dec/built-in.a
AR drivers/media/usb/built-in.a
AR net/sunrpc/built-in.a
AR drivers/pps/clients/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gsc.o
CC fs/nfs/nfs4super.o
AR drivers/pps/generators/built-in.a
AR drivers/media/mmc/siano/built-in.a
CC drivers/pps/pps.o
AR drivers/media/mmc/built-in.a
CC net/mac80211/fils_aead.o
AR drivers/media/firewire/built-in.a
AR drivers/media/spi/built-in.a
CC drivers/acpi/acpica/pstree.o
CC drivers/acpi/acpica/psutils.o
AR drivers/media/test-drivers/built-in.a
CC drivers/input/input.o
AR drivers/media/built-in.a
CC drivers/usb/host/xhci-ring.o
CC drivers/usb/host/xhci-hub.o
AR drivers/net/ethernet/hisilicon/built-in.a
CC drivers/gpu/drm/i915/i915_debugfs_params.o
CC drivers/ptp/ptp_clock.o
CC drivers/power/supply/power_supply_core.o
CC lib/iomap_copy.o
CC net/core/dst_cache.o
CC net/ipv4/fib_notifier.o
CC arch/x86/kernel/msr.o
CC lib/devres.o
CC [M] drivers/gpu/drm/xe/xe_gsc_debugfs.o
CC drivers/acpi/acpica/pswalk.o
CC mm/slub.o
CC fs/file.o
CC net/core/gro_cells.o
CC [M] drivers/gpu/drm/xe/xe_gsc_proxy.o
CC net/ipv6/xfrm6_output.o
CC arch/x86/kernel/cpuid.o
CC drivers/pps/kapi.o
CC arch/x86/kernel/early-quirks.o
CC fs/ext4/xattr_hurd.o
CC drivers/input/mouse/logips2pp.o
CC drivers/power/supply/power_supply_sysfs.o
CC kernel/task_work.o
CC drivers/acpi/acpica/psxface.o
CC lib/check_signature.o
CC net/core/failover.o
AR drivers/rtc/built-in.a
CC drivers/input/input-compat.o
CC drivers/gpu/drm/i915/i915_pmu.o
AR drivers/net/ethernet/huawei/built-in.a
CC drivers/ptp/ptp_chardev.o
CC lib/interval_tree.o
CC drivers/ata/pata_amd.o
CC fs/nfs/nfs4file.o
CC drivers/gpu/drm/i915/gt/gen2_engine_cs.o
CC drivers/usb/core/notify.o
CC drivers/input/input-mt.o
CC drivers/power/supply/power_supply_leds.o
CC drivers/ata/pata_oldpiix.o
CC drivers/acpi/acpica/rsaddr.o
CC drivers/scsi/virtio_scsi.o
CC lib/assoc_array.o
CC net/mac80211/cfg.o
CC drivers/pps/sysfs.o
CC net/ipv4/inet_fragment.o
CC drivers/i2c/i2c-core-acpi.o
CC mm/madvise.o
CC drivers/input/mouse/lifebook.o
CC fs/ext4/xattr_trusted.o
CC drivers/acpi/power.o
CC fs/nfs/delegation.o
CC [M] drivers/gpu/drm/xe/xe_gsc_submit.o
CC kernel/extable.o
AR drivers/net/ethernet/i825xx/built-in.a
CC drivers/net/ethernet/intel/e1000/e1000_main.o
CC drivers/net/ethernet/intel/e1000/e1000_hw.o
CC [M] drivers/gpu/drm/xe/xe_gt.o
AR drivers/net/ethernet/microsoft/built-in.a
CC drivers/scsi/sd.o
CC drivers/scsi/sr.o
CC drivers/net/ethernet/intel/e1000/e1000_ethtool.o
CC drivers/acpi/acpica/rscalc.o
CC mm/page_io.o
CC arch/x86/kernel/smp.o
CC drivers/acpi/acpica/rscreate.o
AR drivers/pps/built-in.a
CC drivers/usb/host/xhci-dbg.o
CC drivers/power/supply/power_supply_hwmon.o
CC drivers/usb/core/generic.o
CC drivers/usb/host/xhci-trace.o
CC fs/filesystems.o
CC fs/nfs/nfs4idmap.o
CC net/ipv6/xfrm6_protocol.o
CC net/mac80211/ethtool.o
CC net/ipv4/ping.o
CC drivers/input/mouse/trackpoint.o
CC drivers/net/ethernet/intel/e1000/e1000_param.o
CC drivers/input/mouse/cypress_ps2.o
AR net/core/built-in.a
CC drivers/ptp/ptp_sysfs.o
CC drivers/input/mouse/psmouse-smbus.o
CC drivers/ata/pata_sch.o
CC lib/bitrev.o
CC net/mac80211/rx.o
CC drivers/acpi/acpica/rsdumpinfo.o
CC net/ipv6/netfilter.o
CC drivers/scsi/sr_ioctl.o
AR drivers/power/supply/built-in.a
CC drivers/usb/core/quirks.o
CC drivers/ptp/ptp_vclock.o
AR drivers/power/built-in.a
AR drivers/net/ethernet/litex/built-in.a
CC drivers/hwmon/hwmon.o
AR drivers/thermal/broadcom/built-in.a
AR drivers/thermal/renesas/built-in.a
CC net/ipv4/ip_tunnel_core.o
CC fs/namespace.o
AR drivers/thermal/samsung/built-in.a
CC drivers/thermal/intel/intel_tcc.o
CC drivers/acpi/acpica/rsinfo.o
CC drivers/input/input-poller.o
CC drivers/i2c/i2c-smbus.o
CC mm/swap_state.o
CC lib/crc-ccitt.o
CC fs/ext4/xattr_user.o
CC drivers/gpu/drm/i915/gt/gen6_engine_cs.o
CC drivers/ata/pata_mpiix.o
CC kernel/params.o
CC drivers/ptp/ptp_kvm_x86.o
CC drivers/thermal/intel/therm_throt.o
CC drivers/acpi/acpica/rsio.o
CC drivers/acpi/acpica/rsirq.o
CC fs/nfs/callback.o
CC drivers/gpu/drm/drm_displayid.o
CC [M] drivers/gpu/drm/xe/xe_gt_ccs_mode.o
CC drivers/usb/host/xhci-debugfs.o
CC net/mac80211/spectmgmt.o
CC lib/crc16.o
AR drivers/input/mouse/built-in.a
AR drivers/watchdog/built-in.a
CC drivers/ata/ata_generic.o
AR drivers/net/ethernet/marvell/octeon_ep/built-in.a
AR drivers/net/ethernet/marvell/octeon_ep_vf/built-in.a
AR drivers/net/ethernet/marvell/octeontx2/built-in.a
CC net/mac80211/tx.o
CC mm/swapfile.o
AR drivers/net/ethernet/marvell/prestera/built-in.a
CC drivers/net/ethernet/marvell/sky2.o
CC drivers/input/ff-core.o
CC arch/x86/kernel/smpboot.o
CC drivers/input/touchscreen.o
CC drivers/usb/core/devices.o
CC drivers/input/ff-memless.o
CC drivers/usb/core/phy.o
CC net/ipv4/gre_offload.o
CC drivers/gpu/drm/drm_drv.o
CC net/mac80211/key.o
CC drivers/acpi/acpica/rslist.o
CC fs/ext4/fast_commit.o
AR drivers/i2c/built-in.a
CC [M] drivers/thermal/intel/x86_pkg_temp_thermal.o
HOSTCC lib/gen_crc32table
AR drivers/thermal/st/built-in.a
CC drivers/usb/core/port.o
CC drivers/md/md.o
CC drivers/cpufreq/cpufreq.o
CC drivers/ptp/ptp_kvm_common.o
CC drivers/cpufreq/freq_table.o
CC lib/xxhash.o
AR drivers/net/ethernet/broadcom/built-in.a
CC drivers/input/sparse-keymap.o
CC drivers/acpi/acpica/rsmemory.o
CC net/mac80211/util.o
CC drivers/gpu/drm/i915/gt/gen6_ppgtt.o
CC drivers/input/vivaldi-fmap.o
CC mm/swap_slots.o
CC net/ipv6/proc.o
CC drivers/usb/core/hcd-pci.o
CC arch/x86/kernel/tsc_sync.o
AR drivers/hwmon/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gt_clock.o
CC drivers/net/ethernet/intel/e1000e/82571.o
CC drivers/cpuidle/governors/menu.o
CC drivers/cpuidle/governors/haltpoll.o
CC kernel/kthread.o
CC drivers/scsi/sr_vendor.o
AR drivers/ata/built-in.a
CC net/ipv6/syncookies.o
CC drivers/acpi/acpica/rsmisc.o
CC lib/genalloc.o
CC fs/seq_file.o
CC fs/nfs/callback_xdr.o
CC drivers/net/ethernet/intel/e1000e/ich8lan.o
CC net/mac80211/parse.o
CC lib/percpu_counter.o
AR drivers/thermal/intel/built-in.a
CC drivers/net/ethernet/intel/e100.o
CC drivers/scsi/sg.o
AR drivers/net/ethernet/mellanox/built-in.a
CC arch/x86/kernel/setup_percpu.o
AR drivers/thermal/qcom/built-in.a
AR drivers/thermal/tegra/built-in.a
CC net/ipv6/calipso.o
AR drivers/thermal/mediatek/built-in.a
CC drivers/thermal/thermal_core.o
AR drivers/mmc/built-in.a
CC arch/x86/kernel/mpparse.o
CC drivers/md/md-bitmap.o
CC drivers/input/input-leds.o
CC drivers/acpi/event.o
CC drivers/net/ethernet/intel/e1000e/80003es2lan.o
AR drivers/ptp/built-in.a
CC drivers/thermal/thermal_sysfs.o
CC net/ipv4/metrics.o
CC drivers/usb/host/xhci-pci.o
CC kernel/sys_ni.o
CC mm/dmapool.o
CC net/ipv6/ah6.o
CC drivers/acpi/acpica/rsserial.o
CC [M] drivers/gpu/drm/xe/xe_gt_freq.o
CC drivers/acpi/evged.o
CC net/mac80211/wme.o
CC drivers/cpuidle/cpuidle.o
CC drivers/usb/core/usb-acpi.o
CC drivers/input/evdev.o
CC drivers/net/ethernet/intel/e1000e/mac.o
CC lib/audit.o
CC drivers/cpufreq/cpufreq_performance.o
CC drivers/acpi/acpica/rsutils.o
CC fs/ext4/orphan.o
AR drivers/cpuidle/governors/built-in.a
CC fs/nfs/callback_proc.o
CC drivers/acpi/sysfs.o
CC drivers/gpu/drm/i915/gt/gen7_renderclear.o
AR drivers/ufs/built-in.a
AR drivers/net/ethernet/meta/built-in.a
CC net/mac80211/chan.o
CC net/ipv6/esp6.o
CC drivers/cpufreq/cpufreq_userspace.o
CC net/ipv4/netlink.o
CC kernel/nsproxy.o
AR drivers/net/ethernet/intel/e1000/built-in.a
CC drivers/gpu/drm/drm_dumb_buffers.o
CC [M] drivers/gpu/drm/xe/xe_gt_idle.o
CC drivers/cpufreq/cpufreq_ondemand.o
CC drivers/net/ethernet/intel/e1000e/manage.o
CC arch/x86/kernel/trace_clock.o
CC lib/syscall.o
CC [M] drivers/gpu/drm/xe/xe_gt_mcr.o
CC drivers/gpu/drm/i915/gt/gen8_engine_cs.o
CC [M] drivers/gpu/drm/xe/xe_gt_pagefault.o
CC drivers/acpi/acpica/rsxface.o
CC arch/x86/kernel/trace.o
AR drivers/usb/core/built-in.a
CC drivers/net/ethernet/intel/e1000e/nvm.o
CC drivers/md/md-autodetect.o
CC mm/hugetlb.o
AR drivers/net/ethernet/micrel/built-in.a
CC fs/nfs/nfs4namespace.o
CC lib/errname.o
CC drivers/cpuidle/driver.o
CC drivers/gpu/drm/i915/gt/gen8_ppgtt.o
CC [M] drivers/gpu/drm/xe/xe_gt_sysfs.o
CC net/ipv6/sit.o
CC drivers/thermal/thermal_trip.o
CC drivers/scsi/scsi_sysfs.o
AR drivers/input/built-in.a
CC drivers/acpi/acpica/tbdata.o
CC drivers/thermal/thermal_helpers.o
CC net/mac80211/trace.o
CC drivers/gpu/drm/i915/gt/intel_breadcrumbs.o
CC drivers/md/dm.o
CC [M] drivers/gpu/drm/xe/xe_gt_throttle.o
CC kernel/notifier.o
AR drivers/usb/host/built-in.a
CC lib/nlattr.o
CC fs/xattr.o
AR drivers/usb/built-in.a
CC mm/mmu_notifier.o
CC fs/libfs.o
CC net/ipv6/addrconf_core.o
CC fs/nfs/nfs4getroot.o
CC drivers/acpi/property.o
CC drivers/cpufreq/cpufreq_governor.o
CC drivers/md/dm-table.o
CC drivers/cpuidle/governor.o
CC drivers/thermal/thermal_thresholds.o
CC arch/x86/kernel/rethook.o
CC net/ipv6/exthdrs_core.o
CC net/ipv6/ip6_checksum.o
CC net/ipv4/nexthop.o
AR drivers/net/ethernet/marvell/built-in.a
CC net/ipv6/ip6_icmp.o
CC drivers/cpufreq/cpufreq_governor_attr_set.o
AR drivers/net/ethernet/microchip/built-in.a
CC lib/cpu_rmap.o
CC fs/fs-writeback.o
CC fs/ext4/acl.o
CC drivers/md/dm-target.o
CC drivers/acpi/acpica/tbfadt.o
AR drivers/firmware/arm_ffa/built-in.a
CC drivers/gpu/drm/i915/gt/intel_context.o
CC net/ipv4/udp_tunnel_stub.o
AR drivers/firmware/arm_scmi/built-in.a
CC net/ipv4/ip_tunnel.o
AR drivers/firmware/broadcom/built-in.a
AR drivers/firmware/cirrus/built-in.a
AR drivers/firmware/meson/built-in.a
AR drivers/firmware/microchip/built-in.a
CC drivers/cpufreq/acpi-cpufreq.o
CC drivers/cpuidle/sysfs.o
AR drivers/firmware/imx/built-in.a
CC net/ipv6/output_core.o
CC drivers/firmware/efi/libstub/efi-stub-helper.o
CC drivers/thermal/thermal_hwmon.o
CC drivers/gpu/drm/i915/gt/intel_context_sseu.o
CC [M] drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
CC drivers/firmware/efi/efi-bgrt.o
CC drivers/acpi/debugfs.o
CC drivers/net/ethernet/intel/e1000e/phy.o
CC drivers/cpufreq/amd-pstate.o
CC fs/pnode.o
CC net/ipv4/sysctl_net_ipv4.o
CC arch/x86/kernel/vmcore_info_32.o
CC drivers/acpi/acpica/tbfind.o
CC drivers/gpu/drm/drm_edid.o
CC net/mac80211/mlme.o
CC kernel/ksysfs.o
CC drivers/gpu/drm/i915/gt/intel_engine_cs.o
AR drivers/crypto/stm32/built-in.a
AR drivers/crypto/xilinx/built-in.a
AR drivers/crypto/hisilicon/built-in.a
AR drivers/crypto/intel/keembay/built-in.a
AR drivers/crypto/intel/ixp4xx/built-in.a
AR drivers/scsi/built-in.a
AR drivers/crypto/intel/built-in.a
CC lib/dynamic_queue_limits.o
CC mm/migrate.o
AR drivers/crypto/starfive/built-in.a
AR drivers/crypto/built-in.a
CC drivers/gpu/drm/drm_eld.o
CC drivers/gpu/drm/drm_encoder.o
CC drivers/cpuidle/poll_state.o
CC drivers/net/ethernet/intel/e1000e/param.o
CC drivers/thermal/gov_step_wise.o
CC fs/nfs/nfs4client.o
CC drivers/cpuidle/cpuidle-haltpoll.o
CC drivers/acpi/acpica/tbinstal.o
CC fs/ext4/xattr_security.o
CC fs/splice.o
CC drivers/firmware/efi/libstub/gop.o
CC arch/x86/kernel/machine_kexec_32.o
CC drivers/net/ethernet/intel/e1000e/ethtool.o
AR drivers/net/ethernet/mscc/built-in.a
CC drivers/net/ethernet/intel/e1000e/netdev.o
CC mm/page_counter.o
CC drivers/gpu/drm/drm_file.o
CC fs/nfs/nfs4session.o
AR drivers/firmware/psci/built-in.a
CC drivers/firmware/efi/libstub/secureboot.o
CC net/ipv4/proc.o
CC fs/sync.o
CC drivers/gpu/drm/drm_fourcc.o
CC drivers/thermal/gov_user_space.o
CC net/mac80211/tdls.o
AR drivers/net/ethernet/myricom/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gt_topology.o
CC drivers/cpufreq/amd-pstate-trace.o
CC mm/hugetlb_cgroup.o
CC net/mac80211/ocb.o
CC kernel/cred.o
CC drivers/acpi/acpica/tbprint.o
AR drivers/cpuidle/built-in.a
CC net/ipv4/fib_rules.o
CC drivers/clocksource/acpi_pm.o
CC drivers/md/dm-linear.o
CC net/ipv6/protocol.o
CC drivers/clocksource/i8253.o
AR drivers/thermal/built-in.a
CC drivers/acpi/acpi_lpat.o
CC fs/utimes.o
CC drivers/hid/usbhid/hid-core.o
CC net/ipv4/ipmr.o
CC net/ipv4/ipmr_base.o
CC lib/glob.o
CC drivers/acpi/acpica/tbutils.o
AS arch/x86/kernel/relocate_kernel_32.o
AR fs/ext4/built-in.a
AR drivers/firmware/qcom/built-in.a
CC kernel/reboot.o
CC mm/early_ioremap.o
CC kernel/async.o
CC drivers/firmware/efi/libstub/tpm.o
CC arch/x86/kernel/crash_dump_32.o
CC drivers/hid/usbhid/hiddev.o
CC drivers/net/ethernet/intel/e1000e/ptp.o
CC drivers/md/dm-stripe.o
CC drivers/acpi/acpi_pcc.o
CC drivers/gpu/drm/i915/gt/intel_engine_heartbeat.o
CC net/mac80211/airtime.o
CC lib/strncpy_from_user.o
CC drivers/firmware/efi/libstub/file.o
CC drivers/cpufreq/intel_pstate.o
CC arch/x86/kernel/crash.o
CC [M] drivers/gpu/drm/xe/xe_guc.o
CC fs/nfs/dns_resolve.o
CC mm/secretmem.o
AR drivers/firmware/smccc/built-in.a
CC drivers/acpi/acpica/tbxface.o
AR drivers/firmware/tegra/built-in.a
CC mm/hmm.o
CC net/ipv6/ip6_offload.o
AR drivers/clocksource/built-in.a
AR drivers/platform/surface/built-in.a
AR drivers/platform/x86/amd/built-in.a
CC drivers/gpu/drm/drm_framebuffer.o
AR drivers/platform/x86/intel/built-in.a
CC drivers/acpi/acpica/tbxfload.o
CC drivers/platform/x86/wmi.o
CC net/ipv4/syncookies.o
CC drivers/md/dm-ioctl.o
CC drivers/mailbox/mailbox.o
CC arch/x86/kernel/module.o
CC drivers/firmware/efi/efi.o
CC drivers/firmware/efi/libstub/mem.o
CC net/mac80211/eht.o
CC lib/strnlen_user.o
CC arch/x86/kernel/doublefault_32.o
CC drivers/platform/x86/wmi-bmof.o
CC drivers/md/dm-io.o
CC drivers/hid/usbhid/hid-pidff.o
CC drivers/hid/hid-core.o
CC kernel/range.o
AR drivers/firmware/xilinx/built-in.a
CC fs/d_path.o
CC arch/x86/kernel/early_printk.o
CC drivers/firmware/dmi_scan.o
CC drivers/platform/x86/eeepc-laptop.o
CC drivers/mailbox/pcc.o
CC drivers/acpi/acpica/tbxfroot.o
AR drivers/net/ethernet/natsemi/built-in.a
CC mm/memfd.o
CC drivers/firmware/efi/vars.o
CC drivers/md/dm-kcopyd.o
CC net/mac80211/led.o
CC [M] drivers/gpu/drm/xe/xe_guc_ads.o
CC kernel/smpboot.o
CC drivers/hid/hid-input.o
CC kernel/ucount.o
AR drivers/perf/built-in.a
CC drivers/firmware/dmi-id.o
CC net/ipv6/tcpv6_offload.o
CC fs/nfs/nfs4trace.o
CC net/mac80211/pm.o
AR drivers/hwtracing/intel_th/built-in.a
CC drivers/firmware/memmap.o
AR drivers/net/ethernet/neterion/built-in.a
CC drivers/md/dm-sysfs.o
CC drivers/gpu/drm/drm_gem.o
CC lib/net_utils.o
CC drivers/platform/x86/p2sb.o
CC drivers/acpi/acpica/utaddress.o
CC net/mac80211/rc80211_minstrel_ht.o
CC drivers/firmware/efi/libstub/random.o
CC net/ipv6/exthdrs_offload.o
CC mm/ptdump.o
CC drivers/hid/hid-quirks.o
CC drivers/gpu/drm/i915/gt/intel_engine_pm.o
AR drivers/mailbox/built-in.a
CC drivers/acpi/acpica/utalloc.o
CC drivers/firmware/efi/reboot.o
CC drivers/md/dm-stats.o
CC lib/sg_pool.o
CC arch/x86/kernel/hpet.o
CC kernel/regset.o
CC drivers/firmware/efi/libstub/randomalloc.o
CC arch/x86/kernel/amd_nb.o
CC mm/execmem.o
CC drivers/acpi/acpica/utascii.o
CC drivers/gpu/drm/drm_ioctl.o
AR drivers/net/ethernet/netronome/built-in.a
CC [M] drivers/gpu/drm/xe/xe_guc_capture.o
AR drivers/android/built-in.a
CC drivers/acpi/ac.o
AR drivers/nvmem/layouts/built-in.a
CC drivers/nvmem/core.o
CC net/ipv4/tunnel4.o
CC fs/nfs/nfs4sysctl.o
CC drivers/md/dm-rq.o
CC lib/stackdepot.o
CC drivers/firmware/efi/libstub/pci.o
CC kernel/ksyms_common.o
CC fs/stack.o
CC drivers/gpu/drm/drm_lease.o
CC net/mac80211/wbrf.o
AR drivers/platform/x86/built-in.a
AR drivers/platform/built-in.a
CC drivers/firmware/efi/libstub/skip_spaces.o
CC drivers/md/dm-io-rewind.o
AR drivers/hid/usbhid/built-in.a
CC drivers/md/dm-builtin.o
CC drivers/acpi/button.o
CC fs/fs_struct.o
CC net/ipv6/inet6_hashtables.o
CC drivers/acpi/acpica/utbuffer.o
CC lib/asn1_decoder.o
CC drivers/firmware/efi/memattr.o
CC kernel/groups.o
CC kernel/kcmp.o
CC drivers/md/dm-raid1.o
CC drivers/hid/hid-debug.o
AR drivers/net/ethernet/ni/built-in.a
CC net/ipv4/ipconfig.o
CC drivers/acpi/fan_core.o
CC [M] drivers/gpu/drm/xe/xe_guc_ct.o
CC drivers/gpu/drm/i915/gt/intel_engine_user.o
CC net/ipv4/netfilter.o
CC drivers/gpu/drm/drm_managed.o
AR drivers/cpufreq/built-in.a
CC drivers/hid/hidraw.o
AR mm/built-in.a
CC drivers/hid/hid-generic.o
CC drivers/hid/hid-a4tech.o
CC kernel/freezer.o
GEN lib/oid_registry_data.c
CC drivers/firmware/efi/libstub/lib-cmdline.o
CC drivers/gpu/drm/drm_mm.o
CC drivers/hid/hid-apple.o
CC drivers/acpi/acpica/utcksum.o
CC drivers/acpi/fan_attr.o
CC kernel/profile.o
CC drivers/firmware/efi/libstub/lib-ctype.o
CC kernel/stacktrace.o
CC arch/x86/kernel/kvm.o
CC drivers/firmware/efi/libstub/alignedmem.o
CC fs/statfs.o
CC lib/ucs2_string.o
CC drivers/md/dm-log.o
CC [M] drivers/gpu/drm/xe/xe_guc_db_mgr.o
CC drivers/firmware/efi/tpm.o
CC drivers/gpu/drm/i915/gt/intel_execlists_submission.o
CC drivers/net/ethernet/nvidia/forcedeth.o
CC drivers/acpi/acpica/utcopy.o
CC drivers/gpu/drm/drm_mode_config.o
CC arch/x86/kernel/kvmclock.o
CC net/ipv4/tcp_cubic.o
CC lib/sbitmap.o
CC drivers/acpi/fan_hwmon.o
CC drivers/hid/hid-belkin.o
CC drivers/gpu/drm/drm_mode_object.o
AR drivers/nvmem/built-in.a
CC drivers/firmware/efi/libstub/relocate.o
CC drivers/firmware/efi/libstub/printk.o
CC drivers/gpu/drm/i915/gt/intel_ggtt.o
AR drivers/net/ethernet/oki-semi/built-in.a
AR drivers/net/ethernet/packetengines/built-in.a
CC fs/fs_pin.o
CC drivers/gpu/drm/drm_modes.o
AR drivers/net/ethernet/qlogic/built-in.a
AR drivers/net/ethernet/qualcomm/emac/built-in.a
CC net/ipv6/mcast_snoop.o
AR drivers/net/ethernet/qualcomm/built-in.a
CC fs/nsfs.o
CC drivers/gpu/drm/i915/gt/intel_ggtt_fencing.o
CC drivers/gpu/drm/i915/gt/intel_gt.o
CC net/ipv4/tcp_sigpool.o
CC drivers/firmware/efi/libstub/vsprintf.o
CC kernel/dma.o
CC drivers/net/ethernet/realtek/8139too.o
CC drivers/acpi/acpica/utexcep.o
CC drivers/hid/hid-cherry.o
CC drivers/net/ethernet/realtek/r8169_main.o
CC [M] drivers/gpu/drm/xe/xe_guc_hwconfig.o
CC drivers/acpi/acpi_video.o
CC drivers/firmware/efi/memmap.o
CC drivers/net/ethernet/realtek/r8169_firmware.o
AR drivers/net/ethernet/renesas/built-in.a
CC drivers/acpi/video_detect.o
CC fs/fs_types.o
CC net/ipv4/cipso_ipv4.o
CC [M] drivers/gpu/drm/xe/xe_guc_id_mgr.o
CC lib/group_cpus.o
CC drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.o
CC drivers/gpu/drm/drm_modeset_lock.o
CC arch/x86/kernel/paravirt.o
CC drivers/net/ethernet/realtek/r8169_phy_config.o
AR drivers/net/ethernet/rdc/built-in.a
CC drivers/firmware/efi/capsule.o
CC fs/fs_context.o
CC drivers/md/dm-region-hash.o
CC drivers/gpu/drm/drm_plane.o
CC drivers/acpi/acpica/utdebug.o
CC drivers/acpi/acpica/utdecode.o
CC drivers/gpu/drm/drm_prime.o
CC arch/x86/kernel/pvclock.o
CC drivers/hid/hid-chicony.o
CC drivers/firmware/efi/libstub/x86-stub.o
CC drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.o
CC kernel/smp.o
CC net/ipv4/xfrm4_policy.o
CC drivers/firmware/efi/libstub/smbios.o
AR drivers/net/ethernet/intel/e1000e/built-in.a
CC fs/fs_parser.o
AR drivers/net/ethernet/intel/built-in.a
AR drivers/net/ethernet/rocker/built-in.a
CC drivers/firmware/efi/esrt.o
CC drivers/firmware/efi/runtime-wrappers.o
CC [M] drivers/gpu/drm/xe/xe_guc_klv_helpers.o
CC arch/x86/kernel/pcspeaker.o
CC net/ipv4/xfrm4_state.o
CC drivers/acpi/acpica/utdelete.o
CC lib/fw_table.o
AR drivers/net/ethernet/samsung/built-in.a
CC drivers/firmware/efi/capsule-loader.o
CC drivers/gpu/drm/i915/gt/intel_gt_clock_utils.o
STUBCPY drivers/firmware/efi/libstub/alignedmem.stub.o
CC drivers/acpi/processor_driver.o
CC drivers/firmware/efi/earlycon.o
CC drivers/gpu/drm/drm_print.o
CC [M] drivers/gpu/drm/xe/xe_guc_log.o
CC kernel/uid16.o
AR net/ipv6/built-in.a
CC fs/fsopen.o
CC [M] drivers/gpu/drm/xe/xe_guc_pc.o
CC drivers/acpi/acpica/uterror.o
CC drivers/md/dm-zero.o
CC drivers/hid/hid-cypress.o
STUBCPY drivers/firmware/efi/libstub/efi-stub-helper.stub.o
CC drivers/hid/hid-ezkey.o
CC arch/x86/kernel/check.o
CC kernel/kallsyms.o
CC kernel/acct.o
AR drivers/net/ethernet/seeq/built-in.a
STUBCPY drivers/firmware/efi/libstub/file.stub.o
CC [M] drivers/gpu/drm/xe/xe_guc_submit.o
STUBCPY drivers/firmware/efi/libstub/gop.stub.o
CC net/ipv4/xfrm4_input.o
CC drivers/hid/hid-gyration.o
CC [M] drivers/gpu/drm/xe/xe_heci_gsc.o
AR lib/lib.a
CC kernel/vmcore_info.o
CC kernel/elfcorehdr.o
AR fs/nfs/built-in.a
CC drivers/hid/hid-ite.o
GEN lib/crc32table.h
CC lib/oid_registry.o
CC arch/x86/kernel/uprobes.o
CC drivers/acpi/processor_thermal.o
CC kernel/crash_reserve.o
STUBCPY drivers/firmware/efi/libstub/lib-cmdline.stub.o
STUBCPY drivers/firmware/efi/libstub/lib-ctype.stub.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine.o
STUBCPY drivers/firmware/efi/libstub/mem.stub.o
STUBCPY drivers/firmware/efi/libstub/pci.stub.o
CC fs/init.o
CC kernel/kexec_core.o
AR drivers/net/ethernet/silan/built-in.a
STUBCPY drivers/firmware/efi/libstub/printk.stub.o
CC drivers/acpi/acpica/uteval.o
CC drivers/hid/hid-kensington.o
STUBCPY drivers/firmware/efi/libstub/random.stub.o
CC drivers/gpu/drm/drm_property.o
STUBCPY drivers/firmware/efi/libstub/randomalloc.stub.o
CC drivers/hid/hid-lg.o
CC drivers/acpi/processor_idle.o
STUBCPY drivers/firmware/efi/libstub/relocate.stub.o
STUBCPY drivers/firmware/efi/libstub/secureboot.stub.o
STUBCPY drivers/firmware/efi/libstub/skip_spaces.stub.o
STUBCPY drivers/firmware/efi/libstub/smbios.stub.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.o
STUBCPY drivers/firmware/efi/libstub/tpm.stub.o
STUBCPY drivers/firmware/efi/libstub/vsprintf.stub.o
STUBCPY drivers/firmware/efi/libstub/x86-stub.stub.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine_group.o
AR drivers/firmware/efi/libstub/lib.a
CC drivers/acpi/acpica/utglobal.o
CC kernel/crash_core.o
CC drivers/hid/hid-lgff.o
AR drivers/firmware/efi/built-in.a
CC [M] drivers/gpu/drm/xe/xe_hw_fence.o
AR drivers/firmware/built-in.a
CC fs/kernel_read_file.o
CC fs/mnt_idmapping.o
CC kernel/kexec.o
CC [M] drivers/gpu/drm/xe/xe_huc.o
AR drivers/md/built-in.a
CC kernel/utsname.o
CC lib/crc32.o
CC drivers/gpu/drm/i915/gt/intel_gt_debugfs.o
CC drivers/hid/hid-lg4ff.o
CC drivers/hid/hid-lg-g15.o
CC drivers/hid/hid-microsoft.o
CC drivers/gpu/drm/drm_rect.o
AR drivers/net/ethernet/sis/built-in.a
CC [M] drivers/gpu/drm/xe/xe_irq.o
CC drivers/gpu/drm/drm_syncobj.o
CC drivers/acpi/processor_throttling.o
CC fs/remap_range.o
CC drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.o
AR drivers/net/ethernet/sfc/built-in.a
CC arch/x86/kernel/perf_regs.o
CC drivers/acpi/acpica/uthex.o
CC arch/x86/kernel/tracepoint.o
CC [M] drivers/gpu/drm/xe/xe_lrc.o
CC drivers/gpu/drm/drm_sysfs.o
CC drivers/hid/hid-monterey.o
CC fs/pidfs.o
CC arch/x86/kernel/itmt.o
CC drivers/acpi/acpica/utids.o
CC arch/x86/kernel/umip.o
CC kernel/pid_namespace.o
AR drivers/net/ethernet/smsc/built-in.a
CC drivers/gpu/drm/i915/gt/intel_gt_irq.o
CC kernel/stop_machine.o
AR drivers/net/ethernet/socionext/built-in.a
CC drivers/gpu/drm/drm_trace_points.o
CC net/ipv4/xfrm4_output.o
CC drivers/hid/hid-ntrig.o
CC drivers/gpu/drm/drm_vblank.o
CC arch/x86/kernel/unwind_frame.o
AR lib/built-in.a
CC drivers/acpi/processor_perflib.o
CC drivers/gpu/drm/i915/gt/intel_gt_mcr.o
CC drivers/gpu/drm/drm_vblank_work.o
CC drivers/acpi/container.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm.o
CC drivers/acpi/acpica/utinit.o
CC net/ipv4/xfrm4_protocol.o
AR drivers/net/ethernet/stmicro/built-in.a
CC drivers/gpu/drm/drm_vma_manager.o
CC drivers/hid/hid-pl.o
CC drivers/acpi/thermal_lib.o
CC drivers/gpu/drm/drm_writeback.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.o
CC drivers/acpi/thermal.o
CC [M] drivers/gpu/drm/xe/xe_migrate.o
CC drivers/hid/hid-petalynx.o
CC kernel/audit.o
CC drivers/gpu/drm/drm_panel.o
CC [M] drivers/gpu/drm/xe/xe_mmio.o
AR drivers/net/ethernet/sun/built-in.a
CC kernel/auditfilter.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm_irq.o
CC fs/buffer.o
CC drivers/acpi/nhlt.o
AR drivers/net/ethernet/nvidia/built-in.a
CC drivers/gpu/drm/drm_pci.o
CC [M] drivers/gpu/drm/xe/xe_mocs.o
CC kernel/auditsc.o
CC drivers/acpi/acpica/utlock.o
AR net/mac80211/built-in.a
CC fs/mpage.o
CC drivers/hid/hid-redragon.o
AR drivers/net/ethernet/tehuti/built-in.a
CC drivers/gpu/drm/i915/gt/intel_gt_requests.o
CC drivers/gpu/drm/drm_debugfs.o
CC drivers/acpi/acpi_memhotplug.o
CC drivers/hid/hid-samsung.o
CC [M] drivers/gpu/drm/xe/xe_module.o
CC drivers/hid/hid-sony.o
CC drivers/gpu/drm/i915/gt/intel_gt_sysfs.o
CC fs/proc_namespace.o
CC drivers/acpi/ioapic.o
CC drivers/hid/hid-sunplus.o
AR drivers/net/ethernet/ti/built-in.a
CC drivers/acpi/acpica/utmath.o
AR arch/x86/kernel/built-in.a
AR arch/x86/built-in.a
CC kernel/audit_watch.o
CC kernel/audit_fsnotify.o
AR drivers/net/ethernet/vertexcom/built-in.a
AR drivers/net/ethernet/via/built-in.a
CC [M] drivers/gpu/drm/xe/xe_oa.o
CC drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.o
CC kernel/audit_tree.o
CC drivers/gpu/drm/drm_debugfs_crc.o
CC drivers/hid/hid-topseed.o
CC drivers/acpi/battery.o
CC drivers/acpi/bgrt.o
AR drivers/net/ethernet/wangxun/built-in.a
AR drivers/net/ethernet/wiznet/built-in.a
CC drivers/gpu/drm/drm_panel_orientation_quirks.o
CC [M] drivers/gpu/drm/xe/xe_observation.o
AR drivers/net/ethernet/realtek/built-in.a
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
AR drivers/net/ethernet/built-in.a
CC drivers/acpi/spcr.o
CC drivers/gpu/drm/i915/gt/intel_gtt.o
CC fs/direct-io.o
CC fs/eventpoll.o
CC drivers/acpi/acpica/utmisc.o
CC kernel/kprobes.o
AR drivers/net/built-in.a
CC fs/anon_inodes.o
CC kernel/seccomp.o
CC drivers/gpu/drm/i915/gt/intel_llc.o
CC drivers/gpu/drm/i915/gt/intel_lrc.o
CC drivers/acpi/acpica/utmutex.o
CC kernel/relay.o
CC drivers/gpu/drm/i915/gt/intel_migrate.o
CC fs/signalfd.o
CC [M] drivers/gpu/drm/xe/xe_pat.o
CC [M] drivers/gpu/drm/xe/xe_pci.o
CC drivers/gpu/drm/i915/gt/intel_mocs.o
CC drivers/acpi/acpica/utnonansi.o
CC drivers/gpu/drm/drm_buddy.o
CC kernel/utsname_sysctl.o
AR net/ipv4/built-in.a
CC drivers/gpu/drm/i915/gt/intel_ppgtt.o
AR net/built-in.a
CC kernel/delayacct.o
CC drivers/gpu/drm/i915/gt/intel_rc6.o
CC fs/timerfd.o
CC drivers/gpu/drm/drm_gem_shmem_helper.o
CC drivers/acpi/acpica/utobject.o
CC kernel/taskstats.o
CC drivers/gpu/drm/i915/gt/intel_region_lmem.o
CC fs/eventfd.o
CC [M] drivers/gpu/drm/xe/xe_pcode.o
CC drivers/acpi/acpica/utosi.o
CC drivers/acpi/acpica/utownerid.o
CC drivers/gpu/drm/drm_atomic_helper.o
CC [M] drivers/gpu/drm/xe/xe_pm.o
CC drivers/acpi/acpica/utpredef.o
CC drivers/gpu/drm/i915/gt/intel_renderstate.o
CC fs/aio.o
CC [M] drivers/gpu/drm/xe/xe_preempt_fence.o
CC drivers/gpu/drm/drm_atomic_state_helper.o
CC drivers/acpi/acpica/utresdecode.o
CC kernel/tsacct.o
CC drivers/gpu/drm/i915/gt/intel_reset.o
AR drivers/hid/built-in.a
CC drivers/gpu/drm/drm_crtc_helper.o
CC kernel/tracepoint.o
CC [M] drivers/gpu/drm/xe/xe_pt.o
CC fs/locks.o
CC drivers/gpu/drm/i915/gt/intel_ring.o
CC drivers/acpi/acpica/utresrc.o
CC drivers/acpi/acpica/utstate.o
CC [M] drivers/gpu/drm/xe/xe_pt_walk.o
CC drivers/acpi/acpica/utstring.o
CC drivers/gpu/drm/drm_damage_helper.o
CC kernel/irq_work.o
CC fs/binfmt_misc.o
CC [M] drivers/gpu/drm/xe/xe_query.o
CC drivers/acpi/acpica/utstrsuppt.o
CC fs/binfmt_script.o
CC drivers/gpu/drm/i915/gt/intel_ring_submission.o
CC fs/binfmt_elf.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/drm_flip_work.o
CC drivers/acpi/acpica/utstrtoul64.o
CC kernel/static_call.o
CC drivers/gpu/drm/i915/gt/intel_rps.o
CC drivers/acpi/acpica/utxface.o
CC [M] drivers/gpu/drm/xe/xe_reg_whitelist.o
CC drivers/gpu/drm/drm_format_helper.o
CC drivers/gpu/drm/i915/gt/intel_sa_media.o
CC fs/mbcache.o
CC fs/posix_acl.o
CC drivers/gpu/drm/drm_gem_atomic_helper.o
CC drivers/gpu/drm/i915/gt/intel_sseu.o
CC [M] drivers/gpu/drm/xe/xe_rtp.o
CC kernel/padata.o
CC drivers/gpu/drm/i915/gt/intel_sseu_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_ring_ops.o
CC drivers/gpu/drm/drm_gem_framebuffer_helper.o
CC kernel/jump_label.o
CC fs/coredump.o
CC drivers/acpi/acpica/utxfinit.o
CC [M] drivers/gpu/drm/xe/xe_sa.o
CC kernel/context_tracking.o
CC drivers/acpi/acpica/utxferror.o
CC drivers/acpi/acpica/utxfmutex.o
CC drivers/gpu/drm/drm_kms_helper_common.o
CC kernel/iomem.o
CC [M] drivers/gpu/drm/xe/xe_sched_job.o
CC drivers/gpu/drm/drm_modeset_helper.o
CC drivers/gpu/drm/drm_plane_helper.o
CC kernel/rseq.o
CC drivers/gpu/drm/drm_probe_helper.o
CC [M] drivers/gpu/drm/xe/xe_step.o
CC drivers/gpu/drm/i915/gt/intel_timeline.o
CC fs/drop_caches.o
CC drivers/gpu/drm/i915/gt/intel_tlb.o
CC [M] drivers/gpu/drm/xe/xe_sync.o
CC drivers/gpu/drm/drm_self_refresh_helper.o
CC fs/sysctls.o
CC [M] drivers/gpu/drm/xe/xe_tile.o
CC drivers/gpu/drm/i915/gt/intel_wopcm.o
CC fs/fhandle.o
CC drivers/gpu/drm/drm_simple_kms_helper.o
CC [M] drivers/gpu/drm/xe/xe_tile_sysfs.o
CC drivers/gpu/drm/i915/gt/intel_workarounds.o
CC [M] drivers/gpu/drm/xe/xe_trace.o
AR drivers/acpi/acpica/built-in.a
CC drivers/gpu/drm/bridge/panel.o
AR drivers/acpi/built-in.a
CC drivers/gpu/drm/drm_mipi_dsi.o
CC drivers/gpu/drm/i915/gt/shmem_utils.o
CC [M] drivers/gpu/drm/xe/xe_trace_bo.o
CC [M] drivers/gpu/drm/xe/xe_trace_guc.o
CC drivers/gpu/drm/i915/gt/sysfs_engines.o
CC drivers/gpu/drm/i915/gt/intel_ggtt_gmch.o
CC [M] drivers/gpu/drm/xe/xe_trace_lrc.o
CC [M] drivers/gpu/drm/drm_exec.o
CC [M] drivers/gpu/drm/drm_gpuvm.o
CC drivers/gpu/drm/i915/gt/gen6_renderstate.o
CC [M] drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
CC [M] drivers/gpu/drm/drm_suballoc.o
CC drivers/gpu/drm/i915/gt/gen7_renderstate.o
CC [M] drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
CC drivers/gpu/drm/i915/gt/gen8_renderstate.o
CC [M] drivers/gpu/drm/xe/xe_ttm_vram_mgr.o
CC [M] drivers/gpu/drm/drm_gem_ttm_helper.o
CC drivers/gpu/drm/i915/gt/gen9_renderstate.o
CC [M] drivers/gpu/drm/xe/xe_tuning.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 [M] drivers/gpu/drm/xe/xe_uc.o
CC [M] drivers/gpu/drm/xe/xe_uc_fw.o
CC drivers/gpu/drm/i915/gem/i915_gem_create.o
CC [M] drivers/gpu/drm/xe/xe_vm.o
CC [M] drivers/gpu/drm/xe/xe_vram.o
CC drivers/gpu/drm/i915/gem/i915_gem_dmabuf.o
AR kernel/built-in.a
CC [M] drivers/gpu/drm/xe/xe_vram_freq.o
CC drivers/gpu/drm/i915/gem/i915_gem_domain.o
CC [M] drivers/gpu/drm/xe/xe_vsec.o
CC drivers/gpu/drm/i915/gem/i915_gem_execbuffer.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/gem/i915_gem_internal.o
CC drivers/gpu/drm/i915/gem/i915_gem_lmem.o
CC drivers/gpu/drm/i915/gem/i915_gem_mman.o
CC drivers/gpu/drm/i915/gem/i915_gem_object.o
CC [M] drivers/gpu/drm/xe/xe_hwmon.o
CC [M] drivers/gpu/drm/xe/xe_gt_sriov_vf.o
CC [M] drivers/gpu/drm/xe/xe_guc_relay.o
CC drivers/gpu/drm/i915/gem/i915_gem_pages.o
CC [M] drivers/gpu/drm/xe/xe_memirq.o
CC [M] drivers/gpu/drm/xe/xe_sriov.o
CC drivers/gpu/drm/i915/gem/i915_gem_phys.o
CC drivers/gpu/drm/i915/gem/i915_gem_pm.o
LD [M] drivers/gpu/drm/drm_suballoc_helper.o
CC drivers/gpu/drm/i915/gem/i915_gem_region.o
CC [M] drivers/gpu/drm/xe/xe_sriov_vf.o
LD [M] drivers/gpu/drm/drm_ttm_helper.o
CC drivers/gpu/drm/i915/gem/i915_gem_shmem.o
CC [M] drivers/gpu/drm/xe/display/ext/i915_irq.o
CC drivers/gpu/drm/i915/gem/i915_gem_shrinker.o
CC [M] drivers/gpu/drm/xe/display/ext/i915_utils.o
CC drivers/gpu/drm/i915/gem/i915_gem_stolen.o
CC drivers/gpu/drm/i915/gem/i915_gem_throttle.o
CC [M] drivers/gpu/drm/xe/display/intel_bo.o
CC [M] drivers/gpu/drm/xe/display/intel_fb_bo.o
CC drivers/gpu/drm/i915/gem/i915_gem_tiling.o
AR fs/built-in.a
CC [M] drivers/gpu/drm/xe/display/intel_fbdev_fb.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 [M] drivers/gpu/drm/xe/display/xe_display_wa.o
CC [M] drivers/gpu/drm/xe/display/xe_dsb_buffer.o
CC [M] drivers/gpu/drm/xe/display/xe_fb_pin.o
CC [M] drivers/gpu/drm/xe/display/xe_hdcp_gsc.o
CC [M] drivers/gpu/drm/xe/display/xe_plane_initial.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm.o
CC [M] drivers/gpu/drm/xe/display/xe_tdf.o
CC [M] drivers/gpu/drm/xe/i915-soc/intel_dram.o
CC [M] drivers/gpu/drm/xe/i915-soc/intel_pch.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm_move.o
CC [M] drivers/gpu/drm/xe/i915-soc/intel_rom.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.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/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/i915-display/intel_atomic_plane.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_audio.o
CC drivers/gpu/drm/i915/i915_active.o
CC drivers/gpu/drm/i915/i915_cmd_parser.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_backlight.o
CC drivers/gpu/drm/i915/i915_deps.o
CC drivers/gpu/drm/i915/i915_gem.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_bios.o
CC drivers/gpu/drm/i915/i915_gem_evict.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/i915_gem_gtt.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_color.o
CC drivers/gpu/drm/i915/i915_gem_ww.o
CC drivers/gpu/drm/i915/i915_query.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_combo_phy.o
CC drivers/gpu/drm/i915/i915_request.o
CC drivers/gpu/drm/i915/i915_scheduler.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_connector.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_crtc.o
CC drivers/gpu/drm/i915/i915_trace_points.o
CC drivers/gpu/drm/i915/i915_ttm_buddy_manager.o
CC drivers/gpu/drm/i915/i915_vma.o
CC drivers/gpu/drm/i915/i915_vma_resource.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/gt/uc/intel_gsc_fw.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_ddi.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_ddi_buf_trans.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.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 drivers/gpu/drm/i915/gt/uc/intel_guc_ads.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_capture.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_conversion.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_ct.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_device.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_driver.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_fw.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_hwconfig.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_irq.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_log.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_rc.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_params.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_submission.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power.o
CC drivers/gpu/drm/i915/gt/uc/intel_huc.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/gt/uc/intel_huc_debugfs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_trace.o
CC drivers/gpu/drm/i915/gt/uc/intel_huc_fw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_wa.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dkl_phy.o
CC drivers/gpu/drm/i915/gt/uc/intel_uc.o
CC drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.o
CC drivers/gpu/drm/i915/gt/uc/intel_uc_fw.o
CC drivers/gpu/drm/i915/gt/intel_gsc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dmc.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_dp.o
CC drivers/gpu/drm/i915/display/i9xx_plane.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_aux.o
CC drivers/gpu/drm/i915/display/i9xx_display_sr.o
CC drivers/gpu/drm/i915/display/i9xx_wm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_aux_backlight.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_hdcp.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_dp_link_training.o
CC drivers/gpu/drm/i915/display/intel_atomic_plane.o
CC drivers/gpu/drm/i915/display/intel_audio.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_mst.o
CC drivers/gpu/drm/i915/display/intel_bios.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_test.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpll.o
CC drivers/gpu/drm/i915/display/intel_bo.o
CC drivers/gpu/drm/i915/display/intel_bw.o
CC drivers/gpu/drm/i915/display/intel_cdclk.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpll_mgr.o
CC drivers/gpu/drm/i915/display/intel_color.o
CC drivers/gpu/drm/i915/display/intel_combo_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpt_common.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_drrs.o
CC drivers/gpu/drm/i915/display/intel_connector.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsb.o
CC drivers/gpu/drm/i915/display/intel_crtc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi.o
CC drivers/gpu/drm/i915/display/intel_crtc_state_dump.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi_dcs_backlight.o
CC drivers/gpu/drm/i915/display/intel_cursor.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi_vbt.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_encoder.o
CC drivers/gpu/drm/i915/display/intel_display.o
CC drivers/gpu/drm/i915/display/intel_display_conversion.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fb.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fbc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fdi.o
CC drivers/gpu/drm/i915/display/intel_display_driver.o
CC drivers/gpu/drm/i915/display/intel_display_irq.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fifo_underrun.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_frontbuffer.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 [M] drivers/gpu/drm/xe/i915-display/intel_global_state.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_gmbus.o
CC drivers/gpu/drm/i915/display/intel_display_power_well.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdcp.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdcp_gsc_message.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdmi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hotplug.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hotplug_irq.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hti.o
CC drivers/gpu/drm/i915/display/intel_display_reset.o
CC drivers/gpu/drm/i915/display/intel_display_rps.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_link_bw.o
CC drivers/gpu/drm/i915/display/intel_display_snapshot.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_lspcon.o
CC drivers/gpu/drm/i915/display/intel_display_wa.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_lock.o
CC drivers/gpu/drm/i915/display/intel_dmc.o
CC drivers/gpu/drm/i915/display/intel_dmc_wl.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_setup.o
CC drivers/gpu/drm/i915/display/intel_dpio_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_verify.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_panel.o
CC drivers/gpu/drm/i915/display/intel_dpll.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pfit.o
CC drivers/gpu/drm/i915/display/intel_dpll_mgr.o
CC drivers/gpu/drm/i915/display/intel_dpt.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pmdemand.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pps.o
CC drivers/gpu/drm/i915/display/intel_dpt_common.o
CC drivers/gpu/drm/i915/display/intel_drrs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_psr.o
CC drivers/gpu/drm/i915/display/intel_dsb.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_qp_tables.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_quirks.o
CC drivers/gpu/drm/i915/display/intel_dsb_buffer.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_snps_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_tc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vblank.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vdsc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vga.o
CC drivers/gpu/drm/i915/display/intel_fb.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vrr.o
CC drivers/gpu/drm/i915/display/intel_fb_bo.o
CC drivers/gpu/drm/i915/display/intel_fb_pin.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_fbc.o
CC drivers/gpu/drm/i915/display/intel_fdi.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 drivers/gpu/drm/i915/display/intel_fifo_underrun.o
CC [M] drivers/gpu/drm/xe/i915-display/skl_watermark.o
CC drivers/gpu/drm/i915/display/intel_frontbuffer.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_acpi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_opregion.o
CC drivers/gpu/drm/i915/display/intel_global_state.o
CC [M] drivers/gpu/drm/xe/xe_debugfs.o
CC drivers/gpu/drm/i915/display/intel_hdcp.o
CC [M] drivers/gpu/drm/xe/xe_gt_debugfs.o
CC drivers/gpu/drm/i915/display/intel_hdcp_gsc.o
CC drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.o
CC [M] drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.o
CC drivers/gpu/drm/i915/display/intel_hotplug.o
CC [M] drivers/gpu/drm/xe/xe_gt_stats.o
CC drivers/gpu/drm/i915/display/intel_hotplug_irq.o
CC [M] drivers/gpu/drm/xe/xe_guc_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_huc_debugfs.o
CC drivers/gpu/drm/i915/display/intel_hti.o
CC drivers/gpu/drm/i915/display/intel_link_bw.o
CC drivers/gpu/drm/i915/display/intel_load_detect.o
CC [M] drivers/gpu/drm/xe/xe_uc_debugfs.o
CC drivers/gpu/drm/i915/display/intel_lpe_audio.o
CC drivers/gpu/drm/i915/display/intel_modeset_lock.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_debugfs.o
CC drivers/gpu/drm/i915/display/intel_modeset_setup.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_debugfs_params.o
CC drivers/gpu/drm/i915/display/intel_modeset_verify.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pipe_crc.o
CC drivers/gpu/drm/i915/display/intel_overlay.o
CC drivers/gpu/drm/i915/display/intel_pch_display.o
CC drivers/gpu/drm/i915/display/intel_pch_refclk.o
CC drivers/gpu/drm/i915/display/intel_plane_initial.o
CC drivers/gpu/drm/i915/display/intel_pmdemand.o
CC drivers/gpu/drm/i915/display/intel_psr.o
CC drivers/gpu/drm/i915/display/intel_quirks.o
CC drivers/gpu/drm/i915/display/intel_sprite.o
CC drivers/gpu/drm/i915/display/intel_sprite_uapi.o
CC drivers/gpu/drm/i915/display/intel_tc.o
CC drivers/gpu/drm/i915/display/intel_vblank.o
CC drivers/gpu/drm/i915/display/intel_vga.o
CC drivers/gpu/drm/i915/display/intel_wm.o
CC drivers/gpu/drm/i915/display/skl_scaler.o
CC drivers/gpu/drm/i915/display/skl_universal_plane.o
CC drivers/gpu/drm/i915/display/skl_watermark.o
CC drivers/gpu/drm/i915/display/intel_acpi.o
CC drivers/gpu/drm/i915/display/intel_opregion.o
CC drivers/gpu/drm/i915/display/intel_display_debugfs.o
CC drivers/gpu/drm/i915/display/intel_display_debugfs_params.o
CC drivers/gpu/drm/i915/display/intel_pipe_crc.o
CC drivers/gpu/drm/i915/display/dvo_ch7017.o
CC drivers/gpu/drm/i915/display/dvo_ch7xxx.o
CC drivers/gpu/drm/i915/display/dvo_ivch.o
CC drivers/gpu/drm/i915/display/dvo_ns2501.o
CC drivers/gpu/drm/i915/display/dvo_sil164.o
CC drivers/gpu/drm/i915/display/dvo_tfp410.o
CC drivers/gpu/drm/i915/display/g4x_dp.o
CC drivers/gpu/drm/i915/display/g4x_hdmi.o
CC drivers/gpu/drm/i915/display/icl_dsi.o
CC drivers/gpu/drm/i915/display/intel_backlight.o
CC drivers/gpu/drm/i915/display/intel_crt.o
CC drivers/gpu/drm/i915/display/intel_cx0_phy.o
CC drivers/gpu/drm/i915/display/intel_ddi.o
CC drivers/gpu/drm/i915/display/intel_ddi_buf_trans.o
CC drivers/gpu/drm/i915/display/intel_display_device.o
CC drivers/gpu/drm/i915/display/intel_display_trace.o
CC drivers/gpu/drm/i915/display/intel_dkl_phy.o
CC drivers/gpu/drm/i915/display/intel_dp.o
CC drivers/gpu/drm/i915/display/intel_dp_aux.o
CC drivers/gpu/drm/i915/display/intel_dp_aux_backlight.o
CC drivers/gpu/drm/i915/display/intel_dp_hdcp.o
CC drivers/gpu/drm/i915/display/intel_dp_link_training.o
CC drivers/gpu/drm/i915/display/intel_dp_mst.o
CC drivers/gpu/drm/i915/display/intel_dp_test.o
CC drivers/gpu/drm/i915/display/intel_dsi.o
CC drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.o
CC drivers/gpu/drm/i915/display/intel_dsi_vbt.o
CC drivers/gpu/drm/i915/display/intel_dvo.o
CC drivers/gpu/drm/i915/display/intel_encoder.o
CC drivers/gpu/drm/i915/display/intel_gmbus.o
CC drivers/gpu/drm/i915/display/intel_hdmi.o
CC drivers/gpu/drm/i915/display/intel_lspcon.o
CC drivers/gpu/drm/i915/display/intel_lvds.o
CC drivers/gpu/drm/i915/display/intel_panel.o
CC drivers/gpu/drm/i915/display/intel_pfit.o
CC drivers/gpu/drm/i915/display/intel_pps.o
CC drivers/gpu/drm/i915/display/intel_qp_tables.o
CC drivers/gpu/drm/i915/display/intel_sdvo.o
CC drivers/gpu/drm/i915/display/intel_snps_phy.o
CC drivers/gpu/drm/i915/display/intel_tv.o
CC drivers/gpu/drm/i915/display/intel_vdsc.o
CC drivers/gpu/drm/i915/display/intel_vrr.o
CC drivers/gpu/drm/i915/display/vlv_dsi.o
CC drivers/gpu/drm/i915/display/vlv_dsi_pll.o
CC drivers/gpu/drm/i915/i915_perf.o
CC drivers/gpu/drm/i915/pxp/intel_pxp.o
CC drivers/gpu/drm/i915/pxp/intel_pxp_huc.o
CC drivers/gpu/drm/i915/pxp/intel_pxp_tee.o
CC drivers/gpu/drm/i915/i915_gpu_error.o
CC drivers/gpu/drm/i915/i915_vgpu.o
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] .module-common.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] 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] fs/efivarfs/efivarfs.ko
LD [M] drivers/gpu/drm/drm_exec.ko
LD [M] drivers/gpu/drm/drm_gpuvm.ko
LD [M] drivers/gpu/drm/drm_suballoc_helper.ko
LD [M] drivers/gpu/drm/drm_ttm_helper.ko
LD [M] drivers/gpu/drm/scheduler/gpu-sched.ko
LD [M] net/netfilter/xt_nat.ko
LD [M] net/netfilter/xt_MASQUERADE.ko
LD [M] drivers/thermal/intel/x86_pkg_temp_thermal.ko
LD [M] drivers/gpu/drm/xe/xe.ko
LD [M] net/netfilter/xt_addrtype.ko
LD [M] net/netfilter/xt_mark.ko
LD [M] net/netfilter/xt_LOG.ko
LD [M] net/ipv4/netfilter/iptable_nat.ko
LD [M] net/netfilter/nf_log_syslog.ko
UPD include/generated/utsversion.h
CC init/version-timestamp.o
KSYMS .tmp_vmlinux0.kallsyms.S
AS .tmp_vmlinux0.kallsyms.o
LD .tmp_vmlinux1
NM .tmp_vmlinux1.syms
KSYMS .tmp_vmlinux1.kallsyms.S
AS .tmp_vmlinux1.kallsyms.o
LD .tmp_vmlinux2
NM .tmp_vmlinux2.syms
KSYMS .tmp_vmlinux2.kallsyms.S
AS .tmp_vmlinux2.kallsyms.o
LD vmlinux
NM System.map
SORTTAB vmlinux
RELOCS arch/x86/boot/compressed/vmlinux.relocs
RSTRIP vmlinux
CC arch/x86/boot/a20.o
AS arch/x86/boot/bioscall.o
CC arch/x86/boot/cmdline.o
AS arch/x86/boot/copy.o
HOSTCC arch/x86/boot/mkcpustr
CC arch/x86/boot/cpuflags.o
CC arch/x86/boot/cpucheck.o
CC arch/x86/boot/early_serial_console.o
CC arch/x86/boot/edd.o
CC arch/x86/boot/main.o
CC arch/x86/boot/memory.o
CC arch/x86/boot/pm.o
AS arch/x86/boot/pmjump.o
CC arch/x86/boot/printf.o
CC arch/x86/boot/regs.o
CC arch/x86/boot/string.o
CC arch/x86/boot/tty.o
CC arch/x86/boot/video.o
CC arch/x86/boot/video-mode.o
CC arch/x86/boot/version.o
CC arch/x86/boot/video-vga.o
CC arch/x86/boot/video-vesa.o
CC arch/x86/boot/video-bios.o
HOSTCC arch/x86/boot/tools/build
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
CPUSTR arch/x86/boot/cpustr.h
CC arch/x86/boot/compressed/string.o
CC arch/x86/boot/compressed/cmdline.o
CC arch/x86/boot/compressed/error.o
CC arch/x86/boot/cpu.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
drivers/gpu/drm/xe/xe_eu_stall.c:78: warning: Function parameter or struct member 'ip_addr' not described in 'xe_eu_stall_data_pvc'
drivers/gpu/drm/xe/xe_eu_stall.c:78: warning: Function parameter or struct member 'active_count' not described in 'xe_eu_stall_data_pvc'
drivers/gpu/drm/xe/xe_eu_stall.c:78: warning: Function parameter or struct member 'other_count' not described in 'xe_eu_stall_data_pvc'
drivers/gpu/drm/xe/xe_eu_stall.c:78: warning: Function parameter or struct member 'control_count' not described in 'xe_eu_stall_data_pvc'
drivers/gpu/drm/xe/xe_eu_stall.c:78: warning: Function parameter or struct member 'pipestall_count' not described in 'xe_eu_stall_data_pvc'
drivers/gpu/drm/xe/xe_eu_stall.c:78: warning: Function parameter or struct member 'send_count' not described in 'xe_eu_stall_data_pvc'
drivers/gpu/drm/xe/xe_eu_stall.c:78: warning: Function parameter or struct member 'dist_acc_count' not described in 'xe_eu_stall_data_pvc'
drivers/gpu/drm/xe/xe_eu_stall.c:78: warning: Function parameter or struct member 'sbid_count' not described in 'xe_eu_stall_data_pvc'
drivers/gpu/drm/xe/xe_eu_stall.c:78: warning: Function parameter or struct member 'sync_count' not described in 'xe_eu_stall_data_pvc'
drivers/gpu/drm/xe/xe_eu_stall.c:78: warning: Function parameter or struct member 'inst_fetch_count' not described in 'xe_eu_stall_data_pvc'
drivers/gpu/drm/xe/xe_eu_stall.c:78: warning: Function parameter or struct member 'unused_bits' not described in 'xe_eu_stall_data_pvc'
drivers/gpu/drm/xe/xe_eu_stall.c:78: warning: Function parameter or struct member 'unused' not described in 'xe_eu_stall_data_pvc'
drivers/gpu/drm/xe/xe_eu_stall.c:114: warning: Function parameter or struct member 'ip_addr' not described in 'xe_eu_stall_data_xe2'
drivers/gpu/drm/xe/xe_eu_stall.c:114: warning: Function parameter or struct member 'tdr_count' not described in 'xe_eu_stall_data_xe2'
drivers/gpu/drm/xe/xe_eu_stall.c:114: warning: Function parameter or struct member 'other_count' not described in 'xe_eu_stall_data_xe2'
drivers/gpu/drm/xe/xe_eu_stall.c:114: warning: Function parameter or struct member 'control_count' not described in 'xe_eu_stall_data_xe2'
drivers/gpu/drm/xe/xe_eu_stall.c:114: warning: Function parameter or struct member 'pipestall_count' not described in 'xe_eu_stall_data_xe2'
drivers/gpu/drm/xe/xe_eu_stall.c:114: warning: Function parameter or struct member 'send_count' not described in 'xe_eu_stall_data_xe2'
drivers/gpu/drm/xe/xe_eu_stall.c:114: warning: Function parameter or struct member 'dist_acc_count' not described in 'xe_eu_stall_data_xe2'
drivers/gpu/drm/xe/xe_eu_stall.c:114: warning: Function parameter or struct member 'sbid_count' not described in 'xe_eu_stall_data_xe2'
drivers/gpu/drm/xe/xe_eu_stall.c:114: warning: Function parameter or struct member 'sync_count' not described in 'xe_eu_stall_data_xe2'
drivers/gpu/drm/xe/xe_eu_stall.c:114: warning: Function parameter or struct member 'inst_fetch_count' not described in 'xe_eu_stall_data_xe2'
drivers/gpu/drm/xe/xe_eu_stall.c:114: warning: Function parameter or struct member 'active_count' not described in 'xe_eu_stall_data_xe2'
drivers/gpu/drm/xe/xe_eu_stall.c:114: warning: Function parameter or struct member 'ex_id' not described in 'xe_eu_stall_data_xe2'
drivers/gpu/drm/xe/xe_eu_stall.c:114: warning: Function parameter or struct member 'end_flag' not described in 'xe_eu_stall_data_xe2'
drivers/gpu/drm/xe/xe_eu_stall.c:114: warning: Function parameter or struct member 'unused_bits' not described in 'xe_eu_stall_data_xe2'
drivers/gpu/drm/xe/xe_eu_stall.c:114: warning: Function parameter or struct member 'unused' not described in 'xe_eu_stall_data_xe2'
drivers/gpu/drm/xe/xe_eu_stall.c:525: warning: Function parameter or struct member 'file' not described in 'xe_eu_stall_stream_read_locked'
drivers/gpu/drm/xe/xe_eu_stall.h:41: warning: Function parameter or struct member 'pollin' not described in 'xe_eu_stall_data_stream'
drivers/gpu/drm/xe/xe_eu_stall.h:41: warning: Function parameter or struct member 'enabled' not described in 'xe_eu_stall_data_stream'
drivers/gpu/drm/xe/xe_eu_stall.h:41: warning: Function parameter or struct member 'poll_period' not described in 'xe_eu_stall_data_stream'
drivers/gpu/drm/xe/xe_eu_stall.h:41: warning: Function parameter or struct member 'wait_num_reports' not described in 'xe_eu_stall_data_stream'
drivers/gpu/drm/xe/xe_eu_stall.h:41: warning: Function parameter or struct member 'per_xecore_buf_size' not described in 'xe_eu_stall_data_stream'
drivers/gpu/drm/xe/xe_eu_stall.h:41: warning: Function parameter or struct member 'poll_wq' not described in 'xe_eu_stall_data_stream'
drivers/gpu/drm/xe/xe_eu_stall.h:41: warning: Function parameter or struct member 'gt' not described in 'xe_eu_stall_data_stream'
drivers/gpu/drm/xe/xe_eu_stall.h:41: warning: Function parameter or struct member 'bo' not described in 'xe_eu_stall_data_stream'
drivers/gpu/drm/xe/xe_eu_stall.h:41: warning: Function parameter or struct member 'xecore_buf' not described in 'xe_eu_stall_data_stream'
drivers/gpu/drm/xe/xe_eu_stall.h:41: warning: Function parameter or struct member 'data_drop' not described in 'xe_eu_stall_data_stream'
drivers/gpu/drm/xe/xe_eu_stall.h:41: warning: Function parameter or struct member 'poll_check_timer' not described in 'xe_eu_stall_data_stream'
drivers/gpu/drm/xe/xe_eu_stall.h:41: warning: Function parameter or struct member 'buf_check_work' not described in 'xe_eu_stall_data_stream'
drivers/gpu/drm/xe/xe_eu_stall.h:41: warning: Function parameter or struct member 'buf_check_wq' not described in 'xe_eu_stall_data_stream'
41 warnings as Errors
run-parts: /workspace/ci/hooks/20-kernel-doc exited with return code 123
^ permalink raw reply [flat|nested] 49+ messages in thread
* ✓ CI.checksparse: success for Add support for EU stall sampling
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
` (11 preceding siblings ...)
2025-01-15 21:16 ` ✗ CI.Hooks: failure " Patchwork
@ 2025-01-15 21:18 ` Patchwork
2025-01-15 21:43 ` ✗ Xe.CI.BAT: failure " Patchwork
` (3 subsequent siblings)
16 siblings, 0 replies; 49+ messages in thread
From: Patchwork @ 2025-01-15 21:18 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
== Series Details ==
Series: Add support for EU stall sampling
URL : https://patchwork.freedesktop.org/series/143572/
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 83dd30e2ec24ab8307774b149fcd998a4191eec2
Sparse version: 0.6.4 (Ubuntu: 0.6.4-4ubuntu3)
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] 49+ messages in thread
* ✗ Xe.CI.BAT: failure for Add support for EU stall sampling
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
` (12 preceding siblings ...)
2025-01-15 21:18 ` ✓ CI.checksparse: success " Patchwork
@ 2025-01-15 21:43 ` Patchwork
2025-01-16 0:37 ` ✗ Xe.CI.Full: " Patchwork
` (2 subsequent siblings)
16 siblings, 0 replies; 49+ messages in thread
From: Patchwork @ 2025-01-15 21:43 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 3612 bytes --]
== Series Details ==
Series: Add support for EU stall sampling
URL : https://patchwork.freedesktop.org/series/143572/
State : failure
== Summary ==
CI Bug Log - changes from xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09_BAT -> xe-pw-143572v1_BAT
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-143572v1_BAT absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-143572v1_BAT, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (9 -> 8)
------------------------------
Missing (1): bat-adlp-vm
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-143572v1_BAT:
### IGT changes ###
#### Possible regressions ####
* igt@xe_intel_bb@render@render-xmajor-256:
- bat-adlp-vf: [PASS][1] -> [DMESG-WARN][2] +1 other test dmesg-warn
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/bat-adlp-vf/igt@xe_intel_bb@render@render-xmajor-256.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/bat-adlp-vf/igt@xe_intel_bb@render@render-xmajor-256.html
Known issues
------------
Here are the changes found in xe-pw-143572v1_BAT that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@xe_exec_balancer@twice-virtual-rebind:
- bat-adlp-vf: [PASS][3] -> [DMESG-WARN][4] ([Intel XE#3958])
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/bat-adlp-vf/igt@xe_exec_balancer@twice-virtual-rebind.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/bat-adlp-vf/igt@xe_exec_balancer@twice-virtual-rebind.html
* igt@xe_live_ktest@xe_migrate:
- bat-adlp-vf: [PASS][5] -> [SKIP][6] ([Intel XE#1192]) +1 other test skip
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/bat-adlp-vf/igt@xe_live_ktest@xe_migrate.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/bat-adlp-vf/igt@xe_live_ktest@xe_migrate.html
#### Warnings ####
* igt@xe_live_ktest@xe_bo:
- bat-adlp-vf: [SKIP][7] ([Intel XE#2229] / [Intel XE#455]) -> [SKIP][8] ([Intel XE#1192])
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/bat-adlp-vf/igt@xe_live_ktest@xe_bo.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/bat-adlp-vf/igt@xe_live_ktest@xe_bo.html
[Intel XE#1192]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1192
[Intel XE#2229]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2229
[Intel XE#3958]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3958
[Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
Build changes
-------------
* IGT: IGT_8191 -> IGT_8192
* Linux: xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09 -> xe-pw-143572v1
IGT_8191: b8395f7e32e23c9e330e9d90d85f3f3a1dd08bda @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
IGT_8192: a3b85ce819b99284bef57aafc7d44f50a62e097f @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09: 72400937e76c02ae6345f0dfa5a598f0b284ab09
xe-pw-143572v1: 143572v1
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/index.html
[-- Attachment #2: Type: text/html, Size: 4351 bytes --]
^ permalink raw reply [flat|nested] 49+ messages in thread
* ✗ Xe.CI.Full: failure for Add support for EU stall sampling
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
` (13 preceding siblings ...)
2025-01-15 21:43 ` ✗ Xe.CI.BAT: failure " Patchwork
@ 2025-01-16 0:37 ` Patchwork
2025-01-16 0:51 ` [PATCH v8 0/7] " Degrood, Felix J
2025-01-16 21:50 ` Olson, Matthew
16 siblings, 0 replies; 49+ messages in thread
From: Patchwork @ 2025-01-16 0:37 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 96015 bytes --]
== Series Details ==
Series: Add support for EU stall sampling
URL : https://patchwork.freedesktop.org/series/143572/
State : failure
== Summary ==
CI Bug Log - changes from xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09_full -> xe-pw-143572v1_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-143572v1_full absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-143572v1_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (4 -> 4)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-143572v1_full:
### IGT changes ###
#### Possible regressions ####
* igt@kms_flip@2x-flip-vs-expired-vblank@ad-dp2-hdmi-a3:
- shard-bmg: [PASS][1] -> [FAIL][2] +1 other test fail
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-2/igt@kms_flip@2x-flip-vs-expired-vblank@ad-dp2-hdmi-a3.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-4/igt@kms_flip@2x-flip-vs-expired-vblank@ad-dp2-hdmi-a3.html
* igt@kms_pm_rpm@dpms-lpsp:
- shard-dg2-set2: [PASS][3] -> [ABORT][4]
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_pm_rpm@dpms-lpsp.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@kms_pm_rpm@dpms-lpsp.html
Known issues
------------
Here are the changes found in xe-pw-143572v1_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@fbdev@eof:
- shard-bmg: [PASS][5] -> [SKIP][6] ([Intel XE#2134])
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-2/igt@fbdev@eof.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@fbdev@eof.html
* igt@kms_async_flips@alternate-sync-async-flip-atomic:
- shard-bmg: [PASS][7] -> [FAIL][8] ([Intel XE#3701] / [Intel XE#3718] / [Intel XE#827])
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-7/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-4/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
* igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-dp-2:
- shard-bmg: [PASS][9] -> [FAIL][10] ([Intel XE#3718] / [Intel XE#827])
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-7/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-dp-2.html
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-4/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-a-dp-2.html
* igt@kms_atomic_transition@plane-all-modeset-transition:
- shard-lnl: NOTRUN -> [SKIP][11] ([Intel XE#3279])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-8/igt@kms_atomic_transition@plane-all-modeset-transition.html
* igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-hdmi-a-1:
- shard-adlp: [PASS][12] -> [FAIL][13] ([Intel XE#3908]) +1 other test fail
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-adlp-4/igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-hdmi-a-1.html
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-3/igt@kms_atomic_transition@plane-all-modeset-transition@pipe-a-hdmi-a-1.html
* igt@kms_big_fb@linear-16bpp-rotate-90:
- shard-dg2-set2: NOTRUN -> [SKIP][14] ([Intel XE#316]) +4 other tests skip
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@kms_big_fb@linear-16bpp-rotate-90.html
* igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
- shard-adlp: NOTRUN -> [DMESG-FAIL][15] ([Intel XE#1033])
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-3/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip:
- shard-adlp: [PASS][16] -> [DMESG-FAIL][17] ([Intel XE#1033]) +12 other tests dmesg-fail
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-adlp-3/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-4/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0:
- shard-dg2-set2: NOTRUN -> [SKIP][18] ([Intel XE#1124]) +4 other tests skip
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0.html
* igt@kms_bw@connected-linear-tiling-1-displays-2560x1440p:
- shard-dg2-set2: NOTRUN -> [SKIP][19] ([Intel XE#367]) +1 other test skip
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-435/igt@kms_bw@connected-linear-tiling-1-displays-2560x1440p.html
* igt@kms_ccs@bad-aux-stride-y-tiled-gen12-rc-ccs-cc@pipe-d-dp-4:
- shard-dg2-set2: NOTRUN -> [SKIP][20] ([Intel XE#455] / [Intel XE#787]) +25 other tests skip
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-434/igt@kms_ccs@bad-aux-stride-y-tiled-gen12-rc-ccs-cc@pipe-d-dp-4.html
* igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs-cc:
- shard-lnl: NOTRUN -> [SKIP][21] ([Intel XE#2887])
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-4/igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs-cc.html
* igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs@pipe-c-hdmi-a-2:
- shard-dg2-set2: NOTRUN -> [SKIP][22] ([Intel XE#787]) +125 other tests skip
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@kms_ccs@crc-primary-suspend-y-tiled-gen12-rc-ccs@pipe-c-hdmi-a-2.html
* igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs:
- shard-bmg: [PASS][23] -> [SKIP][24] ([Intel XE#2136] / [Intel XE#2231]) +2 other tests skip
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-2/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@kms_ccs@random-ccs-data-4-tiled-bmg-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc:
- shard-dg2-set2: [PASS][25] -> [INCOMPLETE][26] ([Intel XE#1727] / [Intel XE#3124])
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-436/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc.html
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-463/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc.html
* igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-d-dp-4:
- shard-dg2-set2: [PASS][27] -> [INCOMPLETE][28] ([Intel XE#1727] / [Intel XE#3113] / [Intel XE#3124])
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-436/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-d-dp-4.html
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-463/igt@kms_ccs@random-ccs-data-4-tiled-dg2-rc-ccs-cc@pipe-d-dp-4.html
* igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs:
- shard-dg2-set2: NOTRUN -> [SKIP][29] ([Intel XE#2907]) +2 other tests skip
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@kms_ccs@random-ccs-data-4-tiled-lnl-ccs.html
* igt@kms_chamelium_color@ctm-limited-range:
- shard-dg2-set2: NOTRUN -> [SKIP][30] ([Intel XE#306]) +2 other tests skip
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@kms_chamelium_color@ctm-limited-range.html
* igt@kms_chamelium_edid@vga-edid-read:
- shard-lnl: NOTRUN -> [SKIP][31] ([Intel XE#373]) +2 other tests skip
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-5/igt@kms_chamelium_edid@vga-edid-read.html
* igt@kms_chamelium_hpd@vga-hpd:
- shard-dg2-set2: NOTRUN -> [SKIP][32] ([Intel XE#373]) +7 other tests skip
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@kms_chamelium_hpd@vga-hpd.html
* igt@kms_chamelium_hpd@vga-hpd-for-each-pipe:
- shard-adlp: NOTRUN -> [SKIP][33] ([Intel XE#373])
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-2/igt@kms_chamelium_hpd@vga-hpd-for-each-pipe.html
* igt@kms_content_protection@dp-mst-type-1:
- shard-dg2-set2: NOTRUN -> [SKIP][34] ([Intel XE#307])
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@kms_content_protection@dp-mst-type-1.html
* igt@kms_content_protection@srm@pipe-a-dp-2:
- shard-bmg: NOTRUN -> [FAIL][35] ([Intel XE#1178])
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-1/igt@kms_content_protection@srm@pipe-a-dp-2.html
* igt@kms_cursor_crc@cursor-onscreen-512x170:
- shard-dg2-set2: NOTRUN -> [SKIP][36] ([Intel XE#308]) +2 other tests skip
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-463/igt@kms_cursor_crc@cursor-onscreen-512x170.html
* igt@kms_cursor_crc@cursor-sliding-128x42:
- shard-lnl: NOTRUN -> [SKIP][37] ([Intel XE#1424])
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-7/igt@kms_cursor_crc@cursor-sliding-128x42.html
* igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy:
- shard-adlp: NOTRUN -> [SKIP][38] ([Intel XE#309])
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-3/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html
- shard-lnl: NOTRUN -> [SKIP][39] ([Intel XE#309])
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-8/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
- shard-dg2-set2: NOTRUN -> [SKIP][40] ([Intel XE#323]) +3 other tests skip
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html
* igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions-varying-size:
- shard-bmg: [PASS][41] -> [SKIP][42] ([Intel XE#2291]) +2 other tests skip
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-1/igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions-varying-size.html
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-6/igt@kms_cursor_legacy@cursora-vs-flipb-atomic-transitions-varying-size.html
* igt@kms_cursor_legacy@flip-vs-cursor-varying-size:
- shard-bmg: [PASS][43] -> [INCOMPLETE][44] ([Intel XE#3226])
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-4/igt@kms_cursor_legacy@flip-vs-cursor-varying-size.html
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-8/igt@kms_cursor_legacy@flip-vs-cursor-varying-size.html
* igt@kms_dp_aux_dev:
- shard-bmg: [PASS][45] -> [SKIP][46] ([Intel XE#3009])
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-4/igt@kms_dp_aux_dev.html
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-6/igt@kms_dp_aux_dev.html
* igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ab-dp2-hdmi-a3:
- shard-bmg: NOTRUN -> [FAIL][47] ([Intel XE#2882] / [Intel XE#3820])
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-1/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@ab-dp2-hdmi-a3.html
* igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bc-dp2-hdmi-a3:
- shard-bmg: NOTRUN -> [FAIL][48] ([Intel XE#3820]) +1 other test fail
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-1/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bc-dp2-hdmi-a3.html
* igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@cd-hdmi-a6-dp4:
- shard-dg2-set2: NOTRUN -> [FAIL][49] ([Intel XE#301]) +4 other tests fail
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-436/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@cd-hdmi-a6-dp4.html
* igt@kms_flip@2x-flip-vs-panning-interruptible:
- shard-bmg: [PASS][50] -> [SKIP][51] ([Intel XE#2316]) +2 other tests skip
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_flip@2x-flip-vs-panning-interruptible.html
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-6/igt@kms_flip@2x-flip-vs-panning-interruptible.html
* igt@kms_flip@2x-flip-vs-suspend:
- shard-dg2-set2: [PASS][52] -> [ABORT][53] ([Intel XE#2625])
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_flip@2x-flip-vs-suspend.html
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@kms_flip@2x-flip-vs-suspend.html
* igt@kms_flip@2x-flip-vs-suspend@cd-hdmi-a2-dp2:
- shard-dg2-set2: NOTRUN -> [ABORT][54] ([Intel XE#2625])
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@kms_flip@2x-flip-vs-suspend@cd-hdmi-a2-dp2.html
* igt@kms_flip@plain-flip-ts-check:
- shard-bmg: [PASS][55] -> [FAIL][56] ([Intel XE#2882]) +1 other test fail
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-4/igt@kms_flip@plain-flip-ts-check.html
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-8/igt@kms_flip@plain-flip-ts-check.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-upscaling@pipe-a-valid-mode:
- shard-bmg: NOTRUN -> [SKIP][57] ([Intel XE#2293])
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-6/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-upscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling:
- shard-adlp: NOTRUN -> [SKIP][58] ([Intel XE#455]) +1 other test skip
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-2/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-32bpp-yftile-upscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-16bpp-ytile-downscaling@pipe-a-valid-mode:
- shard-adlp: [PASS][59] -> [DMESG-FAIL][60] ([Intel XE#1033] / [Intel XE#324]) +1 other test dmesg-fail
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-adlp-8/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-16bpp-ytile-downscaling@pipe-a-valid-mode.html
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-4/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-16bpp-ytile-downscaling@pipe-a-valid-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling:
- shard-dg2-set2: NOTRUN -> [SKIP][61] ([Intel XE#455]) +15 other tests skip
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-435/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling.html
- shard-lnl: NOTRUN -> [SKIP][62] ([Intel XE#1401] / [Intel XE#1745]) +1 other test skip
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-3/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling@pipe-a-default-mode:
- shard-lnl: NOTRUN -> [SKIP][63] ([Intel XE#1401]) +1 other test skip
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-3/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling@pipe-a-default-mode.html
* igt@kms_frontbuffer_tracking@drrs-suspend:
- shard-dg2-set2: NOTRUN -> [SKIP][64] ([Intel XE#651]) +32 other tests skip
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-434/igt@kms_frontbuffer_tracking@drrs-suspend.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-pgflip-blt:
- shard-lnl: NOTRUN -> [SKIP][65] ([Intel XE#656])
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-1/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-indfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@fbc-tiling-y:
- shard-dg2-set2: NOTRUN -> [SKIP][66] ([Intel XE#658])
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@kms_frontbuffer_tracking@fbc-tiling-y.html
* igt@kms_frontbuffer_tracking@fbcdrrs-modesetfrombusy:
- shard-adlp: NOTRUN -> [SKIP][67] ([Intel XE#651])
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-4/igt@kms_frontbuffer_tracking@fbcdrrs-modesetfrombusy.html
- shard-lnl: NOTRUN -> [SKIP][68] ([Intel XE#651]) +1 other test skip
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-5/igt@kms_frontbuffer_tracking@fbcdrrs-modesetfrombusy.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-render:
- shard-dg2-set2: NOTRUN -> [SKIP][69] ([Intel XE#653]) +27 other tests skip
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@psr-modesetfrombusy:
- shard-adlp: NOTRUN -> [SKIP][70] ([Intel XE#653]) +1 other test skip
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-8/igt@kms_frontbuffer_tracking@psr-modesetfrombusy.html
* igt@kms_joiner@basic-big-joiner:
- shard-adlp: NOTRUN -> [SKIP][71] ([Intel XE#346])
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-3/igt@kms_joiner@basic-big-joiner.html
* igt@kms_joiner@basic-force-ultra-joiner:
- shard-adlp: NOTRUN -> [SKIP][72] ([Intel XE#2925])
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-1/igt@kms_joiner@basic-force-ultra-joiner.html
- shard-lnl: NOTRUN -> [SKIP][73] ([Intel XE#2934])
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-6/igt@kms_joiner@basic-force-ultra-joiner.html
* igt@kms_joiner@invalid-modeset-big-joiner:
- shard-dg2-set2: NOTRUN -> [SKIP][74] ([Intel XE#346])
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-434/igt@kms_joiner@invalid-modeset-big-joiner.html
* igt@kms_lease@lease-uevent:
- shard-bmg: [PASS][75] -> [SKIP][76] ([Intel XE#3007]) +8 other tests skip
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-8/igt@kms_lease@lease-uevent.html
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@kms_lease@lease-uevent.html
* igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6:
- shard-dg2-set2: [PASS][77] -> [FAIL][78] ([Intel XE#361])
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-434/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6.html
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-436/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6.html
* igt@kms_plane_scaling@plane-downscale-factor-0-25-with-rotation@pipe-c:
- shard-dg2-set2: NOTRUN -> [SKIP][79] ([Intel XE#2763]) +5 other tests skip
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-463/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-rotation@pipe-c.html
* igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-a:
- shard-adlp: NOTRUN -> [DMESG-WARN][80] ([Intel XE#2953]) +1 other test dmesg-warn
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-2/igt@kms_plane_scaling@plane-downscale-factor-0-5-with-rotation@pipe-a.html
* igt@kms_plane_scaling@planes-downscale-factor-0-75@pipe-b:
- shard-lnl: NOTRUN -> [SKIP][81] ([Intel XE#2763]) +11 other tests skip
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-1/igt@kms_plane_scaling@planes-downscale-factor-0-75@pipe-b.html
* igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-d:
- shard-dg2-set2: NOTRUN -> [SKIP][82] ([Intel XE#2763] / [Intel XE#455]) +3 other tests skip
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-d.html
* igt@kms_pm_backlight@basic-brightness:
- shard-dg2-set2: NOTRUN -> [SKIP][83] ([Intel XE#870])
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-434/igt@kms_pm_backlight@basic-brightness.html
* igt@kms_pm_dc@deep-pkgc:
- shard-dg2-set2: NOTRUN -> [SKIP][84] ([Intel XE#908])
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@kms_pm_dc@deep-pkgc.html
* igt@kms_psr2_sf@pr-cursor-plane-update-sf:
- shard-dg2-set2: NOTRUN -> [SKIP][85] ([Intel XE#1489]) +8 other tests skip
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@kms_psr2_sf@pr-cursor-plane-update-sf.html
* igt@kms_psr2_su@page_flip-p010:
- shard-dg2-set2: NOTRUN -> [SKIP][86] ([Intel XE#1122]) +1 other test skip
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-435/igt@kms_psr2_su@page_flip-p010.html
* igt@kms_psr@fbc-psr2-primary-render:
- shard-dg2-set2: NOTRUN -> [SKIP][87] ([Intel XE#2850] / [Intel XE#929]) +14 other tests skip
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@kms_psr@fbc-psr2-primary-render.html
* igt@kms_psr@pr-primary-page-flip:
- shard-lnl: NOTRUN -> [SKIP][88] ([Intel XE#1406])
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-8/igt@kms_psr@pr-primary-page-flip.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
- shard-dg2-set2: NOTRUN -> [SKIP][89] ([Intel XE#1127])
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-463/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html
* igt@kms_rotation_crc@sprite-rotation-270:
- shard-adlp: NOTRUN -> [SKIP][90] ([Intel XE#3414])
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-1/igt@kms_rotation_crc@sprite-rotation-270.html
- shard-lnl: NOTRUN -> [SKIP][91] ([Intel XE#3414] / [Intel XE#3904])
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-6/igt@kms_rotation_crc@sprite-rotation-270.html
* igt@kms_tv_load_detect@load-detect:
- shard-dg2-set2: NOTRUN -> [SKIP][92] ([Intel XE#330])
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@kms_tv_load_detect@load-detect.html
* igt@kms_writeback@writeback-fb-id-xrgb2101010:
- shard-dg2-set2: NOTRUN -> [SKIP][93] ([Intel XE#756])
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-434/igt@kms_writeback@writeback-fb-id-xrgb2101010.html
* igt@xe_copy_basic@mem-set-linear-0xfd:
- shard-dg2-set2: NOTRUN -> [SKIP][94] ([Intel XE#1126])
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@xe_copy_basic@mem-set-linear-0xfd.html
* igt@xe_eudebug@basic-vm-access-parameters-userptr:
- shard-dg2-set2: NOTRUN -> [SKIP][95] ([Intel XE#3889])
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@xe_eudebug@basic-vm-access-parameters-userptr.html
* igt@xe_eudebug@basic-vm-bind-ufence-sigint-client:
- shard-adlp: NOTRUN -> [SKIP][96] ([Intel XE#3889])
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-4/igt@xe_eudebug@basic-vm-bind-ufence-sigint-client.html
- shard-lnl: NOTRUN -> [SKIP][97] ([Intel XE#3889])
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-5/igt@xe_eudebug@basic-vm-bind-ufence-sigint-client.html
* igt@xe_eudebug_online@preempt-breakpoint:
- shard-dg2-set2: NOTRUN -> [SKIP][98] ([Intel XE#2905]) +8 other tests skip
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-436/igt@xe_eudebug_online@preempt-breakpoint.html
* igt@xe_eudebug_online@writes-caching-vram-bb-sram-target-vram:
- shard-adlp: NOTRUN -> [SKIP][99] ([Intel XE#2905])
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-8/igt@xe_eudebug_online@writes-caching-vram-bb-sram-target-vram.html
- shard-lnl: NOTRUN -> [SKIP][100] ([Intel XE#2905])
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-7/igt@xe_eudebug_online@writes-caching-vram-bb-sram-target-vram.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-basic-defer-mmap:
- shard-dg2-set2: NOTRUN -> [SKIP][101] ([Intel XE#1392])
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-basic-defer-mmap.html
* igt@xe_exec_basic@multigpu-no-exec-bindexecqueue:
- shard-dg2-set2: [PASS][102] -> [SKIP][103] ([Intel XE#1392]) +2 other tests skip
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@xe_exec_basic@multigpu-no-exec-bindexecqueue.html
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@xe_exec_basic@multigpu-no-exec-bindexecqueue.html
* igt@xe_exec_basic@multigpu-once-null:
- shard-lnl: NOTRUN -> [SKIP][104] ([Intel XE#1392])
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-7/igt@xe_exec_basic@multigpu-once-null.html
- shard-adlp: NOTRUN -> [SKIP][105] ([Intel XE#1392])
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-8/igt@xe_exec_basic@multigpu-once-null.html
* igt@xe_exec_fault_mode@twice-bindexecqueue-userptr-invalidate-race:
- shard-adlp: NOTRUN -> [SKIP][106] ([Intel XE#288]) +1 other test skip
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-2/igt@xe_exec_fault_mode@twice-bindexecqueue-userptr-invalidate-race.html
* igt@xe_exec_fault_mode@twice-userptr-invalidate-race:
- shard-dg2-set2: NOTRUN -> [SKIP][107] ([Intel XE#288]) +22 other tests skip
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-436/igt@xe_exec_fault_mode@twice-userptr-invalidate-race.html
* igt@xe_exec_mix_modes@exec-simple-batch-store-lr:
- shard-dg2-set2: NOTRUN -> [SKIP][108] ([Intel XE#2360])
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@xe_exec_mix_modes@exec-simple-batch-store-lr.html
* igt@xe_exec_threads@threads-shared-vm-userptr-rebind:
- shard-dg2-set2: [PASS][109] -> [INCOMPLETE][110] ([Intel XE#1169])
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-436/igt@xe_exec_threads@threads-shared-vm-userptr-rebind.html
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-463/igt@xe_exec_threads@threads-shared-vm-userptr-rebind.html
* igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit:
- shard-bmg: NOTRUN -> [SKIP][111] ([Intel XE#2229])
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-5/igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit.html
* igt@xe_live_ktest@xe_mocs:
- shard-bmg: [PASS][112] -> [SKIP][113] ([Intel XE#1192]) +2 other tests skip
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-4/igt@xe_live_ktest@xe_mocs.html
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@xe_live_ktest@xe_mocs.html
* igt@xe_mmap@pci-membarrier:
- shard-dg2-set2: NOTRUN -> [SKIP][114] ([Intel XE#4045])
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-436/igt@xe_mmap@pci-membarrier.html
* igt@xe_oa@closed-fd-and-unmapped-access:
- shard-dg2-set2: NOTRUN -> [SKIP][115] ([Intel XE#2541] / [Intel XE#3573]) +8 other tests skip
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@xe_oa@closed-fd-and-unmapped-access.html
* igt@xe_pm@s2idle-vm-bind-unbind-all:
- shard-dg2-set2: [PASS][116] -> [ABORT][117] ([Intel XE#1358] / [Intel XE#1794]) +1 other test abort
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-463/igt@xe_pm@s2idle-vm-bind-unbind-all.html
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@xe_pm@s2idle-vm-bind-unbind-all.html
* igt@xe_pm@s4-d3cold-basic-exec:
- shard-dg2-set2: NOTRUN -> [SKIP][118] ([Intel XE#2284] / [Intel XE#366])
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-435/igt@xe_pm@s4-d3cold-basic-exec.html
* igt@xe_pm@s4-d3hot-basic-exec:
- shard-lnl: [PASS][119] -> [ABORT][120] ([Intel XE#1358] / [Intel XE#1607])
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-lnl-6/igt@xe_pm@s4-d3hot-basic-exec.html
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-2/igt@xe_pm@s4-d3hot-basic-exec.html
* igt@xe_pm@s4-mocs:
- shard-lnl: [PASS][121] -> [ABORT][122] ([Intel XE#1358] / [Intel XE#1794])
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-lnl-1/igt@xe_pm@s4-mocs.html
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-2/igt@xe_pm@s4-mocs.html
* igt@xe_query@multigpu-query-cs-cycles:
- shard-adlp: NOTRUN -> [SKIP][123] ([Intel XE#944])
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-4/igt@xe_query@multigpu-query-cs-cycles.html
- shard-lnl: NOTRUN -> [SKIP][124] ([Intel XE#944])
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-5/igt@xe_query@multigpu-query-cs-cycles.html
* igt@xe_query@multigpu-query-uc-fw-version-guc:
- shard-dg2-set2: NOTRUN -> [SKIP][125] ([Intel XE#944]) +4 other tests skip
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@xe_query@multigpu-query-uc-fw-version-guc.html
* igt@xe_query@query-invalid-extension:
- shard-bmg: [PASS][126] -> [SKIP][127] ([Intel XE#1130]) +19 other tests skip
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-2/igt@xe_query@query-invalid-extension.html
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@xe_query@query-invalid-extension.html
* igt@xe_wedged@wedged-at-any-timeout:
- shard-adlp: [PASS][128] -> [DMESG-WARN][129] ([Intel XE#2953]) +1 other test dmesg-warn
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-adlp-2/igt@xe_wedged@wedged-at-any-timeout.html
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-2/igt@xe_wedged@wedged-at-any-timeout.html
#### Possible fixes ####
* igt@core_setmaster@master-drop-set-user:
- shard-bmg: [FAIL][130] -> [PASS][131]
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@core_setmaster@master-drop-set-user.html
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@core_setmaster@master-drop-set-user.html
- shard-dg2-set2: [FAIL][132] ([Intel XE#3249]) -> [PASS][133]
[132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@core_setmaster@master-drop-set-user.html
[133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@core_setmaster@master-drop-set-user.html
* igt@fbdev@unaligned-read:
- shard-bmg: [SKIP][134] ([Intel XE#2134]) -> [PASS][135]
[134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@fbdev@unaligned-read.html
[135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-5/igt@fbdev@unaligned-read.html
* igt@kms_async_flips@alternate-sync-async-flip:
- shard-adlp: [DMESG-WARN][136] ([Intel XE#1033]) -> [PASS][137] +2 other tests pass
[136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-adlp-6/igt@kms_async_flips@alternate-sync-async-flip.html
[137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-8/igt@kms_async_flips@alternate-sync-async-flip.html
* igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-d-hdmi-a-1:
- shard-adlp: [FAIL][138] ([Intel XE#827]) -> [PASS][139] +1 other test pass
[138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-adlp-6/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-d-hdmi-a-1.html
[139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-6/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-d-hdmi-a-1.html
* igt@kms_async_flips@crc-atomic@pipe-c-hdmi-a-1:
- shard-adlp: [FAIL][140] ([Intel XE#3884]) -> [PASS][141]
[140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-adlp-4/igt@kms_async_flips@crc-atomic@pipe-c-hdmi-a-1.html
[141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-4/igt@kms_async_flips@crc-atomic@pipe-c-hdmi-a-1.html
* igt@kms_async_flips@crc-atomic@pipe-d-hdmi-a-1:
- shard-adlp: [DMESG-FAIL][142] -> [PASS][143]
[142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-adlp-4/igt@kms_async_flips@crc-atomic@pipe-d-hdmi-a-1.html
[143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-4/igt@kms_async_flips@crc-atomic@pipe-d-hdmi-a-1.html
* igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
- shard-bmg: [SKIP][144] ([Intel XE#2136] / [Intel XE#2231]) -> [PASS][145] +4 other tests pass
[144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
[145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-4/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
- shard-dg2-set2: [SKIP][146] ([Intel XE#2136]) -> [PASS][147] +4 other tests pass
[146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
[147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-435/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
* igt@kms_big_fb@x-tiled-8bpp-rotate-180:
- shard-dg2-set2: [SKIP][148] ([Intel XE#2136] / [Intel XE#2351]) -> [PASS][149]
[148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_big_fb@x-tiled-8bpp-rotate-180.html
[149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-436/igt@kms_big_fb@x-tiled-8bpp-rotate-180.html
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip:
- shard-adlp: [DMESG-FAIL][150] ([Intel XE#1033]) -> [PASS][151] +10 other tests pass
[150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-adlp-6/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
[151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-4/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs@pipe-d-dp-4:
- shard-dg2-set2: [INCOMPLETE][152] ([Intel XE#3862]) -> [PASS][153] +1 other test pass
[152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-434/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs@pipe-d-dp-4.html
[153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-434/igt@kms_ccs@crc-primary-suspend-4-tiled-dg2-mc-ccs@pipe-d-dp-4.html
* igt@kms_color@degamma:
- shard-dg2-set2: [SKIP][154] ([Intel XE#2423] / [i915#2575]) -> [PASS][155] +10 other tests pass
[154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_color@degamma.html
[155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@kms_color@degamma.html
* igt@kms_cursor_crc@cursor-rapid-movement-64x64:
- shard-bmg: [SKIP][156] ([Intel XE#3007]) -> [PASS][157] +12 other tests pass
[156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_cursor_crc@cursor-rapid-movement-64x64.html
[157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-4/igt@kms_cursor_crc@cursor-rapid-movement-64x64.html
* igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-1:
- shard-adlp: [DMESG-WARN][158] ([Intel XE#2953]) -> [PASS][159] +1 other test pass
[158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-adlp-1/igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-1.html
[159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-4/igt@kms_cursor_crc@cursor-suspend@pipe-a-hdmi-a-1.html
* igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy:
- shard-bmg: [SKIP][160] ([Intel XE#2291]) -> [PASS][161] +1 other test pass
[160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-6/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy.html
[161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-1/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy.html
* igt@kms_display_modes@extended-mode-basic:
- shard-bmg: [SKIP][162] ([Intel XE#2425]) -> [PASS][163]
[162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-6/igt@kms_display_modes@extended-mode-basic.html
[163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-5/igt@kms_display_modes@extended-mode-basic.html
* igt@kms_fbcon_fbt@psr-suspend:
- shard-lnl: [FAIL][164] -> [PASS][165]
[164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-lnl-1/igt@kms_fbcon_fbt@psr-suspend.html
[165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-1/igt@kms_fbcon_fbt@psr-suspend.html
* igt@kms_flip@2x-flip-vs-expired-vblank@ab-dp2-hdmi-a3:
- shard-bmg: [FAIL][166] ([Intel XE#2882]) -> [PASS][167]
[166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-2/igt@kms_flip@2x-flip-vs-expired-vblank@ab-dp2-hdmi-a3.html
[167]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-4/igt@kms_flip@2x-flip-vs-expired-vblank@ab-dp2-hdmi-a3.html
* igt@kms_flip@2x-flip-vs-expired-vblank@ad-hdmi-a6-dp4:
- shard-dg2-set2: [FAIL][168] ([Intel XE#301]) -> [PASS][169] +3 other tests pass
[168]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_flip@2x-flip-vs-expired-vblank@ad-hdmi-a6-dp4.html
[169]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-435/igt@kms_flip@2x-flip-vs-expired-vblank@ad-hdmi-a6-dp4.html
* igt@kms_flip@2x-wf_vblank-ts-check:
- shard-bmg: [SKIP][170] ([Intel XE#2316]) -> [PASS][171] +2 other tests pass
[170]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-6/igt@kms_flip@2x-wf_vblank-ts-check.html
[171]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-7/igt@kms_flip@2x-wf_vblank-ts-check.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible:
- shard-bmg: [FAIL][172] ([Intel XE#2882] / [Intel XE#3820]) -> [PASS][173]
[172]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-6/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
[173]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-7/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@a-hdmi-a3:
- shard-bmg: [FAIL][174] ([Intel XE#3820]) -> [PASS][175]
[174]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-6/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-hdmi-a3.html
[175]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-7/igt@kms_flip@flip-vs-expired-vblank-interruptible@a-hdmi-a3.html
* igt@kms_flip@flip-vs-wf_vblank-interruptible:
- shard-dg2-set2: [FAIL][176] ([Intel XE#886]) -> [PASS][177]
[176]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-432/igt@kms_flip@flip-vs-wf_vblank-interruptible.html
[177]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@kms_flip@flip-vs-wf_vblank-interruptible.html
* igt@kms_flip@wf_vblank-ts-check-interruptible:
- shard-dg2-set2: [FAIL][178] ([Intel XE#2882]) -> [PASS][179]
[178]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-432/igt@kms_flip@wf_vblank-ts-check-interruptible.html
[179]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-436/igt@kms_flip@wf_vblank-ts-check-interruptible.html
* igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-32bpp-xtile-downscaling@pipe-a-valid-mode:
- shard-adlp: [DMESG-FAIL][180] ([Intel XE#1033] / [Intel XE#324]) -> [PASS][181] +1 other test pass
[180]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-adlp-3/igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-32bpp-xtile-downscaling@pipe-a-valid-mode.html
[181]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-2/igt@kms_flip_scaled_crc@flip-64bpp-xtile-to-32bpp-xtile-downscaling@pipe-a-valid-mode.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-msflip-blt:
- shard-adlp: [FAIL][182] ([Intel XE#1861]) -> [PASS][183]
[182]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-adlp-3/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-msflip-blt.html
[183]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-modesetfrombusy:
- shard-lnl: [INCOMPLETE][184] ([Intel XE#2050]) -> [PASS][185]
[184]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-lnl-4/igt@kms_frontbuffer_tracking@fbcpsr-modesetfrombusy.html
[185]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-8/igt@kms_frontbuffer_tracking@fbcpsr-modesetfrombusy.html
* igt@kms_plane_lowres@tiling-y@pipe-d-hdmi-a-1:
- shard-adlp: [FAIL][186] ([Intel XE#1874]) -> [PASS][187]
[186]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-adlp-3/igt@kms_plane_lowres@tiling-y@pipe-d-hdmi-a-1.html
[187]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-2/igt@kms_plane_lowres@tiling-y@pipe-d-hdmi-a-1.html
* igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4:
- shard-dg2-set2: [FAIL][188] ([Intel XE#361]) -> [PASS][189]
[188]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-434/igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4.html
[189]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-436/igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4.html
* igt@kms_plane_scaling@plane-downscale-factor-0-75-with-pixel-format@pipe-b:
- shard-bmg: [DMESG-WARN][190] ([Intel XE#877]) -> [PASS][191] +1 other test pass
[190]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-6/igt@kms_plane_scaling@plane-downscale-factor-0-75-with-pixel-format@pipe-b.html
[191]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-4/igt@kms_plane_scaling@plane-downscale-factor-0-75-with-pixel-format@pipe-b.html
* igt@kms_pm_dc@dc5-dpms:
- shard-lnl: [FAIL][192] ([Intel XE#718]) -> [PASS][193]
[192]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-lnl-7/igt@kms_pm_dc@dc5-dpms.html
[193]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-lnl-8/igt@kms_pm_dc@dc5-dpms.html
* igt@xe_evict@evict-beng-large-cm:
- shard-dg2-set2: [SKIP][194] ([Intel XE#1130]) -> [PASS][195] +21 other tests pass
[194]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@xe_evict@evict-beng-large-cm.html
[195]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@xe_evict@evict-beng-large-cm.html
* igt@xe_exec_basic@multigpu-once-basic-defer-mmap:
- shard-dg2-set2: [SKIP][196] ([Intel XE#1392]) -> [PASS][197] +1 other test pass
[196]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-432/igt@xe_exec_basic@multigpu-once-basic-defer-mmap.html
[197]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-436/igt@xe_exec_basic@multigpu-once-basic-defer-mmap.html
* igt@xe_exec_threads@threads-bal-shared-vm-rebind:
- shard-bmg: [SKIP][198] ([Intel XE#1130]) -> [PASS][199] +29 other tests pass
[198]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@xe_exec_threads@threads-bal-shared-vm-rebind.html
[199]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-8/igt@xe_exec_threads@threads-bal-shared-vm-rebind.html
* igt@xe_live_ktest@xe_bo:
- shard-bmg: [SKIP][200] ([Intel XE#1192]) -> [PASS][201]
[200]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-2/igt@xe_live_ktest@xe_bo.html
[201]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-5/igt@xe_live_ktest@xe_bo.html
* igt@xe_module_load@load:
- shard-dg2-set2: ([PASS][202], [SKIP][203], [PASS][204], [PASS][205], [PASS][206], [PASS][207], [PASS][208], [PASS][209], [PASS][210], [PASS][211], [PASS][212], [PASS][213], [PASS][214], [PASS][215], [PASS][216], [PASS][217], [PASS][218], [PASS][219], [PASS][220], [PASS][221], [PASS][222], [PASS][223], [PASS][224], [PASS][225], [PASS][226], [PASS][227]) ([Intel XE#378]) -> ([PASS][228], [PASS][229], [PASS][230], [PASS][231], [PASS][232], [PASS][233], [PASS][234], [PASS][235], [PASS][236], [PASS][237], [PASS][238], [PASS][239], [PASS][240], [PASS][241], [PASS][242], [PASS][243], [PASS][244], [PASS][245], [PASS][246], [PASS][247], [PASS][248], [PASS][249], [PASS][250], [PASS][251], [PASS][252])
[202]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-432/igt@xe_module_load@load.html
[203]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-432/igt@xe_module_load@load.html
[204]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-432/igt@xe_module_load@load.html
[205]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-432/igt@xe_module_load@load.html
[206]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-432/igt@xe_module_load@load.html
[207]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@xe_module_load@load.html
[208]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@xe_module_load@load.html
[209]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@xe_module_load@load.html
[210]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@xe_module_load@load.html
[211]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-434/igt@xe_module_load@load.html
[212]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-434/igt@xe_module_load@load.html
[213]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-434/igt@xe_module_load@load.html
[214]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-464/igt@xe_module_load@load.html
[215]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-464/igt@xe_module_load@load.html
[216]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-464/igt@xe_module_load@load.html
[217]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-433/igt@xe_module_load@load.html
[218]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-463/igt@xe_module_load@load.html
[219]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-433/igt@xe_module_load@load.html
[220]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-433/igt@xe_module_load@load.html
[221]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-436/igt@xe_module_load@load.html
[222]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-436/igt@xe_module_load@load.html
[223]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-436/igt@xe_module_load@load.html
[224]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-436/igt@xe_module_load@load.html
[225]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-463/igt@xe_module_load@load.html
[226]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-463/igt@xe_module_load@load.html
[227]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-463/igt@xe_module_load@load.html
[228]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@xe_module_load@load.html
[229]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@xe_module_load@load.html
[230]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@xe_module_load@load.html
[231]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@xe_module_load@load.html
[232]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@xe_module_load@load.html
[233]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-436/igt@xe_module_load@load.html
[234]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-435/igt@xe_module_load@load.html
[235]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-434/igt@xe_module_load@load.html
[236]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-434/igt@xe_module_load@load.html
[237]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-434/igt@xe_module_load@load.html
[238]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-435/igt@xe_module_load@load.html
[239]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@xe_module_load@load.html
[240]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-435/igt@xe_module_load@load.html
[241]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@xe_module_load@load.html
[242]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@xe_module_load@load.html
[243]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-435/igt@xe_module_load@load.html
[244]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@xe_module_load@load.html
[245]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-463/igt@xe_module_load@load.html
[246]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-436/igt@xe_module_load@load.html
[247]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@xe_module_load@load.html
[248]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@xe_module_load@load.html
[249]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-436/igt@xe_module_load@load.html
[250]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@xe_module_load@load.html
[251]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-463/igt@xe_module_load@load.html
[252]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-463/igt@xe_module_load@load.html
* igt@xe_pm@s2idle-multiple-execs:
- shard-dg2-set2: [ABORT][253] ([Intel XE#1358]) -> [PASS][254]
[253]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-432/igt@xe_pm@s2idle-multiple-execs.html
[254]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@xe_pm@s2idle-multiple-execs.html
#### Warnings ####
* igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels:
- shard-dg2-set2: [SKIP][255] ([Intel XE#2423] / [i915#2575]) -> [SKIP][256] ([Intel XE#455])
[255]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
[256]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
- shard-bmg: [SKIP][257] ([Intel XE#3007]) -> [SKIP][258] ([Intel XE#2370])
[257]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
[258]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-1/igt@kms_atomic_transition@plane-all-modeset-transition-fencing-internal-panels.html
* igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0:
- shard-dg2-set2: [SKIP][259] ([Intel XE#2136]) -> [SKIP][260] ([Intel XE#1124])
[259]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0.html
[260]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0.html
- shard-bmg: [SKIP][261] ([Intel XE#2136] / [Intel XE#2231]) -> [SKIP][262] ([Intel XE#1124]) +1 other test skip
[261]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0.html
[262]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-6/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0.html
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
- shard-adlp: [DMESG-FAIL][263] ([Intel XE#1033]) -> [DMESG-WARN][264] ([Intel XE#1033])
[263]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-adlp-6/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
[264]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-adlp-6/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip:
- shard-dg2-set2: [SKIP][265] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][266] ([Intel XE#1124])
[265]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
[266]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-434/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip:
- shard-bmg: [SKIP][267] ([Intel XE#1124]) -> [SKIP][268] ([Intel XE#2136] / [Intel XE#2231]) +2 other tests skip
[267]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-2/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html
[268]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html
* igt@kms_bw@connected-linear-tiling-3-displays-1920x1080p:
- shard-bmg: [SKIP][269] ([Intel XE#3007]) -> [SKIP][270] ([Intel XE#2314] / [Intel XE#2894])
[269]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_bw@connected-linear-tiling-3-displays-1920x1080p.html
[270]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-6/igt@kms_bw@connected-linear-tiling-3-displays-1920x1080p.html
- shard-dg2-set2: [SKIP][271] ([Intel XE#2423] / [i915#2575]) -> [SKIP][272] ([Intel XE#2191])
[271]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_bw@connected-linear-tiling-3-displays-1920x1080p.html
[272]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@kms_bw@connected-linear-tiling-3-displays-1920x1080p.html
* igt@kms_ccs@bad-pixel-format-4-tiled-mtl-mc-ccs:
- shard-dg2-set2: [SKIP][273] ([Intel XE#2136]) -> [SKIP][274] ([Intel XE#455] / [Intel XE#787]) +1 other test skip
[273]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-mc-ccs.html
[274]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@kms_ccs@bad-pixel-format-4-tiled-mtl-mc-ccs.html
* igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs:
- shard-bmg: [SKIP][275] ([Intel XE#3432]) -> [SKIP][276] ([Intel XE#2136] / [Intel XE#2231])
[275]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-2/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs.html
[276]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs.html
* igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-rc-ccs-cc:
- shard-bmg: [SKIP][277] ([Intel XE#2136] / [Intel XE#2231]) -> [SKIP][278] ([Intel XE#2887]) +4 other tests skip
[277]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-rc-ccs-cc.html
[278]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-6/igt@kms_ccs@missing-ccs-buffer-4-tiled-mtl-rc-ccs-cc.html
* igt@kms_ccs@random-ccs-data-y-tiled-gen12-rc-ccs:
- shard-dg2-set2: [SKIP][279] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][280] ([Intel XE#455] / [Intel XE#787])
[279]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_ccs@random-ccs-data-y-tiled-gen12-rc-ccs.html
[280]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@kms_ccs@random-ccs-data-y-tiled-gen12-rc-ccs.html
* igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k:
- shard-bmg: [SKIP][281] ([Intel XE#2252]) -> [SKIP][282] ([Intel XE#3007])
[281]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-6/igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k.html
[282]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k.html
* igt@kms_chamelium_frames@dp-crc-single:
- shard-bmg: [SKIP][283] ([Intel XE#3007]) -> [SKIP][284] ([Intel XE#2252]) +1 other test skip
[283]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_chamelium_frames@dp-crc-single.html
[284]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-5/igt@kms_chamelium_frames@dp-crc-single.html
* igt@kms_content_protection@srm:
- shard-bmg: [SKIP][285] ([Intel XE#2341]) -> [FAIL][286] ([Intel XE#1178])
[285]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-6/igt@kms_content_protection@srm.html
[286]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-1/igt@kms_content_protection@srm.html
* igt@kms_cursor_crc@cursor-offscreen-128x42:
- shard-bmg: [SKIP][287] ([Intel XE#2320]) -> [SKIP][288] ([Intel XE#3007])
[287]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-8/igt@kms_cursor_crc@cursor-offscreen-128x42.html
[288]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@kms_cursor_crc@cursor-offscreen-128x42.html
* igt@kms_cursor_crc@cursor-offscreen-256x85:
- shard-bmg: [SKIP][289] ([Intel XE#3007]) -> [SKIP][290] ([Intel XE#2320])
[289]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_cursor_crc@cursor-offscreen-256x85.html
[290]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-4/igt@kms_cursor_crc@cursor-offscreen-256x85.html
* igt@kms_cursor_legacy@cursorb-vs-flipa-toggle:
- shard-bmg: [SKIP][291] ([Intel XE#2291]) -> [DMESG-WARN][292] ([Intel XE#877])
[291]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-6/igt@kms_cursor_legacy@cursorb-vs-flipa-toggle.html
[292]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-1/igt@kms_cursor_legacy@cursorb-vs-flipa-toggle.html
* igt@kms_dsc@dsc-basic:
- shard-bmg: [SKIP][293] ([Intel XE#2136] / [Intel XE#2231]) -> [SKIP][294] ([Intel XE#2244])
[293]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_dsc@dsc-basic.html
[294]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-4/igt@kms_dsc@dsc-basic.html
- shard-dg2-set2: [SKIP][295] ([Intel XE#2351]) -> [SKIP][296] ([Intel XE#455])
[295]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_dsc@dsc-basic.html
[296]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-435/igt@kms_dsc@dsc-basic.html
* igt@kms_dsc@dsc-with-bpc:
- shard-bmg: [SKIP][297] ([Intel XE#2244]) -> [SKIP][298] ([Intel XE#2136] / [Intel XE#2231])
[297]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-6/igt@kms_dsc@dsc-with-bpc.html
[298]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@kms_dsc@dsc-with-bpc.html
* igt@kms_flip@2x-flip-vs-expired-vblank-interruptible:
- shard-bmg: [SKIP][299] ([Intel XE#3007]) -> [FAIL][300] ([Intel XE#2882] / [Intel XE#3820])
[299]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html
[300]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-1/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html
- shard-dg2-set2: [SKIP][301] ([Intel XE#2423] / [i915#2575]) -> [FAIL][302] ([Intel XE#301])
[301]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html
[302]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-436/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-upscaling:
- shard-bmg: [SKIP][303] ([Intel XE#2136] / [Intel XE#2231]) -> [SKIP][304] ([Intel XE#2293] / [Intel XE#2380])
[303]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-upscaling.html
[304]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-6/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-upscaling.html
- shard-dg2-set2: [SKIP][305] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][306] ([Intel XE#455])
[305]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-upscaling.html
[306]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-435/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-64bpp-ytile-upscaling.html
* igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-blt:
- shard-bmg: [SKIP][307] ([Intel XE#2136] / [Intel XE#2231]) -> [SKIP][308] ([Intel XE#2311]) +3 other tests skip
[307]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-blt.html
[308]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-1p-offscren-pri-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-blt:
- shard-bmg: [SKIP][309] ([Intel XE#2136] / [Intel XE#2231]) -> [SKIP][310] ([Intel XE#2312])
[309]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-blt.html
[310]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc:
- shard-bmg: [SKIP][311] ([Intel XE#2312]) -> [SKIP][312] ([Intel XE#2311]) +12 other tests skip
[311]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-6/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc.html
[312]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-1/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-fullscreen:
- shard-bmg: [FAIL][313] ([Intel XE#2333]) -> [SKIP][314] ([Intel XE#2136] / [Intel XE#2231])
[313]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-fullscreen.html
[314]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-fullscreen.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-wc:
- shard-bmg: [SKIP][315] ([Intel XE#2312]) -> [FAIL][316] ([Intel XE#2333]) +8 other tests fail
[315]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-wc.html
[316]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-render:
- shard-bmg: [FAIL][317] ([Intel XE#2333]) -> [SKIP][318] ([Intel XE#2312]) +7 other tests skip
[317]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-1/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-render.html
[318]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbc-tiling-linear:
- shard-bmg: [SKIP][319] ([Intel XE#2136] / [Intel XE#2231]) -> [FAIL][320] ([Intel XE#2333]) +2 other tests fail
[319]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_frontbuffer_tracking@fbc-tiling-linear.html
[320]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-6/igt@kms_frontbuffer_tracking@fbc-tiling-linear.html
* igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-render:
- shard-dg2-set2: [SKIP][321] ([Intel XE#2136]) -> [SKIP][322] ([Intel XE#651]) +1 other test skip
[321]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-render.html
[322]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-msflip-blt:
- shard-bmg: [SKIP][323] ([Intel XE#2311]) -> [SKIP][324] ([Intel XE#2136] / [Intel XE#2231]) +1 other test skip
[323]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-2/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-msflip-blt.html
[324]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-indfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-render:
- shard-dg2-set2: [SKIP][325] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][326] ([Intel XE#651]) +2 other tests skip
[325]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-render.html
[326]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc:
- shard-bmg: [SKIP][327] ([Intel XE#2311]) -> [SKIP][328] ([Intel XE#2312]) +12 other tests skip
[327]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-4/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc.html
[328]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-shrfb-msflip-blt:
- shard-dg2-set2: [SKIP][329] ([Intel XE#2136]) -> [SKIP][330] ([Intel XE#653]) +1 other test skip
[329]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-shrfb-msflip-blt.html
[330]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-shrfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-blt:
- shard-bmg: [SKIP][331] ([Intel XE#2313]) -> [SKIP][332] ([Intel XE#2312]) +11 other tests skip
[331]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-2/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-blt.html
[332]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-6/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt:
- shard-bmg: [SKIP][333] ([Intel XE#2136] / [Intel XE#2231]) -> [SKIP][334] ([Intel XE#2313]) +4 other tests skip
[333]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt.html
[334]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-shrfb-msflip-blt:
- shard-dg2-set2: [SKIP][335] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][336] ([Intel XE#653])
[335]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_frontbuffer_tracking@psr-1p-primscrn-shrfb-msflip-blt.html
[336]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-463/igt@kms_frontbuffer_tracking@psr-1p-primscrn-shrfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-render:
- shard-bmg: [SKIP][337] ([Intel XE#2313]) -> [SKIP][338] ([Intel XE#2136] / [Intel XE#2231]) +2 other tests skip
[337]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-render.html
[338]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-onoff:
- shard-bmg: [SKIP][339] ([Intel XE#2312]) -> [SKIP][340] ([Intel XE#2313]) +14 other tests skip
[339]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-6/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-onoff.html
[340]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-1/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-onoff.html
* igt@kms_plane_multiple@tiling-y:
- shard-bmg: [SKIP][341] ([Intel XE#3007]) -> [SKIP][342] ([Intel XE#2493])
[341]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_plane_multiple@tiling-y.html
[342]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@kms_plane_multiple@tiling-y.html
* igt@kms_pm_backlight@fade-with-dpms:
- shard-bmg: [SKIP][343] ([Intel XE#2136] / [Intel XE#2231]) -> [SKIP][344] ([Intel XE#870])
[343]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_pm_backlight@fade-with-dpms.html
[344]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-1/igt@kms_pm_backlight@fade-with-dpms.html
- shard-dg2-set2: [SKIP][345] ([Intel XE#2136]) -> [SKIP][346] ([Intel XE#870])
[345]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_pm_backlight@fade-with-dpms.html
[346]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-436/igt@kms_pm_backlight@fade-with-dpms.html
* igt@kms_pm_dc@dc6-dpms:
- shard-dg2-set2: [SKIP][347] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][348] ([Intel XE#908])
[347]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_pm_dc@dc6-dpms.html
[348]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-434/igt@kms_pm_dc@dc6-dpms.html
- shard-bmg: [SKIP][349] ([Intel XE#2136] / [Intel XE#2231]) -> [FAIL][350] ([Intel XE#1430])
[349]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_pm_dc@dc6-dpms.html
[350]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-1/igt@kms_pm_dc@dc6-dpms.html
* igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-sf:
- shard-bmg: [SKIP][351] ([Intel XE#1489]) -> [SKIP][352] ([Intel XE#2136] / [Intel XE#2231])
[351]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-8/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-sf.html
[352]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@kms_psr2_sf@pr-overlay-plane-move-continuous-exceed-sf.html
* igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area-big-fb:
- shard-bmg: [SKIP][353] ([Intel XE#2136] / [Intel XE#2231]) -> [SKIP][354] ([Intel XE#1489]) +1 other test skip
[353]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area-big-fb.html
[354]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-7/igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area-big-fb.html
- shard-dg2-set2: [SKIP][355] ([Intel XE#2136]) -> [SKIP][356] ([Intel XE#1489]) +1 other test skip
[355]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area-big-fb.html
[356]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@kms_psr2_sf@psr2-primary-plane-update-sf-dmg-area-big-fb.html
* igt@kms_psr@fbc-pr-sprite-plane-onoff:
- shard-bmg: [SKIP][357] ([Intel XE#2136] / [Intel XE#2231]) -> [SKIP][358] ([Intel XE#2234] / [Intel XE#2850]) +2 other tests skip
[357]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_psr@fbc-pr-sprite-plane-onoff.html
[358]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-1/igt@kms_psr@fbc-pr-sprite-plane-onoff.html
- shard-dg2-set2: [SKIP][359] ([Intel XE#2136] / [Intel XE#2351]) -> [SKIP][360] ([Intel XE#2850] / [Intel XE#929]) +1 other test skip
[359]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_psr@fbc-pr-sprite-plane-onoff.html
[360]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@kms_psr@fbc-pr-sprite-plane-onoff.html
* igt@kms_psr@fbc-psr-no-drrs:
- shard-bmg: [SKIP][361] ([Intel XE#2234] / [Intel XE#2850]) -> [SKIP][362] ([Intel XE#2136] / [Intel XE#2231])
[361]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-6/igt@kms_psr@fbc-psr-no-drrs.html
[362]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@kms_psr@fbc-psr-no-drrs.html
* igt@kms_psr@psr2-cursor-plane-onoff:
- shard-dg2-set2: [SKIP][363] ([Intel XE#2136]) -> [SKIP][364] ([Intel XE#2850] / [Intel XE#929])
[363]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_psr@psr2-cursor-plane-onoff.html
[364]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@kms_psr@psr2-cursor-plane-onoff.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-bmg: [SKIP][365] ([Intel XE#3007]) -> [SKIP][366] ([Intel XE#2426])
[365]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[366]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-7/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
- shard-dg2-set2: [SKIP][367] ([Intel XE#2423] / [i915#2575]) -> [SKIP][368] ([Intel XE#1500])
[367]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[368]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-433/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
* igt@sriov_basic@enable-vfs-autoprobe-off:
- shard-bmg: [SKIP][369] ([Intel XE#1091] / [Intel XE#2849]) -> [SKIP][370] ([Intel XE#3007])
[369]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-1/igt@sriov_basic@enable-vfs-autoprobe-off.html
[370]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@sriov_basic@enable-vfs-autoprobe-off.html
* igt@xe_copy_basic@mem-copy-linear-0xfffe:
- shard-dg2-set2: [SKIP][371] ([Intel XE#1130]) -> [SKIP][372] ([Intel XE#1123])
[371]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@xe_copy_basic@mem-copy-linear-0xfffe.html
[372]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-435/igt@xe_copy_basic@mem-copy-linear-0xfffe.html
* igt@xe_eudebug@basic-read-event:
- shard-bmg: [SKIP][373] ([Intel XE#1130]) -> [SKIP][374] ([Intel XE#2905]) +1 other test skip
[373]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@xe_eudebug@basic-read-event.html
[374]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@xe_eudebug@basic-read-event.html
* igt@xe_eudebug_online@debugger-reopen:
- shard-dg2-set2: [SKIP][375] ([Intel XE#1130]) -> [SKIP][376] ([Intel XE#2905])
[375]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@xe_eudebug_online@debugger-reopen.html
[376]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-464/igt@xe_eudebug_online@debugger-reopen.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-null:
- shard-bmg: [SKIP][377] ([Intel XE#1130]) -> [SKIP][378] ([Intel XE#2322]) +1 other test skip
[377]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-null.html
[378]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-2/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-null.html
- shard-dg2-set2: [SKIP][379] ([Intel XE#1130]) -> [SKIP][380] ([Intel XE#1392])
[379]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-null.html
[380]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-432/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-null.html
* igt@xe_exec_fault_mode@twice-userptr-invalidate-imm:
- shard-dg2-set2: [SKIP][381] ([Intel XE#1130]) -> [SKIP][382] ([Intel XE#288]) +2 other tests skip
[381]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@xe_exec_fault_mode@twice-userptr-invalidate-imm.html
[382]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-434/igt@xe_exec_fault_mode@twice-userptr-invalidate-imm.html
* igt@xe_live_ktest@xe_eudebug:
- shard-bmg: [SKIP][383] ([Intel XE#1192]) -> [SKIP][384] ([Intel XE#2833])
[383]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-6/igt@xe_live_ktest@xe_eudebug.html
[384]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-8/igt@xe_live_ktest@xe_eudebug.html
* igt@xe_oa@invalid-create-userspace-config:
- shard-dg2-set2: [SKIP][385] ([Intel XE#1130]) -> [SKIP][386] ([Intel XE#2541] / [Intel XE#3573]) +1 other test skip
[385]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-dg2-435/igt@xe_oa@invalid-create-userspace-config.html
[386]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-dg2-435/igt@xe_oa@invalid-create-userspace-config.html
* igt@xe_pm@d3cold-mmap-vram:
- shard-bmg: [SKIP][387] ([Intel XE#1130]) -> [SKIP][388] ([Intel XE#2284])
[387]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09/shard-bmg-5/igt@xe_pm@d3cold-mmap-vram.html
[388]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/shard-bmg-5/igt@xe_pm@d3cold-mmap-vram.html
[Intel XE#1033]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1033
[Intel XE#1091]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1091
[Intel XE#1122]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1122
[Intel XE#1123]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1123
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1126]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1126
[Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
[Intel XE#1130]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1130
[Intel XE#1169]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1169
[Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
[Intel XE#1192]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1192
[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#1401]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1401
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1424
[Intel XE#1430]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1430
[Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
[Intel XE#1500]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1500
[Intel XE#1607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1607
[Intel XE#1727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1727
[Intel XE#1745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1745
[Intel XE#1794]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1794
[Intel XE#1861]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1861
[Intel XE#1874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1874
[Intel XE#2050]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2050
[Intel XE#2134]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2134
[Intel XE#2136]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2136
[Intel XE#2191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2191
[Intel XE#2229]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2229
[Intel XE#2231]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2231
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2244]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2244
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[Intel XE#2291]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2291
[Intel XE#2293]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2293
[Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
[Intel XE#2312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2312
[Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
[Intel XE#2314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2314
[Intel XE#2316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2316
[Intel XE#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2333]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2333
[Intel XE#2341]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2341
[Intel XE#2351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2351
[Intel XE#2360]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2360
[Intel XE#2370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2370
[Intel XE#2380]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2380
[Intel XE#2423]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2423
[Intel XE#2425]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2425
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2493]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2493
[Intel XE#2541]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2541
[Intel XE#2625]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2625
[Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
[Intel XE#2833]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2833
[Intel XE#2849]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2849
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
[Intel XE#2882]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2882
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#2894]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2894
[Intel XE#2905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2905
[Intel XE#2907]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2907
[Intel XE#2925]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2925
[Intel XE#2934]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2934
[Intel XE#2953]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2953
[Intel XE#3007]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3007
[Intel XE#3009]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3009
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
[Intel XE#307]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/307
[Intel XE#308]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/308
[Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#3113]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3113
[Intel XE#3124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3124
[Intel XE#316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/316
[Intel XE#3226]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3226
[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#3249]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3249
[Intel XE#3279]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3279
[Intel XE#330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/330
[Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
[Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
[Intel XE#346]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/346
[Intel XE#3573]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3573
[Intel XE#361]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/361
[Intel XE#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#3701]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3701
[Intel XE#3718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3718
[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#3820]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3820
[Intel XE#3862]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3862
[Intel XE#3884]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3884
[Intel XE#3889]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3889
[Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
[Intel XE#3908]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3908
[Intel XE#4045]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4045
[Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
[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#658]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/658
[Intel XE#718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/718
[Intel XE#756]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/756
[Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
[Intel XE#827]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/827
[Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
[Intel XE#877]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/877
[Intel XE#886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/886
[Intel XE#908]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/908
[Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
[i915#2575]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/2575
Build changes
-------------
* IGT: IGT_8191 -> IGT_8192
* Linux: xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09 -> xe-pw-143572v1
IGT_8191: b8395f7e32e23c9e330e9d90d85f3f3a1dd08bda @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
IGT_8192: a3b85ce819b99284bef57aafc7d44f50a62e097f @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-2492-72400937e76c02ae6345f0dfa5a598f0b284ab09: 72400937e76c02ae6345f0dfa5a598f0b284ab09
xe-pw-143572v1: 143572v1
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-143572v1/index.html
[-- Attachment #2: Type: text/html, Size: 116593 bytes --]
^ permalink raw reply [flat|nested] 49+ messages in thread
* RE: [PATCH v8 0/7] Add support for EU stall sampling
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
` (14 preceding siblings ...)
2025-01-16 0:37 ` ✗ Xe.CI.Full: " Patchwork
@ 2025-01-16 0:51 ` Degrood, Felix J
2025-01-16 21:50 ` Olson, Matthew
16 siblings, 0 replies; 49+ messages in thread
From: Degrood, Felix J @ 2025-01-16 0:51 UTC (permalink / raw)
To: Chegondi, Harish, intel-xe@lists.freedesktop.org
Cc: Dixit, Ashutosh, Ausmus, James, Cabral, Matias A,
Ranjan, Joshua Santhosh, Kumar, Shubham, Roper, Matthew D,
Olson, Matthew, De Marchi, Lucas
Acked-by: Felix Degrood <felix.j.degrood@intel.com>
-----Original Message-----
From: Chegondi, Harish <harish.chegondi@intel.com>
Sent: Wednesday, January 15, 2025 12:02 PM
To: intel-xe@lists.freedesktop.org
Cc: Dixit, Ashutosh <ashutosh.dixit@intel.com>; Ausmus, James <james.ausmus@intel.com>; Degrood, Felix J <felix.j.degrood@intel.com>; Cabral, Matias A <matias.a.cabral@intel.com>; Ranjan, Joshua Santhosh <joshua.santosh.ranjan@intel.com>; Kumar, Shubham <shubham.kumar@intel.com>; Roper, Matthew D <matthew.d.roper@intel.com>; Olson, Matthew <matthew.olson@intel.com>; De Marchi, Lucas <lucas.demarchi@intel.com>; Chegondi, Harish <harish.chegondi@intel.com>
Subject: [PATCH v8 0/7] Add support for EU stall sampling
The following patch series add 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.
Support for this feature is being added into Mesa:
https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30142
New IGT tests for EU stall sampling are being added:
https://patchwork.freedesktop.org/series/143030/
This patch series has undergone basic testing with the new IGT tests.
Thank You.
v8: a. Used div_u64() instead of / to fix 32-bit build issue.
b. Changed copyright year in new files to 2025.
c. Renamed struct drm_xe_eu_stall_data_pvc to struct xe_eu_stall_data_pvc
d. Renamed struct drm_xe_eu_stall_data_xe2 to struct xe_eu_stall_data_xe2
v7: a. Renamed input property DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT
to DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS to be consistent with
OA. Renamed the corresponding internal variables.
b. Fixed some commit messages based on review feedback.
c. Changed sampling_rates from a pointer to flexible array.
v6: a. Changed the uAPI input to accept sampling rate in GPU cycles
instead of sampling rate multiplier.
b. Fix buffer wrap around over write bug (Matt Olson).
c. Include EU stall sampling rates information and per XeCore buffer size in the query information.
v5: Addressed review feedback from v4 including
a. Removed DRM_XE_EU_STALL_PROP_POLL_PERIOD from the uAPI (Ashutosh)
b. Separated the patches for Xe_HPC and Xe2 (Matt R)
c. Moved read() returning -EIO into a separate patch
d. Removed spinlocks around set_bit() and clear_bit() (Matt R)
e. Renamed several variables, structures and enums (Ashutosh and Matt R)
f. Addressed other review feedback.
v4: Addressed review feedback from v3 including
a. Split the patch into multiple patches (Matt R)
b. Added a new device query to get EU stall info (Ashutosh)
c. Renamed all Dss to xecore (Matt R)
d. Removed buffer size and disable at open input properties. (Matt R)
e. Removed the "_SHIFT" macros (Matt R)
f. Allocate the EU stall buffer only on system memory.
g. Changed the work arounds to OOB (Matt R)
h. Other review feedback.
v3: a. Removed data header and changed read() to return -EIO when data is dropped by the HW.
b. Added a new DRM_XE_OBSERVATION_IOCTL_INFO to query EU stall data record info
c. Added struct drm_xe_eu_stall_data_pvc and struct drm_xe_eu_stall_data_xe2
to xe_drm.h. These declarations would help user space to parse the
EU stall data
d. Addressed other review comments from v2
v2: Rename xe perf layer as xe observation layer (Ashutosh)
Cc: Felix Degrood <felix.j.degrood@intel.com>
Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Harish Chegondi (7):
drm/xe/topology: Add a function to find the index of the last enabled
DSS in a mask
drm/xe/uapi: Introduce API for EU stall sampling
drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC
drm/xe/eustall: Return -EIO error from read() if HW drops data
drm/xe/eustall: Add EU stall sampling support for Xe2
drm/xe/uapi: Add a device query to get EU stall sampling information
drm/xe/eustall: Add workaround 22016596838 which applies to PVC.
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h | 29 +
drivers/gpu/drm/xe/xe_eu_stall.c | 1103 ++++++++++++++++++++
drivers/gpu/drm/xe/xe_eu_stall.h | 61 ++
drivers/gpu/drm/xe/xe_gt.c | 6 +
drivers/gpu/drm/xe/xe_gt_topology.h | 13 +
drivers/gpu/drm/xe/xe_gt_types.h | 3 +
drivers/gpu/drm/xe/xe_observation.c | 14 +
drivers/gpu/drm/xe/xe_query.c | 38 +
drivers/gpu/drm/xe/xe_trace.h | 33 +
drivers/gpu/drm/xe/xe_wa_oob.rules | 1 +
include/uapi/drm/xe_drm.h | 74 ++
12 files changed, 1376 insertions(+)
create mode 100644 drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
create mode 100644 drivers/gpu/drm/xe/xe_eu_stall.c create mode 100644 drivers/gpu/drm/xe/xe_eu_stall.h
--
2.47.1
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 0/7] Add support for EU stall sampling
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
` (15 preceding siblings ...)
2025-01-16 0:51 ` [PATCH v8 0/7] " Degrood, Felix J
@ 2025-01-16 21:50 ` Olson, Matthew
2025-01-18 5:19 ` Harish Chegondi
16 siblings, 1 reply; 49+ messages in thread
From: Olson, Matthew @ 2025-01-16 21:50 UTC (permalink / raw)
To: Harish Chegondi
Cc: intel-xe, ashutosh.dixit, james.ausmus, felix.j.degrood,
matias.a.cabral, joshua.santosh.ranjan, shubham.kumar,
matthew.d.roper, lucas.demarchi
On Wed, Jan 15, 2025 at 12:02:06PM -0800, Harish Chegondi wrote:
> The following patch series add 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.
>
> Support for this feature is being added into Mesa:
> https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30142
>
> New IGT tests for EU stall sampling are being added:
> https://patchwork.freedesktop.org/series/143030/
>
> This patch series has undergone basic testing with the new IGT tests.
Our profiler, iaprof, also consumes EU stalls using this patch series and
generates AI flamegraphs using them. I've been testing mostly with v7 of this
patch series since it came out, and have had no issues with it. The stalls are
reasonable (both the reasons and the GPU address that they point to), and we've
been able to poll them well enough to run our profiler in the background.
I suspect the following was already discussed for one of the earlier versions of
this series, but is it possible to have even lower sampling rates than what are
currently provided? We're already selecting the slowest sampling rate (the last
in the array), but CPU usage is too high for our liking, and we're still getting
tens of millions of samples per minute.
>
> Thank You.
No, thank *you!*
Reviewed-by: Ben Olson <matthew.olson@intel.com>
>
> v8: a. Used div_u64() instead of / to fix 32-bit build issue.
> b. Changed copyright year in new files to 2025.
> c. Renamed struct drm_xe_eu_stall_data_pvc to struct xe_eu_stall_data_pvc
> d. Renamed struct drm_xe_eu_stall_data_xe2 to struct xe_eu_stall_data_xe2
>
> v7: a. Renamed input property DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT
> to DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS to be consistent with
> OA. Renamed the corresponding internal variables.
> b. Fixed some commit messages based on review feedback.
> c. Changed sampling_rates from a pointer to flexible array.
>
> v6: a. Changed the uAPI input to accept sampling rate in GPU cycles
> instead of sampling rate multiplier.
> b. Fix buffer wrap around over write bug (Matt Olson).
> c. Include EU stall sampling rates information and per XeCore buffer size in the query information.
>
> v5: Addressed review feedback from v4 including
> a. Removed DRM_XE_EU_STALL_PROP_POLL_PERIOD from the uAPI (Ashutosh)
> b. Separated the patches for Xe_HPC and Xe2 (Matt R)
> c. Moved read() returning -EIO into a separate patch
> d. Removed spinlocks around set_bit() and clear_bit() (Matt R)
> e. Renamed several variables, structures and enums (Ashutosh and
> Matt R)
> f. Addressed other review feedback.
> v4: Addressed review feedback from v3 including
> a. Split the patch into multiple patches (Matt R)
> b. Added a new device query to get EU stall info (Ashutosh)
> c. Renamed all Dss to xecore (Matt R)
> d. Removed buffer size and disable at open input properties. (Matt R)
> e. Removed the "_SHIFT" macros (Matt R)
> f. Allocate the EU stall buffer only on system memory.
> g. Changed the work arounds to OOB (Matt R)
> h. Other review feedback.
> v3: a. Removed data header and changed read() to return -EIO when data is dropped by the HW.
> b. Added a new DRM_XE_OBSERVATION_IOCTL_INFO to query EU stall data record info
> c. Added struct drm_xe_eu_stall_data_pvc and struct drm_xe_eu_stall_data_xe2
> to xe_drm.h. These declarations would help user space to parse the
> EU stall data
> d. Addressed other review comments from v2
> v2: Rename xe perf layer as xe observation layer (Ashutosh)
>
> Cc: Felix Degrood <felix.j.degrood@intel.com>
> Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
>
> Harish Chegondi (7):
> drm/xe/topology: Add a function to find the index of the last enabled
> DSS in a mask
> drm/xe/uapi: Introduce API for EU stall sampling
> drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC
> drm/xe/eustall: Return -EIO error from read() if HW drops data
> drm/xe/eustall: Add EU stall sampling support for Xe2
> drm/xe/uapi: Add a device query to get EU stall sampling information
> drm/xe/eustall: Add workaround 22016596838 which applies to PVC.
>
> drivers/gpu/drm/xe/Makefile | 1 +
> drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h | 29 +
> drivers/gpu/drm/xe/xe_eu_stall.c | 1103 ++++++++++++++++++++
> drivers/gpu/drm/xe/xe_eu_stall.h | 61 ++
> drivers/gpu/drm/xe/xe_gt.c | 6 +
> drivers/gpu/drm/xe/xe_gt_topology.h | 13 +
> drivers/gpu/drm/xe/xe_gt_types.h | 3 +
> drivers/gpu/drm/xe/xe_observation.c | 14 +
> drivers/gpu/drm/xe/xe_query.c | 38 +
> drivers/gpu/drm/xe/xe_trace.h | 33 +
> drivers/gpu/drm/xe/xe_wa_oob.rules | 1 +
> include/uapi/drm/xe_drm.h | 74 ++
> 12 files changed, 1376 insertions(+)
> create mode 100644 drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
> create mode 100644 drivers/gpu/drm/xe/xe_eu_stall.c
> create mode 100644 drivers/gpu/drm/xe/xe_eu_stall.h
>
> --
> 2.47.1
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 6/7] drm/xe/uapi: Add a device query to get EU stall sampling information
2025-01-15 20:02 ` [PATCH v8 6/7] drm/xe/uapi: Add a device query to get EU stall sampling information Harish Chegondi
@ 2025-01-16 22:34 ` Dixit, Ashutosh
2025-01-22 2:48 ` Harish Chegondi
2025-01-30 17:36 ` Dixit, Ashutosh
1 sibling, 1 reply; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-16 22:34 UTC (permalink / raw)
To: Harish Chegondi
Cc: intel-xe, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi
On Wed, 15 Jan 2025 12:02:12 -0800, Harish Chegondi wrote:
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index d9b20afc57c1..7d518f97ba34 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -700,6 +700,7 @@ struct drm_xe_device_query {
> #define DRM_XE_DEVICE_QUERY_ENGINE_CYCLES 6
> #define DRM_XE_DEVICE_QUERY_UC_FW_VERSION 7
> #define DRM_XE_DEVICE_QUERY_OA_UNITS 8
> +#define DRM_XE_DEVICE_QUERY_EU_STALL 9
> /** @query: The type of data to query */
> __u32 query;
>
> @@ -1754,8 +1755,8 @@ enum drm_xe_eu_stall_property_id {
> DRM_XE_EU_STALL_PROP_GT_ID = 1,
>
> /**
> - * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
> - * in GPU cycles.
> + * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate in
> + * GPU cycles from @sampling_rates in struct @drm_xe_query_eu_stall
> */
> DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
>
> @@ -1767,6 +1768,41 @@ enum drm_xe_eu_stall_property_id {
> DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS,
> };
>
> +/**
> + * struct drm_xe_query_eu_stall - Information about EU stall sampling.
> + *
> + * If a query is made with a struct @drm_xe_device_query where .query
> + * is equal to @DRM_XE_DEVICE_QUERY_EU_STALL, then the reply uses
> + * struct @drm_xe_query_eu_stall in .data.
> + */
> +struct drm_xe_query_eu_stall {
> + /** @extensions: Pointer to the first extension struct, if any */
> + __u64 extensions;
> +
> + /** @capabilities: EU stall capabilities bit-mask */
> + __u64 capabilities;
> +#define DRM_XE_EU_STALL_CAPS_BASE (1 << 0)
> +
> + /** @record_size: size of each EU stall data record */
> + __u64 record_size;
> +
> + /** @per_xecore_buf_size: Per XeCore buffer size */
> + __u64 per_xecore_buf_size;
Someone else should still probably check if the term "xecore" in
"per_xecore_buf_size" is appropriate. I don't know if it is, or if it is
future proof, as I had remarked earlier.
> +
> + /** @num_sampling_rates: Number of sampling rates supported */
> + __u64 num_sampling_rates;
> +
> + /** @reserved: Reserved */
> + __u64 reserved[5];
I think we should move this reserved array before num_sampling_rates. If
later we take up a reserved u64 (replace it by a different struct member)
we'd want num_sampling_rates and sampling_rates[] together.
> +
> + /**
> + * @sampling_rates: Flexible array of sampling rates
> + * sorted in the fastest to slowest order.
> + * Sampling rates are specified in GPU clock cycles.
> + */
> + __u64 sampling_rates[];
> +};
The Mesa PR still seems to have some data structs from an older version,
but after addressing the above comments, the uapi introduced in this series
is LGTM, so for the uapi:
Acked-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 1/7] drm/xe/topology: Add a function to find the index of the last enabled DSS in a mask
2025-01-15 20:02 ` [PATCH v8 1/7] drm/xe/topology: Add a function to find the index of the last enabled DSS in a mask Harish Chegondi
@ 2025-01-17 17:25 ` Dixit, Ashutosh
2025-01-22 5:18 ` Harish Chegondi
0 siblings, 1 reply; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-17 17:25 UTC (permalink / raw)
To: Harish Chegondi
Cc: intel-xe, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi
On Wed, 15 Jan 2025 12:02:07 -0800, Harish Chegondi wrote:
>
> Last enabled DSS in a DSS mask can help estimate the maximum DSSes enabled
> in the DSS mask, as the enabled DSSes can be discontiguous.
>
> Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_gt_topology.h | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_gt_topology.h b/drivers/gpu/drm/xe/xe_gt_topology.h
> index 746b325bbf6e..a72d26ba0653 100644
> --- a/drivers/gpu/drm/xe/xe_gt_topology.h
> +++ b/drivers/gpu/drm/xe/xe_gt_topology.h
> @@ -25,6 +25,19 @@ void xe_gt_topology_init(struct xe_gt *gt);
>
> void xe_gt_topology_dump(struct xe_gt *gt, struct drm_printer *p);
>
> +/**
> + * xe_gt_topology_mask_last_dss() - Returns the index of the last DSS in a mask.
> + * @mask: Input DSS mask
> + *
> + * Return: Index of the last DSS in the input DSS mask,
> + * XE_MAX_DSS_FUSE_BITS if DSS mask is empty.
> + */
> +static inline unsigned int
u32?
> +xe_gt_topology_mask_last_dss(const xe_dss_mask_t mask)
> +{
> + return find_last_bit(mask, XE_MAX_DSS_FUSE_BITS);
> +}
> +
The convention here seems to be to keep function definitions in .c and
declarations in .h?
> unsigned int
> xe_dss_mask_group_ffs(const xe_dss_mask_t mask, int groupsize, int groupnum);
>
> --
> 2.47.1
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 2/7] drm/xe/uapi: Introduce API for EU stall sampling
2025-01-15 20:02 ` [PATCH v8 2/7] drm/xe/uapi: Introduce API for EU stall sampling Harish Chegondi
@ 2025-01-17 19:02 ` Dixit, Ashutosh
2025-01-22 23:44 ` Harish Chegondi
0 siblings, 1 reply; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-17 19:02 UTC (permalink / raw)
To: Harish Chegondi
Cc: intel-xe, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi
On Wed, 15 Jan 2025 12:02:08 -0800, Harish Chegondi wrote:
>
This patch doesn't compile :/
> 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 and later architecture GPUs.
>
> Use an existing IOCTL - DRM_IOCTL_XE_OBSERVATION as the interface into the
> driver from the user space to do initial setup and obtain a file descriptor
> for the EU stall data stream. Input parameter to the IOCTL is a struct
> drm_xe_observation_param in which observation_type should be set to
> DRM_XE_OBSERVATION_TYPE_EU_STALL, observation_op should be
> DRM_XE_OBSERVATION_OP_STREAM_OPEN and param should point to a chain of
> drm_xe_ext_set_property structures in which each structure has a pair of
> property and value. The EU stall sampling input properties are defined in
> drm_xe_eu_stall_property_id enum.
>
> With the file descriptor obtained from DRM_IOCTL_XE_OBSERVATION, user space
> can enable and disable EU stall sampling with the IOCTLs:
> DRM_XE_OBSERVATION_IOCTL_ENABLE and DRM_XE_OBSERVATION_IOCTL_DISABLE.
> User space can also call poll() to check for availability of data in the
> buffer. The data can be read with read(). Finally, the file descriptor
> can be closed with close().
>
> v8: Used div_u64 instead of / to fix 32-bit build issue.
> Changed copyright year in xe_eu_stall.c/h to 2025.
> v7: Renamed input property DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT
> to DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS to be consistent with
> OA. Renamed the corresponding internal variables.
> Fixed some commit messages based on review feedback.
> v6: Change the input sampling rate to GPU cycles instead of
> GPU cycles multiplier.
>
> Cc: Felix Degrood <felix.j.degrood@intel.com>
> Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> ---
> drivers/gpu/drm/xe/Makefile | 1 +
> drivers/gpu/drm/xe/xe_eu_stall.c | 283 ++++++++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_eu_stall.h | 12 ++
> drivers/gpu/drm/xe/xe_observation.c | 14 ++
> include/uapi/drm/xe_drm.h | 38 ++++
> 5 files changed, 348 insertions(+)
> create mode 100644 drivers/gpu/drm/xe/xe_eu_stall.c
> create mode 100644 drivers/gpu/drm/xe/xe_eu_stall.h
>
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> index 7730e0596299..259ccbb0c031 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -33,6 +33,7 @@ xe-y += xe_bb.o \
> xe_device_sysfs.o \
> xe_dma_buf.o \
> xe_drm_client.o \
> + xe_eu_stall.o \
> xe_exec.o \
> xe_execlist.o \
> xe_exec_queue.o \
> diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> new file mode 100644
> index 000000000000..48dcc7cb7791
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> @@ -0,0 +1,283 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2025 Intel Corporation
> + */
> +
> +#include <linux/anon_inodes.h>
> +#include <linux/types.h>
> +#include <linux/poll.h>
> +#include <linux/fs.h>
> +
> +#include <uapi/drm/xe_drm.h>
> +
> +#include "xe_macros.h"
> +#include "xe_device.h"
> +#include "xe_eu_stall.h"
> +#include "xe_gt_printk.h"
> +#include "xe_gt_topology.h"
> +#include "xe_observation.h"
> +
> +/**
> + * struct eu_stall_open_properties - EU stall sampling properties received
> + * from user space at open.
> + * @eu_stall_sampling_rate: EU stall sampling rate multiplier.
> + * HW will sample every (eu_stall_sampling_rate x 251) cycles.
> + * @wait_num_reports: Minimum number of EU stall data reports to unblock poll().
> + * @gt: GT on which EU stall data will be captured.
> + */
> +struct eu_stall_open_properties {
> + u8 eu_stall_sampling_rate;
> + u32 wait_num_reports;
nit but the recommendation is to just use generic types, viz 'int', unless
you have specific needs to use u8/u32 etc.
> + struct xe_gt *gt;
> +};
> +
> +/**
> + * 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)
Remove inline, put on a single line.
Is something like num_cachelines() a better name?
> +{
> + return (data_size >> 6);
> +}
> +
> +static int set_prop_eu_stall_sampling_rate(struct xe_device *xe, u64 value,
> + struct eu_stall_open_properties *props)
> +{
> + value = div_u64(value, 251);
> + 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_wait_num_reports(struct xe_device *xe, u64 value,
> + struct eu_stall_open_properties *props)
> +{
> + u32 max_wait_num_reports;
> +
> + max_wait_num_reports = num_data_rows(SZ_512K * XE_MAX_DSS_FUSE_BITS);
Can't we just add the final function to this patch?
max_wait_num_reports = num_data_rows(per_xecore_buf_size * XE_MAX_DSS_FUSE_BITS);
> + if (value == 0 || value > max_wait_num_reports) {
> + drm_dbg(&xe->drm, "Invalid EU stall event report count %llu\n", value);
> + drm_dbg(&xe->drm, "Minimum event report count is 1, maximum is %u\n",
> + max_wait_num_reports);
> + return -EINVAL;
> + }
> + props->wait_num_reports = 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->info.gt_count) {
> + drm_dbg(&xe->drm, "Invalid GT ID %llu for EU stall sampling\n", value);
> + return -EINVAL;
> + }
> + props->gt = xe_device_get_gt(xe, 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_SAMPLE_RATE] = set_prop_eu_stall_sampling_rate,
> + [DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS] = set_prop_eu_stall_wait_num_reports,
> + [DRM_XE_EU_STALL_PROP_GT_ID] = set_prop_eu_stall_gt_id,
> +};
> +
> +static int xe_eu_stall_user_ext_set_property(struct xe_device *xe, u64 extension,
> + struct eu_stall_open_properties *props)
> +{
> + u64 __user *address = u64_to_user_ptr(extension);
> + struct drm_xe_ext_set_property ext;
> + int err;
> + u32 idx;
> +
> + err = __copy_from_user(&ext, address, sizeof(ext));
> + if (XE_IOCTL_DBG(xe, err))
> + return -EFAULT;
> +
> + if (XE_IOCTL_DBG(xe, ext.property >= ARRAY_SIZE(xe_set_eu_stall_property_funcs)) ||
> + XE_IOCTL_DBG(xe, ext.pad))
> + return -EINVAL;
> +
> + idx = array_index_nospec(ext.property, ARRAY_SIZE(xe_set_eu_stall_property_funcs));
> + return xe_set_eu_stall_property_funcs[idx](xe, ext.value, props);
> +}
> +
> +typedef int (*xe_eu_stall_user_extension_fn)(struct xe_device *xe, u64 extension,
> + struct eu_stall_open_properties *props);
> +static const xe_eu_stall_user_extension_fn xe_eu_stall_user_extension_funcs[] = {
> + [DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY] = xe_eu_stall_user_ext_set_property,
> +};
> +
> +static int xe_eu_stall_user_extensions(struct xe_device *xe, u64 extension,
> + struct eu_stall_open_properties *props)
> +{
> + u64 __user *address = u64_to_user_ptr(extension);
> + struct drm_xe_user_extension ext;
> + int err;
> + u32 idx;
> +
> + err = __copy_from_user(&ext, address, sizeof(ext));
> + if (XE_IOCTL_DBG(xe, err))
> + return -EFAULT;
> +
> + if (XE_IOCTL_DBG(xe, ext.pad) ||
> + XE_IOCTL_DBG(xe, ext.name >= ARRAY_SIZE(xe_eu_stall_user_extension_funcs)))
> + return -EINVAL;
> +
> + idx = array_index_nospec(ext.name, ARRAY_SIZE(xe_eu_stall_user_extension_funcs));
> + err = xe_eu_stall_user_extension_funcs[idx](xe, extension, props);
> + if (XE_IOCTL_DBG(xe, err))
> + return err;
> +
> + if (ext.next_extension)
> + return xe_eu_stall_user_extensions(xe, ext.next_extension, props);
> +
> + return 0;
> +}
> +
> +/**
> + * xe_eu_stall_stream_read - handles userspace read() of a EU stall data stream fd.
> + *
> + * @file: An xe EU stall data stream file
> + * @buf: destination buffer given by userspace
> + * @count: the number of bytes userspace wants to read
> + * @ppos: (inout) file seek position (unused)
> + *
> + * Userspace must enable the EU stall stream with DRM_XE_OBSERVATION_IOCTL_ENABLE
> + * before calling read().
> + *
> + * Returns: The number of bytes copied or a negative error code on failure.
> + */
> +static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> + size_t count, loff_t *ppos)
> +{
> + ssize_t ret = 0;
> +
> + return ret;
> +}
> +
> +/**
> + * xe_eu_stall_stream_poll - handles userspace poll() of a EU stall data stream fd.
> + *
> + * @file: An xe EU stall data stream file
> + * @wait: Poll table
> + *
> + * Returns: Bit mask of returned events.
> + */
> +static __poll_t
> +xe_eu_stall_stream_poll(struct file *file, poll_table *wait)
> +{
> + __poll_t ret = 0;
> +
> + return ret;
> +}
> +
> +/**
> + * xe_eu_stall_stream_ioctl - support ioctl() of a xe EU stall data stream fd.
> + *
> + * @file: An xe EU stall data stream file
> + * @cmd: the ioctl request
> + * @arg: the ioctl data
> + *
> + * Returns: zero on success or a negative error code.
> + * -EINVAL for an unknown ioctl request.
> + */
What is the purpose of providing documenatation for static functions, such
as the functions above? There is no useful information in such
documentation at all.
Let's save some lines of code and vertical real estate and provide
documenation only for functions which are exposed in a .h. Unless there is
a "real" reason for providing documentation for something.
> +static long xe_eu_stall_stream_ioctl(struct file *file,
> + unsigned int cmd,
> + unsigned long arg)
> +{
> + switch (cmd) {
> + case DRM_XE_OBSERVATION_IOCTL_ENABLE:
> + return 0;
> + case DRM_XE_OBSERVATION_IOCTL_DISABLE:
> + return 0;
> + }
> +
> + return -EINVAL;
> +}
> +
> +/**
> + * xe_eu_stall_stream_close - handles userspace close() of a EU stall data
> + * stream file.
> + * @inode: anonymous inode associated with file
> + * @file: An xe EU stall data stream file
> + *
> + * Cleans up any resources associated with an open EU stall data stream file.
> + */
> +static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
> +{
> + return 0;
> +}
> +
Not sure why you've introduced these empty functions in this patch, they
should just be introduced in later patches where they have valid bodies.
The idea is that the initial patches should just add lines of code, not
remove lines of code. If you see the initial OA patches, there is not even
a single line of deleted code:
git log --stat 67977882a2f1..392bf22238ff
Don't worry about adding a few lines of code to the later patches.
Anyway I don't want you to spend too much time changing patches again, so
I'm ok leaving things as is too. Just let me know if it's going to be a
problem and what you prefer. I am just letting you know what the preferred
practice is.
> +static const struct file_operations fops_eu_stall = {
> + .owner = THIS_MODULE,
> + .llseek = noop_llseek,
> + .release = xe_eu_stall_stream_close,
> + .poll = xe_eu_stall_stream_poll,
> + .read = xe_eu_stall_stream_read,
> + .unlocked_ioctl = xe_eu_stall_stream_ioctl,
> + .compat_ioctl = xe_eu_stall_stream_ioctl,
> +};
> +
> +static inline bool has_eu_stall_sampling_support(struct xe_device *xe)
> +{
> + return false;
> +}
> +
> +/**
> + * xe_eu_stall_stream_open - Open a xe EU stall data stream fd
> + *
> + * @dev: DRM device pointer
> + * @data: pointer to first struct @drm_xe_ext_set_property in
> + * the chain of input properties from the user space.
> + * @file: DRM file pointer
> + *
> + * This function opens a EU stall data stream with input properties from
> + * the user space.
> + *
> + * Returns: EU stall data stream fd on success or a negative error code.
> + */
> +int xe_eu_stall_stream_open(struct drm_device *dev,
> + u64 data,
> + struct drm_file *file)
> +{
> + struct xe_device *xe = to_xe_device(dev);
> + struct eu_stall_open_properties props;
> + int ret, stream_fd;
> +
> + memset(&props, 0, sizeof(struct eu_stall_open_properties));
struct eu_stall_open_properties props = {};
> +
> + ret = xe_eu_stall_user_extensions(xe, data, &props);
> + if (ret)
> + return ret;
> +
> + if (!props.gt) {
> + drm_dbg(&xe->drm, "GT ID not provided for EU stall sampling\n");
> + return -EINVAL;
> + }
> +
> + if (xe_observation_paranoid && !perfmon_capable()) {
> + xe_gt_dbg(props.gt, "Insufficient privileges for EU stall monitoring\n");
> + return -EACCES;
> + }
This check should be the first check right at the top of the function.
> +
> + if (!has_eu_stall_sampling_support(xe)) {
> + xe_gt_dbg(props.gt, "EU stall monitoring is not supported on this platform\n");
> + return -EPERM;
> + }
> + stream_fd = anon_inode_getfd("[xe_eu_stall]", &fops_eu_stall,
> + NULL, 0);
Move to previous line, lines can be upto 100 char in length..
> + if (stream_fd < 0)
> + xe_gt_dbg(props.gt, "EU stall inode get fd failed : %d\n", stream_fd);
> +
> + return stream_fd;
> +}
> diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
> new file mode 100644
> index 000000000000..3447958a7a22
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_eu_stall.h
> @@ -0,0 +1,12 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2025 Intel Corporation
> + */
> +
> +#ifndef __XE_EU_STALL_H__
> +#define __XE_EU_STALL_H__
> +
> +int xe_eu_stall_stream_open(struct drm_device *dev,
> + u64 data,
> + struct drm_file *file);
> +#endif
> diff --git a/drivers/gpu/drm/xe/xe_observation.c b/drivers/gpu/drm/xe/xe_observation.c
> index 8ec1b84cbb9e..cca661de60ac 100644
> --- a/drivers/gpu/drm/xe/xe_observation.c
> +++ b/drivers/gpu/drm/xe/xe_observation.c
> @@ -9,6 +9,7 @@
> #include <uapi/drm/xe_drm.h>
>
> #include "xe_oa.h"
> +#include "xe_eu_stall.h"
> #include "xe_observation.h"
>
> u32 xe_observation_paranoid = true;
> @@ -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_eu_stall_stream_open(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/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index f62689ca861a..d9b20afc57c1 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -1397,6 +1397,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,
> };
>
> /**
> @@ -1729,6 +1731,42 @@ struct drm_xe_oa_stream_info {
> __u64 reserved[3];
> };
>
> +/**
> + * enum drm_xe_eu_stall_property_id - EU stall sampling input property ids.
> + *
> + * These properties are passed to the driver at open 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.
> + *
> + * With the file descriptor obtained from open, user space must enable
> + * the EU stall stream fd with @DRM_XE_OBSERVATION_IOCTL_ENABLE before
> + * calling read(). EIO errno from read() indicates HW dropped data
> + * due to full buffer.
> + */
> +enum drm_xe_eu_stall_property_id {
> +#define DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY 0
> + /**
> + * @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 = 1,
> +
> + /**
> + * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
> + * in GPU cycles.
> + */
> + DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
> +
> + /**
> + * @DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS: Minimum number of
> + * EU stall data reports to be present in the kernel buffer
> + * before unblocking poll or read that is blocked.
> + */
> + DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS,
> +};
> +
> #if defined(__cplusplus)
> }
> #endif
> --
> 2.47.1
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 3/7] drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC
2025-01-15 20:02 ` [PATCH v8 3/7] drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC Harish Chegondi
@ 2025-01-18 2:34 ` Dixit, Ashutosh
2025-01-23 18:51 ` Dixit, Ashutosh
` (2 subsequent siblings)
3 siblings, 0 replies; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-18 2:34 UTC (permalink / raw)
To: Harish Chegondi
Cc: intel-xe, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi
On Wed, 15 Jan 2025 12:02:09 -0800, Harish Chegondi wrote:
>
Hi Harish,
I've just started reviewing this large patch. Just sending out initial
comments for now in case you want to start looking at the coments and work
on it meanwhile. I will pick up reviewing it again next week.
> Implement EU stall sampling APIs introduced in the previous patch for
> Xe_HPC (PVC). Add register definitions and the code that accesses these
> registers to the APIs.
>
> Add initialization and clean up functions and their implementations,
> EU stall enable and disable functions, poll() and read() implementations.
>
> A timer thread periodically polls the EU stall data buffer write pointer
> registers to look for any new data and caches the write pointer. The read
> function compares the cached read and write pointers and copies any new
> data to the user space.
>
> v8: Updated copyright year in xe_eu_stall_regs.h to 2025.
> Renamed struct drm_xe_eu_stall_data_pvc to struct xe_eu_stall_data_pvc
> since it is a local structure.
> v6: Fix buffer wrap around over write bug (Matt Olson)
Once again, overall advice for the patch: think carefully if a static
function needs documentation. And if it needs documentation, does it need
each parameter described, even if that conveys 0 information. My
recommendation is to only include documentation for functions called by
other files (function exported via the .h). At least let's not follow a
rule where every function has a header.
This is towards kernel recommendation of minimizing documentation and
having self-documenting code.
>
> Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> ---
> drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h | 29 +
> drivers/gpu/drm/xe/xe_eu_stall.c | 759 ++++++++++++++++++++-
> drivers/gpu/drm/xe/xe_eu_stall.h | 43 ++
> drivers/gpu/drm/xe/xe_gt.c | 6 +
> drivers/gpu/drm/xe/xe_gt_types.h | 3 +
> drivers/gpu/drm/xe/xe_trace.h | 33 +
> 6 files changed, 847 insertions(+), 26 deletions(-)
This patch is also a little bit too big. I think at least it can be split
into two: the read and the initialization parts can be separated
out. Anyway for now I will plod on with this review.
> create mode 100644 drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
>
> diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> index 48dcc7cb7791..c388d733b857 100644
> --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> @@ -8,15 +8,27 @@
> #include <linux/poll.h>
> #include <linux/fs.h>
>
> +#include <drm/drm_drv.h>
> #include <uapi/drm/xe_drm.h>
>
> +#include "xe_bo.h"
> +#include "xe_pm.h"
> +#include "xe_trace.h"
> #include "xe_macros.h"
> #include "xe_device.h"
> +#include "xe_gt_mcr.h"
> #include "xe_eu_stall.h"
> #include "xe_gt_printk.h"
> +#include "xe_force_wake.h"
> #include "xe_gt_topology.h"
> #include "xe_observation.h"
#includes should be in alphabetical order. See other files.
>
> +#include "regs/xe_gt_regs.h"
> +#include "regs/xe_eu_stall_regs.h"
> +
> +#define POLL_FREQUENCY_HZ 100
> +#define POLL_PERIOD_NS (NSEC_PER_SEC / POLL_FREQUENCY_HZ)
> +
> /**
> * struct eu_stall_open_properties - EU stall sampling properties received
> * from user space at open.
> @@ -31,6 +43,50 @@ struct eu_stall_open_properties {
> struct xe_gt *gt;
> };
>
> +/**
> + * struct xe_eu_stall_data_pvc - EU stall data format for PVC
> + *
> + * Bits Field
> + * 0 to 28 IP (addr)
> + * 29 to 36 active count
> + * 37 to 44 other count
> + * 45 to 52 control count
> + * 53 to 60 pipestall count
> + * 61 to 68 send count
> + * 69 to 76 dist_acc count
> + * 77 to 84 sbid count
> + * 85 to 92 sync count
> + * 93 to 100 inst_fetch count
> + */
> +struct xe_eu_stall_data_pvc {
> + __u64 ip_addr:29;
> + __u64 active_count:8;
> + __u64 other_count:8;
> + __u64 control_count:8;
> + __u64 pipestall_count:8;
> + __u64 send_count:8;
> + __u64 dist_acc_count:8;
> + __u64 sbid_count:8;
> + __u64 sync_count:8;
> + __u64 inst_fetch_count:8;
> + __u64 unused_bits:27;
> + __u64 unused[6];
> +} __packed;
What is the purpose of including these data structs in the code? Afaict
they are not used anywhere, except for sizeof()? You might as well as just
store the sizeof in a table?
> +
> +static u64 per_xecore_buf_size = SZ_512K;
> +
> +static unsigned long
> +xe_eu_stall_data_record_size(struct xe_device *xe)
> +{
> + enum xe_platform platform = xe->info.platform;
Don't use unnecessary variables, just use xe->info.platform.
> + unsigned long record_size = 0;
Don't initialize I think, add an else with xe_gt_WARN_ON, if that works.
> +
> + if (platform == XE_PVC)
Use GRAPHICS_VERx100 or GRAPHICS_VER, so that later you can just say 'if
(GRAPHICS_VER(xe) >= 20)' to avoid changing code for each platform.
PVC is GRAPHICS_VERx100(xe) 1260, though just for PVC you can use
xe->info.platform.
> @@ -265,19 +982,9 @@ int xe_eu_stall_stream_open(struct drm_device *dev,
> return -EINVAL;
> }
>
> - if (xe_observation_paranoid && !perfmon_capable()) {
> - xe_gt_dbg(props.gt, "Insufficient privileges for EU stall monitoring\n");
> - return -EACCES;
> - }
> + mutex_lock(&props.gt->eu_stall->lock);
> + ret = xe_eu_stall_stream_open_locked(dev, &props, file);
> + mutex_unlock(&props.gt->eu_stall->lock);
>
> - if (!has_eu_stall_sampling_support(xe)) {
> - xe_gt_dbg(props.gt, "EU stall monitoring is not supported on this platform\n");
> - return -EPERM;
> - }
> - stream_fd = anon_inode_getfd("[xe_eu_stall]", &fops_eu_stall,
> - NULL, 0);
> - if (stream_fd < 0)
> - xe_gt_dbg(props.gt, "EU stall inode get fd failed : %d\n", stream_fd);
> -
> - return stream_fd;
As I mentioned in the other patch, we need to see why is so much code
moving around? Generally we should not have to delete lines of code in
these patches.
Ashutosh
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 0/7] Add support for EU stall sampling
2025-01-16 21:50 ` Olson, Matthew
@ 2025-01-18 5:19 ` Harish Chegondi
0 siblings, 0 replies; 49+ messages in thread
From: Harish Chegondi @ 2025-01-18 5:19 UTC (permalink / raw)
To: Olson, Matthew
Cc: intel-xe, ashutosh.dixit, james.ausmus, felix.j.degrood,
matias.a.cabral, joshua.santosh.ranjan, shubham.kumar,
matthew.d.roper, lucas.demarchi
On Thu, Jan 16, 2025 at 03:50:38PM -0600, Olson, Matthew wrote:
> On Wed, Jan 15, 2025 at 12:02:06PM -0800, Harish Chegondi wrote:
> > The following patch series add 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.
> >
> > Support for this feature is being added into Mesa:
> > https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30142
> >
> > New IGT tests for EU stall sampling are being added:
> > https://patchwork.freedesktop.org/series/143030/
> >
> > This patch series has undergone basic testing with the new IGT tests.
>
> Our profiler, iaprof, also consumes EU stalls using this patch series and
> generates AI flamegraphs using them. I've been testing mostly with v7 of this
> patch series since it came out, and have had no issues with it. The stalls are
> reasonable (both the reasons and the GPU address that they point to), and we've
> been able to poll them well enough to run our profiler in the background.
>
> I suspect the following was already discussed for one of the earlier versions of
> this series, but is it possible to have even lower sampling rates than what are
> currently provided? We're already selecting the slowest sampling rate (the last
That's the slowest sampling rate supported by the hardware.
> in the array), but CPU usage is too high for our liking, and we're still getting
During EU stall sampling, a timer thread in the driver keeps polling for
new EU stall data approximately once every 10 milliseconds. I am wondering if this
could be contributing to the CPU usage too.
> tens of millions of samples per minute.
>
> >
> > Thank You.
>
> No, thank *you!*
>
> Reviewed-by: Ben Olson <matthew.olson@intel.com>
>
> >
> > v8: a. Used div_u64() instead of / to fix 32-bit build issue.
> > b. Changed copyright year in new files to 2025.
> > c. Renamed struct drm_xe_eu_stall_data_pvc to struct xe_eu_stall_data_pvc
> > d. Renamed struct drm_xe_eu_stall_data_xe2 to struct xe_eu_stall_data_xe2
> >
> > v7: a. Renamed input property DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT
> > to DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS to be consistent with
> > OA. Renamed the corresponding internal variables.
> > b. Fixed some commit messages based on review feedback.
> > c. Changed sampling_rates from a pointer to flexible array.
> >
> > v6: a. Changed the uAPI input to accept sampling rate in GPU cycles
> > instead of sampling rate multiplier.
> > b. Fix buffer wrap around over write bug (Matt Olson).
> > c. Include EU stall sampling rates information and per XeCore buffer size in the query information.
> >
> > v5: Addressed review feedback from v4 including
> > a. Removed DRM_XE_EU_STALL_PROP_POLL_PERIOD from the uAPI (Ashutosh)
> > b. Separated the patches for Xe_HPC and Xe2 (Matt R)
> > c. Moved read() returning -EIO into a separate patch
> > d. Removed spinlocks around set_bit() and clear_bit() (Matt R)
> > e. Renamed several variables, structures and enums (Ashutosh and
> > Matt R)
> > f. Addressed other review feedback.
> > v4: Addressed review feedback from v3 including
> > a. Split the patch into multiple patches (Matt R)
> > b. Added a new device query to get EU stall info (Ashutosh)
> > c. Renamed all Dss to xecore (Matt R)
> > d. Removed buffer size and disable at open input properties. (Matt R)
> > e. Removed the "_SHIFT" macros (Matt R)
> > f. Allocate the EU stall buffer only on system memory.
> > g. Changed the work arounds to OOB (Matt R)
> > h. Other review feedback.
> > v3: a. Removed data header and changed read() to return -EIO when data is dropped by the HW.
> > b. Added a new DRM_XE_OBSERVATION_IOCTL_INFO to query EU stall data record info
> > c. Added struct drm_xe_eu_stall_data_pvc and struct drm_xe_eu_stall_data_xe2
> > to xe_drm.h. These declarations would help user space to parse the
> > EU stall data
> > d. Addressed other review comments from v2
> > v2: Rename xe perf layer as xe observation layer (Ashutosh)
> >
> > Cc: Felix Degrood <felix.j.degrood@intel.com>
> > Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> > Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
> >
> > Harish Chegondi (7):
> > drm/xe/topology: Add a function to find the index of the last enabled
> > DSS in a mask
> > drm/xe/uapi: Introduce API for EU stall sampling
> > drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC
> > drm/xe/eustall: Return -EIO error from read() if HW drops data
> > drm/xe/eustall: Add EU stall sampling support for Xe2
> > drm/xe/uapi: Add a device query to get EU stall sampling information
> > drm/xe/eustall: Add workaround 22016596838 which applies to PVC.
> >
> > drivers/gpu/drm/xe/Makefile | 1 +
> > drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h | 29 +
> > drivers/gpu/drm/xe/xe_eu_stall.c | 1103 ++++++++++++++++++++
> > drivers/gpu/drm/xe/xe_eu_stall.h | 61 ++
> > drivers/gpu/drm/xe/xe_gt.c | 6 +
> > drivers/gpu/drm/xe/xe_gt_topology.h | 13 +
> > drivers/gpu/drm/xe/xe_gt_types.h | 3 +
> > drivers/gpu/drm/xe/xe_observation.c | 14 +
> > drivers/gpu/drm/xe/xe_query.c | 38 +
> > drivers/gpu/drm/xe/xe_trace.h | 33 +
> > drivers/gpu/drm/xe/xe_wa_oob.rules | 1 +
> > include/uapi/drm/xe_drm.h | 74 ++
> > 12 files changed, 1376 insertions(+)
> > create mode 100644 drivers/gpu/drm/xe/regs/xe_eu_stall_regs.h
> > create mode 100644 drivers/gpu/drm/xe/xe_eu_stall.c
> > create mode 100644 drivers/gpu/drm/xe/xe_eu_stall.h
> >
> > --
> > 2.47.1
> >
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 6/7] drm/xe/uapi: Add a device query to get EU stall sampling information
2025-01-16 22:34 ` Dixit, Ashutosh
@ 2025-01-22 2:48 ` Harish Chegondi
2025-01-22 3:00 ` Dixit, Ashutosh
0 siblings, 1 reply; 49+ messages in thread
From: Harish Chegondi @ 2025-01-22 2:48 UTC (permalink / raw)
To: Dixit, Ashutosh
Cc: intel-xe, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi
On Thu, Jan 16, 2025 at 02:34:59PM -0800, Dixit, Ashutosh wrote:
> On Wed, 15 Jan 2025 12:02:12 -0800, Harish Chegondi wrote:
> > diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> > index d9b20afc57c1..7d518f97ba34 100644
> > --- a/include/uapi/drm/xe_drm.h
> > +++ b/include/uapi/drm/xe_drm.h
> > @@ -700,6 +700,7 @@ struct drm_xe_device_query {
> > #define DRM_XE_DEVICE_QUERY_ENGINE_CYCLES 6
> > #define DRM_XE_DEVICE_QUERY_UC_FW_VERSION 7
> > #define DRM_XE_DEVICE_QUERY_OA_UNITS 8
> > +#define DRM_XE_DEVICE_QUERY_EU_STALL 9
> > /** @query: The type of data to query */
> > __u32 query;
> >
> > @@ -1754,8 +1755,8 @@ enum drm_xe_eu_stall_property_id {
> > DRM_XE_EU_STALL_PROP_GT_ID = 1,
> >
> > /**
> > - * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
> > - * in GPU cycles.
> > + * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate in
> > + * GPU cycles from @sampling_rates in struct @drm_xe_query_eu_stall
> > */
> > DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
> >
> > @@ -1767,6 +1768,41 @@ enum drm_xe_eu_stall_property_id {
> > DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS,
> > };
> >
> > +/**
> > + * struct drm_xe_query_eu_stall - Information about EU stall sampling.
> > + *
> > + * If a query is made with a struct @drm_xe_device_query where .query
> > + * is equal to @DRM_XE_DEVICE_QUERY_EU_STALL, then the reply uses
> > + * struct @drm_xe_query_eu_stall in .data.
> > + */
> > +struct drm_xe_query_eu_stall {
> > + /** @extensions: Pointer to the first extension struct, if any */
> > + __u64 extensions;
> > +
> > + /** @capabilities: EU stall capabilities bit-mask */
> > + __u64 capabilities;
> > +#define DRM_XE_EU_STALL_CAPS_BASE (1 << 0)
> > +
> > + /** @record_size: size of each EU stall data record */
> > + __u64 record_size;
> > +
> > + /** @per_xecore_buf_size: Per XeCore buffer size */
> > + __u64 per_xecore_buf_size;
>
> Someone else should still probably check if the term "xecore" in
> "per_xecore_buf_size" is appropriate. I don't know if it is, or if it is
> future proof, as I had remarked earlier.
Had a chat with Matt Roper offline regarding this. He said XeCore is a
formal name in the hardware for a GPU core. So I think this is
appropriate.
>
> > +
> > + /** @num_sampling_rates: Number of sampling rates supported */
> > + __u64 num_sampling_rates;
> > +
> > + /** @reserved: Reserved */
> > + __u64 reserved[5];
>
> I think we should move this reserved array before num_sampling_rates. If
> later we take up a reserved u64 (replace it by a different struct member)
> we'd want num_sampling_rates and sampling_rates[] together.
I noticed that in structures with reserved fields, the reserved
fields are at the bottom of the structure. Although flexible array
sampling_rates is at the bottom, no storage is allocated for
sampling_rates. I can move the reserved array, but is it okay for
reserved array to not be at the end of the structure? Even if I move,
the num_sampling_rates and sampling_rates[] will be next to each other,
but no storage will be allocated to sampling_rates.
>
> > +
> > + /**
> > + * @sampling_rates: Flexible array of sampling rates
> > + * sorted in the fastest to slowest order.
> > + * Sampling rates are specified in GPU clock cycles.
> > + */
> > + __u64 sampling_rates[];
> > +};
>
> The Mesa PR still seems to have some data structs from an older version,
> but after addressing the above comments, the uapi introduced in this series
> is LGTM, so for the uapi:
>
> Acked-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 6/7] drm/xe/uapi: Add a device query to get EU stall sampling information
2025-01-22 2:48 ` Harish Chegondi
@ 2025-01-22 3:00 ` Dixit, Ashutosh
0 siblings, 0 replies; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-22 3:00 UTC (permalink / raw)
To: Harish Chegondi
Cc: intel-xe, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi
On Tue, 21 Jan 2025 18:48:55 -0800, Harish Chegondi wrote:
>
Hi Harish,
> On Thu, Jan 16, 2025 at 02:34:59PM -0800, Dixit, Ashutosh wrote:
> > On Wed, 15 Jan 2025 12:02:12 -0800, Harish Chegondi wrote:
> > > diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> > > index d9b20afc57c1..7d518f97ba34 100644
> > > --- a/include/uapi/drm/xe_drm.h
> > > +++ b/include/uapi/drm/xe_drm.h
> > > @@ -700,6 +700,7 @@ struct drm_xe_device_query {
> > > #define DRM_XE_DEVICE_QUERY_ENGINE_CYCLES 6
> > > #define DRM_XE_DEVICE_QUERY_UC_FW_VERSION 7
> > > #define DRM_XE_DEVICE_QUERY_OA_UNITS 8
> > > +#define DRM_XE_DEVICE_QUERY_EU_STALL 9
> > > /** @query: The type of data to query */
> > > __u32 query;
> > >
> > > @@ -1754,8 +1755,8 @@ enum drm_xe_eu_stall_property_id {
> > > DRM_XE_EU_STALL_PROP_GT_ID = 1,
> > >
> > > /**
> > > - * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
> > > - * in GPU cycles.
> > > + * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate in
> > > + * GPU cycles from @sampling_rates in struct @drm_xe_query_eu_stall
> > > */
> > > DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
> > >
> > > @@ -1767,6 +1768,41 @@ enum drm_xe_eu_stall_property_id {
> > > DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS,
> > > };
> > >
> > > +/**
> > > + * struct drm_xe_query_eu_stall - Information about EU stall sampling.
> > > + *
> > > + * If a query is made with a struct @drm_xe_device_query where .query
> > > + * is equal to @DRM_XE_DEVICE_QUERY_EU_STALL, then the reply uses
> > > + * struct @drm_xe_query_eu_stall in .data.
> > > + */
> > > +struct drm_xe_query_eu_stall {
> > > + /** @extensions: Pointer to the first extension struct, if any */
> > > + __u64 extensions;
> > > +
> > > + /** @capabilities: EU stall capabilities bit-mask */
> > > + __u64 capabilities;
> > > +#define DRM_XE_EU_STALL_CAPS_BASE (1 << 0)
> > > +
> > > + /** @record_size: size of each EU stall data record */
> > > + __u64 record_size;
> > > +
> > > + /** @per_xecore_buf_size: Per XeCore buffer size */
> > > + __u64 per_xecore_buf_size;
> >
> > Someone else should still probably check if the term "xecore" in
> > "per_xecore_buf_size" is appropriate. I don't know if it is, or if it is
> > future proof, as I had remarked earlier.
> Had a chat with Matt Roper offline regarding this. He said XeCore is a
> formal name in the hardware for a GPU core. So I think this is
> appropriate.
OK, in that case I am fine with this. Let's put this to rest :)
> >
> > > +
> > > + /** @num_sampling_rates: Number of sampling rates supported */
> > > + __u64 num_sampling_rates;
> > > +
> > > + /** @reserved: Reserved */
> > > + __u64 reserved[5];
> >
> > I think we should move this reserved array before num_sampling_rates. If
> > later we take up a reserved u64 (replace it by a different struct member)
> > we'd want num_sampling_rates and sampling_rates[] together.
> I noticed that in structures with reserved fields, the reserved
> fields are at the bottom of the structure. Although flexible array
> sampling_rates is at the bottom, no storage is allocated for
> sampling_rates. I can move the reserved array, but is it okay for
> reserved array to not be at the end of the structure? Even if I move,
> the num_sampling_rates and sampling_rates[] will be next to each other,
> but no storage will be allocated to sampling_rates.
Yes let's move it before num_sampling_rates. Look at 'struct
drm_xe_oa_unit'.
> >
> > > +
> > > + /**
> > > + * @sampling_rates: Flexible array of sampling rates
> > > + * sorted in the fastest to slowest order.
> > > + * Sampling rates are specified in GPU clock cycles.
> > > + */
> > > + __u64 sampling_rates[];
> > > +};
> >
> > The Mesa PR still seems to have some data structs from an older version,
> > but after addressing the above comments, the uapi introduced in this series
> > is LGTM, so for the uapi:
> >
> > Acked-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 1/7] drm/xe/topology: Add a function to find the index of the last enabled DSS in a mask
2025-01-17 17:25 ` Dixit, Ashutosh
@ 2025-01-22 5:18 ` Harish Chegondi
0 siblings, 0 replies; 49+ messages in thread
From: Harish Chegondi @ 2025-01-22 5:18 UTC (permalink / raw)
To: Dixit, Ashutosh
Cc: intel-xe, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi
On Fri, Jan 17, 2025 at 09:25:59AM -0800, Dixit, Ashutosh wrote:
> On Wed, 15 Jan 2025 12:02:07 -0800, Harish Chegondi wrote:
> >
> > Last enabled DSS in a DSS mask can help estimate the maximum DSSes enabled
> > in the DSS mask, as the enabled DSSes can be discontiguous.
> >
> > Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> > ---
> > drivers/gpu/drm/xe/xe_gt_topology.h | 13 +++++++++++++
> > 1 file changed, 13 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/xe/xe_gt_topology.h b/drivers/gpu/drm/xe/xe_gt_topology.h
> > index 746b325bbf6e..a72d26ba0653 100644
> > --- a/drivers/gpu/drm/xe/xe_gt_topology.h
> > +++ b/drivers/gpu/drm/xe/xe_gt_topology.h
> > @@ -25,6 +25,19 @@ void xe_gt_topology_init(struct xe_gt *gt);
> >
> > void xe_gt_topology_dump(struct xe_gt *gt, struct drm_printer *p);
> >
> > +/**
> > + * xe_gt_topology_mask_last_dss() - Returns the index of the last DSS in a mask.
> > + * @mask: Input DSS mask
> > + *
> > + * Return: Index of the last DSS in the input DSS mask,
> > + * XE_MAX_DSS_FUSE_BITS if DSS mask is empty.
> > + */
> > +static inline unsigned int
>
> u32?
>
> > +xe_gt_topology_mask_last_dss(const xe_dss_mask_t mask)
> > +{
> > + return find_last_bit(mask, XE_MAX_DSS_FUSE_BITS);
> > +}
> > +
>
> The convention here seems to be to keep function definitions in .c and
> declarations in .h?
Yes, usually. But if it is a single liner, it is okay to put it in the
header file as a static inline as per the review feedback in V4:
https://patchwork.freedesktop.org/patch/619491/?series=139931&rev=1
>
> > unsigned int
> > xe_dss_mask_group_ffs(const xe_dss_mask_t mask, int groupsize, int groupnum);
> >
> > --
> > 2.47.1
> >
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 2/7] drm/xe/uapi: Introduce API for EU stall sampling
2025-01-17 19:02 ` Dixit, Ashutosh
@ 2025-01-22 23:44 ` Harish Chegondi
2025-01-23 2:19 ` Dixit, Ashutosh
0 siblings, 1 reply; 49+ messages in thread
From: Harish Chegondi @ 2025-01-22 23:44 UTC (permalink / raw)
To: Dixit, Ashutosh
Cc: intel-xe, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi
On Fri, Jan 17, 2025 at 11:02:56AM -0800, Dixit, Ashutosh wrote:
> On Wed, 15 Jan 2025 12:02:08 -0800, Harish Chegondi wrote:
> >
>
Hi Ashutosh,
> This patch doesn't compile :/
I am able to compile this patch without any errors. Which config file
are you using? Earlier there was a 32-bit build error due to 64-bit
division. I fixed it in this patch with a div_u64().
>
> > 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 and later architecture GPUs.
> >
> > Use an existing IOCTL - DRM_IOCTL_XE_OBSERVATION as the interface into the
> > driver from the user space to do initial setup and obtain a file descriptor
> > for the EU stall data stream. Input parameter to the IOCTL is a struct
> > drm_xe_observation_param in which observation_type should be set to
> > DRM_XE_OBSERVATION_TYPE_EU_STALL, observation_op should be
> > DRM_XE_OBSERVATION_OP_STREAM_OPEN and param should point to a chain of
> > drm_xe_ext_set_property structures in which each structure has a pair of
> > property and value. The EU stall sampling input properties are defined in
> > drm_xe_eu_stall_property_id enum.
> >
> > With the file descriptor obtained from DRM_IOCTL_XE_OBSERVATION, user space
> > can enable and disable EU stall sampling with the IOCTLs:
> > DRM_XE_OBSERVATION_IOCTL_ENABLE and DRM_XE_OBSERVATION_IOCTL_DISABLE.
> > User space can also call poll() to check for availability of data in the
> > buffer. The data can be read with read(). Finally, the file descriptor
> > can be closed with close().
> >
> > v8: Used div_u64 instead of / to fix 32-bit build issue.
> > Changed copyright year in xe_eu_stall.c/h to 2025.
> > v7: Renamed input property DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT
> > to DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS to be consistent with
> > OA. Renamed the corresponding internal variables.
> > Fixed some commit messages based on review feedback.
> > v6: Change the input sampling rate to GPU cycles instead of
> > GPU cycles multiplier.
> >
> > Cc: Felix Degrood <felix.j.degrood@intel.com>
> > Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> > ---
> > drivers/gpu/drm/xe/Makefile | 1 +
> > drivers/gpu/drm/xe/xe_eu_stall.c | 283 ++++++++++++++++++++++++++++
> > drivers/gpu/drm/xe/xe_eu_stall.h | 12 ++
> > drivers/gpu/drm/xe/xe_observation.c | 14 ++
> > include/uapi/drm/xe_drm.h | 38 ++++
> > 5 files changed, 348 insertions(+)
> > create mode 100644 drivers/gpu/drm/xe/xe_eu_stall.c
> > create mode 100644 drivers/gpu/drm/xe/xe_eu_stall.h
> >
> > diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> > index 7730e0596299..259ccbb0c031 100644
> > --- a/drivers/gpu/drm/xe/Makefile
> > +++ b/drivers/gpu/drm/xe/Makefile
> > @@ -33,6 +33,7 @@ xe-y += xe_bb.o \
> > xe_device_sysfs.o \
> > xe_dma_buf.o \
> > xe_drm_client.o \
> > + xe_eu_stall.o \
> > xe_exec.o \
> > xe_execlist.o \
> > xe_exec_queue.o \
> > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> > new file mode 100644
> > index 000000000000..48dcc7cb7791
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> > @@ -0,0 +1,283 @@
> > +// SPDX-License-Identifier: MIT
> > +/*
> > + * Copyright © 2025 Intel Corporation
> > + */
> > +
> > +#include <linux/anon_inodes.h>
> > +#include <linux/types.h>
> > +#include <linux/poll.h>
> > +#include <linux/fs.h>
> > +
> > +#include <uapi/drm/xe_drm.h>
> > +
> > +#include "xe_macros.h"
> > +#include "xe_device.h"
> > +#include "xe_eu_stall.h"
> > +#include "xe_gt_printk.h"
> > +#include "xe_gt_topology.h"
> > +#include "xe_observation.h"
> > +
> > +/**
> > + * struct eu_stall_open_properties - EU stall sampling properties received
> > + * from user space at open.
> > + * @eu_stall_sampling_rate: EU stall sampling rate multiplier.
> > + * HW will sample every (eu_stall_sampling_rate x 251) cycles.
> > + * @wait_num_reports: Minimum number of EU stall data reports to unblock poll().
> > + * @gt: GT on which EU stall data will be captured.
> > + */
> > +struct eu_stall_open_properties {
> > + u8 eu_stall_sampling_rate;
> > + u32 wait_num_reports;
>
> nit but the recommendation is to just use generic types, viz 'int', unless
> you have specific needs to use u8/u32 etc.
>
> > + struct xe_gt *gt;
> > +};
> > +
> > +/**
> > + * 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)
>
> Remove inline, put on a single line.
Why remove inline?
>
> Is something like num_cachelines() a better name?
As of now, each data record is cacheline sized, but it may increase in
the future.
>
> > +{
> > + return (data_size >> 6);
> > +}
> > +
> > +static int set_prop_eu_stall_sampling_rate(struct xe_device *xe, u64 value,
> > + struct eu_stall_open_properties *props)
> > +{
> > + value = div_u64(value, 251);
> > + 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_wait_num_reports(struct xe_device *xe, u64 value,
> > + struct eu_stall_open_properties *props)
> > +{
> > + u32 max_wait_num_reports;
> > +
> > + max_wait_num_reports = num_data_rows(SZ_512K * XE_MAX_DSS_FUSE_BITS);
>
> Can't we just add the final function to this patch?
Yes, I can make this change.
>
> max_wait_num_reports = num_data_rows(per_xecore_buf_size * XE_MAX_DSS_FUSE_BITS);
>
> > + if (value == 0 || value > max_wait_num_reports) {
> > + drm_dbg(&xe->drm, "Invalid EU stall event report count %llu\n", value);
> > + drm_dbg(&xe->drm, "Minimum event report count is 1, maximum is %u\n",
> > + max_wait_num_reports);
> > + return -EINVAL;
> > + }
> > + props->wait_num_reports = 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->info.gt_count) {
> > + drm_dbg(&xe->drm, "Invalid GT ID %llu for EU stall sampling\n", value);
> > + return -EINVAL;
> > + }
> > + props->gt = xe_device_get_gt(xe, 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_SAMPLE_RATE] = set_prop_eu_stall_sampling_rate,
> > + [DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS] = set_prop_eu_stall_wait_num_reports,
> > + [DRM_XE_EU_STALL_PROP_GT_ID] = set_prop_eu_stall_gt_id,
> > +};
> > +
> > +static int xe_eu_stall_user_ext_set_property(struct xe_device *xe, u64 extension,
> > + struct eu_stall_open_properties *props)
> > +{
> > + u64 __user *address = u64_to_user_ptr(extension);
> > + struct drm_xe_ext_set_property ext;
> > + int err;
> > + u32 idx;
> > +
> > + err = __copy_from_user(&ext, address, sizeof(ext));
> > + if (XE_IOCTL_DBG(xe, err))
> > + return -EFAULT;
> > +
> > + if (XE_IOCTL_DBG(xe, ext.property >= ARRAY_SIZE(xe_set_eu_stall_property_funcs)) ||
> > + XE_IOCTL_DBG(xe, ext.pad))
> > + return -EINVAL;
> > +
> > + idx = array_index_nospec(ext.property, ARRAY_SIZE(xe_set_eu_stall_property_funcs));
> > + return xe_set_eu_stall_property_funcs[idx](xe, ext.value, props);
> > +}
> > +
> > +typedef int (*xe_eu_stall_user_extension_fn)(struct xe_device *xe, u64 extension,
> > + struct eu_stall_open_properties *props);
> > +static const xe_eu_stall_user_extension_fn xe_eu_stall_user_extension_funcs[] = {
> > + [DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY] = xe_eu_stall_user_ext_set_property,
> > +};
> > +
> > +static int xe_eu_stall_user_extensions(struct xe_device *xe, u64 extension,
> > + struct eu_stall_open_properties *props)
> > +{
> > + u64 __user *address = u64_to_user_ptr(extension);
> > + struct drm_xe_user_extension ext;
> > + int err;
> > + u32 idx;
> > +
> > + err = __copy_from_user(&ext, address, sizeof(ext));
> > + if (XE_IOCTL_DBG(xe, err))
> > + return -EFAULT;
> > +
> > + if (XE_IOCTL_DBG(xe, ext.pad) ||
> > + XE_IOCTL_DBG(xe, ext.name >= ARRAY_SIZE(xe_eu_stall_user_extension_funcs)))
> > + return -EINVAL;
> > +
> > + idx = array_index_nospec(ext.name, ARRAY_SIZE(xe_eu_stall_user_extension_funcs));
> > + err = xe_eu_stall_user_extension_funcs[idx](xe, extension, props);
> > + if (XE_IOCTL_DBG(xe, err))
> > + return err;
> > +
> > + if (ext.next_extension)
> > + return xe_eu_stall_user_extensions(xe, ext.next_extension, props);
> > +
> > + return 0;
> > +}
> > +
> > +/**
> > + * xe_eu_stall_stream_read - handles userspace read() of a EU stall data stream fd.
> > + *
> > + * @file: An xe EU stall data stream file
> > + * @buf: destination buffer given by userspace
> > + * @count: the number of bytes userspace wants to read
> > + * @ppos: (inout) file seek position (unused)
> > + *
> > + * Userspace must enable the EU stall stream with DRM_XE_OBSERVATION_IOCTL_ENABLE
> > + * before calling read().
> > + *
> > + * Returns: The number of bytes copied or a negative error code on failure.
> > + */
> > +static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > + size_t count, loff_t *ppos)
> > +{
> > + ssize_t ret = 0;
> > +
> > + return ret;
> > +}
> > +
> > +/**
> > + * xe_eu_stall_stream_poll - handles userspace poll() of a EU stall data stream fd.
> > + *
> > + * @file: An xe EU stall data stream file
> > + * @wait: Poll table
> > + *
> > + * Returns: Bit mask of returned events.
> > + */
> > +static __poll_t
> > +xe_eu_stall_stream_poll(struct file *file, poll_table *wait)
> > +{
> > + __poll_t ret = 0;
> > +
> > + return ret;
> > +}
> > +
> > +/**
> > + * xe_eu_stall_stream_ioctl - support ioctl() of a xe EU stall data stream fd.
> > + *
> > + * @file: An xe EU stall data stream file
> > + * @cmd: the ioctl request
> > + * @arg: the ioctl data
> > + *
> > + * Returns: zero on success or a negative error code.
> > + * -EINVAL for an unknown ioctl request.
> > + */
>
> What is the purpose of providing documenatation for static functions, such
> as the functions above? There is no useful information in such
> documentation at all.
>
> Let's save some lines of code and vertical real estate and provide
> documenation only for functions which are exposed in a .h. Unless there is
> a "real" reason for providing documentation for something.
As per the https://docs.kernel.org/doc-guide/kernel-doc.html ,
while the documentation is not required for static functions,
it is recommended for consistency.
>
> > +static long xe_eu_stall_stream_ioctl(struct file *file,
> > + unsigned int cmd,
> > + unsigned long arg)
> > +{
> > + switch (cmd) {
> > + case DRM_XE_OBSERVATION_IOCTL_ENABLE:
> > + return 0;
> > + case DRM_XE_OBSERVATION_IOCTL_DISABLE:
> > + return 0;
> > + }
> > +
> > + return -EINVAL;
> > +}
> > +
> > +/**
> > + * xe_eu_stall_stream_close - handles userspace close() of a EU stall data
> > + * stream file.
> > + * @inode: anonymous inode associated with file
> > + * @file: An xe EU stall data stream file
> > + *
> > + * Cleans up any resources associated with an open EU stall data stream file.
> > + */
> > +static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
> > +{
> > + return 0;
> > +}
> > +
>
> Not sure why you've introduced these empty functions in this patch, they
> should just be introduced in later patches where they have valid bodies.
>
From a review feedback in series V3:
Initial patch that implements the basic interface
and such, but just stubs out the parts that actually go touch
hardware.
Since I didn't have any code in this patch that touches the hardware,
some functions are empty.
> The idea is that the initial patches should just add lines of code, not
> remove lines of code. If you see the initial OA patches, there is not even
> a single line of deleted code:
I have moved some code around into different functions in the next
patch. There isn't much code that is deleted. Will try to improve it in
the next patch series.
>
> git log --stat 67977882a2f1..392bf22238ff
>
> Don't worry about adding a few lines of code to the later patches.
>
> Anyway I don't want you to spend too much time changing patches again, so
> I'm ok leaving things as is too. Just let me know if it's going to be a
> problem and what you prefer. I am just letting you know what the preferred
> practice is.
>
> > +static const struct file_operations fops_eu_stall = {
> > + .owner = THIS_MODULE,
> > + .llseek = noop_llseek,
> > + .release = xe_eu_stall_stream_close,
> > + .poll = xe_eu_stall_stream_poll,
> > + .read = xe_eu_stall_stream_read,
> > + .unlocked_ioctl = xe_eu_stall_stream_ioctl,
> > + .compat_ioctl = xe_eu_stall_stream_ioctl,
> > +};
> > +
> > +static inline bool has_eu_stall_sampling_support(struct xe_device *xe)
> > +{
> > + return false;
> > +}
> > +
> > +/**
> > + * xe_eu_stall_stream_open - Open a xe EU stall data stream fd
> > + *
> > + * @dev: DRM device pointer
> > + * @data: pointer to first struct @drm_xe_ext_set_property in
> > + * the chain of input properties from the user space.
> > + * @file: DRM file pointer
> > + *
> > + * This function opens a EU stall data stream with input properties from
> > + * the user space.
> > + *
> > + * Returns: EU stall data stream fd on success or a negative error code.
> > + */
> > +int xe_eu_stall_stream_open(struct drm_device *dev,
> > + u64 data,
> > + struct drm_file *file)
> > +{
> > + struct xe_device *xe = to_xe_device(dev);
> > + struct eu_stall_open_properties props;
> > + int ret, stream_fd;
> > +
> > + memset(&props, 0, sizeof(struct eu_stall_open_properties));
>
> struct eu_stall_open_properties props = {};
Will change.
>
> > +
> > + ret = xe_eu_stall_user_extensions(xe, data, &props);
> > + if (ret)
> > + return ret;
> > +
> > + if (!props.gt) {
> > + drm_dbg(&xe->drm, "GT ID not provided for EU stall sampling\n");
> > + return -EINVAL;
> > + }
> > +
> > + if (xe_observation_paranoid && !perfmon_capable()) {
> > + xe_gt_dbg(props.gt, "Insufficient privileges for EU stall monitoring\n");
> > + return -EACCES;
> > + }
>
> This check should be the first check right at the top of the function.
Will change.
>
> > +
> > + if (!has_eu_stall_sampling_support(xe)) {
> > + xe_gt_dbg(props.gt, "EU stall monitoring is not supported on this platform\n");
> > + return -EPERM;
> > + }
> > + stream_fd = anon_inode_getfd("[xe_eu_stall]", &fops_eu_stall,
> > + NULL, 0);
>
> Move to previous line, lines can be upto 100 char in length..
Will change.
>
> > + if (stream_fd < 0)
> > + xe_gt_dbg(props.gt, "EU stall inode get fd failed : %d\n", stream_fd);
> > +
> > + return stream_fd;
> > +}
> > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
> > new file mode 100644
> > index 000000000000..3447958a7a22
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_eu_stall.h
> > @@ -0,0 +1,12 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2025 Intel Corporation
> > + */
> > +
> > +#ifndef __XE_EU_STALL_H__
> > +#define __XE_EU_STALL_H__
> > +
> > +int xe_eu_stall_stream_open(struct drm_device *dev,
> > + u64 data,
> > + struct drm_file *file);
> > +#endif
> > diff --git a/drivers/gpu/drm/xe/xe_observation.c b/drivers/gpu/drm/xe/xe_observation.c
> > index 8ec1b84cbb9e..cca661de60ac 100644
> > --- a/drivers/gpu/drm/xe/xe_observation.c
> > +++ b/drivers/gpu/drm/xe/xe_observation.c
> > @@ -9,6 +9,7 @@
> > #include <uapi/drm/xe_drm.h>
> >
> > #include "xe_oa.h"
> > +#include "xe_eu_stall.h"
> > #include "xe_observation.h"
> >
> > u32 xe_observation_paranoid = true;
> > @@ -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_eu_stall_stream_open(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/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> > index f62689ca861a..d9b20afc57c1 100644
> > --- a/include/uapi/drm/xe_drm.h
> > +++ b/include/uapi/drm/xe_drm.h
> > @@ -1397,6 +1397,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,
> > };
> >
> > /**
> > @@ -1729,6 +1731,42 @@ struct drm_xe_oa_stream_info {
> > __u64 reserved[3];
> > };
> >
> > +/**
> > + * enum drm_xe_eu_stall_property_id - EU stall sampling input property ids.
> > + *
> > + * These properties are passed to the driver at open 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.
> > + *
> > + * With the file descriptor obtained from open, user space must enable
> > + * the EU stall stream fd with @DRM_XE_OBSERVATION_IOCTL_ENABLE before
> > + * calling read(). EIO errno from read() indicates HW dropped data
> > + * due to full buffer.
> > + */
> > +enum drm_xe_eu_stall_property_id {
> > +#define DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY 0
> > + /**
> > + * @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 = 1,
> > +
> > + /**
> > + * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
> > + * in GPU cycles.
> > + */
> > + DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
> > +
> > + /**
> > + * @DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS: Minimum number of
> > + * EU stall data reports to be present in the kernel buffer
> > + * before unblocking poll or read that is blocked.
> > + */
> > + DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS,
> > +};
> > +
> > #if defined(__cplusplus)
> > }
> > #endif
> > --
> > 2.47.1
> >
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 2/7] drm/xe/uapi: Introduce API for EU stall sampling
2025-01-22 23:44 ` Harish Chegondi
@ 2025-01-23 2:19 ` Dixit, Ashutosh
0 siblings, 0 replies; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-23 2:19 UTC (permalink / raw)
To: Harish Chegondi
Cc: intel-xe, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi
On Wed, 22 Jan 2025 15:44:31 -0800, Harish Chegondi wrote:
>
Hi Harish,
> On Fri, Jan 17, 2025 at 11:02:56AM -0800, Dixit, Ashutosh wrote:
> > On Wed, 15 Jan 2025 12:02:08 -0800, Harish Chegondi wrote:
> > >
> >
> Hi Ashutosh,
> > This patch doesn't compile :/
> I am able to compile this patch without any errors. Which config file
> are you using? Earlier there was a 32-bit build error due to 64-bit
> division. I fixed it in this patch with a div_u64().
I get this:
HDRTEST xe_force_wake.h
In file included from <command-line>:
./xe_eu_stall.h:10:29: error: unknown type name ‘u64’
10 | u64 data,
| ^~~
make[3]: *** [Makefile:321: xe_eu_stall.hdrtest] Error 1
Not sure if this comes from 'CONFIG_UAPI_HEADER_TEST=y'.
> >
> > > 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 and later architecture GPUs.
> > >
> > > Use an existing IOCTL - DRM_IOCTL_XE_OBSERVATION as the interface into the
> > > driver from the user space to do initial setup and obtain a file descriptor
> > > for the EU stall data stream. Input parameter to the IOCTL is a struct
> > > drm_xe_observation_param in which observation_type should be set to
> > > DRM_XE_OBSERVATION_TYPE_EU_STALL, observation_op should be
> > > DRM_XE_OBSERVATION_OP_STREAM_OPEN and param should point to a chain of
> > > drm_xe_ext_set_property structures in which each structure has a pair of
> > > property and value. The EU stall sampling input properties are defined in
> > > drm_xe_eu_stall_property_id enum.
> > >
> > > With the file descriptor obtained from DRM_IOCTL_XE_OBSERVATION, user space
> > > can enable and disable EU stall sampling with the IOCTLs:
> > > DRM_XE_OBSERVATION_IOCTL_ENABLE and DRM_XE_OBSERVATION_IOCTL_DISABLE.
> > > User space can also call poll() to check for availability of data in the
> > > buffer. The data can be read with read(). Finally, the file descriptor
> > > can be closed with close().
> > >
> > > v8: Used div_u64 instead of / to fix 32-bit build issue.
> > > Changed copyright year in xe_eu_stall.c/h to 2025.
> > > v7: Renamed input property DRM_XE_EU_STALL_PROP_EVENT_REPORT_COUNT
> > > to DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS to be consistent with
> > > OA. Renamed the corresponding internal variables.
> > > Fixed some commit messages based on review feedback.
> > > v6: Change the input sampling rate to GPU cycles instead of
> > > GPU cycles multiplier.
> > >
> > > Cc: Felix Degrood <felix.j.degrood@intel.com>
> > > Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> > > ---
> > > drivers/gpu/drm/xe/Makefile | 1 +
> > > drivers/gpu/drm/xe/xe_eu_stall.c | 283 ++++++++++++++++++++++++++++
> > > drivers/gpu/drm/xe/xe_eu_stall.h | 12 ++
> > > drivers/gpu/drm/xe/xe_observation.c | 14 ++
> > > include/uapi/drm/xe_drm.h | 38 ++++
> > > 5 files changed, 348 insertions(+)
> > > create mode 100644 drivers/gpu/drm/xe/xe_eu_stall.c
> > > create mode 100644 drivers/gpu/drm/xe/xe_eu_stall.h
> > >
> > > diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> > > index 7730e0596299..259ccbb0c031 100644
> > > --- a/drivers/gpu/drm/xe/Makefile
> > > +++ b/drivers/gpu/drm/xe/Makefile
> > > @@ -33,6 +33,7 @@ xe-y += xe_bb.o \
> > > xe_device_sysfs.o \
> > > xe_dma_buf.o \
> > > xe_drm_client.o \
> > > + xe_eu_stall.o \
> > > xe_exec.o \
> > > xe_execlist.o \
> > > xe_exec_queue.o \
> > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > new file mode 100644
> > > index 000000000000..48dcc7cb7791
> > > --- /dev/null
> > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > @@ -0,0 +1,283 @@
> > > +// SPDX-License-Identifier: MIT
> > > +/*
> > > + * Copyright © 2025 Intel Corporation
> > > + */
> > > +
> > > +#include <linux/anon_inodes.h>
> > > +#include <linux/types.h>
> > > +#include <linux/poll.h>
> > > +#include <linux/fs.h>
> > > +
> > > +#include <uapi/drm/xe_drm.h>
> > > +
> > > +#include "xe_macros.h"
> > > +#include "xe_device.h"
> > > +#include "xe_eu_stall.h"
> > > +#include "xe_gt_printk.h"
> > > +#include "xe_gt_topology.h"
> > > +#include "xe_observation.h"
> > > +
> > > +/**
> > > + * struct eu_stall_open_properties - EU stall sampling properties received
> > > + * from user space at open.
> > > + * @eu_stall_sampling_rate: EU stall sampling rate multiplier.
> > > + * HW will sample every (eu_stall_sampling_rate x 251) cycles.
> > > + * @wait_num_reports: Minimum number of EU stall data reports to unblock poll().
> > > + * @gt: GT on which EU stall data will be captured.
> > > + */
> > > +struct eu_stall_open_properties {
> > > + u8 eu_stall_sampling_rate;
> > > + u32 wait_num_reports;
> >
> > nit but the recommendation is to just use generic types, viz 'int', unless
> > you have specific needs to use u8/u32 etc.
> >
> > > + struct xe_gt *gt;
> > > +};
> > > +
> > > +/**
> > > + * 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)
> >
> > Remove inline, put on a single line.
> Why remove inline?
In .c files inline should not be used, the decision whether to inline
functions is left to the compiler, inline is anyway only a hint to the
compiler.
> >
> > Is something like num_cachelines() a better name?
> As of now, each data record is cacheline sized, but it may increase in
> the future.
Ok.
> >
> > > +{
> > > + return (data_size >> 6);
> > > +}
> > > +
> > > +static int set_prop_eu_stall_sampling_rate(struct xe_device *xe, u64 value,
> > > + struct eu_stall_open_properties *props)
> > > +{
> > > + value = div_u64(value, 251);
> > > + 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_wait_num_reports(struct xe_device *xe, u64 value,
> > > + struct eu_stall_open_properties *props)
> > > +{
> > > + u32 max_wait_num_reports;
> > > +
> > > + max_wait_num_reports = num_data_rows(SZ_512K * XE_MAX_DSS_FUSE_BITS);
> >
> > Can't we just add the final function to this patch?
> Yes, I can make this change.
> >
> > max_wait_num_reports = num_data_rows(per_xecore_buf_size * XE_MAX_DSS_FUSE_BITS);
> >
> > > + if (value == 0 || value > max_wait_num_reports) {
> > > + drm_dbg(&xe->drm, "Invalid EU stall event report count %llu\n", value);
> > > + drm_dbg(&xe->drm, "Minimum event report count is 1, maximum is %u\n",
> > > + max_wait_num_reports);
> > > + return -EINVAL;
> > > + }
> > > + props->wait_num_reports = 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->info.gt_count) {
> > > + drm_dbg(&xe->drm, "Invalid GT ID %llu for EU stall sampling\n", value);
> > > + return -EINVAL;
> > > + }
> > > + props->gt = xe_device_get_gt(xe, 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_SAMPLE_RATE] = set_prop_eu_stall_sampling_rate,
> > > + [DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS] = set_prop_eu_stall_wait_num_reports,
> > > + [DRM_XE_EU_STALL_PROP_GT_ID] = set_prop_eu_stall_gt_id,
> > > +};
> > > +
> > > +static int xe_eu_stall_user_ext_set_property(struct xe_device *xe, u64 extension,
> > > + struct eu_stall_open_properties *props)
> > > +{
> > > + u64 __user *address = u64_to_user_ptr(extension);
> > > + struct drm_xe_ext_set_property ext;
> > > + int err;
> > > + u32 idx;
> > > +
> > > + err = __copy_from_user(&ext, address, sizeof(ext));
> > > + if (XE_IOCTL_DBG(xe, err))
> > > + return -EFAULT;
> > > +
> > > + if (XE_IOCTL_DBG(xe, ext.property >= ARRAY_SIZE(xe_set_eu_stall_property_funcs)) ||
> > > + XE_IOCTL_DBG(xe, ext.pad))
> > > + return -EINVAL;
> > > +
> > > + idx = array_index_nospec(ext.property, ARRAY_SIZE(xe_set_eu_stall_property_funcs));
> > > + return xe_set_eu_stall_property_funcs[idx](xe, ext.value, props);
> > > +}
> > > +
> > > +typedef int (*xe_eu_stall_user_extension_fn)(struct xe_device *xe, u64 extension,
> > > + struct eu_stall_open_properties *props);
> > > +static const xe_eu_stall_user_extension_fn xe_eu_stall_user_extension_funcs[] = {
> > > + [DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY] = xe_eu_stall_user_ext_set_property,
> > > +};
> > > +
> > > +static int xe_eu_stall_user_extensions(struct xe_device *xe, u64 extension,
> > > + struct eu_stall_open_properties *props)
> > > +{
> > > + u64 __user *address = u64_to_user_ptr(extension);
> > > + struct drm_xe_user_extension ext;
> > > + int err;
> > > + u32 idx;
> > > +
> > > + err = __copy_from_user(&ext, address, sizeof(ext));
> > > + if (XE_IOCTL_DBG(xe, err))
> > > + return -EFAULT;
> > > +
> > > + if (XE_IOCTL_DBG(xe, ext.pad) ||
> > > + XE_IOCTL_DBG(xe, ext.name >= ARRAY_SIZE(xe_eu_stall_user_extension_funcs)))
> > > + return -EINVAL;
> > > +
> > > + idx = array_index_nospec(ext.name, ARRAY_SIZE(xe_eu_stall_user_extension_funcs));
> > > + err = xe_eu_stall_user_extension_funcs[idx](xe, extension, props);
> > > + if (XE_IOCTL_DBG(xe, err))
> > > + return err;
> > > +
> > > + if (ext.next_extension)
> > > + return xe_eu_stall_user_extensions(xe, ext.next_extension, props);
> > > +
> > > + return 0;
> > > +}
> > > +
> > > +/**
> > > + * xe_eu_stall_stream_read - handles userspace read() of a EU stall data stream fd.
> > > + *
> > > + * @file: An xe EU stall data stream file
> > > + * @buf: destination buffer given by userspace
> > > + * @count: the number of bytes userspace wants to read
> > > + * @ppos: (inout) file seek position (unused)
> > > + *
> > > + * Userspace must enable the EU stall stream with DRM_XE_OBSERVATION_IOCTL_ENABLE
> > > + * before calling read().
> > > + *
> > > + * Returns: The number of bytes copied or a negative error code on failure.
> > > + */
> > > +static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > > + size_t count, loff_t *ppos)
> > > +{
> > > + ssize_t ret = 0;
> > > +
> > > + return ret;
> > > +}
> > > +
> > > +/**
> > > + * xe_eu_stall_stream_poll - handles userspace poll() of a EU stall data stream fd.
> > > + *
> > > + * @file: An xe EU stall data stream file
> > > + * @wait: Poll table
> > > + *
> > > + * Returns: Bit mask of returned events.
> > > + */
> > > +static __poll_t
> > > +xe_eu_stall_stream_poll(struct file *file, poll_table *wait)
> > > +{
> > > + __poll_t ret = 0;
> > > +
> > > + return ret;
> > > +}
> > > +
> > > +/**
> > > + * xe_eu_stall_stream_ioctl - support ioctl() of a xe EU stall data stream fd.
> > > + *
> > > + * @file: An xe EU stall data stream file
> > > + * @cmd: the ioctl request
> > > + * @arg: the ioctl data
> > > + *
> > > + * Returns: zero on success or a negative error code.
> > > + * -EINVAL for an unknown ioctl request.
> > > + */
> >
> > What is the purpose of providing documenatation for static functions, such
> > as the functions above? There is no useful information in such
> > documentation at all.
> >
> > Let's save some lines of code and vertical real estate and provide
> > documenation only for functions which are exposed in a .h. Unless there is
> > a "real" reason for providing documentation for something.
> As per the https://docs.kernel.org/doc-guide/kernel-doc.html ,
> while the documentation is not required for static functions,
> it is recommended for consistency.
https://github.com/torvalds/linux/blob/master/Documentation/process/4.Coding.rst#documentation
"Anybody who reads through a significant amount of existing kernel code will
note that, often, comments are most notable by their absence. ... That
said, there is little desire for verbosely-commented code. The code
should, itself, be readable, with comments explaining the more subtle
aspects".
So apart from what I already said before, useless documentation doesn't
help and is additional burden to maintain. So exercise judgement in adding
documentation.
> >
> > > +static long xe_eu_stall_stream_ioctl(struct file *file,
> > > + unsigned int cmd,
> > > + unsigned long arg)
> > > +{
> > > + switch (cmd) {
> > > + case DRM_XE_OBSERVATION_IOCTL_ENABLE:
> > > + return 0;
> > > + case DRM_XE_OBSERVATION_IOCTL_DISABLE:
> > > + return 0;
> > > + }
> > > +
> > > + return -EINVAL;
> > > +}
> > > +
> > > +/**
> > > + * xe_eu_stall_stream_close - handles userspace close() of a EU stall data
> > > + * stream file.
> > > + * @inode: anonymous inode associated with file
> > > + * @file: An xe EU stall data stream file
> > > + *
> > > + * Cleans up any resources associated with an open EU stall data stream file.
> > > + */
> > > +static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
> > > +{
> > > + return 0;
> > > +}
> > > +
> >
> > Not sure why you've introduced these empty functions in this patch, they
> > should just be introduced in later patches where they have valid bodies.
> >
> From a review feedback in series V3:
>
> Initial patch that implements the basic interface
> and such, but just stubs out the parts that actually go touch
> hardware.
>
> Since I didn't have any code in this patch that touches the hardware,
> some functions are empty.
I really don't see why this should be needed at all. Anyway I have nothing
to add to what I already said previously.
>
> > The idea is that the initial patches should just add lines of code, not
> > remove lines of code. If you see the initial OA patches, there is not even
> > a single line of deleted code:
> I have moved some code around into different functions in the next
> patch. There isn't much code that is deleted. Will try to improve it in
> the next patch series.
> >
> > git log --stat 67977882a2f1..392bf22238ff
> >
> > Don't worry about adding a few lines of code to the later patches.
> >
> > Anyway I don't want you to spend too much time changing patches again, so
> > I'm ok leaving things as is too. Just let me know if it's going to be a
> > problem and what you prefer. I am just letting you know what the preferred
> > practice is.
> >
> > > +static const struct file_operations fops_eu_stall = {
> > > + .owner = THIS_MODULE,
> > > + .llseek = noop_llseek,
> > > + .release = xe_eu_stall_stream_close,
> > > + .poll = xe_eu_stall_stream_poll,
> > > + .read = xe_eu_stall_stream_read,
> > > + .unlocked_ioctl = xe_eu_stall_stream_ioctl,
> > > + .compat_ioctl = xe_eu_stall_stream_ioctl,
> > > +};
> > > +
> > > +static inline bool has_eu_stall_sampling_support(struct xe_device *xe)
> > > +{
> > > + return false;
> > > +}
> > > +
> > > +/**
> > > + * xe_eu_stall_stream_open - Open a xe EU stall data stream fd
> > > + *
> > > + * @dev: DRM device pointer
> > > + * @data: pointer to first struct @drm_xe_ext_set_property in
> > > + * the chain of input properties from the user space.
> > > + * @file: DRM file pointer
> > > + *
> > > + * This function opens a EU stall data stream with input properties from
> > > + * the user space.
> > > + *
> > > + * Returns: EU stall data stream fd on success or a negative error code.
> > > + */
> > > +int xe_eu_stall_stream_open(struct drm_device *dev,
> > > + u64 data,
> > > + struct drm_file *file)
> > > +{
> > > + struct xe_device *xe = to_xe_device(dev);
> > > + struct eu_stall_open_properties props;
> > > + int ret, stream_fd;
> > > +
> > > + memset(&props, 0, sizeof(struct eu_stall_open_properties));
> >
> > struct eu_stall_open_properties props = {};
> Will change.
> >
> > > +
> > > + ret = xe_eu_stall_user_extensions(xe, data, &props);
> > > + if (ret)
> > > + return ret;
> > > +
> > > + if (!props.gt) {
> > > + drm_dbg(&xe->drm, "GT ID not provided for EU stall sampling\n");
> > > + return -EINVAL;
> > > + }
> > > +
> > > + if (xe_observation_paranoid && !perfmon_capable()) {
> > > + xe_gt_dbg(props.gt, "Insufficient privileges for EU stall monitoring\n");
> > > + return -EACCES;
> > > + }
> >
> > This check should be the first check right at the top of the function.
> Will change.
> >
> > > +
> > > + if (!has_eu_stall_sampling_support(xe)) {
> > > + xe_gt_dbg(props.gt, "EU stall monitoring is not supported on this platform\n");
> > > + return -EPERM;
> > > + }
> > > + stream_fd = anon_inode_getfd("[xe_eu_stall]", &fops_eu_stall,
> > > + NULL, 0);
> >
> > Move to previous line, lines can be upto 100 char in length..
> Will change.
> >
> > > + if (stream_fd < 0)
> > > + xe_gt_dbg(props.gt, "EU stall inode get fd failed : %d\n", stream_fd);
> > > +
> > > + return stream_fd;
> > > +}
> > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
> > > new file mode 100644
> > > index 000000000000..3447958a7a22
> > > --- /dev/null
> > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.h
> > > @@ -0,0 +1,12 @@
> > > +/* SPDX-License-Identifier: MIT */
> > > +/*
> > > + * Copyright © 2025 Intel Corporation
> > > + */
> > > +
> > > +#ifndef __XE_EU_STALL_H__
> > > +#define __XE_EU_STALL_H__
> > > +
> > > +int xe_eu_stall_stream_open(struct drm_device *dev,
> > > + u64 data,
> > > + struct drm_file *file);
> > > +#endif
> > > diff --git a/drivers/gpu/drm/xe/xe_observation.c b/drivers/gpu/drm/xe/xe_observation.c
> > > index 8ec1b84cbb9e..cca661de60ac 100644
> > > --- a/drivers/gpu/drm/xe/xe_observation.c
> > > +++ b/drivers/gpu/drm/xe/xe_observation.c
> > > @@ -9,6 +9,7 @@
> > > #include <uapi/drm/xe_drm.h>
> > >
> > > #include "xe_oa.h"
> > > +#include "xe_eu_stall.h"
> > > #include "xe_observation.h"
> > >
> > > u32 xe_observation_paranoid = true;
> > > @@ -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_eu_stall_stream_open(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/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> > > index f62689ca861a..d9b20afc57c1 100644
> > > --- a/include/uapi/drm/xe_drm.h
> > > +++ b/include/uapi/drm/xe_drm.h
> > > @@ -1397,6 +1397,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,
> > > };
> > >
> > > /**
> > > @@ -1729,6 +1731,42 @@ struct drm_xe_oa_stream_info {
> > > __u64 reserved[3];
> > > };
> > >
> > > +/**
> > > + * enum drm_xe_eu_stall_property_id - EU stall sampling input property ids.
> > > + *
> > > + * These properties are passed to the driver at open 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.
> > > + *
> > > + * With the file descriptor obtained from open, user space must enable
> > > + * the EU stall stream fd with @DRM_XE_OBSERVATION_IOCTL_ENABLE before
> > > + * calling read(). EIO errno from read() indicates HW dropped data
> > > + * due to full buffer.
> > > + */
> > > +enum drm_xe_eu_stall_property_id {
> > > +#define DRM_XE_EU_STALL_EXTENSION_SET_PROPERTY 0
> > > + /**
> > > + * @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 = 1,
> > > +
> > > + /**
> > > + * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
> > > + * in GPU cycles.
> > > + */
> > > + DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
> > > +
> > > + /**
> > > + * @DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS: Minimum number of
> > > + * EU stall data reports to be present in the kernel buffer
> > > + * before unblocking poll or read that is blocked.
> > > + */
> > > + DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS,
> > > +};
> > > +
> > > #if defined(__cplusplus)
> > > }
> > > #endif
> > > --
> > > 2.47.1
> > >
Thanks.
--
Ashutosh
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 3/7] drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC
2025-01-15 20:02 ` [PATCH v8 3/7] drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC Harish Chegondi
2025-01-18 2:34 ` Dixit, Ashutosh
@ 2025-01-23 18:51 ` Dixit, Ashutosh
2025-01-25 3:09 ` [PATCH v8 3 " Dixit, Ashutosh
2025-01-29 4:12 ` [PATCH v8 4 " Dixit, Ashutosh
3 siblings, 0 replies; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-23 18:51 UTC (permalink / raw)
To: Harish Chegondi
Cc: intel-xe, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi
On Wed, 15 Jan 2025 12:02:09 -0800, Harish Chegondi wrote:
>
Hi Harish,
Still reviewing but here's the next set of review comments. Since this is a
huge 800 line patch, I'll just keep sending comments in email about section
of the code I am able to review, so that you can continue to work on
addressing the review comments in parallel.
I will also drop most people on the Cc: from these emails in the
future. Let them read the email on the intel-xe mailing list if interested.
> +static u32
> +gen_eustall_base(struct xe_eu_stall_data_stream *stream, bool enable)
> +{
> + u32 val = xe_bo_ggtt_addr(stream->bo);
> + u32 sz;
> +
> + XE_WARN_ON(!IS_ALIGNED(val, 64));
> +
> + switch (stream->per_xecore_buf_size) {
> + case SZ_128K:
> + sz = 0;
> + break;
> + case SZ_256K:
> + sz = 1;
> + break;
> + case SZ_512K:
> + sz = 2;
> + break;
Hmm this switch statement is not needed. This is just:
sz = stream->per_xecore_buf_size / SZ_256K;
> + default:
> + xe_gt_warn(stream->gt, "Missing case per XeCore buffer size == %lu)\n",
> + (long)(stream->per_xecore_buf_size));
> + sz = 2;
If you need this check, can we use BUILD_BUG_ON(per_xecore_buf_size ...)
here? Or skip the check, this is an internal variable, we don't get this
from userspace, correct?
> +/**
> + * xe_eu_stall_stream_open_locked - Open a EU stall data stream FD.
> + * @dev: drm device instance
> + * @props: individually validated u64 property value pairs
> + * @file: drm file
> + *
> + * Returns: zero on success or a negative error code.
> + */
> +static int
> +xe_eu_stall_stream_open_locked(struct drm_device *dev,
> + struct eu_stall_open_properties *props,
> + struct drm_file *file)
> +{
> + struct xe_device *xe = to_xe_device(dev);
> + struct xe_eu_stall_data_stream *stream;
> + struct xe_gt *gt = props->gt;
> + unsigned long f_flags = 0;
> + int ret, stream_fd;
> +
> + if (!has_eu_stall_sampling_support(xe)) {
Wondering if this should be a bit in xe_graphics_desc? Anyway we can live
with this for now.
Also why is this check here in locked()? It should be the first check in
xe_eu_stall_stream_open?
> + xe_gt_dbg(gt, "EU stall monitoring is not supported on this platform\n");
> + return -EPERM;
> + }
> +
> + if (xe_observation_paranoid && !perfmon_capable()) {
This check should also be xe_eu_stall_stream_open.
Please reorder the checks and distribute them correctly between open and
open _locked. locked() should only contain checks where we need to hold the
lock. See xe_oa.c for similar checks there.
I will review the error rewinding etc in the next rev since it will change
with the reordering.
> @@ -252,10 +964,15 @@ int xe_eu_stall_stream_open(struct drm_device *dev,
> {
> struct xe_device *xe = to_xe_device(dev);
> struct eu_stall_open_properties props;
> - int ret, stream_fd;
> + int ret;
>
> memset(&props, 0, sizeof(struct eu_stall_open_properties));
>
> + /* Set default values */
> + props.gt = NULL;
Don't need? Already initialized to 0 above.
> + props.eu_stall_sampling_rate = 4;
Why not call this sampling_rate_mult or something like that? eu_stall_ is
an unnecessary repetition, everything here is eu_stall!
> + props.wait_num_reports = 1;
> +
> ret = xe_eu_stall_user_extensions(xe, data, &props);
> if (ret)
> return ret;
> @@ -265,19 +982,9 @@ int xe_eu_stall_stream_open(struct drm_device *dev,
> return -EINVAL;
> }
>
> - if (xe_observation_paranoid && !perfmon_capable()) {
> - xe_gt_dbg(props.gt, "Insufficient privileges for EU stall monitoring\n");
> - return -EACCES;
> - }
> + mutex_lock(&props.gt->eu_stall->lock);
> + ret = xe_eu_stall_stream_open_locked(dev, &props, file);
> + mutex_unlock(&props.gt->eu_stall->lock);
>
> - if (!has_eu_stall_sampling_support(xe)) {
> - xe_gt_dbg(props.gt, "EU stall monitoring is not supported on this platform\n");
> - return -EPERM;
> - }
> - stream_fd = anon_inode_getfd("[xe_eu_stall]", &fops_eu_stall,
> - NULL, 0);
> - if (stream_fd < 0)
> - xe_gt_dbg(props.gt, "EU stall inode get fd failed : %d\n", stream_fd);
> -
> - return stream_fd;
> + return ret;
> }
> diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
> index 3447958a7a22..f97c8bf8e852 100644
> --- a/drivers/gpu/drm/xe/xe_eu_stall.h
> +++ b/drivers/gpu/drm/xe/xe_eu_stall.h
> @@ -6,6 +6,49 @@
> #ifndef __XE_EU_STALL_H__
> #define __XE_EU_STALL_H__
>
> +#include "xe_gt_types.h"
> +
> +struct per_xecore_buf {
> + u8 *vaddr;
> + u32 write;
> + u32 read;
> + /* lock to protect read and write pointers */
> + struct mutex lock;
Let us call this buf_lock or ptr_lock or something like that.
I don't like generic names like 'lock' because it makes it really hard to
search the code for the locks when they are just named 'lock'.
> +};
> +
> +/**
> + * struct xe_eu_stall_data_stream - state of EU stall data stream FD
> + */
> +struct xe_eu_stall_data_stream {
> + bool pollin;
> + bool enabled;
> + u64 poll_period;
> + u32 wait_num_reports;
> + size_t per_xecore_buf_size;
> + wait_queue_head_t poll_wq;
> +
> + struct xe_gt *gt;
> + struct xe_bo *bo;
> + struct per_xecore_buf *xecore_buf;
> + struct {
> + xe_dss_mask_t mask;
> + } data_drop;
> + struct hrtimer poll_check_timer;
> + struct work_struct buf_check_work;
> + struct workqueue_struct *buf_check_wq;
> +};
> +
> +struct xe_eu_stall_gt {
> + /* Lock to protect stream */
> + struct mutex lock;
Similarly here call this stream_lock or something like that.
Thanks.
--
Ashutosh
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 3 3/7] drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC
2025-01-15 20:02 ` [PATCH v8 3/7] drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC Harish Chegondi
2025-01-18 2:34 ` Dixit, Ashutosh
2025-01-23 18:51 ` Dixit, Ashutosh
@ 2025-01-25 3:09 ` Dixit, Ashutosh
2025-01-29 4:12 ` [PATCH v8 4 " Dixit, Ashutosh
3 siblings, 0 replies; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-25 3:09 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
On Wed, 15 Jan 2025 12:02:09 -0800, Harish Chegondi wrote:
>
Review #3 on the same patch. I've changed the email subject to [PATCH v8 3 3/7].
Overall the priority should be on fixing code, rather then remaking the
patches (moving code around from one patch to another etc.), specially if
remaking the patches is significant effort. We can mostly live with the
patches as they are and review as we are doing now (even though it is not
ideal).
/snip/ : I hate scrolling unnecessarily and making people scroll
unnecsserarily, for future reference :)
> +static void
> +free_eu_stall_data_buf(struct xe_eu_stall_data_stream *stream)
> +{
> + if (stream->bo) {
> + xe_bo_unpin_map_no_vm(stream->bo);
> + stream->bo = NULL;
No need to set to NULL, we will free stream after this.
> +static void
> +xe_eu_stall_stream_enable(struct xe_eu_stall_data_stream *stream)
> +{
> + struct xe_gt *gt = stream->gt;
> + unsigned int fw_ref;
> + u32 reg_value;
> +
> + /* Take runtime pm ref and forcewake to disable RC6 */
> + xe_pm_runtime_get(gt_to_xe(gt));
> + fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_RENDER);
> + if (!xe_force_wake_ref_has_domain(fw_ref, XE_FW_RENDER))
> + xe_gt_err(gt, "Failed to get RENDER forcewake\n");
If this fails, this needs to return error. See xe_oa.c.
Also we need to only get RENDER forcewake or XE_FORCEWAKE_ALL?
> +
> + reg_value = gen_eustall_base(stream, true);
> + xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, reg_value);
> +}
> +
> +static void
> +xe_eu_stall_stream_disable(struct xe_eu_stall_data_stream *stream)
> +{
> + struct xe_gt *gt = stream->gt;
> + u16 group, instance;
> + unsigned int xecore;
> + u32 reg_value;
> +
> + /*
> + * 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(xecore, 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);
> + }
Doesn't it make more sense to do this during enable rather than disable? So
we'll start from a clean place? Anyway, if this works in disable, probably
ok too.
> + reg_value = gen_eustall_base(stream, false);
> + xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, reg_value);
Why can't we just write 0 here? Then we can remove the enable param from
gen_eustall_base.
> +
> + xe_force_wake_put(gt_to_fw(gt), XE_FW_RENDER);
> + xe_pm_runtime_put(gt_to_xe(gt));
> +}
> +
> +static void eu_stall_buf_check_work_fn(struct work_struct *work)
> +{
> + struct xe_eu_stall_data_stream *stream =
> + container_of(work, typeof(*stream), buf_check_work);
> +
> + if (eu_stall_data_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_data_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;
So there is an interesting point here. if we are not going to do any
processing directly in the hrtimer interrupt, and are going to a schedule a
work item, why do we need the hrtimer at all? We can just make
buf_check_work a delayed_work, just call queue_delayed_work() to requeue
the work every 5 msec from the work_fn.
There are plenty of examples of this but e.g look at
amdgpu_amdkfd_restore_userptr_worker().
So I think we can and should remove hrtimer, just make buf_check_work
delayerd work. You already have a dedicated buf_check_wq (so are not using
a system_wq).
> +}
> +
> +static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
> + struct eu_stall_open_properties *props)
> +{
> + u32 write_ptr_reg, write_ptr, read_ptr_reg;
> + u32 vaddr_offset, base_reg_value;
> + struct xe_gt *gt = stream->gt;
> + struct per_xecore_buf *xecore_buf;
> + u16 group, instance, num_xecore;
> + xe_dss_mask_t all_xecore;
> + unsigned int fw_ref;
> + int ret, xecore;
> +
> + 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", 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->wait_num_reports = props->wait_num_reports;
> + stream->per_xecore_buf_size = per_xecore_buf_size;
> + stream->poll_period = POLL_PERIOD_NS;
> +
> + bitmap_or(all_xecore, gt->fuse_topo.g_dss_mask, gt->fuse_topo.c_dss_mask,
> + XE_MAX_DSS_FUSE_BITS);
> + /*
> + * Enabled subslices can be discontiguous. Find the maximum number of subslices
> + * that are enabled.
> + */
> + num_xecore = xe_gt_topology_mask_last_dss(all_xecore) + 1;
> +
> + ret = alloc_eu_stall_data_buf(stream, num_xecore);
> + if (ret)
> + return ret;
> +
> + stream->xecore_buf = kcalloc(num_xecore, sizeof(*stream->xecore_buf), GFP_KERNEL);
> + if (!stream->xecore_buf)
> + return -ENOMEM;
> +
> + bitmap_zero(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS);
> +
> + xe_pm_runtime_get(gt_to_xe(gt));
> + fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_RENDER);
> + if (!xe_force_wake_ref_has_domain(fw_ref, XE_FW_RENDER))
If this fails, this needs to return error.
> + xe_gt_err(gt, "Failed to get RENDER forcewake\n");
> +
> + base_reg_value = gen_eustall_base(stream, false);
> + xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, base_reg_value);
Why don't we just write 0 here? The real value will anyway be set during enable()?
> + /* GGTT addresses can never be > 32 bits */
> + xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE_UPPER, 0);
> + base_reg_value = _MASKED_FIELD(EUSTALL_MOCS | EUSTALL_SAMPLE_RATE,
> + REG_FIELD_PREP(EUSTALL_MOCS, gt->mocs.uc_index << 1) |
Sorry I don't know this mocs business very well. Can you explain what's
going on here? Why do we program mocs.uc_index, what does it do and why are
we multiplying by 2?
Also s/base_reg_value/reg_value/ or something like that, since we are
reusing the variable to not just set XEHPC_EUSTALL_BASE.
> + REG_FIELD_PREP(EUSTALL_SAMPLE_RATE,
> + props->eu_stall_sampling_rate));
> + xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_CTRL, base_reg_value);
> +
> + for_each_dss_steering(xecore, gt, group, instance) {
> + write_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT,
> + group, instance);
> + write_ptr = REG_FIELD_GET(XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK, write_ptr_reg);
> + write_ptr <<= 6;
> + write_ptr &= ((stream->per_xecore_buf_size << 1) - 1);
Why '<< 1'? Is it to preserve the rollover bit?
> + read_ptr_reg = write_ptr >> 6;
This line has no effect, it is being overwritten it in the next line right
below :/
> + read_ptr_reg = REG_FIELD_PREP(XEHPC_EUSTALL_REPORT1_READ_PTR_MASK, write_ptr);
Is the last arg here write_ptr, or is it read_ptr_reg set in the previous line?
> + read_ptr_reg &= XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
> + read_ptr_reg = _MASKED_FIELD(XEHPC_EUSTALL_REPORT1_READ_PTR_MASK, read_ptr_reg);
> + xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT1,
> + read_ptr_reg, group, instance);
Why do we need to do all this, read the write ptr reg and write to read ptr
register? Can't we just set both read and write ptr to the start of the per
xecore buf address?
> + xecore_buf = &stream->xecore_buf[xecore];
> + vaddr_offset = xecore * stream->per_xecore_buf_size;
> + xecore_buf->vaddr = stream->bo->vmap.vaddr + vaddr_offset;
Something like this vaddr (with shifts) should be written to read/write ptr
register imo, to initialize read/write ptrs to the start of the per xecore
buffer?
> + xecore_buf->write = write_ptr;
> + xecore_buf->read = write_ptr;
> + mutex_init(&xecore_buf->lock);
We also need to carefully see which of this stuff needs to be in init() and
what needs to move to enable(). Because according to uapi, a stream can be
disabled/enabled multiple times and that should work.
E.g. should read/write pointers get reset during disable/enable? To me it
looks like most of the stuff here (except buffer allocation etc.) should
really be in enable() instead of init() (xe_oa.c follows a similar logic).
> + }
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_pm_runtime_put(gt_to_xe(gt));
> + return 0;
> +}
> +
> +static void
> +xe_eu_stall_enable_locked(struct xe_eu_stall_data_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_disable_locked(struct xe_eu_stall_data_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_stream_ioctl_locked(struct xe_eu_stall_data_stream *stream,
> + unsigned int cmd, unsigned long arg)
> +{
> + switch (cmd) {
> + case DRM_XE_OBSERVATION_IOCTL_ENABLE:
> + xe_eu_stall_enable_locked(stream);
> + return 0;
> + case DRM_XE_OBSERVATION_IOCTL_DISABLE:
> + xe_eu_stall_disable_locked(stream);
> + return 0;
nit but imo it might be better to return 0 from these enable/disable
functions, but anyway this is also ok.
enable() anyway needs to return error from xe_force_wake_get.
Thanks.
--
Ashutosh
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 4 3/7] drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC
2025-01-15 20:02 ` [PATCH v8 3/7] drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC Harish Chegondi
` (2 preceding siblings ...)
2025-01-25 3:09 ` [PATCH v8 3 " Dixit, Ashutosh
@ 2025-01-29 4:12 ` Dixit, Ashutosh
2025-01-29 4:32 ` Dixit, Ashutosh
2025-01-30 18:46 ` Harish Chegondi
3 siblings, 2 replies; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-29 4:12 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
On Wed, 15 Jan 2025 12:02:09 -0800, Harish Chegondi wrote:
>
Hi Harish,
Reveiw #4 on the same patch. Final review on this version of the patch. I
have suggested some low level code changes which should work but would need
to be verified (the code, as well as tested).
Also, I don't understand really what's going on in these circ buffer
functions with the overflow bits. So I need some explanation as to what the
code is doing and whether what's going on here is really correct.
So basically what I don't understand here is whether:
if (write_offset > read_offset)
should really be
if (write_offset >= read_offset)
Basically what happens when 'write_offset == read_offset'. We should be
using the overflow bits "somehow" according to me in this case but we don't
seem to be doing that.
This is repeated several times in my comments below. But if you have an
explanation just explain it here, don't have to repeat it each time.
> @@ -144,6 +230,236 @@ static int xe_eu_stall_user_extensions(struct xe_device *xe, u64 extension,
> return 0;
> }
>
> +/**
> + * buf_data_size - Calculate the number of bytes in a circular buffer
> + * given the read and write pointers and the size of
> + * the buffer.
> + *
> + * @buf_size: Size of the circular buffer
> + * @read_ptr: Read pointer with an additional overflow bit
> + * @write_ptr: Write pointer with an additional overflow bit
> + *
> + * Since the read and write pointers have an additional overflow bit,
> + * this function calculates the offsets from the pointers and use the
> + * offsets to calculate the data size in the buffer.
> + *
> + * 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)
>=
See xe_oa_circ_diff. Surprised to see such a basic "bug" (though looks like
it is offset by other code so maybe not a real bug). Am I missing something
(e.g. because of the overflow bits)?
> + size = write_offset - read_offset;
> + else
> + size = buf_size - read_offset + write_offset;
> +
> + return size;
Though I think we should be using the overflow bits here to determine if
the buffer is empty or full. Why are we not doing that?
Basically what happens when 'write_offset == read_offset'? Shouldn't we
look at overflow bits to figure out if buffer is empty or full?
> +}
> +
> +/**
> + * eu_stall_data_buf_check - check for EU stall data in the 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_data_buf_check(struct xe_eu_stall_data_stream *stream)
> +{
> + u32 read_ptr, write_ptr_reg, write_ptr, total_data = 0;
> + u32 buf_size = stream->per_xecore_buf_size;
> + struct xe_gt *gt = stream->gt;
> + struct per_xecore_buf *xecore_buf;
> + bool min_data_present;
> + u16 group, instance;
> + unsigned int xecore;
> +
> + min_data_present = false;
Init this above where it is declared.
> + for_each_dss_steering(xecore, gt, group, instance) {
> + xecore_buf = &stream->xecore_buf[xecore];
> + mutex_lock(&xecore_buf->lock);
> + read_ptr = xecore_buf->read;
> + write_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT,
> + group, instance);
> + write_ptr = REG_FIELD_GET(XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK, write_ptr_reg);
> + write_ptr <<= 6;
> + write_ptr &= ((buf_size << 1) - 1);
> + if (write_ptr != read_ptr && !min_data_present) {
Check for the first condition is not needed after the suggested change to
buf_data_size above.
So this is:
if (!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->wait_num_reports)
> + min_data_present = true;
> + }
> + if (write_ptr_reg & XEHPC_EUSTALL_REPORT_OVERFLOW_DROP)
> + set_bit(xecore, stream->data_drop.mask);
> + xecore_buf->write = write_ptr;
> + mutex_unlock(&xecore_buf->lock);
> + }
> + return min_data_present;
> +}
> +
> +static void
> +clear_dropped_eviction_line_bit(struct xe_gt *gt, u16 group, u16 instance)
> +{
> + u32 write_ptr_reg;
> +
> + /* On PVC, the overflow bit has to be cleared by writing 1 to it. */
> + write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> +
> + xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT, write_ptr_reg, group, instance);
> +}
Ideally all this handling of dropped data should be in the -EIO patch. So
that should become the dropped packet handling patch. But anyway, let's
focus on the code, not the patches.
> +
> +static int
> +xe_eu_stall_data_buf_read(struct xe_eu_stall_data_stream *stream,
> + char __user *buf, size_t count,
> + size_t *total_size, struct xe_gt *gt,
> + u16 group, u16 instance, unsigned int xecore)
> +{
> + u32 read_ptr_reg, read_ptr, write_ptr;
> + u8 *xecore_start_vaddr, *read_vaddr;
> + struct xe_device *xe = gt_to_xe(gt);
> + struct per_xecore_buf *xecore_buf;
> + size_t size, copy_size, buf_size;
> + u32 read_offset, write_offset;
> + unsigned long record_size;
> +
> + /* Hardware increments the read and write pointers such that they can
> + * overflow into one additional bit. For example, a 256KB size buffer
> + * offset pointer needs 18 bits. But HW uses 19 bits for the read and
> + * write pointers. This technique avoids wasting a slot in the buffer.
OK, but here I don't see overflow bits being used in this code to
distinguish between buffer empty and full.
> + * Read and write offsets are calculated from the pointers in order to
> + * check if the write pointer has wrapped around the array.
> + */
> + xecore_buf = &stream->xecore_buf[xecore];
> + mutex_lock(&xecore_buf->lock);
> + xecore_start_vaddr = xecore_buf->vaddr;
> + read_ptr = xecore_buf->read;
> + write_ptr = xecore_buf->write;
> + buf_size = stream->per_xecore_buf_size;
> + read_offset = read_ptr & (buf_size - 1);
> + write_offset = write_ptr & (buf_size - 1);
> +
> + if (write_ptr == read_ptr) {
> + mutex_unlock(&xecore_buf->lock);
> + return 0;
> + }
No need I think again, remove this if statement and let the code fall
through. Let's avoid these if statements where possible.
> +
> + trace_xe_eu_stall_data_read(group, instance, read_ptr, write_ptr,
> + read_offset, write_offset, *total_size);
> + /* 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)
Once again, why not >= ?
> + size = write_offset - read_offset;
> + else
> + size = buf_size - read_offset + write_offset;
Replace the above code section with:
size = buf_data_size(buf_size, read_ptr, write_ptr);
> +
> + /* Read only the data that the user space buffer can accommodate */
> + if ((*total_size + size) > count) {
> + record_size = xe_eu_stall_data_record_size(xe);
Maybe it makes sense to add the record size to the stream, so we don't need
to this platform check each time. We can just initialize the record size at
init time.
> + size = count - *total_size;
> + size = (size / record_size) * record_size;
> + }
Let's replace this code section by something like:
xe_assert(xe, count >= *total_size);
size = min_t(size_t, count - *total_size, size);
size = (size / record_size) * record_size;
> +
> + if (size == 0) {
> + mutex_unlock(&xecore_buf->lock);
> + return 0;
> + }
Remove, again let the code fall through the if-else ladder
below. copy_to_user should handle 0 byte copies (i.e. ignore them). But
check that. Wouldn't this work?
> +
> + read_vaddr = xecore_start_vaddr + read_offset;
> +
> + if (write_offset > read_offset) {
>= , again, with the same overflow bit issue potentially.
> + if (copy_to_user((buf + *total_size), read_vaddr, size)) {
> + mutex_unlock(&xecore_buf->lock);
> + return -EFAULT;
> + }
> + } else {
> + if (size >= (buf_size - read_offset))
> + copy_size = buf_size - read_offset;
> + else
> + copy_size = size;
> + if (copy_to_user((buf + *total_size), read_vaddr, copy_size)) {
> + mutex_unlock(&xecore_buf->lock);
> + return -EFAULT;
> + }
> + if (copy_to_user((buf + *total_size + copy_size),
> + xecore_start_vaddr, size - copy_size)) {
> + mutex_unlock(&xecore_buf->lock);
> + return -EFAULT;
These copies look correct to me. Though not sure if we should replace all
these error return with a 'goto exit' so that we have all returns from the
end of the function. Do mutex_unlock etc. in exit. But anyway, probably ok
as is too.
> + }
> + }
> +
> + *total_size += size;
> + read_ptr += size;
> +
> + /* Read pointer can overflow into one additional bit */
> + read_ptr &= ((buf_size << 1) - 1);
Outer brackets not needed unless compiler complains.
> + read_ptr_reg = REG_FIELD_PREP(XEHPC_EUSTALL_REPORT1_READ_PTR_MASK, (read_ptr >> 6));
> + read_ptr_reg &= XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
Why? Doesn't REG_FIELD_PREP already do this?
> + read_ptr_reg = _MASKED_FIELD(XEHPC_EUSTALL_REPORT1_READ_PTR_MASK, read_ptr_reg);
> + xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT1, read_ptr_reg, group, instance);
> + if (test_bit(xecore, stream->data_drop.mask)) {
> + clear_dropped_eviction_line_bit(gt, group, instance);
> + clear_bit(xecore, stream->data_drop.mask);
> + }
Ideally, this dropped data stuff should be in the -EIO patch.
> + xecore_buf->read = read_ptr;
> + mutex_unlock(&xecore_buf->lock);
> + trace_xe_eu_stall_data_read(group, instance, read_ptr, write_ptr,
> + read_offset, write_offset, *total_size);
Why another trace?
> + return 0;
> +}
> +
> +/**
> + * xe_eu_stall_stream_read_locked - copy EU stall counters data from the
> + * per xecore 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_stream_read_locked(struct xe_eu_stall_data_stream *stream,
> + struct file *file, char __user *buf,
> + size_t count, loff_t *ppos)
Don't need ppos in this static function.
> +{
> + struct xe_gt *gt = stream->gt;
> + size_t total_size = 0;
> + u16 group, instance;
> + unsigned int xecore;
> + int ret = 0;
> +
> + if (count == 0)
> + return -EINVAL;
This should not be needed (and if it is needed it should be in
xe_eu_stall_stream_read). It should get handled automatically in
xe_eu_stall_data_buf_read with suggested changes. If not let's see.
> +
> + for_each_dss_steering(xecore, gt, group, instance) {
> + ret = xe_eu_stall_data_buf_read(stream, buf, count, &total_size,
> + gt, group, instance, xecore);
> + if (ret || count == total_size)
> + goto exit;
break
> + }
> +exit:
> + if (total_size)
> + return total_size;
> + else if (ret)
> + return ret;
> + else
> + return -EAGAIN;
return total_size ?: (ret ?: -EAGAIN);
See xe_oa_read.
> +}
> +
> /**
> * xe_eu_stall_stream_read - handles userspace read() of a EU stall data stream fd.
> *
> @@ -160,11 +476,265 @@ static int xe_eu_stall_user_extensions(struct xe_device *xe, u64 extension,
> static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> size_t count, loff_t *ppos)
> {
> - ssize_t ret = 0;
> + struct xe_eu_stall_data_stream *stream = file->private_data;
> + struct xe_gt *gt = stream->gt;
> + ssize_t ret;
> +
> + if (!stream->enabled) {
> + xe_gt_dbg(gt, "EU stall data stream not enabled to read\n");
> + return -EINVAL;
> + }
> +
> + if (!(file->f_flags & O_NONBLOCK)) {
> + do {
> + if (!stream->pollin) {
This is not needed. wait_event_interruptible automatically checks if cond
is true before waiting, it will not wait if cond is true. See
xe_oa_wait_unlocked.
> + ret = wait_event_interruptible(stream->poll_wq, stream->pollin);
> + if (ret)
> + return -EINTR;
> + }
> +
> + mutex_lock(>->eu_stall->lock);
> + ret = xe_eu_stall_stream_read_locked(stream, file, buf, count, ppos);
> + mutex_unlock(>->eu_stall->lock);
> + } while (ret == -EAGAIN);
> + } else {
> + mutex_lock(>->eu_stall->lock);
> + ret = xe_eu_stall_stream_read_locked(stream, file, buf, count, ppos);
> + mutex_unlock(>->eu_stall->lock);
> + }
> +
> + stream->pollin = false;
Generally speaking this doesn't work if user buffer is too small, in that
case we don't want user thread to block when it calls in the next time to
read. See bcad588dea538 . But since this is a corner case, I am ok fixing
this after the initial merge.
>
> return ret;
> }
>
Thanks.
--
Ashutosh
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 4 3/7] drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC
2025-01-29 4:12 ` [PATCH v8 4 " Dixit, Ashutosh
@ 2025-01-29 4:32 ` Dixit, Ashutosh
2025-01-30 18:46 ` Harish Chegondi
1 sibling, 0 replies; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-29 4:32 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
On Tue, 28 Jan 2025 20:12:25 -0800, Dixit, Ashutosh wrote:
>
> On Wed, 15 Jan 2025 12:02:09 -0800, Harish Chegondi wrote:
> >
>
> Hi Harish,
>
> Reveiw #4 on the same patch. Final review on this version of the patch. I
> have suggested some low level code changes which should work but would need
> to be verified (the code, as well as tested).
>
> Also, I don't understand really what's going on in these circ buffer
> functions with the overflow bits. So I need some explanation as to what the
> code is doing and whether what's going on here is really correct.
>
> So basically what I don't understand here is whether:
>
> if (write_offset > read_offset)
>
> should really be
>
> if (write_offset >= read_offset)
>
> Basically what happens when 'write_offset == read_offset'. We should be
> using the overflow bits "somehow" according to me in this case but we don't
> seem to be doing that.
>
> This is repeated several times in my comments below. But if you have an
> explanation just explain it here, don't have to repeat it each time.
Let's have one or two centralized functions to do this everywhere rather
than compute read/write offsets everywhere. For example a correct
buf_data_size() function should return how many bytes are in the buffer,
taking into account whether the buffer is empty or full. And then this
function will be called everywhere where we need to do this. And we can
have more than one such centralized function. Similar to xe_oa_circ_diff
and xe_oa_circ_incr for OA.
> > +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)
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 4/7] drm/xe/eustall: Return -EIO error from read() if HW drops data
2025-01-15 20:02 ` [PATCH v8 4/7] drm/xe/eustall: Return -EIO error from read() if HW drops data Harish Chegondi
@ 2025-01-30 4:45 ` Dixit, Ashutosh
2025-01-30 17:05 ` Dixit, Ashutosh
2025-01-31 19:30 ` Harish Chegondi
0 siblings, 2 replies; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-30 4:45 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
On Wed, 15 Jan 2025 12:02:10 -0800, Harish Chegondi wrote:
>
> 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,
> and if the hardware wants to write more data, it simply drops
> data due to unavailable buffer space. In that case, hardware
> sets a bit in a register. If the driver detects data drop,
> the driver read() returns -EIO error to let the user space
> know that HW has dropped data. The -EIO error is returned
> even if there is EU stall data in the buffer. A subsequent
> read by the user space returns the remaining EU stall data.
As I mentioned earlier, entire dropped packet handling should be in this
patch, so we can see the entire logic around this. So data_drop struct
should be defined in this patch.
>
> Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_eu_stall.c | 12 ++++++++++++
> drivers/gpu/drm/xe/xe_eu_stall.h | 1 +
> 2 files changed, 13 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> index c388d733b857..437782f8433c 100644
> --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> @@ -472,6 +472,7 @@ xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *stream,
> * before calling read().
> *
> * Returns: The number of bytes copied or a negative error code on failure.
> + * -EIO if HW drops any EU stall data when the buffer is full.
> */
> static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> size_t count, loff_t *ppos)
> @@ -485,6 +486,16 @@ static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> return -EINVAL;
> }
>
> + if (bitmap_weight(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS)) {
Since data_drop.mask is being touched elsewhere under xecore_buf->lock,
here also it should be accessed under the same lock. So this returning -EIO
should probably be moved into xe_eu_stall_stream_read_locked?
> + if (!stream->data_drop.reported_to_user) {
> + stream->data_drop.reported_to_user = true;
> + xe_gt_dbg(gt, "EU stall data dropped in XeCores: %*pb\n",
> + XE_MAX_DSS_FUSE_BITS, stream->data_drop.mask);
> + return -EIO;
> + }
> + stream->data_drop.reported_to_user = false;
I don't think this logic is correct. We should set this to false only after
we have cleared all set bits (e.g. only after bitmap_weight) otherwise we
might keep returning -EIO multiple times?
If HW continues to drop data and keep setting the line, while we are
resetting the bit, it is possible bitmap_weight might never become 0. I
think that is ok, we have returned -EIO at least once to indicate to
userspace that it is not reading data fast enough and HW is dropping data.
Or we may return -EIO multiple times as is happening here, where
reported_to_user is set to 0 before all bits might have been cleared. So
what is happening here might be ok too.
To see this clearly and evaluate it is why I am saying move all of this
data drop handling and -EIO return into this one patch. So we can decide
which approach to take: return -EIO just once or return multiple times.
We can also maybe defer this patch and merge the other stuff first if it's
a separate patch.
So maybe this is ok, maybe not, anyway something to think about.
> + }
> +
> if (!(file->f_flags & O_NONBLOCK)) {
> do {
> if (!stream->pollin) {
> @@ -680,6 +691,7 @@ static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
> if (!stream->xecore_buf)
> return -ENOMEM;
>
> + stream->data_drop.reported_to_user = false;
> bitmap_zero(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS);
Stream is kzalloc'd, why do you need to init these?
>
> xe_pm_runtime_get(gt_to_xe(gt));
> diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
> index f97c8bf8e852..8bc44e9e98af 100644
> --- a/drivers/gpu/drm/xe/xe_eu_stall.h
> +++ b/drivers/gpu/drm/xe/xe_eu_stall.h
> @@ -31,6 +31,7 @@ struct xe_eu_stall_data_stream {
> struct xe_bo *bo;
> struct per_xecore_buf *xecore_buf;
> struct {
> + bool reported_to_user;
> xe_dss_mask_t mask;
> } data_drop;
> struct hrtimer poll_check_timer;
> --
> 2.47.1
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 5/7] drm/xe/eustall: Add EU stall sampling support for Xe2
2025-01-15 20:02 ` [PATCH v8 5/7] drm/xe/eustall: Add EU stall sampling support for Xe2 Harish Chegondi
@ 2025-01-30 4:55 ` Dixit, Ashutosh
2025-02-05 1:16 ` Olson, Matthew
0 siblings, 1 reply; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-30 4:55 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
On Wed, 15 Jan 2025 12:02:11 -0800, Harish Chegondi wrote:
> diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> index 437782f8433c..d72f80a9dfe4 100644
> --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> @@ -73,6 +73,42 @@ struct xe_eu_stall_data_pvc {
> __u64 unused[6];
> } __packed;
>
> +/**
> + * struct xe_eu_stall_data_xe2 - EU stall data format for LNL, BMG
> + *
> + * Bits Field
> + * 0 to 28 IP (addr)
> + * 29 to 36 Tdr count
> + * 37 to 44 other count
> + * 45 to 52 control count
> + * 53 to 60 pipestall count
> + * 61 to 68 send count
> + * 69 to 76 dist_acc count
> + * 77 to 84 sbid count
> + * 85 to 92 sync count
> + * 93 to 100 inst_fetch count
> + * 101 to 108 Active count
> + * 109 to 111 Exid
> + * 112 EndFlag (is always 1)
> + */
> +struct xe_eu_stall_data_xe2 {
> + __u64 ip_addr:29;
> + __u64 tdr_count:8;
> + __u64 other_count:8;
> + __u64 control_count:8;
> + __u64 pipestall_count:8;
> + __u64 send_count:8;
> + __u64 dist_acc_count:8;
> + __u64 sbid_count:8;
> + __u64 sync_count:8;
> + __u64 inst_fetch_count:8;
> + __u64 active_count:8;
> + __u64 ex_id:3;
> + __u64 end_flag:1;
> + __u64 unused_bits:15;
> + __u64 unused[6];
> +} __packed;
Same question about whether or not to retain this struct. Retain it if we
want to document this information otherwise drop it and just keep sizeof.
> +
> static u64 per_xecore_buf_size = SZ_512K;
>
> static unsigned long
> @@ -83,6 +119,8 @@ xe_eu_stall_data_record_size(struct xe_device *xe)
>
> if (platform == XE_PVC)
> record_size = sizeof(struct xe_eu_stall_data_pvc);
> + else if ((platform == XE_LUNARLAKE) || (platform == XE_BATTLEMAGE))
'else if (GRAPHICS_VER(xe) >= 20)' so that we don't have to keep adding
each individual platform.
> + record_size = sizeof(struct xe_eu_stall_data_xe2);
>
> return record_size;
> }
> @@ -311,10 +349,16 @@ eu_stall_data_buf_check(struct xe_eu_stall_data_stream *stream)
> static void
> clear_dropped_eviction_line_bit(struct xe_gt *gt, u16 group, u16 instance)
> {
> + struct xe_device *xe = gt_to_xe(gt);
> u32 write_ptr_reg;
>
> - /* On PVC, the overflow bit has to be cleared by writing 1 to it. */
> - write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> + /* 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 (GRAPHICS_VER(xe) >= 20)
> + write_ptr_reg = _MASKED_BIT_DISABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> + else
> + write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
>
> xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT, write_ptr_reg, group, instance);
> }
> @@ -882,7 +926,9 @@ static const struct file_operations fops_eu_stall = {
>
> static inline bool has_eu_stall_sampling_support(struct xe_device *xe)
> {
> - return ((xe->info.platform == XE_PVC) ? true : false);
> + return ((xe->info.platform == XE_PVC ||
> + xe->info.platform == XE_LUNARLAKE ||
> + xe->info.platform == XE_BATTLEMAGE) ? true : false);
Same here, use (GRAPHICS_VER(xe) >= 20).
> }
>
> /**
> --
> 2.47.1
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 7/7] drm/xe/eustall: Add workaround 22016596838 which applies to PVC.
2025-01-15 20:02 ` [PATCH v8 7/7] drm/xe/eustall: Add workaround 22016596838 which applies to PVC Harish Chegondi
@ 2025-01-30 5:14 ` Dixit, Ashutosh
0 siblings, 0 replies; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-30 5:14 UTC (permalink / raw)
To: Harish Chegondi
Cc: intel-xe, james.ausmus, felix.j.degrood, matias.a.cabral,
joshua.santosh.ranjan, shubham.kumar, matthew.d.roper,
matthew.olson, lucas.demarchi
On Wed, 15 Jan 2025 12:02:13 -0800, Harish Chegondi wrote:
>
> Add PVC workaround 22016596838 that disables EU DOP gating
> during EU stall sampling.
>
> Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_eu_stall.c | 16 ++++++++++++++++
> drivers/gpu/drm/xe/xe_wa_oob.rules | 1 +
> 2 files changed, 17 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> index 6acfd369d808..f030a9c1af84 100644
> --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> @@ -13,6 +13,7 @@
>
> #include "xe_bo.h"
> #include "xe_pm.h"
> +#include "xe_wa.h"
> #include "xe_trace.h"
> #include "xe_macros.h"
> #include "xe_device.h"
> @@ -26,6 +27,8 @@
> #include "regs/xe_gt_regs.h"
> #include "regs/xe_eu_stall_regs.h"
>
> +#include <generated/xe_wa_oob.h>
include in alphabetical order.
> +
> #define POLL_FREQUENCY_HZ 100
> #define POLL_PERIOD_NS (NSEC_PER_SEC / POLL_FREQUENCY_HZ)
>
> @@ -677,6 +680,14 @@ xe_eu_stall_stream_enable(struct xe_eu_stall_data_stream *stream)
> if (!xe_force_wake_ref_has_domain(fw_ref, XE_FW_RENDER))
> xe_gt_err(gt, "Failed to get RENDER forcewake\n");
>
> + /*
> + * Wa_22016596838:pvc
> + * Disable EU DOP gating for PVC.
> + */
Are these comments needed? Other places with XE_WA don't have them? Anyway
should be ok.
> + if (XE_WA(gt, 22016596838))
> + 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);
> }
> @@ -708,6 +719,11 @@ xe_eu_stall_stream_disable(struct xe_eu_stall_data_stream *stream)
> reg_value = gen_eustall_base(stream, false);
> xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, reg_value);
>
> + /* Wa_22016596838:pvc */
> + if (XE_WA(gt, 22016596838))
> + xe_gt_mcr_multicast_write(gt, ROW_CHICKEN2,
> + _MASKED_BIT_DISABLE(DISABLE_DOP_GATING));
> +
> xe_force_wake_put(gt_to_fw(gt), XE_FW_RENDER);
> xe_pm_runtime_put(gt_to_xe(gt));
> }
> diff --git a/drivers/gpu/drm/xe/xe_wa_oob.rules b/drivers/gpu/drm/xe/xe_wa_oob.rules
> index 40438c3d9b72..7dad548dbe9f 100644
> --- a/drivers/gpu/drm/xe/xe_wa_oob.rules
> +++ b/drivers/gpu/drm/xe/xe_wa_oob.rules
> @@ -5,6 +5,7 @@
> 22011391025 PLATFORM(DG2)
> 22012727170 SUBPLATFORM(DG2, G11)
> 22012727685 SUBPLATFORM(DG2, G11)
> +22016596838 PLATFORM(PVC)
> 18020744125 PLATFORM(PVC)
> 1509372804 PLATFORM(PVC), GRAPHICS_STEP(A0, C0)
> 1409600907 GRAPHICS_VERSION_RANGE(1200, 1250)
> --
> 2.47.1
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 4/7] drm/xe/eustall: Return -EIO error from read() if HW drops data
2025-01-30 4:45 ` Dixit, Ashutosh
@ 2025-01-30 17:05 ` Dixit, Ashutosh
2025-01-31 21:50 ` Harish Chegondi
2025-01-31 19:30 ` Harish Chegondi
1 sibling, 1 reply; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-30 17:05 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
On Wed, 29 Jan 2025 20:45:59 -0800, Dixit, Ashutosh wrote:
>
> On Wed, 15 Jan 2025 12:02:10 -0800, Harish Chegondi wrote:
> >
> > 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,
> > and if the hardware wants to write more data, it simply drops
> > data due to unavailable buffer space. In that case, hardware
> > sets a bit in a register. If the driver detects data drop,
> > the driver read() returns -EIO error to let the user space
> > know that HW has dropped data. The -EIO error is returned
> > even if there is EU stall data in the buffer. A subsequent
> > read by the user space returns the remaining EU stall data.
>
> As I mentioned earlier, entire dropped packet handling should be in this
> patch, so we can see the entire logic around this. So data_drop struct
> should be defined in this patch.
>
> >
> > Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> > ---
> > drivers/gpu/drm/xe/xe_eu_stall.c | 12 ++++++++++++
> > drivers/gpu/drm/xe/xe_eu_stall.h | 1 +
> > 2 files changed, 13 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> > index c388d733b857..437782f8433c 100644
> > --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> > +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> > @@ -472,6 +472,7 @@ xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *stream,
> > * before calling read().
> > *
> > * Returns: The number of bytes copied or a negative error code on failure.
> > + * -EIO if HW drops any EU stall data when the buffer is full.
> > */
> > static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > size_t count, loff_t *ppos)
> > @@ -485,6 +486,16 @@ static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > return -EINVAL;
> > }
> >
> > + if (bitmap_weight(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS)) {
>
> Since data_drop.mask is being touched elsewhere under xecore_buf->lock,
> here also it should be accessed under the same lock. So this returning -EIO
> should probably be moved into xe_eu_stall_stream_read_locked?
>
> > + if (!stream->data_drop.reported_to_user) {
> > + stream->data_drop.reported_to_user = true;
> > + xe_gt_dbg(gt, "EU stall data dropped in XeCores: %*pb\n",
> > + XE_MAX_DSS_FUSE_BITS, stream->data_drop.mask);
> > + return -EIO;
> > + }
> > + stream->data_drop.reported_to_user = false;
>
> I don't think this logic is correct. We should set this to false only after
> we have cleared all set bits (e.g. only after bitmap_weight) otherwise we
> might keep returning -EIO multiple times?
>
> If HW continues to drop data and keep setting the line, while we are
> resetting the bit, it is possible bitmap_weight might never become 0. I
> think that is ok, we have returned -EIO at least once to indicate to
> userspace that it is not reading data fast enough and HW is dropping data.
>
> Or we may return -EIO multiple times as is happening here, where
> reported_to_user is set to 0 before all bits might have been cleared. So
> what is happening here might be ok too.
>
> To see this clearly and evaluate it is why I am saying move all of this
> data drop handling and -EIO return into this one patch. So we can decide
> which approach to take: return -EIO just once or return multiple times.
>
> We can also maybe defer this patch and merge the other stuff first if it's
> a separate patch.
>
> So maybe this is ok, maybe not, anyway something to think about.
Because we don't want to complicate this, here's another simple idea:
In eu_stall_data_buf_check(), when we see the drop bit set for a particular
dss, move the read pointer (effectively discarding any data from that dss)
and also clear_dropped_eviction_line_bit(), but the dss with dropped data
is saved off in data_drop.mask. So basically we are clearing and saving the
error condition. Discarding data from that dss might be ok, since HW has
already dropped data.
Now in the next read_locked, if any data_drop.mask bit is set, return -EIO
and clear data_drop.mask. This way we don't need
data_drop.reported_to_user. So this way the entire situation is cleared and
handled once we have returned -EIO.
If more data gets dropped before the next read, same process repeats and
-EIO will be returned again.
>
> > + }
> > +
> > if (!(file->f_flags & O_NONBLOCK)) {
> > do {
> > if (!stream->pollin) {
> > @@ -680,6 +691,7 @@ static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
> > if (!stream->xecore_buf)
> > return -ENOMEM;
> >
> > + stream->data_drop.reported_to_user = false;
> > bitmap_zero(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS);
>
> Stream is kzalloc'd, why do you need to init these?
>
> >
> > xe_pm_runtime_get(gt_to_xe(gt));
> > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
> > index f97c8bf8e852..8bc44e9e98af 100644
> > --- a/drivers/gpu/drm/xe/xe_eu_stall.h
> > +++ b/drivers/gpu/drm/xe/xe_eu_stall.h
> > @@ -31,6 +31,7 @@ struct xe_eu_stall_data_stream {
> > struct xe_bo *bo;
> > struct per_xecore_buf *xecore_buf;
> > struct {
> > + bool reported_to_user;
> > xe_dss_mask_t mask;
> > } data_drop;
> > struct hrtimer poll_check_timer;
> > --
> > 2.47.1
> >
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 6/7] drm/xe/uapi: Add a device query to get EU stall sampling information
2025-01-15 20:02 ` [PATCH v8 6/7] drm/xe/uapi: Add a device query to get EU stall sampling information Harish Chegondi
2025-01-16 22:34 ` Dixit, Ashutosh
@ 2025-01-30 17:36 ` Dixit, Ashutosh
1 sibling, 0 replies; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-30 17:36 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
On Wed, 15 Jan 2025 12:02:12 -0800, Harish Chegondi wrote:
>
> User space can get the EU stall data record size, EU stall capabilities,
> EU stall sampling rates, and per XeCore buffer size with query IOCTL
> DRM_IOCTL_XE_DEVICE_QUERY with .query set to DRM_XE_DEVICE_QUERY_EU_STALL.
> A struct drm_xe_query_eu_stall will be returned to the user space along
> with an array of supported sampling rates sorted in the fastest sampling
> rate first order. sampling_rates in struct drm_xe_query_eu_stall will
> point to the array of sampling rates.
>
> Any capabilities in EU stall sampling as of this patch are considered
> as base capabilities. New capability bits will be added for any new
> functionality added later.
>
> v7: Change sampling_rates from a pointer to flexible array.
> v6: Include EU stall sampling rates information and
> per XeCore buffer size in the query information.
>
> Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> ---
> drivers/gpu/drm/xe/xe_eu_stall.c | 41 +++++++++++++++++++++++++++++++-
> drivers/gpu/drm/xe/xe_eu_stall.h | 5 ++++
> drivers/gpu/drm/xe/xe_query.c | 38 +++++++++++++++++++++++++++++
> include/uapi/drm/xe_drm.h | 40 +++++++++++++++++++++++++++++--
> 4 files changed, 121 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> index d72f80a9dfe4..6acfd369d808 100644
> --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> @@ -111,7 +111,46 @@ struct xe_eu_stall_data_xe2 {
>
> static u64 per_xecore_buf_size = SZ_512K;
>
> -static unsigned long
> +const u64 eu_stall_sampling_rates[] = {251, 251 * 2, 251 * 3, 251 * 4, 251 * 5, 251 * 6, 251 * 7};
> +
> +/**
> + * xe_eu_stall_get_sampling_rates - get EU stall sampling rates information.
> + *
> + * @num_rates_ptr: Pointer to a u32 to return the number of sampling rates.
> + * @rates_ptr: double u64 pointer to point to an array of sampling rates.
> + *
> + * Stores the number of sampling rates and pointer to the array of
> + * sampling rates in the input pointers.
> + *
> + * Returns: Size of the EU stall sampling rates array.
> + */
> +size_t xe_eu_stall_get_sampling_rates(u32 *num_rates_ptr, const u64 **rates_ptr)
> +{
> + *num_rates_ptr = ARRAY_SIZE(eu_stall_sampling_rates);
> + *rates_ptr = eu_stall_sampling_rates;
> +
> + return sizeof(eu_stall_sampling_rates);
> +}
> +
> +/**
> + * xe_eu_stall_get_per_xecore_buf_size - get per XeCore buffer size.
> + *
> + * Returns: The per XeCore buffer size used to allocate the per GT
> + * EU stall data buffer.
> + */
> +u64 xe_eu_stall_get_per_xecore_buf_size(void)
> +{
> + return per_xecore_buf_size;
> +}
> +
> +/**
> + * xe_eu_stall_data_record_size - get EU stall data record size.
> + *
> + * @xe: Pointer to a Xe device.
> + *
> + * Returns: EU stall data record size.
> + */
> +unsigned long
> xe_eu_stall_data_record_size(struct xe_device *xe)
> {
Why do these 3 functions have 3 different return types, when they all
return a size? Can't the return type for all just be size_t?
Rest of the stuff in this patch lgtm, apart from reordering the reserved
field in struct drm_xe_query_eu_stall stuff, I previously mentioned.
> enum xe_platform platform = xe->info.platform;
> diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
> index 8bc44e9e98af..c00d1af794a1 100644
> --- a/drivers/gpu/drm/xe/xe_eu_stall.h
> +++ b/drivers/gpu/drm/xe/xe_eu_stall.h
> @@ -47,10 +47,15 @@ struct xe_eu_stall_gt {
> struct xe_eu_stall_data_stream *stream;
> };
>
> +u64 xe_eu_stall_get_per_xecore_buf_size(void);
> +size_t xe_eu_stall_get_sampling_rates(u32 *num_rates_ptr,
> + const u64 **rates_ptr);
> int xe_eu_stall_init(struct xe_gt *gt);
> void xe_eu_stall_fini(struct xe_gt *gt);
>
> int xe_eu_stall_stream_open(struct drm_device *dev,
> u64 data,
> struct drm_file *file);
> +unsigned long
> +xe_eu_stall_data_record_size(struct xe_device *xe);
> #endif
> diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
> index c059639613f7..544a4a2ce07f 100644
> --- a/drivers/gpu/drm/xe/xe_query.c
> +++ b/drivers/gpu/drm/xe/xe_query.c
> @@ -26,6 +26,7 @@
> #include "xe_oa.h"
> #include "xe_ttm_vram_mgr.h"
> #include "xe_wa.h"
> +#include "xe_eu_stall.h"
>
> static const u16 xe_to_user_engine_class[] = {
> [XE_ENGINE_CLASS_RENDER] = DRM_XE_ENGINE_CLASS_RENDER,
> @@ -698,6 +699,42 @@ static int query_oa_units(struct xe_device *xe,
> return ret ? -EFAULT : 0;
> }
>
> +static int query_eu_stall(struct xe_device *xe,
> + struct drm_xe_device_query *query)
> +{
> + void __user *query_ptr = u64_to_user_ptr(query->data);
> + struct drm_xe_query_eu_stall *info;
> + size_t size, array_size;
> + const u64 *rates_ptr;
> + u32 num_rates;
> + int ret;
> +
> + array_size = xe_eu_stall_get_sampling_rates(&num_rates, &rates_ptr);
> + size = sizeof(struct drm_xe_query_eu_stall) + array_size;
> +
> + if (query->size == 0) {
> + query->size = size;
> + return 0;
> + } else if (XE_IOCTL_DBG(xe, query->size != size)) {
> + return -EINVAL;
> + }
> +
> + info = kzalloc(size, GFP_KERNEL);
> + if (!info)
> + return -ENOMEM;
> +
> + info->num_sampling_rates = num_rates;
> + info->capabilities = DRM_XE_EU_STALL_CAPS_BASE;
> + info->record_size = xe_eu_stall_data_record_size(xe);
> + info->per_xecore_buf_size = xe_eu_stall_get_per_xecore_buf_size();
> + memcpy(info->sampling_rates, rates_ptr, array_size);
> +
> + ret = copy_to_user(query_ptr, info, size);
> + kfree(info);
> +
> + return ret ? -EFAULT : 0;
> +}
> +
> static int (* const xe_query_funcs[])(struct xe_device *xe,
> struct drm_xe_device_query *query) = {
> query_engines,
> @@ -709,6 +746,7 @@ static int (* const xe_query_funcs[])(struct xe_device *xe,
> query_engine_cycles,
> query_uc_fw_version,
> query_oa_units,
> + query_eu_stall,
> };
>
> int xe_query_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
> index d9b20afc57c1..7d518f97ba34 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -700,6 +700,7 @@ struct drm_xe_device_query {
> #define DRM_XE_DEVICE_QUERY_ENGINE_CYCLES 6
> #define DRM_XE_DEVICE_QUERY_UC_FW_VERSION 7
> #define DRM_XE_DEVICE_QUERY_OA_UNITS 8
> +#define DRM_XE_DEVICE_QUERY_EU_STALL 9
> /** @query: The type of data to query */
> __u32 query;
>
> @@ -1754,8 +1755,8 @@ enum drm_xe_eu_stall_property_id {
> DRM_XE_EU_STALL_PROP_GT_ID = 1,
>
> /**
> - * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate
> - * in GPU cycles.
> + * @DRM_XE_EU_STALL_PROP_SAMPLE_RATE: Sampling rate in
> + * GPU cycles from @sampling_rates in struct @drm_xe_query_eu_stall
> */
> DRM_XE_EU_STALL_PROP_SAMPLE_RATE,
>
> @@ -1767,6 +1768,41 @@ enum drm_xe_eu_stall_property_id {
> DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS,
> };
>
> +/**
> + * struct drm_xe_query_eu_stall - Information about EU stall sampling.
> + *
> + * If a query is made with a struct @drm_xe_device_query where .query
> + * is equal to @DRM_XE_DEVICE_QUERY_EU_STALL, then the reply uses
> + * struct @drm_xe_query_eu_stall in .data.
> + */
> +struct drm_xe_query_eu_stall {
> + /** @extensions: Pointer to the first extension struct, if any */
> + __u64 extensions;
> +
> + /** @capabilities: EU stall capabilities bit-mask */
> + __u64 capabilities;
> +#define DRM_XE_EU_STALL_CAPS_BASE (1 << 0)
> +
> + /** @record_size: size of each EU stall data record */
> + __u64 record_size;
> +
> + /** @per_xecore_buf_size: Per XeCore buffer size */
> + __u64 per_xecore_buf_size;
> +
> + /** @num_sampling_rates: Number of sampling rates supported */
> + __u64 num_sampling_rates;
> +
> + /** @reserved: Reserved */
> + __u64 reserved[5];
> +
> + /**
> + * @sampling_rates: Flexible array of sampling rates
> + * sorted in the fastest to slowest order.
> + * Sampling rates are specified in GPU clock cycles.
> + */
> + __u64 sampling_rates[];
> +};
> +
> #if defined(__cplusplus)
> }
> #endif
> --
> 2.47.1
>
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 4 3/7] drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC
2025-01-29 4:12 ` [PATCH v8 4 " Dixit, Ashutosh
2025-01-29 4:32 ` Dixit, Ashutosh
@ 2025-01-30 18:46 ` Harish Chegondi
2025-01-31 3:23 ` Dixit, Ashutosh
1 sibling, 1 reply; 49+ messages in thread
From: Harish Chegondi @ 2025-01-30 18:46 UTC (permalink / raw)
To: Dixit, Ashutosh; +Cc: intel-xe
On Tue, Jan 28, 2025 at 08:12:25PM -0800, Dixit, Ashutosh wrote:
> On Wed, 15 Jan 2025 12:02:09 -0800, Harish Chegondi wrote:
> >
>
Hi Ashutosh,
> Hi Harish,
>
> Reveiw #4 on the same patch. Final review on this version of the patch. I
> have suggested some low level code changes which should work but would need
> to be verified (the code, as well as tested).
>
> Also, I don't understand really what's going on in these circ buffer
> functions with the overflow bits. So I need some explanation as to what the
> code is doing and whether what's going on here is really correct.
>
> So basically what I don't understand here is whether:
>
> if (write_offset > read_offset)
>
> should really be
>
> if (write_offset >= read_offset)
>
> Basically what happens when 'write_offset == read_offset'. We should be
> using the overflow bits "somehow" according to me in this case but we don't
> seem to be doing that.
>
> This is repeated several times in my comments below. But if you have an
> explanation just explain it here, don't have to repeat it each time.
1. The code you are referring to calculates the size of data in a
non-empty circular buffer, i.e. when buffer read ptr != write ptr.
It is an unnecessary function call overhead to call buf_data_size()
when the buffer is empty (read ptr == write ptr).
2. read/write pointers contain the overflow bit, read/write offsets do
not contain the overflow bit. They are just offsets into the buffer.
3. When the buffer is full, write offset == read offset, but the
overflow bits are different. The if (write_offset > read_offset) has
an else size = buf_size - read_offset + write_offset; which gets
executed when buffer is full (write offset == read offset).
4. I can add in the documentation of buf_data_size() that it
should be called for non-empty buffers only.
5. I have verified with several examples that there is no bug in the
code you are referring to.
>
> > @@ -144,6 +230,236 @@ static int xe_eu_stall_user_extensions(struct xe_device *xe, u64 extension,
> > return 0;
> > }
> >
> > +/**
> > + * buf_data_size - Calculate the number of bytes in a circular buffer
> > + * given the read and write pointers and the size of
> > + * the buffer.
> > + *
> > + * @buf_size: Size of the circular buffer
> > + * @read_ptr: Read pointer with an additional overflow bit
> > + * @write_ptr: Write pointer with an additional overflow bit
> > + *
> > + * Since the read and write pointers have an additional overflow bit,
> > + * this function calculates the offsets from the pointers and use the
> > + * offsets to calculate the data size in the buffer.
> > + *
> > + * 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)
>
> >=
No. The else part gets executed for == case.
>
> See xe_oa_circ_diff. Surprised to see such a basic "bug" (though looks like
> it is offset by other code so maybe not a real bug). Am I missing something
> (e.g. because of the overflow bits)?
This function will be called only for non-empty buffers. I don't think
there is a bug in this code.
>
> > + size = write_offset - read_offset;
> > + else
> > + size = buf_size - read_offset + write_offset;
> > +
> > + return size;
>
> Though I think we should be using the overflow bits here to determine if
> the buffer is empty or full. Why are we not doing that?
This function would not be called when the buffer is empty
(read ptr === write ptr). It is an unnecessary function call overhead to
call this for empty buffers.
>
> Basically what happens when 'write_offset == read_offset'? Shouldn't we
> look at overflow bits to figure out if buffer is empty or full?
The else part gets executed correctly when the buffer is full. I will
add a note in the function documentation that this function will be
called only for non-empty buffers.
>
> > +}
> > +
> > +/**
> > + * eu_stall_data_buf_check - check for EU stall data in the 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_data_buf_check(struct xe_eu_stall_data_stream *stream)
> > +{
> > + u32 read_ptr, write_ptr_reg, write_ptr, total_data = 0;
> > + u32 buf_size = stream->per_xecore_buf_size;
> > + struct xe_gt *gt = stream->gt;
> > + struct per_xecore_buf *xecore_buf;
> > + bool min_data_present;
> > + u16 group, instance;
> > + unsigned int xecore;
> > +
> > + min_data_present = false;
>
> Init this above where it is declared.
Will change.
>
> > + for_each_dss_steering(xecore, gt, group, instance) {
> > + xecore_buf = &stream->xecore_buf[xecore];
> > + mutex_lock(&xecore_buf->lock);
> > + read_ptr = xecore_buf->read;
> > + write_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT,
> > + group, instance);
> > + write_ptr = REG_FIELD_GET(XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK, write_ptr_reg);
> > + write_ptr <<= 6;
> > + write_ptr &= ((buf_size << 1) - 1);
> > + if (write_ptr != read_ptr && !min_data_present) {
>
> Check for the first condition is not needed after the suggested change to
> buf_data_size above.
It is an unnecessary function call overhead to call buf_data_size() when
buffer is empty (write_ptr == read_ptr)
>
> So this is:
> if (!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->wait_num_reports)
> > + min_data_present = true;
> > + }
> > + if (write_ptr_reg & XEHPC_EUSTALL_REPORT_OVERFLOW_DROP)
> > + set_bit(xecore, stream->data_drop.mask);
> > + xecore_buf->write = write_ptr;
> > + mutex_unlock(&xecore_buf->lock);
> > + }
> > + return min_data_present;
> > +}
> > +
> > +static void
> > +clear_dropped_eviction_line_bit(struct xe_gt *gt, u16 group, u16 instance)
> > +{
> > + u32 write_ptr_reg;
> > +
> > + /* On PVC, the overflow bit has to be cleared by writing 1 to it. */
> > + write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> > +
> > + xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT, write_ptr_reg, group, instance);
> > +}
>
> Ideally all this handling of dropped data should be in the -EIO patch. So
> that should become the dropped packet handling patch. But anyway, let's
> focus on the code, not the patches.
>
> > +
> > +static int
> > +xe_eu_stall_data_buf_read(struct xe_eu_stall_data_stream *stream,
> > + char __user *buf, size_t count,
> > + size_t *total_size, struct xe_gt *gt,
> > + u16 group, u16 instance, unsigned int xecore)
> > +{
> > + u32 read_ptr_reg, read_ptr, write_ptr;
> > + u8 *xecore_start_vaddr, *read_vaddr;
> > + struct xe_device *xe = gt_to_xe(gt);
> > + struct per_xecore_buf *xecore_buf;
> > + size_t size, copy_size, buf_size;
> > + u32 read_offset, write_offset;
> > + unsigned long record_size;
> > +
> > + /* Hardware increments the read and write pointers such that they can
> > + * overflow into one additional bit. For example, a 256KB size buffer
> > + * offset pointer needs 18 bits. But HW uses 19 bits for the read and
> > + * write pointers. This technique avoids wasting a slot in the buffer.
>
> OK, but here I don't see overflow bits being used in this code to
> distinguish between buffer empty and full.
There are checks in the code for buffer empty condition
(read ptr == write ptr). As long as there is data to read, the driver
reads, and no special handling is needed when the buffer is full.
HW needs to do special handling when the buffer is full.
>
> > + * Read and write offsets are calculated from the pointers in order to
> > + * check if the write pointer has wrapped around the array.
> > + */
> > + xecore_buf = &stream->xecore_buf[xecore];
> > + mutex_lock(&xecore_buf->lock);
> > + xecore_start_vaddr = xecore_buf->vaddr;
> > + read_ptr = xecore_buf->read;
> > + write_ptr = xecore_buf->write;
> > + buf_size = stream->per_xecore_buf_size;
> > + read_offset = read_ptr & (buf_size - 1);
> > + write_offset = write_ptr & (buf_size - 1);
> > +
> > + if (write_ptr == read_ptr) {
> > + mutex_unlock(&xecore_buf->lock);
> > + return 0;
> > + }
>
> No need I think again, remove this if statement and let the code fall
> through. Let's avoid these if statements where possible.
The code below to calculate the size of the data in the buffer works
only for non empty buffers. So, this check is needed.
>
> > +
> > + trace_xe_eu_stall_data_read(group, instance, read_ptr, write_ptr,
> > + read_offset, write_offset, *total_size);
> > + /* 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)
>
> Once again, why not >= ?
For == case, the else part gets executed which is correct for non-empty
buffers.
>
> > + size = write_offset - read_offset;
> > + else
> > + size = buf_size - read_offset + write_offset;
>
> Replace the above code section with:
>
> size = buf_data_size(buf_size, read_ptr, write_ptr);
Yes, will do.
>
> > +
> > + /* Read only the data that the user space buffer can accommodate */
> > + if ((*total_size + size) > count) {
> > + record_size = xe_eu_stall_data_record_size(xe);
>
> Maybe it makes sense to add the record size to the stream, so we don't need
> to this platform check each time. We can just initialize the record size at
> init time.
Sure.
>
> > + size = count - *total_size;
> > + size = (size / record_size) * record_size;
> > + }
>
> Let's replace this code section by something like:
>
> xe_assert(xe, count >= *total_size);
I don't think an assert is appropriate here.
> size = min_t(size_t, count - *total_size, size);
> size = (size / record_size) * record_size;
> > +
> > + if (size == 0) {
> > + mutex_unlock(&xecore_buf->lock);
> > + return 0;
> > + }
>
> Remove, again let the code fall through the if-else ladder
> below. copy_to_user should handle 0 byte copies (i.e. ignore them). But
> check that. Wouldn't this work?
>
> > +
> > + read_vaddr = xecore_start_vaddr + read_offset;
> > +
> > + if (write_offset > read_offset) {
>
> >= , again, with the same overflow bit issue potentially.
No. This check is to find out if the write pointer has wrapped around
the buffer which is correct.
>
> > + if (copy_to_user((buf + *total_size), read_vaddr, size)) {
> > + mutex_unlock(&xecore_buf->lock);
> > + return -EFAULT;
> > + }
> > + } else {
> > + if (size >= (buf_size - read_offset))
> > + copy_size = buf_size - read_offset;
> > + else
> > + copy_size = size;
> > + if (copy_to_user((buf + *total_size), read_vaddr, copy_size)) {
> > + mutex_unlock(&xecore_buf->lock);
> > + return -EFAULT;
> > + }
> > + if (copy_to_user((buf + *total_size + copy_size),
> > + xecore_start_vaddr, size - copy_size)) {
> > + mutex_unlock(&xecore_buf->lock);
> > + return -EFAULT;
>
> These copies look correct to me. Though not sure if we should replace all
> these error return with a 'goto exit' so that we have all returns from the
> end of the function. Do mutex_unlock etc. in exit. But anyway, probably ok
> as is too.
>
> > + }
> > + }
> > +
> > + *total_size += size;
> > + read_ptr += size;
> > +
> > + /* Read pointer can overflow into one additional bit */
> > + read_ptr &= ((buf_size << 1) - 1);
>
> Outer brackets not needed unless compiler complains.
Will remove them.
>
> > + read_ptr_reg = REG_FIELD_PREP(XEHPC_EUSTALL_REPORT1_READ_PTR_MASK, (read_ptr >> 6));
> > + read_ptr_reg &= XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
>
> Why? Doesn't REG_FIELD_PREP already do this?
Yes, will remove.
>
> > + read_ptr_reg = _MASKED_FIELD(XEHPC_EUSTALL_REPORT1_READ_PTR_MASK, read_ptr_reg);
> > + xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT1, read_ptr_reg, group, instance);
> > + if (test_bit(xecore, stream->data_drop.mask)) {
> > + clear_dropped_eviction_line_bit(gt, group, instance);
> > + clear_bit(xecore, stream->data_drop.mask);
> > + }
>
> Ideally, this dropped data stuff should be in the -EIO patch.
>
> > + xecore_buf->read = read_ptr;
> > + mutex_unlock(&xecore_buf->lock);
> > + trace_xe_eu_stall_data_read(group, instance, read_ptr, write_ptr,
> > + read_offset, write_offset, *total_size);
>
> Why another trace?
Now that the read pointer has changed, I wanted to capture the new read
pointer in the trace.
>
> > + return 0;
> > +}
> > +
> > +/**
> > + * xe_eu_stall_stream_read_locked - copy EU stall counters data from the
> > + * per xecore 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_stream_read_locked(struct xe_eu_stall_data_stream *stream,
> > + struct file *file, char __user *buf,
> > + size_t count, loff_t *ppos)
>
> Don't need ppos in this static function.
Okay.
>
> > +{
> > + struct xe_gt *gt = stream->gt;
> > + size_t total_size = 0;
> > + u16 group, instance;
> > + unsigned int xecore;
> > + int ret = 0;
> > +
> > + if (count == 0)
> > + return -EINVAL;
>
> This should not be needed (and if it is needed it should be in
> xe_eu_stall_stream_read). It should get handled automatically in
> xe_eu_stall_data_buf_read with suggested changes. If not let's see.
Will check.
>
> > +
> > + for_each_dss_steering(xecore, gt, group, instance) {
> > + ret = xe_eu_stall_data_buf_read(stream, buf, count, &total_size,
> > + gt, group, instance, xecore);
> > + if (ret || count == total_size)
> > + goto exit;
>
> break
Will change.
>
> > + }
> > +exit:
> > + if (total_size)
> > + return total_size;
> > + else if (ret)
> > + return ret;
> > + else
> > + return -EAGAIN;
>
> return total_size ?: (ret ?: -EAGAIN);
>
> See xe_oa_read.
Will do.
>
> > +}
> > +
> > /**
> > * xe_eu_stall_stream_read - handles userspace read() of a EU stall data stream fd.
> > *
> > @@ -160,11 +476,265 @@ static int xe_eu_stall_user_extensions(struct xe_device *xe, u64 extension,
> > static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > size_t count, loff_t *ppos)
> > {
> > - ssize_t ret = 0;
> > + struct xe_eu_stall_data_stream *stream = file->private_data;
> > + struct xe_gt *gt = stream->gt;
> > + ssize_t ret;
> > +
> > + if (!stream->enabled) {
> > + xe_gt_dbg(gt, "EU stall data stream not enabled to read\n");
> > + return -EINVAL;
> > + }
> > +
> > + if (!(file->f_flags & O_NONBLOCK)) {
> > + do {
> > + if (!stream->pollin) {
>
> This is not needed. wait_event_interruptible automatically checks if cond
> is true before waiting, it will not wait if cond is true. See
> xe_oa_wait_unlocked.
Okay, will check and remove.
>
> > + ret = wait_event_interruptible(stream->poll_wq, stream->pollin);
> > + if (ret)
> > + return -EINTR;
> > + }
> > +
> > + mutex_lock(>->eu_stall->lock);
> > + ret = xe_eu_stall_stream_read_locked(stream, file, buf, count, ppos);
> > + mutex_unlock(>->eu_stall->lock);
> > + } while (ret == -EAGAIN);
> > + } else {
> > + mutex_lock(>->eu_stall->lock);
> > + ret = xe_eu_stall_stream_read_locked(stream, file, buf, count, ppos);
> > + mutex_unlock(>->eu_stall->lock);
> > + }
> > +
> > + stream->pollin = false;
>
> Generally speaking this doesn't work if user buffer is too small, in that
> case we don't want user thread to block when it calls in the next time to
> read. See bcad588dea538 . But since this is a corner case, I am ok fixing
> this after the initial merge.
Will check the commit bcad588dea538.
>
> >
> > return ret;
> > }
> >
>
> Thanks.
> --
> Ashutosh
Thanks for the review
Harish.
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 4 3/7] drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC
2025-01-30 18:46 ` Harish Chegondi
@ 2025-01-31 3:23 ` Dixit, Ashutosh
0 siblings, 0 replies; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-31 3:23 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
On Thu, 30 Jan 2025 10:46:37 -0800, Harish Chegondi wrote:
>
> On Tue, Jan 28, 2025 at 08:12:25PM -0800, Dixit, Ashutosh wrote:
> > On Wed, 15 Jan 2025 12:02:09 -0800, Harish Chegondi wrote:
> > >
> >
> Hi Ashutosh,
> > Hi Harish,
> >
> > Reveiw #4 on the same patch. Final review on this version of the patch. I
> > have suggested some low level code changes which should work but would need
> > to be verified (the code, as well as tested).
> >
> > Also, I don't understand really what's going on in these circ buffer
> > functions with the overflow bits. So I need some explanation as to what the
> > code is doing and whether what's going on here is really correct.
> >
> > So basically what I don't understand here is whether:
> >
> > if (write_offset > read_offset)
> >
> > should really be
> >
> > if (write_offset >= read_offset)
> >
> > Basically what happens when 'write_offset == read_offset'. We should be
> > using the overflow bits "somehow" according to me in this case but we don't
> > seem to be doing that.
> >
> > This is repeated several times in my comments below. But if you have an
> > explanation just explain it here, don't have to repeat it each time.
>
> 1. The code you are referring to calculates the size of data in a
> non-empty circular buffer, i.e. when buffer read ptr != write ptr.
> It is an unnecessary function call overhead to call buf_data_size()
> when the buffer is empty (read ptr == write ptr).
See below about this.
> 2. read/write pointers contain the overflow bit, read/write offsets do
> not contain the overflow bit. They are just offsets into the buffer.
>
> 3. When the buffer is full, write offset == read offset, but the
> overflow bits are different. The if (write_offset > read_offset) has
> an else size = buf_size - read_offset + write_offset; which gets
> executed when buffer is full (write offset == read offset).
OK, thanks for the explanation. I understand what's happening now and how
overflow bits work. So I can review the code better.
>
> 4. I can add in the documentation of buf_data_size() that it
> should be called for non-empty buffers only.
As I said earlier, we need less documentation and more self-explanatory
code :/
>
> 5. I have verified with several examples that there is no bug in the
> code you are referring to.
Ok, great!
>
> >
> > > @@ -144,6 +230,236 @@ static int xe_eu_stall_user_extensions(struct xe_device *xe, u64 extension,
> > > return 0;
> > > }
> > >
> > > +/**
> > > + * buf_data_size - Calculate the number of bytes in a circular buffer
> > > + * given the read and write pointers and the size of
> > > + * the buffer.
> > > + *
> > > + * @buf_size: Size of the circular buffer
> > > + * @read_ptr: Read pointer with an additional overflow bit
> > > + * @write_ptr: Write pointer with an additional overflow bit
> > > + *
> > > + * Since the read and write pointers have an additional overflow bit,
> > > + * this function calculates the offsets from the pointers and use the
> > > + * offsets to calculate the data size in the buffer.
> > > + *
> > > + * 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)
> >
> > >=
> No. The else part gets executed for == case.
Agreed.
> >
> > See xe_oa_circ_diff. Surprised to see such a basic "bug" (though looks like
> > it is offset by other code so maybe not a real bug). Am I missing something
> > (e.g. because of the overflow bits)?
> This function will be called only for non-empty buffers. I don't think
> there is a bug in this code.
> >
> > > + size = write_offset - read_offset;
> > > + else
> > > + size = buf_size - read_offset + write_offset;
> > > +
> > > + return size;
> >
> > Though I think we should be using the overflow bits here to determine if
> > the buffer is empty or full. Why are we not doing that?
> This function would not be called when the buffer is empty
> (read ptr === write ptr). It is an unnecessary function call overhead to
> call this for empty buffers.
First, how much is a function call overhead? If it is a little bit, it is
still worth it if it makes the code easier to understand and maintain.
Second, how do you know if there's even a function call? The compiler might
have optimized the function call out. In fact, given that buf_data_size()
is called only from one place, I don't see how the compiler won't optimize
this function out.
Therefore this code needs to be added at the top of buf_data_size():
if (write_ptr == read_ptr)
return 0;
Since it readily answers the question of what happens when the pointers are
equal and when the offsets are equal.
> >
> > Basically what happens when 'write_offset == read_offset'? Shouldn't we
> > look at overflow bits to figure out if buffer is empty or full?
> The else part gets executed correctly when the buffer is full. I will
> add a note in the function documentation that this function will be
> called only for non-empty buffers.
As mentioned above, no documentation, add the code above.
> >
> > > +}
> > > +
> > > +/**
> > > + * eu_stall_data_buf_check - check for EU stall data in the 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_data_buf_check(struct xe_eu_stall_data_stream *stream)
> > > +{
> > > + u32 read_ptr, write_ptr_reg, write_ptr, total_data = 0;
> > > + u32 buf_size = stream->per_xecore_buf_size;
> > > + struct xe_gt *gt = stream->gt;
> > > + struct per_xecore_buf *xecore_buf;
> > > + bool min_data_present;
> > > + u16 group, instance;
> > > + unsigned int xecore;
> > > +
> > > + min_data_present = false;
> >
> > Init this above where it is declared.
> Will change.
> >
> > > + for_each_dss_steering(xecore, gt, group, instance) {
> > > + xecore_buf = &stream->xecore_buf[xecore];
> > > + mutex_lock(&xecore_buf->lock);
> > > + read_ptr = xecore_buf->read;
> > > + write_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT,
> > > + group, instance);
> > > + write_ptr = REG_FIELD_GET(XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK, write_ptr_reg);
> > > + write_ptr <<= 6;
> > > + write_ptr &= ((buf_size << 1) - 1);
> > > + if (write_ptr != read_ptr && !min_data_present) {
> >
> > Check for the first condition is not needed after the suggested change to
> > buf_data_size above.
> It is an unnecessary function call overhead to call buf_data_size() when
> buffer is empty (write_ptr == read_ptr)
Discussed above.
> >
> > So this is:
> > if (!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->wait_num_reports)
> > > + min_data_present = true;
> > > + }
> > > + if (write_ptr_reg & XEHPC_EUSTALL_REPORT_OVERFLOW_DROP)
> > > + set_bit(xecore, stream->data_drop.mask);
> > > + xecore_buf->write = write_ptr;
> > > + mutex_unlock(&xecore_buf->lock);
> > > + }
> > > + return min_data_present;
> > > +}
> > > +
> > > +static void
> > > +clear_dropped_eviction_line_bit(struct xe_gt *gt, u16 group, u16 instance)
> > > +{
> > > + u32 write_ptr_reg;
> > > +
> > > + /* On PVC, the overflow bit has to be cleared by writing 1 to it. */
> > > + write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> > > +
> > > + xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT, write_ptr_reg, group, instance);
> > > +}
> >
> > Ideally all this handling of dropped data should be in the -EIO patch. So
> > that should become the dropped packet handling patch. But anyway, let's
> > focus on the code, not the patches.
> >
> > > +
> > > +static int
> > > +xe_eu_stall_data_buf_read(struct xe_eu_stall_data_stream *stream,
> > > + char __user *buf, size_t count,
> > > + size_t *total_size, struct xe_gt *gt,
> > > + u16 group, u16 instance, unsigned int xecore)
> > > +{
> > > + u32 read_ptr_reg, read_ptr, write_ptr;
> > > + u8 *xecore_start_vaddr, *read_vaddr;
> > > + struct xe_device *xe = gt_to_xe(gt);
> > > + struct per_xecore_buf *xecore_buf;
> > > + size_t size, copy_size, buf_size;
> > > + u32 read_offset, write_offset;
> > > + unsigned long record_size;
> > > +
> > > + /* Hardware increments the read and write pointers such that they can
> > > + * overflow into one additional bit. For example, a 256KB size buffer
> > > + * offset pointer needs 18 bits. But HW uses 19 bits for the read and
> > > + * write pointers. This technique avoids wasting a slot in the buffer.
> >
> > OK, but here I don't see overflow bits being used in this code to
> > distinguish between buffer empty and full.
> There are checks in the code for buffer empty condition
> (read ptr == write ptr). As long as there is data to read, the driver
> reads, and no special handling is needed when the buffer is full.
> HW needs to do special handling when the buffer is full.
OK.
> >
> > > + * Read and write offsets are calculated from the pointers in order to
> > > + * check if the write pointer has wrapped around the array.
> > > + */
> > > + xecore_buf = &stream->xecore_buf[xecore];
> > > + mutex_lock(&xecore_buf->lock);
> > > + xecore_start_vaddr = xecore_buf->vaddr;
> > > + read_ptr = xecore_buf->read;
> > > + write_ptr = xecore_buf->write;
> > > + buf_size = stream->per_xecore_buf_size;
> > > + read_offset = read_ptr & (buf_size - 1);
> > > + write_offset = write_ptr & (buf_size - 1);
> > > +
> > > + if (write_ptr == read_ptr) {
> > > + mutex_unlock(&xecore_buf->lock);
> > > + return 0;
> > > + }
> >
> > No need I think again, remove this if statement and let the code fall
> > through. Let's avoid these if statements where possible.
> The code below to calculate the size of the data in the buffer works
> only for non empty buffers. So, this check is needed.
Not needed if we use the modified buf_data_size() (as mentioned above and
previously below).
> >
> > > +
> > > + trace_xe_eu_stall_data_read(group, instance, read_ptr, write_ptr,
> > > + read_offset, write_offset, *total_size);
> > > + /* 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)
> >
> > Once again, why not >= ?
> For == case, the else part gets executed which is correct for non-empty
> buffers.
OK.
> >
> > > + size = write_offset - read_offset;
> > > + else
> > > + size = buf_size - read_offset + write_offset;
> >
> > Replace the above code section with:
> >
> > size = buf_data_size(buf_size, read_ptr, write_ptr);
> Yes, will do.
> >
> > > +
> > > + /* Read only the data that the user space buffer can accommodate */
> > > + if ((*total_size + size) > count) {
> > > + record_size = xe_eu_stall_data_record_size(xe);
> >
> > Maybe it makes sense to add the record size to the stream, so we don't need
> > to this platform check each time. We can just initialize the record size at
> > init time.
> Sure.
> >
> > > + size = count - *total_size;
> > > + size = (size / record_size) * record_size;
> > > + }
> >
> > Let's replace this code section by something like:
> >
> > xe_assert(xe, count >= *total_size);
> I don't think an assert is appropriate here.
Think about it, it's just a safety check. I think it may be worth it to
have the assert.
> > size = min_t(size_t, count - *total_size, size);
> > size = (size / record_size) * record_size;
I think this is better and more self explanatory than the code you have.
> > > +
> > > + if (size == 0) {
> > > + mutex_unlock(&xecore_buf->lock);
> > > + return 0;
> > > + }
> >
> > Remove, again let the code fall through the if-else ladder
> > below. copy_to_user should handle 0 byte copies (i.e. ignore them). But
> > check that. Wouldn't this work?
We may need this if, I will check again in the next version.
> >
> > > +
> > > + read_vaddr = xecore_start_vaddr + read_offset;
> > > +
> > > + if (write_offset > read_offset) {
> >
> > >= , again, with the same overflow bit issue potentially.
> No. This check is to find out if the write pointer has wrapped around
> the buffer which is correct.
OK, agreed.
> >
> > > + if (copy_to_user((buf + *total_size), read_vaddr, size)) {
> > > + mutex_unlock(&xecore_buf->lock);
> > > + return -EFAULT;
> > > + }
> > > + } else {
> > > + if (size >= (buf_size - read_offset))
> > > + copy_size = buf_size - read_offset;
> > > + else
> > > + copy_size = size;
> > > + if (copy_to_user((buf + *total_size), read_vaddr, copy_size)) {
> > > + mutex_unlock(&xecore_buf->lock);
> > > + return -EFAULT;
> > > + }
> > > + if (copy_to_user((buf + *total_size + copy_size),
> > > + xecore_start_vaddr, size - copy_size)) {
> > > + mutex_unlock(&xecore_buf->lock);
> > > + return -EFAULT;
> >
> > These copies look correct to me. Though not sure if we should replace all
> > these error return with a 'goto exit' so that we have all returns from the
> > end of the function. Do mutex_unlock etc. in exit. But anyway, probably ok
> > as is too.
> >
> > > + }
> > > + }
> > > +
> > > + *total_size += size;
> > > + read_ptr += size;
> > > +
> > > + /* Read pointer can overflow into one additional bit */
> > > + read_ptr &= ((buf_size << 1) - 1);
> >
> > Outer brackets not needed unless compiler complains.
> Will remove them.
> >
> > > + read_ptr_reg = REG_FIELD_PREP(XEHPC_EUSTALL_REPORT1_READ_PTR_MASK, (read_ptr >> 6));
> > > + read_ptr_reg &= XEHPC_EUSTALL_REPORT1_READ_PTR_MASK;
> >
> > Why? Doesn't REG_FIELD_PREP already do this?
> Yes, will remove.
> >
> > > + read_ptr_reg = _MASKED_FIELD(XEHPC_EUSTALL_REPORT1_READ_PTR_MASK, read_ptr_reg);
> > > + xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT1, read_ptr_reg, group, instance);
> > > + if (test_bit(xecore, stream->data_drop.mask)) {
> > > + clear_dropped_eviction_line_bit(gt, group, instance);
> > > + clear_bit(xecore, stream->data_drop.mask);
> > > + }
> >
> > Ideally, this dropped data stuff should be in the -EIO patch.
> >
> > > + xecore_buf->read = read_ptr;
> > > + mutex_unlock(&xecore_buf->lock);
> > > + trace_xe_eu_stall_data_read(group, instance, read_ptr, write_ptr,
> > > + read_offset, write_offset, *total_size);
> >
> > Why another trace?
> Now that the read pointer has changed, I wanted to capture the new read
> pointer in the trace.
OK, if you think it's useful in tracing the flow and it's not duplicating
the output in the trace.
Thanks.
--
Ashutosh
> >
> > > + return 0;
> > > +}
> > > +
> > > +/**
> > > + * xe_eu_stall_stream_read_locked - copy EU stall counters data from the
> > > + * per xecore 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_stream_read_locked(struct xe_eu_stall_data_stream *stream,
> > > + struct file *file, char __user *buf,
> > > + size_t count, loff_t *ppos)
> >
> > Don't need ppos in this static function.
> Okay.
> >
> > > +{
> > > + struct xe_gt *gt = stream->gt;
> > > + size_t total_size = 0;
> > > + u16 group, instance;
> > > + unsigned int xecore;
> > > + int ret = 0;
> > > +
> > > + if (count == 0)
> > > + return -EINVAL;
> >
> > This should not be needed (and if it is needed it should be in
> > xe_eu_stall_stream_read). It should get handled automatically in
> > xe_eu_stall_data_buf_read with suggested changes. If not let's see.
> Will check.
> >
> > > +
> > > + for_each_dss_steering(xecore, gt, group, instance) {
> > > + ret = xe_eu_stall_data_buf_read(stream, buf, count, &total_size,
> > > + gt, group, instance, xecore);
> > > + if (ret || count == total_size)
> > > + goto exit;
> >
> > break
> Will change.
> >
> > > + }
> > > +exit:
> > > + if (total_size)
> > > + return total_size;
> > > + else if (ret)
> > > + return ret;
> > > + else
> > > + return -EAGAIN;
> >
> > return total_size ?: (ret ?: -EAGAIN);
> >
> > See xe_oa_read.
> Will do.
> >
> > > +}
> > > +
> > > /**
> > > * xe_eu_stall_stream_read - handles userspace read() of a EU stall data stream fd.
> > > *
> > > @@ -160,11 +476,265 @@ static int xe_eu_stall_user_extensions(struct xe_device *xe, u64 extension,
> > > static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > > size_t count, loff_t *ppos)
> > > {
> > > - ssize_t ret = 0;
> > > + struct xe_eu_stall_data_stream *stream = file->private_data;
> > > + struct xe_gt *gt = stream->gt;
> > > + ssize_t ret;
> > > +
> > > + if (!stream->enabled) {
> > > + xe_gt_dbg(gt, "EU stall data stream not enabled to read\n");
> > > + return -EINVAL;
> > > + }
> > > +
> > > + if (!(file->f_flags & O_NONBLOCK)) {
> > > + do {
> > > + if (!stream->pollin) {
> >
> > This is not needed. wait_event_interruptible automatically checks if cond
> > is true before waiting, it will not wait if cond is true. See
> > xe_oa_wait_unlocked.
> Okay, will check and remove.
> >
> > > + ret = wait_event_interruptible(stream->poll_wq, stream->pollin);
> > > + if (ret)
> > > + return -EINTR;
> > > + }
> > > +
> > > + mutex_lock(>->eu_stall->lock);
> > > + ret = xe_eu_stall_stream_read_locked(stream, file, buf, count, ppos);
> > > + mutex_unlock(>->eu_stall->lock);
> > > + } while (ret == -EAGAIN);
> > > + } else {
> > > + mutex_lock(>->eu_stall->lock);
> > > + ret = xe_eu_stall_stream_read_locked(stream, file, buf, count, ppos);
> > > + mutex_unlock(>->eu_stall->lock);
> > > + }
> > > +
> > > + stream->pollin = false;
> >
> > Generally speaking this doesn't work if user buffer is too small, in that
> > case we don't want user thread to block when it calls in the next time to
> > read. See bcad588dea538 . But since this is a corner case, I am ok fixing
> > this after the initial merge.
> Will check the commit bcad588dea538.
> >
> > >
> > > return ret;
> > > }
> > >
> >
> > Thanks.
> > --
> > Ashutosh
>
> Thanks for the review
> Harish.
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 4/7] drm/xe/eustall: Return -EIO error from read() if HW drops data
2025-01-30 4:45 ` Dixit, Ashutosh
2025-01-30 17:05 ` Dixit, Ashutosh
@ 2025-01-31 19:30 ` Harish Chegondi
2025-01-31 20:19 ` Dixit, Ashutosh
1 sibling, 1 reply; 49+ messages in thread
From: Harish Chegondi @ 2025-01-31 19:30 UTC (permalink / raw)
To: Dixit, Ashutosh; +Cc: intel-xe
On Wed, Jan 29, 2025 at 08:45:59PM -0800, Dixit, Ashutosh wrote:
> On Wed, 15 Jan 2025 12:02:10 -0800, Harish Chegondi wrote:
> >
> > 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,
> > and if the hardware wants to write more data, it simply drops
> > data due to unavailable buffer space. In that case, hardware
> > sets a bit in a register. If the driver detects data drop,
> > the driver read() returns -EIO error to let the user space
> > know that HW has dropped data. The -EIO error is returned
> > even if there is EU stall data in the buffer. A subsequent
> > read by the user space returns the remaining EU stall data.
>
> As I mentioned earlier, entire dropped packet handling should be in this
> patch, so we can see the entire logic around this. So data_drop struct
> should be defined in this patch.
I worded the commit message that this commit is about read() returning
-EIO when data is dropped. So, I didn't put all the data drop code in
this patch. Sure, I can reword the commit message and move the code
into this patch.
>
> >
> > Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> > ---
> > drivers/gpu/drm/xe/xe_eu_stall.c | 12 ++++++++++++
> > drivers/gpu/drm/xe/xe_eu_stall.h | 1 +
> > 2 files changed, 13 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> > index c388d733b857..437782f8433c 100644
> > --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> > +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> > @@ -472,6 +472,7 @@ xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *stream,
> > * before calling read().
> > *
> > * Returns: The number of bytes copied or a negative error code on failure.
> > + * -EIO if HW drops any EU stall data when the buffer is full.
> > */
> > static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > size_t count, loff_t *ppos)
> > @@ -485,6 +486,16 @@ static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > return -EINVAL;
> > }
> >
> > + if (bitmap_weight(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS)) {
>
> Since data_drop.mask is being touched elsewhere under xecore_buf->lock,
> here also it should be accessed under the same lock. So this returning -EIO
> should probably be moved into xe_eu_stall_stream_read_locked?
data_drop.mask is being accessed via set_bit(), clear_bit(), test_bit()
and bitmap_weight(). set_bit() and clear_bit() are atomic operations,
but test_bit() and bitmap_weight() are not atomic. So, not all the code
accessing the mask need to be under lock. The code that is under lock is
under the buffer lock, whereas xe_eu_stall_stream_read_locked() is under
gt->eu_stall->lock. So, moving this code into xe_eu_stall_stream_read_locked
would not make any difference. I think this code can exist outside of a
lock. If one read() just misses a data drop, the subsequent read would
report the data drop.
>
> > + if (!stream->data_drop.reported_to_user) {
> > + stream->data_drop.reported_to_user = true;
> > + xe_gt_dbg(gt, "EU stall data dropped in XeCores: %*pb\n",
> > + XE_MAX_DSS_FUSE_BITS, stream->data_drop.mask);
> > + return -EIO;
> > + }
> > + stream->data_drop.reported_to_user = false;
>
> I don't think this logic is correct. We should set this to false only after
> we have cleared all set bits (e.g. only after bitmap_weight) otherwise we
> might keep returning -EIO multiple times?
If the subsequent read() reads all the data from all the subslices, it
would clear all the bits. But if the user buffer is small and it doesn't
read all the data from all the subslices, some bits can continue to be
set and can cause multiple alternate -EIO returns. Ideally, the user
buffer should be big enough to accomodate all the data from the kernel
buffer.
>
> If HW continues to drop data and keep setting the line, while we are
> resetting the bit, it is possible bitmap_weight might never become 0. I
> think that is ok, we have returned -EIO at least once to indicate to
> userspace that it is not reading data fast enough and HW is dropping data.
>
> Or we may return -EIO multiple times as is happening here, where
> reported_to_user is set to 0 before all bits might have been cleared. So
> what is happening here might be ok too.
>
> To see this clearly and evaluate it is why I am saying move all of this
> data drop handling and -EIO return into this one patch. So we can decide
> which approach to take: return -EIO just once or return multiple times.
>
> We can also maybe defer this patch and merge the other stuff first if it's
> a separate patch.
>
> So maybe this is ok, maybe not, anyway something to think about.
>
> > + }
> > +
> > if (!(file->f_flags & O_NONBLOCK)) {
> > do {
> > if (!stream->pollin) {
> > @@ -680,6 +691,7 @@ static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
> > if (!stream->xecore_buf)
> > return -ENOMEM;
> >
> > + stream->data_drop.reported_to_user = false;
> > bitmap_zero(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS);
>
> Stream is kzalloc'd, why do you need to init these?
>
> >
> > xe_pm_runtime_get(gt_to_xe(gt));
> > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
> > index f97c8bf8e852..8bc44e9e98af 100644
> > --- a/drivers/gpu/drm/xe/xe_eu_stall.h
> > +++ b/drivers/gpu/drm/xe/xe_eu_stall.h
> > @@ -31,6 +31,7 @@ struct xe_eu_stall_data_stream {
> > struct xe_bo *bo;
> > struct per_xecore_buf *xecore_buf;
> > struct {
> > + bool reported_to_user;
> > xe_dss_mask_t mask;
> > } data_drop;
> > struct hrtimer poll_check_timer;
> > --
> > 2.47.1
> >
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 4/7] drm/xe/eustall: Return -EIO error from read() if HW drops data
2025-01-31 19:30 ` Harish Chegondi
@ 2025-01-31 20:19 ` Dixit, Ashutosh
2025-01-31 22:59 ` Harish Chegondi
0 siblings, 1 reply; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-01-31 20:19 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
On Fri, 31 Jan 2025 11:30:03 -0800, Harish Chegondi wrote:
>
> On Wed, Jan 29, 2025 at 08:45:59PM -0800, Dixit, Ashutosh wrote:
> > On Wed, 15 Jan 2025 12:02:10 -0800, Harish Chegondi wrote:
> > >
> > > 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,
> > > and if the hardware wants to write more data, it simply drops
> > > data due to unavailable buffer space. In that case, hardware
> > > sets a bit in a register. If the driver detects data drop,
> > > the driver read() returns -EIO error to let the user space
> > > know that HW has dropped data. The -EIO error is returned
> > > even if there is EU stall data in the buffer. A subsequent
> > > read by the user space returns the remaining EU stall data.
> >
> > As I mentioned earlier, entire dropped packet handling should be in this
> > patch, so we can see the entire logic around this. So data_drop struct
> > should be defined in this patch.
> I worded the commit message that this commit is about read() returning
> -EIO when data is dropped. So, I didn't put all the data drop code in
> this patch. Sure, I can reword the commit message and move the code
> into this patch.
Yeah, the "unit of functionality" is not returning -EIO, it is "dropped
data handling", so that whole unit should be in a separate patch. This one,
I don't want to compromise on.
> >
> > >
> > > Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> > > ---
> > > drivers/gpu/drm/xe/xe_eu_stall.c | 12 ++++++++++++
> > > drivers/gpu/drm/xe/xe_eu_stall.h | 1 +
> > > 2 files changed, 13 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > index c388d733b857..437782f8433c 100644
> > > --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > @@ -472,6 +472,7 @@ xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *stream,
> > > * before calling read().
> > > *
> > > * Returns: The number of bytes copied or a negative error code on failure.
> > > + * -EIO if HW drops any EU stall data when the buffer is full.
> > > */
> > > static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > > size_t count, loff_t *ppos)
> > > @@ -485,6 +486,16 @@ static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > > return -EINVAL;
> > > }
> > >
> > > + if (bitmap_weight(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS)) {
> >
> > Since data_drop.mask is being touched elsewhere under xecore_buf->lock,
> > here also it should be accessed under the same lock. So this returning -EIO
> > should probably be moved into xe_eu_stall_stream_read_locked?
> data_drop.mask is being accessed via set_bit(), clear_bit(), test_bit()
> and bitmap_weight(). set_bit() and clear_bit() are atomic operations,
> but test_bit() and bitmap_weight() are not atomic. So, not all the code
> accessing the mask need to be under lock. The code that is under lock is
> under the buffer lock, whereas xe_eu_stall_stream_read_locked() is under
> gt->eu_stall->lock. So, moving this code into xe_eu_stall_stream_read_locked
> would not make any difference. I think this code can exist outside of a
> lock. If one read() just misses a data drop, the subsequent read would
> report the data drop.
OK, let me see what happens with my suggestion below (starting with "I had
also outlined another...") and then we can see if the locking will be ok or
not.
> >
> > > + if (!stream->data_drop.reported_to_user) {
> > > + stream->data_drop.reported_to_user = true;
> > > + xe_gt_dbg(gt, "EU stall data dropped in XeCores: %*pb\n",
> > > + XE_MAX_DSS_FUSE_BITS, stream->data_drop.mask);
> > > + return -EIO;
> > > + }
> > > + stream->data_drop.reported_to_user = false;
> >
> > I don't think this logic is correct. We should set this to false only after
> > we have cleared all set bits (e.g. only after bitmap_weight) otherwise we
> > might keep returning -EIO multiple times?
> If the subsequent read() reads all the data from all the subslices, it
> would clear all the bits. But if the user buffer is small and it doesn't
> read all the data from all the subslices, some bits can continue to be
> set and can cause multiple alternate -EIO returns. Ideally, the user
> buffer should be big enough to accomodate all the data from the kernel
> buffer.
Afaik we are not exposing a minimum user buffer size in the uapi, but we
could too.
I had also outlined another simple way of doing this in my follow up to
this email, which doesn't have such issues. What do you think of that?
> >
> > If HW continues to drop data and keep setting the line, while we are
> > resetting the bit, it is possible bitmap_weight might never become 0. I
> > think that is ok, we have returned -EIO at least once to indicate to
> > userspace that it is not reading data fast enough and HW is dropping data.
> >
> > Or we may return -EIO multiple times as is happening here, where
> > reported_to_user is set to 0 before all bits might have been cleared. So
> > what is happening here might be ok too.
> >
> > To see this clearly and evaluate it is why I am saying move all of this
> > data drop handling and -EIO return into this one patch. So we can decide
> > which approach to take: return -EIO just once or return multiple times.
> >
> > We can also maybe defer this patch and merge the other stuff first if it's
> > a separate patch.
> >
> > So maybe this is ok, maybe not, anyway something to think about.
> >
> > > + }
> > > +
> > > if (!(file->f_flags & O_NONBLOCK)) {
> > > do {
> > > if (!stream->pollin) {
> > > @@ -680,6 +691,7 @@ static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
> > > if (!stream->xecore_buf)
> > > return -ENOMEM;
> > >
> > > + stream->data_drop.reported_to_user = false;
> > > bitmap_zero(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS);
> >
> > Stream is kzalloc'd, why do you need to init these?
> >
> > >
> > > xe_pm_runtime_get(gt_to_xe(gt));
> > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
> > > index f97c8bf8e852..8bc44e9e98af 100644
> > > --- a/drivers/gpu/drm/xe/xe_eu_stall.h
> > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.h
> > > @@ -31,6 +31,7 @@ struct xe_eu_stall_data_stream {
> > > struct xe_bo *bo;
> > > struct per_xecore_buf *xecore_buf;
> > > struct {
> > > + bool reported_to_user;
> > > xe_dss_mask_t mask;
> > > } data_drop;
> > > struct hrtimer poll_check_timer;
> > > --
> > > 2.47.1
> > >
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 4/7] drm/xe/eustall: Return -EIO error from read() if HW drops data
2025-01-30 17:05 ` Dixit, Ashutosh
@ 2025-01-31 21:50 ` Harish Chegondi
0 siblings, 0 replies; 49+ messages in thread
From: Harish Chegondi @ 2025-01-31 21:50 UTC (permalink / raw)
To: Dixit, Ashutosh; +Cc: intel-xe
On Thu, Jan 30, 2025 at 09:05:10AM -0800, Dixit, Ashutosh wrote:
> On Wed, 29 Jan 2025 20:45:59 -0800, Dixit, Ashutosh wrote:
> >
> > On Wed, 15 Jan 2025 12:02:10 -0800, Harish Chegondi wrote:
> > >
> > > 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,
> > > and if the hardware wants to write more data, it simply drops
> > > data due to unavailable buffer space. In that case, hardware
> > > sets a bit in a register. If the driver detects data drop,
> > > the driver read() returns -EIO error to let the user space
> > > know that HW has dropped data. The -EIO error is returned
> > > even if there is EU stall data in the buffer. A subsequent
> > > read by the user space returns the remaining EU stall data.
> >
> > As I mentioned earlier, entire dropped packet handling should be in this
> > patch, so we can see the entire logic around this. So data_drop struct
> > should be defined in this patch.
> >
> > >
> > > Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> > > ---
> > > drivers/gpu/drm/xe/xe_eu_stall.c | 12 ++++++++++++
> > > drivers/gpu/drm/xe/xe_eu_stall.h | 1 +
> > > 2 files changed, 13 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > index c388d733b857..437782f8433c 100644
> > > --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > @@ -472,6 +472,7 @@ xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *stream,
> > > * before calling read().
> > > *
> > > * Returns: The number of bytes copied or a negative error code on failure.
> > > + * -EIO if HW drops any EU stall data when the buffer is full.
> > > */
> > > static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > > size_t count, loff_t *ppos)
> > > @@ -485,6 +486,16 @@ static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > > return -EINVAL;
> > > }
> > >
> > > + if (bitmap_weight(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS)) {
> >
> > Since data_drop.mask is being touched elsewhere under xecore_buf->lock,
> > here also it should be accessed under the same lock. So this returning -EIO
> > should probably be moved into xe_eu_stall_stream_read_locked?
> >
> > > + if (!stream->data_drop.reported_to_user) {
> > > + stream->data_drop.reported_to_user = true;
> > > + xe_gt_dbg(gt, "EU stall data dropped in XeCores: %*pb\n",
> > > + XE_MAX_DSS_FUSE_BITS, stream->data_drop.mask);
> > > + return -EIO;
> > > + }
> > > + stream->data_drop.reported_to_user = false;
> >
> > I don't think this logic is correct. We should set this to false only after
> > we have cleared all set bits (e.g. only after bitmap_weight) otherwise we
> > might keep returning -EIO multiple times?
> >
> > If HW continues to drop data and keep setting the line, while we are
> > resetting the bit, it is possible bitmap_weight might never become 0. I
> > think that is ok, we have returned -EIO at least once to indicate to
> > userspace that it is not reading data fast enough and HW is dropping data.
> >
> > Or we may return -EIO multiple times as is happening here, where
> > reported_to_user is set to 0 before all bits might have been cleared. So
> > what is happening here might be ok too.
> >
> > To see this clearly and evaluate it is why I am saying move all of this
> > data drop handling and -EIO return into this one patch. So we can decide
> > which approach to take: return -EIO just once or return multiple times.
> >
> > We can also maybe defer this patch and merge the other stuff first if it's
> > a separate patch.
> >
> > So maybe this is ok, maybe not, anyway something to think about.
>
> Because we don't want to complicate this, here's another simple idea:
>
> In eu_stall_data_buf_check(), when we see the drop bit set for a particular
> dss, move the read pointer (effectively discarding any data from that dss)
> and also clear_dropped_eviction_line_bit(), but the dss with dropped data
> is saved off in data_drop.mask. So basically we are clearing and saving the
> error condition. Discarding data from that dss might be ok, since HW has
> already dropped data.
I don't think driver dropping data is a good idea.
>
> Now in the next read_locked, if any data_drop.mask bit is set, return -EIO
> and clear data_drop.mask. This way we don't need
> data_drop.reported_to_user. So this way the entire situation is cleared and
> handled once we have returned -EIO.
>
> If more data gets dropped before the next read, same process repeats and
> -EIO will be returned again.
>
> >
> > > + }
> > > +
> > > if (!(file->f_flags & O_NONBLOCK)) {
> > > do {
> > > if (!stream->pollin) {
> > > @@ -680,6 +691,7 @@ static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
> > > if (!stream->xecore_buf)
> > > return -ENOMEM;
> > >
> > > + stream->data_drop.reported_to_user = false;
> > > bitmap_zero(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS);
> >
> > Stream is kzalloc'd, why do you need to init these?
> >
> > >
> > > xe_pm_runtime_get(gt_to_xe(gt));
> > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
> > > index f97c8bf8e852..8bc44e9e98af 100644
> > > --- a/drivers/gpu/drm/xe/xe_eu_stall.h
> > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.h
> > > @@ -31,6 +31,7 @@ struct xe_eu_stall_data_stream {
> > > struct xe_bo *bo;
> > > struct per_xecore_buf *xecore_buf;
> > > struct {
> > > + bool reported_to_user;
> > > xe_dss_mask_t mask;
> > > } data_drop;
> > > struct hrtimer poll_check_timer;
> > > --
> > > 2.47.1
> > >
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 4/7] drm/xe/eustall: Return -EIO error from read() if HW drops data
2025-01-31 20:19 ` Dixit, Ashutosh
@ 2025-01-31 22:59 ` Harish Chegondi
2025-02-01 0:13 ` Dixit, Ashutosh
0 siblings, 1 reply; 49+ messages in thread
From: Harish Chegondi @ 2025-01-31 22:59 UTC (permalink / raw)
To: Dixit, Ashutosh; +Cc: intel-xe
On Fri, Jan 31, 2025 at 12:19:46PM -0800, Dixit, Ashutosh wrote:
> On Fri, 31 Jan 2025 11:30:03 -0800, Harish Chegondi wrote:
> >
> > On Wed, Jan 29, 2025 at 08:45:59PM -0800, Dixit, Ashutosh wrote:
> > > On Wed, 15 Jan 2025 12:02:10 -0800, Harish Chegondi wrote:
> > > >
> > > > 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,
> > > > and if the hardware wants to write more data, it simply drops
> > > > data due to unavailable buffer space. In that case, hardware
> > > > sets a bit in a register. If the driver detects data drop,
> > > > the driver read() returns -EIO error to let the user space
> > > > know that HW has dropped data. The -EIO error is returned
> > > > even if there is EU stall data in the buffer. A subsequent
> > > > read by the user space returns the remaining EU stall data.
> > >
> > > As I mentioned earlier, entire dropped packet handling should be in this
> > > patch, so we can see the entire logic around this. So data_drop struct
> > > should be defined in this patch.
> > I worded the commit message that this commit is about read() returning
> > -EIO when data is dropped. So, I didn't put all the data drop code in
> > this patch. Sure, I can reword the commit message and move the code
> > into this patch.
>
> Yeah, the "unit of functionality" is not returning -EIO, it is "dropped
> data handling", so that whole unit should be in a separate patch. This one,
> I don't want to compromise on.
> > >
> > > >
> > > > Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> > > > ---
> > > > drivers/gpu/drm/xe/xe_eu_stall.c | 12 ++++++++++++
> > > > drivers/gpu/drm/xe/xe_eu_stall.h | 1 +
> > > > 2 files changed, 13 insertions(+)
> > > >
> > > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > index c388d733b857..437782f8433c 100644
> > > > --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > @@ -472,6 +472,7 @@ xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *stream,
> > > > * before calling read().
> > > > *
> > > > * Returns: The number of bytes copied or a negative error code on failure.
> > > > + * -EIO if HW drops any EU stall data when the buffer is full.
> > > > */
> > > > static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > > > size_t count, loff_t *ppos)
> > > > @@ -485,6 +486,16 @@ static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > > > return -EINVAL;
> > > > }
> > > >
> > > > + if (bitmap_weight(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS)) {
> > >
> > > Since data_drop.mask is being touched elsewhere under xecore_buf->lock,
> > > here also it should be accessed under the same lock. So this returning -EIO
> > > should probably be moved into xe_eu_stall_stream_read_locked?
> > data_drop.mask is being accessed via set_bit(), clear_bit(), test_bit()
> > and bitmap_weight(). set_bit() and clear_bit() are atomic operations,
> > but test_bit() and bitmap_weight() are not atomic. So, not all the code
> > accessing the mask need to be under lock. The code that is under lock is
> > under the buffer lock, whereas xe_eu_stall_stream_read_locked() is under
> > gt->eu_stall->lock. So, moving this code into xe_eu_stall_stream_read_locked
> > would not make any difference. I think this code can exist outside of a
> > lock. If one read() just misses a data drop, the subsequent read would
> > report the data drop.
>
> OK, let me see what happens with my suggestion below (starting with "I had
> also outlined another...") and then we can see if the locking will be ok or
> not.
>
> > >
> > > > + if (!stream->data_drop.reported_to_user) {
> > > > + stream->data_drop.reported_to_user = true;
> > > > + xe_gt_dbg(gt, "EU stall data dropped in XeCores: %*pb\n",
> > > > + XE_MAX_DSS_FUSE_BITS, stream->data_drop.mask);
> > > > + return -EIO;
> > > > + }
> > > > + stream->data_drop.reported_to_user = false;
> > >
> > > I don't think this logic is correct. We should set this to false only after
> > > we have cleared all set bits (e.g. only after bitmap_weight) otherwise we
> > > might keep returning -EIO multiple times?
> > If the subsequent read() reads all the data from all the subslices, it
> > would clear all the bits. But if the user buffer is small and it doesn't
> > read all the data from all the subslices, some bits can continue to be
> > set and can cause multiple alternate -EIO returns. Ideally, the user
> > buffer should be big enough to accomodate all the data from the kernel
> > buffer.
>
> Afaik we are not exposing a minimum user buffer size in the uapi, but we
> could too.
Starting patch series v6, the per subslice buffer size is being exposed
to the user space via the query IOCTL. Recommended user buffer size is:
number of subslices x per subslice buffer size which is same as the
kernel buffer size.
>
> I had also outlined another simple way of doing this in my follow up to
> this email, which doesn't have such issues. What do you think of that?
I don't think driver dropping data is a good idea. The HW drops data
only when the buffer is full. Even though HW drops some data, a buffer
full of day will be useful to the user space.
>
> > >
> > > If HW continues to drop data and keep setting the line, while we are
> > > resetting the bit, it is possible bitmap_weight might never become 0. I
> > > think that is ok, we have returned -EIO at least once to indicate to
> > > userspace that it is not reading data fast enough and HW is dropping data.
> > >
> > > Or we may return -EIO multiple times as is happening here, where
> > > reported_to_user is set to 0 before all bits might have been cleared. So
> > > what is happening here might be ok too.
> > >
> > > To see this clearly and evaluate it is why I am saying move all of this
> > > data drop handling and -EIO return into this one patch. So we can decide
> > > which approach to take: return -EIO just once or return multiple times.
I will move all the data drop code into this patch.
> > >
> > > We can also maybe defer this patch and merge the other stuff first if it's
> > > a separate patch.
> > >
> > > So maybe this is ok, maybe not, anyway something to think about.
> > >
> > > > + }
> > > > +
> > > > if (!(file->f_flags & O_NONBLOCK)) {
> > > > do {
> > > > if (!stream->pollin) {
> > > > @@ -680,6 +691,7 @@ static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
> > > > if (!stream->xecore_buf)
> > > > return -ENOMEM;
> > > >
> > > > + stream->data_drop.reported_to_user = false;
> > > > bitmap_zero(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS);
> > >
> > > Stream is kzalloc'd, why do you need to init these?
> > >
> > > >
> > > > xe_pm_runtime_get(gt_to_xe(gt));
> > > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
> > > > index f97c8bf8e852..8bc44e9e98af 100644
> > > > --- a/drivers/gpu/drm/xe/xe_eu_stall.h
> > > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.h
> > > > @@ -31,6 +31,7 @@ struct xe_eu_stall_data_stream {
> > > > struct xe_bo *bo;
> > > > struct per_xecore_buf *xecore_buf;
> > > > struct {
> > > > + bool reported_to_user;
> > > > xe_dss_mask_t mask;
> > > > } data_drop;
> > > > struct hrtimer poll_check_timer;
> > > > --
> > > > 2.47.1
> > > >
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 4/7] drm/xe/eustall: Return -EIO error from read() if HW drops data
2025-01-31 22:59 ` Harish Chegondi
@ 2025-02-01 0:13 ` Dixit, Ashutosh
2025-02-01 6:57 ` Dixit, Ashutosh
0 siblings, 1 reply; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-02-01 0:13 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
On Fri, 31 Jan 2025 14:59:16 -0800, Harish Chegondi wrote:
>
> On Fri, Jan 31, 2025 at 12:19:46PM -0800, Dixit, Ashutosh wrote:
> > On Fri, 31 Jan 2025 11:30:03 -0800, Harish Chegondi wrote:
> > >
> > > On Wed, Jan 29, 2025 at 08:45:59PM -0800, Dixit, Ashutosh wrote:
> > > > On Wed, 15 Jan 2025 12:02:10 -0800, Harish Chegondi wrote:
> > > > >
> > > > > 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,
> > > > > and if the hardware wants to write more data, it simply drops
> > > > > data due to unavailable buffer space. In that case, hardware
> > > > > sets a bit in a register. If the driver detects data drop,
> > > > > the driver read() returns -EIO error to let the user space
> > > > > know that HW has dropped data. The -EIO error is returned
> > > > > even if there is EU stall data in the buffer. A subsequent
> > > > > read by the user space returns the remaining EU stall data.
> > > >
> > > > As I mentioned earlier, entire dropped packet handling should be in this
> > > > patch, so we can see the entire logic around this. So data_drop struct
> > > > should be defined in this patch.
> > > I worded the commit message that this commit is about read() returning
> > > -EIO when data is dropped. So, I didn't put all the data drop code in
> > > this patch. Sure, I can reword the commit message and move the code
> > > into this patch.
> >
> > Yeah, the "unit of functionality" is not returning -EIO, it is "dropped
> > data handling", so that whole unit should be in a separate patch. This one,
> > I don't want to compromise on.
> > > >
> > > > >
> > > > > Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> > > > > ---
> > > > > drivers/gpu/drm/xe/xe_eu_stall.c | 12 ++++++++++++
> > > > > drivers/gpu/drm/xe/xe_eu_stall.h | 1 +
> > > > > 2 files changed, 13 insertions(+)
> > > > >
> > > > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > > index c388d733b857..437782f8433c 100644
> > > > > --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > > @@ -472,6 +472,7 @@ xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *stream,
> > > > > * before calling read().
> > > > > *
> > > > > * Returns: The number of bytes copied or a negative error code on failure.
> > > > > + * -EIO if HW drops any EU stall data when the buffer is full.
> > > > > */
> > > > > static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > > > > size_t count, loff_t *ppos)
> > > > > @@ -485,6 +486,16 @@ static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > > > > return -EINVAL;
> > > > > }
> > > > >
> > > > > + if (bitmap_weight(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS)) {
> > > >
> > > > Since data_drop.mask is being touched elsewhere under xecore_buf->lock,
> > > > here also it should be accessed under the same lock. So this returning -EIO
> > > > should probably be moved into xe_eu_stall_stream_read_locked?
> > > data_drop.mask is being accessed via set_bit(), clear_bit(), test_bit()
> > > and bitmap_weight(). set_bit() and clear_bit() are atomic operations,
> > > but test_bit() and bitmap_weight() are not atomic. So, not all the code
> > > accessing the mask need to be under lock. The code that is under lock is
> > > under the buffer lock, whereas xe_eu_stall_stream_read_locked() is under
> > > gt->eu_stall->lock. So, moving this code into xe_eu_stall_stream_read_locked
> > > would not make any difference. I think this code can exist outside of a
> > > lock. If one read() just misses a data drop, the subsequent read would
> > > report the data drop.
> >
> > OK, let me see what happens with my suggestion below (starting with "I had
> > also outlined another...") and then we can see if the locking will be ok or
> > not.
> >
> > > >
> > > > > + if (!stream->data_drop.reported_to_user) {
> > > > > + stream->data_drop.reported_to_user = true;
> > > > > + xe_gt_dbg(gt, "EU stall data dropped in XeCores: %*pb\n",
> > > > > + XE_MAX_DSS_FUSE_BITS, stream->data_drop.mask);
> > > > > + return -EIO;
> > > > > + }
> > > > > + stream->data_drop.reported_to_user = false;
> > > >
> > > > I don't think this logic is correct. We should set this to false only after
> > > > we have cleared all set bits (e.g. only after bitmap_weight) otherwise we
> > > > might keep returning -EIO multiple times?
> > > If the subsequent read() reads all the data from all the subslices, it
> > > would clear all the bits. But if the user buffer is small and it doesn't
> > > read all the data from all the subslices, some bits can continue to be
> > > set and can cause multiple alternate -EIO returns. Ideally, the user
> > > buffer should be big enough to accomodate all the data from the kernel
> > > buffer.
> >
> > Afaik we are not exposing a minimum user buffer size in the uapi, but we
> > could too.
> Starting patch series v6, the per subslice buffer size is being exposed
> to the user space via the query IOCTL. Recommended user buffer size is:
> number of subslices x per subslice buffer size which is same as the
> kernel buffer size.
Recommended is one thing, requiring a particular minimum buffer size is
another. One idea would be to return an error from read() if we see a
buffer size smaller than the recommended. We could check if UMD's are ok
with that and enforce it in the driver.
Anyway, just an idea, not saying we have to do it. If we don't, it would be
good to have a test to make sure buffers smaller than the recommended are
not causing any other issue. Plus make sure the driver handles it
correctly, which as I commented earlier, at present it doesn't. I also said
we can fix that after the initial merge.
> >
> > I had also outlined another simple way of doing this in my follow up to
> > this email, which doesn't have such issues. What do you think of that?
> I don't think driver dropping data is a good idea. The HW drops data
> only when the buffer is full. Even though HW drops some data, a buffer
> full of day will be useful to the user space.
I don't see a how that can be true. If an app is using the data for
profiling, missing data would mean they might be mis-reporting hotspots
etc.
Have we checked with UMD's what they would do if they saw -EIO? Do they
e.g. abandon data collection? One option, if acceptable, is actually to
return -EIO and disable the stream and not return any more data after
returning -EIO, just return -EINVAL from read(). If that data is not useful
to UMD's, that is.
> >
> > > >
> > > > If HW continues to drop data and keep setting the line, while we are
> > > > resetting the bit, it is possible bitmap_weight might never become 0. I
> > > > think that is ok, we have returned -EIO at least once to indicate to
> > > > userspace that it is not reading data fast enough and HW is dropping data.
> > > >
> > > > Or we may return -EIO multiple times as is happening here, where
> > > > reported_to_user is set to 0 before all bits might have been cleared. So
> > > > what is happening here might be ok too.
> > > >
> > > > To see this clearly and evaluate it is why I am saying move all of this
> > > > data drop handling and -EIO return into this one patch. So we can decide
> > > > which approach to take: return -EIO just once or return multiple times.
> I will move all the data drop code into this patch.
> > > >
> > > > We can also maybe defer this patch and merge the other stuff first if it's
> > > > a separate patch.
> > > >
> > > > So maybe this is ok, maybe not, anyway something to think about.
> > > >
> > > > > + }
> > > > > +
> > > > > if (!(file->f_flags & O_NONBLOCK)) {
> > > > > do {
> > > > > if (!stream->pollin) {
> > > > > @@ -680,6 +691,7 @@ static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
> > > > > if (!stream->xecore_buf)
> > > > > return -ENOMEM;
> > > > >
> > > > > + stream->data_drop.reported_to_user = false;
> > > > > bitmap_zero(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS);
> > > >
> > > > Stream is kzalloc'd, why do you need to init these?
> > > >
> > > > >
> > > > > xe_pm_runtime_get(gt_to_xe(gt));
> > > > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
> > > > > index f97c8bf8e852..8bc44e9e98af 100644
> > > > > --- a/drivers/gpu/drm/xe/xe_eu_stall.h
> > > > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.h
> > > > > @@ -31,6 +31,7 @@ struct xe_eu_stall_data_stream {
> > > > > struct xe_bo *bo;
> > > > > struct per_xecore_buf *xecore_buf;
> > > > > struct {
> > > > > + bool reported_to_user;
> > > > > xe_dss_mask_t mask;
> > > > > } data_drop;
> > > > > struct hrtimer poll_check_timer;
> > > > > --
> > > > > 2.47.1
> > > > >
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 4/7] drm/xe/eustall: Return -EIO error from read() if HW drops data
2025-02-01 0:13 ` Dixit, Ashutosh
@ 2025-02-01 6:57 ` Dixit, Ashutosh
0 siblings, 0 replies; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-02-01 6:57 UTC (permalink / raw)
To: Harish Chegondi; +Cc: intel-xe
On Fri, 31 Jan 2025 16:13:32 -0800, Dixit, Ashutosh wrote:
>
> On Fri, 31 Jan 2025 14:59:16 -0800, Harish Chegondi wrote:
> >
> > On Fri, Jan 31, 2025 at 12:19:46PM -0800, Dixit, Ashutosh wrote:
> > > On Fri, 31 Jan 2025 11:30:03 -0800, Harish Chegondi wrote:
> > > >
> > > > On Wed, Jan 29, 2025 at 08:45:59PM -0800, Dixit, Ashutosh wrote:
> > > > > On Wed, 15 Jan 2025 12:02:10 -0800, Harish Chegondi wrote:
> > > > > >
> > > > > > 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,
> > > > > > and if the hardware wants to write more data, it simply drops
> > > > > > data due to unavailable buffer space. In that case, hardware
> > > > > > sets a bit in a register. If the driver detects data drop,
> > > > > > the driver read() returns -EIO error to let the user space
> > > > > > know that HW has dropped data. The -EIO error is returned
> > > > > > even if there is EU stall data in the buffer. A subsequent
> > > > > > read by the user space returns the remaining EU stall data.
> > > > >
> > > > > As I mentioned earlier, entire dropped packet handling should be in this
> > > > > patch, so we can see the entire logic around this. So data_drop struct
> > > > > should be defined in this patch.
> > > > I worded the commit message that this commit is about read() returning
> > > > -EIO when data is dropped. So, I didn't put all the data drop code in
> > > > this patch. Sure, I can reword the commit message and move the code
> > > > into this patch.
> > >
> > > Yeah, the "unit of functionality" is not returning -EIO, it is "dropped
> > > data handling", so that whole unit should be in a separate patch. This one,
> > > I don't want to compromise on.
> > > > >
> > > > > >
> > > > > > Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
> > > > > > ---
> > > > > > drivers/gpu/drm/xe/xe_eu_stall.c | 12 ++++++++++++
> > > > > > drivers/gpu/drm/xe/xe_eu_stall.h | 1 +
> > > > > > 2 files changed, 13 insertions(+)
> > > > > >
> > > > > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > > > index c388d733b857..437782f8433c 100644
> > > > > > --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > > > @@ -472,6 +472,7 @@ xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *stream,
> > > > > > * before calling read().
> > > > > > *
> > > > > > * Returns: The number of bytes copied or a negative error code on failure.
> > > > > > + * -EIO if HW drops any EU stall data when the buffer is full.
> > > > > > */
> > > > > > static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > > > > > size_t count, loff_t *ppos)
> > > > > > @@ -485,6 +486,16 @@ static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
> > > > > > return -EINVAL;
> > > > > > }
> > > > > >
> > > > > > + if (bitmap_weight(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS)) {
> > > > >
> > > > > Since data_drop.mask is being touched elsewhere under xecore_buf->lock,
> > > > > here also it should be accessed under the same lock. So this returning -EIO
> > > > > should probably be moved into xe_eu_stall_stream_read_locked?
> > > > data_drop.mask is being accessed via set_bit(), clear_bit(), test_bit()
> > > > and bitmap_weight(). set_bit() and clear_bit() are atomic operations,
> > > > but test_bit() and bitmap_weight() are not atomic. So, not all the code
> > > > accessing the mask need to be under lock. The code that is under lock is
> > > > under the buffer lock, whereas xe_eu_stall_stream_read_locked() is under
> > > > gt->eu_stall->lock. So, moving this code into xe_eu_stall_stream_read_locked
> > > > would not make any difference. I think this code can exist outside of a
> > > > lock. If one read() just misses a data drop, the subsequent read would
> > > > report the data drop.
> > >
> > > OK, let me see what happens with my suggestion below (starting with "I had
> > > also outlined another...") and then we can see if the locking will be ok or
> > > not.
> > >
> > > > >
> > > > > > + if (!stream->data_drop.reported_to_user) {
> > > > > > + stream->data_drop.reported_to_user = true;
> > > > > > + xe_gt_dbg(gt, "EU stall data dropped in XeCores: %*pb\n",
> > > > > > + XE_MAX_DSS_FUSE_BITS, stream->data_drop.mask);
> > > > > > + return -EIO;
> > > > > > + }
> > > > > > + stream->data_drop.reported_to_user = false;
> > > > >
> > > > > I don't think this logic is correct. We should set this to false only after
> > > > > we have cleared all set bits (e.g. only after bitmap_weight) otherwise we
> > > > > might keep returning -EIO multiple times?
> > > > If the subsequent read() reads all the data from all the subslices, it
> > > > would clear all the bits. But if the user buffer is small and it doesn't
> > > > read all the data from all the subslices, some bits can continue to be
> > > > set and can cause multiple alternate -EIO returns. Ideally, the user
> > > > buffer should be big enough to accomodate all the data from the kernel
> > > > buffer.
> > >
> > > Afaik we are not exposing a minimum user buffer size in the uapi, but we
> > > could too.
> > Starting patch series v6, the per subslice buffer size is being exposed
> > to the user space via the query IOCTL. Recommended user buffer size is:
> > number of subslices x per subslice buffer size which is same as the
> > kernel buffer size.
>
> Recommended is one thing, requiring a particular minimum buffer size is
> another. One idea would be to return an error from read() if we see a
> buffer size smaller than the recommended. We could check if UMD's are ok
> with that and enforce it in the driver.
>
> Anyway, just an idea, not saying we have to do it. If we don't, it would be
> good to have a test to make sure buffers smaller than the recommended are
> not causing any other issue. Plus make sure the driver handles it
> correctly, which as I commented earlier, at present it doesn't. I also said
> we can fix that after the initial merge.
I will make another observation in this connection. Likely this is not an
issue if leave pollin set when we return from read when the user buffer was
small and we could not return all available data. But something to bear in
mind. Let us say we have 10 dss's. When we start returning data we always
start from dss 1. Say in a read call we start from dss 1 and return till
dss 5. In the next read call we again start at dss 1. It would be better if
we start at dss 6. So in first read call we return data from dss 1-5, in
the next read call from dss 6-10, and so on.
But maybe if there's no data in dss 1-5 since we already returned all data
in the previous call, we will be ok. If not, there's a chance dss 6-10 will
start dropping data because we are not reading those dss's frequently enough.
>
>
> > >
> > > I had also outlined another simple way of doing this in my follow up to
> > > this email, which doesn't have such issues. What do you think of that?
> > I don't think driver dropping data is a good idea. The HW drops data
> > only when the buffer is full. Even though HW drops some data, a buffer
> > full of day will be useful to the user space.
>
> I don't see a how that can be true. If an app is using the data for
> profiling, missing data would mean they might be mis-reporting hotspots
> etc.
>
> Have we checked with UMD's what they would do if they saw -EIO? Do they
> e.g. abandon data collection? One option, if acceptable, is actually to
> return -EIO and disable the stream and not return any more data after
> returning -EIO, just return -EINVAL from read(). If that data is not useful
> to UMD's, that is.
>
> > >
> > > > >
> > > > > If HW continues to drop data and keep setting the line, while we are
> > > > > resetting the bit, it is possible bitmap_weight might never become 0. I
> > > > > think that is ok, we have returned -EIO at least once to indicate to
> > > > > userspace that it is not reading data fast enough and HW is dropping data.
> > > > >
> > > > > Or we may return -EIO multiple times as is happening here, where
> > > > > reported_to_user is set to 0 before all bits might have been cleared. So
> > > > > what is happening here might be ok too.
> > > > >
> > > > > To see this clearly and evaluate it is why I am saying move all of this
> > > > > data drop handling and -EIO return into this one patch. So we can decide
> > > > > which approach to take: return -EIO just once or return multiple times.
> > I will move all the data drop code into this patch.
> > > > >
> > > > > We can also maybe defer this patch and merge the other stuff first if it's
> > > > > a separate patch.
> > > > >
> > > > > So maybe this is ok, maybe not, anyway something to think about.
> > > > >
> > > > > > + }
> > > > > > +
> > > > > > if (!(file->f_flags & O_NONBLOCK)) {
> > > > > > do {
> > > > > > if (!stream->pollin) {
> > > > > > @@ -680,6 +691,7 @@ static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
> > > > > > if (!stream->xecore_buf)
> > > > > > return -ENOMEM;
> > > > > >
> > > > > > + stream->data_drop.reported_to_user = false;
> > > > > > bitmap_zero(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS);
> > > > >
> > > > > Stream is kzalloc'd, why do you need to init these?
> > > > >
> > > > > >
> > > > > > xe_pm_runtime_get(gt_to_xe(gt));
> > > > > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
> > > > > > index f97c8bf8e852..8bc44e9e98af 100644
> > > > > > --- a/drivers/gpu/drm/xe/xe_eu_stall.h
> > > > > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.h
> > > > > > @@ -31,6 +31,7 @@ struct xe_eu_stall_data_stream {
> > > > > > struct xe_bo *bo;
> > > > > > struct per_xecore_buf *xecore_buf;
> > > > > > struct {
> > > > > > + bool reported_to_user;
> > > > > > xe_dss_mask_t mask;
> > > > > > } data_drop;
> > > > > > struct hrtimer poll_check_timer;
> > > > > > --
> > > > > > 2.47.1
> > > > > >
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 5/7] drm/xe/eustall: Add EU stall sampling support for Xe2
2025-01-30 4:55 ` Dixit, Ashutosh
@ 2025-02-05 1:16 ` Olson, Matthew
2025-02-05 1:57 ` Dixit, Ashutosh
0 siblings, 1 reply; 49+ messages in thread
From: Olson, Matthew @ 2025-02-05 1:16 UTC (permalink / raw)
To: Dixit, Ashutosh; +Cc: Harish Chegondi, intel-xe
On Wed, Jan 29, 2025 at 08:55:42PM -0800, Dixit, Ashutosh wrote:
> On Wed, 15 Jan 2025 12:02:11 -0800, Harish Chegondi wrote:
> > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> > index 437782f8433c..d72f80a9dfe4 100644
> > --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> > +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> > @@ -73,6 +73,42 @@ struct xe_eu_stall_data_pvc {
> > __u64 unused[6];
> > } __packed;
> >
> > +/**
> > + * struct xe_eu_stall_data_xe2 - EU stall data format for LNL, BMG
> > + *
> > + * Bits Field
> > + * 0 to 28 IP (addr)
> > + * 29 to 36 Tdr count
> > + * 37 to 44 other count
> > + * 45 to 52 control count
> > + * 53 to 60 pipestall count
> > + * 61 to 68 send count
> > + * 69 to 76 dist_acc count
> > + * 77 to 84 sbid count
> > + * 85 to 92 sync count
> > + * 93 to 100 inst_fetch count
> > + * 101 to 108 Active count
> > + * 109 to 111 Exid
> > + * 112 EndFlag (is always 1)
> > + */
> > +struct xe_eu_stall_data_xe2 {
> > + __u64 ip_addr:29;
> > + __u64 tdr_count:8;
> > + __u64 other_count:8;
> > + __u64 control_count:8;
> > + __u64 pipestall_count:8;
> > + __u64 send_count:8;
> > + __u64 dist_acc_count:8;
> > + __u64 sbid_count:8;
> > + __u64 sync_count:8;
> > + __u64 inst_fetch_count:8;
> > + __u64 active_count:8;
> > + __u64 ex_id:3;
> > + __u64 end_flag:1;
> > + __u64 unused_bits:15;
> > + __u64 unused[6];
> > +} __packed;
>
> Same question about whether or not to retain this struct. Retain it if we
> want to document this information otherwise drop it and just keep sizeof.
I'd prefer to keep them, as I've personally found it convenient to refer
to them while while writing the userspace reader of these samples. I'm not
aware of any other particular place that they can be found, other than
maybe some other public repo that uses the i915 version of this interface
(IGT, maybe?). I'd venture to guess that others trying to call this
code are also going to be searching for these definitions in
`drivers/gpu/drm/xe` as well.
>
> > +
> > static u64 per_xecore_buf_size = SZ_512K;
> >
> > static unsigned long
> > @@ -83,6 +119,8 @@ xe_eu_stall_data_record_size(struct xe_device *xe)
> >
> > if (platform == XE_PVC)
> > record_size = sizeof(struct xe_eu_stall_data_pvc);
> > + else if ((platform == XE_LUNARLAKE) || (platform == XE_BATTLEMAGE))
>
> 'else if (GRAPHICS_VER(xe) >= 20)' so that we don't have to keep adding
> each individual platform.
>
> > + record_size = sizeof(struct xe_eu_stall_data_xe2);
> >
> > return record_size;
> > }
> > @@ -311,10 +349,16 @@ eu_stall_data_buf_check(struct xe_eu_stall_data_stream *stream)
> > static void
> > clear_dropped_eviction_line_bit(struct xe_gt *gt, u16 group, u16 instance)
> > {
> > + struct xe_device *xe = gt_to_xe(gt);
> > u32 write_ptr_reg;
> >
> > - /* On PVC, the overflow bit has to be cleared by writing 1 to it. */
> > - write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> > + /* 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 (GRAPHICS_VER(xe) >= 20)
> > + write_ptr_reg = _MASKED_BIT_DISABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> > + else
> > + write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> >
> > xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT, write_ptr_reg, group, instance);
> > }
> > @@ -882,7 +926,9 @@ static const struct file_operations fops_eu_stall = {
> >
> > static inline bool has_eu_stall_sampling_support(struct xe_device *xe)
> > {
> > - return ((xe->info.platform == XE_PVC) ? true : false);
> > + return ((xe->info.platform == XE_PVC ||
> > + xe->info.platform == XE_LUNARLAKE ||
> > + xe->info.platform == XE_BATTLEMAGE) ? true : false);
>
> Same here, use (GRAPHICS_VER(xe) >= 20).
>
> > }
> >
> > /**
> > --
> > 2.47.1
> >
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 5/7] drm/xe/eustall: Add EU stall sampling support for Xe2
2025-02-05 1:16 ` Olson, Matthew
@ 2025-02-05 1:57 ` Dixit, Ashutosh
2025-02-05 19:03 ` Olson, Matthew
0 siblings, 1 reply; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-02-05 1:57 UTC (permalink / raw)
To: Olson, Matthew; +Cc: Harish Chegondi, intel-xe
On Tue, 04 Feb 2025 17:16:00 -0800, Olson, Matthew wrote:
>
Hi Matt,
> On Wed, Jan 29, 2025 at 08:55:42PM -0800, Dixit, Ashutosh wrote:
> > On Wed, 15 Jan 2025 12:02:11 -0800, Harish Chegondi wrote:
> > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > index 437782f8433c..d72f80a9dfe4 100644
> > > --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > @@ -73,6 +73,42 @@ struct xe_eu_stall_data_pvc {
> > > __u64 unused[6];
> > > } __packed;
> > >
> > > +/**
> > > + * struct xe_eu_stall_data_xe2 - EU stall data format for LNL, BMG
> > > + *
> > > + * Bits Field
> > > + * 0 to 28 IP (addr)
> > > + * 29 to 36 Tdr count
> > > + * 37 to 44 other count
> > > + * 45 to 52 control count
> > > + * 53 to 60 pipestall count
> > > + * 61 to 68 send count
> > > + * 69 to 76 dist_acc count
> > > + * 77 to 84 sbid count
> > > + * 85 to 92 sync count
> > > + * 93 to 100 inst_fetch count
> > > + * 101 to 108 Active count
> > > + * 109 to 111 Exid
> > > + * 112 EndFlag (is always 1)
> > > + */
> > > +struct xe_eu_stall_data_xe2 {
> > > + __u64 ip_addr:29;
> > > + __u64 tdr_count:8;
> > > + __u64 other_count:8;
> > > + __u64 control_count:8;
> > > + __u64 pipestall_count:8;
> > > + __u64 send_count:8;
> > > + __u64 dist_acc_count:8;
> > > + __u64 sbid_count:8;
> > > + __u64 sync_count:8;
> > > + __u64 inst_fetch_count:8;
> > > + __u64 active_count:8;
> > > + __u64 ex_id:3;
> > > + __u64 end_flag:1;
> > > + __u64 unused_bits:15;
> > > + __u64 unused[6];
> > > +} __packed;
> >
> > Same question about whether or not to retain this struct. Retain it if we
> > want to document this information otherwise drop it and just keep sizeof.
>
> I'd prefer to keep them, as I've personally found it convenient to refer
> to them while while writing the userspace reader of these samples. I'm not
> aware of any other particular place that they can be found, other than
> maybe some other public repo that uses the i915 version of this interface
> (IGT, maybe?). I'd venture to guess that others trying to call this
> code are also going to be searching for these definitions in
> `drivers/gpu/drm/xe` as well.
Yes, they are present in the IGT's too:
https://patchwork.freedesktop.org/patch/630656/?series=143030&rev=1
Would that work for you, or you prefer them in the kernel? Just trying to
get an idea right now, not deciding one way or another.
Thanks.
--
Ashutosh
>
> >
> > > +
> > > static u64 per_xecore_buf_size = SZ_512K;
> > >
> > > static unsigned long
> > > @@ -83,6 +119,8 @@ xe_eu_stall_data_record_size(struct xe_device *xe)
> > >
> > > if (platform == XE_PVC)
> > > record_size = sizeof(struct xe_eu_stall_data_pvc);
> > > + else if ((platform == XE_LUNARLAKE) || (platform == XE_BATTLEMAGE))
> >
> > 'else if (GRAPHICS_VER(xe) >= 20)' so that we don't have to keep adding
> > each individual platform.
> >
> > > + record_size = sizeof(struct xe_eu_stall_data_xe2);
> > >
> > > return record_size;
> > > }
> > > @@ -311,10 +349,16 @@ eu_stall_data_buf_check(struct xe_eu_stall_data_stream *stream)
> > > static void
> > > clear_dropped_eviction_line_bit(struct xe_gt *gt, u16 group, u16 instance)
> > > {
> > > + struct xe_device *xe = gt_to_xe(gt);
> > > u32 write_ptr_reg;
> > >
> > > - /* On PVC, the overflow bit has to be cleared by writing 1 to it. */
> > > - write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> > > + /* 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 (GRAPHICS_VER(xe) >= 20)
> > > + write_ptr_reg = _MASKED_BIT_DISABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> > > + else
> > > + write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> > >
> > > xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT, write_ptr_reg, group, instance);
> > > }
> > > @@ -882,7 +926,9 @@ static const struct file_operations fops_eu_stall = {
> > >
> > > static inline bool has_eu_stall_sampling_support(struct xe_device *xe)
> > > {
> > > - return ((xe->info.platform == XE_PVC) ? true : false);
> > > + return ((xe->info.platform == XE_PVC ||
> > > + xe->info.platform == XE_LUNARLAKE ||
> > > + xe->info.platform == XE_BATTLEMAGE) ? true : false);
> >
> > Same here, use (GRAPHICS_VER(xe) >= 20).
> >
> > > }
> > >
> > > /**
> > > --
> > > 2.47.1
> > >
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 5/7] drm/xe/eustall: Add EU stall sampling support for Xe2
2025-02-05 1:57 ` Dixit, Ashutosh
@ 2025-02-05 19:03 ` Olson, Matthew
2025-02-05 20:02 ` Dixit, Ashutosh
0 siblings, 1 reply; 49+ messages in thread
From: Olson, Matthew @ 2025-02-05 19:03 UTC (permalink / raw)
To: Dixit, Ashutosh; +Cc: Harish Chegondi, intel-xe
On Tue, Feb 04, 2025 at 05:57:17PM -0800, Dixit, Ashutosh wrote:
> On Tue, 04 Feb 2025 17:16:00 -0800, Olson, Matthew wrote:
> >
>
> Hi Matt,
>
> > On Wed, Jan 29, 2025 at 08:55:42PM -0800, Dixit, Ashutosh wrote:
> > > On Wed, 15 Jan 2025 12:02:11 -0800, Harish Chegondi wrote:
> > > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > index 437782f8433c..d72f80a9dfe4 100644
> > > > --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > @@ -73,6 +73,42 @@ struct xe_eu_stall_data_pvc {
> > > > __u64 unused[6];
> > > > } __packed;
> > > >
> > > > +/**
> > > > + * struct xe_eu_stall_data_xe2 - EU stall data format for LNL, BMG
> > > > + *
> > > > + * Bits Field
> > > > + * 0 to 28 IP (addr)
> > > > + * 29 to 36 Tdr count
> > > > + * 37 to 44 other count
> > > > + * 45 to 52 control count
> > > > + * 53 to 60 pipestall count
> > > > + * 61 to 68 send count
> > > > + * 69 to 76 dist_acc count
> > > > + * 77 to 84 sbid count
> > > > + * 85 to 92 sync count
> > > > + * 93 to 100 inst_fetch count
> > > > + * 101 to 108 Active count
> > > > + * 109 to 111 Exid
> > > > + * 112 EndFlag (is always 1)
> > > > + */
> > > > +struct xe_eu_stall_data_xe2 {
> > > > + __u64 ip_addr:29;
> > > > + __u64 tdr_count:8;
> > > > + __u64 other_count:8;
> > > > + __u64 control_count:8;
> > > > + __u64 pipestall_count:8;
> > > > + __u64 send_count:8;
> > > > + __u64 dist_acc_count:8;
> > > > + __u64 sbid_count:8;
> > > > + __u64 sync_count:8;
> > > > + __u64 inst_fetch_count:8;
> > > > + __u64 active_count:8;
> > > > + __u64 ex_id:3;
> > > > + __u64 end_flag:1;
> > > > + __u64 unused_bits:15;
> > > > + __u64 unused[6];
> > > > +} __packed;
> > >
> > > Same question about whether or not to retain this struct. Retain it if we
> > > want to document this information otherwise drop it and just keep sizeof.
> >
> > I'd prefer to keep them, as I've personally found it convenient to refer
> > to them while while writing the userspace reader of these samples. I'm not
> > aware of any other particular place that they can be found, other than
> > maybe some other public repo that uses the i915 version of this interface
> > (IGT, maybe?). I'd venture to guess that others trying to call this
> > code are also going to be searching for these definitions in
> > `drivers/gpu/drm/xe` as well.
>
> Yes, they are present in the IGT's too:
>
> https://patchwork.freedesktop.org/patch/630656/?series=143030&rev=1
>
> Would that work for you, or you prefer them in the kernel? Just trying to
> get an idea right now, not deciding one way or another.
I think it'd be more convenient to have them in the Xe driver itself, since most
userspace users are going to already be looking there. They'd have to really
Google around to find those definitions in IGT. I understand that it cleans up
the code a bit to remove them (since we're only using their size), but keeping
them makes this code more self-documenting.
>
> Thanks.
> --
> Ashutosh
>
>
>
> >
> > >
> > > > +
> > > > static u64 per_xecore_buf_size = SZ_512K;
> > > >
> > > > static unsigned long
> > > > @@ -83,6 +119,8 @@ xe_eu_stall_data_record_size(struct xe_device *xe)
> > > >
> > > > if (platform == XE_PVC)
> > > > record_size = sizeof(struct xe_eu_stall_data_pvc);
> > > > + else if ((platform == XE_LUNARLAKE) || (platform == XE_BATTLEMAGE))
> > >
> > > 'else if (GRAPHICS_VER(xe) >= 20)' so that we don't have to keep adding
> > > each individual platform.
> > >
> > > > + record_size = sizeof(struct xe_eu_stall_data_xe2);
> > > >
> > > > return record_size;
> > > > }
> > > > @@ -311,10 +349,16 @@ eu_stall_data_buf_check(struct xe_eu_stall_data_stream *stream)
> > > > static void
> > > > clear_dropped_eviction_line_bit(struct xe_gt *gt, u16 group, u16 instance)
> > > > {
> > > > + struct xe_device *xe = gt_to_xe(gt);
> > > > u32 write_ptr_reg;
> > > >
> > > > - /* On PVC, the overflow bit has to be cleared by writing 1 to it. */
> > > > - write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> > > > + /* 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 (GRAPHICS_VER(xe) >= 20)
> > > > + write_ptr_reg = _MASKED_BIT_DISABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> > > > + else
> > > > + write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> > > >
> > > > xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT, write_ptr_reg, group, instance);
> > > > }
> > > > @@ -882,7 +926,9 @@ static const struct file_operations fops_eu_stall = {
> > > >
> > > > static inline bool has_eu_stall_sampling_support(struct xe_device *xe)
> > > > {
> > > > - return ((xe->info.platform == XE_PVC) ? true : false);
> > > > + return ((xe->info.platform == XE_PVC ||
> > > > + xe->info.platform == XE_LUNARLAKE ||
> > > > + xe->info.platform == XE_BATTLEMAGE) ? true : false);
> > >
> > > Same here, use (GRAPHICS_VER(xe) >= 20).
> > >
> > > > }
> > > >
> > > > /**
> > > > --
> > > > 2.47.1
> > > >
^ permalink raw reply [flat|nested] 49+ messages in thread
* Re: [PATCH v8 5/7] drm/xe/eustall: Add EU stall sampling support for Xe2
2025-02-05 19:03 ` Olson, Matthew
@ 2025-02-05 20:02 ` Dixit, Ashutosh
0 siblings, 0 replies; 49+ messages in thread
From: Dixit, Ashutosh @ 2025-02-05 20:02 UTC (permalink / raw)
To: Olson, Matthew; +Cc: Harish Chegondi, intel-xe
On Wed, 05 Feb 2025 11:03:00 -0800, Olson, Matthew wrote:
>
> On Tue, Feb 04, 2025 at 05:57:17PM -0800, Dixit, Ashutosh wrote:
> > On Tue, 04 Feb 2025 17:16:00 -0800, Olson, Matthew wrote:
> > >
> >
> > Hi Matt,
> >
> > > On Wed, Jan 29, 2025 at 08:55:42PM -0800, Dixit, Ashutosh wrote:
> > > > On Wed, 15 Jan 2025 12:02:11 -0800, Harish Chegondi wrote:
> > > > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > > index 437782f8433c..d72f80a9dfe4 100644
> > > > > --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > > @@ -73,6 +73,42 @@ struct xe_eu_stall_data_pvc {
> > > > > __u64 unused[6];
> > > > > } __packed;
> > > > >
> > > > > +/**
> > > > > + * struct xe_eu_stall_data_xe2 - EU stall data format for LNL, BMG
> > > > > + *
> > > > > + * Bits Field
> > > > > + * 0 to 28 IP (addr)
> > > > > + * 29 to 36 Tdr count
> > > > > + * 37 to 44 other count
> > > > > + * 45 to 52 control count
> > > > > + * 53 to 60 pipestall count
> > > > > + * 61 to 68 send count
> > > > > + * 69 to 76 dist_acc count
> > > > > + * 77 to 84 sbid count
> > > > > + * 85 to 92 sync count
> > > > > + * 93 to 100 inst_fetch count
> > > > > + * 101 to 108 Active count
> > > > > + * 109 to 111 Exid
> > > > > + * 112 EndFlag (is always 1)
> > > > > + */
> > > > > +struct xe_eu_stall_data_xe2 {
> > > > > + __u64 ip_addr:29;
> > > > > + __u64 tdr_count:8;
> > > > > + __u64 other_count:8;
> > > > > + __u64 control_count:8;
> > > > > + __u64 pipestall_count:8;
> > > > > + __u64 send_count:8;
> > > > > + __u64 dist_acc_count:8;
> > > > > + __u64 sbid_count:8;
> > > > > + __u64 sync_count:8;
> > > > > + __u64 inst_fetch_count:8;
> > > > > + __u64 active_count:8;
> > > > > + __u64 ex_id:3;
> > > > > + __u64 end_flag:1;
> > > > > + __u64 unused_bits:15;
> > > > > + __u64 unused[6];
> > > > > +} __packed;
> > > >
> > > > Same question about whether or not to retain this struct. Retain it if we
> > > > want to document this information otherwise drop it and just keep sizeof.
> > >
> > > I'd prefer to keep them, as I've personally found it convenient to refer
> > > to them while while writing the userspace reader of these samples. I'm not
> > > aware of any other particular place that they can be found, other than
> > > maybe some other public repo that uses the i915 version of this interface
> > > (IGT, maybe?). I'd venture to guess that others trying to call this
> > > code are also going to be searching for these definitions in
> > > `drivers/gpu/drm/xe` as well.
> >
> > Yes, they are present in the IGT's too:
> >
> > https://patchwork.freedesktop.org/patch/630656/?series=143030&rev=1
> >
> > Would that work for you, or you prefer them in the kernel? Just trying to
> > get an idea right now, not deciding one way or another.
>
> I think it'd be more convenient to have them in the Xe driver itself, since most
> userspace users are going to already be looking there. They'd have to really
> Google around to find those definitions in IGT. I understand that it cleans up
> the code a bit to remove them (since we're only using their size), but keeping
> them makes this code more self-documenting.
All right. Harish, let's leave them in.
Thanks.
--
Ashutosh
> >
> >
> >
> > >
> > > >
> > > > > +
> > > > > static u64 per_xecore_buf_size = SZ_512K;
> > > > >
> > > > > static unsigned long
> > > > > @@ -83,6 +119,8 @@ xe_eu_stall_data_record_size(struct xe_device *xe)
> > > > >
> > > > > if (platform == XE_PVC)
> > > > > record_size = sizeof(struct xe_eu_stall_data_pvc);
> > > > > + else if ((platform == XE_LUNARLAKE) || (platform == XE_BATTLEMAGE))
> > > >
> > > > 'else if (GRAPHICS_VER(xe) >= 20)' so that we don't have to keep adding
> > > > each individual platform.
> > > >
> > > > > + record_size = sizeof(struct xe_eu_stall_data_xe2);
> > > > >
> > > > > return record_size;
> > > > > }
> > > > > @@ -311,10 +349,16 @@ eu_stall_data_buf_check(struct xe_eu_stall_data_stream *stream)
> > > > > static void
> > > > > clear_dropped_eviction_line_bit(struct xe_gt *gt, u16 group, u16 instance)
> > > > > {
> > > > > + struct xe_device *xe = gt_to_xe(gt);
> > > > > u32 write_ptr_reg;
> > > > >
> > > > > - /* On PVC, the overflow bit has to be cleared by writing 1 to it. */
> > > > > - write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> > > > > + /* 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 (GRAPHICS_VER(xe) >= 20)
> > > > > + write_ptr_reg = _MASKED_BIT_DISABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> > > > > + else
> > > > > + write_ptr_reg = _MASKED_BIT_ENABLE(XEHPC_EUSTALL_REPORT_OVERFLOW_DROP);
> > > > >
> > > > > xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT, write_ptr_reg, group, instance);
> > > > > }
> > > > > @@ -882,7 +926,9 @@ static const struct file_operations fops_eu_stall = {
> > > > >
> > > > > static inline bool has_eu_stall_sampling_support(struct xe_device *xe)
> > > > > {
> > > > > - return ((xe->info.platform == XE_PVC) ? true : false);
> > > > > + return ((xe->info.platform == XE_PVC ||
> > > > > + xe->info.platform == XE_LUNARLAKE ||
> > > > > + xe->info.platform == XE_BATTLEMAGE) ? true : false);
> > > >
> > > > Same here, use (GRAPHICS_VER(xe) >= 20).
> > > >
> > > > > }
> > > > >
> > > > > /**
> > > > > --
> > > > > 2.47.1
> > > > >
^ permalink raw reply [flat|nested] 49+ messages in thread
end of thread, other threads:[~2025-02-05 20:02 UTC | newest]
Thread overview: 49+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-15 20:02 [PATCH v8 0/7] Add support for EU stall sampling Harish Chegondi
2025-01-15 20:02 ` [PATCH v8 1/7] drm/xe/topology: Add a function to find the index of the last enabled DSS in a mask Harish Chegondi
2025-01-17 17:25 ` Dixit, Ashutosh
2025-01-22 5:18 ` Harish Chegondi
2025-01-15 20:02 ` [PATCH v8 2/7] drm/xe/uapi: Introduce API for EU stall sampling Harish Chegondi
2025-01-17 19:02 ` Dixit, Ashutosh
2025-01-22 23:44 ` Harish Chegondi
2025-01-23 2:19 ` Dixit, Ashutosh
2025-01-15 20:02 ` [PATCH v8 3/7] drm/xe/eustall: Implement EU stall sampling APIs for Xe_HPC Harish Chegondi
2025-01-18 2:34 ` Dixit, Ashutosh
2025-01-23 18:51 ` Dixit, Ashutosh
2025-01-25 3:09 ` [PATCH v8 3 " Dixit, Ashutosh
2025-01-29 4:12 ` [PATCH v8 4 " Dixit, Ashutosh
2025-01-29 4:32 ` Dixit, Ashutosh
2025-01-30 18:46 ` Harish Chegondi
2025-01-31 3:23 ` Dixit, Ashutosh
2025-01-15 20:02 ` [PATCH v8 4/7] drm/xe/eustall: Return -EIO error from read() if HW drops data Harish Chegondi
2025-01-30 4:45 ` Dixit, Ashutosh
2025-01-30 17:05 ` Dixit, Ashutosh
2025-01-31 21:50 ` Harish Chegondi
2025-01-31 19:30 ` Harish Chegondi
2025-01-31 20:19 ` Dixit, Ashutosh
2025-01-31 22:59 ` Harish Chegondi
2025-02-01 0:13 ` Dixit, Ashutosh
2025-02-01 6:57 ` Dixit, Ashutosh
2025-01-15 20:02 ` [PATCH v8 5/7] drm/xe/eustall: Add EU stall sampling support for Xe2 Harish Chegondi
2025-01-30 4:55 ` Dixit, Ashutosh
2025-02-05 1:16 ` Olson, Matthew
2025-02-05 1:57 ` Dixit, Ashutosh
2025-02-05 19:03 ` Olson, Matthew
2025-02-05 20:02 ` Dixit, Ashutosh
2025-01-15 20:02 ` [PATCH v8 6/7] drm/xe/uapi: Add a device query to get EU stall sampling information Harish Chegondi
2025-01-16 22:34 ` Dixit, Ashutosh
2025-01-22 2:48 ` Harish Chegondi
2025-01-22 3:00 ` Dixit, Ashutosh
2025-01-30 17:36 ` Dixit, Ashutosh
2025-01-15 20:02 ` [PATCH v8 7/7] drm/xe/eustall: Add workaround 22016596838 which applies to PVC Harish Chegondi
2025-01-30 5:14 ` Dixit, Ashutosh
2025-01-15 20:46 ` ✓ CI.Patch_applied: success for Add support for EU stall sampling Patchwork
2025-01-15 20:46 ` ✗ CI.checkpatch: warning " Patchwork
2025-01-15 20:48 ` ✓ CI.KUnit: success " Patchwork
2025-01-15 21:14 ` ✓ CI.Build: " Patchwork
2025-01-15 21:16 ` ✗ CI.Hooks: failure " Patchwork
2025-01-15 21:18 ` ✓ CI.checksparse: success " Patchwork
2025-01-15 21:43 ` ✗ Xe.CI.BAT: failure " Patchwork
2025-01-16 0:37 ` ✗ Xe.CI.Full: " Patchwork
2025-01-16 0:51 ` [PATCH v8 0/7] " Degrood, Felix J
2025-01-16 21:50 ` Olson, Matthew
2025-01-18 5:19 ` Harish Chegondi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).