intel-xe.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v10 0/8] Add support for EU stall sampling
@ 2025-02-18 19:53 Harish Chegondi
  2025-02-18 19:53 ` [PATCH v10 1/8] 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; 31+ messages in thread
From: Harish Chegondi @ 2025-02-18 19:53 UTC (permalink / raw)
  To: intel-xe
  Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, 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.

Issues that need investigation:
1. Blocked reads with small user buffers may be blocked even with EU
stall data in the kernel buffer as a previous read has set pollin to
false even when kernel buffer has data that could be read but the user
buffer is too small to read all the data.

Thank You.

v10 a. Fixed error rewinding code
    b. Used cancel_delayed_work_sync() instead of flush_delayed_work()
    c. Replaced per xecore lock with a lock for all the xecore buffers
    d. Remove function description for static functions.
    e. Use extension number while parsing chain of extensions.
    f. Moved code around as per review feedback
v9: a. Split the big patch in v8 into two patches
    b. Moved all drop data handling code into one patch
    c. Several other code improvements as mentioned in the patches
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)

Test-with: cover.1739901972.git.harish.chegondi@intel.com

Reviewed-by: Ben Olson <matthew.olson@intel.com>
Acked-by: 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 (8):
  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: Add support to init, enable and disable EU stall
    sampling
  drm/xe/eustall: Add support to read() and poll() EU stall data
  drm/xe/eustall: Add support to handle dropped EU stall 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           | 946 +++++++++++++++++++++
 drivers/gpu/drm/xe/xe_eu_stall.h           |  20 +
 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, 1178 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.48.1


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

* [PATCH v10 1/8] drm/xe/topology: Add a function to find the index of the last enabled DSS in a mask
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
@ 2025-02-18 19:53 ` Harish Chegondi
  2025-02-18 19:53 ` [PATCH v10 2/8] drm/xe/uapi: Introduce API for EU stall sampling Harish Chegondi
                   ` (15 subsequent siblings)
  16 siblings, 0 replies; 31+ messages in thread
From: Harish Chegondi @ 2025-02-18 19:53 UTC (permalink / raw)
  To: intel-xe
  Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, 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.

Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
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.48.1


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

* [PATCH v10 2/8] drm/xe/uapi: Introduce API for EU stall sampling
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
  2025-02-18 19:53 ` [PATCH v10 1/8] drm/xe/topology: Add a function to find the index of the last enabled DSS in a mask Harish Chegondi
@ 2025-02-18 19:53 ` Harish Chegondi
  2025-02-18 23:11   ` Dixit, Ashutosh
  2025-02-18 19:53 ` [PATCH v10 3/8] drm/xe/eustall: Add support to init, enable and disable " Harish Chegondi
                   ` (14 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Harish Chegondi @ 2025-02-18 19:53 UTC (permalink / raw)
  To: intel-xe
  Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, 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().

v10: Use extension number while parsing chain of extensions.
     Remove function description for static functions.
     Move code around as per review feedback.
v9: Changed some u32 to unsigned int.
    Moved some code around as per review feedback from v8.
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.

Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
---
 drivers/gpu/drm/xe/Makefile         |   1 +
 drivers/gpu/drm/xe/xe_eu_stall.c    | 218 ++++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_eu_stall.h    |  14 ++
 drivers/gpu/drm/xe/xe_observation.c |  14 ++
 include/uapi/drm/xe_drm.h           |  38 +++++
 5 files changed, 285 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 be73362ef334..05bcb9941c38 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_exec_queue.o \
 	xe_execlist.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..79af41be9c02
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_eu_stall.c
@@ -0,0 +1,218 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2025 Intel Corporation
+ */
+
+#include <linux/anon_inodes.h>
+#include <linux/fs.h>
+#include <linux/poll.h>
+#include <linux/types.h>
+
+#include <uapi/drm/xe_drm.h>
+
+#include "xe_device.h"
+#include "xe_eu_stall.h"
+#include "xe_gt_printk.h"
+#include "xe_gt_topology.h"
+#include "xe_macros.h"
+#include "xe_observation.h"
+
+/**
+ * struct eu_stall_open_properties - EU stall sampling properties received
+ *				     from user space at open.
+ * @sampling_rate_mult: EU stall sampling rate multiplier.
+ *			HW will sample every (sampling_rate_mult 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 {
+	unsigned int sampling_rate_mult;
+	unsigned int wait_num_reports;
+	struct xe_gt *gt;
+};
+
+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->sampling_rate_mult = value;
+	return 0;
+}
+
+static int set_prop_eu_stall_wait_num_reports(struct xe_device *xe, u64 value,
+					      struct eu_stall_open_properties *props)
+{
+	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,
+};
+
+#define MAX_USER_EXTENSIONS	5
+static int xe_eu_stall_user_extensions(struct xe_device *xe, u64 extension,
+				       int ext_number, struct eu_stall_open_properties *props)
+{
+	u64 __user *address = u64_to_user_ptr(extension);
+	struct drm_xe_user_extension ext;
+	int err;
+	u32 idx;
+
+	if (XE_IOCTL_DBG(xe, ext_number >= MAX_USER_EXTENSIONS))
+		return -E2BIG;
+
+	err = __copy_from_user(&ext, address, sizeof(ext));
+	if (XE_IOCTL_DBG(xe, err))
+		return -EFAULT;
+
+	if (XE_IOCTL_DBG(xe, ext.pad) ||
+	    XE_IOCTL_DBG(xe, ext.name >= ARRAY_SIZE(xe_eu_stall_user_extension_funcs)))
+		return -EINVAL;
+
+	idx = array_index_nospec(ext.name, ARRAY_SIZE(xe_eu_stall_user_extension_funcs));
+	err = xe_eu_stall_user_extension_funcs[idx](xe, extension, props);
+	if (XE_IOCTL_DBG(xe, err))
+		return err;
+
+	if (ext.next_extension)
+		return xe_eu_stall_user_extensions(xe, ext.next_extension, ++ext_number, props);
+
+	return 0;
+}
+
+/*
+ * Userspace must enable the EU stall stream with DRM_XE_OBSERVATION_IOCTL_ENABLE
+ * before calling read().
+ */
+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;
+}
+
+static __poll_t xe_eu_stall_stream_poll(struct file *file, poll_table *wait)
+{
+	__poll_t ret = 0;
+
+	return ret;
+}
+
+static long xe_eu_stall_stream_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
+{
+	return 0;
+}
+
+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;
+
+	if (!has_eu_stall_sampling_support(xe)) {
+		drm_dbg(&xe->drm, "EU stall monitoring is not supported on this platform\n");
+		return -ENODEV;
+	}
+
+	if (xe_observation_paranoid && !perfmon_capable()) {
+		drm_dbg(&xe->drm,  "Insufficient privileges for EU stall monitoring\n");
+		return -EACCES;
+	}
+
+	ret = xe_eu_stall_user_extensions(xe, data, 0, &props);
+	if (ret)
+		return ret;
+
+	if (!props.gt) {
+		drm_dbg(&xe->drm, "GT ID not provided for EU stall sampling\n");
+		return -EINVAL;
+	}
+
+	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..c1aef8adac6e
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_eu_stall.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2025 Intel Corporation
+ */
+
+#ifndef __XE_EU_STALL_H__
+#define __XE_EU_STALL_H__
+
+#include "xe_gt_types.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..5011d0736644 100644
--- a/drivers/gpu/drm/xe/xe_observation.c
+++ b/drivers/gpu/drm/xe/xe_observation.c
@@ -8,6 +8,7 @@
 
 #include <uapi/drm/xe_drm.h>
 
+#include "xe_eu_stall.h"
 #include "xe_oa.h"
 #include "xe_observation.h"
 
@@ -29,6 +30,17 @@ static int xe_oa_ioctl(struct drm_device *dev, struct drm_xe_observation_param *
 	}
 }
 
+static int xe_eu_stall_ioctl(struct drm_device *dev, struct drm_xe_observation_param *arg,
+			     struct drm_file *file)
+{
+	switch (arg->observation_op) {
+	case DRM_XE_OBSERVATION_OP_STREAM_OPEN:
+		return xe_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 892f54d3aa09..95cb9e65540b 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -1496,6 +1496,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,
 };
 
 /**
@@ -1848,6 +1850,42 @@ enum drm_xe_pxp_session_type {
 /* ID of the protected content session managed by Xe when PXP is active */
 #define DRM_XE_PXP_HWDRM_DEFAULT_SESSION 0xf
 
+/**
+ * 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 a blocked poll or read.
+	 */
+	DRM_XE_EU_STALL_PROP_WAIT_NUM_REPORTS,
+};
+
 #if defined(__cplusplus)
 }
 #endif
-- 
2.48.1


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

* [PATCH v10 3/8] drm/xe/eustall: Add support to init, enable and disable EU stall sampling
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
  2025-02-18 19:53 ` [PATCH v10 1/8] drm/xe/topology: Add a function to find the index of the last enabled DSS in a mask Harish Chegondi
  2025-02-18 19:53 ` [PATCH v10 2/8] drm/xe/uapi: Introduce API for EU stall sampling Harish Chegondi
@ 2025-02-18 19:53 ` Harish Chegondi
  2025-02-19 15:27   ` Dixit, Ashutosh
  2025-02-18 19:53 ` [PATCH v10 4/8] drm/xe/eustall: Add support to read() and poll() EU stall data Harish Chegondi
                   ` (13 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Harish Chegondi @ 2025-02-18 19:53 UTC (permalink / raw)
  To: intel-xe
  Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, 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.

v10: Fixed error rewinding code
     Moved code around as per review feedback
v9: Moved structure definitions from xe_eu_stall.h to xe_eu_stall.c
    Moved read and poll implementations to the next patch
    Used xe_bo_create_pin_map_at_aligned instead of xe_bo_create_pin_map
    Changed lock names as per review feedback
    Moved drop data handling into a subsequent patch
    Moved code around as per review feedback
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           | 368 ++++++++++++++++++++-
 drivers/gpu/drm/xe/xe_eu_stall.h           |   2 +
 drivers/gpu/drm/xe/xe_gt.c                 |   6 +
 drivers/gpu/drm/xe/xe_gt_types.h           |   3 +
 5 files changed, 401 insertions(+), 7 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 79af41be9c02..01d8c40577d1 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.c
+++ b/drivers/gpu/drm/xe/xe_eu_stall.c
@@ -8,14 +8,54 @@
 #include <linux/poll.h>
 #include <linux/types.h>
 
+#include <drm/drm_drv.h>
 #include <uapi/drm/xe_drm.h>
 
+#include "xe_bo.h"
 #include "xe_device.h"
 #include "xe_eu_stall.h"
+#include "xe_force_wake.h"
+#include "xe_gt_mcr.h"
 #include "xe_gt_printk.h"
 #include "xe_gt_topology.h"
 #include "xe_macros.h"
 #include "xe_observation.h"
+#include "xe_pm.h"
+
+#include "regs/xe_eu_stall_regs.h"
+#include "regs/xe_gt_regs.h"
+
+#define POLL_PERIOD_MS	10
+
+static size_t per_xecore_buf_size = SZ_512K;
+
+struct per_xecore_buf {
+	/* Buffer vaddr */
+	u8 *vaddr;
+	/* Write pointer */
+	u32 write;
+	/* Read pointer */
+	u32 read;
+};
+
+struct xe_eu_stall_data_stream {
+	bool enabled;
+	size_t data_record_size;
+	size_t per_xecore_buf_size;
+	unsigned int wait_num_reports;
+	unsigned int sampling_rate_mult;
+
+	struct xe_gt *gt;
+	struct xe_bo *bo;
+	struct per_xecore_buf *xecore_buf;
+};
+
+struct xe_eu_stall_gt {
+	/* Lock to protect stream */
+	struct mutex stream_lock;
+	/* EU stall data stream */
+	struct xe_eu_stall_data_stream *stream;
+};
 
 /**
  * struct eu_stall_open_properties - EU stall sampling properties received
@@ -31,6 +71,77 @@ struct eu_stall_open_properties {
 	struct xe_gt *gt;
 };
 
+/*
+ * EU stall data format for PVC
+ */
+struct xe_eu_stall_data_pvc {
+	__u64 ip_addr:29;	  /* Bits 0  to 28  */
+	__u64 active_count:8;	  /* Bits 29 to 36  */
+	__u64 other_count:8;	  /* Bits 37 to 44  */
+	__u64 control_count:8;	  /* Bits 45 to 52  */
+	__u64 pipestall_count:8;  /* Bits 53 to 60  */
+	__u64 send_count:8;	  /* Bits 61 to 68  */
+	__u64 dist_acc_count:8;	  /* Bits 69 to 76  */
+	__u64 sbid_count:8;	  /* Bits 77 to 84  */
+	__u64 sync_count:8;	  /* Bits 85 to 92  */
+	__u64 inst_fetch_count:8; /* Bits 93 to 100 */
+	__u64 unused_bits:27;
+	__u64 unused[6];
+} __packed;
+
+static size_t xe_eu_stall_data_record_size(struct xe_device *xe)
+{
+	size_t record_size = 0;
+
+	if (xe->info.platform == XE_PVC)
+		record_size = sizeof(struct xe_eu_stall_data_pvc);
+
+	xe_assert(xe, is_power_of_2(record_size));
+
+	return record_size;
+}
+
+/**
+ * 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 u32 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(&gt->eu_stall->stream_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(&gt->eu_stall->stream_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)
 {
@@ -140,6 +251,134 @@ static ssize_t xe_eu_stall_stream_read(struct file *file, char __user *buf,
 	return ret;
 }
 
+static void xe_eu_stall_stream_free(struct xe_eu_stall_data_stream *stream)
+{
+	struct xe_gt *gt = stream->gt;
+
+	gt->eu_stall->stream = NULL;
+	kfree(stream);
+}
+
+static void xe_eu_stall_data_buf_destroy(struct xe_eu_stall_data_stream *stream)
+{
+	xe_bo_unpin_map_no_vm(stream->bo);
+	kfree(stream->xecore_buf);
+}
+
+static int xe_eu_stall_data_buf_alloc(struct xe_eu_stall_data_stream *stream,
+				      u16 last_xecore)
+{
+	struct xe_tile *tile = stream->gt->tile;
+	struct xe_bo *bo;
+	u32 size;
+
+	size = stream->per_xecore_buf_size * last_xecore;
+
+	bo = xe_bo_create_pin_map_at_aligned(tile->xe, tile, NULL,
+					     size, ~0ull, ttm_bo_type_kernel,
+					     XE_BO_FLAG_SYSTEM | XE_BO_FLAG_GGTT, SZ_64);
+	if (IS_ERR(bo))
+		return PTR_ERR(bo);
+
+	XE_WARN_ON(!IS_ALIGNED(xe_bo_ggtt_addr(bo), SZ_64));
+	stream->bo = bo;
+
+	return 0;
+}
+
+static int xe_eu_stall_stream_enable(struct xe_eu_stall_data_stream *stream)
+{
+	u32 write_ptr_reg, write_ptr, read_ptr_reg, reg_value;
+	struct per_xecore_buf *xecore_buf;
+	struct xe_gt *gt = stream->gt;
+	u16 group, instance;
+	unsigned int fw_ref;
+	int xecore;
+
+	/* 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");
+		xe_pm_runtime_put(gt_to_xe(gt));
+		return -ETIMEDOUT;
+	}
+
+	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);
+		read_ptr_reg = REG_FIELD_PREP(XEHPC_EUSTALL_REPORT1_READ_PTR_MASK, write_ptr);
+		read_ptr_reg = _MASKED_FIELD(XEHPC_EUSTALL_REPORT1_READ_PTR_MASK, read_ptr_reg);
+		/* Initialize the read pointer to the write pointer */
+		xe_gt_mcr_unicast_write(gt, XEHPC_EUSTALL_REPORT1, read_ptr_reg, group, instance);
+		write_ptr <<= 6;
+		write_ptr &= (stream->per_xecore_buf_size << 1) - 1;
+		xecore_buf = &stream->xecore_buf[xecore];
+		xecore_buf->write = write_ptr;
+		xecore_buf->read = write_ptr;
+	}
+	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,
+						 stream->sampling_rate_mult));
+	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_CTRL, reg_value);
+	/* GGTT addresses can never be > 32 bits */
+	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE_UPPER, 0);
+	reg_value = xe_bo_ggtt_addr(stream->bo);
+	reg_value |= REG_FIELD_PREP(XEHPC_EUSTALL_BASE_XECORE_BUF_SZ,
+				    stream->per_xecore_buf_size / SZ_256K);
+	reg_value |= XEHPC_EUSTALL_BASE_ENABLE_SAMPLING;
+	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, reg_value);
+
+	return 0;
+}
+
+static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
+				   struct eu_stall_open_properties *props)
+{
+	unsigned int max_wait_num_reports, xecore, last_xecore, num_xecores;
+	struct per_xecore_buf *xecore_buf;
+	struct xe_gt *gt = stream->gt;
+	xe_dss_mask_t all_xecores;
+	u16 group, instance;
+	u32 vaddr_offset;
+	int ret;
+
+	bitmap_or(all_xecores, gt->fuse_topo.g_dss_mask, gt->fuse_topo.c_dss_mask,
+		  XE_MAX_DSS_FUSE_BITS);
+	num_xecores = bitmap_weight(all_xecores, XE_MAX_DSS_FUSE_BITS);
+	last_xecore = xe_gt_topology_mask_last_dss(all_xecores) + 1;
+
+	max_wait_num_reports = num_data_rows(per_xecore_buf_size * num_xecores);
+	if (props->wait_num_reports == 0 || props->wait_num_reports > max_wait_num_reports) {
+		xe_gt_dbg(gt, "Invalid EU stall event report count %u\n",
+			  props->wait_num_reports);
+		xe_gt_dbg(gt, "Minimum event report count is 1, maximum is %u\n",
+			  max_wait_num_reports);
+		return -EINVAL;
+	}
+	stream->per_xecore_buf_size = per_xecore_buf_size;
+	stream->sampling_rate_mult = props->sampling_rate_mult;
+	stream->wait_num_reports = props->wait_num_reports;
+	stream->data_record_size = xe_eu_stall_data_record_size(gt_to_xe(gt));
+	stream->xecore_buf = kcalloc(last_xecore, sizeof(*stream->xecore_buf), GFP_KERNEL);
+	if (!stream->xecore_buf)
+		return -ENOMEM;
+
+	ret = xe_eu_stall_data_buf_alloc(stream, last_xecore);
+	if (ret) {
+		kfree(stream->xecore_buf);
+		return ret;
+	}
+
+	for_each_dss_steering(xecore, gt, 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;
+	}
+	return 0;
+}
+
 static __poll_t xe_eu_stall_stream_poll(struct file *file, poll_table *wait)
 {
 	__poll_t ret = 0;
@@ -147,13 +386,75 @@ static __poll_t xe_eu_stall_stream_poll(struct file *file, poll_table *wait)
 	return ret;
 }
 
-static long xe_eu_stall_stream_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
+static int xe_eu_stall_enable_locked(struct xe_eu_stall_data_stream *stream)
+{
+	int ret = 0;
+
+	if (stream->enabled)
+		return ret;
+
+	stream->enabled = true;
+
+	ret = xe_eu_stall_stream_enable(stream);
+	return ret;
+}
+
+static int xe_eu_stall_disable_locked(struct xe_eu_stall_data_stream *stream)
 {
+	struct xe_gt *gt = stream->gt;
+
+	if (!stream->enabled)
+		return 0;
+
+	stream->enabled = false;
+
+	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, 0);
+
+	xe_force_wake_put(gt_to_fw(gt), XE_FW_RENDER);
+	xe_pm_runtime_put(gt_to_xe(gt));
+
 	return 0;
 }
 
+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:
+		return xe_eu_stall_enable_locked(stream);
+	case DRM_XE_OBSERVATION_IOCTL_DISABLE:
+		return xe_eu_stall_disable_locked(stream);
+	}
+
+	return -EINVAL;
+}
+
+static long xe_eu_stall_stream_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
+{
+	struct xe_eu_stall_data_stream *stream = file->private_data;
+	struct xe_gt *gt = stream->gt;
+	long ret;
+
+	mutex_lock(&gt->eu_stall->stream_lock);
+	ret = xe_eu_stall_stream_ioctl_locked(stream, cmd, arg);
+	mutex_unlock(&gt->eu_stall->stream_lock);
+
+	return ret;
+}
+
 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;
+
+	drm_dev_put(&gt->tile->xe->drm);
+
+	mutex_lock(&gt->eu_stall->stream_lock);
+	xe_eu_stall_disable_locked(stream);
+	xe_eu_stall_data_buf_destroy(stream);
+	xe_eu_stall_stream_free(stream);
+	mutex_unlock(&gt->eu_stall->stream_lock);
+
 	return 0;
 }
 
@@ -169,7 +470,56 @@ 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;
+}
+
+static int xe_eu_stall_stream_open_locked(struct drm_device *dev,
+					  struct eu_stall_open_properties *props,
+					  struct drm_file *file)
+{
+	struct xe_eu_stall_data_stream *stream;
+	struct xe_gt *gt = props->gt;
+	unsigned long f_flags = 0;
+	int ret, stream_fd;
+
+	/* 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_free;
+	}
+
+	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_destroy;
+	}
+
+	/* Take a reference on the driver that will be kept with stream_fd
+	 * until its release.
+	 */
+	drm_dev_get(&gt->tile->xe->drm);
+
+	return stream_fd;
+
+err_destroy:
+	xe_eu_stall_data_buf_destroy(stream);
+err_free:
+	xe_eu_stall_stream_free(stream);
+	return ret;
 }
 
 /**
@@ -189,7 +539,7 @@ int xe_eu_stall_stream_open(struct drm_device *dev, u64 data, struct drm_file *f
 {
 	struct xe_device *xe = to_xe_device(dev);
 	struct eu_stall_open_properties props = {};
-	int ret, stream_fd;
+	int ret;
 
 	if (!has_eu_stall_sampling_support(xe)) {
 		drm_dbg(&xe->drm, "EU stall monitoring is not supported on this platform\n");
@@ -201,6 +551,10 @@ int xe_eu_stall_stream_open(struct drm_device *dev, u64 data, struct drm_file *f
 		return -EACCES;
 	}
 
+	/* Initialize and set default values */
+	props.wait_num_reports = 1;
+	props.sampling_rate_mult = 4;
+
 	ret = xe_eu_stall_user_extensions(xe, data, 0, &props);
 	if (ret)
 		return ret;
@@ -210,9 +564,9 @@ int xe_eu_stall_stream_open(struct drm_device *dev, u64 data, struct drm_file *f
 		return -EINVAL;
 	}
 
-	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);
+	mutex_lock(&props.gt->eu_stall->stream_lock);
+	ret = xe_eu_stall_stream_open_locked(dev, &props, file);
+	mutex_unlock(&props.gt->eu_stall->stream_lock);
 
-	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 c1aef8adac6e..60d84b46dc2b 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.h
+++ b/drivers/gpu/drm/xe/xe_eu_stall.h
@@ -8,6 +8,8 @@
 
 #include "xe_gt_types.h"
 
+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 650a0ee56e97..8c4441752500 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -19,6 +19,7 @@
 #include "xe_bb.h"
 #include "xe_bo.h"
 #include "xe_device.h"
+#include "xe_eu_stall.h"
 #include "xe_exec_queue.h"
 #include "xe_execlist.h"
 #include "xe_force_wake.h"
@@ -561,6 +562,7 @@ static void xe_gt_fini(void *arg)
 	struct xe_gt *gt = arg;
 	int i;
 
+	xe_eu_stall_fini(gt);
 	for (i = 0; i < XE_ENGINE_CLASS_MAX; ++i)
 		xe_hw_fence_irq_finish(&gt->fence_irq[i]);
 
@@ -613,6 +615,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
-- 
2.48.1


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

* [PATCH v10 4/8] drm/xe/eustall: Add support to read() and poll() EU stall data
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
                   ` (2 preceding siblings ...)
  2025-02-18 19:53 ` [PATCH v10 3/8] drm/xe/eustall: Add support to init, enable and disable " Harish Chegondi
@ 2025-02-18 19:53 ` Harish Chegondi
  2025-02-19 18:15   ` Dixit, Ashutosh
  2025-02-18 19:53 ` [PATCH v10 5/8] drm/xe/eustall: Add support to handle dropped " Harish Chegondi
                   ` (12 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Harish Chegondi @ 2025-02-18 19:53 UTC (permalink / raw)
  To: intel-xe
  Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, matthew.olson,
	lucas.demarchi, Harish Chegondi

Implement the EU stall sampling APIs to read() and poll() EU stall data.
A work function 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.

v10: Used cancel_delayed_work_sync() instead of flush_delayed_work()
     Replaced per xecore lock with a lock for all the xecore buffers
     Code movement and optimizations as per review feedback
v9:  New patch split from the previous patch.
     Used *_delayed_work functions instead of hrtimer
     Addressed the review feedback in read and poll functions

Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
---
 drivers/gpu/drm/xe/xe_eu_stall.c | 263 ++++++++++++++++++++++++++++++-
 drivers/gpu/drm/xe/xe_trace.h    |  33 ++++
 2 files changed, 293 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
index 01d8c40577d1..122dc99cd09b 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.c
+++ b/drivers/gpu/drm/xe/xe_eu_stall.c
@@ -21,6 +21,7 @@
 #include "xe_macros.h"
 #include "xe_observation.h"
 #include "xe_pm.h"
+#include "xe_trace.h"
 
 #include "regs/xe_eu_stall_regs.h"
 #include "regs/xe_gt_regs.h"
@@ -39,7 +40,9 @@ struct per_xecore_buf {
 };
 
 struct xe_eu_stall_data_stream {
+	bool pollin;
 	bool enabled;
+	wait_queue_head_t poll_wq;
 	size_t data_record_size;
 	size_t per_xecore_buf_size;
 	unsigned int wait_num_reports;
@@ -47,7 +50,11 @@ struct xe_eu_stall_data_stream {
 
 	struct xe_gt *gt;
 	struct xe_bo *bo;
+	/* Lock to protect xecore_buf */
+	struct mutex buf_lock;
 	struct per_xecore_buf *xecore_buf;
+	struct delayed_work buf_poll_work;
+	struct workqueue_struct *buf_poll_wq;
 };
 
 struct xe_eu_stall_gt {
@@ -239,6 +246,174 @@ 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;
+
+	if (read_ptr == write_ptr)
+		goto exit;
+
+	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;
+exit:
+	return size;
+}
+
+/**
+ * eu_stall_data_buf_poll - Poll 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_poll(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 per_xecore_buf *xecore_buf;
+	struct xe_gt *gt = stream->gt;
+	bool min_data_present = false;
+	u16 group, instance;
+	unsigned int xecore;
+
+	mutex_lock(&stream->buf_lock);
+	for_each_dss_steering(xecore, gt, group, instance) {
+		xecore_buf = &stream->xecore_buf[xecore];
+		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 (!min_data_present) {
+			total_data += buf_data_size(buf_size, read_ptr, write_ptr);
+			if (num_data_rows(total_data) >= stream->wait_num_reports)
+				min_data_present = true;
+		}
+		xecore_buf->write = write_ptr;
+	}
+	mutex_unlock(&stream->buf_lock);
+
+	return min_data_present;
+}
+
+static int xe_eu_stall_data_buf_read(struct xe_eu_stall_data_stream *stream,
+				     char __user *buf, size_t count,
+				     size_t *total_data_size, struct xe_gt *gt,
+				     u16 group, u16 instance, unsigned int xecore)
+{
+	size_t read_data_size, copy_size, buf_size;
+	u32 read_ptr_reg, read_ptr, write_ptr;
+	u8 *xecore_start_vaddr, *read_vaddr;
+	struct per_xecore_buf *xecore_buf;
+	u32 read_offset, write_offset;
+
+	/* 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];
+	xecore_start_vaddr = xecore_buf->vaddr;
+	read_ptr = xecore_buf->read;
+	write_ptr = xecore_buf->write;
+	buf_size = stream->per_xecore_buf_size;
+
+	read_data_size = buf_data_size(buf_size, read_ptr, write_ptr);
+	/* Read only the data that the user space buffer can accommodate */
+	read_data_size = min_t(size_t, count - *total_data_size, read_data_size);
+	if (read_data_size == 0)
+		return 0;
+
+	read_offset = read_ptr & (buf_size - 1);
+	write_offset = write_ptr & (buf_size - 1);
+	read_vaddr = xecore_start_vaddr + read_offset;
+
+	if (write_offset > read_offset) {
+		if (copy_to_user(buf + *total_data_size, read_vaddr, read_data_size))
+			return -EFAULT;
+	} else {
+		if (read_data_size >= buf_size - read_offset)
+			copy_size = buf_size - read_offset;
+		else
+			copy_size = read_data_size;
+		if (copy_to_user(buf + *total_data_size, read_vaddr, copy_size))
+			return -EFAULT;
+		if (copy_to_user(buf + *total_data_size + copy_size,
+				 xecore_start_vaddr, read_data_size - copy_size))
+			return -EFAULT;
+	}
+
+	*total_data_size += read_data_size;
+	read_ptr += read_data_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 = _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->read = read_ptr;
+	trace_xe_eu_stall_data_read(group, instance, read_ptr, write_ptr,
+				    read_offset, write_offset, *total_data_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
+ * @file: An xe EU stall data stream file
+ * @buf: destination buffer given by userspace
+ * @count: the number of bytes userspace wants to read
+ *
+ * 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)
+{
+	struct xe_gt *gt = stream->gt;
+	size_t total_size = 0;
+	u16 group, instance;
+	unsigned int xecore;
+	int ret = 0;
+
+	mutex_lock(&stream->buf_lock);
+	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)
+			break;
+	}
+	mutex_unlock(&stream->buf_lock);
+	return total_size ?: (ret ?: -EAGAIN);
+}
+
 /*
  * Userspace must enable the EU stall stream with DRM_XE_OBSERVATION_IOCTL_ENABLE
  * before calling read().
@@ -246,7 +421,41 @@ 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, aligned_count;
+
+	aligned_count = ALIGN_DOWN(count, stream->data_record_size);
+	if (aligned_count == 0)
+		return -EINVAL;
+
+	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 {
+			ret = wait_event_interruptible(stream->poll_wq, stream->pollin);
+			if (ret)
+				return -EINTR;
+
+			mutex_lock(&gt->eu_stall->stream_lock);
+			ret = xe_eu_stall_stream_read_locked(stream, file, buf, aligned_count);
+			mutex_unlock(&gt->eu_stall->stream_lock);
+		} while (ret == -EAGAIN);
+	} else {
+		mutex_lock(&gt->eu_stall->stream_lock);
+		ret = xe_eu_stall_stream_read_locked(stream, file, buf, aligned_count);
+		mutex_unlock(&gt->eu_stall->stream_lock);
+	}
+
+	/*
+	 * This may not work correctly if the user buffer is very small.
+	 * We don't want to block the next read() when there is data in the buffer
+	 * now, but couldn't be accommodated in the small user buffer.
+	 */
+	stream->pollin = false;
 
 	return ret;
 }
@@ -261,6 +470,7 @@ static void xe_eu_stall_stream_free(struct xe_eu_stall_data_stream *stream)
 
 static void xe_eu_stall_data_buf_destroy(struct xe_eu_stall_data_stream *stream)
 {
+	destroy_workqueue(stream->buf_poll_wq);
 	xe_bo_unpin_map_no_vm(stream->bo);
 	kfree(stream->xecore_buf);
 }
@@ -333,6 +543,19 @@ static int xe_eu_stall_stream_enable(struct xe_eu_stall_data_stream *stream)
 	return 0;
 }
 
+static void eu_stall_data_buf_poll_work_fn(struct work_struct *work)
+{
+	struct xe_eu_stall_data_stream *stream =
+		container_of(work, typeof(*stream), buf_poll_work.work);
+
+	if (eu_stall_data_buf_poll(stream)) {
+		stream->pollin = true;
+		wake_up(&stream->poll_wq);
+	}
+	queue_delayed_work(stream->buf_poll_wq, &stream->buf_poll_work,
+			   msecs_to_jiffies(POLL_PERIOD_MS));
+}
+
 static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
 				   struct eu_stall_open_properties *props)
 {
@@ -357,16 +580,26 @@ static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
 			  max_wait_num_reports);
 		return -EINVAL;
 	}
+
+	init_waitqueue_head(&stream->poll_wq);
+	INIT_DELAYED_WORK(&stream->buf_poll_work, eu_stall_data_buf_poll_work_fn);
+	mutex_init(&stream->buf_lock);
+	stream->buf_poll_wq = alloc_ordered_workqueue("xe_eu_stall", 0);
+	if (!stream->buf_poll_wq)
+		return -ENOMEM;
 	stream->per_xecore_buf_size = per_xecore_buf_size;
 	stream->sampling_rate_mult = props->sampling_rate_mult;
 	stream->wait_num_reports = props->wait_num_reports;
 	stream->data_record_size = xe_eu_stall_data_record_size(gt_to_xe(gt));
 	stream->xecore_buf = kcalloc(last_xecore, sizeof(*stream->xecore_buf), GFP_KERNEL);
-	if (!stream->xecore_buf)
+	if (!stream->xecore_buf) {
+		destroy_workqueue(stream->buf_poll_wq);
 		return -ENOMEM;
+	}
 
 	ret = xe_eu_stall_data_buf_alloc(stream, last_xecore);
 	if (ret) {
+		destroy_workqueue(stream->buf_poll_wq);
 		kfree(stream->xecore_buf);
 		return ret;
 	}
@@ -379,9 +612,28 @@ static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
 	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;
+}
+
 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(&gt->eu_stall->stream_lock);
+	ret = xe_eu_stall_stream_poll_locked(stream, file, wait);
+	mutex_unlock(&gt->eu_stall->stream_lock);
 
 	return ret;
 }
@@ -396,6 +648,9 @@ static int xe_eu_stall_enable_locked(struct xe_eu_stall_data_stream *stream)
 	stream->enabled = true;
 
 	ret = xe_eu_stall_stream_enable(stream);
+
+	queue_delayed_work(stream->buf_poll_wq, &stream->buf_poll_work,
+			   msecs_to_jiffies(POLL_PERIOD_MS));
 	return ret;
 }
 
@@ -410,6 +665,8 @@ static int xe_eu_stall_disable_locked(struct xe_eu_stall_data_stream *stream)
 
 	xe_gt_mcr_multicast_write(gt, XEHPC_EUSTALL_BASE, 0);
 
+	cancel_delayed_work_sync(&stream->buf_poll_work);
+
 	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_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.48.1


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

* [PATCH v10 5/8] drm/xe/eustall: Add support to handle dropped EU stall data
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
                   ` (3 preceding siblings ...)
  2025-02-18 19:53 ` [PATCH v10 4/8] drm/xe/eustall: Add support to read() and poll() EU stall data Harish Chegondi
@ 2025-02-18 19:53 ` Harish Chegondi
  2025-02-19 18:47   ` Dixit, Ashutosh
  2025-02-18 19:53 ` [PATCH v10 6/8] drm/xe/eustall: Add EU stall sampling support for Xe2 Harish Chegondi
                   ` (11 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Harish Chegondi @ 2025-02-18 19:53 UTC (permalink / raw)
  To: intel-xe
  Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, 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.

v10: Reverted the changes back to v8:
     Clear the drop bits only after reading the data.
v9:  Move all data drop handling code to this patch
     Clear all drop data bits before returning -EIO.

Signed-off-by: Harish Chegondi <harish.chegondi@intel.com>
---
 drivers/gpu/drm/xe/xe_eu_stall.c | 39 ++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
index 122dc99cd09b..c37fa4486b2e 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.c
+++ b/drivers/gpu/drm/xe/xe_eu_stall.c
@@ -53,6 +53,10 @@ struct xe_eu_stall_data_stream {
 	/* Lock to protect xecore_buf */
 	struct mutex buf_lock;
 	struct per_xecore_buf *xecore_buf;
+	struct {
+		bool reported_to_user;
+		xe_dss_mask_t mask;
+	} data_drop;
 	struct delayed_work buf_poll_work;
 	struct workqueue_struct *buf_poll_wq;
 };
@@ -311,6 +315,8 @@ static bool eu_stall_data_buf_poll(struct xe_eu_stall_data_stream *stream)
 			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(&stream->buf_lock);
@@ -318,6 +324,16 @@ static bool eu_stall_data_buf_poll(struct xe_eu_stall_data_stream *stream)
 	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_data_size, struct xe_gt *gt,
@@ -376,6 +392,10 @@ static int xe_eu_stall_data_buf_read(struct xe_eu_stall_data_stream *stream,
 	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->read = read_ptr;
+	if (test_bit(xecore, stream->data_drop.mask)) {
+		clear_dropped_eviction_line_bit(gt, group, instance);
+		clear_bit(xecore, stream->data_drop.mask);
+	}
 	trace_xe_eu_stall_data_read(group, instance, read_ptr, write_ptr,
 				    read_offset, write_offset, *total_data_size);
 	return 0;
@@ -403,6 +423,16 @@ static ssize_t xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *st
 	unsigned int xecore;
 	int ret = 0;
 
+	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;
+	}
+
 	mutex_lock(&stream->buf_lock);
 	for_each_dss_steering(xecore, gt, group, instance) {
 		ret = xe_eu_stall_data_buf_read(stream, buf, count, &total_size,
@@ -417,6 +447,9 @@ static ssize_t xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *st
 /*
  * 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.
+ *	    -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)
@@ -516,6 +549,9 @@ static int xe_eu_stall_stream_enable(struct xe_eu_stall_data_stream *stream)
 
 	for_each_dss_steering(xecore, gt, group, instance) {
 		write_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT, group, instance);
+		/* Clear any drop bits set and not cleared in the previous session. */
+		if (write_ptr_reg & XEHPC_EUSTALL_REPORT_OVERFLOW_DROP)
+			clear_dropped_eviction_line_bit(gt, group, instance);
 		write_ptr = REG_FIELD_GET(XEHPC_EUSTALL_REPORT_WRITE_PTR_MASK, write_ptr_reg);
 		read_ptr_reg = REG_FIELD_PREP(XEHPC_EUSTALL_REPORT1_READ_PTR_MASK, write_ptr);
 		read_ptr_reg = _MASKED_FIELD(XEHPC_EUSTALL_REPORT1_READ_PTR_MASK, read_ptr_reg);
@@ -527,6 +563,9 @@ static int xe_eu_stall_stream_enable(struct xe_eu_stall_data_stream *stream)
 		xecore_buf->write = write_ptr;
 		xecore_buf->read = write_ptr;
 	}
+	stream->data_drop.reported_to_user = false;
+	bitmap_zero(stream->data_drop.mask, XE_MAX_DSS_FUSE_BITS);
+
 	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,
-- 
2.48.1


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

* [PATCH v10 6/8] drm/xe/eustall: Add EU stall sampling support for Xe2
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
                   ` (4 preceding siblings ...)
  2025-02-18 19:53 ` [PATCH v10 5/8] drm/xe/eustall: Add support to handle dropped " Harish Chegondi
@ 2025-02-18 19:53 ` Harish Chegondi
  2025-02-18 23:29   ` Dixit, Ashutosh
  2025-02-18 19:53 ` [PATCH v10 7/8] drm/xe/uapi: Add a device query to get EU stall sampling information Harish Chegondi
                   ` (10 subsequent siblings)
  16 siblings, 1 reply; 31+ messages in thread
From: Harish Chegondi @ 2025-02-18 19:53 UTC (permalink / raw)
  To: intel-xe
  Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, 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.

v10: Update comments as per review feedback

v9: Use GRAPHICS_VER() check instead of platform

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 | 35 +++++++++++++++++++++++++++++---
 1 file changed, 32 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
index c37fa4486b2e..07c891da90cc 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.c
+++ b/drivers/gpu/drm/xe/xe_eu_stall.c
@@ -100,12 +100,35 @@ struct xe_eu_stall_data_pvc {
 	__u64 unused[6];
 } __packed;
 
+/*
+ * EU stall data format for Xe2 arch GPUs (LNL, BMG).
+ */
+struct xe_eu_stall_data_xe2 {
+	__u64 ip_addr:29;	  /* Bits 0  to 28  */
+	__u64 tdr_count:8;	  /* Bits 29 to 36  */
+	__u64 other_count:8;	  /* Bits 37 to 44  */
+	__u64 control_count:8;	  /* Bits 45 to 52  */
+	__u64 pipestall_count:8;  /* Bits 53 to 60  */
+	__u64 send_count:8;	  /* Bits 61 to 68  */
+	__u64 dist_acc_count:8;   /* Bits 69 to 76  */
+	__u64 sbid_count:8;	  /* Bits 77 to 84  */
+	__u64 sync_count:8;	  /* Bits 85 to 92  */
+	__u64 inst_fetch_count:8; /* Bits 93 to 100 */
+	__u64 active_count:8;	  /* Bits 101 to 108 */
+	__u64 ex_id:3;		  /* Bits 109 to 111 */
+	__u64 end_flag:1;	  /* Bit  112 */
+	__u64 unused_bits:15;
+	__u64 unused[6];
+} __packed;
+
 static size_t xe_eu_stall_data_record_size(struct xe_device *xe)
 {
 	size_t record_size = 0;
 
 	if (xe->info.platform == XE_PVC)
 		record_size = sizeof(struct xe_eu_stall_data_pvc);
+	else if (GRAPHICS_VER(xe) >= 20)
+		record_size = sizeof(struct xe_eu_stall_data_xe2);
 
 	xe_assert(xe, is_power_of_2(record_size));
 
@@ -326,10 +349,16 @@ static bool eu_stall_data_buf_poll(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 Xe2 and later 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);
 }
@@ -766,7 +795,7 @@ 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;
+	return xe->info.platform == XE_PVC || GRAPHICS_VER(xe) >= 20;
 }
 
 static int xe_eu_stall_stream_open_locked(struct drm_device *dev,
-- 
2.48.1


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

* [PATCH v10 7/8] drm/xe/uapi: Add a device query to get EU stall sampling information
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
                   ` (5 preceding siblings ...)
  2025-02-18 19:53 ` [PATCH v10 6/8] drm/xe/eustall: Add EU stall sampling support for Xe2 Harish Chegondi
@ 2025-02-18 19:53 ` Harish Chegondi
  2025-02-18 19:53 ` [PATCH v10 8/8] drm/xe/eustall: Add workaround 22016596838 which applies to PVC Harish Chegondi
                   ` (9 subsequent siblings)
  16 siblings, 0 replies; 31+ messages in thread
From: Harish Chegondi @ 2025-02-18 19:53 UTC (permalink / raw)
  To: intel-xe
  Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, 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.

v10: Change comments and variable names as per feedback
v9: Move reserved fields above num_sampling_rates in
    struct drm_xe_query_eu_stall.
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.

Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
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 |  4 ++++
 drivers/gpu/drm/xe/xe_query.c    | 38 +++++++++++++++++++++++++++++
 include/uapi/drm/xe_drm.h        | 40 +++++++++++++++++++++++++++++--
 4 files changed, 120 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
index 07c891da90cc..f82e9e47c3fa 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.c
+++ b/drivers/gpu/drm/xe/xe_eu_stall.c
@@ -121,7 +121,46 @@ struct xe_eu_stall_data_xe2 {
 	__u64 unused[6];
 } __packed;
 
-static size_t xe_eu_stall_data_record_size(struct xe_device *xe)
+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: Pointer to a u32 to return the number of sampling rates.
+ * @rates: 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, const u64 **rates)
+{
+	*num_rates = ARRAY_SIZE(eu_stall_sampling_rates);
+	*rates = 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.
+ */
+size_t 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.
+ */
+size_t xe_eu_stall_data_record_size(struct xe_device *xe)
 {
 	size_t record_size = 0;
 
diff --git a/drivers/gpu/drm/xe/xe_eu_stall.h b/drivers/gpu/drm/xe/xe_eu_stall.h
index 60d84b46dc2b..1405c40346ec 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.h
+++ b/drivers/gpu/drm/xe/xe_eu_stall.h
@@ -8,6 +8,10 @@
 
 #include "xe_gt_types.h"
 
+size_t xe_eu_stall_get_per_xecore_buf_size(void);
+size_t xe_eu_stall_data_record_size(struct xe_device *xe);
+size_t xe_eu_stall_get_sampling_rates(u32 *num_rates, const u64 **rates);
+
 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,
diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
index 042f87a688e7..7bf4436a4e45 100644
--- a/drivers/gpu/drm/xe/xe_query.c
+++ b/drivers/gpu/drm/xe/xe_query.c
@@ -16,6 +16,7 @@
 #include "regs/xe_gt_regs.h"
 #include "xe_bo.h"
 #include "xe_device.h"
+#include "xe_eu_stall.h"
 #include "xe_exec_queue.h"
 #include "xe_force_wake.h"
 #include "xe_ggtt.h"
@@ -726,6 +727,42 @@ static int query_pxp_status(struct xe_device *xe, struct drm_xe_device_query *qu
 	return 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;
+	u32 num_rates;
+	int ret;
+
+	array_size = xe_eu_stall_get_sampling_rates(&num_rates, &rates);
+	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, 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,
@@ -738,6 +775,7 @@ static int (* const xe_query_funcs[])(struct xe_device *xe,
 	query_uc_fw_version,
 	query_oa_units,
 	query_pxp_status,
+	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 95cb9e65540b..76a462fae05f 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -735,6 +735,7 @@ struct drm_xe_device_query {
 #define DRM_XE_DEVICE_QUERY_UC_FW_VERSION	7
 #define DRM_XE_DEVICE_QUERY_OA_UNITS		8
 #define DRM_XE_DEVICE_QUERY_PXP_STATUS		9
+#define DRM_XE_DEVICE_QUERY_EU_STALL		10
 	/** @query: The type of data to query */
 	__u32 query;
 
@@ -1873,8 +1874,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,
 
@@ -1886,6 +1887,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: internal per XeCore buffer size */
+	__u64 per_xecore_buf_size;
+
+	/** @reserved: Reserved */
+	__u64 reserved[5];
+
+	/** @num_sampling_rates: Number of sampling rates in @sampling_rates array */
+	__u64 num_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[];
+};
+
 #if defined(__cplusplus)
 }
 #endif
-- 
2.48.1


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

* [PATCH v10 8/8] drm/xe/eustall: Add workaround 22016596838 which applies to PVC.
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
                   ` (6 preceding siblings ...)
  2025-02-18 19:53 ` [PATCH v10 7/8] drm/xe/uapi: Add a device query to get EU stall sampling information Harish Chegondi
@ 2025-02-18 19:53 ` Harish Chegondi
  2025-02-18 20:03 ` ✓ CI.Patch_applied: success for Add support for EU stall sampling Patchwork
                   ` (8 subsequent siblings)
  16 siblings, 0 replies; 31+ messages in thread
From: Harish Chegondi @ 2025-02-18 19:53 UTC (permalink / raw)
  To: intel-xe
  Cc: ashutosh.dixit, james.ausmus, felix.j.degrood, 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>
Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
---
 drivers/gpu/drm/xe/xe_eu_stall.c   | 10 ++++++++++
 drivers/gpu/drm/xe/xe_wa_oob.rules |  1 +
 2 files changed, 11 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
index f82e9e47c3fa..b94585bdf91c 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.c
+++ b/drivers/gpu/drm/xe/xe_eu_stall.c
@@ -9,6 +9,7 @@
 #include <linux/types.h>
 
 #include <drm/drm_drv.h>
+#include <generated/xe_wa_oob.h>
 #include <uapi/drm/xe_drm.h>
 
 #include "xe_bo.h"
@@ -22,6 +23,7 @@
 #include "xe_observation.h"
 #include "xe_pm.h"
 #include "xe_trace.h"
+#include "xe_wa.h"
 
 #include "regs/xe_eu_stall_regs.h"
 #include "regs/xe_gt_regs.h"
@@ -615,6 +617,10 @@ static int xe_eu_stall_stream_enable(struct xe_eu_stall_data_stream *stream)
 		return -ETIMEDOUT;
 	}
 
+	if (XE_WA(gt, 22016596838))
+		xe_gt_mcr_multicast_write(gt, ROW_CHICKEN2,
+					  _MASKED_BIT_ENABLE(DISABLE_DOP_GATING));
+
 	for_each_dss_steering(xecore, gt, group, instance) {
 		write_ptr_reg = xe_gt_mcr_unicast_read(gt, XEHPC_EUSTALL_REPORT, group, instance);
 		/* Clear any drop bits set and not cleared in the previous session. */
@@ -774,6 +780,10 @@ static int xe_eu_stall_disable_locked(struct xe_eu_stall_data_stream *stream)
 
 	cancel_delayed_work_sync(&stream->buf_poll_work);
 
+	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 228436532282..8e2cae7f7135 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.48.1


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

* ✓ CI.Patch_applied: success for Add support for EU stall sampling
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
                   ` (7 preceding siblings ...)
  2025-02-18 19:53 ` [PATCH v10 8/8] drm/xe/eustall: Add workaround 22016596838 which applies to PVC Harish Chegondi
@ 2025-02-18 20:03 ` Patchwork
  2025-02-18 20:03 ` ✗ CI.checkpatch: warning " Patchwork
                   ` (7 subsequent siblings)
  16 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2025-02-18 20:03 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

== Series Details ==

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

== Summary ==

=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: adeeb34d0f0e drm-tip: 2025y-02m-18d-16h-31m-36s 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: Add support to init, enable and disable EU stall sampling
Applying: drm/xe/eustall: Add support to read() and poll() EU stall data
Applying: drm/xe/eustall: Add support to handle dropped EU stall 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] 31+ messages in thread

* ✗ CI.checkpatch: warning for Add support for EU stall sampling
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
                   ` (8 preceding siblings ...)
  2025-02-18 20:03 ` ✓ CI.Patch_applied: success for Add support for EU stall sampling Patchwork
@ 2025-02-18 20:03 ` Patchwork
  2025-02-18 20:05 ` ✓ CI.KUnit: success " Patchwork
                   ` (6 subsequent siblings)
  16 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2025-02-18 20:03 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

== Series Details ==

Series: Add support for EU stall sampling
URL   : https://patchwork.freedesktop.org/series/145038/
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
22f9cda3436b4fe965b5c5f31d2f2c1bcb483189
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit e535495a42c89e8a25bf59337a7f8f3a946d5d22
Author: Harish Chegondi <harish.chegondi@intel.com>
Date:   Tue Feb 18 11:53:58 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>
    Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
+ /mt/dim checkpatch adeeb34d0f0e6463bea93984a56eed4e3ee0f074 drm-intel
2bf2a85b5202 drm/xe/topology: Add a function to find the index of the last enabled DSS in a mask
fc27a2ce4490 drm/xe/uapi: Introduce API for EU stall sampling
-:59: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#59: 
new file mode 100644

total: 0 errors, 1 warnings, 0 checks, 321 lines checked
f846af7eb8d5 drm/xe/eustall: Add support to init, enable and disable EU stall sampling
-:30: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#30: 
new file mode 100644

total: 0 errors, 1 warnings, 0 checks, 499 lines checked
9f9437ef826a drm/xe/eustall: Add support to read() and poll() EU stall data
79605ff2a138 drm/xe/eustall: Add support to handle dropped EU stall data
9ded1bafce73 drm/xe/eustall: Add EU stall sampling support for Xe2
4bb74d6cd7c5 drm/xe/uapi: Add a device query to get EU stall sampling information
e535495a42c8 drm/xe/eustall: Add workaround 22016596838 which applies to PVC.



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

* ✓ CI.KUnit: success for Add support for EU stall sampling
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
                   ` (9 preceding siblings ...)
  2025-02-18 20:03 ` ✗ CI.checkpatch: warning " Patchwork
@ 2025-02-18 20:05 ` Patchwork
  2025-02-18 20:21 ` ✓ CI.Build: " Patchwork
                   ` (5 subsequent siblings)
  16 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2025-02-18 20:05 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

== Series Details ==

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

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[20:03:56] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[20:04:00] 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:04:26] Starting KUnit Kernel (1/1)...
[20:04:26] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[20:04:26] ================== guc_buf (11 subtests) ===================
[20:04:26] [PASSED] test_smallest
[20:04:26] [PASSED] test_largest
[20:04:26] [PASSED] test_granular
[20:04:26] [PASSED] test_unique
[20:04:26] [PASSED] test_overlap
[20:04:26] [PASSED] test_reusable
[20:04:26] [PASSED] test_too_big
[20:04:26] [PASSED] test_flush
[20:04:26] [PASSED] test_lookup
[20:04:26] [PASSED] test_data
[20:04:26] [PASSED] test_class
[20:04:26] ===================== [PASSED] guc_buf =====================
[20:04:26] =================== guc_dbm (7 subtests) ===================
[20:04:26] [PASSED] test_empty
[20:04:26] [PASSED] test_default
[20:04:26] ======================== test_size  ========================
[20:04:26] [PASSED] 4
[20:04:26] [PASSED] 8
[20:04:26] [PASSED] 32
[20:04:26] [PASSED] 256
[20:04:26] ==================== [PASSED] test_size ====================
[20:04:26] ======================= test_reuse  ========================
[20:04:26] [PASSED] 4
[20:04:26] [PASSED] 8
[20:04:26] [PASSED] 32
[20:04:26] [PASSED] 256
[20:04:26] =================== [PASSED] test_reuse ====================
[20:04:26] =================== test_range_overlap  ====================
[20:04:26] [PASSED] 4
[20:04:26] [PASSED] 8
[20:04:26] [PASSED] 32
[20:04:26] [PASSED] 256
[20:04:26] =============== [PASSED] test_range_overlap ================
[20:04:26] =================== test_range_compact  ====================
[20:04:26] [PASSED] 4
[20:04:26] [PASSED] 8
[20:04:26] [PASSED] 32
[20:04:26] [PASSED] 256
[20:04:26] =============== [PASSED] test_range_compact ================
[20:04:26] ==================== test_range_spare  =====================
[20:04:26] [PASSED] 4
[20:04:26] [PASSED] 8
[20:04:26] [PASSED] 32
[20:04:26] [PASSED] 256
[20:04:26] ================ [PASSED] test_range_spare =================
[20:04:26] ===================== [PASSED] guc_dbm =====================
[20:04:26] =================== guc_idm (6 subtests) ===================
[20:04:26] [PASSED] bad_init
[20:04:26] [PASSED] no_init
[20:04:26] [PASSED] init_fini
[20:04:26] [PASSED] check_used
[20:04:26] [PASSED] check_quota
[20:04:26] [PASSED] check_all
[20:04:26] ===================== [PASSED] guc_idm =====================
[20:04:26] ================== no_relay (3 subtests) ===================
[20:04:26] [PASSED] xe_drops_guc2pf_if_not_ready
[20:04:26] [PASSED] xe_drops_guc2vf_if_not_ready
[20:04:26] [PASSED] xe_rejects_send_if_not_ready
[20:04:26] ==================== [PASSED] no_relay =====================
[20:04:26] ================== pf_relay (14 subtests) ==================
[20:04:26] [PASSED] pf_rejects_guc2pf_too_short
[20:04:26] [PASSED] pf_rejects_guc2pf_too_long
[20:04:26] [PASSED] pf_rejects_guc2pf_no_payload
[20:04:26] [PASSED] pf_fails_no_payload
[20:04:26] [PASSED] pf_fails_bad_origin
[20:04:26] [PASSED] pf_fails_bad_type
[20:04:26] [PASSED] pf_txn_reports_error
[20:04:26] [PASSED] pf_txn_sends_pf2guc
[20:04:26] [PASSED] pf_sends_pf2guc
[20:04:26] [SKIPPED] pf_loopback_nop
[20:04:26] [SKIPPED] pf_loopback_echo
[20:04:26] [SKIPPED] pf_loopback_fail
[20:04:26] [SKIPPED] pf_loopback_busy
[20:04:26] [SKIPPED] pf_loopback_retry
[20:04:26] ==================== [PASSED] pf_relay =====================
[20:04:26] ================== vf_relay (3 subtests) ===================
[20:04:26] [PASSED] vf_rejects_guc2vf_too_short
[20:04:26] [PASSED] vf_rejects_guc2vf_too_long
[20:04:26] [PASSED] vf_rejects_guc2vf_no_payload
[20:04:26] ==================== [PASSED] vf_relay =====================
[20:04:26] ================= pf_service (11 subtests) =================
[20:04:26] [PASSED] pf_negotiate_any
[20:04:26] [PASSED] pf_negotiate_base_match
[20:04:26] [PASSED] pf_negotiate_base_newer
[20:04:26] [PASSED] pf_negotiate_base_next
[20:04:26] [SKIPPED] pf_negotiate_base_older
[20:04:26] [PASSED] pf_negotiate_base_prev
[20:04:26] [PASSED] pf_negotiate_latest_match
[20:04:26] [PASSED] pf_negotiate_latest_newer
[20:04:26] [PASSED] pf_negotiate_latest_next
[20:04:26] [SKIPPED] pf_negotiate_latest_older
[20:04:26] [SKIPPED] pf_negotiate_latest_prev
[20:04:26] =================== [PASSED] pf_service ====================
[20:04:26] ===================== lmtt (1 subtest) =====================
[20:04:26] ======================== test_ops  =========================
[20:04:26] [PASSED] 2-level
[20:04:26] [PASSED] multi-level
[20:04:26] ==================== [PASSED] test_ops =====================
[20:04:26] ====================== [PASSED] lmtt =======================
[20:04:26] =================== xe_mocs (2 subtests) ===================
[20:04:26] ================ xe_live_mocs_kernel_kunit  ================
[20:04:26] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[20:04:26] ================ xe_live_mocs_reset_kunit  =================
[20:04:26] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[20:04:26] ==================== [SKIPPED] xe_mocs =====================
[20:04:26] ================= xe_migrate (2 subtests) ==================
[20:04:26] ================= xe_migrate_sanity_kunit  =================
[20:04:26] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[20:04:26] ================== xe_validate_ccs_kunit  ==================
[20:04:26] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[20:04:26] =================== [SKIPPED] xe_migrate ===================
[20:04:26] ================== xe_dma_buf (1 subtest) ==================
[20:04:26] ==================== xe_dma_buf_kunit  =====================
[20:04:26] ================ [SKIPPED] xe_dma_buf_kunit ================
[20:04:26] =================== [SKIPPED] xe_dma_buf ===================
[20:04:26] ================= xe_bo_shrink (1 subtest) =================
[20:04:26] =================== xe_bo_shrink_kunit  ====================
[20:04:26] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[20:04:26] ================== [SKIPPED] xe_bo_shrink ==================
[20:04:26] ==================== xe_bo (2 subtests) ====================
[20:04:26] ================== xe_ccs_migrate_kunit  ===================
[20:04:26] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
stty: 'standard input': Inappropriate ioctl for device
[20:04:26] ==================== xe_bo_evict_kunit  ====================
[20:04:26] =============== [SKIPPED] xe_bo_evict_kunit ================
[20:04:26] ===================== [SKIPPED] xe_bo ======================
[20:04:26] ==================== args (11 subtests) ====================
[20:04:26] [PASSED] count_args_test
[20:04:26] [PASSED] call_args_example
[20:04:26] [PASSED] call_args_test
[20:04:26] [PASSED] drop_first_arg_example
[20:04:26] [PASSED] drop_first_arg_test
[20:04:26] [PASSED] first_arg_example
[20:04:26] [PASSED] first_arg_test
[20:04:26] [PASSED] last_arg_example
[20:04:26] [PASSED] last_arg_test
[20:04:26] [PASSED] pick_arg_example
[20:04:26] [PASSED] sep_comma_example
[20:04:26] ====================== [PASSED] args =======================
[20:04:26] =================== xe_pci (2 subtests) ====================
[20:04:26] [PASSED] xe_gmdid_graphics_ip
[20:04:26] [PASSED] xe_gmdid_media_ip
[20:04:26] ===================== [PASSED] xe_pci ======================
[20:04:26] =================== xe_rtp (2 subtests) ====================
[20:04:26] =============== xe_rtp_process_to_sr_tests  ================
[20:04:26] [PASSED] coalesce-same-reg
[20:04:26] [PASSED] no-match-no-add
[20:04:26] [PASSED] match-or
[20:04:26] [PASSED] match-or-xfail
[20:04:26] [PASSED] no-match-no-add-multiple-rules
[20:04:26] [PASSED] two-regs-two-entries
[20:04:26] [PASSED] clr-one-set-other
[20:04:26] [PASSED] set-field
[20:04:26] [PASSED] conflict-duplicate
[20:04:26] [PASSED] conflict-not-disjoint
[20:04:26] [PASSED] conflict-reg-type
[20:04:26] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[20:04:26] ================== xe_rtp_process_tests  ===================
[20:04:26] [PASSED] active1
[20:04:26] [PASSED] active2
[20:04:26] [PASSED] active-inactive
[20:04:26] [PASSED] inactive-active
[20:04:26] [PASSED] inactive-1st_or_active-inactive
[20:04:26] [PASSED] inactive-2nd_or_active-inactive
[20:04:26] [PASSED] inactive-last_or_active-inactive
[20:04:26] [PASSED] inactive-no_or_active-inactive
[20:04:26] ============== [PASSED] xe_rtp_process_tests ===============
[20:04:26] ===================== [PASSED] xe_rtp ======================
[20:04:26] ==================== xe_wa (1 subtest) =====================
[20:04:26] ======================== xe_wa_gt  =========================
[20:04:26] [PASSED] TIGERLAKE (B0)
[20:04:26] [PASSED] DG1 (A0)
[20:04:26] [PASSED] DG1 (B0)
[20:04:26] [PASSED] ALDERLAKE_S (A0)
[20:04:26] [PASSED] ALDERLAKE_S (B0)
[20:04:26] [PASSED] ALDERLAKE_S (C0)
[20:04:26] [PASSED] ALDERLAKE_S (D0)
[20:04:26] [PASSED] ALDERLAKE_P (A0)
[20:04:26] [PASSED] ALDERLAKE_P (B0)
[20:04:26] [PASSED] ALDERLAKE_P (C0)
[20:04:26] [PASSED] ALDERLAKE_S_RPLS (D0)
[20:04:26] [PASSED] ALDERLAKE_P_RPLU (E0)
[20:04:26] [PASSED] DG2_G10 (C0)
[20:04:26] [PASSED] DG2_G11 (B1)
[20:04:26] [PASSED] DG2_G12 (A1)
[20:04:26] [PASSED] METEORLAKE (g:A0, m:A0)
[20:04:26] [PASSED] METEORLAKE (g:A0, m:A0)
[20:04:26] [PASSED] METEORLAKE (g:A0, m:A0)
[20:04:26] [PASSED] LUNARLAKE (g:A0, m:A0)
[20:04:26] [PASSED] LUNARLAKE (g:B0, m:A0)
[20:04:26] [PASSED] BATTLEMAGE (g:A0, m:A1)
[20:04:26] ==================== [PASSED] xe_wa_gt =====================
[20:04:26] ====================== [PASSED] xe_wa ======================
[20:04:26] ============================================================
[20:04:26] Testing complete. Ran 133 tests: passed: 117, skipped: 16
[20:04:26] Elapsed time: 30.421s total, 4.134s configuring, 26.021s building, 0.258s running

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

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

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



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

* ✓ CI.Build: success for Add support for EU stall sampling
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
                   ` (10 preceding siblings ...)
  2025-02-18 20:05 ` ✓ CI.KUnit: success " Patchwork
@ 2025-02-18 20:21 ` Patchwork
  2025-02-18 20:23 ` ✓ CI.Hooks: " Patchwork
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2025-02-18 20:21 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

== Series Details ==

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

== Summary ==

lib/modules/6.14.0-rc3-xe+/kernel/arch/x86/events/amd/
lib/modules/6.14.0-rc3-xe+/kernel/arch/x86/events/amd/amd-uncore.ko
lib/modules/6.14.0-rc3-xe+/kernel/arch/x86/events/rapl.ko
lib/modules/6.14.0-rc3-xe+/kernel/arch/x86/kvm/
lib/modules/6.14.0-rc3-xe+/kernel/arch/x86/kvm/kvm.ko
lib/modules/6.14.0-rc3-xe+/kernel/arch/x86/kvm/kvm-intel.ko
lib/modules/6.14.0-rc3-xe+/kernel/arch/x86/kvm/kvm-amd.ko
lib/modules/6.14.0-rc3-xe+/kernel/kernel/
lib/modules/6.14.0-rc3-xe+/kernel/kernel/kheaders.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/
lib/modules/6.14.0-rc3-xe+/kernel/crypto/ecrdsa_generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/xcbc.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/serpent_generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/aria_generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/crypto_simd.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/adiantum.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/tcrypt.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/crypto_engine.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/zstd.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/asymmetric_keys/
lib/modules/6.14.0-rc3-xe+/kernel/crypto/asymmetric_keys/pkcs7_test_key.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/asymmetric_keys/pkcs8_key_parser.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/des_generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/xctr.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/authenc.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/sm4_generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/camellia_generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/sm3.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/pcrypt.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/aegis128.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/af_alg.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/algif_aead.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/cmac.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/sm3_generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/aes_ti.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/chacha_generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/poly1305_generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/nhpoly1305.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/crc32_generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/essiv.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/ccm.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/wp512.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/streebog_generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/authencesn.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/echainiv.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/lrw.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/cryptd.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/crypto_user.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/algif_hash.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/polyval-generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/hctr2.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/842.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/pcbc.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/ansi_cprng.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/cast6_generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/twofish_common.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/twofish_generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/lz4hc.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/blowfish_generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/md4.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/chacha20poly1305.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/curve25519-generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/lz4.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/rmd160.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/algif_skcipher.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/cast5_generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/fcrypt.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/ecdsa_generic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/sm4.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/cast_common.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/blowfish_common.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/michael_mic.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/async_tx/
lib/modules/6.14.0-rc3-xe+/kernel/crypto/async_tx/async_xor.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/async_tx/async_tx.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/async_tx/async_memcpy.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/async_tx/async_pq.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/async_tx/async_raid6_recov.ko
lib/modules/6.14.0-rc3-xe+/kernel/crypto/algif_rng.ko
lib/modules/6.14.0-rc3-xe+/kernel/block/
lib/modules/6.14.0-rc3-xe+/kernel/block/bfq.ko
lib/modules/6.14.0-rc3-xe+/kernel/block/kyber-iosched.ko
lib/modules/6.14.0-rc3-xe+/build
lib/modules/6.14.0-rc3-xe+/modules.alias.bin
lib/modules/6.14.0-rc3-xe+/modules.builtin
lib/modules/6.14.0-rc3-xe+/modules.softdep
lib/modules/6.14.0-rc3-xe+/modules.alias
lib/modules/6.14.0-rc3-xe+/modules.order
lib/modules/6.14.0-rc3-xe+/modules.symbols
lib/modules/6.14.0-rc3-xe+/modules.dep.bin
+ mv kernel-nodebug.tar.gz ..
+ cd ..
+ rm -rf archive
++ date +%s
+ echo -e '\e[0Ksection_end:1739910087:package_x86_64_nodebug\r\e[0K'
+ sync
^[[0Ksection_end:1739910087:package_x86_64_nodebug
^[[0K
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel



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

* ✓ CI.Hooks: success for Add support for EU stall sampling
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
                   ` (11 preceding siblings ...)
  2025-02-18 20:21 ` ✓ CI.Build: " Patchwork
@ 2025-02-18 20:23 ` Patchwork
  2025-02-18 20:25 ` ✓ CI.checksparse: " Patchwork
                   ` (3 subsequent siblings)
  16 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2025-02-18 20:23 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

== Series Details ==

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

== 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
  DESCEND 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/arch/x86/special.o
  CC      /workspace/kernel/build64-default/tools/objtool/special.o
  CC      /workspace/kernel/build64-default/tools/objtool/arch/x86/decode.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/arch/x86/orc.o
  CC      /workspace/kernel/build64-default/tools/objtool/objtool.o
  CC      /workspace/kernel/build64-default/tools/objtool/orc_gen.o
  CC      /workspace/kernel/build64-default/tools/objtool/orc_dump.o
  CC      /workspace/kernel/build64-default/tools/objtool/libstring.o
  CC      /workspace/kernel/build64-default/tools/objtool/libctype.o
  CC      /workspace/kernel/build64-default/tools/objtool/str_error_r.o
  CC      /workspace/kernel/build64-default/tools/objtool/librbtree.o
  LD      /workspace/kernel/build64-default/tools/objtool/arch/x86/objtool-in.o
  LD      /workspace/kernel/build64-default/tools/objtool/objtool-in.o
  LINK    /workspace/kernel/build64-default/tools/objtool/objtool
make[1]: Leaving directory '/workspace/kernel/build64-default'
++ nproc
+ make -j48 O=/workspace/kernel/build64-default W=1 drivers/gpu/drm/xe
make[1]: Entering directory '/workspace/kernel/build64-default'
make[2]: Nothing to be done for 'drivers/gpu/drm/xe'.
make[1]: Leaving directory '/workspace/kernel/build64-default'
run-parts: executing /workspace/ci/hooks/11-build-32b
+++ realpath /workspace/ci/hooks/11-build-32b
++ dirname /workspace/ci/hooks/11-build-32b
+ THIS_SCRIPT_DIR=/workspace/ci/hooks
+ SRC_DIR=/workspace/kernel
+ TOOLS_SRC_DIR=/workspace/ci
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ BUILD_DIR=/workspace/kernel/build64-default/build32
+ cd /workspace/kernel
+ mkdir -p /workspace/kernel/build64-default/build32
++ nproc
+ make -j48 ARCH=i386 O=/workspace/kernel/build64-default/build32 defconfig
make[1]: Entering directory '/workspace/kernel/build64-default/build32'
  GEN     Makefile
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  LEX     scripts/kconfig/lexer.lex.c
  YACC    scripts/kconfig/parser.tab.[ch]
  HOSTCC  scripts/kconfig/menu.o
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/util.o
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTLD  scripts/kconfig/conf
*** Default configuration is based on 'i386_defconfig'
#
# configuration written to .config
#
make[1]: Leaving directory '/workspace/kernel/build64-default/build32'
+ cd /workspace/kernel/build64-default/build32
+ /workspace/kernel/scripts/kconfig/merge_config.sh .config /workspace/ci/kernel/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_FREGS not in final .config
Requested value:  CONFIG_HAVE_FUNCTION_GRAPH_FREGS=y
Actual value:     

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



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

* ✓ CI.checksparse: success for Add support for EU stall sampling
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
                   ` (12 preceding siblings ...)
  2025-02-18 20:23 ` ✓ CI.Hooks: " Patchwork
@ 2025-02-18 20:25 ` Patchwork
  2025-02-18 20:44 ` ✓ Xe.CI.BAT: " Patchwork
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2025-02-18 20:25 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

== Series Details ==

Series: Add support for EU stall sampling
URL   : https://patchwork.freedesktop.org/series/145038/
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 adeeb34d0f0e6463bea93984a56eed4e3ee0f074
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] 31+ messages in thread

* ✓ Xe.CI.BAT: success for Add support for EU stall sampling
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
                   ` (13 preceding siblings ...)
  2025-02-18 20:25 ` ✓ CI.checksparse: " Patchwork
@ 2025-02-18 20:44 ` Patchwork
  2025-02-19 13:14 ` ✗ Xe.CI.Full: failure " Patchwork
  2025-02-19 19:27 ` [PATCH v10 0/8] " Dixit, Ashutosh
  16 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2025-02-18 20:44 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

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

== Series Details ==

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

== Summary ==

CI Bug Log - changes from xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074_BAT -> xe-pw-145038v1_BAT
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  

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

  Missing    (1): bat-adlp-vm 


Changes
-------

  No changes found


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

  * Linux: xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074 -> xe-pw-145038v1

  IGT_8236: 8236
  xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074: adeeb34d0f0e6463bea93984a56eed4e3ee0f074
  xe-pw-145038v1: 145038v1

== Logs ==

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

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

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

* Re: [PATCH v10 2/8] drm/xe/uapi: Introduce API for EU stall sampling
  2025-02-18 19:53 ` [PATCH v10 2/8] drm/xe/uapi: Introduce API for EU stall sampling Harish Chegondi
@ 2025-02-18 23:11   ` Dixit, Ashutosh
  0 siblings, 0 replies; 31+ messages in thread
From: Dixit, Ashutosh @ 2025-02-18 23:11 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

On Tue, 18 Feb 2025 11:53:52 -0800, Harish Chegondi wrote:
>
> 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..79af41be9c02
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> @@ -0,0 +1,218 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2025 Intel Corporation
> + */
> +
> +#include <linux/anon_inodes.h>
> +#include <linux/fs.h>
> +#include <linux/poll.h>
> +#include <linux/types.h>
> +
> +#include <uapi/drm/xe_drm.h>
> +
> +#include "xe_device.h"
> +#include "xe_eu_stall.h"
> +#include "xe_gt_printk.h"
> +#include "xe_gt_topology.h"
> +#include "xe_macros.h"
> +#include "xe_observation.h"
> +
> +/**
> + * struct eu_stall_open_properties - EU stall sampling properties received
> + *				     from user space at open.
> + * @sampling_rate_mult: EU stall sampling rate multiplier.
> + *			HW will sample every (sampling_rate_mult 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 {
> +	unsigned int sampling_rate_mult;
> +	unsigned int wait_num_reports;

Did you see Jani N's mail? These need to be changed to int (for me either
int or u32 is fine). With that addressed, the rest of the patch lgtm now,
so this is:

Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>

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

* Re: [PATCH v10 6/8] drm/xe/eustall: Add EU stall sampling support for Xe2
  2025-02-18 19:53 ` [PATCH v10 6/8] drm/xe/eustall: Add EU stall sampling support for Xe2 Harish Chegondi
@ 2025-02-18 23:29   ` Dixit, Ashutosh
  0 siblings, 0 replies; 31+ messages in thread
From: Dixit, Ashutosh @ 2025-02-18 23:29 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

On Tue, 18 Feb 2025 11:53:56 -0800, Harish Chegondi wrote:
>
> 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.
>
> v10: Update comments as per review feedback
>
> v9: Use GRAPHICS_VER() check instead of platform
>
> 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>

Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>

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

* ✗ Xe.CI.Full: failure for Add support for EU stall sampling
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
                   ` (14 preceding siblings ...)
  2025-02-18 20:44 ` ✓ Xe.CI.BAT: " Patchwork
@ 2025-02-19 13:14 ` Patchwork
  2025-02-19 19:27 ` [PATCH v10 0/8] " Dixit, Ashutosh
  16 siblings, 0 replies; 31+ messages in thread
From: Patchwork @ 2025-02-19 13:14 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

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

== Series Details ==

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

== Summary ==

CI Bug Log - changes from xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074_full -> xe-pw-145038v1_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with xe-pw-145038v1_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in xe-pw-145038v1_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-145038v1_full:

### IGT changes ###

#### Possible regressions ####

  * igt@kms_cursor_legacy@basic-flip-before-cursor-legacy:
    - shard-adlp:         [PASS][1] -> [DMESG-WARN][2]
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-adlp-2/igt@kms_cursor_legacy@basic-flip-before-cursor-legacy.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-adlp-4/igt@kms_cursor_legacy@basic-flip-before-cursor-legacy.html

  * igt@kms_flip@basic-flip-vs-wf_vblank@c-hdmi-a6:
    - shard-dg2-set2:     [PASS][3] -> [FAIL][4]
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-433/igt@kms_flip@basic-flip-vs-wf_vblank@c-hdmi-a6.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_flip@basic-flip-vs-wf_vblank@c-hdmi-a6.html

  * igt@xe_exec_compute_mode@many-rebind:
    - shard-lnl:          [PASS][5] -> [FAIL][6]
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-lnl-6/igt@xe_exec_compute_mode@many-rebind.html
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-lnl-3/igt@xe_exec_compute_mode@many-rebind.html

  * igt@xe_live_ktest@xe_migrate:
    - shard-bmg:          NOTRUN -> [SKIP][7]
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@xe_live_ktest@xe_migrate.html

  
#### Warnings ####

  * igt@kms_display_modes@extended-mode-basic:
    - shard-bmg:          [SKIP][8] ([Intel XE#4302]) -> [DMESG-WARN][9]
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-4/igt@kms_display_modes@extended-mode-basic.html
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-7/igt@kms_display_modes@extended-mode-basic.html

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

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

### IGT changes ###

#### Issues hit ####

  * igt@kms_async_flips@test-cursor-atomic@pipe-d-dp-4:
    - shard-dg2-set2:     [PASS][10] -> [DMESG-WARN][11] ([Intel XE#4330]) +9 other tests dmesg-warn
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-433/igt@kms_async_flips@test-cursor-atomic@pipe-d-dp-4.html
   [11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-463/igt@kms_async_flips@test-cursor-atomic@pipe-d-dp-4.html

  * igt@kms_big_fb@linear-32bpp-rotate-270:
    - shard-bmg:          NOTRUN -> [SKIP][12] ([Intel XE#2327]) +1 other test skip
   [12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_big_fb@linear-32bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-16bpp-rotate-0:
    - shard-bmg:          NOTRUN -> [SKIP][13] ([Intel XE#1124]) +1 other test skip
   [13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_big_fb@y-tiled-16bpp-rotate-0.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip:
    - shard-dg2-set2:     NOTRUN -> [SKIP][14] ([Intel XE#1124])
   [14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-180-hflip.html

  * igt@kms_bw@connected-linear-tiling-2-displays-2560x1440p:
    - shard-bmg:          [PASS][15] -> [SKIP][16] ([Intel XE#2314] / [Intel XE#2894])
   [15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-3/igt@kms_bw@connected-linear-tiling-2-displays-2560x1440p.html
   [16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-6/igt@kms_bw@connected-linear-tiling-2-displays-2560x1440p.html

  * igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p:
    - shard-dg2-set2:     [PASS][17] -> [SKIP][18] ([Intel XE#2191])
   [17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-466/igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p.html
   [18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p.html

  * igt@kms_bw@connected-linear-tiling-4-displays-2160x1440p:
    - shard-dg2-set2:     NOTRUN -> [SKIP][19] ([Intel XE#2191])
   [19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_bw@connected-linear-tiling-4-displays-2160x1440p.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]) +10 other tests skip
   [20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-463/igt@kms_ccs@bad-aux-stride-y-tiled-gen12-rc-ccs-cc@pipe-d-dp-4.html

  * igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs@pipe-c-dp-2:
    - shard-bmg:          NOTRUN -> [SKIP][21] ([Intel XE#2652] / [Intel XE#787]) +8 other tests skip
   [21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_ccs@bad-rotation-90-4-tiled-lnl-ccs@pipe-c-dp-2.html

  * igt@kms_ccs@crc-primary-basic-y-tiled-gen12-rc-ccs-cc@pipe-a-dp-4:
    - shard-dg2-set2:     NOTRUN -> [SKIP][22] ([Intel XE#787]) +26 other tests skip
   [22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-434/igt@kms_ccs@crc-primary-basic-y-tiled-gen12-rc-ccs-cc@pipe-a-dp-4.html

  * igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-rc-ccs-cc:
    - shard-bmg:          NOTRUN -> [SKIP][23] ([Intel XE#2887]) +2 other tests skip
   [23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-dg2-rc-ccs-cc.html

  * igt@kms_chamelium_audio@hdmi-audio-edid:
    - shard-bmg:          NOTRUN -> [SKIP][24] ([Intel XE#2252]) +3 other tests skip
   [24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_chamelium_audio@hdmi-audio-edid.html

  * igt@kms_content_protection@legacy@pipe-a-dp-4:
    - shard-dg2-set2:     NOTRUN -> [FAIL][25] ([Intel XE#1178])
   [25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-463/igt@kms_content_protection@legacy@pipe-a-dp-4.html

  * igt@kms_cursor_crc@cursor-offscreen-32x10:
    - shard-bmg:          NOTRUN -> [SKIP][26] ([Intel XE#2320])
   [26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_cursor_crc@cursor-offscreen-32x10.html

  * igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy:
    - shard-dg2-set2:     [PASS][27] -> [SKIP][28] ([Intel XE#309]) +6 other tests skip
   [27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-466/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html
   [28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_cursor_legacy@2x-flip-vs-cursor-legacy.html

  * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic:
    - shard-bmg:          NOTRUN -> [SKIP][29] ([Intel XE#2286]) +1 other test skip
   [29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size:
    - shard-bmg:          [PASS][30] -> [SKIP][31] ([Intel XE#2291]) +2 other tests skip
   [30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-7/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html
   [31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-4/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html

  * igt@kms_cursor_legacy@torture-move@pipe-a:
    - shard-dg2-set2:     NOTRUN -> [DMESG-WARN][32] ([Intel XE#4330]) +12 other tests dmesg-warn
   [32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_cursor_legacy@torture-move@pipe-a.html

  * igt@kms_display_modes@extended-mode-basic@pipe-c-hdmi-a-3-pipe-d-dp-2:
    - shard-bmg:          NOTRUN -> [DMESG-WARN][33] ([Intel XE#877])
   [33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-7/igt@kms_display_modes@extended-mode-basic@pipe-c-hdmi-a-3-pipe-d-dp-2.html

  * igt@kms_dp_aux_dev:
    - shard-dg2-set2:     [PASS][34] -> [SKIP][35] ([Intel XE#3009])
   [34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-434/igt@kms_dp_aux_dev.html
   [35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_dp_aux_dev.html

  * igt@kms_feature_discovery@display-2x:
    - shard-bmg:          [PASS][36] -> [SKIP][37] ([Intel XE#2373])
   [36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-5/igt@kms_feature_discovery@display-2x.html
   [37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-4/igt@kms_feature_discovery@display-2x.html

  * igt@kms_flip@2x-dpms-vs-vblank-race-interruptible:
    - shard-dg2-set2:     [PASS][38] -> [SKIP][39] ([Intel XE#310]) +3 other tests skip
   [38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-466/igt@kms_flip@2x-dpms-vs-vblank-race-interruptible.html
   [39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_flip@2x-dpms-vs-vblank-race-interruptible.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bc-dp2-hdmi-a3:
    - shard-bmg:          [PASS][40] -> [FAIL][41] ([Intel XE#3321]) +1 other test fail
   [40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-8/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bc-dp2-hdmi-a3.html
   [41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-7/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:     [PASS][42] -> [FAIL][43] ([Intel XE#301]) +3 other tests fail
   [42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-466/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@cd-hdmi-a6-dp4.html
   [43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-433/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@cd-hdmi-a6-dp4.html

  * igt@kms_flip@2x-flip-vs-expired-vblank@ad-dp2-hdmi-a3:
    - shard-bmg:          NOTRUN -> [FAIL][44] ([Intel XE#3321]) +1 other test fail
   [44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-5/igt@kms_flip@2x-flip-vs-expired-vblank@ad-dp2-hdmi-a3.html

  * igt@kms_flip@2x-flip-vs-suspend-interruptible:
    - shard-bmg:          NOTRUN -> [DMESG-WARN][45] ([Intel XE#2955] / [Intel XE#4330])
   [45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_flip@2x-flip-vs-suspend-interruptible.html

  * igt@kms_flip@2x-plain-flip-ts-check-interruptible:
    - shard-bmg:          [PASS][46] -> [SKIP][47] ([Intel XE#2316]) +3 other tests skip
   [46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-3/igt@kms_flip@2x-plain-flip-ts-check-interruptible.html
   [47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-6/igt@kms_flip@2x-plain-flip-ts-check-interruptible.html

  * igt@kms_flip@basic-flip-vs-wf_vblank:
    - shard-dg2-set2:     [PASS][48] -> [FAIL][49] ([Intel XE#886])
   [48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-433/igt@kms_flip@basic-flip-vs-wf_vblank.html
   [49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_flip@basic-flip-vs-wf_vblank.html

  * igt@kms_flip@flip-vs-absolute-wf_vblank:
    - shard-lnl:          [PASS][50] -> [FAIL][51] ([Intel XE#886]) +3 other tests fail
   [50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-lnl-4/igt@kms_flip@flip-vs-absolute-wf_vblank.html
   [51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-lnl-4/igt@kms_flip@flip-vs-absolute-wf_vblank.html

  * igt@kms_flip@flip-vs-expired-vblank:
    - shard-bmg:          NOTRUN -> [INCOMPLETE][52] ([Intel XE#2049]) +1 other test incomplete
   [52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_flip@flip-vs-expired-vblank.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1:
    - shard-lnl:          [PASS][53] -> [FAIL][54] ([Intel XE#301])
   [53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html
   [54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-lnl-3/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html

  * igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a1:
    - shard-adlp:         [PASS][55] -> [DMESG-WARN][56] ([Intel XE#2953]) +1 other test dmesg-warn
   [55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-adlp-2/igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a1.html
   [56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-adlp-3/igt@kms_flip@flip-vs-suspend-interruptible@a-hdmi-a1.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling:
    - shard-bmg:          NOTRUN -> [SKIP][57] ([Intel XE#2293] / [Intel XE#2380])
   [57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling.html

  * igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-valid-mode:
    - shard-bmg:          NOTRUN -> [SKIP][58] ([Intel XE#2293])
   [58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-32bpp-4tiledg2rcccs-upscaling@pipe-a-valid-mode.html

  * igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-render:
    - shard-bmg:          NOTRUN -> [SKIP][59] ([Intel XE#2311]) +5 other tests skip
   [59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-spr-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-move:
    - shard-bmg:          NOTRUN -> [SKIP][60] ([Intel XE#2312])
   [60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-4/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-cur-indfb-move.html

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-msflip-blt:
    - shard-bmg:          NOTRUN -> [SKIP][61] ([Intel XE#4141])
   [61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-shrfb-msflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-blt:
    - shard-dg2-set2:     [PASS][62] -> [SKIP][63] ([Intel XE#656]) +8 other tests skip
   [62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-466/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-blt.html
   [63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-blt:
    - shard-dg2-set2:     NOTRUN -> [SKIP][64] ([Intel XE#651]) +1 other test skip
   [64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-mmap-wc:
    - shard-dg2-set2:     NOTRUN -> [SKIP][65] ([Intel XE#656]) +1 other test skip
   [65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-pgflip-blt:
    - shard-dg2-set2:     NOTRUN -> [SKIP][66] ([Intel XE#653])
   [66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-indfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-rgb565-draw-mmap-wc:
    - shard-bmg:          NOTRUN -> [SKIP][67] ([Intel XE#2313]) +6 other tests skip
   [67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_frontbuffer_tracking@psr-rgb565-draw-mmap-wc.html

  * igt@kms_hdr@invalid-hdr:
    - shard-dg2-set2:     [PASS][68] -> [SKIP][69] ([Intel XE#455]) +1 other test skip
   [68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-463/igt@kms_hdr@invalid-hdr.html
   [69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-433/igt@kms_hdr@invalid-hdr.html

  * igt@kms_plane_cursor@viewport@pipe-d-dp-2-size-256:
    - shard-bmg:          NOTRUN -> [DMESG-WARN][70] ([Intel XE#4330]) +26 other tests dmesg-warn
   [70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_plane_cursor@viewport@pipe-d-dp-2-size-256.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-b:
    - shard-bmg:          NOTRUN -> [SKIP][71] ([Intel XE#2763]) +4 other tests skip
   [71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-b.html

  * igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5:
    - shard-dg2-set2:     NOTRUN -> [DMESG-WARN][72] ([Intel XE#2566] / [Intel XE#4330])
   [72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-5.html

  * igt@kms_pm_rpm@dpms-non-lpsp:
    - shard-dg2-set2:     [PASS][73] -> [SKIP][74] ([Intel XE#836]) +1 other test skip
   [73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-466/igt@kms_pm_rpm@dpms-non-lpsp.html
   [74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_pm_rpm@dpms-non-lpsp.html

  * igt@kms_psr2_sf@pr-plane-move-sf-dmg-area:
    - shard-dg2-set2:     NOTRUN -> [SKIP][75] ([Intel XE#1489])
   [75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_psr2_sf@pr-plane-move-sf-dmg-area.html

  * igt@kms_psr2_su@frontbuffer-xrgb8888:
    - shard-bmg:          NOTRUN -> [SKIP][76] ([Intel XE#2387])
   [76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_psr2_su@frontbuffer-xrgb8888.html

  * igt@kms_psr@pr-cursor-blt:
    - shard-dg2-set2:     NOTRUN -> [SKIP][77] ([Intel XE#2850] / [Intel XE#929])
   [77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_psr@pr-cursor-blt.html

  * igt@kms_psr@psr-sprite-plane-move:
    - shard-bmg:          NOTRUN -> [SKIP][78] ([Intel XE#2234] / [Intel XE#2850]) +3 other tests skip
   [78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_psr@psr-sprite-plane-move.html

  * igt@kms_rotation_crc@primary-y-tiled-reflect-x-270:
    - shard-bmg:          NOTRUN -> [SKIP][79] ([Intel XE#3414] / [Intel XE#3904])
   [79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_rotation_crc@primary-y-tiled-reflect-x-270.html

  * igt@kms_setmode@invalid-clone-single-crtc-stealing@pipe-a-hdmi-a-6-dp-4:
    - shard-dg2-set2:     [PASS][80] -> [DMESG-WARN][81] ([Intel XE#4212]) +2 other tests dmesg-warn
   [80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-434/igt@kms_setmode@invalid-clone-single-crtc-stealing@pipe-a-hdmi-a-6-dp-4.html
   [81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-463/igt@kms_setmode@invalid-clone-single-crtc-stealing@pipe-a-hdmi-a-6-dp-4.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-bmg:          NOTRUN -> [SKIP][82] ([Intel XE#2426])
   [82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-4/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@kms_vrr@flip-basic:
    - shard-bmg:          NOTRUN -> [SKIP][83] ([Intel XE#1499])
   [83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-4/igt@kms_vrr@flip-basic.html

  * igt@xe_eudebug@basic-vm-bind-ufence:
    - shard-dg2-set2:     NOTRUN -> [SKIP][84] ([Intel XE#2905])
   [84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@xe_eudebug@basic-vm-bind-ufence.html

  * igt@xe_eudebug@basic-vm-bind-ufence-sigint-client:
    - shard-bmg:          NOTRUN -> [SKIP][85] ([Intel XE#3889])
   [85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@xe_eudebug@basic-vm-bind-ufence-sigint-client.html

  * igt@xe_eudebug_online@breakpoint-many-sessions-tiles:
    - shard-bmg:          NOTRUN -> [SKIP][86] ([Intel XE#2905])
   [86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@xe_eudebug_online@breakpoint-many-sessions-tiles.html

  * igt@xe_evict@evict-small-external-cm:
    - shard-bmg:          NOTRUN -> [DMESG-WARN][87] ([Intel XE#1473] / [Intel XE#4330])
   [87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@xe_evict@evict-small-external-cm.html

  * igt@xe_exec_basic@multigpu-no-exec-rebind:
    - shard-bmg:          NOTRUN -> [SKIP][88] ([Intel XE#2322]) +1 other test skip
   [88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@xe_exec_basic@multigpu-no-exec-rebind.html

  * igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-imm:
    - shard-bmg:          [PASS][89] -> [DMESG-WARN][90] ([Intel XE#4330]) +3 other tests dmesg-warn
   [89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-3/igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-imm.html
   [90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-1/igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-imm.html

  * igt@xe_exec_fault_mode@once-bindexecqueue-userptr-invalidate-race:
    - shard-dg2-set2:     NOTRUN -> [SKIP][91] ([Intel XE#288])
   [91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@xe_exec_fault_mode@once-bindexecqueue-userptr-invalidate-race.html

  * igt@xe_fault_injection@inject-fault-probe-function-wait_for_lmem_ready:
    - shard-adlp:         [PASS][92] -> [DMESG-WARN][93] ([Intel XE#4173]) +1 other test dmesg-warn
   [92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-adlp-2/igt@xe_fault_injection@inject-fault-probe-function-wait_for_lmem_ready.html
   [93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-adlp-4/igt@xe_fault_injection@inject-fault-probe-function-wait_for_lmem_ready.html

  * igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit:
    - shard-bmg:          NOTRUN -> [SKIP][94] ([Intel XE#2229])
   [94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-5/igt@xe_live_ktest@xe_bo@xe_ccs_migrate_kunit.html

  * igt@xe_pm@s3-exec-after:
    - shard-bmg:          NOTRUN -> [DMESG-WARN][95] ([Intel XE#4330] / [Intel XE#569])
   [95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@xe_pm@s3-exec-after.html

  * igt@xe_pm@s4-basic:
    - shard-bmg:          NOTRUN -> [ABORT][96] ([Intel XE#4268])
   [96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-4/igt@xe_pm@s4-basic.html

  * igt@xe_pm@s4-vm-bind-userptr:
    - shard-dg2-set2:     NOTRUN -> [ABORT][97] ([Intel XE#4268])
   [97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@xe_pm@s4-vm-bind-userptr.html

  
#### Possible fixes ####

  * igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p:
    - shard-bmg:          [SKIP][98] ([Intel XE#2314] / [Intel XE#2894]) -> [PASS][99]
   [98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-6/igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p.html
   [99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-5/igt@kms_bw@connected-linear-tiling-2-displays-3840x2160p.html

  * igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs@pipe-d-hdmi-a-3:
    - shard-bmg:          [DMESG-WARN][100] ([Intel XE#4330]) -> [PASS][101] +9 other tests pass
   [100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-3/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs@pipe-d-hdmi-a-3.html
   [101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-6/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs@pipe-d-hdmi-a-3.html

  * igt@kms_color@degamma@pipe-c-hdmi-a-3:
    - shard-bmg:          [DMESG-WARN][102] ([Intel XE#877]) -> [PASS][103] +3 other tests pass
   [102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-1/igt@kms_color@degamma@pipe-c-hdmi-a-3.html
   [103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-3/igt@kms_color@degamma@pipe-c-hdmi-a-3.html

  * igt@kms_cursor_legacy@2x-nonblocking-modeset-vs-cursor-atomic:
    - shard-dg2-set2:     [SKIP][104] ([Intel XE#309]) -> [PASS][105] +2 other tests pass
   [104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-464/igt@kms_cursor_legacy@2x-nonblocking-modeset-vs-cursor-atomic.html
   [105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-463/igt@kms_cursor_legacy@2x-nonblocking-modeset-vs-cursor-atomic.html

  * igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size:
    - shard-bmg:          [SKIP][106] ([Intel XE#2291]) -> [PASS][107] +4 other tests pass
   [106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-6/igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size.html
   [107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-5/igt@kms_cursor_legacy@cursorb-vs-flipb-varying-size.html

  * igt@kms_dp_aux_dev:
    - shard-bmg:          [SKIP][108] ([Intel XE#3009]) -> [PASS][109]
   [108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-6/igt@kms_dp_aux_dev.html
   [109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-5/igt@kms_dp_aux_dev.html

  * igt@kms_flip@2x-absolute-wf_vblank-interruptible:
    - shard-dg2-set2:     [SKIP][110] ([Intel XE#310]) -> [PASS][111] +2 other tests pass
   [110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-464/igt@kms_flip@2x-absolute-wf_vblank-interruptible.html
   [111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-434/igt@kms_flip@2x-absolute-wf_vblank-interruptible.html

  * igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bd-dp2-hdmi-a3:
    - shard-bmg:          [FAIL][112] ([Intel XE#3321]) -> [PASS][113]
   [112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-8/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bd-dp2-hdmi-a3.html
   [113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-7/igt@kms_flip@2x-flip-vs-expired-vblank-interruptible@bd-dp2-hdmi-a3.html

  * igt@kms_flip@2x-plain-flip-ts-check:
    - shard-bmg:          [SKIP][114] ([Intel XE#2316]) -> [PASS][115] +2 other tests pass
   [114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-6/igt@kms_flip@2x-plain-flip-ts-check.html
   [115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-5/igt@kms_flip@2x-plain-flip-ts-check.html

  * igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1:
    - shard-lnl:          [FAIL][116] ([Intel XE#301]) -> [PASS][117]
   [116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html
   [117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-lnl-3/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-edp1.html

  * igt@kms_flip@flip-vs-expired-vblank@a-dp4:
    - shard-dg2-set2:     [FAIL][118] ([Intel XE#301] / [Intel XE#3321]) -> [PASS][119] +1 other test pass
   [118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-433/igt@kms_flip@flip-vs-expired-vblank@a-dp4.html
   [119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-463/igt@kms_flip@flip-vs-expired-vblank@a-dp4.html

  * igt@kms_flip@plain-flip-ts-check-interruptible@c-edp1:
    - shard-lnl:          [FAIL][120] ([Intel XE#886]) -> [PASS][121]
   [120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-lnl-3/igt@kms_flip@plain-flip-ts-check-interruptible@c-edp1.html
   [121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-lnl-2/igt@kms_flip@plain-flip-ts-check-interruptible@c-edp1.html

  * igt@kms_flip_tiling@flip-change-tiling@pipe-b-hdmi-a-1-x-to-x:
    - shard-adlp:         [DMESG-FAIL][122] ([Intel XE#4330]) -> [PASS][123] +1 other test pass
   [122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-adlp-2/igt@kms_flip_tiling@flip-change-tiling@pipe-b-hdmi-a-1-x-to-x.html
   [123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-adlp-3/igt@kms_flip_tiling@flip-change-tiling@pipe-b-hdmi-a-1-x-to-x.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-move:
    - shard-dg2-set2:     [SKIP][124] ([Intel XE#656]) -> [PASS][125] +7 other tests pass
   [124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-464/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-move.html
   [125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-434/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-move.html

  * igt@kms_hdr@invalid-hdr:
    - shard-bmg:          [SKIP][126] ([Intel XE#1503]) -> [PASS][127]
   [126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-1/igt@kms_hdr@invalid-hdr.html
   [127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-2/igt@kms_hdr@invalid-hdr.html

  * igt@kms_joiner@basic-force-big-joiner:
    - shard-dg2-set2:     [SKIP][128] ([Intel XE#4328]) -> [PASS][129]
   [128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-464/igt@kms_joiner@basic-force-big-joiner.html
   [129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-434/igt@kms_joiner@basic-force-big-joiner.html

  * igt@kms_pm_rpm@dpms-mode-unset-non-lpsp:
    - shard-dg2-set2:     [SKIP][130] ([Intel XE#836]) -> [PASS][131]
   [130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-464/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html
   [131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-434/igt@kms_pm_rpm@dpms-mode-unset-non-lpsp.html

  * igt@kms_vblank@query-idle-hang:
    - shard-adlp:         [DMESG-WARN][132] -> [PASS][133]
   [132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-adlp-8/igt@kms_vblank@query-idle-hang.html
   [133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-adlp-8/igt@kms_vblank@query-idle-hang.html

  * igt@kms_vblank@ts-continuation-dpms-suspend:
    - shard-adlp:         [DMESG-WARN][134] ([Intel XE#2953]) -> [PASS][135] +1 other test pass
   [134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-adlp-6/igt@kms_vblank@ts-continuation-dpms-suspend.html
   [135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-adlp-6/igt@kms_vblank@ts-continuation-dpms-suspend.html

  * igt@kms_vrr@cmrr@pipe-a-edp-1:
    - shard-lnl:          [FAIL][136] ([Intel XE#1522]) -> [PASS][137] +1 other test pass
   [136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-lnl-7/igt@kms_vrr@cmrr@pipe-a-edp-1.html
   [137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-lnl-2/igt@kms_vrr@cmrr@pipe-a-edp-1.html

  * igt@xe_exec_threads@threads-shared-vm-rebind-bindexecqueue:
    - shard-dg2-set2:     [DMESG-WARN][138] ([Intel XE#4330]) -> [PASS][139] +6 other tests pass
   [138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-433/igt@xe_exec_threads@threads-shared-vm-rebind-bindexecqueue.html
   [139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-434/igt@xe_exec_threads@threads-shared-vm-rebind-bindexecqueue.html

  * igt@xe_live_ktest@xe_bo:
    - shard-bmg:          [SKIP][140] -> [PASS][141]
   [140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-6/igt@xe_live_ktest@xe_bo.html
   [141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-5/igt@xe_live_ktest@xe_bo.html

  
#### Warnings ####

  * igt@kms_ccs@bad-rotation-90-y-tiled-gen12-mc-ccs@pipe-d-hdmi-a-6:
    - shard-dg2-set2:     [SKIP][142] ([Intel XE#455] / [Intel XE#787]) -> [SKIP][143] ([Intel XE#787]) +6 other tests skip
   [142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-464/igt@kms_ccs@bad-rotation-90-y-tiled-gen12-mc-ccs@pipe-d-hdmi-a-6.html
   [143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-434/igt@kms_ccs@bad-rotation-90-y-tiled-gen12-mc-ccs@pipe-d-hdmi-a-6.html

  * igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs-cc@pipe-d-hdmi-a-6:
    - shard-dg2-set2:     [SKIP][144] ([Intel XE#787]) -> [SKIP][145] ([Intel XE#455] / [Intel XE#787]) +14 other tests skip
   [144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-433/igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs-cc@pipe-d-hdmi-a-6.html
   [145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs-cc@pipe-d-hdmi-a-6.html

  * igt@kms_cdclk@mode-transition-all-outputs:
    - shard-dg2-set2:     [FAIL][146] -> [SKIP][147] ([Intel XE#314])
   [146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-464/igt@kms_cdclk@mode-transition-all-outputs.html
   [147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-434/igt@kms_cdclk@mode-transition-all-outputs.html

  * igt@kms_content_protection@atomic-dpms:
    - shard-dg2-set2:     [FAIL][148] ([Intel XE#1178]) -> [SKIP][149] ([Intel XE#455])
   [148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-433/igt@kms_content_protection@atomic-dpms.html
   [149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_content_protection@atomic-dpms.html

  * igt@kms_content_protection@legacy:
    - shard-dg2-set2:     [SKIP][150] ([Intel XE#455]) -> [FAIL][151] ([Intel XE#1178])
   [150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-464/igt@kms_content_protection@legacy.html
   [151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-463/igt@kms_content_protection@legacy.html

  * igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic:
    - shard-bmg:          [INCOMPLETE][152] ([Intel XE#3226]) -> [SKIP][153] ([Intel XE#2291])
   [152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-7/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic.html
   [153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-4/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic.html

  * igt@kms_cursor_legacy@cursora-vs-flipb-legacy:
    - shard-bmg:          [DMESG-WARN][154] ([Intel XE#4330]) -> [SKIP][155] ([Intel XE#2291])
   [154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-7/igt@kms_cursor_legacy@cursora-vs-flipb-legacy.html
   [155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-4/igt@kms_cursor_legacy@cursora-vs-flipb-legacy.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size:
    - shard-bmg:          [SKIP][156] ([Intel XE#2291]) -> [DMESG-WARN][157] ([Intel XE#877])
   [156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-6/igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size.html
   [157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-3/igt@kms_cursor_legacy@cursorb-vs-flipa-varying-size.html

  * igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-6:
    - shard-dg2-set2:     [SKIP][158] ([i915#3804]) -> [SKIP][159] ([Intel XE#455] / [i915#3804])
   [158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-433/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-6.html
   [159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_dither@fb-8bpc-vs-panel-6bpc@pipe-a-hdmi-a-6.html

  * igt@kms_flip@2x-flip-vs-expired-vblank:
    - shard-bmg:          [SKIP][160] ([Intel XE#2316]) -> [DMESG-FAIL][161] ([Intel XE#4330])
   [160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-6/igt@kms_flip@2x-flip-vs-expired-vblank.html
   [161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-5/igt@kms_flip@2x-flip-vs-expired-vblank.html
    - shard-dg2-set2:     [DMESG-FAIL][162] ([Intel XE#4330]) -> [SKIP][163] ([Intel XE#310])
   [162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-466/igt@kms_flip@2x-flip-vs-expired-vblank.html
   [163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_flip@2x-flip-vs-expired-vblank.html

  * igt@kms_flip@2x-flip-vs-suspend:
    - shard-dg2-set2:     [INCOMPLETE][164] ([Intel XE#2049] / [Intel XE#2597]) -> [SKIP][165] ([Intel XE#310])
   [164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-466/igt@kms_flip@2x-flip-vs-suspend.html
   [165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_flip@2x-flip-vs-suspend.html

  * igt@kms_flip@2x-nonexisting-fb:
    - shard-bmg:          [DMESG-WARN][166] ([Intel XE#4330]) -> [SKIP][167] ([Intel XE#2316]) +1 other test skip
   [166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-3/igt@kms_flip@2x-nonexisting-fb.html
   [167]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-6/igt@kms_flip@2x-nonexisting-fb.html

  * igt@kms_flip@2x-single-buffer-flip-vs-dpms-off-vs-modeset-interruptible:
    - shard-bmg:          [DMESG-WARN][168] ([Intel XE#2955]) -> [SKIP][169] ([Intel XE#2316])
   [168]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-7/igt@kms_flip@2x-single-buffer-flip-vs-dpms-off-vs-modeset-interruptible.html
   [169]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-4/igt@kms_flip@2x-single-buffer-flip-vs-dpms-off-vs-modeset-interruptible.html

  * igt@kms_flip@flip-vs-expired-vblank@d-dp4:
    - shard-dg2-set2:     [DMESG-WARN][170] ([Intel XE#4330]) -> [DMESG-FAIL][171] ([Intel XE#4330])
   [170]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-433/igt@kms_flip@flip-vs-expired-vblank@d-dp4.html
   [171]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-463/igt@kms_flip@flip-vs-expired-vblank@d-dp4.html

  * igt@kms_flip@plain-flip-ts-check-interruptible:
    - shard-lnl:          [FAIL][172] ([Intel XE#3149] / [Intel XE#886]) -> [FAIL][173] ([Intel XE#886])
   [172]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-lnl-3/igt@kms_flip@plain-flip-ts-check-interruptible.html
   [173]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-lnl-2/igt@kms_flip@plain-flip-ts-check-interruptible.html

  * igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-pgflip-blt:
    - shard-bmg:          [SKIP][174] ([Intel XE#2312]) -> [SKIP][175] ([Intel XE#2311]) +12 other tests skip
   [174]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-4/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-pgflip-blt.html
   [175]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-7/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-indfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt:
    - shard-bmg:          [SKIP][176] ([Intel XE#4141]) -> [SKIP][177] ([Intel XE#2312]) +3 other tests skip
   [176]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-7/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt.html
   [177]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-4/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt.html

  * igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-wc:
    - shard-bmg:          [SKIP][178] ([Intel XE#2312]) -> [SKIP][179] ([Intel XE#4141]) +6 other tests skip
   [178]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-4/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-wc.html
   [179]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-7/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-spr-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc:
    - shard-bmg:          [SKIP][180] ([Intel XE#2311]) -> [SKIP][181] ([Intel XE#2312]) +11 other tests skip
   [180]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-5/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc.html
   [181]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-4/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-wc:
    - shard-dg2-set2:     [SKIP][182] ([Intel XE#651]) -> [SKIP][183] ([Intel XE#656]) +15 other tests skip
   [182]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-466/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-wc.html
   [183]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-pri-shrfb-draw-mmap-wc.html

  * igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-pgflip-blt:
    - shard-dg2-set2:     [SKIP][184] ([Intel XE#656]) -> [SKIP][185] ([Intel XE#651]) +10 other tests skip
   [184]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-464/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-pgflip-blt.html
   [185]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-434/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-pgflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-render:
    - shard-dg2-set2:     [SKIP][186] ([Intel XE#656]) -> [SKIP][187] ([Intel XE#653]) +10 other tests skip
   [186]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-464/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-render.html
   [187]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-spr-indfb-draw-render.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-onoff:
    - shard-bmg:          [SKIP][188] ([Intel XE#2312]) -> [SKIP][189] ([Intel XE#2313]) +12 other tests skip
   [188]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-6/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-onoff.html
   [189]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-5/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-onoff.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-plflip-blt:
    - shard-bmg:          [SKIP][190] ([Intel XE#2313]) -> [SKIP][191] ([Intel XE#2312]) +11 other tests skip
   [190]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-3/igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-plflip-blt.html
   [191]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-6/igt@kms_frontbuffer_tracking@psr-2p-primscrn-indfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-plflip-blt:
    - shard-dg2-set2:     [SKIP][192] ([Intel XE#653]) -> [SKIP][193] ([Intel XE#656]) +15 other tests skip
   [192]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-466/igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-plflip-blt.html
   [193]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_frontbuffer_tracking@psr-2p-primscrn-shrfb-plflip-blt.html

  * igt@kms_hdr@brightness-with-hdr:
    - shard-bmg:          [SKIP][194] ([Intel XE#3544]) -> [SKIP][195] ([Intel XE#3374] / [Intel XE#3544])
   [194]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-1/igt@kms_hdr@brightness-with-hdr.html
   [195]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-3/igt@kms_hdr@brightness-with-hdr.html

  * igt@kms_tiled_display@basic-test-pattern:
    - shard-dg2-set2:     [FAIL][196] ([Intel XE#1729]) -> [SKIP][197] ([Intel XE#362])
   [196]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-433/igt@kms_tiled_display@basic-test-pattern.html
   [197]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-464/igt@kms_tiled_display@basic-test-pattern.html

  * igt@kms_tiled_display@basic-test-pattern-with-chamelium:
    - shard-dg2-set2:     [SKIP][198] ([Intel XE#362]) -> [SKIP][199] ([Intel XE#1500])
   [198]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-dg2-463/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
   [199]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-dg2-466/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html

  * igt@xe_live_ktest@xe_eudebug:
    - shard-bmg:          [SKIP][200] -> [SKIP][201] ([Intel XE#2833])
   [200]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074/shard-bmg-6/igt@xe_live_ktest@xe_eudebug.html
   [201]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-145038v1/shard-bmg-3/igt@xe_live_ktest@xe_eudebug.html

  
  [Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
  [Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
  [Intel XE#1473]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1473
  [Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
  [Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
  [Intel XE#1500]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1500
  [Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
  [Intel XE#1522]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1522
  [Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
  [Intel XE#2049]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2049
  [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#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
  [Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
  [Intel XE#2286]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2286
  [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#2327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2327
  [Intel XE#2373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2373
  [Intel XE#2380]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2380
  [Intel XE#2387]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2387
  [Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
  [Intel XE#2566]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2566
  [Intel XE#2597]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2597
  [Intel XE#2652]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2652
  [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#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
  [Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
  [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#2953]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2953
  [Intel XE#2955]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2955
  [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#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
  [Intel XE#310]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/310
  [Intel XE#314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/314
  [Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
  [Intel XE#3226]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3226
  [Intel XE#3321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3321
  [Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
  [Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
  [Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
  [Intel XE#362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/362
  [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#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
  [Intel XE#4173]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4173
  [Intel XE#4212]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4212
  [Intel XE#4268]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4268
  [Intel XE#4302]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4302
  [Intel XE#4328]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4328
  [Intel XE#4330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4330
  [Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
  [Intel XE#569]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/569
  [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#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
  [Intel XE#836]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/836
  [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#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
  [i915#3804]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/3804


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

  * Linux: xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074 -> xe-pw-145038v1

  IGT_8236: 8236
  xe-2681-adeeb34d0f0e6463bea93984a56eed4e3ee0f074: adeeb34d0f0e6463bea93984a56eed4e3ee0f074
  xe-pw-145038v1: 145038v1

== Logs ==

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

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

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

* Re: [PATCH v10 3/8] drm/xe/eustall: Add support to init, enable and disable EU stall sampling
  2025-02-18 19:53 ` [PATCH v10 3/8] drm/xe/eustall: Add support to init, enable and disable " Harish Chegondi
@ 2025-02-19 15:27   ` Dixit, Ashutosh
  0 siblings, 0 replies; 31+ messages in thread
From: Dixit, Ashutosh @ 2025-02-19 15:27 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

On Tue, 18 Feb 2025 11:53:53 -0800, Harish Chegondi wrote:
>
> +static void xe_eu_stall_stream_free(struct xe_eu_stall_data_stream *stream)
> +{
> +	struct xe_gt *gt = stream->gt;
> +
> +	gt->eu_stall->stream = NULL;
> +	kfree(stream);
> +}
> +
> +static void xe_eu_stall_data_buf_destroy(struct xe_eu_stall_data_stream *stream)
> +{
> +	xe_bo_unpin_map_no_vm(stream->bo);
> +	kfree(stream->xecore_buf);
> +}
> +
> +static int xe_eu_stall_data_buf_alloc(struct xe_eu_stall_data_stream *stream,
> +				      u16 last_xecore)
> +{
> +	struct xe_tile *tile = stream->gt->tile;
> +	struct xe_bo *bo;
> +	u32 size;
> +
> +	size = stream->per_xecore_buf_size * last_xecore;
> +
> +	bo = xe_bo_create_pin_map_at_aligned(tile->xe, tile, NULL,
> +					     size, ~0ull, ttm_bo_type_kernel,
> +					     XE_BO_FLAG_SYSTEM | XE_BO_FLAG_GGTT, SZ_64);
> +	if (IS_ERR(bo))
> +		return PTR_ERR(bo);
> +
> +	XE_WARN_ON(!IS_ALIGNED(xe_bo_ggtt_addr(bo), SZ_64));
> +	stream->bo = bo;
> +
> +	return 0;
> +}

/snip/

> +static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
> +				   struct eu_stall_open_properties *props)
> +{
> +	unsigned int max_wait_num_reports, xecore, last_xecore, num_xecores;
> +	struct per_xecore_buf *xecore_buf;
> +	struct xe_gt *gt = stream->gt;
> +	xe_dss_mask_t all_xecores;
> +	u16 group, instance;
> +	u32 vaddr_offset;
> +	int ret;
> +
> +	bitmap_or(all_xecores, gt->fuse_topo.g_dss_mask, gt->fuse_topo.c_dss_mask,
> +		  XE_MAX_DSS_FUSE_BITS);
> +	num_xecores = bitmap_weight(all_xecores, XE_MAX_DSS_FUSE_BITS);
> +	last_xecore = xe_gt_topology_mask_last_dss(all_xecores) + 1;
> +
> +	max_wait_num_reports = num_data_rows(per_xecore_buf_size * num_xecores);
> +	if (props->wait_num_reports == 0 || props->wait_num_reports > max_wait_num_reports) {
> +		xe_gt_dbg(gt, "Invalid EU stall event report count %u\n",
> +			  props->wait_num_reports);
> +		xe_gt_dbg(gt, "Minimum event report count is 1, maximum is %u\n",
> +			  max_wait_num_reports);
> +		return -EINVAL;
> +	}
> +	stream->per_xecore_buf_size = per_xecore_buf_size;
> +	stream->sampling_rate_mult = props->sampling_rate_mult;
> +	stream->wait_num_reports = props->wait_num_reports;
> +	stream->data_record_size = xe_eu_stall_data_record_size(gt_to_xe(gt));
> +	stream->xecore_buf = kcalloc(last_xecore, sizeof(*stream->xecore_buf), GFP_KERNEL);
> +	if (!stream->xecore_buf)
> +		return -ENOMEM;

How about moving this stream->xecore_buf allocation stuff into
xe_eu_stall_data_buf_alloc? Just move it before stream->bo allocation in
xe_eu_stall_data_buf_alloc.

Because in xe_eu_stall_data_buf_destroy() we are freeing both stream->bo
and stream->xecore_buf. So if we move this stream->xecore_buf allocation
into xe_eu_stall_data_buf_alloc, xe_eu_stall_data_buf_alloc and
xe_eu_stall_data_buf_destroy will be completely symmetric.

And by "data_buf" we can understand stream->bo and stream->xecore_buf taken
together. There are other ways of doing this too but I think this is the
simplest change.

After addressing the above comment above, the rest lgtm, so this patch is
also:

Reviewed-by: Ashutosh Dixit <ashutosh.dixit@intel.com>

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

* Re: [PATCH v10 4/8] drm/xe/eustall: Add support to read() and poll() EU stall data
  2025-02-18 19:53 ` [PATCH v10 4/8] drm/xe/eustall: Add support to read() and poll() EU stall data Harish Chegondi
@ 2025-02-19 18:15   ` Dixit, Ashutosh
  2025-02-19 19:43     ` Harish Chegondi
  0 siblings, 1 reply; 31+ messages in thread
From: Dixit, Ashutosh @ 2025-02-19 18:15 UTC (permalink / raw)
  To: Harish Chegondi
  Cc: intel-xe, james.ausmus, felix.j.degrood, matthew.olson,
	lucas.demarchi

On Tue, 18 Feb 2025 11:53:54 -0800, Harish Chegondi wrote:
>
> @@ -39,7 +40,9 @@ struct per_xecore_buf {
>  };
>
>  struct xe_eu_stall_data_stream {
> +	bool pollin;
>	bool enabled;
> +	wait_queue_head_t poll_wq;
>	size_t data_record_size;
>	size_t per_xecore_buf_size;
>	unsigned int wait_num_reports;
> @@ -47,7 +50,11 @@ struct xe_eu_stall_data_stream {
>
>	struct xe_gt *gt;
>	struct xe_bo *bo;
> +	/* Lock to protect xecore_buf */
> +	struct mutex buf_lock;

Why do we need this new lock? I thought we would just be able to use
gt->eu_stall->stream_lock? stream_lock is already taken for read(), so we
just need to take it for eu_stall_data_buf_poll()?

> @@ -357,16 +580,26 @@ static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
>			  max_wait_num_reports);
>		return -EINVAL;
>	}
> +
> +	init_waitqueue_head(&stream->poll_wq);
> +	INIT_DELAYED_WORK(&stream->buf_poll_work, eu_stall_data_buf_poll_work_fn);
> +	mutex_init(&stream->buf_lock);
> +	stream->buf_poll_wq = alloc_ordered_workqueue("xe_eu_stall", 0);
> +	if (!stream->buf_poll_wq)
> +		return -ENOMEM;
>	stream->per_xecore_buf_size = per_xecore_buf_size;
>	stream->sampling_rate_mult = props->sampling_rate_mult;
>	stream->wait_num_reports = props->wait_num_reports;
>	stream->data_record_size = xe_eu_stall_data_record_size(gt_to_xe(gt));
>	stream->xecore_buf = kcalloc(last_xecore, sizeof(*stream->xecore_buf), GFP_KERNEL);
> -	if (!stream->xecore_buf)
> +	if (!stream->xecore_buf) {
> +		destroy_workqueue(stream->buf_poll_wq);
>		return -ENOMEM;
> +	}
>
>	ret = xe_eu_stall_data_buf_alloc(stream, last_xecore);
>	if (ret) {
> +		destroy_workqueue(stream->buf_poll_wq);
>		kfree(stream->xecore_buf);

OK, won't block on this, but error unwinding is cleaner with label's and
goto's.

Also, if stream->buf_lock is needed, mutex_destroy is also needed for error
unwinding and also during stream close.

> 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;

Keep it if we need it, but do we need both the read/write ptr's and
offset's? Since offset's are the same as ptr's, but without the ms bit.

> +			   __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.48.1
>

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

* Re: [PATCH v10 5/8] drm/xe/eustall: Add support to handle dropped EU stall data
  2025-02-18 19:53 ` [PATCH v10 5/8] drm/xe/eustall: Add support to handle dropped " Harish Chegondi
@ 2025-02-19 18:47   ` Dixit, Ashutosh
  0 siblings, 0 replies; 31+ messages in thread
From: Dixit, Ashutosh @ 2025-02-19 18:47 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

On Tue, 18 Feb 2025 11:53:55 -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.
>
> v10: Reverted the changes back to v8:
>      Clear the drop bits only after reading the data.

I think I am ok with this patch as is. Unless we agree to drop data in the
driver (which I had proposed but you had rejected), I don't think we can do
a lot more without really complicating things. So I don't want to go there
yet.

But lets first go through the coments on PATCH v10 4/8. Once we resolve the
locking issue raised there, I will review this patch again and hopefully
R-b it.

See if you need to send a new revision of the series.

Thanks.
--
Ashutosh

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

* Re: [PATCH v10 0/8] Add support for EU stall sampling
  2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
                   ` (15 preceding siblings ...)
  2025-02-19 13:14 ` ✗ Xe.CI.Full: failure " Patchwork
@ 2025-02-19 19:27 ` Dixit, Ashutosh
  16 siblings, 0 replies; 31+ messages in thread
From: Dixit, Ashutosh @ 2025-02-19 19:27 UTC (permalink / raw)
  To: Harish Chegondi
  Cc: intel-xe, james.ausmus, felix.j.degrood, matthew.olson,
	lucas.demarchi

On Tue, 18 Feb 2025 11:53:50 -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.
>
> Issues that need investigation:
> 1. Blocked reads with small user buffers may be blocked even with EU
> stall data in the kernel buffer as a previous read has set pollin to
> false even when kernel buffer has data that could be read but the user
> buffer is too small to read all the data.

Related to the above would potentially be better locking for stream->pollin.

> v2: Rename xe perf layer as xe observation layer (Ashutosh)

>
> Test-with: cover.1739901972.git.harish.chegondi@intel.com

Not sure why we don't see the EU stall IGT's running in Xe.CI.Full.

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

* Re: [PATCH v10 4/8] drm/xe/eustall: Add support to read() and poll() EU stall data
  2025-02-19 18:15   ` Dixit, Ashutosh
@ 2025-02-19 19:43     ` Harish Chegondi
  2025-02-20  7:02       ` Dixit, Ashutosh
  0 siblings, 1 reply; 31+ messages in thread
From: Harish Chegondi @ 2025-02-19 19:43 UTC (permalink / raw)
  To: Dixit, Ashutosh
  Cc: intel-xe, james.ausmus, felix.j.degrood, matthew.olson,
	lucas.demarchi

On Wed, Feb 19, 2025 at 10:15:52AM -0800, Dixit, Ashutosh wrote:
Hi Ashutosh,

> On Tue, 18 Feb 2025 11:53:54 -0800, Harish Chegondi wrote:
> >
> > @@ -39,7 +40,9 @@ struct per_xecore_buf {
> >  };
> >
> >  struct xe_eu_stall_data_stream {
> > +	bool pollin;
> >	bool enabled;
> > +	wait_queue_head_t poll_wq;
> >	size_t data_record_size;
> >	size_t per_xecore_buf_size;
> >	unsigned int wait_num_reports;
> > @@ -47,7 +50,11 @@ struct xe_eu_stall_data_stream {
> >
> >	struct xe_gt *gt;
> >	struct xe_bo *bo;
> > +	/* Lock to protect xecore_buf */
> > +	struct mutex buf_lock;
> 
> Why do we need this new lock? I thought we would just be able to use
> gt->eu_stall->stream_lock? stream_lock is already taken for read(), so we
> just need to take it for eu_stall_data_buf_poll()?

I started off with using the gt->eu_stall->stream_lock. But I have seen
warnings in the dmesg log while testing indicating possible circular
locking dependency leading to a deadlock. Maybe I can spend more time
later to investigate further and eliminate the possible circular locking
dependency. But for now, I decided to use a new lock to eliminate the
per subslice lock. Here is the dmesg log that I saved from my testing to
investigate later.

[17606.848776] ======================================================
[17606.848781] WARNING: possible circular locking dependency detected
[17606.848786] 6.13.0-upstream #3 Not tainted
[17606.848791] ------------------------------------------------------
[17606.848796] xe_eu_stall/21899 is trying to acquire lock:
[17606.848801] ffff88810daad948 ((wq_completion)xe_eu_stall){+.+.}-{0:0}, at: touch_wq_lockdep_map+0x21/0x80
[17606.848822]
               but task is already holding lock:
[17606.848827] ffff88810d0786a8 (&gt->eu_stall->stream_lock){+.+.}-{4:4}, at: xe_eu_stall_stream_close+0x27/0x70 [xe]
[17606.848903]
               which lock already depends on the new lock.

[17606.848909]
               the existing dependency chain (in reverse order) is:
[17606.848915]
               -> #2 (&gt->eu_stall->stream_lock){+.+.}-{4:4}:
[17606.848915]
               -> #2 (&gt->eu_stall->stream_lock){+.+.}-{4:4}:
[17606.848925]        __mutex_lock+0xb4/0xeb0
[17606.848934]        eu_stall_data_buf_poll+0x42/0x180 [xe]
[17606.848989]        eu_stall_data_buf_poll_work_fn+0x15/0x60 [xe]
[17606.849042]        process_one_work+0x207/0x640
[17606.849051]        worker_thread+0x18c/0x330
[17606.849058]        kthread+0xeb/0x120
[17606.849065]        ret_from_fork+0x2c/0x50
[17606.849073]        ret_from_fork_asm+0x1a/0x30
[17606.849081]
               -> #1 ((work_completion)(&(&stream->buf_poll_work)->work)){+.+.}-{0:0}:
[17606.849092]        process_one_work+0x1e3/0x640
[17606.849100]        worker_thread+0x18c/0x330
[17606.849107]        kthread+0xeb/0x120
[17606.849113]        ret_from_fork+0x2c/0x50
[17606.849120]        ret_from_fork_asm+0x1a/0x30
[17606.849126]
               -> #0 ((wq_completion)xe_eu_stall){+.+.}-{0:0}:
[17606.849134]        __lock_acquire+0x167c/0x27d0
[17606.849141]        lock_acquire+0xd5/0x300
[17606.849148]        touch_wq_lockdep_map+0x36/0x80
[17606.849155]        __flush_workqueue+0x7e/0x4a0
[17606.849163]        drain_workqueue+0x92/0x130
[17606.849170]        destroy_workqueue+0x55/0x380
[17606.849177]        xe_eu_stall_data_buf_destroy+0x11/0x50 [xe]
[17606.849220]        xe_eu_stall_stream_close+0x37/0x70 [xe]
[17606.849259]        __fput+0xed/0x2b0
[17606.849264]        __x64_sys_close+0x37/0x80
[17606.849271]        do_syscall_64+0x68/0x140
[17606.849276]        entry_SYSCALL_64_after_hwframe+0x76/0x7e
[17606.849286]
               other info that might help us debug this:

[17606.849294] Chain exists of:
                 (wq_completion)xe_eu_stall --> (work_completion)(&(&stream->buf_poll_work)->work) --> &gt->eu_stall->stream_lock

[17606.849312]  Possible unsafe locking scenario:

[17606.849318]        CPU0                    CPU1
[17606.849323]        ----                    ----
[17606.849328]   lock(&gt->eu_stall->stream_lock);
[17606.849334]                                lock((work_completion)(&(&stream->buf_poll_work)->work));
[17606.849344]                                lock(&gt->eu_stall->stream_lock);
[17606.849352]   lock((wq_completion)xe_eu_stall);
[17606.849359]
                *** DEADLOCK ***

[17606.849365] 1 lock held by xe_eu_stall/21899:
[17606.849371]  #0: ffff88810d0786a8 (&gt->eu_stall->stream_lock){+.+.}-{4:4}, at: xe_eu_stall_stream_close+0x27/0x70 [xe]
[17606.849430]
               stack backtrace:
[17606.849435] CPU: 3 UID: 0 PID: 21899 Comm: xe_eu_stall Not tainted 6.13.0-upstream #3
[17606.849445] Hardware name: Intel Corporation Lunar Lake Client Platform/LNL-M LP5 RVP1, BIOS LNLMFWI1.R00.3220.D89.2407012051 07/01/2024
[17606.849457] Call Trace:
[17606.849461]  <TASK>
[17606.849465]  dump_stack_lvl+0x82/0xd0
[17606.849473]  print_circular_bug+0x2d2/0x410
[17606.849473]  print_circular_bug+0x2d2/0x410
[17606.849482]  check_noncircular+0x15d/0x180
[17606.849492]  __lock_acquire+0x167c/0x27d0
[17606.849500]  lock_acquire+0xd5/0x300
[17606.849507]  ? touch_wq_lockdep_map+0x21/0x80
[17606.849515]  ? lockdep_init_map_type+0x4b/0x260
[17606.849522]  ? touch_wq_lockdep_map+0x21/0x80
[17606.849529]  touch_wq_lockdep_map+0x36/0x80
[17606.849536]  ? touch_wq_lockdep_map+0x21/0x80
[17606.849544]  __flush_workqueue+0x7e/0x4a0
[17606.849551]  ? find_held_lock+0x2b/0x80
[17606.849561]  drain_workqueue+0x92/0x130
[17606.849569]  destroy_workqueue+0x55/0x380
[17606.849577]  xe_eu_stall_data_buf_destroy+0x11/0x50 [xe]
[17606.849627]  xe_eu_stall_stream_close+0x37/0x70 [xe]
[17606.849678]  __fput+0xed/0x2b0
[17606.849683]  __x64_sys_close+0x37/0x80
[17606.849691]  do_syscall_64+0x68/0x140
[17606.849698]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[17606.849706] RIP: 0033:0x7fdc81b14f67
[17606.849712] Code: ff e8 0d 16 02 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 03 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 41 c3 48 83 ec 18 89 7c 24 0c e8 73 ba f7 ff
[17606.849728] RSP: 002b:00007fffd2bd7e58 EFLAGS: 00000246 ORIG_RAX: 0000000000000003
[17606.849738] RAX: ffffffffffffffda RBX: 0000559f7fa08100 RCX: 00007fdc81b14f67
[17606.849746] RDX: 0000000000000000 RSI: 0000000000006901 RDI: 0000000000000004
[17606.849754] RBP: 00007fdc7d40bc90 R08: 0000000000000000 R09: 000000007fffffff
[17606.849762] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
[17606.849770] R13: 0000000000000000 R14: 0000000000000001 R15: 0000000000000000
[17606.849783]  </TASK>


> 
> > @@ -357,16 +580,26 @@ static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
> >			  max_wait_num_reports);
> >		return -EINVAL;
> >	}
> > +
> > +	init_waitqueue_head(&stream->poll_wq);
> > +	INIT_DELAYED_WORK(&stream->buf_poll_work, eu_stall_data_buf_poll_work_fn);
> > +	mutex_init(&stream->buf_lock);
> > +	stream->buf_poll_wq = alloc_ordered_workqueue("xe_eu_stall", 0);
> > +	if (!stream->buf_poll_wq)
> > +		return -ENOMEM;
> >	stream->per_xecore_buf_size = per_xecore_buf_size;
> >	stream->sampling_rate_mult = props->sampling_rate_mult;
> >	stream->wait_num_reports = props->wait_num_reports;
> >	stream->data_record_size = xe_eu_stall_data_record_size(gt_to_xe(gt));
> >	stream->xecore_buf = kcalloc(last_xecore, sizeof(*stream->xecore_buf), GFP_KERNEL);
> > -	if (!stream->xecore_buf)
> > +	if (!stream->xecore_buf) {
> > +		destroy_workqueue(stream->buf_poll_wq);
> >		return -ENOMEM;
> > +	}
> >
> >	ret = xe_eu_stall_data_buf_alloc(stream, last_xecore);
> >	if (ret) {
> > +		destroy_workqueue(stream->buf_poll_wq);
> >		kfree(stream->xecore_buf);
> 
> OK, won't block on this, but error unwinding is cleaner with label's and
> goto's.
> 
> Also, if stream->buf_lock is needed, mutex_destroy is also needed for error
> unwinding and also during stream close.
Okay. But, before we do a free(stream), does it really matter to call
mutex_destroy on stream->buf_lock ?
> 
> > 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;
> 
> Keep it if we need it, but do we need both the read/write ptr's and
> offset's? Since offset's are the same as ptr's, but without the ms bit.
True offsets are just pointers without the overflow bit. Maybe I can
remove the offsets, but add old read pointer (since read pointer changes
during read).

Thank You
Harish.

> 
> > +			   __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.48.1
> >

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

* Re: [PATCH v10 4/8] drm/xe/eustall: Add support to read() and poll() EU stall data
  2025-02-19 19:43     ` Harish Chegondi
@ 2025-02-20  7:02       ` Dixit, Ashutosh
  2025-02-20 19:52         ` Dixit, Ashutosh
  0 siblings, 1 reply; 31+ messages in thread
From: Dixit, Ashutosh @ 2025-02-20  7:02 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

On Wed, 19 Feb 2025 11:43:19 -0800, Harish Chegondi wrote:
>

Hi Harish,

> On Wed, Feb 19, 2025 at 10:15:52AM -0800, Dixit, Ashutosh wrote:
> Hi Ashutosh,
>
> > On Tue, 18 Feb 2025 11:53:54 -0800, Harish Chegondi wrote:
> > >
> > > @@ -39,7 +40,9 @@ struct per_xecore_buf {
> > >  };
> > >
> > >  struct xe_eu_stall_data_stream {
> > > +	bool pollin;
> > >	bool enabled;
> > > +	wait_queue_head_t poll_wq;
> > >	size_t data_record_size;
> > >	size_t per_xecore_buf_size;
> > >	unsigned int wait_num_reports;
> > > @@ -47,7 +50,11 @@ struct xe_eu_stall_data_stream {
> > >
> > >	struct xe_gt *gt;
> > >	struct xe_bo *bo;
> > > +	/* Lock to protect xecore_buf */
> > > +	struct mutex buf_lock;
> >
> > Why do we need this new lock? I thought we would just be able to use
> > gt->eu_stall->stream_lock? stream_lock is already taken for read(), so we
> > just need to take it for eu_stall_data_buf_poll()?
>
> I started off with using the gt->eu_stall->stream_lock. But I have seen
> warnings in the dmesg log while testing indicating possible circular
> locking dependency leading to a deadlock. Maybe I can spend more time
> later to investigate further and eliminate the possible circular locking
> dependency. But for now, I decided to use a new lock to eliminate the
> per subslice lock. Here is the dmesg log that I saved from my testing to
> investigate later.
>
> [17606.848776] ======================================================
> [17606.848781] WARNING: possible circular locking dependency detected
> [17606.848786] 6.13.0-upstream #3 Not tainted
> [17606.848791] ------------------------------------------------------
> [17606.848796] xe_eu_stall/21899 is trying to acquire lock:
> [17606.848801] ffff88810daad948 ((wq_completion)xe_eu_stall){+.+.}-{0:0}, at: touch_wq_lockdep_map+0x21/0x80
> [17606.848822]
>                but task is already holding lock:
> [17606.848827] ffff88810d0786a8 (&gt->eu_stall->stream_lock){+.+.}-{4:4}, at: xe_eu_stall_stream_close+0x27/0x70 [xe]
> [17606.848903]
>                which lock already depends on the new lock.
>
> [17606.848909]
>                the existing dependency chain (in reverse order) is:
> [17606.848915]
>                -> #2 (&gt->eu_stall->stream_lock){+.+.}-{4:4}:
> [17606.848915]
>                -> #2 (&gt->eu_stall->stream_lock){+.+.}-{4:4}:
> [17606.848925]        __mutex_lock+0xb4/0xeb0
> [17606.848934]        eu_stall_data_buf_poll+0x42/0x180 [xe]
> [17606.848989]        eu_stall_data_buf_poll_work_fn+0x15/0x60 [xe]
> [17606.849042]        process_one_work+0x207/0x640
> [17606.849051]        worker_thread+0x18c/0x330
> [17606.849058]        kthread+0xeb/0x120
> [17606.849065]        ret_from_fork+0x2c/0x50
> [17606.849073]        ret_from_fork_asm+0x1a/0x30
> [17606.849081]
>                -> #1 ((work_completion)(&(&stream->buf_poll_work)->work)){+.+.}-{0:0}:
> [17606.849092]        process_one_work+0x1e3/0x640
> [17606.849100]        worker_thread+0x18c/0x330
> [17606.849107]        kthread+0xeb/0x120
> [17606.849113]        ret_from_fork+0x2c/0x50
> [17606.849120]        ret_from_fork_asm+0x1a/0x30
> [17606.849126]
>                -> #0 ((wq_completion)xe_eu_stall){+.+.}-{0:0}:
> [17606.849134]        __lock_acquire+0x167c/0x27d0
> [17606.849141]        lock_acquire+0xd5/0x300
> [17606.849148]        touch_wq_lockdep_map+0x36/0x80
> [17606.849155]        __flush_workqueue+0x7e/0x4a0
> [17606.849163]        drain_workqueue+0x92/0x130
> [17606.849170]        destroy_workqueue+0x55/0x380
> [17606.849177]        xe_eu_stall_data_buf_destroy+0x11/0x50 [xe]
> [17606.849220]        xe_eu_stall_stream_close+0x37/0x70 [xe]
> [17606.849259]        __fput+0xed/0x2b0
> [17606.849264]        __x64_sys_close+0x37/0x80
> [17606.849271]        do_syscall_64+0x68/0x140
> [17606.849276]        entry_SYSCALL_64_after_hwframe+0x76/0x7e
> [17606.849286]
>                other info that might help us debug this:
>
> [17606.849294] Chain exists of:
>                  (wq_completion)xe_eu_stall --> (work_completion)(&(&stream->buf_poll_work)->work) --> &gt->eu_stall->stream_lock
>
> [17606.849312]  Possible unsafe locking scenario:
>
> [17606.849318]        CPU0                    CPU1
> [17606.849323]        ----                    ----
> [17606.849328]   lock(&gt->eu_stall->stream_lock);
> [17606.849334]                                lock((work_completion)(&(&stream->buf_poll_work)->work));
> [17606.849344]                                lock(&gt->eu_stall->stream_lock);
> [17606.849352]   lock((wq_completion)xe_eu_stall);
> [17606.849359]
>                 *** DEADLOCK ***
>
> [17606.849365] 1 lock held by xe_eu_stall/21899:
> [17606.849371]  #0: ffff88810d0786a8 (&gt->eu_stall->stream_lock){+.+.}-{4:4}, at: xe_eu_stall_stream_close+0x27/0x70 [xe]
> [17606.849430]
>                stack backtrace:
> [17606.849435] CPU: 3 UID: 0 PID: 21899 Comm: xe_eu_stall Not tainted 6.13.0-upstream #3
> [17606.849445] Hardware name: Intel Corporation Lunar Lake Client Platform/LNL-M LP5 RVP1, BIOS LNLMFWI1.R00.3220.D89.2407012051 07/01/2024
> [17606.849457] Call Trace:
> [17606.849461]  <TASK>
> [17606.849465]  dump_stack_lvl+0x82/0xd0
> [17606.849473]  print_circular_bug+0x2d2/0x410
> [17606.849473]  print_circular_bug+0x2d2/0x410
> [17606.849482]  check_noncircular+0x15d/0x180
> [17606.849492]  __lock_acquire+0x167c/0x27d0
> [17606.849500]  lock_acquire+0xd5/0x300
> [17606.849507]  ? touch_wq_lockdep_map+0x21/0x80
> [17606.849515]  ? lockdep_init_map_type+0x4b/0x260
> [17606.849522]  ? touch_wq_lockdep_map+0x21/0x80
> [17606.849529]  touch_wq_lockdep_map+0x36/0x80
> [17606.849536]  ? touch_wq_lockdep_map+0x21/0x80
> [17606.849544]  __flush_workqueue+0x7e/0x4a0
> [17606.849551]  ? find_held_lock+0x2b/0x80
> [17606.849561]  drain_workqueue+0x92/0x130
> [17606.849569]  destroy_workqueue+0x55/0x380
> [17606.849577]  xe_eu_stall_data_buf_destroy+0x11/0x50 [xe]
> [17606.849627]  xe_eu_stall_stream_close+0x37/0x70 [xe]
> [17606.849678]  __fput+0xed/0x2b0
> [17606.849683]  __x64_sys_close+0x37/0x80
> [17606.849691]  do_syscall_64+0x68/0x140
> [17606.849698]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
> [17606.849706] RIP: 0033:0x7fdc81b14f67
> [17606.849712] Code: ff e8 0d 16 02 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 03 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 41 c3 48 83 ec 18 89 7c 24 0c e8 73 ba f7 ff
> [17606.849728] RSP: 002b:00007fffd2bd7e58 EFLAGS: 00000246 ORIG_RAX: 0000000000000003
> [17606.849738] RAX: ffffffffffffffda RBX: 0000559f7fa08100 RCX: 00007fdc81b14f67
> [17606.849746] RDX: 0000000000000000 RSI: 0000000000006901 RDI: 0000000000000004
> [17606.849754] RBP: 00007fdc7d40bc90 R08: 0000000000000000 R09: 000000007fffffff
> [17606.849762] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
> [17606.849770] R13: 0000000000000000 R14: 0000000000000001 R15: 0000000000000000
> [17606.849783]  </TASK>

Could you try out this change in your patch (also just use
gt->eu_stall->stream_lock, not stream->buf_lock) and see if it resolves
this issue:

	@@ -573,7 +573,6 @@ static void xe_eu_stall_stream_free(struct xe_eu_stall_data_stream *stream)

	 static void xe_eu_stall_data_buf_destroy(struct xe_eu_stall_data_stream *stream)
	 {
	-       destroy_workqueue(stream->buf_poll_wq);
	        xe_bo_unpin_map_no_vm(stream->bo);
	        kfree(stream->xecore_buf);
	 }
	@@ -829,6 +828,8 @@ static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
	        xe_eu_stall_stream_free(stream);
	        mutex_unlock(&gt->eu_stall->stream_lock);

	+       destroy_workqueue(stream->buf_poll_wq);
	+
	        return 0;
	 }

Basically move destroy_workqueue outside gt->eu_stall->stream_lock.

I will look more into this. But from the above trace it looks like the
issue of lock order between two locks in different code paths. The two
locks are stream_lock and something let's call wq_lock (associated with the
workqueue or the work item).

So this is what we see about the order of these two locks in these
instances in the code (assuming we are only using stream_lock):

1. eu_stall_data_buf_poll_work_fn: wq_lock is taken first followed by
   stream_lock inside eu_stall_data_buf_poll.

2. xe_eu_stall_disable_locked: stream_lock is taken first followed by
   wq_lock when we do cancel_delayed_work_sync (if at all)

3. xe_eu_stall_stream_close: stream_lock is taken first followed by wq_lock
   when we do destroy_workqueue.

So looks like lockdep is complaining about the lock order reversal between
1. and 3. above. I am not sure if the order reversal between 1. and 2. is a
problem or not (if lockdep complains about this or not). If it is, we could
try moving cancel_delayed_work_sync also outside stream_lock. But we
haven't seen a trace for the second case yet.

So anyway, the first thing to try is the patch above and see if it fixes
this issue.

Another idea would be to move buf_poll_wq into gt->eu_stall (rather than
the stream), so it does not have to be destroyed when the stream fd is
closed.

>
>
> >
> > > @@ -357,16 +580,26 @@ static int xe_eu_stall_stream_init(struct xe_eu_stall_data_stream *stream,
> > >			  max_wait_num_reports);
> > >		return -EINVAL;
> > >	}
> > > +
> > > +	init_waitqueue_head(&stream->poll_wq);
> > > +	INIT_DELAYED_WORK(&stream->buf_poll_work, eu_stall_data_buf_poll_work_fn);
> > > +	mutex_init(&stream->buf_lock);
> > > +	stream->buf_poll_wq = alloc_ordered_workqueue("xe_eu_stall", 0);
> > > +	if (!stream->buf_poll_wq)
> > > +		return -ENOMEM;
> > >	stream->per_xecore_buf_size = per_xecore_buf_size;
> > >	stream->sampling_rate_mult = props->sampling_rate_mult;
> > >	stream->wait_num_reports = props->wait_num_reports;
> > >	stream->data_record_size = xe_eu_stall_data_record_size(gt_to_xe(gt));
> > >	stream->xecore_buf = kcalloc(last_xecore, sizeof(*stream->xecore_buf), GFP_KERNEL);
> > > -	if (!stream->xecore_buf)
> > > +	if (!stream->xecore_buf) {
> > > +		destroy_workqueue(stream->buf_poll_wq);
> > >		return -ENOMEM;
> > > +	}
> > >
> > >	ret = xe_eu_stall_data_buf_alloc(stream, last_xecore);
> > >	if (ret) {
> > > +		destroy_workqueue(stream->buf_poll_wq);
> > >		kfree(stream->xecore_buf);
> >
> > OK, won't block on this, but error unwinding is cleaner with label's and
> > goto's.
> >
> > Also, if stream->buf_lock is needed, mutex_destroy is also needed for error
> > unwinding and also during stream close.
> Okay. But, before we do a free(stream), does it really matter to call
> mutex_destroy on stream->buf_lock ?

Yes, we'd need mutex_destroy if we introduce stream->buf_lock. First let's
try the approach above so we don't have to introduce stream->buf_lock.

If stream->buf_lock is needed and mutex_destroy is a problem, another idea
would be to introduce it in gt->eu_stall so it doesn't need to be destroyed
when the stream fd is closed.

> >
> > > 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;
> >
> > Keep it if we need it, but do we need both the read/write ptr's and
> > offset's? Since offset's are the same as ptr's, but without the ms bit.
> True offsets are just pointers without the overflow bit. Maybe I can
> remove the offsets, but add old read pointer (since read pointer changes
> during read).

As I said, you can keep this as is, or whatever works for you and is
convenient for debug.

> >
> > > +			   __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.48.1
> > >

Thanks.
--
Ashutosh

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

* Re: [PATCH v10 4/8] drm/xe/eustall: Add support to read() and poll() EU stall data
  2025-02-20  7:02       ` Dixit, Ashutosh
@ 2025-02-20 19:52         ` Dixit, Ashutosh
  2025-02-20 20:02           ` Dixit, Ashutosh
  2025-02-24 18:06           ` Harish Chegondi
  0 siblings, 2 replies; 31+ messages in thread
From: Dixit, Ashutosh @ 2025-02-20 19:52 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

On Wed, 19 Feb 2025 23:02:45 -0800, Dixit, Ashutosh wrote:
>
> On Wed, 19 Feb 2025 11:43:19 -0800, Harish Chegondi wrote:
> >
>
> Hi Harish,
>
> > On Wed, Feb 19, 2025 at 10:15:52AM -0800, Dixit, Ashutosh wrote:
> > Hi Ashutosh,
> >
> > > On Tue, 18 Feb 2025 11:53:54 -0800, Harish Chegondi wrote:
> > > >
> > > > @@ -39,7 +40,9 @@ struct per_xecore_buf {
> > > >  };
> > > >
> > > >  struct xe_eu_stall_data_stream {
> > > > +	bool pollin;
> > > >	bool enabled;
> > > > +	wait_queue_head_t poll_wq;
> > > >	size_t data_record_size;
> > > >	size_t per_xecore_buf_size;
> > > >	unsigned int wait_num_reports;
> > > > @@ -47,7 +50,11 @@ struct xe_eu_stall_data_stream {
> > > >
> > > >	struct xe_gt *gt;
> > > >	struct xe_bo *bo;
> > > > +	/* Lock to protect xecore_buf */
> > > > +	struct mutex buf_lock;
> > >
> > > Why do we need this new lock? I thought we would just be able to use
> > > gt->eu_stall->stream_lock? stream_lock is already taken for read(), so we
> > > just need to take it for eu_stall_data_buf_poll()?
> >
> > I started off with using the gt->eu_stall->stream_lock. But I have seen
> > warnings in the dmesg log while testing indicating possible circular
> > locking dependency leading to a deadlock. Maybe I can spend more time
> > later to investigate further and eliminate the possible circular locking
> > dependency. But for now, I decided to use a new lock to eliminate the
> > per subslice lock. Here is the dmesg log that I saved from my testing to
> > investigate later.
> >
> > [17606.848776] ======================================================
> > [17606.848781] WARNING: possible circular locking dependency detected
> > [17606.848786] 6.13.0-upstream #3 Not tainted
> > [17606.848791] ------------------------------------------------------
> > [17606.848796] xe_eu_stall/21899 is trying to acquire lock:
> > [17606.848801] ffff88810daad948 ((wq_completion)xe_eu_stall){+.+.}-{0:0}, at: touch_wq_lockdep_map+0x21/0x80
> > [17606.848822]
> >                but task is already holding lock:
> > [17606.848827] ffff88810d0786a8 (&gt->eu_stall->stream_lock){+.+.}-{4:4}, at: xe_eu_stall_stream_close+0x27/0x70 [xe]
> > [17606.848903]
> >                which lock already depends on the new lock.
> >
> > [17606.848909]
> >                the existing dependency chain (in reverse order) is:
> > [17606.848915]
> >                -> #2 (&gt->eu_stall->stream_lock){+.+.}-{4:4}:
> > [17606.848915]
> >                -> #2 (&gt->eu_stall->stream_lock){+.+.}-{4:4}:
> > [17606.848925]        __mutex_lock+0xb4/0xeb0
> > [17606.848934]        eu_stall_data_buf_poll+0x42/0x180 [xe]
> > [17606.848989]        eu_stall_data_buf_poll_work_fn+0x15/0x60 [xe]
> > [17606.849042]        process_one_work+0x207/0x640
> > [17606.849051]        worker_thread+0x18c/0x330
> > [17606.849058]        kthread+0xeb/0x120
> > [17606.849065]        ret_from_fork+0x2c/0x50
> > [17606.849073]        ret_from_fork_asm+0x1a/0x30
> > [17606.849081]
> >                -> #1 ((work_completion)(&(&stream->buf_poll_work)->work)){+.+.}-{0:0}:
> > [17606.849092]        process_one_work+0x1e3/0x640
> > [17606.849100]        worker_thread+0x18c/0x330
> > [17606.849107]        kthread+0xeb/0x120
> > [17606.849113]        ret_from_fork+0x2c/0x50
> > [17606.849120]        ret_from_fork_asm+0x1a/0x30
> > [17606.849126]
> >                -> #0 ((wq_completion)xe_eu_stall){+.+.}-{0:0}:
> > [17606.849134]        __lock_acquire+0x167c/0x27d0
> > [17606.849141]        lock_acquire+0xd5/0x300
> > [17606.849148]        touch_wq_lockdep_map+0x36/0x80
> > [17606.849155]        __flush_workqueue+0x7e/0x4a0
> > [17606.849163]        drain_workqueue+0x92/0x130
> > [17606.849170]        destroy_workqueue+0x55/0x380
> > [17606.849177]        xe_eu_stall_data_buf_destroy+0x11/0x50 [xe]
> > [17606.849220]        xe_eu_stall_stream_close+0x37/0x70 [xe]
> > [17606.849259]        __fput+0xed/0x2b0
> > [17606.849264]        __x64_sys_close+0x37/0x80
> > [17606.849271]        do_syscall_64+0x68/0x140
> > [17606.849276]        entry_SYSCALL_64_after_hwframe+0x76/0x7e
> > [17606.849286]
> >                other info that might help us debug this:
> >
> > [17606.849294] Chain exists of:
> >                  (wq_completion)xe_eu_stall --> (work_completion)(&(&stream->buf_poll_work)->work) --> &gt->eu_stall->stream_lock
> >
> > [17606.849312]  Possible unsafe locking scenario:
> >
> > [17606.849318]        CPU0                    CPU1
> > [17606.849323]        ----                    ----
> > [17606.849328]   lock(&gt->eu_stall->stream_lock);
> > [17606.849334]                                lock((work_completion)(&(&stream->buf_poll_work)->work));
> > [17606.849344]                                lock(&gt->eu_stall->stream_lock);
> > [17606.849352]   lock((wq_completion)xe_eu_stall);
> > [17606.849359]
> >                 *** DEADLOCK ***
> >
> > [17606.849365] 1 lock held by xe_eu_stall/21899:
> > [17606.849371]  #0: ffff88810d0786a8 (&gt->eu_stall->stream_lock){+.+.}-{4:4}, at: xe_eu_stall_stream_close+0x27/0x70 [xe]
> > [17606.849430]
> >                stack backtrace:
> > [17606.849435] CPU: 3 UID: 0 PID: 21899 Comm: xe_eu_stall Not tainted 6.13.0-upstream #3
> > [17606.849445] Hardware name: Intel Corporation Lunar Lake Client Platform/LNL-M LP5 RVP1, BIOS LNLMFWI1.R00.3220.D89.2407012051 07/01/2024
> > [17606.849457] Call Trace:
> > [17606.849461]  <TASK>
> > [17606.849465]  dump_stack_lvl+0x82/0xd0
> > [17606.849473]  print_circular_bug+0x2d2/0x410
> > [17606.849473]  print_circular_bug+0x2d2/0x410
> > [17606.849482]  check_noncircular+0x15d/0x180
> > [17606.849492]  __lock_acquire+0x167c/0x27d0
> > [17606.849500]  lock_acquire+0xd5/0x300
> > [17606.849507]  ? touch_wq_lockdep_map+0x21/0x80
> > [17606.849515]  ? lockdep_init_map_type+0x4b/0x260
> > [17606.849522]  ? touch_wq_lockdep_map+0x21/0x80
> > [17606.849529]  touch_wq_lockdep_map+0x36/0x80
> > [17606.849536]  ? touch_wq_lockdep_map+0x21/0x80
> > [17606.849544]  __flush_workqueue+0x7e/0x4a0
> > [17606.849551]  ? find_held_lock+0x2b/0x80
> > [17606.849561]  drain_workqueue+0x92/0x130
> > [17606.849569]  destroy_workqueue+0x55/0x380
> > [17606.849577]  xe_eu_stall_data_buf_destroy+0x11/0x50 [xe]
> > [17606.849627]  xe_eu_stall_stream_close+0x37/0x70 [xe]
> > [17606.849678]  __fput+0xed/0x2b0
> > [17606.849683]  __x64_sys_close+0x37/0x80
> > [17606.849691]  do_syscall_64+0x68/0x140
> > [17606.849698]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
> > [17606.849706] RIP: 0033:0x7fdc81b14f67
> > [17606.849712] Code: ff e8 0d 16 02 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 03 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 41 c3 48 83 ec 18 89 7c 24 0c e8 73 ba f7 ff
> > [17606.849728] RSP: 002b:00007fffd2bd7e58 EFLAGS: 00000246 ORIG_RAX: 0000000000000003
> > [17606.849738] RAX: ffffffffffffffda RBX: 0000559f7fa08100 RCX: 00007fdc81b14f67
> > [17606.849746] RDX: 0000000000000000 RSI: 0000000000006901 RDI: 0000000000000004
> > [17606.849754] RBP: 00007fdc7d40bc90 R08: 0000000000000000 R09: 000000007fffffff
> > [17606.849762] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
> > [17606.849770] R13: 0000000000000000 R14: 0000000000000001 R15: 0000000000000000
> > [17606.849783]  </TASK>
>
> Could you try out this change in your patch (also just use
> gt->eu_stall->stream_lock, not stream->buf_lock) and see if it resolves
> this issue:
>
>	@@ -573,7 +573,6 @@ static void xe_eu_stall_stream_free(struct xe_eu_stall_data_stream *stream)
>
>	 static void xe_eu_stall_data_buf_destroy(struct xe_eu_stall_data_stream *stream)
>	 {
>	-       destroy_workqueue(stream->buf_poll_wq);
>		xe_bo_unpin_map_no_vm(stream->bo);
>		kfree(stream->xecore_buf);
>	 }
>	@@ -829,6 +828,8 @@ static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
>		xe_eu_stall_stream_free(stream);
>		mutex_unlock(&gt->eu_stall->stream_lock);
>
>	+       destroy_workqueue(stream->buf_poll_wq);
>	+
>		return 0;
>	 }
>
> Basically move destroy_workqueue outside gt->eu_stall->stream_lock.
>
> I will look more into this. But from the above trace it looks like the
> issue of lock order between two locks in different code paths. The two
> locks are stream_lock and something let's call wq_lock (associated with the
> workqueue or the work item).
>
> So this is what we see about the order of these two locks in these
> instances in the code (assuming we are only using stream_lock):
>
> 1. eu_stall_data_buf_poll_work_fn: wq_lock is taken first followed by
>    stream_lock inside eu_stall_data_buf_poll.
>
> 2. xe_eu_stall_disable_locked: stream_lock is taken first followed by
>    wq_lock when we do cancel_delayed_work_sync (if at all)
>
> 3. xe_eu_stall_stream_close: stream_lock is taken first followed by wq_lock
>    when we do destroy_workqueue.
>
> So looks like lockdep is complaining about the lock order reversal between
> 1. and 3. above. I am not sure if the order reversal between 1. and 2. is a
> problem or not (if lockdep complains about this or not). If it is, we could
> try moving cancel_delayed_work_sync also outside stream_lock. But we
> haven't seen a trace for the second case yet.
>
> So anyway, the first thing to try is the patch above and see if it fixes
> this issue.
>
> Another idea would be to move buf_poll_wq into gt->eu_stall (rather than
> the stream), so it does not have to be destroyed when the stream fd is
> closed.

So I decided to do a quick POC to see if my suggestion above to get rid of
the circular locking dependency worked. And basically it does, with the
patch below (we have to ensure stream doesn't get freed and I haven't
deleted buf_lock), but you will get the idea. I reproduced the issue with
your kernel patches and IGT and made sure the patch below fixes it. So
buf_lock is not needed.

So with the patch below the circular locking dependency is gone. So let's
go with something like this, if you agree:

diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
index b94585bdf91c6..a3fc424b36665 100644
--- a/drivers/gpu/drm/xe/xe_eu_stall.c
+++ b/drivers/gpu/drm/xe/xe_eu_stall.c
@@ -365,7 +365,7 @@ static bool eu_stall_data_buf_poll(struct xe_eu_stall_data_stream *stream)
 	u16 group, instance;
 	unsigned int xecore;
 
-	mutex_lock(&stream->buf_lock);
+	mutex_lock(&gt->eu_stall->stream_lock);
 	for_each_dss_steering(xecore, gt, group, instance) {
 		xecore_buf = &stream->xecore_buf[xecore];
 		read_ptr = xecore_buf->read;
@@ -383,7 +383,7 @@ static bool eu_stall_data_buf_poll(struct xe_eu_stall_data_stream *stream)
 			set_bit(xecore, stream->data_drop.mask);
 		xecore_buf->write = write_ptr;
 	}
-	mutex_unlock(&stream->buf_lock);
+	mutex_unlock(&gt->eu_stall->stream_lock);
 
 	return min_data_present;
 }
@@ -503,14 +503,12 @@ static ssize_t xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *st
 		stream->data_drop.reported_to_user = false;
 	}
 
-	mutex_lock(&stream->buf_lock);
 	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)
 			break;
 	}
-	mutex_unlock(&stream->buf_lock);
 	return total_size ?: (ret ?: -EAGAIN);
 }
 
@@ -573,7 +571,6 @@ static void xe_eu_stall_stream_free(struct xe_eu_stall_data_stream *stream)
 
 static void xe_eu_stall_data_buf_destroy(struct xe_eu_stall_data_stream *stream)
 {
-	destroy_workqueue(stream->buf_poll_wq);
 	xe_bo_unpin_map_no_vm(stream->bo);
 	kfree(stream->xecore_buf);
 }
@@ -826,9 +823,12 @@ static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
 	mutex_lock(&gt->eu_stall->stream_lock);
 	xe_eu_stall_disable_locked(stream);
 	xe_eu_stall_data_buf_destroy(stream);
-	xe_eu_stall_stream_free(stream);
+	gt->eu_stall->stream = NULL;
 	mutex_unlock(&gt->eu_stall->stream_lock);
 
+	destroy_workqueue(stream->buf_poll_wq);
+	kfree(stream);
+
 	return 0;
 }

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

* Re: [PATCH v10 4/8] drm/xe/eustall: Add support to read() and poll() EU stall data
  2025-02-20 19:52         ` Dixit, Ashutosh
@ 2025-02-20 20:02           ` Dixit, Ashutosh
  2025-02-24 18:10             ` Harish Chegondi
  2025-02-24 18:06           ` Harish Chegondi
  1 sibling, 1 reply; 31+ messages in thread
From: Dixit, Ashutosh @ 2025-02-20 20:02 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

On Thu, 20 Feb 2025 11:52:34 -0800, Dixit, Ashutosh wrote:
>
> On Wed, 19 Feb 2025 23:02:45 -0800, Dixit, Ashutosh wrote:
> >
> > On Wed, 19 Feb 2025 11:43:19 -0800, Harish Chegondi wrote:
> > >
> >
> > Hi Harish,
> >
> > > On Wed, Feb 19, 2025 at 10:15:52AM -0800, Dixit, Ashutosh wrote:
> > > Hi Ashutosh,
> > >
> > > > On Tue, 18 Feb 2025 11:53:54 -0800, Harish Chegondi wrote:
> > > > >
> > > > > @@ -39,7 +40,9 @@ struct per_xecore_buf {
> > > > >  };
> > > > >
> > > > >  struct xe_eu_stall_data_stream {
> > > > > +	bool pollin;
> > > > >	bool enabled;
> > > > > +	wait_queue_head_t poll_wq;
> > > > >	size_t data_record_size;
> > > > >	size_t per_xecore_buf_size;
> > > > >	unsigned int wait_num_reports;
> > > > > @@ -47,7 +50,11 @@ struct xe_eu_stall_data_stream {
> > > > >
> > > > >	struct xe_gt *gt;
> > > > >	struct xe_bo *bo;
> > > > > +	/* Lock to protect xecore_buf */
> > > > > +	struct mutex buf_lock;
> > > >
> > > > Why do we need this new lock? I thought we would just be able to use
> > > > gt->eu_stall->stream_lock? stream_lock is already taken for read(), so we
> > > > just need to take it for eu_stall_data_buf_poll()?
> > >
> > > I started off with using the gt->eu_stall->stream_lock. But I have seen
> > > warnings in the dmesg log while testing indicating possible circular
> > > locking dependency leading to a deadlock. Maybe I can spend more time
> > > later to investigate further and eliminate the possible circular locking
> > > dependency. But for now, I decided to use a new lock to eliminate the
> > > per subslice lock. Here is the dmesg log that I saved from my testing to
> > > investigate later.
> > >
> > > [17606.848776] ======================================================
> > > [17606.848781] WARNING: possible circular locking dependency detected
> > > [17606.848786] 6.13.0-upstream #3 Not tainted
> > > [17606.848791] ------------------------------------------------------
> > > [17606.848796] xe_eu_stall/21899 is trying to acquire lock:
> > > [17606.848801] ffff88810daad948 ((wq_completion)xe_eu_stall){+.+.}-{0:0}, at: touch_wq_lockdep_map+0x21/0x80
> > > [17606.848822]
> > >                but task is already holding lock:
> > > [17606.848827] ffff88810d0786a8 (&gt->eu_stall->stream_lock){+.+.}-{4:4}, at: xe_eu_stall_stream_close+0x27/0x70 [xe]
> > > [17606.848903]
> > >                which lock already depends on the new lock.
> > >
> > > [17606.848909]
> > >                the existing dependency chain (in reverse order) is:
> > > [17606.848915]
> > >                -> #2 (&gt->eu_stall->stream_lock){+.+.}-{4:4}:
> > > [17606.848915]
> > >                -> #2 (&gt->eu_stall->stream_lock){+.+.}-{4:4}:
> > > [17606.848925]        __mutex_lock+0xb4/0xeb0
> > > [17606.848934]        eu_stall_data_buf_poll+0x42/0x180 [xe]
> > > [17606.848989]        eu_stall_data_buf_poll_work_fn+0x15/0x60 [xe]
> > > [17606.849042]        process_one_work+0x207/0x640
> > > [17606.849051]        worker_thread+0x18c/0x330
> > > [17606.849058]        kthread+0xeb/0x120
> > > [17606.849065]        ret_from_fork+0x2c/0x50
> > > [17606.849073]        ret_from_fork_asm+0x1a/0x30
> > > [17606.849081]
> > >                -> #1 ((work_completion)(&(&stream->buf_poll_work)->work)){+.+.}-{0:0}:
> > > [17606.849092]        process_one_work+0x1e3/0x640
> > > [17606.849100]        worker_thread+0x18c/0x330
> > > [17606.849107]        kthread+0xeb/0x120
> > > [17606.849113]        ret_from_fork+0x2c/0x50
> > > [17606.849120]        ret_from_fork_asm+0x1a/0x30
> > > [17606.849126]
> > >                -> #0 ((wq_completion)xe_eu_stall){+.+.}-{0:0}:
> > > [17606.849134]        __lock_acquire+0x167c/0x27d0
> > > [17606.849141]        lock_acquire+0xd5/0x300
> > > [17606.849148]        touch_wq_lockdep_map+0x36/0x80
> > > [17606.849155]        __flush_workqueue+0x7e/0x4a0
> > > [17606.849163]        drain_workqueue+0x92/0x130
> > > [17606.849170]        destroy_workqueue+0x55/0x380
> > > [17606.849177]        xe_eu_stall_data_buf_destroy+0x11/0x50 [xe]
> > > [17606.849220]        xe_eu_stall_stream_close+0x37/0x70 [xe]
> > > [17606.849259]        __fput+0xed/0x2b0
> > > [17606.849264]        __x64_sys_close+0x37/0x80
> > > [17606.849271]        do_syscall_64+0x68/0x140
> > > [17606.849276]        entry_SYSCALL_64_after_hwframe+0x76/0x7e
> > > [17606.849286]
> > >                other info that might help us debug this:
> > >
> > > [17606.849294] Chain exists of:
> > >                  (wq_completion)xe_eu_stall --> (work_completion)(&(&stream->buf_poll_work)->work) --> &gt->eu_stall->stream_lock
> > >
> > > [17606.849312]  Possible unsafe locking scenario:
> > >
> > > [17606.849318]        CPU0                    CPU1
> > > [17606.849323]        ----                    ----
> > > [17606.849328]   lock(&gt->eu_stall->stream_lock);
> > > [17606.849334]                                lock((work_completion)(&(&stream->buf_poll_work)->work));
> > > [17606.849344]                                lock(&gt->eu_stall->stream_lock);
> > > [17606.849352]   lock((wq_completion)xe_eu_stall);
> > > [17606.849359]
> > >                 *** DEADLOCK ***
> > >
> > > [17606.849365] 1 lock held by xe_eu_stall/21899:
> > > [17606.849371]  #0: ffff88810d0786a8 (&gt->eu_stall->stream_lock){+.+.}-{4:4}, at: xe_eu_stall_stream_close+0x27/0x70 [xe]
> > > [17606.849430]
> > >                stack backtrace:
> > > [17606.849435] CPU: 3 UID: 0 PID: 21899 Comm: xe_eu_stall Not tainted 6.13.0-upstream #3
> > > [17606.849445] Hardware name: Intel Corporation Lunar Lake Client Platform/LNL-M LP5 RVP1, BIOS LNLMFWI1.R00.3220.D89.2407012051 07/01/2024
> > > [17606.849457] Call Trace:
> > > [17606.849461]  <TASK>
> > > [17606.849465]  dump_stack_lvl+0x82/0xd0
> > > [17606.849473]  print_circular_bug+0x2d2/0x410
> > > [17606.849473]  print_circular_bug+0x2d2/0x410
> > > [17606.849482]  check_noncircular+0x15d/0x180
> > > [17606.849492]  __lock_acquire+0x167c/0x27d0
> > > [17606.849500]  lock_acquire+0xd5/0x300
> > > [17606.849507]  ? touch_wq_lockdep_map+0x21/0x80
> > > [17606.849515]  ? lockdep_init_map_type+0x4b/0x260
> > > [17606.849522]  ? touch_wq_lockdep_map+0x21/0x80
> > > [17606.849529]  touch_wq_lockdep_map+0x36/0x80
> > > [17606.849536]  ? touch_wq_lockdep_map+0x21/0x80
> > > [17606.849544]  __flush_workqueue+0x7e/0x4a0
> > > [17606.849551]  ? find_held_lock+0x2b/0x80
> > > [17606.849561]  drain_workqueue+0x92/0x130
> > > [17606.849569]  destroy_workqueue+0x55/0x380
> > > [17606.849577]  xe_eu_stall_data_buf_destroy+0x11/0x50 [xe]
> > > [17606.849627]  xe_eu_stall_stream_close+0x37/0x70 [xe]
> > > [17606.849678]  __fput+0xed/0x2b0
> > > [17606.849683]  __x64_sys_close+0x37/0x80
> > > [17606.849691]  do_syscall_64+0x68/0x140
> > > [17606.849698]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
> > > [17606.849706] RIP: 0033:0x7fdc81b14f67
> > > [17606.849712] Code: ff e8 0d 16 02 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 03 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 41 c3 48 83 ec 18 89 7c 24 0c e8 73 ba f7 ff
> > > [17606.849728] RSP: 002b:00007fffd2bd7e58 EFLAGS: 00000246 ORIG_RAX: 0000000000000003
> > > [17606.849738] RAX: ffffffffffffffda RBX: 0000559f7fa08100 RCX: 00007fdc81b14f67
> > > [17606.849746] RDX: 0000000000000000 RSI: 0000000000006901 RDI: 0000000000000004
> > > [17606.849754] RBP: 00007fdc7d40bc90 R08: 0000000000000000 R09: 000000007fffffff
> > > [17606.849762] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
> > > [17606.849770] R13: 0000000000000000 R14: 0000000000000001 R15: 0000000000000000
> > > [17606.849783]  </TASK>
> >
> > Could you try out this change in your patch (also just use
> > gt->eu_stall->stream_lock, not stream->buf_lock) and see if it resolves
> > this issue:
> >
> >	@@ -573,7 +573,6 @@ static void xe_eu_stall_stream_free(struct xe_eu_stall_data_stream *stream)
> >
> >	 static void xe_eu_stall_data_buf_destroy(struct xe_eu_stall_data_stream *stream)
> >	 {
> >	-       destroy_workqueue(stream->buf_poll_wq);
> >		xe_bo_unpin_map_no_vm(stream->bo);
> >		kfree(stream->xecore_buf);
> >	 }
> >	@@ -829,6 +828,8 @@ static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
> >		xe_eu_stall_stream_free(stream);
> >		mutex_unlock(&gt->eu_stall->stream_lock);
> >
> >	+       destroy_workqueue(stream->buf_poll_wq);
> >	+
> >		return 0;
> >	 }
> >
> > Basically move destroy_workqueue outside gt->eu_stall->stream_lock.
> >
> > I will look more into this. But from the above trace it looks like the
> > issue of lock order between two locks in different code paths. The two
> > locks are stream_lock and something let's call wq_lock (associated with the
> > workqueue or the work item).
> >
> > So this is what we see about the order of these two locks in these
> > instances in the code (assuming we are only using stream_lock):
> >
> > 1. eu_stall_data_buf_poll_work_fn: wq_lock is taken first followed by
> >    stream_lock inside eu_stall_data_buf_poll.
> >
> > 2. xe_eu_stall_disable_locked: stream_lock is taken first followed by
> >    wq_lock when we do cancel_delayed_work_sync (if at all)
> >
> > 3. xe_eu_stall_stream_close: stream_lock is taken first followed by wq_lock
> >    when we do destroy_workqueue.
> >
> > So looks like lockdep is complaining about the lock order reversal between
> > 1. and 3. above. I am not sure if the order reversal between 1. and 2. is a
> > problem or not (if lockdep complains about this or not). If it is, we could
> > try moving cancel_delayed_work_sync also outside stream_lock. But we
> > haven't seen a trace for the second case yet.
> >
> > So anyway, the first thing to try is the patch above and see if it fixes
> > this issue.
> >
> > Another idea would be to move buf_poll_wq into gt->eu_stall (rather than
> > the stream), so it does not have to be destroyed when the stream fd is
> > closed.
>
> So I decided to do a quick POC to see if my suggestion above to get rid of
> the circular locking dependency worked. And basically it does, with the
> patch below (we have to ensure stream doesn't get freed and I haven't
> deleted buf_lock), but you will get the idea. I reproduced the issue with
> your kernel patches and IGT and made sure the patch below fixes it. So
> buf_lock is not needed.
>
> So with the patch below the circular locking dependency is gone. So let's
> go with something like this, if you agree:
>
> diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> index b94585bdf91c6..a3fc424b36665 100644
> --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> @@ -365,7 +365,7 @@ static bool eu_stall_data_buf_poll(struct xe_eu_stall_data_stream *stream)
>	u16 group, instance;
>	unsigned int xecore;
>
> -	mutex_lock(&stream->buf_lock);
> +	mutex_lock(&gt->eu_stall->stream_lock);
>	for_each_dss_steering(xecore, gt, group, instance) {
>		xecore_buf = &stream->xecore_buf[xecore];
>		read_ptr = xecore_buf->read;
> @@ -383,7 +383,7 @@ static bool eu_stall_data_buf_poll(struct xe_eu_stall_data_stream *stream)
>			set_bit(xecore, stream->data_drop.mask);
>		xecore_buf->write = write_ptr;
>	}
> -	mutex_unlock(&stream->buf_lock);
> +	mutex_unlock(&gt->eu_stall->stream_lock);
>
>	return min_data_present;
>  }
> @@ -503,14 +503,12 @@ static ssize_t xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *st
>		stream->data_drop.reported_to_user = false;
>	}
>
> -	mutex_lock(&stream->buf_lock);
>	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)
>			break;
>	}
> -	mutex_unlock(&stream->buf_lock);
>	return total_size ?: (ret ?: -EAGAIN);
>  }
>
> @@ -573,7 +571,6 @@ static void xe_eu_stall_stream_free(struct xe_eu_stall_data_stream *stream)
>
>  static void xe_eu_stall_data_buf_destroy(struct xe_eu_stall_data_stream *stream)
>  {
> -	destroy_workqueue(stream->buf_poll_wq);
>	xe_bo_unpin_map_no_vm(stream->bo);
>	kfree(stream->xecore_buf);
>  }
> @@ -826,9 +823,12 @@ static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
>	mutex_lock(&gt->eu_stall->stream_lock);
>	xe_eu_stall_disable_locked(stream);
>	xe_eu_stall_data_buf_destroy(stream);
> -	xe_eu_stall_stream_free(stream);
> +	gt->eu_stall->stream = NULL;
>	mutex_unlock(&gt->eu_stall->stream_lock);
>
> +	destroy_workqueue(stream->buf_poll_wq);
> +	kfree(stream);
> +
>	return 0;
>  }

Maybe, as suggested above, move buf_poll_wq into gt->eu_stall (rather than
the stream), so it does not have to be destroyed when the stream fd is
closed. That way we can just call xe_eu_stall_stream_free() from
xe_eu_stall_stream_close().

And we'll alloc the workqueue in xe_eu_stall_init() and destroy it in
xe_eu_stall_fini(). This will minimize the changes.

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

* Re: [PATCH v10 4/8] drm/xe/eustall: Add support to read() and poll() EU stall data
  2025-02-20 19:52         ` Dixit, Ashutosh
  2025-02-20 20:02           ` Dixit, Ashutosh
@ 2025-02-24 18:06           ` Harish Chegondi
  1 sibling, 0 replies; 31+ messages in thread
From: Harish Chegondi @ 2025-02-24 18:06 UTC (permalink / raw)
  To: Dixit, Ashutosh; +Cc: intel-xe

On Thu, Feb 20, 2025 at 11:52:34AM -0800, Dixit, Ashutosh wrote:
Hi Ashutosh,


> On Wed, 19 Feb 2025 23:02:45 -0800, Dixit, Ashutosh wrote:
> >
> > On Wed, 19 Feb 2025 11:43:19 -0800, Harish Chegondi wrote:
> > >
> >
> > Hi Harish,
> >
> > > On Wed, Feb 19, 2025 at 10:15:52AM -0800, Dixit, Ashutosh wrote:
> > > Hi Ashutosh,
> > >
> > > > On Tue, 18 Feb 2025 11:53:54 -0800, Harish Chegondi wrote:
> > > > >
> > > > > @@ -39,7 +40,9 @@ struct per_xecore_buf {
> > > > >  };
> > > > >
> > > > >  struct xe_eu_stall_data_stream {
> > > > > +	bool pollin;
> > > > >	bool enabled;
> > > > > +	wait_queue_head_t poll_wq;
> > > > >	size_t data_record_size;
> > > > >	size_t per_xecore_buf_size;
> > > > >	unsigned int wait_num_reports;
> > > > > @@ -47,7 +50,11 @@ struct xe_eu_stall_data_stream {
> > > > >
> > > > >	struct xe_gt *gt;
> > > > >	struct xe_bo *bo;
> > > > > +	/* Lock to protect xecore_buf */
> > > > > +	struct mutex buf_lock;
> > > >
> > > > Why do we need this new lock? I thought we would just be able to use
> > > > gt->eu_stall->stream_lock? stream_lock is already taken for read(), so we
> > > > just need to take it for eu_stall_data_buf_poll()?
> > >
> > > I started off with using the gt->eu_stall->stream_lock. But I have seen
> > > warnings in the dmesg log while testing indicating possible circular
> > > locking dependency leading to a deadlock. Maybe I can spend more time
> > > later to investigate further and eliminate the possible circular locking
> > > dependency. But for now, I decided to use a new lock to eliminate the
> > > per subslice lock. Here is the dmesg log that I saved from my testing to
> > > investigate later.
> > >
> > > [17606.848776] ======================================================
> > > [17606.848781] WARNING: possible circular locking dependency detected
> > > [17606.848786] 6.13.0-upstream #3 Not tainted
> > > [17606.848791] ------------------------------------------------------
> > > [17606.848796] xe_eu_stall/21899 is trying to acquire lock:
> > > [17606.848801] ffff88810daad948 ((wq_completion)xe_eu_stall){+.+.}-{0:0}, at: touch_wq_lockdep_map+0x21/0x80
> > > [17606.848822]
> > >                but task is already holding lock:
> > > [17606.848827] ffff88810d0786a8 (&gt->eu_stall->stream_lock){+.+.}-{4:4}, at: xe_eu_stall_stream_close+0x27/0x70 [xe]
> > > [17606.848903]
> > >                which lock already depends on the new lock.
> > >
> > > [17606.848909]
> > >                the existing dependency chain (in reverse order) is:
> > > [17606.848915]
> > >                -> #2 (&gt->eu_stall->stream_lock){+.+.}-{4:4}:
> > > [17606.848915]
> > >                -> #2 (&gt->eu_stall->stream_lock){+.+.}-{4:4}:
> > > [17606.848925]        __mutex_lock+0xb4/0xeb0
> > > [17606.848934]        eu_stall_data_buf_poll+0x42/0x180 [xe]
> > > [17606.848989]        eu_stall_data_buf_poll_work_fn+0x15/0x60 [xe]
> > > [17606.849042]        process_one_work+0x207/0x640
> > > [17606.849051]        worker_thread+0x18c/0x330
> > > [17606.849058]        kthread+0xeb/0x120
> > > [17606.849065]        ret_from_fork+0x2c/0x50
> > > [17606.849073]        ret_from_fork_asm+0x1a/0x30
> > > [17606.849081]
> > >                -> #1 ((work_completion)(&(&stream->buf_poll_work)->work)){+.+.}-{0:0}:
> > > [17606.849092]        process_one_work+0x1e3/0x640
> > > [17606.849100]        worker_thread+0x18c/0x330
> > > [17606.849107]        kthread+0xeb/0x120
> > > [17606.849113]        ret_from_fork+0x2c/0x50
> > > [17606.849120]        ret_from_fork_asm+0x1a/0x30
> > > [17606.849126]
> > >                -> #0 ((wq_completion)xe_eu_stall){+.+.}-{0:0}:
> > > [17606.849134]        __lock_acquire+0x167c/0x27d0
> > > [17606.849141]        lock_acquire+0xd5/0x300
> > > [17606.849148]        touch_wq_lockdep_map+0x36/0x80
> > > [17606.849155]        __flush_workqueue+0x7e/0x4a0
> > > [17606.849163]        drain_workqueue+0x92/0x130
> > > [17606.849170]        destroy_workqueue+0x55/0x380
> > > [17606.849177]        xe_eu_stall_data_buf_destroy+0x11/0x50 [xe]
> > > [17606.849220]        xe_eu_stall_stream_close+0x37/0x70 [xe]
> > > [17606.849259]        __fput+0xed/0x2b0
> > > [17606.849264]        __x64_sys_close+0x37/0x80
> > > [17606.849271]        do_syscall_64+0x68/0x140
> > > [17606.849276]        entry_SYSCALL_64_after_hwframe+0x76/0x7e
> > > [17606.849286]
> > >                other info that might help us debug this:
> > >
> > > [17606.849294] Chain exists of:
> > >                  (wq_completion)xe_eu_stall --> (work_completion)(&(&stream->buf_poll_work)->work) --> &gt->eu_stall->stream_lock
> > >
> > > [17606.849312]  Possible unsafe locking scenario:
> > >
> > > [17606.849318]        CPU0                    CPU1
> > > [17606.849323]        ----                    ----
> > > [17606.849328]   lock(&gt->eu_stall->stream_lock);
> > > [17606.849334]                                lock((work_completion)(&(&stream->buf_poll_work)->work));
> > > [17606.849344]                                lock(&gt->eu_stall->stream_lock);
> > > [17606.849352]   lock((wq_completion)xe_eu_stall);
> > > [17606.849359]
> > >                 *** DEADLOCK ***
> > >
> > > [17606.849365] 1 lock held by xe_eu_stall/21899:
> > > [17606.849371]  #0: ffff88810d0786a8 (&gt->eu_stall->stream_lock){+.+.}-{4:4}, at: xe_eu_stall_stream_close+0x27/0x70 [xe]
> > > [17606.849430]
> > >                stack backtrace:
> > > [17606.849435] CPU: 3 UID: 0 PID: 21899 Comm: xe_eu_stall Not tainted 6.13.0-upstream #3
> > > [17606.849445] Hardware name: Intel Corporation Lunar Lake Client Platform/LNL-M LP5 RVP1, BIOS LNLMFWI1.R00.3220.D89.2407012051 07/01/2024
> > > [17606.849457] Call Trace:
> > > [17606.849461]  <TASK>
> > > [17606.849465]  dump_stack_lvl+0x82/0xd0
> > > [17606.849473]  print_circular_bug+0x2d2/0x410
> > > [17606.849473]  print_circular_bug+0x2d2/0x410
> > > [17606.849482]  check_noncircular+0x15d/0x180
> > > [17606.849492]  __lock_acquire+0x167c/0x27d0
> > > [17606.849500]  lock_acquire+0xd5/0x300
> > > [17606.849507]  ? touch_wq_lockdep_map+0x21/0x80
> > > [17606.849515]  ? lockdep_init_map_type+0x4b/0x260
> > > [17606.849522]  ? touch_wq_lockdep_map+0x21/0x80
> > > [17606.849529]  touch_wq_lockdep_map+0x36/0x80
> > > [17606.849536]  ? touch_wq_lockdep_map+0x21/0x80
> > > [17606.849544]  __flush_workqueue+0x7e/0x4a0
> > > [17606.849551]  ? find_held_lock+0x2b/0x80
> > > [17606.849561]  drain_workqueue+0x92/0x130
> > > [17606.849569]  destroy_workqueue+0x55/0x380
> > > [17606.849577]  xe_eu_stall_data_buf_destroy+0x11/0x50 [xe]
> > > [17606.849627]  xe_eu_stall_stream_close+0x37/0x70 [xe]
> > > [17606.849678]  __fput+0xed/0x2b0
> > > [17606.849683]  __x64_sys_close+0x37/0x80
> > > [17606.849691]  do_syscall_64+0x68/0x140
> > > [17606.849698]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
> > > [17606.849706] RIP: 0033:0x7fdc81b14f67
> > > [17606.849712] Code: ff e8 0d 16 02 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 03 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 41 c3 48 83 ec 18 89 7c 24 0c e8 73 ba f7 ff
> > > [17606.849728] RSP: 002b:00007fffd2bd7e58 EFLAGS: 00000246 ORIG_RAX: 0000000000000003
> > > [17606.849738] RAX: ffffffffffffffda RBX: 0000559f7fa08100 RCX: 00007fdc81b14f67
> > > [17606.849746] RDX: 0000000000000000 RSI: 0000000000006901 RDI: 0000000000000004
> > > [17606.849754] RBP: 00007fdc7d40bc90 R08: 0000000000000000 R09: 000000007fffffff
> > > [17606.849762] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
> > > [17606.849770] R13: 0000000000000000 R14: 0000000000000001 R15: 0000000000000000
> > > [17606.849783]  </TASK>
> >
> > Could you try out this change in your patch (also just use
> > gt->eu_stall->stream_lock, not stream->buf_lock) and see if it resolves
> > this issue:
> >
> >	@@ -573,7 +573,6 @@ static void xe_eu_stall_stream_free(struct xe_eu_stall_data_stream *stream)
> >
> >	 static void xe_eu_stall_data_buf_destroy(struct xe_eu_stall_data_stream *stream)
> >	 {
> >	-       destroy_workqueue(stream->buf_poll_wq);
> >		xe_bo_unpin_map_no_vm(stream->bo);
> >		kfree(stream->xecore_buf);
> >	 }
> >	@@ -829,6 +828,8 @@ static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
> >		xe_eu_stall_stream_free(stream);
> >		mutex_unlock(&gt->eu_stall->stream_lock);
> >
> >	+       destroy_workqueue(stream->buf_poll_wq);
> >	+
> >		return 0;
> >	 }
> >
> > Basically move destroy_workqueue outside gt->eu_stall->stream_lock.
> >
> > I will look more into this. But from the above trace it looks like the
> > issue of lock order between two locks in different code paths. The two
> > locks are stream_lock and something let's call wq_lock (associated with the
> > workqueue or the work item).
> >
> > So this is what we see about the order of these two locks in these
> > instances in the code (assuming we are only using stream_lock):
> >
> > 1. eu_stall_data_buf_poll_work_fn: wq_lock is taken first followed by
> >    stream_lock inside eu_stall_data_buf_poll.
> >
> > 2. xe_eu_stall_disable_locked: stream_lock is taken first followed by
> >    wq_lock when we do cancel_delayed_work_sync (if at all)
> >
> > 3. xe_eu_stall_stream_close: stream_lock is taken first followed by wq_lock
> >    when we do destroy_workqueue.
> >
> > So looks like lockdep is complaining about the lock order reversal between
> > 1. and 3. above. I am not sure if the order reversal between 1. and 2. is a
> > problem or not (if lockdep complains about this or not). If it is, we could
> > try moving cancel_delayed_work_sync also outside stream_lock. But we
> > haven't seen a trace for the second case yet.
> >
> > So anyway, the first thing to try is the patch above and see if it fixes
> > this issue.
> >
> > Another idea would be to move buf_poll_wq into gt->eu_stall (rather than
> > the stream), so it does not have to be destroyed when the stream fd is
> > closed.
> 
> So I decided to do a quick POC to see if my suggestion above to get rid of
> the circular locking dependency worked. And basically it does, with the
> patch below (we have to ensure stream doesn't get freed and I haven't
> deleted buf_lock), but you will get the idea. I reproduced the issue with
> your kernel patches and IGT and made sure the patch below fixes it. So
> buf_lock is not needed.
> 
> So with the patch below the circular locking dependency is gone. So let's
> go with something like this, if you agree:
> 
> diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> index b94585bdf91c6..a3fc424b36665 100644
> --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> @@ -365,7 +365,7 @@ static bool eu_stall_data_buf_poll(struct xe_eu_stall_data_stream *stream)
>  	u16 group, instance;
>  	unsigned int xecore;
>  
> -	mutex_lock(&stream->buf_lock);
> +	mutex_lock(&gt->eu_stall->stream_lock);
>  	for_each_dss_steering(xecore, gt, group, instance) {
>  		xecore_buf = &stream->xecore_buf[xecore];
>  		read_ptr = xecore_buf->read;
> @@ -383,7 +383,7 @@ static bool eu_stall_data_buf_poll(struct xe_eu_stall_data_stream *stream)
>  			set_bit(xecore, stream->data_drop.mask);
>  		xecore_buf->write = write_ptr;
>  	}
> -	mutex_unlock(&stream->buf_lock);
> +	mutex_unlock(&gt->eu_stall->stream_lock);
>  
>  	return min_data_present;
>  }
> @@ -503,14 +503,12 @@ static ssize_t xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *st
>  		stream->data_drop.reported_to_user = false;
>  	}
>  
> -	mutex_lock(&stream->buf_lock);
>  	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)
>  			break;
>  	}
> -	mutex_unlock(&stream->buf_lock);
>  	return total_size ?: (ret ?: -EAGAIN);
>  }
>  
> @@ -573,7 +571,6 @@ static void xe_eu_stall_stream_free(struct xe_eu_stall_data_stream *stream)
>  
>  static void xe_eu_stall_data_buf_destroy(struct xe_eu_stall_data_stream *stream)
>  {
> -	destroy_workqueue(stream->buf_poll_wq);
>  	xe_bo_unpin_map_no_vm(stream->bo);
>  	kfree(stream->xecore_buf);
>  }
> @@ -826,9 +823,12 @@ static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
>  	mutex_lock(&gt->eu_stall->stream_lock);
>  	xe_eu_stall_disable_locked(stream);
>  	xe_eu_stall_data_buf_destroy(stream);
> -	xe_eu_stall_stream_free(stream);
> +	gt->eu_stall->stream = NULL;
>  	mutex_unlock(&gt->eu_stall->stream_lock);
>  
> +	destroy_workqueue(stream->buf_poll_wq);
> +	kfree(stream);
> +
>  	return 0;
>  }
I tried your suggestions and I don't see the circular locking dependency
messages anymore.

Thank You
Harish.

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

* Re: [PATCH v10 4/8] drm/xe/eustall: Add support to read() and poll() EU stall data
  2025-02-20 20:02           ` Dixit, Ashutosh
@ 2025-02-24 18:10             ` Harish Chegondi
  2025-02-24 18:16               ` Dixit, Ashutosh
  0 siblings, 1 reply; 31+ messages in thread
From: Harish Chegondi @ 2025-02-24 18:10 UTC (permalink / raw)
  To: Dixit, Ashutosh; +Cc: intel-xe

On Thu, Feb 20, 2025 at 12:02:26PM -0800, Dixit, Ashutosh wrote:
> On Thu, 20 Feb 2025 11:52:34 -0800, Dixit, Ashutosh wrote:
> >
> > On Wed, 19 Feb 2025 23:02:45 -0800, Dixit, Ashutosh wrote:
> > >
> > > On Wed, 19 Feb 2025 11:43:19 -0800, Harish Chegondi wrote:
> > > >
> > >
> > > Hi Harish,
> > >
> > > > On Wed, Feb 19, 2025 at 10:15:52AM -0800, Dixit, Ashutosh wrote:
> > > > Hi Ashutosh,
> > > >
> > > > > On Tue, 18 Feb 2025 11:53:54 -0800, Harish Chegondi wrote:
> > > > > >
> > > > > > @@ -39,7 +40,9 @@ struct per_xecore_buf {
> > > > > >  };
> > > > > >
> > > > > >  struct xe_eu_stall_data_stream {
> > > > > > +	bool pollin;
> > > > > >	bool enabled;
> > > > > > +	wait_queue_head_t poll_wq;
> > > > > >	size_t data_record_size;
> > > > > >	size_t per_xecore_buf_size;
> > > > > >	unsigned int wait_num_reports;
> > > > > > @@ -47,7 +50,11 @@ struct xe_eu_stall_data_stream {
> > > > > >
> > > > > >	struct xe_gt *gt;
> > > > > >	struct xe_bo *bo;
> > > > > > +	/* Lock to protect xecore_buf */
> > > > > > +	struct mutex buf_lock;
> > > > >
> > > > > Why do we need this new lock? I thought we would just be able to use
> > > > > gt->eu_stall->stream_lock? stream_lock is already taken for read(), so we
> > > > > just need to take it for eu_stall_data_buf_poll()?
> > > >
> > > > I started off with using the gt->eu_stall->stream_lock. But I have seen
> > > > warnings in the dmesg log while testing indicating possible circular
> > > > locking dependency leading to a deadlock. Maybe I can spend more time
> > > > later to investigate further and eliminate the possible circular locking
> > > > dependency. But for now, I decided to use a new lock to eliminate the
> > > > per subslice lock. Here is the dmesg log that I saved from my testing to
> > > > investigate later.
> > > >
> > > > [17606.848776] ======================================================
> > > > [17606.848781] WARNING: possible circular locking dependency detected
> > > > [17606.848786] 6.13.0-upstream #3 Not tainted
> > > > [17606.848791] ------------------------------------------------------
> > > > [17606.848796] xe_eu_stall/21899 is trying to acquire lock:
> > > > [17606.848801] ffff88810daad948 ((wq_completion)xe_eu_stall){+.+.}-{0:0}, at: touch_wq_lockdep_map+0x21/0x80
> > > > [17606.848822]
> > > >                but task is already holding lock:
> > > > [17606.848827] ffff88810d0786a8 (&gt->eu_stall->stream_lock){+.+.}-{4:4}, at: xe_eu_stall_stream_close+0x27/0x70 [xe]
> > > > [17606.848903]
> > > >                which lock already depends on the new lock.
> > > >
> > > > [17606.848909]
> > > >                the existing dependency chain (in reverse order) is:
> > > > [17606.848915]
> > > >                -> #2 (&gt->eu_stall->stream_lock){+.+.}-{4:4}:
> > > > [17606.848915]
> > > >                -> #2 (&gt->eu_stall->stream_lock){+.+.}-{4:4}:
> > > > [17606.848925]        __mutex_lock+0xb4/0xeb0
> > > > [17606.848934]        eu_stall_data_buf_poll+0x42/0x180 [xe]
> > > > [17606.848989]        eu_stall_data_buf_poll_work_fn+0x15/0x60 [xe]
> > > > [17606.849042]        process_one_work+0x207/0x640
> > > > [17606.849051]        worker_thread+0x18c/0x330
> > > > [17606.849058]        kthread+0xeb/0x120
> > > > [17606.849065]        ret_from_fork+0x2c/0x50
> > > > [17606.849073]        ret_from_fork_asm+0x1a/0x30
> > > > [17606.849081]
> > > >                -> #1 ((work_completion)(&(&stream->buf_poll_work)->work)){+.+.}-{0:0}:
> > > > [17606.849092]        process_one_work+0x1e3/0x640
> > > > [17606.849100]        worker_thread+0x18c/0x330
> > > > [17606.849107]        kthread+0xeb/0x120
> > > > [17606.849113]        ret_from_fork+0x2c/0x50
> > > > [17606.849120]        ret_from_fork_asm+0x1a/0x30
> > > > [17606.849126]
> > > >                -> #0 ((wq_completion)xe_eu_stall){+.+.}-{0:0}:
> > > > [17606.849134]        __lock_acquire+0x167c/0x27d0
> > > > [17606.849141]        lock_acquire+0xd5/0x300
> > > > [17606.849148]        touch_wq_lockdep_map+0x36/0x80
> > > > [17606.849155]        __flush_workqueue+0x7e/0x4a0
> > > > [17606.849163]        drain_workqueue+0x92/0x130
> > > > [17606.849170]        destroy_workqueue+0x55/0x380
> > > > [17606.849177]        xe_eu_stall_data_buf_destroy+0x11/0x50 [xe]
> > > > [17606.849220]        xe_eu_stall_stream_close+0x37/0x70 [xe]
> > > > [17606.849259]        __fput+0xed/0x2b0
> > > > [17606.849264]        __x64_sys_close+0x37/0x80
> > > > [17606.849271]        do_syscall_64+0x68/0x140
> > > > [17606.849276]        entry_SYSCALL_64_after_hwframe+0x76/0x7e
> > > > [17606.849286]
> > > >                other info that might help us debug this:
> > > >
> > > > [17606.849294] Chain exists of:
> > > >                  (wq_completion)xe_eu_stall --> (work_completion)(&(&stream->buf_poll_work)->work) --> &gt->eu_stall->stream_lock
> > > >
> > > > [17606.849312]  Possible unsafe locking scenario:
> > > >
> > > > [17606.849318]        CPU0                    CPU1
> > > > [17606.849323]        ----                    ----
> > > > [17606.849328]   lock(&gt->eu_stall->stream_lock);
> > > > [17606.849334]                                lock((work_completion)(&(&stream->buf_poll_work)->work));
> > > > [17606.849344]                                lock(&gt->eu_stall->stream_lock);
> > > > [17606.849352]   lock((wq_completion)xe_eu_stall);
> > > > [17606.849359]
> > > >                 *** DEADLOCK ***
> > > >
> > > > [17606.849365] 1 lock held by xe_eu_stall/21899:
> > > > [17606.849371]  #0: ffff88810d0786a8 (&gt->eu_stall->stream_lock){+.+.}-{4:4}, at: xe_eu_stall_stream_close+0x27/0x70 [xe]
> > > > [17606.849430]
> > > >                stack backtrace:
> > > > [17606.849435] CPU: 3 UID: 0 PID: 21899 Comm: xe_eu_stall Not tainted 6.13.0-upstream #3
> > > > [17606.849445] Hardware name: Intel Corporation Lunar Lake Client Platform/LNL-M LP5 RVP1, BIOS LNLMFWI1.R00.3220.D89.2407012051 07/01/2024
> > > > [17606.849457] Call Trace:
> > > > [17606.849461]  <TASK>
> > > > [17606.849465]  dump_stack_lvl+0x82/0xd0
> > > > [17606.849473]  print_circular_bug+0x2d2/0x410
> > > > [17606.849473]  print_circular_bug+0x2d2/0x410
> > > > [17606.849482]  check_noncircular+0x15d/0x180
> > > > [17606.849492]  __lock_acquire+0x167c/0x27d0
> > > > [17606.849500]  lock_acquire+0xd5/0x300
> > > > [17606.849507]  ? touch_wq_lockdep_map+0x21/0x80
> > > > [17606.849515]  ? lockdep_init_map_type+0x4b/0x260
> > > > [17606.849522]  ? touch_wq_lockdep_map+0x21/0x80
> > > > [17606.849529]  touch_wq_lockdep_map+0x36/0x80
> > > > [17606.849536]  ? touch_wq_lockdep_map+0x21/0x80
> > > > [17606.849544]  __flush_workqueue+0x7e/0x4a0
> > > > [17606.849551]  ? find_held_lock+0x2b/0x80
> > > > [17606.849561]  drain_workqueue+0x92/0x130
> > > > [17606.849569]  destroy_workqueue+0x55/0x380
> > > > [17606.849577]  xe_eu_stall_data_buf_destroy+0x11/0x50 [xe]
> > > > [17606.849627]  xe_eu_stall_stream_close+0x37/0x70 [xe]
> > > > [17606.849678]  __fput+0xed/0x2b0
> > > > [17606.849683]  __x64_sys_close+0x37/0x80
> > > > [17606.849691]  do_syscall_64+0x68/0x140
> > > > [17606.849698]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
> > > > [17606.849706] RIP: 0033:0x7fdc81b14f67
> > > > [17606.849712] Code: ff e8 0d 16 02 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 03 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 41 c3 48 83 ec 18 89 7c 24 0c e8 73 ba f7 ff
> > > > [17606.849728] RSP: 002b:00007fffd2bd7e58 EFLAGS: 00000246 ORIG_RAX: 0000000000000003
> > > > [17606.849738] RAX: ffffffffffffffda RBX: 0000559f7fa08100 RCX: 00007fdc81b14f67
> > > > [17606.849746] RDX: 0000000000000000 RSI: 0000000000006901 RDI: 0000000000000004
> > > > [17606.849754] RBP: 00007fdc7d40bc90 R08: 0000000000000000 R09: 000000007fffffff
> > > > [17606.849762] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
> > > > [17606.849770] R13: 0000000000000000 R14: 0000000000000001 R15: 0000000000000000
> > > > [17606.849783]  </TASK>
> > >
> > > Could you try out this change in your patch (also just use
> > > gt->eu_stall->stream_lock, not stream->buf_lock) and see if it resolves
> > > this issue:
> > >
> > >	@@ -573,7 +573,6 @@ static void xe_eu_stall_stream_free(struct xe_eu_stall_data_stream *stream)
> > >
> > >	 static void xe_eu_stall_data_buf_destroy(struct xe_eu_stall_data_stream *stream)
> > >	 {
> > >	-       destroy_workqueue(stream->buf_poll_wq);
> > >		xe_bo_unpin_map_no_vm(stream->bo);
> > >		kfree(stream->xecore_buf);
> > >	 }
> > >	@@ -829,6 +828,8 @@ static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
> > >		xe_eu_stall_stream_free(stream);
> > >		mutex_unlock(&gt->eu_stall->stream_lock);
> > >
> > >	+       destroy_workqueue(stream->buf_poll_wq);
> > >	+
> > >		return 0;
> > >	 }
> > >
> > > Basically move destroy_workqueue outside gt->eu_stall->stream_lock.
> > >
> > > I will look more into this. But from the above trace it looks like the
> > > issue of lock order between two locks in different code paths. The two
> > > locks are stream_lock and something let's call wq_lock (associated with the
> > > workqueue or the work item).
> > >
> > > So this is what we see about the order of these two locks in these
> > > instances in the code (assuming we are only using stream_lock):
> > >
> > > 1. eu_stall_data_buf_poll_work_fn: wq_lock is taken first followed by
> > >    stream_lock inside eu_stall_data_buf_poll.
> > >
> > > 2. xe_eu_stall_disable_locked: stream_lock is taken first followed by
> > >    wq_lock when we do cancel_delayed_work_sync (if at all)
> > >
> > > 3. xe_eu_stall_stream_close: stream_lock is taken first followed by wq_lock
> > >    when we do destroy_workqueue.
> > >
> > > So looks like lockdep is complaining about the lock order reversal between
> > > 1. and 3. above. I am not sure if the order reversal between 1. and 2. is a
> > > problem or not (if lockdep complains about this or not). If it is, we could
> > > try moving cancel_delayed_work_sync also outside stream_lock. But we
> > > haven't seen a trace for the second case yet.
> > >
> > > So anyway, the first thing to try is the patch above and see if it fixes
> > > this issue.
> > >
> > > Another idea would be to move buf_poll_wq into gt->eu_stall (rather than
> > > the stream), so it does not have to be destroyed when the stream fd is
> > > closed.
> >
> > So I decided to do a quick POC to see if my suggestion above to get rid of
> > the circular locking dependency worked. And basically it does, with the
> > patch below (we have to ensure stream doesn't get freed and I haven't
> > deleted buf_lock), but you will get the idea. I reproduced the issue with
> > your kernel patches and IGT and made sure the patch below fixes it. So
> > buf_lock is not needed.
> >
> > So with the patch below the circular locking dependency is gone. So let's
> > go with something like this, if you agree:
> >
> > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> > index b94585bdf91c6..a3fc424b36665 100644
> > --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> > +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> > @@ -365,7 +365,7 @@ static bool eu_stall_data_buf_poll(struct xe_eu_stall_data_stream *stream)
> >	u16 group, instance;
> >	unsigned int xecore;
> >
> > -	mutex_lock(&stream->buf_lock);
> > +	mutex_lock(&gt->eu_stall->stream_lock);
> >	for_each_dss_steering(xecore, gt, group, instance) {
> >		xecore_buf = &stream->xecore_buf[xecore];
> >		read_ptr = xecore_buf->read;
> > @@ -383,7 +383,7 @@ static bool eu_stall_data_buf_poll(struct xe_eu_stall_data_stream *stream)
> >			set_bit(xecore, stream->data_drop.mask);
> >		xecore_buf->write = write_ptr;
> >	}
> > -	mutex_unlock(&stream->buf_lock);
> > +	mutex_unlock(&gt->eu_stall->stream_lock);
> >
> >	return min_data_present;
> >  }
> > @@ -503,14 +503,12 @@ static ssize_t xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *st
> >		stream->data_drop.reported_to_user = false;
> >	}
> >
> > -	mutex_lock(&stream->buf_lock);
> >	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)
> >			break;
> >	}
> > -	mutex_unlock(&stream->buf_lock);
> >	return total_size ?: (ret ?: -EAGAIN);
> >  }
> >
> > @@ -573,7 +571,6 @@ static void xe_eu_stall_stream_free(struct xe_eu_stall_data_stream *stream)
> >
> >  static void xe_eu_stall_data_buf_destroy(struct xe_eu_stall_data_stream *stream)
> >  {
> > -	destroy_workqueue(stream->buf_poll_wq);
> >	xe_bo_unpin_map_no_vm(stream->bo);
> >	kfree(stream->xecore_buf);
> >  }
> > @@ -826,9 +823,12 @@ static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
> >	mutex_lock(&gt->eu_stall->stream_lock);
> >	xe_eu_stall_disable_locked(stream);
> >	xe_eu_stall_data_buf_destroy(stream);
> > -	xe_eu_stall_stream_free(stream);
> > +	gt->eu_stall->stream = NULL;
> >	mutex_unlock(&gt->eu_stall->stream_lock);
> >
> > +	destroy_workqueue(stream->buf_poll_wq);
> > +	kfree(stream);
> > +
> >	return 0;
> >  }
> 
> Maybe, as suggested above, move buf_poll_wq into gt->eu_stall (rather than
> the stream), so it does not have to be destroyed when the stream fd is
> closed. That way we can just call xe_eu_stall_stream_free() from
> xe_eu_stall_stream_close().
> 
> And we'll alloc the workqueue in xe_eu_stall_init() and destroy it in
> xe_eu_stall_fini(). This will minimize the changes.

If the workqueue is allocated in xe_eu_stall_init() and destroyed in
xe_eu_stall_fini(), there will be a EU stall workqueue even when EU
stall is not being used. Is that okay? I mean would an idle workqueue
consume any resources? Or would the code be more cleaner if we keep the
additional buf_lock?

Thank You
Harish.

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

* Re: [PATCH v10 4/8] drm/xe/eustall: Add support to read() and poll() EU stall data
  2025-02-24 18:10             ` Harish Chegondi
@ 2025-02-24 18:16               ` Dixit, Ashutosh
  2025-02-24 18:29                 ` Dixit, Ashutosh
  0 siblings, 1 reply; 31+ messages in thread
From: Dixit, Ashutosh @ 2025-02-24 18:16 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

On Mon, 24 Feb 2025 10:10:36 -0800, Harish Chegondi wrote:
>
> On Thu, Feb 20, 2025 at 12:02:26PM -0800, Dixit, Ashutosh wrote:
> > On Thu, 20 Feb 2025 11:52:34 -0800, Dixit, Ashutosh wrote:
> > >
> > > On Wed, 19 Feb 2025 23:02:45 -0800, Dixit, Ashutosh wrote:
> > > >
> > > > On Wed, 19 Feb 2025 11:43:19 -0800, Harish Chegondi wrote:
> > > > >
> > > >
> > > > Hi Harish,
> > > >
> > > > > On Wed, Feb 19, 2025 at 10:15:52AM -0800, Dixit, Ashutosh wrote:
> > > > > Hi Ashutosh,
> > > > >
> > > > > > On Tue, 18 Feb 2025 11:53:54 -0800, Harish Chegondi wrote:
> > > > > > >
> > > > > > > @@ -39,7 +40,9 @@ struct per_xecore_buf {
> > > > > > >  };
> > > > > > >
> > > > > > >  struct xe_eu_stall_data_stream {
> > > > > > > +	bool pollin;
> > > > > > >	bool enabled;
> > > > > > > +	wait_queue_head_t poll_wq;
> > > > > > >	size_t data_record_size;
> > > > > > >	size_t per_xecore_buf_size;
> > > > > > >	unsigned int wait_num_reports;
> > > > > > > @@ -47,7 +50,11 @@ struct xe_eu_stall_data_stream {
> > > > > > >
> > > > > > >	struct xe_gt *gt;
> > > > > > >	struct xe_bo *bo;
> > > > > > > +	/* Lock to protect xecore_buf */
> > > > > > > +	struct mutex buf_lock;
> > > > > >
> > > > > > Why do we need this new lock? I thought we would just be able to use
> > > > > > gt->eu_stall->stream_lock? stream_lock is already taken for read(), so we
> > > > > > just need to take it for eu_stall_data_buf_poll()?
> > > > >
> > > > > I started off with using the gt->eu_stall->stream_lock. But I have seen
> > > > > warnings in the dmesg log while testing indicating possible circular
> > > > > locking dependency leading to a deadlock. Maybe I can spend more time
> > > > > later to investigate further and eliminate the possible circular locking
> > > > > dependency. But for now, I decided to use a new lock to eliminate the
> > > > > per subslice lock. Here is the dmesg log that I saved from my testing to
> > > > > investigate later.
> > > > >
> > > > > [17606.848776] ======================================================
> > > > > [17606.848781] WARNING: possible circular locking dependency detected
> > > > > [17606.848786] 6.13.0-upstream #3 Not tainted
> > > > > [17606.848791] ------------------------------------------------------
> > > > > [17606.848796] xe_eu_stall/21899 is trying to acquire lock:
> > > > > [17606.848801] ffff88810daad948 ((wq_completion)xe_eu_stall){+.+.}-{0:0}, at: touch_wq_lockdep_map+0x21/0x80
> > > > > [17606.848822]
> > > > >                but task is already holding lock:
> > > > > [17606.848827] ffff88810d0786a8 (&gt->eu_stall->stream_lock){+.+.}-{4:4}, at: xe_eu_stall_stream_close+0x27/0x70 [xe]
> > > > > [17606.848903]
> > > > >                which lock already depends on the new lock.
> > > > >
> > > > > [17606.848909]
> > > > >                the existing dependency chain (in reverse order) is:
> > > > > [17606.848915]
> > > > >                -> #2 (&gt->eu_stall->stream_lock){+.+.}-{4:4}:
> > > > > [17606.848915]
> > > > >                -> #2 (&gt->eu_stall->stream_lock){+.+.}-{4:4}:
> > > > > [17606.848925]        __mutex_lock+0xb4/0xeb0
> > > > > [17606.848934]        eu_stall_data_buf_poll+0x42/0x180 [xe]
> > > > > [17606.848989]        eu_stall_data_buf_poll_work_fn+0x15/0x60 [xe]
> > > > > [17606.849042]        process_one_work+0x207/0x640
> > > > > [17606.849051]        worker_thread+0x18c/0x330
> > > > > [17606.849058]        kthread+0xeb/0x120
> > > > > [17606.849065]        ret_from_fork+0x2c/0x50
> > > > > [17606.849073]        ret_from_fork_asm+0x1a/0x30
> > > > > [17606.849081]
> > > > >                -> #1 ((work_completion)(&(&stream->buf_poll_work)->work)){+.+.}-{0:0}:
> > > > > [17606.849092]        process_one_work+0x1e3/0x640
> > > > > [17606.849100]        worker_thread+0x18c/0x330
> > > > > [17606.849107]        kthread+0xeb/0x120
> > > > > [17606.849113]        ret_from_fork+0x2c/0x50
> > > > > [17606.849120]        ret_from_fork_asm+0x1a/0x30
> > > > > [17606.849126]
> > > > >                -> #0 ((wq_completion)xe_eu_stall){+.+.}-{0:0}:
> > > > > [17606.849134]        __lock_acquire+0x167c/0x27d0
> > > > > [17606.849141]        lock_acquire+0xd5/0x300
> > > > > [17606.849148]        touch_wq_lockdep_map+0x36/0x80
> > > > > [17606.849155]        __flush_workqueue+0x7e/0x4a0
> > > > > [17606.849163]        drain_workqueue+0x92/0x130
> > > > > [17606.849170]        destroy_workqueue+0x55/0x380
> > > > > [17606.849177]        xe_eu_stall_data_buf_destroy+0x11/0x50 [xe]
> > > > > [17606.849220]        xe_eu_stall_stream_close+0x37/0x70 [xe]
> > > > > [17606.849259]        __fput+0xed/0x2b0
> > > > > [17606.849264]        __x64_sys_close+0x37/0x80
> > > > > [17606.849271]        do_syscall_64+0x68/0x140
> > > > > [17606.849276]        entry_SYSCALL_64_after_hwframe+0x76/0x7e
> > > > > [17606.849286]
> > > > >                other info that might help us debug this:
> > > > >
> > > > > [17606.849294] Chain exists of:
> > > > >                  (wq_completion)xe_eu_stall --> (work_completion)(&(&stream->buf_poll_work)->work) --> &gt->eu_stall->stream_lock
> > > > >
> > > > > [17606.849312]  Possible unsafe locking scenario:
> > > > >
> > > > > [17606.849318]        CPU0                    CPU1
> > > > > [17606.849323]        ----                    ----
> > > > > [17606.849328]   lock(&gt->eu_stall->stream_lock);
> > > > > [17606.849334]                                lock((work_completion)(&(&stream->buf_poll_work)->work));
> > > > > [17606.849344]                                lock(&gt->eu_stall->stream_lock);
> > > > > [17606.849352]   lock((wq_completion)xe_eu_stall);
> > > > > [17606.849359]
> > > > >                 *** DEADLOCK ***
> > > > >
> > > > > [17606.849365] 1 lock held by xe_eu_stall/21899:
> > > > > [17606.849371]  #0: ffff88810d0786a8 (&gt->eu_stall->stream_lock){+.+.}-{4:4}, at: xe_eu_stall_stream_close+0x27/0x70 [xe]
> > > > > [17606.849430]
> > > > >                stack backtrace:
> > > > > [17606.849435] CPU: 3 UID: 0 PID: 21899 Comm: xe_eu_stall Not tainted 6.13.0-upstream #3
> > > > > [17606.849445] Hardware name: Intel Corporation Lunar Lake Client Platform/LNL-M LP5 RVP1, BIOS LNLMFWI1.R00.3220.D89.2407012051 07/01/2024
> > > > > [17606.849457] Call Trace:
> > > > > [17606.849461]  <TASK>
> > > > > [17606.849465]  dump_stack_lvl+0x82/0xd0
> > > > > [17606.849473]  print_circular_bug+0x2d2/0x410
> > > > > [17606.849473]  print_circular_bug+0x2d2/0x410
> > > > > [17606.849482]  check_noncircular+0x15d/0x180
> > > > > [17606.849492]  __lock_acquire+0x167c/0x27d0
> > > > > [17606.849500]  lock_acquire+0xd5/0x300
> > > > > [17606.849507]  ? touch_wq_lockdep_map+0x21/0x80
> > > > > [17606.849515]  ? lockdep_init_map_type+0x4b/0x260
> > > > > [17606.849522]  ? touch_wq_lockdep_map+0x21/0x80
> > > > > [17606.849529]  touch_wq_lockdep_map+0x36/0x80
> > > > > [17606.849536]  ? touch_wq_lockdep_map+0x21/0x80
> > > > > [17606.849544]  __flush_workqueue+0x7e/0x4a0
> > > > > [17606.849551]  ? find_held_lock+0x2b/0x80
> > > > > [17606.849561]  drain_workqueue+0x92/0x130
> > > > > [17606.849569]  destroy_workqueue+0x55/0x380
> > > > > [17606.849577]  xe_eu_stall_data_buf_destroy+0x11/0x50 [xe]
> > > > > [17606.849627]  xe_eu_stall_stream_close+0x37/0x70 [xe]
> > > > > [17606.849678]  __fput+0xed/0x2b0
> > > > > [17606.849683]  __x64_sys_close+0x37/0x80
> > > > > [17606.849691]  do_syscall_64+0x68/0x140
> > > > > [17606.849698]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
> > > > > [17606.849706] RIP: 0033:0x7fdc81b14f67
> > > > > [17606.849712] Code: ff e8 0d 16 02 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 03 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 41 c3 48 83 ec 18 89 7c 24 0c e8 73 ba f7 ff
> > > > > [17606.849728] RSP: 002b:00007fffd2bd7e58 EFLAGS: 00000246 ORIG_RAX: 0000000000000003
> > > > > [17606.849738] RAX: ffffffffffffffda RBX: 0000559f7fa08100 RCX: 00007fdc81b14f67
> > > > > [17606.849746] RDX: 0000000000000000 RSI: 0000000000006901 RDI: 0000000000000004
> > > > > [17606.849754] RBP: 00007fdc7d40bc90 R08: 0000000000000000 R09: 000000007fffffff
> > > > > [17606.849762] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
> > > > > [17606.849770] R13: 0000000000000000 R14: 0000000000000001 R15: 0000000000000000
> > > > > [17606.849783]  </TASK>
> > > >
> > > > Could you try out this change in your patch (also just use
> > > > gt->eu_stall->stream_lock, not stream->buf_lock) and see if it resolves
> > > > this issue:
> > > >
> > > >	@@ -573,7 +573,6 @@ static void xe_eu_stall_stream_free(struct xe_eu_stall_data_stream *stream)
> > > >
> > > >	 static void xe_eu_stall_data_buf_destroy(struct xe_eu_stall_data_stream *stream)
> > > >	 {
> > > >	-       destroy_workqueue(stream->buf_poll_wq);
> > > >		xe_bo_unpin_map_no_vm(stream->bo);
> > > >		kfree(stream->xecore_buf);
> > > >	 }
> > > >	@@ -829,6 +828,8 @@ static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
> > > >		xe_eu_stall_stream_free(stream);
> > > >		mutex_unlock(&gt->eu_stall->stream_lock);
> > > >
> > > >	+       destroy_workqueue(stream->buf_poll_wq);
> > > >	+
> > > >		return 0;
> > > >	 }
> > > >
> > > > Basically move destroy_workqueue outside gt->eu_stall->stream_lock.
> > > >
> > > > I will look more into this. But from the above trace it looks like the
> > > > issue of lock order between two locks in different code paths. The two
> > > > locks are stream_lock and something let's call wq_lock (associated with the
> > > > workqueue or the work item).
> > > >
> > > > So this is what we see about the order of these two locks in these
> > > > instances in the code (assuming we are only using stream_lock):
> > > >
> > > > 1. eu_stall_data_buf_poll_work_fn: wq_lock is taken first followed by
> > > >    stream_lock inside eu_stall_data_buf_poll.
> > > >
> > > > 2. xe_eu_stall_disable_locked: stream_lock is taken first followed by
> > > >    wq_lock when we do cancel_delayed_work_sync (if at all)
> > > >
> > > > 3. xe_eu_stall_stream_close: stream_lock is taken first followed by wq_lock
> > > >    when we do destroy_workqueue.
> > > >
> > > > So looks like lockdep is complaining about the lock order reversal between
> > > > 1. and 3. above. I am not sure if the order reversal between 1. and 2. is a
> > > > problem or not (if lockdep complains about this or not). If it is, we could
> > > > try moving cancel_delayed_work_sync also outside stream_lock. But we
> > > > haven't seen a trace for the second case yet.
> > > >
> > > > So anyway, the first thing to try is the patch above and see if it fixes
> > > > this issue.
> > > >
> > > > Another idea would be to move buf_poll_wq into gt->eu_stall (rather than
> > > > the stream), so it does not have to be destroyed when the stream fd is
> > > > closed.
> > >
> > > So I decided to do a quick POC to see if my suggestion above to get rid of
> > > the circular locking dependency worked. And basically it does, with the
> > > patch below (we have to ensure stream doesn't get freed and I haven't
> > > deleted buf_lock), but you will get the idea. I reproduced the issue with
> > > your kernel patches and IGT and made sure the patch below fixes it. So
> > > buf_lock is not needed.
> > >
> > > So with the patch below the circular locking dependency is gone. So let's
> > > go with something like this, if you agree:
> > >
> > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > index b94585bdf91c6..a3fc424b36665 100644
> > > --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > @@ -365,7 +365,7 @@ static bool eu_stall_data_buf_poll(struct xe_eu_stall_data_stream *stream)
> > >	u16 group, instance;
> > >	unsigned int xecore;
> > >
> > > -	mutex_lock(&stream->buf_lock);
> > > +	mutex_lock(&gt->eu_stall->stream_lock);
> > >	for_each_dss_steering(xecore, gt, group, instance) {
> > >		xecore_buf = &stream->xecore_buf[xecore];
> > >		read_ptr = xecore_buf->read;
> > > @@ -383,7 +383,7 @@ static bool eu_stall_data_buf_poll(struct xe_eu_stall_data_stream *stream)
> > >			set_bit(xecore, stream->data_drop.mask);
> > >		xecore_buf->write = write_ptr;
> > >	}
> > > -	mutex_unlock(&stream->buf_lock);
> > > +	mutex_unlock(&gt->eu_stall->stream_lock);
> > >
> > >	return min_data_present;
> > >  }
> > > @@ -503,14 +503,12 @@ static ssize_t xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *st
> > >		stream->data_drop.reported_to_user = false;
> > >	}
> > >
> > > -	mutex_lock(&stream->buf_lock);
> > >	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)
> > >			break;
> > >	}
> > > -	mutex_unlock(&stream->buf_lock);
> > >	return total_size ?: (ret ?: -EAGAIN);
> > >  }
> > >
> > > @@ -573,7 +571,6 @@ static void xe_eu_stall_stream_free(struct xe_eu_stall_data_stream *stream)
> > >
> > >  static void xe_eu_stall_data_buf_destroy(struct xe_eu_stall_data_stream *stream)
> > >  {
> > > -	destroy_workqueue(stream->buf_poll_wq);
> > >	xe_bo_unpin_map_no_vm(stream->bo);
> > >	kfree(stream->xecore_buf);
> > >  }
> > > @@ -826,9 +823,12 @@ static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
> > >	mutex_lock(&gt->eu_stall->stream_lock);
> > >	xe_eu_stall_disable_locked(stream);
> > >	xe_eu_stall_data_buf_destroy(stream);
> > > -	xe_eu_stall_stream_free(stream);
> > > +	gt->eu_stall->stream = NULL;
> > >	mutex_unlock(&gt->eu_stall->stream_lock);
> > >
> > > +	destroy_workqueue(stream->buf_poll_wq);
> > > +	kfree(stream);
> > > +
> > >	return 0;
> > >  }
> >
> > Maybe, as suggested above, move buf_poll_wq into gt->eu_stall (rather than
> > the stream), so it does not have to be destroyed when the stream fd is
> > closed. That way we can just call xe_eu_stall_stream_free() from
> > xe_eu_stall_stream_close().
> >
> > And we'll alloc the workqueue in xe_eu_stall_init() and destroy it in
> > xe_eu_stall_fini(). This will minimize the changes.
>
> If the workqueue is allocated in xe_eu_stall_init() and destroyed in
> xe_eu_stall_fini(), there will be a EU stall workqueue even when EU
> stall is not being used. Is that okay? I mean would an idle workqueue
> consume any resources? Or would the code be more cleaner if we keep the
> additional buf_lock?

A workqueue is just tiny amount of memory (similar to your
gt->eu_stall). Nothing is executing till a EU stall stream is present, so
just tiny amount of memory resources, no compute resourse. So let's go with
that, rather than the additional buf_lock. Thanks.

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

* Re: [PATCH v10 4/8] drm/xe/eustall: Add support to read() and poll() EU stall data
  2025-02-24 18:16               ` Dixit, Ashutosh
@ 2025-02-24 18:29                 ` Dixit, Ashutosh
  0 siblings, 0 replies; 31+ messages in thread
From: Dixit, Ashutosh @ 2025-02-24 18:29 UTC (permalink / raw)
  To: Harish Chegondi; +Cc: intel-xe

On Mon, 24 Feb 2025 10:16:41 -0800, Dixit, Ashutosh wrote:
>
> On Mon, 24 Feb 2025 10:10:36 -0800, Harish Chegondi wrote:
> >
> > On Thu, Feb 20, 2025 at 12:02:26PM -0800, Dixit, Ashutosh wrote:
> > > On Thu, 20 Feb 2025 11:52:34 -0800, Dixit, Ashutosh wrote:
> > > >
> > > > On Wed, 19 Feb 2025 23:02:45 -0800, Dixit, Ashutosh wrote:
> > > > >
> > > > > On Wed, 19 Feb 2025 11:43:19 -0800, Harish Chegondi wrote:
> > > > > >
> > > > >
> > > > > Hi Harish,
> > > > >
> > > > > > On Wed, Feb 19, 2025 at 10:15:52AM -0800, Dixit, Ashutosh wrote:
> > > > > > Hi Ashutosh,
> > > > > >
> > > > > > > On Tue, 18 Feb 2025 11:53:54 -0800, Harish Chegondi wrote:
> > > > > > > >
> > > > > > > > @@ -39,7 +40,9 @@ struct per_xecore_buf {
> > > > > > > >  };
> > > > > > > >
> > > > > > > >  struct xe_eu_stall_data_stream {
> > > > > > > > +	bool pollin;
> > > > > > > >	bool enabled;
> > > > > > > > +	wait_queue_head_t poll_wq;
> > > > > > > >	size_t data_record_size;
> > > > > > > >	size_t per_xecore_buf_size;
> > > > > > > >	unsigned int wait_num_reports;
> > > > > > > > @@ -47,7 +50,11 @@ struct xe_eu_stall_data_stream {
> > > > > > > >
> > > > > > > >	struct xe_gt *gt;
> > > > > > > >	struct xe_bo *bo;
> > > > > > > > +	/* Lock to protect xecore_buf */
> > > > > > > > +	struct mutex buf_lock;
> > > > > > >
> > > > > > > Why do we need this new lock? I thought we would just be able to use
> > > > > > > gt->eu_stall->stream_lock? stream_lock is already taken for read(), so we
> > > > > > > just need to take it for eu_stall_data_buf_poll()?
> > > > > >
> > > > > > I started off with using the gt->eu_stall->stream_lock. But I have seen
> > > > > > warnings in the dmesg log while testing indicating possible circular
> > > > > > locking dependency leading to a deadlock. Maybe I can spend more time
> > > > > > later to investigate further and eliminate the possible circular locking
> > > > > > dependency. But for now, I decided to use a new lock to eliminate the
> > > > > > per subslice lock. Here is the dmesg log that I saved from my testing to
> > > > > > investigate later.
> > > > > >
> > > > > > [17606.848776] ======================================================
> > > > > > [17606.848781] WARNING: possible circular locking dependency detected
> > > > > > [17606.848786] 6.13.0-upstream #3 Not tainted
> > > > > > [17606.848791] ------------------------------------------------------
> > > > > > [17606.848796] xe_eu_stall/21899 is trying to acquire lock:
> > > > > > [17606.848801] ffff88810daad948 ((wq_completion)xe_eu_stall){+.+.}-{0:0}, at: touch_wq_lockdep_map+0x21/0x80
> > > > > > [17606.848822]
> > > > > >                but task is already holding lock:
> > > > > > [17606.848827] ffff88810d0786a8 (&gt->eu_stall->stream_lock){+.+.}-{4:4}, at: xe_eu_stall_stream_close+0x27/0x70 [xe]
> > > > > > [17606.848903]
> > > > > >                which lock already depends on the new lock.
> > > > > >
> > > > > > [17606.848909]
> > > > > >                the existing dependency chain (in reverse order) is:
> > > > > > [17606.848915]
> > > > > >                -> #2 (&gt->eu_stall->stream_lock){+.+.}-{4:4}:
> > > > > > [17606.848915]
> > > > > >                -> #2 (&gt->eu_stall->stream_lock){+.+.}-{4:4}:
> > > > > > [17606.848925]        __mutex_lock+0xb4/0xeb0
> > > > > > [17606.848934]        eu_stall_data_buf_poll+0x42/0x180 [xe]
> > > > > > [17606.848989]        eu_stall_data_buf_poll_work_fn+0x15/0x60 [xe]
> > > > > > [17606.849042]        process_one_work+0x207/0x640
> > > > > > [17606.849051]        worker_thread+0x18c/0x330
> > > > > > [17606.849058]        kthread+0xeb/0x120
> > > > > > [17606.849065]        ret_from_fork+0x2c/0x50
> > > > > > [17606.849073]        ret_from_fork_asm+0x1a/0x30
> > > > > > [17606.849081]
> > > > > >                -> #1 ((work_completion)(&(&stream->buf_poll_work)->work)){+.+.}-{0:0}:
> > > > > > [17606.849092]        process_one_work+0x1e3/0x640
> > > > > > [17606.849100]        worker_thread+0x18c/0x330
> > > > > > [17606.849107]        kthread+0xeb/0x120
> > > > > > [17606.849113]        ret_from_fork+0x2c/0x50
> > > > > > [17606.849120]        ret_from_fork_asm+0x1a/0x30
> > > > > > [17606.849126]
> > > > > >                -> #0 ((wq_completion)xe_eu_stall){+.+.}-{0:0}:
> > > > > > [17606.849134]        __lock_acquire+0x167c/0x27d0
> > > > > > [17606.849141]        lock_acquire+0xd5/0x300
> > > > > > [17606.849148]        touch_wq_lockdep_map+0x36/0x80
> > > > > > [17606.849155]        __flush_workqueue+0x7e/0x4a0
> > > > > > [17606.849163]        drain_workqueue+0x92/0x130
> > > > > > [17606.849170]        destroy_workqueue+0x55/0x380
> > > > > > [17606.849177]        xe_eu_stall_data_buf_destroy+0x11/0x50 [xe]
> > > > > > [17606.849220]        xe_eu_stall_stream_close+0x37/0x70 [xe]
> > > > > > [17606.849259]        __fput+0xed/0x2b0
> > > > > > [17606.849264]        __x64_sys_close+0x37/0x80
> > > > > > [17606.849271]        do_syscall_64+0x68/0x140
> > > > > > [17606.849276]        entry_SYSCALL_64_after_hwframe+0x76/0x7e
> > > > > > [17606.849286]
> > > > > >                other info that might help us debug this:
> > > > > >
> > > > > > [17606.849294] Chain exists of:
> > > > > >                  (wq_completion)xe_eu_stall --> (work_completion)(&(&stream->buf_poll_work)->work) --> &gt->eu_stall->stream_lock
> > > > > >
> > > > > > [17606.849312]  Possible unsafe locking scenario:
> > > > > >
> > > > > > [17606.849318]        CPU0                    CPU1
> > > > > > [17606.849323]        ----                    ----
> > > > > > [17606.849328]   lock(&gt->eu_stall->stream_lock);
> > > > > > [17606.849334]                                lock((work_completion)(&(&stream->buf_poll_work)->work));
> > > > > > [17606.849344]                                lock(&gt->eu_stall->stream_lock);
> > > > > > [17606.849352]   lock((wq_completion)xe_eu_stall);
> > > > > > [17606.849359]
> > > > > >                 *** DEADLOCK ***
> > > > > >
> > > > > > [17606.849365] 1 lock held by xe_eu_stall/21899:
> > > > > > [17606.849371]  #0: ffff88810d0786a8 (&gt->eu_stall->stream_lock){+.+.}-{4:4}, at: xe_eu_stall_stream_close+0x27/0x70 [xe]
> > > > > > [17606.849430]
> > > > > >                stack backtrace:
> > > > > > [17606.849435] CPU: 3 UID: 0 PID: 21899 Comm: xe_eu_stall Not tainted 6.13.0-upstream #3
> > > > > > [17606.849445] Hardware name: Intel Corporation Lunar Lake Client Platform/LNL-M LP5 RVP1, BIOS LNLMFWI1.R00.3220.D89.2407012051 07/01/2024
> > > > > > [17606.849457] Call Trace:
> > > > > > [17606.849461]  <TASK>
> > > > > > [17606.849465]  dump_stack_lvl+0x82/0xd0
> > > > > > [17606.849473]  print_circular_bug+0x2d2/0x410
> > > > > > [17606.849473]  print_circular_bug+0x2d2/0x410
> > > > > > [17606.849482]  check_noncircular+0x15d/0x180
> > > > > > [17606.849492]  __lock_acquire+0x167c/0x27d0
> > > > > > [17606.849500]  lock_acquire+0xd5/0x300
> > > > > > [17606.849507]  ? touch_wq_lockdep_map+0x21/0x80
> > > > > > [17606.849515]  ? lockdep_init_map_type+0x4b/0x260
> > > > > > [17606.849522]  ? touch_wq_lockdep_map+0x21/0x80
> > > > > > [17606.849529]  touch_wq_lockdep_map+0x36/0x80
> > > > > > [17606.849536]  ? touch_wq_lockdep_map+0x21/0x80
> > > > > > [17606.849544]  __flush_workqueue+0x7e/0x4a0
> > > > > > [17606.849551]  ? find_held_lock+0x2b/0x80
> > > > > > [17606.849561]  drain_workqueue+0x92/0x130
> > > > > > [17606.849569]  destroy_workqueue+0x55/0x380
> > > > > > [17606.849577]  xe_eu_stall_data_buf_destroy+0x11/0x50 [xe]
> > > > > > [17606.849627]  xe_eu_stall_stream_close+0x37/0x70 [xe]
> > > > > > [17606.849678]  __fput+0xed/0x2b0
> > > > > > [17606.849683]  __x64_sys_close+0x37/0x80
> > > > > > [17606.849691]  do_syscall_64+0x68/0x140
> > > > > > [17606.849698]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
> > > > > > [17606.849706] RIP: 0033:0x7fdc81b14f67
> > > > > > [17606.849712] Code: ff e8 0d 16 02 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 03 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 41 c3 48 83 ec 18 89 7c 24 0c e8 73 ba f7 ff
> > > > > > [17606.849728] RSP: 002b:00007fffd2bd7e58 EFLAGS: 00000246 ORIG_RAX: 0000000000000003
> > > > > > [17606.849738] RAX: ffffffffffffffda RBX: 0000559f7fa08100 RCX: 00007fdc81b14f67
> > > > > > [17606.849746] RDX: 0000000000000000 RSI: 0000000000006901 RDI: 0000000000000004
> > > > > > [17606.849754] RBP: 00007fdc7d40bc90 R08: 0000000000000000 R09: 000000007fffffff
> > > > > > [17606.849762] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
> > > > > > [17606.849770] R13: 0000000000000000 R14: 0000000000000001 R15: 0000000000000000
> > > > > > [17606.849783]  </TASK>
> > > > >
> > > > > Could you try out this change in your patch (also just use
> > > > > gt->eu_stall->stream_lock, not stream->buf_lock) and see if it resolves
> > > > > this issue:
> > > > >
> > > > >	@@ -573,7 +573,6 @@ static void xe_eu_stall_stream_free(struct xe_eu_stall_data_stream *stream)
> > > > >
> > > > >	 static void xe_eu_stall_data_buf_destroy(struct xe_eu_stall_data_stream *stream)
> > > > >	 {
> > > > >	-       destroy_workqueue(stream->buf_poll_wq);
> > > > >		xe_bo_unpin_map_no_vm(stream->bo);
> > > > >		kfree(stream->xecore_buf);
> > > > >	 }
> > > > >	@@ -829,6 +828,8 @@ static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
> > > > >		xe_eu_stall_stream_free(stream);
> > > > >		mutex_unlock(&gt->eu_stall->stream_lock);
> > > > >
> > > > >	+       destroy_workqueue(stream->buf_poll_wq);
> > > > >	+
> > > > >		return 0;
> > > > >	 }
> > > > >
> > > > > Basically move destroy_workqueue outside gt->eu_stall->stream_lock.
> > > > >
> > > > > I will look more into this. But from the above trace it looks like the
> > > > > issue of lock order between two locks in different code paths. The two
> > > > > locks are stream_lock and something let's call wq_lock (associated with the
> > > > > workqueue or the work item).
> > > > >
> > > > > So this is what we see about the order of these two locks in these
> > > > > instances in the code (assuming we are only using stream_lock):
> > > > >
> > > > > 1. eu_stall_data_buf_poll_work_fn: wq_lock is taken first followed by
> > > > >    stream_lock inside eu_stall_data_buf_poll.
> > > > >
> > > > > 2. xe_eu_stall_disable_locked: stream_lock is taken first followed by
> > > > >    wq_lock when we do cancel_delayed_work_sync (if at all)
> > > > >
> > > > > 3. xe_eu_stall_stream_close: stream_lock is taken first followed by wq_lock
> > > > >    when we do destroy_workqueue.
> > > > >
> > > > > So looks like lockdep is complaining about the lock order reversal between
> > > > > 1. and 3. above. I am not sure if the order reversal between 1. and 2. is a
> > > > > problem or not (if lockdep complains about this or not). If it is, we could
> > > > > try moving cancel_delayed_work_sync also outside stream_lock. But we
> > > > > haven't seen a trace for the second case yet.
> > > > >
> > > > > So anyway, the first thing to try is the patch above and see if it fixes
> > > > > this issue.
> > > > >
> > > > > Another idea would be to move buf_poll_wq into gt->eu_stall (rather than
> > > > > the stream), so it does not have to be destroyed when the stream fd is
> > > > > closed.
> > > >
> > > > So I decided to do a quick POC to see if my suggestion above to get rid of
> > > > the circular locking dependency worked. And basically it does, with the
> > > > patch below (we have to ensure stream doesn't get freed and I haven't
> > > > deleted buf_lock), but you will get the idea. I reproduced the issue with
> > > > your kernel patches and IGT and made sure the patch below fixes it. So
> > > > buf_lock is not needed.
> > > >
> > > > So with the patch below the circular locking dependency is gone. So let's
> > > > go with something like this, if you agree:
> > > >
> > > > diff --git a/drivers/gpu/drm/xe/xe_eu_stall.c b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > index b94585bdf91c6..a3fc424b36665 100644
> > > > --- a/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > +++ b/drivers/gpu/drm/xe/xe_eu_stall.c
> > > > @@ -365,7 +365,7 @@ static bool eu_stall_data_buf_poll(struct xe_eu_stall_data_stream *stream)
> > > >	u16 group, instance;
> > > >	unsigned int xecore;
> > > >
> > > > -	mutex_lock(&stream->buf_lock);
> > > > +	mutex_lock(&gt->eu_stall->stream_lock);
> > > >	for_each_dss_steering(xecore, gt, group, instance) {
> > > >		xecore_buf = &stream->xecore_buf[xecore];
> > > >		read_ptr = xecore_buf->read;
> > > > @@ -383,7 +383,7 @@ static bool eu_stall_data_buf_poll(struct xe_eu_stall_data_stream *stream)
> > > >			set_bit(xecore, stream->data_drop.mask);
> > > >		xecore_buf->write = write_ptr;
> > > >	}
> > > > -	mutex_unlock(&stream->buf_lock);
> > > > +	mutex_unlock(&gt->eu_stall->stream_lock);
> > > >
> > > >	return min_data_present;
> > > >  }
> > > > @@ -503,14 +503,12 @@ static ssize_t xe_eu_stall_stream_read_locked(struct xe_eu_stall_data_stream *st
> > > >		stream->data_drop.reported_to_user = false;
> > > >	}
> > > >
> > > > -	mutex_lock(&stream->buf_lock);
> > > >	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)
> > > >			break;
> > > >	}
> > > > -	mutex_unlock(&stream->buf_lock);
> > > >	return total_size ?: (ret ?: -EAGAIN);
> > > >  }
> > > >
> > > > @@ -573,7 +571,6 @@ static void xe_eu_stall_stream_free(struct xe_eu_stall_data_stream *stream)
> > > >
> > > >  static void xe_eu_stall_data_buf_destroy(struct xe_eu_stall_data_stream *stream)
> > > >  {
> > > > -	destroy_workqueue(stream->buf_poll_wq);
> > > >	xe_bo_unpin_map_no_vm(stream->bo);
> > > >	kfree(stream->xecore_buf);
> > > >  }
> > > > @@ -826,9 +823,12 @@ static int xe_eu_stall_stream_close(struct inode *inode, struct file *file)
> > > >	mutex_lock(&gt->eu_stall->stream_lock);
> > > >	xe_eu_stall_disable_locked(stream);
> > > >	xe_eu_stall_data_buf_destroy(stream);
> > > > -	xe_eu_stall_stream_free(stream);
> > > > +	gt->eu_stall->stream = NULL;
> > > >	mutex_unlock(&gt->eu_stall->stream_lock);
> > > >
> > > > +	destroy_workqueue(stream->buf_poll_wq);
> > > > +	kfree(stream);
> > > > +
> > > >	return 0;
> > > >  }
> > >
> > > Maybe, as suggested above, move buf_poll_wq into gt->eu_stall (rather than
> > > the stream), so it does not have to be destroyed when the stream fd is
> > > closed. That way we can just call xe_eu_stall_stream_free() from
> > > xe_eu_stall_stream_close().
> > >
> > > And we'll alloc the workqueue in xe_eu_stall_init() and destroy it in
> > > xe_eu_stall_fini(). This will minimize the changes.
> >
> > If the workqueue is allocated in xe_eu_stall_init() and destroyed in
> > xe_eu_stall_fini(), there will be a EU stall workqueue even when EU
> > stall is not being used. Is that okay? I mean would an idle workqueue
> > consume any resources? Or would the code be more cleaner if we keep the
> > additional buf_lock?
>
> A workqueue is just tiny amount of memory (similar to your
> gt->eu_stall). Nothing is executing till a EU stall stream is present, so
> just tiny amount of memory resources, no compute resourse. So let's go with
> that, rather than the additional buf_lock. Thanks.

