Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/10] Introduce Relay Communication for SR-IOV
@ 2023-12-27 23:58 Michal Wajdeczko
  2023-12-27 23:58 ` [PATCH 01/10] drm/xe: Allocate dedicated workqueue for SR-IOV workers Michal Wajdeczko
                   ` (16 more replies)
  0 siblings, 17 replies; 30+ messages in thread
From: Michal Wajdeczko @ 2023-12-27 23:58 UTC (permalink / raw)
  To: intel-xe

There are scenarios where SR-IOV Virtual Function (VF) driver will
need to get additional data that is not available over VF MMIO BAR
nor could be queried from the GuC firmware and must be obtained
from the Physical Function (PF) driver.

The communication between Virtual Function (VF) drivers and Physical
Function (PF) drivers is based on the GuC firmware acting as a proxy
(relay) agent.

  VF                           GuC                            PF
  |                             |                             |
 [ ] VF2GUC_RELAY_TO_PF         |                             |
 [ ]-------------------------> [ ]                            |
 [ ] { rid, msg }              [ ]                            |
 [ ]                           [ ] GUC2PF_RELAY_FROM_VF       |
 [ ]                           [ ]-------------------------> [ ]
 [ ]                            |  { VFID, rid, msg }        [ ]
 [ ]                            |                            [ ]
 [ ]                            |         PF2GUC_RELAY_TO_VF [ ]
 [ ]                           [ ] <-------------------------[ ]
 [ ]                           [ ]      { VFID, rid, reply }  |
 [ ]      GUC2VF_RELAY_FROM_PF [ ]                            |
 [ ] <-------------------------[ ]                            |
  |             { rid, reply }  |                             |
  |                             |                             |

This series only introduces necessary functions (together with basic
kunit tests) to allow use of relay communication by the VFs drivers.
We will start using this functionality in upcoming series.

Michal Wajdeczko (10):
  drm/xe: Allocate dedicated workqueue for SR-IOV workers
  drm/xe: Define Virtual Function Identifier
  drm/xe: Introduce GT-oriented SR-IOV logging macros
  drm/xe/guc: Add helpers for HXG messages
  drm/xe/guc: Update few GuC CTB ABI definitions
  drm/xe/guc: Add Relay Communication ABI definitions
  drm/xe/guc: Introduce Relay Communication for SR-IOV
  drm/xe/kunit: Allow to replace xe_guc_ct_send_recv() with stub
  drm/xe/kunit: Add GuC Relay kunit tests
  drm/xe/guc: Start handling GuC Relay event messages

 drivers/gpu/drm/xe/Makefile                   |   1 +
 .../gpu/drm/xe/abi/guc_actions_sriov_abi.h    | 174 ++++
 .../drm/xe/abi/guc_communication_ctb_abi.h    |   3 +-
 .../gpu/drm/xe/abi/guc_relay_actions_abi.h    |  79 ++
 .../drm/xe/abi/guc_relay_communication_abi.h  | 118 +++
 drivers/gpu/drm/xe/tests/xe_guc_relay_test.c  | 522 ++++++++++
 drivers/gpu/drm/xe/xe_device.c                |   4 +
 drivers/gpu/drm/xe/xe_device_types.h          |   2 +
 drivers/gpu/drm/xe/xe_gt_sriov_printk.h       |  34 +
 drivers/gpu/drm/xe/xe_guc.c                   |   5 +
 drivers/gpu/drm/xe/xe_guc_ct.c                |  11 +
 drivers/gpu/drm/xe/xe_guc_hxg_helpers.h       | 107 ++
 drivers/gpu/drm/xe/xe_guc_relay.c             | 933 ++++++++++++++++++
 drivers/gpu/drm/xe/xe_guc_relay.h             |  32 +
 drivers/gpu/drm/xe/xe_guc_relay_types.h       |  36 +
 drivers/gpu/drm/xe/xe_guc_types.h             |   4 +
 drivers/gpu/drm/xe/xe_sriov.c                 |  37 +
 drivers/gpu/drm/xe/xe_sriov.h                 |   1 +
 drivers/gpu/drm/xe/xe_sriov_types.h           |  12 +
 19 files changed, 2114 insertions(+), 1 deletion(-)
 create mode 100644 drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
 create mode 100644 drivers/gpu/drm/xe/abi/guc_relay_actions_abi.h
 create mode 100644 drivers/gpu/drm/xe/abi/guc_relay_communication_abi.h
 create mode 100644 drivers/gpu/drm/xe/tests/xe_guc_relay_test.c
 create mode 100644 drivers/gpu/drm/xe/xe_gt_sriov_printk.h
 create mode 100644 drivers/gpu/drm/xe/xe_guc_hxg_helpers.h
 create mode 100644 drivers/gpu/drm/xe/xe_guc_relay.c
 create mode 100644 drivers/gpu/drm/xe/xe_guc_relay.h
 create mode 100644 drivers/gpu/drm/xe/xe_guc_relay_types.h

-- 
2.25.1


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

* [PATCH 01/10] drm/xe: Allocate dedicated workqueue for SR-IOV workers
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
@ 2023-12-27 23:58 ` Michal Wajdeczko
  2023-12-29 21:06   ` Piotr Piórkowski
  2023-12-27 23:58 ` [PATCH 02/10] drm/xe: Define Virtual Function Identifier Michal Wajdeczko
                   ` (15 subsequent siblings)
  16 siblings, 1 reply; 30+ messages in thread
From: Michal Wajdeczko @ 2023-12-27 23:58 UTC (permalink / raw)
  To: intel-xe

We plan to use several workers where we might be running long
operations. Allocate dedicated workqueue to avoid undesired
interaction with non-virtualized workers.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/xe/xe_device.c       |  4 +++
 drivers/gpu/drm/xe/xe_device_types.h |  2 ++
 drivers/gpu/drm/xe/xe_sriov.c        | 37 ++++++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_sriov.h        |  1 +
 4 files changed, 44 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 86867d42d532..004e65544e8d 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -438,6 +438,10 @@ int xe_device_probe(struct xe_device *xe)
 
 	xe_pat_init_early(xe);
 
+	err = xe_sriov_init(xe);
+	if (err)
+		return err;
+
 	xe->info.mem_region_mask = 1;
 	err = xe_display_init_nommio(xe);
 	if (err)
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 71f23ac365e6..163d889d407b 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -321,6 +321,8 @@ struct xe_device {
 	struct {
 		/** @sriov.__mode: SR-IOV mode (Don't access directly!) */
 		enum xe_sriov_mode __mode;
+		/** @sriov.wq: workqueue used by the virtualization workers */
+		struct workqueue_struct *wq;
 	} sriov;
 
 	/** @clients: drm clients info */
diff --git a/drivers/gpu/drm/xe/xe_sriov.c b/drivers/gpu/drm/xe/xe_sriov.c
index 42a0e0c917a0..4960e8f461c8 100644
--- a/drivers/gpu/drm/xe/xe_sriov.c
+++ b/drivers/gpu/drm/xe/xe_sriov.c
@@ -3,6 +3,8 @@
  * Copyright © 2023 Intel Corporation
  */
 
+#include <drm/drm_managed.h>
+
 #include "xe_assert.h"
 #include "xe_sriov.h"
 
@@ -53,3 +55,38 @@ void xe_sriov_probe_early(struct xe_device *xe, bool has_sriov)
 		drm_info(&xe->drm, "Running in %s mode\n",
 			 xe_sriov_mode_to_string(xe_device_sriov_mode(xe)));
 }
+
+static void fini_sriov(struct drm_device *drm, void *arg)
+{
+	struct xe_device *xe = arg;
+
+	destroy_workqueue(xe->sriov.wq);
+	xe->sriov.wq = NULL;
+}
+
+/**
+ * xe_sriov_init - Initialize SR-IOV specific data.
+ * @xe: the &xe_device to initialize
+ *
+ * While most of the initialization errors would be fatal for the Virtual
+ * Function (VF) device driver, in case of the Physical Function (PF) we
+ * might just limit the PF functionality and continue run as a native
+ * (non-virtualized) driver.
+ *
+ * In this function we just create dedicated workqueue that will be used
+ * by the SR-IOV specific workers.
+ *
+ * Return: 0 on success or a negative error code on failure.
+ */
+int xe_sriov_init(struct xe_device *xe)
+{
+	if (!IS_SRIOV(xe))
+		return 0;
+
+	xe_assert(xe, !xe->sriov.wq);
+	xe->sriov.wq = alloc_workqueue("xe-sriov-wq", 0, 0);
+	if (!xe->sriov.wq)
+		return -ENOMEM;
+
+	return drmm_add_action_or_reset(&xe->drm, fini_sriov, xe);
+}
diff --git a/drivers/gpu/drm/xe/xe_sriov.h b/drivers/gpu/drm/xe/xe_sriov.h
index 5af73a3172b0..1545552162c9 100644
--- a/drivers/gpu/drm/xe/xe_sriov.h
+++ b/drivers/gpu/drm/xe/xe_sriov.h
@@ -13,6 +13,7 @@
 const char *xe_sriov_mode_to_string(enum xe_sriov_mode mode);
 
 void xe_sriov_probe_early(struct xe_device *xe, bool has_sriov);
+int xe_sriov_init(struct xe_device *xe);
 
 static inline enum xe_sriov_mode xe_device_sriov_mode(struct xe_device *xe)
 {
-- 
2.25.1


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

* [PATCH 02/10] drm/xe: Define Virtual Function Identifier
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
  2023-12-27 23:58 ` [PATCH 01/10] drm/xe: Allocate dedicated workqueue for SR-IOV workers Michal Wajdeczko
@ 2023-12-27 23:58 ` Michal Wajdeczko
  2023-12-29 21:07   ` Piotr Piórkowski
  2023-12-27 23:58 ` [PATCH 03/10] drm/xe: Introduce GT-oriented SR-IOV logging macros Michal Wajdeczko
                   ` (14 subsequent siblings)
  16 siblings, 1 reply; 30+ messages in thread
From: Michal Wajdeczko @ 2023-12-27 23:58 UTC (permalink / raw)
  To: intel-xe

According to the PCI Express specification, the SR-IOV Virtual
Functions (VFs) are numbered starting with 1 (VF1, VF2, ...).
Additionally, both driver and GuC will refer to Physical Function
(PF) as VF0. Define helper macro to represent VFn and PF.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/xe/xe_sriov_types.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_sriov_types.h b/drivers/gpu/drm/xe/xe_sriov_types.h
index 999a4311b98b..fbeebdb12166 100644
--- a/drivers/gpu/drm/xe/xe_sriov_types.h
+++ b/drivers/gpu/drm/xe/xe_sriov_types.h
@@ -8,6 +8,18 @@
 
 #include <linux/build_bug.h>
 
+/**
+ * VFID - Virtual Function Identifier
+ * @n: VF number
+ *
+ * Helper macro to represent Virtual Function (VF) Indentifier.
+ * VFID(0) is used as alias to the PFID that represents Physical Function.
+ *
+ * Note: According to PCI spec, SR-IOV VF's numbers are 1-based (VF1, VF2, ...).
+ */
+#define VFID(n)		(n)
+#define PFID		VFID(0)
+
 /**
  * enum xe_sriov_mode - SR-IOV mode
  * @XE_SRIOV_MODE_NONE: bare-metal mode (non-virtualized)
-- 
2.25.1


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

* [PATCH 03/10] drm/xe: Introduce GT-oriented SR-IOV logging macros
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
  2023-12-27 23:58 ` [PATCH 01/10] drm/xe: Allocate dedicated workqueue for SR-IOV workers Michal Wajdeczko
  2023-12-27 23:58 ` [PATCH 02/10] drm/xe: Define Virtual Function Identifier Michal Wajdeczko
@ 2023-12-27 23:58 ` Michal Wajdeczko
  2023-12-29 21:07   ` Piotr Piórkowski
  2023-12-27 23:58 ` [PATCH 04/10] drm/xe/guc: Add helpers for HXG messages Michal Wajdeczko
                   ` (13 subsequent siblings)
  16 siblings, 1 reply; 30+ messages in thread
From: Michal Wajdeczko @ 2023-12-27 23:58 UTC (permalink / raw)
  To: intel-xe

To simplify logging and help identify SR-IOV specific messages
related to the GT, define set of helper macros that will add
prefix to the messages based on the current SR-IOV mode.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/xe/xe_gt_sriov_printk.h | 34 +++++++++++++++++++++++++
 1 file changed, 34 insertions(+)
 create mode 100644 drivers/gpu/drm/xe/xe_gt_sriov_printk.h

diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_printk.h b/drivers/gpu/drm/xe/xe_gt_sriov_printk.h
new file mode 100644
index 000000000000..17624b16300a
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_gt_sriov_printk.h
@@ -0,0 +1,34 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#ifndef _XE_GT_SRIOV_PRINTK_H_
+#define _XE_GT_SRIOV_PRINTK_H_
+
+#include "xe_gt_printk.h"
+#include "xe_sriov_printk.h"
+
+#define __xe_gt_sriov_printk(gt, _level, fmt, ...) \
+	xe_gt_printk((gt), _level, "%s" fmt, xe_sriov_printk_prefix(gt_to_xe(gt)), ##__VA_ARGS__)
+
+#define xe_gt_sriov_err(_gt, _fmt, ...) \
+	__xe_gt_sriov_printk(_gt, err, _fmt, ##__VA_ARGS__)
+
+#define xe_gt_sriov_notice(_gt, _fmt, ...) \
+	__xe_gt_sriov_printk(_gt, notice, _fmt, ##__VA_ARGS__)
+
+#define xe_gt_sriov_info(_gt, _fmt, ...) \
+	__xe_gt_sriov_printk(_gt, info, _fmt, ##__VA_ARGS__)
+
+#define xe_gt_sriov_dbg(_gt, _fmt, ...) \
+	__xe_gt_sriov_printk(_gt, dbg, _fmt, ##__VA_ARGS__)
+
+/* for low level noisy debug messages */
+#ifdef CONFIG_DRM_XE_DEBUG_SRIOV
+#define xe_gt_sriov_dbg_verbose(_gt, _fmt, ...) xe_gt_sriov_dbg(_gt, _fmt, ##__VA_ARGS__)
+#else
+#define xe_gt_sriov_dbg_verbose(_gt, _fmt, ...) typecheck(struct xe_gt *, (_gt))
+#endif
+
+#endif
-- 
2.25.1


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

* [PATCH 04/10] drm/xe/guc: Add helpers for HXG messages
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
                   ` (2 preceding siblings ...)
  2023-12-27 23:58 ` [PATCH 03/10] drm/xe: Introduce GT-oriented SR-IOV logging macros Michal Wajdeczko
@ 2023-12-27 23:58 ` Michal Wajdeczko
  2023-12-29 21:08   ` Piotr Piórkowski
  2023-12-27 23:58 ` [PATCH 05/10] drm/xe/guc: Update few GuC CTB ABI definitions Michal Wajdeczko
                   ` (12 subsequent siblings)
  16 siblings, 1 reply; 30+ messages in thread
From: Michal Wajdeczko @ 2023-12-27 23:58 UTC (permalink / raw)
  To: intel-xe

In addition to MMIO and CTB communication between the host driver
and the GUC firmware, we will start using GuC HXG message protocol
in communication between SR-IOV VFs and PF. Define helpers related
to HXG message protocol to minimize code duplication.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/xe/xe_guc_hxg_helpers.h | 107 ++++++++++++++++++++++++
 1 file changed, 107 insertions(+)
 create mode 100644 drivers/gpu/drm/xe/xe_guc_hxg_helpers.h

diff --git a/drivers/gpu/drm/xe/xe_guc_hxg_helpers.h b/drivers/gpu/drm/xe/xe_guc_hxg_helpers.h
new file mode 100644
index 000000000000..4dc080484e7a
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_guc_hxg_helpers.h
@@ -0,0 +1,107 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#ifndef _XE_GUC_HXG_HELPERS_H_
+#define _XE_GUC_HXG_HELPERS_H_
+
+#include <linux/bitfield.h>
+#include <linux/types.h>
+
+#include "abi/guc_messages_abi.h"
+
+/**
+ * hxg_sizeof - Queries size of the object or type (in HXG units).
+ *
+ * Asserts when actual size is not aligned to HXG unit (u32).
+ *
+ * Return: size in dwords (u32).
+ */
+#define hxg_sizeof(T)	(sizeof(T) / sizeof(u32) + BUILD_BUG_ON_ZERO(sizeof(T) % sizeof(u32)))
+
+static inline const char *guc_hxg_type_to_string(unsigned int type)
+{
+	switch (type) {
+	case GUC_HXG_TYPE_REQUEST:
+		return "request";
+	case GUC_HXG_TYPE_FAST_REQUEST:
+		return "fast-request";
+	case GUC_HXG_TYPE_EVENT:
+		return "event";
+	case GUC_HXG_TYPE_NO_RESPONSE_BUSY:
+		return "busy";
+	case GUC_HXG_TYPE_NO_RESPONSE_RETRY:
+		return "retry";
+	case GUC_HXG_TYPE_RESPONSE_FAILURE:
+		return "failure";
+	case GUC_HXG_TYPE_RESPONSE_SUCCESS:
+		return "response";
+	default:
+		return "<invalid>";
+	}
+}
+
+static inline bool guc_hxg_type_is_action(unsigned int type)
+{
+	switch (type) {
+	case GUC_HXG_TYPE_REQUEST:
+	case GUC_HXG_TYPE_FAST_REQUEST:
+	case GUC_HXG_TYPE_EVENT:
+		return true;
+	default:
+		return false;
+	}
+}
+
+static inline bool guc_hxg_type_is_reply(unsigned int type)
+{
+	switch (type) {
+	case GUC_HXG_TYPE_NO_RESPONSE_BUSY:
+	case GUC_HXG_TYPE_NO_RESPONSE_RETRY:
+	case GUC_HXG_TYPE_RESPONSE_FAILURE:
+	case GUC_HXG_TYPE_RESPONSE_SUCCESS:
+		return true;
+	default:
+		return false;
+	}
+}
+
+static inline u32 guc_hxg_msg_encode_success(u32 *msg, u32 data0)
+{
+	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_RESPONSE_SUCCESS) |
+		 FIELD_PREP(GUC_HXG_RESPONSE_MSG_0_DATA0, data0);
+
+	return GUC_HXG_RESPONSE_MSG_MIN_LEN;
+}
+
+static inline u32 guc_hxg_msg_encode_failure(u32 *msg, u32 error, u32 hint)
+{
+	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_RESPONSE_FAILURE) |
+		 FIELD_PREP(GUC_HXG_FAILURE_MSG_0_HINT, hint) |
+		 FIELD_PREP(GUC_HXG_FAILURE_MSG_0_ERROR, error);
+
+	return GUC_HXG_FAILURE_MSG_LEN;
+}
+
+static inline u32 guc_hxg_msg_encode_busy(u32 *msg, u32 counter)
+{
+	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_NO_RESPONSE_BUSY) |
+		 FIELD_PREP(GUC_HXG_BUSY_MSG_0_COUNTER, counter);
+
+	return GUC_HXG_BUSY_MSG_LEN;
+}
+
+static inline u32 guc_hxg_msg_encode_retry(u32 *msg, u32 reason)
+{
+	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_NO_RESPONSE_RETRY) |
+		 FIELD_PREP(GUC_HXG_RETRY_MSG_0_REASON, reason);
+
+	return GUC_HXG_RETRY_MSG_LEN;
+}
+
+#endif
-- 
2.25.1


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

* [PATCH 05/10] drm/xe/guc: Update few GuC CTB ABI definitions
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
                   ` (3 preceding siblings ...)
  2023-12-27 23:58 ` [PATCH 04/10] drm/xe/guc: Add helpers for HXG messages Michal Wajdeczko
@ 2023-12-27 23:58 ` Michal Wajdeczko
  2023-12-29 21:09   ` Piotr Piórkowski
  2023-12-27 23:58 ` [PATCH 06/10] drm/xe/guc: Add Relay Communication " Michal Wajdeczko
                   ` (11 subsequent siblings)
  16 siblings, 1 reply; 30+ messages in thread
From: Michal Wajdeczko @ 2023-12-27 23:58 UTC (permalink / raw)
  To: intel-xe

In upcoming new GuC ABI definitions we will want to refer to max
number of dwords that could fit into CTB HXG message. Add explicit
definition named as GUC_CTB_MAX_DWORDS and start using it.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h b/drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
index 3b83f907ece4..4aaed1cb4e12 100644
--- a/drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
+++ b/drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
@@ -81,12 +81,13 @@ static_assert(sizeof(struct guc_ct_buffer_desc) == 64);
 
 #define GUC_CTB_HDR_LEN				1u
 #define GUC_CTB_MSG_MIN_LEN			GUC_CTB_HDR_LEN
-#define GUC_CTB_MSG_MAX_LEN			256u
+#define GUC_CTB_MSG_MAX_LEN			(GUC_CTB_MSG_MIN_LEN + GUC_CTB_MAX_DWORDS)
 #define GUC_CTB_MSG_0_FENCE			(0xffff << 16)
 #define GUC_CTB_MSG_0_FORMAT			(0xf << 12)
 #define   GUC_CTB_FORMAT_HXG			0u
 #define GUC_CTB_MSG_0_RESERVED			(0xf << 8)
 #define GUC_CTB_MSG_0_NUM_DWORDS		(0xff << 0)
+#define   GUC_CTB_MAX_DWORDS			255
 
 /**
  * DOC: CTB HXG Message
-- 
2.25.1


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

* [PATCH 06/10] drm/xe/guc: Add Relay Communication ABI definitions
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
                   ` (4 preceding siblings ...)
  2023-12-27 23:58 ` [PATCH 05/10] drm/xe/guc: Update few GuC CTB ABI definitions Michal Wajdeczko
@ 2023-12-27 23:58 ` Michal Wajdeczko
  2023-12-29 21:09   ` Piotr Piórkowski
  2023-12-27 23:58 ` [PATCH 07/10] drm/xe/guc: Introduce Relay Communication for SR-IOV Michal Wajdeczko
                   ` (10 subsequent siblings)
  16 siblings, 1 reply; 30+ messages in thread
From: Michal Wajdeczko @ 2023-12-27 23:58 UTC (permalink / raw)
  To: intel-xe

The communication between Virtual Function (VF) drivers and
Physical Function (PF) drivers is based on the GuC firmware
acting as a proxy (relay) agent.

Add related ABI definitions that we will be using in upcoming
patches with our GuC Relay implementation.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 .../gpu/drm/xe/abi/guc_actions_sriov_abi.h    | 174 ++++++++++++++++++
 .../gpu/drm/xe/abi/guc_relay_actions_abi.h    |  79 ++++++++
 .../drm/xe/abi/guc_relay_communication_abi.h  | 118 ++++++++++++
 3 files changed, 371 insertions(+)
 create mode 100644 drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
 create mode 100644 drivers/gpu/drm/xe/abi/guc_relay_actions_abi.h
 create mode 100644 drivers/gpu/drm/xe/abi/guc_relay_communication_abi.h

diff --git a/drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h b/drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
new file mode 100644
index 000000000000..5496a5890847
--- /dev/null
+++ b/drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
@@ -0,0 +1,174 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#ifndef _GUC_ACTIONS_PF_ABI_H
+#define _GUC_ACTIONS_PF_ABI_H
+
+#include "guc_communication_ctb_abi.h"
+
+/**
+ * DOC: GUC2PF_RELAY_FROM_VF
+ *
+ * This message is used by the GuC firmware to forward a VF2PF `Relay Message`_
+ * received from the Virtual Function (VF) driver to this Physical Function (PF)
+ * driver.
+ *
+ * This message is always sent as `CTB HXG Message`_.
+ *
+ *  +---+-------+--------------------------------------------------------------+
+ *  |   | Bits  | Description                                                  |
+ *  +===+=======+==============================================================+
+ *  | 0 |    31 | ORIGIN = GUC_HXG_ORIGIN_GUC_                                 |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   | 30:28 | TYPE = GUC_HXG_TYPE_EVENT_                                   |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   | 27:16 | MBZ                                                          |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   |  15:0 | ACTION = _`XE_GUC_ACTION_GUC2PF_RELAY_FROM_VF` = 0x5100      |
+ *  +---+-------+--------------------------------------------------------------+
+ *  | 1 |  31:0 | **VFID** - source VF identifier                              |
+ *  +---+-------+--------------------------------------------------------------+
+ *  | 2 |  31:0 | **RELAY_ID** - VF/PF message ID                              |
+ *  +---+-------+-----------------+--------------------------------------------+
+ *  | 3 |  31:0 | **RELAY_DATA1** |                                            |
+ *  +---+-------+-----------------+                                            |
+ *  |...|       |                 |       [Embedded `Relay Message`_]          |
+ *  +---+-------+-----------------+                                            |
+ *  | n |  31:0 | **RELAY_DATAx** |                                            |
+ *  +---+-------+-----------------+--------------------------------------------+
+ */
+#define XE_GUC_ACTION_GUC2PF_RELAY_FROM_VF		0x5100
+
+#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN		(GUC_HXG_EVENT_MSG_MIN_LEN + 2u)
+#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_MAX_LEN \
+	(GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN + GUC_RELAY_MSG_MAX_LEN)
+#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_0_MBZ		GUC_HXG_EVENT_MSG_0_DATA0
+#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_1_VFID		GUC_HXG_EVENT_MSG_n_DATAn
+#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_2_RELAY_ID	GUC_HXG_EVENT_MSG_n_DATAn
+#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_3_RELAY_DATA1	GUC_HXG_EVENT_MSG_n_DATAn
+#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_n_RELAY_DATAx	GUC_HXG_EVENT_MSG_n_DATAn
+#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_NUM_RELAY_DATA	GUC_RELAY_MSG_MAX_LEN
+
+/**
+ * DOC: PF2GUC_RELAY_TO_VF
+ *
+ * This H2G message is used by the Physical Function (PF) driver to send embedded
+ * VF2PF `Relay Message`_ to the VF.
+ *
+ * This action message must be sent over CTB as `CTB HXG Message`_.
+ *
+ *  +---+-------+--------------------------------------------------------------+
+ *  |   | Bits  | Description                                                  |
+ *  +===+=======+==============================================================+
+ *  | 0 |    31 | ORIGIN = GUC_HXG_ORIGIN_HOST_                                |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   | 30:28 | TYPE = `GUC_HXG_TYPE_FAST_REQUEST`_                          |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   | 27:16 | MBZ                                                          |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   |  15:0 | ACTION = _`XE_GUC_ACTION_PF2GUC_RELAY_TO_VF` = 0x5101        |
+ *  +---+-------+--------------------------------------------------------------+
+ *  | 1 |  31:0 | **VFID** - target VF identifier                              |
+ *  +---+-------+--------------------------------------------------------------+
+ *  | 2 |  31:0 | **RELAY_ID** - VF/PF message ID                              |
+ *  +---+-------+-----------------+--------------------------------------------+
+ *  | 3 |  31:0 | **RELAY_DATA1** |                                            |
+ *  +---+-------+-----------------+                                            |
+ *  |...|       |                 |       [Embedded `Relay Message`_]          |
+ *  +---+-------+-----------------+                                            |
+ *  | n |  31:0 | **RELAY_DATAx** |                                            |
+ *  +---+-------+-----------------+--------------------------------------------+
+ */
+#define XE_GUC_ACTION_PF2GUC_RELAY_TO_VF		0x5101
+
+#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN		(GUC_HXG_REQUEST_MSG_MIN_LEN + 2u)
+#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_MAX_LEN \
+	(PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN + GUC_RELAY_MSG_MAX_LEN)
+#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_0_MBZ		GUC_HXG_REQUEST_MSG_0_DATA0
+#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_1_VFID		GUC_HXG_REQUEST_MSG_n_DATAn
+#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_2_RELAY_ID	GUC_HXG_REQUEST_MSG_n_DATAn
+#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_3_RELAY_DATA1	GUC_HXG_REQUEST_MSG_n_DATAn
+#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_n_RELAY_DATAx	GUC_HXG_REQUEST_MSG_n_DATAn
+#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_NUM_RELAY_DATA	GUC_RELAY_MSG_MAX_LEN
+
+/**
+ * DOC: GUC2VF_RELAY_FROM_PF
+ *
+ * This message is used by the GuC firmware to deliver `Relay Message`_ from the
+ * Physical Function (PF) driver to this Virtual Function (VF) driver.
+ * See `GuC Relay Communication`_ for details.
+ *
+ * This message is always sent over CTB.
+ *
+ *  +---+-------+--------------------------------------------------------------+
+ *  |   | Bits  | Description                                                  |
+ *  +===+=======+==============================================================+
+ *  | 0 |    31 | ORIGIN = GUC_HXG_ORIGIN_GUC_                                 |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   | 30:28 | TYPE = GUC_HXG_TYPE_EVENT_                                   |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   | 27:16 | MBZ                                                          |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   |  15:0 | ACTION = _`XE_GUC_ACTION_GUC2VF_RELAY_FROM_PF` = 0x5102      |
+ *  +---+-------+--------------------------------------------------------------+
+ *  | 1 |  31:0 | **RELAY_ID** - VF/PF message ID                              |
+ *  +---+-------+-----------------+--------------------------------------------+
+ *  | 2 |  31:0 | **RELAY_DATA1** |                                            |
+ *  +---+-------+-----------------+                                            |
+ *  |...|       |                 |       [Embedded `Relay Message`_]          |
+ *  +---+-------+-----------------+                                            |
+ *  | n |  31:0 | **RELAY_DATAx** |                                            |
+ *  +---+-------+-----------------+--------------------------------------------+
+ */
+#define XE_GUC_ACTION_GUC2VF_RELAY_FROM_PF		0x5102
+
+#define GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN		(GUC_HXG_EVENT_MSG_MIN_LEN + 1u)
+#define GUC2VF_RELAY_FROM_PF_EVENT_MSG_MAX_LEN \
+	(GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN + GUC_RELAY_MSG_MAX_LEN)
+#define GUC2VF_RELAY_FROM_PF_EVENT_MSG_0_MBZ		GUC_HXG_EVENT_MSG_0_DATA0
+#define GUC2VF_RELAY_FROM_PF_EVENT_MSG_1_RELAY_ID	GUC_HXG_EVENT_MSG_n_DATAn
+#define GUC2VF_RELAY_FROM_PF_EVENT_MSG_n_RELAY_DATAx	GUC_HXG_EVENT_MSG_n_DATAn
+#define GUC2VF_RELAY_FROM_PF_EVENT_MSG_NUM_RELAY_DATA	GUC_RELAY_MSG_MAX_LEN
+
+/**
+ * DOC: VF2GUC_RELAY_TO_PF
+ *
+ * This message is used by the Virtual Function (VF) drivers to communicate with
+ * the Physical Function (PF) driver and send `Relay Message`_ to the PF driver.
+ * See `GuC Relay Communication`_ for details.
+ *
+ * This message must be sent over CTB.
+ *
+ *  +---+-------+--------------------------------------------------------------+
+ *  |   | Bits  | Description                                                  |
+ *  +===+=======+==============================================================+
+ *  | 0 |    31 | ORIGIN = GUC_HXG_ORIGIN_HOST_                                |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   | 30:28 | TYPE = GUC_HXG_TYPE_REQUEST_ or GUC_HXG_TYPE_FAST_REQUEST_   |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   | 27:16 | MBZ                                                          |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   |  15:0 | ACTION = _`XE_GUC_ACTION_VF2GUC_RELAY_TO_PF` = 0x5103        |
+ *  +---+-------+--------------------------------------------------------------+
+ *  | 1 |  31:0 | **RELAY_ID** - VF/PF message ID                              |
+ *  +---+-------+-----------------+--------------------------------------------+
+ *  | 2 |  31:0 | **RELAY_DATA1** |                                            |
+ *  +---+-------+-----------------+                                            |
+ *  |...|       |                 |       [Embedded `Relay Message`_]          |
+ *  +---+-------+-----------------+                                            |
+ *  | n |  31:0 | **RELAY_DATAx** |                                            |
+ *  +---+-------+-----------------+--------------------------------------------+
+ */
+#define XE_GUC_ACTION_VF2GUC_RELAY_TO_PF		0x5103
+
+#define VF2GUC_RELAY_TO_PF_REQUEST_MSG_MIN_LEN		(GUC_HXG_REQUEST_MSG_MIN_LEN + 1u)
+#define VF2GUC_RELAY_TO_PF_REQUEST_MSG_MAX_LEN \
+	(VF2GUC_RELAY_TO_PF_REQUEST_MSG_MIN_LEN + GUC_RELAY_MSG_MAX_LEN)
+#define VF2GUC_RELAY_TO_PF_REQUEST_MSG_0_MBZ		GUC_HXG_REQUEST_MSG_0_DATA0
+#define VF2GUC_RELAY_TO_PF_REQUEST_MSG_1_RELAY_ID	GUC_HXG_REQUEST_MSG_n_DATAn
+#define VF2GUC_RELAY_TO_PF_REQUEST_MSG_n_RELAY_DATAx	GUC_HXG_REQUEST_MSG_n_DATAn
+#define VF2GUC_RELAY_TO_PF_REQUEST_MSG_NUM_RELAY_DATA	GUC_RELAY_MSG_MAX_LEN
+
+#endif
diff --git a/drivers/gpu/drm/xe/abi/guc_relay_actions_abi.h b/drivers/gpu/drm/xe/abi/guc_relay_actions_abi.h
new file mode 100644
index 000000000000..747e428de421
--- /dev/null
+++ b/drivers/gpu/drm/xe/abi/guc_relay_actions_abi.h
@@ -0,0 +1,79 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#ifndef _ABI_GUC_RELAY_ACTIONS_ABI_H_
+#define _ABI_GUC_RELAY_ACTIONS_ABI_H_
+
+/**
+ * DOC: GuC Relay Debug Actions
+ *
+ * This range of action codes is reserved for debugging purposes only and should
+ * be used only on debug builds. These actions may not be supported by the
+ * production drivers. Their definitions could be changed in the future.
+ *
+ *  _`GUC_RELAY_ACTION_DEBUG_ONLY_START` = 0xDEB0
+ *  _`GUC_RELAY_ACTION_DEBUG_ONLY_END` = 0xDEFF
+ */
+
+#define GUC_RELAY_ACTION_DEBUG_ONLY_START	0xDEB0
+#define GUC_RELAY_ACTION_DEBUG_ONLY_END		0xDEFF
+
+/**
+ * DOC: VFXPF_TESTLOOP
+ *
+ * This `Relay Message`_ is used to selftest the `GuC Relay Communication`_.
+ *
+ * The following opcodes are defined:
+ * VFXPF_TESTLOOP_OPCODE_NOP_ will return no data.
+ * VFXPF_TESTLOOP_OPCODE_BUSY_ will reply with BUSY response first.
+ * VFXPF_TESTLOOP_OPCODE_RETRY_ will reply with RETRY response instead.
+ * VFXPF_TESTLOOP_OPCODE_ECHO_ will return same data as received.
+ * VFXPF_TESTLOOP_OPCODE_FAIL_ will always fail with error.
+ *
+ *  +---+-------+--------------------------------------------------------------+
+ *  |   | Bits  | Description                                                  |
+ *  +===+=======+==============================================================+
+ *  | 0 |    31 | ORIGIN = GUC_HXG_ORIGIN_HOST_                                |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   | 30:28 | TYPE = GUC_HXG_TYPE_REQUEST_ or GUC_HXG_TYPE_FAST_REQUEST_   |
+ *  |   |       | or GUC_HXG_TYPE_EVENT_                                       |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   | 27:16 | **OPCODE**                                                   |
+ *  |   |       |    - _`VFXPF_TESTLOOP_OPCODE_NOP` = 0x0                      |
+ *  |   |       |    - _`VFXPF_TESTLOOP_OPCODE_BUSY` = 0xB                     |
+ *  |   |       |    - _`VFXPF_TESTLOOP_OPCODE_RETRY` = 0xD                    |
+ *  |   |       |    - _`VFXPF_TESTLOOP_OPCODE_ECHO` = 0xE                     |
+ *  |   |       |    - _`VFXPF_TESTLOOP_OPCODE_FAIL` = 0xF                     |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   |  15:0 | ACTION = _`IOV_ACTION_SELFTEST_RELAY`                        |
+ *  +---+-------+--------------------------------------------------------------+
+ *  | 1 |  31:0 | **DATA1** = optional, depends on **OPCODE**:                 |
+ *  |   |       | for VFXPF_TESTLOOP_OPCODE_BUSY_: time in ms for reply        |
+ *  |   |       | for VFXPF_TESTLOOP_OPCODE_FAIL_: expected error              |
+ *  |   |       | for VFXPF_TESTLOOP_OPCODE_ECHO_: payload                     |
+ *  +---+-------+--------------------------------------------------------------+
+ *  |...|  31:0 | **DATAn** = only for **OPCODE** VFXPF_TESTLOOP_OPCODE_ECHO_  |
+ *  +---+-------+--------------------------------------------------------------+
+ *
+ *  +---+-------+--------------------------------------------------------------+
+ *  |   | Bits  | Description                                                  |
+ *  +===+=======+==============================================================+
+ *  | 0 |    31 | ORIGIN = GUC_HXG_ORIGIN_HOST_                                |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   | 30:28 | TYPE = GUC_HXG_TYPE_RESPONSE_SUCCESS_                        |
+ *  |   +-------+--------------------------------------------------------------+
+ *  |   |  27:0 | DATA0 = MBZ                                                  |
+ *  +---+-------+--------------------------------------------------------------+
+ *  |...|  31:0 | DATAn = only for **OPCODE** VFXPF_TESTLOOP_OPCODE_ECHO_      |
+ *  +---+-------+--------------------------------------------------------------+
+ */
+#define GUC_RELAY_ACTION_VFXPF_TESTLOOP		(GUC_RELAY_ACTION_DEBUG_ONLY_START + 1)
+#define   VFXPF_TESTLOOP_OPCODE_NOP		0x0
+#define   VFXPF_TESTLOOP_OPCODE_BUSY		0xB
+#define   VFXPF_TESTLOOP_OPCODE_RETRY		0xD
+#define   VFXPF_TESTLOOP_OPCODE_ECHO		0xE
+#define   VFXPF_TESTLOOP_OPCODE_FAIL		0xF
+
+#endif
diff --git a/drivers/gpu/drm/xe/abi/guc_relay_communication_abi.h b/drivers/gpu/drm/xe/abi/guc_relay_communication_abi.h
new file mode 100644
index 000000000000..f92625f04796
--- /dev/null
+++ b/drivers/gpu/drm/xe/abi/guc_relay_communication_abi.h
@@ -0,0 +1,118 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#ifndef _ABI_GUC_RELAY_COMMUNICATION_ABI_H
+#define _ABI_GUC_RELAY_COMMUNICATION_ABI_H
+
+#include <linux/build_bug.h>
+
+#include "guc_actions_sriov_abi.h"
+#include "guc_communication_ctb_abi.h"
+#include "guc_messages_abi.h"
+
+/**
+ * DOC: GuC Relay Communication
+ *
+ * The communication between Virtual Function (VF) drivers and Physical Function
+ * (PF) drivers is based on the GuC firmware acting as a proxy (relay) agent.
+ *
+ * To communicate with the PF driver, VF's drivers use `VF2GUC_RELAY_TO_PF`_
+ * action that takes the `Relay Message`_ as opaque payload and requires the
+ * relay message identifier (RID) as additional parameter.
+ *
+ * This identifier is used by the drivers to match related messages.
+ *
+ * The GuC forwards this `Relay Message`_ and its identifier to the PF driver
+ * in `GUC2PF_RELAY_FROM_VF`_ action. This event message additionally contains
+ * the identifier of the origin VF (VFID).
+ *
+ * Likewise, to communicate with the VF drivers, PF driver use
+ * `VF2GUC_RELAY_TO_PF`_ action that in addition to the `Relay Message`_
+ * and the relay message identifier (RID) also takes the target VF identifier.
+ *
+ * The GuC uses this target VFID from the message to select where to send the
+ * `GUC2VF_RELAY_FROM_PF`_ with the embedded `Relay Message`_ with response::
+ *
+ *      VF                             GuC                              PF
+ *      |                               |                               |
+ *     [ ] VF2GUC_RELAY_TO_PF           |                               |
+ *     [ ]---------------------------> [ ]                              |
+ *     [ ] { rid, msg }                [ ]                              |
+ *     [ ]                             [ ] GUC2PF_RELAY_FROM_VF         |
+ *     [ ]                             [ ]---------------------------> [ ]
+ *     [ ]                              |  { VFID, rid, msg }          [ ]
+ *     [ ]                              |                              [ ]
+ *     [ ]                              |           PF2GUC_RELAY_TO_VF [ ]
+ *     [ ]                             [ ] <---------------------------[ ]
+ *     [ ]                             [ ]        { VFID, rid, reply }  |
+ *     [ ]        GUC2VF_RELAY_FROM_PF [ ]                              |
+ *     [ ] <---------------------------[ ]                              |
+ *      |               { rid, reply }  |                               |
+ *      |                               |                               |
+ *
+ * It is also possible that PF driver will initiate communication with the
+ * selected VF driver. The same GuC action messages will be used::
+ *
+ *      VF                             GuC                              PF
+ *      |                               |                               |
+ *      |                               |           PF2GUC_RELAY_TO_VF [ ]
+ *      |                              [ ] <---------------------------[ ]
+ *      |                              [ ]          { VFID, rid, msg } [ ]
+ *      |         GUC2VF_RELAY_FROM_PF [ ]                             [ ]
+ *     [ ] <---------------------------[ ]                             [ ]
+ *     [ ]                { rid, msg }  |                              [ ]
+ *     [ ]                              |                              [ ]
+ *     [ ] VF2GUC_RELAY_TO_PF           |                              [ ]
+ *     [ ]---------------------------> [ ]                             [ ]
+ *      |  { rid, reply }              [ ]                             [ ]
+ *      |                              [ ] GUC2PF_RELAY_FROM_VF        [ ]
+ *      |                              [ ]---------------------------> [ ]
+ *      |                               | { VFID, rid, reply }          |
+ *      |                               |                               |
+ */
+
+/**
+ * DOC: Relay Message
+ *
+ * The `Relay Message`_ is used by Physical Function (PF) driver and Virtual
+ * Function (VF) drivers to communicate using `GuC Relay Communication`_.
+ *
+ * Format of the `Relay Message`_ follows format of the generic `HXG Message`_.
+ *
+ *  +--------------------------------------------------------------------------+
+ *  |  `Relay Message`_                                                        |
+ *  +==========================================================================+
+ *  |  `HXG Message`_                                                          |
+ *  +--------------------------------------------------------------------------+
+ *
+ * Maximum length of the `Relay Message`_ is limited by the maximum length of
+ * the `CTB HXG Message`_ and format of the `GUC2PF_RELAY_FROM_VF`_ message.
+ */
+
+#define GUC_RELAY_MSG_MIN_LEN GUC_HXG_MSG_MIN_LEN
+#define GUC_RELAY_MSG_MAX_LEN \
+	(GUC_CTB_MAX_DWORDS - GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN)
+
+static_assert(PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN >
+	      VF2GUC_RELAY_TO_PF_REQUEST_MSG_MIN_LEN);
+
+/**
+ * DOC: Relay Error Codes
+ *
+ * The `GuC Relay Communication`_ can be used to pass `Relay Message`_ between
+ * drivers that run on different Operating Systems. To help in troubleshooting,
+ * `GuC Relay Communication`_ uses error codes that mostly match errno values.
+ */
+
+#define GUC_RELAY_ERROR_UNDISCLOSED			0
+#define GUC_RELAY_ERROR_OPERATION_NOT_PERMITTED		1	/* EPERM */
+#define GUC_RELAY_ERROR_PERMISSION_DENIED		13	/* EACCES */
+#define GUC_RELAY_ERROR_INVALID_ARGUMENT		22	/* EINVAL */
+#define GUC_RELAY_ERROR_INVALID_REQUEST_CODE		56	/* EBADRQC */
+#define GUC_RELAY_ERROR_NO_DATA_AVAILABLE		61	/* ENODATA */
+#define GUC_RELAY_ERROR_PROTOCOL_ERROR			71	/* EPROTO */
+#define GUC_RELAY_ERROR_MESSAGE_SIZE			90	/* EMSGSIZE */
+
+#endif
-- 
2.25.1


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

* [PATCH 07/10] drm/xe/guc: Introduce Relay Communication for SR-IOV
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
                   ` (5 preceding siblings ...)
  2023-12-27 23:58 ` [PATCH 06/10] drm/xe/guc: Add Relay Communication " Michal Wajdeczko
@ 2023-12-27 23:58 ` Michal Wajdeczko
  2023-12-29 21:14   ` Piotr Piórkowski
  2023-12-27 23:58 ` [PATCH 08/10] drm/xe/kunit: Allow to replace xe_guc_ct_send_recv() with stub Michal Wajdeczko
                   ` (9 subsequent siblings)
  16 siblings, 1 reply; 30+ messages in thread
From: Michal Wajdeczko @ 2023-12-27 23:58 UTC (permalink / raw)
  To: intel-xe

There are scenarios where SR-IOV Virtual Function (VF) driver will
need to get additional data that is not available over VF MMIO BAR
nor could be queried from the GuC firmware and must be obtained
from the Physical Function (PF) driver.

To allow such communication between VF and PF drivers, GuC supports
set of H2G and G2H actions which allows relaying embedded messages,
that are otherwise opaque for the GuC.

To allow use of this communication mechanism, provide functions for
sending requests and handling replies and placeholder where we will
put handlers for incoming requests.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/xe/Makefile             |   1 +
 drivers/gpu/drm/xe/xe_guc.c             |   5 +
 drivers/gpu/drm/xe/xe_guc_relay.c       | 918 ++++++++++++++++++++++++
 drivers/gpu/drm/xe/xe_guc_relay.h       |  32 +
 drivers/gpu/drm/xe/xe_guc_relay_types.h |  36 +
 drivers/gpu/drm/xe/xe_guc_types.h       |   4 +
 6 files changed, 996 insertions(+)
 create mode 100644 drivers/gpu/drm/xe/xe_guc_relay.c
 create mode 100644 drivers/gpu/drm/xe/xe_guc_relay.h
 create mode 100644 drivers/gpu/drm/xe/xe_guc_relay_types.h

diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index df8601d6a59f..6952da8979ea 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -148,6 +148,7 @@ xe-$(CONFIG_HWMON) += xe_hwmon.o
 
 # graphics virtualization (SR-IOV) support
 xe-y += \
+	xe_guc_relay.o \
 	xe_memirq.o \
 	xe_sriov.o
 
diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
index 811e8b201270..311a0364bff1 100644
--- a/drivers/gpu/drm/xe/xe_guc.c
+++ b/drivers/gpu/drm/xe/xe_guc.c
@@ -21,6 +21,7 @@
 #include "xe_guc_hwconfig.h"
 #include "xe_guc_log.h"
 #include "xe_guc_pc.h"
+#include "xe_guc_relay.h"
 #include "xe_guc_submit.h"
 #include "xe_memirq.h"
 #include "xe_mmio.h"
@@ -263,6 +264,10 @@ int xe_guc_init(struct xe_guc *guc)
 	if (ret)
 		goto out;
 
+	ret = xe_guc_relay_init(&guc->relay);
+	if (ret)
+		goto out;
+
 	ret = xe_guc_pc_init(&guc->pc);
 	if (ret)
 		goto out;
diff --git a/drivers/gpu/drm/xe/xe_guc_relay.c b/drivers/gpu/drm/xe/xe_guc_relay.c
new file mode 100644
index 000000000000..528a18215389
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_guc_relay.c
@@ -0,0 +1,918 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#include <linux/bitfield.h>
+#include <linux/delay.h>
+
+#include <drm/drm_managed.h>
+
+#include "abi/guc_actions_sriov_abi.h"
+#include "abi/guc_relay_actions_abi.h"
+#include "abi/guc_relay_communication_abi.h"
+
+#include "xe_assert.h"
+#include "xe_device.h"
+#include "xe_gt.h"
+#include "xe_gt_sriov_printk.h"
+#include "xe_guc.h"
+#include "xe_guc_ct.h"
+#include "xe_guc_hxg_helpers.h"
+#include "xe_guc_relay.h"
+#include "xe_guc_relay_types.h"
+#include "xe_sriov.h"
+
+/*
+ * How long should we wait for the response?
+ * XXX this value is subject for the profiling.
+ */
+#define RELAY_TIMEOUT_MSEC	(2500)
+
+static void relays_worker_fn(struct work_struct *w);
+
+static struct xe_guc *relay_to_guc(struct xe_guc_relay *relay)
+{
+	return container_of(relay, struct xe_guc, relay);
+}
+
+static struct xe_guc_ct *relay_to_ct(struct xe_guc_relay *relay)
+{
+	return &relay_to_guc(relay)->ct;
+}
+
+static struct xe_gt *relay_to_gt(struct xe_guc_relay *relay)
+{
+	return guc_to_gt(relay_to_guc(relay));
+}
+
+static struct xe_device *relay_to_xe(struct xe_guc_relay *relay)
+{
+	return gt_to_xe(relay_to_gt(relay));
+}
+
+#define relay_assert(relay, condition)	xe_gt_assert(relay_to_gt(relay), condition)
+#define relay_notice(relay, msg...)	xe_gt_sriov_notice(relay_to_gt(relay), "relay: " msg)
+#define relay_debug(relay, msg...)	xe_gt_sriov_dbg_verbose(relay_to_gt(relay), "relay: " msg)
+
+static int relay_get_totalvfs(struct xe_guc_relay *relay)
+{
+	struct xe_device *xe = relay_to_xe(relay);
+	struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
+
+	return IS_SRIOV_VF(xe) ? 0 : pci_sriov_get_totalvfs(pdev);
+}
+
+static bool relay_is_ready(struct xe_guc_relay *relay)
+{
+	return mempool_initialized(&relay->pool);
+}
+
+static u32 relay_get_next_rid(struct xe_guc_relay *relay, u32 target)
+{
+	u32 rid;
+
+	spin_lock(&relay->lock);
+	rid = ++relay->last_rid;
+	spin_unlock(&relay->lock);
+
+	return rid;
+}
+
+/*
+ * Relation between struct relay_transaction members::
+ *
+ *                 <-------------------- GUC_CTB_MAX_DWORDS -------------->
+ *                                  <-------- GUC_RELAY_MSG_MAX_LEN --->
+ *                 <--- offset ---> <--- request_len ------->
+ *                +----------------+-------------------------+----------+--+
+ *                |                |                         |          |  |
+ *                +----------------+-------------------------+----------+--+
+ *                ^                ^
+ *               /                /
+ *    request_buf          request
+ *
+ *                 <-------------------- GUC_CTB_MAX_DWORDS -------------->
+ *                                  <-------- GUC_RELAY_MSG_MAX_LEN --->
+ *                 <--- offset ---> <--- response_len --->
+ *                +----------------+----------------------+-------------+--+
+ *                |                |                      |             |  |
+ *                +----------------+----------------------+-------------+--+
+ *                ^                ^
+ *               /                /
+ *   response_buf         response
+ */
+struct relay_transaction {
+	/**
+	 * @incoming: indicates whether this transaction represents an incoming
+	 *            request from the remote VF/PF or this transaction
+	 *            represents outgoing request to the remote VF/PF.
+	 */
+	bool incoming;
+
+	/**
+	 * @remote: PF/VF identifier of the origin (or target) of the relay
+	 *          request message.
+	 */
+	u32 remote;
+
+	/** @rid: identifier of the VF/PF relay message. */
+	u32 rid;
+
+	/**
+	 * @request: points to the inner VF/PF request message, copied to the
+	 *           #response_buf starting at #offset.
+	 */
+	u32 *request;
+
+	/** @request_len: length of the inner VF/PF request message. */
+	u32 request_len;
+
+	/**
+	 * @response: points to the placeholder buffer where inner VF/PF
+	 *            response will be located, for outgoing transaction
+	 *            this could be caller's buffer (if provided) otherwise
+	 *            it points to the #response_buf starting at #offset.
+	 */
+	u32 *response;
+
+	/**
+	 * @response_len: length of the inner VF/PF response message (only
+	 *                if #status is 0), initially set to the size of the
+	 *                placeholder buffer where response message will be
+	 *                copied.
+	 */
+	u32 response_len;
+
+	/**
+	 * @offset: offset to the start of the inner VF/PF relay message inside
+	 *          buffers; this offset is equal the length of the outer GuC
+	 *          relay header message.
+	 */
+	u32 offset;
+
+	/**
+	 * @request_buf: buffer with VF/PF request message including outer
+	 *               transport message.
+	 */
+	u32 request_buf[GUC_CTB_MAX_DWORDS];
+
+	/**
+	 * @response_buf: buffer with VF/PF response message including outer
+	 *                transport message.
+	 */
+	u32 response_buf[GUC_CTB_MAX_DWORDS];
+
+	/**
+	 * @reply: status of the reply, 0 means that data pointed by the
+	 *         #response is valid.
+	 */
+	int reply;
+
+	/** @done: completion of the outgoing transaction. */
+	struct completion done;
+
+	/** @link: transaction list link */
+	struct list_head link;
+};
+
+static u32 prepare_pf2guc(u32 *msg, u32 target, u32 rid)
+{
+	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
+		 FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, XE_GUC_ACTION_PF2GUC_RELAY_TO_VF);
+	msg[1] = FIELD_PREP(PF2GUC_RELAY_TO_VF_REQUEST_MSG_1_VFID, target);
+	msg[2] = FIELD_PREP(PF2GUC_RELAY_TO_VF_REQUEST_MSG_2_RELAY_ID, rid);
+
+	return PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN;
+}
+
+static u32 prepare_vf2guc(u32 *msg, u32 rid)
+{
+	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
+		 FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, XE_GUC_ACTION_VF2GUC_RELAY_TO_PF);
+	msg[1] = FIELD_PREP(VF2GUC_RELAY_TO_PF_REQUEST_MSG_1_RELAY_ID, rid);
+
+	return VF2GUC_RELAY_TO_PF_REQUEST_MSG_MIN_LEN;
+}
+
+static struct relay_transaction *
+__relay_get_transaction(struct xe_guc_relay *relay, bool incoming, u32 remote, u32 rid,
+			const u32 *action, u32 action_len, u32 *resp, u32 resp_size)
+{
+	struct relay_transaction *txn;
+
+	relay_assert(relay, action_len >= GUC_RELAY_MSG_MIN_LEN);
+	relay_assert(relay, action_len <= GUC_RELAY_MSG_MAX_LEN);
+	relay_assert(relay, !(!!resp ^ !!resp_size));
+	relay_assert(relay, resp_size <= GUC_RELAY_MSG_MAX_LEN);
+	relay_assert(relay, resp_size == 0 || resp_size >= GUC_RELAY_MSG_MIN_LEN);
+
+	if (unlikely(!relay_is_ready(relay)))
+		return ERR_PTR(-ENODEV);
+
+	/*
+	 * For incoming requests we can't use GFP_KERNEL as those are delivered
+	 * with CTB lock held which is marked as used in the reclaim path.
+	 * Btw, that's one of the reason why we use mempool here!
+	 */
+	txn = mempool_alloc(&relay->pool, incoming ? GFP_ATOMIC : GFP_KERNEL);
+	if (!txn)
+		return ERR_PTR(-ENOMEM);
+
+	txn->incoming = incoming;
+	txn->remote = remote;
+	txn->rid = rid;
+	txn->offset = remote ?
+		prepare_pf2guc(incoming ? txn->response_buf : txn->request_buf, remote, rid) :
+		prepare_vf2guc(incoming ? txn->response_buf : txn->request_buf, rid);
+
+	relay_assert(relay, txn->offset);
+	relay_assert(relay, txn->offset + GUC_RELAY_MSG_MAX_LEN <= ARRAY_SIZE(txn->request_buf));
+	relay_assert(relay, txn->offset + GUC_RELAY_MSG_MAX_LEN <= ARRAY_SIZE(txn->response_buf));
+
+	txn->request = txn->request_buf + txn->offset;
+	memcpy(&txn->request_buf[txn->offset], action, sizeof(u32) * action_len);
+	txn->request_len = action_len;
+
+	txn->response = resp ?: txn->response_buf + txn->offset;
+	txn->response_len = resp_size ?: GUC_RELAY_MSG_MAX_LEN;
+	txn->reply = -ENOMSG;
+	INIT_LIST_HEAD(&txn->link);
+	init_completion(&txn->done);
+
+	return txn;
+}
+
+static struct relay_transaction *
+relay_new_transaction(struct xe_guc_relay *relay, u32 target, const u32 *action, u32 len,
+		      u32 *resp, u32 resp_size)
+{
+	u32 rid = relay_get_next_rid(relay, target);
+
+	return __relay_get_transaction(relay, false, target, rid, action, len, resp, resp_size);
+}
+
+static struct relay_transaction *
+relay_new_incoming_transaction(struct xe_guc_relay *relay, u32 origin, u32 rid,
+			       const u32 *action, u32 len)
+{
+	return __relay_get_transaction(relay, true, origin, rid, action, len, NULL, 0);
+}
+
+static void relay_release_transaction(struct xe_guc_relay *relay, struct relay_transaction *txn)
+{
+	relay_assert(relay, list_empty(&txn->link));
+
+	txn->offset = 0;
+	txn->response = NULL;
+	txn->reply = -ESTALE;
+	mempool_free(txn, &relay->pool);
+}
+
+static int relay_send_transaction(struct xe_guc_relay *relay, struct relay_transaction *txn)
+{
+	u32 len = txn->incoming ? txn->response_len : txn->request_len;
+	u32 *buf = txn->incoming ? txn->response_buf : txn->request_buf;
+	u32 *msg = buf + txn->offset;
+	int ret;
+
+	relay_assert(relay, txn->offset);
+	relay_assert(relay, txn->offset + len <= GUC_CTB_MAX_DWORDS);
+	relay_assert(relay, len >= GUC_RELAY_MSG_MIN_LEN);
+	relay_assert(relay, len <= GUC_RELAY_MSG_MAX_LEN);
+
+	relay_debug(relay, "sending %s.%u to %u = %*ph\n",
+		    guc_hxg_type_to_string(FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0])),
+		    txn->rid, txn->remote, (int)sizeof(u32) * len, msg);
+
+	ret = xe_guc_ct_send_block(relay_to_ct(relay), buf, len + txn->offset);
+
+	if (unlikely(ret > 0)) {
+		relay_notice(relay, "Unexpected data=%d from GuC, wrong ABI?\n", ret);
+		ret = -EPROTO;
+	}
+	if (unlikely(ret < 0)) {
+		relay_notice(relay, "Failed to send %s.%x to GuC (%pe) %*ph ...\n",
+			     guc_hxg_type_to_string(FIELD_GET(GUC_HXG_MSG_0_TYPE, buf[0])),
+			     FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, buf[0]),
+			     ERR_PTR(ret), (int)sizeof(u32) * txn->offset, buf);
+		relay_notice(relay, "Failed to send %s.%u to %u (%pe) %*ph\n",
+			     guc_hxg_type_to_string(FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0])),
+			     txn->rid, txn->remote, ERR_PTR(ret), (int)sizeof(u32) * len, msg);
+	}
+
+	return ret;
+}
+
+static void __fini_relay(struct drm_device *drm, void *arg)
+{
+	struct xe_guc_relay *relay = arg;
+
+	mempool_exit(&relay->pool);
+}
+
+/**
+ * xe_guc_relay_init - Initialize a &xe_guc_relay
+ * @relay: the &xe_guc_relay to initialize
+ *
+ * Initialize remaining members of &xe_guc_relay that may depend
+ * on the SR-IOV mode.
+ *
+ * Return: 0 on success or a negative error code on failure.
+ */
+int xe_guc_relay_init(struct xe_guc_relay *relay)
+{
+	const int XE_RELAY_MEMPOOL_MIN_NUM = 1;
+	struct xe_device *xe = relay_to_xe(relay);
+	int err;
+
+	relay_assert(relay, !relay_is_ready(relay));
+
+	if (!IS_SRIOV(xe))
+		return 0;
+
+	spin_lock_init(&relay->lock);
+	INIT_WORK(&relay->worker, relays_worker_fn);
+	INIT_LIST_HEAD(&relay->pending_relays);
+	INIT_LIST_HEAD(&relay->incoming_actions);
+
+	err = mempool_init_kmalloc_pool(&relay->pool, XE_RELAY_MEMPOOL_MIN_NUM +
+					relay_get_totalvfs(relay),
+					sizeof(struct relay_transaction));
+	if (err)
+		return err;
+
+	relay_debug(relay, "using mempool with %d elements\n", relay->pool.min_nr);
+
+	return drmm_add_action_or_reset(&xe->drm, __fini_relay, relay);
+}
+
+static u32 to_relay_error(int err)
+{
+	/* XXX: assume that relay errors match errno codes */
+	return err < 0 ? -err : GUC_RELAY_ERROR_UNDISCLOSED;
+}
+
+static int from_relay_error(u32 error)
+{
+	/* XXX: assume that relay errors match errno codes */
+	return error ? -error : -ENODATA;
+}
+
+static u32 sanitize_relay_error(u32 error)
+{
+	/* XXX TBD if generic error codes will be allowed */
+	if (!IS_ENABLED(CONFIG_DRM_XE_DEBUG))
+		error = GUC_RELAY_ERROR_UNDISCLOSED;
+	return error;
+}
+
+static u32 sanitize_relay_error_hint(u32 hint)
+{
+	/* XXX TBD if generic error codes will be allowed */
+	if (!IS_ENABLED(CONFIG_DRM_XE_DEBUG))
+		hint = 0;
+	return hint;
+}
+
+static u32 prepare_error_reply(u32 *msg, u32 error, u32 hint)
+{
+	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_RESPONSE_FAILURE) |
+		 FIELD_PREP(GUC_HXG_FAILURE_MSG_0_HINT, hint) |
+		 FIELD_PREP(GUC_HXG_FAILURE_MSG_0_ERROR, error);
+
+	XE_WARN_ON(!FIELD_FIT(GUC_HXG_FAILURE_MSG_0_ERROR, error));
+	XE_WARN_ON(!FIELD_FIT(GUC_HXG_FAILURE_MSG_0_HINT, hint));
+
+	return GUC_HXG_FAILURE_MSG_LEN;
+}
+
+static int relay_send_message_and_wait(struct xe_guc_relay *relay,
+					struct relay_transaction *txn,
+					u32 *buf, u32 buf_size)
+{
+	unsigned long timeout = msecs_to_jiffies(RELAY_TIMEOUT_MSEC);
+	u32 *msg = &txn->request_buf[txn->offset];
+	u32 len = txn->request_len;
+	u32 type, action, data0;
+	int ret;
+	long n;
+
+	type = FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]);
+	action = FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, msg[0]);
+	data0 = FIELD_GET(GUC_HXG_REQUEST_MSG_0_DATA0, msg[0]);
+
+	relay_debug(relay, "%s.%u to %u action %#x:%u\n",
+		    guc_hxg_type_to_string(type),
+		    txn->rid, txn->remote, action, data0);
+
+	/* list ordering does not need to match RID ordering */
+	spin_lock(&relay->lock);
+	list_add_tail(&txn->link, &relay->pending_relays);
+	spin_unlock(&relay->lock);
+
+resend:
+	ret = relay_send_transaction(relay, txn);
+	if (unlikely(ret < 0))
+		goto unlink;
+
+wait:
+	n = wait_for_completion_timeout(&txn->done, timeout);
+	if (unlikely(n == 0 && txn->reply)) {
+		ret = -ETIME;
+		goto unlink;
+	}
+
+	relay_debug(relay, "%u.%u reply %d after %u msec\n",
+		    txn->remote, txn->rid, txn->reply, jiffies_to_msecs(timeout - n));
+	if (unlikely(txn->reply)) {
+		reinit_completion(&txn->done);
+		if (txn->reply == -EAGAIN)
+			goto resend;
+		if (txn->reply == -EBUSY)
+			goto wait;
+		if (txn->reply > 0)
+			ret = from_relay_error(txn->reply);
+		else
+			ret = txn->reply;
+		goto unlink;
+	}
+
+	relay_debug(relay, "%u.%u response %*ph\n", txn->remote, txn->rid,
+		    (int)sizeof(u32) * txn->response_len, txn->response);
+	relay_assert(relay, txn->response_len >= GUC_RELAY_MSG_MIN_LEN);
+	ret = txn->response_len;
+
+unlink:
+	spin_lock(&relay->lock);
+	list_del_init(&txn->link);
+	spin_unlock(&relay->lock);
+
+	if (unlikely(ret < 0)) {
+		relay_notice(relay, "Unsuccessful %s.%u %#x:%u to %u (%pe) %*ph\n",
+			     guc_hxg_type_to_string(type), txn->rid,
+			     action, data0, txn->remote, ERR_PTR(ret),
+			     (int)sizeof(u32) * len, msg);
+	}
+
+	return ret;
+}
+
+static int relay_send_to(struct xe_guc_relay *relay, u32 target,
+			 const u32 *msg, u32 len, u32 *buf, u32 buf_size)
+{
+	struct relay_transaction *txn;
+	int ret;
+
+	relay_assert(relay, len >= GUC_RELAY_MSG_MIN_LEN);
+	relay_assert(relay, len <= GUC_RELAY_MSG_MAX_LEN);
+	relay_assert(relay, FIELD_GET(GUC_HXG_MSG_0_ORIGIN, msg[0]) == GUC_HXG_ORIGIN_HOST);
+	relay_assert(relay, guc_hxg_type_is_action(FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0])));
+
+	if (unlikely(!relay_is_ready(relay)))
+		return -ENODEV;
+
+	txn = relay_new_transaction(relay, target, msg, len, buf, buf_size);
+	if (IS_ERR(txn))
+		return PTR_ERR(txn);
+
+	switch (FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0])) {
+	case GUC_HXG_TYPE_REQUEST:
+		ret = relay_send_message_and_wait(relay, txn, buf, buf_size);
+		break;
+	case GUC_HXG_TYPE_FAST_REQUEST:
+		relay_assert(relay, !GUC_HXG_TYPE_FAST_REQUEST);
+		fallthrough;
+	case GUC_HXG_TYPE_EVENT:
+		ret = relay_send_transaction(relay, txn);
+		break;
+	default:
+		ret = -EINVAL;
+		break;
+	}
+
+	relay_release_transaction(relay, txn);
+	return ret;
+}
+
+/**
+ * xe_guc_relay_send_to_vf - Send a message to the VF.
+ * @relay: the &xe_guc_relay which will send the message
+ * @target: target VF number
+ * @msg: request message to be sent
+ * @len: length of the request message (in dwords, can't be 0)
+ * @buf: placeholder for the response message
+ * @buf_size: size of the response message placeholder (in dwords)
+ *
+ * This function can only be used by the driver running in the SR-IOV PF mode.
+ *
+ * Return: Non-negative response length (in dwords) or
+ *         a negative error code on failure.
+ */
+int xe_guc_relay_send_to_vf(struct xe_guc_relay *relay, u32 target,
+			    const u32 *msg, u32 len, u32 *buf, u32 buf_size)
+{
+	relay_assert(relay, IS_SRIOV_PF(relay_to_xe(relay)));
+
+	return relay_send_to(relay, target, msg, len, buf, buf_size);
+}
+
+/**
+ * xe_guc_relay_send_to_pf - Send a message to the PF.
+ * @relay: the &xe_guc_relay which will send the message
+ * @msg: request message to be sent
+ * @len: length of the message (in dwords, can't be 0)
+ * @buf: placeholder for the response message
+ * @buf_size: size of the response message placeholder (in dwords)
+ *
+ * This function can only be used by driver running in SR-IOV VF mode.
+ *
+ * Return: Non-negative response length (in dwords) or
+ *         a negative error code on failure.
+ */
+int xe_guc_relay_send_to_pf(struct xe_guc_relay *relay,
+			    const u32 *msg, u32 len, u32 *buf, u32 buf_size)
+{
+	return relay_send_to(relay, PFID, msg, len, buf, buf_size);
+}
+
+static int relay_handle_reply(struct xe_guc_relay *relay, u32 origin,
+			      u32 rid, int reply, const u32 *msg, u32 len)
+{
+	struct relay_transaction *pending;
+	int err = -ESRCH;
+
+	spin_lock(&relay->lock);
+	list_for_each_entry(pending, &relay->pending_relays, link) {
+		if (pending->remote != origin || pending->rid != rid) {
+			relay_debug(relay, "%u.%u still awaits response\n",
+				    pending->remote, pending->rid);
+			continue;
+		}
+		err = 0; /* found! */
+		if (reply == 0) {
+			if (len > pending->response_len) {
+				reply = -ENOBUFS;
+				err = -ENOBUFS;
+			} else {
+				memcpy(pending->response, msg, 4 * len);
+				pending->response_len = len;
+			}
+		}
+		pending->reply = reply;
+		complete_all(&pending->done);
+		break;
+	}
+	spin_unlock(&relay->lock);
+
+	return err;
+}
+
+static int relay_handle_failure(struct xe_guc_relay *relay, u32 origin,
+				u32 rid, const u32 *msg, u32 len)
+{
+	int error = FIELD_GET(GUC_HXG_FAILURE_MSG_0_ERROR, msg[0]);
+	u32 hint __maybe_unused = FIELD_GET(GUC_HXG_FAILURE_MSG_0_HINT, msg[0]);
+
+	relay_assert(relay, len);
+	relay_debug(relay, "%u.%u error %#x (%pe) hint %u debug %*ph\n",
+		    origin, rid, error, ERR_PTR(-error), hint, 4 * (len - 1), msg + 1);
+
+	return relay_handle_reply(relay, origin, rid, error ?: -EREMOTEIO, NULL, 0);
+}
+
+static int relay_testloop_action_handler(struct xe_guc_relay *relay, u32 origin,
+					 const u32 *msg, u32 len, u32 *response, u32 size)
+{
+	static ktime_t last_reply = 0;
+	u32 type = FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]);
+	u32 action = FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, msg[0]);
+	u32 opode = FIELD_GET(GUC_HXG_REQUEST_MSG_0_DATA0, msg[0]);
+	ktime_t now = ktime_get();
+	bool busy;
+	int ret;
+
+	relay_assert(relay, guc_hxg_type_is_action(type));
+	relay_assert(relay, action == GUC_RELAY_ACTION_VFXPF_TESTLOOP);
+
+	if (!IS_ENABLED(CONFIG_DRM_XE_DEBUG_SRIOV))
+		return -ECONNREFUSED;
+
+	if (!last_reply)
+		last_reply = now;
+	busy = ktime_before(now, ktime_add_ms(last_reply, 2 * RELAY_TIMEOUT_MSEC));
+	if (!busy)
+		last_reply = now;
+
+	switch (opode) {
+	case VFXPF_TESTLOOP_OPCODE_NOP:
+		if (type == GUC_HXG_TYPE_EVENT)
+			return 0;
+		return guc_hxg_msg_encode_success(response, 0);
+	case VFXPF_TESTLOOP_OPCODE_BUSY:
+		if (type == GUC_HXG_TYPE_EVENT)
+			return -EPROTO;
+		msleep(RELAY_TIMEOUT_MSEC / 8);
+		if (busy)
+			return -EINPROGRESS;
+		return guc_hxg_msg_encode_success(response, 0);
+	case VFXPF_TESTLOOP_OPCODE_RETRY:
+		if (type == GUC_HXG_TYPE_EVENT)
+			return -EPROTO;
+		msleep(RELAY_TIMEOUT_MSEC / 8);
+		if (busy)
+			return guc_hxg_msg_encode_retry(response, 0);
+		return guc_hxg_msg_encode_success(response, 0);
+	case VFXPF_TESTLOOP_OPCODE_ECHO:
+		if (type == GUC_HXG_TYPE_EVENT)
+			return -EPROTO;
+		if (size < len)
+			return -ENOBUFS;
+		ret = guc_hxg_msg_encode_success(response, len);
+		memcpy(response + ret, msg + ret, (len - ret) * sizeof(u32));
+		return len;
+	case VFXPF_TESTLOOP_OPCODE_FAIL:
+		return -EHWPOISON;
+	default:
+		break;
+	}
+
+	relay_notice(relay, "Unexpected action %#x opcode %#x\n", action, opode);
+	return -EBADRQC;
+}
+
+static int relay_action_handler(struct xe_guc_relay *relay, u32 origin,
+				const u32 *msg, u32 len, u32 *response, u32 size)
+{
+	u32 type;
+	int ret;
+
+	relay_assert(relay, len >= GUC_HXG_MSG_MIN_LEN);
+
+	if (FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, msg[0]) == GUC_RELAY_ACTION_VFXPF_TESTLOOP)
+		return relay_testloop_action_handler(relay, origin, msg, len, response, size);
+
+	type = FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]);
+
+	/* XXX: PF services will be added later */
+	ret = -EOPNOTSUPP;
+
+	if (type == GUC_HXG_TYPE_EVENT)
+		relay_assert(relay, ret <= 0);
+
+	return ret;
+}
+
+static struct relay_transaction *relay_dequeue_transaction(struct xe_guc_relay *relay)
+{
+	struct relay_transaction *txn;
+
+	spin_lock(&relay->lock);
+	txn = list_first_entry_or_null(&relay->incoming_actions, struct relay_transaction, link);
+	if (txn)
+		list_del_init(&txn->link);
+	spin_unlock(&relay->lock);
+
+	return txn;
+}
+
+static void relay_process_incoming_action(struct xe_guc_relay *relay)
+{
+	struct relay_transaction *txn;
+	bool again = false;
+	u32 type;
+	int ret;
+
+	txn = relay_dequeue_transaction(relay);
+	if (!txn)
+		return;
+
+	type = FIELD_GET(GUC_HXG_MSG_0_TYPE, txn->request_buf[txn->offset]);
+
+	ret = relay_action_handler(relay, txn->remote,
+				   txn->request_buf + txn->offset, txn->request_len,
+				   txn->response_buf + txn->offset,
+				   ARRAY_SIZE(txn->response_buf) - txn->offset);
+
+	if (ret == -EINPROGRESS) {
+		again = true;
+		ret = guc_hxg_msg_encode_busy(txn->response_buf + txn->offset, 0);
+	}
+
+	if (ret > 0) {
+		txn->response_len = ret;
+		ret = relay_send_transaction(relay, txn);
+	}
+
+	if (ret < 0) {
+		u32 error = to_relay_error(ret);
+
+		relay_notice(relay, "Failed to handle %s.%u from %u (%pe) %*ph\n",
+			     guc_hxg_type_to_string(type), txn->rid, txn->remote,
+			     ERR_PTR(ret), 4 * txn->request_len, txn->request_buf + txn->offset);
+
+
+		txn->response_len = prepare_error_reply(txn->response_buf + txn->offset,
+							txn->remote ?
+							sanitize_relay_error(error) : error,
+							txn->remote ?
+							sanitize_relay_error_hint(-ret) : -ret);
+		ret = relay_send_transaction(relay, txn);
+		again = false;
+	}
+
+	if (again) {
+		spin_lock(&relay->lock);
+		list_add(&txn->link, &relay->incoming_actions);
+		spin_unlock(&relay->lock);
+		return;
+	}
+
+	if (unlikely(ret < 0))
+		relay_notice(relay, "Failed to process action.%u (%pe) %*ph\n",
+			     txn->rid, ERR_PTR(ret), 4 * txn->request_len,
+			     txn->request_buf + txn->offset);
+
+	relay_release_transaction(relay, txn);
+}
+
+static bool relay_needs_worker(struct xe_guc_relay *relay)
+{
+	return !list_empty(&relay->incoming_actions);
+}
+
+static void relay_kick_worker(struct xe_guc_relay *relay)
+{
+	queue_work(relay_to_xe(relay)->sriov.wq, &relay->worker);
+}
+
+static void relays_worker_fn(struct work_struct *w)
+{
+	struct xe_guc_relay *relay = container_of(w, struct xe_guc_relay, worker);
+
+	relay_process_incoming_action(relay);
+
+	if (relay_needs_worker(relay))
+		relay_kick_worker(relay);
+}
+
+static int relay_queue_action_msg(struct xe_guc_relay *relay, u32 origin, u32 rid,
+				  const u32 *msg, u32 len)
+{
+	struct relay_transaction *txn;
+
+	txn = relay_new_incoming_transaction(relay, origin, rid, msg, len);
+	if (IS_ERR(txn))
+		return PTR_ERR(txn);
+
+	spin_lock(&relay->lock);
+	list_add_tail(&txn->link, &relay->incoming_actions);
+	spin_unlock(&relay->lock);
+
+	relay_kick_worker(relay);
+	return 0;
+}
+
+static int relay_process_msg(struct xe_guc_relay *relay, u32 origin, u32 rid,
+			     const u32 *msg, u32 len)
+{
+	u32 type;
+	int err;
+
+	if (unlikely(len < GUC_HXG_MSG_MIN_LEN))
+		return -EPROTO;
+
+	if (FIELD_GET(GUC_HXG_MSG_0_ORIGIN, msg[0]) != GUC_HXG_ORIGIN_HOST)
+		return -EPROTO;
+
+	type = FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]);
+	relay_debug(relay, "received %s.%u from %u = %*ph\n",
+		    guc_hxg_type_to_string(type), rid, origin, 4 * len, msg);
+
+	switch (type) {
+	case GUC_HXG_TYPE_REQUEST:
+	case GUC_HXG_TYPE_FAST_REQUEST:
+	case GUC_HXG_TYPE_EVENT:
+		err = relay_queue_action_msg(relay, origin, rid, msg, len);
+		break;
+	case GUC_HXG_TYPE_RESPONSE_SUCCESS:
+		err = relay_handle_reply(relay, origin, rid, 0, msg, len);
+		break;
+	case GUC_HXG_TYPE_NO_RESPONSE_BUSY:
+		err = relay_handle_reply(relay, origin, rid, -EBUSY, NULL, 0);
+		break;
+	case GUC_HXG_TYPE_NO_RESPONSE_RETRY:
+		err = relay_handle_reply(relay, origin, rid, -EAGAIN, NULL, 0);
+		break;
+	case GUC_HXG_TYPE_RESPONSE_FAILURE:
+		err = relay_handle_failure(relay, origin, rid, msg, len);
+		break;
+	default:
+		err = -EBADRQC;
+	}
+
+	if (unlikely(err))
+		relay_notice(relay, "Failed to process %s.%u from %u (%pe) %*ph\n",
+			     guc_hxg_type_to_string(type), rid, origin,
+			     ERR_PTR(err), 4 * len, msg);
+
+	return err;
+}
+
+/**
+ * xe_guc_relay_process_guc2vf - Handle relay notification message from the GuC.
+ * @relay: the &xe_guc_relay which will handle the message
+ * @msg: message to be handled
+ * @len: length of the message (in dwords)
+ *
+ * This function will handle relay messages received from the GuC.
+ *
+ * This function is can only be used if driver is running in SR-IOV mode.
+ *
+ * Return: 0 on success or a negative error code on failure.
+ */
+int xe_guc_relay_process_guc2vf(struct xe_guc_relay *relay, const u32 *msg, u32 len)
+{
+	u32 rid;
+
+	relay_assert(relay, len >= GUC_HXG_MSG_MIN_LEN);
+	relay_assert(relay, FIELD_GET(GUC_HXG_MSG_0_ORIGIN, msg[0]) == GUC_HXG_ORIGIN_GUC);
+	relay_assert(relay, FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]) == GUC_HXG_TYPE_EVENT);
+	relay_assert(relay, FIELD_GET(GUC_HXG_EVENT_MSG_0_ACTION, msg[0]) ==
+		     XE_GUC_ACTION_GUC2VF_RELAY_FROM_PF);
+
+	if (unlikely(!relay_is_ready(relay)))
+		return -ENODEV;
+
+	if (unlikely(len < GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN))
+		return -EPROTO;
+
+	if (unlikely(len > GUC2VF_RELAY_FROM_PF_EVENT_MSG_MAX_LEN))
+		return -EMSGSIZE;
+
+	if (unlikely(FIELD_GET(GUC_HXG_EVENT_MSG_0_DATA0, msg[0])))
+		return -EPFNOSUPPORT;
+
+	rid = FIELD_GET(GUC2VF_RELAY_FROM_PF_EVENT_MSG_1_RELAY_ID, msg[1]);
+
+	return relay_process_msg(relay, PFID, rid,
+				 msg + GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN,
+				 len - GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN);
+}
+
+#ifdef CONFIG_PCI_IOV
+/**
+ * xe_guc_relay_process_guc2pf - Handle relay notification message from the GuC.
+ * @relay: the &xe_guc_relay which will handle the message
+ * @msg: message to be handled
+ * @len: length of the message (in dwords)
+ *
+ * This function will handle relay messages received from the GuC.
+ *
+ * This function can only be used if driver is running in SR-IOV PF mode.
+ *
+ * Return: 0 on success or a negative error code on failure.
+ */
+int xe_guc_relay_process_guc2pf(struct xe_guc_relay *relay, const u32 *msg, u32 len)
+{
+	struct xe_gt *gt = relay_to_gt(relay);
+	u32 origin, rid;
+	int err;
+
+	relay_assert(relay, len >= GUC_HXG_EVENT_MSG_MIN_LEN);
+	relay_assert(relay, FIELD_GET(GUC_HXG_MSG_0_ORIGIN, msg[0]) == GUC_HXG_ORIGIN_GUC);
+	relay_assert(relay, FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]) == GUC_HXG_TYPE_EVENT);
+	relay_assert(relay, FIELD_GET(GUC_HXG_EVENT_MSG_0_ACTION, msg[0]) ==
+		     XE_GUC_ACTION_GUC2PF_RELAY_FROM_VF);
+
+	if (unlikely(!relay_is_ready(relay)))
+		return -ENODEV;
+
+	if (unlikely(!xe_device_is_sriov_pf(gt_to_xe(gt))))
+		return -EPERM;
+
+	if (unlikely(len < GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN))
+		return -EPROTO;
+
+	if (unlikely(len > GUC2PF_RELAY_FROM_VF_EVENT_MSG_MAX_LEN))
+		return -EMSGSIZE;
+
+	if (unlikely(FIELD_GET(GUC_HXG_EVENT_MSG_0_DATA0, msg[0])))
+		return -EPFNOSUPPORT;
+
+	origin = FIELD_GET(GUC2PF_RELAY_FROM_VF_EVENT_MSG_1_VFID, msg[1]);
+	rid = FIELD_GET(GUC2PF_RELAY_FROM_VF_EVENT_MSG_2_RELAY_ID, msg[2]);
+
+	if (unlikely(origin > relay_get_totalvfs(relay)))
+		return -ENOENT;
+
+	err = relay_process_msg(relay, origin, rid,
+				msg + GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN,
+				len - GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN);
+
+	return err;
+}
+#endif
diff --git a/drivers/gpu/drm/xe/xe_guc_relay.h b/drivers/gpu/drm/xe/xe_guc_relay.h
new file mode 100644
index 000000000000..e6a251be34a1
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_guc_relay.h
@@ -0,0 +1,32 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#ifndef _XE_GUC_RELAY_H_
+#define _XE_GUC_RELAY_H_
+
+#include <linux/types.h>
+#include <linux/errno.h>
+
+struct xe_guc_relay;
+
+int xe_guc_relay_init(struct xe_guc_relay *relay);
+
+int xe_guc_relay_send_to_vf(struct xe_guc_relay *relay, u32 target,
+			    const u32 *msg, u32 len, u32 *buf, u32 buf_size);
+int xe_guc_relay_send_to_pf(struct xe_guc_relay *relay,
+			    const u32 *msg, u32 len, u32 *buf, u32 buf_size);
+
+int xe_guc_relay_process_guc2vf(struct xe_guc_relay *relay, const u32 *msg, u32 len);
+
+#ifdef CONFIG_PCI_IOV
+int xe_guc_relay_process_guc2pf(struct xe_guc_relay *relay, const u32 *msg, u32 len);
+#else
+static inline int xe_guc_relay_process_guc2pf(struct xe_guc_relay *relay, const u32 *msg, u32 len)
+{
+	return -ENODEV;
+}
+#endif
+
+#endif
diff --git a/drivers/gpu/drm/xe/xe_guc_relay_types.h b/drivers/gpu/drm/xe/xe_guc_relay_types.h
new file mode 100644
index 000000000000..600e10cd727e
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_guc_relay_types.h
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#ifndef _XE_GUC_RELAY_TYPES_H_
+#define _XE_GUC_RELAY_TYPES_H_
+
+#include <linux/mempool.h>
+#include <linux/spinlock.h>
+#include <linux/workqueue.h>
+
+/**
+ * struct xe_guc_relay - Data used by the VF-PF Relay Communication over GuC.
+ */
+struct xe_guc_relay {
+	/**@lock: protects all internal data. */
+	spinlock_t lock;
+
+	/** @worker: dispathes incoming action messages. */
+	struct work_struct worker;
+
+	/** @pending_relays: list of sent requests that await a response. */
+	struct list_head pending_relays;
+
+	/** @incoming_actions: list of incoming relay action messages to process. */
+	struct list_head incoming_actions;
+
+	/** @pool: pool of the relay message buffers. */
+	mempool_t pool;
+
+	/** @last_rid: last Relay-ID used while sending a message. */
+	u32 last_rid;
+};
+
+#endif
diff --git a/drivers/gpu/drm/xe/xe_guc_types.h b/drivers/gpu/drm/xe/xe_guc_types.h
index 16de203c62a7..dc6059de669c 100644
--- a/drivers/gpu/drm/xe/xe_guc_types.h
+++ b/drivers/gpu/drm/xe/xe_guc_types.h
@@ -15,6 +15,7 @@
 #include "xe_guc_fwif.h"
 #include "xe_guc_log_types.h"
 #include "xe_guc_pc_types.h"
+#include "xe_guc_relay_types.h"
 #include "xe_uc_fw_types.h"
 
 /**
@@ -85,6 +86,9 @@ struct xe_guc {
 		u32 size;
 	} hwconfig;
 
+	/** @relay: GuC Relay Communication used in SR-IOV */
+	struct xe_guc_relay relay;
+
 	/**
 	 * @notify_reg: Register which is written to notify GuC of H2G messages
 	 */
-- 
2.25.1


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

* [PATCH 08/10] drm/xe/kunit: Allow to replace xe_guc_ct_send_recv() with stub
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
                   ` (6 preceding siblings ...)
  2023-12-27 23:58 ` [PATCH 07/10] drm/xe/guc: Introduce Relay Communication for SR-IOV Michal Wajdeczko
@ 2023-12-27 23:58 ` Michal Wajdeczko
  2023-12-29 21:15   ` Piotr Piórkowski
  2023-12-27 23:58 ` [PATCH 09/10] drm/xe/kunit: Add GuC Relay kunit tests Michal Wajdeczko
                   ` (8 subsequent siblings)
  16 siblings, 1 reply; 30+ messages in thread
From: Michal Wajdeczko @ 2023-12-27 23:58 UTC (permalink / raw)
  To: intel-xe

We want to use replacement functions in upcoming kunit tests.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/xe/xe_guc_ct.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
index 4cde93c18a2d..8f208267ffc6 100644
--- a/drivers/gpu/drm/xe/xe_guc_ct.c
+++ b/drivers/gpu/drm/xe/xe_guc_ct.c
@@ -9,6 +9,8 @@
 #include <linux/circ_buf.h>
 #include <linux/delay.h>
 
+#include <kunit/static_stub.h>
+
 #include <drm/drm_managed.h>
 
 #include "abi/guc_actions_abi.h"
@@ -782,6 +784,7 @@ static int guc_ct_send_recv(struct xe_guc_ct *ct, const u32 *action, u32 len,
 int xe_guc_ct_send_recv(struct xe_guc_ct *ct, const u32 *action, u32 len,
 			u32 *response_buffer)
 {
+	KUNIT_STATIC_STUB_REDIRECT(xe_guc_ct_send_recv, ct, action, len, response_buffer);
 	return guc_ct_send_recv(ct, action, len, response_buffer, false);
 }
 
-- 
2.25.1


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

* [PATCH 09/10] drm/xe/kunit: Add GuC Relay kunit tests
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
                   ` (7 preceding siblings ...)
  2023-12-27 23:58 ` [PATCH 08/10] drm/xe/kunit: Allow to replace xe_guc_ct_send_recv() with stub Michal Wajdeczko
@ 2023-12-27 23:58 ` Michal Wajdeczko
  2023-12-29 21:15   ` Piotr Piórkowski
  2023-12-27 23:58 ` [PATCH 10/10] drm/xe/guc: Start handling GuC Relay event messages Michal Wajdeczko
                   ` (7 subsequent siblings)
  16 siblings, 1 reply; 30+ messages in thread
From: Michal Wajdeczko @ 2023-12-27 23:58 UTC (permalink / raw)
  To: intel-xe

Add few tests to make sure that some negative and normal use
scenarios of the GuC Relay are implemented correctly.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/xe/tests/xe_guc_relay_test.c | 522 +++++++++++++++++++
 drivers/gpu/drm/xe/xe_guc_relay.c            |  17 +-
 2 files changed, 538 insertions(+), 1 deletion(-)
 create mode 100644 drivers/gpu/drm/xe/tests/xe_guc_relay_test.c

diff --git a/drivers/gpu/drm/xe/tests/xe_guc_relay_test.c b/drivers/gpu/drm/xe/tests/xe_guc_relay_test.c
new file mode 100644
index 000000000000..13701451b923
--- /dev/null
+++ b/drivers/gpu/drm/xe/tests/xe_guc_relay_test.c
@@ -0,0 +1,522 @@
+// SPDX-License-Identifier: GPL-2.0 AND MIT
+/*
+ * Copyright © 2023 Intel Corporation
+ */
+
+#include <kunit/static_stub.h>
+#include <kunit/test.h>
+#include <kunit/test-bug.h>
+
+#include "xe_device.h"
+#include "xe_kunit_helpers.h"
+#include "xe_pci_test.h"
+
+#define TEST_RID	1234
+#define TEST_VFID	5
+#define TEST_LEN	6
+#define TEST_ACTION	0xa
+#define TEST_DATA(n)	(0xd0 + (n))
+
+static int replacement_relay_get_totalvfs(struct xe_guc_relay *relay)
+{
+	return TEST_VFID;
+}
+
+static int relay_test_init(struct kunit *test)
+{
+	struct xe_pci_fake_data fake = {
+		.sriov_mode = XE_SRIOV_MODE_PF,
+		.platform = XE_TIGERLAKE, /* some random platform */
+		.subplatform = XE_SUBPLATFORM_NONE,
+	};
+	struct xe_guc_relay *relay;
+	struct xe_device *xe;
+
+	test->priv = &fake;
+	xe_kunit_helper_xe_device_test_init(test);
+
+	xe = test->priv;
+	KUNIT_ASSERT_EQ(test, xe_sriov_init(xe), 0);
+
+	relay = &xe_device_get_gt(xe, 0)->uc.guc.relay;
+	kunit_activate_static_stub(test, relay_get_totalvfs,
+				   replacement_relay_get_totalvfs);
+
+	KUNIT_ASSERT_EQ(test, xe_guc_relay_init(relay), 0);
+	KUNIT_EXPECT_TRUE(test, relay_is_ready(relay));
+	relay->last_rid = TEST_RID - 1;
+
+	test->priv = relay;
+	return 0;
+}
+
+static const u32 TEST_MSG[TEST_LEN] = {
+	FIELD_PREP_CONST(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+	FIELD_PREP_CONST(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_EVENT) |
+	FIELD_PREP_CONST(GUC_HXG_EVENT_MSG_0_ACTION, TEST_ACTION) |
+	FIELD_PREP_CONST(GUC_HXG_EVENT_MSG_0_DATA0, TEST_DATA(0)),
+	TEST_DATA(1), TEST_DATA(2), TEST_DATA(3), TEST_DATA(4),
+};
+
+static int replacement_xe_guc_ct_send_recv_always_fails(struct xe_guc_ct *ct,
+							const u32 *msg, u32 len,
+							u32 *response_buffer)
+{
+	struct kunit *test = kunit_get_current_test();
+
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ct);
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, msg);
+	KUNIT_ASSERT_GE(test, len, GUC_HXG_MSG_MIN_LEN);
+
+	return -ECOMM;
+}
+
+static int replacement_xe_guc_ct_send_recv_expects_pf2guc_relay(struct xe_guc_ct *ct,
+								const u32 *msg, u32 len,
+								u32 *response_buffer)
+{
+	struct kunit *test = kunit_get_current_test();
+
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ct);
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, msg);
+	KUNIT_ASSERT_GE(test, len, PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN);
+	KUNIT_ASSERT_EQ(test, len, PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN + TEST_LEN);
+	KUNIT_EXPECT_EQ(test, GUC_HXG_ORIGIN_HOST, FIELD_GET(GUC_HXG_MSG_0_ORIGIN, msg[0]));
+	KUNIT_EXPECT_EQ(test, GUC_HXG_TYPE_REQUEST, FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]));
+	KUNIT_EXPECT_EQ(test, XE_GUC_ACTION_PF2GUC_RELAY_TO_VF,
+			FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, msg[0]));
+	KUNIT_EXPECT_EQ(test, TEST_VFID,
+			FIELD_GET(PF2GUC_RELAY_TO_VF_REQUEST_MSG_1_VFID, msg[1]));
+	KUNIT_EXPECT_EQ(test, TEST_RID,
+			FIELD_GET(PF2GUC_RELAY_TO_VF_REQUEST_MSG_2_RELAY_ID, msg[2]));
+	KUNIT_EXPECT_MEMEQ(test, TEST_MSG, msg + PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN,
+			   sizeof(u32) * TEST_LEN);
+	return 0;
+}
+
+static const u32 test_guc2pf[GUC2PF_RELAY_FROM_VF_EVENT_MSG_MAX_LEN] = {
+	/* transport */
+	FIELD_PREP_CONST(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_GUC) |
+	FIELD_PREP_CONST(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_EVENT) |
+	FIELD_PREP_CONST(GUC_HXG_EVENT_MSG_0_ACTION, XE_GUC_ACTION_GUC2PF_RELAY_FROM_VF),
+	FIELD_PREP_CONST(GUC2PF_RELAY_FROM_VF_EVENT_MSG_1_VFID, TEST_VFID),
+	FIELD_PREP_CONST(GUC2PF_RELAY_FROM_VF_EVENT_MSG_2_RELAY_ID, TEST_RID),
+	/* payload */
+	FIELD_PREP_CONST(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+	FIELD_PREP_CONST(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_RESPONSE_SUCCESS),
+};
+
+static const u32 test_guc2vf[GUC2VF_RELAY_FROM_PF_EVENT_MSG_MAX_LEN] = {
+	/* transport */
+	FIELD_PREP_CONST(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_GUC) |
+	FIELD_PREP_CONST(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_EVENT) |
+	FIELD_PREP_CONST(GUC_HXG_EVENT_MSG_0_ACTION, XE_GUC_ACTION_GUC2VF_RELAY_FROM_PF),
+	FIELD_PREP_CONST(GUC2VF_RELAY_FROM_PF_EVENT_MSG_1_RELAY_ID, TEST_RID),
+	/* payload */
+	FIELD_PREP_CONST(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+	FIELD_PREP_CONST(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_RESPONSE_SUCCESS),
+};
+
+static void pf_rejects_guc2pf_too_short(struct kunit *test)
+{
+	const u32 len = GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN - 1;
+	struct xe_guc_relay *relay = test->priv;
+	const u32 *msg = test_guc2pf;
+
+	KUNIT_ASSERT_EQ(test, -EPROTO, xe_guc_relay_process_guc2pf(relay, msg, len));
+}
+
+static void pf_rejects_guc2pf_too_long(struct kunit *test)
+{
+	const u32 len = GUC2PF_RELAY_FROM_VF_EVENT_MSG_MAX_LEN + 1;
+	struct xe_guc_relay *relay = test->priv;
+	const u32 *msg = test_guc2pf;
+
+	KUNIT_ASSERT_EQ(test, -EMSGSIZE, xe_guc_relay_process_guc2pf(relay, msg, len));
+}
+
+static void pf_rejects_guc2pf_no_payload(struct kunit *test)
+{
+	const u32 len = GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN;
+	struct xe_guc_relay *relay = test->priv;
+	const u32 *msg = test_guc2pf;
+
+	KUNIT_ASSERT_EQ(test, -EPROTO, xe_guc_relay_process_guc2pf(relay, msg, len));
+}
+
+static void pf_fails_no_payload(struct kunit *test)
+{
+	struct xe_guc_relay *relay = test->priv;
+	const u32 msg = 0;
+
+	KUNIT_ASSERT_EQ(test, -EPROTO, relay_process_msg(relay, TEST_VFID, TEST_RID, &msg, 0));
+}
+
+static void pf_fails_bad_origin(struct kunit *test)
+{
+	struct xe_guc_relay *relay = test->priv;
+	static const u32 msg[] = {
+		FIELD_PREP_CONST(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_GUC) |
+		FIELD_PREP_CONST(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_RESPONSE_SUCCESS),
+	};
+	u32 len = ARRAY_SIZE(msg);
+
+	KUNIT_ASSERT_EQ(test, -EPROTO, relay_process_msg(relay, TEST_VFID, TEST_RID, msg, len));
+}
+
+static void pf_fails_bad_type(struct kunit *test)
+{
+	struct xe_guc_relay *relay = test->priv;
+	const u32 msg[] = {
+		FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+		FIELD_PREP(GUC_HXG_MSG_0_TYPE, 4), /* only 4 is undefined */
+	};
+	u32 len = ARRAY_SIZE(msg);
+
+	KUNIT_ASSERT_EQ(test, -EBADRQC, relay_process_msg(relay, TEST_VFID, TEST_RID, msg, len));
+}
+
+static void pf_txn_reports_error(struct kunit *test)
+{
+	struct xe_guc_relay *relay = test->priv;
+	struct relay_transaction *txn;
+
+	txn = __relay_get_transaction(relay, false, TEST_VFID, TEST_RID,
+				      TEST_MSG, TEST_LEN, NULL, 0);
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, txn);
+
+	kunit_activate_static_stub(test, xe_guc_ct_send_recv,
+				   replacement_xe_guc_ct_send_recv_always_fails);
+	KUNIT_EXPECT_EQ(test, -ECOMM, relay_send_transaction(relay, txn));
+
+	relay_release_transaction(relay, txn);
+}
+
+static void pf_txn_sends_pf2guc(struct kunit *test)
+{
+	struct xe_guc_relay *relay = test->priv;
+	struct relay_transaction *txn;
+
+	txn = __relay_get_transaction(relay, false, TEST_VFID, TEST_RID,
+				      TEST_MSG, TEST_LEN, NULL, 0);
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, txn);
+
+	kunit_activate_static_stub(test, xe_guc_ct_send_recv,
+				   replacement_xe_guc_ct_send_recv_expects_pf2guc_relay);
+	KUNIT_ASSERT_EQ(test, 0, relay_send_transaction(relay, txn));
+
+	relay_release_transaction(relay, txn);
+}
+
+static void pf_sends_pf2guc(struct kunit *test)
+{
+	struct xe_guc_relay *relay = test->priv;
+
+	kunit_activate_static_stub(test, xe_guc_ct_send_recv,
+				   replacement_xe_guc_ct_send_recv_expects_pf2guc_relay);
+	KUNIT_ASSERT_EQ(test, 0,
+			xe_guc_relay_send_to_vf(relay, TEST_VFID,
+						TEST_MSG, TEST_LEN, NULL, 0));
+}
+
+static int replacement_xe_guc_ct_send_recv_loopback_relay(struct xe_guc_ct *ct,
+							  const u32 *msg, u32 len,
+							  u32 *response_buffer)
+{
+	struct kunit *test = kunit_get_current_test();
+	struct xe_guc_relay *relay = test->priv;
+	u32 *reply = kunit_kzalloc(test, len * sizeof(u32), GFP_KERNEL);
+	int (*guc2relay)(struct xe_guc_relay *, const u32 *, u32);
+	u32 action;
+	int err;
+
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ct);
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, msg);
+	KUNIT_ASSERT_GE(test, len, GUC_HXG_MSG_MIN_LEN);
+	KUNIT_ASSERT_EQ(test, GUC_HXG_TYPE_REQUEST,
+			FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]));
+	KUNIT_ASSERT_GE(test, len, GUC_HXG_REQUEST_MSG_MIN_LEN);
+	KUNIT_ASSERT_NOT_NULL(test, reply);
+
+	switch (FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, msg[0])) {
+	case XE_GUC_ACTION_PF2GUC_RELAY_TO_VF:
+		KUNIT_ASSERT_GE(test, len, PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN);
+		action = XE_GUC_ACTION_GUC2PF_RELAY_FROM_VF;
+		guc2relay = xe_guc_relay_process_guc2pf;
+		break;
+	case XE_GUC_ACTION_VF2GUC_RELAY_TO_PF:
+		KUNIT_ASSERT_GE(test, len, VF2GUC_RELAY_TO_PF_REQUEST_MSG_MIN_LEN);
+		action = XE_GUC_ACTION_GUC2VF_RELAY_FROM_PF;
+		guc2relay = xe_guc_relay_process_guc2vf;
+		break;
+	default:
+		KUNIT_FAIL(test, "bad RELAY action %#x", msg[0]);
+		return -EINVAL;
+	}
+
+	reply[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_GUC) |
+		   FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_EVENT) |
+		   FIELD_PREP(GUC_HXG_EVENT_MSG_0_ACTION, action);
+	memcpy(reply + 1, msg + 1, sizeof(u32) * (len - 1));
+
+	err = guc2relay(relay, reply, len);
+	KUNIT_EXPECT_EQ(test, err, 0);
+
+	return err;
+}
+
+static void test_requires_relay_testloop(struct kunit *test)
+{
+	/*
+	 * The debug relay action GUC_RELAY_ACTION_VFXPF_TESTLOOP is available
+	 * only on builds with CONFIG_DRM_XE_DEBUG_SRIOV enabled.
+	 * See "kunit.py --kconfig_add" option if it's missing.
+	 */
+	if (!IS_ENABLED(CONFIG_DRM_XE_DEBUG_SRIOV))
+		kunit_skip(test, "requires %s\n", __stringify(CONFIG_DRM_XE_DEBUG_SRIOV));
+}
+
+static void pf_loopback_nop(struct kunit *test)
+{
+	struct xe_guc_relay *relay = test->priv;
+	u32 request[] = {
+		FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+		FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
+		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, GUC_RELAY_ACTION_VFXPF_TESTLOOP) |
+		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_DATA0, VFXPF_TESTLOOP_OPCODE_NOP),
+	};
+	u32 response[GUC_HXG_RESPONSE_MSG_MIN_LEN];
+	int ret;
+
+	test_requires_relay_testloop(test);
+
+	kunit_activate_static_stub(test, relay_kick_worker, relay_process_incoming_action);
+	kunit_activate_static_stub(test, xe_guc_ct_send_recv,
+				   replacement_xe_guc_ct_send_recv_loopback_relay);
+	ret = xe_guc_relay_send_to_vf(relay, TEST_VFID,
+				      request, ARRAY_SIZE(request),
+				      response, ARRAY_SIZE(response));
+	KUNIT_ASSERT_EQ(test, ret, GUC_HXG_RESPONSE_MSG_MIN_LEN);
+	KUNIT_EXPECT_EQ(test, FIELD_GET(GUC_HXG_MSG_0_ORIGIN, response[0]),
+			GUC_HXG_ORIGIN_HOST);
+	KUNIT_EXPECT_EQ(test, FIELD_GET(GUC_HXG_MSG_0_TYPE, response[0]),
+			GUC_HXG_TYPE_RESPONSE_SUCCESS);
+	KUNIT_EXPECT_EQ(test, FIELD_GET(GUC_HXG_RESPONSE_MSG_0_DATA0, response[0]), 0);
+}
+
+static void pf_loopback_echo(struct kunit *test)
+{
+	struct xe_guc_relay *relay = test->priv;
+	u32 request[] = {
+		FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+		FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
+		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, GUC_RELAY_ACTION_VFXPF_TESTLOOP) |
+		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_DATA0, VFXPF_TESTLOOP_OPCODE_ECHO),
+		TEST_DATA(1), TEST_DATA(2), TEST_DATA(3), TEST_DATA(4),
+	};
+	u32 response[ARRAY_SIZE(request)];
+	unsigned int n;
+	int ret;
+
+	test_requires_relay_testloop(test);
+
+	kunit_activate_static_stub(test, relay_kick_worker, relay_process_incoming_action);
+	kunit_activate_static_stub(test, xe_guc_ct_send_recv,
+				   replacement_xe_guc_ct_send_recv_loopback_relay);
+	ret = xe_guc_relay_send_to_vf(relay, TEST_VFID,
+				      request, ARRAY_SIZE(request),
+				      response, ARRAY_SIZE(response));
+	KUNIT_ASSERT_EQ(test, ret, ARRAY_SIZE(response));
+	KUNIT_EXPECT_EQ(test, FIELD_GET(GUC_HXG_MSG_0_ORIGIN, response[0]),
+			GUC_HXG_ORIGIN_HOST);
+	KUNIT_EXPECT_EQ(test, FIELD_GET(GUC_HXG_MSG_0_TYPE, response[0]),
+			GUC_HXG_TYPE_RESPONSE_SUCCESS);
+	KUNIT_EXPECT_EQ(test, FIELD_GET(GUC_HXG_RESPONSE_MSG_0_DATA0, response[0]),
+			ARRAY_SIZE(response));
+	for (n = GUC_HXG_RESPONSE_MSG_MIN_LEN; n < ret; n++)
+		KUNIT_EXPECT_EQ(test, request[n], response[n]);
+}
+
+static void pf_loopback_fail(struct kunit *test)
+{
+	struct xe_guc_relay *relay = test->priv;
+	u32 request[] = {
+		FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+		FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
+		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, GUC_RELAY_ACTION_VFXPF_TESTLOOP) |
+		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_DATA0, VFXPF_TESTLOOP_OPCODE_FAIL),
+	};
+	u32 response[GUC_HXG_RESPONSE_MSG_MIN_LEN];
+	int ret;
+
+	test_requires_relay_testloop(test);
+
+	kunit_activate_static_stub(test, relay_kick_worker, relay_process_incoming_action);
+	kunit_activate_static_stub(test, xe_guc_ct_send_recv,
+				   replacement_xe_guc_ct_send_recv_loopback_relay);
+	ret = xe_guc_relay_send_to_vf(relay, TEST_VFID,
+				      request, ARRAY_SIZE(request),
+				      response, ARRAY_SIZE(response));
+	KUNIT_ASSERT_EQ(test, ret, -EREMOTEIO);
+}
+
+static void pf_loopback_busy(struct kunit *test)
+{
+	struct xe_guc_relay *relay = test->priv;
+	u32 request[] = {
+		FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+		FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
+		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, GUC_RELAY_ACTION_VFXPF_TESTLOOP) |
+		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_DATA0, VFXPF_TESTLOOP_OPCODE_BUSY),
+		TEST_DATA(0xb),
+	};
+	u32 response[GUC_HXG_RESPONSE_MSG_MIN_LEN];
+	int ret;
+
+	test_requires_relay_testloop(test);
+
+	kunit_activate_static_stub(test, relay_testonly_nop, relay_process_incoming_action);
+	kunit_activate_static_stub(test, relay_kick_worker, relay_process_incoming_action);
+	kunit_activate_static_stub(test, xe_guc_ct_send_recv,
+				   replacement_xe_guc_ct_send_recv_loopback_relay);
+	ret = xe_guc_relay_send_to_vf(relay, TEST_VFID,
+				      request, ARRAY_SIZE(request),
+				      response, ARRAY_SIZE(response));
+	KUNIT_ASSERT_EQ(test, ret, GUC_HXG_RESPONSE_MSG_MIN_LEN);
+}
+
+static void pf_loopback_retry(struct kunit *test)
+{
+	struct xe_guc_relay *relay = test->priv;
+	u32 request[] = {
+		FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
+		FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
+		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, GUC_RELAY_ACTION_VFXPF_TESTLOOP) |
+		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_DATA0, VFXPF_TESTLOOP_OPCODE_RETRY),
+		TEST_DATA(0xd), TEST_DATA(0xd),
+	};
+	u32 response[GUC_HXG_RESPONSE_MSG_MIN_LEN];
+	int ret;
+
+	test_requires_relay_testloop(test);
+
+	kunit_activate_static_stub(test, relay_kick_worker, relay_process_incoming_action);
+	kunit_activate_static_stub(test, xe_guc_ct_send_recv,
+				   replacement_xe_guc_ct_send_recv_loopback_relay);
+	ret = xe_guc_relay_send_to_vf(relay, TEST_VFID,
+				      request, ARRAY_SIZE(request),
+				      response, ARRAY_SIZE(response));
+	KUNIT_ASSERT_EQ(test, ret, GUC_HXG_RESPONSE_MSG_MIN_LEN);
+}
+
+static struct kunit_case pf_relay_test_cases[] = {
+	KUNIT_CASE(pf_rejects_guc2pf_too_short),
+	KUNIT_CASE(pf_rejects_guc2pf_too_long),
+	KUNIT_CASE(pf_rejects_guc2pf_no_payload),
+	KUNIT_CASE(pf_fails_no_payload),
+	KUNIT_CASE(pf_fails_bad_origin),
+	KUNIT_CASE(pf_fails_bad_type),
+	KUNIT_CASE(pf_txn_reports_error),
+	KUNIT_CASE(pf_txn_sends_pf2guc),
+	KUNIT_CASE(pf_sends_pf2guc),
+	KUNIT_CASE(pf_loopback_nop),
+	KUNIT_CASE(pf_loopback_echo),
+	KUNIT_CASE(pf_loopback_fail),
+	KUNIT_CASE_SLOW(pf_loopback_busy),
+	KUNIT_CASE_SLOW(pf_loopback_retry),
+	{}
+};
+
+static struct kunit_suite pf_relay_suite = {
+	.name = "pf_relay",
+	.test_cases = pf_relay_test_cases,
+	.init = relay_test_init,
+};
+
+static void vf_rejects_guc2vf_too_short(struct kunit *test)
+{
+	const u32 len = GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN - 1;
+	struct xe_guc_relay *relay = test->priv;
+	const u32 *msg = test_guc2vf;
+
+	KUNIT_ASSERT_EQ(test, -EPROTO, xe_guc_relay_process_guc2vf(relay, msg, len));
+}
+
+static void vf_rejects_guc2vf_too_long(struct kunit *test)
+{
+	const u32 len = GUC2VF_RELAY_FROM_PF_EVENT_MSG_MAX_LEN + 1;
+	struct xe_guc_relay *relay = test->priv;
+	const u32 *msg = test_guc2vf;
+
+	KUNIT_ASSERT_EQ(test, -EMSGSIZE, xe_guc_relay_process_guc2vf(relay, msg, len));
+}
+
+static void vf_rejects_guc2vf_no_payload(struct kunit *test)
+{
+	const u32 len = GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN;
+	struct xe_guc_relay *relay = test->priv;
+	const u32 *msg = test_guc2vf;
+
+	KUNIT_ASSERT_EQ(test, -EPROTO, xe_guc_relay_process_guc2vf(relay, msg, len));
+}
+
+static struct kunit_case vf_relay_test_cases[] = {
+	KUNIT_CASE(vf_rejects_guc2vf_too_short),
+	KUNIT_CASE(vf_rejects_guc2vf_too_long),
+	KUNIT_CASE(vf_rejects_guc2vf_no_payload),
+	{}
+};
+
+static struct kunit_suite vf_relay_suite = {
+	.name = "vf_relay",
+	.test_cases = vf_relay_test_cases,
+	.init = relay_test_init,
+};
+
+static void xe_drops_guc2pf_if_not_ready(struct kunit *test)
+{
+	struct xe_device *xe = test->priv;
+	struct xe_guc_relay *relay = &xe_device_get_gt(xe, 0)->uc.guc.relay;
+	const u32 *msg = test_guc2pf;
+	u32 len = GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN + GUC_RELAY_MSG_MIN_LEN;
+
+	KUNIT_ASSERT_EQ(test, -ENODEV, xe_guc_relay_process_guc2pf(relay, msg, len));
+}
+
+static void xe_drops_guc2vf_if_not_ready(struct kunit *test)
+{
+	struct xe_device *xe = test->priv;
+	struct xe_guc_relay *relay = &xe_device_get_gt(xe, 0)->uc.guc.relay;
+	const u32 *msg = test_guc2vf;
+	u32 len = GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN + GUC_RELAY_MSG_MIN_LEN;
+
+	KUNIT_ASSERT_EQ(test, -ENODEV, xe_guc_relay_process_guc2vf(relay, msg, len));
+}
+
+static void xe_rejects_send_if_not_ready(struct kunit *test)
+{
+	struct xe_device *xe = test->priv;
+	struct xe_guc_relay *relay = &xe_device_get_gt(xe, 0)->uc.guc.relay;
+	u32 msg[GUC_RELAY_MSG_MIN_LEN];
+	u32 len = ARRAY_SIZE(msg);
+
+	KUNIT_ASSERT_EQ(test, -ENODEV, xe_guc_relay_send_to_pf(relay, msg, len, NULL, 0));
+	KUNIT_ASSERT_EQ(test, -ENODEV, relay_send_to(relay, TEST_VFID, msg, len, NULL, 0));
+}
+
+static struct kunit_case no_relay_test_cases[] = {
+	KUNIT_CASE(xe_drops_guc2pf_if_not_ready),
+	KUNIT_CASE(xe_drops_guc2vf_if_not_ready),
+	KUNIT_CASE(xe_rejects_send_if_not_ready),
+	{}
+};
+
+static struct kunit_suite no_relay_suite = {
+	.name = "no_relay",
+	.test_cases = no_relay_test_cases,
+	.init = xe_kunit_helper_xe_device_test_init,
+};
+
+kunit_test_suites(&no_relay_suite,
+		  &pf_relay_suite,
+		  &vf_relay_suite);
diff --git a/drivers/gpu/drm/xe/xe_guc_relay.c b/drivers/gpu/drm/xe/xe_guc_relay.c
index 528a18215389..32535a4fd69c 100644
--- a/drivers/gpu/drm/xe/xe_guc_relay.c
+++ b/drivers/gpu/drm/xe/xe_guc_relay.c
@@ -8,6 +8,8 @@
 
 #include <drm/drm_managed.h>
 
+#include <kunit/static_stub.h>
+
 #include "abi/guc_actions_sriov_abi.h"
 #include "abi/guc_relay_actions_abi.h"
 #include "abi/guc_relay_communication_abi.h"
@@ -60,6 +62,7 @@ static int relay_get_totalvfs(struct xe_guc_relay *relay)
 	struct xe_device *xe = relay_to_xe(relay);
 	struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
 
+	KUNIT_STATIC_STUB_REDIRECT(relay_get_totalvfs, relay);
 	return IS_SRIOV_VF(xe) ? 0 : pci_sriov_get_totalvfs(pdev);
 }
 
@@ -390,6 +393,11 @@ static u32 prepare_error_reply(u32 *msg, u32 error, u32 hint)
 	return GUC_HXG_FAILURE_MSG_LEN;
 }
 
+static void relay_testonly_nop(struct xe_guc_relay *relay)
+{
+	KUNIT_STATIC_STUB_REDIRECT(relay_testonly_nop, relay);
+}
+
 static int relay_send_message_and_wait(struct xe_guc_relay *relay,
 					struct relay_transaction *txn,
 					u32 *buf, u32 buf_size)
@@ -432,8 +440,10 @@ static int relay_send_message_and_wait(struct xe_guc_relay *relay,
 		reinit_completion(&txn->done);
 		if (txn->reply == -EAGAIN)
 			goto resend;
-		if (txn->reply == -EBUSY)
+		if (txn->reply == -EBUSY) {
+			relay_testonly_nop(relay);
 			goto wait;
+		}
 		if (txn->reply > 0)
 			ret = from_relay_error(txn->reply);
 		else
@@ -746,6 +756,7 @@ static bool relay_needs_worker(struct xe_guc_relay *relay)
 
 static void relay_kick_worker(struct xe_guc_relay *relay)
 {
+	KUNIT_STATIC_STUB_REDIRECT(relay_kick_worker, relay);
 	queue_work(relay_to_xe(relay)->sriov.wq, &relay->worker);
 }
 
@@ -916,3 +927,7 @@ int xe_guc_relay_process_guc2pf(struct xe_guc_relay *relay, const u32 *msg, u32
 	return err;
 }
 #endif
+
+#if IS_BUILTIN(CONFIG_DRM_XE_KUNIT_TEST)
+#include "tests/xe_guc_relay_test.c"
+#endif
-- 
2.25.1


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

* [PATCH 10/10] drm/xe/guc: Start handling GuC Relay event messages
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
                   ` (8 preceding siblings ...)
  2023-12-27 23:58 ` [PATCH 09/10] drm/xe/kunit: Add GuC Relay kunit tests Michal Wajdeczko
@ 2023-12-27 23:58 ` Michal Wajdeczko
  2023-12-29 21:16   ` Piotr Piórkowski
  2024-01-04  5:43 ` ✓ CI.Patch_applied: success for Introduce Relay Communication for SR-IOV Patchwork
                   ` (6 subsequent siblings)
  16 siblings, 1 reply; 30+ messages in thread
From: Michal Wajdeczko @ 2023-12-27 23:58 UTC (permalink / raw)
  To: intel-xe

GuC Relay infrastructure is ready, start handling relay messages
from the GuC to unblock testing on the live system.

Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
---
 drivers/gpu/drm/xe/xe_guc_ct.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
index 8f208267ffc6..c29f095aa1b9 100644
--- a/drivers/gpu/drm/xe/xe_guc_ct.c
+++ b/drivers/gpu/drm/xe/xe_guc_ct.c
@@ -14,6 +14,7 @@
 #include <drm/drm_managed.h>
 
 #include "abi/guc_actions_abi.h"
+#include "abi/guc_actions_sriov_abi.h"
 #include "abi/guc_klvs_abi.h"
 #include "xe_bo.h"
 #include "xe_device.h"
@@ -22,6 +23,7 @@
 #include "xe_gt_printk.h"
 #include "xe_gt_tlb_invalidation.h"
 #include "xe_guc.h"
+#include "xe_guc_relay.h"
 #include "xe_guc_submit.h"
 #include "xe_map.h"
 #include "xe_pm.h"
@@ -969,6 +971,12 @@ static int process_g2h_msg(struct xe_guc_ct *ct, u32 *msg, u32 len)
 		ret = xe_guc_access_counter_notify_handler(guc, payload,
 							   adj_len);
 		break;
+	case XE_GUC_ACTION_GUC2PF_RELAY_FROM_VF:
+		ret = xe_guc_relay_process_guc2pf(&guc->relay, payload, adj_len);
+		break;
+	case XE_GUC_ACTION_GUC2VF_RELAY_FROM_PF:
+		ret = xe_guc_relay_process_guc2vf(&guc->relay, payload, adj_len);
+		break;
 	default:
 		drm_err(&xe->drm, "unexpected action 0x%04x\n", action);
 	}
-- 
2.25.1


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

* Re: [PATCH 01/10] drm/xe: Allocate dedicated workqueue for SR-IOV workers
  2023-12-27 23:58 ` [PATCH 01/10] drm/xe: Allocate dedicated workqueue for SR-IOV workers Michal Wajdeczko
@ 2023-12-29 21:06   ` Piotr Piórkowski
  0 siblings, 0 replies; 30+ messages in thread
From: Piotr Piórkowski @ 2023-12-29 21:06 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on czw [2023-gru-28 00:58:29 +0100]:
> We plan to use several workers where we might be running long
> operations. Allocate dedicated workqueue to avoid undesired
> interaction with non-virtualized workers.
> 
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> ---
>  drivers/gpu/drm/xe/xe_device.c       |  4 +++
>  drivers/gpu/drm/xe/xe_device_types.h |  2 ++
>  drivers/gpu/drm/xe/xe_sriov.c        | 37 ++++++++++++++++++++++++++++
>  drivers/gpu/drm/xe/xe_sriov.h        |  1 +
>  4 files changed, 44 insertions(+)
> 
> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> index 86867d42d532..004e65544e8d 100644
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c
> @@ -438,6 +438,10 @@ int xe_device_probe(struct xe_device *xe)
>  
>  	xe_pat_init_early(xe);
>  
> +	err = xe_sriov_init(xe);
> +	if (err)
> +		return err;
> +
>  	xe->info.mem_region_mask = 1;
>  	err = xe_display_init_nommio(xe);
>  	if (err)
> diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
> index 71f23ac365e6..163d889d407b 100644
> --- a/drivers/gpu/drm/xe/xe_device_types.h
> +++ b/drivers/gpu/drm/xe/xe_device_types.h
> @@ -321,6 +321,8 @@ struct xe_device {
>  	struct {
>  		/** @sriov.__mode: SR-IOV mode (Don't access directly!) */
>  		enum xe_sriov_mode __mode;
> +		/** @sriov.wq: workqueue used by the virtualization workers */
> +		struct workqueue_struct *wq;
>  	} sriov;
>  
>  	/** @clients: drm clients info */
> diff --git a/drivers/gpu/drm/xe/xe_sriov.c b/drivers/gpu/drm/xe/xe_sriov.c
> index 42a0e0c917a0..4960e8f461c8 100644
> --- a/drivers/gpu/drm/xe/xe_sriov.c
> +++ b/drivers/gpu/drm/xe/xe_sriov.c
> @@ -3,6 +3,8 @@
>   * Copyright © 2023 Intel Corporation
>   */
>  
> +#include <drm/drm_managed.h>
> +
>  #include "xe_assert.h"
>  #include "xe_sriov.h"
>  
> @@ -53,3 +55,38 @@ void xe_sriov_probe_early(struct xe_device *xe, bool has_sriov)
>  		drm_info(&xe->drm, "Running in %s mode\n",
>  			 xe_sriov_mode_to_string(xe_device_sriov_mode(xe)));
>  }
> +
> +static void fini_sriov(struct drm_device *drm, void *arg)
> +{
> +	struct xe_device *xe = arg;
> +
> +	destroy_workqueue(xe->sriov.wq);
> +	xe->sriov.wq = NULL;
> +}
> +
> +/**
> + * xe_sriov_init - Initialize SR-IOV specific data.
> + * @xe: the &xe_device to initialize
> + *
> + * While most of the initialization errors would be fatal for the Virtual
> + * Function (VF) device driver, in case of the Physical Function (PF) we
> + * might just limit the PF functionality and continue run as a native
> + * (non-virtualized) driver.
> + *

The description suggests a functionality that has not yet been introduced
in this series.

> + * In this function we just create dedicated workqueue that will be used
> + * by the SR-IOV specific workers.
> + *
> + * Return: 0 on success or a negative error code on failure.
> + */
> +int xe_sriov_init(struct xe_device *xe)
> +{
> +	if (!IS_SRIOV(xe))
> +		return 0;
> +
> +	xe_assert(xe, !xe->sriov.wq);
> +	xe->sriov.wq = alloc_workqueue("xe-sriov-wq", 0, 0);
> +	if (!xe->sriov.wq)
> +		return -ENOMEM;
> +
> +	return drmm_add_action_or_reset(&xe->drm, fini_sriov, xe);
> +}
> diff --git a/drivers/gpu/drm/xe/xe_sriov.h b/drivers/gpu/drm/xe/xe_sriov.h
> index 5af73a3172b0..1545552162c9 100644
> --- a/drivers/gpu/drm/xe/xe_sriov.h
> +++ b/drivers/gpu/drm/xe/xe_sriov.h
> @@ -13,6 +13,7 @@
>  const char *xe_sriov_mode_to_string(enum xe_sriov_mode mode);
>  
>  void xe_sriov_probe_early(struct xe_device *xe, bool has_sriov);
> +int xe_sriov_init(struct xe_device *xe);
>  
>  static inline enum xe_sriov_mode xe_device_sriov_mode(struct xe_device *xe)
>  {

I would suggest remove the comment I mentioned so as not to confuse others until this
functionality actually appears.
However, the rest of the code is ok for me:
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com>



> -- 
> 2.25.1
> 

-- 

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

* Re: [PATCH 02/10] drm/xe: Define Virtual Function Identifier
  2023-12-27 23:58 ` [PATCH 02/10] drm/xe: Define Virtual Function Identifier Michal Wajdeczko
@ 2023-12-29 21:07   ` Piotr Piórkowski
  0 siblings, 0 replies; 30+ messages in thread
From: Piotr Piórkowski @ 2023-12-29 21:07 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on czw [2023-gru-28 00:58:30 +0100]:
> According to the PCI Express specification, the SR-IOV Virtual
> Functions (VFs) are numbered starting with 1 (VF1, VF2, ...).
> Additionally, both driver and GuC will refer to Physical Function
> (PF) as VF0. Define helper macro to represent VFn and PF.
> 
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> ---
>  drivers/gpu/drm/xe/xe_sriov_types.h | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/drivers/gpu/drm/xe/xe_sriov_types.h b/drivers/gpu/drm/xe/xe_sriov_types.h
> index 999a4311b98b..fbeebdb12166 100644
> --- a/drivers/gpu/drm/xe/xe_sriov_types.h
> +++ b/drivers/gpu/drm/xe/xe_sriov_types.h
> @@ -8,6 +8,18 @@
>  
>  #include <linux/build_bug.h>
>  
> +/**
> + * VFID - Virtual Function Identifier
> + * @n: VF number
> + *
> + * Helper macro to represent Virtual Function (VF) Indentifier.

typo

> + * VFID(0) is used as alias to the PFID that represents Physical Function.
> + *
> + * Note: According to PCI spec, SR-IOV VF's numbers are 1-based (VF1, VF2, ...).
> + */
> +#define VFID(n)		(n)
> +#define PFID		VFID(0)
> +
>  /**
>   * enum xe_sriov_mode - SR-IOV mode
>   * @XE_SRIOV_MODE_NONE: bare-metal mode (non-virtualized)

One typo to fix:
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com>


> -- 
> 2.25.1
> 

-- 

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

* Re: [PATCH 03/10] drm/xe: Introduce GT-oriented SR-IOV logging macros
  2023-12-27 23:58 ` [PATCH 03/10] drm/xe: Introduce GT-oriented SR-IOV logging macros Michal Wajdeczko
@ 2023-12-29 21:07   ` Piotr Piórkowski
  0 siblings, 0 replies; 30+ messages in thread
From: Piotr Piórkowski @ 2023-12-29 21:07 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on czw [2023-gru-28 00:58:31 +0100]:
> To simplify logging and help identify SR-IOV specific messages
> related to the GT, define set of helper macros that will add
> prefix to the messages based on the current SR-IOV mode.
> 
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com>

> ---
>  drivers/gpu/drm/xe/xe_gt_sriov_printk.h | 34 +++++++++++++++++++++++++
>  1 file changed, 34 insertions(+)
>  create mode 100644 drivers/gpu/drm/xe/xe_gt_sriov_printk.h
> 
> diff --git a/drivers/gpu/drm/xe/xe_gt_sriov_printk.h b/drivers/gpu/drm/xe/xe_gt_sriov_printk.h
> new file mode 100644
> index 000000000000..17624b16300a
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_gt_sriov_printk.h
> @@ -0,0 +1,34 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2023 Intel Corporation
> + */
> +
> +#ifndef _XE_GT_SRIOV_PRINTK_H_
> +#define _XE_GT_SRIOV_PRINTK_H_
> +
> +#include "xe_gt_printk.h"
> +#include "xe_sriov_printk.h"
> +
> +#define __xe_gt_sriov_printk(gt, _level, fmt, ...) \
> +	xe_gt_printk((gt), _level, "%s" fmt, xe_sriov_printk_prefix(gt_to_xe(gt)), ##__VA_ARGS__)
> +
> +#define xe_gt_sriov_err(_gt, _fmt, ...) \
> +	__xe_gt_sriov_printk(_gt, err, _fmt, ##__VA_ARGS__)
> +
> +#define xe_gt_sriov_notice(_gt, _fmt, ...) \
> +	__xe_gt_sriov_printk(_gt, notice, _fmt, ##__VA_ARGS__)
> +
> +#define xe_gt_sriov_info(_gt, _fmt, ...) \
> +	__xe_gt_sriov_printk(_gt, info, _fmt, ##__VA_ARGS__)
> +
> +#define xe_gt_sriov_dbg(_gt, _fmt, ...) \
> +	__xe_gt_sriov_printk(_gt, dbg, _fmt, ##__VA_ARGS__)
> +
> +/* for low level noisy debug messages */
> +#ifdef CONFIG_DRM_XE_DEBUG_SRIOV
> +#define xe_gt_sriov_dbg_verbose(_gt, _fmt, ...) xe_gt_sriov_dbg(_gt, _fmt, ##__VA_ARGS__)
> +#else
> +#define xe_gt_sriov_dbg_verbose(_gt, _fmt, ...) typecheck(struct xe_gt *, (_gt))
> +#endif
> +
> +#endif
> -- 
> 2.25.1
> 

-- 

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

* Re: [PATCH 04/10] drm/xe/guc: Add helpers for HXG messages
  2023-12-27 23:58 ` [PATCH 04/10] drm/xe/guc: Add helpers for HXG messages Michal Wajdeczko
@ 2023-12-29 21:08   ` Piotr Piórkowski
  2023-12-29 22:10     ` Michal Wajdeczko
  0 siblings, 1 reply; 30+ messages in thread
From: Piotr Piórkowski @ 2023-12-29 21:08 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on czw [2023-gru-28 00:58:32 +0100]:
> In addition to MMIO and CTB communication between the host driver
> and the GUC firmware, we will start using GuC HXG message protocol
> in communication between SR-IOV VFs and PF. Define helpers related
> to HXG message protocol to minimize code duplication.
> 
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> ---
>  drivers/gpu/drm/xe/xe_guc_hxg_helpers.h | 107 ++++++++++++++++++++++++
>  1 file changed, 107 insertions(+)
>  create mode 100644 drivers/gpu/drm/xe/xe_guc_hxg_helpers.h
> 
> diff --git a/drivers/gpu/drm/xe/xe_guc_hxg_helpers.h b/drivers/gpu/drm/xe/xe_guc_hxg_helpers.h
> new file mode 100644
> index 000000000000..4dc080484e7a
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_guc_hxg_helpers.h
> @@ -0,0 +1,107 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2023 Intel Corporation
> + */
> +
> +#ifndef _XE_GUC_HXG_HELPERS_H_
> +#define _XE_GUC_HXG_HELPERS_H_
> +
> +#include <linux/bitfield.h>
> +#include <linux/types.h>
> +
> +#include "abi/guc_messages_abi.h"
> +
> +/**
> + * hxg_sizeof - Queries size of the object or type (in HXG units).
> + *
> + * Asserts when actual size is not aligned to HXG unit (u32).
> + *
> + * Return: size in dwords (u32).
> + */
> +#define hxg_sizeof(T)	(sizeof(T) / sizeof(u32) + BUILD_BUG_ON_ZERO(sizeof(T) % sizeof(u32)))
> +
> +static inline const char *guc_hxg_type_to_string(unsigned int type)
> +{
> +	switch (type) {
> +	case GUC_HXG_TYPE_REQUEST:
> +		return "request";
> +	case GUC_HXG_TYPE_FAST_REQUEST:
> +		return "fast-request";
> +	case GUC_HXG_TYPE_EVENT:
> +		return "event";
> +	case GUC_HXG_TYPE_NO_RESPONSE_BUSY:
> +		return "busy";
> +	case GUC_HXG_TYPE_NO_RESPONSE_RETRY:
> +		return "retry";
> +	case GUC_HXG_TYPE_RESPONSE_FAILURE:
> +		return "failure";
> +	case GUC_HXG_TYPE_RESPONSE_SUCCESS:
> +		return "response";
> +	default:
> +		return "<invalid>";
> +	}
> +}
> +
> +static inline bool guc_hxg_type_is_action(unsigned int type)
> +{
> +	switch (type) {
> +	case GUC_HXG_TYPE_REQUEST:
> +	case GUC_HXG_TYPE_FAST_REQUEST:
> +	case GUC_HXG_TYPE_EVENT:
> +		return true;
> +	default:
> +		return false;
> +	}
> +}
> +
> +static inline bool guc_hxg_type_is_reply(unsigned int type)
> +{
> +	switch (type) {
> +	case GUC_HXG_TYPE_NO_RESPONSE_BUSY:
> +	case GUC_HXG_TYPE_NO_RESPONSE_RETRY:
> +	case GUC_HXG_TYPE_RESPONSE_FAILURE:
> +	case GUC_HXG_TYPE_RESPONSE_SUCCESS:
> +		return true;
> +	default:
> +		return false;
> +	}
> +}
> +
> +static inline u32 guc_hxg_msg_encode_success(u32 *msg, u32 data0)
> +{
> +	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_RESPONSE_SUCCESS) |
> +		 FIELD_PREP(GUC_HXG_RESPONSE_MSG_0_DATA0, data0);
> +
> +	return GUC_HXG_RESPONSE_MSG_MIN_LEN;
> +}
> +
> +static inline u32 guc_hxg_msg_encode_failure(u32 *msg, u32 error, u32 hint)
> +{
> +	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_RESPONSE_FAILURE) |
> +		 FIELD_PREP(GUC_HXG_FAILURE_MSG_0_HINT, hint) |
> +		 FIELD_PREP(GUC_HXG_FAILURE_MSG_0_ERROR, error);
> +
> +	return GUC_HXG_FAILURE_MSG_LEN;
> +}
> +
> +static inline u32 guc_hxg_msg_encode_busy(u32 *msg, u32 counter)
> +{
> +	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_NO_RESPONSE_BUSY) |
> +		 FIELD_PREP(GUC_HXG_BUSY_MSG_0_COUNTER, counter);
> +
> +	return GUC_HXG_BUSY_MSG_LEN;
> +}
> +
> +static inline u32 guc_hxg_msg_encode_retry(u32 *msg, u32 reason)
> +{
> +	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_NO_RESPONSE_RETRY) |
> +		 FIELD_PREP(GUC_HXG_RETRY_MSG_0_REASON, reason);
> +
> +	return GUC_HXG_RETRY_MSG_LEN;
> +}

Note to the 4 functions above ^^^^^:
I know that naming convention says to use in this case guc_hxg_*
However, these functions, by their content directly indicate that they
are only h2g.
I have a subjective feeling, which you can ignore, that they should be
labeled in some way as h2g.

But still:
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com>


> +
> +#endif
> -- 
> 2.25.1
> 

-- 

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

* Re: [PATCH 05/10] drm/xe/guc: Update few GuC CTB ABI definitions
  2023-12-27 23:58 ` [PATCH 05/10] drm/xe/guc: Update few GuC CTB ABI definitions Michal Wajdeczko
@ 2023-12-29 21:09   ` Piotr Piórkowski
  0 siblings, 0 replies; 30+ messages in thread
From: Piotr Piórkowski @ 2023-12-29 21:09 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on czw [2023-gru-28 00:58:33 +0100]:
> In upcoming new GuC ABI definitions we will want to refer to max
> number of dwords that could fit into CTB HXG message. Add explicit
> definition named as GUC_CTB_MAX_DWORDS and start using it.
> 
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com>

> ---
>  drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h b/drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
> index 3b83f907ece4..4aaed1cb4e12 100644
> --- a/drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
> +++ b/drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
> @@ -81,12 +81,13 @@ static_assert(sizeof(struct guc_ct_buffer_desc) == 64);
>  
>  #define GUC_CTB_HDR_LEN				1u
>  #define GUC_CTB_MSG_MIN_LEN			GUC_CTB_HDR_LEN
> -#define GUC_CTB_MSG_MAX_LEN			256u
> +#define GUC_CTB_MSG_MAX_LEN			(GUC_CTB_MSG_MIN_LEN + GUC_CTB_MAX_DWORDS)
>  #define GUC_CTB_MSG_0_FENCE			(0xffff << 16)
>  #define GUC_CTB_MSG_0_FORMAT			(0xf << 12)
>  #define   GUC_CTB_FORMAT_HXG			0u
>  #define GUC_CTB_MSG_0_RESERVED			(0xf << 8)
>  #define GUC_CTB_MSG_0_NUM_DWORDS		(0xff << 0)
> +#define   GUC_CTB_MAX_DWORDS			255
>  
>  /**
>   * DOC: CTB HXG Message
> -- 
> 2.25.1
> 

-- 

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

* Re: [PATCH 06/10] drm/xe/guc: Add Relay Communication ABI definitions
  2023-12-27 23:58 ` [PATCH 06/10] drm/xe/guc: Add Relay Communication " Michal Wajdeczko
@ 2023-12-29 21:09   ` Piotr Piórkowski
  0 siblings, 0 replies; 30+ messages in thread
From: Piotr Piórkowski @ 2023-12-29 21:09 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on czw [2023-gru-28 00:58:34 +0100]:
> The communication between Virtual Function (VF) drivers and
> Physical Function (PF) drivers is based on the GuC firmware
> acting as a proxy (relay) agent.
> 
> Add related ABI definitions that we will be using in upcoming
> patches with our GuC Relay implementation.
> 
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com>

> ---
>  .../gpu/drm/xe/abi/guc_actions_sriov_abi.h    | 174 ++++++++++++++++++
>  .../gpu/drm/xe/abi/guc_relay_actions_abi.h    |  79 ++++++++
>  .../drm/xe/abi/guc_relay_communication_abi.h  | 118 ++++++++++++
>  3 files changed, 371 insertions(+)
>  create mode 100644 drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
>  create mode 100644 drivers/gpu/drm/xe/abi/guc_relay_actions_abi.h
>  create mode 100644 drivers/gpu/drm/xe/abi/guc_relay_communication_abi.h
> 
> diff --git a/drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h b/drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
> new file mode 100644
> index 000000000000..5496a5890847
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
> @@ -0,0 +1,174 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2023 Intel Corporation
> + */
> +
> +#ifndef _GUC_ACTIONS_PF_ABI_H
> +#define _GUC_ACTIONS_PF_ABI_H
> +
> +#include "guc_communication_ctb_abi.h"
> +
> +/**
> + * DOC: GUC2PF_RELAY_FROM_VF
> + *
> + * This message is used by the GuC firmware to forward a VF2PF `Relay Message`_
> + * received from the Virtual Function (VF) driver to this Physical Function (PF)
> + * driver.
> + *
> + * This message is always sent as `CTB HXG Message`_.
> + *
> + *  +---+-------+--------------------------------------------------------------+
> + *  |   | Bits  | Description                                                  |
> + *  +===+=======+==============================================================+
> + *  | 0 |    31 | ORIGIN = GUC_HXG_ORIGIN_GUC_                                 |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   | 30:28 | TYPE = GUC_HXG_TYPE_EVENT_                                   |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   | 27:16 | MBZ                                                          |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   |  15:0 | ACTION = _`XE_GUC_ACTION_GUC2PF_RELAY_FROM_VF` = 0x5100      |
> + *  +---+-------+--------------------------------------------------------------+
> + *  | 1 |  31:0 | **VFID** - source VF identifier                              |
> + *  +---+-------+--------------------------------------------------------------+
> + *  | 2 |  31:0 | **RELAY_ID** - VF/PF message ID                              |
> + *  +---+-------+-----------------+--------------------------------------------+
> + *  | 3 |  31:0 | **RELAY_DATA1** |                                            |
> + *  +---+-------+-----------------+                                            |
> + *  |...|       |                 |       [Embedded `Relay Message`_]          |
> + *  +---+-------+-----------------+                                            |
> + *  | n |  31:0 | **RELAY_DATAx** |                                            |
> + *  +---+-------+-----------------+--------------------------------------------+
> + */
> +#define XE_GUC_ACTION_GUC2PF_RELAY_FROM_VF		0x5100
> +
> +#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN		(GUC_HXG_EVENT_MSG_MIN_LEN + 2u)
> +#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_MAX_LEN \
> +	(GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN + GUC_RELAY_MSG_MAX_LEN)
> +#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_0_MBZ		GUC_HXG_EVENT_MSG_0_DATA0
> +#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_1_VFID		GUC_HXG_EVENT_MSG_n_DATAn
> +#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_2_RELAY_ID	GUC_HXG_EVENT_MSG_n_DATAn
> +#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_3_RELAY_DATA1	GUC_HXG_EVENT_MSG_n_DATAn
> +#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_n_RELAY_DATAx	GUC_HXG_EVENT_MSG_n_DATAn
> +#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_NUM_RELAY_DATA	GUC_RELAY_MSG_MAX_LEN
> +
> +/**
> + * DOC: PF2GUC_RELAY_TO_VF
> + *
> + * This H2G message is used by the Physical Function (PF) driver to send embedded
> + * VF2PF `Relay Message`_ to the VF.
> + *
> + * This action message must be sent over CTB as `CTB HXG Message`_.
> + *
> + *  +---+-------+--------------------------------------------------------------+
> + *  |   | Bits  | Description                                                  |
> + *  +===+=======+==============================================================+
> + *  | 0 |    31 | ORIGIN = GUC_HXG_ORIGIN_HOST_                                |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   | 30:28 | TYPE = `GUC_HXG_TYPE_FAST_REQUEST`_                          |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   | 27:16 | MBZ                                                          |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   |  15:0 | ACTION = _`XE_GUC_ACTION_PF2GUC_RELAY_TO_VF` = 0x5101        |
> + *  +---+-------+--------------------------------------------------------------+
> + *  | 1 |  31:0 | **VFID** - target VF identifier                              |
> + *  +---+-------+--------------------------------------------------------------+
> + *  | 2 |  31:0 | **RELAY_ID** - VF/PF message ID                              |
> + *  +---+-------+-----------------+--------------------------------------------+
> + *  | 3 |  31:0 | **RELAY_DATA1** |                                            |
> + *  +---+-------+-----------------+                                            |
> + *  |...|       |                 |       [Embedded `Relay Message`_]          |
> + *  +---+-------+-----------------+                                            |
> + *  | n |  31:0 | **RELAY_DATAx** |                                            |
> + *  +---+-------+-----------------+--------------------------------------------+
> + */
> +#define XE_GUC_ACTION_PF2GUC_RELAY_TO_VF		0x5101
> +
> +#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN		(GUC_HXG_REQUEST_MSG_MIN_LEN + 2u)
> +#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_MAX_LEN \
> +	(PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN + GUC_RELAY_MSG_MAX_LEN)
> +#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_0_MBZ		GUC_HXG_REQUEST_MSG_0_DATA0
> +#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_1_VFID		GUC_HXG_REQUEST_MSG_n_DATAn
> +#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_2_RELAY_ID	GUC_HXG_REQUEST_MSG_n_DATAn
> +#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_3_RELAY_DATA1	GUC_HXG_REQUEST_MSG_n_DATAn
> +#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_n_RELAY_DATAx	GUC_HXG_REQUEST_MSG_n_DATAn
> +#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_NUM_RELAY_DATA	GUC_RELAY_MSG_MAX_LEN
> +
> +/**
> + * DOC: GUC2VF_RELAY_FROM_PF
> + *
> + * This message is used by the GuC firmware to deliver `Relay Message`_ from the
> + * Physical Function (PF) driver to this Virtual Function (VF) driver.
> + * See `GuC Relay Communication`_ for details.
> + *
> + * This message is always sent over CTB.
> + *
> + *  +---+-------+--------------------------------------------------------------+
> + *  |   | Bits  | Description                                                  |
> + *  +===+=======+==============================================================+
> + *  | 0 |    31 | ORIGIN = GUC_HXG_ORIGIN_GUC_                                 |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   | 30:28 | TYPE = GUC_HXG_TYPE_EVENT_                                   |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   | 27:16 | MBZ                                                          |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   |  15:0 | ACTION = _`XE_GUC_ACTION_GUC2VF_RELAY_FROM_PF` = 0x5102      |
> + *  +---+-------+--------------------------------------------------------------+
> + *  | 1 |  31:0 | **RELAY_ID** - VF/PF message ID                              |
> + *  +---+-------+-----------------+--------------------------------------------+
> + *  | 2 |  31:0 | **RELAY_DATA1** |                                            |
> + *  +---+-------+-----------------+                                            |
> + *  |...|       |                 |       [Embedded `Relay Message`_]          |
> + *  +---+-------+-----------------+                                            |
> + *  | n |  31:0 | **RELAY_DATAx** |                                            |
> + *  +---+-------+-----------------+--------------------------------------------+
> + */
> +#define XE_GUC_ACTION_GUC2VF_RELAY_FROM_PF		0x5102
> +
> +#define GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN		(GUC_HXG_EVENT_MSG_MIN_LEN + 1u)
> +#define GUC2VF_RELAY_FROM_PF_EVENT_MSG_MAX_LEN \
> +	(GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN + GUC_RELAY_MSG_MAX_LEN)
> +#define GUC2VF_RELAY_FROM_PF_EVENT_MSG_0_MBZ		GUC_HXG_EVENT_MSG_0_DATA0
> +#define GUC2VF_RELAY_FROM_PF_EVENT_MSG_1_RELAY_ID	GUC_HXG_EVENT_MSG_n_DATAn
> +#define GUC2VF_RELAY_FROM_PF_EVENT_MSG_n_RELAY_DATAx	GUC_HXG_EVENT_MSG_n_DATAn
> +#define GUC2VF_RELAY_FROM_PF_EVENT_MSG_NUM_RELAY_DATA	GUC_RELAY_MSG_MAX_LEN
> +
> +/**
> + * DOC: VF2GUC_RELAY_TO_PF
> + *
> + * This message is used by the Virtual Function (VF) drivers to communicate with
> + * the Physical Function (PF) driver and send `Relay Message`_ to the PF driver.
> + * See `GuC Relay Communication`_ for details.
> + *
> + * This message must be sent over CTB.
> + *
> + *  +---+-------+--------------------------------------------------------------+
> + *  |   | Bits  | Description                                                  |
> + *  +===+=======+==============================================================+
> + *  | 0 |    31 | ORIGIN = GUC_HXG_ORIGIN_HOST_                                |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   | 30:28 | TYPE = GUC_HXG_TYPE_REQUEST_ or GUC_HXG_TYPE_FAST_REQUEST_   |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   | 27:16 | MBZ                                                          |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   |  15:0 | ACTION = _`XE_GUC_ACTION_VF2GUC_RELAY_TO_PF` = 0x5103        |
> + *  +---+-------+--------------------------------------------------------------+
> + *  | 1 |  31:0 | **RELAY_ID** - VF/PF message ID                              |
> + *  +---+-------+-----------------+--------------------------------------------+
> + *  | 2 |  31:0 | **RELAY_DATA1** |                                            |
> + *  +---+-------+-----------------+                                            |
> + *  |...|       |                 |       [Embedded `Relay Message`_]          |
> + *  +---+-------+-----------------+                                            |
> + *  | n |  31:0 | **RELAY_DATAx** |                                            |
> + *  +---+-------+-----------------+--------------------------------------------+
> + */
> +#define XE_GUC_ACTION_VF2GUC_RELAY_TO_PF		0x5103
> +
> +#define VF2GUC_RELAY_TO_PF_REQUEST_MSG_MIN_LEN		(GUC_HXG_REQUEST_MSG_MIN_LEN + 1u)
> +#define VF2GUC_RELAY_TO_PF_REQUEST_MSG_MAX_LEN \
> +	(VF2GUC_RELAY_TO_PF_REQUEST_MSG_MIN_LEN + GUC_RELAY_MSG_MAX_LEN)
> +#define VF2GUC_RELAY_TO_PF_REQUEST_MSG_0_MBZ		GUC_HXG_REQUEST_MSG_0_DATA0
> +#define VF2GUC_RELAY_TO_PF_REQUEST_MSG_1_RELAY_ID	GUC_HXG_REQUEST_MSG_n_DATAn
> +#define VF2GUC_RELAY_TO_PF_REQUEST_MSG_n_RELAY_DATAx	GUC_HXG_REQUEST_MSG_n_DATAn
> +#define VF2GUC_RELAY_TO_PF_REQUEST_MSG_NUM_RELAY_DATA	GUC_RELAY_MSG_MAX_LEN
> +
> +#endif
> diff --git a/drivers/gpu/drm/xe/abi/guc_relay_actions_abi.h b/drivers/gpu/drm/xe/abi/guc_relay_actions_abi.h
> new file mode 100644
> index 000000000000..747e428de421
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/abi/guc_relay_actions_abi.h
> @@ -0,0 +1,79 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2023 Intel Corporation
> + */
> +
> +#ifndef _ABI_GUC_RELAY_ACTIONS_ABI_H_
> +#define _ABI_GUC_RELAY_ACTIONS_ABI_H_
> +
> +/**
> + * DOC: GuC Relay Debug Actions
> + *
> + * This range of action codes is reserved for debugging purposes only and should
> + * be used only on debug builds. These actions may not be supported by the
> + * production drivers. Their definitions could be changed in the future.
> + *
> + *  _`GUC_RELAY_ACTION_DEBUG_ONLY_START` = 0xDEB0
> + *  _`GUC_RELAY_ACTION_DEBUG_ONLY_END` = 0xDEFF
> + */
> +
> +#define GUC_RELAY_ACTION_DEBUG_ONLY_START	0xDEB0
> +#define GUC_RELAY_ACTION_DEBUG_ONLY_END		0xDEFF
> +
> +/**
> + * DOC: VFXPF_TESTLOOP
> + *
> + * This `Relay Message`_ is used to selftest the `GuC Relay Communication`_.
> + *
> + * The following opcodes are defined:
> + * VFXPF_TESTLOOP_OPCODE_NOP_ will return no data.
> + * VFXPF_TESTLOOP_OPCODE_BUSY_ will reply with BUSY response first.
> + * VFXPF_TESTLOOP_OPCODE_RETRY_ will reply with RETRY response instead.
> + * VFXPF_TESTLOOP_OPCODE_ECHO_ will return same data as received.
> + * VFXPF_TESTLOOP_OPCODE_FAIL_ will always fail with error.
> + *
> + *  +---+-------+--------------------------------------------------------------+
> + *  |   | Bits  | Description                                                  |
> + *  +===+=======+==============================================================+
> + *  | 0 |    31 | ORIGIN = GUC_HXG_ORIGIN_HOST_                                |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   | 30:28 | TYPE = GUC_HXG_TYPE_REQUEST_ or GUC_HXG_TYPE_FAST_REQUEST_   |
> + *  |   |       | or GUC_HXG_TYPE_EVENT_                                       |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   | 27:16 | **OPCODE**                                                   |
> + *  |   |       |    - _`VFXPF_TESTLOOP_OPCODE_NOP` = 0x0                      |
> + *  |   |       |    - _`VFXPF_TESTLOOP_OPCODE_BUSY` = 0xB                     |
> + *  |   |       |    - _`VFXPF_TESTLOOP_OPCODE_RETRY` = 0xD                    |
> + *  |   |       |    - _`VFXPF_TESTLOOP_OPCODE_ECHO` = 0xE                     |
> + *  |   |       |    - _`VFXPF_TESTLOOP_OPCODE_FAIL` = 0xF                     |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   |  15:0 | ACTION = _`IOV_ACTION_SELFTEST_RELAY`                        |
> + *  +---+-------+--------------------------------------------------------------+
> + *  | 1 |  31:0 | **DATA1** = optional, depends on **OPCODE**:                 |
> + *  |   |       | for VFXPF_TESTLOOP_OPCODE_BUSY_: time in ms for reply        |
> + *  |   |       | for VFXPF_TESTLOOP_OPCODE_FAIL_: expected error              |
> + *  |   |       | for VFXPF_TESTLOOP_OPCODE_ECHO_: payload                     |
> + *  +---+-------+--------------------------------------------------------------+
> + *  |...|  31:0 | **DATAn** = only for **OPCODE** VFXPF_TESTLOOP_OPCODE_ECHO_  |
> + *  +---+-------+--------------------------------------------------------------+
> + *
> + *  +---+-------+--------------------------------------------------------------+
> + *  |   | Bits  | Description                                                  |
> + *  +===+=======+==============================================================+
> + *  | 0 |    31 | ORIGIN = GUC_HXG_ORIGIN_HOST_                                |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   | 30:28 | TYPE = GUC_HXG_TYPE_RESPONSE_SUCCESS_                        |
> + *  |   +-------+--------------------------------------------------------------+
> + *  |   |  27:0 | DATA0 = MBZ                                                  |
> + *  +---+-------+--------------------------------------------------------------+
> + *  |...|  31:0 | DATAn = only for **OPCODE** VFXPF_TESTLOOP_OPCODE_ECHO_      |
> + *  +---+-------+--------------------------------------------------------------+
> + */
> +#define GUC_RELAY_ACTION_VFXPF_TESTLOOP		(GUC_RELAY_ACTION_DEBUG_ONLY_START + 1)
> +#define   VFXPF_TESTLOOP_OPCODE_NOP		0x0
> +#define   VFXPF_TESTLOOP_OPCODE_BUSY		0xB
> +#define   VFXPF_TESTLOOP_OPCODE_RETRY		0xD
> +#define   VFXPF_TESTLOOP_OPCODE_ECHO		0xE
> +#define   VFXPF_TESTLOOP_OPCODE_FAIL		0xF
> +
> +#endif
> diff --git a/drivers/gpu/drm/xe/abi/guc_relay_communication_abi.h b/drivers/gpu/drm/xe/abi/guc_relay_communication_abi.h
> new file mode 100644
> index 000000000000..f92625f04796
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/abi/guc_relay_communication_abi.h
> @@ -0,0 +1,118 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2023 Intel Corporation
> + */
> +
> +#ifndef _ABI_GUC_RELAY_COMMUNICATION_ABI_H
> +#define _ABI_GUC_RELAY_COMMUNICATION_ABI_H
> +
> +#include <linux/build_bug.h>
> +
> +#include "guc_actions_sriov_abi.h"
> +#include "guc_communication_ctb_abi.h"
> +#include "guc_messages_abi.h"
> +
> +/**
> + * DOC: GuC Relay Communication
> + *
> + * The communication between Virtual Function (VF) drivers and Physical Function
> + * (PF) drivers is based on the GuC firmware acting as a proxy (relay) agent.
> + *
> + * To communicate with the PF driver, VF's drivers use `VF2GUC_RELAY_TO_PF`_
> + * action that takes the `Relay Message`_ as opaque payload and requires the
> + * relay message identifier (RID) as additional parameter.
> + *
> + * This identifier is used by the drivers to match related messages.
> + *
> + * The GuC forwards this `Relay Message`_ and its identifier to the PF driver
> + * in `GUC2PF_RELAY_FROM_VF`_ action. This event message additionally contains
> + * the identifier of the origin VF (VFID).
> + *
> + * Likewise, to communicate with the VF drivers, PF driver use
> + * `VF2GUC_RELAY_TO_PF`_ action that in addition to the `Relay Message`_
> + * and the relay message identifier (RID) also takes the target VF identifier.
> + *
> + * The GuC uses this target VFID from the message to select where to send the
> + * `GUC2VF_RELAY_FROM_PF`_ with the embedded `Relay Message`_ with response::
> + *
> + *      VF                             GuC                              PF
> + *      |                               |                               |
> + *     [ ] VF2GUC_RELAY_TO_PF           |                               |
> + *     [ ]---------------------------> [ ]                              |
> + *     [ ] { rid, msg }                [ ]                              |
> + *     [ ]                             [ ] GUC2PF_RELAY_FROM_VF         |
> + *     [ ]                             [ ]---------------------------> [ ]
> + *     [ ]                              |  { VFID, rid, msg }          [ ]
> + *     [ ]                              |                              [ ]
> + *     [ ]                              |           PF2GUC_RELAY_TO_VF [ ]
> + *     [ ]                             [ ] <---------------------------[ ]
> + *     [ ]                             [ ]        { VFID, rid, reply }  |
> + *     [ ]        GUC2VF_RELAY_FROM_PF [ ]                              |
> + *     [ ] <---------------------------[ ]                              |
> + *      |               { rid, reply }  |                               |
> + *      |                               |                               |
> + *
> + * It is also possible that PF driver will initiate communication with the
> + * selected VF driver. The same GuC action messages will be used::
> + *
> + *      VF                             GuC                              PF
> + *      |                               |                               |
> + *      |                               |           PF2GUC_RELAY_TO_VF [ ]
> + *      |                              [ ] <---------------------------[ ]
> + *      |                              [ ]          { VFID, rid, msg } [ ]
> + *      |         GUC2VF_RELAY_FROM_PF [ ]                             [ ]
> + *     [ ] <---------------------------[ ]                             [ ]
> + *     [ ]                { rid, msg }  |                              [ ]
> + *     [ ]                              |                              [ ]
> + *     [ ] VF2GUC_RELAY_TO_PF           |                              [ ]
> + *     [ ]---------------------------> [ ]                             [ ]
> + *      |  { rid, reply }              [ ]                             [ ]
> + *      |                              [ ] GUC2PF_RELAY_FROM_VF        [ ]
> + *      |                              [ ]---------------------------> [ ]
> + *      |                               | { VFID, rid, reply }          |
> + *      |                               |                               |
> + */
> +
> +/**
> + * DOC: Relay Message
> + *
> + * The `Relay Message`_ is used by Physical Function (PF) driver and Virtual
> + * Function (VF) drivers to communicate using `GuC Relay Communication`_.
> + *
> + * Format of the `Relay Message`_ follows format of the generic `HXG Message`_.
> + *
> + *  +--------------------------------------------------------------------------+
> + *  |  `Relay Message`_                                                        |
> + *  +==========================================================================+
> + *  |  `HXG Message`_                                                          |
> + *  +--------------------------------------------------------------------------+
> + *
> + * Maximum length of the `Relay Message`_ is limited by the maximum length of
> + * the `CTB HXG Message`_ and format of the `GUC2PF_RELAY_FROM_VF`_ message.
> + */
> +
> +#define GUC_RELAY_MSG_MIN_LEN GUC_HXG_MSG_MIN_LEN
> +#define GUC_RELAY_MSG_MAX_LEN \
> +	(GUC_CTB_MAX_DWORDS - GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN)
> +
> +static_assert(PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN >
> +	      VF2GUC_RELAY_TO_PF_REQUEST_MSG_MIN_LEN);
> +
> +/**
> + * DOC: Relay Error Codes
> + *
> + * The `GuC Relay Communication`_ can be used to pass `Relay Message`_ between
> + * drivers that run on different Operating Systems. To help in troubleshooting,
> + * `GuC Relay Communication`_ uses error codes that mostly match errno values.
> + */
> +
> +#define GUC_RELAY_ERROR_UNDISCLOSED			0
> +#define GUC_RELAY_ERROR_OPERATION_NOT_PERMITTED		1	/* EPERM */
> +#define GUC_RELAY_ERROR_PERMISSION_DENIED		13	/* EACCES */
> +#define GUC_RELAY_ERROR_INVALID_ARGUMENT		22	/* EINVAL */
> +#define GUC_RELAY_ERROR_INVALID_REQUEST_CODE		56	/* EBADRQC */
> +#define GUC_RELAY_ERROR_NO_DATA_AVAILABLE		61	/* ENODATA */
> +#define GUC_RELAY_ERROR_PROTOCOL_ERROR			71	/* EPROTO */
> +#define GUC_RELAY_ERROR_MESSAGE_SIZE			90	/* EMSGSIZE */
> +
> +#endif
> -- 
> 2.25.1
> 

-- 

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

* Re: [PATCH 07/10] drm/xe/guc: Introduce Relay Communication for SR-IOV
  2023-12-27 23:58 ` [PATCH 07/10] drm/xe/guc: Introduce Relay Communication for SR-IOV Michal Wajdeczko
@ 2023-12-29 21:14   ` Piotr Piórkowski
  2023-12-29 22:55     ` Michal Wajdeczko
  0 siblings, 1 reply; 30+ messages in thread
From: Piotr Piórkowski @ 2023-12-29 21:14 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on czw [2023-gru-28 00:58:35 +0100]:
> There are scenarios where SR-IOV Virtual Function (VF) driver will
> need to get additional data that is not available over VF MMIO BAR
> nor could be queried from the GuC firmware and must be obtained
> from the Physical Function (PF) driver.
> 
> To allow such communication between VF and PF drivers, GuC supports
> set of H2G and G2H actions which allows relaying embedded messages,
> that are otherwise opaque for the GuC.
> 
> To allow use of this communication mechanism, provide functions for
> sending requests and handling replies and placeholder where we will
> put handlers for incoming requests.
> 
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
> ---
>  drivers/gpu/drm/xe/Makefile             |   1 +
>  drivers/gpu/drm/xe/xe_guc.c             |   5 +
>  drivers/gpu/drm/xe/xe_guc_relay.c       | 918 ++++++++++++++++++++++++
>  drivers/gpu/drm/xe/xe_guc_relay.h       |  32 +
>  drivers/gpu/drm/xe/xe_guc_relay_types.h |  36 +
>  drivers/gpu/drm/xe/xe_guc_types.h       |   4 +
>  6 files changed, 996 insertions(+)
>  create mode 100644 drivers/gpu/drm/xe/xe_guc_relay.c
>  create mode 100644 drivers/gpu/drm/xe/xe_guc_relay.h
>  create mode 100644 drivers/gpu/drm/xe/xe_guc_relay_types.h
> 
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> index df8601d6a59f..6952da8979ea 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -148,6 +148,7 @@ xe-$(CONFIG_HWMON) += xe_hwmon.o
>  
>  # graphics virtualization (SR-IOV) support
>  xe-y += \
> +	xe_guc_relay.o \
>  	xe_memirq.o \
>  	xe_sriov.o
>  
> diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
> index 811e8b201270..311a0364bff1 100644
> --- a/drivers/gpu/drm/xe/xe_guc.c
> +++ b/drivers/gpu/drm/xe/xe_guc.c
> @@ -21,6 +21,7 @@
>  #include "xe_guc_hwconfig.h"
>  #include "xe_guc_log.h"
>  #include "xe_guc_pc.h"
> +#include "xe_guc_relay.h"
>  #include "xe_guc_submit.h"
>  #include "xe_memirq.h"
>  #include "xe_mmio.h"
> @@ -263,6 +264,10 @@ int xe_guc_init(struct xe_guc *guc)
>  	if (ret)
>  		goto out;
>  
> +	ret = xe_guc_relay_init(&guc->relay);
> +	if (ret)
> +		goto out;
> +
>  	ret = xe_guc_pc_init(&guc->pc);
>  	if (ret)
>  		goto out;
> diff --git a/drivers/gpu/drm/xe/xe_guc_relay.c b/drivers/gpu/drm/xe/xe_guc_relay.c
> new file mode 100644
> index 000000000000..528a18215389
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_guc_relay.c
> @@ -0,0 +1,918 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2023 Intel Corporation
> + */
> +
> +#include <linux/bitfield.h>
> +#include <linux/delay.h>
> +
> +#include <drm/drm_managed.h>
> +
> +#include "abi/guc_actions_sriov_abi.h"
> +#include "abi/guc_relay_actions_abi.h"
> +#include "abi/guc_relay_communication_abi.h"
> +
> +#include "xe_assert.h"
> +#include "xe_device.h"
> +#include "xe_gt.h"
> +#include "xe_gt_sriov_printk.h"
> +#include "xe_guc.h"
> +#include "xe_guc_ct.h"
> +#include "xe_guc_hxg_helpers.h"
> +#include "xe_guc_relay.h"
> +#include "xe_guc_relay_types.h"
> +#include "xe_sriov.h"
> +
> +/*
> + * How long should we wait for the response?
> + * XXX this value is subject for the profiling.
> + */
> +#define RELAY_TIMEOUT_MSEC	(2500)
> +
> +static void relays_worker_fn(struct work_struct *w);
> +
> +static struct xe_guc *relay_to_guc(struct xe_guc_relay *relay)
> +{
> +	return container_of(relay, struct xe_guc, relay);
> +}
> +
> +static struct xe_guc_ct *relay_to_ct(struct xe_guc_relay *relay)
> +{
> +	return &relay_to_guc(relay)->ct;
> +}
> +
> +static struct xe_gt *relay_to_gt(struct xe_guc_relay *relay)
> +{
> +	return guc_to_gt(relay_to_guc(relay));
> +}
> +
> +static struct xe_device *relay_to_xe(struct xe_guc_relay *relay)
> +{
> +	return gt_to_xe(relay_to_gt(relay));
> +}
> +
> +#define relay_assert(relay, condition)	xe_gt_assert(relay_to_gt(relay), condition)
> +#define relay_notice(relay, msg...)	xe_gt_sriov_notice(relay_to_gt(relay), "relay: " msg)
> +#define relay_debug(relay, msg...)	xe_gt_sriov_dbg_verbose(relay_to_gt(relay), "relay: " msg)
> +
> +static int relay_get_totalvfs(struct xe_guc_relay *relay)
> +{
> +	struct xe_device *xe = relay_to_xe(relay);
> +	struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
> +
> +	return IS_SRIOV_VF(xe) ? 0 : pci_sriov_get_totalvfs(pdev);
> +}
> +
> +static bool relay_is_ready(struct xe_guc_relay *relay)
> +{
> +	return mempool_initialized(&relay->pool);
> +}
> +
> +static u32 relay_get_next_rid(struct xe_guc_relay *relay, u32 target)

Why target here ? It seems not necessary

> + {
> +	u32 rid;
> +
> +	spin_lock(&relay->lock);
> +	rid = ++relay->last_rid;
> +	spin_unlock(&relay->lock);
> +
> +	return rid;
> +}
> +
> +/*
> + * Relation between struct relay_transaction members::


From what I understand, the double colon is meaningful for docs, here it's
probably not needed (unless it was meant to be docs,
but then it's the wrong type of comment)

> + *
> + *                 <-------------------- GUC_CTB_MAX_DWORDS -------------->
> + *                                  <-------- GUC_RELAY_MSG_MAX_LEN --->
> + *                 <--- offset ---> <--- request_len ------->
> + *                +----------------+-------------------------+----------+--+
> + *                |                |                         |          |  |
> + *                +----------------+-------------------------+----------+--+
> + *                ^                ^
> + *               /                /
> + *    request_buf          request
> + *
> + *                 <-------------------- GUC_CTB_MAX_DWORDS -------------->
> + *                                  <-------- GUC_RELAY_MSG_MAX_LEN --->
> + *                 <--- offset ---> <--- response_len --->
> + *                +----------------+----------------------+-------------+--+
> + *                |                |                      |             |  |
> + *                +----------------+----------------------+-------------+--+
> + *                ^                ^
> + *               /                /
> + *   response_buf         response
> + */
> +struct relay_transaction {
> +	/**
> +	 * @incoming: indicates whether this transaction represents an incoming
> +	 *            request from the remote VF/PF or this transaction
> +	 *            represents outgoing request to the remote VF/PF.
> +	 */
> +	bool incoming;
> +
> +	/**
> +	 * @remote: PF/VF identifier of the origin (or target) of the relay
> +	 *          request message.
> +	 */
> +	u32 remote;
> +
> +	/** @rid: identifier of the VF/PF relay message. */
> +	u32 rid;
> +
> +	/**
> +	 * @request: points to the inner VF/PF request message, copied to the
> +	 *           #response_buf starting at #offset.
> +	 */
> +	u32 *request;
> +
> +	/** @request_len: length of the inner VF/PF request message. */
> +	u32 request_len;
> +
> +	/**
> +	 * @response: points to the placeholder buffer where inner VF/PF
> +	 *            response will be located, for outgoing transaction
> +	 *            this could be caller's buffer (if provided) otherwise
> +	 *            it points to the #response_buf starting at #offset.
> +	 */
> +	u32 *response;
> +
> +	/**
> +	 * @response_len: length of the inner VF/PF response message (only
> +	 *                if #status is 0), initially set to the size of the
> +	 *                placeholder buffer where response message will be
> +	 *                copied.
> +	 */
> +	u32 response_len;
> +
> +	/**
> +	 * @offset: offset to the start of the inner VF/PF relay message inside
> +	 *          buffers; this offset is equal the length of the outer GuC
> +	 *          relay header message.
> +	 */
> +	u32 offset;
> +
> +	/**
> +	 * @request_buf: buffer with VF/PF request message including outer
> +	 *               transport message.
> +	 */
> +	u32 request_buf[GUC_CTB_MAX_DWORDS];
> +
> +	/**
> +	 * @response_buf: buffer with VF/PF response message including outer
> +	 *                transport message.
> +	 */
> +	u32 response_buf[GUC_CTB_MAX_DWORDS];
> +
> +	/**
> +	 * @reply: status of the reply, 0 means that data pointed by the
> +	 *         #response is valid.
> +	 */
> +	int reply;
> +
> +	/** @done: completion of the outgoing transaction. */
> +	struct completion done;
> +
> +	/** @link: transaction list link */
> +	struct list_head link;
> +};
> +
> +static u32 prepare_pf2guc(u32 *msg, u32 target, u32 rid)
> +{
> +	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
> +		 FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, XE_GUC_ACTION_PF2GUC_RELAY_TO_VF);
> +	msg[1] = FIELD_PREP(PF2GUC_RELAY_TO_VF_REQUEST_MSG_1_VFID, target);
> +	msg[2] = FIELD_PREP(PF2GUC_RELAY_TO_VF_REQUEST_MSG_2_RELAY_ID, rid);
> +
> +	return PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN;
> +}
> +
> +static u32 prepare_vf2guc(u32 *msg, u32 rid)
> +{
> +	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
> +		 FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, XE_GUC_ACTION_VF2GUC_RELAY_TO_PF);
> +	msg[1] = FIELD_PREP(VF2GUC_RELAY_TO_PF_REQUEST_MSG_1_RELAY_ID, rid);
> +
> +	return VF2GUC_RELAY_TO_PF_REQUEST_MSG_MIN_LEN;
> +}
> +
> +static struct relay_transaction *
> +__relay_get_transaction(struct xe_guc_relay *relay, bool incoming, u32 remote, u32 rid,
> +			const u32 *action, u32 action_len, u32 *resp, u32 resp_size)
> +{
> +	struct relay_transaction *txn;
> +
> +	relay_assert(relay, action_len >= GUC_RELAY_MSG_MIN_LEN);
> +	relay_assert(relay, action_len <= GUC_RELAY_MSG_MAX_LEN);
> +	relay_assert(relay, !(!!resp ^ !!resp_size));
> +	relay_assert(relay, resp_size <= GUC_RELAY_MSG_MAX_LEN);
> +	relay_assert(relay, resp_size == 0 || resp_size >= GUC_RELAY_MSG_MIN_LEN);
> +
> +	if (unlikely(!relay_is_ready(relay)))
> +		return ERR_PTR(-ENODEV);
> +
> +	/*
> +	 * For incoming requests we can't use GFP_KERNEL as those are delivered
> +	 * with CTB lock held which is marked as used in the reclaim path.
> +	 * Btw, that's one of the reason why we use mempool here!
> +	 */
> +	txn = mempool_alloc(&relay->pool, incoming ? GFP_ATOMIC : GFP_KERNEL);
> +	if (!txn)
> +		return ERR_PTR(-ENOMEM);
> +
> +	txn->incoming = incoming;
> +	txn->remote = remote;
> +	txn->rid = rid;
> +	txn->offset = remote ?
> +		prepare_pf2guc(incoming ? txn->response_buf : txn->request_buf, remote, rid) :
> +		prepare_vf2guc(incoming ? txn->response_buf : txn->request_buf, rid);
> +
> +	relay_assert(relay, txn->offset);
> +	relay_assert(relay, txn->offset + GUC_RELAY_MSG_MAX_LEN <= ARRAY_SIZE(txn->request_buf));
> +	relay_assert(relay, txn->offset + GUC_RELAY_MSG_MAX_LEN <= ARRAY_SIZE(txn->response_buf));
> +
> +	txn->request = txn->request_buf + txn->offset;
> +	memcpy(&txn->request_buf[txn->offset], action, sizeof(u32) * action_len);
> +	txn->request_len = action_len;
> +
> +	txn->response = resp ?: txn->response_buf + txn->offset;
> +	txn->response_len = resp_size ?: GUC_RELAY_MSG_MAX_LEN;
> +	txn->reply = -ENOMSG;
> +	INIT_LIST_HEAD(&txn->link);
> +	init_completion(&txn->done);
> +
> +	return txn;
> +}
> +
> +static struct relay_transaction *
> +relay_new_transaction(struct xe_guc_relay *relay, u32 target, const u32 *action, u32 len,
> +		      u32 *resp, u32 resp_size)
> +{
> +	u32 rid = relay_get_next_rid(relay, target);
> +
> +	return __relay_get_transaction(relay, false, target, rid, action, len, resp, resp_size);
> +}
> +
> +static struct relay_transaction *
> +relay_new_incoming_transaction(struct xe_guc_relay *relay, u32 origin, u32 rid,
> +			       const u32 *action, u32 len)
> +{
> +	return __relay_get_transaction(relay, true, origin, rid, action, len, NULL, 0);
> +}
> +
> +static void relay_release_transaction(struct xe_guc_relay *relay, struct relay_transaction *txn)
> +{
> +	relay_assert(relay, list_empty(&txn->link));
> +
> +	txn->offset = 0;
> +	txn->response = NULL;
> +	txn->reply = -ESTALE;
> +	mempool_free(txn, &relay->pool);
> +}
> +
> +static int relay_send_transaction(struct xe_guc_relay *relay, struct relay_transaction *txn)
> +{
> +	u32 len = txn->incoming ? txn->response_len : txn->request_len;
> +	u32 *buf = txn->incoming ? txn->response_buf : txn->request_buf;
> +	u32 *msg = buf + txn->offset;
> +	int ret;
> +
> +	relay_assert(relay, txn->offset);
> +	relay_assert(relay, txn->offset + len <= GUC_CTB_MAX_DWORDS);
> +	relay_assert(relay, len >= GUC_RELAY_MSG_MIN_LEN);
> +	relay_assert(relay, len <= GUC_RELAY_MSG_MAX_LEN);
> +
> +	relay_debug(relay, "sending %s.%u to %u = %*ph\n",
> +		    guc_hxg_type_to_string(FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0])),
> +		    txn->rid, txn->remote, (int)sizeof(u32) * len, msg);
> +
> +	ret = xe_guc_ct_send_block(relay_to_ct(relay), buf, len + txn->offset);
> +
> +	if (unlikely(ret > 0)) {
> +		relay_notice(relay, "Unexpected data=%d from GuC, wrong ABI?\n", ret);
> +		ret = -EPROTO;
> +	}
> +	if (unlikely(ret < 0)) {
> +		relay_notice(relay, "Failed to send %s.%x to GuC (%pe) %*ph ...\n",
> +			     guc_hxg_type_to_string(FIELD_GET(GUC_HXG_MSG_0_TYPE, buf[0])),
> +			     FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, buf[0]),
> +			     ERR_PTR(ret), (int)sizeof(u32) * txn->offset, buf);
> +		relay_notice(relay, "Failed to send %s.%u to %u (%pe) %*ph\n",
> +			     guc_hxg_type_to_string(FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0])),
> +			     txn->rid, txn->remote, ERR_PTR(ret), (int)sizeof(u32) * len, msg);
> +	}
> +
> +	return ret;
> +}
> +
> +static void __fini_relay(struct drm_device *drm, void *arg)
> +{
> +	struct xe_guc_relay *relay = arg;
> +
> +	mempool_exit(&relay->pool);
> +}
> +
> +/**
> + * xe_guc_relay_init - Initialize a &xe_guc_relay
> + * @relay: the &xe_guc_relay to initialize
> + *
> + * Initialize remaining members of &xe_guc_relay that may depend
> + * on the SR-IOV mode.
> + *
> + * Return: 0 on success or a negative error code on failure.
> + */
> +int xe_guc_relay_init(struct xe_guc_relay *relay)
> +{
> +	const int XE_RELAY_MEMPOOL_MIN_NUM = 1;
> +	struct xe_device *xe = relay_to_xe(relay);
> +	int err;
> +
> +	relay_assert(relay, !relay_is_ready(relay));
> +
> +	if (!IS_SRIOV(xe))
> +		return 0;
> +
> +	spin_lock_init(&relay->lock);
> +	INIT_WORK(&relay->worker, relays_worker_fn);
> +	INIT_LIST_HEAD(&relay->pending_relays);
> +	INIT_LIST_HEAD(&relay->incoming_actions);
> +
> +	err = mempool_init_kmalloc_pool(&relay->pool, XE_RELAY_MEMPOOL_MIN_NUM +
> +					relay_get_totalvfs(relay),
> +					sizeof(struct relay_transaction));
> +	if (err)
> +		return err;
> +
> +	relay_debug(relay, "using mempool with %d elements\n", relay->pool.min_nr);
> +
> +	return drmm_add_action_or_reset(&xe->drm, __fini_relay, relay);
> +}
> +
> +static u32 to_relay_error(int err)
> +{
> +	/* XXX: assume that relay errors match errno codes */
> +	return err < 0 ? -err : GUC_RELAY_ERROR_UNDISCLOSED;
> +}
> +
> +static int from_relay_error(u32 error)
> +{
> +	/* XXX: assume that relay errors match errno codes */
> +	return error ? -error : -ENODATA;
> +}
> +
> +static u32 sanitize_relay_error(u32 error)
> +{
> +	/* XXX TBD if generic error codes will be allowed */
> +	if (!IS_ENABLED(CONFIG_DRM_XE_DEBUG))
> +		error = GUC_RELAY_ERROR_UNDISCLOSED;
> +	return error;
> +}
> +
> +static u32 sanitize_relay_error_hint(u32 hint)
> +{
> +	/* XXX TBD if generic error codes will be allowed */
> +	if (!IS_ENABLED(CONFIG_DRM_XE_DEBUG))
> +		hint = 0;
> +	return hint;
> +}
> +
> +static u32 prepare_error_reply(u32 *msg, u32 error, u32 hint)
> +{
> +	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_RESPONSE_FAILURE) |
> +		 FIELD_PREP(GUC_HXG_FAILURE_MSG_0_HINT, hint) |
> +		 FIELD_PREP(GUC_HXG_FAILURE_MSG_0_ERROR, error);
> +
> +	XE_WARN_ON(!FIELD_FIT(GUC_HXG_FAILURE_MSG_0_ERROR, error));
> +	XE_WARN_ON(!FIELD_FIT(GUC_HXG_FAILURE_MSG_0_HINT, hint));
> +
> +	return GUC_HXG_FAILURE_MSG_LEN;
> +}
> +
> +static int relay_send_message_and_wait(struct xe_guc_relay *relay,
> +					struct relay_transaction *txn,
> +					u32 *buf, u32 buf_size)
> +{
> +	unsigned long timeout = msecs_to_jiffies(RELAY_TIMEOUT_MSEC);
> +	u32 *msg = &txn->request_buf[txn->offset];
> +	u32 len = txn->request_len;
> +	u32 type, action, data0;
> +	int ret;
> +	long n;
> +
> +	type = FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]);
> +	action = FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, msg[0]);
> +	data0 = FIELD_GET(GUC_HXG_REQUEST_MSG_0_DATA0, msg[0]);
> +
> +	relay_debug(relay, "%s.%u to %u action %#x:%u\n",
> +		    guc_hxg_type_to_string(type),
> +		    txn->rid, txn->remote, action, data0);
> +
> +	/* list ordering does not need to match RID ordering */
> +	spin_lock(&relay->lock);
> +	list_add_tail(&txn->link, &relay->pending_relays);
> +	spin_unlock(&relay->lock);
> +
> +resend:
> +	ret = relay_send_transaction(relay, txn);
> +	if (unlikely(ret < 0))
> +		goto unlink;
> +
> +wait:
> +	n = wait_for_completion_timeout(&txn->done, timeout);
> +	if (unlikely(n == 0 && txn->reply)) {
> +		ret = -ETIME;
> +		goto unlink;
> +	}
> +
> +	relay_debug(relay, "%u.%u reply %d after %u msec\n",
> +		    txn->remote, txn->rid, txn->reply, jiffies_to_msecs(timeout - n));
> +	if (unlikely(txn->reply)) {
> +		reinit_completion(&txn->done);
> +		if (txn->reply == -EAGAIN)
> +			goto resend;
> +		if (txn->reply == -EBUSY)
> +			goto wait;
> +		if (txn->reply > 0)
> +			ret = from_relay_error(txn->reply);
> +		else
> +			ret = txn->reply;
> +		goto unlink;
> +	}
> +
> +	relay_debug(relay, "%u.%u response %*ph\n", txn->remote, txn->rid,
> +		    (int)sizeof(u32) * txn->response_len, txn->response);
> +	relay_assert(relay, txn->response_len >= GUC_RELAY_MSG_MIN_LEN);
> +	ret = txn->response_len;
> +
> +unlink:
> +	spin_lock(&relay->lock);
> +	list_del_init(&txn->link);
> +	spin_unlock(&relay->lock);
> +
> +	if (unlikely(ret < 0)) {
> +		relay_notice(relay, "Unsuccessful %s.%u %#x:%u to %u (%pe) %*ph\n",
> +			     guc_hxg_type_to_string(type), txn->rid,
> +			     action, data0, txn->remote, ERR_PTR(ret),
> +			     (int)sizeof(u32) * len, msg);
> +	}
> +
> +	return ret;
> +}
> +
> +static int relay_send_to(struct xe_guc_relay *relay, u32 target,
> +			 const u32 *msg, u32 len, u32 *buf, u32 buf_size)
> +{
> +	struct relay_transaction *txn;
> +	int ret;
> +
> +	relay_assert(relay, len >= GUC_RELAY_MSG_MIN_LEN);
> +	relay_assert(relay, len <= GUC_RELAY_MSG_MAX_LEN);
> +	relay_assert(relay, FIELD_GET(GUC_HXG_MSG_0_ORIGIN, msg[0]) == GUC_HXG_ORIGIN_HOST);
> +	relay_assert(relay, guc_hxg_type_is_action(FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0])));
> +
> +	if (unlikely(!relay_is_ready(relay)))
> +		return -ENODEV;
> +
> +	txn = relay_new_transaction(relay, target, msg, len, buf, buf_size);
> +	if (IS_ERR(txn))
> +		return PTR_ERR(txn);
> +
> +	switch (FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0])) {
> +	case GUC_HXG_TYPE_REQUEST:
> +		ret = relay_send_message_and_wait(relay, txn, buf, buf_size);
> +		break;
> +	case GUC_HXG_TYPE_FAST_REQUEST:
> +		relay_assert(relay, !GUC_HXG_TYPE_FAST_REQUEST);
> +		fallthrough;
> +	case GUC_HXG_TYPE_EVENT:
> +		ret = relay_send_transaction(relay, txn);
> +		break;
> +	default:
> +		ret = -EINVAL;
> +		break;
> +	}
> +
> +	relay_release_transaction(relay, txn);
> +	return ret;
> +}
> +
> +/**
> + * xe_guc_relay_send_to_vf - Send a message to the VF.
> + * @relay: the &xe_guc_relay which will send the message
> + * @target: target VF number
> + * @msg: request message to be sent
> + * @len: length of the request message (in dwords, can't be 0)
> + * @buf: placeholder for the response message
> + * @buf_size: size of the response message placeholder (in dwords)
> + *
> + * This function can only be used by the driver running in the SR-IOV PF mode.
> + *
> + * Return: Non-negative response length (in dwords) or
> + *         a negative error code on failure.
> + */
> +int xe_guc_relay_send_to_vf(struct xe_guc_relay *relay, u32 target,
> +			    const u32 *msg, u32 len, u32 *buf, u32 buf_size)
> +{
> +	relay_assert(relay, IS_SRIOV_PF(relay_to_xe(relay)));
> +
> +	return relay_send_to(relay, target, msg, len, buf, buf_size);
> +}
> +
> +/**
> + * xe_guc_relay_send_to_pf - Send a message to the PF.
> + * @relay: the &xe_guc_relay which will send the message
> + * @msg: request message to be sent
> + * @len: length of the message (in dwords, can't be 0)
> + * @buf: placeholder for the response message
> + * @buf_size: size of the response message placeholder (in dwords)
> + *
> + * This function can only be used by driver running in SR-IOV VF mode.
> + *
> + * Return: Non-negative response length (in dwords) or
> + *         a negative error code on failure.
> + */
> +int xe_guc_relay_send_to_pf(struct xe_guc_relay *relay,
> +			    const u32 *msg, u32 len, u32 *buf, u32 buf_size)

What's the reason you didn't give an assert for VF here ?

> +{
> +	return relay_send_to(relay, PFID, msg, len, buf, buf_size);
> +}
> +
> +static int relay_handle_reply(struct xe_guc_relay *relay, u32 origin,
> +			      u32 rid, int reply, const u32 *msg, u32 len)
> +{
> +	struct relay_transaction *pending;
> +	int err = -ESRCH;
> +
> +	spin_lock(&relay->lock);
> +	list_for_each_entry(pending, &relay->pending_relays, link) {
> +		if (pending->remote != origin || pending->rid != rid) {
> +			relay_debug(relay, "%u.%u still awaits response\n",
> +				    pending->remote, pending->rid);
> +			continue;
> +		}
> +		err = 0; /* found! */
> +		if (reply == 0) {
> +			if (len > pending->response_len) {
> +				reply = -ENOBUFS;
> +				err = -ENOBUFS;
> +			} else {
> +				memcpy(pending->response, msg, 4 * len);
> +				pending->response_len = len;
> +			}
> +		}
> +		pending->reply = reply;
> +		complete_all(&pending->done);
> +		break;
> +	}
> +	spin_unlock(&relay->lock);
> +
> +	return err;
> +}
> +
> +static int relay_handle_failure(struct xe_guc_relay *relay, u32 origin,
> +				u32 rid, const u32 *msg, u32 len)
> +{
> +	int error = FIELD_GET(GUC_HXG_FAILURE_MSG_0_ERROR, msg[0]);
> +	u32 hint __maybe_unused = FIELD_GET(GUC_HXG_FAILURE_MSG_0_HINT, msg[0]);
> +
> +	relay_assert(relay, len);
> +	relay_debug(relay, "%u.%u error %#x (%pe) hint %u debug %*ph\n",
> +		    origin, rid, error, ERR_PTR(-error), hint, 4 * (len - 1), msg + 1);
> +
> +	return relay_handle_reply(relay, origin, rid, error ?: -EREMOTEIO, NULL, 0);
> +}
> +
> +static int relay_testloop_action_handler(struct xe_guc_relay *relay, u32 origin,
> +					 const u32 *msg, u32 len, u32 *response, u32 size)
> +{
> +	static ktime_t last_reply = 0;
> +	u32 type = FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]);
> +	u32 action = FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, msg[0]);
> +	u32 opode = FIELD_GET(GUC_HXG_REQUEST_MSG_0_DATA0, msg[0]);

I guess you meant the name of the variable "opcode"

> +	ktime_t now = ktime_get();
> +	bool busy;
> +	int ret;
> +
> +	relay_assert(relay, guc_hxg_type_is_action(type));
> +	relay_assert(relay, action == GUC_RELAY_ACTION_VFXPF_TESTLOOP);
> +
> +	if (!IS_ENABLED(CONFIG_DRM_XE_DEBUG_SRIOV))
> +		return -ECONNREFUSED;
> +
> +	if (!last_reply)
> +		last_reply = now;
> +	busy = ktime_before(now, ktime_add_ms(last_reply, 2 * RELAY_TIMEOUT_MSEC));
> +	if (!busy)
> +		last_reply = now;
> +
> +	switch (opode) {
> +	case VFXPF_TESTLOOP_OPCODE_NOP:
> +		if (type == GUC_HXG_TYPE_EVENT)
> +			return 0;
> +		return guc_hxg_msg_encode_success(response, 0);
> +	case VFXPF_TESTLOOP_OPCODE_BUSY:
> +		if (type == GUC_HXG_TYPE_EVENT)
> +			return -EPROTO;
> +		msleep(RELAY_TIMEOUT_MSEC / 8);
> +		if (busy)
> +			return -EINPROGRESS;
> +		return guc_hxg_msg_encode_success(response, 0);
> +	case VFXPF_TESTLOOP_OPCODE_RETRY:
> +		if (type == GUC_HXG_TYPE_EVENT)
> +			return -EPROTO;
> +		msleep(RELAY_TIMEOUT_MSEC / 8);
> +		if (busy)
> +			return guc_hxg_msg_encode_retry(response, 0);
> +		return guc_hxg_msg_encode_success(response, 0);
> +	case VFXPF_TESTLOOP_OPCODE_ECHO:
> +		if (type == GUC_HXG_TYPE_EVENT)
> +			return -EPROTO;
> +		if (size < len)
> +			return -ENOBUFS;
> +		ret = guc_hxg_msg_encode_success(response, len);
> +		memcpy(response + ret, msg + ret, (len - ret) * sizeof(u32));
> +		return len;
> +	case VFXPF_TESTLOOP_OPCODE_FAIL:
> +		return -EHWPOISON;
> +	default:
> +		break;
> +	}
> +
> +	relay_notice(relay, "Unexpected action %#x opcode %#x\n", action, opode);
> +	return -EBADRQC;
> +}
> +
> +static int relay_action_handler(struct xe_guc_relay *relay, u32 origin,
> +				const u32 *msg, u32 len, u32 *response, u32 size)
> +{
> +	u32 type;
> +	int ret;
> +
> +	relay_assert(relay, len >= GUC_HXG_MSG_MIN_LEN);
> +
> +	if (FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, msg[0]) == GUC_RELAY_ACTION_VFXPF_TESTLOOP)
> +		return relay_testloop_action_handler(relay, origin, msg, len, response, size);
> +

From what I understand here we will be adding more actions.
Wouldn't it be better to make a switch statement here for the future?


> +	type = FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]);
> +
> +	/* XXX: PF services will be added later */
> +	ret = -EOPNOTSUPP;
> +
> +	if (type == GUC_HXG_TYPE_EVENT)
> +		relay_assert(relay, ret <= 0);
> +
> +	return ret;
> +}
> +
> +static struct relay_transaction *relay_dequeue_transaction(struct xe_guc_relay *relay)
> +{
> +	struct relay_transaction *txn;
> +
> +	spin_lock(&relay->lock);
> +	txn = list_first_entry_or_null(&relay->incoming_actions, struct relay_transaction, link);
> +	if (txn)
> +		list_del_init(&txn->link);
> +	spin_unlock(&relay->lock);
> +
> +	return txn;
> +}
> +
> +static void relay_process_incoming_action(struct xe_guc_relay *relay)
> +{
> +	struct relay_transaction *txn;
> +	bool again = false;
> +	u32 type;
> +	int ret;
> +
> +	txn = relay_dequeue_transaction(relay);
> +	if (!txn)
> +		return;
> +
> +	type = FIELD_GET(GUC_HXG_MSG_0_TYPE, txn->request_buf[txn->offset]);
> +
> +	ret = relay_action_handler(relay, txn->remote,
> +				   txn->request_buf + txn->offset, txn->request_len,
> +				   txn->response_buf + txn->offset,
> +				   ARRAY_SIZE(txn->response_buf) - txn->offset);
> +
> +	if (ret == -EINPROGRESS) {
> +		again = true;
> +		ret = guc_hxg_msg_encode_busy(txn->response_buf + txn->offset, 0);
> +	}
> +
> +	if (ret > 0) {
> +		txn->response_len = ret;
> +		ret = relay_send_transaction(relay, txn);
> +	}
> +
> +	if (ret < 0) {
> +		u32 error = to_relay_error(ret);
> +
> +		relay_notice(relay, "Failed to handle %s.%u from %u (%pe) %*ph\n",
> +			     guc_hxg_type_to_string(type), txn->rid, txn->remote,
> +			     ERR_PTR(ret), 4 * txn->request_len, txn->request_buf + txn->offset);
> +
> +
> +		txn->response_len = prepare_error_reply(txn->response_buf + txn->offset,
> +							txn->remote ?
> +							sanitize_relay_error(error) : error,
> +							txn->remote ?
> +							sanitize_relay_error_hint(-ret) : -ret);
> +		ret = relay_send_transaction(relay, txn);
> +		again = false;
> +	}
> +
> +	if (again) {
> +		spin_lock(&relay->lock);
> +		list_add(&txn->link, &relay->incoming_actions);
> +		spin_unlock(&relay->lock);
> +		return;
> +	}
> +
> +	if (unlikely(ret < 0))
> +		relay_notice(relay, "Failed to process action.%u (%pe) %*ph\n",
> +			     txn->rid, ERR_PTR(ret), 4 * txn->request_len,
> +			     txn->request_buf + txn->offset);
> +
> +	relay_release_transaction(relay, txn);
> +}
> +
> +static bool relay_needs_worker(struct xe_guc_relay *relay)
> +{
> +	return !list_empty(&relay->incoming_actions);
> +}
> +
> +static void relay_kick_worker(struct xe_guc_relay *relay)
> +{
> +	queue_work(relay_to_xe(relay)->sriov.wq, &relay->worker);
> +}
> +
> +static void relays_worker_fn(struct work_struct *w)
> +{
> +	struct xe_guc_relay *relay = container_of(w, struct xe_guc_relay, worker);
> +
> +	relay_process_incoming_action(relay);
> +
> +	if (relay_needs_worker(relay))
> +		relay_kick_worker(relay);
> +}
> +
> +static int relay_queue_action_msg(struct xe_guc_relay *relay, u32 origin, u32 rid,
> +				  const u32 *msg, u32 len)
> +{
> +	struct relay_transaction *txn;
> +
> +	txn = relay_new_incoming_transaction(relay, origin, rid, msg, len);
> +	if (IS_ERR(txn))
> +		return PTR_ERR(txn);
> +
> +	spin_lock(&relay->lock);
> +	list_add_tail(&txn->link, &relay->incoming_actions);
> +	spin_unlock(&relay->lock);
> +
> +	relay_kick_worker(relay);
> +	return 0;
> +}
> +
> +static int relay_process_msg(struct xe_guc_relay *relay, u32 origin, u32 rid,
> +			     const u32 *msg, u32 len)
> +{
> +	u32 type;
> +	int err;
> +
> +	if (unlikely(len < GUC_HXG_MSG_MIN_LEN))
> +		return -EPROTO;
> +
> +	if (FIELD_GET(GUC_HXG_MSG_0_ORIGIN, msg[0]) != GUC_HXG_ORIGIN_HOST)
> +		return -EPROTO;
> +
> +	type = FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]);
> +	relay_debug(relay, "received %s.%u from %u = %*ph\n",
> +		    guc_hxg_type_to_string(type), rid, origin, 4 * len, msg);
> +
> +	switch (type) {
> +	case GUC_HXG_TYPE_REQUEST:
> +	case GUC_HXG_TYPE_FAST_REQUEST:
> +	case GUC_HXG_TYPE_EVENT:
> +		err = relay_queue_action_msg(relay, origin, rid, msg, len);
> +		break;
> +	case GUC_HXG_TYPE_RESPONSE_SUCCESS:
> +		err = relay_handle_reply(relay, origin, rid, 0, msg, len);
> +		break;
> +	case GUC_HXG_TYPE_NO_RESPONSE_BUSY:
> +		err = relay_handle_reply(relay, origin, rid, -EBUSY, NULL, 0);
> +		break;
> +	case GUC_HXG_TYPE_NO_RESPONSE_RETRY:
> +		err = relay_handle_reply(relay, origin, rid, -EAGAIN, NULL, 0);
> +		break;
> +	case GUC_HXG_TYPE_RESPONSE_FAILURE:
> +		err = relay_handle_failure(relay, origin, rid, msg, len);
> +		break;
> +	default:
> +		err = -EBADRQC;
> +	}
> +
> +	if (unlikely(err))
> +		relay_notice(relay, "Failed to process %s.%u from %u (%pe) %*ph\n",
> +			     guc_hxg_type_to_string(type), rid, origin,
> +			     ERR_PTR(err), 4 * len, msg);
> +
> +	return err;
> +}
> +
> +/**
> + * xe_guc_relay_process_guc2vf - Handle relay notification message from the GuC.
> + * @relay: the &xe_guc_relay which will handle the message
> + * @msg: message to be handled
> + * @len: length of the message (in dwords)
> + *
> + * This function will handle relay messages received from the GuC.
> + *
> + * This function is can only be used if driver is running in SR-IOV mode.

I understand that this function is dedicated to VF. From this documentation
it seems that the function can also be used by PF.
This was your idea or is the word VFs missing here ?
I would also suggest using an appropriate assert in the code.

> + *
> + * Return: 0 on success or a negative error code on failure.
> + */
> +int xe_guc_relay_process_guc2vf(struct xe_guc_relay *relay, const u32 *msg, u32 len)
> +{
> +	u32 rid;
> +
> +	relay_assert(relay, len >= GUC_HXG_MSG_MIN_LEN);
> +	relay_assert(relay, FIELD_GET(GUC_HXG_MSG_0_ORIGIN, msg[0]) == GUC_HXG_ORIGIN_GUC);
> +	relay_assert(relay, FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]) == GUC_HXG_TYPE_EVENT);
> +	relay_assert(relay, FIELD_GET(GUC_HXG_EVENT_MSG_0_ACTION, msg[0]) ==
> +		     XE_GUC_ACTION_GUC2VF_RELAY_FROM_PF);
> +
> +	if (unlikely(!relay_is_ready(relay)))
> +		return -ENODEV;
> +
> +	if (unlikely(len < GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN))
> +		return -EPROTO;
> +
> +	if (unlikely(len > GUC2VF_RELAY_FROM_PF_EVENT_MSG_MAX_LEN))
> +		return -EMSGSIZE;
> +
> +	if (unlikely(FIELD_GET(GUC_HXG_EVENT_MSG_0_DATA0, msg[0])))
> +		return -EPFNOSUPPORT;
> +
> +	rid = FIELD_GET(GUC2VF_RELAY_FROM_PF_EVENT_MSG_1_RELAY_ID, msg[1]);
> +
> +	return relay_process_msg(relay, PFID, rid,
> +				 msg + GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN,
> +				 len - GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN);
> +}
> +
> +#ifdef CONFIG_PCI_IOV
> +/**
> + * xe_guc_relay_process_guc2pf - Handle relay notification message from the GuC.
> + * @relay: the &xe_guc_relay which will handle the message
> + * @msg: message to be handled
> + * @len: length of the message (in dwords)
> + *
> + * This function will handle relay messages received from the GuC.
> + *
> + * This function can only be used if driver is running in SR-IOV PF mode.
> + *
> + * Return: 0 on success or a negative error code on failure.
> + */
> +int xe_guc_relay_process_guc2pf(struct xe_guc_relay *relay, const u32 *msg, u32 len)
> +{
> +	struct xe_gt *gt = relay_to_gt(relay);
> +	u32 origin, rid;
> +	int err;
> +
> +	relay_assert(relay, len >= GUC_HXG_EVENT_MSG_MIN_LEN);
> +	relay_assert(relay, FIELD_GET(GUC_HXG_MSG_0_ORIGIN, msg[0]) == GUC_HXG_ORIGIN_GUC);
> +	relay_assert(relay, FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]) == GUC_HXG_TYPE_EVENT);
> +	relay_assert(relay, FIELD_GET(GUC_HXG_EVENT_MSG_0_ACTION, msg[0]) ==
> +		     XE_GUC_ACTION_GUC2PF_RELAY_FROM_VF);
> +
> +	if (unlikely(!relay_is_ready(relay)))
> +		return -ENODEV;
> +
> +	if (unlikely(!xe_device_is_sriov_pf(gt_to_xe(gt))))
> +		return -EPERM;
> +
> +	if (unlikely(len < GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN))
> +		return -EPROTO;
> +
> +	if (unlikely(len > GUC2PF_RELAY_FROM_VF_EVENT_MSG_MAX_LEN))
> +		return -EMSGSIZE;
> +
> +	if (unlikely(FIELD_GET(GUC_HXG_EVENT_MSG_0_DATA0, msg[0])))
> +		return -EPFNOSUPPORT;
> +
> +	origin = FIELD_GET(GUC2PF_RELAY_FROM_VF_EVENT_MSG_1_VFID, msg[1]);
> +	rid = FIELD_GET(GUC2PF_RELAY_FROM_VF_EVENT_MSG_2_RELAY_ID, msg[2]);
> +
> +	if (unlikely(origin > relay_get_totalvfs(relay)))
> +		return -ENOENT;
> +
> +	err = relay_process_msg(relay, origin, rid,
> +				msg + GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN,
> +				len - GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN);

Return can be used already here, the one below is not needed.

> +
> +	return err;
> +}
> +#endif
> diff --git a/drivers/gpu/drm/xe/xe_guc_relay.h b/drivers/gpu/drm/xe/xe_guc_relay.h
> new file mode 100644
> index 000000000000..e6a251be34a1
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_guc_relay.h
> @@ -0,0 +1,32 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2023 Intel Corporation
> + */
> +
> +#ifndef _XE_GUC_RELAY_H_
> +#define _XE_GUC_RELAY_H_
> +
> +#include <linux/types.h>
> +#include <linux/errno.h>
> +
> +struct xe_guc_relay;
> +
> +int xe_guc_relay_init(struct xe_guc_relay *relay);
> +
> +int xe_guc_relay_send_to_vf(struct xe_guc_relay *relay, u32 target,
> +			    const u32 *msg, u32 len, u32 *buf, u32 buf_size);
> +int xe_guc_relay_send_to_pf(struct xe_guc_relay *relay,
> +			    const u32 *msg, u32 len, u32 *buf, u32 buf_size);
> +
> +int xe_guc_relay_process_guc2vf(struct xe_guc_relay *relay, const u32 *msg, u32 len);
> +
> +#ifdef CONFIG_PCI_IOV
> +int xe_guc_relay_process_guc2pf(struct xe_guc_relay *relay, const u32 *msg, u32 len);
> +#else
> +static inline int xe_guc_relay_process_guc2pf(struct xe_guc_relay *relay, const u32 *msg, u32 len)
> +{
> +	return -ENODEV;
> +}
> +#endif
> +
> +#endif
> diff --git a/drivers/gpu/drm/xe/xe_guc_relay_types.h b/drivers/gpu/drm/xe/xe_guc_relay_types.h
> new file mode 100644
> index 000000000000..600e10cd727e
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_guc_relay_types.h
> @@ -0,0 +1,36 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2023 Intel Corporation
> + */
> +
> +#ifndef _XE_GUC_RELAY_TYPES_H_
> +#define _XE_GUC_RELAY_TYPES_H_
> +
> +#include <linux/mempool.h>
> +#include <linux/spinlock.h>
> +#include <linux/workqueue.h>
> +
> +/**
> + * struct xe_guc_relay - Data used by the VF-PF Relay Communication over GuC.
> + */
> +struct xe_guc_relay {
> +	/**@lock: protects all internal data. */
> +	spinlock_t lock;
> +
> +	/** @worker: dispathes incoming action messages. */

typo: dispatches


> +	struct work_struct worker;
> +
> +	/** @pending_relays: list of sent requests that await a response. */
> +	struct list_head pending_relays;
> +
> +	/** @incoming_actions: list of incoming relay action messages to process. */
> +	struct list_head incoming_actions;
> +
> +	/** @pool: pool of the relay message buffers. */
> +	mempool_t pool;
> +
> +	/** @last_rid: last Relay-ID used while sending a message. */
> +	u32 last_rid;
> +};
> +
> +#endif
> diff --git a/drivers/gpu/drm/xe/xe_guc_types.h b/drivers/gpu/drm/xe/xe_guc_types.h
> index 16de203c62a7..dc6059de669c 100644
> --- a/drivers/gpu/drm/xe/xe_guc_types.h
> +++ b/drivers/gpu/drm/xe/xe_guc_types.h
> @@ -15,6 +15,7 @@
>  #include "xe_guc_fwif.h"
>  #include "xe_guc_log_types.h"
>  #include "xe_guc_pc_types.h"
> +#include "xe_guc_relay_types.h"
>  #include "xe_uc_fw_types.h"
>  
>  /**
> @@ -85,6 +86,9 @@ struct xe_guc {
>  		u32 size;
>  	} hwconfig;
>  
> +	/** @relay: GuC Relay Communication used in SR-IOV */
> +	struct xe_guc_relay relay;
> +
>  	/**
>  	 * @notify_reg: Register which is written to notify GuC of H2G messages
>  	 */

With fixes:
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com>

> -- 
> 2.25.1
> 

-- 

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

* Re: [PATCH 08/10] drm/xe/kunit: Allow to replace xe_guc_ct_send_recv() with stub
  2023-12-27 23:58 ` [PATCH 08/10] drm/xe/kunit: Allow to replace xe_guc_ct_send_recv() with stub Michal Wajdeczko
@ 2023-12-29 21:15   ` Piotr Piórkowski
  0 siblings, 0 replies; 30+ messages in thread
From: Piotr Piórkowski @ 2023-12-29 21:15 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on czw [2023-gru-28 00:58:36 +0100]:
> We want to use replacement functions in upcoming kunit tests.
> 
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com>

> ---
>  drivers/gpu/drm/xe/xe_guc_ct.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
> index 4cde93c18a2d..8f208267ffc6 100644
> --- a/drivers/gpu/drm/xe/xe_guc_ct.c
> +++ b/drivers/gpu/drm/xe/xe_guc_ct.c
> @@ -9,6 +9,8 @@
>  #include <linux/circ_buf.h>
>  #include <linux/delay.h>
>  
> +#include <kunit/static_stub.h>
> +
>  #include <drm/drm_managed.h>
>  
>  #include "abi/guc_actions_abi.h"
> @@ -782,6 +784,7 @@ static int guc_ct_send_recv(struct xe_guc_ct *ct, const u32 *action, u32 len,
>  int xe_guc_ct_send_recv(struct xe_guc_ct *ct, const u32 *action, u32 len,
>  			u32 *response_buffer)
>  {
> +	KUNIT_STATIC_STUB_REDIRECT(xe_guc_ct_send_recv, ct, action, len, response_buffer);
>  	return guc_ct_send_recv(ct, action, len, response_buffer, false);
>  }
>  
> -- 
> 2.25.1
> 

-- 

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

* Re: [PATCH 09/10] drm/xe/kunit: Add GuC Relay kunit tests
  2023-12-27 23:58 ` [PATCH 09/10] drm/xe/kunit: Add GuC Relay kunit tests Michal Wajdeczko
@ 2023-12-29 21:15   ` Piotr Piórkowski
  0 siblings, 0 replies; 30+ messages in thread
From: Piotr Piórkowski @ 2023-12-29 21:15 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on czw [2023-gru-28 00:58:37 +0100]:
> Add few tests to make sure that some negative and normal use
> scenarios of the GuC Relay are implemented correctly.
> 
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com>

> ---
>  drivers/gpu/drm/xe/tests/xe_guc_relay_test.c | 522 +++++++++++++++++++
>  drivers/gpu/drm/xe/xe_guc_relay.c            |  17 +-
>  2 files changed, 538 insertions(+), 1 deletion(-)
>  create mode 100644 drivers/gpu/drm/xe/tests/xe_guc_relay_test.c
> 
> diff --git a/drivers/gpu/drm/xe/tests/xe_guc_relay_test.c b/drivers/gpu/drm/xe/tests/xe_guc_relay_test.c
> new file mode 100644
> index 000000000000..13701451b923
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/tests/xe_guc_relay_test.c
> @@ -0,0 +1,522 @@
> +// SPDX-License-Identifier: GPL-2.0 AND MIT
> +/*
> + * Copyright © 2023 Intel Corporation
> + */
> +
> +#include <kunit/static_stub.h>
> +#include <kunit/test.h>
> +#include <kunit/test-bug.h>
> +
> +#include "xe_device.h"
> +#include "xe_kunit_helpers.h"
> +#include "xe_pci_test.h"
> +
> +#define TEST_RID	1234
> +#define TEST_VFID	5
> +#define TEST_LEN	6
> +#define TEST_ACTION	0xa
> +#define TEST_DATA(n)	(0xd0 + (n))
> +
> +static int replacement_relay_get_totalvfs(struct xe_guc_relay *relay)
> +{
> +	return TEST_VFID;
> +}
> +
> +static int relay_test_init(struct kunit *test)
> +{
> +	struct xe_pci_fake_data fake = {
> +		.sriov_mode = XE_SRIOV_MODE_PF,
> +		.platform = XE_TIGERLAKE, /* some random platform */
> +		.subplatform = XE_SUBPLATFORM_NONE,
> +	};
> +	struct xe_guc_relay *relay;
> +	struct xe_device *xe;
> +
> +	test->priv = &fake;
> +	xe_kunit_helper_xe_device_test_init(test);
> +
> +	xe = test->priv;
> +	KUNIT_ASSERT_EQ(test, xe_sriov_init(xe), 0);
> +
> +	relay = &xe_device_get_gt(xe, 0)->uc.guc.relay;
> +	kunit_activate_static_stub(test, relay_get_totalvfs,
> +				   replacement_relay_get_totalvfs);
> +
> +	KUNIT_ASSERT_EQ(test, xe_guc_relay_init(relay), 0);
> +	KUNIT_EXPECT_TRUE(test, relay_is_ready(relay));
> +	relay->last_rid = TEST_RID - 1;
> +
> +	test->priv = relay;
> +	return 0;
> +}
> +
> +static const u32 TEST_MSG[TEST_LEN] = {
> +	FIELD_PREP_CONST(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +	FIELD_PREP_CONST(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_EVENT) |
> +	FIELD_PREP_CONST(GUC_HXG_EVENT_MSG_0_ACTION, TEST_ACTION) |
> +	FIELD_PREP_CONST(GUC_HXG_EVENT_MSG_0_DATA0, TEST_DATA(0)),
> +	TEST_DATA(1), TEST_DATA(2), TEST_DATA(3), TEST_DATA(4),
> +};
> +
> +static int replacement_xe_guc_ct_send_recv_always_fails(struct xe_guc_ct *ct,
> +							const u32 *msg, u32 len,
> +							u32 *response_buffer)
> +{
> +	struct kunit *test = kunit_get_current_test();
> +
> +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ct);
> +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, msg);
> +	KUNIT_ASSERT_GE(test, len, GUC_HXG_MSG_MIN_LEN);
> +
> +	return -ECOMM;
> +}
> +
> +static int replacement_xe_guc_ct_send_recv_expects_pf2guc_relay(struct xe_guc_ct *ct,
> +								const u32 *msg, u32 len,
> +								u32 *response_buffer)
> +{
> +	struct kunit *test = kunit_get_current_test();
> +
> +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ct);
> +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, msg);
> +	KUNIT_ASSERT_GE(test, len, PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN);
> +	KUNIT_ASSERT_EQ(test, len, PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN + TEST_LEN);
> +	KUNIT_EXPECT_EQ(test, GUC_HXG_ORIGIN_HOST, FIELD_GET(GUC_HXG_MSG_0_ORIGIN, msg[0]));
> +	KUNIT_EXPECT_EQ(test, GUC_HXG_TYPE_REQUEST, FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]));
> +	KUNIT_EXPECT_EQ(test, XE_GUC_ACTION_PF2GUC_RELAY_TO_VF,
> +			FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, msg[0]));
> +	KUNIT_EXPECT_EQ(test, TEST_VFID,
> +			FIELD_GET(PF2GUC_RELAY_TO_VF_REQUEST_MSG_1_VFID, msg[1]));
> +	KUNIT_EXPECT_EQ(test, TEST_RID,
> +			FIELD_GET(PF2GUC_RELAY_TO_VF_REQUEST_MSG_2_RELAY_ID, msg[2]));
> +	KUNIT_EXPECT_MEMEQ(test, TEST_MSG, msg + PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN,
> +			   sizeof(u32) * TEST_LEN);
> +	return 0;
> +}
> +
> +static const u32 test_guc2pf[GUC2PF_RELAY_FROM_VF_EVENT_MSG_MAX_LEN] = {
> +	/* transport */
> +	FIELD_PREP_CONST(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_GUC) |
> +	FIELD_PREP_CONST(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_EVENT) |
> +	FIELD_PREP_CONST(GUC_HXG_EVENT_MSG_0_ACTION, XE_GUC_ACTION_GUC2PF_RELAY_FROM_VF),
> +	FIELD_PREP_CONST(GUC2PF_RELAY_FROM_VF_EVENT_MSG_1_VFID, TEST_VFID),
> +	FIELD_PREP_CONST(GUC2PF_RELAY_FROM_VF_EVENT_MSG_2_RELAY_ID, TEST_RID),
> +	/* payload */
> +	FIELD_PREP_CONST(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +	FIELD_PREP_CONST(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_RESPONSE_SUCCESS),
> +};
> +
> +static const u32 test_guc2vf[GUC2VF_RELAY_FROM_PF_EVENT_MSG_MAX_LEN] = {
> +	/* transport */
> +	FIELD_PREP_CONST(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_GUC) |
> +	FIELD_PREP_CONST(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_EVENT) |
> +	FIELD_PREP_CONST(GUC_HXG_EVENT_MSG_0_ACTION, XE_GUC_ACTION_GUC2VF_RELAY_FROM_PF),
> +	FIELD_PREP_CONST(GUC2VF_RELAY_FROM_PF_EVENT_MSG_1_RELAY_ID, TEST_RID),
> +	/* payload */
> +	FIELD_PREP_CONST(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +	FIELD_PREP_CONST(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_RESPONSE_SUCCESS),
> +};
> +
> +static void pf_rejects_guc2pf_too_short(struct kunit *test)
> +{
> +	const u32 len = GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN - 1;
> +	struct xe_guc_relay *relay = test->priv;
> +	const u32 *msg = test_guc2pf;
> +
> +	KUNIT_ASSERT_EQ(test, -EPROTO, xe_guc_relay_process_guc2pf(relay, msg, len));
> +}
> +
> +static void pf_rejects_guc2pf_too_long(struct kunit *test)
> +{
> +	const u32 len = GUC2PF_RELAY_FROM_VF_EVENT_MSG_MAX_LEN + 1;
> +	struct xe_guc_relay *relay = test->priv;
> +	const u32 *msg = test_guc2pf;
> +
> +	KUNIT_ASSERT_EQ(test, -EMSGSIZE, xe_guc_relay_process_guc2pf(relay, msg, len));
> +}
> +
> +static void pf_rejects_guc2pf_no_payload(struct kunit *test)
> +{
> +	const u32 len = GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN;
> +	struct xe_guc_relay *relay = test->priv;
> +	const u32 *msg = test_guc2pf;
> +
> +	KUNIT_ASSERT_EQ(test, -EPROTO, xe_guc_relay_process_guc2pf(relay, msg, len));
> +}
> +
> +static void pf_fails_no_payload(struct kunit *test)
> +{
> +	struct xe_guc_relay *relay = test->priv;
> +	const u32 msg = 0;
> +
> +	KUNIT_ASSERT_EQ(test, -EPROTO, relay_process_msg(relay, TEST_VFID, TEST_RID, &msg, 0));
> +}
> +
> +static void pf_fails_bad_origin(struct kunit *test)
> +{
> +	struct xe_guc_relay *relay = test->priv;
> +	static const u32 msg[] = {
> +		FIELD_PREP_CONST(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_GUC) |
> +		FIELD_PREP_CONST(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_RESPONSE_SUCCESS),
> +	};
> +	u32 len = ARRAY_SIZE(msg);
> +
> +	KUNIT_ASSERT_EQ(test, -EPROTO, relay_process_msg(relay, TEST_VFID, TEST_RID, msg, len));
> +}
> +
> +static void pf_fails_bad_type(struct kunit *test)
> +{
> +	struct xe_guc_relay *relay = test->priv;
> +	const u32 msg[] = {
> +		FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +		FIELD_PREP(GUC_HXG_MSG_0_TYPE, 4), /* only 4 is undefined */
> +	};
> +	u32 len = ARRAY_SIZE(msg);
> +
> +	KUNIT_ASSERT_EQ(test, -EBADRQC, relay_process_msg(relay, TEST_VFID, TEST_RID, msg, len));
> +}
> +
> +static void pf_txn_reports_error(struct kunit *test)
> +{
> +	struct xe_guc_relay *relay = test->priv;
> +	struct relay_transaction *txn;
> +
> +	txn = __relay_get_transaction(relay, false, TEST_VFID, TEST_RID,
> +				      TEST_MSG, TEST_LEN, NULL, 0);
> +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, txn);
> +
> +	kunit_activate_static_stub(test, xe_guc_ct_send_recv,
> +				   replacement_xe_guc_ct_send_recv_always_fails);
> +	KUNIT_EXPECT_EQ(test, -ECOMM, relay_send_transaction(relay, txn));
> +
> +	relay_release_transaction(relay, txn);
> +}
> +
> +static void pf_txn_sends_pf2guc(struct kunit *test)
> +{
> +	struct xe_guc_relay *relay = test->priv;
> +	struct relay_transaction *txn;
> +
> +	txn = __relay_get_transaction(relay, false, TEST_VFID, TEST_RID,
> +				      TEST_MSG, TEST_LEN, NULL, 0);
> +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, txn);
> +
> +	kunit_activate_static_stub(test, xe_guc_ct_send_recv,
> +				   replacement_xe_guc_ct_send_recv_expects_pf2guc_relay);
> +	KUNIT_ASSERT_EQ(test, 0, relay_send_transaction(relay, txn));
> +
> +	relay_release_transaction(relay, txn);
> +}
> +
> +static void pf_sends_pf2guc(struct kunit *test)
> +{
> +	struct xe_guc_relay *relay = test->priv;
> +
> +	kunit_activate_static_stub(test, xe_guc_ct_send_recv,
> +				   replacement_xe_guc_ct_send_recv_expects_pf2guc_relay);
> +	KUNIT_ASSERT_EQ(test, 0,
> +			xe_guc_relay_send_to_vf(relay, TEST_VFID,
> +						TEST_MSG, TEST_LEN, NULL, 0));
> +}
> +
> +static int replacement_xe_guc_ct_send_recv_loopback_relay(struct xe_guc_ct *ct,
> +							  const u32 *msg, u32 len,
> +							  u32 *response_buffer)
> +{
> +	struct kunit *test = kunit_get_current_test();
> +	struct xe_guc_relay *relay = test->priv;
> +	u32 *reply = kunit_kzalloc(test, len * sizeof(u32), GFP_KERNEL);
> +	int (*guc2relay)(struct xe_guc_relay *, const u32 *, u32);
> +	u32 action;
> +	int err;
> +
> +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ct);
> +	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, msg);
> +	KUNIT_ASSERT_GE(test, len, GUC_HXG_MSG_MIN_LEN);
> +	KUNIT_ASSERT_EQ(test, GUC_HXG_TYPE_REQUEST,
> +			FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]));
> +	KUNIT_ASSERT_GE(test, len, GUC_HXG_REQUEST_MSG_MIN_LEN);
> +	KUNIT_ASSERT_NOT_NULL(test, reply);
> +
> +	switch (FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, msg[0])) {
> +	case XE_GUC_ACTION_PF2GUC_RELAY_TO_VF:
> +		KUNIT_ASSERT_GE(test, len, PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN);
> +		action = XE_GUC_ACTION_GUC2PF_RELAY_FROM_VF;
> +		guc2relay = xe_guc_relay_process_guc2pf;
> +		break;
> +	case XE_GUC_ACTION_VF2GUC_RELAY_TO_PF:
> +		KUNIT_ASSERT_GE(test, len, VF2GUC_RELAY_TO_PF_REQUEST_MSG_MIN_LEN);
> +		action = XE_GUC_ACTION_GUC2VF_RELAY_FROM_PF;
> +		guc2relay = xe_guc_relay_process_guc2vf;
> +		break;
> +	default:
> +		KUNIT_FAIL(test, "bad RELAY action %#x", msg[0]);
> +		return -EINVAL;
> +	}
> +
> +	reply[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_GUC) |
> +		   FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_EVENT) |
> +		   FIELD_PREP(GUC_HXG_EVENT_MSG_0_ACTION, action);
> +	memcpy(reply + 1, msg + 1, sizeof(u32) * (len - 1));
> +
> +	err = guc2relay(relay, reply, len);
> +	KUNIT_EXPECT_EQ(test, err, 0);
> +
> +	return err;
> +}
> +
> +static void test_requires_relay_testloop(struct kunit *test)
> +{
> +	/*
> +	 * The debug relay action GUC_RELAY_ACTION_VFXPF_TESTLOOP is available
> +	 * only on builds with CONFIG_DRM_XE_DEBUG_SRIOV enabled.
> +	 * See "kunit.py --kconfig_add" option if it's missing.
> +	 */
> +	if (!IS_ENABLED(CONFIG_DRM_XE_DEBUG_SRIOV))
> +		kunit_skip(test, "requires %s\n", __stringify(CONFIG_DRM_XE_DEBUG_SRIOV));
> +}
> +
> +static void pf_loopback_nop(struct kunit *test)
> +{
> +	struct xe_guc_relay *relay = test->priv;
> +	u32 request[] = {
> +		FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +		FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
> +		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, GUC_RELAY_ACTION_VFXPF_TESTLOOP) |
> +		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_DATA0, VFXPF_TESTLOOP_OPCODE_NOP),
> +	};
> +	u32 response[GUC_HXG_RESPONSE_MSG_MIN_LEN];
> +	int ret;
> +
> +	test_requires_relay_testloop(test);
> +
> +	kunit_activate_static_stub(test, relay_kick_worker, relay_process_incoming_action);
> +	kunit_activate_static_stub(test, xe_guc_ct_send_recv,
> +				   replacement_xe_guc_ct_send_recv_loopback_relay);
> +	ret = xe_guc_relay_send_to_vf(relay, TEST_VFID,
> +				      request, ARRAY_SIZE(request),
> +				      response, ARRAY_SIZE(response));
> +	KUNIT_ASSERT_EQ(test, ret, GUC_HXG_RESPONSE_MSG_MIN_LEN);
> +	KUNIT_EXPECT_EQ(test, FIELD_GET(GUC_HXG_MSG_0_ORIGIN, response[0]),
> +			GUC_HXG_ORIGIN_HOST);
> +	KUNIT_EXPECT_EQ(test, FIELD_GET(GUC_HXG_MSG_0_TYPE, response[0]),
> +			GUC_HXG_TYPE_RESPONSE_SUCCESS);
> +	KUNIT_EXPECT_EQ(test, FIELD_GET(GUC_HXG_RESPONSE_MSG_0_DATA0, response[0]), 0);
> +}
> +
> +static void pf_loopback_echo(struct kunit *test)
> +{
> +	struct xe_guc_relay *relay = test->priv;
> +	u32 request[] = {
> +		FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +		FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
> +		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, GUC_RELAY_ACTION_VFXPF_TESTLOOP) |
> +		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_DATA0, VFXPF_TESTLOOP_OPCODE_ECHO),
> +		TEST_DATA(1), TEST_DATA(2), TEST_DATA(3), TEST_DATA(4),
> +	};
> +	u32 response[ARRAY_SIZE(request)];
> +	unsigned int n;
> +	int ret;
> +
> +	test_requires_relay_testloop(test);
> +
> +	kunit_activate_static_stub(test, relay_kick_worker, relay_process_incoming_action);
> +	kunit_activate_static_stub(test, xe_guc_ct_send_recv,
> +				   replacement_xe_guc_ct_send_recv_loopback_relay);
> +	ret = xe_guc_relay_send_to_vf(relay, TEST_VFID,
> +				      request, ARRAY_SIZE(request),
> +				      response, ARRAY_SIZE(response));
> +	KUNIT_ASSERT_EQ(test, ret, ARRAY_SIZE(response));
> +	KUNIT_EXPECT_EQ(test, FIELD_GET(GUC_HXG_MSG_0_ORIGIN, response[0]),
> +			GUC_HXG_ORIGIN_HOST);
> +	KUNIT_EXPECT_EQ(test, FIELD_GET(GUC_HXG_MSG_0_TYPE, response[0]),
> +			GUC_HXG_TYPE_RESPONSE_SUCCESS);
> +	KUNIT_EXPECT_EQ(test, FIELD_GET(GUC_HXG_RESPONSE_MSG_0_DATA0, response[0]),
> +			ARRAY_SIZE(response));
> +	for (n = GUC_HXG_RESPONSE_MSG_MIN_LEN; n < ret; n++)
> +		KUNIT_EXPECT_EQ(test, request[n], response[n]);
> +}
> +
> +static void pf_loopback_fail(struct kunit *test)
> +{
> +	struct xe_guc_relay *relay = test->priv;
> +	u32 request[] = {
> +		FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +		FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
> +		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, GUC_RELAY_ACTION_VFXPF_TESTLOOP) |
> +		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_DATA0, VFXPF_TESTLOOP_OPCODE_FAIL),
> +	};
> +	u32 response[GUC_HXG_RESPONSE_MSG_MIN_LEN];
> +	int ret;
> +
> +	test_requires_relay_testloop(test);
> +
> +	kunit_activate_static_stub(test, relay_kick_worker, relay_process_incoming_action);
> +	kunit_activate_static_stub(test, xe_guc_ct_send_recv,
> +				   replacement_xe_guc_ct_send_recv_loopback_relay);
> +	ret = xe_guc_relay_send_to_vf(relay, TEST_VFID,
> +				      request, ARRAY_SIZE(request),
> +				      response, ARRAY_SIZE(response));
> +	KUNIT_ASSERT_EQ(test, ret, -EREMOTEIO);
> +}
> +
> +static void pf_loopback_busy(struct kunit *test)
> +{
> +	struct xe_guc_relay *relay = test->priv;
> +	u32 request[] = {
> +		FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +		FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
> +		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, GUC_RELAY_ACTION_VFXPF_TESTLOOP) |
> +		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_DATA0, VFXPF_TESTLOOP_OPCODE_BUSY),
> +		TEST_DATA(0xb),
> +	};
> +	u32 response[GUC_HXG_RESPONSE_MSG_MIN_LEN];
> +	int ret;
> +
> +	test_requires_relay_testloop(test);
> +
> +	kunit_activate_static_stub(test, relay_testonly_nop, relay_process_incoming_action);
> +	kunit_activate_static_stub(test, relay_kick_worker, relay_process_incoming_action);
> +	kunit_activate_static_stub(test, xe_guc_ct_send_recv,
> +				   replacement_xe_guc_ct_send_recv_loopback_relay);
> +	ret = xe_guc_relay_send_to_vf(relay, TEST_VFID,
> +				      request, ARRAY_SIZE(request),
> +				      response, ARRAY_SIZE(response));
> +	KUNIT_ASSERT_EQ(test, ret, GUC_HXG_RESPONSE_MSG_MIN_LEN);
> +}
> +
> +static void pf_loopback_retry(struct kunit *test)
> +{
> +	struct xe_guc_relay *relay = test->priv;
> +	u32 request[] = {
> +		FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
> +		FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
> +		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, GUC_RELAY_ACTION_VFXPF_TESTLOOP) |
> +		FIELD_PREP(GUC_HXG_REQUEST_MSG_0_DATA0, VFXPF_TESTLOOP_OPCODE_RETRY),
> +		TEST_DATA(0xd), TEST_DATA(0xd),
> +	};
> +	u32 response[GUC_HXG_RESPONSE_MSG_MIN_LEN];
> +	int ret;
> +
> +	test_requires_relay_testloop(test);
> +
> +	kunit_activate_static_stub(test, relay_kick_worker, relay_process_incoming_action);
> +	kunit_activate_static_stub(test, xe_guc_ct_send_recv,
> +				   replacement_xe_guc_ct_send_recv_loopback_relay);
> +	ret = xe_guc_relay_send_to_vf(relay, TEST_VFID,
> +				      request, ARRAY_SIZE(request),
> +				      response, ARRAY_SIZE(response));
> +	KUNIT_ASSERT_EQ(test, ret, GUC_HXG_RESPONSE_MSG_MIN_LEN);
> +}
> +
> +static struct kunit_case pf_relay_test_cases[] = {
> +	KUNIT_CASE(pf_rejects_guc2pf_too_short),
> +	KUNIT_CASE(pf_rejects_guc2pf_too_long),
> +	KUNIT_CASE(pf_rejects_guc2pf_no_payload),
> +	KUNIT_CASE(pf_fails_no_payload),
> +	KUNIT_CASE(pf_fails_bad_origin),
> +	KUNIT_CASE(pf_fails_bad_type),
> +	KUNIT_CASE(pf_txn_reports_error),
> +	KUNIT_CASE(pf_txn_sends_pf2guc),
> +	KUNIT_CASE(pf_sends_pf2guc),
> +	KUNIT_CASE(pf_loopback_nop),
> +	KUNIT_CASE(pf_loopback_echo),
> +	KUNIT_CASE(pf_loopback_fail),
> +	KUNIT_CASE_SLOW(pf_loopback_busy),
> +	KUNIT_CASE_SLOW(pf_loopback_retry),
> +	{}
> +};
> +
> +static struct kunit_suite pf_relay_suite = {
> +	.name = "pf_relay",
> +	.test_cases = pf_relay_test_cases,
> +	.init = relay_test_init,
> +};
> +
> +static void vf_rejects_guc2vf_too_short(struct kunit *test)
> +{
> +	const u32 len = GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN - 1;
> +	struct xe_guc_relay *relay = test->priv;
> +	const u32 *msg = test_guc2vf;
> +
> +	KUNIT_ASSERT_EQ(test, -EPROTO, xe_guc_relay_process_guc2vf(relay, msg, len));
> +}
> +
> +static void vf_rejects_guc2vf_too_long(struct kunit *test)
> +{
> +	const u32 len = GUC2VF_RELAY_FROM_PF_EVENT_MSG_MAX_LEN + 1;
> +	struct xe_guc_relay *relay = test->priv;
> +	const u32 *msg = test_guc2vf;
> +
> +	KUNIT_ASSERT_EQ(test, -EMSGSIZE, xe_guc_relay_process_guc2vf(relay, msg, len));
> +}
> +
> +static void vf_rejects_guc2vf_no_payload(struct kunit *test)
> +{
> +	const u32 len = GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN;
> +	struct xe_guc_relay *relay = test->priv;
> +	const u32 *msg = test_guc2vf;
> +
> +	KUNIT_ASSERT_EQ(test, -EPROTO, xe_guc_relay_process_guc2vf(relay, msg, len));
> +}
> +
> +static struct kunit_case vf_relay_test_cases[] = {
> +	KUNIT_CASE(vf_rejects_guc2vf_too_short),
> +	KUNIT_CASE(vf_rejects_guc2vf_too_long),
> +	KUNIT_CASE(vf_rejects_guc2vf_no_payload),
> +	{}
> +};
> +
> +static struct kunit_suite vf_relay_suite = {
> +	.name = "vf_relay",
> +	.test_cases = vf_relay_test_cases,
> +	.init = relay_test_init,
> +};
> +
> +static void xe_drops_guc2pf_if_not_ready(struct kunit *test)
> +{
> +	struct xe_device *xe = test->priv;
> +	struct xe_guc_relay *relay = &xe_device_get_gt(xe, 0)->uc.guc.relay;
> +	const u32 *msg = test_guc2pf;
> +	u32 len = GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN + GUC_RELAY_MSG_MIN_LEN;
> +
> +	KUNIT_ASSERT_EQ(test, -ENODEV, xe_guc_relay_process_guc2pf(relay, msg, len));
> +}
> +
> +static void xe_drops_guc2vf_if_not_ready(struct kunit *test)
> +{
> +	struct xe_device *xe = test->priv;
> +	struct xe_guc_relay *relay = &xe_device_get_gt(xe, 0)->uc.guc.relay;
> +	const u32 *msg = test_guc2vf;
> +	u32 len = GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN + GUC_RELAY_MSG_MIN_LEN;
> +
> +	KUNIT_ASSERT_EQ(test, -ENODEV, xe_guc_relay_process_guc2vf(relay, msg, len));
> +}
> +
> +static void xe_rejects_send_if_not_ready(struct kunit *test)
> +{
> +	struct xe_device *xe = test->priv;
> +	struct xe_guc_relay *relay = &xe_device_get_gt(xe, 0)->uc.guc.relay;
> +	u32 msg[GUC_RELAY_MSG_MIN_LEN];
> +	u32 len = ARRAY_SIZE(msg);
> +
> +	KUNIT_ASSERT_EQ(test, -ENODEV, xe_guc_relay_send_to_pf(relay, msg, len, NULL, 0));
> +	KUNIT_ASSERT_EQ(test, -ENODEV, relay_send_to(relay, TEST_VFID, msg, len, NULL, 0));
> +}
> +
> +static struct kunit_case no_relay_test_cases[] = {
> +	KUNIT_CASE(xe_drops_guc2pf_if_not_ready),
> +	KUNIT_CASE(xe_drops_guc2vf_if_not_ready),
> +	KUNIT_CASE(xe_rejects_send_if_not_ready),
> +	{}
> +};
> +
> +static struct kunit_suite no_relay_suite = {
> +	.name = "no_relay",
> +	.test_cases = no_relay_test_cases,
> +	.init = xe_kunit_helper_xe_device_test_init,
> +};
> +
> +kunit_test_suites(&no_relay_suite,
> +		  &pf_relay_suite,
> +		  &vf_relay_suite);
> diff --git a/drivers/gpu/drm/xe/xe_guc_relay.c b/drivers/gpu/drm/xe/xe_guc_relay.c
> index 528a18215389..32535a4fd69c 100644
> --- a/drivers/gpu/drm/xe/xe_guc_relay.c
> +++ b/drivers/gpu/drm/xe/xe_guc_relay.c
> @@ -8,6 +8,8 @@
>  
>  #include <drm/drm_managed.h>
>  
> +#include <kunit/static_stub.h>
> +
>  #include "abi/guc_actions_sriov_abi.h"
>  #include "abi/guc_relay_actions_abi.h"
>  #include "abi/guc_relay_communication_abi.h"
> @@ -60,6 +62,7 @@ static int relay_get_totalvfs(struct xe_guc_relay *relay)
>  	struct xe_device *xe = relay_to_xe(relay);
>  	struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
>  
> +	KUNIT_STATIC_STUB_REDIRECT(relay_get_totalvfs, relay);
>  	return IS_SRIOV_VF(xe) ? 0 : pci_sriov_get_totalvfs(pdev);
>  }
>  
> @@ -390,6 +393,11 @@ static u32 prepare_error_reply(u32 *msg, u32 error, u32 hint)
>  	return GUC_HXG_FAILURE_MSG_LEN;
>  }
>  
> +static void relay_testonly_nop(struct xe_guc_relay *relay)
> +{
> +	KUNIT_STATIC_STUB_REDIRECT(relay_testonly_nop, relay);
> +}
> +
>  static int relay_send_message_and_wait(struct xe_guc_relay *relay,
>  					struct relay_transaction *txn,
>  					u32 *buf, u32 buf_size)
> @@ -432,8 +440,10 @@ static int relay_send_message_and_wait(struct xe_guc_relay *relay,
>  		reinit_completion(&txn->done);
>  		if (txn->reply == -EAGAIN)
>  			goto resend;
> -		if (txn->reply == -EBUSY)
> +		if (txn->reply == -EBUSY) {
> +			relay_testonly_nop(relay);
>  			goto wait;
> +		}
>  		if (txn->reply > 0)
>  			ret = from_relay_error(txn->reply);
>  		else
> @@ -746,6 +756,7 @@ static bool relay_needs_worker(struct xe_guc_relay *relay)
>  
>  static void relay_kick_worker(struct xe_guc_relay *relay)
>  {
> +	KUNIT_STATIC_STUB_REDIRECT(relay_kick_worker, relay);
>  	queue_work(relay_to_xe(relay)->sriov.wq, &relay->worker);
>  }
>  
> @@ -916,3 +927,7 @@ int xe_guc_relay_process_guc2pf(struct xe_guc_relay *relay, const u32 *msg, u32
>  	return err;
>  }
>  #endif
> +
> +#if IS_BUILTIN(CONFIG_DRM_XE_KUNIT_TEST)
> +#include "tests/xe_guc_relay_test.c"
> +#endif
> -- 
> 2.25.1
> 

-- 

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

* Re: [PATCH 10/10] drm/xe/guc: Start handling GuC Relay event messages
  2023-12-27 23:58 ` [PATCH 10/10] drm/xe/guc: Start handling GuC Relay event messages Michal Wajdeczko
@ 2023-12-29 21:16   ` Piotr Piórkowski
  0 siblings, 0 replies; 30+ messages in thread
From: Piotr Piórkowski @ 2023-12-29 21:16 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on czw [2023-gru-28 00:58:38 +0100]:
> GuC Relay infrastructure is ready, start handling relay messages
> from the GuC to unblock testing on the live system.
> 
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com>
> ---
>  drivers/gpu/drm/xe/xe_guc_ct.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
> index 8f208267ffc6..c29f095aa1b9 100644
> --- a/drivers/gpu/drm/xe/xe_guc_ct.c
> +++ b/drivers/gpu/drm/xe/xe_guc_ct.c
> @@ -14,6 +14,7 @@
>  #include <drm/drm_managed.h>
>  
>  #include "abi/guc_actions_abi.h"
> +#include "abi/guc_actions_sriov_abi.h"
>  #include "abi/guc_klvs_abi.h"
>  #include "xe_bo.h"
>  #include "xe_device.h"
> @@ -22,6 +23,7 @@
>  #include "xe_gt_printk.h"
>  #include "xe_gt_tlb_invalidation.h"
>  #include "xe_guc.h"
> +#include "xe_guc_relay.h"
>  #include "xe_guc_submit.h"
>  #include "xe_map.h"
>  #include "xe_pm.h"
> @@ -969,6 +971,12 @@ static int process_g2h_msg(struct xe_guc_ct *ct, u32 *msg, u32 len)
>  		ret = xe_guc_access_counter_notify_handler(guc, payload,
>  							   adj_len);
>  		break;
> +	case XE_GUC_ACTION_GUC2PF_RELAY_FROM_VF:
> +		ret = xe_guc_relay_process_guc2pf(&guc->relay, payload, adj_len);
> +		break;
> +	case XE_GUC_ACTION_GUC2VF_RELAY_FROM_PF:
> +		ret = xe_guc_relay_process_guc2vf(&guc->relay, payload, adj_len);
> +		break;
>  	default:
>  		drm_err(&xe->drm, "unexpected action 0x%04x\n", action);
>  	}
> -- 
> 2.25.1
> 

-- 

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

* Re: [PATCH 04/10] drm/xe/guc: Add helpers for HXG messages
  2023-12-29 21:08   ` Piotr Piórkowski
@ 2023-12-29 22:10     ` Michal Wajdeczko
  0 siblings, 0 replies; 30+ messages in thread
From: Michal Wajdeczko @ 2023-12-29 22:10 UTC (permalink / raw)
  To: Piotr Piórkowski; +Cc: intel-xe



On 29.12.2023 22:08, Piotr Piórkowski wrote:
> Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on czw [2023-gru-28 00:58:32 +0100]:
>> In addition to MMIO and CTB communication between the host driver
>> and the GUC firmware, we will start using GuC HXG message protocol
>> in communication between SR-IOV VFs and PF. Define helpers related
>> to HXG message protocol to minimize code duplication.
>>
>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>> ---
>>  drivers/gpu/drm/xe/xe_guc_hxg_helpers.h | 107 ++++++++++++++++++++++++
>>  1 file changed, 107 insertions(+)
>>  create mode 100644 drivers/gpu/drm/xe/xe_guc_hxg_helpers.h
>>
>> diff --git a/drivers/gpu/drm/xe/xe_guc_hxg_helpers.h b/drivers/gpu/drm/xe/xe_guc_hxg_helpers.h
>> new file mode 100644
>> index 000000000000..4dc080484e7a
>> --- /dev/null
>> +++ b/drivers/gpu/drm/xe/xe_guc_hxg_helpers.h
>> @@ -0,0 +1,107 @@
>> +/* SPDX-License-Identifier: MIT */
>> +/*
>> + * Copyright © 2023 Intel Corporation
>> + */
>> +
>> +#ifndef _XE_GUC_HXG_HELPERS_H_
>> +#define _XE_GUC_HXG_HELPERS_H_
>> +
>> +#include <linux/bitfield.h>
>> +#include <linux/types.h>
>> +
>> +#include "abi/guc_messages_abi.h"
>> +
>> +/**
>> + * hxg_sizeof - Queries size of the object or type (in HXG units).
>> + *
>> + * Asserts when actual size is not aligned to HXG unit (u32).
>> + *
>> + * Return: size in dwords (u32).
>> + */
>> +#define hxg_sizeof(T)	(sizeof(T) / sizeof(u32) + BUILD_BUG_ON_ZERO(sizeof(T) % sizeof(u32)))
>> +
>> +static inline const char *guc_hxg_type_to_string(unsigned int type)
>> +{
>> +	switch (type) {
>> +	case GUC_HXG_TYPE_REQUEST:
>> +		return "request";
>> +	case GUC_HXG_TYPE_FAST_REQUEST:
>> +		return "fast-request";
>> +	case GUC_HXG_TYPE_EVENT:
>> +		return "event";
>> +	case GUC_HXG_TYPE_NO_RESPONSE_BUSY:
>> +		return "busy";
>> +	case GUC_HXG_TYPE_NO_RESPONSE_RETRY:
>> +		return "retry";
>> +	case GUC_HXG_TYPE_RESPONSE_FAILURE:
>> +		return "failure";
>> +	case GUC_HXG_TYPE_RESPONSE_SUCCESS:
>> +		return "response";
>> +	default:
>> +		return "<invalid>";
>> +	}
>> +}
>> +
>> +static inline bool guc_hxg_type_is_action(unsigned int type)
>> +{
>> +	switch (type) {
>> +	case GUC_HXG_TYPE_REQUEST:
>> +	case GUC_HXG_TYPE_FAST_REQUEST:
>> +	case GUC_HXG_TYPE_EVENT:
>> +		return true;
>> +	default:
>> +		return false;
>> +	}
>> +}
>> +
>> +static inline bool guc_hxg_type_is_reply(unsigned int type)
>> +{
>> +	switch (type) {
>> +	case GUC_HXG_TYPE_NO_RESPONSE_BUSY:
>> +	case GUC_HXG_TYPE_NO_RESPONSE_RETRY:
>> +	case GUC_HXG_TYPE_RESPONSE_FAILURE:
>> +	case GUC_HXG_TYPE_RESPONSE_SUCCESS:
>> +		return true;
>> +	default:
>> +		return false;
>> +	}
>> +}
>> +
>> +static inline u32 guc_hxg_msg_encode_success(u32 *msg, u32 data0)
>> +{
>> +	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
>> +		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_RESPONSE_SUCCESS) |
>> +		 FIELD_PREP(GUC_HXG_RESPONSE_MSG_0_DATA0, data0);
>> +
>> +	return GUC_HXG_RESPONSE_MSG_MIN_LEN;
>> +}
>> +
>> +static inline u32 guc_hxg_msg_encode_failure(u32 *msg, u32 error, u32 hint)
>> +{
>> +	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
>> +		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_RESPONSE_FAILURE) |
>> +		 FIELD_PREP(GUC_HXG_FAILURE_MSG_0_HINT, hint) |
>> +		 FIELD_PREP(GUC_HXG_FAILURE_MSG_0_ERROR, error);
>> +
>> +	return GUC_HXG_FAILURE_MSG_LEN;
>> +}
>> +
>> +static inline u32 guc_hxg_msg_encode_busy(u32 *msg, u32 counter)
>> +{
>> +	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
>> +		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_NO_RESPONSE_BUSY) |
>> +		 FIELD_PREP(GUC_HXG_BUSY_MSG_0_COUNTER, counter);
>> +
>> +	return GUC_HXG_BUSY_MSG_LEN;
>> +}
>> +
>> +static inline u32 guc_hxg_msg_encode_retry(u32 *msg, u32 reason)
>> +{
>> +	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
>> +		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_NO_RESPONSE_RETRY) |
>> +		 FIELD_PREP(GUC_HXG_RETRY_MSG_0_REASON, reason);
>> +
>> +	return GUC_HXG_RETRY_MSG_LEN;
>> +}
> 
> Note to the 4 functions above ^^^^^:
> I know that naming convention says to use in this case guc_hxg_*
> However, these functions, by their content directly indicate that they
> are only h2g.
> I have a subjective feeling, which you can ignore, that they should be
> labeled in some way as h2g.

Note that from the driver (host) POV, by design, we will be encoding all
HXG messages always as H2G, so IMO we can stay with guc_hxg prefix.

> 
> But still:
> Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com>
> 
> 
>> +
>> +#endif
>> -- 
>> 2.25.1
>>
> 

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

* Re: [PATCH 07/10] drm/xe/guc: Introduce Relay Communication for SR-IOV
  2023-12-29 21:14   ` Piotr Piórkowski
@ 2023-12-29 22:55     ` Michal Wajdeczko
  0 siblings, 0 replies; 30+ messages in thread
From: Michal Wajdeczko @ 2023-12-29 22:55 UTC (permalink / raw)
  To: Piotr Piórkowski; +Cc: intel-xe



On 29.12.2023 22:14, Piotr Piórkowski wrote:
> Michal Wajdeczko <michal.wajdeczko@intel.com> wrote on czw [2023-gru-28 00:58:35 +0100]:
>> There are scenarios where SR-IOV Virtual Function (VF) driver will
>> need to get additional data that is not available over VF MMIO BAR
>> nor could be queried from the GuC firmware and must be obtained
>> from the Physical Function (PF) driver.
>>
>> To allow such communication between VF and PF drivers, GuC supports
>> set of H2G and G2H actions which allows relaying embedded messages,
>> that are otherwise opaque for the GuC.
>>
>> To allow use of this communication mechanism, provide functions for
>> sending requests and handling replies and placeholder where we will
>> put handlers for incoming requests.
>>
>> Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
>> ---
>>  drivers/gpu/drm/xe/Makefile             |   1 +
>>  drivers/gpu/drm/xe/xe_guc.c             |   5 +
>>  drivers/gpu/drm/xe/xe_guc_relay.c       | 918 ++++++++++++++++++++++++
>>  drivers/gpu/drm/xe/xe_guc_relay.h       |  32 +
>>  drivers/gpu/drm/xe/xe_guc_relay_types.h |  36 +
>>  drivers/gpu/drm/xe/xe_guc_types.h       |   4 +
>>  6 files changed, 996 insertions(+)
>>  create mode 100644 drivers/gpu/drm/xe/xe_guc_relay.c
>>  create mode 100644 drivers/gpu/drm/xe/xe_guc_relay.h
>>  create mode 100644 drivers/gpu/drm/xe/xe_guc_relay_types.h
>>
>> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
>> index df8601d6a59f..6952da8979ea 100644
>> --- a/drivers/gpu/drm/xe/Makefile
>> +++ b/drivers/gpu/drm/xe/Makefile
>> @@ -148,6 +148,7 @@ xe-$(CONFIG_HWMON) += xe_hwmon.o
>>  
>>  # graphics virtualization (SR-IOV) support
>>  xe-y += \
>> +	xe_guc_relay.o \
>>  	xe_memirq.o \
>>  	xe_sriov.o
>>  
>> diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
>> index 811e8b201270..311a0364bff1 100644
>> --- a/drivers/gpu/drm/xe/xe_guc.c
>> +++ b/drivers/gpu/drm/xe/xe_guc.c
>> @@ -21,6 +21,7 @@
>>  #include "xe_guc_hwconfig.h"
>>  #include "xe_guc_log.h"
>>  #include "xe_guc_pc.h"
>> +#include "xe_guc_relay.h"
>>  #include "xe_guc_submit.h"
>>  #include "xe_memirq.h"
>>  #include "xe_mmio.h"
>> @@ -263,6 +264,10 @@ int xe_guc_init(struct xe_guc *guc)
>>  	if (ret)
>>  		goto out;
>>  
>> +	ret = xe_guc_relay_init(&guc->relay);
>> +	if (ret)
>> +		goto out;
>> +
>>  	ret = xe_guc_pc_init(&guc->pc);
>>  	if (ret)
>>  		goto out;
>> diff --git a/drivers/gpu/drm/xe/xe_guc_relay.c b/drivers/gpu/drm/xe/xe_guc_relay.c
>> new file mode 100644
>> index 000000000000..528a18215389
>> --- /dev/null
>> +++ b/drivers/gpu/drm/xe/xe_guc_relay.c
>> @@ -0,0 +1,918 @@
>> +// SPDX-License-Identifier: MIT
>> +/*
>> + * Copyright © 2023 Intel Corporation
>> + */
>> +
>> +#include <linux/bitfield.h>
>> +#include <linux/delay.h>
>> +
>> +#include <drm/drm_managed.h>
>> +
>> +#include "abi/guc_actions_sriov_abi.h"
>> +#include "abi/guc_relay_actions_abi.h"
>> +#include "abi/guc_relay_communication_abi.h"
>> +
>> +#include "xe_assert.h"
>> +#include "xe_device.h"
>> +#include "xe_gt.h"
>> +#include "xe_gt_sriov_printk.h"
>> +#include "xe_guc.h"
>> +#include "xe_guc_ct.h"
>> +#include "xe_guc_hxg_helpers.h"
>> +#include "xe_guc_relay.h"
>> +#include "xe_guc_relay_types.h"
>> +#include "xe_sriov.h"
>> +
>> +/*
>> + * How long should we wait for the response?
>> + * XXX this value is subject for the profiling.
>> + */
>> +#define RELAY_TIMEOUT_MSEC	(2500)
>> +
>> +static void relays_worker_fn(struct work_struct *w);
>> +
>> +static struct xe_guc *relay_to_guc(struct xe_guc_relay *relay)
>> +{
>> +	return container_of(relay, struct xe_guc, relay);
>> +}
>> +
>> +static struct xe_guc_ct *relay_to_ct(struct xe_guc_relay *relay)
>> +{
>> +	return &relay_to_guc(relay)->ct;
>> +}
>> +
>> +static struct xe_gt *relay_to_gt(struct xe_guc_relay *relay)
>> +{
>> +	return guc_to_gt(relay_to_guc(relay));
>> +}
>> +
>> +static struct xe_device *relay_to_xe(struct xe_guc_relay *relay)
>> +{
>> +	return gt_to_xe(relay_to_gt(relay));
>> +}
>> +
>> +#define relay_assert(relay, condition)	xe_gt_assert(relay_to_gt(relay), condition)
>> +#define relay_notice(relay, msg...)	xe_gt_sriov_notice(relay_to_gt(relay), "relay: " msg)
>> +#define relay_debug(relay, msg...)	xe_gt_sriov_dbg_verbose(relay_to_gt(relay), "relay: " msg)
>> +
>> +static int relay_get_totalvfs(struct xe_guc_relay *relay)
>> +{
>> +	struct xe_device *xe = relay_to_xe(relay);
>> +	struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
>> +
>> +	return IS_SRIOV_VF(xe) ? 0 : pci_sriov_get_totalvfs(pdev);
>> +}
>> +
>> +static bool relay_is_ready(struct xe_guc_relay *relay)
>> +{
>> +	return mempool_initialized(&relay->pool);
>> +}
>> +
>> +static u32 relay_get_next_rid(struct xe_guc_relay *relay, u32 target)
> 
> Why target here ? It seems not necessary

it was used in future pending patches, will drop for now

> 
>> + {
>> +	u32 rid;
>> +
>> +	spin_lock(&relay->lock);
>> +	rid = ++relay->last_rid;
>> +	spin_unlock(&relay->lock);
>> +
>> +	return rid;
>> +}
>> +
>> +/*
>> + * Relation between struct relay_transaction members::
> 
> 
> From what I understand, the double colon is meaningful for docs, here it's
> probably not needed (unless it was meant to be docs,
> but then it's the wrong type of comment)

yup, it was a kernel-doc for the struct, somehow changed that to normal
comment in last minute, will convert back to full doc (as members are
still documented)

> 
>> + *
>> + *                 <-------------------- GUC_CTB_MAX_DWORDS -------------->
>> + *                                  <-------- GUC_RELAY_MSG_MAX_LEN --->
>> + *                 <--- offset ---> <--- request_len ------->
>> + *                +----------------+-------------------------+----------+--+
>> + *                |                |                         |          |  |
>> + *                +----------------+-------------------------+----------+--+
>> + *                ^                ^
>> + *               /                /
>> + *    request_buf          request
>> + *
>> + *                 <-------------------- GUC_CTB_MAX_DWORDS -------------->
>> + *                                  <-------- GUC_RELAY_MSG_MAX_LEN --->
>> + *                 <--- offset ---> <--- response_len --->
>> + *                +----------------+----------------------+-------------+--+
>> + *                |                |                      |             |  |
>> + *                +----------------+----------------------+-------------+--+
>> + *                ^                ^
>> + *               /                /
>> + *   response_buf         response
>> + */
>> +struct relay_transaction {
>> +	/**
>> +	 * @incoming: indicates whether this transaction represents an incoming
>> +	 *            request from the remote VF/PF or this transaction
>> +	 *            represents outgoing request to the remote VF/PF.
>> +	 */
>> +	bool incoming;
>> +
>> +	/**
>> +	 * @remote: PF/VF identifier of the origin (or target) of the relay
>> +	 *          request message.
>> +	 */
>> +	u32 remote;
>> +
>> +	/** @rid: identifier of the VF/PF relay message. */
>> +	u32 rid;
>> +
>> +	/**
>> +	 * @request: points to the inner VF/PF request message, copied to the
>> +	 *           #response_buf starting at #offset.
>> +	 */
>> +	u32 *request;
>> +
>> +	/** @request_len: length of the inner VF/PF request message. */
>> +	u32 request_len;
>> +
>> +	/**
>> +	 * @response: points to the placeholder buffer where inner VF/PF
>> +	 *            response will be located, for outgoing transaction
>> +	 *            this could be caller's buffer (if provided) otherwise
>> +	 *            it points to the #response_buf starting at #offset.
>> +	 */
>> +	u32 *response;
>> +
>> +	/**
>> +	 * @response_len: length of the inner VF/PF response message (only
>> +	 *                if #status is 0), initially set to the size of the
>> +	 *                placeholder buffer where response message will be
>> +	 *                copied.
>> +	 */
>> +	u32 response_len;
>> +
>> +	/**
>> +	 * @offset: offset to the start of the inner VF/PF relay message inside
>> +	 *          buffers; this offset is equal the length of the outer GuC
>> +	 *          relay header message.
>> +	 */
>> +	u32 offset;
>> +
>> +	/**
>> +	 * @request_buf: buffer with VF/PF request message including outer
>> +	 *               transport message.
>> +	 */
>> +	u32 request_buf[GUC_CTB_MAX_DWORDS];
>> +
>> +	/**
>> +	 * @response_buf: buffer with VF/PF response message including outer
>> +	 *                transport message.
>> +	 */
>> +	u32 response_buf[GUC_CTB_MAX_DWORDS];
>> +
>> +	/**
>> +	 * @reply: status of the reply, 0 means that data pointed by the
>> +	 *         #response is valid.
>> +	 */
>> +	int reply;
>> +
>> +	/** @done: completion of the outgoing transaction. */
>> +	struct completion done;
>> +
>> +	/** @link: transaction list link */
>> +	struct list_head link;
>> +};
>> +
>> +static u32 prepare_pf2guc(u32 *msg, u32 target, u32 rid)
>> +{
>> +	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
>> +		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
>> +		 FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, XE_GUC_ACTION_PF2GUC_RELAY_TO_VF);
>> +	msg[1] = FIELD_PREP(PF2GUC_RELAY_TO_VF_REQUEST_MSG_1_VFID, target);
>> +	msg[2] = FIELD_PREP(PF2GUC_RELAY_TO_VF_REQUEST_MSG_2_RELAY_ID, rid);
>> +
>> +	return PF2GUC_RELAY_TO_VF_REQUEST_MSG_MIN_LEN;
>> +}
>> +
>> +static u32 prepare_vf2guc(u32 *msg, u32 rid)
>> +{
>> +	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
>> +		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_REQUEST) |
>> +		 FIELD_PREP(GUC_HXG_REQUEST_MSG_0_ACTION, XE_GUC_ACTION_VF2GUC_RELAY_TO_PF);
>> +	msg[1] = FIELD_PREP(VF2GUC_RELAY_TO_PF_REQUEST_MSG_1_RELAY_ID, rid);
>> +
>> +	return VF2GUC_RELAY_TO_PF_REQUEST_MSG_MIN_LEN;
>> +}
>> +
>> +static struct relay_transaction *
>> +__relay_get_transaction(struct xe_guc_relay *relay, bool incoming, u32 remote, u32 rid,
>> +			const u32 *action, u32 action_len, u32 *resp, u32 resp_size)
>> +{
>> +	struct relay_transaction *txn;
>> +
>> +	relay_assert(relay, action_len >= GUC_RELAY_MSG_MIN_LEN);
>> +	relay_assert(relay, action_len <= GUC_RELAY_MSG_MAX_LEN);
>> +	relay_assert(relay, !(!!resp ^ !!resp_size));
>> +	relay_assert(relay, resp_size <= GUC_RELAY_MSG_MAX_LEN);
>> +	relay_assert(relay, resp_size == 0 || resp_size >= GUC_RELAY_MSG_MIN_LEN);
>> +
>> +	if (unlikely(!relay_is_ready(relay)))
>> +		return ERR_PTR(-ENODEV);
>> +
>> +	/*
>> +	 * For incoming requests we can't use GFP_KERNEL as those are delivered
>> +	 * with CTB lock held which is marked as used in the reclaim path.
>> +	 * Btw, that's one of the reason why we use mempool here!
>> +	 */
>> +	txn = mempool_alloc(&relay->pool, incoming ? GFP_ATOMIC : GFP_KERNEL);
>> +	if (!txn)
>> +		return ERR_PTR(-ENOMEM);
>> +
>> +	txn->incoming = incoming;
>> +	txn->remote = remote;
>> +	txn->rid = rid;
>> +	txn->offset = remote ?
>> +		prepare_pf2guc(incoming ? txn->response_buf : txn->request_buf, remote, rid) :
>> +		prepare_vf2guc(incoming ? txn->response_buf : txn->request_buf, rid);
>> +
>> +	relay_assert(relay, txn->offset);
>> +	relay_assert(relay, txn->offset + GUC_RELAY_MSG_MAX_LEN <= ARRAY_SIZE(txn->request_buf));
>> +	relay_assert(relay, txn->offset + GUC_RELAY_MSG_MAX_LEN <= ARRAY_SIZE(txn->response_buf));
>> +
>> +	txn->request = txn->request_buf + txn->offset;
>> +	memcpy(&txn->request_buf[txn->offset], action, sizeof(u32) * action_len);
>> +	txn->request_len = action_len;
>> +
>> +	txn->response = resp ?: txn->response_buf + txn->offset;
>> +	txn->response_len = resp_size ?: GUC_RELAY_MSG_MAX_LEN;
>> +	txn->reply = -ENOMSG;
>> +	INIT_LIST_HEAD(&txn->link);
>> +	init_completion(&txn->done);
>> +
>> +	return txn;
>> +}
>> +
>> +static struct relay_transaction *
>> +relay_new_transaction(struct xe_guc_relay *relay, u32 target, const u32 *action, u32 len,
>> +		      u32 *resp, u32 resp_size)
>> +{
>> +	u32 rid = relay_get_next_rid(relay, target);
>> +
>> +	return __relay_get_transaction(relay, false, target, rid, action, len, resp, resp_size);
>> +}
>> +
>> +static struct relay_transaction *
>> +relay_new_incoming_transaction(struct xe_guc_relay *relay, u32 origin, u32 rid,
>> +			       const u32 *action, u32 len)
>> +{
>> +	return __relay_get_transaction(relay, true, origin, rid, action, len, NULL, 0);
>> +}
>> +
>> +static void relay_release_transaction(struct xe_guc_relay *relay, struct relay_transaction *txn)
>> +{
>> +	relay_assert(relay, list_empty(&txn->link));
>> +
>> +	txn->offset = 0;
>> +	txn->response = NULL;
>> +	txn->reply = -ESTALE;
>> +	mempool_free(txn, &relay->pool);
>> +}
>> +
>> +static int relay_send_transaction(struct xe_guc_relay *relay, struct relay_transaction *txn)
>> +{
>> +	u32 len = txn->incoming ? txn->response_len : txn->request_len;
>> +	u32 *buf = txn->incoming ? txn->response_buf : txn->request_buf;
>> +	u32 *msg = buf + txn->offset;
>> +	int ret;
>> +
>> +	relay_assert(relay, txn->offset);
>> +	relay_assert(relay, txn->offset + len <= GUC_CTB_MAX_DWORDS);
>> +	relay_assert(relay, len >= GUC_RELAY_MSG_MIN_LEN);
>> +	relay_assert(relay, len <= GUC_RELAY_MSG_MAX_LEN);
>> +
>> +	relay_debug(relay, "sending %s.%u to %u = %*ph\n",
>> +		    guc_hxg_type_to_string(FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0])),
>> +		    txn->rid, txn->remote, (int)sizeof(u32) * len, msg);
>> +
>> +	ret = xe_guc_ct_send_block(relay_to_ct(relay), buf, len + txn->offset);
>> +
>> +	if (unlikely(ret > 0)) {
>> +		relay_notice(relay, "Unexpected data=%d from GuC, wrong ABI?\n", ret);
>> +		ret = -EPROTO;
>> +	}
>> +	if (unlikely(ret < 0)) {
>> +		relay_notice(relay, "Failed to send %s.%x to GuC (%pe) %*ph ...\n",
>> +			     guc_hxg_type_to_string(FIELD_GET(GUC_HXG_MSG_0_TYPE, buf[0])),
>> +			     FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, buf[0]),
>> +			     ERR_PTR(ret), (int)sizeof(u32) * txn->offset, buf);
>> +		relay_notice(relay, "Failed to send %s.%u to %u (%pe) %*ph\n",
>> +			     guc_hxg_type_to_string(FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0])),
>> +			     txn->rid, txn->remote, ERR_PTR(ret), (int)sizeof(u32) * len, msg);
>> +	}
>> +
>> +	return ret;
>> +}
>> +
>> +static void __fini_relay(struct drm_device *drm, void *arg)
>> +{
>> +	struct xe_guc_relay *relay = arg;
>> +
>> +	mempool_exit(&relay->pool);
>> +}
>> +
>> +/**
>> + * xe_guc_relay_init - Initialize a &xe_guc_relay
>> + * @relay: the &xe_guc_relay to initialize
>> + *
>> + * Initialize remaining members of &xe_guc_relay that may depend
>> + * on the SR-IOV mode.
>> + *
>> + * Return: 0 on success or a negative error code on failure.
>> + */
>> +int xe_guc_relay_init(struct xe_guc_relay *relay)
>> +{
>> +	const int XE_RELAY_MEMPOOL_MIN_NUM = 1;
>> +	struct xe_device *xe = relay_to_xe(relay);
>> +	int err;
>> +
>> +	relay_assert(relay, !relay_is_ready(relay));
>> +
>> +	if (!IS_SRIOV(xe))
>> +		return 0;
>> +
>> +	spin_lock_init(&relay->lock);
>> +	INIT_WORK(&relay->worker, relays_worker_fn);
>> +	INIT_LIST_HEAD(&relay->pending_relays);
>> +	INIT_LIST_HEAD(&relay->incoming_actions);
>> +
>> +	err = mempool_init_kmalloc_pool(&relay->pool, XE_RELAY_MEMPOOL_MIN_NUM +
>> +					relay_get_totalvfs(relay),
>> +					sizeof(struct relay_transaction));
>> +	if (err)
>> +		return err;
>> +
>> +	relay_debug(relay, "using mempool with %d elements\n", relay->pool.min_nr);
>> +
>> +	return drmm_add_action_or_reset(&xe->drm, __fini_relay, relay);
>> +}
>> +
>> +static u32 to_relay_error(int err)
>> +{
>> +	/* XXX: assume that relay errors match errno codes */
>> +	return err < 0 ? -err : GUC_RELAY_ERROR_UNDISCLOSED;
>> +}
>> +
>> +static int from_relay_error(u32 error)
>> +{
>> +	/* XXX: assume that relay errors match errno codes */
>> +	return error ? -error : -ENODATA;
>> +}
>> +
>> +static u32 sanitize_relay_error(u32 error)
>> +{
>> +	/* XXX TBD if generic error codes will be allowed */
>> +	if (!IS_ENABLED(CONFIG_DRM_XE_DEBUG))
>> +		error = GUC_RELAY_ERROR_UNDISCLOSED;
>> +	return error;
>> +}
>> +
>> +static u32 sanitize_relay_error_hint(u32 hint)
>> +{
>> +	/* XXX TBD if generic error codes will be allowed */
>> +	if (!IS_ENABLED(CONFIG_DRM_XE_DEBUG))
>> +		hint = 0;
>> +	return hint;
>> +}
>> +
>> +static u32 prepare_error_reply(u32 *msg, u32 error, u32 hint)
>> +{
>> +	msg[0] = FIELD_PREP(GUC_HXG_MSG_0_ORIGIN, GUC_HXG_ORIGIN_HOST) |
>> +		 FIELD_PREP(GUC_HXG_MSG_0_TYPE, GUC_HXG_TYPE_RESPONSE_FAILURE) |
>> +		 FIELD_PREP(GUC_HXG_FAILURE_MSG_0_HINT, hint) |
>> +		 FIELD_PREP(GUC_HXG_FAILURE_MSG_0_ERROR, error);
>> +
>> +	XE_WARN_ON(!FIELD_FIT(GUC_HXG_FAILURE_MSG_0_ERROR, error));
>> +	XE_WARN_ON(!FIELD_FIT(GUC_HXG_FAILURE_MSG_0_HINT, hint));
>> +
>> +	return GUC_HXG_FAILURE_MSG_LEN;
>> +}
>> +
>> +static int relay_send_message_and_wait(struct xe_guc_relay *relay,
>> +					struct relay_transaction *txn,
>> +					u32 *buf, u32 buf_size)
>> +{
>> +	unsigned long timeout = msecs_to_jiffies(RELAY_TIMEOUT_MSEC);
>> +	u32 *msg = &txn->request_buf[txn->offset];
>> +	u32 len = txn->request_len;
>> +	u32 type, action, data0;
>> +	int ret;
>> +	long n;
>> +
>> +	type = FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]);
>> +	action = FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, msg[0]);
>> +	data0 = FIELD_GET(GUC_HXG_REQUEST_MSG_0_DATA0, msg[0]);
>> +
>> +	relay_debug(relay, "%s.%u to %u action %#x:%u\n",
>> +		    guc_hxg_type_to_string(type),
>> +		    txn->rid, txn->remote, action, data0);
>> +
>> +	/* list ordering does not need to match RID ordering */
>> +	spin_lock(&relay->lock);
>> +	list_add_tail(&txn->link, &relay->pending_relays);
>> +	spin_unlock(&relay->lock);
>> +
>> +resend:
>> +	ret = relay_send_transaction(relay, txn);
>> +	if (unlikely(ret < 0))
>> +		goto unlink;
>> +
>> +wait:
>> +	n = wait_for_completion_timeout(&txn->done, timeout);
>> +	if (unlikely(n == 0 && txn->reply)) {
>> +		ret = -ETIME;
>> +		goto unlink;
>> +	}
>> +
>> +	relay_debug(relay, "%u.%u reply %d after %u msec\n",
>> +		    txn->remote, txn->rid, txn->reply, jiffies_to_msecs(timeout - n));
>> +	if (unlikely(txn->reply)) {
>> +		reinit_completion(&txn->done);
>> +		if (txn->reply == -EAGAIN)
>> +			goto resend;
>> +		if (txn->reply == -EBUSY)
>> +			goto wait;
>> +		if (txn->reply > 0)
>> +			ret = from_relay_error(txn->reply);
>> +		else
>> +			ret = txn->reply;
>> +		goto unlink;
>> +	}
>> +
>> +	relay_debug(relay, "%u.%u response %*ph\n", txn->remote, txn->rid,
>> +		    (int)sizeof(u32) * txn->response_len, txn->response);
>> +	relay_assert(relay, txn->response_len >= GUC_RELAY_MSG_MIN_LEN);
>> +	ret = txn->response_len;
>> +
>> +unlink:
>> +	spin_lock(&relay->lock);
>> +	list_del_init(&txn->link);
>> +	spin_unlock(&relay->lock);
>> +
>> +	if (unlikely(ret < 0)) {
>> +		relay_notice(relay, "Unsuccessful %s.%u %#x:%u to %u (%pe) %*ph\n",
>> +			     guc_hxg_type_to_string(type), txn->rid,
>> +			     action, data0, txn->remote, ERR_PTR(ret),
>> +			     (int)sizeof(u32) * len, msg);
>> +	}
>> +
>> +	return ret;
>> +}
>> +
>> +static int relay_send_to(struct xe_guc_relay *relay, u32 target,
>> +			 const u32 *msg, u32 len, u32 *buf, u32 buf_size)
>> +{
>> +	struct relay_transaction *txn;
>> +	int ret;
>> +
>> +	relay_assert(relay, len >= GUC_RELAY_MSG_MIN_LEN);
>> +	relay_assert(relay, len <= GUC_RELAY_MSG_MAX_LEN);
>> +	relay_assert(relay, FIELD_GET(GUC_HXG_MSG_0_ORIGIN, msg[0]) == GUC_HXG_ORIGIN_HOST);
>> +	relay_assert(relay, guc_hxg_type_is_action(FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0])));
>> +
>> +	if (unlikely(!relay_is_ready(relay)))
>> +		return -ENODEV;
>> +
>> +	txn = relay_new_transaction(relay, target, msg, len, buf, buf_size);
>> +	if (IS_ERR(txn))
>> +		return PTR_ERR(txn);
>> +
>> +	switch (FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0])) {
>> +	case GUC_HXG_TYPE_REQUEST:
>> +		ret = relay_send_message_and_wait(relay, txn, buf, buf_size);
>> +		break;
>> +	case GUC_HXG_TYPE_FAST_REQUEST:
>> +		relay_assert(relay, !GUC_HXG_TYPE_FAST_REQUEST);
>> +		fallthrough;
>> +	case GUC_HXG_TYPE_EVENT:
>> +		ret = relay_send_transaction(relay, txn);
>> +		break;
>> +	default:
>> +		ret = -EINVAL;
>> +		break;
>> +	}
>> +
>> +	relay_release_transaction(relay, txn);
>> +	return ret;
>> +}
>> +
>> +/**
>> + * xe_guc_relay_send_to_vf - Send a message to the VF.
>> + * @relay: the &xe_guc_relay which will send the message
>> + * @target: target VF number
>> + * @msg: request message to be sent
>> + * @len: length of the request message (in dwords, can't be 0)
>> + * @buf: placeholder for the response message
>> + * @buf_size: size of the response message placeholder (in dwords)
>> + *
>> + * This function can only be used by the driver running in the SR-IOV PF mode.
>> + *
>> + * Return: Non-negative response length (in dwords) or
>> + *         a negative error code on failure.
>> + */
>> +int xe_guc_relay_send_to_vf(struct xe_guc_relay *relay, u32 target,
>> +			    const u32 *msg, u32 len, u32 *buf, u32 buf_size)
>> +{
>> +	relay_assert(relay, IS_SRIOV_PF(relay_to_xe(relay)));
>> +
>> +	return relay_send_to(relay, target, msg, len, buf, buf_size);
>> +}
>> +
>> +/**
>> + * xe_guc_relay_send_to_pf - Send a message to the PF.
>> + * @relay: the &xe_guc_relay which will send the message
>> + * @msg: request message to be sent
>> + * @len: length of the message (in dwords, can't be 0)
>> + * @buf: placeholder for the response message
>> + * @buf_size: size of the response message placeholder (in dwords)
>> + *
>> + * This function can only be used by driver running in SR-IOV VF mode.
>> + *
>> + * Return: Non-negative response length (in dwords) or
>> + *         a negative error code on failure.
>> + */
>> +int xe_guc_relay_send_to_pf(struct xe_guc_relay *relay,
>> +			    const u32 *msg, u32 len, u32 *buf, u32 buf_size)
> 
> What's the reason you didn't give an assert for VF here ?

from the GuC POV, a PF is also treated as a VF (VF0) and we take
advantage of it in some live/kunit relay tests executed on the PF which
will send relay messages to itself (VF0 -> PF and PF -> VF0)

> 
>> +{
>> +	return relay_send_to(relay, PFID, msg, len, buf, buf_size);
>> +}
>> +
>> +static int relay_handle_reply(struct xe_guc_relay *relay, u32 origin,
>> +			      u32 rid, int reply, const u32 *msg, u32 len)
>> +{
>> +	struct relay_transaction *pending;
>> +	int err = -ESRCH;
>> +
>> +	spin_lock(&relay->lock);
>> +	list_for_each_entry(pending, &relay->pending_relays, link) {
>> +		if (pending->remote != origin || pending->rid != rid) {
>> +			relay_debug(relay, "%u.%u still awaits response\n",
>> +				    pending->remote, pending->rid);
>> +			continue;
>> +		}
>> +		err = 0; /* found! */
>> +		if (reply == 0) {
>> +			if (len > pending->response_len) {
>> +				reply = -ENOBUFS;
>> +				err = -ENOBUFS;
>> +			} else {
>> +				memcpy(pending->response, msg, 4 * len);
>> +				pending->response_len = len;
>> +			}
>> +		}
>> +		pending->reply = reply;
>> +		complete_all(&pending->done);
>> +		break;
>> +	}
>> +	spin_unlock(&relay->lock);
>> +
>> +	return err;
>> +}
>> +
>> +static int relay_handle_failure(struct xe_guc_relay *relay, u32 origin,
>> +				u32 rid, const u32 *msg, u32 len)
>> +{
>> +	int error = FIELD_GET(GUC_HXG_FAILURE_MSG_0_ERROR, msg[0]);
>> +	u32 hint __maybe_unused = FIELD_GET(GUC_HXG_FAILURE_MSG_0_HINT, msg[0]);
>> +
>> +	relay_assert(relay, len);
>> +	relay_debug(relay, "%u.%u error %#x (%pe) hint %u debug %*ph\n",
>> +		    origin, rid, error, ERR_PTR(-error), hint, 4 * (len - 1), msg + 1);
>> +
>> +	return relay_handle_reply(relay, origin, rid, error ?: -EREMOTEIO, NULL, 0);
>> +}
>> +
>> +static int relay_testloop_action_handler(struct xe_guc_relay *relay, u32 origin,
>> +					 const u32 *msg, u32 len, u32 *response, u32 size)
>> +{
>> +	static ktime_t last_reply = 0;
>> +	u32 type = FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]);
>> +	u32 action = FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, msg[0]);
>> +	u32 opode = FIELD_GET(GUC_HXG_REQUEST_MSG_0_DATA0, msg[0]);

oops

> 
> I guess you meant the name of the variable "opcode"
> 
>> +	ktime_t now = ktime_get();
>> +	bool busy;
>> +	int ret;
>> +
>> +	relay_assert(relay, guc_hxg_type_is_action(type));
>> +	relay_assert(relay, action == GUC_RELAY_ACTION_VFXPF_TESTLOOP);
>> +
>> +	if (!IS_ENABLED(CONFIG_DRM_XE_DEBUG_SRIOV))
>> +		return -ECONNREFUSED;
>> +
>> +	if (!last_reply)
>> +		last_reply = now;
>> +	busy = ktime_before(now, ktime_add_ms(last_reply, 2 * RELAY_TIMEOUT_MSEC));
>> +	if (!busy)
>> +		last_reply = now;
>> +
>> +	switch (opode) {
>> +	case VFXPF_TESTLOOP_OPCODE_NOP:
>> +		if (type == GUC_HXG_TYPE_EVENT)
>> +			return 0;
>> +		return guc_hxg_msg_encode_success(response, 0);
>> +	case VFXPF_TESTLOOP_OPCODE_BUSY:
>> +		if (type == GUC_HXG_TYPE_EVENT)
>> +			return -EPROTO;
>> +		msleep(RELAY_TIMEOUT_MSEC / 8);
>> +		if (busy)
>> +			return -EINPROGRESS;
>> +		return guc_hxg_msg_encode_success(response, 0);
>> +	case VFXPF_TESTLOOP_OPCODE_RETRY:
>> +		if (type == GUC_HXG_TYPE_EVENT)
>> +			return -EPROTO;
>> +		msleep(RELAY_TIMEOUT_MSEC / 8);
>> +		if (busy)
>> +			return guc_hxg_msg_encode_retry(response, 0);
>> +		return guc_hxg_msg_encode_success(response, 0);
>> +	case VFXPF_TESTLOOP_OPCODE_ECHO:
>> +		if (type == GUC_HXG_TYPE_EVENT)
>> +			return -EPROTO;
>> +		if (size < len)
>> +			return -ENOBUFS;
>> +		ret = guc_hxg_msg_encode_success(response, len);
>> +		memcpy(response + ret, msg + ret, (len - ret) * sizeof(u32));
>> +		return len;
>> +	case VFXPF_TESTLOOP_OPCODE_FAIL:
>> +		return -EHWPOISON;
>> +	default:
>> +		break;
>> +	}
>> +
>> +	relay_notice(relay, "Unexpected action %#x opcode %#x\n", action, opode);
>> +	return -EBADRQC;
>> +}
>> +
>> +static int relay_action_handler(struct xe_guc_relay *relay, u32 origin,
>> +				const u32 *msg, u32 len, u32 *response, u32 size)
>> +{
>> +	u32 type;
>> +	int ret;
>> +
>> +	relay_assert(relay, len >= GUC_HXG_MSG_MIN_LEN);
>> +
>> +	if (FIELD_GET(GUC_HXG_REQUEST_MSG_0_ACTION, msg[0]) == GUC_RELAY_ACTION_VFXPF_TESTLOOP)
>> +		return relay_testloop_action_handler(relay, origin, msg, len, response, size);
>> +
> 
> From what I understand here we will be adding more actions.
> Wouldn't it be better to make a switch statement here for the future?

Actually I was planning to implement specific action handlers in
separate functions/files as there will PF specific actions/handlers and
VF specific actions/handlers. Only VFXPF_TESTLOOP is different as it can
be used for testing on both PF and VF sides.

> 
> 
>> +	type = FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]);
>> +
>> +	/* XXX: PF services will be added later */
>> +	ret = -EOPNOTSUPP;
>> +
>> +	if (type == GUC_HXG_TYPE_EVENT)
>> +		relay_assert(relay, ret <= 0);
>> +
>> +	return ret;
>> +}
>> +
>> +static struct relay_transaction *relay_dequeue_transaction(struct xe_guc_relay *relay)
>> +{
>> +	struct relay_transaction *txn;
>> +
>> +	spin_lock(&relay->lock);
>> +	txn = list_first_entry_or_null(&relay->incoming_actions, struct relay_transaction, link);
>> +	if (txn)
>> +		list_del_init(&txn->link);
>> +	spin_unlock(&relay->lock);
>> +
>> +	return txn;
>> +}
>> +
>> +static void relay_process_incoming_action(struct xe_guc_relay *relay)
>> +{
>> +	struct relay_transaction *txn;
>> +	bool again = false;
>> +	u32 type;
>> +	int ret;
>> +
>> +	txn = relay_dequeue_transaction(relay);
>> +	if (!txn)
>> +		return;
>> +
>> +	type = FIELD_GET(GUC_HXG_MSG_0_TYPE, txn->request_buf[txn->offset]);
>> +
>> +	ret = relay_action_handler(relay, txn->remote,
>> +				   txn->request_buf + txn->offset, txn->request_len,
>> +				   txn->response_buf + txn->offset,
>> +				   ARRAY_SIZE(txn->response_buf) - txn->offset);
>> +
>> +	if (ret == -EINPROGRESS) {
>> +		again = true;
>> +		ret = guc_hxg_msg_encode_busy(txn->response_buf + txn->offset, 0);
>> +	}
>> +
>> +	if (ret > 0) {
>> +		txn->response_len = ret;
>> +		ret = relay_send_transaction(relay, txn);
>> +	}
>> +
>> +	if (ret < 0) {
>> +		u32 error = to_relay_error(ret);
>> +
>> +		relay_notice(relay, "Failed to handle %s.%u from %u (%pe) %*ph\n",
>> +			     guc_hxg_type_to_string(type), txn->rid, txn->remote,
>> +			     ERR_PTR(ret), 4 * txn->request_len, txn->request_buf + txn->offset);
>> +
>> +
>> +		txn->response_len = prepare_error_reply(txn->response_buf + txn->offset,
>> +							txn->remote ?
>> +							sanitize_relay_error(error) : error,
>> +							txn->remote ?
>> +							sanitize_relay_error_hint(-ret) : -ret);
>> +		ret = relay_send_transaction(relay, txn);
>> +		again = false;
>> +	}
>> +
>> +	if (again) {
>> +		spin_lock(&relay->lock);
>> +		list_add(&txn->link, &relay->incoming_actions);
>> +		spin_unlock(&relay->lock);
>> +		return;
>> +	}
>> +
>> +	if (unlikely(ret < 0))
>> +		relay_notice(relay, "Failed to process action.%u (%pe) %*ph\n",
>> +			     txn->rid, ERR_PTR(ret), 4 * txn->request_len,
>> +			     txn->request_buf + txn->offset);
>> +
>> +	relay_release_transaction(relay, txn);
>> +}
>> +
>> +static bool relay_needs_worker(struct xe_guc_relay *relay)
>> +{
>> +	return !list_empty(&relay->incoming_actions);
>> +}
>> +
>> +static void relay_kick_worker(struct xe_guc_relay *relay)
>> +{
>> +	queue_work(relay_to_xe(relay)->sriov.wq, &relay->worker);
>> +}
>> +
>> +static void relays_worker_fn(struct work_struct *w)
>> +{
>> +	struct xe_guc_relay *relay = container_of(w, struct xe_guc_relay, worker);
>> +
>> +	relay_process_incoming_action(relay);
>> +
>> +	if (relay_needs_worker(relay))
>> +		relay_kick_worker(relay);
>> +}
>> +
>> +static int relay_queue_action_msg(struct xe_guc_relay *relay, u32 origin, u32 rid,
>> +				  const u32 *msg, u32 len)
>> +{
>> +	struct relay_transaction *txn;
>> +
>> +	txn = relay_new_incoming_transaction(relay, origin, rid, msg, len);
>> +	if (IS_ERR(txn))
>> +		return PTR_ERR(txn);
>> +
>> +	spin_lock(&relay->lock);
>> +	list_add_tail(&txn->link, &relay->incoming_actions);
>> +	spin_unlock(&relay->lock);
>> +
>> +	relay_kick_worker(relay);
>> +	return 0;
>> +}
>> +
>> +static int relay_process_msg(struct xe_guc_relay *relay, u32 origin, u32 rid,
>> +			     const u32 *msg, u32 len)
>> +{
>> +	u32 type;
>> +	int err;
>> +
>> +	if (unlikely(len < GUC_HXG_MSG_MIN_LEN))
>> +		return -EPROTO;
>> +
>> +	if (FIELD_GET(GUC_HXG_MSG_0_ORIGIN, msg[0]) != GUC_HXG_ORIGIN_HOST)
>> +		return -EPROTO;
>> +
>> +	type = FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]);
>> +	relay_debug(relay, "received %s.%u from %u = %*ph\n",
>> +		    guc_hxg_type_to_string(type), rid, origin, 4 * len, msg);
>> +
>> +	switch (type) {
>> +	case GUC_HXG_TYPE_REQUEST:
>> +	case GUC_HXG_TYPE_FAST_REQUEST:
>> +	case GUC_HXG_TYPE_EVENT:
>> +		err = relay_queue_action_msg(relay, origin, rid, msg, len);
>> +		break;
>> +	case GUC_HXG_TYPE_RESPONSE_SUCCESS:
>> +		err = relay_handle_reply(relay, origin, rid, 0, msg, len);
>> +		break;
>> +	case GUC_HXG_TYPE_NO_RESPONSE_BUSY:
>> +		err = relay_handle_reply(relay, origin, rid, -EBUSY, NULL, 0);
>> +		break;
>> +	case GUC_HXG_TYPE_NO_RESPONSE_RETRY:
>> +		err = relay_handle_reply(relay, origin, rid, -EAGAIN, NULL, 0);
>> +		break;
>> +	case GUC_HXG_TYPE_RESPONSE_FAILURE:
>> +		err = relay_handle_failure(relay, origin, rid, msg, len);
>> +		break;
>> +	default:
>> +		err = -EBADRQC;
>> +	}
>> +
>> +	if (unlikely(err))
>> +		relay_notice(relay, "Failed to process %s.%u from %u (%pe) %*ph\n",
>> +			     guc_hxg_type_to_string(type), rid, origin,
>> +			     ERR_PTR(err), 4 * len, msg);
>> +
>> +	return err;
>> +}
>> +
>> +/**
>> + * xe_guc_relay_process_guc2vf - Handle relay notification message from the GuC.
>> + * @relay: the &xe_guc_relay which will handle the message
>> + * @msg: message to be handled
>> + * @len: length of the message (in dwords)
>> + *
>> + * This function will handle relay messages received from the GuC.
>> + *
>> + * This function is can only be used if driver is running in SR-IOV mode.
> 
> I understand that this function is dedicated to VF. From this documentation
> it seems that the function can also be used by PF.
> This was your idea or is the word VFs missing here ?
> I would also suggest using an appropriate assert in the code.

as explained above, in some scenarios we will expect GUC2VF on PF side,
so we can't just check for IS_SRIOV_VF, we might need to use also
CONFIG_DRM_XE_KUNIT_TEST, but yes, maybe it will cleaner

btw, we should use "if" instead "assert" as this G2H handler and we
shouldn't trust GUC too much

> 
>> + *
>> + * Return: 0 on success or a negative error code on failure.
>> + */
>> +int xe_guc_relay_process_guc2vf(struct xe_guc_relay *relay, const u32 *msg, u32 len)
>> +{
>> +	u32 rid;
>> +
>> +	relay_assert(relay, len >= GUC_HXG_MSG_MIN_LEN);
>> +	relay_assert(relay, FIELD_GET(GUC_HXG_MSG_0_ORIGIN, msg[0]) == GUC_HXG_ORIGIN_GUC);
>> +	relay_assert(relay, FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]) == GUC_HXG_TYPE_EVENT);
>> +	relay_assert(relay, FIELD_GET(GUC_HXG_EVENT_MSG_0_ACTION, msg[0]) ==
>> +		     XE_GUC_ACTION_GUC2VF_RELAY_FROM_PF);
>> +
>> +	if (unlikely(!relay_is_ready(relay)))
>> +		return -ENODEV;
>> +
>> +	if (unlikely(len < GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN))
>> +		return -EPROTO;
>> +
>> +	if (unlikely(len > GUC2VF_RELAY_FROM_PF_EVENT_MSG_MAX_LEN))
>> +		return -EMSGSIZE;
>> +
>> +	if (unlikely(FIELD_GET(GUC_HXG_EVENT_MSG_0_DATA0, msg[0])))
>> +		return -EPFNOSUPPORT;
>> +
>> +	rid = FIELD_GET(GUC2VF_RELAY_FROM_PF_EVENT_MSG_1_RELAY_ID, msg[1]);
>> +
>> +	return relay_process_msg(relay, PFID, rid,
>> +				 msg + GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN,
>> +				 len - GUC2VF_RELAY_FROM_PF_EVENT_MSG_MIN_LEN);
>> +}
>> +
>> +#ifdef CONFIG_PCI_IOV
>> +/**
>> + * xe_guc_relay_process_guc2pf - Handle relay notification message from the GuC.
>> + * @relay: the &xe_guc_relay which will handle the message
>> + * @msg: message to be handled
>> + * @len: length of the message (in dwords)
>> + *
>> + * This function will handle relay messages received from the GuC.
>> + *
>> + * This function can only be used if driver is running in SR-IOV PF mode.
>> + *
>> + * Return: 0 on success or a negative error code on failure.
>> + */
>> +int xe_guc_relay_process_guc2pf(struct xe_guc_relay *relay, const u32 *msg, u32 len)
>> +{
>> +	struct xe_gt *gt = relay_to_gt(relay);
>> +	u32 origin, rid;
>> +	int err;
>> +
>> +	relay_assert(relay, len >= GUC_HXG_EVENT_MSG_MIN_LEN);
>> +	relay_assert(relay, FIELD_GET(GUC_HXG_MSG_0_ORIGIN, msg[0]) == GUC_HXG_ORIGIN_GUC);
>> +	relay_assert(relay, FIELD_GET(GUC_HXG_MSG_0_TYPE, msg[0]) == GUC_HXG_TYPE_EVENT);
>> +	relay_assert(relay, FIELD_GET(GUC_HXG_EVENT_MSG_0_ACTION, msg[0]) ==
>> +		     XE_GUC_ACTION_GUC2PF_RELAY_FROM_VF);
>> +
>> +	if (unlikely(!relay_is_ready(relay)))
>> +		return -ENODEV;
>> +
>> +	if (unlikely(!xe_device_is_sriov_pf(gt_to_xe(gt))))
>> +		return -EPERM;
>> +
>> +	if (unlikely(len < GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN))
>> +		return -EPROTO;
>> +
>> +	if (unlikely(len > GUC2PF_RELAY_FROM_VF_EVENT_MSG_MAX_LEN))
>> +		return -EMSGSIZE;
>> +
>> +	if (unlikely(FIELD_GET(GUC_HXG_EVENT_MSG_0_DATA0, msg[0])))
>> +		return -EPFNOSUPPORT;
>> +
>> +	origin = FIELD_GET(GUC2PF_RELAY_FROM_VF_EVENT_MSG_1_VFID, msg[1]);
>> +	rid = FIELD_GET(GUC2PF_RELAY_FROM_VF_EVENT_MSG_2_RELAY_ID, msg[2]);
>> +
>> +	if (unlikely(origin > relay_get_totalvfs(relay)))
>> +		return -ENOENT;
>> +
>> +	err = relay_process_msg(relay, origin, rid,
>> +				msg + GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN,
>> +				len - GUC2PF_RELAY_FROM_VF_EVENT_MSG_MIN_LEN);
> 
> Return can be used already here, the one below is not needed.

we will be adding some monitoring code here shortly (to catch improper
activity from the VF drivers) so I would keep it as-is to minimize diff

> 
>> +
>> +	return err;
>> +}
>> +#endif
>> diff --git a/drivers/gpu/drm/xe/xe_guc_relay.h b/drivers/gpu/drm/xe/xe_guc_relay.h
>> new file mode 100644
>> index 000000000000..e6a251be34a1
>> --- /dev/null
>> +++ b/drivers/gpu/drm/xe/xe_guc_relay.h
>> @@ -0,0 +1,32 @@
>> +/* SPDX-License-Identifier: MIT */
>> +/*
>> + * Copyright © 2023 Intel Corporation
>> + */
>> +
>> +#ifndef _XE_GUC_RELAY_H_
>> +#define _XE_GUC_RELAY_H_
>> +
>> +#include <linux/types.h>
>> +#include <linux/errno.h>
>> +
>> +struct xe_guc_relay;
>> +
>> +int xe_guc_relay_init(struct xe_guc_relay *relay);
>> +
>> +int xe_guc_relay_send_to_vf(struct xe_guc_relay *relay, u32 target,
>> +			    const u32 *msg, u32 len, u32 *buf, u32 buf_size);
>> +int xe_guc_relay_send_to_pf(struct xe_guc_relay *relay,
>> +			    const u32 *msg, u32 len, u32 *buf, u32 buf_size);
>> +
>> +int xe_guc_relay_process_guc2vf(struct xe_guc_relay *relay, const u32 *msg, u32 len);
>> +
>> +#ifdef CONFIG_PCI_IOV
>> +int xe_guc_relay_process_guc2pf(struct xe_guc_relay *relay, const u32 *msg, u32 len);
>> +#else
>> +static inline int xe_guc_relay_process_guc2pf(struct xe_guc_relay *relay, const u32 *msg, u32 len)
>> +{
>> +	return -ENODEV;
>> +}
>> +#endif
>> +
>> +#endif
>> diff --git a/drivers/gpu/drm/xe/xe_guc_relay_types.h b/drivers/gpu/drm/xe/xe_guc_relay_types.h
>> new file mode 100644
>> index 000000000000..600e10cd727e
>> --- /dev/null
>> +++ b/drivers/gpu/drm/xe/xe_guc_relay_types.h
>> @@ -0,0 +1,36 @@
>> +/* SPDX-License-Identifier: MIT */
>> +/*
>> + * Copyright © 2023 Intel Corporation
>> + */
>> +
>> +#ifndef _XE_GUC_RELAY_TYPES_H_
>> +#define _XE_GUC_RELAY_TYPES_H_
>> +
>> +#include <linux/mempool.h>
>> +#include <linux/spinlock.h>
>> +#include <linux/workqueue.h>
>> +
>> +/**
>> + * struct xe_guc_relay - Data used by the VF-PF Relay Communication over GuC.
>> + */
>> +struct xe_guc_relay {
>> +	/**@lock: protects all internal data. */
>> +	spinlock_t lock;
>> +
>> +	/** @worker: dispathes incoming action messages. */
> 
> typo: dispatches
> 
> 
>> +	struct work_struct worker;
>> +
>> +	/** @pending_relays: list of sent requests that await a response. */
>> +	struct list_head pending_relays;
>> +
>> +	/** @incoming_actions: list of incoming relay action messages to process. */
>> +	struct list_head incoming_actions;
>> +
>> +	/** @pool: pool of the relay message buffers. */
>> +	mempool_t pool;
>> +
>> +	/** @last_rid: last Relay-ID used while sending a message. */
>> +	u32 last_rid;
>> +};
>> +
>> +#endif
>> diff --git a/drivers/gpu/drm/xe/xe_guc_types.h b/drivers/gpu/drm/xe/xe_guc_types.h
>> index 16de203c62a7..dc6059de669c 100644
>> --- a/drivers/gpu/drm/xe/xe_guc_types.h
>> +++ b/drivers/gpu/drm/xe/xe_guc_types.h
>> @@ -15,6 +15,7 @@
>>  #include "xe_guc_fwif.h"
>>  #include "xe_guc_log_types.h"
>>  #include "xe_guc_pc_types.h"
>> +#include "xe_guc_relay_types.h"
>>  #include "xe_uc_fw_types.h"
>>  
>>  /**
>> @@ -85,6 +86,9 @@ struct xe_guc {
>>  		u32 size;
>>  	} hwconfig;
>>  
>> +	/** @relay: GuC Relay Communication used in SR-IOV */
>> +	struct xe_guc_relay relay;
>> +
>>  	/**
>>  	 * @notify_reg: Register which is written to notify GuC of H2G messages
>>  	 */
> 
> With fixes:
> Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com>
> 
>> -- 
>> 2.25.1
>>
> 

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

* ✓ CI.Patch_applied: success for Introduce Relay Communication for SR-IOV
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
                   ` (9 preceding siblings ...)
  2023-12-27 23:58 ` [PATCH 10/10] drm/xe/guc: Start handling GuC Relay event messages Michal Wajdeczko
@ 2024-01-04  5:43 ` Patchwork
  2024-01-04  5:43 ` ✗ CI.checkpatch: warning " Patchwork
                   ` (5 subsequent siblings)
  16 siblings, 0 replies; 30+ messages in thread
From: Patchwork @ 2024-01-04  5:43 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

== Series Details ==

Series: Introduce Relay Communication for SR-IOV
URL   : https://patchwork.freedesktop.org/series/128042/
State : success

== Summary ==

=== Applying kernel patches on branch 'drm-xe-next' with base: ===
Base commit: 7b3b98d03 drm/xe/xe2: Add workaround 16020183090
=== git am output follows ===
Applying: drm/xe: Allocate dedicated workqueue for SR-IOV workers
Applying: drm/xe: Define Virtual Function Identifier
Applying: drm/xe: Introduce GT-oriented SR-IOV logging macros
Applying: drm/xe/guc: Add helpers for HXG messages
Applying: drm/xe/guc: Update few GuC CTB ABI definitions
Applying: drm/xe/guc: Add Relay Communication ABI definitions
Applying: drm/xe/guc: Introduce Relay Communication for SR-IOV
Applying: drm/xe/kunit: Allow to replace xe_guc_ct_send_recv() with stub
Applying: drm/xe/kunit: Add GuC Relay kunit tests
Applying: drm/xe/guc: Start handling GuC Relay event messages



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

* ✗ CI.checkpatch: warning for Introduce Relay Communication for SR-IOV
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
                   ` (10 preceding siblings ...)
  2024-01-04  5:43 ` ✓ CI.Patch_applied: success for Introduce Relay Communication for SR-IOV Patchwork
@ 2024-01-04  5:43 ` Patchwork
  2024-01-04  5:44 ` ✓ CI.KUnit: success " Patchwork
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 30+ messages in thread
From: Patchwork @ 2024-01-04  5:43 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

== Series Details ==

Series: Introduce Relay Communication for SR-IOV
URL   : https://patchwork.freedesktop.org/series/128042/
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
6030b24c1386b00de8187b5fb987e283a57b372a
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit 5ed55f6e30ac2cefac3949946501cab41823bc81
Author: Michal Wajdeczko <michal.wajdeczko@intel.com>
Date:   Thu Dec 28 00:58:38 2023 +0100

    drm/xe/guc: Start handling GuC Relay event messages
    
    GuC Relay infrastructure is ready, start handling relay messages
    from the GuC to unblock testing on the live system.
    
    Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com>
    Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com>
+ /mt/dim checkpatch 7b3b98d034784b125bad7aca46f9e7a3cfcde45a drm-intel
868529207 drm/xe: Allocate dedicated workqueue for SR-IOV workers
38a530fd5 drm/xe: Define Virtual Function Identifier
841981526 drm/xe: Introduce GT-oriented SR-IOV logging macros
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
-:17: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#17: 
new file mode 100644

-:33: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'gt' - possible side-effects?
#33: FILE: drivers/gpu/drm/xe/xe_gt_sriov_printk.h:12:
+#define __xe_gt_sriov_printk(gt, _level, fmt, ...) \
+	xe_gt_printk((gt), _level, "%s" fmt, xe_sriov_printk_prefix(gt_to_xe(gt)), ##__VA_ARGS__)

total: 0 errors, 1 warnings, 1 checks, 34 lines checked
560790118 drm/xe/guc: Add helpers for HXG messages
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
-:18: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#18: 
new file mode 100644

total: 0 errors, 1 warnings, 0 checks, 107 lines checked
f6ef6609e drm/xe/guc: Update few GuC CTB ABI definitions
4bfd47c54 drm/xe/guc: Add Relay Communication ABI definitions
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
-:20: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#20: 
new file mode 100644

-:72: CHECK:CAMELCASE: Avoid CamelCase: <GUC_HXG_EVENT_MSG_n_DATAn>
#72: FILE: drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h:48:
+#define GUC2PF_RELAY_FROM_VF_EVENT_MSG_1_VFID		GUC_HXG_EVENT_MSG_n_DATAn

-:114: CHECK:CAMELCASE: Avoid CamelCase: <GUC_HXG_REQUEST_MSG_n_DATAn>
#114: FILE: drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h:90:
+#define PF2GUC_RELAY_TO_VF_REQUEST_MSG_1_VFID		GUC_HXG_REQUEST_MSG_n_DATAn

total: 0 errors, 1 warnings, 2 checks, 371 lines checked
01288ad3f drm/xe/guc: Introduce Relay Communication for SR-IOV
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
-:61: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#61: 
new file mode 100644

-:459: CHECK:PARENTHESIS_ALIGNMENT: Alignment should match open parenthesis
#459: FILE: drivers/gpu/drm/xe/xe_guc_relay.c:394:
+static int relay_send_message_and_wait(struct xe_guc_relay *relay,
+					struct relay_transaction *txn,

-:655: ERROR:INITIALISED_STATIC: do not initialise statics to 0
#655: FILE: drivers/gpu/drm/xe/xe_guc_relay.c:590:
+	static ktime_t last_reply = 0;

-:782: CHECK:LINE_SPACING: Please don't use multiple blank lines
#782: FILE: drivers/gpu/drm/xe/xe_guc_relay.c:717:
+
+

total: 1 errors, 1 warnings, 2 checks, 1026 lines checked
f6dd0223f drm/xe/kunit: Allow to replace xe_guc_ct_send_recv() with stub
7e93665f6 drm/xe/kunit: Add GuC Relay kunit tests
Traceback (most recent call last):
  File "scripts/spdxcheck.py", line 6, in <module>
    from ply import lex, yacc
ModuleNotFoundError: No module named 'ply'
-:16: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#16: 
new file mode 100644

-:249: WARNING:FUNCTION_ARGUMENTS: function definition argument 'struct xe_guc_relay *' should also have an identifier name
#249: FILE: drivers/gpu/drm/xe/tests/xe_guc_relay_test.c:229:
+	int (*guc2relay)(struct xe_guc_relay *, const u32 *, u32);

-:249: WARNING:FUNCTION_ARGUMENTS: function definition argument 'const u32 *' should also have an identifier name
#249: FILE: drivers/gpu/drm/xe/tests/xe_guc_relay_test.c:229:
+	int (*guc2relay)(struct xe_guc_relay *, const u32 *, u32);

-:249: WARNING:FUNCTION_ARGUMENTS: function definition argument 'u32' should also have an identifier name
#249: FILE: drivers/gpu/drm/xe/tests/xe_guc_relay_test.c:229:
+	int (*guc2relay)(struct xe_guc_relay *, const u32 *, u32);

total: 0 errors, 4 warnings, 0 checks, 573 lines checked
5ed55f6e3 drm/xe/guc: Start handling GuC Relay event messages



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

* ✓ CI.KUnit: success for Introduce Relay Communication for SR-IOV
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
                   ` (11 preceding siblings ...)
  2024-01-04  5:43 ` ✗ CI.checkpatch: warning " Patchwork
@ 2024-01-04  5:44 ` Patchwork
  2024-01-04  5:52 ` ✓ CI.Build: " Patchwork
                   ` (3 subsequent siblings)
  16 siblings, 0 replies; 30+ messages in thread
From: Patchwork @ 2024-01-04  5:44 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

== Series Details ==

Series: Introduce Relay Communication for SR-IOV
URL   : https://patchwork.freedesktop.org/series/128042/
State : success

== Summary ==

+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
stty: 'standard input': Inappropriate ioctl for device
[05:43:36] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[05:43:41] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
[05:44:04] Starting KUnit Kernel (1/1)...
[05:44:04] ============================================================
[05:44:04] ========================= guc_dbm  =========================
[05:44:04] [PASSED] test_empty
[05:44:04] [PASSED] test_default
[05:44:04] ======================== test_size  ========================
[05:44:04] [PASSED] 4
[05:44:04] [PASSED] 8
[05:44:04] [PASSED] 32
[05:44:04] [PASSED] 256
[05:44:04] ==================== [PASSED] test_size ====================
[05:44:04] ======================= test_reuse  ========================
[05:44:04] [PASSED] 4
[05:44:04] [PASSED] 8
[05:44:04] [PASSED] 32
[05:44:04] [PASSED] 256
[05:44:04] =================== [PASSED] test_reuse ====================
[05:44:04] =================== test_range_overlap  ====================
[05:44:04] [PASSED] 4
[05:44:04] [PASSED] 8
[05:44:04] [PASSED] 32
[05:44:04] [PASSED] 256
[05:44:04] =============== [PASSED] test_range_overlap ================
[05:44:04] =================== test_range_compact  ====================
[05:44:04] [PASSED] 4
[05:44:04] [PASSED] 8
[05:44:04] [PASSED] 32
[05:44:04] [PASSED] 256
[05:44:04] =============== [PASSED] test_range_compact ================
[05:44:04] ==================== test_range_spare  =====================
[05:44:04] [PASSED] 4
[05:44:04] [PASSED] 8
[05:44:04] [PASSED] 32
[05:44:04] [PASSED] 256
[05:44:04] ================ [PASSED] test_range_spare =================
[05:44:04] ===================== [PASSED] guc_dbm =====================
[05:44:04] ======================== no_relay  =========================
[05:44:04] [PASSED] xe_drops_guc2pf_if_not_ready
[05:44:04] [PASSED] xe_drops_guc2vf_if_not_ready
[05:44:04] [PASSED] xe_rejects_send_if_not_ready
[05:44:04] ==================== [PASSED] no_relay =====================
[05:44:04] ======================== pf_relay  =========================
[05:44:04] [PASSED] pf_rejects_guc2pf_too_short
[05:44:04] [PASSED] pf_rejects_guc2pf_too_long
[05:44:04] [PASSED] pf_rejects_guc2pf_no_payload
[05:44:04] [PASSED] pf_fails_no_payload
[05:44:04] [PASSED] pf_fails_bad_origin
[05:44:04] [PASSED] pf_fails_bad_type
[05:44:04] [PASSED] pf_txn_reports_error
[05:44:04] [PASSED] pf_txn_sends_pf2guc
[05:44:04] [PASSED] pf_sends_pf2guc
[05:44:04] [SKIPPED] pf_loopback_nop
[05:44:04] [SKIPPED] pf_loopback_echo
[05:44:04] [SKIPPED] pf_loopback_fail
[05:44:04] [SKIPPED] pf_loopback_busy
[05:44:04] [SKIPPED] pf_loopback_retry
[05:44:04] ==================== [PASSED] pf_relay =====================
[05:44:04] ======================== vf_relay  =========================
[05:44:04] [PASSED] vf_rejects_guc2vf_too_short
[05:44:04] [PASSED] vf_rejects_guc2vf_too_long
[05:44:04] [PASSED] vf_rejects_guc2vf_no_payload
[05:44:04] ==================== [PASSED] vf_relay =====================
[05:44:04] ========================== lmtt  ===========================
[05:44:04] ======================== test_ops  =========================
[05:44:04] [PASSED] 2-level
[05:44:04] [PASSED] multi-level
[05:44:04] ==================== [PASSED] test_ops =====================
[05:44:04] ====================== [PASSED] lmtt =======================
[05:44:04] ========================== xe_bo  ==========================
[05:44:04] [SKIPPED] xe_ccs_migrate_kunit
[05:44:04] [SKIPPED] xe_bo_evict_kunit
[05:44:04] ===================== [SKIPPED] xe_bo ======================
[05:44:04] ======================= xe_dma_buf  ========================
[05:44:04] [SKIPPED] xe_dma_buf_kunit
[05:44:04] =================== [SKIPPED] xe_dma_buf ===================
[05:44:04] ======================= xe_migrate  ========================
[05:44:04] [SKIPPED] xe_migrate_sanity_kunit
[05:44:04] =================== [SKIPPED] xe_migrate ===================
[05:44:04] ========================= xe_mocs  =========================
[05:44:04] [SKIPPED] xe_live_mocs_kernel_kunit
[05:44:04] ==================== [SKIPPED] xe_mocs =====================
[05:44:04] ========================= xe_pci  ==========================
[05:44:04] [PASSED] xe_gmdid_graphics_ip
[05:44:04] [PASSED] xe_gmdid_media_ip
[05:44:04] ===================== [PASSED] xe_pci ======================
[05:44:04] ========================= xe_rtp  ==========================
[05:44:04] ================== xe_rtp_process_tests  ===================
[05:44:04] [PASSED] coalesce-same-reg
[05:44:04] [PASSED] no-match-no-add
[05:44:04] [PASSED] no-match-no-add-multiple-rules
[05:44:04] [PASSED] two-regs-two-entries
[05:44:04] [PASSED] clr-one-set-other
[05:44:04] [PASSED] set-field
[05:44:04] [PASSED] conflict-duplicate
[05:44:04] [PASSED] conflict-not-disjoint
[05:44:04] [PASSED] conflict-reg-type
[05:44:04] ============== [PASSED] xe_rtp_process_tests ===============
[05:44:04] ===================== [PASSED] xe_rtp ======================
[05:44:04] ========================== xe_wa  ==========================
[05:44:04] ======================== xe_wa_gt  =========================
[05:44:04] [PASSED] TIGERLAKE (B0)
[05:44:04] [PASSED] DG1 (A0)
[05:44:04] [PASSED] DG1 (B0)
[05:44:04] [PASSED] ALDERLAKE_S (A0)
[05:44:04] [PASSED] ALDERLAKE_S (B0)
[05:44:04] [PASSED] ALDERLAKE_S (C0)
[05:44:04] [PASSED] ALDERLAKE_S (D0)
[05:44:04] [PASSED] ALDERLAKE_P (A0)
[05:44:04] [PASSED] ALDERLAKE_P (B0)
[05:44:04] [PASSED] ALDERLAKE_P (C0)
[05:44:04] [PASSED] ALDERLAKE_S_RPLS (D0)
[05:44:04] [PASSED] ALDERLAKE_P_RPLU (E0)
[05:44:04] [PASSED] DG2_G10 (A0)
[05:44:04] [PASSED] DG2_G10 (A1)
[05:44:04] [PASSED] DG2_G10 (B0)
[05:44:04] [PASSED] DG2_G10 (C0)
[05:44:04] [PASSED] DG2_G11 (A0)
[05:44:04] [PASSED] DG2_G11 (B0)
[05:44:04] [PASSED] DG2_G11 (B1)
[05:44:04] [PASSED] DG2_G12 (A0)
[05:44:04] [PASSED] DG2_G12 (A1)
[05:44:04] [PASSED] PVC (B0)
[05:44:04] [PASSED] PVC (B1)
[05:44:04] [PASSED] PVC (C0)
[05:44:04] [PASSED] METEORLAKE (g:A0, m:A0)
[05:44:04] [PASSED] METEORLAKE (g:A0, m:A0)
[05:44:04] [PASSED] LUNARLAKE (g:A0, m:A0)
[05:44:04] [PASSED] LUNARLAKE (g:B0, m:A0)
[05:44:04] ==================== [PASSED] xe_wa_gt =====================
[05:44:04] ====================== [PASSED] xe_wa ======================
[05:44:04] ============================================================
[05:44:04] Testing complete. Ran 88 tests: passed: 78, skipped: 10
[05:44:04] Elapsed time: 27.273s total, 4.196s configuring, 22.857s building, 0.192s running

+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[05:44:04] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[05:44:05] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
[05:44:25] Starting KUnit Kernel (1/1)...
[05:44:25] ============================================================
[05:44:25] ================== drm_test_pick_cmdline  ==================
[05:44:25] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[05:44:25] =============== drm_test_pick_cmdline_named  ===============
[05:44:25] [PASSED] NTSC
[05:44:25] [PASSED] NTSC-J
[05:44:25] [PASSED] PAL
[05:44:25] [PASSED] PAL-M
[05:44:25] =========== [PASSED] drm_test_pick_cmdline_named ===========
[05:44:25] ============== [PASSED] drm_test_pick_cmdline ==============
[05:44:25] ======================== drm_buddy  ========================
[05:44:25] [PASSED] drm_test_buddy_alloc_limit
[05:44:25] [PASSED] drm_test_buddy_alloc_optimistic
[05:44:25] [PASSED] drm_test_buddy_alloc_pessimistic
[05:44:25] [PASSED] drm_test_buddy_alloc_pathological
[05:44:25] ==================== [PASSED] drm_buddy ====================
[05:44:25] =================== drm_cmdline_parser  ====================
[05:44:25] [PASSED] drm_test_cmdline_force_d_only
[05:44:25] [PASSED] drm_test_cmdline_force_D_only_dvi
[05:44:25] [PASSED] drm_test_cmdline_force_D_only_hdmi
[05:44:25] [PASSED] drm_test_cmdline_force_D_only_not_digital
[05:44:25] [PASSED] drm_test_cmdline_force_e_only
[05:44:25] [PASSED] drm_test_cmdline_res
[05:44:25] [PASSED] drm_test_cmdline_res_vesa
[05:44:25] [PASSED] drm_test_cmdline_res_vesa_rblank
[05:44:25] [PASSED] drm_test_cmdline_res_rblank
[05:44:25] [PASSED] drm_test_cmdline_res_bpp
[05:44:25] [PASSED] drm_test_cmdline_res_refresh
[05:44:25] [PASSED] drm_test_cmdline_res_bpp_refresh
[05:44:25] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[05:44:25] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[05:44:25] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[05:44:25] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[05:44:25] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[05:44:25] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[05:44:25] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[05:44:25] [PASSED] drm_test_cmdline_res_margins_force_on
[05:44:25] [PASSED] drm_test_cmdline_res_vesa_margins
[05:44:25] [PASSED] drm_test_cmdline_name
[05:44:25] [PASSED] drm_test_cmdline_name_bpp
[05:44:25] [PASSED] drm_test_cmdline_name_option
[05:44:25] [PASSED] drm_test_cmdline_name_bpp_option
[05:44:25] [PASSED] drm_test_cmdline_rotate_0
[05:44:25] [PASSED] drm_test_cmdline_rotate_90
[05:44:25] [PASSED] drm_test_cmdline_rotate_180
[05:44:25] [PASSED] drm_test_cmdline_rotate_270
[05:44:25] [PASSED] drm_test_cmdline_hmirror
[05:44:25] [PASSED] drm_test_cmdline_vmirror
[05:44:25] [PASSED] drm_test_cmdline_margin_options
[05:44:25] [PASSED] drm_test_cmdline_multiple_options
[05:44:25] [PASSED] drm_test_cmdline_bpp_extra_and_option
[05:44:25] [PASSED] drm_test_cmdline_extra_and_option
[05:44:25] [PASSED] drm_test_cmdline_freestanding_options
[05:44:25] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[05:44:25] [PASSED] drm_test_cmdline_panel_orientation
[05:44:25] ================ drm_test_cmdline_invalid  =================
[05:44:25] [PASSED] margin_only
[05:44:25] [PASSED] interlace_only
[05:44:25] [PASSED] res_missing_x
[05:44:25] [PASSED] res_missing_y
[05:44:25] [PASSED] res_bad_y
[05:44:25] [PASSED] res_missing_y_bpp
[05:44:25] [PASSED] res_bad_bpp
[05:44:25] [PASSED] res_bad_refresh
[05:44:25] [PASSED] res_bpp_refresh_force_on_off
[05:44:25] [PASSED] res_invalid_mode
[05:44:25] [PASSED] res_bpp_wrong_place_mode
[05:44:25] [PASSED] name_bpp_refresh
[05:44:25] [PASSED] name_refresh
[05:44:25] [PASSED] name_refresh_wrong_mode
[05:44:25] [PASSED] name_refresh_invalid_mode
[05:44:25] [PASSED] rotate_multiple
[05:44:25] [PASSED] rotate_invalid_val
[05:44:25] [PASSED] rotate_truncated
[05:44:25] [PASSED] invalid_option
[05:44:25] [PASSED] invalid_tv_option
[05:44:25] [PASSED] truncated_tv_option
[05:44:25] ============ [PASSED] drm_test_cmdline_invalid =============
[05:44:25] =============== drm_test_cmdline_tv_options  ===============
[05:44:25] [PASSED] NTSC
[05:44:25] [PASSED] NTSC_443
[05:44:25] [PASSED] NTSC_J
[05:44:25] [PASSED] PAL
[05:44:25] [PASSED] PAL_M
[05:44:25] [PASSED] PAL_N
[05:44:25] [PASSED] SECAM
[05:44:25] =========== [PASSED] drm_test_cmdline_tv_options ===========
[05:44:25] =============== [PASSED] drm_cmdline_parser ================
[05:44:25] ================ drm_get_tv_mode_from_name  ================
[05:44:25] ========== drm_test_get_tv_mode_from_name_valid  ===========
[05:44:25] [PASSED] NTSC
[05:44:25] [PASSED] NTSC-443
[05:44:25] [PASSED] NTSC-J
[05:44:25] [PASSED] PAL
[05:44:25] [PASSED] PAL-M
[05:44:25] [PASSED] PAL-N
[05:44:25] [PASSED] SECAM
[05:44:25] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[05:44:25] [PASSED] drm_test_get_tv_mode_from_name_truncated
[05:44:25] ============ [PASSED] drm_get_tv_mode_from_name ============
[05:44:25] ==================== drm_damage_helper  ====================
[05:44:25] [PASSED] drm_test_damage_iter_no_damage
[05:44:25] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[05:44:25] [PASSED] drm_test_damage_iter_no_damage_src_moved
[05:44:25] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[05:44:25] [PASSED] drm_test_damage_iter_no_damage_not_visible
[05:44:25] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[05:44:25] [PASSED] drm_test_damage_iter_no_damage_no_fb
[05:44:25] [PASSED] drm_test_damage_iter_simple_damage
[05:44:25] [PASSED] drm_test_damage_iter_single_damage
[05:44:25] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[05:44:25] [PASSED] drm_test_damage_iter_single_damage_outside_src
[05:44:25] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[05:44:25] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[05:44:25] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[05:44:25] [PASSED] drm_test_damage_iter_single_damage_src_moved
[05:44:25] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[05:44:25] [PASSED] drm_test_damage_iter_damage
[05:44:25] [PASSED] drm_test_damage_iter_damage_one_intersect
[05:44:25] [PASSED] drm_test_damage_iter_damage_one_outside
[05:44:25] [PASSED] drm_test_damage_iter_damage_src_moved
[05:44:25] [PASSED] drm_test_damage_iter_damage_not_visible
[05:44:25] ================ [PASSED] drm_damage_helper ================
[05:44:25] ==================== drm_dp_mst_helper  ====================
[05:44:25] ============== drm_test_dp_mst_calc_pbn_mode  ==============
[05:44:25] [PASSED] Clock 154000 BPP 30 DSC disabled
[05:44:25] [PASSED] Clock 234000 BPP 30 DSC disabled
[05:44:25] [PASSED] Clock 297000 BPP 24 DSC disabled
[05:44:25] [PASSED] Clock 332880 BPP 24 DSC enabled
[05:44:25] [PASSED] Clock 324540 BPP 24 DSC enabled
[05:44:25] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[05:44:25] ============== drm_test_dp_mst_calc_pbn_div  ===============
[05:44:25] [PASSED] Link rate 2000000 lane count 4
[05:44:25] [PASSED] Link rate 2000000 lane count 2
[05:44:25] [PASSED] Link rate 2000000 lane count 1
[05:44:25] [PASSED] Link rate 1350000 lane count 4
[05:44:25] [PASSED] Link rate 1350000 lane count 2
[05:44:25] [PASSED] Link rate 1350000 lane count 1
[05:44:25] [PASSED] Link rate 1000000 lane count 4
[05:44:25] [PASSED] Link rate 1000000 lane count 2
[05:44:25] [PASSED] Link rate 1000000 lane count 1
[05:44:25] [PASSED] Link rate 810000 lane count 4
[05:44:25] [PASSED] Link rate 810000 lane count 2
[05:44:25] [PASSED] Link rate 810000 lane count 1
[05:44:25] [PASSED] Link rate 540000 lane count 4
[05:44:25] [PASSED] Link rate 540000 lane count 2
[05:44:25] [PASSED] Link rate 540000 lane count 1
[05:44:25] [PASSED] Link rate 270000 lane count 4
[05:44:25] [PASSED] Link rate 270000 lane count 2
[05:44:25] [PASSED] Link rate 270000 lane count 1
[05:44:25] [PASSED] Link rate 162000 lane count 4
[05:44:25] [PASSED] Link rate 162000 lane count 2
[05:44:25] [PASSED] Link rate 162000 lane count 1
[05:44:25] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[05:44:25] ========= drm_test_dp_mst_sideband_msg_req_decode  =========
[05:44:25] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[05:44:25] [PASSED] DP_POWER_UP_PHY with port number
[05:44:25] [PASSED] DP_POWER_DOWN_PHY with port number
[05:44:25] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[05:44:25] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[05:44:25] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[05:44:25] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[05:44:25] [PASSED] DP_QUERY_PAYLOAD with port number
[05:44:25] [PASSED] DP_QUERY_PAYLOAD with VCPI
[05:44:25] [PASSED] DP_REMOTE_DPCD_READ with port number
[05:44:25] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[05:44:25] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[05:44:25] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[05:44:25] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[05:44:25] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[05:44:25] [PASSED] DP_REMOTE_I2C_READ with port number
[05:44:25] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[05:44:25] [PASSED] DP_REMOTE_I2C_READ with transactions array
[05:44:25] [PASSED] DP_REMOTE_I2C_WRITE with port number
[05:44:25] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[05:44:25] [PASSED] DP_REMOTE_I2C_WRITE with data array
[05:44:25] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[05:44:25] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[05:44:25] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[05:44:25] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[05:44:25] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[05:44:25] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[05:44:25] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[05:44:25] ================ [PASSED] drm_dp_mst_helper ================
[05:44:25] ======================== drm_exec  =========================
[05:44:25] [PASSED] sanitycheck
[05:44:25] [PASSED] test_lock
[05:44:25] [PASSED] test_lock_unlock
[05:44:25] [PASSED] test_duplicates
[05:44:25] [PASSED] test_prepare
[05:44:25] [PASSED] test_prepare_array
[05:44:25] [PASSED] test_multiple_loops
[05:44:25] ==================== [PASSED] drm_exec =====================
[05:44:25] ================= drm_format_helper_test  ==================
[05:44:25] ============== drm_test_fb_xrgb8888_to_gray8  ==============
[05:44:25] [PASSED] single_pixel_source_buffer
[05:44:25] [PASSED] single_pixel_clip_rectangle
[05:44:25] [PASSED] well_known_colors
[05:44:25] [PASSED] destination_pitch
[05:44:25] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[05:44:25] ============= drm_test_fb_xrgb8888_to_rgb332  ==============
[05:44:25] [PASSED] single_pixel_source_buffer
[05:44:25] [PASSED] single_pixel_clip_rectangle
[05:44:25] [PASSED] well_known_colors
[05:44:25] [PASSED] destination_pitch
[05:44:25] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[05:44:25] ============= drm_test_fb_xrgb8888_to_rgb565  ==============
[05:44:25] [PASSED] single_pixel_source_buffer
[05:44:25] [PASSED] single_pixel_clip_rectangle
[05:44:25] [PASSED] well_known_colors
[05:44:25] [PASSED] destination_pitch
[05:44:25] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[05:44:25] ============ drm_test_fb_xrgb8888_to_xrgb1555  =============
[05:44:25] [PASSED] single_pixel_source_buffer
[05:44:25] [PASSED] single_pixel_clip_rectangle
[05:44:25] [PASSED] well_known_colors
[05:44:25] [PASSED] destination_pitch
[05:44:25] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[05:44:25] ============ drm_test_fb_xrgb8888_to_argb1555  =============
[05:44:25] [PASSED] single_pixel_source_buffer
[05:44:25] [PASSED] single_pixel_clip_rectangle
[05:44:25] [PASSED] well_known_colors
[05:44:25] [PASSED] destination_pitch
[05:44:25] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[05:44:25] ============ drm_test_fb_xrgb8888_to_rgba5551  =============
[05:44:25] [PASSED] single_pixel_source_buffer
[05:44:25] [PASSED] single_pixel_clip_rectangle
[05:44:25] [PASSED] well_known_colors
[05:44:25] [PASSED] destination_pitch
[05:44:25] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[05:44:25] ============= drm_test_fb_xrgb8888_to_rgb888  ==============
[05:44:25] [PASSED] single_pixel_source_buffer
[05:44:25] [PASSED] single_pixel_clip_rectangle
[05:44:25] [PASSED] well_known_colors
[05:44:25] [PASSED] destination_pitch
[05:44:25] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[05:44:25] ============ drm_test_fb_xrgb8888_to_argb8888  =============
[05:44:25] [PASSED] single_pixel_source_buffer
[05:44:25] [PASSED] single_pixel_clip_rectangle
[05:44:25] [PASSED] well_known_colors
[05:44:25] [PASSED] destination_pitch
[05:44:25] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[05:44:25] =========== drm_test_fb_xrgb8888_to_xrgb2101010  ===========
[05:44:25] [PASSED] single_pixel_source_buffer
[05:44:25] [PASSED] single_pixel_clip_rectangle
[05:44:25] [PASSED] well_known_colors
[05:44:25] [PASSED] destination_pitch
[05:44:25] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[05:44:25] =========== drm_test_fb_xrgb8888_to_argb2101010  ===========
[05:44:25] [PASSED] single_pixel_source_buffer
[05:44:25] [PASSED] single_pixel_clip_rectangle
[05:44:25] [PASSED] well_known_colors
[05:44:25] [PASSED] destination_pitch
[05:44:25] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[05:44:25] ============== drm_test_fb_xrgb8888_to_mono  ===============
[05:44:25] [PASSED] single_pixel_source_buffer
[05:44:25] [PASSED] single_pixel_clip_rectangle
[05:44:25] [PASSED] well_known_colors
[05:44:25] [PASSED] destination_pitch
[05:44:25] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[05:44:25] ==================== drm_test_fb_swab  =====================
[05:44:25] [PASSED] single_pixel_source_buffer
[05:44:25] [PASSED] single_pixel_clip_rectangle
[05:44:25] [PASSED] well_known_colors
[05:44:25] [PASSED] destination_pitch
[05:44:25] ================ [PASSED] drm_test_fb_swab =================
[05:44:25] ============ drm_test_fb_xrgb8888_to_xbgr8888  =============
[05:44:25] [PASSED] single_pixel_source_buffer
[05:44:25] [PASSED] single_pixel_clip_rectangle
[05:44:25] [PASSED] well_known_colors
[05:44:25] [PASSED] destination_pitch
[05:44:25] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[05:44:25] ============ drm_test_fb_xrgb8888_to_abgr8888  =============
[05:44:25] [PASSED] single_pixel_source_buffer
[05:44:25] [PASSED] single_pixel_clip_rectangle
[05:44:25] [PASSED] well_known_colors
[05:44:25] [PASSED] destination_pitch
[05:44:25] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[05:44:25] ================= drm_test_fb_clip_offset  =================
[05:44:25] [PASSED] pass through
[05:44:25] [PASSED] horizontal offset
[05:44:25] [PASSED] vertical offset
[05:44:25] [PASSED] horizontal and vertical offset
[05:44:25] [PASSED] horizontal offset (custom pitch)
[05:44:25] [PASSED] vertical offset (custom pitch)
[05:44:26] [PASSED] horizontal and vertical offset (custom pitch)
[05:44:26] ============= [PASSED] drm_test_fb_clip_offset =============
[05:44:26] ============== drm_test_fb_build_fourcc_list  ==============
[05:44:26] [PASSED] no native formats
[05:44:26] [PASSED] XRGB8888 as native format
[05:44:26] [PASSED] remove duplicates
[05:44:26] [PASSED] convert alpha formats
[05:44:26] [PASSED] random formats
[05:44:26] ========== [PASSED] drm_test_fb_build_fourcc_list ==========
[05:44:26] =================== drm_test_fb_memcpy  ====================
[05:44:26] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[05:44:26] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[05:44:26] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[05:44:26] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[05:44:26] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[05:44:26] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[05:44:26] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[05:44:26] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[05:44:26] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[05:44:26] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[05:44:26] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[05:44:26] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[05:44:26] =============== [PASSED] drm_test_fb_memcpy ================
[05:44:26] ============= [PASSED] drm_format_helper_test ==============
[05:44:26] ======================= drm_format  ========================
[05:44:26] [PASSED] drm_test_format_block_width_invalid
[05:44:26] [PASSED] drm_test_format_block_width_one_plane
[05:44:26] [PASSED] drm_test_format_block_width_two_plane
[05:44:26] [PASSED] drm_test_format_block_width_three_plane
[05:44:26] [PASSED] drm_test_format_block_width_tiled
[05:44:26] [PASSED] drm_test_format_block_height_invalid
[05:44:26] [PASSED] drm_test_format_block_height_one_plane
[05:44:26] [PASSED] drm_test_format_block_height_two_plane
[05:44:26] [PASSED] drm_test_format_block_height_three_plane
[05:44:26] [PASSED] drm_test_format_block_height_tiled
[05:44:26] [PASSED] drm_test_format_min_pitch_invalid
[05:44:26] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[05:44:26] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[05:44:26] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[05:44:26] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[05:44:26] [PASSED] drm_test_format_min_pitch_two_plane
[05:44:26] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[05:44:26] [PASSED] drm_test_format_min_pitch_tiled
[05:44:26] =================== [PASSED] drm_format ====================
[05:44:26] ===================== drm_framebuffer  =====================
[05:44:26] =============== drm_test_framebuffer_create  ===============
[05:44:26] [PASSED] ABGR8888 normal sizes
[05:44:26] [PASSED] ABGR8888 max sizes
[05:44:26] [PASSED] ABGR8888 pitch greater than min required
[05:44:26] [PASSED] ABGR8888 pitch less than min required
[05:44:26] [PASSED] ABGR8888 Invalid width
[05:44:26] [PASSED] ABGR8888 Invalid buffer handle
[05:44:26] [PASSED] No pixel format
[05:44:26] [PASSED] ABGR8888 Width 0
[05:44:26] [PASSED] ABGR8888 Height 0
[05:44:26] [PASSED] ABGR8888 Out of bound height * pitch combination
[05:44:26] [PASSED] ABGR8888 Large buffer offset
[05:44:26] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[05:44:26] [PASSED] ABGR8888 Valid buffer modifier
[05:44:26] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[05:44:26] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[05:44:26] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[05:44:26] [PASSED] NV12 Normal sizes
[05:44:26] [PASSED] NV12 Max sizes
[05:44:26] [PASSED] NV12 Invalid pitch
[05:44:26] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[05:44:26] [PASSED] NV12 different  modifier per-plane
[05:44:26] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[05:44:26] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[05:44:26] [PASSED] NV12 Modifier for inexistent plane
[05:44:26] [PASSED] NV12 Handle for inexistent plane
[05:44:26] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[05:44:26] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[05:44:26] [PASSED] YVU420 Normal sizes
[05:44:26] [PASSED] YVU420 Max sizes
[05:44:26] [PASSED] YVU420 Invalid pitch
[05:44:26] [PASSED] YVU420 Different pitches
[05:44:26] [PASSED] YVU420 Different buffer offsets/pitches
[05:44:26] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[05:44:26] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[05:44:26] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[05:44:26] [PASSED] YVU420 Valid modifier
[05:44:26] [PASSED] YVU420 Different modifiers per plane
[05:44:26] [PASSED] YVU420 Modifier for inexistent plane
[05:44:26] [PASSED] X0L2 Normal sizes
[05:44:26] [PASSED] X0L2 Max sizes
[05:44:26] [PASSED] X0L2 Invalid pitch
[05:44:26] [PASSED] X0L2 Pitch greater than minimum required
[05:44:26] [PASSED] X0L2 Handle for inexistent plane
[05:44:26] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[05:44:26] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[05:44:26] [PASSED] X0L2 Valid modifier
[05:44:26] [PASSED] X0L2 Modifier for inexistent plane
[05:44:26] =========== [PASSED] drm_test_framebuffer_create ===========
[05:44:26] ================= [PASSED] drm_framebuffer =================
[05:44:26] ====================== drm_gem_shmem  ======================
[05:44:26] [PASSED] drm_gem_shmem_test_obj_create
[05:44:26] [PASSED] drm_gem_shmem_test_obj_create_private
[05:44:26] [PASSED] drm_gem_shmem_test_pin_pages
[05:44:26] [PASSED] drm_gem_shmem_test_vmap
[05:44:26] [PASSED] drm_gem_shmem_test_get_pages_sgt
[05:44:26] [PASSED] drm_gem_shmem_test_get_sg_table
[05:44:26] [PASSED] drm_gem_shmem_test_madvise
[05:44:26] [PASSED] drm_gem_shmem_test_purge
[05:44:26] ================== [PASSED] drm_gem_shmem ==================
[05:44:26] ==================== drm-test-managed  =====================
[05:44:26] [PASSED] drm_test_managed_run_action
[05:44:26] ================ [PASSED] drm-test-managed =================
[05:44:26] ========================= drm_mm  ==========================
[05:44:26] [PASSED] drm_test_mm_init
[05:44:26] [PASSED] drm_test_mm_debug
[05:44:26] [PASSED] drm_test_mm_align32
[05:44:26] [PASSED] drm_test_mm_align64
[05:44:26] [PASSED] drm_test_mm_lowest
[05:44:26] [PASSED] drm_test_mm_highest
[05:44:26] ===================== [PASSED] drm_mm ======================
[05:44:26] =================== drm_modes_analog_tv  ===================
[05:44:26] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[05:44:26] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[05:44:26] [PASSED] drm_test_modes_analog_tv_pal_576i
[05:44:26] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[05:44:26] =============== [PASSED] drm_modes_analog_tv ===============
[05:44:26] ==================== drm_plane_helper  =====================
[05:44:26] =============== drm_test_check_plane_state  ================
[05:44:26] [PASSED] clipping_simple
[05:44:26] [PASSED] clipping_rotate_reflect
[05:44:26] [PASSED] positioning_simple
[05:44:26] [PASSED] upscaling
[05:44:26] [PASSED] downscaling
[05:44:26] [PASSED] rounding1
[05:44:26] [PASSED] rounding2
[05:44:26] [PASSED] rounding3
[05:44:26] [PASSED] rounding4
[05:44:26] =========== [PASSED] drm_test_check_plane_state ============
[05:44:26] =========== drm_test_check_invalid_plane_state  ============
[05:44:26] [PASSED] positioning_invalid
[05:44:26] [PASSED] upscaling_invalid
[05:44:26] [PASSED] downscaling_invalid
[05:44:26] ======= [PASSED] drm_test_check_invalid_plane_state ========
[05:44:26] ================ [PASSED] drm_plane_helper =================
[05:44:26] ============ drm_connector_helper_tv_get_modes  ============
[05:44:26] ====== drm_test_connector_helper_tv_get_modes_check  =======
[05:44:26] [PASSED] None
[05:44:26] [PASSED] PAL
[05:44:26] [PASSED] NTSC
[05:44:26] [PASSED] Both, NTSC Default
[05:44:26] [PASSED] Both, PAL Default
[05:44:26] [PASSED] Both, NTSC Default, with PAL on command-line
[05:44:26] [PASSED] Both, PAL Default, with NTSC on command-line
[05:44:26] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[05:44:26] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[05:44:26] ======================== drm_rect  =========================
[05:44:26] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[05:44:26] [PASSED] drm_test_rect_clip_scaled_not_clipped
[05:44:26] [PASSED] drm_test_rect_clip_scaled_clipped
[05:44:26] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[05:44:26] ================= drm_test_rect_intersect  =================
[05:44:26] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[05:44:26] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
stty: 'standard input': Inappropriate ioctl for device
[05:44:26] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[05:44:26] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[05:44:26] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[05:44:26] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[05:44:26] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[05:44:26] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[05:44:26] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[05:44:26] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[05:44:26] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[05:44:26] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[05:44:26] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[05:44:26] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[05:44:26] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[05:44:26] ============= [PASSED] drm_test_rect_intersect =============
[05:44:26] ================ drm_test_rect_calc_hscale  ================
[05:44:26] [PASSED] normal use
[05:44:26] [PASSED] out of max range
[05:44:26] [PASSED] out of min range
[05:44:26] [PASSED] zero dst
[05:44:26] [PASSED] negative src
[05:44:26] [PASSED] negative dst
[05:44:26] ============ [PASSED] drm_test_rect_calc_hscale ============
[05:44:26] ================ drm_test_rect_calc_vscale  ================
[05:44:26] [PASSED] normal use
[05:44:26] [PASSED] out of max range
[05:44:26] [PASSED] out of min range
[05:44:26] [PASSED] zero dst
[05:44:26] [PASSED] negative src
[05:44:26] [PASSED] negative dst
[05:44:26] ============ [PASSED] drm_test_rect_calc_vscale ============
[05:44:26] ================== drm_test_rect_rotate  ===================
[05:44:26] [PASSED] reflect-x
[05:44:26] [PASSED] reflect-y
[05:44:26] [PASSED] rotate-0
[05:44:26] [PASSED] rotate-90
[05:44:26] [PASSED] rotate-180
[05:44:26] [PASSED] rotate-270
[05:44:26] ============== [PASSED] drm_test_rect_rotate ===============
[05:44:26] ================ drm_test_rect_rotate_inv  =================
[05:44:26] [PASSED] reflect-x
[05:44:26] [PASSED] reflect-y
[05:44:26] [PASSED] rotate-0
[05:44:26] [PASSED] rotate-90
[05:44:26] [PASSED] rotate-180
[05:44:26] [PASSED] rotate-270
[05:44:26] ============ [PASSED] drm_test_rect_rotate_inv =============
[05:44:26] ==================== [PASSED] drm_rect =====================
[05:44:26] ============================================================
[05:44:26] Testing complete. Ran 390 tests: passed: 390
[05:44:26] Elapsed time: 21.708s total, 1.650s configuring, 19.933s building, 0.123s running

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



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

* ✓ CI.Build: success for Introduce Relay Communication for SR-IOV
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
                   ` (12 preceding siblings ...)
  2024-01-04  5:44 ` ✓ CI.KUnit: success " Patchwork
@ 2024-01-04  5:52 ` Patchwork
  2024-01-04  5:52 ` ✗ CI.Hooks: failure " Patchwork
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 30+ messages in thread
From: Patchwork @ 2024-01-04  5:52 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

== Series Details ==

Series: Introduce Relay Communication for SR-IOV
URL   : https://patchwork.freedesktop.org/series/128042/
State : success

== Summary ==

+ trap cleanup EXIT
+ cd /kernel
+ git clone https://gitlab.freedesktop.org/drm/xe/ci.git .ci
Cloning into '.ci'...
+ '[' -n '' ']'
++ date +%s
+ echo -e '\e[0Ksection_start:1704347075:build_x86_64[collapsed=true]\r\e[0KBuild x86-64'
+ mkdir -p build64-default
^[[0Ksection_start:1704347075:build_x86_64[collapsed=true]
^[[0KBuild x86-64
+ cp .ci/kernel/kconfig build64-default/.config
+ make O=build64-default olddefconfig
make[1]: Entering directory '/kernel/build64-default'
  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/lexer.lex.o
  HOSTCC  scripts/kconfig/menu.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/util.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
make[1]: Leaving directory '/kernel/build64-default'
++ nproc
+ make O=build64-default -j48
make[1]: Entering directory '/kernel/build64-default'
  GEN     arch/x86/include/generated/asm/orc_hash.h
  GEN     Makefile
  WRAP    arch/x86/include/generated/uapi/asm/bpf_perf_event.h
  WRAP    arch/x86/include/generated/uapi/asm/errno.h
  WRAP    arch/x86/include/generated/uapi/asm/fcntl.h
  WRAP    arch/x86/include/generated/uapi/asm/ioctl.h
  WRAP    arch/x86/include/generated/uapi/asm/ioctls.h
  UPD     include/generated/uapi/linux/version.h
  WRAP    arch/x86/include/generated/uapi/asm/ipcbuf.h
  WRAP    arch/x86/include/generated/uapi/asm/param.h
  WRAP    arch/x86/include/generated/uapi/asm/poll.h
  WRAP    arch/x86/include/generated/uapi/asm/resource.h
  WRAP    arch/x86/include/generated/uapi/asm/socket.h
  WRAP    arch/x86/include/generated/uapi/asm/sockios.h
  WRAP    arch/x86/include/generated/uapi/asm/termbits.h
  WRAP    arch/x86/include/generated/uapi/asm/termios.h
  WRAP    arch/x86/include/generated/uapi/asm/types.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_64.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_32.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_x32.h
  SYSTBL  arch/x86/include/generated/asm/syscalls_32.h
  SYSHDR  arch/x86/include/generated/asm/unistd_32_ia32.h
  SYSHDR  arch/x86/include/generated/asm/unistd_64_x32.h
  SYSTBL  arch/x86/include/generated/asm/syscalls_64.h
  UPD     include/config/kernel.release
  WRAP    arch/x86/include/generated/asm/early_ioremap.h
  HOSTCC  arch/x86/tools/relocs_32.o
  WRAP    arch/x86/include/generated/asm/mcs_spinlock.h
  WRAP    arch/x86/include/generated/asm/irq_regs.h
  WRAP    arch/x86/include/generated/asm/kmap_size.h
  HOSTCC  arch/x86/tools/relocs_64.o
  UPD     include/generated/compile.h
  HOSTCC  arch/x86/tools/relocs_common.o
  HOSTCC  scripts/unifdef
  WRAP    arch/x86/include/generated/asm/local64.h
  WRAP    arch/x86/include/generated/asm/module.lds.h
  WRAP    arch/x86/include/generated/asm/mmiowb.h
  WRAP    arch/x86/include/generated/asm/rwonce.h
  WRAP    arch/x86/include/generated/asm/unaligned.h
  HOSTCC  scripts/kallsyms
  HOSTCC  scripts/sorttable
  HOSTCC  scripts/asn1_compiler
  UPD     include/generated/utsrelease.h
mkdir -p /kernel/build64-default/tools/objtool && make O=/kernel/build64-default subdir=tools/objtool --no-print-directory -C objtool 
  HOSTCC  /kernel/build64-default/tools/objtool/fixdep.o
  HOSTLD  /kernel/build64-default/tools/objtool/fixdep-in.o
  LINK    /kernel/build64-default/tools/objtool/fixdep
  INSTALL /kernel/build64-default/tools/objtool/libsubcmd/include/subcmd/exec-cmd.h
  INSTALL /kernel/build64-default/tools/objtool/libsubcmd/include/subcmd/help.h
  INSTALL /kernel/build64-default/tools/objtool/libsubcmd/include/subcmd/pager.h
  INSTALL /kernel/build64-default/tools/objtool/libsubcmd/include/subcmd/parse-options.h
  INSTALL /kernel/build64-default/tools/objtool/libsubcmd/include/subcmd/run-command.h
  CC      /kernel/build64-default/tools/objtool/libsubcmd/exec-cmd.o
  CC      /kernel/build64-default/tools/objtool/libsubcmd/help.o
  INSTALL libsubcmd_headers
  CC      /kernel/build64-default/tools/objtool/libsubcmd/pager.o
  CC      /kernel/build64-default/tools/objtool/libsubcmd/parse-options.o
  CC      /kernel/build64-default/tools/objtool/libsubcmd/run-command.o
  CC      /kernel/build64-default/tools/objtool/libsubcmd/subcmd-config.o
  CC      /kernel/build64-default/tools/objtool/libsubcmd/sigchain.o
  HOSTLD  arch/x86/tools/relocs
  CC      scripts/mod/empty.o
  HOSTCC  scripts/mod/mk_elfconfig
  CC      scripts/mod/devicetable-offsets.s
  HDRINST usr/include/video/sisfb.h
  HDRINST usr/include/video/edid.h
  HDRINST usr/include/drm/amdgpu_drm.h
  HDRINST usr/include/video/uvesafb.h
  HDRINST usr/include/drm/qaic_accel.h
  HDRINST usr/include/drm/pvr_drm.h
  HDRINST usr/include/drm/i915_drm.h
  HDRINST usr/include/drm/vgem_drm.h
  HDRINST usr/include/drm/virtgpu_drm.h
  HDRINST usr/include/drm/xe_drm.h
  HDRINST usr/include/drm/omap_drm.h
  HDRINST usr/include/drm/radeon_drm.h
  HDRINST usr/include/drm/tegra_drm.h
  HDRINST usr/include/drm/drm_mode.h
  HDRINST usr/include/drm/ivpu_accel.h
  HDRINST usr/include/drm/exynos_drm.h
  HDRINST usr/include/drm/drm_sarea.h
  HDRINST usr/include/drm/v3d_drm.h
  HDRINST usr/include/drm/qxl_drm.h
  HDRINST usr/include/drm/drm_fourcc.h
  HDRINST usr/include/drm/nouveau_drm.h
  HDRINST usr/include/drm/habanalabs_accel.h
  HDRINST usr/include/drm/vmwgfx_drm.h
  HDRINST usr/include/drm/msm_drm.h
  HDRINST usr/include/drm/etnaviv_drm.h
  HDRINST usr/include/drm/vc4_drm.h
  HDRINST usr/include/drm/panfrost_drm.h
  HDRINST usr/include/drm/lima_drm.h
  HDRINST usr/include/drm/drm.h
  HDRINST usr/include/drm/armada_drm.h
  HDRINST usr/include/mtd/inftl-user.h
  HDRINST usr/include/mtd/nftl-user.h
  HDRINST usr/include/mtd/mtd-user.h
  HDRINST usr/include/mtd/ubi-user.h
  HDRINST usr/include/mtd/mtd-abi.h
  HDRINST usr/include/xen/gntdev.h
  HDRINST usr/include/xen/gntalloc.h
  HDRINST usr/include/xen/evtchn.h
  HDRINST usr/include/xen/privcmd.h
  HDRINST usr/include/asm-generic/auxvec.h
  HDRINST usr/include/asm-generic/bitsperlong.h
  HDRINST usr/include/asm-generic/posix_types.h
  HDRINST usr/include/asm-generic/ioctls.h
  HDRINST usr/include/asm-generic/mman.h
  HDRINST usr/include/asm-generic/shmbuf.h
  HDRINST usr/include/asm-generic/bpf_perf_event.h
  HDRINST usr/include/asm-generic/types.h
  HDRINST usr/include/asm-generic/poll.h
  HDRINST usr/include/asm-generic/msgbuf.h
  UPD     scripts/mod/devicetable-offsets.h
  HDRINST usr/include/asm-generic/swab.h
  HDRINST usr/include/asm-generic/statfs.h
  HDRINST usr/include/asm-generic/unistd.h
  HDRINST usr/include/asm-generic/hugetlb_encode.h
  HDRINST usr/include/asm-generic/resource.h
  HDRINST usr/include/asm-generic/param.h
  HDRINST usr/include/asm-generic/termbits-common.h
  HDRINST usr/include/asm-generic/sockios.h
  HDRINST usr/include/asm-generic/kvm_para.h
  HDRINST usr/include/asm-generic/errno.h
  HDRINST usr/include/asm-generic/termios.h
  HDRINST usr/include/asm-generic/mman-common.h
  HDRINST usr/include/asm-generic/ioctl.h
  HDRINST usr/include/asm-generic/socket.h
  HDRINST usr/include/asm-generic/signal-defs.h
  HDRINST usr/include/asm-generic/termbits.h
  HDRINST usr/include/asm-generic/int-ll64.h
  HDRINST usr/include/asm-generic/signal.h
  HDRINST usr/include/asm-generic/siginfo.h
  HDRINST usr/include/asm-generic/stat.h
  HDRINST usr/include/asm-generic/int-l64.h
  HDRINST usr/include/asm-generic/errno-base.h
  HDRINST usr/include/asm-generic/fcntl.h
  HDRINST usr/include/asm-generic/setup.h
  HDRINST usr/include/asm-generic/ipcbuf.h
  HDRINST usr/include/asm-generic/sembuf.h
  HDRINST usr/include/asm-generic/ucontext.h
  HDRINST usr/include/rdma/mlx5_user_ioctl_cmds.h
  HDRINST usr/include/rdma/irdma-abi.h
  HDRINST usr/include/rdma/mana-abi.h
  HDRINST usr/include/rdma/hfi/hfi1_user.h
  HDRINST usr/include/rdma/hfi/hfi1_ioctl.h
  HDRINST usr/include/rdma/rdma_user_rxe.h
  HDRINST usr/include/rdma/rdma_user_ioctl.h
  HDRINST usr/include/rdma/mlx5_user_ioctl_verbs.h
  HDRINST usr/include/rdma/bnxt_re-abi.h
  HDRINST usr/include/rdma/hns-abi.h
  HDRINST usr/include/rdma/qedr-abi.h
  HDRINST usr/include/rdma/ib_user_ioctl_cmds.h
  HDRINST usr/include/rdma/vmw_pvrdma-abi.h
  HDRINST usr/include/rdma/ib_user_sa.h
  HDRINST usr/include/rdma/ib_user_ioctl_verbs.h
  MKELF   scripts/mod/elfconfig.h
  HDRINST usr/include/rdma/rvt-abi.h
  HDRINST usr/include/rdma/mlx5-abi.h
  HDRINST usr/include/rdma/rdma_netlink.h
  HOSTCC  scripts/mod/modpost.o
  HDRINST usr/include/rdma/erdma-abi.h
  HDRINST usr/include/rdma/rdma_user_ioctl_cmds.h
  HOSTCC  scripts/mod/file2alias.o
  HDRINST usr/include/rdma/rdma_user_cm.h
  HOSTCC  scripts/mod/sumversion.o
  HDRINST usr/include/rdma/ib_user_verbs.h
  HOSTCC  scripts/mod/symsearch.o
  HDRINST usr/include/rdma/efa-abi.h
  HDRINST usr/include/rdma/siw-abi.h
  HDRINST usr/include/rdma/mlx4-abi.h
  HDRINST usr/include/rdma/mthca-abi.h
  HDRINST usr/include/rdma/ib_user_mad.h
  HDRINST usr/include/rdma/ocrdma-abi.h
  HDRINST usr/include/rdma/cxgb4-abi.h
  HDRINST usr/include/misc/xilinx_sdfec.h
  HDRINST usr/include/misc/uacce/hisi_qm.h
  HDRINST usr/include/misc/uacce/uacce.h
  HDRINST usr/include/misc/cxl.h
  HDRINST usr/include/misc/ocxl.h
  HDRINST usr/include/misc/fastrpc.h
  HDRINST usr/include/misc/pvpanic.h
  HDRINST usr/include/linux/i8k.h
  HDRINST usr/include/linux/acct.h
  HDRINST usr/include/linux/atmmpc.h
  HDRINST usr/include/linux/fs.h
  HDRINST usr/include/linux/cifs/cifs_mount.h
  HDRINST usr/include/linux/cifs/cifs_netlink.h
  HDRINST usr/include/linux/if_packet.h
  HDRINST usr/include/linux/route.h
  HDRINST usr/include/linux/patchkey.h
  HDRINST usr/include/linux/tc_ematch/tc_em_cmp.h
  HDRINST usr/include/linux/tc_ematch/tc_em_ipt.h
  HDRINST usr/include/linux/tc_ematch/tc_em_meta.h
  HDRINST usr/include/linux/tc_ematch/tc_em_nbyte.h
  HDRINST usr/include/linux/tc_ematch/tc_em_text.h
  HDRINST usr/include/linux/virtio_pmem.h
  HDRINST usr/include/linux/rkisp1-config.h
  HDRINST usr/include/linux/vhost.h
  HDRINST usr/include/linux/cec-funcs.h
  HDRINST usr/include/linux/ppdev.h
  HDRINST usr/include/linux/isdn/capicmd.h
  HDRINST usr/include/linux/virtio_fs.h
  HDRINST usr/include/linux/netfilter_ipv6.h
  HDRINST usr/include/linux/lirc.h
  HDRINST usr/include/linux/mroute6.h
  HDRINST usr/include/linux/nl80211-vnd-intel.h
  HDRINST usr/include/linux/ivtvfb.h
  HDRINST usr/include/linux/auxvec.h
  HDRINST usr/include/linux/dm-log-userspace.h
  HDRINST usr/include/linux/dccp.h
  HDRINST usr/include/linux/virtio_scmi.h
  HDRINST usr/include/linux/atmarp.h
  HDRINST usr/include/linux/arcfb.h
  HDRINST usr/include/linux/nbd-netlink.h
  HDRINST usr/include/linux/sched/types.h
  HDRINST usr/include/linux/tcp.h
  HDRINST usr/include/linux/neighbour.h
  HDRINST usr/include/linux/dlm_device.h
  HDRINST usr/include/linux/wmi.h
  HDRINST usr/include/linux/btrfs_tree.h
  HDRINST usr/include/linux/virtio_crypto.h
  HDRINST usr/include/linux/vbox_err.h
  HDRINST usr/include/linux/edd.h
  HDRINST usr/include/linux/loop.h
  HDRINST usr/include/linux/nvme_ioctl.h
  HDRINST usr/include/linux/mmtimer.h
  HDRINST usr/include/linux/if_pppol2tp.h
  HDRINST usr/include/linux/mtio.h
  HDRINST usr/include/linux/if_arcnet.h
  HDRINST usr/include/linux/romfs_fs.h
  HDRINST usr/include/linux/posix_types.h
  HDRINST usr/include/linux/rtc.h
  HDRINST usr/include/linux/landlock.h
  HDRINST usr/include/linux/gpio.h
  HDRINST usr/include/linux/selinux_netlink.h
  HDRINST usr/include/linux/pps.h
  HDRINST usr/include/linux/ndctl.h
  HDRINST usr/include/linux/virtio_gpu.h
  HDRINST usr/include/linux/android/binderfs.h
  HDRINST usr/include/linux/android/binder.h
  HDRINST usr/include/linux/virtio_vsock.h
  HDRINST usr/include/linux/sound.h
  HDRINST usr/include/linux/vtpm_proxy.h
  HDRINST usr/include/linux/nfs_fs.h
  HDRINST usr/include/linux/elf-fdpic.h
  HDRINST usr/include/linux/adfs_fs.h
  HDRINST usr/include/linux/target_core_user.h
  HDRINST usr/include/linux/netlink_diag.h
  HDRINST usr/include/linux/const.h
  HDRINST usr/include/linux/vdpa.h
  HDRINST usr/include/linux/firewire-cdev.h
  HDRINST usr/include/linux/if_infiniband.h
  HDRINST usr/include/linux/serial.h
  HDRINST usr/include/linux/iio/types.h
  HDRINST usr/include/linux/iio/buffer.h
  HDRINST usr/include/linux/iio/events.h
  HDRINST usr/include/linux/baycom.h
  HDRINST usr/include/linux/major.h
  HDRINST usr/include/linux/atmppp.h
  HDRINST usr/include/linux/ipv6_route.h
  HDRINST usr/include/linux/spi/spidev.h
  HDRINST usr/include/linux/spi/spi.h
  HDRINST usr/include/linux/virtio_ring.h
  HDRINST usr/include/linux/hdlc/ioctl.h
  HDRINST usr/include/linux/remoteproc_cdev.h
  HDRINST usr/include/linux/hyperv.h
  HDRINST usr/include/linux/rpl_iptunnel.h
  HDRINST usr/include/linux/sync_file.h
  HDRINST usr/include/linux/igmp.h
  HDRINST usr/include/linux/v4l2-dv-timings.h
  HDRINST usr/include/linux/virtio_i2c.h
  HDRINST usr/include/linux/xfrm.h
  HDRINST usr/include/linux/capability.h
  HDRINST usr/include/linux/gtp.h
  HDRINST usr/include/linux/xdp_diag.h
  HDRINST usr/include/linux/pkt_cls.h
  HDRINST usr/include/linux/suspend_ioctls.h
  HDRINST usr/include/linux/vt.h
  HDRINST usr/include/linux/loadpin.h
  HDRINST usr/include/linux/dlm_plock.h
  HDRINST usr/include/linux/fb.h
  HDRINST usr/include/linux/max2175.h
  HDRINST usr/include/linux/sunrpc/debug.h
  HDRINST usr/include/linux/gsmmux.h
  HDRINST usr/include/linux/watchdog.h
  HDRINST usr/include/linux/vhost_types.h
  HDRINST usr/include/linux/vduse.h
  HDRINST usr/include/linux/ila.h
  HDRINST usr/include/linux/tdx-guest.h
  HDRINST usr/include/linux/close_range.h
  HDRINST usr/include/linux/ivtv.h
  HDRINST usr/include/linux/cryptouser.h
  HDRINST usr/include/linux/netfilter/xt_string.h
  HDRINST usr/include/linux/netfilter/nfnetlink_compat.h
  HDRINST usr/include/linux/netfilter/nf_nat.h
  HDRINST usr/include/linux/netfilter/xt_recent.h
  HDRINST usr/include/linux/netfilter/xt_addrtype.h
  HDRINST usr/include/linux/netfilter/nf_conntrack_tcp.h
  HDRINST usr/include/linux/netfilter/xt_SYNPROXY.h
  HDRINST usr/include/linux/netfilter/xt_MARK.h
  HDRINST usr/include/linux/netfilter/xt_multiport.h
  HDRINST usr/include/linux/netfilter/nfnetlink.h
  HDRINST usr/include/linux/netfilter/xt_cgroup.h
  HDRINST usr/include/linux/netfilter/nf_synproxy.h
  HDRINST usr/include/linux/netfilter/xt_TCPOPTSTRIP.h
  HDRINST usr/include/linux/netfilter/nfnetlink_log.h
  HDRINST usr/include/linux/netfilter/xt_TPROXY.h
  HDRINST usr/include/linux/netfilter/xt_u32.h
  HDRINST usr/include/linux/netfilter/nfnetlink_osf.h
  HDRINST usr/include/linux/netfilter/xt_ecn.h
  HDRINST usr/include/linux/netfilter/xt_esp.h
  HDRINST usr/include/linux/netfilter/nfnetlink_hook.h
  HDRINST usr/include/linux/netfilter/xt_mac.h
  HDRINST usr/include/linux/netfilter/xt_comment.h
  HDRINST usr/include/linux/netfilter/xt_NFQUEUE.h
  HDRINST usr/include/linux/netfilter/xt_osf.h
  HDRINST usr/include/linux/netfilter/xt_hashlimit.h
  HDRINST usr/include/linux/netfilter/nf_conntrack_sctp.h
  HDRINST usr/include/linux/netfilter/xt_socket.h
  HDRINST usr/include/linux/netfilter/xt_connmark.h
  HDRINST usr/include/linux/netfilter/xt_sctp.h
  HDRINST usr/include/linux/netfilter/xt_tcpudp.h
  HDRINST usr/include/linux/netfilter/xt_DSCP.h
  HDRINST usr/include/linux/netfilter/xt_time.h
  HDRINST usr/include/linux/netfilter/xt_IDLETIMER.h
  HDRINST usr/include/linux/netfilter/xt_policy.h
  HDRINST usr/include/linux/netfilter/xt_rpfilter.h
  HDRINST usr/include/linux/netfilter/xt_nfacct.h
  HDRINST usr/include/linux/netfilter/xt_SECMARK.h
  HDRINST usr/include/linux/netfilter/xt_length.h
  HDRINST usr/include/linux/netfilter/nfnetlink_cthelper.h
  HDRINST usr/include/linux/netfilter/xt_quota.h
  HDRINST usr/include/linux/netfilter/xt_CLASSIFY.h
  HDRINST usr/include/linux/netfilter/xt_ipcomp.h
  HDRINST usr/include/linux/netfilter/xt_iprange.h
  HDRINST usr/include/linux/netfilter/xt_bpf.h
  HDRINST usr/include/linux/netfilter/xt_LOG.h
  HDRINST usr/include/linux/netfilter/xt_rateest.h
  HDRINST usr/include/linux/netfilter/xt_CONNSECMARK.h
  HDRINST usr/include/linux/netfilter/xt_HMARK.h
  HDRINST usr/include/linux/netfilter/xt_CONNMARK.h
  HDRINST usr/include/linux/netfilter/xt_pkttype.h
  HDRINST usr/include/linux/netfilter/xt_ipvs.h
  HDRINST usr/include/linux/netfilter/xt_devgroup.h
  HDRINST usr/include/linux/netfilter/xt_AUDIT.h
  HDRINST usr/include/linux/netfilter/xt_realm.h
  HDRINST usr/include/linux/netfilter/nf_conntrack_common.h
  HDRINST usr/include/linux/netfilter/xt_set.h
  HDRINST usr/include/linux/netfilter/xt_LED.h
  HDRINST usr/include/linux/netfilter/xt_connlabel.h
  HDRINST usr/include/linux/netfilter/xt_owner.h
  HDRINST usr/include/linux/netfilter/xt_dccp.h
  HDRINST usr/include/linux/netfilter/xt_limit.h
  HDRINST usr/include/linux/netfilter/xt_conntrack.h
  HDRINST usr/include/linux/netfilter/xt_TEE.h
  HDRINST usr/include/linux/netfilter/xt_RATEEST.h
  HDRINST usr/include/linux/netfilter/xt_connlimit.h
  HDRINST usr/include/linux/netfilter/ipset/ip_set.h
  HDRINST usr/include/linux/netfilter/ipset/ip_set_list.h
  HDRINST usr/include/linux/netfilter/ipset/ip_set_hash.h
  HDRINST usr/include/linux/netfilter/ipset/ip_set_bitmap.h
  HDRINST usr/include/linux/netfilter/x_tables.h
  HDRINST usr/include/linux/netfilter/xt_dscp.h
  HDRINST usr/include/linux/netfilter/nf_conntrack_ftp.h
  HDRINST usr/include/linux/netfilter/xt_cluster.h
  HDRINST usr/include/linux/netfilter/nf_conntrack_tuple_common.h
  HDRINST usr/include/linux/netfilter/nf_log.h
  HDRINST usr/include/linux/netfilter/xt_tcpmss.h
  HDRINST usr/include/linux/netfilter/xt_NFLOG.h
  HDRINST usr/include/linux/netfilter/xt_l2tp.h
  HDRINST usr/include/linux/netfilter/xt_helper.h
  HDRINST usr/include/linux/netfilter/xt_statistic.h
  HDRINST usr/include/linux/netfilter/nfnetlink_queue.h
  HDRINST usr/include/linux/netfilter/nfnetlink_cttimeout.h
  HDRINST usr/include/linux/netfilter/xt_CHECKSUM.h
  HDRINST usr/include/linux/netfilter/xt_CT.h
  HDRINST usr/include/linux/netfilter/xt_connbytes.h
  HDRINST usr/include/linux/netfilter/xt_state.h
  HDRINST usr/include/linux/netfilter/nf_tables.h
  HDRINST usr/include/linux/netfilter/xt_mark.h
  HDRINST usr/include/linux/netfilter/xt_cpu.h
  HDRINST usr/include/linux/netfilter/nf_tables_compat.h
  HDRINST usr/include/linux/netfilter/xt_physdev.h
  HDRINST usr/include/linux/netfilter/nfnetlink_conntrack.h
  HDRINST usr/include/linux/netfilter/nfnetlink_acct.h
  HDRINST usr/include/linux/tty_flags.h
  HDRINST usr/include/linux/netfilter/xt_TCPMSS.h
  HDRINST usr/include/linux/if_phonet.h
  HDRINST usr/include/linux/elf-em.h
  HDRINST usr/include/linux/vm_sockets.h
  HDRINST usr/include/linux/dlmconstants.h
  HDRINST usr/include/linux/bsg.h
  HDRINST usr/include/linux/matroxfb.h
  HDRINST usr/include/linux/sysctl.h
  HDRINST usr/include/linux/unix_diag.h
  HDRINST usr/include/linux/pcitest.h
  HDRINST usr/include/linux/mman.h
  HDRINST usr/include/linux/if_plip.h
  HDRINST usr/include/linux/virtio_balloon.h
  HDRINST usr/include/linux/pidfd.h
  HDRINST usr/include/linux/f2fs.h
  HDRINST usr/include/linux/x25.h
  HDRINST usr/include/linux/if_cablemodem.h
  HDRINST usr/include/linux/utsname.h
  HDRINST usr/include/linux/counter.h
  HDRINST usr/include/linux/atm_tcp.h
  HDRINST usr/include/linux/atalk.h
  HDRINST usr/include/linux/virtio_rng.h
  HDRINST usr/include/linux/vboxguest.h
  HDRINST usr/include/linux/bpf_perf_event.h
  HDRINST usr/include/linux/ipmi_ssif_bmc.h
  HDRINST usr/include/linux/nfs_mount.h
  HDRINST usr/include/linux/sonet.h
  HDRINST usr/include/linux/netfilter.h
  HDRINST usr/include/linux/keyctl.h
  HDRINST usr/include/linux/nl80211.h
  HDRINST usr/include/linux/misc/bcm_vk.h
  HDRINST usr/include/linux/audit.h
  HDRINST usr/include/linux/tipc_config.h
  HDRINST usr/include/linux/tipc_sockets_diag.h
  HDRINST usr/include/linux/futex.h
  HDRINST usr/include/linux/sev-guest.h
  HDRINST usr/include/linux/ublk_cmd.h
  HDRINST usr/include/linux/types.h
  HDRINST usr/include/linux/virtio_input.h
  HDRINST usr/include/linux/if_slip.h
  HDRINST usr/include/linux/personality.h
  HDRINST usr/include/linux/openat2.h
  HDRINST usr/include/linux/poll.h
  HDRINST usr/include/linux/posix_acl.h
  HDRINST usr/include/linux/smc_diag.h
  HDRINST usr/include/linux/snmp.h
  HDRINST usr/include/linux/errqueue.h
  HDRINST usr/include/linux/if_tunnel.h
  HDRINST usr/include/linux/fanotify.h
  HDRINST usr/include/linux/kernel.h
  HDRINST usr/include/linux/rtnetlink.h
  HDRINST usr/include/linux/memfd.h
  HDRINST usr/include/linux/rpl.h
  HDRINST usr/include/linux/serial_core.h
  HDRINST usr/include/linux/dns_resolver.h
  HDRINST usr/include/linux/atm_eni.h
  HDRINST usr/include/linux/pr.h
  HDRINST usr/include/linux/lp.h
  HDRINST usr/include/linux/virtio_mem.h
  HDRINST usr/include/linux/ultrasound.h
  HDRINST usr/include/linux/sctp.h
  HDRINST usr/include/linux/uio.h
  HDRINST usr/include/linux/tcp_metrics.h
  HDRINST usr/include/linux/wwan.h
  HDRINST usr/include/linux/atmbr2684.h
  HDRINST usr/include/linux/in_route.h
  HDRINST usr/include/linux/qemu_fw_cfg.h
  HDRINST usr/include/linux/if_macsec.h
  HDRINST usr/include/linux/usb/charger.h
  HDRINST usr/include/linux/usb/g_uvc.h
  HDRINST usr/include/linux/usb/gadgetfs.h
  HDRINST usr/include/linux/usb/cdc-wdm.h
  HDRINST usr/include/linux/usb/raw_gadget.h
  HDRINST usr/include/linux/usb/g_printer.h
  HDRINST usr/include/linux/usb/midi.h
  HDRINST usr/include/linux/usb/tmc.h
  HDRINST usr/include/linux/usb/video.h
  HDRINST usr/include/linux/usb/functionfs.h
  HDRINST usr/include/linux/usb/audio.h
  HDRINST usr/include/linux/usb/ch11.h
  LD      /kernel/build64-default/tools/objtool/libsubcmd/libsubcmd-in.o
  HDRINST usr/include/linux/usb/ch9.h
  HDRINST usr/include/linux/usb/cdc.h
  HDRINST usr/include/linux/jffs2.h
  HDRINST usr/include/linux/ax25.h
  HDRINST usr/include/linux/auto_fs.h
  HDRINST usr/include/linux/tiocl.h
  HDRINST usr/include/linux/scc.h
  HDRINST usr/include/linux/psci.h
  HDRINST usr/include/linux/swab.h
  HDRINST usr/include/linux/cec.h
  HDRINST usr/include/linux/kfd_ioctl.h
  HDRINST usr/include/linux/smc.h
  HDRINST usr/include/linux/qrtr.h
  HDRINST usr/include/linux/screen_info.h
  HDRINST usr/include/linux/nfsacl.h
  HDRINST usr/include/linux/seg6_hmac.h
  HDRINST usr/include/linux/gameport.h
  HDRINST usr/include/linux/wireless.h
  HDRINST usr/include/linux/fdreg.h
  HDRINST usr/include/linux/cciss_defs.h
  HDRINST usr/include/linux/serial_reg.h
  HDRINST usr/include/linux/perf_event.h
  HDRINST usr/include/linux/in6.h
  HDRINST usr/include/linux/hid.h
  HDRINST usr/include/linux/netlink.h
  HDRINST usr/include/linux/fuse.h
  HDRINST usr/include/linux/magic.h
  HDRINST usr/include/linux/ioam6_iptunnel.h
  HDRINST usr/include/linux/stm.h
  HDRINST usr/include/linux/vsockmon.h
  HDRINST usr/include/linux/seg6.h
  AR      /kernel/build64-default/tools/objtool/libsubcmd/libsubcmd.a
  HDRINST usr/include/linux/idxd.h
  HDRINST usr/include/linux/nitro_enclaves.h
  HDRINST usr/include/linux/ptrace.h
  HDRINST usr/include/linux/ioam6_genl.h
  HDRINST usr/include/linux/qnx4_fs.h
  HDRINST usr/include/linux/net_tstamp.h
  HDRINST usr/include/linux/fsl_mc.h
  HDRINST usr/include/linux/msg.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_TTL.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_ttl.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_ah.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_ECN.h
  HDRINST usr/include/linux/netfilter_ipv4/ip_tables.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_ecn.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_CLUSTERIP.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_REJECT.h
  HDRINST usr/include/linux/netfilter_ipv4/ipt_LOG.h
  HDRINST usr/include/linux/sem.h
  HDRINST usr/include/linux/net_namespace.h
  HDRINST usr/include/linux/radeonfb.h
  HDRINST usr/include/linux/tee.h
  HDRINST usr/include/linux/udp.h
  HDRINST usr/include/linux/virtio_bt.h
  HDRINST usr/include/linux/v4l2-subdev.h
  HDRINST usr/include/linux/posix_acl_xattr.h
  HDRINST usr/include/linux/v4l2-mediabus.h
  HDRINST usr/include/linux/atmapi.h
  HDRINST usr/include/linux/raid/md_p.h
  HDRINST usr/include/linux/raid/md_u.h
  HDRINST usr/include/linux/zorro_ids.h
  HDRINST usr/include/linux/nbd.h
  HDRINST usr/include/linux/isst_if.h
  HDRINST usr/include/linux/rxrpc.h
  HDRINST usr/include/linux/if_arp.h
  HDRINST usr/include/linux/unistd.h
  HDRINST usr/include/linux/atm_zatm.h
  HDRINST usr/include/linux/io_uring.h
  HDRINST usr/include/linux/if_fddi.h
  HDRINST usr/include/linux/bpqether.h
  HDRINST usr/include/linux/sysinfo.h
  HDRINST usr/include/linux/auto_dev-ioctl.h
  HDRINST usr/include/linux/nfs4_mount.h
  HDRINST usr/include/linux/keyboard.h
  HDRINST usr/include/linux/virtio_mmio.h
  HDRINST usr/include/linux/input.h
  HDRINST usr/include/linux/qnxtypes.h
  HDRINST usr/include/linux/mdio.h
  HDRINST usr/include/linux/lwtunnel.h
  HDRINST usr/include/linux/gfs2_ondisk.h
  HDRINST usr/include/linux/eventfd.h
  HDRINST usr/include/linux/nfs4.h
  HDRINST usr/include/linux/ptp_clock.h
  HDRINST usr/include/linux/nubus.h
  HDRINST usr/include/linux/if_bonding.h
  HDRINST usr/include/linux/kcov.h
  HDRINST usr/include/linux/fadvise.h
  CC      /kernel/build64-default/tools/objtool/weak.o
  HDRINST usr/include/linux/taskstats.h
  HDRINST usr/include/linux/veth.h
  HDRINST usr/include/linux/atm.h
  CC      /kernel/build64-default/tools/objtool/check.o
  MKDIR   /kernel/build64-default/tools/objtool/arch/x86/
  CC      /kernel/build64-default/tools/objtool/special.o
  HDRINST usr/include/linux/ipmi.h
  CC      /kernel/build64-default/tools/objtool/builtin-check.o
  HDRINST usr/include/linux/kdev_t.h
  MKDIR   /kernel/build64-default/tools/objtool/arch/x86/lib/
  CC      /kernel/build64-default/tools/objtool/elf.o
  HDRINST usr/include/linux/mount.h
  HDRINST usr/include/linux/shm.h
  CC      /kernel/build64-default/tools/objtool/objtool.o
  CC      /kernel/build64-default/tools/objtool/arch/x86/special.o
  CC      /kernel/build64-default/tools/objtool/orc_gen.o
  HDRINST usr/include/linux/resource.h
  CC      /kernel/build64-default/tools/objtool/orc_dump.o
  GEN     /kernel/build64-default/tools/objtool/arch/x86/lib/inat-tables.c
  HDRINST usr/include/linux/prctl.h
  CC      /kernel/build64-default/tools/objtool/libstring.o
  HDRINST usr/include/linux/watch_queue.h
  HDRINST usr/include/linux/sched.h
  CC      /kernel/build64-default/tools/objtool/libctype.o
  HDRINST usr/include/linux/phonet.h
  CC      /kernel/build64-default/tools/objtool/str_error_r.o
  HDRINST usr/include/linux/random.h
  CC      /kernel/build64-default/tools/objtool/librbtree.o
  HDRINST usr/include/linux/tty.h
  HDRINST usr/include/linux/apm_bios.h
  HDRINST usr/include/linux/fd.h
  HDRINST usr/include/linux/um_timetravel.h
  HDRINST usr/include/linux/tls.h
  HDRINST usr/include/linux/rpmsg_types.h
  HDRINST usr/include/linux/pfrut.h
  HDRINST usr/include/linux/mei.h
  HDRINST usr/include/linux/fsi.h
  HDRINST usr/include/linux/rds.h
  HDRINST usr/include/linux/if_x25.h
  HDRINST usr/include/linux/param.h
  HDRINST usr/include/linux/netdevice.h
  HDRINST usr/include/linux/binfmts.h
  HDRINST usr/include/linux/if_pppox.h
  HDRINST usr/include/linux/sockios.h
  HDRINST usr/include/linux/kcm.h
  HDRINST usr/include/linux/virtio_9p.h
  HDRINST usr/include/linux/genwqe/genwqe_card.h
  HDRINST usr/include/linux/if_tun.h
  HDRINST usr/include/linux/ext4.h
  HDRINST usr/include/linux/if_ether.h
  HDRINST usr/include/linux/kvm_para.h
  HDRINST usr/include/linux/kernel-page-flags.h
  HDRINST usr/include/linux/cdrom.h
  HDRINST usr/include/linux/un.h
  HDRINST usr/include/linux/module.h
  HDRINST usr/include/linux/mqueue.h
  HDRINST usr/include/linux/a.out.h
  HDRINST usr/include/linux/input-event-codes.h
  HDRINST usr/include/linux/coda.h
  HDRINST usr/include/linux/rio_mport_cdev.h
  HDRINST usr/include/linux/ipsec.h
  HDRINST usr/include/linux/blkpg.h
  HDRINST usr/include/linux/blkzoned.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_arpreply.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_redirect.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_nflog.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_802_3.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_nat.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_mark_m.h
  HDRINST usr/include/linux/netfilter_bridge/ebtables.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_vlan.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_limit.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_log.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_stp.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_pkttype.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_ip.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_ip6.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_arp.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_mark_t.h
  HDRINST usr/include/linux/netfilter_bridge/ebt_among.h
  HDRINST usr/include/linux/cciss_ioctl.h
  HDRINST usr/include/linux/reiserfs_fs.h
  HDRINST usr/include/linux/fsmap.h
  HDRINST usr/include/linux/smiapp.h
  HDRINST usr/include/linux/switchtec_ioctl.h
  HDRINST usr/include/linux/atmdev.h
  HDRINST usr/include/linux/hpet.h
  CC      /kernel/build64-default/tools/objtool/arch/x86/decode.o
  HDRINST usr/include/linux/virtio_config.h
  HDRINST usr/include/linux/string.h
  HDRINST usr/include/linux/kfd_sysfs.h
  HDRINST usr/include/linux/inet_diag.h
  HDRINST usr/include/linux/netdev.h
  HDRINST usr/include/linux/xattr.h
  HDRINST usr/include/linux/iommufd.h
  HDRINST usr/include/linux/user_events.h
  HDRINST usr/include/linux/errno.h
  HDRINST usr/include/linux/icmp.h
  HDRINST usr/include/linux/i2o-dev.h
  HDRINST usr/include/linux/pg.h
  HDRINST usr/include/linux/if_bridge.h
  HDRINST usr/include/linux/thermal.h
  HDRINST usr/include/linux/uinput.h
  HDRINST usr/include/linux/handshake.h
  HDRINST usr/include/linux/dqblk_xfs.h
  HDRINST usr/include/linux/v4l2-common.h
  HDRINST usr/include/linux/nvram.h
  HDRINST usr/include/linux/if_vlan.h
  HDRINST usr/include/linux/uhid.h
  HDRINST usr/include/linux/omap3isp.h
  HDRINST usr/include/linux/rose.h
  HDRINST usr/include/linux/phantom.h
  HDRINST usr/include/linux/dpll.h
  HDRINST usr/include/linux/ipmi_msgdefs.h
  HDRINST usr/include/linux/bcm933xx_hcs.h
  HDRINST usr/include/linux/bpf.h
  HDRINST usr/include/linux/mempolicy.h
  HDRINST usr/include/linux/efs_fs_sb.h
  HDRINST usr/include/linux/nexthop.h
  HDRINST usr/include/linux/net_dropmon.h
  HDRINST usr/include/linux/surface_aggregator/cdev.h
  HDRINST usr/include/linux/surface_aggregator/dtx.h
  HDRINST usr/include/linux/net.h
  HDRINST usr/include/linux/mii.h
  HDRINST usr/include/linux/virtio_pcidev.h
  HDRINST usr/include/linux/termios.h
  HDRINST usr/include/linux/cgroupstats.h
  HDRINST usr/include/linux/mpls.h
  HDRINST usr/include/linux/iommu.h
  HDRINST usr/include/linux/toshiba.h
  HDRINST usr/include/linux/virtio_scsi.h
  HDRINST usr/include/linux/zorro.h
  HDRINST usr/include/linux/chio.h
  HDRINST usr/include/linux/pkt_sched.h
  HDRINST usr/include/linux/cramfs_fs.h
  HDRINST usr/include/linux/nfs3.h
  HDRINST usr/include/linux/vfio_ccw.h
  HDRINST usr/include/linux/atm_nicstar.h
  HDRINST usr/include/linux/ncsi.h
  HDRINST usr/include/linux/virtio_net.h
  HDRINST usr/include/linux/ioctl.h
  HDRINST usr/include/linux/stddef.h
  HDRINST usr/include/linux/limits.h
  HDRINST usr/include/linux/ipmi_bmc.h
  HDRINST usr/include/linux/netfilter_arp.h
  HDRINST usr/include/linux/if_addr.h
  HDRINST usr/include/linux/rpmsg.h
  HDRINST usr/include/linux/media-bus-format.h
  HDRINST usr/include/linux/kernelcapi.h
  HDRINST usr/include/linux/ppp_defs.h
  HDRINST usr/include/linux/ethtool.h
  HDRINST usr/include/linux/aspeed-video.h
  HDRINST usr/include/linux/hdlc.h
  HDRINST usr/include/linux/fscrypt.h
  HDRINST usr/include/linux/batadv_packet.h
  HDRINST usr/include/linux/uuid.h
  HDRINST usr/include/linux/capi.h
  HDRINST usr/include/linux/mptcp.h
  HDRINST usr/include/linux/hidraw.h
  HDRINST usr/include/linux/virtio_console.h
  HDRINST usr/include/linux/irqnr.h
  HDRINST usr/include/linux/coresight-stm.h
  HDRINST usr/include/linux/cxl_mem.h
  HDRINST usr/include/linux/iso_fs.h
  HDRINST usr/include/linux/virtio_blk.h
  HDRINST usr/include/linux/udf_fs_i.h
  HDRINST usr/include/linux/coff.h
  HDRINST usr/include/linux/dma-buf.h
  HDRINST usr/include/linux/ife.h
  HDRINST usr/include/linux/agpgart.h
  HDRINST usr/include/linux/socket.h
  HDRINST usr/include/linux/nilfs2_ondisk.h
  HDRINST usr/include/linux/connector.h
  HDRINST usr/include/linux/auto_fs4.h
  HDRINST usr/include/linux/bt-bmc.h
  HDRINST usr/include/linux/map_to_7segment.h
  HDRINST usr/include/linux/tc_act/tc_skbedit.h
  HDRINST usr/include/linux/tc_act/tc_ctinfo.h
  HDRINST usr/include/linux/tc_act/tc_defact.h
  HDRINST usr/include/linux/tc_act/tc_gact.h
  HDRINST usr/include/linux/tc_act/tc_vlan.h
  HDRINST usr/include/linux/tc_act/tc_skbmod.h
  HDRINST usr/include/linux/tc_act/tc_sample.h
  HDRINST usr/include/linux/tc_act/tc_tunnel_key.h
  HDRINST usr/include/linux/tc_act/tc_gate.h
  HDRINST usr/include/linux/tc_act/tc_mirred.h
  HDRINST usr/include/linux/tc_act/tc_nat.h
  HDRINST usr/include/linux/tc_act/tc_csum.h
  HDRINST usr/include/linux/tc_act/tc_connmark.h
  HDRINST usr/include/linux/tc_act/tc_ife.h
  HDRINST usr/include/linux/tc_act/tc_mpls.h
  HDRINST usr/include/linux/tc_act/tc_ct.h
  HDRINST usr/include/linux/tc_act/tc_pedit.h
  HDRINST usr/include/linux/tc_act/tc_bpf.h
  HDRINST usr/include/linux/tc_act/tc_ipt.h
  HDRINST usr/include/linux/netrom.h
  HDRINST usr/include/linux/joystick.h
  HDRINST usr/include/linux/falloc.h
  HDRINST usr/include/linux/cycx_cfm.h
  HDRINST usr/include/linux/omapfb.h
  HDRINST usr/include/linux/msdos_fs.h
  HDRINST usr/include/linux/virtio_types.h
  HDRINST usr/include/linux/mroute.h
  HDRINST usr/include/linux/psample.h
  HDRINST usr/include/linux/ipv6.h
  HDRINST usr/include/linux/nfsd_netlink.h
  HDRINST usr/include/linux/dw100.h
  HDRINST usr/include/linux/psp-sev.h
  HDRINST usr/include/linux/vfio.h
  HDRINST usr/include/linux/if_ppp.h
  HDRINST usr/include/linux/byteorder/big_endian.h
  HDRINST usr/include/linux/byteorder/little_endian.h
  HDRINST usr/include/linux/comedi.h
  HDRINST usr/include/linux/scif_ioctl.h
  HDRINST usr/include/linux/timerfd.h
  HDRINST usr/include/linux/time_types.h
  HDRINST usr/include/linux/firewire-constants.h
  HDRINST usr/include/linux/virtio_snd.h
  HDRINST usr/include/linux/ppp-ioctl.h
  HDRINST usr/include/linux/fib_rules.h
  HDRINST usr/include/linux/gen_stats.h
  HDRINST usr/include/linux/virtio_iommu.h
  HDRINST usr/include/linux/genetlink.h
  HDRINST usr/include/linux/uvcvideo.h
  HDRINST usr/include/linux/pfkeyv2.h
  HDRINST usr/include/linux/times.h
  HDRINST usr/include/linux/soundcard.h
  HDRINST usr/include/linux/nfc.h
  HDRINST usr/include/linux/affs_hardblocks.h
  HDRINST usr/include/linux/nilfs2_api.h
  HDRINST usr/include/linux/rseq.h
  HDRINST usr/include/linux/caif/caif_socket.h
  HDRINST usr/include/linux/caif/if_caif.h
  HDRINST usr/include/linux/i2c-dev.h
  HDRINST usr/include/linux/cuda.h
  HDRINST usr/include/linux/mei_uuid.h
  HDRINST usr/include/linux/cn_proc.h
  HDRINST usr/include/linux/parport.h
  HDRINST usr/include/linux/v4l2-controls.h
  HDRINST usr/include/linux/hsi/cs-protocol.h
  HDRINST usr/include/linux/hsi/hsi_char.h
  HDRINST usr/include/linux/seg6_genl.h
  HDRINST usr/include/linux/am437x-vpfe.h
  HDRINST usr/include/linux/amt.h
  HDRINST usr/include/linux/netconf.h
  HDRINST usr/include/linux/erspan.h
  HDRINST usr/include/linux/nsfs.h
  HDRINST usr/include/linux/xilinx-v4l2-controls.h
  HDRINST usr/include/linux/aspeed-p2a-ctrl.h
  HDRINST usr/include/linux/vfio_zdev.h
  HDRINST usr/include/linux/serio.h
  HDRINST usr/include/linux/acrn.h
  HDRINST usr/include/linux/nfs2.h
  HDRINST usr/include/linux/mptcp_pm.h
  HDRINST usr/include/linux/virtio_pci.h
  HDRINST usr/include/linux/ipc.h
  HDRINST usr/include/linux/ethtool_netlink.h
  HDRINST usr/include/linux/kd.h
  HDRINST usr/include/linux/elf.h
  HDRINST usr/include/linux/videodev2.h
  HDRINST usr/include/linux/if_alg.h
  HDRINST usr/include/linux/sonypi.h
  HDRINST usr/include/linux/fsverity.h
  HDRINST usr/include/linux/if.h
  HDRINST usr/include/linux/btrfs.h
  HDRINST usr/include/linux/vm_sockets_diag.h
  HDRINST usr/include/linux/netfilter_bridge.h
  HDRINST usr/include/linux/packet_diag.h
  HDRINST usr/include/linux/netfilter_ipv4.h
  HDRINST usr/include/linux/kvm.h
  HDRINST usr/include/linux/pci.h
  HDRINST usr/include/linux/if_addrlabel.h
  HDRINST usr/include/linux/hdlcdrv.h
  HDRINST usr/include/linux/cfm_bridge.h
  HDRINST usr/include/linux/fiemap.h
  HDRINST usr/include/linux/dm-ioctl.h
  HDRINST usr/include/linux/aspeed-lpc-ctrl.h
  HDRINST usr/include/linux/atmioc.h
  HDRINST usr/include/linux/dlm.h
  HDRINST usr/include/linux/pci_regs.h
  HDRINST usr/include/linux/cachefiles.h
  HDRINST usr/include/linux/membarrier.h
  HDRINST usr/include/linux/nfs_idmap.h
  HDRINST usr/include/linux/ip.h
  HDRINST usr/include/linux/atm_he.h
  HDRINST usr/include/linux/nfsd/export.h
  HDRINST usr/include/linux/nfsd/stats.h
  HDRINST usr/include/linux/nfsd/debug.h
  HDRINST usr/include/linux/nfsd/cld.h
  HDRINST usr/include/linux/ip_vs.h
  HDRINST usr/include/linux/vmcore.h
  HDRINST usr/include/linux/vbox_vmmdev_types.h
  HDRINST usr/include/linux/dvb/osd.h
  HDRINST usr/include/linux/dvb/dmx.h
  HDRINST usr/include/linux/dvb/net.h
  HDRINST usr/include/linux/dvb/frontend.h
  HDRINST usr/include/linux/dvb/ca.h
  HDRINST usr/include/linux/dvb/version.h
  HDRINST usr/include/linux/dvb/video.h
  HDRINST usr/include/linux/dvb/audio.h
  HDRINST usr/include/linux/nfs.h
  HDRINST usr/include/linux/if_link.h
  HDRINST usr/include/linux/wait.h
  HDRINST usr/include/linux/icmpv6.h
  HDRINST usr/include/linux/media.h
  HDRINST usr/include/linux/seg6_local.h
  HDRINST usr/include/linux/tps6594_pfsm.h
  HDRINST usr/include/linux/openvswitch.h
  HDRINST usr/include/linux/atmsap.h
  HDRINST usr/include/linux/bpfilter.h
  HDRINST usr/include/linux/fpga-dfl.h
  HDRINST usr/include/linux/userio.h
  HDRINST usr/include/linux/signal.h
  HDRINST usr/include/linux/map_to_14segment.h
  HDRINST usr/include/linux/hdreg.h
  HDRINST usr/include/linux/utime.h
  HDRINST usr/include/linux/usbdevice_fs.h
  HDRINST usr/include/linux/timex.h
  HDRINST usr/include/linux/if_fc.h
  HDRINST usr/include/linux/reiserfs_xattr.h
  HDRINST usr/include/linux/hw_breakpoint.h
  HDRINST usr/include/linux/quota.h
  HDRINST usr/include/linux/eventpoll.h
  HDRINST usr/include/linux/ioprio.h
  HDRINST usr/include/linux/atmclip.h
  HDRINST usr/include/linux/can.h
  HDRINST usr/include/linux/if_team.h
  HDRINST usr/include/linux/usbip.h
  HDRINST usr/include/linux/stat.h
  HDRINST usr/include/linux/fou.h
  HDRINST usr/include/linux/hash_info.h
  HDRINST usr/include/linux/ppp-comp.h
  HDRINST usr/include/linux/ip6_tunnel.h
  HDRINST usr/include/linux/tipc_netlink.h
  HDRINST usr/include/linux/in.h
  HDRINST usr/include/linux/wireguard.h
  HDRINST usr/include/linux/btf.h
  HDRINST usr/include/linux/batman_adv.h
  HDRINST usr/include/linux/fcntl.h
  HDRINST usr/include/linux/if_ltalk.h
  HDRINST usr/include/linux/i2c.h
  HDRINST usr/include/linux/atm_idt77105.h
  HDRINST usr/include/linux/kexec.h
  HDRINST usr/include/linux/arm_sdei.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6_tables.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_ah.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_NPT.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_rt.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_REJECT.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_opts.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_srh.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_LOG.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_mh.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_HL.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_hl.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_frag.h
  HDRINST usr/include/linux/netfilter_ipv6/ip6t_ipv6header.h
  HDRINST usr/include/linux/minix_fs.h
  HDRINST usr/include/linux/aio_abi.h
  HDRINST usr/include/linux/pktcdvd.h
  HDRINST usr/include/linux/libc-compat.h
  HDRINST usr/include/linux/atmlec.h
  HDRINST usr/include/linux/signalfd.h
  HDRINST usr/include/linux/bpf_common.h
  HDRINST usr/include/linux/seg6_iptunnel.h
  HDRINST usr/include/linux/synclink.h
  HDRINST usr/include/linux/mpls_iptunnel.h
  HDRINST usr/include/linux/mctp.h
  HDRINST usr/include/linux/if_xdp.h
  HDRINST usr/include/linux/llc.h
  HDRINST usr/include/linux/atmsvc.h
  HDRINST usr/include/linux/sed-opal.h
  HDRINST usr/include/linux/sock_diag.h
  HDRINST usr/include/linux/time.h
  HDRINST usr/include/linux/securebits.h
  HDRINST usr/include/linux/fsl_hypervisor.h
  HDRINST usr/include/linux/if_hippi.h
  HDRINST usr/include/linux/seccomp.h
  HDRINST usr/include/linux/oom.h
  HDRINST usr/include/linux/filter.h
  HDRINST usr/include/linux/inotify.h
  HDRINST usr/include/linux/rfkill.h
  HDRINST usr/include/linux/reboot.h
  HDRINST usr/include/linux/can/vxcan.h
  HDRINST usr/include/linux/can/j1939.h
  HDRINST usr/include/linux/can/netlink.h
  HDRINST usr/include/linux/can/bcm.h
  HDRINST usr/include/linux/can/raw.h
  HDRINST usr/include/linux/can/gw.h
  HDRINST usr/include/linux/can/error.h
  HDRINST usr/include/linux/can/isotp.h
  HDRINST usr/include/linux/if_eql.h
  HDRINST usr/include/linux/psp-dbc.h
  HDRINST usr/include/linux/hiddev.h
  HDRINST usr/include/linux/blktrace_api.h
  HDRINST usr/include/linux/ccs.h
  HDRINST usr/include/linux/ioam6.h
  HDRINST usr/include/linux/hsr_netlink.h
  HDRINST usr/include/linux/mmc/ioctl.h
  HDRINST usr/include/linux/bfs_fs.h
  HDRINST usr/include/linux/npcm-video.h
  HDRINST usr/include/linux/rio_cm_cdev.h
  HDRINST usr/include/linux/uleds.h
  HDRINST usr/include/linux/mrp_bridge.h
  HDRINST usr/include/linux/pmu.h
  HDRINST usr/include/linux/adb.h
  HDRINST usr/include/linux/udmabuf.h
  HDRINST usr/include/linux/kcmp.h
  HDRINST usr/include/linux/dma-heap.h
  HDRINST usr/include/linux/userfaultfd.h
  HDRINST usr/include/linux/netfilter_arp/arpt_mangle.h
  HDRINST usr/include/linux/netfilter_arp/arp_tables.h
  HDRINST usr/include/linux/tipc.h
  HDRINST usr/include/linux/virtio_ids.h
  HDRINST usr/include/linux/l2tp.h
  HDRINST usr/include/linux/devlink.h
  HDRINST usr/include/linux/virtio_gpio.h
  HDRINST usr/include/linux/dcbnl.h
  HDRINST usr/include/linux/cyclades.h
  HDRINST usr/include/sound/intel/avs/tokens.h
  HDRINST usr/include/sound/sof/fw.h
  HDRINST usr/include/sound/sof/abi.h
  HDRINST usr/include/sound/sof/tokens.h
  HDRINST usr/include/sound/sof/header.h
  HDRINST usr/include/sound/usb_stream.h
  HDRINST usr/include/sound/sfnt_info.h
  HDRINST usr/include/sound/asequencer.h
  HDRINST usr/include/sound/tlv.h
  HDRINST usr/include/sound/asound.h
  HDRINST usr/include/sound/asoc.h
  HDRINST usr/include/sound/sb16_csp.h
  HDRINST usr/include/sound/compress_offload.h
  HDRINST usr/include/sound/hdsp.h
  HDRINST usr/include/sound/emu10k1.h
  HDRINST usr/include/sound/snd_ar_tokens.h
  HDRINST usr/include/sound/snd_sst_tokens.h
  HDRINST usr/include/sound/asound_fm.h
  HDRINST usr/include/sound/hdspm.h
  HDRINST usr/include/sound/compress_params.h
  HDRINST usr/include/sound/firewire.h
  HDRINST usr/include/sound/skl-tplg-interface.h
  HDRINST usr/include/scsi/scsi_bsg_ufs.h
  HDRINST usr/include/scsi/scsi_netlink_fc.h
  HDRINST usr/include/scsi/scsi_bsg_mpi3mr.h
  HDRINST usr/include/scsi/fc/fc_ns.h
  HDRINST usr/include/scsi/fc/fc_fs.h
  HDRINST usr/include/scsi/fc/fc_els.h
  HDRINST usr/include/scsi/fc/fc_gs.h
  HDRINST usr/include/scsi/scsi_bsg_fc.h
  HDRINST usr/include/scsi/cxlflash_ioctl.h
  HDRINST usr/include/scsi/scsi_netlink.h
  HDRINST usr/include/linux/version.h
  HDRINST usr/include/asm/processor-flags.h
  HDRINST usr/include/asm/auxvec.h
  HDRINST usr/include/asm/svm.h
  HDRINST usr/include/asm/bitsperlong.h
  HDRINST usr/include/asm/kvm_perf.h
  HDRINST usr/include/asm/mce.h
  HDRINST usr/include/asm/posix_types.h
  HDRINST usr/include/asm/msr.h
  HDRINST usr/include/asm/sigcontext32.h
  HDRINST usr/include/asm/mman.h
  HDRINST usr/include/asm/shmbuf.h
  HDRINST usr/include/asm/e820.h
  HDRINST usr/include/asm/posix_types_64.h
  HDRINST usr/include/asm/msgbuf.h
  HDRINST usr/include/asm/vsyscall.h
  HDRINST usr/include/asm/swab.h
  HDRINST usr/include/asm/statfs.h
  HDRINST usr/include/asm/posix_types_x32.h
  HDRINST usr/include/asm/ptrace.h
  HDRINST usr/include/asm/unistd.h
  HDRINST usr/include/asm/ist.h
  HDRINST usr/include/asm/prctl.h
  HDRINST usr/include/asm/boot.h
  HDRINST usr/include/asm/sigcontext.h
  HDRINST usr/include/asm/posix_types_32.h
  HDRINST usr/include/asm/kvm_para.h
  HDRINST usr/include/asm/a.out.h
  HDRINST usr/include/asm/mtrr.h
  HDRINST usr/include/asm/amd_hsmp.h
  HDRINST usr/include/asm/hwcap2.h
  HDRINST usr/include/asm/ptrace-abi.h
  HDRINST usr/include/asm/vm86.h
  HDRINST usr/include/asm/vmx.h
  HDRINST usr/include/asm/ldt.h
  HDRINST usr/include/asm/perf_regs.h
  HDRINST usr/include/asm/kvm.h
  HDRINST usr/include/asm/debugreg.h
  HDRINST usr/include/asm/signal.h
  HDRINST usr/include/asm/bootparam.h
  HDRINST usr/include/asm/siginfo.h
  HDRINST usr/include/asm/hw_breakpoint.h
  HDRINST usr/include/asm/stat.h
  HDRINST usr/include/asm/setup.h
  HDRINST usr/include/asm/sembuf.h
  HDRINST usr/include/asm/sgx.h
  HDRINST usr/include/asm/ucontext.h
  HDRINST usr/include/asm/byteorder.h
  HDRINST usr/include/asm/unistd_64.h
  HDRINST usr/include/asm/ioctls.h
  HDRINST usr/include/asm/types.h
  HDRINST usr/include/asm/bpf_perf_event.h
  HDRINST usr/include/asm/poll.h
  HDRINST usr/include/asm/resource.h
  HDRINST usr/include/asm/param.h
  HDRINST usr/include/asm/sockios.h
  HDRINST usr/include/asm/errno.h
  HDRINST usr/include/asm/unistd_x32.h
  HDRINST usr/include/asm/termios.h
  HDRINST usr/include/asm/ioctl.h
  HDRINST usr/include/asm/socket.h
  HDRINST usr/include/asm/unistd_32.h
  HDRINST usr/include/asm/termbits.h
  HDRINST usr/include/asm/fcntl.h
  HDRINST usr/include/asm/ipcbuf.h
  HOSTLD  scripts/mod/modpost
  CC      kernel/bounds.s
  CHKSHA1 ../include/linux/atomic/atomic-arch-fallback.h
  CHKSHA1 ../include/linux/atomic/atomic-instrumented.h
  CHKSHA1 ../include/linux/atomic/atomic-long.h
  UPD     include/generated/timeconst.h
  UPD     include/generated/bounds.h
  CC      arch/x86/kernel/asm-offsets.s
  LD      /kernel/build64-default/tools/objtool/arch/x86/objtool-in.o
  UPD     include/generated/asm-offsets.h
  CALL    ../scripts/checksyscalls.sh
  LD      /kernel/build64-default/tools/objtool/objtool-in.o
  LINK    /kernel/build64-default/tools/objtool/objtool
  LDS     scripts/module.lds
  CC      init/main.o
  CC      security/commoncap.o
  AR      certs/built-in.a
  HOSTCC  usr/gen_init_cpio
  AS      arch/x86/lib/clear_page_64.o
  CC      security/min_addr.o
  CC      arch/x86/lib/cmdline.o
  CC      ipc/compat.o
  AS      arch/x86/lib/cmpxchg16b_emu.o
  CC      security/inode.o
  CC      init/do_mounts.o
  CC      ipc/util.o
  UPD     init/utsversion-tmp.h
  CC      arch/x86/lib/copy_mc.o
  CC      ipc/msgutil.o
  AS      arch/x86/lib/copy_mc_64.o
  CC      security/device_cgroup.o
  AR      arch/x86/video/built-in.a
  AR      arch/x86/virt/vmx/built-in.a
  CC      io_uring/io_uring.o
  CC      arch/x86/pci/i386.o
  CC      arch/x86/power/cpu.o
  AS      arch/x86/lib/copy_page_64.o
  CC      arch/x86/realmode/init.o
  CC      block/partitions/core.o
  AR      drivers/irqchip/built-in.a
  CC      security/keys/gc.o
  AS      arch/x86/crypto/aesni-intel_asm.o
  CC [M]  arch/x86/video/fbdev.o
  CC      fs/iomap/trace.o
  AR      drivers/cache/built-in.a
  CC      fs/kernfs/mount.o
  AR      virt/lib/built-in.a
  CC      fs/nfs_common/grace.o
  AR      fs/quota/built-in.a
  CC      fs/sysfs/file.o
  CC      arch/x86/mm/pat/set_memory.o
  AR      sound/drivers/opl3/built-in.a
  CC      arch/x86/events/amd/core.o
  CC      sound/core/seq/seq.o
  CC      fs/notify/dnotify/dnotify.o
  AR      arch/x86/virt/built-in.a
  CC      net/core/sock.o
  CC [M]  virt/lib/irqbypass.o
  CC      mm/filemap.o
  CC      security/keys/key.o
  AR      sound/i2c/other/built-in.a
  CC      arch/x86/events/amd/lbr.o
  CC      arch/x86/kernel/fpu/init.o
  AR      drivers/bus/mhi/built-in.a
  CC      arch/x86/kernel/fpu/bugs.o
  CC      arch/x86/entry/vsyscall/vsyscall_64.o
  AR      sound/i2c/built-in.a
  AR      drivers/bus/built-in.a
  AR      sound/drivers/opl4/built-in.a
  AR      sound/isa/ad1816a/built-in.a
  AS      arch/x86/entry/vsyscall/vsyscall_emu_64.o
  CC      arch/x86/entry/vdso/vma.o
  CC      lib/kunit/hooks.o
  AR      sound/drivers/mpu401/built-in.a
  AR      sound/isa/ad1848/built-in.a
  CC      kernel/sched/core.o
  CC      fs/kernfs/inode.o
  CC      kernel/locking/mutex.o
  CC      arch/x86/crypto/aesni-intel_glue.o
  AR      drivers/phy/allwinner/built-in.a
  AS      arch/x86/crypto/aesni-intel_avx-x86_64.o
  CC      mm/kasan/common.o
  AR      sound/drivers/vx/built-in.a
  AR      sound/isa/cs423x/built-in.a
  AR      drivers/phy/amlogic/built-in.a
  AR      sound/isa/es1688/built-in.a
  CC      crypto/api.o
  AR      sound/drivers/pcsp/built-in.a
  AR      drivers/phy/broadcom/built-in.a
  AR      sound/isa/galaxy/built-in.a
  AR      sound/drivers/built-in.a
  AR      drivers/phy/cadence/built-in.a
  AR      sound/isa/gus/built-in.a
  CC      fs/proc/task_mmu.o
  CC      arch/x86/entry/vdso/extable.o
  AR      drivers/phy/freescale/built-in.a
  CC      net/llc/llc_core.o
  AR      sound/isa/msnd/built-in.a
  AR      drivers/phy/hisilicon/built-in.a
  AR      sound/isa/opti9xx/built-in.a
  AR      sound/isa/sb/built-in.a
  AR      drivers/phy/ingenic/built-in.a
  AR      sound/isa/wavefront/built-in.a
  AR      sound/isa/wss/built-in.a
  AR      drivers/phy/intel/built-in.a
  CC      fs/configfs/inode.o
  AR      sound/isa/built-in.a
  AR      drivers/phy/lantiq/built-in.a
  AR      drivers/phy/marvell/built-in.a
  CC      arch/x86/pci/init.o
  AR      drivers/phy/mediatek/built-in.a
  AR      drivers/phy/microchip/built-in.a
  AR      drivers/phy/motorola/built-in.a
  AR      drivers/phy/mscc/built-in.a
  AR      drivers/phy/qualcomm/built-in.a
  GEN     usr/initramfs_data.cpio
  AR      drivers/phy/ralink/built-in.a
  CC [M]  lib/kunit/test.o
  COPY    usr/initramfs_inc_data
  AR      drivers/phy/renesas/built-in.a
  AS      usr/initramfs_data.o
  AR      usr/built-in.a
  AR      drivers/phy/rockchip/built-in.a
  AS      arch/x86/lib/copy_user_64.o
  AS      arch/x86/lib/copy_user_uncached_64.o
  CC      arch/x86/lib/cpu.o
  AR      drivers/phy/samsung/built-in.a
  AR      drivers/phy/socionext/built-in.a
  CC      arch/x86/lib/delay.o
  CC      arch/x86/events/intel/core.o
  AR      drivers/phy/st/built-in.a
  CC      arch/x86/kernel/fpu/core.o
  AR      drivers/phy/starfive/built-in.a
  AR      drivers/phy/sunplus/built-in.a
  AR      drivers/phy/tegra/built-in.a
  AR      drivers/phy/ti/built-in.a
  AR      drivers/phy/xilinx/built-in.a
  CC      drivers/phy/phy-core.o
  CC      net/ethernet/eth.o
  CC      sound/core/seq/seq_lock.o
  CC      mm/mempool.o
  AS      arch/x86/realmode/rm/header.o
  CC      ipc/msg.o
  AR      virt/built-in.a
  AS      arch/x86/realmode/rm/trampoline_64.o
  CC      arch/x86/pci/mmconfig_64.o
  AS      arch/x86/realmode/rm/stack.o
  CC      arch/x86/pci/direct.o
  AR      drivers/pinctrl/actions/built-in.a
  AS      arch/x86/realmode/rm/reboot.o
  AR      drivers/pinctrl/bcm/built-in.a
  AR      drivers/pinctrl/cirrus/built-in.a
  AS      arch/x86/realmode/rm/wakeup_asm.o
  CC      drivers/gpio/gpiolib.o
  AR      drivers/pwm/built-in.a
  AR      drivers/pinctrl/freescale/built-in.a
  CC      arch/x86/pci/mmconfig-shared.o
  CC      net/802/p8022.o
  AR      fs/nfs_common/built-in.a
  CC      arch/x86/realmode/rm/wakemain.o
  CC      drivers/pinctrl/intel/pinctrl-baytrail.o
  AR      fs/notify/dnotify/built-in.a
  CC      drivers/pinctrl/intel/pinctrl-intel.o
  CC      fs/notify/inotify/inotify_fsnotify.o
  CC [M]  drivers/pinctrl/intel/pinctrl-cherryview.o
  CC      fs/kernfs/dir.o
  CC      drivers/gpio/gpiolib-devres.o
  CC      fs/sysfs/dir.o
  CC      arch/x86/realmode/rm/video-mode.o
  CC      drivers/gpio/gpiolib-legacy.o
  AR      arch/x86/entry/vsyscall/built-in.a
  CC      drivers/gpio/gpiolib-cdev.o
  CC      arch/x86/pci/fixup.o
  AS      arch/x86/lib/getuser.o
  CC      arch/x86/power/hibernate_64.o
  CC      arch/x86/entry/vdso/vdso32-setup.o
  GEN     arch/x86/lib/inat-tables.c
  AS      arch/x86/realmode/rm/copy.o
  CC      block/partitions/ldm.o
  CC      fs/configfs/file.o
  CC      crypto/cipher.o
  AS      arch/x86/realmode/rm/bioscall.o
  CC      net/llc/llc_input.o
  CC      arch/x86/lib/insn-eval.o
  CC      security/keys/keyring.o
  CC      arch/x86/realmode/rm/regs.o
  CC      mm/kasan/report.o
  CC      arch/x86/realmode/rm/video-vga.o
  AS      arch/x86/crypto/aes_ctrby8_avx-x86_64.o
  CC [M]  lib/kunit/resource.o
  CC      arch/x86/events/amd/ibs.o
  CC      sound/core/seq/seq_clientmgr.o
  CC      arch/x86/realmode/rm/video-vesa.o
  CC      fs/iomap/iter.o
  AS [M]  arch/x86/crypto/ghash-clmulni-intel_asm.o
  CC      fs/notify/inotify/inotify_user.o
  CC [M]  arch/x86/crypto/ghash-clmulni-intel_glue.o
  CC      io_uring/xattr.o
  CC      arch/x86/mm/init.o
  CC      arch/x86/realmode/rm/video-bios.o
  CC      io_uring/nop.o
  PASYMS  arch/x86/realmode/rm/pasyms.h
  CC      fs/kernfs/file.o
  LDS     arch/x86/realmode/rm/realmode.lds
  LD      arch/x86/realmode/rm/realmode.elf
  RELOCS  arch/x86/realmode/rm/realmode.relocs
  OBJCOPY arch/x86/realmode/rm/realmode.bin
  AS      arch/x86/realmode/rmpiggy.o
  CC      fs/sysfs/symlink.o
  CC      arch/x86/pci/acpi.o
  CC      arch/x86/pci/legacy.o
  AR      arch/x86/realmode/built-in.a
  CC      fs/sysfs/mount.o
  LDS     arch/x86/entry/vdso/vdso.lds
  AS      arch/x86/entry/vdso/vdso-note.o
  CC      fs/configfs/dir.o
  CC      drivers/pci/msi/pcidev_msi.o
  CC      arch/x86/entry/vdso/vclock_gettime.o
  AR      drivers/phy/built-in.a
  CC      drivers/video/console/dummycon.o
  CC      drivers/video/logo/logo.o
  CC      init/do_mounts_initrd.o
  CC      net/802/psnap.o
  AS      arch/x86/power/hibernate_asm_64.o
  CC      drivers/video/backlight/backlight.o
  CC      crypto/compress.o
  CC      arch/x86/power/hibernate.o
  CC      arch/x86/mm/pat/memtype.o
  CC      crypto/algapi.o
  CC [M]  lib/kunit/static_stub.o
  CC      arch/x86/kernel/fpu/regset.o
  CC      net/llc/llc_output.o
  AS [M]  arch/x86/crypto/crc32-pclmul_asm.o
  CC [M]  arch/x86/crypto/crc32-pclmul_glue.o
  CC [M]  drivers/pinctrl/intel/pinctrl-broxton.o
  CC      mm/kasan/init.o
  CC      ipc/sem.o
  AR      net/ethernet/built-in.a
  CC      ipc/shm.o
  CC      ipc/syscall.o
  CC      fs/iomap/buffered-io.o
  CC      arch/x86/lib/insn.o
  CC      init/initramfs.o
  CC [M]  drivers/pinctrl/intel/pinctrl-geminilake.o
  AS [M]  arch/x86/crypto/crct10dif-pcl-asm_64.o
  CC      drivers/gpio/gpiolib-sysfs.o
  CC      arch/x86/kernel/cpu/mce/core.o
  CC      arch/x86/entry/vdso/vgetcpu.o
  CC      fs/kernfs/symlink.o
  CC      kernel/locking/semaphore.o
  HOSTCC  drivers/video/logo/pnmtologo
  CC      mm/kasan/generic.o
  CC      arch/x86/kernel/cpu/mce/severity.o
  CC      drivers/video/console/vgacon.o
  HOSTCC  arch/x86/entry/vdso/vdso2c
  CC      drivers/pci/msi/api.o
  CC      fs/sysfs/group.o
  CC      arch/x86/pci/irq.o
  CC      block/partitions/msdos.o
  CC      security/keys/keyctl.o
  AR      fs/notify/inotify/built-in.a
  CC      arch/x86/kernel/cpu/mce/genpool.o
  CC      fs/notify/fanotify/fanotify.o
  CC      fs/notify/fsnotify.o
  CC      arch/x86/events/amd/uncore.o
  CC      fs/notify/fanotify/fanotify_user.o
  LOGO    drivers/video/logo/logo_linux_clut224.c
  AS      arch/x86/lib/memcpy_64.o
  CC      drivers/video/logo/logo_linux_clut224.o
  AS      arch/x86/lib/memmove_64.o
  AS      arch/x86/lib/memset_64.o
  CC [M]  lib/kunit/string-stream.o
  LDS     arch/x86/entry/vdso/vdso32/vdso32.lds
  AR      drivers/video/logo/built-in.a
  CC      arch/x86/lib/misc.o
  CC      fs/configfs/symlink.o
  CC      drivers/video/fbdev/core/fb_notify.o
  CC      arch/x86/lib/pc-conf-reg.o
  CC [M]  arch/x86/crypto/crct10dif-pclmul_glue.o
  CC      net/802/stp.o
  AR      arch/x86/power/built-in.a
  AS      arch/x86/entry/vdso/vdso32/note.o
  CC      arch/x86/events/zhaoxin/core.o
  CC [M]  drivers/pinctrl/intel/pinctrl-sunrisepoint.o
  CC      arch/x86/kernel/fpu/signal.o
  AS      arch/x86/entry/vdso/vdso32/system_call.o
  AS      arch/x86/entry/vdso/vdso32/sigreturn.o
  CC      sound/core/seq/seq_memory.o
  CC      arch/x86/entry/vdso/vdso32/vclock_gettime.o
  AS      arch/x86/entry/entry.o
  CC      fs/proc/inode.o
  CC      kernel/sched/fair.o
  CC      kernel/sched/build_policy.o
  AR      drivers/video/backlight/built-in.a
  CC      drivers/gpio/gpiolib-acpi.o
  AS      arch/x86/lib/putuser.o
  AS      arch/x86/entry/entry_64.o
  CC      arch/x86/mm/pat/memtype_interval.o
  AS      arch/x86/lib/retpoline.o
  AR      fs/kernfs/built-in.a
  CC [M]  drivers/video/fbdev/core/fb_info.o
  CC      arch/x86/lib/usercopy.o
  AR      net/llc/built-in.a
  CC [M]  drivers/video/fbdev/core/fbmem.o
  CC      arch/x86/entry/vdso/vdso32/vgetcpu.o
  CC      kernel/locking/rwsem.o
  CC      kernel/sched/build_utility.o
  CC      kernel/locking/percpu-rwsem.o
  CC      drivers/gpio/gpiolib-swnode.o
  CC      fs/proc/root.o
  AR      fs/sysfs/built-in.a
  CC      fs/devpts/inode.o
  CC      crypto/scatterwalk.o
  CC      drivers/pci/msi/msi.o
  CC [M]  lib/kunit/assert.o
  CC      drivers/pci/msi/irqdomain.o
  CC      init/calibrate.o
  CC [M]  lib/kunit/try-catch.o
  LD [M]  arch/x86/crypto/ghash-clmulni-intel.o
  LD [M]  arch/x86/crypto/crc32-pclmul.o
  LD [M]  arch/x86/crypto/crct10dif-pclmul.o
  AR      arch/x86/crypto/built-in.a
  CC      mm/kasan/report_generic.o
  CC      arch/x86/lib/usercopy_64.o
  CC      arch/x86/lib/msr-smp.o
  CC      fs/configfs/mount.o
  CC      block/partitions/efi.o
  AR      drivers/pinctrl/intel/built-in.a
  AR      drivers/pinctrl/mediatek/built-in.a
  AR      drivers/pinctrl/mvebu/built-in.a
  CC      fs/notify/notification.o
  AR      drivers/pinctrl/nomadik/built-in.a
  AR      drivers/video/console/built-in.a
  CC      drivers/video/aperture.o
  AR      drivers/pinctrl/nuvoton/built-in.a
  CC [M]  drivers/video/fbdev/core/fbcmap.o
  VDSO    arch/x86/entry/vdso/vdso64.so.dbg
  AR      drivers/pinctrl/nxp/built-in.a
  AR      drivers/pinctrl/qcom/built-in.a
  AR      drivers/pinctrl/sprd/built-in.a
  VDSO    arch/x86/entry/vdso/vdso32.so.dbg
  AR      drivers/pinctrl/sunplus/built-in.a
  OBJCOPY arch/x86/entry/vdso/vdso64.so
  AR      net/802/built-in.a
  OBJCOPY arch/x86/entry/vdso/vdso32.so
  VDSO2C  arch/x86/entry/vdso/vdso-image-64.c
  AR      drivers/pinctrl/ti/built-in.a
  VDSO2C  arch/x86/entry/vdso/vdso-image-32.c
  CC [M]  drivers/video/fbdev/core/modedb.o
  CC      drivers/pinctrl/core.o
  CC      arch/x86/entry/vdso/vdso-image-64.o
  CC [M]  drivers/video/fbdev/core/fbcvt.o
  CC      init/init_task.o
  AR      arch/x86/mm/pat/built-in.a
  CC      arch/x86/events/intel/bts.o
  CC      arch/x86/mm/init_64.o
  CC      arch/x86/events/intel/ds.o
  AR      arch/x86/events/zhaoxin/built-in.a
  CC      fs/proc/base.o
  CC      arch/x86/pci/common.o
  CC      arch/x86/kernel/fpu/xstate.o
  CC      sound/core/seq/seq_queue.o
  CC      arch/x86/events/core.o
  AR      arch/x86/events/amd/built-in.a
  CC      mm/oom_kill.o
  CC      arch/x86/mm/fault.o
  CC      security/keys/permission.o
  CC      ipc/ipc_sysctl.o
  CC      ipc/mqueue.o
  CC      fs/proc/generic.o
  CC      ipc/namespace.o
  CC      arch/x86/entry/vdso/vdso-image-32.o
  CC [M]  lib/kunit/executor.o
  CC      fs/proc/array.o
  CC      crypto/proc.o
  CC      crypto/aead.o
  CC      net/core/request_sock.o
  CC      mm/kasan/shadow.o
  CC      fs/configfs/item.o
  CC      arch/x86/lib/cache-smp.o
  AR      fs/devpts/built-in.a
  AR      arch/x86/entry/vdso/built-in.a
  CC      arch/x86/entry/syscall_64.o
  CC      fs/ext4/balloc.o
  CC      arch/x86/kernel/cpu/mce/intel.o
  AR      drivers/gpio/built-in.a
  CC      fs/ext4/bitmap.o
  CC      fs/ext4/block_validity.o
  CC      fs/iomap/direct-io.o
  CC      fs/ext4/dir.o
  AR      fs/notify/fanotify/built-in.a
  CC      fs/notify/group.o
  CC      mm/kasan/quarantine.o
  CC      arch/x86/lib/msr.o
  AR      drivers/pci/msi/built-in.a
  CC      drivers/pci/pcie/portdrv.o
  CC      init/version.o
  CC      ipc/mq_sysctl.o
  CC      kernel/locking/irqflag-debug.o
  CC      security/keys/process_keys.o
  AR      block/partitions/built-in.a
  CC      sound/core/seq/seq_fifo.o
  CC      net/sched/sch_generic.o
  CC      block/bdev.o
  CC      net/sched/sch_mq.o
  CC      drivers/idle/intel_idle.o
  CC [M]  lib/kunit/attributes.o
  CC      drivers/pci/pcie/rcec.o
  CC      arch/x86/pci/early.o
  AS      arch/x86/lib/msr-reg.o
  CC      crypto/geniv.o
  CC      arch/x86/events/intel/knc.o
  CC      crypto/lskcipher.o
  CC      kernel/locking/mutex-debug.o
  AR      init/built-in.a
  CC      mm/fadvise.o
  AR      arch/x86/ia32/built-in.a
  CC [M]  drivers/video/fbdev/core/fb_cmdline.o
  CC      arch/x86/entry/common.o
  CC [M]  drivers/video/fbdev/core/fb_backlight.o
  AR      fs/configfs/built-in.a
  CC      fs/jbd2/transaction.o
  CC [M]  drivers/video/fbdev/core/fbmon.o
  CC      arch/x86/kernel/cpu/mce/threshold.o
  AS      arch/x86/entry/thunk_64.o
  AS      arch/x86/entry/entry_64_compat.o
  CC      fs/ext4/ext4_jbd2.o
  CC      fs/ramfs/inode.o
  CC      net/core/skbuff.o
  CC      arch/x86/lib/msr-reg-export.o
  CC      fs/ext4/extents.o
  CC      drivers/pinctrl/pinctrl-utils.o
  CC      fs/notify/mark.o
  AR      mm/kasan/built-in.a
  AR      arch/x86/kernel/fpu/built-in.a
  CC      mm/maccess.o
  CC      block/fops.o
  CC      arch/x86/kernel/acpi/boot.o
  CC      block/bio.o
  AS      arch/x86/lib/hweight.o
  CC      sound/core/seq/seq_prioq.o
  CC      arch/x86/entry/syscall_32.o
  CC      arch/x86/lib/iomem.o
  AR      arch/x86/platform/atom/built-in.a
  AR      arch/x86/platform/ce4100/built-in.a
  AR      lib/kunit/built-in.a
  CC      arch/x86/platform/efi/memmap.o
  LD [M]  lib/kunit/kunit.o
  AR      arch/x86/net/built-in.a
  CC      fs/jbd2/commit.o
  CC      drivers/pci/pcie/aspm.o
  CC      lib/math/div64.o
  CC [M]  drivers/video/fbdev/core/fb_defio.o
  CC      arch/x86/pci/bus_numa.o
  CC      fs/iomap/fiemap.o
  CC      kernel/locking/lockdep.o
  CC      lib/math/gcd.o
  CC      io_uring/fs.o
  CC      arch/x86/platform/efi/quirks.o
  CC      arch/x86/mm/ioremap.o
  CC      lib/math/lcm.o
  CC      lib/math/int_log.o
  CC      fs/iomap/seek.o
  CC      arch/x86/events/intel/lbr.o
  CC [M]  drivers/video/fbdev/core/fb_chrdev.o
  CC      arch/x86/platform/efi/efi.o
  CC      crypto/skcipher.o
  CC      arch/x86/platform/efi/efi_64.o
  CC      security/keys/request_key.o
  CC      lib/crypto/memneq.o
  CC      arch/x86/mm/extable.o
  CC      lib/math/int_pow.o
  CC      lib/math/int_sqrt.o
  CC      drivers/pinctrl/pinmux.o
  CC      lib/crypto/utils.o
  CC      fs/ramfs/file-mmu.o
  CC      lib/math/reciprocal_div.o
  AS      arch/x86/lib/iomap_copy_64.o
  CC      arch/x86/kernel/cpu/mce/apei.o
  AR      ipc/built-in.a
  CC      arch/x86/lib/inat.o
  AR      drivers/char/ipmi/built-in.a
  AR      drivers/idle/built-in.a
  CC      drivers/acpi/acpica/dsargs.o
  CC      lib/math/rational.o
  CC      drivers/pnp/pnpacpi/core.o
  AR      arch/x86/entry/built-in.a
  CC      drivers/pnp/core.o
  CC      sound/core/seq/seq_timer.o
  CC      drivers/pnp/card.o
  CC      drivers/acpi/acpica/dscontrol.o
  CC      drivers/pnp/driver.o
  AR      arch/x86/lib/built-in.a
  AR      arch/x86/lib/lib.a
  CC      mm/page-writeback.o
  CC      drivers/acpi/acpica/dsdebug.o
  CC      fs/notify/fdinfo.o
  CC      arch/x86/pci/amd_bus.o
  CC      drivers/acpi/acpica/dsfield.o
  CC      arch/x86/mm/mmap.o
  CC      drivers/video/cmdline.o
  CC      fs/iomap/swapfile.o
  CC      crypto/seqiv.o
  CC      fs/proc/fd.o
  CC      lib/crypto/chacha.o
  CC      fs/jbd2/recovery.o
  CC      fs/hugetlbfs/inode.o
  AR      fs/ramfs/built-in.a
  CC      drivers/acpi/acpica/dsinit.o
  CC      io_uring/splice.o
  CC      fs/fat/cache.o
  CC [M]  drivers/video/fbdev/core/fb_procfs.o
  CC      arch/x86/kernel/acpi/sleep.o
  CC      fs/fat/dir.o
  CC      block/elevator.o
  CC [M]  lib/math/prime_numbers.o
  CC      fs/fat/fatent.o
  CC      lib/crypto/aes.o
  CC      fs/nfs/client.o
  CC      io_uring/sync.o
  AR      arch/x86/kernel/cpu/mce/built-in.a
  CC      crypto/echainiv.o
  AS      arch/x86/platform/efi/efi_stub_64.o
  CC      security/keys/request_key_auth.o
  CC      drivers/pinctrl/pinconf.o
  CC      arch/x86/kernel/cpu/mtrr/mtrr.o
  CC      fs/nfs/dir.o
  CC      io_uring/advise.o
  AR      arch/x86/platform/efi/built-in.a
  CC      drivers/pnp/pnpacpi/rsparser.o
  AR      arch/x86/platform/geode/built-in.a
  CC      fs/jbd2/checkpoint.o
  CC      drivers/pci/pcie/aer.o
  CC      lib/crypto/gf128mul.o
  AR      arch/x86/platform/iris/built-in.a
  CC      arch/x86/platform/intel/iosf_mbi.o
  CC      drivers/pnp/resource.o
  CC      sound/core/seq/seq_system.o
  CC      drivers/acpi/acpica/dsmethod.o
  CC      io_uring/filetable.o
  CC      net/sched/sch_frag.o
  CC      block/blk-core.o
  AR      fs/notify/built-in.a
  CC      arch/x86/mm/pgtable.o
  CC      arch/x86/kernel/cpu/microcode/core.o
  CC      arch/x86/events/intel/p4.o
  CC      drivers/video/nomodeset.o
  AR      arch/x86/pci/built-in.a
  CC      crypto/ahash.o
  AS      arch/x86/kernel/acpi/wakeup_64.o
  CC      drivers/video/hdmi.o
  AR      fs/iomap/built-in.a
  CC      sound/core/seq/seq_ports.o
  AR      arch/x86/platform/intel-mid/built-in.a
  CC      crypto/shash.o
  CC      sound/core/sound.o
  AR      lib/math/built-in.a
  CC      fs/ext4/extents_status.o
  CC      fs/proc/proc_tty.o
  CC      drivers/pnp/manager.o
  CC      arch/x86/kernel/acpi/apei.o
  CC      drivers/pinctrl/pinconf-generic.o
  CC [M]  drivers/video/fbdev/core/fbsysfs.o
  CC      lib/crypto/blake2s.o
  CC      drivers/acpi/acpica/dsmthdat.o
  CC      drivers/acpi/acpica/dsobject.o
  CC      security/keys/user_defined.o
  CC      arch/x86/kernel/apic/apic.o
  CC      sound/core/seq/seq_info.o
  CC      arch/x86/kernel/cpu/mtrr/if.o
  CC      security/keys/compat.o
  CC      fs/jbd2/revoke.o
  CC      arch/x86/kernel/acpi/cppc.o
  CC [M]  drivers/video/fbdev/core/fbcon.o
  AR      arch/x86/platform/intel/built-in.a
  AR      arch/x86/platform/intel-quark/built-in.a
  CC      io_uring/openclose.o
  AR      arch/x86/platform/olpc/built-in.a
  AR      arch/x86/platform/scx200/built-in.a
  AR      arch/x86/platform/ts5500/built-in.a
  AR      arch/x86/platform/uv/built-in.a
  AR      arch/x86/platform/built-in.a
  CC      net/sched/sch_api.o
  AR      drivers/pnp/pnpacpi/built-in.a
  CC      arch/x86/kernel/cpu/microcode/intel.o
  CC      drivers/pnp/support.o
  CC      arch/x86/kernel/cpu/microcode/amd.o
  CC      fs/jbd2/journal.o
  CC      lib/crypto/blake2s-generic.o
  CC      security/keys/proc.o
  CC      drivers/acpi/acpica/dsopcode.o
  CC      fs/fat/file.o
  CC      fs/fat/inode.o
  CC      block/blk-sysfs.o
  CC      drivers/pci/pcie/err.o
  CC      fs/proc/cmdline.o
  AR      fs/hugetlbfs/built-in.a
  CC      block/blk-flush.o
  AR      drivers/pinctrl/built-in.a
  CC      io_uring/uring_cmd.o
  CC      drivers/pnp/interface.o
  CC      drivers/pnp/quirks.o
  CC      arch/x86/events/intel/p6.o
  CC      arch/x86/events/probe.o
  CC      arch/x86/events/intel/pt.o
  CC      arch/x86/mm/physaddr.o
  CC      fs/nfs/file.o
  CC      arch/x86/events/utils.o
  CC      fs/fat/misc.o
  AR      sound/core/seq/built-in.a
  CC [M]  arch/x86/kvm/../../../virt/kvm/kvm_main.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/eventfd.o
  CC      sound/core/init.o
  CC      crypto/akcipher.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/binary_stats.o
  AR      drivers/amba/built-in.a
  CC      drivers/pci/hotplug/pci_hotplug_core.o
  CC      arch/x86/kernel/cpu/mtrr/generic.o
  CC      lib/crypto/blake2s-selftest.o
  CC      arch/x86/kernel/acpi/cstate.o
  CC      drivers/pci/hotplug/acpi_pcihp.o
  CC      arch/x86/events/intel/uncore.o
  CC      arch/x86/events/rapl.o
  CC      mm/folio-compat.o
  CC      drivers/pnp/system.o
  CC      drivers/acpi/acpica/dspkginit.o
  CC      fs/proc/consoles.o
  CC      lib/crypto/des.o
  CC      lib/crypto/sha1.o
  CC      fs/nfs/getroot.o
  CC      security/keys/sysctl.o
  CC      arch/x86/events/msr.o
  CC      arch/x86/mm/tlb.o
  AR      arch/x86/kernel/cpu/microcode/built-in.a
  CC      drivers/pci/pcie/aer_inject.o
  CC      arch/x86/mm/cpu_entry_area.o
  CC      fs/proc/cpuinfo.o
  CC      fs/fat/nfs.o
  CC      fs/fat/namei_vfat.o
  CC      io_uring/epoll.o
  CC      drivers/pci/hotplug/pciehp_core.o
  CC      lib/crypto/sha256.o
  CC      fs/fat/namei_msdos.o
  CC      crypto/sig.o
  CC      block/blk-settings.o
  CC      block/blk-ioc.o
  AR      arch/x86/kernel/acpi/built-in.a
  CC      arch/x86/kernel/cpu/cacheinfo.o
  CC      fs/ext4/file.o
  CC      drivers/acpi/acpica/dsutils.o
  AR      kernel/sched/built-in.a
  CC      arch/x86/events/intel/uncore_nhmex.o
  AR      drivers/pci/controller/dwc/built-in.a
  AR      drivers/pnp/built-in.a
  CC [M]  lib/crypto/arc4.o
  CC      block/blk-map.o
  AR      drivers/pci/controller/mobiveil/built-in.a
  CC      drivers/pci/controller/vmd.o
  CC      drivers/pci/hotplug/pciehp_ctrl.o
  CC      sound/core/memory.o
  AR      drivers/clk/actions/built-in.a
  AR      drivers/clk/analogbits/built-in.a
  CC      fs/ext4/fsmap.o
  CC      fs/proc/devices.o
  AR      drivers/clk/bcm/built-in.a
  AR      security/keys/built-in.a
  AR      security/built-in.a
  AR      drivers/clk/imgtec/built-in.a
  CC      arch/x86/kernel/apic/apic_common.o
  CC      kernel/power/qos.o
  AR      drivers/clk/imx/built-in.a
  CC      arch/x86/kernel/apic/apic_noop.o
  AR      drivers/clk/ingenic/built-in.a
  AR      drivers/clk/mediatek/built-in.a
  AR      drivers/clk/microchip/built-in.a
  CC      arch/x86/kernel/cpu/mtrr/cleanup.o
  AR      drivers/clk/mstar/built-in.a
  AR      drivers/clk/mvebu/built-in.a
  CC      kernel/power/main.o
  CC      mm/readahead.o
  AR      drivers/clk/ralink/built-in.a
  CC      fs/proc/interrupts.o
  AR      drivers/clk/renesas/built-in.a
  AR      drivers/clk/socfpga/built-in.a
  CC      fs/proc/loadavg.o
  AR      drivers/clk/sprd/built-in.a
  AR      drivers/clk/starfive/built-in.a
  CC      fs/proc/meminfo.o
  AR      drivers/clk/sunxi-ng/built-in.a
  CC      mm/swap.o
  CC      crypto/kpp.o
  AR      drivers/pci/switch/built-in.a
  AR      drivers/clk/ti/built-in.a
  CC      crypto/acompress.o
  CC      fs/ext4/fsync.o
  AR      drivers/clk/versatile/built-in.a
  CC      block/blk-merge.o
  CC      kernel/locking/lockdep_proc.o
  CC      drivers/clk/x86/clk-lpss-atom.o
  AR      drivers/clk/xilinx/built-in.a
  CC [M]  drivers/video/fbdev/core/bitblit.o
  CC      arch/x86/events/intel/uncore_snb.o
  CC      drivers/acpi/acpica/dswexec.o
  CC      drivers/pci/access.o
  CC      drivers/pci/pcie/pme.o
  CC      io_uring/statx.o
  CC      arch/x86/mm/maccess.o
  CC      fs/exportfs/expfs.o
  LD [M]  lib/crypto/libarc4.o
  CC      arch/x86/mm/pgprot.o
  AR      lib/crypto/built-in.a
  CC      lib/zlib_inflate/inffast.o
  CC      sound/core/control.o
  CC      net/netlink/af_netlink.o
  CC      io_uring/net.o
  CC      lib/zlib_inflate/inflate.o
  CC      arch/x86/kernel/apic/ipi.o
  CC      net/netlink/genetlink.o
  CC      arch/x86/kernel/apic/vector.o
  CC      block/blk-timeout.o
  CC      net/sched/sch_blackhole.o
  CC      block/blk-lib.o
  CC      net/sched/sch_fifo.o
  CC      drivers/pci/hotplug/pciehp_pci.o
  CC      fs/nfs/inode.o
  CC      drivers/acpi/acpica/dswload.o
  CC      fs/ext4/hash.o
  CC [M]  drivers/video/fbdev/core/softcursor.o
  AR      fs/fat/built-in.a
  CC      drivers/clk/clk-devres.o
  CC      drivers/clk/x86/clk-pmc-atom.o
  CC      lib/zlib_inflate/infutil.o
  AR      sound/pci/ac97/built-in.a
  CC      fs/lockd/clntlock.o
  CC      drivers/acpi/acpica/dswload2.o
  AR      sound/pci/ali5451/built-in.a
  CC      fs/lockd/clntproc.o
  AR      sound/pci/asihpi/built-in.a
  CC      fs/lockd/clntxdr.o
  AR      drivers/pci/controller/built-in.a
  AR      sound/pci/au88x0/built-in.a
  CC      crypto/scompress.o
  AR      sound/pci/aw2/built-in.a
  CC      fs/lockd/host.o
  CC      fs/proc/stat.o
  AR      sound/pci/ctxfi/built-in.a
  CC      fs/lockd/svc.o
  AR      sound/pci/ca0106/built-in.a
  AR      sound/pci/cs46xx/built-in.a
  CC      arch/x86/mm/hugetlbpage.o
  AR      sound/pci/cs5535audio/built-in.a
  AR      sound/pci/lola/built-in.a
  AR      arch/x86/kernel/cpu/mtrr/built-in.a
  CC      fs/lockd/svclock.o
  AR      sound/pci/lx6464es/built-in.a
  AR      sound/pci/echoaudio/built-in.a
  CC      arch/x86/kernel/cpu/scattered.o
  AR      sound/ppc/built-in.a
  AR      sound/pci/emu10k1/built-in.a
  AR      drivers/video/fbdev/omap/built-in.a
  CC      kernel/locking/spinlock.o
  AR      sound/pci/hda/built-in.a
  CC [M]  sound/pci/hda/hda_bind.o
  AR      fs/exportfs/built-in.a
  AR      drivers/video/fbdev/omap2/omapfb/dss/built-in.a
  AR      drivers/video/fbdev/omap2/omapfb/displays/built-in.a
  AR      sound/pci/ice1712/built-in.a
  AR      drivers/video/fbdev/omap2/omapfb/built-in.a
  CC [M]  arch/x86/kvm/../../../virt/kvm/vfio.o
  CC      kernel/power/console.o
  CC      drivers/pci/pcie/dpc.o
  AR      drivers/video/fbdev/omap2/built-in.a
  CC [M]  drivers/video/fbdev/uvesafb.o
  CC      kernel/printk/printk.o
  CC [M]  drivers/video/fbdev/simplefb.o
  CC      lib/zlib_inflate/inftrees.o
  CC      arch/x86/events/intel/uncore_snbep.o
  CC      mm/truncate.o
  CC      kernel/printk/printk_safe.o
  CC      lib/zlib_inflate/inflate_syms.o
  CC      arch/x86/kernel/apic/init.o
  CC      drivers/pci/hotplug/pciehp_hpc.o
  AR      sound/pci/korg1212/built-in.a
  AR      net/bpf/built-in.a
  CC      kernel/locking/osq_lock.o
  CC      fs/nls/nls_base.o
  CC      drivers/clk/clk-bulk.o
  CC      kernel/locking/qspinlock.o
  CC      drivers/acpi/acpica/dswscope.o
  CC      fs/nls/nls_cp437.o
  CC      drivers/acpi/acpica/dswstate.o
  AR      fs/jbd2/built-in.a
  CC      net/core/datagram.o
  CC      mm/vmscan.o
  CC      fs/ext4/ialloc.o
  AR      drivers/clk/x86/built-in.a
  CC      kernel/power/process.o
  AR      fs/unicode/built-in.a
  CC      fs/ntfs/aops.o
  CC      kernel/locking/rtmutex_api.o
  CC      fs/ext4/indirect.o
  CC [M]  drivers/video/fbdev/core/tileblit.o
  CC      fs/proc/uptime.o
  CC      arch/x86/kernel/cpu/topology.o
  AR      net/sched/built-in.a
  CC      fs/ntfs/attrib.o
  CC      net/core/stream.o
  CC      crypto/algboss.o
  AR      lib/zlib_inflate/built-in.a
  CC      lib/zlib_deflate/deflate.o
  CC      block/blk-mq.o
  CC      block/blk-mq-tag.o
  CC      arch/x86/mm/kasan_init_64.o
  CC      lib/lzo/lzo1x_compress.o
  CC [M]  sound/pci/hda/hda_codec.o
  CC [M]  sound/pci/hda/hda_jack.o
  CC      lib/zlib_deflate/deftree.o
  CC      fs/proc/util.o
  CC      drivers/acpi/acpica/evevent.o
  AR      drivers/pci/pcie/built-in.a
  CC      mm/shrinker.o
  CC [M]  sound/pci/hda/hda_auto_parser.o
  CC      drivers/pci/hotplug/acpiphp_core.o
  CC      drivers/clk/clkdev.o
  CC      fs/nls/nls_ascii.o
  CC      crypto/testmgr.o
  CC      drivers/pci/bus.o
  CC      arch/x86/kernel/cpu/common.o
  CC      arch/x86/kernel/apic/hw_nmi.o
  CC      drivers/pci/probe.o
  CC      sound/core/misc.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/coalesced_mmio.o
  CC      kernel/irq/irqdesc.o
  CC      arch/x86/kernel/cpu/rdrand.o
  CC      kernel/irq/handle.o
  CC      fs/proc/version.o
  CC      mm/shmem.o
  CC      net/netlink/policy.o
  CC      io_uring/msg_ring.o
  CC      lib/lzo/lzo1x_decompress_safe.o
  CC      crypto/cmac.o
  CC      fs/lockd/svcshare.o
  CC      fs/proc/softirqs.o
  CC      drivers/acpi/acpica/evgpe.o
  CC [M]  drivers/video/fbdev/core/fb_logo.o
  CC      kernel/power/suspend.o
  CC      drivers/acpi/acpica/evgpeblk.o
  AR      sound/arm/built-in.a
  CC      fs/nls/nls_iso8859-1.o
  CC      lib/zlib_deflate/deflate_syms.o
  CC      fs/ext4/inline.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/async_pf.o
  CC      arch/x86/mm/numa.o
  CC      drivers/clk/clk.o
  CC      fs/ntfs/collate.o
  CC      drivers/pci/hotplug/acpiphp_glue.o
  CC      arch/x86/kernel/apic/io_apic.o
  CC      arch/x86/mm/numa_64.o
  CC      net/core/scm.o
  CC      sound/core/device.o
  CC      fs/ntfs/compress.o
  CC      sound/core/info.o
  CC      crypto/hmac.o
  CC      fs/lockd/svcproc.o
  CC      fs/proc/namespaces.o
  CC      fs/lockd/svcsubs.o
  CC      kernel/locking/spinlock_debug.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/irqchip.o
  AR      sound/sh/built-in.a
  AR      lib/lzo/built-in.a
  CC      block/blk-stat.o
  CC      block/blk-mq-sysfs.o
  AR      sound/synth/emux/built-in.a
  AR      sound/synth/built-in.a
  CC      drivers/acpi/acpica/evgpeinit.o
  AR      lib/zlib_deflate/built-in.a
  CC      block/blk-mq-cpumap.o
  CC      block/blk-mq-sched.o
  CC      fs/nls/nls_utf8.o
  CC      lib/lz4/lz4_compress.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/dirty_ring.o
  CC      kernel/irq/manage.o
  CC      drivers/pci/host-bridge.o
  CC      kernel/irq/spurious.o
  CC      arch/x86/mm/amdtopology.o
  CC      fs/lockd/mon.o
  CC      fs/nfs/super.o
  CC      kernel/printk/nbcon.o
  CC      net/netlink/diag.o
  CC      arch/x86/mm/srat.o
  CC      fs/ntfs/debug.o
  CC      arch/x86/events/intel/uncore_discovery.o
  CC      lib/zstd/zstd_compress_module.o
  CC      io_uring/timeout.o
  CC      kernel/locking/qrwlock.o
  CC [M]  drivers/video/fbdev/core/cfbfillrect.o
  CC      lib/zstd/compress/fse_compress.o
  CC      drivers/acpi/acpica/evgpeutil.o
  CC      fs/nfs/io.o
  CC [M]  fs/nls/nls_ucs2_utils.o
  CC      crypto/vmac.o
  CC      arch/x86/kernel/cpu/match.o
  AR      fs/nls/built-in.a
  CC      arch/x86/kernel/cpu/bugs.o
  CC      kernel/power/hibernate.o
  CC [M]  arch/x86/kvm/../../../virt/kvm/pfncache.o
  CC      fs/proc/self.o
  CC      kernel/printk/printk_ringbuffer.o
  CC      sound/core/isadma.o
  CC      block/ioctl.o
  CC      sound/core/vmaster.o
  CC      arch/x86/mm/pkeys.o
  CC      sound/core/ctljack.o
  CC      sound/core/jack.o
  CC      fs/ntfs/dir.o
  CC      fs/ntfs/file.o
  AR      drivers/pci/hotplug/built-in.a
  CC      drivers/pci/remove.o
  CC      kernel/irq/resend.o
  CC      drivers/acpi/acpica/evglock.o
  CC [M]  arch/x86/kvm/x86.o
  CC      arch/x86/kernel/cpu/aperfmperf.o
  CC      lib/zstd/compress/hist.o
  CC      fs/proc/thread_self.o
  CC      arch/x86/mm/pti.o
  CC      kernel/power/snapshot.o
  CC      kernel/irq/chip.o
  CC [M]  sound/pci/hda/hda_sysfs.o
  CC      net/core/gen_stats.o
  CC      drivers/acpi/acpica/evhandler.o
  CC      block/genhd.o
  CC [M]  drivers/video/fbdev/core/cfbcopyarea.o
  AR      kernel/locking/built-in.a
  CC      lib/zstd/compress/huf_compress.o
  CC      fs/lockd/trace.o
  CC      lib/zstd/compress/zstd_compress.o
  CC      arch/x86/events/intel/cstate.o
  CC      fs/ext4/inode.o
  CC      fs/proc/proc_sysctl.o
  CC [M]  sound/pci/hda/hda_controller.o
  CC      crypto/xcbc.o
  CC      fs/lockd/xdr.o
  AR      net/netlink/built-in.a
  CC      fs/lockd/clnt4xdr.o
  CC      net/ethtool/ioctl.o
  CC      kernel/printk/sysctl.o
  CC      arch/x86/kernel/cpu/cpuid-deps.o
  CC      fs/lockd/xdr4.o
  CC [M]  net/netfilter/ipvs/ip_vs_conn.o
  CC [M]  drivers/video/fbdev/core/cfbimgblt.o
  CC      arch/x86/kernel/apic/msi.o
  CC      fs/proc/proc_net.o
  CC [M]  net/netfilter/ipvs/ip_vs_core.o
  CC      io_uring/sqpoll.o
  CC      drivers/acpi/acpica/evmisc.o
  CC      lib/zstd/compress/zstd_compress_literals.o
  CC      sound/core/timer.o
  CC      drivers/pci/pci.o
  CC      lib/zstd/compress/zstd_compress_sequences.o
  CC      drivers/pci/pci-driver.o
  CC      lib/zstd/compress/zstd_compress_superblock.o
  CC      kernel/irq/dummychip.o
  AR      fs/hostfs/built-in.a
  CC      lib/zstd/compress/zstd_double_fast.o
  AR      kernel/printk/built-in.a
  CC      arch/x86/kernel/cpu/umwait.o
  CC      lib/zstd/compress/zstd_fast.o
  CC      kernel/rcu/update.o
  CC      arch/x86/kernel/cpu/proc.o
  CC      fs/nfs/direct.o
  CC      lib/lz4/lz4hc_compress.o
  CC      sound/core/hrtimer.o
  AR      arch/x86/mm/built-in.a
  CC      fs/proc/kcore.o
  CC      fs/debugfs/inode.o
  CC      net/netfilter/core.o
  CC      crypto/crypto_null.o
  AR      net/ipv4/netfilter/built-in.a
  CC [M]  net/ipv4/netfilter/nf_defrag_ipv4.o
  CC      net/xfrm/xfrm_policy.o
  AR      arch/x86/events/intel/built-in.a
  AR      arch/x86/events/built-in.a
  CC      fs/ntfs/index.o
  CC      drivers/acpi/acpica/evregion.o
  CC      net/core/gen_estimator.o
  CC      net/unix/af_unix.o
  CC      net/ethtool/common.o
  CC [M]  net/netfilter/ipvs/ip_vs_ctl.o
  CC [M]  net/ipv4/netfilter/nf_reject_ipv4.o
  CC      kernel/irq/devres.o
  CC      io_uring/fdinfo.o
  CC      arch/x86/kernel/apic/x2apic_phys.o
  AR      sound/pci/mixart/built-in.a
  CC      mm/util.o
  CC      block/ioprio.o
  CC      lib/lz4/lz4_decompress.o
  MKCAP   arch/x86/kernel/cpu/capflags.c
  CC      fs/lockd/svc4proc.o
  CC      block/badblocks.o
  CC      fs/lockd/procfs.o
  CC      block/blk-rq-qos.o
  CC [M]  drivers/video/fbdev/core/fb_io_fops.o
  CC      drivers/pci/search.o
  AR      sound/pci/nm256/built-in.a
  CC      arch/x86/kernel/apic/x2apic_cluster.o
  CC      kernel/power/swap.o
  CC      crypto/md5.o
  CC      lib/xz/xz_dec_syms.o
  CC      drivers/acpi/acpica/evrgnini.o
  CC      crypto/sha1_generic.o
  CC      fs/debugfs/file.o
  CC [M]  sound/pci/hda/hda_proc.o
  CC      fs/proc/kmsg.o
  CC      fs/ntfs/inode.o
  CC      kernel/irq/autoprobe.o
  CC      fs/ntfs/mft.o
  CC      kernel/irq/irqdomain.o
  CC      drivers/clk/clk-divider.o
  CC      drivers/pci/pci-sysfs.o
  CC      arch/x86/kernel/apic/apic_flat_64.o
  CC      net/core/net_namespace.o
  CC      net/core/secure_seq.o
  CC      arch/x86/kernel/apic/probe_64.o
  CC      lib/xz/xz_dec_stream.o
  CC      drivers/acpi/acpica/evsci.o
  CC      drivers/clk/clk-fixed-factor.o
  CC      sound/core/seq_device.o
  CC      drivers/clk/clk-fixed-rate.o
  CC      fs/ntfs/mst.o
  CC [M]  sound/pci/hda/hda_hwdep.o
  CC      block/disk-events.o
  CC      kernel/rcu/sync.o
  CC      net/xfrm/xfrm_state.o
  CC      net/xfrm/xfrm_hash.o
  CC [M]  drivers/video/fbdev/core/sysfillrect.o
  CC      crypto/sha256_generic.o
  CC      fs/proc/page.o
  CC      mm/mmzone.o
  CC      io_uring/tctx.o
  CC [M]  drivers/video/fbdev/core/syscopyarea.o
  CC      io_uring/poll.o
  CC      kernel/irq/proc.o
  CC      block/blk-ia-ranges.o
  CC      kernel/rcu/srcutree.o
  AR      fs/lockd/built-in.a
  CC      drivers/acpi/acpica/evxface.o
  AR      lib/lz4/built-in.a
  AR      net/ipv6/netfilter/built-in.a
  CC [M]  net/ipv4/netfilter/ip_tables.o
  CC      mm/vmstat.o
  CC [M]  net/ipv6/netfilter/nf_defrag_ipv6_hooks.o
  CC [M]  net/netfilter/ipvs/ip_vs_sched.o
  AR      arch/x86/kernel/apic/built-in.a
  CC      kernel/irq/migration.o
  CC      mm/backing-dev.o
  CC      lib/xz/xz_dec_lzma2.o
  CC [M]  net/ipv6/netfilter/nf_conntrack_reasm.o
  CC      fs/nfs/pagelist.o
  CC      kernel/rcu/tree.o
  CC      io_uring/cancel.o
  CC [M]  sound/core/control_led.o
  CC      drivers/clk/clk-gate.o
  CC      net/unix/garbage.o
  CC [M]  sound/pci/hda/hda_generic.o
  CC      fs/ntfs/namei.o
  AR      fs/debugfs/built-in.a
  CC      lib/zstd/compress/zstd_lazy.o
  CC      kernel/power/user.o
  CC      fs/tracefs/inode.o
  CC      kernel/power/poweroff.o
  CC      crypto/sha512_generic.o
  CC      net/ethtool/netlink.o
  CC      fs/tracefs/event_inode.o
  CC      lib/zstd/compress/zstd_ldm.o
  CC      lib/zstd/compress/zstd_opt.o
  CC      net/xfrm/xfrm_input.o
  CC      drivers/acpi/acpica/evxfevnt.o
  CC      kernel/irq/cpuhotplug.o
  CC      drivers/acpi/acpica/evxfgpe.o
  CC      io_uring/kbuf.o
  CC      mm/mm_init.o
  CC [M]  drivers/video/fbdev/core/sysimgblt.o
  CC      kernel/irq/pm.o
  CC      io_uring/rsrc.o
  CC      block/early-lookup.o
  AR      fs/proc/built-in.a
  CC      kernel/irq/msi.o
  CC      kernel/irq/affinity.o
  CC      drivers/clk/clk-multiplier.o
  CC      lib/xz/xz_dec_bcj.o
  CC      drivers/pci/rom.o
  CC      fs/ntfs/runlist.o
  CC      net/core/flow_dissector.o
  CC      lib/zstd/zstd_decompress_module.o
  CC      fs/nfs/read.o
  CC      fs/ntfs/super.o
  CC [M]  sound/core/hwdep.o
  CC      crypto/sha3_generic.o
  CC      block/bsg.o
  CC      block/bsg-lib.o
  CC      block/blk-cgroup.o
  AR      kernel/power/built-in.a
  CC      block/blk-cgroup-rwstat.o
  CC [M]  net/netfilter/ipvs/ip_vs_xmit.o
  CC      drivers/acpi/acpica/evxfregn.o
  CC      drivers/acpi/acpica/exconcat.o
  CC      drivers/clk/clk-mux.o
  CC      fs/ext4/ioctl.o
  CC      net/unix/sysctl_net_unix.o
  CC      crypto/blake2b_generic.o
  AR      fs/tracefs/built-in.a
  AR      lib/xz/built-in.a
  CC      mm/percpu.o
  CC      io_uring/rw.o
  CC [M]  net/netfilter/ipvs/ip_vs_app.o
  CC      io_uring/opdef.o
  CC      lib/raid6/algos.o
  CC      mm/slab_common.o
  CC [M]  net/ipv4/netfilter/iptable_filter.o
  CC      lib/raid6/recov.o
  HOSTCC  lib/raid6/mktables
  LD [M]  net/ipv6/netfilter/nf_defrag_ipv6.o
  CC      net/ethtool/bitset.o
  CC      net/ipv6/af_inet6.o
  CC      mm/compaction.o
  CC [M]  drivers/video/fbdev/core/fb_sys_fops.o
  CC      drivers/pci/setup-res.o
  CC      net/ethtool/strset.o
  CC      mm/show_mem.o
  CC      net/ethtool/linkinfo.o
  CC      drivers/acpi/acpica/exconfig.o
  CC [M]  net/ipv4/netfilter/iptable_mangle.o
  CC [M]  sound/core/pcm.o
  CC      crypto/ecb.o
  CC      block/blk-throttle.o
  CC      kernel/irq/matrix.o
  CC      drivers/clk/clk-composite.o
  CC      block/mq-deadline.o
  CC      block/kyber-iosched.o
  CC      lib/zstd/decompress/huf_decompress.o
  CC      fs/ntfs/sysctl.o
  CC      fs/ntfs/unistr.o
  AR      kernel/livepatch/built-in.a
  CC      fs/ext4/mballoc.o
  CC      crypto/cbc.o
  CC      drivers/pci/irq.o
  CC      crypto/pcbc.o
  CC      mm/shmem_quota.o
  CC      net/unix/diag.o
  UNROLL  lib/raid6/int1.c
  UNROLL  lib/raid6/int2.c
  UNROLL  lib/raid6/int4.c
  CC      drivers/acpi/acpica/exconvrt.o
  UNROLL  lib/raid6/int8.c
  CC      lib/raid6/recov_ssse3.o
  CC      net/packet/af_packet.o
  CC      net/key/af_key.o
  CC      fs/ext4/migrate.o
  CC      net/core/sysctl_net_core.o
  CC      net/core/dev.o
  CC      kernel/rcu/rcu_segcblist.o
  CC      lib/fonts/fonts.o
  LD [M]  drivers/video/fbdev/core/fb.o
  AR      drivers/video/fbdev/core/built-in.a
  AR      drivers/video/fbdev/built-in.a
  AR      drivers/video/built-in.a
  CC      lib/fonts/font_8x8.o
  CC      drivers/dma/dw/core.o
  CC      drivers/dma/dw/dw.o
  CC      drivers/clk/clk-fractional-divider.o
  CC      drivers/clk/clk-gpio.o
  CC      drivers/dma/dw/idma32.o
  CC [M]  sound/core/pcm_native.o
  CC [M]  net/ipv4/netfilter/iptable_nat.o
  CC      fs/nfs/symlink.o
  CC      fs/ntfs/upcase.o
  CC      drivers/acpi/acpica/excreate.o
  CC      crypto/cts.o
  CC      drivers/pci/vpd.o
  CC [M]  net/netfilter/ipvs/ip_vs_sync.o
  CC      net/ipv6/anycast.o
  CC      net/ethtool/linkmodes.o
  CC      net/ethtool/rss.o
  CC      net/xfrm/xfrm_output.o
  CC      net/xfrm/xfrm_sysctl.o
  CC      lib/raid6/recov_avx2.o
  CC      lib/fonts/font_8x16.o
  CC      net/ethtool/linkstate.o
  CC      io_uring/notif.o
  CC [M]  net/netfilter/ipvs/ip_vs_est.o
  CC      drivers/dma/hsu/hsu.o
  AR      kernel/irq/built-in.a
  CC [M]  arch/x86/kvm/emulate.o
  CC      net/core/dev_addr_lists.o
  CC      mm/interval_tree.o
  CC      arch/x86/kernel/kprobes/core.o
  CC      drivers/acpi/acpica/exdebug.o
  AR      sound/pci/oxygen/built-in.a
  CC      net/netfilter/nf_log.o
  CC      fs/ext4/mmp.o
  CC      net/unix/scm.o
  AR      drivers/clk/built-in.a
  CC      fs/ext4/move_extent.o
  CC      drivers/dma/dw/acpi.o
  CC      net/core/dst.o
  CC      net/core/netevent.o
  CC      drivers/dma/dw/pci.o
  AR      fs/ntfs/built-in.a
  CC      net/core/neighbour.o
  AR      drivers/dma/idxd/built-in.a
  LDS     arch/x86/kernel/vmlinux.lds
  CC      arch/x86/kernel/cpu/powerflags.o
  AS      arch/x86/kernel/head_64.o
  CC      kernel/dma/mapping.o
  CC      block/bfq-iosched.o
  CC      crypto/lrw.o
  AR      lib/fonts/built-in.a
  CC      kernel/entry/common.o
  CC      arch/x86/kernel/cpu/feat_ctl.o
  CC      drivers/pci/setup-bus.o
  CC      kernel/entry/syscall_user_dispatch.o
  CC      lib/raid6/mmx.o
  CC      drivers/acpi/acpica/exdump.o
  CC      lib/raid6/sse1.o
  CC      lib/raid6/sse2.o
  AR      sound/pci/pcxhr/built-in.a
  CC      fs/nfs/unlink.o
  AR      sound/pci/riptide/built-in.a
  CC      kernel/entry/kvm.o
  CC [M]  net/ipv4/netfilter/ipt_REJECT.o
  CC      drivers/acpi/numa/srat.o
  CC      net/ethtool/debug.o
  CC [M]  sound/pci/hda/patch_realtek.o
  CC      fs/nfs/write.o
  CC      fs/nfs/namespace.o
  CC      mm/list_lru.o
  AR      drivers/dma/hsu/built-in.a
  CC      lib/argv_split.o
  AR      sound/pci/rme9652/built-in.a
  CC      net/ipv6/ip6_output.o
  CC      net/xfrm/xfrm_replay.o
  AR      drivers/dma/dw/built-in.a
  AR      drivers/dma/mediatek/built-in.a
  CC      drivers/acpi/acpica/exfield.o
  CC      arch/x86/kernel/head64.o
  AR      drivers/dma/qcom/built-in.a
  AR      drivers/dma/ti/built-in.a
  CC      drivers/acpi/apei/apei-base.o
  CC      io_uring/waitid.o
  CC      arch/x86/kernel/kprobes/opt.o
  AR      drivers/dma/xilinx/built-in.a
  CC      net/core/rtnetlink.o
  CC      net/core/utils.o
  CC      arch/x86/kernel/cpu/intel.o
  CC [M]  drivers/dma/ioat/init.o
  AR      net/unix/built-in.a
  CC      drivers/dma/dmaengine.o
  CC      net/core/link_watch.o
  CC      crypto/xts.o
  CC [M]  sound/pci/hda/patch_analog.o
  CC      fs/nfs/mount_clnt.o
  CC      drivers/pci/vc.o
  CC      net/netfilter/nf_queue.o
  CC      lib/raid6/avx2.o
  CC      drivers/acpi/apei/hest.o
  CC      drivers/pci/mmap.o
  CC      kernel/dma/direct.o
  CC      drivers/acpi/acpica/exfldio.o
  AR      kernel/entry/built-in.a
  CC [M]  net/netfilter/ipvs/ip_vs_proto.o
  CC      kernel/module/main.o
  AR      kernel/rcu/built-in.a
  AR      drivers/acpi/numa/built-in.a
  CC [M]  net/netfilter/ipvs/ip_vs_pe.o
  CC      kernel/time/time.o
  CC      net/xfrm/xfrm_device.o
  CC      kernel/module/strict_rwx.o
  CC      mm/workingset.o
  CC      net/netfilter/nf_sockopt.o
  CC      net/ethtool/wol.o
  AR      net/key/built-in.a
  CC      net/ethtool/features.o
  CC      net/ipv4/route.o
  CC      arch/x86/kernel/kprobes/ftrace.o
  CC      net/ethtool/privflags.o
  CC      lib/bug.o
  CC      crypto/ctr.o
  CC      io_uring/io-wq.o
  CC      lib/zstd/decompress/zstd_ddict.o
  CC      net/netfilter/utils.o
  CC      drivers/acpi/acpica/exmisc.o
  AR      net/bridge/netfilter/built-in.a
  CC      net/bridge/br.o
  CC      fs/nfs/nfstrace.o
  CC      drivers/pci/setup-irq.o
  CC      lib/zstd/decompress/zstd_decompress.o
  AR      drivers/soc/apple/built-in.a
  CC      arch/x86/kernel/cpu/intel_pconfig.o
  CC      drivers/acpi/apei/erst.o
  CC      lib/raid6/avx512.o
  AR      drivers/soc/aspeed/built-in.a
  AR      drivers/pmdomain/actions/built-in.a
  AR      drivers/soc/bcm/built-in.a
  AR      drivers/pmdomain/amlogic/built-in.a
  AR      drivers/soc/fsl/built-in.a
  CC      drivers/virtio/virtio.o
  AR      drivers/pmdomain/apple/built-in.a
  CC      drivers/virtio/virtio_ring.o
  CC [M]  drivers/dma/ioat/dma.o
  AR      drivers/soc/fujitsu/built-in.a
  AR      drivers/pmdomain/arm/built-in.a
  AR      drivers/soc/hisilicon/built-in.a
  AR      drivers/pmdomain/bcm/built-in.a
  AR      drivers/pmdomain/imx/built-in.a
  AR      drivers/soc/imx/built-in.a
  AR      drivers/soc/ixp4xx/built-in.a
  CC      net/core/filter.o
  AR      drivers/pmdomain/mediatek/built-in.a
  AR      drivers/soc/loongson/built-in.a
  AR      drivers/pmdomain/qcom/built-in.a
  CC      arch/x86/kernel/cpu/tsx.o
  AR      drivers/soc/mediatek/built-in.a
  AR      drivers/pmdomain/renesas/built-in.a
  AR      drivers/soc/microchip/built-in.a
  AR      drivers/pmdomain/rockchip/built-in.a
  AR      drivers/soc/nuvoton/built-in.a
  AR      drivers/pmdomain/samsung/built-in.a
  AR      drivers/soc/pxa/built-in.a
  AR      drivers/pmdomain/st/built-in.a
  CC      arch/x86/kernel/cpu/intel_epb.o
  AR      drivers/soc/amlogic/built-in.a
  AR      drivers/pmdomain/starfive/built-in.a
  CC      kernel/dma/ops_helpers.o
  AR      drivers/soc/qcom/built-in.a
  AR      drivers/pmdomain/sunxi/built-in.a
  CC [M]  arch/x86/kvm/i8259.o
  AR      drivers/soc/renesas/built-in.a
  AR      drivers/pmdomain/tegra/built-in.a
  CC [M]  sound/core/pcm_lib.o
  AR      drivers/pmdomain/ti/built-in.a
  AR      drivers/soc/rockchip/built-in.a
  AR      drivers/pmdomain/xilinx/built-in.a
  AR      drivers/soc/sifive/built-in.a
  AR      drivers/pmdomain/built-in.a
  CC [M]  arch/x86/kvm/irq.o
  AR      drivers/soc/sunxi/built-in.a
  AR      drivers/soc/ti/built-in.a
  AR      drivers/soc/xilinx/built-in.a
  AR      drivers/soc/built-in.a
  CC      drivers/acpi/acpica/exmutex.o
  AR      arch/x86/kernel/kprobes/built-in.a
  CC      fs/pstore/inode.o
  CC      fs/efivarfs/inode.o
  CC      crypto/gcm.o
  CC      fs/btrfs/super.o
  CC      fs/efivarfs/file.o
  CC      mm/debug.o
  CC      kernel/time/timer.o
  CC      fs/btrfs/ctree.o
  CC      net/packet/diag.o
  AR      sound/pci/trident/built-in.a
  CC      net/ethtool/rings.o
  CC      lib/buildid.o
  CC      drivers/pci/proc.o
  CC      fs/efivarfs/super.o
  CC [M]  net/netfilter/ipvs/ip_vs_proto_tcp.o
  CC      net/bridge/br_device.o
  CC      drivers/virtio/virtio_anchor.o
  CC      lib/raid6/recov_avx512.o
  CC      net/ethtool/channels.o
  CC      drivers/acpi/apei/bert.o
  CC      net/xfrm/xfrm_algo.o
  CC      drivers/acpi/acpica/exnames.o
  CC      arch/x86/kernel/cpu/amd.o
  CC      drivers/acpi/apei/ghes.o
  CC      kernel/dma/dummy.o
  CC      fs/efivarfs/vars.o
  CC      kernel/dma/contiguous.o
  CC [M]  fs/netfs/buffered_read.o
  CC      block/bfq-wf2q.o
  CC [M]  fs/netfs/io.o
  CC [M]  arch/x86/kvm/lapic.o
  CC      fs/pstore/platform.o
  CC      net/xfrm/xfrm_user.o
  CC [M]  drivers/dma/ioat/prep.o
  CC      fs/nfs/export.o
  CC      drivers/acpi/acpica/exoparg1.o
  CC      drivers/virtio/virtio_pci_modern_dev.o
  CC      mm/gup.o
  CC [M]  sound/pci/hda/patch_hdmi.o
  CC      fs/pstore/pmsg.o
  CC [M]  sound/core/pcm_misc.o
  AR      sound/pci/ymfpci/built-in.a
  CC      io_uring/futex.o
  CC      drivers/acpi/acpica/exoparg2.o
  CC      drivers/pci/slot.o
  TABLE   lib/raid6/tables.c
  CC      drivers/acpi/acpica/exoparg3.o
  CC      lib/raid6/int1.o
  CC      mm/mmap_lock.o
  CC      drivers/acpi/acpica/exoparg6.o
  AR      net/packet/built-in.a
  AR      net/dsa/built-in.a
  CC [M]  fs/netfs/iterator.o
  CC      crypto/pcrypt.o
  CC      lib/cmdline.o
  AR      sound/pci/vx222/built-in.a
  CC      net/ethtool/coalesce.o
  CC      fs/ext4/namei.o
  CC      lib/zstd/decompress/zstd_decompress_block.o
  CC      kernel/dma/swiotlb.o
  CC      kernel/module/kmod.o
  CC      kernel/module/tree_lookup.o
  AR      fs/efivarfs/built-in.a
  CC      arch/x86/kernel/cpu/hygon.o
  CC [M]  fs/fscache/cache.o
  CC      net/ethtool/pause.o
  CC      net/ipv6/ip6_input.o
  CC [M]  fs/fscache/cookie.o
  CC      fs/btrfs/extent-tree.o
  CC      kernel/dma/remap.o
  CC [M]  fs/smb/common/cifs_arc4.o
  CC      drivers/acpi/acpica/exprep.o
  CC      drivers/tty/vt/vt_ioctl.o
  AR      fs/pstore/built-in.a
  CC      drivers/acpi/acpica/exregion.o
  CC      drivers/char/hw_random/core.o
  CC      net/bridge/br_fdb.o
  AR      drivers/acpi/apei/built-in.a
  CC [M]  sound/core/pcm_memory.o
  CC      fs/btrfs/print-tree.o
  CC [M]  net/netfilter/ipvs/ip_vs_proto_udp.o
  CC [M]  arch/x86/kvm/i8254.o
  CC      block/bfq-cgroup.o
  CC      drivers/virtio/virtio_pci_legacy_dev.o
  CC      lib/raid6/int2.o
  CC      crypto/cryptd.o
  CC [M]  fs/netfs/main.o
  CC      drivers/pci/pci-acpi.o
  CC      drivers/pci/quirks.o
  CC [M]  drivers/dma/ioat/dca.o
  CC      net/core/sock_diag.o
  CC      drivers/acpi/acpica/exresnte.o
  CC      net/bridge/br_forward.o
  CC [M]  fs/smb/common/cifs_md4.o
  CC      kernel/module/debug_kmemleak.o
  CC      net/bridge/br_if.o
  CC      arch/x86/kernel/cpu/centaur.o
  CC      arch/x86/kernel/cpu/zhaoxin.o
  CC      kernel/time/hrtimer.o
  CC      fs/nfs/sysfs.o
  AR      io_uring/built-in.a
  CC      crypto/des_generic.o
  CC      kernel/module/kallsyms.o
  CC      drivers/virtio/virtio_pci_modern.o
  CC [M]  fs/fscache/io.o
  CC [M]  sound/core/memalloc.o
  CC      net/ethtool/eee.o
  CC      drivers/char/hw_random/intel-rng.o
  CC      lib/raid6/int4.o
  CC      drivers/acpi/acpica/exresolv.o
  AR      kernel/dma/built-in.a
  CC      kernel/futex/core.o
  CC      net/ipv4/inetpeer.o
  CC [M]  drivers/dma/ioat/sysfs.o
  CC      kernel/futex/syscalls.o
  CC      fs/btrfs/root-tree.o
  CC      drivers/tty/vt/vc_screen.o
  CC      arch/x86/kernel/cpu/perfctr-watchdog.o
  AR      sound/usb/misc/built-in.a
  AR      sound/usb/usx2y/built-in.a
  CC [M]  fs/smb/client/trace.o
  CC      drivers/tty/vt/selection.o
  CC      arch/x86/kernel/cpu/vmware.o
  AR      sound/usb/caiaq/built-in.a
  AR      sound/usb/6fire/built-in.a
  CC      block/blk-mq-pci.o
  AR      sound/usb/hiface/built-in.a
  AR      sound/usb/bcd2000/built-in.a
  AR      sound/usb/built-in.a
  CC      net/ethtool/tsinfo.o
  CC [M]  sound/pci/hda/hda_eld.o
  CC      kernel/time/timekeeping.o
  CC      crypto/aes_generic.o
  CC [M]  fs/netfs/objects.o
  CC [M]  net/netfilter/ipvs/ip_vs_nfct.o
  CC [M]  fs/fscache/main.o
  CC      drivers/acpi/acpica/exresop.o
  CC      drivers/pci/ats.o
  CC      net/core/dev_ioctl.o
  CC [M]  fs/smb/client/cifsfs.o
  AR      drivers/char/hw_random/built-in.a
  CC      kernel/module/procfs.o
  CC      drivers/char/agp/backend.o
  CC      drivers/virtio/virtio_pci_common.o
  CC      lib/raid6/int8.o
  CC      drivers/char/agp/generic.o
  CC [M]  arch/x86/kvm/ioapic.o
  CC      net/ipv6/addrconf.o
  LD [M]  drivers/dma/ioat/ioatdma.o
  CC      drivers/virtio/virtio_pci_legacy.o
  CC      drivers/dma/virt-dma.o
  CC [M]  sound/core/pcm_timer.o
  CC      drivers/tty/vt/keyboard.o
  CC      drivers/tty/vt/consolemap.o
  AR      net/xfrm/built-in.a
  CC      net/ethtool/cabletest.o
  CC [M]  arch/x86/kvm/irq_comm.o
  CC      arch/x86/kernel/cpu/hypervisor.o
  CC      mm/highmem.o
  CC      drivers/tty/hvc/hvc_console.o
  CC      drivers/acpi/acpica/exserial.o
  CC      block/blk-mq-virtio.o
  CC      block/blk-mq-debugfs.o
  HOSTCC  drivers/tty/vt/conmakehash
  CC      net/bridge/br_input.o
  CC      fs/nfs/fs_context.o
  CC [M]  arch/x86/kvm/cpuid.o
  CC      net/ethtool/tunnels.o
  CC      kernel/futex/pi.o
  CC      net/ipv4/protocol.o
  CC [M]  sound/pci/hda/hda_intel.o
  CC      kernel/module/sysfs.o
  LD [M]  fs/netfs/netfs.o
  CC      net/ethtool/fec.o
  CC [M]  net/netfilter/nfnetlink.o
  CC      arch/x86/kernel/cpu/mshyperv.o
  CC      net/ethtool/eeprom.o
  LD [M]  sound/pci/hda/snd-hda-codec.o
  CC      net/bridge/br_ioctl.o
  CC      fs/btrfs/dir-item.o
  LD [M]  sound/core/snd-ctl-led.o
  LD [M]  sound/core/snd-hwdep.o
  AR      sound/core/built-in.a
  CC      drivers/char/agp/isoch.o
  CC      arch/x86/kernel/cpu/debugfs.o
  CC      drivers/acpi/acpica/exstore.o
  CC      lib/raid6/tables.o
  CC [M]  fs/fuse/dev.o
  LD [M]  sound/core/snd-pcm.o
  CC      crypto/crc32c_generic.o
  CC [M]  drivers/virtio/virtio_mem.o
  CC      drivers/dma/acpi-dma.o
  CC [M]  fs/overlayfs/super.o
  CC      fs/btrfs/file-item.o
  CC      drivers/pci/iov.o
  CC [M]  net/netfilter/ipvs/ip_vs_rr.o
  CC      mm/memory.o
  CC [M]  fs/overlayfs/namei.o
  CC [M]  fs/fscache/volume.o
  CC      fs/ext4/page-io.o
  CC      drivers/tty/vt/vt.o
  CC      drivers/acpi/acpica/exstoren.o
  CC      kernel/time/ntp.o
  COPY    drivers/tty/vt/defkeymap.c
  CC      net/core/tso.o
  AR      drivers/tty/hvc/built-in.a
  CC      lib/cpumask.o
  CC      lib/ctype.o
  CC      lib/dec_and_lock.o
  CC [M]  arch/x86/kvm/pmu.o
  CC      net/bridge/br_stp.o
  CC      kernel/futex/requeue.o
  AR      kernel/module/built-in.a
  CC      kernel/cgroup/cgroup.o
  CC      lib/decompress.o
  CC      net/ethtool/stats.o
  CC      lib/decompress_bunzip2.o
  CC      crypto/crct10dif_common.o
  CC      arch/x86/kernel/cpu/capflags.o
  CC      lib/decompress_inflate.o
  AR      arch/x86/kernel/cpu/built-in.a
  CC      arch/x86/kernel/ebda.o
  CC      net/ipv4/ip_input.o
  CC      block/blk-pm.o
  CC      drivers/char/agp/intel-agp.o
  CC      drivers/tty/serial/8250/8250_core.o
  AR      lib/raid6/built-in.a
  CC      lib/zstd/zstd_common_module.o
  CC      drivers/acpi/acpica/exstorob.o
  CC      drivers/tty/serial/8250/8250_pnp.o
  CC      lib/decompress_unlz4.o
  CC      crypto/crct10dif_generic.o
  AR      drivers/dma/built-in.a
  AR      drivers/iommu/amd/built-in.a
  CC      drivers/iommu/intel/dmar.o
  AR      drivers/iommu/arm/arm-smmu/built-in.a
  AR      drivers/iommu/arm/arm-smmu-v3/built-in.a
  CC      net/bridge/br_stp_bpdu.o
  AR      drivers/iommu/arm/built-in.a
  AR      drivers/tty/ipwireless/built-in.a
  CC      lib/decompress_unlzma.o
  CC      net/ethtool/phc_vclocks.o
  CC      arch/x86/kernel/platform-quirks.o
  CC      arch/x86/kernel/process_64.o
  CC      net/bridge/br_stp_if.o
  CC      kernel/time/clocksource.o
  CC [M]  fs/overlayfs/util.o
  CC      drivers/tty/serial/8250/8250_port.o
  CC      fs/nfs/sysctl.o
  CC      drivers/pci/pci-label.o
  LD [M]  net/netfilter/ipvs/ip_vs.o
  AR      sound/firewire/built-in.a
  CC      kernel/futex/waitwake.o
  CC      drivers/iommu/intel/iommu.o
  CC      drivers/acpi/acpica/exsystem.o
  CC [M]  fs/fscache/proc.o
  CC      drivers/iommu/intel/pasid.o
  CC [M]  net/netfilter/nf_conntrack_core.o
  AR      drivers/acpi/pmic/built-in.a
  CC [M]  net/sunrpc/auth_gss/auth_gss.o
  CC [M]  net/sunrpc/auth_gss/gss_generic_token.o
  LD [M]  sound/pci/hda/snd-hda-codec-generic.o
  CC      block/holder.o
  CC      crypto/authenc.o
  LD [M]  sound/pci/hda/snd-hda-codec-realtek.o
  CC [M]  net/sunrpc/auth_gss/gss_mech_switch.o
  CC [M]  fs/overlayfs/inode.o
  CC      fs/ext4/readpage.o
  LD [M]  sound/pci/hda/snd-hda-codec-analog.o
  CC      net/sunrpc/clnt.o
  LD [M]  sound/pci/hda/snd-hda-codec-hdmi.o
  CC      drivers/iommu/intel/nested.o
  CC      net/core/sock_reuseport.o
  LD [M]  sound/pci/hda/snd-hda-intel.o
  AR      sound/pci/built-in.a
  AR      drivers/gpu/host1x/built-in.a
  CC      drivers/char/agp/intel-gtt.o
  CC [M]  fs/smb/client/cifs_debug.o
  AR      sound/sparc/built-in.a
  AR      drivers/gpu/drm/tests/built-in.a
  CC [M]  drivers/gpu/drm/tests/drm_kunit_helpers.o
  AR      sound/spi/built-in.a
  AR      sound/parisc/built-in.a
  CC      drivers/connector/cn_queue.o
  AR      sound/pcmcia/vx/built-in.a
  AR      sound/pcmcia/pdaudiocf/built-in.a
  AR      sound/pcmcia/built-in.a
  AR      sound/mips/built-in.a
  CC      drivers/acpi/acpica/extrace.o
  AR      sound/soc/built-in.a
  CC      kernel/trace/trace_clock.o
  CC      net/ethtool/mm.o
  AR      sound/atmel/built-in.a
  CC [M]  arch/x86/kvm/mtrr.o
  AR      sound/hda/built-in.a
  CC [M]  sound/hda/hda_bus_type.o
  CC      kernel/trace/ftrace.o
  AR      sound/x86/built-in.a
  AR      sound/xen/built-in.a
  CC [M]  arch/x86/kvm/hyperv.o
  AR      drivers/gpu/drm/arm/built-in.a
  CC      fs/btrfs/inode-item.o
  AR      sound/virtio/built-in.a
  AR      drivers/virtio/built-in.a
  CC      drivers/pci/pci-stub.o
  CC      kernel/events/core.o
  CC [M]  fs/fuse/dir.o
  CC      lib/decompress_unlzo.o
  LD [M]  fs/fscache/fscache.o
  CC      kernel/bpf/core.o
  CC      kernel/events/ring_buffer.o
  CC      fs/btrfs/disk-io.o
  AR      kernel/futex/built-in.a
  AR      block/built-in.a
  CC [M]  arch/x86/kvm/debugfs.o
  CC      kernel/fork.o
  AR      drivers/gpu/drm/display/built-in.a
  CC [M]  drivers/gpu/drm/display/drm_display_helper_mod.o
  CC      drivers/acpi/acpica/exutils.o
  CC      fs/nfs/nfs2super.o
  CC      kernel/time/jiffies.o
  CC      arch/x86/kernel/signal.o
  CC [M]  drivers/gpu/drm/tests/drm_buddy_test.o
  CC [M]  drivers/gpu/drm/display/drm_dp_dual_mode_helper.o
  CC      net/bridge/br_stp_timer.o
  CC      kernel/trace/ring_buffer.o
  CC      crypto/authencesn.o
  CC      drivers/iommu/intel/trace.o
  CC      kernel/events/callchain.o
  CC      net/ipv4/ip_fragment.o
  CC      fs/ext4/resize.o
  CC [M]  sound/hda/hdac_bus.o
  CC      kernel/events/hw_breakpoint.o
  CC [M]  fs/overlayfs/file.o
  CC      net/core/fib_notifier.o
  CC      drivers/pci/vgaarb.o
  CC [M]  drivers/gpu/drm/display/drm_dp_helper.o
  CC      drivers/iommu/intel/cap_audit.o
  AR      drivers/char/agp/built-in.a
  CC      drivers/iommu/intel/irq_remapping.o
  CC      drivers/acpi/acpica/hwacpi.o
  CC      drivers/char/tpm/tpm-chip.o
  CC      drivers/connector/connector.o
  CC      kernel/time/timer_list.o
  CC      drivers/char/tpm/tpm-dev-common.o
  CC      net/ethtool/module.o
  CC      net/core/xdp.o
  CC      kernel/exec_domain.o
  CONMK   drivers/tty/vt/consolemap_deftbl.c
  CC      drivers/tty/vt/defkeymap.o
  CC      arch/x86/kernel/signal_64.o
  CC [M]  drivers/gpu/drm/tests/drm_cmdline_parser_test.o
  CC      drivers/acpi/acpica/hwesleep.o
  CC      drivers/tty/serial/8250/8250_dma.o
  CC [M]  fs/smb/client/connect.o
  CC      drivers/tty/serial/8250/8250_dwlib.o
  CC      kernel/events/uprobes.o
  CC [M]  drivers/gpu/drm/display/drm_dp_mst_topology.o
  CC      fs/nfs/proc.o
  CC [M]  drivers/gpu/drm/tests/drm_connector_test.o
  CC      drivers/tty/vt/consolemap_deftbl.o
  CC [M]  sound/hda/hdac_device.o
  CC      net/ethtool/pse-pd.o
  AR      drivers/tty/vt/built-in.a
  CC      fs/btrfs/transaction.o
  CC      drivers/tty/tty_io.o
  CC      crypto/lzo.o
  CC      net/bridge/br_netlink.o
  CC [M]  fs/overlayfs/dir.o
  CC      drivers/tty/n_tty.o
  CC      drivers/connector/cn_proc.o
  CC [M]  fs/fuse/file.o
  CC      kernel/time/timeconv.o
  CC      drivers/char/tpm/tpm-dev.o
  CC      drivers/acpi/acpica/hwgpe.o
  CC      kernel/panic.o
  CC      drivers/iommu/intel/perfmon.o
  CC      mm/mincore.o
  CC [M]  net/sunrpc/auth_gss/svcauth_gss.o
  CC      lib/zstd/common/debug.o
  AR      drivers/pci/built-in.a
  CC      net/bridge/br_netlink_tunnel.o
  CC      net/ipv4/ip_forward.o
  CC      lib/zstd/common/entropy_common.o
  CC      lib/decompress_unxz.o
  CC      arch/x86/kernel/traps.o
  CC      drivers/acpi/acpica/hwregs.o
  CC [M]  net/netfilter/nf_conntrack_standalone.o
  CC      drivers/tty/serial/8250/8250_pcilib.o
  CC [M]  drivers/gpu/drm/tests/drm_damage_helper_test.o
  CC [M]  net/netfilter/nf_conntrack_expect.o
  CC      crypto/lzo-rle.o
  CC      lib/zstd/common/error_private.o
  CC [M]  net/netfilter/nf_conntrack_helper.o
  CC      net/ipv6/addrlabel.o
  CC      lib/zstd/common/fse_decompress.o
  CC      kernel/time/timecounter.o
  CC      drivers/acpi/acpica/hwsleep.o
  CC      kernel/time/alarmtimer.o
  CC [M]  sound/hda/hdac_sysfs.o
  CC      net/ethtool/plca.o
  CC      drivers/char/tpm/tpm-interface.o
  CC [M]  fs/fuse/inode.o
  CC      lib/decompress_unzstd.o
  CC [M]  arch/x86/kvm/mmu/mmu.o
  CC      net/bridge/br_arp_nd_proxy.o
  CC      fs/ext4/super.o
  CC      fs/nfs/nfs2xdr.o
  CC      kernel/trace/trace.o
  CC      kernel/cpu.o
  CC      net/core/flow_offload.o
  CC [M]  net/netfilter/nf_conntrack_proto.o
  CC      drivers/acpi/acpica/hwvalid.o
  CC      crypto/lz4.o
  CC [M]  fs/overlayfs/readdir.o
  CC      kernel/cgroup/rstat.o
  CC      drivers/tty/serial/8250/8250_early.o
  AR      kernel/bpf/built-in.a
  CC [M]  sound/hda/hdac_regmap.o
  AR      drivers/connector/built-in.a
  CC      drivers/base/power/sysfs.o
  CC [M]  drivers/gpu/drm/tests/drm_dp_mst_helper_test.o
  CC      drivers/base/power/generic_ops.o
  CC      arch/x86/kernel/idt.o
  CC      mm/mlock.o
  CC      lib/zstd/common/zstd_common.o
  CC [M]  drivers/gpu/drm/tests/drm_exec_test.o
  AR      drivers/iommu/intel/built-in.a
  CC [M]  net/netfilter/nf_conntrack_proto_generic.o
  AR      drivers/iommu/iommufd/built-in.a
  AR      lib/zstd/built-in.a
  CC      drivers/iommu/iommu.o
  CC      lib/dump_stack.o
  CC      drivers/acpi/dptf/int340x_thermal.o
  CC      drivers/acpi/tables.o
  CC      drivers/base/power/common.o
  CC      net/sunrpc/xprt.o
  CC      drivers/base/firmware_loader/builtin/main.o
  CC      drivers/acpi/acpica/hwxface.o
  CC      drivers/char/tpm/tpm1-cmd.o
  CC      drivers/tty/tty_ioctl.o
  CC      net/ipv4/ip_options.o
  CC      crypto/lz4hc.o
  CC [M]  net/netfilter/nf_conntrack_proto_tcp.o
  CC      kernel/time/posix-timers.o
  CC      net/ipv6/route.o
  AR      net/ethtool/built-in.a
  CC [M]  net/netfilter/nf_conntrack_proto_udp.o
  CC      drivers/tty/serial/8250/8250_dw.o
  CC      kernel/cgroup/namespace.o
  CC      fs/nfs/nfs3super.o
  CC      drivers/iommu/iommu-traces.o
  CC      kernel/time/posix-cpu-timers.o
  AR      drivers/base/firmware_loader/builtin/built-in.a
  CC      drivers/base/firmware_loader/main.o
  CC      kernel/exit.o
  CC      crypto/xxhash_generic.o
  CC [M]  net/netfilter/nf_conntrack_proto_icmp.o
  CC [M]  sound/hda/hdac_controller.o
  CC [M]  sound/hda/hdac_stream.o
  CC      drivers/block/loop.o
  CC      drivers/acpi/acpica/hwxfsleep.o
  AR      drivers/acpi/dptf/built-in.a
  CC      lib/earlycpio.o
  CC [M]  fs/overlayfs/copy_up.o
  CC      arch/x86/kernel/irq.o
  CC [M]  drivers/block/nbd.o
  CC      fs/btrfs/inode.o
  CC      drivers/base/power/qos.o
  CC      net/core/gro.o
  CC      lib/extable.o
  CC      net/bridge/br_sysfs_if.o
  CC [M]  drivers/gpu/drm/tests/drm_format_helper_test.o
  AR      drivers/misc/eeprom/built-in.a
  AR      drivers/misc/cb710/built-in.a
  CC      drivers/acpi/acpica/hwpci.o
  AR      drivers/misc/ti-st/built-in.a
  AR      drivers/misc/lis3lv02d/built-in.a
  CC      crypto/rng.o
  AR      drivers/misc/cardreader/built-in.a
  CC [M]  drivers/misc/mei/hdcp/mei_hdcp.o
  CC [M]  net/sunrpc/auth_gss/gss_rpc_upcall.o
  CC [M]  fs/fuse/control.o
  CC      kernel/time/posix-clock.o
  CC      drivers/mfd/mfd-core.o
  AR      drivers/nfc/built-in.a
  CC      drivers/mfd/intel-lpss.o
  CC [M]  sound/hda/array.o
  CC      drivers/char/tpm/tpm2-cmd.o
  CC      kernel/cgroup/cgroup-v1.o
  CC      crypto/drbg.o
  CC      net/8021q/vlan_core.o
  CC      drivers/mfd/intel-lpss-pci.o
  CC      lib/flex_proportions.o
  CC      drivers/acpi/acpica/nsaccess.o
  CC      drivers/tty/serial/8250/8250_exar.o
  CC [M]  drivers/gpu/drm/display/drm_dsc_helper.o
  CC [M]  fs/smb/client/dir.o
  CC      fs/nfs/nfs3client.o
  CC [M]  sound/hda/hdmi_chmap.o
  CC      mm/mmap.o
  CC      net/ipv4/ip_output.o
  AR      drivers/base/firmware_loader/built-in.a
  CC      drivers/base/regmap/regmap.o
  CC      drivers/base/regmap/regcache.o
  CC [M]  net/netfilter/nf_conntrack_extend.o
  CC      drivers/base/regmap/regcache-rbtree.o
  CC [M]  net/8021q/vlan.o
  CC      lib/idr.o
  CC [M]  fs/smb/client/file.o
  CC [M]  net/sunrpc/auth_gss/gss_rpc_xdr.o
  CC [M]  net/8021q/vlan_dev.o
  AR      drivers/misc/built-in.a
  CC [M]  fs/fuse/xattr.o
  CC      drivers/base/power/runtime.o
  CC [M]  net/sunrpc/auth_gss/trace.o
  CC      kernel/softirq.o
  CC [M]  fs/overlayfs/export.o
  CC      net/bridge/br_sysfs_br.o
  CC      kernel/time/itimer.o
  CC      drivers/acpi/acpica/nsalloc.o
  CC [M]  drivers/misc/mei/pxp/mei_pxp.o
  CC      drivers/mfd/intel-lpss-acpi.o
  CC      fs/nfs/nfs3proc.o
  CC      fs/btrfs/file.o
  CC [M]  drivers/gpu/drm/tests/drm_format_test.o
  CC      drivers/iommu/iommu-sysfs.o
  CC      lib/irq_regs.o
  CC      drivers/char/tpm/tpmrm-dev.o
  CC      sound/sound_core.o
  CC      lib/is_single_threaded.o
  CC      drivers/tty/serial/8250/8250_lpss.o
  CC [M]  drivers/gpu/drm/display/drm_hdcp_helper.o
  CC      drivers/acpi/acpica/nsarguments.o
  CC      arch/x86/kernel/irq_64.o
  CC      lib/klist.o
  CC      drivers/base/regmap/regcache-flat.o
  CC      kernel/cgroup/freezer.o
  CC [M]  sound/hda/trace.o
  CC      fs/btrfs/defrag.o
  CC      net/core/netdev-genl.o
  CC      drivers/char/tpm/tpm2-space.o
  CC      crypto/jitterentropy.o
  CC      drivers/mfd/intel_soc_pmic_crc.o
  AR      drivers/base/test/built-in.a
  CC [M]  fs/fuse/acl.o
  CC      arch/x86/kernel/dumpstack_64.o
  CC      kernel/time/clockevents.o
  CC      crypto/jitterentropy-kcapi.o
  CC [M]  drivers/misc/mei/init.o
  CC      drivers/tty/tty_ldisc.o
  CC      net/core/netdev-genl-gen.o
  CC [M]  fs/overlayfs/params.o
  CC      lib/kobject.o
  CC [M]  drivers/misc/mei/hbm.o
  CC [M]  net/netfilter/nf_conntrack_acct.o
  CC      drivers/iommu/dma-iommu.o
  CC [M]  drivers/misc/mei/interrupt.o
  CC      net/core/gso.o
  CC      drivers/acpi/acpica/nsconvert.o
  CC      net/core/net-sysfs.o
  CC      arch/x86/kernel/time.o
  CC [M]  fs/fuse/readdir.o
  CC      drivers/base/regmap/regcache-maple.o
  CC [M]  net/8021q/vlan_netlink.o
  CC [M]  drivers/gpu/drm/tests/drm_framebuffer_test.o
  CC      drivers/base/power/wakeirq.o
  CC      drivers/tty/serial/8250/8250_mid.o
  AR      drivers/gpu/drm/renesas/rcar-du/built-in.a
  CC [M]  drivers/gpu/drm/display/drm_hdmi_helper.o
  AR      drivers/gpu/drm/renesas/built-in.a
  CC      drivers/tty/serial/8250/8250_pci.o
  CC      drivers/base/component.o
  CC      net/ipv4/ip_sockglue.o
  CC [M]  net/8021q/vlanproc.o
  CC      net/bridge/br_nf_core.o
  CC      crypto/ghash-generic.o
  CC [M]  fs/fuse/ioctl.o
  AR      drivers/block/built-in.a
  AR      drivers/dax/hmem/built-in.a
  CC      drivers/dax/super.o
  CC [M]  drivers/misc/mei/client.o
  CC [M]  drivers/mfd/lpc_sch.o
  CC      kernel/cgroup/legacy_freezer.o
  CC      kernel/time/tick-common.o
  CC      drivers/acpi/acpica/nsdump.o
  CC      arch/x86/kernel/ioport.o
  CC [M]  drivers/mfd/lpc_ich.o
  CC      drivers/char/tpm/tpm-sysfs.o
  CC [M]  sound/hda/hdac_component.o
  CC      fs/nfs/nfs3xdr.o
  CC      kernel/trace/trace_output.o
  CC      lib/kobject_uevent.o
  CC      kernel/resource.o
  CC      net/core/page_pool.o
  CC [M]  drivers/gpu/drm/tests/drm_gem_shmem_test.o
  CC [M]  fs/overlayfs/xattrs.o
  CC [M]  drivers/misc/mei/main.o
  CC [M]  drivers/gpu/drm/display/drm_scdc_helper.o
  CC [M]  drivers/misc/mei/dma-ring.o
  CC      drivers/base/power/main.o
  CC      drivers/acpi/acpica/nseval.o
  CC [M]  net/netfilter/nf_conntrack_seqadj.o
  CC      crypto/af_alg.o
  CC [M]  net/netfilter/nf_conntrack_proto_icmpv6.o
  CC [M]  net/netfilter/nf_conntrack_proto_dccp.o
  CC      drivers/tty/serial/serial_core.o
  AR      net/8021q/built-in.a
  CC      drivers/tty/serial/serial_base_bus.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_mech.o
  CC      drivers/char/tpm/eventlog/common.o
  CC [M]  drivers/gpu/drm/tests/drm_managed_test.o
  AR      kernel/events/built-in.a
  CC      crypto/algif_hash.o
  AR      drivers/mfd/built-in.a
  CC      drivers/tty/serial/8250/8250_pericom.o
  LD [M]  net/8021q/8021q.o
  CC      drivers/dax/bus.o
  CC [M]  sound/hda/hdac_i915.o
  CC [M]  net/netfilter/nf_conntrack_proto_sctp.o
  CC      arch/x86/kernel/dumpstack.o
  LD [M]  fs/fuse/fuse.o
  CC [M]  sound/hda/intel-dsp-config.o
  CC      kernel/cgroup/pids.o
  CC [M]  sound/hda/intel-nhlt.o
  CC      drivers/base/core.o
  CC      drivers/acpi/acpica/nsinit.o
  CC      drivers/dma-buf/dma-buf.o
  LD [M]  fs/overlayfs/overlay.o
  CC      net/bridge/br_multicast.o
  CC      kernel/time/tick-broadcast.o
  CC      drivers/iommu/iova.o
  CC      kernel/time/tick-broadcast-hrtimer.o
  CC      fs/btrfs/extent_map.o
  CC      drivers/base/regmap/regmap-debugfs.o
  AR      drivers/cxl/core/built-in.a
  CC      drivers/base/bus.o
  AR      drivers/cxl/built-in.a
  AR      drivers/macintosh/built-in.a
  CC      drivers/iommu/irq_remapping.o
  CC      drivers/char/mem.o
  CC [M]  drivers/gpu/drm/display/drm_dp_aux_dev.o
  CC [M]  drivers/gpu/drm/tests/drm_mm_test.o
  CC      drivers/char/random.o
  CC      drivers/char/tpm/eventlog/tpm1.o
  CC      lib/logic_pio.o
  CC      mm/mmu_gather.o
  CC      net/dcb/dcbnl.o
  CC      drivers/acpi/acpica/nsload.o
  AR      drivers/tty/serial/8250/built-in.a
  CC [M]  net/sunrpc/auth_gss/gss_krb5_seal.o
  CC      fs/ext4/symlink.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_unseal.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_wrap.o
  CC      kernel/trace/trace_seq.o
  CC      drivers/base/regmap/regmap-i2c.o
  CC [M]  drivers/gpu/drm/tests/drm_modes_test.o
  CC      kernel/cgroup/cpuset.o
  CC [M]  arch/x86/kvm/mmu/page_track.o
  CC      arch/x86/kernel/nmi.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_crypto.o
  CC      net/core/net-procfs.o
  CC [M]  sound/hda/intel-sdw-acpi.o
  CC [M]  net/netfilter/nf_conntrack_netlink.o
  CC      kernel/trace/trace_stat.o
  CC [M]  drivers/misc/mei/bus.o
  CC      drivers/char/tpm/eventlog/tpm2.o
  CC      net/sunrpc/socklib.o
  CC      drivers/acpi/acpica/nsnames.o
  CC      fs/ext4/sysfs.o
  CC      kernel/time/tick-oneshot.o
  CC      kernel/trace/trace_printk.o
  CC      drivers/char/tpm/tpm_ppi.o
  CC      net/ipv4/inet_hashtables.o
  AR      drivers/iommu/built-in.a
  AR      drivers/dax/built-in.a
  CC      lib/maple_tree.o
  CC      drivers/char/tpm/eventlog/acpi.o
  CC [M]  drivers/gpu/drm/tests/drm_plane_helper_test.o
  AR      fs/nfs/built-in.a
  CC [M]  drivers/gpu/drm/tests/drm_probe_helper_test.o
  CC      net/sunrpc/xprtsock.o
  LD [M]  sound/hda/snd-hda-core.o
  CC      drivers/dma-buf/dma-fence.o
  CC      fs/ext4/xattr.o
  CC      kernel/trace/pid_list.o
  CC [M]  net/sunrpc/auth_gss/gss_krb5_keys.o
  CC      drivers/dma-buf/dma-fence-array.o
  CC      crypto/algif_skcipher.o
  LD [M]  net/sunrpc/auth_gss/auth_rpcgss.o
  CC      net/sunrpc/sched.o
  CC      drivers/char/tpm/eventlog/efi.o
  CC      mm/mprotect.o
  CC      drivers/base/power/wakeup.o
  LD [M]  drivers/gpu/drm/display/drm_display_helper.o
  LD [M]  sound/hda/snd-intel-dspcfg.o
  CC      drivers/dma-buf/dma-fence-chain.o
  CC      drivers/dma-buf/dma-fence-unwrap.o
  CC      drivers/char/tpm/tpm_crb.o
  CC [M]  drivers/gpu/drm/tests/drm_rect_test.o
  LD [M]  sound/hda/snd-intel-sdw-acpi.o
  CC      sound/last.o
  CC      drivers/base/regmap/regmap-irq.o
  CC      drivers/acpi/acpica/nsobject.o
  CC [M]  arch/x86/kvm/mmu/spte.o
  CC      net/ipv6/ip6_fib.o
  CC      kernel/time/tick-sched.o
  CC      kernel/time/vsyscall.o
  CC      arch/x86/kernel/ldt.o
  CC      kernel/trace/trace_sched_switch.o
  CC      net/core/netpoll.o
  CC      crypto/xor.o
  CC      drivers/tty/serial/serial_ctrl.o
  CC      drivers/dma-buf/dma-resv.o
  AS      arch/x86/kernel/ibt_selftest.o
  CC      kernel/trace/trace_functions.o
  CC      drivers/dma-buf/sync_file.o
  CC      fs/open.o
  CC      drivers/tty/serial/serial_port.o
  CC      drivers/tty/serial/earlycon.o
  CC      drivers/char/misc.o
  CC      arch/x86/kernel/setup.o
  CC      drivers/char/virtio_console.o
  CC      drivers/char/hpet.o
  CC      drivers/scsi/scsi.o
  CC      arch/x86/kernel/x86_init.o
  CC      net/sunrpc/auth.o
  CC      drivers/acpi/acpica/nsparse.o
  CC [M]  drivers/misc/mei/bus-fixup.o
  CC      fs/read_write.o
  AR      sound/built-in.a
  CC      drivers/dma-buf/sw_sync.o
  CC      drivers/char/nvram.o
  CC      net/sunrpc/auth_null.o
  LD [M]  net/sunrpc/auth_gss/rpcsec_gss_krb5.o
  AR      drivers/nvme/common/built-in.a
  CC      drivers/nvme/host/core.o
  AR      drivers/char/tpm/built-in.a
  CC      drivers/nvme/host/ioctl.o
  AR      drivers/gpu/drm/omapdrm/built-in.a
  AR      drivers/gpu/drm/tilcdc/built-in.a
  CC      net/dcb/dcbevent.o
  AR      drivers/gpu/drm/imx/built-in.a
  CC      crypto/hash_info.o
  AR      drivers/gpu/drm/i2c/built-in.a
  AR      drivers/gpu/drm/panel/built-in.a
  CC      drivers/scsi/hosts.o
  CC      crypto/simd.o
  AR      drivers/gpu/drm/bridge/analogix/built-in.a
  CC      fs/btrfs/sysfs.o
  AR      drivers/gpu/drm/bridge/cadence/built-in.a
  AR      drivers/gpu/drm/bridge/imx/built-in.a
  CC [M]  arch/x86/kvm/mmu/tdp_iter.o
  AR      drivers/gpu/drm/bridge/synopsys/built-in.a
  CC      drivers/dma-buf/sync_debug.o
  AR      drivers/gpu/drm/bridge/built-in.a
  CC      drivers/acpi/acpica/nspredef.o
  CC      drivers/tty/serial/serial_mctrl_gpio.o
  CC      drivers/acpi/acpica/nsprepkg.o
  AR      drivers/gpu/drm/hisilicon/built-in.a
  CC      fs/btrfs/accessors.o
  AR      drivers/gpu/drm/mxsfb/built-in.a
  CC      drivers/nvme/host/sysfs.o
  AR      drivers/gpu/drm/tiny/built-in.a
  CC      drivers/base/power/wakeup_stats.o
  CC      drivers/ata/libata-core.o
  AR      drivers/gpu/drm/xlnx/built-in.a
  CC [M]  arch/x86/kvm/mmu/tdp_mmu.o
  AR      drivers/gpu/drm/gud/built-in.a
  AR      drivers/gpu/drm/solomon/built-in.a
  CC [M]  drivers/gpu/drm/ttm/ttm_tt.o
  AR      drivers/base/regmap/built-in.a
  AR      drivers/nvme/target/built-in.a
  CC [M]  arch/x86/kvm/smm.o
  CC      drivers/nvme/host/pr.o
  CC      drivers/nvme/host/trace.o
  CC [M]  drivers/gpu/drm/scheduler/sched_main.o
  CC      kernel/time/timekeeping_debug.o
  CC [M]  drivers/misc/mei/debugfs.o
  CC [M]  fs/smb/client/inode.o
  CC      kernel/trace/trace_preemptirq.o
  CC      mm/mremap.o
  CC [M]  drivers/misc/mei/mei-trace.o
  CC      net/ipv4/inet_timewait_sock.o
  CC      net/ipv4/inet_connection_sock.o
  CC      drivers/base/power/domain.o
  CC      arch/x86/kernel/i8259.o
  CC [M]  drivers/dma-buf/selftest.o
  CC      fs/btrfs/xattr.o
  CC      drivers/acpi/acpica/nsrepair.o
  AR      net/dcb/built-in.a
  CC      arch/x86/kernel/irqinit.o
  CC      net/bridge/br_mdb.o
  CC [M]  crypto/md4.o
  CC      arch/x86/kernel/jump_label.o
  CC [M]  net/netfilter/nf_nat_core.o
  AR      drivers/tty/serial/built-in.a
  CC      drivers/tty/tty_buffer.o
  CC [M]  arch/x86/kvm/vmx/vmx.o
  CC [M]  drivers/misc/mei/pci-me.o
  CC      net/ipv4/tcp.o
  CC      drivers/scsi/scsi_ioctl.o
  AR      drivers/char/built-in.a
  CC [M]  drivers/misc/mei/hw-me.o
  CC      fs/ext4/xattr_hurd.o
  CC      net/core/fib_rules.o
  AR      drivers/gpu/vga/built-in.a
  CC [M]  drivers/misc/mei/gsc-me.o
  CC      net/core/net-traces.o
  CC      kernel/time/namespace.o
  CC      drivers/tty/tty_port.o
  CC      arch/x86/kernel/irq_work.o
  CC      drivers/acpi/acpica/nsrepair2.o
  CC [M]  drivers/gpu/drm/ttm/ttm_bo.o
  CC [M]  drivers/dma-buf/st-dma-fence.o
  CC      kernel/trace/trace_nop.o
  CC      arch/x86/kernel/probe_roms.o
  CC      fs/btrfs/ordered-data.o
  CC [M]  drivers/gpu/drm/ttm/ttm_bo_util.o
  CC [M]  drivers/gpu/drm/scheduler/sched_fence.o
  LD [M]  drivers/misc/mei/mei.o
  AR      kernel/cgroup/built-in.a
  CC      drivers/base/dd.o
  CC      drivers/base/syscore.o
  CC [M]  crypto/ccm.o
  CC      drivers/tty/tty_mutex.o
  CC      drivers/spi/spi.o
  CC      drivers/net/phy/mdio-boardinfo.o
  CC      net/ipv6/ipv6_sockglue.o
  CC      drivers/net/phy/stubs.o
  AR      drivers/net/pse-pd/built-in.a
  CC      drivers/tty/tty_ldsem.o
  CC [M]  crypto/arc4.o
  CC      drivers/acpi/acpica/nssearch.o
  AR      drivers/firewire/built-in.a
  CC      net/ipv4/tcp_input.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_drv.o
  AR      drivers/cdrom/built-in.a
  CC      drivers/tty/tty_baudrate.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_device.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_doorbell_mgr.o
  CC      mm/msync.o
  CC [M]  arch/x86/kvm/kvm-asm-offsets.s
  AR      kernel/time/built-in.a
  CC      drivers/nvme/host/fault_inject.o
  CC      fs/ext4/xattr_trusted.o
  CC [M]  drivers/gpu/drm/scheduler/sched_entity.o
  CC      drivers/acpi/blacklist.o
  CC      net/bridge/br_multicast_eht.o
  CC      lib/memcat_p.o
  CC      net/ipv4/tcp_output.o
  CC [M]  drivers/dma-buf/st-dma-fence-chain.o
  CC      kernel/trace/trace_functions_graph.o
  CC      drivers/scsi/scsicam.o
  CC      arch/x86/kernel/sys_ia32.o
  CC      lib/nmi_backtrace.o
  CC      drivers/acpi/acpica/nsutils.o
  CC      drivers/base/power/domain_governor.o
  CC      net/bridge/br_vlan.o
  CC [M]  crypto/ecc.o
  CC [M]  drivers/gpu/drm/amd/amdxcp/amdgpu_xcp_drv.o
  CC [M]  drivers/gpu/drm/ttm/ttm_bo_vm.o
  CC      drivers/net/phy/mdio_devres.o
  AR      drivers/auxdisplay/built-in.a
  CC      drivers/net/phy/phy.o
  CC      kernel/trace/fgraph.o
  CC      drivers/tty/tty_jobctrl.o
  CC      net/bridge/br_vlan_tunnel.o
  CC      drivers/tty/n_null.o
  CC      drivers/acpi/acpica/nswalk.o
  CC [M]  net/netfilter/nf_nat_proto.o
  CC      drivers/base/driver.o
  CC      drivers/acpi/osi.o
  CC      mm/page_vma_mapped.o
  CC      fs/ext4/xattr_user.o
  CC      drivers/acpi/osl.o
  CC [M]  drivers/gpu/drm/i915/i915_config.o
  CC [M]  arch/x86/kvm/vmx/pmu_intel.o
  CC      drivers/scsi/scsi_error.o
  LD [M]  drivers/misc/mei/mei-gsc.o
  CC      net/bridge/br_vlan_options.o
  CC      mm/pagewalk.o
  CC [M]  crypto/essiv.o
  LD [M]  drivers/misc/mei/mei-me.o
  CC      drivers/tty/pty.o
  CC      mm/pgtable-generic.o
  CC      kernel/trace/blktrace.o
  CC      kernel/trace/trace_events.o
  LD [M]  drivers/gpu/drm/amd/amdxcp/amdxcp.o
  CC      kernel/sysctl.o
  LD [M]  drivers/gpu/drm/scheduler/gpu-sched.o
  CC      drivers/base/power/clock_ops.o
  CC      drivers/scsi/scsi_lib.o
  CC      arch/x86/kernel/signal_32.o
  CC      drivers/acpi/acpica/nsxfeval.o
  CC      drivers/acpi/utils.o
  CC [M]  drivers/dma-buf/st-dma-fence-unwrap.o
  CC [M]  drivers/gpu/drm/i915/i915_driver.o
  CC      drivers/nvme/host/pci.o
  CC      fs/btrfs/extent_io.o
  CC [M]  drivers/gpu/drm/ttm/ttm_module.o
  CC      drivers/net/phy/phy-c45.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_kms.o
  CC      kernel/trace/trace_export.o
  CC      mm/rmap.o
  CC [M]  fs/smb/client/link.o
  CC      drivers/base/class.o
  CC      fs/ext4/fast_commit.o
  CC      drivers/base/platform.o
  CC      kernel/trace/trace_event_perf.o
  CC      drivers/acpi/acpica/nsxfname.o
  CC [M]  fs/smb/client/misc.o
  CC [M]  drivers/gpu/drm/ttm/ttm_execbuf_util.o
  CC      net/ipv6/ndisc.o
  CC      drivers/tty/sysrq.o
  CC [M]  drivers/gpu/drm/ttm/ttm_range_manager.o
  CC [M]  drivers/dma-buf/st-dma-resv.o
  CC      mm/vmalloc.o
  AR      drivers/base/power/built-in.a
  CC      drivers/base/cpu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.o
  CC      drivers/base/firmware.o
  CC      arch/x86/kernel/sys_x86_64.o
  CC      drivers/acpi/reboot.o
  CC      drivers/acpi/nvs.o
  CC      mm/page_alloc.o
  CC      kernel/capability.o
  CC      fs/ext4/orphan.o
  CC [M]  arch/x86/kvm/vmx/vmcs12.o
  CC      drivers/acpi/acpica/nsxfobj.o
  CC      drivers/acpi/acpica/psargs.o
  CC      lib/objpool.o
  CC [M]  net/netfilter/nf_nat_helper.o
  CC [M]  crypto/ecdh.o
  CC [M]  net/netfilter/nf_nat_redirect.o
  AR      drivers/dma-buf/built-in.a
  CC [M]  drivers/gpu/drm/xe/tests/xe_bo_test.o
  LD [M]  drivers/dma-buf/dmabuf_selftests.o
  CC      drivers/acpi/wakeup.o
  CC      net/ipv6/udp.o
  CC      drivers/net/phy/phy-core.o
  CC      drivers/base/init.o
  CC      kernel/trace/trace_events_filter.o
  CC [M]  drivers/gpu/drm/ttm/ttm_resource.o
  AR      drivers/spi/built-in.a
  CC      drivers/base/map.o
  CC      net/ipv6/udplite.o
  CC [M]  fs/smb/client/netmisc.o
  CC      net/ipv4/tcp_timer.o
  CC      fs/btrfs/volumes.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_dma_buf_test.o
  CC [M]  crypto/ecdh_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atombios_crtc.o
  CC      arch/x86/kernel/espfix_64.o
  CC      drivers/ata/libata-scsi.o
  CC      lib/plist.o
  CC      drivers/acpi/acpica/psloop.o
  CC      net/ipv4/tcp_ipv4.o
  CC      lib/radix-tree.o
  AR      drivers/tty/built-in.a
  CC      drivers/ata/libata-eh.o
  CC      drivers/usb/common/common.o
  CC [M]  fs/smb/client/smbencrypt.o
  CC      drivers/usb/core/usb.o
  CC [M]  drivers/gpu/drm/i915/i915_drm_client.o
  CC      drivers/usb/core/hub.o
  CC [M]  arch/x86/kvm/vmx/hyperv.o
  LD [M]  crypto/ecdh_generic.o
  CC      drivers/scsi/scsi_lib_dma.o
  CC      drivers/ata/libata-transport.o
  AR      crypto/built-in.a
  CC      drivers/acpi/acpica/psobject.o
  CC      net/ipv4/tcp_minisocks.o
  CC      arch/x86/kernel/ksysfs.o
  CC      mm/init-mm.o
  CC      net/bridge/br_mst.o
  CC      drivers/base/devres.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_migrate_test.o
  CC      drivers/acpi/acpica/psopcode.o
  CC      kernel/trace/trace_events_trigger.o
  CC      drivers/net/phy/phy_device.o
  CC      net/sunrpc/auth_tls.o
  CC [M]  drivers/gpu/drm/ttm/ttm_pool.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atom.o
  CC      drivers/ata/libata-trace.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_fence.o
  CC [M]  net/netfilter/nf_nat_masquerade.o
  CC      net/core/selftests.o
  CC      drivers/acpi/acpica/psopinfo.o
  CC      drivers/net/phy/linkmode.o
  CC      net/core/ptp_classifier.o
  CC      drivers/usb/common/debug.o
  AR      drivers/nvme/host/built-in.a
  AR      fs/ext4/built-in.a
  AR      drivers/nvme/built-in.a
  CC      net/core/netprio_cgroup.o
  AR      drivers/usb/phy/built-in.a
  CC [M]  drivers/gpu/drm/xe/tests/xe_mocs_test.o
  CC [M]  net/bridge/br_netfilter_hooks.o
  CC      net/core/dst_cache.o
  AR      drivers/usb/common/built-in.a
  CC      drivers/scsi/scsi_scan.o
  CC      net/ipv6/raw.o
  CC      drivers/usb/core/hcd.o
  CC      net/ipv4/tcp_cong.o
  CC      net/sunrpc/auth_unix.o
  CC      arch/x86/kernel/bootflag.o
  CC [M]  drivers/gpu/drm/ttm/ttm_device.o
  CC      lib/ratelimit.o
  CC      lib/rbtree.o
  CC [M]  fs/smb/client/transport.o
  CC      drivers/acpi/acpica/psparse.o
  CC [M]  drivers/gpu/drm/i915/i915_getparam.o
  CC [M]  fs/smb/client/cached_dir.o
  CC      arch/x86/kernel/e820.o
  CC      arch/x86/kernel/pci-dma.o
  CC      net/ipv6/icmp.o
  CC      drivers/base/attribute_container.o
  CC      net/ipv6/mcast.o
  CC      drivers/usb/core/urb.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_pci_test.o
  CC [M]  drivers/gpu/drm/ttm/ttm_sys_manager.o
  CC      kernel/ptrace.o
  CC [M]  drivers/gpu/drm/ttm/ttm_agp_backend.o
  CC      lib/seq_buf.o
  CC      drivers/net/phy/mdio_bus.o
  CC      drivers/net/phy/mdio_device.o
  CC      net/ipv6/reassembly.o
  CC      drivers/usb/core/message.o
  CC      kernel/trace/trace_eprobe.o
  CC      drivers/acpi/acpica/psscope.o
  CC      drivers/acpi/acpica/pstree.o
  CC      net/core/gro_cells.o
  CC      net/ipv4/tcp_metrics.o
  CC [M]  arch/x86/kvm/vmx/nested.o
  CC      drivers/base/transport_class.o
  CC [M]  drivers/gpu/drm/xe/xe_bb.o
  CC [M]  fs/smb/client/cifs_unicode.o
  CC      lib/siphash.o
  CC      fs/btrfs/async-thread.o
  CC [M]  arch/x86/kvm/vmx/posted_intr.o
  CC [M]  net/netfilter/x_tables.o
  CC      kernel/trace/trace_kprobe.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_rtp_test.o
  CC      net/ipv4/tcp_fastopen.o
  CC      drivers/ata/libata-sata.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.o
  CC      drivers/base/topology.o
  CC      net/sunrpc/svc.o
  CC [M]  drivers/gpu/drm/i915/i915_ioctl.o
  LD [M]  drivers/gpu/drm/ttm/ttm.o
  CC      drivers/acpi/acpica/psutils.o
  GEN     drivers/scsi/scsi_devinfo_tbl.c
  CC      drivers/scsi/scsi_devinfo.o
  CC      kernel/trace/error_report-traces.o
  LD [M]  arch/x86/kvm/kvm.o
  CC      kernel/user.o
  CC      drivers/usb/host/pci-quirks.o
  CC      kernel/signal.o
  CC      drivers/usb/host/ehci-hcd.o
  CC      mm/memblock.o
  CC      drivers/acpi/acpica/pswalk.o
  CC      arch/x86/kernel/quirks.o
  CC      lib/string.o
  CC      drivers/acpi/acpica/psxface.o
  CC      drivers/scsi/scsi_sysctl.o
  UPD     arch/x86/kvm/kvm-asm-offsets.h
  AS [M]  arch/x86/kvm/vmx/vmenter.o
  AR      net/core/built-in.a
  CC      drivers/usb/storage/scsiglue.o
  CC      net/l3mdev/l3mdev.o
  CC      drivers/usb/serial/usb-serial.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_object.o
  CC      drivers/usb/serial/generic.o
  CC      drivers/usb/storage/protocol.o
  CC [M]  drivers/gpu/drm/xe/xe_bo.o
  CC      arch/x86/kernel/topology.o
  CC      net/ipv4/tcp_rate.o
  CC      drivers/net/phy/swphy.o
  CC      drivers/base/container.o
  CC      lib/timerqueue.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_wa_test.o
  CC      drivers/acpi/acpica/rsaddr.o
  CC      kernel/sys.o
  CC      drivers/acpi/acpica/rscalc.o
  CC      kernel/trace/power-traces.o
  CC      drivers/ata/libata-sff.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gart.o
  CC      drivers/usb/storage/transport.o
  CC      drivers/scsi/scsi_debugfs.o
  CC      net/ipv4/tcp_recovery.o
  CC      drivers/scsi/scsi_trace.o
  CC      kernel/trace/rpm-traces.o
  CC      lib/vsprintf.o
  CC [M]  net/bridge/br_netfilter_ipv6.o
  CC [M]  drivers/gpu/drm/i915/i915_irq.o
  CC [M]  drivers/gpu/drm/i915/i915_mitigations.o
  CC      net/handshake/alert.o
  CC      drivers/input/serio/serio.o
  CC [M]  net/netfilter/xt_tcpudp.o
  CC      drivers/usb/core/driver.o
  CC      drivers/input/keyboard/atkbd.o
  CC      drivers/usb/core/config.o
  AR      drivers/input/mouse/built-in.a
  CC      arch/x86/kernel/kdebugfs.o
  CC      drivers/acpi/acpica/rscreate.o
  CC      drivers/base/property.o
  CC [M]  fs/smb/client/nterr.o
  CC      drivers/acpi/acpica/rsdumpinfo.o
  CC      drivers/usb/storage/usb.o
  CC      drivers/input/input.o
  AR      net/l3mdev/built-in.a
  CC      drivers/input/input-compat.o
  CC      arch/x86/kernel/alternative.o
  CC      net/ipv4/tcp_ulp.o
  CC      drivers/net/mdio/acpi_mdio.o
  CC      drivers/net/phy/fixed_phy.o
  CC      drivers/net/mdio/fwnode_mdio.o
  CC      net/ipv4/tcp_offload.o
  CC [M]  drivers/gpu/drm/xe/xe_bo_evict.o
  CC      mm/memory_hotplug.o
  CC      net/handshake/genl.o
  CC      drivers/acpi/acpica/rsinfo.o
  CC      drivers/acpi/acpica/rsio.o
  CC      drivers/scsi/scsi_logging.o
  CC [M]  drivers/net/phy/phylink.o
  CC      drivers/usb/serial/bus.o
  CC [M]  fs/smb/client/cifsencrypt.o
  CC      drivers/ata/libata-pmp.o
  CC      net/ipv4/tcp_plb.o
  CC      drivers/ata/libata-acpi.o
  AR      drivers/net/pcs/built-in.a
  AR      drivers/net/ethernet/adi/built-in.a
  AR      drivers/net/ethernet/alacritech/built-in.a
  AR      drivers/net/ethernet/amazon/built-in.a
  CC [M]  drivers/gpu/drm/i915/i915_module.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_encoders.o
  AR      drivers/net/ethernet/aquantia/built-in.a
  CC      drivers/input/serio/i8042.o
  AR      drivers/net/ethernet/asix/built-in.a
  AR      drivers/net/ethernet/cadence/built-in.a
  AR      drivers/net/ethernet/broadcom/built-in.a
  CC      drivers/ata/libata-pata-timings.o
  CC [M]  drivers/net/ethernet/broadcom/b44.o
  CC [M]  drivers/net/ethernet/broadcom/bnx2.o
  CC      net/sunrpc/svcsock.o
  CC      drivers/input/serio/libps2.o
  CC      drivers/usb/storage/initializers.o
  CC      fs/btrfs/ioctl.o
  CC      drivers/acpi/acpica/rsirq.o
  CC [M]  net/bluetooth/af_bluetooth.o
  CC      mm/madvise.o
  AR      drivers/input/keyboard/built-in.a
  CC      fs/file_table.o
  AR      net/bridge/built-in.a
  CC      fs/super.o
  LD [M]  net/bridge/br_netfilter.o
  AR      drivers/net/mdio/built-in.a
  CC [M]  net/bluetooth/hci_core.o
  CC      drivers/acpi/acpica/rslist.o
  AR      drivers/usb/misc/built-in.a
  CC      drivers/usb/gadget/udc/core.o
  CC [M]  net/dns_resolver/dns_key.o
  CC      drivers/usb/core/file.o
  CC      kernel/trace/trace_dynevent.o
  CC [M]  net/dns_resolver/dns_query.o
  CC      net/devres.o
  CC      drivers/base/cacheinfo.o
  CC [M]  net/netfilter/xt_mark.o
  CC      drivers/usb/serial/console.o
  CC      net/handshake/netlink.o
  CC [M]  fs/smb/client/readdir.o
  CC      drivers/acpi/acpica/rsmemory.o
  CC      drivers/scsi/scsi_pm.o
  CC      drivers/acpi/acpica/rsmisc.o
  CC      fs/char_dev.o
  CC      net/ipv6/tcp_ipv6.o
  CC      drivers/acpi/acpica/rsserial.o
  CC      lib/win_minmax.o
  CC      arch/x86/kernel/i8253.o
  CC      lib/xarray.o
  CC      drivers/usb/storage/sierra_ms.o
  CC      net/ipv4/datagram.o
  CC      drivers/input/input-mt.o
  CC      drivers/ata/ahci.o
  CC      drivers/ata/libahci.o
  CC      drivers/acpi/acpica/rsutils.o
  CC      drivers/usb/storage/option_ms.o
  CC      drivers/ata/ata_piix.o
  CC      drivers/usb/core/buffer.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_display.o
  CC      drivers/usb/storage/usual-tables.o
  CC [M]  drivers/gpu/drm/i915/i915_params.o
  CC [M]  drivers/gpu/drm/xe/xe_debugfs.o
  LD [M]  net/dns_resolver/dns_resolver.o
  CC      drivers/usb/serial/ftdi_sio.o
  CC      drivers/acpi/acpica/rsxface.o
  CC      net/ipv6/ping.o
  CC [M]  net/netfilter/xt_nat.o
  CC      kernel/umh.o
  CC [M]  net/netfilter/xt_REDIRECT.o
  CC      kernel/trace/trace_probe.o
  AR      drivers/usb/gadget/function/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_devcoredump.o
  AR      drivers/input/serio/built-in.a
  CC      kernel/workqueue.o
  CC      fs/stat.o
  CC      mm/page_io.o
  CC [M]  net/bluetooth/hci_conn.o
  CC      drivers/base/swnode.o
  CC      kernel/pid.o
  CC      lib/lockref.o
  CC      lib/bcd.o
  CC      drivers/scsi/scsi_bsg.o
  CC      arch/x86/kernel/hw_breakpoint.o
  CC      lib/sort.o
  CC      kernel/trace/trace_uprobe.o
  CC      net/ipv4/raw.o
  CC      lib/parser.o
  CC      arch/x86/kernel/tsc.o
  AR      drivers/net/usb/built-in.a
  CC [M]  drivers/net/usb/pegasus.o
  CC      lib/debug_locks.o
  CC      net/handshake/request.o
  CC [M]  drivers/net/usb/rtl8150.o
  CC      drivers/usb/core/sysfs.o
  CC      kernel/trace/rethook.o
  CC      drivers/acpi/acpica/tbdata.o
  CC      drivers/input/input-poller.o
  AR      drivers/usb/storage/built-in.a
  CC [M]  drivers/net/ethernet/broadcom/cnic.o
  CC      drivers/usb/gadget/udc/trace.o
  CC      drivers/usb/core/endpoint.o
  CC      arch/x86/kernel/tsc_msr.o
  CC      arch/x86/kernel/io_delay.o
  CC [M]  drivers/gpu/drm/xe/xe_device.o
  CC      fs/exec.o
  CC      drivers/input/ff-core.o
  CC [M]  drivers/gpu/drm/i915/i915_pci.o
  CC [M]  drivers/net/phy/aquantia_main.o
  CC      kernel/task_work.o
  CC      drivers/acpi/acpica/tbfadt.o
  CC      drivers/scsi/scsi_common.o
  CC [M]  drivers/usb/class/usbtmc.o
  CC      drivers/usb/host/ehci-pci.o
  CC      drivers/usb/host/ohci-hcd.o
  CC      arch/x86/kernel/rtc.o
  CC      drivers/usb/core/devio.o
  CC      drivers/base/auxiliary.o
  CC [M]  net/netfilter/xt_MASQUERADE.o
  CC      arch/x86/kernel/resource.o
  CC      net/ipv4/udp.o
  CC      fs/pipe.o
  CC      drivers/usb/core/notify.o
  CC [M]  fs/smb/client/ioctl.o
  CC      lib/random32.o
  CC      fs/namei.o
  CC [M]  drivers/gpu/drm/vgem/vgem_drv.o
  CC      mm/swap_state.o
  CC [M]  drivers/gpu/drm/vgem/vgem_fence.o
  CC      drivers/usb/serial/pl2303.o
  CC      drivers/usb/core/generic.o
  AS      arch/x86/kernel/irqflags.o
  CC      arch/x86/kernel/static_call.o
  CC      net/sunrpc/svcauth.o
  CC      drivers/acpi/acpica/tbfind.o
  LD [M]  arch/x86/kvm/kvm-intel.o
  CC [M]  drivers/net/phy/aquantia_hwmon.o
  CC      drivers/input/touchscreen.o
  CC      arch/x86/kernel/process.o
  CC      net/ipv6/exthdrs.o
  CC      drivers/usb/core/quirks.o
  CC      drivers/scsi/sd.o
  CC      kernel/extable.o
  CC [M]  drivers/gpu/drm/i915/i915_scatterlist.o
  CC      lib/bust_spinlocks.o
  CC      drivers/base/devtmpfs.o
  AR      drivers/ata/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_i2c.o
  CC [M]  drivers/gpu/drm/i915/i915_suspend.o
  CC      kernel/params.o
  CC      net/ipv4/udplite.o
  AR      drivers/usb/gadget/udc/built-in.a
  CC      kernel/kthread.o
  CC [M]  drivers/net/usb/r8152.o
  AR      drivers/usb/gadget/legacy/built-in.a
  CC      fs/btrfs/locking.o
  CC      drivers/usb/gadget/usbstring.o
  CC      drivers/acpi/acpica/tbinstal.o
  AR      drivers/net/ethernet/cavium/common/built-in.a
  AR      drivers/net/ethernet/cavium/thunder/built-in.a
  CC [M]  drivers/gpu/drm/i915/i915_switcheroo.o
  AR      drivers/net/ethernet/cavium/liquidio/built-in.a
  AR      drivers/net/ethernet/cavium/octeon/built-in.a
  CC      net/handshake/tlshd.o
  AR      drivers/net/ethernet/cavium/built-in.a
  CC      drivers/acpi/acpica/tbprint.o
  CC [M]  drivers/gpu/drm/xe/xe_device_sysfs.o
  CC      drivers/acpi/acpica/tbutils.o
  CC      drivers/usb/gadget/config.o
  LD [M]  drivers/gpu/drm/vgem/vgem.o
  CC      arch/x86/kernel/ptrace.o
  CC [M]  net/bluetooth/hci_event.o
  CC      lib/kasprintf.o
  CC      lib/bitmap.o
  CC      drivers/input/ff-memless.o
  CC [M]  net/netfilter/xt_addrtype.o
  CC [M]  drivers/net/phy/ax88796b.o
  AR      kernel/trace/built-in.a
  CC [M]  drivers/net/phy/bcm7xxx.o
  CC      kernel/sys_ni.o
  CC      fs/btrfs/orphan.o
  CC [M]  net/bluetooth/mgmt.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/object.o
  CC [M]  net/bluetooth/hci_sock.o
  AR      drivers/usb/serial/built-in.a
  CC [M]  net/bluetooth/hci_sysfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/client.o
  CC [M]  drivers/net/ipvlan/ipvlan_core.o
  CC [M]  drivers/net/vxlan/vxlan_core.o
  CC      drivers/acpi/acpica/tbxface.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/conn.o
  CC      mm/swapfile.o
  CC [M]  drivers/net/ipvlan/ipvlan_main.o
  CC      drivers/usb/gadget/epautoconf.o
  CC      drivers/base/node.o
  CC [M]  drivers/net/ipvlan/ipvlan_l3s.o
  CC      drivers/net/loopback.o
  CC [M]  drivers/gpu/drm/xe/xe_dma_buf.o
  CC [M]  fs/smb/client/sess.o
  CC [M]  fs/smb/client/export.o
  CC [M]  net/bluetooth/l2cap_core.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/device.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gem.o
  CC      net/handshake/trace.o
  CC      net/sunrpc/svcauth_unix.o
  CC      kernel/nsproxy.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ring.o
  CC [M]  drivers/net/phy/bcm87xx.o
  CC      drivers/input/vivaldi-fmap.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_cs.o
  CC [M]  drivers/gpu/drm/i915/i915_sysfs.o
  CC [M]  net/bluetooth/l2cap_sock.o
  CC      lib/scatterlist.o
  CC      drivers/acpi/acpica/tbxfload.o
  CC      net/sunrpc/addr.o
  CC      arch/x86/kernel/tls.o
  CC      fs/btrfs/export.o
  CC      net/ipv6/datagram.o
  CC      drivers/usb/core/devices.o
  CC      drivers/usb/gadget/composite.o
  CC      lib/list_sort.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/disp.o
  CC      arch/x86/kernel/step.o
  CC      drivers/input/input-leds.o
  CC [M]  drivers/net/ethernet/broadcom/tg3.o
  CC      net/sunrpc/rpcb_clnt.o
  CC [M]  net/netfilter/xt_conntrack.o
  CC      drivers/usb/host/ohci-pci.o
  CC      drivers/input/mousedev.o
  CC      kernel/notifier.o
  CC      drivers/scsi/sg.o
  CC      drivers/acpi/acpica/tbxfroot.o
  CC      drivers/acpi/acpica/utaddress.o
  CC      drivers/base/memory.o
  CC      drivers/usb/gadget/functions.o
  CC      drivers/rtc/lib.o
  CC [M]  drivers/gpu/drm/xe/xe_drm_client.o
  CC [M]  drivers/net/phy/bcm-phy-lib.o
  CC      drivers/rtc/class.o
  CC      drivers/rtc/interface.o
  CC      net/ipv4/udp_offload.o
  CC      net/ipv6/ip6_flowlabel.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_bios.o
  CC      drivers/acpi/acpica/utalloc.o
  CC      arch/x86/kernel/i8237.o
  CC [M]  fs/smb/client/unc.o
  CC      drivers/usb/core/phy.o
  CC      drivers/net/netconsole.o
  CC [M]  drivers/gpu/drm/i915/i915_utils.o
  CC      net/ipv6/inet6_connection_sock.o
  LD [M]  drivers/net/ipvlan/ipvlan.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.o
  AR      drivers/net/ethernet/cortina/built-in.a
  CC      kernel/ksysfs.o
  CC      net/ipv4/arp.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/driver.o
  CC      lib/uuid.o
  CC      drivers/usb/host/uhci-hcd.o
  CC      arch/x86/kernel/stacktrace.o
  CC [M]  drivers/gpu/drm/xe/xe_exec.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/event.o
  CC      drivers/rtc/nvmem.o
  CC      fs/btrfs/tree-log.o
  AR      net/handshake/built-in.a
  CC      net/socket.o
  CC      lib/iov_iter.o
  CC      arch/x86/kernel/reboot.o
  CC      drivers/acpi/acpica/utascii.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atombios_dp.o
  CC      drivers/input/evdev.o
  CC      drivers/base/module.o
  CC      drivers/scsi/scsi_sysfs.o
  CC [M]  fs/smb/client/winucase.o
  CC [M]  net/netfilter/xt_ipvs.o
  CC [M]  fs/smb/client/smb2ops.o
  CC [M]  drivers/net/vxlan/vxlan_multicast.o
  CC [M]  drivers/gpu/drm/xe/xe_execlist.o
  CC      kernel/cred.o
  CC      drivers/usb/gadget/configfs.o
  CC      drivers/usb/core/port.o
  CC [M]  drivers/net/vxlan/vxlan_vnifilter.o
  CC      net/ipv6/udp_offload.o
  CC      drivers/acpi/acpica/utbuffer.o
  CC [M]  drivers/net/phy/broadcom.o
  CC      arch/x86/kernel/msr.o
  CC      drivers/base/pinctrl.o
  CC      drivers/usb/host/xhci.o
  CC      drivers/usb/gadget/u_f.o
  CC [M]  net/bluetooth/smp.o
  CC [M]  drivers/gpu/drm/i915/intel_clock_gating.o
  CC      drivers/base/devcoredump.o
  CC [M]  net/bluetooth/lib.o
  CC      arch/x86/kernel/cpuid.o
  CC      drivers/usb/host/xhci-mem.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_afmt.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/fifo.o
  CC      drivers/usb/host/xhci-ext-caps.o
  CC      net/sunrpc/timer.o
  CC [M]  drivers/gpu/drm/xe/xe_exec_queue.o
  CC [M]  drivers/gpu/drm/xe/xe_force_wake.o
  CC [M]  drivers/gpu/drm/xe/xe_ggtt.o
  CC [M]  drivers/gpu/drm/i915/intel_device_info.o
  CC      net/ipv6/seg6.o
  CC      drivers/acpi/acpica/utcksum.o
  CC      mm/swap_slots.o
  CC      drivers/rtc/dev.o
  CC      arch/x86/kernel/early-quirks.o
  CC      drivers/usb/host/xhci-ring.o
  CC [M]  net/bluetooth/ecdh_helper.o
  AR      drivers/input/built-in.a
  CC      drivers/acpi/sleep.o
  CC      arch/x86/kernel/smp.o
  CC      drivers/acpi/acpica/utcopy.o
  CC [M]  drivers/gpu/drm/xe/xe_gpu_scheduler.o
  CC      drivers/usb/core/hcd-pci.o
  CC      kernel/reboot.o
  CC      kernel/async.o
  CC      drivers/base/platform-msi.o
  CC      net/sunrpc/xdr.o
  LD [M]  net/netfilter/nf_conntrack.o
  CC [M]  net/bluetooth/hci_request.o
  LD [M]  net/netfilter/nf_nat.o
  CC [M]  drivers/net/vxlan/vxlan_mdb.o
  AR      net/netfilter/built-in.a
  CC [M]  drivers/net/phy/lxt.o
  CC      drivers/usb/host/xhci-hub.o
  CC [M]  net/bluetooth/mgmt_util.o
  CC      net/ipv4/icmp.o
  AR      drivers/scsi/built-in.a
  CC      net/compat.o
  CC      net/ipv6/fib6_notifier.o
  CC      drivers/acpi/device_sysfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/head.o
  CC [M]  net/bluetooth/mgmt_config.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_trace_points.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atombios_encoders.o
  CC      drivers/rtc/proc.o
  CC      drivers/acpi/acpica/utexcep.o
  AR      drivers/net/ethernet/engleder/built-in.a
  CC      net/sunrpc/sunrpc_syms.o
  AR      drivers/usb/gadget/built-in.a
  CC [M]  net/bluetooth/hci_codec.o
  CC      net/sysctl_net.o
  CC      mm/dmapool.o
  CC [M]  fs/smb/client/smb2maperror.o
  CC      arch/x86/kernel/smpboot.o
  CC      drivers/rtc/sysfs.o
  CC      drivers/usb/host/xhci-dbg.o
  CC      arch/x86/kernel/tsc_sync.o
  CC      drivers/base/physical_location.o
  AR      drivers/net/ethernet/ezchip/built-in.a
  CC      drivers/usb/host/xhci-trace.o
  CC      drivers/usb/core/usb-acpi.o
  CC      arch/x86/kernel/setup_percpu.o
  HOSTCC  drivers/gpu/drm/xe/xe_gen_wa_oob
  CC      drivers/acpi/acpica/utdebug.o
  CC [M]  drivers/gpu/drm/i915/intel_memory_region.o
  CC [M]  drivers/gpu/drm/xe/xe_gsc_submit.o
  CC      drivers/rtc/rtc-mc146818-lib.o
  CC      drivers/usb/host/xhci-debugfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_sa.o
  CC      kernel/range.o
  CC      lib/clz_ctz.o
  CC      drivers/acpi/device_pm.o
  CC [M]  drivers/net/phy/realtek.o
  CC      kernel/smpboot.o
  CC      lib/bsearch.o
  CC [M]  drivers/net/usb/asix_devices.o
  CC      lib/find_bit.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/mem.o
  CC      mm/hugetlb.o
  CC      drivers/usb/host/xhci-pci.o
  CC      net/ipv6/rpl.o
  CC      drivers/acpi/acpica/utdecode.o
  CC      drivers/acpi/proc.o
  CC      fs/btrfs/free-space-cache.o
  CC      drivers/acpi/acpica/utdelete.o
  CC      drivers/rtc/rtc-cmos.o
  CC      drivers/base/trace.o
  CC [M]  net/bluetooth/eir.o
  CC      net/sunrpc/cache.o
  CC      net/ipv6/ioam6.o
  CC [M]  net/bluetooth/hci_sync.o
  CC      fs/btrfs/zlib.o
  CC      mm/hugetlb_vmemmap.o
  CC [M]  drivers/gpu/drm/ast/ast_drv.o
  CC      drivers/gpu/drm/drm_mipi_dsi.o
  CC      mm/mempolicy.o
  CC      lib/llist.o
  AR      drivers/usb/core/built-in.a
  CC [M]  drivers/gpu/drm/ast/ast_i2c.o
  CC [M]  drivers/gpu/drm/ast/ast_main.o
  CC      drivers/acpi/acpica/uterror.o
  CC      lib/lwq.o
  CC [M]  drivers/gpu/drm/ast/ast_mm.o
  CC [M]  drivers/gpu/drm/xe/xe_gt.o
  CC [M]  fs/smb/client/smb2transport.o
  CC      kernel/ucount.o
  CC [M]  net/bluetooth/coredump.o
  CC      drivers/acpi/acpica/uteval.o
  CC      arch/x86/kernel/ftrace.o
  CC      lib/memweight.o
  CC      lib/kfifo.o
  CC [M]  drivers/net/usb/asix_common.o
  CC      net/sunrpc/rpc_pipe.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/mmu.o
  AR      drivers/net/ethernet/fungible/built-in.a
  AR      drivers/base/built-in.a
  CC [M]  drivers/gpu/drm/i915/intel_pcode.o
  CC [M]  drivers/net/phy/smsc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/atombios_i2c.o
  CC      drivers/acpi/bus.o
  CC      net/ipv4/devinet.o
  CC      net/sunrpc/sysfs.o
  CC [M]  fs/smb/client/smb2misc.o
  AR      drivers/i2c/algos/built-in.a
  CC [M]  drivers/i2c/algos/i2c-algo-bit.o
  AR      drivers/i3c/built-in.a
  CC [M]  drivers/net/usb/ax88172a.o
  LD [M]  drivers/net/vxlan/vxlan.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/outp.o
  CC [M]  drivers/net/usb/ax88179_178a.o
  CC      drivers/acpi/acpica/utglobal.o
  CC [M]  drivers/gpu/drm/ast/ast_mode.o
  AR      drivers/rtc/built-in.a
  CC      fs/btrfs/lzo.o
  AR      drivers/media/i2c/built-in.a
  AR      drivers/media/tuners/built-in.a
  AR      drivers/media/rc/keymaps/built-in.a
  AR      drivers/media/common/b2c2/built-in.a
  AR      drivers/ptp/built-in.a
  AR      drivers/media/rc/built-in.a
  CC [M]  drivers/ptp/ptp_clock.o
  CC [M]  drivers/gpu/drm/ast/ast_post.o
  AR      drivers/media/common/saa7146/built-in.a
  CC      kernel/regset.o
  CC [M]  drivers/net/dummy.o
  AR      drivers/media/common/siano/built-in.a
  CC      fs/btrfs/zstd.o
  CC [M]  drivers/gpu/drm/ast/ast_dp501.o
  CC [M]  drivers/net/usb/cdc_ether.o
  AR      drivers/media/common/v4l2-tpg/built-in.a
  AR      drivers/media/common/videobuf2/built-in.a
  CC [M]  drivers/net/usb/cdc_eem.o
  AR      drivers/media/common/built-in.a
  CC [M]  drivers/net/usb/smsc75xx.o
  AR      drivers/media/platform/allegro-dvt/built-in.a
  AR      drivers/media/platform/amlogic/meson-ge2d/built-in.a
  CC      drivers/i2c/busses/i2c-designware-common.o
  CC      fs/btrfs/compression.o
  CC      drivers/i2c/busses/i2c-designware-master.o
  AR      drivers/media/platform/amlogic/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_gt_ccs_mode.o
  AR      drivers/media/platform/amphion/built-in.a
  AR      drivers/media/platform/aspeed/built-in.a
  CC      mm/sparse.o
  AR      drivers/media/platform/atmel/built-in.a
  AR      drivers/media/platform/cadence/built-in.a
  AR      drivers/media/platform/chips-media/built-in.a
  AR      drivers/media/platform/intel/built-in.a
  AR      drivers/media/platform/marvell/built-in.a
  AR      drivers/media/platform/mediatek/jpeg/built-in.a
  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
  CC      mm/sparse-vmemmap.o
  CC      drivers/acpi/acpica/uthex.o
  AR      drivers/media/platform/mediatek/vcodec/decoder/built-in.a
  AR      drivers/media/platform/mediatek/vcodec/built-in.a
  AR      drivers/media/platform/mediatek/vpu/built-in.a
  AS      arch/x86/kernel/ftrace_64.o
  CC      lib/percpu-refcount.o
  AR      drivers/media/platform/mediatek/mdp3/built-in.a
  AR      drivers/media/platform/mediatek/built-in.a
  CC      arch/x86/kernel/trace_clock.o
  CC      kernel/ksyms_common.o
  AR      drivers/usb/host/built-in.a
  AR      drivers/media/platform/microchip/built-in.a
  AR      drivers/usb/built-in.a
  AR      drivers/media/platform/nuvoton/built-in.a
  CC [M]  drivers/gpu/drm/i915/intel_region_ttm.o
  AR      drivers/media/platform/nvidia/tegra-vde/built-in.a
  AR      drivers/net/ethernet/huawei/built-in.a
  AR      drivers/media/platform/nvidia/built-in.a
  CC      net/sunrpc/svc_xprt.o
  AR      drivers/media/platform/nxp/dw100/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_gt_clock.o
  AR      drivers/media/platform/nxp/imx-jpeg/built-in.a
  CC      arch/x86/kernel/trace.o
  AR      drivers/media/platform/nxp/imx8-isi/built-in.a
  CC [M]  drivers/gpu/drm/ast/ast_dp.o
  AR      drivers/media/platform/nxp/built-in.a
  AR      drivers/i2c/muxes/built-in.a
  CC [M]  drivers/i2c/muxes/i2c-mux-gpio.o
  AR      drivers/media/platform/qcom/camss/built-in.a
  AR      drivers/media/platform/qcom/venus/built-in.a
  AR      drivers/media/platform/qcom/built-in.a
  AR      drivers/media/platform/renesas/rcar-vin/built-in.a
  LD [M]  drivers/net/phy/aquantia.o
  AR      drivers/media/platform/renesas/rzg2l-cru/built-in.a
  AR      drivers/net/phy/built-in.a
  CC      mm/mmu_notifier.o
  CC      fs/btrfs/delayed-ref.o
  AR      drivers/media/platform/renesas/vsp1/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.o
  AR      drivers/media/platform/renesas/built-in.a
  CC [M]  drivers/net/usb/smsc95xx.o
  CC      drivers/acpi/acpica/utids.o
  CC      drivers/i2c/i2c-boardinfo.o
  AR      drivers/media/platform/rockchip/rga/built-in.a
  CC      drivers/acpi/acpica/utinit.o
  AR      drivers/media/platform/rockchip/rkisp1/built-in.a
  CC [M]  drivers/net/usb/mcs7830.o
  AR      drivers/media/platform/rockchip/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvif/timer.o
  AR      drivers/media/platform/samsung/exynos-gsc/built-in.a
  CC      net/ipv6/sysctl_net_ipv6.o
  AR      drivers/media/platform/samsung/exynos4-is/built-in.a
  AR      drivers/media/platform/samsung/s3c-camif/built-in.a
  AR      drivers/media/platform/samsung/s5p-g2d/built-in.a
  CC      drivers/acpi/glue.o
  AR      drivers/media/platform/samsung/s5p-jpeg/built-in.a
  AR      drivers/media/pci/ttpci/built-in.a
  AR      drivers/media/platform/samsung/s5p-mfc/built-in.a
  AR      drivers/media/platform/samsung/built-in.a
  AR      drivers/media/pci/b2c2/built-in.a
  CC [M]  drivers/ptp/ptp_chardev.o
  AR      drivers/media/pci/pluto2/built-in.a
  CC      fs/fcntl.o
  AR      drivers/media/pci/dm1105/built-in.a
  AR      drivers/media/platform/st/sti/bdisp/built-in.a
  AR      drivers/media/pci/pt1/built-in.a
  CC [M]  drivers/net/usb/usbnet.o
  AR      drivers/media/platform/st/sti/c8sectpfe/built-in.a
  CC [M]  drivers/ptp/ptp_sysfs.o
  CC [M]  drivers/ptp/ptp_vclock.o
  AR      drivers/media/pci/pt3/built-in.a
  AR      drivers/media/platform/st/sti/delta/built-in.a
  CC      kernel/groups.o
  AR      drivers/media/pci/mantis/built-in.a
  AR      drivers/media/platform/st/sti/hva/built-in.a
  AR      drivers/media/pci/ngene/built-in.a
  AR      drivers/media/platform/sunxi/sun4i-csi/built-in.a
  AR      drivers/media/platform/st/stm32/built-in.a
  AR      drivers/media/pci/ddbridge/built-in.a
  AR      drivers/media/platform/sunxi/sun6i-csi/built-in.a
  AR      drivers/media/platform/st/built-in.a
  AR      drivers/media/pci/saa7146/built-in.a
  CC [M]  drivers/net/usb/cdc_ncm.o
  AR      drivers/media/platform/sunxi/sun6i-mipi-csi2/built-in.a
  CC      fs/ioctl.o
  AR      drivers/media/pci/smipcie/built-in.a
  AR      drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvif/vmm.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_debugfs.o
  AR      drivers/media/pci/netup_unidvb/built-in.a
  AR      drivers/media/platform/sunxi/sun8i-di/built-in.a
  CC      lib/rhashtable.o
  AR      drivers/media/pci/intel/ipu3/built-in.a
  AR      drivers/media/platform/sunxi/sun8i-rotate/built-in.a
  AR      drivers/media/platform/sunxi/built-in.a
  AR      drivers/media/pci/intel/ivsc/built-in.a
  CC [M]  drivers/gpu/drm/drm_aperture.o
  AR      drivers/media/pci/intel/built-in.a
  CC      arch/x86/kernel/rethook.o
  AR      drivers/media/pci/built-in.a
  AR      drivers/media/platform/verisilicon/built-in.a
  AR      drivers/media/platform/ti/am437x/built-in.a
  CC      mm/ksm.o
  AR      drivers/media/platform/ti/cal/built-in.a
  AR      drivers/media/platform/ti/vpe/built-in.a
  AR      drivers/media/platform/via/built-in.a
  CC [M]  drivers/net/usb/r8153_ecm.o
  AR      drivers/media/platform/ti/davinci/built-in.a
  AR      drivers/media/platform/ti/j721e-csi2rx/built-in.a
  CC [M]  drivers/ptp/ptp_kvm_x86.o
  AR      drivers/media/platform/ti/omap/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_gt_freq.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vm.o
  AR      drivers/media/platform/ti/omap3isp/built-in.a
  AR      drivers/media/platform/ti/built-in.a
  CC      net/ipv4/af_inet.o
  CC      drivers/acpi/acpica/utlock.o
  AR      drivers/media/platform/xilinx/built-in.a
  CC      drivers/i2c/busses/i2c-designware-platdrv.o
  AR      drivers/media/platform/built-in.a
  AR      drivers/media/usb/b2c2/built-in.a
  AR      drivers/media/usb/dvb-usb/built-in.a
  CC      net/sunrpc/xprtmultipath.o
  AR      drivers/media/usb/dvb-usb-v2/built-in.a
  CC [M]  drivers/net/ethernet/intel/e1000/e1000_main.o
  AR      drivers/media/usb/s2255/built-in.a
  AR      drivers/media/usb/siano/built-in.a
  AR      drivers/media/usb/ttusb-budget/built-in.a
  CC [M]  drivers/ptp/ptp_kvm_common.o
  AR      drivers/media/usb/ttusb-dec/built-in.a
  CC [M]  drivers/gpu/drm/i915/intel_runtime_pm.o
  CC [M]  drivers/gpu/drm/drm_atomic.o
  AR      drivers/media/usb/built-in.a
  CC [M]  fs/smb/client/smb2pdu.o
  CC      drivers/acpi/scan.o
  LD [M]  drivers/gpu/drm/ast/ast.o
  AR      drivers/media/mmc/siano/built-in.a
  AR      drivers/media/mmc/built-in.a
  CC [M]  drivers/net/ethernet/intel/e1000e/82571.o
  AR      drivers/media/firewire/built-in.a
  CC      net/sunrpc/stats.o
  AR      drivers/media/spi/built-in.a
  CC [M]  drivers/net/ethernet/intel/e1000e/ich8lan.o
  AR      drivers/media/test-drivers/built-in.a
  AR      drivers/media/built-in.a
  AR      drivers/net/ethernet/i825xx/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvif/user.o
  AR      drivers/power/reset/built-in.a
  CC      drivers/power/supply/power_supply_core.o
  CC      drivers/hwmon/hwmon.o
  AR      drivers/thermal/broadcom/built-in.a
  CC      drivers/power/supply/power_supply_sysfs.o
  AR      drivers/thermal/samsung/built-in.a
  CC      drivers/acpi/acpica/utmath.o
  CC      drivers/thermal/intel/intel_tcc.o
  AR      drivers/thermal/st/built-in.a
  CC      drivers/thermal/intel/therm_throt.o
  CC      arch/x86/kernel/crash_core_64.o
  AR      drivers/thermal/qcom/built-in.a
  CC      fs/btrfs/relocation.o
  CC [M]  drivers/gpu/drm/nouveau/nvif/userc361.o
  CC      kernel/vhost_task.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_idle.o
  CC      kernel/kcmp.o
  CC [M]  drivers/thermal/intel/x86_pkg_temp_thermal.o
  AR      drivers/net/ethernet/microsoft/built-in.a
  LD [M]  drivers/ptp/ptp.o
  CC      lib/base64.o
  CC      net/ipv6/xfrm6_policy.o
  CC      lib/once.o
  CC      net/sunrpc/sysctl.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_mcr.o
  CC [M]  drivers/net/ethernet/intel/igb/igb_main.o
  CC      lib/refcount.o
  CC [M]  drivers/net/ethernet/intel/igb/igb_ethtool.o
  AR      drivers/net/ethernet/litex/built-in.a
  CC      drivers/acpi/resource.o
  CC      fs/btrfs/delayed-inode.o
  CC      net/ipv6/xfrm6_state.o
  CC      drivers/acpi/acpica/utmisc.o
  CC      fs/readdir.o
  AR      drivers/net/ethernet/microchip/built-in.a
  AR      drivers/net/ethernet/mscc/built-in.a
  LD [M]  drivers/ptp/ptp_kvm.o
  AR      drivers/net/ethernet/neterion/built-in.a
  CC      drivers/i2c/busses/i2c-designware-baytrail.o
  CC      drivers/acpi/acpica/utmutex.o
  CC      drivers/watchdog/watchdog_core.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_pagefault.o
  CC      lib/rcuref.o
  CC      arch/x86/kernel/module.o
  CC      drivers/watchdog/watchdog_dev.o
  CC      drivers/power/supply/power_supply_leds.o
  CC      fs/btrfs/scrub.o
  CC      drivers/power/supply/power_supply_hwmon.o
  AR      drivers/net/ethernet/netronome/built-in.a
  CC      mm/slub.o
  CC      lib/usercopy.o
  AR      drivers/thermal/tegra/built-in.a
  AR      drivers/thermal/mediatek/built-in.a
  CC      fs/btrfs/backref.o
  CC      fs/select.o
  CC      kernel/freezer.o
  CC [M]  drivers/i2c/busses/i2c-scmi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/client.o
  AR      drivers/net/ethernet/ni/built-in.a
  CC [M]  drivers/net/macvlan.o
  AR      drivers/net/ethernet/packetengines/built-in.a
  CC      arch/x86/kernel/early_printk.o
  CC      lib/errseq.o
  CC [M]  drivers/gpu/drm/i915/intel_sbi.o
  CC      drivers/acpi/acpica/utnonansi.o
  CC [M]  drivers/net/mii.o
  CC [M]  drivers/net/mdio.o
  CC [M]  drivers/i2c/busses/i2c-ccgx-ucsi.o
  AR      drivers/thermal/intel/built-in.a
  CC      fs/btrfs/ulist.o
  CC      drivers/thermal/thermal_core.o
  CC      lib/bucket_locks.o
  CC [M]  net/bluetooth/sco.o
  CC [M]  drivers/hwmon/acpi_power_meter.o
  CC [M]  net/bluetooth/iso.o
  CC [M]  drivers/gpu/drm/i915/intel_step.o
  LD [M]  drivers/net/usb/asix.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vm_pt.o
  CC      drivers/thermal/thermal_sysfs.o
  CC [M]  drivers/i2c/busses/i2c-i801.o
  CC      lib/generic-radix-tree.o
  CC [M]  drivers/net/tun.o
  AR      drivers/power/supply/built-in.a
  CC [M]  drivers/hwmon/coretemp.o
  AR      drivers/power/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/engine.o
  AR      drivers/net/ethernet/realtek/built-in.a
  CC      arch/x86/kernel/hpet.o
  CC [M]  drivers/net/ethernet/realtek/8139cp.o
  CC      drivers/acpi/acpica/utobject.o
  CC      net/ipv6/xfrm6_input.o
  CC [M]  drivers/net/veth.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_sysfs.o
  AR      net/sunrpc/built-in.a
  CC      drivers/thermal/thermal_trip.o
  CC      drivers/watchdog/softdog.o
  CC      fs/btrfs/qgroup.o
  CC      lib/bitmap-str.o
  CC      kernel/stacktrace.o
  CC      net/ipv4/igmp.o
  CC      drivers/i2c/i2c-core-base.o
  CC      drivers/acpi/acpi_processor.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ib.o
  CC      drivers/thermal/thermal_helpers.o
  CC      mm/migrate.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/enum.o
  CC [M]  drivers/i2c/busses/i2c-isch.o
  CC [M]  drivers/i2c/busses/i2c-ismt.o
  CC      drivers/acpi/acpica/utosi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/event.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/firmware.o
  CC      drivers/acpi/acpica/utownerid.o
  CC      drivers/thermal/thermal_hwmon.o
  CC      drivers/acpi/acpica/utpredef.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_throttle_sysfs.o
  CC      drivers/acpi/acpica/utresdecode.o
  CC [M]  drivers/gpu/drm/i915/intel_uncore.o
  AR      drivers/watchdog/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_pll.o
  AR      drivers/hwmon/built-in.a
  CC [M]  drivers/gpu/drm/i915/intel_wakeref.o
  CC [M]  drivers/md/persistent-data/dm-array.o
  CC      arch/x86/kernel/amd_nb.o
  CC      lib/string_helpers.o
  CC [M]  drivers/i2c/busses/i2c-piix4.o
  CC      kernel/dma.o
  CC      drivers/md/md.o
  CC [M]  drivers/net/ethernet/intel/e1000e/80003es2lan.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/gpuobj.o
  CC      drivers/thermal/gov_fair_share.o
  CC      drivers/acpi/acpica/utresrc.o
  AR      drivers/net/ethernet/renesas/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
  CC      drivers/i2c/i2c-core-smbus.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_82575.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/intr.o
  CC [M]  drivers/i2c/busses/i2c-designware-pcidrv.o
  CC      fs/dcache.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_topology.o
  CC      drivers/i2c/i2c-core-acpi.o
  CC      drivers/i2c/i2c-core-slave.o
  CC      net/ipv6/xfrm6_output.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_main.o
  CC      drivers/i2c/i2c-dev.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_mac.o
  CC      kernel/smp.o
  AR      drivers/net/ethernet/sfc/built-in.a
  AR      drivers/net/ethernet/smsc/built-in.a
  CC [M]  drivers/net/ethernet/smsc/smsc9420.o
  CC [M]  drivers/net/ethernet/intel/igbvf/vf.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_main.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_mac.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_common.o
  CC [M]  drivers/net/ethernet/intel/e1000/e1000_hw.o
  CC      drivers/acpi/acpica/utstate.o
  CC [M]  net/bluetooth/a2mp.o
  CC      arch/x86/kernel/kvm.o
  CC      drivers/thermal/gov_step_wise.o
  CC      lib/hexdump.o
  CC [M]  drivers/md/persistent-data/dm-bitset.o
  CC [M]  drivers/net/ethernet/realtek/8139too.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.o
  CC      fs/btrfs/send.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.o
  CC      fs/btrfs/dev-replace.o
  CC      lib/kstrtox.o
  CC [M]  drivers/net/ethernet/intel/e1000/e1000_ethtool.o
  AR      drivers/i2c/busses/built-in.a
  CC      fs/btrfs/raid56.o
  CC [M]  drivers/md/persistent-data/dm-block-manager.o
  CC      drivers/acpi/acpica/utstring.o
  CC      arch/x86/kernel/kvmclock.o
  LD [M]  drivers/i2c/busses/i2c-designware-pci.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_82599.o
  AR      drivers/net/ethernet/socionext/built-in.a
  AR      drivers/net/ethernet/vertexcom/built-in.a
  AR      drivers/net/ethernet/wangxun/built-in.a
  CC      net/ipv4/fib_frontend.o
  AR      drivers/net/ethernet/xilinx/built-in.a
  CC [M]  drivers/i2c/i2c-smbus.o
  CC [M]  drivers/i2c/i2c-mux.o
  CC      net/ipv4/fib_semantics.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_82598.o
  GEN     xe_wa_oob.c xe_wa_oob.h
  GEN     xe_wa_oob.c xe_wa_oob.h
  CC [M]  drivers/gpu/drm/xe/xe_guc_ads.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/ioctl.o
  CC [M]  drivers/net/ethernet/intel/e1000e/mac.o
  CC      arch/x86/kernel/paravirt.o
  CC      drivers/thermal/gov_user_space.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.o
  CC [M]  drivers/net/ethernet/intel/igbvf/mbx.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_i225.o
  CC      lib/debug_info.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_sync.o
  CC      mm/memory-tiers.o
  CC [M]  drivers/md/persistent-data/dm-space-map-common.o
  CC      drivers/acpi/acpica/utstrsuppt.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_base.o
  CC      net/ipv6/xfrm6_protocol.o
  CC [M]  fs/smb/client/smb2inode.o
  CC      kernel/uid16.o
  CC [M]  drivers/md/persistent-data/dm-space-map-disk.o
  CC      arch/x86/kernel/pvclock.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_nvm.o
  AR      drivers/thermal/built-in.a
  CC      mm/migrate_device.o
  CC      arch/x86/kernel/pcspeaker.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_ct.o
  CC      drivers/acpi/acpica/utstrtoul64.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_phy.o
  CC [M]  net/bluetooth/amp.o
  CC      net/ipv6/netfilter.o
  CC [M]  fs/smb/client/smb2file.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_db_mgr.o
  CC [M]  drivers/md/persistent-data/dm-space-map-metadata.o
  CC [M]  drivers/net/ethernet/intel/igbvf/ethtool.o
  AR      drivers/i2c/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_guc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_hwconfig.o
  CC      lib/iomap.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/memory.o
  CC      lib/pci_iomap.o
  CC [M]  drivers/net/ethernet/realtek/r8169_main.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_nvm.o
  CC [M]  drivers/net/ethernet/intel/igb/e1000_mbx.o
  CC [M]  drivers/md/persistent-data/dm-transaction-manager.o
  CC      arch/x86/kernel/check.o
  CC      drivers/acpi/acpica/utxface.o
  CC      kernel/kallsyms.o
  CC [M]  net/bluetooth/hci_debugfs.o
  CC      drivers/opp/core.o
  CC      kernel/acct.o
  CC      mm/huge_memory.o
  CC [M]  drivers/md/persistent-data/dm-btree.o
  CC      fs/btrfs/uuid-tree.o
  CC      fs/btrfs/props.o
  CC [M]  drivers/net/ethernet/intel/e1000/e1000_param.o
  CC      drivers/cpufreq/cpufreq.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_phy.o
  CC [M]  drivers/gpu/drm/i915/vlv_sideband.o
  CC [M]  drivers/net/ethernet/intel/e1000e/manage.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.o
  CC      kernel/crash_core.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/mm.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_log.o
  CC      kernel/compat.o
  CC      lib/iomap_copy.o
  CC      drivers/acpi/acpica/utxfinit.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.o
  CC [M]  drivers/net/ethernet/realtek/r8169_firmware.o
  CC      drivers/cpufreq/freq_table.o
  CC [M]  fs/smb/client/cifsacl.o
  CC      arch/x86/kernel/uprobes.o
  CC [M]  drivers/net/ethernet/intel/igbvf/netdev.o
  AR      drivers/net/ethernet/synopsys/built-in.a
  AR      drivers/net/ethernet/pensando/built-in.a
  CC [M]  drivers/net/ethernet/intel/igb/e1000_i210.o
  CC      lib/devres.o
  CC      net/ipv6/fib6_rules.o
  CC      drivers/opp/cpu.o
  CC      mm/khugepaged.o
  CC      drivers/md/md-bitmap.o
  CC      lib/check_signature.o
  CC [M]  drivers/net/ethernet/intel/igb/igb_ptp.o
  CC [M]  drivers/net/ethernet/intel/igb/igb_hwmon.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_x540.o
  CC      drivers/acpi/acpica/utxferror.o
  CC      net/ipv4/fib_trie.o
  CC [M]  drivers/gpu/drm/i915/vlv_suspend.o
  CC      net/ipv6/proc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/object.o
  CC      drivers/md/md-autodetect.o
  CC [M]  fs/smb/client/fs_context.o
  CC [M]  drivers/md/persistent-data/dm-btree-remove.o
  CC      drivers/opp/debugfs.o
  CC      arch/x86/kernel/perf_regs.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_pc.o
  CC      drivers/acpi/acpica/utxfmutex.o
  CC      drivers/cpufreq/cpufreq_performance.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/vf.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_preempt_mgr.o
  CC      lib/interval_tree.o
  CC      kernel/utsname.o
  CC      net/ipv4/fib_notifier.o
  CC      net/ipv4/inet_fragment.o
  CC [M]  drivers/net/ethernet/intel/e1000e/nvm.o
  CC      fs/btrfs/free-space-tree.o
  CC      kernel/user_namespace.o
  CC      drivers/md/dm-uevent.o
  CC      fs/btrfs/tree-checker.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/oproxy.o
  CC      fs/btrfs/space-info.o
  CC [M]  drivers/md/persistent-data/dm-btree-spine.o
  LD [M]  drivers/net/ethernet/intel/e1000/e1000.o
  CC      drivers/md/dm.o
  CC      drivers/cpufreq/cpufreq_ondemand.o
  CC      lib/assoc_array.o
  CC      lib/list_debug.o
  LD [M]  net/bluetooth/bluetooth.o
  AR      drivers/acpi/acpica/built-in.a
  CC      drivers/acpi/processor_core.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_phy.o
  AR      drivers/opp/built-in.a
  CC      drivers/cpuidle/governors/menu.o
  CC      drivers/cpuidle/cpuidle.o
  CC      drivers/cpufreq/cpufreq_governor.o
  CC      arch/x86/kernel/tracepoint.o
  CC      drivers/cpuidle/driver.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_diag.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_x550.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/option.o
  CC      drivers/cpuidle/governors/haltpoll.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/ramht.o
  CC      fs/btrfs/block-rsv.o
  CC      fs/btrfs/delalloc-space.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_ethtool.o
  CC      drivers/mmc/core/core.o
  AR      drivers/ufs/built-in.a
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_lib.o
  CC      drivers/mmc/host/sdhci.o
  CC [M]  drivers/gpu/drm/i915/soc/intel_dram.o
  CC      drivers/mmc/host/sdhci-pci-core.o
  LD [M]  drivers/md/persistent-data/dm-persistent-data.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.o
  CC      fs/inode.o
  CC      drivers/cpufreq/cpufreq_governor_attr_set.o
  CC      net/ipv6/syncookies.o
  CC      net/ipv6/mip6.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_submit.o
  CC      drivers/mmc/core/bus.o
  CC      arch/x86/kernel/itmt.o
  CC      drivers/acpi/processor_pdc.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/mbx.o
  LD [M]  drivers/net/ethernet/intel/igb/igb.o
  CC      kernel/pid_namespace.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/subdev.o
  CC      drivers/mmc/core/host.o
  CC      lib/debugobjects.o
  CC      net/ipv4/ping.o
  CC      fs/attr.o
  CC [M]  drivers/net/ethernet/intel/e1000e/phy.o
  CC      fs/btrfs/block-group.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.o
  CC [M]  drivers/net/ethernet/realtek/r8169_phy_config.o
  CC [M]  fs/smb/client/dns_resolve.o
  LD [M]  drivers/net/ethernet/intel/igbvf/igbvf.o
  AR      drivers/net/ethernet/intel/built-in.a
  CC [M]  drivers/net/ethernet/intel/ixgbevf/ethtool.o
  AR      drivers/cpuidle/governors/built-in.a
  CC      drivers/cpuidle/governor.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.o
  CC      net/ipv4/ip_tunnel_core.o
  CC [M]  drivers/gpu/drm/drm_atomic_uapi.o
  CC      drivers/cpufreq/acpi-cpufreq.o
  CC      drivers/cpuidle/sysfs.o
  CC      drivers/mmc/host/sdhci-pci-o2micro.o
  CC      drivers/acpi/ec.o
  ASN.1   fs/smb/client/cifs_spnego_negtokeninit.asn1.[ch]
  CC      drivers/cpuidle/poll_state.o
  CC [M]  fs/smb/client/namespace.o
  CC      arch/x86/kernel/umip.o
  UPD     kernel/config_data
  CC [M]  drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.o
  CC      lib/bitrev.o
  CC      lib/crc16.o
  CC      lib/crc-t10dif.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.o
  CC [M]  drivers/gpu/drm/xe/xe_heci_gsc.o
  CC      drivers/cpuidle/cpuidle-haltpoll.o
  CC      kernel/stop_machine.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine.o
  CC      fs/btrfs/discard.o
  CC      drivers/mmc/core/mmc.o
  CC [M]  drivers/gpu/drm/i915/soc/intel_gmch.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/core/uevent.o
  HOSTCC  lib/gen_crc32table
  CC      net/ipv6/addrconf_core.o
  CC      net/ipv6/exthdrs_core.o
  CC      kernel/kprobes.o
  CC      lib/libcrc32c.o
  CC      net/ipv6/ip6_checksum.o
  CC [M]  drivers/gpu/drm/i915/soc/intel_pch.o
  LD [M]  drivers/net/ethernet/realtek/r8169.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_virt.o
  CC      fs/btrfs/reflink.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/fw.o
  CC      net/ipv6/ip6_icmp.o
  CC      fs/btrfs/subpage.o
  CC [M]  fs/smb/client/smb1ops.o
  CC      net/ipv4/gre_offload.o
  CC      arch/x86/kernel/unwind_orc.o
  CC      mm/page_counter.o
  CC      mm/memcontrol.o
  CC      drivers/md/dm-table.o
  CC      lib/xxhash.o
  CC [M]  drivers/net/ethernet/intel/ixgbevf/ipsec.o
  CC      drivers/cpufreq/intel_pstate.o
  AR      drivers/cpuidle/built-in.a
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82598.o
  CC [M]  drivers/net/ethernet/intel/e1000e/param.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_ptp.o
  CC      drivers/mmc/host/sdhci-pci-arasan.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.o
  CC      mm/vmpressure.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.o
  CC      net/ipv4/metrics.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_dump.o
  CC      drivers/mmc/core/mmc_ops.o
  CC      drivers/acpi/dock.o
  CC      arch/x86/kernel/callthunks.o
  CC      lib/genalloc.o
  CC [M]  drivers/gpu/drm/drm_auth.o
  CC      arch/x86/kernel/cet.o
  CC [M]  fs/smb/client/cifssmb.o
  CC      net/ipv4/netlink.o
  CC      fs/bad_inode.o
  CC      fs/file.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_tsn.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.o
  CC [M]  drivers/gpu/drm/drm_blend.o
  CC [M]  drivers/net/ethernet/intel/e1000e/ethtool.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/hs.o
  CC      kernel/hung_task.o
  CC [M]  fs/smb/client/cifs_spnego_negtokeninit.asn1.o
  CC [M]  drivers/net/ethernet/intel/igc/igc_xdp.o
  CC      net/ipv6/output_core.o
  CC      net/ipv6/protocol.o
  CC [M]  drivers/gpu/drm/i915/i915_memcpy.o
  AR      drivers/leds/trigger/built-in.a
  CC [M]  drivers/leds/trigger/ledtrig-audio.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_fence.o
  AR      drivers/leds/blink/built-in.a
  CC [M]  drivers/gpu/drm/i915/i915_mm.o
  CC [M]  drivers/net/ethernet/intel/e1000e/netdev.o
  CC      fs/filesystems.o
  CC      drivers/mmc/host/sdhci-pci-dwc-mshc.o
  CC      net/ipv6/ip6_offload.o
  AR      drivers/firmware/arm_ffa/built-in.a
  CC [M]  fs/smb/client/asn1.o
  AR      drivers/firmware/arm_scmi/built-in.a
  CC      drivers/acpi/pci_root.o
  CC      arch/x86/kernel/mmconf-fam10h_64.o
  AR      drivers/firmware/broadcom/built-in.a
  AR      drivers/crypto/stm32/built-in.a
  CC      fs/namespace.o
  AR      drivers/crypto/xilinx/built-in.a
  AR      drivers/firmware/cirrus/built-in.a
  AR      drivers/crypto/hisilicon/built-in.a
  CC [M]  drivers/gpu/drm/drm_bridge.o
  AR      drivers/firmware/meson/built-in.a
  CC [M]  drivers/gpu/drm/drm_cache.o
  AR      drivers/crypto/intel/keembay/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.o
  AR      drivers/crypto/intel/ixp4xx/built-in.a
  AR      drivers/crypto/intel/built-in.a
  AR      drivers/firmware/imx/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vf_error.o
  AR      drivers/crypto/starfive/built-in.a
  AR      drivers/crypto/built-in.a
  CC      lib/percpu_counter.o
  CC      lib/fault-inject.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_sched.o
  CC      drivers/clocksource/acpi_pm.o
  CC      drivers/firmware/efi/libstub/efi-stub-helper.o
  CC      drivers/clocksource/i8253.o
  CC [M]  drivers/gpu/drm/drm_client.o
  CC      drivers/mmc/host/sdhci-pci-gli.o
  CC      drivers/mmc/core/sd.o
  AR      drivers/firmware/psci/built-in.a
  CC      net/ipv4/nexthop.o
  AR      drivers/leds/simple/built-in.a
  CC      drivers/leds/led-core.o
  CC [M]  drivers/gpu/drm/xe/xe_huc.o
  CC      net/ipv6/tcpv6_offload.o
  AR      drivers/firmware/qcom/built-in.a
  CC      drivers/firmware/efi/efi-bgrt.o
  CC      net/ipv4/udp_tunnel_stub.o
  CC      drivers/hid/usbhid/hid-core.o
  CC      drivers/mmc/host/sdhci-acpi.o
  CC      drivers/hid/usbhid/hiddev.o
  CC      drivers/md/dm-target.o
  AR      drivers/firmware/smccc/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/ls.o
  CC      net/ipv4/sysctl_net_ipv4.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/acr.o
  CC      kernel/watchdog.o
  CC [M]  drivers/gpu/drm/xe/xe_huc_debugfs.o
  CC      fs/seq_file.o
  LD [M]  drivers/net/ethernet/intel/igc/igc.o
  CC      drivers/mmc/host/cqhci-core.o
  CC      lib/syscall.o
  CC      arch/x86/kernel/vsmp_64.o
  AR      drivers/staging/media/built-in.a
  CC [M]  drivers/net/ethernet/intel/e100.o
  AR      drivers/staging/built-in.a
  CC      lib/dynamic_debug.o
  CC      fs/btrfs/tree-mod-log.o
  CC      fs/btrfs/extent-io-tree.o
  AR      drivers/firmware/tegra/built-in.a
  CC      net/ipv6/exthdrs_offload.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_sysfs.o
  CC [M]  drivers/gpu/drm/i915/i915_sw_fence.o
  AR      drivers/firmware/xilinx/built-in.a
  CC      drivers/firmware/dmi_scan.o
  AR      drivers/clocksource/built-in.a
  CC      drivers/firmware/dmi-sysfs.o
  AR      drivers/platform/x86/amd/built-in.a
  CC      drivers/platform/x86/intel/pmc/core.o
  CC      drivers/firmware/efi/libstub/gop.o
  AR      drivers/cpufreq/built-in.a
  CC [M]  drivers/platform/x86/intel/pmt/class.o
  AR      drivers/platform/surface/built-in.a
  CC      lib/errname.o
  CC      lib/nlattr.o
  CC      fs/xattr.o
  CC      drivers/acpi/pci_link.o
  CC [M]  drivers/gpu/drm/drm_client_modeset.o
  CC      drivers/platform/x86/p2sb.o
  CC      drivers/leds/led-class.o
  CC [M]  drivers/platform/x86/intel/pmt/telemetry.o
  CC      lib/checksum.o
  CC      drivers/hid/hid-core.o
  CC      drivers/md/dm-linear.o
  CC      lib/cpu_rmap.o
  CC [M]  drivers/gpu/drm/xe/xe_irq.o
  AR      arch/x86/kernel/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.o
  AR      arch/x86/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ids.o
  CC      drivers/md/dm-stripe.o
  CC [M]  drivers/mmc/host/sdhci-pltfm.o
  CC      net/ipv4/proc.o
  CC      net/ipv6/inet6_hashtables.o
  LD [M]  drivers/net/ethernet/intel/ixgbevf/ixgbevf.o
  CC      kernel/watchdog_perf.o
  CC      drivers/leds/led-triggers.o
  CC [M]  drivers/gpu/drm/i915/i915_sw_fence_work.o
  CC [M]  drivers/net/ethernet/intel/e1000e/ptp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/nvfw/flcn.o
  CC      net/ipv6/mcast_snoop.o
  CC [M]  drivers/gpu/drm/xe/xe_lrc.o
  CC      drivers/mmc/core/sd_ops.o
  CC      drivers/firmware/dmi-id.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.o
  CC      kernel/seccomp.o
  CC [M]  drivers/gpu/drm/i915/i915_syncmap.o
  CC [M]  net/ipv6/ip6_udp_tunnel.o
  CC [M]  drivers/platform/x86/intel/pmt/crashlog.o
  CC      drivers/firmware/efi/libstub/secureboot.o
  CC      drivers/platform/x86/pmc_atom.o
  CC      lib/dynamic_queue_limits.o
  LD [M]  drivers/platform/x86/intel/pmt/pmt_class.o
  LD [M]  drivers/platform/x86/intel/pmt/pmt_telemetry.o
  CC      drivers/firmware/memmap.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.o
  CC      lib/glob.o
  CC [M]  drivers/net/ethernet/intel/ixgbe/ixgbe_ipsec.o
  CC      net/ipv4/syncookies.o
  AR      drivers/hid/usbhid/built-in.a
  CC      fs/libfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/base.o
  CC      lib/strncpy_from_user.o
  CC      lib/strnlen_user.o
  CC      fs/btrfs/fs.o
  CC      drivers/mmc/core/sdio.o
  CC      drivers/acpi/pci_irq.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/cmdq.o
  CC [M]  drivers/gpu/drm/drm_color_mgmt.o
  AR      drivers/mmc/host/built-in.a
  CC      kernel/relay.o
  CC      kernel/utsname_sysctl.o
  AR      drivers/leds/built-in.a
  CC      drivers/md/dm-ioctl.o
  CC      drivers/mailbox/mailbox.o
  CC      drivers/devfreq/devfreq.o
  CC      drivers/mailbox/pcc.o
  CC [M]  drivers/gpu/drm/drm_connector.o
  CC      drivers/platform/x86/intel/pmc/core_ssram.o
  CC [M]  drivers/devfreq/governor_simpleondemand.o
  CC [M]  drivers/devfreq/governor_performance.o
  CC      kernel/delayacct.o
  LD [M]  drivers/platform/x86/intel/pmt/pmt_crashlog.o
  CC      drivers/firmware/efi/libstub/tpm.o
  CC      net/ipv4/esp4.o
  CC      kernel/taskstats.o
  CC      drivers/acpi/acpi_lpss.o
  CC      fs/fs-writeback.o
  CC      drivers/md/dm-io.o
  CC      drivers/platform/x86/intel/turbo_max_3.o
  CC      drivers/md/dm-kcopyd.o
  CC      lib/net_utils.o
  CC [M]  drivers/platform/x86/wmi.o
  CC [M]  drivers/gpu/drm/i915/i915_user_extensions.o
  CC      drivers/firmware/efi/libstub/file.o
  CC      drivers/firmware/efi/libstub/mem.o
  CC [M]  drivers/gpu/drm/xe/xe_migrate.o
  CC      fs/btrfs/messages.o
  CC [M]  drivers/gpu/drm/i915/i915_ioc32.o
  CC      net/ipv4/esp4_offload.o
  CC      fs/pnode.o
  CC [M]  drivers/gpu/drm/i915/i915_debugfs.o
  CC      drivers/mmc/core/sdio_ops.o
  CC [M]  drivers/gpu/drm/xe/xe_mmio.o
  CC [M]  drivers/gpu/drm/xe/xe_mocs.o
  AR      net/ipv6/built-in.a
  CC      fs/btrfs/bio.o
  CC      drivers/mmc/core/sdio_bus.o
  CC [M]  drivers/platform/x86/wmi-bmof.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/fw.o
  CC      drivers/mmc/core/sdio_cis.o
  CC      fs/btrfs/lru_cache.o
  CC      drivers/platform/x86/intel/pmc/spt.o
  CC      drivers/acpi/acpi_apd.o
  CC      drivers/hid/hid-input.o
  LD [M]  fs/smb/client/cifs.o
  CC      lib/sg_pool.o
  CC      drivers/platform/x86/intel/pmc/cnp.o
  AR      drivers/mailbox/built-in.a
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_mmhub.o
  CC      drivers/powercap/powercap_sys.o
  CC      drivers/firmware/efi/libstub/random.o
  CC      drivers/mmc/core/sdio_io.o
  CC      drivers/hid/hid-quirks.o
  CC      drivers/platform/x86/intel/pmc/icl.o
  CC      net/ipv4/netfilter.o
  CC      drivers/powercap/intel_rapl_common.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_hdp.o
  CC      drivers/firmware/efi/libstub/randomalloc.o
  CC      drivers/acpi/acpi_platform.o
  CC      drivers/md/dm-sysfs.o
  CC      drivers/firmware/efi/libstub/pci.o
  CC      fs/splice.o
  CC      kernel/tsacct.o
  LD [M]  drivers/net/ethernet/intel/ixgbe/ixgbe.o
  CC      fs/btrfs/raid-stripe-tree.o
  CC      drivers/md/dm-stats.o
  AR      drivers/perf/built-in.a
  CC      drivers/firmware/efi/libstub/skip_spaces.o
  CC      drivers/md/dm-rq.o
  CC [M]  drivers/gpu/drm/i915/i915_debugfs_params.o
  CC [M]  drivers/gpu/drm/drm_crtc.o
  CC [M]  drivers/gpu/drm/drm_displayid.o
  CC      drivers/acpi/acpi_pnp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.o
  CC      drivers/acpi/power.o
  CC      lib/stackdepot.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_csa.o
  CC [M]  drivers/gpu/drm/drm_drv.o
  CC      drivers/platform/x86/intel/pmc/tgl.o
  CC [M]  drivers/gpu/drm/i915/i915_pmu.o
  CC [M]  drivers/gpu/drm/drm_dumb_buffers.o
  CC      drivers/mmc/core/sdio_irq.o
  CC [M]  drivers/platform/x86/mxm-wmi.o
  AR      drivers/devfreq/built-in.a
  CC      drivers/platform/x86/intel/pmc/adl.o
  CC      lib/ucs2_string.o
  CC      fs/btrfs/acl.o
  CC [M]  drivers/gpu/drm/xe/xe_module.o
  CC      drivers/ras/ras.o
  CC      lib/sbitmap.o
  CC [M]  drivers/gpu/drm/i915/gt/gen2_engine_cs.o
  CC      drivers/ras/debugfs.o
  CC      mm/swap_cgroup.o
  CC      drivers/firmware/efi/efi.o
  CC      fs/sync.o
  CC      drivers/acpi/event.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/msgq.o
  CC      drivers/powercap/intel_rapl_msr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ras.o
  CC      drivers/firmware/efi/libstub/lib-cmdline.o
  CC      drivers/hid/hid-debug.o
  CC      kernel/tracepoint.o
  CC      drivers/md/dm-io-rewind.o
  CC      drivers/firmware/efi/libstub/lib-ctype.o
  CC      drivers/firmware/efi/libstub/alignedmem.o
  CC [M]  drivers/gpu/drm/drm_edid.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/qmgr.o
  LD [M]  drivers/net/ethernet/intel/e1000e/e1000e.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vm_sdma.o
  CC      drivers/acpi/evged.o
  CC      drivers/md/dm-builtin.o
  AR      drivers/net/ethernet/built-in.a
  CC      net/ipv4/inet_diag.o
  CC      net/ipv4/tcp_diag.o
  CC [M]  drivers/gpu/drm/i915/gt/gen6_engine_cs.o
  CC      drivers/hid/hidraw.o
  CC      drivers/platform/x86/intel/pmc/mtl.o
  CC      drivers/platform/x86/intel/pmc/pltdrv.o
  CC [M]  drivers/md/dm-bufio.o
  AR      drivers/net/built-in.a
  CC      net/ipv4/udp_diag.o
  CC [M]  drivers/platform/x86/intel/vsec.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.o
  CC      kernel/latencytop.o
  CC      kernel/irq_work.o
  CC      drivers/mmc/core/slot-gpio.o
  CC      kernel/static_call.o
  AR      drivers/hwtracing/intel_th/built-in.a
  CC      mm/hugetlb_cgroup.o
  CC      mm/kmemleak.o
  CC      kernel/static_call_inline.o
  CC      drivers/mmc/core/regulator.o
  CC [M]  drivers/gpu/drm/drm_eld.o
  CC      mm/page_isolation.o
  CC      drivers/acpi/sysfs.o
  AR      drivers/powercap/built-in.a
  CC [M]  drivers/gpu/drm/i915/gt/gen6_ppgtt.o
  CC [M]  drivers/md/dm-bio-prison-v1.o
  CC      lib/group_cpus.o
  CC      drivers/firmware/efi/libstub/relocate.o
  CC [M]  drivers/gpu/drm/xe/xe_pat.o
  CC      drivers/mmc/core/debugfs.o
  AR      drivers/ras/built-in.a
  CC [M]  drivers/platform/x86/intel/rst.o
  CC [M]  drivers/md/dm-bio-prison-v2.o
  CC      drivers/firmware/efi/libstub/printk.o
  AR      fs/btrfs/built-in.a
  CC      fs/utimes.o
  CC      fs/d_path.o
  CC      drivers/firmware/efi/libstub/vsprintf.o
  CC [M]  drivers/gpu/drm/xe/xe_pci.o
  CC      mm/early_ioremap.o
  CC [M]  drivers/gpu/drm/xe/xe_pcode.o
  CC      fs/stack.o
  CC [M]  drivers/md/dm-crypt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/v1.o
  AR      drivers/platform/x86/intel/pmc/built-in.a
  CC      lib/fw_table.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/gm200.o
  CC      drivers/firmware/efi/libstub/x86-stub.o
  CC      drivers/android/binderfs.o
  AR      drivers/nvmem/layouts/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_pm.o
  CC      drivers/nvmem/core.o
  CC [M]  drivers/gpu/drm/xe/xe_preempt_fence.o
  CC [M]  drivers/gpu/drm/xe/xe_pt.o
  CC [M]  drivers/md/dm-thin.o
  CC [M]  drivers/gpu/drm/xe/xe_pt_walk.o
  CC      drivers/firmware/efi/libstub/x86-5lvl.o
  STUBCPY drivers/firmware/efi/libstub/alignedmem.stub.o
  CC      drivers/mmc/core/block.o
  STUBCPY drivers/firmware/efi/libstub/efi-stub-helper.stub.o
  CC      kernel/user-return-notifier.o
  CC [M]  drivers/mtd/chips/chipreg.o
  CC      kernel/padata.o
  CC      drivers/hid/hid-generic.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ras_eeprom.o
  CC      drivers/firmware/efi/vars.o
  STUBCPY drivers/firmware/efi/libstub/file.stub.o
  CC [M]  lib/asn1_decoder.o
  STUBCPY drivers/firmware/efi/libstub/gop.stub.o
  AR      drivers/platform/x86/intel/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_query.o
  CC      drivers/firmware/efi/reboot.o
  LD [M]  drivers/platform/x86/intel/intel_vsec.o
  CC      drivers/firmware/efi/memattr.o
  LD [M]  drivers/platform/x86/intel/intel-rst.o
  CC [M]  drivers/gpu/drm/i915/gt/gen7_renderclear.o
  CC [M]  drivers/platform/x86/intel_ips.o
  CC [M]  drivers/gpu/drm/drm_encoder.o
  CC      drivers/mmc/core/queue.o
  GEN     lib/oid_registry_data.c
  CC [M]  drivers/gpu/drm/i915/gt/gen8_engine_cs.o
  STUBCPY drivers/firmware/efi/libstub/lib-cmdline.stub.o
  CC [M]  lib/oid_registry.o
  CC      drivers/acpi/property.o
  STUBCPY drivers/firmware/efi/libstub/lib-ctype.stub.o
  STUBCPY drivers/firmware/efi/libstub/mem.stub.o
  STUBCPY drivers/firmware/efi/libstub/pci.stub.o
  STUBCPY drivers/firmware/efi/libstub/printk.stub.o
  STUBCPY drivers/firmware/efi/libstub/random.stub.o
  CC [M]  drivers/md/dm-thin-metadata.o
  STUBCPY drivers/firmware/efi/libstub/randomalloc.stub.o
  CC      drivers/firmware/efi/tpm.o
  CC [M]  drivers/gpu/drm/xe/xe_range_fence.o
  CC      mm/cma.o
  CC      drivers/hid/hid-a4tech.o
  CC [M]  drivers/gpu/drm/drm_file.o
  CC      drivers/hid/hid-apple.o
  CC      kernel/jump_label.o
  CC      drivers/firmware/efi/memmap.o
  CC      mm/secretmem.o
  STUBCPY drivers/firmware/efi/libstub/relocate.stub.o
  CC      fs/fs_struct.o
  CC      mm/userfaultfd.o
  CC      mm/memremap.o
  CC [M]  drivers/mtd/mtdcore.o
  STUBCPY drivers/firmware/efi/libstub/secureboot.stub.o
  CC      drivers/android/binder.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/gp102.o
  CC      net/ipv4/tcp_cubic.o
  STUBCPY drivers/firmware/efi/libstub/skip_spaces.stub.o
  STUBCPY drivers/firmware/efi/libstub/tpm.stub.o
  CC      kernel/context_tracking.o
  STUBCPY drivers/firmware/efi/libstub/vsprintf.stub.o
  CC      mm/hmm.o
  STUBCPY drivers/firmware/efi/libstub/x86-5lvl.stub.o
  STUBCPY drivers/firmware/efi/libstub/x86-stub.stub.o
  AR      lib/lib.a
  CC      drivers/firmware/efi/esrt.o
  AR      drivers/firmware/efi/libstub/lib.a
  CC      net/ipv4/xfrm4_policy.o
  CC      net/ipv4/xfrm4_state.o
  CC      net/ipv4/xfrm4_input.o
  CC      mm/memfd.o
  CC      net/ipv4/xfrm4_output.o
  CC      fs/statfs.o
  CC [M]  drivers/gpu/drm/drm_fourcc.o
  GEN     lib/crc32table.h
  CC [M]  drivers/uio/uio.o
  CC [M]  drivers/gpu/drm/drm_framebuffer.o
  CC      lib/crc32.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/tu102.o
  CC [M]  drivers/gpu/drm/i915/gt/gen8_ppgtt.o
  AR      drivers/nvmem/built-in.a
  CC [M]  drivers/gpu/drm/drm_gem.o
  CC [M]  drivers/vfio/pci/vfio_pci_core.o
  CC [M]  drivers/gpu/drm/drm_ioctl.o
  CC [M]  drivers/vfio/pci/vfio_pci_intrs.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_breadcrumbs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_nbio.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_sr.o
  CC      kernel/iomem.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_umc.o
  AR      drivers/platform/x86/built-in.a
  CC      drivers/hid/hid-belkin.o
  AR      drivers/platform/built-in.a
  CC      drivers/hid/hid-cherry.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_context.o
  CC      drivers/firmware/efi/efi-pstore.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_context_sseu.o
  CC [M]  drivers/vfio/pci/vfio_pci_rdwr.o
  CC      fs/fs_pin.o
  CC      drivers/acpi/acpi_cmos_rtc.o
  CC      fs/nsfs.o
  LD [M]  drivers/md/dm-bio-prison.o
  CC      fs/fs_types.o
  CC      fs/fs_context.o
  CC      drivers/acpi/x86/apple.o
  CC [M]  drivers/gpu/drm/drm_lease.o
  CC      drivers/firmware/efi/cper.o
  AR      lib/built-in.a
  CC      drivers/firmware/efi/cper_cxl.o
  AR      drivers/md/built-in.a
  CC [M]  drivers/vfio/pci/vfio_pci_config.o
  CC [M]  drivers/vfio/pci/vfio_pci.o
  CC      mm/bootmem_info.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_engine_cs.o
  CC [M]  drivers/mtd/mtdsuper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/ga100.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_engine_heartbeat.o
  CC      drivers/firmware/efi/runtime-wrappers.o
  CC [M]  drivers/gpu/drm/drm_managed.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_engine_pm.o
  AR      drivers/mmc/core/built-in.a
  AR      drivers/mmc/built-in.a
  CC [M]  drivers/pps/pps.o
  CC [M]  drivers/pps/kapi.o
  CC [M]  drivers/pps/sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_whitelist.o
  CC      kernel/rseq.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/falcon/ga102.o
  CC [M]  drivers/gpu/drm/drm_mm.o
  CC      drivers/firmware/efi/dev-path-parser.o
  CC      drivers/hid/hid-chicony.o
  CC      drivers/hid/hid-cypress.o
  CC [M]  drivers/bluetooth/btusb.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smu_v11_0_i2c.o
  CC      net/ipv4/xfrm4_protocol.o
  CC      fs/fs_parser.o
  CC      drivers/hid/hid-ezkey.o
  CC [M]  drivers/bluetooth/btintel.o
  CC [M]  drivers/bluetooth/btbcm.o
  CC      drivers/firmware/efi/apple-properties.o
  CC [M]  drivers/bluetooth/btrtl.o
  CC      fs/fsopen.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.o
  CC      drivers/firmware/efi/earlycon.o
  CC [M]  net/ipv4/ip_tunnel.o
  CC      drivers/acpi/x86/utils.o
  CC [M]  net/ipv4/udp_tunnel_core.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/base.o
  AR      mm/built-in.a
  CC [M]  drivers/gpu/drm/drm_mode_config.o
  CC [M]  drivers/gpu/drm/drm_mode_object.o
  CC [M]  drivers/dca/dca-core.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_engine_user.o
  CC [M]  drivers/ssb/main.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_execlists_submission.o
  CC      drivers/hid/hid-kensington.o
  CC [M]  drivers/mtd/mtdconcat.o
  CC [M]  drivers/gpu/drm/drm_modes.o
  CC      drivers/acpi/x86/s2idle.o
  LD [M]  drivers/md/dm-thin-pool.o
  CC [M]  drivers/gpu/drm/xe/xe_rtp.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ggtt.o
  CC [M]  drivers/gpu/drm/xe/xe_ring_ops.o
  CC      drivers/hid/hid-lg.o
  CC      drivers/hid/hid-lg-g15.o
  LD [M]  drivers/pps/pps_core.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ggtt_fencing.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.o
  CC      fs/init.o
  CC [M]  drivers/mtd/mtdpart.o
  CC      drivers/android/binder_alloc.o
  CC      fs/kernel_read_file.o
  CC [M]  drivers/dca/dca-sysfs.o
  CC [M]  drivers/gpu/drm/drm_modeset_lock.o
  CC      drivers/hid/hid-microsoft.o
  CC      drivers/acpi/debugfs.o
  CC      drivers/hid/hid-monterey.o
  GZIP    kernel/config_data.gz
  CC [M]  drivers/vhost/net.o
  CC      kernel/configs.o
  CC      drivers/firmware/efi/cper-x86.o
  CC [M]  drivers/vhost/vhost.o
  LD [M]  drivers/vfio/pci/vfio-pci.o
  LD [M]  drivers/vfio/pci/vfio-pci-core.o
  CC [M]  drivers/vfio/vfio_main.o
  CC      fs/mnt_idmapping.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_clock_utils.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_debugfs.o
  CC [M]  drivers/gpu/drm/drm_plane.o
  CC [M]  net/ipv4/udp_tunnel_nic.o
  CC [M]  drivers/gpu/drm/drm_prime.o
  CC [M]  drivers/gpu/drm/drm_print.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_rap.o
  CC      fs/remap_range.o
  CC [M]  drivers/gpu/drm/drm_property.o
  CC [M]  drivers/gpu/drm/drm_syncobj.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/lsfw.o
  CC [M]  drivers/ssb/scan.o
  AR      kernel/built-in.a
  LD [M]  drivers/dca/dca.o
  CC [M]  drivers/ssb/sprom.o
  CC      fs/buffer.o
  CC      drivers/acpi/acpi_lpat.o
  CC [M]  drivers/ssb/pci.o
  CC      drivers/acpi/acpi_lpit.o
  CC [M]  drivers/ssb/pcihost_wrapper.o
  CC [M]  drivers/mtd/mtdchar.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_fw_attestation.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_securedisplay.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_irq.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.o
  CC [M]  drivers/gpu/drm/xe/xe_sa.o
  CC [M]  drivers/gpu/drm/xe/xe_sched_job.o
  CC [M]  drivers/gpu/drm/drm_sysfs.o
  CC      fs/mpage.o
  AR      drivers/firmware/efi/built-in.a
  CC [M]  drivers/gpu/drm/drm_trace_points.o
  AR      drivers/firmware/built-in.a
  CC [M]  drivers/gpu/drm/drm_vblank.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_mcr.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_pm.o
  CC      drivers/acpi/prmt.o
  AR      drivers/hid/built-in.a
  CC [M]  drivers/vhost/iotlb.o
  CC [M]  drivers/gpu/drm/drm_vblank_work.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_pm_irq.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_requests.o
  CC [M]  drivers/gpu/drm/drm_vma_manager.o
  CC      drivers/acpi/acpi_pcc.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_sysfs.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.o
  CC [M]  drivers/ssb/driver_chipcommon.o
  CC [M]  drivers/ssb/driver_chipcommon_pmu.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gtt.o
  CC [M]  drivers/gpu/drm/drm_writeback.o
  CC [M]  drivers/ssb/driver_pcicore.o
  CC [M]  drivers/gpu/drm/lib/drm_random.o
  CC [M]  drivers/gpu/drm/xe/xe_step.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_llc.o
  CC      fs/proc_namespace.o
  CC [M]  drivers/gpu/drm/drm_ioc32.o
  CC [M]  drivers/vfio/group.o
  CC [M]  drivers/gpu/drm/xe/xe_sync.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm200.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_lrc.o
  CC [M]  drivers/vfio/container.o
  CC      drivers/acpi/ac.o
  CC [M]  drivers/gpu/drm/drm_panel.o
  LD [M]  drivers/vhost/vhost_iotlb.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_migrate.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gm20b.o
  CC      fs/direct-io.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_mca.o
  CC [M]  drivers/gpu/drm/drm_pci.o
  CC [M]  drivers/vfio/virqfd.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_psp_ta.o
  CC      drivers/acpi/button.o
  CC [M]  drivers/gpu/drm/xe/xe_tile.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp108.o
  CC [M]  drivers/gpu/drm/drm_debugfs.o
  LD [M]  drivers/mtd/mtd.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gv100.o
  CC      drivers/acpi/fan_core.o
  CC [M]  drivers/gpu/drm/drm_debugfs_crc.o
  AR      net/ipv4/built-in.a
  CC [M]  drivers/gpu/drm/drm_edid_load.o
  LD [M]  net/ipv4/udp_tunnel.o
  AR      net/built-in.a
  CC      fs/eventpoll.o
  CC      fs/anon_inodes.o
  CC [M]  drivers/vfio/vfio_iommu_type1.o
  LD [M]  drivers/vhost/vhost_net.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_mocs.o
  CC      fs/signalfd.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ppgtt.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_rc6.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_region_lmem.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_renderstate.o
  CC [M]  drivers/gpu/drm/xe/xe_tile_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_trace.o
  CC      drivers/acpi/fan_attr.o
  CC      drivers/acpi/processor_driver.o
  LD [M]  drivers/ssb/ssb.o
  CC [M]  drivers/gpu/drm/drm_panel_orientation_quirks.o
  CC [M]  drivers/gpu/drm/drm_exec.o
  CC      drivers/acpi/processor_thermal.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_reset.o
  CC [M]  drivers/gpu/drm/drm_gpuvm.o
  CC      drivers/acpi/processor_idle.o
  CC      drivers/acpi/processor_throttling.o
  AR      drivers/android/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/gp10b.o
  CC [M]  drivers/gpu/drm/drm_buddy.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ring.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ring_submission.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_rps.o
  LD [M]  drivers/vfio/vfio.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/tu102.o
  CC      drivers/acpi/processor_perflib.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga100.o
  CC      fs/timerfd.o
  CC [M]  drivers/gpu/drm/drm_gem_shmem_helper.o
  CC      drivers/acpi/container.o
  CC [M]  drivers/gpu/drm/drm_suballoc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/acr/ga102.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
  CC      drivers/acpi/thermal.o
  CC      fs/eventfd.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/nv50.o
  CC [M]  drivers/gpu/drm/drm_gem_ttm_helper.o
  CC      drivers/acpi/acpi_memhotplug.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_lsdma.o
  CC      drivers/acpi/ioapic.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/g84.o
  CC [M]  drivers/gpu/drm/drm_atomic_helper.o
  CC      fs/userfaultfd.o
  CC [M]  drivers/gpu/drm/drm_atomic_state_helper.o
  CC      fs/aio.o
  CC [M]  drivers/gpu/drm/drm_bridge_connector.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/gf100.o
  CC      fs/locks.o
  CC      drivers/acpi/battery.o
  CC [M]  drivers/gpu/drm/drm_crtc_helper.o
  CC      fs/binfmt_script.o
  CC      drivers/acpi/hed.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/gk20a.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_sa_media.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_sseu.o
  CC      drivers/acpi/bgrt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm107.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_sseu_debugfs.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_timeline.o
  CC      fs/binfmt_elf.o
  CC [M]  drivers/gpu/drm/drm_damage_helper.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_tlb.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/gm20b.o
  CC [M]  drivers/gpu/drm/drm_encoder_slave.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
  CC      fs/compat_binfmt_elf.o
  CC      fs/mbcache.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/tu102.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_wopcm.o
  CC      fs/posix_acl.o
  CC      drivers/acpi/cppc_acpi.o
  CC [M]  drivers/gpu/drm/drm_flip_work.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ring_mux.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_xcp.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_workarounds.o
  CC      fs/coredump.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_seq64.o
  CC      fs/drop_caches.o
  CC [M]  drivers/gpu/drm/i915/gt/shmem_utils.o
  CC [M]  drivers/gpu/drm/i915/gt/sysfs_engines.o
  CC [M]  drivers/gpu/drm/drm_format_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_fdinfo.o
  CC      drivers/acpi/spcr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bar/r535.o
  CC [M]  drivers/gpu/drm/drm_gem_atomic_helper.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_ggtt_gmch.o
  CC      drivers/acpi/acpi_pad.o
  CC      fs/sysctls.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/base.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_vram_mgr.o
  CC [M]  drivers/gpu/drm/drm_gem_framebuffer_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_pmu.o
  CC [M]  drivers/gpu/drm/drm_kms_helper_common.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/bit.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/boost.o
  CC      fs/fhandle.o
  CC [M]  drivers/gpu/drm/i915/gt/gen6_renderstate.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/conn.o
  CC [M]  drivers/gpu/drm/drm_modeset_helper.o
  CC [M]  drivers/gpu/drm/drm_plane_helper.o
  CC [M]  drivers/gpu/drm/drm_probe_helper.o
  CC [M]  drivers/gpu/drm/xe/xe_tuning.o
  CC [M]  drivers/gpu/drm/xe/xe_uc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/cstep.o
  CC [M]  drivers/acpi/acpi_video.o
  CC [M]  drivers/gpu/drm/i915/gt/gen7_renderstate.o
  CC [M]  drivers/gpu/drm/i915/gt/gen8_renderstate.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/dcb.o
  CC [M]  drivers/gpu/drm/drm_rect.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/disp.o
  CC [M]  drivers/gpu/drm/drm_self_refresh_helper.o
  CC [M]  drivers/gpu/drm/drm_simple_kms_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/cik.o
  CC [M]  drivers/acpi/video_detect.o
  CC [M]  drivers/gpu/drm/i915/gt/gen9_renderstate.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/dp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/cik_ih.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_busy.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/extdev.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_clflush.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/dce_v8_0.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_debugfs.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_context.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v7_0.o
  AR      drivers/acpi/built-in.a
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/fan.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/gpio.o
  CC [M]  drivers/gpu/drm/bridge/panel.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_fw.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_create.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_dmabuf.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_domain.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/cik_sdma.o
  CC [M]  drivers/gpu/drm/xe/xe_vm.o
  CC [M]  drivers/gpu/drm/drm_fbdev_generic.o
  CC [M]  drivers/gpu/drm/xe/xe_wait_user_fence.o
  CC [M]  drivers/gpu/drm/drm_fb_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v4_2.o
  CC [M]  drivers/gpu/drm/xe/xe_wa.o
  CC [M]  drivers/gpu/drm/xe/xe_wopcm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/i2c.o
  CC [M]  drivers/gpu/drm/xe/xe_hwmon.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/iccsense.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/image.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_relay.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_execbuffer.o
  LD [M]  drivers/gpu/drm/drm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/init.o
  LD [M]  drivers/gpu/drm/drm_shmem_helper.o
  LD [M]  drivers/gpu/drm/drm_suballoc_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vce_v2_0.o
  LD [M]  drivers/gpu/drm/drm_ttm_helper.o
  AR      drivers/gpu/drm/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_memirq.o
  CC [M]  drivers/gpu/drm/xe/xe_sriov.o
  AR      fs/built-in.a
  CC [M]  drivers/gpu/drm/xe/xe_lmtt.o
  CC [M]  drivers/gpu/drm/xe/xe_lmtt_2l.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/si.o
  CC [M]  drivers/gpu/drm/xe/xe_lmtt_ml.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/mxm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/npde.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/pcir.o
  CC [M]  drivers/gpu/drm/xe/xe_display.o
  CC [M]  drivers/gpu/drm/xe/display/xe_fb_pin.o
  CC [M]  drivers/gpu/drm/xe/display/xe_hdcp_gsc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/perf.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/pll.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/pmu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/power_budget.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/ramcfg.o
  CC [M]  drivers/gpu/drm/xe/display/xe_plane_initial.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v6_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/rammap.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display_rps.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowacpi.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display_misc.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_internal.o
  LD [M]  drivers/acpi/video.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowof.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowramin.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_lmem.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_mman.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_object.o
  CC [M]  drivers/gpu/drm/xe/display/xe_dsb_buffer.o
  CC [M]  drivers/gpu/drm/xe/display/intel_fbdev_fb.o
  CC [M]  drivers/gpu/drm/xe/display/intel_fb_bo.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_pages.o
  CC [M]  drivers/gpu/drm/xe/display/ext/i915_irq.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_phys.o
  CC [M]  drivers/gpu/drm/xe/display/ext/i915_utils.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v6_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowrom.o
  CC [M]  drivers/gpu/drm/xe/i915-soc/intel_dram.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/timing.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/therm.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_pm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/si_ih.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_region.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/vmap.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/volt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/vpstate.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/xpio.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/si_dma.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/M0203.o
  CC [M]  drivers/gpu/drm/xe/i915-soc/intel_pch.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/M0205.o
  CC [M]  drivers/gpu/drm/xe/i915-display/icl_dsi.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/nouveau/nvkm/subdev/bios/M0209.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bios/P0260.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/dce_v6_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/base.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_audio.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_backlight.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/hwsq.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_bios.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv04.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_shmem.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v3_1.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_bw.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv31.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/nv50.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_shrinker.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cdclk.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/g94.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_color.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_combo_phy.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_stolen.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/bus/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_connector.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv40.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_throttle.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_tiling.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/nv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/g84.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mxgpu_vi.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_ttm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_crtc.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_ttm_move.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/mcp77.o
  LD [M]  drivers/gpu/drm/drm_kms_helper.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk20a.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_crtc_state_dump.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/gm20b.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cursor.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v6_1.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/pllnv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/clk/pllgt215.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/soc15.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv05.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/emu_soc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv10.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mxgpu_ai.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cx0_phy.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_userptr.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_ddi.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gem_wait.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_ddi_buf_trans.o
  CC [M]  drivers/gpu/drm/i915/gem/i915_gemfs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display.o
  CC [M]  drivers/gpu/drm/i915/i915_active.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv1a.o
  CC [M]  drivers/gpu/drm/i915/i915_cmd_parser.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_debugfs_params.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv20.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vega10_reg_init.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/nv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g84.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/g98.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gt215.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/mcp89.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gf100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vega20_reg_init.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm107.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/gv100.o
  CC [M]  drivers/gpu/drm/i915/i915_deps.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/tu102.o
  CC [M]  drivers/gpu/drm/i915/i915_gem.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/ga100.o
  CC [M]  drivers/gpu/drm/i915/i915_gem_evict.o
  CC [M]  drivers/gpu/drm/i915/i915_gem_gtt.o
  CC [M]  drivers/gpu/drm/i915/i915_gem_ww.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/amd/amdgpu/nbio_v7_4.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/devinit/r535.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_irq.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v2_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/base.o
  CC [M]  drivers/gpu/drm/i915/i915_query.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_params.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nv.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/user.o
  CC [M]  drivers/gpu/drm/i915/i915_request.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 [M]  drivers/gpu/drm/xe/i915-display/intel_display_power_well.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/gp10b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/arct_reg_init.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/gv100.o
  CC [M]  drivers/gpu/drm/i915/i915_scheduler.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mxgpu_nv.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_trace.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/base.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_wa.o
  CC [M]  drivers/gpu/drm/i915/i915_trace_points.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/hdp_v4_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv04.o
  CC [M]  drivers/gpu/drm/i915/i915_ttm_buddy_manager.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/hdp_v5_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv10.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dkl_phy.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/aldebaran_reg_init.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv1a.o
  CC [M]  drivers/gpu/drm/i915/i915_vma.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv20.o
  CC [M]  drivers/gpu/drm/i915/i915_vma_resource.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dmc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv25.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/aldebaran.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 [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv30.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_aux_backlight.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv35.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv36.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/soc21.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv40.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv41.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv44.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sienna_cichlid.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv46.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_hdcp.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_link_training.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv47.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv49.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smu_v13_0_10.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v4_3.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/hdp_v6_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_mst.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_7.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpll.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_ads.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv4e.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_capture.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/hdp_v5_2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/g84.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/lsdma_v6_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gt215.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_9.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_ct.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpll_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp77.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/mcp89.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_fw.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpt_common.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf100.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_hwconfig.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gf108.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_drrs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk104.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_log.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk110.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsb.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_rc.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_guc_submission.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/nbio_v7_11.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gk20a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/df_v1_7.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm107.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/df_v3_6.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/df_v4_3.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_huc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi_dcs_backlight.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gm20b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/df_v4_6_2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp100.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi_vbt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v7_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gp10b.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fb.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gv100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v8_0.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_huc_fw.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_uc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fbc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/tu102.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.o
  CC [M]  drivers/gpu/drm/i915/gt/uc/intel_uc_fw.o
  CC [M]  drivers/gpu/drm/i915/gt/intel_gsc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga100.o
  CC [M]  drivers/gpu/drm/i915/i915_hwmon.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fdi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fifo_underrun.o
  CC [M]  drivers/gpu/drm/i915/display/hsw_ips.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_frontbuffer.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v9_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_global_state.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/r535.o
  CC [M]  drivers/gpu/drm/i915/display/i9xx_plane.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_gmbus.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v1_1.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ram.o
  CC [M]  drivers/gpu/drm/i915/display/i9xx_wm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v2_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv10.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hdcp.o
  CC [M]  drivers/gpu/drm/i915/display/intel_atomic.o
  CC [M]  drivers/gpu/drm/i915/display/intel_atomic_plane.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v10_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv1a.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv20.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv40.o
  CC [M]  drivers/gpu/drm/i915/display/intel_audio.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv41.o
  CC [M]  drivers/gpu/drm/i915/display/intel_bios.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv44.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv49.o
  CC [M]  drivers/gpu/drm/i915/display/intel_bw.o
  CC [M]  drivers/gpu/drm/i915/display/intel_cdclk.o
  CC [M]  drivers/gpu/drm/i915/display/intel_color.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv4e.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hdmi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v2_1.o
  CC [M]  drivers/gpu/drm/i915/display/intel_combo_phy.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramnv50.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hotplug.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgt215.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/rammcp77.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgf108.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v2_3.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hotplug_irq.o
  CC [M]  drivers/gpu/drm/i915/display/intel_connector.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v1_7.o
  CC [M]  drivers/gpu/drm/i915/display/intel_crtc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hti.o
  CC [M]  drivers/gpu/drm/i915/display/intel_crtc_state_dump.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v3_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v3_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgm107.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp100.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_link_bw.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgp102.o
  CC [M]  drivers/gpu/drm/i915/display/intel_cursor.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_lspcon.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_lock.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v3_0_2.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_driver.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/sddr2.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gmc_v11_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_setup.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v3_0_1.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v3_0_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/sddr3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gddr3.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v1_2.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_verify.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v1_8.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_irq.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/mmhub_v3_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fb/gddr5.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fuse/base.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_params.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fuse/nv50.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_panel.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_power.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_power_map.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_power_well.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pipe_crc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfxhub_v11_5_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pmdemand.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gf100.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pps.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/fuse/gm107.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v6_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_psr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v6_1.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v6_7.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_reset.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_qp_tables.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_rps.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v8_7.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v8_10.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_quirks.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umc_v12_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_wa.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dmc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_snps_phy.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv10.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_tc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_irq.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vblank.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vdsc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vga.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dpio_phy.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vrr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/g94.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ih.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gf119.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dpll.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dpll_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/gk104.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dpt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/iceland_ih.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/tonga_ih.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/cz_ih.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_wm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vega10_ih.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_scaler.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vega20_ih.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dpt_common.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_universal_plane.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gpio/ga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/navi10_ih.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/ih_v6_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/ih_v6_1.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_psp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/fwsec.o
  CC [M]  drivers/gpu/drm/i915/display/intel_drrs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v3_1.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/gv100.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsb.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsb_buffer.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_watermark.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v10_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu102.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fb.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/tu116.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_acpi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ga100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v11_0.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_opregion.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fb_bo.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fb_pin.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v11_0_8.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v12_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v13_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fbc.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fdi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/ad102.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_fbdev.o
  CC [M]  drivers/gpu/drm/i915/display/intel_fifo_underrun.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/psp_v13_0_4.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/dce_v10_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/base.o
  CC [M]  drivers/gpu/drm/i915/display/intel_frontbuffer.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/dce_v11_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_global_state.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hdcp.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_kunit_helpers.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv4e.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_rlc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/g94.o
  CC [M]  drivers/gpu/drm/xe/xe_gsc.o
  CC [M]  drivers/gpu/drm/xe/xe_guc.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_klvs_abi.h
  CC [M]  drivers/gpu/drm/i915/display/intel_hdcp_gsc.o
  HDRTEST drivers/gpu/drm/xe/abi/gsc_command_header_abi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf117.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gf119.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_errors_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_slpc_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_relay_actions_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/gsc_mkhi_commands_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_relay_communication_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_communication_mmio_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_messages_abi.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_gem.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v8_0.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vma_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk104.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hotplug.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gk110.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_irq.h
  CC [M]  drivers/gpu/drm/i915/display/intel_hotplug_irq.o
  CC [M]  drivers/gpu/drm/i915/display/intel_hti.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v9_0.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/vlv_sideband_reg.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v9_4.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_wakeref.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_pcode.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/gm200.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v9_4_2.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v9_4_3.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_drv.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_reg_defs.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_trace.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_reg.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/pad.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padnv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v10_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padnv4e.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padnv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/imu_v11_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padg94.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v11_0.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_active_types.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_utils.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padgf119.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/padgm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bus.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_config.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/gfx_v11_0_3.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/imu_v11_0_3.o
  CC [M]  drivers/gpu/drm/i915/display/intel_link_bw.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
  CC [M]  drivers/gpu/drm/i915/display/intel_load_detect.o
  CC [M]  drivers/gpu/drm/i915/display/intel_lpe_audio.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv04.o
  CC [M]  drivers/gpu/drm/i915/display/intel_modeset_lock.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/vlv_sideband.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_gem_stolen.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_mchbar_regs.h
  CC [M]  drivers/gpu/drm/i915/display/intel_modeset_setup.o
  CC [M]  drivers/gpu/drm/i915/display/intel_modeset_verify.o
  CC [M]  drivers/gpu/drm/i915/display/intel_overlay.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_debugfs.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_gpu_error.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv4e.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_pch.h
  CC [M]  drivers/gpu/drm/i915/display/intel_pch_display.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busnv50.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_dram.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_gmch.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vgpu.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_fixed.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_runtime_pm.h
  CC [M]  drivers/gpu/drm/i915/display/intel_pch_refclk.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_step.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v2_4.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v3_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v4_0.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_uc_fw.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_pci_config.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_lmem.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_mman.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/busgf119.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/bit.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxg94.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object_frontbuffer.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgf119.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gt/intel_rps.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/auxgm200.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_clock_gating.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_gt_types.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
  CC [M]  drivers/gpu/drm/i915/display/intel_plane_initial.o
  CC [M]  drivers/gpu/drm/i915/display/intel_pmdemand.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/i2c/anx9805.o
  CC [M]  drivers/gpu/drm/i915/display/intel_psr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v4_4.o
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_active.h
  CC [M]  drivers/gpu/drm/i915/display/intel_quirks.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/base.o
  HDRTEST drivers/gpu/drm/xe/display/intel_fb_bo.h
  CC [M]  drivers/gpu/drm/i915/display/intel_sprite.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/iccsense/gf100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v5_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_sprite_uapi.o
  HDRTEST drivers/gpu/drm/xe/display/intel_fbdev_fb.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v5_2.o
  HDRTEST drivers/gpu/drm/xe/instructions/xe_instr_defs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv40.o
  CC [M]  drivers/gpu/drm/i915/display/intel_tc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/sdma_v6_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_vblank.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_mes.o
  CC [M]  drivers/gpu/drm/i915/display/intel_vga.o
  HDRTEST drivers/gpu/drm/xe/instructions/xe_gsc_commands.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/mes_v10_1.o
  HDRTEST drivers/gpu/drm/xe/instructions/xe_gfxpipe_commands.h
  CC [M]  drivers/gpu/drm/i915/display/intel_wm.o
  CC [M]  drivers/gpu/drm/i915/display/skl_scaler.o
  HDRTEST drivers/gpu/drm/xe/instructions/xe_mi_commands.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_gsc_regs.h
  CC [M]  drivers/gpu/drm/i915/display/skl_universal_plane.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/nv50.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_reg_defs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/mes_v11_0.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_guc_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_gt_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/instmem/r535.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_gpu_commands.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_sriov_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.o
  CC [M]  drivers/gpu/drm/i915/display/skl_watermark.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_lrc_layout.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gk104.o
  HDRTEST drivers/gpu/drm/xe/regs/xe_mchbar_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_engine_regs.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_test.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm200.o
  CC [M]  drivers/gpu/drm/i915/display/intel_acpi.o
  CC [M]  drivers/gpu/drm/i915/display/intel_opregion.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v5_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v6_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp10b.o
  HDRTEST drivers/gpu/drm/xe/tests/xe_kunit_helpers.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/uvd_v7_0.o
  HDRTEST drivers/gpu/drm/xe/tests/xe_pci_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_migrate_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_dma_buf_test.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vce.o
  HDRTEST drivers/gpu/drm/xe/tests/xe_mocs_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_bo_test.h
  CC [M]  drivers/gpu/drm/i915/display/intel_fbdev.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vce_v3_0.o
  HDRTEST drivers/gpu/drm/xe/xe_assert.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/vce_v4_0.o
  HDRTEST drivers/gpu/drm/xe/xe_bb.h
  HDRTEST drivers/gpu/drm/xe/xe_bb_types.h
  HDRTEST drivers/gpu/drm/xe/xe_bo.h
  CC [M]  drivers/gpu/drm/i915/display/intel_fbdev_fb.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_debugfs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/ltc/ga102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/base.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_debugfs_params.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv11.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv17.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv44.o
  CC [M]  drivers/gpu/drm/i915/display/intel_pipe_crc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/nv50.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_ch7017.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/g84.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/g98.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_ch7xxx.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_sw_ring.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gt215.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v1_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gf100.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_ivch.o
  HDRTEST drivers/gpu/drm/xe/xe_bo_doc.h
  HDRTEST drivers/gpu/drm/xe/xe_bo_evict.h
  HDRTEST drivers/gpu/drm/xe/xe_bo_types.h
  HDRTEST drivers/gpu/drm/xe/xe_debugfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v2_0.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_ns2501.o
  HDRTEST drivers/gpu/drm/xe/xe_devcoredump.h
  HDRTEST drivers/gpu/drm/xe/xe_devcoredump_types.h
  CC [M]  drivers/gpu/drm/i915/display/dvo_sil164.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v2_5.o
  CC [M]  drivers/gpu/drm/i915/display/dvo_tfp410.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v3_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v4_0.o
  CC [M]  drivers/gpu/drm/i915/display/g4x_dp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v4_0_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vcn_v4_0_5.o
  CC [M]  drivers/gpu/drm/i915/display/g4x_hdmi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gk20a.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/gp10b.o
  CC [M]  drivers/gpu/drm/i915/display/icl_dsi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mc/ga100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.o
  HDRTEST drivers/gpu/drm/xe/xe_device.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_jpeg.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv41.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v1_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v2_0.o
  HDRTEST drivers/gpu/drm/xe/xe_device_sysfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v2_5.o
  CC [M]  drivers/gpu/drm/i915/display/intel_backlight.o
  HDRTEST drivers/gpu/drm/xe/xe_device_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv44.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/nv50.o
  CC [M]  drivers/gpu/drm/i915/display/intel_crt.o
  HDRTEST drivers/gpu/drm/xe/xe_display.h
  CC [M]  drivers/gpu/drm/i915/display/intel_cx0_phy.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_ddi.o
  HDRTEST drivers/gpu/drm/xe/xe_dma_buf.h
  CC [M]  drivers/gpu/drm/i915/display/intel_ddi_buf_trans.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v4_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/g84.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mcp77.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gf100.o
  HDRTEST drivers/gpu/drm/xe/xe_drm_client.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gk20a.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_device.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm200.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.o
  CC [M]  drivers/gpu/drm/i915/display/intel_display_trace.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dkl_phy.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gm20b.o
  HDRTEST drivers/gpu/drm/xe/xe_drv.h
  CC [M]  drivers/gpu/drm/i915/display/intel_dp.o
  HDRTEST drivers/gpu/drm/xe/xe_exec.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_vpe.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/vpe_v6_1.o
  HDRTEST drivers/gpu/drm/xe/xe_exec_queue.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gp10b.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_aux.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/gv100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/tu102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_umsch_mm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/umsch_mm_v4_0.o
  HDRTEST drivers/gpu/drm/xe/xe_exec_queue_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/athub_v1_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_aux_backlight.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/r535.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/mem.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/athub_v2_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/memnv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/memnv50.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_hdcp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/athub_v2_1.o
  HDRTEST drivers/gpu/drm/xe/xe_execlist.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/athub_v3_0.o
  HDRTEST drivers/gpu/drm/xe/xe_execlist_types.h
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_link_training.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v9_0.o
  HDRTEST drivers/gpu/drm/xe/xe_force_wake.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/memgf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmm.o
  HDRTEST drivers/gpu/drm/xe/xe_force_wake_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv04.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dp_mst.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv41.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv44.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v11_0.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmnv50.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsi.o
  HDRTEST drivers/gpu/drm/xe/xe_ggtt.h
  HDRTEST drivers/gpu/drm/xe/xe_ggtt_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v11_0_6.o
  HDRTEST drivers/gpu/drm/xe/xe_gpu_scheduler.h
  CC [M]  drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v13_0.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dsi_vbt.o
  CC [M]  drivers/gpu/drm/i915/display/intel_dvo.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v13_0_3.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmmcp77.o
  HDRTEST drivers/gpu/drm/xe/xe_gpu_scheduler_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgf100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/smuio_v13_0_6.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_reset.o
  HDRTEST drivers/gpu/drm/xe/xe_gsc.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/mca_v3_0.o
  HDRTEST drivers/gpu/drm/xe/xe_gsc_submit.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.o
  HDRTEST drivers/gpu/drm/xe/xe_gsc_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_module.o
  CC [M]  drivers/gpu/drm/i915/display/intel_gmbus.o
  HDRTEST drivers/gpu/drm/xe/xe_gt.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_ccs_mode.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_clock.h
  CC [M]  drivers/gpu/drm/i915/display/intel_hdmi.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_debugfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_chardev.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_freq.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_idle.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_topology.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_idle_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgk20a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_pasid.o
  CC [M]  drivers/gpu/drm/i915/display/intel_lspcon.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_mcr.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgm200.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_pagefault.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_doorbell.o
  CC [M]  drivers/gpu/drm/i915/display/intel_lvds.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_printk.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgm20b.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_sriov_printk.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_flat_memory.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgp10b.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_sysfs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmgv100.o
  CC [M]  drivers/gpu/drm/i915/display/intel_panel.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process.o
  CC [M]  drivers/gpu/drm/i915/display/intel_pps.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_sysfs_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_throttle_sysfs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/vmmtu102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/umem.o
  CC [M]  drivers/gpu/drm/i915/display/intel_qp_tables.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_queue.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_cik.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
  CC [M]  drivers/gpu/drm/i915/display/intel_sdvo.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_vi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/ummu.o
  CC [M]  drivers/gpu/drm/i915/display/intel_snps_phy.o
  CC [M]  drivers/gpu/drm/i915/display/intel_tv.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mmu/uvmm.o
  CC [M]  drivers/gpu/drm/i915/display/intel_vdsc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mxm/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mxm/mxms.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/mxm/nv50.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_topology.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/agp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.o
  HDRTEST drivers/gpu/drm/xe/xe_gt_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_v9.o
  CC [M]  drivers/gpu/drm/i915/display/intel_vrr.o
  HDRTEST drivers/gpu/drm/xe/xe_guc.h
  CC [M]  drivers/gpu/drm/i915/display/vlv_dsi.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_ads.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.o
  CC [M]  drivers/gpu/drm/i915/display/vlv_dsi_pll.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_v10.o
  CC [M]  drivers/gpu/drm/i915/i915_perf.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_mqd_manager_v11.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_kernel_queue.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_packet_manager.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv40.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv46.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_packet_manager_vi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/nv4c.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_packet_manager_v9.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_process_queue_manager.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_ads_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ct.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ct_types.h
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_cik.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_vi.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_huc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_tee.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_v9.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/g92.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_v10.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf106.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_device_queue_manager_v11.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_interrupt.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_db_mgr.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_debugfs.h
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_cmd.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_exec_queue_types.h
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_debugfs.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_events.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pci/gp100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/cik_event_interrupt.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_gsccs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/memx.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gt215.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gf119.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_fwif.h
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_irq.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_int_process_v9.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_int_process_v10.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_hwconfig.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_hxg_helpers.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_int_process_v11.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk104.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_log.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_log_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_smi_events.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_pc.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_pc_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_crat.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk110.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk208.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_pm.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_debug.o
  CC [M]  drivers/gpu/drm/i915/pxp/intel_pxp_session.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_debugfs.o
  CC [M]  drivers/gpu/drm/i915/i915_gpu_error.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_relay.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_relay_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_submit.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gk20a.o
  CC [M]  drivers/gpu/drm/i915/gem/selftests/i915_gem_client_blt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm107.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_svm.o
  CC [M]  drivers/gpu/drm/i915/gem/selftests/igt_gem_utils.o
  CC [M]  drivers/gpu/drm/i915/selftests/i915_random.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../amdkfd/kfd_migrate.o
  CC [M]  drivers/gpu/drm/i915/selftests/i915_selftest.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gm20b.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_submit_types.h
  CC [M]  drivers/gpu/drm/i915/selftests/igt_atomic.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_fence.o
  HDRTEST drivers/gpu/drm/xe/xe_guc_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_flush_test.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_live_test.o
  HDRTEST drivers/gpu/drm/xe/xe_heci_gsc.h
  HDRTEST drivers/gpu/drm/xe/xe_huc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp102.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_mmap.o
  CC [M]  drivers/gpu/drm/i915/selftests/igt_reset.o
  HDRTEST drivers/gpu/drm/xe/xe_huc_debugfs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/pmu/gp10b.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.o
  HDRTEST drivers/gpu/drm/xe/xe_huc_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v9.o
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine.h
  CC [M]  drivers/gpu/drm/i915/selftests/igt_spinner.o
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine_types.h
  CC [M]  drivers/gpu/drm/i915/selftests/intel_scheduler_helpers.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf100.o
  HDRTEST drivers/gpu/drm/xe/xe_hw_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_fence_types.h
  CC [M]  drivers/gpu/drm/i915/selftests/librapl.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gf117.o
  CC [M]  drivers/gpu/drm/i915/i915_vgpu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dkl_phy_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_crtc_state_dump.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gk20a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_aldebaran.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gc_9_4_3.o
  HDRTEST drivers/gpu/drm/i915/display/hsw_ips.h
  HDRTEST drivers/gpu/drm/xe/xe_hwmon.h
  HDRTEST drivers/gpu/drm/i915/display/g4x_hdmi.h
  HDRTEST drivers/gpu/drm/xe/xe_irq.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gm200.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hdcp_regs.h
  HDRTEST drivers/gpu/drm/xe/xe_lmtt.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10.o
  HDRTEST drivers/gpu/drm/i915/display/intel_overlay.h
  HDRTEST drivers/gpu/drm/xe/xe_lmtt_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/privring/gp10b.o
  HDRTEST drivers/gpu/drm/xe/xe_lrc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/base.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v10_3.o
  HDRTEST drivers/gpu/drm/xe/xe_lrc_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/fan.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v11.o
  HDRTEST drivers/gpu/drm/i915/display/skl_watermark_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/fannil.o
  HDRTEST drivers/gpu/drm/xe/xe_macros.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dmc.h
  HDRTEST drivers/gpu/drm/i915/display/intel_vga.h
  HDRTEST drivers/gpu/drm/xe/xe_map.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/fanpwm.o
  HDRTEST drivers/gpu/drm/i915/display/intel_audio.h
  HDRTEST drivers/gpu/drm/i915/display/intel_lvds.h
  HDRTEST drivers/gpu/drm/i915/display/intel_modeset_setup.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/fantog.o
  HDRTEST drivers/gpu/drm/i915/display/intel_cdclk.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/ic.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/temp.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_limits.h
  HDRTEST drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv40.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hotplug.h
  HDRTEST drivers/gpu/drm/xe/xe_memirq.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dkl_phy.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.o
  HDRTEST drivers/gpu/drm/i915/display/intel_atomic.h
  HDRTEST drivers/gpu/drm/xe/xe_memirq_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_color_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_driver.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dpll.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.o
  HDRTEST drivers/gpu/drm/i915/display/vlv_dsi_pll_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_mst.h
  HDRTEST drivers/gpu/drm/i915/display/intel_fdi_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/g84.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gt215.o
  HDRTEST drivers/gpu/drm/i915/display/g4x_dp.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gf100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_tc.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_job.o
  HDRTEST drivers/gpu/drm/xe/xe_migrate.h
  HDRTEST drivers/gpu/drm/xe/xe_migrate_doc.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_acp.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_params.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../acp/acp_hw.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gf119.o
  HDRTEST drivers/gpu/drm/i915/display/intel_frontbuffer.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dsi_vbt.h
  HDRTEST drivers/gpu/drm/i915/display/intel_psr.h
  HDRTEST drivers/gpu/drm/i915/display/intel_crt.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gk104.o
  HDRTEST drivers/gpu/drm/xe/xe_mmio.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm107.o
  HDRTEST drivers/gpu/drm/i915/display/intel_opregion.h
  HDRTEST drivers/gpu/drm/i915/display/intel_snps_phy_regs.h
  HDRTEST drivers/gpu/drm/i915/display/i9xx_wm.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gm200.o
  HDRTEST drivers/gpu/drm/i915/display/intel_cx0_phy_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/therm/gp100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_ioc32.o
  HDRTEST drivers/gpu/drm/xe/xe_mocs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/amdgpu_hmm.o
  HDRTEST drivers/gpu/drm/i915/display/intel_global_state.h
  HDRTEST drivers/gpu/drm/xe/xe_module.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/arcturus_ppt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/navi10_ppt.o
  HDRTEST drivers/gpu/drm/xe/xe_pat.h
  HDRTEST drivers/gpu/drm/i915/display/intel_lpe_audio.h
  HDRTEST drivers/gpu/drm/i915/display/intel_drrs.h
  HDRTEST drivers/gpu/drm/xe/xe_pci.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/base.o
  HDRTEST drivers/gpu/drm/xe/xe_pci_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dsb_buffer.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/sienna_cichlid_ppt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/vangogh_ppt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/cyan_skillfish_ppt.o
  HDRTEST drivers/gpu/drm/xe/xe_pcode.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv04.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_rps.h
  HDRTEST drivers/gpu/drm/xe/xe_pcode_api.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv40.o
  HDRTEST drivers/gpu/drm/xe/xe_platform_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pm.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/nv41.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu11/smu_v11_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu12/renoir_ppt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/timer/gk20a.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu12/smu_v12_0.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0.o
  HDRTEST drivers/gpu/drm/xe/xe_preempt_fence.h
  HDRTEST drivers/gpu/drm/i915/display/intel_fbdev.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/aldebaran_ppt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/top/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/top/gk104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/yellow_carp_ppt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/top/ga100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_pps_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/uvfn.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_0_ppt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_4_ppt.o
  HDRTEST drivers/gpu/drm/xe/xe_preempt_fence_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pt.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/gv100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/tu102.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hdmi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/ga100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/vfn/r535.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_5_ppt.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fdi.h
  HDRTEST drivers/gpu/drm/xe/xe_pt_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pt_walk.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_7_ppt.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gpio.o
  HDRTEST drivers/gpu/drm/xe/xe_query.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/nv40.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fb.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_qp_tables.h
  HDRTEST drivers/gpu/drm/xe/xe_range_fence.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dsb_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gf117.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu13/smu_v13_0_6_ppt.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu14/smu_v14_0.o
  HDRTEST drivers/gpu/drm/i915/display/intel_vdsc.h
  HDRTEST drivers/gpu/drm/xe/xe_reg_sr.h
  HDRTEST drivers/gpu/drm/i915/display/intel_snps_phy.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu14/smu_v14_0_0_ppt.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_core.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk104.o
  HDRTEST drivers/gpu/drm/i915/display/vlv_dsi_pll.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dvo_dev.h
  HDRTEST drivers/gpu/drm/xe/xe_reg_sr_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/amdgpu_smu.o
  HDRTEST drivers/gpu/drm/xe/xe_reg_whitelist.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/swsmu/smu_cmn.o
  HDRTEST drivers/gpu/drm/xe/xe_res_cursor.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smumgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hdcp.h
  HDRTEST drivers/gpu/drm/xe/xe_ring_ops.h
  HDRTEST drivers/gpu/drm/i915/display/intel_sdvo_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_pch_refclk.h
  HDRTEST drivers/gpu/drm/i915/display/intel_modeset_lock.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gk20a.o
  HDRTEST drivers/gpu/drm/xe/xe_ring_ops_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_trace.h
  HDRTEST drivers/gpu/drm/xe/xe_rtp.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/subdev/volt/gm20b.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_power.h
  HDRTEST drivers/gpu/drm/xe/xe_rtp_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/falcon.o
  HDRTEST drivers/gpu/drm/xe/xe_sa.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/xtensa.o
  HDRTEST drivers/gpu/drm/xe/xe_sa_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/bsp/g84.o
  HDRTEST drivers/gpu/drm/xe/xe_sched_job.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_aux_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu8_smumgr.o
  HDRTEST drivers/gpu/drm/xe/xe_sched_job_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gt215.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gm107.o
  HDRTEST drivers/gpu/drm/i915/display/i9xx_plane.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gm200.o
  HDRTEST drivers/gpu/drm/xe/xe_sriov.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_aux_backlight.h
  HDRTEST drivers/gpu/drm/xe/xe_sriov_printk.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gp100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/tonga_smumgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gp102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/gv100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/fiji_smumgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/tu102.o
  HDRTEST drivers/gpu/drm/xe/xe_sriov_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dpll_mgr.h
  HDRTEST drivers/gpu/drm/i915/display/vlv_dsi.h
  HDRTEST drivers/gpu/drm/i915/display/intel_plane_initial.h
  HDRTEST drivers/gpu/drm/xe/xe_step.h
  HDRTEST drivers/gpu/drm/xe/xe_step_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/ga100.o
  HDRTEST drivers/gpu/drm/xe/xe_sync.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/ga102.o
  HDRTEST drivers/gpu/drm/xe/xe_sync_types.h
  HDRTEST drivers/gpu/drm/xe/xe_tile.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ce/r535.o
  HDRTEST drivers/gpu/drm/xe/xe_tile_sysfs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/polaris10_smumgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/cipher/g84.o
  HDRTEST drivers/gpu/drm/xe/xe_tile_sysfs_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/acpi.o
  HDRTEST drivers/gpu/drm/xe/xe_trace.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/iceland_smumgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu7_smumgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vega10_smumgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu10_smumgr.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_device.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/ci_smumgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/pci.o
  HDRTEST drivers/gpu/drm/xe/xe_ttm_stolen_mgr.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vega12_smumgr.o
  HDRTEST drivers/gpu/drm/xe/xe_ttm_sys_mgr.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vegam_smumgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu9_smumgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/tegra.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/device/user.o
  HDRTEST drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/chan.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fifo_underrun.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/conn.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/dp.o
  HDRTEST drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmi.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/head.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/ior.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/vega20_smumgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/outp.o
  HDRTEST drivers/gpu/drm/i915/display/intel_cursor.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/hwmgr.o
  HDRTEST drivers/gpu/drm/i915/display/vlv_dsi_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/vga.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/nv04.o
  HDRTEST drivers/gpu/drm/xe/xe_tuning.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/g84.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dpt_common.h
  HDRTEST drivers/gpu/drm/i915/display/intel_cx0_phy.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/processpptables.o
  HDRTEST drivers/gpu/drm/i915/display/skl_scaler.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/g94.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/hardwaremanager.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu8_hwmgr.o
  HDRTEST drivers/gpu/drm/xe/xe_uc.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_debugfs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_fb_bo.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw_abi.h
  HDRTEST drivers/gpu/drm/i915/display/intel_hti.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gt200.o
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp77.o
  HDRTEST drivers/gpu/drm/xe/xe_uc_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gt215.o
  HDRTEST drivers/gpu/drm/i915/display/icl_dsi_regs.h
  HDRTEST drivers/gpu/drm/xe/xe_vm.h
  HDRTEST drivers/gpu/drm/xe/xe_vm_doc.h
  HDRTEST drivers/gpu/drm/xe/xe_vm_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_atomic_plane.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/mcp89.o
  HDRTEST drivers/gpu/drm/xe/xe_wa.h
  HDRTEST drivers/gpu/drm/xe/xe_wait_user_fence.h
  HDRTEST drivers/gpu/drm/i915/display/skl_watermark.h
  HDRTEST drivers/gpu/drm/xe/xe_wopcm.h
  HDRTEST drivers/gpu/drm/i915/display/intel_fbc.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/pppcielanes.o
  HDRTEST drivers/gpu/drm/xe/xe_wopcm_types.h
  LD [M]  drivers/gpu/drm/xe/xe.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/process_pptables_v1_0.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_reg_defs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/ppatomctrl.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gk110.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gm107.o
  HDRTEST drivers/gpu/drm/i915/display/intel_acpi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gm200.o
  HDRTEST drivers/gpu/drm/i915/display/intel_connector.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dpt.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gp100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gp102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/gv100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/tu102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/ppatomfwctrl.o
  HDRTEST drivers/gpu/drm/i915/display/intel_quirks.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_link_training.h
  HDRTEST drivers/gpu/drm/i915/display/intel_color.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_hwmgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/ga102.o
  HDRTEST drivers/gpu/drm/i915/display/intel_crtc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/ad102.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_debugfs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_modeset_verify.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_powertune.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_thermal.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/r535.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_clockpowergating.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/udisp.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_power_well.h
  HDRTEST drivers/gpu/drm/i915/display/intel_psr_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/uconn.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_processpptables.o
  HDRTEST drivers/gpu/drm/i915/display/intel_wm.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/uoutp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/disp/uhead.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_hwmgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_powertune.o
  HDRTEST drivers/gpu/drm/i915/display/intel_pipe_crc.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_thermal.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu10_hwmgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/nv04.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/pp_psm.o
  HDRTEST drivers/gpu/drm/i915/display/intel_audio_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/nv50.o
  HDRTEST drivers/gpu/drm/i915/display/intel_panel.h
  HDRTEST drivers/gpu/drm/i915/display/intel_sprite.h
  HDRTEST drivers/gpu/drm/i915/display/intel_wm_types.h
  HDRTEST drivers/gpu/drm/i915/display/intel_tv.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_processpptables.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/gf100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_fbdev_fb.h
  HDRTEST drivers/gpu/drm/i915/display/intel_hti_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/gf119.o
  HDRTEST drivers/gpu/drm/i915/display/intel_vrr.h
  HDRTEST drivers/gpu/drm/i915/display/intel_load_detect.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/gv100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_hwmgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/user.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_thermal.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv50.o
  HDRTEST drivers/gpu/drm/i915/display/skl_universal_plane.h
  HDRTEST drivers/gpu/drm/i915/display/intel_mg_phy_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_bw.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/pp_overdriver.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_irq.h
  HDRTEST drivers/gpu/drm/i915/display/intel_de.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf119.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_processpptables.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/dma/usergv100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_hwmgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_powertune.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_thermal.o
  HDRTEST drivers/gpu/drm/i915/display/intel_lvds_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/common_baco.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/cgrp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/chan.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/chid.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/runl.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/runq.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv04.o
  HDRTEST drivers/gpu/drm/i915/display/intel_gmbus_regs.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega10_baco.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv10.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega20_baco.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv17.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv40.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dvo.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/vega12_baco.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu9_baco.o
  HDRTEST drivers/gpu/drm/i915/display/intel_sdvo.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/g84.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/tonga_baco.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_aux.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/g98.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/polaris_baco.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/fiji_baco.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/ci_baco.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_vdsc_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_combo_phy.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dvo_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk110.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/hwmgr/smu7_baco.o
  HDRTEST drivers/gpu/drm/i915/display/intel_gmbus.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk208.o
  HDRTEST drivers/gpu/drm/i915/display/intel_hdcp_gsc.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dsi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk20a.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dmc_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm107.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/powerplay/amd_powerplay.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gp100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_ddi.h
  HDRTEST drivers/gpu/drm/i915/display/intel_hotplug_irq.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/legacy_dpm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/gv100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/tu102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/kv_dpm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/ga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/kv_smc.o
  HDRTEST drivers/gpu/drm/i915/display/intel_tv_regs.h
  HDRTEST drivers/gpu/drm/i915/display/intel_dsb.h
  HDRTEST drivers/gpu/drm/i915/display/intel_bios.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/si_dpm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/r535.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/legacy-dpm/si_smc.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/amdgpu_dpm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/ucgrp.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/amdgpu_pm.o
  HDRTEST drivers/gpu/drm/i915/display/intel_pch_display.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/fifo/uchan.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_types.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../pm/amdgpu_dpm_internal.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv04.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv10.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_plane.o
  HDRTEST drivers/gpu/drm/i915/display/intel_backlight.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv15.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv17.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_crtc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv20.o
  HDRTEST drivers/gpu/drm/i915/display/intel_vblank.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv25.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dp.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv2a.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv30.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_irq.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_mst_types.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv34.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv35.o
  HDRTEST drivers/gpu/drm/i915/display/intel_pmdemand.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_color.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv40.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/dc_fpu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_services.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv44.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_helpers.o
  HDRTEST drivers/gpu/drm/i915/display/intel_backlight_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/g84.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_pp_smu.o
  HDRTEST drivers/gpu/drm/i915/display/intel_combo_phy_regs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gt200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/mcp79.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gt215.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_reset.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_power_map.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/mcp89.o
  HDRTEST drivers/gpu/drm/i915/display/intel_ddi_buf_trans.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_psr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.o
  HDRTEST drivers/gpu/drm/i915/display/intel_display_wa.h
  HDRTEST drivers/gpu/drm/i915/display/icl_dsi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf104.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_replay.o
  HDRTEST drivers/gpu/drm/i915/display/intel_lspcon.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf108.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf110.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_hdcp.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf117.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dpio_phy.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_crc.o
  HDRTEST drivers/gpu/drm/i915/display/intel_dp_hdcp.h
  HDRTEST drivers/gpu/drm/i915/display/intel_fb_pin.h
  HDRTEST drivers/gpu/drm/i915/display/intel_display_debugfs_params.h
  HDRTEST drivers/gpu/drm/i915/display/intel_link_bw.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm_debugfs.o
  HDRTEST drivers/gpu/drm/i915/display/intel_pps.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/conversion.o
  HDRTEST drivers/gpu/drm/i915/display/intel_sprite_uapi.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gf119.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ttm.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gk104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_region.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/fixpt31_32.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110b.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_context_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gk20a.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_lmem.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_mman.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gm107.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/vector.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/dc_common.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/dce_calcs.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_object_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gm200.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gm20b.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp100.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_context.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/custom_float.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/basics/bw_fixed.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp107.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp108.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_clflush.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gp10b.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/gv100.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_tiling.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser_interface.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/tu102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ga102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ad102.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_stolen.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table_helper.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser_common.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_create.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/r535.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxnv40.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/command_table_helper2.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/bios_parser2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxnv50.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ttm_move.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce60/command_table_helper_dce60.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_ioctls.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce80/command_table_helper_dce80.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce110/command_table_helper_dce110.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce112/command_table_helper_dce112.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf104.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_domain.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/bios/dce112/command_table_helper2_dce112.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf108.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/display_mode_lib.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf110.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_internal.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/display_rq_dlg_helpers.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_dmabuf.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dml1_display_rq_dlg_calc.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf117.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn10/dcn10_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf119.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/dcn20_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk104.o
  HDRTEST drivers/gpu/drm/i915/gem/selftests/mock_context.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/display_mode_vba.o
  HDRTEST drivers/gpu/drm/i915/gem/selftests/huge_gem_object.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_rq_dlg_calc_20.o
  HDRTEST drivers/gpu/drm/i915/gem/selftests/mock_gem_object.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110b.o
  HDRTEST drivers/gpu/drm/i915/gem/selftests/mock_dmabuf.h
  HDRTEST drivers/gpu/drm/i915/gem/selftests/igt_gem_utils.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk208.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_mode_vba_20.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_userptr.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk20a.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm107.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm200.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_rq_dlg_calc_20v2.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm20b.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_pm.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn20/display_mode_vba_20v2.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn21/display_rq_dlg_calc_21.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn21/display_mode_vba_21.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_shrinker.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgp100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/dcn30_fpu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/display_mode_vba_30.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gemfs.h
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_object.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn30/display_rq_dlg_calc_30.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn31/display_mode_vba_31.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgp102.o
  HDRTEST drivers/gpu/drm/i915/gem/i915_gem_object_frontbuffer.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgp104.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgp107.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn31/display_rq_dlg_calc_31.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_timeline_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgv100.o
  HDRTEST drivers/gpu/drm/i915/gt/selftest_engine.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxtu102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_mode_vba_314.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_breadcrumbs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/display_rq_dlg_calc_314.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv31.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv40.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_mode_vba_32.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_rq_dlg_calc_32.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv44.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_engine_heartbeat.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/mpeg/nv50.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/display_mode_vba_util_32.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn31/dcn31_fpu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn32/dcn32_fpu.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_context_types.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_execlists_submission.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/mpeg/g84.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/mspdec/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn321/dcn321_fpu.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_pm.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/mspdec/g98.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/mspdec/gt215.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn301/dcn301_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/mspdec/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/mspdec/gk104.o
  HDRTEST drivers/gpu/drm/i915/gt/selftest_rc6.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/msppp/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn302/dcn302_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/msppp/g98.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/msppp/gt215.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn303/dcn303_fpu.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_llc_types.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/msppp/gf100.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/msvld/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/msvld/g98.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_region_lmem.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/msvld/gt215.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/msvld/mcp89.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn314/dcn314_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/msvld/gf100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dcn35/dcn35_fpu.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/msvld/gk104.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_requests.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_ggtt_gmch.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/nvenc/base.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/dsc/rc_calc_fpu.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dcn_calcs.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/nvenc/gm107.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_print.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/nvenc/tu102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/nvenc/ga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dcn_calc_math.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/nvenc/ad102.o
  HDRTEST drivers/gpu/drm/i915/gt/gen8_ppgtt.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/nvenc/r535.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/dml/calcs/dcn_calc_auto.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_mcr.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/nvdec/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/nvdec/gm107.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce60/dce60_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/nvdec/tu102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/nvdec/ga100.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce100/dce_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/nvdec/ga102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce110/dce110_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/nvdec/ad102.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_timeline.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce112/dce112_clk_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dce120/dce120_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/gt/gen6_engine_cs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/nvdec/r535.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/nvjpg/ga100.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_workarounds_types.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/nvjpg/ad102.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn10/rv1_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/gt/selftest_rps.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn10/rv1_clk_mgr_vbios_smu.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_sa_media.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/nvjpg/r535.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_debugfs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ofa/ga100.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_gt_clock_utils.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_rps_types.h
  HDRTEST drivers/gpu/drm/i915/gt/selftest_engine_heartbeat.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ofa/ga102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ofa/ad102.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/ofa/r535.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn10/rv2_clk_mgr.o
  HDRTEST drivers/gpu/drm/i915/gt/sysfs_engines.h
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn20/dcn20_clk_mgr.o
  CC [M]  drivers/gpu/drm/amd/amdgpu/../display/dc/clk_mgr/dcn201/dcn201_clk_mgr.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/pm/base.o
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/pm/nv40.o
  HDRTEST drivers/gpu/drm/i915/gt/gen7_renderclear.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/pm/nv50.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_context.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_wopcm.h
  HDRTEST drivers/gpu/drm/i915/gt/intel_mocs.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engine/pm/g84.o
  HDRTEST drivers/gpu/drm/i915/gt/intel_engine_pm.h
  CC [M]  drivers/gpu/drm/nouveau/nvkm/engin



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

* ✗ CI.Hooks: failure for Introduce Relay Communication for SR-IOV
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
                   ` (13 preceding siblings ...)
  2024-01-04  5:52 ` ✓ CI.Build: " Patchwork
@ 2024-01-04  5:52 ` Patchwork
  2024-01-04  5:53 ` ✓ CI.checksparse: success " Patchwork
  2024-01-04  6:30 ` ✗ CI.BAT: failure " Patchwork
  16 siblings, 0 replies; 30+ messages in thread
From: Patchwork @ 2024-01-04  5:52 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

== Series Details ==

Series: Introduce Relay Communication for SR-IOV
URL   : https://patchwork.freedesktop.org/series/128042/
State : failure

== Summary ==

run-parts: executing /workspace/ci/hooks/00-showenv
/workspace
+ pwd
+ ls -la
total 1004
drwxrwxr-x 12 1003 1003   4096 Jan  4 05:52 .
drwxr-xr-x  1 root root   4096 Jan  4 05:52 ..
-rw-rw-r--  1 1003 1003 817144 Jan  4 05:51 build.log
-rw-rw-r--  1 1003 1003   5740 Jan  4 05:43 checkpatch.log
drwxrwxr-x  5 1003 1003   4096 Jan  4 05:41 ci
drwxrwxr-x  9 1003 1003   4096 Jan  4 05:41 docker
drwxrwxr-x  8 1003 1003   4096 Jan  4 05:41 .git
-rw-rw-r--  1 1003 1003    758 Jan  4 05:43 git_apply.log
drwxrwxr-x  4 1003 1003   4096 Jan  4 05:41 .github
-rw-rw-r--  1 1003 1003    233 Jan  4 05:41 .groovylintrc.json
-rw-rw-r--  1 1003 1003     78 Jan  4 05:52 hooks.log
drwxrwxr-x 31 1003 1003   4096 Jan  4 05:51 kernel
-rw-rw-r--  1 1003 1003  94034 Jan  4 05:43 kernel.mbox
-rw-rw-r--  1 1003 1003  33884 Jan  4 05:44 kunit.log
-rw-rw-r--  1 1003 1003     48 Jan  4 05:43 parent.tag
drwxrwxr-x 44 1003 1003   4096 Jan  4 05:41 pipelines
-rw-rw-r--  1 1003 1003    793 Jan  4 05:41 README.adoc
drwxrwxr-x  3 1003 1003   4096 Jan  4 05:41 scripts
drwxrwxr-x  3 1003 1003   4096 Jan  4 05:41 src
drwxrwxr-x  2 1003 1003   4096 Jan  4 05:41 vars
drwxrwxr-x  2 1003 1003   4096 Jan  4 05:41 .vscode
+ uname -a
Linux 701b1db16f20 5.4.0-164-generic #181-Ubuntu SMP Fri Sep 1 13:41:22 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
+ 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"
+ '[' -n /workspace ']'
+ git_args='-C /workspace/kernel'
+ git_log_args=
+ git --no-pager -C /workspace/kernel log --format=oneline --abbrev-commit
5ed55f6e3 drm/xe/guc: Start handling GuC Relay event messages
7e93665f6 drm/xe/kunit: Add GuC Relay kunit tests
f6dd0223f drm/xe/kunit: Allow to replace xe_guc_ct_send_recv() with stub
01288ad3f drm/xe/guc: Introduce Relay Communication for SR-IOV
4bfd47c54 drm/xe/guc: Add Relay Communication ABI definitions
f6ef6609e drm/xe/guc: Update few GuC CTB ABI definitions
560790118 drm/xe/guc: Add helpers for HXG messages
841981526 drm/xe: Introduce GT-oriented SR-IOV logging macros
38a530fd5 drm/xe: Define Virtual Function Identifier
868529207 drm/xe: Allocate dedicated workqueue for SR-IOV workers
7b3b98d03 drm/xe/xe2: Add workaround 16020183090
run-parts: executing /workspace/ci/hooks/10-build-W1
+ SRC_DIR=/workspace/kernel
+ RESTORE_DISPLAY_CONFIG=0
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ cd /workspace/kernel
++ nproc
+ make -j48 O=/workspace/kernel/build64-default modules_prepare
make[1]: Entering directory '/workspace/kernel/build64-default'
  GEN     Makefile
  UPD     include/generated/compile.h
  UPD     include/config/kernel.release
mkdir -p /workspace/kernel/build64-default/tools/objtool && make O=/workspace/kernel/build64-default subdir=tools/objtool --no-print-directory -C objtool 
  UPD     include/generated/utsrelease.h
  CALL    ../scripts/checksyscalls.sh
  HOSTCC  /workspace/kernel/build64-default/tools/objtool/fixdep.o
  HOSTLD  /workspace/kernel/build64-default/tools/objtool/fixdep-in.o
  LINK    /workspace/kernel/build64-default/tools/objtool/fixdep
  INSTALL libsubcmd_headers
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/exec-cmd.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/help.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/pager.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/parse-options.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/run-command.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/sigchain.o
  CC      /workspace/kernel/build64-default/tools/objtool/libsubcmd/subcmd-config.o
  LD      /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd-in.o
  AR      /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd.a
  CC      /workspace/kernel/build64-default/tools/objtool/weak.o
  CC      /workspace/kernel/build64-default/tools/objtool/check.o
  CC      /workspace/kernel/build64-default/tools/objtool/special.o
  CC      /workspace/kernel/build64-default/tools/objtool/builtin-check.o
  CC      /workspace/kernel/build64-default/tools/objtool/elf.o
  CC      /workspace/kernel/build64-default/tools/objtool/objtool.o
  CC      /workspace/kernel/build64-default/tools/objtool/orc_gen.o
  CC      /workspace/kernel/build64-default/tools/objtool/orc_dump.o
  CC      /workspace/kernel/build64-default/tools/objtool/libstring.o
  CC      /workspace/kernel/build64-default/tools/objtool/libctype.o
  CC      /workspace/kernel/build64-default/tools/objtool/str_error_r.o
  CC      /workspace/kernel/build64-default/tools/objtool/librbtree.o
  CC      /workspace/kernel/build64-default/tools/objtool/arch/x86/special.o
  CC      /workspace/kernel/build64-default/tools/objtool/arch/x86/decode.o
  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 M=drivers/gpu/drm/xe W=1
make[1]: Entering directory '/workspace/kernel/build64-default'
  CC [M]  drivers/gpu/drm/xe/xe_bb.o
  CC [M]  drivers/gpu/drm/xe/xe_bo.o
  CC [M]  drivers/gpu/drm/xe/xe_bo_evict.o
  CC [M]  drivers/gpu/drm/xe/xe_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_devcoredump.o
  CC [M]  drivers/gpu/drm/xe/xe_device.o
  CC [M]  drivers/gpu/drm/xe/xe_device_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_dma_buf.o
  CC [M]  drivers/gpu/drm/xe/xe_drm_client.o
  CC [M]  drivers/gpu/drm/xe/xe_exec.o
  CC [M]  drivers/gpu/drm/xe/xe_execlist.o
  CC [M]  drivers/gpu/drm/xe/xe_exec_queue.o
  CC [M]  drivers/gpu/drm/xe/xe_force_wake.o
  CC [M]  drivers/gpu/drm/xe/xe_ggtt.o
  CC [M]  drivers/gpu/drm/xe/xe_gpu_scheduler.o
  HOSTCC  drivers/gpu/drm/xe/xe_gen_wa_oob
  CC [M]  drivers/gpu/drm/xe/xe_gsc_submit.o
  CC [M]  drivers/gpu/drm/xe/xe_gt.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_ccs_mode.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_clock.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_freq.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_idle.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_mcr.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_pagefault.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_throttle_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
  CC [M]  drivers/gpu/drm/xe/xe_gt_topology.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_ads.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_ct.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_db_mgr.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_hwconfig.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_log.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_pc.o
  CC [M]  drivers/gpu/drm/xe/xe_guc_submit.o
  CC [M]  drivers/gpu/drm/xe/xe_heci_gsc.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_hw_fence.o
  CC [M]  drivers/gpu/drm/xe/xe_huc.o
  CC [M]  drivers/gpu/drm/xe/xe_huc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_irq.o
  CC [M]  drivers/gpu/drm/xe/xe_lrc.o
  CC [M]  drivers/gpu/drm/xe/xe_mmio.o
  CC [M]  drivers/gpu/drm/xe/xe_mocs.o
  CC [M]  drivers/gpu/drm/xe/xe_module.o
  CC [M]  drivers/gpu/drm/xe/xe_pat.o
  CC [M]  drivers/gpu/drm/xe/xe_pci.o
  CC [M]  drivers/gpu/drm/xe/xe_pcode.o
  CC [M]  drivers/gpu/drm/xe/xe_pm.o
  CC [M]  drivers/gpu/drm/xe/xe_preempt_fence.o
  CC [M]  drivers/gpu/drm/xe/xe_pt.o
  CC [M]  drivers/gpu/drm/xe/xe_pt_walk.o
  CC [M]  drivers/gpu/drm/xe/xe_query.o
  CC [M]  drivers/gpu/drm/xe/xe_range_fence.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_sr.o
  CC [M]  drivers/gpu/drm/xe/xe_reg_whitelist.o
  CC [M]  drivers/gpu/drm/xe/xe_rtp.o
  CC [M]  drivers/gpu/drm/xe/xe_sa.o
  CC [M]  drivers/gpu/drm/xe/xe_sched_job.o
  CC [M]  drivers/gpu/drm/xe/xe_step.o
  CC [M]  drivers/gpu/drm/xe/xe_sync.o
  CC [M]  drivers/gpu/drm/xe/xe_tile.o
  CC [M]  drivers/gpu/drm/xe/xe_tile_sysfs.o
  CC [M]  drivers/gpu/drm/xe/xe_trace.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_vram_mgr.o
  CC [M]  drivers/gpu/drm/xe/xe_tuning.o
  CC [M]  drivers/gpu/drm/xe/xe_uc.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_debugfs.o
  CC [M]  drivers/gpu/drm/xe/xe_uc_fw.o
  CC [M]  drivers/gpu/drm/xe/xe_wait_user_fence.o
  CC [M]  drivers/gpu/drm/xe/xe_wopcm.o
  CC [M]  drivers/gpu/drm/xe/xe_hwmon.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_lmtt.o
  CC [M]  drivers/gpu/drm/xe/xe_lmtt_2l.o
  CC [M]  drivers/gpu/drm/xe/xe_lmtt_ml.o
  CC [M]  drivers/gpu/drm/xe/xe_display.o
  CC [M]  drivers/gpu/drm/xe/display/xe_fb_pin.o
  CC [M]  drivers/gpu/drm/xe/display/xe_hdcp_gsc.o
  CC [M]  drivers/gpu/drm/xe/display/xe_plane_initial.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display_rps.o
  CC [M]  drivers/gpu/drm/xe/display/xe_display_misc.o
  CC [M]  drivers/gpu/drm/xe/display/xe_dsb_buffer.o
  CC [M]  drivers/gpu/drm/xe/display/intel_fbdev_fb.o
  CC [M]  drivers/gpu/drm/xe/display/intel_fb_bo.o
  CC [M]  drivers/gpu/drm/xe/display/ext/i915_irq.o
  CC [M]  drivers/gpu/drm/xe/display/ext/i915_utils.o
  CC [M]  drivers/gpu/drm/xe/i915-soc/intel_dram.o
  CC [M]  drivers/gpu/drm/xe/i915-soc/intel_pch.o
  CC [M]  drivers/gpu/drm/xe/i915-display/icl_dsi.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_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 [M]  drivers/gpu/drm/xe/i915-display/intel_backlight.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_bios.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_bw.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cdclk.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_color.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_combo_phy.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_connector.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_crtc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_crtc_state_dump.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cursor.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_cx0_phy.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_ddi.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_ddi_buf_trans.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_debugfs.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_debugfs_params.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 [M]  drivers/gpu/drm/xe/i915-display/intel_display_params.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 [M]  drivers/gpu/drm/xe/i915-display/intel_display_power_well.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_trace.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_display_wa.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dkl_phy.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dmc.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 [M]  drivers/gpu/drm/xe/i915-display/intel_dp_aux_backlight.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_hdcp.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_link_training.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dp_mst.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpll.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dpll_mgr.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 [M]  drivers/gpu/drm/xe/i915-display/intel_dsb.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi_dcs_backlight.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_dsi_vbt.o
  CC [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 [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 [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_hdmi.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hotplug.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hotplug_irq.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_hti.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_link_bw.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_lspcon.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_lock.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_setup.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_modeset_verify.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_panel.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pipe_crc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pmdemand.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_pps.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 [M]  drivers/gpu/drm/xe/i915-display/intel_quirks.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_snps_phy.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_tc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vblank.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vdsc.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vga.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_vrr.o
  CC [M]  drivers/gpu/drm/xe/i915-display/intel_wm.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_scaler.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_universal_plane.o
  CC [M]  drivers/gpu/drm/xe/i915-display/skl_watermark.o
  CC [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/i915-display/intel_fbdev.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_kunit_helpers.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_klvs_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/gsc_command_header_abi.h
  CC [M]  drivers/gpu/drm/xe/tests/xe_bo_test.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_sriov_abi.h
  CC [M]  drivers/gpu/drm/xe/tests/xe_dma_buf_test.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_errors_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_slpc_abi.h
  CC [M]  drivers/gpu/drm/xe/tests/xe_migrate_test.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_relay_actions_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/gsc_mkhi_commands_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/gsc_pxp_commands_abi.h
  CC [M]  drivers/gpu/drm/xe/tests/xe_mocs_test.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_relay_communication_abi.h
  CC [M]  drivers/gpu/drm/xe/tests/xe_pci_test.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_rtp_test.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_wa_test.o
  HDRTEST drivers/gpu/drm/xe/abi/guc_communication_mmio_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_actions_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_communication_ctb_abi.h
  HDRTEST drivers/gpu/drm/xe/abi/guc_messages_abi.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_gem.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vma_types.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_irq.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/vlv_sideband_reg.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_wakeref.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_pcode.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_drv.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_reg_defs.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_trace.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_reg.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_active_types.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_utils.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_config.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/vlv_sideband.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_gem_stolen.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_mchbar_regs.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_debugfs.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_gpu_error.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_pch.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_dram.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/soc/intel_gmch.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_vgpu.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_fixed.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_runtime_pm.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_uncore.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_step.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_uc_fw.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_pci_config.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_lmem.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_mman.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gem/i915_gem_object_frontbuffer.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/gt/intel_rps.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_clock_gating.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/intel_gt_types.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/pxp/intel_pxp.h
  HDRTEST drivers/gpu/drm/xe/compat-i915-headers/i915_active.h
  HDRTEST drivers/gpu/drm/xe/display/intel_fb_bo.h
  HDRTEST drivers/gpu/drm/xe/display/intel_fbdev_fb.h
  HDRTEST drivers/gpu/drm/xe/instructions/xe_instr_defs.h
  HDRTEST drivers/gpu/drm/xe/instructions/xe_gsc_commands.h
  HDRTEST drivers/gpu/drm/xe/instructions/xe_gfxpipe_commands.h
  HDRTEST drivers/gpu/drm/xe/instructions/xe_mi_commands.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_gsc_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_reg_defs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_guc_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_gt_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_gpu_commands.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_sriov_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_lrc_layout.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_mchbar_regs.h
  HDRTEST drivers/gpu/drm/xe/regs/xe_engine_regs.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_kunit_helpers.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_pci_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_migrate_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_dma_buf_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_mocs_test.h
  HDRTEST drivers/gpu/drm/xe/tests/xe_bo_test.h
  HDRTEST drivers/gpu/drm/xe/xe_assert.h
  HDRTEST drivers/gpu/drm/xe/xe_bb.h
  HDRTEST drivers/gpu/drm/xe/xe_bb_types.h
  HDRTEST drivers/gpu/drm/xe/xe_bo.h
  HDRTEST drivers/gpu/drm/xe/xe_bo_doc.h
  HDRTEST drivers/gpu/drm/xe/xe_bo_evict.h
  HDRTEST drivers/gpu/drm/xe/xe_bo_types.h
  HDRTEST drivers/gpu/drm/xe/xe_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_devcoredump.h
  HDRTEST drivers/gpu/drm/xe/xe_devcoredump_types.h
  HDRTEST drivers/gpu/drm/xe/xe_device.h
  HDRTEST drivers/gpu/drm/xe/xe_device_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_device_types.h
  HDRTEST drivers/gpu/drm/xe/xe_display.h
  HDRTEST drivers/gpu/drm/xe/xe_dma_buf.h
  HDRTEST drivers/gpu/drm/xe/xe_drm_client.h
  HDRTEST drivers/gpu/drm/xe/xe_drv.h
  HDRTEST drivers/gpu/drm/xe/xe_exec.h
  HDRTEST drivers/gpu/drm/xe/xe_exec_queue.h
  HDRTEST drivers/gpu/drm/xe/xe_exec_queue_types.h
  HDRTEST drivers/gpu/drm/xe/xe_execlist.h
  HDRTEST drivers/gpu/drm/xe/xe_execlist_types.h
  HDRTEST drivers/gpu/drm/xe/xe_force_wake.h
  HDRTEST drivers/gpu/drm/xe/xe_force_wake_types.h
  HDRTEST drivers/gpu/drm/xe/xe_ggtt.h
  HDRTEST drivers/gpu/drm/xe/xe_ggtt_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gpu_scheduler.h
  HDRTEST drivers/gpu/drm/xe/xe_gpu_scheduler_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gsc.h
  HDRTEST drivers/gpu/drm/xe/xe_gsc_submit.h
  HDRTEST drivers/gpu/drm/xe/xe_gsc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_ccs_mode.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_clock.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_freq.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_idle.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_idle_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_mcr.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_pagefault.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_printk.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_sriov_printk.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_sysfs_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_throttle_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_topology.h
  HDRTEST drivers/gpu/drm/xe/xe_gt_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ads.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ads_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ct.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_ct_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_db_mgr.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_exec_queue_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_fwif.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_hwconfig.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_hxg_helpers.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_log.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_log_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_pc.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_pc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_relay.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_relay_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_submit.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_submit_types.h
  HDRTEST drivers/gpu/drm/xe/xe_guc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_heci_gsc.h
  HDRTEST drivers/gpu/drm/xe/xe_huc.h
  HDRTEST drivers/gpu/drm/xe/xe_huc_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_huc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_engine_types.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_hw_fence_types.h
  HDRTEST drivers/gpu/drm/xe/xe_hwmon.h
  HDRTEST drivers/gpu/drm/xe/xe_irq.h
  HDRTEST drivers/gpu/drm/xe/xe_lmtt.h
  HDRTEST drivers/gpu/drm/xe/xe_lmtt_types.h
  HDRTEST drivers/gpu/drm/xe/xe_lrc.h
  HDRTEST drivers/gpu/drm/xe/xe_lrc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_macros.h
  HDRTEST drivers/gpu/drm/xe/xe_map.h
  HDRTEST drivers/gpu/drm/xe/xe_memirq.h
  HDRTEST drivers/gpu/drm/xe/xe_memirq_types.h
  HDRTEST drivers/gpu/drm/xe/xe_migrate.h
  HDRTEST drivers/gpu/drm/xe/xe_migrate_doc.h
  HDRTEST drivers/gpu/drm/xe/xe_mmio.h
  HDRTEST drivers/gpu/drm/xe/xe_mocs.h
  HDRTEST drivers/gpu/drm/xe/xe_module.h
  HDRTEST drivers/gpu/drm/xe/xe_pat.h
  HDRTEST drivers/gpu/drm/xe/xe_pci.h
  HDRTEST drivers/gpu/drm/xe/xe_pci_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pcode.h
  HDRTEST drivers/gpu/drm/xe/xe_pcode_api.h
  HDRTEST drivers/gpu/drm/xe/xe_platform_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pm.h
  HDRTEST drivers/gpu/drm/xe/xe_preempt_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_preempt_fence_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pt.h
  HDRTEST drivers/gpu/drm/xe/xe_pt_types.h
  HDRTEST drivers/gpu/drm/xe/xe_pt_walk.h
  HDRTEST drivers/gpu/drm/xe/xe_query.h
  HDRTEST drivers/gpu/drm/xe/xe_range_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_reg_sr.h
  HDRTEST drivers/gpu/drm/xe/xe_reg_sr_types.h
  HDRTEST drivers/gpu/drm/xe/xe_reg_whitelist.h
  HDRTEST drivers/gpu/drm/xe/xe_res_cursor.h
  HDRTEST drivers/gpu/drm/xe/xe_ring_ops.h
  HDRTEST drivers/gpu/drm/xe/xe_ring_ops_types.h
  HDRTEST drivers/gpu/drm/xe/xe_rtp.h
  HDRTEST drivers/gpu/drm/xe/xe_rtp_types.h
  HDRTEST drivers/gpu/drm/xe/xe_sa.h
  HDRTEST drivers/gpu/drm/xe/xe_sa_types.h
  HDRTEST drivers/gpu/drm/xe/xe_sched_job.h
  HDRTEST drivers/gpu/drm/xe/xe_sched_job_types.h
  HDRTEST drivers/gpu/drm/xe/xe_sriov.h
  HDRTEST drivers/gpu/drm/xe/xe_sriov_printk.h
  HDRTEST drivers/gpu/drm/xe/xe_sriov_types.h
  HDRTEST drivers/gpu/drm/xe/xe_step.h
  HDRTEST drivers/gpu/drm/xe/xe_step_types.h
  HDRTEST drivers/gpu/drm/xe/xe_sync.h
  HDRTEST drivers/gpu/drm/xe/xe_sync_types.h
  HDRTEST drivers/gpu/drm/xe/xe_tile.h
  HDRTEST drivers/gpu/drm/xe/xe_tile_sysfs.h
  HDRTEST drivers/gpu/drm/xe/xe_tile_sysfs_types.h
  HDRTEST drivers/gpu/drm/xe/xe_trace.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_stolen_mgr.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_sys_mgr.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
  HDRTEST drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
  HDRTEST drivers/gpu/drm/xe/xe_tuning.h
  HDRTEST drivers/gpu/drm/xe/xe_uc.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_debugfs.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw_abi.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_fw_types.h
  HDRTEST drivers/gpu/drm/xe/xe_uc_types.h
  HDRTEST drivers/gpu/drm/xe/xe_vm.h
  HDRTEST drivers/gpu/drm/xe/xe_vm_doc.h
  HDRTEST drivers/gpu/drm/xe/xe_vm_types.h
  HDRTEST drivers/gpu/drm/xe/xe_wa.h
  HDRTEST drivers/gpu/drm/xe/xe_wait_user_fence.h
  HDRTEST drivers/gpu/drm/xe/xe_wopcm.h
  HDRTEST drivers/gpu/drm/xe/xe_wopcm_types.h
  GEN     xe_wa_oob.c xe_wa_oob.h
  GEN     xe_wa_oob.c xe_wa_oob.h
  CC [M]  drivers/gpu/drm/xe/xe_gsc.o
  CC [M]  drivers/gpu/drm/xe/xe_guc.o
  CC [M]  drivers/gpu/drm/xe/xe_migrate.o
  CC [M]  drivers/gpu/drm/xe/xe_ring_ops.o
  CC [M]  drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
  CC [M]  drivers/gpu/drm/xe/xe_vm.o
  CC [M]  drivers/gpu/drm/xe/xe_wa.o
  LD [M]  drivers/gpu/drm/xe/xe.o
  MODPOST drivers/gpu/drm/xe/Module.symvers
WARNING: modpost: missing MODULE_DESCRIPTION() in drivers/gpu/drm/xe/tests/xe_mocs_test.o
  CC [M]  drivers/gpu/drm/xe/xe.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_bo_test.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_dma_buf_test.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_migrate_test.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_mocs_test.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_pci_test.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_rtp_test.mod.o
  CC [M]  drivers/gpu/drm/xe/tests/xe_wa_test.mod.o
  LD [M]  drivers/gpu/drm/xe/tests/xe_wa_test.ko
  LD [M]  drivers/gpu/drm/xe/tests/xe_dma_buf_test.ko
  LD [M]  drivers/gpu/drm/xe/xe.ko
  LD [M]  drivers/gpu/drm/xe/tests/xe_pci_test.ko
  LD [M]  drivers/gpu/drm/xe/tests/xe_migrate_test.ko
  LD [M]  drivers/gpu/drm/xe/tests/xe_bo_test.ko
  LD [M]  drivers/gpu/drm/xe/tests/xe_rtp_test.ko
  LD [M]  drivers/gpu/drm/xe/tests/xe_mocs_test.ko
make[1]: Leaving directory '/workspace/kernel/build64-default'
run-parts: executing /workspace/ci/hooks/20-kernel-doc
+ SRC_DIR=/workspace/kernel
+ cd /workspace/kernel
+ find drivers/gpu/drm/xe/ -name '*.[ch]' -not -path 'drivers/gpu/drm/xe/display/*'
+ xargs ./scripts/kernel-doc -Werror -none include/uapi/drm/xe_drm.h
drivers/gpu/drm/xe/xe_guc_hxg_helpers.h:22: warning: Function parameter or member 'T' not described in 'hxg_sizeof'
1 warnings as Errors
run-parts: /workspace/ci/hooks/20-kernel-doc exited with return code 123



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

* ✓ CI.checksparse: success for Introduce Relay Communication for SR-IOV
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
                   ` (14 preceding siblings ...)
  2024-01-04  5:52 ` ✗ CI.Hooks: failure " Patchwork
@ 2024-01-04  5:53 ` Patchwork
  2024-01-04  6:30 ` ✗ CI.BAT: failure " Patchwork
  16 siblings, 0 replies; 30+ messages in thread
From: Patchwork @ 2024-01-04  5:53 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

== Series Details ==

Series: Introduce Relay Communication for SR-IOV
URL   : https://patchwork.freedesktop.org/series/128042/
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 7b3b98d034784b125bad7aca46f9e7a3cfcde45a
Sparse version: 0.6.1 (Ubuntu: 0.6.1-2build1)
Fast mode used, each commit won't be checked separately.
Okay!

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



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

* ✗ CI.BAT: failure for Introduce Relay Communication for SR-IOV
  2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
                   ` (15 preceding siblings ...)
  2024-01-04  5:53 ` ✓ CI.checksparse: success " Patchwork
@ 2024-01-04  6:30 ` Patchwork
  16 siblings, 0 replies; 30+ messages in thread
From: Patchwork @ 2024-01-04  6:30 UTC (permalink / raw)
  To: Michal Wajdeczko; +Cc: intel-xe

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

== Series Details ==

Series: Introduce Relay Communication for SR-IOV
URL   : https://patchwork.freedesktop.org/series/128042/
State : failure

== Summary ==

CI Bug Log - changes from xe-598-7b3b98d034784b125bad7aca46f9e7a3cfcde45a_BAT -> xe-pw-128042v1_BAT
====================================================

Summary
-------

  **FAILURE**

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

  

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

  No changes in participating hosts

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

  Here are the unknown changes that may have been introduced in xe-pw-128042v1_BAT:

### IGT changes ###

#### Possible regressions ####

  * igt@xe_create@create-execqueues-noleak:
    - bat-pvc-2:          [PASS][1] -> [FAIL][2]
   [1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-598-7b3b98d034784b125bad7aca46f9e7a3cfcde45a/bat-pvc-2/igt@xe_create@create-execqueues-noleak.html
   [2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-128042v1/bat-pvc-2/igt@xe_create@create-execqueues-noleak.html

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

  Here are the changes found in xe-pw-128042v1_BAT that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@kms_cursor_legacy@basic-flip-after-cursor-atomic:
    - bat-dg2-oem2:       [PASS][3] -> [FAIL][4] ([i915#2346])
   [3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-598-7b3b98d034784b125bad7aca46f9e7a3cfcde45a/bat-dg2-oem2/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
   [4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-128042v1/bat-dg2-oem2/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html

  * igt@kms_flip@basic-flip-vs-wf_vblank:
    - bat-dg2-oem2:       [PASS][5] -> [FAIL][6] ([Intel XE#480]) +1 other test fail
   [5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-598-7b3b98d034784b125bad7aca46f9e7a3cfcde45a/bat-dg2-oem2/igt@kms_flip@basic-flip-vs-wf_vblank.html
   [6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-128042v1/bat-dg2-oem2/igt@kms_flip@basic-flip-vs-wf_vblank.html

  
#### Possible fixes ####

  * igt@xe_create@create-execqueues-leak:
    - bat-atsm-2:         [FAIL][7] ([Intel XE#524]) -> [PASS][8] +1 other test pass
   [7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-598-7b3b98d034784b125bad7aca46f9e7a3cfcde45a/bat-atsm-2/igt@xe_create@create-execqueues-leak.html
   [8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-128042v1/bat-atsm-2/igt@xe_create@create-execqueues-leak.html

  * igt@xe_create@create-execqueues-noleak:
    - bat-adlp-7:         [FAIL][9] ([Intel XE#524]) -> [PASS][10]
   [9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-598-7b3b98d034784b125bad7aca46f9e7a3cfcde45a/bat-adlp-7/igt@xe_create@create-execqueues-noleak.html
   [10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-128042v1/bat-adlp-7/igt@xe_create@create-execqueues-noleak.html

  
  [Intel XE#480]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/480
  [Intel XE#524]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/524
  [i915#2346]: https://gitlab.freedesktop.org/drm/intel/issues/2346


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

  * IGT: IGT_7651 -> IGT_7655
  * Linux: xe-598-7b3b98d034784b125bad7aca46f9e7a3cfcde45a -> xe-pw-128042v1

  IGT_7651: 02fa4cf8bcbb15f1641e862fa83e2182c6f73a63 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  IGT_7655: ddf7cf40a00caa7d02f3729e1e50f78f102463d9 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
  xe-598-7b3b98d034784b125bad7aca46f9e7a3cfcde45a: 7b3b98d034784b125bad7aca46f9e7a3cfcde45a
  xe-pw-128042v1: 128042v1

== Logs ==

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

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

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

end of thread, other threads:[~2024-01-04  6:30 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-27 23:58 [PATCH 00/10] Introduce Relay Communication for SR-IOV Michal Wajdeczko
2023-12-27 23:58 ` [PATCH 01/10] drm/xe: Allocate dedicated workqueue for SR-IOV workers Michal Wajdeczko
2023-12-29 21:06   ` Piotr Piórkowski
2023-12-27 23:58 ` [PATCH 02/10] drm/xe: Define Virtual Function Identifier Michal Wajdeczko
2023-12-29 21:07   ` Piotr Piórkowski
2023-12-27 23:58 ` [PATCH 03/10] drm/xe: Introduce GT-oriented SR-IOV logging macros Michal Wajdeczko
2023-12-29 21:07   ` Piotr Piórkowski
2023-12-27 23:58 ` [PATCH 04/10] drm/xe/guc: Add helpers for HXG messages Michal Wajdeczko
2023-12-29 21:08   ` Piotr Piórkowski
2023-12-29 22:10     ` Michal Wajdeczko
2023-12-27 23:58 ` [PATCH 05/10] drm/xe/guc: Update few GuC CTB ABI definitions Michal Wajdeczko
2023-12-29 21:09   ` Piotr Piórkowski
2023-12-27 23:58 ` [PATCH 06/10] drm/xe/guc: Add Relay Communication " Michal Wajdeczko
2023-12-29 21:09   ` Piotr Piórkowski
2023-12-27 23:58 ` [PATCH 07/10] drm/xe/guc: Introduce Relay Communication for SR-IOV Michal Wajdeczko
2023-12-29 21:14   ` Piotr Piórkowski
2023-12-29 22:55     ` Michal Wajdeczko
2023-12-27 23:58 ` [PATCH 08/10] drm/xe/kunit: Allow to replace xe_guc_ct_send_recv() with stub Michal Wajdeczko
2023-12-29 21:15   ` Piotr Piórkowski
2023-12-27 23:58 ` [PATCH 09/10] drm/xe/kunit: Add GuC Relay kunit tests Michal Wajdeczko
2023-12-29 21:15   ` Piotr Piórkowski
2023-12-27 23:58 ` [PATCH 10/10] drm/xe/guc: Start handling GuC Relay event messages Michal Wajdeczko
2023-12-29 21:16   ` Piotr Piórkowski
2024-01-04  5:43 ` ✓ CI.Patch_applied: success for Introduce Relay Communication for SR-IOV Patchwork
2024-01-04  5:43 ` ✗ CI.checkpatch: warning " Patchwork
2024-01-04  5:44 ` ✓ CI.KUnit: success " Patchwork
2024-01-04  5:52 ` ✓ CI.Build: " Patchwork
2024-01-04  5:52 ` ✗ CI.Hooks: failure " Patchwork
2024-01-04  5:53 ` ✓ CI.checksparse: success " Patchwork
2024-01-04  6:30 ` ✗ CI.BAT: failure " Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox