* [PATCH v4 0/7] Convert multiple bind ops to 1 job
@ 2024-06-18 17:15 Matthew Brost
2024-06-18 17:15 ` [PATCH v4 1/7] drm/xe: s/xe_tile_migrate_engine/xe_tile_migrate_exec_queue Matthew Brost
` (14 more replies)
0 siblings, 15 replies; 23+ messages in thread
From: Matthew Brost @ 2024-06-18 17:15 UTC (permalink / raw)
To: intel-xe
Continuation of merging parts of [1]. Patch #2 in this series is quite
large but unsure how to split the patch without breaking functionality.
Tested with [2].
v2:
- Rebase
- Add error injection patch
- Fix dma-fence reservation for binds
v3:
- Rebase
- Error injection patch omitted in this rev
v4:
- Rebase
- Fix tlb invalidation (Paulo)
- Add missing last fence dep / test to inspection (Inspection)
- Add error injection patch back in
Matt
[1] https://patchwork.freedesktop.org/series/125608/
[2] https://patchwork.freedesktop.org/series/129606/
Matthew Brost (7):
drm/xe: s/xe_tile_migrate_engine/xe_tile_migrate_exec_queue
drm/xe: Add xe_vm_pgtable_update_op to xe_vma_ops
drm/xe: Add xe_exec_queue_last_fence_test_dep
drm/xe: Convert multiple bind ops into single job
drm/xe: Update VM trace events
drm/xe: Update PT layer with better error handling
drm/xe: Add VM bind IOCTL error injection
drivers/gpu/drm/xe/xe_bo_types.h | 2 +
drivers/gpu/drm/xe/xe_device_types.h | 12 +
drivers/gpu/drm/xe/xe_exec_queue.c | 23 +
drivers/gpu/drm/xe/xe_exec_queue.h | 2 +
drivers/gpu/drm/xe/xe_migrate.c | 305 +++---
drivers/gpu/drm/xe/xe_migrate.h | 34 +-
drivers/gpu/drm/xe/xe_pt.c | 1290 +++++++++++++++++---------
drivers/gpu/drm/xe/xe_pt.h | 14 +-
drivers/gpu/drm/xe/xe_pt_types.h | 48 +
drivers/gpu/drm/xe/xe_trace_bo.h | 10 +-
drivers/gpu/drm/xe/xe_vm.c | 647 +++++--------
drivers/gpu/drm/xe/xe_vm.h | 2 +
drivers/gpu/drm/xe/xe_vm_types.h | 55 +-
13 files changed, 1386 insertions(+), 1058 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH v4 1/7] drm/xe: s/xe_tile_migrate_engine/xe_tile_migrate_exec_queue
2024-06-18 17:15 [PATCH v4 0/7] Convert multiple bind ops to 1 job Matthew Brost
@ 2024-06-18 17:15 ` Matthew Brost
2024-06-18 17:15 ` [PATCH v4 2/7] drm/xe: Add xe_vm_pgtable_update_op to xe_vma_ops Matthew Brost
` (13 subsequent siblings)
14 siblings, 0 replies; 23+ messages in thread
From: Matthew Brost @ 2024-06-18 17:15 UTC (permalink / raw)
To: intel-xe
Engine is old nomenclature, replace with exec queue.
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
---
drivers/gpu/drm/xe/xe_migrate.c | 9 ++++-----
drivers/gpu/drm/xe/xe_migrate.h | 2 +-
2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
index 05f933787860..af62783d34ac 100644
--- a/drivers/gpu/drm/xe/xe_migrate.c
+++ b/drivers/gpu/drm/xe/xe_migrate.c
@@ -84,15 +84,14 @@ struct xe_migrate {
#define MAX_PTE_PER_SDI 0x1FE
/**
- * xe_tile_migrate_engine() - Get this tile's migrate engine.
+ * xe_tile_migrate_exec_queue() - Get this tile's migrate exec queue.
* @tile: The tile.
*
- * Returns the default migrate engine of this tile.
- * TODO: Perhaps this function is slightly misplaced, and even unneeded?
+ * Returns the default migrate exec queue of this tile.
*
- * Return: The default migrate engine
+ * Return: The default migrate exec queue
*/
-struct xe_exec_queue *xe_tile_migrate_engine(struct xe_tile *tile)
+struct xe_exec_queue *xe_tile_migrate_exec_queue(struct xe_tile *tile)
{
return tile->migrate->q;
}
diff --git a/drivers/gpu/drm/xe/xe_migrate.h b/drivers/gpu/drm/xe/xe_migrate.h
index 951f19318ea4..a5bcaafe4a99 100644
--- a/drivers/gpu/drm/xe/xe_migrate.h
+++ b/drivers/gpu/drm/xe/xe_migrate.h
@@ -106,5 +106,5 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
void xe_migrate_wait(struct xe_migrate *m);
-struct xe_exec_queue *xe_tile_migrate_engine(struct xe_tile *tile);
+struct xe_exec_queue *xe_tile_migrate_exec_queue(struct xe_tile *tile);
#endif
--
2.34.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v4 2/7] drm/xe: Add xe_vm_pgtable_update_op to xe_vma_ops
2024-06-18 17:15 [PATCH v4 0/7] Convert multiple bind ops to 1 job Matthew Brost
2024-06-18 17:15 ` [PATCH v4 1/7] drm/xe: s/xe_tile_migrate_engine/xe_tile_migrate_exec_queue Matthew Brost
@ 2024-06-18 17:15 ` Matthew Brost
2024-06-18 17:15 ` [PATCH v4 3/7] drm/xe: Add xe_exec_queue_last_fence_test_dep Matthew Brost
` (12 subsequent siblings)
14 siblings, 0 replies; 23+ messages in thread
From: Matthew Brost @ 2024-06-18 17:15 UTC (permalink / raw)
To: intel-xe
Each xe_vma_op resolves to 0-3 pt_ops. Add storage for the pt_ops to
xe_vma_ops which is dynamically allocated based the number and types of
xe_vma_op in the xe_vma_ops list. Allocation only implemented in this
patch.
This will help with converting xe_vma_ops (multiple xe_vma_op) in a
atomic update unit.
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
---
drivers/gpu/drm/xe/xe_pt_types.h | 12 ++++++
drivers/gpu/drm/xe/xe_vm.c | 66 +++++++++++++++++++++++++++++++-
drivers/gpu/drm/xe/xe_vm_types.h | 8 ++++
3 files changed, 84 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_pt_types.h b/drivers/gpu/drm/xe/xe_pt_types.h
index cee70cb0f014..2093150f461e 100644
--- a/drivers/gpu/drm/xe/xe_pt_types.h
+++ b/drivers/gpu/drm/xe/xe_pt_types.h
@@ -74,4 +74,16 @@ struct xe_vm_pgtable_update {
u32 flags;
};
+/** struct xe_vm_pgtable_update_op - Page table update operation */
+struct xe_vm_pgtable_update_op {
+ /** @entries: entries to update for this operation */
+ struct xe_vm_pgtable_update entries[XE_VM_MAX_LEVEL * 2 + 1];
+ /** @num_entries: number of entries for this update operation */
+ u32 num_entries;
+ /** @bind: is a bind */
+ bool bind;
+ /** @rebind: is a rebind */
+ bool rebind;
+};
+
#endif
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index 61d4d95a5377..8ad772fc1fe3 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -712,6 +712,42 @@ int xe_vm_userptr_check_repin(struct xe_vm *vm)
list_empty_careful(&vm->userptr.invalidated)) ? 0 : -EAGAIN;
}
+static int xe_vma_ops_alloc(struct xe_vma_ops *vops)
+{
+ int i;
+
+ for (i = 0; i < XE_MAX_TILES_PER_DEVICE; ++i) {
+ if (!vops->pt_update_ops[i].num_ops)
+ continue;
+
+ vops->pt_update_ops[i].ops =
+ kmalloc_array(vops->pt_update_ops[i].num_ops,
+ sizeof(*vops->pt_update_ops[i].ops),
+ GFP_KERNEL);
+ if (!vops->pt_update_ops[i].ops)
+ return -ENOMEM;
+ }
+
+ return 0;
+}
+
+static void xe_vma_ops_fini(struct xe_vma_ops *vops)
+{
+ int i;
+
+ for (i = 0; i < XE_MAX_TILES_PER_DEVICE; ++i)
+ kfree(vops->pt_update_ops[i].ops);
+}
+
+static void xe_vma_ops_incr_pt_update_ops(struct xe_vma_ops *vops, u8 tile_mask)
+{
+ int i;
+
+ for (i = 0; i < XE_MAX_TILES_PER_DEVICE; ++i)
+ if (BIT(i) & tile_mask)
+ ++vops->pt_update_ops[i].num_ops;
+}
+
static void xe_vm_populate_rebind(struct xe_vma_op *op, struct xe_vma *vma,
u8 tile_mask)
{
@@ -739,6 +775,7 @@ static int xe_vm_ops_add_rebind(struct xe_vma_ops *vops, struct xe_vma *vma,
xe_vm_populate_rebind(op, vma, tile_mask);
list_add_tail(&op->link, &vops->list);
+ xe_vma_ops_incr_pt_update_ops(vops, tile_mask);
return 0;
}
@@ -779,6 +816,10 @@ int xe_vm_rebind(struct xe_vm *vm, bool rebind_worker)
goto free_ops;
}
+ err = xe_vma_ops_alloc(&vops);
+ if (err)
+ goto free_ops;
+
fence = ops_execute(vm, &vops);
if (IS_ERR(fence)) {
err = PTR_ERR(fence);
@@ -793,6 +834,7 @@ int xe_vm_rebind(struct xe_vm *vm, bool rebind_worker)
list_del(&op->link);
kfree(op);
}
+ xe_vma_ops_fini(&vops);
return err;
}
@@ -814,12 +856,20 @@ struct dma_fence *xe_vma_rebind(struct xe_vm *vm, struct xe_vma *vma, u8 tile_ma
if (err)
return ERR_PTR(err);
+ err = xe_vma_ops_alloc(&vops);
+ if (err) {
+ fence = ERR_PTR(err);
+ goto free_ops;
+ }
+
fence = ops_execute(vm, &vops);
+free_ops:
list_for_each_entry_safe(op, next_op, &vops.list, link) {
list_del(&op->link);
kfree(op);
}
+ xe_vma_ops_fini(&vops);
return fence;
}
@@ -2282,7 +2332,6 @@ static int xe_vma_op_commit(struct xe_vm *vm, struct xe_vma_op *op)
return err;
}
-
static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct xe_exec_queue *q,
struct drm_gpuva_ops *ops,
struct xe_sync_entry *syncs, u32 num_syncs,
@@ -2334,6 +2383,9 @@ static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct xe_exec_queue *q,
return PTR_ERR(vma);
op->map.vma = vma;
+ if (op->map.immediate || !xe_vm_in_fault_mode(vm))
+ xe_vma_ops_incr_pt_update_ops(vops,
+ op->tile_mask);
break;
}
case DRM_GPUVA_OP_REMAP:
@@ -2378,6 +2430,8 @@ static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct xe_exec_queue *q,
vm_dbg(&xe->drm, "REMAP:SKIP_PREV: addr=0x%016llx, range=0x%016llx",
(ULL)op->remap.start,
(ULL)op->remap.range);
+ } else {
+ xe_vma_ops_incr_pt_update_ops(vops, op->tile_mask);
}
}
@@ -2414,13 +2468,16 @@ static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct xe_exec_queue *q,
vm_dbg(&xe->drm, "REMAP:SKIP_NEXT: addr=0x%016llx, range=0x%016llx",
(ULL)op->remap.start,
(ULL)op->remap.range);
+ } else {
+ xe_vma_ops_incr_pt_update_ops(vops, op->tile_mask);
}
}
+ xe_vma_ops_incr_pt_update_ops(vops, op->tile_mask);
break;
}
case DRM_GPUVA_OP_UNMAP:
case DRM_GPUVA_OP_PREFETCH:
- /* Nothing to do */
+ xe_vma_ops_incr_pt_update_ops(vops, op->tile_mask);
break;
default:
drm_warn(&vm->xe->drm, "NOT POSSIBLE");
@@ -3267,11 +3324,16 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
goto unwind_ops;
}
+ err = xe_vma_ops_alloc(&vops);
+ if (err)
+ goto unwind_ops;
+
err = vm_bind_ioctl_ops_execute(vm, &vops);
unwind_ops:
if (err && err != -ENODATA)
vm_bind_ioctl_ops_unwind(vm, ops, args->num_binds);
+ xe_vma_ops_fini(&vops);
for (i = args->num_binds - 1; i >= 0; --i)
if (ops[i])
drm_gpuva_ops_free(&vm->gpuvm, ops[i]);
diff --git a/drivers/gpu/drm/xe/xe_vm_types.h b/drivers/gpu/drm/xe/xe_vm_types.h
index ce1a63a5e3e7..211c88801182 100644
--- a/drivers/gpu/drm/xe/xe_vm_types.h
+++ b/drivers/gpu/drm/xe/xe_vm_types.h
@@ -21,6 +21,7 @@ struct xe_bo;
struct xe_sync_entry;
struct xe_user_fence;
struct xe_vm;
+struct xe_vm_pgtable_update_op;
#define XE_VMA_READ_ONLY DRM_GPUVA_USERBITS
#define XE_VMA_DESTROYED (DRM_GPUVA_USERBITS << 1)
@@ -368,6 +369,13 @@ struct xe_vma_ops {
struct xe_sync_entry *syncs;
/** @num_syncs: number of syncs */
u32 num_syncs;
+ /** @pt_update_ops: page table update operations */
+ struct {
+ /** @ops: operations */
+ struct xe_vm_pgtable_update_op *ops;
+ /** @num_ops: number of operations */
+ u32 num_ops;
+ } pt_update_ops[XE_MAX_TILES_PER_DEVICE];
};
#endif
--
2.34.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v4 3/7] drm/xe: Add xe_exec_queue_last_fence_test_dep
2024-06-18 17:15 [PATCH v4 0/7] Convert multiple bind ops to 1 job Matthew Brost
2024-06-18 17:15 ` [PATCH v4 1/7] drm/xe: s/xe_tile_migrate_engine/xe_tile_migrate_exec_queue Matthew Brost
2024-06-18 17:15 ` [PATCH v4 2/7] drm/xe: Add xe_vm_pgtable_update_op to xe_vma_ops Matthew Brost
@ 2024-06-18 17:15 ` Matthew Brost
2024-06-18 17:15 ` [PATCH v4 4/7] drm/xe: Convert multiple bind ops into single job Matthew Brost
` (11 subsequent siblings)
14 siblings, 0 replies; 23+ messages in thread
From: Matthew Brost @ 2024-06-18 17:15 UTC (permalink / raw)
To: intel-xe
Helpful to determine if a bind can immediately use CPU or needs to be
deferred a drm scheduler job.
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
drivers/gpu/drm/xe/xe_exec_queue.c | 23 +++++++++++++++++++++++
drivers/gpu/drm/xe/xe_exec_queue.h | 2 ++
2 files changed, 25 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
index 0ba37835849b..65b4d1da6c93 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -906,3 +906,26 @@ void xe_exec_queue_last_fence_set(struct xe_exec_queue *q, struct xe_vm *vm,
xe_exec_queue_last_fence_put(q, vm);
q->last_fence = dma_fence_get(fence);
}
+
+/**
+ * xe_exec_queue_last_fence_test_dep - Test last fence dependency of queue
+ * @q: The exec queue
+ * @vm: The VM the engine does a bind or exec for
+ *
+ * Returns:
+ * 0 on success on dependency, -ETIME on dependency
+ */
+int xe_exec_queue_last_fence_test_dep(struct xe_exec_queue *q, struct xe_vm *vm)
+{
+ struct dma_fence *fence;
+ int err = 0;
+
+ fence = xe_exec_queue_last_fence_get(q, vm);
+ if (fence) {
+ err = test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags) ?
+ 0 : -ETIME;
+ dma_fence_put(fence);
+ }
+
+ return err;
+}
diff --git a/drivers/gpu/drm/xe/xe_exec_queue.h b/drivers/gpu/drm/xe/xe_exec_queue.h
index 289a3a51d2a2..ded77b0f3b90 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.h
+++ b/drivers/gpu/drm/xe/xe_exec_queue.h
@@ -75,6 +75,8 @@ struct dma_fence *xe_exec_queue_last_fence_get(struct xe_exec_queue *e,
struct xe_vm *vm);
void xe_exec_queue_last_fence_set(struct xe_exec_queue *e, struct xe_vm *vm,
struct dma_fence *fence);
+int xe_exec_queue_last_fence_test_dep(struct xe_exec_queue *q,
+ struct xe_vm *vm);
void xe_exec_queue_update_run_ticks(struct xe_exec_queue *q);
#endif
--
2.34.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v4 4/7] drm/xe: Convert multiple bind ops into single job
2024-06-18 17:15 [PATCH v4 0/7] Convert multiple bind ops to 1 job Matthew Brost
` (2 preceding siblings ...)
2024-06-18 17:15 ` [PATCH v4 3/7] drm/xe: Add xe_exec_queue_last_fence_test_dep Matthew Brost
@ 2024-06-18 17:15 ` Matthew Brost
2024-06-20 17:15 ` Matthew Auld
2024-06-21 15:23 ` Matthew Auld
2024-06-18 17:15 ` [PATCH v4 5/7] drm/xe: Update VM trace events Matthew Brost
` (10 subsequent siblings)
14 siblings, 2 replies; 23+ messages in thread
From: Matthew Brost @ 2024-06-18 17:15 UTC (permalink / raw)
To: intel-xe
This aligns with the uAPI of an array of binds or single bind that
results in multiple GPUVA ops to be considered a single atomic
operations.
The implemenation is roughly:
- xe_vma_ops is a list of xe_vma_op (GPUVA op)
- each xe_vma_op resolves to 0-3 PT ops
- xe_vma_ops creates a single job
- if at any point during binding a failure occurs, xe_vma_ops contains
the information necessary unwind the PT and VMA (GPUVA) state
v2:
- add missing dma-resv slot reservation (CI, testing)
v4:
- Fix TLB invalidation (Paulo)
- Add missing xe_sched_job_last_fence_add/test_dep check (Inspection)
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
drivers/gpu/drm/xe/xe_bo_types.h | 2 +
drivers/gpu/drm/xe/xe_migrate.c | 296 ++++----
drivers/gpu/drm/xe/xe_migrate.h | 32 +-
drivers/gpu/drm/xe/xe_pt.c | 1112 +++++++++++++++++++-----------
drivers/gpu/drm/xe/xe_pt.h | 14 +-
drivers/gpu/drm/xe/xe_pt_types.h | 36 +
drivers/gpu/drm/xe/xe_vm.c | 519 +++-----------
drivers/gpu/drm/xe/xe_vm.h | 2 +
drivers/gpu/drm/xe/xe_vm_types.h | 45 +-
9 files changed, 1035 insertions(+), 1023 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
index 86422e113d39..02d68873558a 100644
--- a/drivers/gpu/drm/xe/xe_bo_types.h
+++ b/drivers/gpu/drm/xe/xe_bo_types.h
@@ -58,6 +58,8 @@ struct xe_bo {
#endif
/** @freed: List node for delayed put. */
struct llist_node freed;
+ /** @update_index: Update index if PT BO */
+ int update_index;
/** @created: Whether the bo has passed initial creation */
bool created;
diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
index af62783d34ac..a1acd7d01243 100644
--- a/drivers/gpu/drm/xe/xe_migrate.c
+++ b/drivers/gpu/drm/xe/xe_migrate.c
@@ -1125,6 +1125,7 @@ struct dma_fence *xe_migrate_clear(struct xe_migrate *m,
}
static void write_pgtable(struct xe_tile *tile, struct xe_bb *bb, u64 ppgtt_ofs,
+ const struct xe_vm_pgtable_update_op *pt_op,
const struct xe_vm_pgtable_update *update,
struct xe_migrate_pt_update *pt_update)
{
@@ -1159,8 +1160,12 @@ static void write_pgtable(struct xe_tile *tile, struct xe_bb *bb, u64 ppgtt_ofs,
bb->cs[bb->len++] = MI_STORE_DATA_IMM | MI_SDI_NUM_QW(chunk);
bb->cs[bb->len++] = lower_32_bits(addr);
bb->cs[bb->len++] = upper_32_bits(addr);
- ops->populate(pt_update, tile, NULL, bb->cs + bb->len, ofs, chunk,
- update);
+ if (pt_op->bind)
+ ops->populate(pt_update, tile, NULL, bb->cs + bb->len,
+ ofs, chunk, update);
+ else
+ ops->clear(pt_update, tile, NULL, bb->cs + bb->len,
+ ofs, chunk, update);
bb->len += chunk * 2;
ofs += chunk;
@@ -1185,114 +1190,58 @@ struct migrate_test_params {
static struct dma_fence *
xe_migrate_update_pgtables_cpu(struct xe_migrate *m,
- struct xe_vm *vm, struct xe_bo *bo,
- const struct xe_vm_pgtable_update *updates,
- u32 num_updates, bool wait_vm,
struct xe_migrate_pt_update *pt_update)
{
XE_TEST_DECLARE(struct migrate_test_params *test =
to_migrate_test_params
(xe_cur_kunit_priv(XE_TEST_LIVE_MIGRATE));)
const struct xe_migrate_pt_update_ops *ops = pt_update->ops;
- struct dma_fence *fence;
+ struct xe_vm *vm = pt_update->vops->vm;
+ struct xe_vm_pgtable_update_ops *pt_update_ops =
+ &pt_update->vops->pt_update_ops[pt_update->tile_id];
int err;
- u32 i;
+ u32 j, i;
if (XE_TEST_ONLY(test && test->force_gpu))
return ERR_PTR(-ETIME);
- if (bo && !dma_resv_test_signaled(bo->ttm.base.resv,
- DMA_RESV_USAGE_KERNEL))
- return ERR_PTR(-ETIME);
-
- if (wait_vm && !dma_resv_test_signaled(xe_vm_resv(vm),
- DMA_RESV_USAGE_BOOKKEEP))
- return ERR_PTR(-ETIME);
-
if (ops->pre_commit) {
pt_update->job = NULL;
err = ops->pre_commit(pt_update);
if (err)
return ERR_PTR(err);
}
- for (i = 0; i < num_updates; i++) {
- const struct xe_vm_pgtable_update *update = &updates[i];
-
- ops->populate(pt_update, m->tile, &update->pt_bo->vmap, NULL,
- update->ofs, update->qwords, update);
- }
-
- if (vm) {
- trace_xe_vm_cpu_bind(vm);
- xe_device_wmb(vm->xe);
- }
-
- fence = dma_fence_get_stub();
-
- return fence;
-}
-
-static bool no_in_syncs(struct xe_vm *vm, struct xe_exec_queue *q,
- struct xe_sync_entry *syncs, u32 num_syncs)
-{
- struct dma_fence *fence;
- int i;
- for (i = 0; i < num_syncs; i++) {
- fence = syncs[i].fence;
-
- if (fence && !test_bit(DMA_FENCE_FLAG_SIGNALED_BIT,
- &fence->flags))
- return false;
- }
- if (q) {
- fence = xe_exec_queue_last_fence_get(q, vm);
- if (!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) {
- dma_fence_put(fence);
- return false;
+ for (j = 0; j < pt_update_ops->num_ops; ++j) {
+ const struct xe_vm_pgtable_update_op *pt_op =
+ &pt_update_ops->ops[j];
+
+ for (i = 0; i < pt_op->num_entries; i++) {
+ const struct xe_vm_pgtable_update *update =
+ &pt_op->entries[i];
+
+ if (pt_op->bind)
+ ops->populate(pt_update, m->tile,
+ &update->pt_bo->vmap, NULL,
+ update->ofs, update->qwords,
+ update);
+ else
+ ops->clear(pt_update, m->tile,
+ &update->pt_bo->vmap, NULL,
+ update->ofs, update->qwords, update);
}
- dma_fence_put(fence);
}
- return true;
+ trace_xe_vm_cpu_bind(vm);
+ xe_device_wmb(vm->xe);
+
+ return dma_fence_get_stub();
}
-/**
- * xe_migrate_update_pgtables() - Pipelined page-table update
- * @m: The migrate context.
- * @vm: The vm we'll be updating.
- * @bo: The bo whose dma-resv we will await before updating, or NULL if userptr.
- * @q: The exec queue to be used for the update or NULL if the default
- * migration engine is to be used.
- * @updates: An array of update descriptors.
- * @num_updates: Number of descriptors in @updates.
- * @syncs: Array of xe_sync_entry to await before updating. Note that waits
- * will block the engine timeline.
- * @num_syncs: Number of entries in @syncs.
- * @pt_update: Pointer to a struct xe_migrate_pt_update, which contains
- * pointers to callback functions and, if subclassed, private arguments to
- * those.
- *
- * Perform a pipelined page-table update. The update descriptors are typically
- * built under the same lock critical section as a call to this function. If
- * using the default engine for the updates, they will be performed in the
- * order they grab the job_mutex. If different engines are used, external
- * synchronization is needed for overlapping updates to maintain page-table
- * consistency. Note that the meaing of "overlapping" is that the updates
- * touch the same page-table, which might be a higher-level page-directory.
- * If no pipelining is needed, then updates may be performed by the cpu.
- *
- * Return: A dma_fence that, when signaled, indicates the update completion.
- */
-struct dma_fence *
-xe_migrate_update_pgtables(struct xe_migrate *m,
- struct xe_vm *vm,
- struct xe_bo *bo,
- struct xe_exec_queue *q,
- const struct xe_vm_pgtable_update *updates,
- u32 num_updates,
- struct xe_sync_entry *syncs, u32 num_syncs,
- struct xe_migrate_pt_update *pt_update)
+static struct dma_fence *
+__xe_migrate_update_pgtables(struct xe_migrate *m,
+ struct xe_migrate_pt_update *pt_update,
+ struct xe_vm_pgtable_update_ops *pt_update_ops)
{
const struct xe_migrate_pt_update_ops *ops = pt_update->ops;
struct xe_tile *tile = m->tile;
@@ -1301,59 +1250,45 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
struct xe_sched_job *job;
struct dma_fence *fence;
struct drm_suballoc *sa_bo = NULL;
- struct xe_vma *vma = pt_update->vma;
struct xe_bb *bb;
- u32 i, batch_size, ppgtt_ofs, update_idx, page_ofs = 0;
+ u32 i, j, batch_size = 0, ppgtt_ofs, update_idx, page_ofs = 0;
+ u32 num_updates = 0, current_update = 0;
u64 addr;
int err = 0;
- bool usm = !q && xe->info.has_usm;
- bool first_munmap_rebind = vma &&
- vma->gpuva.flags & XE_VMA_FIRST_REBIND;
- struct xe_exec_queue *q_override = !q ? m->q : q;
- u16 pat_index = xe->pat.idx[XE_CACHE_WB];
+ bool is_migrate = pt_update_ops->q == m->q;
+ bool usm = is_migrate && xe->info.has_usm;
- /* Use the CPU if no in syncs and engine is idle */
- if (no_in_syncs(vm, q, syncs, num_syncs) && xe_exec_queue_is_idle(q_override)) {
- fence = xe_migrate_update_pgtables_cpu(m, vm, bo, updates,
- num_updates,
- first_munmap_rebind,
- pt_update);
- if (!IS_ERR(fence) || fence == ERR_PTR(-EAGAIN))
- return fence;
+ for (i = 0; i < pt_update_ops->num_ops; ++i) {
+ struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[i];
+ struct xe_vm_pgtable_update *updates = pt_op->entries;
+
+ num_updates += pt_op->num_entries;
+ for (j = 0; j < pt_op->num_entries; ++j) {
+ u32 num_cmds = DIV_ROUND_UP(updates[j].qwords, 0x1ff);
+
+ /* align noop + MI_STORE_DATA_IMM cmd prefix */
+ batch_size += 4 * num_cmds + updates[j].qwords * 2;
+ }
}
/* fixed + PTE entries */
if (IS_DGFX(xe))
- batch_size = 2;
+ batch_size += 2;
else
- batch_size = 6 + num_updates * 2;
+ batch_size += 6 + num_updates * 2;
- for (i = 0; i < num_updates; i++) {
- u32 num_cmds = DIV_ROUND_UP(updates[i].qwords, MAX_PTE_PER_SDI);
-
- /* align noop + MI_STORE_DATA_IMM cmd prefix */
- batch_size += 4 * num_cmds + updates[i].qwords * 2;
- }
-
- /*
- * XXX: Create temp bo to copy from, if batch_size becomes too big?
- *
- * Worst case: Sum(2 * (each lower level page size) + (top level page size))
- * Should be reasonably bound..
- */
- xe_tile_assert(tile, batch_size < SZ_128K);
-
- bb = xe_bb_new(gt, batch_size, !q && xe->info.has_usm);
+ bb = xe_bb_new(gt, batch_size, usm);
if (IS_ERR(bb))
return ERR_CAST(bb);
/* For sysmem PTE's, need to map them in our hole.. */
if (!IS_DGFX(xe)) {
ppgtt_ofs = NUM_KERNEL_PDE - 1;
- if (q) {
- xe_tile_assert(tile, num_updates <= NUM_VMUSA_WRITES_PER_UNIT);
+ if (!is_migrate) {
+ u32 num_units = DIV_ROUND_UP(num_updates,
+ NUM_VMUSA_WRITES_PER_UNIT);
- sa_bo = drm_suballoc_new(&m->vm_update_sa, 1,
+ sa_bo = drm_suballoc_new(&m->vm_update_sa, num_units,
GFP_KERNEL, true, 0);
if (IS_ERR(sa_bo)) {
err = PTR_ERR(sa_bo);
@@ -1373,14 +1308,26 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
bb->cs[bb->len++] = ppgtt_ofs * XE_PAGE_SIZE + page_ofs;
bb->cs[bb->len++] = 0; /* upper_32_bits */
- for (i = 0; i < num_updates; i++) {
- struct xe_bo *pt_bo = updates[i].pt_bo;
+ for (i = 0; i < pt_update_ops->num_ops; ++i) {
+ struct xe_vm_pgtable_update_op *pt_op =
+ &pt_update_ops->ops[i];
+ struct xe_vm_pgtable_update *updates = pt_op->entries;
- xe_tile_assert(tile, pt_bo->size == SZ_4K);
+ for (j = 0; j < pt_op->num_entries; ++j, ++current_update) {
+ struct xe_vm *vm = pt_update->vops->vm;
+ struct xe_bo *pt_bo = updates[j].pt_bo;
- addr = vm->pt_ops->pte_encode_bo(pt_bo, 0, pat_index, 0);
- bb->cs[bb->len++] = lower_32_bits(addr);
- bb->cs[bb->len++] = upper_32_bits(addr);
+ xe_tile_assert(tile, pt_bo->size == SZ_4K);
+
+ /* Map a PT at most once */
+ if (pt_bo->update_index < 0)
+ pt_bo->update_index = current_update;
+
+ addr = vm->pt_ops->pte_encode_bo(pt_bo, 0,
+ XE_CACHE_WB, 0);
+ bb->cs[bb->len++] = lower_32_bits(addr);
+ bb->cs[bb->len++] = upper_32_bits(addr);
+ }
}
bb->cs[bb->len++] = MI_BATCH_BUFFER_END;
@@ -1388,19 +1335,36 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
addr = xe_migrate_vm_addr(ppgtt_ofs, 0) +
(page_ofs / sizeof(u64)) * XE_PAGE_SIZE;
- for (i = 0; i < num_updates; i++)
- write_pgtable(tile, bb, addr + i * XE_PAGE_SIZE,
- &updates[i], pt_update);
+ for (i = 0; i < pt_update_ops->num_ops; ++i) {
+ struct xe_vm_pgtable_update_op *pt_op =
+ &pt_update_ops->ops[i];
+ struct xe_vm_pgtable_update *updates = pt_op->entries;
+
+ for (j = 0; j < pt_op->num_entries; ++j) {
+ struct xe_bo *pt_bo = updates[j].pt_bo;
+
+ write_pgtable(tile, bb, addr +
+ pt_bo->update_index * XE_PAGE_SIZE,
+ pt_op, &updates[j], pt_update);
+ }
+ }
} else {
/* phys pages, no preamble required */
bb->cs[bb->len++] = MI_BATCH_BUFFER_END;
update_idx = bb->len;
- for (i = 0; i < num_updates; i++)
- write_pgtable(tile, bb, 0, &updates[i], pt_update);
+ for (i = 0; i < pt_update_ops->num_ops; ++i) {
+ struct xe_vm_pgtable_update_op *pt_op =
+ &pt_update_ops->ops[i];
+ struct xe_vm_pgtable_update *updates = pt_op->entries;
+
+ for (j = 0; j < pt_op->num_entries; ++j)
+ write_pgtable(tile, bb, 0, pt_op, &updates[j],
+ pt_update);
+ }
}
- job = xe_bb_create_migration_job(q ?: m->q, bb,
+ job = xe_bb_create_migration_job(pt_update_ops->q, bb,
xe_migrate_batch_base(m, usm),
update_idx);
if (IS_ERR(job)) {
@@ -1408,46 +1372,20 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
goto err_bb;
}
- /* Wait on BO move */
- if (bo) {
- err = xe_sched_job_add_deps(job, bo->ttm.base.resv,
- DMA_RESV_USAGE_KERNEL);
- if (err)
- goto err_job;
- }
-
- /*
- * Munmap style VM unbind, need to wait for all jobs to be complete /
- * trigger preempts before moving forward
- */
- if (first_munmap_rebind) {
- err = xe_sched_job_add_deps(job, xe_vm_resv(vm),
- DMA_RESV_USAGE_BOOKKEEP);
- if (err)
- goto err_job;
- }
-
- err = xe_sched_job_last_fence_add_dep(job, vm);
- for (i = 0; !err && i < num_syncs; i++)
- err = xe_sync_entry_add_deps(&syncs[i], job);
-
- if (err)
- goto err_job;
-
if (ops->pre_commit) {
pt_update->job = job;
err = ops->pre_commit(pt_update);
if (err)
goto err_job;
}
- if (!q)
+ if (is_migrate)
mutex_lock(&m->job_mutex);
xe_sched_job_arm(job);
fence = dma_fence_get(&job->drm.s_fence->finished);
xe_sched_job_push(job);
- if (!q)
+ if (is_migrate)
mutex_unlock(&m->job_mutex);
xe_bb_free(bb, fence);
@@ -1464,6 +1402,38 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
return ERR_PTR(err);
}
+/**
+ * xe_migrate_update_pgtables() - Pipelined page-table update
+ * @m: The migrate context.
+ * @pt_update: PT update arguments
+ *
+ * Perform a pipelined page-table update. The update descriptors are typically
+ * built under the same lock critical section as a call to this function. If
+ * using the default engine for the updates, they will be performed in the
+ * order they grab the job_mutex. If different engines are used, external
+ * synchronization is needed for overlapping updates to maintain page-table
+ * consistency. Note that the meaing of "overlapping" is that the updates
+ * touch the same page-table, which might be a higher-level page-directory.
+ * If no pipelining is needed, then updates may be performed by the cpu.
+ *
+ * Return: A dma_fence that, when signaled, indicates the update completion.
+ */
+struct dma_fence *
+xe_migrate_update_pgtables(struct xe_migrate *m,
+ struct xe_migrate_pt_update *pt_update)
+
+{
+ struct xe_vm_pgtable_update_ops *pt_update_ops =
+ &pt_update->vops->pt_update_ops[pt_update->tile_id];
+ struct dma_fence *fence;
+
+ fence = xe_migrate_update_pgtables_cpu(m, pt_update);
+ if (!IS_ERR(fence))
+ return fence;
+
+ return __xe_migrate_update_pgtables(m, pt_update, pt_update_ops);
+}
+
/**
* xe_migrate_wait() - Complete all operations using the xe_migrate context
* @m: Migrate context to wait for.
diff --git a/drivers/gpu/drm/xe/xe_migrate.h b/drivers/gpu/drm/xe/xe_migrate.h
index a5bcaafe4a99..453e0ecf5034 100644
--- a/drivers/gpu/drm/xe/xe_migrate.h
+++ b/drivers/gpu/drm/xe/xe_migrate.h
@@ -47,6 +47,24 @@ struct xe_migrate_pt_update_ops {
struct xe_tile *tile, struct iosys_map *map,
void *pos, u32 ofs, u32 num_qwords,
const struct xe_vm_pgtable_update *update);
+ /**
+ * @clear: Clear a command buffer or page-table with ptes.
+ * @pt_update: Embeddable callback argument.
+ * @tile: The tile for the current operation.
+ * @map: struct iosys_map into the memory to be populated.
+ * @pos: If @map is NULL, map into the memory to be populated.
+ * @ofs: qword offset into @map, unused if @map is NULL.
+ * @num_qwords: Number of qwords to write.
+ * @update: Information about the PTEs to be inserted.
+ *
+ * This interface is intended to be used as a callback into the
+ * page-table system to populate command buffers or shared
+ * page-tables with PTEs.
+ */
+ void (*clear)(struct xe_migrate_pt_update *pt_update,
+ struct xe_tile *tile, struct iosys_map *map,
+ void *pos, u32 ofs, u32 num_qwords,
+ const struct xe_vm_pgtable_update *update);
/**
* @pre_commit: Callback to be called just before arming the
@@ -67,14 +85,10 @@ struct xe_migrate_pt_update_ops {
struct xe_migrate_pt_update {
/** @ops: Pointer to the struct xe_migrate_pt_update_ops callbacks */
const struct xe_migrate_pt_update_ops *ops;
- /** @vma: The vma we're updating the pagetable for. */
- struct xe_vma *vma;
+ /** @vops: VMA operations */
+ struct xe_vma_ops *vops;
/** @job: The job if a GPU page-table update. NULL otherwise */
struct xe_sched_job *job;
- /** @start: Start of update for the range fence */
- u64 start;
- /** @last: Last of update for the range fence */
- u64 last;
/** @tile_id: Tile ID of the update */
u8 tile_id;
};
@@ -96,12 +110,6 @@ struct xe_vm *xe_migrate_get_vm(struct xe_migrate *m);
struct dma_fence *
xe_migrate_update_pgtables(struct xe_migrate *m,
- struct xe_vm *vm,
- struct xe_bo *bo,
- struct xe_exec_queue *q,
- const struct xe_vm_pgtable_update *updates,
- u32 num_updates,
- struct xe_sync_entry *syncs, u32 num_syncs,
struct xe_migrate_pt_update *pt_update);
void xe_migrate_wait(struct xe_migrate *m);
diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
index ade9e7a3a0ad..d6ce531f0fcd 100644
--- a/drivers/gpu/drm/xe/xe_pt.c
+++ b/drivers/gpu/drm/xe/xe_pt.c
@@ -9,12 +9,15 @@
#include "xe_bo.h"
#include "xe_device.h"
#include "xe_drm_client.h"
+#include "xe_exec_queue.h"
#include "xe_gt.h"
#include "xe_gt_tlb_invalidation.h"
#include "xe_migrate.h"
#include "xe_pt_types.h"
#include "xe_pt_walk.h"
#include "xe_res_cursor.h"
+#include "xe_sched_job.h"
+#include "xe_sync.h"
#include "xe_trace.h"
#include "xe_ttm_stolen_mgr.h"
#include "xe_vm.h"
@@ -325,6 +328,7 @@ xe_pt_new_shared(struct xe_walk_update *wupd, struct xe_pt *parent,
entry->pt = parent;
entry->flags = 0;
entry->qwords = 0;
+ entry->pt_bo->update_index = -1;
if (alloc_entries) {
entry->pt_entries = kmalloc_array(XE_PDES,
@@ -864,9 +868,7 @@ static void xe_pt_commit_locks_assert(struct xe_vma *vma)
lockdep_assert_held(&vm->lock);
- if (xe_vma_is_userptr(vma))
- lockdep_assert_held_read(&vm->userptr.notifier_lock);
- else if (!xe_vma_is_null(vma))
+ if (!xe_vma_is_userptr(vma) && !xe_vma_is_null(vma))
dma_resv_assert_held(xe_vma_bo(vma)->ttm.base.resv);
xe_vm_assert_held(vm);
@@ -888,10 +890,8 @@ static void xe_pt_commit_bind(struct xe_vma *vma,
if (!rebind)
pt->num_live += entries[i].qwords;
- if (!pt->level) {
- kfree(entries[i].pt_entries);
+ if (!pt->level)
continue;
- }
pt_dir = as_xe_pt_dir(pt);
for (j = 0; j < entries[i].qwords; j++) {
@@ -904,10 +904,18 @@ static void xe_pt_commit_bind(struct xe_vma *vma,
pt_dir->children[j_] = &newpte->base;
}
- kfree(entries[i].pt_entries);
}
}
+static void xe_pt_free_bind(struct xe_vm_pgtable_update *entries,
+ u32 num_entries)
+{
+ u32 i;
+
+ for (i = 0; i < num_entries; i++)
+ kfree(entries[i].pt_entries);
+}
+
static int
xe_pt_prepare_bind(struct xe_tile *tile, struct xe_vma *vma,
struct xe_vm_pgtable_update *entries, u32 *num_entries)
@@ -926,12 +934,13 @@ xe_pt_prepare_bind(struct xe_tile *tile, struct xe_vma *vma,
static void xe_vm_dbg_print_entries(struct xe_device *xe,
const struct xe_vm_pgtable_update *entries,
- unsigned int num_entries)
+ unsigned int num_entries, bool bind)
#if (IS_ENABLED(CONFIG_DRM_XE_DEBUG_VM))
{
unsigned int i;
- vm_dbg(&xe->drm, "%u entries to update\n", num_entries);
+ vm_dbg(&xe->drm, "%s: %u entries to update\n", bind ? "bind" : "unbind",
+ num_entries);
for (i = 0; i < num_entries; i++) {
const struct xe_vm_pgtable_update *entry = &entries[i];
struct xe_pt *xe_pt = entry->pt;
@@ -952,66 +961,116 @@ static void xe_vm_dbg_print_entries(struct xe_device *xe,
{}
#endif
-#ifdef CONFIG_DRM_XE_USERPTR_INVAL_INJECT
-
-static int xe_pt_userptr_inject_eagain(struct xe_userptr_vma *uvma)
+static bool no_in_syncs(struct xe_sync_entry *syncs, u32 num_syncs)
{
- u32 divisor = uvma->userptr.divisor ? uvma->userptr.divisor : 2;
- static u32 count;
+ int i;
- if (count++ % divisor == divisor - 1) {
- struct xe_vm *vm = xe_vma_vm(&uvma->vma);
+ for (i = 0; i < num_syncs; i++) {
+ struct dma_fence *fence = syncs[i].fence;
- uvma->userptr.divisor = divisor << 1;
- spin_lock(&vm->userptr.invalidated_lock);
- list_move_tail(&uvma->userptr.invalidate_link,
- &vm->userptr.invalidated);
- spin_unlock(&vm->userptr.invalidated_lock);
- return true;
+ if (fence && !test_bit(DMA_FENCE_FLAG_SIGNALED_BIT,
+ &fence->flags))
+ return false;
}
- return false;
+ return true;
}
-#else
-
-static bool xe_pt_userptr_inject_eagain(struct xe_userptr_vma *uvma)
+static int vma_add_deps(struct xe_vma *vma, struct xe_sched_job *job)
{
- return false;
+ struct xe_bo *bo = xe_vma_bo(vma);
+
+ xe_bo_assert_held(bo);
+
+ if (bo && !bo->vm) {
+ if (!job) {
+ if (!dma_resv_test_signaled(bo->ttm.base.resv,
+ DMA_RESV_USAGE_KERNEL))
+ return -ETIME;
+ } else {
+ return xe_sched_job_add_deps(job, bo->ttm.base.resv,
+ DMA_RESV_USAGE_KERNEL);
+ }
+ }
+
+ return 0;
}
-#endif
+static int op_add_deps(struct xe_vm *vm, struct xe_vma_op *op,
+ struct xe_sched_job *job)
+{
+ int err = 0;
-/**
- * struct xe_pt_migrate_pt_update - Callback argument for pre-commit callbacks
- * @base: Base we derive from.
- * @bind: Whether this is a bind or an unbind operation. A bind operation
- * makes the pre-commit callback error with -EAGAIN if it detects a
- * pending invalidation.
- * @locked: Whether the pre-commit callback locked the userptr notifier lock
- * and it needs unlocking.
- */
-struct xe_pt_migrate_pt_update {
- struct xe_migrate_pt_update base;
- bool bind;
- bool locked;
-};
+ switch (op->base.op) {
+ case DRM_GPUVA_OP_MAP:
+ if (!op->map.immediate && xe_vm_in_fault_mode(vm))
+ break;
+
+ err = vma_add_deps(op->map.vma, job);
+ break;
+ case DRM_GPUVA_OP_REMAP:
+ if (op->remap.prev)
+ err = vma_add_deps(op->remap.prev, job);
+ if (!err && op->remap.next)
+ err = vma_add_deps(op->remap.next, job);
+ break;
+ case DRM_GPUVA_OP_UNMAP:
+ break;
+ case DRM_GPUVA_OP_PREFETCH:
+ err = vma_add_deps(gpuva_to_vma(op->base.prefetch.va), job);
+ break;
+ default:
+ drm_warn(&vm->xe->drm, "NOT POSSIBLE");
+ }
+
+ return err;
+}
-/*
- * This function adds the needed dependencies to a page-table update job
- * to make sure racing jobs for separate bind engines don't race writing
- * to the same page-table range, wreaking havoc. Initially use a single
- * fence for the entire VM. An optimization would use smaller granularity.
- */
static int xe_pt_vm_dependencies(struct xe_sched_job *job,
- struct xe_range_fence_tree *rftree,
- u64 start, u64 last)
+ struct xe_vm *vm,
+ struct xe_vma_ops *vops,
+ struct xe_vm_pgtable_update_ops *pt_update_ops,
+ struct xe_range_fence_tree *rftree)
{
struct xe_range_fence *rtfence;
struct dma_fence *fence;
- int err;
+ struct xe_vma_op *op;
+ int err = 0, i;
- rtfence = xe_range_fence_tree_first(rftree, start, last);
+ xe_vm_assert_held(vm);
+
+ if (!job && !no_in_syncs(vops->syncs, vops->num_syncs))
+ return -ETIME;
+
+ if (!job && !xe_exec_queue_is_idle(pt_update_ops->q))
+ return -ETIME;
+
+ if (pt_update_ops->wait_vm_bookkeep) {
+ if (!job) {
+ if (!dma_resv_test_signaled(xe_vm_resv(vm),
+ DMA_RESV_USAGE_BOOKKEEP))
+ return -ETIME;
+ } else {
+ err = xe_sched_job_add_deps(job, xe_vm_resv(vm),
+ DMA_RESV_USAGE_BOOKKEEP);
+ if (err)
+ return err;
+ }
+ } else if (pt_update_ops->wait_vm_kernel) {
+ if (!job) {
+ if (!dma_resv_test_signaled(xe_vm_resv(vm),
+ DMA_RESV_USAGE_KERNEL))
+ return -ETIME;
+ } else {
+ err = xe_sched_job_add_deps(job, xe_vm_resv(vm),
+ DMA_RESV_USAGE_KERNEL);
+ if (err)
+ return err;
+ }
+ }
+
+ rtfence = xe_range_fence_tree_first(rftree, pt_update_ops->start,
+ pt_update_ops->last);
while (rtfence) {
fence = rtfence->fence;
@@ -1029,80 +1088,173 @@ static int xe_pt_vm_dependencies(struct xe_sched_job *job,
return err;
}
- rtfence = xe_range_fence_tree_next(rtfence, start, last);
+ rtfence = xe_range_fence_tree_next(rtfence,
+ pt_update_ops->start,
+ pt_update_ops->last);
}
- return 0;
+ list_for_each_entry(op, &vops->list, link) {
+ err = op_add_deps(vm, op, job);
+ if (err)
+ return err;
+ }
+
+ if (job)
+ err = xe_sched_job_last_fence_add_dep(job, vm);
+ else
+ err = xe_exec_queue_last_fence_test_dep(pt_update_ops->q, vm);
+
+ for (i = 0; job && !err && i < vops->num_syncs; i++)
+ err = xe_sync_entry_add_deps(&vops->syncs[i], job);
+
+ return err;
}
static int xe_pt_pre_commit(struct xe_migrate_pt_update *pt_update)
{
- struct xe_range_fence_tree *rftree =
- &xe_vma_vm(pt_update->vma)->rftree[pt_update->tile_id];
+ struct xe_vma_ops *vops = pt_update->vops;
+ struct xe_vm *vm = vops->vm;
+ struct xe_range_fence_tree *rftree = &vm->rftree[pt_update->tile_id];
+ struct xe_vm_pgtable_update_ops *pt_update_ops =
+ &vops->pt_update_ops[pt_update->tile_id];
+
+ return xe_pt_vm_dependencies(pt_update->job, vm, pt_update->vops,
+ pt_update_ops, rftree);
+}
+
+#ifdef CONFIG_DRM_XE_USERPTR_INVAL_INJECT
- return xe_pt_vm_dependencies(pt_update->job, rftree,
- pt_update->start, pt_update->last);
+static bool xe_pt_userptr_inject_eagain(struct xe_userptr_vma *uvma)
+{
+ u32 divisor = uvma->userptr.divisor ? uvma->userptr.divisor : 2;
+ static u32 count;
+
+ if (count++ % divisor == divisor - 1) {
+ uvma->userptr.divisor = divisor << 1;
+ return true;
+ }
+
+ return false;
}
-static int xe_pt_userptr_pre_commit(struct xe_migrate_pt_update *pt_update)
+#else
+
+static bool xe_pt_userptr_inject_eagain(struct xe_userptr_vma *uvma)
{
- struct xe_pt_migrate_pt_update *userptr_update =
- container_of(pt_update, typeof(*userptr_update), base);
- struct xe_userptr_vma *uvma = to_userptr_vma(pt_update->vma);
- unsigned long notifier_seq = uvma->userptr.notifier_seq;
- struct xe_vm *vm = xe_vma_vm(&uvma->vma);
- int err = xe_pt_vm_dependencies(pt_update->job,
- &vm->rftree[pt_update->tile_id],
- pt_update->start,
- pt_update->last);
+ return false;
+}
- if (err)
- return err;
+#endif
- userptr_update->locked = false;
+static int vma_check_userptr(struct xe_vm *vm, struct xe_vma *vma,
+ struct xe_vm_pgtable_update_ops *pt_update)
+{
+ struct xe_userptr_vma *uvma;
+ unsigned long notifier_seq;
- /*
- * Wait until nobody is running the invalidation notifier, and
- * since we're exiting the loop holding the notifier lock,
- * nobody can proceed invalidating either.
- *
- * Note that we don't update the vma->userptr.notifier_seq since
- * we don't update the userptr pages.
- */
- do {
- down_read(&vm->userptr.notifier_lock);
- if (!mmu_interval_read_retry(&uvma->userptr.notifier,
- notifier_seq))
- break;
+ lockdep_assert_held_read(&vm->userptr.notifier_lock);
- up_read(&vm->userptr.notifier_lock);
+ if (!xe_vma_is_userptr(vma))
+ return 0;
- if (userptr_update->bind)
- return -EAGAIN;
+ uvma = to_userptr_vma(vma);
+ notifier_seq = uvma->userptr.notifier_seq;
- notifier_seq = mmu_interval_read_begin(&uvma->userptr.notifier);
- } while (true);
+ if (uvma->userptr.initial_bind && !xe_vm_in_fault_mode(vm))
+ return 0;
- /* Inject errors to test_whether they are handled correctly */
- if (userptr_update->bind && xe_pt_userptr_inject_eagain(uvma)) {
- up_read(&vm->userptr.notifier_lock);
+ if (!mmu_interval_read_retry(&uvma->userptr.notifier,
+ notifier_seq) &&
+ !xe_pt_userptr_inject_eagain(uvma))
+ return 0;
+
+ if (xe_vm_in_fault_mode(vm)) {
return -EAGAIN;
- }
+ } else {
+ spin_lock(&vm->userptr.invalidated_lock);
+ list_move_tail(&uvma->userptr.invalidate_link,
+ &vm->userptr.invalidated);
+ spin_unlock(&vm->userptr.invalidated_lock);
- userptr_update->locked = true;
+ if (xe_vm_in_preempt_fence_mode(vm)) {
+ struct dma_resv_iter cursor;
+ struct dma_fence *fence;
+ long err;
+
+ dma_resv_iter_begin(&cursor, xe_vm_resv(vm),
+ DMA_RESV_USAGE_BOOKKEEP);
+ dma_resv_for_each_fence_unlocked(&cursor, fence)
+ dma_fence_enable_sw_signaling(fence);
+ dma_resv_iter_end(&cursor);
+
+ err = dma_resv_wait_timeout(xe_vm_resv(vm),
+ DMA_RESV_USAGE_BOOKKEEP,
+ false, MAX_SCHEDULE_TIMEOUT);
+ XE_WARN_ON(err <= 0);
+ }
+ }
return 0;
}
-static const struct xe_migrate_pt_update_ops bind_ops = {
- .populate = xe_vm_populate_pgtable,
- .pre_commit = xe_pt_pre_commit,
-};
+static int op_check_userptr(struct xe_vm *vm, struct xe_vma_op *op,
+ struct xe_vm_pgtable_update_ops *pt_update)
+{
+ int err = 0;
-static const struct xe_migrate_pt_update_ops userptr_bind_ops = {
- .populate = xe_vm_populate_pgtable,
- .pre_commit = xe_pt_userptr_pre_commit,
-};
+ lockdep_assert_held_read(&vm->userptr.notifier_lock);
+
+ switch (op->base.op) {
+ case DRM_GPUVA_OP_MAP:
+ if (!op->map.immediate && xe_vm_in_fault_mode(vm))
+ break;
+
+ err = vma_check_userptr(vm, op->map.vma, pt_update);
+ break;
+ case DRM_GPUVA_OP_REMAP:
+ if (op->remap.prev)
+ err = vma_check_userptr(vm, op->remap.prev, pt_update);
+ if (!err && op->remap.next)
+ err = vma_check_userptr(vm, op->remap.next, pt_update);
+ break;
+ case DRM_GPUVA_OP_UNMAP:
+ break;
+ case DRM_GPUVA_OP_PREFETCH:
+ err = vma_check_userptr(vm, gpuva_to_vma(op->base.prefetch.va),
+ pt_update);
+ break;
+ default:
+ drm_warn(&vm->xe->drm, "NOT POSSIBLE");
+ }
+
+ return err;
+}
+
+static int xe_pt_userptr_pre_commit(struct xe_migrate_pt_update *pt_update)
+{
+ struct xe_vm *vm = pt_update->vops->vm;
+ struct xe_vma_ops *vops = pt_update->vops;
+ struct xe_vm_pgtable_update_ops *pt_update_ops =
+ &vops->pt_update_ops[pt_update->tile_id];
+ struct xe_vma_op *op;
+ int err;
+
+ err = xe_pt_pre_commit(pt_update);
+ if (err)
+ return err;
+
+ down_read(&vm->userptr.notifier_lock);
+
+ list_for_each_entry(op, &vops->list, link) {
+ err = op_check_userptr(vm, op, pt_update_ops);
+ if (err) {
+ up_read(&vm->userptr.notifier_lock);
+ break;
+ }
+ }
+
+ return err;
+}
struct invalidation_fence {
struct xe_gt_tlb_invalidation_fence base;
@@ -1200,190 +1352,6 @@ static int invalidation_fence_init(struct xe_gt *gt,
return ret && ret != -ENOENT ? ret : 0;
}
-static void xe_pt_calc_rfence_interval(struct xe_vma *vma,
- struct xe_pt_migrate_pt_update *update,
- struct xe_vm_pgtable_update *entries,
- u32 num_entries)
-{
- int i, level = 0;
-
- for (i = 0; i < num_entries; i++) {
- const struct xe_vm_pgtable_update *entry = &entries[i];
-
- if (entry->pt->level > level)
- level = entry->pt->level;
- }
-
- /* Greedy (non-optimal) calculation but simple */
- update->base.start = ALIGN_DOWN(xe_vma_start(vma),
- 0x1ull << xe_pt_shift(level));
- update->base.last = ALIGN(xe_vma_end(vma),
- 0x1ull << xe_pt_shift(level)) - 1;
-}
-
-/**
- * __xe_pt_bind_vma() - Build and connect a page-table tree for the vma
- * address range.
- * @tile: The tile to bind for.
- * @vma: The vma to bind.
- * @q: The exec_queue with which to do pipelined page-table updates.
- * @syncs: Entries to sync on before binding the built tree to the live vm tree.
- * @num_syncs: Number of @sync entries.
- * @rebind: Whether we're rebinding this vma to the same address range without
- * an unbind in-between.
- *
- * This function builds a page-table tree (see xe_pt_stage_bind() for more
- * information on page-table building), and the xe_vm_pgtable_update entries
- * abstracting the operations needed to attach it to the main vm tree. It
- * then takes the relevant locks and updates the metadata side of the main
- * vm tree and submits the operations for pipelined attachment of the
- * gpu page-table to the vm main tree, (which can be done either by the
- * cpu and the GPU).
- *
- * Return: A valid dma-fence representing the pipelined attachment operation
- * on success, an error pointer on error.
- */
-struct dma_fence *
-__xe_pt_bind_vma(struct xe_tile *tile, struct xe_vma *vma, struct xe_exec_queue *q,
- struct xe_sync_entry *syncs, u32 num_syncs,
- bool rebind)
-{
- struct xe_vm_pgtable_update entries[XE_VM_MAX_LEVEL * 2 + 1];
- struct xe_pt_migrate_pt_update bind_pt_update = {
- .base = {
- .ops = xe_vma_is_userptr(vma) ? &userptr_bind_ops : &bind_ops,
- .vma = vma,
- .tile_id = tile->id,
- },
- .bind = true,
- };
- struct xe_vm *vm = xe_vma_vm(vma);
- u32 num_entries;
- struct dma_fence *fence;
- struct invalidation_fence *ifence = NULL;
- struct xe_range_fence *rfence;
- int err;
-
- bind_pt_update.locked = false;
- xe_bo_assert_held(xe_vma_bo(vma));
- xe_vm_assert_held(vm);
-
- vm_dbg(&xe_vma_vm(vma)->xe->drm,
- "Preparing bind, with range [%llx...%llx) engine %p.\n",
- xe_vma_start(vma), xe_vma_end(vma), q);
-
- err = xe_pt_prepare_bind(tile, vma, entries, &num_entries);
- if (err)
- goto err;
-
- err = dma_resv_reserve_fences(xe_vm_resv(vm), 1);
- if (!err && !xe_vma_has_no_bo(vma) && !xe_vma_bo(vma)->vm)
- err = dma_resv_reserve_fences(xe_vma_bo(vma)->ttm.base.resv, 1);
- if (err)
- goto err;
-
- xe_tile_assert(tile, num_entries <= ARRAY_SIZE(entries));
-
- xe_vm_dbg_print_entries(tile_to_xe(tile), entries, num_entries);
- xe_pt_calc_rfence_interval(vma, &bind_pt_update, entries,
- num_entries);
-
- /*
- * If rebind, we have to invalidate TLB on !LR vms to invalidate
- * cached PTEs point to freed memory. on LR vms this is done
- * automatically when the context is re-enabled by the rebind worker,
- * or in fault mode it was invalidated on PTE zapping.
- *
- * If !rebind, and scratch enabled VMs, there is a chance the scratch
- * PTE is already cached in the TLB so it needs to be invalidated.
- * on !LR VMs this is done in the ring ops preceding a batch, but on
- * non-faulting LR, in particular on user-space batch buffer chaining,
- * it needs to be done here.
- */
- if ((!rebind && xe_vm_has_scratch(vm) && xe_vm_in_preempt_fence_mode(vm))) {
- ifence = kzalloc(sizeof(*ifence), GFP_KERNEL);
- if (!ifence)
- return ERR_PTR(-ENOMEM);
- } else if (rebind && !xe_vm_in_lr_mode(vm)) {
- /* We bump also if batch_invalidate_tlb is true */
- vm->tlb_flush_seqno++;
- }
-
- rfence = kzalloc(sizeof(*rfence), GFP_KERNEL);
- if (!rfence) {
- kfree(ifence);
- return ERR_PTR(-ENOMEM);
- }
-
- fence = xe_migrate_update_pgtables(tile->migrate,
- vm, xe_vma_bo(vma), q,
- entries, num_entries,
- syncs, num_syncs,
- &bind_pt_update.base);
- if (!IS_ERR(fence)) {
- bool last_munmap_rebind = vma->gpuva.flags & XE_VMA_LAST_REBIND;
- LLIST_HEAD(deferred);
- int err;
-
- err = xe_range_fence_insert(&vm->rftree[tile->id], rfence,
- &xe_range_fence_kfree_ops,
- bind_pt_update.base.start,
- bind_pt_update.base.last, fence);
- if (err)
- dma_fence_wait(fence, false);
-
- /* TLB invalidation must be done before signaling rebind */
- if (ifence) {
- int err = invalidation_fence_init(tile->primary_gt,
- ifence, fence,
- xe_vma_start(vma),
- xe_vma_end(vma),
- xe_vma_vm(vma)->usm.asid);
- if (err) {
- dma_fence_put(fence);
- kfree(ifence);
- return ERR_PTR(err);
- }
- fence = &ifence->base.base;
- }
-
- /* add shared fence now for pagetable delayed destroy */
- dma_resv_add_fence(xe_vm_resv(vm), fence, rebind ||
- last_munmap_rebind ?
- DMA_RESV_USAGE_KERNEL :
- DMA_RESV_USAGE_BOOKKEEP);
-
- if (!xe_vma_has_no_bo(vma) && !xe_vma_bo(vma)->vm)
- dma_resv_add_fence(xe_vma_bo(vma)->ttm.base.resv, fence,
- DMA_RESV_USAGE_BOOKKEEP);
- xe_pt_commit_bind(vma, entries, num_entries, rebind,
- bind_pt_update.locked ? &deferred : NULL);
-
- /* This vma is live (again?) now */
- vma->tile_present |= BIT(tile->id);
-
- if (bind_pt_update.locked) {
- to_userptr_vma(vma)->userptr.initial_bind = true;
- up_read(&vm->userptr.notifier_lock);
- xe_bo_put_commit(&deferred);
- }
- if (!rebind && last_munmap_rebind &&
- xe_vm_in_preempt_fence_mode(vm))
- xe_vm_queue_rebind_worker(vm);
- } else {
- kfree(rfence);
- kfree(ifence);
- if (bind_pt_update.locked)
- up_read(&vm->userptr.notifier_lock);
- xe_pt_abort_bind(vma, entries, num_entries);
- }
-
- return fence;
-
-err:
- return ERR_PTR(err);
-}
-
struct xe_pt_stage_unbind_walk {
/** @base: The pagewalk base-class. */
struct xe_pt_walk base;
@@ -1534,8 +1502,8 @@ xe_migrate_clear_pgtable_callback(struct xe_migrate_pt_update *pt_update,
void *ptr, u32 qword_ofs, u32 num_qwords,
const struct xe_vm_pgtable_update *update)
{
- struct xe_vma *vma = pt_update->vma;
- u64 empty = __xe_pt_empty_pte(tile, xe_vma_vm(vma), update->pt->level);
+ struct xe_vm *vm = pt_update->vops->vm;
+ u64 empty = __xe_pt_empty_pte(tile, vm, update->pt->level);
int i;
if (map && map->is_iomem)
@@ -1579,151 +1547,489 @@ xe_pt_commit_unbind(struct xe_vma *vma,
}
}
-static const struct xe_migrate_pt_update_ops unbind_ops = {
- .populate = xe_migrate_clear_pgtable_callback,
- .pre_commit = xe_pt_pre_commit,
-};
+static void
+xe_pt_update_ops_rfence_interval(struct xe_vm_pgtable_update_ops *pt_update_ops,
+ struct xe_vma *vma)
+{
+ u32 current_op = pt_update_ops->current_op;
+ struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[current_op];
+ int i, level = 0;
+ u64 start, last;
-static const struct xe_migrate_pt_update_ops userptr_unbind_ops = {
- .populate = xe_migrate_clear_pgtable_callback,
- .pre_commit = xe_pt_userptr_pre_commit,
-};
+ for (i = 0; i < pt_op->num_entries; i++) {
+ const struct xe_vm_pgtable_update *entry = &pt_op->entries[i];
-/**
- * __xe_pt_unbind_vma() - Disconnect and free a page-table tree for the vma
- * address range.
- * @tile: The tile to unbind for.
- * @vma: The vma to unbind.
- * @q: The exec_queue with which to do pipelined page-table updates.
- * @syncs: Entries to sync on before disconnecting the tree to be destroyed.
- * @num_syncs: Number of @sync entries.
- *
- * This function builds a the xe_vm_pgtable_update entries abstracting the
- * operations needed to detach the page-table tree to be destroyed from the
- * man vm tree.
- * It then takes the relevant locks and submits the operations for
- * pipelined detachment of the gpu page-table from the vm main tree,
- * (which can be done either by the cpu and the GPU), Finally it frees the
- * detached page-table tree.
- *
- * Return: A valid dma-fence representing the pipelined detachment operation
- * on success, an error pointer on error.
- */
-struct dma_fence *
-__xe_pt_unbind_vma(struct xe_tile *tile, struct xe_vma *vma, struct xe_exec_queue *q,
- struct xe_sync_entry *syncs, u32 num_syncs)
+ if (entry->pt->level > level)
+ level = entry->pt->level;
+ }
+
+ /* Greedy (non-optimal) calculation but simple */
+ start = ALIGN_DOWN(xe_vma_start(vma), 0x1ull << xe_pt_shift(level));
+ last = ALIGN(xe_vma_end(vma), 0x1ull << xe_pt_shift(level)) - 1;
+
+ if (start < pt_update_ops->start)
+ pt_update_ops->start = start;
+ if (last > pt_update_ops->last)
+ pt_update_ops->last = last;
+}
+
+static int vma_reserve_fences(struct xe_device *xe, struct xe_vma *vma)
{
- struct xe_vm_pgtable_update entries[XE_VM_MAX_LEVEL * 2 + 1];
- struct xe_pt_migrate_pt_update unbind_pt_update = {
- .base = {
- .ops = xe_vma_is_userptr(vma) ? &userptr_unbind_ops :
- &unbind_ops,
- .vma = vma,
- .tile_id = tile->id,
- },
- };
- struct xe_vm *vm = xe_vma_vm(vma);
- u32 num_entries;
- struct dma_fence *fence = NULL;
- struct invalidation_fence *ifence;
- struct xe_range_fence *rfence;
- int err;
+ if (!xe_vma_has_no_bo(vma) && !xe_vma_bo(vma)->vm)
+ return dma_resv_reserve_fences(xe_vma_bo(vma)->ttm.base.resv,
+ xe->info.tile_count);
- LLIST_HEAD(deferred);
+ return 0;
+}
+
+static int bind_op_prepare(struct xe_vm *vm, struct xe_tile *tile,
+ struct xe_vm_pgtable_update_ops *pt_update_ops,
+ struct xe_vma *vma)
+{
+ u32 current_op = pt_update_ops->current_op;
+ struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[current_op];
+ struct llist_head *deferred = &pt_update_ops->deferred;
+ int err;
xe_bo_assert_held(xe_vma_bo(vma));
- xe_vm_assert_held(vm);
vm_dbg(&xe_vma_vm(vma)->xe->drm,
- "Preparing unbind, with range [%llx...%llx) engine %p.\n",
- xe_vma_start(vma), xe_vma_end(vma), q);
-
- num_entries = xe_pt_stage_unbind(tile, vma, entries);
- xe_tile_assert(tile, num_entries <= ARRAY_SIZE(entries));
+ "Preparing bind, with range [%llx...%llx)\n",
+ xe_vma_start(vma), xe_vma_end(vma) - 1);
- xe_vm_dbg_print_entries(tile_to_xe(tile), entries, num_entries);
- xe_pt_calc_rfence_interval(vma, &unbind_pt_update, entries,
- num_entries);
+ pt_op->vma = NULL;
+ pt_op->bind = true;
+ pt_op->rebind = BIT(tile->id) & vma->tile_present;
- err = dma_resv_reserve_fences(xe_vm_resv(vm), 1);
- if (!err && !xe_vma_has_no_bo(vma) && !xe_vma_bo(vma)->vm)
- err = dma_resv_reserve_fences(xe_vma_bo(vma)->ttm.base.resv, 1);
+ err = vma_reserve_fences(tile_to_xe(tile), vma);
if (err)
- return ERR_PTR(err);
+ return err;
- ifence = kzalloc(sizeof(*ifence), GFP_KERNEL);
- if (!ifence)
- return ERR_PTR(-ENOMEM);
+ err = xe_pt_prepare_bind(tile, vma, pt_op->entries,
+ &pt_op->num_entries);
+ if (!err) {
+ xe_tile_assert(tile, pt_op->num_entries <=
+ ARRAY_SIZE(pt_op->entries));
+ xe_vm_dbg_print_entries(tile_to_xe(tile), pt_op->entries,
+ pt_op->num_entries, true);
- rfence = kzalloc(sizeof(*rfence), GFP_KERNEL);
- if (!rfence) {
- kfree(ifence);
- return ERR_PTR(-ENOMEM);
+ xe_pt_update_ops_rfence_interval(pt_update_ops, vma);
+ ++pt_update_ops->current_op;
+ pt_update_ops->needs_userptr_lock |= xe_vma_is_userptr(vma);
+
+
+ /*
+ * If rebind, we have to invalidate TLB on !LR vms to invalidate
+ * cached PTEs point to freed memory. on LR vms this is done
+ * automatically when the context is re-enabled by the rebind worker,
+ * or in fault mode it was invalidated on PTE zapping.
+ *
+ * If !rebind, and scratch enabled VMs, there is a chance the scratch
+ * PTE is already cached in the TLB so it needs to be invalidated.
+ * on !LR VMs this is done in the ring ops preceding a batch, but on
+ * non-faulting LR, in particular on user-space batch buffer chaining,
+ * it needs to be done here.
+ */
+ if ((!pt_op->rebind && xe_vm_has_scratch(vm) &&
+ xe_vm_in_preempt_fence_mode(vm)))
+ pt_update_ops->needs_invalidation = true;
+ else if (pt_op->rebind && !xe_vm_in_lr_mode(vm))
+ /* We bump also if batch_invalidate_tlb is true */
+ vm->tlb_flush_seqno++;
+
+ /* FIXME: Don't commit right away */
+ vma->tile_staged |= BIT(tile->id);
+ pt_op->vma = vma;
+ xe_pt_commit_bind(vma, pt_op->entries, pt_op->num_entries,
+ pt_op->rebind, deferred);
}
+ return err;
+}
+
+static int unbind_op_prepare(struct xe_tile *tile,
+ struct xe_vm_pgtable_update_ops *pt_update_ops,
+ struct xe_vma *vma)
+{
+ u32 current_op = pt_update_ops->current_op;
+ struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[current_op];
+ struct llist_head *deferred = &pt_update_ops->deferred;
+ int err;
+
+ if (!((vma->tile_present | vma->tile_staged) & BIT(tile->id)))
+ return 0;
+
+ xe_bo_assert_held(xe_vma_bo(vma));
+
+ vm_dbg(&xe_vma_vm(vma)->xe->drm,
+ "Preparing unbind, with range [%llx...%llx)\n",
+ xe_vma_start(vma), xe_vma_end(vma) - 1);
+
/*
- * Even if we were already evicted and unbind to destroy, we need to
- * clear again here. The eviction may have updated pagetables at a
- * lower level, because it needs to be more conservative.
+ * Wait for invalidation to complete. Can corrupt internal page table
+ * state if an invalidation is running while preparing an unbind.
*/
- fence = xe_migrate_update_pgtables(tile->migrate,
- vm, NULL, q ? q :
- vm->q[tile->id],
- entries, num_entries,
- syncs, num_syncs,
- &unbind_pt_update.base);
- if (!IS_ERR(fence)) {
- int err;
-
- err = xe_range_fence_insert(&vm->rftree[tile->id], rfence,
- &xe_range_fence_kfree_ops,
- unbind_pt_update.base.start,
- unbind_pt_update.base.last, fence);
- if (err)
- dma_fence_wait(fence, false);
+ if (xe_vma_is_userptr(vma) && xe_vm_in_fault_mode(xe_vma_vm(vma)))
+ mmu_interval_read_begin(&to_userptr_vma(vma)->userptr.notifier);
- /* TLB invalidation must be done before signaling unbind */
- err = invalidation_fence_init(tile->primary_gt, ifence, fence,
- xe_vma_start(vma),
- xe_vma_end(vma),
- xe_vma_vm(vma)->usm.asid);
- if (err) {
- dma_fence_put(fence);
- kfree(ifence);
- return ERR_PTR(err);
+ pt_op->vma = vma;
+ pt_op->bind = false;
+ pt_op->rebind = false;
+
+ err = vma_reserve_fences(tile_to_xe(tile), vma);
+ if (err)
+ return err;
+
+ pt_op->num_entries = xe_pt_stage_unbind(tile, vma, pt_op->entries);
+
+ xe_vm_dbg_print_entries(tile_to_xe(tile), pt_op->entries,
+ pt_op->num_entries, false);
+ xe_pt_update_ops_rfence_interval(pt_update_ops, vma);
+ ++pt_update_ops->current_op;
+ pt_update_ops->needs_userptr_lock |= xe_vma_is_userptr(vma);
+ pt_update_ops->needs_invalidation = true;
+
+ /* FIXME: Don't commit right away */
+ xe_pt_commit_unbind(vma, pt_op->entries, pt_op->num_entries,
+ deferred);
+
+ return 0;
+}
+
+static int op_prepare(struct xe_vm *vm,
+ struct xe_tile *tile,
+ struct xe_vm_pgtable_update_ops *pt_update_ops,
+ struct xe_vma_op *op)
+{
+ int err = 0;
+
+ xe_vm_assert_held(vm);
+
+ switch (op->base.op) {
+ case DRM_GPUVA_OP_MAP:
+ if (!op->map.immediate && xe_vm_in_fault_mode(vm))
+ break;
+
+ err = bind_op_prepare(vm, tile, pt_update_ops, op->map.vma);
+ pt_update_ops->wait_vm_kernel = true;
+ break;
+ case DRM_GPUVA_OP_REMAP:
+ err = unbind_op_prepare(tile, pt_update_ops,
+ gpuva_to_vma(op->base.remap.unmap->va));
+
+ if (!err && op->remap.prev) {
+ err = bind_op_prepare(vm, tile, pt_update_ops,
+ op->remap.prev);
+ pt_update_ops->wait_vm_bookkeep = true;
}
- fence = &ifence->base.base;
+ if (!err && op->remap.next) {
+ err = bind_op_prepare(vm, tile, pt_update_ops,
+ op->remap.next);
+ pt_update_ops->wait_vm_bookkeep = true;
+ }
+ break;
+ case DRM_GPUVA_OP_UNMAP:
+ err = unbind_op_prepare(tile, pt_update_ops,
+ gpuva_to_vma(op->base.unmap.va));
+ break;
+ case DRM_GPUVA_OP_PREFETCH:
+ err = bind_op_prepare(vm, tile, pt_update_ops,
+ gpuva_to_vma(op->base.prefetch.va));
+ pt_update_ops->wait_vm_kernel = true;
+ break;
+ default:
+ drm_warn(&vm->xe->drm, "NOT POSSIBLE");
+ }
- /* add shared fence now for pagetable delayed destroy */
- dma_resv_add_fence(xe_vm_resv(vm), fence,
- DMA_RESV_USAGE_BOOKKEEP);
+ return err;
+}
- /* This fence will be installed by caller when doing eviction */
- if (!xe_vma_has_no_bo(vma) && !xe_vma_bo(vma)->vm)
- dma_resv_add_fence(xe_vma_bo(vma)->ttm.base.resv, fence,
- DMA_RESV_USAGE_BOOKKEEP);
- xe_pt_commit_unbind(vma, entries, num_entries,
- unbind_pt_update.locked ? &deferred : NULL);
- vma->tile_present &= ~BIT(tile->id);
- } else {
- kfree(rfence);
- kfree(ifence);
+static void
+xe_pt_update_ops_init(struct xe_vm_pgtable_update_ops *pt_update_ops)
+{
+ init_llist_head(&pt_update_ops->deferred);
+ pt_update_ops->start = ~0x0ull;
+ pt_update_ops->last = 0x0ull;
+}
+
+/**
+ * xe_pt_update_ops_prepare() - Prepare PT update operations
+ * @tile: Tile of PT update operations
+ * @vops: VMA operationa
+ *
+ * Prepare PT update operations which includes updating internal PT state,
+ * allocate memory for page tables, populate page table being pruned in, and
+ * create PT update operations for leaf insertion / removal.
+ *
+ * Return: 0 on success, negative error code on error.
+ */
+int xe_pt_update_ops_prepare(struct xe_tile *tile, struct xe_vma_ops *vops)
+{
+ struct xe_vm_pgtable_update_ops *pt_update_ops =
+ &vops->pt_update_ops[tile->id];
+ struct xe_vma_op *op;
+ int err;
+
+ lockdep_assert_held(&vops->vm->lock);
+ xe_vm_assert_held(vops->vm);
+
+ xe_pt_update_ops_init(pt_update_ops);
+
+ err = dma_resv_reserve_fences(xe_vm_resv(vops->vm),
+ tile_to_xe(tile)->info.tile_count);
+ if (err)
+ return err;
+
+ list_for_each_entry(op, &vops->list, link) {
+ err = op_prepare(vops->vm, tile, pt_update_ops, op);
+
+ if (err)
+ return err;
}
- if (!vma->tile_present)
- list_del_init(&vma->combined_links.rebind);
+ xe_tile_assert(tile, pt_update_ops->current_op <=
+ pt_update_ops->num_ops);
+
+ return 0;
+}
+
+static void bind_op_commit(struct xe_vm *vm, struct xe_tile *tile,
+ struct xe_vm_pgtable_update_ops *pt_update_ops,
+ struct xe_vma *vma, struct dma_fence *fence)
+{
+ if (!xe_vma_has_no_bo(vma) && !xe_vma_bo(vma)->vm)
+ dma_resv_add_fence(xe_vma_bo(vma)->ttm.base.resv, fence,
+ pt_update_ops->wait_vm_bookkeep ?
+ DMA_RESV_USAGE_KERNEL :
+ DMA_RESV_USAGE_BOOKKEEP);
+ vma->tile_present |= BIT(tile->id);
+ vma->tile_staged &= ~BIT(tile->id);
+ if (xe_vma_is_userptr(vma)) {
+ lockdep_assert_held_read(&vm->userptr.notifier_lock);
+ to_userptr_vma(vma)->userptr.initial_bind = true;
+ }
- if (unbind_pt_update.locked) {
- xe_tile_assert(tile, xe_vma_is_userptr(vma));
+ /*
+ * Kick rebind worker if this bind triggers preempt fences and not in
+ * the rebind worker
+ */
+ if (pt_update_ops->wait_vm_bookkeep &&
+ xe_vm_in_preempt_fence_mode(vm) &&
+ !current->mm)
+ xe_vm_queue_rebind_worker(vm);
+}
+
+static void unbind_op_commit(struct xe_vm *vm, struct xe_tile *tile,
+ struct xe_vm_pgtable_update_ops *pt_update_ops,
+ struct xe_vma *vma, struct dma_fence *fence)
+{
+ if (!xe_vma_has_no_bo(vma) && !xe_vma_bo(vma)->vm)
+ dma_resv_add_fence(xe_vma_bo(vma)->ttm.base.resv, fence,
+ pt_update_ops->wait_vm_bookkeep ?
+ DMA_RESV_USAGE_KERNEL :
+ DMA_RESV_USAGE_BOOKKEEP);
+ vma->tile_present &= ~BIT(tile->id);
+ if (!vma->tile_present) {
+ list_del_init(&vma->combined_links.rebind);
+ if (xe_vma_is_userptr(vma)) {
+ lockdep_assert_held_read(&vm->userptr.notifier_lock);
- if (!vma->tile_present) {
spin_lock(&vm->userptr.invalidated_lock);
list_del_init(&to_userptr_vma(vma)->userptr.invalidate_link);
spin_unlock(&vm->userptr.invalidated_lock);
}
- up_read(&vm->userptr.notifier_lock);
- xe_bo_put_commit(&deferred);
}
+}
+
+static void op_commit(struct xe_vm *vm,
+ struct xe_tile *tile,
+ struct xe_vm_pgtable_update_ops *pt_update_ops,
+ struct xe_vma_op *op, struct dma_fence *fence)
+{
+ xe_vm_assert_held(vm);
+
+ switch (op->base.op) {
+ case DRM_GPUVA_OP_MAP:
+ if (!op->map.immediate && xe_vm_in_fault_mode(vm))
+ break;
+
+ bind_op_commit(vm, tile, pt_update_ops, op->map.vma, fence);
+ break;
+ case DRM_GPUVA_OP_REMAP:
+ unbind_op_commit(vm, tile, pt_update_ops,
+ gpuva_to_vma(op->base.remap.unmap->va), fence);
+
+ if (op->remap.prev)
+ bind_op_commit(vm, tile, pt_update_ops, op->remap.prev,
+ fence);
+ if (op->remap.next)
+ bind_op_commit(vm, tile, pt_update_ops, op->remap.next,
+ fence);
+ break;
+ case DRM_GPUVA_OP_UNMAP:
+ unbind_op_commit(vm, tile, pt_update_ops,
+ gpuva_to_vma(op->base.unmap.va), fence);
+ break;
+ case DRM_GPUVA_OP_PREFETCH:
+ bind_op_commit(vm, tile, pt_update_ops,
+ gpuva_to_vma(op->base.prefetch.va), fence);
+ break;
+ default:
+ drm_warn(&vm->xe->drm, "NOT POSSIBLE");
+ }
+}
+
+static const struct xe_migrate_pt_update_ops migrate_ops = {
+ .populate = xe_vm_populate_pgtable,
+ .clear = xe_migrate_clear_pgtable_callback,
+ .pre_commit = xe_pt_pre_commit,
+};
+
+static const struct xe_migrate_pt_update_ops userptr_migrate_ops = {
+ .populate = xe_vm_populate_pgtable,
+ .clear = xe_migrate_clear_pgtable_callback,
+ .pre_commit = xe_pt_userptr_pre_commit,
+};
+
+/**
+ * xe_pt_update_ops_run() - Run PT update operations
+ * @tile: Tile of PT update operations
+ * @vops: VMA operationa
+ *
+ * Run PT update operations which includes committing internal PT state changes,
+ * creating job for PT update operations for leaf insertion / removal, and
+ * installing job fence in various places.
+ *
+ * Return: fence on success, negative ERR_PTR on error.
+ */
+struct dma_fence *
+xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
+{
+ struct xe_vm *vm = vops->vm;
+ struct xe_vm_pgtable_update_ops *pt_update_ops =
+ &vops->pt_update_ops[tile->id];
+ struct dma_fence *fence;
+ struct invalidation_fence *ifence = NULL;
+ struct xe_range_fence *rfence;
+ struct xe_vma_op *op;
+ int err = 0;
+ struct xe_migrate_pt_update update = {
+ .ops = pt_update_ops->needs_userptr_lock ?
+ &userptr_migrate_ops :
+ &migrate_ops,
+ .vops = vops,
+ .tile_id = tile->id
+ };
+
+ lockdep_assert_held(&vm->lock);
+ xe_vm_assert_held(vm);
+
+ if (!pt_update_ops->current_op) {
+ xe_tile_assert(tile, xe_vm_in_fault_mode(vm));
+
+ return dma_fence_get_stub();
+ }
+
+ if (pt_update_ops->needs_invalidation) {
+ ifence = kzalloc(sizeof(*ifence), GFP_KERNEL);
+ if (!ifence)
+ return ERR_PTR(-ENOMEM);
+ }
+
+ rfence = kzalloc(sizeof(*rfence), GFP_KERNEL);
+ if (!rfence) {
+ err = -ENOMEM;
+ goto free_ifence;
+ }
+
+ fence = xe_migrate_update_pgtables(tile->migrate, &update);
+ if (IS_ERR(fence)) {
+ err = PTR_ERR(fence);
+ goto free_rfence;
+ }
+
+ err = xe_range_fence_insert(&vm->rftree[tile->id], rfence,
+ &xe_range_fence_kfree_ops,
+ pt_update_ops->start,
+ pt_update_ops->last, fence);
+ if (err)
+ dma_fence_wait(fence, false);
+
+ /* tlb invalidation must be done before signaling rebind */
+ if (ifence) {
+ err = invalidation_fence_init(tile->primary_gt, ifence, fence,
+ pt_update_ops->start,
+ pt_update_ops->last,
+ vm->usm.asid);
+ if (err)
+ goto put_fence;
+ fence = &ifence->base.base;
+ }
+
+ dma_resv_add_fence(xe_vm_resv(vm), fence,
+ pt_update_ops->wait_vm_bookkeep ?
+ DMA_RESV_USAGE_KERNEL :
+ DMA_RESV_USAGE_BOOKKEEP);
+
+ list_for_each_entry(op, &vops->list, link)
+ op_commit(vops->vm, tile, pt_update_ops, op, fence);
+
+ if (pt_update_ops->needs_userptr_lock)
+ up_read(&vm->userptr.notifier_lock);
return fence;
+
+put_fence:
+ if (pt_update_ops->needs_userptr_lock)
+ up_read(&vm->userptr.notifier_lock);
+ dma_fence_put(fence);
+free_rfence:
+ kfree(rfence);
+free_ifence:
+ kfree(ifence);
+
+ return ERR_PTR(err);
}
+
+/**
+ * xe_pt_update_ops_fini() - Finish PT update operations
+ * @tile: Tile of PT update operations
+ * @vops: VMA operations
+ *
+ * Finish PT update operations by committing to destroy page table memory
+ */
+void xe_pt_update_ops_fini(struct xe_tile *tile, struct xe_vma_ops *vops)
+{
+ struct xe_vm_pgtable_update_ops *pt_update_ops =
+ &vops->pt_update_ops[tile->id];
+ int i;
+
+ lockdep_assert_held(&vops->vm->lock);
+ xe_vm_assert_held(vops->vm);
+
+ /* FIXME: Not 100% correct */
+ for (i = 0; i < pt_update_ops->num_ops; ++i) {
+ struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[i];
+
+ if (pt_op->bind)
+ xe_pt_free_bind(pt_op->entries, pt_op->num_entries);
+ }
+ xe_bo_put_commit(&vops->pt_update_ops[tile->id].deferred);
+}
+
+/**
+ * xe_pt_update_ops_abort() - Abort PT update operations
+ * @tile: Tile of PT update operations
+ * @vops: VMA operationa
+ *
+ * Abort PT update operations by unwinding internal PT state
+ */
+void xe_pt_update_ops_abort(struct xe_tile *tile, struct xe_vma_ops *vops)
+{
+ lockdep_assert_held(&vops->vm->lock);
+ xe_vm_assert_held(vops->vm);
+
+ /* FIXME: Just kill VM for now + cleanup PTs */
+ xe_bo_put_commit(&vops->pt_update_ops[tile->id].deferred);
+ xe_vm_kill(vops->vm, false);
+ }
diff --git a/drivers/gpu/drm/xe/xe_pt.h b/drivers/gpu/drm/xe/xe_pt.h
index 71a4fbfcff43..9ab386431cad 100644
--- a/drivers/gpu/drm/xe/xe_pt.h
+++ b/drivers/gpu/drm/xe/xe_pt.h
@@ -17,6 +17,7 @@ struct xe_sync_entry;
struct xe_tile;
struct xe_vm;
struct xe_vma;
+struct xe_vma_ops;
/* Largest huge pte is currently 1GiB. May become device dependent. */
#define MAX_HUGEPTE_LEVEL 2
@@ -34,14 +35,11 @@ void xe_pt_populate_empty(struct xe_tile *tile, struct xe_vm *vm,
void xe_pt_destroy(struct xe_pt *pt, u32 flags, struct llist_head *deferred);
-struct dma_fence *
-__xe_pt_bind_vma(struct xe_tile *tile, struct xe_vma *vma, struct xe_exec_queue *q,
- struct xe_sync_entry *syncs, u32 num_syncs,
- bool rebind);
-
-struct dma_fence *
-__xe_pt_unbind_vma(struct xe_tile *tile, struct xe_vma *vma, struct xe_exec_queue *q,
- struct xe_sync_entry *syncs, u32 num_syncs);
+int xe_pt_update_ops_prepare(struct xe_tile *tile, struct xe_vma_ops *vops);
+struct dma_fence *xe_pt_update_ops_run(struct xe_tile *tile,
+ struct xe_vma_ops *vops);
+void xe_pt_update_ops_fini(struct xe_tile *tile, struct xe_vma_ops *vops);
+void xe_pt_update_ops_abort(struct xe_tile *tile, struct xe_vma_ops *vops);
bool xe_pt_zap_ptes(struct xe_tile *tile, struct xe_vma *vma);
diff --git a/drivers/gpu/drm/xe/xe_pt_types.h b/drivers/gpu/drm/xe/xe_pt_types.h
index 2093150f461e..384cc04de719 100644
--- a/drivers/gpu/drm/xe/xe_pt_types.h
+++ b/drivers/gpu/drm/xe/xe_pt_types.h
@@ -78,6 +78,8 @@ struct xe_vm_pgtable_update {
struct xe_vm_pgtable_update_op {
/** @entries: entries to update for this operation */
struct xe_vm_pgtable_update entries[XE_VM_MAX_LEVEL * 2 + 1];
+ /** @vma: VMA for operation, operation not valid if NULL */
+ struct xe_vma *vma;
/** @num_entries: number of entries for this update operation */
u32 num_entries;
/** @bind: is a bind */
@@ -86,4 +88,38 @@ struct xe_vm_pgtable_update_op {
bool rebind;
};
+/** struct xe_vm_pgtable_update_ops: page table update operations */
+struct xe_vm_pgtable_update_ops {
+ /** @ops: operations */
+ struct xe_vm_pgtable_update_op *ops;
+ /** @deferred: deferred list to destroy PT entries */
+ struct llist_head deferred;
+ /** @q: exec queue for PT operations */
+ struct xe_exec_queue *q;
+ /** @start: start address of ops */
+ u64 start;
+ /** @last: last address of ops */
+ u64 last;
+ /** @num_ops: number of operations */
+ u32 num_ops;
+ /** @current_op: current operations */
+ u32 current_op;
+ /** @needs_userptr_lock: Needs userptr lock */
+ bool needs_userptr_lock;
+ /** @needs_invalidation: Needs invalidation */
+ bool needs_invalidation;
+ /**
+ * @wait_vm_bookkeep: PT operations need to wait until VM is idle
+ * (bookkeep dma-resv slots are idle) and stage all future VM activity
+ * behind these operations (install PT operations into VM kernel
+ * dma-resv slot).
+ */
+ bool wait_vm_bookkeep;
+ /**
+ * @wait_vm_kernel: PT operations need to wait until VM kernel dma-resv
+ * slots are idle.
+ */
+ bool wait_vm_kernel;
+};
+
#endif
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index 8ad772fc1fe3..4d1f3f2eface 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -315,7 +315,7 @@ int __xe_vm_userptr_needs_repin(struct xe_vm *vm)
#define XE_VM_REBIND_RETRY_TIMEOUT_MS 1000
-static void xe_vm_kill(struct xe_vm *vm, bool unlocked)
+void xe_vm_kill(struct xe_vm *vm, bool unlocked)
{
struct xe_exec_queue *q;
@@ -792,7 +792,7 @@ int xe_vm_rebind(struct xe_vm *vm, bool rebind_worker)
struct xe_vma *vma, *next;
struct xe_vma_ops vops;
struct xe_vma_op *op, *next_op;
- int err;
+ int err, i;
lockdep_assert_held(&vm->lock);
if ((xe_vm_in_lr_mode(vm) && !rebind_worker) ||
@@ -800,6 +800,8 @@ int xe_vm_rebind(struct xe_vm *vm, bool rebind_worker)
return 0;
xe_vma_ops_init(&vops, vm, NULL, NULL, 0);
+ for (i = 0; i < XE_MAX_TILES_PER_DEVICE; ++i)
+ vops.pt_update_ops[i].wait_vm_bookkeep = true;
xe_vm_assert_held(vm);
list_for_each_entry(vma, &vm->rebind_list, combined_links.rebind) {
@@ -844,6 +846,8 @@ struct dma_fence *xe_vma_rebind(struct xe_vm *vm, struct xe_vma *vma, u8 tile_ma
struct dma_fence *fence = NULL;
struct xe_vma_ops vops;
struct xe_vma_op *op, *next_op;
+ struct xe_tile *tile;
+ u8 id;
int err;
lockdep_assert_held(&vm->lock);
@@ -851,6 +855,11 @@ struct dma_fence *xe_vma_rebind(struct xe_vm *vm, struct xe_vma *vma, u8 tile_ma
xe_assert(vm->xe, xe_vm_in_fault_mode(vm));
xe_vma_ops_init(&vops, vm, NULL, NULL, 0);
+ for_each_tile(tile, vm->xe, id) {
+ vops.pt_update_ops[id].wait_vm_bookkeep = true;
+ vops.pt_update_ops[tile->id].q =
+ xe_tile_migrate_exec_queue(tile);
+ }
err = xe_vm_ops_add_rebind(&vops, vma, tile_mask);
if (err)
@@ -1691,147 +1700,6 @@ to_wait_exec_queue(struct xe_vm *vm, struct xe_exec_queue *q)
return q ? q : vm->q[0];
}
-static struct dma_fence *
-xe_vm_unbind_vma(struct xe_vma *vma, struct xe_exec_queue *q,
- struct xe_sync_entry *syncs, u32 num_syncs,
- bool first_op, bool last_op)
-{
- struct xe_vm *vm = xe_vma_vm(vma);
- struct xe_exec_queue *wait_exec_queue = to_wait_exec_queue(vm, q);
- struct xe_tile *tile;
- struct dma_fence *fence = NULL;
- struct dma_fence **fences = NULL;
- struct dma_fence_array *cf = NULL;
- int cur_fence = 0;
- int number_tiles = hweight8(vma->tile_present);
- int err;
- u8 id;
-
- trace_xe_vma_unbind(vma);
-
- if (number_tiles > 1) {
- fences = kmalloc_array(number_tiles, sizeof(*fences),
- GFP_KERNEL);
- if (!fences)
- return ERR_PTR(-ENOMEM);
- }
-
- for_each_tile(tile, vm->xe, id) {
- if (!(vma->tile_present & BIT(id)))
- goto next;
-
- fence = __xe_pt_unbind_vma(tile, vma, q ? q : vm->q[id],
- first_op ? syncs : NULL,
- first_op ? num_syncs : 0);
- if (IS_ERR(fence)) {
- err = PTR_ERR(fence);
- goto err_fences;
- }
-
- if (fences)
- fences[cur_fence++] = fence;
-
-next:
- if (q && vm->pt_root[id] && !list_empty(&q->multi_gt_list))
- q = list_next_entry(q, multi_gt_list);
- }
-
- if (fences) {
- cf = dma_fence_array_create(number_tiles, fences,
- vm->composite_fence_ctx,
- vm->composite_fence_seqno++,
- false);
- if (!cf) {
- --vm->composite_fence_seqno;
- err = -ENOMEM;
- goto err_fences;
- }
- }
-
- fence = cf ? &cf->base : !fence ?
- xe_exec_queue_last_fence_get(wait_exec_queue, vm) : fence;
-
- return fence;
-
-err_fences:
- if (fences) {
- while (cur_fence)
- dma_fence_put(fences[--cur_fence]);
- kfree(fences);
- }
-
- return ERR_PTR(err);
-}
-
-static struct dma_fence *
-xe_vm_bind_vma(struct xe_vma *vma, struct xe_exec_queue *q,
- struct xe_sync_entry *syncs, u32 num_syncs,
- u8 tile_mask, bool first_op, bool last_op)
-{
- struct xe_tile *tile;
- struct dma_fence *fence;
- struct dma_fence **fences = NULL;
- struct dma_fence_array *cf = NULL;
- struct xe_vm *vm = xe_vma_vm(vma);
- int cur_fence = 0;
- int number_tiles = hweight8(tile_mask);
- int err;
- u8 id;
-
- trace_xe_vma_bind(vma);
-
- if (number_tiles > 1) {
- fences = kmalloc_array(number_tiles, sizeof(*fences),
- GFP_KERNEL);
- if (!fences)
- return ERR_PTR(-ENOMEM);
- }
-
- for_each_tile(tile, vm->xe, id) {
- if (!(tile_mask & BIT(id)))
- goto next;
-
- fence = __xe_pt_bind_vma(tile, vma, q ? q : vm->q[id],
- first_op ? syncs : NULL,
- first_op ? num_syncs : 0,
- vma->tile_present & BIT(id));
- if (IS_ERR(fence)) {
- err = PTR_ERR(fence);
- goto err_fences;
- }
-
- if (fences)
- fences[cur_fence++] = fence;
-
-next:
- if (q && vm->pt_root[id] && !list_empty(&q->multi_gt_list))
- q = list_next_entry(q, multi_gt_list);
- }
-
- if (fences) {
- cf = dma_fence_array_create(number_tiles, fences,
- vm->composite_fence_ctx,
- vm->composite_fence_seqno++,
- false);
- if (!cf) {
- --vm->composite_fence_seqno;
- err = -ENOMEM;
- goto err_fences;
- }
- }
-
- return cf ? &cf->base : fence;
-
-err_fences:
- if (fences) {
- while (cur_fence)
- dma_fence_put(fences[--cur_fence]);
- kfree(fences);
- }
-
- return ERR_PTR(err);
-}
-
static struct xe_user_fence *
find_ufence_get(struct xe_sync_entry *syncs, u32 num_syncs)
{
@@ -1847,48 +1715,6 @@ find_ufence_get(struct xe_sync_entry *syncs, u32 num_syncs)
return NULL;
}
-static struct dma_fence *
-xe_vm_bind(struct xe_vm *vm, struct xe_vma *vma, struct xe_exec_queue *q,
- struct xe_bo *bo, struct xe_sync_entry *syncs, u32 num_syncs,
- u8 tile_mask, bool immediate, bool first_op, bool last_op)
-{
- struct dma_fence *fence;
- struct xe_exec_queue *wait_exec_queue = to_wait_exec_queue(vm, q);
-
- xe_vm_assert_held(vm);
- xe_bo_assert_held(bo);
-
- if (immediate) {
- fence = xe_vm_bind_vma(vma, q, syncs, num_syncs, tile_mask,
- first_op, last_op);
- if (IS_ERR(fence))
- return fence;
- } else {
- xe_assert(vm->xe, xe_vm_in_fault_mode(vm));
-
- fence = xe_exec_queue_last_fence_get(wait_exec_queue, vm);
- }
-
- return fence;
-}
-
-static struct dma_fence *
-xe_vm_unbind(struct xe_vm *vm, struct xe_vma *vma,
- struct xe_exec_queue *q, struct xe_sync_entry *syncs,
- u32 num_syncs, bool first_op, bool last_op)
-{
- struct dma_fence *fence;
-
- xe_vm_assert_held(vm);
- xe_bo_assert_held(xe_vma_bo(vma));
-
- fence = xe_vm_unbind_vma(vma, q, syncs, num_syncs, first_op, last_op);
- if (IS_ERR(fence))
- return fence;
-
- return fence;
-}
-
#define ALL_DRM_XE_VM_CREATE_FLAGS (DRM_XE_VM_CREATE_FLAG_SCRATCH_PAGE | \
DRM_XE_VM_CREATE_FLAG_LR_MODE | \
DRM_XE_VM_CREATE_FLAG_FAULT_MODE)
@@ -2029,21 +1855,6 @@ static const u32 region_to_mem_type[] = {
XE_PL_VRAM1,
};
-static struct dma_fence *
-xe_vm_prefetch(struct xe_vm *vm, struct xe_vma *vma,
- struct xe_exec_queue *q, struct xe_sync_entry *syncs,
- u32 num_syncs, bool first_op, bool last_op)
-{
- struct xe_exec_queue *wait_exec_queue = to_wait_exec_queue(vm, q);
-
- if (vma->tile_mask != (vma->tile_present & ~vma->tile_invalidated)) {
- return xe_vm_bind(vm, vma, q, xe_vma_bo(vma), syncs, num_syncs,
- vma->tile_mask, true, first_op, last_op);
- } else {
- return xe_exec_queue_last_fence_get(wait_exec_queue, vm);
- }
-}
-
static void prep_vma_destroy(struct xe_vm *vm, struct xe_vma *vma,
bool post_commit)
{
@@ -2332,13 +2143,10 @@ static int xe_vma_op_commit(struct xe_vm *vm, struct xe_vma_op *op)
return err;
}
-static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct xe_exec_queue *q,
- struct drm_gpuva_ops *ops,
- struct xe_sync_entry *syncs, u32 num_syncs,
- struct xe_vma_ops *vops, bool last)
+static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct drm_gpuva_ops *ops,
+ struct xe_vma_ops *vops)
{
struct xe_device *xe = vm->xe;
- struct xe_vma_op *last_op = NULL;
struct drm_gpuva_op *__op;
struct xe_tile *tile;
u8 id, tile_mask = 0;
@@ -2352,19 +2160,10 @@ static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct xe_exec_queue *q,
drm_gpuva_for_each_op(__op, ops) {
struct xe_vma_op *op = gpuva_op_to_vma_op(__op);
struct xe_vma *vma;
- bool first = list_empty(&vops->list);
unsigned int flags = 0;
INIT_LIST_HEAD(&op->link);
list_add_tail(&op->link, &vops->list);
-
- if (first) {
- op->flags |= XE_VMA_OP_FIRST;
- op->num_syncs = num_syncs;
- op->syncs = syncs;
- }
-
- op->q = q;
op->tile_mask = tile_mask;
switch (op->base.op) {
@@ -2477,197 +2276,21 @@ static int vm_bind_ioctl_ops_parse(struct xe_vm *vm, struct xe_exec_queue *q,
}
case DRM_GPUVA_OP_UNMAP:
case DRM_GPUVA_OP_PREFETCH:
+ /* FIXME: Need to skip some prefetch ops */
xe_vma_ops_incr_pt_update_ops(vops, op->tile_mask);
break;
default:
drm_warn(&vm->xe->drm, "NOT POSSIBLE");
}
- last_op = op;
-
err = xe_vma_op_commit(vm, op);
if (err)
return err;
}
- /* FIXME: Unhandled corner case */
- XE_WARN_ON(!last_op && last && !list_empty(&vops->list));
-
- if (!last_op)
- return 0;
-
- if (last) {
- last_op->flags |= XE_VMA_OP_LAST;
- last_op->num_syncs = num_syncs;
- last_op->syncs = syncs;
- }
-
return 0;
}
-static struct dma_fence *op_execute(struct xe_vm *vm, struct xe_vma *vma,
- struct xe_vma_op *op)
-{
- struct dma_fence *fence = NULL;
-
- lockdep_assert_held(&vm->lock);
-
- xe_vm_assert_held(vm);
- xe_bo_assert_held(xe_vma_bo(vma));
-
- switch (op->base.op) {
- case DRM_GPUVA_OP_MAP:
- fence = xe_vm_bind(vm, vma, op->q, xe_vma_bo(vma),
- op->syncs, op->num_syncs,
- op->tile_mask,
- op->map.immediate || !xe_vm_in_fault_mode(vm),
- op->flags & XE_VMA_OP_FIRST,
- op->flags & XE_VMA_OP_LAST);
- break;
- case DRM_GPUVA_OP_REMAP:
- {
- bool prev = !!op->remap.prev;
- bool next = !!op->remap.next;
-
- if (!op->remap.unmap_done) {
- if (prev || next)
- vma->gpuva.flags |= XE_VMA_FIRST_REBIND;
- fence = xe_vm_unbind(vm, vma, op->q, op->syncs,
- op->num_syncs,
- op->flags & XE_VMA_OP_FIRST,
- op->flags & XE_VMA_OP_LAST &&
- !prev && !next);
- if (IS_ERR(fence))
- break;
- op->remap.unmap_done = true;
- }
-
- if (prev) {
- op->remap.prev->gpuva.flags |= XE_VMA_LAST_REBIND;
- dma_fence_put(fence);
- fence = xe_vm_bind(vm, op->remap.prev, op->q,
- xe_vma_bo(op->remap.prev), op->syncs,
- op->num_syncs,
- op->remap.prev->tile_mask, true,
- false,
- op->flags & XE_VMA_OP_LAST && !next);
- op->remap.prev->gpuva.flags &= ~XE_VMA_LAST_REBIND;
- if (IS_ERR(fence))
- break;
- op->remap.prev = NULL;
- }
-
- if (next) {
- op->remap.next->gpuva.flags |= XE_VMA_LAST_REBIND;
- dma_fence_put(fence);
- fence = xe_vm_bind(vm, op->remap.next, op->q,
- xe_vma_bo(op->remap.next),
- op->syncs, op->num_syncs,
- op->remap.next->tile_mask, true,
- false, op->flags & XE_VMA_OP_LAST);
- op->remap.next->gpuva.flags &= ~XE_VMA_LAST_REBIND;
- if (IS_ERR(fence))
- break;
- op->remap.next = NULL;
- }
-
- break;
- }
- case DRM_GPUVA_OP_UNMAP:
- fence = xe_vm_unbind(vm, vma, op->q, op->syncs,
- op->num_syncs, op->flags & XE_VMA_OP_FIRST,
- op->flags & XE_VMA_OP_LAST);
- break;
- case DRM_GPUVA_OP_PREFETCH:
- fence = xe_vm_prefetch(vm, vma, op->q, op->syncs, op->num_syncs,
- op->flags & XE_VMA_OP_FIRST,
- op->flags & XE_VMA_OP_LAST);
- break;
- default:
- drm_warn(&vm->xe->drm, "NOT POSSIBLE");
- }
-
- if (IS_ERR(fence))
- trace_xe_vma_fail(vma);
-
- return fence;
-}
-
-static struct dma_fence *
-__xe_vma_op_execute(struct xe_vm *vm, struct xe_vma *vma,
- struct xe_vma_op *op)
-{
- struct dma_fence *fence;
- int err;
-
-retry_userptr:
- fence = op_execute(vm, vma, op);
- if (IS_ERR(fence) && PTR_ERR(fence) == -EAGAIN) {
- lockdep_assert_held_write(&vm->lock);
-
- if (op->base.op == DRM_GPUVA_OP_REMAP) {
- if (!op->remap.unmap_done)
- vma = gpuva_to_vma(op->base.remap.unmap->va);
- else if (op->remap.prev)
- vma = op->remap.prev;
- else
- vma = op->remap.next;
- }
-
- if (xe_vma_is_userptr(vma)) {
- err = xe_vma_userptr_pin_pages(to_userptr_vma(vma));
- if (!err)
- goto retry_userptr;
-
- fence = ERR_PTR(err);
- trace_xe_vma_fail(vma);
- }
- }
-
- return fence;
-}
-
-static struct dma_fence *
-xe_vma_op_execute(struct xe_vm *vm, struct xe_vma_op *op)
-{
- struct dma_fence *fence = ERR_PTR(-ENOMEM);
-
- lockdep_assert_held(&vm->lock);
-
- switch (op->base.op) {
- case DRM_GPUVA_OP_MAP:
- fence = __xe_vma_op_execute(vm, op->map.vma, op);
- break;
- case DRM_GPUVA_OP_REMAP:
- {
- struct xe_vma *vma;
-
- if (!op->remap.unmap_done)
- vma = gpuva_to_vma(op->base.remap.unmap->va);
- else if (op->remap.prev)
- vma = op->remap.prev;
- else
- vma = op->remap.next;
-
- fence = __xe_vma_op_execute(vm, vma, op);
- break;
- }
- case DRM_GPUVA_OP_UNMAP:
- fence = __xe_vma_op_execute(vm, gpuva_to_vma(op->base.unmap.va),
- op);
- break;
- case DRM_GPUVA_OP_PREFETCH:
- fence = __xe_vma_op_execute(vm,
- gpuva_to_vma(op->base.prefetch.va),
- op);
- break;
- default:
- drm_warn(&vm->xe->drm, "NOT POSSIBLE");
- }
-
- return fence;
-}
-
static void xe_vma_op_unwind(struct xe_vm *vm, struct xe_vma_op *op,
bool post_commit, bool prev_post_commit,
bool next_post_commit)
@@ -2853,23 +2476,110 @@ static int vm_bind_ioctl_ops_lock_and_prep(struct drm_exec *exec,
return 0;
}
+static int vm_ops_setup_tile_args(struct xe_vm *vm, struct xe_vma_ops *vops)
+{
+ struct xe_exec_queue *q = vops->q;
+ struct xe_tile *tile;
+ int number_tiles = 0;
+ u8 id;
+
+ for_each_tile(tile, vm->xe, id) {
+ if (vops->pt_update_ops[id].num_ops)
+ ++number_tiles;
+
+ if (vops->pt_update_ops[id].q)
+ continue;
+
+ if (q) {
+ vops->pt_update_ops[id].q = q;
+ if (vm->pt_root[id] && !list_empty(&q->multi_gt_list))
+ q = list_next_entry(q, multi_gt_list);
+ } else {
+ vops->pt_update_ops[id].q = vm->q[id];
+ }
+ }
+
+ return number_tiles;
+}
+
static struct dma_fence *ops_execute(struct xe_vm *vm,
struct xe_vma_ops *vops)
{
- struct xe_vma_op *op, *next;
+ struct xe_tile *tile;
struct dma_fence *fence = NULL;
+ struct dma_fence **fences = NULL;
+ struct dma_fence_array *cf = NULL;
+ int number_tiles = 0, current_fence = 0, err;
+ u8 id;
- list_for_each_entry_safe(op, next, &vops->list, link) {
- dma_fence_put(fence);
- fence = xe_vma_op_execute(vm, op);
- if (IS_ERR(fence)) {
- drm_warn(&vm->xe->drm, "VM op(%d) failed with %ld",
- op->base.op, PTR_ERR(fence));
- fence = ERR_PTR(-ENOSPC);
- break;
+ number_tiles = vm_ops_setup_tile_args(vm, vops);
+ if (number_tiles == 0)
+ return ERR_PTR(-ENODATA);
+
+ if (number_tiles > 1) {
+ fences = kmalloc_array(number_tiles, sizeof(*fences),
+ GFP_KERNEL);
+ if (!fences)
+ return ERR_PTR(-ENOMEM);
+ }
+
+ for_each_tile(tile, vm->xe, id) {
+ if (!vops->pt_update_ops[id].num_ops)
+ continue;
+
+ err = xe_pt_update_ops_prepare(tile, vops);
+ if (err) {
+ fence = ERR_PTR(err);
+ goto err_out;
}
}
+ for_each_tile(tile, vm->xe, id) {
+ if (!vops->pt_update_ops[id].num_ops)
+ continue;
+
+ fence = xe_pt_update_ops_run(tile, vops);
+ if (IS_ERR(fence))
+ goto err_out;
+
+ if (fences)
+ fences[current_fence++] = fence;
+ }
+
+ if (fences) {
+ cf = dma_fence_array_create(number_tiles, fences,
+ vm->composite_fence_ctx,
+ vm->composite_fence_seqno++,
+ false);
+ if (!cf) {
+ --vm->composite_fence_seqno;
+ fence = ERR_PTR(-ENOMEM);
+ goto err_out;
+ }
+ fence = &cf->base;
+ }
+
+ for_each_tile(tile, vm->xe, id) {
+ if (!vops->pt_update_ops[id].num_ops)
+ continue;
+
+ xe_pt_update_ops_fini(tile, vops);
+ }
+
+ return fence;
+
+err_out:
+ for_each_tile(tile, vm->xe, id) {
+ if (!vops->pt_update_ops[id].num_ops)
+ continue;
+
+ xe_pt_update_ops_abort(tile, vops);
+ }
+ while (current_fence)
+ dma_fence_put(fences[--current_fence]);
+ kfree(fences);
+ kfree(cf);
+
return fence;
}
@@ -2950,12 +2660,10 @@ static int vm_bind_ioctl_ops_execute(struct xe_vm *vm,
fence = ops_execute(vm, vops);
if (IS_ERR(fence)) {
err = PTR_ERR(fence);
- /* FIXME: Killing VM rather than proper error handling */
- xe_vm_kill(vm, false);
goto unlock;
- } else {
- vm_bind_ioctl_ops_fini(vm, vops, fence);
}
+
+ vm_bind_ioctl_ops_fini(vm, vops, fence);
}
unlock:
@@ -3312,8 +3020,7 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
goto unwind_ops;
}
- err = vm_bind_ioctl_ops_parse(vm, q, ops[i], syncs, num_syncs,
- &vops, i == args->num_binds - 1);
+ err = vm_bind_ioctl_ops_parse(vm, ops[i], &vops);
if (err)
goto unwind_ops;
}
diff --git a/drivers/gpu/drm/xe/xe_vm.h b/drivers/gpu/drm/xe/xe_vm.h
index b481608b12f1..c864dba35e1d 100644
--- a/drivers/gpu/drm/xe/xe_vm.h
+++ b/drivers/gpu/drm/xe/xe_vm.h
@@ -259,6 +259,8 @@ static inline struct dma_resv *xe_vm_resv(struct xe_vm *vm)
return drm_gpuvm_resv(&vm->gpuvm);
}
+void xe_vm_kill(struct xe_vm *vm, bool unlocked);
+
/**
* xe_vm_assert_held(vm) - Assert that the vm's reservation object is held.
* @vm: The vm
diff --git a/drivers/gpu/drm/xe/xe_vm_types.h b/drivers/gpu/drm/xe/xe_vm_types.h
index 211c88801182..27d651093d30 100644
--- a/drivers/gpu/drm/xe/xe_vm_types.h
+++ b/drivers/gpu/drm/xe/xe_vm_types.h
@@ -26,14 +26,12 @@ struct xe_vm_pgtable_update_op;
#define XE_VMA_READ_ONLY DRM_GPUVA_USERBITS
#define XE_VMA_DESTROYED (DRM_GPUVA_USERBITS << 1)
#define XE_VMA_ATOMIC_PTE_BIT (DRM_GPUVA_USERBITS << 2)
-#define XE_VMA_FIRST_REBIND (DRM_GPUVA_USERBITS << 3)
-#define XE_VMA_LAST_REBIND (DRM_GPUVA_USERBITS << 4)
-#define XE_VMA_PTE_4K (DRM_GPUVA_USERBITS << 5)
-#define XE_VMA_PTE_2M (DRM_GPUVA_USERBITS << 6)
-#define XE_VMA_PTE_1G (DRM_GPUVA_USERBITS << 7)
-#define XE_VMA_PTE_64K (DRM_GPUVA_USERBITS << 8)
-#define XE_VMA_PTE_COMPACT (DRM_GPUVA_USERBITS << 9)
-#define XE_VMA_DUMPABLE (DRM_GPUVA_USERBITS << 10)
+#define XE_VMA_PTE_4K (DRM_GPUVA_USERBITS << 3)
+#define XE_VMA_PTE_2M (DRM_GPUVA_USERBITS << 4)
+#define XE_VMA_PTE_1G (DRM_GPUVA_USERBITS << 5)
+#define XE_VMA_PTE_64K (DRM_GPUVA_USERBITS << 6)
+#define XE_VMA_PTE_COMPACT (DRM_GPUVA_USERBITS << 7)
+#define XE_VMA_DUMPABLE (DRM_GPUVA_USERBITS << 8)
/** struct xe_userptr - User pointer */
struct xe_userptr {
@@ -100,6 +98,9 @@ struct xe_vma {
*/
u8 tile_present;
+ /** @tile_staged: bind is staged for this VMA */
+ u8 tile_staged;
+
/**
* @pat_index: The pat index to use when encoding the PTEs for this vma.
*/
@@ -315,31 +316,18 @@ struct xe_vma_op_prefetch {
/** enum xe_vma_op_flags - flags for VMA operation */
enum xe_vma_op_flags {
- /** @XE_VMA_OP_FIRST: first VMA operation for a set of syncs */
- XE_VMA_OP_FIRST = BIT(0),
- /** @XE_VMA_OP_LAST: last VMA operation for a set of syncs */
- XE_VMA_OP_LAST = BIT(1),
/** @XE_VMA_OP_COMMITTED: VMA operation committed */
- XE_VMA_OP_COMMITTED = BIT(2),
+ XE_VMA_OP_COMMITTED = BIT(0),
/** @XE_VMA_OP_PREV_COMMITTED: Previous VMA operation committed */
- XE_VMA_OP_PREV_COMMITTED = BIT(3),
+ XE_VMA_OP_PREV_COMMITTED = BIT(1),
/** @XE_VMA_OP_NEXT_COMMITTED: Next VMA operation committed */
- XE_VMA_OP_NEXT_COMMITTED = BIT(4),
+ XE_VMA_OP_NEXT_COMMITTED = BIT(2),
};
/** struct xe_vma_op - VMA operation */
struct xe_vma_op {
/** @base: GPUVA base operation */
struct drm_gpuva_op base;
- /** @q: exec queue for this operation */
- struct xe_exec_queue *q;
- /**
- * @syncs: syncs for this operation, only used on first and last
- * operation
- */
- struct xe_sync_entry *syncs;
- /** @num_syncs: number of syncs */
- u32 num_syncs;
/** @link: async operation link */
struct list_head link;
/** @flags: operation flags */
@@ -363,19 +351,14 @@ struct xe_vma_ops {
struct list_head list;
/** @vm: VM */
struct xe_vm *vm;
- /** @q: exec queue these operations */
+ /** @q: exec queue for VMA operations */
struct xe_exec_queue *q;
/** @syncs: syncs these operation */
struct xe_sync_entry *syncs;
/** @num_syncs: number of syncs */
u32 num_syncs;
/** @pt_update_ops: page table update operations */
- struct {
- /** @ops: operations */
- struct xe_vm_pgtable_update_op *ops;
- /** @num_ops: number of operations */
- u32 num_ops;
- } pt_update_ops[XE_MAX_TILES_PER_DEVICE];
+ struct xe_vm_pgtable_update_ops pt_update_ops[XE_MAX_TILES_PER_DEVICE];
};
#endif
--
2.34.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v4 5/7] drm/xe: Update VM trace events
2024-06-18 17:15 [PATCH v4 0/7] Convert multiple bind ops to 1 job Matthew Brost
` (3 preceding siblings ...)
2024-06-18 17:15 ` [PATCH v4 4/7] drm/xe: Convert multiple bind ops into single job Matthew Brost
@ 2024-06-18 17:15 ` Matthew Brost
2024-06-18 17:15 ` [PATCH v4 6/7] drm/xe: Update PT layer with better error handling Matthew Brost
` (9 subsequent siblings)
14 siblings, 0 replies; 23+ messages in thread
From: Matthew Brost @ 2024-06-18 17:15 UTC (permalink / raw)
To: intel-xe
The trace events have changed moving to a single job per VM bind IOCTL,
update the trace events align with old behavior as much as possible.
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
---
drivers/gpu/drm/xe/xe_trace_bo.h | 10 ++++----
drivers/gpu/drm/xe/xe_vm.c | 42 ++++++++++++++++++++++++++++++--
2 files changed, 45 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_trace_bo.h b/drivers/gpu/drm/xe/xe_trace_bo.h
index f39f09ed3495..9b1a1d4304ae 100644
--- a/drivers/gpu/drm/xe/xe_trace_bo.h
+++ b/drivers/gpu/drm/xe/xe_trace_bo.h
@@ -117,11 +117,6 @@ DEFINE_EVENT(xe_vma, xe_vma_acc,
TP_ARGS(vma)
);
-DEFINE_EVENT(xe_vma, xe_vma_fail,
- TP_PROTO(struct xe_vma *vma),
- TP_ARGS(vma)
-);
-
DEFINE_EVENT(xe_vma, xe_vma_bind,
TP_PROTO(struct xe_vma *vma),
TP_ARGS(vma)
@@ -237,6 +232,11 @@ DEFINE_EVENT(xe_vm, xe_vm_rebind_worker_exit,
TP_ARGS(vm)
);
+DEFINE_EVENT(xe_vm, xe_vm_ops_fail,
+ TP_PROTO(struct xe_vm *vm),
+ TP_ARGS(vm)
+);
+
#endif
/* This part must be outside protection */
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index 4d1f3f2eface..913f1d683b3b 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -2476,6 +2476,38 @@ static int vm_bind_ioctl_ops_lock_and_prep(struct drm_exec *exec,
return 0;
}
+static void op_trace(struct xe_vma_op *op)
+{
+ switch (op->base.op) {
+ case DRM_GPUVA_OP_MAP:
+ trace_xe_vma_bind(op->map.vma);
+ break;
+ case DRM_GPUVA_OP_REMAP:
+ trace_xe_vma_unbind(gpuva_to_vma(op->base.remap.unmap->va));
+ if (op->remap.prev)
+ trace_xe_vma_bind(op->remap.prev);
+ if (op->remap.next)
+ trace_xe_vma_bind(op->remap.next);
+ break;
+ case DRM_GPUVA_OP_UNMAP:
+ trace_xe_vma_unbind(gpuva_to_vma(op->base.unmap.va));
+ break;
+ case DRM_GPUVA_OP_PREFETCH:
+ trace_xe_vma_bind(gpuva_to_vma(op->base.prefetch.va));
+ break;
+ default:
+ XE_WARN_ON("NOT POSSIBLE");
+ }
+}
+
+static void trace_xe_vm_ops_execute(struct xe_vma_ops *vops)
+{
+ struct xe_vma_op *op;
+
+ list_for_each_entry(op, &vops->list, link)
+ op_trace(op);
+}
+
static int vm_ops_setup_tile_args(struct xe_vm *vm, struct xe_vma_ops *vops)
{
struct xe_exec_queue *q = vops->q;
@@ -2519,8 +2551,10 @@ static struct dma_fence *ops_execute(struct xe_vm *vm,
if (number_tiles > 1) {
fences = kmalloc_array(number_tiles, sizeof(*fences),
GFP_KERNEL);
- if (!fences)
- return ERR_PTR(-ENOMEM);
+ if (!fences) {
+ fence = ERR_PTR(-ENOMEM);
+ goto err_trace;
+ }
}
for_each_tile(tile, vm->xe, id) {
@@ -2534,6 +2568,8 @@ static struct dma_fence *ops_execute(struct xe_vm *vm,
}
}
+ trace_xe_vm_ops_execute(vops);
+
for_each_tile(tile, vm->xe, id) {
if (!vops->pt_update_ops[id].num_ops)
continue;
@@ -2580,6 +2616,8 @@ static struct dma_fence *ops_execute(struct xe_vm *vm,
kfree(fences);
kfree(cf);
+err_trace:
+ trace_xe_vm_ops_fail(vm);
return fence;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v4 6/7] drm/xe: Update PT layer with better error handling
2024-06-18 17:15 [PATCH v4 0/7] Convert multiple bind ops to 1 job Matthew Brost
` (4 preceding siblings ...)
2024-06-18 17:15 ` [PATCH v4 5/7] drm/xe: Update VM trace events Matthew Brost
@ 2024-06-18 17:15 ` Matthew Brost
2024-06-21 14:37 ` Matthew Auld
2024-06-18 17:15 ` [PATCH v4 7/7] drm/xe: Add VM bind IOCTL error injection Matthew Brost
` (8 subsequent siblings)
14 siblings, 1 reply; 23+ messages in thread
From: Matthew Brost @ 2024-06-18 17:15 UTC (permalink / raw)
To: intel-xe
Update PT layer so if a memory allocation for a PTE fails the error can
be propagated to the user without requiring to be killed.
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
drivers/gpu/drm/xe/xe_pt.c | 208 ++++++++++++++++++++++++++++---------
1 file changed, 160 insertions(+), 48 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
index d6ce531f0fcd..b46b95531c2a 100644
--- a/drivers/gpu/drm/xe/xe_pt.c
+++ b/drivers/gpu/drm/xe/xe_pt.c
@@ -846,19 +846,27 @@ xe_vm_populate_pgtable(struct xe_migrate_pt_update *pt_update, struct xe_tile *t
}
}
-static void xe_pt_abort_bind(struct xe_vma *vma,
- struct xe_vm_pgtable_update *entries,
- u32 num_entries)
+static void xe_pt_cancel_bind(struct xe_vma *vma,
+ struct xe_vm_pgtable_update *entries,
+ u32 num_entries)
{
u32 i, j;
for (i = 0; i < num_entries; i++) {
- if (!entries[i].pt_entries)
+ struct xe_pt *pt = entries[i].pt;
+
+ if (!pt)
continue;
- for (j = 0; j < entries[i].qwords; j++)
- xe_pt_destroy(entries[i].pt_entries[j].pt, xe_vma_vm(vma)->flags, NULL);
+ if (pt->level) {
+ for (j = 0; j < entries[i].qwords; j++)
+ xe_pt_destroy(entries[i].pt_entries[j].pt,
+ xe_vma_vm(vma)->flags, NULL);
+ }
+
kfree(entries[i].pt_entries);
+ entries[i].pt_entries = NULL;
+ entries[i].qwords = 0;
}
}
@@ -874,10 +882,61 @@ static void xe_pt_commit_locks_assert(struct xe_vma *vma)
xe_vm_assert_held(vm);
}
-static void xe_pt_commit_bind(struct xe_vma *vma,
- struct xe_vm_pgtable_update *entries,
- u32 num_entries, bool rebind,
- struct llist_head *deferred)
+static void xe_pt_commit(struct xe_vma *vma,
+ struct xe_vm_pgtable_update *entries,
+ u32 num_entries, struct llist_head *deferred)
+{
+ u32 i, j;
+
+ xe_pt_commit_locks_assert(vma);
+
+ for (i = 0; i < num_entries; i++) {
+ struct xe_pt *pt = entries[i].pt;
+
+ if (!pt->level)
+ continue;
+
+ for (j = 0; j < entries[i].qwords; j++) {
+ struct xe_pt *oldpte = entries[i].pt_entries[j].pt;
+
+ xe_pt_destroy(oldpte, xe_vma_vm(vma)->flags, deferred);
+ }
+ }
+}
+
+static void xe_pt_abort_bind(struct xe_vma *vma,
+ struct xe_vm_pgtable_update *entries,
+ u32 num_entries, bool rebind)
+{
+ int i, j;
+
+ xe_pt_commit_locks_assert(vma);
+
+ for (i = num_entries - 1; i >= 0; --i) {
+ struct xe_pt *pt = entries[i].pt;
+ struct xe_pt_dir *pt_dir;
+
+ if (!rebind)
+ pt->num_live -= entries[i].qwords;
+
+ if (!pt->level)
+ continue;
+
+ pt_dir = as_xe_pt_dir(pt);
+ for (j = 0; j < entries[i].qwords; j++) {
+ u32 j_ = j + entries[i].ofs;
+ struct xe_pt *newpte = xe_pt_entry(pt_dir, j_);
+ struct xe_pt *oldpte = entries[i].pt_entries[j].pt;
+
+ pt_dir->children[j_] = oldpte ? &oldpte->base : 0;
+ xe_pt_destroy(newpte, xe_vma_vm(vma)->flags, NULL);
+ }
+ }
+}
+
+static void xe_pt_commit_prepare_bind(struct xe_vma *vma,
+ struct xe_vm_pgtable_update *entries,
+ u32 num_entries, bool rebind)
{
u32 i, j;
@@ -897,12 +956,13 @@ static void xe_pt_commit_bind(struct xe_vma *vma,
for (j = 0; j < entries[i].qwords; j++) {
u32 j_ = j + entries[i].ofs;
struct xe_pt *newpte = entries[i].pt_entries[j].pt;
+ struct xe_pt *oldpte = NULL;
if (xe_pt_entry(pt_dir, j_))
- xe_pt_destroy(xe_pt_entry(pt_dir, j_),
- xe_vma_vm(vma)->flags, deferred);
+ oldpte = xe_pt_entry(pt_dir, j_);
pt_dir->children[j_] = &newpte->base;
+ entries[i].pt_entries[j].pt = oldpte;
}
}
}
@@ -926,8 +986,6 @@ xe_pt_prepare_bind(struct xe_tile *tile, struct xe_vma *vma,
err = xe_pt_stage_bind(tile, vma, entries, num_entries);
if (!err)
xe_tile_assert(tile, *num_entries);
- else /* abort! */
- xe_pt_abort_bind(vma, entries, *num_entries);
return err;
}
@@ -1449,7 +1507,7 @@ xe_pt_stage_unbind_post_descend(struct xe_ptw *parent, pgoff_t offset,
&end_offset))
return 0;
- (void)xe_pt_new_shared(&xe_walk->wupd, xe_child, offset, false);
+ (void)xe_pt_new_shared(&xe_walk->wupd, xe_child, offset, true);
xe_walk->wupd.updates[level].update->qwords = end_offset - offset;
return 0;
@@ -1517,32 +1575,57 @@ xe_migrate_clear_pgtable_callback(struct xe_migrate_pt_update *pt_update,
memset64(ptr, empty, num_qwords);
}
+static void xe_pt_abort_unbind(struct xe_vma *vma,
+ struct xe_vm_pgtable_update *entries,
+ u32 num_entries)
+{
+ int j, i;
+
+ xe_pt_commit_locks_assert(vma);
+
+ for (j = num_entries - 1; j >= 0; --j) {
+ struct xe_vm_pgtable_update *entry = &entries[j];
+ struct xe_pt *pt = entry->pt;
+ struct xe_pt_dir *pt_dir = as_xe_pt_dir(pt);
+
+ pt->num_live += entry->qwords;
+
+ if (!pt->level)
+ continue;
+
+ for (i = entry->ofs; i < entry->ofs + entry->qwords; i++)
+ pt_dir->children[i] =
+ entries[j].pt_entries[i - entry->ofs].pt ?
+ &entries[j].pt_entries[i - entry->ofs].pt->base : 0;
+ }
+}
+
static void
-xe_pt_commit_unbind(struct xe_vma *vma,
- struct xe_vm_pgtable_update *entries, u32 num_entries,
- struct llist_head *deferred)
+xe_pt_commit_prepare_unbind(struct xe_vma *vma,
+ struct xe_vm_pgtable_update *entries,
+ u32 num_entries)
{
- u32 j;
+ int j, i;
xe_pt_commit_locks_assert(vma);
for (j = 0; j < num_entries; ++j) {
struct xe_vm_pgtable_update *entry = &entries[j];
struct xe_pt *pt = entry->pt;
+ struct xe_pt_dir *pt_dir;
pt->num_live -= entry->qwords;
- if (pt->level) {
- struct xe_pt_dir *pt_dir = as_xe_pt_dir(pt);
- u32 i;
-
- for (i = entry->ofs; i < entry->ofs + entry->qwords;
- i++) {
- if (xe_pt_entry(pt_dir, i))
- xe_pt_destroy(xe_pt_entry(pt_dir, i),
- xe_vma_vm(vma)->flags, deferred);
+ if (!pt->level)
+ continue;
- pt_dir->children[i] = NULL;
- }
+ pt_dir = as_xe_pt_dir(pt);
+ for (i = entry->ofs; i < entry->ofs + entry->qwords; i++) {
+ if (xe_pt_entry(pt_dir, i))
+ entries[j].pt_entries[i - entry->ofs].pt =
+ xe_pt_entry(pt_dir, i);
+ else
+ entries[j].pt_entries[i - entry->ofs].pt = NULL;
+ pt_dir->children[i] = NULL;
}
}
}
@@ -1588,7 +1671,6 @@ static int bind_op_prepare(struct xe_vm *vm, struct xe_tile *tile,
{
u32 current_op = pt_update_ops->current_op;
struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[current_op];
- struct llist_head *deferred = &pt_update_ops->deferred;
int err;
xe_bo_assert_held(xe_vma_bo(vma));
@@ -1637,11 +1719,12 @@ static int bind_op_prepare(struct xe_vm *vm, struct xe_tile *tile,
/* We bump also if batch_invalidate_tlb is true */
vm->tlb_flush_seqno++;
- /* FIXME: Don't commit right away */
vma->tile_staged |= BIT(tile->id);
pt_op->vma = vma;
- xe_pt_commit_bind(vma, pt_op->entries, pt_op->num_entries,
- pt_op->rebind, deferred);
+ xe_pt_commit_prepare_bind(vma, pt_op->entries,
+ pt_op->num_entries, pt_op->rebind);
+ } else {
+ xe_pt_cancel_bind(vma, pt_op->entries, pt_op->num_entries);
}
return err;
@@ -1653,7 +1736,6 @@ static int unbind_op_prepare(struct xe_tile *tile,
{
u32 current_op = pt_update_ops->current_op;
struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[current_op];
- struct llist_head *deferred = &pt_update_ops->deferred;
int err;
if (!((vma->tile_present | vma->tile_staged) & BIT(tile->id)))
@@ -1689,9 +1771,7 @@ static int unbind_op_prepare(struct xe_tile *tile,
pt_update_ops->needs_userptr_lock |= xe_vma_is_userptr(vma);
pt_update_ops->needs_invalidation = true;
- /* FIXME: Don't commit right away */
- xe_pt_commit_unbind(vma, pt_op->entries, pt_op->num_entries,
- deferred);
+ xe_pt_commit_prepare_unbind(vma, pt_op->entries, pt_op->num_entries);
return 0;
}
@@ -1912,7 +1992,7 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
struct invalidation_fence *ifence = NULL;
struct xe_range_fence *rfence;
struct xe_vma_op *op;
- int err = 0;
+ int err = 0, i;
struct xe_migrate_pt_update update = {
.ops = pt_update_ops->needs_userptr_lock ?
&userptr_migrate_ops :
@@ -1932,8 +2012,10 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
if (pt_update_ops->needs_invalidation) {
ifence = kzalloc(sizeof(*ifence), GFP_KERNEL);
- if (!ifence)
- return ERR_PTR(-ENOMEM);
+ if (!ifence) {
+ err = -ENOMEM;
+ goto kill_vm_tile1;
+ }
}
rfence = kzalloc(sizeof(*rfence), GFP_KERNEL);
@@ -1948,6 +2030,15 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
goto free_rfence;
}
+ /* Point of no return - VM killed if failure after this */
+ for (i = 0; i < pt_update_ops->current_op; ++i) {
+ struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[i];
+
+ xe_pt_commit(pt_op->vma, pt_op->entries,
+ pt_op->num_entries, &pt_update_ops->deferred);
+ pt_op->vma = NULL; /* skip in xe_pt_update_ops_abort */
+ }
+
err = xe_range_fence_insert(&vm->rftree[tile->id], rfence,
&xe_range_fence_kfree_ops,
pt_update_ops->start,
@@ -1983,10 +2074,15 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
if (pt_update_ops->needs_userptr_lock)
up_read(&vm->userptr.notifier_lock);
dma_fence_put(fence);
+ if (!tile->id)
+ xe_vm_kill(vops->vm, false);
free_rfence:
kfree(rfence);
free_ifence:
kfree(ifence);
+kill_vm_tile1:
+ if (err != -EAGAIN && tile->id)
+ xe_vm_kill(vops->vm, false);
return ERR_PTR(err);
}
@@ -2007,12 +2103,10 @@ void xe_pt_update_ops_fini(struct xe_tile *tile, struct xe_vma_ops *vops)
lockdep_assert_held(&vops->vm->lock);
xe_vm_assert_held(vops->vm);
- /* FIXME: Not 100% correct */
- for (i = 0; i < pt_update_ops->num_ops; ++i) {
+ for (i = 0; i < pt_update_ops->current_op; ++i) {
struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[i];
- if (pt_op->bind)
- xe_pt_free_bind(pt_op->entries, pt_op->num_entries);
+ xe_pt_free_bind(pt_op->entries, pt_op->num_entries);
}
xe_bo_put_commit(&vops->pt_update_ops[tile->id].deferred);
}
@@ -2026,10 +2120,28 @@ void xe_pt_update_ops_fini(struct xe_tile *tile, struct xe_vma_ops *vops)
*/
void xe_pt_update_ops_abort(struct xe_tile *tile, struct xe_vma_ops *vops)
{
+ struct xe_vm_pgtable_update_ops *pt_update_ops =
+ &vops->pt_update_ops[tile->id];
+ int i;
+
lockdep_assert_held(&vops->vm->lock);
xe_vm_assert_held(vops->vm);
- /* FIXME: Just kill VM for now + cleanup PTs */
+ for (i = pt_update_ops->num_ops - 1; i >= 0; --i) {
+ struct xe_vm_pgtable_update_op *pt_op =
+ &pt_update_ops->ops[i];
+
+ if (!pt_op->vma || i >= pt_update_ops->current_op)
+ continue;
+
+ if (pt_op->bind)
+ xe_pt_abort_bind(pt_op->vma, pt_op->entries,
+ pt_op->num_entries,
+ pt_op->rebind);
+ else
+ xe_pt_abort_unbind(pt_op->vma, pt_op->entries,
+ pt_op->num_entries);
+ }
+
xe_bo_put_commit(&vops->pt_update_ops[tile->id].deferred);
- xe_vm_kill(vops->vm, false);
- }
+}
--
2.34.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH v4 7/7] drm/xe: Add VM bind IOCTL error injection
2024-06-18 17:15 [PATCH v4 0/7] Convert multiple bind ops to 1 job Matthew Brost
` (5 preceding siblings ...)
2024-06-18 17:15 ` [PATCH v4 6/7] drm/xe: Update PT layer with better error handling Matthew Brost
@ 2024-06-18 17:15 ` Matthew Brost
2024-06-18 17:19 ` ✓ CI.Patch_applied: success for Convert multiple bind ops to 1 job (rev4) Patchwork
` (7 subsequent siblings)
14 siblings, 0 replies; 23+ messages in thread
From: Matthew Brost @ 2024-06-18 17:15 UTC (permalink / raw)
To: intel-xe
Add VM bind IOCTL error injection which steals MSB of the bind flags
field which if set injects errors at various points in the VM bind
IOCTL. Intended to validate error paths. Enabled by CONFIG_DRM_XE_DEBUG.
v4:
- Change define layout (Jonathan)
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
---
drivers/gpu/drm/xe/xe_device_types.h | 12 ++++++++++++
drivers/gpu/drm/xe/xe_pt.c | 12 ++++++++++++
drivers/gpu/drm/xe/xe_vm.c | 24 +++++++++++++++++++++++-
drivers/gpu/drm/xe/xe_vm_types.h | 14 ++++++++++++++
4 files changed, 61 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_device_types.h b/drivers/gpu/drm/xe/xe_device_types.h
index 52bc461171d5..0629a0d0f920 100644
--- a/drivers/gpu/drm/xe/xe_device_types.h
+++ b/drivers/gpu/drm/xe/xe_device_types.h
@@ -22,6 +22,10 @@
#include "xe_sriov_types.h"
#include "xe_step_types.h"
+#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
+#define TEST_VM_OPS_ERROR
+#endif
+
#if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
#include "soc/intel_pch.h"
#include "intel_display_core.h"
@@ -473,6 +477,14 @@ struct xe_device {
int mode;
} wedged;
+#ifdef TEST_VM_OPS_ERROR
+ /**
+ * @vm_inject_error_position: inject errors at different places in VM
+ * bind IOCTL based on this value
+ */
+ u8 vm_inject_error_position;
+#endif
+
/* private: */
#if IS_ENABLED(CONFIG_DRM_XE_DISPLAY)
diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
index b46b95531c2a..abdb2fda13b2 100644
--- a/drivers/gpu/drm/xe/xe_pt.c
+++ b/drivers/gpu/drm/xe/xe_pt.c
@@ -1870,6 +1870,12 @@ int xe_pt_update_ops_prepare(struct xe_tile *tile, struct xe_vma_ops *vops)
xe_tile_assert(tile, pt_update_ops->current_op <=
pt_update_ops->num_ops);
+#ifdef TEST_VM_OPS_ERROR
+ if (vops->inject_error &&
+ vops->vm->xe->vm_inject_error_position == FORCE_OP_ERROR_PREPARE)
+ return -ENOSPC;
+#endif
+
return 0;
}
@@ -2010,6 +2016,12 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
return dma_fence_get_stub();
}
+#ifdef TEST_VM_OPS_ERROR
+ if (vops->inject_error &&
+ vm->xe->vm_inject_error_position == FORCE_OP_ERROR_RUN)
+ return ERR_PTR(-ENOSPC);
+#endif
+
if (pt_update_ops->needs_invalidation) {
ifence = kzalloc(sizeof(*ifence), GFP_KERNEL);
if (!ifence) {
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index 913f1d683b3b..a81fa02b663e 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -2473,6 +2473,12 @@ static int vm_bind_ioctl_ops_lock_and_prep(struct drm_exec *exec,
return err;
}
+#ifdef TEST_VM_OPS_ERROR
+ if (vops->inject_error &&
+ vm->xe->vm_inject_error_position == FORCE_OP_ERROR_LOCK)
+ return -ENOSPC;
+#endif
+
return 0;
}
@@ -2709,11 +2715,18 @@ static int vm_bind_ioctl_ops_execute(struct xe_vm *vm,
return err;
}
-#define SUPPORTED_FLAGS \
+#define SUPPORTED_FLAGS_STUB \
(DRM_XE_VM_BIND_FLAG_READONLY | \
DRM_XE_VM_BIND_FLAG_IMMEDIATE | \
DRM_XE_VM_BIND_FLAG_NULL | \
DRM_XE_VM_BIND_FLAG_DUMPABLE)
+
+#ifdef TEST_VM_OPS_ERROR
+#define SUPPORTED_FLAGS (SUPPORTED_FLAGS_STUB | FORCE_OP_ERROR)
+#else
+#define SUPPORTED_FLAGS SUPPORTED_FLAGS_STUB
+#endif
+
#define XE_64K_PAGE_MASK 0xffffull
#define ALL_DRM_XE_SYNCS_FLAGS (DRM_XE_SYNCS_FLAG_WAIT_FOR_OP)
@@ -3061,6 +3074,15 @@ int xe_vm_bind_ioctl(struct drm_device *dev, void *data, struct drm_file *file)
err = vm_bind_ioctl_ops_parse(vm, ops[i], &vops);
if (err)
goto unwind_ops;
+
+#ifdef TEST_VM_OPS_ERROR
+ if (flags & FORCE_OP_ERROR) {
+ vops.inject_error = true;
+ vm->xe->vm_inject_error_position =
+ (vm->xe->vm_inject_error_position + 1) %
+ FORCE_OP_ERROR_COUNT;
+ }
+#endif
}
/* Nothing to do */
diff --git a/drivers/gpu/drm/xe/xe_vm_types.h b/drivers/gpu/drm/xe/xe_vm_types.h
index 27d651093d30..7f9a303e51d8 100644
--- a/drivers/gpu/drm/xe/xe_vm_types.h
+++ b/drivers/gpu/drm/xe/xe_vm_types.h
@@ -23,6 +23,16 @@ struct xe_user_fence;
struct xe_vm;
struct xe_vm_pgtable_update_op;
+#if IS_ENABLED(CONFIG_DRM_XE_DEBUG)
+#define TEST_VM_OPS_ERROR
+#define FORCE_OP_ERROR BIT(31)
+
+#define FORCE_OP_ERROR_LOCK 0
+#define FORCE_OP_ERROR_PREPARE 1
+#define FORCE_OP_ERROR_RUN 2
+#define FORCE_OP_ERROR_COUNT 3
+#endif
+
#define XE_VMA_READ_ONLY DRM_GPUVA_USERBITS
#define XE_VMA_DESTROYED (DRM_GPUVA_USERBITS << 1)
#define XE_VMA_ATOMIC_PTE_BIT (DRM_GPUVA_USERBITS << 2)
@@ -359,6 +369,10 @@ struct xe_vma_ops {
u32 num_syncs;
/** @pt_update_ops: page table update operations */
struct xe_vm_pgtable_update_ops pt_update_ops[XE_MAX_TILES_PER_DEVICE];
+#ifdef TEST_VM_OPS_ERROR
+ /** @inject_error: inject error to test error handling */
+ bool inject_error;
+#endif
};
#endif
--
2.34.1
^ permalink raw reply related [flat|nested] 23+ messages in thread
* ✓ CI.Patch_applied: success for Convert multiple bind ops to 1 job (rev4)
2024-06-18 17:15 [PATCH v4 0/7] Convert multiple bind ops to 1 job Matthew Brost
` (6 preceding siblings ...)
2024-06-18 17:15 ` [PATCH v4 7/7] drm/xe: Add VM bind IOCTL error injection Matthew Brost
@ 2024-06-18 17:19 ` Patchwork
2024-06-18 17:19 ` ✗ CI.checkpatch: warning " Patchwork
` (6 subsequent siblings)
14 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-06-18 17:19 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
== Series Details ==
Series: Convert multiple bind ops to 1 job (rev4)
URL : https://patchwork.freedesktop.org/series/133034/
State : success
== Summary ==
=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: fd8ad6cbb953 drm-tip: 2024y-06m-18d-15h-20m-12s UTC integration manifest
=== git am output follows ===
Applying: drm/xe: s/xe_tile_migrate_engine/xe_tile_migrate_exec_queue
Applying: drm/xe: Add xe_vm_pgtable_update_op to xe_vma_ops
Applying: drm/xe: Add xe_exec_queue_last_fence_test_dep
Applying: drm/xe: Convert multiple bind ops into single job
Applying: drm/xe: Update VM trace events
Applying: drm/xe: Update PT layer with better error handling
Applying: drm/xe: Add VM bind IOCTL error injection
^ permalink raw reply [flat|nested] 23+ messages in thread
* ✗ CI.checkpatch: warning for Convert multiple bind ops to 1 job (rev4)
2024-06-18 17:15 [PATCH v4 0/7] Convert multiple bind ops to 1 job Matthew Brost
` (7 preceding siblings ...)
2024-06-18 17:19 ` ✓ CI.Patch_applied: success for Convert multiple bind ops to 1 job (rev4) Patchwork
@ 2024-06-18 17:19 ` Patchwork
2024-06-18 17:20 ` ✓ CI.KUnit: success " Patchwork
` (5 subsequent siblings)
14 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-06-18 17:19 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
== Series Details ==
Series: Convert multiple bind ops to 1 job (rev4)
URL : https://patchwork.freedesktop.org/series/133034/
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 bd4d7d4d0a250cd8303200f9a25b417ab19862dd
Author: Matthew Brost <matthew.brost@intel.com>
Date: Tue Jun 18 10:15:09 2024 -0700
drm/xe: Add VM bind IOCTL error injection
Add VM bind IOCTL error injection which steals MSB of the bind flags
field which if set injects errors at various points in the VM bind
IOCTL. Intended to validate error paths. Enabled by CONFIG_DRM_XE_DEBUG.
v4:
- Change define layout (Jonathan)
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
+ /mt/dim checkpatch fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c drm-intel
0b921daa3de4 drm/xe: s/xe_tile_migrate_engine/xe_tile_migrate_exec_queue
a2dc71ee40c4 drm/xe: Add xe_vm_pgtable_update_op to xe_vma_ops
95c4c26fc6db drm/xe: Add xe_exec_queue_last_fence_test_dep
3c7f57ad2c9b drm/xe: Convert multiple bind ops into single job
-:13: WARNING:TYPO_SPELLING: 'implemenation' may be misspelled - perhaps 'implementation'?
#13:
The implemenation is roughly:
^^^^^^^^^^^^^
-:878: WARNING:SUSPECT_CODE_INDENT: suspect code indent for conditional statements (8, 15)
#878: FILE: drivers/gpu/drm/xe/xe_pt.c:1163:
+ if (uvma->userptr.initial_bind && !xe_vm_in_fault_mode(vm))
+ return 0;
-:879: ERROR:CODE_INDENT: code indent should use tabs where possible
#879: FILE: drivers/gpu/drm/xe/xe_pt.c:1164:
+ return 0;$
-:879: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#879: FILE: drivers/gpu/drm/xe/xe_pt.c:1164:
+ return 0;$
-:1332: CHECK:LINE_SPACING: Please don't use multiple blank lines
#1332: FILE: drivers/gpu/drm/xe/xe_pt.c:1620:
+
+
-:1662: WARNING:BLOCK_COMMENT_STYLE: Block comments should align the * on each line
#1662: FILE: drivers/gpu/drm/xe/xe_pt.c:1902:
+ * installing job fence in various places.
+ *
-:1663: WARNING:BLOCK_COMMENT_STYLE: Block comments should align the * on each line
#1663: FILE: drivers/gpu/drm/xe/xe_pt.c:1903:
+ *
+ * Return: fence on success, negative ERR_PTR on error.
-:1795: WARNING:LEADING_SPACE: please, no spaces at the start of a line
#1795: FILE: drivers/gpu/drm/xe/xe_pt.c:2035:
+ }$
total: 1 errors, 6 warnings, 1 checks, 2525 lines checked
12dbb169266f drm/xe: Update VM trace events
1537c7985bfa drm/xe: Update PT layer with better error handling
bd4d7d4d0a25 drm/xe: Add VM bind IOCTL error injection
^ permalink raw reply [flat|nested] 23+ messages in thread
* ✓ CI.KUnit: success for Convert multiple bind ops to 1 job (rev4)
2024-06-18 17:15 [PATCH v4 0/7] Convert multiple bind ops to 1 job Matthew Brost
` (8 preceding siblings ...)
2024-06-18 17:19 ` ✗ CI.checkpatch: warning " Patchwork
@ 2024-06-18 17:20 ` Patchwork
2024-06-18 17:32 ` ✓ CI.Build: " Patchwork
` (4 subsequent siblings)
14 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-06-18 17:20 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
== Series Details ==
Series: Convert multiple bind ops to 1 job (rev4)
URL : https://patchwork.freedesktop.org/series/133034/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[17:19:32] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[17:19:37] 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)
| ^~~~~~~~~~~~~~~~~
[17:20:02] Starting KUnit Kernel (1/1)...
[17:20:02] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[17:20:02] =================== guc_dbm (7 subtests) ===================
[17:20:02] [PASSED] test_empty
[17:20:02] [PASSED] test_default
[17:20:02] ======================== test_size ========================
[17:20:02] [PASSED] 4
[17:20:02] [PASSED] 8
[17:20:02] [PASSED] 32
[17:20:02] [PASSED] 256
[17:20:02] ==================== [PASSED] test_size ====================
[17:20:02] ======================= test_reuse ========================
[17:20:02] [PASSED] 4
[17:20:02] [PASSED] 8
[17:20:02] [PASSED] 32
[17:20:02] [PASSED] 256
[17:20:02] =================== [PASSED] test_reuse ====================
[17:20:02] =================== test_range_overlap ====================
[17:20:02] [PASSED] 4
[17:20:02] [PASSED] 8
[17:20:02] [PASSED] 32
[17:20:02] [PASSED] 256
[17:20:02] =============== [PASSED] test_range_overlap ================
[17:20:02] =================== test_range_compact ====================
[17:20:02] [PASSED] 4
[17:20:02] [PASSED] 8
[17:20:02] [PASSED] 32
[17:20:02] [PASSED] 256
[17:20:02] =============== [PASSED] test_range_compact ================
[17:20:02] ==================== test_range_spare =====================
[17:20:02] [PASSED] 4
[17:20:02] [PASSED] 8
[17:20:02] [PASSED] 32
[17:20:02] [PASSED] 256
[17:20:02] ================ [PASSED] test_range_spare =================
[17:20:02] ===================== [PASSED] guc_dbm =====================
[17:20:02] =================== guc_idm (6 subtests) ===================
[17:20:02] [PASSED] bad_init
[17:20:02] [PASSED] no_init
[17:20:02] [PASSED] init_fini
[17:20:02] [PASSED] check_used
[17:20:02] [PASSED] check_quota
[17:20:02] [PASSED] check_all
[17:20:02] ===================== [PASSED] guc_idm =====================
[17:20:02] ================== no_relay (3 subtests) ===================
[17:20:02] [PASSED] xe_drops_guc2pf_if_not_ready
[17:20:02] [PASSED] xe_drops_guc2vf_if_not_ready
[17:20:02] [PASSED] xe_rejects_send_if_not_ready
[17:20:02] ==================== [PASSED] no_relay =====================
[17:20:02] ================== pf_relay (14 subtests) ==================
[17:20:02] [PASSED] pf_rejects_guc2pf_too_short
[17:20:02] [PASSED] pf_rejects_guc2pf_too_long
[17:20:02] [PASSED] pf_rejects_guc2pf_no_payload
[17:20:02] [PASSED] pf_fails_no_payload
[17:20:02] [PASSED] pf_fails_bad_origin
[17:20:02] [PASSED] pf_fails_bad_type
[17:20:02] [PASSED] pf_txn_reports_error
[17:20:02] [PASSED] pf_txn_sends_pf2guc
[17:20:02] [PASSED] pf_sends_pf2guc
[17:20:02] [SKIPPED] pf_loopback_nop
[17:20:02] [SKIPPED] pf_loopback_echo
[17:20:02] [SKIPPED] pf_loopback_fail
[17:20:02] [SKIPPED] pf_loopback_busy
[17:20:02] [SKIPPED] pf_loopback_retry
[17:20:02] ==================== [PASSED] pf_relay =====================
[17:20:02] ================== vf_relay (3 subtests) ===================
[17:20:02] [PASSED] vf_rejects_guc2vf_too_short
[17:20:02] [PASSED] vf_rejects_guc2vf_too_long
[17:20:02] [PASSED] vf_rejects_guc2vf_no_payload
[17:20:02] ==================== [PASSED] vf_relay =====================
[17:20:02] ================= pf_service (11 subtests) =================
[17:20:02] [PASSED] pf_negotiate_any
[17:20:02] [PASSED] pf_negotiate_base_match
[17:20:02] [PASSED] pf_negotiate_base_newer
[17:20:02] [PASSED] pf_negotiate_base_next
[17:20:02] [SKIPPED] pf_negotiate_base_older
[17:20:02] [PASSED] pf_negotiate_base_prev
[17:20:02] [PASSED] pf_negotiate_latest_match
[17:20:02] [PASSED] pf_negotiate_latest_newer
[17:20:02] [PASSED] pf_negotiate_latest_next
[17:20:02] [SKIPPED] pf_negotiate_latest_older
[17:20:02] [SKIPPED] pf_negotiate_latest_prev
[17:20:02] =================== [PASSED] pf_service ====================
[17:20:02] ===================== lmtt (1 subtest) =====================
[17:20:02] ======================== test_ops =========================
[17:20:02] [PASSED] 2-level
[17:20:02] [PASSED] multi-level
[17:20:02] ==================== [PASSED] test_ops =====================
[17:20:02] ====================== [PASSED] lmtt =======================
[17:20:02] ==================== xe_bo (2 subtests) ====================
[17:20:02] [SKIPPED] xe_ccs_migrate_kunit
[17:20:02] [SKIPPED] xe_bo_evict_kunit
[17:20:02] ===================== [SKIPPED] xe_bo ======================
[17:20:02] ================== xe_dma_buf (1 subtest) ==================
[17:20:02] [SKIPPED] xe_dma_buf_kunit
[17:20:02] =================== [SKIPPED] xe_dma_buf ===================
[17:20:02] ================== xe_migrate (1 subtest) ==================
[17:20:02] [SKIPPED] xe_migrate_sanity_kunit
[17:20:02] =================== [SKIPPED] xe_migrate ===================
[17:20:02] =================== xe_mocs (2 subtests) ===================
[17:20:02] [SKIPPED] xe_live_mocs_kernel_kunit
[17:20:02] [SKIPPED] xe_live_mocs_reset_kunit
[17:20:02] ==================== [SKIPPED] xe_mocs =====================
[17:20:02] ==================== args (11 subtests) ====================
[17:20:02] [PASSED] count_args_test
[17:20:02] [PASSED] call_args_example
[17:20:02] [PASSED] call_args_test
[17:20:02] [PASSED] drop_first_arg_example
[17:20:02] [PASSED] drop_first_arg_test
[17:20:02] [PASSED] first_arg_example
[17:20:02] [PASSED] first_arg_test
[17:20:02] [PASSED] last_arg_example
[17:20:02] [PASSED] last_arg_test
[17:20:02] [PASSED] pick_arg_example
[17:20:02] [PASSED] sep_comma_example
[17:20:02] ====================== [PASSED] args =======================
[17:20:02] =================== xe_pci (2 subtests) ====================
[17:20:02] [PASSED] xe_gmdid_graphics_ip
[17:20:02] [PASSED] xe_gmdid_media_ip
[17:20:02] ===================== [PASSED] xe_pci ======================
[17:20:02] ==================== xe_rtp (1 subtest) ====================
[17:20:02] ================== xe_rtp_process_tests ===================
[17:20:02] [PASSED] coalesce-same-reg
[17:20:02] [PASSED] no-match-no-add
[17:20:02] [PASSED] no-match-no-add-multiple-rules
[17:20:02] [PASSED] two-regs-two-entries
[17:20:02] [PASSED] clr-one-set-other
[17:20:02] [PASSED] set-field
[17:20:02] [PASSED] conflict-duplicate
[17:20:02] [PASSED] conflict-not-disjoint
[17:20:02] [PASSED] conflict-reg-type
[17:20:02] ============== [PASSED] xe_rtp_process_tests ===============
stty: 'standard input': Inappropriate ioctl for device
[17:20:02] ===================== [PASSED] xe_rtp ======================
[17:20:02] ==================== xe_wa (1 subtest) =====================
[17:20:02] ======================== xe_wa_gt =========================
[17:20:02] [PASSED] TIGERLAKE (B0)
[17:20:02] [PASSED] DG1 (A0)
[17:20:02] [PASSED] DG1 (B0)
[17:20:02] [PASSED] ALDERLAKE_S (A0)
[17:20:02] [PASSED] ALDERLAKE_S (B0)
[17:20:02] [PASSED] ALDERLAKE_S (C0)
[17:20:02] [PASSED] ALDERLAKE_S (D0)
[17:20:02] [PASSED] ALDERLAKE_P (A0)
[17:20:02] [PASSED] ALDERLAKE_P (B0)
[17:20:02] [PASSED] ALDERLAKE_P (C0)
[17:20:02] [PASSED] ALDERLAKE_S_RPLS (D0)
[17:20:02] [PASSED] ALDERLAKE_P_RPLU (E0)
[17:20:02] [PASSED] DG2_G10 (C0)
[17:20:02] [PASSED] DG2_G11 (B1)
[17:20:02] [PASSED] DG2_G12 (A1)
[17:20:02] [PASSED] METEORLAKE (g:A0, m:A0)
[17:20:02] [PASSED] METEORLAKE (g:A0, m:A0)
[17:20:02] [PASSED] METEORLAKE (g:A0, m:A0)
[17:20:02] [PASSED] LUNARLAKE (g:A0, m:A0)
[17:20:02] [PASSED] LUNARLAKE (g:B0, m:A0)
[17:20:02] ==================== [PASSED] xe_wa_gt =====================
[17:20:02] ====================== [PASSED] xe_wa ======================
[17:20:02] ============================================================
[17:20:02] Testing complete. Ran 109 tests: passed: 95, skipped: 14
[17:20:02] Elapsed time: 29.683s total, 4.280s configuring, 25.134s building, 0.217s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[17:20:02] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[17:20:04] 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)
| ^~~~~~~~~~~~~~~~~
[17:20:25] Starting KUnit Kernel (1/1)...
[17:20:25] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[17:20:26] ============ drm_test_pick_cmdline (2 subtests) ============
[17:20:26] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[17:20:26] =============== drm_test_pick_cmdline_named ===============
[17:20:26] [PASSED] NTSC
[17:20:26] [PASSED] NTSC-J
[17:20:26] [PASSED] PAL
[17:20:26] [PASSED] PAL-M
[17:20:26] =========== [PASSED] drm_test_pick_cmdline_named ===========
[17:20:26] ============== [PASSED] drm_test_pick_cmdline ==============
[17:20:26] ================== drm_buddy (7 subtests) ==================
[17:20:26] [PASSED] drm_test_buddy_alloc_limit
[17:20:26] [PASSED] drm_test_buddy_alloc_optimistic
[17:20:26] [PASSED] drm_test_buddy_alloc_pessimistic
[17:20:26] [PASSED] drm_test_buddy_alloc_pathological
[17:20:26] [PASSED] drm_test_buddy_alloc_contiguous
[17:20:26] [PASSED] drm_test_buddy_alloc_clear
[17:20:26] [PASSED] drm_test_buddy_alloc_range_bias
[17:20:26] ==================== [PASSED] drm_buddy ====================
[17:20:26] ============= drm_cmdline_parser (40 subtests) =============
[17:20:26] [PASSED] drm_test_cmdline_force_d_only
[17:20:26] [PASSED] drm_test_cmdline_force_D_only_dvi
[17:20:26] [PASSED] drm_test_cmdline_force_D_only_hdmi
[17:20:26] [PASSED] drm_test_cmdline_force_D_only_not_digital
[17:20:26] [PASSED] drm_test_cmdline_force_e_only
[17:20:26] [PASSED] drm_test_cmdline_res
[17:20:26] [PASSED] drm_test_cmdline_res_vesa
[17:20:26] [PASSED] drm_test_cmdline_res_vesa_rblank
[17:20:26] [PASSED] drm_test_cmdline_res_rblank
[17:20:26] [PASSED] drm_test_cmdline_res_bpp
[17:20:26] [PASSED] drm_test_cmdline_res_refresh
[17:20:26] [PASSED] drm_test_cmdline_res_bpp_refresh
[17:20:26] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[17:20:26] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[17:20:26] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[17:20:26] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[17:20:26] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[17:20:26] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[17:20:26] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[17:20:26] [PASSED] drm_test_cmdline_res_margins_force_on
[17:20:26] [PASSED] drm_test_cmdline_res_vesa_margins
[17:20:26] [PASSED] drm_test_cmdline_name
[17:20:26] [PASSED] drm_test_cmdline_name_bpp
[17:20:26] [PASSED] drm_test_cmdline_name_option
[17:20:26] [PASSED] drm_test_cmdline_name_bpp_option
[17:20:26] [PASSED] drm_test_cmdline_rotate_0
[17:20:26] [PASSED] drm_test_cmdline_rotate_90
[17:20:26] [PASSED] drm_test_cmdline_rotate_180
[17:20:26] [PASSED] drm_test_cmdline_rotate_270
[17:20:26] [PASSED] drm_test_cmdline_hmirror
[17:20:26] [PASSED] drm_test_cmdline_vmirror
[17:20:26] [PASSED] drm_test_cmdline_margin_options
[17:20:26] [PASSED] drm_test_cmdline_multiple_options
[17:20:26] [PASSED] drm_test_cmdline_bpp_extra_and_option
[17:20:26] [PASSED] drm_test_cmdline_extra_and_option
[17:20:26] [PASSED] drm_test_cmdline_freestanding_options
[17:20:26] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[17:20:26] [PASSED] drm_test_cmdline_panel_orientation
[17:20:26] ================ drm_test_cmdline_invalid =================
[17:20:26] [PASSED] margin_only
[17:20:26] [PASSED] interlace_only
[17:20:26] [PASSED] res_missing_x
[17:20:26] [PASSED] res_missing_y
[17:20:26] [PASSED] res_bad_y
[17:20:26] [PASSED] res_missing_y_bpp
[17:20:26] [PASSED] res_bad_bpp
[17:20:26] [PASSED] res_bad_refresh
[17:20:26] [PASSED] res_bpp_refresh_force_on_off
[17:20:26] [PASSED] res_invalid_mode
[17:20:26] [PASSED] res_bpp_wrong_place_mode
[17:20:26] [PASSED] name_bpp_refresh
[17:20:26] [PASSED] name_refresh
[17:20:26] [PASSED] name_refresh_wrong_mode
[17:20:26] [PASSED] name_refresh_invalid_mode
[17:20:26] [PASSED] rotate_multiple
[17:20:26] [PASSED] rotate_invalid_val
[17:20:26] [PASSED] rotate_truncated
[17:20:26] [PASSED] invalid_option
[17:20:26] [PASSED] invalid_tv_option
[17:20:26] [PASSED] truncated_tv_option
[17:20:26] ============ [PASSED] drm_test_cmdline_invalid =============
[17:20:26] =============== drm_test_cmdline_tv_options ===============
[17:20:26] [PASSED] NTSC
[17:20:26] [PASSED] NTSC_443
[17:20:26] [PASSED] NTSC_J
[17:20:26] [PASSED] PAL
[17:20:26] [PASSED] PAL_M
[17:20:26] [PASSED] PAL_N
[17:20:26] [PASSED] SECAM
[17:20:26] =========== [PASSED] drm_test_cmdline_tv_options ===========
[17:20:26] =============== [PASSED] drm_cmdline_parser ================
[17:20:26] ========== drmm_connector_hdmi_init (19 subtests) ==========
[17:20:26] [PASSED] drm_test_connector_hdmi_init_valid
[17:20:26] [PASSED] drm_test_connector_hdmi_init_bpc_8
[17:20:26] [PASSED] drm_test_connector_hdmi_init_bpc_10
[17:20:26] [PASSED] drm_test_connector_hdmi_init_bpc_12
[17:20:26] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[17:20:26] [PASSED] drm_test_connector_hdmi_init_bpc_null
[17:20:26] [PASSED] drm_test_connector_hdmi_init_formats_empty
[17:20:26] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[17:20:26] [PASSED] drm_test_connector_hdmi_init_null_ddc
[17:20:26] [PASSED] drm_test_connector_hdmi_init_null_product
[17:20:26] [PASSED] drm_test_connector_hdmi_init_null_vendor
[17:20:26] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[17:20:26] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[17:20:26] [PASSED] drm_test_connector_hdmi_init_product_valid
[17:20:26] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[17:20:26] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[17:20:26] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[17:20:26] ========= drm_test_connector_hdmi_init_type_valid =========
[17:20:26] [PASSED] HDMI-A
[17:20:26] [PASSED] HDMI-B
[17:20:26] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[17:20:26] ======== drm_test_connector_hdmi_init_type_invalid ========
[17:20:26] [PASSED] Unknown
[17:20:26] [PASSED] VGA
[17:20:26] [PASSED] DVI-I
[17:20:26] [PASSED] DVI-D
[17:20:26] [PASSED] DVI-A
[17:20:26] [PASSED] Composite
[17:20:26] [PASSED] SVIDEO
[17:20:26] [PASSED] LVDS
[17:20:26] [PASSED] Component
[17:20:26] [PASSED] DIN
[17:20:26] [PASSED] DP
[17:20:26] [PASSED] TV
[17:20:26] [PASSED] eDP
[17:20:26] [PASSED] Virtual
[17:20:26] [PASSED] DSI
[17:20:26] [PASSED] DPI
[17:20:26] [PASSED] Writeback
[17:20:26] [PASSED] SPI
[17:20:26] [PASSED] USB
[17:20:26] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[17:20:26] ============ [PASSED] drmm_connector_hdmi_init =============
[17:20:26] ============= drmm_connector_init (3 subtests) =============
[17:20:26] [PASSED] drm_test_drmm_connector_init
[17:20:26] [PASSED] drm_test_drmm_connector_init_null_ddc
[17:20:26] ========= drm_test_drmm_connector_init_type_valid =========
[17:20:26] [PASSED] Unknown
[17:20:26] [PASSED] VGA
[17:20:26] [PASSED] DVI-I
[17:20:26] [PASSED] DVI-D
[17:20:26] [PASSED] DVI-A
[17:20:26] [PASSED] Composite
[17:20:26] [PASSED] SVIDEO
[17:20:26] [PASSED] LVDS
[17:20:26] [PASSED] Component
[17:20:26] [PASSED] DIN
[17:20:26] [PASSED] DP
[17:20:26] [PASSED] HDMI-A
[17:20:26] [PASSED] HDMI-B
[17:20:26] [PASSED] TV
[17:20:26] [PASSED] eDP
[17:20:26] [PASSED] Virtual
[17:20:26] [PASSED] DSI
[17:20:26] [PASSED] DPI
[17:20:26] [PASSED] Writeback
[17:20:26] [PASSED] SPI
[17:20:26] [PASSED] USB
[17:20:26] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[17:20:26] =============== [PASSED] drmm_connector_init ===============
[17:20:26] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[17:20:26] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[17:20:26] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[17:20:26] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[17:20:26] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[17:20:26] ========== drm_test_get_tv_mode_from_name_valid ===========
[17:20:26] [PASSED] NTSC
[17:20:26] [PASSED] NTSC-443
[17:20:26] [PASSED] NTSC-J
[17:20:26] [PASSED] PAL
[17:20:26] [PASSED] PAL-M
[17:20:26] [PASSED] PAL-N
[17:20:26] [PASSED] SECAM
[17:20:26] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[17:20:26] [PASSED] drm_test_get_tv_mode_from_name_truncated
[17:20:26] ============ [PASSED] drm_get_tv_mode_from_name ============
[17:20:26] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[17:20:26] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[17:20:26] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[17:20:26] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[17:20:26] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[17:20:26] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[17:20:26] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[17:20:26] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[17:20:26] [PASSED] VIC 96
[17:20:26] [PASSED] VIC 97
[17:20:26] [PASSED] VIC 101
[17:20:26] [PASSED] VIC 102
[17:20:26] [PASSED] VIC 106
[17:20:26] [PASSED] VIC 107
[17:20:26] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[17:20:26] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[17:20:26] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[17:20:26] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[17:20:26] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[17:20:26] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[17:20:26] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[17:20:26] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[17:20:26] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[17:20:26] [PASSED] Automatic
[17:20:26] [PASSED] Full
[17:20:26] [PASSED] Limited 16:235
[17:20:26] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[17:20:26] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[17:20:26] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[17:20:26] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[17:20:26] === drm_test_drm_hdmi_connector_get_output_format_name ====
[17:20:26] [PASSED] RGB
[17:20:26] [PASSED] YUV 4:2:0
[17:20:26] [PASSED] YUV 4:2:2
[17:20:26] [PASSED] YUV 4:4:4
[17:20:26] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[17:20:26] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[17:20:26] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[17:20:26] ============= drm_damage_helper (21 subtests) ==============
[17:20:26] [PASSED] drm_test_damage_iter_no_damage
[17:20:26] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[17:20:26] [PASSED] drm_test_damage_iter_no_damage_src_moved
[17:20:26] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[17:20:26] [PASSED] drm_test_damage_iter_no_damage_not_visible
[17:20:26] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[17:20:26] [PASSED] drm_test_damage_iter_no_damage_no_fb
[17:20:26] [PASSED] drm_test_damage_iter_simple_damage
[17:20:26] [PASSED] drm_test_damage_iter_single_damage
[17:20:26] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[17:20:26] [PASSED] drm_test_damage_iter_single_damage_outside_src
[17:20:26] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[17:20:26] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[17:20:26] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[17:20:26] [PASSED] drm_test_damage_iter_single_damage_src_moved
[17:20:26] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[17:20:26] [PASSED] drm_test_damage_iter_damage
[17:20:26] [PASSED] drm_test_damage_iter_damage_one_intersect
[17:20:26] [PASSED] drm_test_damage_iter_damage_one_outside
[17:20:26] [PASSED] drm_test_damage_iter_damage_src_moved
[17:20:26] [PASSED] drm_test_damage_iter_damage_not_visible
[17:20:26] ================ [PASSED] drm_damage_helper ================
[17:20:26] ============== drm_dp_mst_helper (3 subtests) ==============
[17:20:26] ============== drm_test_dp_mst_calc_pbn_mode ==============
[17:20:26] [PASSED] Clock 154000 BPP 30 DSC disabled
[17:20:26] [PASSED] Clock 234000 BPP 30 DSC disabled
[17:20:26] [PASSED] Clock 297000 BPP 24 DSC disabled
[17:20:26] [PASSED] Clock 332880 BPP 24 DSC enabled
[17:20:26] [PASSED] Clock 324540 BPP 24 DSC enabled
[17:20:26] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[17:20:26] ============== drm_test_dp_mst_calc_pbn_div ===============
[17:20:26] [PASSED] Link rate 2000000 lane count 4
[17:20:26] [PASSED] Link rate 2000000 lane count 2
[17:20:26] [PASSED] Link rate 2000000 lane count 1
[17:20:26] [PASSED] Link rate 1350000 lane count 4
[17:20:26] [PASSED] Link rate 1350000 lane count 2
[17:20:26] [PASSED] Link rate 1350000 lane count 1
[17:20:26] [PASSED] Link rate 1000000 lane count 4
[17:20:26] [PASSED] Link rate 1000000 lane count 2
[17:20:26] [PASSED] Link rate 1000000 lane count 1
[17:20:26] [PASSED] Link rate 810000 lane count 4
[17:20:26] [PASSED] Link rate 810000 lane count 2
[17:20:26] [PASSED] Link rate 810000 lane count 1
[17:20:26] [PASSED] Link rate 540000 lane count 4
[17:20:26] [PASSED] Link rate 540000 lane count 2
[17:20:26] [PASSED] Link rate 540000 lane count 1
[17:20:26] [PASSED] Link rate 270000 lane count 4
[17:20:26] [PASSED] Link rate 270000 lane count 2
[17:20:26] [PASSED] Link rate 270000 lane count 1
[17:20:26] [PASSED] Link rate 162000 lane count 4
[17:20:26] [PASSED] Link rate 162000 lane count 2
[17:20:26] [PASSED] Link rate 162000 lane count 1
[17:20:26] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[17:20:26] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[17:20:26] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[17:20:26] [PASSED] DP_POWER_UP_PHY with port number
[17:20:26] [PASSED] DP_POWER_DOWN_PHY with port number
[17:20:26] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[17:20:26] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[17:20:26] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[17:20:26] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[17:20:26] [PASSED] DP_QUERY_PAYLOAD with port number
[17:20:26] [PASSED] DP_QUERY_PAYLOAD with VCPI
[17:20:26] [PASSED] DP_REMOTE_DPCD_READ with port number
[17:20:26] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[17:20:26] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[17:20:26] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[17:20:26] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[17:20:26] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[17:20:26] [PASSED] DP_REMOTE_I2C_READ with port number
[17:20:26] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[17:20:26] [PASSED] DP_REMOTE_I2C_READ with transactions array
[17:20:26] [PASSED] DP_REMOTE_I2C_WRITE with port number
[17:20:26] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[17:20:26] [PASSED] DP_REMOTE_I2C_WRITE with data array
[17:20:26] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[17:20:26] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[17:20:26] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[17:20:26] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[17:20:26] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[17:20:26] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[17:20:26] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[17:20:26] ================ [PASSED] drm_dp_mst_helper ================
[17:20:26] ================== drm_exec (7 subtests) ===================
[17:20:26] [PASSED] sanitycheck
[17:20:26] [PASSED] test_lock
[17:20:26] [PASSED] test_lock_unlock
[17:20:26] [PASSED] test_duplicates
[17:20:26] [PASSED] test_prepare
[17:20:26] [PASSED] test_prepare_array
[17:20:26] [PASSED] test_multiple_loops
[17:20:26] ==================== [PASSED] drm_exec =====================
[17:20:26] =========== drm_format_helper_test (17 subtests) ===========
[17:20:26] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[17:20:26] [PASSED] single_pixel_source_buffer
[17:20:26] [PASSED] single_pixel_clip_rectangle
[17:20:26] [PASSED] well_known_colors
[17:20:26] [PASSED] destination_pitch
[17:20:26] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[17:20:26] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[17:20:26] [PASSED] single_pixel_source_buffer
[17:20:26] [PASSED] single_pixel_clip_rectangle
[17:20:26] [PASSED] well_known_colors
[17:20:26] [PASSED] destination_pitch
[17:20:26] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[17:20:26] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[17:20:26] [PASSED] single_pixel_source_buffer
[17:20:26] [PASSED] single_pixel_clip_rectangle
[17:20:26] [PASSED] well_known_colors
[17:20:26] [PASSED] destination_pitch
[17:20:26] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[17:20:26] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[17:20:26] [PASSED] single_pixel_source_buffer
[17:20:26] [PASSED] single_pixel_clip_rectangle
[17:20:26] [PASSED] well_known_colors
[17:20:26] [PASSED] destination_pitch
[17:20:26] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[17:20:26] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[17:20:26] [PASSED] single_pixel_source_buffer
[17:20:26] [PASSED] single_pixel_clip_rectangle
[17:20:26] [PASSED] well_known_colors
[17:20:26] [PASSED] destination_pitch
[17:20:26] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[17:20:26] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[17:20:26] [PASSED] single_pixel_source_buffer
[17:20:26] [PASSED] single_pixel_clip_rectangle
[17:20:26] [PASSED] well_known_colors
[17:20:26] [PASSED] destination_pitch
[17:20:26] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[17:20:26] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[17:20:26] [PASSED] single_pixel_source_buffer
[17:20:26] [PASSED] single_pixel_clip_rectangle
[17:20:26] [PASSED] well_known_colors
[17:20:26] [PASSED] destination_pitch
[17:20:26] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[17:20:26] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[17:20:26] [PASSED] single_pixel_source_buffer
[17:20:26] [PASSED] single_pixel_clip_rectangle
[17:20:26] [PASSED] well_known_colors
[17:20:26] [PASSED] destination_pitch
[17:20:26] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[17:20:26] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[17:20:26] [PASSED] single_pixel_source_buffer
[17:20:26] [PASSED] single_pixel_clip_rectangle
[17:20:26] [PASSED] well_known_colors
[17:20:26] [PASSED] destination_pitch
[17:20:26] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[17:20:26] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[17:20:26] [PASSED] single_pixel_source_buffer
[17:20:26] [PASSED] single_pixel_clip_rectangle
[17:20:26] [PASSED] well_known_colors
[17:20:26] [PASSED] destination_pitch
[17:20:26] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[17:20:26] ============== drm_test_fb_xrgb8888_to_mono ===============
[17:20:26] [PASSED] single_pixel_source_buffer
[17:20:26] [PASSED] single_pixel_clip_rectangle
[17:20:26] [PASSED] well_known_colors
[17:20:26] [PASSED] destination_pitch
[17:20:26] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[17:20:26] ==================== drm_test_fb_swab =====================
[17:20:26] [PASSED] single_pixel_source_buffer
[17:20:26] [PASSED] single_pixel_clip_rectangle
[17:20:26] [PASSED] well_known_colors
[17:20:26] [PASSED] destination_pitch
[17:20:26] ================ [PASSED] drm_test_fb_swab =================
[17:20:26] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[17:20:26] [PASSED] single_pixel_source_buffer
[17:20:26] [PASSED] single_pixel_clip_rectangle
[17:20:26] [PASSED] well_known_colors
[17:20:26] [PASSED] destination_pitch
[17:20:26] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[17:20:26] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[17:20:26] [PASSED] single_pixel_source_buffer
[17:20:26] [PASSED] single_pixel_clip_rectangle
[17:20:26] [PASSED] well_known_colors
[17:20:26] [PASSED] destination_pitch
[17:20:26] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[17:20:26] ================= drm_test_fb_clip_offset =================
[17:20:26] [PASSED] pass through
[17:20:26] [PASSED] horizontal offset
[17:20:26] [PASSED] vertical offset
[17:20:26] [PASSED] horizontal and vertical offset
[17:20:26] [PASSED] horizontal offset (custom pitch)
[17:20:26] [PASSED] vertical offset (custom pitch)
[17:20:26] [PASSED] horizontal and vertical offset (custom pitch)
[17:20:26] ============= [PASSED] drm_test_fb_clip_offset =============
[17:20:26] ============== drm_test_fb_build_fourcc_list ==============
[17:20:26] [PASSED] no native formats
[17:20:26] [PASSED] XRGB8888 as native format
[17:20:26] [PASSED] remove duplicates
[17:20:26] [PASSED] convert alpha formats
[17:20:26] [PASSED] random formats
[17:20:26] ========== [PASSED] drm_test_fb_build_fourcc_list ==========
[17:20:26] =================== drm_test_fb_memcpy ====================
[17:20:26] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[17:20:26] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[17:20:26] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[17:20:26] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[17:20:26] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[17:20:26] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[17:20:26] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[17:20:26] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[17:20:26] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[17:20:26] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[17:20:26] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[17:20:26] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[17:20:26] =============== [PASSED] drm_test_fb_memcpy ================
[17:20:26] ============= [PASSED] drm_format_helper_test ==============
[17:20:26] ================= drm_format (18 subtests) =================
[17:20:26] [PASSED] drm_test_format_block_width_invalid
[17:20:26] [PASSED] drm_test_format_block_width_one_plane
[17:20:26] [PASSED] drm_test_format_block_width_two_plane
[17:20:26] [PASSED] drm_test_format_block_width_three_plane
[17:20:26] [PASSED] drm_test_format_block_width_tiled
[17:20:26] [PASSED] drm_test_format_block_height_invalid
[17:20:26] [PASSED] drm_test_format_block_height_one_plane
[17:20:26] [PASSED] drm_test_format_block_height_two_plane
[17:20:26] [PASSED] drm_test_format_block_height_three_plane
[17:20:26] [PASSED] drm_test_format_block_height_tiled
[17:20:26] [PASSED] drm_test_format_min_pitch_invalid
[17:20:26] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[17:20:26] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[17:20:26] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[17:20:26] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[17:20:26] [PASSED] drm_test_format_min_pitch_two_plane
[17:20:26] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[17:20:26] [PASSED] drm_test_format_min_pitch_tiled
[17:20:26] =================== [PASSED] drm_format ====================
[17:20:26] =============== drm_framebuffer (1 subtest) ================
[17:20:26] =============== drm_test_framebuffer_create ===============
[17:20:26] [PASSED] ABGR8888 normal sizes
[17:20:26] [PASSED] ABGR8888 max sizes
[17:20:26] [PASSED] ABGR8888 pitch greater than min required
[17:20:26] [PASSED] ABGR8888 pitch less than min required
[17:20:26] [PASSED] ABGR8888 Invalid width
[17:20:26] [PASSED] ABGR8888 Invalid buffer handle
[17:20:26] [PASSED] No pixel format
[17:20:26] [PASSED] ABGR8888 Width 0
[17:20:26] [PASSED] ABGR8888 Height 0
[17:20:26] [PASSED] ABGR8888 Out of bound height * pitch combination
[17:20:26] [PASSED] ABGR8888 Large buffer offset
[17:20:26] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[17:20:26] [PASSED] ABGR8888 Valid buffer modifier
[17:20:26] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[17:20:26] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[17:20:26] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[17:20:26] [PASSED] NV12 Normal sizes
[17:20:26] [PASSED] NV12 Max sizes
[17:20:26] [PASSED] NV12 Invalid pitch
[17:20:26] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[17:20:26] [PASSED] NV12 different modifier per-plane
[17:20:26] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[17:20:26] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[17:20:26] [PASSED] NV12 Modifier for inexistent plane
[17:20:26] [PASSED] NV12 Handle for inexistent plane
[17:20:26] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[17:20:26] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[17:20:26] [PASSED] YVU420 Normal sizes
[17:20:26] [PASSED] YVU420 Max sizes
[17:20:26] [PASSED] YVU420 Invalid pitch
[17:20:26] [PASSED] YVU420 Different pitches
[17:20:26] [PASSED] YVU420 Different buffer offsets/pitches
[17:20:26] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[17:20:26] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[17:20:26] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[17:20:26] [PASSED] YVU420 Valid modifier
[17:20:26] [PASSED] YVU420 Different modifiers per plane
[17:20:26] [PASSED] YVU420 Modifier for inexistent plane
[17:20:26] [PASSED] X0L2 Normal sizes
[17:20:26] [PASSED] X0L2 Max sizes
[17:20:26] [PASSED] X0L2 Invalid pitch
[17:20:26] [PASSED] X0L2 Pitch greater than minimum required
[17:20:26] [PASSED] X0L2 Handle for inexistent plane
[17:20:26] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[17:20:26] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[17:20:26] [PASSED] X0L2 Valid modifier
[17:20:26] [PASSED] X0L2 Modifier for inexistent plane
[17:20:26] =========== [PASSED] drm_test_framebuffer_create ===========
[17:20:26] ================= [PASSED] drm_framebuffer =================
[17:20:26] ================ drm_gem_shmem (8 subtests) ================
[17:20:26] [PASSED] drm_gem_shmem_test_obj_create
[17:20:26] [PASSED] drm_gem_shmem_test_obj_create_private
[17:20:26] [PASSED] drm_gem_shmem_test_pin_pages
[17:20:26] [PASSED] drm_gem_shmem_test_vmap
[17:20:26] [PASSED] drm_gem_shmem_test_get_pages_sgt
[17:20:26] [PASSED] drm_gem_shmem_test_get_sg_table
[17:20:26] [PASSED] drm_gem_shmem_test_madvise
[17:20:26] [PASSED] drm_gem_shmem_test_purge
[17:20:26] ================== [PASSED] drm_gem_shmem ==================
[17:20:26] === drm_atomic_helper_connector_hdmi_check (22 subtests) ===
[17:20:26] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[17:20:26] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[17:20:26] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[17:20:26] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[17:20:26] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[17:20:26] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[17:20:26] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[17:20:26] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[17:20:26] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[17:20:26] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback
[17:20:26] [PASSED] drm_test_check_max_tmds_rate_format_fallback
[17:20:26] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[17:20:26] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[17:20:26] [PASSED] drm_test_check_output_bpc_dvi
[17:20:26] [PASSED] drm_test_check_output_bpc_format_vic_1
[17:20:26] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[17:20:26] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[17:20:26] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[17:20:26] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[17:20:26] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[17:20:26] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[17:20:26] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[17:20:26] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[17:20:26] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[17:20:26] [PASSED] drm_test_check_broadcast_rgb_value
[17:20:26] [PASSED] drm_test_check_bpc_8_value
[17:20:26] [PASSED] drm_test_check_bpc_10_value
[17:20:26] [PASSED] drm_test_check_bpc_12_value
[17:20:26] [PASSED] drm_test_check_format_value
[17:20:26] [PASSED] drm_test_check_tmds_char_value
[17:20:26] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[17:20:26] ================= drm_managed (2 subtests) =================
[17:20:26] [PASSED] drm_test_managed_release_action
[17:20:26] [PASSED] drm_test_managed_run_action
[17:20:26] =================== [PASSED] drm_managed ===================
[17:20:26] =================== drm_mm (6 subtests) ====================
[17:20:26] [PASSED] drm_test_mm_init
[17:20:26] [PASSED] drm_test_mm_debug
[17:20:26] [PASSED] drm_test_mm_align32
[17:20:26] [PASSED] drm_test_mm_align64
[17:20:26] [PASSED] drm_test_mm_lowest
[17:20:26] [PASSED] drm_test_mm_highest
[17:20:26] ===================== [PASSED] drm_mm ======================
[17:20:26] ============= drm_modes_analog_tv (4 subtests) =============
[17:20:26] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[17:20:26] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[17:20:26] [PASSED] drm_test_modes_analog_tv_pal_576i
[17:20:26] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[17:20:26] =============== [PASSED] drm_modes_analog_tv ===============
[17:20:26] ============== drm_plane_helper (2 subtests) ===============
[17:20:26] =============== drm_test_check_plane_state ================
[17:20:26] [PASSED] clipping_simple
[17:20:26] [PASSED] clipping_rotate_reflect
[17:20:26] [PASSED] positioning_simple
[17:20:26] [PASSED] upscaling
[17:20:26] [PASSED] downscaling
[17:20:26] [PASSED] rounding1
[17:20:26] [PASSED] rounding2
[17:20:26] [PASSED] rounding3
[17:20:26] [PASSED] rounding4
[17:20:26] =========== [PASSED] drm_test_check_plane_state ============
[17:20:26] =========== drm_test_check_invalid_plane_state ============
[17:20:26] [PASSED] positioning_invalid
[17:20:26] [PASSED] upscaling_invalid
[17:20:26] [PASSED] downscaling_invalid
[17:20:26] ======= [PASSED] drm_test_check_invalid_plane_state ========
[17:20:26] ================ [PASSED] drm_plane_helper =================
stty: 'standard input': Inappropriate ioctl for device
[17:20:26] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[17:20:26] ====== drm_test_connector_helper_tv_get_modes_check =======
[17:20:26] [PASSED] None
[17:20:26] [PASSED] PAL
[17:20:26] [PASSED] NTSC
[17:20:26] [PASSED] Both, NTSC Default
[17:20:26] [PASSED] Both, PAL Default
[17:20:26] [PASSED] Both, NTSC Default, with PAL on command-line
[17:20:26] [PASSED] Both, PAL Default, with NTSC on command-line
[17:20:26] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[17:20:26] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[17:20:26] ================== drm_rect (9 subtests) ===================
[17:20:26] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[17:20:26] [PASSED] drm_test_rect_clip_scaled_not_clipped
[17:20:26] [PASSED] drm_test_rect_clip_scaled_clipped
[17:20:26] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[17:20:26] ================= drm_test_rect_intersect =================
[17:20:26] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[17:20:26] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[17:20:26] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[17:20:26] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[17:20:26] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[17:20:26] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[17:20:26] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[17:20:26] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[17:20:26] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[17:20:26] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[17:20:26] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[17:20:26] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[17:20:26] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[17:20:26] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[17:20:26] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[17:20:26] ============= [PASSED] drm_test_rect_intersect =============
[17:20:26] ================ drm_test_rect_calc_hscale ================
[17:20:26] [PASSED] normal use
[17:20:26] [PASSED] out of max range
[17:20:26] [PASSED] out of min range
[17:20:26] [PASSED] zero dst
[17:20:26] [PASSED] negative src
[17:20:26] [PASSED] negative dst
[17:20:26] ============ [PASSED] drm_test_rect_calc_hscale ============
[17:20:26] ================ drm_test_rect_calc_vscale ================
[17:20:26] [PASSED] normal use
[17:20:26] [PASSED] out of max range
[17:20:26] [PASSED] out of min range
[17:20:26] [PASSED] zero dst
[17:20:26] [PASSED] negative src
[17:20:26] [PASSED] negative dst
[17:20:26] ============ [PASSED] drm_test_rect_calc_vscale ============
[17:20:26] ================== drm_test_rect_rotate ===================
[17:20:26] [PASSED] reflect-x
[17:20:26] [PASSED] reflect-y
[17:20:26] [PASSED] rotate-0
[17:20:26] [PASSED] rotate-90
[17:20:26] [PASSED] rotate-180
[17:20:26] [PASSED] rotate-270
[17:20:26] ============== [PASSED] drm_test_rect_rotate ===============
[17:20:26] ================ drm_test_rect_rotate_inv =================
[17:20:26] [PASSED] reflect-x
[17:20:26] [PASSED] reflect-y
[17:20:26] [PASSED] rotate-0
[17:20:26] [PASSED] rotate-90
[17:20:26] [PASSED] rotate-180
[17:20:26] [PASSED] rotate-270
[17:20:26] ============ [PASSED] drm_test_rect_rotate_inv =============
[17:20:26] ==================== [PASSED] drm_rect =====================
[17:20:26] ============================================================
[17:20:26] Testing complete. Ran 511 tests: passed: 511
[17:20:26] Elapsed time: 23.621s total, 1.693s configuring, 21.742s building, 0.153s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
stty: 'standard input': Inappropriate ioctl for device
[17:20:26] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[17:20:27] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
[17:20:36] Starting KUnit Kernel (1/1)...
[17:20:36] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[17:20:36] ================= ttm_device (5 subtests) ==================
[17:20:36] [PASSED] ttm_device_init_basic
[17:20:36] [PASSED] ttm_device_init_multiple
[17:20:36] [PASSED] ttm_device_fini_basic
[17:20:36] [PASSED] ttm_device_init_no_vma_man
[17:20:36] ================== ttm_device_init_pools ==================
[17:20:36] [PASSED] No DMA allocations, no DMA32 required
[17:20:36] [PASSED] DMA allocations, DMA32 required
[17:20:36] [PASSED] No DMA allocations, DMA32 required
[17:20:36] [PASSED] DMA allocations, no DMA32 required
[17:20:36] ============== [PASSED] ttm_device_init_pools ==============
[17:20:36] =================== [PASSED] ttm_device ====================
[17:20:36] ================== ttm_pool (8 subtests) ===================
[17:20:36] ================== ttm_pool_alloc_basic ===================
[17:20:36] [PASSED] One page
[17:20:36] [PASSED] More than one page
[17:20:36] [PASSED] Above the allocation limit
[17:20:36] [PASSED] One page, with coherent DMA mappings enabled
[17:20:36] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[17:20:36] ============== [PASSED] ttm_pool_alloc_basic ===============
[17:20:36] ============== ttm_pool_alloc_basic_dma_addr ==============
[17:20:36] [PASSED] One page
[17:20:36] [PASSED] More than one page
[17:20:36] [PASSED] Above the allocation limit
[17:20:36] [PASSED] One page, with coherent DMA mappings enabled
[17:20:36] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[17:20:36] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[17:20:36] [PASSED] ttm_pool_alloc_order_caching_match
[17:20:36] [PASSED] ttm_pool_alloc_caching_mismatch
[17:20:36] [PASSED] ttm_pool_alloc_order_mismatch
[17:20:36] [PASSED] ttm_pool_free_dma_alloc
[17:20:36] [PASSED] ttm_pool_free_no_dma_alloc
[17:20:36] [PASSED] ttm_pool_fini_basic
[17:20:36] ==================== [PASSED] ttm_pool =====================
[17:20:36] ================ ttm_resource (8 subtests) =================
[17:20:36] ================= ttm_resource_init_basic =================
[17:20:36] [PASSED] Init resource in TTM_PL_SYSTEM
[17:20:36] [PASSED] Init resource in TTM_PL_VRAM
[17:20:36] [PASSED] Init resource in a private placement
[17:20:36] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[17:20:36] ============= [PASSED] ttm_resource_init_basic =============
[17:20:36] [PASSED] ttm_resource_init_pinned
[17:20:36] [PASSED] ttm_resource_fini_basic
[17:20:36] [PASSED] ttm_resource_manager_init_basic
[17:20:36] [PASSED] ttm_resource_manager_usage_basic
[17:20:36] [PASSED] ttm_resource_manager_set_used_basic
[17:20:36] [PASSED] ttm_sys_man_alloc_basic
[17:20:36] [PASSED] ttm_sys_man_free_basic
[17:20:36] ================== [PASSED] ttm_resource ===================
[17:20:36] =================== ttm_tt (10 subtests) ===================
[17:20:36] ==================== ttm_tt_init_basic ====================
[17:20:36] [PASSED] Page-aligned size
[17:20:36] [PASSED] Extra pages requested
[17:20:36] ================ [PASSED] ttm_tt_init_basic ================
[17:20:36] [PASSED] ttm_tt_init_misaligned
[17:20:36] [PASSED] ttm_tt_fini_basic
[17:20:36] [PASSED] ttm_tt_fini_sg
[17:20:36] [PASSED] ttm_tt_fini_shmem
[17:20:36] [PASSED] ttm_tt_create_basic
[17:20:36] [PASSED] ttm_tt_create_invalid_bo_type
[17:20:36] [PASSED] ttm_tt_create_ttm_exists
[17:20:36] [PASSED] ttm_tt_create_failed
[17:20:36] [PASSED] ttm_tt_destroy_basic
[17:20:36] ===================== [PASSED] ttm_tt ======================
[17:20:36] =================== ttm_bo (14 subtests) ===================
[17:20:36] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[17:20:36] [PASSED] Cannot be interrupted and sleeps
[17:20:36] [PASSED] Cannot be interrupted, locks straight away
[17:20:36] [PASSED] Can be interrupted, sleeps
[17:20:36] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[17:20:36] [PASSED] ttm_bo_reserve_locked_no_sleep
[17:20:36] [PASSED] ttm_bo_reserve_no_wait_ticket
[17:20:36] [PASSED] ttm_bo_reserve_double_resv
[17:20:36] [PASSED] ttm_bo_reserve_interrupted
[17:20:36] [PASSED] ttm_bo_reserve_deadlock
[17:20:36] [PASSED] ttm_bo_unreserve_basic
[17:20:36] [PASSED] ttm_bo_unreserve_pinned
[17:20:36] [PASSED] ttm_bo_unreserve_bulk
[17:20:36] [PASSED] ttm_bo_put_basic
[17:20:36] [PASSED] ttm_bo_put_shared_resv
[17:20:36] [PASSED] ttm_bo_pin_basic
[17:20:36] [PASSED] ttm_bo_pin_unpin_resource
[17:20:36] [PASSED] ttm_bo_multiple_pin_one_unpin
[17:20:36] ===================== [PASSED] ttm_bo ======================
[17:20:36] ============================================================
[17:20:36] Testing complete. Ran 62 tests: passed: 62
[17:20:36] Elapsed time: 10.566s total, 1.706s configuring, 8.640s building, 0.194s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 23+ messages in thread
* ✓ CI.Build: success for Convert multiple bind ops to 1 job (rev4)
2024-06-18 17:15 [PATCH v4 0/7] Convert multiple bind ops to 1 job Matthew Brost
` (9 preceding siblings ...)
2024-06-18 17:20 ` ✓ CI.KUnit: success " Patchwork
@ 2024-06-18 17:32 ` Patchwork
2024-06-18 17:34 ` ✗ CI.Hooks: failure " Patchwork
` (3 subsequent siblings)
14 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-06-18 17:32 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
== Series Details ==
Series: Convert multiple bind ops to 1 job (rev4)
URL : https://patchwork.freedesktop.org/series/133034/
State : success
== Summary ==
lib/modules/6.10.0-rc4-xe/kernel/sound/core/seq/
lib/modules/6.10.0-rc4-xe/kernel/sound/core/seq/snd-seq.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/core/snd-seq-device.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/core/snd-hwdep.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/core/snd.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/core/snd-pcm.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/core/snd-compress.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/core/snd-timer.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soundcore.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/intel/
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/intel/atom/
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/intel/atom/sst/
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/intel/atom/sst/snd-intel-sst-acpi.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/intel/atom/sst/snd-intel-sst-core.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/intel/common/
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/intel/common/snd-soc-acpi-intel-match.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/amd/
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/amd/snd-acp-config.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/intel/
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-tgl.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-mlink.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-cnl.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-lnl.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-common.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-generic.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-mtl.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/amd/
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/amd/snd-sof-amd-renoir.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/amd/snd-sof-amd-acp.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/snd-sof-utils.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/snd-sof-pci.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/snd-sof.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/snd-sof-probes.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/xtensa/
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/sof/xtensa/snd-sof-xtensa-dsp.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/snd-soc-core.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/snd-soc-acpi.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/codecs/
lib/modules/6.10.0-rc4-xe/kernel/sound/soc/codecs/snd-soc-hdac-hda.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/hda/
lib/modules/6.10.0-rc4-xe/kernel/sound/hda/snd-intel-sdw-acpi.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/hda/ext/
lib/modules/6.10.0-rc4-xe/kernel/sound/hda/ext/snd-hda-ext-core.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/hda/snd-intel-dspcfg.ko
lib/modules/6.10.0-rc4-xe/kernel/sound/hda/snd-hda-core.ko
lib/modules/6.10.0-rc4-xe/kernel/arch/
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/kernel/
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/kernel/msr.ko
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/kernel/cpuid.ko
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/crypto/
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/crypto/sha512-ssse3.ko
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/crypto/crct10dif-pclmul.ko
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/crypto/ghash-clmulni-intel.ko
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/crypto/sha1-ssse3.ko
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/crypto/crc32-pclmul.ko
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/crypto/sha256-ssse3.ko
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/crypto/aesni-intel.ko
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/crypto/polyval-clmulni.ko
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/events/
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/events/intel/
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/events/intel/intel-cstate.ko
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/events/rapl.ko
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/kvm/
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/kvm/kvm.ko
lib/modules/6.10.0-rc4-xe/kernel/arch/x86/kvm/kvm-intel.ko
lib/modules/6.10.0-rc4-xe/kernel/crypto/
lib/modules/6.10.0-rc4-xe/kernel/crypto/crypto_simd.ko
lib/modules/6.10.0-rc4-xe/kernel/crypto/cmac.ko
lib/modules/6.10.0-rc4-xe/kernel/crypto/ccm.ko
lib/modules/6.10.0-rc4-xe/kernel/crypto/cryptd.ko
lib/modules/6.10.0-rc4-xe/kernel/crypto/polyval-generic.ko
lib/modules/6.10.0-rc4-xe/kernel/crypto/async_tx/
lib/modules/6.10.0-rc4-xe/kernel/crypto/async_tx/async_xor.ko
lib/modules/6.10.0-rc4-xe/kernel/crypto/async_tx/async_tx.ko
lib/modules/6.10.0-rc4-xe/kernel/crypto/async_tx/async_memcpy.ko
lib/modules/6.10.0-rc4-xe/kernel/crypto/async_tx/async_pq.ko
lib/modules/6.10.0-rc4-xe/kernel/crypto/async_tx/async_raid6_recov.ko
lib/modules/6.10.0-rc4-xe/build
lib/modules/6.10.0-rc4-xe/modules.alias.bin
lib/modules/6.10.0-rc4-xe/modules.builtin
lib/modules/6.10.0-rc4-xe/modules.softdep
lib/modules/6.10.0-rc4-xe/modules.alias
lib/modules/6.10.0-rc4-xe/modules.order
lib/modules/6.10.0-rc4-xe/modules.symbols
lib/modules/6.10.0-rc4-xe/modules.dep.bin
+ mv kernel-nodebug.tar.gz ..
+ cd ..
+ rm -rf archive
++ date +%s
+ echo -e '\e[0Ksection_end:1718731944:package_x86_64_nodebug\r\e[0K'
+ sync
^[[0Ksection_end:1718731944:package_x86_64_nodebug
^[[0K
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 23+ messages in thread
* ✗ CI.Hooks: failure for Convert multiple bind ops to 1 job (rev4)
2024-06-18 17:15 [PATCH v4 0/7] Convert multiple bind ops to 1 job Matthew Brost
` (10 preceding siblings ...)
2024-06-18 17:32 ` ✓ CI.Build: " Patchwork
@ 2024-06-18 17:34 ` Patchwork
2024-06-18 17:35 ` ✓ CI.checksparse: success " Patchwork
` (2 subsequent siblings)
14 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-06-18 17:34 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
== Series Details ==
Series: Convert multiple bind ops to 1 job (rev4)
URL : https://patchwork.freedesktop.org/series/133034/
State : failure
== Summary ==
run-parts: executing /workspace/ci/hooks/00-showenv
+ export
+ grep -Ei '(^|\W)CI_'
declare -x CI_KERNEL_BUILD_DIR="/workspace/kernel/build64-default"
declare -x CI_KERNEL_SRC_DIR="/workspace/kernel"
declare -x CI_TOOLS_SRC_DIR="/workspace/ci"
declare -x CI_WORKSPACE_DIR="/workspace"
run-parts: executing /workspace/ci/hooks/10-build-W1
+ SRC_DIR=/workspace/kernel
+ RESTORE_DISPLAY_CONFIG=0
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ cd /workspace/kernel
++ nproc
+ make -j48 O=/workspace/kernel/build64-default modules_prepare
make[1]: Entering directory '/workspace/kernel/build64-default'
GEN Makefile
UPD include/generated/compile.h
UPD include/config/kernel.release
mkdir -p /workspace/kernel/build64-default/tools/objtool && make O=/workspace/kernel/build64-default subdir=tools/objtool --no-print-directory -C objtool
UPD include/generated/utsrelease.h
HOSTCC /workspace/kernel/build64-default/tools/objtool/fixdep.o
CALL ../scripts/checksyscalls.sh
HOSTLD /workspace/kernel/build64-default/tools/objtool/fixdep-in.o
LINK /workspace/kernel/build64-default/tools/objtool/fixdep
INSTALL libsubcmd_headers
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/exec-cmd.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/help.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/pager.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/parse-options.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/run-command.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/sigchain.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/subcmd-config.o
LD /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd-in.o
AR /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd.a
CC /workspace/kernel/build64-default/tools/objtool/weak.o
CC /workspace/kernel/build64-default/tools/objtool/check.o
CC /workspace/kernel/build64-default/tools/objtool/special.o
CC /workspace/kernel/build64-default/tools/objtool/builtin-check.o
CC /workspace/kernel/build64-default/tools/objtool/elf.o
CC /workspace/kernel/build64-default/tools/objtool/objtool.o
CC /workspace/kernel/build64-default/tools/objtool/orc_gen.o
CC /workspace/kernel/build64-default/tools/objtool/orc_dump.o
CC /workspace/kernel/build64-default/tools/objtool/libstring.o
CC /workspace/kernel/build64-default/tools/objtool/libctype.o
CC /workspace/kernel/build64-default/tools/objtool/str_error_r.o
CC /workspace/kernel/build64-default/tools/objtool/librbtree.o
CC /workspace/kernel/build64-default/tools/objtool/arch/x86/special.o
CC /workspace/kernel/build64-default/tools/objtool/arch/x86/decode.o
CC /workspace/kernel/build64-default/tools/objtool/arch/x86/orc.o
LD /workspace/kernel/build64-default/tools/objtool/arch/x86/objtool-in.o
LD /workspace/kernel/build64-default/tools/objtool/objtool-in.o
LINK /workspace/kernel/build64-default/tools/objtool/objtool
make[1]: Leaving directory '/workspace/kernel/build64-default'
++ nproc
+ make -j48 O=/workspace/kernel/build64-default W=1 drivers/gpu/drm/xe
make[1]: Entering directory '/workspace/kernel/build64-default'
make[2]: Nothing to be done for 'drivers/gpu/drm/xe'.
make[1]: Leaving directory '/workspace/kernel/build64-default'
run-parts: executing /workspace/ci/hooks/11-build-32b
+++ realpath /workspace/ci/hooks/11-build-32b
++ dirname /workspace/ci/hooks/11-build-32b
+ THIS_SCRIPT_DIR=/workspace/ci/hooks
+ SRC_DIR=/workspace/kernel
+ TOOLS_SRC_DIR=/workspace/ci
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ BUILD_DIR=/workspace/kernel/build64-default/build32
+ cd /workspace/kernel
+ mkdir -p /workspace/kernel/build64-default/build32
++ nproc
+ make -j48 ARCH=i386 O=/workspace/kernel/build64-default/build32 defconfig
make[1]: Entering directory '/workspace/kernel/build64-default/build32'
GEN Makefile
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
YACC scripts/kconfig/parser.tab.[ch]
HOSTCC scripts/kconfig/menu.o
HOSTCC scripts/kconfig/symbol.o
HOSTCC scripts/kconfig/preprocess.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
WRAP arch/x86/include/generated/uapi/asm/errno.h
UPD include/generated/uapi/linux/version.h
WRAP arch/x86/include/generated/uapi/asm/fcntl.h
WRAP arch/x86/include/generated/uapi/asm/ioctl.h
WRAP arch/x86/include/generated/uapi/asm/ioctls.h
WRAP arch/x86/include/generated/uapi/asm/ipcbuf.h
WRAP arch/x86/include/generated/uapi/asm/param.h
WRAP arch/x86/include/generated/uapi/asm/poll.h
WRAP arch/x86/include/generated/uapi/asm/resource.h
WRAP arch/x86/include/generated/uapi/asm/socket.h
WRAP arch/x86/include/generated/uapi/asm/sockios.h
WRAP arch/x86/include/generated/uapi/asm/termbits.h
WRAP arch/x86/include/generated/uapi/asm/termios.h
WRAP arch/x86/include/generated/uapi/asm/types.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_32.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
WRAP arch/x86/include/generated/asm/early_ioremap.h
WRAP arch/x86/include/generated/asm/mcs_spinlock.h
WRAP arch/x86/include/generated/asm/kmap_size.h
HOSTCC arch/x86/tools/relocs_32.o
WRAP arch/x86/include/generated/asm/irq_regs.h
WRAP arch/x86/include/generated/asm/mmiowb.h
WRAP arch/x86/include/generated/asm/local64.h
HOSTCC arch/x86/tools/relocs_64.o
WRAP arch/x86/include/generated/asm/module.lds.h
WRAP arch/x86/include/generated/asm/rwonce.h
HOSTCC arch/x86/tools/relocs_common.o
WRAP arch/x86/include/generated/asm/unaligned.h
HOSTCC scripts/kallsyms
HOSTCC scripts/sorttable
HOSTCC scripts/asn1_compiler
HOSTCC scripts/selinux/mdp/mdp
HOSTCC scripts/selinux/genheaders/genheaders
HOSTLD arch/x86/tools/relocs
UPD include/config/kernel.release
UPD include/generated/utsrelease.h
CC scripts/mod/empty.o
HOSTCC scripts/mod/mk_elfconfig
CC scripts/mod/devicetable-offsets.s
UPD scripts/mod/devicetable-offsets.h
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/modpost.o
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/sumversion.o
HOSTCC scripts/mod/symsearch.o
HOSTLD scripts/mod/modpost
CC kernel/bounds.s
CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-arch-fallback.h
CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-instrumented.h
CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-long.h
UPD include/generated/timeconst.h
UPD include/generated/bounds.h
CC arch/x86/kernel/asm-offsets.s
UPD include/generated/asm-offsets.h
CALL /workspace/kernel/scripts/checksyscalls.sh
LDS scripts/module.lds
HOSTCC usr/gen_init_cpio
CC security/commoncap.o
CC security/min_addr.o
CC security/lsm_syscalls.o
CC certs/system_keyring.o
CC security/security.o
CC init/main.o
CC security/lsm_audit.o
CC ipc/util.o
CC io_uring/io_uring.o
CC security/device_cgroup.o
GEN security/selinux/flask.h security/selinux/av_permissions.h
AS arch/x86/lib/atomic64_cx8_32.o
UPD init/utsversion-tmp.h
CC io_uring/opdef.o
AS arch/x86/lib/checksum_32.o
CC ipc/msgutil.o
CC mm/filemap.o
CC init/do_mounts.o
CC arch/x86/power/cpu.o
CC arch/x86/lib/cmdline.o
CC io_uring/kbuf.o
CC arch/x86/pci/i386.o
CC arch/x86/video/video-common.o
CC security/selinux/avc.o
CC security/integrity/iint.o
CC security/keys/gc.o
CC net/ethernet/eth.o
CC block/partitions/core.o
AR sound/arm/built-in.a
CC net/core/sock.o
AR drivers/cache/built-in.a
AR sound/sh/built-in.a
AR sound/ppc/built-in.a
AR sound/isa/ad1816a/built-in.a
CC arch/x86/realmode/init.o
AR sound/drivers/opl3/built-in.a
AR virt/lib/built-in.a
AR sound/i2c/other/built-in.a
CC arch/x86/events/amd/core.o
CC fs/notify/inotify/inotify_fsnotify.o
AR sound/pci/ac97/built-in.a
CC init/do_mounts_initrd.o
CC lib/math/div64.o
CC mm/mempool.o
CC fs/notify/dnotify/dnotify.o
CC sound/core/seq/seq.o
AR sound/i2c/built-in.a
CC arch/x86/mm/pat/set_memory.o
AR virt/built-in.a
CC arch/x86/kernel/fpu/init.o
AR sound/isa/ad1848/built-in.a
CC sound/core/seq/seq_lock.o
CC fs/nfs_common/nfsacl.o
AR drivers/irqchip/built-in.a
AR sound/pci/ali5451/built-in.a
AR sound/drivers/opl4/built-in.a
AR arch/x86/crypto/built-in.a
AR sound/isa/cs423x/built-in.a
AR sound/pci/asihpi/built-in.a
CC kernel/locking/mutex.o
AR arch/x86/entry/vsyscall/built-in.a
AR sound/pci/au88x0/built-in.a
AR sound/drivers/mpu401/built-in.a
CC arch/x86/entry/vdso/vma.o
CC kernel/sched/core.o
AR drivers/bus/mhi/built-in.a
AR sound/isa/es1688/built-in.a
AR sound/isa/gus/built-in.a
AR sound/isa/galaxy/built-in.a
AR drivers/bus/built-in.a
AR sound/pci/aw2/built-in.a
AR sound/drivers/vx/built-in.a
CC arch/x86/mm/pat/memtype.o
CC arch/x86/mm/init.o
AR sound/pci/ctxfi/built-in.a
AR sound/drivers/pcsp/built-in.a
AR drivers/pwm/built-in.a
AR sound/isa/msnd/built-in.a
CC crypto/asymmetric_keys/asymmetric_type.o
AR sound/drivers/built-in.a
AS arch/x86/lib/cmpxchg8b_emu.o
AR sound/pci/ca0106/built-in.a
AR sound/isa/opti9xx/built-in.a
CC drivers/pci/msi/pcidev_msi.o
AR sound/pci/cs46xx/built-in.a
AR sound/pci/cs5535audio/built-in.a
AR sound/isa/sb/built-in.a
CC arch/x86/lib/cpu.o
CC sound/core/sound.o
CC lib/math/gcd.o
AR sound/pci/lola/built-in.a
AR sound/isa/wavefront/built-in.a
AR sound/pci/lx6464es/built-in.a
AR sound/isa/wss/built-in.a
AR sound/pci/echoaudio/built-in.a
AR sound/isa/built-in.a
AR sound/pci/emu10k1/built-in.a
AR sound/pci/hda/built-in.a
CC [M] sound/pci/hda/hda_bind.o
CC lib/math/lcm.o
CC drivers/video/console/dummycon.o
CC lib/math/int_log.o
GEN usr/initramfs_data.cpio
COPY usr/initramfs_inc_data
AS usr/initramfs_data.o
CC arch/x86/kernel/fpu/bugs.o
HOSTCC certs/extract-cert
AR usr/built-in.a
CC drivers/video/console/vgacon.o
CC lib/math/int_pow.o
CC [M] sound/pci/hda/hda_codec.o
CC lib/math/int_sqrt.o
CC arch/x86/kernel/fpu/core.o
CC fs/notify/inotify/inotify_user.o
CC lib/math/reciprocal_div.o
CC arch/x86/lib/delay.o
CC sound/core/seq/seq_clientmgr.o
AS arch/x86/realmode/rm/header.o
AR arch/x86/video/built-in.a
AS arch/x86/realmode/rm/trampoline_32.o
CC lib/math/rational.o
AR arch/x86/platform/atom/built-in.a
CERT certs/x509_certificate_list
AR arch/x86/platform/ce4100/built-in.a
CERT certs/signing_key.x509
CC security/keys/key.o
AS arch/x86/realmode/rm/stack.o
AS certs/system_certificates.o
CC arch/x86/platform/efi/memmap.o
CC ipc/msg.o
CC security/integrity/integrity_audit.o
AS arch/x86/realmode/rm/reboot.o
AR certs/built-in.a
CC arch/x86/pci/init.o
CC sound/core/seq/seq_memory.o
AS arch/x86/realmode/rm/wakeup_asm.o
CC fs/nfs_common/grace.o
CC arch/x86/events/intel/core.o
CC arch/x86/realmode/rm/wakemain.o
CC arch/x86/realmode/rm/video-mode.o
CC drivers/pci/msi/api.o
AS arch/x86/realmode/rm/copy.o
AR arch/x86/platform/geode/built-in.a
CC arch/x86/power/hibernate_32.o
CC sound/core/init.o
CC crypto/asymmetric_keys/restrict.o
CC crypto/asymmetric_keys/signature.o
CC arch/x86/kernel/fpu/regset.o
CC arch/x86/entry/vdso/extable.o
AS arch/x86/lib/getuser.o
AR fs/notify/dnotify/built-in.a
CC arch/x86/kernel/fpu/signal.o
AS arch/x86/power/hibernate_asm_32.o
GEN arch/x86/lib/inat-tables.c
AS arch/x86/realmode/rm/bioscall.o
CC arch/x86/realmode/rm/regs.o
AR sound/synth/emux/built-in.a
AR sound/synth/built-in.a
CC kernel/locking/semaphore.o
LDS arch/x86/entry/vdso/vdso32/vdso32.lds
AR drivers/idle/built-in.a
CC drivers/pci/msi/msi.o
CC block/partitions/msdos.o
CC io_uring/rsrc.o
CC arch/x86/lib/insn-eval.o
CC arch/x86/realmode/rm/video-vga.o
CC ipc/sem.o
AR sound/usb/misc/built-in.a
AR sound/usb/usx2y/built-in.a
AR lib/math/built-in.a
AR sound/usb/caiaq/built-in.a
CC lib/crypto/mpi/generic_mpih-lshift.o
AR sound/usb/6fire/built-in.a
AR sound/firewire/built-in.a
CC lib/crypto/mpi/generic_mpih-mul1.o
CC lib/crypto/mpi/generic_mpih-mul2.o
AR sound/usb/hiface/built-in.a
CC arch/x86/realmode/rm/video-vesa.o
AR sound/usb/bcd2000/built-in.a
CC [M] sound/pci/hda/hda_jack.o
AR sound/usb/built-in.a
CC arch/x86/events/amd/lbr.o
CC lib/crypto/memneq.o
CC arch/x86/realmode/rm/video-bios.o
AR arch/x86/platform/iris/built-in.a
CC io_uring/notif.o
CC lib/crypto/mpi/generic_mpih-mul3.o
CC kernel/locking/rwsem.o
PASYMS arch/x86/realmode/rm/pasyms.h
LDS arch/x86/realmode/rm/realmode.lds
AR sound/pci/ice1712/built-in.a
CC arch/x86/mm/init_32.o
LD arch/x86/realmode/rm/realmode.elf
RELOCS arch/x86/realmode/rm/realmode.relocs
OBJCOPY arch/x86/realmode/rm/realmode.bin
CC lib/zlib_inflate/inffast.o
AS arch/x86/realmode/rmpiggy.o
CC crypto/asymmetric_keys/public_key.o
CC lib/zlib_deflate/deflate.o
AR arch/x86/realmode/built-in.a
CC io_uring/tctx.o
CC arch/x86/mm/pat/memtype_interval.o
AR net/ethernet/built-in.a
CC arch/x86/pci/pcbios.o
AS arch/x86/entry/vdso/vdso32/note.o
AR drivers/video/console/built-in.a
AR security/integrity/built-in.a
CC drivers/video/backlight/backlight.o
AS arch/x86/entry/vdso/vdso32/system_call.o
CC block/partitions/efi.o
AR fs/nfs_common/built-in.a
CC arch/x86/platform/efi/quirks.o
CC fs/iomap/trace.o
CC arch/x86/platform/efi/efi.o
AR drivers/video/fbdev/core/built-in.a
AR fs/notify/inotify/built-in.a
CC init/initramfs.o
CC lib/zlib_inflate/inflate.o
CC arch/x86/power/hibernate.o
AR drivers/video/fbdev/omap/built-in.a
AR fs/notify/fanotify/built-in.a
CC fs/notify/fsnotify.o
CC fs/iomap/iter.o
AR drivers/video/fbdev/omap2/omapfb/dss/built-in.a
AR drivers/video/fbdev/omap2/omapfb/displays/built-in.a
AR drivers/video/fbdev/omap2/omapfb/built-in.a
CC fs/iomap/buffered-io.o
AR drivers/video/fbdev/omap2/built-in.a
AR drivers/video/fbdev/built-in.a
CC security/selinux/hooks.o
CC lib/zlib_inflate/infutil.o
AS arch/x86/entry/vdso/vdso32/sigreturn.o
CC init/calibrate.o
CC fs/iomap/direct-io.o
CC arch/x86/events/zhaoxin/core.o
CC arch/x86/entry/vdso/vdso32/vclock_gettime.o
CC arch/x86/events/core.o
CC security/keys/keyring.o
CC drivers/pci/msi/irqdomain.o
AR net/802/built-in.a
AR arch/x86/net/built-in.a
CC sound/core/memory.o
AR arch/x86/virt/svm/built-in.a
CC lib/crypto/mpi/generic_mpih-rshift.o
AR arch/x86/virt/vmx/built-in.a
AR arch/x86/virt/built-in.a
CC arch/x86/lib/insn.o
CC sound/core/control.o
CC arch/x86/kernel/fpu/xstate.o
CC net/sched/sch_generic.o
CC sound/core/seq/seq_queue.o
CC sound/core/seq/seq_fifo.o
CC fs/notify/notification.o
AR drivers/char/ipmi/built-in.a
CC sound/core/seq/seq_prioq.o
CC fs/quota/dquot.o
ASN.1 crypto/asymmetric_keys/x509.asn1.[ch]
CC arch/x86/events/amd/ibs.o
ASN.1 crypto/asymmetric_keys/x509_akid.asn1.[ch]
CC crypto/asymmetric_keys/x509_loader.o
CC kernel/locking/percpu-rwsem.o
AR arch/x86/mm/pat/built-in.a
CC fs/quota/quota_v2.o
CC sound/core/seq/seq_timer.o
CC arch/x86/pci/mmconfig_32.o
CC lib/zlib_inflate/inftrees.o
CC arch/x86/lib/kaslr.o
AR arch/x86/power/built-in.a
CC mm/oom_kill.o
CC lib/zlib_deflate/deftree.o
CC arch/x86/mm/fault.o
CC crypto/asymmetric_keys/x509_public_key.o
CC lib/zlib_inflate/inflate_syms.o
AR drivers/video/backlight/built-in.a
CC drivers/video/aperture.o
CC lib/crypto/mpi/generic_mpih-sub1.o
CC fs/iomap/fiemap.o
CC fs/notify/group.o
CC arch/x86/mm/ioremap.o
CC arch/x86/entry/vdso/vdso32/vgetcpu.o
CC sound/core/seq/seq_system.o
CC arch/x86/lib/memcpy_32.o
CC drivers/pnp/pnpacpi/core.o
CC drivers/pnp/core.o
CC drivers/acpi/acpica/dsargs.o
AR block/partitions/built-in.a
HOSTCC arch/x86/entry/vdso/vdso2c
AS arch/x86/lib/memmove_32.o
CC block/bdev.o
CC arch/x86/lib/misc.o
CC [M] sound/pci/hda/hda_auto_parser.o
CC arch/x86/platform/efi/efi_32.o
CC arch/x86/lib/pc-conf-reg.o
CC drivers/acpi/acpica/dscontrol.o
CC init/init_task.o
AR arch/x86/events/zhaoxin/built-in.a
CC io_uring/filetable.o
CC [M] sound/pci/hda/hda_sysfs.o
AR drivers/pci/msi/built-in.a
CC drivers/pci/pcie/portdrv.o
CC init/version.o
AR drivers/acpi/pmic/built-in.a
AR lib/zlib_inflate/built-in.a
CC arch/x86/entry/vdso/vdso32-setup.o
AS arch/x86/lib/putuser.o
CC arch/x86/events/intel/bts.o
CC ipc/shm.o
AS arch/x86/lib/retpoline.o
CC kernel/locking/spinlock.o
CC arch/x86/events/intel/ds.o
CC arch/x86/lib/string_32.o
CC block/fops.o
ASN.1 crypto/asymmetric_keys/pkcs7.asn1.[ch]
CC crypto/asymmetric_keys/pkcs7_trust.o
CC lib/zlib_deflate/deflate_syms.o
CC arch/x86/pci/direct.o
CC arch/x86/lib/strstr_32.o
CC fs/iomap/seek.o
CC net/sched/sch_mq.o
CC crypto/asymmetric_keys/pkcs7_verify.o
CC fs/quota/quota_tree.o
CC arch/x86/lib/usercopy.o
CC sound/core/seq/seq_ports.o
CC net/sched/sch_frag.o
CC security/keys/keyctl.o
CC lib/crypto/mpi/generic_mpih-add1.o
VDSO arch/x86/entry/vdso/vdso32.so.dbg
CC drivers/acpi/acpica/dsdebug.o
OBJCOPY arch/x86/entry/vdso/vdso32.so
CC security/keys/permission.o
VDSO2C arch/x86/entry/vdso/vdso-image-32.c
CC arch/x86/entry/vdso/vdso-image-32.o
CC drivers/pnp/pnpacpi/rsparser.o
CC net/core/request_sock.o
AR arch/x86/kernel/fpu/built-in.a
CC fs/notify/mark.o
CC net/core/skbuff.o
CC kernel/locking/osq_lock.o
CC lib/lzo/lzo1x_compress.o
CC arch/x86/kernel/cpu/mce/core.o
CC lib/lzo/lzo1x_decompress_safe.o
CC drivers/video/cmdline.o
AR lib/zlib_deflate/built-in.a
CC arch/x86/kernel/cpu/mce/severity.o
CC arch/x86/events/intel/knc.o
CC arch/x86/lib/usercopy_32.o
CC arch/x86/events/amd/uncore.o
AR sound/sparc/built-in.a
AS arch/x86/entry/entry.o
CC security/keys/process_keys.o
AR arch/x86/entry/vdso/built-in.a
CC crypto/asymmetric_keys/x509.asn1.o
AS arch/x86/platform/efi/efi_stub_32.o
AS arch/x86/entry/entry_32.o
AR init/built-in.a
CC arch/x86/platform/efi/runtime-map.o
CC lib/crypto/utils.o
CC block/bio.o
CC crypto/asymmetric_keys/x509_akid.asn1.o
CC drivers/acpi/acpica/dsfield.o
CC arch/x86/entry/syscall_32.o
CC lib/crypto/chacha.o
CC crypto/asymmetric_keys/x509_cert_parser.o
CC kernel/locking/qspinlock.o
CC drivers/pci/pcie/rcec.o
CC io_uring/rw.o
CC arch/x86/lib/msr-smp.o
CC lib/crypto/mpi/ec.o
CC arch/x86/pci/mmconfig-shared.o
CC [M] sound/pci/hda/hda_controller.o
CC arch/x86/mm/extable.o
CC arch/x86/mm/mmap.o
CC fs/iomap/swapfile.o
CC arch/x86/platform/intel/iosf_mbi.o
AR arch/x86/platform/intel-mid/built-in.a
CC arch/x86/events/probe.o
AR arch/x86/platform/intel-quark/built-in.a
CC arch/x86/events/intel/lbr.o
AR lib/lzo/built-in.a
CC security/selinux/selinuxfs.o
AR sound/pci/korg1212/built-in.a
CC security/selinux/netlink.o
CC net/sched/sch_api.o
CC mm/fadvise.o
CC sound/core/seq/seq_info.o
CC fs/quota/quota.o
CC kernel/sched/fair.o
CC lib/lz4/lz4_decompress.o
CC mm/maccess.o
CC arch/x86/lib/cache-smp.o
CC drivers/acpi/acpica/dsinit.o
CC security/keys/request_key.o
CC kernel/locking/rtmutex_api.o
CC drivers/video/nomodeset.o
CC lib/zstd/zstd_decompress_module.o
CC lib/xz/xz_dec_syms.o
CC crypto/asymmetric_keys/pkcs7.asn1.o
CC crypto/asymmetric_keys/pkcs7_parser.o
AR drivers/pnp/pnpacpi/built-in.a
CC lib/zstd/decompress/huf_decompress.o
CC drivers/pnp/card.o
CC arch/x86/lib/msr.o
AS arch/x86/lib/msr-reg.o
CC ipc/syscall.o
CC arch/x86/lib/msr-reg-export.o
CC arch/x86/mm/pgtable.o
CC block/elevator.o
CC arch/x86/mm/physaddr.o
AR arch/x86/platform/efi/built-in.a
CC fs/notify/fdinfo.o
CC arch/x86/mm/tlb.o
CC arch/x86/kernel/acpi/boot.o
CC arch/x86/kernel/apic/apic.o
CC lib/dim/dim.o
CC drivers/pci/pcie/aspm.o
CC lib/dim/net_dim.o
CC lib/dim/rdma_dim.o
CC drivers/acpi/acpica/dsmethod.o
CC drivers/video/hdmi.o
CC sound/core/seq/seq_dummy.o
CC lib/xz/xz_dec_stream.o
AR arch/x86/events/amd/built-in.a
CC arch/x86/kernel/apic/apic_common.o
CC kernel/power/qos.o
CC security/keys/request_key_auth.o
AR arch/x86/platform/intel/built-in.a
AR arch/x86/platform/olpc/built-in.a
AR fs/iomap/built-in.a
CC kernel/power/main.o
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 lib/xz/xz_dec_lzma2.o
CC fs/quota/kqid.o
CC arch/x86/events/utils.o
CC security/selinux/nlmsgtab.o
CC arch/x86/pci/fixup.o
AR crypto/asymmetric_keys/built-in.a
CC fs/quota/netlink.o
CC crypto/api.o
CC security/keys/user_defined.o
CC mm/page-writeback.o
CC arch/x86/entry/common.o
CC lib/crypto/mpi/mpicoder.o
CC security/keys/proc.o
AR lib/dim/built-in.a
CC security/keys/sysctl.o
CC kernel/power/console.o
CC drivers/acpi/acpica/dsmthdat.o
CC drivers/pnp/driver.o
AR fs/notify/built-in.a
CC ipc/ipc_sysctl.o
CC mm/folio-compat.o
CC security/keys/keyctl_pkey.o
CC mm/readahead.o
CC arch/x86/kernel/cpu/mce/genpool.o
CC kernel/sched/build_policy.o
AR sound/core/seq/built-in.a
CC sound/core/misc.o
CC io_uring/net.o
CC kernel/locking/qrwlock.o
AS arch/x86/lib/hweight.o
CC net/core/datagram.o
CC arch/x86/lib/iomem.o
CC [M] sound/pci/hda/hda_proc.o
CC arch/x86/events/intel/p4.o
AR sound/pci/mixart/built-in.a
CC arch/x86/kernel/apic/apic_noop.o
AR lib/lz4/built-in.a
AR sound/pci/nm256/built-in.a
CC lib/fonts/fonts.o
CC arch/x86/kernel/kprobes/core.o
AR sound/pci/oxygen/built-in.a
CC arch/x86/kernel/kprobes/opt.o
AR drivers/video/built-in.a
CC lib/fonts/font_8x16.o
CC arch/x86/mm/cpu_entry_area.o
CC drivers/acpi/acpica/dsobject.o
CC net/core/stream.o
CC lib/xz/xz_dec_bcj.o
CC arch/x86/mm/maccess.o
CC arch/x86/kernel/acpi/sleep.o
CC arch/x86/events/intel/p6.o
CC fs/proc/task_mmu.o
CC ipc/mqueue.o
CC security/selinux/netif.o
CC drivers/pnp/resource.o
CC security/selinux/netnode.o
CC arch/x86/lib/atomic64_32.o
CC lib/zstd/decompress/zstd_ddict.o
CC block/blk-core.o
AR fs/quota/built-in.a
CC drivers/pnp/manager.o
AR kernel/locking/built-in.a
CC crypto/cipher.o
CC fs/kernfs/mount.o
CC crypto/compress.o
CC drivers/pci/pcie/pme.o
CC lib/crypto/mpi/mpi-add.o
AR security/keys/built-in.a
CC arch/x86/lib/inat.o
CC ipc/namespace.o
CC ipc/mq_sysctl.o
CC arch/x86/mm/pgprot.o
AR arch/x86/lib/built-in.a
CC block/blk-sysfs.o
AS arch/x86/entry/thunk.o
CC block/blk-flush.o
CC arch/x86/pci/acpi.o
CC arch/x86/kernel/cpu/mce/intel.o
CC arch/x86/pci/legacy.o
CC lib/zstd/decompress/zstd_decompress.o
CC io_uring/poll.o
CC arch/x86/kernel/apic/ipi.o
AR lib/fonts/built-in.a
AR arch/x86/entry/built-in.a
CC lib/zstd/decompress/zstd_decompress_block.o
CC io_uring/uring_cmd.o
CC arch/x86/mm/pgtable_32.o
CC kernel/power/process.o
CC sound/core/device.o
AR arch/x86/lib/lib.a
CC lib/zstd/zstd_common_module.o
CC drivers/acpi/acpica/dsopcode.o
AR lib/xz/built-in.a
CC lib/crypto/mpi/mpi-bit.o
CC net/sched/sch_blackhole.o
CC arch/x86/mm/iomap_32.o
CC fs/proc/inode.o
CC mm/swap.o
CC kernel/power/suspend.o
CC fs/sysfs/file.o
CC drivers/pnp/support.o
CC drivers/pnp/interface.o
CC fs/sysfs/dir.o
AS arch/x86/kernel/acpi/wakeup_32.o
CC lib/crypto/mpi/mpi-cmp.o
CC fs/sysfs/symlink.o
CC fs/sysfs/mount.o
AR arch/x86/kernel/kprobes/built-in.a
LDS arch/x86/kernel/vmlinux.lds
CC arch/x86/kernel/acpi/cstate.o
CC crypto/algapi.o
CC fs/sysfs/group.o
CC arch/x86/events/intel/pt.o
CC drivers/pnp/quirks.o
CC arch/x86/kernel/apic/vector.o
CC arch/x86/kernel/cpu/mce/amd.o
CC drivers/acpi/acpica/dspkginit.o
CC sound/core/info.o
CC [M] sound/pci/hda/hda_hwdep.o
CC lib/crypto/mpi/mpi-sub-ui.o
AR drivers/pci/pcie/built-in.a
CC drivers/pci/hotplug/pci_hotplug_core.o
CC lib/crypto/mpi/mpi-div.o
CC fs/kernfs/inode.o
CC arch/x86/pci/irq.o
CC arch/x86/pci/common.o
CC fs/kernfs/dir.o
CC arch/x86/mm/hugetlbpage.o
CC mm/truncate.o
CC block/blk-settings.o
CC drivers/pnp/system.o
CC net/core/scm.o
CC security/selinux/netport.o
CC arch/x86/pci/early.o
CC block/blk-ioc.o
CC mm/vmscan.o
CC drivers/acpi/acpica/dsutils.o
CC security/selinux/status.o
CC lib/crypto/mpi/mpi-inv.o
CC arch/x86/kernel/apic/init.o
AR arch/x86/kernel/acpi/built-in.a
CC sound/core/isadma.o
CC drivers/pci/hotplug/acpi_pcihp.o
CC block/blk-map.o
CC net/sched/cls_api.o
CC arch/x86/mm/dump_pagetables.o
CC [M] sound/pci/hda/patch_hdmi.o
CC mm/shrinker.o
CC [M] sound/pci/hda/hda_eld.o
AR fs/sysfs/built-in.a
CC arch/x86/kernel/cpu/mtrr/mtrr.o
CC mm/shmem.o
CC arch/x86/kernel/cpu/mtrr/if.o
CC mm/util.o
AR ipc/built-in.a
CC fs/devpts/inode.o
CC kernel/sched/build_utility.o
AR drivers/pnp/built-in.a
CC fs/netfs/buffered_read.o
CC [M] sound/pci/hda/hda_intel.o
CC fs/ext4/balloc.o
CC fs/ext4/bitmap.o
CC fs/proc/root.o
LD [M] sound/pci/hda/snd-hda-codec.o
CC drivers/acpi/acpica/dswexec.o
CC lib/crypto/aes.o
AS arch/x86/kernel/head_32.o
CC arch/x86/kernel/apic/hw_nmi.o
CC arch/x86/mm/highmem_32.o
CC sound/core/vmaster.o
CC fs/jbd2/transaction.o
CC fs/ramfs/inode.o
CC fs/hugetlbfs/inode.o
CC kernel/power/hibernate.o
CC lib/crypto/mpi/mpi-mod.o
CC io_uring/openclose.o
CC crypto/scatterwalk.o
CC arch/x86/events/intel/uncore.o
CC fs/jbd2/commit.o
CC mm/mmzone.o
AR drivers/pci/hotplug/built-in.a
AR drivers/pci/controller/dwc/built-in.a
CC fs/kernfs/file.o
CC fs/kernfs/symlink.o
AR drivers/pci/controller/mobiveil/built-in.a
AR drivers/pci/controller/built-in.a
CC arch/x86/pci/bus_numa.o
AR drivers/pci/switch/built-in.a
CC drivers/pci/access.o
CC net/netlink/af_netlink.o
CC drivers/pci/bus.o
CC drivers/acpi/acpica/dswload.o
CC net/netlink/genetlink.o
CC arch/x86/kernel/head32.o
CC lib/zstd/common/debug.o
CC arch/x86/kernel/cpu/mtrr/generic.o
CC lib/zstd/common/entropy_common.o
CC net/core/gen_stats.o
CC kernel/power/snapshot.o
CC drivers/acpi/acpica/dswload2.o
AR fs/devpts/built-in.a
CC drivers/acpi/acpica/dswscope.o
CC arch/x86/pci/amd_bus.o
CC block/blk-merge.o
CC arch/x86/kernel/cpu/mce/threshold.o
CC sound/core/ctljack.o
CC arch/x86/kernel/apic/io_apic.o
CC security/selinux/ss/ebitmap.o
CC lib/crypto/arc4.o
CC drivers/acpi/acpica/dswstate.o
CC drivers/acpi/acpica/evevent.o
AR arch/x86/mm/built-in.a
CC lib/zstd/common/error_private.o
CC sound/core/jack.o
AR sound/pci/pcxhr/built-in.a
CC sound/core/timer.o
CC lib/zstd/common/fse_decompress.o
CC fs/proc/base.o
CC lib/crypto/mpi/mpi-mul.o
CC fs/jbd2/recovery.o
CC fs/ramfs/file-mmu.o
CC drivers/acpi/acpica/evgpe.o
CC mm/vmstat.o
CC crypto/proc.o
CC arch/x86/kernel/ebda.o
CC fs/netfs/buffered_write.o
CC net/sched/act_api.o
CC arch/x86/events/rapl.o
CC sound/core/hrtimer.o
CC arch/x86/events/msr.o
CC fs/jbd2/checkpoint.o
CC sound/core/seq_device.o
CC mm/backing-dev.o
CC arch/x86/kernel/platform-quirks.o
CC io_uring/sqpoll.o
CC crypto/aead.o
CC net/sched/sch_fifo.o
CC drivers/pci/probe.o
CC lib/zstd/common/zstd_common.o
AR fs/kernfs/built-in.a
CC fs/fat/cache.o
CC drivers/acpi/acpica/evgpeblk.o
AR lib/zstd/built-in.a
CC lib/crypto/mpi/mpih-cmp.o
CC fs/fat/dir.o
AR fs/hugetlbfs/built-in.a
CC fs/fat/fatent.o
CC crypto/geniv.o
AR arch/x86/pci/built-in.a
CC arch/x86/kernel/cpu/mtrr/cleanup.o
CC drivers/acpi/acpica/evgpeinit.o
LD [M] sound/pci/hda/snd-hda-intel.o
CC lib/crypto/mpi/mpih-div.o
AR fs/ramfs/built-in.a
CC lib/argv_split.o
LD [M] sound/pci/hda/snd-hda-codec-hdmi.o
CC mm/mm_init.o
CC lib/bug.o
CC crypto/lskcipher.o
CC lib/buildid.o
AR sound/pci/riptide/built-in.a
CC lib/clz_tab.o
CC net/core/gen_estimator.o
AR sound/pci/rme9652/built-in.a
AR sound/pci/trident/built-in.a
CC fs/isofs/namei.o
CC fs/isofs/inode.o
AR sound/pci/ymfpci/built-in.a
CC crypto/skcipher.o
AR sound/pci/vx222/built-in.a
CC crypto/seqiv.o
AR sound/pci/built-in.a
CC fs/isofs/dir.o
CC io_uring/xattr.o
AR arch/x86/kernel/cpu/mce/built-in.a
CC arch/x86/events/intel/uncore_nhmex.o
CC arch/x86/kernel/cpu/microcode/core.o
CC io_uring/nop.o
CC arch/x86/kernel/cpu/microcode/intel.o
CC drivers/acpi/acpica/evgpeutil.o
CC security/selinux/ss/hashtab.o
CC security/selinux/ss/symtab.o
CC lib/cmdline.o
CC lib/cpumask.o
CC arch/x86/kernel/cpu/cacheinfo.o
CC arch/x86/events/intel/uncore_snb.o
CC fs/ext4/block_validity.o
CC io_uring/fs.o
CC fs/jbd2/revoke.o
CC arch/x86/kernel/cpu/microcode/amd.o
AR sound/spi/built-in.a
CC fs/fat/file.o
CC fs/jbd2/journal.o
CC arch/x86/events/intel/uncore_snbep.o
CC [M] sound/core/hwdep.o
CC fs/netfs/direct_read.o
AR sound/parisc/built-in.a
CC lib/ctype.o
CC kernel/power/swap.o
AR sound/pcmcia/vx/built-in.a
CC kernel/power/user.o
CC arch/x86/kernel/cpu/mtrr/amd.o
AR sound/pcmcia/pdaudiocf/built-in.a
CC net/sched/cls_cgroup.o
CC crypto/echainiv.o
AR sound/pcmcia/built-in.a
CC lib/dec_and_lock.o
CC block/blk-timeout.o
CC lib/decompress.o
CC drivers/acpi/acpica/evglock.o
CC arch/x86/kernel/apic/msi.o
CC io_uring/splice.o
CC lib/decompress_bunzip2.o
CC fs/isofs/util.o
CC security/selinux/ss/sidtab.o
CC io_uring/sync.o
CC net/sched/ematch.o
CC drivers/pci/host-bridge.o
CC lib/crypto/mpi/mpih-mul.o
CC fs/isofs/rock.o
CC arch/x86/kernel/apic/probe_32.o
CC lib/decompress_inflate.o
CC lib/decompress_unlz4.o
CC net/core/net_namespace.o
CC mm/percpu.o
CC fs/fat/inode.o
CC fs/proc/generic.o
CC fs/isofs/export.o
CC kernel/power/poweroff.o
CC block/blk-lib.o
CC drivers/acpi/acpica/evhandler.o
CC block/blk-mq.o
CC arch/x86/kernel/cpu/mtrr/cyrix.o
CC fs/fat/misc.o
CC io_uring/msg_ring.o
CC crypto/ahash.o
CC net/netlink/policy.o
CC fs/proc/array.o
AR arch/x86/kernel/cpu/microcode/built-in.a
CC [M] sound/core/pcm.o
CC mm/slab_common.o
CC mm/compaction.o
CC fs/proc/fd.o
CC fs/ext4/dir.o
CC crypto/shash.o
CC drivers/pci/remove.o
CC mm/show_mem.o
CC drivers/acpi/acpica/evmisc.o
CC drivers/acpi/acpica/evregion.o
CC fs/ext4/ext4_jbd2.o
CC block/blk-mq-tag.o
CC block/blk-stat.o
CC arch/x86/kernel/cpu/scattered.o
CC drivers/pci/pci.o
CC crypto/akcipher.o
AR sound/mips/built-in.a
AR net/bpf/built-in.a
CC lib/decompress_unlzma.o
CC net/ethtool/ioctl.o
CC net/netfilter/core.o
AR arch/x86/kernel/apic/built-in.a
CC net/netfilter/nf_log.o
CC net/ethtool/common.o
CC fs/netfs/direct_write.o
CC net/ethtool/netlink.o
CC crypto/sig.o
CC fs/proc/proc_tty.o
CC lib/crypto/mpi/mpi-pow.o
CC lib/decompress_unlzo.o
CC kernel/printk/printk.o
CC io_uring/advise.o
CC net/netfilter/nf_queue.o
CC arch/x86/kernel/cpu/mtrr/centaur.o
CC fs/isofs/joliet.o
AR net/sched/built-in.a
CC block/blk-mq-sysfs.o
CC net/ipv4/netfilter/nf_defrag_ipv4.o
AR kernel/sched/built-in.a
CC net/ipv4/netfilter/nf_reject_ipv4.o
CC arch/x86/kernel/cpu/mtrr/legacy.o
CC drivers/acpi/acpica/evrgnini.o
CC net/ipv4/netfilter/ip_tables.o
AR kernel/power/built-in.a
CC kernel/irq/irqdesc.o
CC [M] sound/core/pcm_native.o
CC security/selinux/ss/avtab.o
CC [M] sound/core/pcm_lib.o
AR net/netlink/built-in.a
CC net/xfrm/xfrm_policy.o
CC io_uring/epoll.o
CC fs/proc/cmdline.o
CC net/xfrm/xfrm_state.o
CC io_uring/statx.o
CC lib/decompress_unxz.o
CC net/ethtool/bitset.o
CC kernel/irq/handle.o
CC net/ethtool/strset.o
CC kernel/irq/manage.o
CC kernel/irq/spurious.o
CC kernel/irq/resend.o
CC fs/fat/nfs.o
CC net/ethtool/linkinfo.o
CC drivers/acpi/acpica/evsci.o
AR arch/x86/kernel/cpu/mtrr/built-in.a
CC arch/x86/kernel/cpu/topology_common.o
CC [M] sound/core/pcm_misc.o
CC net/core/secure_seq.o
CC lib/crypto/mpi/mpiutil.o
CC fs/isofs/compress.o
CC [M] sound/core/pcm_memory.o
CC lib/decompress_unzstd.o
CC fs/netfs/io.o
CC crypto/kpp.o
CC drivers/acpi/dptf/int340x_thermal.o
CC net/netfilter/nf_sockopt.o
CC lib/dump_stack.o
CC block/blk-mq-cpumap.o
CC arch/x86/events/intel/uncore_discovery.o
CC fs/proc/consoles.o
CC drivers/acpi/acpica/evxface.o
CC kernel/irq/chip.o
CC fs/netfs/iterator.o
CC net/netfilter/utils.o
CC net/unix/af_unix.o
CC fs/netfs/locking.o
CC arch/x86/kernel/cpu/topology_ext.o
CC net/ethtool/linkmodes.o
CC lib/crypto/gf128mul.o
AR drivers/acpi/dptf/built-in.a
CC fs/fat/namei_vfat.o
CC drivers/acpi/x86/apple.o
CC fs/netfs/main.o
CC fs/nfs/client.o
CC fs/netfs/misc.o
CC arch/x86/kernel/cpu/topology_amd.o
CC net/ipv6/af_inet6.o
CC net/ipv6/netfilter/ip6_tables.o
AR lib/crypto/mpi/built-in.a
AR fs/jbd2/built-in.a
CC io_uring/timeout.o
CC net/ipv6/netfilter/ip6table_filter.o
CC net/ipv6/anycast.o
CC fs/ext4/extents.o
CC drivers/acpi/tables.o
CC security/selinux/ss/policydb.o
CC drivers/acpi/acpica/evxfevnt.o
CC security/selinux/ss/services.o
CC fs/proc/cpuinfo.o
CC kernel/irq/dummychip.o
CC kernel/irq/devres.o
AR fs/isofs/built-in.a
CC net/ipv6/ip6_output.o
CC security/selinux/ss/conditional.o
CC lib/earlycpio.o
ASN.1 crypto/rsapubkey.asn1.[ch]
ASN.1 crypto/rsaprivkey.asn1.[ch]
CC net/ethtool/rss.o
CC crypto/rsa.o
CC net/unix/garbage.o
CC net/ipv4/netfilter/iptable_filter.o
CC kernel/irq/autoprobe.o
CC arch/x86/kernel/cpu/common.o
CC fs/nfs/dir.o
CC lib/crypto/blake2s.o
CC drivers/acpi/x86/cmos_rtc.o
CC lib/crypto/blake2s-generic.o
CC security/selinux/ss/mls.o
CC block/blk-mq-sched.o
CC kernel/printk/conopt.o
CC net/core/flow_dissector.o
CC drivers/acpi/acpica/evxfgpe.o
CC arch/x86/events/intel/cstate.o
CC net/core/sysctl_net_core.o
CC net/ipv4/route.o
CC fs/exportfs/expfs.o
CC io_uring/fdinfo.o
CC kernel/irq/irqdomain.o
AR sound/soc/built-in.a
CC fs/proc/devices.o
CC net/ethtool/linkstate.o
AR sound/atmel/built-in.a
CC kernel/printk/printk_safe.o
AR sound/hda/built-in.a
CC [M] sound/hda/hda_bus_type.o
CC kernel/printk/nbcon.o
CC [M] sound/hda/hdac_bus.o
CC net/ethtool/debug.o
CC drivers/pci/pci-driver.o
CC net/netfilter/nfnetlink.o
CC [M] sound/core/memalloc.o
CC crypto/rsa_helper.o
CC lib/crypto/sha1.o
CC fs/fat/namei_msdos.o
CC drivers/acpi/acpica/evxfregn.o
CC [M] sound/core/pcm_timer.o
CC crypto/rsa-pkcs1pad.o
CC drivers/acpi/x86/lpss.o
CC net/core/dev.o
CC security/selinux/ss/context.o
CC mm/shmem_quota.o
CC arch/x86/kernel/process_32.o
CC lib/extable.o
CC net/ipv6/ip6_input.o
AR fs/exportfs/built-in.a
CC crypto/acompress.o
CC lib/crypto/sha256.o
CC net/ipv4/netfilter/iptable_mangle.o
CC kernel/printk/printk_ringbuffer.o
CC block/ioctl.o
CC kernel/printk/sysctl.o
CC mm/interval_tree.o
CC security/selinux/netlabel.o
CC fs/proc/interrupts.o
CC [M] sound/hda/hdac_device.o
CC drivers/acpi/acpica/exconcat.o
AR arch/x86/events/intel/built-in.a
AR arch/x86/events/built-in.a
CC net/core/dev_addr_lists.o
CC fs/nfs/file.o
CC net/ipv6/addrconf.o
CC arch/x86/kernel/cpu/rdrand.o
CC fs/netfs/objects.o
CC net/ipv6/netfilter/ip6table_mangle.o
CC net/unix/sysctl_net_unix.o
CC io_uring/cancel.o
CC net/ipv6/addrlabel.o
CC block/genhd.o
CC arch/x86/kernel/cpu/match.o
AR sound/x86/built-in.a
LD [M] sound/core/snd-hwdep.o
CC net/ipv6/netfilter/nf_defrag_ipv6_hooks.o
AR sound/core/built-in.a
CC net/ipv6/route.o
CC net/ethtool/wol.o
CC kernel/irq/proc.o
AR sound/xen/built-in.a
CC net/ethtool/features.o
CC drivers/acpi/x86/s2idle.o
CC net/ethtool/privflags.o
CC net/packet/af_packet.o
CC net/core/dst.o
LD [M] sound/core/snd-pcm.o
AR fs/fat/built-in.a
CC lib/flex_proportions.o
AR sound/virtio/built-in.a
CC drivers/acpi/acpica/exconfig.o
AR net/dsa/built-in.a
CC lib/idr.o
CC net/xfrm/xfrm_hash.o
CC fs/lockd/clntlock.o
CC fs/proc/loadavg.o
AR lib/crypto/built-in.a
AR kernel/printk/built-in.a
CC fs/nls/nls_base.o
CC lib/irq_regs.o
CC fs/nls/nls_cp437.o
CC net/netfilter/nfnetlink_log.o
CC crypto/scompress.o
CC sound/sound_core.o
CC net/netfilter/nf_conntrack_core.o
CC arch/x86/kernel/cpu/bugs.o
CC drivers/pci/search.o
CC net/ethtool/rings.o
CC lib/is_single_threaded.o
CC mm/list_lru.o
CC net/xfrm/xfrm_input.o
CC drivers/acpi/acpica/exconvrt.o
CC net/ipv6/netfilter/nf_conntrack_reasm.o
CC net/ipv4/netfilter/ipt_REJECT.o
CC [M] sound/hda/hdac_sysfs.o
CC fs/nls/nls_ascii.o
CC sound/last.o
CC fs/proc/meminfo.o
AR drivers/amba/built-in.a
CC net/ethtool/channels.o
CC net/xfrm/xfrm_output.o
CC kernel/irq/migration.o
CC net/xfrm/xfrm_sysctl.o
CC fs/nfs/getroot.o
AR net/unix/built-in.a
CC kernel/rcu/update.o
CC fs/nfs/inode.o
CC io_uring/waitid.o
CC fs/lockd/clntproc.o
CC net/sunrpc/auth_gss/auth_gss.o
CC lib/klist.o
CC drivers/acpi/x86/utils.o
AR security/selinux/built-in.a
CC fs/netfs/write_collect.o
AR security/built-in.a
CC net/sunrpc/clnt.o
CC [M] net/ipv4/netfilter/iptable_nat.o
CC drivers/acpi/x86/blacklist.o
CC drivers/acpi/acpica/excreate.o
CC fs/nls/nls_iso8859-1.o
CC lib/kobject.o
CC fs/nls/nls_utf8.o
CC fs/netfs/write_issue.o
CC net/ethtool/coalesce.o
CC drivers/pci/rom.o
AR net/wireless/tests/built-in.a
CC net/netfilter/nf_conntrack_standalone.o
CC net/wireless/core.o
CC block/ioprio.o
CC crypto/algboss.o
CC kernel/irq/cpuhotplug.o
CC net/wireless/sysfs.o
CC mm/workingset.o
CC mm/debug.o
CC [M] sound/hda/hdac_regmap.o
CC lib/kobject_uevent.o
CC fs/proc/stat.o
CC net/ipv4/inetpeer.o
CC fs/lockd/clntxdr.o
CC drivers/acpi/acpica/exdebug.o
AR fs/nls/built-in.a
CC fs/ext4/extents_status.o
AR drivers/clk/actions/built-in.a
AR drivers/clk/analogbits/built-in.a
CC [M] sound/hda/hdac_controller.o
AR drivers/acpi/x86/built-in.a
CC net/ipv4/protocol.o
CC net/netfilter/nf_conntrack_expect.o
AR drivers/clk/bcm/built-in.a
AR drivers/clk/imgtec/built-in.a
AR drivers/clk/imx/built-in.a
AR drivers/clk/ingenic/built-in.a
AR drivers/clk/mediatek/built-in.a
AR drivers/clk/microchip/built-in.a
AR drivers/clk/mstar/built-in.a
AR drivers/clk/mvebu/built-in.a
AR drivers/clk/ralink/built-in.a
AR drivers/clk/renesas/built-in.a
AR drivers/clk/socfpga/built-in.a
CC drivers/acpi/osi.o
AR drivers/clk/sophgo/built-in.a
AR drivers/clk/sprd/built-in.a
CC lib/logic_pio.o
AR drivers/clk/starfive/built-in.a
AR drivers/clk/sunxi-ng/built-in.a
CC drivers/pci/setup-res.o
CC net/ethtool/pause.o
AR drivers/clk/ti/built-in.a
CC drivers/pci/irq.o
AR drivers/clk/versatile/built-in.a
CC drivers/pci/vpd.o
AR drivers/clk/xilinx/built-in.a
CC arch/x86/kernel/signal.o
AR drivers/clk/built-in.a
CC drivers/acpi/acpica/exdump.o
CC drivers/pci/setup-bus.o
CC io_uring/register.o
CC net/netfilter/nf_conntrack_helper.o
CC fs/proc/uptime.o
CC kernel/irq/pm.o
CC arch/x86/kernel/cpu/aperfmperf.o
CC net/ipv6/netfilter/nf_reject_ipv6.o
CC fs/proc/util.o
CC block/badblocks.o
CC lib/maple_tree.o
CC arch/x86/kernel/signal_32.o
CC crypto/testmgr.o
AR net/ipv4/netfilter/built-in.a
CC arch/x86/kernel/traps.o
CC net/xfrm/xfrm_replay.o
CC mm/gup.o
CC fs/ext4/file.o
AR fs/unicode/built-in.a
CC net/xfrm/xfrm_device.o
CC drivers/acpi/osl.o
CC drivers/acpi/acpica/exfield.o
CC crypto/cmac.o
CC net/ipv6/netfilter/ip6t_ipv6header.o
CC net/ethtool/eee.o
CC lib/memcat_p.o
CC [M] sound/hda/hdac_stream.o
CC fs/ext4/fsmap.o
CC block/blk-rq-qos.o
AR fs/netfs/built-in.a
AR net/mac80211/tests/built-in.a
CC net/mac80211/main.o
CC lib/nmi_backtrace.o
CC net/netlabel/netlabel_user.o
CC fs/proc/version.o
CC net/rfkill/core.o
CC fs/proc/softirqs.o
CC fs/lockd/host.o
CC fs/proc/namespaces.o
CC net/ipv4/ip_input.o
CC net/rfkill/input.o
CC drivers/acpi/acpica/exfldio.o
CC block/disk-events.o
CC fs/ext4/fsync.o
CC arch/x86/kernel/cpu/cpuid-deps.o
CC kernel/irq/msi.o
CC net/ipv6/ip6_fib.o
CC crypto/hmac.o
CC fs/proc/self.o
CC net/netfilter/nf_conntrack_proto.o
CC drivers/acpi/utils.o
CC net/netlabel/netlabel_kapi.o
CC net/wireless/radiotap.o
CC net/sunrpc/auth_gss/gss_generic_token.o
CC kernel/rcu/sync.o
CC fs/proc/thread_self.o
CC arch/x86/kernel/cpu/umwait.o
AR net/packet/built-in.a
CC net/9p/mod.o
CC kernel/rcu/srcutree.o
CC drivers/acpi/acpica/exmisc.o
CC fs/proc/proc_sysctl.o
CC kernel/rcu/tree.o
CC lib/objpool.o
CC lib/plist.o
CC net/ethtool/tsinfo.o
CC net/9p/client.o
CC fs/proc/proc_net.o
CC net/core/netevent.o
CC [M] sound/hda/array.o
CC net/ipv6/ipv6_sockglue.o
CC drivers/pci/vc.o
CC net/xfrm/xfrm_algo.o
CC net/9p/error.o
CC net/netfilter/nf_conntrack_proto_generic.o
CC lib/radix-tree.o
CC crypto/crypto_null.o
CC fs/ext4/hash.o
AR net/rfkill/built-in.a
CC net/ipv6/netfilter/ip6t_REJECT.o
CC io_uring/truncate.o
CC net/dns_resolver/dns_key.o
CC net/handshake/alert.o
CC block/blk-ia-ranges.o
CC drivers/acpi/acpica/exmutex.o
CC net/handshake/genl.o
CC fs/nfs/super.o
CC net/handshake/netlink.o
CC net/core/neighbour.o
CC drivers/acpi/reboot.o
CC drivers/acpi/acpica/exnames.o
CC net/sunrpc/auth_gss/gss_mech_switch.o
MKCAP arch/x86/kernel/cpu/capflags.c
CC fs/lockd/svc.o
CC fs/nfs/io.o
CC kernel/irq/affinity.o
CC fs/nfs/direct.o
CC fs/lockd/svclock.o
CC net/xfrm/xfrm_user.o
CC net/wireless/util.o
CC mm/mmap_lock.o
CC [M] sound/hda/hdmi_chmap.o
CC net/handshake/request.o
CC crypto/md5.o
CC net/ipv4/ip_fragment.o
CC crypto/sha256_generic.o
CC drivers/pci/mmap.o
CC net/dns_resolver/dns_query.o
CC drivers/acpi/acpica/exoparg1.o
CC net/handshake/tlshd.o
CC net/sunrpc/xprt.o
CC net/ethtool/cabletest.o
CC net/netlabel/netlabel_domainhash.o
CC kernel/irq/matrix.o
CC lib/ratelimit.o
CC net/netlabel/netlabel_addrlist.o
CC net/handshake/trace.o
CC net/netlabel/netlabel_mgmt.o
CC block/early-lookup.o
CC net/ethtool/tunnels.o
CC crypto/sha512_generic.o
CC fs/proc/kcore.o
CC io_uring/memmap.o
CC net/netfilter/nf_conntrack_proto_tcp.o
CC io_uring/io-wq.o
CC fs/ext4/ialloc.o
CC io_uring/futex.o
CC drivers/acpi/acpica/exoparg2.o
CC crypto/sha3_generic.o
CC drivers/acpi/nvs.o
CC net/core/rtnetlink.o
AR net/ipv6/netfilter/built-in.a
CC net/netlabel/netlabel_unlabeled.o
CC crypto/ecb.o
CC drivers/pci/devres.o
CC fs/proc/vmcore.o
CC fs/proc/kmsg.o
AR net/dns_resolver/built-in.a
CC net/netlabel/netlabel_cipso_v4.o
CC net/netlabel/netlabel_calipso.o
CC fs/lockd/svcshare.o
CC mm/highmem.o
CC [M] sound/hda/trace.o
CC drivers/acpi/acpica/exoparg3.o
CC net/9p/protocol.o
CC fs/nfs/pagelist.o
CC block/bounce.o
CC fs/nfs/read.o
CC lib/rbtree.o
CC net/sunrpc/auth_gss/svcauth_gss.o
CC lib/seq_buf.o
CC drivers/acpi/wakeup.o
CC fs/proc/page.o
CC io_uring/napi.o
CC net/ipv6/ndisc.o
CC crypto/cbc.o
CC fs/ext4/indirect.o
CC fs/ext4/inline.o
CC net/ipv4/ip_forward.o
CC fs/autofs/init.o
CC fs/9p/vfs_super.o
CC drivers/acpi/acpica/exoparg6.o
CC fs/autofs/inode.o
CC drivers/acpi/acpica/exprep.o
CC drivers/acpi/acpica/exregion.o
CC fs/autofs/root.o
CC drivers/pci/proc.o
CC fs/autofs/symlink.o
AR kernel/irq/built-in.a
CC drivers/pci/pci-sysfs.o
CC drivers/pci/slot.o
CC net/ethtool/fec.o
CC net/mac80211/status.o
CC drivers/acpi/sleep.o
CC crypto/ctr.o
CC net/core/utils.o
CC drivers/acpi/device_sysfs.o
CC net/9p/trans_common.o
CC drivers/pci/pci-acpi.o
AR net/handshake/built-in.a
CC net/9p/trans_fd.o
CC fs/autofs/waitq.o
CC net/netfilter/nf_conntrack_proto_udp.o
CC mm/memory.o
CC fs/lockd/svcproc.o
CC net/netfilter/nf_conntrack_proto_icmp.o
CC drivers/acpi/acpica/exresnte.o
CC net/devres.o
CC [M] sound/hda/hdac_component.o
AR fs/proc/built-in.a
CC fs/9p/vfs_inode.o
CC net/ethtool/eeprom.o
CC drivers/acpi/acpica/exresolv.o
CC lib/siphash.o
AR net/netlabel/built-in.a
CC net/netfilter/nf_conntrack_extend.o
CC drivers/dma/dw/core.o
CC fs/ext4/inode.o
CC drivers/dma/dw/dw.o
CC crypto/gcm.o
CC drivers/dma/dw/idma32.o
CC drivers/dma/dw/acpi.o
CC fs/autofs/expire.o
CC net/core/link_watch.o
AR kernel/livepatch/built-in.a
CC mm/mincore.o
CC net/ethtool/stats.o
CC block/bsg.o
AR net/xfrm/built-in.a
CC kernel/dma/mapping.o
CC net/9p/trans_virtio.o
CC kernel/entry/common.o
CC drivers/acpi/acpica/exresop.o
CC kernel/entry/syscall_user_dispatch.o
AR drivers/soc/apple/built-in.a
AR io_uring/built-in.a
CC [M] sound/hda/hdac_i915.o
AR drivers/soc/aspeed/built-in.a
CC net/ipv4/ip_options.o
CC drivers/virtio/virtio.o
AR drivers/soc/bcm/built-in.a
AR drivers/soc/fsl/built-in.a
CC fs/autofs/dev-ioctl.o
AR drivers/soc/fujitsu/built-in.a
CC drivers/virtio/virtio_ring.o
AR drivers/soc/hisilicon/built-in.a
CC net/socket.o
AR drivers/soc/imx/built-in.a
AR drivers/soc/ixp4xx/built-in.a
AR drivers/soc/loongson/built-in.a
AR drivers/soc/mediatek/built-in.a
CC drivers/dma/hsu/hsu.o
AR drivers/soc/microchip/built-in.a
CC drivers/pci/iomap.o
AR drivers/soc/nuvoton/built-in.a
AR drivers/soc/pxa/built-in.a
AR drivers/soc/amlogic/built-in.a
CC fs/ext4/ioctl.o
CC fs/ext4/mballoc.o
CC net/core/filter.o
AR drivers/soc/qcom/built-in.a
CC drivers/acpi/acpica/exserial.o
AR drivers/soc/renesas/built-in.a
CC drivers/acpi/acpica/exstore.o
AR drivers/soc/rockchip/built-in.a
AR drivers/soc/sunxi/built-in.a
AR drivers/soc/ti/built-in.a
AR drivers/soc/xilinx/built-in.a
CC fs/lockd/svcsubs.o
AR fs/hostfs/built-in.a
AR drivers/soc/built-in.a
CC fs/9p/vfs_inode_dotl.o
AR drivers/dma/idxd/built-in.a
CC fs/9p/vfs_addr.o
CC drivers/acpi/device_pm.o
AR drivers/dma/mediatek/built-in.a
CC arch/x86/kernel/cpu/powerflags.o
CC kernel/rcu/rcu_segcblist.o
CC arch/x86/kernel/idt.o
CC net/netfilter/nf_conntrack_acct.o
CC arch/x86/kernel/cpu/topology.o
CC block/blk-cgroup.o
CC fs/lockd/mon.o
CC fs/lockd/trace.o
CC net/sunrpc/socklib.o
CC net/sunrpc/auth_gss/gss_rpc_upcall.o
CC fs/9p/vfs_file.o
CC crypto/ccm.o
CC fs/lockd/xdr.o
CC lib/string.o
CC arch/x86/kernel/irq.o
CC crypto/aes_generic.o
AR drivers/dma/dw/built-in.a
CC crypto/crc32c_generic.o
CC fs/9p/vfs_dir.o
CC [M] sound/hda/intel-dsp-config.o
CC [M] sound/hda/intel-nhlt.o
CC fs/nfs/symlink.o
CC drivers/acpi/acpica/exstoren.o
CC drivers/virtio/virtio_anchor.o
CC net/ipv6/udp.o
CC lib/timerqueue.o
CC kernel/dma/direct.o
CC drivers/pci/quirks.o
CC mm/mlock.o
AR kernel/entry/built-in.a
CC drivers/pci/pci-label.o
CC kernel/dma/ops_helpers.o
AR fs/autofs/built-in.a
CC crypto/authenc.o
CC net/ethtool/phc_vclocks.o
AR kernel/rcu/built-in.a
CC lib/vsprintf.o
CC lib/win_minmax.o
CC lib/xarray.o
AR net/9p/built-in.a
AR drivers/dma/hsu/built-in.a
CC kernel/module/main.o
AR drivers/dma/qcom/built-in.a
AR drivers/dma/ti/built-in.a
AR drivers/dma/xilinx/built-in.a
CC kernel/module/strict_rwx.o
CC drivers/dma/dmaengine.o
CC drivers/acpi/acpica/exstorob.o
CC net/wireless/reg.o
CC net/sunrpc/xprtsock.o
CC arch/x86/kernel/irq_32.o
CC net/wireless/scan.o
CC arch/x86/kernel/cpu/proc.o
CC net/sysctl_net.o
CC fs/9p/vfs_dentry.o
CC net/ipv4/ip_output.o
CC drivers/dma/virt-dma.o
CC kernel/dma/dummy.o
CC fs/9p/v9fs.o
CC [M] sound/hda/intel-sdw-acpi.o
CC net/mac80211/driver-ops.o
CC drivers/dma/acpi-dma.o
CC net/netfilter/nf_conntrack_seqadj.o
CC net/netfilter/nf_conntrack_proto_icmpv6.o
CC drivers/acpi/acpica/exsystem.o
CC drivers/virtio/virtio_pci_modern_dev.o
CC mm/mmap.o
CC net/ipv4/ip_sockglue.o
CC lib/lockref.o
CC net/ipv4/inet_hashtables.o
CC net/sunrpc/auth_gss/gss_rpc_xdr.o
CC net/netfilter/nf_conntrack_netlink.o
CC fs/nfs/unlink.o
CC fs/nfs/write.o
CC net/ethtool/mm.o
CC fs/lockd/clnt4xdr.o
CC arch/x86/kernel/dumpstack_32.o
CC kernel/module/kmod.o
CC lib/bcd.o
CC fs/lockd/xdr4.o
CC lib/sort.o
CC fs/ext4/migrate.o
CC crypto/authencesn.o
CC crypto/lzo.o
CC drivers/acpi/acpica/extrace.o
LD [M] sound/hda/snd-hda-core.o
LD [M] sound/hda/snd-intel-dspcfg.o
LD [M] sound/hda/snd-intel-sdw-acpi.o
AR sound/built-in.a
CC arch/x86/kernel/time.o
CC kernel/dma/remap.o
CC drivers/acpi/acpica/exutils.o
CC block/blk-ioprio.o
CC crypto/lzo-rle.o
CC fs/9p/fid.o
CC block/blk-iolatency.o
CC fs/9p/xattr.o
CC block/blk-iocost.o
CC fs/nfs/namespace.o
AR drivers/dma/built-in.a
CC lib/parser.o
CC arch/x86/kernel/cpu/feat_ctl.o
CC fs/debugfs/inode.o
CC drivers/virtio/virtio_pci_legacy_dev.o
CC fs/debugfs/file.o
CC drivers/virtio/virtio_pci_modern.o
CC drivers/virtio/virtio_pci_common.o
CC drivers/virtio/virtio_pci_legacy.o
CC drivers/acpi/acpica/hwacpi.o
CC mm/mmu_gather.o
CC fs/ext4/mmp.o
AR kernel/dma/built-in.a
CC kernel/module/tree_lookup.o
CC kernel/time/time.o
CC drivers/tty/vt/vt_ioctl.o
CC drivers/char/hw_random/core.o
CC net/ethtool/module.o
CC drivers/char/agp/backend.o
CC drivers/char/agp/generic.o
CC drivers/char/agp/isoch.o
CC lib/debug_locks.o
CC arch/x86/kernel/cpu/intel.o
CC drivers/acpi/acpica/hwesleep.o
CC net/sunrpc/auth_gss/trace.o
AR fs/9p/built-in.a
CC net/ipv6/udplite.o
CC fs/ext4/move_extent.o
CC drivers/pci/vgaarb.o
CC kernel/futex/core.o
CC block/mq-deadline.o
CC crypto/rng.o
CC kernel/futex/syscalls.o
CC fs/tracefs/inode.o
CC drivers/virtio/virtio_pci_admin_legacy_io.o
CC drivers/char/agp/amd64-agp.o
CC crypto/drbg.o
CC fs/ext4/namei.o
CC fs/lockd/svc4proc.o
CC drivers/acpi/acpica/hwgpe.o
CC drivers/virtio/virtio_input.o
CC kernel/module/kallsyms.o
CC net/core/sock_diag.o
CC net/wireless/nl80211.o
CC lib/random32.o
CC net/wireless/mlme.o
CC net/wireless/ibss.o
CC drivers/virtio/virtio_dma_buf.o
CC drivers/char/hw_random/intel-rng.o
CC crypto/jitterentropy.o
AR fs/debugfs/built-in.a
CC fs/ext4/page-io.o
CC kernel/cgroup/cgroup.o
CC [M] fs/efivarfs/inode.o
CC kernel/trace/trace_clock.o
CC [M] fs/efivarfs/file.o
CC net/ipv4/inet_timewait_sock.o
CC kernel/trace/ring_buffer.o
CC kernel/time/timer.o
CC drivers/acpi/acpica/hwregs.o
CC kernel/time/hrtimer.o
CC drivers/tty/vt/vc_screen.o
CC kernel/trace/trace.o
CC kernel/time/timekeeping.o
CC net/ethtool/pse-pd.o
CC net/ipv4/inet_connection_sock.o
CC lib/bust_spinlocks.o
CC drivers/char/agp/intel-agp.o
CC net/netfilter/nf_conntrack_ftp.o
CC kernel/futex/pi.o
CC net/ipv6/raw.o
CC fs/ext4/readpage.o
AR drivers/pci/built-in.a
CC fs/tracefs/event_inode.o
CC net/wireless/sme.o
AR drivers/iommu/amd/built-in.a
CC arch/x86/kernel/cpu/intel_pconfig.o
CC net/wireless/chan.o
AR drivers/iommu/intel/built-in.a
AR drivers/iommu/arm/arm-smmu/built-in.a
CC crypto/jitterentropy-kcapi.o
AR drivers/iommu/arm/arm-smmu-v3/built-in.a
AR drivers/iommu/arm/built-in.a
AR drivers/iommu/iommufd/built-in.a
CC kernel/trace/trace_output.o
AR drivers/virtio/built-in.a
CC arch/x86/kernel/cpu/tsx.o
CC kernel/futex/requeue.o
CC drivers/iommu/iommu.o
CC mm/mprotect.o
CC kernel/futex/waitwake.o
CC kernel/module/procfs.o
CC drivers/char/agp/intel-gtt.o
CC drivers/acpi/acpica/hwsleep.o
CC [M] fs/efivarfs/super.o
CC drivers/char/hw_random/amd-rng.o
CC block/kyber-iosched.o
CC fs/lockd/procfs.o
CC net/mac80211/sta_info.o
CC lib/kasprintf.o
CC net/core/dev_ioctl.o
CC crypto/ghash-generic.o
CC fs/nfs/mount_clnt.o
CC arch/x86/kernel/cpu/intel_epb.o
CC drivers/acpi/acpica/hwvalid.o
CC drivers/tty/vt/selection.o
CC [M] fs/efivarfs/vars.o
CC kernel/time/ntp.o
CC kernel/module/sysfs.o
CC net/ethtool/plca.o
CC net/netfilter/nf_conntrack_irc.o
CC net/sunrpc/sched.o
AR drivers/gpu/host1x/built-in.a
CC net/sunrpc/auth.o
CC lib/bitmap.o
CC net/ipv4/tcp.o
CC net/mac80211/wep.o
AR kernel/futex/built-in.a
CC drivers/char/hw_random/geode-rng.o
CC lib/scatterlist.o
AR fs/tracefs/built-in.a
CC block/blk-mq-pci.o
CC drivers/connector/cn_queue.o
CC crypto/hash_info.o
CC drivers/acpi/acpica/hwxface.o
AR drivers/gpu/drm/tests/built-in.a
AR drivers/gpu/drm/arm/built-in.a
CC drivers/connector/connector.o
CC crypto/rsapubkey.asn1.o
CC drivers/gpu/drm/display/drm_display_helper_mod.o
CC arch/x86/kernel/cpu/amd.o
AR fs/lockd/built-in.a
CC drivers/connector/cn_proc.o
CC crypto/rsaprivkey.asn1.o
CC net/sunrpc/auth_gss/gss_krb5_mech.o
AR crypto/built-in.a
CC drivers/gpu/drm/display/drm_dp_dual_mode_helper.o
CC kernel/time/clocksource.o
CC drivers/base/power/sysfs.o
CC mm/mremap.o
AR drivers/char/agp/built-in.a
CC drivers/base/power/generic_ops.o
CC drivers/acpi/acpica/hwxfsleep.o
CC net/wireless/ethtool.o
CC fs/open.o
CC drivers/tty/vt/keyboard.o
CC arch/x86/kernel/cpu/hygon.o
LD [M] fs/efivarfs/efivarfs.o
CC drivers/gpu/drm/ttm/ttm_tt.o
CC fs/read_write.o
AR kernel/module/built-in.a
CC kernel/time/jiffies.o
CC mm/msync.o
CC kernel/bpf/core.o
CC drivers/base/power/common.o
CC drivers/char/hw_random/via-rng.o
CC fs/ext4/resize.o
CC fs/nfs/nfstrace.o
CC block/blk-mq-virtio.o
CC drivers/acpi/acpica/hwpci.o
CC net/wireless/mesh.o
AR net/ethtool/built-in.a
CC net/ipv4/tcp_input.o
CC net/ipv4/tcp_output.o
CC drivers/gpu/drm/display/drm_dp_helper.o
CC drivers/base/firmware_loader/builtin/main.o
CC net/ipv6/icmp.o
CC net/ipv6/mcast.o
CC drivers/base/firmware_loader/main.o
CC drivers/iommu/iommu-traces.o
CC net/sunrpc/auth_gss/gss_krb5_seal.o
CC net/netfilter/nf_conntrack_sip.o
CC fs/file_table.o
CC kernel/events/core.o
CC lib/list_sort.o
CC block/blk-mq-debugfs.o
CC arch/x86/kernel/cpu/centaur.o
CC block/blk-pm.o
AR drivers/char/hw_random/built-in.a
CC net/netfilter/nf_nat_core.o
CC drivers/char/mem.o
CC fs/ext4/super.o
CC kernel/time/timer_list.o
CC lib/uuid.o
CC drivers/acpi/acpica/nsaccess.o
CC drivers/base/power/qos.o
AR drivers/base/firmware_loader/builtin/built-in.a
AR drivers/connector/built-in.a
CC fs/ext4/symlink.o
CC kernel/time/timeconv.o
CC drivers/block/loop.o
CC lib/iov_iter.o
CC drivers/block/virtio_blk.o
CC drivers/gpu/drm/ttm/ttm_bo.o
CC mm/page_vma_mapped.o
CC block/holder.o
CC arch/x86/kernel/cpu/transmeta.o
CC drivers/acpi/acpica/nsalloc.o
CC kernel/time/timecounter.o
CC net/sunrpc/auth_gss/gss_krb5_unseal.o
CC kernel/time/alarmtimer.o
CC net/core/tso.o
CC kernel/time/posix-timers.o
CC net/wireless/ap.o
CC drivers/tty/vt/vt.o
AR drivers/base/firmware_loader/built-in.a
CC drivers/gpu/drm/ttm/ttm_bo_util.o
CC drivers/acpi/acpica/nsarguments.o
CC fs/super.o
CC drivers/iommu/iommu-sysfs.o
CC kernel/time/posix-cpu-timers.o
CC drivers/char/random.o
CC arch/x86/kernel/cpu/zhaoxin.o
CC arch/x86/kernel/cpu/vortex.o
CC net/netfilter/nf_nat_proto.o
CC kernel/trace/trace_seq.o
CC arch/x86/kernel/ioport.o
CC kernel/trace/trace_stat.o
CC drivers/gpu/drm/ttm/ttm_bo_vm.o
AR block/built-in.a
CC net/ipv6/reassembly.o
CC mm/pagewalk.o
CC fs/char_dev.o
CC drivers/acpi/acpica/nsconvert.o
CC drivers/gpu/drm/ttm/ttm_module.o
CC net/wireless/trace.o
CC arch/x86/kernel/cpu/perfctr-watchdog.o
CC drivers/gpu/drm/ttm/ttm_execbuf_util.o
CC net/sunrpc/auth_gss/gss_krb5_wrap.o
CC drivers/gpu/drm/ttm/ttm_range_manager.o
CC kernel/events/ring_buffer.o
CC drivers/base/power/runtime.o
CC drivers/base/regmap/regmap.o
CC drivers/iommu/dma-iommu.o
CC kernel/cgroup/rstat.o
CC drivers/iommu/iova.o
CC net/netfilter/nf_nat_helper.o
CC fs/ext4/sysfs.o
CC drivers/gpu/drm/display/drm_dp_mst_topology.o
CC drivers/acpi/acpica/nsdump.o
CC drivers/gpu/drm/ttm/ttm_resource.o
CC kernel/cgroup/namespace.o
AR drivers/block/built-in.a
AR drivers/misc/eeprom/built-in.a
CC net/core/sock_reuseport.o
CC drivers/gpu/drm/ttm/ttm_pool.o
CC kernel/time/posix-clock.o
CC net/netfilter/nf_nat_masquerade.o
AR drivers/misc/cb710/built-in.a
CC kernel/trace/trace_printk.o
AR drivers/misc/ti-st/built-in.a
CC net/core/fib_notifier.o
AR drivers/misc/lis3lv02d/built-in.a
AR drivers/misc/cardreader/built-in.a
AR drivers/misc/built-in.a
CC kernel/trace/pid_list.o
CC mm/pgtable-generic.o
AR drivers/gpu/vga/built-in.a
CC kernel/trace/trace_sched_switch.o
AR drivers/mfd/built-in.a
CC kernel/trace/trace_nop.o
CC fs/stat.o
CC net/core/xdp.o
CC arch/x86/kernel/cpu/vmware.o
CC drivers/acpi/acpica/nseval.o
CC net/core/flow_offload.o
CC drivers/tty/hvc/hvc_console.o
CC lib/clz_ctz.o
CC net/ipv4/tcp_timer.o
CC lib/bsearch.o
CC net/sunrpc/auth_gss/gss_krb5_crypto.o
CC net/mac80211/aead_api.o
CC drivers/char/misc.o
AR kernel/bpf/built-in.a
CC kernel/fork.o
CC fs/ext4/xattr.o
CC drivers/acpi/acpica/nsinit.o
CC mm/rmap.o
CC net/netfilter/nf_nat_ftp.o
CC drivers/base/regmap/regcache.o
CC net/wireless/ocb.o
CC net/ipv4/tcp_ipv4.o
CC net/ipv6/tcp_ipv6.o
CC drivers/base/power/wakeirq.o
CC drivers/acpi/acpica/nsload.o
CC net/core/gro.o
CC kernel/time/itimer.o
CC arch/x86/kernel/cpu/hypervisor.o
CC mm/vmalloc.o
CC drivers/gpu/drm/ttm/ttm_device.o
CC kernel/cgroup/cgroup-v1.o
CC drivers/base/power/main.o
CC kernel/trace/blktrace.o
CC kernel/trace/trace_events.o
CC kernel/time/clockevents.o
CC arch/x86/kernel/cpu/mshyperv.o
CC lib/find_bit.o
CC net/mac80211/wpa.o
AR drivers/base/test/built-in.a
CC net/ipv4/tcp_minisocks.o
AR drivers/iommu/built-in.a
CC net/ipv4/tcp_cong.o
CC mm/process_vm_access.o
CC drivers/gpu/drm/ttm/ttm_sys_manager.o
CC drivers/char/virtio_console.o
CC arch/x86/kernel/cpu/debugfs.o
CC drivers/acpi/acpica/nsnames.o
AR drivers/tty/hvc/built-in.a
CC net/wireless/pmsr.o
CC drivers/base/power/wakeup.o
CC lib/llist.o
CC drivers/gpu/drm/display/drm_dsc_helper.o
CC arch/x86/kernel/dumpstack.o
COPY drivers/tty/vt/defkeymap.c
CC drivers/tty/vt/consolemap.o
GEN net/wireless/shipped-certs.c
CC net/wireless/shipped-certs.o
CC lib/lwq.o
CC drivers/char/hpet.o
CC net/sunrpc/auth_gss/gss_krb5_keys.o
CC drivers/base/regmap/regcache-rbtree.o
CC drivers/gpu/drm/ttm/ttm_agp_backend.o
CC mm/page_alloc.o
CC kernel/trace/trace_export.o
CC lib/memweight.o
CC kernel/time/tick-common.o
CC kernel/trace/trace_event_perf.o
CC drivers/acpi/acpica/nsobject.o
CC net/mac80211/scan.o
CC kernel/cgroup/freezer.o
CC lib/kfifo.o
CC net/netfilter/nf_nat_irc.o
CC kernel/time/tick-broadcast.o
CC net/ipv4/tcp_metrics.o
CC mm/init-mm.o
CC arch/x86/kernel/cpu/capflags.o
AR arch/x86/kernel/cpu/built-in.a
CC kernel/trace/trace_events_filter.o
CC fs/nfs/export.o
CC drivers/acpi/acpica/nsparse.o
CC arch/x86/kernel/nmi.o
CC drivers/gpu/drm/display/drm_hdcp_helper.o
CC drivers/acpi/proc.o
CC drivers/acpi/bus.o
HOSTCC drivers/tty/vt/conmakehash
AR drivers/gpu/drm/ttm/built-in.a
CC drivers/base/regmap/regcache-flat.o
CC fs/nfs/sysfs.o
CC kernel/cgroup/legacy_freezer.o
CC drivers/gpu/drm/i915/i915_config.o
AR net/sunrpc/auth_gss/built-in.a
CC net/sunrpc/auth_null.o
CC drivers/char/nvram.o
CC kernel/cgroup/pids.o
AR drivers/nfc/built-in.a
CC drivers/gpu/drm/display/drm_hdmi_helper.o
CC net/core/netdev-genl.o
CC drivers/acpi/acpica/nspredef.o
CC drivers/tty/vt/defkeymap.o
CONMK drivers/tty/vt/consolemap_deftbl.c
CC drivers/acpi/acpica/nsprepkg.o
CC drivers/tty/vt/consolemap_deftbl.o
CC kernel/cgroup/rdma.o
CC net/mac80211/offchannel.o
CC net/sunrpc/auth_tls.o
CC lib/percpu-refcount.o
CC fs/nfs/fs_context.o
CC drivers/base/power/wakeup_stats.o
CC net/ipv6/ping.o
AR drivers/dax/hmem/built-in.a
CC drivers/dma-buf/dma-buf.o
AR drivers/dax/built-in.a
CC drivers/dma-buf/dma-fence.o
CC drivers/gpu/drm/i915/i915_driver.o
CC net/ipv6/exthdrs.o
AR drivers/cxl/core/built-in.a
AR drivers/tty/vt/built-in.a
AR drivers/cxl/built-in.a
CC drivers/dma-buf/dma-fence-array.o
CC fs/ext4/xattr_hurd.o
CC drivers/tty/serial/8250/8250_core.o
CC drivers/tty/serial/serial_core.o
CC net/netfilter/nf_nat_sip.o
CC drivers/base/regmap/regcache-maple.o
CC kernel/time/tick-broadcast-hrtimer.o
CC drivers/tty/serial/8250/8250_pnp.o
CC kernel/exec_domain.o
CC drivers/acpi/acpica/nsrepair.o
CC kernel/trace/trace_events_trigger.o
CC drivers/dma-buf/dma-fence-chain.o
CC drivers/acpi/glue.o
CC drivers/acpi/scan.o
CC drivers/base/power/trace.o
CC drivers/gpu/drm/display/drm_scdc_helper.o
CC drivers/dma-buf/dma-fence-unwrap.o
CC kernel/cgroup/cpuset.o
CC fs/exec.o
CC lib/rhashtable.o
AR drivers/char/built-in.a
CC drivers/dma-buf/dma-resv.o
CC arch/x86/kernel/ldt.o
CC kernel/events/callchain.o
CC net/netfilter/x_tables.o
CC kernel/time/tick-oneshot.o
CC drivers/acpi/acpica/nsrepair2.o
CC drivers/tty/serial/8250/8250_port.o
CC net/sunrpc/auth_unix.o
CC fs/nfs/nfsroot.o
CC net/ipv4/tcp_fastopen.o
CC kernel/time/tick-sched.o
CC lib/base64.o
CC drivers/base/regmap/regmap-debugfs.o
CC net/ipv4/tcp_rate.o
CC net/netfilter/xt_tcpudp.o
CC net/netfilter/xt_CONNSECMARK.o
CC net/sunrpc/svc.o
CC net/netfilter/xt_NFLOG.o
CC drivers/tty/serial/8250/8250_dma.o
CC arch/x86/kernel/setup.o
CC lib/once.o
CC net/ipv6/datagram.o
CC kernel/time/timer_migration.o
CC drivers/tty/serial/8250/8250_dwlib.o
CC drivers/dma-buf/sync_file.o
CC mm/memblock.o
CC drivers/macintosh/mac_hid.o
AR drivers/scsi/pcmcia/built-in.a
CC drivers/scsi/scsi.o
CC drivers/acpi/acpica/nssearch.o
AR drivers/base/power/built-in.a
CC drivers/tty/serial/serial_base_bus.o
CC kernel/trace/trace_eprobe.o
CC drivers/tty/serial/8250/8250_pcilib.o
AR drivers/gpu/drm/display/built-in.a
CC net/core/netdev-genl-gen.o
AR drivers/gpu/drm/renesas/rcar-du/built-in.a
AR drivers/gpu/drm/renesas/rz-du/built-in.a
AR drivers/gpu/drm/renesas/built-in.a
CC net/core/gso.o
CC drivers/gpu/drm/i915/i915_drm_client.o
CC net/sunrpc/svcsock.o
CC net/netfilter/xt_SECMARK.o
CC kernel/events/hw_breakpoint.o
CC drivers/tty/serial/serial_ctrl.o
CC net/mac80211/ht.o
CC net/core/net-sysfs.o
CC drivers/acpi/acpica/nsutils.o
CC lib/refcount.o
AR drivers/nvme/common/built-in.a
AR drivers/nvme/host/built-in.a
AR drivers/base/regmap/built-in.a
CC drivers/ata/libata-core.o
AR drivers/nvme/target/built-in.a
CC drivers/base/component.o
AR drivers/nvme/built-in.a
CC drivers/ata/libata-scsi.o
AR drivers/macintosh/built-in.a
AR drivers/dma-buf/built-in.a
AR drivers/net/phy/qcom/built-in.a
CC drivers/firewire/init_ohci1394_dma.o
CC drivers/net/phy/mdio-boardinfo.o
CC lib/rcuref.o
CC drivers/net/phy/stubs.o
CC net/sunrpc/svcauth.o
CC drivers/base/core.o
CC lib/usercopy.o
CC fs/nfs/sysctl.o
CC net/netfilter/xt_TCPMSS.o
CC drivers/tty/serial/8250/8250_early.o
CC mm/slub.o
CC drivers/scsi/hosts.o
CC drivers/tty/serial/serial_port.o
CC drivers/net/phy/mdio_devres.o
CC drivers/acpi/acpica/nswalk.o
CC drivers/net/phy/phy.o
CC arch/x86/kernel/x86_init.o
CC kernel/cgroup/misc.o
CC drivers/gpu/drm/i915/i915_getparam.o
CC kernel/cgroup/debug.o
CC lib/errseq.o
CC drivers/gpu/drm/i915/i915_ioctl.o
CC net/ipv4/tcp_recovery.o
CC lib/bucket_locks.o
CC drivers/scsi/scsi_ioctl.o
CC fs/nfs/nfs3super.o
CC mm/madvise.o
CC drivers/acpi/mipi-disco-img.o
CC net/mac80211/agg-tx.o
CC net/core/hotdata.o
CC net/ipv4/tcp_ulp.o
CC fs/pipe.o
AR drivers/firewire/built-in.a
CC net/ipv4/tcp_offload.o
CC drivers/acpi/acpica/nsxfeval.o
CC kernel/trace/trace_kprobe.o
CC fs/nfs/nfs3client.o
CC drivers/tty/serial/8250/8250_exar.o
CC net/mac80211/agg-rx.o
CC net/ipv4/tcp_plb.o
CC net/ipv6/ip6_flowlabel.o
CC net/sunrpc/svcauth_unix.o
AR drivers/net/pse-pd/built-in.a
CC kernel/events/uprobes.o
CC fs/namei.o
CC drivers/gpu/drm/i915/i915_irq.o
CC fs/fcntl.o
CC mm/page_io.o
CC drivers/scsi/scsicam.o
CC drivers/tty/serial/earlycon.o
CC lib/generic-radix-tree.o
CC kernel/time/vsyscall.o
CC arch/x86/kernel/i8259.o
CC drivers/net/phy/phy-c45.o
CC fs/nfs/nfs3proc.o
CC drivers/scsi/scsi_error.o
CC drivers/acpi/acpica/nsxfname.o
AR kernel/cgroup/built-in.a
CC kernel/panic.o
CC drivers/acpi/resource.o
CC kernel/time/timekeeping_debug.o
CC drivers/tty/serial/8250/8250_lpss.o
CC net/netfilter/xt_conntrack.o
CC drivers/tty/serial/8250/8250_mid.o
CC kernel/time/namespace.o
CC lib/bitmap-str.o
CC net/core/net-procfs.o
CC drivers/acpi/acpica/nsxfobj.o
CC fs/ioctl.o
CC arch/x86/kernel/irqinit.o
CC net/core/netpoll.o
CC drivers/acpi/acpica/psargs.o
CC drivers/gpu/drm/i915/i915_mitigations.o
CC net/core/fib_rules.o
CC drivers/acpi/acpica/psloop.o
CC drivers/net/phy/phy-core.o
CC drivers/cdrom/cdrom.o
AR drivers/auxdisplay/built-in.a
CC drivers/pcmcia/cs.o
CC drivers/pcmcia/socket_sysfs.o
CC net/ipv4/datagram.o
CC drivers/pcmcia/cardbus.o
CC fs/ext4/xattr_trusted.o
CC fs/nfs/nfs3xdr.o
CC drivers/net/phy/phy_device.o
CC drivers/net/phy/linkmode.o
CC drivers/base/bus.o
CC lib/string_helpers.o
CC net/sunrpc/addr.o
CC drivers/pcmcia/ds.o
CC drivers/usb/common/common.o
CC lib/hexdump.o
CC net/ipv6/inet6_connection_sock.o
CC net/ipv6/udp_offload.o
CC drivers/acpi/acpica/psobject.o
CC drivers/tty/serial/8250/8250_pci.o
AR kernel/time/built-in.a
CC net/ipv4/raw.o
CC kernel/cpu.o
CC drivers/acpi/acpica/psopcode.o
CC fs/readdir.o
CC kernel/trace/error_report-traces.o
CC drivers/net/phy/mdio_bus.o
CC fs/ext4/xattr_user.o
AR kernel/events/built-in.a
CC net/ipv4/udp.o
CC net/mac80211/vht.o
CC fs/select.o
CC kernel/exit.o
CC drivers/acpi/acpica/psopinfo.o
CC arch/x86/kernel/jump_label.o
CC lib/kstrtox.o
CC net/mac80211/he.o
CC drivers/pcmcia/pcmcia_resource.o
CC drivers/scsi/scsi_lib.o
CC net/netfilter/xt_policy.o
CC net/netfilter/xt_state.o
CC drivers/gpu/drm/i915/i915_module.o
CC net/ipv4/udplite.o
CC fs/ext4/fast_commit.o
CC drivers/base/dd.o
CC net/ipv4/udp_offload.o
CC net/sunrpc/rpcb_clnt.o
CC drivers/net/phy/mdio_device.o
CC drivers/pcmcia/cistpl.o
CC drivers/usb/common/debug.o
CC drivers/acpi/acpica/psparse.o
CC net/mac80211/s1g.o
CC drivers/acpi/acpica/psscope.o
AR drivers/usb/common/built-in.a
CC drivers/usb/core/usb.o
CC lib/iomap.o
CC kernel/trace/power-traces.o
CC lib/iomap_copy.o
CC net/mac80211/ibss.o
CC kernel/trace/rpm-traces.o
CC drivers/net/phy/swphy.o
CC arch/x86/kernel/irq_work.o
CC fs/dcache.o
CC drivers/usb/core/hub.o
CC drivers/acpi/acpica/pstree.o
CC net/core/net-traces.o
CC mm/swap_state.o
CC drivers/pcmcia/pcmcia_cis.o
CC net/core/selftests.o
CC kernel/softirq.o
CC kernel/resource.o
CC mm/swapfile.o
CC net/ipv6/seg6.o
AR drivers/gpu/drm/omapdrm/built-in.a
AR drivers/gpu/drm/tilcdc/built-in.a
CC drivers/gpu/drm/virtio/virtgpu_drv.o
CC drivers/tty/serial/8250/8250_pericom.o
AR drivers/cdrom/built-in.a
CC drivers/gpu/drm/virtio/virtgpu_kms.o
CC drivers/net/phy/fixed_phy.o
CC drivers/acpi/acpica/psutils.o
CC net/mac80211/iface.o
CC drivers/base/syscore.o
CC net/sunrpc/timer.o
CC fs/inode.o
CC [M] net/netfilter/nf_log_syslog.o
CC fs/attr.o
CC lib/devres.o
CC drivers/gpu/drm/virtio/virtgpu_gem.o
AR drivers/gpu/drm/imx/built-in.a
CC drivers/gpu/drm/i915/i915_params.o
CC drivers/net/phy/realtek.o
CC lib/check_signature.o
CC net/ipv6/fib6_notifier.o
CC drivers/ata/libata-eh.o
CC lib/interval_tree.o
CC drivers/gpu/drm/virtio/virtgpu_vram.o
CC kernel/sysctl.o
CC drivers/base/driver.o
CC drivers/acpi/acpica/pswalk.o
CC drivers/net/mdio/acpi_mdio.o
AR drivers/net/pcs/built-in.a
CC lib/assoc_array.o
AR drivers/net/ethernet/3com/built-in.a
CC drivers/net/ethernet/8390/ne2k-pci.o
CC lib/bitrev.o
AR drivers/tty/serial/8250/built-in.a
AR drivers/tty/serial/built-in.a
CC drivers/net/ethernet/8390/8390.o
CC lib/crc-ccitt.o
AR drivers/tty/ipwireless/built-in.a
CC drivers/tty/tty_io.o
CC drivers/input/serio/serio.o
CC drivers/pcmcia/rsrc_mgr.o
CC arch/x86/kernel/probe_roms.o
CC fs/nfs/nfs3acl.o
CC drivers/input/keyboard/atkbd.o
CC lib/crc16.o
CC drivers/acpi/acpica/psxface.o
CC drivers/input/serio/i8042.o
HOSTCC lib/gen_crc32table
CC drivers/scsi/constants.o
CC kernel/capability.o
CC drivers/rtc/lib.o
CC net/ipv4/arp.o
CC drivers/i2c/algos/i2c-algo-bit.o
AR drivers/i3c/built-in.a
CC net/ipv4/icmp.o
AR drivers/media/i2c/built-in.a
CC net/ipv4/devinet.o
AR drivers/media/tuners/built-in.a
CC fs/bad_inode.o
AR drivers/pps/clients/built-in.a
AR drivers/media/rc/keymaps/built-in.a
CC lib/xxhash.o
AR drivers/media/rc/built-in.a
CC lib/genalloc.o
AR drivers/pps/generators/built-in.a
CC drivers/pps/pps.o
CC drivers/base/class.o
AR drivers/media/common/b2c2/built-in.a
CC drivers/pps/kapi.o
AR drivers/media/common/saa7146/built-in.a
AR drivers/media/common/siano/built-in.a
CC kernel/trace/trace_dynevent.o
AR drivers/media/common/v4l2-tpg/built-in.a
CC drivers/gpu/drm/i915/i915_pci.o
CC drivers/gpu/drm/virtio/virtgpu_display.o
AR drivers/media/common/videobuf2/built-in.a
AR drivers/media/common/built-in.a
CC drivers/acpi/acpica/rsaddr.o
CC lib/percpu_counter.o
AR drivers/media/platform/allegro-dvt/built-in.a
AR drivers/media/platform/amlogic/meson-ge2d/built-in.a
AR drivers/media/platform/amlogic/built-in.a
AR drivers/media/platform/amphion/built-in.a
CC drivers/pcmcia/rsrc_nonstatic.o
AR drivers/media/platform/aspeed/built-in.a
CC drivers/ptp/ptp_clock.o
AR drivers/media/platform/atmel/built-in.a
AR drivers/net/phy/built-in.a
CC kernel/ptrace.o
AR drivers/media/platform/broadcom/built-in.a
CC net/ipv4/af_inet.o
CC net/ipv6/rpl.o
CC net/ipv4/igmp.o
CC arch/x86/kernel/sys_ia32.o
AR drivers/media/platform/cadence/built-in.a
CC drivers/net/mdio/fwnode_mdio.o
AR drivers/media/platform/chips-media/coda/built-in.a
CC drivers/rtc/class.o
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
CC net/ipv4/fib_frontend.o
AR drivers/media/platform/mediatek/jpeg/built-in.a
CC arch/x86/kernel/ksysfs.o
AR drivers/media/platform/mediatek/mdp/built-in.a
AR drivers/media/platform/mediatek/vcodec/common/built-in.a
CC net/sunrpc/xdr.o
AR drivers/media/platform/mediatek/vcodec/encoder/built-in.a
CC drivers/acpi/acpica/rscalc.o
AR net/wireless/built-in.a
AR drivers/gpu/drm/i2c/built-in.a
AR drivers/media/platform/mediatek/vcodec/decoder/built-in.a
CC arch/x86/kernel/bootflag.o
AR drivers/media/platform/mediatek/vcodec/built-in.a
CC drivers/scsi/scsi_lib_dma.o
AR drivers/media/platform/microchip/built-in.a
AR drivers/media/platform/mediatek/vpu/built-in.a
CC net/sunrpc/sunrpc_syms.o
AR drivers/media/platform/mediatek/mdp3/built-in.a
AR drivers/media/platform/mediatek/built-in.a
CC lib/audit.o
CC drivers/input/serio/serport.o
CC kernel/user.o
AR drivers/media/platform/nuvoton/built-in.a
AR drivers/input/keyboard/built-in.a
CC drivers/pps/sysfs.o
CC fs/ext4/orphan.o
AR drivers/media/platform/nvidia/tegra-vde/built-in.a
AR drivers/media/platform/nvidia/built-in.a
CC fs/ext4/acl.o
CC drivers/input/mouse/psmouse-base.o
CC net/core/ptp_classifier.o
CC [M] net/netfilter/xt_mark.o
AR drivers/media/platform/nxp/dw100/built-in.a
AR drivers/net/ethernet/8390/built-in.a
AR drivers/media/platform/nxp/imx-jpeg/built-in.a
AR drivers/net/ethernet/adaptec/built-in.a
AR drivers/net/ethernet/agere/built-in.a
AR drivers/media/platform/nxp/imx8-isi/built-in.a
CC fs/file.o
AR drivers/media/platform/nxp/built-in.a
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/media/platform/qcom/camss/built-in.a
AR drivers/i2c/algos/built-in.a
AR drivers/net/ethernet/amd/built-in.a
CC fs/filesystems.o
CC fs/nfs/nfs4proc.o
AR drivers/media/platform/qcom/venus/built-in.a
CC drivers/i2c/busses/i2c-i801.o
AR drivers/net/ethernet/aquantia/built-in.a
AR drivers/media/platform/qcom/built-in.a
AR drivers/net/ethernet/arc/built-in.a
CC mm/swap_slots.o
CC drivers/acpi/acpica/rscreate.o
AR drivers/net/ethernet/asix/built-in.a
CC drivers/base/platform.o
CC drivers/gpu/drm/virtio/virtgpu_vq.o
AR drivers/media/platform/renesas/rcar-vin/built-in.a
AR drivers/net/ethernet/atheros/built-in.a
AR drivers/media/platform/renesas/rzg2l-cru/built-in.a
AR drivers/net/ethernet/cadence/built-in.a
AR drivers/media/platform/renesas/vsp1/built-in.a
CC drivers/net/ethernet/broadcom/bnx2.o
AR drivers/media/platform/renesas/built-in.a
CC kernel/trace/trace_probe.o
AR drivers/net/ethernet/brocade/built-in.a
AR drivers/media/platform/rockchip/rga/built-in.a
CC net/sunrpc/cache.o
AR drivers/media/platform/rockchip/rkisp1/built-in.a
CC drivers/rtc/interface.o
CC [M] net/netfilter/xt_nat.o
AR drivers/media/platform/rockchip/built-in.a
CC [M] net/netfilter/xt_LOG.o
AR drivers/media/platform/samsung/exynos-gsc/built-in.a
AR drivers/pps/built-in.a
AR drivers/media/platform/samsung/exynos4-is/built-in.a
AR drivers/media/platform/samsung/s3c-camif/built-in.a
CC kernel/trace/trace_uprobe.o
CC drivers/power/supply/power_supply_core.o
AR drivers/media/platform/samsung/s5p-g2d/built-in.a
CC drivers/gpu/drm/i915/i915_scatterlist.o
CC kernel/signal.o
AR drivers/media/platform/samsung/s5p-jpeg/built-in.a
CC kernel/sys.o
AR drivers/media/platform/samsung/s5p-mfc/built-in.a
CC lib/syscall.o
AR drivers/media/platform/samsung/built-in.a
CC drivers/usb/core/hcd.o
CC drivers/pcmcia/yenta_socket.o
CC arch/x86/kernel/e820.o
CC drivers/tty/n_tty.o
AR drivers/media/platform/st/sti/bdisp/built-in.a
AR drivers/net/mdio/built-in.a
CC drivers/acpi/acpica/rsdumpinfo.o
AR drivers/media/platform/st/sti/c8sectpfe/built-in.a
AR drivers/media/platform/st/sti/delta/built-in.a
CC drivers/ptp/ptp_chardev.o
CC drivers/scsi/scsi_scan.o
AR drivers/media/platform/sunxi/sun4i-csi/built-in.a
AR drivers/media/platform/st/sti/hva/built-in.a
AR drivers/media/platform/sunxi/sun6i-csi/built-in.a
AR drivers/media/platform/st/stm32/built-in.a
AR drivers/media/platform/sunxi/sun6i-mipi-csi2/built-in.a
AR drivers/media/platform/st/built-in.a
AR drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/built-in.a
CC drivers/input/serio/libps2.o
AR drivers/media/platform/sunxi/sun8i-di/built-in.a
AR drivers/net/wireless/admtek/built-in.a
AR drivers/media/platform/sunxi/sun8i-rotate/built-in.a
AR drivers/media/platform/sunxi/built-in.a
CC kernel/trace/rethook.o
AR drivers/net/wireless/ath/built-in.a
CC mm/dmapool.o
AR drivers/net/wireless/atmel/built-in.a
CC net/ipv6/ioam6.o
CC drivers/gpu/drm/i915/i915_suspend.o
AR drivers/media/platform/verisilicon/built-in.a
AR drivers/media/platform/ti/am437x/built-in.a
CC fs/ext4/xattr_security.o
CC drivers/power/supply/power_supply_sysfs.o
CC drivers/acpi/acpica/rsinfo.o
CC net/sunrpc/rpc_pipe.o
AR drivers/net/wireless/broadcom/built-in.a
AR drivers/media/platform/ti/cal/built-in.a
AR drivers/media/platform/ti/vpe/built-in.a
CC drivers/ptp/ptp_sysfs.o
AR drivers/net/wireless/intel/built-in.a
CC drivers/acpi/acpica/rsio.o
CC drivers/ptp/ptp_vclock.o
AR drivers/media/platform/ti/davinci/built-in.a
AR drivers/net/wireless/intersil/built-in.a
AR drivers/i2c/muxes/built-in.a
CC drivers/input/mouse/synaptics.o
CC lib/errname.o
AR drivers/media/platform/ti/j721e-csi2rx/built-in.a
AR drivers/net/wireless/marvell/built-in.a
CC drivers/base/cpu.o
AR drivers/net/wireless/mediatek/built-in.a
AR drivers/media/platform/ti/omap/built-in.a
AR drivers/net/wireless/microchip/built-in.a
AR drivers/media/platform/ti/omap3isp/built-in.a
CC lib/nlattr.o
AR drivers/media/platform/ti/built-in.a
CC lib/cpu_rmap.o
AR drivers/net/wireless/purelifi/built-in.a
CC drivers/input/mouse/focaltech.o
AR drivers/net/wireless/quantenna/built-in.a
AR drivers/media/platform/via/built-in.a
AR drivers/media/platform/xilinx/built-in.a
AR drivers/net/wireless/ralink/built-in.a
CC drivers/input/mouse/alps.o
AR drivers/media/platform/built-in.a
AR drivers/net/wireless/realtek/built-in.a
CC drivers/base/firmware.o
CC drivers/ata/libata-transport.o
AR drivers/net/wireless/rsi/built-in.a
AR drivers/i2c/busses/built-in.a
AR drivers/net/wireless/silabs/built-in.a
CC drivers/power/supply/power_supply_leds.o
CC drivers/i2c/i2c-boardinfo.o
AR drivers/net/wireless/st/built-in.a
AR drivers/media/pci/ttpci/built-in.a
AR drivers/media/pci/b2c2/built-in.a
AR drivers/input/serio/built-in.a
AR drivers/net/wireless/ti/built-in.a
AR drivers/media/pci/pluto2/built-in.a
AR drivers/net/ethernet/cavium/thunder/built-in.a
AR drivers/net/ethernet/cavium/common/built-in.a
CC arch/x86/kernel/pci-dma.o
AR drivers/net/wireless/zydas/built-in.a
AR drivers/net/ethernet/cavium/liquidio/built-in.a
AR drivers/media/pci/dm1105/built-in.a
CC drivers/gpu/drm/virtio/virtgpu_fence.o
CC drivers/acpi/acpica/rsirq.o
AR drivers/net/wireless/virtual/built-in.a
AR drivers/net/ethernet/cavium/octeon/built-in.a
AR drivers/media/pci/pt1/built-in.a
CC net/mac80211/link.o
CC drivers/ata/libata-trace.o
AR drivers/net/ethernet/cavium/built-in.a
AR drivers/net/wireless/built-in.a
AR drivers/media/pci/pt3/built-in.a
CC drivers/gpu/drm/virtio/virtgpu_object.o
CC drivers/input/mouse/byd.o
CC drivers/input/mouse/logips2pp.o
AR drivers/media/pci/mantis/built-in.a
CC drivers/power/supply/power_supply_hwmon.o
AR drivers/media/pci/ngene/built-in.a
AR drivers/media/pci/ddbridge/built-in.a
CC fs/namespace.o
CC mm/hugetlb.o
AR drivers/media/usb/b2c2/built-in.a
CC [M] net/netfilter/xt_MASQUERADE.o
AR drivers/media/usb/dvb-usb/built-in.a
AR drivers/media/pci/saa7146/built-in.a
CC drivers/input/mouse/lifebook.o
CC drivers/input/mouse/trackpoint.o
AR drivers/media/pci/smipcie/built-in.a
AR drivers/net/ethernet/chelsio/built-in.a
CC drivers/gpu/drm/virtio/virtgpu_debugfs.o
CC drivers/gpu/drm/virtio/virtgpu_plane.o
CC fs/seq_file.o
AR drivers/media/usb/dvb-usb-v2/built-in.a
AR drivers/media/pci/netup_unidvb/built-in.a
AR drivers/media/usb/s2255/built-in.a
AR drivers/media/pci/intel/ipu3/built-in.a
AR drivers/media/usb/siano/built-in.a
AR drivers/media/pci/intel/ivsc/built-in.a
AR fs/ext4/built-in.a
AR drivers/pcmcia/built-in.a
CC drivers/base/init.o
AR drivers/input/joystick/built-in.a
AR drivers/media/usb/ttusb-budget/built-in.a
AR drivers/media/pci/intel/built-in.a
AR drivers/media/usb/ttusb-dec/built-in.a
CC drivers/input/mouse/cypress_ps2.o
CC drivers/gpu/drm/virtio/virtgpu_ioctl.o
CC drivers/acpi/acpica/rslist.o
AR drivers/media/pci/built-in.a
GEN drivers/scsi/scsi_devinfo_tbl.c
AR drivers/media/usb/built-in.a
CC drivers/ptp/ptp_kvm_x86.o
AR drivers/input/tablet/built-in.a
CC drivers/gpu/drm/virtio/virtgpu_prime.o
CC drivers/rtc/nvmem.o
CC drivers/gpu/drm/virtio/virtgpu_trace_points.o
CC drivers/rtc/dev.o
CC drivers/scsi/scsi_devinfo.o
CC fs/nfs/nfs4xdr.o
AR drivers/media/mmc/siano/built-in.a
AR drivers/media/mmc/built-in.a
CC drivers/ptp/ptp_kvm_common.o
CC drivers/usb/core/urb.o
CC net/ipv4/fib_semantics.o
AR drivers/media/firewire/built-in.a
CC drivers/tty/tty_ioctl.o
CC net/core/netprio_cgroup.o
AR drivers/power/supply/built-in.a
AR drivers/media/spi/built-in.a
AR drivers/power/built-in.a
CC drivers/i2c/i2c-core-base.o
CC drivers/acpi/acpica/rsmemory.o
AR drivers/media/test-drivers/built-in.a
CC drivers/gpu/drm/i915/i915_switcheroo.o
AR drivers/media/built-in.a
CC drivers/scsi/scsi_sysctl.o
CC fs/nfs/nfs4state.o
AR drivers/net/ethernet/cisco/built-in.a
AR kernel/trace/built-in.a
CC fs/nfs/nfs4renewd.o
CC drivers/acpi/acpica/rsmisc.o
CC drivers/acpi/acpica/rsserial.o
CC drivers/hwmon/hwmon.o
CC arch/x86/kernel/quirks.o
CC drivers/input/mouse/psmouse-smbus.o
AR drivers/input/touchscreen/built-in.a
CC fs/xattr.o
AR drivers/net/usb/built-in.a
CC net/mac80211/rate.o
CC drivers/net/mii.o
CC lib/dynamic_queue_limits.o
AR drivers/input/misc/built-in.a
CC drivers/net/ethernet/broadcom/tg3.o
CC fs/libfs.o
CC fs/fs-writeback.o
CC drivers/rtc/proc.o
CC drivers/base/map.o
CC lib/glob.o
CC drivers/usb/core/message.o
CC drivers/net/loopback.o
CC drivers/net/netconsole.o
CC drivers/net/virtio_net.o
CC net/ipv6/sysctl_net_ipv6.o
CC mm/mmu_notifier.o
CC net/sunrpc/sysfs.o
CC kernel/umh.o
CC [M] net/netfilter/xt_addrtype.o
CC fs/pnode.o
CC drivers/gpu/drm/virtio/virtgpu_submit.o
CC drivers/ata/libata-sata.o
AR drivers/ptp/built-in.a
CC drivers/ata/libata-sff.o
CC drivers/input/input.o
CC drivers/net/net_failover.o
CC drivers/acpi/acpica/rsutils.o
CC fs/splice.o
CC drivers/rtc/sysfs.o
CC drivers/scsi/scsi_proc.o
CC net/mac80211/michael.o
CC drivers/tty/tty_ldisc.o
CC lib/strncpy_from_user.o
CC drivers/base/devres.o
CC drivers/rtc/rtc-mc146818-lib.o
CC arch/x86/kernel/kdebugfs.o
CC drivers/base/attribute_container.o
CC net/core/netclassid_cgroup.o
AR drivers/input/mouse/built-in.a
CC net/sunrpc/svc_xprt.o
CC drivers/gpu/drm/i915/i915_sysfs.o
CC drivers/acpi/acpica/rsxface.o
CC fs/nfs/nfs4super.o
CC net/ipv4/fib_trie.o
CC net/mac80211/tkip.o
CC fs/sync.o
AR drivers/hwmon/built-in.a
CC drivers/scsi/scsi_debugfs.o
CC lib/strnlen_user.o
CC fs/utimes.o
AR drivers/thermal/broadcom/built-in.a
CC drivers/rtc/rtc-cmos.o
AR drivers/thermal/samsung/built-in.a
CC drivers/thermal/intel/intel_tcc.o
CC fs/d_path.o
AR drivers/gpu/drm/virtio/built-in.a
CC lib/net_utils.o
CC kernel/workqueue.o
AR drivers/thermal/st/built-in.a
AR drivers/gpu/drm/panel/built-in.a
CC fs/stack.o
CC net/sunrpc/xprtmultipath.o
CC fs/fs_struct.o
CC arch/x86/kernel/alternative.o
CC net/ipv6/xfrm6_policy.o
CC drivers/acpi/acpica/tbdata.o
CC drivers/base/transport_class.o
CC drivers/tty/tty_buffer.o
AR drivers/gpu/drm/bridge/analogix/built-in.a
AR drivers/gpu/drm/bridge/cadence/built-in.a
AR drivers/gpu/drm/hisilicon/built-in.a
AR drivers/gpu/drm/bridge/imx/built-in.a
CC net/sunrpc/stats.o
AR drivers/gpu/drm/bridge/synopsys/built-in.a
CC drivers/thermal/intel/therm_throt.o
AR drivers/gpu/drm/bridge/built-in.a
CC arch/x86/kernel/i8253.o
CC net/ipv6/xfrm6_state.o
CC drivers/input/input-compat.o
CC drivers/i2c/i2c-core-smbus.o
CC drivers/usb/core/driver.o
AR drivers/thermal/qcom/built-in.a
CC net/mac80211/aes_cmac.o
CC fs/nfs/nfs4file.o
CC lib/sg_pool.o
CC net/ipv6/xfrm6_input.o
AR net/netfilter/built-in.a
CC net/ipv6/xfrm6_output.o
CC net/core/dst_cache.o
CC drivers/base/topology.o
CC arch/x86/kernel/hw_breakpoint.o
CC drivers/gpu/drm/i915/i915_utils.o
CC drivers/scsi/scsi_trace.o
CC drivers/tty/tty_port.o
AR drivers/gpu/drm/mxsfb/built-in.a
CC drivers/input/input-mt.o
AR drivers/gpu/drm/tiny/built-in.a
CC drivers/acpi/acpica/tbfadt.o
CC drivers/input/input-poller.o
CC drivers/input/ff-core.o
CC net/mac80211/aes_gmac.o
CC net/mac80211/fils_aead.o
CC lib/stackdepot.o
CC drivers/input/touchscreen.o
AR drivers/gpu/drm/xlnx/built-in.a
CC drivers/input/ff-memless.o
CC fs/statfs.o
CC fs/fs_pin.o
CC drivers/tty/tty_mutex.o
CC drivers/base/container.o
CC drivers/i2c/i2c-core-acpi.o
CC drivers/tty/tty_ldsem.o
AR drivers/rtc/built-in.a
CC drivers/ata/libata-pmp.o
CC drivers/scsi/scsi_logging.o
CC drivers/input/sparse-keymap.o
CC drivers/gpu/drm/i915/intel_clock_gating.o
CC mm/migrate.o
CC drivers/acpi/acpica/tbfind.o
CC drivers/base/property.o
CC drivers/tty/tty_baudrate.o
AR drivers/gpu/drm/gud/built-in.a
CC net/sunrpc/sysctl.o
AR drivers/gpu/drm/solomon/built-in.a
CC drivers/acpi/acpica/tbinstal.o
AR drivers/watchdog/built-in.a
CC [M] drivers/thermal/intel/x86_pkg_temp_thermal.o
CC drivers/base/cacheinfo.o
CC drivers/acpi/acpica/tbprint.o
CC drivers/md/md.o
CC drivers/ata/libata-acpi.o
CC drivers/ata/libata-pata-timings.o
CC net/mac80211/cfg.o
CC fs/nfs/delegation.o
CC net/ipv6/xfrm6_protocol.o
AR drivers/thermal/intel/built-in.a
CC drivers/input/vivaldi-fmap.o
CC drivers/acpi/acpica/tbutils.o
CC lib/asn1_decoder.o
CC arch/x86/kernel/tsc.o
CC drivers/usb/core/config.o
CC [M] drivers/gpu/drm/scheduler/sched_main.o
CC drivers/tty/tty_jobctrl.o
CC drivers/acpi/acpica/tbxface.o
CC drivers/tty/n_null.o
CC [M] drivers/gpu/drm/scheduler/sched_fence.o
CC drivers/tty/pty.o
CC net/core/gro_cells.o
CC fs/nfs/nfs4idmap.o
CC drivers/tty/tty_audit.o
CC fs/nsfs.o
CC fs/fs_types.o
CC drivers/acpi/acpi_processor.o
CC fs/nfs/callback.o
CC fs/fs_context.o
CC [M] drivers/gpu/drm/xe/xe_bb.o
CC drivers/input/input-leds.o
CC [M] drivers/gpu/drm/xe/xe_bo.o
CC drivers/i2c/i2c-smbus.o
CC drivers/acpi/acpica/tbxfload.o
CC drivers/acpi/processor_core.o
CC drivers/tty/sysrq.o
CC net/mac80211/ethtool.o
CC drivers/scsi/scsi_pm.o
CC fs/nfs/callback_xdr.o
GEN lib/oid_registry_data.c
CC fs/nfs/callback_proc.o
CC lib/ucs2_string.o
CC drivers/gpu/drm/i915/intel_device_info.o
CC net/ipv4/fib_notifier.o
AR drivers/thermal/tegra/built-in.a
CC drivers/input/evdev.o
AR drivers/thermal/mediatek/built-in.a
CC drivers/thermal/thermal_core.o
CC drivers/scsi/scsi_bsg.o
CC mm/page_counter.o
CC net/core/failover.o
CC drivers/scsi/scsi_common.o
CC drivers/ata/ahci.o
CC drivers/acpi/acpica/tbxfroot.o
CC drivers/gpu/drm/drm_aperture.o
CC net/mac80211/rx.o
CC lib/sbitmap.o
CC drivers/ata/libahci.o
CC fs/fs_parser.o
CC drivers/scsi/scsi_transport_spi.o
CC [M] drivers/gpu/drm/scheduler/sched_entity.o
CC [M] drivers/gpu/drm/xe/xe_bo_evict.o
CC drivers/base/swnode.o
CC drivers/gpu/drm/i915/intel_memory_region.o
CC kernel/pid.o
CC drivers/gpu/drm/drm_atomic.o
CC [M] drivers/gpu/drm/xe/xe_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_devcoredump.o
CC drivers/md/md-bitmap.o
AR net/sunrpc/built-in.a
CC drivers/usb/core/file.o
AR drivers/i2c/built-in.a
CC drivers/usb/core/buffer.o
CC drivers/md/md-autodetect.o
CC drivers/md/dm.o
CC arch/x86/kernel/tsc_msr.o
CC drivers/base/auxiliary.o
CC net/ipv6/netfilter.o
CC mm/hugetlb_cgroup.o
CC drivers/acpi/acpica/utaddress.o
CC drivers/ata/ata_piix.o
CC drivers/gpu/drm/drm_atomic_uapi.o
CC drivers/scsi/virtio_scsi.o
CC arch/x86/kernel/io_delay.o
CC net/ipv6/proc.o
CC drivers/scsi/sd.o
CC fs/nfs/nfs4namespace.o
AR drivers/tty/built-in.a
CC fs/nfs/nfs4getroot.o
CC drivers/cpufreq/cpufreq.o
CC net/ipv4/inet_fragment.o
CC drivers/acpi/acpica/utalloc.o
AR drivers/input/built-in.a
CC drivers/cpufreq/freq_table.o
CC drivers/acpi/acpica/utascii.o
LD [M] drivers/gpu/drm/scheduler/gpu-sched.o
CC mm/early_ioremap.o
CC arch/x86/kernel/rtc.o
CC fs/nfs/nfs4client.o
AR net/core/built-in.a
CC net/ipv4/ping.o
CC net/ipv6/syncookies.o
CC drivers/base/devtmpfs.o
CC lib/group_cpus.o
CC fs/nfs/nfs4session.o
CC net/mac80211/spectmgmt.o
CC mm/secretmem.o
CC drivers/base/module.o
CC drivers/usb/core/sysfs.o
CC drivers/md/dm-table.o
CC [M] drivers/gpu/drm/xe/xe_device.o
CC drivers/thermal/thermal_sysfs.o
CC fs/fsopen.o
CC arch/x86/kernel/resource.o
CC drivers/acpi/acpica/utbuffer.o
CC drivers/cpuidle/governors/menu.o
CC drivers/gpu/drm/i915/intel_pcode.o
CC drivers/cpuidle/governors/haltpoll.o
CC fs/nfs/dns_resolve.o
AR drivers/mmc/built-in.a
AR drivers/ufs/built-in.a
AR drivers/leds/trigger/built-in.a
AR drivers/leds/blink/built-in.a
AR drivers/firmware/arm_ffa/built-in.a
CC drivers/cpufreq/cpufreq_performance.o
AR drivers/leds/simple/built-in.a
CC drivers/cpufreq/cpufreq_userspace.o
CC drivers/leds/led-core.o
CC drivers/usb/core/endpoint.o
AR drivers/firmware/arm_scmi/built-in.a
CC drivers/usb/core/devio.o
AR drivers/firmware/broadcom/built-in.a
CC kernel/task_work.o
CC lib/fw_table.o
AS arch/x86/kernel/irqflags.o
AR drivers/firmware/cirrus/built-in.a
CC mm/hmm.o
AR drivers/firmware/meson/built-in.a
CC arch/x86/kernel/static_call.o
CC kernel/extable.o
AR drivers/firmware/microchip/built-in.a
CC drivers/firmware/efi/libstub/efi-stub-helper.o
CC drivers/firmware/efi/efi-bgrt.o
CC drivers/scsi/sr.o
CC drivers/firmware/efi/efi.o
CC drivers/acpi/acpica/utcksum.o
CC mm/memfd.o
AR drivers/crypto/stm32/built-in.a
CC drivers/gpu/drm/drm_auth.o
AR drivers/crypto/xilinx/built-in.a
CC drivers/ata/pata_amd.o
CC fs/nfs/nfs4trace.o
AR drivers/crypto/hisilicon/built-in.a
CC drivers/leds/led-class.o
CC drivers/leds/led-triggers.o
CC drivers/base/devcoredump.o
CC drivers/thermal/thermal_trip.o
AR drivers/crypto/intel/keembay/built-in.a
AR drivers/crypto/intel/ixp4xx/built-in.a
AR drivers/crypto/intel/built-in.a
CC drivers/gpu/drm/i915/intel_region_ttm.o
CC drivers/acpi/acpica/utcopy.o
AR drivers/crypto/starfive/built-in.a
CC drivers/acpi/acpica/utexcep.o
AR drivers/crypto/built-in.a
CC drivers/acpi/acpica/utdebug.o
CC drivers/thermal/thermal_helpers.o
CC arch/x86/kernel/process.o
AR lib/lib.a
CC fs/init.o
CC drivers/usb/core/notify.o
CC drivers/ata/pata_oldpiix.o
GEN lib/crc32table.h
CC lib/oid_registry.o
CC drivers/acpi/acpica/utdecode.o
CC mm/ptdump.o
CC fs/nfs/nfs4sysctl.o
CC drivers/gpu/drm/i915/intel_runtime_pm.o
CC [M] drivers/gpu/drm/xe/xe_device_sysfs.o
CC net/ipv6/calipso.o
CC drivers/thermal/thermal_hwmon.o
CC drivers/acpi/acpica/utdelete.o
CC drivers/firmware/efi/vars.o
CC drivers/acpi/acpica/uterror.o
CC drivers/ata/pata_sch.o
CC drivers/gpu/drm/i915/intel_sbi.o
CC drivers/scsi/sr_ioctl.o
CC drivers/thermal/gov_step_wise.o
AR drivers/cpuidle/governors/built-in.a
CC net/ipv6/ah6.o
CC drivers/cpuidle/cpuidle.o
CC drivers/firmware/efi/reboot.o
CC fs/kernel_read_file.o
CC mm/execmem.o
CC drivers/gpu/drm/drm_blend.o
CC drivers/gpu/drm/drm_bridge.o
CC drivers/firmware/efi/libstub/gop.o
CC fs/mnt_idmapping.o
CC net/ipv6/esp6.o
CC net/ipv4/ip_tunnel_core.o
CC lib/crc32.o
CC kernel/params.o
CC drivers/base/platform-msi.o
CC drivers/thermal/gov_user_space.o
AR drivers/leds/built-in.a
CC drivers/gpu/drm/drm_cache.o
AR drivers/firmware/imx/built-in.a
AR drivers/firmware/psci/built-in.a
AR drivers/firmware/qcom/built-in.a
CC drivers/gpu/drm/drm_client.o
CC drivers/cpufreq/cpufreq_ondemand.o
CC drivers/md/dm-target.o
AR drivers/firmware/smccc/built-in.a
CC drivers/usb/core/generic.o
CC drivers/cpuidle/driver.o
CC net/ipv6/sit.o
CC drivers/cpuidle/governor.o
CC drivers/acpi/acpica/uteval.o
CC drivers/clocksource/acpi_pm.o
CC drivers/hid/usbhid/hid-core.o
CC drivers/hid/hid-core.o
CC drivers/usb/core/quirks.o
CC net/mac80211/tx.o
CC drivers/hid/usbhid/hiddev.o
CC net/mac80211/key.o
CC drivers/hid/hid-input.o
CC drivers/clocksource/i8253.o
CC drivers/firmware/efi/memattr.o
CC [M] drivers/gpu/drm/xe/xe_dma_buf.o
CC drivers/scsi/sr_vendor.o
AR drivers/thermal/built-in.a
AR mm/built-in.a
CC net/mac80211/util.o
CC drivers/firmware/efi/tpm.o
CC drivers/hid/hid-quirks.o
AR lib/built-in.a
CC drivers/base/physical_location.o
CC drivers/cpuidle/sysfs.o
CC drivers/ata/pata_mpiix.o
CC kernel/kthread.o
CC drivers/acpi/acpica/utglobal.o
CC drivers/base/trace.o
CC drivers/usb/core/devices.o
CC drivers/cpuidle/poll_state.o
CC drivers/ata/ata_generic.o
CC drivers/firmware/efi/memmap.o
CC kernel/sys_ni.o
CC drivers/firmware/efi/libstub/secureboot.o
AR drivers/platform/x86/amd/built-in.a
AR drivers/platform/x86/intel/built-in.a
CC drivers/platform/x86/wmi.o
CC drivers/firmware/efi/libstub/tpm.o
CC drivers/platform/x86/wmi-bmof.o
AR drivers/platform/surface/built-in.a
CC drivers/firmware/efi/libstub/file.o
CC drivers/firmware/efi/libstub/mem.o
CC drivers/gpu/drm/i915/intel_step.o
CC drivers/cpufreq/cpufreq_governor.o
AR drivers/clocksource/built-in.a
CC drivers/firmware/efi/capsule.o
CC kernel/nsproxy.o
CC kernel/notifier.o
CC drivers/acpi/acpica/uthex.o
CC arch/x86/kernel/ptrace.o
CC drivers/scsi/sg.o
CC fs/remap_range.o
CC kernel/ksysfs.o
CC drivers/acpi/acpica/utids.o
CC drivers/scsi/scsi_sysfs.o
CC drivers/firmware/efi/esrt.o
CC drivers/acpi/processor_pdc.o
CC net/ipv6/addrconf_core.o
CC drivers/cpuidle/cpuidle-haltpoll.o
CC drivers/acpi/acpica/utinit.o
CC drivers/firmware/efi/runtime-wrappers.o
CC [M] drivers/gpu/drm/xe/xe_drm_client.o
CC fs/pidfs.o
CC drivers/hid/hid-debug.o
CC drivers/acpi/acpica/utlock.o
CC drivers/hid/usbhid/hid-pidff.o
CC fs/buffer.o
CC drivers/firmware/efi/capsule-loader.o
CC net/ipv4/gre_offload.o
CC drivers/firmware/efi/earlycon.o
CC drivers/firmware/efi/libstub/random.o
CC drivers/usb/core/phy.o
CC drivers/acpi/acpica/utmath.o
CC drivers/platform/x86/eeepc-laptop.o
AR drivers/base/built-in.a
CC drivers/acpi/ec.o
CC drivers/acpi/acpica/utmisc.o
AR drivers/ata/built-in.a
CC drivers/firmware/efi/libstub/randomalloc.o
CC net/ipv6/exthdrs_core.o
CC drivers/hid/hidraw.o
CC drivers/acpi/acpica/utmutex.o
CC drivers/cpufreq/cpufreq_governor_attr_set.o
CC drivers/firmware/efi/libstub/pci.o
AR drivers/cpuidle/built-in.a
CC drivers/acpi/dock.o
CC drivers/acpi/acpica/utnonansi.o
CC net/mac80211/parse.o
CC drivers/platform/x86/p2sb.o
CC drivers/acpi/pci_root.o
CC drivers/acpi/pci_link.o
CC net/mac80211/wme.o
CC arch/x86/kernel/tls.o
CC drivers/usb/core/port.o
CC drivers/gpu/drm/i915/intel_uncore.o
CC drivers/acpi/acpica/utobject.o
CC fs/mpage.o
CC drivers/acpi/pci_irq.o
CC drivers/cpufreq/acpi-cpufreq.o
CC [M] drivers/gpu/drm/xe/xe_exec.o
CC net/mac80211/chan.o
CC drivers/usb/core/hcd-pci.o
CC drivers/usb/core/usb-acpi.o
CC drivers/md/dm-linear.o
CC drivers/acpi/acpi_apd.o
CC arch/x86/kernel/step.o
CC kernel/cred.o
CC arch/x86/kernel/i8237.o
CC drivers/gpu/drm/i915/intel_wakeref.o
CC net/ipv4/metrics.o
CC net/ipv4/netlink.o
CC drivers/mailbox/mailbox.o
CC drivers/mailbox/pcc.o
CC drivers/firmware/efi/libstub/skip_spaces.o
CC net/ipv6/ip6_checksum.o
CC drivers/acpi/acpi_platform.o
CC net/ipv4/nexthop.o
CC drivers/cpufreq/amd-pstate.o
CC drivers/firmware/efi/libstub/lib-cmdline.o
CC drivers/gpu/drm/i915/vlv_sideband.o
CC drivers/gpu/drm/i915/vlv_suspend.o
CC drivers/acpi/acpica/utosi.o
CC drivers/hid/hid-generic.o
CC net/ipv4/udp_tunnel_stub.o
AR drivers/perf/built-in.a
CC drivers/acpi/acpica/utownerid.o
CC net/ipv6/ip6_icmp.o
CC drivers/firmware/efi/libstub/lib-ctype.o
CC drivers/hid/hid-a4tech.o
CC drivers/firmware/efi/libstub/alignedmem.o
AR drivers/hid/usbhid/built-in.a
CC drivers/acpi/acpi_pnp.o
CC net/ipv4/ip_tunnel.o
AR fs/nfs/built-in.a
CC kernel/reboot.o
AR drivers/platform/x86/built-in.a
CC net/ipv4/sysctl_net_ipv4.o
AR drivers/scsi/built-in.a
AR drivers/platform/built-in.a
CC [M] drivers/gpu/drm/xe/xe_execlist.o
CC net/ipv6/output_core.o
AR drivers/hwtracing/intel_th/built-in.a
CC net/ipv4/proc.o
CC [M] drivers/gpu/drm/xe/xe_exec_queue.o
CC drivers/firmware/efi/libstub/relocate.o
CC net/ipv6/protocol.o
CC arch/x86/kernel/stacktrace.o
AR drivers/net/ethernet/broadcom/built-in.a
CC drivers/md/dm-stripe.o
CC drivers/md/dm-ioctl.o
AR drivers/net/ethernet/cortina/built-in.a
CC drivers/md/dm-io.o
CC [M] drivers/gpu/drm/xe/xe_force_wake.o
AR drivers/net/ethernet/dec/tulip/built-in.a
AR drivers/net/ethernet/dec/built-in.a
AR drivers/net/ethernet/dlink/built-in.a
CC net/ipv6/ip6_offload.o
AR drivers/net/ethernet/emulex/built-in.a
CC net/ipv6/tcpv6_offload.o
AR drivers/net/ethernet/engleder/built-in.a
AR drivers/android/built-in.a
CC drivers/acpi/acpica/utpredef.o
AR drivers/net/ethernet/ezchip/built-in.a
AR drivers/net/ethernet/fujitsu/built-in.a
CC drivers/acpi/acpica/utresdecode.o
CC drivers/cpufreq/amd-pstate-trace.o
AR drivers/net/ethernet/fungible/built-in.a
AR drivers/mailbox/built-in.a
AR drivers/usb/core/built-in.a
CC drivers/acpi/acpica/utresrc.o
AR drivers/net/ethernet/google/built-in.a
AR drivers/usb/phy/built-in.a
AR drivers/net/ethernet/huawei/built-in.a
CC drivers/usb/mon/mon_main.o
CC drivers/usb/mon/mon_stat.o
CC drivers/net/ethernet/intel/e1000/e1000_main.o
AR drivers/nvmem/layouts/built-in.a
CC drivers/nvmem/core.o
CC drivers/usb/mon/mon_text.o
CC drivers/hid/hid-apple.o
CC drivers/gpu/drm/drm_client_modeset.o
CC drivers/net/ethernet/intel/e1000e/82571.o
CC drivers/net/ethernet/intel/e100.o
CC drivers/hid/hid-belkin.o
CC [M] drivers/gpu/drm/xe/xe_ggtt.o
CC drivers/firmware/efi/libstub/printk.o
CC drivers/gpu/drm/drm_color_mgmt.o
CC drivers/net/ethernet/intel/e1000e/ich8lan.o
CC drivers/hid/hid-cherry.o
CC drivers/gpu/drm/drm_connector.o
CC drivers/acpi/acpica/utstate.o
CC drivers/cpufreq/intel_pstate.o
CC fs/proc_namespace.o
CC arch/x86/kernel/reboot.o
CC fs/direct-io.o
CC drivers/firmware/efi/libstub/vsprintf.o
CC drivers/usb/mon/mon_bin.o
CC net/ipv4/fib_rules.o
CC drivers/gpu/drm/drm_crtc.o
CC drivers/gpu/drm/drm_displayid.o
CC kernel/async.o
CC drivers/md/dm-kcopyd.o
CC drivers/net/ethernet/intel/e1000/e1000_hw.o
CC drivers/md/dm-sysfs.o
CC drivers/net/ethernet/intel/e1000/e1000_ethtool.o
CC drivers/usb/host/pci-quirks.o
CC drivers/acpi/acpica/utstring.o
CC drivers/firmware/efi/libstub/x86-stub.o
CC drivers/acpi/acpica/utstrsuppt.o
CC [M] drivers/gpu/drm/xe/xe_gpu_scheduler.o
AR drivers/firmware/efi/built-in.a
CC net/ipv6/exthdrs_offload.o
CC fs/eventpoll.o
CC drivers/hid/hid-chicony.o
CC drivers/usb/host/ehci-hcd.o
CC drivers/usb/class/usblp.o
CC drivers/md/dm-stats.o
CC drivers/hid/hid-cypress.o
CC net/ipv4/ipmr.o
HOSTCC drivers/gpu/drm/xe/xe_gen_wa_oob
CC drivers/gpu/drm/i915/soc/intel_dram.o
CC drivers/net/ethernet/intel/e1000/e1000_param.o
STUBCPY drivers/firmware/efi/libstub/alignedmem.stub.o
CC kernel/range.o
STUBCPY drivers/firmware/efi/libstub/efi-stub-helper.stub.o
CC drivers/acpi/acpica/utstrtoul64.o
CC kernel/smpboot.o
CC drivers/usb/host/ehci-pci.o
AR drivers/nvmem/built-in.a
CC drivers/usb/host/ohci-hcd.o
CC drivers/acpi/acpica/utxface.o
CC net/ipv4/ipmr_base.o
CC drivers/md/dm-rq.o
CC drivers/net/ethernet/intel/e1000e/80003es2lan.o
CC [M] drivers/gpu/drm/xe/xe_gsc_proxy.o
CC arch/x86/kernel/msr.o
CC drivers/net/ethernet/intel/e1000e/mac.o
CC kernel/ucount.o
CC [M] drivers/gpu/drm/xe/xe_gsc_submit.o
CC drivers/gpu/drm/i915/soc/intel_gmch.o
CC drivers/acpi/power.o
CC drivers/net/ethernet/intel/e1000e/manage.o
CC drivers/acpi/acpica/utxfinit.o
AR drivers/net/ethernet/i825xx/built-in.a
CC drivers/gpu/drm/drm_drv.o
AR drivers/net/ethernet/microsoft/built-in.a
CC fs/anon_inodes.o
CC drivers/acpi/acpica/utxferror.o
AR drivers/net/ethernet/litex/built-in.a
CC net/ipv4/syncookies.o
CC net/ipv4/tunnel4.o
AR drivers/usb/mon/built-in.a
AR drivers/net/ethernet/marvell/octeon_ep/built-in.a
CC net/mac80211/trace.o
CC net/ipv4/ipconfig.o
CC drivers/acpi/acpica/utxfmutex.o
AR drivers/net/ethernet/marvell/octeon_ep_vf/built-in.a
CC net/ipv4/netfilter.o
AR drivers/net/ethernet/marvell/octeontx2/built-in.a
STUBCPY drivers/firmware/efi/libstub/file.stub.o
AR drivers/net/ethernet/marvell/prestera/built-in.a
STUBCPY drivers/firmware/efi/libstub/gop.stub.o
CC drivers/net/ethernet/marvell/sky2.o
STUBCPY drivers/firmware/efi/libstub/lib-cmdline.stub.o
STUBCPY drivers/firmware/efi/libstub/lib-ctype.stub.o
STUBCPY drivers/firmware/efi/libstub/mem.stub.o
STUBCPY drivers/firmware/efi/libstub/pci.stub.o
CC drivers/gpu/drm/drm_dumb_buffers.o
CC net/ipv6/inet6_hashtables.o
STUBCPY drivers/firmware/efi/libstub/printk.stub.o
CC drivers/usb/host/ohci-pci.o
STUBCPY drivers/firmware/efi/libstub/random.stub.o
CC kernel/regset.o
STUBCPY drivers/firmware/efi/libstub/randomalloc.stub.o
CC drivers/hid/hid-ezkey.o
STUBCPY drivers/firmware/efi/libstub/relocate.stub.o
STUBCPY drivers/firmware/efi/libstub/secureboot.stub.o
STUBCPY drivers/firmware/efi/libstub/skip_spaces.stub.o
CC drivers/net/ethernet/intel/e1000e/nvm.o
STUBCPY drivers/firmware/efi/libstub/tpm.stub.o
CC drivers/hid/hid-gyration.o
STUBCPY drivers/firmware/efi/libstub/vsprintf.stub.o
CC drivers/gpu/drm/drm_edid.o
STUBCPY drivers/firmware/efi/libstub/x86-stub.stub.o
CC net/ipv4/tcp_cubic.o
AR drivers/firmware/efi/libstub/lib.a
AR drivers/usb/class/built-in.a
CC net/ipv6/mcast_snoop.o
AR drivers/firmware/tegra/built-in.a
AR drivers/net/ethernet/mellanox/built-in.a
CC net/ipv4/tcp_sigpool.o
AR drivers/firmware/xilinx/built-in.a
CC drivers/gpu/drm/drm_eld.o
CC drivers/firmware/dmi_scan.o
CC kernel/ksyms_common.o
CC drivers/hid/hid-ite.o
AR drivers/acpi/acpica/built-in.a
CC arch/x86/kernel/cpuid.o
CC drivers/usb/host/uhci-hcd.o
CC arch/x86/kernel/early-quirks.o
CC [M] drivers/gpu/drm/xe/xe_gt.o
CC drivers/usb/storage/scsiglue.o
CC drivers/acpi/event.o
CC drivers/usb/storage/protocol.o
CC net/ipv4/cipso_ipv4.o
CC drivers/gpu/drm/drm_encoder.o
CC drivers/hid/hid-kensington.o
AR drivers/usb/misc/built-in.a
CC drivers/usb/early/ehci-dbgp.o
CC fs/signalfd.o
CC drivers/gpu/drm/i915/soc/intel_pch.o
AR drivers/cpufreq/built-in.a
CC drivers/gpu/drm/i915/i915_memcpy.o
CC arch/x86/kernel/smp.o
CC net/ipv4/xfrm4_policy.o
CC drivers/gpu/drm/drm_file.o
CC drivers/usb/host/xhci.o
CC drivers/net/ethernet/intel/e1000e/phy.o
CC fs/timerfd.o
CC drivers/gpu/drm/i915/i915_mm.o
CC drivers/firmware/dmi-id.o
CC drivers/gpu/drm/i915/i915_sw_fence.o
CC drivers/usb/host/xhci-mem.o
CC drivers/md/dm-io-rewind.o
CC drivers/usb/host/xhci-ext-caps.o
CC arch/x86/kernel/smpboot.o
CC fs/eventfd.o
CC fs/aio.o
CC kernel/groups.o
CC arch/x86/kernel/tsc_sync.o
CC net/mac80211/mlme.o
CC drivers/md/dm-builtin.o
CC drivers/gpu/drm/drm_fourcc.o
CC drivers/gpu/drm/drm_framebuffer.o
CC arch/x86/kernel/setup_percpu.o
CC drivers/firmware/memmap.o
AR drivers/net/ethernet/intel/e1000/built-in.a
CC drivers/hid/hid-lg.o
CC drivers/acpi/evged.o
CC drivers/hid/hid-lgff.o
CC drivers/hid/hid-lg4ff.o
CC net/ipv4/xfrm4_state.o
CC drivers/hid/hid-lg-g15.o
CC drivers/usb/storage/transport.o
CC arch/x86/kernel/mpparse.o
CC drivers/hid/hid-microsoft.o
CC drivers/hid/hid-monterey.o
CC drivers/usb/host/xhci-ring.o
CC drivers/gpu/drm/i915/i915_sw_fence_work.o
CC net/mac80211/tdls.o
CC net/ipv4/xfrm4_input.o
AR net/ipv6/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gt_ccs_mode.o
CC drivers/net/ethernet/intel/e1000e/param.o
CC net/ipv4/xfrm4_output.o
CC fs/locks.o
CC arch/x86/kernel/trace_clock.o
CC drivers/usb/host/xhci-hub.o
AR drivers/usb/early/built-in.a
CC drivers/gpu/drm/drm_gem.o
CC fs/binfmt_misc.o
CC drivers/gpu/drm/drm_ioctl.o
CC fs/binfmt_script.o
CC drivers/gpu/drm/drm_lease.o
CC net/mac80211/ocb.o
CC arch/x86/kernel/trace.o
CC net/ipv4/xfrm4_protocol.o
CC kernel/kcmp.o
CC drivers/acpi/sysfs.o
CC drivers/gpu/drm/i915/i915_syncmap.o
CC drivers/gpu/drm/i915/i915_user_extensions.o
AR drivers/firmware/built-in.a
CC drivers/usb/storage/usb.o
CC drivers/gpu/drm/i915/i915_debugfs.o
CC drivers/gpu/drm/i915/i915_debugfs_params.o
CC arch/x86/kernel/rethook.o
CC drivers/usb/host/xhci-dbg.o
CC fs/binfmt_elf.o
CC drivers/md/dm-raid1.o
CC arch/x86/kernel/vmcore_info_32.o
CC drivers/usb/storage/initializers.o
CC drivers/usb/host/xhci-trace.o
CC drivers/gpu/drm/i915/i915_pmu.o
CC drivers/gpu/drm/drm_managed.o
CC drivers/hid/hid-ntrig.o
CC [M] drivers/gpu/drm/xe/xe_gt_clock.o
CC [M] drivers/gpu/drm/xe/xe_gt_debugfs.o
CC drivers/acpi/property.o
CC fs/mbcache.o
CC arch/x86/kernel/machine_kexec_32.o
CC drivers/gpu/drm/i915/gt/gen2_engine_cs.o
CC drivers/hid/hid-pl.o
CC drivers/usb/host/xhci-debugfs.o
CC [M] drivers/gpu/drm/xe/xe_gt_freq.o
CC drivers/usb/storage/sierra_ms.o
AS arch/x86/kernel/relocate_kernel_32.o
CC drivers/net/ethernet/intel/e1000e/ethtool.o
CC fs/posix_acl.o
CC drivers/gpu/drm/drm_mm.o
CC drivers/acpi/debugfs.o
CC net/mac80211/airtime.o
CC drivers/md/dm-log.o
CC kernel/freezer.o
CC drivers/net/ethernet/intel/e1000e/netdev.o
CC fs/coredump.o
CC fs/drop_caches.o
CC fs/sysctls.o
CC drivers/gpu/drm/drm_mode_config.o
CC drivers/gpu/drm/drm_mode_object.o
CC arch/x86/kernel/crash_dump_32.o
CC drivers/usb/host/xhci-pci.o
CC drivers/usb/storage/option_ms.o
CC [M] drivers/gpu/drm/xe/xe_gt_idle.o
CC drivers/gpu/drm/i915/gt/gen6_engine_cs.o
CC fs/fhandle.o
AR drivers/net/ethernet/marvell/built-in.a
CC drivers/gpu/drm/drm_modes.o
CC drivers/hid/hid-petalynx.o
CC drivers/net/ethernet/intel/e1000e/ptp.o
AR net/ipv4/built-in.a
CC drivers/usb/storage/usual-tables.o
CC drivers/gpu/drm/drm_modeset_lock.o
CC drivers/md/dm-region-hash.o
CC drivers/gpu/drm/drm_plane.o
CC drivers/md/dm-zero.o
CC drivers/hid/hid-redragon.o
CC drivers/acpi/acpi_lpat.o
CC drivers/gpu/drm/i915/gt/gen6_ppgtt.o
CC arch/x86/kernel/crash.o
CC [M] drivers/gpu/drm/xe/xe_gt_mcr.o
CC drivers/hid/hid-samsung.o
CC drivers/gpu/drm/i915/gt/gen7_renderclear.o
CC drivers/acpi/acpi_pcc.o
CC drivers/acpi/ac.o
CC net/mac80211/eht.o
CC drivers/acpi/button.o
CC drivers/gpu/drm/i915/gt/gen8_engine_cs.o
CC drivers/acpi/fan_core.o
CC drivers/acpi/fan_attr.o
CC kernel/profile.o
CC drivers/acpi/acpi_video.o
CC drivers/gpu/drm/drm_prime.o
CC drivers/gpu/drm/drm_print.o
CC drivers/gpu/drm/drm_property.o
CC drivers/gpu/drm/i915/gt/gen8_ppgtt.o
CC drivers/gpu/drm/drm_syncobj.o
CC arch/x86/kernel/module.o
CC drivers/gpu/drm/drm_sysfs.o
AR drivers/usb/storage/built-in.a
CC drivers/gpu/drm/drm_trace_points.o
CC drivers/gpu/drm/drm_vblank.o
CC net/mac80211/led.o
CC drivers/acpi/video_detect.o
CC drivers/acpi/processor_driver.o
CC drivers/hid/hid-sony.o
AR drivers/net/ethernet/micrel/built-in.a
CC drivers/hid/hid-sunplus.o
CC drivers/hid/hid-topseed.o
CC net/mac80211/pm.o
CC drivers/acpi/processor_thermal.o
CC net/mac80211/rc80211_minstrel_ht.o
CC arch/x86/kernel/doublefault_32.o
CC kernel/stacktrace.o
CC arch/x86/kernel/early_printk.o
CC drivers/acpi/processor_idle.o
CC kernel/dma.o
CC drivers/acpi/processor_throttling.o
CC [M] drivers/gpu/drm/xe/xe_gt_pagefault.o
CC drivers/gpu/drm/drm_vblank_work.o
AR drivers/md/built-in.a
CC drivers/gpu/drm/drm_vma_manager.o
CC drivers/acpi/processor_perflib.o
CC [M] drivers/gpu/drm/xe/xe_gt_sysfs.o
CC net/mac80211/wbrf.o
CC kernel/smp.o
CC drivers/gpu/drm/drm_writeback.o
CC kernel/uid16.o
CC drivers/gpu/drm/drm_panel.o
CC [M] drivers/gpu/drm/xe/xe_gt_throttle.o
CC [M] drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
CC arch/x86/kernel/hpet.o
AR fs/built-in.a
CC arch/x86/kernel/amd_nb.o
CC arch/x86/kernel/kvm.o
AR drivers/net/ethernet/microchip/built-in.a
CC arch/x86/kernel/kvmclock.o
CC drivers/gpu/drm/drm_pci.o
CC [M] drivers/gpu/drm/xe/xe_gt_topology.o
AR drivers/usb/host/built-in.a
AR drivers/usb/built-in.a
CC kernel/kallsyms.o
CC kernel/acct.o
CC kernel/vmcore_info.o
CC kernel/elfcorehdr.o
CC drivers/acpi/container.o
CC drivers/gpu/drm/i915/gt/intel_breadcrumbs.o
AR drivers/net/ethernet/mscc/built-in.a
CC drivers/gpu/drm/i915/gt/intel_context.o
CC kernel/crash_reserve.o
CC drivers/gpu/drm/i915/gt/intel_context_sseu.o
GEN xe_wa_oob.c xe_wa_oob.h
CC arch/x86/kernel/paravirt.o
CC [M] drivers/gpu/drm/xe/xe_guc_ct.o
CC arch/x86/kernel/pvclock.o
CC arch/x86/kernel/pcspeaker.o
CC drivers/acpi/thermal_lib.o
CC drivers/acpi/thermal.o
CC drivers/acpi/nhlt.o
CC drivers/gpu/drm/i915/gt/intel_engine_cs.o
CC drivers/gpu/drm/drm_debugfs.o
AR drivers/net/ethernet/myricom/built-in.a
CC drivers/gpu/drm/drm_debugfs_crc.o
AR drivers/net/ethernet/natsemi/built-in.a
AR drivers/net/ethernet/neterion/built-in.a
CC drivers/acpi/acpi_memhotplug.o
CC arch/x86/kernel/check.o
AR drivers/net/ethernet/netronome/built-in.a
CC kernel/kexec_core.o
CC [M] drivers/gpu/drm/xe/xe_guc_db_mgr.o
CC arch/x86/kernel/uprobes.o
CC [M] drivers/gpu/drm/xe/xe_guc_debugfs.o
CC arch/x86/kernel/perf_regs.o
AR drivers/hid/built-in.a
CC kernel/crash_core.o
CC drivers/gpu/drm/i915/gt/intel_engine_heartbeat.o
AR drivers/net/ethernet/ni/built-in.a
CC drivers/net/ethernet/nvidia/forcedeth.o
AR drivers/net/ethernet/oki-semi/built-in.a
AR drivers/net/ethernet/packetengines/built-in.a
AR drivers/net/ethernet/qlogic/built-in.a
CC drivers/gpu/drm/drm_panel_orientation_quirks.o
CC drivers/gpu/drm/drm_buddy.o
CC drivers/acpi/ioapic.o
AR drivers/net/ethernet/qualcomm/emac/built-in.a
AR drivers/net/ethernet/qualcomm/built-in.a
CC drivers/acpi/battery.o
CC arch/x86/kernel/tracepoint.o
CC kernel/kexec.o
AR drivers/net/ethernet/renesas/built-in.a
CC drivers/net/ethernet/realtek/8139too.o
CC arch/x86/kernel/itmt.o
CC drivers/gpu/drm/drm_gem_shmem_helper.o
CC arch/x86/kernel/umip.o
CC drivers/net/ethernet/realtek/r8169_main.o
CC [M] drivers/gpu/drm/xe/xe_guc_hwconfig.o
AR drivers/net/ethernet/rdc/built-in.a
CC arch/x86/kernel/unwind_frame.o
AR drivers/net/ethernet/rocker/built-in.a
AR drivers/net/ethernet/samsung/built-in.a
AR drivers/net/ethernet/seeq/built-in.a
CC kernel/utsname.o
AR drivers/net/ethernet/sis/built-in.a
AR drivers/net/ethernet/silan/built-in.a
CC drivers/gpu/drm/i915/gt/intel_engine_pm.o
AR drivers/net/ethernet/sfc/built-in.a
CC [M] drivers/gpu/drm/xe/xe_guc_id_mgr.o
CC drivers/net/ethernet/realtek/r8169_firmware.o
AR drivers/net/ethernet/smsc/built-in.a
CC drivers/net/ethernet/realtek/r8169_phy_config.o
CC kernel/pid_namespace.o
CC drivers/acpi/bgrt.o
CC drivers/acpi/spcr.o
CC kernel/stop_machine.o
CC kernel/audit.o
CC kernel/auditfilter.o
AR drivers/net/ethernet/socionext/built-in.a
CC [M] drivers/gpu/drm/xe/xe_guc_klv_helpers.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
AR drivers/net/ethernet/ti/built-in.a
CC [M] drivers/gpu/drm/xe/xe_guc_log.o
AR drivers/net/ethernet/vertexcom/built-in.a
AR drivers/net/ethernet/via/built-in.a
AR drivers/net/ethernet/wangxun/built-in.a
AR drivers/net/ethernet/wiznet/built-in.a
CC [M] drivers/gpu/drm/xe/xe_guc_pc.o
CC kernel/auditsc.o
CC drivers/gpu/drm/drm_atomic_helper.o
CC drivers/gpu/drm/i915/gt/intel_engine_user.o
CC drivers/gpu/drm/i915/gt/intel_execlists_submission.o
CC [M] drivers/gpu/drm/xe/xe_guc_submit.o
CC [M] drivers/gpu/drm/xe/xe_heci_gsc.o
CC drivers/gpu/drm/i915/gt/intel_ggtt.o
CC kernel/audit_watch.o
CC drivers/gpu/drm/drm_atomic_state_helper.o
AR drivers/net/ethernet/xilinx/built-in.a
CC drivers/gpu/drm/i915/gt/intel_ggtt_fencing.o
AR drivers/net/ethernet/xircom/built-in.a
AR drivers/net/ethernet/synopsys/built-in.a
CC drivers/gpu/drm/i915/gt/intel_gt.o
CC drivers/gpu/drm/drm_bridge_connector.o
AR drivers/net/ethernet/pensando/built-in.a
CC [M] drivers/gpu/drm/xe/xe_hw_engine.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.o
CC kernel/audit_fsnotify.o
CC kernel/audit_tree.o
CC [M] drivers/gpu/drm/xe/xe_hw_fence.o
CC kernel/kprobes.o
CC kernel/seccomp.o
CC drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.o
CC [M] drivers/gpu/drm/xe/xe_huc.o
CC kernel/relay.o
CC [M] drivers/gpu/drm/xe/xe_huc_debugfs.o
AR arch/x86/kernel/built-in.a
CC drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.o
AR arch/x86/built-in.a
CC kernel/utsname_sysctl.o
CC drivers/gpu/drm/i915/gt/intel_gt_clock_utils.o
CC [M] drivers/gpu/drm/xe/xe_irq.o
CC drivers/gpu/drm/drm_crtc_helper.o
CC kernel/delayacct.o
AR drivers/acpi/built-in.a
CC kernel/taskstats.o
CC drivers/gpu/drm/drm_damage_helper.o
CC kernel/tsacct.o
CC [M] drivers/gpu/drm/xe/xe_lrc.o
CC kernel/tracepoint.o
CC [M] drivers/gpu/drm/xe/xe_migrate.o
CC drivers/gpu/drm/i915/gt/intel_gt_debugfs.o
CC drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_mmio.o
CC drivers/gpu/drm/i915/gt/intel_gt_irq.o
CC drivers/gpu/drm/drm_encoder_slave.o
CC drivers/gpu/drm/drm_flip_work.o
AR drivers/net/ethernet/intel/e1000e/built-in.a
AR drivers/net/ethernet/intel/built-in.a
CC drivers/gpu/drm/drm_format_helper.o
CC [M] drivers/gpu/drm/xe/xe_mocs.o
CC [M] drivers/gpu/drm/xe/xe_module.o
CC [M] drivers/gpu/drm/xe/xe_pat.o
CC drivers/gpu/drm/i915/gt/intel_gt_mcr.o
CC drivers/gpu/drm/drm_gem_atomic_helper.o
CC [M] drivers/gpu/drm/xe/xe_pci.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm.o
CC kernel/irq_work.o
CC [M] drivers/gpu/drm/xe/xe_pcode.o
CC kernel/static_call.o
CC kernel/padata.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm_irq.o
CC drivers/gpu/drm/drm_gem_framebuffer_helper.o
CC drivers/gpu/drm/i915/gt/intel_gt_requests.o
CC [M] drivers/gpu/drm/xe/xe_pm.o
CC [M] drivers/gpu/drm/xe/xe_preempt_fence.o
CC drivers/gpu/drm/i915/gt/intel_gt_sysfs.o
CC drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.o
CC drivers/gpu/drm/drm_kms_helper_common.o
CC drivers/gpu/drm/i915/gt/intel_gtt.o
CC drivers/gpu/drm/i915/gt/intel_llc.o
CC drivers/gpu/drm/i915/gt/intel_lrc.o
CC [M] drivers/gpu/drm/xe/xe_pt.o
CC [M] drivers/gpu/drm/xe/xe_pt_walk.o
CC kernel/jump_label.o
CC kernel/context_tracking.o
CC drivers/gpu/drm/drm_modeset_helper.o
CC drivers/gpu/drm/drm_plane_helper.o
CC drivers/gpu/drm/i915/gt/intel_migrate.o
CC kernel/iomem.o
CC kernel/rseq.o
CC drivers/gpu/drm/i915/gt/intel_mocs.o
CC drivers/gpu/drm/i915/gt/intel_ppgtt.o
CC drivers/gpu/drm/drm_probe_helper.o
CC drivers/gpu/drm/drm_rect.o
CC drivers/gpu/drm/i915/gt/intel_rc6.o
CC drivers/gpu/drm/drm_self_refresh_helper.o
CC drivers/gpu/drm/i915/gt/intel_region_lmem.o
CC drivers/gpu/drm/drm_simple_kms_helper.o
CC drivers/gpu/drm/bridge/panel.o
CC [M] drivers/gpu/drm/xe/xe_query.o
CC drivers/gpu/drm/drm_mipi_dsi.o
CC [M] drivers/gpu/drm/drm_exec.o
CC [M] drivers/gpu/drm/xe/xe_range_fence.o
CC [M] drivers/gpu/drm/xe/xe_reg_sr.o
CC [M] drivers/gpu/drm/xe/xe_reg_whitelist.o
CC drivers/gpu/drm/i915/gt/intel_renderstate.o
CC [M] drivers/gpu/drm/xe/xe_rtp.o
CC [M] drivers/gpu/drm/xe/xe_ring_ops.o
CC [M] drivers/gpu/drm/xe/xe_sa.o
CC [M] drivers/gpu/drm/xe/xe_sched_job.o
CC [M] drivers/gpu/drm/drm_gpuvm.o
CC drivers/gpu/drm/i915/gt/intel_reset.o
AR drivers/net/ethernet/nvidia/built-in.a
CC drivers/gpu/drm/i915/gt/intel_ring.o
CC [M] drivers/gpu/drm/drm_suballoc.o
CC [M] drivers/gpu/drm/drm_gem_ttm_helper.o
CC drivers/gpu/drm/i915/gt/intel_ring_submission.o
CC [M] drivers/gpu/drm/xe/xe_step.o
CC drivers/gpu/drm/i915/gt/intel_rps.o
CC [M] drivers/gpu/drm/xe/xe_sync.o
AR drivers/net/ethernet/realtek/built-in.a
CC [M] drivers/gpu/drm/xe/xe_tile.o
AR net/mac80211/built-in.a
CC [M] drivers/gpu/drm/xe/xe_tile_sysfs.o
AR drivers/net/ethernet/built-in.a
AR net/built-in.a
CC drivers/gpu/drm/i915/gt/intel_sa_media.o
CC [M] drivers/gpu/drm/xe/xe_trace.o
CC drivers/gpu/drm/i915/gt/intel_sseu.o
CC [M] drivers/gpu/drm/xe/xe_trace_bo.o
CC drivers/gpu/drm/i915/gt/intel_sseu_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_trace_guc.o
CC drivers/gpu/drm/i915/gt/intel_timeline.o
CC [M] drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
CC [M] drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
AR drivers/net/built-in.a
CC [M] drivers/gpu/drm/xe/xe_ttm_vram_mgr.o
CC drivers/gpu/drm/i915/gt/intel_tlb.o
CC drivers/gpu/drm/i915/gt/intel_wopcm.o
CC [M] drivers/gpu/drm/xe/xe_tuning.o
CC [M] drivers/gpu/drm/xe/xe_uc.o
CC drivers/gpu/drm/i915/gt/intel_workarounds.o
AR kernel/built-in.a
CC [M] drivers/gpu/drm/xe/xe_uc_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_uc_fw.o
CC drivers/gpu/drm/i915/gt/shmem_utils.o
CC drivers/gpu/drm/i915/gt/sysfs_engines.o
CC [M] drivers/gpu/drm/xe/xe_vm.o
CC drivers/gpu/drm/i915/gt/intel_ggtt_gmch.o
CC drivers/gpu/drm/i915/gt/gen6_renderstate.o
CC [M] drivers/gpu/drm/xe/xe_vram.o
LD [M] drivers/gpu/drm/drm_suballoc_helper.o
CC [M] drivers/gpu/drm/xe/xe_vram_freq.o
CC drivers/gpu/drm/i915/gt/gen7_renderstate.o
CC drivers/gpu/drm/i915/gt/gen8_renderstate.o
CC [M] drivers/gpu/drm/xe/xe_wait_user_fence.o
CC [M] drivers/gpu/drm/xe/xe_wa.o
LD [M] drivers/gpu/drm/drm_ttm_helper.o
CC [M] drivers/gpu/drm/xe/xe_wopcm.o
CC [M] drivers/gpu/drm/xe/xe_hmm.o
CC drivers/gpu/drm/i915/gt/gen9_renderstate.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_busy.o
CC [M] drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_guc_relay.o
CC [M] drivers/gpu/drm/xe/xe_memirq.o
CC [M] drivers/gpu/drm/xe/xe_sriov.o
CC drivers/gpu/drm/i915/gem/i915_gem_clflush.o
CC drivers/gpu/drm/i915/gem/i915_gem_context.o
CC [M] drivers/gpu/drm/xe/display/ext/i915_irq.o
CC drivers/gpu/drm/i915/gem/i915_gem_create.o
CC drivers/gpu/drm/i915/gem/i915_gem_dmabuf.o
CC [M] drivers/gpu/drm/xe/display/ext/i915_utils.o
CC drivers/gpu/drm/i915/gem/i915_gem_domain.o
CC drivers/gpu/drm/i915/gem/i915_gem_execbuffer.o
CC drivers/gpu/drm/i915/gem/i915_gem_internal.o
CC [M] drivers/gpu/drm/xe/display/intel_fb_bo.o
CC drivers/gpu/drm/i915/gem/i915_gem_lmem.o
CC [M] drivers/gpu/drm/xe/display/intel_fbdev_fb.o
CC drivers/gpu/drm/i915/gem/i915_gem_mman.o
CC [M] drivers/gpu/drm/xe/display/xe_display.o
CC drivers/gpu/drm/i915/gem/i915_gem_object.o
CC drivers/gpu/drm/i915/gem/i915_gem_pages.o
CC drivers/gpu/drm/i915/gem/i915_gem_phys.o
CC drivers/gpu/drm/i915/gem/i915_gem_pm.o
CC drivers/gpu/drm/i915/gem/i915_gem_region.o
CC [M] drivers/gpu/drm/xe/display/xe_display_misc.o
CC drivers/gpu/drm/i915/gem/i915_gem_shmem.o
CC drivers/gpu/drm/i915/gem/i915_gem_shrinker.o
CC [M] drivers/gpu/drm/xe/display/xe_display_rps.o
CC drivers/gpu/drm/i915/gem/i915_gem_stolen.o
CC [M] drivers/gpu/drm/xe/display/xe_dsb_buffer.o
CC [M] drivers/gpu/drm/xe/display/xe_fb_pin.o
CC drivers/gpu/drm/i915/gem/i915_gem_throttle.o
CC drivers/gpu/drm/i915/gem/i915_gem_tiling.o
CC [M] drivers/gpu/drm/xe/display/xe_hdcp_gsc.o
CC [M] drivers/gpu/drm/xe/display/xe_plane_initial.o
CC [M] drivers/gpu/drm/xe/display/xe_tdf.o
CC [M] drivers/gpu/drm/xe/i915-soc/intel_dram.o
CC [M] drivers/gpu/drm/xe/i915-soc/intel_pch.o
CC [M] drivers/gpu/drm/xe/i915-display/icl_dsi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_alpm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_atomic.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_atomic_plane.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm_move.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_audio.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_backlight.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_bios.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_bw.o
CC drivers/gpu/drm/i915/gem/i915_gem_userptr.o
CC drivers/gpu/drm/i915/gem/i915_gem_wait.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_cdclk.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_color.o
CC drivers/gpu/drm/i915/gem/i915_gemfs.o
CC drivers/gpu/drm/i915/i915_active.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_combo_phy.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 [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/i915_gem_evict.o
CC drivers/gpu/drm/i915/i915_gem_gtt.o
CC drivers/gpu/drm/i915/i915_gem_ww.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_cursor.o
In file included from /workspace/kernel/include/drm/drm_mm.h:51,
from /workspace/kernel/drivers/gpu/drm/i915/gem/i915_gem_stolen.c:10:
/workspace/kernel/drivers/gpu/drm/i915/gem/i915_gem_stolen.c: In function ‘i915_gem_stolen_lmem_setup’:
/workspace/kernel/drivers/gpu/drm/i915/gem/i915_gem_stolen.c:941:5: error: format ‘%lli’ expects argument of type ‘long long int’, but argument 5 has type ‘resource_size_t’ {aka ‘unsigned int’} [-Werror=format=]
941 | "Disabling stolen memory support due to OOB placement: lmem_size = %lli vs dsm_base = %lli\n",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
942 | lmem_size, dsm_base);
| ~~~~~~~~~
| |
| resource_size_t {aka unsigned int}
/workspace/kernel/include/drm/drm_print.h:424:32: note: in definition of macro ‘drm_dev_dbg’
424 | __drm_dev_dbg(NULL, dev, cat, fmt, ##__VA_ARGS__)
| ^~~
/workspace/kernel/include/drm/drm_print.h:524:32: note: in expansion of macro ‘drm_dbg_driver’
524 | #define drm_dbg(drm, fmt, ...) drm_dbg_driver(drm, fmt, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~
/workspace/kernel/drivers/gpu/drm/i915/gem/i915_gem_stolen.c:940:4: note: in expansion of macro ‘drm_dbg’
940 | drm_dbg(&i915->drm,
| ^~~~~~~
/workspace/kernel/drivers/gpu/drm/i915/gem/i915_gem_stolen.c:941:75: note: format string is defined here
941 | "Disabling stolen memory support due to OOB placement: lmem_size = %lli vs dsm_base = %lli\n",
| ~~~^
| |
| long long int
| %i
In file included from /workspace/kernel/include/drm/drm_mm.h:51,
from /workspace/kernel/drivers/gpu/drm/i915/gem/i915_gem_stolen.c:10:
/workspace/kernel/drivers/gpu/drm/i915/gem/i915_gem_stolen.c:941:5: error: format ‘%lli’ expects argument of type ‘long long int’, but argument 6 has type ‘resource_size_t’ {aka ‘unsigned int’} [-Werror=format=]
941 | "Disabling stolen memory support due to OOB placement: lmem_size = %lli vs dsm_base = %lli\n",
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
942 | lmem_size, dsm_base);
| ~~~~~~~~
| |
| resource_size_t {aka unsigned int}
/workspace/kernel/include/drm/drm_print.h:424:32: note: in definition of macro ‘drm_dev_dbg’
424 | __drm_dev_dbg(NULL, dev, cat, fmt, ##__VA_ARGS__)
| ^~~
/workspace/kernel/include/drm/drm_print.h:524:32: note: in expansion of macro ‘drm_dbg_driver’
524 | #define drm_dbg(drm, fmt, ...) drm_dbg_driver(drm, fmt, ##__VA_ARGS__)
| ^~~~~~~~~~~~~~
/workspace/kernel/drivers/gpu/drm/i915/gem/i915_gem_stolen.c:940:4: note: in expansion of macro ‘drm_dbg’
940 | drm_dbg(&i915->drm,
| ^~~~~~~
/workspace/kernel/drivers/gpu/drm/i915/gem/i915_gem_stolen.c:941:94: note: format string is defined here
941 | "Disabling stolen memory support due to OOB placement: lmem_size = %lli vs dsm_base = %lli\n",
| ~~~^
| |
| long long int
| %i
CC drivers/gpu/drm/i915/i915_query.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_cx0_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_ddi.o
CC drivers/gpu/drm/i915/i915_request.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_ddi_buf_trans.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_device.o
CC drivers/gpu/drm/i915/i915_scheduler.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_driver.o
CC drivers/gpu/drm/i915/i915_trace_points.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_irq.o
CC drivers/gpu/drm/i915/i915_ttm_buddy_manager.o
CC drivers/gpu/drm/i915/i915_vma.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_params.o
CC drivers/gpu/drm/i915/i915_vma_resource.o
cc1: all warnings being treated as errors
make[6]: *** [/workspace/kernel/scripts/Makefile.build:244: drivers/gpu/drm/i915/gem/i915_gem_stolen.o] Error 1
make[6]: *** Waiting for unfinished jobs....
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power_map.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power_well.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_trace.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_wa.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dkl_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dmc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_aux.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_aux_backlight.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_hdcp.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_link_training.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_mst.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpll.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpll_mgr.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpt_common.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_drrs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsb.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi_dcs_backlight.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi_vbt.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_encoder.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fb.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fbc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fdi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fifo_underrun.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_frontbuffer.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_global_state.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_gmbus.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdcp.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdcp_gsc_message.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdmi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hotplug.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hotplug_irq.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hti.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_link_bw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_lspcon.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_lock.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_setup.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_verify.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_panel.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pmdemand.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pps.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_psr.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_qp_tables.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_quirks.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_snps_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_tc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vblank.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vdsc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vga.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vrr.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dmc_wl.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_wm.o
CC [M] drivers/gpu/drm/xe/i915-display/skl_scaler.o
CC [M] drivers/gpu/drm/xe/i915-display/skl_universal_plane.o
CC [M] drivers/gpu/drm/xe/i915-display/skl_watermark.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_acpi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_opregion.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_debugfs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_debugfs_params.o
make[5]: *** [/workspace/kernel/scripts/Makefile.build:485: drivers/gpu/drm/i915] Error 2
make[5]: *** Waiting for unfinished jobs....
CC [M] drivers/gpu/drm/xe/i915-display/intel_pipe_crc.o
CC [M] drivers/gpu/drm/xe/xe_gsc.o
CC [M] drivers/gpu/drm/xe/xe_guc.o
CC [M] drivers/gpu/drm/xe/xe_guc_ads.o
LD [M] drivers/gpu/drm/xe/xe.o
make[4]: *** [/workspace/kernel/scripts/Makefile.build:485: drivers/gpu/drm] Error 2
make[3]: *** [/workspace/kernel/scripts/Makefile.build:485: drivers/gpu] Error 2
make[2]: *** [/workspace/kernel/scripts/Makefile.build:485: drivers] Error 2
make[1]: *** [/workspace/kernel/Makefile:1934: .] Error 2
make: *** [/workspace/kernel/Makefile:240: __sub-make] Error 2
run-parts: /workspace/ci/hooks/11-build-32b exited with return code 2
^ permalink raw reply [flat|nested] 23+ messages in thread
* ✓ CI.checksparse: success for Convert multiple bind ops to 1 job (rev4)
2024-06-18 17:15 [PATCH v4 0/7] Convert multiple bind ops to 1 job Matthew Brost
` (11 preceding siblings ...)
2024-06-18 17:34 ` ✗ CI.Hooks: failure " Patchwork
@ 2024-06-18 17:35 ` Patchwork
2024-06-18 17:58 ` ✗ CI.BAT: failure " Patchwork
2024-06-19 6:54 ` ✗ CI.FULL: " Patchwork
14 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-06-18 17:35 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
== Series Details ==
Series: Convert multiple bind ops to 1 job (rev4)
URL : https://patchwork.freedesktop.org/series/133034/
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 fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c
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] 23+ messages in thread
* ✗ CI.BAT: failure for Convert multiple bind ops to 1 job (rev4)
2024-06-18 17:15 [PATCH v4 0/7] Convert multiple bind ops to 1 job Matthew Brost
` (12 preceding siblings ...)
2024-06-18 17:35 ` ✓ CI.checksparse: success " Patchwork
@ 2024-06-18 17:58 ` Patchwork
2024-06-19 6:54 ` ✗ CI.FULL: " Patchwork
14 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-06-18 17:58 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 1839 bytes --]
== Series Details ==
Series: Convert multiple bind ops to 1 job (rev4)
URL : https://patchwork.freedesktop.org/series/133034/
State : failure
== Summary ==
CI Bug Log - changes from xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c_BAT -> xe-pw-133034v4_BAT
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-133034v4_BAT absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-133034v4_BAT, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (5 -> 5)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-133034v4_BAT:
### IGT changes ###
#### Possible regressions ####
* igt@xe_live_ktest@xe_bo@xe_bo_evict_kunit:
- bat-atsm-2: [PASS][1] -> [FAIL][2] +1 other test fail
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/bat-atsm-2/igt@xe_live_ktest@xe_bo@xe_bo_evict_kunit.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/bat-atsm-2/igt@xe_live_ktest@xe_bo@xe_bo_evict_kunit.html
Build changes
-------------
* Linux: xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c -> xe-pw-133034v4
IGT_7891: 732f3aaf49c9cc62ff3518a56ece1a825c08d22e @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c: fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c
xe-pw-133034v4: 133034v4
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/index.html
[-- Attachment #2: Type: text/html, Size: 2424 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* ✗ CI.FULL: failure for Convert multiple bind ops to 1 job (rev4)
2024-06-18 17:15 [PATCH v4 0/7] Convert multiple bind ops to 1 job Matthew Brost
` (13 preceding siblings ...)
2024-06-18 17:58 ` ✗ CI.BAT: failure " Patchwork
@ 2024-06-19 6:54 ` Patchwork
14 siblings, 0 replies; 23+ messages in thread
From: Patchwork @ 2024-06-19 6:54 UTC (permalink / raw)
To: Matthew Brost; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 84310 bytes --]
== Series Details ==
Series: Convert multiple bind ops to 1 job (rev4)
URL : https://patchwork.freedesktop.org/series/133034/
State : failure
== Summary ==
CI Bug Log - changes from xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c_full -> xe-pw-133034v4_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-133034v4_full absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-133034v4_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-133034v4_full:
### IGT changes ###
#### Possible regressions ####
* igt@kms_pipe_crc_basic@read-crc@pipe-c-hdmi-a-1:
- shard-adlp: [PASS][1] -> [ABORT][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_pipe_crc_basic@read-crc@pipe-c-hdmi-a-1.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-2/igt@kms_pipe_crc_basic@read-crc@pipe-c-hdmi-a-1.html
#### Warnings ####
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-render:
- shard-adlp: [SKIP][3] ([Intel XE#1201] / [Intel XE#656]) -> [FAIL][4]
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-render.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-pri-indfb-draw-render.html
* igt@kms_vblank@ts-continuation-suspend:
- shard-dg2-set2: [DMESG-WARN][5] ([Intel XE#1214]) -> [DMESG-WARN][6] +1 other test dmesg-warn
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-463/igt@kms_vblank@ts-continuation-suspend.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_vblank@ts-continuation-suspend.html
* igt@xe_exec_reset@parallel-gt-reset:
- shard-dg2-set2: [INCOMPLETE][7] ([Intel XE#1195]) -> [INCOMPLETE][8]
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@xe_exec_reset@parallel-gt-reset.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@xe_exec_reset@parallel-gt-reset.html
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible:
- {shard-lnl}: [PASS][9] -> [FAIL][10] +1 other test fail
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-lnl-2/igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible.html
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-lnl-6/igt@kms_flip@flip-vs-absolute-wf_vblank-interruptible.html
* igt@kms_psr@fbc-psr2-suspend:
- {shard-lnl}: [PASS][11] -> [DMESG-WARN][12] +3 other tests dmesg-warn
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-lnl-6/igt@kms_psr@fbc-psr2-suspend.html
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-lnl-7/igt@kms_psr@fbc-psr2-suspend.html
* igt@kms_psr@psr2-suspend:
- {shard-lnl}: NOTRUN -> [DMESG-WARN][13] +2 other tests dmesg-warn
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-lnl-3/igt@kms_psr@psr2-suspend.html
* igt@xe_exec_fault_mode@once-bindexecqueue-rebind-prefetch:
- {shard-lnl}: [PASS][14] -> [INCOMPLETE][15]
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-lnl-6/igt@xe_exec_fault_mode@once-bindexecqueue-rebind-prefetch.html
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-lnl-5/igt@xe_exec_fault_mode@once-bindexecqueue-rebind-prefetch.html
Known issues
------------
Here are the changes found in xe-pw-133034v4_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@intel_hwmon@hwmon-write:
- shard-adlp: NOTRUN -> [SKIP][16] ([Intel XE#1125] / [Intel XE#1201])
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@intel_hwmon@hwmon-write.html
* igt@kms_big_fb@4-tiled-addfb-size-offset-overflow:
- shard-adlp: NOTRUN -> [SKIP][17] ([Intel XE#1201] / [Intel XE#607])
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-1/igt@kms_big_fb@4-tiled-addfb-size-offset-overflow.html
* igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
- shard-adlp: NOTRUN -> [SKIP][18] ([Intel XE#1124] / [Intel XE#1201]) +4 other tests skip
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_big_fb@4-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
* igt@kms_big_fb@linear-32bpp-rotate-270:
- shard-adlp: NOTRUN -> [SKIP][19] ([Intel XE#1201] / [Intel XE#316]) +1 other test skip
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_big_fb@linear-32bpp-rotate-270.html
* igt@kms_big_fb@x-tiled-32bpp-rotate-270:
- shard-dg2-set2: NOTRUN -> [SKIP][20] ([Intel XE#1201] / [Intel XE#316])
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_big_fb@x-tiled-32bpp-rotate-270.html
* igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip:
- shard-adlp: NOTRUN -> [FAIL][21] ([Intel XE#1231]) +1 other test fail
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-0-async-flip.html
* igt@kms_big_fb@yf-tiled-8bpp-rotate-270:
- shard-dg2-set2: NOTRUN -> [SKIP][22] ([Intel XE#1124] / [Intel XE#1201])
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-464/igt@kms_big_fb@yf-tiled-8bpp-rotate-270.html
* igt@kms_bw@linear-tiling-3-displays-2160x1440p:
- shard-dg2-set2: NOTRUN -> [SKIP][23] ([Intel XE#1201] / [Intel XE#367])
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_bw@linear-tiling-3-displays-2160x1440p.html
* igt@kms_bw@linear-tiling-4-displays-1920x1080p:
- shard-adlp: NOTRUN -> [SKIP][24] ([Intel XE#1201] / [Intel XE#367])
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_bw@linear-tiling-4-displays-1920x1080p.html
* igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-1:
- shard-adlp: NOTRUN -> [SKIP][25] ([Intel XE#1201] / [Intel XE#787]) +23 other tests skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_ccs@bad-rotation-90-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-1.html
* igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs-cc@pipe-d-hdmi-a-6:
- shard-dg2-set2: NOTRUN -> [SKIP][26] ([Intel XE#1201] / [Intel XE#787]) +13 other tests skip
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-464/igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs-cc@pipe-d-hdmi-a-6.html
* igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs@pipe-d-dp-4:
- shard-dg2-set2: NOTRUN -> [SKIP][27] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) +3 other tests skip
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs@pipe-d-dp-4.html
* igt@kms_ccs@random-ccs-data-y-tiled-gen12-rc-ccs-cc@pipe-d-hdmi-a-1:
- shard-adlp: NOTRUN -> [SKIP][28] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) +15 other tests skip
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_ccs@random-ccs-data-y-tiled-gen12-rc-ccs-cc@pipe-d-hdmi-a-1.html
* igt@kms_chamelium_color@ctm-blue-to-red:
- shard-adlp: NOTRUN -> [SKIP][29] ([Intel XE#1201] / [Intel XE#306]) +1 other test skip
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_chamelium_color@ctm-blue-to-red.html
* igt@kms_chamelium_color@ctm-red-to-blue:
- shard-dg2-set2: NOTRUN -> [SKIP][30] ([Intel XE#1201] / [Intel XE#306]) +1 other test skip
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_chamelium_color@ctm-red-to-blue.html
* igt@kms_chamelium_frames@dp-crc-multiple:
- shard-adlp: NOTRUN -> [SKIP][31] ([Intel XE#1201] / [Intel XE#373]) +3 other tests skip
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_chamelium_frames@dp-crc-multiple.html
* igt@kms_content_protection@atomic-dpms:
- shard-dg2-set2: NOTRUN -> [FAIL][32] ([Intel XE#1178]) +1 other test fail
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-464/igt@kms_content_protection@atomic-dpms.html
* igt@kms_cursor_crc@cursor-onscreen-512x512:
- shard-adlp: NOTRUN -> [SKIP][33] ([Intel XE#1201] / [Intel XE#308]) +1 other test skip
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-1/igt@kms_cursor_crc@cursor-onscreen-512x512.html
* igt@kms_cursor_legacy@2x-cursor-vs-flip-legacy:
- shard-dg2-set2: [PASS][34] -> [DMESG-WARN][35] ([Intel XE#1214] / [Intel XE#282] / [Intel XE#910]) +1 other test dmesg-warn
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-434/igt@kms_cursor_legacy@2x-cursor-vs-flip-legacy.html
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-435/igt@kms_cursor_legacy@2x-cursor-vs-flip-legacy.html
* igt@kms_cursor_legacy@cursor-vs-flip-atomic-transitions:
- shard-dg2-set2: [PASS][36] -> [DMESG-WARN][37] ([Intel XE#282]) +1 other test dmesg-warn
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-463/igt@kms_cursor_legacy@cursor-vs-flip-atomic-transitions.html
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_cursor_legacy@cursor-vs-flip-atomic-transitions.html
* igt@kms_cursor_legacy@cursorb-vs-flipa-legacy:
- shard-adlp: NOTRUN -> [SKIP][38] ([Intel XE#1201] / [Intel XE#309]) +3 other tests skip
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_cursor_legacy@cursorb-vs-flipa-legacy.html
* igt@kms_cursor_legacy@forked-move@all-pipes:
- shard-dg2-set2: NOTRUN -> [DMESG-WARN][39] ([Intel XE#1214] / [Intel XE#282])
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_cursor_legacy@forked-move@all-pipes.html
* igt@kms_cursor_legacy@forked-move@pipe-b:
- shard-dg2-set2: [PASS][40] -> [DMESG-WARN][41] ([Intel XE#1214] / [Intel XE#282]) +3 other tests dmesg-warn
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-433/igt@kms_cursor_legacy@forked-move@pipe-b.html
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_cursor_legacy@forked-move@pipe-b.html
* igt@kms_feature_discovery@display-3x:
- shard-dg2-set2: NOTRUN -> [SKIP][42] ([Intel XE#1201] / [Intel XE#703])
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-464/igt@kms_feature_discovery@display-3x.html
* igt@kms_flip@2x-absolute-wf_vblank:
- shard-adlp: NOTRUN -> [SKIP][43] ([Intel XE#1201] / [Intel XE#310]) +3 other tests skip
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_flip@2x-absolute-wf_vblank.html
* igt@kms_flip@flip-vs-suspend-interruptible@c-dp4:
- shard-dg2-set2: [PASS][44] -> [INCOMPLETE][45] ([Intel XE#1195])
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-464/igt@kms_flip@flip-vs-suspend-interruptible@c-dp4.html
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-464/igt@kms_flip@flip-vs-suspend-interruptible@c-dp4.html
* igt@kms_flip@flip-vs-suspend@d-dp4:
- shard-dg2-set2: [PASS][46] -> [INCOMPLETE][47] ([Intel XE#1195] / [Intel XE#2049])
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-434/igt@kms_flip@flip-vs-suspend@d-dp4.html
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-435/igt@kms_flip@flip-vs-suspend@d-dp4.html
* igt@kms_flip_scaled_crc@flip-64bpp-linear-to-16bpp-linear-upscaling:
- shard-adlp: [PASS][48] -> [SKIP][49] ([Intel XE#1201] / [Intel XE#455]) +1 other test skip
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_flip_scaled_crc@flip-64bpp-linear-to-16bpp-linear-upscaling.html
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_flip_scaled_crc@flip-64bpp-linear-to-16bpp-linear-upscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling:
- shard-dg2-set2: NOTRUN -> [SKIP][50] ([Intel XE#1201] / [Intel XE#455]) +2 other tests skip
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-464/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html
* igt@kms_flip_tiling@flip-change-tiling@pipe-b-hdmi-a-1-y-to-x:
- shard-adlp: [PASS][51] -> [FAIL][52] ([Intel XE#1874]) +1 other test fail
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-9/igt@kms_flip_tiling@flip-change-tiling@pipe-b-hdmi-a-1-y-to-x.html
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_flip_tiling@flip-change-tiling@pipe-b-hdmi-a-1-y-to-x.html
* igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-onoff:
- shard-dg2-set2: NOTRUN -> [SKIP][53] ([Intel XE#1201] / [Intel XE#651]) +4 other tests skip
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-464/igt@kms_frontbuffer_tracking@drrs-1p-primscrn-spr-indfb-onoff.html
* igt@kms_frontbuffer_tracking@fbc-1p-rte:
- shard-adlp: [PASS][54] -> [SKIP][55] ([Intel XE#1201]) +8 other tests skip
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_frontbuffer_tracking@fbc-1p-rte.html
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_frontbuffer_tracking@fbc-1p-rte.html
* igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-blt:
- shard-adlp: NOTRUN -> [SKIP][56] ([Intel XE#1201] / [Intel XE#651]) +6 other tests skip
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_frontbuffer_tracking@fbcdrrs-1p-offscren-pri-shrfb-draw-blt.html
* igt@kms_frontbuffer_tracking@psr-1p-primscrn-shrfb-msflip-blt:
- shard-dg2-set2: NOTRUN -> [SKIP][57] ([Intel XE#1201] / [Intel XE#653]) +2 other tests skip
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-464/igt@kms_frontbuffer_tracking@psr-1p-primscrn-shrfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-move:
- shard-adlp: NOTRUN -> [SKIP][58] ([Intel XE#1201] / [Intel XE#656]) +17 other tests skip
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-1/igt@kms_frontbuffer_tracking@psr-2p-primscrn-cur-indfb-move.html
* igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-wc:
- shard-adlp: NOTRUN -> [SKIP][59] ([Intel XE#1201] / [Intel XE#653]) +6 other tests skip
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-wc.html
* igt@kms_hdr@bpc-switch:
- shard-adlp: NOTRUN -> [SKIP][60] ([Intel XE#1201] / [Intel XE#455]) +7 other tests skip
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_hdr@bpc-switch.html
* igt@kms_pipe_crc_basic@read-crc:
- shard-adlp: [PASS][61] -> [ABORT][62] ([Intel XE#1205] / [Intel XE#1553])
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_pipe_crc_basic@read-crc.html
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-2/igt@kms_pipe_crc_basic@read-crc.html
* igt@kms_pipe_crc_basic@read-crc@pipe-d-hdmi-a-1:
- shard-adlp: [PASS][63] -> [DMESG-WARN][64] ([Intel XE#1214] / [Intel XE#1553])
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_pipe_crc_basic@read-crc@pipe-d-hdmi-a-1.html
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-2/igt@kms_pipe_crc_basic@read-crc@pipe-d-hdmi-a-1.html
* igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4:
- shard-dg2-set2: [PASS][65] -> [FAIL][66] ([Intel XE#361]) +1 other test fail
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4.html
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_plane_scaling@intel-max-src-size@pipe-a-dp-4.html
* igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format:
- shard-adlp: NOTRUN -> [SKIP][67] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#498]) +1 other test skip
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format.html
* igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-b-hdmi-a-1:
- shard-adlp: NOTRUN -> [SKIP][68] ([Intel XE#1201] / [Intel XE#498]) +2 other tests skip
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-b-hdmi-a-1.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-a-hdmi-a-1:
- shard-adlp: NOTRUN -> [SKIP][69] ([Intel XE#1201] / [Intel XE#305]) +2 other tests skip
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-a-hdmi-a-1.html
* igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-d-hdmi-a-1:
- shard-adlp: NOTRUN -> [SKIP][70] ([Intel XE#1201] / [Intel XE#305] / [Intel XE#455]) +1 other test skip
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_plane_scaling@planes-downscale-factor-0-25-upscale-20x20@pipe-d-hdmi-a-1.html
* igt@kms_pm_backlight@bad-brightness:
- shard-adlp: NOTRUN -> [SKIP][71] ([Intel XE#1201] / [Intel XE#870]) +1 other test skip
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_pm_backlight@bad-brightness.html
* igt@kms_pm_dc@dc5-psr:
- shard-adlp: NOTRUN -> [SKIP][72] ([Intel XE#1129] / [Intel XE#1201])
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_pm_dc@dc5-psr.html
* igt@kms_pm_dc@dc6-dpms:
- shard-dg2-set2: NOTRUN -> [SKIP][73] ([Intel XE#1201] / [Intel XE#908])
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_pm_dc@dc6-dpms.html
* igt@kms_pm_rpm@dpms-non-lpsp:
- shard-adlp: NOTRUN -> [SKIP][74] ([Intel XE#1201] / [Intel XE#836])
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_pm_rpm@dpms-non-lpsp.html
* igt@kms_pm_rpm@legacy-planes-dpms:
- shard-adlp: [PASS][75] -> [SKIP][76] ([Intel XE#1201] / [Intel XE#1211])
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-4/igt@kms_pm_rpm@legacy-planes-dpms.html
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-1/igt@kms_pm_rpm@legacy-planes-dpms.html
* igt@kms_psr2_sf@fbc-overlay-plane-update-sf-dmg-area:
- shard-adlp: NOTRUN -> [SKIP][77] ([Intel XE#1201]) +1 other test skip
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_psr2_sf@fbc-overlay-plane-update-sf-dmg-area.html
* igt@kms_psr@fbc-psr-cursor-plane-onoff:
- shard-dg2-set2: NOTRUN -> [SKIP][78] ([Intel XE#1201] / [Intel XE#929]) +1 other test skip
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_psr@fbc-psr-cursor-plane-onoff.html
* igt@kms_psr@psr-suspend:
- shard-adlp: NOTRUN -> [SKIP][79] ([Intel XE#1201] / [Intel XE#929]) +6 other tests skip
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_psr@psr-suspend.html
* igt@kms_universal_plane@cursor-fb-leak:
- shard-dg2-set2: [PASS][80] -> [FAIL][81] ([Intel XE#771] / [Intel XE#899])
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-435/igt@kms_universal_plane@cursor-fb-leak.html
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-434/igt@kms_universal_plane@cursor-fb-leak.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-6:
- shard-dg2-set2: [PASS][82] -> [FAIL][83] ([Intel XE#899])
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-435/igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-6.html
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-434/igt@kms_universal_plane@cursor-fb-leak@pipe-a-hdmi-a-6.html
* igt@xe_ccs@block-multicopy-inplace:
- shard-adlp: NOTRUN -> [SKIP][84] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#488]) +1 other test skip
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@xe_ccs@block-multicopy-inplace.html
* igt@xe_evict@evict-beng-large-multi-vm-cm:
- shard-adlp: NOTRUN -> [SKIP][85] ([Intel XE#1201] / [Intel XE#261]) +1 other test skip
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@xe_evict@evict-beng-large-multi-vm-cm.html
* igt@xe_evict@evict-beng-mixed-threads-large:
- shard-dg2-set2: [PASS][86] -> [TIMEOUT][87] ([Intel XE#1473] / [Intel XE#392])
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@xe_evict@evict-beng-mixed-threads-large.html
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@xe_evict@evict-beng-mixed-threads-large.html
* igt@xe_evict@evict-beng-threads-large:
- shard-dg2-set2: [PASS][88] -> [TIMEOUT][89] ([Intel XE#1473])
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-435/igt@xe_evict@evict-beng-threads-large.html
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@xe_evict@evict-beng-threads-large.html
* igt@xe_evict@evict-mixed-threads-large:
- shard-dg2-set2: [PASS][90] -> [INCOMPLETE][91] ([Intel XE#1195] / [Intel XE#1473] / [Intel XE#392])
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-436/igt@xe_evict@evict-mixed-threads-large.html
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-463/igt@xe_evict@evict-mixed-threads-large.html
* igt@xe_evict_ccs@evict-overcommit-standalone-nofree-reopen:
- shard-adlp: NOTRUN -> [SKIP][92] ([Intel XE#1201] / [Intel XE#688])
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-1/igt@xe_evict_ccs@evict-overcommit-standalone-nofree-reopen.html
* igt@xe_exec_balancer@twice-cm-virtual-userptr-invalidate:
- shard-adlp: [PASS][93] -> [DMESG-WARN][94] ([Intel XE#1214]) +12 other tests dmesg-warn
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@xe_exec_balancer@twice-cm-virtual-userptr-invalidate.html
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@xe_exec_balancer@twice-cm-virtual-userptr-invalidate.html
* igt@xe_exec_basic@multigpu-once-bindexecqueue-rebind:
- shard-adlp: NOTRUN -> [SKIP][95] ([Intel XE#1201] / [Intel XE#1392]) +3 other tests skip
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@xe_exec_basic@multigpu-once-bindexecqueue-rebind.html
* igt@xe_exec_fault_mode@invalid-va-scratch-nopagefault:
- shard-adlp: NOTRUN -> [SKIP][96] ([Intel XE#1201] / [Intel XE#288]) +11 other tests skip
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-1/igt@xe_exec_fault_mode@invalid-va-scratch-nopagefault.html
* igt@xe_exec_fault_mode@once-rebind:
- shard-dg2-set2: NOTRUN -> [SKIP][97] ([Intel XE#1201] / [Intel XE#288]) +2 other tests skip
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@xe_exec_fault_mode@once-rebind.html
* igt@xe_exec_reset@cm-cat-error:
- shard-adlp: NOTRUN -> [DMESG-FAIL][98] ([Intel XE#1962])
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@xe_exec_reset@cm-cat-error.html
* igt@xe_exec_reset@parallel-cat-error:
- shard-adlp: [PASS][99] -> [DMESG-WARN][100] ([Intel XE#1214] / [Intel XE#358]) +1 other test dmesg-warn
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@xe_exec_reset@parallel-cat-error.html
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@xe_exec_reset@parallel-cat-error.html
* igt@xe_gt_freq@freq_reset_multiple:
- shard-adlp: [PASS][101] -> [DMESG-WARN][102] ([Intel XE#1214] / [Intel XE#1975])
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-6/igt@xe_gt_freq@freq_reset_multiple.html
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-2/igt@xe_gt_freq@freq_reset_multiple.html
* igt@xe_live_ktest@xe_mocs:
- shard-adlp: NOTRUN -> [SKIP][103] ([Intel XE#1192] / [Intel XE#1201])
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@xe_live_ktest@xe_mocs.html
* igt@xe_module_load@force-load:
- shard-adlp: NOTRUN -> [SKIP][104] ([Intel XE#1201] / [Intel XE#378])
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@xe_module_load@force-load.html
* igt@xe_pm@d3cold-mmap-vram:
- shard-dg2-set2: NOTRUN -> [SKIP][105] ([Intel XE#1201] / [Intel XE#366])
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-464/igt@xe_pm@d3cold-mmap-vram.html
* igt@xe_pm@s4-basic-exec:
- shard-adlp: [PASS][106] -> [ABORT][107] ([Intel XE#1358] / [Intel XE#1794])
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-8/igt@xe_pm@s4-basic-exec.html
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-9/igt@xe_pm@s4-basic-exec.html
* igt@xe_pm@s4-vm-bind-userptr:
- shard-adlp: [PASS][108] -> [ABORT][109] ([Intel XE#1601] / [Intel XE#1794])
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-8/igt@xe_pm@s4-vm-bind-userptr.html
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-9/igt@xe_pm@s4-vm-bind-userptr.html
* igt@xe_pm_residency@toggle-gt-c6:
- shard-adlp: [PASS][110] -> [FAIL][111] ([Intel XE#958])
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-4/igt@xe_pm_residency@toggle-gt-c6.html
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@xe_pm_residency@toggle-gt-c6.html
#### Possible fixes ####
* igt@kms_async_flips@alternate-sync-async-flip@pipe-b-dp-4:
- shard-dg2-set2: [FAIL][112] ([Intel XE#827]) -> [PASS][113] +1 other test pass
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-464/igt@kms_async_flips@alternate-sync-async-flip@pipe-b-dp-4.html
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-433/igt@kms_async_flips@alternate-sync-async-flip@pipe-b-dp-4.html
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-hdmi-a-1-y:
- shard-adlp: [DMESG-WARN][114] ([Intel XE#1214] / [Intel XE#324]) -> [PASS][115]
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-2/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-hdmi-a-1-y.html
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-1/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-hdmi-a-1-y.html
* igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip:
- {shard-lnl}: [FAIL][116] ([Intel XE#1659]) -> [PASS][117]
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-lnl-7/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-lnl-5/igt@kms_big_fb@4-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
- shard-adlp: [FAIL][118] ([Intel XE#1231]) -> [PASS][119]
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-4/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-2/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
* igt@kms_cursor_legacy@cursora-vs-flipa-atomic-transitions:
- shard-dg2-set2: [DMESG-WARN][120] ([Intel XE#282]) -> [PASS][121] +1 other test pass
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_cursor_legacy@cursora-vs-flipa-atomic-transitions.html
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_cursor_legacy@cursora-vs-flipa-atomic-transitions.html
* igt@kms_cursor_legacy@short-flip-before-cursor-atomic-transitions-varying-size:
- {shard-lnl}: [FAIL][122] ([Intel XE#1541]) -> [PASS][123]
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-lnl-2/igt@kms_cursor_legacy@short-flip-before-cursor-atomic-transitions-varying-size.html
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-lnl-8/igt@kms_cursor_legacy@short-flip-before-cursor-atomic-transitions-varying-size.html
* igt@kms_cursor_legacy@torture-move@pipe-a:
- shard-dg2-set2: [DMESG-WARN][124] ([Intel XE#1214] / [Intel XE#282]) -> [PASS][125] +7 other tests pass
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-464/igt@kms_cursor_legacy@torture-move@pipe-a.html
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-464/igt@kms_cursor_legacy@torture-move@pipe-a.html
* igt@kms_flip@2x-flip-vs-panning@ab-hdmi-a6-dp4:
- shard-dg2-set2: [INCOMPLETE][126] ([Intel XE#1195]) -> [PASS][127] +2 other tests pass
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@kms_flip@2x-flip-vs-panning@ab-hdmi-a6-dp4.html
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-464/igt@kms_flip@2x-flip-vs-panning@ab-hdmi-a6-dp4.html
* igt@kms_flip_tiling@flip-change-tiling@pipe-c-hdmi-a-1-y-to-x:
- shard-adlp: [FAIL][128] ([Intel XE#1874]) -> [PASS][129] +2 other tests pass
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-9/igt@kms_flip_tiling@flip-change-tiling@pipe-c-hdmi-a-1-y-to-x.html
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_flip_tiling@flip-change-tiling@pipe-c-hdmi-a-1-y-to-x.html
* igt@kms_pipe_crc_basic@suspend-read-crc:
- shard-dg2-set2: [DMESG-WARN][130] ([Intel XE#1162] / [Intel XE#1214]) -> [PASS][131]
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-463/igt@kms_pipe_crc_basic@suspend-read-crc.html
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-433/igt@kms_pipe_crc_basic@suspend-read-crc.html
* igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-dp-4:
- shard-dg2-set2: [DMESG-WARN][132] ([Intel XE#1214]) -> [PASS][133]
[132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-463/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-dp-4.html
[133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-433/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-b-dp-4.html
* igt@kms_pm_rpm@i2c:
- shard-adlp: [SKIP][134] ([Intel XE#1201] / [Intel XE#1211]) -> [PASS][135]
[134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-2/igt@kms_pm_rpm@i2c.html
[135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_pm_rpm@i2c.html
* igt@kms_universal_plane@cursor-fb-leak:
- shard-adlp: [FAIL][136] ([Intel XE#771] / [Intel XE#899]) -> [PASS][137]
[136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-6/igt@kms_universal_plane@cursor-fb-leak.html
[137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-2/igt@kms_universal_plane@cursor-fb-leak.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-1:
- shard-adlp: [FAIL][138] ([Intel XE#899]) -> [PASS][139]
[138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-6/igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-1.html
[139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-2/igt@kms_universal_plane@cursor-fb-leak@pipe-c-hdmi-a-1.html
* igt@xe_evict@evict-beng-large-multi-vm-cm:
- shard-dg2-set2: [FAIL][140] ([Intel XE#1600]) -> [PASS][141]
[140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-436/igt@xe_evict@evict-beng-large-multi-vm-cm.html
[141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-463/igt@xe_evict@evict-beng-large-multi-vm-cm.html
* igt@xe_exec_basic@twice-userptr-rebind:
- shard-adlp: [INCOMPLETE][142] ([Intel XE#1195]) -> [PASS][143] +1 other test pass
[142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-9/igt@xe_exec_basic@twice-userptr-rebind.html
[143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@xe_exec_basic@twice-userptr-rebind.html
* igt@xe_exec_fault_mode@many-userptr-invalidate-race:
- {shard-lnl}: [ABORT][144] ([Intel XE#2097]) -> [PASS][145] +2 other tests pass
[144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-lnl-1/igt@xe_exec_fault_mode@many-userptr-invalidate-race.html
[145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-lnl-6/igt@xe_exec_fault_mode@many-userptr-invalidate-race.html
* igt@xe_live_ktest@xe_migrate:
- shard-adlp: [SKIP][146] ([Intel XE#1192] / [Intel XE#1201]) -> [PASS][147]
[146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-9/igt@xe_live_ktest@xe_migrate.html
[147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@xe_live_ktest@xe_migrate.html
* igt@xe_pm@s3-vm-bind-unbind-all:
- shard-adlp: [DMESG-WARN][148] ([Intel XE#1214] / [Intel XE#1941]) -> [PASS][149]
[148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-9/igt@xe_pm@s3-vm-bind-unbind-all.html
[149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@xe_pm@s3-vm-bind-unbind-all.html
* igt@xe_pm@s4-mocs:
- shard-adlp: [ABORT][150] ([Intel XE#1794]) -> [PASS][151]
[150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-9/igt@xe_pm@s4-mocs.html
[151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@xe_pm@s4-mocs.html
* igt@xe_pm_residency@gt-c6-freeze:
- {shard-lnl}: [DMESG-WARN][152] -> [PASS][153]
[152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-lnl-3/igt@xe_pm_residency@gt-c6-freeze.html
[153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-lnl-4/igt@xe_pm_residency@gt-c6-freeze.html
#### Warnings ####
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-x:
- shard-adlp: [DMESG-WARN][154] ([Intel XE#1033] / [Intel XE#1214] / [Intel XE#324]) -> [DMESG-WARN][155] ([Intel XE#1214] / [Intel XE#324])
[154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-2/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-x.html
[155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-1/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-x.html
* igt@kms_big_fb@4-tiled-64bpp-rotate-270:
- shard-adlp: [SKIP][156] ([Intel XE#1124] / [Intel XE#1201]) -> [SKIP][157] ([Intel XE#1201])
[156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_big_fb@4-tiled-64bpp-rotate-270.html
[157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_big_fb@4-tiled-64bpp-rotate-270.html
* igt@kms_big_fb@linear-8bpp-rotate-270:
- shard-dg2-set2: [SKIP][158] ([Intel XE#316]) -> [SKIP][159] ([Intel XE#1201] / [Intel XE#316]) +3 other tests skip
[158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_big_fb@linear-8bpp-rotate-270.html
[159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_big_fb@linear-8bpp-rotate-270.html
* igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-async-flip:
- shard-adlp: [FAIL][160] ([Intel XE#1204]) -> [DMESG-FAIL][161] ([Intel XE#324])
[160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-6/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
[161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-1/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-async-flip.html
* igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-async-flip:
- shard-adlp: [DMESG-FAIL][162] ([Intel XE#324]) -> [FAIL][163] ([Intel XE#1231])
[162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-async-flip.html
[163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-6/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-async-flip.html
* igt@kms_big_fb@y-tiled-16bpp-rotate-90:
- shard-adlp: [SKIP][164] ([Intel XE#1201] / [Intel XE#316]) -> [SKIP][165] ([Intel XE#1201])
[164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_big_fb@y-tiled-16bpp-rotate-90.html
[165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_big_fb@y-tiled-16bpp-rotate-90.html
* igt@kms_big_fb@y-tiled-64bpp-rotate-0:
- shard-adlp: [FAIL][166] ([Intel XE#1874]) -> [SKIP][167] ([Intel XE#1201])
[166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_big_fb@y-tiled-64bpp-rotate-0.html
[167]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_big_fb@y-tiled-64bpp-rotate-0.html
* igt@kms_big_fb@y-tiled-addfb-size-offset-overflow:
- shard-dg2-set2: [SKIP][168] ([Intel XE#607]) -> [SKIP][169] ([Intel XE#1201] / [Intel XE#607])
[168]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_big_fb@y-tiled-addfb-size-offset-overflow.html
[169]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_big_fb@y-tiled-addfb-size-offset-overflow.html
* igt@kms_big_fb@y-tiled-addfb-size-overflow:
- shard-dg2-set2: [SKIP][170] ([Intel XE#610]) -> [SKIP][171] ([Intel XE#1201] / [Intel XE#610]) +1 other test skip
[170]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_big_fb@y-tiled-addfb-size-overflow.html
[171]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_big_fb@y-tiled-addfb-size-overflow.html
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
- shard-adlp: [FAIL][172] ([Intel XE#1242]) -> [FAIL][173] ([Intel XE#1231])
[172]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-4/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
[173]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-8/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
* igt@kms_big_fb@yf-tiled-32bpp-rotate-0:
- shard-dg2-set2: [SKIP][174] ([Intel XE#1124] / [Intel XE#1201]) -> [SKIP][175] ([Intel XE#1124]) +7 other tests skip
[174]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@kms_big_fb@yf-tiled-32bpp-rotate-0.html
[175]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_big_fb@yf-tiled-32bpp-rotate-0.html
* igt@kms_big_fb@yf-tiled-64bpp-rotate-180:
- shard-dg2-set2: [SKIP][176] ([Intel XE#1124]) -> [SKIP][177] ([Intel XE#1124] / [Intel XE#1201]) +4 other tests skip
[176]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html
[177]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html
* igt@kms_bw@linear-tiling-1-displays-2160x1440p:
- shard-dg2-set2: [SKIP][178] ([Intel XE#367]) -> [SKIP][179] ([Intel XE#1201] / [Intel XE#367]) +1 other test skip
[178]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_bw@linear-tiling-1-displays-2160x1440p.html
[179]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_bw@linear-tiling-1-displays-2160x1440p.html
* igt@kms_bw@linear-tiling-2-displays-2160x1440p:
- shard-dg2-set2: [SKIP][180] ([Intel XE#1201] / [Intel XE#367]) -> [SKIP][181] ([Intel XE#367]) +1 other test skip
[180]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@kms_bw@linear-tiling-2-displays-2160x1440p.html
[181]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_bw@linear-tiling-2-displays-2160x1440p.html
* igt@kms_ccs@bad-rotation-90-4-tiled-xe2-ccs:
- shard-dg2-set2: [SKIP][182] ([Intel XE#1201] / [Intel XE#1252]) -> [SKIP][183] ([Intel XE#1252])
[182]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@kms_ccs@bad-rotation-90-4-tiled-xe2-ccs.html
[183]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_ccs@bad-rotation-90-4-tiled-xe2-ccs.html
* igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-mc-ccs@pipe-a-dp-4:
- shard-dg2-set2: [SKIP][184] ([Intel XE#787]) -> [SKIP][185] ([Intel XE#1201] / [Intel XE#787]) +41 other tests skip
[184]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-mc-ccs@pipe-a-dp-4.html
[185]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_ccs@ccs-on-another-bo-y-tiled-gen12-mc-ccs@pipe-a-dp-4.html
* igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs:
- shard-adlp: [SKIP][186] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) -> [SKIP][187] ([Intel XE#1201]) +2 other tests skip
[186]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs.html
[187]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_ccs@crc-primary-rotation-180-y-tiled-gen12-rc-ccs.html
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs@pipe-d-dp-4:
- shard-dg2-set2: [SKIP][188] ([Intel XE#455] / [Intel XE#787]) -> [SKIP][189] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) +11 other tests skip
[188]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs@pipe-d-dp-4.html
[189]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-mc-ccs@pipe-d-dp-4.html
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-xe2-ccs:
- shard-dg2-set2: [SKIP][190] ([Intel XE#1252]) -> [SKIP][191] ([Intel XE#1201] / [Intel XE#1252])
[190]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-xe2-ccs.html
[191]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-xe2-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-mtl-mc-ccs:
- shard-dg2-set2: [SKIP][192] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) -> [SKIP][193] ([Intel XE#455] / [Intel XE#787]) +17 other tests skip
[192]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@kms_ccs@random-ccs-data-4-tiled-mtl-mc-ccs.html
[193]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_ccs@random-ccs-data-4-tiled-mtl-mc-ccs.html
* igt@kms_ccs@random-ccs-data-4-tiled-mtl-mc-ccs@pipe-b-hdmi-a-6:
- shard-dg2-set2: [SKIP][194] ([Intel XE#1201] / [Intel XE#787]) -> [SKIP][195] ([Intel XE#787]) +62 other tests skip
[194]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@kms_ccs@random-ccs-data-4-tiled-mtl-mc-ccs@pipe-b-hdmi-a-6.html
[195]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_ccs@random-ccs-data-4-tiled-mtl-mc-ccs@pipe-b-hdmi-a-6.html
* igt@kms_chamelium_color@ctm-blue-to-red:
- shard-dg2-set2: [SKIP][196] ([Intel XE#1201] / [Intel XE#306]) -> [SKIP][197] ([Intel XE#306]) +1 other test skip
[196]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@kms_chamelium_color@ctm-blue-to-red.html
[197]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_chamelium_color@ctm-blue-to-red.html
* igt@kms_chamelium_hpd@hdmi-hpd:
- shard-dg2-set2: [SKIP][198] ([Intel XE#373]) -> [SKIP][199] ([Intel XE#1201] / [Intel XE#373]) +6 other tests skip
[198]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_chamelium_hpd@hdmi-hpd.html
[199]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_chamelium_hpd@hdmi-hpd.html
* igt@kms_chamelium_hpd@vga-hpd:
- shard-dg2-set2: [SKIP][200] ([Intel XE#1201] / [Intel XE#373]) -> [SKIP][201] ([Intel XE#373]) +5 other tests skip
[200]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@kms_chamelium_hpd@vga-hpd.html
[201]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_chamelium_hpd@vga-hpd.html
* igt@kms_content_protection@dp-mst-type-1:
- shard-dg2-set2: [SKIP][202] ([Intel XE#1201] / [Intel XE#307]) -> [SKIP][203] ([Intel XE#307])
[202]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@kms_content_protection@dp-mst-type-1.html
[203]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_content_protection@dp-mst-type-1.html
* igt@kms_cursor_crc@cursor-offscreen-512x512:
- shard-adlp: [SKIP][204] ([Intel XE#1201] / [Intel XE#308]) -> [SKIP][205] ([Intel XE#1201])
[204]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_cursor_crc@cursor-offscreen-512x512.html
[205]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_cursor_crc@cursor-offscreen-512x512.html
* igt@kms_cursor_crc@cursor-random-512x512:
- shard-dg2-set2: [SKIP][206] ([Intel XE#308]) -> [SKIP][207] ([Intel XE#1201] / [Intel XE#308])
[206]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_cursor_crc@cursor-random-512x512.html
[207]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_cursor_crc@cursor-random-512x512.html
* igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size:
- shard-dg2-set2: [SKIP][208] ([Intel XE#323]) -> [SKIP][209] ([Intel XE#1201] / [Intel XE#323]) +1 other test skip
[208]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html
[209]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-varying-size.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size:
- shard-dg2-set2: [DMESG-WARN][210] ([Intel XE#1214] / [Intel XE#282]) -> [DMESG-WARN][211] ([Intel XE#282]) +1 other test dmesg-warn
[210]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-463/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html
[211]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions-varying-size.html
* igt@kms_cursor_legacy@forked-move:
- shard-dg2-set2: [INCOMPLETE][212] ([Intel XE#1195]) -> [DMESG-WARN][213] ([Intel XE#1214] / [Intel XE#282])
[212]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-433/igt@kms_cursor_legacy@forked-move.html
[213]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_cursor_legacy@forked-move.html
* igt@kms_cursor_legacy@single-bo@all-pipes:
- shard-dg2-set2: [DMESG-WARN][214] ([Intel XE#282]) -> [DMESG-WARN][215] ([Intel XE#1214] / [Intel XE#282]) +9 other tests dmesg-warn
[214]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_cursor_legacy@single-bo@all-pipes.html
[215]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_cursor_legacy@single-bo@all-pipes.html
* igt@kms_fbcon_fbt@psr-suspend:
- shard-dg2-set2: [SKIP][216] ([Intel XE#776]) -> [SKIP][217] ([Intel XE#1201] / [Intel XE#776])
[216]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_fbcon_fbt@psr-suspend.html
[217]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_fbcon_fbt@psr-suspend.html
* igt@kms_feature_discovery@psr2:
- shard-dg2-set2: [SKIP][218] ([Intel XE#1135]) -> [SKIP][219] ([Intel XE#1135] / [Intel XE#1201])
[218]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_feature_discovery@psr2.html
[219]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_feature_discovery@psr2.html
* igt@kms_flip@flip-vs-suspend:
- shard-dg2-set2: [DMESG-WARN][220] ([Intel XE#1214] / [Intel XE#1551]) -> [INCOMPLETE][221] ([Intel XE#1195] / [Intel XE#1551] / [Intel XE#2049]) +1 other test incomplete
[220]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-434/igt@kms_flip@flip-vs-suspend.html
[221]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-435/igt@kms_flip@flip-vs-suspend.html
* igt@kms_force_connector_basic@prune-stale-modes:
- shard-dg2-set2: [SKIP][222] ([Intel XE#1201] / [i915#5274]) -> [SKIP][223] ([i915#5274])
[222]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@kms_force_connector_basic@prune-stale-modes.html
[223]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_force_connector_basic@prune-stale-modes.html
* igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-mmap-wc:
- shard-dg2-set2: [SKIP][224] ([Intel XE#651]) -> [SKIP][225] ([Intel XE#1201] / [Intel XE#651]) +20 other tests skip
[224]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-mmap-wc.html
[225]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_frontbuffer_tracking@drrs-2p-primscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-wc:
- shard-adlp: [SKIP][226] ([Intel XE#1201] / [Intel XE#656]) -> [SKIP][227] ([Intel XE#1201]) +4 other tests skip
[226]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-wc.html
[227]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-fullscreen:
- shard-dg2-set2: [SKIP][228] ([Intel XE#1201] / [Intel XE#651]) -> [SKIP][229] ([Intel XE#651]) +22 other tests skip
[228]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-463/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-fullscreen.html
[229]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-spr-indfb-fullscreen.html
* igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-shrfb-msflip-blt:
- shard-adlp: [SKIP][230] ([Intel XE#1201] / [Intel XE#651]) -> [SKIP][231] ([Intel XE#1201]) +2 other tests skip
[230]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-shrfb-msflip-blt.html
[231]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-shrfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y:
- shard-dg2-set2: [SKIP][232] ([Intel XE#658]) -> [SKIP][233] ([Intel XE#1201] / [Intel XE#658])
[232]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y.html
[233]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y.html
* igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-wc:
- shard-dg2-set2: [SKIP][234] ([Intel XE#1201] / [Intel XE#653]) -> [SKIP][235] ([Intel XE#653]) +21 other tests skip
[234]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-wc.html
[235]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcpsr-2p-primscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-wc:
- shard-adlp: [SKIP][236] ([Intel XE#1201] / [Intel XE#653]) -> [SKIP][237] ([Intel XE#1201]) +2 other tests skip
[236]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-wc.html
[237]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcpsr-tiling-4:
- shard-dg2-set2: [SKIP][238] ([Intel XE#653]) -> [SKIP][239] ([Intel XE#1201] / [Intel XE#653]) +22 other tests skip
[238]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html
[239]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_frontbuffer_tracking@fbcpsr-tiling-4.html
* igt@kms_frontbuffer_tracking@fbcpsr-tiling-y:
- shard-dg2-set2: [SKIP][240] ([Intel XE#1201] / [Intel XE#658]) -> [SKIP][241] ([Intel XE#658])
[240]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-463/igt@kms_frontbuffer_tracking@fbcpsr-tiling-y.html
[241]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcpsr-tiling-y.html
* igt@kms_plane_scaling@plane-downscale-factor-0-25-with-modifiers:
- shard-dg2-set2: [SKIP][242] ([Intel XE#455] / [Intel XE#498]) -> [SKIP][243] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#498]) +1 other test skip
[242]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-modifiers.html
[243]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-modifiers.html
* igt@kms_plane_scaling@plane-downscale-factor-0-25-with-modifiers@pipe-a-hdmi-a-6:
- shard-dg2-set2: [SKIP][244] ([Intel XE#498]) -> [SKIP][245] ([Intel XE#1201] / [Intel XE#498]) +2 other tests skip
[244]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-modifiers@pipe-a-hdmi-a-6.html
[245]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-modifiers@pipe-a-hdmi-a-6.html
* igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25:
- shard-adlp: [SKIP][246] ([Intel XE#1201] / [Intel XE#305] / [Intel XE#455]) -> [SKIP][247] ([Intel XE#1201] / [Intel XE#455])
[246]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25.html
[247]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25.html
* igt@kms_pm_backlight@bad-brightness:
- shard-dg2-set2: [SKIP][248] ([Intel XE#1201] / [Intel XE#870]) -> [SKIP][249] ([Intel XE#870]) +1 other test skip
[248]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@kms_pm_backlight@bad-brightness.html
[249]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_pm_backlight@bad-brightness.html
* igt@kms_pm_dc@dc5-psr:
- shard-dg2-set2: [SKIP][250] ([Intel XE#1129] / [Intel XE#1201]) -> [SKIP][251] ([Intel XE#1129])
[250]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@kms_pm_dc@dc5-psr.html
[251]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_pm_dc@dc5-psr.html
* igt@kms_pm_rpm@basic-rte:
- shard-adlp: [FAIL][252] ([Intel XE#1203]) -> [SKIP][253] ([Intel XE#1201])
[252]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@kms_pm_rpm@basic-rte.html
[253]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_pm_rpm@basic-rte.html
* igt@kms_psr2_su@page_flip-nv12:
- shard-dg2-set2: [SKIP][254] ([Intel XE#1122] / [Intel XE#1201]) -> [SKIP][255] ([Intel XE#1122])
[254]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@kms_psr2_su@page_flip-nv12.html
[255]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_psr2_su@page_flip-nv12.html
* igt@kms_psr2_su@page_flip-xrgb8888:
- shard-dg2-set2: [SKIP][256] ([Intel XE#1122]) -> [SKIP][257] ([Intel XE#1122] / [Intel XE#1201])
[256]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_psr2_su@page_flip-xrgb8888.html
[257]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_psr2_su@page_flip-xrgb8888.html
* igt@kms_psr@fbc-psr2-primary-render:
- shard-dg2-set2: [SKIP][258] ([Intel XE#929]) -> [SKIP][259] ([Intel XE#1201] / [Intel XE#929]) +11 other tests skip
[258]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_psr@fbc-psr2-primary-render.html
[259]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_psr@fbc-psr2-primary-render.html
* igt@kms_psr@pr-cursor-plane-onoff:
- shard-dg2-set2: [SKIP][260] ([Intel XE#1201] / [Intel XE#929]) -> [SKIP][261] ([Intel XE#929]) +14 other tests skip
[260]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-463/igt@kms_psr@pr-cursor-plane-onoff.html
[261]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_psr@pr-cursor-plane-onoff.html
* igt@kms_rotation_crc@bad-tiling:
- shard-dg2-set2: [SKIP][262] ([Intel XE#1201] / [Intel XE#327]) -> [SKIP][263] ([Intel XE#327])
[262]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@kms_rotation_crc@bad-tiling.html
[263]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_rotation_crc@bad-tiling.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
- shard-dg2-set2: [SKIP][264] ([Intel XE#1127]) -> [SKIP][265] ([Intel XE#1127] / [Intel XE#1201]) +1 other test skip
[264]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html
[265]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html
* igt@kms_rotation_crc@sprite-rotation-90-pos-100-0:
- shard-dg2-set2: [SKIP][266] ([Intel XE#327]) -> [SKIP][267] ([Intel XE#1201] / [Intel XE#327])
[266]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_rotation_crc@sprite-rotation-90-pos-100-0.html
[267]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_rotation_crc@sprite-rotation-90-pos-100-0.html
* igt@kms_tv_load_detect@load-detect:
- shard-dg2-set2: [SKIP][268] ([Intel XE#330]) -> [SKIP][269] ([Intel XE#1201] / [Intel XE#330])
[268]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_tv_load_detect@load-detect.html
[269]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@kms_tv_load_detect@load-detect.html
* igt@kms_vblank@ts-continuation-dpms-suspend@pipe-d-hdmi-a-1:
- shard-adlp: [DMESG-WARN][270] ([Intel XE#1191] / [Intel XE#1214]) -> [DMESG-WARN][271] ([Intel XE#1214])
[270]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-4/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-d-hdmi-a-1.html
[271]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-1/igt@kms_vblank@ts-continuation-dpms-suspend@pipe-d-hdmi-a-1.html
* igt@kms_vblank@ts-continuation-suspend@pipe-d-hdmi-a-1:
- shard-adlp: [DMESG-WARN][272] ([Intel XE#1214]) -> [DMESG-WARN][273] ([Intel XE#1191] / [Intel XE#1214]) +2 other tests dmesg-warn
[272]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-2/igt@kms_vblank@ts-continuation-suspend@pipe-d-hdmi-a-1.html
[273]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@kms_vblank@ts-continuation-suspend@pipe-d-hdmi-a-1.html
* igt@kms_vrr@flip-dpms:
- shard-dg2-set2: [SKIP][274] ([Intel XE#455]) -> [SKIP][275] ([Intel XE#1201] / [Intel XE#455]) +8 other tests skip
[274]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@kms_vrr@flip-dpms.html
[275]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@kms_vrr@flip-dpms.html
* igt@kms_vrr@flipline:
- shard-dg2-set2: [SKIP][276] ([Intel XE#1201] / [Intel XE#455]) -> [SKIP][277] ([Intel XE#455]) +13 other tests skip
[276]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@kms_vrr@flipline.html
[277]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@kms_vrr@flipline.html
* igt@xe_compute_preempt@compute-threadgroup-preempt@engine-drm_xe_engine_class_compute:
- shard-dg2-set2: [SKIP][278] ([Intel XE#1280] / [Intel XE#455]) -> [SKIP][279] ([Intel XE#1201] / [Intel XE#1280] / [Intel XE#455]) +1 other test skip
[278]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@xe_compute_preempt@compute-threadgroup-preempt@engine-drm_xe_engine_class_compute.html
[279]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@xe_compute_preempt@compute-threadgroup-preempt@engine-drm_xe_engine_class_compute.html
* igt@xe_evict@evict-cm-threads-large:
- shard-dg2-set2: [INCOMPLETE][280] ([Intel XE#1195] / [Intel XE#1473] / [Intel XE#392]) -> [INCOMPLETE][281] ([Intel XE#1473] / [Intel XE#392])
[280]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@xe_evict@evict-cm-threads-large.html
[281]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@xe_evict@evict-cm-threads-large.html
* igt@xe_exec_fault_mode@once-basic-imm:
- shard-dg2-set2: [SKIP][282] ([Intel XE#1201] / [Intel XE#288]) -> [SKIP][283] ([Intel XE#288]) +17 other tests skip
[282]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@xe_exec_fault_mode@once-basic-imm.html
[283]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@xe_exec_fault_mode@once-basic-imm.html
* igt@xe_exec_fault_mode@once-bindexecqueue-userptr-invalidate-prefetch:
- shard-dg2-set2: [SKIP][284] ([Intel XE#288]) -> [SKIP][285] ([Intel XE#1201] / [Intel XE#288]) +18 other tests skip
[284]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@xe_exec_fault_mode@once-bindexecqueue-userptr-invalidate-prefetch.html
[285]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@xe_exec_fault_mode@once-bindexecqueue-userptr-invalidate-prefetch.html
* igt@xe_live_ktest@xe_mocs:
- shard-dg2-set2: [SKIP][286] ([Intel XE#1192] / [Intel XE#1201]) -> [SKIP][287] ([Intel XE#1192])
[286]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@xe_live_ktest@xe_mocs.html
[287]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@xe_live_ktest@xe_mocs.html
* igt@xe_module_load@load:
- shard-dg2-set2: [SKIP][288] ([Intel XE#378]) -> [SKIP][289] ([Intel XE#1201] / [Intel XE#378])
[288]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@xe_module_load@load.html
[289]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@xe_module_load@load.html
* igt@xe_module_load@many-reload:
- shard-dg2-set2: [DMESG-WARN][290] -> [DMESG-WARN][291] ([Intel XE#1214])
[290]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@xe_module_load@many-reload.html
[291]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-436/igt@xe_module_load@many-reload.html
* igt@xe_pat@pat-index-xehpc:
- shard-dg2-set2: [SKIP][292] ([Intel XE#979]) -> [SKIP][293] ([Intel XE#1201] / [Intel XE#979])
[292]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@xe_pat@pat-index-xehpc.html
[293]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@xe_pat@pat-index-xehpc.html
* igt@xe_pm@d3cold-basic-exec:
- shard-dg2-set2: [SKIP][294] ([Intel XE#1201] / [Intel XE#366]) -> [SKIP][295] ([Intel XE#366])
[294]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@xe_pm@d3cold-basic-exec.html
[295]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@xe_pm@d3cold-basic-exec.html
* igt@xe_pm@s3-basic-exec:
- shard-dg2-set2: [DMESG-WARN][296] ([Intel XE#1214] / [Intel XE#1551] / [Intel XE#569]) -> [DMESG-WARN][297] ([Intel XE#1551] / [Intel XE#569]) +1 other test dmesg-warn
[296]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-466/igt@xe_pm@s3-basic-exec.html
[297]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@xe_pm@s3-basic-exec.html
* igt@xe_pm@s3-d3cold-basic-exec:
- shard-dg2-set2: [SKIP][298] ([Intel XE#366]) -> [SKIP][299] ([Intel XE#1201] / [Intel XE#366]) +1 other test skip
[298]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@xe_pm@s3-d3cold-basic-exec.html
[299]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@xe_pm@s3-d3cold-basic-exec.html
* igt@xe_pm@s3-d3hot-basic-exec:
- shard-adlp: [WARN][300] ([Intel XE#1639]) -> [DMESG-WARN][301] ([Intel XE#1191] / [Intel XE#1214] / [Intel XE#1727])
[300]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@xe_pm@s3-d3hot-basic-exec.html
[301]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/igt@xe_pm@s3-d3hot-basic-exec.html
* igt@xe_pm@s4-multiple-execs:
- shard-adlp: [DMESG-WARN][302] ([Intel XE#1214]) -> [ABORT][303] ([Intel XE#1358] / [Intel XE#1794])
[302]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-8/igt@xe_pm@s4-multiple-execs.html
[303]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-9/igt@xe_pm@s4-multiple-execs.html
* igt@xe_query@multigpu-query-invalid-cs-cycles:
- shard-dg2-set2: [SKIP][304] ([Intel XE#944]) -> [SKIP][305] ([Intel XE#1201] / [Intel XE#944]) +1 other test skip
[304]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-432/igt@xe_query@multigpu-query-invalid-cs-cycles.html
[305]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-466/igt@xe_query@multigpu-query-invalid-cs-cycles.html
* igt@xe_query@multigpu-query-uc-fw-version-huc:
- shard-dg2-set2: [SKIP][306] ([Intel XE#1201] / [Intel XE#944]) -> [SKIP][307] ([Intel XE#944]) +1 other test skip
[306]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-463/igt@xe_query@multigpu-query-uc-fw-version-huc.html
[307]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-432/igt@xe_query@multigpu-query-uc-fw-version-huc.html
* igt@xe_wedged@wedged-at-any-timeout:
- shard-dg2-set2: [SKIP][308] ([Intel XE#1130] / [Intel XE#1201]) -> [DMESG-FAIL][309] ([Intel XE#1760])
[308]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-dg2-464/igt@xe_wedged@wedged-at-any-timeout.html
[309]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-dg2-464/igt@xe_wedged@wedged-at-any-timeout.html
- shard-adlp: [DMESG-FAIL][310] ([Intel XE#1760]) -> [DMESG-WARN][311] ([Intel XE#1214] / [Intel XE#1760])
[310]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c/shard-adlp-1/igt@xe_wedged@wedged-at-any-timeout.html
[311]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/shard-adlp-4/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#1069]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1069
[Intel XE#1091]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1091
[Intel XE#1122]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1122
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1125]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1125
[Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
[Intel XE#1129]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1129
[Intel XE#1130]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1130
[Intel XE#1135]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1135
[Intel XE#1162]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1162
[Intel XE#1178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1178
[Intel XE#1191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1191
[Intel XE#1192]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1192
[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#1203]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1203
[Intel XE#1204]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1204
[Intel XE#1205]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1205
[Intel XE#1211]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1211
[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#1242]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1242
[Intel XE#1252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1252
[Intel XE#1280]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1280
[Intel XE#1330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1330
[Intel XE#1358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1358
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1397]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1397
[Intel XE#1399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1399
[Intel XE#1401]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1401
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
[Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
[Intel XE#1424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1424
[Intel XE#1430]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1430
[Intel XE#1437]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1437
[Intel XE#1439]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1439
[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#1473]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1473
[Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
[Intel XE#1504]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1504
[Intel XE#1512]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1512
[Intel XE#1541]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1541
[Intel XE#1551]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1551
[Intel XE#1553]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1553
[Intel XE#1573]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1573
[Intel XE#1600]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1600
[Intel XE#1601]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1601
[Intel XE#1622]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1622
[Intel XE#1639]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1639
[Intel XE#1659]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1659
[Intel XE#1727]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1727
[Intel XE#1745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1745
[Intel XE#1760]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1760
[Intel XE#1794]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1794
[Intel XE#1874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1874
[Intel XE#1899]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1899
[Intel XE#1941]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1941
[Intel XE#1962]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1962
[Intel XE#1975]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1975
[Intel XE#2049]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2049
[Intel XE#2097]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2097
[Intel XE#261]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/261
[Intel XE#282]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/282
[Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
[Intel XE#305]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/305
[Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
[Intel XE#307]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/307
[Intel XE#308]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/308
[Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#310]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/310
[Intel XE#316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/316
[Intel XE#323]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/323
[Intel XE#324]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/324
[Intel XE#327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/327
[Intel XE#330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/330
[Intel XE#352]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/352
[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#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/374
[Intel XE#378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/378
[Intel XE#392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/392
[Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
[Intel XE#488]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/488
[Intel XE#498]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/498
[Intel XE#560]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/560
[Intel XE#569]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/569
[Intel XE#584]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/584
[Intel XE#599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/599
[Intel XE#607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/607
[Intel XE#610]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/610
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#653]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/653
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#658]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/658
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#703]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/703
[Intel XE#756]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/756
[Intel XE#771]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/771
[Intel XE#776]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/776
[Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
[Intel XE#827]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/827
[Intel XE#836]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/836
[Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
[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#908]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/908
[Intel XE#910]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/910
[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
[Intel XE#979]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/979
[i915#5274]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5274
Build changes
-------------
* Linux: xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c -> xe-pw-133034v4
IGT_7891: 732f3aaf49c9cc62ff3518a56ece1a825c08d22e @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-1491-fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c: fd8ad6cbb953a61cdbb7d7a10a13a2b5c8752c4c
xe-pw-133034v4: 133034v4
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-133034v4/index.html
[-- Attachment #2: Type: text/html, Size: 109619 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v4 4/7] drm/xe: Convert multiple bind ops into single job
2024-06-18 17:15 ` [PATCH v4 4/7] drm/xe: Convert multiple bind ops into single job Matthew Brost
@ 2024-06-20 17:15 ` Matthew Auld
2024-06-20 18:52 ` Matthew Brost
2024-06-21 15:23 ` Matthew Auld
1 sibling, 1 reply; 23+ messages in thread
From: Matthew Auld @ 2024-06-20 17:15 UTC (permalink / raw)
To: Matthew Brost, intel-xe
Hi,
On 18/06/2024 18:15, Matthew Brost wrote:
> This aligns with the uAPI of an array of binds or single bind that
> results in multiple GPUVA ops to be considered a single atomic
> operations.
>
> The implemenation is roughly:
> - xe_vma_ops is a list of xe_vma_op (GPUVA op)
> - each xe_vma_op resolves to 0-3 PT ops
> - xe_vma_ops creates a single job
> - if at any point during binding a failure occurs, xe_vma_ops contains
> the information necessary unwind the PT and VMA (GPUVA) state
>
> v2:
> - add missing dma-resv slot reservation (CI, testing)
> v4:
> - Fix TLB invalidation (Paulo)
> - Add missing xe_sched_job_last_fence_add/test_dep check (Inspection)
>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Signed-off-by: Matthew Brost <matthew.brost@intel.com>
> ---
> drivers/gpu/drm/xe/xe_bo_types.h | 2 +
> drivers/gpu/drm/xe/xe_migrate.c | 296 ++++----
> drivers/gpu/drm/xe/xe_migrate.h | 32 +-
> drivers/gpu/drm/xe/xe_pt.c | 1112 +++++++++++++++++++-----------
> drivers/gpu/drm/xe/xe_pt.h | 14 +-
> drivers/gpu/drm/xe/xe_pt_types.h | 36 +
> drivers/gpu/drm/xe/xe_vm.c | 519 +++-----------
> drivers/gpu/drm/xe/xe_vm.h | 2 +
> drivers/gpu/drm/xe/xe_vm_types.h | 45 +-
> 9 files changed, 1035 insertions(+), 1023 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
> index 86422e113d39..02d68873558a 100644
> --- a/drivers/gpu/drm/xe/xe_bo_types.h
> +++ b/drivers/gpu/drm/xe/xe_bo_types.h
> @@ -58,6 +58,8 @@ struct xe_bo {
> #endif
> /** @freed: List node for delayed put. */
> struct llist_node freed;
> + /** @update_index: Update index if PT BO */
> + int update_index;
> /** @created: Whether the bo has passed initial creation */
> bool created;
>
> diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
> index af62783d34ac..a1acd7d01243 100644
> --- a/drivers/gpu/drm/xe/xe_migrate.c
> +++ b/drivers/gpu/drm/xe/xe_migrate.c
> @@ -1125,6 +1125,7 @@ struct dma_fence *xe_migrate_clear(struct xe_migrate *m,
> }
>
> static void write_pgtable(struct xe_tile *tile, struct xe_bb *bb, u64 ppgtt_ofs,
> + const struct xe_vm_pgtable_update_op *pt_op,
> const struct xe_vm_pgtable_update *update,
> struct xe_migrate_pt_update *pt_update)
> {
> @@ -1159,8 +1160,12 @@ static void write_pgtable(struct xe_tile *tile, struct xe_bb *bb, u64 ppgtt_ofs,
> bb->cs[bb->len++] = MI_STORE_DATA_IMM | MI_SDI_NUM_QW(chunk);
> bb->cs[bb->len++] = lower_32_bits(addr);
> bb->cs[bb->len++] = upper_32_bits(addr);
> - ops->populate(pt_update, tile, NULL, bb->cs + bb->len, ofs, chunk,
> - update);
> + if (pt_op->bind)
> + ops->populate(pt_update, tile, NULL, bb->cs + bb->len,
> + ofs, chunk, update);
> + else
> + ops->clear(pt_update, tile, NULL, bb->cs + bb->len,
> + ofs, chunk, update);
>
> bb->len += chunk * 2;
> ofs += chunk;
> @@ -1185,114 +1190,58 @@ struct migrate_test_params {
>
> static struct dma_fence *
> xe_migrate_update_pgtables_cpu(struct xe_migrate *m,
> - struct xe_vm *vm, struct xe_bo *bo,
> - const struct xe_vm_pgtable_update *updates,
> - u32 num_updates, bool wait_vm,
> struct xe_migrate_pt_update *pt_update)
> {
> XE_TEST_DECLARE(struct migrate_test_params *test =
> to_migrate_test_params
> (xe_cur_kunit_priv(XE_TEST_LIVE_MIGRATE));)
> const struct xe_migrate_pt_update_ops *ops = pt_update->ops;
> - struct dma_fence *fence;
> + struct xe_vm *vm = pt_update->vops->vm;
> + struct xe_vm_pgtable_update_ops *pt_update_ops =
> + &pt_update->vops->pt_update_ops[pt_update->tile_id];
> int err;
> - u32 i;
> + u32 j, i;
...
>
> if (XE_TEST_ONLY(test && test->force_gpu))
> return ERR_PTR(-ETIME);
>
> - if (bo && !dma_resv_test_signaled(bo->ttm.base.resv,
> - DMA_RESV_USAGE_KERNEL))
> - return ERR_PTR(-ETIME);
> -
> - if (wait_vm && !dma_resv_test_signaled(xe_vm_resv(vm),
> - DMA_RESV_USAGE_BOOKKEEP))
> - return ERR_PTR(-ETIME);
> -
> if (ops->pre_commit) {
> pt_update->job = NULL;
> err = ops->pre_commit(pt_update);
> if (err)
> return ERR_PTR(err);
> }
> - for (i = 0; i < num_updates; i++) {
> - const struct xe_vm_pgtable_update *update = &updates[i];
> -
> - ops->populate(pt_update, m->tile, &update->pt_bo->vmap, NULL,
> - update->ofs, update->qwords, update);
> - }
> -
> - if (vm) {
> - trace_xe_vm_cpu_bind(vm);
> - xe_device_wmb(vm->xe);
> - }
> -
> - fence = dma_fence_get_stub();
> -
> - return fence;
> -}
> -
> -static bool no_in_syncs(struct xe_vm *vm, struct xe_exec_queue *q,
> - struct xe_sync_entry *syncs, u32 num_syncs)
> -{
> - struct dma_fence *fence;
> - int i;
>
> - for (i = 0; i < num_syncs; i++) {
> - fence = syncs[i].fence;
> -
> - if (fence && !test_bit(DMA_FENCE_FLAG_SIGNALED_BIT,
> - &fence->flags))
> - return false;
> - }
> - if (q) {
> - fence = xe_exec_queue_last_fence_get(q, vm);
> - if (!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) {
> - dma_fence_put(fence);
> - return false;
> + for (j = 0; j < pt_update_ops->num_ops; ++j) {
> + const struct xe_vm_pgtable_update_op *pt_op =
> + &pt_update_ops->ops[j];
> +
> + for (i = 0; i < pt_op->num_entries; i++) {
...inverting i and j here?
> + const struct xe_vm_pgtable_update *update =
> + &pt_op->entries[i];
> +
> + if (pt_op->bind)
> + ops->populate(pt_update, m->tile,
> + &update->pt_bo->vmap, NULL,
> + update->ofs, update->qwords,
> + update);
> + else
> + ops->clear(pt_update, m->tile,
> + &update->pt_bo->vmap, NULL,
> + update->ofs, update->qwords, update);
> }
> - dma_fence_put(fence);
> }
>
> - return true;
> + trace_xe_vm_cpu_bind(vm);
> + xe_device_wmb(vm->xe);
> +
> + return dma_fence_get_stub();
> }
>
> -/**
> - * xe_migrate_update_pgtables() - Pipelined page-table update
> - * @m: The migrate context.
> - * @vm: The vm we'll be updating.
> - * @bo: The bo whose dma-resv we will await before updating, or NULL if userptr.
> - * @q: The exec queue to be used for the update or NULL if the default
> - * migration engine is to be used.
> - * @updates: An array of update descriptors.
> - * @num_updates: Number of descriptors in @updates.
> - * @syncs: Array of xe_sync_entry to await before updating. Note that waits
> - * will block the engine timeline.
> - * @num_syncs: Number of entries in @syncs.
> - * @pt_update: Pointer to a struct xe_migrate_pt_update, which contains
> - * pointers to callback functions and, if subclassed, private arguments to
> - * those.
> - *
> - * Perform a pipelined page-table update. The update descriptors are typically
> - * built under the same lock critical section as a call to this function. If
> - * using the default engine for the updates, they will be performed in the
> - * order they grab the job_mutex. If different engines are used, external
> - * synchronization is needed for overlapping updates to maintain page-table
> - * consistency. Note that the meaing of "overlapping" is that the updates
> - * touch the same page-table, which might be a higher-level page-directory.
> - * If no pipelining is needed, then updates may be performed by the cpu.
> - *
> - * Return: A dma_fence that, when signaled, indicates the update completion.
> - */
> -struct dma_fence *
> -xe_migrate_update_pgtables(struct xe_migrate *m,
> - struct xe_vm *vm,
> - struct xe_bo *bo,
> - struct xe_exec_queue *q,
> - const struct xe_vm_pgtable_update *updates,
> - u32 num_updates,
> - struct xe_sync_entry *syncs, u32 num_syncs,
> - struct xe_migrate_pt_update *pt_update)
> +static struct dma_fence *
> +__xe_migrate_update_pgtables(struct xe_migrate *m,
> + struct xe_migrate_pt_update *pt_update,
> + struct xe_vm_pgtable_update_ops *pt_update_ops)
> {
> const struct xe_migrate_pt_update_ops *ops = pt_update->ops;
> struct xe_tile *tile = m->tile;
> @@ -1301,59 +1250,45 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
> struct xe_sched_job *job;
> struct dma_fence *fence;
> struct drm_suballoc *sa_bo = NULL;
> - struct xe_vma *vma = pt_update->vma;
> struct xe_bb *bb;
> - u32 i, batch_size, ppgtt_ofs, update_idx, page_ofs = 0;
> + u32 i, j, batch_size = 0, ppgtt_ofs, update_idx, page_ofs = 0;
> + u32 num_updates = 0, current_update = 0;
> u64 addr;
> int err = 0;
> - bool usm = !q && xe->info.has_usm;
> - bool first_munmap_rebind = vma &&
> - vma->gpuva.flags & XE_VMA_FIRST_REBIND;
> - struct xe_exec_queue *q_override = !q ? m->q : q;
> - u16 pat_index = xe->pat.idx[XE_CACHE_WB];
> + bool is_migrate = pt_update_ops->q == m->q;
> + bool usm = is_migrate && xe->info.has_usm;
>
> - /* Use the CPU if no in syncs and engine is idle */
> - if (no_in_syncs(vm, q, syncs, num_syncs) && xe_exec_queue_is_idle(q_override)) {
> - fence = xe_migrate_update_pgtables_cpu(m, vm, bo, updates,
> - num_updates,
> - first_munmap_rebind,
> - pt_update);
> - if (!IS_ERR(fence) || fence == ERR_PTR(-EAGAIN))
> - return fence;
> + for (i = 0; i < pt_update_ops->num_ops; ++i) {
> + struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[i];
> + struct xe_vm_pgtable_update *updates = pt_op->entries;
> +
> + num_updates += pt_op->num_entries;
> + for (j = 0; j < pt_op->num_entries; ++j) {
> + u32 num_cmds = DIV_ROUND_UP(updates[j].qwords, 0x1ff);
> +
> + /* align noop + MI_STORE_DATA_IMM cmd prefix */
> + batch_size += 4 * num_cmds + updates[j].qwords * 2;
> + }
> }
>
> /* fixed + PTE entries */
> if (IS_DGFX(xe))
> - batch_size = 2;
> + batch_size += 2;
> else
> - batch_size = 6 + num_updates * 2;
> + batch_size += 6 + num_updates * 2;
>
> - for (i = 0; i < num_updates; i++) {
> - u32 num_cmds = DIV_ROUND_UP(updates[i].qwords, MAX_PTE_PER_SDI);
> -
> - /* align noop + MI_STORE_DATA_IMM cmd prefix */
> - batch_size += 4 * num_cmds + updates[i].qwords * 2;
> - }
> -
> - /*
> - * XXX: Create temp bo to copy from, if batch_size becomes too big?
> - *
> - * Worst case: Sum(2 * (each lower level page size) + (top level page size))
> - * Should be reasonably bound..
> - */
> - xe_tile_assert(tile, batch_size < SZ_128K);
Why do we drop this assert? I guess the batch size is potentially now
much larger, since we combine more stuff into single job? The pool is
fixed size and only 512K on igpu. Can userspace not hit the limit of
that? It looks like this would also trigger a warning in drm_suballoc_new():
if (WARN_ON_ONCE(size > sa_manager->size || !size))
return ERR_PTR(-EINVAL);
Do we need some more checking somewhere? Also maybe bump the pool size?
> -
> - bb = xe_bb_new(gt, batch_size, !q && xe->info.has_usm);
> + bb = xe_bb_new(gt, batch_size, usm);
> if (IS_ERR(bb))
> return ERR_CAST(bb);
>
> /* For sysmem PTE's, need to map them in our hole.. */
> if (!IS_DGFX(xe)) {
> ppgtt_ofs = NUM_KERNEL_PDE - 1;
> - if (q) {
> - xe_tile_assert(tile, num_updates <= NUM_VMUSA_WRITES_PER_UNIT);
> + if (!is_migrate) {
> + u32 num_units = DIV_ROUND_UP(num_updates,
> + NUM_VMUSA_WRITES_PER_UNIT);
>
> - sa_bo = drm_suballoc_new(&m->vm_update_sa, 1,
> + sa_bo = drm_suballoc_new(&m->vm_update_sa, num_units,
> GFP_KERNEL, true, 0);
> if (IS_ERR(sa_bo)) {
> err = PTR_ERR(sa_bo);
> @@ -1373,14 +1308,26 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
> bb->cs[bb->len++] = ppgtt_ofs * XE_PAGE_SIZE + page_ofs;
> bb->cs[bb->len++] = 0; /* upper_32_bits */
>
> - for (i = 0; i < num_updates; i++) {
> - struct xe_bo *pt_bo = updates[i].pt_bo;
> + for (i = 0; i < pt_update_ops->num_ops; ++i) {
> + struct xe_vm_pgtable_update_op *pt_op =
> + &pt_update_ops->ops[i];
> + struct xe_vm_pgtable_update *updates = pt_op->entries;
>
> - xe_tile_assert(tile, pt_bo->size == SZ_4K);
> + for (j = 0; j < pt_op->num_entries; ++j, ++current_update) {
> + struct xe_vm *vm = pt_update->vops->vm;
> + struct xe_bo *pt_bo = updates[j].pt_bo;
>
> - addr = vm->pt_ops->pte_encode_bo(pt_bo, 0, pat_index, 0);
> - bb->cs[bb->len++] = lower_32_bits(addr);
> - bb->cs[bb->len++] = upper_32_bits(addr);
> + xe_tile_assert(tile, pt_bo->size == SZ_4K);
> +
> + /* Map a PT at most once */
> + if (pt_bo->update_index < 0)
> + pt_bo->update_index = current_update;
> +
> + addr = vm->pt_ops->pte_encode_bo(pt_bo, 0,
> + XE_CACHE_WB, 0);
> + bb->cs[bb->len++] = lower_32_bits(addr);
> + bb->cs[bb->len++] = upper_32_bits(addr);
> + }
> }
>
> bb->cs[bb->len++] = MI_BATCH_BUFFER_END;
> @@ -1388,19 +1335,36 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
>
> addr = xe_migrate_vm_addr(ppgtt_ofs, 0) +
> (page_ofs / sizeof(u64)) * XE_PAGE_SIZE;
> - for (i = 0; i < num_updates; i++)
> - write_pgtable(tile, bb, addr + i * XE_PAGE_SIZE,
> - &updates[i], pt_update);
> + for (i = 0; i < pt_update_ops->num_ops; ++i) {
> + struct xe_vm_pgtable_update_op *pt_op =
> + &pt_update_ops->ops[i];
> + struct xe_vm_pgtable_update *updates = pt_op->entries;
> +
> + for (j = 0; j < pt_op->num_entries; ++j) {
> + struct xe_bo *pt_bo = updates[j].pt_bo;
> +
> + write_pgtable(tile, bb, addr +
> + pt_bo->update_index * XE_PAGE_SIZE,
> + pt_op, &updates[j], pt_update);
> + }
> + }
> } else {
> /* phys pages, no preamble required */
> bb->cs[bb->len++] = MI_BATCH_BUFFER_END;
> update_idx = bb->len;
>
> - for (i = 0; i < num_updates; i++)
> - write_pgtable(tile, bb, 0, &updates[i], pt_update);
> + for (i = 0; i < pt_update_ops->num_ops; ++i) {
> + struct xe_vm_pgtable_update_op *pt_op =
> + &pt_update_ops->ops[i];
> + struct xe_vm_pgtable_update *updates = pt_op->entries;
> +
> + for (j = 0; j < pt_op->num_entries; ++j)
> + write_pgtable(tile, bb, 0, pt_op, &updates[j],
> + pt_update);
> + }
> }
>
> - job = xe_bb_create_migration_job(q ?: m->q, bb,
> + job = xe_bb_create_migration_job(pt_update_ops->q, bb,
> xe_migrate_batch_base(m, usm),
> update_idx);
> if (IS_ERR(job)) {
> @@ -1408,46 +1372,20 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
> goto err_bb;
> }
>
> - /* Wait on BO move */
> - if (bo) {
> - err = xe_sched_job_add_deps(job, bo->ttm.base.resv,
> - DMA_RESV_USAGE_KERNEL);
> - if (err)
> - goto err_job;
> - }
> -
> - /*
> - * Munmap style VM unbind, need to wait for all jobs to be complete /
> - * trigger preempts before moving forward
> - */
> - if (first_munmap_rebind) {
> - err = xe_sched_job_add_deps(job, xe_vm_resv(vm),
> - DMA_RESV_USAGE_BOOKKEEP);
> - if (err)
> - goto err_job;
> - }
> -
> - err = xe_sched_job_last_fence_add_dep(job, vm);
> - for (i = 0; !err && i < num_syncs; i++)
> - err = xe_sync_entry_add_deps(&syncs[i], job);
> -
> - if (err)
> - goto err_job;
> -
> if (ops->pre_commit) {
> pt_update->job = job;
> err = ops->pre_commit(pt_update);
> if (err)
> goto err_job;
> }
> - if (!q)
> + if (is_migrate)
> mutex_lock(&m->job_mutex);
>
> xe_sched_job_arm(job);
> fence = dma_fence_get(&job->drm.s_fence->finished);
> xe_sched_job_push(job);
>
> - if (!q)
> + if (is_migrate)
> mutex_unlock(&m->job_mutex);
>
> xe_bb_free(bb, fence);
> @@ -1464,6 +1402,38 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
> return ERR_PTR(err);
> }
>
> +/**
> + * xe_migrate_update_pgtables() - Pipelined page-table update
> + * @m: The migrate context.
> + * @pt_update: PT update arguments
> + *
> + * Perform a pipelined page-table update. The update descriptors are typically
> + * built under the same lock critical section as a call to this function. If
> + * using the default engine for the updates, they will be performed in the
> + * order they grab the job_mutex. If different engines are used, external
> + * synchronization is needed for overlapping updates to maintain page-table
> + * consistency. Note that the meaing of "overlapping" is that the updates
> + * touch the same page-table, which might be a higher-level page-directory.
> + * If no pipelining is needed, then updates may be performed by the cpu.
> + *
> + * Return: A dma_fence that, when signaled, indicates the update completion.
> + */
> +struct dma_fence *
> +xe_migrate_update_pgtables(struct xe_migrate *m,
> + struct xe_migrate_pt_update *pt_update)
> +
> +{
> + struct xe_vm_pgtable_update_ops *pt_update_ops =
> + &pt_update->vops->pt_update_ops[pt_update->tile_id];
> + struct dma_fence *fence;
> +
> + fence = xe_migrate_update_pgtables_cpu(m, pt_update);
> + if (!IS_ERR(fence))
> + return fence;
Previously there was an EAGAIN check here to bail. It's fine to drop this?
> +
> + return __xe_migrate_update_pgtables(m, pt_update, pt_update_ops);
> +}
> +
> /**
> * xe_migrate_wait() - Complete all operations using the xe_migrate context
> * @m: Migrate context to wait for.
> diff --git a/drivers/gpu/drm/xe/xe_migrate.h b/drivers/gpu/drm/xe/xe_migrate.h
> index a5bcaafe4a99..453e0ecf5034 100644
> --- a/drivers/gpu/drm/xe/xe_migrate.h
> +++ b/drivers/gpu/drm/xe/xe_migrate.h
> @@ -47,6 +47,24 @@ struct xe_migrate_pt_update_ops {
> struct xe_tile *tile, struct iosys_map *map,
> void *pos, u32 ofs, u32 num_qwords,
> const struct xe_vm_pgtable_update *update);
> + /**
> + * @clear: Clear a command buffer or page-table with ptes.
> + * @pt_update: Embeddable callback argument.
> + * @tile: The tile for the current operation.
> + * @map: struct iosys_map into the memory to be populated.
> + * @pos: If @map is NULL, map into the memory to be populated.
> + * @ofs: qword offset into @map, unused if @map is NULL.
> + * @num_qwords: Number of qwords to write.
> + * @update: Information about the PTEs to be inserted.
> + *
> + * This interface is intended to be used as a callback into the
> + * page-table system to populate command buffers or shared
> + * page-tables with PTEs.
> + */
> + void (*clear)(struct xe_migrate_pt_update *pt_update,
> + struct xe_tile *tile, struct iosys_map *map,
> + void *pos, u32 ofs, u32 num_qwords,
> + const struct xe_vm_pgtable_update *update);
>
> /**
> * @pre_commit: Callback to be called just before arming the
> @@ -67,14 +85,10 @@ struct xe_migrate_pt_update_ops {
> struct xe_migrate_pt_update {
> /** @ops: Pointer to the struct xe_migrate_pt_update_ops callbacks */
> const struct xe_migrate_pt_update_ops *ops;
> - /** @vma: The vma we're updating the pagetable for. */
> - struct xe_vma *vma;
> + /** @vops: VMA operations */
> + struct xe_vma_ops *vops;
> /** @job: The job if a GPU page-table update. NULL otherwise */
> struct xe_sched_job *job;
> - /** @start: Start of update for the range fence */
> - u64 start;
> - /** @last: Last of update for the range fence */
> - u64 last;
> /** @tile_id: Tile ID of the update */
> u8 tile_id;
> };
> @@ -96,12 +110,6 @@ struct xe_vm *xe_migrate_get_vm(struct xe_migrate *m);
>
> struct dma_fence *
> xe_migrate_update_pgtables(struct xe_migrate *m,
> - struct xe_vm *vm,
> - struct xe_bo *bo,
> - struct xe_exec_queue *q,
> - const struct xe_vm_pgtable_update *updates,
> - u32 num_updates,
> - struct xe_sync_entry *syncs, u32 num_syncs,
> struct xe_migrate_pt_update *pt_update);
>
> void xe_migrate_wait(struct xe_migrate *m);
> diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
> index ade9e7a3a0ad..d6ce531f0fcd 100644
> --- a/drivers/gpu/drm/xe/xe_pt.c
> +++ b/drivers/gpu/drm/xe/xe_pt.c
> @@ -9,12 +9,15 @@
> #include "xe_bo.h"
> #include "xe_device.h"
> #include "xe_drm_client.h"
> +#include "xe_exec_queue.h"
> #include "xe_gt.h"
> #include "xe_gt_tlb_invalidation.h"
> #include "xe_migrate.h"
> #include "xe_pt_types.h"
> #include "xe_pt_walk.h"
> #include "xe_res_cursor.h"
> +#include "xe_sched_job.h"
> +#include "xe_sync.h"
> #include "xe_trace.h"
> #include "xe_ttm_stolen_mgr.h"
> #include "xe_vm.h"
> @@ -325,6 +328,7 @@ xe_pt_new_shared(struct xe_walk_update *wupd, struct xe_pt *parent,
> entry->pt = parent;
> entry->flags = 0;
> entry->qwords = 0;
> + entry->pt_bo->update_index = -1;
>
> if (alloc_entries) {
> entry->pt_entries = kmalloc_array(XE_PDES,
> @@ -864,9 +868,7 @@ static void xe_pt_commit_locks_assert(struct xe_vma *vma)
>
> lockdep_assert_held(&vm->lock);
>
> - if (xe_vma_is_userptr(vma))
> - lockdep_assert_held_read(&vm->userptr.notifier_lock);
> - else if (!xe_vma_is_null(vma))
> + if (!xe_vma_is_userptr(vma) && !xe_vma_is_null(vma))
> dma_resv_assert_held(xe_vma_bo(vma)->ttm.base.resv);
>
> xe_vm_assert_held(vm);
> @@ -888,10 +890,8 @@ static void xe_pt_commit_bind(struct xe_vma *vma,
> if (!rebind)
> pt->num_live += entries[i].qwords;
>
> - if (!pt->level) {
> - kfree(entries[i].pt_entries);
> + if (!pt->level)
> continue;
> - }
>
> pt_dir = as_xe_pt_dir(pt);
> for (j = 0; j < entries[i].qwords; j++) {
> @@ -904,10 +904,18 @@ static void xe_pt_commit_bind(struct xe_vma *vma,
>
> pt_dir->children[j_] = &newpte->base;
> }
> - kfree(entries[i].pt_entries);
> }
> }
>
> +static void xe_pt_free_bind(struct xe_vm_pgtable_update *entries,
> + u32 num_entries)
> +{
> + u32 i;
> +
> + for (i = 0; i < num_entries; i++)
> + kfree(entries[i].pt_entries);
> +}
> +
> static int
> xe_pt_prepare_bind(struct xe_tile *tile, struct xe_vma *vma,
> struct xe_vm_pgtable_update *entries, u32 *num_entries)
> @@ -926,12 +934,13 @@ xe_pt_prepare_bind(struct xe_tile *tile, struct xe_vma *vma,
>
> static void xe_vm_dbg_print_entries(struct xe_device *xe,
> const struct xe_vm_pgtable_update *entries,
> - unsigned int num_entries)
> + unsigned int num_entries, bool bind)
> #if (IS_ENABLED(CONFIG_DRM_XE_DEBUG_VM))
> {
> unsigned int i;
>
> - vm_dbg(&xe->drm, "%u entries to update\n", num_entries);
> + vm_dbg(&xe->drm, "%s: %u entries to update\n", bind ? "bind" : "unbind",
> + num_entries);
> for (i = 0; i < num_entries; i++) {
> const struct xe_vm_pgtable_update *entry = &entries[i];
> struct xe_pt *xe_pt = entry->pt;
> @@ -952,66 +961,116 @@ static void xe_vm_dbg_print_entries(struct xe_device *xe,
> {}
> #endif
>
> -#ifdef CONFIG_DRM_XE_USERPTR_INVAL_INJECT
> -
> -static int xe_pt_userptr_inject_eagain(struct xe_userptr_vma *uvma)
> +static bool no_in_syncs(struct xe_sync_entry *syncs, u32 num_syncs)
> {
> - u32 divisor = uvma->userptr.divisor ? uvma->userptr.divisor : 2;
> - static u32 count;
> + int i;
>
> - if (count++ % divisor == divisor - 1) {
> - struct xe_vm *vm = xe_vma_vm(&uvma->vma);
> + for (i = 0; i < num_syncs; i++) {
> + struct dma_fence *fence = syncs[i].fence;
>
> - uvma->userptr.divisor = divisor << 1;
> - spin_lock(&vm->userptr.invalidated_lock);
> - list_move_tail(&uvma->userptr.invalidate_link,
> - &vm->userptr.invalidated);
> - spin_unlock(&vm->userptr.invalidated_lock);
> - return true;
> + if (fence && !test_bit(DMA_FENCE_FLAG_SIGNALED_BIT,
> + &fence->flags))
> + return false;
> }
>
> - return false;
> + return true;
> }
>
> -#else
> -
> -static bool xe_pt_userptr_inject_eagain(struct xe_userptr_vma *uvma)
> +static int vma_add_deps(struct xe_vma *vma, struct xe_sched_job *job)
> {
> - return false;
> + struct xe_bo *bo = xe_vma_bo(vma);
> +
> + xe_bo_assert_held(bo);
> +
> + if (bo && !bo->vm) {
> + if (!job) {
> + if (!dma_resv_test_signaled(bo->ttm.base.resv,
> + DMA_RESV_USAGE_KERNEL))
> + return -ETIME;
> + } else {
> + return xe_sched_job_add_deps(job, bo->ttm.base.resv,
> + DMA_RESV_USAGE_KERNEL);
> + }
> + }
> +
> + return 0;
> }
>
> -#endif
> +static int op_add_deps(struct xe_vm *vm, struct xe_vma_op *op,
> + struct xe_sched_job *job)
> +{
> + int err = 0;
>
> -/**
> - * struct xe_pt_migrate_pt_update - Callback argument for pre-commit callbacks
> - * @base: Base we derive from.
> - * @bind: Whether this is a bind or an unbind operation. A bind operation
> - * makes the pre-commit callback error with -EAGAIN if it detects a
> - * pending invalidation.
> - * @locked: Whether the pre-commit callback locked the userptr notifier lock
> - * and it needs unlocking.
> - */
> -struct xe_pt_migrate_pt_update {
> - struct xe_migrate_pt_update base;
> - bool bind;
> - bool locked;
> -};
> + switch (op->base.op) {
> + case DRM_GPUVA_OP_MAP:
> + if (!op->map.immediate && xe_vm_in_fault_mode(vm))
> + break;
> +
> + err = vma_add_deps(op->map.vma, job);
> + break;
> + case DRM_GPUVA_OP_REMAP:
> + if (op->remap.prev)
> + err = vma_add_deps(op->remap.prev, job);
> + if (!err && op->remap.next)
> + err = vma_add_deps(op->remap.next, job);
> + break;
> + case DRM_GPUVA_OP_UNMAP:
> + break;
> + case DRM_GPUVA_OP_PREFETCH:
> + err = vma_add_deps(gpuva_to_vma(op->base.prefetch.va), job);
> + break;
> + default:
> + drm_warn(&vm->xe->drm, "NOT POSSIBLE");
> + }
> +
> + return err;
> +}
>
> -/*
> - * This function adds the needed dependencies to a page-table update job
> - * to make sure racing jobs for separate bind engines don't race writing
> - * to the same page-table range, wreaking havoc. Initially use a single
> - * fence for the entire VM. An optimization would use smaller granularity.
> - */
> static int xe_pt_vm_dependencies(struct xe_sched_job *job,
> - struct xe_range_fence_tree *rftree,
> - u64 start, u64 last)
> + struct xe_vm *vm,
> + struct xe_vma_ops *vops,
> + struct xe_vm_pgtable_update_ops *pt_update_ops,
> + struct xe_range_fence_tree *rftree)
> {
> struct xe_range_fence *rtfence;
> struct dma_fence *fence;
> - int err;
> + struct xe_vma_op *op;
> + int err = 0, i;
>
> - rtfence = xe_range_fence_tree_first(rftree, start, last);
> + xe_vm_assert_held(vm);
> +
> + if (!job && !no_in_syncs(vops->syncs, vops->num_syncs))
> + return -ETIME;
> +
> + if (!job && !xe_exec_queue_is_idle(pt_update_ops->q))
> + return -ETIME;
> +
> + if (pt_update_ops->wait_vm_bookkeep) {
> + if (!job) {
> + if (!dma_resv_test_signaled(xe_vm_resv(vm),
> + DMA_RESV_USAGE_BOOKKEEP))
> + return -ETIME;
> + } else {
> + err = xe_sched_job_add_deps(job, xe_vm_resv(vm),
> + DMA_RESV_USAGE_BOOKKEEP);
> + if (err)
> + return err;
> + }
> + } else if (pt_update_ops->wait_vm_kernel) {
> + if (!job) {
> + if (!dma_resv_test_signaled(xe_vm_resv(vm),
> + DMA_RESV_USAGE_KERNEL))
> + return -ETIME;
> + } else {
> + err = xe_sched_job_add_deps(job, xe_vm_resv(vm),
> + DMA_RESV_USAGE_KERNEL);
> + if (err)
> + return err;
> + }
> + }
Could maybe reduce some duplication here? Maybe wait_vm + wait_vm_usage.
<snip>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v4 4/7] drm/xe: Convert multiple bind ops into single job
2024-06-20 17:15 ` Matthew Auld
@ 2024-06-20 18:52 ` Matthew Brost
2024-06-20 19:20 ` Matthew Brost
0 siblings, 1 reply; 23+ messages in thread
From: Matthew Brost @ 2024-06-20 18:52 UTC (permalink / raw)
To: Matthew Auld; +Cc: intel-xe
On Thu, Jun 20, 2024 at 06:15:54PM +0100, Matthew Auld wrote:
> Hi,
>
> On 18/06/2024 18:15, Matthew Brost wrote:
> > This aligns with the uAPI of an array of binds or single bind that
> > results in multiple GPUVA ops to be considered a single atomic
> > operations.
> >
> > The implemenation is roughly:
> > - xe_vma_ops is a list of xe_vma_op (GPUVA op)
> > - each xe_vma_op resolves to 0-3 PT ops
> > - xe_vma_ops creates a single job
> > - if at any point during binding a failure occurs, xe_vma_ops contains
> > the information necessary unwind the PT and VMA (GPUVA) state
> >
> > v2:
> > - add missing dma-resv slot reservation (CI, testing)
> > v4:
> > - Fix TLB invalidation (Paulo)
> > - Add missing xe_sched_job_last_fence_add/test_dep check (Inspection)
> >
> > Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> > Signed-off-by: Matthew Brost <matthew.brost@intel.com>
> > ---
> > drivers/gpu/drm/xe/xe_bo_types.h | 2 +
> > drivers/gpu/drm/xe/xe_migrate.c | 296 ++++----
> > drivers/gpu/drm/xe/xe_migrate.h | 32 +-
> > drivers/gpu/drm/xe/xe_pt.c | 1112 +++++++++++++++++++-----------
> > drivers/gpu/drm/xe/xe_pt.h | 14 +-
> > drivers/gpu/drm/xe/xe_pt_types.h | 36 +
> > drivers/gpu/drm/xe/xe_vm.c | 519 +++-----------
> > drivers/gpu/drm/xe/xe_vm.h | 2 +
> > drivers/gpu/drm/xe/xe_vm_types.h | 45 +-
> > 9 files changed, 1035 insertions(+), 1023 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
> > index 86422e113d39..02d68873558a 100644
> > --- a/drivers/gpu/drm/xe/xe_bo_types.h
> > +++ b/drivers/gpu/drm/xe/xe_bo_types.h
> > @@ -58,6 +58,8 @@ struct xe_bo {
> > #endif
> > /** @freed: List node for delayed put. */
> > struct llist_node freed;
> > + /** @update_index: Update index if PT BO */
> > + int update_index;
> > /** @created: Whether the bo has passed initial creation */
> > bool created;
> > diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
> > index af62783d34ac..a1acd7d01243 100644
> > --- a/drivers/gpu/drm/xe/xe_migrate.c
> > +++ b/drivers/gpu/drm/xe/xe_migrate.c
> > @@ -1125,6 +1125,7 @@ struct dma_fence *xe_migrate_clear(struct xe_migrate *m,
> > }
> > static void write_pgtable(struct xe_tile *tile, struct xe_bb *bb, u64 ppgtt_ofs,
> > + const struct xe_vm_pgtable_update_op *pt_op,
> > const struct xe_vm_pgtable_update *update,
> > struct xe_migrate_pt_update *pt_update)
> > {
> > @@ -1159,8 +1160,12 @@ static void write_pgtable(struct xe_tile *tile, struct xe_bb *bb, u64 ppgtt_ofs,
> > bb->cs[bb->len++] = MI_STORE_DATA_IMM | MI_SDI_NUM_QW(chunk);
> > bb->cs[bb->len++] = lower_32_bits(addr);
> > bb->cs[bb->len++] = upper_32_bits(addr);
> > - ops->populate(pt_update, tile, NULL, bb->cs + bb->len, ofs, chunk,
> > - update);
> > + if (pt_op->bind)
> > + ops->populate(pt_update, tile, NULL, bb->cs + bb->len,
> > + ofs, chunk, update);
> > + else
> > + ops->clear(pt_update, tile, NULL, bb->cs + bb->len,
> > + ofs, chunk, update);
> > bb->len += chunk * 2;
> > ofs += chunk;
> > @@ -1185,114 +1190,58 @@ struct migrate_test_params {
> > static struct dma_fence *
> > xe_migrate_update_pgtables_cpu(struct xe_migrate *m,
> > - struct xe_vm *vm, struct xe_bo *bo,
> > - const struct xe_vm_pgtable_update *updates,
> > - u32 num_updates, bool wait_vm,
> > struct xe_migrate_pt_update *pt_update)
> > {
> > XE_TEST_DECLARE(struct migrate_test_params *test =
> > to_migrate_test_params
> > (xe_cur_kunit_priv(XE_TEST_LIVE_MIGRATE));)
> > const struct xe_migrate_pt_update_ops *ops = pt_update->ops;
> > - struct dma_fence *fence;
> > + struct xe_vm *vm = pt_update->vops->vm;
> > + struct xe_vm_pgtable_update_ops *pt_update_ops =
> > + &pt_update->vops->pt_update_ops[pt_update->tile_id];
> > int err;
> > - u32 i;
> > + u32 j, i;
>
> ...
>
> > if (XE_TEST_ONLY(test && test->force_gpu))
> > return ERR_PTR(-ETIME);
> > - if (bo && !dma_resv_test_signaled(bo->ttm.base.resv,
> > - DMA_RESV_USAGE_KERNEL))
> > - return ERR_PTR(-ETIME);
> > -
> > - if (wait_vm && !dma_resv_test_signaled(xe_vm_resv(vm),
> > - DMA_RESV_USAGE_BOOKKEEP))
> > - return ERR_PTR(-ETIME);
> > -
> > if (ops->pre_commit) {
> > pt_update->job = NULL;
> > err = ops->pre_commit(pt_update);
> > if (err)
> > return ERR_PTR(err);
> > }
> > - for (i = 0; i < num_updates; i++) {
> > - const struct xe_vm_pgtable_update *update = &updates[i];
> > -
> > - ops->populate(pt_update, m->tile, &update->pt_bo->vmap, NULL,
> > - update->ofs, update->qwords, update);
> > - }
> > -
> > - if (vm) {
> > - trace_xe_vm_cpu_bind(vm);
> > - xe_device_wmb(vm->xe);
> > - }
> > -
> > - fence = dma_fence_get_stub();
> > -
> > - return fence;
> > -}
> > -
> > -static bool no_in_syncs(struct xe_vm *vm, struct xe_exec_queue *q,
> > - struct xe_sync_entry *syncs, u32 num_syncs)
> > -{
> > - struct dma_fence *fence;
> > - int i;
> > - for (i = 0; i < num_syncs; i++) {
> > - fence = syncs[i].fence;
> > -
> > - if (fence && !test_bit(DMA_FENCE_FLAG_SIGNALED_BIT,
> > - &fence->flags))
> > - return false;
> > - }
> > - if (q) {
> > - fence = xe_exec_queue_last_fence_get(q, vm);
> > - if (!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) {
> > - dma_fence_put(fence);
> > - return false;
> > + for (j = 0; j < pt_update_ops->num_ops; ++j) {
> > + const struct xe_vm_pgtable_update_op *pt_op =
> > + &pt_update_ops->ops[j];
> > +
> > + for (i = 0; i < pt_op->num_entries; i++) {
>
> ...inverting i and j here?
>
Let me switch that.
> > + const struct xe_vm_pgtable_update *update =
> > + &pt_op->entries[i];
> > +
> > + if (pt_op->bind)
> > + ops->populate(pt_update, m->tile,
> > + &update->pt_bo->vmap, NULL,
> > + update->ofs, update->qwords,
> > + update);
> > + else
> > + ops->clear(pt_update, m->tile,
> > + &update->pt_bo->vmap, NULL,
> > + update->ofs, update->qwords, update);
> > }
> > - dma_fence_put(fence);
> > }
> > - return true;
> > + trace_xe_vm_cpu_bind(vm);
> > + xe_device_wmb(vm->xe);
> > +
> > + return dma_fence_get_stub();
> > }
> > -/**
> > - * xe_migrate_update_pgtables() - Pipelined page-table update
> > - * @m: The migrate context.
> > - * @vm: The vm we'll be updating.
> > - * @bo: The bo whose dma-resv we will await before updating, or NULL if userptr.
> > - * @q: The exec queue to be used for the update or NULL if the default
> > - * migration engine is to be used.
> > - * @updates: An array of update descriptors.
> > - * @num_updates: Number of descriptors in @updates.
> > - * @syncs: Array of xe_sync_entry to await before updating. Note that waits
> > - * will block the engine timeline.
> > - * @num_syncs: Number of entries in @syncs.
> > - * @pt_update: Pointer to a struct xe_migrate_pt_update, which contains
> > - * pointers to callback functions and, if subclassed, private arguments to
> > - * those.
> > - *
> > - * Perform a pipelined page-table update. The update descriptors are typically
> > - * built under the same lock critical section as a call to this function. If
> > - * using the default engine for the updates, they will be performed in the
> > - * order they grab the job_mutex. If different engines are used, external
> > - * synchronization is needed for overlapping updates to maintain page-table
> > - * consistency. Note that the meaing of "overlapping" is that the updates
> > - * touch the same page-table, which might be a higher-level page-directory.
> > - * If no pipelining is needed, then updates may be performed by the cpu.
> > - *
> > - * Return: A dma_fence that, when signaled, indicates the update completion.
> > - */
> > -struct dma_fence *
> > -xe_migrate_update_pgtables(struct xe_migrate *m,
> > - struct xe_vm *vm,
> > - struct xe_bo *bo,
> > - struct xe_exec_queue *q,
> > - const struct xe_vm_pgtable_update *updates,
> > - u32 num_updates,
> > - struct xe_sync_entry *syncs, u32 num_syncs,
> > - struct xe_migrate_pt_update *pt_update)
> > +static struct dma_fence *
> > +__xe_migrate_update_pgtables(struct xe_migrate *m,
> > + struct xe_migrate_pt_update *pt_update,
> > + struct xe_vm_pgtable_update_ops *pt_update_ops)
> > {
> > const struct xe_migrate_pt_update_ops *ops = pt_update->ops;
> > struct xe_tile *tile = m->tile;
> > @@ -1301,59 +1250,45 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
> > struct xe_sched_job *job;
> > struct dma_fence *fence;
> > struct drm_suballoc *sa_bo = NULL;
> > - struct xe_vma *vma = pt_update->vma;
> > struct xe_bb *bb;
> > - u32 i, batch_size, ppgtt_ofs, update_idx, page_ofs = 0;
> > + u32 i, j, batch_size = 0, ppgtt_ofs, update_idx, page_ofs = 0;
> > + u32 num_updates = 0, current_update = 0;
> > u64 addr;
> > int err = 0;
> > - bool usm = !q && xe->info.has_usm;
> > - bool first_munmap_rebind = vma &&
> > - vma->gpuva.flags & XE_VMA_FIRST_REBIND;
> > - struct xe_exec_queue *q_override = !q ? m->q : q;
> > - u16 pat_index = xe->pat.idx[XE_CACHE_WB];
> > + bool is_migrate = pt_update_ops->q == m->q;
> > + bool usm = is_migrate && xe->info.has_usm;
> > - /* Use the CPU if no in syncs and engine is idle */
> > - if (no_in_syncs(vm, q, syncs, num_syncs) && xe_exec_queue_is_idle(q_override)) {
> > - fence = xe_migrate_update_pgtables_cpu(m, vm, bo, updates,
> > - num_updates,
> > - first_munmap_rebind,
> > - pt_update);
> > - if (!IS_ERR(fence) || fence == ERR_PTR(-EAGAIN))
> > - return fence;
> > + for (i = 0; i < pt_update_ops->num_ops; ++i) {
> > + struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[i];
> > + struct xe_vm_pgtable_update *updates = pt_op->entries;
> > +
> > + num_updates += pt_op->num_entries;
> > + for (j = 0; j < pt_op->num_entries; ++j) {
> > + u32 num_cmds = DIV_ROUND_UP(updates[j].qwords, 0x1ff);
> > +
> > + /* align noop + MI_STORE_DATA_IMM cmd prefix */
> > + batch_size += 4 * num_cmds + updates[j].qwords * 2;
> > + }
> > }
> > /* fixed + PTE entries */
> > if (IS_DGFX(xe))
> > - batch_size = 2;
> > + batch_size += 2;
> > else
> > - batch_size = 6 + num_updates * 2;
> > + batch_size += 6 + num_updates * 2;
> > - for (i = 0; i < num_updates; i++) {
> > - u32 num_cmds = DIV_ROUND_UP(updates[i].qwords, MAX_PTE_PER_SDI);
> > -
> > - /* align noop + MI_STORE_DATA_IMM cmd prefix */
> > - batch_size += 4 * num_cmds + updates[i].qwords * 2;
> > - }
> > -
> > - /*
> > - * XXX: Create temp bo to copy from, if batch_size becomes too big?
> > - *
> > - * Worst case: Sum(2 * (each lower level page size) + (top level page size))
> > - * Should be reasonably bound..
> > - */
> > - xe_tile_assert(tile, batch_size < SZ_128K);
>
> Why do we drop this assert? I guess the batch size is potentially now much
> larger, since we combine more stuff into single job? The pool is fixed size
> and only 512K on igpu. Can userspace not hit the limit of that? It looks
> like this would also trigger a warning in drm_suballoc_new():
>
> if (WARN_ON_ONCE(size > sa_manager->size || !size))
> return ERR_PTR(-EINVAL);
>
> Do we need some more checking somewhere? Also maybe bump the pool size?
>
Yes, this is an issue which VK has hit in debug [1]. I think dropping
the assert is correct as a user shouldn't be able to make an assert pop.
We likely need to catch drm_suballoc_new error and convert it to an
error code which user space interrupts as split the array of binds into
a series bind IOCTLs with a single bind per IOCTL. Thomas and I had
discussed the VM bind error codes a while back and one of returned error
codes has this meaning. The error code lot work still needs to be done
and was going to be staged as a follow up to this series. I will at
least include the correct error code for this in the next rev of the
series.
Longterm this should be a non-issue as we should switch to CPU bind
even if a job is used to complete the bind [2]. CPU binds have the
benefit of lower latency vs scheduling a GPU job, fixing this potential
issuei without involving user space, and GPU bind jobs not getting
scheduled behind other GPU jobs on the copy engine.
[1] https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/799
[2] https://patchwork.freedesktop.org/patch/582003/?series=125608&rev=5
> > -
> > - bb = xe_bb_new(gt, batch_size, !q && xe->info.has_usm);
> > + bb = xe_bb_new(gt, batch_size, usm);
> > if (IS_ERR(bb))
> > return ERR_CAST(bb);
> > /* For sysmem PTE's, need to map them in our hole.. */
> > if (!IS_DGFX(xe)) {
> > ppgtt_ofs = NUM_KERNEL_PDE - 1;
> > - if (q) {
> > - xe_tile_assert(tile, num_updates <= NUM_VMUSA_WRITES_PER_UNIT);
> > + if (!is_migrate) {
> > + u32 num_units = DIV_ROUND_UP(num_updates,
> > + NUM_VMUSA_WRITES_PER_UNIT);
> > - sa_bo = drm_suballoc_new(&m->vm_update_sa, 1,
> > + sa_bo = drm_suballoc_new(&m->vm_update_sa, num_units,
> > GFP_KERNEL, true, 0);
> > if (IS_ERR(sa_bo)) {
> > err = PTR_ERR(sa_bo);
> > @@ -1373,14 +1308,26 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
> > bb->cs[bb->len++] = ppgtt_ofs * XE_PAGE_SIZE + page_ofs;
> > bb->cs[bb->len++] = 0; /* upper_32_bits */
> > - for (i = 0; i < num_updates; i++) {
> > - struct xe_bo *pt_bo = updates[i].pt_bo;
> > + for (i = 0; i < pt_update_ops->num_ops; ++i) {
> > + struct xe_vm_pgtable_update_op *pt_op =
> > + &pt_update_ops->ops[i];
> > + struct xe_vm_pgtable_update *updates = pt_op->entries;
> > - xe_tile_assert(tile, pt_bo->size == SZ_4K);
> > + for (j = 0; j < pt_op->num_entries; ++j, ++current_update) {
> > + struct xe_vm *vm = pt_update->vops->vm;
> > + struct xe_bo *pt_bo = updates[j].pt_bo;
> > - addr = vm->pt_ops->pte_encode_bo(pt_bo, 0, pat_index, 0);
> > - bb->cs[bb->len++] = lower_32_bits(addr);
> > - bb->cs[bb->len++] = upper_32_bits(addr);
> > + xe_tile_assert(tile, pt_bo->size == SZ_4K);
> > +
> > + /* Map a PT at most once */
> > + if (pt_bo->update_index < 0)
> > + pt_bo->update_index = current_update;
> > +
> > + addr = vm->pt_ops->pte_encode_bo(pt_bo, 0,
> > + XE_CACHE_WB, 0);
> > + bb->cs[bb->len++] = lower_32_bits(addr);
> > + bb->cs[bb->len++] = upper_32_bits(addr);
> > + }
> > }
> > bb->cs[bb->len++] = MI_BATCH_BUFFER_END;
> > @@ -1388,19 +1335,36 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
> > addr = xe_migrate_vm_addr(ppgtt_ofs, 0) +
> > (page_ofs / sizeof(u64)) * XE_PAGE_SIZE;
> > - for (i = 0; i < num_updates; i++)
> > - write_pgtable(tile, bb, addr + i * XE_PAGE_SIZE,
> > - &updates[i], pt_update);
> > + for (i = 0; i < pt_update_ops->num_ops; ++i) {
> > + struct xe_vm_pgtable_update_op *pt_op =
> > + &pt_update_ops->ops[i];
> > + struct xe_vm_pgtable_update *updates = pt_op->entries;
> > +
> > + for (j = 0; j < pt_op->num_entries; ++j) {
> > + struct xe_bo *pt_bo = updates[j].pt_bo;
> > +
> > + write_pgtable(tile, bb, addr +
> > + pt_bo->update_index * XE_PAGE_SIZE,
> > + pt_op, &updates[j], pt_update);
> > + }
> > + }
> > } else {
> > /* phys pages, no preamble required */
> > bb->cs[bb->len++] = MI_BATCH_BUFFER_END;
> > update_idx = bb->len;
> > - for (i = 0; i < num_updates; i++)
> > - write_pgtable(tile, bb, 0, &updates[i], pt_update);
> > + for (i = 0; i < pt_update_ops->num_ops; ++i) {
> > + struct xe_vm_pgtable_update_op *pt_op =
> > + &pt_update_ops->ops[i];
> > + struct xe_vm_pgtable_update *updates = pt_op->entries;
> > +
> > + for (j = 0; j < pt_op->num_entries; ++j)
> > + write_pgtable(tile, bb, 0, pt_op, &updates[j],
> > + pt_update);
> > + }
> > }
> > - job = xe_bb_create_migration_job(q ?: m->q, bb,
> > + job = xe_bb_create_migration_job(pt_update_ops->q, bb,
> > xe_migrate_batch_base(m, usm),
> > update_idx);
> > if (IS_ERR(job)) {
> > @@ -1408,46 +1372,20 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
> > goto err_bb;
> > }
> > - /* Wait on BO move */
> > - if (bo) {
> > - err = xe_sched_job_add_deps(job, bo->ttm.base.resv,
> > - DMA_RESV_USAGE_KERNEL);
> > - if (err)
> > - goto err_job;
> > - }
> > -
> > - /*
> > - * Munmap style VM unbind, need to wait for all jobs to be complete /
> > - * trigger preempts before moving forward
> > - */
> > - if (first_munmap_rebind) {
> > - err = xe_sched_job_add_deps(job, xe_vm_resv(vm),
> > - DMA_RESV_USAGE_BOOKKEEP);
> > - if (err)
> > - goto err_job;
> > - }
> > -
> > - err = xe_sched_job_last_fence_add_dep(job, vm);
> > - for (i = 0; !err && i < num_syncs; i++)
> > - err = xe_sync_entry_add_deps(&syncs[i], job);
> > -
> > - if (err)
> > - goto err_job;
> > -
> > if (ops->pre_commit) {
> > pt_update->job = job;
> > err = ops->pre_commit(pt_update);
> > if (err)
> > goto err_job;
> > }
> > - if (!q)
> > + if (is_migrate)
> > mutex_lock(&m->job_mutex);
> > xe_sched_job_arm(job);
> > fence = dma_fence_get(&job->drm.s_fence->finished);
> > xe_sched_job_push(job);
> > - if (!q)
> > + if (is_migrate)
> > mutex_unlock(&m->job_mutex);
> > xe_bb_free(bb, fence);
> > @@ -1464,6 +1402,38 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
> > return ERR_PTR(err);
> > }
> > +/**
> > + * xe_migrate_update_pgtables() - Pipelined page-table update
> > + * @m: The migrate context.
> > + * @pt_update: PT update arguments
> > + *
> > + * Perform a pipelined page-table update. The update descriptors are typically
> > + * built under the same lock critical section as a call to this function. If
> > + * using the default engine for the updates, they will be performed in the
> > + * order they grab the job_mutex. If different engines are used, external
> > + * synchronization is needed for overlapping updates to maintain page-table
> > + * consistency. Note that the meaing of "overlapping" is that the updates
> > + * touch the same page-table, which might be a higher-level page-directory.
> > + * If no pipelining is needed, then updates may be performed by the cpu.
> > + *
> > + * Return: A dma_fence that, when signaled, indicates the update completion.
> > + */
> > +struct dma_fence *
> > +xe_migrate_update_pgtables(struct xe_migrate *m,
> > + struct xe_migrate_pt_update *pt_update)
> > +
> > +{
> > + struct xe_vm_pgtable_update_ops *pt_update_ops =
> > + &pt_update->vops->pt_update_ops[pt_update->tile_id];
> > + struct dma_fence *fence;
> > +
> > + fence = xe_migrate_update_pgtables_cpu(m, pt_update);
> > + if (!IS_ERR(fence))
> > + return fence;
>
> Previously there was an EAGAIN check here to bail. It's fine to drop this?
>
Techincally no as __xe_migrate_update_pgtables will just return -EAGAIN
anyways. -EAGAIN is returned in rare case if a userptr has been
invalidaed on a faulting VM. For optimial coding, we should check this.
I will add this back in.
> > +
> > + return __xe_migrate_update_pgtables(m, pt_update, pt_update_ops);
> > +}
> > +
> > /**
> > * xe_migrate_wait() - Complete all operations using the xe_migrate context
> > * @m: Migrate context to wait for.
> > diff --git a/drivers/gpu/drm/xe/xe_migrate.h b/drivers/gpu/drm/xe/xe_migrate.h
> > index a5bcaafe4a99..453e0ecf5034 100644
> > --- a/drivers/gpu/drm/xe/xe_migrate.h
> > +++ b/drivers/gpu/drm/xe/xe_migrate.h
> > @@ -47,6 +47,24 @@ struct xe_migrate_pt_update_ops {
> > struct xe_tile *tile, struct iosys_map *map,
> > void *pos, u32 ofs, u32 num_qwords,
> > const struct xe_vm_pgtable_update *update);
> > + /**
> > + * @clear: Clear a command buffer or page-table with ptes.
> > + * @pt_update: Embeddable callback argument.
> > + * @tile: The tile for the current operation.
> > + * @map: struct iosys_map into the memory to be populated.
> > + * @pos: If @map is NULL, map into the memory to be populated.
> > + * @ofs: qword offset into @map, unused if @map is NULL.
> > + * @num_qwords: Number of qwords to write.
> > + * @update: Information about the PTEs to be inserted.
> > + *
> > + * This interface is intended to be used as a callback into the
> > + * page-table system to populate command buffers or shared
> > + * page-tables with PTEs.
> > + */
> > + void (*clear)(struct xe_migrate_pt_update *pt_update,
> > + struct xe_tile *tile, struct iosys_map *map,
> > + void *pos, u32 ofs, u32 num_qwords,
> > + const struct xe_vm_pgtable_update *update);
> > /**
> > * @pre_commit: Callback to be called just before arming the
> > @@ -67,14 +85,10 @@ struct xe_migrate_pt_update_ops {
> > struct xe_migrate_pt_update {
> > /** @ops: Pointer to the struct xe_migrate_pt_update_ops callbacks */
> > const struct xe_migrate_pt_update_ops *ops;
> > - /** @vma: The vma we're updating the pagetable for. */
> > - struct xe_vma *vma;
> > + /** @vops: VMA operations */
> > + struct xe_vma_ops *vops;
> > /** @job: The job if a GPU page-table update. NULL otherwise */
> > struct xe_sched_job *job;
> > - /** @start: Start of update for the range fence */
> > - u64 start;
> > - /** @last: Last of update for the range fence */
> > - u64 last;
> > /** @tile_id: Tile ID of the update */
> > u8 tile_id;
> > };
> > @@ -96,12 +110,6 @@ struct xe_vm *xe_migrate_get_vm(struct xe_migrate *m);
> > struct dma_fence *
> > xe_migrate_update_pgtables(struct xe_migrate *m,
> > - struct xe_vm *vm,
> > - struct xe_bo *bo,
> > - struct xe_exec_queue *q,
> > - const struct xe_vm_pgtable_update *updates,
> > - u32 num_updates,
> > - struct xe_sync_entry *syncs, u32 num_syncs,
> > struct xe_migrate_pt_update *pt_update);
> > void xe_migrate_wait(struct xe_migrate *m);
> > diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
> > index ade9e7a3a0ad..d6ce531f0fcd 100644
> > --- a/drivers/gpu/drm/xe/xe_pt.c
> > +++ b/drivers/gpu/drm/xe/xe_pt.c
> > @@ -9,12 +9,15 @@
> > #include "xe_bo.h"
> > #include "xe_device.h"
> > #include "xe_drm_client.h"
> > +#include "xe_exec_queue.h"
> > #include "xe_gt.h"
> > #include "xe_gt_tlb_invalidation.h"
> > #include "xe_migrate.h"
> > #include "xe_pt_types.h"
> > #include "xe_pt_walk.h"
> > #include "xe_res_cursor.h"
> > +#include "xe_sched_job.h"
> > +#include "xe_sync.h"
> > #include "xe_trace.h"
> > #include "xe_ttm_stolen_mgr.h"
> > #include "xe_vm.h"
> > @@ -325,6 +328,7 @@ xe_pt_new_shared(struct xe_walk_update *wupd, struct xe_pt *parent,
> > entry->pt = parent;
> > entry->flags = 0;
> > entry->qwords = 0;
> > + entry->pt_bo->update_index = -1;
> > if (alloc_entries) {
> > entry->pt_entries = kmalloc_array(XE_PDES,
> > @@ -864,9 +868,7 @@ static void xe_pt_commit_locks_assert(struct xe_vma *vma)
> > lockdep_assert_held(&vm->lock);
> > - if (xe_vma_is_userptr(vma))
> > - lockdep_assert_held_read(&vm->userptr.notifier_lock);
> > - else if (!xe_vma_is_null(vma))
> > + if (!xe_vma_is_userptr(vma) && !xe_vma_is_null(vma))
> > dma_resv_assert_held(xe_vma_bo(vma)->ttm.base.resv);
> > xe_vm_assert_held(vm);
> > @@ -888,10 +890,8 @@ static void xe_pt_commit_bind(struct xe_vma *vma,
> > if (!rebind)
> > pt->num_live += entries[i].qwords;
> > - if (!pt->level) {
> > - kfree(entries[i].pt_entries);
> > + if (!pt->level)
> > continue;
> > - }
> > pt_dir = as_xe_pt_dir(pt);
> > for (j = 0; j < entries[i].qwords; j++) {
> > @@ -904,10 +904,18 @@ static void xe_pt_commit_bind(struct xe_vma *vma,
> > pt_dir->children[j_] = &newpte->base;
> > }
> > - kfree(entries[i].pt_entries);
> > }
> > }
> > +static void xe_pt_free_bind(struct xe_vm_pgtable_update *entries,
> > + u32 num_entries)
> > +{
> > + u32 i;
> > +
> > + for (i = 0; i < num_entries; i++)
> > + kfree(entries[i].pt_entries);
> > +}
> > +
> > static int
> > xe_pt_prepare_bind(struct xe_tile *tile, struct xe_vma *vma,
> > struct xe_vm_pgtable_update *entries, u32 *num_entries)
> > @@ -926,12 +934,13 @@ xe_pt_prepare_bind(struct xe_tile *tile, struct xe_vma *vma,
> > static void xe_vm_dbg_print_entries(struct xe_device *xe,
> > const struct xe_vm_pgtable_update *entries,
> > - unsigned int num_entries)
> > + unsigned int num_entries, bool bind)
> > #if (IS_ENABLED(CONFIG_DRM_XE_DEBUG_VM))
> > {
> > unsigned int i;
> > - vm_dbg(&xe->drm, "%u entries to update\n", num_entries);
> > + vm_dbg(&xe->drm, "%s: %u entries to update\n", bind ? "bind" : "unbind",
> > + num_entries);
> > for (i = 0; i < num_entries; i++) {
> > const struct xe_vm_pgtable_update *entry = &entries[i];
> > struct xe_pt *xe_pt = entry->pt;
> > @@ -952,66 +961,116 @@ static void xe_vm_dbg_print_entries(struct xe_device *xe,
> > {}
> > #endif
> > -#ifdef CONFIG_DRM_XE_USERPTR_INVAL_INJECT
> > -
> > -static int xe_pt_userptr_inject_eagain(struct xe_userptr_vma *uvma)
> > +static bool no_in_syncs(struct xe_sync_entry *syncs, u32 num_syncs)
> > {
> > - u32 divisor = uvma->userptr.divisor ? uvma->userptr.divisor : 2;
> > - static u32 count;
> > + int i;
> > - if (count++ % divisor == divisor - 1) {
> > - struct xe_vm *vm = xe_vma_vm(&uvma->vma);
> > + for (i = 0; i < num_syncs; i++) {
> > + struct dma_fence *fence = syncs[i].fence;
> > - uvma->userptr.divisor = divisor << 1;
> > - spin_lock(&vm->userptr.invalidated_lock);
> > - list_move_tail(&uvma->userptr.invalidate_link,
> > - &vm->userptr.invalidated);
> > - spin_unlock(&vm->userptr.invalidated_lock);
> > - return true;
> > + if (fence && !test_bit(DMA_FENCE_FLAG_SIGNALED_BIT,
> > + &fence->flags))
> > + return false;
> > }
> > - return false;
> > + return true;
> > }
> > -#else
> > -
> > -static bool xe_pt_userptr_inject_eagain(struct xe_userptr_vma *uvma)
> > +static int vma_add_deps(struct xe_vma *vma, struct xe_sched_job *job)
> > {
> > - return false;
> > + struct xe_bo *bo = xe_vma_bo(vma);
> > +
> > + xe_bo_assert_held(bo);
> > +
> > + if (bo && !bo->vm) {
> > + if (!job) {
> > + if (!dma_resv_test_signaled(bo->ttm.base.resv,
> > + DMA_RESV_USAGE_KERNEL))
> > + return -ETIME;
> > + } else {
> > + return xe_sched_job_add_deps(job, bo->ttm.base.resv,
> > + DMA_RESV_USAGE_KERNEL);
> > + }
> > + }
> > +
> > + return 0;
> > }
> > -#endif
> > +static int op_add_deps(struct xe_vm *vm, struct xe_vma_op *op,
> > + struct xe_sched_job *job)
> > +{
> > + int err = 0;
> > -/**
> > - * struct xe_pt_migrate_pt_update - Callback argument for pre-commit callbacks
> > - * @base: Base we derive from.
> > - * @bind: Whether this is a bind or an unbind operation. A bind operation
> > - * makes the pre-commit callback error with -EAGAIN if it detects a
> > - * pending invalidation.
> > - * @locked: Whether the pre-commit callback locked the userptr notifier lock
> > - * and it needs unlocking.
> > - */
> > -struct xe_pt_migrate_pt_update {
> > - struct xe_migrate_pt_update base;
> > - bool bind;
> > - bool locked;
> > -};
> > + switch (op->base.op) {
> > + case DRM_GPUVA_OP_MAP:
> > + if (!op->map.immediate && xe_vm_in_fault_mode(vm))
> > + break;
> > +
> > + err = vma_add_deps(op->map.vma, job);
> > + break;
> > + case DRM_GPUVA_OP_REMAP:
> > + if (op->remap.prev)
> > + err = vma_add_deps(op->remap.prev, job);
> > + if (!err && op->remap.next)
> > + err = vma_add_deps(op->remap.next, job);
> > + break;
> > + case DRM_GPUVA_OP_UNMAP:
> > + break;
> > + case DRM_GPUVA_OP_PREFETCH:
> > + err = vma_add_deps(gpuva_to_vma(op->base.prefetch.va), job);
> > + break;
> > + default:
> > + drm_warn(&vm->xe->drm, "NOT POSSIBLE");
> > + }
> > +
> > + return err;
> > +}
> > -/*
> > - * This function adds the needed dependencies to a page-table update job
> > - * to make sure racing jobs for separate bind engines don't race writing
> > - * to the same page-table range, wreaking havoc. Initially use a single
> > - * fence for the entire VM. An optimization would use smaller granularity.
> > - */
> > static int xe_pt_vm_dependencies(struct xe_sched_job *job,
> > - struct xe_range_fence_tree *rftree,
> > - u64 start, u64 last)
> > + struct xe_vm *vm,
> > + struct xe_vma_ops *vops,
> > + struct xe_vm_pgtable_update_ops *pt_update_ops,
> > + struct xe_range_fence_tree *rftree)
> > {
> > struct xe_range_fence *rtfence;
> > struct dma_fence *fence;
> > - int err;
> > + struct xe_vma_op *op;
> > + int err = 0, i;
> > - rtfence = xe_range_fence_tree_first(rftree, start, last);
> > + xe_vm_assert_held(vm);
> > +
> > + if (!job && !no_in_syncs(vops->syncs, vops->num_syncs))
> > + return -ETIME;
> > +
> > + if (!job && !xe_exec_queue_is_idle(pt_update_ops->q))
> > + return -ETIME;
> > +
> > + if (pt_update_ops->wait_vm_bookkeep) {
> > + if (!job) {
> > + if (!dma_resv_test_signaled(xe_vm_resv(vm),
> > + DMA_RESV_USAGE_BOOKKEEP))
> > + return -ETIME;
> > + } else {
> > + err = xe_sched_job_add_deps(job, xe_vm_resv(vm),
> > + DMA_RESV_USAGE_BOOKKEEP);
> > + if (err)
> > + return err;
> > + }
> > + } else if (pt_update_ops->wait_vm_kernel) {
> > + if (!job) {
> > + if (!dma_resv_test_signaled(xe_vm_resv(vm),
> > + DMA_RESV_USAGE_KERNEL))
> > + return -ETIME;
> > + } else {
> > + err = xe_sched_job_add_deps(job, xe_vm_resv(vm),
> > + DMA_RESV_USAGE_KERNEL);
> > + if (err)
> > + return err;
> > + }
> > + }
>
> Could maybe reduce some duplication here? Maybe wait_vm + wait_vm_usage.
>
I should be able to add a helper with either DMA_RESV_USAGE_BOOKKEEP or
DMA_RESV_USAGE_KERNEL passed in. Will add.
Matt
> <snip>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v4 4/7] drm/xe: Convert multiple bind ops into single job
2024-06-20 18:52 ` Matthew Brost
@ 2024-06-20 19:20 ` Matthew Brost
0 siblings, 0 replies; 23+ messages in thread
From: Matthew Brost @ 2024-06-20 19:20 UTC (permalink / raw)
To: Matthew Auld; +Cc: intel-xe
On Thu, Jun 20, 2024 at 06:52:17PM +0000, Matthew Brost wrote:
> On Thu, Jun 20, 2024 at 06:15:54PM +0100, Matthew Auld wrote:
> > Hi,
> >
> > On 18/06/2024 18:15, Matthew Brost wrote:
> > > This aligns with the uAPI of an array of binds or single bind that
> > > results in multiple GPUVA ops to be considered a single atomic
> > > operations.
> > >
> > > The implemenation is roughly:
> > > - xe_vma_ops is a list of xe_vma_op (GPUVA op)
> > > - each xe_vma_op resolves to 0-3 PT ops
> > > - xe_vma_ops creates a single job
> > > - if at any point during binding a failure occurs, xe_vma_ops contains
> > > the information necessary unwind the PT and VMA (GPUVA) state
> > >
> > > v2:
> > > - add missing dma-resv slot reservation (CI, testing)
> > > v4:
> > > - Fix TLB invalidation (Paulo)
> > > - Add missing xe_sched_job_last_fence_add/test_dep check (Inspection)
> > >
> > > Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> > > Signed-off-by: Matthew Brost <matthew.brost@intel.com>
> > > ---
> > > drivers/gpu/drm/xe/xe_bo_types.h | 2 +
> > > drivers/gpu/drm/xe/xe_migrate.c | 296 ++++----
> > > drivers/gpu/drm/xe/xe_migrate.h | 32 +-
> > > drivers/gpu/drm/xe/xe_pt.c | 1112 +++++++++++++++++++-----------
> > > drivers/gpu/drm/xe/xe_pt.h | 14 +-
> > > drivers/gpu/drm/xe/xe_pt_types.h | 36 +
> > > drivers/gpu/drm/xe/xe_vm.c | 519 +++-----------
> > > drivers/gpu/drm/xe/xe_vm.h | 2 +
> > > drivers/gpu/drm/xe/xe_vm_types.h | 45 +-
> > > 9 files changed, 1035 insertions(+), 1023 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
> > > index 86422e113d39..02d68873558a 100644
> > > --- a/drivers/gpu/drm/xe/xe_bo_types.h
> > > +++ b/drivers/gpu/drm/xe/xe_bo_types.h
> > > @@ -58,6 +58,8 @@ struct xe_bo {
> > > #endif
> > > /** @freed: List node for delayed put. */
> > > struct llist_node freed;
> > > + /** @update_index: Update index if PT BO */
> > > + int update_index;
> > > /** @created: Whether the bo has passed initial creation */
> > > bool created;
> > > diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c
> > > index af62783d34ac..a1acd7d01243 100644
> > > --- a/drivers/gpu/drm/xe/xe_migrate.c
> > > +++ b/drivers/gpu/drm/xe/xe_migrate.c
> > > @@ -1125,6 +1125,7 @@ struct dma_fence *xe_migrate_clear(struct xe_migrate *m,
> > > }
> > > static void write_pgtable(struct xe_tile *tile, struct xe_bb *bb, u64 ppgtt_ofs,
> > > + const struct xe_vm_pgtable_update_op *pt_op,
> > > const struct xe_vm_pgtable_update *update,
> > > struct xe_migrate_pt_update *pt_update)
> > > {
> > > @@ -1159,8 +1160,12 @@ static void write_pgtable(struct xe_tile *tile, struct xe_bb *bb, u64 ppgtt_ofs,
> > > bb->cs[bb->len++] = MI_STORE_DATA_IMM | MI_SDI_NUM_QW(chunk);
> > > bb->cs[bb->len++] = lower_32_bits(addr);
> > > bb->cs[bb->len++] = upper_32_bits(addr);
> > > - ops->populate(pt_update, tile, NULL, bb->cs + bb->len, ofs, chunk,
> > > - update);
> > > + if (pt_op->bind)
> > > + ops->populate(pt_update, tile, NULL, bb->cs + bb->len,
> > > + ofs, chunk, update);
> > > + else
> > > + ops->clear(pt_update, tile, NULL, bb->cs + bb->len,
> > > + ofs, chunk, update);
> > > bb->len += chunk * 2;
> > > ofs += chunk;
> > > @@ -1185,114 +1190,58 @@ struct migrate_test_params {
> > > static struct dma_fence *
> > > xe_migrate_update_pgtables_cpu(struct xe_migrate *m,
> > > - struct xe_vm *vm, struct xe_bo *bo,
> > > - const struct xe_vm_pgtable_update *updates,
> > > - u32 num_updates, bool wait_vm,
> > > struct xe_migrate_pt_update *pt_update)
> > > {
> > > XE_TEST_DECLARE(struct migrate_test_params *test =
> > > to_migrate_test_params
> > > (xe_cur_kunit_priv(XE_TEST_LIVE_MIGRATE));)
> > > const struct xe_migrate_pt_update_ops *ops = pt_update->ops;
> > > - struct dma_fence *fence;
> > > + struct xe_vm *vm = pt_update->vops->vm;
> > > + struct xe_vm_pgtable_update_ops *pt_update_ops =
> > > + &pt_update->vops->pt_update_ops[pt_update->tile_id];
> > > int err;
> > > - u32 i;
> > > + u32 j, i;
> >
> > ...
> >
> > > if (XE_TEST_ONLY(test && test->force_gpu))
> > > return ERR_PTR(-ETIME);
> > > - if (bo && !dma_resv_test_signaled(bo->ttm.base.resv,
> > > - DMA_RESV_USAGE_KERNEL))
> > > - return ERR_PTR(-ETIME);
> > > -
> > > - if (wait_vm && !dma_resv_test_signaled(xe_vm_resv(vm),
> > > - DMA_RESV_USAGE_BOOKKEEP))
> > > - return ERR_PTR(-ETIME);
> > > -
> > > if (ops->pre_commit) {
> > > pt_update->job = NULL;
> > > err = ops->pre_commit(pt_update);
> > > if (err)
> > > return ERR_PTR(err);
> > > }
> > > - for (i = 0; i < num_updates; i++) {
> > > - const struct xe_vm_pgtable_update *update = &updates[i];
> > > -
> > > - ops->populate(pt_update, m->tile, &update->pt_bo->vmap, NULL,
> > > - update->ofs, update->qwords, update);
> > > - }
> > > -
> > > - if (vm) {
> > > - trace_xe_vm_cpu_bind(vm);
> > > - xe_device_wmb(vm->xe);
> > > - }
> > > -
> > > - fence = dma_fence_get_stub();
> > > -
> > > - return fence;
> > > -}
> > > -
> > > -static bool no_in_syncs(struct xe_vm *vm, struct xe_exec_queue *q,
> > > - struct xe_sync_entry *syncs, u32 num_syncs)
> > > -{
> > > - struct dma_fence *fence;
> > > - int i;
> > > - for (i = 0; i < num_syncs; i++) {
> > > - fence = syncs[i].fence;
> > > -
> > > - if (fence && !test_bit(DMA_FENCE_FLAG_SIGNALED_BIT,
> > > - &fence->flags))
> > > - return false;
> > > - }
> > > - if (q) {
> > > - fence = xe_exec_queue_last_fence_get(q, vm);
> > > - if (!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags)) {
> > > - dma_fence_put(fence);
> > > - return false;
> > > + for (j = 0; j < pt_update_ops->num_ops; ++j) {
> > > + const struct xe_vm_pgtable_update_op *pt_op =
> > > + &pt_update_ops->ops[j];
> > > +
> > > + for (i = 0; i < pt_op->num_entries; i++) {
> >
> > ...inverting i and j here?
> >
>
> Let me switch that.
>
> > > + const struct xe_vm_pgtable_update *update =
> > > + &pt_op->entries[i];
> > > +
> > > + if (pt_op->bind)
> > > + ops->populate(pt_update, m->tile,
> > > + &update->pt_bo->vmap, NULL,
> > > + update->ofs, update->qwords,
> > > + update);
> > > + else
> > > + ops->clear(pt_update, m->tile,
> > > + &update->pt_bo->vmap, NULL,
> > > + update->ofs, update->qwords, update);
> > > }
> > > - dma_fence_put(fence);
> > > }
> > > - return true;
> > > + trace_xe_vm_cpu_bind(vm);
> > > + xe_device_wmb(vm->xe);
> > > +
> > > + return dma_fence_get_stub();
> > > }
> > > -/**
> > > - * xe_migrate_update_pgtables() - Pipelined page-table update
> > > - * @m: The migrate context.
> > > - * @vm: The vm we'll be updating.
> > > - * @bo: The bo whose dma-resv we will await before updating, or NULL if userptr.
> > > - * @q: The exec queue to be used for the update or NULL if the default
> > > - * migration engine is to be used.
> > > - * @updates: An array of update descriptors.
> > > - * @num_updates: Number of descriptors in @updates.
> > > - * @syncs: Array of xe_sync_entry to await before updating. Note that waits
> > > - * will block the engine timeline.
> > > - * @num_syncs: Number of entries in @syncs.
> > > - * @pt_update: Pointer to a struct xe_migrate_pt_update, which contains
> > > - * pointers to callback functions and, if subclassed, private arguments to
> > > - * those.
> > > - *
> > > - * Perform a pipelined page-table update. The update descriptors are typically
> > > - * built under the same lock critical section as a call to this function. If
> > > - * using the default engine for the updates, they will be performed in the
> > > - * order they grab the job_mutex. If different engines are used, external
> > > - * synchronization is needed for overlapping updates to maintain page-table
> > > - * consistency. Note that the meaing of "overlapping" is that the updates
> > > - * touch the same page-table, which might be a higher-level page-directory.
> > > - * If no pipelining is needed, then updates may be performed by the cpu.
> > > - *
> > > - * Return: A dma_fence that, when signaled, indicates the update completion.
> > > - */
> > > -struct dma_fence *
> > > -xe_migrate_update_pgtables(struct xe_migrate *m,
> > > - struct xe_vm *vm,
> > > - struct xe_bo *bo,
> > > - struct xe_exec_queue *q,
> > > - const struct xe_vm_pgtable_update *updates,
> > > - u32 num_updates,
> > > - struct xe_sync_entry *syncs, u32 num_syncs,
> > > - struct xe_migrate_pt_update *pt_update)
> > > +static struct dma_fence *
> > > +__xe_migrate_update_pgtables(struct xe_migrate *m,
> > > + struct xe_migrate_pt_update *pt_update,
> > > + struct xe_vm_pgtable_update_ops *pt_update_ops)
> > > {
> > > const struct xe_migrate_pt_update_ops *ops = pt_update->ops;
> > > struct xe_tile *tile = m->tile;
> > > @@ -1301,59 +1250,45 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
> > > struct xe_sched_job *job;
> > > struct dma_fence *fence;
> > > struct drm_suballoc *sa_bo = NULL;
> > > - struct xe_vma *vma = pt_update->vma;
> > > struct xe_bb *bb;
> > > - u32 i, batch_size, ppgtt_ofs, update_idx, page_ofs = 0;
> > > + u32 i, j, batch_size = 0, ppgtt_ofs, update_idx, page_ofs = 0;
> > > + u32 num_updates = 0, current_update = 0;
> > > u64 addr;
> > > int err = 0;
> > > - bool usm = !q && xe->info.has_usm;
> > > - bool first_munmap_rebind = vma &&
> > > - vma->gpuva.flags & XE_VMA_FIRST_REBIND;
> > > - struct xe_exec_queue *q_override = !q ? m->q : q;
> > > - u16 pat_index = xe->pat.idx[XE_CACHE_WB];
> > > + bool is_migrate = pt_update_ops->q == m->q;
> > > + bool usm = is_migrate && xe->info.has_usm;
> > > - /* Use the CPU if no in syncs and engine is idle */
> > > - if (no_in_syncs(vm, q, syncs, num_syncs) && xe_exec_queue_is_idle(q_override)) {
> > > - fence = xe_migrate_update_pgtables_cpu(m, vm, bo, updates,
> > > - num_updates,
> > > - first_munmap_rebind,
> > > - pt_update);
> > > - if (!IS_ERR(fence) || fence == ERR_PTR(-EAGAIN))
> > > - return fence;
> > > + for (i = 0; i < pt_update_ops->num_ops; ++i) {
> > > + struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[i];
> > > + struct xe_vm_pgtable_update *updates = pt_op->entries;
> > > +
> > > + num_updates += pt_op->num_entries;
> > > + for (j = 0; j < pt_op->num_entries; ++j) {
> > > + u32 num_cmds = DIV_ROUND_UP(updates[j].qwords, 0x1ff);
> > > +
> > > + /* align noop + MI_STORE_DATA_IMM cmd prefix */
> > > + batch_size += 4 * num_cmds + updates[j].qwords * 2;
> > > + }
> > > }
> > > /* fixed + PTE entries */
> > > if (IS_DGFX(xe))
> > > - batch_size = 2;
> > > + batch_size += 2;
> > > else
> > > - batch_size = 6 + num_updates * 2;
> > > + batch_size += 6 + num_updates * 2;
> > > - for (i = 0; i < num_updates; i++) {
> > > - u32 num_cmds = DIV_ROUND_UP(updates[i].qwords, MAX_PTE_PER_SDI);
> > > -
> > > - /* align noop + MI_STORE_DATA_IMM cmd prefix */
> > > - batch_size += 4 * num_cmds + updates[i].qwords * 2;
> > > - }
> > > -
> > > - /*
> > > - * XXX: Create temp bo to copy from, if batch_size becomes too big?
> > > - *
> > > - * Worst case: Sum(2 * (each lower level page size) + (top level page size))
> > > - * Should be reasonably bound..
> > > - */
> > > - xe_tile_assert(tile, batch_size < SZ_128K);
> >
> > Why do we drop this assert? I guess the batch size is potentially now much
> > larger, since we combine more stuff into single job? The pool is fixed size
> > and only 512K on igpu. Can userspace not hit the limit of that? It looks
> > like this would also trigger a warning in drm_suballoc_new():
> >
> > if (WARN_ON_ONCE(size > sa_manager->size || !size))
> > return ERR_PTR(-EINVAL);
> >
> > Do we need some more checking somewhere? Also maybe bump the pool size?
> >
>
> Yes, this is an issue which VK has hit in debug [1]. I think dropping
> the assert is correct as a user shouldn't be able to make an assert pop.
> We likely need to catch drm_suballoc_new error and convert it to an
> error code which user space interrupts as split the array of binds into
> a series bind IOCTLs with a single bind per IOCTL. Thomas and I had
> discussed the VM bind error codes a while back and one of returned error
> codes has this meaning. The error code lot work still needs to be done
> and was going to be staged as a follow up to this series. I will at
> least include the correct error code for this in the next rev of the
> series.
>
> Longterm this should be a non-issue as we should switch to CPU bind
> even if a job is used to complete the bind [2]. CPU binds have the
> benefit of lower latency vs scheduling a GPU job, fixing this potential
> issuei without involving user space, and GPU bind jobs not getting
> scheduled behind other GPU jobs on the copy engine.
>
> [1] https://gitlab.freedesktop.org/drm/xe/kernel/-/issues/799
> [2] https://patchwork.freedesktop.org/patch/582003/?series=125608&rev=5
>
Additional I'll take an AR to write an IGT which triggers the error code
path of an arry of binds requiring a BB to larger to complete the bind.
This will be included in the post next post.
Matt
> > > -
> > > - bb = xe_bb_new(gt, batch_size, !q && xe->info.has_usm);
> > > + bb = xe_bb_new(gt, batch_size, usm);
> > > if (IS_ERR(bb))
> > > return ERR_CAST(bb);
> > > /* For sysmem PTE's, need to map them in our hole.. */
> > > if (!IS_DGFX(xe)) {
> > > ppgtt_ofs = NUM_KERNEL_PDE - 1;
> > > - if (q) {
> > > - xe_tile_assert(tile, num_updates <= NUM_VMUSA_WRITES_PER_UNIT);
> > > + if (!is_migrate) {
> > > + u32 num_units = DIV_ROUND_UP(num_updates,
> > > + NUM_VMUSA_WRITES_PER_UNIT);
> > > - sa_bo = drm_suballoc_new(&m->vm_update_sa, 1,
> > > + sa_bo = drm_suballoc_new(&m->vm_update_sa, num_units,
> > > GFP_KERNEL, true, 0);
> > > if (IS_ERR(sa_bo)) {
> > > err = PTR_ERR(sa_bo);
> > > @@ -1373,14 +1308,26 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
> > > bb->cs[bb->len++] = ppgtt_ofs * XE_PAGE_SIZE + page_ofs;
> > > bb->cs[bb->len++] = 0; /* upper_32_bits */
> > > - for (i = 0; i < num_updates; i++) {
> > > - struct xe_bo *pt_bo = updates[i].pt_bo;
> > > + for (i = 0; i < pt_update_ops->num_ops; ++i) {
> > > + struct xe_vm_pgtable_update_op *pt_op =
> > > + &pt_update_ops->ops[i];
> > > + struct xe_vm_pgtable_update *updates = pt_op->entries;
> > > - xe_tile_assert(tile, pt_bo->size == SZ_4K);
> > > + for (j = 0; j < pt_op->num_entries; ++j, ++current_update) {
> > > + struct xe_vm *vm = pt_update->vops->vm;
> > > + struct xe_bo *pt_bo = updates[j].pt_bo;
> > > - addr = vm->pt_ops->pte_encode_bo(pt_bo, 0, pat_index, 0);
> > > - bb->cs[bb->len++] = lower_32_bits(addr);
> > > - bb->cs[bb->len++] = upper_32_bits(addr);
> > > + xe_tile_assert(tile, pt_bo->size == SZ_4K);
> > > +
> > > + /* Map a PT at most once */
> > > + if (pt_bo->update_index < 0)
> > > + pt_bo->update_index = current_update;
> > > +
> > > + addr = vm->pt_ops->pte_encode_bo(pt_bo, 0,
> > > + XE_CACHE_WB, 0);
> > > + bb->cs[bb->len++] = lower_32_bits(addr);
> > > + bb->cs[bb->len++] = upper_32_bits(addr);
> > > + }
> > > }
> > > bb->cs[bb->len++] = MI_BATCH_BUFFER_END;
> > > @@ -1388,19 +1335,36 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
> > > addr = xe_migrate_vm_addr(ppgtt_ofs, 0) +
> > > (page_ofs / sizeof(u64)) * XE_PAGE_SIZE;
> > > - for (i = 0; i < num_updates; i++)
> > > - write_pgtable(tile, bb, addr + i * XE_PAGE_SIZE,
> > > - &updates[i], pt_update);
> > > + for (i = 0; i < pt_update_ops->num_ops; ++i) {
> > > + struct xe_vm_pgtable_update_op *pt_op =
> > > + &pt_update_ops->ops[i];
> > > + struct xe_vm_pgtable_update *updates = pt_op->entries;
> > > +
> > > + for (j = 0; j < pt_op->num_entries; ++j) {
> > > + struct xe_bo *pt_bo = updates[j].pt_bo;
> > > +
> > > + write_pgtable(tile, bb, addr +
> > > + pt_bo->update_index * XE_PAGE_SIZE,
> > > + pt_op, &updates[j], pt_update);
> > > + }
> > > + }
> > > } else {
> > > /* phys pages, no preamble required */
> > > bb->cs[bb->len++] = MI_BATCH_BUFFER_END;
> > > update_idx = bb->len;
> > > - for (i = 0; i < num_updates; i++)
> > > - write_pgtable(tile, bb, 0, &updates[i], pt_update);
> > > + for (i = 0; i < pt_update_ops->num_ops; ++i) {
> > > + struct xe_vm_pgtable_update_op *pt_op =
> > > + &pt_update_ops->ops[i];
> > > + struct xe_vm_pgtable_update *updates = pt_op->entries;
> > > +
> > > + for (j = 0; j < pt_op->num_entries; ++j)
> > > + write_pgtable(tile, bb, 0, pt_op, &updates[j],
> > > + pt_update);
> > > + }
> > > }
> > > - job = xe_bb_create_migration_job(q ?: m->q, bb,
> > > + job = xe_bb_create_migration_job(pt_update_ops->q, bb,
> > > xe_migrate_batch_base(m, usm),
> > > update_idx);
> > > if (IS_ERR(job)) {
> > > @@ -1408,46 +1372,20 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
> > > goto err_bb;
> > > }
> > > - /* Wait on BO move */
> > > - if (bo) {
> > > - err = xe_sched_job_add_deps(job, bo->ttm.base.resv,
> > > - DMA_RESV_USAGE_KERNEL);
> > > - if (err)
> > > - goto err_job;
> > > - }
> > > -
> > > - /*
> > > - * Munmap style VM unbind, need to wait for all jobs to be complete /
> > > - * trigger preempts before moving forward
> > > - */
> > > - if (first_munmap_rebind) {
> > > - err = xe_sched_job_add_deps(job, xe_vm_resv(vm),
> > > - DMA_RESV_USAGE_BOOKKEEP);
> > > - if (err)
> > > - goto err_job;
> > > - }
> > > -
> > > - err = xe_sched_job_last_fence_add_dep(job, vm);
> > > - for (i = 0; !err && i < num_syncs; i++)
> > > - err = xe_sync_entry_add_deps(&syncs[i], job);
> > > -
> > > - if (err)
> > > - goto err_job;
> > > -
> > > if (ops->pre_commit) {
> > > pt_update->job = job;
> > > err = ops->pre_commit(pt_update);
> > > if (err)
> > > goto err_job;
> > > }
> > > - if (!q)
> > > + if (is_migrate)
> > > mutex_lock(&m->job_mutex);
> > > xe_sched_job_arm(job);
> > > fence = dma_fence_get(&job->drm.s_fence->finished);
> > > xe_sched_job_push(job);
> > > - if (!q)
> > > + if (is_migrate)
> > > mutex_unlock(&m->job_mutex);
> > > xe_bb_free(bb, fence);
> > > @@ -1464,6 +1402,38 @@ xe_migrate_update_pgtables(struct xe_migrate *m,
> > > return ERR_PTR(err);
> > > }
> > > +/**
> > > + * xe_migrate_update_pgtables() - Pipelined page-table update
> > > + * @m: The migrate context.
> > > + * @pt_update: PT update arguments
> > > + *
> > > + * Perform a pipelined page-table update. The update descriptors are typically
> > > + * built under the same lock critical section as a call to this function. If
> > > + * using the default engine for the updates, they will be performed in the
> > > + * order they grab the job_mutex. If different engines are used, external
> > > + * synchronization is needed for overlapping updates to maintain page-table
> > > + * consistency. Note that the meaing of "overlapping" is that the updates
> > > + * touch the same page-table, which might be a higher-level page-directory.
> > > + * If no pipelining is needed, then updates may be performed by the cpu.
> > > + *
> > > + * Return: A dma_fence that, when signaled, indicates the update completion.
> > > + */
> > > +struct dma_fence *
> > > +xe_migrate_update_pgtables(struct xe_migrate *m,
> > > + struct xe_migrate_pt_update *pt_update)
> > > +
> > > +{
> > > + struct xe_vm_pgtable_update_ops *pt_update_ops =
> > > + &pt_update->vops->pt_update_ops[pt_update->tile_id];
> > > + struct dma_fence *fence;
> > > +
> > > + fence = xe_migrate_update_pgtables_cpu(m, pt_update);
> > > + if (!IS_ERR(fence))
> > > + return fence;
> >
> > Previously there was an EAGAIN check here to bail. It's fine to drop this?
> >
>
> Techincally no as __xe_migrate_update_pgtables will just return -EAGAIN
> anyways. -EAGAIN is returned in rare case if a userptr has been
> invalidaed on a faulting VM. For optimial coding, we should check this.
> I will add this back in.
>
> > > +
> > > + return __xe_migrate_update_pgtables(m, pt_update, pt_update_ops);
> > > +}
> > > +
> > > /**
> > > * xe_migrate_wait() - Complete all operations using the xe_migrate context
> > > * @m: Migrate context to wait for.
> > > diff --git a/drivers/gpu/drm/xe/xe_migrate.h b/drivers/gpu/drm/xe/xe_migrate.h
> > > index a5bcaafe4a99..453e0ecf5034 100644
> > > --- a/drivers/gpu/drm/xe/xe_migrate.h
> > > +++ b/drivers/gpu/drm/xe/xe_migrate.h
> > > @@ -47,6 +47,24 @@ struct xe_migrate_pt_update_ops {
> > > struct xe_tile *tile, struct iosys_map *map,
> > > void *pos, u32 ofs, u32 num_qwords,
> > > const struct xe_vm_pgtable_update *update);
> > > + /**
> > > + * @clear: Clear a command buffer or page-table with ptes.
> > > + * @pt_update: Embeddable callback argument.
> > > + * @tile: The tile for the current operation.
> > > + * @map: struct iosys_map into the memory to be populated.
> > > + * @pos: If @map is NULL, map into the memory to be populated.
> > > + * @ofs: qword offset into @map, unused if @map is NULL.
> > > + * @num_qwords: Number of qwords to write.
> > > + * @update: Information about the PTEs to be inserted.
> > > + *
> > > + * This interface is intended to be used as a callback into the
> > > + * page-table system to populate command buffers or shared
> > > + * page-tables with PTEs.
> > > + */
> > > + void (*clear)(struct xe_migrate_pt_update *pt_update,
> > > + struct xe_tile *tile, struct iosys_map *map,
> > > + void *pos, u32 ofs, u32 num_qwords,
> > > + const struct xe_vm_pgtable_update *update);
> > > /**
> > > * @pre_commit: Callback to be called just before arming the
> > > @@ -67,14 +85,10 @@ struct xe_migrate_pt_update_ops {
> > > struct xe_migrate_pt_update {
> > > /** @ops: Pointer to the struct xe_migrate_pt_update_ops callbacks */
> > > const struct xe_migrate_pt_update_ops *ops;
> > > - /** @vma: The vma we're updating the pagetable for. */
> > > - struct xe_vma *vma;
> > > + /** @vops: VMA operations */
> > > + struct xe_vma_ops *vops;
> > > /** @job: The job if a GPU page-table update. NULL otherwise */
> > > struct xe_sched_job *job;
> > > - /** @start: Start of update for the range fence */
> > > - u64 start;
> > > - /** @last: Last of update for the range fence */
> > > - u64 last;
> > > /** @tile_id: Tile ID of the update */
> > > u8 tile_id;
> > > };
> > > @@ -96,12 +110,6 @@ struct xe_vm *xe_migrate_get_vm(struct xe_migrate *m);
> > > struct dma_fence *
> > > xe_migrate_update_pgtables(struct xe_migrate *m,
> > > - struct xe_vm *vm,
> > > - struct xe_bo *bo,
> > > - struct xe_exec_queue *q,
> > > - const struct xe_vm_pgtable_update *updates,
> > > - u32 num_updates,
> > > - struct xe_sync_entry *syncs, u32 num_syncs,
> > > struct xe_migrate_pt_update *pt_update);
> > > void xe_migrate_wait(struct xe_migrate *m);
> > > diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
> > > index ade9e7a3a0ad..d6ce531f0fcd 100644
> > > --- a/drivers/gpu/drm/xe/xe_pt.c
> > > +++ b/drivers/gpu/drm/xe/xe_pt.c
> > > @@ -9,12 +9,15 @@
> > > #include "xe_bo.h"
> > > #include "xe_device.h"
> > > #include "xe_drm_client.h"
> > > +#include "xe_exec_queue.h"
> > > #include "xe_gt.h"
> > > #include "xe_gt_tlb_invalidation.h"
> > > #include "xe_migrate.h"
> > > #include "xe_pt_types.h"
> > > #include "xe_pt_walk.h"
> > > #include "xe_res_cursor.h"
> > > +#include "xe_sched_job.h"
> > > +#include "xe_sync.h"
> > > #include "xe_trace.h"
> > > #include "xe_ttm_stolen_mgr.h"
> > > #include "xe_vm.h"
> > > @@ -325,6 +328,7 @@ xe_pt_new_shared(struct xe_walk_update *wupd, struct xe_pt *parent,
> > > entry->pt = parent;
> > > entry->flags = 0;
> > > entry->qwords = 0;
> > > + entry->pt_bo->update_index = -1;
> > > if (alloc_entries) {
> > > entry->pt_entries = kmalloc_array(XE_PDES,
> > > @@ -864,9 +868,7 @@ static void xe_pt_commit_locks_assert(struct xe_vma *vma)
> > > lockdep_assert_held(&vm->lock);
> > > - if (xe_vma_is_userptr(vma))
> > > - lockdep_assert_held_read(&vm->userptr.notifier_lock);
> > > - else if (!xe_vma_is_null(vma))
> > > + if (!xe_vma_is_userptr(vma) && !xe_vma_is_null(vma))
> > > dma_resv_assert_held(xe_vma_bo(vma)->ttm.base.resv);
> > > xe_vm_assert_held(vm);
> > > @@ -888,10 +890,8 @@ static void xe_pt_commit_bind(struct xe_vma *vma,
> > > if (!rebind)
> > > pt->num_live += entries[i].qwords;
> > > - if (!pt->level) {
> > > - kfree(entries[i].pt_entries);
> > > + if (!pt->level)
> > > continue;
> > > - }
> > > pt_dir = as_xe_pt_dir(pt);
> > > for (j = 0; j < entries[i].qwords; j++) {
> > > @@ -904,10 +904,18 @@ static void xe_pt_commit_bind(struct xe_vma *vma,
> > > pt_dir->children[j_] = &newpte->base;
> > > }
> > > - kfree(entries[i].pt_entries);
> > > }
> > > }
> > > +static void xe_pt_free_bind(struct xe_vm_pgtable_update *entries,
> > > + u32 num_entries)
> > > +{
> > > + u32 i;
> > > +
> > > + for (i = 0; i < num_entries; i++)
> > > + kfree(entries[i].pt_entries);
> > > +}
> > > +
> > > static int
> > > xe_pt_prepare_bind(struct xe_tile *tile, struct xe_vma *vma,
> > > struct xe_vm_pgtable_update *entries, u32 *num_entries)
> > > @@ -926,12 +934,13 @@ xe_pt_prepare_bind(struct xe_tile *tile, struct xe_vma *vma,
> > > static void xe_vm_dbg_print_entries(struct xe_device *xe,
> > > const struct xe_vm_pgtable_update *entries,
> > > - unsigned int num_entries)
> > > + unsigned int num_entries, bool bind)
> > > #if (IS_ENABLED(CONFIG_DRM_XE_DEBUG_VM))
> > > {
> > > unsigned int i;
> > > - vm_dbg(&xe->drm, "%u entries to update\n", num_entries);
> > > + vm_dbg(&xe->drm, "%s: %u entries to update\n", bind ? "bind" : "unbind",
> > > + num_entries);
> > > for (i = 0; i < num_entries; i++) {
> > > const struct xe_vm_pgtable_update *entry = &entries[i];
> > > struct xe_pt *xe_pt = entry->pt;
> > > @@ -952,66 +961,116 @@ static void xe_vm_dbg_print_entries(struct xe_device *xe,
> > > {}
> > > #endif
> > > -#ifdef CONFIG_DRM_XE_USERPTR_INVAL_INJECT
> > > -
> > > -static int xe_pt_userptr_inject_eagain(struct xe_userptr_vma *uvma)
> > > +static bool no_in_syncs(struct xe_sync_entry *syncs, u32 num_syncs)
> > > {
> > > - u32 divisor = uvma->userptr.divisor ? uvma->userptr.divisor : 2;
> > > - static u32 count;
> > > + int i;
> > > - if (count++ % divisor == divisor - 1) {
> > > - struct xe_vm *vm = xe_vma_vm(&uvma->vma);
> > > + for (i = 0; i < num_syncs; i++) {
> > > + struct dma_fence *fence = syncs[i].fence;
> > > - uvma->userptr.divisor = divisor << 1;
> > > - spin_lock(&vm->userptr.invalidated_lock);
> > > - list_move_tail(&uvma->userptr.invalidate_link,
> > > - &vm->userptr.invalidated);
> > > - spin_unlock(&vm->userptr.invalidated_lock);
> > > - return true;
> > > + if (fence && !test_bit(DMA_FENCE_FLAG_SIGNALED_BIT,
> > > + &fence->flags))
> > > + return false;
> > > }
> > > - return false;
> > > + return true;
> > > }
> > > -#else
> > > -
> > > -static bool xe_pt_userptr_inject_eagain(struct xe_userptr_vma *uvma)
> > > +static int vma_add_deps(struct xe_vma *vma, struct xe_sched_job *job)
> > > {
> > > - return false;
> > > + struct xe_bo *bo = xe_vma_bo(vma);
> > > +
> > > + xe_bo_assert_held(bo);
> > > +
> > > + if (bo && !bo->vm) {
> > > + if (!job) {
> > > + if (!dma_resv_test_signaled(bo->ttm.base.resv,
> > > + DMA_RESV_USAGE_KERNEL))
> > > + return -ETIME;
> > > + } else {
> > > + return xe_sched_job_add_deps(job, bo->ttm.base.resv,
> > > + DMA_RESV_USAGE_KERNEL);
> > > + }
> > > + }
> > > +
> > > + return 0;
> > > }
> > > -#endif
> > > +static int op_add_deps(struct xe_vm *vm, struct xe_vma_op *op,
> > > + struct xe_sched_job *job)
> > > +{
> > > + int err = 0;
> > > -/**
> > > - * struct xe_pt_migrate_pt_update - Callback argument for pre-commit callbacks
> > > - * @base: Base we derive from.
> > > - * @bind: Whether this is a bind or an unbind operation. A bind operation
> > > - * makes the pre-commit callback error with -EAGAIN if it detects a
> > > - * pending invalidation.
> > > - * @locked: Whether the pre-commit callback locked the userptr notifier lock
> > > - * and it needs unlocking.
> > > - */
> > > -struct xe_pt_migrate_pt_update {
> > > - struct xe_migrate_pt_update base;
> > > - bool bind;
> > > - bool locked;
> > > -};
> > > + switch (op->base.op) {
> > > + case DRM_GPUVA_OP_MAP:
> > > + if (!op->map.immediate && xe_vm_in_fault_mode(vm))
> > > + break;
> > > +
> > > + err = vma_add_deps(op->map.vma, job);
> > > + break;
> > > + case DRM_GPUVA_OP_REMAP:
> > > + if (op->remap.prev)
> > > + err = vma_add_deps(op->remap.prev, job);
> > > + if (!err && op->remap.next)
> > > + err = vma_add_deps(op->remap.next, job);
> > > + break;
> > > + case DRM_GPUVA_OP_UNMAP:
> > > + break;
> > > + case DRM_GPUVA_OP_PREFETCH:
> > > + err = vma_add_deps(gpuva_to_vma(op->base.prefetch.va), job);
> > > + break;
> > > + default:
> > > + drm_warn(&vm->xe->drm, "NOT POSSIBLE");
> > > + }
> > > +
> > > + return err;
> > > +}
> > > -/*
> > > - * This function adds the needed dependencies to a page-table update job
> > > - * to make sure racing jobs for separate bind engines don't race writing
> > > - * to the same page-table range, wreaking havoc. Initially use a single
> > > - * fence for the entire VM. An optimization would use smaller granularity.
> > > - */
> > > static int xe_pt_vm_dependencies(struct xe_sched_job *job,
> > > - struct xe_range_fence_tree *rftree,
> > > - u64 start, u64 last)
> > > + struct xe_vm *vm,
> > > + struct xe_vma_ops *vops,
> > > + struct xe_vm_pgtable_update_ops *pt_update_ops,
> > > + struct xe_range_fence_tree *rftree)
> > > {
> > > struct xe_range_fence *rtfence;
> > > struct dma_fence *fence;
> > > - int err;
> > > + struct xe_vma_op *op;
> > > + int err = 0, i;
> > > - rtfence = xe_range_fence_tree_first(rftree, start, last);
> > > + xe_vm_assert_held(vm);
> > > +
> > > + if (!job && !no_in_syncs(vops->syncs, vops->num_syncs))
> > > + return -ETIME;
> > > +
> > > + if (!job && !xe_exec_queue_is_idle(pt_update_ops->q))
> > > + return -ETIME;
> > > +
> > > + if (pt_update_ops->wait_vm_bookkeep) {
> > > + if (!job) {
> > > + if (!dma_resv_test_signaled(xe_vm_resv(vm),
> > > + DMA_RESV_USAGE_BOOKKEEP))
> > > + return -ETIME;
> > > + } else {
> > > + err = xe_sched_job_add_deps(job, xe_vm_resv(vm),
> > > + DMA_RESV_USAGE_BOOKKEEP);
> > > + if (err)
> > > + return err;
> > > + }
> > > + } else if (pt_update_ops->wait_vm_kernel) {
> > > + if (!job) {
> > > + if (!dma_resv_test_signaled(xe_vm_resv(vm),
> > > + DMA_RESV_USAGE_KERNEL))
> > > + return -ETIME;
> > > + } else {
> > > + err = xe_sched_job_add_deps(job, xe_vm_resv(vm),
> > > + DMA_RESV_USAGE_KERNEL);
> > > + if (err)
> > > + return err;
> > > + }
> > > + }
> >
> > Could maybe reduce some duplication here? Maybe wait_vm + wait_vm_usage.
> >
>
> I should be able to add a helper with either DMA_RESV_USAGE_BOOKKEEP or
> DMA_RESV_USAGE_KERNEL passed in. Will add.
>
> Matt
>
> > <snip>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v4 6/7] drm/xe: Update PT layer with better error handling
2024-06-18 17:15 ` [PATCH v4 6/7] drm/xe: Update PT layer with better error handling Matthew Brost
@ 2024-06-21 14:37 ` Matthew Auld
2024-06-21 17:25 ` Matthew Brost
0 siblings, 1 reply; 23+ messages in thread
From: Matthew Auld @ 2024-06-21 14:37 UTC (permalink / raw)
To: Matthew Brost, intel-xe
Hi,
On 18/06/2024 18:15, Matthew Brost wrote:
> Update PT layer so if a memory allocation for a PTE fails the error can
> be propagated to the user without requiring to be killed.
>
> Signed-off-by: Matthew Brost <matthew.brost@intel.com>
> ---
> drivers/gpu/drm/xe/xe_pt.c | 208 ++++++++++++++++++++++++++++---------
> 1 file changed, 160 insertions(+), 48 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
> index d6ce531f0fcd..b46b95531c2a 100644
> --- a/drivers/gpu/drm/xe/xe_pt.c
> +++ b/drivers/gpu/drm/xe/xe_pt.c
> @@ -846,19 +846,27 @@ xe_vm_populate_pgtable(struct xe_migrate_pt_update *pt_update, struct xe_tile *t
> }
> }
>
> -static void xe_pt_abort_bind(struct xe_vma *vma,
> - struct xe_vm_pgtable_update *entries,
> - u32 num_entries)
> +static void xe_pt_cancel_bind(struct xe_vma *vma,
> + struct xe_vm_pgtable_update *entries,
> + u32 num_entries)
> {
> u32 i, j;
>
> for (i = 0; i < num_entries; i++) {
> - if (!entries[i].pt_entries)
> + struct xe_pt *pt = entries[i].pt;
> +
> + if (!pt)
> continue;
>
> - for (j = 0; j < entries[i].qwords; j++)
> - xe_pt_destroy(entries[i].pt_entries[j].pt, xe_vma_vm(vma)->flags, NULL);
> + if (pt->level) {
> + for (j = 0; j < entries[i].qwords; j++)
> + xe_pt_destroy(entries[i].pt_entries[j].pt,
> + xe_vma_vm(vma)->flags, NULL);
> + }
> +
> kfree(entries[i].pt_entries);
> + entries[i].pt_entries = NULL;
> + entries[i].qwords = 0;
> }
> }
>
> @@ -874,10 +882,61 @@ static void xe_pt_commit_locks_assert(struct xe_vma *vma)
> xe_vm_assert_held(vm);
> }
>
> -static void xe_pt_commit_bind(struct xe_vma *vma,
> - struct xe_vm_pgtable_update *entries,
> - u32 num_entries, bool rebind,
> - struct llist_head *deferred)
> +static void xe_pt_commit(struct xe_vma *vma,
> + struct xe_vm_pgtable_update *entries,
> + u32 num_entries, struct llist_head *deferred)
> +{
> + u32 i, j;
> +
> + xe_pt_commit_locks_assert(vma);
> +
> + for (i = 0; i < num_entries; i++) {
> + struct xe_pt *pt = entries[i].pt;
> +
> + if (!pt->level)
> + continue;
> +
> + for (j = 0; j < entries[i].qwords; j++) {
> + struct xe_pt *oldpte = entries[i].pt_entries[j].pt;
> +
> + xe_pt_destroy(oldpte, xe_vma_vm(vma)->flags, deferred);
> + }
> + }
> +}
> +
> +static void xe_pt_abort_bind(struct xe_vma *vma,
> + struct xe_vm_pgtable_update *entries,
> + u32 num_entries, bool rebind)
> +{
> + int i, j;
> +
> + xe_pt_commit_locks_assert(vma);
> +
> + for (i = num_entries - 1; i >= 0; --i) {
> + struct xe_pt *pt = entries[i].pt;
> + struct xe_pt_dir *pt_dir;
> +
> + if (!rebind)
> + pt->num_live -= entries[i].qwords;
> +
> + if (!pt->level)
> + continue;
> +
> + pt_dir = as_xe_pt_dir(pt);
> + for (j = 0; j < entries[i].qwords; j++) {
> + u32 j_ = j + entries[i].ofs;
> + struct xe_pt *newpte = xe_pt_entry(pt_dir, j_);
> + struct xe_pt *oldpte = entries[i].pt_entries[j].pt;
> +
> + pt_dir->children[j_] = oldpte ? &oldpte->base : 0;
> + xe_pt_destroy(newpte, xe_vma_vm(vma)->flags, NULL);
> + }
> + }
> +}
> +
> +static void xe_pt_commit_prepare_bind(struct xe_vma *vma,
> + struct xe_vm_pgtable_update *entries,
> + u32 num_entries, bool rebind)
> {
> u32 i, j;
>
> @@ -897,12 +956,13 @@ static void xe_pt_commit_bind(struct xe_vma *vma,
> for (j = 0; j < entries[i].qwords; j++) {
> u32 j_ = j + entries[i].ofs;
> struct xe_pt *newpte = entries[i].pt_entries[j].pt;
> + struct xe_pt *oldpte = NULL;
>
> if (xe_pt_entry(pt_dir, j_))
> - xe_pt_destroy(xe_pt_entry(pt_dir, j_),
> - xe_vma_vm(vma)->flags, deferred);
> + oldpte = xe_pt_entry(pt_dir, j_);
>
> pt_dir->children[j_] = &newpte->base;
> + entries[i].pt_entries[j].pt = oldpte;
> }
> }
> }
> @@ -926,8 +986,6 @@ xe_pt_prepare_bind(struct xe_tile *tile, struct xe_vma *vma,
> err = xe_pt_stage_bind(tile, vma, entries, num_entries);
> if (!err)
> xe_tile_assert(tile, *num_entries);
> - else /* abort! */
> - xe_pt_abort_bind(vma, entries, *num_entries);
>
> return err;
> }
> @@ -1449,7 +1507,7 @@ xe_pt_stage_unbind_post_descend(struct xe_ptw *parent, pgoff_t offset,
> &end_offset))
> return 0;
>
> - (void)xe_pt_new_shared(&xe_walk->wupd, xe_child, offset, false);
> + (void)xe_pt_new_shared(&xe_walk->wupd, xe_child, offset, true);
> xe_walk->wupd.updates[level].update->qwords = end_offset - offset;
>
> return 0;
> @@ -1517,32 +1575,57 @@ xe_migrate_clear_pgtable_callback(struct xe_migrate_pt_update *pt_update,
> memset64(ptr, empty, num_qwords);
> }
>
> +static void xe_pt_abort_unbind(struct xe_vma *vma,
> + struct xe_vm_pgtable_update *entries,
> + u32 num_entries)
> +{
> + int j, i;
> +
> + xe_pt_commit_locks_assert(vma);
> +
> + for (j = num_entries - 1; j >= 0; --j) {
> + struct xe_vm_pgtable_update *entry = &entries[j];
> + struct xe_pt *pt = entry->pt;
> + struct xe_pt_dir *pt_dir = as_xe_pt_dir(pt);
> +
> + pt->num_live += entry->qwords;
> +
> + if (!pt->level)
> + continue;
> +
> + for (i = entry->ofs; i < entry->ofs + entry->qwords; i++)
> + pt_dir->children[i] =
> + entries[j].pt_entries[i - entry->ofs].pt ?
> + &entries[j].pt_entries[i - entry->ofs].pt->base : 0;
> + }
> +}
> +
> static void
> -xe_pt_commit_unbind(struct xe_vma *vma,
> - struct xe_vm_pgtable_update *entries, u32 num_entries,
> - struct llist_head *deferred)
> +xe_pt_commit_prepare_unbind(struct xe_vma *vma,
> + struct xe_vm_pgtable_update *entries,
> + u32 num_entries)
> {
> - u32 j;
> + int j, i;
>
> xe_pt_commit_locks_assert(vma);
>
> for (j = 0; j < num_entries; ++j) {
> struct xe_vm_pgtable_update *entry = &entries[j];
> struct xe_pt *pt = entry->pt;
> + struct xe_pt_dir *pt_dir;
>
> pt->num_live -= entry->qwords;
> - if (pt->level) {
> - struct xe_pt_dir *pt_dir = as_xe_pt_dir(pt);
> - u32 i;
> -
> - for (i = entry->ofs; i < entry->ofs + entry->qwords;
> - i++) {
> - if (xe_pt_entry(pt_dir, i))
> - xe_pt_destroy(xe_pt_entry(pt_dir, i),
> - xe_vma_vm(vma)->flags, deferred);
> + if (!pt->level)
> + continue;
>
> - pt_dir->children[i] = NULL;
> - }
> + pt_dir = as_xe_pt_dir(pt);
> + for (i = entry->ofs; i < entry->ofs + entry->qwords; i++) {
> + if (xe_pt_entry(pt_dir, i))
> + entries[j].pt_entries[i - entry->ofs].pt =
> + xe_pt_entry(pt_dir, i);
> + else
> + entries[j].pt_entries[i - entry->ofs].pt = NULL;
> + pt_dir->children[i] = NULL;
> }
> }
> }
> @@ -1588,7 +1671,6 @@ static int bind_op_prepare(struct xe_vm *vm, struct xe_tile *tile,
> {
> u32 current_op = pt_update_ops->current_op;
> struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[current_op];
> - struct llist_head *deferred = &pt_update_ops->deferred;
> int err;
>
> xe_bo_assert_held(xe_vma_bo(vma));
> @@ -1637,11 +1719,12 @@ static int bind_op_prepare(struct xe_vm *vm, struct xe_tile *tile,
> /* We bump also if batch_invalidate_tlb is true */
> vm->tlb_flush_seqno++;
>
> - /* FIXME: Don't commit right away */
> vma->tile_staged |= BIT(tile->id);
> pt_op->vma = vma;
> - xe_pt_commit_bind(vma, pt_op->entries, pt_op->num_entries,
> - pt_op->rebind, deferred);
> + xe_pt_commit_prepare_bind(vma, pt_op->entries,
> + pt_op->num_entries, pt_op->rebind);
> + } else {
> + xe_pt_cancel_bind(vma, pt_op->entries, pt_op->num_entries);
> }
>
> return err;
> @@ -1653,7 +1736,6 @@ static int unbind_op_prepare(struct xe_tile *tile,
> {
> u32 current_op = pt_update_ops->current_op;
> struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[current_op];
> - struct llist_head *deferred = &pt_update_ops->deferred;
> int err;
>
> if (!((vma->tile_present | vma->tile_staged) & BIT(tile->id)))
> @@ -1689,9 +1771,7 @@ static int unbind_op_prepare(struct xe_tile *tile,
> pt_update_ops->needs_userptr_lock |= xe_vma_is_userptr(vma);
> pt_update_ops->needs_invalidation = true;
>
> - /* FIXME: Don't commit right away */
> - xe_pt_commit_unbind(vma, pt_op->entries, pt_op->num_entries,
> - deferred);
> + xe_pt_commit_prepare_unbind(vma, pt_op->entries, pt_op->num_entries);
>
> return 0;
> }
> @@ -1912,7 +1992,7 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
> struct invalidation_fence *ifence = NULL;
> struct xe_range_fence *rfence;
> struct xe_vma_op *op;
> - int err = 0;
> + int err = 0, i;
> struct xe_migrate_pt_update update = {
> .ops = pt_update_ops->needs_userptr_lock ?
> &userptr_migrate_ops :
> @@ -1932,8 +2012,10 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
>
> if (pt_update_ops->needs_invalidation) {
> ifence = kzalloc(sizeof(*ifence), GFP_KERNEL);
> - if (!ifence)
> - return ERR_PTR(-ENOMEM);
> + if (!ifence) {
> + err = -ENOMEM;
> + goto kill_vm_tile1;
> + }
> }
>
> rfence = kzalloc(sizeof(*rfence), GFP_KERNEL);
> @@ -1948,6 +2030,15 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
> goto free_rfence;
> }
>
> + /* Point of no return - VM killed if failure after this */
> + for (i = 0; i < pt_update_ops->current_op; ++i) {
> + struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[i];
> +
> + xe_pt_commit(pt_op->vma, pt_op->entries,
> + pt_op->num_entries, &pt_update_ops->deferred);
> + pt_op->vma = NULL; /* skip in xe_pt_update_ops_abort */
> + }
> +
> err = xe_range_fence_insert(&vm->rftree[tile->id], rfence,
> &xe_range_fence_kfree_ops,
> pt_update_ops->start,
> @@ -1983,10 +2074,15 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
> if (pt_update_ops->needs_userptr_lock)
> up_read(&vm->userptr.notifier_lock);
> dma_fence_put(fence);
> + if (!tile->id)
> + xe_vm_kill(vops->vm, false);
> free_rfence:
> kfree(rfence);
> free_ifence:
> kfree(ifence);
> +kill_vm_tile1:
> + if (err != -EAGAIN && tile->id)
> + xe_vm_kill(vops->vm, false);
It is OK to kill the vm here? The above one looks to only be reachable
when past the point of no return, but not sure if that is always the
case for this one, assuming multi-tile?
>
> return ERR_PTR(err);
> }
> @@ -2007,12 +2103,10 @@ void xe_pt_update_ops_fini(struct xe_tile *tile, struct xe_vma_ops *vops)
> lockdep_assert_held(&vops->vm->lock);
> xe_vm_assert_held(vops->vm);
>
> - /* FIXME: Not 100% correct */
> - for (i = 0; i < pt_update_ops->num_ops; ++i) {
> + for (i = 0; i < pt_update_ops->current_op; ++i) {
> struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[i];
>
> - if (pt_op->bind)
> - xe_pt_free_bind(pt_op->entries, pt_op->num_entries);
> + xe_pt_free_bind(pt_op->entries, pt_op->num_entries);
> }
> xe_bo_put_commit(&vops->pt_update_ops[tile->id].deferred);
> }
> @@ -2026,10 +2120,28 @@ void xe_pt_update_ops_fini(struct xe_tile *tile, struct xe_vma_ops *vops)
> */
> void xe_pt_update_ops_abort(struct xe_tile *tile, struct xe_vma_ops *vops)
> {
> + struct xe_vm_pgtable_update_ops *pt_update_ops =
> + &vops->pt_update_ops[tile->id];
> + int i;
> +
> lockdep_assert_held(&vops->vm->lock);
> xe_vm_assert_held(vops->vm);
>
> - /* FIXME: Just kill VM for now + cleanup PTs */
> + for (i = pt_update_ops->num_ops - 1; i >= 0; --i) {
> + struct xe_vm_pgtable_update_op *pt_op =
> + &pt_update_ops->ops[i];
> +
> + if (!pt_op->vma || i >= pt_update_ops->current_op)
> + continue;
> +
> + if (pt_op->bind)
> + xe_pt_abort_bind(pt_op->vma, pt_op->entries,
> + pt_op->num_entries,
> + pt_op->rebind);
> + else
> + xe_pt_abort_unbind(pt_op->vma, pt_op->entries,
> + pt_op->num_entries);
> + }
> +
> xe_bo_put_commit(&vops->pt_update_ops[tile->id].deferred);
> - xe_vm_kill(vops->vm, false);
> - }
> +}
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v4 4/7] drm/xe: Convert multiple bind ops into single job
2024-06-18 17:15 ` [PATCH v4 4/7] drm/xe: Convert multiple bind ops into single job Matthew Brost
2024-06-20 17:15 ` Matthew Auld
@ 2024-06-21 15:23 ` Matthew Auld
2024-06-21 17:06 ` Matthew Brost
1 sibling, 1 reply; 23+ messages in thread
From: Matthew Auld @ 2024-06-21 15:23 UTC (permalink / raw)
To: Matthew Brost, intel-xe
On 18/06/2024 18:15, Matthew Brost wrote:
> This aligns with the uAPI of an array of binds or single bind that
> results in multiple GPUVA ops to be considered a single atomic
> operations.
>
> The implemenation is roughly:
> - xe_vma_ops is a list of xe_vma_op (GPUVA op)
> - each xe_vma_op resolves to 0-3 PT ops
> - xe_vma_ops creates a single job
> - if at any point during binding a failure occurs, xe_vma_ops contains
> the information necessary unwind the PT and VMA (GPUVA) state
>
> v2:
> - add missing dma-resv slot reservation (CI, testing)
> v4:
> - Fix TLB invalidation (Paulo)
> - Add missing xe_sched_job_last_fence_add/test_dep check (Inspection)
>
> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> Signed-off-by: Matthew Brost <matthew.brost@intel.com>
> ---
<snip>
> +
> +static int bind_op_prepare(struct xe_vm *vm, struct xe_tile *tile,
> + struct xe_vm_pgtable_update_ops *pt_update_ops,
> + struct xe_vma *vma)
> +{
> + u32 current_op = pt_update_ops->current_op;
> + struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[current_op];
> + struct llist_head *deferred = &pt_update_ops->deferred;
> + int err;
>
> xe_bo_assert_held(xe_vma_bo(vma));
> - xe_vm_assert_held(vm);
>
> vm_dbg(&xe_vma_vm(vma)->xe->drm,
> - "Preparing unbind, with range [%llx...%llx) engine %p.\n",
> - xe_vma_start(vma), xe_vma_end(vma), q);
> -
> - num_entries = xe_pt_stage_unbind(tile, vma, entries);
> - xe_tile_assert(tile, num_entries <= ARRAY_SIZE(entries));
> + "Preparing bind, with range [%llx...%llx)\n",
> + xe_vma_start(vma), xe_vma_end(vma) - 1);
>
> - xe_vm_dbg_print_entries(tile_to_xe(tile), entries, num_entries);
> - xe_pt_calc_rfence_interval(vma, &unbind_pt_update, entries,
> - num_entries);
> + pt_op->vma = NULL;
> + pt_op->bind = true;
> + pt_op->rebind = BIT(tile->id) & vma->tile_present;
>
> - err = dma_resv_reserve_fences(xe_vm_resv(vm), 1);
> - if (!err && !xe_vma_has_no_bo(vma) && !xe_vma_bo(vma)->vm)
> - err = dma_resv_reserve_fences(xe_vma_bo(vma)->ttm.base.resv, 1);
> + err = vma_reserve_fences(tile_to_xe(tile), vma);
> if (err)
> - return ERR_PTR(err);
> + return err;
>
> - ifence = kzalloc(sizeof(*ifence), GFP_KERNEL);
> - if (!ifence)
> - return ERR_PTR(-ENOMEM);
> + err = xe_pt_prepare_bind(tile, vma, pt_op->entries,
> + &pt_op->num_entries);
> + if (!err) {
> + xe_tile_assert(tile, pt_op->num_entries <=
> + ARRAY_SIZE(pt_op->entries));
> + xe_vm_dbg_print_entries(tile_to_xe(tile), pt_op->entries,
> + pt_op->num_entries, true);
>
> - rfence = kzalloc(sizeof(*rfence), GFP_KERNEL);
> - if (!rfence) {
> - kfree(ifence);
> - return ERR_PTR(-ENOMEM);
> + xe_pt_update_ops_rfence_interval(pt_update_ops, vma);
> + ++pt_update_ops->current_op;
> + pt_update_ops->needs_userptr_lock |= xe_vma_is_userptr(vma);
> +
> +
> + /*
> + * If rebind, we have to invalidate TLB on !LR vms to invalidate
> + * cached PTEs point to freed memory. on LR vms this is done
s/on/On/
> + * automatically when the context is re-enabled by the rebind worker,
> + * or in fault mode it was invalidated on PTE zapping.
> + *
> + * If !rebind, and scratch enabled VMs, there is a chance the scratch
> + * PTE is already cached in the TLB so it needs to be invalidated.
> + * on !LR VMs this is done in the ring ops preceding a batch, but on
ditto
> + * non-faulting LR, in particular on user-space batch buffer chaining,
> + * it needs to be done here.
> + */
> + if ((!pt_op->rebind && xe_vm_has_scratch(vm) &&
> + xe_vm_in_preempt_fence_mode(vm)))
> + pt_update_ops->needs_invalidation = true;
> + else if (pt_op->rebind && !xe_vm_in_lr_mode(vm))
> + /* We bump also if batch_invalidate_tlb is true */
> + vm->tlb_flush_seqno++;
> +
> + /* FIXME: Don't commit right away */
> + vma->tile_staged |= BIT(tile->id);
> + pt_op->vma = vma;
> + xe_pt_commit_bind(vma, pt_op->entries, pt_op->num_entries,
> + pt_op->rebind, deferred);
> }
>
> + return err;
> +}
> +
> +static int unbind_op_prepare(struct xe_tile *tile,
> + struct xe_vm_pgtable_update_ops *pt_update_ops,
> + struct xe_vma *vma)
> +{
> + u32 current_op = pt_update_ops->current_op;
> + struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[current_op];
> + struct llist_head *deferred = &pt_update_ops->deferred;
> + int err;
> +
> + if (!((vma->tile_present | vma->tile_staged) & BIT(tile->id)))
> + return 0;
> +
> + xe_bo_assert_held(xe_vma_bo(vma));
> +
> + vm_dbg(&xe_vma_vm(vma)->xe->drm,
> + "Preparing unbind, with range [%llx...%llx)\n",
> + xe_vma_start(vma), xe_vma_end(vma) - 1);
> +
> /*
> - * Even if we were already evicted and unbind to destroy, we need to
> - * clear again here. The eviction may have updated pagetables at a
> - * lower level, because it needs to be more conservative.
> + * Wait for invalidation to complete. Can corrupt internal page table
> + * state if an invalidation is running while preparing an unbind.
> */
> - fence = xe_migrate_update_pgtables(tile->migrate,
> - vm, NULL, q ? q :
> - vm->q[tile->id],
> - entries, num_entries,
> - syncs, num_syncs,
> - &unbind_pt_update.base);
> - if (!IS_ERR(fence)) {
> - int err;
> -
> - err = xe_range_fence_insert(&vm->rftree[tile->id], rfence,
> - &xe_range_fence_kfree_ops,
> - unbind_pt_update.base.start,
> - unbind_pt_update.base.last, fence);
> - if (err)
> - dma_fence_wait(fence, false);
> + if (xe_vma_is_userptr(vma) && xe_vm_in_fault_mode(xe_vma_vm(vma)))
> + mmu_interval_read_begin(&to_userptr_vma(vma)->userptr.notifier);
>
> - /* TLB invalidation must be done before signaling unbind */
> - err = invalidation_fence_init(tile->primary_gt, ifence, fence,
> - xe_vma_start(vma),
> - xe_vma_end(vma),
> - xe_vma_vm(vma)->usm.asid);
> - if (err) {
> - dma_fence_put(fence);
> - kfree(ifence);
> - return ERR_PTR(err);
> + pt_op->vma = vma;
> + pt_op->bind = false;
> + pt_op->rebind = false;
> +
> + err = vma_reserve_fences(tile_to_xe(tile), vma);
> + if (err)
> + return err;
> +
> + pt_op->num_entries = xe_pt_stage_unbind(tile, vma, pt_op->entries);
> +
> + xe_vm_dbg_print_entries(tile_to_xe(tile), pt_op->entries,
> + pt_op->num_entries, false);
> + xe_pt_update_ops_rfence_interval(pt_update_ops, vma);
> + ++pt_update_ops->current_op;
> + pt_update_ops->needs_userptr_lock |= xe_vma_is_userptr(vma);
> + pt_update_ops->needs_invalidation = true;
> +
> + /* FIXME: Don't commit right away */
> + xe_pt_commit_unbind(vma, pt_op->entries, pt_op->num_entries,
> + deferred);
> +
> + return 0;
> +}
> +
> +static int op_prepare(struct xe_vm *vm,
> + struct xe_tile *tile,
> + struct xe_vm_pgtable_update_ops *pt_update_ops,
> + struct xe_vma_op *op)
> +{
> + int err = 0;
> +
> + xe_vm_assert_held(vm);
> +
> + switch (op->base.op) {
> + case DRM_GPUVA_OP_MAP:
> + if (!op->map.immediate && xe_vm_in_fault_mode(vm))
> + break;
> +
> + err = bind_op_prepare(vm, tile, pt_update_ops, op->map.vma);
> + pt_update_ops->wait_vm_kernel = true;
> + break;
> + case DRM_GPUVA_OP_REMAP:
> + err = unbind_op_prepare(tile, pt_update_ops,
> + gpuva_to_vma(op->base.remap.unmap->va));
> +
> + if (!err && op->remap.prev) {
> + err = bind_op_prepare(vm, tile, pt_update_ops,
> + op->remap.prev);
> + pt_update_ops->wait_vm_bookkeep = true;
> }
> - fence = &ifence->base.base;
> + if (!err && op->remap.next) {
> + err = bind_op_prepare(vm, tile, pt_update_ops,
> + op->remap.next);
> + pt_update_ops->wait_vm_bookkeep = true;
> + }
> + break;
> + case DRM_GPUVA_OP_UNMAP:
> + err = unbind_op_prepare(tile, pt_update_ops,
> + gpuva_to_vma(op->base.unmap.va));
> + break;
> + case DRM_GPUVA_OP_PREFETCH:
> + err = bind_op_prepare(vm, tile, pt_update_ops,
> + gpuva_to_vma(op->base.prefetch.va));
> + pt_update_ops->wait_vm_kernel = true;
> + break;
> + default:
> + drm_warn(&vm->xe->drm, "NOT POSSIBLE");
> + }
>
> - /* add shared fence now for pagetable delayed destroy */
> - dma_resv_add_fence(xe_vm_resv(vm), fence,
> - DMA_RESV_USAGE_BOOKKEEP);
> + return err;
> +}
>
> - /* This fence will be installed by caller when doing eviction */
> - if (!xe_vma_has_no_bo(vma) && !xe_vma_bo(vma)->vm)
> - dma_resv_add_fence(xe_vma_bo(vma)->ttm.base.resv, fence,
> - DMA_RESV_USAGE_BOOKKEEP);
> - xe_pt_commit_unbind(vma, entries, num_entries,
> - unbind_pt_update.locked ? &deferred : NULL);
> - vma->tile_present &= ~BIT(tile->id);
> - } else {
> - kfree(rfence);
> - kfree(ifence);
> +static void
> +xe_pt_update_ops_init(struct xe_vm_pgtable_update_ops *pt_update_ops)
> +{
> + init_llist_head(&pt_update_ops->deferred);
> + pt_update_ops->start = ~0x0ull;
> + pt_update_ops->last = 0x0ull;
> +}
> +
> +/**
> + * xe_pt_update_ops_prepare() - Prepare PT update operations
> + * @tile: Tile of PT update operations
> + * @vops: VMA operationa
> + *
> + * Prepare PT update operations which includes updating internal PT state,
> + * allocate memory for page tables, populate page table being pruned in, and
> + * create PT update operations for leaf insertion / removal.
> + *
> + * Return: 0 on success, negative error code on error.
> + */
> +int xe_pt_update_ops_prepare(struct xe_tile *tile, struct xe_vma_ops *vops)
> +{
> + struct xe_vm_pgtable_update_ops *pt_update_ops =
> + &vops->pt_update_ops[tile->id];
> + struct xe_vma_op *op;
> + int err;
> +
> + lockdep_assert_held(&vops->vm->lock);
> + xe_vm_assert_held(vops->vm);
> +
> + xe_pt_update_ops_init(pt_update_ops);
> +
> + err = dma_resv_reserve_fences(xe_vm_resv(vops->vm),
> + tile_to_xe(tile)->info.tile_count);
> + if (err)
> + return err;
> +
> + list_for_each_entry(op, &vops->list, link) {
> + err = op_prepare(vops->vm, tile, pt_update_ops, op);
> +
> + if (err)
> + return err;
> }
>
> - if (!vma->tile_present)
> - list_del_init(&vma->combined_links.rebind);
> + xe_tile_assert(tile, pt_update_ops->current_op <=
> + pt_update_ops->num_ops);
> +
> + return 0;
> +}
> +
> +static void bind_op_commit(struct xe_vm *vm, struct xe_tile *tile,
> + struct xe_vm_pgtable_update_ops *pt_update_ops,
> + struct xe_vma *vma, struct dma_fence *fence)
> +{
> + if (!xe_vma_has_no_bo(vma) && !xe_vma_bo(vma)->vm)
> + dma_resv_add_fence(xe_vma_bo(vma)->ttm.base.resv, fence,
> + pt_update_ops->wait_vm_bookkeep ?
> + DMA_RESV_USAGE_KERNEL :
> + DMA_RESV_USAGE_BOOKKEEP);
> + vma->tile_present |= BIT(tile->id);
> + vma->tile_staged &= ~BIT(tile->id);
> + if (xe_vma_is_userptr(vma)) {
> + lockdep_assert_held_read(&vm->userptr.notifier_lock);
> + to_userptr_vma(vma)->userptr.initial_bind = true;
> + }
>
> - if (unbind_pt_update.locked) {
> - xe_tile_assert(tile, xe_vma_is_userptr(vma));
> + /*
> + * Kick rebind worker if this bind triggers preempt fences and not in
> + * the rebind worker
> + */
> + if (pt_update_ops->wait_vm_bookkeep &&
> + xe_vm_in_preempt_fence_mode(vm) &&
> + !current->mm)
> + xe_vm_queue_rebind_worker(vm);
> +}
> +
> +static void unbind_op_commit(struct xe_vm *vm, struct xe_tile *tile,
> + struct xe_vm_pgtable_update_ops *pt_update_ops,
> + struct xe_vma *vma, struct dma_fence *fence)
> +{
> + if (!xe_vma_has_no_bo(vma) && !xe_vma_bo(vma)->vm)
> + dma_resv_add_fence(xe_vma_bo(vma)->ttm.base.resv, fence,
> + pt_update_ops->wait_vm_bookkeep ?
> + DMA_RESV_USAGE_KERNEL :
> + DMA_RESV_USAGE_BOOKKEEP);
> + vma->tile_present &= ~BIT(tile->id);
> + if (!vma->tile_present) {
> + list_del_init(&vma->combined_links.rebind);
> + if (xe_vma_is_userptr(vma)) {
> + lockdep_assert_held_read(&vm->userptr.notifier_lock);
>
> - if (!vma->tile_present) {
> spin_lock(&vm->userptr.invalidated_lock);
> list_del_init(&to_userptr_vma(vma)->userptr.invalidate_link);
> spin_unlock(&vm->userptr.invalidated_lock);
> }
> - up_read(&vm->userptr.notifier_lock);
> - xe_bo_put_commit(&deferred);
> }
> +}
> +
> +static void op_commit(struct xe_vm *vm,
> + struct xe_tile *tile,
> + struct xe_vm_pgtable_update_ops *pt_update_ops,
> + struct xe_vma_op *op, struct dma_fence *fence)
> +{
> + xe_vm_assert_held(vm);
> +
> + switch (op->base.op) {
> + case DRM_GPUVA_OP_MAP:
> + if (!op->map.immediate && xe_vm_in_fault_mode(vm))
> + break;
> +
> + bind_op_commit(vm, tile, pt_update_ops, op->map.vma, fence);
> + break;
> + case DRM_GPUVA_OP_REMAP:
> + unbind_op_commit(vm, tile, pt_update_ops,
> + gpuva_to_vma(op->base.remap.unmap->va), fence);
> +
> + if (op->remap.prev)
> + bind_op_commit(vm, tile, pt_update_ops, op->remap.prev,
> + fence);
> + if (op->remap.next)
> + bind_op_commit(vm, tile, pt_update_ops, op->remap.next,
> + fence);
> + break;
> + case DRM_GPUVA_OP_UNMAP:
> + unbind_op_commit(vm, tile, pt_update_ops,
> + gpuva_to_vma(op->base.unmap.va), fence);
> + break;
> + case DRM_GPUVA_OP_PREFETCH:
> + bind_op_commit(vm, tile, pt_update_ops,
> + gpuva_to_vma(op->base.prefetch.va), fence);
> + break;
> + default:
> + drm_warn(&vm->xe->drm, "NOT POSSIBLE");
> + }
> +}
> +
> +static const struct xe_migrate_pt_update_ops migrate_ops = {
> + .populate = xe_vm_populate_pgtable,
> + .clear = xe_migrate_clear_pgtable_callback,
> + .pre_commit = xe_pt_pre_commit,
> +};
> +
> +static const struct xe_migrate_pt_update_ops userptr_migrate_ops = {
> + .populate = xe_vm_populate_pgtable,
> + .clear = xe_migrate_clear_pgtable_callback,
> + .pre_commit = xe_pt_userptr_pre_commit,
> +};
> +
> +/**
> + * xe_pt_update_ops_run() - Run PT update operations
> + * @tile: Tile of PT update operations
> + * @vops: VMA operationa
> + *
> + * Run PT update operations which includes committing internal PT state changes,
> + * creating job for PT update operations for leaf insertion / removal, and
> + * installing job fence in various places.
> + *
> + * Return: fence on success, negative ERR_PTR on error.
> + */
> +struct dma_fence *
> +xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
> +{
> + struct xe_vm *vm = vops->vm;
> + struct xe_vm_pgtable_update_ops *pt_update_ops =
> + &vops->pt_update_ops[tile->id];
> + struct dma_fence *fence;
> + struct invalidation_fence *ifence = NULL;
> + struct xe_range_fence *rfence;
> + struct xe_vma_op *op;
> + int err = 0;
> + struct xe_migrate_pt_update update = {
> + .ops = pt_update_ops->needs_userptr_lock ?
> + &userptr_migrate_ops :
> + &migrate_ops,
> + .vops = vops,
> + .tile_id = tile->id
Nit: I think needs a comma here.
> + };
> +
> + lockdep_assert_held(&vm->lock);
> + xe_vm_assert_held(vm);
> +
> + if (!pt_update_ops->current_op) {
> + xe_tile_assert(tile, xe_vm_in_fault_mode(vm));
> +
> + return dma_fence_get_stub();
> + }
> +
> + if (pt_update_ops->needs_invalidation) {
> + ifence = kzalloc(sizeof(*ifence), GFP_KERNEL);
> + if (!ifence)
> + return ERR_PTR(-ENOMEM);
> + }
> +
> + rfence = kzalloc(sizeof(*rfence), GFP_KERNEL);
> + if (!rfence) {
> + err = -ENOMEM;
> + goto free_ifence;
> + }
> +
> + fence = xe_migrate_update_pgtables(tile->migrate, &update);
> + if (IS_ERR(fence)) {
> + err = PTR_ERR(fence);
> + goto free_rfence;
> + }
> +
> + err = xe_range_fence_insert(&vm->rftree[tile->id], rfence,
> + &xe_range_fence_kfree_ops,
> + pt_update_ops->start,
> + pt_update_ops->last, fence);
> + if (err)
> + dma_fence_wait(fence, false);
Could maybe set err back to zero or don't set it? Just so we don't leave
any possible booby traps later?
<snip>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v4 4/7] drm/xe: Convert multiple bind ops into single job
2024-06-21 15:23 ` Matthew Auld
@ 2024-06-21 17:06 ` Matthew Brost
0 siblings, 0 replies; 23+ messages in thread
From: Matthew Brost @ 2024-06-21 17:06 UTC (permalink / raw)
To: Matthew Auld; +Cc: intel-xe
On Fri, Jun 21, 2024 at 04:23:59PM +0100, Matthew Auld wrote:
> On 18/06/2024 18:15, Matthew Brost wrote:
> > This aligns with the uAPI of an array of binds or single bind that
> > results in multiple GPUVA ops to be considered a single atomic
> > operations.
> >
> > The implemenation is roughly:
> > - xe_vma_ops is a list of xe_vma_op (GPUVA op)
> > - each xe_vma_op resolves to 0-3 PT ops
> > - xe_vma_ops creates a single job
> > - if at any point during binding a failure occurs, xe_vma_ops contains
> > the information necessary unwind the PT and VMA (GPUVA) state
> >
> > v2:
> > - add missing dma-resv slot reservation (CI, testing)
> > v4:
> > - Fix TLB invalidation (Paulo)
> > - Add missing xe_sched_job_last_fence_add/test_dep check (Inspection)
> >
> > Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
> > Signed-off-by: Matthew Brost <matthew.brost@intel.com>
> > ---
>
> <snip>
>
> > +
> > +static int bind_op_prepare(struct xe_vm *vm, struct xe_tile *tile,
> > + struct xe_vm_pgtable_update_ops *pt_update_ops,
> > + struct xe_vma *vma)
> > +{
> > + u32 current_op = pt_update_ops->current_op;
> > + struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[current_op];
> > + struct llist_head *deferred = &pt_update_ops->deferred;
> > + int err;
> > xe_bo_assert_held(xe_vma_bo(vma));
> > - xe_vm_assert_held(vm);
> > vm_dbg(&xe_vma_vm(vma)->xe->drm,
> > - "Preparing unbind, with range [%llx...%llx) engine %p.\n",
> > - xe_vma_start(vma), xe_vma_end(vma), q);
> > -
> > - num_entries = xe_pt_stage_unbind(tile, vma, entries);
> > - xe_tile_assert(tile, num_entries <= ARRAY_SIZE(entries));
> > + "Preparing bind, with range [%llx...%llx)\n",
> > + xe_vma_start(vma), xe_vma_end(vma) - 1);
> > - xe_vm_dbg_print_entries(tile_to_xe(tile), entries, num_entries);
> > - xe_pt_calc_rfence_interval(vma, &unbind_pt_update, entries,
> > - num_entries);
> > + pt_op->vma = NULL;
> > + pt_op->bind = true;
> > + pt_op->rebind = BIT(tile->id) & vma->tile_present;
> > - err = dma_resv_reserve_fences(xe_vm_resv(vm), 1);
> > - if (!err && !xe_vma_has_no_bo(vma) && !xe_vma_bo(vma)->vm)
> > - err = dma_resv_reserve_fences(xe_vma_bo(vma)->ttm.base.resv, 1);
> > + err = vma_reserve_fences(tile_to_xe(tile), vma);
> > if (err)
> > - return ERR_PTR(err);
> > + return err;
> > - ifence = kzalloc(sizeof(*ifence), GFP_KERNEL);
> > - if (!ifence)
> > - return ERR_PTR(-ENOMEM);
> > + err = xe_pt_prepare_bind(tile, vma, pt_op->entries,
> > + &pt_op->num_entries);
> > + if (!err) {
> > + xe_tile_assert(tile, pt_op->num_entries <=
> > + ARRAY_SIZE(pt_op->entries));
> > + xe_vm_dbg_print_entries(tile_to_xe(tile), pt_op->entries,
> > + pt_op->num_entries, true);
> > - rfence = kzalloc(sizeof(*rfence), GFP_KERNEL);
> > - if (!rfence) {
> > - kfree(ifence);
> > - return ERR_PTR(-ENOMEM);
> > + xe_pt_update_ops_rfence_interval(pt_update_ops, vma);
> > + ++pt_update_ops->current_op;
> > + pt_update_ops->needs_userptr_lock |= xe_vma_is_userptr(vma);
> > +
> > +
> > + /*
> > + * If rebind, we have to invalidate TLB on !LR vms to invalidate
> > + * cached PTEs point to freed memory. on LR vms this is done
>
> s/on/On/
>
Yep.
> > + * automatically when the context is re-enabled by the rebind worker,
> > + * or in fault mode it was invalidated on PTE zapping.
> > + *
> > + * If !rebind, and scratch enabled VMs, there is a chance the scratch
> > + * PTE is already cached in the TLB so it needs to be invalidated.
> > + * on !LR VMs this is done in the ring ops preceding a batch, but on
>
> ditto
>
Yep.
> > + * non-faulting LR, in particular on user-space batch buffer chaining,
> > + * it needs to be done here.
> > + */
> > + if ((!pt_op->rebind && xe_vm_has_scratch(vm) &&
> > + xe_vm_in_preempt_fence_mode(vm)))
> > + pt_update_ops->needs_invalidation = true;
> > + else if (pt_op->rebind && !xe_vm_in_lr_mode(vm))
> > + /* We bump also if batch_invalidate_tlb is true */
> > + vm->tlb_flush_seqno++;
> > +
> > + /* FIXME: Don't commit right away */
> > + vma->tile_staged |= BIT(tile->id);
> > + pt_op->vma = vma;
> > + xe_pt_commit_bind(vma, pt_op->entries, pt_op->num_entries,
> > + pt_op->rebind, deferred);
> > }
> > + return err;
> > +}
> > +
> > +static int unbind_op_prepare(struct xe_tile *tile,
> > + struct xe_vm_pgtable_update_ops *pt_update_ops,
> > + struct xe_vma *vma)
> > +{
> > + u32 current_op = pt_update_ops->current_op;
> > + struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[current_op];
> > + struct llist_head *deferred = &pt_update_ops->deferred;
> > + int err;
> > +
> > + if (!((vma->tile_present | vma->tile_staged) & BIT(tile->id)))
> > + return 0;
> > +
> > + xe_bo_assert_held(xe_vma_bo(vma));
> > +
> > + vm_dbg(&xe_vma_vm(vma)->xe->drm,
> > + "Preparing unbind, with range [%llx...%llx)\n",
> > + xe_vma_start(vma), xe_vma_end(vma) - 1);
> > +
> > /*
> > - * Even if we were already evicted and unbind to destroy, we need to
> > - * clear again here. The eviction may have updated pagetables at a
> > - * lower level, because it needs to be more conservative.
> > + * Wait for invalidation to complete. Can corrupt internal page table
> > + * state if an invalidation is running while preparing an unbind.
> > */
> > - fence = xe_migrate_update_pgtables(tile->migrate,
> > - vm, NULL, q ? q :
> > - vm->q[tile->id],
> > - entries, num_entries,
> > - syncs, num_syncs,
> > - &unbind_pt_update.base);
> > - if (!IS_ERR(fence)) {
> > - int err;
> > -
> > - err = xe_range_fence_insert(&vm->rftree[tile->id], rfence,
> > - &xe_range_fence_kfree_ops,
> > - unbind_pt_update.base.start,
> > - unbind_pt_update.base.last, fence);
> > - if (err)
> > - dma_fence_wait(fence, false);
> > + if (xe_vma_is_userptr(vma) && xe_vm_in_fault_mode(xe_vma_vm(vma)))
> > + mmu_interval_read_begin(&to_userptr_vma(vma)->userptr.notifier);
> > - /* TLB invalidation must be done before signaling unbind */
> > - err = invalidation_fence_init(tile->primary_gt, ifence, fence,
> > - xe_vma_start(vma),
> > - xe_vma_end(vma),
> > - xe_vma_vm(vma)->usm.asid);
> > - if (err) {
> > - dma_fence_put(fence);
> > - kfree(ifence);
> > - return ERR_PTR(err);
> > + pt_op->vma = vma;
> > + pt_op->bind = false;
> > + pt_op->rebind = false;
> > +
> > + err = vma_reserve_fences(tile_to_xe(tile), vma);
> > + if (err)
> > + return err;
> > +
> > + pt_op->num_entries = xe_pt_stage_unbind(tile, vma, pt_op->entries);
> > +
> > + xe_vm_dbg_print_entries(tile_to_xe(tile), pt_op->entries,
> > + pt_op->num_entries, false);
> > + xe_pt_update_ops_rfence_interval(pt_update_ops, vma);
> > + ++pt_update_ops->current_op;
> > + pt_update_ops->needs_userptr_lock |= xe_vma_is_userptr(vma);
> > + pt_update_ops->needs_invalidation = true;
> > +
> > + /* FIXME: Don't commit right away */
> > + xe_pt_commit_unbind(vma, pt_op->entries, pt_op->num_entries,
> > + deferred);
> > +
> > + return 0;
> > +}
> > +
> > +static int op_prepare(struct xe_vm *vm,
> > + struct xe_tile *tile,
> > + struct xe_vm_pgtable_update_ops *pt_update_ops,
> > + struct xe_vma_op *op)
> > +{
> > + int err = 0;
> > +
> > + xe_vm_assert_held(vm);
> > +
> > + switch (op->base.op) {
> > + case DRM_GPUVA_OP_MAP:
> > + if (!op->map.immediate && xe_vm_in_fault_mode(vm))
> > + break;
> > +
> > + err = bind_op_prepare(vm, tile, pt_update_ops, op->map.vma);
> > + pt_update_ops->wait_vm_kernel = true;
> > + break;
> > + case DRM_GPUVA_OP_REMAP:
> > + err = unbind_op_prepare(tile, pt_update_ops,
> > + gpuva_to_vma(op->base.remap.unmap->va));
> > +
> > + if (!err && op->remap.prev) {
> > + err = bind_op_prepare(vm, tile, pt_update_ops,
> > + op->remap.prev);
> > + pt_update_ops->wait_vm_bookkeep = true;
> > }
> > - fence = &ifence->base.base;
> > + if (!err && op->remap.next) {
> > + err = bind_op_prepare(vm, tile, pt_update_ops,
> > + op->remap.next);
> > + pt_update_ops->wait_vm_bookkeep = true;
> > + }
> > + break;
> > + case DRM_GPUVA_OP_UNMAP:
> > + err = unbind_op_prepare(tile, pt_update_ops,
> > + gpuva_to_vma(op->base.unmap.va));
> > + break;
> > + case DRM_GPUVA_OP_PREFETCH:
> > + err = bind_op_prepare(vm, tile, pt_update_ops,
> > + gpuva_to_vma(op->base.prefetch.va));
> > + pt_update_ops->wait_vm_kernel = true;
> > + break;
> > + default:
> > + drm_warn(&vm->xe->drm, "NOT POSSIBLE");
> > + }
> > - /* add shared fence now for pagetable delayed destroy */
> > - dma_resv_add_fence(xe_vm_resv(vm), fence,
> > - DMA_RESV_USAGE_BOOKKEEP);
> > + return err;
> > +}
> > - /* This fence will be installed by caller when doing eviction */
> > - if (!xe_vma_has_no_bo(vma) && !xe_vma_bo(vma)->vm)
> > - dma_resv_add_fence(xe_vma_bo(vma)->ttm.base.resv, fence,
> > - DMA_RESV_USAGE_BOOKKEEP);
> > - xe_pt_commit_unbind(vma, entries, num_entries,
> > - unbind_pt_update.locked ? &deferred : NULL);
> > - vma->tile_present &= ~BIT(tile->id);
> > - } else {
> > - kfree(rfence);
> > - kfree(ifence);
> > +static void
> > +xe_pt_update_ops_init(struct xe_vm_pgtable_update_ops *pt_update_ops)
> > +{
> > + init_llist_head(&pt_update_ops->deferred);
> > + pt_update_ops->start = ~0x0ull;
> > + pt_update_ops->last = 0x0ull;
> > +}
> > +
> > +/**
> > + * xe_pt_update_ops_prepare() - Prepare PT update operations
> > + * @tile: Tile of PT update operations
> > + * @vops: VMA operationa
> > + *
> > + * Prepare PT update operations which includes updating internal PT state,
> > + * allocate memory for page tables, populate page table being pruned in, and
> > + * create PT update operations for leaf insertion / removal.
> > + *
> > + * Return: 0 on success, negative error code on error.
> > + */
> > +int xe_pt_update_ops_prepare(struct xe_tile *tile, struct xe_vma_ops *vops)
> > +{
> > + struct xe_vm_pgtable_update_ops *pt_update_ops =
> > + &vops->pt_update_ops[tile->id];
> > + struct xe_vma_op *op;
> > + int err;
> > +
> > + lockdep_assert_held(&vops->vm->lock);
> > + xe_vm_assert_held(vops->vm);
> > +
> > + xe_pt_update_ops_init(pt_update_ops);
> > +
> > + err = dma_resv_reserve_fences(xe_vm_resv(vops->vm),
> > + tile_to_xe(tile)->info.tile_count);
> > + if (err)
> > + return err;
> > +
> > + list_for_each_entry(op, &vops->list, link) {
> > + err = op_prepare(vops->vm, tile, pt_update_ops, op);
> > +
> > + if (err)
> > + return err;
> > }
> > - if (!vma->tile_present)
> > - list_del_init(&vma->combined_links.rebind);
> > + xe_tile_assert(tile, pt_update_ops->current_op <=
> > + pt_update_ops->num_ops);
> > +
> > + return 0;
> > +}
> > +
> > +static void bind_op_commit(struct xe_vm *vm, struct xe_tile *tile,
> > + struct xe_vm_pgtable_update_ops *pt_update_ops,
> > + struct xe_vma *vma, struct dma_fence *fence)
> > +{
> > + if (!xe_vma_has_no_bo(vma) && !xe_vma_bo(vma)->vm)
> > + dma_resv_add_fence(xe_vma_bo(vma)->ttm.base.resv, fence,
> > + pt_update_ops->wait_vm_bookkeep ?
> > + DMA_RESV_USAGE_KERNEL :
> > + DMA_RESV_USAGE_BOOKKEEP);
> > + vma->tile_present |= BIT(tile->id);
> > + vma->tile_staged &= ~BIT(tile->id);
> > + if (xe_vma_is_userptr(vma)) {
> > + lockdep_assert_held_read(&vm->userptr.notifier_lock);
> > + to_userptr_vma(vma)->userptr.initial_bind = true;
> > + }
> > - if (unbind_pt_update.locked) {
> > - xe_tile_assert(tile, xe_vma_is_userptr(vma));
> > + /*
> > + * Kick rebind worker if this bind triggers preempt fences and not in
> > + * the rebind worker
> > + */
> > + if (pt_update_ops->wait_vm_bookkeep &&
> > + xe_vm_in_preempt_fence_mode(vm) &&
> > + !current->mm)
> > + xe_vm_queue_rebind_worker(vm);
> > +}
> > +
> > +static void unbind_op_commit(struct xe_vm *vm, struct xe_tile *tile,
> > + struct xe_vm_pgtable_update_ops *pt_update_ops,
> > + struct xe_vma *vma, struct dma_fence *fence)
> > +{
> > + if (!xe_vma_has_no_bo(vma) && !xe_vma_bo(vma)->vm)
> > + dma_resv_add_fence(xe_vma_bo(vma)->ttm.base.resv, fence,
> > + pt_update_ops->wait_vm_bookkeep ?
> > + DMA_RESV_USAGE_KERNEL :
> > + DMA_RESV_USAGE_BOOKKEEP);
> > + vma->tile_present &= ~BIT(tile->id);
> > + if (!vma->tile_present) {
> > + list_del_init(&vma->combined_links.rebind);
> > + if (xe_vma_is_userptr(vma)) {
> > + lockdep_assert_held_read(&vm->userptr.notifier_lock);
> > - if (!vma->tile_present) {
> > spin_lock(&vm->userptr.invalidated_lock);
> > list_del_init(&to_userptr_vma(vma)->userptr.invalidate_link);
> > spin_unlock(&vm->userptr.invalidated_lock);
> > }
> > - up_read(&vm->userptr.notifier_lock);
> > - xe_bo_put_commit(&deferred);
> > }
> > +}
> > +
> > +static void op_commit(struct xe_vm *vm,
> > + struct xe_tile *tile,
> > + struct xe_vm_pgtable_update_ops *pt_update_ops,
> > + struct xe_vma_op *op, struct dma_fence *fence)
> > +{
> > + xe_vm_assert_held(vm);
> > +
> > + switch (op->base.op) {
> > + case DRM_GPUVA_OP_MAP:
> > + if (!op->map.immediate && xe_vm_in_fault_mode(vm))
> > + break;
> > +
> > + bind_op_commit(vm, tile, pt_update_ops, op->map.vma, fence);
> > + break;
> > + case DRM_GPUVA_OP_REMAP:
> > + unbind_op_commit(vm, tile, pt_update_ops,
> > + gpuva_to_vma(op->base.remap.unmap->va), fence);
> > +
> > + if (op->remap.prev)
> > + bind_op_commit(vm, tile, pt_update_ops, op->remap.prev,
> > + fence);
> > + if (op->remap.next)
> > + bind_op_commit(vm, tile, pt_update_ops, op->remap.next,
> > + fence);
> > + break;
> > + case DRM_GPUVA_OP_UNMAP:
> > + unbind_op_commit(vm, tile, pt_update_ops,
> > + gpuva_to_vma(op->base.unmap.va), fence);
> > + break;
> > + case DRM_GPUVA_OP_PREFETCH:
> > + bind_op_commit(vm, tile, pt_update_ops,
> > + gpuva_to_vma(op->base.prefetch.va), fence);
> > + break;
> > + default:
> > + drm_warn(&vm->xe->drm, "NOT POSSIBLE");
> > + }
> > +}
> > +
> > +static const struct xe_migrate_pt_update_ops migrate_ops = {
> > + .populate = xe_vm_populate_pgtable,
> > + .clear = xe_migrate_clear_pgtable_callback,
> > + .pre_commit = xe_pt_pre_commit,
> > +};
> > +
> > +static const struct xe_migrate_pt_update_ops userptr_migrate_ops = {
> > + .populate = xe_vm_populate_pgtable,
> > + .clear = xe_migrate_clear_pgtable_callback,
> > + .pre_commit = xe_pt_userptr_pre_commit,
> > +};
> > +
> > +/**
> > + * xe_pt_update_ops_run() - Run PT update operations
> > + * @tile: Tile of PT update operations
> > + * @vops: VMA operationa
> > + *
> > + * Run PT update operations which includes committing internal PT state changes,
> > + * creating job for PT update operations for leaf insertion / removal, and
> > + * installing job fence in various places.
> > + *
> > + * Return: fence on success, negative ERR_PTR on error.
> > + */
> > +struct dma_fence *
> > +xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
> > +{
> > + struct xe_vm *vm = vops->vm;
> > + struct xe_vm_pgtable_update_ops *pt_update_ops =
> > + &vops->pt_update_ops[tile->id];
> > + struct dma_fence *fence;
> > + struct invalidation_fence *ifence = NULL;
> > + struct xe_range_fence *rfence;
> > + struct xe_vma_op *op;
> > + int err = 0;
> > + struct xe_migrate_pt_update update = {
> > + .ops = pt_update_ops->needs_userptr_lock ?
> > + &userptr_migrate_ops :
> > + &migrate_ops,
> > + .vops = vops,
> > + .tile_id = tile->id
>
> Nit: I think needs a comma here.
>
Yep.
> > + };
> > +
> > + lockdep_assert_held(&vm->lock);
> > + xe_vm_assert_held(vm);
> > +
> > + if (!pt_update_ops->current_op) {
> > + xe_tile_assert(tile, xe_vm_in_fault_mode(vm));
> > +
> > + return dma_fence_get_stub();
> > + }
> > +
> > + if (pt_update_ops->needs_invalidation) {
> > + ifence = kzalloc(sizeof(*ifence), GFP_KERNEL);
> > + if (!ifence)
> > + return ERR_PTR(-ENOMEM);
> > + }
> > +
> > + rfence = kzalloc(sizeof(*rfence), GFP_KERNEL);
> > + if (!rfence) {
> > + err = -ENOMEM;
> > + goto free_ifence;
> > + }
> > +
> > + fence = xe_migrate_update_pgtables(tile->migrate, &update);
> > + if (IS_ERR(fence)) {
> > + err = PTR_ERR(fence);
> > + goto free_rfence;
> > + }
> > +
> > + err = xe_range_fence_insert(&vm->rftree[tile->id], rfence,
> > + &xe_range_fence_kfree_ops,
> > + pt_update_ops->start,
> > + pt_update_ops->last, fence);
> > + if (err)
> > + dma_fence_wait(fence, false);
>
> Could maybe set err back to zero or don't set it? Just so we don't leave any
> possible booby traps later?
>
Good idea. Will fix.
Matt
> <snip>
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH v4 6/7] drm/xe: Update PT layer with better error handling
2024-06-21 14:37 ` Matthew Auld
@ 2024-06-21 17:25 ` Matthew Brost
0 siblings, 0 replies; 23+ messages in thread
From: Matthew Brost @ 2024-06-21 17:25 UTC (permalink / raw)
To: Matthew Auld; +Cc: intel-xe
On Fri, Jun 21, 2024 at 03:37:24PM +0100, Matthew Auld wrote:
> Hi,
>
> On 18/06/2024 18:15, Matthew Brost wrote:
> > Update PT layer so if a memory allocation for a PTE fails the error can
> > be propagated to the user without requiring to be killed.
> >
> > Signed-off-by: Matthew Brost <matthew.brost@intel.com>
> > ---
> > drivers/gpu/drm/xe/xe_pt.c | 208 ++++++++++++++++++++++++++++---------
> > 1 file changed, 160 insertions(+), 48 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
> > index d6ce531f0fcd..b46b95531c2a 100644
> > --- a/drivers/gpu/drm/xe/xe_pt.c
> > +++ b/drivers/gpu/drm/xe/xe_pt.c
> > @@ -846,19 +846,27 @@ xe_vm_populate_pgtable(struct xe_migrate_pt_update *pt_update, struct xe_tile *t
> > }
> > }
> > -static void xe_pt_abort_bind(struct xe_vma *vma,
> > - struct xe_vm_pgtable_update *entries,
> > - u32 num_entries)
> > +static void xe_pt_cancel_bind(struct xe_vma *vma,
> > + struct xe_vm_pgtable_update *entries,
> > + u32 num_entries)
> > {
> > u32 i, j;
> > for (i = 0; i < num_entries; i++) {
> > - if (!entries[i].pt_entries)
> > + struct xe_pt *pt = entries[i].pt;
> > +
> > + if (!pt)
> > continue;
> > - for (j = 0; j < entries[i].qwords; j++)
> > - xe_pt_destroy(entries[i].pt_entries[j].pt, xe_vma_vm(vma)->flags, NULL);
> > + if (pt->level) {
> > + for (j = 0; j < entries[i].qwords; j++)
> > + xe_pt_destroy(entries[i].pt_entries[j].pt,
> > + xe_vma_vm(vma)->flags, NULL);
> > + }
> > +
> > kfree(entries[i].pt_entries);
> > + entries[i].pt_entries = NULL;
> > + entries[i].qwords = 0;
> > }
> > }
> > @@ -874,10 +882,61 @@ static void xe_pt_commit_locks_assert(struct xe_vma *vma)
> > xe_vm_assert_held(vm);
> > }
> > -static void xe_pt_commit_bind(struct xe_vma *vma,
> > - struct xe_vm_pgtable_update *entries,
> > - u32 num_entries, bool rebind,
> > - struct llist_head *deferred)
> > +static void xe_pt_commit(struct xe_vma *vma,
> > + struct xe_vm_pgtable_update *entries,
> > + u32 num_entries, struct llist_head *deferred)
> > +{
> > + u32 i, j;
> > +
> > + xe_pt_commit_locks_assert(vma);
> > +
> > + for (i = 0; i < num_entries; i++) {
> > + struct xe_pt *pt = entries[i].pt;
> > +
> > + if (!pt->level)
> > + continue;
> > +
> > + for (j = 0; j < entries[i].qwords; j++) {
> > + struct xe_pt *oldpte = entries[i].pt_entries[j].pt;
> > +
> > + xe_pt_destroy(oldpte, xe_vma_vm(vma)->flags, deferred);
> > + }
> > + }
> > +}
> > +
> > +static void xe_pt_abort_bind(struct xe_vma *vma,
> > + struct xe_vm_pgtable_update *entries,
> > + u32 num_entries, bool rebind)
> > +{
> > + int i, j;
> > +
> > + xe_pt_commit_locks_assert(vma);
> > +
> > + for (i = num_entries - 1; i >= 0; --i) {
> > + struct xe_pt *pt = entries[i].pt;
> > + struct xe_pt_dir *pt_dir;
> > +
> > + if (!rebind)
> > + pt->num_live -= entries[i].qwords;
> > +
> > + if (!pt->level)
> > + continue;
> > +
> > + pt_dir = as_xe_pt_dir(pt);
> > + for (j = 0; j < entries[i].qwords; j++) {
> > + u32 j_ = j + entries[i].ofs;
> > + struct xe_pt *newpte = xe_pt_entry(pt_dir, j_);
> > + struct xe_pt *oldpte = entries[i].pt_entries[j].pt;
> > +
> > + pt_dir->children[j_] = oldpte ? &oldpte->base : 0;
> > + xe_pt_destroy(newpte, xe_vma_vm(vma)->flags, NULL);
> > + }
> > + }
> > +}
> > +
> > +static void xe_pt_commit_prepare_bind(struct xe_vma *vma,
> > + struct xe_vm_pgtable_update *entries,
> > + u32 num_entries, bool rebind)
> > {
> > u32 i, j;
> > @@ -897,12 +956,13 @@ static void xe_pt_commit_bind(struct xe_vma *vma,
> > for (j = 0; j < entries[i].qwords; j++) {
> > u32 j_ = j + entries[i].ofs;
> > struct xe_pt *newpte = entries[i].pt_entries[j].pt;
> > + struct xe_pt *oldpte = NULL;
> > if (xe_pt_entry(pt_dir, j_))
> > - xe_pt_destroy(xe_pt_entry(pt_dir, j_),
> > - xe_vma_vm(vma)->flags, deferred);
> > + oldpte = xe_pt_entry(pt_dir, j_);
> > pt_dir->children[j_] = &newpte->base;
> > + entries[i].pt_entries[j].pt = oldpte;
> > }
> > }
> > }
> > @@ -926,8 +986,6 @@ xe_pt_prepare_bind(struct xe_tile *tile, struct xe_vma *vma,
> > err = xe_pt_stage_bind(tile, vma, entries, num_entries);
> > if (!err)
> > xe_tile_assert(tile, *num_entries);
> > - else /* abort! */
> > - xe_pt_abort_bind(vma, entries, *num_entries);
> > return err;
> > }
> > @@ -1449,7 +1507,7 @@ xe_pt_stage_unbind_post_descend(struct xe_ptw *parent, pgoff_t offset,
> > &end_offset))
> > return 0;
> > - (void)xe_pt_new_shared(&xe_walk->wupd, xe_child, offset, false);
> > + (void)xe_pt_new_shared(&xe_walk->wupd, xe_child, offset, true);
> > xe_walk->wupd.updates[level].update->qwords = end_offset - offset;
> > return 0;
> > @@ -1517,32 +1575,57 @@ xe_migrate_clear_pgtable_callback(struct xe_migrate_pt_update *pt_update,
> > memset64(ptr, empty, num_qwords);
> > }
> > +static void xe_pt_abort_unbind(struct xe_vma *vma,
> > + struct xe_vm_pgtable_update *entries,
> > + u32 num_entries)
> > +{
> > + int j, i;
> > +
> > + xe_pt_commit_locks_assert(vma);
> > +
> > + for (j = num_entries - 1; j >= 0; --j) {
> > + struct xe_vm_pgtable_update *entry = &entries[j];
> > + struct xe_pt *pt = entry->pt;
> > + struct xe_pt_dir *pt_dir = as_xe_pt_dir(pt);
> > +
> > + pt->num_live += entry->qwords;
> > +
> > + if (!pt->level)
> > + continue;
> > +
> > + for (i = entry->ofs; i < entry->ofs + entry->qwords; i++)
> > + pt_dir->children[i] =
> > + entries[j].pt_entries[i - entry->ofs].pt ?
> > + &entries[j].pt_entries[i - entry->ofs].pt->base : 0;
> > + }
> > +}
> > +
> > static void
> > -xe_pt_commit_unbind(struct xe_vma *vma,
> > - struct xe_vm_pgtable_update *entries, u32 num_entries,
> > - struct llist_head *deferred)
> > +xe_pt_commit_prepare_unbind(struct xe_vma *vma,
> > + struct xe_vm_pgtable_update *entries,
> > + u32 num_entries)
> > {
> > - u32 j;
> > + int j, i;
> > xe_pt_commit_locks_assert(vma);
> > for (j = 0; j < num_entries; ++j) {
> > struct xe_vm_pgtable_update *entry = &entries[j];
> > struct xe_pt *pt = entry->pt;
> > + struct xe_pt_dir *pt_dir;
> > pt->num_live -= entry->qwords;
> > - if (pt->level) {
> > - struct xe_pt_dir *pt_dir = as_xe_pt_dir(pt);
> > - u32 i;
> > -
> > - for (i = entry->ofs; i < entry->ofs + entry->qwords;
> > - i++) {
> > - if (xe_pt_entry(pt_dir, i))
> > - xe_pt_destroy(xe_pt_entry(pt_dir, i),
> > - xe_vma_vm(vma)->flags, deferred);
> > + if (!pt->level)
> > + continue;
> > - pt_dir->children[i] = NULL;
> > - }
> > + pt_dir = as_xe_pt_dir(pt);
> > + for (i = entry->ofs; i < entry->ofs + entry->qwords; i++) {
> > + if (xe_pt_entry(pt_dir, i))
> > + entries[j].pt_entries[i - entry->ofs].pt =
> > + xe_pt_entry(pt_dir, i);
> > + else
> > + entries[j].pt_entries[i - entry->ofs].pt = NULL;
> > + pt_dir->children[i] = NULL;
> > }
> > }
> > }
> > @@ -1588,7 +1671,6 @@ static int bind_op_prepare(struct xe_vm *vm, struct xe_tile *tile,
> > {
> > u32 current_op = pt_update_ops->current_op;
> > struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[current_op];
> > - struct llist_head *deferred = &pt_update_ops->deferred;
> > int err;
> > xe_bo_assert_held(xe_vma_bo(vma));
> > @@ -1637,11 +1719,12 @@ static int bind_op_prepare(struct xe_vm *vm, struct xe_tile *tile,
> > /* We bump also if batch_invalidate_tlb is true */
> > vm->tlb_flush_seqno++;
> > - /* FIXME: Don't commit right away */
> > vma->tile_staged |= BIT(tile->id);
> > pt_op->vma = vma;
> > - xe_pt_commit_bind(vma, pt_op->entries, pt_op->num_entries,
> > - pt_op->rebind, deferred);
> > + xe_pt_commit_prepare_bind(vma, pt_op->entries,
> > + pt_op->num_entries, pt_op->rebind);
> > + } else {
> > + xe_pt_cancel_bind(vma, pt_op->entries, pt_op->num_entries);
> > }
> > return err;
> > @@ -1653,7 +1736,6 @@ static int unbind_op_prepare(struct xe_tile *tile,
> > {
> > u32 current_op = pt_update_ops->current_op;
> > struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[current_op];
> > - struct llist_head *deferred = &pt_update_ops->deferred;
> > int err;
> > if (!((vma->tile_present | vma->tile_staged) & BIT(tile->id)))
> > @@ -1689,9 +1771,7 @@ static int unbind_op_prepare(struct xe_tile *tile,
> > pt_update_ops->needs_userptr_lock |= xe_vma_is_userptr(vma);
> > pt_update_ops->needs_invalidation = true;
> > - /* FIXME: Don't commit right away */
> > - xe_pt_commit_unbind(vma, pt_op->entries, pt_op->num_entries,
> > - deferred);
> > + xe_pt_commit_prepare_unbind(vma, pt_op->entries, pt_op->num_entries);
> > return 0;
> > }
> > @@ -1912,7 +1992,7 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
> > struct invalidation_fence *ifence = NULL;
> > struct xe_range_fence *rfence;
> > struct xe_vma_op *op;
> > - int err = 0;
> > + int err = 0, i;
> > struct xe_migrate_pt_update update = {
> > .ops = pt_update_ops->needs_userptr_lock ?
> > &userptr_migrate_ops :
> > @@ -1932,8 +2012,10 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
> > if (pt_update_ops->needs_invalidation) {
> > ifence = kzalloc(sizeof(*ifence), GFP_KERNEL);
> > - if (!ifence)
> > - return ERR_PTR(-ENOMEM);
> > + if (!ifence) {
> > + err = -ENOMEM;
> > + goto kill_vm_tile1;
> > + }
> > }
> > rfence = kzalloc(sizeof(*rfence), GFP_KERNEL);
> > @@ -1948,6 +2030,15 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
> > goto free_rfence;
> > }
> > + /* Point of no return - VM killed if failure after this */
> > + for (i = 0; i < pt_update_ops->current_op; ++i) {
> > + struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[i];
> > +
> > + xe_pt_commit(pt_op->vma, pt_op->entries,
> > + pt_op->num_entries, &pt_update_ops->deferred);
> > + pt_op->vma = NULL; /* skip in xe_pt_update_ops_abort */
> > + }
> > +
> > err = xe_range_fence_insert(&vm->rftree[tile->id], rfence,
> > &xe_range_fence_kfree_ops,
> > pt_update_ops->start,
> > @@ -1983,10 +2074,15 @@ xe_pt_update_ops_run(struct xe_tile *tile, struct xe_vma_ops *vops)
> > if (pt_update_ops->needs_userptr_lock)
> > up_read(&vm->userptr.notifier_lock);
> > dma_fence_put(fence);
> > + if (!tile->id)
> > + xe_vm_kill(vops->vm, false);
> > free_rfence:
> > kfree(rfence);
> > free_ifence:
> > kfree(ifence);
> > +kill_vm_tile1:
> > + if (err != -EAGAIN && tile->id)
> > + xe_vm_kill(vops->vm, false);
>
> It is OK to kill the vm here? The above one looks to only be reachable when
> past the point of no return, but not sure if that is always the case for
> this one, assuming multi-tile?
>
It's not ideal to kill the VM, but this series represents a significant
improvement over the current state of the code. The failure occurs due
to multi-tile issues (i.e., a job might succeed on the first tile but
fail on the second tile). In practical terms, this situation arises only
if a job's malloc fails.
In the long term, we should eliminate this failure point by implementing
CPU binds [1]. This approach will allow us to use single a job across
both tiles, thus eliminating failure point described above.
Additionally, there's a failure point if invalidation_fence_init returns
an error. However, I doubt this function can actually fail because the
potential failure, dma_fence_add_callback, returns only -ENOENT, which
is handled within the function. Perhaps I should modify
invalidation_fence_init to return void, thereby eliminating this
potential failure point. Furthermore, within invalidation_fence_init, we
assert that an error is raised if -ENOENT is not returned.
For now, I propose refactoring invalidation_fence_init as mentioned
earlier and accepting the current use of kill in the code. Our plan is
to remove the kill once we transition to CPU binds. Does this approach
sound reasonable?
Matt
[1] https://patchwork.freedesktop.org/patch/582003/?series=125608&rev=5
> > return ERR_PTR(err);
> > }
> > @@ -2007,12 +2103,10 @@ void xe_pt_update_ops_fini(struct xe_tile *tile, struct xe_vma_ops *vops)
> > lockdep_assert_held(&vops->vm->lock);
> > xe_vm_assert_held(vops->vm);
> > - /* FIXME: Not 100% correct */
> > - for (i = 0; i < pt_update_ops->num_ops; ++i) {
> > + for (i = 0; i < pt_update_ops->current_op; ++i) {
> > struct xe_vm_pgtable_update_op *pt_op = &pt_update_ops->ops[i];
> > - if (pt_op->bind)
> > - xe_pt_free_bind(pt_op->entries, pt_op->num_entries);
> > + xe_pt_free_bind(pt_op->entries, pt_op->num_entries);
> > }
> > xe_bo_put_commit(&vops->pt_update_ops[tile->id].deferred);
> > }
> > @@ -2026,10 +2120,28 @@ void xe_pt_update_ops_fini(struct xe_tile *tile, struct xe_vma_ops *vops)
> > */
> > void xe_pt_update_ops_abort(struct xe_tile *tile, struct xe_vma_ops *vops)
> > {
> > + struct xe_vm_pgtable_update_ops *pt_update_ops =
> > + &vops->pt_update_ops[tile->id];
> > + int i;
> > +
> > lockdep_assert_held(&vops->vm->lock);
> > xe_vm_assert_held(vops->vm);
> > - /* FIXME: Just kill VM for now + cleanup PTs */
> > + for (i = pt_update_ops->num_ops - 1; i >= 0; --i) {
> > + struct xe_vm_pgtable_update_op *pt_op =
> > + &pt_update_ops->ops[i];
> > +
> > + if (!pt_op->vma || i >= pt_update_ops->current_op)
> > + continue;
> > +
> > + if (pt_op->bind)
> > + xe_pt_abort_bind(pt_op->vma, pt_op->entries,
> > + pt_op->num_entries,
> > + pt_op->rebind);
> > + else
> > + xe_pt_abort_unbind(pt_op->vma, pt_op->entries,
> > + pt_op->num_entries);
> > + }
> > +
> > xe_bo_put_commit(&vops->pt_update_ops[tile->id].deferred);
> > - xe_vm_kill(vops->vm, false);
> > - }
> > +}
^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2024-06-21 17:25 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-18 17:15 [PATCH v4 0/7] Convert multiple bind ops to 1 job Matthew Brost
2024-06-18 17:15 ` [PATCH v4 1/7] drm/xe: s/xe_tile_migrate_engine/xe_tile_migrate_exec_queue Matthew Brost
2024-06-18 17:15 ` [PATCH v4 2/7] drm/xe: Add xe_vm_pgtable_update_op to xe_vma_ops Matthew Brost
2024-06-18 17:15 ` [PATCH v4 3/7] drm/xe: Add xe_exec_queue_last_fence_test_dep Matthew Brost
2024-06-18 17:15 ` [PATCH v4 4/7] drm/xe: Convert multiple bind ops into single job Matthew Brost
2024-06-20 17:15 ` Matthew Auld
2024-06-20 18:52 ` Matthew Brost
2024-06-20 19:20 ` Matthew Brost
2024-06-21 15:23 ` Matthew Auld
2024-06-21 17:06 ` Matthew Brost
2024-06-18 17:15 ` [PATCH v4 5/7] drm/xe: Update VM trace events Matthew Brost
2024-06-18 17:15 ` [PATCH v4 6/7] drm/xe: Update PT layer with better error handling Matthew Brost
2024-06-21 14:37 ` Matthew Auld
2024-06-21 17:25 ` Matthew Brost
2024-06-18 17:15 ` [PATCH v4 7/7] drm/xe: Add VM bind IOCTL error injection Matthew Brost
2024-06-18 17:19 ` ✓ CI.Patch_applied: success for Convert multiple bind ops to 1 job (rev4) Patchwork
2024-06-18 17:19 ` ✗ CI.checkpatch: warning " Patchwork
2024-06-18 17:20 ` ✓ CI.KUnit: success " Patchwork
2024-06-18 17:32 ` ✓ CI.Build: " Patchwork
2024-06-18 17:34 ` ✗ CI.Hooks: failure " Patchwork
2024-06-18 17:35 ` ✓ CI.checksparse: success " Patchwork
2024-06-18 17:58 ` ✗ CI.BAT: failure " Patchwork
2024-06-19 6:54 ` ✗ CI.FULL: " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox