* [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature.
@ 2024-07-08 4:03 Matthew Brost
2024-07-08 4:03 ` [PATCH v2 01/11] drm/xe: Add xe_gt_tlb_invalidation_fence_init helper Matthew Brost
` (19 more replies)
0 siblings, 20 replies; 32+ messages in thread
From: Matthew Brost @ 2024-07-08 4:03 UTC (permalink / raw)
To: intel-xe; +Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
While debuging [1] an issue was identified in which if too many GT TLB
invalidations are issued to the GuC, the GuC can get overwhelmed to the
point scheduling of jobs starts to stall. To avoid this, hold and
coalesce GT TLB invalidations in the KMD if a watermark of pending
invalidations is past. Add gitlab for this issue has also been opened
[2].
Layering issues with GT TLB invalidations are known [3] which needed to
be fixed first before adding this new feature.
- Patches 1-8 fix the layering.
- Patches 9-11 add coalescing feature.
We could merge these two as seperate series if needed.
CCing various stakeholders (Farah, Michal, Nirmoy) which have raised GT
TLB invalidation issues in the past.
v2:
- Fix CI issues
- Clean up some of the series / patch structure
Matt
[1] https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/799#note_2449497
[2] https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/2162
[3] https://patchwork.freedesktop.org/series/133001/
Matthew Brost (11):
drm/xe: Add xe_gt_tlb_invalidation_fence_init helper
drm/xe: Drop xe_gt_tlb_invalidation_wait
drm/xe: s/tlb_invalidation.lock/tlb_invalidation.fence_lock
drm/xe: Add tlb_invalidation.seqno_lock
drm/xe: Add xe_gt_tlb_invalidation_done_handler
drm/xe: Add send tlb invalidation helpers
drm/xe: Add xe_guc_tlb_invalidation layer
drm/xe: Add multi-client support for GT TLB invalidations
drm/xe: Add GT TLB invalidation coalescing
drm/xe: Add GT TLB invalidation coalesce tracepoints
drm/xe: Add GT TLB invalidation watermark debugfs
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/xe_debugfs.c | 38 ++
drivers/gpu/drm/xe/xe_device.c | 3 +
drivers/gpu/drm/xe/xe_device_types.h | 5 +
drivers/gpu/drm/xe/xe_ggtt.c | 21 +-
drivers/gpu/drm/xe/xe_ggtt_types.h | 5 +
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 641 ++++++++++++------
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 26 +-
.../gpu/drm/xe/xe_gt_tlb_invalidation_types.h | 41 ++
drivers/gpu/drm/xe/xe_gt_types.h | 43 +-
drivers/gpu/drm/xe/xe_guc_ct.c | 2 +-
drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c | 145 ++++
drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h | 18 +
drivers/gpu/drm/xe/xe_pt.c | 33 +-
drivers/gpu/drm/xe/xe_trace.h | 10 +
drivers/gpu/drm/xe/xe_vm.c | 45 +-
drivers/gpu/drm/xe/xe_vm_types.h | 3 +
17 files changed, 801 insertions(+), 279 deletions(-)
create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h
--
2.34.1
^ permalink raw reply [flat|nested] 32+ messages in thread
* [PATCH v2 01/11] drm/xe: Add xe_gt_tlb_invalidation_fence_init helper
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
@ 2024-07-08 4:03 ` Matthew Brost
2024-07-09 15:56 ` Nirmoy Das
2024-07-08 4:03 ` [PATCH v2 02/11] drm/xe: Drop xe_gt_tlb_invalidation_wait Matthew Brost
` (18 subsequent siblings)
19 siblings, 1 reply; 32+ messages in thread
From: Matthew Brost @ 2024-07-08 4:03 UTC (permalink / raw)
To: intel-xe; +Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
Other layers should not be touching struct xe_gt_tlb_invalidation_fence
directly, add helper for initialization.
v2:
- Add dma_fence_get and list init to xe_gt_tlb_invalidation_fence_init
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 36 +++++++++++++++++++++
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 3 ++
drivers/gpu/drm/xe/xe_pt.c | 26 +--------------
3 files changed, 40 insertions(+), 25 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
index d9359976ab8b..92a18a0e4acd 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
@@ -508,3 +508,39 @@ int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
return 0;
}
+
+static const char *
+invalidation_fence_get_driver_name(struct dma_fence *dma_fence)
+{
+ return "xe";
+}
+
+static const char *
+invalidation_fence_get_timeline_name(struct dma_fence *dma_fence)
+{
+ return "invalidation_fence";
+}
+
+static const struct dma_fence_ops invalidation_fence_ops = {
+ .get_driver_name = invalidation_fence_get_driver_name,
+ .get_timeline_name = invalidation_fence_get_timeline_name,
+};
+
+/**
+ * xe_gt_tlb_invalidation_fence_init - Initialize TLB invalidation fence
+ * @gt: GT
+ * @fence: TLB invalidation fence to initialize
+ *
+ * Initialize TLB invalidation fence for use
+ */
+void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
+ struct xe_gt_tlb_invalidation_fence *fence)
+{
+ spin_lock_irq(>->tlb_invalidation.lock);
+ dma_fence_init(&fence->base, &invalidation_fence_ops,
+ >->tlb_invalidation.lock,
+ dma_fence_context_alloc(1), 1);
+ spin_unlock_irq(>->tlb_invalidation.lock);
+ INIT_LIST_HEAD(&fence->link);
+ dma_fence_get(&fence->base);
+}
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
index bf3bebd9f985..948f4a2f5214 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
@@ -26,4 +26,7 @@ int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
int xe_gt_tlb_invalidation_wait(struct xe_gt *gt, int seqno);
int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len);
+void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
+ struct xe_gt_tlb_invalidation_fence *fence);
+
#endif /* _XE_GT_TLB_INVALIDATION_ */
diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
index f391de908033..1caa99b22c73 100644
--- a/drivers/gpu/drm/xe/xe_pt.c
+++ b/drivers/gpu/drm/xe/xe_pt.c
@@ -1317,23 +1317,6 @@ struct invalidation_fence {
u32 asid;
};
-static const char *
-invalidation_fence_get_driver_name(struct dma_fence *dma_fence)
-{
- return "xe";
-}
-
-static const char *
-invalidation_fence_get_timeline_name(struct dma_fence *dma_fence)
-{
- return "invalidation_fence";
-}
-
-static const struct dma_fence_ops invalidation_fence_ops = {
- .get_driver_name = invalidation_fence_get_driver_name,
- .get_timeline_name = invalidation_fence_get_timeline_name,
-};
-
static void invalidation_fence_cb(struct dma_fence *fence,
struct dma_fence_cb *cb)
{
@@ -1372,15 +1355,8 @@ static void invalidation_fence_init(struct xe_gt *gt,
trace_xe_gt_tlb_invalidation_fence_create(gt_to_xe(gt), &ifence->base);
- spin_lock_irq(>->tlb_invalidation.lock);
- dma_fence_init(&ifence->base.base, &invalidation_fence_ops,
- >->tlb_invalidation.lock,
- dma_fence_context_alloc(1), 1);
- spin_unlock_irq(>->tlb_invalidation.lock);
-
- INIT_LIST_HEAD(&ifence->base.link);
+ xe_gt_tlb_invalidation_fence_init(gt, &ifence->base);
- dma_fence_get(&ifence->base.base); /* Ref for caller */
ifence->fence = fence;
ifence->gt = gt;
ifence->start = start;
--
2.34.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v2 02/11] drm/xe: Drop xe_gt_tlb_invalidation_wait
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
2024-07-08 4:03 ` [PATCH v2 01/11] drm/xe: Add xe_gt_tlb_invalidation_fence_init helper Matthew Brost
@ 2024-07-08 4:03 ` Matthew Brost
2024-07-09 15:57 ` Nirmoy Das
2024-07-08 4:03 ` [PATCH v2 03/11] drm/xe: s/tlb_invalidation.lock/tlb_invalidation.fence_lock Matthew Brost
` (17 subsequent siblings)
19 siblings, 1 reply; 32+ messages in thread
From: Matthew Brost @ 2024-07-08 4:03 UTC (permalink / raw)
To: intel-xe; +Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
Having two methods to wait on GT TLB invalidations is not ideal. Remove
xe_gt_tlb_invalidation_wait and only use GT TLB invalidation fences.
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 101 ++++++--------------
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 7 +-
drivers/gpu/drm/xe/xe_vm.c | 28 +++---
3 files changed, 49 insertions(+), 87 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
index 92a18a0e4acd..687214d07ac7 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
@@ -111,7 +111,6 @@ invalidation_fence_signal(struct xe_device *xe, struct xe_gt_tlb_invalidation_fe
void xe_gt_tlb_invalidation_reset(struct xe_gt *gt)
{
struct xe_gt_tlb_invalidation_fence *fence, *next;
- struct xe_guc *guc = >->uc.guc;
int pending_seqno;
/*
@@ -134,7 +133,6 @@ void xe_gt_tlb_invalidation_reset(struct xe_gt *gt)
else
pending_seqno = gt->tlb_invalidation.seqno - 1;
WRITE_ONCE(gt->tlb_invalidation.seqno_recv, pending_seqno);
- wake_up_all(&guc->ct.wq);
list_for_each_entry_safe(fence, next,
>->tlb_invalidation.pending_fences, link)
@@ -165,6 +163,8 @@ static int send_tlb_invalidation(struct xe_guc *guc,
int seqno;
int ret;
+ xe_gt_assert(gt, fence);
+
/*
* XXX: The seqno algorithm relies on TLB invalidation being processed
* in order which they currently are, if that changes the algorithm will
@@ -173,10 +173,8 @@ static int send_tlb_invalidation(struct xe_guc *guc,
mutex_lock(&guc->ct.lock);
seqno = gt->tlb_invalidation.seqno;
- if (fence) {
- fence->seqno = seqno;
- trace_xe_gt_tlb_invalidation_fence_send(xe, fence);
- }
+ fence->seqno = seqno;
+ trace_xe_gt_tlb_invalidation_fence_send(xe, fence);
action[1] = seqno;
ret = xe_guc_ct_send_locked(&guc->ct, action, len,
G2H_LEN_DW_TLB_INVALIDATE, 1);
@@ -209,7 +207,6 @@ static int send_tlb_invalidation(struct xe_guc *guc,
TLB_INVALIDATION_SEQNO_MAX;
if (!gt->tlb_invalidation.seqno)
gt->tlb_invalidation.seqno = 1;
- ret = seqno;
}
mutex_unlock(&guc->ct.lock);
@@ -223,14 +220,16 @@ static int send_tlb_invalidation(struct xe_guc *guc,
/**
* xe_gt_tlb_invalidation_guc - Issue a TLB invalidation on this GT for the GuC
* @gt: graphics tile
+ * @fence: invalidation fence which will be signal on TLB invalidation
+ * completion
*
* Issue a TLB invalidation for the GuC. Completion of TLB is asynchronous and
- * caller can use seqno + xe_gt_tlb_invalidation_wait to wait for completion.
+ * caller can use the invalidation fence to wait for completion.
*
- * Return: Seqno which can be passed to xe_gt_tlb_invalidation_wait on success,
- * negative error code on error.
+ * Return: 0 on success, negative error code on error
*/
-static int xe_gt_tlb_invalidation_guc(struct xe_gt *gt)
+static int xe_gt_tlb_invalidation_guc(struct xe_gt *gt,
+ struct xe_gt_tlb_invalidation_fence *fence)
{
u32 action[] = {
XE_GUC_ACTION_TLB_INVALIDATION,
@@ -238,7 +237,7 @@ static int xe_gt_tlb_invalidation_guc(struct xe_gt *gt)
MAKE_INVAL_OP(XE_GUC_TLB_INVAL_GUC),
};
- return send_tlb_invalidation(>->uc.guc, NULL, action,
+ return send_tlb_invalidation(>->uc.guc, fence, action,
ARRAY_SIZE(action));
}
@@ -257,13 +256,15 @@ int xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt)
if (xe_guc_ct_enabled(>->uc.guc.ct) &&
gt->uc.guc.submission_state.enabled) {
- int seqno;
+ struct xe_gt_tlb_invalidation_fence fence;
+ int ret;
- seqno = xe_gt_tlb_invalidation_guc(gt);
- if (seqno <= 0)
- return seqno;
+ xe_gt_tlb_invalidation_fence_init(gt, &fence);
+ ret = xe_gt_tlb_invalidation_guc(gt, &fence);
+ if (ret < 0)
+ return ret;
- xe_gt_tlb_invalidation_wait(gt, seqno);
+ xe_gt_tlb_invalidation_fence_wait(&fence);
} else if (xe_device_uc_enabled(xe) && !xe_device_wedged(xe)) {
if (IS_SRIOV_VF(xe))
return 0;
@@ -290,18 +291,16 @@ int xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt)
*
* @gt: graphics tile
* @fence: invalidation fence which will be signal on TLB invalidation
- * completion, can be NULL
+ * completion
* @start: start address
* @end: end address
* @asid: address space id
*
* Issue a range based TLB invalidation if supported, if not fallback to a full
- * TLB invalidation. Completion of TLB is asynchronous and caller can either use
- * the invalidation fence or seqno + xe_gt_tlb_invalidation_wait to wait for
- * completion.
+ * TLB invalidation. Completion of TLB is asynchronous and caller can use
+ * the invalidation fence to wait for completion.
*
- * Return: Seqno which can be passed to xe_gt_tlb_invalidation_wait on success,
- * negative error code on error.
+ * Return: Negative error code on error, 0 on success
*/
int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
struct xe_gt_tlb_invalidation_fence *fence,
@@ -312,11 +311,11 @@ int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
u32 action[MAX_TLB_INVALIDATION_LEN];
int len = 0;
+ xe_gt_assert(gt, fence);
+
/* Execlists not supported */
if (gt_to_xe(gt)->info.force_execlist) {
- if (fence)
- __invalidation_fence_signal(xe, fence);
-
+ __invalidation_fence_signal(xe, fence);
return 0;
}
@@ -382,12 +381,10 @@ int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
* @vma: VMA to invalidate
*
* Issue a range based TLB invalidation if supported, if not fallback to a full
- * TLB invalidation. Completion of TLB is asynchronous and caller can either use
- * the invalidation fence or seqno + xe_gt_tlb_invalidation_wait to wait for
- * completion.
+ * TLB invalidation. Completion of TLB is asynchronous and caller can use
+ * the invalidation fence to wait for completion.
*
- * Return: Seqno which can be passed to xe_gt_tlb_invalidation_wait on success,
- * negative error code on error.
+ * Return: Negative error code on error, 0 on success
*/
int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
struct xe_gt_tlb_invalidation_fence *fence,
@@ -400,43 +397,6 @@ int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
xe_vma_vm(vma)->usm.asid);
}
-/**
- * xe_gt_tlb_invalidation_wait - Wait for TLB to complete
- * @gt: graphics tile
- * @seqno: seqno to wait which was returned from xe_gt_tlb_invalidation
- *
- * Wait for tlb_timeout_jiffies() for a TLB invalidation to complete.
- *
- * Return: 0 on success, -ETIME on TLB invalidation timeout
- */
-int xe_gt_tlb_invalidation_wait(struct xe_gt *gt, int seqno)
-{
- struct xe_guc *guc = >->uc.guc;
- int ret;
-
- /* Execlists not supported */
- if (gt_to_xe(gt)->info.force_execlist)
- return 0;
-
- /*
- * XXX: See above, this algorithm only works if seqno are always in
- * order
- */
- ret = wait_event_timeout(guc->ct.wq,
- tlb_invalidation_seqno_past(gt, seqno),
- tlb_timeout_jiffies(gt));
- if (!ret) {
- struct drm_printer p = xe_gt_err_printer(gt);
-
- xe_gt_err(gt, "TLB invalidation time'd out, seqno=%d, recv=%d\n",
- seqno, gt->tlb_invalidation.seqno_recv);
- xe_guc_ct_print(&guc->ct, &p, true);
- return -ETIME;
- }
-
- return 0;
-}
-
/**
* xe_guc_tlb_invalidation_done_handler - TLB invalidation done handler
* @guc: guc
@@ -480,12 +440,7 @@ int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
return 0;
}
- /*
- * wake_up_all() and wait_event_timeout() already have the correct
- * barriers.
- */
WRITE_ONCE(gt->tlb_invalidation.seqno_recv, msg[0]);
- wake_up_all(&guc->ct.wq);
list_for_each_entry_safe(fence, next,
>->tlb_invalidation.pending_fences, link) {
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
index 948f4a2f5214..cbf49b3d0265 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
@@ -23,10 +23,15 @@ int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
struct xe_gt_tlb_invalidation_fence *fence,
u64 start, u64 end, u32 asid);
-int xe_gt_tlb_invalidation_wait(struct xe_gt *gt, int seqno);
int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len);
void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
struct xe_gt_tlb_invalidation_fence *fence);
+static inline void
+xe_gt_tlb_invalidation_fence_wait(struct xe_gt_tlb_invalidation_fence *fence)
+{
+ dma_fence_wait(&fence->base, false);
+}
+
#endif /* _XE_GT_TLB_INVALIDATION_ */
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index cf3aea5d8cdc..478932fb7718 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -3176,8 +3176,8 @@ int xe_vm_invalidate_vma(struct xe_vma *vma)
{
struct xe_device *xe = xe_vma_vm(vma)->xe;
struct xe_tile *tile;
+ struct xe_gt_tlb_invalidation_fence fence[XE_MAX_TILES_PER_DEVICE];
u32 tile_needs_invalidate = 0;
- int seqno[XE_MAX_TILES_PER_DEVICE];
u8 id;
int ret;
@@ -3204,29 +3204,31 @@ int xe_vm_invalidate_vma(struct xe_vma *vma)
for_each_tile(tile, xe, id) {
if (xe_pt_zap_ptes(tile, vma)) {
- tile_needs_invalidate |= BIT(id);
xe_device_wmb(xe);
+ xe_gt_tlb_invalidation_fence_init(tile->primary_gt,
+ &fence[id]);
+
/*
* FIXME: We potentially need to invalidate multiple
* GTs within the tile
*/
- seqno[id] = xe_gt_tlb_invalidation_vma(tile->primary_gt, NULL, vma);
- if (seqno[id] < 0)
- return seqno[id];
- }
- }
-
- for_each_tile(tile, xe, id) {
- if (tile_needs_invalidate & BIT(id)) {
- ret = xe_gt_tlb_invalidation_wait(tile->primary_gt, seqno[id]);
+ ret = xe_gt_tlb_invalidation_vma(tile->primary_gt,
+ &fence[id], vma);
if (ret < 0)
- return ret;
+ goto wait;
+
+ tile_needs_invalidate |= BIT(id);
}
}
+wait:
+ for_each_tile(tile, xe, id)
+ if (tile_needs_invalidate & BIT(id))
+ xe_gt_tlb_invalidation_fence_wait(&fence[id]);
+
vma->tile_invalidated = vma->tile_mask;
- return 0;
+ return ret;
}
struct xe_vm_snapshot {
--
2.34.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v2 03/11] drm/xe: s/tlb_invalidation.lock/tlb_invalidation.fence_lock
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
2024-07-08 4:03 ` [PATCH v2 01/11] drm/xe: Add xe_gt_tlb_invalidation_fence_init helper Matthew Brost
2024-07-08 4:03 ` [PATCH v2 02/11] drm/xe: Drop xe_gt_tlb_invalidation_wait Matthew Brost
@ 2024-07-08 4:03 ` Matthew Brost
2024-07-09 15:57 ` Nirmoy Das
2024-07-08 4:03 ` [PATCH v2 04/11] drm/xe: Add tlb_invalidation.seqno_lock Matthew Brost
` (16 subsequent siblings)
19 siblings, 1 reply; 32+ messages in thread
From: Matthew Brost @ 2024-07-08 4:03 UTC (permalink / raw)
To: intel-xe; +Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
tlb_invalidation.lock is the lock for GT TLB invalidation fences, name
this accurately.
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 8 ++++----
drivers/gpu/drm/xe/xe_gt_types.h | 4 ++--
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
index 687214d07ac7..147840b66ba9 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
@@ -80,7 +80,7 @@ int xe_gt_tlb_invalidation_init(struct xe_gt *gt)
gt->tlb_invalidation.seqno = 1;
INIT_LIST_HEAD(>->tlb_invalidation.pending_fences);
spin_lock_init(>->tlb_invalidation.pending_lock);
- spin_lock_init(>->tlb_invalidation.lock);
+ spin_lock_init(>->tlb_invalidation.fence_lock);
INIT_DELAYED_WORK(>->tlb_invalidation.fence_tdr,
xe_gt_tlb_fence_timeout);
@@ -491,11 +491,11 @@ static const struct dma_fence_ops invalidation_fence_ops = {
void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
struct xe_gt_tlb_invalidation_fence *fence)
{
- spin_lock_irq(>->tlb_invalidation.lock);
+ spin_lock_irq(>->tlb_invalidation.fence_lock);
dma_fence_init(&fence->base, &invalidation_fence_ops,
- >->tlb_invalidation.lock,
+ >->tlb_invalidation.fence_lock,
dma_fence_context_alloc(1), 1);
- spin_unlock_irq(>->tlb_invalidation.lock);
+ spin_unlock_irq(>->tlb_invalidation.fence_lock);
INIT_LIST_HEAD(&fence->link);
dma_fence_get(&fence->base);
}
diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
index 6b5e0b45efb0..d190a66514c0 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -192,8 +192,8 @@ struct xe_gt {
* xe_gt_tlb_fence_timeout after the timeut interval is over.
*/
struct delayed_work fence_tdr;
- /** @tlb_invalidation.lock: protects TLB invalidation fences */
- spinlock_t lock;
+ /** @tlb_invalidation.fence_lock: protects TLB invalidation fences */
+ spinlock_t fence_lock;
} tlb_invalidation;
/**
--
2.34.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v2 04/11] drm/xe: Add tlb_invalidation.seqno_lock
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (2 preceding siblings ...)
2024-07-08 4:03 ` [PATCH v2 03/11] drm/xe: s/tlb_invalidation.lock/tlb_invalidation.fence_lock Matthew Brost
@ 2024-07-08 4:03 ` Matthew Brost
2024-07-08 4:03 ` [PATCH v2 05/11] drm/xe: Add xe_gt_tlb_invalidation_done_handler Matthew Brost
` (15 subsequent siblings)
19 siblings, 0 replies; 32+ messages in thread
From: Matthew Brost @ 2024-07-08 4:03 UTC (permalink / raw)
To: intel-xe; +Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
Stop abusing CT lock for GT TLB invalidation fence seqno, add a
dedicated lock.
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 108 +++++++++++---------
drivers/gpu/drm/xe/xe_gt_types.h | 13 ++-
2 files changed, 71 insertions(+), 50 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
index 147840b66ba9..9062d9f85ffb 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
@@ -3,6 +3,8 @@
* Copyright © 2023 Intel Corporation
*/
+#include <drm/drm_managed.h>
+
#include "xe_gt_tlb_invalidation.h"
#include "abi/guc_actions_abi.h"
@@ -84,7 +86,8 @@ int xe_gt_tlb_invalidation_init(struct xe_gt *gt)
INIT_DELAYED_WORK(>->tlb_invalidation.fence_tdr,
xe_gt_tlb_fence_timeout);
- return 0;
+ return drmm_mutex_init(>_to_xe(gt)->drm,
+ >->tlb_invalidation.seqno_lock);
}
static void
@@ -118,7 +121,7 @@ void xe_gt_tlb_invalidation_reset(struct xe_gt *gt)
* appear.
*/
- mutex_lock(>->uc.guc.ct.lock);
+ mutex_lock(>->tlb_invalidation.seqno_lock);
spin_lock_irq(>->tlb_invalidation.pending_lock);
cancel_delayed_work(>->tlb_invalidation.fence_tdr);
/*
@@ -138,7 +141,7 @@ void xe_gt_tlb_invalidation_reset(struct xe_gt *gt)
>->tlb_invalidation.pending_fences, link)
invalidation_fence_signal(gt_to_xe(gt), fence);
spin_unlock_irq(>->tlb_invalidation.pending_lock);
- mutex_unlock(>->uc.guc.ct.lock);
+ mutex_unlock(>->tlb_invalidation.seqno_lock);
}
static bool tlb_invalidation_seqno_past(struct xe_gt *gt, int seqno)
@@ -159,11 +162,9 @@ static int send_tlb_invalidation(struct xe_guc *guc,
u32 *action, int len)
{
struct xe_gt *gt = guc_to_gt(guc);
- struct xe_device *xe = gt_to_xe(gt);
- int seqno;
- int ret;
xe_gt_assert(gt, fence);
+ lockdep_assert_held(>->tlb_invalidation.seqno_lock);
/*
* XXX: The seqno algorithm relies on TLB invalidation being processed
@@ -171,46 +172,37 @@ static int send_tlb_invalidation(struct xe_guc *guc,
* need to be updated.
*/
- mutex_lock(&guc->ct.lock);
- seqno = gt->tlb_invalidation.seqno;
- fence->seqno = seqno;
+ action[1] = fence->seqno;
+ return xe_guc_ct_send(&guc->ct, action, len,
+ G2H_LEN_DW_TLB_INVALIDATE, 1);
+}
+
+static void xe_gt_tlb_invalidation_fence_prep(struct xe_gt *gt,
+ struct xe_gt_tlb_invalidation_fence *fence)
+{
+ struct xe_device *xe = gt_to_xe(gt);
+
+ lockdep_assert_held(>->tlb_invalidation.seqno_lock);
+
+ fence->seqno = gt->tlb_invalidation.seqno;
+
trace_xe_gt_tlb_invalidation_fence_send(xe, fence);
- action[1] = seqno;
- ret = xe_guc_ct_send_locked(&guc->ct, action, len,
- G2H_LEN_DW_TLB_INVALIDATE, 1);
- if (!ret && fence) {
- spin_lock_irq(>->tlb_invalidation.pending_lock);
- /*
- * We haven't actually published the TLB fence as per
- * pending_fences, but in theory our seqno could have already
- * been written as we acquired the pending_lock. In such a case
- * we can just go ahead and signal the fence here.
- */
- if (tlb_invalidation_seqno_past(gt, seqno)) {
- __invalidation_fence_signal(xe, fence);
- } else {
- fence->invalidation_time = ktime_get();
- list_add_tail(&fence->link,
- >->tlb_invalidation.pending_fences);
-
- if (list_is_singular(>->tlb_invalidation.pending_fences))
- queue_delayed_work(system_wq,
- >->tlb_invalidation.fence_tdr,
- tlb_timeout_jiffies(gt));
- }
- spin_unlock_irq(>->tlb_invalidation.pending_lock);
- } else if (ret < 0 && fence) {
- __invalidation_fence_signal(xe, fence);
- }
- if (!ret) {
- gt->tlb_invalidation.seqno = (gt->tlb_invalidation.seqno + 1) %
- TLB_INVALIDATION_SEQNO_MAX;
- if (!gt->tlb_invalidation.seqno)
- gt->tlb_invalidation.seqno = 1;
- }
- mutex_unlock(&guc->ct.lock);
- return ret;
+ spin_lock_irq(>->tlb_invalidation.pending_lock);
+ fence->invalidation_time = ktime_get();
+ list_add_tail(&fence->link,
+ >->tlb_invalidation.pending_fences);
+
+ if (list_is_singular(>->tlb_invalidation.pending_fences))
+ queue_delayed_work(system_wq,
+ >->tlb_invalidation.fence_tdr,
+ tlb_timeout_jiffies(gt));
+ spin_unlock_irq(>->tlb_invalidation.pending_lock);
+
+ gt->tlb_invalidation.seqno = (gt->tlb_invalidation.seqno + 1) %
+ TLB_INVALIDATION_SEQNO_MAX;
+ if (!gt->tlb_invalidation.seqno)
+ gt->tlb_invalidation.seqno = 1;
}
#define MAKE_INVAL_OP(type) ((type << XE_GUC_TLB_INVAL_TYPE_SHIFT) | \
@@ -236,9 +228,20 @@ static int xe_gt_tlb_invalidation_guc(struct xe_gt *gt,
0, /* seqno, replaced in send_tlb_invalidation */
MAKE_INVAL_OP(XE_GUC_TLB_INVAL_GUC),
};
+ int ret;
+
+ mutex_lock(>->tlb_invalidation.seqno_lock);
+
+ xe_gt_tlb_invalidation_fence_prep(gt, fence);
+
+ ret = send_tlb_invalidation(>->uc.guc, fence, action,
+ ARRAY_SIZE(action));
+ if (ret < 0)
+ invalidation_fence_signal(gt_to_xe(gt), fence);
+
+ mutex_unlock(>->tlb_invalidation.seqno_lock);
- return send_tlb_invalidation(>->uc.guc, fence, action,
- ARRAY_SIZE(action));
+ return ret;
}
/**
@@ -310,6 +313,7 @@ int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
#define MAX_TLB_INVALIDATION_LEN 7
u32 action[MAX_TLB_INVALIDATION_LEN];
int len = 0;
+ int ret;
xe_gt_assert(gt, fence);
@@ -370,7 +374,17 @@ int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
xe_gt_assert(gt, len <= MAX_TLB_INVALIDATION_LEN);
- return send_tlb_invalidation(>->uc.guc, fence, action, len);
+ mutex_lock(>->tlb_invalidation.seqno_lock);
+
+ xe_gt_tlb_invalidation_fence_prep(gt, fence);
+
+ ret = send_tlb_invalidation(>->uc.guc, fence, action, len);
+ if (ret < 0)
+ invalidation_fence_signal(xe, fence);
+
+ mutex_unlock(>->tlb_invalidation.seqno_lock);
+
+ return ret;
}
/**
diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
index d190a66514c0..fb280f058cdc 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -169,17 +169,24 @@ struct xe_gt {
/** @tlb_invalidation: TLB invalidation state */
struct {
- /** @tlb_invalidation.seqno: TLB invalidation seqno, protected by CT lock */
+ /** @tlb_invalidation.seqno_lock: TLB invalidation seqno lock */
+ struct mutex seqno_lock;
+ /**
+ * @tlb_invalidation.seqno: TLB invalidation seqno, protected
+ * by @tlb_invalidation.seqno_lock
+ */
#define TLB_INVALIDATION_SEQNO_MAX 0x100000
int seqno;
/**
* @tlb_invalidation.seqno_recv: last received TLB invalidation seqno,
- * protected by CT lock
+ * protected by @tlb_invalidation.seqno_lock (send) and
+ * @tlb_invalidation.pending_lock (send, recv)
*/
int seqno_recv;
/**
* @tlb_invalidation.pending_fences: list of pending fences waiting TLB
- * invaliations, protected by CT lock
+ * invaliations, protected by @tlb_invalidation.seqno_lock
+ * (send) and @tlb_invalidation.pending_lock (send, recv)
*/
struct list_head pending_fences;
/**
--
2.34.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v2 05/11] drm/xe: Add xe_gt_tlb_invalidation_done_handler
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (3 preceding siblings ...)
2024-07-08 4:03 ` [PATCH v2 04/11] drm/xe: Add tlb_invalidation.seqno_lock Matthew Brost
@ 2024-07-08 4:03 ` Matthew Brost
2025-07-23 17:22 ` Summers, Stuart
2024-07-08 4:03 ` [PATCH v2 06/11] drm/xe: Add send tlb invalidation helpers Matthew Brost
` (14 subsequent siblings)
19 siblings, 1 reply; 32+ messages in thread
From: Matthew Brost @ 2024-07-08 4:03 UTC (permalink / raw)
To: intel-xe; +Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
Decouple GT TLB seqno handling from G2H handler.
v2:
- Add kernel doc
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 47 +++++++++++++--------
1 file changed, 30 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
index 9062d9f85ffb..2493ea91b637 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
@@ -412,27 +412,18 @@ int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
}
/**
- * xe_guc_tlb_invalidation_done_handler - TLB invalidation done handler
- * @guc: guc
- * @msg: message indicating TLB invalidation done
- * @len: length of message
+ * xe_gt_tlb_invalidation_done_handler - GT TLB invalidation done handler
+ * @gt: gt
+ * @seqno: seqno of invalidation that is done
*
- * Parse seqno of TLB invalidation, wake any waiters for seqno, and signal any
- * invalidation fences for seqno. Algorithm for this depends on seqno being
- * received in-order and asserts this assumption.
- *
- * Return: 0 on success, -EPROTO for malformed messages.
+ * Update recv seqno, signal any GT TLB invalidation fences, and restart TDR
*/
-int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
+static void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt, int seqno)
{
- struct xe_gt *gt = guc_to_gt(guc);
struct xe_device *xe = gt_to_xe(gt);
struct xe_gt_tlb_invalidation_fence *fence, *next;
unsigned long flags;
- if (unlikely(len != 1))
- return -EPROTO;
-
/*
* This can also be run both directly from the IRQ handler and also in
* process_g2h_msg(). Only one may process any individual CT message,
@@ -449,12 +440,12 @@ int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
* process_g2h_msg().
*/
spin_lock_irqsave(>->tlb_invalidation.pending_lock, flags);
- if (tlb_invalidation_seqno_past(gt, msg[0])) {
+ if (tlb_invalidation_seqno_past(gt, seqno)) {
spin_unlock_irqrestore(>->tlb_invalidation.pending_lock, flags);
- return 0;
+ return;
}
- WRITE_ONCE(gt->tlb_invalidation.seqno_recv, msg[0]);
+ WRITE_ONCE(gt->tlb_invalidation.seqno_recv, seqno);
list_for_each_entry_safe(fence, next,
>->tlb_invalidation.pending_fences, link) {
@@ -474,6 +465,28 @@ int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
cancel_delayed_work(>->tlb_invalidation.fence_tdr);
spin_unlock_irqrestore(>->tlb_invalidation.pending_lock, flags);
+}
+
+/**
+ * xe_guc_tlb_invalidation_done_handler - TLB invalidation done handler
+ * @guc: guc
+ * @msg: message indicating TLB invalidation done
+ * @len: length of message
+ *
+ * Parse seqno of TLB invalidation, wake any waiters for seqno, and signal any
+ * invalidation fences for seqno. Algorithm for this depends on seqno being
+ * received in-order and asserts this assumption.
+ *
+ * Return: 0 on success, -EPROTO for malformed messages.
+ */
+int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
+{
+ struct xe_gt *gt = guc_to_gt(guc);
+
+ if (unlikely(len != 1))
+ return -EPROTO;
+
+ xe_gt_tlb_invalidation_done_handler(gt, msg[0]);
return 0;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v2 06/11] drm/xe: Add send tlb invalidation helpers
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (4 preceding siblings ...)
2024-07-08 4:03 ` [PATCH v2 05/11] drm/xe: Add xe_gt_tlb_invalidation_done_handler Matthew Brost
@ 2024-07-08 4:03 ` Matthew Brost
2024-07-08 4:03 ` [PATCH v2 07/11] drm/xe: Add xe_guc_tlb_invalidation layer Matthew Brost
` (13 subsequent siblings)
19 siblings, 0 replies; 32+ messages in thread
From: Matthew Brost @ 2024-07-08 4:03 UTC (permalink / raw)
To: intel-xe; +Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
Break GuC specific code into dedicated functions.
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 166 ++++++++++----------
1 file changed, 84 insertions(+), 82 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
index 2493ea91b637..79d1ed138db5 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
@@ -157,13 +157,11 @@ static bool tlb_invalidation_seqno_past(struct xe_gt *gt, int seqno)
return seqno_recv >= seqno;
}
-static int send_tlb_invalidation(struct xe_guc *guc,
- struct xe_gt_tlb_invalidation_fence *fence,
- u32 *action, int len)
+static int send_tlb_invalidation(struct xe_guc *guc, u32 *action, int len)
{
struct xe_gt *gt = guc_to_gt(guc);
- xe_gt_assert(gt, fence);
+ xe_gt_assert(gt, action[1]); /* Seqno */
lockdep_assert_held(>->tlb_invalidation.seqno_lock);
/*
@@ -172,11 +170,86 @@ static int send_tlb_invalidation(struct xe_guc *guc,
* need to be updated.
*/
- action[1] = fence->seqno;
return xe_guc_ct_send(&guc->ct, action, len,
G2H_LEN_DW_TLB_INVALIDATE, 1);
}
+#define MAKE_INVAL_OP(type) ((type << XE_GUC_TLB_INVAL_TYPE_SHIFT) | \
+ XE_GUC_TLB_INVAL_MODE_HEAVY << XE_GUC_TLB_INVAL_MODE_SHIFT | \
+ XE_GUC_TLB_INVAL_FLUSH_CACHE)
+
+static int send_tlb_invalidation_ggtt(struct xe_gt *gt, int seqno)
+{
+ u32 action[] = {
+ XE_GUC_ACTION_TLB_INVALIDATION,
+ seqno,
+ MAKE_INVAL_OP(XE_GUC_TLB_INVAL_GUC),
+ };
+
+ return send_tlb_invalidation(>->uc.guc, action, ARRAY_SIZE(action));
+}
+
+static int send_tlb_invalidation_ppgtt(struct xe_gt *gt, u64 start, u64 end,
+ u32 asid, int seqno)
+{
+#define MAX_TLB_INVALIDATION_LEN 7
+ u32 action[MAX_TLB_INVALIDATION_LEN];
+ int len = 0;
+
+ action[len++] = XE_GUC_ACTION_TLB_INVALIDATION;
+ action[len++] = seqno;
+ if (!gt_to_xe(gt)->info.has_range_tlb_invalidation) {
+ action[len++] = MAKE_INVAL_OP(XE_GUC_TLB_INVAL_FULL);
+ } else {
+ u64 orig_start = start;
+ u64 length = end - start;
+ u64 align;
+
+ if (length < SZ_4K)
+ length = SZ_4K;
+
+ /*
+ * We need to invalidate a higher granularity if start address
+ * is not aligned to length. When start is not aligned with
+ * length we need to find the length large enough to create an
+ * address mask covering the required range.
+ */
+ align = roundup_pow_of_two(length);
+ start = ALIGN_DOWN(start, align);
+ end = ALIGN(end, align);
+ length = align;
+ while (start + length < end) {
+ length <<= 1;
+ start = ALIGN_DOWN(orig_start, length);
+ }
+
+ /*
+ * Minimum invalidation size for a 2MB page that the hardware
+ * expects is 16MB
+ */
+ if (length >= SZ_2M) {
+ length = max_t(u64, SZ_16M, length);
+ start = ALIGN_DOWN(orig_start, length);
+ }
+
+ xe_gt_assert(gt, length >= SZ_4K);
+ xe_gt_assert(gt, is_power_of_2(length));
+ xe_gt_assert(gt, !(length & GENMASK(ilog2(SZ_16M) - 1,
+ ilog2(SZ_2M) + 1)));
+ xe_gt_assert(gt, IS_ALIGNED(start, length));
+
+ action[len++] = MAKE_INVAL_OP(XE_GUC_TLB_INVAL_PAGE_SELECTIVE);
+ action[len++] = asid;
+ action[len++] = lower_32_bits(start);
+ action[len++] = upper_32_bits(start);
+ action[len++] = ilog2(length) - ilog2(SZ_4K);
+ }
+
+ xe_gt_assert(gt, len <= MAX_TLB_INVALIDATION_LEN);
+
+ return send_tlb_invalidation(>->uc.guc, action, len);
+}
+
static void xe_gt_tlb_invalidation_fence_prep(struct xe_gt *gt,
struct xe_gt_tlb_invalidation_fence *fence)
{
@@ -209,33 +282,16 @@ static void xe_gt_tlb_invalidation_fence_prep(struct xe_gt *gt,
XE_GUC_TLB_INVAL_MODE_HEAVY << XE_GUC_TLB_INVAL_MODE_SHIFT | \
XE_GUC_TLB_INVAL_FLUSH_CACHE)
-/**
- * xe_gt_tlb_invalidation_guc - Issue a TLB invalidation on this GT for the GuC
- * @gt: graphics tile
- * @fence: invalidation fence which will be signal on TLB invalidation
- * completion
- *
- * Issue a TLB invalidation for the GuC. Completion of TLB is asynchronous and
- * caller can use the invalidation fence to wait for completion.
- *
- * Return: 0 on success, negative error code on error
- */
-static int xe_gt_tlb_invalidation_guc(struct xe_gt *gt,
- struct xe_gt_tlb_invalidation_fence *fence)
+static int __xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt,
+ struct xe_gt_tlb_invalidation_fence *fence)
{
- u32 action[] = {
- XE_GUC_ACTION_TLB_INVALIDATION,
- 0, /* seqno, replaced in send_tlb_invalidation */
- MAKE_INVAL_OP(XE_GUC_TLB_INVAL_GUC),
- };
int ret;
mutex_lock(>->tlb_invalidation.seqno_lock);
xe_gt_tlb_invalidation_fence_prep(gt, fence);
- ret = send_tlb_invalidation(>->uc.guc, fence, action,
- ARRAY_SIZE(action));
+ ret = send_tlb_invalidation_ggtt(gt, fence->seqno);
if (ret < 0)
invalidation_fence_signal(gt_to_xe(gt), fence);
@@ -263,7 +319,7 @@ int xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt)
int ret;
xe_gt_tlb_invalidation_fence_init(gt, &fence);
- ret = xe_gt_tlb_invalidation_guc(gt, &fence);
+ ret = __xe_gt_tlb_invalidation_ggtt(gt, &fence);
if (ret < 0)
return ret;
@@ -310,75 +366,21 @@ int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
u64 start, u64 end, u32 asid)
{
struct xe_device *xe = gt_to_xe(gt);
-#define MAX_TLB_INVALIDATION_LEN 7
- u32 action[MAX_TLB_INVALIDATION_LEN];
- int len = 0;
int ret;
xe_gt_assert(gt, fence);
/* Execlists not supported */
- if (gt_to_xe(gt)->info.force_execlist) {
+ if (xe->info.force_execlist) {
__invalidation_fence_signal(xe, fence);
return 0;
}
- action[len++] = XE_GUC_ACTION_TLB_INVALIDATION;
- action[len++] = 0; /* seqno, replaced in send_tlb_invalidation */
- if (!xe->info.has_range_tlb_invalidation) {
- action[len++] = MAKE_INVAL_OP(XE_GUC_TLB_INVAL_FULL);
- } else {
- u64 orig_start = start;
- u64 length = end - start;
- u64 align;
-
- if (length < SZ_4K)
- length = SZ_4K;
-
- /*
- * We need to invalidate a higher granularity if start address
- * is not aligned to length. When start is not aligned with
- * length we need to find the length large enough to create an
- * address mask covering the required range.
- */
- align = roundup_pow_of_two(length);
- start = ALIGN_DOWN(start, align);
- end = ALIGN(end, align);
- length = align;
- while (start + length < end) {
- length <<= 1;
- start = ALIGN_DOWN(orig_start, length);
- }
-
- /*
- * Minimum invalidation size for a 2MB page that the hardware
- * expects is 16MB
- */
- if (length >= SZ_2M) {
- length = max_t(u64, SZ_16M, length);
- start = ALIGN_DOWN(orig_start, length);
- }
-
- xe_gt_assert(gt, length >= SZ_4K);
- xe_gt_assert(gt, is_power_of_2(length));
- xe_gt_assert(gt, !(length & GENMASK(ilog2(SZ_16M) - 1,
- ilog2(SZ_2M) + 1)));
- xe_gt_assert(gt, IS_ALIGNED(start, length));
-
- action[len++] = MAKE_INVAL_OP(XE_GUC_TLB_INVAL_PAGE_SELECTIVE);
- action[len++] = asid;
- action[len++] = lower_32_bits(start);
- action[len++] = upper_32_bits(start);
- action[len++] = ilog2(length) - ilog2(SZ_4K);
- }
-
- xe_gt_assert(gt, len <= MAX_TLB_INVALIDATION_LEN);
-
mutex_lock(>->tlb_invalidation.seqno_lock);
xe_gt_tlb_invalidation_fence_prep(gt, fence);
- ret = send_tlb_invalidation(>->uc.guc, fence, action, len);
+ ret = send_tlb_invalidation_ppgtt(gt, start, end, asid, fence->seqno);
if (ret < 0)
invalidation_fence_signal(xe, fence);
--
2.34.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v2 07/11] drm/xe: Add xe_guc_tlb_invalidation layer
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (5 preceding siblings ...)
2024-07-08 4:03 ` [PATCH v2 06/11] drm/xe: Add send tlb invalidation helpers Matthew Brost
@ 2024-07-08 4:03 ` Matthew Brost
2024-07-09 21:31 ` Michal Wajdeczko
2024-07-08 4:03 ` [PATCH v2 08/11] drm/xe: Add multi-client support for GT TLB invalidations Matthew Brost
` (12 subsequent siblings)
19 siblings, 1 reply; 32+ messages in thread
From: Matthew Brost @ 2024-07-08 4:03 UTC (permalink / raw)
To: intel-xe; +Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
Move GuC specific TLB invalidation into dedicated layer.
v2:
- Remove XXX comment
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
drivers/gpu/drm/xe/Makefile | 1 +
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 121 +--------------
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 4 +-
.../gpu/drm/xe/xe_gt_tlb_invalidation_types.h | 13 ++
drivers/gpu/drm/xe/xe_gt_types.h | 2 +
drivers/gpu/drm/xe/xe_guc_ct.c | 2 +-
drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c | 143 ++++++++++++++++++
drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h | 18 +++
8 files changed, 186 insertions(+), 118 deletions(-)
create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h
diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
index 628c245c4822..21f4ddf1a946 100644
--- a/drivers/gpu/drm/xe/Makefile
+++ b/drivers/gpu/drm/xe/Makefile
@@ -83,6 +83,7 @@ xe-y += xe_bb.o \
xe_guc_log.o \
xe_guc_pc.o \
xe_guc_submit.o \
+ xe_guc_tlb_invalidation.o \
xe_heci_gsc.o \
xe_hw_engine.o \
xe_hw_engine_class_sysfs.o \
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
index 79d1ed138db5..4b7b5f8205f9 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
@@ -7,13 +7,12 @@
#include "xe_gt_tlb_invalidation.h"
-#include "abi/guc_actions_abi.h"
#include "xe_device.h"
#include "xe_force_wake.h"
#include "xe_gt.h"
#include "xe_gt_printk.h"
-#include "xe_guc.h"
#include "xe_guc_ct.h"
+#include "xe_guc_tlb_invalidation.h"
#include "xe_mmio.h"
#include "xe_sriov.h"
#include "xe_trace.h"
@@ -85,6 +84,7 @@ int xe_gt_tlb_invalidation_init(struct xe_gt *gt)
spin_lock_init(>->tlb_invalidation.fence_lock);
INIT_DELAYED_WORK(>->tlb_invalidation.fence_tdr,
xe_gt_tlb_fence_timeout);
+ gt->tlb_invalidation.ops = xe_guc_tlb_invalidation_get_ops(>->uc.guc);
return drmm_mutex_init(>_to_xe(gt)->drm,
>->tlb_invalidation.seqno_lock);
@@ -157,97 +157,16 @@ static bool tlb_invalidation_seqno_past(struct xe_gt *gt, int seqno)
return seqno_recv >= seqno;
}
-static int send_tlb_invalidation(struct xe_guc *guc, u32 *action, int len)
-{
- struct xe_gt *gt = guc_to_gt(guc);
-
- xe_gt_assert(gt, action[1]); /* Seqno */
- lockdep_assert_held(>->tlb_invalidation.seqno_lock);
-
- /*
- * XXX: The seqno algorithm relies on TLB invalidation being processed
- * in order which they currently are, if that changes the algorithm will
- * need to be updated.
- */
-
- return xe_guc_ct_send(&guc->ct, action, len,
- G2H_LEN_DW_TLB_INVALIDATE, 1);
-}
-
-#define MAKE_INVAL_OP(type) ((type << XE_GUC_TLB_INVAL_TYPE_SHIFT) | \
- XE_GUC_TLB_INVAL_MODE_HEAVY << XE_GUC_TLB_INVAL_MODE_SHIFT | \
- XE_GUC_TLB_INVAL_FLUSH_CACHE)
-
static int send_tlb_invalidation_ggtt(struct xe_gt *gt, int seqno)
{
- u32 action[] = {
- XE_GUC_ACTION_TLB_INVALIDATION,
- seqno,
- MAKE_INVAL_OP(XE_GUC_TLB_INVAL_GUC),
- };
-
- return send_tlb_invalidation(>->uc.guc, action, ARRAY_SIZE(action));
+ return gt->tlb_invalidation.ops->tlb_invalidation_ggtt(gt, seqno);
}
static int send_tlb_invalidation_ppgtt(struct xe_gt *gt, u64 start, u64 end,
u32 asid, int seqno)
{
-#define MAX_TLB_INVALIDATION_LEN 7
- u32 action[MAX_TLB_INVALIDATION_LEN];
- int len = 0;
-
- action[len++] = XE_GUC_ACTION_TLB_INVALIDATION;
- action[len++] = seqno;
- if (!gt_to_xe(gt)->info.has_range_tlb_invalidation) {
- action[len++] = MAKE_INVAL_OP(XE_GUC_TLB_INVAL_FULL);
- } else {
- u64 orig_start = start;
- u64 length = end - start;
- u64 align;
-
- if (length < SZ_4K)
- length = SZ_4K;
-
- /*
- * We need to invalidate a higher granularity if start address
- * is not aligned to length. When start is not aligned with
- * length we need to find the length large enough to create an
- * address mask covering the required range.
- */
- align = roundup_pow_of_two(length);
- start = ALIGN_DOWN(start, align);
- end = ALIGN(end, align);
- length = align;
- while (start + length < end) {
- length <<= 1;
- start = ALIGN_DOWN(orig_start, length);
- }
-
- /*
- * Minimum invalidation size for a 2MB page that the hardware
- * expects is 16MB
- */
- if (length >= SZ_2M) {
- length = max_t(u64, SZ_16M, length);
- start = ALIGN_DOWN(orig_start, length);
- }
-
- xe_gt_assert(gt, length >= SZ_4K);
- xe_gt_assert(gt, is_power_of_2(length));
- xe_gt_assert(gt, !(length & GENMASK(ilog2(SZ_16M) - 1,
- ilog2(SZ_2M) + 1)));
- xe_gt_assert(gt, IS_ALIGNED(start, length));
-
- action[len++] = MAKE_INVAL_OP(XE_GUC_TLB_INVAL_PAGE_SELECTIVE);
- action[len++] = asid;
- action[len++] = lower_32_bits(start);
- action[len++] = upper_32_bits(start);
- action[len++] = ilog2(length) - ilog2(SZ_4K);
- }
-
- xe_gt_assert(gt, len <= MAX_TLB_INVALIDATION_LEN);
-
- return send_tlb_invalidation(>->uc.guc, action, len);
+ return gt->tlb_invalidation.ops->tlb_invalidation_ppgtt(gt, start, end,
+ asid, seqno);
}
static void xe_gt_tlb_invalidation_fence_prep(struct xe_gt *gt,
@@ -278,10 +197,6 @@ static void xe_gt_tlb_invalidation_fence_prep(struct xe_gt *gt,
gt->tlb_invalidation.seqno = 1;
}
-#define MAKE_INVAL_OP(type) ((type << XE_GUC_TLB_INVAL_TYPE_SHIFT) | \
- XE_GUC_TLB_INVAL_MODE_HEAVY << XE_GUC_TLB_INVAL_MODE_SHIFT | \
- XE_GUC_TLB_INVAL_FLUSH_CACHE)
-
static int __xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt,
struct xe_gt_tlb_invalidation_fence *fence)
{
@@ -420,7 +335,7 @@ int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
*
* Update recv seqno, signal any GT TLB invalidation fences, and restart TDR
*/
-static void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt, int seqno)
+void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt, int seqno)
{
struct xe_device *xe = gt_to_xe(gt);
struct xe_gt_tlb_invalidation_fence *fence, *next;
@@ -469,30 +384,6 @@ static void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt, int seqno)
spin_unlock_irqrestore(>->tlb_invalidation.pending_lock, flags);
}
-/**
- * xe_guc_tlb_invalidation_done_handler - TLB invalidation done handler
- * @guc: guc
- * @msg: message indicating TLB invalidation done
- * @len: length of message
- *
- * Parse seqno of TLB invalidation, wake any waiters for seqno, and signal any
- * invalidation fences for seqno. Algorithm for this depends on seqno being
- * received in-order and asserts this assumption.
- *
- * Return: 0 on success, -EPROTO for malformed messages.
- */
-int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
-{
- struct xe_gt *gt = guc_to_gt(guc);
-
- if (unlikely(len != 1))
- return -EPROTO;
-
- xe_gt_tlb_invalidation_done_handler(gt, msg[0]);
-
- return 0;
-}
-
static const char *
invalidation_fence_get_driver_name(struct dma_fence *dma_fence)
{
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
index cbf49b3d0265..ee532ad64aac 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
@@ -11,7 +11,6 @@
#include "xe_gt_tlb_invalidation_types.h"
struct xe_gt;
-struct xe_guc;
struct xe_vma;
int xe_gt_tlb_invalidation_init(struct xe_gt *gt);
@@ -23,11 +22,12 @@ int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
struct xe_gt_tlb_invalidation_fence *fence,
u64 start, u64 end, u32 asid);
-int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len);
void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
struct xe_gt_tlb_invalidation_fence *fence);
+void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt, int seqno);
+
static inline void
xe_gt_tlb_invalidation_fence_wait(struct xe_gt_tlb_invalidation_fence *fence)
{
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
index 934c828efe31..1abb8692d14b 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
@@ -8,6 +8,8 @@
#include <linux/dma-fence.h>
+struct xe_gt;
+
/**
* struct xe_gt_tlb_invalidation_fence - XE GT TLB invalidation fence
*
@@ -25,4 +27,15 @@ struct xe_gt_tlb_invalidation_fence {
ktime_t invalidation_time;
};
+/**
+ * struct xe_gt_tlb_invalidation_ops - Xe GT TLB invalidation operations
+ */
+struct xe_gt_tlb_invalidation_ops {
+ /** @tlb_invalidation_ggtt: TLB invalidation GGTT */
+ int (*tlb_invalidation_ggtt)(struct xe_gt *gt, int seqno);
+ /** @tlb_invalidation_ppgtt: TLB invalidation PPGTT */
+ int (*tlb_invalidation_ppgtt)(struct xe_gt *gt, u64 start, u64 end,
+ u32 asid, int seqno);
+};
+
#endif
diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
index fb280f058cdc..4b9740a68457 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -169,6 +169,8 @@ struct xe_gt {
/** @tlb_invalidation: TLB invalidation state */
struct {
+ /** @tlb_invalidation.ops: TLB invalidation ops */
+ const struct xe_gt_tlb_invalidation_ops *ops;
/** @tlb_invalidation.seqno_lock: TLB invalidation seqno lock */
struct mutex seqno_lock;
/**
diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
index 7d2e937da1d8..b09423590f62 100644
--- a/drivers/gpu/drm/xe/xe_guc_ct.c
+++ b/drivers/gpu/drm/xe/xe_guc_ct.c
@@ -23,10 +23,10 @@
#include "xe_gt_printk.h"
#include "xe_gt_sriov_pf_control.h"
#include "xe_gt_sriov_pf_monitor.h"
-#include "xe_gt_tlb_invalidation.h"
#include "xe_guc.h"
#include "xe_guc_relay.h"
#include "xe_guc_submit.h"
+#include "xe_guc_tlb_invalidation.h"
#include "xe_map.h"
#include "xe_pm.h"
#include "xe_trace_guc.h"
diff --git a/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
new file mode 100644
index 000000000000..b6fd61bb77ba
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
@@ -0,0 +1,143 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#include "abi/guc_actions_abi.h"
+
+#include "xe_assert.h"
+#include "xe_device.h"
+#include "xe_gt.h"
+#include "xe_gt_printk.h"
+#include "xe_gt_tlb_invalidation.h"
+#include "xe_guc.h"
+#include "xe_guc_ct.h"
+#include "xe_guc_tlb_invalidation.h"
+
+static int send_tlb_invalidation(struct xe_guc *guc, u32 *action, int len)
+{
+ struct xe_gt *gt = guc_to_gt(guc);
+
+ xe_gt_assert(gt, action[1]); /* Seqno */
+ lockdep_assert_held(>->tlb_invalidation.seqno_lock);
+
+ return xe_guc_ct_send(&guc->ct, action, len,
+ G2H_LEN_DW_TLB_INVALIDATE, 1);
+}
+
+#define MAKE_INVAL_OP(type) ((type << XE_GUC_TLB_INVAL_TYPE_SHIFT) | \
+ XE_GUC_TLB_INVAL_MODE_HEAVY << XE_GUC_TLB_INVAL_MODE_SHIFT | \
+ XE_GUC_TLB_INVAL_FLUSH_CACHE)
+
+static int send_tlb_invalidation_ggtt(struct xe_gt *gt, int seqno)
+{
+ u32 action[] = {
+ XE_GUC_ACTION_TLB_INVALIDATION,
+ seqno,
+ MAKE_INVAL_OP(XE_GUC_TLB_INVAL_GUC),
+ };
+
+ return send_tlb_invalidation(>->uc.guc, action, ARRAY_SIZE(action));
+}
+
+static int send_tlb_invalidation_ppgtt(struct xe_gt *gt, u64 start, u64 end,
+ u32 asid, int seqno)
+{
+#define MAX_TLB_INVALIDATION_LEN 7
+ u32 action[MAX_TLB_INVALIDATION_LEN];
+ int len = 0;
+
+ action[len++] = XE_GUC_ACTION_TLB_INVALIDATION;
+ action[len++] = seqno;
+ if (!gt_to_xe(gt)->info.has_range_tlb_invalidation) {
+ action[len++] = MAKE_INVAL_OP(XE_GUC_TLB_INVAL_FULL);
+ } else {
+ u64 orig_start = start;
+ u64 length = end - start;
+ u64 align;
+
+ if (length < SZ_4K)
+ length = SZ_4K;
+
+ /*
+ * We need to invalidate a higher granularity if start address
+ * is not aligned to length. When start is not aligned with
+ * length we need to find the length large enough to create an
+ * address mask covering the required range.
+ */
+ align = roundup_pow_of_two(length);
+ start = ALIGN_DOWN(start, align);
+ end = ALIGN(end, align);
+ length = align;
+ while (start + length < end) {
+ length <<= 1;
+ start = ALIGN_DOWN(orig_start, length);
+ }
+
+ /*
+ * Minimum invalidation size for a 2MB page that the hardware
+ * expects is 16MB
+ */
+ if (length >= SZ_2M) {
+ length = max_t(u64, SZ_16M, length);
+ start = ALIGN_DOWN(orig_start, length);
+ }
+
+ xe_gt_assert(gt, length >= SZ_4K);
+ xe_gt_assert(gt, is_power_of_2(length));
+ xe_gt_assert(gt, !(length & GENMASK(ilog2(SZ_16M) - 1,
+ ilog2(SZ_2M) + 1)));
+ xe_gt_assert(gt, IS_ALIGNED(start, length));
+
+ action[len++] = MAKE_INVAL_OP(XE_GUC_TLB_INVAL_PAGE_SELECTIVE);
+ action[len++] = asid;
+ action[len++] = lower_32_bits(start);
+ action[len++] = upper_32_bits(start);
+ action[len++] = ilog2(length) - ilog2(SZ_4K);
+ }
+
+ xe_gt_assert(gt, len <= MAX_TLB_INVALIDATION_LEN);
+
+ return send_tlb_invalidation(>->uc.guc, action, len);
+}
+
+static const struct xe_gt_tlb_invalidation_ops guc_tlb_invalidation_ops = {
+ .tlb_invalidation_ppgtt = send_tlb_invalidation_ppgtt,
+ .tlb_invalidation_ggtt = send_tlb_invalidation_ggtt,
+};
+
+/**
+ * xe_guc_tlb_invalidation_get_ops - Get Guc TLB invalidation ops
+ * @guc: guc
+ *
+ * Return: xe_gt_tlb_invalidation_ops for GuC TLB invalidation
+ */
+const struct xe_gt_tlb_invalidation_ops*
+xe_guc_tlb_invalidation_get_ops(struct xe_guc *guc)
+{
+ return &guc_tlb_invalidation_ops;
+}
+
+/**
+ * xe_guc_tlb_invalidation_done_handler - GuC TLB invalidation done handler
+ * @guc: guc
+ * @msg: message indicating TLB invalidation done
+ * @len: length of message
+ *
+ * Parse seqno of TLB invalidation, wake any waiters for seqno, and signal any
+ * invalidation fences for seqno. Algorithm for this depends on seqno being
+ * received in-order and asserts this assumption.
+ *
+ * Return: 0 on success, -EPROTO for malformed messages.
+ */
+int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
+{
+ struct xe_gt *gt = guc_to_gt(guc);
+
+ if (unlikely(len != 1))
+ return -EPROTO;
+
+ xe_gt_tlb_invalidation_done_handler(gt, msg[0]);
+
+ return 0;
+}
diff --git a/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h b/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h
new file mode 100644
index 000000000000..44408aae6955
--- /dev/null
+++ b/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Copyright © 2024 Intel Corporation
+ */
+
+#ifndef _XE_GUC_TLB_INVALIDATION_H_
+#define _XE_GUC_TLB_INVALIDATION_H_
+
+struct xe_guc;
+
+#include <linux/types.h>
+
+const struct xe_gt_tlb_invalidation_ops*
+xe_guc_tlb_invalidation_get_ops(struct xe_guc *guc);
+
+int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len);
+
+#endif /* _XE_GUC_TLB_INVALIDATION_H_ */
--
2.34.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v2 08/11] drm/xe: Add multi-client support for GT TLB invalidations
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (6 preceding siblings ...)
2024-07-08 4:03 ` [PATCH v2 07/11] drm/xe: Add xe_guc_tlb_invalidation layer Matthew Brost
@ 2024-07-08 4:03 ` Matthew Brost
2024-07-08 4:03 ` [PATCH v2 09/11] drm/xe: Add GT TLB invalidation coalescing Matthew Brost
` (11 subsequent siblings)
19 siblings, 0 replies; 32+ messages in thread
From: Matthew Brost @ 2024-07-08 4:03 UTC (permalink / raw)
To: intel-xe; +Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
Add multi-client support for GT TLB invalidations as future platforms
may have multiple sets of TLBs.
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 86 +++++++++++++++----
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 4 +-
.../gpu/drm/xe/xe_gt_tlb_invalidation_types.h | 5 ++
drivers/gpu/drm/xe/xe_gt_types.h | 5 +-
drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c | 4 +-
5 files changed, 82 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
index 4b7b5f8205f9..15941e803d8f 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
@@ -52,8 +52,9 @@ static void xe_gt_tlb_fence_timeout(struct work_struct *work)
break;
trace_xe_gt_tlb_invalidation_fence_timeout(xe, fence);
- xe_gt_err(gt, "TLB invalidation fence timeout, seqno=%d recv=%d",
- fence->seqno, gt->tlb_invalidation.seqno_recv);
+ xe_gt_err(gt, "TLB invalidation fence timeout, seqno=%d, guc_recv=%d",
+ fence->seqno,
+ gt->tlb_invalidation.seqno_recv[XE_GT_TLB_INVALIDATION_CLIENT_GUC]);
list_del(&fence->link);
fence->base.error = -ETIME;
@@ -84,7 +85,11 @@ int xe_gt_tlb_invalidation_init(struct xe_gt *gt)
spin_lock_init(>->tlb_invalidation.fence_lock);
INIT_DELAYED_WORK(>->tlb_invalidation.fence_tdr,
xe_gt_tlb_fence_timeout);
- gt->tlb_invalidation.ops = xe_guc_tlb_invalidation_get_ops(>->uc.guc);
+
+ /* Execlists not supported */
+ if (!gt_to_xe(gt)->info.force_execlist)
+ gt->tlb_invalidation.ops[XE_GT_TLB_INVALIDATION_CLIENT_GUC] =
+ xe_guc_tlb_invalidation_get_ops(>->uc.guc);
return drmm_mutex_init(>_to_xe(gt)->drm,
>->tlb_invalidation.seqno_lock);
@@ -114,6 +119,7 @@ invalidation_fence_signal(struct xe_device *xe, struct xe_gt_tlb_invalidation_fe
void xe_gt_tlb_invalidation_reset(struct xe_gt *gt)
{
struct xe_gt_tlb_invalidation_fence *fence, *next;
+ enum xe_gt_tlb_invalidation_clients client;
int pending_seqno;
/*
@@ -135,7 +141,9 @@ void xe_gt_tlb_invalidation_reset(struct xe_gt *gt)
pending_seqno = TLB_INVALIDATION_SEQNO_MAX - 1;
else
pending_seqno = gt->tlb_invalidation.seqno - 1;
- WRITE_ONCE(gt->tlb_invalidation.seqno_recv, pending_seqno);
+ for (client = 0; client < XE_GT_TLB_INVALIDATION_CLIENT_MAX; ++client)
+ WRITE_ONCE(gt->tlb_invalidation.seqno_recv[client],
+ pending_seqno);
list_for_each_entry_safe(fence, next,
>->tlb_invalidation.pending_fences, link)
@@ -144,9 +152,11 @@ void xe_gt_tlb_invalidation_reset(struct xe_gt *gt)
mutex_unlock(>->tlb_invalidation.seqno_lock);
}
-static bool tlb_invalidation_seqno_past(struct xe_gt *gt, int seqno)
+static bool __tlb_invalidation_seqno_past(struct xe_gt *gt,
+ enum xe_gt_tlb_invalidation_clients client,
+ int seqno)
{
- int seqno_recv = READ_ONCE(gt->tlb_invalidation.seqno_recv);
+ int seqno_recv = READ_ONCE(gt->tlb_invalidation.seqno_recv[client]);
if (seqno - seqno_recv < -(TLB_INVALIDATION_SEQNO_MAX / 2))
return false;
@@ -157,16 +167,59 @@ static bool tlb_invalidation_seqno_past(struct xe_gt *gt, int seqno)
return seqno_recv >= seqno;
}
+static bool tlb_invalidation_seqno_past(struct xe_gt *gt, int seqno)
+{
+ enum xe_gt_tlb_invalidation_clients client;
+
+ for (client = 0; client < XE_GT_TLB_INVALIDATION_CLIENT_MAX; ++client)
+ if (!__tlb_invalidation_seqno_past(gt, client, seqno))
+ return false;
+
+ return true;
+}
+
static int send_tlb_invalidation_ggtt(struct xe_gt *gt, int seqno)
{
- return gt->tlb_invalidation.ops->tlb_invalidation_ggtt(gt, seqno);
+ enum xe_gt_tlb_invalidation_clients client;
+ int ret;
+
+ for (client = 0; client < XE_GT_TLB_INVALIDATION_CLIENT_MAX; ++client) {
+ const struct xe_gt_tlb_invalidation_ops *ops =
+ gt->tlb_invalidation.ops[client];
+
+ if (!ops || !ops->tlb_invalidation_ggtt) {
+ xe_gt_tlb_invalidation_done_handler(gt, client, seqno);
+ } else {
+ ret = ops->tlb_invalidation_ggtt(gt, seqno);
+ if (ret < 0)
+ return ret;
+ }
+ }
+
+ return 0;
}
static int send_tlb_invalidation_ppgtt(struct xe_gt *gt, u64 start, u64 end,
u32 asid, int seqno)
{
- return gt->tlb_invalidation.ops->tlb_invalidation_ppgtt(gt, start, end,
- asid, seqno);
+ enum xe_gt_tlb_invalidation_clients client;
+ int ret;
+
+ for (client = 0; client < XE_GT_TLB_INVALIDATION_CLIENT_MAX; ++client) {
+ const struct xe_gt_tlb_invalidation_ops *ops =
+ gt->tlb_invalidation.ops[client];
+
+ if (!ops || !ops->tlb_invalidation_ppgtt) {
+ xe_gt_tlb_invalidation_done_handler(gt, client, seqno);
+ } else {
+ ret = ops->tlb_invalidation_ppgtt(gt, start, end, asid,
+ seqno);
+ if (ret < 0)
+ return ret;
+ }
+ }
+
+ return 0;
}
static void xe_gt_tlb_invalidation_fence_prep(struct xe_gt *gt,
@@ -285,12 +338,6 @@ int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
xe_gt_assert(gt, fence);
- /* Execlists not supported */
- if (xe->info.force_execlist) {
- __invalidation_fence_signal(xe, fence);
- return 0;
- }
-
mutex_lock(>->tlb_invalidation.seqno_lock);
xe_gt_tlb_invalidation_fence_prep(gt, fence);
@@ -331,11 +378,14 @@ int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
/**
* xe_gt_tlb_invalidation_done_handler - GT TLB invalidation done handler
* @gt: gt
+ * @client: client of invalidation that is done
* @seqno: seqno of invalidation that is done
*
* Update recv seqno, signal any GT TLB invalidation fences, and restart TDR
*/
-void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt, int seqno)
+void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt,
+ enum xe_gt_tlb_invalidation_clients client,
+ int seqno)
{
struct xe_device *xe = gt_to_xe(gt);
struct xe_gt_tlb_invalidation_fence *fence, *next;
@@ -357,12 +407,12 @@ void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt, int seqno)
* process_g2h_msg().
*/
spin_lock_irqsave(>->tlb_invalidation.pending_lock, flags);
- if (tlb_invalidation_seqno_past(gt, seqno)) {
+ if (__tlb_invalidation_seqno_past(gt, client, seqno)) {
spin_unlock_irqrestore(>->tlb_invalidation.pending_lock, flags);
return;
}
- WRITE_ONCE(gt->tlb_invalidation.seqno_recv, seqno);
+ WRITE_ONCE(gt->tlb_invalidation.seqno_recv[client], seqno);
list_for_each_entry_safe(fence, next,
>->tlb_invalidation.pending_fences, link) {
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
index ee532ad64aac..df22d9b4d85c 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
@@ -26,7 +26,9 @@ int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
struct xe_gt_tlb_invalidation_fence *fence);
-void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt, int seqno);
+void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt,
+ enum xe_gt_tlb_invalidation_clients client,
+ int seqno);
static inline void
xe_gt_tlb_invalidation_fence_wait(struct xe_gt_tlb_invalidation_fence *fence)
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
index 1abb8692d14b..1208edf7a5a4 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
@@ -38,4 +38,9 @@ struct xe_gt_tlb_invalidation_ops {
u32 asid, int seqno);
};
+enum xe_gt_tlb_invalidation_clients {
+ XE_GT_TLB_INVALIDATION_CLIENT_GUC = 0,
+ XE_GT_TLB_INVALIDATION_CLIENT_MAX,
+};
+
#endif
diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
index 4b9740a68457..9a2f1e8b74e1 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -10,6 +10,7 @@
#include "xe_gt_idle_types.h"
#include "xe_gt_sriov_pf_types.h"
#include "xe_gt_sriov_vf_types.h"
+#include "xe_gt_tlb_invalidation_types.h"
#include "xe_hw_engine_types.h"
#include "xe_hw_fence_types.h"
#include "xe_oa.h"
@@ -170,7 +171,7 @@ struct xe_gt {
/** @tlb_invalidation: TLB invalidation state */
struct {
/** @tlb_invalidation.ops: TLB invalidation ops */
- const struct xe_gt_tlb_invalidation_ops *ops;
+ const struct xe_gt_tlb_invalidation_ops *ops[XE_GT_TLB_INVALIDATION_CLIENT_MAX];
/** @tlb_invalidation.seqno_lock: TLB invalidation seqno lock */
struct mutex seqno_lock;
/**
@@ -184,7 +185,7 @@ struct xe_gt {
* protected by @tlb_invalidation.seqno_lock (send) and
* @tlb_invalidation.pending_lock (send, recv)
*/
- int seqno_recv;
+ int seqno_recv[XE_GT_TLB_INVALIDATION_CLIENT_MAX];
/**
* @tlb_invalidation.pending_fences: list of pending fences waiting TLB
* invaliations, protected by @tlb_invalidation.seqno_lock
diff --git a/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
index b6fd61bb77ba..f6f38dd99d90 100644
--- a/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
+++ b/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
@@ -137,7 +137,9 @@ int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
if (unlikely(len != 1))
return -EPROTO;
- xe_gt_tlb_invalidation_done_handler(gt, msg[0]);
+ xe_gt_tlb_invalidation_done_handler(gt,
+ XE_GT_TLB_INVALIDATION_CLIENT_GUC,
+ msg[0]);
return 0;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v2 09/11] drm/xe: Add GT TLB invalidation coalescing
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (7 preceding siblings ...)
2024-07-08 4:03 ` [PATCH v2 08/11] drm/xe: Add multi-client support for GT TLB invalidations Matthew Brost
@ 2024-07-08 4:03 ` Matthew Brost
2024-07-08 4:03 ` [PATCH v2 10/11] drm/xe: Add GT TLB invalidation coalesce tracepoints Matthew Brost
` (10 subsequent siblings)
19 siblings, 0 replies; 32+ messages in thread
From: Matthew Brost @ 2024-07-08 4:03 UTC (permalink / raw)
To: intel-xe; +Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
It is shown that too many pending GT TLB invalidations can overwhelm the
hardware (GuC firmware). Add a watermark if too many GT TLB
invalidations are pending which holds GT TLB invalidations in the KMD
until pressure is relieved. While holding GT TLB invalidations coalesce
invalidations in the VM (PPGTT) or GGTT structures.
v2:
- Reorder gt_tlb_invalidation_fini and seqno mutex init (CI, bat)
- Fix xe_gt_tlb_invalidation_coalesce_init (CI, hooks)
- Add missing newline (CI, checkpatch)
- Fix parenthesis alignment (CI, checkpatch)
- Move some asserts from tracepoint patch into this patch
- Move coalesce init/fini to xe_ggtt_init/ggtt_fini (CI)
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
drivers/gpu/drm/xe/xe_ggtt.c | 21 +-
drivers/gpu/drm/xe/xe_ggtt_types.h | 5 +
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 268 ++++++++++++++++--
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 10 +-
.../gpu/drm/xe/xe_gt_tlb_invalidation_types.h | 23 ++
drivers/gpu/drm/xe/xe_gt_types.h | 21 +-
drivers/gpu/drm/xe/xe_pt.c | 7 +-
drivers/gpu/drm/xe/xe_vm.c | 19 +-
drivers/gpu/drm/xe/xe_vm_types.h | 3 +
9 files changed, 349 insertions(+), 28 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_ggtt.c b/drivers/gpu/drm/xe/xe_ggtt.c
index 0cdbc1296e88..c32d0eb1b9bd 100644
--- a/drivers/gpu/drm/xe/xe_ggtt.c
+++ b/drivers/gpu/drm/xe/xe_ggtt.c
@@ -137,6 +137,11 @@ static void ggtt_fini(struct drm_device *drm, void *arg)
struct xe_ggtt *ggtt = arg;
ggtt->scratch = NULL;
+ xe_gt_tlb_invalidation_coalesce_fini(ggtt->tile->primary_gt,
+ &ggtt->coalesce[PRIMARY_COALESCE_ID]);
+ if (ggtt->tile->media_gt)
+ xe_gt_tlb_invalidation_coalesce_fini(ggtt->tile->media_gt,
+ &ggtt->coalesce[MEDIA_COALESCE_ID]);
}
static void primelockdep(struct xe_ggtt *ggtt)
@@ -289,20 +294,26 @@ int xe_ggtt_init(struct xe_ggtt *ggtt)
xe_ggtt_initial_clear(ggtt);
+ xe_gt_tlb_invalidation_coalesce_init(&ggtt->coalesce[PRIMARY_COALESCE_ID],
+ XE_GT_TLB_INVALIDATION_COALESCE_GGTT);
+ xe_gt_tlb_invalidation_coalesce_init(&ggtt->coalesce[MEDIA_COALESCE_ID],
+ XE_GT_TLB_INVALIDATION_COALESCE_GGTT);
+
return drmm_add_action_or_reset(&xe->drm, ggtt_fini, ggtt);
err:
ggtt->scratch = NULL;
return err;
}
-static void ggtt_invalidate_gt_tlb(struct xe_gt *gt)
+static void ggtt_invalidate_gt_tlb(struct xe_gt *gt,
+ struct xe_gt_tlb_invalidation_coalesce *coalesce)
{
int err;
if (!gt)
return;
- err = xe_gt_tlb_invalidation_ggtt(gt);
+ err = xe_gt_tlb_invalidation_ggtt(gt, coalesce);
if (err)
drm_warn(>_to_xe(gt)->drm, "xe_gt_tlb_invalidation_ggtt error=%d", err);
}
@@ -310,8 +321,10 @@ static void ggtt_invalidate_gt_tlb(struct xe_gt *gt)
static void xe_ggtt_invalidate(struct xe_ggtt *ggtt)
{
/* Each GT in a tile has its own TLB to cache GGTT lookups */
- ggtt_invalidate_gt_tlb(ggtt->tile->primary_gt);
- ggtt_invalidate_gt_tlb(ggtt->tile->media_gt);
+ ggtt_invalidate_gt_tlb(ggtt->tile->primary_gt,
+ &ggtt->coalesce[PRIMARY_COALESCE_ID]);
+ ggtt_invalidate_gt_tlb(ggtt->tile->media_gt,
+ &ggtt->coalesce[MEDIA_COALESCE_ID]);
}
void xe_ggtt_printk(struct xe_ggtt *ggtt, const char *prefix)
diff --git a/drivers/gpu/drm/xe/xe_ggtt_types.h b/drivers/gpu/drm/xe/xe_ggtt_types.h
index 2245d88d8f39..56ad0b312d22 100644
--- a/drivers/gpu/drm/xe/xe_ggtt_types.h
+++ b/drivers/gpu/drm/xe/xe_ggtt_types.h
@@ -8,6 +8,7 @@
#include <drm/drm_mm.h>
+#include "xe_gt_tlb_invalidation_types.h"
#include "xe_pt_types.h"
struct xe_bo;
@@ -31,6 +32,10 @@ struct xe_ggtt {
struct drm_mm mm;
+#define PRIMARY_COALESCE_ID 0
+#define MEDIA_COALESCE_ID 1
+ struct xe_gt_tlb_invalidation_coalesce coalesce[MEDIA_COALESCE_ID + 1];
+
/** @access_count: counts GGTT writes */
unsigned int access_count;
};
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
index 15941e803d8f..b094bc790672 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
@@ -62,12 +62,38 @@ static void xe_gt_tlb_fence_timeout(struct work_struct *work)
dma_fence_put(&fence->base);
}
if (!list_empty(>->tlb_invalidation.pending_fences))
- queue_delayed_work(system_wq,
+ queue_delayed_work(gt->tlb_invalidation.wq,
>->tlb_invalidation.fence_tdr,
tlb_timeout_jiffies(gt));
spin_unlock_irq(>->tlb_invalidation.pending_lock);
}
+static void
+xe_gt_tlb_invalidation_coalesce_issue(struct xe_gt *gt,
+ struct xe_gt_tlb_invalidation_coalesce *coalesce);
+
+static void xe_gt_tlb_coalesce_work(struct work_struct *work)
+{
+ struct xe_gt *gt = container_of(work, struct xe_gt,
+ tlb_invalidation.coalesce_work);
+ struct xe_gt_tlb_invalidation_coalesce *coalesce, *next;
+
+ mutex_lock(>->tlb_invalidation.seqno_lock);
+ list_for_each_entry_safe(coalesce, next,
+ >->tlb_invalidation.pending_coalesce,
+ link)
+ xe_gt_tlb_invalidation_coalesce_issue(gt, coalesce);
+ xe_gt_assert(gt, list_empty(>->tlb_invalidation.pending_coalesce));
+ mutex_unlock(>->tlb_invalidation.seqno_lock);
+}
+
+static void gt_tlb_invalidation_fini(struct drm_device *drm, void *arg)
+{
+ struct xe_gt *gt = arg;
+
+ destroy_workqueue(gt->tlb_invalidation.wq);
+}
+
/**
* xe_gt_tlb_invalidation_init - Initialize GT TLB invalidation state
* @gt: graphics tile
@@ -79,20 +105,34 @@ static void xe_gt_tlb_fence_timeout(struct work_struct *work)
*/
int xe_gt_tlb_invalidation_init(struct xe_gt *gt)
{
+ int err;
+
gt->tlb_invalidation.seqno = 1;
INIT_LIST_HEAD(>->tlb_invalidation.pending_fences);
+ INIT_LIST_HEAD(>->tlb_invalidation.pending_coalesce);
spin_lock_init(>->tlb_invalidation.pending_lock);
spin_lock_init(>->tlb_invalidation.fence_lock);
INIT_DELAYED_WORK(>->tlb_invalidation.fence_tdr,
xe_gt_tlb_fence_timeout);
+ INIT_WORK(>->tlb_invalidation.coalesce_work,
+ xe_gt_tlb_coalesce_work);
/* Execlists not supported */
if (!gt_to_xe(gt)->info.force_execlist)
gt->tlb_invalidation.ops[XE_GT_TLB_INVALIDATION_CLIENT_GUC] =
xe_guc_tlb_invalidation_get_ops(>->uc.guc);
- return drmm_mutex_init(>_to_xe(gt)->drm,
- >->tlb_invalidation.seqno_lock);
+ gt->tlb_invalidation.wq = alloc_ordered_workqueue("gt-tlb-inval-ordered-wq", 0);
+ if (!gt->tlb_invalidation.wq)
+ return -ENOMEM;
+
+ err = drmm_mutex_init(>_to_xe(gt)->drm,
+ >->tlb_invalidation.seqno_lock);
+ if (err)
+ return err;
+
+ return drmm_add_action_or_reset(>_to_xe(gt)->drm,
+ gt_tlb_invalidation_fini, gt);
}
static void
@@ -110,6 +150,23 @@ invalidation_fence_signal(struct xe_device *xe, struct xe_gt_tlb_invalidation_fe
__invalidation_fence_signal(xe, fence);
}
+static void
+xe_gt_tlb_invalidation_coalesce_reset(struct xe_gt *gt,
+ struct xe_gt_tlb_invalidation_coalesce *coalesce)
+{
+ struct xe_gt_tlb_invalidation_fence *fence, *next;
+
+ lockdep_assert_held(>->tlb_invalidation.seqno_lock);
+ lockdep_assert_held(>->tlb_invalidation.pending_lock);
+ xe_gt_assert(gt, !list_empty(&coalesce->fence_list));
+
+ list_for_each_entry_safe(fence, next, &coalesce->fence_list,
+ link)
+ invalidation_fence_signal(gt_to_xe(gt), fence);
+
+ list_del_init(&coalesce->link);
+}
+
/**
* xe_gt_tlb_invalidation_reset - Initialize GT TLB invalidation reset
* @gt: graphics tile
@@ -119,6 +176,7 @@ invalidation_fence_signal(struct xe_device *xe, struct xe_gt_tlb_invalidation_fe
void xe_gt_tlb_invalidation_reset(struct xe_gt *gt)
{
struct xe_gt_tlb_invalidation_fence *fence, *next;
+ struct xe_gt_tlb_invalidation_coalesce *coalesce, *__next;
enum xe_gt_tlb_invalidation_clients client;
int pending_seqno;
@@ -130,6 +188,7 @@ void xe_gt_tlb_invalidation_reset(struct xe_gt *gt)
mutex_lock(>->tlb_invalidation.seqno_lock);
spin_lock_irq(>->tlb_invalidation.pending_lock);
cancel_delayed_work(>->tlb_invalidation.fence_tdr);
+ cancel_work(>->tlb_invalidation.coalesce_work);
/*
* We might have various kworkers waiting for TLB flushes to complete
* which are not tracked with an explicit TLB fence, however at this
@@ -145,6 +204,11 @@ void xe_gt_tlb_invalidation_reset(struct xe_gt *gt)
WRITE_ONCE(gt->tlb_invalidation.seqno_recv[client],
pending_seqno);
+ list_for_each_entry_safe(coalesce, __next,
+ >->tlb_invalidation.pending_coalesce,
+ link)
+ xe_gt_tlb_invalidation_coalesce_reset(gt, coalesce);
+
list_for_each_entry_safe(fence, next,
>->tlb_invalidation.pending_fences, link)
invalidation_fence_signal(gt_to_xe(gt), fence);
@@ -152,6 +216,35 @@ void xe_gt_tlb_invalidation_reset(struct xe_gt *gt)
mutex_unlock(>->tlb_invalidation.seqno_lock);
}
+static int __tlb_invalidation_seqno_diff(struct xe_gt *gt,
+ enum xe_gt_tlb_invalidation_clients client)
+{
+ int seqno_recv = READ_ONCE(gt->tlb_invalidation.seqno_recv[client]);
+ int seqno = gt->tlb_invalidation.seqno;
+
+ lockdep_assert_held(>->tlb_invalidation.pending_lock);
+
+ if (seqno >= seqno_recv)
+ return seqno - seqno_recv;
+ else
+ return TLB_INVALIDATION_SEQNO_MAX - seqno_recv + seqno - 1;
+}
+
+static int tlb_invalidation_seqno_diff(struct xe_gt *gt)
+{
+ enum xe_gt_tlb_invalidation_clients client;
+ int diff = 0, tmp;
+
+ lockdep_assert_held(>->tlb_invalidation.pending_lock);
+ for (client = 0; client < XE_GT_TLB_INVALIDATION_CLIENT_MAX; ++client) {
+ tmp = __tlb_invalidation_seqno_diff(gt, client);
+ if (tmp > diff)
+ diff = tmp;
+ }
+
+ return diff;
+}
+
static bool __tlb_invalidation_seqno_past(struct xe_gt *gt,
enum xe_gt_tlb_invalidation_clients client,
int seqno)
@@ -222,6 +315,16 @@ static int send_tlb_invalidation_ppgtt(struct xe_gt *gt, u64 start, u64 end,
return 0;
}
+static void xe_gt_tlb_invalidation_seqno_bump(struct xe_gt *gt)
+{
+ lockdep_assert_held(>->tlb_invalidation.seqno_lock);
+
+ gt->tlb_invalidation.seqno = (gt->tlb_invalidation.seqno + 1) %
+ TLB_INVALIDATION_SEQNO_MAX;
+ if (!gt->tlb_invalidation.seqno)
+ gt->tlb_invalidation.seqno = 1;
+}
+
static void xe_gt_tlb_invalidation_fence_prep(struct xe_gt *gt,
struct xe_gt_tlb_invalidation_fence *fence)
{
@@ -239,30 +342,114 @@ static void xe_gt_tlb_invalidation_fence_prep(struct xe_gt *gt,
>->tlb_invalidation.pending_fences);
if (list_is_singular(>->tlb_invalidation.pending_fences))
- queue_delayed_work(system_wq,
+ queue_delayed_work(gt->tlb_invalidation.wq,
>->tlb_invalidation.fence_tdr,
tlb_timeout_jiffies(gt));
spin_unlock_irq(>->tlb_invalidation.pending_lock);
- gt->tlb_invalidation.seqno = (gt->tlb_invalidation.seqno + 1) %
- TLB_INVALIDATION_SEQNO_MAX;
- if (!gt->tlb_invalidation.seqno)
- gt->tlb_invalidation.seqno = 1;
+ xe_gt_tlb_invalidation_seqno_bump(gt);
}
-static int __xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt,
- struct xe_gt_tlb_invalidation_fence *fence)
+static void
+xe_gt_tlb_invalidation_coalesce_issue(struct xe_gt *gt,
+ struct xe_gt_tlb_invalidation_coalesce *coalesce)
{
- int ret;
+ struct xe_gt_tlb_invalidation_fence *fence;
+ int seqno = gt->tlb_invalidation.seqno;
+
+ lockdep_assert_held(>->tlb_invalidation.seqno_lock);
+ xe_gt_assert(gt, !list_empty(&coalesce->fence_list));
+
+ list_for_each_entry(fence, &coalesce->fence_list, link) {
+ fence->seqno = seqno;
+ fence->invalidation_time = ktime_get();
+ trace_xe_gt_tlb_invalidation_fence_send(gt_to_xe(gt), fence);
+ }
+
+ spin_lock_irq(>->tlb_invalidation.pending_lock);
+ if (list_empty(>->tlb_invalidation.pending_fences))
+ queue_delayed_work(gt->tlb_invalidation.wq,
+ >->tlb_invalidation.fence_tdr,
+ tlb_timeout_jiffies(gt));
+ list_splice_tail_init(&coalesce->fence_list,
+ >->tlb_invalidation.pending_fences);
+ list_del_init(&coalesce->link);
+ spin_unlock_irq(>->tlb_invalidation.pending_lock);
+
+ xe_gt_tlb_invalidation_seqno_bump(gt);
+
+ if (coalesce->type == XE_GT_TLB_INVALIDATION_COALESCE_GGTT)
+ send_tlb_invalidation_ggtt(gt, seqno);
+ else
+ send_tlb_invalidation_ppgtt(gt, coalesce->start, coalesce->end,
+ coalesce->asid, seqno);
+
+ coalesce->start = ULONG_MAX;
+ coalesce->end = 0;
+
+ xe_gt_assert(gt, list_empty(&coalesce->fence_list));
+ xe_gt_assert(gt, list_empty(&coalesce->link));
+}
+
+/* Any more pending TLB invalidations start to hold in KMD */
+#define SEQNO_WATERMARK 16
+
+static int
+xe_gt_tlb_invalidation_coalesce_prep(struct xe_gt *gt,
+ struct xe_gt_tlb_invalidation_fence *fence,
+ struct xe_gt_tlb_invalidation_coalesce *coalesce,
+ u64 start, u64 end, u32 asid)
+{
+ int ret = -EBUSY;
+
+ lockdep_assert_held(>->tlb_invalidation.seqno_lock);
+
+ spin_lock_irq(>->tlb_invalidation.pending_lock);
+
+ if (list_empty(>->tlb_invalidation.pending_coalesce) &&
+ tlb_invalidation_seqno_diff(gt) < SEQNO_WATERMARK) {
+ ret = 0;
+ goto unlock;
+ }
+
+ if (list_empty(&coalesce->link))
+ list_add_tail(&coalesce->link,
+ >->tlb_invalidation.pending_coalesce);
+
+ if (coalesce->start > start)
+ coalesce->start = start;
+ if (coalesce->end < end)
+ coalesce->end = end;
+ coalesce->asid = asid;
+
+ list_add_tail(&fence->link, &coalesce->fence_list);
+
+unlock:
+ spin_unlock_irq(>->tlb_invalidation.pending_lock);
+
+ return ret;
+}
+
+static int
+__xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt,
+ struct xe_gt_tlb_invalidation_fence *fence,
+ struct xe_gt_tlb_invalidation_coalesce *coalesce)
+{
+ int ret = 0;
mutex_lock(>->tlb_invalidation.seqno_lock);
+ if (xe_gt_tlb_invalidation_coalesce_prep(gt, fence, coalesce,
+ 0, 0, 0))
+ goto unlock;
+
xe_gt_tlb_invalidation_fence_prep(gt, fence);
ret = send_tlb_invalidation_ggtt(gt, fence->seqno);
if (ret < 0)
invalidation_fence_signal(gt_to_xe(gt), fence);
+unlock:
mutex_unlock(>->tlb_invalidation.seqno_lock);
return ret;
@@ -271,23 +458,28 @@ static int __xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt,
/**
* xe_gt_tlb_invalidation_ggtt - Issue a TLB invalidation on this GT for the GGTT
* @gt: graphics tile
+ * @coalesce: coalesce structure
*
* Issue a TLB invalidation for the GGTT. Completion of TLB invalidation is
* synchronous.
*
* Return: 0 on success, negative error code on error
*/
-int xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt)
+int xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt,
+ struct xe_gt_tlb_invalidation_coalesce *coalesce)
{
struct xe_device *xe = gt_to_xe(gt);
+ xe_gt_assert(gt, coalesce);
+ xe_gt_assert(gt, coalesce->type == XE_GT_TLB_INVALIDATION_COALESCE_GGTT);
+
if (xe_guc_ct_enabled(>->uc.guc.ct) &&
gt->uc.guc.submission_state.enabled) {
struct xe_gt_tlb_invalidation_fence fence;
int ret;
xe_gt_tlb_invalidation_fence_init(gt, &fence);
- ret = __xe_gt_tlb_invalidation_ggtt(gt, &fence);
+ ret = __xe_gt_tlb_invalidation_ggtt(gt, &fence, coalesce);
if (ret < 0)
return ret;
@@ -319,6 +511,7 @@ int xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt)
* @gt: graphics tile
* @fence: invalidation fence which will be signal on TLB invalidation
* completion
+ * @coalesce: coalesce structure
* @start: start address
* @end: end address
* @asid: address space id
@@ -331,21 +524,29 @@ int xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt)
*/
int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
struct xe_gt_tlb_invalidation_fence *fence,
+ struct xe_gt_tlb_invalidation_coalesce *coalesce,
u64 start, u64 end, u32 asid)
{
struct xe_device *xe = gt_to_xe(gt);
- int ret;
+ int ret = 0;
xe_gt_assert(gt, fence);
+ xe_gt_assert(gt, coalesce);
+ xe_gt_assert(gt, coalesce->type == XE_GT_TLB_INVALIDATION_COALESCE_PPGTT);
mutex_lock(>->tlb_invalidation.seqno_lock);
+ if (xe_gt_tlb_invalidation_coalesce_prep(gt, fence, coalesce,
+ start, end, asid))
+ goto unlock;
+
xe_gt_tlb_invalidation_fence_prep(gt, fence);
ret = send_tlb_invalidation_ppgtt(gt, start, end, asid, fence->seqno);
if (ret < 0)
invalidation_fence_signal(xe, fence);
+unlock:
mutex_unlock(>->tlb_invalidation.seqno_lock);
return ret;
@@ -356,6 +557,7 @@ int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
* @gt: graphics tile
* @fence: invalidation fence which will be signal on TLB invalidation
* completion, can be NULL
+ * @coalesce: coalesce structure
* @vma: VMA to invalidate
*
* Issue a range based TLB invalidation if supported, if not fallback to a full
@@ -366,11 +568,13 @@ int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
*/
int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
struct xe_gt_tlb_invalidation_fence *fence,
+ struct xe_gt_tlb_invalidation_coalesce *coalesce,
struct xe_vma *vma)
{
xe_gt_assert(gt, vma);
- return xe_gt_tlb_invalidation_range(gt, fence, xe_vma_start(vma),
+ return xe_gt_tlb_invalidation_range(gt, fence, coalesce,
+ xe_vma_start(vma),
xe_vma_end(vma),
xe_vma_vm(vma)->usm.asid);
}
@@ -424,8 +628,14 @@ void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt,
invalidation_fence_signal(xe, fence);
}
+ if ((list_empty(>->tlb_invalidation.pending_fences) ||
+ list_is_singular(>->tlb_invalidation.pending_fences)) &&
+ !list_empty(>->tlb_invalidation.pending_coalesce))
+ queue_work(gt->tlb_invalidation.wq,
+ >->tlb_invalidation.coalesce_work);
+
if (!list_empty(>->tlb_invalidation.pending_fences))
- mod_delayed_work(system_wq,
+ mod_delayed_work(gt->tlb_invalidation.wq,
>->tlb_invalidation.fence_tdr,
tlb_timeout_jiffies(gt));
else
@@ -469,3 +679,29 @@ void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
INIT_LIST_HEAD(&fence->link);
dma_fence_get(&fence->base);
}
+
+/**
+ * xe_gt_tlb_invalidation_coalesce_init - Initialize TLB invalidation coalescing
+ * @coalesce: coalescing structure to init
+ * @type: type of coalescing
+ */
+void xe_gt_tlb_invalidation_coalesce_init(struct xe_gt_tlb_invalidation_coalesce *coalesce,
+ enum xe_gt_tlb_invalidation_coalesce_type type)
+{
+ INIT_LIST_HEAD(&coalesce->link);
+ INIT_LIST_HEAD(&coalesce->fence_list);
+ coalesce->start = ULONG_MAX;
+ coalesce->end = 0;
+ coalesce->type = type;
+}
+
+void xe_gt_tlb_invalidation_coalesce_fini(struct xe_gt *gt,
+ struct xe_gt_tlb_invalidation_coalesce *coalesce)
+{
+ mutex_lock(>->tlb_invalidation.seqno_lock);
+ spin_lock_irq(>->tlb_invalidation.pending_lock);
+ if (!list_empty(&coalesce->link))
+ xe_gt_tlb_invalidation_coalesce_reset(gt, coalesce);
+ spin_unlock_irq(>->tlb_invalidation.pending_lock);
+ mutex_unlock(>->tlb_invalidation.seqno_lock);
+}
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
index df22d9b4d85c..2401aa432714 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
@@ -15,12 +15,15 @@ struct xe_vma;
int xe_gt_tlb_invalidation_init(struct xe_gt *gt);
void xe_gt_tlb_invalidation_reset(struct xe_gt *gt);
-int xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt);
+int xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt,
+ struct xe_gt_tlb_invalidation_coalesce *coalesce);
int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
struct xe_gt_tlb_invalidation_fence *fence,
+ struct xe_gt_tlb_invalidation_coalesce *coalesce,
struct xe_vma *vma);
int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
struct xe_gt_tlb_invalidation_fence *fence,
+ struct xe_gt_tlb_invalidation_coalesce *coalesce,
u64 start, u64 end, u32 asid);
void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
@@ -30,6 +33,11 @@ void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt,
enum xe_gt_tlb_invalidation_clients client,
int seqno);
+void xe_gt_tlb_invalidation_coalesce_init(struct xe_gt_tlb_invalidation_coalesce *coalesce,
+ enum xe_gt_tlb_invalidation_coalesce_type type);
+void xe_gt_tlb_invalidation_coalesce_fini(struct xe_gt *gt,
+ struct xe_gt_tlb_invalidation_coalesce *coalesce);
+
static inline void
xe_gt_tlb_invalidation_fence_wait(struct xe_gt_tlb_invalidation_fence *fence)
{
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
index 1208edf7a5a4..46db9f70eaac 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
@@ -38,6 +38,29 @@ struct xe_gt_tlb_invalidation_ops {
u32 asid, int seqno);
};
+enum xe_gt_tlb_invalidation_coalesce_type {
+ XE_GT_TLB_INVALIDATION_COALESCE_GGTT = 0,
+ XE_GT_TLB_INVALIDATION_COALESCE_PPGTT,
+};
+
+/**
+ * struct xe_gt_tlb_invalidation_coalesce - Xe GT TLB invalidation coalesce
+ */
+struct xe_gt_tlb_invalidation_coalesce {
+ /** @link: link into pending coalesce */
+ struct list_head link;
+ /** @fence_list: list of fences to coalesce */
+ struct list_head fence_list;
+ /** @start: start address to coalesce (PPGTT only) */
+ u64 start;
+ /** @end: start address to coalesce (PPGTT only) */
+ u64 end;
+ /** @asid: address space ID (PPGTT only) */
+ u32 asid;
+ /** @type: type of coalesce */
+ enum xe_gt_tlb_invalidation_coalesce_type type;
+};
+
enum xe_gt_tlb_invalidation_clients {
XE_GT_TLB_INVALIDATION_CLIENT_GUC = 0,
XE_GT_TLB_INVALIDATION_CLIENT_MAX,
diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
index 9a2f1e8b74e1..9a411aa6c388 100644
--- a/drivers/gpu/drm/xe/xe_gt_types.h
+++ b/drivers/gpu/drm/xe/xe_gt_types.h
@@ -193,8 +193,25 @@ struct xe_gt {
*/
struct list_head pending_fences;
/**
- * @tlb_invalidation.pending_lock: protects @tlb_invalidation.pending_fences
- * and updating @tlb_invalidation.seqno_recv.
+ * @tlb_invalidation.pending_coalesce: list of pending coalesce
+ * TLB invalidations, protected by @tlb_invalidation.seqno_lock
+ * (send) and @tlb_invalidation.pending_lock (send, recv)
+ */
+ struct list_head pending_coalesce;
+ /**
+ * @tlb_invalidation.wq: ordered work queue for TLB invalidations
+ */
+ struct workqueue_struct *wq;
+ /**
+ * @tlb_invalidation.coalesce_work: worker to issue coalesce TLB
+ * invalidations.
+ */
+ struct work_struct coalesce_work;
+ /**
+ * @tlb_invalidation.pending_lock: protects
+ * @tlb_invalidation.pending_fences, updating
+ * @tlb_invalidation.seqno_recv, and
+ * @tlb_invalidation.pending_coalesce
*/
spinlock_t pending_lock;
/**
diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
index 1caa99b22c73..5054c9d8d149 100644
--- a/drivers/gpu/drm/xe/xe_pt.c
+++ b/drivers/gpu/drm/xe/xe_pt.c
@@ -1308,6 +1308,7 @@ static int xe_pt_userptr_pre_commit(struct xe_migrate_pt_update *pt_update)
struct invalidation_fence {
struct xe_gt_tlb_invalidation_fence base;
+ struct xe_gt_tlb_invalidation_coalesce *coalesce;
struct xe_gt *gt;
struct dma_fence *fence;
struct dma_fence_cb cb;
@@ -1342,13 +1343,15 @@ static void invalidation_fence_work_func(struct work_struct *w)
struct xe_device *xe = gt_to_xe(ifence->gt);
trace_xe_gt_tlb_invalidation_fence_work_func(xe, &ifence->base);
- xe_gt_tlb_invalidation_range(ifence->gt, &ifence->base, ifence->start,
+ xe_gt_tlb_invalidation_range(ifence->gt, &ifence->base,
+ ifence->coalesce, ifence->start,
ifence->end, ifence->asid);
}
static void invalidation_fence_init(struct xe_gt *gt,
struct invalidation_fence *ifence,
struct dma_fence *fence,
+ struct xe_gt_tlb_invalidation_coalesce *coalesce,
u64 start, u64 end, u32 asid)
{
int ret;
@@ -1358,6 +1361,7 @@ static void invalidation_fence_init(struct xe_gt *gt,
xe_gt_tlb_invalidation_fence_init(gt, &ifence->base);
ifence->fence = fence;
+ ifence->coalesce = coalesce;
ifence->gt = gt;
ifence->start = start;
ifence->end = end;
@@ -2026,6 +2030,7 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
/* tlb invalidation must be done before signaling rebind */
if (ifence) {
invalidation_fence_init(tile->primary_gt, ifence, fence,
+ &vm->coalesce[tile->id],
pt_update_ops->start,
pt_update_ops->last, vm->usm.asid);
fence = &ifence->base.base;
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index 478932fb7718..c5b5c629b154 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -1407,8 +1407,11 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
INIT_LIST_HEAD(&vm->preempt.exec_queues);
vm->preempt.min_run_period_ms = 10; /* FIXME: Wire up to uAPI */
- for_each_tile(tile, xe, id)
+ for_each_tile(tile, xe, id) {
xe_range_fence_tree_init(&vm->rftree[id]);
+ xe_gt_tlb_invalidation_coalesce_init(&vm->coalesce[id],
+ XE_GT_TLB_INVALIDATION_COALESCE_PPGTT);
+ }
vm->pt_ops = &xelp_pt_ops;
@@ -1525,8 +1528,11 @@ struct xe_vm *xe_vm_create(struct xe_device *xe, u32 flags)
err_no_resv:
mutex_destroy(&vm->snap_mutex);
- for_each_tile(tile, xe, id)
+ for_each_tile(tile, xe, id) {
xe_range_fence_tree_fini(&vm->rftree[id]);
+ xe_gt_tlb_invalidation_coalesce_fini(tile->primary_gt,
+ &vm->coalesce[id]);
+ }
kfree(vm);
if (flags & XE_VM_FLAG_LR_MODE)
xe_pm_runtime_put(xe);
@@ -1641,8 +1647,11 @@ void xe_vm_close_and_put(struct xe_vm *vm)
}
mutex_unlock(&xe->usm.lock);
- for_each_tile(tile, xe, id)
+ for_each_tile(tile, xe, id) {
xe_range_fence_tree_fini(&vm->rftree[id]);
+ xe_gt_tlb_invalidation_coalesce_fini(tile->primary_gt,
+ &vm->coalesce[id]);
+ }
xe_vm_put(vm);
}
@@ -3213,7 +3222,9 @@ int xe_vm_invalidate_vma(struct xe_vma *vma)
* GTs within the tile
*/
ret = xe_gt_tlb_invalidation_vma(tile->primary_gt,
- &fence[id], vma);
+ &fence[id],
+ &xe_vma_vm(vma)->coalesce[id],
+ vma);
if (ret < 0)
goto wait;
diff --git a/drivers/gpu/drm/xe/xe_vm_types.h b/drivers/gpu/drm/xe/xe_vm_types.h
index 7f9a303e51d8..e70839af93d0 100644
--- a/drivers/gpu/drm/xe/xe_vm_types.h
+++ b/drivers/gpu/drm/xe/xe_vm_types.h
@@ -14,6 +14,7 @@
#include <linux/scatterlist.h>
#include "xe_device_types.h"
+#include "xe_gt_tlb_invalidation_types.h"
#include "xe_pt_types.h"
#include "xe_range_fence.h"
@@ -152,6 +153,8 @@ struct xe_vm {
struct xe_pt *pt_root[XE_MAX_TILES_PER_DEVICE];
struct xe_pt *scratch_pt[XE_MAX_TILES_PER_DEVICE][XE_VM_MAX_LEVEL];
+ struct xe_gt_tlb_invalidation_coalesce coalesce[XE_MAX_TILES_PER_DEVICE];
+
/**
* @flags: flags for this VM, statically setup a creation time aside
* from XE_VM_FLAG_BANNED which requires vm->lock to set / read safely
--
2.34.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v2 10/11] drm/xe: Add GT TLB invalidation coalesce tracepoints
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (8 preceding siblings ...)
2024-07-08 4:03 ` [PATCH v2 09/11] drm/xe: Add GT TLB invalidation coalescing Matthew Brost
@ 2024-07-08 4:03 ` Matthew Brost
2024-07-08 4:03 ` [PATCH v2 11/11] drm/xe: Add GT TLB invalidation watermark debugfs Matthew Brost
` (9 subsequent siblings)
19 siblings, 0 replies; 32+ messages in thread
From: Matthew Brost @ 2024-07-08 4:03 UTC (permalink / raw)
To: intel-xe; +Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
Add visibility to GT TLB invalidation coalescing.
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 5 ++++-
drivers/gpu/drm/xe/xe_trace.h | 10 ++++++++++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
index b094bc790672..db127432b469 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
@@ -363,7 +363,8 @@ xe_gt_tlb_invalidation_coalesce_issue(struct xe_gt *gt,
list_for_each_entry(fence, &coalesce->fence_list, link) {
fence->seqno = seqno;
fence->invalidation_time = ktime_get();
- trace_xe_gt_tlb_invalidation_fence_send(gt_to_xe(gt), fence);
+ trace_xe_gt_tlb_invalidation_fence_send_coalesce(gt_to_xe(gt),
+ fence);
}
spin_lock_irq(>->tlb_invalidation.pending_lock);
@@ -412,6 +413,8 @@ xe_gt_tlb_invalidation_coalesce_prep(struct xe_gt *gt,
goto unlock;
}
+ trace_xe_gt_tlb_invalidation_fence_coalesce(gt_to_xe(gt), fence);
+
if (list_empty(&coalesce->link))
list_add_tail(&coalesce->link,
>->tlb_invalidation.pending_coalesce);
diff --git a/drivers/gpu/drm/xe/xe_trace.h b/drivers/gpu/drm/xe/xe_trace.h
index 09ca1ad057b0..e2c5af5a1d23 100644
--- a/drivers/gpu/drm/xe/xe_trace.h
+++ b/drivers/gpu/drm/xe/xe_trace.h
@@ -60,11 +60,21 @@ DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_cb,
TP_ARGS(xe, fence)
);
+DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_coalesce,
+ TP_PROTO(struct xe_device *xe, struct xe_gt_tlb_invalidation_fence *fence),
+ TP_ARGS(xe, fence)
+);
+
DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_send,
TP_PROTO(struct xe_device *xe, struct xe_gt_tlb_invalidation_fence *fence),
TP_ARGS(xe, fence)
);
+DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_send_coalesce,
+ TP_PROTO(struct xe_device *xe, struct xe_gt_tlb_invalidation_fence *fence),
+ TP_ARGS(xe, fence)
+);
+
DEFINE_EVENT(xe_gt_tlb_invalidation_fence, xe_gt_tlb_invalidation_fence_recv,
TP_PROTO(struct xe_device *xe, struct xe_gt_tlb_invalidation_fence *fence),
TP_ARGS(xe, fence)
--
2.34.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* [PATCH v2 11/11] drm/xe: Add GT TLB invalidation watermark debugfs
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (9 preceding siblings ...)
2024-07-08 4:03 ` [PATCH v2 10/11] drm/xe: Add GT TLB invalidation coalesce tracepoints Matthew Brost
@ 2024-07-08 4:03 ` Matthew Brost
2024-07-08 4:08 ` ✓ CI.Patch_applied: success for Proper GT TLB invalidation layering and new coalescing feature. (rev2) Patchwork
` (8 subsequent siblings)
19 siblings, 0 replies; 32+ messages in thread
From: Matthew Brost @ 2024-07-08 4:03 UTC (permalink / raw)
To: intel-xe; +Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
Add GT TLB invalidation watermark to debugfs for feature tuning and
disabling (less than equal to a value of 1).
v2:
- Change watermark logic to be zero based
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
drivers/gpu/drm/xe/xe_debugfs.c | 38 +++++++++++++++++++++
drivers/gpu/drm/xe/xe_device.c | 3 ++
drivers/gpu/drm/xe/xe_device_types.h | 5 +++
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 9 ++---
4 files changed, 51 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
index 1011e5d281fa..dd27172197be 100644
--- a/drivers/gpu/drm/xe/xe_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_debugfs.c
@@ -173,6 +173,41 @@ static const struct file_operations wedged_mode_fops = {
.write = wedged_mode_set,
};
+static ssize_t tlb_invalidation_watermark_show(struct file *f, char __user *ubuf,
+ size_t size, loff_t *pos)
+{
+ struct xe_device *xe = file_inode(f)->i_private;
+ char buf[32];
+ int len = 0;
+
+ len = scnprintf(buf, sizeof(buf), "%d\n", xe->tlb_invalidation_watermark);
+
+ return simple_read_from_buffer(ubuf, size, pos, buf, len);
+}
+
+static ssize_t tlb_invalidation_watermark_set(struct file *f,
+ const char __user *ubuf,
+ size_t size, loff_t *pos)
+{
+ struct xe_device *xe = file_inode(f)->i_private;
+ int tlb_invalidation_watermark;
+ ssize_t ret;
+
+ ret = kstrtoint_from_user(ubuf, size, 0, &tlb_invalidation_watermark);
+ if (ret)
+ return ret;
+
+ xe->tlb_invalidation_watermark = tlb_invalidation_watermark;
+
+ return size;
+}
+
+static const struct file_operations tlb_invalidation_watermark_fops = {
+ .owner = THIS_MODULE,
+ .read = tlb_invalidation_watermark_show,
+ .write = tlb_invalidation_watermark_set,
+};
+
void xe_debugfs_register(struct xe_device *xe)
{
struct ttm_device *bdev = &xe->ttm;
@@ -193,6 +228,9 @@ void xe_debugfs_register(struct xe_device *xe)
debugfs_create_file("wedged_mode", 0400, root, xe,
&wedged_mode_fops);
+ debugfs_create_file("tlb_invalidation_watermark", 0400, root, xe,
+ &tlb_invalidation_watermark_fops);
+
for (mem_type = XE_PL_VRAM0; mem_type <= XE_PL_VRAM1; ++mem_type) {
man = ttm_manager_type(bdev, mem_type);
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index db513175b29e..6d5ef3563082 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -274,6 +274,9 @@ struct xe_device *xe_device_create(struct pci_dev *pdev,
xe->info.revid = pdev->revision;
xe->info.force_execlist = xe_modparam.force_execlist;
+#define TLB_INVALIDATION_WATERMARK_DEFAULT 16
+ xe->tlb_invalidation_watermark = TLB_INVALIDATION_WATERMARK_DEFAULT;
+
spin_lock_init(&xe->irq.lock);
spin_lock_init(&xe->clients.lock);
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index f0cf9020e463..7e029493110a 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -481,6 +481,11 @@ struct xe_device {
int mode;
} wedged;
+ /**
+ * @tlb_invalidation_watermark: TLB invalidation watermark to coalesce
+ */
+ int tlb_invalidation_watermark;
+
#ifdef TEST_VM_OPS_ERROR
/**
* @vm_inject_error_position: inject errors at different places in VM
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
index db127432b469..097e53227e50 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
@@ -392,9 +392,6 @@ xe_gt_tlb_invalidation_coalesce_issue(struct xe_gt *gt,
xe_gt_assert(gt, list_empty(&coalesce->link));
}
-/* Any more pending TLB invalidations start to hold in KMD */
-#define SEQNO_WATERMARK 16
-
static int
xe_gt_tlb_invalidation_coalesce_prep(struct xe_gt *gt,
struct xe_gt_tlb_invalidation_fence *fence,
@@ -405,10 +402,14 @@ xe_gt_tlb_invalidation_coalesce_prep(struct xe_gt *gt,
lockdep_assert_held(>->tlb_invalidation.seqno_lock);
+ if (gt_to_xe(gt)->tlb_invalidation_watermark <= 0) /* Disabled */
+ return 0;
+
spin_lock_irq(>->tlb_invalidation.pending_lock);
if (list_empty(>->tlb_invalidation.pending_coalesce) &&
- tlb_invalidation_seqno_diff(gt) < SEQNO_WATERMARK) {
+ tlb_invalidation_seqno_diff(gt) <
+ gt_to_xe(gt)->tlb_invalidation_watermark + 1) {
ret = 0;
goto unlock;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 32+ messages in thread
* ✓ CI.Patch_applied: success for Proper GT TLB invalidation layering and new coalescing feature. (rev2)
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (10 preceding siblings ...)
2024-07-08 4:03 ` [PATCH v2 11/11] drm/xe: Add GT TLB invalidation watermark debugfs Matthew Brost
@ 2024-07-08 4:08 ` Patchwork
2024-07-08 4:09 ` ✗ CI.checkpatch: warning " Patchwork
` (7 subsequent siblings)
19 siblings, 0 replies; 32+ messages in thread
From: Patchwork @ 2024-07-08 4:08 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
== Series Details ==
Series: Proper GT TLB invalidation layering and new coalescing feature. (rev2)
URL : https://patchwork.freedesktop.org/series/135809/
State : success
== Summary ==
=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: 70f1d41b827f drm-tip: 2024y-07m-07d-18h-38m-49s UTC integration manifest
=== git am output follows ===
Applying: drm/xe: Add xe_gt_tlb_invalidation_fence_init helper
Applying: drm/xe: Drop xe_gt_tlb_invalidation_wait
Applying: drm/xe: s/tlb_invalidation.lock/tlb_invalidation.fence_lock
Applying: drm/xe: Add tlb_invalidation.seqno_lock
Applying: drm/xe: Add xe_gt_tlb_invalidation_done_handler
Applying: drm/xe: Add send tlb invalidation helpers
Applying: drm/xe: Add xe_guc_tlb_invalidation layer
Applying: drm/xe: Add multi-client support for GT TLB invalidations
Applying: drm/xe: Add GT TLB invalidation coalescing
Applying: drm/xe: Add GT TLB invalidation coalesce tracepoints
Applying: drm/xe: Add GT TLB invalidation watermark debugfs
^ permalink raw reply [flat|nested] 32+ messages in thread
* ✗ CI.checkpatch: warning for Proper GT TLB invalidation layering and new coalescing feature. (rev2)
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (11 preceding siblings ...)
2024-07-08 4:08 ` ✓ CI.Patch_applied: success for Proper GT TLB invalidation layering and new coalescing feature. (rev2) Patchwork
@ 2024-07-08 4:09 ` Patchwork
2024-07-08 4:10 ` ✓ CI.KUnit: success " Patchwork
` (6 subsequent siblings)
19 siblings, 0 replies; 32+ messages in thread
From: Patchwork @ 2024-07-08 4:09 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
== Series Details ==
Series: Proper GT TLB invalidation layering and new coalescing feature. (rev2)
URL : https://patchwork.freedesktop.org/series/135809/
State : warning
== Summary ==
+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
51ce9f6cd981d42d7467409d7dbc559a450abc1e
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit f6fe56731fbedb1885dabb719ffad9cc4b2cc058
Author: Matthew Brost <matthew.brost@intel.com>
Date: Sun Jul 7 21:03:31 2024 -0700
drm/xe: Add GT TLB invalidation watermark debugfs
Add GT TLB invalidation watermark to debugfs for feature tuning and
disabling (less than equal to a value of 1).
v2:
- Change watermark logic to be zero based
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
+ /mt/dim checkpatch 70f1d41b827fa9d1275748e655912f991635f595 drm-intel
87dcd50ca950 drm/xe: Add xe_gt_tlb_invalidation_fence_init helper
d458a70192b7 drm/xe: Drop xe_gt_tlb_invalidation_wait
fe0ae3fb43f2 drm/xe: s/tlb_invalidation.lock/tlb_invalidation.fence_lock
26d3b0653d7e drm/xe: Add tlb_invalidation.seqno_lock
fe12ea983a93 drm/xe: Add xe_gt_tlb_invalidation_done_handler
29df74d5da5f drm/xe: Add send tlb invalidation helpers
c532b6075231 drm/xe: Add xe_guc_tlb_invalidation layer
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'
-:289: WARNING:FILE_PATH_CHANGES: added, moved or deleted file(s), does MAINTAINERS need updating?
#289:
new file mode 100644
total: 0 errors, 1 warnings, 0 checks, 399 lines checked
90bbdccd3712 drm/xe: Add multi-client support for GT TLB invalidations
1c57782d4cc6 drm/xe: Add GT TLB invalidation coalescing
449ced0751a8 drm/xe: Add GT TLB invalidation coalesce tracepoints
f6fe56731fbe drm/xe: Add GT TLB invalidation watermark debugfs
^ permalink raw reply [flat|nested] 32+ messages in thread
* ✓ CI.KUnit: success for Proper GT TLB invalidation layering and new coalescing feature. (rev2)
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (12 preceding siblings ...)
2024-07-08 4:09 ` ✗ CI.checkpatch: warning " Patchwork
@ 2024-07-08 4:10 ` Patchwork
2024-07-08 4:22 ` ✓ CI.Build: " Patchwork
` (5 subsequent siblings)
19 siblings, 0 replies; 32+ messages in thread
From: Patchwork @ 2024-07-08 4:10 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
== Series Details ==
Series: Proper GT TLB invalidation layering and new coalescing feature. (rev2)
URL : https://patchwork.freedesktop.org/series/135809/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[04:09:19] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[04:09:23] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
../lib/iomap.c:156:5: warning: no previous prototype for ‘ioread64_lo_hi’ [-Wmissing-prototypes]
156 | u64 ioread64_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:163:5: warning: no previous prototype for ‘ioread64_hi_lo’ [-Wmissing-prototypes]
163 | u64 ioread64_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:170:5: warning: no previous prototype for ‘ioread64be_lo_hi’ [-Wmissing-prototypes]
170 | u64 ioread64be_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:178:5: warning: no previous prototype for ‘ioread64be_hi_lo’ [-Wmissing-prototypes]
178 | u64 ioread64be_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:264:6: warning: no previous prototype for ‘iowrite64_lo_hi’ [-Wmissing-prototypes]
264 | void iowrite64_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:272:6: warning: no previous prototype for ‘iowrite64_hi_lo’ [-Wmissing-prototypes]
272 | void iowrite64_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:280:6: warning: no previous prototype for ‘iowrite64be_lo_hi’ [-Wmissing-prototypes]
280 | void iowrite64be_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
../lib/iomap.c:288:6: warning: no previous prototype for ‘iowrite64be_hi_lo’ [-Wmissing-prototypes]
288 | void iowrite64be_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
[04:09:49] Starting KUnit Kernel (1/1)...
[04:09:49] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[04:09:49] =================== guc_dbm (7 subtests) ===================
[04:09:49] [PASSED] test_empty
[04:09:49] [PASSED] test_default
[04:09:49] ======================== test_size ========================
[04:09:49] [PASSED] 4
[04:09:49] [PASSED] 8
[04:09:49] [PASSED] 32
[04:09:49] [PASSED] 256
[04:09:49] ==================== [PASSED] test_size ====================
[04:09:49] ======================= test_reuse ========================
[04:09:49] [PASSED] 4
[04:09:49] [PASSED] 8
[04:09:49] [PASSED] 32
[04:09:49] [PASSED] 256
[04:09:49] =================== [PASSED] test_reuse ====================
[04:09:49] =================== test_range_overlap ====================
[04:09:49] [PASSED] 4
[04:09:49] [PASSED] 8
[04:09:49] [PASSED] 32
[04:09:49] [PASSED] 256
[04:09:49] =============== [PASSED] test_range_overlap ================
[04:09:49] =================== test_range_compact ====================
[04:09:49] [PASSED] 4
[04:09:49] [PASSED] 8
[04:09:49] [PASSED] 32
[04:09:49] [PASSED] 256
[04:09:49] =============== [PASSED] test_range_compact ================
[04:09:49] ==================== test_range_spare =====================
[04:09:49] [PASSED] 4
[04:09:49] [PASSED] 8
[04:09:49] [PASSED] 32
[04:09:49] [PASSED] 256
[04:09:49] ================ [PASSED] test_range_spare =================
[04:09:49] ===================== [PASSED] guc_dbm =====================
[04:09:49] =================== guc_idm (6 subtests) ===================
[04:09:49] [PASSED] bad_init
[04:09:49] [PASSED] no_init
[04:09:49] [PASSED] init_fini
[04:09:49] [PASSED] check_used
[04:09:49] [PASSED] check_quota
[04:09:49] [PASSED] check_all
[04:09:49] ===================== [PASSED] guc_idm =====================
[04:09:49] ================== no_relay (3 subtests) ===================
[04:09:49] [PASSED] xe_drops_guc2pf_if_not_ready
[04:09:49] [PASSED] xe_drops_guc2vf_if_not_ready
[04:09:49] [PASSED] xe_rejects_send_if_not_ready
[04:09:49] ==================== [PASSED] no_relay =====================
[04:09:49] ================== pf_relay (14 subtests) ==================
[04:09:49] [PASSED] pf_rejects_guc2pf_too_short
[04:09:49] [PASSED] pf_rejects_guc2pf_too_long
[04:09:49] [PASSED] pf_rejects_guc2pf_no_payload
[04:09:49] [PASSED] pf_fails_no_payload
[04:09:49] [PASSED] pf_fails_bad_origin
[04:09:49] [PASSED] pf_fails_bad_type
[04:09:49] [PASSED] pf_txn_reports_error
[04:09:49] [PASSED] pf_txn_sends_pf2guc
[04:09:49] [PASSED] pf_sends_pf2guc
[04:09:49] [SKIPPED] pf_loopback_nop
[04:09:49] [SKIPPED] pf_loopback_echo
[04:09:49] [SKIPPED] pf_loopback_fail
[04:09:49] [SKIPPED] pf_loopback_busy
[04:09:49] [SKIPPED] pf_loopback_retry
[04:09:49] ==================== [PASSED] pf_relay =====================
[04:09:49] ================== vf_relay (3 subtests) ===================
[04:09:49] [PASSED] vf_rejects_guc2vf_too_short
[04:09:49] [PASSED] vf_rejects_guc2vf_too_long
[04:09:49] [PASSED] vf_rejects_guc2vf_no_payload
[04:09:49] ==================== [PASSED] vf_relay =====================
[04:09:49] ================= pf_service (11 subtests) =================
[04:09:49] [PASSED] pf_negotiate_any
[04:09:49] [PASSED] pf_negotiate_base_match
[04:09:49] [PASSED] pf_negotiate_base_newer
[04:09:49] [PASSED] pf_negotiate_base_next
[04:09:49] [SKIPPED] pf_negotiate_base_older
[04:09:49] [PASSED] pf_negotiate_base_prev
[04:09:49] [PASSED] pf_negotiate_latest_match
[04:09:49] [PASSED] pf_negotiate_latest_newer
[04:09:49] [PASSED] pf_negotiate_latest_next
[04:09:49] [SKIPPED] pf_negotiate_latest_older
[04:09:49] [SKIPPED] pf_negotiate_latest_prev
[04:09:49] =================== [PASSED] pf_service ====================
[04:09:49] ===================== lmtt (1 subtest) =====================
[04:09:49] ======================== test_ops =========================
[04:09:49] [PASSED] 2-level
[04:09:49] [PASSED] multi-level
[04:09:49] ==================== [PASSED] test_ops =====================
[04:09:49] ====================== [PASSED] lmtt =======================
[04:09:49] ==================== xe_bo (2 subtests) ====================
[04:09:49] [SKIPPED] xe_ccs_migrate_kunit
[04:09:49] [SKIPPED] xe_bo_evict_kunit
[04:09:49] ===================== [SKIPPED] xe_bo ======================
[04:09:49] ================== xe_dma_buf (1 subtest) ==================
[04:09:49] [SKIPPED] xe_dma_buf_kunit
[04:09:49] =================== [SKIPPED] xe_dma_buf ===================
[04:09:49] ================== xe_migrate (1 subtest) ==================
[04:09:49] [SKIPPED] xe_migrate_sanity_kunit
[04:09:49] =================== [SKIPPED] xe_migrate ===================
[04:09:49] =================== xe_mocs (2 subtests) ===================
[04:09:49] [SKIPPED] xe_live_mocs_kernel_kunit
[04:09:49] [SKIPPED] xe_live_mocs_reset_kunit
[04:09:49] ==================== [SKIPPED] xe_mocs =====================
[04:09:49] ==================== args (11 subtests) ====================
[04:09:49] [PASSED] count_args_test
[04:09:49] [PASSED] call_args_example
[04:09:49] [PASSED] call_args_test
[04:09:49] [PASSED] drop_first_arg_example
[04:09:49] [PASSED] drop_first_arg_test
[04:09:49] [PASSED] first_arg_example
[04:09:49] [PASSED] first_arg_test
[04:09:49] [PASSED] last_arg_example
[04:09:49] [PASSED] last_arg_test
[04:09:49] [PASSED] pick_arg_example
[04:09:49] [PASSED] sep_comma_example
[04:09:49] ====================== [PASSED] args =======================
[04:09:49] =================== xe_pci (2 subtests) ====================
[04:09:49] [PASSED] xe_gmdid_graphics_ip
[04:09:49] [PASSED] xe_gmdid_media_ip
[04:09:49] ===================== [PASSED] xe_pci ======================
[04:09:49] ==================== xe_rtp (1 subtest) ====================
[04:09:49] ================== xe_rtp_process_tests ===================
[04:09:49] [PASSED] coalesce-same-reg
[04:09:49] [PASSED] no-match-no-add
[04:09:49] [PASSED] match-or
[04:09:49] [PASSED] match-or-xfail
[04:09:49] [PASSED] no-match-no-add-multiple-rules
[04:09:49] [PASSED] two-regs-two-entries
[04:09:49] [PASSED] clr-one-set-other
[04:09:49] [PASSED] set-field
[04:09:49] [PASSED] conflict-duplicate
[04:09:49] [PASSED] conflict-not-disjoint
[04:09:49] [PASSED] conflict-reg-type
stty: 'standard input': Inappropriate ioctl for device
[04:09:49] ============== [PASSED] xe_rtp_process_tests ===============
[04:09:49] ===================== [PASSED] xe_rtp ======================
[04:09:49] ==================== xe_wa (1 subtest) =====================
[04:09:49] ======================== xe_wa_gt =========================
[04:09:49] [PASSED] TIGERLAKE (B0)
[04:09:49] [PASSED] DG1 (A0)
[04:09:49] [PASSED] DG1 (B0)
[04:09:49] [PASSED] ALDERLAKE_S (A0)
[04:09:49] [PASSED] ALDERLAKE_S (B0)
[04:09:49] [PASSED] ALDERLAKE_S (C0)
[04:09:49] [PASSED] ALDERLAKE_S (D0)
[04:09:49] [PASSED] ALDERLAKE_P (A0)
[04:09:49] [PASSED] ALDERLAKE_P (B0)
[04:09:49] [PASSED] ALDERLAKE_P (C0)
[04:09:49] [PASSED] ALDERLAKE_S_RPLS (D0)
[04:09:49] [PASSED] ALDERLAKE_P_RPLU (E0)
[04:09:49] [PASSED] DG2_G10 (C0)
[04:09:49] [PASSED] DG2_G11 (B1)
[04:09:49] [PASSED] DG2_G12 (A1)
[04:09:49] [PASSED] METEORLAKE (g:A0, m:A0)
[04:09:49] [PASSED] METEORLAKE (g:A0, m:A0)
[04:09:49] [PASSED] METEORLAKE (g:A0, m:A0)
[04:09:49] [PASSED] LUNARLAKE (g:A0, m:A0)
[04:09:49] [PASSED] LUNARLAKE (g:B0, m:A0)
[04:09:49] ==================== [PASSED] xe_wa_gt =====================
[04:09:49] ====================== [PASSED] xe_wa ======================
[04:09:49] ============================================================
[04:09:49] Testing complete. Ran 111 tests: passed: 97, skipped: 14
[04:09:49] Elapsed time: 29.776s total, 4.239s configuring, 25.317s building, 0.200s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[04:09:49] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[04:09:51] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
../lib/iomap.c:156:5: warning: no previous prototype for ‘ioread64_lo_hi’ [-Wmissing-prototypes]
156 | u64 ioread64_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:163:5: warning: no previous prototype for ‘ioread64_hi_lo’ [-Wmissing-prototypes]
163 | u64 ioread64_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:170:5: warning: no previous prototype for ‘ioread64be_lo_hi’ [-Wmissing-prototypes]
170 | u64 ioread64be_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:178:5: warning: no previous prototype for ‘ioread64be_hi_lo’ [-Wmissing-prototypes]
178 | u64 ioread64be_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:264:6: warning: no previous prototype for ‘iowrite64_lo_hi’ [-Wmissing-prototypes]
264 | void iowrite64_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:272:6: warning: no previous prototype for ‘iowrite64_hi_lo’ [-Wmissing-prototypes]
272 | void iowrite64_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:280:6: warning: no previous prototype for ‘iowrite64be_lo_hi’ [-Wmissing-prototypes]
280 | void iowrite64be_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
../lib/iomap.c:288:6: warning: no previous prototype for ‘iowrite64be_hi_lo’ [-Wmissing-prototypes]
288 | void iowrite64be_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
[04:10:12] Starting KUnit Kernel (1/1)...
[04:10:12] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[04:10:13] ============ drm_test_pick_cmdline (2 subtests) ============
[04:10:13] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[04:10:13] =============== drm_test_pick_cmdline_named ===============
[04:10:13] [PASSED] NTSC
[04:10:13] [PASSED] NTSC-J
[04:10:13] [PASSED] PAL
[04:10:13] [PASSED] PAL-M
[04:10:13] =========== [PASSED] drm_test_pick_cmdline_named ===========
[04:10:13] ============== [PASSED] drm_test_pick_cmdline ==============
[04:10:13] ================== drm_buddy (7 subtests) ==================
[04:10:13] [PASSED] drm_test_buddy_alloc_limit
[04:10:13] [PASSED] drm_test_buddy_alloc_optimistic
[04:10:13] [PASSED] drm_test_buddy_alloc_pessimistic
[04:10:13] [PASSED] drm_test_buddy_alloc_pathological
[04:10:13] [PASSED] drm_test_buddy_alloc_contiguous
[04:10:13] [PASSED] drm_test_buddy_alloc_clear
[04:10:13] [PASSED] drm_test_buddy_alloc_range_bias
[04:10:13] ==================== [PASSED] drm_buddy ====================
[04:10:13] ============= drm_cmdline_parser (40 subtests) =============
[04:10:13] [PASSED] drm_test_cmdline_force_d_only
[04:10:13] [PASSED] drm_test_cmdline_force_D_only_dvi
[04:10:13] [PASSED] drm_test_cmdline_force_D_only_hdmi
[04:10:13] [PASSED] drm_test_cmdline_force_D_only_not_digital
[04:10:13] [PASSED] drm_test_cmdline_force_e_only
[04:10:13] [PASSED] drm_test_cmdline_res
[04:10:13] [PASSED] drm_test_cmdline_res_vesa
[04:10:13] [PASSED] drm_test_cmdline_res_vesa_rblank
[04:10:13] [PASSED] drm_test_cmdline_res_rblank
[04:10:13] [PASSED] drm_test_cmdline_res_bpp
[04:10:13] [PASSED] drm_test_cmdline_res_refresh
[04:10:13] [PASSED] drm_test_cmdline_res_bpp_refresh
[04:10:13] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[04:10:13] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[04:10:13] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[04:10:13] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[04:10:13] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[04:10:13] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[04:10:13] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[04:10:13] [PASSED] drm_test_cmdline_res_margins_force_on
[04:10:13] [PASSED] drm_test_cmdline_res_vesa_margins
[04:10:13] [PASSED] drm_test_cmdline_name
[04:10:13] [PASSED] drm_test_cmdline_name_bpp
[04:10:13] [PASSED] drm_test_cmdline_name_option
[04:10:13] [PASSED] drm_test_cmdline_name_bpp_option
[04:10:13] [PASSED] drm_test_cmdline_rotate_0
[04:10:13] [PASSED] drm_test_cmdline_rotate_90
[04:10:13] [PASSED] drm_test_cmdline_rotate_180
[04:10:13] [PASSED] drm_test_cmdline_rotate_270
[04:10:13] [PASSED] drm_test_cmdline_hmirror
[04:10:13] [PASSED] drm_test_cmdline_vmirror
[04:10:13] [PASSED] drm_test_cmdline_margin_options
[04:10:13] [PASSED] drm_test_cmdline_multiple_options
[04:10:13] [PASSED] drm_test_cmdline_bpp_extra_and_option
[04:10:13] [PASSED] drm_test_cmdline_extra_and_option
[04:10:13] [PASSED] drm_test_cmdline_freestanding_options
[04:10:13] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[04:10:13] [PASSED] drm_test_cmdline_panel_orientation
[04:10:13] ================ drm_test_cmdline_invalid =================
[04:10:13] [PASSED] margin_only
[04:10:13] [PASSED] interlace_only
[04:10:13] [PASSED] res_missing_x
[04:10:13] [PASSED] res_missing_y
[04:10:13] [PASSED] res_bad_y
[04:10:13] [PASSED] res_missing_y_bpp
[04:10:13] [PASSED] res_bad_bpp
[04:10:13] [PASSED] res_bad_refresh
[04:10:13] [PASSED] res_bpp_refresh_force_on_off
[04:10:13] [PASSED] res_invalid_mode
[04:10:13] [PASSED] res_bpp_wrong_place_mode
[04:10:13] [PASSED] name_bpp_refresh
[04:10:13] [PASSED] name_refresh
[04:10:13] [PASSED] name_refresh_wrong_mode
[04:10:13] [PASSED] name_refresh_invalid_mode
[04:10:13] [PASSED] rotate_multiple
[04:10:13] [PASSED] rotate_invalid_val
[04:10:13] [PASSED] rotate_truncated
[04:10:13] [PASSED] invalid_option
[04:10:13] [PASSED] invalid_tv_option
[04:10:13] [PASSED] truncated_tv_option
[04:10:13] ============ [PASSED] drm_test_cmdline_invalid =============
[04:10:13] =============== drm_test_cmdline_tv_options ===============
[04:10:13] [PASSED] NTSC
[04:10:13] [PASSED] NTSC_443
[04:10:13] [PASSED] NTSC_J
[04:10:13] [PASSED] PAL
[04:10:13] [PASSED] PAL_M
[04:10:13] [PASSED] PAL_N
[04:10:13] [PASSED] SECAM
[04:10:13] [PASSED] MONO_525
[04:10:13] [PASSED] MONO_625
[04:10:13] =========== [PASSED] drm_test_cmdline_tv_options ===========
[04:10:13] =============== [PASSED] drm_cmdline_parser ================
[04:10:13] ========== drmm_connector_hdmi_init (19 subtests) ==========
[04:10:13] [PASSED] drm_test_connector_hdmi_init_valid
[04:10:13] [PASSED] drm_test_connector_hdmi_init_bpc_8
[04:10:13] [PASSED] drm_test_connector_hdmi_init_bpc_10
[04:10:13] [PASSED] drm_test_connector_hdmi_init_bpc_12
[04:10:13] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[04:10:13] [PASSED] drm_test_connector_hdmi_init_bpc_null
[04:10:13] [PASSED] drm_test_connector_hdmi_init_formats_empty
[04:10:13] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[04:10:13] [PASSED] drm_test_connector_hdmi_init_null_ddc
[04:10:13] [PASSED] drm_test_connector_hdmi_init_null_product
[04:10:13] [PASSED] drm_test_connector_hdmi_init_null_vendor
[04:10:13] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[04:10:13] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[04:10:13] [PASSED] drm_test_connector_hdmi_init_product_valid
[04:10:13] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[04:10:13] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[04:10:13] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[04:10:13] ========= drm_test_connector_hdmi_init_type_valid =========
[04:10:13] [PASSED] HDMI-A
[04:10:13] [PASSED] HDMI-B
[04:10:13] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[04:10:13] ======== drm_test_connector_hdmi_init_type_invalid ========
[04:10:13] [PASSED] Unknown
[04:10:13] [PASSED] VGA
[04:10:13] [PASSED] DVI-I
[04:10:13] [PASSED] DVI-D
[04:10:13] [PASSED] DVI-A
[04:10:13] [PASSED] Composite
[04:10:13] [PASSED] SVIDEO
[04:10:13] [PASSED] LVDS
[04:10:13] [PASSED] Component
[04:10:13] [PASSED] DIN
[04:10:13] [PASSED] DP
[04:10:13] [PASSED] TV
[04:10:13] [PASSED] eDP
[04:10:13] [PASSED] Virtual
[04:10:13] [PASSED] DSI
[04:10:13] [PASSED] DPI
[04:10:13] [PASSED] Writeback
[04:10:13] [PASSED] SPI
[04:10:13] [PASSED] USB
[04:10:13] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[04:10:13] ============ [PASSED] drmm_connector_hdmi_init =============
[04:10:13] ============= drmm_connector_init (3 subtests) =============
[04:10:13] [PASSED] drm_test_drmm_connector_init
[04:10:13] [PASSED] drm_test_drmm_connector_init_null_ddc
[04:10:13] ========= drm_test_drmm_connector_init_type_valid =========
[04:10:13] [PASSED] Unknown
[04:10:13] [PASSED] VGA
[04:10:13] [PASSED] DVI-I
[04:10:13] [PASSED] DVI-D
[04:10:13] [PASSED] DVI-A
[04:10:13] [PASSED] Composite
[04:10:13] [PASSED] SVIDEO
[04:10:13] [PASSED] LVDS
[04:10:13] [PASSED] Component
[04:10:13] [PASSED] DIN
[04:10:13] [PASSED] DP
[04:10:13] [PASSED] HDMI-A
[04:10:13] [PASSED] HDMI-B
[04:10:13] [PASSED] TV
[04:10:13] [PASSED] eDP
[04:10:13] [PASSED] Virtual
[04:10:13] [PASSED] DSI
[04:10:13] [PASSED] DPI
[04:10:13] [PASSED] Writeback
[04:10:13] [PASSED] SPI
[04:10:13] [PASSED] USB
[04:10:13] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[04:10:13] =============== [PASSED] drmm_connector_init ===============
[04:10:13] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[04:10:13] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[04:10:13] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[04:10:13] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[04:10:13] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[04:10:13] ========== drm_test_get_tv_mode_from_name_valid ===========
[04:10:13] [PASSED] NTSC
[04:10:13] [PASSED] NTSC-443
[04:10:13] [PASSED] NTSC-J
[04:10:13] [PASSED] PAL
[04:10:13] [PASSED] PAL-M
[04:10:13] [PASSED] PAL-N
[04:10:13] [PASSED] SECAM
[04:10:13] [PASSED] Mono
[04:10:13] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[04:10:13] [PASSED] drm_test_get_tv_mode_from_name_truncated
[04:10:13] ============ [PASSED] drm_get_tv_mode_from_name ============
[04:10:13] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[04:10:13] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[04:10:13] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[04:10:13] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[04:10:13] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[04:10:13] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[04:10:13] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[04:10:13] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[04:10:13] [PASSED] VIC 96
[04:10:13] [PASSED] VIC 97
[04:10:13] [PASSED] VIC 101
[04:10:13] [PASSED] VIC 102
[04:10:13] [PASSED] VIC 106
[04:10:13] [PASSED] VIC 107
[04:10:13] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[04:10:13] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[04:10:13] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[04:10:13] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[04:10:13] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[04:10:13] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[04:10:13] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[04:10:13] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[04:10:13] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[04:10:13] [PASSED] Automatic
[04:10:13] [PASSED] Full
[04:10:13] [PASSED] Limited 16:235
[04:10:13] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[04:10:13] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[04:10:13] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[04:10:13] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[04:10:13] === drm_test_drm_hdmi_connector_get_output_format_name ====
[04:10:13] [PASSED] RGB
[04:10:13] [PASSED] YUV 4:2:0
[04:10:13] [PASSED] YUV 4:2:2
[04:10:13] [PASSED] YUV 4:4:4
[04:10:13] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[04:10:13] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[04:10:13] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[04:10:13] ============= drm_damage_helper (21 subtests) ==============
[04:10:13] [PASSED] drm_test_damage_iter_no_damage
[04:10:13] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[04:10:13] [PASSED] drm_test_damage_iter_no_damage_src_moved
[04:10:13] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[04:10:13] [PASSED] drm_test_damage_iter_no_damage_not_visible
[04:10:13] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[04:10:13] [PASSED] drm_test_damage_iter_no_damage_no_fb
[04:10:13] [PASSED] drm_test_damage_iter_simple_damage
[04:10:13] [PASSED] drm_test_damage_iter_single_damage
[04:10:13] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[04:10:13] [PASSED] drm_test_damage_iter_single_damage_outside_src
[04:10:13] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[04:10:13] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[04:10:13] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[04:10:13] [PASSED] drm_test_damage_iter_single_damage_src_moved
[04:10:13] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[04:10:13] [PASSED] drm_test_damage_iter_damage
[04:10:13] [PASSED] drm_test_damage_iter_damage_one_intersect
[04:10:13] [PASSED] drm_test_damage_iter_damage_one_outside
[04:10:13] [PASSED] drm_test_damage_iter_damage_src_moved
[04:10:13] [PASSED] drm_test_damage_iter_damage_not_visible
[04:10:13] ================ [PASSED] drm_damage_helper ================
[04:10:13] ============== drm_dp_mst_helper (3 subtests) ==============
[04:10:13] ============== drm_test_dp_mst_calc_pbn_mode ==============
[04:10:13] [PASSED] Clock 154000 BPP 30 DSC disabled
[04:10:13] [PASSED] Clock 234000 BPP 30 DSC disabled
[04:10:13] [PASSED] Clock 297000 BPP 24 DSC disabled
[04:10:13] [PASSED] Clock 332880 BPP 24 DSC enabled
[04:10:13] [PASSED] Clock 324540 BPP 24 DSC enabled
[04:10:13] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[04:10:13] ============== drm_test_dp_mst_calc_pbn_div ===============
[04:10:13] [PASSED] Link rate 2000000 lane count 4
[04:10:13] [PASSED] Link rate 2000000 lane count 2
[04:10:13] [PASSED] Link rate 2000000 lane count 1
[04:10:13] [PASSED] Link rate 1350000 lane count 4
[04:10:13] [PASSED] Link rate 1350000 lane count 2
[04:10:13] [PASSED] Link rate 1350000 lane count 1
[04:10:13] [PASSED] Link rate 1000000 lane count 4
[04:10:13] [PASSED] Link rate 1000000 lane count 2
[04:10:13] [PASSED] Link rate 1000000 lane count 1
[04:10:13] [PASSED] Link rate 810000 lane count 4
[04:10:13] [PASSED] Link rate 810000 lane count 2
[04:10:13] [PASSED] Link rate 810000 lane count 1
[04:10:13] [PASSED] Link rate 540000 lane count 4
[04:10:13] [PASSED] Link rate 540000 lane count 2
[04:10:13] [PASSED] Link rate 540000 lane count 1
[04:10:13] [PASSED] Link rate 270000 lane count 4
[04:10:13] [PASSED] Link rate 270000 lane count 2
[04:10:13] [PASSED] Link rate 270000 lane count 1
[04:10:13] [PASSED] Link rate 162000 lane count 4
[04:10:13] [PASSED] Link rate 162000 lane count 2
[04:10:13] [PASSED] Link rate 162000 lane count 1
[04:10:13] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[04:10:13] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[04:10:13] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[04:10:13] [PASSED] DP_POWER_UP_PHY with port number
[04:10:13] [PASSED] DP_POWER_DOWN_PHY with port number
[04:10:13] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[04:10:13] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[04:10:13] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[04:10:13] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[04:10:13] [PASSED] DP_QUERY_PAYLOAD with port number
[04:10:13] [PASSED] DP_QUERY_PAYLOAD with VCPI
[04:10:13] [PASSED] DP_REMOTE_DPCD_READ with port number
[04:10:13] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[04:10:13] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[04:10:13] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[04:10:13] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[04:10:13] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[04:10:13] [PASSED] DP_REMOTE_I2C_READ with port number
[04:10:13] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[04:10:13] [PASSED] DP_REMOTE_I2C_READ with transactions array
[04:10:13] [PASSED] DP_REMOTE_I2C_WRITE with port number
[04:10:13] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[04:10:13] [PASSED] DP_REMOTE_I2C_WRITE with data array
[04:10:13] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[04:10:13] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[04:10:13] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[04:10:13] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[04:10:13] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[04:10:13] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[04:10:13] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[04:10:13] ================ [PASSED] drm_dp_mst_helper ================
[04:10:13] ================== drm_exec (7 subtests) ===================
[04:10:13] [PASSED] sanitycheck
[04:10:13] [PASSED] test_lock
[04:10:13] [PASSED] test_lock_unlock
[04:10:13] [PASSED] test_duplicates
[04:10:13] [PASSED] test_prepare
[04:10:13] [PASSED] test_prepare_array
[04:10:13] [PASSED] test_multiple_loops
[04:10:13] ==================== [PASSED] drm_exec =====================
[04:10:13] =========== drm_format_helper_test (17 subtests) ===========
[04:10:13] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[04:10:13] [PASSED] single_pixel_source_buffer
[04:10:13] [PASSED] single_pixel_clip_rectangle
[04:10:13] [PASSED] well_known_colors
[04:10:13] [PASSED] destination_pitch
[04:10:13] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[04:10:13] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[04:10:13] [PASSED] single_pixel_source_buffer
[04:10:13] [PASSED] single_pixel_clip_rectangle
[04:10:13] [PASSED] well_known_colors
[04:10:13] [PASSED] destination_pitch
[04:10:13] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[04:10:13] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[04:10:13] [PASSED] single_pixel_source_buffer
[04:10:13] [PASSED] single_pixel_clip_rectangle
[04:10:13] [PASSED] well_known_colors
[04:10:13] [PASSED] destination_pitch
[04:10:13] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[04:10:13] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[04:10:13] [PASSED] single_pixel_source_buffer
[04:10:13] [PASSED] single_pixel_clip_rectangle
[04:10:13] [PASSED] well_known_colors
[04:10:13] [PASSED] destination_pitch
[04:10:13] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[04:10:13] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[04:10:13] [PASSED] single_pixel_source_buffer
[04:10:13] [PASSED] single_pixel_clip_rectangle
[04:10:13] [PASSED] well_known_colors
[04:10:13] [PASSED] destination_pitch
[04:10:13] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[04:10:13] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[04:10:13] [PASSED] single_pixel_source_buffer
[04:10:13] [PASSED] single_pixel_clip_rectangle
[04:10:13] [PASSED] well_known_colors
[04:10:13] [PASSED] destination_pitch
[04:10:13] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[04:10:13] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[04:10:13] [PASSED] single_pixel_source_buffer
[04:10:13] [PASSED] single_pixel_clip_rectangle
[04:10:13] [PASSED] well_known_colors
[04:10:13] [PASSED] destination_pitch
[04:10:13] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[04:10:13] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[04:10:13] [PASSED] single_pixel_source_buffer
[04:10:13] [PASSED] single_pixel_clip_rectangle
[04:10:13] [PASSED] well_known_colors
[04:10:13] [PASSED] destination_pitch
[04:10:13] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[04:10:13] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[04:10:13] [PASSED] single_pixel_source_buffer
[04:10:13] [PASSED] single_pixel_clip_rectangle
[04:10:13] [PASSED] well_known_colors
[04:10:13] [PASSED] destination_pitch
[04:10:13] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[04:10:13] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[04:10:13] [PASSED] single_pixel_source_buffer
[04:10:13] [PASSED] single_pixel_clip_rectangle
[04:10:13] [PASSED] well_known_colors
[04:10:13] [PASSED] destination_pitch
[04:10:13] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[04:10:13] ============== drm_test_fb_xrgb8888_to_mono ===============
[04:10:13] [PASSED] single_pixel_source_buffer
[04:10:13] [PASSED] single_pixel_clip_rectangle
[04:10:13] [PASSED] well_known_colors
[04:10:13] [PASSED] destination_pitch
[04:10:13] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[04:10:13] ==================== drm_test_fb_swab =====================
[04:10:13] [PASSED] single_pixel_source_buffer
[04:10:13] [PASSED] single_pixel_clip_rectangle
[04:10:13] [PASSED] well_known_colors
[04:10:13] [PASSED] destination_pitch
[04:10:13] ================ [PASSED] drm_test_fb_swab =================
[04:10:13] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[04:10:13] [PASSED] single_pixel_source_buffer
[04:10:13] [PASSED] single_pixel_clip_rectangle
[04:10:13] [PASSED] well_known_colors
[04:10:13] [PASSED] destination_pitch
[04:10:13] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[04:10:13] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[04:10:13] [PASSED] single_pixel_source_buffer
[04:10:13] [PASSED] single_pixel_clip_rectangle
[04:10:13] [PASSED] well_known_colors
[04:10:13] [PASSED] destination_pitch
[04:10:13] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[04:10:13] ================= drm_test_fb_clip_offset =================
[04:10:13] [PASSED] pass through
[04:10:13] [PASSED] horizontal offset
[04:10:13] [PASSED] vertical offset
[04:10:13] [PASSED] horizontal and vertical offset
[04:10:13] [PASSED] horizontal offset (custom pitch)
[04:10:13] [PASSED] vertical offset (custom pitch)
[04:10:13] [PASSED] horizontal and vertical offset (custom pitch)
[04:10:13] ============= [PASSED] drm_test_fb_clip_offset =============
[04:10:13] ============== drm_test_fb_build_fourcc_list ==============
[04:10:13] [PASSED] no native formats
[04:10:13] [PASSED] XRGB8888 as native format
[04:10:13] [PASSED] remove duplicates
[04:10:13] [PASSED] convert alpha formats
[04:10:13] [PASSED] random formats
[04:10:13] ========== [PASSED] drm_test_fb_build_fourcc_list ==========
[04:10:13] =================== drm_test_fb_memcpy ====================
[04:10:13] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[04:10:13] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[04:10:13] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[04:10:13] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[04:10:13] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[04:10:13] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[04:10:13] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[04:10:13] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[04:10:13] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[04:10:13] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[04:10:13] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[04:10:13] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[04:10:13] =============== [PASSED] drm_test_fb_memcpy ================
[04:10:13] ============= [PASSED] drm_format_helper_test ==============
[04:10:13] ================= drm_format (18 subtests) =================
[04:10:13] [PASSED] drm_test_format_block_width_invalid
[04:10:13] [PASSED] drm_test_format_block_width_one_plane
[04:10:13] [PASSED] drm_test_format_block_width_two_plane
[04:10:13] [PASSED] drm_test_format_block_width_three_plane
[04:10:13] [PASSED] drm_test_format_block_width_tiled
[04:10:13] [PASSED] drm_test_format_block_height_invalid
[04:10:13] [PASSED] drm_test_format_block_height_one_plane
[04:10:13] [PASSED] drm_test_format_block_height_two_plane
[04:10:13] [PASSED] drm_test_format_block_height_three_plane
[04:10:13] [PASSED] drm_test_format_block_height_tiled
[04:10:13] [PASSED] drm_test_format_min_pitch_invalid
[04:10:13] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[04:10:13] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[04:10:13] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[04:10:13] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[04:10:13] [PASSED] drm_test_format_min_pitch_two_plane
[04:10:13] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[04:10:13] [PASSED] drm_test_format_min_pitch_tiled
[04:10:13] =================== [PASSED] drm_format ====================
[04:10:13] =============== drm_framebuffer (1 subtest) ================
[04:10:13] =============== drm_test_framebuffer_create ===============
[04:10:13] [PASSED] ABGR8888 normal sizes
[04:10:13] [PASSED] ABGR8888 max sizes
[04:10:13] [PASSED] ABGR8888 pitch greater than min required
[04:10:13] [PASSED] ABGR8888 pitch less than min required
[04:10:13] [PASSED] ABGR8888 Invalid width
[04:10:13] [PASSED] ABGR8888 Invalid buffer handle
[04:10:13] [PASSED] No pixel format
[04:10:13] [PASSED] ABGR8888 Width 0
[04:10:13] [PASSED] ABGR8888 Height 0
[04:10:13] [PASSED] ABGR8888 Out of bound height * pitch combination
[04:10:13] [PASSED] ABGR8888 Large buffer offset
[04:10:13] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[04:10:13] [PASSED] ABGR8888 Valid buffer modifier
[04:10:13] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[04:10:13] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[04:10:13] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[04:10:13] [PASSED] NV12 Normal sizes
[04:10:13] [PASSED] NV12 Max sizes
[04:10:13] [PASSED] NV12 Invalid pitch
[04:10:13] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[04:10:13] [PASSED] NV12 different modifier per-plane
[04:10:13] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[04:10:13] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[04:10:13] [PASSED] NV12 Modifier for inexistent plane
[04:10:13] [PASSED] NV12 Handle for inexistent plane
[04:10:13] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[04:10:13] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[04:10:13] [PASSED] YVU420 Normal sizes
[04:10:13] [PASSED] YVU420 Max sizes
[04:10:13] [PASSED] YVU420 Invalid pitch
[04:10:13] [PASSED] YVU420 Different pitches
[04:10:13] [PASSED] YVU420 Different buffer offsets/pitches
[04:10:13] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[04:10:13] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[04:10:13] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[04:10:13] [PASSED] YVU420 Valid modifier
[04:10:13] [PASSED] YVU420 Different modifiers per plane
[04:10:13] [PASSED] YVU420 Modifier for inexistent plane
[04:10:13] [PASSED] X0L2 Normal sizes
[04:10:13] [PASSED] X0L2 Max sizes
[04:10:13] [PASSED] X0L2 Invalid pitch
[04:10:13] [PASSED] X0L2 Pitch greater than minimum required
[04:10:13] [PASSED] X0L2 Handle for inexistent plane
[04:10:13] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[04:10:13] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[04:10:13] [PASSED] X0L2 Valid modifier
[04:10:13] [PASSED] X0L2 Modifier for inexistent plane
[04:10:13] =========== [PASSED] drm_test_framebuffer_create ===========
[04:10:13] ================= [PASSED] drm_framebuffer =================
[04:10:13] ================ drm_gem_shmem (8 subtests) ================
[04:10:13] [PASSED] drm_gem_shmem_test_obj_create
[04:10:13] [PASSED] drm_gem_shmem_test_obj_create_private
[04:10:13] [PASSED] drm_gem_shmem_test_pin_pages
[04:10:13] [PASSED] drm_gem_shmem_test_vmap
[04:10:13] [PASSED] drm_gem_shmem_test_get_pages_sgt
[04:10:13] [PASSED] drm_gem_shmem_test_get_sg_table
[04:10:13] [PASSED] drm_gem_shmem_test_madvise
[04:10:13] [PASSED] drm_gem_shmem_test_purge
[04:10:13] ================== [PASSED] drm_gem_shmem ==================
[04:10:13] === drm_atomic_helper_connector_hdmi_check (22 subtests) ===
[04:10:13] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[04:10:13] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[04:10:13] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[04:10:13] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[04:10:13] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[04:10:13] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[04:10:13] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[04:10:13] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[04:10:13] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[04:10:13] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback
[04:10:13] [PASSED] drm_test_check_max_tmds_rate_format_fallback
[04:10:13] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[04:10:13] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[04:10:13] [PASSED] drm_test_check_output_bpc_dvi
[04:10:13] [PASSED] drm_test_check_output_bpc_format_vic_1
[04:10:13] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[04:10:13] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[04:10:13] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[04:10:13] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[04:10:13] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[04:10:13] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[04:10:13] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[04:10:13] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[04:10:13] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[04:10:13] [PASSED] drm_test_check_broadcast_rgb_value
[04:10:13] [PASSED] drm_test_check_bpc_8_value
[04:10:13] [PASSED] drm_test_check_bpc_10_value
[04:10:13] [PASSED] drm_test_check_bpc_12_value
[04:10:13] [PASSED] drm_test_check_format_value
[04:10:13] [PASSED] drm_test_check_tmds_char_value
[04:10:13] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[04:10:13] ================= drm_managed (2 subtests) =================
[04:10:13] [PASSED] drm_test_managed_release_action
[04:10:13] [PASSED] drm_test_managed_run_action
[04:10:13] =================== [PASSED] drm_managed ===================
[04:10:13] =================== drm_mm (6 subtests) ====================
[04:10:13] [PASSED] drm_test_mm_init
[04:10:13] [PASSED] drm_test_mm_debug
[04:10:13] [PASSED] drm_test_mm_align32
[04:10:13] [PASSED] drm_test_mm_align64
[04:10:13] [PASSED] drm_test_mm_lowest
[04:10:13] [PASSED] drm_test_mm_highest
[04:10:13] ===================== [PASSED] drm_mm ======================
[04:10:13] ============= drm_modes_analog_tv (5 subtests) =============
[04:10:13] [PASSED] drm_test_modes_analog_tv_mono_576i
[04:10:13] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[04:10:13] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[04:10:13] [PASSED] drm_test_modes_analog_tv_pal_576i
[04:10:13] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[04:10:13] =============== [PASSED] drm_modes_analog_tv ===============
[04:10:13] ============== drm_plane_helper (2 subtests) ===============
[04:10:13] =============== drm_test_check_plane_state ================
[04:10:13] [PASSED] clipping_simple
[04:10:13] [PASSED] clipping_rotate_reflect
[04:10:13] [PASSED] positioning_simple
[04:10:13] [PASSED] upscaling
[04:10:13] [PASSED] downscaling
[04:10:13] [PASSED] rounding1
[04:10:13] [PASSED] rounding2
[04:10:13] [PASSED] rounding3
[04:10:13] [PASSED] rounding4
[04:10:13] =========== [PASSED] drm_test_check_plane_state ============
[04:10:13] =========== drm_test_check_invalid_plane_state ============
[04:10:13] [PASSED] positioning_invalid
[04:10:13] [PASSED] upscaling_invalid
stty: 'standard input': Inappropriate ioctl for device
[04:10:13] [PASSED] downscaling_invalid
[04:10:13] ======= [PASSED] drm_test_check_invalid_plane_state ========
[04:10:13] ================ [PASSED] drm_plane_helper =================
[04:10:13] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[04:10:13] ====== drm_test_connector_helper_tv_get_modes_check =======
[04:10:13] [PASSED] None
[04:10:13] [PASSED] PAL
[04:10:13] [PASSED] NTSC
[04:10:13] [PASSED] Both, NTSC Default
[04:10:13] [PASSED] Both, PAL Default
[04:10:13] [PASSED] Both, NTSC Default, with PAL on command-line
[04:10:13] [PASSED] Both, PAL Default, with NTSC on command-line
[04:10:13] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[04:10:13] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[04:10:13] ================== drm_rect (9 subtests) ===================
[04:10:13] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[04:10:13] [PASSED] drm_test_rect_clip_scaled_not_clipped
[04:10:13] [PASSED] drm_test_rect_clip_scaled_clipped
[04:10:13] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[04:10:13] ================= drm_test_rect_intersect =================
[04:10:13] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[04:10:13] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[04:10:13] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[04:10:13] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[04:10:13] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[04:10:13] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[04:10:13] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[04:10:13] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[04:10:13] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[04:10:13] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[04:10:13] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[04:10:13] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[04:10:13] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[04:10:13] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[04:10:13] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[04:10:13] ============= [PASSED] drm_test_rect_intersect =============
[04:10:13] ================ drm_test_rect_calc_hscale ================
[04:10:13] [PASSED] normal use
[04:10:13] [PASSED] out of max range
[04:10:13] [PASSED] out of min range
[04:10:13] [PASSED] zero dst
[04:10:13] [PASSED] negative src
[04:10:13] [PASSED] negative dst
[04:10:13] ============ [PASSED] drm_test_rect_calc_hscale ============
[04:10:13] ================ drm_test_rect_calc_vscale ================
[04:10:13] [PASSED] normal use
[04:10:13] [PASSED] out of max range
[04:10:13] [PASSED] out of min range
[04:10:13] [PASSED] zero dst
[04:10:13] [PASSED] negative src
[04:10:13] [PASSED] negative dst
[04:10:13] ============ [PASSED] drm_test_rect_calc_vscale ============
[04:10:13] ================== drm_test_rect_rotate ===================
[04:10:13] [PASSED] reflect-x
[04:10:13] [PASSED] reflect-y
[04:10:13] [PASSED] rotate-0
[04:10:13] [PASSED] rotate-90
[04:10:13] [PASSED] rotate-180
[04:10:13] [PASSED] rotate-270
[04:10:13] ============== [PASSED] drm_test_rect_rotate ===============
[04:10:13] ================ drm_test_rect_rotate_inv =================
[04:10:13] [PASSED] reflect-x
[04:10:13] [PASSED] reflect-y
[04:10:13] [PASSED] rotate-0
[04:10:13] [PASSED] rotate-90
[04:10:13] [PASSED] rotate-180
[04:10:13] [PASSED] rotate-270
[04:10:13] ============ [PASSED] drm_test_rect_rotate_inv =============
[04:10:13] ==================== [PASSED] drm_rect =====================
[04:10:13] ============================================================
[04:10:13] Testing complete. Ran 515 tests: passed: 515
[04:10:13] Elapsed time: 23.771s total, 1.731s configuring, 21.843s building, 0.150s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[04:10:13] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[04:10:14] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
[04:10:23] Starting KUnit Kernel (1/1)...
[04:10:23] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[04:10:23] ================= ttm_device (5 subtests) ==================
[04:10:23] [PASSED] ttm_device_init_basic
[04:10:23] [PASSED] ttm_device_init_multiple
[04:10:23] [PASSED] ttm_device_fini_basic
[04:10:23] [PASSED] ttm_device_init_no_vma_man
[04:10:23] ================== ttm_device_init_pools ==================
[04:10:23] [PASSED] No DMA allocations, no DMA32 required
[04:10:23] [PASSED] DMA allocations, DMA32 required
[04:10:23] [PASSED] No DMA allocations, DMA32 required
[04:10:23] [PASSED] DMA allocations, no DMA32 required
[04:10:23] ============== [PASSED] ttm_device_init_pools ==============
[04:10:23] =================== [PASSED] ttm_device ====================
[04:10:23] ================== ttm_pool (8 subtests) ===================
[04:10:23] ================== ttm_pool_alloc_basic ===================
[04:10:23] [PASSED] One page
[04:10:23] [PASSED] More than one page
[04:10:23] [PASSED] Above the allocation limit
[04:10:23] [PASSED] One page, with coherent DMA mappings enabled
[04:10:23] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[04:10:23] ============== [PASSED] ttm_pool_alloc_basic ===============
[04:10:23] ============== ttm_pool_alloc_basic_dma_addr ==============
[04:10:23] [PASSED] One page
[04:10:23] [PASSED] More than one page
[04:10:23] [PASSED] Above the allocation limit
[04:10:23] [PASSED] One page, with coherent DMA mappings enabled
[04:10:23] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[04:10:23] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[04:10:23] [PASSED] ttm_pool_alloc_order_caching_match
[04:10:23] [PASSED] ttm_pool_alloc_caching_mismatch
[04:10:23] [PASSED] ttm_pool_alloc_order_mismatch
[04:10:23] [PASSED] ttm_pool_free_dma_alloc
[04:10:23] [PASSED] ttm_pool_free_no_dma_alloc
[04:10:23] [PASSED] ttm_pool_fini_basic
[04:10:23] ==================== [PASSED] ttm_pool =====================
[04:10:23] ================ ttm_resource (8 subtests) =================
[04:10:23] ================= ttm_resource_init_basic =================
[04:10:23] [PASSED] Init resource in TTM_PL_SYSTEM
[04:10:23] [PASSED] Init resource in TTM_PL_VRAM
[04:10:23] [PASSED] Init resource in a private placement
[04:10:23] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[04:10:23] ============= [PASSED] ttm_resource_init_basic =============
[04:10:23] [PASSED] ttm_resource_init_pinned
[04:10:23] [PASSED] ttm_resource_fini_basic
[04:10:23] [PASSED] ttm_resource_manager_init_basic
[04:10:23] [PASSED] ttm_resource_manager_usage_basic
[04:10:23] [PASSED] ttm_resource_manager_set_used_basic
[04:10:23] [PASSED] ttm_sys_man_alloc_basic
[04:10:23] [PASSED] ttm_sys_man_free_basic
[04:10:23] ================== [PASSED] ttm_resource ===================
[04:10:23] =================== ttm_tt (15 subtests) ===================
[04:10:23] ==================== ttm_tt_init_basic ====================
[04:10:23] [PASSED] Page-aligned size
[04:10:23] [PASSED] Extra pages requested
[04:10:23] ================ [PASSED] ttm_tt_init_basic ================
[04:10:23] [PASSED] ttm_tt_init_misaligned
[04:10:23] [PASSED] ttm_tt_fini_basic
[04:10:23] [PASSED] ttm_tt_fini_sg
[04:10:23] [PASSED] ttm_tt_fini_shmem
[04:10:23] [PASSED] ttm_tt_create_basic
[04:10:23] [PASSED] ttm_tt_create_invalid_bo_type
[04:10:23] [PASSED] ttm_tt_create_ttm_exists
[04:10:23] [PASSED] ttm_tt_create_failed
[04:10:23] [PASSED] ttm_tt_destroy_basic
[04:10:23] [PASSED] ttm_tt_populate_null_ttm
[04:10:23] [PASSED] ttm_tt_populate_populated_ttm
[04:10:23] [PASSED] ttm_tt_unpopulate_basic
[04:10:23] [PASSED] ttm_tt_unpopulate_empty_ttm
[04:10:23] [PASSED] ttm_tt_swapin_basic
[04:10:23] ===================== [PASSED] ttm_tt ======================
[04:10:23] =================== ttm_bo (14 subtests) ===================
[04:10:23] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[04:10:23] [PASSED] Cannot be interrupted and sleeps
[04:10:23] [PASSED] Cannot be interrupted, locks straight away
[04:10:23] [PASSED] Can be interrupted, sleeps
[04:10:23] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[04:10:23] [PASSED] ttm_bo_reserve_locked_no_sleep
[04:10:23] [PASSED] ttm_bo_reserve_no_wait_ticket
[04:10:23] [PASSED] ttm_bo_reserve_double_resv
[04:10:23] [PASSED] ttm_bo_reserve_interrupted
[04:10:23] [PASSED] ttm_bo_reserve_deadlock
[04:10:23] [PASSED] ttm_bo_unreserve_basic
[04:10:23] [PASSED] ttm_bo_unreserve_pinned
[04:10:23] [PASSED] ttm_bo_unreserve_bulk
[04:10:23] [PASSED] ttm_bo_put_basic
[04:10:23] [PASSED] ttm_bo_put_shared_resv
[04:10:23] [PASSED] ttm_bo_pin_basic
[04:10:23] [PASSED] ttm_bo_pin_unpin_resource
[04:10:23] [PASSED] ttm_bo_multiple_pin_one_unpin
[04:10:23] ===================== [PASSED] ttm_bo ======================
[04:10:23] ============== ttm_bo_validate (22 subtests) ===============
[04:10:23] ============== ttm_bo_init_reserved_sys_man ===============
[04:10:23] [PASSED] Buffer object for userspace
[04:10:23] [PASSED] Kernel buffer object
[04:10:23] [PASSED] Shared buffer object
[04:10:23] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[04:10:23] ============== ttm_bo_init_reserved_mock_man ==============
[04:10:23] [PASSED] Buffer object for userspace
[04:10:23] [PASSED] Kernel buffer object
[04:10:23] [PASSED] Shared buffer object
[04:10:23] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[04:10:23] [PASSED] ttm_bo_init_reserved_resv
[04:10:23] ================== ttm_bo_validate_basic ==================
[04:10:23] [PASSED] Buffer object for userspace
[04:10:23] [PASSED] Kernel buffer object
[04:10:23] [PASSED] Shared buffer object
[04:10:23] ============== [PASSED] ttm_bo_validate_basic ==============
[04:10:23] [PASSED] ttm_bo_validate_invalid_placement
[04:10:23] ============= ttm_bo_validate_same_placement ==============
[04:10:23] [PASSED] System manager
[04:10:23] [PASSED] VRAM manager
[04:10:23] ========= [PASSED] ttm_bo_validate_same_placement ==========
[04:10:23] [PASSED] ttm_bo_validate_failed_alloc
[04:10:23] [PASSED] ttm_bo_validate_pinned
[04:10:23] [PASSED] ttm_bo_validate_busy_placement
[04:10:23] ================ ttm_bo_validate_multihop =================
[04:10:23] [PASSED] Buffer object for userspace
[04:10:23] [PASSED] Kernel buffer object
[04:10:23] [PASSED] Shared buffer object
[04:10:23] ============ [PASSED] ttm_bo_validate_multihop =============
[04:10:23] ========== ttm_bo_validate_no_placement_signaled ==========
[04:10:23] [PASSED] Buffer object in system domain, no page vector
[04:10:23] [PASSED] Buffer object in system domain with an existing page vector
[04:10:23] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[04:10:23] ======== ttm_bo_validate_no_placement_not_signaled ========
[04:10:23] [PASSED] Buffer object for userspace
[04:10:23] [PASSED] Kernel buffer object
[04:10:23] [PASSED] Shared buffer object
[04:10:23] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[04:10:23] [PASSED] ttm_bo_validate_move_fence_signaled
[04:10:23] ========= ttm_bo_validate_move_fence_not_signaled =========
[04:10:23] [PASSED] Waits for GPU
[04:10:23] [PASSED] Tries to lock straight away
[04:10:24] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[04:10:24] [PASSED] ttm_bo_validate_swapout
[04:10:24] [PASSED] ttm_bo_validate_happy_evict
[04:10:24] [PASSED] ttm_bo_validate_all_pinned_evict
[04:10:24] [PASSED] ttm_bo_validate_allowed_only_evict
[04:10:24] [PASSED] ttm_bo_validate_deleted_evict
[04:10:24] [PASSED] ttm_bo_validate_busy_domain_evict
[04:10:24] [PASSED] ttm_bo_validate_evict_gutting
[04:10:24] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[04:10:24] ================= [PASSED] ttm_bo_validate =================
[04:10:24] ============================================================
[04:10:24] Testing complete. Ran 102 tests: passed: 102
[04:10:24] Elapsed time: 11.152s total, 1.703s configuring, 8.778s building, 0.556s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 32+ messages in thread
* ✓ CI.Build: success for Proper GT TLB invalidation layering and new coalescing feature. (rev2)
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (13 preceding siblings ...)
2024-07-08 4:10 ` ✓ CI.KUnit: success " Patchwork
@ 2024-07-08 4:22 ` Patchwork
2024-07-08 4:24 ` ✓ CI.Hooks: " Patchwork
` (4 subsequent siblings)
19 siblings, 0 replies; 32+ messages in thread
From: Patchwork @ 2024-07-08 4:22 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
== Series Details ==
Series: Proper GT TLB invalidation layering and new coalescing feature. (rev2)
URL : https://patchwork.freedesktop.org/series/135809/
State : success
== Summary ==
lib/modules/6.10.0-rc6-xe/kernel/sound/core/seq/
lib/modules/6.10.0-rc6-xe/kernel/sound/core/seq/snd-seq.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/core/snd-seq-device.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/core/snd-hwdep.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/core/snd.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/core/snd-pcm.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/core/snd-compress.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/core/snd-timer.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soundcore.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/intel/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/intel/atom/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/intel/atom/sst/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/intel/atom/sst/snd-intel-sst-acpi.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/intel/atom/sst/snd-intel-sst-core.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/intel/common/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/intel/common/snd-soc-acpi-intel-match.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/amd/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/amd/snd-acp-config.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-tgl.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-mlink.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-cnl.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-lnl.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-common.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-generic.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-mtl.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/amd/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/amd/snd-sof-amd-renoir.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/amd/snd-sof-amd-acp.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/snd-sof-utils.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/snd-sof-pci.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/snd-sof.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/snd-sof-probes.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/xtensa/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/sof/xtensa/snd-sof-xtensa-dsp.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/snd-soc-core.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/snd-soc-acpi.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/codecs/
lib/modules/6.10.0-rc6-xe/kernel/sound/soc/codecs/snd-soc-hdac-hda.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/hda/
lib/modules/6.10.0-rc6-xe/kernel/sound/hda/snd-intel-sdw-acpi.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/hda/ext/
lib/modules/6.10.0-rc6-xe/kernel/sound/hda/ext/snd-hda-ext-core.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/hda/snd-intel-dspcfg.ko
lib/modules/6.10.0-rc6-xe/kernel/sound/hda/snd-hda-core.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/kernel/
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/kernel/msr.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/kernel/cpuid.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/sha512-ssse3.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/crct10dif-pclmul.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/ghash-clmulni-intel.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/sha1-ssse3.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/crc32-pclmul.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/sha256-ssse3.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/aesni-intel.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/crypto/polyval-clmulni.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/events/
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/events/intel/
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/events/intel/intel-cstate.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/events/rapl.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/kvm/
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/kvm/kvm.ko
lib/modules/6.10.0-rc6-xe/kernel/arch/x86/kvm/kvm-intel.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/
lib/modules/6.10.0-rc6-xe/kernel/crypto/crypto_simd.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/cmac.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/ccm.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/cryptd.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/polyval-generic.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/async_tx/
lib/modules/6.10.0-rc6-xe/kernel/crypto/async_tx/async_xor.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/async_tx/async_tx.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/async_tx/async_memcpy.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/async_tx/async_pq.ko
lib/modules/6.10.0-rc6-xe/kernel/crypto/async_tx/async_raid6_recov.ko
lib/modules/6.10.0-rc6-xe/build
lib/modules/6.10.0-rc6-xe/modules.alias.bin
lib/modules/6.10.0-rc6-xe/modules.builtin
lib/modules/6.10.0-rc6-xe/modules.softdep
lib/modules/6.10.0-rc6-xe/modules.alias
lib/modules/6.10.0-rc6-xe/modules.order
lib/modules/6.10.0-rc6-xe/modules.symbols
lib/modules/6.10.0-rc6-xe/modules.dep.bin
+ mv kernel-nodebug.tar.gz ..
+ cd ..
+ rm -rf archive
++ date +%s
+ echo -e '\e[0Ksection_end:1720412525:package_x86_64_nodebug\r\e[0K'
+ sync
^[[0Ksection_end:1720412525:package_x86_64_nodebug
^[[0K
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 32+ messages in thread
* ✓ CI.Hooks: success for Proper GT TLB invalidation layering and new coalescing feature. (rev2)
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (14 preceding siblings ...)
2024-07-08 4:22 ` ✓ CI.Build: " Patchwork
@ 2024-07-08 4:24 ` Patchwork
2024-07-08 4:25 ` ✓ CI.checksparse: " Patchwork
` (3 subsequent siblings)
19 siblings, 0 replies; 32+ messages in thread
From: Patchwork @ 2024-07-08 4:24 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
== Series Details ==
Series: Proper GT TLB invalidation layering and new coalescing feature. (rev2)
URL : https://patchwork.freedesktop.org/series/135809/
State : success
== Summary ==
run-parts: executing /workspace/ci/hooks/00-showenv
+ export
+ grep -Ei '(^|\W)CI_'
declare -x CI_KERNEL_BUILD_DIR="/workspace/kernel/build64-default"
declare -x CI_KERNEL_SRC_DIR="/workspace/kernel"
declare -x CI_TOOLS_SRC_DIR="/workspace/ci"
declare -x CI_WORKSPACE_DIR="/workspace"
run-parts: executing /workspace/ci/hooks/10-build-W1
+ SRC_DIR=/workspace/kernel
+ RESTORE_DISPLAY_CONFIG=0
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ cd /workspace/kernel
++ nproc
+ make -j48 O=/workspace/kernel/build64-default modules_prepare
make[1]: Entering directory '/workspace/kernel/build64-default'
GEN Makefile
UPD include/generated/compile.h
UPD include/config/kernel.release
mkdir -p /workspace/kernel/build64-default/tools/objtool && make O=/workspace/kernel/build64-default subdir=tools/objtool --no-print-directory -C objtool
UPD include/generated/utsrelease.h
HOSTCC /workspace/kernel/build64-default/tools/objtool/fixdep.o
CALL ../scripts/checksyscalls.sh
HOSTLD /workspace/kernel/build64-default/tools/objtool/fixdep-in.o
LINK /workspace/kernel/build64-default/tools/objtool/fixdep
INSTALL libsubcmd_headers
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/exec-cmd.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/help.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/pager.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/parse-options.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/run-command.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/sigchain.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/subcmd-config.o
LD /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd-in.o
AR /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd.a
CC /workspace/kernel/build64-default/tools/objtool/weak.o
CC /workspace/kernel/build64-default/tools/objtool/check.o
CC /workspace/kernel/build64-default/tools/objtool/special.o
CC /workspace/kernel/build64-default/tools/objtool/builtin-check.o
CC /workspace/kernel/build64-default/tools/objtool/elf.o
CC /workspace/kernel/build64-default/tools/objtool/objtool.o
CC /workspace/kernel/build64-default/tools/objtool/orc_gen.o
CC /workspace/kernel/build64-default/tools/objtool/orc_dump.o
CC /workspace/kernel/build64-default/tools/objtool/libstring.o
CC /workspace/kernel/build64-default/tools/objtool/libctype.o
CC /workspace/kernel/build64-default/tools/objtool/str_error_r.o
CC /workspace/kernel/build64-default/tools/objtool/librbtree.o
CC /workspace/kernel/build64-default/tools/objtool/arch/x86/special.o
CC /workspace/kernel/build64-default/tools/objtool/arch/x86/decode.o
CC /workspace/kernel/build64-default/tools/objtool/arch/x86/orc.o
LD /workspace/kernel/build64-default/tools/objtool/arch/x86/objtool-in.o
LD /workspace/kernel/build64-default/tools/objtool/objtool-in.o
LINK /workspace/kernel/build64-default/tools/objtool/objtool
make[1]: Leaving directory '/workspace/kernel/build64-default'
++ nproc
+ make -j48 O=/workspace/kernel/build64-default W=1 drivers/gpu/drm/xe
make[1]: Entering directory '/workspace/kernel/build64-default'
make[2]: Nothing to be done for 'drivers/gpu/drm/xe'.
make[1]: Leaving directory '/workspace/kernel/build64-default'
run-parts: executing /workspace/ci/hooks/11-build-32b
+++ realpath /workspace/ci/hooks/11-build-32b
++ dirname /workspace/ci/hooks/11-build-32b
+ THIS_SCRIPT_DIR=/workspace/ci/hooks
+ SRC_DIR=/workspace/kernel
+ TOOLS_SRC_DIR=/workspace/ci
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ BUILD_DIR=/workspace/kernel/build64-default/build32
+ cd /workspace/kernel
+ mkdir -p /workspace/kernel/build64-default/build32
++ nproc
+ make -j48 ARCH=i386 O=/workspace/kernel/build64-default/build32 defconfig
make[1]: Entering directory '/workspace/kernel/build64-default/build32'
GEN Makefile
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
YACC scripts/kconfig/parser.tab.[ch]
HOSTCC scripts/kconfig/menu.o
HOSTCC scripts/kconfig/preprocess.o
HOSTCC scripts/kconfig/symbol.o
HOSTCC scripts/kconfig/util.o
HOSTCC scripts/kconfig/lexer.lex.o
HOSTCC scripts/kconfig/parser.tab.o
HOSTLD scripts/kconfig/conf
*** Default configuration is based on 'i386_defconfig'
#
# configuration written to .config
#
make[1]: Leaving directory '/workspace/kernel/build64-default/build32'
+ cd /workspace/kernel/build64-default/build32
+ /workspace/kernel/scripts/kconfig/merge_config.sh .config /workspace/ci/kernel/10-xe.fragment
Using .config as base
Merging /workspace/ci/kernel/10-xe.fragment
Value of CONFIG_DRM_XE is redefined by fragment /workspace/ci/kernel/10-xe.fragment:
Previous value: # CONFIG_DRM_XE is not set
New value: CONFIG_DRM_XE=m
Value of CONFIG_SND_DEBUG is redefined by fragment /workspace/ci/kernel/10-xe.fragment:
Previous value: # CONFIG_SND_DEBUG is not set
New value: CONFIG_SND_DEBUG=y
Value of CONFIG_SND_HDA_INTEL is redefined by fragment /workspace/ci/kernel/10-xe.fragment:
Previous value: CONFIG_SND_HDA_INTEL=y
New value: CONFIG_SND_HDA_INTEL=m
Value of CONFIG_SND_HDA_CODEC_HDMI is redefined by fragment /workspace/ci/kernel/10-xe.fragment:
Previous value: # CONFIG_SND_HDA_CODEC_HDMI is not set
New value: CONFIG_SND_HDA_CODEC_HDMI=m
GEN Makefile
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
#
# configuration written to .config
#
Value requested for CONFIG_HAVE_UID16 not in final .config
Requested value: CONFIG_HAVE_UID16=y
Actual value:
Value requested for CONFIG_UID16 not in final .config
Requested value: CONFIG_UID16=y
Actual value:
Value requested for CONFIG_X86_32 not in final .config
Requested value: CONFIG_X86_32=y
Actual value:
Value requested for CONFIG_OUTPUT_FORMAT not in final .config
Requested value: CONFIG_OUTPUT_FORMAT="elf32-i386"
Actual value: CONFIG_OUTPUT_FORMAT="elf64-x86-64"
Value requested for CONFIG_ARCH_MMAP_RND_BITS_MIN not in final .config
Requested value: CONFIG_ARCH_MMAP_RND_BITS_MIN=8
Actual value: CONFIG_ARCH_MMAP_RND_BITS_MIN=28
Value requested for CONFIG_ARCH_MMAP_RND_BITS_MAX not in final .config
Requested value: CONFIG_ARCH_MMAP_RND_BITS_MAX=16
Actual value: CONFIG_ARCH_MMAP_RND_BITS_MAX=32
Value requested for CONFIG_PGTABLE_LEVELS not in final .config
Requested value: CONFIG_PGTABLE_LEVELS=2
Actual value: CONFIG_PGTABLE_LEVELS=5
Value requested for CONFIG_X86_BIGSMP not in final .config
Requested value: # CONFIG_X86_BIGSMP is not set
Actual value:
Value requested for CONFIG_X86_INTEL_QUARK not in final .config
Requested value: # CONFIG_X86_INTEL_QUARK is not set
Actual value:
Value requested for CONFIG_X86_RDC321X not in final .config
Requested value: # CONFIG_X86_RDC321X is not set
Actual value:
Value requested for CONFIG_X86_32_NON_STANDARD not in final .config
Requested value: # CONFIG_X86_32_NON_STANDARD is not set
Actual value:
Value requested for CONFIG_X86_32_IRIS not in final .config
Requested value: # CONFIG_X86_32_IRIS is not set
Actual value:
Value requested for CONFIG_M486SX not in final .config
Requested value: # CONFIG_M486SX is not set
Actual value:
Value requested for CONFIG_M486 not in final .config
Requested value: # CONFIG_M486 is not set
Actual value:
Value requested for CONFIG_M586 not in final .config
Requested value: # CONFIG_M586 is not set
Actual value:
Value requested for CONFIG_M586TSC not in final .config
Requested value: # CONFIG_M586TSC is not set
Actual value:
Value requested for CONFIG_M586MMX not in final .config
Requested value: # CONFIG_M586MMX is not set
Actual value:
Value requested for CONFIG_M686 not in final .config
Requested value: CONFIG_M686=y
Actual value:
Value requested for CONFIG_MPENTIUMII not in final .config
Requested value: # CONFIG_MPENTIUMII is not set
Actual value:
Value requested for CONFIG_MPENTIUMIII not in final .config
Requested value: # CONFIG_MPENTIUMIII is not set
Actual value:
Value requested for CONFIG_MPENTIUMM not in final .config
Requested value: # CONFIG_MPENTIUMM is not set
Actual value:
Value requested for CONFIG_MPENTIUM4 not in final .config
Requested value: # CONFIG_MPENTIUM4 is not set
Actual value:
Value requested for CONFIG_MK6 not in final .config
Requested value: # CONFIG_MK6 is not set
Actual value:
Value requested for CONFIG_MK7 not in final .config
Requested value: # CONFIG_MK7 is not set
Actual value:
Value requested for CONFIG_MCRUSOE not in final .config
Requested value: # CONFIG_MCRUSOE is not set
Actual value:
Value requested for CONFIG_MEFFICEON not in final .config
Requested value: # CONFIG_MEFFICEON is not set
Actual value:
Value requested for CONFIG_MWINCHIPC6 not in final .config
Requested value: # CONFIG_MWINCHIPC6 is not set
Actual value:
Value requested for CONFIG_MWINCHIP3D not in final .config
Requested value: # CONFIG_MWINCHIP3D is not set
Actual value:
Value requested for CONFIG_MELAN not in final .config
Requested value: # CONFIG_MELAN is not set
Actual value:
Value requested for CONFIG_MGEODEGX1 not in final .config
Requested value: # CONFIG_MGEODEGX1 is not set
Actual value:
Value requested for CONFIG_MGEODE_LX not in final .config
Requested value: # CONFIG_MGEODE_LX is not set
Actual value:
Value requested for CONFIG_MCYRIXIII not in final .config
Requested value: # CONFIG_MCYRIXIII is not set
Actual value:
Value requested for CONFIG_MVIAC3_2 not in final .config
Requested value: # CONFIG_MVIAC3_2 is not set
Actual value:
Value requested for CONFIG_MVIAC7 not in final .config
Requested value: # CONFIG_MVIAC7 is not set
Actual value:
Value requested for CONFIG_X86_GENERIC not in final .config
Requested value: # CONFIG_X86_GENERIC is not set
Actual value:
Value requested for CONFIG_X86_INTERNODE_CACHE_SHIFT not in final .config
Requested value: CONFIG_X86_INTERNODE_CACHE_SHIFT=5
Actual value: CONFIG_X86_INTERNODE_CACHE_SHIFT=6
Value requested for CONFIG_X86_L1_CACHE_SHIFT not in final .config
Requested value: CONFIG_X86_L1_CACHE_SHIFT=5
Actual value: CONFIG_X86_L1_CACHE_SHIFT=6
Value requested for CONFIG_X86_USE_PPRO_CHECKSUM not in final .config
Requested value: CONFIG_X86_USE_PPRO_CHECKSUM=y
Actual value:
Value requested for CONFIG_X86_MINIMUM_CPU_FAMILY not in final .config
Requested value: CONFIG_X86_MINIMUM_CPU_FAMILY=6
Actual value: CONFIG_X86_MINIMUM_CPU_FAMILY=64
Value requested for CONFIG_CPU_SUP_TRANSMETA_32 not in final .config
Requested value: CONFIG_CPU_SUP_TRANSMETA_32=y
Actual value:
Value requested for CONFIG_CPU_SUP_VORTEX_32 not in final .config
Requested value: CONFIG_CPU_SUP_VORTEX_32=y
Actual value:
Value requested for CONFIG_HPET_TIMER not in final .config
Requested value: # CONFIG_HPET_TIMER is not set
Actual value: CONFIG_HPET_TIMER=y
Value requested for CONFIG_NR_CPUS_RANGE_END not in final .config
Requested value: CONFIG_NR_CPUS_RANGE_END=8
Actual value: CONFIG_NR_CPUS_RANGE_END=512
Value requested for CONFIG_NR_CPUS_DEFAULT not in final .config
Requested value: CONFIG_NR_CPUS_DEFAULT=8
Actual value: CONFIG_NR_CPUS_DEFAULT=64
Value requested for CONFIG_X86_ANCIENT_MCE not in final .config
Requested value: # CONFIG_X86_ANCIENT_MCE is not set
Actual value:
Value requested for CONFIG_X86_LEGACY_VM86 not in final .config
Requested value: # CONFIG_X86_LEGACY_VM86 is not set
Actual value:
Value requested for CONFIG_X86_ESPFIX32 not in final .config
Requested value: CONFIG_X86_ESPFIX32=y
Actual value:
Value requested for CONFIG_TOSHIBA not in final .config
Requested value: # CONFIG_TOSHIBA is not set
Actual value:
Value requested for CONFIG_X86_REBOOTFIXUPS not in final .config
Requested value: # CONFIG_X86_REBOOTFIXUPS is not set
Actual value:
Value requested for CONFIG_MICROCODE_INITRD32 not in final .config
Requested value: CONFIG_MICROCODE_INITRD32=y
Actual value:
Value requested for CONFIG_NOHIGHMEM not in final .config
Requested value: # CONFIG_NOHIGHMEM is not set
Actual value:
Value requested for CONFIG_HIGHMEM4G not in final .config
Requested value: CONFIG_HIGHMEM4G=y
Actual value:
Value requested for CONFIG_HIGHMEM64G not in final .config
Requested value: # CONFIG_HIGHMEM64G is not set
Actual value:
Value requested for CONFIG_PAGE_OFFSET not in final .config
Requested value: CONFIG_PAGE_OFFSET=0xC0000000
Actual value:
Value requested for CONFIG_HIGHMEM not in final .config
Requested value: CONFIG_HIGHMEM=y
Actual value:
Value requested for CONFIG_X86_PAE not in final .config
Requested value: # CONFIG_X86_PAE is not set
Actual value:
Value requested for CONFIG_ARCH_FLATMEM_ENABLE not in final .config
Requested value: CONFIG_ARCH_FLATMEM_ENABLE=y
Actual value:
Value requested for CONFIG_ARCH_SELECT_MEMORY_MODEL not in final .config
Requested value: CONFIG_ARCH_SELECT_MEMORY_MODEL=y
Actual value:
Value requested for CONFIG_ILLEGAL_POINTER_VALUE not in final .config
Requested value: CONFIG_ILLEGAL_POINTER_VALUE=0
Actual value: CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
Value requested for CONFIG_HIGHPTE not in final .config
Requested value: # CONFIG_HIGHPTE is not set
Actual value:
Value requested for CONFIG_COMPAT_VDSO not in final .config
Requested value: # CONFIG_COMPAT_VDSO is not set
Actual value:
Value requested for CONFIG_FUNCTION_PADDING_CFI not in final .config
Requested value: CONFIG_FUNCTION_PADDING_CFI=0
Actual value: CONFIG_FUNCTION_PADDING_CFI=11
Value requested for CONFIG_FUNCTION_PADDING_BYTES not in final .config
Requested value: CONFIG_FUNCTION_PADDING_BYTES=4
Actual value: CONFIG_FUNCTION_PADDING_BYTES=16
Value requested for CONFIG_APM not in final .config
Requested value: # CONFIG_APM is not set
Actual value:
Value requested for CONFIG_X86_POWERNOW_K6 not in final .config
Requested value: # CONFIG_X86_POWERNOW_K6 is not set
Actual value:
Value requested for CONFIG_X86_POWERNOW_K7 not in final .config
Requested value: # CONFIG_X86_POWERNOW_K7 is not set
Actual value:
Value requested for CONFIG_X86_GX_SUSPMOD not in final .config
Requested value: # CONFIG_X86_GX_SUSPMOD is not set
Actual value:
Value requested for CONFIG_X86_SPEEDSTEP_ICH not in final .config
Requested value: # CONFIG_X86_SPEEDSTEP_ICH is not set
Actual value:
Value requested for CONFIG_X86_SPEEDSTEP_SMI not in final .config
Requested value: # CONFIG_X86_SPEEDSTEP_SMI is not set
Actual value:
Value requested for CONFIG_X86_CPUFREQ_NFORCE2 not in final .config
Requested value: # CONFIG_X86_CPUFREQ_NFORCE2 is not set
Actual value:
Value requested for CONFIG_X86_LONGRUN not in final .config
Requested value: # CONFIG_X86_LONGRUN is not set
Actual value:
Value requested for CONFIG_X86_LONGHAUL not in final .config
Requested value: # CONFIG_X86_LONGHAUL is not set
Actual value:
Value requested for CONFIG_X86_E_POWERSAVER not in final .config
Requested value: # CONFIG_X86_E_POWERSAVER is not set
Actual value:
Value requested for CONFIG_PCI_GOBIOS not in final .config
Requested value: # CONFIG_PCI_GOBIOS is not set
Actual value:
Value requested for CONFIG_PCI_GOMMCONFIG not in final .config
Requested value: # CONFIG_PCI_GOMMCONFIG is not set
Actual value:
Value requested for CONFIG_PCI_GODIRECT not in final .config
Requested value: # CONFIG_PCI_GODIRECT is not set
Actual value:
Value requested for CONFIG_PCI_GOANY not in final .config
Requested value: CONFIG_PCI_GOANY=y
Actual value:
Value requested for CONFIG_PCI_BIOS not in final .config
Requested value: CONFIG_PCI_BIOS=y
Actual value:
Value requested for CONFIG_ISA not in final .config
Requested value: # CONFIG_ISA is not set
Actual value:
Value requested for CONFIG_SCx200 not in final .config
Requested value: # CONFIG_SCx200 is not set
Actual value:
Value requested for CONFIG_OLPC not in final .config
Requested value: # CONFIG_OLPC is not set
Actual value:
Value requested for CONFIG_ALIX not in final .config
Requested value: # CONFIG_ALIX is not set
Actual value:
Value requested for CONFIG_NET5501 not in final .config
Requested value: # CONFIG_NET5501 is not set
Actual value:
Value requested for CONFIG_GEOS not in final .config
Requested value: # CONFIG_GEOS is not set
Actual value:
Value requested for CONFIG_COMPAT_32 not in final .config
Requested value: CONFIG_COMPAT_32=y
Actual value:
Value requested for CONFIG_HAVE_ATOMIC_IOMAP not in final .config
Requested value: CONFIG_HAVE_ATOMIC_IOMAP=y
Actual value:
Value requested for CONFIG_ARCH_32BIT_OFF_T not in final .config
Requested value: CONFIG_ARCH_32BIT_OFF_T=y
Actual value:
Value requested for CONFIG_ARCH_WANT_IPC_PARSE_VERSION not in final .config
Requested value: CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
Actual value:
Value requested for CONFIG_MODULES_USE_ELF_REL not in final .config
Requested value: CONFIG_MODULES_USE_ELF_REL=y
Actual value:
Value requested for CONFIG_ARCH_MMAP_RND_BITS not in final .config
Requested value: CONFIG_ARCH_MMAP_RND_BITS=8
Actual value: CONFIG_ARCH_MMAP_RND_BITS=28
Value requested for CONFIG_CLONE_BACKWARDS not in final .config
Requested value: CONFIG_CLONE_BACKWARDS=y
Actual value:
Value requested for CONFIG_OLD_SIGSUSPEND3 not in final .config
Requested value: CONFIG_OLD_SIGSUSPEND3=y
Actual value:
Value requested for CONFIG_OLD_SIGACTION not in final .config
Requested value: CONFIG_OLD_SIGACTION=y
Actual value:
Value requested for CONFIG_ARCH_SPLIT_ARG64 not in final .config
Requested value: CONFIG_ARCH_SPLIT_ARG64=y
Actual value:
Value requested for CONFIG_FUNCTION_ALIGNMENT not in final .config
Requested value: CONFIG_FUNCTION_ALIGNMENT=4
Actual value: CONFIG_FUNCTION_ALIGNMENT=16
Value requested for CONFIG_SELECT_MEMORY_MODEL not in final .config
Requested value: CONFIG_SELECT_MEMORY_MODEL=y
Actual value:
Value requested for CONFIG_FLATMEM_MANUAL not in final .config
Requested value: CONFIG_FLATMEM_MANUAL=y
Actual value:
Value requested for CONFIG_SPARSEMEM_MANUAL not in final .config
Requested value: # CONFIG_SPARSEMEM_MANUAL is not set
Actual value:
Value requested for CONFIG_FLATMEM not in final .config
Requested value: CONFIG_FLATMEM=y
Actual value:
Value requested for CONFIG_SPARSEMEM_STATIC not in final .config
Requested value: CONFIG_SPARSEMEM_STATIC=y
Actual value:
Value requested for CONFIG_BOUNCE not in final .config
Requested value: CONFIG_BOUNCE=y
Actual value:
Value requested for CONFIG_KMAP_LOCAL not in final .config
Requested value: CONFIG_KMAP_LOCAL=y
Actual value:
Value requested for CONFIG_HOTPLUG_PCI_COMPAQ not in final .config
Requested value: # CONFIG_HOTPLUG_PCI_COMPAQ is not set
Actual value:
Value requested for CONFIG_HOTPLUG_PCI_IBM not in final .config
Requested value: # CONFIG_HOTPLUG_PCI_IBM is not set
Actual value:
Value requested for CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH not in final .config
Requested value: CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH=y
Actual value:
Value requested for CONFIG_PCH_PHUB not in final .config
Requested value: # CONFIG_PCH_PHUB is not set
Actual value:
Value requested for CONFIG_SCSI_NSP32 not in final .config
Requested value: # CONFIG_SCSI_NSP32 is not set
Actual value:
Value requested for CONFIG_PATA_CS5520 not in final .config
Requested value: # CONFIG_PATA_CS5520 is not set
Actual value:
Value requested for CONFIG_PATA_CS5530 not in final .config
Requested value: # CONFIG_PATA_CS5530 is not set
Actual value:
Value requested for CONFIG_PATA_CS5535 not in final .config
Requested value: # CONFIG_PATA_CS5535 is not set
Actual value:
Value requested for CONFIG_PATA_CS5536 not in final .config
Requested value: # CONFIG_PATA_CS5536 is not set
Actual value:
Value requested for CONFIG_PATA_SC1200 not in final .config
Requested value: # CONFIG_PATA_SC1200 is not set
Actual value:
Value requested for CONFIG_PCH_GBE not in final .config
Requested value: # CONFIG_PCH_GBE is not set
Actual value:
Value requested for CONFIG_INPUT_WISTRON_BTNS not in final .config
Requested value: # CONFIG_INPUT_WISTRON_BTNS is not set
Actual value:
Value requested for CONFIG_SERIAL_TIMBERDALE not in final .config
Requested value: # CONFIG_SERIAL_TIMBERDALE is not set
Actual value:
Value requested for CONFIG_SERIAL_PCH_UART not in final .config
Requested value: # CONFIG_SERIAL_PCH_UART is not set
Actual value:
Value requested for CONFIG_HW_RANDOM_GEODE not in final .config
Requested value: CONFIG_HW_RANDOM_GEODE=y
Actual value:
Value requested for CONFIG_SONYPI not in final .config
Requested value: # CONFIG_SONYPI is not set
Actual value:
Value requested for CONFIG_PC8736x_GPIO not in final .config
Requested value: # CONFIG_PC8736x_GPIO is not set
Actual value:
Value requested for CONFIG_NSC_GPIO not in final .config
Requested value: # CONFIG_NSC_GPIO is not set
Actual value:
Value requested for CONFIG_I2C_EG20T not in final .config
Requested value: # CONFIG_I2C_EG20T is not set
Actual value:
Value requested for CONFIG_SCx200_ACB not in final .config
Requested value: # CONFIG_SCx200_ACB is not set
Actual value:
Value requested for CONFIG_PTP_1588_CLOCK_PCH not in final .config
Requested value: # CONFIG_PTP_1588_CLOCK_PCH is not set
Actual value:
Value requested for CONFIG_SBC8360_WDT not in final .config
Requested value: # CONFIG_SBC8360_WDT is not set
Actual value:
Value requested for CONFIG_SBC7240_WDT not in final .config
Requested value: # CONFIG_SBC7240_WDT is not set
Actual value:
Value requested for CONFIG_MFD_CS5535 not in final .config
Requested value: # CONFIG_MFD_CS5535 is not set
Actual value:
Value requested for CONFIG_AGP_ALI not in final .config
Requested value: # CONFIG_AGP_ALI is not set
Actual value:
Value requested for CONFIG_AGP_ATI not in final .config
Requested value: # CONFIG_AGP_ATI is not set
Actual value:
Value requested for CONFIG_AGP_AMD not in final .config
Requested value: # CONFIG_AGP_AMD is not set
Actual value:
Value requested for CONFIG_AGP_NVIDIA not in final .config
Requested value: # CONFIG_AGP_NVIDIA is not set
Actual value:
Value requested for CONFIG_AGP_SWORKS not in final .config
Requested value: # CONFIG_AGP_SWORKS is not set
Actual value:
Value requested for CONFIG_AGP_EFFICEON not in final .config
Requested value: # CONFIG_AGP_EFFICEON is not set
Actual value:
Value requested for CONFIG_SND_PCM not in final .config
Requested value: CONFIG_SND_PCM=y
Actual value: CONFIG_SND_PCM=m
Value requested for CONFIG_SND_HWDEP not in final .config
Requested value: CONFIG_SND_HWDEP=y
Actual value: CONFIG_SND_HWDEP=m
Value requested for CONFIG_SND_DYNAMIC_MINORS not in final .config
Requested value: # CONFIG_SND_DYNAMIC_MINORS is not set
Actual value: CONFIG_SND_DYNAMIC_MINORS=y
Value requested for CONFIG_SND_CS5530 not in final .config
Requested value: # CONFIG_SND_CS5530 is not set
Actual value:
Value requested for CONFIG_SND_CS5535AUDIO not in final .config
Requested value: # CONFIG_SND_CS5535AUDIO is not set
Actual value:
Value requested for CONFIG_SND_SIS7019 not in final .config
Requested value: # CONFIG_SND_SIS7019 is not set
Actual value:
Value requested for CONFIG_SND_HDA not in final .config
Requested value: CONFIG_SND_HDA=y
Actual value: CONFIG_SND_HDA=m
Value requested for CONFIG_SND_HDA_CORE not in final .config
Requested value: CONFIG_SND_HDA_CORE=y
Actual value: CONFIG_SND_HDA_CORE=m
Value requested for CONFIG_SND_INTEL_DSP_CONFIG not in final .config
Requested value: CONFIG_SND_INTEL_DSP_CONFIG=y
Actual value: CONFIG_SND_INTEL_DSP_CONFIG=m
Value requested for CONFIG_SND_INTEL_SOUNDWIRE_ACPI not in final .config
Requested value: CONFIG_SND_INTEL_SOUNDWIRE_ACPI=y
Actual value: CONFIG_SND_INTEL_SOUNDWIRE_ACPI=m
Value requested for CONFIG_LEDS_OT200 not in final .config
Requested value: # CONFIG_LEDS_OT200 is not set
Actual value:
Value requested for CONFIG_PCH_DMA not in final .config
Requested value: # CONFIG_PCH_DMA is not set
Actual value:
Value requested for CONFIG_CLKSRC_I8253 not in final .config
Requested value: CONFIG_CLKSRC_I8253=y
Actual value:
Value requested for CONFIG_MAILBOX not in final .config
Requested value: # CONFIG_MAILBOX is not set
Actual value: CONFIG_MAILBOX=y
Value requested for CONFIG_CRYPTO_SERPENT_SSE2_586 not in final .config
Requested value: # CONFIG_CRYPTO_SERPENT_SSE2_586 is not set
Actual value:
Value requested for CONFIG_CRYPTO_TWOFISH_586 not in final .config
Requested value: # CONFIG_CRYPTO_TWOFISH_586 is not set
Actual value:
Value requested for CONFIG_CRYPTO_DEV_GEODE not in final .config
Requested value: # CONFIG_CRYPTO_DEV_GEODE is not set
Actual value:
Value requested for CONFIG_CRYPTO_DEV_HIFN_795X not in final .config
Requested value: # CONFIG_CRYPTO_DEV_HIFN_795X is not set
Actual value:
Value requested for CONFIG_CRYPTO_LIB_POLY1305_RSIZE not in final .config
Requested value: CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
Actual value: CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11
Value requested for CONFIG_AUDIT_GENERIC not in final .config
Requested value: CONFIG_AUDIT_GENERIC=y
Actual value:
Value requested for CONFIG_GENERIC_VDSO_32 not in final .config
Requested value: CONFIG_GENERIC_VDSO_32=y
Actual value:
Value requested for CONFIG_DEBUG_KMAP_LOCAL not in final .config
Requested value: # CONFIG_DEBUG_KMAP_LOCAL is not set
Actual value:
Value requested for CONFIG_DEBUG_HIGHMEM not in final .config
Requested value: # CONFIG_DEBUG_HIGHMEM is not set
Actual value:
Value requested for CONFIG_HAVE_DEBUG_STACKOVERFLOW not in final .config
Requested value: CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
Actual value:
Value requested for CONFIG_DEBUG_STACKOVERFLOW not in final .config
Requested value: # CONFIG_DEBUG_STACKOVERFLOW is not set
Actual value:
Value requested for CONFIG_HAVE_FUNCTION_GRAPH_TRACER not in final .config
Requested value: CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
Actual value:
Value requested for CONFIG_HAVE_FUNCTION_GRAPH_RETVAL not in final .config
Requested value: CONFIG_HAVE_FUNCTION_GRAPH_RETVAL=y
Actual value:
Value requested for CONFIG_DRM_KUNIT_TEST not in final .config
Requested value: CONFIG_DRM_KUNIT_TEST=m
Actual value:
Value requested for CONFIG_DRM_XE_WERROR not in final .config
Requested value: CONFIG_DRM_XE_WERROR=y
Actual value:
Value requested for CONFIG_DRM_XE_DEBUG not in final .config
Requested value: CONFIG_DRM_XE_DEBUG=y
Actual value:
Value requested for CONFIG_DRM_XE_DEBUG_MEM not in final .config
Requested value: CONFIG_DRM_XE_DEBUG_MEM=y
Actual value:
Value requested for CONFIG_DRM_XE_KUNIT_TEST not in final .config
Requested value: CONFIG_DRM_XE_KUNIT_TEST=m
Actual value:
++ nproc
+ make -j48 ARCH=i386 olddefconfig
GEN Makefile
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
#
# configuration written to .config
#
++ nproc
+ make -j48 ARCH=i386
SYNC include/config/auto.conf.cmd
GEN Makefile
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
GEN Makefile
WRAP arch/x86/include/generated/uapi/asm/bpf_perf_event.h
UPD include/generated/uapi/linux/version.h
WRAP arch/x86/include/generated/uapi/asm/errno.h
WRAP arch/x86/include/generated/uapi/asm/ioctl.h
WRAP arch/x86/include/generated/uapi/asm/fcntl.h
WRAP arch/x86/include/generated/uapi/asm/ioctls.h
WRAP arch/x86/include/generated/uapi/asm/ipcbuf.h
WRAP arch/x86/include/generated/uapi/asm/param.h
WRAP arch/x86/include/generated/uapi/asm/poll.h
WRAP arch/x86/include/generated/uapi/asm/resource.h
WRAP arch/x86/include/generated/uapi/asm/socket.h
WRAP arch/x86/include/generated/uapi/asm/sockios.h
WRAP arch/x86/include/generated/uapi/asm/termbits.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_32.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_x32.h
SYSTBL arch/x86/include/generated/asm/syscalls_32.h
UPD include/generated/compile.h
HOSTCC arch/x86/tools/relocs_32.o
HOSTCC arch/x86/tools/relocs_64.o
HOSTCC arch/x86/tools/relocs_common.o
WRAP arch/x86/include/generated/asm/early_ioremap.h
WRAP arch/x86/include/generated/asm/mcs_spinlock.h
WRAP arch/x86/include/generated/asm/irq_regs.h
WRAP arch/x86/include/generated/asm/kmap_size.h
WRAP arch/x86/include/generated/asm/local64.h
WRAP arch/x86/include/generated/asm/mmiowb.h
WRAP arch/x86/include/generated/asm/module.lds.h
WRAP arch/x86/include/generated/asm/rwonce.h
WRAP arch/x86/include/generated/asm/unaligned.h
HOSTCC scripts/kallsyms
HOSTCC scripts/sorttable
HOSTCC scripts/asn1_compiler
HOSTCC scripts/selinux/genheaders/genheaders
HOSTCC scripts/selinux/mdp/mdp
HOSTLD arch/x86/tools/relocs
UPD include/config/kernel.release
UPD include/generated/utsrelease.h
CC scripts/mod/empty.o
HOSTCC scripts/mod/mk_elfconfig
CC scripts/mod/devicetable-offsets.s
UPD scripts/mod/devicetable-offsets.h
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/modpost.o
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/sumversion.o
HOSTCC scripts/mod/symsearch.o
HOSTLD scripts/mod/modpost
CC kernel/bounds.s
CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-arch-fallback.h
CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-long.h
CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-instrumented.h
UPD include/generated/timeconst.h
UPD include/generated/bounds.h
CC arch/x86/kernel/asm-offsets.s
UPD include/generated/asm-offsets.h
CALL /workspace/kernel/scripts/checksyscalls.sh
LDS scripts/module.lds
CC init/main.o
CC ipc/util.o
CC init/do_mounts.o
CC ipc/msgutil.o
CC init/do_mounts_initrd.o
CC ipc/msg.o
CC init/initramfs.o
UPD init/utsversion-tmp.h
CC ipc/sem.o
HOSTCC usr/gen_init_cpio
CC ipc/shm.o
CC init/calibrate.o
CC ipc/syscall.o
CC arch/x86/power/cpu.o
CC init/init_task.o
CC certs/system_keyring.o
CC ipc/ipc_sysctl.o
CC io_uring/io_uring.o
CC arch/x86/power/hibernate_32.o
CC arch/x86/pci/i386.o
AS arch/x86/power/hibernate_asm_32.o
CC ipc/mqueue.o
CC mm/filemap.o
CC io_uring/opdef.o
CC init/version.o
AS arch/x86/lib/atomic64_cx8_32.o
CC arch/x86/video/video-common.o
CC net/ethernet/eth.o
CC net/core/sock.o
AR net/802/built-in.a
AR arch/x86/crypto/built-in.a
GEN security/selinux/flask.h security/selinux/av_permissions.h
AR drivers/cache/built-in.a
CC block/partitions/core.o
CC lib/math/div64.o
CC security/keys/gc.o
CC net/sched/sch_generic.o
CC arch/x86/realmode/init.o
AR virt/lib/built-in.a
AR drivers/irqchip/built-in.a
CC arch/x86/events/amd/core.o
AR arch/x86/platform/atom/built-in.a
CC fs/notify/dnotify/dnotify.o
CC security/selinux/avc.o
AR virt/built-in.a
CC arch/x86/mm/pat/set_memory.o
AS arch/x86/lib/checksum_32.o
CC arch/x86/events/amd/lbr.o
CC sound/core/seq/seq.o
CC arch/x86/events/amd/ibs.o
CC arch/x86/mm/pat/memtype.o
CC arch/x86/kernel/fpu/init.o
CC sound/core/seq/seq_lock.o
HOSTCC certs/extract-cert
AR arch/x86/platform/ce4100/built-in.a
CC arch/x86/entry/vdso/vma.o
AR drivers/bus/mhi/built-in.a
CC arch/x86/lib/cmdline.o
CC arch/x86/platform/efi/memmap.o
AR drivers/bus/built-in.a
CC kernel/sched/core.o
CC crypto/asymmetric_keys/asymmetric_type.o
AR drivers/pwm/built-in.a
CC drivers/pci/msi/pcidev_msi.o
CC lib/math/gcd.o
AS arch/x86/lib/cmpxchg8b_emu.o
CC drivers/pci/pcie/portdrv.o
CC arch/x86/lib/cpu.o
CC lib/math/lcm.o
CC net/core/request_sock.o
CC lib/math/int_log.o
CC drivers/pci/pcie/rcec.o
GEN usr/initramfs_data.cpio
CERT certs/x509_certificate_list
CERT certs/signing_key.x509
COPY usr/initramfs_inc_data
AS certs/system_certificates.o
AS usr/initramfs_data.o
AR certs/built-in.a
AR usr/built-in.a
CC arch/x86/kernel/fpu/bugs.o
CC net/netlink/af_netlink.o
AR sound/i2c/other/built-in.a
CC lib/math/int_pow.o
AR sound/i2c/built-in.a
CC net/core/skbuff.o
AR sound/drivers/opl3/built-in.a
CC lib/math/int_sqrt.o
AR sound/drivers/opl4/built-in.a
CC arch/x86/kernel/fpu/core.o
CC security/keys/key.o
AR sound/drivers/mpu401/built-in.a
AR sound/drivers/vx/built-in.a
AR sound/drivers/pcsp/built-in.a
CC lib/math/reciprocal_div.o
AR sound/drivers/built-in.a
AS arch/x86/realmode/rm/header.o
CC sound/core/seq/seq_clientmgr.o
CC lib/math/rational.o
AS arch/x86/realmode/rm/trampoline_32.o
AR arch/x86/video/built-in.a
CC arch/x86/kernel/fpu/regset.o
AS arch/x86/realmode/rm/stack.o
CC net/core/datagram.o
CC arch/x86/lib/delay.o
AS arch/x86/realmode/rm/reboot.o
CC drivers/pci/pcie/aspm.o
CC security/keys/keyring.o
AS arch/x86/realmode/rm/wakeup_asm.o
AR sound/isa/ad1816a/built-in.a
CC security/keys/keyctl.o
CC arch/x86/pci/init.o
AR sound/isa/ad1848/built-in.a
CC arch/x86/realmode/rm/wakemain.o
AR sound/isa/cs423x/built-in.a
CC net/sched/sch_mq.o
AR fs/notify/dnotify/built-in.a
AR sound/isa/es1688/built-in.a
CC drivers/pci/msi/api.o
CC arch/x86/events/intel/core.o
CC crypto/asymmetric_keys/restrict.o
AR sound/isa/galaxy/built-in.a
CC fs/notify/inotify/inotify_fsnotify.o
AR sound/isa/gus/built-in.a
CC arch/x86/realmode/rm/video-mode.o
CC arch/x86/power/hibernate.o
AR sound/isa/msnd/built-in.a
CC arch/x86/entry/vdso/extable.o
AR sound/isa/opti9xx/built-in.a
AR sound/isa/sb/built-in.a
AS arch/x86/realmode/rm/copy.o
CC io_uring/kbuf.o
CC arch/x86/platform/efi/quirks.o
AR sound/isa/wavefront/built-in.a
CC drivers/pci/pcie/pme.o
CC net/sched/sch_frag.o
AR sound/isa/wss/built-in.a
CC block/partitions/msdos.o
AR sound/isa/built-in.a
AS arch/x86/realmode/rm/bioscall.o
AS arch/x86/lib/getuser.o
CC security/keys/permission.o
CC arch/x86/realmode/rm/regs.o
AR lib/math/built-in.a
CC arch/x86/platform/efi/efi.o
CC mm/mempool.o
GEN arch/x86/lib/inat-tables.c
CC lib/crypto/mpi/generic_mpih-lshift.o
CC lib/zlib_inflate/inffast.o
CC arch/x86/realmode/rm/video-vga.o
CC lib/crypto/memneq.o
CC lib/zlib_inflate/inflate.o
CC arch/x86/lib/insn-eval.o
CC lib/crypto/utils.o
CC arch/x86/realmode/rm/video-vesa.o
CC arch/x86/events/intel/bts.o
CC arch/x86/events/amd/uncore.o
LDS arch/x86/entry/vdso/vdso32/vdso32.lds
CC arch/x86/realmode/rm/video-bios.o
CC crypto/asymmetric_keys/signature.o
CC lib/zlib_inflate/infutil.o
CC crypto/api.o
AS arch/x86/entry/vdso/vdso32/note.o
AS arch/x86/entry/vdso/vdso32/system_call.o
CC fs/notify/inotify/inotify_user.o
AR net/ethernet/built-in.a
AS arch/x86/entry/vdso/vdso32/sigreturn.o
PASYMS arch/x86/realmode/rm/pasyms.h
CC lib/zlib_inflate/inftrees.o
LDS arch/x86/realmode/rm/realmode.lds
LD arch/x86/realmode/rm/realmode.elf
CC arch/x86/mm/pat/memtype_interval.o
RELOCS arch/x86/realmode/rm/realmode.relocs
AR net/bpf/built-in.a
OBJCOPY arch/x86/realmode/rm/realmode.bin
CC arch/x86/entry/vdso/vdso32/vclock_gettime.o
AS arch/x86/realmode/rmpiggy.o
CC arch/x86/pci/pcbios.o
AR arch/x86/realmode/built-in.a
CC lib/zlib_inflate/inflate_syms.o
AR init/built-in.a
AR arch/x86/net/built-in.a
CC security/selinux/hooks.o
CC arch/x86/kernel/fpu/signal.o
AR arch/x86/virt/svm/built-in.a
AR arch/x86/virt/vmx/built-in.a
CC mm/oom_kill.o
AR arch/x86/virt/built-in.a
CC drivers/pci/hotplug/pci_hotplug_core.o
CC drivers/pci/msi/msi.o
AR arch/x86/power/built-in.a
CC arch/x86/kernel/cpu/mce/core.o
CC arch/x86/kernel/acpi/boot.o
CC arch/x86/kernel/cpu/mtrr/mtrr.o
CC arch/x86/kernel/cpu/mce/severity.o
CC lib/crypto/mpi/generic_mpih-mul1.o
CC arch/x86/kernel/cpu/mce/genpool.o
CC arch/x86/kernel/acpi/sleep.o
CC arch/x86/kernel/cpu/mtrr/if.o
CC ipc/namespace.o
CC arch/x86/mm/init.o
CC ipc/mq_sysctl.o
CC net/core/stream.o
CC crypto/asymmetric_keys/public_key.o
CC security/selinux/selinuxfs.o
CC arch/x86/kernel/apic/apic.o
CC mm/fadvise.o
CC crypto/cipher.o
AR lib/zlib_inflate/built-in.a
CC block/partitions/efi.o
CC arch/x86/events/zhaoxin/core.o
CC sound/core/seq/seq_memory.o
AR drivers/pci/pcie/built-in.a
CC arch/x86/kernel/cpu/mce/intel.o
CC arch/x86/kernel/apic/apic_common.o
CC security/keys/process_keys.o
CC arch/x86/lib/insn.o
CC arch/x86/platform/efi/efi_32.o
CC arch/x86/kernel/apic/apic_noop.o
AR arch/x86/mm/pat/built-in.a
AR fs/notify/fanotify/built-in.a
AS arch/x86/kernel/acpi/wakeup_32.o
CC drivers/pci/hotplug/acpi_pcihp.o
AS arch/x86/platform/efi/efi_stub_32.o
CC arch/x86/entry/vdso/vdso32/vgetcpu.o
AR drivers/pci/controller/dwc/built-in.a
CC net/netlink/genetlink.o
CC net/sched/sch_api.o
AR drivers/pci/controller/mobiveil/built-in.a
AR drivers/pci/controller/built-in.a
CC net/sched/sch_blackhole.o
CC net/sched/cls_api.o
CC block/bdev.o
HOSTCC arch/x86/entry/vdso/vdso2c
CC lib/crypto/mpi/generic_mpih-mul2.o
CC arch/x86/pci/mmconfig_32.o
AR ipc/built-in.a
CC arch/x86/events/intel/ds.o
CC sound/core/seq/seq_queue.o
AR fs/notify/inotify/built-in.a
CC arch/x86/lib/kaslr.o
CC arch/x86/mm/init_32.o
CC arch/x86/kernel/acpi/cstate.o
CC fs/notify/fsnotify.o
AR arch/x86/events/amd/built-in.a
CC arch/x86/kernel/cpu/mtrr/generic.o
CC security/keys/request_key.o
CC arch/x86/events/core.o
CC block/fops.o
CC arch/x86/mm/fault.o
CC security/keys/request_key_auth.o
CC arch/x86/kernel/fpu/xstate.o
CC net/core/scm.o
ASN.1 crypto/asymmetric_keys/x509.asn1.[ch]
ASN.1 crypto/asymmetric_keys/x509_akid.asn1.[ch]
CC crypto/asymmetric_keys/x509_loader.o
CC arch/x86/kernel/apic/ipi.o
CC drivers/pci/msi/irqdomain.o
CC arch/x86/lib/memcpy_32.o
CC net/core/gen_stats.o
CC arch/x86/entry/vdso/vdso32-setup.o
AS arch/x86/lib/memmove_32.o
CC arch/x86/lib/misc.o
CC sound/core/seq/seq_fifo.o
CC sound/core/seq/seq_prioq.o
CC arch/x86/lib/pc-conf-reg.o
CC crypto/asymmetric_keys/x509_public_key.o
CC arch/x86/pci/direct.o
VDSO arch/x86/entry/vdso/vdso32.so.dbg
CC arch/x86/platform/efi/runtime-map.o
AR arch/x86/events/zhaoxin/built-in.a
CC net/ethtool/ioctl.o
CC net/netfilter/core.o
CC lib/crypto/mpi/generic_mpih-mul3.o
CC arch/x86/kernel/cpu/microcode/core.o
AR drivers/pci/hotplug/built-in.a
AR block/partitions/built-in.a
CC arch/x86/kernel/cpu/microcode/intel.o
CC arch/x86/kernel/cpu/microcode/amd.o
CC security/integrity/iint.o
AS arch/x86/lib/putuser.o
OBJCOPY arch/x86/entry/vdso/vdso32.so
VDSO2C arch/x86/entry/vdso/vdso-image-32.c
CC arch/x86/entry/vdso/vdso-image-32.o
AR arch/x86/kernel/acpi/built-in.a
AS arch/x86/lib/retpoline.o
CC arch/x86/kernel/kprobes/core.o
CC arch/x86/events/intel/knc.o
CC arch/x86/lib/string_32.o
CC arch/x86/pci/mmconfig-shared.o
CC arch/x86/lib/strstr_32.o
CC arch/x86/pci/fixup.o
CC arch/x86/lib/usercopy.o
CC security/commoncap.o
CC sound/core/seq/seq_timer.o
CC mm/maccess.o
AR sound/pci/ac97/built-in.a
AR sound/pci/ali5451/built-in.a
CC mm/page-writeback.o
AR sound/pci/asihpi/built-in.a
AR sound/pci/au88x0/built-in.a
CC mm/folio-compat.o
CC fs/notify/notification.o
AR arch/x86/entry/vdso/built-in.a
AR sound/pci/aw2/built-in.a
AR sound/pci/ctxfi/built-in.a
AR arch/x86/entry/vsyscall/built-in.a
AS arch/x86/entry/entry.o
AR sound/pci/ca0106/built-in.a
AR sound/pci/cs46xx/built-in.a
AS arch/x86/entry/entry_32.o
AR sound/pci/cs5535audio/built-in.a
AR sound/pci/lola/built-in.a
AR sound/pci/lx6464es/built-in.a
CC security/keys/user_defined.o
CC arch/x86/entry/syscall_32.o
CC mm/readahead.o
AR sound/pci/echoaudio/built-in.a
AR drivers/pci/msi/built-in.a
CC mm/swap.o
AR sound/pci/emu10k1/built-in.a
ASN.1 crypto/asymmetric_keys/pkcs7.asn1.[ch]
AR drivers/pci/switch/built-in.a
CC crypto/asymmetric_keys/pkcs7_trust.o
CC arch/x86/kernel/cpu/mce/amd.o
AR sound/pci/hda/built-in.a
CC drivers/pci/access.o
CC security/selinux/netlink.o
CC [M] sound/pci/hda/hda_bind.o
CC arch/x86/lib/usercopy_32.o
CC arch/x86/kernel/cpu/mtrr/cleanup.o
CC lib/crypto/mpi/generic_mpih-rshift.o
CC [M] sound/pci/hda/hda_codec.o
AR arch/x86/platform/efi/built-in.a
LDS arch/x86/kernel/vmlinux.lds
AR arch/x86/platform/geode/built-in.a
CC block/bio.o
CC security/integrity/integrity_audit.o
CC sound/core/seq/seq_system.o
AR arch/x86/platform/iris/built-in.a
CC arch/x86/platform/intel/iosf_mbi.o
AS arch/x86/kernel/head_32.o
CC net/core/gen_estimator.o
CC net/core/net_namespace.o
CC net/core/secure_seq.o
CC block/elevator.o
CC lib/crypto/mpi/generic_mpih-sub1.o
AR arch/x86/kernel/fpu/built-in.a
CC lib/crypto/chacha.o
CC arch/x86/kernel/apic/vector.o
AR arch/x86/kernel/cpu/microcode/built-in.a
CC arch/x86/lib/msr-smp.o
CC block/blk-core.o
CC crypto/asymmetric_keys/pkcs7_verify.o
CC arch/x86/mm/ioremap.o
CC arch/x86/pci/acpi.o
CC arch/x86/kernel/kprobes/opt.o
CC net/netlink/policy.o
CC io_uring/rsrc.o
CC net/netfilter/nf_log.o
CC arch/x86/mm/extable.o
CC fs/notify/group.o
CC security/keys/proc.o
CC drivers/pci/bus.o
AR arch/x86/platform/intel-mid/built-in.a
AR arch/x86/platform/intel-quark/built-in.a
CC arch/x86/mm/mmap.o
CC lib/zlib_deflate/deflate.o
CC lib/lzo/lzo1x_compress.o
CC arch/x86/lib/cache-smp.o
CC arch/x86/events/intel/lbr.o
CC arch/x86/mm/pgtable.o
CC lib/lzo/lzo1x_decompress_safe.o
CC sound/core/seq/seq_ports.o
AR sound/ppc/built-in.a
CC sound/core/seq/seq_info.o
CC arch/x86/pci/legacy.o
CC arch/x86/kernel/cpu/mtrr/amd.o
CC security/keys/sysctl.o
CC arch/x86/lib/msr.o
CC crypto/asymmetric_keys/x509.asn1.o
CC io_uring/notif.o
CC crypto/asymmetric_keys/x509_akid.asn1.o
CC crypto/asymmetric_keys/x509_cert_parser.o
CC lib/crypto/mpi/generic_mpih-add1.o
CC io_uring/tctx.o
AR security/integrity/built-in.a
CC security/keys/keyctl_pkey.o
CC security/lsm_syscalls.o
CC lib/lz4/lz4_decompress.o
CC security/min_addr.o
AR arch/x86/platform/intel/built-in.a
AR arch/x86/platform/olpc/built-in.a
AR arch/x86/platform/scx200/built-in.a
AR arch/x86/platform/ts5500/built-in.a
AR arch/x86/platform/uv/built-in.a
AR arch/x86/platform/built-in.a
CC security/security.o
CC io_uring/filetable.o
CC io_uring/rw.o
CC arch/x86/events/probe.o
CC net/core/flow_dissector.o
AR lib/lzo/built-in.a
CC arch/x86/entry/common.o
CC arch/x86/events/utils.o
CC io_uring/net.o
AS arch/x86/entry/thunk.o
CC fs/notify/mark.o
CC lib/zlib_deflate/deftree.o
AR arch/x86/kernel/kprobes/built-in.a
CC sound/core/seq/seq_dummy.o
CC drivers/pci/probe.o
CC arch/x86/kernel/head32.o
AR net/netlink/built-in.a
CC arch/x86/kernel/cpu/mtrr/cyrix.o
CC lib/zstd/zstd_decompress_module.o
CC lib/zstd/decompress/huf_decompress.o
CC lib/zlib_deflate/deflate_syms.o
CC arch/x86/mm/physaddr.o
CC arch/x86/pci/irq.o
CC arch/x86/pci/common.o
CC crypto/asymmetric_keys/pkcs7.asn1.o
CC net/sched/act_api.o
CC arch/x86/events/intel/p4.o
CC crypto/asymmetric_keys/pkcs7_parser.o
CC lib/xz/xz_dec_syms.o
CC arch/x86/events/intel/p6.o
CC lib/crypto/mpi/ec.o
CC arch/x86/events/rapl.o
AR security/keys/built-in.a
AR sound/pci/ice1712/built-in.a
AR sound/pci/korg1212/built-in.a
AR sound/pci/mixart/built-in.a
CC drivers/video/console/dummycon.o
CC arch/x86/kernel/cpu/mce/threshold.o
CC crypto/compress.o
CC net/netfilter/nf_queue.o
AR sound/pci/nm256/built-in.a
CC drivers/video/backlight/backlight.o
CC crypto/algapi.o
AS arch/x86/lib/msr-reg.o
AR drivers/video/fbdev/core/built-in.a
AR drivers/video/fbdev/omap/built-in.a
CC arch/x86/lib/msr-reg-export.o
CC net/ethtool/common.o
AR drivers/video/fbdev/omap2/omapfb/dss/built-in.a
CC net/ethtool/netlink.o
CC lib/zstd/decompress/zstd_ddict.o
AR drivers/video/fbdev/omap2/omapfb/displays/built-in.a
AR drivers/video/fbdev/omap2/omapfb/built-in.a
CC mm/truncate.o
AR drivers/video/fbdev/omap2/built-in.a
CC block/blk-sysfs.o
CC security/selinux/nlmsgtab.o
AR drivers/video/fbdev/built-in.a
CC lib/xz/xz_dec_stream.o
CC lib/zstd/decompress/zstd_decompress.o
AR lib/zlib_deflate/built-in.a
AR sound/pci/oxygen/built-in.a
AR sound/core/seq/built-in.a
CC arch/x86/kernel/ebda.o
CC arch/x86/kernel/platform-quirks.o
AR sound/pci/pcxhr/built-in.a
CC sound/core/sound.o
AS arch/x86/lib/hweight.o
CC arch/x86/pci/early.o
AR sound/pci/riptide/built-in.a
CC [M] sound/pci/hda/hda_jack.o
CC arch/x86/lib/iomem.o
CC arch/x86/mm/tlb.o
CC arch/x86/kernel/cpu/mtrr/centaur.o
CC arch/x86/kernel/apic/init.o
AR sound/pci/rme9652/built-in.a
CC arch/x86/events/intel/pt.o
CC sound/core/init.o
AR crypto/asymmetric_keys/built-in.a
AR sound/arm/built-in.a
CC arch/x86/kernel/process_32.o
CC arch/x86/lib/atomic64_32.o
CC fs/notify/fdinfo.o
CC sound/core/memory.o
AR sound/sh/built-in.a
AR arch/x86/entry/built-in.a
CC sound/core/control.o
AR lib/lz4/built-in.a
CC block/blk-flush.o
AR sound/pci/trident/built-in.a
CC kernel/sched/fair.o
AR sound/synth/emux/built-in.a
CC arch/x86/mm/cpu_entry_area.o
AR sound/usb/misc/built-in.a
AR sound/synth/built-in.a
CC kernel/sched/build_policy.o
AR sound/usb/usx2y/built-in.a
AR sound/usb/caiaq/built-in.a
AR sound/usb/6fire/built-in.a
CC arch/x86/mm/maccess.o
CC kernel/sched/build_utility.o
AR sound/usb/hiface/built-in.a
CC drivers/video/console/vgacon.o
AR sound/usb/bcd2000/built-in.a
CC security/lsm_audit.o
AR sound/usb/built-in.a
CC [M] sound/pci/hda/hda_auto_parser.o
CC arch/x86/pci/bus_numa.o
CC net/netfilter/nf_sockopt.o
CC arch/x86/lib/inat.o
CC lib/xz/xz_dec_lzma2.o
CC arch/x86/kernel/apic/hw_nmi.o
CC block/blk-settings.o
CC arch/x86/kernel/signal.o
CC arch/x86/kernel/cpu/mtrr/legacy.o
AR sound/firewire/built-in.a
AR arch/x86/lib/built-in.a
CC net/netfilter/utils.o
CC lib/crypto/mpi/mpicoder.o
AR arch/x86/lib/lib.a
CC block/blk-ioc.o
AR drivers/video/backlight/built-in.a
CC arch/x86/mm/pgprot.o
CC arch/x86/events/msr.o
CC net/netfilter/nfnetlink.o
AR sound/pci/ymfpci/built-in.a
CC net/netfilter/nfnetlink_log.o
CC mm/vmscan.o
CC drivers/video/aperture.o
CC [M] sound/pci/hda/hda_sysfs.o
CC net/netfilter/nf_conntrack_core.o
AR fs/notify/built-in.a
CC arch/x86/mm/pgtable_32.o
CC fs/nfs_common/nfsacl.o
CC lib/zstd/decompress/zstd_decompress_block.o
CC sound/core/misc.o
AR arch/x86/kernel/cpu/mce/built-in.a
CC arch/x86/mm/iomap_32.o
CC security/selinux/netif.o
CC fs/iomap/trace.o
CC fs/iomap/iter.o
CC [M] sound/pci/hda/hda_controller.o
AR arch/x86/kernel/cpu/mtrr/built-in.a
CC arch/x86/kernel/cpu/cacheinfo.o
CC net/ethtool/bitset.o
CC net/ethtool/strset.o
CC drivers/pci/host-bridge.o
CC crypto/scatterwalk.o
CC net/netfilter/nf_conntrack_standalone.o
CC arch/x86/pci/amd_bus.o
CC mm/shrinker.o
CC arch/x86/mm/hugetlbpage.o
CC arch/x86/kernel/apic/io_apic.o
CC arch/x86/kernel/apic/msi.o
CC security/selinux/netnode.o
CC io_uring/poll.o
CC lib/xz/xz_dec_bcj.o
CC io_uring/uring_cmd.o
CC arch/x86/events/intel/uncore.o
AR drivers/video/console/built-in.a
CC drivers/video/cmdline.o
CC net/sched/sch_fifo.o
CC arch/x86/kernel/signal_32.o
CC arch/x86/mm/dump_pagetables.o
CC [M] sound/pci/hda/hda_proc.o
CC net/netfilter/nf_conntrack_expect.o
CC sound/core/device.o
CC lib/crypto/mpi/mpi-add.o
CC net/netfilter/nf_conntrack_helper.o
CC arch/x86/events/intel/uncore_nhmex.o
CC net/core/sysctl_net_core.o
CC lib/dim/dim.o
CC arch/x86/events/intel/uncore_snb.o
CC fs/nfs_common/grace.o
CC drivers/video/nomodeset.o
CC block/blk-map.o
CC lib/dim/net_dim.o
CC lib/dim/rdma_dim.o
AR lib/xz/built-in.a
CC arch/x86/kernel/traps.o
CC crypto/proc.o
CC drivers/pci/remove.o
CC fs/iomap/buffered-io.o
CC mm/shmem.o
CC arch/x86/events/intel/uncore_snbep.o
AR arch/x86/pci/built-in.a
CC sound/core/info.o
CC arch/x86/kernel/idt.o
CC arch/x86/kernel/irq.o
CC arch/x86/kernel/irq_32.o
CC security/device_cgroup.o
CC [M] sound/pci/hda/hda_hwdep.o
CC lib/crypto/mpi/mpi-bit.o
CC arch/x86/mm/highmem_32.o
CC security/selinux/netport.o
AR lib/dim/built-in.a
CC drivers/video/hdmi.o
AR sound/sparc/built-in.a
AR sound/spi/built-in.a
CC security/selinux/status.o
AR sound/parisc/built-in.a
CC crypto/aead.o
AR sound/pcmcia/vx/built-in.a
CC arch/x86/kernel/dumpstack_32.o
AR sound/pcmcia/pdaudiocf/built-in.a
CC fs/iomap/direct-io.o
AR sound/pcmcia/built-in.a
AR sound/mips/built-in.a
CC net/netfilter/nf_conntrack_proto.o
CC arch/x86/kernel/time.o
AR sound/soc/built-in.a
CC mm/util.o
CC arch/x86/kernel/cpu/scattered.o
CC net/ethtool/linkinfo.o
CC arch/x86/kernel/cpu/topology_common.o
AR fs/nfs_common/built-in.a
AR drivers/idle/built-in.a
AR drivers/char/ipmi/built-in.a
AR sound/atmel/built-in.a
CC fs/quota/dquot.o
CC block/blk-merge.o
AR sound/hda/built-in.a
CC drivers/acpi/acpica/dsargs.o
CC [M] sound/hda/hda_bus_type.o
CC block/blk-timeout.o
CC drivers/pci/pci.o
CC net/sched/cls_cgroup.o
CC net/netfilter/nf_conntrack_proto_generic.o
CC fs/quota/quota_v2.o
CC [M] sound/hda/hdac_bus.o
CC arch/x86/kernel/ioport.o
CC drivers/pnp/pnpacpi/core.o
CC drivers/pnp/core.o
AR drivers/amba/built-in.a
CC lib/crypto/mpi/mpi-cmp.o
AR drivers/clk/actions/built-in.a
CC arch/x86/kernel/cpu/topology_ext.o
CC arch/x86/events/intel/uncore_discovery.o
AR arch/x86/mm/built-in.a
AR drivers/clk/analogbits/built-in.a
CC drivers/pnp/pnpacpi/rsparser.o
AR drivers/clk/bcm/built-in.a
CC sound/core/isadma.o
CC [M] sound/pci/hda/patch_hdmi.o
AR drivers/clk/imgtec/built-in.a
CC sound/core/vmaster.o
AR drivers/clk/imx/built-in.a
AR drivers/clk/ingenic/built-in.a
CC drivers/pnp/card.o
CC drivers/acpi/acpica/dscontrol.o
CC net/core/dev.o
AR drivers/clk/mediatek/built-in.a
CC drivers/pnp/driver.o
AR drivers/clk/microchip/built-in.a
CC arch/x86/kernel/apic/probe_32.o
AR drivers/clk/mstar/built-in.a
CC io_uring/openclose.o
CC arch/x86/kernel/dumpstack.o
AR drivers/clk/mvebu/built-in.a
CC fs/iomap/fiemap.o
AR drivers/clk/ralink/built-in.a
AR drivers/clk/renesas/built-in.a
AR drivers/video/built-in.a
CC block/blk-lib.o
AR drivers/clk/socfpga/built-in.a
CC lib/zstd/zstd_common_module.o
CC drivers/dma/dw/core.o
AR drivers/clk/sophgo/built-in.a
CC drivers/dma/hsu/hsu.o
AR drivers/clk/sprd/built-in.a
AR drivers/clk/starfive/built-in.a
AR drivers/clk/sunxi-ng/built-in.a
CC crypto/geniv.o
AR drivers/clk/ti/built-in.a
AR drivers/dma/idxd/built-in.a
CC arch/x86/events/intel/cstate.o
AR drivers/clk/versatile/built-in.a
AR drivers/clk/xilinx/built-in.a
AR drivers/clk/built-in.a
CC block/blk-mq.o
CC net/ethtool/linkmodes.o
CC io_uring/sqpoll.o
CC arch/x86/kernel/cpu/topology_amd.o
CC drivers/acpi/acpica/dsdebug.o
CC io_uring/xattr.o
CC net/sched/ematch.o
CC arch/x86/kernel/cpu/common.o
CC mm/mmzone.o
CC net/netfilter/nf_conntrack_proto_tcp.o
CC security/selinux/ss/ebitmap.o
CC lib/crypto/mpi/mpi-sub-ui.o
AR arch/x86/kernel/apic/built-in.a
CC net/ethtool/rss.o
CC [M] sound/hda/hdac_device.o
CC lib/zstd/common/debug.o
CC [M] sound/hda/hdac_sysfs.o
CC drivers/acpi/acpica/dsfield.o
CC [M] sound/pci/hda/hda_eld.o
CC arch/x86/kernel/cpu/rdrand.o
CC sound/core/ctljack.o
CC lib/zstd/common/entropy_common.o
CC arch/x86/kernel/cpu/match.o
CC kernel/locking/mutex.o
CC lib/zstd/common/error_private.o
CC kernel/locking/semaphore.o
CC drivers/pnp/resource.o
AR drivers/soc/apple/built-in.a
CC lib/zstd/common/fse_decompress.o
CC lib/zstd/common/zstd_common.o
AR drivers/soc/aspeed/built-in.a
CC net/netfilter/nf_conntrack_proto_udp.o
AR drivers/soc/bcm/built-in.a
AR drivers/soc/fsl/built-in.a
CC drivers/acpi/acpica/dsinit.o
CC fs/iomap/seek.o
AR drivers/soc/fujitsu/built-in.a
AR drivers/soc/hisilicon/built-in.a
AR sound/x86/built-in.a
AR drivers/soc/imx/built-in.a
CC net/netfilter/nf_conntrack_proto_icmp.o
AR drivers/pnp/pnpacpi/built-in.a
CC net/netfilter/nf_conntrack_extend.o
AR sound/xen/built-in.a
CC sound/core/jack.o
AR drivers/soc/ixp4xx/built-in.a
CC drivers/dma/dw/dw.o
AR drivers/soc/loongson/built-in.a
CC sound/core/timer.o
AR drivers/soc/mediatek/built-in.a
AR drivers/soc/microchip/built-in.a
AR drivers/soc/nuvoton/built-in.a
AR drivers/soc/pxa/built-in.a
AR drivers/soc/amlogic/built-in.a
AR drivers/dma/hsu/built-in.a
CC kernel/power/qos.o
AR drivers/soc/qcom/built-in.a
CC kernel/printk/printk.o
AR sound/virtio/built-in.a
CC kernel/printk/printk_safe.o
AR drivers/soc/renesas/built-in.a
CC block/blk-mq-tag.o
AR drivers/soc/rockchip/built-in.a
CC sound/core/hrtimer.o
CC sound/core/seq_device.o
AR drivers/soc/sunxi/built-in.a
CC [M] sound/pci/hda/hda_intel.o
LD [M] sound/pci/hda/snd-hda-codec.o
CC mm/vmstat.o
AR drivers/soc/ti/built-in.a
CC [M] sound/core/hwdep.o
AR drivers/soc/xilinx/built-in.a
AR drivers/soc/built-in.a
CC lib/crypto/mpi/mpi-div.o
CC crypto/lskcipher.o
CC kernel/power/main.o
CC kernel/printk/nbcon.o
CC crypto/skcipher.o
CC kernel/printk/printk_ringbuffer.o
AR arch/x86/events/intel/built-in.a
AR arch/x86/events/built-in.a
CC arch/x86/kernel/cpu/bugs.o
CC drivers/acpi/acpica/dsmethod.o
AR drivers/acpi/pmic/built-in.a
CC drivers/acpi/dptf/int340x_thermal.o
CC drivers/dma/dw/idma32.o
AR lib/zstd/built-in.a
CC io_uring/nop.o
CC lib/fonts/fonts.o
CC net/ethtool/linkstate.o
CC crypto/seqiv.o
CC lib/fonts/font_8x16.o
CC mm/backing-dev.o
CC [M] sound/hda/hdac_regmap.o
CC fs/quota/quota_tree.o
CC [M] sound/hda/hdac_controller.o
AR net/sched/built-in.a
CC net/ethtool/debug.o
CC net/ethtool/wol.o
CC fs/iomap/swapfile.o
CC kernel/locking/rwsem.o
CC drivers/virtio/virtio.o
CC mm/mm_init.o
CC kernel/locking/percpu-rwsem.o
CC kernel/printk/sysctl.o
CC security/selinux/ss/hashtab.o
CC net/ipv4/netfilter/nf_defrag_ipv4.o
CC drivers/acpi/acpica/dsmthdat.o
CC net/ipv4/netfilter/nf_reject_ipv4.o
CC net/ipv4/netfilter/ip_tables.o
CC lib/crypto/mpi/mpi-inv.o
AR drivers/acpi/dptf/built-in.a
CC kernel/power/console.o
AR kernel/sched/built-in.a
AR lib/fonts/built-in.a
CC net/ipv4/route.o
CC [M] sound/core/pcm.o
CC drivers/acpi/x86/apple.o
CC lib/argv_split.o
CC drivers/pnp/manager.o
CC drivers/acpi/x86/cmos_rtc.o
CC kernel/irq/irqdesc.o
CC net/xfrm/xfrm_policy.o
CC net/unix/af_unix.o
CC kernel/rcu/update.o
CC drivers/dma/dw/acpi.o
CC kernel/rcu/sync.o
CC net/xfrm/xfrm_state.o
CC net/netfilter/nf_conntrack_acct.o
CC net/netfilter/nf_conntrack_seqadj.o
CC security/selinux/ss/symtab.o
CC net/ipv6/netfilter/ip6_tables.o
CC net/packet/af_packet.o
CC net/netfilter/nf_conntrack_proto_icmpv6.o
CC net/xfrm/xfrm_hash.o
CC drivers/acpi/acpica/dsobject.o
CC io_uring/fs.o
CC drivers/pci/pci-driver.o
CC net/xfrm/xfrm_input.o
CC io_uring/splice.o
CC net/xfrm/xfrm_output.o
CC drivers/acpi/acpica/dsopcode.o
AR fs/iomap/built-in.a
CC net/ethtool/features.o
CC net/netfilter/nf_conntrack_netlink.o
CC drivers/virtio/virtio_ring.o
CC crypto/echainiv.o
CC fs/quota/quota.o
CC security/selinux/ss/sidtab.o
CC kernel/power/process.o
CC kernel/locking/spinlock.o
CC [M] sound/hda/hdac_stream.o
CC lib/crypto/mpi/mpi-mod.o
CC drivers/acpi/x86/lpss.o
CC drivers/pnp/support.o
CC drivers/pci/search.o
CC drivers/acpi/x86/s2idle.o
CC net/unix/garbage.o
CC crypto/ahash.o
CC net/netfilter/nf_conntrack_ftp.o
LD [M] sound/pci/hda/snd-hda-codec-hdmi.o
LD [M] sound/pci/hda/snd-hda-intel.o
AR sound/pci/vx222/built-in.a
AR sound/pci/built-in.a
CC drivers/acpi/x86/utils.o
CC kernel/irq/handle.o
AR drivers/dma/dw/built-in.a
CC net/netfilter/nf_conntrack_irc.o
AR drivers/dma/mediatek/built-in.a
CC net/netfilter/nf_conntrack_sip.o
AR drivers/dma/qcom/built-in.a
CC [M] sound/core/pcm_native.o
AR drivers/dma/ti/built-in.a
CC drivers/acpi/tables.o
CC kernel/locking/osq_lock.o
CC drivers/acpi/acpica/dspkginit.o
AR drivers/dma/xilinx/built-in.a
CC drivers/dma/dmaengine.o
CC arch/x86/kernel/cpu/aperfmperf.o
CC net/ipv4/inetpeer.o
CC mm/percpu.o
CC crypto/shash.o
CC drivers/pnp/interface.o
AR kernel/printk/built-in.a
CC kernel/locking/qspinlock.o
CC kernel/locking/rtmutex_api.o
CC lib/crypto/mpi/mpi-mul.o
CC net/ipv4/netfilter/iptable_filter.o
CC block/blk-stat.o
CC drivers/acpi/acpica/dsutils.o
CC net/xfrm/xfrm_sysctl.o
CC kernel/locking/qrwlock.o
CC drivers/acpi/acpica/dswexec.o
CC io_uring/sync.o
AR kernel/livepatch/built-in.a
CC sound/sound_core.o
CC kernel/irq/manage.o
CC net/ipv4/netfilter/iptable_mangle.o
CC [M] sound/hda/array.o
CC net/ethtool/privflags.o
CC drivers/acpi/x86/blacklist.o
CC [M] sound/hda/hdmi_chmap.o
CC drivers/pci/rom.o
CC fs/quota/kqid.o
CC kernel/power/suspend.o
CC arch/x86/kernel/cpu/cpuid-deps.o
CC arch/x86/kernel/cpu/umwait.o
CC net/core/dev_addr_lists.o
CC security/selinux/ss/avtab.o
CC fs/proc/task_mmu.o
CC kernel/irq/spurious.o
CC drivers/pnp/quirks.o
MKCAP arch/x86/kernel/cpu/capflags.c
CC drivers/pnp/system.o
CC lib/crypto/mpi/mpih-cmp.o
CC drivers/acpi/acpica/dswload.o
CC fs/proc/inode.o
CC net/core/dst.o
CC sound/last.o
CC drivers/virtio/virtio_anchor.o
CC drivers/tty/vt/vt_ioctl.o
CC net/ipv6/netfilter/ip6table_filter.o
CC drivers/char/hw_random/core.o
CC drivers/char/agp/backend.o
AR drivers/acpi/x86/built-in.a
CC net/netfilter/nf_nat_core.o
CC net/netfilter/nf_nat_proto.o
CC kernel/irq/resend.o
CC crypto/akcipher.o
AR kernel/locking/built-in.a
CC net/netfilter/nf_nat_helper.o
CC io_uring/msg_ring.o
CC block/blk-mq-sysfs.o
CC drivers/dma/virt-dma.o
CC drivers/char/hw_random/intel-rng.o
CC fs/quota/netlink.o
CC drivers/acpi/acpica/dswload2.o
CC lib/bug.o
CC arch/x86/kernel/nmi.o
AR net/dsa/built-in.a
CC [M] sound/hda/trace.o
CC net/ipv6/netfilter/ip6table_mangle.o
CC drivers/pci/setup-res.o
CC arch/x86/kernel/cpu/powerflags.o
CC net/ethtool/rings.o
CC kernel/rcu/srcutree.o
CC lib/crypto/mpi/mpih-div.o
CC crypto/sig.o
CC lib/crypto/mpi/mpih-mul.o
CC drivers/acpi/acpica/dswscope.o
CC net/unix/sysctl_net_unix.o
CC drivers/virtio/virtio_pci_modern_dev.o
CC net/netfilter/nf_nat_masquerade.o
AR drivers/pnp/built-in.a
CC drivers/char/agp/generic.o
CC drivers/char/mem.o
CC fs/kernfs/mount.o
CC net/ipv4/netfilter/ipt_REJECT.o
CC fs/kernfs/inode.o
CC [M] net/ipv4/netfilter/iptable_nat.o
CC security/selinux/ss/policydb.o
CC security/selinux/ss/services.o
CC kernel/dma/mapping.o
CC kernel/entry/common.o
CC kernel/irq/chip.o
CC drivers/dma/acpi-dma.o
CC drivers/acpi/acpica/dswstate.o
CC drivers/char/hw_random/amd-rng.o
CC kernel/irq/dummychip.o
CC net/core/netevent.o
CC drivers/char/hw_random/geode-rng.o
CC drivers/tty/vt/vc_screen.o
CC kernel/power/hibernate.o
CC block/blk-mq-cpumap.o
AR fs/quota/built-in.a
CC net/core/neighbour.o
CC kernel/irq/devres.o
CC net/ipv4/protocol.o
CC kernel/irq/autoprobe.o
CC io_uring/advise.o
CC drivers/pci/irq.o
CC mm/slab_common.o
CC lib/crypto/mpi/mpi-pow.o
CC crypto/kpp.o
CC kernel/module/main.o
ASN.1 crypto/rsapubkey.asn1.[ch]
ASN.1 crypto/rsaprivkey.asn1.[ch]
CC lib/buildid.o
CC kernel/module/strict_rwx.o
CC drivers/acpi/acpica/evevent.o
AR net/packet/built-in.a
CC [M] sound/hda/hdac_component.o
CC kernel/irq/irqdomain.o
CC net/sunrpc/auth_gss/auth_gss.o
CC drivers/virtio/virtio_pci_legacy_dev.o
CC net/ethtool/channels.o
CC [M] sound/core/pcm_lib.o
CC drivers/char/random.o
CC fs/proc/root.o
CC fs/kernfs/dir.o
AR net/unix/built-in.a
CC net/xfrm/xfrm_replay.o
CC net/xfrm/xfrm_device.o
CC kernel/irq/proc.o
CC net/netfilter/nf_nat_ftp.o
CC net/ipv6/netfilter/nf_defrag_ipv6_hooks.o
CC net/ipv6/netfilter/nf_conntrack_reasm.o
CC net/ipv6/netfilter/nf_reject_ipv6.o
CC net/ipv6/netfilter/ip6t_ipv6header.o
CC drivers/char/hw_random/via-rng.o
CC kernel/rcu/tree.o
AR drivers/dma/built-in.a
CC kernel/irq/migration.o
CC kernel/rcu/rcu_segcblist.o
CC lib/crypto/aes.o
CC arch/x86/kernel/cpu/topology.o
CC drivers/char/agp/isoch.o
CC drivers/acpi/acpica/evgpe.o
CC block/blk-mq-sched.o
CC fs/kernfs/file.o
CC fs/kernfs/symlink.o
AR net/ipv4/netfilter/built-in.a
CC drivers/pci/vpd.o
CC kernel/dma/direct.o
CC fs/proc/base.o
CC drivers/tty/vt/selection.o
CC fs/proc/generic.o
CC kernel/entry/syscall_user_dispatch.o
CC mm/compaction.o
CC io_uring/epoll.o
CC lib/crypto/mpi/mpiutil.o
AR net/wireless/tests/built-in.a
AR drivers/char/hw_random/built-in.a
CC net/wireless/core.o
CC io_uring/statx.o
CC net/ipv4/ip_input.o
CC crypto/rsa.o
CC drivers/virtio/virtio_pci_modern.o
CC [M] sound/hda/hdac_i915.o
CC net/ipv4/ip_fragment.o
CC fs/proc/array.o
CC drivers/acpi/acpica/evgpeblk.o
AR drivers/iommu/amd/built-in.a
AR drivers/iommu/intel/built-in.a
CC drivers/acpi/acpica/evgpeinit.o
AR drivers/iommu/arm/arm-smmu/built-in.a
AR drivers/iommu/iommufd/built-in.a
CC drivers/iommu/iommu.o
CC drivers/acpi/acpica/evgpeutil.o
AR drivers/iommu/arm/arm-smmu-v3/built-in.a
AR drivers/iommu/arm/built-in.a
CC drivers/pci/setup-bus.o
CC kernel/power/snapshot.o
CC drivers/char/agp/amd64-agp.o
CC net/ethtool/coalesce.o
CC kernel/irq/cpuhotplug.o
AR kernel/entry/built-in.a
CC net/ethtool/pause.o
CC net/ipv4/ip_forward.o
CC drivers/char/misc.o
CC drivers/tty/vt/keyboard.o
CC net/netfilter/nf_nat_irc.o
CC drivers/char/virtio_console.o
CC lib/clz_tab.o
AR lib/crypto/mpi/built-in.a
CC lib/crypto/arc4.o
CC net/xfrm/xfrm_algo.o
CC net/xfrm/xfrm_user.o
CC kernel/module/kmod.o
CC net/ethtool/eee.o
CC drivers/acpi/acpica/evglock.o
CC crypto/rsa_helper.o
CC kernel/dma/ops_helpers.o
CC crypto/rsa-pkcs1pad.o
CC [M] sound/hda/intel-dsp-config.o
AR fs/kernfs/built-in.a
CC net/ipv6/netfilter/ip6t_REJECT.o
CC net/sunrpc/auth_gss/gss_generic_token.o
CC net/ipv6/af_inet6.o
CC fs/sysfs/file.o
CC drivers/connector/cn_queue.o
CC mm/show_mem.o
AR drivers/gpu/host1x/built-in.a
CC crypto/acompress.o
CC io_uring/timeout.o
CC drivers/virtio/virtio_pci_common.o
CC kernel/irq/pm.o
CC net/wireless/sysfs.o
CC block/ioctl.o
CC [M] sound/core/pcm_misc.o
AR drivers/gpu/drm/tests/built-in.a
AR drivers/gpu/drm/arm/built-in.a
CC drivers/gpu/drm/display/drm_display_helper_mod.o
CC lib/crypto/gf128mul.o
CC drivers/acpi/acpica/evhandler.o
CC kernel/module/tree_lookup.o
CC crypto/scompress.o
CC crypto/algboss.o
CC security/selinux/ss/conditional.o
CC [M] sound/hda/intel-nhlt.o
CC net/ipv4/ip_options.o
CC drivers/char/agp/intel-agp.o
CC kernel/dma/dummy.o
CC kernel/time/time.o
CC drivers/gpu/drm/display/drm_dp_dual_mode_helper.o
CC kernel/futex/core.o
CC drivers/tty/hvc/hvc_console.o
CC net/ethtool/tsinfo.o
CC drivers/acpi/acpica/evmisc.o
CC fs/devpts/inode.o
CC fs/netfs/buffered_read.o
CC drivers/char/agp/intel-gtt.o
CC [M] sound/core/pcm_memory.o
CC fs/sysfs/dir.o
CC net/sunrpc/auth_gss/gss_mech_switch.o
CC net/ethtool/cabletest.o
CC kernel/irq/msi.o
CC net/netfilter/nf_nat_sip.o
CC kernel/time/timer.o
CC drivers/gpu/drm/display/drm_dp_helper.o
CC net/ipv4/ip_output.o
CC lib/crypto/blake2s.o
CC fs/proc/fd.o
CC net/core/rtnetlink.o
CC drivers/virtio/virtio_pci_legacy.o
CC drivers/connector/connector.o
CC drivers/pci/vc.o
CC kernel/module/kallsyms.o
CC kernel/module/procfs.o
CC [M] sound/hda/intel-sdw-acpi.o
CC drivers/virtio/virtio_pci_admin_legacy_io.o
CC drivers/char/hpet.o
CC drivers/acpi/acpica/evregion.o
AR net/ipv6/netfilter/built-in.a
CC kernel/dma/remap.o
CC fs/proc/proc_tty.o
CC io_uring/fdinfo.o
CC block/genhd.o
CC drivers/tty/vt/vt.o
CC kernel/power/swap.o
CC drivers/iommu/iommu-traces.o
CC fs/sysfs/symlink.o
CC block/ioprio.o
CC [M] sound/core/memalloc.o
CC lib/crypto/blake2s-generic.o
CC crypto/testmgr.o
CC drivers/gpu/drm/display/drm_dp_mst_topology.o
AR fs/devpts/built-in.a
CC [M] sound/core/pcm_timer.o
CC fs/ext4/balloc.o
CC kernel/futex/syscalls.o
LD [M] sound/hda/snd-hda-core.o
LD [M] sound/hda/snd-intel-dspcfg.o
LD [M] sound/hda/snd-intel-sdw-acpi.o
CC fs/ext4/bitmap.o
CC drivers/gpu/drm/display/drm_dsc_helper.o
AR drivers/tty/hvc/built-in.a
CC kernel/futex/pi.o
CC drivers/acpi/acpica/evrgnini.o
CC kernel/power/user.o
CC fs/jbd2/transaction.o
CC net/ipv6/anycast.o
CC fs/jbd2/commit.o
CC security/selinux/ss/mls.o
CC drivers/pci/mmap.o
CC drivers/virtio/virtio_input.o
CC kernel/module/sysfs.o
AR kernel/dma/built-in.a
AR drivers/char/agp/built-in.a
CC drivers/gpu/drm/display/drm_hdcp_helper.o
CC drivers/pci/devres.o
CC drivers/pci/proc.o
CC net/ethtool/tunnels.o
CC lib/crypto/sha1.o
CC fs/proc/cmdline.o
CC net/ethtool/fec.o
CC fs/netfs/buffered_write.o
CC mm/shmem_quota.o
CC drivers/connector/cn_proc.o
CC fs/sysfs/mount.o
CC drivers/char/nvram.o
CC kernel/irq/affinity.o
CC crypto/cmac.o
CC drivers/acpi/acpica/evsci.o
LD [M] sound/core/snd-hwdep.o
AR sound/core/built-in.a
CC kernel/irq/matrix.o
CC io_uring/cancel.o
CC net/sunrpc/auth_gss/svcauth_gss.o
CC kernel/cgroup/cgroup.o
LD [M] sound/core/snd-pcm.o
AR sound/built-in.a
CC lib/crypto/sha256.o
CC net/netfilter/x_tables.o
CC kernel/cgroup/rstat.o
CC drivers/iommu/iommu-sysfs.o
CC fs/proc/consoles.o
CC crypto/hmac.o
CC drivers/acpi/osi.o
CC crypto/crypto_null.o
CC drivers/pci/pci-sysfs.o
CC drivers/acpi/acpica/evxface.o
CC block/badblocks.o
CC kernel/futex/requeue.o
AR kernel/module/built-in.a
AR net/xfrm/built-in.a
CC block/blk-rq-qos.o
CC arch/x86/kernel/ldt.o
CC drivers/virtio/virtio_dma_buf.o
CC drivers/pci/slot.o
AR drivers/gpu/vga/built-in.a
CC drivers/gpu/drm/display/drm_hdmi_helper.o
CC lib/cmdline.o
CC lib/cpumask.o
AR net/mac80211/tests/built-in.a
CC net/mac80211/main.o
CC net/wireless/radiotap.o
CC kernel/power/poweroff.o
CC security/selinux/ss/context.o
CC lib/ctype.o
CC arch/x86/kernel/cpu/proc.o
CC security/selinux/netlabel.o
CC mm/interval_tree.o
CC drivers/gpu/drm/display/drm_scdc_helper.o
AR kernel/rcu/built-in.a
CC kernel/trace/trace_clock.o
CC fs/sysfs/group.o
AR drivers/char/built-in.a
CC kernel/trace/ring_buffer.o
AR lib/crypto/built-in.a
AR kernel/power/built-in.a
CC kernel/time/hrtimer.o
CC lib/dec_and_lock.o
CC kernel/trace/trace.o
CC drivers/base/power/sysfs.o
CC net/ipv6/ip6_output.o
CC fs/jbd2/recovery.o
CC drivers/block/loop.o
CC fs/proc/cpuinfo.o
CC drivers/iommu/dma-iommu.o
CC drivers/base/power/generic_ops.o
CC drivers/acpi/acpica/evxfevnt.o
CC drivers/block/virtio_blk.o
CC net/ipv4/ip_sockglue.o
CC net/ethtool/eeprom.o
CC fs/netfs/direct_read.o
CC crypto/md5.o
AR drivers/connector/built-in.a
CC fs/jbd2/checkpoint.o
CC net/sunrpc/auth_gss/gss_rpc_upcall.o
CC fs/jbd2/revoke.o
AR drivers/virtio/built-in.a
CC kernel/futex/waitwake.o
CC drivers/iommu/iova.o
CC io_uring/waitid.o
CC lib/decompress.o
CC drivers/base/power/common.o
CC net/mac80211/status.o
CC fs/jbd2/journal.o
CC lib/decompress_bunzip2.o
CC drivers/pci/pci-acpi.o
CC arch/x86/kernel/cpu/feat_ctl.o
CC crypto/sha256_generic.o
CC block/disk-events.o
CC net/mac80211/driver-ops.o
AR kernel/irq/built-in.a
CC kernel/cgroup/namespace.o
CC drivers/acpi/acpica/evxfgpe.o
CC kernel/bpf/core.o
CC drivers/acpi/acpica/evxfregn.o
AR fs/sysfs/built-in.a
CC drivers/base/power/qos.o
CC fs/ramfs/inode.o
CC fs/proc/devices.o
CC fs/ramfs/file-mmu.o
CC net/wireless/util.o
COPY drivers/tty/vt/defkeymap.c
CC drivers/tty/vt/consolemap.o
CC fs/proc/interrupts.o
CC mm/list_lru.o
CC kernel/time/timekeeping.o
CC drivers/acpi/acpica/exconcat.o
CC fs/ext4/block_validity.o
CC drivers/base/power/runtime.o
CC arch/x86/kernel/cpu/intel.o
CC drivers/base/firmware_loader/builtin/main.o
AR kernel/futex/built-in.a
CC drivers/base/firmware_loader/main.o
CC kernel/events/core.o
CC drivers/base/regmap/regmap.o
CC crypto/sha512_generic.o
CC fs/netfs/direct_write.o
CC lib/decompress_inflate.o
AR drivers/base/test/built-in.a
CC drivers/base/component.o
CC drivers/base/core.o
CC drivers/acpi/acpica/exconfig.o
AR security/selinux/built-in.a
AR security/built-in.a
CC drivers/base/regmap/regcache.o
CC drivers/base/regmap/regcache-rbtree.o
CC net/ethtool/stats.o
CC net/netfilter/xt_tcpudp.o
CC drivers/base/power/wakeirq.o
CC net/ethtool/phc_vclocks.o
CC io_uring/register.o
CC fs/proc/loadavg.o
CC net/ipv6/ip6_input.o
CC drivers/base/regmap/regcache-flat.o
CC net/sunrpc/auth_gss/gss_rpc_xdr.o
AR drivers/base/firmware_loader/builtin/built-in.a
CC kernel/cgroup/cgroup-v1.o
CC drivers/pci/iomap.o
CC drivers/base/bus.o
AR fs/ramfs/built-in.a
CC drivers/base/regmap/regcache-maple.o
AR drivers/gpu/drm/display/built-in.a
CC block/blk-ia-ranges.o
CC drivers/gpu/drm/ttm/ttm_tt.o
CC mm/workingset.o
AR drivers/iommu/built-in.a
CC drivers/gpu/drm/ttm/ttm_bo.o
CC net/ipv6/addrconf.o
HOSTCC drivers/tty/vt/conmakehash
AR drivers/block/built-in.a
CC net/ipv4/inet_hashtables.o
CC drivers/acpi/acpica/exconvrt.o
CC lib/decompress_unlz4.o
CC fs/ext4/dir.o
CC drivers/base/power/main.o
CC net/core/utils.o
CC drivers/tty/vt/defkeymap.o
CC kernel/trace/trace_output.o
CC fs/proc/meminfo.o
CC net/sunrpc/auth_gss/trace.o
CC drivers/gpu/drm/ttm/ttm_bo_util.o
CC crypto/sha3_generic.o
CC drivers/base/power/wakeup.o
CC drivers/base/regmap/regmap-debugfs.o
CC net/ipv4/inet_timewait_sock.o
CONMK drivers/tty/vt/consolemap_deftbl.c
CC drivers/tty/vt/consolemap_deftbl.o
AR drivers/base/firmware_loader/built-in.a
CC fs/proc/stat.o
CC drivers/pci/quirks.o
AR drivers/tty/vt/built-in.a
CC drivers/acpi/acpica/excreate.o
CC fs/netfs/io.o
CC arch/x86/kernel/cpu/intel_pconfig.o
CC drivers/tty/serial/8250/8250_core.o
CC drivers/acpi/acpica/exdebug.o
AR drivers/tty/ipwireless/built-in.a
CC net/core/link_watch.o
CC lib/decompress_unlzma.o
CC arch/x86/kernel/cpu/tsx.o
CC kernel/time/ntp.o
CC drivers/tty/serial/8250/8250_pnp.o
CC fs/proc/uptime.o
CC block/early-lookup.o
CC mm/debug.o
CC drivers/gpu/drm/i915/i915_config.o
CC drivers/gpu/drm/ttm/ttm_bo_vm.o
CC net/ethtool/mm.o
CC crypto/ecb.o
CC drivers/gpu/drm/i915/i915_driver.o
CC drivers/gpu/drm/ttm/ttm_module.o
CC net/netfilter/xt_CONNSECMARK.o
CC drivers/acpi/acpica/exdump.o
CC crypto/cbc.o
CC net/ethtool/module.o
CC kernel/time/clocksource.o
CC kernel/time/jiffies.o
CC kernel/trace/trace_seq.o
CC arch/x86/kernel/cpu/intel_epb.o
CC fs/ext4/ext4_jbd2.o
AR drivers/misc/eeprom/built-in.a
AR drivers/misc/cb710/built-in.a
AR drivers/misc/ti-st/built-in.a
CC drivers/gpu/drm/ttm/ttm_execbuf_util.o
CC fs/hugetlbfs/inode.o
AR drivers/misc/lis3lv02d/built-in.a
CC fs/proc/util.o
AR drivers/misc/cardreader/built-in.a
AR drivers/misc/built-in.a
AR drivers/mfd/built-in.a
CC arch/x86/kernel/setup.o
CC net/mac80211/sta_info.o
AR fs/jbd2/built-in.a
CC drivers/acpi/acpica/exfield.o
CC fs/fat/cache.o
CC io_uring/truncate.o
CC fs/fat/dir.o
CC drivers/tty/serial/8250/8250_port.o
CC net/core/filter.o
CC lib/decompress_unlzo.o
CC net/ipv6/addrlabel.o
CC block/bounce.o
CC crypto/ctr.o
CC fs/isofs/namei.o
CC mm/gup.o
CC fs/isofs/inode.o
CC fs/isofs/dir.o
CC arch/x86/kernel/cpu/amd.o
CC kernel/time/timer_list.o
CC drivers/acpi/acpica/exfldio.o
CC drivers/gpu/drm/ttm/ttm_range_manager.o
CC kernel/cgroup/freezer.o
AR kernel/bpf/built-in.a
CC kernel/cgroup/legacy_freezer.o
CC net/ipv4/inet_connection_sock.o
CC fs/netfs/iterator.o
CC net/ipv4/tcp.o
CC net/core/sock_diag.o
CC drivers/base/power/wakeup_stats.o
CC kernel/trace/trace_stat.o
CC fs/proc/version.o
CC kernel/cgroup/pids.o
CC block/bsg.o
CC net/mac80211/wep.o
CC drivers/gpu/drm/ttm/ttm_resource.o
CC kernel/trace/trace_printk.o
CC fs/netfs/locking.o
CC crypto/gcm.o
CC drivers/gpu/drm/i915/i915_drm_client.o
CC lib/decompress_unxz.o
CC net/ethtool/pse-pd.o
CC drivers/base/power/trace.o
CC drivers/gpu/drm/ttm/ttm_pool.o
CC net/netfilter/xt_NFLOG.o
AR drivers/base/regmap/built-in.a
CC drivers/tty/serial/8250/8250_dma.o
CC fs/fat/fatent.o
CC drivers/acpi/acpica/exmisc.o
CC arch/x86/kernel/x86_init.o
CC fs/proc/softirqs.o
CC drivers/gpu/drm/i915/i915_getparam.o
CC kernel/time/timeconv.o
CC lib/decompress_unzstd.o
CC drivers/gpu/drm/ttm/ttm_device.o
CC net/ipv4/tcp_input.o
CC io_uring/memmap.o
CC drivers/base/dd.o
AR fs/hugetlbfs/built-in.a
CC drivers/pci/pci-label.o
CC arch/x86/kernel/i8259.o
CC lib/dump_stack.o
CC fs/nfs/client.o
CC arch/x86/kernel/cpu/hygon.o
CC net/sunrpc/auth_gss/gss_krb5_mech.o
CC drivers/base/syscore.o
CC drivers/acpi/acpica/exmutex.o
CC kernel/trace/pid_list.o
CC block/blk-cgroup.o
CC drivers/gpu/drm/i915/i915_ioctl.o
CC kernel/cgroup/rdma.o
CC drivers/base/driver.o
CC kernel/time/timecounter.o
CC arch/x86/kernel/irqinit.o
CC net/sunrpc/auth_gss/gss_krb5_seal.o
CC kernel/time/alarmtimer.o
CC net/core/dev_ioctl.o
AR drivers/base/power/built-in.a
CC mm/mmap_lock.o
CC mm/highmem.o
CC fs/isofs/util.o
CC fs/proc/namespaces.o
CC lib/earlycpio.o
CC drivers/tty/tty_io.o
CC drivers/base/class.o
CC net/netfilter/xt_SECMARK.o
CC fs/netfs/main.o
CC kernel/time/posix-timers.o
AR drivers/nfc/built-in.a
CC kernel/fork.o
CC net/ethtool/plca.o
CC crypto/ccm.o
CC drivers/base/platform.o
CC drivers/tty/serial/8250/8250_dwlib.o
CC arch/x86/kernel/cpu/centaur.o
CC drivers/acpi/acpica/exnames.o
CC net/wireless/reg.o
CC net/mac80211/aead_api.o
CC drivers/gpu/drm/ttm/ttm_sys_manager.o
CC fs/ext4/extents.o
CC kernel/time/posix-cpu-timers.o
CC io_uring/io-wq.o
CC drivers/gpu/drm/i915/i915_irq.o
CC lib/extable.o
CC drivers/tty/n_tty.o
CC drivers/pci/vgaarb.o
CC fs/fat/file.o
CC io_uring/futex.o
CC arch/x86/kernel/jump_label.o
CC net/sunrpc/auth_gss/gss_krb5_unseal.o
CC mm/memory.o
CC kernel/cgroup/cpuset.o
CC fs/isofs/rock.o
CC drivers/acpi/acpica/exoparg1.o
CC drivers/tty/tty_ioctl.o
CC kernel/trace/trace_sched_switch.o
CC arch/x86/kernel/cpu/transmeta.o
CC fs/proc/self.o
CC drivers/gpu/drm/ttm/ttm_agp_backend.o
CC drivers/gpu/drm/i915/i915_mitigations.o
CC fs/isofs/export.o
CC arch/x86/kernel/irq_work.o
CC drivers/acpi/acpica/exoparg2.o
CC lib/flex_proportions.o
CC drivers/acpi/acpica/exoparg3.o
CC net/mac80211/wpa.o
CC kernel/time/posix-clock.o
CC drivers/tty/serial/8250/8250_pcilib.o
CC fs/ext4/extents_status.o
CC net/netfilter/xt_TCPMSS.o
CC net/ipv6/route.o
CC kernel/time/itimer.o
CC arch/x86/kernel/probe_roms.o
AR drivers/dax/hmem/built-in.a
AR drivers/dax/built-in.a
CC drivers/dma-buf/dma-buf.o
CC crypto/aes_generic.o
AR net/ethtool/built-in.a
CC crypto/crc32c_generic.o
CC lib/idr.o
CC drivers/dma-buf/dma-fence.o
CC drivers/base/cpu.o
CC kernel/trace/trace_nop.o
CC drivers/acpi/acpica/exoparg6.o
CC net/sunrpc/auth_gss/gss_krb5_wrap.o
CC fs/proc/thread_self.o
CC arch/x86/kernel/cpu/zhaoxin.o
CC fs/nfs/dir.o
CC drivers/base/firmware.o
CC block/blk-ioprio.o
AR drivers/gpu/drm/ttm/built-in.a
CC kernel/trace/blktrace.o
CC fs/fat/inode.o
AR drivers/cxl/core/built-in.a
AR drivers/cxl/built-in.a
AR drivers/gpu/drm/renesas/rcar-du/built-in.a
AR drivers/pci/built-in.a
AR drivers/gpu/drm/renesas/rz-du/built-in.a
CC block/blk-iolatency.o
AR drivers/gpu/drm/omapdrm/built-in.a
AR drivers/gpu/drm/renesas/built-in.a
CC kernel/time/clockevents.o
CC lib/irq_regs.o
CC fs/nfs/file.o
CC drivers/tty/tty_ldisc.o
CC fs/isofs/joliet.o
CC drivers/tty/serial/8250/8250_early.o
CC net/netfilter/xt_conntrack.o
CC drivers/tty/tty_buffer.o
CC drivers/acpi/acpica/exprep.o
CC lib/is_single_threaded.o
CC kernel/time/tick-common.o
CC fs/netfs/misc.o
CC arch/x86/kernel/cpu/vortex.o
CC drivers/tty/serial/8250/8250_exar.o
CC drivers/acpi/acpica/exregion.o
CC fs/isofs/compress.o
CC io_uring/napi.o
CC fs/fat/misc.o
CC fs/proc/proc_sysctl.o
CC drivers/gpu/drm/i915/i915_module.o
CC net/wireless/scan.o
CC crypto/authenc.o
CC kernel/exec_domain.o
CC drivers/acpi/acpica/exresnte.o
AR drivers/gpu/drm/tilcdc/built-in.a
CC lib/klist.o
CC fs/proc/proc_net.o
CC net/sunrpc/auth_gss/gss_krb5_crypto.o
CC fs/fat/nfs.o
CC drivers/base/init.o
CC arch/x86/kernel/cpu/perfctr-watchdog.o
CC drivers/dma-buf/dma-fence-array.o
CC fs/nfs/getroot.o
CC kernel/time/tick-broadcast.o
CC net/sunrpc/auth_gss/gss_krb5_keys.o
CC net/sunrpc/clnt.o
CC drivers/dma-buf/dma-fence-chain.o
CC drivers/macintosh/mac_hid.o
CC kernel/events/ring_buffer.o
AR drivers/scsi/pcmcia/built-in.a
CC drivers/scsi/scsi.o
CC kernel/events/callchain.o
CC drivers/scsi/hosts.o
CC drivers/acpi/acpica/exresolv.o
CC lib/kobject.o
CC drivers/scsi/scsi_ioctl.o
CC kernel/time/tick-broadcast-hrtimer.o
CC net/netlabel/netlabel_user.o
CC mm/mincore.o
CC fs/exportfs/expfs.o
AR fs/isofs/built-in.a
CC kernel/panic.o
CC net/mac80211/scan.o
CC arch/x86/kernel/cpu/vmware.o
CC kernel/cpu.o
CC drivers/base/map.o
CC drivers/tty/serial/8250/8250_lpss.o
CC fs/netfs/objects.o
CC drivers/acpi/acpica/exresop.o
CC net/ipv4/tcp_output.o
CC fs/fat/namei_vfat.o
CC kernel/cgroup/misc.o
AR drivers/macintosh/built-in.a
CC drivers/gpu/drm/i915/i915_params.o
CC drivers/tty/serial/8250/8250_mid.o
CC drivers/dma-buf/dma-fence-unwrap.o
CC drivers/tty/serial/8250/8250_pci.o
CC net/netfilter/xt_policy.o
CC block/blk-iocost.o
CC drivers/tty/serial/8250/8250_pericom.o
CC kernel/time/tick-oneshot.o
CC net/ipv4/tcp_timer.o
CC crypto/authencesn.o
CC drivers/gpu/drm/i915/i915_pci.o
CC lib/kobject_uevent.o
CC fs/fat/namei_msdos.o
CC kernel/events/hw_breakpoint.o
AR net/sunrpc/auth_gss/built-in.a
CC drivers/gpu/drm/i915/i915_scatterlist.o
CC kernel/trace/trace_events.o
CC drivers/base/devres.o
CC drivers/acpi/acpica/exserial.o
CC net/sunrpc/xprt.o
AR fs/exportfs/built-in.a
CC arch/x86/kernel/sys_ia32.o
CC net/mac80211/offchannel.o
CC arch/x86/kernel/cpu/hypervisor.o
AR io_uring/built-in.a
CC crypto/lzo.o
CC kernel/cgroup/debug.o
CC drivers/base/attribute_container.o
CC kernel/time/tick-sched.o
CC kernel/time/timer_migration.o
CC drivers/dma-buf/dma-resv.o
CC fs/proc/kcore.o
CC fs/netfs/write_collect.o
CC arch/x86/kernel/cpu/mshyperv.o
CC net/netlabel/netlabel_kapi.o
CC drivers/tty/serial/serial_core.o
CC drivers/tty/tty_port.o
CC net/wireless/nl80211.o
CC net/mac80211/ht.o
CC net/rfkill/core.o
CC drivers/acpi/acpica/exstore.o
CC drivers/scsi/scsicam.o
CC net/rfkill/input.o
CC drivers/gpu/drm/i915/i915_suspend.o
CC net/ipv6/ip6_fib.o
CC mm/mlock.o
CC drivers/base/transport_class.o
CC net/sunrpc/socklib.o
CC crypto/lzo-rle.o
CC mm/mmap.o
CC net/wireless/mlme.o
AR fs/fat/built-in.a
CC drivers/gpu/drm/i915/i915_switcheroo.o
CC drivers/base/topology.o
CC fs/lockd/clntlock.o
CC net/netfilter/xt_state.o
CC drivers/gpu/drm/i915/i915_sysfs.o
CC drivers/acpi/acpica/exstoren.o
CC mm/mmu_gather.o
CC lib/logic_pio.o
AR kernel/cgroup/built-in.a
CC drivers/tty/tty_mutex.o
AR drivers/tty/serial/8250/built-in.a
CC crypto/rng.o
CC drivers/dma-buf/sync_file.o
CC kernel/events/uprobes.o
CC drivers/base/container.o
CC fs/proc/vmcore.o
CC net/wireless/ibss.o
CC drivers/base/property.o
CC arch/x86/kernel/cpu/debugfs.o
CC drivers/base/cacheinfo.o
CC drivers/scsi/scsi_error.o
CC drivers/gpu/drm/i915/i915_utils.o
CC drivers/acpi/acpica/exstorob.o
CC crypto/drbg.o
CC fs/nfs/inode.o
CC net/9p/mod.o
AR net/rfkill/built-in.a
CC fs/ext4/file.o
CC fs/ext4/fsmap.o
CC fs/nfs/super.o
CC fs/ext4/fsync.o
CC net/ipv6/ipv6_sockglue.o
CC net/netlabel/netlabel_domainhash.o
CC lib/maple_tree.o
CC fs/nfs/io.o
AR drivers/dma-buf/built-in.a
CC drivers/acpi/acpica/exsystem.o
CC arch/x86/kernel/ksysfs.o
CC net/mac80211/agg-tx.o
CC fs/netfs/write_issue.o
CC arch/x86/kernel/cpu/capflags.o
CC mm/mprotect.o
CC net/ipv4/tcp_ipv4.o
CC net/dns_resolver/dns_key.o
AR arch/x86/kernel/cpu/built-in.a
CC kernel/time/vsyscall.o
CC kernel/time/timekeeping_debug.o
CC net/dns_resolver/dns_query.o
CC drivers/gpu/drm/i915/intel_clock_gating.o
CC crypto/jitterentropy.o
CC [M] net/netfilter/nf_log_syslog.o
CC net/netlabel/netlabel_addrlist.o
CC fs/nfs/direct.o
CC fs/lockd/clntproc.o
CC net/9p/client.o
CC fs/proc/kmsg.o
CC drivers/acpi/acpica/extrace.o
CC crypto/jitterentropy-kcapi.o
CC drivers/gpu/drm/i915/intel_device_info.o
CC net/core/tso.o
CC kernel/trace/trace_export.o
CC drivers/tty/serial/serial_base_bus.o
CC crypto/ghash-generic.o
CC drivers/base/swnode.o
CC arch/x86/kernel/bootflag.o
CC block/mq-deadline.o
CC drivers/base/auxiliary.o
CC net/netlabel/netlabel_mgmt.o
CC drivers/acpi/acpica/exutils.o
CC fs/ext4/hash.o
CC fs/proc/page.o
CC kernel/time/namespace.o
CC net/ipv6/ndisc.o
CC drivers/gpu/drm/virtio/virtgpu_drv.o
AR net/dns_resolver/built-in.a
CC drivers/acpi/acpica/hwacpi.o
CC lib/memcat_p.o
CC crypto/hash_info.o
CC drivers/gpu/drm/i915/intel_memory_region.o
CC fs/lockd/clntxdr.o
CC drivers/gpu/drm/i915/intel_pcode.o
CC drivers/scsi/scsi_lib.o
CC crypto/rsapubkey.asn1.o
AR kernel/events/built-in.a
CC fs/nfs/pagelist.o
CC crypto/rsaprivkey.asn1.o
AR crypto/built-in.a
CC kernel/exit.o
CC net/ipv4/tcp_minisocks.o
CC drivers/tty/serial/serial_ctrl.o
CC lib/nmi_backtrace.o
CC drivers/acpi/osl.o
CC fs/nfs/read.o
CC drivers/acpi/utils.o
AR fs/netfs/built-in.a
CC net/9p/error.o
CC drivers/gpu/drm/i915/intel_region_ttm.o
CC arch/x86/kernel/e820.o
CC drivers/acpi/acpica/hwesleep.o
CC drivers/gpu/drm/i915/intel_runtime_pm.o
CC net/sunrpc/xprtsock.o
CC kernel/trace/trace_event_perf.o
CC net/handshake/alert.o
CC net/devres.o
CC net/socket.o
CC net/sunrpc/sched.o
CC drivers/base/devtmpfs.o
CC mm/mremap.o
AR kernel/time/built-in.a
CC drivers/gpu/drm/virtio/virtgpu_kms.o
CC drivers/gpu/drm/virtio/virtgpu_gem.o
CC kernel/softirq.o
AR fs/proc/built-in.a
CC net/core/sock_reuseport.o
CC mm/msync.o
CC drivers/acpi/acpica/hwgpe.o
CC [M] net/netfilter/xt_mark.o
CC fs/nfs/symlink.o
CC drivers/scsi/constants.o
AR drivers/gpu/drm/imx/built-in.a
AR drivers/gpu/drm/i2c/built-in.a
AR drivers/gpu/drm/panel/built-in.a
AR drivers/gpu/drm/bridge/analogix/built-in.a
CC drivers/tty/serial/serial_port.o
AR drivers/gpu/drm/bridge/cadence/built-in.a
CC drivers/tty/serial/earlycon.o
AR drivers/gpu/drm/bridge/imx/built-in.a
CC net/9p/protocol.o
AR drivers/gpu/drm/bridge/synopsys/built-in.a
AR drivers/gpu/drm/bridge/built-in.a
AR drivers/gpu/drm/hisilicon/built-in.a
AR drivers/gpu/drm/mxsfb/built-in.a
CC drivers/acpi/reboot.o
CC lib/objpool.o
CC fs/ext4/ialloc.o
CC net/netlabel/netlabel_unlabeled.o
CC drivers/base/module.o
CC block/kyber-iosched.o
CC fs/ext4/indirect.o
CC net/core/fib_notifier.o
CC drivers/gpu/drm/i915/intel_sbi.o
CC drivers/acpi/acpica/hwregs.o
CC net/9p/trans_common.o
CC drivers/gpu/drm/i915/intel_step.o
CC kernel/trace/trace_events_filter.o
CC net/sysctl_net.o
CC fs/lockd/host.o
CC net/wireless/sme.o
CC drivers/gpu/drm/virtio/virtgpu_vram.o
CC drivers/tty/tty_ldsem.o
CC lib/plist.o
CC drivers/gpu/drm/virtio/virtgpu_display.o
CC drivers/base/devcoredump.o
CC drivers/gpu/drm/virtio/virtgpu_vq.o
CC arch/x86/kernel/pci-dma.o
CC drivers/gpu/drm/i915/intel_uncore.o
CC drivers/gpu/drm/virtio/virtgpu_fence.o
CC drivers/gpu/drm/i915/intel_wakeref.o
CC net/ipv4/tcp_cong.o
CC kernel/trace/trace_events_trigger.o
AR drivers/gpu/drm/tiny/built-in.a
CC fs/lockd/svc.o
CC arch/x86/kernel/quirks.o
AR drivers/tty/serial/built-in.a
CC [M] net/netfilter/xt_nat.o
CC net/wireless/chan.o
CC mm/page_vma_mapped.o
CC drivers/acpi/acpica/hwsleep.o
CC net/mac80211/agg-rx.o
CC net/handshake/genl.o
CC net/9p/trans_fd.o
CC mm/pagewalk.o
CC [M] net/netfilter/xt_LOG.o
CC drivers/acpi/nvs.o
CC net/mac80211/vht.o
CC drivers/scsi/scsi_lib_dma.o
CC drivers/scsi/scsi_scan.o
CC net/core/xdp.o
CC net/ipv6/udp.o
CC drivers/tty/tty_baudrate.o
CC drivers/tty/tty_jobctrl.o
CC net/ipv4/tcp_metrics.o
CC drivers/acpi/acpica/hwvalid.o
CC drivers/base/platform-msi.o
CC fs/nfs/unlink.o
CC net/wireless/ethtool.o
CC arch/x86/kernel/kdebugfs.o
CC kernel/resource.o
CC net/ipv6/udplite.o
CC net/handshake/netlink.o
CC kernel/trace/trace_eprobe.o
CC drivers/acpi/acpica/hwxface.o
CC drivers/acpi/wakeup.o
CC net/netlabel/netlabel_cipso_v4.o
CC drivers/gpu/drm/virtio/virtgpu_object.o
CC fs/ext4/inline.o
CC lib/radix-tree.o
CC net/ipv6/raw.o
CC drivers/gpu/drm/i915/vlv_sideband.o
CC drivers/gpu/drm/i915/vlv_suspend.o
CC mm/pgtable-generic.o
CC net/netlabel/netlabel_calipso.o
CC net/wireless/mesh.o
GEN drivers/scsi/scsi_devinfo_tbl.c
CC drivers/scsi/scsi_devinfo.o
CC drivers/base/physical_location.o
CC drivers/gpu/drm/virtio/virtgpu_debugfs.o
CC drivers/gpu/drm/virtio/virtgpu_plane.o
CC drivers/tty/n_null.o
CC block/blk-mq-pci.o
CC kernel/trace/trace_kprobe.o
CC lib/ratelimit.o
CC drivers/acpi/acpica/hwxfsleep.o
CC fs/lockd/svclock.o
CC arch/x86/kernel/alternative.o
CC net/core/flow_offload.o
CC kernel/trace/error_report-traces.o
CC drivers/acpi/sleep.o
CC lib/rbtree.o
CC [M] net/netfilter/xt_MASQUERADE.o
CC net/handshake/request.o
CC net/9p/trans_virtio.o
CC drivers/acpi/acpica/hwpci.o
CC drivers/base/trace.o
CC drivers/scsi/scsi_sysctl.o
CC drivers/gpu/drm/virtio/virtgpu_ioctl.o
CC fs/lockd/svcshare.o
CC mm/rmap.o
CC drivers/tty/pty.o
CC net/ipv6/icmp.o
CC net/wireless/ap.o
CC fs/nfs/write.o
CC arch/x86/kernel/i8253.o
CC drivers/acpi/acpica/nsaccess.o
CC [M] net/netfilter/xt_addrtype.o
CC block/blk-mq-virtio.o
CC drivers/gpu/drm/virtio/virtgpu_prime.o
CC net/core/gro.o
CC drivers/gpu/drm/i915/soc/intel_dram.o
CC fs/ext4/inode.o
CC net/core/netdev-genl.o
CC kernel/trace/power-traces.o
CC drivers/acpi/acpica/nsalloc.o
CC net/handshake/tlshd.o
CC net/core/netdev-genl-gen.o
AR net/netlabel/built-in.a
CC drivers/acpi/acpica/nsarguments.o
CC net/ipv4/tcp_fastopen.o
CC drivers/gpu/drm/i915/soc/intel_gmch.o
CC drivers/gpu/drm/i915/soc/intel_pch.o
CC net/handshake/trace.o
CC drivers/acpi/acpica/nsconvert.o
CC drivers/scsi/scsi_proc.o
CC arch/x86/kernel/hw_breakpoint.o
AR drivers/base/built-in.a
CC net/wireless/trace.o
AR drivers/gpu/drm/xlnx/built-in.a
CC arch/x86/kernel/tsc.o
AR drivers/gpu/drm/gud/built-in.a
CC net/sunrpc/auth.o
CC drivers/acpi/acpica/nsdump.o
AR drivers/gpu/drm/solomon/built-in.a
CC [M] drivers/gpu/drm/scheduler/sched_main.o
CC drivers/gpu/drm/drm_aperture.o
CC drivers/scsi/scsi_debugfs.o
CC drivers/gpu/drm/drm_atomic.o
CC lib/seq_buf.o
CC [M] drivers/gpu/drm/xe/xe_bb.o
CC drivers/gpu/drm/drm_atomic_uapi.o
CC [M] drivers/gpu/drm/scheduler/sched_fence.o
CC drivers/tty/tty_audit.o
CC drivers/gpu/drm/virtio/virtgpu_trace_points.o
CC [M] drivers/gpu/drm/xe/xe_bo.o
CC block/blk-mq-debugfs.o
CC fs/lockd/svcproc.o
CC drivers/acpi/acpica/nseval.o
CC [M] drivers/gpu/drm/xe/xe_bo_evict.o
CC fs/ext4/ioctl.o
CC fs/ext4/mballoc.o
CC net/mac80211/he.o
AR net/9p/built-in.a
CC kernel/sysctl.o
CC drivers/acpi/acpica/nsinit.o
CC drivers/gpu/drm/drm_auth.o
CC kernel/trace/rpm-traces.o
CC kernel/trace/trace_dynevent.o
CC drivers/gpu/drm/virtio/virtgpu_submit.o
AR net/netfilter/built-in.a
CC net/wireless/ocb.o
CC [M] drivers/gpu/drm/scheduler/sched_entity.o
CC fs/nls/nls_base.o
CC drivers/gpu/drm/i915/i915_memcpy.o
CC net/wireless/pmsr.o
CC mm/vmalloc.o
CC lib/siphash.o
CC kernel/capability.o
CC drivers/scsi/scsi_trace.o
CC kernel/trace/trace_probe.o
CC net/core/gso.o
CC fs/nls/nls_cp437.o
CC net/mac80211/s1g.o
CC fs/nls/nls_ascii.o
CC drivers/tty/sysrq.o
CC drivers/gpu/drm/i915/i915_mm.o
CC net/ipv6/mcast.o
CC drivers/acpi/acpica/nsload.o
CC net/core/net-sysfs.o
CC block/blk-pm.o
CC net/ipv4/tcp_rate.o
CC net/ipv4/tcp_recovery.o
CC arch/x86/kernel/tsc_msr.o
CC net/core/hotdata.o
CC drivers/gpu/drm/i915/i915_sw_fence.o
GEN net/wireless/shipped-certs.c
CC kernel/trace/trace_uprobe.o
CC [M] drivers/gpu/drm/xe/xe_debugfs.o
CC net/mac80211/ibss.o
CC fs/nls/nls_iso8859-1.o
CC block/holder.o
CC kernel/trace/rethook.o
AR net/handshake/built-in.a
CC drivers/gpu/drm/drm_blend.o
CC arch/x86/kernel/io_delay.o
CC drivers/acpi/acpica/nsnames.o
CC lib/string.o
CC arch/x86/kernel/rtc.o
CC net/sunrpc/auth_null.o
CC fs/lockd/svcsubs.o
CC drivers/gpu/drm/drm_bridge.o
CC arch/x86/kernel/resource.o
LD [M] drivers/gpu/drm/scheduler/gpu-sched.o
CC fs/ext4/migrate.o
AR drivers/gpu/drm/virtio/built-in.a
CC [M] drivers/gpu/drm/xe/xe_devcoredump.o
CC drivers/gpu/drm/drm_cache.o
CC lib/timerqueue.o
CC drivers/gpu/drm/i915/i915_sw_fence_work.o
CC lib/vsprintf.o
CC fs/lockd/mon.o
CC drivers/scsi/scsi_logging.o
CC fs/nls/nls_utf8.o
CC fs/nfs/namespace.o
CC drivers/acpi/device_sysfs.o
CC drivers/gpu/drm/i915/i915_syncmap.o
CC drivers/gpu/drm/drm_client.o
CC drivers/acpi/acpica/nsobject.o
CC drivers/scsi/scsi_pm.o
AR drivers/tty/built-in.a
CC drivers/gpu/drm/drm_client_modeset.o
CC fs/lockd/trace.o
CC drivers/gpu/drm/i915/i915_user_extensions.o
AR drivers/nvme/common/built-in.a
AR drivers/nvme/host/built-in.a
AS arch/x86/kernel/irqflags.o
AR drivers/nvme/target/built-in.a
CC arch/x86/kernel/static_call.o
AR block/built-in.a
AR drivers/nvme/built-in.a
CC lib/win_minmax.o
CC arch/x86/kernel/process.o
CC drivers/acpi/acpica/nsparse.o
CC arch/x86/kernel/ptrace.o
AR fs/nls/built-in.a
CC net/core/net-procfs.o
CC net/mac80211/iface.o
CC drivers/acpi/acpica/nspredef.o
CC net/core/netpoll.o
CC arch/x86/kernel/tls.o
CC drivers/acpi/acpica/nsprepkg.o
CC drivers/ata/libata-core.o
AR fs/unicode/built-in.a
CC drivers/gpu/drm/drm_color_mgmt.o
CC fs/autofs/init.o
CC net/ipv4/tcp_ulp.o
CC kernel/ptrace.o
CC kernel/user.o
HOSTCC drivers/gpu/drm/xe/xe_gen_wa_oob
CC fs/autofs/inode.o
CC drivers/gpu/drm/i915/i915_debugfs.o
CC net/ipv4/tcp_offload.o
CC fs/autofs/root.o
CC fs/lockd/xdr.o
CC net/mac80211/link.o
CC drivers/gpu/drm/i915/i915_debugfs_params.o
CC [M] drivers/gpu/drm/xe/xe_device_sysfs.o
CC net/mac80211/rate.o
CC drivers/gpu/drm/drm_connector.o
CC lib/xarray.o
CC fs/lockd/clnt4xdr.o
CC drivers/acpi/acpica/nsrepair.o
CC net/sunrpc/auth_tls.o
CC drivers/acpi/acpica/nsrepair2.o
CC drivers/scsi/scsi_bsg.o
CC drivers/acpi/acpica/nssearch.o
CC fs/lockd/xdr4.o
CC mm/process_vm_access.o
CC fs/9p/vfs_super.o
CC fs/nfs/mount_clnt.o
CC fs/9p/vfs_inode.o
CC fs/autofs/symlink.o
AR kernel/trace/built-in.a
CC fs/lockd/svc4proc.o
CC net/ipv6/reassembly.o
CC drivers/acpi/acpica/nsutils.o
CC net/ipv4/tcp_plb.o
CC arch/x86/kernel/step.o
CC fs/9p/vfs_inode_dotl.o
CC net/ipv4/datagram.o
CC net/sunrpc/auth_unix.o
CC fs/nfs/nfstrace.o
CC [M] drivers/gpu/drm/xe/xe_dma_buf.o
CC drivers/gpu/drm/drm_crtc.o
CC net/core/fib_rules.o
CC net/sunrpc/svc.o
CC fs/9p/vfs_addr.o
CC fs/autofs/waitq.o
CC drivers/scsi/scsi_common.o
CC drivers/acpi/device_pm.o
CC kernel/signal.o
CC net/ipv4/raw.o
CC drivers/acpi/acpica/nswalk.o
CC net/ipv6/tcp_ipv6.o
CC net/ipv6/ping.o
CC lib/lockref.o
CC drivers/gpu/drm/drm_displayid.o
CC mm/page_alloc.o
CC drivers/gpu/drm/i915/i915_pmu.o
CC drivers/firewire/init_ohci1394_dma.o
AR drivers/net/phy/qcom/built-in.a
CC drivers/cdrom/cdrom.o
CC drivers/net/phy/mdio-boardinfo.o
CC drivers/gpu/drm/i915/gt/gen2_engine_cs.o
CC lib/bcd.o
CC arch/x86/kernel/i8237.o
CC net/sunrpc/svcsock.o
CC net/ipv6/exthdrs.o
CC net/ipv6/datagram.o
CC net/mac80211/michael.o
CC fs/lockd/procfs.o
CC drivers/scsi/scsi_transport_spi.o
AR fs/hostfs/built-in.a
CC net/core/net-traces.o
CC net/core/selftests.o
CC drivers/acpi/acpica/nsxfeval.o
CC net/ipv6/ip6_flowlabel.o
CC net/ipv6/inet6_connection_sock.o
CC lib/sort.o
CC net/core/ptp_classifier.o
CC fs/autofs/expire.o
CC [M] drivers/gpu/drm/xe/xe_drm_client.o
CC fs/debugfs/inode.o
CC lib/parser.o
CC fs/tracefs/inode.o
CC fs/ext4/mmp.o
CC arch/x86/kernel/stacktrace.o
CC fs/9p/vfs_file.o
CC fs/tracefs/event_inode.o
CC net/core/netprio_cgroup.o
CC fs/autofs/dev-ioctl.o
CC net/ipv4/udp.o
CC net/ipv4/udplite.o
CC net/sunrpc/svcauth.o
AR drivers/firewire/built-in.a
CC arch/x86/kernel/reboot.o
CC drivers/acpi/acpica/nsxfname.o
CC net/ipv6/udp_offload.o
CC [M] fs/efivarfs/inode.o
CC drivers/net/phy/stubs.o
CC lib/debug_locks.o
AR fs/lockd/built-in.a
CC [M] fs/efivarfs/file.o
CC net/ipv6/seg6.o
CC drivers/gpu/drm/i915/gt/gen6_engine_cs.o
CC lib/random32.o
CC drivers/acpi/proc.o
CC [M] drivers/gpu/drm/xe/xe_exec.o
CC net/core/netclassid_cgroup.o
CC [M] drivers/gpu/drm/xe/xe_execlist.o
CC drivers/acpi/acpica/nsxfobj.o
CC fs/9p/vfs_dir.o
CC net/core/dst_cache.o
CC fs/ext4/move_extent.o
CC fs/ext4/namei.o
CC drivers/ata/libata-scsi.o
CC fs/debugfs/file.o
CC net/mac80211/tkip.o
CC net/ipv4/udp_offload.o
CC net/mac80211/aes_cmac.o
CC drivers/acpi/bus.o
CC lib/bust_spinlocks.o
AR fs/autofs/built-in.a
AR drivers/auxdisplay/built-in.a
CC drivers/pcmcia/cs.o
CC fs/ext4/page-io.o
CC arch/x86/kernel/msr.o
CC [M] fs/efivarfs/super.o
AR fs/tracefs/built-in.a
CC [M] fs/efivarfs/vars.o
CC net/ipv6/fib6_notifier.o
CC net/ipv6/rpl.o
CC drivers/acpi/glue.o
CC drivers/acpi/scan.o
CC net/mac80211/aes_gmac.o
CC drivers/acpi/acpica/psargs.o
CC drivers/scsi/virtio_scsi.o
AR drivers/cdrom/built-in.a
CC drivers/net/phy/mdio_devres.o
CC drivers/acpi/acpica/psloop.o
CC net/core/gro_cells.o
CC net/ipv4/arp.o
CC drivers/acpi/acpica/psobject.o
CC arch/x86/kernel/cpuid.o
CC drivers/acpi/mipi-disco-img.o
CC fs/9p/vfs_dentry.o
CC fs/9p/v9fs.o
CC kernel/sys.o
CC kernel/umh.o
CC lib/kasprintf.o
CC drivers/gpu/drm/i915/gt/gen6_ppgtt.o
CC drivers/gpu/drm/i915/gt/gen7_renderclear.o
CC drivers/scsi/sd.o
CC drivers/acpi/acpica/psopcode.o
CC drivers/acpi/acpica/psopinfo.o
CC [M] drivers/gpu/drm/xe/xe_exec_queue.o
CC arch/x86/kernel/early-quirks.o
CC fs/nfs/export.o
CC fs/nfs/sysfs.o
CC arch/x86/kernel/smp.o
CC net/mac80211/fils_aead.o
CC arch/x86/kernel/smpboot.o
CC drivers/pcmcia/socket_sysfs.o
LD [M] fs/efivarfs/efivarfs.o
CC [M] drivers/gpu/drm/xe/xe_force_wake.o
CC fs/nfs/fs_context.o
CC drivers/usb/common/common.o
CC drivers/net/phy/phy.o
CC lib/bitmap.o
CC fs/9p/fid.o
AR fs/debugfs/built-in.a
CC drivers/pcmcia/cardbus.o
CC kernel/workqueue.o
CC drivers/gpu/drm/drm_drv.o
CC drivers/usb/core/usb.o
CC drivers/gpu/drm/drm_dumb_buffers.o
CC drivers/acpi/acpica/psparse.o
CC lib/scatterlist.o
AR drivers/usb/phy/built-in.a
CC net/mac80211/cfg.o
CC drivers/usb/mon/mon_main.o
CC net/mac80211/ethtool.o
CC net/ipv6/ioam6.o
CC fs/9p/xattr.o
CC drivers/usb/core/hub.o
CC net/sunrpc/svcauth_unix.o
CC drivers/scsi/sr.o
CC arch/x86/kernel/tsc_sync.o
CC lib/list_sort.o
CC kernel/pid.o
CC net/core/failover.o
CC drivers/acpi/acpica/psscope.o
CC drivers/net/phy/phy-c45.o
CC fs/ext4/readpage.o
CC drivers/pcmcia/ds.o
CC arch/x86/kernel/setup_percpu.o
CC mm/init-mm.o
CC drivers/usb/common/debug.o
CC kernel/task_work.o
CC lib/uuid.o
CC drivers/gpu/drm/drm_edid.o
CC drivers/net/phy/phy-core.o
CC drivers/net/phy/phy_device.o
CC lib/iov_iter.o
AR drivers/usb/common/built-in.a
CC drivers/usb/host/pci-quirks.o
CC drivers/gpu/drm/drm_eld.o
CC drivers/usb/host/ehci-hcd.o
CC drivers/usb/mon/mon_stat.o
CC drivers/usb/host/ehci-pci.o
AR fs/9p/built-in.a
CC net/sunrpc/addr.o
CC drivers/acpi/acpica/pstree.o
CC fs/open.o
CC drivers/gpu/drm/i915/gt/gen8_engine_cs.o
CC drivers/ata/libata-eh.o
CC lib/clz_ctz.o
CC drivers/usb/class/usblp.o
CC fs/ext4/resize.o
CC drivers/usb/storage/scsiglue.o
CC drivers/gpu/drm/drm_encoder.o
CC net/mac80211/rx.o
CC lib/bsearch.o
CC net/ipv4/icmp.o
CC drivers/usb/storage/protocol.o
GEN xe_wa_oob.c xe_wa_oob.h
CC [M] drivers/gpu/drm/xe/xe_gpu_scheduler.o
CC fs/ext4/super.o
CC arch/x86/kernel/mpparse.o
CC mm/memblock.o
CC drivers/acpi/acpica/psutils.o
CC kernel/extable.o
CC drivers/usb/core/hcd.o
CC drivers/usb/mon/mon_text.o
CC fs/ext4/symlink.o
CC drivers/gpu/drm/drm_file.o
CC [M] drivers/gpu/drm/xe/xe_gsc.o
CC net/mac80211/spectmgmt.o
CC drivers/gpu/drm/i915/gt/gen8_ppgtt.o
CC drivers/acpi/resource.o
CC arch/x86/kernel/trace_clock.o
CC drivers/usb/host/ohci-hcd.o
CC fs/nfs/nfsroot.o
CC drivers/pcmcia/pcmcia_resource.o
AR net/core/built-in.a
CC drivers/usb/mon/mon_bin.o
CC lib/find_bit.o
CC drivers/acpi/acpica/pswalk.o
CC kernel/params.o
CC [M] drivers/gpu/drm/xe/xe_gsc_proxy.o
CC arch/x86/kernel/trace.o
CC fs/nfs/sysctl.o
CC drivers/net/phy/linkmode.o
CC drivers/acpi/acpica/psxface.o
CC drivers/usb/storage/transport.o
CC net/ipv6/sysctl_net_ipv6.o
CC drivers/acpi/acpica/rsaddr.o
AR drivers/usb/class/built-in.a
CC drivers/scsi/sr_ioctl.o
CC drivers/usb/host/ohci-pci.o
AR drivers/usb/misc/built-in.a
CC drivers/usb/host/uhci-hcd.o
CC drivers/scsi/sr_vendor.o
CC drivers/acpi/acpica/rscalc.o
CC fs/ext4/sysfs.o
CC drivers/acpi/acpica/rscreate.o
CC drivers/usb/storage/usb.o
CC net/ipv6/xfrm6_policy.o
CC drivers/acpi/acpica/rsdumpinfo.o
CC drivers/usb/early/ehci-dbgp.o
CC drivers/acpi/acpi_processor.o
CC net/ipv6/xfrm6_state.o
CC drivers/acpi/processor_core.o
CC drivers/pcmcia/cistpl.o
CC net/mac80211/tx.o
CC lib/llist.o
CC [M] drivers/gpu/drm/xe/xe_gsc_submit.o
CC arch/x86/kernel/rethook.o
AR drivers/net/pse-pd/built-in.a
CC mm/slub.o
CC mm/madvise.o
CC drivers/acpi/acpica/rsinfo.o
CC net/sunrpc/rpcb_clnt.o
CC drivers/pcmcia/pcmcia_cis.o
CC net/mac80211/key.o
CC drivers/scsi/sg.o
CC drivers/net/phy/mdio_bus.o
CC mm/page_io.o
CC net/wireless/shipped-certs.o
CC mm/swap_state.o
CC drivers/gpu/drm/drm_fourcc.o
CC [M] drivers/gpu/drm/xe/xe_gt.o
AR drivers/usb/mon/built-in.a
CC lib/lwq.o
CC [M] drivers/gpu/drm/xe/xe_gt_ccs_mode.o
CC drivers/gpu/drm/drm_framebuffer.o
CC fs/nfs/nfs3super.o
CC net/mac80211/util.o
CC drivers/gpu/drm/i915/gt/intel_breadcrumbs.o
CC drivers/usb/core/urb.o
CC drivers/acpi/processor_pdc.o
CC mm/swapfile.o
CC drivers/acpi/acpica/rsio.o
CC fs/nfs/nfs3client.o
CC drivers/gpu/drm/drm_gem.o
CC drivers/pcmcia/rsrc_mgr.o
CC net/mac80211/parse.o
CC net/ipv4/devinet.o
CC lib/memweight.o
CC fs/ext4/xattr.o
CC net/sunrpc/timer.o
CC lib/kfifo.o
CC arch/x86/kernel/vmcore_info_32.o
AR drivers/usb/early/built-in.a
CC mm/swap_slots.o
CC drivers/gpu/drm/drm_ioctl.o
CC kernel/kthread.o
CC drivers/usb/host/xhci.o
CC drivers/usb/storage/initializers.o
CC drivers/acpi/acpica/rsirq.o
CC [M] drivers/gpu/drm/xe/xe_gt_clock.o
CC net/ipv6/xfrm6_input.o
CC drivers/input/serio/serio.o
CC drivers/input/keyboard/atkbd.o
CC drivers/input/mouse/psmouse-base.o
CC net/sunrpc/xdr.o
CC drivers/net/mdio/acpi_mdio.o
AR drivers/net/pcs/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gt_debugfs.o
CC net/mac80211/wme.o
CC net/ipv4/af_inet.o
AR drivers/net/ethernet/3com/built-in.a
CC drivers/ata/libata-transport.o
CC drivers/net/ethernet/8390/ne2k-pci.o
CC drivers/ata/libata-trace.o
CC drivers/net/mdio/fwnode_mdio.o
CC drivers/acpi/acpica/rslist.o
CC arch/x86/kernel/machine_kexec_32.o
CC drivers/pcmcia/rsrc_nonstatic.o
CC drivers/usb/core/message.o
CC drivers/net/ethernet/8390/8390.o
AS arch/x86/kernel/relocate_kernel_32.o
CC drivers/gpu/drm/drm_lease.o
CC fs/nfs/nfs3proc.o
CC lib/percpu-refcount.o
AR drivers/net/wireless/admtek/built-in.a
CC drivers/usb/storage/sierra_ms.o
AR drivers/net/ethernet/adaptec/built-in.a
AR drivers/net/wireless/atmel/built-in.a
AR drivers/net/wireless/ath/built-in.a
AR net/wireless/built-in.a
CC drivers/usb/core/driver.o
CC fs/read_write.o
CC fs/ext4/xattr_hurd.o
AR drivers/net/wireless/broadcom/built-in.a
CC drivers/net/phy/mdio_device.o
AR drivers/net/wireless/intel/built-in.a
CC drivers/net/phy/swphy.o
AR drivers/net/wireless/intersil/built-in.a
CC fs/ext4/xattr_trusted.o
CC lib/rhashtable.o
CC drivers/gpu/drm/drm_managed.o
AR drivers/net/wireless/marvell/built-in.a
AR drivers/net/wireless/mediatek/built-in.a
CC drivers/input/serio/i8042.o
CC drivers/acpi/acpica/rsmemory.o
AR drivers/net/wireless/microchip/built-in.a
AR drivers/net/wireless/purelifi/built-in.a
CC mm/dmapool.o
AR drivers/net/wireless/quantenna/built-in.a
AR drivers/net/wireless/ralink/built-in.a
AR drivers/net/wireless/realtek/built-in.a
CC drivers/scsi/scsi_sysfs.o
AR drivers/net/wireless/rsi/built-in.a
AR drivers/net/wireless/silabs/built-in.a
AR drivers/net/wireless/st/built-in.a
AR drivers/net/wireless/ti/built-in.a
CC drivers/gpu/drm/i915/gt/intel_context.o
AR drivers/net/wireless/zydas/built-in.a
AR drivers/net/wireless/virtual/built-in.a
AR drivers/net/wireless/built-in.a
AR drivers/net/usb/built-in.a
CC drivers/net/mii.o
CC [M] drivers/gpu/drm/xe/xe_gt_freq.o
CC drivers/acpi/acpica/rsmisc.o
CC arch/x86/kernel/crash_dump_32.o
CC fs/nfs/nfs3xdr.o
AR drivers/input/keyboard/built-in.a
CC lib/base64.o
CC drivers/net/phy/fixed_phy.o
AR drivers/net/mdio/built-in.a
CC kernel/sys_ni.o
CC drivers/net/loopback.o
CC drivers/net/netconsole.o
CC drivers/input/mouse/synaptics.o
CC fs/ext4/xattr_user.o
CC drivers/pcmcia/yenta_socket.o
CC net/ipv6/xfrm6_output.o
CC drivers/input/mouse/focaltech.o
CC drivers/acpi/acpica/rsserial.o
CC drivers/gpu/drm/i915/gt/intel_context_sseu.o
CC drivers/usb/storage/option_ms.o
CC drivers/input/serio/serport.o
CC drivers/gpu/drm/drm_mm.o
CC lib/once.o
CC net/ipv6/xfrm6_protocol.o
CC drivers/ata/libata-sata.o
CC drivers/net/virtio_net.o
AR drivers/input/joystick/built-in.a
CC net/mac80211/chan.o
AR drivers/input/tablet/built-in.a
CC kernel/nsproxy.o
AR drivers/input/touchscreen/built-in.a
AR drivers/net/ethernet/8390/built-in.a
CC net/mac80211/trace.o
CC kernel/notifier.o
AR drivers/net/ethernet/agere/built-in.a
CC drivers/acpi/acpica/rsutils.o
AR drivers/net/ethernet/alacritech/built-in.a
AR drivers/net/ethernet/alteon/built-in.a
AR drivers/net/ethernet/amazon/built-in.a
AR drivers/net/ethernet/amd/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gt_idle.o
AR drivers/net/ethernet/aquantia/built-in.a
CC arch/x86/kernel/crash.o
AR drivers/net/ethernet/arc/built-in.a
AR drivers/input/misc/built-in.a
CC drivers/usb/core/config.o
AR drivers/net/ethernet/asix/built-in.a
CC net/mac80211/mlme.o
AR drivers/net/ethernet/atheros/built-in.a
CC drivers/usb/core/file.o
CC drivers/input/input.o
CC drivers/usb/storage/usual-tables.o
AR drivers/net/ethernet/cadence/built-in.a
CC drivers/net/ethernet/broadcom/bnx2.o
AR drivers/net/ethernet/brocade/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gt_mcr.o
CC net/ipv4/igmp.o
CC lib/refcount.o
AR drivers/net/ethernet/cavium/common/built-in.a
AR drivers/net/ethernet/cavium/thunder/built-in.a
AR drivers/net/ethernet/cavium/liquidio/built-in.a
CC lib/rcuref.o
AR drivers/net/ethernet/cavium/octeon/built-in.a
AR drivers/net/ethernet/cavium/built-in.a
CC drivers/input/serio/libps2.o
CC net/sunrpc/sunrpc_syms.o
CC net/ipv6/netfilter.o
CC net/mac80211/tdls.o
CC drivers/net/net_failover.o
CC drivers/acpi/acpica/rsxface.o
CC drivers/net/phy/realtek.o
AR drivers/scsi/built-in.a
CC net/ipv4/fib_frontend.o
CC net/ipv6/proc.o
CC lib/usercopy.o
CC mm/hugetlb.o
CC [M] drivers/gpu/drm/xe/xe_gt_pagefault.o
CC fs/file_table.o
CC drivers/ata/libata-sff.o
CC drivers/rtc/lib.o
CC drivers/i2c/algos/i2c-algo-bit.o
AR drivers/usb/storage/built-in.a
CC drivers/i2c/busses/i2c-i801.o
CC drivers/ata/libata-pmp.o
CC drivers/gpu/drm/i915/gt/intel_engine_cs.o
AR drivers/i2c/muxes/built-in.a
CC drivers/gpu/drm/i915/gt/intel_engine_heartbeat.o
CC net/ipv4/fib_semantics.o
CC fs/ext4/fast_commit.o
CC arch/x86/kernel/module.o
CC [M] drivers/gpu/drm/xe/xe_gt_sysfs.o
CC drivers/net/ethernet/broadcom/tg3.o
CC lib/errseq.o
CC drivers/acpi/acpica/tbdata.o
CC drivers/input/mouse/alps.o
CC lib/bucket_locks.o
AR drivers/pcmcia/built-in.a
CC kernel/ksysfs.o
CC lib/generic-radix-tree.o
CC lib/bitmap-str.o
CC fs/ext4/orphan.o
CC drivers/acpi/acpica/tbfadt.o
CC arch/x86/kernel/doublefault_32.o
CC drivers/rtc/class.o
AR drivers/input/serio/built-in.a
CC drivers/usb/host/xhci-mem.o
CC fs/super.o
CC fs/char_dev.o
CC drivers/usb/core/buffer.o
CC [M] drivers/gpu/drm/xe/xe_gt_throttle.o
CC lib/string_helpers.o
CC drivers/acpi/acpica/tbfind.o
CC [M] drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
CC drivers/acpi/acpica/tbinstal.o
CC lib/hexdump.o
CC drivers/usb/host/xhci-ext-caps.o
CC arch/x86/kernel/early_printk.o
CC drivers/usb/core/sysfs.o
CC drivers/rtc/interface.o
AR drivers/i2c/algos/built-in.a
AR drivers/net/phy/built-in.a
AR drivers/i3c/built-in.a
CC kernel/cred.o
CC drivers/acpi/acpica/tbprint.o
CC kernel/reboot.o
CC net/sunrpc/cache.o
AR drivers/media/i2c/built-in.a
AR drivers/media/tuners/built-in.a
CC drivers/ptp/ptp_clock.o
AR drivers/pps/clients/built-in.a
AR drivers/media/rc/keymaps/built-in.a
AR drivers/media/rc/built-in.a
AR drivers/pps/generators/built-in.a
CC drivers/pps/pps.o
CC drivers/power/supply/power_supply_core.o
AR drivers/media/common/b2c2/built-in.a
AR drivers/media/common/saa7146/built-in.a
CC drivers/power/supply/power_supply_sysfs.o
AR drivers/media/common/siano/built-in.a
CC fs/nfs/nfs3acl.o
AR drivers/media/common/v4l2-tpg/built-in.a
CC drivers/power/supply/power_supply_leds.o
AR drivers/media/common/videobuf2/built-in.a
CC drivers/acpi/acpica/tbutils.o
CC drivers/acpi/acpica/tbxface.o
AR drivers/media/common/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gt_topology.o
AR drivers/media/platform/allegro-dvt/built-in.a
CC net/ipv6/syncookies.o
AR drivers/media/platform/amlogic/meson-ge2d/built-in.a
CC fs/stat.o
AR drivers/media/platform/amlogic/built-in.a
CC net/ipv4/fib_trie.o
AR drivers/i2c/busses/built-in.a
AR drivers/media/platform/amphion/built-in.a
CC drivers/i2c/i2c-boardinfo.o
AR drivers/media/platform/aspeed/built-in.a
CC net/mac80211/ocb.o
AR drivers/media/platform/atmel/built-in.a
CC arch/x86/kernel/hpet.o
CC drivers/pps/kapi.o
AR drivers/media/platform/broadcom/built-in.a
CC fs/nfs/nfs4proc.o
AR drivers/media/platform/cadence/built-in.a
CC fs/ext4/acl.o
CC net/mac80211/airtime.o
AR drivers/media/platform/chips-media/coda/built-in.a
AR drivers/media/platform/chips-media/wave5/built-in.a
AR drivers/media/platform/chips-media/built-in.a
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
CC drivers/i2c/i2c-core-base.o
AR drivers/media/platform/mediatek/vcodec/common/built-in.a
AR drivers/media/platform/mediatek/vcodec/encoder/built-in.a
AR drivers/media/platform/mediatek/vcodec/decoder/built-in.a
AR drivers/media/platform/mediatek/vcodec/built-in.a
AR drivers/media/platform/mediatek/vpu/built-in.a
AR drivers/media/platform/mediatek/mdp3/built-in.a
CC net/mac80211/eht.o
AR drivers/media/platform/mediatek/built-in.a
CC lib/kstrtox.o
AR drivers/media/platform/microchip/built-in.a
CC net/mac80211/led.o
AR drivers/media/platform/nuvoton/built-in.a
CC drivers/acpi/acpica/tbxfload.o
CC drivers/hwmon/hwmon.o
AR drivers/media/platform/nvidia/tegra-vde/built-in.a
AR drivers/media/platform/nvidia/built-in.a
AR drivers/media/platform/nxp/dw100/built-in.a
AR drivers/media/platform/nxp/imx-jpeg/built-in.a
CC drivers/pps/sysfs.o
AR drivers/media/platform/qcom/camss/built-in.a
CC net/ipv4/fib_notifier.o
AR drivers/media/platform/nxp/imx8-isi/built-in.a
AR drivers/media/platform/qcom/venus/built-in.a
AR drivers/media/platform/nxp/built-in.a
AR drivers/media/platform/qcom/built-in.a
CC drivers/input/input-compat.o
AR drivers/media/platform/renesas/rcar-vin/built-in.a
AR drivers/media/platform/renesas/rzg2l-cru/built-in.a
CC drivers/input/mouse/byd.o
AR drivers/media/platform/renesas/vsp1/built-in.a
AR drivers/media/platform/renesas/built-in.a
CC drivers/usb/core/endpoint.o
CC fs/exec.o
CC drivers/power/supply/power_supply_hwmon.o
AR drivers/media/platform/rockchip/rga/built-in.a
AR drivers/media/platform/rockchip/rkisp1/built-in.a
AR drivers/media/platform/rockchip/built-in.a
CC kernel/async.o
AR drivers/media/platform/samsung/exynos4-is/built-in.a
AR drivers/media/platform/samsung/exynos-gsc/built-in.a
AR drivers/media/platform/samsung/s3c-camif/built-in.a
CC drivers/ata/libata-acpi.o
AR drivers/media/platform/st/sti/bdisp/built-in.a
AR drivers/media/platform/sunxi/sun4i-csi/built-in.a
CC kernel/range.o
CC drivers/ata/libata-pata-timings.o
AR drivers/media/platform/samsung/s5p-g2d/built-in.a
AR drivers/media/platform/sunxi/sun6i-csi/built-in.a
AR drivers/media/platform/st/sti/c8sectpfe/built-in.a
AR drivers/media/platform/samsung/s5p-jpeg/built-in.a
CC drivers/ptp/ptp_chardev.o
AR drivers/media/platform/sunxi/sun6i-mipi-csi2/built-in.a
AR drivers/media/platform/st/sti/delta/built-in.a
AR drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/built-in.a
CC net/mac80211/pm.o
AR drivers/media/platform/samsung/s5p-mfc/built-in.a
AR drivers/media/platform/sunxi/sun8i-di/built-in.a
CC [M] drivers/gpu/drm/xe/xe_guc.o
AR drivers/media/platform/samsung/built-in.a
AR drivers/media/platform/st/sti/hva/built-in.a
CC drivers/i2c/i2c-core-smbus.o
AR drivers/media/platform/sunxi/sun8i-rotate/built-in.a
AR drivers/media/platform/st/stm32/built-in.a
AR drivers/media/platform/sunxi/built-in.a
CC lib/iomap.o
AR drivers/media/platform/st/built-in.a
CC net/ipv6/calipso.o
CC drivers/input/mouse/logips2pp.o
CC drivers/acpi/acpica/tbxfroot.o
AR drivers/pps/built-in.a
AR drivers/media/platform/ti/am437x/built-in.a
CC drivers/rtc/nvmem.o
AR drivers/media/platform/ti/cal/built-in.a
AR drivers/media/platform/ti/vpe/built-in.a
AR drivers/media/platform/ti/davinci/built-in.a
AR drivers/thermal/broadcom/built-in.a
AR drivers/media/platform/ti/j721e-csi2rx/built-in.a
AR drivers/thermal/samsung/built-in.a
AR drivers/media/platform/ti/omap/built-in.a
CC drivers/thermal/intel/intel_tcc.o
AR drivers/media/platform/ti/omap3isp/built-in.a
AR drivers/media/platform/ti/built-in.a
AR drivers/thermal/st/built-in.a
CC drivers/rtc/dev.o
AR drivers/media/platform/verisilicon/built-in.a
AR drivers/media/platform/via/built-in.a
AR drivers/media/platform/xilinx/built-in.a
AR drivers/media/platform/built-in.a
CC arch/x86/kernel/amd_nb.o
CC drivers/gpu/drm/i915/gt/intel_engine_pm.o
CC drivers/thermal/intel/therm_throt.o
AR drivers/watchdog/built-in.a
CC net/ipv4/inet_fragment.o
AR drivers/power/supply/built-in.a
AR drivers/power/built-in.a
CC drivers/input/input-mt.o
CC fs/nfs/nfs4xdr.o
CC drivers/input/input-poller.o
AR drivers/media/pci/ttpci/built-in.a
CC kernel/smpboot.o
AR drivers/media/pci/b2c2/built-in.a
AR drivers/media/pci/pluto2/built-in.a
CC fs/pipe.o
AR drivers/media/pci/dm1105/built-in.a
AR drivers/media/usb/b2c2/built-in.a
CC drivers/input/mouse/lifebook.o
AR drivers/media/pci/pt1/built-in.a
AR drivers/media/usb/dvb-usb/built-in.a
CC drivers/usb/core/devio.o
CC fs/namei.o
AR drivers/media/usb/dvb-usb-v2/built-in.a
CC drivers/acpi/acpica/utaddress.o
AR drivers/media/pci/pt3/built-in.a
CC drivers/usb/core/notify.o
AR drivers/media/usb/s2255/built-in.a
CC drivers/usb/host/xhci-ring.o
AR drivers/media/pci/mantis/built-in.a
AR drivers/media/pci/ngene/built-in.a
AR drivers/media/usb/siano/built-in.a
AR drivers/media/pci/ddbridge/built-in.a
AR drivers/media/usb/ttusb-budget/built-in.a
AR drivers/media/pci/saa7146/built-in.a
AR drivers/media/usb/ttusb-dec/built-in.a
AR drivers/media/pci/smipcie/built-in.a
AR drivers/media/usb/built-in.a
AR drivers/media/pci/netup_unidvb/built-in.a
CC drivers/usb/core/generic.o
AR drivers/media/pci/intel/ipu3/built-in.a
AR drivers/media/pci/intel/ivsc/built-in.a
AR drivers/media/pci/intel/built-in.a
AR drivers/media/pci/built-in.a
CC drivers/md/md.o
CC drivers/rtc/proc.o
CC drivers/rtc/sysfs.o
AR drivers/media/mmc/siano/built-in.a
CC drivers/cpufreq/cpufreq.o
CC net/ipv4/ping.o
AR drivers/media/mmc/built-in.a
CC drivers/usb/core/quirks.o
AR drivers/media/firewire/built-in.a
AR drivers/media/spi/built-in.a
AR drivers/media/test-drivers/built-in.a
AR drivers/media/built-in.a
AR drivers/hwmon/built-in.a
CC drivers/acpi/acpica/utalloc.o
CC drivers/acpi/acpica/utascii.o
CC lib/iomap_copy.o
CC drivers/cpufreq/freq_table.o
CC drivers/usb/host/xhci-hub.o
CC drivers/input/ff-core.o
CC net/mac80211/rc80211_minstrel_ht.o
CC drivers/rtc/rtc-mc146818-lib.o
CC drivers/ptp/ptp_sysfs.o
CC kernel/ucount.o
CC mm/mmu_notifier.o
CC drivers/input/touchscreen.o
CC lib/devres.o
CC drivers/input/mouse/trackpoint.o
CC arch/x86/kernel/kvm.o
CC drivers/ata/ahci.o
AR drivers/thermal/qcom/built-in.a
CC arch/x86/kernel/kvmclock.o
AR drivers/net/ethernet/chelsio/built-in.a
AR drivers/net/ethernet/cisco/built-in.a
AR drivers/net/ethernet/cortina/built-in.a
AR drivers/net/ethernet/dec/tulip/built-in.a
CC drivers/acpi/acpica/utbuffer.o
AR drivers/net/ethernet/dec/built-in.a
CC drivers/input/ff-memless.o
CC [M] drivers/gpu/drm/xe/xe_guc_ads.o
AR drivers/net/ethernet/dlink/built-in.a
CC drivers/usb/core/devices.o
AR drivers/net/ethernet/engleder/built-in.a
AR drivers/net/ethernet/emulex/built-in.a
CC drivers/rtc/rtc-cmos.o
CC [M] drivers/gpu/drm/xe/xe_guc_ct.o
CC drivers/acpi/ec.o
CC drivers/i2c/i2c-core-acpi.o
CC [M] drivers/thermal/intel/x86_pkg_temp_thermal.o
CC drivers/cpufreq/cpufreq_performance.o
CC drivers/input/sparse-keymap.o
CC net/ipv4/ip_tunnel_core.o
CC kernel/regset.o
CC drivers/usb/core/phy.o
CC lib/check_signature.o
CC net/ipv4/gre_offload.o
CC arch/x86/kernel/paravirt.o
CC drivers/input/vivaldi-fmap.o
CC drivers/gpu/drm/i915/gt/intel_engine_user.o
CC drivers/acpi/acpica/utcksum.o
CC drivers/acpi/acpica/utcopy.o
CC [M] drivers/gpu/drm/xe/xe_guc_db_mgr.o
CC lib/interval_tree.o
CC net/ipv6/ah6.o
CC lib/assoc_array.o
CC fs/fcntl.o
CC net/mac80211/wbrf.o
CC drivers/i2c/i2c-smbus.o
CC fs/ext4/xattr_security.o
CC mm/migrate.o
CC drivers/ptp/ptp_vclock.o
CC drivers/input/mouse/cypress_ps2.o
CC kernel/ksyms_common.o
AR drivers/net/ethernet/ezchip/built-in.a
CC lib/bitrev.o
AR drivers/thermal/tegra/built-in.a
CC net/sunrpc/rpc_pipe.o
AR drivers/thermal/mediatek/built-in.a
CC lib/crc-ccitt.o
CC mm/page_counter.o
CC lib/crc16.o
HOSTCC lib/gen_crc32table
CC net/ipv4/metrics.o
CC drivers/acpi/acpica/utexcep.o
CC drivers/acpi/acpica/utdebug.o
AR drivers/thermal/intel/built-in.a
CC drivers/thermal/thermal_core.o
CC mm/hugetlb_cgroup.o
CC net/sunrpc/sysfs.o
CC drivers/usb/core/port.o
CC fs/ioctl.o
CC net/ipv4/netlink.o
CC mm/early_ioremap.o
AR drivers/rtc/built-in.a
CC kernel/groups.o
CC net/ipv4/nexthop.o
CC net/sunrpc/svc_xprt.o
CC lib/xxhash.o
CC drivers/cpuidle/governors/menu.o
CC arch/x86/kernel/pvclock.o
CC drivers/ata/libahci.o
CC drivers/cpuidle/cpuidle.o
AR drivers/net/ethernet/fujitsu/built-in.a
CC drivers/cpuidle/governors/haltpoll.o
CC net/ipv4/udp_tunnel_stub.o
CC drivers/acpi/acpica/utdecode.o
CC fs/nfs/nfs4state.o
CC kernel/kcmp.o
CC drivers/ptp/ptp_kvm_x86.o
CC kernel/freezer.o
AR drivers/i2c/built-in.a
AR drivers/net/ethernet/fungible/built-in.a
CC drivers/gpu/drm/i915/gt/intel_execlists_submission.o
CC drivers/acpi/dock.o
AR drivers/mmc/built-in.a
CC fs/nfs/nfs4renewd.o
CC drivers/cpufreq/cpufreq_userspace.o
CC net/ipv4/ip_tunnel.o
CC [M] drivers/gpu/drm/xe/xe_guc_debugfs.o
CC drivers/input/mouse/psmouse-smbus.o
AR fs/ext4/built-in.a
CC drivers/cpufreq/cpufreq_ondemand.o
CC net/ipv6/esp6.o
CC kernel/profile.o
CC net/ipv4/sysctl_net_ipv4.o
CC arch/x86/kernel/pcspeaker.o
CC drivers/acpi/acpica/utdelete.o
CC drivers/usb/core/hcd-pci.o
CC drivers/ata/ata_piix.o
CC lib/genalloc.o
CC arch/x86/kernel/check.o
CC fs/readdir.o
CC net/ipv6/sit.o
CC drivers/ptp/ptp_kvm_common.o
CC kernel/stacktrace.o
CC net/ipv4/proc.o
CC drivers/usb/host/xhci-dbg.o
CC drivers/ata/pata_amd.o
CC net/ipv4/fib_rules.o
CC drivers/gpu/drm/drm_mode_config.o
CC arch/x86/kernel/uprobes.o
CC drivers/usb/core/usb-acpi.o
CC drivers/acpi/acpica/uterror.o
CC kernel/dma.o
CC lib/percpu_counter.o
CC drivers/acpi/pci_root.o
CC drivers/gpu/drm/drm_mode_object.o
CC fs/select.o
CC mm/secretmem.o
CC drivers/usb/host/xhci-trace.o
CC [M] drivers/gpu/drm/xe/xe_guc_hwconfig.o
AR drivers/cpuidle/governors/built-in.a
CC drivers/cpuidle/driver.o
AR drivers/input/mouse/built-in.a
CC drivers/input/input-leds.o
CC net/sunrpc/xprtmultipath.o
CC drivers/cpufreq/cpufreq_governor.o
CC drivers/cpuidle/governor.o
CC drivers/thermal/thermal_sysfs.o
CC net/ipv4/ipmr.o
CC drivers/gpu/drm/drm_modes.o
CC fs/nfs/nfs4super.o
CC drivers/acpi/acpica/uteval.o
CC kernel/smp.o
CC fs/nfs/nfs4file.o
CC kernel/uid16.o
CC [M] drivers/gpu/drm/xe/xe_guc_id_mgr.o
CC net/ipv4/ipmr_base.o
CC drivers/gpu/drm/drm_modeset_lock.o
CC drivers/acpi/acpica/utglobal.o
CC net/sunrpc/stats.o
AR drivers/ptp/built-in.a
CC drivers/input/evdev.o
CC drivers/acpi/pci_link.o
CC lib/audit.o
CC fs/dcache.o
CC drivers/gpu/drm/drm_plane.o
CC drivers/cpuidle/sysfs.o
CC arch/x86/kernel/perf_regs.o
AR drivers/usb/core/built-in.a
CC fs/nfs/delegation.o
CC drivers/gpu/drm/drm_prime.o
CC drivers/acpi/acpica/uthex.o
CC drivers/acpi/acpica/utids.o
CC drivers/ata/pata_oldpiix.o
CC drivers/acpi/acpica/utinit.o
CC drivers/acpi/acpica/utlock.o
CC lib/syscall.o
CC drivers/gpu/drm/drm_print.o
CC drivers/ata/pata_sch.o
CC mm/hmm.o
CC [M] drivers/gpu/drm/xe/xe_guc_klv_helpers.o
CC drivers/cpufreq/cpufreq_governor_attr_set.o
CC drivers/thermal/thermal_trip.o
CC drivers/ata/pata_mpiix.o
CC net/ipv4/syncookies.o
CC net/ipv6/addrconf_core.o
CC lib/errname.o
CC drivers/acpi/acpica/utmath.o
CC drivers/cpuidle/poll_state.o
AR drivers/ufs/built-in.a
CC [M] drivers/gpu/drm/xe/xe_guc_log.o
AR drivers/leds/blink/built-in.a
AR drivers/leds/trigger/built-in.a
AR drivers/firmware/arm_ffa/built-in.a
CC [M] drivers/gpu/drm/xe/xe_guc_pc.o
CC drivers/leds/led-core.o
AR drivers/leds/simple/built-in.a
CC drivers/acpi/acpica/utmisc.o
AR drivers/firmware/arm_scmi/built-in.a
AR drivers/crypto/stm32/built-in.a
CC drivers/clocksource/acpi_pm.o
CC drivers/hid/hid-core.o
AR drivers/firmware/broadcom/built-in.a
CC drivers/hid/usbhid/hid-core.o
AR drivers/crypto/xilinx/built-in.a
CC drivers/hid/hid-input.o
AR drivers/firmware/cirrus/built-in.a
AR drivers/crypto/hisilicon/built-in.a
AR drivers/firmware/meson/built-in.a
AR drivers/crypto/intel/keembay/built-in.a
AR drivers/firmware/microchip/built-in.a
AR drivers/crypto/intel/ixp4xx/built-in.a
AR drivers/crypto/intel/built-in.a
AR drivers/crypto/starfive/built-in.a
CC drivers/hid/hid-quirks.o
AR drivers/crypto/built-in.a
AR drivers/firmware/imx/built-in.a
CC [M] drivers/gpu/drm/xe/xe_guc_submit.o
CC drivers/acpi/acpica/utmutex.o
CC drivers/acpi/pci_irq.o
CC drivers/thermal/thermal_helpers.o
CC drivers/firmware/efi/libstub/efi-stub-helper.o
CC drivers/cpufreq/acpi-cpufreq.o
CC drivers/cpuidle/cpuidle-haltpoll.o
CC arch/x86/kernel/tracepoint.o
CC fs/nfs/nfs4idmap.o
CC lib/nlattr.o
CC drivers/acpi/acpica/utnonansi.o
AR drivers/input/built-in.a
CC drivers/thermal/thermal_hwmon.o
CC drivers/ata/ata_generic.o
CC drivers/hid/hid-debug.o
CC drivers/usb/host/xhci-debugfs.o
CC kernel/kallsyms.o
CC drivers/acpi/acpi_apd.o
CC drivers/clocksource/i8253.o
CC mm/memfd.o
CC drivers/gpu/drm/i915/gt/intel_ggtt.o
CC fs/inode.o
CC drivers/usb/host/xhci-pci.o
CC drivers/hid/usbhid/hiddev.o
CC drivers/hid/usbhid/hid-pidff.o
CC mm/ptdump.o
CC net/ipv6/exthdrs_core.o
CC net/ipv4/tunnel4.o
CC fs/attr.o
CC drivers/gpu/drm/drm_property.o
AR net/mac80211/built-in.a
CC drivers/leds/led-class.o
CC kernel/acct.o
CC arch/x86/kernel/itmt.o
CC net/ipv6/ip6_checksum.o
CC drivers/acpi/acpica/utobject.o
AR drivers/cpuidle/built-in.a
CC drivers/acpi/acpica/utosi.o
CC mm/execmem.o
CC fs/nfs/callback.o
CC kernel/vmcore_info.o
CC drivers/thermal/gov_step_wise.o
AR drivers/clocksource/built-in.a
AR drivers/platform/x86/amd/built-in.a
AR drivers/platform/x86/intel/built-in.a
CC drivers/acpi/acpi_platform.o
CC drivers/platform/x86/wmi.o
CC drivers/acpi/acpi_pnp.o
CC net/ipv6/ip6_icmp.o
CC drivers/acpi/power.o
CC drivers/firmware/efi/libstub/gop.o
CC drivers/leds/led-triggers.o
CC drivers/cpufreq/amd-pstate.o
CC drivers/cpufreq/amd-pstate-trace.o
CC drivers/acpi/acpica/utownerid.o
CC drivers/gpu/drm/drm_syncobj.o
CC drivers/acpi/acpica/utpredef.o
CC drivers/firmware/efi/libstub/secureboot.o
AR drivers/ata/built-in.a
CC drivers/gpu/drm/drm_sysfs.o
CC fs/nfs/callback_xdr.o
CC drivers/mailbox/mailbox.o
CC drivers/mailbox/pcc.o
CC arch/x86/kernel/umip.o
CC fs/nfs/callback_proc.o
CC drivers/thermal/gov_user_space.o
CC drivers/cpufreq/intel_pstate.o
AR mm/built-in.a
CC drivers/platform/x86/wmi-bmof.o
CC drivers/platform/x86/eeepc-laptop.o
AR drivers/perf/built-in.a
AR drivers/hwtracing/intel_th/built-in.a
CC kernel/elfcorehdr.o
CC lib/cpu_rmap.o
CC drivers/gpu/drm/drm_trace_points.o
CC drivers/acpi/event.o
CC drivers/gpu/drm/i915/gt/intel_ggtt_fencing.o
AR drivers/android/built-in.a
CC drivers/firmware/efi/efi-bgrt.o
CC drivers/platform/x86/p2sb.o
CC drivers/acpi/acpica/utresdecode.o
CC lib/dynamic_queue_limits.o
CC drivers/md/md-bitmap.o
CC net/ipv4/ipconfig.o
CC net/sunrpc/sysctl.o
CC net/ipv4/netfilter.o
CC fs/bad_inode.o
CC drivers/firmware/efi/efi.o
CC drivers/acpi/acpica/utresrc.o
CC drivers/acpi/acpica/utstate.o
AR drivers/hid/usbhid/built-in.a
CC net/ipv6/output_core.o
CC drivers/acpi/acpica/utstring.o
CC drivers/md/md-autodetect.o
CC drivers/gpu/drm/drm_vblank.o
CC net/ipv4/tcp_cubic.o
AR drivers/thermal/built-in.a
CC lib/glob.o
CC lib/strncpy_from_user.o
AR drivers/leds/built-in.a
CC drivers/acpi/evged.o
CC kernel/crash_reserve.o
CC drivers/firmware/efi/libstub/tpm.o
CC kernel/kexec_core.o
CC drivers/acpi/sysfs.o
AR drivers/nvmem/layouts/built-in.a
CC drivers/nvmem/core.o
CC drivers/hid/hidraw.o
AR drivers/mailbox/built-in.a
CC drivers/hid/hid-generic.o
AR drivers/platform/surface/built-in.a
CC drivers/hid/hid-a4tech.o
CC drivers/firmware/efi/libstub/file.o
AR drivers/usb/host/built-in.a
CC arch/x86/kernel/unwind_frame.o
AR drivers/usb/built-in.a
CC lib/strnlen_user.o
CC net/ipv4/tcp_sigpool.o
CC fs/nfs/nfs4namespace.o
CC fs/nfs/nfs4getroot.o
CC drivers/acpi/acpica/utstrsuppt.o
CC drivers/acpi/acpica/utstrtoul64.o
CC net/ipv6/protocol.o
CC drivers/acpi/acpica/utxface.o
CC net/ipv4/cipso_ipv4.o
CC lib/net_utils.o
CC drivers/hid/hid-apple.o
CC drivers/md/dm.o
CC kernel/crash_core.o
CC [M] drivers/gpu/drm/xe/xe_guc_tlb_invalidation.o
CC drivers/gpu/drm/i915/gt/intel_gt.o
CC drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.o
CC drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.o
CC drivers/gpu/drm/i915/gt/intel_gt_clock_utils.o
AR net/sunrpc/built-in.a
CC fs/nfs/nfs4client.o
CC kernel/kexec.o
CC lib/sg_pool.o
CC drivers/acpi/property.o
AR drivers/net/ethernet/broadcom/built-in.a
AR drivers/net/ethernet/google/built-in.a
AR drivers/net/ethernet/huawei/built-in.a
CC drivers/acpi/acpica/utxfinit.o
CC drivers/firmware/efi/vars.o
CC lib/stackdepot.o
CC drivers/net/ethernet/intel/e1000/e1000_main.o
AR drivers/platform/x86/built-in.a
CC drivers/net/ethernet/intel/e1000e/82571.o
AR drivers/platform/built-in.a
CC kernel/utsname.o
CC drivers/net/ethernet/intel/e1000e/ich8lan.o
CC drivers/net/ethernet/intel/e1000/e1000_hw.o
CC drivers/net/ethernet/intel/e100.o
CC drivers/acpi/debugfs.o
CC drivers/acpi/acpica/utxferror.o
CC drivers/firmware/efi/reboot.o
AR arch/x86/kernel/built-in.a
CC drivers/gpu/drm/i915/gt/intel_gt_debugfs.o
CC drivers/hid/hid-belkin.o
AR arch/x86/built-in.a
CC fs/file.o
CC drivers/firmware/efi/libstub/mem.o
CC drivers/net/ethernet/intel/e1000e/80003es2lan.o
CC drivers/acpi/acpica/utxfmutex.o
CC lib/asn1_decoder.o
CC net/ipv4/xfrm4_policy.o
GEN lib/oid_registry_data.c
CC lib/ucs2_string.o
CC drivers/hid/hid-cherry.o
CC drivers/hid/hid-chicony.o
CC drivers/firmware/efi/memattr.o
CC fs/nfs/nfs4session.o
CC kernel/pid_namespace.o
CC drivers/acpi/acpi_lpat.o
CC [M] drivers/gpu/drm/xe/xe_heci_gsc.o
CC drivers/net/ethernet/intel/e1000e/mac.o
CC drivers/md/dm-table.o
AR drivers/nvmem/built-in.a
CC drivers/firmware/efi/tpm.o
CC drivers/firmware/efi/memmap.o
CC drivers/net/ethernet/intel/e1000/e1000_ethtool.o
CC drivers/gpu/drm/drm_vblank_work.o
CC drivers/net/ethernet/intel/e1000/e1000_param.o
CC net/ipv6/ip6_offload.o
CC drivers/hid/hid-cypress.o
CC drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.o
CC kernel/stop_machine.o
AR drivers/acpi/acpica/built-in.a
CC drivers/net/ethernet/intel/e1000e/manage.o
AR drivers/firmware/psci/built-in.a
CC drivers/acpi/acpi_pcc.o
AR drivers/firmware/qcom/built-in.a
AR drivers/firmware/smccc/built-in.a
CC lib/sbitmap.o
CC drivers/md/dm-target.o
CC drivers/gpu/drm/i915/gt/intel_gt_irq.o
AR drivers/net/ethernet/i825xx/built-in.a
CC lib/group_cpus.o
CC fs/nfs/dns_resolve.o
CC drivers/hid/hid-ezkey.o
CC drivers/firmware/efi/capsule.o
CC drivers/gpu/drm/i915/gt/intel_gt_mcr.o
CC kernel/audit.o
CC drivers/acpi/ac.o
AR drivers/cpufreq/built-in.a
CC drivers/acpi/button.o
CC net/ipv4/xfrm4_state.o
CC fs/nfs/nfs4trace.o
AR drivers/net/ethernet/microsoft/built-in.a
CC drivers/acpi/fan_core.o
CC drivers/firmware/efi/libstub/random.o
CC drivers/md/dm-linear.o
CC fs/filesystems.o
CC drivers/hid/hid-gyration.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm.o
CC drivers/firmware/efi/libstub/randomalloc.o
CC drivers/acpi/fan_attr.o
CC drivers/firmware/efi/esrt.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine.o
CC fs/nfs/nfs4sysctl.o
CC drivers/firmware/efi/runtime-wrappers.o
CC lib/fw_table.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.o
AR drivers/firmware/tegra/built-in.a
CC drivers/gpu/drm/i915/gt/intel_gt_pm_irq.o
CC net/ipv4/xfrm4_input.o
CC drivers/net/ethernet/intel/e1000e/nvm.o
CC drivers/net/ethernet/intel/e1000e/phy.o
CC drivers/md/dm-stripe.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.o
CC drivers/acpi/acpi_video.o
CC drivers/gpu/drm/i915/gt/intel_gt_requests.o
CC fs/namespace.o
CC net/ipv4/xfrm4_output.o
CC drivers/firmware/efi/capsule-loader.o
CC drivers/md/dm-ioctl.o
CC drivers/firmware/efi/earlycon.o
CC drivers/net/ethernet/intel/e1000e/param.o
CC [M] drivers/gpu/drm/xe/xe_hw_fence.o
CC drivers/acpi/video_detect.o
CC drivers/hid/hid-ite.o
CC drivers/acpi/processor_driver.o
CC fs/seq_file.o
CC drivers/hid/hid-kensington.o
CC drivers/md/dm-io.o
CC drivers/hid/hid-lg.o
CC drivers/hid/hid-lgff.o
CC drivers/gpu/drm/i915/gt/intel_gt_sysfs.o
CC drivers/md/dm-kcopyd.o
AR lib/lib.a
CC drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.o
GEN lib/crc32table.h
CC lib/oid_registry.o
CC drivers/firmware/efi/libstub/pci.o
CC net/ipv6/tcpv6_offload.o
CC fs/xattr.o
CC fs/libfs.o
CC fs/fs-writeback.o
AR drivers/net/ethernet/litex/built-in.a
CC drivers/gpu/drm/i915/gt/intel_gtt.o
CC net/ipv4/xfrm4_protocol.o
AR drivers/net/ethernet/marvell/octeon_ep/built-in.a
AR drivers/net/ethernet/marvell/octeon_ep_vf/built-in.a
CC drivers/gpu/drm/i915/gt/intel_llc.o
AR drivers/net/ethernet/marvell/octeontx2/built-in.a
AR drivers/net/ethernet/marvell/prestera/built-in.a
CC drivers/net/ethernet/marvell/sky2.o
CC fs/pnode.o
CC [M] drivers/gpu/drm/xe/xe_huc.o
CC drivers/acpi/processor_thermal.o
CC lib/crc32.o
CC drivers/md/dm-sysfs.o
CC drivers/firmware/efi/libstub/skip_spaces.o
CC drivers/gpu/drm/i915/gt/intel_lrc.o
CC drivers/md/dm-stats.o
CC drivers/md/dm-rq.o
CC drivers/acpi/processor_idle.o
CC [M] drivers/gpu/drm/xe/xe_huc_debugfs.o
CC drivers/hid/hid-lg4ff.o
CC drivers/md/dm-io-rewind.o
CC [M] drivers/gpu/drm/xe/xe_irq.o
CC drivers/hid/hid-lg-g15.o
CC [M] drivers/gpu/drm/xe/xe_lrc.o
CC drivers/hid/hid-microsoft.o
CC drivers/gpu/drm/i915/gt/intel_migrate.o
CC drivers/acpi/processor_throttling.o
CC drivers/hid/hid-monterey.o
CC drivers/gpu/drm/i915/gt/intel_mocs.o
CC net/ipv6/exthdrs_offload.o
CC drivers/net/ethernet/intel/e1000e/ethtool.o
CC drivers/firmware/efi/libstub/lib-cmdline.o
CC drivers/hid/hid-ntrig.o
CC kernel/auditfilter.o
CC drivers/hid/hid-pl.o
CC drivers/firmware/efi/libstub/lib-ctype.o
CC drivers/firmware/efi/libstub/alignedmem.o
AR drivers/firmware/xilinx/built-in.a
CC fs/splice.o
CC [M] drivers/gpu/drm/xe/xe_migrate.o
CC drivers/firmware/efi/libstub/relocate.o
CC [M] drivers/gpu/drm/xe/xe_mmio.o
AR drivers/net/ethernet/mellanox/built-in.a
CC drivers/net/ethernet/intel/e1000e/netdev.o
CC drivers/firmware/dmi_scan.o
CC drivers/firmware/dmi-id.o
CC drivers/acpi/processor_perflib.o
AR lib/built-in.a
CC kernel/auditsc.o
CC drivers/gpu/drm/drm_vma_manager.o
CC drivers/md/dm-builtin.o
AR drivers/net/ethernet/intel/e1000/built-in.a
CC drivers/firmware/efi/libstub/printk.o
CC [M] drivers/gpu/drm/xe/xe_mocs.o
CC drivers/firmware/memmap.o
CC drivers/gpu/drm/i915/gt/intel_ppgtt.o
CC drivers/acpi/container.o
CC drivers/net/ethernet/intel/e1000e/ptp.o
CC fs/sync.o
AR net/ipv4/built-in.a
CC fs/utimes.o
CC kernel/audit_watch.o
CC drivers/md/dm-raid1.o
CC drivers/md/dm-log.o
CC drivers/firmware/efi/libstub/vsprintf.o
CC drivers/hid/hid-petalynx.o
CC drivers/md/dm-region-hash.o
CC drivers/gpu/drm/drm_writeback.o
CC fs/d_path.o
AR drivers/firmware/efi/built-in.a
AR drivers/net/ethernet/micrel/built-in.a
CC fs/stack.o
CC fs/fs_struct.o
CC drivers/gpu/drm/drm_panel.o
CC drivers/hid/hid-redragon.o
CC drivers/gpu/drm/drm_pci.o
CC fs/statfs.o
CC net/ipv6/inet6_hashtables.o
CC drivers/acpi/thermal_lib.o
CC drivers/gpu/drm/i915/gt/intel_rc6.o
CC drivers/hid/hid-samsung.o
CC drivers/acpi/thermal.o
CC drivers/firmware/efi/libstub/x86-stub.o
CC drivers/md/dm-zero.o
CC drivers/gpu/drm/i915/gt/intel_region_lmem.o
CC net/ipv6/mcast_snoop.o
CC drivers/acpi/nhlt.o
CC fs/fs_pin.o
STUBCPY drivers/firmware/efi/libstub/alignedmem.stub.o
STUBCPY drivers/firmware/efi/libstub/efi-stub-helper.stub.o
STUBCPY drivers/firmware/efi/libstub/file.stub.o
CC drivers/hid/hid-sony.o
CC drivers/hid/hid-sunplus.o
CC drivers/hid/hid-topseed.o
STUBCPY drivers/firmware/efi/libstub/gop.stub.o
STUBCPY drivers/firmware/efi/libstub/lib-cmdline.stub.o
STUBCPY drivers/firmware/efi/libstub/lib-ctype.stub.o
STUBCPY drivers/firmware/efi/libstub/mem.stub.o
STUBCPY drivers/firmware/efi/libstub/pci.stub.o
STUBCPY drivers/firmware/efi/libstub/printk.stub.o
STUBCPY drivers/firmware/efi/libstub/random.stub.o
CC drivers/gpu/drm/drm_debugfs.o
AR drivers/net/ethernet/microchip/built-in.a
CC kernel/audit_fsnotify.o
CC kernel/audit_tree.o
AR drivers/net/ethernet/mscc/built-in.a
AR drivers/net/ethernet/myricom/built-in.a
AR drivers/net/ethernet/natsemi/built-in.a
CC kernel/kprobes.o
AR drivers/net/ethernet/neterion/built-in.a
AR drivers/net/ethernet/netronome/built-in.a
CC drivers/gpu/drm/i915/gt/intel_renderstate.o
STUBCPY drivers/firmware/efi/libstub/randomalloc.stub.o
AR drivers/net/ethernet/ni/built-in.a
STUBCPY drivers/firmware/efi/libstub/relocate.stub.o
CC drivers/gpu/drm/i915/gt/intel_reset.o
STUBCPY drivers/firmware/efi/libstub/secureboot.stub.o
CC kernel/seccomp.o
STUBCPY drivers/firmware/efi/libstub/skip_spaces.stub.o
CC drivers/gpu/drm/i915/gt/intel_ring.o
CC drivers/gpu/drm/i915/gt/intel_ring_submission.o
CC kernel/relay.o
CC kernel/utsname_sysctl.o
CC kernel/delayacct.o
CC drivers/gpu/drm/i915/gt/intel_rps.o
CC drivers/gpu/drm/drm_debugfs_crc.o
CC drivers/gpu/drm/drm_panel_orientation_quirks.o
CC kernel/taskstats.o
CC drivers/gpu/drm/drm_buddy.o
STUBCPY drivers/firmware/efi/libstub/tpm.stub.o
STUBCPY drivers/firmware/efi/libstub/vsprintf.stub.o
CC kernel/tsacct.o
CC drivers/gpu/drm/drm_gem_shmem_helper.o
CC drivers/acpi/acpi_memhotplug.o
CC drivers/gpu/drm/i915/gt/intel_sa_media.o
CC kernel/tracepoint.o
CC drivers/gpu/drm/drm_atomic_helper.o
AR fs/nfs/built-in.a
CC kernel/irq_work.o
CC drivers/acpi/ioapic.o
CC fs/nsfs.o
CC drivers/acpi/battery.o
CC drivers/gpu/drm/i915/gt/intel_sseu.o
CC fs/fs_types.o
CC drivers/acpi/bgrt.o
CC fs/fs_context.o
CC kernel/static_call.o
CC kernel/padata.o
STUBCPY drivers/firmware/efi/libstub/x86-stub.stub.o
AR drivers/firmware/efi/libstub/lib.a
CC fs/fs_parser.o
AR drivers/firmware/built-in.a
CC [M] drivers/gpu/drm/xe/xe_module.o
AR drivers/md/built-in.a
CC [M] drivers/gpu/drm/xe/xe_oa.o
CC drivers/gpu/drm/drm_atomic_state_helper.o
CC [M] drivers/gpu/drm/xe/xe_observation.o
CC drivers/gpu/drm/i915/gt/intel_sseu_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_pat.o
CC [M] drivers/gpu/drm/xe/xe_pci.o
CC kernel/jump_label.o
CC kernel/context_tracking.o
CC drivers/acpi/spcr.o
CC kernel/iomem.o
CC kernel/rseq.o
CC drivers/gpu/drm/i915/gt/intel_timeline.o
CC drivers/gpu/drm/drm_bridge_connector.o
CC drivers/gpu/drm/i915/gt/intel_tlb.o
CC drivers/gpu/drm/i915/gt/intel_wopcm.o
CC fs/fsopen.o
CC fs/init.o
CC fs/kernel_read_file.o
AR net/ipv6/built-in.a
AR drivers/hid/built-in.a
AR net/built-in.a
CC drivers/gpu/drm/drm_crtc_helper.o
CC drivers/gpu/drm/drm_damage_helper.o
AR drivers/net/ethernet/marvell/built-in.a
CC [M] drivers/gpu/drm/xe/xe_pcode.o
CC drivers/net/ethernet/nvidia/forcedeth.o
AR drivers/net/ethernet/oki-semi/built-in.a
CC [M] drivers/gpu/drm/xe/xe_pm.o
CC [M] drivers/gpu/drm/xe/xe_preempt_fence.o
CC drivers/gpu/drm/drm_encoder_slave.o
CC [M] drivers/gpu/drm/xe/xe_pt.o
AR drivers/net/ethernet/packetengines/built-in.a
CC fs/mnt_idmapping.o
CC drivers/gpu/drm/i915/gt/intel_workarounds.o
CC drivers/gpu/drm/i915/gt/shmem_utils.o
CC fs/remap_range.o
CC drivers/gpu/drm/i915/gt/sysfs_engines.o
CC drivers/gpu/drm/drm_flip_work.o
CC drivers/gpu/drm/i915/gt/intel_ggtt_gmch.o
CC drivers/gpu/drm/drm_format_helper.o
CC drivers/gpu/drm/drm_gem_atomic_helper.o
CC drivers/gpu/drm/i915/gt/gen6_renderstate.o
CC fs/pidfs.o
CC fs/buffer.o
CC fs/mpage.o
CC drivers/gpu/drm/i915/gt/gen7_renderstate.o
CC drivers/gpu/drm/drm_gem_framebuffer_helper.o
CC drivers/gpu/drm/i915/gt/gen8_renderstate.o
AR drivers/acpi/built-in.a
CC drivers/gpu/drm/i915/gt/gen9_renderstate.o
CC drivers/gpu/drm/i915/gem/i915_gem_busy.o
CC drivers/gpu/drm/i915/gem/i915_gem_clflush.o
CC drivers/gpu/drm/drm_kms_helper_common.o
CC fs/proc_namespace.o
CC [M] drivers/gpu/drm/xe/xe_pt_walk.o
CC drivers/gpu/drm/i915/gem/i915_gem_context.o
CC [M] drivers/gpu/drm/xe/xe_query.o
CC fs/direct-io.o
CC [M] drivers/gpu/drm/xe/xe_range_fence.o
CC fs/eventpoll.o
CC drivers/gpu/drm/i915/gem/i915_gem_create.o
CC drivers/gpu/drm/drm_modeset_helper.o
AR kernel/built-in.a
CC drivers/gpu/drm/drm_plane_helper.o
CC drivers/gpu/drm/drm_probe_helper.o
CC drivers/gpu/drm/i915/gem/i915_gem_dmabuf.o
CC fs/anon_inodes.o
CC drivers/gpu/drm/i915/gem/i915_gem_domain.o
CC drivers/gpu/drm/i915/gem/i915_gem_execbuffer.o
CC [M] drivers/gpu/drm/xe/xe_reg_sr.o
CC drivers/gpu/drm/drm_rect.o
CC [M] drivers/gpu/drm/xe/xe_reg_whitelist.o
AR drivers/net/ethernet/qlogic/built-in.a
CC drivers/gpu/drm/drm_self_refresh_helper.o
AR drivers/net/ethernet/qualcomm/emac/built-in.a
CC drivers/gpu/drm/drm_simple_kms_helper.o
AR drivers/net/ethernet/qualcomm/built-in.a
CC drivers/gpu/drm/i915/gem/i915_gem_internal.o
CC fs/signalfd.o
CC drivers/net/ethernet/realtek/8139too.o
AR drivers/net/ethernet/renesas/built-in.a
CC fs/timerfd.o
CC drivers/net/ethernet/realtek/r8169_main.o
CC drivers/gpu/drm/bridge/panel.o
CC fs/eventfd.o
CC drivers/gpu/drm/drm_mipi_dsi.o
CC [M] drivers/gpu/drm/xe/xe_rtp.o
CC fs/aio.o
CC fs/locks.o
CC [M] drivers/gpu/drm/xe/xe_ring_ops.o
CC [M] drivers/gpu/drm/xe/xe_sa.o
CC drivers/gpu/drm/i915/gem/i915_gem_lmem.o
CC drivers/gpu/drm/i915/gem/i915_gem_mman.o
CC drivers/gpu/drm/i915/gem/i915_gem_object.o
CC [M] drivers/gpu/drm/xe/xe_sched_job.o
CC drivers/gpu/drm/i915/gem/i915_gem_pages.o
CC [M] drivers/gpu/drm/drm_exec.o
CC [M] drivers/gpu/drm/drm_gpuvm.o
CC [M] drivers/gpu/drm/drm_suballoc.o
CC fs/binfmt_misc.o
CC [M] drivers/gpu/drm/xe/xe_step.o
CC fs/binfmt_script.o
CC fs/binfmt_elf.o
CC [M] drivers/gpu/drm/drm_gem_ttm_helper.o
CC drivers/gpu/drm/i915/gem/i915_gem_phys.o
CC fs/mbcache.o
CC drivers/net/ethernet/realtek/r8169_firmware.o
CC drivers/net/ethernet/realtek/r8169_phy_config.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
AR drivers/net/ethernet/intel/e1000e/built-in.a
AR drivers/net/ethernet/intel/built-in.a
CC [M] drivers/gpu/drm/xe/xe_trace.o
CC drivers/gpu/drm/i915/gem/i915_gem_pm.o
AR drivers/net/ethernet/rdc/built-in.a
AR drivers/net/ethernet/rocker/built-in.a
CC fs/posix_acl.o
AR drivers/net/ethernet/samsung/built-in.a
CC drivers/gpu/drm/i915/gem/i915_gem_region.o
AR drivers/net/ethernet/seeq/built-in.a
AR drivers/net/ethernet/silan/built-in.a
CC fs/coredump.o
CC drivers/gpu/drm/i915/gem/i915_gem_shmem.o
AR drivers/net/ethernet/sis/built-in.a
CC fs/drop_caches.o
CC fs/sysctls.o
CC drivers/gpu/drm/i915/gem/i915_gem_shrinker.o
CC fs/fhandle.o
CC drivers/gpu/drm/i915/gem/i915_gem_stolen.o
CC [M] drivers/gpu/drm/xe/xe_trace_bo.o
CC [M] drivers/gpu/drm/xe/xe_trace_guc.o
CC [M] drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
CC drivers/gpu/drm/i915/gem/i915_gem_throttle.o
CC drivers/gpu/drm/i915/gem/i915_gem_tiling.o
LD [M] drivers/gpu/drm/drm_suballoc_helper.o
CC [M] drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm.o
AR drivers/net/ethernet/sfc/built-in.a
CC [M] drivers/gpu/drm/xe/xe_ttm_vram_mgr.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm_move.o
CC [M] drivers/gpu/drm/xe/xe_tuning.o
AR drivers/net/ethernet/smsc/built-in.a
AR drivers/net/ethernet/socionext/built-in.a
CC [M] drivers/gpu/drm/xe/xe_uc.o
AR drivers/net/ethernet/stmicro/built-in.a
AR drivers/net/ethernet/sun/built-in.a
AR drivers/net/ethernet/tehuti/built-in.a
CC drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.o
AR drivers/net/ethernet/ti/built-in.a
AR drivers/net/ethernet/vertexcom/built-in.a
AR drivers/net/ethernet/via/built-in.a
AR drivers/net/ethernet/wangxun/built-in.a
CC [M] drivers/gpu/drm/xe/xe_uc_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_uc_fw.o
AR drivers/net/ethernet/wiznet/built-in.a
AR drivers/net/ethernet/xilinx/built-in.a
AR drivers/net/ethernet/xircom/built-in.a
AR drivers/net/ethernet/synopsys/built-in.a
AR drivers/net/ethernet/pensando/built-in.a
CC [M] drivers/gpu/drm/xe/xe_vm.o
LD [M] drivers/gpu/drm/drm_ttm_helper.o
CC [M] drivers/gpu/drm/xe/xe_vram.o
CC drivers/gpu/drm/i915/gem/i915_gem_userptr.o
CC [M] drivers/gpu/drm/xe/xe_vram_freq.o
CC [M] drivers/gpu/drm/xe/xe_wait_user_fence.o
CC [M] drivers/gpu/drm/xe/xe_wa.o
CC [M] drivers/gpu/drm/xe/xe_wopcm.o
CC [M] drivers/gpu/drm/xe/xe_hmm.o
CC [M] drivers/gpu/drm/xe/xe_hwmon.o
CC [M] drivers/gpu/drm/xe/xe_gt_sriov_vf.o
CC drivers/gpu/drm/i915/gem/i915_gem_wait.o
CC [M] drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.o
CC drivers/gpu/drm/i915/gem/i915_gemfs.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 drivers/gpu/drm/i915/i915_active.o
CC drivers/gpu/drm/i915/i915_cmd_parser.o
CC drivers/gpu/drm/i915/i915_deps.o
CC drivers/gpu/drm/i915/i915_gem.o
CC drivers/gpu/drm/i915/i915_gem_evict.o
CC drivers/gpu/drm/i915/i915_gem_gtt.o
CC [M] drivers/gpu/drm/xe/display/ext/i915_irq.o
CC [M] drivers/gpu/drm/xe/display/ext/i915_utils.o
CC drivers/gpu/drm/i915/i915_gem_ww.o
CC [M] drivers/gpu/drm/xe/display/intel_fb_bo.o
CC [M] drivers/gpu/drm/xe/display/intel_fbdev_fb.o
CC [M] drivers/gpu/drm/xe/display/xe_display.o
CC [M] drivers/gpu/drm/xe/display/xe_display_misc.o
AR drivers/net/ethernet/nvidia/built-in.a
CC [M] drivers/gpu/drm/xe/display/xe_display_rps.o
CC drivers/gpu/drm/i915/i915_query.o
CC [M] drivers/gpu/drm/xe/display/xe_display_wa.o
CC drivers/gpu/drm/i915/i915_request.o
CC [M] drivers/gpu/drm/xe/display/xe_dsb_buffer.o
CC drivers/gpu/drm/i915/i915_scheduler.o
CC [M] drivers/gpu/drm/xe/display/xe_fb_pin.o
CC [M] drivers/gpu/drm/xe/display/xe_hdcp_gsc.o
CC drivers/gpu/drm/i915/i915_trace_points.o
CC drivers/gpu/drm/i915/i915_ttm_buddy_manager.o
CC [M] drivers/gpu/drm/xe/display/xe_plane_initial.o
CC [M] drivers/gpu/drm/xe/display/xe_tdf.o
CC drivers/gpu/drm/i915/i915_vma.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 drivers/gpu/drm/i915/i915_vma_resource.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_alpm.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.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 drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_audio.o
AR fs/built-in.a
CC [M] drivers/gpu/drm/xe/i915-display/intel_backlight.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_bios.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_bw.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_ads.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 drivers/gpu/drm/i915/gt/uc/intel_guc_capture.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 drivers/gpu/drm/i915/gt/uc/intel_guc_ct.o
AR drivers/net/ethernet/realtek/built-in.a
AR drivers/net/ethernet/built-in.a
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 drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_device.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_fw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_driver.o
AR drivers/net/built-in.a
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_irq.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_hwconfig.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_params.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_log.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power_map.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.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 drivers/gpu/drm/i915/gt/uc/intel_guc_rc.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dkl_phy.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_submission.o
CC drivers/gpu/drm/i915/gt/uc/intel_huc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dmc.o
CC drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.o
CC drivers/gpu/drm/i915/gt/uc/intel_huc_fw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp.o
CC drivers/gpu/drm/i915/gt/uc/intel_uc.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 drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.o
CC drivers/gpu/drm/i915/gt/uc/intel_uc_fw.o
CC drivers/gpu/drm/i915/gt/intel_gsc.o
CC drivers/gpu/drm/i915/i915_hwmon.o
CC [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 drivers/gpu/drm/i915/display/hsw_ips.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 drivers/gpu/drm/i915/display/i9xx_plane.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi_vbt.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_encoder.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fb.o
CC drivers/gpu/drm/i915/display/i9xx_wm.o
CC drivers/gpu/drm/i915/display/intel_alpm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fbc.o
CC drivers/gpu/drm/i915/display/intel_atomic.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fdi.o
CC drivers/gpu/drm/i915/display/intel_atomic_plane.o
CC drivers/gpu/drm/i915/display/intel_audio.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fifo_underrun.o
CC drivers/gpu/drm/i915/display/intel_bios.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_frontbuffer.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_global_state.o
CC drivers/gpu/drm/i915/display/intel_bw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_gmbus.o
CC drivers/gpu/drm/i915/display/intel_cdclk.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdcp.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdcp_gsc_message.o
CC drivers/gpu/drm/i915/display/intel_color.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdmi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hotplug.o
CC drivers/gpu/drm/i915/display/intel_combo_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hotplug_irq.o
CC drivers/gpu/drm/i915/display/intel_connector.o
CC drivers/gpu/drm/i915/display/intel_crtc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hti.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_link_bw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_lspcon.o
CC drivers/gpu/drm/i915/display/intel_crtc_state_dump.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_lock.o
CC drivers/gpu/drm/i915/display/intel_cursor.o
CC drivers/gpu/drm/i915/display/intel_display.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_setup.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_verify.o
CC drivers/gpu/drm/i915/display/intel_display_driver.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_panel.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pmdemand.o
CC drivers/gpu/drm/i915/display/intel_display_irq.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 drivers/gpu/drm/i915/display/intel_display_params.o
CC drivers/gpu/drm/i915/display/intel_display_power.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_quirks.o
CC drivers/gpu/drm/i915/display/intel_display_power_map.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_snps_phy.o
CC drivers/gpu/drm/i915/display/intel_display_power_well.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_tc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vblank.o
CC drivers/gpu/drm/i915/display/intel_display_reset.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 drivers/gpu/drm/i915/display/intel_display_rps.o
CC drivers/gpu/drm/i915/display/intel_display_wa.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dmc_wl.o
CC drivers/gpu/drm/i915/display/intel_dmc.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 drivers/gpu/drm/i915/display/intel_dmc_wl.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_display_debugfs.o
CC drivers/gpu/drm/i915/display/intel_dpio_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_debugfs_params.o
CC drivers/gpu/drm/i915/display/intel_dpll.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pipe_crc.o
CC drivers/gpu/drm/i915/display/intel_dpll_mgr.o
CC drivers/gpu/drm/i915/display/intel_dpt.o
CC drivers/gpu/drm/i915/display/intel_dpt_common.o
CC [M] drivers/gpu/drm/xe/xe_device.o
CC drivers/gpu/drm/i915/display/intel_drrs.o
CC [M] drivers/gpu/drm/xe/xe_ggtt.o
CC drivers/gpu/drm/i915/display/intel_dsb.o
CC drivers/gpu/drm/i915/display/intel_dsb_buffer.o
CC drivers/gpu/drm/i915/display/intel_fb.o
CC drivers/gpu/drm/i915/display/intel_fb_bo.o
CC drivers/gpu/drm/i915/display/intel_fb_pin.o
CC drivers/gpu/drm/i915/display/intel_fbc.o
CC drivers/gpu/drm/i915/display/intel_fdi.o
CC drivers/gpu/drm/i915/display/intel_fifo_underrun.o
CC drivers/gpu/drm/i915/display/intel_frontbuffer.o
CC drivers/gpu/drm/i915/display/intel_global_state.o
CC drivers/gpu/drm/i915/display/intel_hdcp.o
CC drivers/gpu/drm/i915/display/intel_hdcp_gsc.o
CC drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.o
CC drivers/gpu/drm/i915/display/intel_hotplug.o
CC drivers/gpu/drm/i915/display/intel_hotplug_irq.o
CC drivers/gpu/drm/i915/display/intel_hti.o
CC drivers/gpu/drm/i915/display/intel_link_bw.o
CC drivers/gpu/drm/i915/display/intel_load_detect.o
CC drivers/gpu/drm/i915/display/intel_lpe_audio.o
CC drivers/gpu/drm/i915/display/intel_modeset_lock.o
CC drivers/gpu/drm/i915/display/intel_modeset_setup.o
CC drivers/gpu/drm/i915/display/intel_modeset_verify.o
CC drivers/gpu/drm/i915/display/intel_overlay.o
CC drivers/gpu/drm/i915/display/intel_pch_display.o
CC drivers/gpu/drm/i915/display/intel_pch_refclk.o
CC drivers/gpu/drm/i915/display/intel_plane_initial.o
CC drivers/gpu/drm/i915/display/intel_pmdemand.o
CC drivers/gpu/drm/i915/display/intel_psr.o
CC drivers/gpu/drm/i915/display/intel_quirks.o
CC drivers/gpu/drm/i915/display/intel_sprite.o
CC drivers/gpu/drm/i915/display/intel_sprite_uapi.o
CC drivers/gpu/drm/i915/display/intel_tc.o
CC drivers/gpu/drm/i915/display/intel_vblank.o
CC drivers/gpu/drm/i915/display/intel_vga.o
CC drivers/gpu/drm/i915/display/intel_wm.o
CC drivers/gpu/drm/i915/display/skl_scaler.o
CC drivers/gpu/drm/i915/display/skl_universal_plane.o
CC drivers/gpu/drm/i915/display/skl_watermark.o
CC drivers/gpu/drm/i915/display/intel_acpi.o
CC drivers/gpu/drm/i915/display/intel_opregion.o
CC drivers/gpu/drm/i915/display/intel_display_debugfs.o
CC drivers/gpu/drm/i915/display/intel_display_debugfs_params.o
CC drivers/gpu/drm/i915/display/intel_pipe_crc.o
CC drivers/gpu/drm/i915/display/dvo_ch7017.o
CC drivers/gpu/drm/i915/display/dvo_ch7xxx.o
CC drivers/gpu/drm/i915/display/dvo_ivch.o
CC drivers/gpu/drm/i915/display/dvo_ns2501.o
CC drivers/gpu/drm/i915/display/dvo_sil164.o
CC drivers/gpu/drm/i915/display/dvo_tfp410.o
CC drivers/gpu/drm/i915/display/g4x_dp.o
CC drivers/gpu/drm/i915/display/g4x_hdmi.o
CC drivers/gpu/drm/i915/display/icl_dsi.o
CC drivers/gpu/drm/i915/display/intel_backlight.o
CC drivers/gpu/drm/i915/display/intel_crt.o
CC drivers/gpu/drm/i915/display/intel_cx0_phy.o
CC drivers/gpu/drm/i915/display/intel_ddi.o
CC drivers/gpu/drm/i915/display/intel_ddi_buf_trans.o
CC drivers/gpu/drm/i915/display/intel_display_device.o
CC drivers/gpu/drm/i915/display/intel_display_trace.o
CC drivers/gpu/drm/i915/display/intel_dkl_phy.o
CC drivers/gpu/drm/i915/display/intel_dp.o
CC drivers/gpu/drm/i915/display/intel_dp_aux.o
CC drivers/gpu/drm/i915/display/intel_dp_aux_backlight.o
CC drivers/gpu/drm/i915/display/intel_dp_hdcp.o
CC drivers/gpu/drm/i915/display/intel_dp_link_training.o
CC drivers/gpu/drm/i915/display/intel_dp_mst.o
CC drivers/gpu/drm/i915/display/intel_dsi.o
CC drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.o
CC drivers/gpu/drm/i915/display/intel_dsi_vbt.o
CC drivers/gpu/drm/i915/display/intel_dvo.o
CC drivers/gpu/drm/i915/display/intel_encoder.o
CC drivers/gpu/drm/i915/display/intel_gmbus.o
LD [M] drivers/gpu/drm/xe/xe.o
CC drivers/gpu/drm/i915/display/intel_hdmi.o
CC drivers/gpu/drm/i915/display/intel_lspcon.o
CC drivers/gpu/drm/i915/display/intel_lvds.o
CC drivers/gpu/drm/i915/display/intel_panel.o
CC drivers/gpu/drm/i915/display/intel_pps.o
CC drivers/gpu/drm/i915/display/intel_qp_tables.o
CC drivers/gpu/drm/i915/display/intel_sdvo.o
CC drivers/gpu/drm/i915/display/intel_snps_phy.o
CC drivers/gpu/drm/i915/display/intel_tv.o
CC drivers/gpu/drm/i915/display/intel_vdsc.o
CC drivers/gpu/drm/i915/display/intel_vrr.o
CC drivers/gpu/drm/i915/display/vlv_dsi.o
CC drivers/gpu/drm/i915/display/vlv_dsi_pll.o
CC drivers/gpu/drm/i915/i915_perf.o
CC drivers/gpu/drm/i915/pxp/intel_pxp.o
CC drivers/gpu/drm/i915/pxp/intel_pxp_huc.o
CC drivers/gpu/drm/i915/pxp/intel_pxp_tee.o
CC drivers/gpu/drm/i915/i915_gpu_error.o
CC drivers/gpu/drm/i915/i915_vgpu.o
AR drivers/gpu/drm/i915/built-in.a
AR drivers/gpu/drm/built-in.a
AR drivers/gpu/built-in.a
AR drivers/built-in.a
AR built-in.a
AR vmlinux.a
LD vmlinux.o
OBJCOPY modules.builtin.modinfo
GEN modules.builtin
MODPOST Module.symvers
CC .vmlinux.export.o
CC [M] fs/efivarfs/efivarfs.mod.o
CC [M] drivers/gpu/drm/drm_exec.mod.o
CC [M] drivers/gpu/drm/drm_gpuvm.mod.o
CC [M] drivers/gpu/drm/drm_suballoc_helper.mod.o
CC [M] drivers/gpu/drm/drm_ttm_helper.mod.o
CC [M] drivers/gpu/drm/scheduler/gpu-sched.mod.o
CC [M] drivers/gpu/drm/xe/xe.mod.o
CC [M] drivers/thermal/intel/x86_pkg_temp_thermal.mod.o
CC [M] sound/core/snd-hwdep.mod.o
CC [M] sound/core/snd-pcm.mod.o
CC [M] sound/pci/hda/snd-hda-codec.mod.o
CC [M] sound/pci/hda/snd-hda-codec-hdmi.mod.o
CC [M] sound/pci/hda/snd-hda-intel.mod.o
CC [M] sound/hda/snd-hda-core.mod.o
CC [M] sound/hda/snd-intel-dspcfg.mod.o
CC [M] sound/hda/snd-intel-sdw-acpi.mod.o
CC [M] net/netfilter/nf_log_syslog.mod.o
CC [M] net/netfilter/xt_mark.mod.o
CC [M] net/netfilter/xt_nat.mod.o
CC [M] net/netfilter/xt_LOG.mod.o
CC [M] net/netfilter/xt_MASQUERADE.mod.o
CC [M] net/netfilter/xt_addrtype.mod.o
CC [M] net/ipv4/netfilter/iptable_nat.mod.o
LD [M] fs/efivarfs/efivarfs.ko
LD [M] drivers/gpu/drm/scheduler/gpu-sched.ko
LD [M] sound/core/snd-hwdep.ko
LD [M] drivers/gpu/drm/drm_gpuvm.ko
LD [M] sound/hda/snd-intel-sdw-acpi.ko
LD [M] net/netfilter/xt_addrtype.ko
LD [M] sound/pci/hda/snd-hda-codec.ko
LD [M] net/netfilter/xt_LOG.ko
LD [M] drivers/gpu/drm/xe/xe.ko
LD [M] sound/hda/snd-hda-core.ko
LD [M] net/netfilter/xt_nat.ko
LD [M] sound/pci/hda/snd-hda-codec-hdmi.ko
LD [M] net/ipv4/netfilter/iptable_nat.ko
LD [M] sound/core/snd-pcm.ko
LD [M] drivers/gpu/drm/drm_suballoc_helper.ko
LD [M] net/netfilter/xt_mark.ko
LD [M] net/netfilter/nf_log_syslog.ko
LD [M] drivers/gpu/drm/drm_exec.ko
LD [M] drivers/gpu/drm/drm_ttm_helper.ko
LD [M] net/netfilter/xt_MASQUERADE.ko
LD [M] sound/pci/hda/snd-hda-intel.ko
LD [M] drivers/thermal/intel/x86_pkg_temp_thermal.ko
LD [M] sound/hda/snd-intel-dspcfg.ko
UPD include/generated/utsversion.h
CC init/version-timestamp.o
LD .tmp_vmlinux.kallsyms1
NM .tmp_vmlinux.kallsyms1.syms
KSYMS .tmp_vmlinux.kallsyms1.S
AS .tmp_vmlinux.kallsyms1.o
LD .tmp_vmlinux.kallsyms2
NM .tmp_vmlinux.kallsyms2.syms
KSYMS .tmp_vmlinux.kallsyms2.S
AS .tmp_vmlinux.kallsyms2.o
LD vmlinux
NM System.map
SORTTAB vmlinux
RELOCS arch/x86/boot/compressed/vmlinux.relocs
RSTRIP vmlinux
CC arch/x86/boot/a20.o
AS arch/x86/boot/bioscall.o
CC arch/x86/boot/cmdline.o
AS arch/x86/boot/copy.o
HOSTCC arch/x86/boot/mkcpustr
CC arch/x86/boot/cpuflags.o
CC arch/x86/boot/cpucheck.o
CC arch/x86/boot/early_serial_console.o
CC arch/x86/boot/edd.o
CC arch/x86/boot/main.o
CC arch/x86/boot/memory.o
CC arch/x86/boot/pm.o
AS arch/x86/boot/pmjump.o
CC arch/x86/boot/printf.o
CC arch/x86/boot/regs.o
CC arch/x86/boot/string.o
CC arch/x86/boot/tty.o
CC arch/x86/boot/video.o
CC arch/x86/boot/video-mode.o
CC arch/x86/boot/version.o
CC arch/x86/boot/video-vga.o
CC arch/x86/boot/video-vesa.o
CC arch/x86/boot/video-bios.o
HOSTCC arch/x86/boot/tools/build
CPUSTR arch/x86/boot/cpustr.h
CC arch/x86/boot/cpu.o
LDS arch/x86/boot/compressed/vmlinux.lds
AS arch/x86/boot/compressed/kernel_info.o
AS arch/x86/boot/compressed/head_32.o
VOFFSET arch/x86/boot/compressed/../voffset.h
CC arch/x86/boot/compressed/string.o
CC arch/x86/boot/compressed/cmdline.o
CC arch/x86/boot/compressed/error.o
OBJCOPY arch/x86/boot/compressed/vmlinux.bin
HOSTCC arch/x86/boot/compressed/mkpiggy
CC arch/x86/boot/compressed/cpuflags.o
CC arch/x86/boot/compressed/early_serial_console.o
CC arch/x86/boot/compressed/kaslr.o
CC arch/x86/boot/compressed/acpi.o
CC arch/x86/boot/compressed/efi.o
GZIP arch/x86/boot/compressed/vmlinux.bin.gz
CC arch/x86/boot/compressed/misc.o
MKPIGGY arch/x86/boot/compressed/piggy.S
AS arch/x86/boot/compressed/piggy.o
LD arch/x86/boot/compressed/vmlinux
ZOFFSET arch/x86/boot/zoffset.h
OBJCOPY arch/x86/boot/vmlinux.bin
AS arch/x86/boot/header.o
LD arch/x86/boot/setup.elf
OBJCOPY arch/x86/boot/setup.bin
BUILD arch/x86/boot/bzImage
Kernel: arch/x86/boot/bzImage is ready (#1)
run-parts: executing /workspace/ci/hooks/20-kernel-doc
+ SRC_DIR=/workspace/kernel
+ cd /workspace/kernel
+ find drivers/gpu/drm/xe/ -name '*.[ch]' -not -path 'drivers/gpu/drm/xe/display/*'
+ xargs ./scripts/kernel-doc -Werror -none include/uapi/drm/xe_drm.h
All hooks done
^ permalink raw reply [flat|nested] 32+ messages in thread
* ✓ CI.checksparse: success for Proper GT TLB invalidation layering and new coalescing feature. (rev2)
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (15 preceding siblings ...)
2024-07-08 4:24 ` ✓ CI.Hooks: " Patchwork
@ 2024-07-08 4:25 ` Patchwork
2024-07-08 4:51 ` ✓ CI.BAT: " Patchwork
` (2 subsequent siblings)
19 siblings, 0 replies; 32+ messages in thread
From: Patchwork @ 2024-07-08 4:25 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
== Series Details ==
Series: Proper GT TLB invalidation layering and new coalescing feature. (rev2)
URL : https://patchwork.freedesktop.org/series/135809/
State : success
== Summary ==
+ trap cleanup EXIT
+ KERNEL=/kernel
+ MT=/root/linux/maintainer-tools
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools /root/linux/maintainer-tools
Cloning into '/root/linux/maintainer-tools'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ make -C /root/linux/maintainer-tools
make: Entering directory '/root/linux/maintainer-tools'
cc -O2 -g -Wextra -o remap-log remap-log.c
make: Leaving directory '/root/linux/maintainer-tools'
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ /root/linux/maintainer-tools/dim sparse --fast 70f1d41b827fa9d1275748e655912f991635f595
Sparse version: 0.6.1 (Ubuntu: 0.6.1-2build1)
Fast mode used, each commit won't be checked separately.
Okay!
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 32+ messages in thread
* ✓ CI.BAT: success for Proper GT TLB invalidation layering and new coalescing feature. (rev2)
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (16 preceding siblings ...)
2024-07-08 4:25 ` ✓ CI.checksparse: " Patchwork
@ 2024-07-08 4:51 ` Patchwork
2024-07-08 5:46 ` ✗ CI.FULL: failure " Patchwork
2024-07-09 9:57 ` [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Auld
19 siblings, 0 replies; 32+ messages in thread
From: Patchwork @ 2024-07-08 4:51 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 2396 bytes --]
== Series Details ==
Series: Proper GT TLB invalidation layering and new coalescing feature. (rev2)
URL : https://patchwork.freedesktop.org/series/135809/
State : success
== Summary ==
CI Bug Log - changes from xe-1569-70f1d41b827fa9d1275748e655912f991635f595_BAT -> xe-pw-135809v2_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (5 -> 5)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-135809v2_BAT:
### IGT changes ###
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* igt@core_hotunplug@unbind-rebind:
- {bat-lnl-1}: [PASS][1] -> [ABORT][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/bat-lnl-1/igt@core_hotunplug@unbind-rebind.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/bat-lnl-1/igt@core_hotunplug@unbind-rebind.html
Known issues
------------
Here are the changes found in xe-pw-135809v2_BAT that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@xe_exec_fault_mode@twice-rebind-prefetch:
- bat-pvc-2: [PASS][3] -> [DMESG-FAIL][4] ([Intel XE#1069]) +3 other tests dmesg-fail
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/bat-pvc-2/igt@xe_exec_fault_mode@twice-rebind-prefetch.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/bat-pvc-2/igt@xe_exec_fault_mode@twice-rebind-prefetch.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[Intel XE#1069]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1069
Build changes
-------------
* Linux: xe-1569-70f1d41b827fa9d1275748e655912f991635f595 -> xe-pw-135809v2
IGT_7918: aab1a4b6a9b7855fe6e38ea3b3987a1399ee5816 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-1569-70f1d41b827fa9d1275748e655912f991635f595: 70f1d41b827fa9d1275748e655912f991635f595
xe-pw-135809v2: 135809v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/index.html
[-- Attachment #2: Type: text/html, Size: 3002 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* ✗ CI.FULL: failure for Proper GT TLB invalidation layering and new coalescing feature. (rev2)
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (17 preceding siblings ...)
2024-07-08 4:51 ` ✓ CI.BAT: " Patchwork
@ 2024-07-08 5:46 ` Patchwork
2024-07-09 9:57 ` [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Auld
19 siblings, 0 replies; 32+ messages in thread
From: Patchwork @ 2024-07-08 5:46 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 25500 bytes --]
== Series Details ==
Series: Proper GT TLB invalidation layering and new coalescing feature. (rev2)
URL : https://patchwork.freedesktop.org/series/135809/
State : failure
== Summary ==
CI Bug Log - changes from xe-1569-70f1d41b827fa9d1275748e655912f991635f595_full -> xe-pw-135809v2_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-135809v2_full absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-135809v2_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (3 -> 3)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-135809v2_full:
### IGT changes ###
#### Possible regressions ####
* igt@xe_exec_basic@many-execqueues-many-vm-null:
- shard-adlp: [PASS][1] -> [TIMEOUT][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-8/igt@xe_exec_basic@many-execqueues-many-vm-null.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-9/igt@xe_exec_basic@many-execqueues-many-vm-null.html
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* {igt@kms_bw@connected-linear-tiling-4-displays-1920x1080p}:
- {shard-lnl}: NOTRUN -> [INCOMPLETE][3]
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-lnl-6/igt@kms_bw@connected-linear-tiling-4-displays-1920x1080p.html
* igt@xe_module_load@reload:
- {shard-lnl}: [PASS][4] -> [ABORT][5] +6 other tests abort
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-lnl-1/igt@xe_module_load@reload.html
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-lnl-1/igt@xe_module_load@reload.html
New tests
---------
New tests have been introduced between xe-1569-70f1d41b827fa9d1275748e655912f991635f595_full and xe-pw-135809v2_full:
### New IGT tests (2) ###
* igt@xe_oa@oa-exponents@rcs-0:
- Statuses : 1 pass(s)
- Exec time: [3.45] s
* igt@xe_oa@privileged-forked-access-vaddr@ccs-0:
- Statuses : 1 pass(s)
- Exec time: [0.02] s
Known issues
------------
Here are the changes found in xe-pw-135809v2_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-y:
- shard-adlp: [PASS][6] -> [DMESG-WARN][7] ([Intel XE#1033] / [Intel XE#1214])
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-6/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-y.html
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-8/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-y.html
* igt@kms_big_fb@x-tiled-8bpp-rotate-270:
- shard-dg2-set2: NOTRUN -> [SKIP][8] ([Intel XE#1201] / [Intel XE#316])
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-dg2-466/igt@kms_big_fb@x-tiled-8bpp-rotate-270.html
* igt@kms_big_fb@x-tiled-8bpp-rotate-90:
- shard-adlp: NOTRUN -> [SKIP][9] ([Intel XE#1201] / [Intel XE#316])
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-2/igt@kms_big_fb@x-tiled-8bpp-rotate-90.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0:
- shard-adlp: NOTRUN -> [SKIP][10] ([Intel XE#1124] / [Intel XE#1201]) +1 other test skip
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-2/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0.html
* igt@kms_ccs@bad-pixel-format-y-tiled-gen12-rc-ccs-cc:
- shard-adlp: NOTRUN -> [SKIP][11] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) +3 other tests skip
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-1/igt@kms_ccs@bad-pixel-format-y-tiled-gen12-rc-ccs-cc.html
* igt@kms_ccs@bad-pixel-format-y-tiled-gen12-rc-ccs-cc@pipe-b-hdmi-a-1:
- shard-adlp: NOTRUN -> [SKIP][12] ([Intel XE#1201] / [Intel XE#787]) +5 other tests skip
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-1/igt@kms_ccs@bad-pixel-format-y-tiled-gen12-rc-ccs-cc@pipe-b-hdmi-a-1.html
* igt@kms_ccs@crc-primary-basic-4-tiled-xe2-ccs:
- shard-adlp: NOTRUN -> [SKIP][13] ([Intel XE#1201] / [Intel XE#1252])
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-2/igt@kms_ccs@crc-primary-basic-4-tiled-xe2-ccs.html
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs-cc:
- shard-dg2-set2: NOTRUN -> [SKIP][14] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) +1 other test skip
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-dg2-466/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs-cc.html
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-6:
- shard-dg2-set2: NOTRUN -> [SKIP][15] ([Intel XE#1201] / [Intel XE#787]) +6 other tests skip
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-dg2-466/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-6.html
* igt@kms_chamelium_hpd@vga-hpd-after-suspend:
- shard-adlp: NOTRUN -> [SKIP][16] ([Intel XE#1201] / [Intel XE#373])
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-2/igt@kms_chamelium_hpd@vga-hpd-after-suspend.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions:
- shard-adlp: NOTRUN -> [SKIP][17] ([Intel XE#1201] / [Intel XE#309]) +1 other test skip
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-2/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html
* igt@kms_feature_discovery@chamelium:
- shard-adlp: NOTRUN -> [SKIP][18] ([Intel XE#1201] / [Intel XE#701])
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-2/igt@kms_feature_discovery@chamelium.html
* igt@kms_flip@2x-nonexisting-fb-interruptible:
- shard-adlp: NOTRUN -> [SKIP][19] ([Intel XE#1201] / [Intel XE#310]) +1 other test skip
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-1/igt@kms_flip@2x-nonexisting-fb-interruptible.html
* igt@kms_flip@2x-plain-flip-fb-recreate-interruptible@ac-hdmi-a6-dp4:
- shard-dg2-set2: [PASS][20] -> [FAIL][21] ([Intel XE#886]) +1 other test fail
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-466/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible@ac-hdmi-a6-dp4.html
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-dg2-434/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible@ac-hdmi-a6-dp4.html
* igt@kms_flip@flip-vs-suspend-interruptible:
- shard-dg2-set2: [PASS][22] -> [INCOMPLETE][23] ([Intel XE#1195] / [Intel XE#2049]) +1 other test incomplete
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-433/igt@kms_flip@flip-vs-suspend-interruptible.html
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-dg2-436/igt@kms_flip@flip-vs-suspend-interruptible.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling@pipe-a-valid-mode:
- shard-adlp: NOTRUN -> [SKIP][24] ([Intel XE#1201] / [Intel XE#455]) +5 other tests skip
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-2/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytileccs-downscaling@pipe-a-valid-mode.html
* igt@kms_flip_tiling@flip-change-tiling@pipe-d-hdmi-a-1-y-to-y:
- shard-adlp: [PASS][25] -> [FAIL][26] ([Intel XE#1874]) +1 other test fail
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-4/igt@kms_flip_tiling@flip-change-tiling@pipe-d-hdmi-a-1-y-to-y.html
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-4/igt@kms_flip_tiling@flip-change-tiling@pipe-d-hdmi-a-1-y-to-y.html
* igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-render:
- shard-adlp: NOTRUN -> [SKIP][27] ([Intel XE#1201] / [Intel XE#651]) +1 other test skip
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-1/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-pri-shrfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-wc:
- shard-adlp: NOTRUN -> [FAIL][28] ([Intel XE#1861])
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-1/igt@kms_frontbuffer_tracking@fbc-1p-offscren-pri-shrfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-render:
- shard-dg2-set2: NOTRUN -> [SKIP][29] ([Intel XE#1201] / [Intel XE#651])
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-dg2-466/igt@kms_frontbuffer_tracking@fbcdrrs-2p-primscrn-pri-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-msflip-blt:
- shard-adlp: NOTRUN -> [SKIP][30] ([Intel XE#1201] / [Intel XE#656]) +4 other tests skip
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-2/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-shrfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-render:
- shard-dg2-set2: NOTRUN -> [SKIP][31] ([Intel XE#1201] / [Intel XE#653])
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-dg2-466/igt@kms_frontbuffer_tracking@fbcpsr-1p-primscrn-spr-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@psr-suspend:
- shard-adlp: NOTRUN -> [SKIP][32] ([Intel XE#1201] / [Intel XE#653]) +1 other test skip
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-2/igt@kms_frontbuffer_tracking@psr-suspend.html
* igt@kms_hdr@static-toggle-suspend@pipe-a-hdmi-a-6:
- shard-dg2-set2: NOTRUN -> [FAIL][33] ([Intel XE#616]) +4 other tests fail
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-dg2-464/igt@kms_hdr@static-toggle-suspend@pipe-a-hdmi-a-6.html
* igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4:
- shard-dg2-set2: [PASS][34] -> [FAIL][35] ([Intel XE#361]) +2 other tests fail
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-466/igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4.html
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-dg2-434/igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4.html
* igt@kms_psr@psr-cursor-blt:
- shard-adlp: NOTRUN -> [SKIP][36] ([Intel XE#1201] / [Intel XE#929]) +2 other tests skip
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-2/igt@kms_psr@psr-cursor-blt.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
- shard-adlp: NOTRUN -> [SKIP][37] ([Intel XE#1127] / [Intel XE#1201])
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-1/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-adlp: NOTRUN -> [SKIP][38] ([Intel XE#1201] / [Intel XE#362])
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-2/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-6:
- shard-dg2-set2: [PASS][39] -> [FAIL][40] ([Intel XE#899])
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-464/igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-6.html
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-dg2-433/igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-6.html
* igt@xe_compute@ccs-mode-basic:
- shard-adlp: NOTRUN -> [SKIP][41] ([Intel XE#1201] / [Intel XE#1447])
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-2/igt@xe_compute@ccs-mode-basic.html
* igt@xe_evict@evict-beng-large-multi-vm-cm:
- shard-adlp: NOTRUN -> [SKIP][42] ([Intel XE#1201] / [Intel XE#261])
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-2/igt@xe_evict@evict-beng-large-multi-vm-cm.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-invalidate:
- shard-adlp: NOTRUN -> [SKIP][43] ([Intel XE#1201] / [Intel XE#1392]) +1 other test skip
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-2/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-bindexecqueue-userptr-invalidate.html
* igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-userptr-invalidate-race-imm:
- shard-adlp: NOTRUN -> [SKIP][44] ([Intel XE#1201] / [Intel XE#288]) +3 other tests skip
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-1/igt@xe_exec_fault_mode@many-execqueues-bindexecqueue-userptr-invalidate-race-imm.html
* igt@xe_exec_reset@parallel-gt-reset:
- shard-dg2-set2: [PASS][45] -> [DMESG-WARN][46] ([Intel XE#1214] / [Intel XE#358])
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-433/igt@xe_exec_reset@parallel-gt-reset.html
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-dg2-436/igt@xe_exec_reset@parallel-gt-reset.html
* igt@xe_exec_threads@threads-fd-userptr:
- shard-adlp: [PASS][47] -> [INCOMPLETE][48] ([Intel XE#1169] / [Intel XE#1195])
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-8/igt@xe_exec_threads@threads-fd-userptr.html
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-9/igt@xe_exec_threads@threads-fd-userptr.html
* igt@xe_gt_freq@freq_fixed_exec:
- shard-adlp: NOTRUN -> [FAIL][49] ([Intel XE#1414])
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-1/igt@xe_gt_freq@freq_fixed_exec.html
* igt@xe_pm@s4-mocs:
- shard-adlp: [PASS][50] -> [ABORT][51] ([Intel XE#1794])
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-1/igt@xe_pm@s4-mocs.html
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-9/igt@xe_pm@s4-mocs.html
* igt@xe_pm_residency@toggle-gt-c6:
- shard-adlp: [PASS][52] -> [FAIL][53] ([Intel XE#958])
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-9/igt@xe_pm_residency@toggle-gt-c6.html
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-1/igt@xe_pm_residency@toggle-gt-c6.html
* igt@xe_query@multigpu-query-hwconfig:
- shard-dg2-set2: NOTRUN -> [SKIP][54] ([Intel XE#1201] / [Intel XE#944])
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-dg2-466/igt@xe_query@multigpu-query-hwconfig.html
#### Possible fixes ####
* igt@core_hotunplug@hotrebind-lateclose:
- shard-dg2-set2: [INCOMPLETE][55] ([Intel XE#1195]) -> [PASS][56]
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-434/igt@core_hotunplug@hotrebind-lateclose.html
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-dg2-466/igt@core_hotunplug@hotrebind-lateclose.html
* igt@kms_big_fb@4-tiled-64bpp-rotate-0:
- {shard-lnl}: [FAIL][57] ([Intel XE#1659]) -> [PASS][58]
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-lnl-6/igt@kms_big_fb@4-tiled-64bpp-rotate-0.html
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-lnl-2/igt@kms_big_fb@4-tiled-64bpp-rotate-0.html
* igt@kms_scaling_modes@scaling-mode-full-aspect:
- {shard-lnl}: [DMESG-WARN][59] ([Intel XE#324]) -> [PASS][60] +5 other tests pass
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-lnl-6/igt@kms_scaling_modes@scaling-mode-full-aspect.html
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-lnl-2/igt@kms_scaling_modes@scaling-mode-full-aspect.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-6:
- shard-dg2-set2: [FAIL][61] ([Intel XE#899]) -> [PASS][62]
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-464/igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-6.html
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-dg2-433/igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-6.html
* igt@xe_pm@s4-exec-after:
- shard-adlp: [ABORT][63] ([Intel XE#1358]) -> [PASS][64]
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-9/igt@xe_pm@s4-exec-after.html
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-2/igt@xe_pm@s4-exec-after.html
* igt@xe_pm@s4-vm-bind-prefetch:
- {shard-lnl}: [ABORT][65] ([Intel XE#1794]) -> [PASS][66]
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-lnl-2/igt@xe_pm@s4-vm-bind-prefetch.html
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-lnl-1/igt@xe_pm@s4-vm-bind-prefetch.html
- shard-adlp: [ABORT][67] ([Intel XE#1794]) -> [PASS][68]
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-9/igt@xe_pm@s4-vm-bind-prefetch.html
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-1/igt@xe_pm@s4-vm-bind-prefetch.html
* igt@xe_pm_residency@toggle-gt-c6:
- {shard-lnl}: [FAIL][69] ([Intel XE#958]) -> [PASS][70]
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-lnl-3/igt@xe_pm_residency@toggle-gt-c6.html
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-lnl-4/igt@xe_pm_residency@toggle-gt-c6.html
#### Warnings ####
* igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
- shard-adlp: [DMESG-FAIL][71] ([Intel XE#324]) -> [FAIL][72] ([Intel XE#1231])
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-2/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-4/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
* igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-async-flip:
- shard-adlp: [FAIL][73] ([Intel XE#1231]) -> [DMESG-FAIL][74] ([Intel XE#324])
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-6/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-async-flip.html
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-2/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-async-flip.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-dg2-set2: [SKIP][75] ([Intel XE#1201] / [Intel XE#1500]) -> [SKIP][76] ([Intel XE#1201] / [Intel XE#362])
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-435/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-dg2-463/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
* igt@xe_wedged@wedged-at-any-timeout:
- shard-dg2-set2: [DMESG-FAIL][77] ([Intel XE#1760]) -> [DMESG-WARN][78] ([Intel XE#1214] / [Intel XE#1760])
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-dg2-463/igt@xe_wedged@wedged-at-any-timeout.html
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-dg2-466/igt@xe_wedged@wedged-at-any-timeout.html
- shard-adlp: [DMESG-WARN][79] ([Intel XE#1214] / [Intel XE#1330] / [Intel XE#1760]) -> [INCOMPLETE][80] ([Intel XE#1195] / [Intel XE#1760])
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1569-70f1d41b827fa9d1275748e655912f991635f595/shard-adlp-8/igt@xe_wedged@wedged-at-any-timeout.html
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/shard-adlp-1/igt@xe_wedged@wedged-at-any-timeout.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[Intel XE#1033]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1033
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
[Intel XE#1169]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1169
[Intel XE#1195]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1195
[Intel XE#1201]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1201
[Intel XE#1214]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1214
[Intel XE#1231]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1231
[Intel XE#1252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1252
[Intel XE#1330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1330
[Intel XE#1339]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1339
[Intel XE#1358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1358
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1399
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
[Intel XE#1414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1414
[Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
[Intel XE#1424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1424
[Intel XE#1447]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1447
[Intel XE#1468]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1468
[Intel XE#1500]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1500
[Intel XE#1659]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1659
[Intel XE#1760]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1760
[Intel XE#1794]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1794
[Intel XE#1861]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1861
[Intel XE#1874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1874
[Intel XE#2049]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2049
[Intel XE#261]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/261
[Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
[Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#310]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/310
[Intel XE#316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/316
[Intel XE#324]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/324
[Intel XE#358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/358
[Intel XE#361]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/361
[Intel XE#362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/362
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
[Intel XE#599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/599
[Intel XE#616]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/616
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#653]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/653
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#701]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/701
[Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
[Intel XE#886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/886
[Intel XE#899]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/899
[Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
[Intel XE#958]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/958
Build changes
-------------
* Linux: xe-1569-70f1d41b827fa9d1275748e655912f991635f595 -> xe-pw-135809v2
IGT_7918: aab1a4b6a9b7855fe6e38ea3b3987a1399ee5816 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-1569-70f1d41b827fa9d1275748e655912f991635f595: 70f1d41b827fa9d1275748e655912f991635f595
xe-pw-135809v2: 135809v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-135809v2/index.html
[-- Attachment #2: Type: text/html, Size: 30321 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature.
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
` (18 preceding siblings ...)
2024-07-08 5:46 ` ✗ CI.FULL: failure " Patchwork
@ 2024-07-09 9:57 ` Matthew Auld
2024-07-09 16:08 ` Nirmoy Das
2024-07-09 16:31 ` Matthew Brost
19 siblings, 2 replies; 32+ messages in thread
From: Matthew Auld @ 2024-07-09 9:57 UTC (permalink / raw)
To: Matthew Brost, intel-xe; +Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
Hi,
On 08/07/2024 05:03, Matthew Brost wrote:
> While debuging [1] an issue was identified in which if too many GT TLB
> invalidations are issued to the GuC, the GuC can get overwhelmed to the
> point scheduling of jobs starts to stall. To avoid this, hold and
> coalesce GT TLB invalidations in the KMD if a watermark of pending
> invalidations is past. Add gitlab for this issue has also been opened
> [2].
>
> Layering issues with GT TLB invalidations are known [3] which needed to
> be fixed first before adding this new feature.
>
> - Patches 1-8 fix the layering.
> - Patches 9-11 add coalescing feature.
>
> We could merge these two as seperate series if needed.
>
> CCing various stakeholders (Farah, Michal, Nirmoy) which have raised GT
> TLB invalidation issues in the past.
Maybe worth mentioning for [1], we try to process TLB invalidations
directly from the irq, however we also only process the g2h queue
in-order, so if there is something other than TLB invalidation or fault
earlier in the queue then we do nothing useful from the irq and just
return, that is until the wq can eventually process those earlier items
that couldn't be processed directly from the irq. In the past I have
seen TLB timeouts where the TLB invalidation is clearly in the g2h queue
(and has been for a while), but is stuck behind something earlier in the
queue that needs the wq, but system is under such a heavy load that the
wq can't be scheduled in a timely manner.
>
> v2:
> - Fix CI issues
> - Clean up some of the series / patch structure
>
> Matt
>
> [1] https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/799#note_2449497
> [2] https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/2162
> [3] https://patchwork.freedesktop.org/series/133001/
>
> Matthew Brost (11):
> drm/xe: Add xe_gt_tlb_invalidation_fence_init helper
> drm/xe: Drop xe_gt_tlb_invalidation_wait
> drm/xe: s/tlb_invalidation.lock/tlb_invalidation.fence_lock
> drm/xe: Add tlb_invalidation.seqno_lock
> drm/xe: Add xe_gt_tlb_invalidation_done_handler
> drm/xe: Add send tlb invalidation helpers
> drm/xe: Add xe_guc_tlb_invalidation layer
> drm/xe: Add multi-client support for GT TLB invalidations
> drm/xe: Add GT TLB invalidation coalescing
> drm/xe: Add GT TLB invalidation coalesce tracepoints
> drm/xe: Add GT TLB invalidation watermark debugfs
>
> drivers/gpu/drm/xe/Makefile | 1 +
> drivers/gpu/drm/xe/xe_debugfs.c | 38 ++
> drivers/gpu/drm/xe/xe_device.c | 3 +
> drivers/gpu/drm/xe/xe_device_types.h | 5 +
> drivers/gpu/drm/xe/xe_ggtt.c | 21 +-
> drivers/gpu/drm/xe/xe_ggtt_types.h | 5 +
> drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 641 ++++++++++++------
> drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 26 +-
> .../gpu/drm/xe/xe_gt_tlb_invalidation_types.h | 41 ++
> drivers/gpu/drm/xe/xe_gt_types.h | 43 +-
> drivers/gpu/drm/xe/xe_guc_ct.c | 2 +-
> drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c | 145 ++++
> drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h | 18 +
> drivers/gpu/drm/xe/xe_pt.c | 33 +-
> drivers/gpu/drm/xe/xe_trace.h | 10 +
> drivers/gpu/drm/xe/xe_vm.c | 45 +-
> drivers/gpu/drm/xe/xe_vm_types.h | 3 +
> 17 files changed, 801 insertions(+), 279 deletions(-)
> create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
> create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h
>
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH v2 01/11] drm/xe: Add xe_gt_tlb_invalidation_fence_init helper
2024-07-08 4:03 ` [PATCH v2 01/11] drm/xe: Add xe_gt_tlb_invalidation_fence_init helper Matthew Brost
@ 2024-07-09 15:56 ` Nirmoy Das
0 siblings, 0 replies; 32+ messages in thread
From: Nirmoy Das @ 2024-07-09 15:56 UTC (permalink / raw)
To: Matthew Brost, intel-xe; +Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
On 7/8/2024 6:03 AM, Matthew Brost wrote:
> Other layers should not be touching struct xe_gt_tlb_invalidation_fence
> directly, add helper for initialization.
>
> v2:
> - Add dma_fence_get and list init to xe_gt_tlb_invalidation_fence_init
>
> Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Nirmoy Das <nirmoy.das@intel.com>
> ---
> drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 36 +++++++++++++++++++++
> drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 3 ++
> drivers/gpu/drm/xe/xe_pt.c | 26 +--------------
> 3 files changed, 40 insertions(+), 25 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> index d9359976ab8b..92a18a0e4acd 100644
> --- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> +++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> @@ -508,3 +508,39 @@ int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
>
> return 0;
> }
> +
> +static const char *
> +invalidation_fence_get_driver_name(struct dma_fence *dma_fence)
> +{
> + return "xe";
> +}
> +
> +static const char *
> +invalidation_fence_get_timeline_name(struct dma_fence *dma_fence)
> +{
> + return "invalidation_fence";
> +}
> +
> +static const struct dma_fence_ops invalidation_fence_ops = {
> + .get_driver_name = invalidation_fence_get_driver_name,
> + .get_timeline_name = invalidation_fence_get_timeline_name,
> +};
> +
> +/**
> + * xe_gt_tlb_invalidation_fence_init - Initialize TLB invalidation fence
> + * @gt: GT
> + * @fence: TLB invalidation fence to initialize
> + *
> + * Initialize TLB invalidation fence for use
> + */
> +void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
> + struct xe_gt_tlb_invalidation_fence *fence)
> +{
> + spin_lock_irq(>->tlb_invalidation.lock);
> + dma_fence_init(&fence->base, &invalidation_fence_ops,
> + >->tlb_invalidation.lock,
> + dma_fence_context_alloc(1), 1);
> + spin_unlock_irq(>->tlb_invalidation.lock);
> + INIT_LIST_HEAD(&fence->link);
> + dma_fence_get(&fence->base);
> +}
> diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
> index bf3bebd9f985..948f4a2f5214 100644
> --- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
> +++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
> @@ -26,4 +26,7 @@ int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
> int xe_gt_tlb_invalidation_wait(struct xe_gt *gt, int seqno);
> int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len);
>
> +void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
> + struct xe_gt_tlb_invalidation_fence *fence);
> +
> #endif /* _XE_GT_TLB_INVALIDATION_ */
> diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
> index f391de908033..1caa99b22c73 100644
> --- a/drivers/gpu/drm/xe/xe_pt.c
> +++ b/drivers/gpu/drm/xe/xe_pt.c
> @@ -1317,23 +1317,6 @@ struct invalidation_fence {
> u32 asid;
> };
>
> -static const char *
> -invalidation_fence_get_driver_name(struct dma_fence *dma_fence)
> -{
> - return "xe";
> -}
> -
> -static const char *
> -invalidation_fence_get_timeline_name(struct dma_fence *dma_fence)
> -{
> - return "invalidation_fence";
> -}
> -
> -static const struct dma_fence_ops invalidation_fence_ops = {
> - .get_driver_name = invalidation_fence_get_driver_name,
> - .get_timeline_name = invalidation_fence_get_timeline_name,
> -};
> -
> static void invalidation_fence_cb(struct dma_fence *fence,
> struct dma_fence_cb *cb)
> {
> @@ -1372,15 +1355,8 @@ static void invalidation_fence_init(struct xe_gt *gt,
>
> trace_xe_gt_tlb_invalidation_fence_create(gt_to_xe(gt), &ifence->base);
>
> - spin_lock_irq(>->tlb_invalidation.lock);
> - dma_fence_init(&ifence->base.base, &invalidation_fence_ops,
> - >->tlb_invalidation.lock,
> - dma_fence_context_alloc(1), 1);
> - spin_unlock_irq(>->tlb_invalidation.lock);
> -
> - INIT_LIST_HEAD(&ifence->base.link);
> + xe_gt_tlb_invalidation_fence_init(gt, &ifence->base);
>
> - dma_fence_get(&ifence->base.base); /* Ref for caller */
> ifence->fence = fence;
> ifence->gt = gt;
> ifence->start = start;
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH v2 02/11] drm/xe: Drop xe_gt_tlb_invalidation_wait
2024-07-08 4:03 ` [PATCH v2 02/11] drm/xe: Drop xe_gt_tlb_invalidation_wait Matthew Brost
@ 2024-07-09 15:57 ` Nirmoy Das
0 siblings, 0 replies; 32+ messages in thread
From: Nirmoy Das @ 2024-07-09 15:57 UTC (permalink / raw)
To: Matthew Brost, intel-xe; +Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
On 7/8/2024 6:03 AM, Matthew Brost wrote:
> Having two methods to wait on GT TLB invalidations is not ideal. Remove
> xe_gt_tlb_invalidation_wait and only use GT TLB invalidation fences.
>
> Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Nirmoy Das <nirmoy.das@intel.com>
> ---
> drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 101 ++++++--------------
> drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 7 +-
> drivers/gpu/drm/xe/xe_vm.c | 28 +++---
> 3 files changed, 49 insertions(+), 87 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> index 92a18a0e4acd..687214d07ac7 100644
> --- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> +++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> @@ -111,7 +111,6 @@ invalidation_fence_signal(struct xe_device *xe, struct xe_gt_tlb_invalidation_fe
> void xe_gt_tlb_invalidation_reset(struct xe_gt *gt)
> {
> struct xe_gt_tlb_invalidation_fence *fence, *next;
> - struct xe_guc *guc = >->uc.guc;
> int pending_seqno;
>
> /*
> @@ -134,7 +133,6 @@ void xe_gt_tlb_invalidation_reset(struct xe_gt *gt)
> else
> pending_seqno = gt->tlb_invalidation.seqno - 1;
> WRITE_ONCE(gt->tlb_invalidation.seqno_recv, pending_seqno);
> - wake_up_all(&guc->ct.wq);
>
> list_for_each_entry_safe(fence, next,
> >->tlb_invalidation.pending_fences, link)
> @@ -165,6 +163,8 @@ static int send_tlb_invalidation(struct xe_guc *guc,
> int seqno;
> int ret;
>
> + xe_gt_assert(gt, fence);
> +
> /*
> * XXX: The seqno algorithm relies on TLB invalidation being processed
> * in order which they currently are, if that changes the algorithm will
> @@ -173,10 +173,8 @@ static int send_tlb_invalidation(struct xe_guc *guc,
>
> mutex_lock(&guc->ct.lock);
> seqno = gt->tlb_invalidation.seqno;
> - if (fence) {
> - fence->seqno = seqno;
> - trace_xe_gt_tlb_invalidation_fence_send(xe, fence);
> - }
> + fence->seqno = seqno;
> + trace_xe_gt_tlb_invalidation_fence_send(xe, fence);
> action[1] = seqno;
> ret = xe_guc_ct_send_locked(&guc->ct, action, len,
> G2H_LEN_DW_TLB_INVALIDATE, 1);
> @@ -209,7 +207,6 @@ static int send_tlb_invalidation(struct xe_guc *guc,
> TLB_INVALIDATION_SEQNO_MAX;
> if (!gt->tlb_invalidation.seqno)
> gt->tlb_invalidation.seqno = 1;
> - ret = seqno;
> }
> mutex_unlock(&guc->ct.lock);
>
> @@ -223,14 +220,16 @@ static int send_tlb_invalidation(struct xe_guc *guc,
> /**
> * xe_gt_tlb_invalidation_guc - Issue a TLB invalidation on this GT for the GuC
> * @gt: graphics tile
> + * @fence: invalidation fence which will be signal on TLB invalidation
> + * completion
> *
> * Issue a TLB invalidation for the GuC. Completion of TLB is asynchronous and
> - * caller can use seqno + xe_gt_tlb_invalidation_wait to wait for completion.
> + * caller can use the invalidation fence to wait for completion.
> *
> - * Return: Seqno which can be passed to xe_gt_tlb_invalidation_wait on success,
> - * negative error code on error.
> + * Return: 0 on success, negative error code on error
> */
> -static int xe_gt_tlb_invalidation_guc(struct xe_gt *gt)
> +static int xe_gt_tlb_invalidation_guc(struct xe_gt *gt,
> + struct xe_gt_tlb_invalidation_fence *fence)
> {
> u32 action[] = {
> XE_GUC_ACTION_TLB_INVALIDATION,
> @@ -238,7 +237,7 @@ static int xe_gt_tlb_invalidation_guc(struct xe_gt *gt)
> MAKE_INVAL_OP(XE_GUC_TLB_INVAL_GUC),
> };
>
> - return send_tlb_invalidation(>->uc.guc, NULL, action,
> + return send_tlb_invalidation(>->uc.guc, fence, action,
> ARRAY_SIZE(action));
> }
>
> @@ -257,13 +256,15 @@ int xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt)
>
> if (xe_guc_ct_enabled(>->uc.guc.ct) &&
> gt->uc.guc.submission_state.enabled) {
> - int seqno;
> + struct xe_gt_tlb_invalidation_fence fence;
> + int ret;
>
> - seqno = xe_gt_tlb_invalidation_guc(gt);
> - if (seqno <= 0)
> - return seqno;
> + xe_gt_tlb_invalidation_fence_init(gt, &fence);
> + ret = xe_gt_tlb_invalidation_guc(gt, &fence);
> + if (ret < 0)
> + return ret;
>
> - xe_gt_tlb_invalidation_wait(gt, seqno);
> + xe_gt_tlb_invalidation_fence_wait(&fence);
> } else if (xe_device_uc_enabled(xe) && !xe_device_wedged(xe)) {
> if (IS_SRIOV_VF(xe))
> return 0;
> @@ -290,18 +291,16 @@ int xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt)
> *
> * @gt: graphics tile
> * @fence: invalidation fence which will be signal on TLB invalidation
> - * completion, can be NULL
> + * completion
> * @start: start address
> * @end: end address
> * @asid: address space id
> *
> * Issue a range based TLB invalidation if supported, if not fallback to a full
> - * TLB invalidation. Completion of TLB is asynchronous and caller can either use
> - * the invalidation fence or seqno + xe_gt_tlb_invalidation_wait to wait for
> - * completion.
> + * TLB invalidation. Completion of TLB is asynchronous and caller can use
> + * the invalidation fence to wait for completion.
> *
> - * Return: Seqno which can be passed to xe_gt_tlb_invalidation_wait on success,
> - * negative error code on error.
> + * Return: Negative error code on error, 0 on success
> */
> int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
> struct xe_gt_tlb_invalidation_fence *fence,
> @@ -312,11 +311,11 @@ int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
> u32 action[MAX_TLB_INVALIDATION_LEN];
> int len = 0;
>
> + xe_gt_assert(gt, fence);
> +
> /* Execlists not supported */
> if (gt_to_xe(gt)->info.force_execlist) {
> - if (fence)
> - __invalidation_fence_signal(xe, fence);
> -
> + __invalidation_fence_signal(xe, fence);
> return 0;
> }
>
> @@ -382,12 +381,10 @@ int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
> * @vma: VMA to invalidate
> *
> * Issue a range based TLB invalidation if supported, if not fallback to a full
> - * TLB invalidation. Completion of TLB is asynchronous and caller can either use
> - * the invalidation fence or seqno + xe_gt_tlb_invalidation_wait to wait for
> - * completion.
> + * TLB invalidation. Completion of TLB is asynchronous and caller can use
> + * the invalidation fence to wait for completion.
> *
> - * Return: Seqno which can be passed to xe_gt_tlb_invalidation_wait on success,
> - * negative error code on error.
> + * Return: Negative error code on error, 0 on success
> */
> int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
> struct xe_gt_tlb_invalidation_fence *fence,
> @@ -400,43 +397,6 @@ int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
> xe_vma_vm(vma)->usm.asid);
> }
>
> -/**
> - * xe_gt_tlb_invalidation_wait - Wait for TLB to complete
> - * @gt: graphics tile
> - * @seqno: seqno to wait which was returned from xe_gt_tlb_invalidation
> - *
> - * Wait for tlb_timeout_jiffies() for a TLB invalidation to complete.
> - *
> - * Return: 0 on success, -ETIME on TLB invalidation timeout
> - */
> -int xe_gt_tlb_invalidation_wait(struct xe_gt *gt, int seqno)
> -{
> - struct xe_guc *guc = >->uc.guc;
> - int ret;
> -
> - /* Execlists not supported */
> - if (gt_to_xe(gt)->info.force_execlist)
> - return 0;
> -
> - /*
> - * XXX: See above, this algorithm only works if seqno are always in
> - * order
> - */
> - ret = wait_event_timeout(guc->ct.wq,
> - tlb_invalidation_seqno_past(gt, seqno),
> - tlb_timeout_jiffies(gt));
> - if (!ret) {
> - struct drm_printer p = xe_gt_err_printer(gt);
> -
> - xe_gt_err(gt, "TLB invalidation time'd out, seqno=%d, recv=%d\n",
> - seqno, gt->tlb_invalidation.seqno_recv);
> - xe_guc_ct_print(&guc->ct, &p, true);
> - return -ETIME;
> - }
> -
> - return 0;
> -}
> -
> /**
> * xe_guc_tlb_invalidation_done_handler - TLB invalidation done handler
> * @guc: guc
> @@ -480,12 +440,7 @@ int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
> return 0;
> }
>
> - /*
> - * wake_up_all() and wait_event_timeout() already have the correct
> - * barriers.
> - */
> WRITE_ONCE(gt->tlb_invalidation.seqno_recv, msg[0]);
> - wake_up_all(&guc->ct.wq);
>
> list_for_each_entry_safe(fence, next,
> >->tlb_invalidation.pending_fences, link) {
> diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
> index 948f4a2f5214..cbf49b3d0265 100644
> --- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
> +++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
> @@ -23,10 +23,15 @@ int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
> int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
> struct xe_gt_tlb_invalidation_fence *fence,
> u64 start, u64 end, u32 asid);
> -int xe_gt_tlb_invalidation_wait(struct xe_gt *gt, int seqno);
> int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len);
>
> void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
> struct xe_gt_tlb_invalidation_fence *fence);
>
> +static inline void
> +xe_gt_tlb_invalidation_fence_wait(struct xe_gt_tlb_invalidation_fence *fence)
> +{
> + dma_fence_wait(&fence->base, false);
> +}
> +
> #endif /* _XE_GT_TLB_INVALIDATION_ */
> diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
> index cf3aea5d8cdc..478932fb7718 100644
> --- a/drivers/gpu/drm/xe/xe_vm.c
> +++ b/drivers/gpu/drm/xe/xe_vm.c
> @@ -3176,8 +3176,8 @@ int xe_vm_invalidate_vma(struct xe_vma *vma)
> {
> struct xe_device *xe = xe_vma_vm(vma)->xe;
> struct xe_tile *tile;
> + struct xe_gt_tlb_invalidation_fence fence[XE_MAX_TILES_PER_DEVICE];
> u32 tile_needs_invalidate = 0;
> - int seqno[XE_MAX_TILES_PER_DEVICE];
> u8 id;
> int ret;
>
> @@ -3204,29 +3204,31 @@ int xe_vm_invalidate_vma(struct xe_vma *vma)
>
> for_each_tile(tile, xe, id) {
> if (xe_pt_zap_ptes(tile, vma)) {
> - tile_needs_invalidate |= BIT(id);
> xe_device_wmb(xe);
> + xe_gt_tlb_invalidation_fence_init(tile->primary_gt,
> + &fence[id]);
> +
> /*
> * FIXME: We potentially need to invalidate multiple
> * GTs within the tile
> */
> - seqno[id] = xe_gt_tlb_invalidation_vma(tile->primary_gt, NULL, vma);
> - if (seqno[id] < 0)
> - return seqno[id];
> - }
> - }
> -
> - for_each_tile(tile, xe, id) {
> - if (tile_needs_invalidate & BIT(id)) {
> - ret = xe_gt_tlb_invalidation_wait(tile->primary_gt, seqno[id]);
> + ret = xe_gt_tlb_invalidation_vma(tile->primary_gt,
> + &fence[id], vma);
> if (ret < 0)
> - return ret;
> + goto wait;
> +
> + tile_needs_invalidate |= BIT(id);
> }
> }
>
> +wait:
> + for_each_tile(tile, xe, id)
> + if (tile_needs_invalidate & BIT(id))
> + xe_gt_tlb_invalidation_fence_wait(&fence[id]);
> +
> vma->tile_invalidated = vma->tile_mask;
>
> - return 0;
> + return ret;
> }
>
> struct xe_vm_snapshot {
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH v2 03/11] drm/xe: s/tlb_invalidation.lock/tlb_invalidation.fence_lock
2024-07-08 4:03 ` [PATCH v2 03/11] drm/xe: s/tlb_invalidation.lock/tlb_invalidation.fence_lock Matthew Brost
@ 2024-07-09 15:57 ` Nirmoy Das
0 siblings, 0 replies; 32+ messages in thread
From: Nirmoy Das @ 2024-07-09 15:57 UTC (permalink / raw)
To: Matthew Brost, intel-xe; +Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
On 7/8/2024 6:03 AM, Matthew Brost wrote:
> tlb_invalidation.lock is the lock for GT TLB invalidation fences, name
> this accurately.
>
> Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Nirmoy Das <nirmoy.das@intel.com>
> ---
> drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 8 ++++----
> drivers/gpu/drm/xe/xe_gt_types.h | 4 ++--
> 2 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> index 687214d07ac7..147840b66ba9 100644
> --- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> +++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> @@ -80,7 +80,7 @@ int xe_gt_tlb_invalidation_init(struct xe_gt *gt)
> gt->tlb_invalidation.seqno = 1;
> INIT_LIST_HEAD(>->tlb_invalidation.pending_fences);
> spin_lock_init(>->tlb_invalidation.pending_lock);
> - spin_lock_init(>->tlb_invalidation.lock);
> + spin_lock_init(>->tlb_invalidation.fence_lock);
> INIT_DELAYED_WORK(>->tlb_invalidation.fence_tdr,
> xe_gt_tlb_fence_timeout);
>
> @@ -491,11 +491,11 @@ static const struct dma_fence_ops invalidation_fence_ops = {
> void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
> struct xe_gt_tlb_invalidation_fence *fence)
> {
> - spin_lock_irq(>->tlb_invalidation.lock);
> + spin_lock_irq(>->tlb_invalidation.fence_lock);
> dma_fence_init(&fence->base, &invalidation_fence_ops,
> - >->tlb_invalidation.lock,
> + >->tlb_invalidation.fence_lock,
> dma_fence_context_alloc(1), 1);
> - spin_unlock_irq(>->tlb_invalidation.lock);
> + spin_unlock_irq(>->tlb_invalidation.fence_lock);
> INIT_LIST_HEAD(&fence->link);
> dma_fence_get(&fence->base);
> }
> diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
> index 6b5e0b45efb0..d190a66514c0 100644
> --- a/drivers/gpu/drm/xe/xe_gt_types.h
> +++ b/drivers/gpu/drm/xe/xe_gt_types.h
> @@ -192,8 +192,8 @@ struct xe_gt {
> * xe_gt_tlb_fence_timeout after the timeut interval is over.
> */
> struct delayed_work fence_tdr;
> - /** @tlb_invalidation.lock: protects TLB invalidation fences */
> - spinlock_t lock;
> + /** @tlb_invalidation.fence_lock: protects TLB invalidation fences */
> + spinlock_t fence_lock;
> } tlb_invalidation;
>
> /**
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature.
2024-07-09 9:57 ` [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Auld
@ 2024-07-09 16:08 ` Nirmoy Das
2024-07-09 16:35 ` Matthew Brost
2024-07-09 16:31 ` Matthew Brost
1 sibling, 1 reply; 32+ messages in thread
From: Nirmoy Das @ 2024-07-09 16:08 UTC (permalink / raw)
To: Matthew Auld, Matthew Brost, intel-xe
Cc: nirmoy.das, farah.kassabri, michal.wajdeczko
On 7/9/2024 11:57 AM, Matthew Auld wrote:
> Hi,
>
> On 08/07/2024 05:03, Matthew Brost wrote:
>> While debuging [1] an issue was identified in which if too many GT TLB
>> invalidations are issued to the GuC, the GuC can get overwhelmed to the
>> point scheduling of jobs starts to stall. To avoid this, hold and
>> coalesce GT TLB invalidations in the KMD if a watermark of pending
>> invalidations is past. Add gitlab for this issue has also been opened
>> [2].
>>
>> Layering issues with GT TLB invalidations are known [3] which needed to
>> be fixed first before adding this new feature.
>>
>> - Patches 1-8 fix the layering.
>> - Patches 9-11 add coalescing feature.
>>
>> We could merge these two as seperate series if needed.
>>
>> CCing various stakeholders (Farah, Michal, Nirmoy) which have raised GT
>> TLB invalidation issues in the past.
>
> Maybe worth mentioning for [1], we try to process TLB invalidations
> directly from the irq, however we also only process the g2h queue
> in-order, so if there is something other than TLB invalidation or
> fault earlier in the queue then we do nothing useful from the irq and
> just return, that is until the wq can eventually process those earlier
> items that couldn't be processed directly from the irq. In the past
Seen this recently :
<3> [3763.731822] xe 0000:03:00.0: [drm] *ERROR* GT0: g2h outstanding: 611
<snip>
<6> [3727.857273] [IGT] xe_evict: executing
<3> [3730.165480] xe 0000:03:00.0: [drm] *ERROR* TILE0 [GTT] GT0: TLB
invalidation time'd out, seqno=26858, recv=2685
Which I think fits your description. This series should help but not
sure how much.
Regards,
Nirmoy
> I have seen TLB timeouts where the TLB invalidation is clearly in the
> g2h queue (and has been for a while), but is stuck behind something
> earlier in the queue that needs the wq, but system is under such a
> heavy load that the wq can't be scheduled in a timely manner.
>
>>
>> v2:
>> - Fix CI issues
>> - Clean up some of the series / patch structure
>>
>> Matt
>>
>> [1]
>> https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/799#note_2449497
>> [2] https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/2162
>> [3] https://patchwork.freedesktop.org/series/133001/
>>
>> Matthew Brost (11):
>> drm/xe: Add xe_gt_tlb_invalidation_fence_init helper
>> drm/xe: Drop xe_gt_tlb_invalidation_wait
>> drm/xe: s/tlb_invalidation.lock/tlb_invalidation.fence_lock
>> drm/xe: Add tlb_invalidation.seqno_lock
>> drm/xe: Add xe_gt_tlb_invalidation_done_handler
>> drm/xe: Add send tlb invalidation helpers
>> drm/xe: Add xe_guc_tlb_invalidation layer
>> drm/xe: Add multi-client support for GT TLB invalidations
>> drm/xe: Add GT TLB invalidation coalescing
>> drm/xe: Add GT TLB invalidation coalesce tracepoints
>> drm/xe: Add GT TLB invalidation watermark debugfs
>>
>> drivers/gpu/drm/xe/Makefile | 1 +
>> drivers/gpu/drm/xe/xe_debugfs.c | 38 ++
>> drivers/gpu/drm/xe/xe_device.c | 3 +
>> drivers/gpu/drm/xe/xe_device_types.h | 5 +
>> drivers/gpu/drm/xe/xe_ggtt.c | 21 +-
>> drivers/gpu/drm/xe/xe_ggtt_types.h | 5 +
>> drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 641 ++++++++++++------
>> drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 26 +-
>> .../gpu/drm/xe/xe_gt_tlb_invalidation_types.h | 41 ++
>> drivers/gpu/drm/xe/xe_gt_types.h | 43 +-
>> drivers/gpu/drm/xe/xe_guc_ct.c | 2 +-
>> drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c | 145 ++++
>> drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h | 18 +
>> drivers/gpu/drm/xe/xe_pt.c | 33 +-
>> drivers/gpu/drm/xe/xe_trace.h | 10 +
>> drivers/gpu/drm/xe/xe_vm.c | 45 +-
>> drivers/gpu/drm/xe/xe_vm_types.h | 3 +
>> 17 files changed, 801 insertions(+), 279 deletions(-)
>> create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
>> create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h
>>
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature.
2024-07-09 9:57 ` [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Auld
2024-07-09 16:08 ` Nirmoy Das
@ 2024-07-09 16:31 ` Matthew Brost
1 sibling, 0 replies; 32+ messages in thread
From: Matthew Brost @ 2024-07-09 16:31 UTC (permalink / raw)
To: Matthew Auld; +Cc: intel-xe, nirmoy.das, farah.kassabri, michal.wajdeczko
On Tue, Jul 09, 2024 at 10:57:14AM +0100, Matthew Auld wrote:
> Hi,
>
> On 08/07/2024 05:03, Matthew Brost wrote:
> > While debuging [1] an issue was identified in which if too many GT TLB
> > invalidations are issued to the GuC, the GuC can get overwhelmed to the
> > point scheduling of jobs starts to stall. To avoid this, hold and
> > coalesce GT TLB invalidations in the KMD if a watermark of pending
> > invalidations is past. Add gitlab for this issue has also been opened
> > [2].
> >
> > Layering issues with GT TLB invalidations are known [3] which needed to
> > be fixed first before adding this new feature.
> >
> > - Patches 1-8 fix the layering.
> > - Patches 9-11 add coalescing feature.
> >
> > We could merge these two as seperate series if needed.
> >
> > CCing various stakeholders (Farah, Michal, Nirmoy) which have raised GT
> > TLB invalidation issues in the past.
>
> Maybe worth mentioning for [1], we try to process TLB invalidations directly
> from the irq, however we also only process the g2h queue in-order, so if
> there is something other than TLB invalidation or fault earlier in the queue
Faults get sunk to a secondary queue to avoid stalling the g2h queue +
work around dma-fencing rules.
> then we do nothing useful from the irq and just return, that is until the wq
> can eventually process those earlier items that couldn't be processed
> directly from the irq. In the past I have seen TLB timeouts where the TLB
> invalidation is clearly in the g2h queue (and has been for a while), but is
> stuck behind something earlier in the queue that needs the wq, but system is
> under such a heavy load that the wq can't be scheduled in a timely manner.
>
Great point. Will add.
But perhaps we need to change the 'ct->g2h_wq' priority too. I think
this should be the highest priority WQ in the Xe KMD.
Thanks,
Matt
> >
> > v2:
> > - Fix CI issues
> > - Clean up some of the series / patch structure
> >
> > Matt
> >
> > [1] https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/799#note_2449497
> > [2] https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/2162
> > [3] https://patchwork.freedesktop.org/series/133001/
> >
> > Matthew Brost (11):
> > drm/xe: Add xe_gt_tlb_invalidation_fence_init helper
> > drm/xe: Drop xe_gt_tlb_invalidation_wait
> > drm/xe: s/tlb_invalidation.lock/tlb_invalidation.fence_lock
> > drm/xe: Add tlb_invalidation.seqno_lock
> > drm/xe: Add xe_gt_tlb_invalidation_done_handler
> > drm/xe: Add send tlb invalidation helpers
> > drm/xe: Add xe_guc_tlb_invalidation layer
> > drm/xe: Add multi-client support for GT TLB invalidations
> > drm/xe: Add GT TLB invalidation coalescing
> > drm/xe: Add GT TLB invalidation coalesce tracepoints
> > drm/xe: Add GT TLB invalidation watermark debugfs
> >
> > drivers/gpu/drm/xe/Makefile | 1 +
> > drivers/gpu/drm/xe/xe_debugfs.c | 38 ++
> > drivers/gpu/drm/xe/xe_device.c | 3 +
> > drivers/gpu/drm/xe/xe_device_types.h | 5 +
> > drivers/gpu/drm/xe/xe_ggtt.c | 21 +-
> > drivers/gpu/drm/xe/xe_ggtt_types.h | 5 +
> > drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 641 ++++++++++++------
> > drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 26 +-
> > .../gpu/drm/xe/xe_gt_tlb_invalidation_types.h | 41 ++
> > drivers/gpu/drm/xe/xe_gt_types.h | 43 +-
> > drivers/gpu/drm/xe/xe_guc_ct.c | 2 +-
> > drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c | 145 ++++
> > drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h | 18 +
> > drivers/gpu/drm/xe/xe_pt.c | 33 +-
> > drivers/gpu/drm/xe/xe_trace.h | 10 +
> > drivers/gpu/drm/xe/xe_vm.c | 45 +-
> > drivers/gpu/drm/xe/xe_vm_types.h | 3 +
> > 17 files changed, 801 insertions(+), 279 deletions(-)
> > create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
> > create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h
> >
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature.
2024-07-09 16:08 ` Nirmoy Das
@ 2024-07-09 16:35 ` Matthew Brost
2024-07-09 16:42 ` Nirmoy Das
0 siblings, 1 reply; 32+ messages in thread
From: Matthew Brost @ 2024-07-09 16:35 UTC (permalink / raw)
To: Nirmoy Das
Cc: Matthew Auld, intel-xe, nirmoy.das, farah.kassabri,
michal.wajdeczko
On Tue, Jul 09, 2024 at 06:08:54PM +0200, Nirmoy Das wrote:
>
> On 7/9/2024 11:57 AM, Matthew Auld wrote:
> > Hi,
> >
> > On 08/07/2024 05:03, Matthew Brost wrote:
> > > While debuging [1] an issue was identified in which if too many GT TLB
> > > invalidations are issued to the GuC, the GuC can get overwhelmed to the
> > > point scheduling of jobs starts to stall. To avoid this, hold and
> > > coalesce GT TLB invalidations in the KMD if a watermark of pending
> > > invalidations is past. Add gitlab for this issue has also been opened
> > > [2].
> > >
> > > Layering issues with GT TLB invalidations are known [3] which needed to
> > > be fixed first before adding this new feature.
> > >
> > > - Patches 1-8 fix the layering.
> > > - Patches 9-11 add coalescing feature.
> > >
> > > We could merge these two as seperate series if needed.
> > >
> > > CCing various stakeholders (Farah, Michal, Nirmoy) which have raised GT
> > > TLB invalidation issues in the past.
> >
> > Maybe worth mentioning for [1], we try to process TLB invalidations
> > directly from the irq, however we also only process the g2h queue
> > in-order, so if there is something other than TLB invalidation or fault
> > earlier in the queue then we do nothing useful from the irq and just
> > return, that is until the wq can eventually process those earlier items
> > that couldn't be processed directly from the irq. In the past
>
> Seen this recently :
>
> <3> [3763.731822] xe 0000:03:00.0: [drm] *ERROR* GT0: g2h outstanding: 611
> <snip>
> <6> [3727.857273] [IGT] xe_evict: executing
> <3> [3730.165480] xe 0000:03:00.0: [drm] *ERROR* TILE0 [GTT] GT0: TLB
> invalidation time'd out, seqno=26858, recv=2685
Missing the last digit of '2685'?
>
> Which I think fits your description. This series should help but not sure
> how much.
>
From arch level if this is a continued problem, perhaps we should ask
for a dedicated G2H queue for TLB invalidation done responses. It seems
like a fairly reasonable ask to me as TLB invalidations really shouldn't
get stuck behind other G2H processing...
Matt
>
> Regards,
>
> Nirmoy
>
> > I have seen TLB timeouts where the TLB invalidation is clearly in the
> > g2h queue (and has been for a while), but is stuck behind something
> > earlier in the queue that needs the wq, but system is under such a heavy
> > load that the wq can't be scheduled in a timely manner.
> >
> > >
> > > v2:
> > > - Fix CI issues
> > > - Clean up some of the series / patch structure
> > >
> > > Matt
> > >
> > > [1]
> > > https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/799#note_2449497
> > > [2] https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/2162
> > > [3] https://patchwork.freedesktop.org/series/133001/
> > >
> > > Matthew Brost (11):
> > > drm/xe: Add xe_gt_tlb_invalidation_fence_init helper
> > > drm/xe: Drop xe_gt_tlb_invalidation_wait
> > > drm/xe: s/tlb_invalidation.lock/tlb_invalidation.fence_lock
> > > drm/xe: Add tlb_invalidation.seqno_lock
> > > drm/xe: Add xe_gt_tlb_invalidation_done_handler
> > > drm/xe: Add send tlb invalidation helpers
> > > drm/xe: Add xe_guc_tlb_invalidation layer
> > > drm/xe: Add multi-client support for GT TLB invalidations
> > > drm/xe: Add GT TLB invalidation coalescing
> > > drm/xe: Add GT TLB invalidation coalesce tracepoints
> > > drm/xe: Add GT TLB invalidation watermark debugfs
> > >
> > > drivers/gpu/drm/xe/Makefile | 1 +
> > > drivers/gpu/drm/xe/xe_debugfs.c | 38 ++
> > > drivers/gpu/drm/xe/xe_device.c | 3 +
> > > drivers/gpu/drm/xe/xe_device_types.h | 5 +
> > > drivers/gpu/drm/xe/xe_ggtt.c | 21 +-
> > > drivers/gpu/drm/xe/xe_ggtt_types.h | 5 +
> > > drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 641 ++++++++++++------
> > > drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 26 +-
> > > .../gpu/drm/xe/xe_gt_tlb_invalidation_types.h | 41 ++
> > > drivers/gpu/drm/xe/xe_gt_types.h | 43 +-
> > > drivers/gpu/drm/xe/xe_guc_ct.c | 2 +-
> > > drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c | 145 ++++
> > > drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h | 18 +
> > > drivers/gpu/drm/xe/xe_pt.c | 33 +-
> > > drivers/gpu/drm/xe/xe_trace.h | 10 +
> > > drivers/gpu/drm/xe/xe_vm.c | 45 +-
> > > drivers/gpu/drm/xe/xe_vm_types.h | 3 +
> > > 17 files changed, 801 insertions(+), 279 deletions(-)
> > > create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
> > > create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h
> > >
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature.
2024-07-09 16:35 ` Matthew Brost
@ 2024-07-09 16:42 ` Nirmoy Das
2024-07-09 21:23 ` Matthew Brost
0 siblings, 1 reply; 32+ messages in thread
From: Nirmoy Das @ 2024-07-09 16:42 UTC (permalink / raw)
To: Matthew Brost
Cc: Matthew Auld, intel-xe, nirmoy.das, farah.kassabri,
michal.wajdeczko
[-- Attachment #1: Type: text/plain, Size: 5273 bytes --]
On 7/9/2024 6:35 PM, Matthew Brost wrote:
> On Tue, Jul 09, 2024 at 06:08:54PM +0200, Nirmoy Das wrote:
>> On 7/9/2024 11:57 AM, Matthew Auld wrote:
>>> Hi,
>>>
>>> On 08/07/2024 05:03, Matthew Brost wrote:
>>>> While debuging [1] an issue was identified in which if too many GT TLB
>>>> invalidations are issued to the GuC, the GuC can get overwhelmed to the
>>>> point scheduling of jobs starts to stall. To avoid this, hold and
>>>> coalesce GT TLB invalidations in the KMD if a watermark of pending
>>>> invalidations is past. Add gitlab for this issue has also been opened
>>>> [2].
>>>>
>>>> Layering issues with GT TLB invalidations are known [3] which needed to
>>>> be fixed first before adding this new feature.
>>>>
>>>> - Patches 1-8 fix the layering.
>>>> - Patches 9-11 add coalescing feature.
>>>>
>>>> We could merge these two as seperate series if needed.
>>>>
>>>> CCing various stakeholders (Farah, Michal, Nirmoy) which have raised GT
>>>> TLB invalidation issues in the past.
>>> Maybe worth mentioning for [1], we try to process TLB invalidations
>>> directly from the irq, however we also only process the g2h queue
>>> in-order, so if there is something other than TLB invalidation or fault
>>> earlier in the queue then we do nothing useful from the irq and just
>>> return, that is until the wq can eventually process those earlier items
>>> that couldn't be processed directly from the irq. In the past
>> Seen this recently :
>>
>> <3> [3763.731822] xe 0000:03:00.0: [drm] *ERROR* GT0: g2h outstanding: 611
>> <snip>
>> <6> [3727.857273] [IGT] xe_evict: executing
>> <3> [3730.165480] xe 0000:03:00.0: [drm] *ERROR* TILE0 [GTT] GT0: TLB
>> invalidation time'd out, seqno=26858, recv=2685
> Missing the last digit of '2685'?
oops, yes:
<3> [3730.165480] xe 0000:03:00.0: [drm] *ERROR* TILE0 [GTT] GT0: TLB
invalidation time'd out, seqno=26858, recv=26857
>
>> Which I think fits your description. This series should help but not sure
>> how much.
>>
> From arch level if this is a continued problem, perhaps we should ask
> for a dedicated G2H queue for TLB invalidation done responses. It seems
> like a fairly reasonable ask to me as TLB invalidations really shouldn't
> get stuck behind other G2H processing...
Yes, that should work really well. I am currently trying out this series
but haven't manged to reproduce the issue without/without the series
reliably yet.
Regards,
Nirmoy
> Matt
>
>> Regards,
>>
>> Nirmoy
>>
>>> I have seen TLB timeouts where the TLB invalidation is clearly in the
>>> g2h queue (and has been for a while), but is stuck behind something
>>> earlier in the queue that needs the wq, but system is under such a heavy
>>> load that the wq can't be scheduled in a timely manner.
>>>
>>>> v2:
>>>> - Fix CI issues
>>>> - Clean up some of the series / patch structure
>>>>
>>>> Matt
>>>>
>>>> [1]
>>>> https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/799#note_2449497
>>>> [2]https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/2162
>>>> [3]https://patchwork.freedesktop.org/series/133001/
>>>>
>>>> Matthew Brost (11):
>>>> drm/xe: Add xe_gt_tlb_invalidation_fence_init helper
>>>> drm/xe: Drop xe_gt_tlb_invalidation_wait
>>>> drm/xe: s/tlb_invalidation.lock/tlb_invalidation.fence_lock
>>>> drm/xe: Add tlb_invalidation.seqno_lock
>>>> drm/xe: Add xe_gt_tlb_invalidation_done_handler
>>>> drm/xe: Add send tlb invalidation helpers
>>>> drm/xe: Add xe_guc_tlb_invalidation layer
>>>> drm/xe: Add multi-client support for GT TLB invalidations
>>>> drm/xe: Add GT TLB invalidation coalescing
>>>> drm/xe: Add GT TLB invalidation coalesce tracepoints
>>>> drm/xe: Add GT TLB invalidation watermark debugfs
>>>>
>>>> drivers/gpu/drm/xe/Makefile | 1 +
>>>> drivers/gpu/drm/xe/xe_debugfs.c | 38 ++
>>>> drivers/gpu/drm/xe/xe_device.c | 3 +
>>>> drivers/gpu/drm/xe/xe_device_types.h | 5 +
>>>> drivers/gpu/drm/xe/xe_ggtt.c | 21 +-
>>>> drivers/gpu/drm/xe/xe_ggtt_types.h | 5 +
>>>> drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 641 ++++++++++++------
>>>> drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 26 +-
>>>> .../gpu/drm/xe/xe_gt_tlb_invalidation_types.h | 41 ++
>>>> drivers/gpu/drm/xe/xe_gt_types.h | 43 +-
>>>> drivers/gpu/drm/xe/xe_guc_ct.c | 2 +-
>>>> drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c | 145 ++++
>>>> drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h | 18 +
>>>> drivers/gpu/drm/xe/xe_pt.c | 33 +-
>>>> drivers/gpu/drm/xe/xe_trace.h | 10 +
>>>> drivers/gpu/drm/xe/xe_vm.c | 45 +-
>>>> drivers/gpu/drm/xe/xe_vm_types.h | 3 +
>>>> 17 files changed, 801 insertions(+), 279 deletions(-)
>>>> create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
>>>> create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h
>>>>
[-- Attachment #2: Type: text/html, Size: 7616 bytes --]
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature.
2024-07-09 16:42 ` Nirmoy Das
@ 2024-07-09 21:23 ` Matthew Brost
0 siblings, 0 replies; 32+ messages in thread
From: Matthew Brost @ 2024-07-09 21:23 UTC (permalink / raw)
To: Nirmoy Das
Cc: Matthew Auld, intel-xe, nirmoy.das, farah.kassabri,
michal.wajdeczko
On Tue, Jul 09, 2024 at 06:42:34PM +0200, Nirmoy Das wrote:
> On 7/9/2024 6:35 PM, Matthew Brost wrote:
>
> On Tue, Jul 09, 2024 at 06:08:54PM +0200, Nirmoy Das wrote:
>
> On 7/9/2024 11:57 AM, Matthew Auld wrote:
>
> Hi,
>
> On 08/07/2024 05:03, Matthew Brost wrote:
>
> While debuging [1] an issue was identified in which if too many GT TLB
> invalidations are issued to the GuC, the GuC can get overwhelmed to the
> point scheduling of jobs starts to stall. To avoid this, hold and
> coalesce GT TLB invalidations in the KMD if a watermark of pending
> invalidations is past. Add gitlab for this issue has also been opened
> [2].
>
> Layering issues with GT TLB invalidations are known [3] which needed to
> be fixed first before adding this new feature.
>
> - Patches 1-8 fix the layering.
> - Patches 9-11 add coalescing feature.
>
> We could merge these two as seperate series if needed.
>
> CCing various stakeholders (Farah, Michal, Nirmoy) which have raised GT
> TLB invalidation issues in the past.
>
> Maybe worth mentioning for [1], we try to process TLB invalidations
> directly from the irq, however we also only process the g2h queue
> in-order, so if there is something other than TLB invalidation or fault
> earlier in the queue then we do nothing useful from the irq and just
> return, that is until the wq can eventually process those earlier items
> that couldn't be processed directly from the irq. In the past
>
> Seen this recently :
>
> <3> [3763.731822] xe 0000:03:00.0: [drm] *ERROR* GT0: g2h outstanding: 611
> <snip>
> <6> [3727.857273] [IGT] xe_evict: executing
> <3> [3730.165480] xe 0000:03:00.0: [drm] *ERROR* TILE0 [GTT] GT0: TLB
> invalidation time'd out, seqno=26858, recv=2685
>
> Missing the last digit of '2685'?
>
> oops, yes:
>
> <3> [3730.165480] xe 0000:03:00.0: [drm] *ERROR* TILE0 [GTT] GT0: TLB
> invalidation time'd out, seqno=26858, recv=26857
>
>
>
> Which I think fits your description. This series should help but not sure
> how much.
>
>
> From arch level if this is a continued problem, perhaps we should ask
> for a dedicated G2H queue for TLB invalidation done responses. It seems
> like a fairly reasonable ask to me as TLB invalidations really shouldn't
> get stuck behind other G2H processing...
>
> Yes, that should work really well. I am currently trying out this
> series but haven't manged to reproduce the issue without/without the
> series reliably yet.
>
> Regards,
>
Also worth mentioning that I was able to prove this series helped with
the scheduler starvition I issue I was seeing [1] which triggered me
writing this series. Will include this in my next cover letter if I need
to send another rev.
Matt
[1] https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/799#note_2483150
> Nirmoy
>
> Matt
>
>
> Regards,
>
> Nirmoy
>
>
> I have seen TLB timeouts where the TLB invalidation is clearly in the
> g2h queue (and has been for a while), but is stuck behind something
> earlier in the queue that needs the wq, but system is under such a heavy
> load that the wq can't be scheduled in a timely manner.
>
>
> v2:
> - Fix CI issues
> - Clean up some of the series / patch structure
>
> Matt
>
> [1]
> [1]https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/799#note_2449497
> [2] [2]https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/2162
> [3] [3]https://patchwork.freedesktop.org/series/133001/
>
> Matthew Brost (11):
> drm/xe: Add xe_gt_tlb_invalidation_fence_init helper
> drm/xe: Drop xe_gt_tlb_invalidation_wait
> drm/xe: s/tlb_invalidation.lock/tlb_invalidation.fence_lock
> drm/xe: Add tlb_invalidation.seqno_lock
> drm/xe: Add xe_gt_tlb_invalidation_done_handler
> drm/xe: Add send tlb invalidation helpers
> drm/xe: Add xe_guc_tlb_invalidation layer
> drm/xe: Add multi-client support for GT TLB invalidations
> drm/xe: Add GT TLB invalidation coalescing
> drm/xe: Add GT TLB invalidation coalesce tracepoints
> drm/xe: Add GT TLB invalidation watermark debugfs
>
> drivers/gpu/drm/xe/Makefile | 1 +
> drivers/gpu/drm/xe/xe_debugfs.c | 38 ++
> drivers/gpu/drm/xe/xe_device.c | 3 +
> drivers/gpu/drm/xe/xe_device_types.h | 5 +
> drivers/gpu/drm/xe/xe_ggtt.c | 21 +-
> drivers/gpu/drm/xe/xe_ggtt_types.h | 5 +
> drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 641 ++++++++++++------
> drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 26 +-
> .../gpu/drm/xe/xe_gt_tlb_invalidation_types.h | 41 ++
> drivers/gpu/drm/xe/xe_gt_types.h | 43 +-
> drivers/gpu/drm/xe/xe_guc_ct.c | 2 +-
> drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c | 145 ++++
> drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h | 18 +
> drivers/gpu/drm/xe/xe_pt.c | 33 +-
> drivers/gpu/drm/xe/xe_trace.h | 10 +
> drivers/gpu/drm/xe/xe_vm.c | 45 +-
> drivers/gpu/drm/xe/xe_vm_types.h | 3 +
> 17 files changed, 801 insertions(+), 279 deletions(-)
> create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
> create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h
>
> References
>
> 1. https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/799#note_2449497
> 2. https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/2162
> 3. https://patchwork.freedesktop.org/series/133001/
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH v2 07/11] drm/xe: Add xe_guc_tlb_invalidation layer
2024-07-08 4:03 ` [PATCH v2 07/11] drm/xe: Add xe_guc_tlb_invalidation layer Matthew Brost
@ 2024-07-09 21:31 ` Michal Wajdeczko
2024-07-10 4:02 ` Matthew Brost
0 siblings, 1 reply; 32+ messages in thread
From: Michal Wajdeczko @ 2024-07-09 21:31 UTC (permalink / raw)
To: Matthew Brost, intel-xe; +Cc: nirmoy.das, farah.kassabri
Hi Matt,
few nits (as usual)
On 08.07.2024 06:03, Matthew Brost wrote:
> Move GuC specific TLB invalidation into dedicated layer.
>
> v2:
> - Remove XXX comment
>
> Signed-off-by: Matthew Brost <matthew.brost@intel.com>
> ---
> drivers/gpu/drm/xe/Makefile | 1 +
> drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 121 +--------------
> drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 4 +-
> .../gpu/drm/xe/xe_gt_tlb_invalidation_types.h | 13 ++
> drivers/gpu/drm/xe/xe_gt_types.h | 2 +
> drivers/gpu/drm/xe/xe_guc_ct.c | 2 +-
> drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c | 143 ++++++++++++++++++
> drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h | 18 +++
> 8 files changed, 186 insertions(+), 118 deletions(-)
> create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
> create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h
>
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> index 628c245c4822..21f4ddf1a946 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -83,6 +83,7 @@ xe-y += xe_bb.o \
> xe_guc_log.o \
> xe_guc_pc.o \
> xe_guc_submit.o \
> + xe_guc_tlb_invalidation.o \
> xe_heci_gsc.o \
> xe_hw_engine.o \
> xe_hw_engine_class_sysfs.o \
> diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> index 79d1ed138db5..4b7b5f8205f9 100644
> --- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> +++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> @@ -7,13 +7,12 @@
>
> #include "xe_gt_tlb_invalidation.h"
>
> -#include "abi/guc_actions_abi.h"
> #include "xe_device.h"
> #include "xe_force_wake.h"
> #include "xe_gt.h"
> #include "xe_gt_printk.h"
> -#include "xe_guc.h"
> #include "xe_guc_ct.h"
> +#include "xe_guc_tlb_invalidation.h"
> #include "xe_mmio.h"
> #include "xe_sriov.h"
> #include "xe_trace.h"
> @@ -85,6 +84,7 @@ int xe_gt_tlb_invalidation_init(struct xe_gt *gt)
> spin_lock_init(>->tlb_invalidation.fence_lock);
> INIT_DELAYED_WORK(>->tlb_invalidation.fence_tdr,
> xe_gt_tlb_fence_timeout);
> + gt->tlb_invalidation.ops = xe_guc_tlb_invalidation_get_ops(>->uc.guc);
what about force_execlist=true mode ?
shouldn't we have nop_ops (or direct_ops) and let the GuC code replace
ops when selected/in use ?
>
> return drmm_mutex_init(>_to_xe(gt)->drm,
> >->tlb_invalidation.seqno_lock);
> @@ -157,97 +157,16 @@ static bool tlb_invalidation_seqno_past(struct xe_gt *gt, int seqno)
> return seqno_recv >= seqno;
> }
>
> -static int send_tlb_invalidation(struct xe_guc *guc, u32 *action, int len)
> -{
> - struct xe_gt *gt = guc_to_gt(guc);
> -
> - xe_gt_assert(gt, action[1]); /* Seqno */
> - lockdep_assert_held(>->tlb_invalidation.seqno_lock);
> -
> - /*
> - * XXX: The seqno algorithm relies on TLB invalidation being processed
> - * in order which they currently are, if that changes the algorithm will
> - * need to be updated.
> - */
> -
> - return xe_guc_ct_send(&guc->ct, action, len,
> - G2H_LEN_DW_TLB_INVALIDATE, 1);
> -}
> -
> -#define MAKE_INVAL_OP(type) ((type << XE_GUC_TLB_INVAL_TYPE_SHIFT) | \
> - XE_GUC_TLB_INVAL_MODE_HEAVY << XE_GUC_TLB_INVAL_MODE_SHIFT | \
> - XE_GUC_TLB_INVAL_FLUSH_CACHE)
> -
> static int send_tlb_invalidation_ggtt(struct xe_gt *gt, int seqno)
> {
> - u32 action[] = {
> - XE_GUC_ACTION_TLB_INVALIDATION,
> - seqno,
> - MAKE_INVAL_OP(XE_GUC_TLB_INVAL_GUC),
> - };
> -
> - return send_tlb_invalidation(>->uc.guc, action, ARRAY_SIZE(action));
> + return gt->tlb_invalidation.ops->tlb_invalidation_ggtt(gt, seqno);
> }
>
> static int send_tlb_invalidation_ppgtt(struct xe_gt *gt, u64 start, u64 end,
> u32 asid, int seqno)
> {
> -#define MAX_TLB_INVALIDATION_LEN 7
> - u32 action[MAX_TLB_INVALIDATION_LEN];
> - int len = 0;
> -
> - action[len++] = XE_GUC_ACTION_TLB_INVALIDATION;
> - action[len++] = seqno;
> - if (!gt_to_xe(gt)->info.has_range_tlb_invalidation) {
> - action[len++] = MAKE_INVAL_OP(XE_GUC_TLB_INVAL_FULL);
> - } else {
> - u64 orig_start = start;
> - u64 length = end - start;
> - u64 align;
> -
> - if (length < SZ_4K)
> - length = SZ_4K;
> -
> - /*
> - * We need to invalidate a higher granularity if start address
> - * is not aligned to length. When start is not aligned with
> - * length we need to find the length large enough to create an
> - * address mask covering the required range.
> - */
> - align = roundup_pow_of_two(length);
> - start = ALIGN_DOWN(start, align);
> - end = ALIGN(end, align);
> - length = align;
> - while (start + length < end) {
> - length <<= 1;
> - start = ALIGN_DOWN(orig_start, length);
> - }
> -
> - /*
> - * Minimum invalidation size for a 2MB page that the hardware
> - * expects is 16MB
> - */
> - if (length >= SZ_2M) {
> - length = max_t(u64, SZ_16M, length);
> - start = ALIGN_DOWN(orig_start, length);
> - }
> -
> - xe_gt_assert(gt, length >= SZ_4K);
> - xe_gt_assert(gt, is_power_of_2(length));
> - xe_gt_assert(gt, !(length & GENMASK(ilog2(SZ_16M) - 1,
> - ilog2(SZ_2M) + 1)));
> - xe_gt_assert(gt, IS_ALIGNED(start, length));
> -
> - action[len++] = MAKE_INVAL_OP(XE_GUC_TLB_INVAL_PAGE_SELECTIVE);
> - action[len++] = asid;
> - action[len++] = lower_32_bits(start);
> - action[len++] = upper_32_bits(start);
> - action[len++] = ilog2(length) - ilog2(SZ_4K);
> - }
> -
> - xe_gt_assert(gt, len <= MAX_TLB_INVALIDATION_LEN);
> -
> - return send_tlb_invalidation(>->uc.guc, action, len);
> + return gt->tlb_invalidation.ops->tlb_invalidation_ppgtt(gt, start, end,
> + asid, seqno);
> }
>
> static void xe_gt_tlb_invalidation_fence_prep(struct xe_gt *gt,
> @@ -278,10 +197,6 @@ static void xe_gt_tlb_invalidation_fence_prep(struct xe_gt *gt,
> gt->tlb_invalidation.seqno = 1;
> }
>
> -#define MAKE_INVAL_OP(type) ((type << XE_GUC_TLB_INVAL_TYPE_SHIFT) | \
> - XE_GUC_TLB_INVAL_MODE_HEAVY << XE_GUC_TLB_INVAL_MODE_SHIFT | \
> - XE_GUC_TLB_INVAL_FLUSH_CACHE)
> -
> static int __xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt,
> struct xe_gt_tlb_invalidation_fence *fence)
> {
> @@ -420,7 +335,7 @@ int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
> *
> * Update recv seqno, signal any GT TLB invalidation fences, and restart TDR
> */
> -static void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt, int seqno)
> +void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt, int seqno)
> {
> struct xe_device *xe = gt_to_xe(gt);
> struct xe_gt_tlb_invalidation_fence *fence, *next;
> @@ -469,30 +384,6 @@ static void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt, int seqno)
> spin_unlock_irqrestore(>->tlb_invalidation.pending_lock, flags);
> }
>
> -/**
> - * xe_guc_tlb_invalidation_done_handler - TLB invalidation done handler
> - * @guc: guc
> - * @msg: message indicating TLB invalidation done
> - * @len: length of message
> - *
> - * Parse seqno of TLB invalidation, wake any waiters for seqno, and signal any
> - * invalidation fences for seqno. Algorithm for this depends on seqno being
> - * received in-order and asserts this assumption.
> - *
> - * Return: 0 on success, -EPROTO for malformed messages.
> - */
> -int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
> -{
> - struct xe_gt *gt = guc_to_gt(guc);
> -
> - if (unlikely(len != 1))
> - return -EPROTO;
> -
> - xe_gt_tlb_invalidation_done_handler(gt, msg[0]);
> -
> - return 0;
> -}
> -
> static const char *
> invalidation_fence_get_driver_name(struct dma_fence *dma_fence)
> {
> diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
> index cbf49b3d0265..ee532ad64aac 100644
> --- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
> +++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
> @@ -11,7 +11,6 @@
> #include "xe_gt_tlb_invalidation_types.h"
>
> struct xe_gt;
> -struct xe_guc;
> struct xe_vma;
>
> int xe_gt_tlb_invalidation_init(struct xe_gt *gt);
> @@ -23,11 +22,12 @@ int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
> int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
> struct xe_gt_tlb_invalidation_fence *fence,
> u64 start, u64 end, u32 asid);
> -int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len);
>
> void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
> struct xe_gt_tlb_invalidation_fence *fence);
>
> +void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt, int seqno);
> +
> static inline void
> xe_gt_tlb_invalidation_fence_wait(struct xe_gt_tlb_invalidation_fence *fence)
> {
> diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
> index 934c828efe31..1abb8692d14b 100644
> --- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
> +++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
> @@ -8,6 +8,8 @@
>
> #include <linux/dma-fence.h>
>
> +struct xe_gt;
> +
> /**
> * struct xe_gt_tlb_invalidation_fence - XE GT TLB invalidation fence
> *
> @@ -25,4 +27,15 @@ struct xe_gt_tlb_invalidation_fence {
> ktime_t invalidation_time;
> };
>
> +/**
> + * struct xe_gt_tlb_invalidation_ops - Xe GT TLB invalidation operations
> + */
> +struct xe_gt_tlb_invalidation_ops {
> + /** @tlb_invalidation_ggtt: TLB invalidation GGTT */
> + int (*tlb_invalidation_ggtt)(struct xe_gt *gt, int seqno);
> + /** @tlb_invalidation_ppgtt: TLB invalidation PPGTT */
> + int (*tlb_invalidation_ppgtt)(struct xe_gt *gt, u64 start, u64 end,
> + u32 asid, int seqno);
do we need full "tlb_invalidation" prefix here ?
maybe just:
int (*ggtt)(struct xe_gt *gt, int seqno);
int (*ppgtt)(struct xe_gt *gt, u64 start, u64 end,
as this will used like:
return gt->tlb_invalidation.ops->ggtt(gt, seqno);
or
return gt->tlb_invalidation.ops->ppgtt(gt, start, end,...
> +};
> +
> #endif
> diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
> index fb280f058cdc..4b9740a68457 100644
> --- a/drivers/gpu/drm/xe/xe_gt_types.h
> +++ b/drivers/gpu/drm/xe/xe_gt_types.h
> @@ -169,6 +169,8 @@ struct xe_gt {
>
> /** @tlb_invalidation: TLB invalidation state */
> struct {
> + /** @tlb_invalidation.ops: TLB invalidation ops */
> + const struct xe_gt_tlb_invalidation_ops *ops;
> /** @tlb_invalidation.seqno_lock: TLB invalidation seqno lock */
> struct mutex seqno_lock;
> /**
> diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
> index 7d2e937da1d8..b09423590f62 100644
> --- a/drivers/gpu/drm/xe/xe_guc_ct.c
> +++ b/drivers/gpu/drm/xe/xe_guc_ct.c
> @@ -23,10 +23,10 @@
> #include "xe_gt_printk.h"
> #include "xe_gt_sriov_pf_control.h"
> #include "xe_gt_sriov_pf_monitor.h"
> -#include "xe_gt_tlb_invalidation.h"
> #include "xe_guc.h"
> #include "xe_guc_relay.h"
> #include "xe_guc_submit.h"
> +#include "xe_guc_tlb_invalidation.h"
> #include "xe_map.h"
> #include "xe_pm.h"
> #include "xe_trace_guc.h"
> diff --git a/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
> new file mode 100644
> index 000000000000..b6fd61bb77ba
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
> @@ -0,0 +1,143 @@
> +// SPDX-License-Identifier: MIT
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#include "abi/guc_actions_abi.h"
> +
> +#include "xe_assert.h"
> +#include "xe_device.h"
> +#include "xe_gt.h"
> +#include "xe_gt_printk.h"
> +#include "xe_gt_tlb_invalidation.h"
> +#include "xe_guc.h"
> +#include "xe_guc_ct.h"
> +#include "xe_guc_tlb_invalidation.h"
> +
> +static int send_tlb_invalidation(struct xe_guc *guc, u32 *action, int len)
const u32 *action
and len should be unsigned
> +{
> + struct xe_gt *gt = guc_to_gt(guc);
> +
> + xe_gt_assert(gt, action[1]); /* Seqno */
it would be nice to have that "1" as part of the GuC ABI,
maybe at least as:
#define H2G_TLB_INVALIDATE_MSG_1_SEQNO GUC_HXG_REQUEST_MSG_n_DATAn
xe_gt_assert(gt, FIELD_GET(H2G_TLB_INVALIDATE_MSG_1_SEQNO, action[1]);
> + lockdep_assert_held(>->tlb_invalidation.seqno_lock);
> +
> + return xe_guc_ct_send(&guc->ct, action, len,
> + G2H_LEN_DW_TLB_INVALIDATE, 1);
> +}
> +
> +#define MAKE_INVAL_OP(type) ((type << XE_GUC_TLB_INVAL_TYPE_SHIFT) | \
> + XE_GUC_TLB_INVAL_MODE_HEAVY << XE_GUC_TLB_INVAL_MODE_SHIFT | \
> + XE_GUC_TLB_INVAL_FLUSH_CACHE)
maybe it's time to convert SHIFT-based GuC ABI definitions into
mask-based and use FIELD_PREP as we do elsewhere
> +
> +static int send_tlb_invalidation_ggtt(struct xe_gt *gt, int seqno)
shouldn't we take "guc" instead of "gt" ? see below
> +{
> + u32 action[] = {
> + XE_GUC_ACTION_TLB_INVALIDATION,
> + seqno,
> + MAKE_INVAL_OP(XE_GUC_TLB_INVAL_GUC),
> + };
> +
> + return send_tlb_invalidation(>->uc.guc, action, ARRAY_SIZE(action));
> +}
> +
> +static int send_tlb_invalidation_ppgtt(struct xe_gt *gt, u64 start, u64 end,
> + u32 asid, int seqno)
> +{
> +#define MAX_TLB_INVALIDATION_LEN 7
this should be defined as part of the GuC ABI
> + u32 action[MAX_TLB_INVALIDATION_LEN];
> + int len = 0;
> +
> + action[len++] = XE_GUC_ACTION_TLB_INVALIDATION;
> + action[len++] = seqno;
> + if (!gt_to_xe(gt)->info.has_range_tlb_invalidation) {
> + action[len++] = MAKE_INVAL_OP(XE_GUC_TLB_INVAL_FULL);
> + } else {
> + u64 orig_start = start;
> + u64 length = end - start;
> + u64 align;
> +
> + if (length < SZ_4K)
> + length = SZ_4K;
> +
> + /*
> + * We need to invalidate a higher granularity if start address
> + * is not aligned to length. When start is not aligned with
> + * length we need to find the length large enough to create an
> + * address mask covering the required range.
> + */
> + align = roundup_pow_of_two(length);
> + start = ALIGN_DOWN(start, align);
> + end = ALIGN(end, align);
> + length = align;
> + while (start + length < end) {
> + length <<= 1;
> + start = ALIGN_DOWN(orig_start, length);
> + }
> +
> + /*
> + * Minimum invalidation size for a 2MB page that the hardware
> + * expects is 16MB
> + */
> + if (length >= SZ_2M) {
> + length = max_t(u64, SZ_16M, length);
> + start = ALIGN_DOWN(orig_start, length);
> + }
> +
> + xe_gt_assert(gt, length >= SZ_4K);
> + xe_gt_assert(gt, is_power_of_2(length));
> + xe_gt_assert(gt, !(length & GENMASK(ilog2(SZ_16M) - 1,
> + ilog2(SZ_2M) + 1)));
> + xe_gt_assert(gt, IS_ALIGNED(start, length));
> +
> + action[len++] = MAKE_INVAL_OP(XE_GUC_TLB_INVAL_PAGE_SELECTIVE);
> + action[len++] = asid;
> + action[len++] = lower_32_bits(start);
> + action[len++] = upper_32_bits(start);
> + action[len++] = ilog2(length) - ilog2(SZ_4K);
> + }
> +
> + xe_gt_assert(gt, len <= MAX_TLB_INVALIDATION_LEN);
> +
> + return send_tlb_invalidation(>->uc.guc, action, len);
> +}
> +
> +static const struct xe_gt_tlb_invalidation_ops guc_tlb_invalidation_ops = {
> + .tlb_invalidation_ppgtt = send_tlb_invalidation_ppgtt,
> + .tlb_invalidation_ggtt = send_tlb_invalidation_ggtt,
> +};
maybe it's overkill, but what about using the following code layout:
// pure GuC code
static int guc_send_tlb_invalidation(guc, action, len)
{
}
// pure GuC code
static int guc_send_tlb_invalidation_ggtt(guc, seqno)
{
return guc_send_tlb_invalidation(guc, ...);
}
// ops glue code
static int tlb_invalidation_ggtt_by_guc(gt, seqno)
{
return guc_send_tlb_invalidation_ggtt(guc, ...);
}
const struct xe_gt_tlb_invalidation_ops guc_tlb_invalidation_ops = {
.ggtt = tlb_invalidation_ggtt_by_guc,
};
> +
> +/**
> + * xe_guc_tlb_invalidation_get_ops - Get Guc TLB invalidation ops
> + * @guc: guc
> + *
> + * Return: xe_gt_tlb_invalidation_ops for GuC TLB invalidation
> + */
> +const struct xe_gt_tlb_invalidation_ops*
> +xe_guc_tlb_invalidation_get_ops(struct xe_guc *guc)
since we don't use "guc" here and don't have any logic behind this
function, so maybe easier/cleaner would be just to expose ops directly
in the header as:
extern const struct xe_gt_tlb_invalidation_ops guc_tlb_invalidation_ops;
or since we may want to postpone GuC ops registration until we know we
will use the GuC, expose function in xe_gt_tlb_invalidation.h:
void xe_gt_tlb_invalidation_set_ops(
struct xe_gt *gt,
const struct xe_gt_tlb_invalidation_ops *ops);
> +{
> + return &guc_tlb_invalidation_ops;
> +}
> +
> +/**
> + * xe_guc_tlb_invalidation_done_handler - GuC TLB invalidation done handler
> + * @guc: guc
> + * @msg: message indicating TLB invalidation done
> + * @len: length of message
> + *
> + * Parse seqno of TLB invalidation,
only this part seems to be valid, all below belongs more to the
description of the xe_gt_tlb_invalidation_done_handler() that maybe we
should explicitly refer to ?
> wake any waiters for seqno, and signal any
> + * invalidation fences for seqno. Algorithm for this depends on seqno being
> + * received in-order and asserts this assumption.
> + *
> + * Return: 0 on success, -EPROTO for malformed messages.
> + */
> +int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
> +{
> + struct xe_gt *gt = guc_to_gt(guc);
> +
> + if (unlikely(len != 1))
this magic "1" should be part of the GuC ABI
> + return -EPROTO;
> +
> + xe_gt_tlb_invalidation_done_handler(gt, msg[0]);
> +
> + return 0;
> +}
> diff --git a/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h b/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h
> new file mode 100644
> index 000000000000..44408aae6955
> --- /dev/null
> +++ b/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h
> @@ -0,0 +1,18 @@
> +/* SPDX-License-Identifier: MIT */
> +/*
> + * Copyright © 2024 Intel Corporation
> + */
> +
> +#ifndef _XE_GUC_TLB_INVALIDATION_H_
> +#define _XE_GUC_TLB_INVALIDATION_H_
> +
> +struct xe_guc;
forward decls should be _after_ any includes
> +
> +#include <linux/types.h>
> +
> +const struct xe_gt_tlb_invalidation_ops*
> +xe_guc_tlb_invalidation_get_ops(struct xe_guc *guc);
> +
> +int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len);
> +
> +#endif /* _XE_GUC_TLB_INVALIDATION_H_ */
IIRC in Xe we don't use decorations for closing #endif of include guard
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH v2 07/11] drm/xe: Add xe_guc_tlb_invalidation layer
2024-07-09 21:31 ` Michal Wajdeczko
@ 2024-07-10 4:02 ` Matthew Brost
0 siblings, 0 replies; 32+ messages in thread
From: Matthew Brost @ 2024-07-10 4:02 UTC (permalink / raw)
To: Michal Wajdeczko; +Cc: intel-xe, nirmoy.das, farah.kassabri
On Tue, Jul 09, 2024 at 11:31:59PM +0200, Michal Wajdeczko wrote:
> Hi Matt,
>
> few nits (as usual)
>
> On 08.07.2024 06:03, Matthew Brost wrote:
> > Move GuC specific TLB invalidation into dedicated layer.
> >
> > v2:
> > - Remove XXX comment
> >
> > Signed-off-by: Matthew Brost <matthew.brost@intel.com>
> > ---
> > drivers/gpu/drm/xe/Makefile | 1 +
> > drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 121 +--------------
> > drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h | 4 +-
> > .../gpu/drm/xe/xe_gt_tlb_invalidation_types.h | 13 ++
> > drivers/gpu/drm/xe/xe_gt_types.h | 2 +
> > drivers/gpu/drm/xe/xe_guc_ct.c | 2 +-
> > drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c | 143 ++++++++++++++++++
> > drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h | 18 +++
> > 8 files changed, 186 insertions(+), 118 deletions(-)
> > create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
> > create mode 100644 drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h
> >
> > diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile
> > index 628c245c4822..21f4ddf1a946 100644
> > --- a/drivers/gpu/drm/xe/Makefile
> > +++ b/drivers/gpu/drm/xe/Makefile
> > @@ -83,6 +83,7 @@ xe-y += xe_bb.o \
> > xe_guc_log.o \
> > xe_guc_pc.o \
> > xe_guc_submit.o \
> > + xe_guc_tlb_invalidation.o \
> > xe_heci_gsc.o \
> > xe_hw_engine.o \
> > xe_hw_engine_class_sysfs.o \
> > diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> > index 79d1ed138db5..4b7b5f8205f9 100644
> > --- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> > +++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> > @@ -7,13 +7,12 @@
> >
> > #include "xe_gt_tlb_invalidation.h"
> >
> > -#include "abi/guc_actions_abi.h"
> > #include "xe_device.h"
> > #include "xe_force_wake.h"
> > #include "xe_gt.h"
> > #include "xe_gt_printk.h"
> > -#include "xe_guc.h"
> > #include "xe_guc_ct.h"
> > +#include "xe_guc_tlb_invalidation.h"
> > #include "xe_mmio.h"
> > #include "xe_sriov.h"
> > #include "xe_trace.h"
> > @@ -85,6 +84,7 @@ int xe_gt_tlb_invalidation_init(struct xe_gt *gt)
> > spin_lock_init(>->tlb_invalidation.fence_lock);
> > INIT_DELAYED_WORK(>->tlb_invalidation.fence_tdr,
> > xe_gt_tlb_fence_timeout);
> > + gt->tlb_invalidation.ops = xe_guc_tlb_invalidation_get_ops(>->uc.guc);
>
> what about force_execlist=true mode ?
>
I do this in the follow up patch [1] in which I add support for multiple
TLB invalidaion clients and allow null ops or individual ops. Open to
reworking how I do that, but take a look their first.
[1] https://patchwork.freedesktop.org/patch/602561/?series=135809&rev=2
> shouldn't we have nop_ops (or direct_ops) and let the GuC code replace
> ops when selected/in use ?
>
> >
> > return drmm_mutex_init(>_to_xe(gt)->drm,
> > >->tlb_invalidation.seqno_lock);
> > @@ -157,97 +157,16 @@ static bool tlb_invalidation_seqno_past(struct xe_gt *gt, int seqno)
> > return seqno_recv >= seqno;
> > }
> >
> > -static int send_tlb_invalidation(struct xe_guc *guc, u32 *action, int len)
> > -{
> > - struct xe_gt *gt = guc_to_gt(guc);
> > -
> > - xe_gt_assert(gt, action[1]); /* Seqno */
> > - lockdep_assert_held(>->tlb_invalidation.seqno_lock);
> > -
> > - /*
> > - * XXX: The seqno algorithm relies on TLB invalidation being processed
> > - * in order which they currently are, if that changes the algorithm will
> > - * need to be updated.
> > - */
> > -
> > - return xe_guc_ct_send(&guc->ct, action, len,
> > - G2H_LEN_DW_TLB_INVALIDATE, 1);
> > -}
> > -
> > -#define MAKE_INVAL_OP(type) ((type << XE_GUC_TLB_INVAL_TYPE_SHIFT) | \
> > - XE_GUC_TLB_INVAL_MODE_HEAVY << XE_GUC_TLB_INVAL_MODE_SHIFT | \
> > - XE_GUC_TLB_INVAL_FLUSH_CACHE)
> > -
> > static int send_tlb_invalidation_ggtt(struct xe_gt *gt, int seqno)
> > {
> > - u32 action[] = {
> > - XE_GUC_ACTION_TLB_INVALIDATION,
> > - seqno,
> > - MAKE_INVAL_OP(XE_GUC_TLB_INVAL_GUC),
> > - };
> > -
> > - return send_tlb_invalidation(>->uc.guc, action, ARRAY_SIZE(action));
> > + return gt->tlb_invalidation.ops->tlb_invalidation_ggtt(gt, seqno);
> > }
> >
> > static int send_tlb_invalidation_ppgtt(struct xe_gt *gt, u64 start, u64 end,
> > u32 asid, int seqno)
> > {
> > -#define MAX_TLB_INVALIDATION_LEN 7
> > - u32 action[MAX_TLB_INVALIDATION_LEN];
> > - int len = 0;
> > -
> > - action[len++] = XE_GUC_ACTION_TLB_INVALIDATION;
> > - action[len++] = seqno;
> > - if (!gt_to_xe(gt)->info.has_range_tlb_invalidation) {
> > - action[len++] = MAKE_INVAL_OP(XE_GUC_TLB_INVAL_FULL);
> > - } else {
> > - u64 orig_start = start;
> > - u64 length = end - start;
> > - u64 align;
> > -
> > - if (length < SZ_4K)
> > - length = SZ_4K;
> > -
> > - /*
> > - * We need to invalidate a higher granularity if start address
> > - * is not aligned to length. When start is not aligned with
> > - * length we need to find the length large enough to create an
> > - * address mask covering the required range.
> > - */
> > - align = roundup_pow_of_two(length);
> > - start = ALIGN_DOWN(start, align);
> > - end = ALIGN(end, align);
> > - length = align;
> > - while (start + length < end) {
> > - length <<= 1;
> > - start = ALIGN_DOWN(orig_start, length);
> > - }
> > -
> > - /*
> > - * Minimum invalidation size for a 2MB page that the hardware
> > - * expects is 16MB
> > - */
> > - if (length >= SZ_2M) {
> > - length = max_t(u64, SZ_16M, length);
> > - start = ALIGN_DOWN(orig_start, length);
> > - }
> > -
> > - xe_gt_assert(gt, length >= SZ_4K);
> > - xe_gt_assert(gt, is_power_of_2(length));
> > - xe_gt_assert(gt, !(length & GENMASK(ilog2(SZ_16M) - 1,
> > - ilog2(SZ_2M) + 1)));
> > - xe_gt_assert(gt, IS_ALIGNED(start, length));
> > -
> > - action[len++] = MAKE_INVAL_OP(XE_GUC_TLB_INVAL_PAGE_SELECTIVE);
> > - action[len++] = asid;
> > - action[len++] = lower_32_bits(start);
> > - action[len++] = upper_32_bits(start);
> > - action[len++] = ilog2(length) - ilog2(SZ_4K);
> > - }
> > -
> > - xe_gt_assert(gt, len <= MAX_TLB_INVALIDATION_LEN);
> > -
> > - return send_tlb_invalidation(>->uc.guc, action, len);
> > + return gt->tlb_invalidation.ops->tlb_invalidation_ppgtt(gt, start, end,
> > + asid, seqno);
> > }
> >
> > static void xe_gt_tlb_invalidation_fence_prep(struct xe_gt *gt,
> > @@ -278,10 +197,6 @@ static void xe_gt_tlb_invalidation_fence_prep(struct xe_gt *gt,
> > gt->tlb_invalidation.seqno = 1;
> > }
> >
> > -#define MAKE_INVAL_OP(type) ((type << XE_GUC_TLB_INVAL_TYPE_SHIFT) | \
> > - XE_GUC_TLB_INVAL_MODE_HEAVY << XE_GUC_TLB_INVAL_MODE_SHIFT | \
> > - XE_GUC_TLB_INVAL_FLUSH_CACHE)
> > -
> > static int __xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt,
> > struct xe_gt_tlb_invalidation_fence *fence)
> > {
> > @@ -420,7 +335,7 @@ int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
> > *
> > * Update recv seqno, signal any GT TLB invalidation fences, and restart TDR
> > */
> > -static void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt, int seqno)
> > +void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt, int seqno)
> > {
> > struct xe_device *xe = gt_to_xe(gt);
> > struct xe_gt_tlb_invalidation_fence *fence, *next;
> > @@ -469,30 +384,6 @@ static void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt, int seqno)
> > spin_unlock_irqrestore(>->tlb_invalidation.pending_lock, flags);
> > }
> >
> > -/**
> > - * xe_guc_tlb_invalidation_done_handler - TLB invalidation done handler
> > - * @guc: guc
> > - * @msg: message indicating TLB invalidation done
> > - * @len: length of message
> > - *
> > - * Parse seqno of TLB invalidation, wake any waiters for seqno, and signal any
> > - * invalidation fences for seqno. Algorithm for this depends on seqno being
> > - * received in-order and asserts this assumption.
> > - *
> > - * Return: 0 on success, -EPROTO for malformed messages.
> > - */
> > -int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
> > -{
> > - struct xe_gt *gt = guc_to_gt(guc);
> > -
> > - if (unlikely(len != 1))
> > - return -EPROTO;
> > -
> > - xe_gt_tlb_invalidation_done_handler(gt, msg[0]);
> > -
> > - return 0;
> > -}
> > -
> > static const char *
> > invalidation_fence_get_driver_name(struct dma_fence *dma_fence)
> > {
> > diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
> > index cbf49b3d0265..ee532ad64aac 100644
> > --- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
> > +++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.h
> > @@ -11,7 +11,6 @@
> > #include "xe_gt_tlb_invalidation_types.h"
> >
> > struct xe_gt;
> > -struct xe_guc;
> > struct xe_vma;
> >
> > int xe_gt_tlb_invalidation_init(struct xe_gt *gt);
> > @@ -23,11 +22,12 @@ int xe_gt_tlb_invalidation_vma(struct xe_gt *gt,
> > int xe_gt_tlb_invalidation_range(struct xe_gt *gt,
> > struct xe_gt_tlb_invalidation_fence *fence,
> > u64 start, u64 end, u32 asid);
> > -int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len);
> >
> > void xe_gt_tlb_invalidation_fence_init(struct xe_gt *gt,
> > struct xe_gt_tlb_invalidation_fence *fence);
> >
> > +void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt, int seqno);
> > +
> > static inline void
> > xe_gt_tlb_invalidation_fence_wait(struct xe_gt_tlb_invalidation_fence *fence)
> > {
> > diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
> > index 934c828efe31..1abb8692d14b 100644
> > --- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
> > +++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation_types.h
> > @@ -8,6 +8,8 @@
> >
> > #include <linux/dma-fence.h>
> >
> > +struct xe_gt;
> > +
> > /**
> > * struct xe_gt_tlb_invalidation_fence - XE GT TLB invalidation fence
> > *
> > @@ -25,4 +27,15 @@ struct xe_gt_tlb_invalidation_fence {
> > ktime_t invalidation_time;
> > };
> >
> > +/**
> > + * struct xe_gt_tlb_invalidation_ops - Xe GT TLB invalidation operations
> > + */
> > +struct xe_gt_tlb_invalidation_ops {
> > + /** @tlb_invalidation_ggtt: TLB invalidation GGTT */
> > + int (*tlb_invalidation_ggtt)(struct xe_gt *gt, int seqno);
> > + /** @tlb_invalidation_ppgtt: TLB invalidation PPGTT */
> > + int (*tlb_invalidation_ppgtt)(struct xe_gt *gt, u64 start, u64 end,
> > + u32 asid, int seqno);
>
> do we need full "tlb_invalidation" prefix here ?
> maybe just:
>
> int (*ggtt)(struct xe_gt *gt, int seqno);
> int (*ppgtt)(struct xe_gt *gt, u64 start, u64 end,
>
> as this will used like:
>
> return gt->tlb_invalidation.ops->ggtt(gt, seqno);
> or
> return gt->tlb_invalidation.ops->ppgtt(gt, start, end,...
>
Good idea, will change.
>
> > +};
> > +
> > #endif
> > diff --git a/drivers/gpu/drm/xe/xe_gt_types.h b/drivers/gpu/drm/xe/xe_gt_types.h
> > index fb280f058cdc..4b9740a68457 100644
> > --- a/drivers/gpu/drm/xe/xe_gt_types.h
> > +++ b/drivers/gpu/drm/xe/xe_gt_types.h
> > @@ -169,6 +169,8 @@ struct xe_gt {
> >
> > /** @tlb_invalidation: TLB invalidation state */
> > struct {
> > + /** @tlb_invalidation.ops: TLB invalidation ops */
> > + const struct xe_gt_tlb_invalidation_ops *ops;
> > /** @tlb_invalidation.seqno_lock: TLB invalidation seqno lock */
> > struct mutex seqno_lock;
> > /**
> > diff --git a/drivers/gpu/drm/xe/xe_guc_ct.c b/drivers/gpu/drm/xe/xe_guc_ct.c
> > index 7d2e937da1d8..b09423590f62 100644
> > --- a/drivers/gpu/drm/xe/xe_guc_ct.c
> > +++ b/drivers/gpu/drm/xe/xe_guc_ct.c
> > @@ -23,10 +23,10 @@
> > #include "xe_gt_printk.h"
> > #include "xe_gt_sriov_pf_control.h"
> > #include "xe_gt_sriov_pf_monitor.h"
> > -#include "xe_gt_tlb_invalidation.h"
> > #include "xe_guc.h"
> > #include "xe_guc_relay.h"
> > #include "xe_guc_submit.h"
> > +#include "xe_guc_tlb_invalidation.h"
> > #include "xe_map.h"
> > #include "xe_pm.h"
> > #include "xe_trace_guc.h"
> > diff --git a/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
> > new file mode 100644
> > index 000000000000..b6fd61bb77ba
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.c
> > @@ -0,0 +1,143 @@
> > +// SPDX-License-Identifier: MIT
> > +/*
> > + * Copyright © 2024 Intel Corporation
> > + */
> > +
> > +#include "abi/guc_actions_abi.h"
> > +
> > +#include "xe_assert.h"
> > +#include "xe_device.h"
> > +#include "xe_gt.h"
> > +#include "xe_gt_printk.h"
> > +#include "xe_gt_tlb_invalidation.h"
> > +#include "xe_guc.h"
> > +#include "xe_guc_ct.h"
> > +#include "xe_guc_tlb_invalidation.h"
> > +
> > +static int send_tlb_invalidation(struct xe_guc *guc, u32 *action, int len)
>
> const u32 *action
>
> and len should be unsigned
>
Yep.
> > +{
> > + struct xe_gt *gt = guc_to_gt(guc);
> > +
> > + xe_gt_assert(gt, action[1]); /* Seqno */
>
> it would be nice to have that "1" as part of the GuC ABI,
> maybe at least as:
>
> #define H2G_TLB_INVALIDATE_MSG_1_SEQNO GUC_HXG_REQUEST_MSG_n_DATAn
>
> xe_gt_assert(gt, FIELD_GET(H2G_TLB_INVALIDATE_MSG_1_SEQNO, action[1]);
>
Yep.
> > + lockdep_assert_held(>->tlb_invalidation.seqno_lock);
> > +
> > + return xe_guc_ct_send(&guc->ct, action, len,
> > + G2H_LEN_DW_TLB_INVALIDATE, 1);
> > +}
> > +
> > +#define MAKE_INVAL_OP(type) ((type << XE_GUC_TLB_INVAL_TYPE_SHIFT) | \
> > + XE_GUC_TLB_INVAL_MODE_HEAVY << XE_GUC_TLB_INVAL_MODE_SHIFT | \
> > + XE_GUC_TLB_INVAL_FLUSH_CACHE)
>
> maybe it's time to convert SHIFT-based GuC ABI definitions into
> mask-based and use FIELD_PREP as we do elsewhere
>
Can do this. Will likely do this in a patch after this one as existing
code uses this. Can always squash that patch into this one if preferred
too.
> > +
> > +static int send_tlb_invalidation_ggtt(struct xe_gt *gt, int seqno)
>
> shouldn't we take "guc" instead of "gt" ? see below
>
Nope as this a vfunc.
> > +{
> > + u32 action[] = {
> > + XE_GUC_ACTION_TLB_INVALIDATION,
> > + seqno,
> > + MAKE_INVAL_OP(XE_GUC_TLB_INVAL_GUC),
> > + };
> > +
> > + return send_tlb_invalidation(>->uc.guc, action, ARRAY_SIZE(action));
> > +}
> > +
> > +static int send_tlb_invalidation_ppgtt(struct xe_gt *gt, u64 start, u64 end,
> > + u32 asid, int seqno)
> > +{
> > +#define MAX_TLB_INVALIDATION_LEN 7
>
> this should be defined as part of the GuC ABI
>
Sure.
> > + u32 action[MAX_TLB_INVALIDATION_LEN];
> > + int len = 0;
> > +
> > + action[len++] = XE_GUC_ACTION_TLB_INVALIDATION;
> > + action[len++] = seqno;
> > + if (!gt_to_xe(gt)->info.has_range_tlb_invalidation) {
> > + action[len++] = MAKE_INVAL_OP(XE_GUC_TLB_INVAL_FULL);
> > + } else {
> > + u64 orig_start = start;
> > + u64 length = end - start;
> > + u64 align;
> > +
> > + if (length < SZ_4K)
> > + length = SZ_4K;
> > +
> > + /*
> > + * We need to invalidate a higher granularity if start address
> > + * is not aligned to length. When start is not aligned with
> > + * length we need to find the length large enough to create an
> > + * address mask covering the required range.
> > + */
> > + align = roundup_pow_of_two(length);
> > + start = ALIGN_DOWN(start, align);
> > + end = ALIGN(end, align);
> > + length = align;
> > + while (start + length < end) {
> > + length <<= 1;
> > + start = ALIGN_DOWN(orig_start, length);
> > + }
> > +
> > + /*
> > + * Minimum invalidation size for a 2MB page that the hardware
> > + * expects is 16MB
> > + */
> > + if (length >= SZ_2M) {
> > + length = max_t(u64, SZ_16M, length);
> > + start = ALIGN_DOWN(orig_start, length);
> > + }
> > +
> > + xe_gt_assert(gt, length >= SZ_4K);
> > + xe_gt_assert(gt, is_power_of_2(length));
> > + xe_gt_assert(gt, !(length & GENMASK(ilog2(SZ_16M) - 1,
> > + ilog2(SZ_2M) + 1)));
> > + xe_gt_assert(gt, IS_ALIGNED(start, length));
> > +
> > + action[len++] = MAKE_INVAL_OP(XE_GUC_TLB_INVAL_PAGE_SELECTIVE);
> > + action[len++] = asid;
> > + action[len++] = lower_32_bits(start);
> > + action[len++] = upper_32_bits(start);
> > + action[len++] = ilog2(length) - ilog2(SZ_4K);
> > + }
> > +
> > + xe_gt_assert(gt, len <= MAX_TLB_INVALIDATION_LEN);
> > +
> > + return send_tlb_invalidation(>->uc.guc, action, len);
> > +}
> > +
> > +static const struct xe_gt_tlb_invalidation_ops guc_tlb_invalidation_ops = {
> > + .tlb_invalidation_ppgtt = send_tlb_invalidation_ppgtt,
> > + .tlb_invalidation_ggtt = send_tlb_invalidation_ggtt,
> > +};
>
> maybe it's overkill, but what about using the following code layout:
>
> // pure GuC code
> static int guc_send_tlb_invalidation(guc, action, len)
> {
> }
>
> // pure GuC code
> static int guc_send_tlb_invalidation_ggtt(guc, seqno)
> {
> return guc_send_tlb_invalidation(guc, ...);
> }
>
> // ops glue code
> static int tlb_invalidation_ggtt_by_guc(gt, seqno)
> {
> return guc_send_tlb_invalidation_ggtt(guc, ...);
> }
>
> const struct xe_gt_tlb_invalidation_ops guc_tlb_invalidation_ops = {
> .ggtt = tlb_invalidation_ggtt_by_guc,
> };
>
I'm going lean towards overkill.
>
> > +
> > +/**
> > + * xe_guc_tlb_invalidation_get_ops - Get Guc TLB invalidation ops
> > + * @guc: guc
> > + *
> > + * Return: xe_gt_tlb_invalidation_ops for GuC TLB invalidation
> > + */
> > +const struct xe_gt_tlb_invalidation_ops*
> > +xe_guc_tlb_invalidation_get_ops(struct xe_guc *guc)
>
> since we don't use "guc" here and don't have any logic behind this
> function, so maybe easier/cleaner would be just to expose ops directly
> in the header as:
>
> extern const struct xe_gt_tlb_invalidation_ops guc_tlb_invalidation_ops;
>
No. I think my idea was in this layer we could detect the GuC version
and potentially install a different set of vfuncs.
As I type this we probably want a different set of vfunc based on
xe->info.has_range_tlb_invalidation in the current code base.
> or since we may want to postpone GuC ops registration until we know we
> will use the GuC, expose function in xe_gt_tlb_invalidation.h:
>
> void xe_gt_tlb_invalidation_set_ops(
> struct xe_gt *gt,
> const struct xe_gt_tlb_invalidation_ops *ops);
>
I think this probably overkill but something to keep in mind if we need
to decouple setting the ops from TLB invalidation init (e.g. we don't
know which set of ops to install until a later point in the driver
load).
> > +{
> > + return &guc_tlb_invalidation_ops;
> > +}
> > +
> > +/**
> > + * xe_guc_tlb_invalidation_done_handler - GuC TLB invalidation done handler
> > + * @guc: guc
> > + * @msg: message indicating TLB invalidation done
> > + * @len: length of message
> > + *
> > + * Parse seqno of TLB invalidation,
>
> only this part seems to be valid, all below belongs more to the
> description of the xe_gt_tlb_invalidation_done_handler() that maybe we
> should explicitly refer to ?
>
Let me rewrite this kernel doc as it is just copy / paste that doesn't
really apply.
> > wake any waiters for seqno, and signal any
> > + * invalidation fences for seqno. Algorithm for this depends on seqno being
> > + * received in-order and asserts this assumption.
> > + *
> > + * Return: 0 on success, -EPROTO for malformed messages.
> > + */
> > +int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len)
> > +{
> > + struct xe_gt *gt = guc_to_gt(guc);
> > +
> > + if (unlikely(len != 1))
>
> this magic "1" should be part of the GuC ABI
>
Sure.
> > + return -EPROTO;
> > +
> > + xe_gt_tlb_invalidation_done_handler(gt, msg[0]);
> > +
> > + return 0;
> > +}
> > diff --git a/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h b/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h
> > new file mode 100644
> > index 000000000000..44408aae6955
> > --- /dev/null
> > +++ b/drivers/gpu/drm/xe/xe_guc_tlb_invalidation.h
> > @@ -0,0 +1,18 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2024 Intel Corporation
> > + */
> > +
> > +#ifndef _XE_GUC_TLB_INVALIDATION_H_
> > +#define _XE_GUC_TLB_INVALIDATION_H_
> > +
> > +struct xe_guc;
>
> forward decls should be _after_ any includes
>
Yep.
> > +
> > +#include <linux/types.h>
> > +
> > +const struct xe_gt_tlb_invalidation_ops*
> > +xe_guc_tlb_invalidation_get_ops(struct xe_guc *guc);
> > +
> > +int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32 *msg, u32 len);
> > +
> > +#endif /* _XE_GUC_TLB_INVALIDATION_H_ */
>
> IIRC in Xe we don't use decorations for closing #endif of include guard
Wiil delete.
Matt
^ permalink raw reply [flat|nested] 32+ messages in thread
* Re: [PATCH v2 05/11] drm/xe: Add xe_gt_tlb_invalidation_done_handler
2024-07-08 4:03 ` [PATCH v2 05/11] drm/xe: Add xe_gt_tlb_invalidation_done_handler Matthew Brost
@ 2025-07-23 17:22 ` Summers, Stuart
0 siblings, 0 replies; 32+ messages in thread
From: Summers, Stuart @ 2025-07-23 17:22 UTC (permalink / raw)
To: intel-xe@lists.freedesktop.org, Brost, Matthew
Cc: nirmoy.das@intel.com, Kassabri, Farah, Wajdeczko, Michal
On Sun, 2024-07-07 at 21:03 -0700, Matthew Brost wrote:
> Decouple GT TLB seqno handling from G2H handler.
>
> v2:
> - Add kernel doc
>
> Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Looks good to me, thanks!
Reviewed-by: Stuart Summers <stuart.summers@intel.com>
> ---
> drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 47 +++++++++++++------
> --
> 1 file changed, 30 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> index 9062d9f85ffb..2493ea91b637 100644
> --- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> +++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
> @@ -412,27 +412,18 @@ int xe_gt_tlb_invalidation_vma(struct xe_gt
> *gt,
> }
>
> /**
> - * xe_guc_tlb_invalidation_done_handler - TLB invalidation done
> handler
> - * @guc: guc
> - * @msg: message indicating TLB invalidation done
> - * @len: length of message
> + * xe_gt_tlb_invalidation_done_handler - GT TLB invalidation done
> handler
> + * @gt: gt
> + * @seqno: seqno of invalidation that is done
> *
> - * Parse seqno of TLB invalidation, wake any waiters for seqno, and
> signal any
> - * invalidation fences for seqno. Algorithm for this depends on
> seqno being
> - * received in-order and asserts this assumption.
> - *
> - * Return: 0 on success, -EPROTO for malformed messages.
> + * Update recv seqno, signal any GT TLB invalidation fences, and
> restart TDR
> */
> -int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32
> *msg, u32 len)
> +static void xe_gt_tlb_invalidation_done_handler(struct xe_gt *gt,
> int seqno)
> {
> - struct xe_gt *gt = guc_to_gt(guc);
> struct xe_device *xe = gt_to_xe(gt);
> struct xe_gt_tlb_invalidation_fence *fence, *next;
> unsigned long flags;
>
> - if (unlikely(len != 1))
> - return -EPROTO;
> -
> /*
> * This can also be run both directly from the IRQ handler
> and also in
> * process_g2h_msg(). Only one may process any individual CT
> message,
> @@ -449,12 +440,12 @@ int xe_guc_tlb_invalidation_done_handler(struct
> xe_guc *guc, u32 *msg, u32 len)
> * process_g2h_msg().
> */
> spin_lock_irqsave(>->tlb_invalidation.pending_lock, flags);
> - if (tlb_invalidation_seqno_past(gt, msg[0])) {
> + if (tlb_invalidation_seqno_past(gt, seqno)) {
> spin_unlock_irqrestore(>-
> >tlb_invalidation.pending_lock, flags);
> - return 0;
> + return;
> }
>
> - WRITE_ONCE(gt->tlb_invalidation.seqno_recv, msg[0]);
> + WRITE_ONCE(gt->tlb_invalidation.seqno_recv, seqno);
>
> list_for_each_entry_safe(fence, next,
> >-
> >tlb_invalidation.pending_fences, link) {
> @@ -474,6 +465,28 @@ int xe_guc_tlb_invalidation_done_handler(struct
> xe_guc *guc, u32 *msg, u32 len)
> cancel_delayed_work(>->tlb_invalidation.fence_tdr);
>
> spin_unlock_irqrestore(>->tlb_invalidation.pending_lock,
> flags);
> +}
> +
> +/**
> + * xe_guc_tlb_invalidation_done_handler - TLB invalidation done
> handler
> + * @guc: guc
> + * @msg: message indicating TLB invalidation done
> + * @len: length of message
> + *
> + * Parse seqno of TLB invalidation, wake any waiters for seqno, and
> signal any
> + * invalidation fences for seqno. Algorithm for this depends on
> seqno being
> + * received in-order and asserts this assumption.
> + *
> + * Return: 0 on success, -EPROTO for malformed messages.
> + */
> +int xe_guc_tlb_invalidation_done_handler(struct xe_guc *guc, u32
> *msg, u32 len)
> +{
> + struct xe_gt *gt = guc_to_gt(guc);
> +
> + if (unlikely(len != 1))
> + return -EPROTO;
> +
> + xe_gt_tlb_invalidation_done_handler(gt, msg[0]);
>
> return 0;
> }
^ permalink raw reply [flat|nested] 32+ messages in thread
end of thread, other threads:[~2025-07-23 17:22 UTC | newest]
Thread overview: 32+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-08 4:03 [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Brost
2024-07-08 4:03 ` [PATCH v2 01/11] drm/xe: Add xe_gt_tlb_invalidation_fence_init helper Matthew Brost
2024-07-09 15:56 ` Nirmoy Das
2024-07-08 4:03 ` [PATCH v2 02/11] drm/xe: Drop xe_gt_tlb_invalidation_wait Matthew Brost
2024-07-09 15:57 ` Nirmoy Das
2024-07-08 4:03 ` [PATCH v2 03/11] drm/xe: s/tlb_invalidation.lock/tlb_invalidation.fence_lock Matthew Brost
2024-07-09 15:57 ` Nirmoy Das
2024-07-08 4:03 ` [PATCH v2 04/11] drm/xe: Add tlb_invalidation.seqno_lock Matthew Brost
2024-07-08 4:03 ` [PATCH v2 05/11] drm/xe: Add xe_gt_tlb_invalidation_done_handler Matthew Brost
2025-07-23 17:22 ` Summers, Stuart
2024-07-08 4:03 ` [PATCH v2 06/11] drm/xe: Add send tlb invalidation helpers Matthew Brost
2024-07-08 4:03 ` [PATCH v2 07/11] drm/xe: Add xe_guc_tlb_invalidation layer Matthew Brost
2024-07-09 21:31 ` Michal Wajdeczko
2024-07-10 4:02 ` Matthew Brost
2024-07-08 4:03 ` [PATCH v2 08/11] drm/xe: Add multi-client support for GT TLB invalidations Matthew Brost
2024-07-08 4:03 ` [PATCH v2 09/11] drm/xe: Add GT TLB invalidation coalescing Matthew Brost
2024-07-08 4:03 ` [PATCH v2 10/11] drm/xe: Add GT TLB invalidation coalesce tracepoints Matthew Brost
2024-07-08 4:03 ` [PATCH v2 11/11] drm/xe: Add GT TLB invalidation watermark debugfs Matthew Brost
2024-07-08 4:08 ` ✓ CI.Patch_applied: success for Proper GT TLB invalidation layering and new coalescing feature. (rev2) Patchwork
2024-07-08 4:09 ` ✗ CI.checkpatch: warning " Patchwork
2024-07-08 4:10 ` ✓ CI.KUnit: success " Patchwork
2024-07-08 4:22 ` ✓ CI.Build: " Patchwork
2024-07-08 4:24 ` ✓ CI.Hooks: " Patchwork
2024-07-08 4:25 ` ✓ CI.checksparse: " Patchwork
2024-07-08 4:51 ` ✓ CI.BAT: " Patchwork
2024-07-08 5:46 ` ✗ CI.FULL: failure " Patchwork
2024-07-09 9:57 ` [PATCH v2 00/11] Proper GT TLB invalidation layering and new coalescing feature Matthew Auld
2024-07-09 16:08 ` Nirmoy Das
2024-07-09 16:35 ` Matthew Brost
2024-07-09 16:42 ` Nirmoy Das
2024-07-09 21:23 ` Matthew Brost
2024-07-09 16:31 ` Matthew Brost
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox