* [PATCH] drm/xe: Flush L2 asynchronously in xe_bo_trigger_rebind()
@ 2026-07-09 2:49 Matthew Brost
2026-07-09 2:56 ` ✓ CI.KUnit: success for " Patchwork
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Matthew Brost @ 2026-07-09 2:49 UTC (permalink / raw)
To: intel-xe; +Cc: Thomas Hellström, Tejas Upadhyay
On L2-flush-optimized HW with a dma-resv (non-fault) VM, evicting a BO
only needs to flush the L2 cache before the migration copy runs; the
mappings themselves are torn down and rebuilt lazily via
drm_gpuvm_bo_evict() and a subsequent rebind. Today this flush is done
by waiting for the BO to go idle and then issuing a synchronous TLB
invalidation per mapping VMA from inside xe_bo_trigger_rebind(). Both
the idle wait and the synchronous invalidation stall the calling thread
while holding the BO dma-resv lock, serializing the move behind all
in-flight GPU work on the BO.
Replace this with an asynchronous flush. Add xe_vm_flush_vm_bo_tlb_async()
which, for each VMA mapping the BO on each present tile, queues a TLB
invalidation job on the tile migrate (kernel) exec queue. The jobs depend
on the BO's in-flight GPU work, captured once as a singleton over
DMA_RESV_USAGE_BOOKKEEP, so the flush only fires once the GPU is done with
the current mapping. Each job's completion fence is installed into the
BO's dma-resv as a DMA_RESV_USAGE_KERNEL fence, so the migration copy -
which waits on the resv - waits on the flush without stalling this thread.
No PTEs are zapped and vma->tile_invalidated is left untouched: the
mapping stays valid until the lazy rebind, and the only work performed
here is the L2 flush. On any failure the caller falls back to the
existing blocking wait-idle plus xe_vm_invalidate_vma() path.
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Tejas Upadhyay <tejas.upadhyay@intel.com>
Assisted-by: GitHub_Copilot:claude-opus-4.8
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
---
drivers/gpu/drm/xe/xe_bo.c | 12 ++++
drivers/gpu/drm/xe/xe_vm.c | 125 +++++++++++++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_vm.h | 5 ++
3 files changed, 142 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 85e6d9a0f575..a08b983cb0b1 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -686,6 +686,18 @@ static int xe_bo_trigger_rebind(struct xe_device *xe, struct xe_bo *bo,
*/
if (!xe_device_is_l2_flush_optimized(xe))
continue;
+
+ /*
+ * On L2-flush-optimized HW the only reason to touch the
+ * mappings here is to flush L2 via a TLB invalidation.
+ * Do it asynchronously: queue TLB-invalidation jobs that
+ * wait on the BO's in-flight GPU work and install their
+ * completion fences into the BO's kernel dma-resv slots,
+ * so the migration waits on the flush without stalling
+ * this thread. Fall back to the blocking path on failure.
+ */
+ if (!xe_vm_flush_vm_bo_tlb_async(vm, bo, vm_bo))
+ continue;
}
if (!idle) {
diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c
index 73ac031ffb04..4557a8a4d270 100644
--- a/drivers/gpu/drm/xe/xe_vm.c
+++ b/drivers/gpu/drm/xe/xe_vm.c
@@ -39,6 +39,7 @@
#include "xe_sync.h"
#include "xe_tile.h"
#include "xe_tlb_inval.h"
+#include "xe_tlb_inval_job.h"
#include "xe_trace_bo.h"
#include "xe_vm_madvise.h"
#include "xe_wa.h"
@@ -4401,6 +4402,130 @@ int xe_vm_invalidate_vma(struct xe_vma *vma)
return ret;
}
+/*
+ * xe_vma_tlb_flush_client - Queue an async TLB flush for one VMA on one client
+ *
+ * Create and push a TLB invalidation job on the tile migrate (kernel) exec
+ * queue covering @vma's range, depending on @dep (the BO's in-flight GPU work)
+ * so the flush only fires once the GPU is done with the current mapping. The
+ * job's completion fence is installed into @resv as a KERNEL fence so the
+ * subsequent migration waits on the flush. No PTEs are zapped; this only
+ * flushes L2 via the TLB invalidation.
+ */
+static int xe_vma_tlb_flush_client(struct xe_vm *vm, struct xe_vma *vma,
+ struct xe_tile *tile, struct xe_gt *gt,
+ struct dma_resv *resv, struct dma_fence *dep,
+ int type)
+{
+ struct xe_exec_queue *q = xe_migrate_exec_queue(tile->migrate);
+ struct xe_tlb_inval_job *job;
+ struct dma_fence *fence;
+ int err;
+
+ job = xe_tlb_inval_job_create(q, >->tlb_inval,
+ q->tlb_inval[type].dep_scheduler, vm,
+ xe_vma_start(vma), xe_vma_end(vma), type);
+ if (IS_ERR(job))
+ return PTR_ERR(job);
+
+ err = xe_tlb_inval_job_alloc_dep(job);
+ if (err)
+ goto out_put;
+
+ err = dma_resv_reserve_fences(resv, 1);
+ if (err)
+ goto out_put;
+
+ /* Cannot fail; consumes a ref on @dep and returns a referenced fence. */
+ fence = xe_tlb_inval_job_push(job, tile->migrate, dep);
+ dma_resv_add_fence(resv, fence, DMA_RESV_USAGE_KERNEL);
+ dma_fence_put(fence);
+
+out_put:
+ /* Drop the creation reference (destroys the job if it was not pushed). */
+ xe_tlb_inval_job_put(job);
+ return err;
+}
+
+/**
+ * xe_vm_flush_vm_bo_tlb_async - Asynchronously flush TLBs for a vm_bo's mappings
+ * @vm: The VM @vm_bo belongs to
+ * @bo: The buffer object being moved
+ * @vm_bo: The gpuvm_bo linking @bo into @vm
+ *
+ * On L2-flush-optimized HW a BO move only needs to flush L2 (via a TLB
+ * invalidation) for the BO's live mappings; the mappings themselves are torn
+ * down and rebuilt lazily via the eviction/rebind path, so no PTEs need to be
+ * zapped here. Rather than blocking the caller on a synchronous invalidation,
+ * issue a TLB invalidation job per VMA per TLB-invalidation client (per present
+ * tile, primary and media GT). Each job waits on the BO's in-flight GPU work
+ * (all dma-resv usages) and its completion fence is installed into the BO's
+ * dma-resv KERNEL slots, so the following migration waits on the flush without
+ * stalling this thread.
+ *
+ * The caller must hold the BO's dma-resv lock and @vm must not be in fault
+ * mode.
+ *
+ * Return: 0 on success, negative error code on failure. On failure the caller
+ * should fall back to the blocking xe_vm_invalidate_vma() path; any jobs
+ * already queued install harmless extra flush fences.
+ */
+int xe_vm_flush_vm_bo_tlb_async(struct xe_vm *vm, struct xe_bo *bo,
+ struct drm_gpuvm_bo *vm_bo)
+{
+ struct xe_device *xe = vm->xe;
+ struct dma_resv *resv = bo->ttm.base.resv;
+ struct dma_fence *dep = NULL;
+ struct drm_gpuva *gpuva;
+ int err;
+
+ dma_resv_assert_held(resv);
+ xe_assert(xe, !xe_vm_in_fault_mode(vm));
+
+ /*
+ * Single fence capturing all in-flight GPU work on the BO; the TLB
+ * invalidation jobs depend on it so the flush fires only once the GPU
+ * is done with the current mapping.
+ */
+ err = dma_resv_get_singleton(resv, DMA_RESV_USAGE_BOOKKEEP, &dep);
+ if (err)
+ return err;
+ if (!dep)
+ dep = dma_fence_get_stub();
+
+ drm_gpuvm_bo_for_each_va(gpuva, vm_bo) {
+ struct xe_vma *vma = gpuva_to_vma(gpuva);
+ struct xe_tile *tile;
+ u8 id;
+
+ if (xe_vma_is_null(vma) || xe_vma_is_cpu_addr_mirror(vma))
+ continue;
+
+ for_each_tile(tile, xe, id) {
+ if (!(vma->tile_present & BIT(id)))
+ continue;
+
+ err = xe_vma_tlb_flush_client(vm, vma, tile,
+ tile->primary_gt, resv, dep,
+ XE_EXEC_QUEUE_TLB_INVAL_PRIMARY_GT);
+ if (err)
+ goto out;
+
+ if (tile->media_gt) {
+ err = xe_vma_tlb_flush_client(vm, vma, tile,
+ tile->media_gt, resv, dep,
+ XE_EXEC_QUEUE_TLB_INVAL_MEDIA_GT);
+ if (err)
+ goto out;
+ }
+ }
+ }
+
+out:
+ dma_fence_put(dep);
+ return err;
+}
+
int xe_vm_validate_protected(struct xe_vm *vm)
{
struct drm_gpuva *gpuva;
diff --git a/drivers/gpu/drm/xe/xe_vm.h b/drivers/gpu/drm/xe/xe_vm.h
index c5b900f38ded..dd5b070eaede 100644
--- a/drivers/gpu/drm/xe/xe_vm.h
+++ b/drivers/gpu/drm/xe/xe_vm.h
@@ -26,6 +26,8 @@ struct ttm_buffer_object;
struct dma_fence;
+struct xe_bo;
+struct drm_gpuvm_bo;
struct xe_exec_queue;
struct xe_file;
struct xe_pagefault;
@@ -254,6 +256,9 @@ int xe_vm_invalidate_vma(struct xe_vma *vma);
int xe_vm_invalidate_vma_submit(struct xe_vma *vma, struct xe_tlb_inval_batch *batch);
+int xe_vm_flush_vm_bo_tlb_async(struct xe_vm *vm, struct xe_bo *bo,
+ struct drm_gpuvm_bo *vm_bo);
+
int xe_vm_validate_protected(struct xe_vm *vm);
static inline void xe_vm_queue_rebind_worker(struct xe_vm *vm)
--
2.34.1
^ permalink raw reply related [flat|nested] 6+ messages in thread* ✓ CI.KUnit: success for drm/xe: Flush L2 asynchronously in xe_bo_trigger_rebind() 2026-07-09 2:49 [PATCH] drm/xe: Flush L2 asynchronously in xe_bo_trigger_rebind() Matthew Brost @ 2026-07-09 2:56 ` Patchwork 2026-07-09 3:31 ` ✓ Xe.CI.BAT: " Patchwork ` (2 subsequent siblings) 3 siblings, 0 replies; 6+ messages in thread From: Patchwork @ 2026-07-09 2:56 UTC (permalink / raw) To: Matthew Brost; +Cc: intel-xe == Series Details == Series: drm/xe: Flush L2 asynchronously in xe_bo_trigger_rebind() URL : https://patchwork.freedesktop.org/series/170046/ State : success == Summary == + trap cleanup EXIT + /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig [02:55:05] Configuring KUnit Kernel ... Generating .config ... Populating config with: $ make ARCH=um O=.kunit olddefconfig [02:55:09] Building KUnit Kernel ... Populating config with: $ make ARCH=um O=.kunit olddefconfig Building with: $ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48 [02:55:41] Starting KUnit Kernel (1/1)... [02:55:41] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [02:55:41] ================== guc_buf (11 subtests) =================== [02:55:41] [PASSED] test_smallest [02:55:41] [PASSED] test_largest [02:55:41] [PASSED] test_granular [02:55:41] [PASSED] test_unique [02:55:41] [PASSED] test_overlap [02:55:41] [PASSED] test_reusable [02:55:41] [PASSED] test_too_big [02:55:41] [PASSED] test_flush [02:55:41] [PASSED] test_lookup [02:55:41] [PASSED] test_data [02:55:41] [PASSED] test_class [02:55:41] ===================== [PASSED] guc_buf ===================== [02:55:41] =================== guc_dbm (7 subtests) =================== [02:55:41] [PASSED] test_empty [02:55:41] [PASSED] test_default [02:55:41] ======================== test_size ======================== [02:55:41] [PASSED] 4 [02:55:41] [PASSED] 8 [02:55:41] [PASSED] 32 [02:55:41] [PASSED] 256 [02:55:41] ==================== [PASSED] test_size ==================== [02:55:41] ======================= test_reuse ======================== [02:55:41] [PASSED] 4 [02:55:41] [PASSED] 8 [02:55:41] [PASSED] 32 [02:55:41] [PASSED] 256 [02:55:41] =================== [PASSED] test_reuse ==================== [02:55:41] =================== test_range_overlap ==================== [02:55:41] [PASSED] 4 [02:55:41] [PASSED] 8 [02:55:41] [PASSED] 32 [02:55:41] [PASSED] 256 [02:55:41] =============== [PASSED] test_range_overlap ================ [02:55:41] =================== test_range_compact ==================== [02:55:41] [PASSED] 4 [02:55:41] [PASSED] 8 [02:55:41] [PASSED] 32 [02:55:41] [PASSED] 256 [02:55:41] =============== [PASSED] test_range_compact ================ [02:55:41] ==================== test_range_spare ===================== [02:55:41] [PASSED] 4 [02:55:41] [PASSED] 8 [02:55:41] [PASSED] 32 [02:55:41] [PASSED] 256 [02:55:41] ================ [PASSED] test_range_spare ================= [02:55:41] ===================== [PASSED] guc_dbm ===================== [02:55:41] =================== guc_idm (6 subtests) =================== [02:55:41] [PASSED] bad_init [02:55:41] [PASSED] no_init [02:55:41] [PASSED] init_fini [02:55:41] [PASSED] check_used [02:55:41] [PASSED] check_quota [02:55:41] [PASSED] check_all [02:55:41] ===================== [PASSED] guc_idm ===================== [02:55:41] ================== no_relay (3 subtests) =================== [02:55:41] [PASSED] xe_drops_guc2pf_if_not_ready [02:55:41] [PASSED] xe_drops_guc2vf_if_not_ready [02:55:41] [PASSED] xe_rejects_send_if_not_ready [02:55:41] ==================== [PASSED] no_relay ===================== [02:55:41] ================== pf_relay (14 subtests) ================== [02:55:41] [PASSED] pf_rejects_guc2pf_too_short [02:55:41] [PASSED] pf_rejects_guc2pf_too_long [02:55:41] [PASSED] pf_rejects_guc2pf_no_payload [02:55:41] [PASSED] pf_fails_no_payload [02:55:41] [PASSED] pf_fails_bad_origin [02:55:41] [PASSED] pf_fails_bad_type [02:55:41] [PASSED] pf_txn_reports_error [02:55:41] [PASSED] pf_txn_sends_pf2guc [02:55:41] [PASSED] pf_sends_pf2guc [02:55:41] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV) [02:55:41] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV) [02:55:41] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV) [02:55:41] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV) [02:55:41] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV) [02:55:41] ==================== [PASSED] pf_relay ===================== [02:55:41] ================== vf_relay (3 subtests) =================== [02:55:41] [PASSED] vf_rejects_guc2vf_too_short [02:55:41] [PASSED] vf_rejects_guc2vf_too_long [02:55:41] [PASSED] vf_rejects_guc2vf_no_payload [02:55:41] ==================== [PASSED] vf_relay ===================== [02:55:41] ================ pf_gt_config (9 subtests) ================= [02:55:41] [PASSED] fair_contexts_1vf [02:55:41] [PASSED] fair_doorbells_1vf [02:55:41] [PASSED] fair_ggtt_1vf [02:55:41] ====================== fair_vram_1vf ====================== [02:55:41] [PASSED] 3.50 GiB [02:55:41] [PASSED] 11.5 GiB [02:55:41] [PASSED] 15.5 GiB [02:55:41] [PASSED] 31.5 GiB [02:55:41] [PASSED] 63.5 GiB [02:55:41] [PASSED] 1.91 GiB [02:55:41] ================== [PASSED] fair_vram_1vf ================== [02:55:41] ================ fair_vram_1vf_admin_only ================= [02:55:41] [PASSED] 3.50 GiB [02:55:41] [PASSED] 11.5 GiB [02:55:41] [PASSED] 15.5 GiB [02:55:41] [PASSED] 31.5 GiB [02:55:41] [PASSED] 63.5 GiB [02:55:41] [PASSED] 1.91 GiB [02:55:41] ============ [PASSED] fair_vram_1vf_admin_only ============= [02:55:41] ====================== fair_contexts ====================== [02:55:41] [PASSED] 1 VF [02:55:41] [PASSED] 2 VFs [02:55:41] [PASSED] 3 VFs [02:55:41] [PASSED] 4 VFs [02:55:41] [PASSED] 5 VFs [02:55:41] [PASSED] 6 VFs [02:55:41] [PASSED] 7 VFs [02:55:41] [PASSED] 8 VFs [02:55:41] [PASSED] 9 VFs [02:55:41] [PASSED] 10 VFs [02:55:41] [PASSED] 11 VFs [02:55:41] [PASSED] 12 VFs [02:55:41] [PASSED] 13 VFs [02:55:41] [PASSED] 14 VFs [02:55:41] [PASSED] 15 VFs [02:55:41] [PASSED] 16 VFs [02:55:41] [PASSED] 17 VFs [02:55:41] [PASSED] 18 VFs [02:55:41] [PASSED] 19 VFs [02:55:41] [PASSED] 20 VFs [02:55:41] [PASSED] 21 VFs [02:55:41] [PASSED] 22 VFs [02:55:41] [PASSED] 23 VFs [02:55:41] [PASSED] 24 VFs [02:55:41] [PASSED] 25 VFs [02:55:41] [PASSED] 26 VFs [02:55:41] [PASSED] 27 VFs [02:55:41] [PASSED] 28 VFs [02:55:41] [PASSED] 29 VFs [02:55:41] [PASSED] 30 VFs [02:55:41] [PASSED] 31 VFs [02:55:41] [PASSED] 32 VFs [02:55:41] [PASSED] 33 VFs [02:55:41] [PASSED] 34 VFs [02:55:41] [PASSED] 35 VFs [02:55:41] [PASSED] 36 VFs [02:55:41] [PASSED] 37 VFs [02:55:41] [PASSED] 38 VFs [02:55:41] [PASSED] 39 VFs [02:55:41] [PASSED] 40 VFs [02:55:41] [PASSED] 41 VFs [02:55:41] [PASSED] 42 VFs [02:55:41] [PASSED] 43 VFs [02:55:41] [PASSED] 44 VFs [02:55:41] [PASSED] 45 VFs [02:55:41] [PASSED] 46 VFs [02:55:41] [PASSED] 47 VFs [02:55:41] [PASSED] 48 VFs [02:55:41] [PASSED] 49 VFs [02:55:41] [PASSED] 50 VFs [02:55:41] [PASSED] 51 VFs [02:55:41] [PASSED] 52 VFs [02:55:41] [PASSED] 53 VFs [02:55:41] [PASSED] 54 VFs [02:55:41] [PASSED] 55 VFs [02:55:41] [PASSED] 56 VFs [02:55:41] [PASSED] 57 VFs [02:55:41] [PASSED] 58 VFs [02:55:41] [PASSED] 59 VFs [02:55:41] [PASSED] 60 VFs [02:55:41] [PASSED] 61 VFs [02:55:41] [PASSED] 62 VFs [02:55:41] [PASSED] 63 VFs [02:55:41] ================== [PASSED] fair_contexts ================== [02:55:41] ===================== fair_doorbells ====================== [02:55:41] [PASSED] 1 VF [02:55:41] [PASSED] 2 VFs [02:55:41] [PASSED] 3 VFs [02:55:41] [PASSED] 4 VFs [02:55:41] [PASSED] 5 VFs [02:55:41] [PASSED] 6 VFs [02:55:41] [PASSED] 7 VFs [02:55:41] [PASSED] 8 VFs [02:55:41] [PASSED] 9 VFs [02:55:41] [PASSED] 10 VFs [02:55:41] [PASSED] 11 VFs [02:55:41] [PASSED] 12 VFs [02:55:41] [PASSED] 13 VFs [02:55:41] [PASSED] 14 VFs [02:55:41] [PASSED] 15 VFs [02:55:41] [PASSED] 16 VFs [02:55:41] [PASSED] 17 VFs [02:55:41] [PASSED] 18 VFs [02:55:41] [PASSED] 19 VFs [02:55:41] [PASSED] 20 VFs [02:55:41] [PASSED] 21 VFs [02:55:41] [PASSED] 22 VFs [02:55:41] [PASSED] 23 VFs [02:55:41] [PASSED] 24 VFs [02:55:41] [PASSED] 25 VFs [02:55:41] [PASSED] 26 VFs [02:55:41] [PASSED] 27 VFs [02:55:41] [PASSED] 28 VFs [02:55:41] [PASSED] 29 VFs [02:55:41] [PASSED] 30 VFs [02:55:41] [PASSED] 31 VFs [02:55:41] [PASSED] 32 VFs [02:55:41] [PASSED] 33 VFs [02:55:41] [PASSED] 34 VFs [02:55:41] [PASSED] 35 VFs [02:55:41] [PASSED] 36 VFs [02:55:41] [PASSED] 37 VFs [02:55:41] [PASSED] 38 VFs [02:55:41] [PASSED] 39 VFs [02:55:41] [PASSED] 40 VFs [02:55:41] [PASSED] 41 VFs [02:55:41] [PASSED] 42 VFs [02:55:41] [PASSED] 43 VFs [02:55:41] [PASSED] 44 VFs [02:55:41] [PASSED] 45 VFs [02:55:41] [PASSED] 46 VFs [02:55:41] [PASSED] 47 VFs [02:55:41] [PASSED] 48 VFs [02:55:41] [PASSED] 49 VFs [02:55:41] [PASSED] 50 VFs [02:55:41] [PASSED] 51 VFs [02:55:41] [PASSED] 52 VFs [02:55:41] [PASSED] 53 VFs [02:55:41] [PASSED] 54 VFs [02:55:41] [PASSED] 55 VFs [02:55:41] [PASSED] 56 VFs [02:55:41] [PASSED] 57 VFs [02:55:41] [PASSED] 58 VFs [02:55:41] [PASSED] 59 VFs [02:55:41] [PASSED] 60 VFs [02:55:41] [PASSED] 61 VFs [02:55:41] [PASSED] 62 VFs [02:55:41] [PASSED] 63 VFs [02:55:41] ================= [PASSED] fair_doorbells ================== [02:55:41] ======================== fair_ggtt ======================== [02:55:41] [PASSED] 1 VF [02:55:41] [PASSED] 2 VFs [02:55:41] [PASSED] 3 VFs [02:55:41] [PASSED] 4 VFs [02:55:41] [PASSED] 5 VFs [02:55:41] [PASSED] 6 VFs [02:55:41] [PASSED] 7 VFs [02:55:41] [PASSED] 8 VFs [02:55:41] [PASSED] 9 VFs [02:55:41] [PASSED] 10 VFs [02:55:41] [PASSED] 11 VFs [02:55:41] [PASSED] 12 VFs [02:55:41] [PASSED] 13 VFs [02:55:41] [PASSED] 14 VFs [02:55:41] [PASSED] 15 VFs [02:55:41] [PASSED] 16 VFs [02:55:41] [PASSED] 17 VFs [02:55:41] [PASSED] 18 VFs [02:55:41] [PASSED] 19 VFs [02:55:41] [PASSED] 20 VFs [02:55:41] [PASSED] 21 VFs [02:55:41] [PASSED] 22 VFs [02:55:41] [PASSED] 23 VFs [02:55:41] [PASSED] 24 VFs [02:55:41] [PASSED] 25 VFs [02:55:41] [PASSED] 26 VFs [02:55:41] [PASSED] 27 VFs [02:55:41] [PASSED] 28 VFs [02:55:41] [PASSED] 29 VFs [02:55:41] [PASSED] 30 VFs [02:55:41] [PASSED] 31 VFs [02:55:41] [PASSED] 32 VFs [02:55:41] [PASSED] 33 VFs [02:55:41] [PASSED] 34 VFs [02:55:41] [PASSED] 35 VFs [02:55:41] [PASSED] 36 VFs [02:55:41] [PASSED] 37 VFs [02:55:41] [PASSED] 38 VFs [02:55:41] [PASSED] 39 VFs [02:55:41] [PASSED] 40 VFs [02:55:41] [PASSED] 41 VFs [02:55:41] [PASSED] 42 VFs [02:55:41] [PASSED] 43 VFs [02:55:41] [PASSED] 44 VFs [02:55:41] [PASSED] 45 VFs [02:55:41] [PASSED] 46 VFs [02:55:41] [PASSED] 47 VFs [02:55:41] [PASSED] 48 VFs [02:55:41] [PASSED] 49 VFs [02:55:41] [PASSED] 50 VFs [02:55:41] [PASSED] 51 VFs [02:55:41] [PASSED] 52 VFs [02:55:41] [PASSED] 53 VFs [02:55:41] [PASSED] 54 VFs [02:55:41] [PASSED] 55 VFs [02:55:41] [PASSED] 56 VFs [02:55:41] [PASSED] 57 VFs [02:55:41] [PASSED] 58 VFs [02:55:41] [PASSED] 59 VFs [02:55:41] [PASSED] 60 VFs [02:55:41] [PASSED] 61 VFs [02:55:41] [PASSED] 62 VFs [02:55:41] [PASSED] 63 VFs [02:55:41] ==================== [PASSED] fair_ggtt ==================== [02:55:41] ======================== fair_vram ======================== [02:55:41] [PASSED] 1 VF [02:55:41] [PASSED] 2 VFs [02:55:41] [PASSED] 3 VFs [02:55:41] [PASSED] 4 VFs [02:55:41] [PASSED] 5 VFs [02:55:41] [PASSED] 6 VFs [02:55:41] [PASSED] 7 VFs [02:55:41] [PASSED] 8 VFs [02:55:41] [PASSED] 9 VFs [02:55:41] [PASSED] 10 VFs [02:55:41] [PASSED] 11 VFs [02:55:41] [PASSED] 12 VFs [02:55:41] [PASSED] 13 VFs [02:55:41] [PASSED] 14 VFs [02:55:41] [PASSED] 15 VFs [02:55:41] [PASSED] 16 VFs [02:55:41] [PASSED] 17 VFs [02:55:41] [PASSED] 18 VFs [02:55:41] [PASSED] 19 VFs [02:55:41] [PASSED] 20 VFs [02:55:41] [PASSED] 21 VFs [02:55:41] [PASSED] 22 VFs [02:55:41] [PASSED] 23 VFs [02:55:41] [PASSED] 24 VFs [02:55:41] [PASSED] 25 VFs [02:55:41] [PASSED] 26 VFs [02:55:41] [PASSED] 27 VFs [02:55:41] [PASSED] 28 VFs [02:55:41] [PASSED] 29 VFs [02:55:41] [PASSED] 30 VFs [02:55:41] [PASSED] 31 VFs [02:55:41] [PASSED] 32 VFs [02:55:41] [PASSED] 33 VFs [02:55:41] [PASSED] 34 VFs [02:55:41] [PASSED] 35 VFs [02:55:41] [PASSED] 36 VFs [02:55:41] [PASSED] 37 VFs [02:55:41] [PASSED] 38 VFs [02:55:41] [PASSED] 39 VFs [02:55:41] [PASSED] 40 VFs [02:55:41] [PASSED] 41 VFs [02:55:41] [PASSED] 42 VFs [02:55:41] [PASSED] 43 VFs [02:55:41] [PASSED] 44 VFs [02:55:41] [PASSED] 45 VFs [02:55:41] [PASSED] 46 VFs [02:55:41] [PASSED] 47 VFs [02:55:41] [PASSED] 48 VFs [02:55:41] [PASSED] 49 VFs [02:55:41] [PASSED] 50 VFs [02:55:41] [PASSED] 51 VFs [02:55:41] [PASSED] 52 VFs [02:55:41] [PASSED] 53 VFs [02:55:41] [PASSED] 54 VFs [02:55:41] [PASSED] 55 VFs [02:55:41] [PASSED] 56 VFs [02:55:41] [PASSED] 57 VFs [02:55:41] [PASSED] 58 VFs [02:55:41] [PASSED] 59 VFs [02:55:41] [PASSED] 60 VFs [02:55:41] [PASSED] 61 VFs [02:55:41] [PASSED] 62 VFs [02:55:41] [PASSED] 63 VFs [02:55:41] ==================== [PASSED] fair_vram ==================== [02:55:41] ================== [PASSED] pf_gt_config =================== [02:55:41] ===================== lmtt (1 subtest) ===================== [02:55:41] ======================== test_ops ========================= [02:55:41] [PASSED] 2-level [02:55:41] [PASSED] multi-level [02:55:41] ==================== [PASSED] test_ops ===================== [02:55:41] ====================== [PASSED] lmtt ======================= [02:55:41] ================= pf_service (11 subtests) ================= [02:55:41] [PASSED] pf_negotiate_any [02:55:41] [PASSED] pf_negotiate_base_match [02:55:41] [PASSED] pf_negotiate_base_newer [02:55:41] [PASSED] pf_negotiate_base_next [02:55:41] [SKIPPED] pf_negotiate_base_older (no older minor) [02:55:41] [PASSED] pf_negotiate_base_prev [02:55:41] [PASSED] pf_negotiate_latest_match [02:55:41] [PASSED] pf_negotiate_latest_newer [02:55:41] [PASSED] pf_negotiate_latest_next [02:55:41] [SKIPPED] pf_negotiate_latest_older (no older minor) [02:55:41] [SKIPPED] pf_negotiate_latest_prev (no prev major) [02:55:41] =================== [PASSED] pf_service ==================== [02:55:41] ================= xe_guc_g2g (2 subtests) ================== [02:55:41] ============== xe_live_guc_g2g_kunit_default ============== [02:55:41] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ========== [02:55:41] ============== xe_live_guc_g2g_kunit_allmem =============== [02:55:41] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ========== [02:55:41] =================== [SKIPPED] xe_guc_g2g =================== [02:55:41] =================== xe_mocs (2 subtests) =================== [02:55:41] ================ xe_live_mocs_kernel_kunit ================ [02:55:41] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============ [02:55:41] ================ xe_live_mocs_reset_kunit ================= [02:55:41] ============ [SKIPPED] xe_live_mocs_reset_kunit ============ [02:55:41] ==================== [SKIPPED] xe_mocs ===================== [02:55:41] ================= xe_migrate (2 subtests) ================== [02:55:41] ================= xe_migrate_sanity_kunit ================= [02:55:41] ============ [SKIPPED] xe_migrate_sanity_kunit ============= [02:55:41] ================== xe_validate_ccs_kunit ================== [02:55:41] ============= [SKIPPED] xe_validate_ccs_kunit ============== [02:55:41] =================== [SKIPPED] xe_migrate =================== [02:55:41] ================== xe_dma_buf (1 subtest) ================== [02:55:41] ==================== xe_dma_buf_kunit ===================== [02:55:41] ================ [SKIPPED] xe_dma_buf_kunit ================ [02:55:41] =================== [SKIPPED] xe_dma_buf =================== [02:55:41] ================= xe_bo_shrink (1 subtest) ================= [02:55:41] =================== xe_bo_shrink_kunit ==================== [02:55:41] =============== [SKIPPED] xe_bo_shrink_kunit =============== [02:55:41] ================== [SKIPPED] xe_bo_shrink ================== [02:55:41] ==================== xe_bo (2 subtests) ==================== [02:55:41] ================== xe_ccs_migrate_kunit =================== [02:55:41] ============== [SKIPPED] xe_ccs_migrate_kunit ============== [02:55:41] ==================== xe_bo_evict_kunit ==================== [02:55:41] =============== [SKIPPED] xe_bo_evict_kunit ================ [02:55:41] ===================== [SKIPPED] xe_bo ====================== [02:55:41] ==================== args (13 subtests) ==================== [02:55:41] [PASSED] count_args_test [02:55:41] [PASSED] call_args_example [02:55:41] [PASSED] call_args_test [02:55:41] [PASSED] drop_first_arg_example [02:55:41] [PASSED] drop_first_arg_test [02:55:41] [PASSED] first_arg_example [02:55:41] [PASSED] first_arg_test [02:55:41] [PASSED] last_arg_example [02:55:41] [PASSED] last_arg_test [02:55:41] [PASSED] pick_arg_example [02:55:41] [PASSED] if_args_example [02:55:41] [PASSED] if_args_test [02:55:41] [PASSED] sep_comma_example [02:55:41] ====================== [PASSED] args ======================= [02:55:41] =================== xe_pci (3 subtests) ==================== [02:55:41] ==================== check_graphics_ip ==================== [02:55:41] [PASSED] 12.00 Xe_LP [02:55:41] [PASSED] 12.10 Xe_LP+ [02:55:41] [PASSED] 12.55 Xe_HPG [02:55:41] [PASSED] 12.60 Xe_HPC [02:55:41] [PASSED] 12.70 Xe_LPG [02:55:41] [PASSED] 12.71 Xe_LPG [02:55:41] [PASSED] 12.74 Xe_LPG+ [02:55:41] [PASSED] 20.01 Xe2_HPG [02:55:41] [PASSED] 20.02 Xe2_HPG [02:55:41] [PASSED] 20.04 Xe2_LPG [02:55:41] [PASSED] 30.00 Xe3_LPG [02:55:41] [PASSED] 30.01 Xe3_LPG [02:55:41] [PASSED] 30.03 Xe3_LPG [02:55:41] [PASSED] 30.04 Xe3_LPG [02:55:41] [PASSED] 30.05 Xe3_LPG [02:55:41] [PASSED] 35.10 Xe3p_LPG [02:55:41] [PASSED] 35.11 Xe3p_XPC [02:55:41] ================ [PASSED] check_graphics_ip ================ [02:55:41] ===================== check_media_ip ====================== [02:55:41] [PASSED] 12.00 Xe_M [02:55:41] [PASSED] 12.55 Xe_HPM [02:55:41] [PASSED] 13.00 Xe_LPM+ [02:55:41] [PASSED] 13.01 Xe2_HPM [02:55:41] [PASSED] 20.00 Xe2_LPM [02:55:41] [PASSED] 30.00 Xe3_LPM [02:55:41] [PASSED] 30.02 Xe3_LPM [02:55:41] [PASSED] 35.00 Xe3p_LPM [02:55:41] [PASSED] 35.03 Xe3p_HPM [02:55:41] ================= [PASSED] check_media_ip ================== [02:55:41] =================== check_platform_desc =================== [02:55:41] [PASSED] 0x9A60 (TIGERLAKE) [02:55:41] [PASSED] 0x9A68 (TIGERLAKE) [02:55:41] [PASSED] 0x9A70 (TIGERLAKE) [02:55:41] [PASSED] 0x9A40 (TIGERLAKE) [02:55:41] [PASSED] 0x9A49 (TIGERLAKE) [02:55:41] [PASSED] 0x9A59 (TIGERLAKE) [02:55:41] [PASSED] 0x9A78 (TIGERLAKE) [02:55:41] [PASSED] 0x9AC0 (TIGERLAKE) [02:55:41] [PASSED] 0x9AC9 (TIGERLAKE) [02:55:41] [PASSED] 0x9AD9 (TIGERLAKE) [02:55:41] [PASSED] 0x9AF8 (TIGERLAKE) [02:55:41] [PASSED] 0x4C80 (ROCKETLAKE) [02:55:41] [PASSED] 0x4C8A (ROCKETLAKE) [02:55:41] [PASSED] 0x4C8B (ROCKETLAKE) [02:55:41] [PASSED] 0x4C8C (ROCKETLAKE) [02:55:41] [PASSED] 0x4C90 (ROCKETLAKE) [02:55:41] [PASSED] 0x4C9A (ROCKETLAKE) [02:55:41] [PASSED] 0x4680 (ALDERLAKE_S) [02:55:41] [PASSED] 0x4682 (ALDERLAKE_S) [02:55:41] [PASSED] 0x4688 (ALDERLAKE_S) [02:55:41] [PASSED] 0x468A (ALDERLAKE_S) [02:55:41] [PASSED] 0x468B (ALDERLAKE_S) [02:55:41] [PASSED] 0x4690 (ALDERLAKE_S) [02:55:41] [PASSED] 0x4692 (ALDERLAKE_S) [02:55:41] [PASSED] 0x4693 (ALDERLAKE_S) [02:55:41] [PASSED] 0x46A0 (ALDERLAKE_P) [02:55:41] [PASSED] 0x46A1 (ALDERLAKE_P) [02:55:41] [PASSED] 0x46A2 (ALDERLAKE_P) [02:55:41] [PASSED] 0x46A3 (ALDERLAKE_P) [02:55:41] [PASSED] 0x46A6 (ALDERLAKE_P) [02:55:41] [PASSED] 0x46A8 (ALDERLAKE_P) [02:55:41] [PASSED] 0x46AA (ALDERLAKE_P) [02:55:41] [PASSED] 0x462A (ALDERLAKE_P) [02:55:41] [PASSED] 0x4626 (ALDERLAKE_P) [02:55:41] [PASSED] 0x4628 (ALDERLAKE_P) [02:55:41] [PASSED] 0x46B0 (ALDERLAKE_P) [02:55:41] [PASSED] 0x46B1 (ALDERLAKE_P) [02:55:41] [PASSED] 0x46B2 (ALDERLAKE_P) [02:55:41] [PASSED] 0x46B3 (ALDERLAKE_P) [02:55:41] [PASSED] 0x46C0 (ALDERLAKE_P) [02:55:41] [PASSED] 0x46C1 (ALDERLAKE_P) [02:55:41] [PASSED] 0x46C2 (ALDERLAKE_P) [02:55:41] [PASSED] 0x46C3 (ALDERLAKE_P) [02:55:41] [PASSED] 0x46D0 (ALDERLAKE_N) [02:55:41] [PASSED] 0x46D1 (ALDERLAKE_N) [02:55:41] [PASSED] 0x46D2 (ALDERLAKE_N) [02:55:41] [PASSED] 0x46D3 (ALDERLAKE_N) [02:55:41] [PASSED] 0x46D4 (ALDERLAKE_N) [02:55:41] [PASSED] 0xA721 (ALDERLAKE_P) [02:55:41] [PASSED] 0xA7A1 (ALDERLAKE_P) [02:55:41] [PASSED] 0xA7A9 (ALDERLAKE_P) [02:55:41] [PASSED] 0xA7AC (ALDERLAKE_P) [02:55:41] [PASSED] 0xA7AD (ALDERLAKE_P) [02:55:41] [PASSED] 0xA720 (ALDERLAKE_P) [02:55:41] [PASSED] 0xA7A0 (ALDERLAKE_P) [02:55:41] [PASSED] 0xA7A8 (ALDERLAKE_P) [02:55:41] [PASSED] 0xA7AA (ALDERLAKE_P) [02:55:41] [PASSED] 0xA7AB (ALDERLAKE_P) [02:55:41] [PASSED] 0xA780 (ALDERLAKE_S) [02:55:41] [PASSED] 0xA781 (ALDERLAKE_S) [02:55:41] [PASSED] 0xA782 (ALDERLAKE_S) [02:55:41] [PASSED] 0xA783 (ALDERLAKE_S) [02:55:41] [PASSED] 0xA788 (ALDERLAKE_S) [02:55:41] [PASSED] 0xA789 (ALDERLAKE_S) [02:55:41] [PASSED] 0xA78A (ALDERLAKE_S) [02:55:41] [PASSED] 0xA78B (ALDERLAKE_S) [02:55:41] [PASSED] 0x4905 (DG1) [02:55:41] [PASSED] 0x4906 (DG1) [02:55:41] [PASSED] 0x4907 (DG1) [02:55:41] [PASSED] 0x4908 (DG1) [02:55:41] [PASSED] 0x4909 (DG1) [02:55:41] [PASSED] 0x56C0 (DG2) [02:55:41] [PASSED] 0x56C2 (DG2) [02:55:41] [PASSED] 0x56C1 (DG2) [02:55:41] [PASSED] 0x7D51 (METEORLAKE) [02:55:41] [PASSED] 0x7DD1 (METEORLAKE) [02:55:41] [PASSED] 0x7D41 (METEORLAKE) [02:55:41] [PASSED] 0x7D67 (METEORLAKE) [02:55:41] [PASSED] 0xB640 (METEORLAKE) [02:55:41] [PASSED] 0x56A0 (DG2) [02:55:41] [PASSED] 0x56A1 (DG2) [02:55:41] [PASSED] 0x56A2 (DG2) [02:55:41] [PASSED] 0x56BE (DG2) [02:55:41] [PASSED] 0x56BF (DG2) [02:55:41] [PASSED] 0x5690 (DG2) [02:55:41] [PASSED] 0x5691 (DG2) [02:55:41] [PASSED] 0x5692 (DG2) [02:55:41] [PASSED] 0x56A5 (DG2) [02:55:41] [PASSED] 0x56A6 (DG2) [02:55:41] [PASSED] 0x56B0 (DG2) [02:55:41] [PASSED] 0x56B1 (DG2) [02:55:41] [PASSED] 0x56BA (DG2) [02:55:41] [PASSED] 0x56BB (DG2) [02:55:41] [PASSED] 0x56BC (DG2) [02:55:41] [PASSED] 0x56BD (DG2) [02:55:41] [PASSED] 0x5693 (DG2) [02:55:41] [PASSED] 0x5694 (DG2) [02:55:41] [PASSED] 0x5695 (DG2) [02:55:41] [PASSED] 0x56A3 (DG2) [02:55:41] [PASSED] 0x56A4 (DG2) [02:55:41] [PASSED] 0x56B2 (DG2) [02:55:41] [PASSED] 0x56B3 (DG2) [02:55:41] [PASSED] 0x5696 (DG2) [02:55:41] [PASSED] 0x5697 (DG2) [02:55:41] [PASSED] 0xB69 (PVC) [02:55:41] [PASSED] 0xB6E (PVC) [02:55:41] [PASSED] 0xBD4 (PVC) [02:55:41] [PASSED] 0xBD5 (PVC) [02:55:41] [PASSED] 0xBD6 (PVC) [02:55:41] [PASSED] 0xBD7 (PVC) [02:55:41] [PASSED] 0xBD8 (PVC) [02:55:41] [PASSED] 0xBD9 (PVC) [02:55:41] [PASSED] 0xBDA (PVC) [02:55:41] [PASSED] 0xBDB (PVC) [02:55:41] [PASSED] 0xBE0 (PVC) [02:55:41] [PASSED] 0xBE1 (PVC) [02:55:41] [PASSED] 0xBE5 (PVC) [02:55:41] [PASSED] 0x7D40 (METEORLAKE) [02:55:41] [PASSED] 0x7D45 (METEORLAKE) [02:55:41] [PASSED] 0x7D55 (METEORLAKE) [02:55:41] [PASSED] 0x7D60 (METEORLAKE) [02:55:41] [PASSED] 0x7DD5 (METEORLAKE) [02:55:41] [PASSED] 0x6420 (LUNARLAKE) [02:55:41] [PASSED] 0x64A0 (LUNARLAKE) [02:55:41] [PASSED] 0x64B0 (LUNARLAKE) [02:55:41] [PASSED] 0xE202 (BATTLEMAGE) [02:55:41] [PASSED] 0xE209 (BATTLEMAGE) [02:55:41] [PASSED] 0xE20B (BATTLEMAGE) [02:55:41] [PASSED] 0xE20C (BATTLEMAGE) [02:55:41] [PASSED] 0xE20D (BATTLEMAGE) [02:55:41] [PASSED] 0xE210 (BATTLEMAGE) [02:55:41] [PASSED] 0xE211 (BATTLEMAGE) [02:55:41] [PASSED] 0xE212 (BATTLEMAGE) [02:55:41] [PASSED] 0xE216 (BATTLEMAGE) [02:55:41] [PASSED] 0xE220 (BATTLEMAGE) [02:55:41] [PASSED] 0xE221 (BATTLEMAGE) [02:55:41] [PASSED] 0xE222 (BATTLEMAGE) [02:55:41] [PASSED] 0xE223 (BATTLEMAGE) [02:55:41] [PASSED] 0xB080 (PANTHERLAKE) [02:55:41] [PASSED] 0xB081 (PANTHERLAKE) [02:55:41] [PASSED] 0xB082 (PANTHERLAKE) [02:55:41] [PASSED] 0xB083 (PANTHERLAKE) [02:55:41] [PASSED] 0xB084 (PANTHERLAKE) [02:55:41] [PASSED] 0xB085 (PANTHERLAKE) [02:55:41] [PASSED] 0xB086 (PANTHERLAKE) [02:55:41] [PASSED] 0xB087 (PANTHERLAKE) [02:55:41] [PASSED] 0xB08F (PANTHERLAKE) [02:55:41] [PASSED] 0xB090 (PANTHERLAKE) [02:55:41] [PASSED] 0xB0A0 (PANTHERLAKE) [02:55:41] [PASSED] 0xB0B0 (PANTHERLAKE) [02:55:41] [PASSED] 0xFD80 (PANTHERLAKE) [02:55:41] [PASSED] 0xFD81 (PANTHERLAKE) [02:55:41] [PASSED] 0xD740 (NOVALAKE_S) [02:55:41] [PASSED] 0xD741 (NOVALAKE_S) [02:55:41] [PASSED] 0xD742 (NOVALAKE_S) [02:55:41] [PASSED] 0xD743 (NOVALAKE_S) [02:55:41] [PASSED] 0xD745 (NOVALAKE_S) [02:55:41] [PASSED] 0xD74A (NOVALAKE_S) [02:55:41] [PASSED] 0xD74B (NOVALAKE_S) [02:55:41] [PASSED] 0x674C (CRESCENTISLAND) [02:55:41] [PASSED] 0x674D (CRESCENTISLAND) [02:55:41] [PASSED] 0x674E (CRESCENTISLAND) [02:55:41] [PASSED] 0x674F (CRESCENTISLAND) [02:55:41] [PASSED] 0x6750 (CRESCENTISLAND) [02:55:41] [PASSED] 0xD750 (NOVALAKE_P) [02:55:41] [PASSED] 0xD751 (NOVALAKE_P) [02:55:41] [PASSED] 0xD752 (NOVALAKE_P) [02:55:41] [PASSED] 0xD753 (NOVALAKE_P) [02:55:41] [PASSED] 0xD754 (NOVALAKE_P) [02:55:41] [PASSED] 0xD755 (NOVALAKE_P) [02:55:41] [PASSED] 0xD756 (NOVALAKE_P) [02:55:41] [PASSED] 0xD757 (NOVALAKE_P) [02:55:41] [PASSED] 0xD75F (NOVALAKE_P) [02:55:41] =============== [PASSED] check_platform_desc =============== [02:55:41] ===================== [PASSED] xe_pci ====================== [02:55:41] ============= xe_rtp_tables_test (5 subtests) ============== [02:55:41] ================== xe_rtp_table_gt_test =================== [02:55:41] [PASSED] gt_was/14011060649 [02:55:41] [PASSED] gt_was/14011059788 [02:55:41] [PASSED] gt_was/14015795083 [02:55:41] [PASSED] gt_was/16021867713 [02:55:41] [PASSED] gt_was/14019449301 [02:55:41] [PASSED] gt_was/16028005424 [02:55:41] [PASSED] gt_was/14026578760 [02:55:41] [PASSED] gt_was/1409420604 [02:55:41] [PASSED] gt_was/1408615072 [02:55:41] [PASSED] gt_was/22010523718 [02:55:41] [PASSED] gt_was/14011006942 [02:55:41] [PASSED] gt_was/14014830051 [02:55:41] [PASSED] gt_was/18018781329 [02:55:41] [PASSED] gt_was/1509235366 [02:55:41] [PASSED] gt_was/18018781329 [02:55:41] [PASSED] gt_was/16016694945 [02:55:41] [PASSED] gt_was/14018575942 [02:55:41] [PASSED] gt_was/22016670082 [02:55:41] [PASSED] gt_was/22016670082 [02:55:41] [PASSED] gt_was/14017421178 [02:55:41] [PASSED] gt_was/16025250150 [02:55:41] [PASSED] gt_was/14021871409 [02:55:41] [PASSED] gt_was/16021865536 [02:55:41] [PASSED] gt_was/14021486841 [02:55:41] [PASSED] gt_was/14025160223 [02:55:41] [PASSED] gt_was/14026144927, 16029437861, 14026127056 [02:55:41] [PASSED] gt_was/14025635424 [02:55:41] [PASSED] gt_was/16028005424 [02:55:41] ============== [PASSED] xe_rtp_table_gt_test =============== [02:55:41] ================== xe_rtp_table_gt_test =================== [02:55:41] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable [02:55:41] [PASSED] gt_tunings/Tuning: 32B Access Enable [02:55:41] [PASSED] gt_tunings/Tuning: L3 cache [02:55:41] [PASSED] gt_tunings/Tuning: L3 cache - media [02:55:41] [PASSED] gt_tunings/Tuning: Compression Overfetch [02:55:41] [PASSED] gt_tunings/Tuning: Compression Overfetch - media [02:55:41] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 [02:55:41] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media [02:55:41] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only [02:55:41] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media [02:55:41] [PASSED] gt_tunings/Tuning: Stateless compression control [02:55:41] [PASSED] gt_tunings/Tuning: Stateless compression control - media [02:55:41] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache [02:55:41] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media [02:55:41] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB [02:55:41] ============== [PASSED] xe_rtp_table_gt_test =============== [02:55:41] ================== xe_rtp_table_oob_test ================== [02:55:41] [PASSED] oob_was/1607983814 [02:55:41] [PASSED] oob_was/16010904313 [02:55:41] [PASSED] oob_was/18022495364 [02:55:41] [PASSED] oob_was/22012773006 [02:55:41] [PASSED] oob_was/14014475959 [02:55:41] [PASSED] oob_was/22011391025 [02:55:41] [PASSED] oob_was/22012727170 [02:55:41] [PASSED] oob_was/22012727685 [02:55:41] [PASSED] oob_was/22016596838 [02:55:41] [PASSED] oob_was/18020744125 [02:55:41] [PASSED] oob_was/1409600907 [02:55:41] [PASSED] oob_was/22014953428 [02:55:41] [PASSED] oob_was/16017236439 [02:55:41] [PASSED] oob_was/14019821291 [02:55:41] [PASSED] oob_was/14015076503 [02:55:41] [PASSED] oob_was/14018913170 [02:55:41] [PASSED] oob_was/14018094691 [02:55:41] [PASSED] oob_was/18024947630 [02:55:41] [PASSED] oob_was/16022287689 [02:55:41] [PASSED] oob_was/13011645652 [02:55:41] [PASSED] oob_was/14022293748 [02:55:41] [PASSED] oob_was/22019794406 [02:55:41] [PASSED] oob_was/22019338487 [02:55:41] [PASSED] oob_was/16023588340 [02:55:41] [PASSED] oob_was/14019789679 [02:55:41] [PASSED] oob_was/14022866841 [02:55:41] [PASSED] oob_was/16021333562 [02:55:41] [PASSED] oob_was/14016712196 [02:55:41] [PASSED] oob_was/14015568240 [02:55:41] [PASSED] oob_was/18013179988 [02:55:41] [PASSED] oob_was/1508761755 [02:55:41] [PASSED] oob_was/16023105232 [02:55:41] [PASSED] oob_was/16026508708 [02:55:41] [PASSED] oob_was/14020001231 [02:55:41] [PASSED] oob_was/16023683509 [02:55:41] [PASSED] oob_was/14025515070 [02:55:41] [PASSED] oob_was/15015404425_disable [02:55:41] [PASSED] oob_was/16026007364 [02:55:41] [PASSED] oob_was/14020316580 [02:55:41] [PASSED] oob_was/14025883347 [02:55:41] [PASSED] oob_was/16029380221 [02:55:41] ============== [PASSED] xe_rtp_table_oob_test ============== [02:55:41] ================ xe_rtp_table_dev_oob_test ================ [02:55:41] [PASSED] device_oob_was/22010954014 [02:55:41] [PASSED] device_oob_was/15015404425 [02:55:41] [PASSED] device_oob_was/22019338487_display [02:55:41] [PASSED] device_oob_was/14022085890 [02:55:41] [PASSED] device_oob_was/14026539277 [02:55:41] [PASSED] device_oob_was/14026633728 [02:55:41] [PASSED] device_oob_was/14026746987 [02:55:41] [PASSED] device_oob_was/14026779378 [02:55:41] ============ [PASSED] xe_rtp_table_dev_oob_test ============ [02:55:41] ========== xe_rtp_table_missing_upper_bound_test ========== [02:55:41] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865 [02:55:41] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037 [02:55:41] [PASSED] register_whitelist/1806527549 [02:55:41] [PASSED] register_whitelist/allow_read_ctx_timestamp [02:55:41] [PASSED] register_whitelist/allow_read_queue_timestamp [02:55:41] [PASSED] register_whitelist/16014440446 [02:55:41] [PASSED] register_whitelist/16017236439 [02:55:41] [PASSED] register_whitelist/16020183090 [02:55:41] [PASSED] register_whitelist/14024997852 [02:55:41] [PASSED] register_whitelist/14024997852 [02:55:41] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ====== [02:55:41] =============== [PASSED] xe_rtp_tables_test ================ [02:55:41] =================== xe_rtp (3 subtests) ==================== [02:55:41] =================== xe_rtp_rules_tests ==================== [02:55:41] [PASSED] no [02:55:41] [PASSED] yes [02:55:41] [PASSED] no-and-no [02:55:41] [PASSED] no-and-yes [02:55:41] [PASSED] yes-and-no [02:55:41] [PASSED] yes-and-yes [02:55:41] [PASSED] no-or-no [02:55:41] [PASSED] no-or-yes [02:55:41] [PASSED] yes-or-no [02:55:41] [PASSED] yes-or-yes [02:55:41] [PASSED] no-yes-or-yes-no [02:55:41] [PASSED] no-yes-or-yes-yes [02:55:41] [PASSED] yes-yes-or-no-yes [02:55:41] [PASSED] yes-yes-or-yes-yes [02:55:41] [PASSED] no-no-or-yes-or-no [02:55:41] [PASSED] or [02:55:41] [PASSED] or-yes [02:55:41] [PASSED] or-no [02:55:41] [PASSED] yes-or [02:55:41] [PASSED] no-or [02:55:41] [PASSED] no-or-or-yes [02:55:41] [PASSED] yes-or-or-no [02:55:41] [PASSED] no-or-or-no [02:55:41] [PASSED] missing-context-engine-class [02:55:41] [PASSED] missing-context-engine-class-or-yes [02:55:41] [PASSED] missing-context-engine-class-or-or-yes [02:55:41] =============== [PASSED] xe_rtp_rules_tests ================ [02:55:41] =============== xe_rtp_process_to_sr_tests ================ [02:55:41] [PASSED] coalesce-same-reg [02:55:41] [PASSED] coalesce-same-reg-literal-and-func [02:55:41] [PASSED] no-match-no-add [02:55:41] [PASSED] two-regs-two-entries [02:55:41] [PASSED] clr-one-set-other [02:55:41] [PASSED] set-field [02:55:41] [PASSED] conflict-duplicate [02:55:41] [PASSED] conflict-not-disjoint [02:55:41] [PASSED] conflict-not-disjoint-literal-and-func [02:55:41] [PASSED] conflict-reg-type [02:55:41] [PASSED] bad-mcr-reg-forced-to-regular [02:55:41] [PASSED] bad-regular-reg-forced-to-mcr [02:55:41] =========== [PASSED] xe_rtp_process_to_sr_tests ============ [02:55:41] ================== xe_rtp_process_tests =================== [02:55:41] [PASSED] active1 [02:55:41] [PASSED] active2 [02:55:41] [PASSED] active-inactive [02:55:41] [PASSED] inactive-active [02:55:41] [PASSED] inactive-active-inactive [02:55:41] [PASSED] inactive-inactive-inactive [02:55:41] ============== [PASSED] xe_rtp_process_tests =============== [02:55:41] ===================== [PASSED] xe_rtp ====================== [02:55:41] ==================== xe_wa (1 subtest) ===================== [02:55:41] ======================== xe_wa_gt ========================= [02:55:41] [PASSED] TIGERLAKE B0 [02:55:41] [PASSED] DG1 A0 [02:55:41] [PASSED] DG1 B0 [02:55:41] [PASSED] ALDERLAKE_S A0 [02:55:41] [PASSED] ALDERLAKE_S B0 [02:55:41] [PASSED] ALDERLAKE_S C0 [02:55:41] [PASSED] ALDERLAKE_S D0 [02:55:41] [PASSED] ALDERLAKE_P A0 [02:55:41] [PASSED] ALDERLAKE_P B0 [02:55:41] [PASSED] ALDERLAKE_P C0 [02:55:41] [PASSED] ALDERLAKE_S RPLS D0 [02:55:41] [PASSED] ALDERLAKE_P RPLU E0 [02:55:41] [PASSED] DG2 G10 C0 [02:55:41] [PASSED] DG2 G11 B1 [02:55:41] [PASSED] DG2 G12 A1 [02:55:41] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0 [02:55:41] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0 [02:55:41] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0 [02:55:41] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0 [02:55:41] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0 [02:55:41] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1 [02:55:41] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0 [02:55:41] ==================== [PASSED] xe_wa_gt ===================== [02:55:41] ====================== [PASSED] xe_wa ====================== [02:55:41] ============================================================ [02:55:41] Testing complete. Ran 729 tests: passed: 711, skipped: 18 [02:55:41] Elapsed time: 36.793s total, 4.404s configuring, 31.724s building, 0.639s running + /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig [02:55:41] Configuring KUnit Kernel ... Regenerating .config ... Populating config with: $ make ARCH=um O=.kunit olddefconfig [02:55:43] Building KUnit Kernel ... Populating config with: $ make ARCH=um O=.kunit olddefconfig Building with: $ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48 [02:56:08] Starting KUnit Kernel (1/1)... [02:56:08] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [02:56:08] ============ drm_test_pick_cmdline (2 subtests) ============ [02:56:08] [PASSED] drm_test_pick_cmdline_res_1920_1080_60 [02:56:08] =============== drm_test_pick_cmdline_named =============== [02:56:08] [PASSED] NTSC [02:56:08] [PASSED] NTSC-J [02:56:08] [PASSED] PAL [02:56:08] [PASSED] PAL-M [02:56:08] =========== [PASSED] drm_test_pick_cmdline_named =========== [02:56:08] ============== [PASSED] drm_test_pick_cmdline ============== [02:56:08] == drm_test_atomic_get_connector_for_encoder (1 subtest) === [02:56:08] [PASSED] drm_test_drm_atomic_get_connector_for_encoder [02:56:08] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ==== [02:56:08] =========== drm_validate_clone_mode (2 subtests) =========== [02:56:08] ============== drm_test_check_in_clone_mode =============== [02:56:08] [PASSED] in_clone_mode [02:56:08] [PASSED] not_in_clone_mode [02:56:08] ========== [PASSED] drm_test_check_in_clone_mode =========== [02:56:08] =============== drm_test_check_valid_clones =============== [02:56:08] [PASSED] not_in_clone_mode [02:56:08] [PASSED] valid_clone [02:56:08] [PASSED] invalid_clone [02:56:08] =========== [PASSED] drm_test_check_valid_clones =========== [02:56:08] ============= [PASSED] drm_validate_clone_mode ============= [02:56:08] ============= drm_validate_modeset (1 subtest) ============= [02:56:08] [PASSED] drm_test_check_connector_changed_modeset [02:56:08] ============== [PASSED] drm_validate_modeset =============== [02:56:08] ====== drm_test_bridge_get_current_state (2 subtests) ====== [02:56:08] [PASSED] drm_test_drm_bridge_get_current_state_atomic [02:56:08] [PASSED] drm_test_drm_bridge_get_current_state_legacy [02:56:08] ======== [PASSED] drm_test_bridge_get_current_state ======== [02:56:08] ====== drm_test_bridge_helper_reset_crtc (4 subtests) ====== [02:56:08] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic [02:56:08] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled [02:56:08] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy [02:56:08] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts [02:56:08] ======== [PASSED] drm_test_bridge_helper_reset_crtc ======== [02:56:08] ============== drm_bridge_alloc (2 subtests) =============== [02:56:08] [PASSED] drm_test_drm_bridge_alloc_basic [02:56:08] [PASSED] drm_test_drm_bridge_alloc_get_put [02:56:08] ================ [PASSED] drm_bridge_alloc ================= [02:56:08] ============= drm_bridge_bus_fmt (5 subtests) ============== [02:56:08] [PASSED] drm_test_bridge_rgb_yuv_rgb [02:56:08] [PASSED] drm_test_bridge_must_convert_to_yuv444 [02:56:08] [PASSED] drm_test_bridge_hdmi_auto_rgb [02:56:08] [PASSED] drm_test_bridge_auto_first [02:56:08] [PASSED] drm_test_bridge_rgb_yuv_no_path [02:56:08] =============== [PASSED] drm_bridge_bus_fmt ================ [02:56:08] ============= drm_cmdline_parser (40 subtests) ============= [02:56:08] [PASSED] drm_test_cmdline_force_d_only [02:56:08] [PASSED] drm_test_cmdline_force_D_only_dvi [02:56:08] [PASSED] drm_test_cmdline_force_D_only_hdmi [02:56:08] [PASSED] drm_test_cmdline_force_D_only_not_digital [02:56:08] [PASSED] drm_test_cmdline_force_e_only [02:56:08] [PASSED] drm_test_cmdline_res [02:56:08] [PASSED] drm_test_cmdline_res_vesa [02:56:08] [PASSED] drm_test_cmdline_res_vesa_rblank [02:56:08] [PASSED] drm_test_cmdline_res_rblank [02:56:08] [PASSED] drm_test_cmdline_res_bpp [02:56:08] [PASSED] drm_test_cmdline_res_refresh [02:56:08] [PASSED] drm_test_cmdline_res_bpp_refresh [02:56:08] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced [02:56:08] [PASSED] drm_test_cmdline_res_bpp_refresh_margins [02:56:08] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off [02:56:08] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on [02:56:08] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog [02:56:08] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital [02:56:08] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on [02:56:08] [PASSED] drm_test_cmdline_res_margins_force_on [02:56:08] [PASSED] drm_test_cmdline_res_vesa_margins [02:56:08] [PASSED] drm_test_cmdline_name [02:56:08] [PASSED] drm_test_cmdline_name_bpp [02:56:08] [PASSED] drm_test_cmdline_name_option [02:56:08] [PASSED] drm_test_cmdline_name_bpp_option [02:56:08] [PASSED] drm_test_cmdline_rotate_0 [02:56:08] [PASSED] drm_test_cmdline_rotate_90 [02:56:08] [PASSED] drm_test_cmdline_rotate_180 [02:56:08] [PASSED] drm_test_cmdline_rotate_270 [02:56:08] [PASSED] drm_test_cmdline_hmirror [02:56:08] [PASSED] drm_test_cmdline_vmirror [02:56:08] [PASSED] drm_test_cmdline_margin_options [02:56:08] [PASSED] drm_test_cmdline_multiple_options [02:56:08] [PASSED] drm_test_cmdline_bpp_extra_and_option [02:56:08] [PASSED] drm_test_cmdline_extra_and_option [02:56:08] [PASSED] drm_test_cmdline_freestanding_options [02:56:08] [PASSED] drm_test_cmdline_freestanding_force_e_and_options [02:56:08] [PASSED] drm_test_cmdline_panel_orientation [02:56:08] ================ drm_test_cmdline_invalid ================= [02:56:08] [PASSED] margin_only [02:56:08] [PASSED] interlace_only [02:56:08] [PASSED] res_missing_x [02:56:08] [PASSED] res_missing_y [02:56:08] [PASSED] res_bad_y [02:56:08] [PASSED] res_missing_y_bpp [02:56:08] [PASSED] res_bad_bpp [02:56:08] [PASSED] res_bad_refresh [02:56:08] [PASSED] res_bpp_refresh_force_on_off [02:56:08] [PASSED] res_invalid_mode [02:56:08] [PASSED] res_bpp_wrong_place_mode [02:56:08] [PASSED] name_bpp_refresh [02:56:08] [PASSED] name_refresh [02:56:08] [PASSED] name_refresh_wrong_mode [02:56:08] [PASSED] name_refresh_invalid_mode [02:56:08] [PASSED] rotate_multiple [02:56:08] [PASSED] rotate_invalid_val [02:56:08] [PASSED] rotate_truncated [02:56:08] [PASSED] invalid_option [02:56:08] [PASSED] invalid_tv_option [02:56:08] [PASSED] truncated_tv_option [02:56:08] ============ [PASSED] drm_test_cmdline_invalid ============= [02:56:08] =============== drm_test_cmdline_tv_options =============== [02:56:08] [PASSED] NTSC [02:56:08] [PASSED] NTSC_443 [02:56:08] [PASSED] NTSC_J [02:56:08] [PASSED] PAL [02:56:08] [PASSED] PAL_M [02:56:08] [PASSED] PAL_N [02:56:08] [PASSED] SECAM [02:56:08] [PASSED] MONO_525 [02:56:08] [PASSED] MONO_625 [02:56:08] =========== [PASSED] drm_test_cmdline_tv_options =========== [02:56:08] =============== [PASSED] drm_cmdline_parser ================ [02:56:08] ========== drmm_connector_hdmi_init (20 subtests) ========== [02:56:08] [PASSED] drm_test_connector_hdmi_init_valid [02:56:08] [PASSED] drm_test_connector_hdmi_init_bpc_8 [02:56:08] [PASSED] drm_test_connector_hdmi_init_bpc_10 [02:56:08] [PASSED] drm_test_connector_hdmi_init_bpc_12 [02:56:08] [PASSED] drm_test_connector_hdmi_init_bpc_invalid [02:56:08] [PASSED] drm_test_connector_hdmi_init_bpc_null [02:56:08] [PASSED] drm_test_connector_hdmi_init_formats_empty [02:56:08] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb [02:56:08] === drm_test_connector_hdmi_init_formats_yuv420_allowed === [02:56:08] [PASSED] supported_formats=0x9 yuv420_allowed=1 [02:56:08] [PASSED] supported_formats=0x9 yuv420_allowed=0 [02:56:08] [PASSED] supported_formats=0x5 yuv420_allowed=1 [02:56:08] [PASSED] supported_formats=0x5 yuv420_allowed=0 [02:56:08] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed === [02:56:08] [PASSED] drm_test_connector_hdmi_init_null_ddc [02:56:08] [PASSED] drm_test_connector_hdmi_init_null_product [02:56:08] [PASSED] drm_test_connector_hdmi_init_null_vendor [02:56:08] [PASSED] drm_test_connector_hdmi_init_product_length_exact [02:56:08] [PASSED] drm_test_connector_hdmi_init_product_length_too_long [02:56:08] [PASSED] drm_test_connector_hdmi_init_product_valid [02:56:08] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact [02:56:08] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long [02:56:08] [PASSED] drm_test_connector_hdmi_init_vendor_valid [02:56:08] ========= drm_test_connector_hdmi_init_type_valid ========= [02:56:08] [PASSED] HDMI-A [02:56:08] [PASSED] HDMI-B [02:56:08] ===== [PASSED] drm_test_connector_hdmi_init_type_valid ===== [02:56:08] ======== drm_test_connector_hdmi_init_type_invalid ======== [02:56:08] [PASSED] Unknown [02:56:08] [PASSED] VGA [02:56:08] [PASSED] DVI-I [02:56:08] [PASSED] DVI-D [02:56:08] [PASSED] DVI-A [02:56:08] [PASSED] Composite [02:56:08] [PASSED] SVIDEO [02:56:08] [PASSED] LVDS [02:56:08] [PASSED] Component [02:56:08] [PASSED] DIN [02:56:08] [PASSED] DP [02:56:08] [PASSED] TV [02:56:08] [PASSED] eDP [02:56:08] [PASSED] Virtual [02:56:08] [PASSED] DSI [02:56:08] [PASSED] DPI [02:56:08] [PASSED] Writeback [02:56:08] [PASSED] SPI [02:56:08] [PASSED] USB [02:56:08] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ==== [02:56:08] ============ [PASSED] drmm_connector_hdmi_init ============= [02:56:08] ============= drmm_connector_init (3 subtests) ============= [02:56:08] [PASSED] drm_test_drmm_connector_init [02:56:08] [PASSED] drm_test_drmm_connector_init_null_ddc [02:56:08] ========= drm_test_drmm_connector_init_type_valid ========= [02:56:08] [PASSED] Unknown [02:56:08] [PASSED] VGA [02:56:08] [PASSED] DVI-I [02:56:08] [PASSED] DVI-D [02:56:08] [PASSED] DVI-A [02:56:08] [PASSED] Composite [02:56:08] [PASSED] SVIDEO [02:56:08] [PASSED] LVDS [02:56:08] [PASSED] Component [02:56:08] [PASSED] DIN [02:56:08] [PASSED] DP [02:56:08] [PASSED] HDMI-A [02:56:08] [PASSED] HDMI-B [02:56:08] [PASSED] TV [02:56:08] [PASSED] eDP [02:56:08] [PASSED] Virtual [02:56:08] [PASSED] DSI [02:56:08] [PASSED] DPI [02:56:08] [PASSED] Writeback [02:56:08] [PASSED] SPI [02:56:08] [PASSED] USB [02:56:08] ===== [PASSED] drm_test_drmm_connector_init_type_valid ===== [02:56:08] =============== [PASSED] drmm_connector_init =============== [02:56:08] ========= drm_connector_dynamic_init (6 subtests) ========== [02:56:08] [PASSED] drm_test_drm_connector_dynamic_init [02:56:08] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc [02:56:08] [PASSED] drm_test_drm_connector_dynamic_init_not_added [02:56:08] [PASSED] drm_test_drm_connector_dynamic_init_properties [02:56:08] ===== drm_test_drm_connector_dynamic_init_type_valid ====== [02:56:08] [PASSED] Unknown [02:56:08] [PASSED] VGA [02:56:08] [PASSED] DVI-I [02:56:08] [PASSED] DVI-D [02:56:08] [PASSED] DVI-A [02:56:08] [PASSED] Composite [02:56:08] [PASSED] SVIDEO [02:56:08] [PASSED] LVDS [02:56:08] [PASSED] Component [02:56:08] [PASSED] DIN [02:56:08] [PASSED] DP [02:56:08] [PASSED] HDMI-A [02:56:08] [PASSED] HDMI-B [02:56:08] [PASSED] TV [02:56:08] [PASSED] eDP [02:56:08] [PASSED] Virtual [02:56:08] [PASSED] DSI [02:56:08] [PASSED] DPI [02:56:08] [PASSED] Writeback [02:56:08] [PASSED] SPI [02:56:08] [PASSED] USB [02:56:08] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid == [02:56:08] ======== drm_test_drm_connector_dynamic_init_name ========= [02:56:08] [PASSED] Unknown [02:56:08] [PASSED] VGA [02:56:08] [PASSED] DVI-I [02:56:08] [PASSED] DVI-D [02:56:08] [PASSED] DVI-A [02:56:08] [PASSED] Composite [02:56:08] [PASSED] SVIDEO [02:56:08] [PASSED] LVDS [02:56:08] [PASSED] Component [02:56:08] [PASSED] DIN [02:56:08] [PASSED] DP [02:56:08] [PASSED] HDMI-A [02:56:08] [PASSED] HDMI-B [02:56:08] [PASSED] TV [02:56:08] [PASSED] eDP [02:56:08] [PASSED] Virtual [02:56:08] [PASSED] DSI [02:56:08] [PASSED] DPI [02:56:08] [PASSED] Writeback [02:56:08] [PASSED] SPI [02:56:08] [PASSED] USB [02:56:08] ==== [PASSED] drm_test_drm_connector_dynamic_init_name ===== [02:56:08] =========== [PASSED] drm_connector_dynamic_init ============ [02:56:08] ==== drm_connector_dynamic_register_early (4 subtests) ===== [02:56:08] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list [02:56:08] [PASSED] drm_test_drm_connector_dynamic_register_early_defer [02:56:08] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init [02:56:08] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object [02:56:08] ====== [PASSED] drm_connector_dynamic_register_early ======= [02:56:08] ======= drm_connector_dynamic_register (7 subtests) ======== [02:56:08] [PASSED] drm_test_drm_connector_dynamic_register_on_list [02:56:08] [PASSED] drm_test_drm_connector_dynamic_register_no_defer [02:56:08] [PASSED] drm_test_drm_connector_dynamic_register_no_init [02:56:08] [PASSED] drm_test_drm_connector_dynamic_register_mode_object [02:56:08] [PASSED] drm_test_drm_connector_dynamic_register_sysfs [02:56:08] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name [02:56:08] [PASSED] drm_test_drm_connector_dynamic_register_debugfs [02:56:08] ========= [PASSED] drm_connector_dynamic_register ========== [02:56:08] = drm_connector_attach_broadcast_rgb_property (2 subtests) = [02:56:08] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property [02:56:08] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector [02:56:08] === [PASSED] drm_connector_attach_broadcast_rgb_property === [02:56:08] ========== drm_get_tv_mode_from_name (2 subtests) ========== [02:56:08] ========== drm_test_get_tv_mode_from_name_valid =========== [02:56:08] [PASSED] NTSC [02:56:08] [PASSED] NTSC-443 [02:56:08] [PASSED] NTSC-J [02:56:08] [PASSED] PAL [02:56:08] [PASSED] PAL-M [02:56:08] [PASSED] PAL-N [02:56:08] [PASSED] SECAM [02:56:08] [PASSED] Mono [02:56:08] ====== [PASSED] drm_test_get_tv_mode_from_name_valid ======= [02:56:08] [PASSED] drm_test_get_tv_mode_from_name_truncated [02:56:08] ============ [PASSED] drm_get_tv_mode_from_name ============ [02:56:08] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) = [02:56:08] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb [02:56:08] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc [02:56:08] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1 [02:56:08] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc [02:56:08] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1 [02:56:08] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double [02:56:08] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid = [02:56:08] [PASSED] VIC 96 [02:56:08] [PASSED] VIC 97 [02:56:08] [PASSED] VIC 101 [02:56:08] [PASSED] VIC 102 [02:56:08] [PASSED] VIC 106 [02:56:08] [PASSED] VIC 107 [02:56:08] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid === [02:56:08] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc [02:56:08] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc [02:56:08] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc [02:56:08] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc [02:56:08] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc [02:56:08] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ==== [02:56:08] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) == [02:56:08] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ==== [02:56:08] [PASSED] Automatic [02:56:08] [PASSED] Full [02:56:08] [PASSED] Limited 16:235 [02:56:08] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name === [02:56:08] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid [02:56:08] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ==== [02:56:08] == drm_hdmi_connector_get_output_format_name (2 subtests) == [02:56:08] === drm_test_drm_hdmi_connector_get_output_format_name ==== [02:56:08] [PASSED] RGB [02:56:08] [PASSED] YUV 4:2:0 [02:56:08] [PASSED] YUV 4:2:2 [02:56:08] [PASSED] YUV 4:4:4 [02:56:08] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name === [02:56:08] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid [02:56:08] ==== [PASSED] drm_hdmi_connector_get_output_format_name ==== [02:56:08] ============= drm_damage_helper (21 subtests) ============== [02:56:08] [PASSED] drm_test_damage_iter_no_damage [02:56:08] [PASSED] drm_test_damage_iter_no_damage_fractional_src [02:56:08] [PASSED] drm_test_damage_iter_no_damage_src_moved [02:56:08] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved [02:56:08] [PASSED] drm_test_damage_iter_no_damage_not_visible [02:56:08] [PASSED] drm_test_damage_iter_no_damage_no_crtc [02:56:08] [PASSED] drm_test_damage_iter_no_damage_no_fb [02:56:08] [PASSED] drm_test_damage_iter_simple_damage [02:56:08] [PASSED] drm_test_damage_iter_single_damage [02:56:08] [PASSED] drm_test_damage_iter_single_damage_intersect_src [02:56:08] [PASSED] drm_test_damage_iter_single_damage_outside_src [02:56:08] [PASSED] drm_test_damage_iter_single_damage_fractional_src [02:56:08] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src [02:56:08] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src [02:56:08] [PASSED] drm_test_damage_iter_single_damage_src_moved [02:56:08] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved [02:56:08] [PASSED] drm_test_damage_iter_damage [02:56:08] [PASSED] drm_test_damage_iter_damage_one_intersect [02:56:08] [PASSED] drm_test_damage_iter_damage_one_outside [02:56:08] [PASSED] drm_test_damage_iter_damage_src_moved [02:56:08] [PASSED] drm_test_damage_iter_damage_not_visible [02:56:08] ================ [PASSED] drm_damage_helper ================ [02:56:08] ============== drm_dp_mst_helper (3 subtests) ============== [02:56:08] ============== drm_test_dp_mst_calc_pbn_mode ============== [02:56:08] [PASSED] Clock 154000 BPP 30 DSC disabled [02:56:08] [PASSED] Clock 234000 BPP 30 DSC disabled [02:56:08] [PASSED] Clock 297000 BPP 24 DSC disabled [02:56:08] [PASSED] Clock 332880 BPP 24 DSC enabled [02:56:08] [PASSED] Clock 324540 BPP 24 DSC enabled [02:56:08] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ========== [02:56:08] ============== drm_test_dp_mst_calc_pbn_div =============== [02:56:08] [PASSED] Link rate 2000000 lane count 4 [02:56:08] [PASSED] Link rate 2000000 lane count 2 [02:56:08] [PASSED] Link rate 2000000 lane count 1 [02:56:08] [PASSED] Link rate 1350000 lane count 4 [02:56:08] [PASSED] Link rate 1350000 lane count 2 [02:56:08] [PASSED] Link rate 1350000 lane count 1 [02:56:08] [PASSED] Link rate 1000000 lane count 4 [02:56:08] [PASSED] Link rate 1000000 lane count 2 [02:56:08] [PASSED] Link rate 1000000 lane count 1 [02:56:08] [PASSED] Link rate 810000 lane count 4 [02:56:08] [PASSED] Link rate 810000 lane count 2 [02:56:08] [PASSED] Link rate 810000 lane count 1 [02:56:08] [PASSED] Link rate 540000 lane count 4 [02:56:08] [PASSED] Link rate 540000 lane count 2 [02:56:08] [PASSED] Link rate 540000 lane count 1 [02:56:08] [PASSED] Link rate 270000 lane count 4 [02:56:08] [PASSED] Link rate 270000 lane count 2 [02:56:08] [PASSED] Link rate 270000 lane count 1 [02:56:08] [PASSED] Link rate 162000 lane count 4 [02:56:08] [PASSED] Link rate 162000 lane count 2 [02:56:08] [PASSED] Link rate 162000 lane count 1 [02:56:08] ========== [PASSED] drm_test_dp_mst_calc_pbn_div =========== [02:56:08] ========= drm_test_dp_mst_sideband_msg_req_decode ========= [02:56:08] [PASSED] DP_ENUM_PATH_RESOURCES with port number [02:56:08] [PASSED] DP_POWER_UP_PHY with port number [02:56:08] [PASSED] DP_POWER_DOWN_PHY with port number [02:56:08] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks [02:56:08] [PASSED] DP_ALLOCATE_PAYLOAD with port number [02:56:08] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI [02:56:08] [PASSED] DP_ALLOCATE_PAYLOAD with PBN [02:56:08] [PASSED] DP_QUERY_PAYLOAD with port number [02:56:08] [PASSED] DP_QUERY_PAYLOAD with VCPI [02:56:08] [PASSED] DP_REMOTE_DPCD_READ with port number [02:56:08] [PASSED] DP_REMOTE_DPCD_READ with DPCD address [02:56:08] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes [02:56:08] [PASSED] DP_REMOTE_DPCD_WRITE with port number [02:56:08] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address [02:56:08] [PASSED] DP_REMOTE_DPCD_WRITE with data array [02:56:08] [PASSED] DP_REMOTE_I2C_READ with port number [02:56:08] [PASSED] DP_REMOTE_I2C_READ with I2C device ID [02:56:08] [PASSED] DP_REMOTE_I2C_READ with transactions array [02:56:08] [PASSED] DP_REMOTE_I2C_WRITE with port number [02:56:08] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID [02:56:08] [PASSED] DP_REMOTE_I2C_WRITE with data array [02:56:08] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID [02:56:08] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID [02:56:08] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event [02:56:08] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event [02:56:08] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior [02:56:08] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior [02:56:08] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode ===== [02:56:08] ================ [PASSED] drm_dp_mst_helper ================ [02:56:08] ================== drm_exec (7 subtests) =================== [02:56:08] [PASSED] sanitycheck [02:56:08] [PASSED] test_lock [02:56:08] [PASSED] test_lock_unlock [02:56:08] [PASSED] test_duplicates [02:56:08] [PASSED] test_prepare [02:56:08] [PASSED] test_prepare_array [02:56:08] [PASSED] test_multiple_loops [02:56:08] ==================== [PASSED] drm_exec ===================== [02:56:08] =========== drm_format_helper_test (17 subtests) =========== [02:56:08] ============== drm_test_fb_xrgb8888_to_gray8 ============== [02:56:08] [PASSED] single_pixel_source_buffer [02:56:08] [PASSED] single_pixel_clip_rectangle [02:56:08] [PASSED] well_known_colors [02:56:08] [PASSED] destination_pitch [02:56:08] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ========== [02:56:08] ============= drm_test_fb_xrgb8888_to_rgb332 ============== [02:56:08] [PASSED] single_pixel_source_buffer [02:56:08] [PASSED] single_pixel_clip_rectangle [02:56:08] [PASSED] well_known_colors [02:56:08] [PASSED] destination_pitch [02:56:08] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ========== [02:56:08] ============= drm_test_fb_xrgb8888_to_rgb565 ============== [02:56:08] [PASSED] single_pixel_source_buffer [02:56:08] [PASSED] single_pixel_clip_rectangle [02:56:08] [PASSED] well_known_colors [02:56:08] [PASSED] destination_pitch [02:56:08] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ========== [02:56:08] ============ drm_test_fb_xrgb8888_to_xrgb1555 ============= [02:56:08] [PASSED] single_pixel_source_buffer [02:56:08] [PASSED] single_pixel_clip_rectangle [02:56:08] [PASSED] well_known_colors [02:56:08] [PASSED] destination_pitch [02:56:08] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 ========= [02:56:08] ============ drm_test_fb_xrgb8888_to_argb1555 ============= [02:56:08] [PASSED] single_pixel_source_buffer [02:56:08] [PASSED] single_pixel_clip_rectangle [02:56:08] [PASSED] well_known_colors [02:56:08] [PASSED] destination_pitch [02:56:08] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 ========= [02:56:08] ============ drm_test_fb_xrgb8888_to_rgba5551 ============= [02:56:08] [PASSED] single_pixel_source_buffer [02:56:08] [PASSED] single_pixel_clip_rectangle [02:56:08] [PASSED] well_known_colors [02:56:08] [PASSED] destination_pitch [02:56:08] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 ========= [02:56:08] ============= drm_test_fb_xrgb8888_to_rgb888 ============== [02:56:08] [PASSED] single_pixel_source_buffer [02:56:08] [PASSED] single_pixel_clip_rectangle [02:56:08] [PASSED] well_known_colors [02:56:08] [PASSED] destination_pitch [02:56:08] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ========== [02:56:08] ============= drm_test_fb_xrgb8888_to_bgr888 ============== [02:56:08] [PASSED] single_pixel_source_buffer [02:56:08] [PASSED] single_pixel_clip_rectangle [02:56:08] [PASSED] well_known_colors [02:56:08] [PASSED] destination_pitch [02:56:08] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ========== [02:56:08] ============ drm_test_fb_xrgb8888_to_argb8888 ============= [02:56:08] [PASSED] single_pixel_source_buffer [02:56:08] [PASSED] single_pixel_clip_rectangle [02:56:08] [PASSED] well_known_colors [02:56:08] [PASSED] destination_pitch [02:56:08] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 ========= [02:56:08] =========== drm_test_fb_xrgb8888_to_xrgb2101010 =========== [02:56:08] [PASSED] single_pixel_source_buffer [02:56:08] [PASSED] single_pixel_clip_rectangle [02:56:08] [PASSED] well_known_colors [02:56:08] [PASSED] destination_pitch [02:56:08] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 ======= [02:56:08] =========== drm_test_fb_xrgb8888_to_argb2101010 =========== [02:56:08] [PASSED] single_pixel_source_buffer [02:56:08] [PASSED] single_pixel_clip_rectangle [02:56:08] [PASSED] well_known_colors [02:56:08] [PASSED] destination_pitch [02:56:08] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 ======= [02:56:08] ============== drm_test_fb_xrgb8888_to_mono =============== [02:56:08] [PASSED] single_pixel_source_buffer [02:56:08] [PASSED] single_pixel_clip_rectangle [02:56:08] [PASSED] well_known_colors [02:56:08] [PASSED] destination_pitch [02:56:08] ========== [PASSED] drm_test_fb_xrgb8888_to_mono =========== [02:56:08] ==================== drm_test_fb_swab ===================== [02:56:08] [PASSED] single_pixel_source_buffer [02:56:08] [PASSED] single_pixel_clip_rectangle [02:56:08] [PASSED] well_known_colors [02:56:08] [PASSED] destination_pitch [02:56:08] ================ [PASSED] drm_test_fb_swab ================= [02:56:08] ============ drm_test_fb_xrgb8888_to_xbgr8888 ============= [02:56:08] [PASSED] single_pixel_source_buffer [02:56:08] [PASSED] single_pixel_clip_rectangle [02:56:08] [PASSED] well_known_colors [02:56:08] [PASSED] destination_pitch [02:56:08] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 ========= [02:56:08] ============ drm_test_fb_xrgb8888_to_abgr8888 ============= [02:56:08] [PASSED] single_pixel_source_buffer [02:56:08] [PASSED] single_pixel_clip_rectangle [02:56:08] [PASSED] well_known_colors [02:56:08] [PASSED] destination_pitch [02:56:08] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 ========= [02:56:08] ================= drm_test_fb_clip_offset ================= [02:56:08] [PASSED] pass through [02:56:08] [PASSED] horizontal offset [02:56:08] [PASSED] vertical offset [02:56:08] [PASSED] horizontal and vertical offset [02:56:08] [PASSED] horizontal offset (custom pitch) [02:56:08] [PASSED] vertical offset (custom pitch) [02:56:08] [PASSED] horizontal and vertical offset (custom pitch) [02:56:08] ============= [PASSED] drm_test_fb_clip_offset ============= [02:56:08] =================== drm_test_fb_memcpy ==================== [02:56:08] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258) [02:56:08] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258) [02:56:08] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559) [02:56:08] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258) [02:56:08] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258) [02:56:08] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559) [02:56:08] [PASSED] well_known_colors: XB24 little-endian (0x34324258) [02:56:08] [PASSED] well_known_colors: XRA8 little-endian (0x38415258) [02:56:08] [PASSED] well_known_colors: YU24 little-endian (0x34325559) [02:56:08] [PASSED] destination_pitch: XB24 little-endian (0x34324258) [02:56:08] [PASSED] destination_pitch: XRA8 little-endian (0x38415258) [02:56:08] [PASSED] destination_pitch: YU24 little-endian (0x34325559) [02:56:08] =============== [PASSED] drm_test_fb_memcpy ================ [02:56:08] ============= [PASSED] drm_format_helper_test ============== [02:56:08] ================= drm_format (18 subtests) ================= [02:56:08] [PASSED] drm_test_format_block_width_invalid [02:56:08] [PASSED] drm_test_format_block_width_one_plane [02:56:08] [PASSED] drm_test_format_block_width_two_plane [02:56:08] [PASSED] drm_test_format_block_width_three_plane [02:56:08] [PASSED] drm_test_format_block_width_tiled [02:56:08] [PASSED] drm_test_format_block_height_invalid [02:56:08] [PASSED] drm_test_format_block_height_one_plane [02:56:08] [PASSED] drm_test_format_block_height_two_plane [02:56:08] [PASSED] drm_test_format_block_height_three_plane [02:56:08] [PASSED] drm_test_format_block_height_tiled [02:56:08] [PASSED] drm_test_format_min_pitch_invalid [02:56:08] [PASSED] drm_test_format_min_pitch_one_plane_8bpp [02:56:08] [PASSED] drm_test_format_min_pitch_one_plane_16bpp [02:56:08] [PASSED] drm_test_format_min_pitch_one_plane_24bpp [02:56:08] [PASSED] drm_test_format_min_pitch_one_plane_32bpp [02:56:08] [PASSED] drm_test_format_min_pitch_two_plane [02:56:08] [PASSED] drm_test_format_min_pitch_three_plane_8bpp [02:56:08] [PASSED] drm_test_format_min_pitch_tiled [02:56:08] =================== [PASSED] drm_format ==================== [02:56:08] ============== drm_framebuffer (10 subtests) =============== [02:56:08] ========== drm_test_framebuffer_check_src_coords ========== [02:56:08] [PASSED] Success: source fits into fb [02:56:08] [PASSED] Fail: overflowing fb with x-axis coordinate [02:56:08] [PASSED] Fail: overflowing fb with y-axis coordinate [02:56:08] [PASSED] Fail: overflowing fb with source width [02:56:08] [PASSED] Fail: overflowing fb with source height [02:56:08] ====== [PASSED] drm_test_framebuffer_check_src_coords ====== [02:56:08] [PASSED] drm_test_framebuffer_cleanup [02:56:08] =============== drm_test_framebuffer_create =============== [02:56:08] [PASSED] ABGR8888 normal sizes [02:56:08] [PASSED] ABGR8888 max sizes [02:56:08] [PASSED] ABGR8888 pitch greater than min required [02:56:08] [PASSED] ABGR8888 pitch less than min required [02:56:08] [PASSED] ABGR8888 Invalid width [02:56:08] [PASSED] ABGR8888 Invalid buffer handle [02:56:08] [PASSED] No pixel format [02:56:08] [PASSED] ABGR8888 Width 0 [02:56:08] [PASSED] ABGR8888 Height 0 [02:56:08] [PASSED] ABGR8888 Out of bound height * pitch combination [02:56:08] [PASSED] ABGR8888 Large buffer offset [02:56:08] [PASSED] ABGR8888 Buffer offset for inexistent plane [02:56:08] [PASSED] ABGR8888 Invalid flag [02:56:08] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers [02:56:08] [PASSED] ABGR8888 Valid buffer modifier [02:56:08] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE) [02:56:08] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS [02:56:08] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS [02:56:08] [PASSED] NV12 Normal sizes [02:56:08] [PASSED] NV12 Max sizes [02:56:08] [PASSED] NV12 Invalid pitch [02:56:08] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag [02:56:08] [PASSED] NV12 different modifier per-plane [02:56:08] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE [02:56:08] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS [02:56:08] [PASSED] NV12 Modifier for inexistent plane [02:56:08] [PASSED] NV12 Handle for inexistent plane [02:56:08] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS [02:56:08] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier [02:56:08] [PASSED] YVU420 Normal sizes [02:56:08] [PASSED] YVU420 Max sizes [02:56:08] [PASSED] YVU420 Invalid pitch [02:56:08] [PASSED] YVU420 Different pitches [02:56:08] [PASSED] YVU420 Different buffer offsets/pitches [02:56:08] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS [02:56:08] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS [02:56:08] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS [02:56:08] [PASSED] YVU420 Valid modifier [02:56:08] [PASSED] YVU420 Different modifiers per plane [02:56:08] [PASSED] YVU420 Modifier for inexistent plane [02:56:08] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR) [02:56:08] [PASSED] X0L2 Normal sizes [02:56:08] [PASSED] X0L2 Max sizes [02:56:08] [PASSED] X0L2 Invalid pitch [02:56:08] [PASSED] X0L2 Pitch greater than minimum required [02:56:08] [PASSED] X0L2 Handle for inexistent plane [02:56:08] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set [02:56:08] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set [02:56:08] [PASSED] X0L2 Valid modifier [02:56:08] [PASSED] X0L2 Modifier for inexistent plane [02:56:08] =========== [PASSED] drm_test_framebuffer_create =========== [02:56:08] [PASSED] drm_test_framebuffer_free [02:56:08] [PASSED] drm_test_framebuffer_init [02:56:08] [PASSED] drm_test_framebuffer_init_bad_format [02:56:08] [PASSED] drm_test_framebuffer_init_dev_mismatch [02:56:08] [PASSED] drm_test_framebuffer_lookup [02:56:08] [PASSED] drm_test_framebuffer_lookup_inexistent [02:56:08] [PASSED] drm_test_framebuffer_modifiers_not_supported [02:56:08] ================= [PASSED] drm_framebuffer ================= [02:56:08] ================ drm_gem_shmem (8 subtests) ================ [02:56:08] [PASSED] drm_gem_shmem_test_obj_create [02:56:08] [PASSED] drm_gem_shmem_test_obj_create_private [02:56:08] [PASSED] drm_gem_shmem_test_pin_pages [02:56:08] [PASSED] drm_gem_shmem_test_vmap [02:56:08] [PASSED] drm_gem_shmem_test_get_sg_table [02:56:08] [PASSED] drm_gem_shmem_test_get_pages_sgt [02:56:08] [PASSED] drm_gem_shmem_test_madvise [02:56:08] [PASSED] drm_gem_shmem_test_purge [02:56:08] ================== [PASSED] drm_gem_shmem ================== [02:56:08] === drm_atomic_helper_connector_hdmi_check (29 subtests) === [02:56:08] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode [02:56:08] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1 [02:56:08] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode [02:56:08] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1 [02:56:08] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode [02:56:08] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1 [02:56:08] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 ======= [02:56:08] [PASSED] Automatic [02:56:08] [PASSED] Full [02:56:08] [PASSED] Limited 16:235 [02:56:08] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 === [02:56:08] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed [02:56:08] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed [02:56:08] [PASSED] drm_test_check_disable_connector [02:56:08] [PASSED] drm_test_check_hdmi_funcs_reject_rate [02:56:08] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb [02:56:08] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420 [02:56:08] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422 [02:56:08] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420 [02:56:08] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420 [02:56:08] [PASSED] drm_test_check_output_bpc_crtc_mode_changed [02:56:08] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed [02:56:08] [PASSED] drm_test_check_output_bpc_dvi [02:56:08] [PASSED] drm_test_check_output_bpc_format_vic_1 [02:56:08] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only [02:56:08] [PASSED] drm_test_check_output_bpc_format_display_rgb_only [02:56:08] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only [02:56:08] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only [02:56:08] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc [02:56:08] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc [02:56:08] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc [02:56:08] ============ drm_test_check_hdmi_color_format ============= [02:56:08] [PASSED] AUTO -> RGB [02:56:08] [PASSED] YCBCR422 -> YUV422 [02:56:08] [PASSED] YCBCR420 -> YUV420 [02:56:08] [PASSED] YCBCR444 -> YUV444 [02:56:08] [PASSED] RGB -> RGB [02:56:08] ======== [PASSED] drm_test_check_hdmi_color_format ========= [02:56:08] ======== drm_test_check_hdmi_color_format_420_only ======== [02:56:08] [PASSED] RGB should fail [02:56:08] [PASSED] YUV444 should fail [02:56:08] [PASSED] YUV422 should fail [02:56:08] [PASSED] YUV420 should work [02:56:08] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ==== [02:56:08] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ====== [02:56:08] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ==== [02:56:08] [PASSED] drm_test_check_broadcast_rgb_value [02:56:08] [PASSED] drm_test_check_bpc_8_value [02:56:08] [PASSED] drm_test_check_bpc_10_value [02:56:08] [PASSED] drm_test_check_bpc_12_value [02:56:08] [PASSED] drm_test_check_format_value [02:56:08] [PASSED] drm_test_check_tmds_char_value [02:56:08] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ====== [02:56:08] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) = [02:56:08] [PASSED] drm_test_check_mode_valid [02:56:08] [PASSED] drm_test_check_mode_valid_reject [02:56:08] [PASSED] drm_test_check_mode_valid_reject_rate [02:56:08] [PASSED] drm_test_check_mode_valid_reject_max_clock [02:56:08] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock [02:56:08] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector [02:56:08] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb [02:56:08] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid === [02:56:08] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) = [02:56:08] [PASSED] drm_test_check_infoframes [02:56:08] [PASSED] drm_test_check_reject_avi_infoframe [02:56:08] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8 [02:56:08] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10 [02:56:08] [PASSED] drm_test_check_reject_audio_infoframe [02:56:08] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes === [02:56:08] ================= drm_managed (2 subtests) ================= [02:56:08] [PASSED] drm_test_managed_release_action [02:56:08] [PASSED] drm_test_managed_run_action [02:56:08] =================== [PASSED] drm_managed =================== [02:56:08] =================== drm_mm (6 subtests) ==================== [02:56:08] [PASSED] drm_test_mm_init [02:56:08] [PASSED] drm_test_mm_debug [02:56:08] [PASSED] drm_test_mm_align32 [02:56:08] [PASSED] drm_test_mm_align64 [02:56:08] [PASSED] drm_test_mm_lowest [02:56:08] [PASSED] drm_test_mm_highest [02:56:08] ===================== [PASSED] drm_mm ====================== [02:56:08] ============= drm_modes_analog_tv (5 subtests) ============= [02:56:08] [PASSED] drm_test_modes_analog_tv_mono_576i [02:56:08] [PASSED] drm_test_modes_analog_tv_ntsc_480i [02:56:08] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined [02:56:08] [PASSED] drm_test_modes_analog_tv_pal_576i [02:56:08] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined [02:56:08] =============== [PASSED] drm_modes_analog_tv =============== [02:56:08] ============== drm_plane_helper (2 subtests) =============== [02:56:08] =============== drm_test_check_plane_state ================ [02:56:08] [PASSED] clipping_simple [02:56:08] [PASSED] clipping_rotate_reflect [02:56:08] [PASSED] positioning_simple [02:56:08] [PASSED] upscaling [02:56:08] [PASSED] downscaling [02:56:08] [PASSED] rounding1 [02:56:08] [PASSED] rounding2 [02:56:08] [PASSED] rounding3 [02:56:08] [PASSED] rounding4 [02:56:08] =========== [PASSED] drm_test_check_plane_state ============ [02:56:08] =========== drm_test_check_invalid_plane_state ============ [02:56:08] [PASSED] positioning_invalid [02:56:08] [PASSED] upscaling_invalid [02:56:08] [PASSED] downscaling_invalid [02:56:08] ======= [PASSED] drm_test_check_invalid_plane_state ======== [02:56:08] ================ [PASSED] drm_plane_helper ================= [02:56:08] ====== drm_connector_helper_tv_get_modes (1 subtest) ======= [02:56:08] ====== drm_test_connector_helper_tv_get_modes_check ======= [02:56:08] [PASSED] None [02:56:08] [PASSED] PAL [02:56:08] [PASSED] NTSC [02:56:08] [PASSED] Both, NTSC Default [02:56:08] [PASSED] Both, PAL Default [02:56:08] [PASSED] Both, NTSC Default, with PAL on command-line [02:56:08] [PASSED] Both, PAL Default, with NTSC on command-line [02:56:08] == [PASSED] drm_test_connector_helper_tv_get_modes_check === [02:56:08] ======== [PASSED] drm_connector_helper_tv_get_modes ======== [02:56:08] ================== drm_rect (9 subtests) =================== [02:56:08] [PASSED] drm_test_rect_clip_scaled_div_by_zero [02:56:08] [PASSED] drm_test_rect_clip_scaled_not_clipped [02:56:08] [PASSED] drm_test_rect_clip_scaled_clipped [02:56:08] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned [02:56:08] ================= drm_test_rect_intersect ================= [02:56:08] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0 [02:56:08] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1 [02:56:08] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0 [02:56:08] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1 [02:56:08] [PASSED] right x left: 2x1+0+0 x 3x1+1+0 [02:56:08] [PASSED] left x right: 3x1+1+0 x 2x1+0+0 [02:56:08] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1 [02:56:08] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0 [02:56:08] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1 [02:56:08] [PASSED] touching side: 1x1+0+0 x 1x1+1+0 [02:56:08] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0 [02:56:08] [PASSED] inside another: 2x2+0+0 x 1x1+1+1 [02:56:08] [PASSED] far away: 1x1+0+0 x 1x1+3+6 [02:56:08] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10 [02:56:08] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10 [02:56:08] ============= [PASSED] drm_test_rect_intersect ============= [02:56:08] ================ drm_test_rect_calc_hscale ================ [02:56:08] [PASSED] normal use [02:56:08] [PASSED] out of max range [02:56:08] [PASSED] out of min range [02:56:08] [PASSED] zero dst [02:56:08] [PASSED] negative src [02:56:08] [PASSED] negative dst [02:56:08] ============ [PASSED] drm_test_rect_calc_hscale ============ [02:56:08] ================ drm_test_rect_calc_vscale ================ [02:56:08] [PASSED] normal use [02:56:08] [PASSED] out of max range [02:56:08] [PASSED] out of min range [02:56:08] [PASSED] zero dst [02:56:08] [PASSED] negative src [02:56:08] [PASSED] negative dst [02:56:08] ============ [PASSED] drm_test_rect_calc_vscale ============ [02:56:08] ================== drm_test_rect_rotate =================== [02:56:08] [PASSED] reflect-x [02:56:08] [PASSED] reflect-y [02:56:08] [PASSED] rotate-0 [02:56:08] [PASSED] rotate-90 [02:56:08] [PASSED] rotate-180 [02:56:08] [PASSED] rotate-270 [02:56:08] ============== [PASSED] drm_test_rect_rotate =============== [02:56:08] ================ drm_test_rect_rotate_inv ================= [02:56:08] [PASSED] reflect-x [02:56:08] [PASSED] reflect-y [02:56:08] [PASSED] rotate-0 [02:56:08] [PASSED] rotate-90 [02:56:08] [PASSED] rotate-180 [02:56:08] [PASSED] rotate-270 [02:56:08] ============ [PASSED] drm_test_rect_rotate_inv ============= [02:56:08] ==================== [PASSED] drm_rect ===================== [02:56:08] ============ drm_sysfb_modeset_test (1 subtest) ============ [02:56:08] ============ drm_test_sysfb_build_fourcc_list ============= [02:56:08] [PASSED] no native formats [02:56:08] [PASSED] XRGB8888 as native format [02:56:08] [PASSED] remove duplicates [02:56:08] [PASSED] convert alpha formats [02:56:08] [PASSED] random formats [02:56:08] ======== [PASSED] drm_test_sysfb_build_fourcc_list ========= [02:56:08] ============= [PASSED] drm_sysfb_modeset_test ============== [02:56:08] ================== drm_fixp (2 subtests) =================== [02:56:08] [PASSED] drm_test_int2fixp [02:56:08] [PASSED] drm_test_sm2fixp [02:56:08] ==================== [PASSED] drm_fixp ===================== [02:56:08] ============================================================ [02:56:08] Testing complete. Ran 639 tests: passed: 639 [02:56:08] Elapsed time: 26.697s total, 1.841s configuring, 24.686s building, 0.150s running + /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig [02:56:08] Configuring KUnit Kernel ... Regenerating .config ... Populating config with: $ make ARCH=um O=.kunit olddefconfig [02:56:10] Building KUnit Kernel ... Populating config with: $ make ARCH=um O=.kunit olddefconfig Building with: $ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48 [02:56:20] Starting KUnit Kernel (1/1)... [02:56:20] ============================================================ Running tests with: $ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt [02:56:20] ================= ttm_device (5 subtests) ================== [02:56:20] [PASSED] ttm_device_init_basic [02:56:20] [PASSED] ttm_device_init_multiple [02:56:20] [PASSED] ttm_device_fini_basic [02:56:20] [PASSED] ttm_device_init_no_vma_man [02:56:20] ================== ttm_device_init_pools ================== [02:56:20] [PASSED] No DMA allocations, no DMA32 required [02:56:20] [PASSED] DMA allocations, DMA32 required [02:56:20] [PASSED] No DMA allocations, DMA32 required [02:56:20] [PASSED] DMA allocations, no DMA32 required [02:56:20] ============== [PASSED] ttm_device_init_pools ============== [02:56:20] =================== [PASSED] ttm_device ==================== [02:56:20] ================== ttm_pool (8 subtests) =================== [02:56:20] ================== ttm_pool_alloc_basic =================== [02:56:20] [PASSED] One page [02:56:20] [PASSED] More than one page [02:56:20] [PASSED] Above the allocation limit [02:56:20] [PASSED] One page, with coherent DMA mappings enabled [02:56:20] [PASSED] Above the allocation limit, with coherent DMA mappings enabled [02:56:20] ============== [PASSED] ttm_pool_alloc_basic =============== [02:56:20] ============== ttm_pool_alloc_basic_dma_addr ============== [02:56:20] [PASSED] One page [02:56:20] [PASSED] More than one page [02:56:20] [PASSED] Above the allocation limit [02:56:20] [PASSED] One page, with coherent DMA mappings enabled [02:56:20] [PASSED] Above the allocation limit, with coherent DMA mappings enabled [02:56:20] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ========== [02:56:20] [PASSED] ttm_pool_alloc_order_caching_match [02:56:20] [PASSED] ttm_pool_alloc_caching_mismatch [02:56:20] [PASSED] ttm_pool_alloc_order_mismatch [02:56:20] [PASSED] ttm_pool_free_dma_alloc [02:56:20] [PASSED] ttm_pool_free_no_dma_alloc [02:56:20] [PASSED] ttm_pool_fini_basic [02:56:20] ==================== [PASSED] ttm_pool ===================== [02:56:20] ================ ttm_resource (8 subtests) ================= [02:56:20] ================= ttm_resource_init_basic ================= [02:56:20] [PASSED] Init resource in TTM_PL_SYSTEM [02:56:20] [PASSED] Init resource in TTM_PL_VRAM [02:56:20] [PASSED] Init resource in a private placement [02:56:20] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags [02:56:20] ============= [PASSED] ttm_resource_init_basic ============= [02:56:20] [PASSED] ttm_resource_init_pinned [02:56:20] [PASSED] ttm_resource_fini_basic [02:56:20] [PASSED] ttm_resource_manager_init_basic [02:56:20] [PASSED] ttm_resource_manager_usage_basic [02:56:20] [PASSED] ttm_resource_manager_set_used_basic [02:56:20] [PASSED] ttm_sys_man_alloc_basic [02:56:20] [PASSED] ttm_sys_man_free_basic [02:56:20] ================== [PASSED] ttm_resource =================== [02:56:20] =================== ttm_tt (15 subtests) =================== [02:56:20] ==================== ttm_tt_init_basic ==================== [02:56:20] [PASSED] Page-aligned size [02:56:20] [PASSED] Extra pages requested [02:56:20] ================ [PASSED] ttm_tt_init_basic ================ [02:56:20] [PASSED] ttm_tt_init_misaligned [02:56:20] [PASSED] ttm_tt_fini_basic [02:56:20] [PASSED] ttm_tt_fini_sg [02:56:20] [PASSED] ttm_tt_fini_shmem [02:56:20] [PASSED] ttm_tt_create_basic [02:56:20] [PASSED] ttm_tt_create_invalid_bo_type [02:56:20] [PASSED] ttm_tt_create_ttm_exists [02:56:20] [PASSED] ttm_tt_create_failed [02:56:20] [PASSED] ttm_tt_destroy_basic [02:56:20] [PASSED] ttm_tt_populate_null_ttm [02:56:20] [PASSED] ttm_tt_populate_populated_ttm [02:56:20] [PASSED] ttm_tt_unpopulate_basic [02:56:20] [PASSED] ttm_tt_unpopulate_empty_ttm [02:56:20] [PASSED] ttm_tt_swapin_basic [02:56:20] ===================== [PASSED] ttm_tt ====================== [02:56:20] =================== ttm_bo (14 subtests) =================== [02:56:20] =========== ttm_bo_reserve_optimistic_no_ticket =========== [02:56:20] [PASSED] Cannot be interrupted and sleeps [02:56:20] [PASSED] Cannot be interrupted, locks straight away [02:56:20] [PASSED] Can be interrupted, sleeps [02:56:20] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket ======= [02:56:20] [PASSED] ttm_bo_reserve_locked_no_sleep [02:56:20] [PASSED] ttm_bo_reserve_no_wait_ticket [02:56:20] [PASSED] ttm_bo_reserve_double_resv [02:56:20] [PASSED] ttm_bo_reserve_interrupted [02:56:20] [PASSED] ttm_bo_reserve_deadlock [02:56:20] [PASSED] ttm_bo_unreserve_basic [02:56:20] [PASSED] ttm_bo_unreserve_pinned [02:56:20] [PASSED] ttm_bo_unreserve_bulk [02:56:20] [PASSED] ttm_bo_fini_basic [02:56:20] [PASSED] ttm_bo_fini_shared_resv [02:56:20] [PASSED] ttm_bo_pin_basic [02:56:20] [PASSED] ttm_bo_pin_unpin_resource [02:56:20] [PASSED] ttm_bo_multiple_pin_one_unpin [02:56:20] ===================== [PASSED] ttm_bo ====================== [02:56:20] ============== ttm_bo_validate (22 subtests) =============== [02:56:20] ============== ttm_bo_init_reserved_sys_man =============== [02:56:20] [PASSED] Buffer object for userspace [02:56:20] [PASSED] Kernel buffer object [02:56:20] [PASSED] Shared buffer object [02:56:20] ========== [PASSED] ttm_bo_init_reserved_sys_man =========== [02:56:20] ============== ttm_bo_init_reserved_mock_man ============== [02:56:20] [PASSED] Buffer object for userspace [02:56:20] [PASSED] Kernel buffer object [02:56:20] [PASSED] Shared buffer object [02:56:20] ========== [PASSED] ttm_bo_init_reserved_mock_man ========== [02:56:20] [PASSED] ttm_bo_init_reserved_resv [02:56:20] ================== ttm_bo_validate_basic ================== [02:56:20] [PASSED] Buffer object for userspace [02:56:20] [PASSED] Kernel buffer object [02:56:20] [PASSED] Shared buffer object [02:56:20] ============== [PASSED] ttm_bo_validate_basic ============== [02:56:20] [PASSED] ttm_bo_validate_invalid_placement [02:56:20] ============= ttm_bo_validate_same_placement ============== [02:56:20] [PASSED] System manager [02:56:20] [PASSED] VRAM manager [02:56:20] ========= [PASSED] ttm_bo_validate_same_placement ========== [02:56:20] [PASSED] ttm_bo_validate_failed_alloc [02:56:20] [PASSED] ttm_bo_validate_pinned [02:56:20] [PASSED] ttm_bo_validate_busy_placement [02:56:20] ================ ttm_bo_validate_multihop ================= [02:56:20] [PASSED] Buffer object for userspace [02:56:20] [PASSED] Kernel buffer object [02:56:20] [PASSED] Shared buffer object [02:56:20] ============ [PASSED] ttm_bo_validate_multihop ============= [02:56:20] ========== ttm_bo_validate_no_placement_signaled ========== [02:56:20] [PASSED] Buffer object in system domain, no page vector [02:56:20] [PASSED] Buffer object in system domain with an existing page vector [02:56:20] ====== [PASSED] ttm_bo_validate_no_placement_signaled ====== [02:56:20] ======== ttm_bo_validate_no_placement_not_signaled ======== [02:56:20] [PASSED] Buffer object for userspace [02:56:20] [PASSED] Kernel buffer object [02:56:20] [PASSED] Shared buffer object [02:56:20] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ==== [02:56:20] [PASSED] ttm_bo_validate_move_fence_signaled [02:56:20] ========= ttm_bo_validate_move_fence_not_signaled ========= [02:56:20] [PASSED] Waits for GPU [02:56:20] [PASSED] Tries to lock straight away [02:56:20] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled ===== [02:56:20] [PASSED] ttm_bo_validate_swapout [02:56:20] [PASSED] ttm_bo_validate_happy_evict [02:56:20] [PASSED] ttm_bo_validate_all_pinned_evict [02:56:20] [PASSED] ttm_bo_validate_allowed_only_evict [02:56:20] [PASSED] ttm_bo_validate_deleted_evict [02:56:20] [PASSED] ttm_bo_validate_busy_domain_evict [02:56:20] [PASSED] ttm_bo_validate_evict_gutting [02:56:20] [PASSED] ttm_bo_validate_recrusive_evict [02:56:20] ================= [PASSED] ttm_bo_validate ================= [02:56:20] ============================================================ [02:56:20] Testing complete. Ran 102 tests: passed: 102 [02:56:20] Elapsed time: 11.958s total, 1.768s configuring, 9.976s building, 0.180s running + cleanup ++ stat -c %u:%g /kernel + chown -R 1003:1003 /kernel ^ permalink raw reply [flat|nested] 6+ messages in thread
* ✓ Xe.CI.BAT: success for drm/xe: Flush L2 asynchronously in xe_bo_trigger_rebind() 2026-07-09 2:49 [PATCH] drm/xe: Flush L2 asynchronously in xe_bo_trigger_rebind() Matthew Brost 2026-07-09 2:56 ` ✓ CI.KUnit: success for " Patchwork @ 2026-07-09 3:31 ` Patchwork 2026-07-09 9:24 ` ✗ Xe.CI.FULL: failure " Patchwork 2026-07-09 9:41 ` [PATCH] " Thomas Hellström 3 siblings, 0 replies; 6+ messages in thread From: Patchwork @ 2026-07-09 3:31 UTC (permalink / raw) To: Matthew Brost; +Cc: intel-xe [-- Attachment #1: Type: text/plain, Size: 971 bytes --] == Series Details == Series: drm/xe: Flush L2 asynchronously in xe_bo_trigger_rebind() URL : https://patchwork.freedesktop.org/series/170046/ State : success == Summary == CI Bug Log - changes from xe-5371-9529d603c7d29d245f9fbe23668034657c5a4ab8_BAT -> xe-pw-170046v1_BAT ==================================================== Summary ------- **SUCCESS** No regressions found. Participating hosts (13 -> 13) ------------------------------ No changes in participating hosts Changes ------- No changes found Build changes ------------- * Linux: xe-5371-9529d603c7d29d245f9fbe23668034657c5a4ab8 -> xe-pw-170046v1 IGT_8994: 59469572ae481848d6bd469242aef7c5333b39ad @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git xe-5371-9529d603c7d29d245f9fbe23668034657c5a4ab8: 9529d603c7d29d245f9fbe23668034657c5a4ab8 xe-pw-170046v1: 170046v1 == Logs == For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170046v1/index.html [-- Attachment #2: Type: text/html, Size: 1519 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* ✗ Xe.CI.FULL: failure for drm/xe: Flush L2 asynchronously in xe_bo_trigger_rebind() 2026-07-09 2:49 [PATCH] drm/xe: Flush L2 asynchronously in xe_bo_trigger_rebind() Matthew Brost 2026-07-09 2:56 ` ✓ CI.KUnit: success for " Patchwork 2026-07-09 3:31 ` ✓ Xe.CI.BAT: " Patchwork @ 2026-07-09 9:24 ` Patchwork 2026-07-09 9:41 ` [PATCH] " Thomas Hellström 3 siblings, 0 replies; 6+ messages in thread From: Patchwork @ 2026-07-09 9:24 UTC (permalink / raw) To: Matthew Brost; +Cc: intel-xe [-- Attachment #1: Type: text/plain, Size: 388 bytes --] == Series Details == Series: drm/xe: Flush L2 asynchronously in xe_bo_trigger_rebind() URL : https://patchwork.freedesktop.org/series/170046/ State : failure == Summary == ERROR: The runconfig 'xe-5371-9529d603c7d29d245f9fbe23668034657c5a4ab8_FULL' does not exist in the database == Logs == For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-170046v1/index.html [-- Attachment #2: Type: text/html, Size: 953 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] drm/xe: Flush L2 asynchronously in xe_bo_trigger_rebind() 2026-07-09 2:49 [PATCH] drm/xe: Flush L2 asynchronously in xe_bo_trigger_rebind() Matthew Brost ` (2 preceding siblings ...) 2026-07-09 9:24 ` ✗ Xe.CI.FULL: failure " Patchwork @ 2026-07-09 9:41 ` Thomas Hellström 2026-07-09 18:43 ` Matthew Brost 3 siblings, 1 reply; 6+ messages in thread From: Thomas Hellström @ 2026-07-09 9:41 UTC (permalink / raw) To: Matthew Brost, intel-xe; +Cc: Tejas Upadhyay On Wed, 2026-07-08 at 19:49 -0700, Matthew Brost wrote: > On L2-flush-optimized HW with a dma-resv (non-fault) VM, evicting a > BO > only needs to flush the L2 cache before the migration copy runs; the > mappings themselves are torn down and rebuilt lazily via > drm_gpuvm_bo_evict() and a subsequent rebind. Today this flush is > done > by waiting for the BO to go idle and then issuing a synchronous TLB > invalidation per mapping VMA from inside xe_bo_trigger_rebind(). Both > the idle wait and the synchronous invalidation stall the calling > thread > while holding the BO dma-resv lock, serializing the move behind all > in-flight GPU work on the BO. > > Replace this with an asynchronous flush. Add > xe_vm_flush_vm_bo_tlb_async() > which, for each VMA mapping the BO on each present tile, queues a TLB > invalidation job on the tile migrate (kernel) exec queue. The jobs > depend > on the BO's in-flight GPU work, captured once as a singleton over > DMA_RESV_USAGE_BOOKKEEP, so the flush only fires once the GPU is done > with > the current mapping. Each job's completion fence is installed into > the > BO's dma-resv as a DMA_RESV_USAGE_KERNEL fence, so the migration copy > - > which waits on the resv - waits on the flush without stalling this > thread. > > No PTEs are zapped and vma->tile_invalidated is left untouched: the > mapping stays valid until the lazy rebind, and the only work > performed > here is the L2 flush. On any failure the caller falls back to the > existing blocking wait-idle plus xe_vm_invalidate_vma() path. > > Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com> > Cc: Tejas Upadhyay <tejas.upadhyay@intel.com> > Assisted-by: GitHub_Copilot:claude-opus-4.8 > Signed-off-by: Matthew Brost <matthew.brost@intel.com> Is there possibly a way to do this using a GPU command now that we're making it async anyway? > --- > drivers/gpu/drm/xe/xe_bo.c | 12 ++++ > drivers/gpu/drm/xe/xe_vm.c | 125 > +++++++++++++++++++++++++++++++++++++ > drivers/gpu/drm/xe/xe_vm.h | 5 ++ > 3 files changed, 142 insertions(+) > > diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c > index 85e6d9a0f575..a08b983cb0b1 100644 > --- a/drivers/gpu/drm/xe/xe_bo.c > +++ b/drivers/gpu/drm/xe/xe_bo.c > @@ -686,6 +686,18 @@ static int xe_bo_trigger_rebind(struct xe_device > *xe, struct xe_bo *bo, > */ > if (!xe_device_is_l2_flush_optimized(xe)) > continue; > + > + /* > + * On L2-flush-optimized HW the only reason > to touch the > + * mappings here is to flush L2 via a TLB > invalidation. > + * Do it asynchronously: queue TLB- > invalidation jobs that > + * wait on the BO's in-flight GPU work and > install their > + * completion fences into the BO's kernel > dma-resv slots, > + * so the migration waits on the flush > without stalling > + * this thread. Fall back to the blocking > path on failure. > + */ This more or less echoes the xe_vm_flush_vm_bo_tlb_async() kerneldoc. Perhaps /* Attempt to flush L2 async, fallback to sync flush on failure */? > + if (!xe_vm_flush_vm_bo_tlb_async(vm, bo, > vm_bo)) > + continue; > } > > if (!idle) { > diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c > index 73ac031ffb04..4557a8a4d270 100644 > --- a/drivers/gpu/drm/xe/xe_vm.c > +++ b/drivers/gpu/drm/xe/xe_vm.c > @@ -39,6 +39,7 @@ > #include "xe_sync.h" > #include "xe_tile.h" > #include "xe_tlb_inval.h" > +#include "xe_tlb_inval_job.h" > #include "xe_trace_bo.h" > #include "xe_vm_madvise.h" > #include "xe_wa.h" > @@ -4401,6 +4402,130 @@ int xe_vm_invalidate_vma(struct xe_vma *vma) > return ret; > } > > +/* > + * xe_vma_tlb_flush_client - Queue an async TLB flush for one VMA on > one client > + * > + * Create and push a TLB invalidation job on the tile migrate > (kernel) exec > + * queue covering @vma's range, depending on @dep (the BO's in- > flight GPU work) > + * so the flush only fires once the GPU is done with the current > mapping. The > + * job's completion fence is installed into @resv as a KERNEL fence > so the > + * subsequent migration waits on the flush. No PTEs are zapped; this > only > + * flushes L2 via the TLB invalidation. > + */ > +static int xe_vma_tlb_flush_client(struct xe_vm *vm, struct xe_vma > *vma, > + struct xe_tile *tile, struct > xe_gt *gt, > + struct dma_resv *resv, struct > dma_fence *dep, > + int type) > +{ > + struct xe_exec_queue *q = xe_migrate_exec_queue(tile- > >migrate); > + struct xe_tlb_inval_job *job; > + struct dma_fence *fence; > + int err; > + > + job = xe_tlb_inval_job_create(q, >->tlb_inval, > + q- > >tlb_inval[type].dep_scheduler, vm, > + xe_vma_start(vma), > xe_vma_end(vma), type); > + if (IS_ERR(job)) > + return PTR_ERR(job); > + > + err = xe_tlb_inval_job_alloc_dep(job); > + if (err) > + goto out_put; > + > + err = dma_resv_reserve_fences(resv, 1); > + if (err) > + goto out_put; > + > + /* Cannot fail; consumes a ref on @dep and returns a > referenced fence. */ > + fence = xe_tlb_inval_job_push(job, tile->migrate, dep); > + dma_resv_add_fence(resv, fence, DMA_RESV_USAGE_KERNEL); > + dma_fence_put(fence); > + > +out_put: > + /* Drop the creation reference (destroys the job if it was > not pushed). */ > + xe_tlb_inval_job_put(job); > + return err; > +} > + > +/** > + * xe_vm_flush_vm_bo_tlb_async - Asynchronously flush TLBs for a > vm_bo's mappings > + * @vm: The VM @vm_bo belongs to > + * @bo: The buffer object being moved > + * @vm_bo: The gpuvm_bo linking @bo into @vm > + * > + * On L2-flush-optimized HW a BO move only needs to flush L2 (via a > TLB > + * invalidation) for the BO's live mappings; the mappings themselves > are torn > + * down and rebuilt lazily via the eviction/rebind path, so no PTEs > need to be > + * zapped here. Rather than blocking the caller on a synchronous > invalidation, > + * issue a TLB invalidation job per VMA per TLB-invalidation client > (per present > + * tile, primary and media GT). Each job waits on the BO's in-flight > GPU work > + * (all dma-resv usages) and its completion fence is installed into > the BO's > + * dma-resv KERNEL slots, so the following migration waits on the > flush without > + * stalling this thread. > + * > + * The caller must hold the BO's dma-resv lock and @vm must not be > in fault > + * mode. > + * > + * Return: 0 on success, negative error code on failure. On failure > the caller > + * should fall back to the blocking xe_vm_invalidate_vma() path; any > jobs > + * already queued install harmless extra flush fences. > + */ > +int xe_vm_flush_vm_bo_tlb_async(struct xe_vm *vm, struct xe_bo *bo, > + struct drm_gpuvm_bo *vm_bo) > +{ > + struct xe_device *xe = vm->xe; > + struct dma_resv *resv = bo->ttm.base.resv; > + struct dma_fence *dep = NULL; > + struct drm_gpuva *gpuva; > + int err; > + > + dma_resv_assert_held(resv); > + xe_assert(xe, !xe_vm_in_fault_mode(vm)); > + > + /* > + * Single fence capturing all in-flight GPU work on the BO; > the TLB > + * invalidation jobs depend on it so the flush fires only > once the GPU > + * is done with the current mapping. > + */ > + err = dma_resv_get_singleton(resv, DMA_RESV_USAGE_BOOKKEEP, > &dep); > + if (err) > + return err; > + if (!dep) > + dep = dma_fence_get_stub(); > + > + drm_gpuvm_bo_for_each_va(gpuva, vm_bo) { > + struct xe_vma *vma = gpuva_to_vma(gpuva); > + struct xe_tile *tile; > + u8 id; > + > + if (xe_vma_is_null(vma) || > xe_vma_is_cpu_addr_mirror(vma)) > + continue; > + > + for_each_tile(tile, xe, id) { > + if (!(vma->tile_present & BIT(id))) > + continue; > + > + err = xe_vma_tlb_flush_client(vm, vma, tile, > + tile- > >primary_gt, resv, dep, > + > XE_EXEC_QUEUE_TLB_INVAL_PRIMARY_GT); > + if (err) > + goto out; > + > + if (tile->media_gt) { > + err = xe_vma_tlb_flush_client(vm, > vma, tile, > + tile- > >media_gt, resv, dep, > + > XE_EXEC_QUEUE_TLB_INVAL_MEDIA_GT); > + if (err) > + goto out; > + } > + } > + } > + > +out: > + dma_fence_put(dep); > + return err; > +} > + > int xe_vm_validate_protected(struct xe_vm *vm) > { > struct drm_gpuva *gpuva; > diff --git a/drivers/gpu/drm/xe/xe_vm.h b/drivers/gpu/drm/xe/xe_vm.h > index c5b900f38ded..dd5b070eaede 100644 > --- a/drivers/gpu/drm/xe/xe_vm.h > +++ b/drivers/gpu/drm/xe/xe_vm.h > @@ -26,6 +26,8 @@ struct ttm_buffer_object; > > struct dma_fence; > > +struct xe_bo; > +struct drm_gpuvm_bo; > struct xe_exec_queue; > struct xe_file; > struct xe_pagefault; > @@ -254,6 +256,9 @@ int xe_vm_invalidate_vma(struct xe_vma *vma); > > int xe_vm_invalidate_vma_submit(struct xe_vma *vma, struct > xe_tlb_inval_batch *batch); > > +int xe_vm_flush_vm_bo_tlb_async(struct xe_vm *vm, struct xe_bo *bo, > + struct drm_gpuvm_bo *vm_bo); > + > int xe_vm_validate_protected(struct xe_vm *vm); > > static inline void xe_vm_queue_rebind_worker(struct xe_vm *vm) Otherwise LGTM. /Thomas ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] drm/xe: Flush L2 asynchronously in xe_bo_trigger_rebind() 2026-07-09 9:41 ` [PATCH] " Thomas Hellström @ 2026-07-09 18:43 ` Matthew Brost 0 siblings, 0 replies; 6+ messages in thread From: Matthew Brost @ 2026-07-09 18:43 UTC (permalink / raw) To: Thomas Hellström; +Cc: intel-xe, Tejas Upadhyay On Thu, Jul 09, 2026 at 11:41:00AM +0200, Thomas Hellström wrote: > On Wed, 2026-07-08 at 19:49 -0700, Matthew Brost wrote: > > On L2-flush-optimized HW with a dma-resv (non-fault) VM, evicting a > > BO > > only needs to flush the L2 cache before the migration copy runs; the > > mappings themselves are torn down and rebuilt lazily via > > drm_gpuvm_bo_evict() and a subsequent rebind. Today this flush is > > done > > by waiting for the BO to go idle and then issuing a synchronous TLB > > invalidation per mapping VMA from inside xe_bo_trigger_rebind(). Both > > the idle wait and the synchronous invalidation stall the calling > > thread > > while holding the BO dma-resv lock, serializing the move behind all > > in-flight GPU work on the BO. > > > > Replace this with an asynchronous flush. Add > > xe_vm_flush_vm_bo_tlb_async() > > which, for each VMA mapping the BO on each present tile, queues a TLB > > invalidation job on the tile migrate (kernel) exec queue. The jobs > > depend > > on the BO's in-flight GPU work, captured once as a singleton over > > DMA_RESV_USAGE_BOOKKEEP, so the flush only fires once the GPU is done > > with > > the current mapping. Each job's completion fence is installed into > > the > > BO's dma-resv as a DMA_RESV_USAGE_KERNEL fence, so the migration copy > > - > > which waits on the resv - waits on the flush without stalling this > > thread. > > > > No PTEs are zapped and vma->tile_invalidated is left untouched: the > > mapping stays valid until the lazy rebind, and the only work > > performed > > here is the L2 flush. On any failure the caller falls back to the > > existing blocking wait-idle plus xe_vm_invalidate_vma() path. > > > > Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com> > > Cc: Tejas Upadhyay <tejas.upadhyay@intel.com> > > Assisted-by: GitHub_Copilot:claude-opus-4.8 > > Signed-off-by: Matthew Brost <matthew.brost@intel.com> > > Is there possibly a way to do this using a GPU command now that we're > making it async anyway? > I think there are ring instructions that can issue various types of TLB invalidations, but offhand I'm not sure how those differ from the GAM port invalidations (the GuC more or less programs the GAM port on the KMD's behalf). We could look into this, but if we take this approach, I'd layer it on top of the functions introduced in this patch. I'm also somewhat skeptical that it would perform particularly well if a GPU context switch (which is relatively expensive) is required to perform the TLB invalidation and cache flush. Or are you suggesting that, if we know a copy job will be executed as part of `xe_bo_move()`, the first copy job could issue the TLB invalidation and cache flush, allowing us to skip that step here? That could work, but I don't think `xe_bo_trigger_rebind()` has that information available yet. It seems like something worth exploring in a follow-up patch? > > --- > > drivers/gpu/drm/xe/xe_bo.c | 12 ++++ > > drivers/gpu/drm/xe/xe_vm.c | 125 > > +++++++++++++++++++++++++++++++++++++ > > drivers/gpu/drm/xe/xe_vm.h | 5 ++ > > 3 files changed, 142 insertions(+) > > > > diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c > > index 85e6d9a0f575..a08b983cb0b1 100644 > > --- a/drivers/gpu/drm/xe/xe_bo.c > > +++ b/drivers/gpu/drm/xe/xe_bo.c > > @@ -686,6 +686,18 @@ static int xe_bo_trigger_rebind(struct xe_device > > *xe, struct xe_bo *bo, > > */ > > if (!xe_device_is_l2_flush_optimized(xe)) > > continue; > > + > > + /* > > + * On L2-flush-optimized HW the only reason > > to touch the > > + * mappings here is to flush L2 via a TLB > > invalidation. > > + * Do it asynchronously: queue TLB- > > invalidation jobs that > > + * wait on the BO's in-flight GPU work and > > install their > > + * completion fences into the BO's kernel > > dma-resv slots, > > + * so the migration waits on the flush > > without stalling > > + * this thread. Fall back to the blocking > > path on failure. > > + */ > > This more or less echoes the xe_vm_flush_vm_bo_tlb_async() kerneldoc. > Perhaps /* Attempt to flush L2 async, fallback to sync flush on failure > */? Yes, let me clean this up. > > > + if (!xe_vm_flush_vm_bo_tlb_async(vm, bo, > > vm_bo)) > > + continue; > > } > > > > if (!idle) { > > diff --git a/drivers/gpu/drm/xe/xe_vm.c b/drivers/gpu/drm/xe/xe_vm.c > > index 73ac031ffb04..4557a8a4d270 100644 > > --- a/drivers/gpu/drm/xe/xe_vm.c > > +++ b/drivers/gpu/drm/xe/xe_vm.c > > @@ -39,6 +39,7 @@ > > #include "xe_sync.h" > > #include "xe_tile.h" > > #include "xe_tlb_inval.h" > > +#include "xe_tlb_inval_job.h" > > #include "xe_trace_bo.h" > > #include "xe_vm_madvise.h" > > #include "xe_wa.h" > > @@ -4401,6 +4402,130 @@ int xe_vm_invalidate_vma(struct xe_vma *vma) > > return ret; > > } > > > > +/* > > + * xe_vma_tlb_flush_client - Queue an async TLB flush for one VMA on > > one client > > + * > > + * Create and push a TLB invalidation job on the tile migrate > > (kernel) exec > > + * queue covering @vma's range, depending on @dep (the BO's in- > > flight GPU work) > > + * so the flush only fires once the GPU is done with the current > > mapping. The > > + * job's completion fence is installed into @resv as a KERNEL fence > > so the > > + * subsequent migration waits on the flush. No PTEs are zapped; this > > only > > + * flushes L2 via the TLB invalidation. > > + */ > > +static int xe_vma_tlb_flush_client(struct xe_vm *vm, struct xe_vma > > *vma, > > + struct xe_tile *tile, struct > > xe_gt *gt, > > + struct dma_resv *resv, struct > > dma_fence *dep, > > + int type) > > +{ > > + struct xe_exec_queue *q = xe_migrate_exec_queue(tile- > > >migrate); > > + struct xe_tlb_inval_job *job; > > + struct dma_fence *fence; > > + int err; > > + > > + job = xe_tlb_inval_job_create(q, >->tlb_inval, > > + q- > > >tlb_inval[type].dep_scheduler, vm, > > + xe_vma_start(vma), > > xe_vma_end(vma), type); > > + if (IS_ERR(job)) > > + return PTR_ERR(job); > > + > > + err = xe_tlb_inval_job_alloc_dep(job); > > + if (err) > > + goto out_put; > > + > > + err = dma_resv_reserve_fences(resv, 1); > > + if (err) > > + goto out_put; > > + > > + /* Cannot fail; consumes a ref on @dep and returns a > > referenced fence. */ > > + fence = xe_tlb_inval_job_push(job, tile->migrate, dep); > > + dma_resv_add_fence(resv, fence, DMA_RESV_USAGE_KERNEL); > > + dma_fence_put(fence); > > + > > +out_put: > > + /* Drop the creation reference (destroys the job if it was > > not pushed). */ > > + xe_tlb_inval_job_put(job); > > + return err; > > +} > > + > > +/** > > + * xe_vm_flush_vm_bo_tlb_async - Asynchronously flush TLBs for a > > vm_bo's mappings > > + * @vm: The VM @vm_bo belongs to > > + * @bo: The buffer object being moved > > + * @vm_bo: The gpuvm_bo linking @bo into @vm > > + * > > + * On L2-flush-optimized HW a BO move only needs to flush L2 (via a > > TLB > > + * invalidation) for the BO's live mappings; the mappings themselves > > are torn > > + * down and rebuilt lazily via the eviction/rebind path, so no PTEs > > need to be > > + * zapped here. Rather than blocking the caller on a synchronous > > invalidation, > > + * issue a TLB invalidation job per VMA per TLB-invalidation client > > (per present > > + * tile, primary and media GT). Each job waits on the BO's in-flight > > GPU work > > + * (all dma-resv usages) and its completion fence is installed into > > the BO's > > + * dma-resv KERNEL slots, so the following migration waits on the > > flush without > > + * stalling this thread. > > + * > > + * The caller must hold the BO's dma-resv lock and @vm must not be > > in fault > > + * mode. > > + * > > + * Return: 0 on success, negative error code on failure. On failure > > the caller > > + * should fall back to the blocking xe_vm_invalidate_vma() path; any > > jobs > > + * already queued install harmless extra flush fences. > > + */ > > +int xe_vm_flush_vm_bo_tlb_async(struct xe_vm *vm, struct xe_bo *bo, > > + struct drm_gpuvm_bo *vm_bo) > > +{ > > + struct xe_device *xe = vm->xe; > > + struct dma_resv *resv = bo->ttm.base.resv; > > + struct dma_fence *dep = NULL; > > + struct drm_gpuva *gpuva; > > + int err; > > + > > + dma_resv_assert_held(resv); > > + xe_assert(xe, !xe_vm_in_fault_mode(vm)); > > + > > + /* > > + * Single fence capturing all in-flight GPU work on the BO; > > the TLB > > + * invalidation jobs depend on it so the flush fires only > > once the GPU > > + * is done with the current mapping. > > + */ > > + err = dma_resv_get_singleton(resv, DMA_RESV_USAGE_BOOKKEEP, > > &dep); > > + if (err) > > + return err; > > + if (!dep) > > + dep = dma_fence_get_stub(); > > + > > + drm_gpuvm_bo_for_each_va(gpuva, vm_bo) { > > + struct xe_vma *vma = gpuva_to_vma(gpuva); > > + struct xe_tile *tile; > > + u8 id; > > + > > + if (xe_vma_is_null(vma) || > > xe_vma_is_cpu_addr_mirror(vma)) > > + continue; > > + > > + for_each_tile(tile, xe, id) { > > + if (!(vma->tile_present & BIT(id))) > > + continue; > > + > > + err = xe_vma_tlb_flush_client(vm, vma, tile, > > + tile- > > >primary_gt, resv, dep, > > + > > XE_EXEC_QUEUE_TLB_INVAL_PRIMARY_GT); > > + if (err) > > + goto out; > > + > > + if (tile->media_gt) { > > + err = xe_vma_tlb_flush_client(vm, > > vma, tile, > > + tile- > > >media_gt, resv, dep, > > + > > XE_EXEC_QUEUE_TLB_INVAL_MEDIA_GT); > > + if (err) > > + goto out; > > + } > > + } > > + } > > + > > +out: > > + dma_fence_put(dep); > > + return err; > > +} > > + > > int xe_vm_validate_protected(struct xe_vm *vm) > > { > > struct drm_gpuva *gpuva; > > diff --git a/drivers/gpu/drm/xe/xe_vm.h b/drivers/gpu/drm/xe/xe_vm.h > > index c5b900f38ded..dd5b070eaede 100644 > > --- a/drivers/gpu/drm/xe/xe_vm.h > > +++ b/drivers/gpu/drm/xe/xe_vm.h > > @@ -26,6 +26,8 @@ struct ttm_buffer_object; > > > > struct dma_fence; > > > > +struct xe_bo; > > +struct drm_gpuvm_bo; > > struct xe_exec_queue; > > struct xe_file; > > struct xe_pagefault; > > @@ -254,6 +256,9 @@ int xe_vm_invalidate_vma(struct xe_vma *vma); > > > > int xe_vm_invalidate_vma_submit(struct xe_vma *vma, struct > > xe_tlb_inval_batch *batch); > > > > +int xe_vm_flush_vm_bo_tlb_async(struct xe_vm *vm, struct xe_bo *bo, > > + struct drm_gpuvm_bo *vm_bo); > > + > > int xe_vm_validate_protected(struct xe_vm *vm); > > > > static inline void xe_vm_queue_rebind_worker(struct xe_vm *vm) > > Otherwise LGTM. Thanks. Matt > /Thomas ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-07-09 18:44 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-07-09 2:49 [PATCH] drm/xe: Flush L2 asynchronously in xe_bo_trigger_rebind() Matthew Brost 2026-07-09 2:56 ` ✓ CI.KUnit: success for " Patchwork 2026-07-09 3:31 ` ✓ Xe.CI.BAT: " Patchwork 2026-07-09 9:24 ` ✗ Xe.CI.FULL: failure " Patchwork 2026-07-09 9:41 ` [PATCH] " Thomas Hellström 2026-07-09 18:43 ` Matthew Brost
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox