* [PATCH V17 01/12] drm/xe: Link VRAM object with gpu buddy
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
@ 2026-08-18 10:40 ` Tejas Upadhyay
2026-08-18 10:40 ` [PATCH V17 02/12] drm/xe: Link LRC BO and its execution Queue Tejas Upadhyay
` (15 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Tejas Upadhyay @ 2026-08-18 10:40 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, Tejas Upadhyay, Matthew Brost
Setup to link TTM buffer object inside gpu buddy. This functionality
is critical for supporting the memory page offline feature on CRI,
where identified faulty pages must be traced back to their
originating buffer for safe removal.
V2(MattB): Clear block->private in xe_ttm_vram_mgr_del as well
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 05911904c1f9..51e983ee3bad 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -57,6 +57,7 @@ static int xe_ttm_vram_mgr_new(struct ttm_resource_manager *man,
struct xe_ttm_vram_mgr *mgr = to_xe_ttm_vram_mgr(man);
struct xe_ttm_vram_mgr_resource *vres;
struct gpu_buddy *mm = &mgr->mm;
+ struct gpu_buddy_block *block;
u64 size, min_page_size;
unsigned long lpfn;
int err;
@@ -141,6 +142,8 @@ static int xe_ttm_vram_mgr_new(struct ttm_resource_manager *man,
}
mgr->visible_avail -= vres->used_visible_size;
+ list_for_each_entry(block, &vres->blocks, link)
+ block->private = tbo;
mutex_unlock(&mgr->lock);
if (!(vres->base.placement & TTM_PL_FLAG_CONTIGUOUS) &&
@@ -179,8 +182,11 @@ static void xe_ttm_vram_mgr_del(struct ttm_resource_manager *man,
to_xe_ttm_vram_mgr_resource(res);
struct xe_ttm_vram_mgr *mgr = to_xe_ttm_vram_mgr(man);
struct gpu_buddy *mm = &mgr->mm;
+ struct gpu_buddy_block *block;
mutex_lock(&mgr->lock);
+ list_for_each_entry(block, &vres->blocks, link)
+ block->private = NULL;
gpu_buddy_free_list(mm, &vres->blocks, 0);
mgr->visible_avail += vres->used_visible_size;
mutex_unlock(&mgr->lock);
--
2.52.0
^ permalink raw reply related [flat|nested] 26+ messages in thread* [PATCH V17 02/12] drm/xe: Link LRC BO and its execution Queue
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
2026-08-18 10:40 ` [PATCH V17 01/12] drm/xe: Link VRAM object with gpu buddy Tejas Upadhyay
@ 2026-08-18 10:40 ` Tejas Upadhyay
2026-08-18 10:40 ` [PATCH V17 03/12] drm/xe: Extend BO purge to handle vram pages as well Tejas Upadhyay
` (14 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Tejas Upadhyay @ 2026-08-18 10:40 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, Tejas Upadhyay
To establish a link between an LRC BO (Logical Ring Context
Buffer Object) and its corresponding execution Queue in the
drm/xe driver, you need to store a back-pointer to the queue
within the BO's private data structure. This allows the
driver to identify and take corrective action on the specific
queue if the LRC BO encounters an error (e.g., memory
corruption or eviction issues).
V3(Sashiko):
- Placeholder of 8 byte for non-lrc bo is acceptable
- Assign bo-q is safe just use READ_ONCE/WRITE_ONCE
V2(MattB):
- Handle multiqueue
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_bo_types.h | 3 +++
drivers/gpu/drm/xe/xe_exec_queue.c | 6 ++++++
drivers/gpu/drm/xe/xe_lrc.c | 1 +
3 files changed, 10 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_bo_types.h b/drivers/gpu/drm/xe/xe_bo_types.h
index e45f24301050..a9c48e440669 100644
--- a/drivers/gpu/drm/xe/xe_bo_types.h
+++ b/drivers/gpu/drm/xe/xe_bo_types.h
@@ -20,6 +20,7 @@
struct xe_device;
struct xe_mem_pool_node;
struct xe_vm;
+struct xe_exec_queue;
#define XE_BO_MAX_PLACEMENTS 3
@@ -42,6 +43,8 @@ struct xe_bo {
u32 flags;
/** @vm: VM this BO is attached to, for extobj this will be NULL */
struct xe_vm *vm;
+ /** @q: Queue this BO is attached to, mostly for LRC BO, NULL otherwise */
+ struct xe_exec_queue *q;
/** @tile: Tile this BO is attached to (kernel BO only) */
struct xe_tile *tile;
/** @placements: valid placements for this BO */
diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
index 9f3d022a1463..d6c7f346f49b 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -390,6 +390,12 @@ static int __xe_exec_queue_init(struct xe_exec_queue *q, u32 exec_queue_flags)
goto err_lrc;
}
+ /*
+ * The queue ref counts the LRCs, thus it safe for the LRC BO to hold a
+ * pointer to queue without reference. The reader holds dma_resv (
+ * xe_bo_lock) which serializes with xe_lrc_finish().
+ */
+ WRITE_ONCE(lrc->bo->q, xe_exec_queue_multi_queue_primary(q));
xe_exec_queue_set_lrc(q, lrc, i);
if (__lrc)
diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
index 35b4e8289b5f..675902753735 100644
--- a/drivers/gpu/drm/xe/xe_lrc.c
+++ b/drivers/gpu/drm/xe/xe_lrc.c
@@ -1066,6 +1066,7 @@ static void xe_lrc_set_ppgtt(struct xe_lrc *lrc, struct xe_vm *vm)
static void xe_lrc_finish(struct xe_lrc *lrc)
{
xe_hw_fence_ctx_finish(&lrc->fence_ctx);
+ WRITE_ONCE(lrc->bo->q, NULL);
xe_bo_unpin_map_no_vm(lrc->bo);
xe_bo_unpin_map_no_vm(lrc->seqno_bo);
}
--
2.52.0
^ permalink raw reply related [flat|nested] 26+ messages in thread* [PATCH V17 03/12] drm/xe: Extend BO purge to handle vram pages as well
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
2026-08-18 10:40 ` [PATCH V17 01/12] drm/xe: Link VRAM object with gpu buddy Tejas Upadhyay
2026-08-18 10:40 ` [PATCH V17 02/12] drm/xe: Link LRC BO and its execution Queue Tejas Upadhyay
@ 2026-08-18 10:40 ` Tejas Upadhyay
2026-08-18 10:40 ` [PATCH V17 04/12] drm/xe/bo: Make xe_bo_is_user() public Tejas Upadhyay
` (13 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Tejas Upadhyay @ 2026-08-18 10:40 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, Tejas Upadhyay, Arvind Yadav
Recent driver update introduce support for purgeable buffer
objects (BOs), extending the API to include VRAM pages to
better manage memory pressure and enable memory offlining.
Reviewed-by: Arvind Yadav <arvind.yadav@intel.com>
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_bo.c | 5 +----
drivers/gpu/drm/xe/xe_bo.h | 1 +
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index dde309821237..52f81e972ada 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -921,7 +921,7 @@ void xe_bo_set_purgeable_state(struct xe_bo *bo,
*
* Return: 0 on success, negative error code on failure
*/
-static int xe_ttm_bo_purge(struct ttm_buffer_object *ttm_bo, struct ttm_operation_ctx *ctx)
+int xe_ttm_bo_purge(struct ttm_buffer_object *ttm_bo, struct ttm_operation_ctx *ctx)
{
struct xe_bo *bo = ttm_to_xe_bo(ttm_bo);
struct ttm_placement place = {};
@@ -929,9 +929,6 @@ static int xe_ttm_bo_purge(struct ttm_buffer_object *ttm_bo, struct ttm_operatio
xe_bo_assert_held(bo);
- if (!ttm_bo->ttm)
- return 0;
-
if (!xe_bo_madv_is_dontneed(bo))
return 0;
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index e8081af5bfc1..90b15fff36c7 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -600,6 +600,7 @@ struct xe_bo_shrink_flags {
long xe_bo_shrink(struct ttm_operation_ctx *ctx, struct ttm_buffer_object *bo,
const struct xe_bo_shrink_flags flags,
unsigned long *scanned);
+int xe_ttm_bo_purge(struct ttm_buffer_object *ttm_bo, struct ttm_operation_ctx *ctx);
/**
* xe_bo_is_mem_type - Whether the bo currently resides in the given
--
2.52.0
^ permalink raw reply related [flat|nested] 26+ messages in thread* [PATCH V17 04/12] drm/xe/bo: Make xe_bo_is_user() public
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
` (2 preceding siblings ...)
2026-08-18 10:40 ` [PATCH V17 03/12] drm/xe: Extend BO purge to handle vram pages as well Tejas Upadhyay
@ 2026-08-18 10:40 ` Tejas Upadhyay
2026-08-18 10:41 ` [PATCH V17 05/12] drm/xe: Guard teardown paths against purged BOs Tejas Upadhyay
` (12 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Tejas Upadhyay @ 2026-08-18 10:40 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, Tejas Upadhyay
Export xe_bo_is_user() so it can be used by the VRAM page offline
code to distinguish user-created BOs from kernel BOs when deciding
whether a faulty page can be safely purged or requires a full reset.
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_bo.c | 8 +++++++-
drivers/gpu/drm/xe/xe_bo.h | 1 +
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 52f81e972ada..b077d137da57 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -158,7 +158,13 @@ bool xe_bo_is_vm_bound(struct xe_bo *bo)
return !list_empty(&bo->ttm.base.gpuva.list);
}
-static bool xe_bo_is_user(struct xe_bo *bo)
+/**
+ * xe_bo_is_user - Check if BO is user-created
+ * @bo: The BO
+ *
+ * Returns: true if @bo was created by userspace
+ */
+bool xe_bo_is_user(struct xe_bo *bo)
{
return bo->flags & XE_BO_FLAG_USER;
}
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index 90b15fff36c7..eede678ad303 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -601,6 +601,7 @@ long xe_bo_shrink(struct ttm_operation_ctx *ctx, struct ttm_buffer_object *bo,
const struct xe_bo_shrink_flags flags,
unsigned long *scanned);
int xe_ttm_bo_purge(struct ttm_buffer_object *ttm_bo, struct ttm_operation_ctx *ctx);
+bool xe_bo_is_user(struct xe_bo *bo);
/**
* xe_bo_is_mem_type - Whether the bo currently resides in the given
--
2.52.0
^ permalink raw reply related [flat|nested] 26+ messages in thread* [PATCH V17 05/12] drm/xe: Guard teardown paths against purged BOs
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
` (3 preceding siblings ...)
2026-08-18 10:40 ` [PATCH V17 04/12] drm/xe/bo: Make xe_bo_is_user() public Tejas Upadhyay
@ 2026-08-18 10:41 ` Tejas Upadhyay
2026-08-18 11:06 ` sashiko-bot
2026-08-18 10:41 ` [PATCH V17 06/12] drm/xe/vram: Extract buddy alloc and free helpers Tejas Upadhyay
` (11 subsequent siblings)
16 siblings, 1 reply; 26+ messages in thread
From: Tejas Upadhyay @ 2026-08-18 10:41 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, Tejas Upadhyay
VRAM page offlining can purge BOs that are still referenced by page
tables, exec queues, and DMA-buf exports. Add xe_bo_is_purged()
guards in the teardown paths to prevent unpinning or mapping an
already-purged BO:
- xe_bo_unpin_map_no_vm(): skip unpin if purged
- xe_dma_buf_map(): return -ENOENT early if purged
- xe_exec_queue_update_run_ticks(): skip LRC timestamp read if purged
- xe_pt_destroy(): skip unpin if purged
v2(Himal):
- take dma_resv lock before calling xe_bo_is_purged()
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_bo.h | 3 ++-
drivers/gpu/drm/xe/xe_dma_buf.c | 3 +++
drivers/gpu/drm/xe/xe_exec_queue.c | 8 ++++++--
drivers/gpu/drm/xe/xe_pt.c | 5 ++++-
4 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index eede678ad303..dfcd0e57073b 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -364,7 +364,8 @@ static inline void xe_bo_unpin_map_no_vm(struct xe_bo *bo)
{
if (likely(bo)) {
xe_bo_lock(bo, false);
- xe_bo_unpin(bo);
+ if (!xe_bo_is_purged(bo))
+ xe_bo_unpin(bo);
xe_bo_unlock(bo);
xe_bo_put(bo);
diff --git a/drivers/gpu/drm/xe/xe_dma_buf.c b/drivers/gpu/drm/xe/xe_dma_buf.c
index bf0728838ead..5d9f1cd24b7f 100644
--- a/drivers/gpu/drm/xe/xe_dma_buf.c
+++ b/drivers/gpu/drm/xe/xe_dma_buf.c
@@ -104,6 +104,9 @@ static struct sg_table *xe_dma_buf_map(struct dma_buf_attachment *attach,
struct sg_table *sgt;
int r = 0;
+ if (xe_bo_is_purged(bo))
+ return ERR_PTR(-ENOENT);
+
if (!attach->peer2peer && !xe_bo_can_migrate(bo, XE_PL_TT))
return ERR_PTR(-EOPNOTSUPP);
diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
index d6c7f346f49b..5432710c1cfb 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -1575,8 +1575,12 @@ void xe_exec_queue_update_run_ticks(struct xe_exec_queue *q)
* errors.
*/
lrc = q->lrc[0];
- new_ts = xe_lrc_update_timestamp(lrc, &old_ts);
- q->xef->run_ticks[q->class] += (new_ts - old_ts) * q->width;
+ xe_bo_lock(lrc->bo, false);
+ if (!xe_bo_is_purged(lrc->bo)) {
+ new_ts = xe_lrc_update_timestamp(lrc, &old_ts);
+ q->xef->run_ticks[q->class] += (new_ts - old_ts) * q->width;
+ }
+ xe_bo_unlock(lrc->bo);
drm_dev_exit(idx);
}
diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
index 5d990c1c3740..b6575a6bada4 100644
--- a/drivers/gpu/drm/xe/xe_pt.c
+++ b/drivers/gpu/drm/xe/xe_pt.c
@@ -212,7 +212,10 @@ void xe_pt_destroy(struct xe_pt *pt, u32 flags, struct llist_head *deferred)
return;
XE_WARN_ON(!list_empty(&pt->bo->ttm.base.gpuva.list));
- xe_bo_unpin(pt->bo);
+ xe_bo_lock(pt->bo, false);
+ if (!xe_bo_is_purged(pt->bo))
+ xe_bo_unpin(pt->bo);
+ xe_bo_unlock(pt->bo);
xe_bo_put_deferred(pt->bo, deferred);
if (pt->level > 0 && pt->num_live) {
--
2.52.0
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH V17 05/12] drm/xe: Guard teardown paths against purged BOs
2026-08-18 10:41 ` [PATCH V17 05/12] drm/xe: Guard teardown paths against purged BOs Tejas Upadhyay
@ 2026-08-18 11:06 ` sashiko-bot
0 siblings, 0 replies; 26+ messages in thread
From: sashiko-bot @ 2026-08-18 11:06 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Critical] Calling xe_bo_lock() in xe_pt_destroy() causes a recursive self-deadlock because the page table BO shares the VM's dma_resv lock, which is already held by callers.
- [Medium] The patch assumes that pinned kernel BOs (Page Table, Exec Queue) can be purged, adding dead code guards. Pinned kernel BOs can never be purged.
--
--- Patch [5]: [PATCH V17 05/12] drm/xe: Guard teardown paths against purged BOs ---
commit 77ed38896aea34c9e5dc27cf110f773e0afaba91
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
Subject: drm/xe: Guard teardown paths against purged BOs
This commit adds guards using xe_bo_is_purged() to teardown and update
paths. It prevents unpinning or mapping a BO that has already been
purged during VRAM page offlining.
> diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
> index eede678ad303a..dfcd0e57073be 100644
> --- a/drivers/gpu/drm/xe/xe_bo.h
> +++ b/drivers/gpu/drm/xe/xe_bo.h
> @@ -364,7 +364,8 @@ static inline void xe_bo_unpin_map_no_vm(struct xe_bo *bo)
> {
> if (likely(bo)) {
> xe_bo_lock(bo, false);
> - xe_bo_unpin(bo);
> + if (!xe_bo_is_purged(bo))
> + xe_bo_unpin(bo);
> xe_bo_unlock(bo);
[Severity: Medium]
Will this condition ever be true? xe_bo_unpin_map_no_vm() is used exclusively
for kernel BOs, which cannot be purged. Since kernel BOs cannot transition to
the purged state, this guard appears to be dead code.
[ ... ]
> diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
> index d6c7f346f49bc..5432710c1cfb6 100644
> --- a/drivers/gpu/drm/xe/xe_exec_queue.c
> +++ b/drivers/gpu/drm/xe/xe_exec_queue.c
> @@ -1575,8 +1575,12 @@ void xe_exec_queue_update_run_ticks(struct xe_exec_queue *q)
> * errors.
> */
> lrc = q->lrc[0];
> - new_ts = xe_lrc_update_timestamp(lrc, &old_ts);
> - q->xef->run_ticks[q->class] += (new_ts - old_ts) * q->width;
> + xe_bo_lock(lrc->bo, false);
> + if (!xe_bo_is_purged(lrc->bo)) {
[Severity: Medium]
Since LRC BOs are permanently pinned kernel BOs, is it possible for them to
ever be purged? If kernel BOs are never purged, this check and the new
locking operations are unnecessary dead code.
> + new_ts = xe_lrc_update_timestamp(lrc, &old_ts);
> + q->xef->run_ticks[q->class] += (new_ts - old_ts) * q->width;
> + }
> + xe_bo_unlock(lrc->bo);
>
> drm_dev_exit(idx);
> }
> diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
> index 5d990c1c3740a..b6575a6bada44 100644
> --- a/drivers/gpu/drm/xe/xe_pt.c
> +++ b/drivers/gpu/drm/xe/xe_pt.c
> @@ -212,7 +212,10 @@ void xe_pt_destroy(struct xe_pt *pt, u32 flags, struct llist_head *deferred)
> return;
>
> XE_WARN_ON(!list_empty(&pt->bo->ttm.base.gpuva.list));
> - xe_bo_unpin(pt->bo);
> + xe_bo_lock(pt->bo, false);
[Severity: Critical]
Does calling xe_bo_lock() here cause a recursive self-deadlock?
When tearing down a VM, xe_vm_pt_destroy() asserts that the VM's lock is held
and then calls xe_pt_destroy(). The page table BO shares the VM's dma_resv
lock.
Because the lock is already held by the current thread, won't attempting to
acquire the non-recursive ww_mutex again here cause a guaranteed deadlock when
destroying or modifying page tables?
Additionally, as with the other kernel BOs, can a page table BO ever actually
be purged?
> + if (!xe_bo_is_purged(pt->bo))
> + xe_bo_unpin(pt->bo);
> + xe_bo_unlock(pt->bo);
> xe_bo_put_deferred(pt->bo, deferred);
>
> if (pt->level > 0 && pt->num_live) {
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260818104055.3833974-14-tejas.upadhyay@intel.com?part=5
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH V17 06/12] drm/xe/vram: Extract buddy alloc and free helpers
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
` (4 preceding siblings ...)
2026-08-18 10:41 ` [PATCH V17 05/12] drm/xe: Guard teardown paths against purged BOs Tejas Upadhyay
@ 2026-08-18 10:41 ` Tejas Upadhyay
2026-08-18 10:41 ` [PATCH V17 07/12] drm/xe/vram: Add page offline data structures and lifecycle Tejas Upadhyay
` (10 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Tejas Upadhyay @ 2026-08-18 10:41 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, Tejas Upadhyay
Factor out xe_ttm_vram_buddy_alloc() and xe_ttm_vram_buddy_free()
from xe_ttm_vram_mgr_new() and xe_ttm_vram_mgr_del(). These helpers
consolidate block allocation with visible-size tracking and
block->private tagging, making them reusable by the upcoming VRAM
page offline reservation path.
No functional change.
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 82 +++++++++++++++++-----------
1 file changed, 51 insertions(+), 31 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 51e983ee3bad..16ecea497780 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -49,6 +49,40 @@ static inline bool xe_is_vram_mgr_blocks_contiguous(struct gpu_buddy *mm,
return true;
}
+static int xe_ttm_vram_buddy_alloc(struct xe_ttm_vram_mgr *mgr, u64 start,
+ u64 end, u64 size, u64 min_page_size,
+ struct list_head *blocks, unsigned long flags,
+ void *priv, u64 *used_visible)
+{
+ struct gpu_buddy *mm = &mgr->mm;
+ struct gpu_buddy_block *block;
+ int err;
+
+ err = gpu_buddy_alloc_blocks(mm, start, end, size, min_page_size, blocks, flags);
+ if (err)
+ return err;
+
+ list_for_each_entry(block, blocks, link)
+ block->private = priv;
+
+ if (end <= mgr->visible_size) {
+ *used_visible = size;
+ } else {
+ list_for_each_entry(block, blocks, link) {
+ u64 blk_start = gpu_buddy_block_offset(block);
+
+ if (blk_start < mgr->visible_size) {
+ u64 blk_end = blk_start + gpu_buddy_block_size(mm, block);
+
+ *used_visible += min(blk_end, mgr->visible_size) - blk_start;
+ }
+ }
+ }
+
+ mgr->visible_avail -= *used_visible;
+ return 0;
+}
+
static int xe_ttm_vram_mgr_new(struct ttm_resource_manager *man,
struct ttm_buffer_object *tbo,
const struct ttm_place *place,
@@ -57,7 +91,6 @@ static int xe_ttm_vram_mgr_new(struct ttm_resource_manager *man,
struct xe_ttm_vram_mgr *mgr = to_xe_ttm_vram_mgr(man);
struct xe_ttm_vram_mgr_resource *vres;
struct gpu_buddy *mm = &mgr->mm;
- struct gpu_buddy_block *block;
u64 size, min_page_size;
unsigned long lpfn;
int err;
@@ -118,32 +151,12 @@ static int xe_ttm_vram_mgr_new(struct ttm_resource_manager *man,
goto error_unlock;
}
- err = gpu_buddy_alloc_blocks(mm, (u64)place->fpfn << PAGE_SHIFT,
- (u64)lpfn << PAGE_SHIFT, size,
- min_page_size, &vres->blocks, vres->flags);
+ err = xe_ttm_vram_buddy_alloc(mgr, (u64)place->fpfn << PAGE_SHIFT,
+ (u64)lpfn << PAGE_SHIFT, size,
+ min_page_size, &vres->blocks, vres->flags,
+ tbo, &vres->used_visible_size);
if (err)
goto error_unlock;
-
- if (lpfn <= mgr->visible_size >> PAGE_SHIFT) {
- vres->used_visible_size = size;
- } else {
- struct gpu_buddy_block *block;
-
- list_for_each_entry(block, &vres->blocks, link) {
- u64 start = gpu_buddy_block_offset(block);
-
- if (start < mgr->visible_size) {
- u64 end = start + gpu_buddy_block_size(mm, block);
-
- vres->used_visible_size +=
- min(end, mgr->visible_size) - start;
- }
- }
- }
-
- mgr->visible_avail -= vres->used_visible_size;
- list_for_each_entry(block, &vres->blocks, link)
- block->private = tbo;
mutex_unlock(&mgr->lock);
if (!(vres->base.placement & TTM_PL_FLAG_CONTIGUOUS) &&
@@ -175,20 +188,27 @@ static int xe_ttm_vram_mgr_new(struct ttm_resource_manager *man,
return err;
}
+static void xe_ttm_vram_buddy_free(struct xe_ttm_vram_mgr *mgr,
+ struct list_head *blocks,
+ u64 used_visible)
+{
+ struct gpu_buddy_block *block;
+
+ list_for_each_entry(block, blocks, link)
+ block->private = NULL;
+ gpu_buddy_free_list(&mgr->mm, blocks, 0);
+ mgr->visible_avail += used_visible;
+}
+
static void xe_ttm_vram_mgr_del(struct ttm_resource_manager *man,
struct ttm_resource *res)
{
struct xe_ttm_vram_mgr_resource *vres =
to_xe_ttm_vram_mgr_resource(res);
struct xe_ttm_vram_mgr *mgr = to_xe_ttm_vram_mgr(man);
- struct gpu_buddy *mm = &mgr->mm;
- struct gpu_buddy_block *block;
mutex_lock(&mgr->lock);
- list_for_each_entry(block, &vres->blocks, link)
- block->private = NULL;
- gpu_buddy_free_list(mm, &vres->blocks, 0);
- mgr->visible_avail += vres->used_visible_size;
+ xe_ttm_vram_buddy_free(mgr, &vres->blocks, vres->used_visible_size);
mutex_unlock(&mgr->lock);
ttm_resource_fini(man, res);
--
2.52.0
^ permalink raw reply related [flat|nested] 26+ messages in thread* [PATCH V17 07/12] drm/xe/vram: Add page offline data structures and lifecycle
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
` (5 preceding siblings ...)
2026-08-18 10:41 ` [PATCH V17 06/12] drm/xe/vram: Extract buddy alloc and free helpers Tejas Upadhyay
@ 2026-08-18 10:41 ` Tejas Upadhyay
2026-08-18 10:51 ` sashiko-bot
2026-08-18 10:41 ` [PATCH V17 08/12] drm/xe/vram: Add VRAM page offline fault handler Tejas Upadhyay
` (9 subsequent siblings)
16 siblings, 1 reply; 26+ messages in thread
From: Tejas Upadhyay @ 2026-08-18 10:41 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, Tejas Upadhyay
Add xe_ttm_vram_offline_resource to track individual offlined VRAM
pages, and extend xe_ttm_vram_mgr with offlined_pages/queued_pages
lists and their counters.
Initialize the lists in __xe_ttm_vram_mgr_init() and add
xe_ttm_vram_free_bad_pages() to release all tracked pages during
xe_ttm_vram_mgr_fini() teardown.
v2(Himal):
- Address possible leak in xe_ttm_vram_mgr_fini()
- Remove unused dev and add comment for used_visible_size 0
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 25 +++++++++++++++++++
drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 28 ++++++++++++++++++++++
2 files changed, 53 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 16ecea497780..5513dc014f3e 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -338,12 +338,35 @@ static void xe_ttm_vram_mgr_set_unused(struct drm_device *dev, void *arg)
ttm_resource_manager_set_used(man, false);
}
+static void xe_ttm_vram_free_bad_pages(struct xe_ttm_vram_mgr *mgr)
+{
+ struct xe_ttm_vram_offline_resource *pos, *n;
+
+ list_for_each_entry_safe(pos, n, &mgr->offlined_pages, offlined_link) {
+ xe_ttm_vram_buddy_free(mgr, &pos->blocks, pos->used_visible_size);
+ list_del_rcu(&pos->offlined_link);
+ --mgr->n_offlined_pages;
+ kfree_rcu(pos, rcu);
+ }
+ list_for_each_entry_safe(pos, n, &mgr->queued_pages, queued_link) {
+ /* queued entries have no buddy reservation yet */
+ xe_ttm_vram_buddy_free(mgr, &pos->blocks, 0);
+ list_del_rcu(&pos->queued_link);
+ --mgr->n_queued_pages;
+ kfree_rcu(pos, rcu);
+ }
+}
+
static void xe_ttm_vram_mgr_fini(struct drm_device *dev, void *arg)
{
struct xe_device *xe = to_xe_device(dev);
struct xe_ttm_vram_mgr *mgr = arg;
struct ttm_resource_manager *man = &mgr->manager;
+ mutex_lock(&mgr->lock);
+ xe_ttm_vram_free_bad_pages(mgr);
+ mutex_unlock(&mgr->lock);
+
if (ttm_resource_manager_evict_all(&xe->ttm, man))
return;
@@ -370,6 +393,8 @@ int __xe_ttm_vram_mgr_init(struct xe_device *xe, struct xe_ttm_vram_mgr *mgr,
err = drmm_mutex_init(&xe->drm, &mgr->lock);
if (err)
return err;
+ INIT_LIST_HEAD(&mgr->offlined_pages);
+ INIT_LIST_HEAD(&mgr->queued_pages);
mgr->default_page_size = default_page_size;
mgr->visible_size = io_size;
mgr->visible_avail = io_size;
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
index 9106da056b49..9dc6fc5a3c38 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
@@ -19,6 +19,14 @@ struct xe_ttm_vram_mgr {
struct ttm_resource_manager manager;
/** @mm: DRM buddy allocator which manages the VRAM */
struct gpu_buddy mm;
+ /** @offlined_pages: List of offlined pages */
+ struct list_head offlined_pages;
+ /** @n_offlined_pages: Number of offlined pages */
+ u16 n_offlined_pages;
+ /** @queued_pages: List of queued pages */
+ struct list_head queued_pages;
+ /** @n_queued_pages: Number of queued pages */
+ u16 n_queued_pages;
/** @visible_size: Proped size of the CPU visible portion */
u64 visible_size;
/** @visible_avail: CPU visible portion still unallocated */
@@ -45,4 +53,24 @@ struct xe_ttm_vram_mgr_resource {
unsigned long flags;
};
+/**
+ * struct xe_ttm_vram_offline_resource - Tracks a single offlined VRAM page
+ */
+struct xe_ttm_vram_offline_resource {
+ /** @offlined_link: Link into mgr->offlined_pages */
+ struct list_head offlined_link;
+ /** @queued_link: Link into mgr->queued_pages */
+ struct list_head queued_link;
+ /** @blocks: Buddy blocks reserved for this page */
+ struct list_head blocks;
+ /** @used_visible_size: CPU-visible bytes consumed */
+ u64 used_visible_size;
+ /** @addr: Faulty DPA reported by HW */
+ u64 addr;
+ /** @status: Reservation status (0=pending, 1=fail) */
+ bool status;
+ /** @rcu: RCU head for deferred freeing */
+ struct rcu_head rcu;
+};
+
#endif
--
2.52.0
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH V17 07/12] drm/xe/vram: Add page offline data structures and lifecycle
2026-08-18 10:41 ` [PATCH V17 07/12] drm/xe/vram: Add page offline data structures and lifecycle Tejas Upadhyay
@ 2026-08-18 10:51 ` sashiko-bot
0 siblings, 0 replies; 26+ messages in thread
From: sashiko-bot @ 2026-08-18 10:51 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] RCU-001 Violation: Synchronous freeing of buddy blocks before list removal.
--
--- Patch [7]: [PATCH V17 07/12] drm/xe/vram: Add page offline data structures and lifecycle ---
commit f7feb662373b2ef4fb339b58b4b97a02acc79be4
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
drm/xe/vram: Add page offline data structures and lifecycle
This commit adds xe_ttm_vram_offline_resource to track individual offlined VRAM
pages, and extends xe_ttm_vram_mgr with offlined_pages/queued_pages lists and
their counters. It also initializes the lists and adds a teardown path to release
all tracked pages.
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> index 16ecea4977809..5513dc014f3e7 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
[ ... ]
> @@ -338,12 +338,35 @@ static void xe_ttm_vram_mgr_set_unused(struct drm_device *dev, void *arg)
> ttm_resource_manager_set_used(man, false);
> }
>
> +static void xe_ttm_vram_free_bad_pages(struct xe_ttm_vram_mgr *mgr)
> +{
> + struct xe_ttm_vram_offline_resource *pos, *n;
> +
> + list_for_each_entry_safe(pos, n, &mgr->offlined_pages, offlined_link) {
> + xe_ttm_vram_buddy_free(mgr, &pos->blocks, pos->used_visible_size);
> + list_del_rcu(&pos->offlined_link);
[Severity: Medium]
Does this violate RCU removal ordering by freeing resources before unlinking?
The buddy blocks are freed synchronously before the object is unlinked from the
RCU-protected offlined_pages list. While this is currently called during the
serialized teardown phase, freeing internal resources before unlinking the
object breaks RCU invariants. A concurrent reader could access pos->blocks
after it has been freed. Should list_del_rcu() happen before
xe_ttm_vram_buddy_free()?
> + --mgr->n_offlined_pages;
> + kfree_rcu(pos, rcu);
> + }
> + list_for_each_entry_safe(pos, n, &mgr->queued_pages, queued_link) {
> + /* queued entries have no buddy reservation yet */
> + xe_ttm_vram_buddy_free(mgr, &pos->blocks, 0);
> + list_del_rcu(&pos->queued_link);
[Severity: Medium]
Similarly, does this pose the same RCU removal ordering issue?
The buddy blocks are freed before unlinking the object from the RCU-protected
queued_pages list.
> + --mgr->n_queued_pages;
> + kfree_rcu(pos, rcu);
> + }
> +}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260818104055.3833974-14-tejas.upadhyay@intel.com?part=7
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH V17 08/12] drm/xe/vram: Add VRAM page offline fault handler
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
` (6 preceding siblings ...)
2026-08-18 10:41 ` [PATCH V17 07/12] drm/xe/vram: Add page offline data structures and lifecycle Tejas Upadhyay
@ 2026-08-18 10:41 ` Tejas Upadhyay
2026-08-18 11:01 ` sashiko-bot
2026-08-18 10:41 ` [PATCH V17 09/12] drm/xe/configfs: Add vram bad page reservation policy Tejas Upadhyay
` (8 subsequent siblings)
16 siblings, 1 reply; 26+ messages in thread
From: Tejas Upadhyay @ 2026-08-18 10:41 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, Tejas Upadhyay
Add the core VRAM page offlining logic to handle HW-reported faulty
physical addresses:
- xe_ttm_vram_purge_page(): Purges the BO containing the faulty
address. Bans the associated VM (if page table BO) and exec queue
(if LRC BO). Moves xe_exec_queue_kill() outside xe_bo_lock() to
avoid AB-BA deadlock with vm->lock. Uses READ_ONCE(bo->q) to
safely access the exec queue pointer.
- xe_ttm_vram_page_already_processed(): Checks if an address is
already tracked in offlined_pages or queued_pages lists to avoid
double-processing.
- xe_ttm_vram_reserve_page_at_addr(): Two-phase reservation that
first queues the page, purges the BO outside the lock, then
reserves the buddy block. Handles both allocated (BO present)
and free page cases. Returns -EIO for critical kernel BOs to
trigger system reset.
- xe_ttm_vram_addr_to_region(): Maps a DPA to its VRAM region.
Uses GSMBASE MMIO register to detect GSM addresses (returns NULL
for reset path). Returns ERR_PTR(-EOPNOTSUPP) for addresses
outside any known region.
- xe_ttm_vram_handle_addr_fault(): Entry point called by RAS.
Returns -EEXIST if already processed, -EIO for GSM/critical BO,
-EOPNOTSUPP if out of bounds.
v11(Himal):
- match everywhere with enum vs bool for status member
- Fix comment and remove unused var
- if purge fail let next alloc confirm failure
- pass absolute address, useful for multi tile
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 292 +++++++++++++++++++++
drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 1 +
drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 14 +-
3 files changed, 305 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 5513dc014f3e..9311aa3728f8 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -13,10 +13,16 @@
#include <drm/ttm/ttm_placement.h>
#include <drm/ttm/ttm_range_manager.h>
+#include "regs/xe_regs.h"
#include "xe_bo.h"
+#include "xe_configfs.h"
#include "xe_device.h"
+#include "xe_exec_queue.h"
+#include "xe_lrc.h"
+#include "xe_mmio.h"
#include "xe_pm.h"
#include "xe_res_cursor.h"
+#include "xe_ttm_stolen_mgr.h"
#include "xe_ttm_vram_mgr.h"
#include "xe_vram_types.h"
@@ -572,3 +578,289 @@ u64 xe_ttm_vram_get_avail(struct ttm_resource_manager *man)
return avail;
}
+
+static int xe_ttm_vram_purge_page(struct xe_device *xe, struct xe_bo *bo)
+{
+ struct ttm_operation_ctx ctx = {};
+ struct xe_exec_queue *q_to_put = NULL;
+ struct xe_exec_queue *q = NULL;
+ struct xe_vm *vm = NULL;
+ u32 flags;
+ int ret = 0;
+
+ xe_bo_lock(bo, false);
+ if (bo->vm)
+ vm = xe_vm_get(bo->vm);
+ flags = bo->flags;
+ xe_bo_unlock(bo);
+ /* Ban VM if BO is PPGTT */
+ if (vm && (flags & XE_BO_FLAG_PAGETABLE)) {
+ down_write(&vm->lock);
+ xe_vm_kill(vm, true);
+ up_write(&vm->lock);
+ }
+ if (vm)
+ xe_vm_put(vm);
+
+ xe_bo_lock(bo, false);
+ q = READ_ONCE(bo->q);
+ /* Ban exec queue if BO is lrc */
+ if (q && xe_exec_queue_get_unless_zero(q)) {
+ /* ban queue */
+ q_to_put = q;
+ }
+
+ if (bo->purgeable.state == XE_MADV_PURGEABLE_PURGED) {
+ /* Already purged by shrinker during unlocked window — nothing to do */
+ xe_bo_unlock(bo);
+ goto out;
+ }
+
+ xe_bo_set_purgeable_state(bo, XE_MADV_PURGEABLE_DONTNEED);
+ ttm_bo_unmap_virtual(&bo->ttm); /* nuke CPU mmap + VRAM IO mappings */
+ if (xe_bo_is_pinned(bo))
+ xe_bo_unpin(bo);
+ ret = xe_ttm_bo_purge(&bo->ttm, &ctx);
+ xe_bo_unlock(bo);
+
+out:
+ if (q_to_put) {
+ xe_exec_queue_kill(q_to_put);
+ xe_exec_queue_put(q_to_put);
+ }
+
+ return ret;
+}
+
+static bool xe_ttm_vram_page_already_processed(struct xe_ttm_vram_mgr *mgr,
+ u64 addr)
+{
+ struct xe_ttm_vram_offline_resource *pos;
+
+ lockdep_assert_held(&mgr->lock);
+
+ list_for_each_entry(pos, &mgr->offlined_pages, offlined_link) {
+ if (pos->addr == addr)
+ return true;
+ }
+
+ list_for_each_entry(pos, &mgr->queued_pages, queued_link) {
+ if (pos->addr == addr)
+ return true;
+ }
+
+ return false;
+}
+
+static int xe_ttm_vram_reserve_page_at_addr(struct xe_device *xe, u64 addr,
+ struct xe_ttm_vram_mgr *vram_mgr, struct gpu_buddy *mm)
+{
+ struct xe_ttm_vram_offline_resource *nentry;
+ struct ttm_buffer_object *tbo = NULL;
+ struct xe_bo *pbo_to_put = NULL;
+ struct gpu_buddy_block *block;
+ u64 size = SZ_4K;
+ int ret = 0;
+
+ scoped_guard(mutex, &vram_mgr->lock) {
+ if (xe_ttm_vram_page_already_processed(vram_mgr, addr))
+ return -EEXIST;
+ block = gpu_buddy_allocated_addr_to_block(mm, addr);
+ if (WARN_ON(IS_ERR(block)))
+ return PTR_ERR(block);
+
+ nentry = kzalloc_obj(*nentry);
+ if (!nentry)
+ return -ENOMEM;
+ INIT_LIST_HEAD(&nentry->blocks);
+ nentry->status = XE_PAGE_RESERVE_PENDING;
+ nentry->addr = addr;
+
+ if (block) {
+ struct xe_bo *pbo;
+
+ if (!block->private) {
+ /* Race: another thread just reserved this block */
+ kfree(nentry);
+ return -EEXIST;
+ }
+ tbo = block->private;
+ pbo = ttm_to_xe_bo(tbo);
+
+ /* Get reference safely - BO may have zero refcount */
+ if (!xe_bo_get_unless_zero(pbo)) {
+ kfree(nentry);
+ return -ENOENT;
+ }
+ /*
+ * Critical kernel BO? Best-effort check without resv lock;
+ * worst case a concurrent pin causes reset path unnecessarily.
+ */
+ if ((pbo->ttm.type == ttm_bo_type_kernel &&
+ !(pbo->flags & XE_BO_FLAG_PINNED_LATE_RESTORE)) ||
+ (xe_bo_is_user(pbo) && xe_bo_is_pinned(pbo))) {
+ kfree(nentry);
+ pbo_to_put = pbo;
+ drm_err(&xe->drm,
+ "%s: addr: 0x%llx is critical kernel bo, requesting SBR\n",
+ __func__, addr);
+ break;
+ }
+ ++vram_mgr->n_queued_pages;
+ list_add_rcu(&nentry->queued_link, &vram_mgr->queued_pages);
+ }
+ }
+
+ /* Deferred put outside lock to avoid recursive deadlock */
+ if (pbo_to_put) {
+ xe_bo_put(pbo_to_put);
+ /* Hint System controller driver for reset with -EIO */
+ return -EIO;
+ }
+
+ if (block) {
+ struct xe_ttm_vram_offline_resource *pos, *n;
+ struct xe_bo *pbo = ttm_to_xe_bo(tbo);
+
+ /*
+ * Purge BO containing address - reference held from above.
+ * Note: brief window between purge (freeing blocks) and re-reserve
+ * below. If another allocation claims the block, buddy_alloc fails
+ * and the status will be shown as failed reservation.
+ */
+ ret = xe_ttm_vram_purge_page(xe, pbo);
+ xe_bo_put(pbo);
+ if (ret)
+ drm_warn(&xe->drm, "Purge failed at addr:0x%llx, ret:%d\n", addr, ret);
+
+ /* Reserve page at address addr*/
+ scoped_guard(mutex, &vram_mgr->lock) {
+ ret = xe_ttm_vram_buddy_alloc(vram_mgr, addr, addr + size,
+ size, size, &nentry->blocks,
+ GPU_BUDDY_RANGE_ALLOCATION,
+ NULL, &nentry->used_visible_size);
+ if (ret) {
+ drm_warn(&xe->drm,
+ "Could not reserve page at addr:0x%llx, ret:%d\n",
+ addr, ret);
+ nentry->status = XE_PAGE_RESERVE_FAIL;
+ return ret;
+ }
+
+ list_for_each_entry_safe(pos, n, &vram_mgr->queued_pages, queued_link) {
+ if (pos->addr == nentry->addr) {
+ --vram_mgr->n_queued_pages;
+ list_del_rcu(&pos->queued_link);
+ break;
+ }
+ }
+ list_add_rcu(&nentry->offlined_link, &vram_mgr->offlined_pages);
+ /* RAS will send command to FW for offlining page based on ret value */
+ ++vram_mgr->n_offlined_pages;
+ return ret;
+ }
+ } else {
+ struct xe_ttm_vram_offline_resource *pos, *n;
+
+ scoped_guard(mutex, &vram_mgr->lock) {
+ ++vram_mgr->n_queued_pages;
+ list_add_rcu(&nentry->queued_link, &vram_mgr->queued_pages);
+ ret = xe_ttm_vram_buddy_alloc(vram_mgr, addr, addr + size,
+ size, size, &nentry->blocks,
+ GPU_BUDDY_RANGE_ALLOCATION,
+ NULL, &nentry->used_visible_size);
+ if (ret) {
+ drm_warn(&xe->drm,
+ "Could not reserve page at addr:0x%llx, ret:%d\n",
+ addr, ret);
+ nentry->status = XE_PAGE_RESERVE_FAIL;
+ return ret;
+ }
+
+ list_for_each_entry_safe(pos, n, &vram_mgr->queued_pages, queued_link) {
+ if (pos->addr == nentry->addr) {
+ --vram_mgr->n_queued_pages;
+ list_del_rcu(&pos->queued_link);
+ break;
+ }
+ }
+ ++vram_mgr->n_offlined_pages;
+ list_add_rcu(&nentry->offlined_link, &vram_mgr->offlined_pages);
+ /* RAS will send command to FW for offlining page based on ret value */
+ }
+ }
+ /* Success */
+ return ret;
+}
+
+static struct xe_vram_region *xe_ttm_vram_addr_to_region(struct xe_device *xe, u64 addr)
+{
+ u64 raw_offset = xe_mmio_read64_2x32(&xe_device_get_root_tile(xe)->mmio, GSMBASE);
+ /* force a 4K (4096 bytes) page alignment */
+ u64 gsmbase_dpa = raw_offset & ~(u64)(PAGE_SIZE - 1);
+ struct xe_vram_region *vr;
+ struct xe_tile *tile;
+ int id;
+
+ /* Addr from GSM? */
+ if (addr >= gsmbase_dpa)
+ /* Return NULL so the caller can request reset (SBR) */
+ return NULL;
+
+ for_each_tile(tile, xe, id) {
+ vr = tile->mem.vram;
+ if (addr >= vr->dpa_base &&
+ addr < vr->dpa_base + vr->usable_size)
+ return vr;
+ }
+
+ /*
+ * Return an explicit error pointer so the caller knows the addr
+ * is invalid and should be ignored, NOT SBR.
+ */
+ return ERR_PTR(-EOPNOTSUPP);
+}
+
+/**
+ * xe_ttm_vram_handle_addr_fault - Handle vram physical address error flaged
+ * @xe: pointer to parent device
+ * @addr: physical faulty address
+ *
+ * Handle the physcial faulty address error on specific tile.
+ *
+ * Returns 0 for success, negative error code otherwise as follow:
+ * * %-EIO - critical BO or address outside any VRAM region; next action is reset.
+ * * %-EOPNOTSUPP - log-only policy or unknown address; no further action.
+ * * %-ENOMEM - allocation failure; next action is reset.
+ * * %-ENXIO - address not found in buddy; next action is reset.
+ * * %-EEXIST - address already processed; no further action.
+ * * % Any other negative error - next action is reset.
+ */
+int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr)
+{
+ struct xe_ttm_vram_mgr *vram_mgr;
+ struct xe_vram_region *vr;
+ struct gpu_buddy *mm;
+
+ vr = xe_ttm_vram_addr_to_region(xe, addr);
+ if (IS_ERR(vr)) {
+ /*
+ * The addr is outside VRAM and GSM.
+ * Log a debug message if needed, and safely exit/ignore.
+ */
+ drm_dbg(&xe->drm, "Address %llx is out of bounds, ignoring fault.\n", addr);
+ return PTR_ERR(vr);
+ }
+ if (!vr) {
+ drm_err(&xe->drm, "%s:%d GSM addr:%llx error requesting SBR\n",
+ __func__, __LINE__, addr);
+ /* Hint System controller driver for reset with -EIO */
+ return -EIO;
+ }
+ vram_mgr = &vr->ttm;
+ mm = &vram_mgr->mm;
+
+ /* Reserve page at address */
+ return xe_ttm_vram_reserve_page_at_addr(xe, addr - vr->dpa_base, vram_mgr, mm);
+}
+EXPORT_SYMBOL(xe_ttm_vram_handle_addr_fault);
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
index 87b7fae5edba..d5392beff30c 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
@@ -31,6 +31,7 @@ u64 xe_ttm_vram_get_cpu_visible_size(struct ttm_resource_manager *man);
void xe_ttm_vram_get_used(struct ttm_resource_manager *man,
u64 *used, u64 *used_visible);
+int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr);
static inline struct xe_ttm_vram_mgr_resource *
to_xe_ttm_vram_mgr_resource(struct ttm_resource *res)
{
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
index 9dc6fc5a3c38..dc97b0ad0e51 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
@@ -53,6 +53,16 @@ struct xe_ttm_vram_mgr_resource {
unsigned long flags;
};
+/**
+ * enum xe_page_reserve_status - Buddy reservation status
+ * @XE_PAGE_RESERVE_PENDING: reservation in progress
+ * @XE_PAGE_RESERVE_FAIL: reservation failed
+ */
+enum xe_page_reserve_status {
+ XE_PAGE_RESERVE_PENDING = 0,
+ XE_PAGE_RESERVE_FAIL,
+};
+
/**
* struct xe_ttm_vram_offline_resource - Tracks a single offlined VRAM page
*/
@@ -67,8 +77,8 @@ struct xe_ttm_vram_offline_resource {
u64 used_visible_size;
/** @addr: Faulty DPA reported by HW */
u64 addr;
- /** @status: Reservation status (0=pending, 1=fail) */
- bool status;
+ /** @status: buddy reservation status */
+ enum xe_page_reserve_status status;
/** @rcu: RCU head for deferred freeing */
struct rcu_head rcu;
};
--
2.52.0
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH V17 08/12] drm/xe/vram: Add VRAM page offline fault handler
2026-08-18 10:41 ` [PATCH V17 08/12] drm/xe/vram: Add VRAM page offline fault handler Tejas Upadhyay
@ 2026-08-18 11:01 ` sashiko-bot
0 siblings, 0 replies; 26+ messages in thread
From: sashiko-bot @ 2026-08-18 11:01 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 9 potential issue(s) to consider:
- [Critical] Asynchronous queue termination during BO page purging causes GPU use-after-free for LRC and Page Table BOs.
- [High] Forceful unbalanced unpinning of a BO without ownership corrupts pin count tracking.
- [High] GSMBASE check incorrectly matches valid VRAM addresses on multi-tile devices, causing spurious system resets.
- [High] Dropping vram_mgr->lock before reserving the faulty page introduces a race window allowing duplicate tracking entries and memory corruption.
- [High] Racing with BO destruction returns -ENOENT, triggering an unnecessary System Reset (SBR).
- [High] Checking if a user BO is pinned without holding its reservation lock allows it to be pinned immediately before being purged.
- [High] Missing page alignment for HW-reported faulty addresses causes buddy allocator to fail, preventing page offlining.
- [Medium] The relative VRAM offset is stored in tracking structures and reported in warnings instead of the absolute Device Physical Address (DPA), breaking multi-tile hardware tracking.
- [Medium] The exec_queue and VM ban reasons are not set before killing the queues, leading to incorrect error reporting and telemetry.
--
--- Patch [8]: [PATCH V17 08/12] drm/xe/vram: Add VRAM page offline fault handler ---
commit 5eda8f6c71d41d8599cf1e30faca069cde3189fb
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
Subject: drm/xe/vram: Add VRAM page offline fault handler
Add the core VRAM page offlining logic to handle HW-reported faulty
physical addresses.
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> index 5513dc014f3e7..9311aa3728f84 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
[ ... ]
> @@ -572,3 +578,289 @@ u64 xe_ttm_vram_get_avail(struct ttm_resource_manager *man)
> +static int xe_ttm_vram_purge_page(struct xe_device *xe, struct xe_bo *bo)
> +{
> + struct ttm_operation_ctx ctx = {};
> + struct xe_exec_queue *q_to_put = NULL;
> + struct xe_exec_queue *q = NULL;
> + struct xe_vm *vm = NULL;
> + u32 flags;
> + int ret = 0;
> +
> + xe_bo_lock(bo, false);
> + if (bo->vm)
> + vm = xe_vm_get(bo->vm);
> + flags = bo->flags;
> + xe_bo_unlock(bo);
> + /* Ban VM if BO is PPGTT */
> + if (vm && (flags & XE_BO_FLAG_PAGETABLE)) {
> + down_write(&vm->lock);
[Severity: Medium]
Will this lead to incorrect error reporting and telemetry?
When killing the PPGTT VM here, its ban reasons are not updated to include
DRM_XE_EXEC_QUEUE_BAN_REASON_PAGE_OFFLINE. This could cause the system logs
and userspace APIs to report a generic context reset rather than a hardware
memory fault mitigation event.
> + xe_vm_kill(vm, true);
> + up_write(&vm->lock);
> + }
> + if (vm)
> + xe_vm_put(vm);
> +
> + xe_bo_lock(bo, false);
> + q = READ_ONCE(bo->q);
> + /* Ban exec queue if BO is lrc */
> + if (q && xe_exec_queue_get_unless_zero(q)) {
> + /* ban queue */
> + q_to_put = q;
> + }
> +
> + if (bo->purgeable.state == XE_MADV_PURGEABLE_PURGED) {
> + /* Already purged by shrinker during unlocked window — nothing to do */
> + xe_bo_unlock(bo);
> + goto out;
> + }
> +
> + xe_bo_set_purgeable_state(bo, XE_MADV_PURGEABLE_DONTNEED);
> + ttm_bo_unmap_virtual(&bo->ttm); /* nuke CPU mmap + VRAM IO mappings */
> + if (xe_bo_is_pinned(bo))
> + xe_bo_unpin(bo);
[Severity: High]
Does this forceful unpinning without ownership corrupt pin count tracking?
When the offline handler processes a pinned BO, it unconditionally calls
xe_bo_unpin(bo), decreasing the pin count without taking ownership of the pin.
When the original legitimate owner later attempts to unpin the BO, the pin
count will underflow, triggering xe_assert(xe, xe_bo_is_pinned(bo)) inside
xe_bo_unpin() and resulting in a kernel crash.
> + ret = xe_ttm_bo_purge(&bo->ttm, &ctx);
> + xe_bo_unlock(bo);
> +
> +out:
> + if (q_to_put) {
[Severity: Critical]
Does this sequence cause a GPU use-after-free for LRC BOs?
xe_ttm_bo_purge() synchronously frees the VRAM backing pages into the buddy
allocator before the actively running GPU queue is explicitly halted here.
Since LRC BOs are actively accessed by running engines without per-job
execution fences, the hardware may still be running and writing to the
now-freed pages when they are reallocated.
[Severity: Medium]
Also, similar to the VM kill above, is it intentional that the exec queue is
killed here without having its ban_reason updated to
DRM_XE_EXEC_QUEUE_BAN_REASON_PAGE_OFFLINE?
> + xe_exec_queue_kill(q_to_put);
> + xe_exec_queue_put(q_to_put);
> + }
> +
> + return ret;
> +}
[ ... ]
> +static int xe_ttm_vram_reserve_page_at_addr(struct xe_device *xe, u64 addr,
> + struct xe_ttm_vram_mgr *vram_mgr, struct gpu_buddy *mm)
> +{
> + struct xe_ttm_vram_offline_resource *nentry;
> + struct ttm_buffer_object *tbo = NULL;
> + struct xe_bo *pbo_to_put = NULL;
> + struct gpu_buddy_block *block;
> + u64 size = SZ_4K;
> + int ret = 0;
> +
> + scoped_guard(mutex, &vram_mgr->lock) {
> + if (xe_ttm_vram_page_already_processed(vram_mgr, addr))
> + return -EEXIST;
> + block = gpu_buddy_allocated_addr_to_block(mm, addr);
> + if (WARN_ON(IS_ERR(block)))
> + return PTR_ERR(block);
> +
> + nentry = kzalloc_obj(*nentry);
> + if (!nentry)
> + return -ENOMEM;
> + INIT_LIST_HEAD(&nentry->blocks);
> + nentry->status = XE_PAGE_RESERVE_PENDING;
> + nentry->addr = addr;
[Severity: Medium]
Will this store the relative offset instead of the absolute Device Physical
Address?
The entry point xe_ttm_vram_handle_addr_fault() translates the absolute DPA
to a relative offset (addr - vr->dpa_base) before passing it to this function.
Storing the relative offset here means debug messages and FW offlining
mechanisms reading this struct will consume the wrong physical address.
> +
> + if (block) {
> + struct xe_bo *pbo;
> +
> + if (!block->private) {
> + /* Race: another thread just reserved this block */
> + kfree(nentry);
> + return -EEXIST;
> + }
> + tbo = block->private;
> + pbo = ttm_to_xe_bo(tbo);
> +
> + /* Get reference safely - BO may have zero refcount */
> + if (!xe_bo_get_unless_zero(pbo)) {
> + kfree(nentry);
> + return -ENOENT;
> + }
[Severity: High]
Does returning -ENOENT here trigger an unnecessary System Reset?
If a hardware memory fault lands on a BO that is concurrently being freed or
destroyed, xe_bo_get_unless_zero() fails and the function returns -ENOENT.
The caller xe_ttm_vram_handle_addr_fault() treats any negative error code
other than -EEXIST or -EOPNOTSUPP as a signal to reset the system. Triggering
a system reset because a BO was freed seems inappropriate, since the physical
page will soon become free and can be safely offlined anyway.
> + /*
> + * Critical kernel BO? Best-effort check without resv lock;
> + * worst case a concurrent pin causes reset path unnecessarily.
> + */
> + if ((pbo->ttm.type == ttm_bo_type_kernel &&
> + !(pbo->flags & XE_BO_FLAG_PINNED_LATE_RESTORE)) ||
> + (xe_bo_is_user(pbo) && xe_bo_is_pinned(pbo))) {
[Severity: High]
Could this lockless check lead to purging an actively pinned user BO?
Checking xe_bo_is_pinned(pbo) without holding the BO's reservation lock means
a user BO might not be pinned at the time of the check, but could be pinned
by another thread right before xe_ttm_vram_purge_page() locks the BO.
The purge logic will then forcefully unpin and destroy the BO, leaving the
concurrent thread with an invalid, unbacked BO.
> + kfree(nentry);
> + pbo_to_put = pbo;
> + drm_err(&xe->drm,
> + "%s: addr: 0x%llx is critical kernel bo, requesting SBR\n",
> + __func__, addr);
> + break;
> + }
> + ++vram_mgr->n_queued_pages;
> + list_add_rcu(&nentry->queued_link, &vram_mgr->queued_pages);
> + }
> + }
> +
> + /* Deferred put outside lock to avoid recursive deadlock */
> + if (pbo_to_put) {
> + xe_bo_put(pbo_to_put);
> + /* Hint System controller driver for reset with -EIO */
> + return -EIO;
> + }
> +
> + if (block) {
> + struct xe_ttm_vram_offline_resource *pos, *n;
> + struct xe_bo *pbo = ttm_to_xe_bo(tbo);
> +
> + /*
> + * Purge BO containing address - reference held from above.
> + * Note: brief window between purge (freeing blocks) and re-reserve
> + * below. If another allocation claims the block, buddy_alloc fails
> + * and the status will be shown as failed reservation.
> + */
> + ret = xe_ttm_vram_purge_page(xe, pbo);
> + xe_bo_put(pbo);
> + if (ret)
> + drm_warn(&xe->drm, "Purge failed at addr:0x%llx, ret:%d\n", addr, ret);
> +
> + /* Reserve page at address addr*/
> + scoped_guard(mutex, &vram_mgr->lock) {
> + ret = xe_ttm_vram_buddy_alloc(vram_mgr, addr, addr + size,
> + size, size, &nentry->blocks,
> + GPU_BUDDY_RANGE_ALLOCATION,
> + NULL, &nentry->used_visible_size);
> + if (ret) {
> + drm_warn(&xe->drm,
> + "Could not reserve page at addr:0x%llx, ret:%d\n",
> + addr, ret);
> + nentry->status = XE_PAGE_RESERVE_FAIL;
> + return ret;
> + }
> +
> + list_for_each_entry_safe(pos, n, &vram_mgr->queued_pages, queued_link) {
> + if (pos->addr == nentry->addr) {
> + --vram_mgr->n_queued_pages;
> + list_del_rcu(&pos->queued_link);
> + break;
> + }
> + }
> + list_add_rcu(&nentry->offlined_link, &vram_mgr->offlined_pages);
> + /* RAS will send command to FW for offlining page based on ret value */
> + ++vram_mgr->n_offlined_pages;
> + return ret;
> + }
> + } else {
> + struct xe_ttm_vram_offline_resource *pos, *n;
> +
> + scoped_guard(mutex, &vram_mgr->lock) {
> + ++vram_mgr->n_queued_pages;
[Severity: High]
Does dropping vram_mgr->lock before this point introduce a race window?
When the fault occurs on a free page, the function drops vram_mgr->lock after
the initial xe_ttm_vram_page_already_processed() check, without adding the new
entry to any tracking lists.
Reacquiring the lock here to perform the buddy allocation allows a race where
another fault for the same address arrives during the lockless window,
resulting in two concurrent buddy allocations for the same physical page and
duplicate list insertions. Normal GPU memory allocation could also claim the
buddy block before it is safely reserved.
> + list_add_rcu(&nentry->queued_link, &vram_mgr->queued_pages);
> + ret = xe_ttm_vram_buddy_alloc(vram_mgr, addr, addr + size,
> + size, size, &nentry->blocks,
> + GPU_BUDDY_RANGE_ALLOCATION,
> + NULL, &nentry->used_visible_size);
> + if (ret) {
> + drm_warn(&xe->drm,
> + "Could not reserve page at addr:0x%llx, ret:%d\n",
> + addr, ret);
> + nentry->status = XE_PAGE_RESERVE_FAIL;
> + return ret;
> + }
[ ... ]
> +static struct xe_vram_region *xe_ttm_vram_addr_to_region(struct xe_device *xe, u64 addr)
> +{
> + u64 raw_offset = xe_mmio_read64_2x32(&xe_device_get_root_tile(xe)->mmio, GSMBASE);
> + /* force a 4K (4096 bytes) page alignment */
> + u64 gsmbase_dpa = raw_offset & ~(u64)(PAGE_SIZE - 1);
> + struct xe_vram_region *vr;
> + struct xe_tile *tile;
> + int id;
> +
> + /* Addr from GSM? */
> + if (addr >= gsmbase_dpa)
> + /* Return NULL so the caller can request reset (SBR) */
> + return NULL;
[Severity: High]
Can this GSMBASE check incorrectly match valid VRAM addresses on multi-tile
devices?
In a multi-tile configuration, the VRAM device physical address (DPA) of
secondary tiles (e.g., Tile 1) is typically mapped higher than the root tile's
VRAM and GSM base. A valid hardware memory fault on a secondary tile will have
addr >= gsmbase_dpa evaluate to true. The function then falsely identifies the
fault as occurring in Graphics Stolen Memory and returns NULL, triggering an
unnecessary System Reset instead of offlining the faulty page.
> +
> + for_each_tile(tile, xe, id) {
> + vr = tile->mem.vram;
> + if (addr >= vr->dpa_base &&
> + addr < vr->dpa_base + vr->usable_size)
> + return vr;
> + }
> +
> + /*
> + * Return an explicit error pointer so the caller knows the addr
> + * is invalid and should be ignored, NOT SBR.
> + */
> + return ERR_PTR(-EOPNOTSUPP);
> +}
> +
> +/**
> + * xe_ttm_vram_handle_addr_fault - Handle vram physical address error flaged
> + * @xe: pointer to parent device
> + * @addr: physical faulty address
> + *
> + * Handle the physcial faulty address error on specific tile.
> + *
> + * Returns 0 for success, negative error code otherwise as follow:
> + * * %-EIO - critical BO or address outside any VRAM region; next action is reset.
> + * * %-EOPNOTSUPP - log-only policy or unknown address; no further action.
> + * * %-ENOMEM - allocation failure; next action is reset.
> + * * %-ENXIO - address not found in buddy; next action is reset.
> + * * %-EEXIST - address already processed; no further action.
> + * * % Any other negative error - next action is reset.
> + */
> +int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr)
> +{
> + struct xe_ttm_vram_mgr *vram_mgr;
> + struct xe_vram_region *vr;
> + struct gpu_buddy *mm;
> +
> + vr = xe_ttm_vram_addr_to_region(xe, addr);
> + if (IS_ERR(vr)) {
> + /*
> + * The addr is outside VRAM and GSM.
> + * Log a debug message if needed, and safely exit/ignore.
> + */
> + drm_dbg(&xe->drm, "Address %llx is out of bounds, ignoring fault.\n", addr);
> + return PTR_ERR(vr);
> + }
> + if (!vr) {
> + drm_err(&xe->drm, "%s:%d GSM addr:%llx error requesting SBR\n",
> + __func__, __LINE__, addr);
> + /* Hint System controller driver for reset with -EIO */
> + return -EIO;
> + }
> + vram_mgr = &vr->ttm;
> + mm = &vram_mgr->mm;
> +
> + /* Reserve page at address */
> + return xe_ttm_vram_reserve_page_at_addr(xe, addr - vr->dpa_base, vram_mgr, mm);
> +}
[Severity: High]
Does the missing page alignment for HW-reported faulty addresses cause the
buddy allocator to fail?
Hardware RAS components report faults using exact, unaligned byte addresses.
Since the unaligned address is passed directly as 'start' for a 4K buddy
allocation in xe_ttm_vram_buddy_alloc(), the unaligned range [start, start+4096)
spans two actual physical pages. The buddy allocator will fail to find a fully
contained 4K block and return -ENOSPC, preventing page offlining.
Should ALIGN_DOWN(addr, PAGE_SIZE) be applied before passing it down?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260818104055.3833974-14-tejas.upadhyay@intel.com?part=8
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH V17 09/12] drm/xe/configfs: Add vram bad page reservation policy
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
` (7 preceding siblings ...)
2026-08-18 10:41 ` [PATCH V17 08/12] drm/xe/vram: Add VRAM page offline fault handler Tejas Upadhyay
@ 2026-08-18 10:41 ` Tejas Upadhyay
2026-08-18 10:57 ` sashiko-bot
2026-08-18 10:41 ` [PATCH V17 10/12] drm/xe: Add sysfs interface for bad gpu vram pages Tejas Upadhyay
` (7 subsequent siblings)
16 siblings, 1 reply; 26+ messages in thread
From: Tejas Upadhyay @ 2026-08-18 10:41 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, Tejas Upadhyay
The interface enables setting the policy for how bad pages are
handled in VRAM. This is crucial for maintaining system
stability in scenarios where VRAM degradation occurs.
By default policy will be "reserve", which can be changed to
"logging" only. val 0 means Logging only, 1 means logging and
offlining.
v4:
- document val 0/1 meaning (Himal)
v3:
- All FW communication moved under RAS
v2:
- Add CRI check and rebase
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_configfs.c | 67 +++++++++++++++++++++++++++-
drivers/gpu/drm/xe/xe_configfs.h | 2 +
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 10 +++++
3 files changed, 78 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 052cce962161..ead59208858f 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -61,7 +61,8 @@
* ├── survivability_mode
* ├── gt_types_allowed
* ├── engines_allowed
- * └── enable_psmi
+ * ├── enable_psmi
+ * └── bad_page_reservation
*
* After configuring the attributes as per next section, the device can be
* probed with::
@@ -159,6 +160,19 @@
*
* This attribute can only be set before binding to the device.
*
+ * Bad pages reservation:
+ * ---------------------
+ *
+ * Controls how bad VRAM pages are handled:
+ * 0 - Logging only (report in dmesg, no offlining)
+ * 1 - Logging and offlining (default)
+ *
+ * Example to disable offlining::
+ *
+ * # echo 0 > /sys/kernel/config/xe/0000:03:00.0/bad_page_reservation
+ *
+ * This attribute can only be set before binding to the device.
+ *
* Context restore BB
* ------------------
*
@@ -275,6 +289,7 @@ struct xe_config_group_device {
bool survivability_mode;
bool enable_psmi;
bool enable_multi_queue;
+ bool bad_page_reservation;
struct {
unsigned int max_vfs;
bool admin_only_pf;
@@ -295,6 +310,7 @@ static const struct xe_config_device device_defaults = {
.survivability_mode = false,
.enable_psmi = false,
.enable_multi_queue = true,
+ .bad_page_reservation = true,
.sriov = {
.max_vfs = XE_DEFAULT_MAX_VFS,
.admin_only_pf = XE_DEFAULT_ADMIN_ONLY_PF,
@@ -616,6 +632,32 @@ static ssize_t enable_multi_queue_store(struct config_item *item, const char *pa
return len;
}
+static ssize_t bad_page_reservation_show(struct config_item *item, char *page)
+{
+ struct xe_config_device *dev = to_xe_config_device(item);
+
+ return sprintf(page, "%d\n", dev->bad_page_reservation);
+}
+
+static ssize_t bad_page_reservation_store(struct config_item *item, const char *page, size_t len)
+{
+ struct xe_config_group_device *dev = to_xe_config_group_device(item);
+ bool val;
+ int ret;
+
+ ret = kstrtobool(page, &val);
+ if (ret)
+ return ret;
+
+ guard(mutex)(&dev->lock);
+ if (is_bound(dev))
+ return -EBUSY;
+
+ dev->config.bad_page_reservation = val;
+
+ return len;
+}
+
static bool wa_bb_read_advance(bool dereference, char **p,
const char *append, size_t len,
size_t *max_size)
@@ -855,6 +897,7 @@ CONFIGFS_ATTR(, ctx_restore_mid_bb);
CONFIGFS_ATTR(, ctx_restore_post_bb);
CONFIGFS_ATTR(, enable_multi_queue);
CONFIGFS_ATTR(, enable_psmi);
+CONFIGFS_ATTR(, bad_page_reservation);
CONFIGFS_ATTR(, engines_allowed);
CONFIGFS_ATTR(, gt_types_allowed);
CONFIGFS_ATTR(, survivability_mode);
@@ -864,6 +907,7 @@ static struct configfs_attribute *xe_config_device_attrs[] = {
&attr_ctx_restore_post_bb,
&attr_enable_multi_queue,
&attr_enable_psmi,
+ &attr_bad_page_reservation,
&attr_engines_allowed,
&attr_gt_types_allowed,
&attr_survivability_mode,
@@ -1142,6 +1186,7 @@ static void dump_custom_dev_config(struct pci_dev *pdev,
PRI_CUSTOM_ATTR("%llx", engines_allowed);
PRI_CUSTOM_ATTR("%d", enable_multi_queue);
PRI_CUSTOM_ATTR("%d", enable_psmi);
+ PRI_CUSTOM_ATTR("%d", bad_page_reservation);
PRI_CUSTOM_ATTR("%d", survivability_mode);
PRI_CUSTOM_ATTR("%u", sriov.admin_only_pf);
@@ -1290,6 +1335,26 @@ bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev)
return ret;
}
+/**
+ * xe_configfs_get_bad_page_reservation - get configfs bad_page_reservation setting
+ * @pdev: pci device
+ *
+ * Return: bad_page_reservation setting in configfs
+ */
+bool xe_configfs_get_bad_page_reservation(struct pci_dev *pdev)
+{
+ struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ bool ret;
+
+ if (!dev)
+ return device_defaults.bad_page_reservation;
+
+ ret = dev->config.bad_page_reservation;
+ config_group_put(&dev->group);
+
+ return ret;
+}
+
/**
* xe_configfs_get_ctx_restore_mid_bb - get configfs ctx_restore_mid_bb setting
* @pdev: pci device
diff --git a/drivers/gpu/drm/xe/xe_configfs.h b/drivers/gpu/drm/xe/xe_configfs.h
index 4fbbeafba473..7405cc5f3207 100644
--- a/drivers/gpu/drm/xe/xe_configfs.h
+++ b/drivers/gpu/drm/xe/xe_configfs.h
@@ -24,6 +24,7 @@ bool xe_configfs_media_gt_allowed(struct pci_dev *pdev);
u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev);
bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev);
bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev);
+bool xe_configfs_get_bad_page_reservation(struct pci_dev *pdev);
u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
enum xe_engine_class class,
const u32 **cs);
@@ -44,6 +45,7 @@ static inline bool xe_configfs_media_gt_allowed(struct pci_dev *pdev) { return t
static inline u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev) { return U64_MAX; }
static inline bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev) { return false; }
static inline bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev) { return true; }
+static inline bool xe_configfs_get_bad_page_reservation(struct pci_dev *pdev) { return true; }
static inline u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
enum xe_engine_class class,
const u32 **cs) { return 0; }
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 9311aa3728f8..51b98460481d 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -16,6 +16,7 @@
#include "regs/xe_regs.h"
#include "xe_bo.h"
#include "xe_configfs.h"
+#include "xe_configfs.h"
#include "xe_device.h"
#include "xe_exec_queue.h"
#include "xe_lrc.h"
@@ -841,6 +842,7 @@ int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr)
struct xe_ttm_vram_mgr *vram_mgr;
struct xe_vram_region *vr;
struct gpu_buddy *mm;
+ bool policy;
vr = xe_ttm_vram_addr_to_region(xe, addr);
if (IS_ERR(vr)) {
@@ -860,6 +862,14 @@ int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr)
vram_mgr = &vr->ttm;
mm = &vram_mgr->mm;
+ policy = xe_configfs_get_bad_page_reservation(to_pci_dev(xe->drm.dev));
+ if (!policy) {
+ drm_err(&xe->drm, "0x%llx is reported as corrupted address by HW\n",
+ addr);
+ /* Let RAS report to FW to drop addr from SRAM queue */
+ return -EOPNOTSUPP;
+ }
+
/* Reserve page at address */
return xe_ttm_vram_reserve_page_at_addr(xe, addr - vr->dpa_base, vram_mgr, mm);
}
--
2.52.0
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH V17 09/12] drm/xe/configfs: Add vram bad page reservation policy
2026-08-18 10:41 ` [PATCH V17 09/12] drm/xe/configfs: Add vram bad page reservation policy Tejas Upadhyay
@ 2026-08-18 10:57 ` sashiko-bot
0 siblings, 0 replies; 26+ messages in thread
From: sashiko-bot @ 2026-08-18 10:57 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [Medium] Dynamic configfs lookup at runtime causes state loss if the directory is removed.
- [Medium] Silent hardware corruption offlining under default policy (skips logging).
- [Low] Redundant `#include "xe_configfs.h"` directive.
--
--- Patch [9]: [PATCH V17 09/12] drm/xe/configfs: Add vram bad page reservation policy ---
commit ce0caab1275a7dd6bc0fdd6afde67d346ea6c808
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
drm/xe/configfs: Add vram bad page reservation policy
The interface enables setting the policy for how bad pages are
handled in VRAM. This is crucial for maintaining system
stability in scenarios where VRAM degradation occurs.
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> index 9311aa3728f84..51b98460481d9 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> @@ -15,6 +15,8 @@
> #include "regs/xe_regs.h"
> #include "xe_bo.h"
> #include "xe_configfs.h"
> +#include "xe_configfs.h"
[Severity: Low]
This isn't a bug, but is it intentional to include xe_configfs.h twice
on consecutive lines here?
> #include "xe_device.h"
> #include "xe_exec_queue.h"
[ ... ]
> @@ -860,6 +862,14 @@ int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr)
> vram_mgr = &vr->ttm;
> mm = &vram_mgr->mm;
>
> + policy = xe_configfs_get_bad_page_reservation(to_pci_dev(xe->drm.dev));
[Severity: Medium]
Is it safe to dynamically query the configfs tree during the hardware fault
handler?
If userspace removes the configfs directory via rmdir,
xe_configfs_get_bad_page_reservation() will fail to find the group and
silently revert to the default policy.
Since the attribute can only be set before binding, would it be more
robust to cache this value in struct xe_device at probe time rather than
evaluating it dynamically at runtime?
> + if (!policy) {
> + drm_err(&xe->drm, "0x%llx is reported as corrupted address by HW\n",
> + addr);
> + /* Let RAS report to FW to drop addr from SRAM queue */
> + return -EOPNOTSUPP;
> + }
[Severity: Medium]
Does this skip logging when the policy is set to offlining?
The commit message states that policy 1 means "Logging and offlining"
and 0 means "Logging only". However, the error logging is placed inside
the if (!policy) block. If policy is 1 (the default), the handler bypasses
this block and proceeds to reserve the page without logging the
degradation in dmesg.
> +
> /* Reserve page at address */
> return xe_ttm_vram_reserve_page_at_addr(xe, addr - vr->dpa_base, vram_mgr, mm);
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260818104055.3833974-14-tejas.upadhyay@intel.com?part=9
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH V17 10/12] drm/xe: Add sysfs interface for bad gpu vram pages
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
` (8 preceding siblings ...)
2026-08-18 10:41 ` [PATCH V17 09/12] drm/xe/configfs: Add vram bad page reservation policy Tejas Upadhyay
@ 2026-08-18 10:41 ` Tejas Upadhyay
2026-08-18 10:54 ` sashiko-bot
2026-08-18 10:41 ` [PATCH V17 11/12] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN Tejas Upadhyay
` (6 subsequent siblings)
16 siblings, 1 reply; 26+ messages in thread
From: Tejas Upadhyay @ 2026-08-18 10:41 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, Tejas Upadhyay
Include a sysfs interface designed to expose information about bad
VRAM pages — those identified as having hardware faults (e.g., ECC
errors). This interface allows userspace tools and administrators to
monitor the health of the GPU's local memory and track the status of
page retirement. Details on bad gpu vram pages can be found under
/sys/bus/pci/devices/<bdf>/vram_bad_pages.
The format is: pfn : gpu_page_size : flags
flags:
R: reserved, this gpu page is reserved.
P: pending for reserve, this gpu page is marked as bad, will be
reserved in next window of page_reserve.
F: unable to reserve, this gpu page can't be reserved due to some
reasons.
For example, cat /sys/bus/pci/devices/<bdf>/vram_bad_pages:
max_pages : 10000
0x0000000000000000 : 0x0000000000001000 : R
0x0000000000001234 : 0x0000000000001000 : P
The sysfs binary attribute is created under the PCI device kobject
when the platform supports it and the configfs bad_page_reservation
policy is enabled. Uses RCU-protected list traversal so reads never
block normal VRAM allocation operations.
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_device_sysfs.c | 7 +
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 141 +++++++++++++++++++++
drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 1 +
drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 2 +
4 files changed, 151 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_device_sysfs.c b/drivers/gpu/drm/xe/xe_device_sysfs.c
index a73e0e957cb0..47c5be4180fe 100644
--- a/drivers/gpu/drm/xe/xe_device_sysfs.c
+++ b/drivers/gpu/drm/xe/xe_device_sysfs.c
@@ -8,12 +8,14 @@
#include <linux/pci.h>
#include <linux/sysfs.h>
+#include "xe_configfs.h"
#include "xe_device.h"
#include "xe_device_sysfs.h"
#include "xe_mmio.h"
#include "xe_pcode_api.h"
#include "xe_pcode.h"
#include "xe_pm.h"
+#include "xe_ttm_vram_mgr.h"
/**
* DOC: Xe device sysfs
@@ -267,6 +269,7 @@ static const struct attribute_group auto_link_downgrade_attr_group = {
int xe_device_sysfs_init(struct xe_device *xe)
{
struct device *dev = xe->drm.dev;
+ bool policy;
int ret;
if (xe->d3cold.capable) {
@@ -285,5 +288,9 @@ int xe_device_sysfs_init(struct xe_device *xe)
return ret;
}
+ policy = xe_configfs_get_bad_page_reservation(to_pci_dev(dev));
+ if (xe->info.platform == XE_CRESCENTISLAND && policy)
+ xe_ttm_vram_sysfs_init(xe);
+
return 0;
}
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 51b98460481d..372bb25448f6 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -874,3 +874,144 @@ int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr)
return xe_ttm_vram_reserve_page_at_addr(xe, addr - vr->dpa_base, vram_mgr, mm);
}
EXPORT_SYMBOL(xe_ttm_vram_handle_addr_fault);
+
+static size_t serialize_bad_pages(struct xe_ttm_vram_mgr *mgr, char *buf, size_t max_len)
+{
+ struct xe_ttm_vram_offline_resource *pos;
+ struct gpu_buddy_block *block;
+ size_t s = 0;
+ int printed;
+ int count = 0;
+
+ rcu_read_lock();
+
+ printed = scnprintf(buf + s, max_len - s, "max_pages: %d\n", mgr->max_pages);
+ s += printed;
+
+ list_for_each_entry_rcu(pos, &mgr->offlined_pages, offlined_link) {
+ if (count >= 10000 || s >= max_len)
+ break;
+
+ block = list_first_entry_or_null(&pos->blocks, struct gpu_buddy_block, link);
+ if (!block)
+ continue;
+
+ printed = scnprintf(buf + s, max_len - s, "0x%016llx : 0x%016llx : %c\n",
+ gpu_buddy_block_offset(block) >> PAGE_SHIFT,
+ gpu_buddy_block_size(&mgr->mm, block), 'R');
+ s += printed;
+ count++;
+ }
+ list_for_each_entry_rcu(pos, &mgr->queued_pages, queued_link) {
+ u64 pfn, blk_size;
+
+ if (count >= 10000 || s >= max_len)
+ break;
+
+ block = list_first_entry_or_null(&pos->blocks, struct gpu_buddy_block, link);
+ if (block) {
+ pfn = gpu_buddy_block_offset(block) >> PAGE_SHIFT;
+ blk_size = gpu_buddy_block_size(&mgr->mm, block);
+ } else {
+ pfn = pos->addr >> PAGE_SHIFT;
+ blk_size = PAGE_SIZE;
+ }
+
+ printed = scnprintf(buf + s, max_len - s, "0x%016llx : 0x%016llx : %c\n",
+ pfn, blk_size, pos->status ? 'F' : 'P');
+ s += printed;
+ count++;
+ }
+
+ rcu_read_unlock();
+ return s;
+}
+
+static ssize_t vram_bad_pages_bin_read(struct file *filp, struct kobject *kobj,
+ const struct bin_attribute *attr, char *buf,
+ loff_t off, size_t count)
+{
+ struct device *dev = kobj_to_dev(kobj);
+ struct pci_dev *pdev = to_pci_dev(dev);
+ struct ttm_resource_manager *man;
+ struct xe_ttm_vram_mgr *mgr;
+ size_t allocation_size;
+ struct xe_device *xe;
+ size_t full_data_len;
+ int active_entries;
+ char *temp_buf;
+
+ xe = pdev_to_xe_device(pdev);
+ man = ttm_manager_type(&xe->ttm, XE_PL_VRAM0);
+ if (!man)
+ return -ENODEV;
+ mgr = to_xe_ttm_vram_mgr(man);
+
+ active_entries = READ_ONCE(mgr->n_offlined_pages) + READ_ONCE(mgr->n_queued_pages);
+
+ if (active_entries > 10000)
+ active_entries = 10000;
+
+ allocation_size = 64 + (active_entries * 48);
+
+ temp_buf = kvmalloc(allocation_size, GFP_KERNEL);
+ if (!temp_buf)
+ return -ENOMEM;
+
+ /* serialize_bad_pages uses rcu_read_lock internally */
+ full_data_len = serialize_bad_pages(mgr, temp_buf, allocation_size);
+
+ if (off >= full_data_len) {
+ kvfree(temp_buf);
+ return 0;
+ }
+
+ if (off + count > full_data_len)
+ count = full_data_len - off;
+
+ memcpy(buf, temp_buf + off, count);
+
+ kvfree(temp_buf);
+ return count;
+}
+
+static const struct bin_attribute bin_attr_vram_bad_pages = {
+ .attr = { .name = "vram_bad_pages", .mode = 0444 },
+ .read = vram_bad_pages_bin_read,
+ .size = 0,
+};
+
+static void xe_ttm_vram_sysfs_fini(void *arg)
+{
+ struct xe_device *xe = arg;
+ struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
+
+ sysfs_remove_bin_file(&pdev->dev.kobj, &bin_attr_vram_bad_pages);
+}
+
+/**
+ * xe_ttm_vram_sysfs_init - Initialize vram bad pages sysfs binary file
+ * @xe: Xe Device object
+ *
+ * Creates a binary sysfs file under the PCI device for reading
+ * offlined and queued VRAM pages. Supports large entry counts
+ * via offset/count pagination.
+ *
+ * Returns: 0 on success, negative error code on error.
+ */
+int xe_ttm_vram_sysfs_init(struct xe_device *xe)
+{
+ struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
+ int err;
+
+ err = sysfs_create_bin_file(&pdev->dev.kobj, &bin_attr_vram_bad_pages);
+ if (err) {
+ dev_err(&pdev->dev,
+ "Failed to create vram_bad_pages sysfs: %d\n",
+ err);
+ return err;
+ }
+
+ return devm_add_action_or_reset(&pdev->dev, xe_ttm_vram_sysfs_fini, xe);
+}
+EXPORT_SYMBOL(xe_ttm_vram_sysfs_init);
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
index d5392beff30c..eb55b0f74ef3 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
@@ -32,6 +32,7 @@ void xe_ttm_vram_get_used(struct ttm_resource_manager *man,
u64 *used, u64 *used_visible);
int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr);
+int xe_ttm_vram_sysfs_init(struct xe_device *xe);
static inline struct xe_ttm_vram_mgr_resource *
to_xe_ttm_vram_mgr_resource(struct ttm_resource *res)
{
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
index dc97b0ad0e51..efcf3e1d4e80 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
@@ -37,6 +37,8 @@ struct xe_ttm_vram_mgr {
struct mutex lock;
/** @mem_type: The TTM memory type */
u32 mem_type;
+ /** @max_pages: max pages that can be in offline queue retrieved from FW */
+ u16 max_pages;
};
/**
--
2.52.0
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH V17 10/12] drm/xe: Add sysfs interface for bad gpu vram pages
2026-08-18 10:41 ` [PATCH V17 10/12] drm/xe: Add sysfs interface for bad gpu vram pages Tejas Upadhyay
@ 2026-08-18 10:54 ` sashiko-bot
0 siblings, 0 replies; 26+ messages in thread
From: sashiko-bot @ 2026-08-18 10:54 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 5 potential issue(s) to consider:
- [High] Lockless access to `pos->blocks` in `serialize_bad_pages` under RCU races with non-RCU list mutations, leading to potential Use-After-Free and uninitialized reads.
- [Medium] Multi-tile VRAM support is broken in the device-level sysfs interface.
- [Medium] The `max_pages` field is never initialized or retrieved from the firmware, resulting in `max_pages: 0` in the sysfs output.
- [Medium] Stateless `bin_attribute` read handler causes corrupted output (data shifting/duplication) during multi-chunk reads.
- [Medium] Racy `allocation_size` calculation and incorrect loop termination condition cause mid-line truncation of sysfs output and dead code.
--
--- Patch [10]: [PATCH V17 10/12] drm/xe: Add sysfs interface for bad gpu vram pages ---
commit ec8b371c3f2a5abb7fd5a41d3967e178a7625d0a
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
drm/xe: Add sysfs interface for bad gpu vram pages
This patch adds a sysfs interface at /sys/bus/pci/devices/<bdf>/vram_bad_pages
to expose bad VRAM pages resulting from hardware faults. It uses an RCU-protected
list traversal to read the bad pages asynchronously without blocking normal VRAM
allocation operations.
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> index 51b98460481d9..372bb25448f61 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
[ ... ]
> @@ -874,3 +874,144 @@ int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr)
> return xe_ttm_vram_reserve_page_at_addr(xe, addr - vr->dpa_base, vram_mgr, mm);
> }
> EXPORT_SYMBOL(xe_ttm_vram_handle_addr_fault);
> +
> +static size_t serialize_bad_pages(struct xe_ttm_vram_mgr *mgr, char *buf, size_t max_len)
> +{
> + struct xe_ttm_vram_offline_resource *pos;
> + struct gpu_buddy_block *block;
> + size_t s = 0;
> + int printed;
> + int count = 0;
> +
> + rcu_read_lock();
> +
> + printed = scnprintf(buf + s, max_len - s, "max_pages: %d\n", mgr->max_pages);
[Severity: Medium]
Is max_pages ever populated by the firmware? It appears to be added to
struct xe_ttm_vram_mgr and printed here, but never initialized, which would
result in it always printing 0.
> + s += printed;
> +
> + list_for_each_entry_rcu(pos, &mgr->offlined_pages, offlined_link) {
> + if (count >= 10000 || s >= max_len)
> + break;
[Severity: Medium]
Does this loop terminate correctly when the buffer is exhausted? When scnprintf
runs out of space, it returns max_len - 1. This leaves s at max_len - 1, meaning
the condition s >= max_len evaluates to false.
Could this cause the loop to iterate up to 10000 times, repeatedly calling
scnprintf with 1 byte remaining?
> +
> + block = list_first_entry_or_null(&pos->blocks, struct gpu_buddy_block, link);
[Severity: High]
Can this lockless access to pos->blocks race with list mutations? If a thread
encounters a VRAM fault, xe_ttm_vram_reserve_page_at_addr() publishes the entry
to the queued_pages list before populating its blocks:
list_add_rcu(&nentry->queued_link, &vram_mgr->queued_pages);
ret = xe_ttm_vram_buddy_alloc(..., &nentry->blocks, ...);
Since xe_ttm_vram_buddy_alloc() modifies nentry->blocks using non-RCU list
operations without memory barriers, could serialize_bad_pages() dereference a
partially written pointer or a block being freed on an allocation error path?
> + if (!block)
> + continue;
> +
> + printed = scnprintf(buf + s, max_len - s, "0x%016llx : 0x%016llx : %c\n",
> + gpu_buddy_block_offset(block) >> PAGE_SHIFT,
> + gpu_buddy_block_size(&mgr->mm, block), 'R');
> + s += printed;
> + count++;
> + }
[ ... ]
> +static ssize_t vram_bad_pages_bin_read(struct file *filp, struct kobject *kobj,
> + const struct bin_attribute *attr, char *buf,
> + loff_t off, size_t count)
> +{
> + struct device *dev = kobj_to_dev(kobj);
> + struct pci_dev *pdev = to_pci_dev(dev);
> + struct ttm_resource_manager *man;
> + struct xe_ttm_vram_mgr *mgr;
> + size_t allocation_size;
> + struct xe_device *xe;
> + size_t full_data_len;
> + int active_entries;
> + char *temp_buf;
> +
> + xe = pdev_to_xe_device(pdev);
> + man = ttm_manager_type(&xe->ttm, XE_PL_VRAM0);
[Severity: Medium]
Does this sysfs interface support multi-tile devices correctly? By explicitly
fetching XE_PL_VRAM0, this appears to ignore bad pages on any secondary VRAM
tiles.
Furthermore, since the exported PFNs are relative to the VRAM region's dpa_base,
could the output be ambiguous on multi-tile architectures without an explicit
tile identifier?
> + if (!man)
> + return -ENODEV;
> + mgr = to_xe_ttm_vram_mgr(man);
> +
> + active_entries = READ_ONCE(mgr->n_offlined_pages) + READ_ONCE(mgr->n_queued_pages);
> +
> + if (active_entries > 10000)
> + active_entries = 10000;
> +
> + allocation_size = 64 + (active_entries * 48);
[Severity: Medium]
Could this lockless allocation size calculation truncate the output? If the list
of offlined or queued pages grows between this calculation and the RCU list
traversal in serialize_bad_pages(), the buffer might be too small to hold the
full output.
> +
> + temp_buf = kvmalloc(allocation_size, GFP_KERNEL);
> + if (!temp_buf)
> + return -ENOMEM;
> +
> + /* serialize_bad_pages uses rcu_read_lock internally */
> + full_data_len = serialize_bad_pages(mgr, temp_buf, allocation_size);
> +
> + if (off >= full_data_len) {
> + kvfree(temp_buf);
> + return 0;
> + }
> +
> + if (off + count > full_data_len)
> + count = full_data_len - off;
> +
> + memcpy(buf, temp_buf + off, count);
[Severity: Medium]
Is it safe to regenerate the text dynamically on every read chunk? Since
bin_attribute read callbacks do not persist state across multiple reads, if the
VRAM page list changes between consecutive read syscalls on the same file
descriptor, the offsets will no longer align.
Could this cause corrupted, duplicated, or truncated text output for userspace
tools parsing the file?
> +
> + kvfree(temp_buf);
> + return count;
> +}
[ ... ]
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
> index dc97b0ad0e510..efcf3e1d4e80c 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
> @@ -37,6 +37,8 @@ struct xe_ttm_vram_mgr {
> struct mutex lock;
> /** @mem_type: The TTM memory type */
> u32 mem_type;
> + /** @max_pages: max pages that can be in offline queue retrieved from FW */
> + u16 max_pages;
[Severity: Medium]
As mentioned earlier, is this max_pages field actually initialized and retrieved
from the firmware anywhere in the codebase?
> };
>
> /**
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260818104055.3833974-14-tejas.upadhyay@intel.com?part=10
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH V17 11/12] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
` (9 preceding siblings ...)
2026-08-18 10:41 ` [PATCH V17 10/12] drm/xe: Add sysfs interface for bad gpu vram pages Tejas Upadhyay
@ 2026-08-18 10:41 ` Tejas Upadhyay
2026-08-18 10:58 ` sashiko-bot
2026-08-18 10:41 ` [PATCH V17 12/12] drm/xe: Add fault-inject based VRAM page offline injection Tejas Upadhyay
` (5 subsequent siblings)
16 siblings, 1 reply; 26+ messages in thread
From: Tejas Upadhyay @ 2026-08-18 10:41 UTC (permalink / raw)
To: intel-xe
Cc: himal.prasad.ghimiray, Tejas Upadhyay, José Roberto de Souza,
Michal Mrozek, Rodrigo Vivi
Extend DRM_XE_EXEC_QUEUE_GET_PROPERTY_BAN to return a bitmask indicating
the reason for the ban, rather than a simple boolean. This allows
userspace to distinguish between different ban causes:
- DRM_XE_EXEC_QUEUE_BAN_REASON_GPU_HANG (bit 0): exec queue was banned
due to a GPU hang or job timeout detected by the TDR.
- DRM_XE_EXEC_QUEUE_BAN_REASON_PAGE_OFFLINE (bit 1): exec queue was
banned because a VRAM page backing its resources was taken offline.
The ban_reason field is added to struct xe_exec_queue and set at the
point where the ban is triggered:
- In guc_exec_queue_timedout_job() for GPU hang.
- In xe_ttm_vram_purge_page() for memory page offline, before calling
xe_exec_queue_kill() or xe_vm_kill().
The reset_status op is updated to return u64 with the reason bitmask.
When a queue is banned but no explicit reason was recorded (e.g., from a
generic CAT error), it defaults to GPU_HANG for backward compatibility.
A value of 0 means the exec queue is not banned.
v3(Rodrigo):
- Add doc in xe_drm.h
v2(Sashiko):
- Use atomic_t for ban_reason to fix concurrent updates from TDR and
page-offline
- Guard GPU_HANG bit with !exec_queue_killed to avoid masking
page-offline reason
- Clear ban_reason on queue recovery (clear_exec_queue_banned path)
- Use atomic_read in guc_exec_queue_reset_status for lockless read
Assisted-by: Copilot:claude-opus-4.6
Acked-by: José Roberto de Souza <jose.souza@intel.com>
Acked-by: Michal Mrozek <michal.mrozek@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_exec_queue_types.h | 7 ++++--
drivers/gpu/drm/xe/xe_execlist.c | 4 +--
drivers/gpu/drm/xe/xe_guc_submit.c | 32 ++++++++++++++++++++----
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 8 ++++++
include/uapi/drm/xe_drm.h | 18 ++++++++++++-
5 files changed, 59 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_exec_queue_types.h b/drivers/gpu/drm/xe/xe_exec_queue_types.h
index b2276559c2f6..a21916359e2f 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue_types.h
+++ b/drivers/gpu/drm/xe/xe_exec_queue_types.h
@@ -156,6 +156,9 @@ struct xe_exec_queue {
*/
unsigned long flags;
+ /** @ban_reason: Bitmask of ban reasons (DRM_XE_EXEC_QUEUE_BAN_REASON_*) */
+ atomic_t ban_reason;
+
union {
/** @multi_gt_list: list head for VM bind engines if multi-GT */
struct list_head multi_gt_list;
@@ -350,8 +353,8 @@ struct xe_exec_queue_ops {
* signalled when this function is called.
*/
void (*resume)(struct xe_exec_queue *q);
- /** @reset_status: check exec queue reset status */
- bool (*reset_status)(struct xe_exec_queue *q);
+ /** @reset_status: check exec queue ban status, returns ban reason bitmask */
+ u64 (*reset_status)(struct xe_exec_queue *q);
};
#endif
diff --git a/drivers/gpu/drm/xe/xe_execlist.c b/drivers/gpu/drm/xe/xe_execlist.c
index 0d0db66c6ea2..a36db39dcda8 100644
--- a/drivers/gpu/drm/xe/xe_execlist.c
+++ b/drivers/gpu/drm/xe/xe_execlist.c
@@ -453,10 +453,10 @@ static void execlist_exec_queue_resume(struct xe_exec_queue *q)
/* NIY */
}
-static bool execlist_exec_queue_reset_status(struct xe_exec_queue *q)
+static u64 execlist_exec_queue_reset_status(struct xe_exec_queue *q)
{
/* NIY */
- return false;
+ return 0;
}
static const struct xe_exec_queue_ops execlist_exec_queue_ops = {
diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
index 9036f89dff7d..f52577de1ac2 100644
--- a/drivers/gpu/drm/xe/xe_guc_submit.c
+++ b/drivers/gpu/drm/xe/xe_guc_submit.c
@@ -6,6 +6,7 @@
#include "xe_guc_submit.h"
#include <linux/bitfield.h>
+#include <uapi/drm/xe_drm.h>
#include <linux/bitmap.h>
#include <linux/circ_buf.h>
#include <linux/dma-fence-array.h>
@@ -1593,6 +1594,12 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
if (!exec_queue_killed(q))
wedged = guc_submit_hint_wedged(exec_queue_to_guc(q));
+ /*
+ * Only tag as GPU hang if this is the original timeout, not a
+ * consequence of a prior kill (e.g., page-offline).
+ */
+ if (!exec_queue_killed(q))
+ atomic_or(DRM_XE_EXEC_QUEUE_BAN_REASON_GPU_HANG, &q->ban_reason);
set_exec_queue_banned(q);
/* Kick job / queue off hardware */
@@ -1676,6 +1683,9 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
if (timeout_needs_gt_reset(q, job, skip_timeout_check)) {
if (!xe_sched_invalidate_job(job, 2)) {
clear_exec_queue_banned(q);
+ /* protect concurrent page offline reasons */
+ atomic_andnot(DRM_XE_EXEC_QUEUE_BAN_REASON_GPU_HANG,
+ &q->ban_reason);
xe_gt_reset_async(q->gt);
goto rearm;
}
@@ -2570,13 +2580,25 @@ static void guc_exec_queue_multi_queue_drop_suspend(struct xe_exec_queue *q)
}
}
-static bool guc_exec_queue_reset_status(struct xe_exec_queue *q)
+static u64 guc_exec_queue_reset_status(struct xe_exec_queue *q)
{
- if (xe_exec_queue_is_multi_queue_secondary(q) &&
- guc_exec_queue_reset_status(xe_exec_queue_multi_queue_primary(q)))
- return true;
+ if (xe_exec_queue_is_multi_queue_secondary(q)) {
+ u64 status = guc_exec_queue_reset_status(xe_exec_queue_multi_queue_primary(q));
- return exec_queue_reset(q) || exec_queue_killed_or_banned_or_wedged(q);
+ if (status)
+ return status;
+ }
+
+ if (exec_queue_reset(q) || exec_queue_killed_or_banned_or_wedged(q)) {
+ u64 reason = atomic_read_acquire(&q->ban_reason);
+
+ /* If no specific reason was recorded, default to GPU hang */
+ if (!reason)
+ reason = DRM_XE_EXEC_QUEUE_BAN_REASON_GPU_HANG;
+ return reason;
+ }
+
+ return 0;
}
/*
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 372bb25448f6..18459804fc04 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -9,6 +9,7 @@
#include <drm/drm_managed.h>
#include <drm/drm_drv.h>
#include <drm/drm_buddy.h>
+#include <uapi/drm/xe_drm.h>
#include <drm/ttm/ttm_placement.h>
#include <drm/ttm/ttm_range_manager.h>
@@ -596,7 +597,12 @@ static int xe_ttm_vram_purge_page(struct xe_device *xe, struct xe_bo *bo)
xe_bo_unlock(bo);
/* Ban VM if BO is PPGTT */
if (vm && (flags & XE_BO_FLAG_PAGETABLE)) {
+ struct xe_exec_queue *eq;
+
down_write(&vm->lock);
+ list_for_each_entry(eq, &vm->preempt.exec_queues, lr.link)
+ atomic_or(DRM_XE_EXEC_QUEUE_BAN_REASON_PAGE_OFFLINE, &eq->ban_reason);
+ smp_wmb(); /* Force all queue bits to be visible before killing the VM */
xe_vm_kill(vm, true);
up_write(&vm->lock);
}
@@ -608,6 +614,8 @@ static int xe_ttm_vram_purge_page(struct xe_device *xe, struct xe_bo *bo)
/* Ban exec queue if BO is lrc */
if (q && xe_exec_queue_get_unless_zero(q)) {
/* ban queue */
+ atomic_or(DRM_XE_EXEC_QUEUE_BAN_REASON_PAGE_OFFLINE, &q->ban_reason);
+ smp_wmb(); /* Force bit change to finish before state change triggers */
q_to_put = q;
}
diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
index 509202a7b13e..ee4a921b2e6e 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -1491,6 +1491,12 @@ struct drm_xe_exec_queue_destroy {
*
* The @property can be:
* - %DRM_XE_EXEC_QUEUE_GET_PROPERTY_BAN
+ *
+ * For %DRM_XE_EXEC_QUEUE_GET_PROPERTY_BAN, @value is a bitmask of ban reasons:
+ * - %DRM_XE_EXEC_QUEUE_BAN_REASON_GPU_HANG - banned due to GPU hang/timeout
+ * - %DRM_XE_EXEC_QUEUE_BAN_REASON_PAGE_OFFLINE - banned due to memory page offline
+ *
+ * A @value of 0 means the exec queue is not banned.
*/
struct drm_xe_exec_queue_get_property {
/** @extensions: Pointer to the first extension struct, if any */
@@ -1503,7 +1509,17 @@ struct drm_xe_exec_queue_get_property {
/** @property: property to get */
__u32 property;
- /** @value: property value */
+ /**
+ * @value: property value
+ *
+ * For %DRM_XE_EXEC_QUEUE_GET_PROPERTY_BAN, this is a bitmask of:
+ * - %DRM_XE_EXEC_QUEUE_BAN_REASON_GPU_HANG - banned due to GPU hang/timeout
+ * - %DRM_XE_EXEC_QUEUE_BAN_REASON_PAGE_OFFLINE - banned due to memory page offline
+ *
+ * Value of 0 means the exec queue is not banned.
+ */
+#define DRM_XE_EXEC_QUEUE_BAN_REASON_GPU_HANG (1 << 0)
+#define DRM_XE_EXEC_QUEUE_BAN_REASON_PAGE_OFFLINE (1 << 1)
__u64 value;
/** @reserved: Reserved */
--
2.52.0
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH V17 11/12] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN
2026-08-18 10:41 ` [PATCH V17 11/12] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN Tejas Upadhyay
@ 2026-08-18 10:58 ` sashiko-bot
0 siblings, 0 replies; 26+ messages in thread
From: sashiko-bot @ 2026-08-18 10:58 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [Medium] Missing memory barrier in guc_exec_queue_reset_status allows speculative reads to mask PAGE_OFFLINE reason.
- [Medium] Non-LR (traditional) exec queues fail to inherit the PAGE_OFFLINE ban reason when a VM page table is purged.
- [Medium] The PAGE_OFFLINE ban reason is masked and lost for multi-queue setups if a secondary queue's LRC BO is purged.
--
--- Patch [11]: [PATCH V17 11/12] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN ---
commit 45e4d4a3182723f090e735c94ca31b96821f9856
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN
Extend DRM_XE_EXEC_QUEUE_GET_PROPERTY_BAN to return a bitmask indicating
the reason for the ban, rather than a simple boolean.
> diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
> --- a/drivers/gpu/drm/xe/xe_guc_submit.c
> +++ b/drivers/gpu/drm/xe/xe_guc_submit.c
> @@ -2570,13 +2580,25 @@ static void guc_exec_queue_multi_queue_drop_suspend(struct xe_exec_queue *q)
> }
> }
>
> -static bool guc_exec_queue_reset_status(struct xe_exec_queue *q)
> +static u64 guc_exec_queue_reset_status(struct xe_exec_queue *q)
> {
> - if (xe_exec_queue_is_multi_queue_secondary(q) &&
> - guc_exec_queue_reset_status(xe_exec_queue_multi_queue_primary(q)))
> - return true;
> + if (xe_exec_queue_is_multi_queue_secondary(q)) {
> + u64 status = guc_exec_queue_reset_status(xe_exec_queue_multi_queue_primary(q));
> +
> + if (status)
> + return status;
> + }
[Severity: Medium]
If a secondary queue's LRC BO is purged, xe_ttm_vram_purge_page() will tag
the secondary queue with the PAGE_OFFLINE ban reason. However, since this
delegates to the primary queue here, won't this mask the secondary queue's
specific reason if the primary queue defaults to GPU_HANG?
> +
> + if (exec_queue_reset(q) || exec_queue_killed_or_banned_or_wedged(q)) {
> + u64 reason = atomic_read_acquire(&q->ban_reason);
[Severity: Medium]
Is a memory barrier needed here before reading the ban reason?
When a CPU reads the queue status in guc_exec_queue_reset_status()
concurrently with xe_ttm_vram_purge_page() updating it, there is a control
dependency (the if block) before using atomic_read_acquire() on the ban
reason.
Since control dependencies do not order subsequent reads against preceding
reads, could the CPU speculatively execute the ban_reason read before the
state read resolves?
If it observes a 0, it would incorrectly default to GPU_HANG instead of
PAGE_OFFLINE. Should we add an smp_rmb() before reading the ban_reason?
> +
> + /* If no specific reason was recorded, default to GPU hang */
> + if (!reason)
> + reason = DRM_XE_EXEC_QUEUE_BAN_REASON_GPU_HANG;
> + return reason;
> + }
> +
> + return 0;
> }
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> @@ -596,7 +597,12 @@ static int xe_ttm_vram_purge_page(struct xe_device *xe, struct xe_bo *bo)
> xe_bo_unlock(bo);
> /* Ban VM if BO is PPGTT */
> if (vm && (flags & XE_BO_FLAG_PAGETABLE)) {
> + struct xe_exec_queue *eq;
> +
> down_write(&vm->lock);
> + list_for_each_entry(eq, &vm->preempt.exec_queues, lr.link)
> + atomic_or(DRM_XE_EXEC_QUEUE_BAN_REASON_PAGE_OFFLINE, &eq->ban_reason);
[Severity: Medium]
Does this loop miss non-LR (traditional) exec queues sharing the same VM?
This iterates strictly over vm->preempt.exec_queues, which only contains LR
queues. If a non-LR queue is associated with a purged VM, it seems it will
fail to inherit the PAGE_OFFLINE ban reason.
It would then eventually time out, trigger the TDR, and be tagged with the
default GPU_HANG reason, which might provide misleading information to
userspace.
> + smp_wmb(); /* Force all queue bits to be visible before killing the VM */
> xe_vm_kill(vm, true);
> up_write(&vm->lock);
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260818104055.3833974-14-tejas.upadhyay@intel.com?part=11
^ permalink raw reply [flat|nested] 26+ messages in thread
* [PATCH V17 12/12] drm/xe: Add fault-inject based VRAM page offline injection
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
` (10 preceding siblings ...)
2026-08-18 10:41 ` [PATCH V17 11/12] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN Tejas Upadhyay
@ 2026-08-18 10:41 ` Tejas Upadhyay
2026-08-18 10:55 ` sashiko-bot
2026-08-18 10:49 ` ✓ CI.KUnit: success for Add memory page offlining support (rev19) Patchwork
` (4 subsequent siblings)
16 siblings, 1 reply; 26+ messages in thread
From: Tejas Upadhyay @ 2026-08-18 10:41 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, Tejas Upadhyay
Add a fault-inject based debugfs interface for testing VRAM page
offlining. This replaces the previous standalone debugfs approach
with the standard kernel fault-inject infrastructure.
Two debugfs entries are created under the xe debugfs root for
CRI platforms:
- inject_mempage_offline/: Standard fault-inject knobs (probability,
times, interval, etc.) created by fault_create_debugfs_attr().
Without CONFIG_FAULT_INJECTION_DEBUG_FS, the stub returns
ERR_PTR(-ENODEV) and no knobs are created, making the trigger
effectively a no-op.
- inject_mempage_offline_trigger: Write a PFN value to inject a
specific page, or write "0" to auto-pick the last unallocated
VRAM page
The trigger accepts:
- "0" : auto-pick last unallocated page
- "0xPFN" : inject fault at a specific PFN address
Usage:
echo 100 > inject_mempage_offline/probability
echo 1 > inject_mempage_offline/times
echo 0 > inject_mempage_offline_trigger
probability: likelihood of should_fail() returning true (0-100)
times: number of times injection is allowed (-1 for unlimited)
v4(Himal):
- Use xe_fault_mempage_offline() instead of IS_ENABLED() +
direct should_fail(). CONFIG_FAULT_INJECTION_DEBUG_FS is now
an implicit requirement for the trigger to function.
v3(Himal):
- Use FAULT_ACTION
v2(sashiko):
- use cond_resched()
- validate input first and fix addr < 0 case
- validate vr, move block, found var as local to scope_guard
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_debugfs.c | 49 ++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_debugfs.h | 2 ++
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 52 ++++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 1 +
4 files changed, 104 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
index 28135f84e286..95d4dc067b4b 100644
--- a/drivers/gpu/drm/xe/xe_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_debugfs.c
@@ -32,6 +32,7 @@
#include "xe_sriov_vf.h"
#include "xe_step.h"
#include "xe_tile_debugfs.h"
+#include "xe_ttm_vram_mgr.h"
#include "xe_vsec.h"
#include "xe_wa.h"
@@ -44,12 +45,18 @@
DECLARE_FAULT_ATTR(gt_reset_failure);
DECLARE_FAULT_ATTR(inject_csc_hw_error);
DECLARE_FAULT_ATTR(wedge_cold_reset);
+DECLARE_FAULT_ATTR(inject_mempage_offline);
static bool csc_hw_error_available(struct xe_device *xe)
{
return !IS_SRIOV_VF(xe) && xe->info.platform == XE_BATTLEMAGE;
}
+static bool is_crescent_island(struct xe_device *xe)
+{
+ return xe->info.platform == XE_CRESCENTISLAND;
+}
+
/*
* Fault injection table. Each entry registers a debugfs attribute; add a
* matching FAULT_ACTION() below for every entry added here.
@@ -66,6 +73,9 @@ static struct {
.is_visible = csc_hw_error_available },
{ .name = "wedge_cold_reset",
.attr = &wedge_cold_reset },
+ { .name = "inject_mempage_offline",
+ .attr = &inject_mempage_offline,
+ .is_visible = is_crescent_island },
};
/*
@@ -81,6 +91,40 @@ bool xe_fault_##name(void) \
FAULT_ACTION(gt_reset, gt_reset_failure)
FAULT_ACTION(csc_hw_error, inject_csc_hw_error)
FAULT_ACTION(wedge_cold_reset, wedge_cold_reset)
+FAULT_ACTION(mempage_offline, inject_mempage_offline)
+
+static ssize_t inject_mempage_offline_trigger(struct file *f,
+ const char __user *ubuf,
+ size_t size, loff_t *pos)
+{
+ struct xe_device *xe = file_inode(f)->i_private;
+ struct xe_tile *tile = xe_device_get_root_tile(xe);
+ struct xe_vram_region *vr = tile->mem.vram;
+ u64 pfn;
+ int ret;
+
+ if (!vr)
+ return -ENODEV;
+
+ ret = kstrtou64_from_user(ubuf, size, 0, &pfn);
+ if (ret)
+ return ret;
+
+ if (!xe_fault_mempage_offline())
+ return size;
+
+ if (pfn == 0)
+ return xe_ttm_vram_inject_fault(xe) ?: size;
+
+ /* User provided PFN - convert to DPA and inject */
+ return xe_ttm_vram_handle_addr_fault(xe,
+ (pfn << PAGE_SHIFT) + vr->dpa_base) ?: size;
+}
+
+static const struct file_operations inject_mempage_offline_fops = {
+ .owner = THIS_MODULE,
+ .write = inject_mempage_offline_trigger,
+};
static void xe_fault_inject_debugfs_register(struct xe_device *xe,
struct dentry *root)
@@ -95,6 +139,11 @@ static void xe_fault_inject_debugfs_register(struct xe_device *xe,
fault_create_debugfs_attr(xe_fault_inject_entry[i].name, root,
xe_fault_inject_entry[i].attr);
}
+
+ if (is_crescent_island(xe)) {
+ debugfs_create_file("inject_mempage_offline_trigger", 0200,
+ root, xe, &inject_mempage_offline_fops);
+ }
}
static void read_residency_counter(struct xe_device *xe, struct xe_mmio *mmio,
diff --git a/drivers/gpu/drm/xe/xe_debugfs.h b/drivers/gpu/drm/xe/xe_debugfs.h
index 0dcd28fd7dc0..88d91c78036b 100644
--- a/drivers/gpu/drm/xe/xe_debugfs.h
+++ b/drivers/gpu/drm/xe/xe_debugfs.h
@@ -14,11 +14,13 @@ struct xe_device;
bool xe_fault_gt_reset(void);
bool xe_fault_csc_hw_error(void);
bool xe_fault_wedge_cold_reset(void);
+bool xe_fault_mempage_offline(void);
void xe_debugfs_register(struct xe_device *xe);
#else
static inline bool xe_fault_gt_reset(void) { return false; }
static inline bool xe_fault_csc_hw_error(void) { return false; }
static inline bool xe_fault_wedge_cold_reset(void) { return false; }
+static inline bool xe_fault_mempage_offline(void) { return false; }
static inline void xe_debugfs_register(struct xe_device *xe) { }
#endif
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 18459804fc04..783cd1c9de1e 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -883,6 +883,58 @@ int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr)
}
EXPORT_SYMBOL(xe_ttm_vram_handle_addr_fault);
+/**
+ * xe_ttm_vram_inject_fault - Inject a VRAM page fault for testing
+ * @xe: xe device instance
+ *
+ * Picks the last unallocated VRAM page and reports it as faulted
+ * via xe_ttm_vram_handle_addr_fault(). Used by the fault-inject
+ * debugfs interface for testing page offlining.
+ *
+ * Return: 0 on success, negative error code on failure.
+ */
+int xe_ttm_vram_inject_fault(struct xe_device *xe)
+{
+ struct xe_tile *tile = xe_device_get_root_tile(xe);
+ struct xe_vram_region *vr = tile->mem.vram;
+ struct xe_ttm_vram_mgr *vram_mgr = &vr->ttm;
+ struct gpu_buddy *mm = &vram_mgr->mm;
+ u64 addr;
+
+ if (vr->actual_physical_size < SZ_4K)
+ return -ENOSPC;
+
+ addr = vr->actual_physical_size - SZ_4K;
+ while (addr < vr->actual_physical_size) {
+ struct gpu_buddy_block *block;
+ bool found = false;
+
+ scoped_guard(mutex, &vram_mgr->lock) {
+ block = gpu_buddy_allocated_addr_to_block(mm, addr);
+ if (!block)
+ found = true;
+ }
+
+ /*
+ * Intentional race window: xe_ttm_vram_handle_addr_fault()
+ * re-acquires vram_mgr->lock internally, so we cannot hold
+ * it here. A concurrent allocation claiming this page between
+ * the two calls is an acceptable false negative for this
+ * test-only path.
+ */
+ if (found)
+ return xe_ttm_vram_handle_addr_fault(xe, addr + vr->dpa_base);
+
+ cond_resched();
+ if (addr == 0)
+ break;
+ addr -= SZ_4K;
+ }
+
+ return -ENOSPC;
+}
+EXPORT_SYMBOL(xe_ttm_vram_inject_fault);
+
static size_t serialize_bad_pages(struct xe_ttm_vram_mgr *mgr, char *buf, size_t max_len)
{
struct xe_ttm_vram_offline_resource *pos;
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
index eb55b0f74ef3..9feb999a1f8d 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
@@ -32,6 +32,7 @@ void xe_ttm_vram_get_used(struct ttm_resource_manager *man,
u64 *used, u64 *used_visible);
int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr);
+int xe_ttm_vram_inject_fault(struct xe_device *xe);
int xe_ttm_vram_sysfs_init(struct xe_device *xe);
static inline struct xe_ttm_vram_mgr_resource *
to_xe_ttm_vram_mgr_resource(struct ttm_resource *res)
--
2.52.0
^ permalink raw reply related [flat|nested] 26+ messages in thread* Re: [PATCH V17 12/12] drm/xe: Add fault-inject based VRAM page offline injection
2026-08-18 10:41 ` [PATCH V17 12/12] drm/xe: Add fault-inject based VRAM page offline injection Tejas Upadhyay
@ 2026-08-18 10:55 ` sashiko-bot
0 siblings, 0 replies; 26+ messages in thread
From: sashiko-bot @ 2026-08-18 10:55 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Missing SR-IOV VF check exposes physical VRAM offlining and restricted MMIO access to guest VMs.
--
--- Patch [12]: [PATCH V17 12/12] drm/xe: Add fault-inject based VRAM page offline injection ---
commit 7bef89dbe3ddc0e065bfce2e6d297191374f2aa4
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
drm/xe: Add fault-inject based VRAM page offline injection
This commit adds a fault-inject based debugfs interface for testing VRAM
page offlining. It exposes standard fault-inject knobs and a custom
trigger file on Crescent Island platforms to simulate VRAM page faults.
> diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
> index 28135f84e2869..95d4dc067b4b8 100644
> --- a/drivers/gpu/drm/xe/xe_debugfs.c
> +++ b/drivers/gpu/drm/xe/xe_debugfs.c
[ ... ]
> @@ -44,12 +45,18 @@
> DECLARE_FAULT_ATTR(gt_reset_failure);
> DECLARE_FAULT_ATTR(inject_csc_hw_error);
> DECLARE_FAULT_ATTR(wedge_cold_reset);
> +DECLARE_FAULT_ATTR(inject_mempage_offline);
>
> static bool csc_hw_error_available(struct xe_device *xe)
> {
> return !IS_SRIOV_VF(xe) && xe->info.platform == XE_BATTLEMAGE;
> }
>
> +static bool is_crescent_island(struct xe_device *xe)
> +{
> + return xe->info.platform == XE_CRESCENTISLAND;
[Severity: High]
Are we unintentionally exposing the VRAM offlining debugfs trigger to SR-IOV
Virtual Functions (VFs)?
The csc_hw_error_available() check right above explicitly restricts its
debugfs entry to the Physical Function (PF) using !IS_SRIOV_VF(xe).
If a guest VM writes to the exposed inject_mempage_offline_trigger file, it
invokes xe_ttm_vram_handle_addr_fault() and xe_ttm_vram_addr_to_region(),
which directly reads the GSMBASE MMIO register.
Could this access of PF-restricted MMIO from a VF cause unsupported requests
or timeouts, and violate the virtualization boundary by allowing a VF to
offline physical VRAM pages?
> +}
> +
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260818104055.3833974-14-tejas.upadhyay@intel.com?part=12
^ permalink raw reply [flat|nested] 26+ messages in thread
* ✓ CI.KUnit: success for Add memory page offlining support (rev19)
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
` (11 preceding siblings ...)
2026-08-18 10:41 ` [PATCH V17 12/12] drm/xe: Add fault-inject based VRAM page offline injection Tejas Upadhyay
@ 2026-08-18 10:49 ` Patchwork
2026-08-18 11:47 ` ✓ CI.KUnit: success for Add memory page offlining support (rev20) Patchwork
` (3 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Patchwork @ 2026-08-18 10:49 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
== Series Details ==
Series: Add memory page offlining support (rev19)
URL : https://patchwork.freedesktop.org/series/161473/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[10:48:24] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:48:28] 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
[10:49:00] Starting KUnit Kernel (1/1)...
[10:49:00] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:49:00] ================== guc_buf (11 subtests) ===================
[10:49:00] [PASSED] test_smallest
[10:49:00] [PASSED] test_largest
[10:49:00] [PASSED] test_granular
[10:49:00] [PASSED] test_unique
[10:49:00] [PASSED] test_overlap
[10:49:00] [PASSED] test_reusable
[10:49:00] [PASSED] test_too_big
[10:49:00] [PASSED] test_flush
[10:49:00] [PASSED] test_lookup
[10:49:00] [PASSED] test_data
[10:49:00] [PASSED] test_class
[10:49:00] ===================== [PASSED] guc_buf =====================
[10:49:00] =================== guc_dbm (7 subtests) ===================
[10:49:00] [PASSED] test_empty
[10:49:00] [PASSED] test_default
[10:49:00] ======================== test_size ========================
[10:49:00] [PASSED] 4
[10:49:00] [PASSED] 8
[10:49:00] [PASSED] 32
[10:49:00] [PASSED] 256
[10:49:00] ==================== [PASSED] test_size ====================
[10:49:00] ======================= test_reuse ========================
[10:49:00] [PASSED] 4
[10:49:00] [PASSED] 8
[10:49:00] [PASSED] 32
[10:49:00] [PASSED] 256
[10:49:00] =================== [PASSED] test_reuse ====================
[10:49:00] =================== test_range_overlap ====================
[10:49:00] [PASSED] 4
[10:49:00] [PASSED] 8
[10:49:00] [PASSED] 32
[10:49:00] [PASSED] 256
[10:49:00] =============== [PASSED] test_range_overlap ================
[10:49:00] =================== test_range_compact ====================
[10:49:00] [PASSED] 4
[10:49:00] [PASSED] 8
[10:49:00] [PASSED] 32
[10:49:00] [PASSED] 256
[10:49:00] =============== [PASSED] test_range_compact ================
[10:49:00] ==================== test_range_spare =====================
[10:49:00] [PASSED] 4
[10:49:00] [PASSED] 8
[10:49:00] [PASSED] 32
[10:49:00] [PASSED] 256
[10:49:00] ================ [PASSED] test_range_spare =================
[10:49:00] ===================== [PASSED] guc_dbm =====================
[10:49:00] =================== guc_idm (6 subtests) ===================
[10:49:00] [PASSED] bad_init
[10:49:00] [PASSED] no_init
[10:49:00] [PASSED] init_fini
[10:49:00] [PASSED] check_used
[10:49:00] [PASSED] check_quota
[10:49:00] [PASSED] check_all
[10:49:00] ===================== [PASSED] guc_idm =====================
[10:49:00] =============== guc_klv_helpers (9 subtests) ===============
[10:49:00] [PASSED] test_count
[10:49:00] [PASSED] test_encode_u32
[10:49:00] [PASSED] test_encode_u64
[10:49:00] [PASSED] test_encode_string
[10:49:00] [PASSED] test_encode_object_raw
[10:49:00] [PASSED] test_encode_object_klv
[10:49:00] [PASSED] test_encode_object_nested
[10:49:00] [PASSED] test_encode_object_basic
[10:49:00] [PASSED] test_print
[10:49:00] ================= [PASSED] guc_klv_helpers =================
[10:49:00] =================== xe_log (4 subtests) ====================
[10:49:00] [PASSED] demo_cper
[10:49:00] [PASSED] demo_dmesg
[10:49:00] ======================= test_dmesg ========================
[10:49:00] [PASSED] test_fatal
[10:49:00] [PASSED] test_fatal_tile
[10:49:00] [PASSED] test_fatal_gt
[10:49:00] [PASSED] test_fatal_comp
[10:49:00] [PASSED] test_fatal_comp_tile
[10:49:00] [PASSED] test_fatal_comp_gt
[10:49:00] [PASSED] test_fatal_all
[10:49:00] [PASSED] test_recoverable
[10:49:00] [PASSED] test_recoverable_tile
[10:49:00] [PASSED] test_recoverable_gt
[10:49:00] [PASSED] test_recoverable_comp
[10:49:00] [PASSED] test_recoverable_comp_tile
[10:49:00] [PASSED] test_recoverable_comp_gt
[10:49:00] [PASSED] test_recoverable_all
[10:49:00] [PASSED] test_info
[10:49:00] [PASSED] test_info_tile
[10:49:00] [PASSED] test_info_gt
[10:49:00] [PASSED] test_info_err
[10:49:00] [PASSED] test_info_comp
[10:49:00] [PASSED] test_info_comp_tile
[10:49:00] [PASSED] test_info_comp_gt
[10:49:00] [PASSED] test_info_all
[10:49:00] [PASSED] test_hw_fatal
[10:49:00] [PASSED] test_hw_recoverable
[10:49:00] [PASSED] test_hw_corrected
[10:49:00] [PASSED] test_hw_informational
[10:49:00] =================== [PASSED] test_dmesg ====================
[10:49:00] ====================== test_invalid =======================
[10:49:00] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[10:49:00] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[10:49:00] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[10:49:00] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[10:49:00] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[10:49:00] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[10:49:00] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[10:49:00] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[10:49:00] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[10:49:00] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[10:49:00] ================== [SKIPPED] test_invalid ==================
[10:49:00] ===================== [PASSED] xe_log ======================
[10:49:00] ================== no_relay (3 subtests) ===================
[10:49:00] [PASSED] xe_drops_guc2pf_if_not_ready
[10:49:00] [PASSED] xe_drops_guc2vf_if_not_ready
[10:49:00] [PASSED] xe_rejects_send_if_not_ready
[10:49:00] ==================== [PASSED] no_relay =====================
[10:49:00] ================== pf_relay (14 subtests) ==================
[10:49:00] [PASSED] pf_rejects_guc2pf_too_short
[10:49:00] [PASSED] pf_rejects_guc2pf_too_long
[10:49:00] [PASSED] pf_rejects_guc2pf_no_payload
[10:49:00] [PASSED] pf_fails_no_payload
[10:49:00] [PASSED] pf_fails_bad_origin
[10:49:00] [PASSED] pf_fails_bad_type
[10:49:00] [PASSED] pf_txn_reports_error
[10:49:00] [PASSED] pf_txn_sends_pf2guc
[10:49:00] [PASSED] pf_sends_pf2guc
[10:49:00] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[10:49:00] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[10:49:00] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[10:49:00] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[10:49:00] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[10:49:00] ==================== [PASSED] pf_relay =====================
[10:49:00] ================== vf_relay (3 subtests) ===================
[10:49:00] [PASSED] vf_rejects_guc2vf_too_short
[10:49:00] [PASSED] vf_rejects_guc2vf_too_long
[10:49:00] [PASSED] vf_rejects_guc2vf_no_payload
[10:49:00] ==================== [PASSED] vf_relay =====================
[10:49:00] ================ pf_gt_config (9 subtests) =================
[10:49:00] [PASSED] fair_contexts_1vf
[10:49:00] [PASSED] fair_doorbells_1vf
[10:49:00] [PASSED] fair_ggtt_1vf
[10:49:00] ====================== fair_vram_1vf ======================
[10:49:00] [PASSED] 3.50 GiB
[10:49:00] [PASSED] 11.5 GiB
[10:49:00] [PASSED] 15.5 GiB
[10:49:00] [PASSED] 31.5 GiB
[10:49:00] [PASSED] 63.5 GiB
[10:49:00] [PASSED] 1.91 GiB
[10:49:00] ================== [PASSED] fair_vram_1vf ==================
[10:49:00] ================ fair_vram_1vf_admin_only =================
[10:49:00] [PASSED] 3.50 GiB
[10:49:00] [PASSED] 11.5 GiB
[10:49:00] [PASSED] 15.5 GiB
[10:49:00] [PASSED] 31.5 GiB
[10:49:00] [PASSED] 63.5 GiB
[10:49:00] [PASSED] 1.91 GiB
[10:49:00] ============ [PASSED] fair_vram_1vf_admin_only =============
[10:49:00] ====================== fair_contexts ======================
[10:49:00] [PASSED] 1 VF
[10:49:00] [PASSED] 2 VFs
[10:49:00] [PASSED] 3 VFs
[10:49:00] [PASSED] 4 VFs
[10:49:00] [PASSED] 5 VFs
[10:49:00] [PASSED] 6 VFs
[10:49:00] [PASSED] 7 VFs
[10:49:00] [PASSED] 8 VFs
[10:49:00] [PASSED] 9 VFs
[10:49:00] [PASSED] 10 VFs
[10:49:00] [PASSED] 11 VFs
[10:49:00] [PASSED] 12 VFs
[10:49:00] [PASSED] 13 VFs
[10:49:00] [PASSED] 14 VFs
[10:49:00] [PASSED] 15 VFs
[10:49:00] [PASSED] 16 VFs
[10:49:00] [PASSED] 17 VFs
[10:49:00] [PASSED] 18 VFs
[10:49:00] [PASSED] 19 VFs
[10:49:00] [PASSED] 20 VFs
[10:49:00] [PASSED] 21 VFs
[10:49:00] [PASSED] 22 VFs
[10:49:00] [PASSED] 23 VFs
[10:49:00] [PASSED] 24 VFs
[10:49:00] [PASSED] 25 VFs
[10:49:00] [PASSED] 26 VFs
[10:49:00] [PASSED] 27 VFs
[10:49:00] [PASSED] 28 VFs
[10:49:00] [PASSED] 29 VFs
[10:49:00] [PASSED] 30 VFs
[10:49:00] [PASSED] 31 VFs
[10:49:00] [PASSED] 32 VFs
[10:49:00] [PASSED] 33 VFs
[10:49:00] [PASSED] 34 VFs
[10:49:00] [PASSED] 35 VFs
[10:49:00] [PASSED] 36 VFs
[10:49:00] [PASSED] 37 VFs
[10:49:00] [PASSED] 38 VFs
[10:49:00] [PASSED] 39 VFs
[10:49:00] [PASSED] 40 VFs
[10:49:00] [PASSED] 41 VFs
[10:49:00] [PASSED] 42 VFs
[10:49:00] [PASSED] 43 VFs
[10:49:00] [PASSED] 44 VFs
[10:49:00] [PASSED] 45 VFs
[10:49:00] [PASSED] 46 VFs
[10:49:00] [PASSED] 47 VFs
[10:49:00] [PASSED] 48 VFs
[10:49:00] [PASSED] 49 VFs
[10:49:00] [PASSED] 50 VFs
[10:49:00] [PASSED] 51 VFs
[10:49:00] [PASSED] 52 VFs
[10:49:00] [PASSED] 53 VFs
[10:49:00] [PASSED] 54 VFs
[10:49:00] [PASSED] 55 VFs
[10:49:00] [PASSED] 56 VFs
[10:49:00] [PASSED] 57 VFs
[10:49:00] [PASSED] 58 VFs
[10:49:00] [PASSED] 59 VFs
[10:49:00] [PASSED] 60 VFs
[10:49:00] [PASSED] 61 VFs
[10:49:00] [PASSED] 62 VFs
[10:49:00] [PASSED] 63 VFs
[10:49:00] ================== [PASSED] fair_contexts ==================
[10:49:00] ===================== fair_doorbells ======================
[10:49:00] [PASSED] 1 VF
[10:49:00] [PASSED] 2 VFs
[10:49:00] [PASSED] 3 VFs
[10:49:00] [PASSED] 4 VFs
[10:49:00] [PASSED] 5 VFs
[10:49:00] [PASSED] 6 VFs
[10:49:00] [PASSED] 7 VFs
[10:49:00] [PASSED] 8 VFs
[10:49:00] [PASSED] 9 VFs
[10:49:00] [PASSED] 10 VFs
[10:49:00] [PASSED] 11 VFs
[10:49:00] [PASSED] 12 VFs
[10:49:00] [PASSED] 13 VFs
[10:49:00] [PASSED] 14 VFs
[10:49:00] [PASSED] 15 VFs
[10:49:00] [PASSED] 16 VFs
[10:49:00] [PASSED] 17 VFs
[10:49:00] [PASSED] 18 VFs
[10:49:00] [PASSED] 19 VFs
[10:49:00] [PASSED] 20 VFs
[10:49:00] [PASSED] 21 VFs
[10:49:00] [PASSED] 22 VFs
[10:49:00] [PASSED] 23 VFs
[10:49:00] [PASSED] 24 VFs
[10:49:00] [PASSED] 25 VFs
[10:49:00] [PASSED] 26 VFs
[10:49:00] [PASSED] 27 VFs
[10:49:00] [PASSED] 28 VFs
[10:49:00] [PASSED] 29 VFs
[10:49:00] [PASSED] 30 VFs
[10:49:00] [PASSED] 31 VFs
[10:49:00] [PASSED] 32 VFs
[10:49:00] [PASSED] 33 VFs
[10:49:00] [PASSED] 34 VFs
[10:49:00] [PASSED] 35 VFs
[10:49:00] [PASSED] 36 VFs
[10:49:00] [PASSED] 37 VFs
[10:49:00] [PASSED] 38 VFs
[10:49:00] [PASSED] 39 VFs
[10:49:00] [PASSED] 40 VFs
[10:49:00] [PASSED] 41 VFs
[10:49:00] [PASSED] 42 VFs
[10:49:00] [PASSED] 43 VFs
[10:49:00] [PASSED] 44 VFs
[10:49:00] [PASSED] 45 VFs
[10:49:00] [PASSED] 46 VFs
[10:49:00] [PASSED] 47 VFs
[10:49:00] [PASSED] 48 VFs
[10:49:00] [PASSED] 49 VFs
[10:49:00] [PASSED] 50 VFs
[10:49:00] [PASSED] 51 VFs
[10:49:00] [PASSED] 52 VFs
[10:49:00] [PASSED] 53 VFs
[10:49:00] [PASSED] 54 VFs
[10:49:00] [PASSED] 55 VFs
[10:49:00] [PASSED] 56 VFs
[10:49:00] [PASSED] 57 VFs
[10:49:00] [PASSED] 58 VFs
[10:49:00] [PASSED] 59 VFs
[10:49:00] [PASSED] 60 VFs
[10:49:00] [PASSED] 61 VFs
[10:49:00] [PASSED] 62 VFs
[10:49:00] [PASSED] 63 VFs
[10:49:00] ================= [PASSED] fair_doorbells ==================
[10:49:00] ======================== fair_ggtt ========================
[10:49:00] [PASSED] 1 VF
[10:49:00] [PASSED] 2 VFs
[10:49:00] [PASSED] 3 VFs
[10:49:00] [PASSED] 4 VFs
[10:49:00] [PASSED] 5 VFs
[10:49:00] [PASSED] 6 VFs
[10:49:00] [PASSED] 7 VFs
[10:49:00] [PASSED] 8 VFs
[10:49:00] [PASSED] 9 VFs
[10:49:00] [PASSED] 10 VFs
[10:49:00] [PASSED] 11 VFs
[10:49:00] [PASSED] 12 VFs
[10:49:00] [PASSED] 13 VFs
[10:49:00] [PASSED] 14 VFs
[10:49:00] [PASSED] 15 VFs
[10:49:00] [PASSED] 16 VFs
[10:49:00] [PASSED] 17 VFs
[10:49:00] [PASSED] 18 VFs
[10:49:00] [PASSED] 19 VFs
[10:49:00] [PASSED] 20 VFs
[10:49:00] [PASSED] 21 VFs
[10:49:00] [PASSED] 22 VFs
[10:49:00] [PASSED] 23 VFs
[10:49:00] [PASSED] 24 VFs
[10:49:00] [PASSED] 25 VFs
[10:49:00] [PASSED] 26 VFs
[10:49:00] [PASSED] 27 VFs
[10:49:00] [PASSED] 28 VFs
[10:49:00] [PASSED] 29 VFs
[10:49:00] [PASSED] 30 VFs
[10:49:00] [PASSED] 31 VFs
[10:49:00] [PASSED] 32 VFs
[10:49:00] [PASSED] 33 VFs
[10:49:00] [PASSED] 34 VFs
[10:49:00] [PASSED] 35 VFs
[10:49:00] [PASSED] 36 VFs
[10:49:00] [PASSED] 37 VFs
[10:49:00] [PASSED] 38 VFs
[10:49:00] [PASSED] 39 VFs
[10:49:00] [PASSED] 40 VFs
[10:49:00] [PASSED] 41 VFs
[10:49:00] [PASSED] 42 VFs
[10:49:00] [PASSED] 43 VFs
[10:49:00] [PASSED] 44 VFs
[10:49:00] [PASSED] 45 VFs
[10:49:00] [PASSED] 46 VFs
[10:49:00] [PASSED] 47 VFs
[10:49:00] [PASSED] 48 VFs
[10:49:00] [PASSED] 49 VFs
[10:49:00] [PASSED] 50 VFs
[10:49:00] [PASSED] 51 VFs
[10:49:00] [PASSED] 52 VFs
[10:49:00] [PASSED] 53 VFs
[10:49:00] [PASSED] 54 VFs
[10:49:01] [PASSED] 55 VFs
[10:49:01] [PASSED] 56 VFs
[10:49:01] [PASSED] 57 VFs
[10:49:01] [PASSED] 58 VFs
[10:49:01] [PASSED] 59 VFs
[10:49:01] [PASSED] 60 VFs
[10:49:01] [PASSED] 61 VFs
[10:49:01] [PASSED] 62 VFs
[10:49:01] [PASSED] 63 VFs
[10:49:01] ==================== [PASSED] fair_ggtt ====================
[10:49:01] ======================== fair_vram ========================
[10:49:01] [PASSED] 1 VF
[10:49:01] [PASSED] 2 VFs
[10:49:01] [PASSED] 3 VFs
[10:49:01] [PASSED] 4 VFs
[10:49:01] [PASSED] 5 VFs
[10:49:01] [PASSED] 6 VFs
[10:49:01] [PASSED] 7 VFs
[10:49:01] [PASSED] 8 VFs
[10:49:01] [PASSED] 9 VFs
[10:49:01] [PASSED] 10 VFs
[10:49:01] [PASSED] 11 VFs
[10:49:01] [PASSED] 12 VFs
[10:49:01] [PASSED] 13 VFs
[10:49:01] [PASSED] 14 VFs
[10:49:01] [PASSED] 15 VFs
[10:49:01] [PASSED] 16 VFs
[10:49:01] [PASSED] 17 VFs
[10:49:01] [PASSED] 18 VFs
[10:49:01] [PASSED] 19 VFs
[10:49:01] [PASSED] 20 VFs
[10:49:01] [PASSED] 21 VFs
[10:49:01] [PASSED] 22 VFs
[10:49:01] [PASSED] 23 VFs
[10:49:01] [PASSED] 24 VFs
[10:49:01] [PASSED] 25 VFs
[10:49:01] [PASSED] 26 VFs
[10:49:01] [PASSED] 27 VFs
[10:49:01] [PASSED] 28 VFs
[10:49:01] [PASSED] 29 VFs
[10:49:01] [PASSED] 30 VFs
[10:49:01] [PASSED] 31 VFs
[10:49:01] [PASSED] 32 VFs
[10:49:01] [PASSED] 33 VFs
[10:49:01] [PASSED] 34 VFs
[10:49:01] [PASSED] 35 VFs
[10:49:01] [PASSED] 36 VFs
[10:49:01] [PASSED] 37 VFs
[10:49:01] [PASSED] 38 VFs
[10:49:01] [PASSED] 39 VFs
[10:49:01] [PASSED] 40 VFs
[10:49:01] [PASSED] 41 VFs
[10:49:01] [PASSED] 42 VFs
[10:49:01] [PASSED] 43 VFs
[10:49:01] [PASSED] 44 VFs
[10:49:01] [PASSED] 45 VFs
[10:49:01] [PASSED] 46 VFs
[10:49:01] [PASSED] 47 VFs
[10:49:01] [PASSED] 48 VFs
[10:49:01] [PASSED] 49 VFs
[10:49:01] [PASSED] 50 VFs
[10:49:01] [PASSED] 51 VFs
[10:49:01] [PASSED] 52 VFs
[10:49:01] [PASSED] 53 VFs
[10:49:01] [PASSED] 54 VFs
[10:49:01] [PASSED] 55 VFs
[10:49:01] [PASSED] 56 VFs
[10:49:01] [PASSED] 57 VFs
[10:49:01] [PASSED] 58 VFs
[10:49:01] [PASSED] 59 VFs
[10:49:01] [PASSED] 60 VFs
[10:49:01] [PASSED] 61 VFs
[10:49:01] [PASSED] 62 VFs
[10:49:01] [PASSED] 63 VFs
[10:49:01] ==================== [PASSED] fair_vram ====================
[10:49:01] ================== [PASSED] pf_gt_config ===================
[10:49:01] ===================== lmtt (1 subtest) =====================
[10:49:01] ======================== test_ops =========================
[10:49:01] [PASSED] 2-level
[10:49:01] [PASSED] multi-level
[10:49:01] ==================== [PASSED] test_ops =====================
[10:49:01] ====================== [PASSED] lmtt =======================
[10:49:01] ================= sriov_packet (1 subtest) =================
[10:49:01] [PASSED] test_descriptor_init
[10:49:01] ================== [PASSED] sriov_packet ===================
[10:49:01] ================= pf_service (11 subtests) =================
[10:49:01] [PASSED] pf_negotiate_any
[10:49:01] [PASSED] pf_negotiate_base_match
[10:49:01] [PASSED] pf_negotiate_base_newer
[10:49:01] [PASSED] pf_negotiate_base_next
[10:49:01] [SKIPPED] pf_negotiate_base_older (no older minor)
[10:49:01] [PASSED] pf_negotiate_base_prev
[10:49:01] [PASSED] pf_negotiate_latest_match
[10:49:01] [PASSED] pf_negotiate_latest_newer
[10:49:01] [PASSED] pf_negotiate_latest_next
[10:49:01] [SKIPPED] pf_negotiate_latest_older (no older minor)
[10:49:01] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[10:49:01] =================== [PASSED] pf_service ====================
[10:49:01] ================= xe_guc_g2g (2 subtests) ==================
[10:49:01] ============== xe_live_guc_g2g_kunit_default ==============
[10:49:01] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[10:49:01] ============== xe_live_guc_g2g_kunit_allmem ===============
[10:49:01] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[10:49:01] =================== [SKIPPED] xe_guc_g2g ===================
[10:49:01] =================== xe_mocs (2 subtests) ===================
[10:49:01] ================ xe_live_mocs_kernel_kunit ================
[10:49:01] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[10:49:01] ================ xe_live_mocs_reset_kunit =================
[10:49:01] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[10:49:01] ==================== [SKIPPED] xe_mocs =====================
[10:49:01] ================= xe_migrate (2 subtests) ==================
[10:49:01] ================= xe_migrate_sanity_kunit =================
[10:49:01] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[10:49:01] ================== xe_validate_ccs_kunit ==================
[10:49:01] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[10:49:01] =================== [SKIPPED] xe_migrate ===================
[10:49:01] ================== xe_dma_buf (1 subtest) ==================
[10:49:01] ==================== xe_dma_buf_kunit =====================
[10:49:01] ================ [SKIPPED] xe_dma_buf_kunit ================
[10:49:01] =================== [SKIPPED] xe_dma_buf ===================
[10:49:01] ================= xe_bo_shrink (1 subtest) =================
[10:49:01] =================== xe_bo_shrink_kunit ====================
[10:49:01] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[10:49:01] ================== [SKIPPED] xe_bo_shrink ==================
[10:49:01] ==================== xe_bo (2 subtests) ====================
[10:49:01] ================== xe_ccs_migrate_kunit ===================
[10:49:01] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[10:49:01] ==================== xe_bo_evict_kunit ====================
[10:49:01] =============== [SKIPPED] xe_bo_evict_kunit ================
[10:49:01] ===================== [SKIPPED] xe_bo ======================
[10:49:01] =================== xe_any (9 subtests) ====================
[10:49:01] [PASSED] test_to_xe
[10:49:01] [PASSED] test_to_dev
[10:49:01] [PASSED] test_to_pdev
[10:49:01] [PASSED] test_to_drm
[10:49:01] [PASSED] test_if_pdev
[10:49:01] [PASSED] test_if_xe
[10:49:01] [PASSED] test_if_tile
[10:49:01] [PASSED] test_if_gt
[10:49:01] [PASSED] test_to_id
[10:49:01] ===================== [PASSED] xe_any ======================
[10:49:01] ==================== args (13 subtests) ====================
[10:49:01] [PASSED] count_args_test
[10:49:01] [PASSED] call_args_example
[10:49:01] [PASSED] call_args_test
[10:49:01] [PASSED] drop_first_arg_example
[10:49:01] [PASSED] drop_first_arg_test
[10:49:01] [PASSED] first_arg_example
[10:49:01] [PASSED] first_arg_test
[10:49:01] [PASSED] last_arg_example
[10:49:01] [PASSED] last_arg_test
[10:49:01] [PASSED] pick_arg_example
[10:49:01] [PASSED] if_args_example
[10:49:01] [PASSED] if_args_test
[10:49:01] [PASSED] sep_comma_example
[10:49:01] ====================== [PASSED] args =======================
[10:49:01] =================== xe_pci (3 subtests) ====================
[10:49:01] ==================== check_graphics_ip ====================
[10:49:01] [PASSED] 12.00 Xe_LP
[10:49:01] [PASSED] 12.10 Xe_LP+
[10:49:01] [PASSED] 12.55 Xe_HPG
[10:49:01] [PASSED] 12.60 Xe_HPC
[10:49:01] [PASSED] 12.70 Xe_LPG
[10:49:01] [PASSED] 12.71 Xe_LPG
[10:49:01] [PASSED] 12.74 Xe_LPG+
[10:49:01] [PASSED] 20.01 Xe2_HPG
[10:49:01] [PASSED] 20.02 Xe2_HPG
[10:49:01] [PASSED] 20.04 Xe2_LPG
[10:49:01] [PASSED] 30.00 Xe3_LPG
[10:49:01] [PASSED] 30.01 Xe3_LPG
[10:49:01] [PASSED] 30.03 Xe3_LPG
[10:49:01] [PASSED] 30.04 Xe3_LPG
[10:49:01] [PASSED] 30.05 Xe3_LPG
[10:49:01] [PASSED] 35.10 Xe3p_LPG
[10:49:01] [PASSED] 35.11 Xe3p_XPC
[10:49:01] ================ [PASSED] check_graphics_ip ================
[10:49:01] ===================== check_media_ip ======================
[10:49:01] [PASSED] 12.00 Xe_M
[10:49:01] [PASSED] 12.55 Xe_HPM
[10:49:01] [PASSED] 13.00 Xe_LPM+
[10:49:01] [PASSED] 13.01 Xe2_HPM
[10:49:01] [PASSED] 20.00 Xe2_LPM
[10:49:01] [PASSED] 30.00 Xe3_LPM
[10:49:01] [PASSED] 30.02 Xe3_LPM
[10:49:01] [PASSED] 35.00 Xe3p_LPM
[10:49:01] [PASSED] 35.03 Xe3p_HPM
[10:49:01] ================= [PASSED] check_media_ip ==================
[10:49:01] =================== check_platform_desc ===================
[10:49:01] [PASSED] 0x9A60 (TIGERLAKE)
[10:49:01] [PASSED] 0x9A68 (TIGERLAKE)
[10:49:01] [PASSED] 0x9A70 (TIGERLAKE)
[10:49:01] [PASSED] 0x9A40 (TIGERLAKE)
[10:49:01] [PASSED] 0x9A49 (TIGERLAKE)
[10:49:01] [PASSED] 0x9A59 (TIGERLAKE)
[10:49:01] [PASSED] 0x9A78 (TIGERLAKE)
[10:49:01] [PASSED] 0x9AC0 (TIGERLAKE)
[10:49:01] [PASSED] 0x9AC9 (TIGERLAKE)
[10:49:01] [PASSED] 0x9AD9 (TIGERLAKE)
[10:49:01] [PASSED] 0x9AF8 (TIGERLAKE)
[10:49:01] [PASSED] 0x4C80 (ROCKETLAKE)
[10:49:01] [PASSED] 0x4C8A (ROCKETLAKE)
[10:49:01] [PASSED] 0x4C8B (ROCKETLAKE)
[10:49:01] [PASSED] 0x4C8C (ROCKETLAKE)
[10:49:01] [PASSED] 0x4C90 (ROCKETLAKE)
[10:49:01] [PASSED] 0x4C9A (ROCKETLAKE)
[10:49:01] [PASSED] 0x4680 (ALDERLAKE_S)
[10:49:01] [PASSED] 0x4682 (ALDERLAKE_S)
[10:49:01] [PASSED] 0x4688 (ALDERLAKE_S)
[10:49:01] [PASSED] 0x468A (ALDERLAKE_S)
[10:49:01] [PASSED] 0x468B (ALDERLAKE_S)
[10:49:01] [PASSED] 0x4690 (ALDERLAKE_S)
[10:49:01] [PASSED] 0x4692 (ALDERLAKE_S)
[10:49:01] [PASSED] 0x4693 (ALDERLAKE_S)
[10:49:01] [PASSED] 0x46A0 (ALDERLAKE_P)
[10:49:01] [PASSED] 0x46A1 (ALDERLAKE_P)
[10:49:01] [PASSED] 0x46A2 (ALDERLAKE_P)
[10:49:01] [PASSED] 0x46A3 (ALDERLAKE_P)
[10:49:01] [PASSED] 0x46A6 (ALDERLAKE_P)
[10:49:01] [PASSED] 0x46A8 (ALDERLAKE_P)
[10:49:01] [PASSED] 0x46AA (ALDERLAKE_P)
[10:49:01] [PASSED] 0x462A (ALDERLAKE_P)
[10:49:01] [PASSED] 0x4626 (ALDERLAKE_P)
[10:49:01] [PASSED] 0x4628 (ALDERLAKE_P)
[10:49:01] [PASSED] 0x46B0 (ALDERLAKE_P)
[10:49:01] [PASSED] 0x46B1 (ALDERLAKE_P)
[10:49:01] [PASSED] 0x46B2 (ALDERLAKE_P)
[10:49:01] [PASSED] 0x46B3 (ALDERLAKE_P)
[10:49:01] [PASSED] 0x46C0 (ALDERLAKE_P)
[10:49:01] [PASSED] 0x46C1 (ALDERLAKE_P)
[10:49:01] [PASSED] 0x46C2 (ALDERLAKE_P)
[10:49:01] [PASSED] 0x46C3 (ALDERLAKE_P)
[10:49:01] [PASSED] 0x46D0 (ALDERLAKE_N)
[10:49:01] [PASSED] 0x46D1 (ALDERLAKE_N)
[10:49:01] [PASSED] 0x46D2 (ALDERLAKE_N)
[10:49:01] [PASSED] 0x46D3 (ALDERLAKE_N)
[10:49:01] [PASSED] 0x46D4 (ALDERLAKE_N)
[10:49:01] [PASSED] 0xA721 (ALDERLAKE_P)
[10:49:01] [PASSED] 0xA7A1 (ALDERLAKE_P)
[10:49:01] [PASSED] 0xA7A9 (ALDERLAKE_P)
[10:49:01] [PASSED] 0xA7AC (ALDERLAKE_P)
[10:49:01] [PASSED] 0xA7AD (ALDERLAKE_P)
[10:49:01] [PASSED] 0xA720 (ALDERLAKE_P)
[10:49:01] [PASSED] 0xA7A0 (ALDERLAKE_P)
[10:49:01] [PASSED] 0xA7A8 (ALDERLAKE_P)
[10:49:01] [PASSED] 0xA7AA (ALDERLAKE_P)
[10:49:01] [PASSED] 0xA7AB (ALDERLAKE_P)
[10:49:01] [PASSED] 0xA780 (ALDERLAKE_S)
[10:49:01] [PASSED] 0xA781 (ALDERLAKE_S)
[10:49:01] [PASSED] 0xA782 (ALDERLAKE_S)
[10:49:01] [PASSED] 0xA783 (ALDERLAKE_S)
[10:49:01] [PASSED] 0xA788 (ALDERLAKE_S)
[10:49:01] [PASSED] 0xA789 (ALDERLAKE_S)
[10:49:01] [PASSED] 0xA78A (ALDERLAKE_S)
[10:49:01] [PASSED] 0xA78B (ALDERLAKE_S)
[10:49:01] [PASSED] 0x4905 (DG1)
[10:49:01] [PASSED] 0x4906 (DG1)
[10:49:01] [PASSED] 0x4907 (DG1)
[10:49:01] [PASSED] 0x4908 (DG1)
[10:49:01] [PASSED] 0x4909 (DG1)
[10:49:01] [PASSED] 0x56C0 (DG2)
[10:49:01] [PASSED] 0x56C2 (DG2)
[10:49:01] [PASSED] 0x56C1 (DG2)
[10:49:01] [PASSED] 0x7D51 (METEORLAKE)
[10:49:01] [PASSED] 0x7DD1 (METEORLAKE)
[10:49:01] [PASSED] 0x7D41 (METEORLAKE)
[10:49:01] [PASSED] 0x7D67 (METEORLAKE)
[10:49:01] [PASSED] 0xB640 (METEORLAKE)
[10:49:01] [PASSED] 0x56A0 (DG2)
[10:49:01] [PASSED] 0x56A1 (DG2)
[10:49:01] [PASSED] 0x56A2 (DG2)
[10:49:01] [PASSED] 0x56BE (DG2)
[10:49:01] [PASSED] 0x56BF (DG2)
[10:49:01] [PASSED] 0x5690 (DG2)
[10:49:01] [PASSED] 0x5691 (DG2)
[10:49:01] [PASSED] 0x5692 (DG2)
[10:49:01] [PASSED] 0x56A5 (DG2)
[10:49:01] [PASSED] 0x56A6 (DG2)
[10:49:01] [PASSED] 0x56B0 (DG2)
[10:49:01] [PASSED] 0x56B1 (DG2)
[10:49:01] [PASSED] 0x56BA (DG2)
[10:49:01] [PASSED] 0x56BB (DG2)
[10:49:01] [PASSED] 0x56BC (DG2)
[10:49:01] [PASSED] 0x56BD (DG2)
[10:49:01] [PASSED] 0x5693 (DG2)
[10:49:01] [PASSED] 0x5694 (DG2)
[10:49:01] [PASSED] 0x5695 (DG2)
[10:49:01] [PASSED] 0x56A3 (DG2)
[10:49:01] [PASSED] 0x56A4 (DG2)
[10:49:01] [PASSED] 0x56B2 (DG2)
[10:49:01] [PASSED] 0x56B3 (DG2)
[10:49:01] [PASSED] 0x5696 (DG2)
[10:49:01] [PASSED] 0x5697 (DG2)
[10:49:01] [PASSED] 0xB69 (PVC)
[10:49:01] [PASSED] 0xB6E (PVC)
[10:49:01] [PASSED] 0xBD4 (PVC)
[10:49:01] [PASSED] 0xBD5 (PVC)
[10:49:01] [PASSED] 0xBD6 (PVC)
[10:49:01] [PASSED] 0xBD7 (PVC)
[10:49:01] [PASSED] 0xBD8 (PVC)
[10:49:01] [PASSED] 0xBD9 (PVC)
[10:49:01] [PASSED] 0xBDA (PVC)
[10:49:01] [PASSED] 0xBDB (PVC)
[10:49:01] [PASSED] 0xBE0 (PVC)
[10:49:01] [PASSED] 0xBE1 (PVC)
[10:49:01] [PASSED] 0xBE5 (PVC)
[10:49:01] [PASSED] 0x7D40 (METEORLAKE)
[10:49:01] [PASSED] 0x7D45 (METEORLAKE)
[10:49:01] [PASSED] 0x7D55 (METEORLAKE)
[10:49:01] [PASSED] 0x7D60 (METEORLAKE)
[10:49:01] [PASSED] 0x7DD5 (METEORLAKE)
[10:49:01] [PASSED] 0x6420 (LUNARLAKE)
[10:49:01] [PASSED] 0x64A0 (LUNARLAKE)
[10:49:01] [PASSED] 0x64B0 (LUNARLAKE)
[10:49:01] [PASSED] 0xE202 (BATTLEMAGE)
[10:49:01] [PASSED] 0xE209 (BATTLEMAGE)
[10:49:01] [PASSED] 0xE20B (BATTLEMAGE)
[10:49:01] [PASSED] 0xE20C (BATTLEMAGE)
[10:49:01] [PASSED] 0xE20D (BATTLEMAGE)
[10:49:01] [PASSED] 0xE210 (BATTLEMAGE)
[10:49:01] [PASSED] 0xE211 (BATTLEMAGE)
[10:49:01] [PASSED] 0xE212 (BATTLEMAGE)
[10:49:01] [PASSED] 0xE216 (BATTLEMAGE)
[10:49:01] [PASSED] 0xE220 (BATTLEMAGE)
[10:49:01] [PASSED] 0xE221 (BATTLEMAGE)
[10:49:01] [PASSED] 0xE222 (BATTLEMAGE)
[10:49:01] [PASSED] 0xE223 (BATTLEMAGE)
[10:49:01] [PASSED] 0xB080 (PANTHERLAKE)
[10:49:01] [PASSED] 0xB081 (PANTHERLAKE)
[10:49:01] [PASSED] 0xB082 (PANTHERLAKE)
[10:49:01] [PASSED] 0xB083 (PANTHERLAKE)
[10:49:01] [PASSED] 0xB084 (PANTHERLAKE)
[10:49:01] [PASSED] 0xB085 (PANTHERLAKE)
[10:49:01] [PASSED] 0xB086 (PANTHERLAKE)
[10:49:01] [PASSED] 0xB087 (PANTHERLAKE)
[10:49:01] [PASSED] 0xB08F (PANTHERLAKE)
[10:49:01] [PASSED] 0xB090 (PANTHERLAKE)
[10:49:01] [PASSED] 0xB0A0 (PANTHERLAKE)
[10:49:01] [PASSED] 0xB0B0 (PANTHERLAKE)
[10:49:01] [PASSED] 0xFD80 (PANTHERLAKE)
[10:49:01] [PASSED] 0xFD81 (PANTHERLAKE)
[10:49:01] [PASSED] 0xD740 (NOVALAKE_S)
[10:49:01] [PASSED] 0xD741 (NOVALAKE_S)
[10:49:01] [PASSED] 0xD742 (NOVALAKE_S)
[10:49:01] [PASSED] 0xD743 (NOVALAKE_S)
[10:49:01] [PASSED] 0xD745 (NOVALAKE_S)
[10:49:01] [PASSED] 0xD74A (NOVALAKE_S)
[10:49:01] [PASSED] 0xD74B (NOVALAKE_S)
[10:49:01] [PASSED] 0x674C (CRESCENTISLAND)
[10:49:01] [PASSED] 0x674D (CRESCENTISLAND)
[10:49:01] [PASSED] 0x674E (CRESCENTISLAND)
[10:49:01] [PASSED] 0x674F (CRESCENTISLAND)
[10:49:01] [PASSED] 0x6750 (CRESCENTISLAND)
[10:49:01] [PASSED] 0xD750 (NOVALAKE_P)
[10:49:01] [PASSED] 0xD751 (NOVALAKE_P)
[10:49:01] [PASSED] 0xD752 (NOVALAKE_P)
[10:49:01] [PASSED] 0xD753 (NOVALAKE_P)
[10:49:01] [PASSED] 0xD754 (NOVALAKE_P)
[10:49:01] [PASSED] 0xD755 (NOVALAKE_P)
[10:49:01] [PASSED] 0xD756 (NOVALAKE_P)
[10:49:01] [PASSED] 0xD757 (NOVALAKE_P)
[10:49:01] [PASSED] 0xD75F (NOVALAKE_P)
[10:49:01] =============== [PASSED] check_platform_desc ===============
[10:49:01] ===================== [PASSED] xe_pci ======================
[10:49:01] ============= xe_rtp_tables_test (5 subtests) ==============
[10:49:01] ================== xe_rtp_table_gt_test ===================
[10:49:01] [PASSED] gt_was/14011060649
[10:49:01] [PASSED] gt_was/14011059788
[10:49:01] [PASSED] gt_was/14015795083
[10:49:01] [PASSED] gt_was/16021867713
[10:49:01] [PASSED] gt_was/14019449301
[10:49:01] [PASSED] gt_was/16028005424
[10:49:01] [PASSED] gt_was/14026578760
[10:49:01] [PASSED] gt_was/1409420604
[10:49:01] [PASSED] gt_was/1408615072
[10:49:01] [PASSED] gt_was/22010523718
[10:49:01] [PASSED] gt_was/14011006942
[10:49:01] [PASSED] gt_was/14014830051
[10:49:01] [PASSED] gt_was/18018781329
[10:49:01] [PASSED] gt_was/1509235366
[10:49:01] [PASSED] gt_was/18018781329
[10:49:01] [PASSED] gt_was/16016694945
[10:49:01] [PASSED] gt_was/14018575942
[10:49:01] [PASSED] gt_was/22016670082
[10:49:01] [PASSED] gt_was/22016670082
[10:49:01] [PASSED] gt_was/14017421178
[10:49:01] [PASSED] gt_was/16025250150
[10:49:01] [PASSED] gt_was/14021871409
[10:49:01] [PASSED] gt_was/16021865536
[10:49:01] [PASSED] gt_was/14021486841
[10:49:01] [PASSED] gt_was/14025160223
[10:49:01] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[10:49:01] [PASSED] gt_was/14025635424
[10:49:01] [PASSED] gt_was/16028005424
[10:49:01] ============== [PASSED] xe_rtp_table_gt_test ===============
[10:49:01] ================== xe_rtp_table_gt_test ===================
[10:49:01] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[10:49:01] [PASSED] gt_tunings/Tuning: 32B Access Enable
[10:49:01] [PASSED] gt_tunings/Tuning: L3 cache
[10:49:01] [PASSED] gt_tunings/Tuning: L3 cache - media
[10:49:01] [PASSED] gt_tunings/Tuning: Compression Overfetch
[10:49:01] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[10:49:01] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[10:49:01] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[10:49:01] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[10:49:01] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[10:49:01] [PASSED] gt_tunings/Tuning: Stateless compression control
[10:49:01] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[10:49:01] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[10:49:01] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[10:49:01] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[10:49:01] ============== [PASSED] xe_rtp_table_gt_test ===============
[10:49:01] ================== xe_rtp_table_oob_test ==================
[10:49:01] [PASSED] oob_was/1607983814
[10:49:01] [PASSED] oob_was/16010904313
[10:49:01] [PASSED] oob_was/18022495364
[10:49:01] [PASSED] oob_was/22012773006
[10:49:01] [PASSED] oob_was/14014475959
[10:49:01] [PASSED] oob_was/22011391025
[10:49:01] [PASSED] oob_was/22012727170
[10:49:01] [PASSED] oob_was/22012727685
[10:49:01] [PASSED] oob_was/22016596838
[10:49:01] [PASSED] oob_was/18020744125
[10:49:01] [PASSED] oob_was/1409600907
[10:49:01] [PASSED] oob_was/22014953428
[10:49:01] [PASSED] oob_was/16017236439
[10:49:01] [PASSED] oob_was/14019821291
[10:49:01] [PASSED] oob_was/14015076503
[10:49:01] [PASSED] oob_was/14018913170
[10:49:01] [PASSED] oob_was/14018094691
[10:49:01] [PASSED] oob_was/18024947630
[10:49:01] [PASSED] oob_was/16022287689
[10:49:01] [PASSED] oob_was/13011645652
[10:49:01] [PASSED] oob_was/14022293748
[10:49:01] [PASSED] oob_was/22019794406
[10:49:01] [PASSED] oob_was/22019338487
[10:49:01] [PASSED] oob_was/16023588340
[10:49:01] [PASSED] oob_was/14019789679
[10:49:01] [PASSED] oob_was/14022866841
[10:49:01] [PASSED] oob_was/16021333562
[10:49:01] [PASSED] oob_was/14016712196
[10:49:01] [PASSED] oob_was/14015568240
[10:49:01] [PASSED] oob_was/18013179988
[10:49:01] [PASSED] oob_was/1508761755
[10:49:01] [PASSED] oob_was/16023105232
[10:49:01] [PASSED] oob_was/16026508708
[10:49:01] [PASSED] oob_was/14020001231
[10:49:01] [PASSED] oob_was/16023683509
[10:49:01] [PASSED] oob_was/14025515070
[10:49:01] [PASSED] oob_was/15015404425_disable
[10:49:01] [PASSED] oob_was/16026007364
[10:49:01] [PASSED] oob_was/14020316580
[10:49:01] [PASSED] oob_was/14025883347
[10:49:01] [PASSED] oob_was/16029380221
[10:49:01] [PASSED] oob_was/22022079272
[10:49:01] [PASSED] oob_was/16029897822
[10:49:01] [PASSED] oob_was/14027054324
[10:49:01] ============== [PASSED] xe_rtp_table_oob_test ==============
[10:49:01] ================ xe_rtp_table_dev_oob_test ================
[10:49:01] [PASSED] device_oob_was/22010954014
[10:49:01] [PASSED] device_oob_was/15015404425
[10:49:01] [PASSED] device_oob_was/22019338487_display
[10:49:01] [PASSED] device_oob_was/14022085890
[10:49:01] [PASSED] device_oob_was/14026539277
[10:49:01] [PASSED] device_oob_was/14026633728
[10:49:01] [PASSED] device_oob_was/14026746987
[10:49:01] [PASSED] device_oob_was/14026779378
[10:49:01] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[10:49:01] ========== xe_rtp_table_missing_upper_bound_test ==========
[10:49:01] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[10:49:01] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[10:49:01] [PASSED] register_whitelist/1806527549
[10:49:01] [PASSED] register_whitelist/allow_read_ctx_timestamp
[10:49:01] [PASSED] register_whitelist/allow_read_queue_timestamp
[10:49:01] [PASSED] register_whitelist/16014440446
[10:49:01] [PASSED] register_whitelist/16017236439
[10:49:01] [PASSED] register_whitelist/16020183090
[10:49:01] [PASSED] register_whitelist/14024997852
[10:49:01] [PASSED] register_whitelist/14024997852
[10:49:01] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[10:49:01] =============== [PASSED] xe_rtp_tables_test ================
[10:49:01] =================== xe_rtp (3 subtests) ====================
[10:49:01] =================== xe_rtp_rules_tests ====================
[10:49:01] [PASSED] no
[10:49:01] [PASSED] yes
[10:49:01] [PASSED] no-and-no
[10:49:01] [PASSED] no-and-yes
[10:49:01] [PASSED] yes-and-no
[10:49:01] [PASSED] yes-and-yes
[10:49:01] [PASSED] no-or-no
[10:49:01] [PASSED] no-or-yes
[10:49:01] [PASSED] yes-or-no
[10:49:01] [PASSED] yes-or-yes
[10:49:01] [PASSED] no-yes-or-yes-no
[10:49:01] [PASSED] no-yes-or-yes-yes
[10:49:01] [PASSED] yes-yes-or-no-yes
[10:49:01] [PASSED] yes-yes-or-yes-yes
[10:49:01] [PASSED] no-no-or-yes-or-no
[10:49:01] [PASSED] or
[10:49:01] [PASSED] or-yes
[10:49:01] [PASSED] or-no
[10:49:01] [PASSED] yes-or
[10:49:01] [PASSED] no-or
[10:49:01] [PASSED] no-or-or-yes
[10:49:01] [PASSED] yes-or-or-no
[10:49:01] [PASSED] no-or-or-no
[10:49:01] [PASSED] missing-context-engine-class
[10:49:01] [PASSED] missing-context-engine-class-or-yes
[10:49:01] [PASSED] missing-context-engine-class-or-or-yes
[10:49:01] =============== [PASSED] xe_rtp_rules_tests ================
[10:49:01] =============== xe_rtp_process_to_sr_tests ================
[10:49:01] [PASSED] coalesce-same-reg
[10:49:01] [PASSED] coalesce-same-reg-literal-and-func
[10:49:01] [PASSED] no-match-no-add
[10:49:01] [PASSED] two-regs-two-entries
[10:49:01] [PASSED] clr-one-set-other
[10:49:01] [PASSED] set-field
[10:49:01] [PASSED] conflict-duplicate
[10:49:01] [PASSED] conflict-not-disjoint
[10:49:01] [PASSED] conflict-not-disjoint-literal-and-func
[10:49:01] [PASSED] conflict-reg-type
[10:49:01] [PASSED] bad-mcr-reg-forced-to-regular
[10:49:01] [PASSED] bad-regular-reg-forced-to-mcr
[10:49:01] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[10:49:01] ================== xe_rtp_process_tests ===================
[10:49:01] [PASSED] active1
[10:49:01] [PASSED] active2
[10:49:01] [PASSED] active-inactive
[10:49:01] [PASSED] inactive-active
[10:49:01] [PASSED] inactive-active-inactive
[10:49:01] [PASSED] inactive-inactive-inactive
[10:49:01] ============== [PASSED] xe_rtp_process_tests ===============
[10:49:01] ===================== [PASSED] xe_rtp ======================
[10:49:01] ==================== xe_wa (1 subtest) =====================
[10:49:01] ======================== xe_wa_gt =========================
[10:49:01] [PASSED] TIGERLAKE B0
[10:49:01] [PASSED] DG1 A0
[10:49:01] [PASSED] DG1 B0
[10:49:01] [PASSED] ALDERLAKE_S A0
[10:49:01] [PASSED] ALDERLAKE_S B0
[10:49:01] [PASSED] ALDERLAKE_S C0
[10:49:01] [PASSED] ALDERLAKE_S D0
[10:49:01] [PASSED] ALDERLAKE_P A0
[10:49:01] [PASSED] ALDERLAKE_P B0
[10:49:01] [PASSED] ALDERLAKE_P C0
[10:49:01] [PASSED] ALDERLAKE_S RPLS D0
[10:49:01] [PASSED] ALDERLAKE_P RPLU E0
[10:49:01] [PASSED] DG2 G10 C0
[10:49:01] [PASSED] DG2 G11 B1
[10:49:01] [PASSED] DG2 G12 A1
[10:49:01] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[10:49:01] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[10:49:01] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[10:49:01] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[10:49:01] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[10:49:01] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[10:49:01] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[10:49:01] ==================== [PASSED] xe_wa_gt =====================
[10:49:01] ====================== [PASSED] xe_wa ======================
[10:49:01] ============================================================
[10:49:01] Testing complete. Ran 789 tests: passed: 761, skipped: 28
[10:49:01] Elapsed time: 37.020s total, 4.411s configuring, 31.894s building, 0.668s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[10:49:01] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:49:03] 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
[10:49:27] Starting KUnit Kernel (1/1)...
[10:49:27] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:49:27] ============ drm_test_pick_cmdline (2 subtests) ============
[10:49:27] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[10:49:27] =============== drm_test_pick_cmdline_named ===============
[10:49:27] [PASSED] NTSC
[10:49:27] [PASSED] NTSC-J
[10:49:27] [PASSED] PAL
[10:49:27] [PASSED] PAL-M
[10:49:27] =========== [PASSED] drm_test_pick_cmdline_named ===========
[10:49:27] ============== [PASSED] drm_test_pick_cmdline ==============
[10:49:27] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[10:49:27] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[10:49:27] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[10:49:27] =========== drm_validate_clone_mode (2 subtests) ===========
[10:49:27] ============== drm_test_check_in_clone_mode ===============
[10:49:27] [PASSED] in_clone_mode
[10:49:27] [PASSED] not_in_clone_mode
[10:49:27] ========== [PASSED] drm_test_check_in_clone_mode ===========
[10:49:27] =============== drm_test_check_valid_clones ===============
[10:49:27] [PASSED] not_in_clone_mode
[10:49:27] [PASSED] valid_clone
[10:49:27] [PASSED] invalid_clone
[10:49:27] =========== [PASSED] drm_test_check_valid_clones ===========
[10:49:27] ============= [PASSED] drm_validate_clone_mode =============
[10:49:27] ============= drm_validate_modeset (1 subtest) =============
[10:49:27] [PASSED] drm_test_check_connector_changed_modeset
[10:49:27] ============== [PASSED] drm_validate_modeset ===============
[10:49:27] ====== drm_test_bridge_get_current_state (1 subtest) =======
[10:49:27] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[10:49:27] ======== [PASSED] drm_test_bridge_get_current_state ========
[10:49:27] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[10:49:27] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[10:49:27] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[10:49:27] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[10:49:27] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[10:49:27] ============== drm_bridge_alloc (2 subtests) ===============
[10:49:27] [PASSED] drm_test_drm_bridge_alloc_basic
[10:49:27] [PASSED] drm_test_drm_bridge_alloc_get_put
[10:49:27] ================ [PASSED] drm_bridge_alloc =================
[10:49:27] ============= drm_bridge_bus_fmt (5 subtests) ==============
[10:49:27] [PASSED] drm_test_bridge_rgb_yuv_rgb
[10:49:27] [PASSED] drm_test_bridge_must_convert_to_yuv444
[10:49:27] [PASSED] drm_test_bridge_hdmi_auto_rgb
[10:49:27] [PASSED] drm_test_bridge_auto_first
[10:49:27] [PASSED] drm_test_bridge_rgb_yuv_no_path
[10:49:27] =============== [PASSED] drm_bridge_bus_fmt ================
[10:49:27] ============= drm_cmdline_parser (40 subtests) =============
[10:49:27] [PASSED] drm_test_cmdline_force_d_only
[10:49:27] [PASSED] drm_test_cmdline_force_D_only_dvi
[10:49:27] [PASSED] drm_test_cmdline_force_D_only_hdmi
[10:49:27] [PASSED] drm_test_cmdline_force_D_only_not_digital
[10:49:27] [PASSED] drm_test_cmdline_force_e_only
[10:49:27] [PASSED] drm_test_cmdline_res
[10:49:27] [PASSED] drm_test_cmdline_res_vesa
[10:49:27] [PASSED] drm_test_cmdline_res_vesa_rblank
[10:49:27] [PASSED] drm_test_cmdline_res_rblank
[10:49:27] [PASSED] drm_test_cmdline_res_bpp
[10:49:27] [PASSED] drm_test_cmdline_res_refresh
[10:49:27] [PASSED] drm_test_cmdline_res_bpp_refresh
[10:49:27] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[10:49:27] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[10:49:27] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[10:49:27] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[10:49:27] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[10:49:27] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[10:49:27] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[10:49:27] [PASSED] drm_test_cmdline_res_margins_force_on
[10:49:27] [PASSED] drm_test_cmdline_res_vesa_margins
[10:49:27] [PASSED] drm_test_cmdline_name
[10:49:27] [PASSED] drm_test_cmdline_name_bpp
[10:49:27] [PASSED] drm_test_cmdline_name_option
[10:49:27] [PASSED] drm_test_cmdline_name_bpp_option
[10:49:27] [PASSED] drm_test_cmdline_rotate_0
[10:49:27] [PASSED] drm_test_cmdline_rotate_90
[10:49:27] [PASSED] drm_test_cmdline_rotate_180
[10:49:27] [PASSED] drm_test_cmdline_rotate_270
[10:49:27] [PASSED] drm_test_cmdline_hmirror
[10:49:27] [PASSED] drm_test_cmdline_vmirror
[10:49:27] [PASSED] drm_test_cmdline_margin_options
[10:49:27] [PASSED] drm_test_cmdline_multiple_options
[10:49:27] [PASSED] drm_test_cmdline_bpp_extra_and_option
[10:49:27] [PASSED] drm_test_cmdline_extra_and_option
[10:49:27] [PASSED] drm_test_cmdline_freestanding_options
[10:49:27] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[10:49:27] [PASSED] drm_test_cmdline_panel_orientation
[10:49:27] ================ drm_test_cmdline_invalid =================
[10:49:27] [PASSED] margin_only
[10:49:27] [PASSED] interlace_only
[10:49:27] [PASSED] res_missing_x
[10:49:27] [PASSED] res_missing_y
[10:49:27] [PASSED] res_bad_y
[10:49:27] [PASSED] res_missing_y_bpp
[10:49:27] [PASSED] res_bad_bpp
[10:49:27] [PASSED] res_bad_refresh
[10:49:27] [PASSED] res_bpp_refresh_force_on_off
[10:49:27] [PASSED] res_invalid_mode
[10:49:27] [PASSED] res_bpp_wrong_place_mode
[10:49:27] [PASSED] name_bpp_refresh
[10:49:27] [PASSED] name_refresh
[10:49:27] [PASSED] name_refresh_wrong_mode
[10:49:27] [PASSED] name_refresh_invalid_mode
[10:49:27] [PASSED] rotate_multiple
[10:49:27] [PASSED] rotate_invalid_val
[10:49:27] [PASSED] rotate_truncated
[10:49:27] [PASSED] invalid_option
[10:49:27] [PASSED] invalid_tv_option
[10:49:27] [PASSED] truncated_tv_option
[10:49:27] ============ [PASSED] drm_test_cmdline_invalid =============
[10:49:27] =============== drm_test_cmdline_tv_options ===============
[10:49:27] [PASSED] NTSC
[10:49:27] [PASSED] NTSC_443
[10:49:27] [PASSED] NTSC_J
[10:49:27] [PASSED] PAL
[10:49:27] [PASSED] PAL_M
[10:49:27] [PASSED] PAL_N
[10:49:27] [PASSED] SECAM
[10:49:27] [PASSED] MONO_525
[10:49:27] [PASSED] MONO_625
[10:49:27] =========== [PASSED] drm_test_cmdline_tv_options ===========
[10:49:27] =============== [PASSED] drm_cmdline_parser ================
[10:49:27] ========== drmm_connector_hdmi_init (20 subtests) ==========
[10:49:27] [PASSED] drm_test_connector_hdmi_init_valid
[10:49:27] [PASSED] drm_test_connector_hdmi_init_bpc_8
[10:49:27] [PASSED] drm_test_connector_hdmi_init_bpc_10
[10:49:27] [PASSED] drm_test_connector_hdmi_init_bpc_12
[10:49:27] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[10:49:27] [PASSED] drm_test_connector_hdmi_init_bpc_null
[10:49:27] [PASSED] drm_test_connector_hdmi_init_formats_empty
[10:49:27] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[10:49:27] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[10:49:27] [PASSED] supported_formats=0x9 yuv420_allowed=1
[10:49:27] [PASSED] supported_formats=0x9 yuv420_allowed=0
[10:49:27] [PASSED] supported_formats=0x5 yuv420_allowed=1
[10:49:27] [PASSED] supported_formats=0x5 yuv420_allowed=0
[10:49:27] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[10:49:27] [PASSED] drm_test_connector_hdmi_init_null_ddc
[10:49:27] [PASSED] drm_test_connector_hdmi_init_null_product
[10:49:27] [PASSED] drm_test_connector_hdmi_init_null_vendor
[10:49:27] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[10:49:27] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[10:49:27] [PASSED] drm_test_connector_hdmi_init_product_valid
[10:49:27] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[10:49:27] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[10:49:27] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[10:49:27] ========= drm_test_connector_hdmi_init_type_valid =========
[10:49:27] [PASSED] HDMI-A
[10:49:27] [PASSED] HDMI-B
[10:49:27] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[10:49:27] ======== drm_test_connector_hdmi_init_type_invalid ========
[10:49:27] [PASSED] Unknown
[10:49:27] [PASSED] VGA
[10:49:27] [PASSED] DVI-I
[10:49:27] [PASSED] DVI-D
[10:49:27] [PASSED] DVI-A
[10:49:27] [PASSED] Composite
[10:49:27] [PASSED] SVIDEO
[10:49:27] [PASSED] LVDS
[10:49:27] [PASSED] Component
[10:49:27] [PASSED] DIN
[10:49:27] [PASSED] DP
[10:49:27] [PASSED] TV
[10:49:27] [PASSED] eDP
[10:49:27] [PASSED] Virtual
[10:49:27] [PASSED] DSI
[10:49:27] [PASSED] DPI
[10:49:27] [PASSED] Writeback
[10:49:27] [PASSED] SPI
[10:49:27] [PASSED] USB
[10:49:27] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[10:49:27] ============ [PASSED] drmm_connector_hdmi_init =============
[10:49:27] ============= drmm_connector_init (3 subtests) =============
[10:49:27] [PASSED] drm_test_drmm_connector_init
[10:49:27] [PASSED] drm_test_drmm_connector_init_null_ddc
[10:49:27] ========= drm_test_drmm_connector_init_type_valid =========
[10:49:27] [PASSED] Unknown
[10:49:27] [PASSED] VGA
[10:49:27] [PASSED] DVI-I
[10:49:27] [PASSED] DVI-D
[10:49:27] [PASSED] DVI-A
[10:49:27] [PASSED] Composite
[10:49:27] [PASSED] SVIDEO
[10:49:27] [PASSED] LVDS
[10:49:27] [PASSED] Component
[10:49:27] [PASSED] DIN
[10:49:27] [PASSED] DP
[10:49:27] [PASSED] HDMI-A
[10:49:27] [PASSED] HDMI-B
[10:49:27] [PASSED] TV
[10:49:27] [PASSED] eDP
[10:49:27] [PASSED] Virtual
[10:49:27] [PASSED] DSI
[10:49:27] [PASSED] DPI
[10:49:27] [PASSED] Writeback
[10:49:27] [PASSED] SPI
[10:49:27] [PASSED] USB
[10:49:27] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[10:49:27] =============== [PASSED] drmm_connector_init ===============
[10:49:27] ========= drm_connector_dynamic_init (6 subtests) ==========
[10:49:27] [PASSED] drm_test_drm_connector_dynamic_init
[10:49:27] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[10:49:27] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[10:49:27] [PASSED] drm_test_drm_connector_dynamic_init_properties
[10:49:27] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[10:49:27] [PASSED] Unknown
[10:49:27] [PASSED] VGA
[10:49:27] [PASSED] DVI-I
[10:49:27] [PASSED] DVI-D
[10:49:27] [PASSED] DVI-A
[10:49:27] [PASSED] Composite
[10:49:27] [PASSED] SVIDEO
[10:49:27] [PASSED] LVDS
[10:49:27] [PASSED] Component
[10:49:27] [PASSED] DIN
[10:49:27] [PASSED] DP
[10:49:27] [PASSED] HDMI-A
[10:49:27] [PASSED] HDMI-B
[10:49:27] [PASSED] TV
[10:49:27] [PASSED] eDP
[10:49:27] [PASSED] Virtual
[10:49:27] [PASSED] DSI
[10:49:27] [PASSED] DPI
[10:49:27] [PASSED] Writeback
[10:49:27] [PASSED] SPI
[10:49:27] [PASSED] USB
[10:49:27] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[10:49:27] ======== drm_test_drm_connector_dynamic_init_name =========
[10:49:27] [PASSED] Unknown
[10:49:27] [PASSED] VGA
[10:49:27] [PASSED] DVI-I
[10:49:27] [PASSED] DVI-D
[10:49:27] [PASSED] DVI-A
[10:49:27] [PASSED] Composite
[10:49:27] [PASSED] SVIDEO
[10:49:27] [PASSED] LVDS
[10:49:27] [PASSED] Component
[10:49:27] [PASSED] DIN
[10:49:27] [PASSED] DP
[10:49:27] [PASSED] HDMI-A
[10:49:27] [PASSED] HDMI-B
[10:49:27] [PASSED] TV
[10:49:27] [PASSED] eDP
[10:49:27] [PASSED] Virtual
[10:49:27] [PASSED] DSI
[10:49:27] [PASSED] DPI
[10:49:27] [PASSED] Writeback
[10:49:27] [PASSED] SPI
[10:49:27] [PASSED] USB
[10:49:27] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[10:49:27] =========== [PASSED] drm_connector_dynamic_init ============
[10:49:27] ==== drm_connector_dynamic_register_early (4 subtests) =====
[10:49:27] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[10:49:27] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[10:49:27] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[10:49:27] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[10:49:27] ====== [PASSED] drm_connector_dynamic_register_early =======
[10:49:27] ======= drm_connector_dynamic_register (7 subtests) ========
[10:49:27] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[10:49:27] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[10:49:27] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[10:49:27] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[10:49:27] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[10:49:27] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[10:49:27] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[10:49:27] ========= [PASSED] drm_connector_dynamic_register ==========
[10:49:27] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[10:49:27] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[10:49:27] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[10:49:27] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[10:49:27] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[10:49:27] ========== drm_test_get_tv_mode_from_name_valid ===========
[10:49:27] [PASSED] NTSC
[10:49:27] [PASSED] NTSC-443
[10:49:27] [PASSED] NTSC-J
[10:49:27] [PASSED] PAL
[10:49:27] [PASSED] PAL-M
[10:49:27] [PASSED] PAL-N
[10:49:27] [PASSED] SECAM
[10:49:27] [PASSED] Mono
[10:49:27] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[10:49:27] [PASSED] drm_test_get_tv_mode_from_name_truncated
[10:49:27] ============ [PASSED] drm_get_tv_mode_from_name ============
[10:49:27] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[10:49:27] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[10:49:27] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[10:49:27] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[10:49:27] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[10:49:27] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[10:49:27] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[10:49:27] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[10:49:27] [PASSED] VIC 96
[10:49:27] [PASSED] VIC 97
[10:49:27] [PASSED] VIC 101
[10:49:27] [PASSED] VIC 102
[10:49:27] [PASSED] VIC 106
[10:49:27] [PASSED] VIC 107
[10:49:27] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[10:49:27] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[10:49:27] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[10:49:27] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[10:49:27] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[10:49:27] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[10:49:27] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[10:49:27] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[10:49:27] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[10:49:27] [PASSED] Automatic
[10:49:27] [PASSED] Full
[10:49:27] [PASSED] Limited 16:235
[10:49:27] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[10:49:27] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[10:49:27] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[10:49:27] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[10:49:27] === drm_test_drm_hdmi_connector_get_output_format_name ====
[10:49:27] [PASSED] RGB
[10:49:27] [PASSED] YUV 4:2:0
[10:49:27] [PASSED] YUV 4:2:2
[10:49:27] [PASSED] YUV 4:4:4
[10:49:27] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[10:49:27] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[10:49:27] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[10:49:27] ============= drm_damage_helper (21 subtests) ==============
[10:49:27] [PASSED] drm_test_damage_iter_no_damage
[10:49:27] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[10:49:27] [PASSED] drm_test_damage_iter_no_damage_src_moved
[10:49:27] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[10:49:27] [PASSED] drm_test_damage_iter_no_damage_not_visible
[10:49:27] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[10:49:27] [PASSED] drm_test_damage_iter_no_damage_no_fb
[10:49:27] [PASSED] drm_test_damage_iter_simple_damage
[10:49:27] [PASSED] drm_test_damage_iter_single_damage
[10:49:27] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[10:49:27] [PASSED] drm_test_damage_iter_single_damage_outside_src
[10:49:27] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[10:49:27] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[10:49:27] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[10:49:27] [PASSED] drm_test_damage_iter_single_damage_src_moved
[10:49:27] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[10:49:27] [PASSED] drm_test_damage_iter_damage
[10:49:27] [PASSED] drm_test_damage_iter_damage_one_intersect
[10:49:27] [PASSED] drm_test_damage_iter_damage_one_outside
[10:49:27] [PASSED] drm_test_damage_iter_damage_src_moved
[10:49:27] [PASSED] drm_test_damage_iter_damage_not_visible
[10:49:27] ================ [PASSED] drm_damage_helper ================
[10:49:27] ============== drm_dp_mst_helper (3 subtests) ==============
[10:49:27] ============== drm_test_dp_mst_calc_pbn_mode ==============
[10:49:27] [PASSED] Clock 154000 BPP 30 DSC disabled
[10:49:27] [PASSED] Clock 234000 BPP 30 DSC disabled
[10:49:27] [PASSED] Clock 297000 BPP 24 DSC disabled
[10:49:27] [PASSED] Clock 332880 BPP 24 DSC enabled
[10:49:27] [PASSED] Clock 324540 BPP 24 DSC enabled
[10:49:27] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[10:49:27] ============== drm_test_dp_mst_calc_pbn_div ===============
[10:49:27] [PASSED] Link rate 2000000 lane count 4
[10:49:27] [PASSED] Link rate 2000000 lane count 2
[10:49:27] [PASSED] Link rate 2000000 lane count 1
[10:49:27] [PASSED] Link rate 1350000 lane count 4
[10:49:27] [PASSED] Link rate 1350000 lane count 2
[10:49:27] [PASSED] Link rate 1350000 lane count 1
[10:49:27] [PASSED] Link rate 1000000 lane count 4
[10:49:27] [PASSED] Link rate 1000000 lane count 2
[10:49:27] [PASSED] Link rate 1000000 lane count 1
[10:49:27] [PASSED] Link rate 810000 lane count 4
[10:49:27] [PASSED] Link rate 810000 lane count 2
[10:49:27] [PASSED] Link rate 810000 lane count 1
[10:49:27] [PASSED] Link rate 540000 lane count 4
[10:49:27] [PASSED] Link rate 540000 lane count 2
[10:49:27] [PASSED] Link rate 540000 lane count 1
[10:49:27] [PASSED] Link rate 270000 lane count 4
[10:49:27] [PASSED] Link rate 270000 lane count 2
[10:49:27] [PASSED] Link rate 270000 lane count 1
[10:49:27] [PASSED] Link rate 162000 lane count 4
[10:49:27] [PASSED] Link rate 162000 lane count 2
[10:49:27] [PASSED] Link rate 162000 lane count 1
[10:49:27] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[10:49:27] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[10:49:27] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[10:49:27] [PASSED] DP_POWER_UP_PHY with port number
[10:49:27] [PASSED] DP_POWER_DOWN_PHY with port number
[10:49:27] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[10:49:27] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[10:49:27] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[10:49:27] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[10:49:27] [PASSED] DP_QUERY_PAYLOAD with port number
[10:49:27] [PASSED] DP_QUERY_PAYLOAD with VCPI
[10:49:27] [PASSED] DP_REMOTE_DPCD_READ with port number
[10:49:27] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[10:49:27] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[10:49:27] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[10:49:27] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[10:49:27] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[10:49:27] [PASSED] DP_REMOTE_I2C_READ with port number
[10:49:27] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[10:49:27] [PASSED] DP_REMOTE_I2C_READ with transactions array
[10:49:27] [PASSED] DP_REMOTE_I2C_WRITE with port number
[10:49:27] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[10:49:27] [PASSED] DP_REMOTE_I2C_WRITE with data array
[10:49:27] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[10:49:27] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[10:49:27] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[10:49:27] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[10:49:27] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[10:49:27] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[10:49:27] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[10:49:27] ================ [PASSED] drm_dp_mst_helper ================
[10:49:27] ================== drm_exec (7 subtests) ===================
[10:49:27] [PASSED] sanitycheck
[10:49:27] [PASSED] test_lock
[10:49:27] [PASSED] test_lock_unlock
[10:49:27] [PASSED] test_duplicates
[10:49:27] [PASSED] test_prepare
[10:49:27] [PASSED] test_prepare_array
[10:49:27] [PASSED] test_multiple_loops
[10:49:27] ==================== [PASSED] drm_exec =====================
[10:49:27] =========== drm_format_helper_test (17 subtests) ===========
[10:49:27] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[10:49:27] [PASSED] single_pixel_source_buffer
[10:49:27] [PASSED] single_pixel_clip_rectangle
[10:49:27] [PASSED] well_known_colors
[10:49:27] [PASSED] destination_pitch
[10:49:27] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[10:49:27] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[10:49:27] [PASSED] single_pixel_source_buffer
[10:49:27] [PASSED] single_pixel_clip_rectangle
[10:49:27] [PASSED] well_known_colors
[10:49:27] [PASSED] destination_pitch
[10:49:27] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[10:49:27] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[10:49:27] [PASSED] single_pixel_source_buffer
[10:49:27] [PASSED] single_pixel_clip_rectangle
[10:49:27] [PASSED] well_known_colors
[10:49:27] [PASSED] destination_pitch
[10:49:27] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[10:49:27] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[10:49:27] [PASSED] single_pixel_source_buffer
[10:49:27] [PASSED] single_pixel_clip_rectangle
[10:49:27] [PASSED] well_known_colors
[10:49:27] [PASSED] destination_pitch
[10:49:27] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[10:49:27] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[10:49:27] [PASSED] single_pixel_source_buffer
[10:49:27] [PASSED] single_pixel_clip_rectangle
[10:49:27] [PASSED] well_known_colors
[10:49:27] [PASSED] destination_pitch
[10:49:27] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[10:49:27] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[10:49:27] [PASSED] single_pixel_source_buffer
[10:49:27] [PASSED] single_pixel_clip_rectangle
[10:49:27] [PASSED] well_known_colors
[10:49:27] [PASSED] destination_pitch
[10:49:27] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[10:49:27] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[10:49:27] [PASSED] single_pixel_source_buffer
[10:49:27] [PASSED] single_pixel_clip_rectangle
[10:49:27] [PASSED] well_known_colors
[10:49:27] [PASSED] destination_pitch
[10:49:27] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[10:49:27] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[10:49:27] [PASSED] single_pixel_source_buffer
[10:49:27] [PASSED] single_pixel_clip_rectangle
[10:49:27] [PASSED] well_known_colors
[10:49:27] [PASSED] destination_pitch
[10:49:27] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[10:49:27] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[10:49:27] [PASSED] single_pixel_source_buffer
[10:49:27] [PASSED] single_pixel_clip_rectangle
[10:49:27] [PASSED] well_known_colors
[10:49:27] [PASSED] destination_pitch
[10:49:27] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[10:49:27] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[10:49:27] [PASSED] single_pixel_source_buffer
[10:49:27] [PASSED] single_pixel_clip_rectangle
[10:49:27] [PASSED] well_known_colors
[10:49:27] [PASSED] destination_pitch
[10:49:27] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[10:49:27] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[10:49:27] [PASSED] single_pixel_source_buffer
[10:49:27] [PASSED] single_pixel_clip_rectangle
[10:49:27] [PASSED] well_known_colors
[10:49:27] [PASSED] destination_pitch
[10:49:27] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[10:49:27] ============== drm_test_fb_xrgb8888_to_mono ===============
[10:49:27] [PASSED] single_pixel_source_buffer
[10:49:27] [PASSED] single_pixel_clip_rectangle
[10:49:27] [PASSED] well_known_colors
[10:49:27] [PASSED] destination_pitch
[10:49:27] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[10:49:27] ==================== drm_test_fb_swab =====================
[10:49:27] [PASSED] single_pixel_source_buffer
[10:49:27] [PASSED] single_pixel_clip_rectangle
[10:49:27] [PASSED] well_known_colors
[10:49:27] [PASSED] destination_pitch
[10:49:27] ================ [PASSED] drm_test_fb_swab =================
[10:49:27] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[10:49:27] [PASSED] single_pixel_source_buffer
[10:49:27] [PASSED] single_pixel_clip_rectangle
[10:49:27] [PASSED] well_known_colors
[10:49:27] [PASSED] destination_pitch
[10:49:27] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[10:49:27] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[10:49:27] [PASSED] single_pixel_source_buffer
[10:49:27] [PASSED] single_pixel_clip_rectangle
[10:49:27] [PASSED] well_known_colors
[10:49:27] [PASSED] destination_pitch
[10:49:27] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[10:49:27] ================= drm_test_fb_clip_offset =================
[10:49:27] [PASSED] pass through
[10:49:27] [PASSED] horizontal offset
[10:49:27] [PASSED] vertical offset
[10:49:27] [PASSED] horizontal and vertical offset
[10:49:27] [PASSED] horizontal offset (custom pitch)
[10:49:27] [PASSED] vertical offset (custom pitch)
[10:49:27] [PASSED] horizontal and vertical offset (custom pitch)
[10:49:27] ============= [PASSED] drm_test_fb_clip_offset =============
[10:49:27] =================== drm_test_fb_memcpy ====================
[10:49:27] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[10:49:27] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[10:49:27] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[10:49:27] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[10:49:27] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[10:49:27] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[10:49:27] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[10:49:27] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[10:49:27] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[10:49:27] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[10:49:27] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[10:49:27] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[10:49:27] =============== [PASSED] drm_test_fb_memcpy ================
[10:49:27] ============= [PASSED] drm_format_helper_test ==============
[10:49:27] ================= drm_format (18 subtests) =================
[10:49:27] [PASSED] drm_test_format_block_width_invalid
[10:49:27] [PASSED] drm_test_format_block_width_one_plane
[10:49:27] [PASSED] drm_test_format_block_width_two_plane
[10:49:27] [PASSED] drm_test_format_block_width_three_plane
[10:49:27] [PASSED] drm_test_format_block_width_tiled
[10:49:27] [PASSED] drm_test_format_block_height_invalid
[10:49:27] [PASSED] drm_test_format_block_height_one_plane
[10:49:27] [PASSED] drm_test_format_block_height_two_plane
[10:49:27] [PASSED] drm_test_format_block_height_three_plane
[10:49:27] [PASSED] drm_test_format_block_height_tiled
[10:49:27] [PASSED] drm_test_format_min_pitch_invalid
[10:49:27] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[10:49:27] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[10:49:27] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[10:49:27] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[10:49:27] [PASSED] drm_test_format_min_pitch_two_plane
[10:49:27] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[10:49:27] [PASSED] drm_test_format_min_pitch_tiled
[10:49:27] =================== [PASSED] drm_format ====================
[10:49:27] ============== drm_framebuffer (10 subtests) ===============
[10:49:27] ========== drm_test_framebuffer_check_src_coords ==========
[10:49:27] [PASSED] Success: source fits into fb
[10:49:27] [PASSED] Fail: overflowing fb with x-axis coordinate
[10:49:27] [PASSED] Fail: overflowing fb with y-axis coordinate
[10:49:27] [PASSED] Fail: overflowing fb with source width
[10:49:27] [PASSED] Fail: overflowing fb with source height
[10:49:27] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[10:49:27] [PASSED] drm_test_framebuffer_cleanup
[10:49:27] =============== drm_test_framebuffer_create ===============
[10:49:27] [PASSED] ABGR8888 normal sizes
[10:49:27] [PASSED] ABGR8888 max sizes
[10:49:27] [PASSED] ABGR8888 pitch greater than min required
[10:49:27] [PASSED] ABGR8888 pitch less than min required
[10:49:27] [PASSED] ABGR8888 Invalid width
[10:49:27] [PASSED] ABGR8888 Invalid buffer handle
[10:49:27] [PASSED] No pixel format
[10:49:27] [PASSED] ABGR8888 Width 0
[10:49:27] [PASSED] ABGR8888 Height 0
[10:49:27] [PASSED] ABGR8888 Out of bound height * pitch combination
[10:49:27] [PASSED] ABGR8888 Large buffer offset
[10:49:27] [PASSED] ABGR8888 Buffer offset for inexistent plane
[10:49:27] [PASSED] ABGR8888 Invalid flag
[10:49:27] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[10:49:27] [PASSED] ABGR8888 Valid buffer modifier
[10:49:27] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[10:49:27] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[10:49:27] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[10:49:27] [PASSED] NV12 Normal sizes
[10:49:27] [PASSED] NV12 Max sizes
[10:49:27] [PASSED] NV12 Invalid pitch
[10:49:27] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[10:49:27] [PASSED] NV12 different modifier per-plane
[10:49:27] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[10:49:27] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[10:49:27] [PASSED] NV12 Modifier for inexistent plane
[10:49:27] [PASSED] NV12 Handle for inexistent plane
[10:49:27] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[10:49:27] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[10:49:27] [PASSED] YVU420 Normal sizes
[10:49:27] [PASSED] YVU420 Max sizes
[10:49:27] [PASSED] YVU420 Invalid pitch
[10:49:27] [PASSED] YVU420 Different pitches
[10:49:27] [PASSED] YVU420 Different buffer offsets/pitches
[10:49:27] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[10:49:27] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[10:49:27] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[10:49:27] [PASSED] YVU420 Valid modifier
[10:49:27] [PASSED] YVU420 Different modifiers per plane
[10:49:27] [PASSED] YVU420 Modifier for inexistent plane
[10:49:27] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[10:49:27] [PASSED] X0L2 Normal sizes
[10:49:27] [PASSED] X0L2 Max sizes
[10:49:27] [PASSED] X0L2 Invalid pitch
[10:49:27] [PASSED] X0L2 Pitch greater than minimum required
[10:49:27] [PASSED] X0L2 Handle for inexistent plane
[10:49:27] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[10:49:27] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[10:49:27] [PASSED] X0L2 Valid modifier
[10:49:27] [PASSED] X0L2 Modifier for inexistent plane
[10:49:27] =========== [PASSED] drm_test_framebuffer_create ===========
[10:49:27] [PASSED] drm_test_framebuffer_free
[10:49:27] [PASSED] drm_test_framebuffer_init
[10:49:27] [PASSED] drm_test_framebuffer_init_bad_format
[10:49:27] [PASSED] drm_test_framebuffer_init_dev_mismatch
[10:49:27] [PASSED] drm_test_framebuffer_lookup
[10:49:27] [PASSED] drm_test_framebuffer_lookup_inexistent
[10:49:27] [PASSED] drm_test_framebuffer_modifiers_not_supported
[10:49:27] ================= [PASSED] drm_framebuffer =================
[10:49:27] ================ drm_gem_shmem (8 subtests) ================
[10:49:27] [PASSED] drm_gem_shmem_test_obj_create
[10:49:27] [PASSED] drm_gem_shmem_test_obj_create_private
[10:49:27] [PASSED] drm_gem_shmem_test_pin_pages
[10:49:27] [PASSED] drm_gem_shmem_test_vmap
[10:49:27] [PASSED] drm_gem_shmem_test_get_sg_table
[10:49:27] [PASSED] drm_gem_shmem_test_get_pages_sgt
[10:49:27] [PASSED] drm_gem_shmem_test_madvise
[10:49:27] [PASSED] drm_gem_shmem_test_purge
[10:49:27] ================== [PASSED] drm_gem_shmem ==================
[10:49:27] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[10:49:27] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[10:49:27] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[10:49:27] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[10:49:27] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[10:49:27] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[10:49:27] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[10:49:27] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[10:49:27] [PASSED] Automatic
[10:49:27] [PASSED] Full
[10:49:27] [PASSED] Limited 16:235
[10:49:27] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[10:49:27] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[10:49:27] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[10:49:27] [PASSED] drm_test_check_disable_connector
[10:49:27] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[10:49:27] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[10:49:27] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[10:49:27] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[10:49:27] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[10:49:27] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[10:49:27] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[10:49:27] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[10:49:27] [PASSED] drm_test_check_output_bpc_dvi
[10:49:27] [PASSED] drm_test_check_output_bpc_format_vic_1
[10:49:27] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[10:49:27] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[10:49:27] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[10:49:27] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[10:49:27] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[10:49:27] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[10:49:27] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[10:49:27] ============ drm_test_check_hdmi_color_format =============
[10:49:27] [PASSED] AUTO -> RGB
[10:49:27] [PASSED] YCBCR422 -> YUV422
[10:49:27] [PASSED] YCBCR420 -> YUV420
[10:49:27] [PASSED] YCBCR444 -> YUV444
[10:49:27] [PASSED] RGB -> RGB
[10:49:27] ======== [PASSED] drm_test_check_hdmi_color_format =========
[10:49:27] ======== drm_test_check_hdmi_color_format_420_only ========
[10:49:27] [PASSED] RGB should fail
[10:49:27] [PASSED] YUV444 should fail
[10:49:27] [PASSED] YUV422 should fail
[10:49:27] [PASSED] YUV420 should work
[10:49:27] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[10:49:27] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[10:49:27] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[10:49:27] [PASSED] drm_test_check_broadcast_rgb_value
[10:49:27] [PASSED] drm_test_check_bpc_8_value
[10:49:27] [PASSED] drm_test_check_bpc_10_value
[10:49:27] [PASSED] drm_test_check_bpc_12_value
[10:49:27] [PASSED] drm_test_check_format_value
[10:49:27] [PASSED] drm_test_check_tmds_char_value
[10:49:27] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[10:49:27] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[10:49:27] [PASSED] drm_test_check_mode_valid
[10:49:27] [PASSED] drm_test_check_mode_valid_reject
[10:49:27] [PASSED] drm_test_check_mode_valid_reject_rate
[10:49:27] [PASSED] drm_test_check_mode_valid_reject_max_clock
[10:49:27] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[10:49:27] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[10:49:27] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[10:49:27] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[10:49:27] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[10:49:27] [PASSED] drm_test_check_infoframes
[10:49:27] [PASSED] drm_test_check_reject_avi_infoframe
[10:49:27] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[10:49:27] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[10:49:27] [PASSED] drm_test_check_reject_audio_infoframe
[10:49:27] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[10:49:27] ================= drm_managed (2 subtests) =================
[10:49:27] [PASSED] drm_test_managed_release_action
[10:49:27] [PASSED] drm_test_managed_run_action
[10:49:27] =================== [PASSED] drm_managed ===================
[10:49:27] =================== drm_mm (6 subtests) ====================
[10:49:27] [PASSED] drm_test_mm_init
[10:49:27] [PASSED] drm_test_mm_debug
[10:49:27] [PASSED] drm_test_mm_align32
[10:49:27] [PASSED] drm_test_mm_align64
[10:49:27] [PASSED] drm_test_mm_lowest
[10:49:27] [PASSED] drm_test_mm_highest
[10:49:27] ===================== [PASSED] drm_mm ======================
[10:49:27] ============= drm_modes_analog_tv (5 subtests) =============
[10:49:27] [PASSED] drm_test_modes_analog_tv_mono_576i
[10:49:27] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[10:49:27] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[10:49:27] [PASSED] drm_test_modes_analog_tv_pal_576i
[10:49:27] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[10:49:27] =============== [PASSED] drm_modes_analog_tv ===============
[10:49:27] ============== drm_plane_helper (2 subtests) ===============
[10:49:27] =============== drm_test_check_plane_state ================
[10:49:27] [PASSED] clipping_simple
[10:49:27] [PASSED] clipping_rotate_reflect
[10:49:27] [PASSED] positioning_simple
[10:49:27] [PASSED] upscaling
[10:49:27] [PASSED] downscaling
[10:49:27] [PASSED] rounding1
[10:49:27] [PASSED] rounding2
[10:49:27] [PASSED] rounding3
[10:49:27] [PASSED] rounding4
[10:49:27] =========== [PASSED] drm_test_check_plane_state ============
[10:49:27] =========== drm_test_check_invalid_plane_state ============
[10:49:27] [PASSED] positioning_invalid
[10:49:27] [PASSED] upscaling_invalid
[10:49:27] [PASSED] downscaling_invalid
[10:49:27] ======= [PASSED] drm_test_check_invalid_plane_state ========
[10:49:27] ================ [PASSED] drm_plane_helper =================
[10:49:27] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[10:49:27] ====== drm_test_connector_helper_tv_get_modes_check =======
[10:49:27] [PASSED] None
[10:49:27] [PASSED] PAL
[10:49:27] [PASSED] NTSC
[10:49:27] [PASSED] Both, NTSC Default
[10:49:27] [PASSED] Both, PAL Default
[10:49:27] [PASSED] Both, NTSC Default, with PAL on command-line
[10:49:27] [PASSED] Both, PAL Default, with NTSC on command-line
[10:49:27] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[10:49:27] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[10:49:27] ================== drm_rect (9 subtests) ===================
[10:49:27] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[10:49:27] [PASSED] drm_test_rect_clip_scaled_not_clipped
[10:49:27] [PASSED] drm_test_rect_clip_scaled_clipped
[10:49:27] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[10:49:27] ================= drm_test_rect_intersect =================
[10:49:27] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[10:49:27] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[10:49:27] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[10:49:27] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[10:49:27] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[10:49:27] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[10:49:27] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[10:49:27] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[10:49:27] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[10:49:27] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[10:49:27] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[10:49:27] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[10:49:27] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[10:49:27] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[10:49:27] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[10:49:27] ============= [PASSED] drm_test_rect_intersect =============
[10:49:27] ================ drm_test_rect_calc_hscale ================
[10:49:27] [PASSED] normal use
[10:49:27] [PASSED] out of max range
[10:49:27] [PASSED] out of min range
[10:49:27] [PASSED] zero dst
[10:49:27] [PASSED] negative src
[10:49:27] [PASSED] negative dst
[10:49:27] ============ [PASSED] drm_test_rect_calc_hscale ============
[10:49:27] ================ drm_test_rect_calc_vscale ================
[10:49:27] [PASSED] normal use
[10:49:27] [PASSED] out of max range
[10:49:27] [PASSED] out of min range
[10:49:27] [PASSED] zero dst
[10:49:27] [PASSED] negative src
[10:49:27] [PASSED] negative dst
[10:49:27] ============ [PASSED] drm_test_rect_calc_vscale ============
[10:49:27] ================== drm_test_rect_rotate ===================
[10:49:27] [PASSED] reflect-x
[10:49:27] [PASSED] reflect-y
[10:49:27] [PASSED] rotate-0
[10:49:27] [PASSED] rotate-90
[10:49:27] [PASSED] rotate-180
[10:49:27] [PASSED] rotate-270
[10:49:27] ============== [PASSED] drm_test_rect_rotate ===============
[10:49:27] ================ drm_test_rect_rotate_inv =================
[10:49:27] [PASSED] reflect-x
[10:49:27] [PASSED] reflect-y
[10:49:27] [PASSED] rotate-0
[10:49:27] [PASSED] rotate-90
[10:49:27] [PASSED] rotate-180
[10:49:27] [PASSED] rotate-270
[10:49:27] ============ [PASSED] drm_test_rect_rotate_inv =============
[10:49:27] ==================== [PASSED] drm_rect =====================
[10:49:27] ============ drm_sysfb_modeset_test (1 subtest) ============
[10:49:27] ============ drm_test_sysfb_build_fourcc_list =============
[10:49:27] [PASSED] no native formats
[10:49:27] [PASSED] XRGB8888 as native format
[10:49:27] [PASSED] remove duplicates
[10:49:27] [PASSED] convert alpha formats
[10:49:27] [PASSED] random formats
[10:49:27] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[10:49:27] ============= [PASSED] drm_sysfb_modeset_test ==============
[10:49:27] ================== drm_fixp (2 subtests) ===================
[10:49:27] [PASSED] drm_test_int2fixp
[10:49:27] [PASSED] drm_test_sm2fixp
[10:49:27] ==================== [PASSED] drm_fixp =====================
[10:49:27] ============================================================
[10:49:27] Testing complete. Ran 637 tests: passed: 637
[10:49:28] Elapsed time: 26.664s total, 1.762s configuring, 24.735s building, 0.146s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[10:49:28] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:49:29] 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
[10:49:39] Starting KUnit Kernel (1/1)...
[10:49:39] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:49:39] ================= ttm_device (5 subtests) ==================
[10:49:39] [PASSED] ttm_device_init_basic
[10:49:39] [PASSED] ttm_device_init_multiple
[10:49:39] [PASSED] ttm_device_fini_basic
[10:49:39] [PASSED] ttm_device_init_no_vma_man
[10:49:39] ================== ttm_device_init_pools ==================
[10:49:39] [PASSED] No DMA allocations, no DMA32 required
[10:49:39] [PASSED] DMA allocations, DMA32 required
[10:49:39] [PASSED] No DMA allocations, DMA32 required
[10:49:39] [PASSED] DMA allocations, no DMA32 required
[10:49:39] ============== [PASSED] ttm_device_init_pools ==============
[10:49:39] =================== [PASSED] ttm_device ====================
[10:49:39] ================== ttm_pool (8 subtests) ===================
[10:49:39] ================== ttm_pool_alloc_basic ===================
[10:49:39] [PASSED] One page
[10:49:39] [PASSED] More than one page
[10:49:39] [PASSED] Above the allocation limit
[10:49:39] [PASSED] One page, with coherent DMA mappings enabled
[10:49:39] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[10:49:39] ============== [PASSED] ttm_pool_alloc_basic ===============
[10:49:39] ============== ttm_pool_alloc_basic_dma_addr ==============
[10:49:39] [PASSED] One page
[10:49:39] [PASSED] More than one page
[10:49:39] [PASSED] Above the allocation limit
[10:49:39] [PASSED] One page, with coherent DMA mappings enabled
[10:49:39] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[10:49:39] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[10:49:39] [PASSED] ttm_pool_alloc_order_caching_match
[10:49:39] [PASSED] ttm_pool_alloc_caching_mismatch
[10:49:39] [PASSED] ttm_pool_alloc_order_mismatch
[10:49:39] [PASSED] ttm_pool_free_dma_alloc
[10:49:39] [PASSED] ttm_pool_free_no_dma_alloc
[10:49:39] [PASSED] ttm_pool_fini_basic
[10:49:39] ==================== [PASSED] ttm_pool =====================
[10:49:39] ================ ttm_resource (8 subtests) =================
[10:49:39] ================= ttm_resource_init_basic =================
[10:49:39] [PASSED] Init resource in TTM_PL_SYSTEM
[10:49:39] [PASSED] Init resource in TTM_PL_VRAM
[10:49:39] [PASSED] Init resource in a private placement
[10:49:39] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[10:49:39] ============= [PASSED] ttm_resource_init_basic =============
[10:49:39] [PASSED] ttm_resource_init_pinned
[10:49:39] [PASSED] ttm_resource_fini_basic
[10:49:39] [PASSED] ttm_resource_manager_init_basic
[10:49:39] [PASSED] ttm_resource_manager_usage_basic
[10:49:39] [PASSED] ttm_resource_manager_set_used_basic
[10:49:39] [PASSED] ttm_sys_man_alloc_basic
[10:49:39] [PASSED] ttm_sys_man_free_basic
[10:49:39] ================== [PASSED] ttm_resource ===================
[10:49:39] =================== ttm_tt (15 subtests) ===================
[10:49:39] ==================== ttm_tt_init_basic ====================
[10:49:39] [PASSED] Page-aligned size
[10:49:39] [PASSED] Extra pages requested
[10:49:39] ================ [PASSED] ttm_tt_init_basic ================
[10:49:39] [PASSED] ttm_tt_init_misaligned
[10:49:39] [PASSED] ttm_tt_fini_basic
[10:49:39] [PASSED] ttm_tt_fini_sg
[10:49:39] [PASSED] ttm_tt_fini_shmem
[10:49:39] [PASSED] ttm_tt_create_basic
[10:49:39] [PASSED] ttm_tt_create_invalid_bo_type
[10:49:39] [PASSED] ttm_tt_create_ttm_exists
[10:49:39] [PASSED] ttm_tt_create_failed
[10:49:39] [PASSED] ttm_tt_destroy_basic
[10:49:39] [PASSED] ttm_tt_populate_null_ttm
[10:49:39] [PASSED] ttm_tt_populate_populated_ttm
[10:49:39] [PASSED] ttm_tt_unpopulate_basic
[10:49:39] [PASSED] ttm_tt_unpopulate_empty_ttm
[10:49:39] [PASSED] ttm_tt_swapin_basic
[10:49:39] ===================== [PASSED] ttm_tt ======================
[10:49:39] =================== ttm_bo (14 subtests) ===================
[10:49:39] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[10:49:39] [PASSED] Cannot be interrupted and sleeps
[10:49:39] [PASSED] Cannot be interrupted, locks straight away
[10:49:39] [PASSED] Can be interrupted, sleeps
[10:49:39] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[10:49:39] [PASSED] ttm_bo_reserve_locked_no_sleep
[10:49:39] [PASSED] ttm_bo_reserve_no_wait_ticket
[10:49:39] [PASSED] ttm_bo_reserve_double_resv
[10:49:39] [PASSED] ttm_bo_reserve_interrupted
[10:49:39] [PASSED] ttm_bo_reserve_deadlock
[10:49:39] [PASSED] ttm_bo_unreserve_basic
[10:49:39] [PASSED] ttm_bo_unreserve_pinned
[10:49:39] [PASSED] ttm_bo_unreserve_bulk
[10:49:39] [PASSED] ttm_bo_fini_basic
[10:49:39] [PASSED] ttm_bo_fini_shared_resv
[10:49:39] [PASSED] ttm_bo_pin_basic
[10:49:39] [PASSED] ttm_bo_pin_unpin_resource
[10:49:39] [PASSED] ttm_bo_multiple_pin_one_unpin
[10:49:39] ===================== [PASSED] ttm_bo ======================
[10:49:39] ============== ttm_bo_validate (22 subtests) ===============
[10:49:39] ============== ttm_bo_init_reserved_sys_man ===============
[10:49:39] [PASSED] Buffer object for userspace
[10:49:39] [PASSED] Kernel buffer object
[10:49:39] [PASSED] Shared buffer object
[10:49:39] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[10:49:39] ============== ttm_bo_init_reserved_mock_man ==============
[10:49:39] [PASSED] Buffer object for userspace
[10:49:39] [PASSED] Kernel buffer object
[10:49:39] [PASSED] Shared buffer object
[10:49:39] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[10:49:39] [PASSED] ttm_bo_init_reserved_resv
[10:49:39] ================== ttm_bo_validate_basic ==================
[10:49:39] [PASSED] Buffer object for userspace
[10:49:39] [PASSED] Kernel buffer object
[10:49:39] [PASSED] Shared buffer object
[10:49:39] ============== [PASSED] ttm_bo_validate_basic ==============
[10:49:39] [PASSED] ttm_bo_validate_invalid_placement
[10:49:39] ============= ttm_bo_validate_same_placement ==============
[10:49:39] [PASSED] System manager
[10:49:39] [PASSED] VRAM manager
[10:49:39] ========= [PASSED] ttm_bo_validate_same_placement ==========
[10:49:39] [PASSED] ttm_bo_validate_failed_alloc
[10:49:39] [PASSED] ttm_bo_validate_pinned
[10:49:39] [PASSED] ttm_bo_validate_busy_placement
[10:49:39] ================ ttm_bo_validate_multihop =================
[10:49:39] [PASSED] Buffer object for userspace
[10:49:39] [PASSED] Kernel buffer object
[10:49:39] [PASSED] Shared buffer object
[10:49:39] ============ [PASSED] ttm_bo_validate_multihop =============
[10:49:39] ========== ttm_bo_validate_no_placement_signaled ==========
[10:49:39] [PASSED] Buffer object in system domain, no page vector
[10:49:39] [PASSED] Buffer object in system domain with an existing page vector
[10:49:39] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[10:49:39] ======== ttm_bo_validate_no_placement_not_signaled ========
[10:49:39] [PASSED] Buffer object for userspace
[10:49:39] [PASSED] Kernel buffer object
[10:49:39] [PASSED] Shared buffer object
[10:49:39] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[10:49:39] [PASSED] ttm_bo_validate_move_fence_signaled
[10:49:40] ========= ttm_bo_validate_move_fence_not_signaled =========
[10:49:40] [PASSED] Waits for GPU
[10:49:40] [PASSED] Tries to lock straight away
[10:49:40] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[10:49:40] [PASSED] ttm_bo_validate_swapout
[10:49:40] [PASSED] ttm_bo_validate_happy_evict
[10:49:40] [PASSED] ttm_bo_validate_all_pinned_evict
[10:49:40] [PASSED] ttm_bo_validate_allowed_only_evict
[10:49:40] [PASSED] ttm_bo_validate_deleted_evict
[10:49:40] [PASSED] ttm_bo_validate_busy_domain_evict
[10:49:40] [PASSED] ttm_bo_validate_evict_gutting
[10:49:40] [PASSED] ttm_bo_validate_recrusive_evict
[10:49:40] ================= [PASSED] ttm_bo_validate =================
[10:49:40] ============================================================
[10:49:40] Testing complete. Ran 102 tests: passed: 102
[10:49:40] Elapsed time: 11.884s total, 1.814s configuring, 9.855s building, 0.185s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[10:49:40] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[10:49:42] 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
[10:49:50] Starting KUnit Kernel (1/1)...
[10:49:50] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[10:49:50] =============== dma-buf-fence (12 subtests) ================
[10:49:50] [PASSED] test_sanitycheck
[10:49:50] [PASSED] test_signaling
[10:49:50] [PASSED] test_add_callback
[10:49:50] [PASSED] test_late_add_callback
[10:49:50] [PASSED] test_rm_callback
[10:49:50] [PASSED] test_late_rm_callback
[10:49:50] [PASSED] test_status
[10:49:50] [PASSED] test_error
[10:49:50] [PASSED] test_wait
[10:49:50] [PASSED] test_wait_timeout
[10:49:50] [PASSED] test_stub
[10:49:50] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[10:49:50] ================== [PASSED] dma-buf-fence ==================
[10:49:50] ============ dma-buf-fence-chain (11 subtests) =============
[10:49:50] [PASSED] test_sanitycheck
[10:49:50] [PASSED] test_find_seqno
[10:49:50] [PASSED] test_find_signaled
[10:49:50] [PASSED] test_find_out_of_order
[10:49:55] [PASSED] test_find_gap
[10:49:55] [PASSED] test_find_race
[10:49:55] [PASSED] test_signal_forward
[10:49:55] [PASSED] test_signal_backward
[10:49:55] [PASSED] test_wait_forward
[10:49:55] [PASSED] test_wait_backward
[10:49:55] [PASSED] test_wait_random
[10:49:55] =============== [PASSED] dma-buf-fence-chain ===============
[10:49:55] ============ dma-buf-fence-unwrap (10 subtests) ============
[10:49:55] [PASSED] test_sanitycheck
[10:49:55] [PASSED] test_unwrap_array
[10:49:55] [PASSED] test_unwrap_chain
[10:49:55] [PASSED] test_unwrap_chain_array
[10:49:55] [PASSED] test_unwrap_merge
[10:49:55] [PASSED] test_unwrap_merge_duplicate
[10:49:55] [PASSED] test_unwrap_merge_seqno
[10:49:55] [PASSED] test_unwrap_merge_order
[10:49:55] [PASSED] test_unwrap_merge_complex
[10:49:55] [PASSED] test_unwrap_merge_complex_seqno
[10:49:55] ============== [PASSED] dma-buf-fence-unwrap ===============
[10:49:55] ================ dma-buf-resv (5 subtests) =================
[10:49:55] [PASSED] test_sanitycheck
[10:49:55] ===================== test_signaling ======================
[10:49:55] [PASSED] kernel
[10:49:55] [PASSED] write
[10:49:55] [PASSED] read
[10:49:55] [PASSED] bookkeep
[10:49:55] ================= [PASSED] test_signaling ==================
[10:49:55] ====================== test_for_each ======================
[10:49:55] [PASSED] kernel
[10:49:55] [PASSED] write
[10:49:55] [PASSED] read
[10:49:55] [PASSED] bookkeep
[10:49:55] ================== [PASSED] test_for_each ==================
[10:49:55] ================= test_for_each_unlocked ==================
[10:49:55] [PASSED] kernel
[10:49:55] [PASSED] write
[10:49:55] [PASSED] read
[10:49:55] [PASSED] bookkeep
[10:49:55] ============= [PASSED] test_for_each_unlocked ==============
[10:49:55] ===================== test_get_fences =====================
[10:49:55] [PASSED] kernel
[10:49:55] [PASSED] write
[10:49:55] [PASSED] read
[10:49:55] [PASSED] bookkeep
[10:49:55] ================= [PASSED] test_get_fences =================
[10:49:55] ================== [PASSED] dma-buf-resv ===================
[10:49:55] ============================================================
[10:49:55] Testing complete. Ran 50 tests: passed: 49, skipped: 1
[10:49:56] Elapsed time: 15.848s total, 1.848s configuring, 8.678s building, 5.285s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 26+ messages in thread* ✓ CI.KUnit: success for Add memory page offlining support (rev20)
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
` (12 preceding siblings ...)
2026-08-18 10:49 ` ✓ CI.KUnit: success for Add memory page offlining support (rev19) Patchwork
@ 2026-08-18 11:47 ` Patchwork
2026-08-18 12:28 ` ✗ Xe.CI.BAT: failure " Patchwork
` (2 subsequent siblings)
16 siblings, 0 replies; 26+ messages in thread
From: Patchwork @ 2026-08-18 11:47 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
== Series Details ==
Series: Add memory page offlining support (rev20)
URL : https://patchwork.freedesktop.org/series/161473/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[11:46:08] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[11:46:13] 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
[11:46:45] Starting KUnit Kernel (1/1)...
[11:46:45] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[11:46:45] ================== guc_buf (11 subtests) ===================
[11:46:45] [PASSED] test_smallest
[11:46:45] [PASSED] test_largest
[11:46:45] [PASSED] test_granular
[11:46:45] [PASSED] test_unique
[11:46:45] [PASSED] test_overlap
[11:46:45] [PASSED] test_reusable
[11:46:45] [PASSED] test_too_big
[11:46:45] [PASSED] test_flush
[11:46:45] [PASSED] test_lookup
[11:46:45] [PASSED] test_data
[11:46:45] [PASSED] test_class
[11:46:45] ===================== [PASSED] guc_buf =====================
[11:46:45] =================== guc_dbm (7 subtests) ===================
[11:46:45] [PASSED] test_empty
[11:46:45] [PASSED] test_default
[11:46:45] ======================== test_size ========================
[11:46:45] [PASSED] 4
[11:46:45] [PASSED] 8
[11:46:45] [PASSED] 32
[11:46:45] [PASSED] 256
[11:46:45] ==================== [PASSED] test_size ====================
[11:46:45] ======================= test_reuse ========================
[11:46:45] [PASSED] 4
[11:46:45] [PASSED] 8
[11:46:45] [PASSED] 32
[11:46:45] [PASSED] 256
[11:46:45] =================== [PASSED] test_reuse ====================
[11:46:45] =================== test_range_overlap ====================
[11:46:45] [PASSED] 4
[11:46:45] [PASSED] 8
[11:46:45] [PASSED] 32
[11:46:45] [PASSED] 256
[11:46:45] =============== [PASSED] test_range_overlap ================
[11:46:45] =================== test_range_compact ====================
[11:46:45] [PASSED] 4
[11:46:45] [PASSED] 8
[11:46:45] [PASSED] 32
[11:46:45] [PASSED] 256
[11:46:45] =============== [PASSED] test_range_compact ================
[11:46:45] ==================== test_range_spare =====================
[11:46:45] [PASSED] 4
[11:46:45] [PASSED] 8
[11:46:45] [PASSED] 32
[11:46:45] [PASSED] 256
[11:46:45] ================ [PASSED] test_range_spare =================
[11:46:45] ===================== [PASSED] guc_dbm =====================
[11:46:45] =================== guc_idm (6 subtests) ===================
[11:46:45] [PASSED] bad_init
[11:46:45] [PASSED] no_init
[11:46:45] [PASSED] init_fini
[11:46:45] [PASSED] check_used
[11:46:45] [PASSED] check_quota
[11:46:45] [PASSED] check_all
[11:46:45] ===================== [PASSED] guc_idm =====================
[11:46:45] =============== guc_klv_helpers (9 subtests) ===============
[11:46:45] [PASSED] test_count
[11:46:45] [PASSED] test_encode_u32
[11:46:45] [PASSED] test_encode_u64
[11:46:45] [PASSED] test_encode_string
[11:46:45] [PASSED] test_encode_object_raw
[11:46:45] [PASSED] test_encode_object_klv
[11:46:45] [PASSED] test_encode_object_nested
[11:46:45] [PASSED] test_encode_object_basic
[11:46:45] [PASSED] test_print
[11:46:45] ================= [PASSED] guc_klv_helpers =================
[11:46:45] =================== xe_log (4 subtests) ====================
[11:46:45] [PASSED] demo_cper
[11:46:45] [PASSED] demo_dmesg
[11:46:45] ======================= test_dmesg ========================
[11:46:45] [PASSED] test_fatal
[11:46:45] [PASSED] test_fatal_tile
[11:46:45] [PASSED] test_fatal_gt
[11:46:45] [PASSED] test_fatal_comp
[11:46:45] [PASSED] test_fatal_comp_tile
[11:46:45] [PASSED] test_fatal_comp_gt
[11:46:45] [PASSED] test_fatal_all
[11:46:45] [PASSED] test_recoverable
[11:46:45] [PASSED] test_recoverable_tile
[11:46:45] [PASSED] test_recoverable_gt
[11:46:45] [PASSED] test_recoverable_comp
[11:46:45] [PASSED] test_recoverable_comp_tile
[11:46:45] [PASSED] test_recoverable_comp_gt
[11:46:45] [PASSED] test_recoverable_all
[11:46:45] [PASSED] test_info
[11:46:45] [PASSED] test_info_tile
[11:46:45] [PASSED] test_info_gt
[11:46:45] [PASSED] test_info_err
[11:46:45] [PASSED] test_info_comp
[11:46:45] [PASSED] test_info_comp_tile
[11:46:45] [PASSED] test_info_comp_gt
[11:46:45] [PASSED] test_info_all
[11:46:45] [PASSED] test_hw_fatal
[11:46:45] [PASSED] test_hw_recoverable
[11:46:45] [PASSED] test_hw_corrected
[11:46:45] [PASSED] test_hw_informational
[11:46:45] =================== [PASSED] test_dmesg ====================
[11:46:45] ====================== test_invalid =======================
[11:46:45] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[11:46:45] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[11:46:45] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[11:46:45] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[11:46:45] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[11:46:45] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[11:46:45] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[11:46:45] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[11:46:45] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[11:46:45] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[11:46:45] ================== [SKIPPED] test_invalid ==================
[11:46:45] ===================== [PASSED] xe_log ======================
[11:46:45] ================== no_relay (3 subtests) ===================
[11:46:45] [PASSED] xe_drops_guc2pf_if_not_ready
[11:46:45] [PASSED] xe_drops_guc2vf_if_not_ready
[11:46:45] [PASSED] xe_rejects_send_if_not_ready
[11:46:45] ==================== [PASSED] no_relay =====================
[11:46:45] ================== pf_relay (14 subtests) ==================
[11:46:45] [PASSED] pf_rejects_guc2pf_too_short
[11:46:45] [PASSED] pf_rejects_guc2pf_too_long
[11:46:45] [PASSED] pf_rejects_guc2pf_no_payload
[11:46:45] [PASSED] pf_fails_no_payload
[11:46:45] [PASSED] pf_fails_bad_origin
[11:46:45] [PASSED] pf_fails_bad_type
[11:46:45] [PASSED] pf_txn_reports_error
[11:46:45] [PASSED] pf_txn_sends_pf2guc
[11:46:45] [PASSED] pf_sends_pf2guc
[11:46:45] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:46:45] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:46:45] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:46:45] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:46:45] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:46:45] ==================== [PASSED] pf_relay =====================
[11:46:45] ================== vf_relay (3 subtests) ===================
[11:46:45] [PASSED] vf_rejects_guc2vf_too_short
[11:46:45] [PASSED] vf_rejects_guc2vf_too_long
[11:46:45] [PASSED] vf_rejects_guc2vf_no_payload
[11:46:45] ==================== [PASSED] vf_relay =====================
[11:46:45] ================ pf_gt_config (9 subtests) =================
[11:46:45] [PASSED] fair_contexts_1vf
[11:46:45] [PASSED] fair_doorbells_1vf
[11:46:45] [PASSED] fair_ggtt_1vf
[11:46:45] ====================== fair_vram_1vf ======================
[11:46:45] [PASSED] 3.50 GiB
[11:46:45] [PASSED] 11.5 GiB
[11:46:45] [PASSED] 15.5 GiB
[11:46:45] [PASSED] 31.5 GiB
[11:46:45] [PASSED] 63.5 GiB
[11:46:45] [PASSED] 1.91 GiB
[11:46:45] ================== [PASSED] fair_vram_1vf ==================
[11:46:45] ================ fair_vram_1vf_admin_only =================
[11:46:45] [PASSED] 3.50 GiB
[11:46:45] [PASSED] 11.5 GiB
[11:46:45] [PASSED] 15.5 GiB
[11:46:45] [PASSED] 31.5 GiB
[11:46:45] [PASSED] 63.5 GiB
[11:46:45] [PASSED] 1.91 GiB
[11:46:45] ============ [PASSED] fair_vram_1vf_admin_only =============
[11:46:45] ====================== fair_contexts ======================
[11:46:45] [PASSED] 1 VF
[11:46:45] [PASSED] 2 VFs
[11:46:45] [PASSED] 3 VFs
[11:46:45] [PASSED] 4 VFs
[11:46:45] [PASSED] 5 VFs
[11:46:45] [PASSED] 6 VFs
[11:46:45] [PASSED] 7 VFs
[11:46:45] [PASSED] 8 VFs
[11:46:45] [PASSED] 9 VFs
[11:46:45] [PASSED] 10 VFs
[11:46:45] [PASSED] 11 VFs
[11:46:45] [PASSED] 12 VFs
[11:46:45] [PASSED] 13 VFs
[11:46:45] [PASSED] 14 VFs
[11:46:45] [PASSED] 15 VFs
[11:46:45] [PASSED] 16 VFs
[11:46:45] [PASSED] 17 VFs
[11:46:45] [PASSED] 18 VFs
[11:46:45] [PASSED] 19 VFs
[11:46:45] [PASSED] 20 VFs
[11:46:45] [PASSED] 21 VFs
[11:46:45] [PASSED] 22 VFs
[11:46:45] [PASSED] 23 VFs
[11:46:45] [PASSED] 24 VFs
[11:46:45] [PASSED] 25 VFs
[11:46:45] [PASSED] 26 VFs
[11:46:45] [PASSED] 27 VFs
[11:46:45] [PASSED] 28 VFs
[11:46:45] [PASSED] 29 VFs
[11:46:45] [PASSED] 30 VFs
[11:46:45] [PASSED] 31 VFs
[11:46:45] [PASSED] 32 VFs
[11:46:45] [PASSED] 33 VFs
[11:46:45] [PASSED] 34 VFs
[11:46:45] [PASSED] 35 VFs
[11:46:45] [PASSED] 36 VFs
[11:46:45] [PASSED] 37 VFs
[11:46:45] [PASSED] 38 VFs
[11:46:45] [PASSED] 39 VFs
[11:46:45] [PASSED] 40 VFs
[11:46:45] [PASSED] 41 VFs
[11:46:45] [PASSED] 42 VFs
[11:46:45] [PASSED] 43 VFs
[11:46:45] [PASSED] 44 VFs
[11:46:45] [PASSED] 45 VFs
[11:46:45] [PASSED] 46 VFs
[11:46:45] [PASSED] 47 VFs
[11:46:45] [PASSED] 48 VFs
[11:46:45] [PASSED] 49 VFs
[11:46:45] [PASSED] 50 VFs
[11:46:45] [PASSED] 51 VFs
[11:46:46] [PASSED] 52 VFs
[11:46:46] [PASSED] 53 VFs
[11:46:46] [PASSED] 54 VFs
[11:46:46] [PASSED] 55 VFs
[11:46:46] [PASSED] 56 VFs
[11:46:46] [PASSED] 57 VFs
[11:46:46] [PASSED] 58 VFs
[11:46:46] [PASSED] 59 VFs
[11:46:46] [PASSED] 60 VFs
[11:46:46] [PASSED] 61 VFs
[11:46:46] [PASSED] 62 VFs
[11:46:46] [PASSED] 63 VFs
[11:46:46] ================== [PASSED] fair_contexts ==================
[11:46:46] ===================== fair_doorbells ======================
[11:46:46] [PASSED] 1 VF
[11:46:46] [PASSED] 2 VFs
[11:46:46] [PASSED] 3 VFs
[11:46:46] [PASSED] 4 VFs
[11:46:46] [PASSED] 5 VFs
[11:46:46] [PASSED] 6 VFs
[11:46:46] [PASSED] 7 VFs
[11:46:46] [PASSED] 8 VFs
[11:46:46] [PASSED] 9 VFs
[11:46:46] [PASSED] 10 VFs
[11:46:46] [PASSED] 11 VFs
[11:46:46] [PASSED] 12 VFs
[11:46:46] [PASSED] 13 VFs
[11:46:46] [PASSED] 14 VFs
[11:46:46] [PASSED] 15 VFs
[11:46:46] [PASSED] 16 VFs
[11:46:46] [PASSED] 17 VFs
[11:46:46] [PASSED] 18 VFs
[11:46:46] [PASSED] 19 VFs
[11:46:46] [PASSED] 20 VFs
[11:46:46] [PASSED] 21 VFs
[11:46:46] [PASSED] 22 VFs
[11:46:46] [PASSED] 23 VFs
[11:46:46] [PASSED] 24 VFs
[11:46:46] [PASSED] 25 VFs
[11:46:46] [PASSED] 26 VFs
[11:46:46] [PASSED] 27 VFs
[11:46:46] [PASSED] 28 VFs
[11:46:46] [PASSED] 29 VFs
[11:46:46] [PASSED] 30 VFs
[11:46:46] [PASSED] 31 VFs
[11:46:46] [PASSED] 32 VFs
[11:46:46] [PASSED] 33 VFs
[11:46:46] [PASSED] 34 VFs
[11:46:46] [PASSED] 35 VFs
[11:46:46] [PASSED] 36 VFs
[11:46:46] [PASSED] 37 VFs
[11:46:46] [PASSED] 38 VFs
[11:46:46] [PASSED] 39 VFs
[11:46:46] [PASSED] 40 VFs
[11:46:46] [PASSED] 41 VFs
[11:46:46] [PASSED] 42 VFs
[11:46:46] [PASSED] 43 VFs
[11:46:46] [PASSED] 44 VFs
[11:46:46] [PASSED] 45 VFs
[11:46:46] [PASSED] 46 VFs
[11:46:46] [PASSED] 47 VFs
[11:46:46] [PASSED] 48 VFs
[11:46:46] [PASSED] 49 VFs
[11:46:46] [PASSED] 50 VFs
[11:46:46] [PASSED] 51 VFs
[11:46:46] [PASSED] 52 VFs
[11:46:46] [PASSED] 53 VFs
[11:46:46] [PASSED] 54 VFs
[11:46:46] [PASSED] 55 VFs
[11:46:46] [PASSED] 56 VFs
[11:46:46] [PASSED] 57 VFs
[11:46:46] [PASSED] 58 VFs
[11:46:46] [PASSED] 59 VFs
[11:46:46] [PASSED] 60 VFs
[11:46:46] [PASSED] 61 VFs
[11:46:46] [PASSED] 62 VFs
[11:46:46] [PASSED] 63 VFs
[11:46:46] ================= [PASSED] fair_doorbells ==================
[11:46:46] ======================== fair_ggtt ========================
[11:46:46] [PASSED] 1 VF
[11:46:46] [PASSED] 2 VFs
[11:46:46] [PASSED] 3 VFs
[11:46:46] [PASSED] 4 VFs
[11:46:46] [PASSED] 5 VFs
[11:46:46] [PASSED] 6 VFs
[11:46:46] [PASSED] 7 VFs
[11:46:46] [PASSED] 8 VFs
[11:46:46] [PASSED] 9 VFs
[11:46:46] [PASSED] 10 VFs
[11:46:46] [PASSED] 11 VFs
[11:46:46] [PASSED] 12 VFs
[11:46:46] [PASSED] 13 VFs
[11:46:46] [PASSED] 14 VFs
[11:46:46] [PASSED] 15 VFs
[11:46:46] [PASSED] 16 VFs
[11:46:46] [PASSED] 17 VFs
[11:46:46] [PASSED] 18 VFs
[11:46:46] [PASSED] 19 VFs
[11:46:46] [PASSED] 20 VFs
[11:46:46] [PASSED] 21 VFs
[11:46:46] [PASSED] 22 VFs
[11:46:46] [PASSED] 23 VFs
[11:46:46] [PASSED] 24 VFs
[11:46:46] [PASSED] 25 VFs
[11:46:46] [PASSED] 26 VFs
[11:46:46] [PASSED] 27 VFs
[11:46:46] [PASSED] 28 VFs
[11:46:46] [PASSED] 29 VFs
[11:46:46] [PASSED] 30 VFs
[11:46:46] [PASSED] 31 VFs
[11:46:46] [PASSED] 32 VFs
[11:46:46] [PASSED] 33 VFs
[11:46:46] [PASSED] 34 VFs
[11:46:46] [PASSED] 35 VFs
[11:46:46] [PASSED] 36 VFs
[11:46:46] [PASSED] 37 VFs
[11:46:46] [PASSED] 38 VFs
[11:46:46] [PASSED] 39 VFs
[11:46:46] [PASSED] 40 VFs
[11:46:46] [PASSED] 41 VFs
[11:46:46] [PASSED] 42 VFs
[11:46:46] [PASSED] 43 VFs
[11:46:46] [PASSED] 44 VFs
[11:46:46] [PASSED] 45 VFs
[11:46:46] [PASSED] 46 VFs
[11:46:46] [PASSED] 47 VFs
[11:46:46] [PASSED] 48 VFs
[11:46:46] [PASSED] 49 VFs
[11:46:46] [PASSED] 50 VFs
[11:46:46] [PASSED] 51 VFs
[11:46:46] [PASSED] 52 VFs
[11:46:46] [PASSED] 53 VFs
[11:46:46] [PASSED] 54 VFs
[11:46:46] [PASSED] 55 VFs
[11:46:46] [PASSED] 56 VFs
[11:46:46] [PASSED] 57 VFs
[11:46:46] [PASSED] 58 VFs
[11:46:46] [PASSED] 59 VFs
[11:46:46] [PASSED] 60 VFs
[11:46:46] [PASSED] 61 VFs
[11:46:46] [PASSED] 62 VFs
[11:46:46] [PASSED] 63 VFs
[11:46:46] ==================== [PASSED] fair_ggtt ====================
[11:46:46] ======================== fair_vram ========================
[11:46:46] [PASSED] 1 VF
[11:46:46] [PASSED] 2 VFs
[11:46:46] [PASSED] 3 VFs
[11:46:46] [PASSED] 4 VFs
[11:46:46] [PASSED] 5 VFs
[11:46:46] [PASSED] 6 VFs
[11:46:46] [PASSED] 7 VFs
[11:46:46] [PASSED] 8 VFs
[11:46:46] [PASSED] 9 VFs
[11:46:46] [PASSED] 10 VFs
[11:46:46] [PASSED] 11 VFs
[11:46:46] [PASSED] 12 VFs
[11:46:46] [PASSED] 13 VFs
[11:46:46] [PASSED] 14 VFs
[11:46:46] [PASSED] 15 VFs
[11:46:46] [PASSED] 16 VFs
[11:46:46] [PASSED] 17 VFs
[11:46:46] [PASSED] 18 VFs
[11:46:46] [PASSED] 19 VFs
[11:46:46] [PASSED] 20 VFs
[11:46:46] [PASSED] 21 VFs
[11:46:46] [PASSED] 22 VFs
[11:46:46] [PASSED] 23 VFs
[11:46:46] [PASSED] 24 VFs
[11:46:46] [PASSED] 25 VFs
[11:46:46] [PASSED] 26 VFs
[11:46:46] [PASSED] 27 VFs
[11:46:46] [PASSED] 28 VFs
[11:46:46] [PASSED] 29 VFs
[11:46:46] [PASSED] 30 VFs
[11:46:46] [PASSED] 31 VFs
[11:46:46] [PASSED] 32 VFs
[11:46:46] [PASSED] 33 VFs
[11:46:46] [PASSED] 34 VFs
[11:46:46] [PASSED] 35 VFs
[11:46:46] [PASSED] 36 VFs
[11:46:46] [PASSED] 37 VFs
[11:46:46] [PASSED] 38 VFs
[11:46:46] [PASSED] 39 VFs
[11:46:46] [PASSED] 40 VFs
[11:46:46] [PASSED] 41 VFs
[11:46:46] [PASSED] 42 VFs
[11:46:46] [PASSED] 43 VFs
[11:46:46] [PASSED] 44 VFs
[11:46:46] [PASSED] 45 VFs
[11:46:46] [PASSED] 46 VFs
[11:46:46] [PASSED] 47 VFs
[11:46:46] [PASSED] 48 VFs
[11:46:46] [PASSED] 49 VFs
[11:46:46] [PASSED] 50 VFs
[11:46:46] [PASSED] 51 VFs
[11:46:46] [PASSED] 52 VFs
[11:46:46] [PASSED] 53 VFs
[11:46:46] [PASSED] 54 VFs
[11:46:46] [PASSED] 55 VFs
[11:46:46] [PASSED] 56 VFs
[11:46:46] [PASSED] 57 VFs
[11:46:46] [PASSED] 58 VFs
[11:46:46] [PASSED] 59 VFs
[11:46:46] [PASSED] 60 VFs
[11:46:46] [PASSED] 61 VFs
[11:46:46] [PASSED] 62 VFs
[11:46:46] [PASSED] 63 VFs
[11:46:46] ==================== [PASSED] fair_vram ====================
[11:46:46] ================== [PASSED] pf_gt_config ===================
[11:46:46] ===================== lmtt (1 subtest) =====================
[11:46:46] ======================== test_ops =========================
[11:46:46] [PASSED] 2-level
[11:46:46] [PASSED] multi-level
[11:46:46] ==================== [PASSED] test_ops =====================
[11:46:46] ====================== [PASSED] lmtt =======================
[11:46:46] ================= sriov_packet (1 subtest) =================
[11:46:46] [PASSED] test_descriptor_init
[11:46:46] ================== [PASSED] sriov_packet ===================
[11:46:46] ================= pf_service (11 subtests) =================
[11:46:46] [PASSED] pf_negotiate_any
[11:46:46] [PASSED] pf_negotiate_base_match
[11:46:46] [PASSED] pf_negotiate_base_newer
[11:46:46] [PASSED] pf_negotiate_base_next
[11:46:46] [SKIPPED] pf_negotiate_base_older (no older minor)
[11:46:46] [PASSED] pf_negotiate_base_prev
[11:46:46] [PASSED] pf_negotiate_latest_match
[11:46:46] [PASSED] pf_negotiate_latest_newer
[11:46:46] [PASSED] pf_negotiate_latest_next
[11:46:46] [SKIPPED] pf_negotiate_latest_older (no older minor)
[11:46:46] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[11:46:46] =================== [PASSED] pf_service ====================
[11:46:46] ================= xe_guc_g2g (2 subtests) ==================
[11:46:46] ============== xe_live_guc_g2g_kunit_default ==============
[11:46:46] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[11:46:46] ============== xe_live_guc_g2g_kunit_allmem ===============
[11:46:46] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[11:46:46] =================== [SKIPPED] xe_guc_g2g ===================
[11:46:46] =================== xe_mocs (2 subtests) ===================
[11:46:46] ================ xe_live_mocs_kernel_kunit ================
[11:46:46] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[11:46:46] ================ xe_live_mocs_reset_kunit =================
[11:46:46] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[11:46:46] ==================== [SKIPPED] xe_mocs =====================
[11:46:46] ================= xe_migrate (2 subtests) ==================
[11:46:46] ================= xe_migrate_sanity_kunit =================
[11:46:46] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[11:46:46] ================== xe_validate_ccs_kunit ==================
[11:46:46] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[11:46:46] =================== [SKIPPED] xe_migrate ===================
[11:46:46] ================== xe_dma_buf (1 subtest) ==================
[11:46:46] ==================== xe_dma_buf_kunit =====================
[11:46:46] ================ [SKIPPED] xe_dma_buf_kunit ================
[11:46:46] =================== [SKIPPED] xe_dma_buf ===================
[11:46:46] ================= xe_bo_shrink (1 subtest) =================
[11:46:46] =================== xe_bo_shrink_kunit ====================
[11:46:46] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[11:46:46] ================== [SKIPPED] xe_bo_shrink ==================
[11:46:46] ==================== xe_bo (2 subtests) ====================
[11:46:46] ================== xe_ccs_migrate_kunit ===================
[11:46:46] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[11:46:46] ==================== xe_bo_evict_kunit ====================
[11:46:46] =============== [SKIPPED] xe_bo_evict_kunit ================
[11:46:46] ===================== [SKIPPED] xe_bo ======================
[11:46:46] =================== xe_any (9 subtests) ====================
[11:46:46] [PASSED] test_to_xe
[11:46:46] [PASSED] test_to_dev
[11:46:46] [PASSED] test_to_pdev
[11:46:46] [PASSED] test_to_drm
[11:46:46] [PASSED] test_if_pdev
[11:46:46] [PASSED] test_if_xe
[11:46:46] [PASSED] test_if_tile
[11:46:46] [PASSED] test_if_gt
[11:46:46] [PASSED] test_to_id
[11:46:46] ===================== [PASSED] xe_any ======================
[11:46:46] ==================== args (13 subtests) ====================
[11:46:46] [PASSED] count_args_test
[11:46:46] [PASSED] call_args_example
[11:46:46] [PASSED] call_args_test
[11:46:46] [PASSED] drop_first_arg_example
[11:46:46] [PASSED] drop_first_arg_test
[11:46:46] [PASSED] first_arg_example
[11:46:46] [PASSED] first_arg_test
[11:46:46] [PASSED] last_arg_example
[11:46:46] [PASSED] last_arg_test
[11:46:46] [PASSED] pick_arg_example
[11:46:46] [PASSED] if_args_example
[11:46:46] [PASSED] if_args_test
[11:46:46] [PASSED] sep_comma_example
[11:46:46] ====================== [PASSED] args =======================
[11:46:46] =================== xe_pci (3 subtests) ====================
[11:46:46] ==================== check_graphics_ip ====================
[11:46:46] [PASSED] 12.00 Xe_LP
[11:46:46] [PASSED] 12.10 Xe_LP+
[11:46:46] [PASSED] 12.55 Xe_HPG
[11:46:46] [PASSED] 12.60 Xe_HPC
[11:46:46] [PASSED] 12.70 Xe_LPG
[11:46:46] [PASSED] 12.71 Xe_LPG
[11:46:46] [PASSED] 12.74 Xe_LPG+
[11:46:46] [PASSED] 20.01 Xe2_HPG
[11:46:46] [PASSED] 20.02 Xe2_HPG
[11:46:46] [PASSED] 20.04 Xe2_LPG
[11:46:46] [PASSED] 30.00 Xe3_LPG
[11:46:46] [PASSED] 30.01 Xe3_LPG
[11:46:46] [PASSED] 30.03 Xe3_LPG
[11:46:46] [PASSED] 30.04 Xe3_LPG
[11:46:46] [PASSED] 30.05 Xe3_LPG
[11:46:46] [PASSED] 35.10 Xe3p_LPG
[11:46:46] [PASSED] 35.11 Xe3p_XPC
[11:46:46] ================ [PASSED] check_graphics_ip ================
[11:46:46] ===================== check_media_ip ======================
[11:46:46] [PASSED] 12.00 Xe_M
[11:46:46] [PASSED] 12.55 Xe_HPM
[11:46:46] [PASSED] 13.00 Xe_LPM+
[11:46:46] [PASSED] 13.01 Xe2_HPM
[11:46:46] [PASSED] 20.00 Xe2_LPM
[11:46:46] [PASSED] 30.00 Xe3_LPM
[11:46:46] [PASSED] 30.02 Xe3_LPM
[11:46:46] [PASSED] 35.00 Xe3p_LPM
[11:46:46] [PASSED] 35.03 Xe3p_HPM
[11:46:46] ================= [PASSED] check_media_ip ==================
[11:46:46] =================== check_platform_desc ===================
[11:46:46] [PASSED] 0x9A60 (TIGERLAKE)
[11:46:46] [PASSED] 0x9A68 (TIGERLAKE)
[11:46:46] [PASSED] 0x9A70 (TIGERLAKE)
[11:46:46] [PASSED] 0x9A40 (TIGERLAKE)
[11:46:46] [PASSED] 0x9A49 (TIGERLAKE)
[11:46:46] [PASSED] 0x9A59 (TIGERLAKE)
[11:46:46] [PASSED] 0x9A78 (TIGERLAKE)
[11:46:46] [PASSED] 0x9AC0 (TIGERLAKE)
[11:46:46] [PASSED] 0x9AC9 (TIGERLAKE)
[11:46:46] [PASSED] 0x9AD9 (TIGERLAKE)
[11:46:46] [PASSED] 0x9AF8 (TIGERLAKE)
[11:46:46] [PASSED] 0x4C80 (ROCKETLAKE)
[11:46:46] [PASSED] 0x4C8A (ROCKETLAKE)
[11:46:46] [PASSED] 0x4C8B (ROCKETLAKE)
[11:46:46] [PASSED] 0x4C8C (ROCKETLAKE)
[11:46:46] [PASSED] 0x4C90 (ROCKETLAKE)
[11:46:46] [PASSED] 0x4C9A (ROCKETLAKE)
[11:46:46] [PASSED] 0x4680 (ALDERLAKE_S)
[11:46:46] [PASSED] 0x4682 (ALDERLAKE_S)
[11:46:46] [PASSED] 0x4688 (ALDERLAKE_S)
[11:46:46] [PASSED] 0x468A (ALDERLAKE_S)
[11:46:46] [PASSED] 0x468B (ALDERLAKE_S)
[11:46:46] [PASSED] 0x4690 (ALDERLAKE_S)
[11:46:46] [PASSED] 0x4692 (ALDERLAKE_S)
[11:46:46] [PASSED] 0x4693 (ALDERLAKE_S)
[11:46:46] [PASSED] 0x46A0 (ALDERLAKE_P)
[11:46:46] [PASSED] 0x46A1 (ALDERLAKE_P)
[11:46:46] [PASSED] 0x46A2 (ALDERLAKE_P)
[11:46:46] [PASSED] 0x46A3 (ALDERLAKE_P)
[11:46:46] [PASSED] 0x46A6 (ALDERLAKE_P)
[11:46:46] [PASSED] 0x46A8 (ALDERLAKE_P)
[11:46:46] [PASSED] 0x46AA (ALDERLAKE_P)
[11:46:46] [PASSED] 0x462A (ALDERLAKE_P)
[11:46:46] [PASSED] 0x4626 (ALDERLAKE_P)
[11:46:46] [PASSED] 0x4628 (ALDERLAKE_P)
[11:46:46] [PASSED] 0x46B0 (ALDERLAKE_P)
[11:46:46] [PASSED] 0x46B1 (ALDERLAKE_P)
[11:46:46] [PASSED] 0x46B2 (ALDERLAKE_P)
[11:46:46] [PASSED] 0x46B3 (ALDERLAKE_P)
[11:46:46] [PASSED] 0x46C0 (ALDERLAKE_P)
[11:46:46] [PASSED] 0x46C1 (ALDERLAKE_P)
[11:46:46] [PASSED] 0x46C2 (ALDERLAKE_P)
[11:46:46] [PASSED] 0x46C3 (ALDERLAKE_P)
[11:46:46] [PASSED] 0x46D0 (ALDERLAKE_N)
[11:46:46] [PASSED] 0x46D1 (ALDERLAKE_N)
[11:46:46] [PASSED] 0x46D2 (ALDERLAKE_N)
[11:46:46] [PASSED] 0x46D3 (ALDERLAKE_N)
[11:46:46] [PASSED] 0x46D4 (ALDERLAKE_N)
[11:46:46] [PASSED] 0xA721 (ALDERLAKE_P)
[11:46:46] [PASSED] 0xA7A1 (ALDERLAKE_P)
[11:46:46] [PASSED] 0xA7A9 (ALDERLAKE_P)
[11:46:46] [PASSED] 0xA7AC (ALDERLAKE_P)
[11:46:46] [PASSED] 0xA7AD (ALDERLAKE_P)
[11:46:46] [PASSED] 0xA720 (ALDERLAKE_P)
[11:46:46] [PASSED] 0xA7A0 (ALDERLAKE_P)
[11:46:46] [PASSED] 0xA7A8 (ALDERLAKE_P)
[11:46:46] [PASSED] 0xA7AA (ALDERLAKE_P)
[11:46:46] [PASSED] 0xA7AB (ALDERLAKE_P)
[11:46:46] [PASSED] 0xA780 (ALDERLAKE_S)
[11:46:46] [PASSED] 0xA781 (ALDERLAKE_S)
[11:46:46] [PASSED] 0xA782 (ALDERLAKE_S)
[11:46:46] [PASSED] 0xA783 (ALDERLAKE_S)
[11:46:46] [PASSED] 0xA788 (ALDERLAKE_S)
[11:46:46] [PASSED] 0xA789 (ALDERLAKE_S)
[11:46:46] [PASSED] 0xA78A (ALDERLAKE_S)
[11:46:46] [PASSED] 0xA78B (ALDERLAKE_S)
[11:46:46] [PASSED] 0x4905 (DG1)
[11:46:46] [PASSED] 0x4906 (DG1)
[11:46:46] [PASSED] 0x4907 (DG1)
[11:46:46] [PASSED] 0x4908 (DG1)
[11:46:46] [PASSED] 0x4909 (DG1)
[11:46:46] [PASSED] 0x56C0 (DG2)
[11:46:46] [PASSED] 0x56C2 (DG2)
[11:46:46] [PASSED] 0x56C1 (DG2)
[11:46:46] [PASSED] 0x7D51 (METEORLAKE)
[11:46:46] [PASSED] 0x7DD1 (METEORLAKE)
[11:46:46] [PASSED] 0x7D41 (METEORLAKE)
[11:46:46] [PASSED] 0x7D67 (METEORLAKE)
[11:46:46] [PASSED] 0xB640 (METEORLAKE)
[11:46:46] [PASSED] 0x56A0 (DG2)
[11:46:46] [PASSED] 0x56A1 (DG2)
[11:46:46] [PASSED] 0x56A2 (DG2)
[11:46:46] [PASSED] 0x56BE (DG2)
[11:46:46] [PASSED] 0x56BF (DG2)
[11:46:46] [PASSED] 0x5690 (DG2)
[11:46:46] [PASSED] 0x5691 (DG2)
[11:46:46] [PASSED] 0x5692 (DG2)
[11:46:46] [PASSED] 0x56A5 (DG2)
[11:46:46] [PASSED] 0x56A6 (DG2)
[11:46:46] [PASSED] 0x56B0 (DG2)
[11:46:46] [PASSED] 0x56B1 (DG2)
[11:46:46] [PASSED] 0x56BA (DG2)
[11:46:46] [PASSED] 0x56BB (DG2)
[11:46:46] [PASSED] 0x56BC (DG2)
[11:46:46] [PASSED] 0x56BD (DG2)
[11:46:46] [PASSED] 0x5693 (DG2)
[11:46:46] [PASSED] 0x5694 (DG2)
[11:46:46] [PASSED] 0x5695 (DG2)
[11:46:46] [PASSED] 0x56A3 (DG2)
[11:46:46] [PASSED] 0x56A4 (DG2)
[11:46:46] [PASSED] 0x56B2 (DG2)
[11:46:46] [PASSED] 0x56B3 (DG2)
[11:46:46] [PASSED] 0x5696 (DG2)
[11:46:46] [PASSED] 0x5697 (DG2)
[11:46:46] [PASSED] 0xB69 (PVC)
[11:46:46] [PASSED] 0xB6E (PVC)
[11:46:46] [PASSED] 0xBD4 (PVC)
[11:46:46] [PASSED] 0xBD5 (PVC)
[11:46:46] [PASSED] 0xBD6 (PVC)
[11:46:46] [PASSED] 0xBD7 (PVC)
[11:46:46] [PASSED] 0xBD8 (PVC)
[11:46:46] [PASSED] 0xBD9 (PVC)
[11:46:46] [PASSED] 0xBDA (PVC)
[11:46:46] [PASSED] 0xBDB (PVC)
[11:46:46] [PASSED] 0xBE0 (PVC)
[11:46:46] [PASSED] 0xBE1 (PVC)
[11:46:46] [PASSED] 0xBE5 (PVC)
[11:46:46] [PASSED] 0x7D40 (METEORLAKE)
[11:46:46] [PASSED] 0x7D45 (METEORLAKE)
[11:46:46] [PASSED] 0x7D55 (METEORLAKE)
[11:46:46] [PASSED] 0x7D60 (METEORLAKE)
[11:46:46] [PASSED] 0x7DD5 (METEORLAKE)
[11:46:46] [PASSED] 0x6420 (LUNARLAKE)
[11:46:46] [PASSED] 0x64A0 (LUNARLAKE)
[11:46:46] [PASSED] 0x64B0 (LUNARLAKE)
[11:46:46] [PASSED] 0xE202 (BATTLEMAGE)
[11:46:46] [PASSED] 0xE209 (BATTLEMAGE)
[11:46:46] [PASSED] 0xE20B (BATTLEMAGE)
[11:46:46] [PASSED] 0xE20C (BATTLEMAGE)
[11:46:46] [PASSED] 0xE20D (BATTLEMAGE)
[11:46:46] [PASSED] 0xE210 (BATTLEMAGE)
[11:46:46] [PASSED] 0xE211 (BATTLEMAGE)
[11:46:46] [PASSED] 0xE212 (BATTLEMAGE)
[11:46:46] [PASSED] 0xE216 (BATTLEMAGE)
[11:46:46] [PASSED] 0xE220 (BATTLEMAGE)
[11:46:46] [PASSED] 0xE221 (BATTLEMAGE)
[11:46:46] [PASSED] 0xE222 (BATTLEMAGE)
[11:46:46] [PASSED] 0xE223 (BATTLEMAGE)
[11:46:46] [PASSED] 0xB080 (PANTHERLAKE)
[11:46:46] [PASSED] 0xB081 (PANTHERLAKE)
[11:46:46] [PASSED] 0xB082 (PANTHERLAKE)
[11:46:46] [PASSED] 0xB083 (PANTHERLAKE)
[11:46:46] [PASSED] 0xB084 (PANTHERLAKE)
[11:46:46] [PASSED] 0xB085 (PANTHERLAKE)
[11:46:46] [PASSED] 0xB086 (PANTHERLAKE)
[11:46:46] [PASSED] 0xB087 (PANTHERLAKE)
[11:46:46] [PASSED] 0xB08F (PANTHERLAKE)
[11:46:46] [PASSED] 0xB090 (PANTHERLAKE)
[11:46:46] [PASSED] 0xB0A0 (PANTHERLAKE)
[11:46:46] [PASSED] 0xB0B0 (PANTHERLAKE)
[11:46:46] [PASSED] 0xFD80 (PANTHERLAKE)
[11:46:46] [PASSED] 0xFD81 (PANTHERLAKE)
[11:46:46] [PASSED] 0xD740 (NOVALAKE_S)
[11:46:46] [PASSED] 0xD741 (NOVALAKE_S)
[11:46:46] [PASSED] 0xD742 (NOVALAKE_S)
[11:46:46] [PASSED] 0xD743 (NOVALAKE_S)
[11:46:46] [PASSED] 0xD745 (NOVALAKE_S)
[11:46:46] [PASSED] 0xD74A (NOVALAKE_S)
[11:46:46] [PASSED] 0xD74B (NOVALAKE_S)
[11:46:46] [PASSED] 0x674C (CRESCENTISLAND)
[11:46:46] [PASSED] 0x674D (CRESCENTISLAND)
[11:46:46] [PASSED] 0x674E (CRESCENTISLAND)
[11:46:46] [PASSED] 0x674F (CRESCENTISLAND)
[11:46:46] [PASSED] 0x6750 (CRESCENTISLAND)
[11:46:46] [PASSED] 0xD750 (NOVALAKE_P)
[11:46:46] [PASSED] 0xD751 (NOVALAKE_P)
[11:46:46] [PASSED] 0xD752 (NOVALAKE_P)
[11:46:46] [PASSED] 0xD753 (NOVALAKE_P)
[11:46:46] [PASSED] 0xD754 (NOVALAKE_P)
[11:46:46] [PASSED] 0xD755 (NOVALAKE_P)
[11:46:46] [PASSED] 0xD756 (NOVALAKE_P)
[11:46:46] [PASSED] 0xD757 (NOVALAKE_P)
[11:46:46] [PASSED] 0xD75F (NOVALAKE_P)
[11:46:46] =============== [PASSED] check_platform_desc ===============
[11:46:46] ===================== [PASSED] xe_pci ======================
[11:46:46] ============= xe_rtp_tables_test (5 subtests) ==============
[11:46:46] ================== xe_rtp_table_gt_test ===================
[11:46:46] [PASSED] gt_was/14011060649
[11:46:46] [PASSED] gt_was/14011059788
[11:46:46] [PASSED] gt_was/14015795083
[11:46:46] [PASSED] gt_was/16021867713
[11:46:46] [PASSED] gt_was/14019449301
[11:46:46] [PASSED] gt_was/16028005424
[11:46:46] [PASSED] gt_was/14026578760
[11:46:46] [PASSED] gt_was/1409420604
[11:46:46] [PASSED] gt_was/1408615072
[11:46:46] [PASSED] gt_was/22010523718
[11:46:46] [PASSED] gt_was/14011006942
[11:46:46] [PASSED] gt_was/14014830051
[11:46:46] [PASSED] gt_was/18018781329
[11:46:46] [PASSED] gt_was/1509235366
[11:46:46] [PASSED] gt_was/18018781329
[11:46:46] [PASSED] gt_was/16016694945
[11:46:46] [PASSED] gt_was/14018575942
[11:46:46] [PASSED] gt_was/22016670082
[11:46:46] [PASSED] gt_was/22016670082
[11:46:46] [PASSED] gt_was/14017421178
[11:46:46] [PASSED] gt_was/16025250150
[11:46:46] [PASSED] gt_was/14021871409
[11:46:46] [PASSED] gt_was/16021865536
[11:46:46] [PASSED] gt_was/14021486841
[11:46:46] [PASSED] gt_was/14025160223
[11:46:46] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[11:46:46] [PASSED] gt_was/14025635424
[11:46:46] [PASSED] gt_was/16028005424
[11:46:46] ============== [PASSED] xe_rtp_table_gt_test ===============
[11:46:46] ================== xe_rtp_table_gt_test ===================
[11:46:46] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[11:46:46] [PASSED] gt_tunings/Tuning: 32B Access Enable
[11:46:46] [PASSED] gt_tunings/Tuning: L3 cache
[11:46:46] [PASSED] gt_tunings/Tuning: L3 cache - media
[11:46:46] [PASSED] gt_tunings/Tuning: Compression Overfetch
[11:46:46] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[11:46:46] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[11:46:46] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[11:46:46] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[11:46:46] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[11:46:46] [PASSED] gt_tunings/Tuning: Stateless compression control
[11:46:46] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[11:46:46] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[11:46:46] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[11:46:46] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[11:46:46] ============== [PASSED] xe_rtp_table_gt_test ===============
[11:46:46] ================== xe_rtp_table_oob_test ==================
[11:46:46] [PASSED] oob_was/1607983814
[11:46:46] [PASSED] oob_was/16010904313
[11:46:46] [PASSED] oob_was/18022495364
[11:46:46] [PASSED] oob_was/22012773006
[11:46:46] [PASSED] oob_was/14014475959
[11:46:46] [PASSED] oob_was/22011391025
[11:46:46] [PASSED] oob_was/22012727170
[11:46:46] [PASSED] oob_was/22012727685
[11:46:46] [PASSED] oob_was/22016596838
[11:46:46] [PASSED] oob_was/18020744125
[11:46:46] [PASSED] oob_was/1409600907
[11:46:46] [PASSED] oob_was/22014953428
[11:46:46] [PASSED] oob_was/16017236439
[11:46:46] [PASSED] oob_was/14019821291
[11:46:46] [PASSED] oob_was/14015076503
[11:46:46] [PASSED] oob_was/14018913170
[11:46:46] [PASSED] oob_was/14018094691
[11:46:46] [PASSED] oob_was/18024947630
[11:46:46] [PASSED] oob_was/16022287689
[11:46:46] [PASSED] oob_was/13011645652
[11:46:46] [PASSED] oob_was/14022293748
[11:46:46] [PASSED] oob_was/22019794406
[11:46:46] [PASSED] oob_was/22019338487
[11:46:46] [PASSED] oob_was/16023588340
[11:46:46] [PASSED] oob_was/14019789679
[11:46:46] [PASSED] oob_was/14022866841
[11:46:46] [PASSED] oob_was/16021333562
[11:46:46] [PASSED] oob_was/14016712196
[11:46:46] [PASSED] oob_was/14015568240
[11:46:46] [PASSED] oob_was/18013179988
[11:46:46] [PASSED] oob_was/1508761755
[11:46:46] [PASSED] oob_was/16023105232
[11:46:46] [PASSED] oob_was/16026508708
[11:46:46] [PASSED] oob_was/14020001231
[11:46:46] [PASSED] oob_was/16023683509
[11:46:46] [PASSED] oob_was/14025515070
[11:46:46] [PASSED] oob_was/15015404425_disable
[11:46:46] [PASSED] oob_was/16026007364
[11:46:46] [PASSED] oob_was/14020316580
[11:46:46] [PASSED] oob_was/14025883347
[11:46:46] [PASSED] oob_was/16029380221
[11:46:46] [PASSED] oob_was/22022079272
[11:46:46] [PASSED] oob_was/16029897822
[11:46:46] [PASSED] oob_was/14027054324
[11:46:46] ============== [PASSED] xe_rtp_table_oob_test ==============
[11:46:46] ================ xe_rtp_table_dev_oob_test ================
[11:46:46] [PASSED] device_oob_was/22010954014
[11:46:46] [PASSED] device_oob_was/15015404425
[11:46:46] [PASSED] device_oob_was/22019338487_display
[11:46:46] [PASSED] device_oob_was/14022085890
[11:46:46] [PASSED] device_oob_was/14026539277
[11:46:46] [PASSED] device_oob_was/14026633728
[11:46:46] [PASSED] device_oob_was/14026746987
[11:46:46] [PASSED] device_oob_was/14026779378
[11:46:46] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[11:46:46] ========== xe_rtp_table_missing_upper_bound_test ==========
[11:46:46] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[11:46:46] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[11:46:46] [PASSED] register_whitelist/1806527549
[11:46:46] [PASSED] register_whitelist/allow_read_ctx_timestamp
[11:46:46] [PASSED] register_whitelist/allow_read_queue_timestamp
[11:46:46] [PASSED] register_whitelist/16014440446
[11:46:46] [PASSED] register_whitelist/16017236439
[11:46:46] [PASSED] register_whitelist/16020183090
[11:46:46] [PASSED] register_whitelist/14024997852
[11:46:46] [PASSED] register_whitelist/14024997852
[11:46:46] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[11:46:46] =============== [PASSED] xe_rtp_tables_test ================
[11:46:46] =================== xe_rtp (3 subtests) ====================
[11:46:46] =================== xe_rtp_rules_tests ====================
[11:46:46] [PASSED] no
[11:46:46] [PASSED] yes
[11:46:46] [PASSED] no-and-no
[11:46:46] [PASSED] no-and-yes
[11:46:46] [PASSED] yes-and-no
[11:46:46] [PASSED] yes-and-yes
[11:46:46] [PASSED] no-or-no
[11:46:46] [PASSED] no-or-yes
[11:46:46] [PASSED] yes-or-no
[11:46:46] [PASSED] yes-or-yes
[11:46:46] [PASSED] no-yes-or-yes-no
[11:46:46] [PASSED] no-yes-or-yes-yes
[11:46:46] [PASSED] yes-yes-or-no-yes
[11:46:46] [PASSED] yes-yes-or-yes-yes
[11:46:46] [PASSED] no-no-or-yes-or-no
[11:46:46] [PASSED] or
[11:46:46] [PASSED] or-yes
[11:46:46] [PASSED] or-no
[11:46:46] [PASSED] yes-or
[11:46:46] [PASSED] no-or
[11:46:46] [PASSED] no-or-or-yes
[11:46:46] [PASSED] yes-or-or-no
[11:46:46] [PASSED] no-or-or-no
[11:46:46] [PASSED] missing-context-engine-class
[11:46:46] [PASSED] missing-context-engine-class-or-yes
[11:46:46] [PASSED] missing-context-engine-class-or-or-yes
[11:46:46] =============== [PASSED] xe_rtp_rules_tests ================
[11:46:46] =============== xe_rtp_process_to_sr_tests ================
[11:46:46] [PASSED] coalesce-same-reg
[11:46:46] [PASSED] coalesce-same-reg-literal-and-func
[11:46:46] [PASSED] no-match-no-add
[11:46:46] [PASSED] two-regs-two-entries
[11:46:46] [PASSED] clr-one-set-other
[11:46:46] [PASSED] set-field
[11:46:46] [PASSED] conflict-duplicate
[11:46:46] [PASSED] conflict-not-disjoint
[11:46:46] [PASSED] conflict-not-disjoint-literal-and-func
[11:46:46] [PASSED] conflict-reg-type
[11:46:46] [PASSED] bad-mcr-reg-forced-to-regular
[11:46:46] [PASSED] bad-regular-reg-forced-to-mcr
[11:46:46] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[11:46:46] ================== xe_rtp_process_tests ===================
[11:46:46] [PASSED] active1
[11:46:46] [PASSED] active2
[11:46:46] [PASSED] active-inactive
[11:46:46] [PASSED] inactive-active
[11:46:46] [PASSED] inactive-active-inactive
[11:46:46] [PASSED] inactive-inactive-inactive
[11:46:46] ============== [PASSED] xe_rtp_process_tests ===============
[11:46:46] ===================== [PASSED] xe_rtp ======================
[11:46:46] ==================== xe_wa (1 subtest) =====================
[11:46:46] ======================== xe_wa_gt =========================
[11:46:46] [PASSED] TIGERLAKE B0
[11:46:46] [PASSED] DG1 A0
[11:46:46] [PASSED] DG1 B0
[11:46:46] [PASSED] ALDERLAKE_S A0
[11:46:46] [PASSED] ALDERLAKE_S B0
[11:46:46] [PASSED] ALDERLAKE_S C0
[11:46:46] [PASSED] ALDERLAKE_S D0
[11:46:46] [PASSED] ALDERLAKE_P A0
[11:46:46] [PASSED] ALDERLAKE_P B0
[11:46:46] [PASSED] ALDERLAKE_P C0
[11:46:46] [PASSED] ALDERLAKE_S RPLS D0
[11:46:46] [PASSED] ALDERLAKE_P RPLU E0
[11:46:46] [PASSED] DG2 G10 C0
[11:46:46] [PASSED] DG2 G11 B1
[11:46:46] [PASSED] DG2 G12 A1
[11:46:46] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[11:46:46] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[11:46:46] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[11:46:46] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[11:46:46] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[11:46:46] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[11:46:46] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[11:46:46] ==================== [PASSED] xe_wa_gt =====================
[11:46:46] ====================== [PASSED] xe_wa ======================
[11:46:46] ============================================================
[11:46:46] Testing complete. Ran 789 tests: passed: 761, skipped: 28
[11:46:46] Elapsed time: 37.466s total, 4.384s configuring, 32.366s building, 0.673s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[11:46:46] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[11:46:48] 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
[11:47:13] Starting KUnit Kernel (1/1)...
[11:47:13] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[11:47:13] ============ drm_test_pick_cmdline (2 subtests) ============
[11:47:13] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[11:47:13] =============== drm_test_pick_cmdline_named ===============
[11:47:13] [PASSED] NTSC
[11:47:13] [PASSED] NTSC-J
[11:47:13] [PASSED] PAL
[11:47:13] [PASSED] PAL-M
[11:47:13] =========== [PASSED] drm_test_pick_cmdline_named ===========
[11:47:13] ============== [PASSED] drm_test_pick_cmdline ==============
[11:47:13] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[11:47:13] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[11:47:13] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[11:47:13] =========== drm_validate_clone_mode (2 subtests) ===========
[11:47:13] ============== drm_test_check_in_clone_mode ===============
[11:47:13] [PASSED] in_clone_mode
[11:47:13] [PASSED] not_in_clone_mode
[11:47:13] ========== [PASSED] drm_test_check_in_clone_mode ===========
[11:47:13] =============== drm_test_check_valid_clones ===============
[11:47:13] [PASSED] not_in_clone_mode
[11:47:13] [PASSED] valid_clone
[11:47:13] [PASSED] invalid_clone
[11:47:13] =========== [PASSED] drm_test_check_valid_clones ===========
[11:47:13] ============= [PASSED] drm_validate_clone_mode =============
[11:47:13] ============= drm_validate_modeset (1 subtest) =============
[11:47:13] [PASSED] drm_test_check_connector_changed_modeset
[11:47:13] ============== [PASSED] drm_validate_modeset ===============
[11:47:13] ====== drm_test_bridge_get_current_state (1 subtest) =======
[11:47:13] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[11:47:13] ======== [PASSED] drm_test_bridge_get_current_state ========
[11:47:13] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[11:47:13] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[11:47:13] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[11:47:13] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[11:47:13] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[11:47:13] ============== drm_bridge_alloc (2 subtests) ===============
[11:47:13] [PASSED] drm_test_drm_bridge_alloc_basic
[11:47:13] [PASSED] drm_test_drm_bridge_alloc_get_put
[11:47:13] ================ [PASSED] drm_bridge_alloc =================
[11:47:13] ============= drm_bridge_bus_fmt (5 subtests) ==============
[11:47:13] [PASSED] drm_test_bridge_rgb_yuv_rgb
[11:47:13] [PASSED] drm_test_bridge_must_convert_to_yuv444
[11:47:13] [PASSED] drm_test_bridge_hdmi_auto_rgb
[11:47:13] [PASSED] drm_test_bridge_auto_first
[11:47:13] [PASSED] drm_test_bridge_rgb_yuv_no_path
[11:47:13] =============== [PASSED] drm_bridge_bus_fmt ================
[11:47:13] ============= drm_cmdline_parser (40 subtests) =============
[11:47:13] [PASSED] drm_test_cmdline_force_d_only
[11:47:13] [PASSED] drm_test_cmdline_force_D_only_dvi
[11:47:13] [PASSED] drm_test_cmdline_force_D_only_hdmi
[11:47:13] [PASSED] drm_test_cmdline_force_D_only_not_digital
[11:47:13] [PASSED] drm_test_cmdline_force_e_only
[11:47:13] [PASSED] drm_test_cmdline_res
[11:47:13] [PASSED] drm_test_cmdline_res_vesa
[11:47:13] [PASSED] drm_test_cmdline_res_vesa_rblank
[11:47:13] [PASSED] drm_test_cmdline_res_rblank
[11:47:13] [PASSED] drm_test_cmdline_res_bpp
[11:47:13] [PASSED] drm_test_cmdline_res_refresh
[11:47:13] [PASSED] drm_test_cmdline_res_bpp_refresh
[11:47:13] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[11:47:13] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[11:47:13] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[11:47:13] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[11:47:13] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[11:47:13] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[11:47:13] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[11:47:13] [PASSED] drm_test_cmdline_res_margins_force_on
[11:47:13] [PASSED] drm_test_cmdline_res_vesa_margins
[11:47:13] [PASSED] drm_test_cmdline_name
[11:47:13] [PASSED] drm_test_cmdline_name_bpp
[11:47:13] [PASSED] drm_test_cmdline_name_option
[11:47:13] [PASSED] drm_test_cmdline_name_bpp_option
[11:47:13] [PASSED] drm_test_cmdline_rotate_0
[11:47:13] [PASSED] drm_test_cmdline_rotate_90
[11:47:13] [PASSED] drm_test_cmdline_rotate_180
[11:47:13] [PASSED] drm_test_cmdline_rotate_270
[11:47:13] [PASSED] drm_test_cmdline_hmirror
[11:47:13] [PASSED] drm_test_cmdline_vmirror
[11:47:13] [PASSED] drm_test_cmdline_margin_options
[11:47:13] [PASSED] drm_test_cmdline_multiple_options
[11:47:13] [PASSED] drm_test_cmdline_bpp_extra_and_option
[11:47:13] [PASSED] drm_test_cmdline_extra_and_option
[11:47:13] [PASSED] drm_test_cmdline_freestanding_options
[11:47:13] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[11:47:13] [PASSED] drm_test_cmdline_panel_orientation
[11:47:13] ================ drm_test_cmdline_invalid =================
[11:47:13] [PASSED] margin_only
[11:47:13] [PASSED] interlace_only
[11:47:13] [PASSED] res_missing_x
[11:47:13] [PASSED] res_missing_y
[11:47:13] [PASSED] res_bad_y
[11:47:13] [PASSED] res_missing_y_bpp
[11:47:13] [PASSED] res_bad_bpp
[11:47:13] [PASSED] res_bad_refresh
[11:47:13] [PASSED] res_bpp_refresh_force_on_off
[11:47:13] [PASSED] res_invalid_mode
[11:47:13] [PASSED] res_bpp_wrong_place_mode
[11:47:13] [PASSED] name_bpp_refresh
[11:47:13] [PASSED] name_refresh
[11:47:13] [PASSED] name_refresh_wrong_mode
[11:47:13] [PASSED] name_refresh_invalid_mode
[11:47:13] [PASSED] rotate_multiple
[11:47:13] [PASSED] rotate_invalid_val
[11:47:13] [PASSED] rotate_truncated
[11:47:13] [PASSED] invalid_option
[11:47:13] [PASSED] invalid_tv_option
[11:47:13] [PASSED] truncated_tv_option
[11:47:13] ============ [PASSED] drm_test_cmdline_invalid =============
[11:47:13] =============== drm_test_cmdline_tv_options ===============
[11:47:13] [PASSED] NTSC
[11:47:13] [PASSED] NTSC_443
[11:47:13] [PASSED] NTSC_J
[11:47:13] [PASSED] PAL
[11:47:13] [PASSED] PAL_M
[11:47:13] [PASSED] PAL_N
[11:47:13] [PASSED] SECAM
[11:47:13] [PASSED] MONO_525
[11:47:13] [PASSED] MONO_625
[11:47:13] =========== [PASSED] drm_test_cmdline_tv_options ===========
[11:47:13] =============== [PASSED] drm_cmdline_parser ================
[11:47:13] ========== drmm_connector_hdmi_init (20 subtests) ==========
[11:47:13] [PASSED] drm_test_connector_hdmi_init_valid
[11:47:13] [PASSED] drm_test_connector_hdmi_init_bpc_8
[11:47:13] [PASSED] drm_test_connector_hdmi_init_bpc_10
[11:47:13] [PASSED] drm_test_connector_hdmi_init_bpc_12
[11:47:13] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[11:47:13] [PASSED] drm_test_connector_hdmi_init_bpc_null
[11:47:13] [PASSED] drm_test_connector_hdmi_init_formats_empty
[11:47:13] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[11:47:13] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[11:47:13] [PASSED] supported_formats=0x9 yuv420_allowed=1
[11:47:13] [PASSED] supported_formats=0x9 yuv420_allowed=0
[11:47:13] [PASSED] supported_formats=0x5 yuv420_allowed=1
[11:47:13] [PASSED] supported_formats=0x5 yuv420_allowed=0
[11:47:13] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[11:47:13] [PASSED] drm_test_connector_hdmi_init_null_ddc
[11:47:13] [PASSED] drm_test_connector_hdmi_init_null_product
[11:47:13] [PASSED] drm_test_connector_hdmi_init_null_vendor
[11:47:13] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[11:47:13] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[11:47:13] [PASSED] drm_test_connector_hdmi_init_product_valid
[11:47:13] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[11:47:13] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[11:47:13] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[11:47:13] ========= drm_test_connector_hdmi_init_type_valid =========
[11:47:13] [PASSED] HDMI-A
[11:47:13] [PASSED] HDMI-B
[11:47:13] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[11:47:13] ======== drm_test_connector_hdmi_init_type_invalid ========
[11:47:13] [PASSED] Unknown
[11:47:13] [PASSED] VGA
[11:47:13] [PASSED] DVI-I
[11:47:13] [PASSED] DVI-D
[11:47:13] [PASSED] DVI-A
[11:47:13] [PASSED] Composite
[11:47:13] [PASSED] SVIDEO
[11:47:13] [PASSED] LVDS
[11:47:13] [PASSED] Component
[11:47:13] [PASSED] DIN
[11:47:13] [PASSED] DP
[11:47:13] [PASSED] TV
[11:47:13] [PASSED] eDP
[11:47:13] [PASSED] Virtual
[11:47:13] [PASSED] DSI
[11:47:13] [PASSED] DPI
[11:47:13] [PASSED] Writeback
[11:47:13] [PASSED] SPI
[11:47:13] [PASSED] USB
[11:47:13] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[11:47:13] ============ [PASSED] drmm_connector_hdmi_init =============
[11:47:13] ============= drmm_connector_init (3 subtests) =============
[11:47:13] [PASSED] drm_test_drmm_connector_init
[11:47:13] [PASSED] drm_test_drmm_connector_init_null_ddc
[11:47:13] ========= drm_test_drmm_connector_init_type_valid =========
[11:47:13] [PASSED] Unknown
[11:47:13] [PASSED] VGA
[11:47:13] [PASSED] DVI-I
[11:47:13] [PASSED] DVI-D
[11:47:13] [PASSED] DVI-A
[11:47:13] [PASSED] Composite
[11:47:13] [PASSED] SVIDEO
[11:47:13] [PASSED] LVDS
[11:47:13] [PASSED] Component
[11:47:13] [PASSED] DIN
[11:47:13] [PASSED] DP
[11:47:13] [PASSED] HDMI-A
[11:47:13] [PASSED] HDMI-B
[11:47:13] [PASSED] TV
[11:47:13] [PASSED] eDP
[11:47:13] [PASSED] Virtual
[11:47:13] [PASSED] DSI
[11:47:13] [PASSED] DPI
[11:47:13] [PASSED] Writeback
[11:47:13] [PASSED] SPI
[11:47:13] [PASSED] USB
[11:47:13] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[11:47:13] =============== [PASSED] drmm_connector_init ===============
[11:47:13] ========= drm_connector_dynamic_init (6 subtests) ==========
[11:47:13] [PASSED] drm_test_drm_connector_dynamic_init
[11:47:13] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[11:47:13] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[11:47:13] [PASSED] drm_test_drm_connector_dynamic_init_properties
[11:47:13] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[11:47:13] [PASSED] Unknown
[11:47:13] [PASSED] VGA
[11:47:13] [PASSED] DVI-I
[11:47:13] [PASSED] DVI-D
[11:47:13] [PASSED] DVI-A
[11:47:13] [PASSED] Composite
[11:47:13] [PASSED] SVIDEO
[11:47:13] [PASSED] LVDS
[11:47:13] [PASSED] Component
[11:47:13] [PASSED] DIN
[11:47:13] [PASSED] DP
[11:47:13] [PASSED] HDMI-A
[11:47:13] [PASSED] HDMI-B
[11:47:13] [PASSED] TV
[11:47:13] [PASSED] eDP
[11:47:13] [PASSED] Virtual
[11:47:13] [PASSED] DSI
[11:47:13] [PASSED] DPI
[11:47:13] [PASSED] Writeback
[11:47:13] [PASSED] SPI
[11:47:13] [PASSED] USB
[11:47:13] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[11:47:13] ======== drm_test_drm_connector_dynamic_init_name =========
[11:47:13] [PASSED] Unknown
[11:47:13] [PASSED] VGA
[11:47:13] [PASSED] DVI-I
[11:47:13] [PASSED] DVI-D
[11:47:13] [PASSED] DVI-A
[11:47:13] [PASSED] Composite
[11:47:13] [PASSED] SVIDEO
[11:47:13] [PASSED] LVDS
[11:47:13] [PASSED] Component
[11:47:13] [PASSED] DIN
[11:47:13] [PASSED] DP
[11:47:13] [PASSED] HDMI-A
[11:47:13] [PASSED] HDMI-B
[11:47:13] [PASSED] TV
[11:47:13] [PASSED] eDP
[11:47:13] [PASSED] Virtual
[11:47:13] [PASSED] DSI
[11:47:13] [PASSED] DPI
[11:47:13] [PASSED] Writeback
[11:47:13] [PASSED] SPI
[11:47:13] [PASSED] USB
[11:47:13] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[11:47:13] =========== [PASSED] drm_connector_dynamic_init ============
[11:47:13] ==== drm_connector_dynamic_register_early (4 subtests) =====
[11:47:13] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[11:47:13] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[11:47:13] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[11:47:13] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[11:47:13] ====== [PASSED] drm_connector_dynamic_register_early =======
[11:47:13] ======= drm_connector_dynamic_register (7 subtests) ========
[11:47:13] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[11:47:13] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[11:47:13] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[11:47:13] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[11:47:13] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[11:47:13] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[11:47:13] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[11:47:13] ========= [PASSED] drm_connector_dynamic_register ==========
[11:47:13] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[11:47:13] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[11:47:13] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[11:47:13] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[11:47:13] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[11:47:13] ========== drm_test_get_tv_mode_from_name_valid ===========
[11:47:13] [PASSED] NTSC
[11:47:13] [PASSED] NTSC-443
[11:47:13] [PASSED] NTSC-J
[11:47:13] [PASSED] PAL
[11:47:13] [PASSED] PAL-M
[11:47:13] [PASSED] PAL-N
[11:47:13] [PASSED] SECAM
[11:47:13] [PASSED] Mono
[11:47:13] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[11:47:13] [PASSED] drm_test_get_tv_mode_from_name_truncated
[11:47:13] ============ [PASSED] drm_get_tv_mode_from_name ============
[11:47:13] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[11:47:13] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[11:47:13] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[11:47:13] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[11:47:13] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[11:47:13] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[11:47:13] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[11:47:13] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[11:47:13] [PASSED] VIC 96
[11:47:13] [PASSED] VIC 97
[11:47:13] [PASSED] VIC 101
[11:47:13] [PASSED] VIC 102
[11:47:13] [PASSED] VIC 106
[11:47:13] [PASSED] VIC 107
[11:47:13] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[11:47:13] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[11:47:13] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[11:47:13] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[11:47:13] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[11:47:13] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[11:47:13] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[11:47:13] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[11:47:13] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[11:47:13] [PASSED] Automatic
[11:47:13] [PASSED] Full
[11:47:13] [PASSED] Limited 16:235
[11:47:13] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[11:47:13] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[11:47:13] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[11:47:13] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[11:47:13] === drm_test_drm_hdmi_connector_get_output_format_name ====
[11:47:13] [PASSED] RGB
[11:47:13] [PASSED] YUV 4:2:0
[11:47:13] [PASSED] YUV 4:2:2
[11:47:13] [PASSED] YUV 4:4:4
[11:47:13] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[11:47:13] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[11:47:13] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[11:47:13] ============= drm_damage_helper (21 subtests) ==============
[11:47:13] [PASSED] drm_test_damage_iter_no_damage
[11:47:13] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[11:47:13] [PASSED] drm_test_damage_iter_no_damage_src_moved
[11:47:13] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[11:47:13] [PASSED] drm_test_damage_iter_no_damage_not_visible
[11:47:13] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[11:47:13] [PASSED] drm_test_damage_iter_no_damage_no_fb
[11:47:13] [PASSED] drm_test_damage_iter_simple_damage
[11:47:13] [PASSED] drm_test_damage_iter_single_damage
[11:47:13] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[11:47:13] [PASSED] drm_test_damage_iter_single_damage_outside_src
[11:47:13] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[11:47:13] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[11:47:13] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[11:47:13] [PASSED] drm_test_damage_iter_single_damage_src_moved
[11:47:13] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[11:47:13] [PASSED] drm_test_damage_iter_damage
[11:47:13] [PASSED] drm_test_damage_iter_damage_one_intersect
[11:47:13] [PASSED] drm_test_damage_iter_damage_one_outside
[11:47:13] [PASSED] drm_test_damage_iter_damage_src_moved
[11:47:13] [PASSED] drm_test_damage_iter_damage_not_visible
[11:47:13] ================ [PASSED] drm_damage_helper ================
[11:47:13] ============== drm_dp_mst_helper (3 subtests) ==============
[11:47:13] ============== drm_test_dp_mst_calc_pbn_mode ==============
[11:47:13] [PASSED] Clock 154000 BPP 30 DSC disabled
[11:47:13] [PASSED] Clock 234000 BPP 30 DSC disabled
[11:47:13] [PASSED] Clock 297000 BPP 24 DSC disabled
[11:47:13] [PASSED] Clock 332880 BPP 24 DSC enabled
[11:47:13] [PASSED] Clock 324540 BPP 24 DSC enabled
[11:47:13] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[11:47:13] ============== drm_test_dp_mst_calc_pbn_div ===============
[11:47:13] [PASSED] Link rate 2000000 lane count 4
[11:47:13] [PASSED] Link rate 2000000 lane count 2
[11:47:13] [PASSED] Link rate 2000000 lane count 1
[11:47:13] [PASSED] Link rate 1350000 lane count 4
[11:47:13] [PASSED] Link rate 1350000 lane count 2
[11:47:13] [PASSED] Link rate 1350000 lane count 1
[11:47:13] [PASSED] Link rate 1000000 lane count 4
[11:47:13] [PASSED] Link rate 1000000 lane count 2
[11:47:13] [PASSED] Link rate 1000000 lane count 1
[11:47:13] [PASSED] Link rate 810000 lane count 4
[11:47:13] [PASSED] Link rate 810000 lane count 2
[11:47:13] [PASSED] Link rate 810000 lane count 1
[11:47:13] [PASSED] Link rate 540000 lane count 4
[11:47:13] [PASSED] Link rate 540000 lane count 2
[11:47:13] [PASSED] Link rate 540000 lane count 1
[11:47:13] [PASSED] Link rate 270000 lane count 4
[11:47:13] [PASSED] Link rate 270000 lane count 2
[11:47:13] [PASSED] Link rate 270000 lane count 1
[11:47:13] [PASSED] Link rate 162000 lane count 4
[11:47:13] [PASSED] Link rate 162000 lane count 2
[11:47:13] [PASSED] Link rate 162000 lane count 1
[11:47:13] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[11:47:13] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[11:47:13] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[11:47:13] [PASSED] DP_POWER_UP_PHY with port number
[11:47:13] [PASSED] DP_POWER_DOWN_PHY with port number
[11:47:13] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[11:47:13] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[11:47:13] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[11:47:13] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[11:47:13] [PASSED] DP_QUERY_PAYLOAD with port number
[11:47:13] [PASSED] DP_QUERY_PAYLOAD with VCPI
[11:47:13] [PASSED] DP_REMOTE_DPCD_READ with port number
[11:47:13] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[11:47:13] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[11:47:13] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[11:47:13] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[11:47:13] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[11:47:13] [PASSED] DP_REMOTE_I2C_READ with port number
[11:47:13] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[11:47:13] [PASSED] DP_REMOTE_I2C_READ with transactions array
[11:47:13] [PASSED] DP_REMOTE_I2C_WRITE with port number
[11:47:13] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[11:47:13] [PASSED] DP_REMOTE_I2C_WRITE with data array
[11:47:13] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[11:47:13] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[11:47:13] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[11:47:13] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[11:47:13] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[11:47:13] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[11:47:13] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[11:47:13] ================ [PASSED] drm_dp_mst_helper ================
[11:47:13] ================== drm_exec (7 subtests) ===================
[11:47:13] [PASSED] sanitycheck
[11:47:13] [PASSED] test_lock
[11:47:13] [PASSED] test_lock_unlock
[11:47:13] [PASSED] test_duplicates
[11:47:13] [PASSED] test_prepare
[11:47:13] [PASSED] test_prepare_array
[11:47:13] [PASSED] test_multiple_loops
[11:47:13] ==================== [PASSED] drm_exec =====================
[11:47:13] =========== drm_format_helper_test (17 subtests) ===========
[11:47:13] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[11:47:13] [PASSED] single_pixel_source_buffer
[11:47:13] [PASSED] single_pixel_clip_rectangle
[11:47:13] [PASSED] well_known_colors
[11:47:13] [PASSED] destination_pitch
[11:47:13] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[11:47:13] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[11:47:13] [PASSED] single_pixel_source_buffer
[11:47:13] [PASSED] single_pixel_clip_rectangle
[11:47:13] [PASSED] well_known_colors
[11:47:13] [PASSED] destination_pitch
[11:47:13] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[11:47:13] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[11:47:13] [PASSED] single_pixel_source_buffer
[11:47:13] [PASSED] single_pixel_clip_rectangle
[11:47:13] [PASSED] well_known_colors
[11:47:13] [PASSED] destination_pitch
[11:47:13] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[11:47:13] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[11:47:13] [PASSED] single_pixel_source_buffer
[11:47:13] [PASSED] single_pixel_clip_rectangle
[11:47:13] [PASSED] well_known_colors
[11:47:13] [PASSED] destination_pitch
[11:47:13] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[11:47:13] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[11:47:13] [PASSED] single_pixel_source_buffer
[11:47:13] [PASSED] single_pixel_clip_rectangle
[11:47:13] [PASSED] well_known_colors
[11:47:13] [PASSED] destination_pitch
[11:47:13] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[11:47:13] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[11:47:13] [PASSED] single_pixel_source_buffer
[11:47:13] [PASSED] single_pixel_clip_rectangle
[11:47:13] [PASSED] well_known_colors
[11:47:13] [PASSED] destination_pitch
[11:47:13] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[11:47:13] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[11:47:13] [PASSED] single_pixel_source_buffer
[11:47:13] [PASSED] single_pixel_clip_rectangle
[11:47:13] [PASSED] well_known_colors
[11:47:13] [PASSED] destination_pitch
[11:47:13] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[11:47:13] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[11:47:13] [PASSED] single_pixel_source_buffer
[11:47:13] [PASSED] single_pixel_clip_rectangle
[11:47:13] [PASSED] well_known_colors
[11:47:13] [PASSED] destination_pitch
[11:47:13] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[11:47:13] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[11:47:13] [PASSED] single_pixel_source_buffer
[11:47:13] [PASSED] single_pixel_clip_rectangle
[11:47:13] [PASSED] well_known_colors
[11:47:13] [PASSED] destination_pitch
[11:47:13] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[11:47:13] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[11:47:13] [PASSED] single_pixel_source_buffer
[11:47:13] [PASSED] single_pixel_clip_rectangle
[11:47:13] [PASSED] well_known_colors
[11:47:13] [PASSED] destination_pitch
[11:47:13] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[11:47:13] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[11:47:13] [PASSED] single_pixel_source_buffer
[11:47:13] [PASSED] single_pixel_clip_rectangle
[11:47:13] [PASSED] well_known_colors
[11:47:13] [PASSED] destination_pitch
[11:47:13] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[11:47:13] ============== drm_test_fb_xrgb8888_to_mono ===============
[11:47:13] [PASSED] single_pixel_source_buffer
[11:47:13] [PASSED] single_pixel_clip_rectangle
[11:47:13] [PASSED] well_known_colors
[11:47:13] [PASSED] destination_pitch
[11:47:13] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[11:47:13] ==================== drm_test_fb_swab =====================
[11:47:13] [PASSED] single_pixel_source_buffer
[11:47:13] [PASSED] single_pixel_clip_rectangle
[11:47:13] [PASSED] well_known_colors
[11:47:13] [PASSED] destination_pitch
[11:47:13] ================ [PASSED] drm_test_fb_swab =================
[11:47:13] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[11:47:13] [PASSED] single_pixel_source_buffer
[11:47:13] [PASSED] single_pixel_clip_rectangle
[11:47:13] [PASSED] well_known_colors
[11:47:13] [PASSED] destination_pitch
[11:47:13] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[11:47:13] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[11:47:13] [PASSED] single_pixel_source_buffer
[11:47:13] [PASSED] single_pixel_clip_rectangle
[11:47:13] [PASSED] well_known_colors
[11:47:13] [PASSED] destination_pitch
[11:47:13] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[11:47:13] ================= drm_test_fb_clip_offset =================
[11:47:13] [PASSED] pass through
[11:47:13] [PASSED] horizontal offset
[11:47:13] [PASSED] vertical offset
[11:47:13] [PASSED] horizontal and vertical offset
[11:47:13] [PASSED] horizontal offset (custom pitch)
[11:47:13] [PASSED] vertical offset (custom pitch)
[11:47:13] [PASSED] horizontal and vertical offset (custom pitch)
[11:47:13] ============= [PASSED] drm_test_fb_clip_offset =============
[11:47:13] =================== drm_test_fb_memcpy ====================
[11:47:13] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[11:47:13] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[11:47:13] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[11:47:13] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[11:47:13] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[11:47:13] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[11:47:13] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[11:47:13] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[11:47:13] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[11:47:13] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[11:47:13] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[11:47:13] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[11:47:13] =============== [PASSED] drm_test_fb_memcpy ================
[11:47:13] ============= [PASSED] drm_format_helper_test ==============
[11:47:13] ================= drm_format (18 subtests) =================
[11:47:13] [PASSED] drm_test_format_block_width_invalid
[11:47:13] [PASSED] drm_test_format_block_width_one_plane
[11:47:13] [PASSED] drm_test_format_block_width_two_plane
[11:47:13] [PASSED] drm_test_format_block_width_three_plane
[11:47:13] [PASSED] drm_test_format_block_width_tiled
[11:47:13] [PASSED] drm_test_format_block_height_invalid
[11:47:13] [PASSED] drm_test_format_block_height_one_plane
[11:47:13] [PASSED] drm_test_format_block_height_two_plane
[11:47:13] [PASSED] drm_test_format_block_height_three_plane
[11:47:13] [PASSED] drm_test_format_block_height_tiled
[11:47:13] [PASSED] drm_test_format_min_pitch_invalid
[11:47:13] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[11:47:13] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[11:47:13] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[11:47:13] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[11:47:13] [PASSED] drm_test_format_min_pitch_two_plane
[11:47:13] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[11:47:13] [PASSED] drm_test_format_min_pitch_tiled
[11:47:13] =================== [PASSED] drm_format ====================
[11:47:13] ============== drm_framebuffer (10 subtests) ===============
[11:47:13] ========== drm_test_framebuffer_check_src_coords ==========
[11:47:13] [PASSED] Success: source fits into fb
[11:47:13] [PASSED] Fail: overflowing fb with x-axis coordinate
[11:47:13] [PASSED] Fail: overflowing fb with y-axis coordinate
[11:47:13] [PASSED] Fail: overflowing fb with source width
[11:47:13] [PASSED] Fail: overflowing fb with source height
[11:47:13] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[11:47:13] [PASSED] drm_test_framebuffer_cleanup
[11:47:13] =============== drm_test_framebuffer_create ===============
[11:47:13] [PASSED] ABGR8888 normal sizes
[11:47:13] [PASSED] ABGR8888 max sizes
[11:47:13] [PASSED] ABGR8888 pitch greater than min required
[11:47:13] [PASSED] ABGR8888 pitch less than min required
[11:47:13] [PASSED] ABGR8888 Invalid width
[11:47:13] [PASSED] ABGR8888 Invalid buffer handle
[11:47:13] [PASSED] No pixel format
[11:47:13] [PASSED] ABGR8888 Width 0
[11:47:13] [PASSED] ABGR8888 Height 0
[11:47:13] [PASSED] ABGR8888 Out of bound height * pitch combination
[11:47:13] [PASSED] ABGR8888 Large buffer offset
[11:47:13] [PASSED] ABGR8888 Buffer offset for inexistent plane
[11:47:13] [PASSED] ABGR8888 Invalid flag
[11:47:13] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[11:47:13] [PASSED] ABGR8888 Valid buffer modifier
[11:47:13] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[11:47:13] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[11:47:13] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[11:47:13] [PASSED] NV12 Normal sizes
[11:47:13] [PASSED] NV12 Max sizes
[11:47:13] [PASSED] NV12 Invalid pitch
[11:47:13] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[11:47:13] [PASSED] NV12 different modifier per-plane
[11:47:13] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[11:47:13] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[11:47:13] [PASSED] NV12 Modifier for inexistent plane
[11:47:13] [PASSED] NV12 Handle for inexistent plane
[11:47:13] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[11:47:13] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[11:47:13] [PASSED] YVU420 Normal sizes
[11:47:13] [PASSED] YVU420 Max sizes
[11:47:13] [PASSED] YVU420 Invalid pitch
[11:47:13] [PASSED] YVU420 Different pitches
[11:47:13] [PASSED] YVU420 Different buffer offsets/pitches
[11:47:13] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[11:47:13] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[11:47:13] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[11:47:13] [PASSED] YVU420 Valid modifier
[11:47:13] [PASSED] YVU420 Different modifiers per plane
[11:47:13] [PASSED] YVU420 Modifier for inexistent plane
[11:47:13] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[11:47:13] [PASSED] X0L2 Normal sizes
[11:47:13] [PASSED] X0L2 Max sizes
[11:47:13] [PASSED] X0L2 Invalid pitch
[11:47:13] [PASSED] X0L2 Pitch greater than minimum required
[11:47:13] [PASSED] X0L2 Handle for inexistent plane
[11:47:13] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[11:47:13] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[11:47:13] [PASSED] X0L2 Valid modifier
[11:47:13] [PASSED] X0L2 Modifier for inexistent plane
[11:47:13] =========== [PASSED] drm_test_framebuffer_create ===========
[11:47:13] [PASSED] drm_test_framebuffer_free
[11:47:13] [PASSED] drm_test_framebuffer_init
[11:47:13] [PASSED] drm_test_framebuffer_init_bad_format
[11:47:13] [PASSED] drm_test_framebuffer_init_dev_mismatch
[11:47:13] [PASSED] drm_test_framebuffer_lookup
[11:47:13] [PASSED] drm_test_framebuffer_lookup_inexistent
[11:47:13] [PASSED] drm_test_framebuffer_modifiers_not_supported
[11:47:13] ================= [PASSED] drm_framebuffer =================
[11:47:13] ================ drm_gem_shmem (8 subtests) ================
[11:47:13] [PASSED] drm_gem_shmem_test_obj_create
[11:47:13] [PASSED] drm_gem_shmem_test_obj_create_private
[11:47:13] [PASSED] drm_gem_shmem_test_pin_pages
[11:47:13] [PASSED] drm_gem_shmem_test_vmap
[11:47:13] [PASSED] drm_gem_shmem_test_get_sg_table
[11:47:13] [PASSED] drm_gem_shmem_test_get_pages_sgt
[11:47:13] [PASSED] drm_gem_shmem_test_madvise
[11:47:13] [PASSED] drm_gem_shmem_test_purge
[11:47:13] ================== [PASSED] drm_gem_shmem ==================
[11:47:13] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[11:47:13] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[11:47:13] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[11:47:13] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[11:47:13] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[11:47:13] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[11:47:13] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[11:47:13] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[11:47:13] [PASSED] Automatic
[11:47:13] [PASSED] Full
[11:47:13] [PASSED] Limited 16:235
[11:47:13] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[11:47:13] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[11:47:13] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[11:47:13] [PASSED] drm_test_check_disable_connector
[11:47:13] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[11:47:13] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[11:47:13] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[11:47:13] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[11:47:13] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[11:47:13] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[11:47:13] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[11:47:13] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[11:47:13] [PASSED] drm_test_check_output_bpc_dvi
[11:47:13] [PASSED] drm_test_check_output_bpc_format_vic_1
[11:47:13] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[11:47:13] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[11:47:13] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[11:47:13] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[11:47:13] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[11:47:13] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[11:47:13] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[11:47:13] ============ drm_test_check_hdmi_color_format =============
[11:47:13] [PASSED] AUTO -> RGB
[11:47:13] [PASSED] YCBCR422 -> YUV422
[11:47:13] [PASSED] YCBCR420 -> YUV420
[11:47:13] [PASSED] YCBCR444 -> YUV444
[11:47:13] [PASSED] RGB -> RGB
[11:47:13] ======== [PASSED] drm_test_check_hdmi_color_format =========
[11:47:13] ======== drm_test_check_hdmi_color_format_420_only ========
[11:47:13] [PASSED] RGB should fail
[11:47:13] [PASSED] YUV444 should fail
[11:47:13] [PASSED] YUV422 should fail
[11:47:13] [PASSED] YUV420 should work
[11:47:13] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[11:47:13] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[11:47:13] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[11:47:13] [PASSED] drm_test_check_broadcast_rgb_value
[11:47:13] [PASSED] drm_test_check_bpc_8_value
[11:47:13] [PASSED] drm_test_check_bpc_10_value
[11:47:13] [PASSED] drm_test_check_bpc_12_value
[11:47:13] [PASSED] drm_test_check_format_value
[11:47:13] [PASSED] drm_test_check_tmds_char_value
[11:47:13] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[11:47:13] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[11:47:13] [PASSED] drm_test_check_mode_valid
[11:47:13] [PASSED] drm_test_check_mode_valid_reject
[11:47:13] [PASSED] drm_test_check_mode_valid_reject_rate
[11:47:13] [PASSED] drm_test_check_mode_valid_reject_max_clock
[11:47:13] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[11:47:13] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[11:47:13] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[11:47:13] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[11:47:13] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[11:47:13] [PASSED] drm_test_check_infoframes
[11:47:13] [PASSED] drm_test_check_reject_avi_infoframe
[11:47:13] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[11:47:13] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[11:47:13] [PASSED] drm_test_check_reject_audio_infoframe
[11:47:13] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[11:47:13] ================= drm_managed (2 subtests) =================
[11:47:13] [PASSED] drm_test_managed_release_action
[11:47:13] [PASSED] drm_test_managed_run_action
[11:47:13] =================== [PASSED] drm_managed ===================
[11:47:13] =================== drm_mm (6 subtests) ====================
[11:47:13] [PASSED] drm_test_mm_init
[11:47:13] [PASSED] drm_test_mm_debug
[11:47:13] [PASSED] drm_test_mm_align32
[11:47:13] [PASSED] drm_test_mm_align64
[11:47:13] [PASSED] drm_test_mm_lowest
[11:47:13] [PASSED] drm_test_mm_highest
[11:47:13] ===================== [PASSED] drm_mm ======================
[11:47:13] ============= drm_modes_analog_tv (5 subtests) =============
[11:47:13] [PASSED] drm_test_modes_analog_tv_mono_576i
[11:47:13] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[11:47:13] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[11:47:13] [PASSED] drm_test_modes_analog_tv_pal_576i
[11:47:13] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[11:47:13] =============== [PASSED] drm_modes_analog_tv ===============
[11:47:13] ============== drm_plane_helper (2 subtests) ===============
[11:47:13] =============== drm_test_check_plane_state ================
[11:47:13] [PASSED] clipping_simple
[11:47:13] [PASSED] clipping_rotate_reflect
[11:47:13] [PASSED] positioning_simple
[11:47:13] [PASSED] upscaling
[11:47:13] [PASSED] downscaling
[11:47:13] [PASSED] rounding1
[11:47:13] [PASSED] rounding2
[11:47:13] [PASSED] rounding3
[11:47:13] [PASSED] rounding4
[11:47:13] =========== [PASSED] drm_test_check_plane_state ============
[11:47:13] =========== drm_test_check_invalid_plane_state ============
[11:47:13] [PASSED] positioning_invalid
[11:47:13] [PASSED] upscaling_invalid
[11:47:13] [PASSED] downscaling_invalid
[11:47:13] ======= [PASSED] drm_test_check_invalid_plane_state ========
[11:47:13] ================ [PASSED] drm_plane_helper =================
[11:47:13] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[11:47:13] ====== drm_test_connector_helper_tv_get_modes_check =======
[11:47:13] [PASSED] None
[11:47:13] [PASSED] PAL
[11:47:13] [PASSED] NTSC
[11:47:13] [PASSED] Both, NTSC Default
[11:47:13] [PASSED] Both, PAL Default
[11:47:13] [PASSED] Both, NTSC Default, with PAL on command-line
[11:47:13] [PASSED] Both, PAL Default, with NTSC on command-line
[11:47:13] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[11:47:13] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[11:47:13] ================== drm_rect (9 subtests) ===================
[11:47:13] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[11:47:13] [PASSED] drm_test_rect_clip_scaled_not_clipped
[11:47:13] [PASSED] drm_test_rect_clip_scaled_clipped
[11:47:13] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[11:47:13] ================= drm_test_rect_intersect =================
[11:47:13] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[11:47:13] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[11:47:13] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[11:47:13] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[11:47:13] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[11:47:13] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[11:47:13] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[11:47:13] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[11:47:13] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[11:47:13] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[11:47:13] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[11:47:13] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[11:47:13] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[11:47:13] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[11:47:13] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[11:47:13] ============= [PASSED] drm_test_rect_intersect =============
[11:47:13] ================ drm_test_rect_calc_hscale ================
[11:47:13] [PASSED] normal use
[11:47:13] [PASSED] out of max range
[11:47:13] [PASSED] out of min range
[11:47:13] [PASSED] zero dst
[11:47:13] [PASSED] negative src
[11:47:13] [PASSED] negative dst
[11:47:13] ============ [PASSED] drm_test_rect_calc_hscale ============
[11:47:13] ================ drm_test_rect_calc_vscale ================
[11:47:13] [PASSED] normal use
[11:47:13] [PASSED] out of max range
[11:47:13] [PASSED] out of min range
[11:47:13] [PASSED] zero dst
[11:47:13] [PASSED] negative src
[11:47:13] [PASSED] negative dst
[11:47:13] ============ [PASSED] drm_test_rect_calc_vscale ============
[11:47:13] ================== drm_test_rect_rotate ===================
[11:47:13] [PASSED] reflect-x
[11:47:13] [PASSED] reflect-y
[11:47:13] [PASSED] rotate-0
[11:47:13] [PASSED] rotate-90
[11:47:13] [PASSED] rotate-180
[11:47:13] [PASSED] rotate-270
[11:47:13] ============== [PASSED] drm_test_rect_rotate ===============
[11:47:13] ================ drm_test_rect_rotate_inv =================
[11:47:13] [PASSED] reflect-x
[11:47:13] [PASSED] reflect-y
[11:47:13] [PASSED] rotate-0
[11:47:13] [PASSED] rotate-90
[11:47:13] [PASSED] rotate-180
[11:47:13] [PASSED] rotate-270
[11:47:13] ============ [PASSED] drm_test_rect_rotate_inv =============
[11:47:13] ==================== [PASSED] drm_rect =====================
[11:47:13] ============ drm_sysfb_modeset_test (1 subtest) ============
[11:47:13] ============ drm_test_sysfb_build_fourcc_list =============
[11:47:13] [PASSED] no native formats
[11:47:13] [PASSED] XRGB8888 as native format
[11:47:13] [PASSED] remove duplicates
[11:47:13] [PASSED] convert alpha formats
[11:47:13] [PASSED] random formats
[11:47:13] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[11:47:13] ============= [PASSED] drm_sysfb_modeset_test ==============
[11:47:13] ================== drm_fixp (2 subtests) ===================
[11:47:13] [PASSED] drm_test_int2fixp
[11:47:13] [PASSED] drm_test_sm2fixp
[11:47:13] ==================== [PASSED] drm_fixp =====================
[11:47:13] ============================================================
[11:47:13] Testing complete. Ran 637 tests: passed: 637
[11:47:13] Elapsed time: 26.824s total, 1.818s configuring, 24.840s building, 0.144s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[11:47:13] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[11:47:15] 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
[11:47:25] Starting KUnit Kernel (1/1)...
[11:47:25] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[11:47:25] ================= ttm_device (5 subtests) ==================
[11:47:25] [PASSED] ttm_device_init_basic
[11:47:25] [PASSED] ttm_device_init_multiple
[11:47:25] [PASSED] ttm_device_fini_basic
[11:47:25] [PASSED] ttm_device_init_no_vma_man
[11:47:25] ================== ttm_device_init_pools ==================
[11:47:25] [PASSED] No DMA allocations, no DMA32 required
[11:47:25] [PASSED] DMA allocations, DMA32 required
[11:47:25] [PASSED] No DMA allocations, DMA32 required
[11:47:25] [PASSED] DMA allocations, no DMA32 required
[11:47:25] ============== [PASSED] ttm_device_init_pools ==============
[11:47:25] =================== [PASSED] ttm_device ====================
[11:47:25] ================== ttm_pool (8 subtests) ===================
[11:47:25] ================== ttm_pool_alloc_basic ===================
[11:47:25] [PASSED] One page
[11:47:25] [PASSED] More than one page
[11:47:25] [PASSED] Above the allocation limit
[11:47:25] [PASSED] One page, with coherent DMA mappings enabled
[11:47:25] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[11:47:25] ============== [PASSED] ttm_pool_alloc_basic ===============
[11:47:25] ============== ttm_pool_alloc_basic_dma_addr ==============
[11:47:25] [PASSED] One page
[11:47:25] [PASSED] More than one page
[11:47:25] [PASSED] Above the allocation limit
[11:47:25] [PASSED] One page, with coherent DMA mappings enabled
[11:47:25] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[11:47:25] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[11:47:25] [PASSED] ttm_pool_alloc_order_caching_match
[11:47:25] [PASSED] ttm_pool_alloc_caching_mismatch
[11:47:25] [PASSED] ttm_pool_alloc_order_mismatch
[11:47:25] [PASSED] ttm_pool_free_dma_alloc
[11:47:25] [PASSED] ttm_pool_free_no_dma_alloc
[11:47:25] [PASSED] ttm_pool_fini_basic
[11:47:25] ==================== [PASSED] ttm_pool =====================
[11:47:25] ================ ttm_resource (8 subtests) =================
[11:47:25] ================= ttm_resource_init_basic =================
[11:47:25] [PASSED] Init resource in TTM_PL_SYSTEM
[11:47:25] [PASSED] Init resource in TTM_PL_VRAM
[11:47:25] [PASSED] Init resource in a private placement
[11:47:25] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[11:47:25] ============= [PASSED] ttm_resource_init_basic =============
[11:47:25] [PASSED] ttm_resource_init_pinned
[11:47:25] [PASSED] ttm_resource_fini_basic
[11:47:25] [PASSED] ttm_resource_manager_init_basic
[11:47:25] [PASSED] ttm_resource_manager_usage_basic
[11:47:25] [PASSED] ttm_resource_manager_set_used_basic
[11:47:25] [PASSED] ttm_sys_man_alloc_basic
[11:47:25] [PASSED] ttm_sys_man_free_basic
[11:47:25] ================== [PASSED] ttm_resource ===================
[11:47:25] =================== ttm_tt (15 subtests) ===================
[11:47:25] ==================== ttm_tt_init_basic ====================
[11:47:25] [PASSED] Page-aligned size
[11:47:25] [PASSED] Extra pages requested
[11:47:25] ================ [PASSED] ttm_tt_init_basic ================
[11:47:25] [PASSED] ttm_tt_init_misaligned
[11:47:25] [PASSED] ttm_tt_fini_basic
[11:47:25] [PASSED] ttm_tt_fini_sg
[11:47:25] [PASSED] ttm_tt_fini_shmem
[11:47:25] [PASSED] ttm_tt_create_basic
[11:47:25] [PASSED] ttm_tt_create_invalid_bo_type
[11:47:25] [PASSED] ttm_tt_create_ttm_exists
[11:47:25] [PASSED] ttm_tt_create_failed
[11:47:25] [PASSED] ttm_tt_destroy_basic
[11:47:25] [PASSED] ttm_tt_populate_null_ttm
[11:47:25] [PASSED] ttm_tt_populate_populated_ttm
[11:47:25] [PASSED] ttm_tt_unpopulate_basic
[11:47:25] [PASSED] ttm_tt_unpopulate_empty_ttm
[11:47:25] [PASSED] ttm_tt_swapin_basic
[11:47:25] ===================== [PASSED] ttm_tt ======================
[11:47:25] =================== ttm_bo (14 subtests) ===================
[11:47:25] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[11:47:25] [PASSED] Cannot be interrupted and sleeps
[11:47:25] [PASSED] Cannot be interrupted, locks straight away
[11:47:25] [PASSED] Can be interrupted, sleeps
[11:47:25] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[11:47:25] [PASSED] ttm_bo_reserve_locked_no_sleep
[11:47:25] [PASSED] ttm_bo_reserve_no_wait_ticket
[11:47:25] [PASSED] ttm_bo_reserve_double_resv
[11:47:25] [PASSED] ttm_bo_reserve_interrupted
[11:47:25] [PASSED] ttm_bo_reserve_deadlock
[11:47:25] [PASSED] ttm_bo_unreserve_basic
[11:47:25] [PASSED] ttm_bo_unreserve_pinned
[11:47:25] [PASSED] ttm_bo_unreserve_bulk
[11:47:25] [PASSED] ttm_bo_fini_basic
[11:47:25] [PASSED] ttm_bo_fini_shared_resv
[11:47:25] [PASSED] ttm_bo_pin_basic
[11:47:25] [PASSED] ttm_bo_pin_unpin_resource
[11:47:25] [PASSED] ttm_bo_multiple_pin_one_unpin
[11:47:25] ===================== [PASSED] ttm_bo ======================
[11:47:25] ============== ttm_bo_validate (22 subtests) ===============
[11:47:25] ============== ttm_bo_init_reserved_sys_man ===============
[11:47:25] [PASSED] Buffer object for userspace
[11:47:25] [PASSED] Kernel buffer object
[11:47:25] [PASSED] Shared buffer object
[11:47:25] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[11:47:25] ============== ttm_bo_init_reserved_mock_man ==============
[11:47:25] [PASSED] Buffer object for userspace
[11:47:25] [PASSED] Kernel buffer object
[11:47:25] [PASSED] Shared buffer object
[11:47:25] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[11:47:25] [PASSED] ttm_bo_init_reserved_resv
[11:47:25] ================== ttm_bo_validate_basic ==================
[11:47:25] [PASSED] Buffer object for userspace
[11:47:25] [PASSED] Kernel buffer object
[11:47:25] [PASSED] Shared buffer object
[11:47:25] ============== [PASSED] ttm_bo_validate_basic ==============
[11:47:25] [PASSED] ttm_bo_validate_invalid_placement
[11:47:25] ============= ttm_bo_validate_same_placement ==============
[11:47:25] [PASSED] System manager
[11:47:25] [PASSED] VRAM manager
[11:47:25] ========= [PASSED] ttm_bo_validate_same_placement ==========
[11:47:25] [PASSED] ttm_bo_validate_failed_alloc
[11:47:25] [PASSED] ttm_bo_validate_pinned
[11:47:25] [PASSED] ttm_bo_validate_busy_placement
[11:47:25] ================ ttm_bo_validate_multihop =================
[11:47:25] [PASSED] Buffer object for userspace
[11:47:25] [PASSED] Kernel buffer object
[11:47:25] [PASSED] Shared buffer object
[11:47:25] ============ [PASSED] ttm_bo_validate_multihop =============
[11:47:25] ========== ttm_bo_validate_no_placement_signaled ==========
[11:47:25] [PASSED] Buffer object in system domain, no page vector
[11:47:25] [PASSED] Buffer object in system domain with an existing page vector
[11:47:25] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[11:47:25] ======== ttm_bo_validate_no_placement_not_signaled ========
[11:47:25] [PASSED] Buffer object for userspace
[11:47:25] [PASSED] Kernel buffer object
[11:47:25] [PASSED] Shared buffer object
[11:47:25] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[11:47:25] [PASSED] ttm_bo_validate_move_fence_signaled
[11:47:25] ========= ttm_bo_validate_move_fence_not_signaled =========
[11:47:25] [PASSED] Waits for GPU
[11:47:25] [PASSED] Tries to lock straight away
[11:47:25] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[11:47:25] [PASSED] ttm_bo_validate_swapout
[11:47:25] [PASSED] ttm_bo_validate_happy_evict
[11:47:25] [PASSED] ttm_bo_validate_all_pinned_evict
[11:47:25] [PASSED] ttm_bo_validate_allowed_only_evict
[11:47:25] [PASSED] ttm_bo_validate_deleted_evict
[11:47:25] [PASSED] ttm_bo_validate_busy_domain_evict
[11:47:25] [PASSED] ttm_bo_validate_evict_gutting
[11:47:25] [PASSED] ttm_bo_validate_recrusive_evict
[11:47:25] ================= [PASSED] ttm_bo_validate =================
[11:47:25] ============================================================
[11:47:25] Testing complete. Ran 102 tests: passed: 102
[11:47:25] Elapsed time: 12.114s total, 1.814s configuring, 10.085s building, 0.185s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[11:47:25] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[11:47:27] 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
[11:47:36] Starting KUnit Kernel (1/1)...
[11:47:36] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[11:47:36] =============== dma-buf-fence (12 subtests) ================
[11:47:36] [PASSED] test_sanitycheck
[11:47:36] [PASSED] test_signaling
[11:47:36] [PASSED] test_add_callback
[11:47:36] [PASSED] test_late_add_callback
[11:47:36] [PASSED] test_rm_callback
[11:47:36] [PASSED] test_late_rm_callback
[11:47:36] [PASSED] test_status
[11:47:36] [PASSED] test_error
[11:47:36] [PASSED] test_wait
[11:47:36] [PASSED] test_wait_timeout
[11:47:36] [PASSED] test_stub
[11:47:36] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[11:47:36] ================== [PASSED] dma-buf-fence ==================
[11:47:36] ============ dma-buf-fence-chain (11 subtests) =============
[11:47:36] [PASSED] test_sanitycheck
[11:47:36] [PASSED] test_find_seqno
[11:47:36] [PASSED] test_find_signaled
[11:47:36] [PASSED] test_find_out_of_order
[11:47:41] [PASSED] test_find_gap
[11:47:41] [PASSED] test_find_race
[11:47:41] [PASSED] test_signal_forward
[11:47:41] [PASSED] test_signal_backward
[11:47:41] [PASSED] test_wait_forward
[11:47:41] [PASSED] test_wait_backward
[11:47:41] [PASSED] test_wait_random
[11:47:41] =============== [PASSED] dma-buf-fence-chain ===============
[11:47:41] ============ dma-buf-fence-unwrap (10 subtests) ============
[11:47:41] [PASSED] test_sanitycheck
[11:47:41] [PASSED] test_unwrap_array
[11:47:41] [PASSED] test_unwrap_chain
[11:47:41] [PASSED] test_unwrap_chain_array
[11:47:41] [PASSED] test_unwrap_merge
[11:47:41] [PASSED] test_unwrap_merge_duplicate
[11:47:41] [PASSED] test_unwrap_merge_seqno
[11:47:41] [PASSED] test_unwrap_merge_order
[11:47:41] [PASSED] test_unwrap_merge_complex
[11:47:41] [PASSED] test_unwrap_merge_complex_seqno
[11:47:41] ============== [PASSED] dma-buf-fence-unwrap ===============
[11:47:41] ================ dma-buf-resv (5 subtests) =================
[11:47:41] [PASSED] test_sanitycheck
[11:47:41] ===================== test_signaling ======================
[11:47:41] [PASSED] kernel
[11:47:41] [PASSED] write
[11:47:41] [PASSED] read
[11:47:41] [PASSED] bookkeep
[11:47:41] ================= [PASSED] test_signaling ==================
[11:47:41] ====================== test_for_each ======================
[11:47:41] [PASSED] kernel
[11:47:41] [PASSED] write
[11:47:41] [PASSED] read
[11:47:41] [PASSED] bookkeep
[11:47:41] ================== [PASSED] test_for_each ==================
[11:47:41] ================= test_for_each_unlocked ==================
[11:47:41] [PASSED] kernel
[11:47:41] [PASSED] write
[11:47:41] [PASSED] read
[11:47:41] [PASSED] bookkeep
[11:47:41] ============= [PASSED] test_for_each_unlocked ==============
[11:47:41] ===================== test_get_fences =====================
[11:47:41] [PASSED] kernel
[11:47:41] [PASSED] write
[11:47:41] [PASSED] read
[11:47:41] [PASSED] bookkeep
[11:47:41] ================= [PASSED] test_get_fences =================
[11:47:41] ================== [PASSED] dma-buf-resv ===================
[11:47:41] ============================================================
[11:47:41] Testing complete. Ran 50 tests: passed: 49, skipped: 1
[11:47:41] Elapsed time: 15.808s total, 1.839s configuring, 8.648s building, 5.271s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 26+ messages in thread* ✗ Xe.CI.BAT: failure for Add memory page offlining support (rev20)
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
` (13 preceding siblings ...)
2026-08-18 11:47 ` ✓ CI.KUnit: success for Add memory page offlining support (rev20) Patchwork
@ 2026-08-18 12:28 ` Patchwork
2026-08-18 12:59 ` [PATCH V17 00/12] Add memory page offlining support Rodrigo Vivi
2026-08-18 13:12 ` ✗ Xe.CI.FULL: failure for Add memory page offlining support (rev20) Patchwork
16 siblings, 0 replies; 26+ messages in thread
From: Patchwork @ 2026-08-18 12:28 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 7981 bytes --]
== Series Details ==
Series: Add memory page offlining support (rev20)
URL : https://patchwork.freedesktop.org/series/161473/
State : failure
== Summary ==
CI Bug Log - changes from xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef_BAT -> xe-pw-161473v20_BAT
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-161473v20_BAT absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-161473v20_BAT, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (12 -> 11)
------------------------------
Additional (1): bat-bmg-2
Missing (2): bat-nvls-2 bat-wcl-1
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-161473v20_BAT:
### IGT changes ###
#### Possible regressions ####
* igt@kms_cursor_legacy@basic-flip-after-cursor-atomic:
- bat-ptl-2: [PASS][1] -> [ABORT][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/bat-ptl-2/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-ptl-2/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
- bat-lnl-1: [PASS][3] -> [ABORT][4]
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/bat-lnl-1/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-lnl-1/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
- bat-bmg-1: [PASS][5] -> [ABORT][6]
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/bat-bmg-1/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-bmg-1/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
- bat-nvls-1: [PASS][7] -> [ABORT][8]
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/bat-nvls-1/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-nvls-1/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
- bat-adlp-7: [PASS][9] -> [ABORT][10]
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/bat-adlp-7/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-adlp-7/igt@kms_cursor_legacy@basic-flip-after-cursor-atomic.html
* igt@sriov_basic@enable-vfs-autoprobe-on:
- bat-ptl-1: [PASS][11] -> [ABORT][12] +1 other test abort
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/bat-ptl-1/igt@sriov_basic@enable-vfs-autoprobe-on.html
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-ptl-1/igt@sriov_basic@enable-vfs-autoprobe-on.html
- bat-wcl-2: [PASS][13] -> [ABORT][14] +1 other test abort
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/bat-wcl-2/igt@sriov_basic@enable-vfs-autoprobe-on.html
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-wcl-2/igt@sriov_basic@enable-vfs-autoprobe-on.html
- bat-bmg-2: NOTRUN -> [ABORT][15] +1 other test abort
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-bmg-2/igt@sriov_basic@enable-vfs-autoprobe-on.html
* igt@sriov_basic@enable-vfs-autoprobe-on@numvfs-1:
- bat-atsm-2: [PASS][16] -> [ABORT][17] +1 other test abort
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/bat-atsm-2/igt@sriov_basic@enable-vfs-autoprobe-on@numvfs-1.html
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-atsm-2/igt@sriov_basic@enable-vfs-autoprobe-on@numvfs-1.html
* igt@xe_ccs@block-copy-compressed@linear-compressed-compfmt0-system-system:
- bat-lnl-2: [PASS][18] -> [ABORT][19] +1 other test abort
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/bat-lnl-2/igt@xe_ccs@block-copy-compressed@linear-compressed-compfmt0-system-system.html
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-lnl-2/igt@xe_ccs@block-copy-compressed@linear-compressed-compfmt0-system-system.html
* igt@xe_create@multigpu-create-massive-size:
- bat-bmg-3: [PASS][20] -> [ABORT][21]
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/bat-bmg-3/igt@xe_create@multigpu-create-massive-size.html
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-bmg-3/igt@xe_create@multigpu-create-massive-size.html
Known issues
------------
Here are the changes found in xe-pw-161473v20_BAT that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@fbdev@nullptr:
- bat-bmg-2: NOTRUN -> [SKIP][22] ([Intel XE#2134]) +4 other tests skip
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-bmg-2/igt@fbdev@nullptr.html
* igt@kms_addfb_basic@addfb25-y-tiled-small-legacy:
- bat-bmg-2: NOTRUN -> [SKIP][23] ([Intel XE#2233])
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-bmg-2/igt@kms_addfb_basic@addfb25-y-tiled-small-legacy.html
* igt@kms_cursor_legacy@basic-flip-after-cursor-legacy:
- bat-bmg-2: NOTRUN -> [SKIP][24] ([Intel XE#2489] / [Intel XE#3419]) +13 other tests skip
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-bmg-2/igt@kms_cursor_legacy@basic-flip-after-cursor-legacy.html
* igt@kms_flip@basic-flip-vs-modeset:
- bat-bmg-2: NOTRUN -> [SKIP][25] ([Intel XE#2482]) +3 other tests skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-bmg-2/igt@kms_flip@basic-flip-vs-modeset.html
* igt@kms_frontbuffer_tracking@basic:
- bat-bmg-2: NOTRUN -> [SKIP][26] ([Intel XE#2434] / [Intel XE#2548] / [Intel XE#6314])
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-bmg-2/igt@kms_frontbuffer_tracking@basic.html
* igt@kms_psr@psr-sprite-plane-onoff:
- bat-bmg-2: NOTRUN -> [SKIP][27] ([Intel XE#2234] / [Intel XE#2850]) +2 other tests skip
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/bat-bmg-2/igt@kms_psr@psr-sprite-plane-onoff.html
[Intel XE#2134]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2134
[Intel XE#2233]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2233
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2434]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2434
[Intel XE#2482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2482
[Intel XE#2489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2489
[Intel XE#2548]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2548
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#3419]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3419
[Intel XE#6314]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6314
Build changes
-------------
* Linux: xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef -> xe-pw-161473v20
IGT_9059: f5a4ff79434df36db1d6b13deb37c90a6602565e @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef: 275df33dcf4c5d018717867a0b29ed1d3b62c1ef
xe-pw-161473v20: 161473v20
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/index.html
[-- Attachment #2: Type: text/html, Size: 8842 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread* Re: [PATCH V17 00/12] Add memory page offlining support
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
` (14 preceding siblings ...)
2026-08-18 12:28 ` ✗ Xe.CI.BAT: failure " Patchwork
@ 2026-08-18 12:59 ` Rodrigo Vivi
2026-08-18 13:24 ` Upadhyay, Tejas
2026-08-18 13:12 ` ✗ Xe.CI.FULL: failure for Add memory page offlining support (rev20) Patchwork
16 siblings, 1 reply; 26+ messages in thread
From: Rodrigo Vivi @ 2026-08-18 12:59 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe, himal.prasad.ghimiray
On Tue, Aug 18, 2026 at 04:10:55PM +0530, Tejas Upadhyay wrote:
> This functionality represents a significant step in making
> the xe driver gracefully handle hardware memory degradation.
> By integrating with the DRM Buddy allocator, the driver
> can permanently "carve out" faulty memory so it isn't reused
> by subsequent allocations.
>
> IGT tests for testing this via injecting simple single address and
> duplicate address fault to unit test functionality:
> https://patchwork.freedesktop.org/patch/740601/
>
> v17:
> - Rebase on drm-tip
> - Enforce CONFIG_FAULT_INJECTION_DEBUG_FS for fault inject
Please stop quickly spinning revisions. That may be counter intuitive,
but fast revision spins might delay the progress.
Also, please ensure that any blocker raised by reviewers in the
previous versions are addressed before sending a new one!
And, it is always a good practice to CC the people that engaged
in previous reviews. Trying to respin without cc'ing them and
without addressing the previous asks or blockers just sound
like you are trying to by-pass the review process.
This series has a big blocker and should not get merged anytime
in this current format. Please go back to the drawing board and
fix the documentation and sync with other components. This is
not getting merged.
Thanks,
Rodrigo.
> v16:
> - Correct sysfs patches with moving code with rcu lock
> - In case purge fail let next alloc decide final failure
> - Remove addr_to_block API, its being pulled from drm-tip
> - Remove some unused code and replace where existing API can be used
> v15:
> - Split few big patches into small
> - Avoid vram_mgr lock in sysfs
> - fix missing queue_pages counter increment
> v14:
> - Solve sashiko reviews
> - Remove SOFT->HARD offline patch, decision is taken based on -EEXIST
> - Dump gpu buddy allocated patch dropped
> v13:
> - Add fault inject and remove standlone debugfs
> v12:
> - Fix Sashiko review comments
> v11:
> - Add BAN reason for UMD to know about offlining
> - Add support for soft offline mode
> - Rebase and remove dummy lockdep annotation patch, as it merged from upstream
> v10:
> - Remove RFC
> v7:
> - Improve debugfs warning messages
> - Use scope_guard for locking(MattB)
> - Adapt addition of queue member of LRC BO(MattB)
> - Extend and use xe_ttm_bo_purge API for vram pages(MattB)
> - Handle dma_buf_map requests for native and remote(MattB)
> - Address if in never initialized block, set block to NULL
> - Add lockdep in gpu buddy (MattB)
> - Correct allocated_addr_to_block logic (MattA)
> V6:
> - Add more specific tests to noncritical bo sections
> - Handle smooth exit of user created exec queues
> - Break code and make purge specific static API
> V5:
> - Sysfs "max_pages" addition
> - Reset block->private NULL post purge
> - Remove wedge, return -EIO to system controller will initiate reset
> - Add debugfs tests to trigger different test scenarios manually and via igt
> - Rename addr_to_tbo to addr_to_block and move under gpu/buddy.c
> V4: API reworks, add configfs for policy reservation and apply config everywhere
> V3: use res_to_mem_region to avoid use of block->private (MattA)
> V2:
> - some fixes and clean up on errors
> - Added xe_vram_addr_to_region helper to avoid other use of block->private(MattB)
>
> Tejas Upadhyay (12):
> drm/xe: Link VRAM object with gpu buddy
> drm/xe: Link LRC BO and its execution Queue
> drm/xe: Extend BO purge to handle vram pages as well
> drm/xe/bo: Make xe_bo_is_user() public
> drm/xe: Guard teardown paths against purged BOs
> drm/xe/vram: Extract buddy alloc and free helpers
> drm/xe/vram: Add page offline data structures and lifecycle
> drm/xe/vram: Add VRAM page offline fault handler
> drm/xe/configfs: Add vram bad page reservation policy
> drm/xe: Add sysfs interface for bad gpu vram pages
> drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN
> drm/xe: Add fault-inject based VRAM page offline injection
>
> drivers/gpu/drm/xe/xe_bo.c | 13 +-
> drivers/gpu/drm/xe/xe_bo.h | 5 +-
> drivers/gpu/drm/xe/xe_bo_types.h | 3 +
> drivers/gpu/drm/xe/xe_configfs.c | 67 ++-
> drivers/gpu/drm/xe/xe_configfs.h | 2 +
> drivers/gpu/drm/xe/xe_debugfs.c | 49 ++
> drivers/gpu/drm/xe/xe_debugfs.h | 2 +
> drivers/gpu/drm/xe/xe_device_sysfs.c | 7 +
> drivers/gpu/drm/xe/xe_dma_buf.c | 3 +
> drivers/gpu/drm/xe/xe_exec_queue.c | 14 +-
> drivers/gpu/drm/xe/xe_exec_queue_types.h | 7 +-
> drivers/gpu/drm/xe/xe_execlist.c | 4 +-
> drivers/gpu/drm/xe/xe_guc_submit.c | 32 +-
> drivers/gpu/drm/xe/xe_lrc.c | 1 +
> drivers/gpu/drm/xe/xe_pt.c | 5 +-
> drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 604 ++++++++++++++++++++-
> drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 3 +
> drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 40 ++
> include/uapi/drm/xe_drm.h | 18 +-
> 19 files changed, 834 insertions(+), 45 deletions(-)
>
> --
> 2.52.0
>
^ permalink raw reply [flat|nested] 26+ messages in thread* RE: [PATCH V17 00/12] Add memory page offlining support
2026-08-18 12:59 ` [PATCH V17 00/12] Add memory page offlining support Rodrigo Vivi
@ 2026-08-18 13:24 ` Upadhyay, Tejas
0 siblings, 0 replies; 26+ messages in thread
From: Upadhyay, Tejas @ 2026-08-18 13:24 UTC (permalink / raw)
To: Vivi, Rodrigo; +Cc: intel-xe@lists.freedesktop.org, Ghimiray, Himal Prasad
> -----Original Message-----
> From: Vivi, Rodrigo <rodrigo.vivi@intel.com>
> Sent: 18 August 2026 18:30
> To: Upadhyay, Tejas <tejas.upadhyay@intel.com>
> Cc: intel-xe@lists.freedesktop.org; Ghimiray, Himal Prasad
> <himal.prasad.ghimiray@intel.com>
> Subject: Re: [PATCH V17 00/12] Add memory page offlining support
>
> On Tue, Aug 18, 2026 at 04:10:55PM +0530, Tejas Upadhyay wrote:
> > This functionality represents a significant step in making the xe
> > driver gracefully handle hardware memory degradation.
> > By integrating with the DRM Buddy allocator, the driver can
> > permanently "carve out" faulty memory so it isn't reused by subsequent
> > allocations.
> >
> > IGT tests for testing this via injecting simple single address and
> > duplicate address fault to unit test functionality:
> > https://patchwork.freedesktop.org/patch/740601/
> >
> > v17:
> > - Rebase on drm-tip
> > - Enforce CONFIG_FAULT_INJECTION_DEBUG_FS for fault inject
>
> Please stop quickly spinning revisions. That may be counter intuitive, but fast
> revision spins might delay the progress.
>
> Also, please ensure that any blocker raised by reviewers in the previous
> versions are addressed before sending a new one!
>
> And, it is always a good practice to CC the people that engaged in previous
> reviews. Trying to respin without cc'ing them and without addressing the
> previous asks or blockers just sound like you are trying to by-pass the review
> process.
>
> This series has a big blocker and should not get merged anytime in this current
> format. Please go back to the drawing board and fix the documentation and
> sync with other components. This is not getting merged.
Hi Rodrigo,
Seems the quick revisions have given wrong impressions about bypassing reviewers comments about the series. The sysfs changes will be only merged after making them compliant with upstream doc and in agreement with other components in their usage , with all reviewers in alignment (same thing I replied in original revision of sysfs during our discussion).
Intention here was to address review comments in other implementation patches and getting them merge ready, implementation patches don't depend on sysfs interfaces, sysfs patch will be merged with compliance and agreement of all reviewers.
If the sysfs patch is giving wrong impressions about bypassing. I will drop the patch from series and spin it separately. But I would like to continue making other patches in series robust and review ready.
Tejas
>
> Thanks,
> Rodrigo.
>
> > v16:
> > - Correct sysfs patches with moving code with rcu lock
> > - In case purge fail let next alloc decide final failure
> > - Remove addr_to_block API, its being pulled from drm-tip
> > - Remove some unused code and replace where existing API can be used
> > v15:
> > - Split few big patches into small
> > - Avoid vram_mgr lock in sysfs
> > - fix missing queue_pages counter increment
> > v14:
> > - Solve sashiko reviews
> > - Remove SOFT->HARD offline patch, decision is taken based on -EEXIST
> > - Dump gpu buddy allocated patch dropped
> > v13:
> > - Add fault inject and remove standlone debugfs
> > v12:
> > - Fix Sashiko review comments
> > v11:
> > - Add BAN reason for UMD to know about offlining
> > - Add support for soft offline mode
> > - Rebase and remove dummy lockdep annotation patch, as it merged from
> > upstream
> > v10:
> > - Remove RFC
> > v7:
> > - Improve debugfs warning messages
> > - Use scope_guard for locking(MattB)
> > - Adapt addition of queue member of LRC BO(MattB)
> > - Extend and use xe_ttm_bo_purge API for vram pages(MattB)
> > - Handle dma_buf_map requests for native and remote(MattB)
> > - Address if in never initialized block, set block to NULL
> > - Add lockdep in gpu buddy (MattB)
> > - Correct allocated_addr_to_block logic (MattA)
> > V6:
> > - Add more specific tests to noncritical bo sections
> > - Handle smooth exit of user created exec queues
> > - Break code and make purge specific static API
> > V5:
> > - Sysfs "max_pages" addition
> > - Reset block->private NULL post purge
> > - Remove wedge, return -EIO to system controller will initiate reset
> > - Add debugfs tests to trigger different test scenarios manually and
> > via igt
> > - Rename addr_to_tbo to addr_to_block and move under gpu/buddy.c
> > V4: API reworks, add configfs for policy reservation and apply config
> > everywhere
> > V3: use res_to_mem_region to avoid use of block->private (MattA)
> > V2:
> > - some fixes and clean up on errors
> > - Added xe_vram_addr_to_region helper to avoid other use of
> > block->private(MattB)
> >
> > Tejas Upadhyay (12):
> > drm/xe: Link VRAM object with gpu buddy
> > drm/xe: Link LRC BO and its execution Queue
> > drm/xe: Extend BO purge to handle vram pages as well
> > drm/xe/bo: Make xe_bo_is_user() public
> > drm/xe: Guard teardown paths against purged BOs
> > drm/xe/vram: Extract buddy alloc and free helpers
> > drm/xe/vram: Add page offline data structures and lifecycle
> > drm/xe/vram: Add VRAM page offline fault handler
> > drm/xe/configfs: Add vram bad page reservation policy
> > drm/xe: Add sysfs interface for bad gpu vram pages
> > drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN
> > drm/xe: Add fault-inject based VRAM page offline injection
> >
> > drivers/gpu/drm/xe/xe_bo.c | 13 +-
> > drivers/gpu/drm/xe/xe_bo.h | 5 +-
> > drivers/gpu/drm/xe/xe_bo_types.h | 3 +
> > drivers/gpu/drm/xe/xe_configfs.c | 67 ++-
> > drivers/gpu/drm/xe/xe_configfs.h | 2 +
> > drivers/gpu/drm/xe/xe_debugfs.c | 49 ++
> > drivers/gpu/drm/xe/xe_debugfs.h | 2 +
> > drivers/gpu/drm/xe/xe_device_sysfs.c | 7 +
> > drivers/gpu/drm/xe/xe_dma_buf.c | 3 +
> > drivers/gpu/drm/xe/xe_exec_queue.c | 14 +-
> > drivers/gpu/drm/xe/xe_exec_queue_types.h | 7 +-
> > drivers/gpu/drm/xe/xe_execlist.c | 4 +-
> > drivers/gpu/drm/xe/xe_guc_submit.c | 32 +-
> > drivers/gpu/drm/xe/xe_lrc.c | 1 +
> > drivers/gpu/drm/xe/xe_pt.c | 5 +-
> > drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 604
> ++++++++++++++++++++-
> > drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 3 +
> > drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 40 ++
> > include/uapi/drm/xe_drm.h | 18 +-
> > 19 files changed, 834 insertions(+), 45 deletions(-)
> >
> > --
> > 2.52.0
> >
^ permalink raw reply [flat|nested] 26+ messages in thread
* ✗ Xe.CI.FULL: failure for Add memory page offlining support (rev20)
2026-08-18 10:40 [PATCH V17 00/12] Add memory page offlining support Tejas Upadhyay
` (15 preceding siblings ...)
2026-08-18 12:59 ` [PATCH V17 00/12] Add memory page offlining support Rodrigo Vivi
@ 2026-08-18 13:12 ` Patchwork
16 siblings, 0 replies; 26+ messages in thread
From: Patchwork @ 2026-08-18 13:12 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 10557 bytes --]
== Series Details ==
Series: Add memory page offlining support (rev20)
URL : https://patchwork.freedesktop.org/series/161473/
State : failure
== Summary ==
CI Bug Log - changes from xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef_FULL -> xe-pw-161473v20_FULL
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-161473v20_FULL absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-161473v20_FULL, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (2 -> 2)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-161473v20_FULL:
### IGT changes ###
#### Possible regressions ####
* igt@kms_async_flips@async-flip-with-page-flip-events-tiled:
- shard-bmg: [PASS][1] -> [ABORT][2] +8 other tests abort
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-bmg-6/igt@kms_async_flips@async-flip-with-page-flip-events-tiled.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-bmg-6/igt@kms_async_flips@async-flip-with-page-flip-events-tiled.html
* igt@xe_exec_sip@invalidinstr-walker-enabled:
- shard-lnl: [PASS][3] -> [ABORT][4] +11 other tests abort
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-5/igt@xe_exec_sip@invalidinstr-walker-enabled.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-7/igt@xe_exec_sip@invalidinstr-walker-enabled.html
#### Warnings ####
* igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-blt:
- shard-bmg: [SKIP][5] ([Intel XE#4141]) -> [ABORT][6]
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-bmg-8/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-blt.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-bmg-1/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-pri-shrfb-draw-blt.html
New tests
---------
New tests have been introduced between xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef_FULL and xe-pw-161473v20_FULL:
### New IGT tests (2) ###
* igt@xe_compute:
- Statuses :
- Exec time: [None] s
* igt@xe_pm:
- Statuses :
- Exec time: [None] s
Known issues
------------
Here are the changes found in xe-pw-161473v20_FULL that come from known issues:
### IGT changes ###
#### Possible fixes ####
* igt@xe_module_load@load:
- shard-lnl: ([PASS][7], [PASS][8], [PASS][9], [PASS][10], [PASS][11], [PASS][12], [PASS][13], [PASS][14], [PASS][15], [PASS][16], [PASS][17], [PASS][18], [PASS][19], [PASS][20], [PASS][21], [PASS][22], [PASS][23], [SKIP][24], [PASS][25], [PASS][26], [PASS][27], [PASS][28], [PASS][29], [PASS][30], [PASS][31], [PASS][32]) ([Intel XE#378] / [Intel XE#7405]) -> ([PASS][33], [PASS][34], [PASS][35], [PASS][36], [PASS][37], [PASS][38], [PASS][39], [PASS][40], [PASS][41], [PASS][42], [PASS][43], [PASS][44], [PASS][45], [PASS][46], [PASS][47], [PASS][48], [PASS][49], [PASS][50], [PASS][51], [PASS][52], [PASS][53], [PASS][54], [PASS][55], [PASS][56], [PASS][57])
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-1/igt@xe_module_load@load.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-3/igt@xe_module_load@load.html
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-3/igt@xe_module_load@load.html
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-3/igt@xe_module_load@load.html
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-8/igt@xe_module_load@load.html
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-4/igt@xe_module_load@load.html
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-3/igt@xe_module_load@load.html
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-8/igt@xe_module_load@load.html
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-2/igt@xe_module_load@load.html
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-2/igt@xe_module_load@load.html
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-2/igt@xe_module_load@load.html
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-4/igt@xe_module_load@load.html
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-1/igt@xe_module_load@load.html
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-8/igt@xe_module_load@load.html
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-4/igt@xe_module_load@load.html
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-7/igt@xe_module_load@load.html
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-7/igt@xe_module_load@load.html
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-1/igt@xe_module_load@load.html
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-7/igt@xe_module_load@load.html
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-5/igt@xe_module_load@load.html
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-5/igt@xe_module_load@load.html
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-5/igt@xe_module_load@load.html
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-6/igt@xe_module_load@load.html
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-6/igt@xe_module_load@load.html
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-6/igt@xe_module_load@load.html
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef/shard-lnl-1/igt@xe_module_load@load.html
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-3/igt@xe_module_load@load.html
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-5/igt@xe_module_load@load.html
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-6/igt@xe_module_load@load.html
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-7/igt@xe_module_load@load.html
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-4/igt@xe_module_load@load.html
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-4/igt@xe_module_load@load.html
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-4/igt@xe_module_load@load.html
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-6/igt@xe_module_load@load.html
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-6/igt@xe_module_load@load.html
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-1/igt@xe_module_load@load.html
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-3/igt@xe_module_load@load.html
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-2/igt@xe_module_load@load.html
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-2/igt@xe_module_load@load.html
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-3/igt@xe_module_load@load.html
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-8/igt@xe_module_load@load.html
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-8/igt@xe_module_load@load.html
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-2/igt@xe_module_load@load.html
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-2/igt@xe_module_load@load.html
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-7/igt@xe_module_load@load.html
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-8/igt@xe_module_load@load.html
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-1/igt@xe_module_load@load.html
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-1/igt@xe_module_load@load.html
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-5/igt@xe_module_load@load.html
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-7/igt@xe_module_load@load.html
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/shard-lnl-5/igt@xe_module_load@load.html
[Intel XE#378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/378
[Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
[Intel XE#7405]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7405
Build changes
-------------
* Linux: xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef -> xe-pw-161473v20
IGT_9059: f5a4ff79434df36db1d6b13deb37c90a6602565e @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-5610-275df33dcf4c5d018717867a0b29ed1d3b62c1ef: 275df33dcf4c5d018717867a0b29ed1d3b62c1ef
xe-pw-161473v20: 161473v20
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v20/index.html
[-- Attachment #2: Type: text/html, Size: 11341 bytes --]
^ permalink raw reply [flat|nested] 26+ messages in thread