Basically buf_lock is not needed anyway, the workqueue can also be part of
the stream. I just suggested to put it in gt->eu_stall so that
xe_eu_stall_stream_free() can be used as is, otherwise more refactoring in
the code will be needed.

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

end of thread, other threads:[~2025-02-24 18:29 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-18 19:53 [PATCH v10 0/8] Add support for EU stall sampling Harish Chegondi
2025-02-18 19:53 ` [PATCH v10 1/8] drm/xe/topology: Add a function to find the index of the last enabled DSS in a mask Harish Chegondi
2025-02-18 19:53 ` [PATCH v10 2/8] drm/xe/uapi: Introduce API for EU stall sampling Harish Chegondi
2025-02-18 23:11   ` Dixit, Ashutosh
2025-02-18 19:53 ` [PATCH v10 3/8] drm/xe/eustall: Add support to init, enable and disable " Harish Chegondi
2025-02-19 15:27   ` Dixit, Ashutosh
2025-02-18 19:53 ` [PATCH v10 4/8] drm/xe/eustall: Add support to read() and poll() EU stall data Harish Chegondi
2025-02-19 18:15   ` Dixit, Ashutosh
2025-02-19 19:43     ` Harish Chegondi
2025-02-20  7:02       ` Dixit, Ashutosh
2025-02-20 19:52         ` Dixit, Ashutosh
2025-02-20 20:02           ` Dixit, Ashutosh
2025-02-24 18:10             ` Harish Chegondi
2025-02-24 18:16               ` Dixit, Ashutosh
2025-02-24 18:29                 ` Dixit, Ashutosh
2025-02-24 18:06           ` Harish Chegondi
2025-02-18 19:53 ` [PATCH v10 5/8] drm/xe/eustall: Add support to handle dropped " Harish Chegondi
2025-02-19 18:47   ` Dixit, Ashutosh
2025-02-18 19:53 ` [PATCH v10 6/8] drm/xe/eustall: Add EU stall sampling support for Xe2 Harish Chegondi
2025-02-18 23:29   ` Dixit, Ashutosh
2025-02-18 19:53 ` [PATCH v10 7/8] drm/xe/uapi: Add a device query to get EU stall sampling information Harish Chegondi
2025-02-18 19:53 ` [PATCH v10 8/8] drm/xe/eustall: Add workaround 22016596838 which applies to PVC Harish Chegondi
2025-02-18 20:03 ` ✓ CI.Patch_applied: success for Add support for EU stall sampling Patchwork
2025-02-18 20:03 ` ✗ CI.checkpatch: warning " Patchwork
2025-02-18 20:05 ` ✓ CI.KUnit: success " Patchwork
2025-02-18 20:21 ` ✓ CI.Build: " Patchwork
2025-02-18 20:23 ` ✓ CI.Hooks: " Patchwork
2025-02-18 20:25 ` ✓ CI.checksparse: " Patchwork
2025-02-18 20:44 ` ✓ Xe.CI.BAT: " Patchwork
2025-02-19 13:14 ` ✗ Xe.CI.Full: failure " Patchwork
2025-02-19 19:27 ` [PATCH v10 0/8] " Dixit, Ashutosh

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).