* [PATCH V19 01/15] drm/xe: Link VRAM object with gpu buddy
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
@ 2026-08-31 6:49 ` Tejas Upadhyay
2026-08-31 6:49 ` [PATCH V19 02/15] drm/xe: Link LRC BO and its execution Queue Tejas Upadhyay
` (20 subsequent siblings)
21 siblings, 0 replies; 47+ messages in thread
From: Tejas Upadhyay @ 2026-08-31 6:49 UTC (permalink / raw)
To: intel-xe
Cc: himal.prasad.ghimiray, rodrigo.vivi, Tejas Upadhyay, Andi Shyti,
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: Andi Shyti <andi.shyti@linux.intel.com>
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] 47+ messages in thread* [PATCH V19 02/15] drm/xe: Link LRC BO and its execution Queue
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
2026-08-31 6:49 ` [PATCH V19 01/15] drm/xe: Link VRAM object with gpu buddy Tejas Upadhyay
@ 2026-08-31 6:49 ` Tejas Upadhyay
2026-08-31 7:24 ` sashiko-bot
2026-08-31 6:49 ` [PATCH V19 03/15] drm/xe: Export xe_ttm_bo_purge() Tejas Upadhyay
` (19 subsequent siblings)
21 siblings, 1 reply; 47+ messages in thread
From: Tejas Upadhyay @ 2026-08-31 6:49 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, rodrigo.vivi, Tejas Upadhyay, Andi Shyti
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: Andi Shyti <andi.shyti@linux.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_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 c4213bb9c137..91ed6c0fac84 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -387,6 +387,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 25fe9dbc9141..3e1aa0256719 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] 47+ messages in thread* Re: [PATCH V19 02/15] drm/xe: Link LRC BO and its execution Queue
2026-08-31 6:49 ` [PATCH V19 02/15] drm/xe: Link LRC BO and its execution Queue Tejas Upadhyay
@ 2026-08-31 7:24 ` sashiko-bot
0 siblings, 0 replies; 47+ messages in thread
From: sashiko-bot @ 2026-08-31 7:24 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] Flawed synchronization design between LRC BO queue back-pointer reader and queue teardown, potentially leading to use-after-free of queue internals and queue memory.
--
commit 533bbdfdba916103ef324691d9fb513031965dd4
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
drm/xe: Link LRC BO and its execution Queue
To establish a link between an LRC BO and its corresponding execution
Queue, a back-pointer is stored 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.
[ ... ]
> diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c b/drivers/gpu/drm/xe/xe_exec_queue.c
> index c4213bb9c137f..91ed6c0fac84e 100644
> --- a/drivers/gpu/drm/xe/xe_exec_queue.c
> +++ b/drivers/gpu/drm/xe/xe_exec_queue.c
> @@ -387,6 +387,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));
[Severity: High]
Does this code introduce a flawed synchronization design between the LRC BO
queue back-pointer reader and queue teardown, potentially leading to a
use-after-free of queue internals and queue memory?
If a multi-LRC queue creation succeeds for the first LRC (i=0) but fails for a
subsequent one, the error path calls __xe_exec_queue_fini(q) while the queue's
refcount is still 1.
__xe_exec_queue_fini(q) destroys backend structures before dropping LRC
references (which would clear bo->q via xe_lrc_finish()):
drivers/gpu/drm/xe/xe_exec_queue.c:__xe_exec_queue_fini() {
...
q->ops->fini(q);
for (i = 0; i < q->width; ++i)
xe_lrc_put(q->lrc[i]);
...
}
Because the backend structures are destroyed before the back-pointer is cleared,
there is a window where bo->q points to a partially destroyed queue.
Concurrently, if a VRAM page offline or memory shrinker (in xe_ttm_vram_mgr.c)
locks the first LRC's BO, reads bo->q, and successfully takes a reference
(xe_exec_queue_get_unless_zero(q) succeeds because refcount=1), the reader
could then call xe_exec_queue_kill(q). This would access already-freed
backend structures (e.g., q->guc->sched).
Additionally, looking at the error path for xe_exec_queue_create(), the code
forcefully frees the queue memory without checking if a concurrent reader via
bo->q has elevated the refcount:
drivers/gpu/drm/xe/xe_exec_queue.c:xe_exec_queue_create() {
...
err_post_init:
__xe_exec_queue_fini(q);
err_post_alloc:
__xe_exec_queue_free(q);
return ERR_PTR(err);
}
Can this lead to a use-after-free of the queue memory itself when the
concurrent reader later uses or puts the queue?
> xe_exec_queue_set_lrc(q, lrc, i);
>
> if (__lrc)
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260831064942.315720-17-tejas.upadhyay@intel.com?part=2
^ permalink raw reply [flat|nested] 47+ messages in thread
* [PATCH V19 03/15] drm/xe: Export xe_ttm_bo_purge()
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
2026-08-31 6:49 ` [PATCH V19 01/15] drm/xe: Link VRAM object with gpu buddy Tejas Upadhyay
2026-08-31 6:49 ` [PATCH V19 02/15] drm/xe: Link LRC BO and its execution Queue Tejas Upadhyay
@ 2026-08-31 6:49 ` Tejas Upadhyay
2026-09-02 0:33 ` Matthew Brost
2026-08-31 6:49 ` [PATCH V19 04/15] drm/xe: Handle NULL resource and allow purging of VRAM pages Tejas Upadhyay
` (18 subsequent siblings)
21 siblings, 1 reply; 47+ messages in thread
From: Tejas Upadhyay @ 2026-08-31 6:49 UTC (permalink / raw)
To: intel-xe
Cc: himal.prasad.ghimiray, rodrigo.vivi, Tejas Upadhyay, Andi Shyti,
Arvind Yadav
Remove the static qualifier from xe_ttm_bo_purge() and add its
prototype to xe_bo.h. This allows the function to be called
from other parts of the driver outside of xe_bo.c, specifically
needed for the memory page offline feature.
Cc: Andi Shyti <andi.shyti@linux.intel.com>
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 | 2 +-
drivers/gpu/drm/xe/xe_bo.h | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index dde309821237..8f93e09e51bb 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 = {};
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] 47+ messages in thread* Re: [PATCH V19 03/15] drm/xe: Export xe_ttm_bo_purge()
2026-08-31 6:49 ` [PATCH V19 03/15] drm/xe: Export xe_ttm_bo_purge() Tejas Upadhyay
@ 2026-09-02 0:33 ` Matthew Brost
0 siblings, 0 replies; 47+ messages in thread
From: Matthew Brost @ 2026-09-02 0:33 UTC (permalink / raw)
To: Tejas Upadhyay
Cc: intel-xe, himal.prasad.ghimiray, rodrigo.vivi, Andi Shyti,
Arvind Yadav
On Mon, Aug 31, 2026 at 12:19:45PM +0530, Tejas Upadhyay wrote:
> Remove the static qualifier from xe_ttm_bo_purge() and add its
> prototype to xe_bo.h. This allows the function to be called
> from other parts of the driver outside of xe_bo.c, specifically
> needed for the memory page offline feature.
>
> Cc: Andi Shyti <andi.shyti@linux.intel.com>
> Reviewed-by: Arvind Yadav <arvind.yadav@intel.com>
> 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_bo.c | 2 +-
> drivers/gpu/drm/xe/xe_bo.h | 1 +
> 2 files changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
> index dde309821237..8f93e09e51bb 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 = {};
> 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 [flat|nested] 47+ messages in thread
* [PATCH V19 04/15] drm/xe: Handle NULL resource and allow purging of VRAM pages
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (2 preceding siblings ...)
2026-08-31 6:49 ` [PATCH V19 03/15] drm/xe: Export xe_ttm_bo_purge() Tejas Upadhyay
@ 2026-08-31 6:49 ` Tejas Upadhyay
2026-08-31 6:52 ` Ghimiray, Himal Prasad
2026-08-31 7:42 ` sashiko-bot
2026-08-31 6:49 ` [PATCH V19 05/15] drm/xe/bo: Make xe_bo_is_user() public Tejas Upadhyay
` (17 subsequent siblings)
21 siblings, 2 replies; 47+ messages in thread
From: Tejas Upadhyay @ 2026-08-31 6:49 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, rodrigo.vivi, Tejas Upadhyay, Andi Shyti
Add NULL checks for the buffer object's resource pointer in
xe_bo_is_vram() and xe_bo_is_stolen() to prevent potential NULL
pointer dereferences when checking memory location during page
offlining.
Additionally, remove the `!ttm_bo->ttm` check from
xe_ttm_bo_purge(). This restriction is stripped away to
explicitly allow the driver to purge VRAM pages during the
memory page offline sequence.
v2(Sashiko):
- Split export and this patch also Check NULL res in
xe_bo_is_vram() and xe_bo_is_stolen()
Cc: Andi Shyti <andi.shyti@linux.intel.com>
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_bo.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index 8f93e09e51bb..d30a8411d2a3 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -104,13 +104,16 @@ static bool resource_is_vram(struct ttm_resource *res)
bool xe_bo_is_vram(struct xe_bo *bo)
{
- return resource_is_vram(bo->ttm.resource) ||
- resource_is_stolen_vram(xe_bo_device(bo), bo->ttm.resource);
+ struct ttm_resource *res = bo->ttm.resource;
+
+ return res && (resource_is_vram(res) || resource_is_stolen_vram(xe_bo_device(bo), res));
}
bool xe_bo_is_stolen(struct xe_bo *bo)
{
- return bo->ttm.resource->mem_type == XE_PL_STOLEN;
+ struct ttm_resource *res = bo->ttm.resource;
+
+ return res && res->mem_type == XE_PL_STOLEN;
}
/**
@@ -929,9 +932,6 @@ int xe_ttm_bo_purge(struct ttm_buffer_object *ttm_bo, struct ttm_operation_ctx *
xe_bo_assert_held(bo);
- if (!ttm_bo->ttm)
- return 0;
-
if (!xe_bo_madv_is_dontneed(bo))
return 0;
--
2.52.0
^ permalink raw reply related [flat|nested] 47+ messages in thread* Re: [PATCH V19 04/15] drm/xe: Handle NULL resource and allow purging of VRAM pages
2026-08-31 6:49 ` [PATCH V19 04/15] drm/xe: Handle NULL resource and allow purging of VRAM pages Tejas Upadhyay
@ 2026-08-31 6:52 ` Ghimiray, Himal Prasad
2026-08-31 7:42 ` sashiko-bot
1 sibling, 0 replies; 47+ messages in thread
From: Ghimiray, Himal Prasad @ 2026-08-31 6:52 UTC (permalink / raw)
To: Tejas Upadhyay, intel-xe; +Cc: rodrigo.vivi, Andi Shyti
On 31-08-2026 12:19, Tejas Upadhyay wrote:
> Add NULL checks for the buffer object's resource pointer in
> xe_bo_is_vram() and xe_bo_is_stolen() to prevent potential NULL
> pointer dereferences when checking memory location during page
> offlining.
>
> Additionally, remove the `!ttm_bo->ttm` check from
> xe_ttm_bo_purge(). This restriction is stripped away to
> explicitly allow the driver to purge VRAM pages during the
> memory page offline sequence.
>
> v2(Sashiko):
> - Split export and this patch also Check NULL res in
> xe_bo_is_vram() and xe_bo_is_stolen()
>
> Cc: Andi Shyti <andi.shyti@linux.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 | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
> index 8f93e09e51bb..d30a8411d2a3 100644
> --- a/drivers/gpu/drm/xe/xe_bo.c
> +++ b/drivers/gpu/drm/xe/xe_bo.c
> @@ -104,13 +104,16 @@ static bool resource_is_vram(struct ttm_resource *res)
>
> bool xe_bo_is_vram(struct xe_bo *bo)
> {
> - return resource_is_vram(bo->ttm.resource) ||
> - resource_is_stolen_vram(xe_bo_device(bo), bo->ttm.resource);
> + struct ttm_resource *res = bo->ttm.resource;
> +
> + return res && (resource_is_vram(res) || resource_is_stolen_vram(xe_bo_device(bo), res));
> }
>
> bool xe_bo_is_stolen(struct xe_bo *bo)
> {
> - return bo->ttm.resource->mem_type == XE_PL_STOLEN;
> + struct ttm_resource *res = bo->ttm.resource;
> +
> + return res && res->mem_type == XE_PL_STOLEN;
> }
>
> /**
> @@ -929,9 +932,6 @@ int xe_ttm_bo_purge(struct ttm_buffer_object *ttm_bo, struct ttm_operation_ctx *
>
> xe_bo_assert_held(bo);
>
> - if (!ttm_bo->ttm)
> - return 0;
> -
> if (!xe_bo_madv_is_dontneed(bo))
> return 0;
>
^ permalink raw reply [flat|nested] 47+ messages in thread* Re: [PATCH V19 04/15] drm/xe: Handle NULL resource and allow purging of VRAM pages
2026-08-31 6:49 ` [PATCH V19 04/15] drm/xe: Handle NULL resource and allow purging of VRAM pages Tejas Upadhyay
2026-08-31 6:52 ` Ghimiray, Himal Prasad
@ 2026-08-31 7:42 ` sashiko-bot
1 sibling, 0 replies; 47+ messages in thread
From: sashiko-bot @ 2026-08-31 7:42 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] Kernel crash in xe_vm_snapshot_capture() when capturing a VM containing a purged BO.
--
commit 695b3991e4560b777497e2ae90e478f459a620d0
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
drm/xe: Handle NULL resource and allow purging of VRAM pages
This commit adds NULL checks for the buffer object's resource pointer in
xe_bo_is_vram() and xe_bo_is_stolen(). It also removes the check that
prevented purging when ttm_bo->ttm is NULL from xe_ttm_bo_purge(),
explicitly allowing VRAM pages to be purged during memory page offlining.
> diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
> index 8f93e09e51bb8..d30a8411d2a33 100644
> --- a/drivers/gpu/drm/xe/xe_bo.c
> +++ b/drivers/gpu/drm/xe/xe_bo.c
[ ... ]
> @@ -929,9 +932,6 @@ int xe_ttm_bo_purge(struct ttm_buffer_object *ttm_bo, struct ttm_operation_ctx *
>
> xe_bo_assert_held(bo);
>
> - if (!ttm_bo->ttm)
> - return 0;
> -
[Severity: High]
This is a pre-existing issue, but now that this patch series enables purging
for VRAM BOs, does this expose a kernel panic during devcoredump capture?
When a BO is marked DONTNEED and purged, its ttm.resource is freed and set
to NULL. If a GPU hang later occurs in the VM where this purged BO is still
mapped, the devcoredump handler in xe_vm_snapshot_capture() iterates over
the VM's VMAs and accesses the memory type unconditionally:
drivers/gpu/drm/xe/xe_vm.c:xe_vm_snapshot_capture() {
...
switch (bo->ttm.resource->mem_type) {
case XE_PL_SYSTEM:
...
}
Because bo->ttm.resource is NULL for purged BOs, this causes a NULL pointer
dereference and crashes the kernel. This can potentially be triggered by
unprivileged userspace to cause a Denial of Service.
Could we add a NULL check in xe_vm_snapshot_capture() before attempting to
access mem_type, similar to the defensive checks added to xe_bo_is_vram()
in this patch?
> if (!xe_bo_madv_is_dontneed(bo))
> return 0;
>
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260831064942.315720-17-tejas.upadhyay@intel.com?part=4
^ permalink raw reply [flat|nested] 47+ messages in thread
* [PATCH V19 05/15] drm/xe/bo: Make xe_bo_is_user() public
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (3 preceding siblings ...)
2026-08-31 6:49 ` [PATCH V19 04/15] drm/xe: Handle NULL resource and allow purging of VRAM pages Tejas Upadhyay
@ 2026-08-31 6:49 ` Tejas Upadhyay
2026-08-31 6:49 ` [PATCH V19 06/15] drm/xe: Guard teardown paths against purged BOs Tejas Upadhyay
` (16 subsequent siblings)
21 siblings, 0 replies; 47+ messages in thread
From: Tejas Upadhyay @ 2026-08-31 6:49 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, rodrigo.vivi, Tejas Upadhyay, Andi Shyti
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: Andi Shyti <andi.shyti@linux.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 | 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 d30a8411d2a3..c255327669da 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -161,7 +161,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] 47+ messages in thread* [PATCH V19 06/15] drm/xe: Guard teardown paths against purged BOs
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (4 preceding siblings ...)
2026-08-31 6:49 ` [PATCH V19 05/15] drm/xe/bo: Make xe_bo_is_user() public Tejas Upadhyay
@ 2026-08-31 6:49 ` Tejas Upadhyay
2026-08-31 6:53 ` Ghimiray, Himal Prasad
2026-08-31 8:03 ` sashiko-bot
2026-08-31 6:49 ` [PATCH V19 07/15] drm/xe/vram: Extract buddy alloc and free helpers Tejas Upadhyay
` (15 subsequent siblings)
21 siblings, 2 replies; 47+ messages in thread
From: Tejas Upadhyay @ 2026-08-31 6:49 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, rodrigo.vivi, 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
v4(Sashiko):
- Move bo purge check in xe_bo_unpin() to handle all instances
v3(Sashiko):
- Remove dma_resv is already held
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.c | 3 +++
drivers/gpu/drm/xe/xe_dma_buf.c | 3 +++
drivers/gpu/drm/xe/xe_exec_queue.c | 8 ++++++--
3 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index c255327669da..b162753cebb7 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -3267,6 +3267,9 @@ void xe_bo_unpin(struct xe_bo *bo)
struct ttm_place *place = &bo->placements[0];
struct xe_device *xe = xe_bo_device(bo);
+ if (xe_bo_is_purged(bo))
+ return;
+
xe_assert(xe, !bo->ttm.base.import_attach);
xe_assert(xe, xe_bo_is_pinned(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 91ed6c0fac84..91e4f3cb5617 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -1572,8 +1572,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);
}
--
2.52.0
^ permalink raw reply related [flat|nested] 47+ messages in thread* Re: [PATCH V19 06/15] drm/xe: Guard teardown paths against purged BOs
2026-08-31 6:49 ` [PATCH V19 06/15] drm/xe: Guard teardown paths against purged BOs Tejas Upadhyay
@ 2026-08-31 6:53 ` Ghimiray, Himal Prasad
2026-08-31 8:03 ` sashiko-bot
1 sibling, 0 replies; 47+ messages in thread
From: Ghimiray, Himal Prasad @ 2026-08-31 6:53 UTC (permalink / raw)
To: Tejas Upadhyay, intel-xe; +Cc: rodrigo.vivi
On 31-08-2026 12:19, Tejas Upadhyay wrote:
> 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
>
> v4(Sashiko):
> - Move bo purge check in xe_bo_unpin() to handle all instances
> v3(Sashiko):
> - Remove dma_resv is already held
> v2(Himal):
> - take dma_resv lock before calling xe_bo_is_purged()
>
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 | 3 +++
> drivers/gpu/drm/xe/xe_dma_buf.c | 3 +++
> drivers/gpu/drm/xe/xe_exec_queue.c | 8 ++++++--
> 3 files changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
> index c255327669da..b162753cebb7 100644
> --- a/drivers/gpu/drm/xe/xe_bo.c
> +++ b/drivers/gpu/drm/xe/xe_bo.c
> @@ -3267,6 +3267,9 @@ void xe_bo_unpin(struct xe_bo *bo)
> struct ttm_place *place = &bo->placements[0];
> struct xe_device *xe = xe_bo_device(bo);
>
> + if (xe_bo_is_purged(bo))
> + return;
> +
> xe_assert(xe, !bo->ttm.base.import_attach);
> xe_assert(xe, xe_bo_is_pinned(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 91ed6c0fac84..91e4f3cb5617 100644
> --- a/drivers/gpu/drm/xe/xe_exec_queue.c
> +++ b/drivers/gpu/drm/xe/xe_exec_queue.c
> @@ -1572,8 +1572,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);
> }
^ permalink raw reply [flat|nested] 47+ messages in thread* Re: [PATCH V19 06/15] drm/xe: Guard teardown paths against purged BOs
2026-08-31 6:49 ` [PATCH V19 06/15] drm/xe: Guard teardown paths against purged BOs Tejas Upadhyay
2026-08-31 6:53 ` Ghimiray, Himal Prasad
@ 2026-08-31 8:03 ` sashiko-bot
2026-09-01 5:05 ` Upadhyay, Tejas
1 sibling, 1 reply; 47+ messages in thread
From: sashiko-bot @ 2026-08-31 8:03 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] `xe_bo_unpin_external()` lacks the `xe_bo_is_purged()` check, leading to pin count underflow for DMA-buf exported BOs.
--
commit b0d5d3f21885703ffe281bfc361768a0213d2668
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
drm/xe: Guard teardown paths against purged BOs
This commit adds xe_bo_is_purged() guards in several teardown paths
to prevent unpinning or mapping a buffer object that was already purged
by VRAM page offlining.
> diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
> index c255327669da5..b162753cebb70 100644
> --- a/drivers/gpu/drm/xe/xe_bo.c
> +++ b/drivers/gpu/drm/xe/xe_bo.c
> @@ -3267,6 +3267,9 @@ void xe_bo_unpin(struct xe_bo *bo)
> struct ttm_place *place = &bo->placements[0];
> struct xe_device *xe = xe_bo_device(bo);
>
> + if (xe_bo_is_purged(bo))
> + return;
> +
[Severity: High]
Does xe_bo_unpin_external() also need this xe_bo_is_purged() check?
If a user BO is exported via DMA-buf, the VRAM page offline mechanism
can queue it for offlining. If the DMA-buf importer pins the BO, the
pin count increments. When the VRAM offline worker processes the queue,
it forcefully unpins and purges the BO, leaving the pin count at 0.
When the importer later unpins the BO, it triggers xe_dma_buf_unpin()
which calls xe_bo_unpin_external():
static void xe_dma_buf_unpin(struct dma_buf_attachment *attach)
{
struct drm_gem_object *obj = attach->dmabuf->priv;
struct xe_bo *bo = gem_to_xe_bo(obj);
xe_bo_unpin_external(bo);
}
Since xe_bo_unpin_external() lacks the xe_bo_is_purged() guard, it
will call ttm_bo_unpin() unconditionally. Could this cause a pin count
underflow on the TTM BO and make the BO permanently un-evictable?
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260831064942.315720-17-tejas.upadhyay@intel.com?part=6
^ permalink raw reply [flat|nested] 47+ messages in thread* RE: [PATCH V19 06/15] drm/xe: Guard teardown paths against purged BOs
2026-08-31 8:03 ` sashiko-bot
@ 2026-09-01 5:05 ` Upadhyay, Tejas
0 siblings, 0 replies; 47+ messages in thread
From: Upadhyay, Tejas @ 2026-09-01 5:05 UTC (permalink / raw)
To: sashiko-reviews@lists.linux.dev; +Cc: intel-xe@lists.freedesktop.org
> -----Original Message-----
> From: sashiko-bot@kernel.org <sashiko-bot@kernel.org>
> Sent: 31 August 2026 13:34
> To: Upadhyay, Tejas <tejas.upadhyay@intel.com>
> Cc: intel-xe@lists.freedesktop.org
> Subject: Re: [PATCH V19 06/15] drm/xe: Guard teardown paths against
> purged BOs
>
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s)
> to consider:
> - [High] `xe_bo_unpin_external()` lacks the `xe_bo_is_purged()` check, leading
> to pin count underflow for DMA-buf exported BOs.
> --
>
> commit b0d5d3f21885703ffe281bfc361768a0213d2668
> Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
>
> drm/xe: Guard teardown paths against purged BOs
>
> This commit adds xe_bo_is_purged() guards in several teardown paths to
> prevent unpinning or mapping a buffer object that was already purged by
> VRAM page offlining.
>
> > diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
> > index c255327669da5..b162753cebb70 100644
> > --- a/drivers/gpu/drm/xe/xe_bo.c
> > +++ b/drivers/gpu/drm/xe/xe_bo.c
> > @@ -3267,6 +3267,9 @@ void xe_bo_unpin(struct xe_bo *bo)
> > struct ttm_place *place = &bo->placements[0];
> > struct xe_device *xe = xe_bo_device(bo);
> >
> > + if (xe_bo_is_purged(bo))
> > + return;
> > +
>
> [Severity: High]
> Does xe_bo_unpin_external() also need this xe_bo_is_purged() check?
>
> If a user BO is exported via DMA-buf, the VRAM page offline mechanism can
> queue it for offlining. If the DMA-buf importer pins the BO, the pin count
> increments. When the VRAM offline worker processes the queue, it forcefully
> unpins and purges the BO, leaving the pin count at 0.
>
> When the importer later unpins the BO, it triggers xe_dma_buf_unpin() which
> calls xe_bo_unpin_external():
>
> static void xe_dma_buf_unpin(struct dma_buf_attachment *attach) {
> struct drm_gem_object *obj = attach->dmabuf->priv;
> struct xe_bo *bo = gem_to_xe_bo(obj);
>
> xe_bo_unpin_external(bo);
> }
>
> Since xe_bo_unpin_external() lacks the xe_bo_is_purged() guard, it will call
> ttm_bo_unpin() unconditionally. Could this cause a pin count underflow on
> the TTM BO and make the BO permanently un-evictable?
xe_bo_pin/unpin_external() is only called on exported BOs, we do SBR considering it critical BO, so this should not hit/matter as per current understanding.
Tejas
>
> [ ... ]
>
> --
> Sashiko AI review ·
> https://sashiko.dev/#/patchset/20260831064942.315720-17-
> tejas.upadhyay@intel.com?part=6
^ permalink raw reply [flat|nested] 47+ messages in thread
* [PATCH V19 07/15] drm/xe/vram: Extract buddy alloc and free helpers
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (5 preceding siblings ...)
2026-08-31 6:49 ` [PATCH V19 06/15] drm/xe: Guard teardown paths against purged BOs Tejas Upadhyay
@ 2026-08-31 6:49 ` Tejas Upadhyay
2026-08-31 8:08 ` sashiko-bot
2026-08-31 6:49 ` [PATCH V19 08/15] drm/xe/vram: Add page offline data structures and lifecycle Tejas Upadhyay
` (14 subsequent siblings)
21 siblings, 1 reply; 47+ messages in thread
From: Tejas Upadhyay @ 2026-08-31 6:49 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, rodrigo.vivi, Tejas Upadhyay, Andi Shyti
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: Andi Shyti <andi.shyti@linux.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_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] 47+ messages in thread* Re: [PATCH V19 07/15] drm/xe/vram: Extract buddy alloc and free helpers
2026-08-31 6:49 ` [PATCH V19 07/15] drm/xe/vram: Extract buddy alloc and free helpers Tejas Upadhyay
@ 2026-08-31 8:08 ` sashiko-bot
2026-09-01 5:10 ` Upadhyay, Tejas
0 siblings, 1 reply; 47+ messages in thread
From: sashiko-bot @ 2026-08-31 8:08 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] Uninitialized output parameter `used_visible` in `xe_ttm_vram_buddy_alloc()`.
--
commit 9483caeb9aea9c04580bdd071e565c0158f680fa
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
drm/xe/vram: Extract buddy alloc and free helpers
This commit factors out block allocation and freeing into reusable helpers
xe_ttm_vram_buddy_alloc() and xe_ttm_vram_buddy_free(). These helpers
consolidate block allocation with visible-size tracking for upcoming VRAM
page offline reservation paths.
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> index 51e983ee3bad4..16ecea4977809 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
[ ... ]
> +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)
> +{
[ ... ]
> + 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;
[Severity: Medium]
Does this accumulate into an uninitialized variable?
In this else branch, *used_visible is incremented via += without being
explicitly zeroed first. If a caller does not explicitly initialize the
memory pointed to by used_visible before calling xe_ttm_vram_buddy_alloc(),
this will accumulate garbage values and corrupt the VRAM visible memory
accounting in mgr->visible_avail.
While current callers seem to pass pointers to zero-allocated memory,
could *used_visible be explicitly initialized to 0 before the loop to
prevent a trap for future callers?
> + }
> + }
> + }
> +
> + mgr->visible_avail -= *used_visible;
> + return 0;
> +}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260831064942.315720-17-tejas.upadhyay@intel.com?part=7
^ permalink raw reply [flat|nested] 47+ messages in thread* RE: [PATCH V19 07/15] drm/xe/vram: Extract buddy alloc and free helpers
2026-08-31 8:08 ` sashiko-bot
@ 2026-09-01 5:10 ` Upadhyay, Tejas
0 siblings, 0 replies; 47+ messages in thread
From: Upadhyay, Tejas @ 2026-09-01 5:10 UTC (permalink / raw)
To: sashiko-reviews@lists.linux.dev; +Cc: intel-xe@lists.freedesktop.org
> -----Original Message-----
> From: sashiko-bot@kernel.org <sashiko-bot@kernel.org>
> Sent: 31 August 2026 13:39
> To: Upadhyay, Tejas <tejas.upadhyay@intel.com>
> Cc: intel-xe@lists.freedesktop.org
> Subject: Re: [PATCH V19 07/15] drm/xe/vram: Extract buddy alloc and free
> helpers
>
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s)
> to consider:
> - [Medium] Uninitialized output parameter `used_visible` in
> `xe_ttm_vram_buddy_alloc()`.
> --
>
> commit 9483caeb9aea9c04580bdd071e565c0158f680fa
> Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
>
> drm/xe/vram: Extract buddy alloc and free helpers
>
> This commit factors out block allocation and freeing into reusable helpers
> xe_ttm_vram_buddy_alloc() and xe_ttm_vram_buddy_free(). These helpers
> consolidate block allocation with visible-size tracking for upcoming VRAM page
> offline reservation paths.
>
> > diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > index 51e983ee3bad4..16ecea4977809 100644
> > --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> [ ... ]
> > +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) {
> [ ... ]
> > + 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;
>
> [Severity: Medium]
> Does this accumulate into an uninitialized variable?
>
> In this else branch, *used_visible is incremented via += without being explicitly
> zeroed first. If a caller does not explicitly initialize the memory pointed to by
> used_visible before calling xe_ttm_vram_buddy_alloc(), this will accumulate
> garbage values and corrupt the VRAM visible memory accounting in mgr-
> >visible_avail.
>
> While current callers seem to pass pointers to zero-allocated memory, could
> *used_visible be explicitly initialized to 0 before the loop to prevent a trap for
> future callers?
Don’t see this as issue, see below :
Caller 1 (xe_ttm_vram_mgr_new): vres is allocated with kzalloc_obj() → vres->used_visible_size is zero-initialized.
Caller 2 & 3 (page offline): nentry comes from kzalloc (or similar) → nentry->used_visible_size is also zero-initialized.
Tejas
>
> > + }
> > + }
> > + }
> > +
> > + mgr->visible_avail -= *used_visible;
> > + return 0;
> > +}
>
> --
> Sashiko AI review ·
> https://sashiko.dev/#/patchset/20260831064942.315720-17-
> tejas.upadhyay@intel.com?part=7
^ permalink raw reply [flat|nested] 47+ messages in thread
* [PATCH V19 08/15] drm/xe/vram: Add page offline data structures and lifecycle
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (6 preceding siblings ...)
2026-08-31 6:49 ` [PATCH V19 07/15] drm/xe/vram: Extract buddy alloc and free helpers Tejas Upadhyay
@ 2026-08-31 6:49 ` Tejas Upadhyay
2026-08-31 6:49 ` [PATCH V19 09/15] drm/xe/vram: Add VRAM page offline fault handler Tejas Upadhyay
` (13 subsequent siblings)
21 siblings, 0 replies; 47+ messages in thread
From: Tejas Upadhyay @ 2026-08-31 6:49 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, rodrigo.vivi, Tejas Upadhyay, Andi Shyti
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.
v3(Sashiko):
- Reorder xe_ttm_vram_buddy_free and list_del_rcu
- Introduce reservation status
v2(Himal):
- Address possible leak in xe_ttm_vram_mgr_fini()
- Remove unused dev and add comment for used_visible_size 0
Reviewed-by: Andi Shyti <andi.shyti@linux.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_ttm_vram_mgr.c | 25 ++++++++++++++
drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 38 ++++++++++++++++++++++
2 files changed, 63 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..1253989a8d06 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) {
+ list_del_rcu(&pos->offlined_link);
+ xe_ttm_vram_buddy_free(mgr, &pos->blocks, pos->used_visible_size);
+ --mgr->n_offlined_pages;
+ kfree_rcu(pos, rcu);
+ }
+ list_for_each_entry_safe(pos, n, &mgr->queued_pages, queued_link) {
+ list_del_rcu(&pos->queued_link);
+ /* queued entries have no buddy reservation yet */
+ xe_ttm_vram_buddy_free(mgr, &pos->blocks, 0);
+ --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..dc97b0ad0e51 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,34 @@ 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
+ */
+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: buddy reservation status */
+ enum xe_page_reserve_status status;
+ /** @rcu: RCU head for deferred freeing */
+ struct rcu_head rcu;
+};
+
#endif
--
2.52.0
^ permalink raw reply related [flat|nested] 47+ messages in thread* [PATCH V19 09/15] drm/xe/vram: Add VRAM page offline fault handler
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (7 preceding siblings ...)
2026-08-31 6:49 ` [PATCH V19 08/15] drm/xe/vram: Add page offline data structures and lifecycle Tejas Upadhyay
@ 2026-08-31 6:49 ` Tejas Upadhyay
2026-08-31 6:57 ` Ghimiray, Himal Prasad
2026-08-31 8:37 ` sashiko-bot
2026-08-31 6:49 ` [PATCH V19 10/15] drm/xe/configfs: Add disable_vram_page_offline attribute Tejas Upadhyay
` (12 subsequent siblings)
21 siblings, 2 replies; 47+ messages in thread
From: Tejas Upadhyay @ 2026-08-31 6:49 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, rodrigo.vivi, 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 corresponding
VRAM region. Checks if the address falls within usable space,
or infrastructure zones (CCS, GSM, DSM) where it returns NULL
to flag a reset path. If the target address is outside any
known region returns ERR_PTR(-EOPNOTSUPP)
- 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.
v13(Himal):
- Remove redundant code
v12(Sashiko):
- Handle multi tile and add assert for 4K align
- Remove unaligned action comment for ENXIO
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 | 266 +++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 1 +
2 files changed, 267 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 1253989a8d06..e5994c14487d 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,263 @@ 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 *pos, *n;
+ 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;
+ }
+ }
+ /* Queue both free and occupied (to-be-purged) pages */
+ ++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_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);
+ }
+
+ 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;
+ }
+ }
+ ++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)
+{
+ struct xe_tile *tile;
+ u8 id;
+
+ for_each_tile(tile, xe, id) {
+ struct xe_vram_region *vr = tile->mem.vram;
+
+ if (!vr)
+ continue;
+
+ if (addr >= vr->dpa_base && addr < (vr->dpa_base + vr->usable_size))
+ return vr;
+
+ /* CCS, GSM, or DSM — infrastructure zone, needs reset */
+ if (addr >= (vr->dpa_base + vr->usable_size) &&
+ addr < (vr->dpa_base + vr->actual_physical_size))
+ return NULL;
+ }
+
+ /*
+ * 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; no further action.
+ * * %-EEXIST - address already processed; no further action.
+ */
+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;
+
+ /* Assert that the address is 4K aligned */
+ if (WARN_ON_ONCE(!IS_ALIGNED(addr, SZ_4K))) {
+ drm_err(&xe->drm, "Address %llx is not 4K aligned!\n", addr);
+ return -EINVAL;
+ }
+
+ 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)
{
--
2.52.0
^ permalink raw reply related [flat|nested] 47+ messages in thread* Re: [PATCH V19 09/15] drm/xe/vram: Add VRAM page offline fault handler
2026-08-31 6:49 ` [PATCH V19 09/15] drm/xe/vram: Add VRAM page offline fault handler Tejas Upadhyay
@ 2026-08-31 6:57 ` Ghimiray, Himal Prasad
2026-08-31 8:37 ` sashiko-bot
1 sibling, 0 replies; 47+ messages in thread
From: Ghimiray, Himal Prasad @ 2026-08-31 6:57 UTC (permalink / raw)
To: Tejas Upadhyay, intel-xe; +Cc: rodrigo.vivi
On 31-08-2026 12:19, Tejas Upadhyay wrote:
> 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 corresponding
> VRAM region. Checks if the address falls within usable space,
> or infrastructure zones (CCS, GSM, DSM) where it returns NULL
> to flag a reset path. If the target address is outside any
> known region returns ERR_PTR(-EOPNOTSUPP)
>
> - 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.
>
> v13(Himal):
> - Remove redundant code
> v12(Sashiko):
> - Handle multi tile and add assert for 4K align
> - Remove unaligned action comment for ENXIO
> 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
>
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 | 266 +++++++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 1 +
> 2 files changed, 267 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> index 1253989a8d06..e5994c14487d 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,263 @@ 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 *pos, *n;
> + 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;
> + }
> + }
> + /* Queue both free and occupied (to-be-purged) pages */
> + ++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_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);
> + }
> +
> + 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;
> + }
> + }
> + ++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)
> +{
> + struct xe_tile *tile;
> + u8 id;
> +
> + for_each_tile(tile, xe, id) {
> + struct xe_vram_region *vr = tile->mem.vram;
> +
> + if (!vr)
> + continue;
> +
> + if (addr >= vr->dpa_base && addr < (vr->dpa_base + vr->usable_size))
> + return vr;
> +
> + /* CCS, GSM, or DSM — infrastructure zone, needs reset */
> + if (addr >= (vr->dpa_base + vr->usable_size) &&
> + addr < (vr->dpa_base + vr->actual_physical_size))
> + return NULL;
> + }
> +
> + /*
> + * 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; no further action.
> + * * %-EEXIST - address already processed; no further action.
> + */
> +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;
> +
> + /* Assert that the address is 4K aligned */
> + if (WARN_ON_ONCE(!IS_ALIGNED(addr, SZ_4K))) {
> + drm_err(&xe->drm, "Address %llx is not 4K aligned!\n", addr);
> + return -EINVAL;
> + }
> +
> + 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)
> {
^ permalink raw reply [flat|nested] 47+ messages in thread* Re: [PATCH V19 09/15] drm/xe/vram: Add VRAM page offline fault handler
2026-08-31 6:49 ` [PATCH V19 09/15] drm/xe/vram: Add VRAM page offline fault handler Tejas Upadhyay
2026-08-31 6:57 ` Ghimiray, Himal Prasad
@ 2026-08-31 8:37 ` sashiko-bot
2026-09-01 5:48 ` Upadhyay, Tejas
1 sibling, 1 reply; 47+ messages in thread
From: sashiko-bot @ 2026-08-31 8:37 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 6 potential issue(s) to consider:
- [Critical] TOCTOU race allows eviction of the BO and destruction of innocent data
- [High] Deadlock via shrinker when allocating with GFP_KERNEL under vram_mgr->lock
- [High] Unconditional BO unpin and lack of state rollback causes reference count corruption
- [High] Use-After-Free via lockless access to exec_queue pointer
- [Medium] Failed page reservations are permanently silenced, allowing continued hardware faults
- [Medium] Faulty physical pages escape offlining when their owning BO is being freed
--
commit e00d08042f6e028303a11bd3305d790b12e07011
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
Subject: drm/xe/vram: Add VRAM page offline fault handler
This commit adds core VRAM page offlining logic to handle hardware-reported
faulty physical addresses. It introduces functions to purge BOs, verify
previously processed pages, reserve faulty buddy blocks, and map addresses to
VRAM regions.
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> index 1253989a8d06a..e5994c14487d3 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
[ ... ]
> @@ -572,3 +578,263 @@ 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)
> +{
[ ... ]
> + 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)) {
[Severity: High]
Is this lockless access to the exec queue susceptible to a use-after-free?
When xe_ttm_vram_purge_page() reads the queue pointer locklessly, it appears
possible for a concurrent destruction path like xe_lrc_finish() to clear the
pointer and synchronously free the queue via xe_exec_queue_destroy().
If this thread resumes after the free but before the RCU grace period, it
might try to read the refcount of a freed object in
xe_exec_queue_get_unless_zero().
> + /* 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);
[Severity: High]
Could this unconditional unpin corrupt the reference count if the purge
operation fails?
In xe_ttm_vram_purge_page(), if the BO was concurrently pinned multiple times
(for instance, by the display subsystem), dropping a single pin leaves the
count above zero.
Consequently, xe_ttm_bo_purge() will fail during validation and return an
error. Since the state and pin count are not rolled back on this failure
path, the legitimate owner might later unpin the BO, causing an underflow
panic.
[ ... ]
> +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 *pos, *n;
> + 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);
[Severity: High]
Will this allocation risk a direct reclaim deadlock under memory pressure?
The xe_ttm_vram_reserve_page_at_addr() function acquires vram_mgr->lock and
then performs an implicit GFP_KERNEL allocation via kzalloc_obj().
If this allocation blocks and triggers direct reclaim, the GEM shrinker could
attempt to evict a VRAM BO. That eviction path will call
xe_ttm_vram_mgr_del(), which tries to acquire the same vram_mgr->lock,
resulting in an AB-BA deadlock.
> + 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;
> + }
[Severity: Medium]
Does returning early here allow the corrupted physical page to escape back to
the global free pool?
If xe_bo_get_unless_zero() fails in xe_ttm_vram_reserve_page_at_addr(), the
owning BO is already being destroyed.
By freeing the tracking entry and returning without recording the faulty
address in the offlined or queued lists, the memory manager might
subsequently reallocate these corrupted buddy blocks to a new, innocent BO.
[ ... ]
> + if (block) {
> + 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);
[Severity: Critical]
Is there a race condition during the unlocked window that could lead to data
destruction?
Since vram_mgr->lock is dropped before xe_ttm_vram_purge_page() is called in
xe_ttm_vram_reserve_page_at_addr(), the memory manager might concurrently
evict this BO to system memory and reuse its VRAM blocks for a completely
different BO.
When execution resumes, xe_ttm_vram_purge_page() would blindly destroy the
original BO that now safely resides in system memory. Furthermore, the new BO
occupying the faulty VRAM wouldn't be purged, and the subsequent buddy
allocation would fail.
> + if (ret)
> + drm_warn(&xe->drm, "Purge failed at addr:0x%llx, ret:%d\n", addr, ret);
> + }
> +
> + 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;
> + }
[Severity: Medium]
What happens to the faulty address if xe_ttm_vram_buddy_alloc() fails?
In this error path in xe_ttm_vram_reserve_page_at_addr(), the code returns
early without removing the tracking entry from the queued_pages list.
If the hardware later faults on this exact same physical address,
xe_ttm_vram_page_already_processed() will incorrectly report it as already
handled. This permanently blacklists the faulty page from future offlining
attempts.
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260831064942.315720-17-tejas.upadhyay@intel.com?part=9
^ permalink raw reply [flat|nested] 47+ messages in thread* RE: [PATCH V19 09/15] drm/xe/vram: Add VRAM page offline fault handler
2026-08-31 8:37 ` sashiko-bot
@ 2026-09-01 5:48 ` Upadhyay, Tejas
0 siblings, 0 replies; 47+ messages in thread
From: Upadhyay, Tejas @ 2026-09-01 5:48 UTC (permalink / raw)
To: sashiko-reviews@lists.linux.dev; +Cc: intel-xe@lists.freedesktop.org
> -----Original Message-----
> From: sashiko-bot@kernel.org <sashiko-bot@kernel.org>
> Sent: 31 August 2026 14:07
> To: Upadhyay, Tejas <tejas.upadhyay@intel.com>
> Cc: intel-xe@lists.freedesktop.org
> Subject: Re: [PATCH V19 09/15] drm/xe/vram: Add VRAM page offline fault
> handler
>
> Thank you for your contribution! Sashiko AI review found 6 potential issue(s)
> to consider:
> - [Critical] TOCTOU race allows eviction of the BO and destruction of innocent
> data
> - [High] Deadlock via shrinker when allocating with GFP_KERNEL under
> vram_mgr->lock
> - [High] Unconditional BO unpin and lack of state rollback causes reference
> count corruption
> - [High] Use-After-Free via lockless access to exec_queue pointer
> - [Medium] Failed page reservations are permanently silenced, allowing
> continued hardware faults
> - [Medium] Faulty physical pages escape offlining when their owning BO is
> being freed
> --
>
> commit e00d08042f6e028303a11bd3305d790b12e07011
> Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
> Subject: drm/xe/vram: Add VRAM page offline fault handler
>
> This commit adds core VRAM page offlining logic to handle hardware-reported
> faulty physical addresses. It introduces functions to purge BOs, verify
> previously processed pages, reserve faulty buddy blocks, and map addresses
> to VRAM regions.
>
> > diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > index 1253989a8d06a..e5994c14487d3 100644
> > --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
>
> [ ... ]
>
> > @@ -572,3 +578,263 @@ 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) {
>
> [ ... ]
>
> > + 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)) {
>
> [Severity: High]
> Is this lockless access to the exec queue susceptible to a use-after-free?
>
> When xe_ttm_vram_purge_page() reads the queue pointer locklessly, it
> appears possible for a concurrent destruction path like xe_lrc_finish() to clear
> the pointer and synchronously free the queue via xe_exec_queue_destroy().
>
> If this thread resumes after the free but before the RCU grace period, it might
> try to read the refcount of a freed object in xe_exec_queue_get_unless_zero().
This could hit, will think over it.
>
> > + /* 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);
>
> [Severity: High]
> Could this unconditional unpin corrupt the reference count if the purge
> operation fails?
>
> In xe_ttm_vram_purge_page(), if the BO was concurrently pinned multiple
> times (for instance, by the display subsystem), dropping a single pin leaves the
> count above zero.
>
> Consequently, xe_ttm_bo_purge() will fail during validation and return an
> error. Since the state and pin count are not rolled back on this failure path, the
> legitimate owner might later unpin the BO, causing an underflow panic.
Though this is less likely hitting, there is "migration change planned to do before unpin" already as follow up change, which will take care of all pin/unpin related concerns.
>
> [ ... ]
>
> > +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 *pos, *n;
> > + 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);
>
> [Severity: High]
> Will this allocation risk a direct reclaim deadlock under memory pressure?
>
> The xe_ttm_vram_reserve_page_at_addr() function acquires vram_mgr->lock
> and then performs an implicit GFP_KERNEL allocation via kzalloc_obj().
>
> If this allocation blocks and triggers direct reclaim, the GEM shrinker could
> attempt to evict a VRAM BO. That eviction path will call
> xe_ttm_vram_mgr_del(), which tries to acquire the same vram_mgr->lock,
> resulting in an AB-BA deadlock.
Less likely hitting this. If we get memory pressure, most likely system already in bad state.
>
> > + 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;
> > + }
>
> [Severity: Medium]
> Does returning early here allow the corrupted physical page to escape back to
> the global free pool?
>
> If xe_bo_get_unless_zero() fails in xe_ttm_vram_reserve_page_at_addr(), the
> owning BO is already being destroyed.
>
> By freeing the tracking entry and returning without recording the faulty
> address in the offlined or queued lists, the memory manager might
> subsequently reallocate these corrupted buddy blocks to a new, innocent BO.
As per soft offline feature, second reporting of same address will be actual offline (hard-offline). So ideally we would soft-offline in first attempt, but in this case we will soft-offline in second attempt. Again very less likely hitting case.
>
> [ ... ]
>
> > + if (block) {
> > + 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);
>
> [Severity: Critical]
> Is there a race condition during the unlocked window that could lead to data
> destruction?
>
> Since vram_mgr->lock is dropped before xe_ttm_vram_purge_page() is called
> in xe_ttm_vram_reserve_page_at_addr(), the memory manager might
> concurrently evict this BO to system memory and reuse its VRAM blocks for a
> completely different BO.
>
> When execution resumes, xe_ttm_vram_purge_page() would blindly destroy
> the original BO that now safely resides in system memory. Furthermore, the
> new BO occupying the faulty VRAM wouldn't be purged, and the subsequent
> buddy allocation would fail.
This race window will always be there as we cant keep hold on vram_mgr lock, we either will be able to purge them or next alloc will fail and we will keep it failed in queue_list.
>
> > + if (ret)
> > + drm_warn(&xe->drm, "Purge failed at addr:0x%llx,
> ret:%d\n", addr, ret);
> > + }
> > +
> > + 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;
> > + }
>
> [Severity: Medium]
> What happens to the faulty address if xe_ttm_vram_buddy_alloc() fails?
>
> In this error path in xe_ttm_vram_reserve_page_at_addr(), the code returns
> early without removing the tracking entry from the queued_pages list.
>
> If the hardware later faults on this exact same physical address,
> xe_ttm_vram_page_already_processed() will incorrectly report it as already
> handled. This permanently blacklists the faulty page from future offlining
> attempts.
If we are failed to reserve in first attempt, by design we mark it failed in queue_list and keep it there to show user info about it. No retries.
Tejas
>
> [ ... ]
>
> --
> Sashiko AI review ·
> https://sashiko.dev/#/patchset/20260831064942.315720-17-
> tejas.upadhyay@intel.com?part=9
^ permalink raw reply [flat|nested] 47+ messages in thread
* [PATCH V19 10/15] drm/xe/configfs: Add disable_vram_page_offline attribute
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (8 preceding siblings ...)
2026-08-31 6:49 ` [PATCH V19 09/15] drm/xe/vram: Add VRAM page offline fault handler Tejas Upadhyay
@ 2026-08-31 6:49 ` Tejas Upadhyay
2026-08-31 8:45 ` sashiko-bot
2026-08-31 6:49 ` [PATCH V19 11/15] drm/xe/ras: Cache disable_vram_page_offline policy at init Tejas Upadhyay
` (11 subsequent siblings)
21 siblings, 1 reply; 47+ messages in thread
From: Tejas Upadhyay @ 2026-08-31 6:49 UTC (permalink / raw)
To: intel-xe
Cc: himal.prasad.ghimiray, rodrigo.vivi, Tejas Upadhyay,
Michal Wajdeczko
Add a new configfs attribute 'disable_vram_page_offline' to control
how bad VRAM pages are handled:
0, n, N, false - Do not disable (Offlining is active - default)
1, y, Y, true - Disable vram page offline (Logging only)
The attribute can only be set before binding to the device and defaults
to false (offlining enabled). This gives administrators control over
whether corrupted VRAM pages detected by hardware (e.g., ECC errors)
are actively offlined or only logged.
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_configfs.c | 72 +++++++++++++++++++++++++++++++-
drivers/gpu/drm/xe/xe_configfs.h | 2 +
2 files changed, 73 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 052cce962161..f1b1c33ec1e1 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
+ * └── disable_vram_page_offline
*
* After configuring the attributes as per next section, the device can be
* probed with::
@@ -157,6 +158,18 @@
*
* # echo 1 > /sys/kernel/config/xe/0000:03:00.0/enable_psmi
*
+ * This attribute can only be set on CRI before binding to the device.
+ *
+ * Disable VRAM page offline:
+ * ----------------------------
+ *
+ * 0, n, N, false - Do not disable (Offlining is active - default)
+ * 1, y, Y, true - Disable vram page offline (Logging only)
+ *
+ * Example to disable VRAM offline::
+ *
+ * # echo 1 > /sys/kernel/config/xe/0000:03:00.0/disable_vram_page_offline
+ *
* This attribute can only be set before binding to the device.
*
* Context restore BB
@@ -275,6 +288,7 @@ struct xe_config_group_device {
bool survivability_mode;
bool enable_psmi;
bool enable_multi_queue;
+ bool disable_vram_page_offline;
struct {
unsigned int max_vfs;
bool admin_only_pf;
@@ -295,6 +309,7 @@ static const struct xe_config_device device_defaults = {
.survivability_mode = false,
.enable_psmi = false,
.enable_multi_queue = true,
+ .disable_vram_page_offline = false,
.sriov = {
.max_vfs = XE_DEFAULT_MAX_VFS,
.admin_only_pf = XE_DEFAULT_ADMIN_ONLY_PF,
@@ -616,6 +631,33 @@ static ssize_t enable_multi_queue_store(struct config_item *item, const char *pa
return len;
}
+static ssize_t disable_vram_page_offline_show(struct config_item *item, char *page)
+{
+ struct xe_config_device *dev = to_xe_config_device(item);
+
+ return sprintf(page, "%s\n", str_yes_no(!dev->disable_vram_page_offline));
+}
+
+static ssize_t disable_vram_page_offline_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.disable_vram_page_offline = 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(, disable_vram_page_offline);
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_disable_vram_page_offline,
&attr_engines_allowed,
&attr_gt_types_allowed,
&attr_survivability_mode,
@@ -895,6 +939,11 @@ static bool xe_config_device_is_visible(struct config_item *item,
return false;
}
+ if (attr == &attr_disable_vram_page_offline) {
+ if (!dev->desc->is_dgfx || dev->desc->platform != XE_CRESCENTISLAND)
+ return false;
+ }
+
return true;
}
@@ -1142,6 +1191,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", disable_vram_page_offline);
PRI_CUSTOM_ATTR("%d", survivability_mode);
PRI_CUSTOM_ATTR("%u", sriov.admin_only_pf);
@@ -1290,6 +1340,26 @@ bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev)
return ret;
}
+/**
+ * xe_configfs_get_disable_vram_page_offline - get configfs disable_vram_page_offline setting
+ * @pdev: pci device
+ *
+ * Return: disable_vram_page_offline setting in configfs
+ */
+bool xe_configfs_get_disable_vram_page_offline(struct pci_dev *pdev)
+{
+ struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ bool ret;
+
+ if (!dev)
+ return device_defaults.disable_vram_page_offline;
+
+ ret = dev->config.disable_vram_page_offline;
+ 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..9b43cb149fe8 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_disable_vram_page_offline(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_disable_vram_page_offline(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; }
--
2.52.0
^ permalink raw reply related [flat|nested] 47+ messages in thread* Re: [PATCH V19 10/15] drm/xe/configfs: Add disable_vram_page_offline attribute
2026-08-31 6:49 ` [PATCH V19 10/15] drm/xe/configfs: Add disable_vram_page_offline attribute Tejas Upadhyay
@ 2026-08-31 8:45 ` sashiko-bot
2026-09-01 5:25 ` Upadhyay, Tejas
0 siblings, 1 reply; 47+ messages in thread
From: sashiko-bot @ 2026-08-31 8:45 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] The `disable_vram_page_offline_show` function incorrectly negates the configured boolean value, causing sysfs/configfs reads to contradict the actual configuration state.
- [Medium] The dummy fallback implementation of `xe_configfs_get_disable_vram_page_offline()` incorrectly returns `true` when configfs is disabled, contradicting the default configuration.
--
commit d087a9cf3ce1baaaa80f9dce6c4475133cc05dbf
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
drm/xe/configfs: Add disable_vram_page_offline attribute
Add a new configfs attribute disable_vram_page_offline to control
how bad VRAM pages are handled. The attribute can only be set before
binding to the device and defaults to false (offlining enabled).
> diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
> --- a/drivers/gpu/drm/xe/xe_configfs.c
> +++ b/drivers/gpu/drm/xe/xe_configfs.c
[ ... ]
> @@ -616,6 +631,33 @@ static ssize_t enable_multi_queue_store(struct config_item *item, const char *pa
> return len;
> }
>
> +static ssize_t disable_vram_page_offline_show(struct config_item *item, char *page)
> +{
> + struct xe_config_device *dev = to_xe_config_device(item);
> +
> + return sprintf(page, "%s\n", str_yes_no(!dev->disable_vram_page_offline));
[Severity: Medium]
Does this logic negate the configured boolean value? Since the attribute
is named disable_vram_page_offline, if a user writes '1' to it (setting
it to true), won't the '!' operator cause this to output 'N' on read? This
could break userspace assumptions where reading yields the opposite of what
was just written.
> +}
> +
> +static ssize_t disable_vram_page_offline_store(struct config_item *item,
[ ... ]
> diff --git a/drivers/gpu/drm/xe/xe_configfs.h b/drivers/gpu/drm/xe/xe_configfs.h
> --- a/drivers/gpu/drm/xe/xe_configfs.h
> +++ b/drivers/gpu/drm/xe/xe_configfs.h
[ ... ]
> @@ -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_disable_vram_page_offline(struct pci_dev *pdev) { return true; }
[Severity: Medium]
Should this dummy fallback return false instead of true? The commit message
and device_defaults indicate that the default state is false (offlining is
active). When the kernel is compiled without configfs support, returning
true here would silently disable VRAM page offlining by default.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260831064942.315720-17-tejas.upadhyay@intel.com?part=10
^ permalink raw reply [flat|nested] 47+ messages in thread* RE: [PATCH V19 10/15] drm/xe/configfs: Add disable_vram_page_offline attribute
2026-08-31 8:45 ` sashiko-bot
@ 2026-09-01 5:25 ` Upadhyay, Tejas
0 siblings, 0 replies; 47+ messages in thread
From: Upadhyay, Tejas @ 2026-09-01 5:25 UTC (permalink / raw)
To: sashiko-reviews@lists.linux.dev; +Cc: intel-xe@lists.freedesktop.org
> -----Original Message-----
> From: sashiko-bot@kernel.org <sashiko-bot@kernel.org>
> Sent: 31 August 2026 14:16
> To: Upadhyay, Tejas <tejas.upadhyay@intel.com>
> Cc: intel-xe@lists.freedesktop.org
> Subject: Re: [PATCH V19 10/15] drm/xe/configfs: Add
> disable_vram_page_offline attribute
>
> Thank you for your contribution! Sashiko AI review found 2 potential issue(s)
> to consider:
> - [Medium] The `disable_vram_page_offline_show` function incorrectly
> negates the configured boolean value, causing sysfs/configfs reads to
> contradict the actual configuration state.
> - [Medium] The dummy fallback implementation of
> `xe_configfs_get_disable_vram_page_offline()` incorrectly returns `true` when
> configfs is disabled, contradicting the default configuration.
> --
>
> commit d087a9cf3ce1baaaa80f9dce6c4475133cc05dbf
> Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
>
> drm/xe/configfs: Add disable_vram_page_offline attribute
>
> Add a new configfs attribute disable_vram_page_offline to control how bad
> VRAM pages are handled. The attribute can only be set before binding to the
> device and defaults to false (offlining enabled).
>
> > diff --git a/drivers/gpu/drm/xe/xe_configfs.c
> > b/drivers/gpu/drm/xe/xe_configfs.c
> > --- a/drivers/gpu/drm/xe/xe_configfs.c
> > +++ b/drivers/gpu/drm/xe/xe_configfs.c
> [ ... ]
> > @@ -616,6 +631,33 @@ static ssize_t enable_multi_queue_store(struct
> config_item *item, const char *pa
> > return len;
> > }
> >
> > +static ssize_t disable_vram_page_offline_show(struct config_item
> > +*item, char *page) {
> > + struct xe_config_device *dev = to_xe_config_device(item);
> > +
> > + return sprintf(page, "%s\n",
> > +str_yes_no(!dev->disable_vram_page_offline));
>
> [Severity: Medium]
> Does this logic negate the configured boolean value? Since the attribute is
> named disable_vram_page_offline, if a user writes '1' to it (setting it to true),
> won't the '!' operator cause this to output 'N' on read? This could break
> userspace assumptions where reading yields the opposite of what was just
> written.
This is reader confusion for sure. Better to clear it, I will handle it.
>
> > +}
> > +
> > +static ssize_t disable_vram_page_offline_store(struct config_item
> > +*item,
> [ ... ]
> > diff --git a/drivers/gpu/drm/xe/xe_configfs.h
> > b/drivers/gpu/drm/xe/xe_configfs.h
> > --- a/drivers/gpu/drm/xe/xe_configfs.h
> > +++ b/drivers/gpu/drm/xe/xe_configfs.h
> [ ... ]
> > @@ -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_disable_vram_page_offline(struct
> > +pci_dev *pdev) { return true; }
>
> [Severity: Medium]
> Should this dummy fallback return false instead of true? The commit message
> and device_defaults indicate that the default state is false (offlining is active).
> When the kernel is compiled without configfs support, returning true here
> would silently disable VRAM page offlining by default.
When configfs not present we will end up logging only. I think when configfs not present we need to do offlining in place of logging. I will correct this.
Tejas
>
> --
> Sashiko AI review ·
> https://sashiko.dev/#/patchset/20260831064942.315720-17-
> tejas.upadhyay@intel.com?part=10
^ permalink raw reply [flat|nested] 47+ messages in thread
* [PATCH V19 11/15] drm/xe/ras: Cache disable_vram_page_offline policy at init
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (9 preceding siblings ...)
2026-08-31 6:49 ` [PATCH V19 10/15] drm/xe/configfs: Add disable_vram_page_offline attribute Tejas Upadhyay
@ 2026-08-31 6:49 ` Tejas Upadhyay
2026-08-31 9:02 ` sashiko-bot
2026-08-31 6:49 ` [PATCH V19 12/15] drm/xe/vram: Check disable_vram_page_offline policy in fault handler Tejas Upadhyay
` (10 subsequent siblings)
21 siblings, 1 reply; 47+ messages in thread
From: Tejas Upadhyay @ 2026-08-31 6:49 UTC (permalink / raw)
To: intel-xe
Cc: himal.prasad.ghimiray, rodrigo.vivi, Tejas Upadhyay,
Michal Wajdeczko
The configfs disable_vram_page_offline attribute can only be
set before device bind, so its value is immutable at runtime.
Cache it in struct xe_drm_ras during xe_ras_init() to avoid
repeated configfs lookups on every fault.
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_drm_ras_types.h | 3 +++
drivers/gpu/drm/xe/xe_ras.c | 9 +++++++++
2 files changed, 12 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_drm_ras_types.h b/drivers/gpu/drm/xe/xe_drm_ras_types.h
index 8d729ad6a264..0be218ba2db7 100644
--- a/drivers/gpu/drm/xe/xe_drm_ras_types.h
+++ b/drivers/gpu/drm/xe/xe_drm_ras_types.h
@@ -43,6 +43,9 @@ struct xe_drm_ras {
/** @info: info array for all types of errors */
struct xe_drm_ras_counter *info[DRM_XE_RAS_ERR_SEV_MAX];
+
+ /** @disable_vram_page_offline: cached configfs policy, immutable after init */
+ bool disable_vram_page_offline;
};
#endif
diff --git a/drivers/gpu/drm/xe/xe_ras.c b/drivers/gpu/drm/xe/xe_ras.c
index de4cb9ef7355..7a85735c57d5 100644
--- a/drivers/gpu/drm/xe/xe_ras.c
+++ b/drivers/gpu/drm/xe/xe_ras.c
@@ -3,6 +3,7 @@
* Copyright © 2026 Intel Corporation
*/
+#include "xe_configfs.h"
#include "xe_debugfs.h"
#include "xe_device.h"
#include "xe_drm_ras.h"
@@ -915,6 +916,14 @@ void xe_ras_init(struct xe_device *xe)
{
int ret;
+ /*
+ * TODO: Replace platform check with xe->info.has_disable_vram_page_offline
+ * once the feature flag is plumbed through device info.
+ */
+ if (xe->info.platform == XE_CRESCENTISLAND)
+ xe->ras.disable_vram_page_offline =
+ xe_configfs_get_disable_vram_page_offline(to_pci_dev(xe->drm.dev));
+
xe_drm_ras_init(xe);
if (!xe->info.has_sysctrl)
--
2.52.0
^ permalink raw reply related [flat|nested] 47+ messages in thread* Re: [PATCH V19 11/15] drm/xe/ras: Cache disable_vram_page_offline policy at init
2026-08-31 6:49 ` [PATCH V19 11/15] drm/xe/ras: Cache disable_vram_page_offline policy at init Tejas Upadhyay
@ 2026-08-31 9:02 ` sashiko-bot
2026-09-01 5:22 ` Upadhyay, Tejas
0 siblings, 1 reply; 47+ messages in thread
From: sashiko-bot @ 2026-08-31 9:02 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] Inconsistent default value for disable_vram_page_offline when configfs is disabled.
--
commit fc4ea47b91e45c757aade7da6b3575d972f0bc5f
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
drm/xe/ras: Cache disable_vram_page_offline policy at init
This commit caches the configfs attribute disable_vram_page_offline in
the xe_drm_ras structure at initialization. This avoids repeated configfs
lookups during page faults.
> diff --git a/drivers/gpu/drm/xe/xe_ras.c b/drivers/gpu/drm/xe/xe_ras.c
> index d25d25f775310..f11a743990044 100644
> --- a/drivers/gpu/drm/xe/xe_ras.c
> +++ b/drivers/gpu/drm/xe/xe_ras.c
[ ... ]
> @@ -804,6 +805,14 @@ void xe_ras_init(struct xe_device *xe)
> {
> int ret;
>
> + /*
> + * TODO: Replace platform check with xe->info.has_disable_vram_page_offline
> + * once the feature flag is plumbed through device info.
> + */
> + if (xe->info.platform == XE_CRESCENTISLAND)
> + xe->ras.disable_vram_page_offline =
> + xe_configfs_get_disable_vram_page_offline(to_pci_dev(xe->drm.dev));
[Severity: Medium]
Will this silently disable VRAM page offlining when configfs is disabled in
the kernel configuration?
When the kernel is built without configfs,
xe_configfs_get_disable_vram_page_offline() is provided by a stub in
drivers/gpu/drm/xe/xe_configfs.h that returns true.
The intended default behavior when configfs is enabled but the attribute is
not set appears to be false (allowing offlining), as defined by
device_defaults in drivers/gpu/drm/xe/xe_configfs.c. By calling the stub and
caching its return value here, kernels built without configfs will silently
have this hardware reliability feature disabled by default.
Should the stub in drivers/gpu/drm/xe/xe_configfs.h be updated to return
false to match the expected default behavior?
> +
> xe_drm_ras_init(xe);
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260831064942.315720-17-tejas.upadhyay@intel.com?part=11
^ permalink raw reply [flat|nested] 47+ messages in thread* RE: [PATCH V19 11/15] drm/xe/ras: Cache disable_vram_page_offline policy at init
2026-08-31 9:02 ` sashiko-bot
@ 2026-09-01 5:22 ` Upadhyay, Tejas
0 siblings, 0 replies; 47+ messages in thread
From: Upadhyay, Tejas @ 2026-09-01 5:22 UTC (permalink / raw)
To: sashiko-reviews@lists.linux.dev; +Cc: intel-xe@lists.freedesktop.org
> -----Original Message-----
> From: sashiko-bot@kernel.org <sashiko-bot@kernel.org>
> Sent: 31 August 2026 14:33
> To: Upadhyay, Tejas <tejas.upadhyay@intel.com>
> Cc: intel-xe@lists.freedesktop.org
> Subject: Re: [PATCH V19 11/15] drm/xe/ras: Cache disable_vram_page_offline
> policy at init
>
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s)
> to consider:
> - [Medium] Inconsistent default value for disable_vram_page_offline when
> configfs is disabled.
> --
>
> commit fc4ea47b91e45c757aade7da6b3575d972f0bc5f
> Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
>
> drm/xe/ras: Cache disable_vram_page_offline policy at init
>
> This commit caches the configfs attribute disable_vram_page_offline in the
> xe_drm_ras structure at initialization. This avoids repeated configfs lookups
> during page faults.
>
> > diff --git a/drivers/gpu/drm/xe/xe_ras.c b/drivers/gpu/drm/xe/xe_ras.c
> > index d25d25f775310..f11a743990044 100644
> > --- a/drivers/gpu/drm/xe/xe_ras.c
> > +++ b/drivers/gpu/drm/xe/xe_ras.c
> [ ... ]
> > @@ -804,6 +805,14 @@ void xe_ras_init(struct xe_device *xe) {
> > int ret;
> >
> > + /*
> > + * TODO: Replace platform check with xe-
> >info.has_disable_vram_page_offline
> > + * once the feature flag is plumbed through device info.
> > + */
> > + if (xe->info.platform == XE_CRESCENTISLAND)
> > + xe->ras.disable_vram_page_offline =
> > +
> > +xe_configfs_get_disable_vram_page_offline(to_pci_dev(xe->drm.dev));
>
> [Severity: Medium]
> Will this silently disable VRAM page offlining when configfs is disabled in the
> kernel configuration?
>
> When the kernel is built without configfs,
> xe_configfs_get_disable_vram_page_offline() is provided by a stub in
> drivers/gpu/drm/xe/xe_configfs.h that returns true.
>
> The intended default behavior when configfs is enabled but the attribute is not
> set appears to be false (allowing offlining), as defined by device_defaults in
> drivers/gpu/drm/xe/xe_configfs.c. By calling the stub and caching its return
> value here, kernels built without configfs will silently have this hardware
> reliability feature disabled by default.
>
> Should the stub in drivers/gpu/drm/xe/xe_configfs.h be updated to return
> false to match the expected default behavior?
Already covering it as part of another patch. Will be taken care.
Tejas
>
> > +
> > xe_drm_ras_init(xe);
>
> --
> Sashiko AI review ·
> https://sashiko.dev/#/patchset/20260831064942.315720-17-
> tejas.upadhyay@intel.com?part=11
^ permalink raw reply [flat|nested] 47+ messages in thread
* [PATCH V19 12/15] drm/xe/vram: Check disable_vram_page_offline policy in fault handler
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (10 preceding siblings ...)
2026-08-31 6:49 ` [PATCH V19 11/15] drm/xe/ras: Cache disable_vram_page_offline policy at init Tejas Upadhyay
@ 2026-08-31 6:49 ` Tejas Upadhyay
2026-08-31 6:49 ` [PATCH V19 13/15] drm/xe: Expose bad VRAM pages via debugfs Tejas Upadhyay
` (9 subsequent siblings)
21 siblings, 0 replies; 47+ messages in thread
From: Tejas Upadhyay @ 2026-08-31 6:49 UTC (permalink / raw)
To: intel-xe
Cc: himal.prasad.ghimiray, rodrigo.vivi, Tejas Upadhyay,
Michal Wajdeczko
Before reserving a page at a faulting address, check the cached
disable_vram_page_offline policy from xe->ras. If the policy is
enabled (logging only), log the corrupted address and return
-EOPNOTSUPP so that RAS can report to firmware to drop the
address from the SRAM queue without attempting to offline the
page.
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index e5994c14487d..286c866f1d58 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -21,6 +21,7 @@
#include "xe_lrc.h"
#include "xe_mmio.h"
#include "xe_pm.h"
+#include "xe_printk.h"
#include "xe_res_cursor.h"
#include "xe_ttm_stolen_mgr.h"
#include "xe_ttm_vram_mgr.h"
@@ -834,6 +835,12 @@ int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr)
vram_mgr = &vr->ttm;
mm = &vram_mgr->mm;
+ if (xe->ras.disable_vram_page_offline) {
+ xe_err(xe, "0x%llx is reported as corrupted address by HW\n",
+ addr);
+ 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] 47+ messages in thread* [PATCH V19 13/15] drm/xe: Expose bad VRAM pages via debugfs
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (11 preceding siblings ...)
2026-08-31 6:49 ` [PATCH V19 12/15] drm/xe/vram: Check disable_vram_page_offline policy in fault handler Tejas Upadhyay
@ 2026-08-31 6:49 ` Tejas Upadhyay
2026-08-31 6:55 ` Ghimiray, Himal Prasad
2026-08-31 9:18 ` sashiko-bot
2026-08-31 6:49 ` [PATCH V19 14/15] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN Tejas Upadhyay
` (8 subsequent siblings)
21 siblings, 2 replies; 47+ messages in thread
From: Tejas Upadhyay @ 2026-08-31 6:49 UTC (permalink / raw)
To: intel-xe
Cc: himal.prasad.ghimiray, rodrigo.vivi, Tejas Upadhyay,
Michal Wajdeczko
Add a debugfs file "vram_bad_pages" that shows offlined and queued
VRAM pages across all tiles. Each entry displays the page frame number,
GPU page size, and status flag (R=reserved, P=pending, F=failed).
example,
cat /sys/kernel/debug/dri/0/vram_bad_pages
max_pages: 10000
0x0000000000000000 : 0x0000000000001000 : R
0x0000000000001234 : 0x0000000000001000 : P
0x0000000000080000 : 0x0000000000001000 : R ← tile 1 addr
v2(Sashikoi/Michal/Himal):
-Remove block iteration, use offline and queue list only
-Move platform check inside api
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_debugfs.c | 3 ++
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 59 ++++++++++++++++++++++
drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 2 +
drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 2 +
4 files changed, 66 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
index 28135f84e286..cb24e001b142 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"
@@ -773,6 +774,8 @@ void xe_debugfs_register(struct xe_device *xe)
if (man)
ttm_resource_manager_create_debugfs(man, root, "stolen_mm");
+ xe_ttm_vram_debugfs_init(xe, root);
+
for_each_tile(tile, xe, tile_id)
xe_tile_debugfs_register(tile);
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 286c866f1d58..456ea78a31e2 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -5,6 +5,7 @@
*/
#include <linux/cgroup_dmem.h>
+#include <linux/debugfs.h>
#include <drm/drm_managed.h>
#include <drm/drm_drv.h>
@@ -845,3 +846,61 @@ 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 int vram_bad_pages_show(struct seq_file *m, void *unused)
+{
+ struct xe_device *xe = m->private;
+ struct xe_ttm_vram_offline_resource *pos;
+ struct ttm_resource_manager *man;
+ struct xe_ttm_vram_mgr *mgr;
+ struct xe_tile *tile;
+ u8 id;
+
+ man = ttm_manager_type(&xe->ttm, XE_PL_VRAM0);
+ if (man)
+ /* TODO Hook with RAS to show max_pages fetched from FW */
+ seq_printf(m, "max_pages: %d\n",
+ to_xe_ttm_vram_mgr(man)->max_pages);
+
+ for_each_tile(tile, xe, id) {
+ struct xe_vram_region *vr = tile->mem.vram;
+
+ man = ttm_manager_type(&xe->ttm, XE_PL_VRAM0 + id);
+ if (!man || !vr)
+ continue;
+ mgr = to_xe_ttm_vram_mgr(man);
+
+ rcu_read_lock();
+
+ list_for_each_entry_rcu(pos, &mgr->offlined_pages, offlined_link) {
+ u64 pfn;
+
+ pfn = (pos->addr + vr->dpa_base) >> PAGE_SHIFT;
+ seq_printf(m, "0x%016llx : 0x%016lx : R\n", pfn, PAGE_SIZE);
+ }
+
+ list_for_each_entry_rcu(pos, &mgr->queued_pages, queued_link) {
+ u64 pfn;
+
+ pfn = (pos->addr + vr->dpa_base) >> PAGE_SHIFT;
+ seq_printf(m, "0x%016llx : 0x%016lx : %c\n",
+ pfn, PAGE_SIZE, pos->status ? 'F' : 'P');
+ }
+
+ rcu_read_unlock();
+ }
+
+ return 0;
+}
+DEFINE_SHOW_ATTRIBUTE(vram_bad_pages);
+
+void xe_ttm_vram_debugfs_init(struct xe_device *xe, struct dentry *root)
+{
+ /*
+ * TODO: Replace platform check with xe->info
+ * once the feature flag is plumbed through device info.
+ */
+ if (xe->info.platform != XE_CRESCENTISLAND)
+ return;
+ debugfs_create_file("vram_bad_pages", 0444, root, xe, &vram_bad_pages_fops);
+}
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
index d5392beff30c..f354c26c4257 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
@@ -9,6 +9,7 @@
#include "xe_ttm_vram_mgr_types.h"
enum dma_data_direction;
+struct dentry;
struct xe_device;
struct xe_tile;
struct xe_vram_region;
@@ -32,6 +33,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);
+void xe_ttm_vram_debugfs_init(struct xe_device *xe, struct dentry *root);
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] 47+ messages in thread* Re: [PATCH V19 13/15] drm/xe: Expose bad VRAM pages via debugfs
2026-08-31 6:49 ` [PATCH V19 13/15] drm/xe: Expose bad VRAM pages via debugfs Tejas Upadhyay
@ 2026-08-31 6:55 ` Ghimiray, Himal Prasad
2026-08-31 9:18 ` sashiko-bot
1 sibling, 0 replies; 47+ messages in thread
From: Ghimiray, Himal Prasad @ 2026-08-31 6:55 UTC (permalink / raw)
To: Tejas Upadhyay, intel-xe; +Cc: rodrigo.vivi, Michal Wajdeczko
On 31-08-2026 12:19, Tejas Upadhyay wrote:
> Add a debugfs file "vram_bad_pages" that shows offlined and queued
> VRAM pages across all tiles. Each entry displays the page frame number,
> GPU page size, and status flag (R=reserved, P=pending, F=failed).
>
> example,
> cat /sys/kernel/debug/dri/0/vram_bad_pages
>
> max_pages: 10000
> 0x0000000000000000 : 0x0000000000001000 : R
> 0x0000000000001234 : 0x0000000000001000 : P
> 0x0000000000080000 : 0x0000000000001000 : R ← tile 1 addr
>
> v2(Sashikoi/Michal/Himal):
> -Remove block iteration, use offline and queue list only
> -Move platform check inside api
>
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
> Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
> ---
> drivers/gpu/drm/xe/xe_debugfs.c | 3 ++
> drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 59 ++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 2 +
> drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 2 +
> 4 files changed, 66 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
> index 28135f84e286..cb24e001b142 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"
>
> @@ -773,6 +774,8 @@ void xe_debugfs_register(struct xe_device *xe)
> if (man)
> ttm_resource_manager_create_debugfs(man, root, "stolen_mm");
>
> + xe_ttm_vram_debugfs_init(xe, root);
> +
> for_each_tile(tile, xe, tile_id)
> xe_tile_debugfs_register(tile);
>
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> index 286c866f1d58..456ea78a31e2 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> @@ -5,6 +5,7 @@
> */
>
> #include <linux/cgroup_dmem.h>
> +#include <linux/debugfs.h>
>
> #include <drm/drm_managed.h>
> #include <drm/drm_drv.h>
> @@ -845,3 +846,61 @@ 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 int vram_bad_pages_show(struct seq_file *m, void *unused)
> +{
> + struct xe_device *xe = m->private;
> + struct xe_ttm_vram_offline_resource *pos;
> + struct ttm_resource_manager *man;
> + struct xe_ttm_vram_mgr *mgr;
> + struct xe_tile *tile;
> + u8 id;
> +
> + man = ttm_manager_type(&xe->ttm, XE_PL_VRAM0);
> + if (man)
> + /* TODO Hook with RAS to show max_pages fetched from FW */
> + seq_printf(m, "max_pages: %d\n",
> + to_xe_ttm_vram_mgr(man)->max_pages);
> +
> + for_each_tile(tile, xe, id) {
> + struct xe_vram_region *vr = tile->mem.vram;
> +
> + man = ttm_manager_type(&xe->ttm, XE_PL_VRAM0 + id);
> + if (!man || !vr)
> + continue;
> + mgr = to_xe_ttm_vram_mgr(man);
> +
> + rcu_read_lock();
> +
> + list_for_each_entry_rcu(pos, &mgr->offlined_pages, offlined_link) {
> + u64 pfn;
> +
> + pfn = (pos->addr + vr->dpa_base) >> PAGE_SHIFT;
> + seq_printf(m, "0x%016llx : 0x%016lx : R\n", pfn, PAGE_SIZE);
> + }
> +
> + list_for_each_entry_rcu(pos, &mgr->queued_pages, queued_link) {
> + u64 pfn;
> +
> + pfn = (pos->addr + vr->dpa_base) >> PAGE_SHIFT;
> + seq_printf(m, "0x%016llx : 0x%016lx : %c\n",
> + pfn, PAGE_SIZE, pos->status ? 'F' : 'P');
> + }
> +
> + rcu_read_unlock();
> + }
> +
> + return 0;
> +}
> +DEFINE_SHOW_ATTRIBUTE(vram_bad_pages);
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> +
> +void xe_ttm_vram_debugfs_init(struct xe_device *xe, struct dentry *root)
> +{
> + /*
> + * TODO: Replace platform check with xe->info
> + * once the feature flag is plumbed through device info.
> + */
> + if (xe->info.platform != XE_CRESCENTISLAND)
> + return;
> + debugfs_create_file("vram_bad_pages", 0444, root, xe, &vram_bad_pages_fops);
> +}
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
> index d5392beff30c..f354c26c4257 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
> @@ -9,6 +9,7 @@
> #include "xe_ttm_vram_mgr_types.h"
>
> enum dma_data_direction;
> +struct dentry;
> struct xe_device;
> struct xe_tile;
> struct xe_vram_region;
> @@ -32,6 +33,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);
> +void xe_ttm_vram_debugfs_init(struct xe_device *xe, struct dentry *root);
> 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;
> };
>
> /**
^ permalink raw reply [flat|nested] 47+ messages in thread* Re: [PATCH V19 13/15] drm/xe: Expose bad VRAM pages via debugfs
2026-08-31 6:49 ` [PATCH V19 13/15] drm/xe: Expose bad VRAM pages via debugfs Tejas Upadhyay
2026-08-31 6:55 ` Ghimiray, Himal Prasad
@ 2026-08-31 9:18 ` sashiko-bot
2026-09-01 5:13 ` Upadhyay, Tejas
1 sibling, 1 reply; 47+ messages in thread
From: sashiko-bot @ 2026-08-31 9:18 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] Incorrect PFN calculation and page size reporting on architectures with non-4KB CPU pages.
--
commit 582114b5c95fb63375e25846ac38204e4e81d526
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
drm/xe: Expose bad VRAM pages via debugfs
This commit adds a debugfs file vram_bad_pages that displays offlined
and queued VRAM pages across all tiles.
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> index 286c866f1d581..456ea78a31e2a 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
[ ... ]
> @@ -845,3 +846,61 @@ int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, u64 addr)
> +static int vram_bad_pages_show(struct seq_file *m, void *unused)
> +{
[ ... ]
> + list_for_each_entry_rcu(pos, &mgr->offlined_pages, offlined_link) {
> + u64 pfn;
> +
> + pfn = (pos->addr + vr->dpa_base) >> PAGE_SHIFT;
> + seq_printf(m, "0x%016llx : 0x%016lx : R\n", pfn, PAGE_SIZE);
> + }
> +
> + list_for_each_entry_rcu(pos, &mgr->queued_pages, queued_link) {
> + u64 pfn;
> +
> + pfn = (pos->addr + vr->dpa_base) >> PAGE_SHIFT;
> + seq_printf(m, "0x%016llx : 0x%016lx : %c\n",
> + pfn, PAGE_SIZE, pos->status ? 'F' : 'P');
> + }
[Severity: Medium]
Will this calculate and report incorrect page frame numbers (PFN) and page
sizes on architectures with non-4KB CPU pages?
On systems where CPU page size is greater than 4KB (such as ARM64 with 64KB
pages), using PAGE_SHIFT and PAGE_SIZE in vram_bad_pages_show() will truncate
the 4KB-aligned address bits and display the CPU page size instead of the
intended GPU page size, breaking diagnostic statistics.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260831064942.315720-17-tejas.upadhyay@intel.com?part=13
^ permalink raw reply [flat|nested] 47+ messages in thread* RE: [PATCH V19 13/15] drm/xe: Expose bad VRAM pages via debugfs
2026-08-31 9:18 ` sashiko-bot
@ 2026-09-01 5:13 ` Upadhyay, Tejas
0 siblings, 0 replies; 47+ messages in thread
From: Upadhyay, Tejas @ 2026-09-01 5:13 UTC (permalink / raw)
To: sashiko-reviews@lists.linux.dev; +Cc: intel-xe@lists.freedesktop.org
> -----Original Message-----
> From: sashiko-bot@kernel.org <sashiko-bot@kernel.org>
> Sent: 31 August 2026 14:48
> To: Upadhyay, Tejas <tejas.upadhyay@intel.com>
> Cc: intel-xe@lists.freedesktop.org
> Subject: Re: [PATCH V19 13/15] drm/xe: Expose bad VRAM pages via debugfs
>
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s)
> to consider:
> - [Medium] Incorrect PFN calculation and page size reporting on architectures
> with non-4KB CPU pages.
> --
>
> commit 582114b5c95fb63375e25846ac38204e4e81d526
> Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
>
> drm/xe: Expose bad VRAM pages via debugfs
>
> This commit adds a debugfs file vram_bad_pages that displays offlined and
> queued VRAM pages across all tiles.
>
> > diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > index 286c866f1d581..456ea78a31e2a 100644
> > --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> [ ... ]
> > @@ -845,3 +846,61 @@ int xe_ttm_vram_handle_addr_fault(struct
> > xe_device *xe, u64 addr)
> > +static int vram_bad_pages_show(struct seq_file *m, void *unused) {
> [ ... ]
> > + list_for_each_entry_rcu(pos, &mgr->offlined_pages,
> offlined_link) {
> > + u64 pfn;
> > +
> > + pfn = (pos->addr + vr->dpa_base) >> PAGE_SHIFT;
> > + seq_printf(m, "0x%016llx : 0x%016lx : R\n", pfn,
> PAGE_SIZE);
> > + }
> > +
> > + list_for_each_entry_rcu(pos, &mgr->queued_pages,
> queued_link) {
> > + u64 pfn;
> > +
> > + pfn = (pos->addr + vr->dpa_base) >> PAGE_SHIFT;
> > + seq_printf(m, "0x%016llx : 0x%016lx : %c\n",
> > + pfn, PAGE_SIZE, pos->status ? 'F' : 'P');
> > + }
>
> [Severity: Medium]
> Will this calculate and report incorrect page frame numbers (PFN) and page
> sizes on architectures with non-4KB CPU pages?
>
> On systems where CPU page size is greater than 4KB (such as ARM64 with
> 64KB pages), using PAGE_SHIFT and PAGE_SIZE in vram_bad_pages_show()
> will truncate the 4KB-aligned address bits and display the CPU page size
> instead of the intended GPU page size, breaking diagnostic statistics.
We have asserts everywhere for 4K aligned page for this feature which fills the queued_pages and offlined_pages queue. Most unlikely to hit this.
Tejas
>
> --
> Sashiko AI review ·
> https://sashiko.dev/#/patchset/20260831064942.315720-17-
> tejas.upadhyay@intel.com?part=13
^ permalink raw reply [flat|nested] 47+ messages in thread
* [PATCH V19 14/15] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (12 preceding siblings ...)
2026-08-31 6:49 ` [PATCH V19 13/15] drm/xe: Expose bad VRAM pages via debugfs Tejas Upadhyay
@ 2026-08-31 6:49 ` Tejas Upadhyay
2026-08-31 9:40 ` sashiko-bot
2026-08-31 6:49 ` [PATCH V19 15/15] drm/xe: Add fault-inject based VRAM page offline injection Tejas Upadhyay
` (7 subsequent siblings)
21 siblings, 1 reply; 47+ messages in thread
From: Tejas Upadhyay @ 2026-08-31 6:49 UTC (permalink / raw)
To: intel-xe
Cc: himal.prasad.ghimiray, rodrigo.vivi, Tejas Upadhyay,
José Roberto de Souza, Michal Mrozek
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.
v4(Sashiko):
- Add ban reason for non-LR exec queues
- Add TODO for multiqueue
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 | 36 ++++++++++++++++++++----
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 19 +++++++++++++
include/uapi/drm/xe_drm.h | 18 +++++++++++-
5 files changed, 74 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 95f75d61a647..836f88fc0faa 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue_types.h
+++ b/drivers/gpu/drm/xe/xe_exec_queue_types.h
@@ -154,6 +154,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;
@@ -348,8 +351,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 99d8c807ff05..0a6e2b81b5a5 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>
@@ -1599,6 +1600,12 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
else
wedged = xe_device_wedged(xe);
+ /*
+ * 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 */
@@ -1682,6 +1689,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;
}
@@ -2580,13 +2590,29 @@ 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;
+ /* TODO: In case of multiqueue, if a secondary queue is banned due to
+ * page offlining, checking only the primary queue's GuC reset status
+ * may mask the true reason or race with it.
+ */
+ 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 456ea78a31e2..ca97fa8291c4 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -10,6 +10,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>
@@ -583,6 +584,7 @@ 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)
{
+ u32 q_flag = DRM_XE_EXEC_QUEUE_BAN_REASON_PAGE_OFFLINE;
struct ttm_operation_ctx ctx = {};
struct xe_exec_queue *q_to_put = NULL;
struct xe_exec_queue *q = NULL;
@@ -597,7 +599,22 @@ 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;
+ int id;
+
down_write(&vm->lock);
+ if (xe->info.has_ctx_tlb_inval) {
+ down_read(&vm->exec_queues.lock);
+ for (id = 0; id < ARRAY_SIZE(vm->exec_queues.list); id++)
+ list_for_each_entry(eq, &vm->exec_queues.list[id],
+ vm_exec_queue_link)
+ atomic_or(q_flag, &eq->ban_reason);
+ up_read(&vm->exec_queues.lock);
+ } else {
+ list_for_each_entry(eq, &vm->preempt.exec_queues, lr.link)
+ atomic_or(q_flag, &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);
}
@@ -609,6 +626,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(q_flag, &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] 47+ messages in thread* Re: [PATCH V19 14/15] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN
2026-08-31 6:49 ` [PATCH V19 14/15] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN Tejas Upadhyay
@ 2026-08-31 9:40 ` sashiko-bot
2026-09-01 9:40 ` Upadhyay, Tejas
0 siblings, 1 reply; 47+ messages in thread
From: sashiko-bot @ 2026-08-31 9:40 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [Critical] Concurrent iteration and modification of `vm->exec_queues.list` without proper mutual exclusion causes stack-out-of-bounds access and infinite loops.
- [Medium] Missing smp_rmb() in guc_exec_queue_reset_status() allows load/store reordering, exposing an incorrect ban reason to userspace.
- [Medium] Non-LR queues are not killed synchronously by xe_vm_kill(), breaking the !exec_queue_killed() guard in the TDR and incorrectly tagging them with GPU_HANG.
--
commit 2529eb6ad7ebee39de0f89892053dcc6cfd7d3f5
Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN
This commit extends the DRM_XE_EXEC_QUEUE_GET_PROPERTY_BAN query to return a
bitmask indicating the reason for the queue ban. It adds a ban_reason field to
the queue state, updating it on GPU hang timeouts or when backing VRAM pages
are taken offline.
[ ... ]
> diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c b/drivers/gpu/drm/xe/xe_guc_submit.c
> index 99d8c807ff056..0a6e2b81b5a53 100644
> --- a/drivers/gpu/drm/xe/xe_guc_submit.c
> +++ b/drivers/gpu/drm/xe/xe_guc_submit.c
[ ... ]
> @@ -1599,6 +1600,12 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
> else
> wedged = xe_device_wedged(xe);
>
> + /*
> + * 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);
[Severity: Medium]
Since xe_vm_kill() only synchronously kills LR queues by iterating over
vm->preempt.exec_queues, non-LR queues continue running after a page offline
event until they eventually hang. When the TDR executes for these non-LR
queues, won't this check evaluate to true because they were never formally
killed by xe_vm_kill()?
If so, this seems to incorrectly tag consequence timeouts on non-LR queues
as DRM_XE_EXEC_QUEUE_BAN_REASON_GPU_HANG, contradicting the intent of this
guard.
> set_exec_queue_banned(q);
>
> /* Kick job / queue off hardware */
[ ... ]
> @@ -2580,13 +2590,29 @@ 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;
> + /* TODO: In case of multiqueue, if a secondary queue is banned due to
> + * page offlining, checking only the primary queue's GuC reset status
> + * may mask the true reason or race with it.
> + */
> + 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);
[Severity: Medium]
Is an smp_rmb() missing before this atomic_read_acquire()?
The writer side in xe_ttm_vram_purge_page() uses an smp_wmb() after setting
the ban_reason and before triggering the state change. However, on this
reader side, the relaxed reads in exec_queue_killed_or_banned_or_wedged() only
provide a control dependency, which does not guarantee load-load ordering.
Because atomic_read_acquire() does not prevent prior loads from being
reordered after it, couldn't the CPU speculatively read ban_reason before
checking the queue state?
If this reordering occurs, the reader would see a ban_reason of 0 and
incorrectly default to GPU_HANG, masking the PAGE_OFFLINE 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 456ea78a31e2a..ca97fa8291c43 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
[ ... ]
> @@ -597,7 +599,22 @@ 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;
> + int id;
> +
> down_write(&vm->lock);
> + if (xe->info.has_ctx_tlb_inval) {
> + down_read(&vm->exec_queues.lock);
> + for (id = 0; id < ARRAY_SIZE(vm->exec_queues.list); id++)
> + list_for_each_entry(eq, &vm->exec_queues.list[id],
> + vm_exec_queue_link)
> + atomic_or(q_flag, &eq->ban_reason);
> + up_read(&vm->exec_queues.lock);
[Severity: Critical]
Is it safe to iterate vm->exec_queues.list while holding only a read lock on
vm->exec_queues.lock?
It appears send_tlb_inval_ctx_ppgtt() also acquires only a read lock on
vm->exec_queues.lock, but it actively mutates this same list by temporarily
using list_move_tail() to move items to a stack-allocated list.
If xe_ttm_vram_purge_page() traverses the list under down_read() while
send_tlb_inval_ctx_ppgtt() is moving elements, could the traversal pointer
follow elements into the stack frame of send_tlb_inval_ctx_ppgtt(), causing
an out-of-bounds access or an infinite loop? Should this use down_write()
instead?
> + } else {
> + list_for_each_entry(eq, &vm->preempt.exec_queues, lr.link)
> + atomic_or(q_flag, &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);
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260831064942.315720-17-tejas.upadhyay@intel.com?part=14
^ permalink raw reply [flat|nested] 47+ messages in thread* RE: [PATCH V19 14/15] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN
2026-08-31 9:40 ` sashiko-bot
@ 2026-09-01 9:40 ` Upadhyay, Tejas
0 siblings, 0 replies; 47+ messages in thread
From: Upadhyay, Tejas @ 2026-09-01 9:40 UTC (permalink / raw)
To: sashiko-reviews@lists.linux.dev; +Cc: intel-xe@lists.freedesktop.org
> -----Original Message-----
> From: sashiko-bot@kernel.org <sashiko-bot@kernel.org>
> Sent: 31 August 2026 15:11
> To: Upadhyay, Tejas <tejas.upadhyay@intel.com>
> Cc: intel-xe@lists.freedesktop.org
> Subject: Re: [PATCH V19 14/15] drm/xe/uapi: Expose ban reason in
> EXEC_QUEUE_GET_PROPERTY_BAN
>
> Thank you for your contribution! Sashiko AI review found 3 potential issue(s)
> to consider:
> - [Critical] Concurrent iteration and modification of `vm->exec_queues.list`
> without proper mutual exclusion causes stack-out-of-bounds access and
> infinite loops.
> - [Medium] Missing smp_rmb() in guc_exec_queue_reset_status() allows
> load/store reordering, exposing an incorrect ban reason to userspace.
> - [Medium] Non-LR queues are not killed synchronously by xe_vm_kill(),
> breaking the !exec_queue_killed() guard in the TDR and incorrectly tagging
> them with GPU_HANG.
> --
>
> commit 2529eb6ad7ebee39de0f89892053dcc6cfd7d3f5
> Author: Tejas Upadhyay <tejas.upadhyay@intel.com>
>
> drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN
>
> This commit extends the DRM_XE_EXEC_QUEUE_GET_PROPERTY_BAN query
> to return a bitmask indicating the reason for the queue ban. It adds a
> ban_reason field to the queue state, updating it on GPU hang timeouts or
> when backing VRAM pages are taken offline.
>
> [ ... ]
>
> > diff --git a/drivers/gpu/drm/xe/xe_guc_submit.c
> > b/drivers/gpu/drm/xe/xe_guc_submit.c
> > index 99d8c807ff056..0a6e2b81b5a53 100644
> > --- a/drivers/gpu/drm/xe/xe_guc_submit.c
> > +++ b/drivers/gpu/drm/xe/xe_guc_submit.c
> [ ... ]
> > @@ -1599,6 +1600,12 @@ guc_exec_queue_timedout_job(struct
> drm_sched_job *drm_job)
> > else
> > wedged = xe_device_wedged(xe);
> >
> > + /*
> > + * 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);
>
> [Severity: Medium]
> Since xe_vm_kill() only synchronously kills LR queues by iterating over
> vm->preempt.exec_queues, non-LR queues continue running after a page
> vm->offline
> event until they eventually hang. When the TDR executes for these non-LR
> queues, won't this check evaluate to true because they were never formally
> killed by xe_vm_kill()?
>
> If so, this seems to incorrectly tag consequence timeouts on non-LR queues as
> DRM_XE_EXEC_QUEUE_BAN_REASON_GPU_HANG, contradicting the intent
> of this guard.
has_ctx_tlb_inval = true, iterates vm->exec_queues.list[] — tags all queues (LR + non-LR) with PAGE_OFFLINE. Also this is only about inflight jobs and that too reporting wrong reason only, very less harm.
>
> > set_exec_queue_banned(q);
> >
> > /* Kick job / queue off hardware */
> [ ... ]
> > @@ -2580,13 +2590,29 @@ 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;
> > + /* TODO: In case of multiqueue, if a secondary queue is banned due to
> > + * page offlining, checking only the primary queue's GuC reset status
> > + * may mask the true reason or race with it.
> > + */
> > + 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);
>
> [Severity: Medium]
> Is an smp_rmb() missing before this atomic_read_acquire()?
>
> The writer side in xe_ttm_vram_purge_page() uses an smp_wmb() after
> setting the ban_reason and before triggering the state change. However, on
> this reader side, the relaxed reads in
> exec_queue_killed_or_banned_or_wedged() only provide a control
> dependency, which does not guarantee load-load ordering.
> Because atomic_read_acquire() does not prevent prior loads from being
> reordered after it, couldn't the CPU speculatively read ban_reason before
> checking the queue state?
>
> If this reordering occurs, the reader would see a ban_reason of 0 and
> incorrectly default to GPU_HANG, masking the PAGE_OFFLINE reason.
control dependency (branch on state before reading reason) + writer-side smp_wmb() = correct ordering. No smp_rmb() needed
>
> > +
> > + /* 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 456ea78a31e2a..ca97fa8291c43 100644
> > --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> > +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> [ ... ]
> > @@ -597,7 +599,22 @@ 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;
> > + int id;
> > +
> > down_write(&vm->lock);
> > + if (xe->info.has_ctx_tlb_inval) {
> > + down_read(&vm->exec_queues.lock);
> > + for (id = 0; id < ARRAY_SIZE(vm->exec_queues.list);
> id++)
> > + list_for_each_entry(eq, &vm-
> >exec_queues.list[id],
> > + vm_exec_queue_link)
> > + atomic_or(q_flag, &eq->ban_reason);
> > + up_read(&vm->exec_queues.lock);
>
> [Severity: Critical]
> Is it safe to iterate vm->exec_queues.list while holding only a read lock on
> vm->exec_queues.lock?
>
> It appears send_tlb_inval_ctx_ppgtt() also acquires only a read lock on
> vm->exec_queues.lock, but it actively mutates this same list by
> vm->temporarily
> using list_move_tail() to move items to a stack-allocated list.
>
> If xe_ttm_vram_purge_page() traverses the list under down_read() while
> send_tlb_inval_ctx_ppgtt() is moving elements, could the traversal pointer
> follow elements into the stack frame of send_tlb_inval_ctx_ppgtt(), causing an
> out-of-bounds access or an infinite loop? Should this use down_write()
> instead?
Here it looks like I should use down_write( ) probably. I am looking further into this.
Tejas
>
> > + } else {
> > + list_for_each_entry(eq, &vm->preempt.exec_queues,
> lr.link)
> > + atomic_or(q_flag, &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);
> > }
>
> --
> Sashiko AI review ·
> https://sashiko.dev/#/patchset/20260831064942.315720-17-
> tejas.upadhyay@intel.com?part=14
^ permalink raw reply [flat|nested] 47+ messages in thread
* [PATCH V19 15/15] drm/xe: Add fault-inject based VRAM page offline injection
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (13 preceding siblings ...)
2026-08-31 6:49 ` [PATCH V19 14/15] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN Tejas Upadhyay
@ 2026-08-31 6:49 ` Tejas Upadhyay
2026-08-31 6:54 ` Ghimiray, Himal Prasad
2026-08-31 11:53 ` ✓ CI.KUnit: success for Add memory page offlining support (rev22) Patchwork
` (6 subsequent siblings)
21 siblings, 1 reply; 47+ messages in thread
From: Tejas Upadhyay @ 2026-08-31 6:49 UTC (permalink / raw)
To: intel-xe; +Cc: himal.prasad.ghimiray, rodrigo.vivi, 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)
v6(Himal):
- Add warning to rebind driver post test run
v5(Sashiko):
- exclude SRIOV and remove dpa_base addition, already absolute dpa
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 | 48 +++++++++++++++++++++++
drivers/gpu/drm/xe/xe_debugfs.h | 2 +
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 58 ++++++++++++++++++++++++++++
drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 1 +
4 files changed, 109 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
index cb24e001b142..80f62634fae5 100644
--- a/drivers/gpu/drm/xe/xe_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_debugfs.c
@@ -45,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_pf(struct xe_device *xe)
+{
+ return !IS_SRIOV_VF(xe) && 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.
@@ -67,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_pf },
};
/*
@@ -82,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;
+
+ xe_warn(xe, "Page offlining test interface accessed. Notice: Offlined or reserved memory pages cannot be reclaimed dynamically. A driver rebind (unbind and bind loop) is required post-test to clean up.\n");
+ 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) ?: 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)
@@ -96,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_pf(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 ca97fa8291c4..5ffd125e344b 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -866,6 +866,64 @@ 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.
+ *
+ * Note: Executing this test will permanently retire the allocated
+ * memory tracking pages. The driver must be rebinded (unbind and bind)
+ * post-test execution to reclaim the reserved space, as these pages
+ * cannot be freed or reclaimed dynamically while the current instance
+ * remains active.
+ *
+ * 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 int vram_bad_pages_show(struct seq_file *m, void *unused)
{
struct xe_device *xe = m->private;
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
index f354c26c4257..8878e36292b2 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
@@ -33,6 +33,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);
void xe_ttm_vram_debugfs_init(struct xe_device *xe, struct dentry *root);
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] 47+ messages in thread* Re: [PATCH V19 15/15] drm/xe: Add fault-inject based VRAM page offline injection
2026-08-31 6:49 ` [PATCH V19 15/15] drm/xe: Add fault-inject based VRAM page offline injection Tejas Upadhyay
@ 2026-08-31 6:54 ` Ghimiray, Himal Prasad
0 siblings, 0 replies; 47+ messages in thread
From: Ghimiray, Himal Prasad @ 2026-08-31 6:54 UTC (permalink / raw)
To: Tejas Upadhyay, intel-xe; +Cc: rodrigo.vivi
On 31-08-2026 12:19, Tejas Upadhyay wrote:
> 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)
>
> v6(Himal):
> - Add warning to rebind driver post test run
> v5(Sashiko):
> - exclude SRIOV and remove dpa_base addition, already absolute dpa
> 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 | 48 +++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_debugfs.h | 2 +
> drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 58 ++++++++++++++++++++++++++++
> drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 1 +
> 4 files changed, 109 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
> index cb24e001b142..80f62634fae5 100644
> --- a/drivers/gpu/drm/xe/xe_debugfs.c
> +++ b/drivers/gpu/drm/xe/xe_debugfs.c
> @@ -45,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_pf(struct xe_device *xe)
> +{
> + return !IS_SRIOV_VF(xe) && 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.
> @@ -67,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_pf },
> };
>
> /*
> @@ -82,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;
> +
> + xe_warn(xe, "Page offlining test interface accessed. Notice: Offlined or reserved memory pages cannot be reclaimed dynamically. A driver rebind (unbind and bind loop) is required post-test to clean up.\n");
> + 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) ?: 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)
> @@ -96,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_pf(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 ca97fa8291c4..5ffd125e344b 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
> @@ -866,6 +866,64 @@ 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.
> + *
> + * Note: Executing this test will permanently retire the allocated
> + * memory tracking pages. The driver must be rebinded (unbind and bind)
> + * post-test execution to reclaim the reserved space, as these pages
> + * cannot be freed or reclaimed dynamically while the current instance
> + * remains active.
> + *
> + * 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;
> +}
Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> +EXPORT_SYMBOL(xe_ttm_vram_inject_fault);
> +
> static int vram_bad_pages_show(struct seq_file *m, void *unused)
> {
> struct xe_device *xe = m->private;
> diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
> index f354c26c4257..8878e36292b2 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
> +++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
> @@ -33,6 +33,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);
> void xe_ttm_vram_debugfs_init(struct xe_device *xe, struct dentry *root);
> static inline struct xe_ttm_vram_mgr_resource *
> to_xe_ttm_vram_mgr_resource(struct ttm_resource *res)
^ permalink raw reply [flat|nested] 47+ messages in thread
* ✓ CI.KUnit: success for Add memory page offlining support (rev22)
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (14 preceding siblings ...)
2026-08-31 6:49 ` [PATCH V19 15/15] drm/xe: Add fault-inject based VRAM page offline injection Tejas Upadhyay
@ 2026-08-31 11:53 ` Patchwork
2026-08-31 13:28 ` ✓ Xe.CI.BAT: " Patchwork
` (5 subsequent siblings)
21 siblings, 0 replies; 47+ messages in thread
From: Patchwork @ 2026-08-31 11:53 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
== Series Details ==
Series: Add memory page offlining support (rev22)
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:51:31] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[11:51:35] 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:52:07] Starting KUnit Kernel (1/1)...
[11:52:07] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[11:52:08] ============= refcount_interrupt (4 subtests) ==============
[11:52:08] [PASSED] test_single_irq_change
[11:52:08] [PASSED] test_nested_irq_change
[11:52:08] [PASSED] test_multiple_irq_change
[11:52:08] [PASSED] test_irq_save
[11:52:08] =============== [PASSED] refcount_interrupt ================
[11:52:08] ================== guc_buf (11 subtests) ===================
[11:52:08] [PASSED] test_smallest
[11:52:08] [PASSED] test_largest
[11:52:08] [PASSED] test_granular
[11:52:08] [PASSED] test_unique
[11:52:08] [PASSED] test_overlap
[11:52:08] [PASSED] test_reusable
[11:52:08] [PASSED] test_too_big
[11:52:08] [PASSED] test_flush
[11:52:08] [PASSED] test_lookup
[11:52:08] [PASSED] test_data
[11:52:08] [PASSED] test_class
[11:52:08] ===================== [PASSED] guc_buf =====================
[11:52:08] =================== guc_dbm (7 subtests) ===================
[11:52:08] [PASSED] test_empty
[11:52:08] [PASSED] test_default
[11:52:08] ======================== test_size ========================
[11:52:08] [PASSED] 4
[11:52:08] [PASSED] 8
[11:52:08] [PASSED] 32
[11:52:08] [PASSED] 256
[11:52:08] ==================== [PASSED] test_size ====================
[11:52:08] ======================= test_reuse ========================
[11:52:08] [PASSED] 4
[11:52:08] [PASSED] 8
[11:52:08] [PASSED] 32
[11:52:08] [PASSED] 256
[11:52:08] =================== [PASSED] test_reuse ====================
[11:52:08] =================== test_range_overlap ====================
[11:52:08] [PASSED] 4
[11:52:08] [PASSED] 8
[11:52:08] [PASSED] 32
[11:52:08] [PASSED] 256
[11:52:08] =============== [PASSED] test_range_overlap ================
[11:52:08] =================== test_range_compact ====================
[11:52:08] [PASSED] 4
[11:52:08] [PASSED] 8
[11:52:08] [PASSED] 32
[11:52:08] [PASSED] 256
[11:52:08] =============== [PASSED] test_range_compact ================
[11:52:08] ==================== test_range_spare =====================
[11:52:08] [PASSED] 4
[11:52:08] [PASSED] 8
[11:52:08] [PASSED] 32
[11:52:08] [PASSED] 256
[11:52:08] ================ [PASSED] test_range_spare =================
[11:52:08] ===================== [PASSED] guc_dbm =====================
[11:52:08] =================== guc_idm (6 subtests) ===================
[11:52:08] [PASSED] bad_init
[11:52:08] [PASSED] no_init
[11:52:08] [PASSED] init_fini
[11:52:08] [PASSED] check_used
[11:52:08] [PASSED] check_quota
[11:52:08] [PASSED] check_all
[11:52:08] ===================== [PASSED] guc_idm =====================
[11:52:08] =============== guc_klv_helpers (9 subtests) ===============
[11:52:08] [PASSED] test_count
[11:52:08] [PASSED] test_encode_u32
[11:52:08] [PASSED] test_encode_u64
[11:52:08] [PASSED] test_encode_string
[11:52:08] [PASSED] test_encode_object_raw
[11:52:08] [PASSED] test_encode_object_klv
[11:52:08] [PASSED] test_encode_object_nested
[11:52:08] [PASSED] test_encode_object_basic
[11:52:08] [PASSED] test_print
[11:52:08] ================= [PASSED] guc_klv_helpers =================
[11:52:08] =================== xe_log (4 subtests) ====================
[11:52:08] [PASSED] demo_cper
[11:52:08] [PASSED] demo_dmesg
[11:52:08] ======================= test_dmesg ========================
[11:52:08] [PASSED] test_fatal
[11:52:08] [PASSED] test_fatal_tile
[11:52:08] [PASSED] test_fatal_gt
[11:52:08] [PASSED] test_fatal_comp
[11:52:08] [PASSED] test_fatal_comp_tile
[11:52:08] [PASSED] test_fatal_comp_gt
[11:52:08] [PASSED] test_fatal_all
[11:52:08] [PASSED] test_recoverable
[11:52:08] [PASSED] test_recoverable_tile
[11:52:08] [PASSED] test_recoverable_gt
[11:52:08] [PASSED] test_recoverable_comp
[11:52:08] [PASSED] test_recoverable_comp_tile
[11:52:08] [PASSED] test_recoverable_comp_gt
[11:52:08] [PASSED] test_recoverable_all
[11:52:08] [PASSED] test_info
[11:52:08] [PASSED] test_info_tile
[11:52:08] [PASSED] test_info_gt
[11:52:08] [PASSED] test_info_err
[11:52:08] [PASSED] test_info_comp
[11:52:08] [PASSED] test_info_comp_tile
[11:52:08] [PASSED] test_info_comp_gt
[11:52:08] [PASSED] test_info_all
[11:52:08] [PASSED] test_hw_fatal
[11:52:08] [PASSED] test_hw_recoverable
[11:52:08] [PASSED] test_hw_corrected
[11:52:08] [PASSED] test_hw_informational
[11:52:08] =================== [PASSED] test_dmesg ====================
[11:52:08] ====================== test_invalid =======================
[11:52:08] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[11:52:08] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[11:52:08] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[11:52:08] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[11:52:08] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[11:52:08] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[11:52:08] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[11:52:08] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[11:52:08] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[11:52:08] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[11:52:08] ================== [SKIPPED] test_invalid ==================
[11:52:08] ===================== [PASSED] xe_log ======================
[11:52:08] ================== no_relay (3 subtests) ===================
[11:52:08] [PASSED] xe_drops_guc2pf_if_not_ready
[11:52:08] [PASSED] xe_drops_guc2vf_if_not_ready
[11:52:08] [PASSED] xe_rejects_send_if_not_ready
[11:52:08] ==================== [PASSED] no_relay =====================
[11:52:08] ================== pf_relay (14 subtests) ==================
[11:52:08] [PASSED] pf_rejects_guc2pf_too_short
[11:52:08] [PASSED] pf_rejects_guc2pf_too_long
[11:52:08] [PASSED] pf_rejects_guc2pf_no_payload
[11:52:08] [PASSED] pf_fails_no_payload
[11:52:08] [PASSED] pf_fails_bad_origin
[11:52:08] [PASSED] pf_fails_bad_type
[11:52:08] [PASSED] pf_txn_reports_error
[11:52:08] [PASSED] pf_txn_sends_pf2guc
[11:52:08] [PASSED] pf_sends_pf2guc
[11:52:08] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:52:08] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:52:08] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:52:08] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:52:08] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[11:52:08] ==================== [PASSED] pf_relay =====================
[11:52:08] ================== vf_relay (3 subtests) ===================
[11:52:08] [PASSED] vf_rejects_guc2vf_too_short
[11:52:08] [PASSED] vf_rejects_guc2vf_too_long
[11:52:08] [PASSED] vf_rejects_guc2vf_no_payload
[11:52:08] ==================== [PASSED] vf_relay =====================
[11:52:08] ================ pf_gt_config (9 subtests) =================
[11:52:08] [PASSED] fair_contexts_1vf
[11:52:08] [PASSED] fair_doorbells_1vf
[11:52:08] [PASSED] fair_ggtt_1vf
[11:52:08] ====================== fair_vram_1vf ======================
[11:52:08] [PASSED] 3.50 GiB
[11:52:08] [PASSED] 11.5 GiB
[11:52:08] [PASSED] 15.5 GiB
[11:52:08] [PASSED] 31.5 GiB
[11:52:08] [PASSED] 63.5 GiB
[11:52:08] [PASSED] 1.91 GiB
[11:52:08] ================== [PASSED] fair_vram_1vf ==================
[11:52:08] ================ fair_vram_1vf_admin_only =================
[11:52:08] [PASSED] 3.50 GiB
[11:52:08] [PASSED] 11.5 GiB
[11:52:08] [PASSED] 15.5 GiB
[11:52:08] [PASSED] 31.5 GiB
[11:52:08] [PASSED] 63.5 GiB
[11:52:08] [PASSED] 1.91 GiB
[11:52:08] ============ [PASSED] fair_vram_1vf_admin_only =============
[11:52:08] ====================== fair_contexts ======================
[11:52:08] [PASSED] 1 VF
[11:52:08] [PASSED] 2 VFs
[11:52:08] [PASSED] 3 VFs
[11:52:08] [PASSED] 4 VFs
[11:52:08] [PASSED] 5 VFs
[11:52:08] [PASSED] 6 VFs
[11:52:08] [PASSED] 7 VFs
[11:52:08] [PASSED] 8 VFs
[11:52:08] [PASSED] 9 VFs
[11:52:08] [PASSED] 10 VFs
[11:52:08] [PASSED] 11 VFs
[11:52:08] [PASSED] 12 VFs
[11:52:08] [PASSED] 13 VFs
[11:52:08] [PASSED] 14 VFs
[11:52:08] [PASSED] 15 VFs
[11:52:08] [PASSED] 16 VFs
[11:52:08] [PASSED] 17 VFs
[11:52:08] [PASSED] 18 VFs
[11:52:08] [PASSED] 19 VFs
[11:52:08] [PASSED] 20 VFs
[11:52:08] [PASSED] 21 VFs
[11:52:08] [PASSED] 22 VFs
[11:52:08] [PASSED] 23 VFs
[11:52:08] [PASSED] 24 VFs
[11:52:08] [PASSED] 25 VFs
[11:52:08] [PASSED] 26 VFs
[11:52:08] [PASSED] 27 VFs
[11:52:08] [PASSED] 28 VFs
[11:52:08] [PASSED] 29 VFs
[11:52:08] [PASSED] 30 VFs
[11:52:08] [PASSED] 31 VFs
[11:52:08] [PASSED] 32 VFs
[11:52:08] [PASSED] 33 VFs
[11:52:08] [PASSED] 34 VFs
[11:52:08] [PASSED] 35 VFs
[11:52:08] [PASSED] 36 VFs
[11:52:08] [PASSED] 37 VFs
[11:52:08] [PASSED] 38 VFs
[11:52:08] [PASSED] 39 VFs
[11:52:08] [PASSED] 40 VFs
[11:52:08] [PASSED] 41 VFs
[11:52:08] [PASSED] 42 VFs
[11:52:08] [PASSED] 43 VFs
[11:52:08] [PASSED] 44 VFs
[11:52:08] [PASSED] 45 VFs
[11:52:08] [PASSED] 46 VFs
[11:52:08] [PASSED] 47 VFs
[11:52:08] [PASSED] 48 VFs
[11:52:08] [PASSED] 49 VFs
[11:52:08] [PASSED] 50 VFs
[11:52:08] [PASSED] 51 VFs
[11:52:08] [PASSED] 52 VFs
[11:52:08] [PASSED] 53 VFs
[11:52:08] [PASSED] 54 VFs
[11:52:08] [PASSED] 55 VFs
[11:52:08] [PASSED] 56 VFs
[11:52:08] [PASSED] 57 VFs
[11:52:08] [PASSED] 58 VFs
[11:52:08] [PASSED] 59 VFs
[11:52:08] [PASSED] 60 VFs
[11:52:08] [PASSED] 61 VFs
[11:52:08] [PASSED] 62 VFs
[11:52:08] [PASSED] 63 VFs
[11:52:08] ================== [PASSED] fair_contexts ==================
[11:52:08] ===================== fair_doorbells ======================
[11:52:08] [PASSED] 1 VF
[11:52:08] [PASSED] 2 VFs
[11:52:08] [PASSED] 3 VFs
[11:52:08] [PASSED] 4 VFs
[11:52:08] [PASSED] 5 VFs
[11:52:08] [PASSED] 6 VFs
[11:52:08] [PASSED] 7 VFs
[11:52:08] [PASSED] 8 VFs
[11:52:08] [PASSED] 9 VFs
[11:52:08] [PASSED] 10 VFs
[11:52:08] [PASSED] 11 VFs
[11:52:08] [PASSED] 12 VFs
[11:52:08] [PASSED] 13 VFs
[11:52:08] [PASSED] 14 VFs
[11:52:08] [PASSED] 15 VFs
[11:52:08] [PASSED] 16 VFs
[11:52:08] [PASSED] 17 VFs
[11:52:08] [PASSED] 18 VFs
[11:52:08] [PASSED] 19 VFs
[11:52:08] [PASSED] 20 VFs
[11:52:08] [PASSED] 21 VFs
[11:52:08] [PASSED] 22 VFs
[11:52:08] [PASSED] 23 VFs
[11:52:08] [PASSED] 24 VFs
[11:52:08] [PASSED] 25 VFs
[11:52:08] [PASSED] 26 VFs
[11:52:08] [PASSED] 27 VFs
[11:52:08] [PASSED] 28 VFs
[11:52:08] [PASSED] 29 VFs
[11:52:08] [PASSED] 30 VFs
[11:52:08] [PASSED] 31 VFs
[11:52:08] [PASSED] 32 VFs
[11:52:08] [PASSED] 33 VFs
[11:52:08] [PASSED] 34 VFs
[11:52:08] [PASSED] 35 VFs
[11:52:08] [PASSED] 36 VFs
[11:52:08] [PASSED] 37 VFs
[11:52:08] [PASSED] 38 VFs
[11:52:08] [PASSED] 39 VFs
[11:52:08] [PASSED] 40 VFs
[11:52:08] [PASSED] 41 VFs
[11:52:08] [PASSED] 42 VFs
[11:52:08] [PASSED] 43 VFs
[11:52:08] [PASSED] 44 VFs
[11:52:08] [PASSED] 45 VFs
[11:52:08] [PASSED] 46 VFs
[11:52:08] [PASSED] 47 VFs
[11:52:08] [PASSED] 48 VFs
[11:52:08] [PASSED] 49 VFs
[11:52:08] [PASSED] 50 VFs
[11:52:08] [PASSED] 51 VFs
[11:52:08] [PASSED] 52 VFs
[11:52:08] [PASSED] 53 VFs
[11:52:08] [PASSED] 54 VFs
[11:52:08] [PASSED] 55 VFs
[11:52:08] [PASSED] 56 VFs
[11:52:08] [PASSED] 57 VFs
[11:52:08] [PASSED] 58 VFs
[11:52:08] [PASSED] 59 VFs
[11:52:08] [PASSED] 60 VFs
[11:52:08] [PASSED] 61 VFs
[11:52:08] [PASSED] 62 VFs
[11:52:08] [PASSED] 63 VFs
[11:52:08] ================= [PASSED] fair_doorbells ==================
[11:52:08] ======================== fair_ggtt ========================
[11:52:08] [PASSED] 1 VF
[11:52:08] [PASSED] 2 VFs
[11:52:08] [PASSED] 3 VFs
[11:52:08] [PASSED] 4 VFs
[11:52:08] [PASSED] 5 VFs
[11:52:08] [PASSED] 6 VFs
[11:52:08] [PASSED] 7 VFs
[11:52:08] [PASSED] 8 VFs
[11:52:08] [PASSED] 9 VFs
[11:52:08] [PASSED] 10 VFs
[11:52:08] [PASSED] 11 VFs
[11:52:08] [PASSED] 12 VFs
[11:52:08] [PASSED] 13 VFs
[11:52:08] [PASSED] 14 VFs
[11:52:08] [PASSED] 15 VFs
[11:52:08] [PASSED] 16 VFs
[11:52:08] [PASSED] 17 VFs
[11:52:08] [PASSED] 18 VFs
[11:52:08] [PASSED] 19 VFs
[11:52:08] [PASSED] 20 VFs
[11:52:08] [PASSED] 21 VFs
[11:52:08] [PASSED] 22 VFs
[11:52:08] [PASSED] 23 VFs
[11:52:08] [PASSED] 24 VFs
[11:52:08] [PASSED] 25 VFs
[11:52:08] [PASSED] 26 VFs
[11:52:08] [PASSED] 27 VFs
[11:52:08] [PASSED] 28 VFs
[11:52:08] [PASSED] 29 VFs
[11:52:08] [PASSED] 30 VFs
[11:52:08] [PASSED] 31 VFs
[11:52:08] [PASSED] 32 VFs
[11:52:08] [PASSED] 33 VFs
[11:52:08] [PASSED] 34 VFs
[11:52:08] [PASSED] 35 VFs
[11:52:08] [PASSED] 36 VFs
[11:52:08] [PASSED] 37 VFs
[11:52:08] [PASSED] 38 VFs
[11:52:08] [PASSED] 39 VFs
[11:52:08] [PASSED] 40 VFs
[11:52:08] [PASSED] 41 VFs
[11:52:08] [PASSED] 42 VFs
[11:52:08] [PASSED] 43 VFs
[11:52:08] [PASSED] 44 VFs
[11:52:08] [PASSED] 45 VFs
[11:52:08] [PASSED] 46 VFs
[11:52:08] [PASSED] 47 VFs
[11:52:08] [PASSED] 48 VFs
[11:52:08] [PASSED] 49 VFs
[11:52:08] [PASSED] 50 VFs
[11:52:08] [PASSED] 51 VFs
[11:52:08] [PASSED] 52 VFs
[11:52:08] [PASSED] 53 VFs
[11:52:08] [PASSED] 54 VFs
[11:52:08] [PASSED] 55 VFs
[11:52:08] [PASSED] 56 VFs
[11:52:08] [PASSED] 57 VFs
[11:52:08] [PASSED] 58 VFs
[11:52:08] [PASSED] 59 VFs
[11:52:08] [PASSED] 60 VFs
[11:52:08] [PASSED] 61 VFs
[11:52:08] [PASSED] 62 VFs
[11:52:08] [PASSED] 63 VFs
[11:52:08] ==================== [PASSED] fair_ggtt ====================
[11:52:08] ======================== fair_vram ========================
[11:52:08] [PASSED] 1 VF
[11:52:08] [PASSED] 2 VFs
[11:52:08] [PASSED] 3 VFs
[11:52:08] [PASSED] 4 VFs
[11:52:08] [PASSED] 5 VFs
[11:52:08] [PASSED] 6 VFs
[11:52:08] [PASSED] 7 VFs
[11:52:08] [PASSED] 8 VFs
[11:52:08] [PASSED] 9 VFs
[11:52:08] [PASSED] 10 VFs
[11:52:08] [PASSED] 11 VFs
[11:52:08] [PASSED] 12 VFs
[11:52:08] [PASSED] 13 VFs
[11:52:08] [PASSED] 14 VFs
[11:52:08] [PASSED] 15 VFs
[11:52:08] [PASSED] 16 VFs
[11:52:08] [PASSED] 17 VFs
[11:52:08] [PASSED] 18 VFs
[11:52:08] [PASSED] 19 VFs
[11:52:08] [PASSED] 20 VFs
[11:52:08] [PASSED] 21 VFs
[11:52:08] [PASSED] 22 VFs
[11:52:08] [PASSED] 23 VFs
[11:52:08] [PASSED] 24 VFs
[11:52:08] [PASSED] 25 VFs
[11:52:08] [PASSED] 26 VFs
[11:52:08] [PASSED] 27 VFs
[11:52:08] [PASSED] 28 VFs
[11:52:08] [PASSED] 29 VFs
[11:52:08] [PASSED] 30 VFs
[11:52:08] [PASSED] 31 VFs
[11:52:08] [PASSED] 32 VFs
[11:52:08] [PASSED] 33 VFs
[11:52:08] [PASSED] 34 VFs
[11:52:08] [PASSED] 35 VFs
[11:52:08] [PASSED] 36 VFs
[11:52:08] [PASSED] 37 VFs
[11:52:08] [PASSED] 38 VFs
[11:52:08] [PASSED] 39 VFs
[11:52:08] [PASSED] 40 VFs
[11:52:08] [PASSED] 41 VFs
[11:52:08] [PASSED] 42 VFs
[11:52:08] [PASSED] 43 VFs
[11:52:08] [PASSED] 44 VFs
[11:52:08] [PASSED] 45 VFs
[11:52:08] [PASSED] 46 VFs
[11:52:08] [PASSED] 47 VFs
[11:52:08] [PASSED] 48 VFs
[11:52:08] [PASSED] 49 VFs
[11:52:08] [PASSED] 50 VFs
[11:52:08] [PASSED] 51 VFs
[11:52:08] [PASSED] 52 VFs
[11:52:08] [PASSED] 53 VFs
[11:52:08] [PASSED] 54 VFs
[11:52:08] [PASSED] 55 VFs
[11:52:08] [PASSED] 56 VFs
[11:52:08] [PASSED] 57 VFs
[11:52:08] [PASSED] 58 VFs
[11:52:08] [PASSED] 59 VFs
[11:52:08] [PASSED] 60 VFs
[11:52:08] [PASSED] 61 VFs
[11:52:08] [PASSED] 62 VFs
[11:52:08] [PASSED] 63 VFs
[11:52:08] ==================== [PASSED] fair_vram ====================
[11:52:08] ================== [PASSED] pf_gt_config ===================
[11:52:08] ===================== lmtt (1 subtest) =====================
[11:52:08] ======================== test_ops =========================
[11:52:08] [PASSED] 2-level
[11:52:08] [PASSED] multi-level
[11:52:08] ==================== [PASSED] test_ops =====================
[11:52:08] ====================== [PASSED] lmtt =======================
[11:52:08] ================= sriov_packet (1 subtest) =================
[11:52:08] [PASSED] test_descriptor_init
[11:52:08] ================== [PASSED] sriov_packet ===================
[11:52:08] ================= pf_service (11 subtests) =================
[11:52:08] [PASSED] pf_negotiate_any
[11:52:08] [PASSED] pf_negotiate_base_match
[11:52:08] [PASSED] pf_negotiate_base_newer
[11:52:08] [PASSED] pf_negotiate_base_next
[11:52:08] [SKIPPED] pf_negotiate_base_older (no older minor)
[11:52:08] [PASSED] pf_negotiate_base_prev
[11:52:08] [PASSED] pf_negotiate_latest_match
[11:52:08] [PASSED] pf_negotiate_latest_newer
[11:52:08] [PASSED] pf_negotiate_latest_next
[11:52:08] [SKIPPED] pf_negotiate_latest_older (no older minor)
[11:52:08] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[11:52:08] =================== [PASSED] pf_service ====================
[11:52:08] ================= xe_guc_g2g (2 subtests) ==================
[11:52:08] ============== xe_live_guc_g2g_kunit_default ==============
[11:52:08] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[11:52:08] ============== xe_live_guc_g2g_kunit_allmem ===============
[11:52:08] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[11:52:08] =================== [SKIPPED] xe_guc_g2g ===================
[11:52:08] =================== xe_mocs (2 subtests) ===================
[11:52:08] ================ xe_live_mocs_kernel_kunit ================
[11:52:08] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[11:52:08] ================ xe_live_mocs_reset_kunit =================
[11:52:08] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[11:52:08] ==================== [SKIPPED] xe_mocs =====================
[11:52:08] ================= xe_migrate (2 subtests) ==================
[11:52:08] ================= xe_migrate_sanity_kunit =================
[11:52:08] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[11:52:08] ================== xe_validate_ccs_kunit ==================
[11:52:08] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[11:52:08] =================== [SKIPPED] xe_migrate ===================
[11:52:08] ================== xe_dma_buf (1 subtest) ==================
[11:52:08] ==================== xe_dma_buf_kunit =====================
[11:52:08] ================ [SKIPPED] xe_dma_buf_kunit ================
[11:52:08] =================== [SKIPPED] xe_dma_buf ===================
[11:52:08] ================= xe_bo_shrink (1 subtest) =================
[11:52:08] =================== xe_bo_shrink_kunit ====================
[11:52:08] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[11:52:08] ================== [SKIPPED] xe_bo_shrink ==================
[11:52:08] ==================== xe_bo (2 subtests) ====================
[11:52:08] ================== xe_ccs_migrate_kunit ===================
[11:52:08] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[11:52:08] ==================== xe_bo_evict_kunit ====================
[11:52:08] =============== [SKIPPED] xe_bo_evict_kunit ================
[11:52:08] ===================== [SKIPPED] xe_bo ======================
[11:52:08] =================== xe_any (9 subtests) ====================
[11:52:08] [PASSED] test_to_xe
[11:52:08] [PASSED] test_to_dev
[11:52:08] [PASSED] test_to_pdev
[11:52:08] [PASSED] test_to_drm
[11:52:08] [PASSED] test_if_pdev
[11:52:08] [PASSED] test_if_xe
[11:52:08] [PASSED] test_if_tile
[11:52:08] [PASSED] test_if_gt
[11:52:08] [PASSED] test_to_id
[11:52:08] ===================== [PASSED] xe_any ======================
[11:52:08] ==================== args (13 subtests) ====================
[11:52:08] [PASSED] count_args_test
[11:52:08] [PASSED] call_args_example
[11:52:08] [PASSED] call_args_test
[11:52:08] [PASSED] drop_first_arg_example
[11:52:08] [PASSED] drop_first_arg_test
[11:52:08] [PASSED] first_arg_example
[11:52:08] [PASSED] first_arg_test
[11:52:08] [PASSED] last_arg_example
[11:52:08] [PASSED] last_arg_test
[11:52:08] [PASSED] pick_arg_example
[11:52:08] [PASSED] if_args_example
[11:52:08] [PASSED] if_args_test
[11:52:08] [PASSED] sep_comma_example
[11:52:08] ====================== [PASSED] args =======================
[11:52:08] =================== xe_pci (3 subtests) ====================
[11:52:08] ==================== check_graphics_ip ====================
[11:52:08] [PASSED] 12.00 Xe_LP
[11:52:08] [PASSED] 12.10 Xe_LP+
[11:52:08] [PASSED] 12.55 Xe_HPG
[11:52:08] [PASSED] 12.60 Xe_HPC
[11:52:08] [PASSED] 12.70 Xe_LPG
[11:52:08] [PASSED] 12.71 Xe_LPG
[11:52:08] [PASSED] 12.74 Xe_LPG+
[11:52:08] [PASSED] 20.01 Xe2_HPG
[11:52:08] [PASSED] 20.02 Xe2_HPG
[11:52:08] [PASSED] 20.04 Xe2_LPG
[11:52:08] [PASSED] 30.00 Xe3_LPG
[11:52:08] [PASSED] 30.01 Xe3_LPG
[11:52:08] [PASSED] 30.03 Xe3_LPG
[11:52:08] [PASSED] 30.04 Xe3_LPG
[11:52:08] [PASSED] 30.05 Xe3_LPG
[11:52:08] [PASSED] 35.10 Xe3p_LPG
[11:52:08] [PASSED] 35.11 Xe3p_XPC
[11:52:08] ================ [PASSED] check_graphics_ip ================
[11:52:08] ===================== check_media_ip ======================
[11:52:08] [PASSED] 12.00 Xe_M
[11:52:08] [PASSED] 12.55 Xe_HPM
[11:52:08] [PASSED] 13.00 Xe_LPM+
[11:52:08] [PASSED] 13.01 Xe2_HPM
[11:52:08] [PASSED] 20.00 Xe2_LPM
[11:52:08] [PASSED] 30.00 Xe3_LPM
[11:52:08] [PASSED] 30.02 Xe3_LPM
[11:52:08] [PASSED] 35.00 Xe3p_LPM
[11:52:08] [PASSED] 35.03 Xe3p_HPM
[11:52:08] ================= [PASSED] check_media_ip ==================
[11:52:08] =================== check_platform_desc ===================
[11:52:08] [PASSED] 0x9A60 (TIGERLAKE)
[11:52:08] [PASSED] 0x9A68 (TIGERLAKE)
[11:52:08] [PASSED] 0x9A70 (TIGERLAKE)
[11:52:08] [PASSED] 0x9A40 (TIGERLAKE)
[11:52:08] [PASSED] 0x9A49 (TIGERLAKE)
[11:52:08] [PASSED] 0x9A59 (TIGERLAKE)
[11:52:08] [PASSED] 0x9A78 (TIGERLAKE)
[11:52:08] [PASSED] 0x9AC0 (TIGERLAKE)
[11:52:08] [PASSED] 0x9AC9 (TIGERLAKE)
[11:52:08] [PASSED] 0x9AD9 (TIGERLAKE)
[11:52:08] [PASSED] 0x9AF8 (TIGERLAKE)
[11:52:08] [PASSED] 0x4C80 (ROCKETLAKE)
[11:52:08] [PASSED] 0x4C8A (ROCKETLAKE)
[11:52:08] [PASSED] 0x4C8B (ROCKETLAKE)
[11:52:08] [PASSED] 0x4C8C (ROCKETLAKE)
[11:52:08] [PASSED] 0x4C90 (ROCKETLAKE)
[11:52:08] [PASSED] 0x4C9A (ROCKETLAKE)
[11:52:08] [PASSED] 0x4680 (ALDERLAKE_S)
[11:52:08] [PASSED] 0x4682 (ALDERLAKE_S)
[11:52:08] [PASSED] 0x4688 (ALDERLAKE_S)
[11:52:08] [PASSED] 0x468A (ALDERLAKE_S)
[11:52:08] [PASSED] 0x468B (ALDERLAKE_S)
[11:52:08] [PASSED] 0x4690 (ALDERLAKE_S)
[11:52:08] [PASSED] 0x4692 (ALDERLAKE_S)
[11:52:08] [PASSED] 0x4693 (ALDERLAKE_S)
[11:52:08] [PASSED] 0x46A0 (ALDERLAKE_P)
[11:52:08] [PASSED] 0x46A1 (ALDERLAKE_P)
[11:52:08] [PASSED] 0x46A2 (ALDERLAKE_P)
[11:52:08] [PASSED] 0x46A3 (ALDERLAKE_P)
[11:52:08] [PASSED] 0x46A6 (ALDERLAKE_P)
[11:52:08] [PASSED] 0x46A8 (ALDERLAKE_P)
[11:52:08] [PASSED] 0x46AA (ALDERLAKE_P)
[11:52:08] [PASSED] 0x462A (ALDERLAKE_P)
[11:52:08] [PASSED] 0x4626 (ALDERLAKE_P)
[11:52:08] [PASSED] 0x4628 (ALDERLAKE_P)
[11:52:08] [PASSED] 0x46B0 (ALDERLAKE_P)
[11:52:08] [PASSED] 0x46B1 (ALDERLAKE_P)
[11:52:08] [PASSED] 0x46B2 (ALDERLAKE_P)
[11:52:08] [PASSED] 0x46B3 (ALDERLAKE_P)
[11:52:08] [PASSED] 0x46C0 (ALDERLAKE_P)
[11:52:08] [PASSED] 0x46C1 (ALDERLAKE_P)
[11:52:08] [PASSED] 0x46C2 (ALDERLAKE_P)
[11:52:08] [PASSED] 0x46C3 (ALDERLAKE_P)
[11:52:08] [PASSED] 0x46D0 (ALDERLAKE_N)
[11:52:08] [PASSED] 0x46D1 (ALDERLAKE_N)
[11:52:08] [PASSED] 0x46D2 (ALDERLAKE_N)
[11:52:08] [PASSED] 0x46D3 (ALDERLAKE_N)
[11:52:08] [PASSED] 0x46D4 (ALDERLAKE_N)
[11:52:08] [PASSED] 0xA721 (ALDERLAKE_P)
[11:52:08] [PASSED] 0xA7A1 (ALDERLAKE_P)
[11:52:08] [PASSED] 0xA7A9 (ALDERLAKE_P)
[11:52:08] [PASSED] 0xA7AC (ALDERLAKE_P)
[11:52:08] [PASSED] 0xA7AD (ALDERLAKE_P)
[11:52:08] [PASSED] 0xA720 (ALDERLAKE_P)
[11:52:08] [PASSED] 0xA7A0 (ALDERLAKE_P)
[11:52:08] [PASSED] 0xA7A8 (ALDERLAKE_P)
[11:52:08] [PASSED] 0xA7AA (ALDERLAKE_P)
[11:52:08] [PASSED] 0xA7AB (ALDERLAKE_P)
[11:52:08] [PASSED] 0xA780 (ALDERLAKE_S)
[11:52:08] [PASSED] 0xA781 (ALDERLAKE_S)
[11:52:08] [PASSED] 0xA782 (ALDERLAKE_S)
[11:52:08] [PASSED] 0xA783 (ALDERLAKE_S)
[11:52:08] [PASSED] 0xA788 (ALDERLAKE_S)
[11:52:08] [PASSED] 0xA789 (ALDERLAKE_S)
[11:52:08] [PASSED] 0xA78A (ALDERLAKE_S)
[11:52:08] [PASSED] 0xA78B (ALDERLAKE_S)
[11:52:08] [PASSED] 0x4905 (DG1)
[11:52:08] [PASSED] 0x4906 (DG1)
[11:52:08] [PASSED] 0x4907 (DG1)
[11:52:08] [PASSED] 0x4908 (DG1)
[11:52:08] [PASSED] 0x4909 (DG1)
[11:52:08] [PASSED] 0x56C0 (DG2)
[11:52:08] [PASSED] 0x56C2 (DG2)
[11:52:08] [PASSED] 0x56C1 (DG2)
[11:52:08] [PASSED] 0x7D51 (METEORLAKE)
[11:52:08] [PASSED] 0x7DD1 (METEORLAKE)
[11:52:08] [PASSED] 0x7D41 (METEORLAKE)
[11:52:08] [PASSED] 0x7D67 (METEORLAKE)
[11:52:08] [PASSED] 0xB640 (METEORLAKE)
[11:52:08] [PASSED] 0x56A0 (DG2)
[11:52:08] [PASSED] 0x56A1 (DG2)
[11:52:08] [PASSED] 0x56A2 (DG2)
[11:52:08] [PASSED] 0x56BE (DG2)
[11:52:08] [PASSED] 0x56BF (DG2)
[11:52:08] [PASSED] 0x5690 (DG2)
[11:52:08] [PASSED] 0x5691 (DG2)
[11:52:08] [PASSED] 0x5692 (DG2)
[11:52:08] [PASSED] 0x56A5 (DG2)
[11:52:08] [PASSED] 0x56A6 (DG2)
[11:52:08] [PASSED] 0x56B0 (DG2)
[11:52:08] [PASSED] 0x56B1 (DG2)
[11:52:08] [PASSED] 0x56BA (DG2)
[11:52:08] [PASSED] 0x56BB (DG2)
[11:52:08] [PASSED] 0x56BC (DG2)
[11:52:08] [PASSED] 0x56BD (DG2)
[11:52:08] [PASSED] 0x5693 (DG2)
[11:52:08] [PASSED] 0x5694 (DG2)
[11:52:08] [PASSED] 0x5695 (DG2)
[11:52:08] [PASSED] 0x56A3 (DG2)
[11:52:08] [PASSED] 0x56A4 (DG2)
[11:52:08] [PASSED] 0x56B2 (DG2)
[11:52:08] [PASSED] 0x56B3 (DG2)
[11:52:08] [PASSED] 0x5696 (DG2)
[11:52:08] [PASSED] 0x5697 (DG2)
[11:52:08] [PASSED] 0xB69 (PVC)
[11:52:08] [PASSED] 0xB6E (PVC)
[11:52:08] [PASSED] 0xBD4 (PVC)
[11:52:08] [PASSED] 0xBD5 (PVC)
[11:52:08] [PASSED] 0xBD6 (PVC)
[11:52:08] [PASSED] 0xBD7 (PVC)
[11:52:08] [PASSED] 0xBD8 (PVC)
[11:52:08] [PASSED] 0xBD9 (PVC)
[11:52:08] [PASSED] 0xBDA (PVC)
[11:52:08] [PASSED] 0xBDB (PVC)
[11:52:08] [PASSED] 0xBE0 (PVC)
[11:52:08] [PASSED] 0xBE1 (PVC)
[11:52:08] [PASSED] 0xBE5 (PVC)
[11:52:08] [PASSED] 0x7D40 (METEORLAKE)
[11:52:08] [PASSED] 0x7D45 (METEORLAKE)
[11:52:08] [PASSED] 0x7D55 (METEORLAKE)
[11:52:08] [PASSED] 0x7D60 (METEORLAKE)
[11:52:08] [PASSED] 0x7DD5 (METEORLAKE)
[11:52:08] [PASSED] 0x6420 (LUNARLAKE)
[11:52:08] [PASSED] 0x64A0 (LUNARLAKE)
[11:52:08] [PASSED] 0x64B0 (LUNARLAKE)
[11:52:08] [PASSED] 0xE202 (BATTLEMAGE)
[11:52:08] [PASSED] 0xE209 (BATTLEMAGE)
[11:52:08] [PASSED] 0xE20B (BATTLEMAGE)
[11:52:08] [PASSED] 0xE20C (BATTLEMAGE)
[11:52:08] [PASSED] 0xE20D (BATTLEMAGE)
[11:52:08] [PASSED] 0xE210 (BATTLEMAGE)
[11:52:08] [PASSED] 0xE211 (BATTLEMAGE)
[11:52:08] [PASSED] 0xE212 (BATTLEMAGE)
[11:52:08] [PASSED] 0xE216 (BATTLEMAGE)
[11:52:08] [PASSED] 0xE220 (BATTLEMAGE)
[11:52:08] [PASSED] 0xE221 (BATTLEMAGE)
[11:52:08] [PASSED] 0xE222 (BATTLEMAGE)
[11:52:08] [PASSED] 0xE223 (BATTLEMAGE)
[11:52:08] [PASSED] 0xB080 (PANTHERLAKE)
[11:52:08] [PASSED] 0xB081 (PANTHERLAKE)
[11:52:08] [PASSED] 0xB082 (PANTHERLAKE)
[11:52:08] [PASSED] 0xB083 (PANTHERLAKE)
[11:52:08] [PASSED] 0xB084 (PANTHERLAKE)
[11:52:08] [PASSED] 0xB085 (PANTHERLAKE)
[11:52:08] [PASSED] 0xB086 (PANTHERLAKE)
[11:52:08] [PASSED] 0xB087 (PANTHERLAKE)
[11:52:08] [PASSED] 0xB08F (PANTHERLAKE)
[11:52:08] [PASSED] 0xB090 (PANTHERLAKE)
[11:52:08] [PASSED] 0xB0A0 (PANTHERLAKE)
[11:52:08] [PASSED] 0xB0B0 (PANTHERLAKE)
[11:52:08] [PASSED] 0xFD80 (PANTHERLAKE)
[11:52:08] [PASSED] 0xFD81 (PANTHERLAKE)
[11:52:08] [PASSED] 0xD740 (NOVALAKE_S)
[11:52:08] [PASSED] 0xD741 (NOVALAKE_S)
[11:52:08] [PASSED] 0xD742 (NOVALAKE_S)
[11:52:08] [PASSED] 0xD743 (NOVALAKE_S)
[11:52:08] [PASSED] 0xD745 (NOVALAKE_S)
[11:52:08] [PASSED] 0xD74A (NOVALAKE_S)
[11:52:08] [PASSED] 0xD74B (NOVALAKE_S)
[11:52:08] [PASSED] 0x674C (CRESCENTISLAND)
[11:52:08] [PASSED] 0x674D (CRESCENTISLAND)
[11:52:08] [PASSED] 0x674E (CRESCENTISLAND)
[11:52:08] [PASSED] 0x674F (CRESCENTISLAND)
[11:52:08] [PASSED] 0x6750 (CRESCENTISLAND)
[11:52:08] [PASSED] 0xD750 (NOVALAKE_P)
[11:52:08] [PASSED] 0xD751 (NOVALAKE_P)
[11:52:08] [PASSED] 0xD752 (NOVALAKE_P)
[11:52:08] [PASSED] 0xD753 (NOVALAKE_P)
[11:52:08] [PASSED] 0xD754 (NOVALAKE_P)
[11:52:08] [PASSED] 0xD755 (NOVALAKE_P)
[11:52:08] [PASSED] 0xD756 (NOVALAKE_P)
[11:52:08] [PASSED] 0xD757 (NOVALAKE_P)
[11:52:08] [PASSED] 0xD75F (NOVALAKE_P)
[11:52:08] =============== [PASSED] check_platform_desc ===============
[11:52:08] ===================== [PASSED] xe_pci ======================
[11:52:08] ============= xe_rtp_tables_test (5 subtests) ==============
[11:52:08] ================== xe_rtp_table_gt_test ===================
[11:52:08] [PASSED] gt_was/14011060649
[11:52:08] [PASSED] gt_was/14011059788
[11:52:08] [PASSED] gt_was/14015795083
[11:52:08] [PASSED] gt_was/16021867713
[11:52:08] [PASSED] gt_was/14019449301
[11:52:08] [PASSED] gt_was/16028005424
[11:52:08] [PASSED] gt_was/14026578760
[11:52:08] [PASSED] gt_was/1409420604
[11:52:08] [PASSED] gt_was/1408615072
[11:52:08] [PASSED] gt_was/22010523718
[11:52:08] [PASSED] gt_was/14011006942
[11:52:08] [PASSED] gt_was/14014830051
[11:52:08] [PASSED] gt_was/18018781329
[11:52:08] [PASSED] gt_was/1509235366
[11:52:08] [PASSED] gt_was/18018781329
[11:52:08] [PASSED] gt_was/16016694945
[11:52:08] [PASSED] gt_was/14018575942
[11:52:08] [PASSED] gt_was/22016670082
[11:52:08] [PASSED] gt_was/22016670082
[11:52:08] [PASSED] gt_was/14017421178
[11:52:08] [PASSED] gt_was/16025250150
[11:52:08] [PASSED] gt_was/14021871409
[11:52:08] [PASSED] gt_was/16021865536
[11:52:08] [PASSED] gt_was/14021486841
[11:52:08] [PASSED] gt_was/14025160223
[11:52:08] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[11:52:08] [PASSED] gt_was/14025635424
[11:52:08] [PASSED] gt_was/16028005424
[11:52:08] ============== [PASSED] xe_rtp_table_gt_test ===============
[11:52:08] ================== xe_rtp_table_gt_test ===================
[11:52:08] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[11:52:08] [PASSED] gt_tunings/Tuning: 32B Access Enable
[11:52:08] [PASSED] gt_tunings/Tuning: L3 cache
[11:52:08] [PASSED] gt_tunings/Tuning: L3 cache - media
[11:52:08] [PASSED] gt_tunings/Tuning: Compression Overfetch
[11:52:08] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[11:52:08] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[11:52:08] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[11:52:08] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[11:52:08] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[11:52:08] [PASSED] gt_tunings/Tuning: Stateless compression control
[11:52:08] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[11:52:08] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[11:52:08] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[11:52:08] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[11:52:08] ============== [PASSED] xe_rtp_table_gt_test ===============
[11:52:08] ================== xe_rtp_table_oob_test ==================
[11:52:08] [PASSED] oob_was/1607983814
[11:52:08] [PASSED] oob_was/16010904313
[11:52:08] [PASSED] oob_was/18022495364
[11:52:08] [PASSED] oob_was/22012773006
[11:52:08] [PASSED] oob_was/14014475959
[11:52:08] [PASSED] oob_was/22011391025
[11:52:08] [PASSED] oob_was/22012727170
[11:52:08] [PASSED] oob_was/22012727685
[11:52:08] [PASSED] oob_was/22016596838
[11:52:08] [PASSED] oob_was/18020744125
[11:52:08] [PASSED] oob_was/1409600907
[11:52:08] [PASSED] oob_was/22014953428
[11:52:08] [PASSED] oob_was/16017236439
[11:52:08] [PASSED] oob_was/14019821291
[11:52:08] [PASSED] oob_was/14015076503
[11:52:08] [PASSED] oob_was/14018913170
[11:52:08] [PASSED] oob_was/14018094691
[11:52:08] [PASSED] oob_was/18024947630
[11:52:08] [PASSED] oob_was/16022287689
[11:52:08] [PASSED] oob_was/13011645652
[11:52:08] [PASSED] oob_was/14022293748
[11:52:08] [PASSED] oob_was/22019794406
[11:52:08] [PASSED] oob_was/22019338487
[11:52:08] [PASSED] oob_was/16023588340
[11:52:08] [PASSED] oob_was/14019789679
[11:52:08] [PASSED] oob_was/14022866841
[11:52:08] [PASSED] oob_was/16021333562
[11:52:08] [PASSED] oob_was/14016712196
[11:52:08] [PASSED] oob_was/14015568240
[11:52:08] [PASSED] oob_was/18013179988
[11:52:08] [PASSED] oob_was/1508761755
[11:52:08] [PASSED] oob_was/16023105232
[11:52:08] [PASSED] oob_was/16026508708
[11:52:08] [PASSED] oob_was/14020001231
[11:52:08] [PASSED] oob_was/16023683509
[11:52:08] [PASSED] oob_was/14025515070
[11:52:08] [PASSED] oob_was/15015404425_disable
[11:52:08] [PASSED] oob_was/16026007364
[11:52:08] [PASSED] oob_was/14020316580
[11:52:08] [PASSED] oob_was/14025883347
[11:52:08] [PASSED] oob_was/16029380221
[11:52:08] [PASSED] oob_was/22022079272
[11:52:08] [PASSED] oob_was/16029897822
[11:52:08] [PASSED] oob_was/14027054324
[11:52:08] ============== [PASSED] xe_rtp_table_oob_test ==============
[11:52:08] ================ xe_rtp_table_dev_oob_test ================
[11:52:08] [PASSED] device_oob_was/22010954014
[11:52:08] [PASSED] device_oob_was/15015404425
[11:52:08] [PASSED] device_oob_was/22019338487_display
[11:52:08] [PASSED] device_oob_was/14022085890
[11:52:08] [PASSED] device_oob_was/14026539277
[11:52:08] [PASSED] device_oob_was/14026633728
[11:52:08] [PASSED] device_oob_was/14026746987
[11:52:08] [PASSED] device_oob_was/14026779378
[11:52:08] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[11:52:08] ========== xe_rtp_table_missing_upper_bound_test ==========
[11:52:08] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[11:52:08] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[11:52:08] [PASSED] register_whitelist/1806527549
[11:52:08] [PASSED] register_whitelist/allow_read_ctx_timestamp
[11:52:08] [PASSED] register_whitelist/allow_read_queue_timestamp
[11:52:08] [PASSED] register_whitelist/16014440446
[11:52:08] [PASSED] register_whitelist/16017236439
[11:52:08] [PASSED] register_whitelist/16020183090
[11:52:08] [PASSED] register_whitelist/14024997852
[11:52:08] [PASSED] register_whitelist/14024997852
[11:52:08] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[11:52:08] =============== [PASSED] xe_rtp_tables_test ================
[11:52:08] =================== xe_rtp (3 subtests) ====================
[11:52:08] =================== xe_rtp_rules_tests ====================
[11:52:08] [PASSED] no
[11:52:08] [PASSED] yes
[11:52:08] [PASSED] no-and-no
[11:52:08] [PASSED] no-and-yes
[11:52:08] [PASSED] yes-and-no
[11:52:08] [PASSED] yes-and-yes
[11:52:08] [PASSED] no-or-no
[11:52:08] [PASSED] no-or-yes
[11:52:08] [PASSED] yes-or-no
[11:52:08] [PASSED] yes-or-yes
[11:52:08] [PASSED] no-yes-or-yes-no
[11:52:08] [PASSED] no-yes-or-yes-yes
[11:52:08] [PASSED] yes-yes-or-no-yes
[11:52:08] [PASSED] yes-yes-or-yes-yes
[11:52:08] [PASSED] no-no-or-yes-or-no
[11:52:08] [PASSED] or
[11:52:08] [PASSED] or-yes
[11:52:08] [PASSED] or-no
[11:52:08] [PASSED] yes-or
[11:52:08] [PASSED] no-or
[11:52:08] [PASSED] no-or-or-yes
[11:52:08] [PASSED] yes-or-or-no
[11:52:08] [PASSED] no-or-or-no
[11:52:08] [PASSED] missing-context-engine-class
[11:52:08] [PASSED] missing-context-engine-class-or-yes
[11:52:08] [PASSED] missing-context-engine-class-or-or-yes
[11:52:08] =============== [PASSED] xe_rtp_rules_tests ================
[11:52:08] =============== xe_rtp_process_to_sr_tests ================
[11:52:08] [PASSED] coalesce-same-reg
[11:52:08] [PASSED] coalesce-same-reg-literal-and-func
[11:52:08] [PASSED] no-match-no-add
[11:52:08] [PASSED] two-regs-two-entries
[11:52:08] [PASSED] clr-one-set-other
[11:52:08] [PASSED] set-field
[11:52:08] [PASSED] conflict-duplicate
[11:52:08] [PASSED] conflict-not-disjoint
[11:52:08] [PASSED] conflict-not-disjoint-literal-and-func
[11:52:08] [PASSED] conflict-reg-type
[11:52:08] [PASSED] bad-mcr-reg-forced-to-regular
[11:52:08] [PASSED] bad-regular-reg-forced-to-mcr
[11:52:08] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[11:52:08] ================== xe_rtp_process_tests ===================
[11:52:08] [PASSED] active1
[11:52:08] [PASSED] active2
[11:52:08] [PASSED] active-inactive
[11:52:08] [PASSED] inactive-active
[11:52:08] [PASSED] inactive-active-inactive
[11:52:08] [PASSED] inactive-inactive-inactive
[11:52:08] ============== [PASSED] xe_rtp_process_tests ===============
[11:52:08] ===================== [PASSED] xe_rtp ======================
[11:52:08] ==================== xe_wa (1 subtest) =====================
[11:52:08] ======================== xe_wa_gt =========================
[11:52:08] [PASSED] TIGERLAKE B0
[11:52:08] [PASSED] DG1 A0
[11:52:08] [PASSED] DG1 B0
[11:52:08] [PASSED] ALDERLAKE_S A0
[11:52:08] [PASSED] ALDERLAKE_S B0
[11:52:08] [PASSED] ALDERLAKE_S C0
[11:52:08] [PASSED] ALDERLAKE_S D0
[11:52:08] [PASSED] ALDERLAKE_P A0
[11:52:08] [PASSED] ALDERLAKE_P B0
[11:52:08] [PASSED] ALDERLAKE_P C0
[11:52:08] [PASSED] ALDERLAKE_S RPLS D0
[11:52:08] [PASSED] ALDERLAKE_P RPLU E0
[11:52:08] [PASSED] DG2 G10 C0
[11:52:08] [PASSED] DG2 G11 B1
[11:52:08] [PASSED] DG2 G12 A1
[11:52:08] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[11:52:08] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[11:52:08] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[11:52:08] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[11:52:08] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[11:52:08] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[11:52:08] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[11:52:08] ==================== [PASSED] xe_wa_gt =====================
[11:52:08] ====================== [PASSED] xe_wa ======================
[11:52:08] ============================================================
[11:52:08] Testing complete. Ran 793 tests: passed: 765, skipped: 28
[11:52:08] Elapsed time: 37.521s total, 4.498s configuring, 32.306s building, 0.690s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[11:52:08] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[11:52:10] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[11:52:35] Starting KUnit Kernel (1/1)...
[11:52:35] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[11:52:35] ============= refcount_interrupt (4 subtests) ==============
[11:52:35] [PASSED] test_single_irq_change
[11:52:35] [PASSED] test_nested_irq_change
[11:52:35] [PASSED] test_multiple_irq_change
[11:52:35] [PASSED] test_irq_save
[11:52:35] =============== [PASSED] refcount_interrupt ================
[11:52:35] ============ drm_test_pick_cmdline (2 subtests) ============
[11:52:35] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[11:52:35] =============== drm_test_pick_cmdline_named ===============
[11:52:35] [PASSED] NTSC
[11:52:35] [PASSED] NTSC-J
[11:52:35] [PASSED] PAL
[11:52:35] [PASSED] PAL-M
[11:52:35] =========== [PASSED] drm_test_pick_cmdline_named ===========
[11:52:35] ============== [PASSED] drm_test_pick_cmdline ==============
[11:52:35] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[11:52:35] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[11:52:35] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[11:52:35] =========== drm_validate_clone_mode (2 subtests) ===========
[11:52:35] ============== drm_test_check_in_clone_mode ===============
[11:52:35] [PASSED] in_clone_mode
[11:52:35] [PASSED] not_in_clone_mode
[11:52:35] ========== [PASSED] drm_test_check_in_clone_mode ===========
[11:52:35] =============== drm_test_check_valid_clones ===============
[11:52:35] [PASSED] not_in_clone_mode
[11:52:35] [PASSED] valid_clone
[11:52:35] [PASSED] invalid_clone
[11:52:35] =========== [PASSED] drm_test_check_valid_clones ===========
[11:52:35] ============= [PASSED] drm_validate_clone_mode =============
[11:52:35] ============= drm_validate_modeset (1 subtest) =============
[11:52:35] [PASSED] drm_test_check_connector_changed_modeset
[11:52:35] ============== [PASSED] drm_validate_modeset ===============
[11:52:35] ====== drm_test_bridge_get_current_state (1 subtest) =======
[11:52:35] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[11:52:35] ======== [PASSED] drm_test_bridge_get_current_state ========
[11:52:35] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[11:52:35] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[11:52:35] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[11:52:35] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[11:52:35] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[11:52:35] ============== drm_bridge_alloc (2 subtests) ===============
[11:52:35] [PASSED] drm_test_drm_bridge_alloc_basic
[11:52:35] [PASSED] drm_test_drm_bridge_alloc_get_put
[11:52:35] ================ [PASSED] drm_bridge_alloc =================
[11:52:35] ============= drm_bridge_bus_fmt (5 subtests) ==============
[11:52:35] [PASSED] drm_test_bridge_rgb_yuv_rgb
[11:52:35] [PASSED] drm_test_bridge_must_convert_to_yuv444
[11:52:35] [PASSED] drm_test_bridge_hdmi_auto_rgb
[11:52:35] [PASSED] drm_test_bridge_auto_first
[11:52:35] [PASSED] drm_test_bridge_rgb_yuv_no_path
[11:52:35] =============== [PASSED] drm_bridge_bus_fmt ================
[11:52:35] ============= drm_cmdline_parser (40 subtests) =============
[11:52:35] [PASSED] drm_test_cmdline_force_d_only
[11:52:35] [PASSED] drm_test_cmdline_force_D_only_dvi
[11:52:35] [PASSED] drm_test_cmdline_force_D_only_hdmi
[11:52:35] [PASSED] drm_test_cmdline_force_D_only_not_digital
[11:52:35] [PASSED] drm_test_cmdline_force_e_only
[11:52:35] [PASSED] drm_test_cmdline_res
[11:52:35] [PASSED] drm_test_cmdline_res_vesa
[11:52:35] [PASSED] drm_test_cmdline_res_vesa_rblank
[11:52:35] [PASSED] drm_test_cmdline_res_rblank
[11:52:35] [PASSED] drm_test_cmdline_res_bpp
[11:52:35] [PASSED] drm_test_cmdline_res_refresh
[11:52:35] [PASSED] drm_test_cmdline_res_bpp_refresh
[11:52:35] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[11:52:35] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[11:52:35] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[11:52:35] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[11:52:35] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[11:52:35] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[11:52:35] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[11:52:35] [PASSED] drm_test_cmdline_res_margins_force_on
[11:52:35] [PASSED] drm_test_cmdline_res_vesa_margins
[11:52:35] [PASSED] drm_test_cmdline_name
[11:52:35] [PASSED] drm_test_cmdline_name_bpp
[11:52:35] [PASSED] drm_test_cmdline_name_option
[11:52:35] [PASSED] drm_test_cmdline_name_bpp_option
[11:52:35] [PASSED] drm_test_cmdline_rotate_0
[11:52:35] [PASSED] drm_test_cmdline_rotate_90
[11:52:35] [PASSED] drm_test_cmdline_rotate_180
[11:52:35] [PASSED] drm_test_cmdline_rotate_270
[11:52:35] [PASSED] drm_test_cmdline_hmirror
[11:52:35] [PASSED] drm_test_cmdline_vmirror
[11:52:35] [PASSED] drm_test_cmdline_margin_options
[11:52:35] [PASSED] drm_test_cmdline_multiple_options
[11:52:35] [PASSED] drm_test_cmdline_bpp_extra_and_option
[11:52:35] [PASSED] drm_test_cmdline_extra_and_option
[11:52:35] [PASSED] drm_test_cmdline_freestanding_options
[11:52:35] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[11:52:35] [PASSED] drm_test_cmdline_panel_orientation
[11:52:35] ================ drm_test_cmdline_invalid =================
[11:52:35] [PASSED] margin_only
[11:52:35] [PASSED] interlace_only
[11:52:35] [PASSED] res_missing_x
[11:52:35] [PASSED] res_missing_y
[11:52:35] [PASSED] res_bad_y
[11:52:35] [PASSED] res_missing_y_bpp
[11:52:35] [PASSED] res_bad_bpp
[11:52:35] [PASSED] res_bad_refresh
[11:52:35] [PASSED] res_bpp_refresh_force_on_off
[11:52:35] [PASSED] res_invalid_mode
[11:52:35] [PASSED] res_bpp_wrong_place_mode
[11:52:35] [PASSED] name_bpp_refresh
[11:52:35] [PASSED] name_refresh
[11:52:35] [PASSED] name_refresh_wrong_mode
[11:52:35] [PASSED] name_refresh_invalid_mode
[11:52:35] [PASSED] rotate_multiple
[11:52:35] [PASSED] rotate_invalid_val
[11:52:35] [PASSED] rotate_truncated
[11:52:35] [PASSED] invalid_option
[11:52:35] [PASSED] invalid_tv_option
[11:52:35] [PASSED] truncated_tv_option
[11:52:35] ============ [PASSED] drm_test_cmdline_invalid =============
[11:52:35] =============== drm_test_cmdline_tv_options ===============
[11:52:35] [PASSED] NTSC
[11:52:35] [PASSED] NTSC_443
[11:52:35] [PASSED] NTSC_J
[11:52:35] [PASSED] PAL
[11:52:35] [PASSED] PAL_M
[11:52:35] [PASSED] PAL_N
[11:52:35] [PASSED] SECAM
[11:52:35] [PASSED] MONO_525
[11:52:35] [PASSED] MONO_625
[11:52:35] =========== [PASSED] drm_test_cmdline_tv_options ===========
[11:52:35] =============== [PASSED] drm_cmdline_parser ================
[11:52:35] ========== drmm_connector_hdmi_init (20 subtests) ==========
[11:52:35] [PASSED] drm_test_connector_hdmi_init_valid
[11:52:35] [PASSED] drm_test_connector_hdmi_init_bpc_8
[11:52:35] [PASSED] drm_test_connector_hdmi_init_bpc_10
[11:52:35] [PASSED] drm_test_connector_hdmi_init_bpc_12
[11:52:35] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[11:52:35] [PASSED] drm_test_connector_hdmi_init_bpc_null
[11:52:35] [PASSED] drm_test_connector_hdmi_init_formats_empty
[11:52:35] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[11:52:35] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[11:52:35] [PASSED] supported_formats=0x9 yuv420_allowed=1
[11:52:35] [PASSED] supported_formats=0x9 yuv420_allowed=0
[11:52:35] [PASSED] supported_formats=0x5 yuv420_allowed=1
[11:52:35] [PASSED] supported_formats=0x5 yuv420_allowed=0
[11:52:35] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[11:52:35] [PASSED] drm_test_connector_hdmi_init_null_ddc
[11:52:35] [PASSED] drm_test_connector_hdmi_init_null_product
[11:52:35] [PASSED] drm_test_connector_hdmi_init_null_vendor
[11:52:35] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[11:52:35] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[11:52:35] [PASSED] drm_test_connector_hdmi_init_product_valid
[11:52:35] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[11:52:35] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[11:52:35] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[11:52:35] ========= drm_test_connector_hdmi_init_type_valid =========
[11:52:35] [PASSED] HDMI-A
[11:52:35] [PASSED] HDMI-B
[11:52:35] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[11:52:35] ======== drm_test_connector_hdmi_init_type_invalid ========
[11:52:35] [PASSED] Unknown
[11:52:35] [PASSED] VGA
[11:52:35] [PASSED] DVI-I
[11:52:35] [PASSED] DVI-D
[11:52:35] [PASSED] DVI-A
[11:52:35] [PASSED] Composite
[11:52:35] [PASSED] SVIDEO
[11:52:35] [PASSED] LVDS
[11:52:35] [PASSED] Component
[11:52:35] [PASSED] DIN
[11:52:35] [PASSED] DP
[11:52:35] [PASSED] TV
[11:52:35] [PASSED] eDP
[11:52:35] [PASSED] Virtual
[11:52:35] [PASSED] DSI
[11:52:35] [PASSED] DPI
[11:52:35] [PASSED] Writeback
[11:52:35] [PASSED] SPI
[11:52:35] [PASSED] USB
[11:52:35] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[11:52:35] ============ [PASSED] drmm_connector_hdmi_init =============
[11:52:35] ============= drmm_connector_init (3 subtests) =============
[11:52:35] [PASSED] drm_test_drmm_connector_init
[11:52:35] [PASSED] drm_test_drmm_connector_init_null_ddc
[11:52:35] ========= drm_test_drmm_connector_init_type_valid =========
[11:52:35] [PASSED] Unknown
[11:52:35] [PASSED] VGA
[11:52:35] [PASSED] DVI-I
[11:52:35] [PASSED] DVI-D
[11:52:35] [PASSED] DVI-A
[11:52:35] [PASSED] Composite
[11:52:35] [PASSED] SVIDEO
[11:52:35] [PASSED] LVDS
[11:52:35] [PASSED] Component
[11:52:35] [PASSED] DIN
[11:52:35] [PASSED] DP
[11:52:35] [PASSED] HDMI-A
[11:52:35] [PASSED] HDMI-B
[11:52:35] [PASSED] TV
[11:52:35] [PASSED] eDP
[11:52:35] [PASSED] Virtual
[11:52:35] [PASSED] DSI
[11:52:35] [PASSED] DPI
[11:52:35] [PASSED] Writeback
[11:52:35] [PASSED] SPI
[11:52:35] [PASSED] USB
[11:52:35] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[11:52:35] =============== [PASSED] drmm_connector_init ===============
[11:52:35] ========= drm_connector_dynamic_init (6 subtests) ==========
[11:52:35] [PASSED] drm_test_drm_connector_dynamic_init
[11:52:35] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[11:52:35] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[11:52:35] [PASSED] drm_test_drm_connector_dynamic_init_properties
[11:52:35] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[11:52:35] [PASSED] Unknown
[11:52:35] [PASSED] VGA
[11:52:35] [PASSED] DVI-I
[11:52:35] [PASSED] DVI-D
[11:52:35] [PASSED] DVI-A
[11:52:35] [PASSED] Composite
[11:52:35] [PASSED] SVIDEO
[11:52:35] [PASSED] LVDS
[11:52:35] [PASSED] Component
[11:52:35] [PASSED] DIN
[11:52:35] [PASSED] DP
[11:52:35] [PASSED] HDMI-A
[11:52:35] [PASSED] HDMI-B
[11:52:35] [PASSED] TV
[11:52:35] [PASSED] eDP
[11:52:35] [PASSED] Virtual
[11:52:35] [PASSED] DSI
[11:52:35] [PASSED] DPI
[11:52:35] [PASSED] Writeback
[11:52:35] [PASSED] SPI
[11:52:35] [PASSED] USB
[11:52:35] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[11:52:35] ======== drm_test_drm_connector_dynamic_init_name =========
[11:52:35] [PASSED] Unknown
[11:52:35] [PASSED] VGA
[11:52:35] [PASSED] DVI-I
[11:52:35] [PASSED] DVI-D
[11:52:35] [PASSED] DVI-A
[11:52:35] [PASSED] Composite
[11:52:35] [PASSED] SVIDEO
[11:52:35] [PASSED] LVDS
[11:52:35] [PASSED] Component
[11:52:35] [PASSED] DIN
[11:52:35] [PASSED] DP
[11:52:35] [PASSED] HDMI-A
[11:52:35] [PASSED] HDMI-B
[11:52:35] [PASSED] TV
[11:52:35] [PASSED] eDP
[11:52:35] [PASSED] Virtual
[11:52:35] [PASSED] DSI
[11:52:35] [PASSED] DPI
[11:52:35] [PASSED] Writeback
[11:52:35] [PASSED] SPI
[11:52:35] [PASSED] USB
[11:52:35] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[11:52:35] =========== [PASSED] drm_connector_dynamic_init ============
[11:52:35] ==== drm_connector_dynamic_register_early (4 subtests) =====
[11:52:35] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[11:52:35] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[11:52:35] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[11:52:35] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[11:52:35] ====== [PASSED] drm_connector_dynamic_register_early =======
[11:52:35] ======= drm_connector_dynamic_register (7 subtests) ========
[11:52:35] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[11:52:35] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[11:52:35] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[11:52:35] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[11:52:35] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[11:52:35] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[11:52:35] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[11:52:35] ========= [PASSED] drm_connector_dynamic_register ==========
[11:52:35] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[11:52:35] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[11:52:35] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[11:52:35] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[11:52:35] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[11:52:35] ========== drm_test_get_tv_mode_from_name_valid ===========
[11:52:35] [PASSED] NTSC
[11:52:35] [PASSED] NTSC-443
[11:52:35] [PASSED] NTSC-J
[11:52:35] [PASSED] PAL
[11:52:35] [PASSED] PAL-M
[11:52:35] [PASSED] PAL-N
[11:52:35] [PASSED] SECAM
[11:52:35] [PASSED] Mono
[11:52:35] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[11:52:35] [PASSED] drm_test_get_tv_mode_from_name_truncated
[11:52:35] ============ [PASSED] drm_get_tv_mode_from_name ============
[11:52:35] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[11:52:35] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[11:52:35] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[11:52:35] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[11:52:35] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[11:52:35] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[11:52:35] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[11:52:35] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[11:52:35] [PASSED] VIC 96
[11:52:35] [PASSED] VIC 97
[11:52:35] [PASSED] VIC 101
[11:52:35] [PASSED] VIC 102
[11:52:35] [PASSED] VIC 106
[11:52:35] [PASSED] VIC 107
[11:52:35] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[11:52:35] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[11:52:35] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[11:52:35] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[11:52:35] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[11:52:35] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[11:52:35] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[11:52:35] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[11:52:35] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[11:52:35] [PASSED] Automatic
[11:52:35] [PASSED] Full
[11:52:35] [PASSED] Limited 16:235
[11:52:35] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[11:52:35] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[11:52:35] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[11:52:35] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[11:52:35] === drm_test_drm_hdmi_connector_get_output_format_name ====
[11:52:35] [PASSED] RGB
[11:52:35] [PASSED] YUV 4:2:0
[11:52:35] [PASSED] YUV 4:2:2
[11:52:35] [PASSED] YUV 4:4:4
[11:52:35] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[11:52:35] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[11:52:35] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[11:52:35] ============= drm_damage_helper (21 subtests) ==============
[11:52:35] [PASSED] drm_test_damage_iter_no_damage
[11:52:35] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[11:52:35] [PASSED] drm_test_damage_iter_no_damage_src_moved
[11:52:35] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[11:52:35] [PASSED] drm_test_damage_iter_no_damage_not_visible
[11:52:35] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[11:52:35] [PASSED] drm_test_damage_iter_no_damage_no_fb
[11:52:35] [PASSED] drm_test_damage_iter_simple_damage
[11:52:35] [PASSED] drm_test_damage_iter_single_damage
[11:52:35] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[11:52:35] [PASSED] drm_test_damage_iter_single_damage_outside_src
[11:52:35] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[11:52:35] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[11:52:35] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[11:52:35] [PASSED] drm_test_damage_iter_single_damage_src_moved
[11:52:35] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[11:52:35] [PASSED] drm_test_damage_iter_damage
[11:52:35] [PASSED] drm_test_damage_iter_damage_one_intersect
[11:52:35] [PASSED] drm_test_damage_iter_damage_one_outside
[11:52:35] [PASSED] drm_test_damage_iter_damage_src_moved
[11:52:35] [PASSED] drm_test_damage_iter_damage_not_visible
[11:52:35] ================ [PASSED] drm_damage_helper ================
[11:52:35] ============== drm_dp_mst_helper (3 subtests) ==============
[11:52:35] ============== drm_test_dp_mst_calc_pbn_mode ==============
[11:52:35] [PASSED] Clock 154000 BPP 30 DSC disabled
[11:52:35] [PASSED] Clock 234000 BPP 30 DSC disabled
[11:52:35] [PASSED] Clock 297000 BPP 24 DSC disabled
[11:52:35] [PASSED] Clock 332880 BPP 24 DSC enabled
[11:52:35] [PASSED] Clock 324540 BPP 24 DSC enabled
[11:52:35] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[11:52:35] ============== drm_test_dp_mst_calc_pbn_div ===============
[11:52:35] [PASSED] Link rate 2000000 lane count 4
[11:52:35] [PASSED] Link rate 2000000 lane count 2
[11:52:35] [PASSED] Link rate 2000000 lane count 1
[11:52:35] [PASSED] Link rate 1350000 lane count 4
[11:52:35] [PASSED] Link rate 1350000 lane count 2
[11:52:35] [PASSED] Link rate 1350000 lane count 1
[11:52:35] [PASSED] Link rate 1000000 lane count 4
[11:52:35] [PASSED] Link rate 1000000 lane count 2
[11:52:35] [PASSED] Link rate 1000000 lane count 1
[11:52:35] [PASSED] Link rate 810000 lane count 4
[11:52:35] [PASSED] Link rate 810000 lane count 2
[11:52:35] [PASSED] Link rate 810000 lane count 1
[11:52:35] [PASSED] Link rate 540000 lane count 4
[11:52:35] [PASSED] Link rate 540000 lane count 2
[11:52:35] [PASSED] Link rate 540000 lane count 1
[11:52:35] [PASSED] Link rate 270000 lane count 4
[11:52:35] [PASSED] Link rate 270000 lane count 2
[11:52:35] [PASSED] Link rate 270000 lane count 1
[11:52:35] [PASSED] Link rate 162000 lane count 4
[11:52:35] [PASSED] Link rate 162000 lane count 2
[11:52:35] [PASSED] Link rate 162000 lane count 1
[11:52:35] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[11:52:35] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[11:52:35] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[11:52:35] [PASSED] DP_POWER_UP_PHY with port number
[11:52:35] [PASSED] DP_POWER_DOWN_PHY with port number
[11:52:35] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[11:52:35] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[11:52:35] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[11:52:35] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[11:52:35] [PASSED] DP_QUERY_PAYLOAD with port number
[11:52:35] [PASSED] DP_QUERY_PAYLOAD with VCPI
[11:52:35] [PASSED] DP_REMOTE_DPCD_READ with port number
[11:52:35] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[11:52:35] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[11:52:35] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[11:52:35] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[11:52:35] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[11:52:35] [PASSED] DP_REMOTE_I2C_READ with port number
[11:52:35] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[11:52:35] [PASSED] DP_REMOTE_I2C_READ with transactions array
[11:52:35] [PASSED] DP_REMOTE_I2C_WRITE with port number
[11:52:35] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[11:52:35] [PASSED] DP_REMOTE_I2C_WRITE with data array
[11:52:35] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[11:52:35] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[11:52:35] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[11:52:35] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[11:52:35] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[11:52:35] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[11:52:35] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[11:52:35] ================ [PASSED] drm_dp_mst_helper ================
[11:52:35] ================== drm_exec (7 subtests) ===================
[11:52:35] [PASSED] sanitycheck
[11:52:35] [PASSED] test_lock
[11:52:35] [PASSED] test_lock_unlock
[11:52:35] [PASSED] test_duplicates
[11:52:35] [PASSED] test_prepare
[11:52:35] [PASSED] test_prepare_array
[11:52:35] [PASSED] test_multiple_loops
[11:52:35] ==================== [PASSED] drm_exec =====================
[11:52:35] =========== drm_format_helper_test (17 subtests) ===========
[11:52:35] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[11:52:35] [PASSED] single_pixel_source_buffer
[11:52:35] [PASSED] single_pixel_clip_rectangle
[11:52:35] [PASSED] well_known_colors
[11:52:35] [PASSED] destination_pitch
[11:52:35] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[11:52:35] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[11:52:35] [PASSED] single_pixel_source_buffer
[11:52:35] [PASSED] single_pixel_clip_rectangle
[11:52:35] [PASSED] well_known_colors
[11:52:35] [PASSED] destination_pitch
[11:52:35] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[11:52:35] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[11:52:35] [PASSED] single_pixel_source_buffer
[11:52:35] [PASSED] single_pixel_clip_rectangle
[11:52:35] [PASSED] well_known_colors
[11:52:35] [PASSED] destination_pitch
[11:52:35] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[11:52:35] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[11:52:35] [PASSED] single_pixel_source_buffer
[11:52:35] [PASSED] single_pixel_clip_rectangle
[11:52:35] [PASSED] well_known_colors
[11:52:35] [PASSED] destination_pitch
[11:52:35] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[11:52:35] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[11:52:35] [PASSED] single_pixel_source_buffer
[11:52:35] [PASSED] single_pixel_clip_rectangle
[11:52:35] [PASSED] well_known_colors
[11:52:35] [PASSED] destination_pitch
[11:52:35] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[11:52:35] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[11:52:35] [PASSED] single_pixel_source_buffer
[11:52:35] [PASSED] single_pixel_clip_rectangle
[11:52:35] [PASSED] well_known_colors
[11:52:35] [PASSED] destination_pitch
[11:52:35] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[11:52:35] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[11:52:35] [PASSED] single_pixel_source_buffer
[11:52:35] [PASSED] single_pixel_clip_rectangle
[11:52:35] [PASSED] well_known_colors
[11:52:35] [PASSED] destination_pitch
[11:52:35] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[11:52:35] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[11:52:35] [PASSED] single_pixel_source_buffer
[11:52:35] [PASSED] single_pixel_clip_rectangle
[11:52:35] [PASSED] well_known_colors
[11:52:35] [PASSED] destination_pitch
[11:52:35] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[11:52:35] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[11:52:35] [PASSED] single_pixel_source_buffer
[11:52:35] [PASSED] single_pixel_clip_rectangle
[11:52:35] [PASSED] well_known_colors
[11:52:35] [PASSED] destination_pitch
[11:52:35] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[11:52:35] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[11:52:35] [PASSED] single_pixel_source_buffer
[11:52:35] [PASSED] single_pixel_clip_rectangle
[11:52:35] [PASSED] well_known_colors
[11:52:35] [PASSED] destination_pitch
[11:52:35] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[11:52:35] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[11:52:35] [PASSED] single_pixel_source_buffer
[11:52:35] [PASSED] single_pixel_clip_rectangle
[11:52:35] [PASSED] well_known_colors
[11:52:35] [PASSED] destination_pitch
[11:52:35] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[11:52:35] ============== drm_test_fb_xrgb8888_to_mono ===============
[11:52:35] [PASSED] single_pixel_source_buffer
[11:52:35] [PASSED] single_pixel_clip_rectangle
[11:52:35] [PASSED] well_known_colors
[11:52:35] [PASSED] destination_pitch
[11:52:35] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[11:52:35] ==================== drm_test_fb_swab =====================
[11:52:35] [PASSED] single_pixel_source_buffer
[11:52:35] [PASSED] single_pixel_clip_rectangle
[11:52:35] [PASSED] well_known_colors
[11:52:35] [PASSED] destination_pitch
[11:52:35] ================ [PASSED] drm_test_fb_swab =================
[11:52:35] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[11:52:35] [PASSED] single_pixel_source_buffer
[11:52:35] [PASSED] single_pixel_clip_rectangle
[11:52:35] [PASSED] well_known_colors
[11:52:35] [PASSED] destination_pitch
[11:52:35] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[11:52:35] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[11:52:35] [PASSED] single_pixel_source_buffer
[11:52:35] [PASSED] single_pixel_clip_rectangle
[11:52:35] [PASSED] well_known_colors
[11:52:35] [PASSED] destination_pitch
[11:52:35] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[11:52:35] ================= drm_test_fb_clip_offset =================
[11:52:35] [PASSED] pass through
[11:52:35] [PASSED] horizontal offset
[11:52:35] [PASSED] vertical offset
[11:52:35] [PASSED] horizontal and vertical offset
[11:52:35] [PASSED] horizontal offset (custom pitch)
[11:52:35] [PASSED] vertical offset (custom pitch)
[11:52:35] [PASSED] horizontal and vertical offset (custom pitch)
[11:52:35] ============= [PASSED] drm_test_fb_clip_offset =============
[11:52:35] =================== drm_test_fb_memcpy ====================
[11:52:35] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[11:52:35] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[11:52:35] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[11:52:35] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[11:52:35] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[11:52:35] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[11:52:35] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[11:52:35] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[11:52:35] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[11:52:35] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[11:52:35] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[11:52:35] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[11:52:35] =============== [PASSED] drm_test_fb_memcpy ================
[11:52:35] ============= [PASSED] drm_format_helper_test ==============
[11:52:35] ================= drm_format (18 subtests) =================
[11:52:35] [PASSED] drm_test_format_block_width_invalid
[11:52:35] [PASSED] drm_test_format_block_width_one_plane
[11:52:35] [PASSED] drm_test_format_block_width_two_plane
[11:52:35] [PASSED] drm_test_format_block_width_three_plane
[11:52:35] [PASSED] drm_test_format_block_width_tiled
[11:52:35] [PASSED] drm_test_format_block_height_invalid
[11:52:35] [PASSED] drm_test_format_block_height_one_plane
[11:52:35] [PASSED] drm_test_format_block_height_two_plane
[11:52:35] [PASSED] drm_test_format_block_height_three_plane
[11:52:35] [PASSED] drm_test_format_block_height_tiled
[11:52:35] [PASSED] drm_test_format_min_pitch_invalid
[11:52:35] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[11:52:35] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[11:52:35] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[11:52:35] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[11:52:35] [PASSED] drm_test_format_min_pitch_two_plane
[11:52:35] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[11:52:35] [PASSED] drm_test_format_min_pitch_tiled
[11:52:35] =================== [PASSED] drm_format ====================
[11:52:35] ============== drm_framebuffer (10 subtests) ===============
[11:52:35] ========== drm_test_framebuffer_check_src_coords ==========
[11:52:35] [PASSED] Success: source fits into fb
[11:52:35] [PASSED] Fail: overflowing fb with x-axis coordinate
[11:52:35] [PASSED] Fail: overflowing fb with y-axis coordinate
[11:52:35] [PASSED] Fail: overflowing fb with source width
[11:52:35] [PASSED] Fail: overflowing fb with source height
[11:52:35] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[11:52:35] [PASSED] drm_test_framebuffer_cleanup
[11:52:35] =============== drm_test_framebuffer_create ===============
[11:52:35] [PASSED] ABGR8888 normal sizes
[11:52:35] [PASSED] ABGR8888 max sizes
[11:52:35] [PASSED] ABGR8888 pitch greater than min required
[11:52:35] [PASSED] ABGR8888 pitch less than min required
[11:52:35] [PASSED] ABGR8888 Invalid width
[11:52:35] [PASSED] ABGR8888 Invalid buffer handle
[11:52:35] [PASSED] No pixel format
[11:52:35] [PASSED] ABGR8888 Width 0
[11:52:35] [PASSED] ABGR8888 Height 0
[11:52:35] [PASSED] ABGR8888 Out of bound height * pitch combination
[11:52:35] [PASSED] ABGR8888 Large buffer offset
[11:52:35] [PASSED] ABGR8888 Buffer offset for inexistent plane
[11:52:35] [PASSED] ABGR8888 Invalid flag
[11:52:35] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[11:52:35] [PASSED] ABGR8888 Valid buffer modifier
[11:52:35] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[11:52:35] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[11:52:35] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[11:52:35] [PASSED] NV12 Normal sizes
[11:52:35] [PASSED] NV12 Max sizes
[11:52:35] [PASSED] NV12 Invalid pitch
[11:52:35] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[11:52:35] [PASSED] NV12 different modifier per-plane
[11:52:35] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[11:52:35] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[11:52:35] [PASSED] NV12 Modifier for inexistent plane
[11:52:35] [PASSED] NV12 Handle for inexistent plane
[11:52:35] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[11:52:35] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[11:52:35] [PASSED] YVU420 Normal sizes
[11:52:35] [PASSED] YVU420 Max sizes
[11:52:35] [PASSED] YVU420 Invalid pitch
[11:52:35] [PASSED] YVU420 Different pitches
[11:52:35] [PASSED] YVU420 Different buffer offsets/pitches
[11:52:35] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[11:52:35] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[11:52:35] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[11:52:35] [PASSED] YVU420 Valid modifier
[11:52:35] [PASSED] YVU420 Different modifiers per plane
[11:52:35] [PASSED] YVU420 Modifier for inexistent plane
[11:52:35] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[11:52:35] [PASSED] X0L2 Normal sizes
[11:52:35] [PASSED] X0L2 Max sizes
[11:52:35] [PASSED] X0L2 Invalid pitch
[11:52:35] [PASSED] X0L2 Pitch greater than minimum required
[11:52:35] [PASSED] X0L2 Handle for inexistent plane
[11:52:35] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[11:52:35] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[11:52:35] [PASSED] X0L2 Valid modifier
[11:52:35] [PASSED] X0L2 Modifier for inexistent plane
[11:52:35] =========== [PASSED] drm_test_framebuffer_create ===========
[11:52:35] [PASSED] drm_test_framebuffer_free
[11:52:35] [PASSED] drm_test_framebuffer_init
[11:52:35] [PASSED] drm_test_framebuffer_init_bad_format
[11:52:35] [PASSED] drm_test_framebuffer_init_dev_mismatch
[11:52:35] [PASSED] drm_test_framebuffer_lookup
[11:52:35] [PASSED] drm_test_framebuffer_lookup_inexistent
[11:52:35] [PASSED] drm_test_framebuffer_modifiers_not_supported
[11:52:35] ================= [PASSED] drm_framebuffer =================
[11:52:35] ================ drm_gem_shmem (8 subtests) ================
[11:52:35] [PASSED] drm_gem_shmem_test_obj_create
[11:52:35] [PASSED] drm_gem_shmem_test_obj_create_private
[11:52:35] [PASSED] drm_gem_shmem_test_pin_pages
[11:52:35] [PASSED] drm_gem_shmem_test_vmap
[11:52:35] [PASSED] drm_gem_shmem_test_get_sg_table
[11:52:35] [PASSED] drm_gem_shmem_test_get_pages_sgt
[11:52:35] [PASSED] drm_gem_shmem_test_madvise
[11:52:35] [PASSED] drm_gem_shmem_test_purge
[11:52:35] ================== [PASSED] drm_gem_shmem ==================
[11:52:35] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[11:52:35] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[11:52:35] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[11:52:35] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[11:52:35] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[11:52:35] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[11:52:35] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[11:52:35] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[11:52:35] [PASSED] Automatic
[11:52:35] [PASSED] Full
[11:52:35] [PASSED] Limited 16:235
[11:52:35] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[11:52:35] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[11:52:35] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[11:52:35] [PASSED] drm_test_check_disable_connector
[11:52:35] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[11:52:35] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[11:52:35] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[11:52:35] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[11:52:35] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[11:52:35] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[11:52:35] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[11:52:35] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[11:52:35] [PASSED] drm_test_check_output_bpc_dvi
[11:52:35] [PASSED] drm_test_check_output_bpc_format_vic_1
[11:52:35] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[11:52:35] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[11:52:35] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[11:52:35] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[11:52:35] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[11:52:35] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[11:52:35] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[11:52:35] ============ drm_test_check_hdmi_color_format =============
[11:52:35] [PASSED] AUTO -> RGB
[11:52:35] [PASSED] YCBCR422 -> YUV422
[11:52:35] [PASSED] YCBCR420 -> YUV420
[11:52:35] [PASSED] YCBCR444 -> YUV444
[11:52:35] [PASSED] RGB -> RGB
[11:52:35] ======== [PASSED] drm_test_check_hdmi_color_format =========
[11:52:35] ======== drm_test_check_hdmi_color_format_420_only ========
[11:52:35] [PASSED] RGB should fail
[11:52:35] [PASSED] YUV444 should fail
[11:52:35] [PASSED] YUV422 should fail
[11:52:35] [PASSED] YUV420 should work
[11:52:35] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[11:52:35] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[11:52:35] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[11:52:35] [PASSED] drm_test_check_broadcast_rgb_value
[11:52:35] [PASSED] drm_test_check_bpc_8_value
[11:52:35] [PASSED] drm_test_check_bpc_10_value
[11:52:35] [PASSED] drm_test_check_bpc_12_value
[11:52:35] [PASSED] drm_test_check_format_value
[11:52:35] [PASSED] drm_test_check_tmds_char_value
[11:52:35] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[11:52:35] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[11:52:35] [PASSED] drm_test_check_mode_valid
[11:52:35] [PASSED] drm_test_check_mode_valid_reject
[11:52:35] [PASSED] drm_test_check_mode_valid_reject_rate
[11:52:35] [PASSED] drm_test_check_mode_valid_reject_max_clock
[11:52:35] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[11:52:35] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[11:52:35] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[11:52:35] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[11:52:35] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[11:52:35] [PASSED] drm_test_check_infoframes
[11:52:35] [PASSED] drm_test_check_reject_avi_infoframe
[11:52:35] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[11:52:35] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[11:52:35] [PASSED] drm_test_check_reject_audio_infoframe
[11:52:35] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[11:52:35] ================= drm_managed (2 subtests) =================
[11:52:35] [PASSED] drm_test_managed_release_action
[11:52:35] [PASSED] drm_test_managed_run_action
[11:52:35] =================== [PASSED] drm_managed ===================
[11:52:35] =================== drm_mm (6 subtests) ====================
[11:52:35] [PASSED] drm_test_mm_init
[11:52:35] [PASSED] drm_test_mm_debug
[11:52:35] [PASSED] drm_test_mm_align32
[11:52:35] [PASSED] drm_test_mm_align64
[11:52:35] [PASSED] drm_test_mm_lowest
[11:52:35] [PASSED] drm_test_mm_highest
[11:52:35] ===================== [PASSED] drm_mm ======================
[11:52:35] ============= drm_modes_analog_tv (5 subtests) =============
[11:52:35] [PASSED] drm_test_modes_analog_tv_mono_576i
[11:52:35] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[11:52:35] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[11:52:35] [PASSED] drm_test_modes_analog_tv_pal_576i
[11:52:35] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[11:52:35] =============== [PASSED] drm_modes_analog_tv ===============
[11:52:35] ============== drm_plane_helper (2 subtests) ===============
[11:52:35] =============== drm_test_check_plane_state ================
[11:52:35] [PASSED] clipping_simple
[11:52:35] [PASSED] clipping_rotate_reflect
[11:52:35] [PASSED] positioning_simple
[11:52:35] [PASSED] upscaling
[11:52:35] [PASSED] downscaling
[11:52:35] [PASSED] rounding1
[11:52:35] [PASSED] rounding2
[11:52:35] [PASSED] rounding3
[11:52:35] [PASSED] rounding4
[11:52:35] =========== [PASSED] drm_test_check_plane_state ============
[11:52:35] =========== drm_test_check_invalid_plane_state ============
[11:52:35] [PASSED] positioning_invalid
[11:52:35] [PASSED] upscaling_invalid
[11:52:35] [PASSED] downscaling_invalid
[11:52:35] ======= [PASSED] drm_test_check_invalid_plane_state ========
[11:52:35] ================ [PASSED] drm_plane_helper =================
[11:52:35] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[11:52:35] ====== drm_test_connector_helper_tv_get_modes_check =======
[11:52:35] [PASSED] None
[11:52:35] [PASSED] PAL
[11:52:35] [PASSED] NTSC
[11:52:35] [PASSED] Both, NTSC Default
[11:52:35] [PASSED] Both, PAL Default
[11:52:35] [PASSED] Both, NTSC Default, with PAL on command-line
[11:52:35] [PASSED] Both, PAL Default, with NTSC on command-line
[11:52:35] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[11:52:35] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[11:52:35] ================== drm_rect (9 subtests) ===================
[11:52:35] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[11:52:35] [PASSED] drm_test_rect_clip_scaled_not_clipped
[11:52:35] [PASSED] drm_test_rect_clip_scaled_clipped
[11:52:35] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[11:52:35] ================= drm_test_rect_intersect =================
[11:52:35] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[11:52:35] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[11:52:35] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[11:52:35] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[11:52:35] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[11:52:35] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[11:52:35] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[11:52:35] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[11:52:35] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[11:52:35] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[11:52:35] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[11:52:35] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[11:52:35] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[11:52:35] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[11:52:35] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[11:52:35] ============= [PASSED] drm_test_rect_intersect =============
[11:52:35] ================ drm_test_rect_calc_hscale ================
[11:52:35] [PASSED] normal use
[11:52:35] [PASSED] out of max range
[11:52:35] [PASSED] out of min range
[11:52:35] [PASSED] zero dst
[11:52:35] [PASSED] negative src
[11:52:35] [PASSED] negative dst
[11:52:35] ============ [PASSED] drm_test_rect_calc_hscale ============
[11:52:35] ================ drm_test_rect_calc_vscale ================
[11:52:35] [PASSED] normal use
[11:52:35] [PASSED] out of max range
[11:52:35] [PASSED] out of min range
[11:52:35] [PASSED] zero dst
[11:52:35] [PASSED] negative src
[11:52:35] [PASSED] negative dst
[11:52:35] ============ [PASSED] drm_test_rect_calc_vscale ============
[11:52:35] ================== drm_test_rect_rotate ===================
[11:52:35] [PASSED] reflect-x
[11:52:35] [PASSED] reflect-y
[11:52:35] [PASSED] rotate-0
[11:52:35] [PASSED] rotate-90
[11:52:35] [PASSED] rotate-180
[11:52:35] [PASSED] rotate-270
[11:52:35] ============== [PASSED] drm_test_rect_rotate ===============
[11:52:35] ================ drm_test_rect_rotate_inv =================
[11:52:35] [PASSED] reflect-x
[11:52:35] [PASSED] reflect-y
[11:52:35] [PASSED] rotate-0
[11:52:35] [PASSED] rotate-90
[11:52:35] [PASSED] rotate-180
[11:52:35] [PASSED] rotate-270
[11:52:35] ============ [PASSED] drm_test_rect_rotate_inv =============
[11:52:35] ==================== [PASSED] drm_rect =====================
[11:52:35] ============ drm_sysfb_modeset_test (1 subtest) ============
[11:52:35] ============ drm_test_sysfb_build_fourcc_list =============
[11:52:35] [PASSED] no native formats
[11:52:35] [PASSED] XRGB8888 as native format
[11:52:35] [PASSED] remove duplicates
[11:52:35] [PASSED] convert alpha formats
[11:52:35] [PASSED] random formats
[11:52:35] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[11:52:35] ============= [PASSED] drm_sysfb_modeset_test ==============
[11:52:35] ================== drm_fixp (2 subtests) ===================
[11:52:35] [PASSED] drm_test_int2fixp
[11:52:35] [PASSED] drm_test_sm2fixp
[11:52:35] ==================== [PASSED] drm_fixp =====================
[11:52:35] ============================================================
[11:52:35] Testing complete. Ran 641 tests: passed: 641
[11:52:35] Elapsed time: 26.893s total, 1.825s configuring, 24.850s building, 0.194s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[11:52:35] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[11:52:37] 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:52:47] Starting KUnit Kernel (1/1)...
[11:52:47] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[11:52:47] ============= refcount_interrupt (4 subtests) ==============
[11:52:47] [PASSED] test_single_irq_change
[11:52:47] [PASSED] test_nested_irq_change
[11:52:47] [PASSED] test_multiple_irq_change
[11:52:47] [PASSED] test_irq_save
[11:52:47] =============== [PASSED] refcount_interrupt ================
[11:52:47] ================= ttm_device (5 subtests) ==================
[11:52:47] [PASSED] ttm_device_init_basic
[11:52:47] [PASSED] ttm_device_init_multiple
[11:52:47] [PASSED] ttm_device_fini_basic
[11:52:47] [PASSED] ttm_device_init_no_vma_man
[11:52:47] ================== ttm_device_init_pools ==================
[11:52:47] [PASSED] No DMA allocations, no DMA32 required
[11:52:47] [PASSED] DMA allocations, DMA32 required
[11:52:47] [PASSED] No DMA allocations, DMA32 required
[11:52:47] [PASSED] DMA allocations, no DMA32 required
[11:52:47] ============== [PASSED] ttm_device_init_pools ==============
[11:52:47] =================== [PASSED] ttm_device ====================
[11:52:47] ================== ttm_pool (8 subtests) ===================
[11:52:47] ================== ttm_pool_alloc_basic ===================
[11:52:47] [PASSED] One page
[11:52:47] [PASSED] More than one page
[11:52:47] [PASSED] Above the allocation limit
[11:52:47] [PASSED] One page, with coherent DMA mappings enabled
[11:52:47] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[11:52:47] ============== [PASSED] ttm_pool_alloc_basic ===============
[11:52:47] ============== ttm_pool_alloc_basic_dma_addr ==============
[11:52:47] [PASSED] One page
[11:52:47] [PASSED] More than one page
[11:52:47] [PASSED] Above the allocation limit
[11:52:47] [PASSED] One page, with coherent DMA mappings enabled
[11:52:47] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[11:52:47] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[11:52:47] [PASSED] ttm_pool_alloc_order_caching_match
[11:52:47] [PASSED] ttm_pool_alloc_caching_mismatch
[11:52:47] [PASSED] ttm_pool_alloc_order_mismatch
[11:52:47] [PASSED] ttm_pool_free_dma_alloc
[11:52:47] [PASSED] ttm_pool_free_no_dma_alloc
[11:52:47] [PASSED] ttm_pool_fini_basic
[11:52:47] ==================== [PASSED] ttm_pool =====================
[11:52:47] ================ ttm_resource (8 subtests) =================
[11:52:47] ================= ttm_resource_init_basic =================
[11:52:47] [PASSED] Init resource in TTM_PL_SYSTEM
[11:52:47] [PASSED] Init resource in TTM_PL_VRAM
[11:52:47] [PASSED] Init resource in a private placement
[11:52:47] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[11:52:47] ============= [PASSED] ttm_resource_init_basic =============
[11:52:47] [PASSED] ttm_resource_init_pinned
[11:52:47] [PASSED] ttm_resource_fini_basic
[11:52:47] [PASSED] ttm_resource_manager_init_basic
[11:52:47] [PASSED] ttm_resource_manager_usage_basic
[11:52:47] [PASSED] ttm_resource_manager_set_used_basic
[11:52:47] [PASSED] ttm_sys_man_alloc_basic
[11:52:47] [PASSED] ttm_sys_man_free_basic
[11:52:47] ================== [PASSED] ttm_resource ===================
[11:52:47] =================== ttm_tt (15 subtests) ===================
[11:52:47] ==================== ttm_tt_init_basic ====================
[11:52:47] [PASSED] Page-aligned size
[11:52:47] [PASSED] Extra pages requested
[11:52:47] ================ [PASSED] ttm_tt_init_basic ================
[11:52:47] [PASSED] ttm_tt_init_misaligned
[11:52:47] [PASSED] ttm_tt_fini_basic
[11:52:47] [PASSED] ttm_tt_fini_sg
[11:52:47] [PASSED] ttm_tt_fini_shmem
[11:52:47] [PASSED] ttm_tt_create_basic
[11:52:47] [PASSED] ttm_tt_create_invalid_bo_type
[11:52:47] [PASSED] ttm_tt_create_ttm_exists
[11:52:47] [PASSED] ttm_tt_create_failed
[11:52:47] [PASSED] ttm_tt_destroy_basic
[11:52:47] [PASSED] ttm_tt_populate_null_ttm
[11:52:47] [PASSED] ttm_tt_populate_populated_ttm
[11:52:47] [PASSED] ttm_tt_unpopulate_basic
[11:52:47] [PASSED] ttm_tt_unpopulate_empty_ttm
[11:52:47] [PASSED] ttm_tt_swapin_basic
[11:52:47] ===================== [PASSED] ttm_tt ======================
[11:52:47] =================== ttm_bo (14 subtests) ===================
[11:52:47] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[11:52:47] [PASSED] Cannot be interrupted and sleeps
[11:52:47] [PASSED] Cannot be interrupted, locks straight away
[11:52:47] [PASSED] Can be interrupted, sleeps
[11:52:47] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[11:52:47] [PASSED] ttm_bo_reserve_locked_no_sleep
[11:52:47] [PASSED] ttm_bo_reserve_no_wait_ticket
[11:52:47] [PASSED] ttm_bo_reserve_double_resv
[11:52:47] [PASSED] ttm_bo_reserve_interrupted
[11:52:47] [PASSED] ttm_bo_reserve_deadlock
[11:52:47] [PASSED] ttm_bo_unreserve_basic
[11:52:47] [PASSED] ttm_bo_unreserve_pinned
[11:52:47] [PASSED] ttm_bo_unreserve_bulk
[11:52:47] [PASSED] ttm_bo_fini_basic
[11:52:47] [PASSED] ttm_bo_fini_shared_resv
[11:52:47] [PASSED] ttm_bo_pin_basic
[11:52:47] [PASSED] ttm_bo_pin_unpin_resource
[11:52:47] [PASSED] ttm_bo_multiple_pin_one_unpin
[11:52:47] ===================== [PASSED] ttm_bo ======================
[11:52:47] ============== ttm_bo_validate (22 subtests) ===============
[11:52:47] ============== ttm_bo_init_reserved_sys_man ===============
[11:52:47] [PASSED] Buffer object for userspace
[11:52:47] [PASSED] Kernel buffer object
[11:52:47] [PASSED] Shared buffer object
[11:52:47] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[11:52:47] ============== ttm_bo_init_reserved_mock_man ==============
[11:52:47] [PASSED] Buffer object for userspace
[11:52:47] [PASSED] Kernel buffer object
[11:52:47] [PASSED] Shared buffer object
[11:52:47] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[11:52:47] [PASSED] ttm_bo_init_reserved_resv
[11:52:47] ================== ttm_bo_validate_basic ==================
[11:52:47] [PASSED] Buffer object for userspace
[11:52:47] [PASSED] Kernel buffer object
[11:52:47] [PASSED] Shared buffer object
[11:52:47] ============== [PASSED] ttm_bo_validate_basic ==============
[11:52:47] [PASSED] ttm_bo_validate_invalid_placement
[11:52:47] ============= ttm_bo_validate_same_placement ==============
[11:52:47] [PASSED] System manager
[11:52:47] [PASSED] VRAM manager
[11:52:47] ========= [PASSED] ttm_bo_validate_same_placement ==========
[11:52:47] [PASSED] ttm_bo_validate_failed_alloc
[11:52:47] [PASSED] ttm_bo_validate_pinned
[11:52:47] [PASSED] ttm_bo_validate_busy_placement
[11:52:47] ================ ttm_bo_validate_multihop =================
[11:52:47] [PASSED] Buffer object for userspace
[11:52:47] [PASSED] Kernel buffer object
[11:52:47] [PASSED] Shared buffer object
[11:52:47] ============ [PASSED] ttm_bo_validate_multihop =============
[11:52:47] ========== ttm_bo_validate_no_placement_signaled ==========
[11:52:47] [PASSED] Buffer object in system domain, no page vector
[11:52:47] [PASSED] Buffer object in system domain with an existing page vector
[11:52:47] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[11:52:47] ======== ttm_bo_validate_no_placement_not_signaled ========
[11:52:47] [PASSED] Buffer object for userspace
[11:52:47] [PASSED] Kernel buffer object
[11:52:47] [PASSED] Shared buffer object
[11:52:47] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[11:52:47] [PASSED] ttm_bo_validate_move_fence_signaled
[11:52:47] ========= ttm_bo_validate_move_fence_not_signaled =========
[11:52:47] [PASSED] Waits for GPU
[11:52:47] [PASSED] Tries to lock straight away
[11:52:47] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[11:52:47] [PASSED] ttm_bo_validate_swapout
[11:52:47] [PASSED] ttm_bo_validate_happy_evict
[11:52:47] [PASSED] ttm_bo_validate_all_pinned_evict
[11:52:47] [PASSED] ttm_bo_validate_allowed_only_evict
[11:52:47] [PASSED] ttm_bo_validate_deleted_evict
[11:52:47] [PASSED] ttm_bo_validate_busy_domain_evict
[11:52:47] [PASSED] ttm_bo_validate_evict_gutting
[11:52:47] [PASSED] ttm_bo_validate_recrusive_evict
[11:52:47] ================= [PASSED] ttm_bo_validate =================
[11:52:47] ============================================================
[11:52:47] Testing complete. Ran 106 tests: passed: 106
[11:52:47] Elapsed time: 12.073s total, 1.806s configuring, 10.052s building, 0.178s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[11:52:48] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[11:52:49] 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:52:58] Starting KUnit Kernel (1/1)...
[11:52:58] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[11:52:58] ============= refcount_interrupt (4 subtests) ==============
[11:52:58] [PASSED] test_single_irq_change
[11:52:58] [PASSED] test_nested_irq_change
[11:52:58] [PASSED] test_multiple_irq_change
[11:52:58] [PASSED] test_irq_save
[11:52:58] =============== [PASSED] refcount_interrupt ================
[11:52:58] =============== dma-buf-fence (12 subtests) ================
[11:52:58] [PASSED] test_sanitycheck
[11:52:58] [PASSED] test_signaling
[11:52:58] [PASSED] test_add_callback
[11:52:58] [PASSED] test_late_add_callback
[11:52:58] [PASSED] test_rm_callback
[11:52:58] [PASSED] test_late_rm_callback
[11:52:58] [PASSED] test_status
[11:52:58] [PASSED] test_error
[11:52:58] [PASSED] test_wait
[11:52:58] [PASSED] test_wait_timeout
[11:52:58] [PASSED] test_stub
[11:52:58] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[11:52:58] ================== [PASSED] dma-buf-fence ==================
[11:52:58] ============ dma-buf-fence-chain (11 subtests) =============
[11:52:58] [PASSED] test_sanitycheck
[11:52:58] [PASSED] test_find_seqno
[11:52:58] [PASSED] test_find_signaled
[11:52:58] [PASSED] test_find_out_of_order
[11:53:03] [PASSED] test_find_gap
[11:53:03] [PASSED] test_find_race
[11:53:03] [PASSED] test_signal_forward
[11:53:03] [PASSED] test_signal_backward
[11:53:03] [PASSED] test_wait_forward
[11:53:03] [PASSED] test_wait_backward
[11:53:03] [PASSED] test_wait_random
[11:53:03] =============== [PASSED] dma-buf-fence-chain ===============
[11:53:03] ============ dma-buf-fence-unwrap (10 subtests) ============
[11:53:03] [PASSED] test_sanitycheck
[11:53:03] [PASSED] test_unwrap_array
[11:53:03] [PASSED] test_unwrap_chain
[11:53:03] [PASSED] test_unwrap_chain_array
[11:53:03] [PASSED] test_unwrap_merge
[11:53:03] [PASSED] test_unwrap_merge_duplicate
[11:53:03] [PASSED] test_unwrap_merge_seqno
[11:53:03] [PASSED] test_unwrap_merge_order
[11:53:03] [PASSED] test_unwrap_merge_complex
[11:53:03] [PASSED] test_unwrap_merge_complex_seqno
[11:53:03] ============== [PASSED] dma-buf-fence-unwrap ===============
[11:53:03] ================ dma-buf-resv (5 subtests) =================
[11:53:03] [PASSED] test_sanitycheck
[11:53:03] ===================== test_signaling ======================
[11:53:03] [PASSED] kernel
[11:53:03] [PASSED] write
[11:53:03] [PASSED] read
[11:53:03] [PASSED] bookkeep
[11:53:03] ================= [PASSED] test_signaling ==================
[11:53:03] ====================== test_for_each ======================
[11:53:03] [PASSED] kernel
[11:53:03] [PASSED] write
[11:53:03] [PASSED] read
[11:53:03] [PASSED] bookkeep
[11:53:03] ================== [PASSED] test_for_each ==================
[11:53:03] ================= test_for_each_unlocked ==================
[11:53:03] [PASSED] kernel
[11:53:03] [PASSED] write
[11:53:03] [PASSED] read
[11:53:03] [PASSED] bookkeep
[11:53:03] ============= [PASSED] test_for_each_unlocked ==============
[11:53:03] ===================== test_get_fences =====================
[11:53:03] [PASSED] kernel
[11:53:03] [PASSED] write
[11:53:03] [PASSED] read
[11:53:03] [PASSED] bookkeep
[11:53:03] ================= [PASSED] test_get_fences =================
[11:53:03] ================== [PASSED] dma-buf-resv ===================
[11:53:03] ============================================================
[11:53:03] Testing complete. Ran 54 tests: passed: 53, skipped: 1
[11:53:03] Elapsed time: 15.954s total, 1.818s configuring, 8.813s building, 5.273s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 47+ messages in thread* ✓ Xe.CI.BAT: success for Add memory page offlining support (rev22)
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (15 preceding siblings ...)
2026-08-31 11:53 ` ✓ CI.KUnit: success for Add memory page offlining support (rev22) Patchwork
@ 2026-08-31 13:28 ` Patchwork
2026-08-31 13:58 ` ✗ Xe.CI.FULL: failure " Patchwork
` (4 subsequent siblings)
21 siblings, 0 replies; 47+ messages in thread
From: Patchwork @ 2026-08-31 13:28 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 869 bytes --]
== Series Details ==
Series: Add memory page offlining support (rev22)
URL : https://patchwork.freedesktop.org/series/161473/
State : success
== Summary ==
CI Bug Log - changes from xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89_BAT -> xe-pw-161473v22_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (13 -> 13)
------------------------------
No changes in participating hosts
Changes
-------
No changes found
Build changes
-------------
* Linux: xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89 -> xe-pw-161473v22
IGT_9078: 9078
xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89: 2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89
xe-pw-161473v22: 161473v22
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/index.html
[-- Attachment #2: Type: text/html, Size: 1418 bytes --]
^ permalink raw reply [flat|nested] 47+ messages in thread* ✗ Xe.CI.FULL: failure for Add memory page offlining support (rev22)
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (16 preceding siblings ...)
2026-08-31 13:28 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-08-31 13:58 ` Patchwork
2026-08-31 14:04 ` [PATCH V19 00/15] Add memory page offlining support Rodrigo Vivi
` (3 subsequent siblings)
21 siblings, 0 replies; 47+ messages in thread
From: Patchwork @ 2026-08-31 13:58 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 25550 bytes --]
== Series Details ==
Series: Add memory page offlining support (rev22)
URL : https://patchwork.freedesktop.org/series/161473/
State : failure
== Summary ==
CI Bug Log - changes from xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89_FULL -> xe-pw-161473v22_FULL
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-161473v22_FULL absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-161473v22_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-161473v22_FULL:
### IGT changes ###
#### Possible regressions ####
* igt@xe_exec_threads@threads-hang-userptr-invalidate-race:
- shard-lnl: [PASS][1] -> [FAIL][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-lnl-8/igt@xe_exec_threads@threads-hang-userptr-invalidate-race.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-1/igt@xe_exec_threads@threads-hang-userptr-invalidate-race.html
Known issues
------------
Here are the changes found in xe-pw-161473v22_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_async_flips@alternate-sync-async-flip:
- shard-bmg: [PASS][3] -> [FAIL][4] ([Intel XE#3718] / [Intel XE#6078])
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-bmg-5/igt@kms_async_flips@alternate-sync-async-flip.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-bmg-3/igt@kms_async_flips@alternate-sync-async-flip.html
* igt@kms_async_flips@alternate-sync-async-flip@pipe-b-dp-2:
- shard-bmg: [PASS][5] -> [FAIL][6] ([Intel XE#6078])
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-bmg-5/igt@kms_async_flips@alternate-sync-async-flip@pipe-b-dp-2.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-bmg-3/igt@kms_async_flips@alternate-sync-async-flip@pipe-b-dp-2.html
* igt@kms_big_fb@linear-64bpp-rotate-90:
- shard-lnl: NOTRUN -> [SKIP][7] ([Intel XE#1407])
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_big_fb@linear-64bpp-rotate-90.html
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0:
- shard-lnl: NOTRUN -> [SKIP][8] ([Intel XE#1124])
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0.html
* igt@kms_bw@connected-linear-tiling-2-displays-target-1920x1080p:
- shard-lnl: NOTRUN -> [SKIP][9] ([Intel XE#7679])
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_bw@connected-linear-tiling-2-displays-target-1920x1080p.html
* igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs@pipe-a-edp-1:
- shard-lnl: NOTRUN -> [SKIP][10] ([Intel XE#2669] / [Intel XE#7389]) +3 other tests skip
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_ccs@bad-rotation-90-4-tiled-bmg-ccs@pipe-a-edp-1.html
* igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs:
- shard-lnl: NOTRUN -> [SKIP][11] ([Intel XE#2887])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_ccs@crc-primary-rotation-180-yf-tiled-ccs.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-d-hdmi-a-3:
- shard-bmg: NOTRUN -> [INCOMPLETE][12] ([Intel XE#7084] / [Intel XE#8150])
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-bmg-4/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-d-hdmi-a-3.html
* igt@kms_chamelium_color@ctm-negative:
- shard-lnl: NOTRUN -> [SKIP][13] ([Intel XE#306] / [Intel XE#7358])
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_chamelium_color@ctm-negative.html
* igt@kms_chamelium_edid@dp-edid-resolution-list:
- shard-lnl: NOTRUN -> [SKIP][14] ([Intel XE#373])
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_chamelium_edid@dp-edid-resolution-list.html
* igt@kms_content_protection@legacy-hdcp14:
- shard-lnl: NOTRUN -> [SKIP][15] ([Intel XE#7642])
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_content_protection@legacy-hdcp14.html
* igt@kms_dsc@dsc-with-formats:
- shard-lnl: NOTRUN -> [SKIP][16] ([Intel XE#8265])
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_dsc@dsc-with-formats.html
* igt@kms_flip@2x-plain-flip-ts-check-interruptible:
- shard-lnl: NOTRUN -> [SKIP][17] ([Intel XE#1421])
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_flip@2x-plain-flip-ts-check-interruptible.html
* igt@kms_flip@flip-vs-expired-vblank@c-edp1:
- shard-lnl: [PASS][18] -> [FAIL][19] ([Intel XE#301] / [Intel XE#3149]) +2 other tests fail
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank@c-edp1.html
* igt@kms_flip@wf_vblank-ts-check:
- shard-bmg: [PASS][20] -> [FAIL][21] ([Intel XE#5408] / [Intel XE#6266])
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-bmg-3/igt@kms_flip@wf_vblank-ts-check.html
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-bmg-3/igt@kms_flip@wf_vblank-ts-check.html
* igt@kms_flip@wf_vblank-ts-check@d-dp2:
- shard-bmg: [PASS][22] -> [FAIL][23] ([Intel XE#6266])
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-bmg-3/igt@kms_flip@wf_vblank-ts-check@d-dp2.html
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-bmg-3/igt@kms_flip@wf_vblank-ts-check@d-dp2.html
* igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling:
- shard-lnl: NOTRUN -> [SKIP][24] ([Intel XE#7178] / [Intel XE#7349])
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_flip_scaled_crc@flip-32bpp-4tile-to-32bpp-4tiledg2rcccs-downscaling.html
* igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling:
- shard-lnl: NOTRUN -> [SKIP][25] ([Intel XE#7178] / [Intel XE#7351])
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_flip_scaled_crc@flip-32bpp-yftileccs-to-64bpp-yftile-downscaling.html
* igt@kms_frontbuffer_tracking@drrs-shrfb-scaledprimary:
- shard-lnl: NOTRUN -> [SKIP][26] ([Intel XE#6312] / [Intel XE#651]) +2 other tests skip
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_frontbuffer_tracking@drrs-shrfb-scaledprimary.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-render:
- shard-lnl: NOTRUN -> [SKIP][27] ([Intel XE#656] / [Intel XE#7905]) +5 other tests skip
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-cur-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbcdrrs-abgr161616f-draw-render:
- shard-lnl: NOTRUN -> [SKIP][28] ([Intel XE#7061] / [Intel XE#7356]) +1 other test skip
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_frontbuffer_tracking@fbcdrrs-abgr161616f-draw-render.html
* igt@kms_frontbuffer_tracking@fbcdrrshdr-1p-primscrn-spr-indfb-move:
- shard-lnl: NOTRUN -> [SKIP][29] ([Intel XE#6312]) +1 other test skip
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_frontbuffer_tracking@fbcdrrshdr-1p-primscrn-spr-indfb-move.html
* igt@kms_frontbuffer_tracking@fbcpsrhdr-argb161616f-draw-render:
- shard-lnl: NOTRUN -> [SKIP][30] ([Intel XE#7061])
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_frontbuffer_tracking@fbcpsrhdr-argb161616f-draw-render.html
* igt@kms_frontbuffer_tracking@hdr-2p-scndscrn-indfb-msflip-blt:
- shard-lnl: NOTRUN -> [SKIP][31] ([Intel XE#7905]) +7 other tests skip
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_frontbuffer_tracking@hdr-2p-scndscrn-indfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@psrhdr-suspend:
- shard-lnl: NOTRUN -> [SKIP][32] ([Intel XE#7865]) +5 other tests skip
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_frontbuffer_tracking@psrhdr-suspend.html
* igt@kms_hdr@invalid-hdr:
- shard-bmg: [PASS][33] -> [SKIP][34] ([Intel XE#1503])
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-bmg-6/igt@kms_hdr@invalid-hdr.html
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-bmg-4/igt@kms_hdr@invalid-hdr.html
* igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-modifier-source-clamping:
- shard-lnl: NOTRUN -> [SKIP][35] ([Intel XE#7283])
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_plane@pixel-format-4-tiled-mtl-rc-ccs-modifier-source-clamping.html
* igt@kms_plane_lowres@tiling-y:
- shard-lnl: NOTRUN -> [SKIP][36] ([Intel XE#599])
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_plane_lowres@tiling-y.html
* igt@kms_plane_multiple@2x-tiling-x:
- shard-lnl: NOTRUN -> [SKIP][37] ([Intel XE#4596] / [Intel XE#5854])
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_plane_multiple@2x-tiling-x.html
* igt@kms_pm_dc@dc3co-vpb-simulation:
- shard-lnl: NOTRUN -> [SKIP][38] ([Intel XE#8395] / [Intel XE#8396]) +1 other test skip
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_pm_dc@dc3co-vpb-simulation.html
* igt@kms_pm_dc@dc3co-vpb-simulation@psr2-yuv420:
- shard-lnl: NOTRUN -> [SKIP][39] ([Intel XE#8396]) +1 other test skip
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_pm_dc@dc3co-vpb-simulation@psr2-yuv420.html
* igt@kms_pm_dc@dc5-dpms-negative:
- shard-lnl: NOTRUN -> [SKIP][40] ([Intel XE#1131])
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_pm_dc@dc5-dpms-negative.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180:
- shard-lnl: NOTRUN -> [SKIP][41] ([Intel XE#1127] / [Intel XE#5813])
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-180.html
* igt@kms_vrr@negative-basic:
- shard-lnl: NOTRUN -> [SKIP][42] ([Intel XE#1499])
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@kms_vrr@negative-basic.html
* igt@xe_evict@evict-beng-mixed-threads-large:
- shard-lnl: NOTRUN -> [SKIP][43] ([Intel XE#6540] / [Intel XE#688]) +1 other test skip
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@xe_evict@evict-beng-mixed-threads-large.html
* igt@xe_exec_balancer@once-cm-parallel-userptr:
- shard-lnl: NOTRUN -> [SKIP][44] ([Intel XE#7482]) +1 other test skip
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@xe_exec_balancer@once-cm-parallel-userptr.html
* igt@xe_exec_basic@multigpu-no-exec-basic-defer-bind:
- shard-lnl: NOTRUN -> [SKIP][45] ([Intel XE#1392])
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@xe_exec_basic@multigpu-no-exec-basic-defer-bind.html
* igt@xe_exec_fault_mode@twice-multi-queue-rebind-prefetch:
- shard-lnl: NOTRUN -> [SKIP][46] ([Intel XE#8374]) +1 other test skip
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@xe_exec_fault_mode@twice-multi-queue-rebind-prefetch.html
* igt@xe_exec_multi_queue@few-execs-preempt-mode-basic-smem:
- shard-lnl: NOTRUN -> [SKIP][47] ([Intel XE#8364]) +4 other tests skip
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@xe_exec_multi_queue@few-execs-preempt-mode-basic-smem.html
* igt@xe_exec_threads@threads-multi-queue-userptr-rebind:
- shard-lnl: NOTRUN -> [SKIP][48] ([Intel XE#8378]) +1 other test skip
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@xe_exec_threads@threads-multi-queue-userptr-rebind.html
* igt@xe_gt_freq@freq_suspend:
- shard-lnl: NOTRUN -> [SKIP][49] ([Intel XE#584] / [Intel XE#7369])
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@xe_gt_freq@freq_suspend.html
* igt@xe_multigpu_svm@mgpu-pagefault-prefetch:
- shard-lnl: NOTRUN -> [SKIP][50] ([Intel XE#6964])
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@xe_multigpu_svm@mgpu-pagefault-prefetch.html
* igt@xe_pat@l2-flush-opt-svm-pat-restrict:
- shard-lnl: NOTRUN -> [SKIP][51] ([Intel XE#7590] / [Intel XE#7772])
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@xe_pat@l2-flush-opt-svm-pat-restrict.html
* igt@xe_pat@pat-index-xehpc:
- shard-lnl: NOTRUN -> [SKIP][52] ([Intel XE#1420] / [Intel XE#2838] / [Intel XE#7590])
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@xe_pat@pat-index-xehpc.html
* igt@xe_sriov_admin@default-sched-attributes-vfs-disabled:
- shard-lnl: NOTRUN -> [SKIP][53] ([Intel XE#7174])
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@xe_sriov_admin@default-sched-attributes-vfs-disabled.html
* igt@xe_sriov_scheduling@equal-throughput-normal-priority:
- shard-lnl: NOTRUN -> [SKIP][54] ([Intel XE#8339])
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@xe_sriov_scheduling@equal-throughput-normal-priority.html
#### Possible fixes ####
* igt@kms_async_flips@alternate-sync-async-flip:
- shard-lnl: [FAIL][55] ([Intel XE#3718] / [Intel XE#7265]) -> [PASS][56] +1 other test pass
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-lnl-8/igt@kms_async_flips@alternate-sync-async-flip.html
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-1/igt@kms_async_flips@alternate-sync-async-flip.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-c-hdmi-a-3:
- shard-bmg: [INCOMPLETE][57] ([Intel XE#7084] / [Intel XE#8150]) -> [PASS][58]
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-bmg-6/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-c-hdmi-a-3.html
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-bmg-4/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-c-hdmi-a-3.html
* igt@kms_flip@2x-flip-vs-absolute-wf_vblank@ad-dp2-hdmi-a3:
- shard-bmg: [FAIL][59] ([Intel XE#6266]) -> [PASS][60] +1 other test pass
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-bmg-3/igt@kms_flip@2x-flip-vs-absolute-wf_vblank@ad-dp2-hdmi-a3.html
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-bmg-8/igt@kms_flip@2x-flip-vs-absolute-wf_vblank@ad-dp2-hdmi-a3.html
* igt@kms_flip@flip-vs-expired-vblank@b-edp1:
- shard-lnl: [FAIL][61] ([Intel XE#301]) -> [PASS][62]
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
* igt@kms_flip@plain-flip-ts-check-interruptible@a-dp2:
- shard-bmg: [FAIL][63] ([Intel XE#5408] / [Intel XE#6266]) -> [PASS][64] +1 other test pass
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-bmg-7/igt@kms_flip@plain-flip-ts-check-interruptible@a-dp2.html
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-bmg-4/igt@kms_flip@plain-flip-ts-check-interruptible@a-dp2.html
* igt@xe_evict@evict-mixed-many-threads-small:
- shard-bmg: [INCOMPLETE][65] ([Intel XE#6321] / [Intel XE#8355]) -> [PASS][66]
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-bmg-1/igt@xe_evict@evict-mixed-many-threads-small.html
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-bmg-10/igt@xe_evict@evict-mixed-many-threads-small.html
* igt@xe_exec_threads@threads-hang-userptr-invalidate-race:
- shard-bmg: [FAIL][67] -> [PASS][68]
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-bmg-5/igt@xe_exec_threads@threads-hang-userptr-invalidate-race.html
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-bmg-3/igt@xe_exec_threads@threads-hang-userptr-invalidate-race.html
* igt@xe_pmu@engine-activity-accuracy-50:
- shard-bmg: [FAIL][69] ([Intel XE#8555]) -> [PASS][70] +5 other tests pass
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-bmg-7/igt@xe_pmu@engine-activity-accuracy-50.html
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-bmg-9/igt@xe_pmu@engine-activity-accuracy-50.html
#### Warnings ####
* igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions:
- shard-lnl: [SKIP][71] ([Intel XE#309] / [Intel XE#7343]) -> [SKIP][72] ([Intel XE#309] / [Intel XE#7343] / [Intel XE#7935])
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-lnl-1/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-8/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html
* igt@kms_flip@flip-vs-expired-vblank:
- shard-lnl: [FAIL][73] ([Intel XE#301]) -> [FAIL][74] ([Intel XE#301] / [Intel XE#3149])
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank.html
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank.html
* igt@kms_hdr@brightness-with-hdr:
- shard-bmg: [SKIP][75] ([Intel XE#3544]) -> [SKIP][76] ([Intel XE#3374] / [Intel XE#3544])
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-bmg-3/igt@kms_hdr@brightness-with-hdr.html
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-bmg-8/igt@kms_hdr@brightness-with-hdr.html
* igt@xe_wedged@basic-wedged:
- shard-lnl: [ABORT][77] ([Intel XE#8963]) -> [DMESG-WARN][78] ([Intel XE#8963])
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89/shard-lnl-7/igt@xe_wedged@basic-wedged.html
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/shard-lnl-3/igt@xe_wedged@basic-wedged.html
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
[Intel XE#1131]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1131
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
[Intel XE#1420]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1420
[Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
[Intel XE#1499]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1499
[Intel XE#1503]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1503
[Intel XE#2669]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2669
[Intel XE#2838]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2838
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
[Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
[Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
[Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
[Intel XE#3718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3718
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#4596]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4596
[Intel XE#5408]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5408
[Intel XE#5813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5813
[Intel XE#584]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/584
[Intel XE#5854]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5854
[Intel XE#599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/599
[Intel XE#6078]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6078
[Intel XE#6266]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6266
[Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
[Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#6540]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6540
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
[Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
[Intel XE#7084]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7084
[Intel XE#7174]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7174
[Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
[Intel XE#7265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7265
[Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
[Intel XE#7343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7343
[Intel XE#7349]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7349
[Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
[Intel XE#7356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7356
[Intel XE#7358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7358
[Intel XE#7369]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7369
[Intel XE#7389]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7389
[Intel XE#7482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7482
[Intel XE#7590]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7590
[Intel XE#7642]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7642
[Intel XE#7679]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7679
[Intel XE#7772]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7772
[Intel XE#7865]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7865
[Intel XE#7905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7905
[Intel XE#7935]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7935
[Intel XE#8150]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8150
[Intel XE#8265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8265
[Intel XE#8339]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8339
[Intel XE#8355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8355
[Intel XE#8364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8364
[Intel XE#8374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8374
[Intel XE#8378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8378
[Intel XE#8395]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8395
[Intel XE#8396]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8396
[Intel XE#8555]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8555
[Intel XE#8963]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8963
Build changes
-------------
* Linux: xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89 -> xe-pw-161473v22
IGT_9078: 9078
xe-5661-2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89: 2ba2b8cd4220574995b91c5fe2dbf61bfaf05a89
xe-pw-161473v22: 161473v22
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v22/index.html
[-- Attachment #2: Type: text/html, Size: 28885 bytes --]
^ permalink raw reply [flat|nested] 47+ messages in thread* Re: [PATCH V19 00/15] Add memory page offlining support
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (17 preceding siblings ...)
2026-08-31 13:58 ` ✗ Xe.CI.FULL: failure " Patchwork
@ 2026-08-31 14:04 ` Rodrigo Vivi
2026-08-31 14:58 ` Matthew Brost
2026-09-01 4:09 ` Upadhyay, Tejas
2026-08-31 17:44 ` ✓ CI.KUnit: success for Add memory page offlining support (rev23) Patchwork
` (2 subsequent siblings)
21 siblings, 2 replies; 47+ messages in thread
From: Rodrigo Vivi @ 2026-08-31 14:04 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe, himal.prasad.ghimiray
On Mon, Aug 31, 2026 at 12:19:42PM +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/748439/?series=170555&rev=2
>
> v19:
> - Sashiko review comment closure
I was going to push this series, but I see that there are still
many Sashiko comments that seems valid in this version.
Could you please comment one by one at least documenting why we
are ignoring those? (I mean, only for the ones that are not pre-existing)
Thanks,
Rodrigo.
> - Sliting of making xe_bo_ttm_purge() export and NULL handling
> - Remove redundant code in xe_ttm_vram_reserve_page_at_addr()
> - Resolve nit comments provided in configfs and debugfs
> v18:
> - Splitting out the sysfs patch; it will come later once it is redesigned
> - Address sashiko reivew comments
> - Add debugfs and adjust igt tests and fault injection
> v17:
> - Rebase on drm-tip
> - Enforce CONFIG_FAULT_INJECTION_DEBUG_FS for fault inject
> 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 (15):
> drm/xe: Link VRAM object with gpu buddy
> drm/xe: Link LRC BO and its execution Queue
> drm/xe: Export xe_ttm_bo_purge()
> drm/xe: Handle NULL resource and allow purging of VRAM pages
> 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 disable_vram_page_offline attribute
> drm/xe/ras: Cache disable_vram_page_offline policy at init
> drm/xe/vram: Check disable_vram_page_offline policy in fault handler
> drm/xe: Expose bad VRAM pages via debugfs
> 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 | 25 +-
> drivers/gpu/drm/xe/xe_bo.h | 2 +
> drivers/gpu/drm/xe/xe_bo_types.h | 3 +
> drivers/gpu/drm/xe/xe_configfs.c | 72 ++-
> drivers/gpu/drm/xe/xe_configfs.h | 2 +
> drivers/gpu/drm/xe/xe_debugfs.c | 51 +++
> drivers/gpu/drm/xe/xe_debugfs.h | 2 +
> drivers/gpu/drm/xe/xe_dma_buf.c | 3 +
> drivers/gpu/drm/xe/xe_drm_ras_types.h | 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 | 36 +-
> drivers/gpu/drm/xe/xe_lrc.c | 1 +
> drivers/gpu/drm/xe/xe_ras.c | 9 +
> drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 510 ++++++++++++++++++++-
> drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 4 +
> drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 40 ++
> include/uapi/drm/xe_drm.h | 18 +-
> 19 files changed, 760 insertions(+), 46 deletions(-)
>
> --
> 2.52.0
>
^ permalink raw reply [flat|nested] 47+ messages in thread* Re: [PATCH V19 00/15] Add memory page offlining support
2026-08-31 14:04 ` [PATCH V19 00/15] Add memory page offlining support Rodrigo Vivi
@ 2026-08-31 14:58 ` Matthew Brost
2026-09-01 4:09 ` Upadhyay, Tejas
1 sibling, 0 replies; 47+ messages in thread
From: Matthew Brost @ 2026-08-31 14:58 UTC (permalink / raw)
To: Rodrigo Vivi; +Cc: Tejas Upadhyay, intel-xe, himal.prasad.ghimiray
On Mon, Aug 31, 2026 at 10:04:48AM -0400, Rodrigo Vivi wrote:
> On Mon, Aug 31, 2026 at 12:19:42PM +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/748439/?series=170555&rev=2
> >
> > v19:
> > - Sashiko review comment closure
>
> I was going to push this series, but I see that there are still
> many Sashiko comments that seems valid in this version.
>
Let me also take a final pass look at this too before pushing it too.
Last I looked the large number of Sashiko comments was my concern.
I'll make this priority to look a bit later today.
Matt
> Could you please comment one by one at least documenting why we
> are ignoring those? (I mean, only for the ones that are not pre-existing)
>
> Thanks,
> Rodrigo.
>
> > - Sliting of making xe_bo_ttm_purge() export and NULL handling
> > - Remove redundant code in xe_ttm_vram_reserve_page_at_addr()
> > - Resolve nit comments provided in configfs and debugfs
> > v18:
> > - Splitting out the sysfs patch; it will come later once it is redesigned
> > - Address sashiko reivew comments
> > - Add debugfs and adjust igt tests and fault injection
> > v17:
> > - Rebase on drm-tip
> > - Enforce CONFIG_FAULT_INJECTION_DEBUG_FS for fault inject
> > 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 (15):
> > drm/xe: Link VRAM object with gpu buddy
> > drm/xe: Link LRC BO and its execution Queue
> > drm/xe: Export xe_ttm_bo_purge()
> > drm/xe: Handle NULL resource and allow purging of VRAM pages
> > 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 disable_vram_page_offline attribute
> > drm/xe/ras: Cache disable_vram_page_offline policy at init
> > drm/xe/vram: Check disable_vram_page_offline policy in fault handler
> > drm/xe: Expose bad VRAM pages via debugfs
> > 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 | 25 +-
> > drivers/gpu/drm/xe/xe_bo.h | 2 +
> > drivers/gpu/drm/xe/xe_bo_types.h | 3 +
> > drivers/gpu/drm/xe/xe_configfs.c | 72 ++-
> > drivers/gpu/drm/xe/xe_configfs.h | 2 +
> > drivers/gpu/drm/xe/xe_debugfs.c | 51 +++
> > drivers/gpu/drm/xe/xe_debugfs.h | 2 +
> > drivers/gpu/drm/xe/xe_dma_buf.c | 3 +
> > drivers/gpu/drm/xe/xe_drm_ras_types.h | 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 | 36 +-
> > drivers/gpu/drm/xe/xe_lrc.c | 1 +
> > drivers/gpu/drm/xe/xe_ras.c | 9 +
> > drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 510 ++++++++++++++++++++-
> > drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 4 +
> > drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 40 ++
> > include/uapi/drm/xe_drm.h | 18 +-
> > 19 files changed, 760 insertions(+), 46 deletions(-)
> >
> > --
> > 2.52.0
> >
^ permalink raw reply [flat|nested] 47+ messages in thread
* RE: [PATCH V19 00/15] Add memory page offlining support
2026-08-31 14:04 ` [PATCH V19 00/15] Add memory page offlining support Rodrigo Vivi
2026-08-31 14:58 ` Matthew Brost
@ 2026-09-01 4:09 ` Upadhyay, Tejas
1 sibling, 0 replies; 47+ messages in thread
From: Upadhyay, Tejas @ 2026-09-01 4:09 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: 31 August 2026 19:35
> To: Upadhyay, Tejas <tejas.upadhyay@intel.com>
> Cc: intel-xe@lists.freedesktop.org; Ghimiray, Himal Prasad
> <himal.prasad.ghimiray@intel.com>
> Subject: Re: [PATCH V19 00/15] Add memory page offlining support
>
> On Mon, Aug 31, 2026 at 12:19:42PM +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/748439/?series=170555&rev=2
> >
> > v19:
> > - Sashiko review comment closure
>
> I was going to push this series, but I see that there are still many Sashiko
> comments that seems valid in this version.
>
> Could you please comment one by one at least documenting why we are
> ignoring those? (I mean, only for the ones that are not pre-existing)
Ok, they are the ones which either decided to come as follow up change or not affecting in our scenarios. Let me reply to them inline.
Tejas
>
> Thanks,
> Rodrigo.
>
> > - Sliting of making xe_bo_ttm_purge() export and NULL handling
> > - Remove redundant code in xe_ttm_vram_reserve_page_at_addr()
> > - Resolve nit comments provided in configfs and debugfs
> > v18:
> > - Splitting out the sysfs patch; it will come later once it is
> > redesigned
> > - Address sashiko reivew comments
> > - Add debugfs and adjust igt tests and fault injection
> > v17:
> > - Rebase on drm-tip
> > - Enforce CONFIG_FAULT_INJECTION_DEBUG_FS for fault inject
> > 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 (15):
> > drm/xe: Link VRAM object with gpu buddy
> > drm/xe: Link LRC BO and its execution Queue
> > drm/xe: Export xe_ttm_bo_purge()
> > drm/xe: Handle NULL resource and allow purging of VRAM pages
> > 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 disable_vram_page_offline attribute
> > drm/xe/ras: Cache disable_vram_page_offline policy at init
> > drm/xe/vram: Check disable_vram_page_offline policy in fault handler
> > drm/xe: Expose bad VRAM pages via debugfs
> > 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 | 25 +-
> > drivers/gpu/drm/xe/xe_bo.h | 2 +
> > drivers/gpu/drm/xe/xe_bo_types.h | 3 +
> > drivers/gpu/drm/xe/xe_configfs.c | 72 ++-
> > drivers/gpu/drm/xe/xe_configfs.h | 2 +
> > drivers/gpu/drm/xe/xe_debugfs.c | 51 +++
> > drivers/gpu/drm/xe/xe_debugfs.h | 2 +
> > drivers/gpu/drm/xe/xe_dma_buf.c | 3 +
> > drivers/gpu/drm/xe/xe_drm_ras_types.h | 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 | 36 +-
> > drivers/gpu/drm/xe/xe_lrc.c | 1 +
> > drivers/gpu/drm/xe/xe_ras.c | 9 +
> > drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 510
> ++++++++++++++++++++-
> > drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 4 +
> > drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 40 ++
> > include/uapi/drm/xe_drm.h | 18 +-
> > 19 files changed, 760 insertions(+), 46 deletions(-)
> >
> > --
> > 2.52.0
> >
^ permalink raw reply [flat|nested] 47+ messages in thread
* ✓ CI.KUnit: success for Add memory page offlining support (rev23)
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (18 preceding siblings ...)
2026-08-31 14:04 ` [PATCH V19 00/15] Add memory page offlining support Rodrigo Vivi
@ 2026-08-31 17:44 ` Patchwork
2026-08-31 18:32 ` ✓ Xe.CI.BAT: " Patchwork
2026-08-31 22:22 ` ✗ Xe.CI.FULL: failure " Patchwork
21 siblings, 0 replies; 47+ messages in thread
From: Patchwork @ 2026-08-31 17:44 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
== Series Details ==
Series: Add memory page offlining support (rev23)
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
[17:42:46] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[17:42:50] 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
[17:43:22] Starting KUnit Kernel (1/1)...
[17:43:22] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[17:43:23] ============= refcount_interrupt (4 subtests) ==============
[17:43:23] [PASSED] test_single_irq_change
[17:43:23] [PASSED] test_nested_irq_change
[17:43:23] [PASSED] test_multiple_irq_change
[17:43:23] [PASSED] test_irq_save
[17:43:23] =============== [PASSED] refcount_interrupt ================
[17:43:23] ================== guc_buf (11 subtests) ===================
[17:43:23] [PASSED] test_smallest
[17:43:23] [PASSED] test_largest
[17:43:23] [PASSED] test_granular
[17:43:23] [PASSED] test_unique
[17:43:23] [PASSED] test_overlap
[17:43:23] [PASSED] test_reusable
[17:43:23] [PASSED] test_too_big
[17:43:23] [PASSED] test_flush
[17:43:23] [PASSED] test_lookup
[17:43:23] [PASSED] test_data
[17:43:23] [PASSED] test_class
[17:43:23] ===================== [PASSED] guc_buf =====================
[17:43:23] =================== guc_dbm (7 subtests) ===================
[17:43:23] [PASSED] test_empty
[17:43:23] [PASSED] test_default
[17:43:23] ======================== test_size ========================
[17:43:23] [PASSED] 4
[17:43:23] [PASSED] 8
[17:43:23] [PASSED] 32
[17:43:23] [PASSED] 256
[17:43:23] ==================== [PASSED] test_size ====================
[17:43:23] ======================= test_reuse ========================
[17:43:23] [PASSED] 4
[17:43:23] [PASSED] 8
[17:43:23] [PASSED] 32
[17:43:23] [PASSED] 256
[17:43:23] =================== [PASSED] test_reuse ====================
[17:43:23] =================== test_range_overlap ====================
[17:43:23] [PASSED] 4
[17:43:23] [PASSED] 8
[17:43:23] [PASSED] 32
[17:43:23] [PASSED] 256
[17:43:23] =============== [PASSED] test_range_overlap ================
[17:43:23] =================== test_range_compact ====================
[17:43:23] [PASSED] 4
[17:43:23] [PASSED] 8
[17:43:23] [PASSED] 32
[17:43:23] [PASSED] 256
[17:43:23] =============== [PASSED] test_range_compact ================
[17:43:23] ==================== test_range_spare =====================
[17:43:23] [PASSED] 4
[17:43:23] [PASSED] 8
[17:43:23] [PASSED] 32
[17:43:23] [PASSED] 256
[17:43:23] ================ [PASSED] test_range_spare =================
[17:43:23] ===================== [PASSED] guc_dbm =====================
[17:43:23] =================== guc_idm (6 subtests) ===================
[17:43:23] [PASSED] bad_init
[17:43:23] [PASSED] no_init
[17:43:23] [PASSED] init_fini
[17:43:23] [PASSED] check_used
[17:43:23] [PASSED] check_quota
[17:43:23] [PASSED] check_all
[17:43:23] ===================== [PASSED] guc_idm =====================
[17:43:23] =============== guc_klv_helpers (9 subtests) ===============
[17:43:23] [PASSED] test_count
[17:43:23] [PASSED] test_encode_u32
[17:43:23] [PASSED] test_encode_u64
[17:43:23] [PASSED] test_encode_string
[17:43:23] [PASSED] test_encode_object_raw
[17:43:23] [PASSED] test_encode_object_klv
[17:43:23] [PASSED] test_encode_object_nested
[17:43:23] [PASSED] test_encode_object_basic
[17:43:23] [PASSED] test_print
[17:43:23] ================= [PASSED] guc_klv_helpers =================
[17:43:23] =================== xe_log (4 subtests) ====================
[17:43:23] [PASSED] demo_cper
[17:43:23] [PASSED] demo_dmesg
[17:43:23] ======================= test_dmesg ========================
[17:43:23] [PASSED] test_fatal
[17:43:23] [PASSED] test_fatal_tile
[17:43:23] [PASSED] test_fatal_gt
[17:43:23] [PASSED] test_fatal_comp
[17:43:23] [PASSED] test_fatal_comp_tile
[17:43:23] [PASSED] test_fatal_comp_gt
[17:43:23] [PASSED] test_fatal_all
[17:43:23] [PASSED] test_recoverable
[17:43:23] [PASSED] test_recoverable_tile
[17:43:23] [PASSED] test_recoverable_gt
[17:43:23] [PASSED] test_recoverable_comp
[17:43:23] [PASSED] test_recoverable_comp_tile
[17:43:23] [PASSED] test_recoverable_comp_gt
[17:43:23] [PASSED] test_recoverable_all
[17:43:23] [PASSED] test_info
[17:43:23] [PASSED] test_info_tile
[17:43:23] [PASSED] test_info_gt
[17:43:23] [PASSED] test_info_err
[17:43:23] [PASSED] test_info_comp
[17:43:23] [PASSED] test_info_comp_tile
[17:43:23] [PASSED] test_info_comp_gt
[17:43:23] [PASSED] test_info_all
[17:43:23] [PASSED] test_hw_fatal
[17:43:23] [PASSED] test_hw_recoverable
[17:43:23] [PASSED] test_hw_corrected
[17:43:23] [PASSED] test_hw_informational
[17:43:23] =================== [PASSED] test_dmesg ====================
[17:43:23] ====================== test_invalid =======================
[17:43:23] [SKIPPED] no-component no-location no-warn (requires CONFIG_DRM_XE_DEBUG)
[17:43:23] [SKIPPED] reserved location (requires CONFIG_DRM_XE_DEBUG)
[17:43:23] [SKIPPED] unknown location (requires CONFIG_DRM_XE_DEBUG)
[17:43:23] [SKIPPED] nonzero-device-id location (requires CONFIG_DRM_XE_DEBUG)
[17:43:23] [SKIPPED] invalid-tile-id location (requires CONFIG_DRM_XE_DEBUG)
[17:43:23] [SKIPPED] invalid-gt-id location (requires CONFIG_DRM_XE_DEBUG)
[17:43:23] [SKIPPED] unknown component class (requires CONFIG_DRM_XE_DEBUG)
[17:43:23] [SKIPPED] unknown system component (requires CONFIG_DRM_XE_DEBUG)
[17:43:23] [SKIPPED] unknown hardware component (requires CONFIG_DRM_XE_DEBUG)
[17:43:23] [SKIPPED] unknown component and location (requires CONFIG_DRM_XE_DEBUG)
[17:43:23] ================== [SKIPPED] test_invalid ==================
[17:43:23] ===================== [PASSED] xe_log ======================
[17:43:23] ================== no_relay (3 subtests) ===================
[17:43:23] [PASSED] xe_drops_guc2pf_if_not_ready
[17:43:23] [PASSED] xe_drops_guc2vf_if_not_ready
[17:43:23] [PASSED] xe_rejects_send_if_not_ready
[17:43:23] ==================== [PASSED] no_relay =====================
[17:43:23] ================== pf_relay (14 subtests) ==================
[17:43:23] [PASSED] pf_rejects_guc2pf_too_short
[17:43:23] [PASSED] pf_rejects_guc2pf_too_long
[17:43:23] [PASSED] pf_rejects_guc2pf_no_payload
[17:43:23] [PASSED] pf_fails_no_payload
[17:43:23] [PASSED] pf_fails_bad_origin
[17:43:23] [PASSED] pf_fails_bad_type
[17:43:23] [PASSED] pf_txn_reports_error
[17:43:23] [PASSED] pf_txn_sends_pf2guc
[17:43:23] [PASSED] pf_sends_pf2guc
[17:43:23] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[17:43:23] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[17:43:23] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[17:43:23] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[17:43:23] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[17:43:23] ==================== [PASSED] pf_relay =====================
[17:43:23] ================== vf_relay (3 subtests) ===================
[17:43:23] [PASSED] vf_rejects_guc2vf_too_short
[17:43:23] [PASSED] vf_rejects_guc2vf_too_long
[17:43:23] [PASSED] vf_rejects_guc2vf_no_payload
[17:43:23] ==================== [PASSED] vf_relay =====================
[17:43:23] ================ pf_gt_config (9 subtests) =================
[17:43:23] [PASSED] fair_contexts_1vf
[17:43:23] [PASSED] fair_doorbells_1vf
[17:43:23] [PASSED] fair_ggtt_1vf
[17:43:23] ====================== fair_vram_1vf ======================
[17:43:23] [PASSED] 3.50 GiB
[17:43:23] [PASSED] 11.5 GiB
[17:43:23] [PASSED] 15.5 GiB
[17:43:23] [PASSED] 31.5 GiB
[17:43:23] [PASSED] 63.5 GiB
[17:43:23] [PASSED] 1.91 GiB
[17:43:23] ================== [PASSED] fair_vram_1vf ==================
[17:43:23] ================ fair_vram_1vf_admin_only =================
[17:43:23] [PASSED] 3.50 GiB
[17:43:23] [PASSED] 11.5 GiB
[17:43:23] [PASSED] 15.5 GiB
[17:43:23] [PASSED] 31.5 GiB
[17:43:23] [PASSED] 63.5 GiB
[17:43:23] [PASSED] 1.91 GiB
[17:43:23] ============ [PASSED] fair_vram_1vf_admin_only =============
[17:43:23] ====================== fair_contexts ======================
[17:43:23] [PASSED] 1 VF
[17:43:23] [PASSED] 2 VFs
[17:43:23] [PASSED] 3 VFs
[17:43:23] [PASSED] 4 VFs
[17:43:23] [PASSED] 5 VFs
[17:43:23] [PASSED] 6 VFs
[17:43:23] [PASSED] 7 VFs
[17:43:23] [PASSED] 8 VFs
[17:43:23] [PASSED] 9 VFs
[17:43:23] [PASSED] 10 VFs
[17:43:23] [PASSED] 11 VFs
[17:43:23] [PASSED] 12 VFs
[17:43:23] [PASSED] 13 VFs
[17:43:23] [PASSED] 14 VFs
[17:43:23] [PASSED] 15 VFs
[17:43:23] [PASSED] 16 VFs
[17:43:23] [PASSED] 17 VFs
[17:43:23] [PASSED] 18 VFs
[17:43:23] [PASSED] 19 VFs
[17:43:23] [PASSED] 20 VFs
[17:43:23] [PASSED] 21 VFs
[17:43:23] [PASSED] 22 VFs
[17:43:23] [PASSED] 23 VFs
[17:43:23] [PASSED] 24 VFs
[17:43:23] [PASSED] 25 VFs
[17:43:23] [PASSED] 26 VFs
[17:43:23] [PASSED] 27 VFs
[17:43:23] [PASSED] 28 VFs
[17:43:23] [PASSED] 29 VFs
[17:43:23] [PASSED] 30 VFs
[17:43:23] [PASSED] 31 VFs
[17:43:23] [PASSED] 32 VFs
[17:43:23] [PASSED] 33 VFs
[17:43:23] [PASSED] 34 VFs
[17:43:23] [PASSED] 35 VFs
[17:43:23] [PASSED] 36 VFs
[17:43:23] [PASSED] 37 VFs
[17:43:23] [PASSED] 38 VFs
[17:43:23] [PASSED] 39 VFs
[17:43:23] [PASSED] 40 VFs
[17:43:23] [PASSED] 41 VFs
[17:43:23] [PASSED] 42 VFs
[17:43:23] [PASSED] 43 VFs
[17:43:23] [PASSED] 44 VFs
[17:43:23] [PASSED] 45 VFs
[17:43:23] [PASSED] 46 VFs
[17:43:23] [PASSED] 47 VFs
[17:43:23] [PASSED] 48 VFs
[17:43:23] [PASSED] 49 VFs
[17:43:23] [PASSED] 50 VFs
[17:43:23] [PASSED] 51 VFs
[17:43:23] [PASSED] 52 VFs
[17:43:23] [PASSED] 53 VFs
[17:43:23] [PASSED] 54 VFs
[17:43:23] [PASSED] 55 VFs
[17:43:23] [PASSED] 56 VFs
[17:43:23] [PASSED] 57 VFs
[17:43:23] [PASSED] 58 VFs
[17:43:23] [PASSED] 59 VFs
[17:43:23] [PASSED] 60 VFs
[17:43:23] [PASSED] 61 VFs
[17:43:23] [PASSED] 62 VFs
[17:43:23] [PASSED] 63 VFs
[17:43:23] ================== [PASSED] fair_contexts ==================
[17:43:23] ===================== fair_doorbells ======================
[17:43:23] [PASSED] 1 VF
[17:43:23] [PASSED] 2 VFs
[17:43:23] [PASSED] 3 VFs
[17:43:23] [PASSED] 4 VFs
[17:43:23] [PASSED] 5 VFs
[17:43:23] [PASSED] 6 VFs
[17:43:23] [PASSED] 7 VFs
[17:43:23] [PASSED] 8 VFs
[17:43:23] [PASSED] 9 VFs
[17:43:23] [PASSED] 10 VFs
[17:43:23] [PASSED] 11 VFs
[17:43:23] [PASSED] 12 VFs
[17:43:23] [PASSED] 13 VFs
[17:43:23] [PASSED] 14 VFs
[17:43:23] [PASSED] 15 VFs
[17:43:23] [PASSED] 16 VFs
[17:43:23] [PASSED] 17 VFs
[17:43:23] [PASSED] 18 VFs
[17:43:23] [PASSED] 19 VFs
[17:43:23] [PASSED] 20 VFs
[17:43:23] [PASSED] 21 VFs
[17:43:23] [PASSED] 22 VFs
[17:43:23] [PASSED] 23 VFs
[17:43:23] [PASSED] 24 VFs
[17:43:23] [PASSED] 25 VFs
[17:43:23] [PASSED] 26 VFs
[17:43:23] [PASSED] 27 VFs
[17:43:23] [PASSED] 28 VFs
[17:43:23] [PASSED] 29 VFs
[17:43:23] [PASSED] 30 VFs
[17:43:23] [PASSED] 31 VFs
[17:43:23] [PASSED] 32 VFs
[17:43:23] [PASSED] 33 VFs
[17:43:23] [PASSED] 34 VFs
[17:43:23] [PASSED] 35 VFs
[17:43:23] [PASSED] 36 VFs
[17:43:23] [PASSED] 37 VFs
[17:43:23] [PASSED] 38 VFs
[17:43:23] [PASSED] 39 VFs
[17:43:23] [PASSED] 40 VFs
[17:43:23] [PASSED] 41 VFs
[17:43:23] [PASSED] 42 VFs
[17:43:23] [PASSED] 43 VFs
[17:43:23] [PASSED] 44 VFs
[17:43:23] [PASSED] 45 VFs
[17:43:23] [PASSED] 46 VFs
[17:43:23] [PASSED] 47 VFs
[17:43:23] [PASSED] 48 VFs
[17:43:23] [PASSED] 49 VFs
[17:43:23] [PASSED] 50 VFs
[17:43:23] [PASSED] 51 VFs
[17:43:23] [PASSED] 52 VFs
[17:43:23] [PASSED] 53 VFs
[17:43:23] [PASSED] 54 VFs
[17:43:23] [PASSED] 55 VFs
[17:43:23] [PASSED] 56 VFs
[17:43:23] [PASSED] 57 VFs
[17:43:23] [PASSED] 58 VFs
[17:43:23] [PASSED] 59 VFs
[17:43:23] [PASSED] 60 VFs
[17:43:23] [PASSED] 61 VFs
[17:43:23] [PASSED] 62 VFs
[17:43:23] [PASSED] 63 VFs
[17:43:23] ================= [PASSED] fair_doorbells ==================
[17:43:23] ======================== fair_ggtt ========================
[17:43:23] [PASSED] 1 VF
[17:43:23] [PASSED] 2 VFs
[17:43:23] [PASSED] 3 VFs
[17:43:23] [PASSED] 4 VFs
[17:43:23] [PASSED] 5 VFs
[17:43:23] [PASSED] 6 VFs
[17:43:23] [PASSED] 7 VFs
[17:43:23] [PASSED] 8 VFs
[17:43:23] [PASSED] 9 VFs
[17:43:23] [PASSED] 10 VFs
[17:43:23] [PASSED] 11 VFs
[17:43:23] [PASSED] 12 VFs
[17:43:23] [PASSED] 13 VFs
[17:43:23] [PASSED] 14 VFs
[17:43:23] [PASSED] 15 VFs
[17:43:23] [PASSED] 16 VFs
[17:43:23] [PASSED] 17 VFs
[17:43:23] [PASSED] 18 VFs
[17:43:23] [PASSED] 19 VFs
[17:43:23] [PASSED] 20 VFs
[17:43:23] [PASSED] 21 VFs
[17:43:23] [PASSED] 22 VFs
[17:43:23] [PASSED] 23 VFs
[17:43:23] [PASSED] 24 VFs
[17:43:23] [PASSED] 25 VFs
[17:43:23] [PASSED] 26 VFs
[17:43:23] [PASSED] 27 VFs
[17:43:23] [PASSED] 28 VFs
[17:43:23] [PASSED] 29 VFs
[17:43:23] [PASSED] 30 VFs
[17:43:23] [PASSED] 31 VFs
[17:43:23] [PASSED] 32 VFs
[17:43:23] [PASSED] 33 VFs
[17:43:23] [PASSED] 34 VFs
[17:43:23] [PASSED] 35 VFs
[17:43:23] [PASSED] 36 VFs
[17:43:23] [PASSED] 37 VFs
[17:43:23] [PASSED] 38 VFs
[17:43:23] [PASSED] 39 VFs
[17:43:23] [PASSED] 40 VFs
[17:43:23] [PASSED] 41 VFs
[17:43:23] [PASSED] 42 VFs
[17:43:23] [PASSED] 43 VFs
[17:43:23] [PASSED] 44 VFs
[17:43:23] [PASSED] 45 VFs
[17:43:23] [PASSED] 46 VFs
[17:43:23] [PASSED] 47 VFs
[17:43:23] [PASSED] 48 VFs
[17:43:23] [PASSED] 49 VFs
[17:43:23] [PASSED] 50 VFs
[17:43:23] [PASSED] 51 VFs
[17:43:23] [PASSED] 52 VFs
[17:43:23] [PASSED] 53 VFs
[17:43:23] [PASSED] 54 VFs
[17:43:23] [PASSED] 55 VFs
[17:43:23] [PASSED] 56 VFs
[17:43:23] [PASSED] 57 VFs
[17:43:23] [PASSED] 58 VFs
[17:43:23] [PASSED] 59 VFs
[17:43:23] [PASSED] 60 VFs
[17:43:23] [PASSED] 61 VFs
[17:43:23] [PASSED] 62 VFs
[17:43:23] [PASSED] 63 VFs
[17:43:23] ==================== [PASSED] fair_ggtt ====================
[17:43:23] ======================== fair_vram ========================
[17:43:23] [PASSED] 1 VF
[17:43:23] [PASSED] 2 VFs
[17:43:23] [PASSED] 3 VFs
[17:43:23] [PASSED] 4 VFs
[17:43:23] [PASSED] 5 VFs
[17:43:23] [PASSED] 6 VFs
[17:43:23] [PASSED] 7 VFs
[17:43:23] [PASSED] 8 VFs
[17:43:23] [PASSED] 9 VFs
[17:43:23] [PASSED] 10 VFs
[17:43:23] [PASSED] 11 VFs
[17:43:23] [PASSED] 12 VFs
[17:43:23] [PASSED] 13 VFs
[17:43:23] [PASSED] 14 VFs
[17:43:23] [PASSED] 15 VFs
[17:43:23] [PASSED] 16 VFs
[17:43:23] [PASSED] 17 VFs
[17:43:23] [PASSED] 18 VFs
[17:43:23] [PASSED] 19 VFs
[17:43:23] [PASSED] 20 VFs
[17:43:23] [PASSED] 21 VFs
[17:43:23] [PASSED] 22 VFs
[17:43:23] [PASSED] 23 VFs
[17:43:23] [PASSED] 24 VFs
[17:43:23] [PASSED] 25 VFs
[17:43:23] [PASSED] 26 VFs
[17:43:23] [PASSED] 27 VFs
[17:43:23] [PASSED] 28 VFs
[17:43:23] [PASSED] 29 VFs
[17:43:23] [PASSED] 30 VFs
[17:43:23] [PASSED] 31 VFs
[17:43:23] [PASSED] 32 VFs
[17:43:23] [PASSED] 33 VFs
[17:43:23] [PASSED] 34 VFs
[17:43:23] [PASSED] 35 VFs
[17:43:23] [PASSED] 36 VFs
[17:43:23] [PASSED] 37 VFs
[17:43:23] [PASSED] 38 VFs
[17:43:23] [PASSED] 39 VFs
[17:43:23] [PASSED] 40 VFs
[17:43:23] [PASSED] 41 VFs
[17:43:23] [PASSED] 42 VFs
[17:43:23] [PASSED] 43 VFs
[17:43:23] [PASSED] 44 VFs
[17:43:23] [PASSED] 45 VFs
[17:43:23] [PASSED] 46 VFs
[17:43:23] [PASSED] 47 VFs
[17:43:23] [PASSED] 48 VFs
[17:43:23] [PASSED] 49 VFs
[17:43:23] [PASSED] 50 VFs
[17:43:23] [PASSED] 51 VFs
[17:43:23] [PASSED] 52 VFs
[17:43:23] [PASSED] 53 VFs
[17:43:23] [PASSED] 54 VFs
[17:43:23] [PASSED] 55 VFs
[17:43:23] [PASSED] 56 VFs
[17:43:23] [PASSED] 57 VFs
[17:43:23] [PASSED] 58 VFs
[17:43:23] [PASSED] 59 VFs
[17:43:23] [PASSED] 60 VFs
[17:43:23] [PASSED] 61 VFs
[17:43:23] [PASSED] 62 VFs
[17:43:23] [PASSED] 63 VFs
[17:43:23] ==================== [PASSED] fair_vram ====================
[17:43:23] ================== [PASSED] pf_gt_config ===================
[17:43:23] ===================== lmtt (1 subtest) =====================
[17:43:23] ======================== test_ops =========================
[17:43:23] [PASSED] 2-level
[17:43:23] [PASSED] multi-level
[17:43:23] ==================== [PASSED] test_ops =====================
[17:43:23] ====================== [PASSED] lmtt =======================
[17:43:23] ================= sriov_packet (1 subtest) =================
[17:43:23] [PASSED] test_descriptor_init
[17:43:23] ================== [PASSED] sriov_packet ===================
[17:43:23] ================= pf_service (11 subtests) =================
[17:43:23] [PASSED] pf_negotiate_any
[17:43:23] [PASSED] pf_negotiate_base_match
[17:43:23] [PASSED] pf_negotiate_base_newer
[17:43:23] [PASSED] pf_negotiate_base_next
[17:43:23] [SKIPPED] pf_negotiate_base_older (no older minor)
[17:43:23] [PASSED] pf_negotiate_base_prev
[17:43:23] [PASSED] pf_negotiate_latest_match
[17:43:23] [PASSED] pf_negotiate_latest_newer
[17:43:23] [PASSED] pf_negotiate_latest_next
[17:43:23] [SKIPPED] pf_negotiate_latest_older (no older minor)
[17:43:23] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[17:43:23] =================== [PASSED] pf_service ====================
[17:43:23] ================= xe_guc_g2g (2 subtests) ==================
[17:43:23] ============== xe_live_guc_g2g_kunit_default ==============
[17:43:23] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[17:43:23] ============== xe_live_guc_g2g_kunit_allmem ===============
[17:43:23] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[17:43:23] =================== [SKIPPED] xe_guc_g2g ===================
[17:43:23] =================== xe_mocs (2 subtests) ===================
[17:43:23] ================ xe_live_mocs_kernel_kunit ================
[17:43:23] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[17:43:23] ================ xe_live_mocs_reset_kunit =================
[17:43:23] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[17:43:23] ==================== [SKIPPED] xe_mocs =====================
[17:43:23] ================= xe_migrate (2 subtests) ==================
[17:43:23] ================= xe_migrate_sanity_kunit =================
[17:43:23] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[17:43:23] ================== xe_validate_ccs_kunit ==================
[17:43:23] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[17:43:23] =================== [SKIPPED] xe_migrate ===================
[17:43:23] ================== xe_dma_buf (1 subtest) ==================
[17:43:23] ==================== xe_dma_buf_kunit =====================
[17:43:23] ================ [SKIPPED] xe_dma_buf_kunit ================
[17:43:23] =================== [SKIPPED] xe_dma_buf ===================
[17:43:23] ================= xe_bo_shrink (1 subtest) =================
[17:43:23] =================== xe_bo_shrink_kunit ====================
[17:43:23] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[17:43:23] ================== [SKIPPED] xe_bo_shrink ==================
[17:43:23] ==================== xe_bo (2 subtests) ====================
[17:43:23] ================== xe_ccs_migrate_kunit ===================
[17:43:23] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[17:43:23] ==================== xe_bo_evict_kunit ====================
[17:43:23] =============== [SKIPPED] xe_bo_evict_kunit ================
[17:43:23] ===================== [SKIPPED] xe_bo ======================
[17:43:23] =================== xe_any (9 subtests) ====================
[17:43:23] [PASSED] test_to_xe
[17:43:23] [PASSED] test_to_dev
[17:43:23] [PASSED] test_to_pdev
[17:43:23] [PASSED] test_to_drm
[17:43:23] [PASSED] test_if_pdev
[17:43:23] [PASSED] test_if_xe
[17:43:23] [PASSED] test_if_tile
[17:43:23] [PASSED] test_if_gt
[17:43:23] [PASSED] test_to_id
[17:43:23] ===================== [PASSED] xe_any ======================
[17:43:23] ==================== args (13 subtests) ====================
[17:43:23] [PASSED] count_args_test
[17:43:23] [PASSED] call_args_example
[17:43:23] [PASSED] call_args_test
[17:43:23] [PASSED] drop_first_arg_example
[17:43:23] [PASSED] drop_first_arg_test
[17:43:23] [PASSED] first_arg_example
[17:43:23] [PASSED] first_arg_test
[17:43:23] [PASSED] last_arg_example
[17:43:23] [PASSED] last_arg_test
[17:43:23] [PASSED] pick_arg_example
[17:43:23] [PASSED] if_args_example
[17:43:23] [PASSED] if_args_test
[17:43:23] [PASSED] sep_comma_example
[17:43:23] ====================== [PASSED] args =======================
[17:43:23] =================== xe_pci (3 subtests) ====================
[17:43:23] ==================== check_graphics_ip ====================
[17:43:23] [PASSED] 12.00 Xe_LP
[17:43:23] [PASSED] 12.10 Xe_LP+
[17:43:23] [PASSED] 12.55 Xe_HPG
[17:43:23] [PASSED] 12.60 Xe_HPC
[17:43:23] [PASSED] 12.70 Xe_LPG
[17:43:23] [PASSED] 12.71 Xe_LPG
[17:43:23] [PASSED] 12.74 Xe_LPG+
[17:43:23] [PASSED] 20.01 Xe2_HPG
[17:43:23] [PASSED] 20.02 Xe2_HPG
[17:43:23] [PASSED] 20.04 Xe2_LPG
[17:43:23] [PASSED] 30.00 Xe3_LPG
[17:43:23] [PASSED] 30.01 Xe3_LPG
[17:43:23] [PASSED] 30.03 Xe3_LPG
[17:43:23] [PASSED] 30.04 Xe3_LPG
[17:43:23] [PASSED] 30.05 Xe3_LPG
[17:43:23] [PASSED] 35.10 Xe3p_LPG
[17:43:23] [PASSED] 35.11 Xe3p_XPC
[17:43:23] ================ [PASSED] check_graphics_ip ================
[17:43:23] ===================== check_media_ip ======================
[17:43:23] [PASSED] 12.00 Xe_M
[17:43:23] [PASSED] 12.55 Xe_HPM
[17:43:23] [PASSED] 13.00 Xe_LPM+
[17:43:23] [PASSED] 13.01 Xe2_HPM
[17:43:23] [PASSED] 20.00 Xe2_LPM
[17:43:23] [PASSED] 30.00 Xe3_LPM
[17:43:23] [PASSED] 30.02 Xe3_LPM
[17:43:23] [PASSED] 35.00 Xe3p_LPM
[17:43:23] [PASSED] 35.03 Xe3p_HPM
[17:43:23] ================= [PASSED] check_media_ip ==================
[17:43:23] =================== check_platform_desc ===================
[17:43:23] [PASSED] 0x9A60 (TIGERLAKE)
[17:43:23] [PASSED] 0x9A68 (TIGERLAKE)
[17:43:23] [PASSED] 0x9A70 (TIGERLAKE)
[17:43:23] [PASSED] 0x9A40 (TIGERLAKE)
[17:43:23] [PASSED] 0x9A49 (TIGERLAKE)
[17:43:23] [PASSED] 0x9A59 (TIGERLAKE)
[17:43:23] [PASSED] 0x9A78 (TIGERLAKE)
[17:43:23] [PASSED] 0x9AC0 (TIGERLAKE)
[17:43:23] [PASSED] 0x9AC9 (TIGERLAKE)
[17:43:23] [PASSED] 0x9AD9 (TIGERLAKE)
[17:43:23] [PASSED] 0x9AF8 (TIGERLAKE)
[17:43:23] [PASSED] 0x4C80 (ROCKETLAKE)
[17:43:23] [PASSED] 0x4C8A (ROCKETLAKE)
[17:43:23] [PASSED] 0x4C8B (ROCKETLAKE)
[17:43:23] [PASSED] 0x4C8C (ROCKETLAKE)
[17:43:23] [PASSED] 0x4C90 (ROCKETLAKE)
[17:43:23] [PASSED] 0x4C9A (ROCKETLAKE)
[17:43:23] [PASSED] 0x4680 (ALDERLAKE_S)
[17:43:23] [PASSED] 0x4682 (ALDERLAKE_S)
[17:43:23] [PASSED] 0x4688 (ALDERLAKE_S)
[17:43:23] [PASSED] 0x468A (ALDERLAKE_S)
[17:43:23] [PASSED] 0x468B (ALDERLAKE_S)
[17:43:23] [PASSED] 0x4690 (ALDERLAKE_S)
[17:43:23] [PASSED] 0x4692 (ALDERLAKE_S)
[17:43:23] [PASSED] 0x4693 (ALDERLAKE_S)
[17:43:23] [PASSED] 0x46A0 (ALDERLAKE_P)
[17:43:23] [PASSED] 0x46A1 (ALDERLAKE_P)
[17:43:23] [PASSED] 0x46A2 (ALDERLAKE_P)
[17:43:23] [PASSED] 0x46A3 (ALDERLAKE_P)
[17:43:23] [PASSED] 0x46A6 (ALDERLAKE_P)
[17:43:23] [PASSED] 0x46A8 (ALDERLAKE_P)
[17:43:23] [PASSED] 0x46AA (ALDERLAKE_P)
[17:43:23] [PASSED] 0x462A (ALDERLAKE_P)
[17:43:23] [PASSED] 0x4626 (ALDERLAKE_P)
[17:43:23] [PASSED] 0x4628 (ALDERLAKE_P)
[17:43:23] [PASSED] 0x46B0 (ALDERLAKE_P)
[17:43:23] [PASSED] 0x46B1 (ALDERLAKE_P)
[17:43:23] [PASSED] 0x46B2 (ALDERLAKE_P)
[17:43:23] [PASSED] 0x46B3 (ALDERLAKE_P)
[17:43:23] [PASSED] 0x46C0 (ALDERLAKE_P)
[17:43:23] [PASSED] 0x46C1 (ALDERLAKE_P)
[17:43:23] [PASSED] 0x46C2 (ALDERLAKE_P)
[17:43:23] [PASSED] 0x46C3 (ALDERLAKE_P)
[17:43:23] [PASSED] 0x46D0 (ALDERLAKE_N)
[17:43:23] [PASSED] 0x46D1 (ALDERLAKE_N)
[17:43:23] [PASSED] 0x46D2 (ALDERLAKE_N)
[17:43:23] [PASSED] 0x46D3 (ALDERLAKE_N)
[17:43:23] [PASSED] 0x46D4 (ALDERLAKE_N)
[17:43:23] [PASSED] 0xA721 (ALDERLAKE_P)
[17:43:23] [PASSED] 0xA7A1 (ALDERLAKE_P)
[17:43:23] [PASSED] 0xA7A9 (ALDERLAKE_P)
[17:43:23] [PASSED] 0xA7AC (ALDERLAKE_P)
[17:43:23] [PASSED] 0xA7AD (ALDERLAKE_P)
[17:43:23] [PASSED] 0xA720 (ALDERLAKE_P)
[17:43:23] [PASSED] 0xA7A0 (ALDERLAKE_P)
[17:43:23] [PASSED] 0xA7A8 (ALDERLAKE_P)
[17:43:23] [PASSED] 0xA7AA (ALDERLAKE_P)
[17:43:23] [PASSED] 0xA7AB (ALDERLAKE_P)
[17:43:23] [PASSED] 0xA780 (ALDERLAKE_S)
[17:43:23] [PASSED] 0xA781 (ALDERLAKE_S)
[17:43:23] [PASSED] 0xA782 (ALDERLAKE_S)
[17:43:23] [PASSED] 0xA783 (ALDERLAKE_S)
[17:43:23] [PASSED] 0xA788 (ALDERLAKE_S)
[17:43:23] [PASSED] 0xA789 (ALDERLAKE_S)
[17:43:23] [PASSED] 0xA78A (ALDERLAKE_S)
[17:43:23] [PASSED] 0xA78B (ALDERLAKE_S)
[17:43:23] [PASSED] 0x4905 (DG1)
[17:43:23] [PASSED] 0x4906 (DG1)
[17:43:23] [PASSED] 0x4907 (DG1)
[17:43:23] [PASSED] 0x4908 (DG1)
[17:43:23] [PASSED] 0x4909 (DG1)
[17:43:23] [PASSED] 0x56C0 (DG2)
[17:43:23] [PASSED] 0x56C2 (DG2)
[17:43:23] [PASSED] 0x56C1 (DG2)
[17:43:23] [PASSED] 0x7D51 (METEORLAKE)
[17:43:23] [PASSED] 0x7DD1 (METEORLAKE)
[17:43:23] [PASSED] 0x7D41 (METEORLAKE)
[17:43:23] [PASSED] 0x7D67 (METEORLAKE)
[17:43:23] [PASSED] 0xB640 (METEORLAKE)
[17:43:23] [PASSED] 0x56A0 (DG2)
[17:43:23] [PASSED] 0x56A1 (DG2)
[17:43:23] [PASSED] 0x56A2 (DG2)
[17:43:23] [PASSED] 0x56BE (DG2)
[17:43:23] [PASSED] 0x56BF (DG2)
[17:43:23] [PASSED] 0x5690 (DG2)
[17:43:23] [PASSED] 0x5691 (DG2)
[17:43:23] [PASSED] 0x5692 (DG2)
[17:43:23] [PASSED] 0x56A5 (DG2)
[17:43:23] [PASSED] 0x56A6 (DG2)
[17:43:23] [PASSED] 0x56B0 (DG2)
[17:43:23] [PASSED] 0x56B1 (DG2)
[17:43:23] [PASSED] 0x56BA (DG2)
[17:43:23] [PASSED] 0x56BB (DG2)
[17:43:23] [PASSED] 0x56BC (DG2)
[17:43:23] [PASSED] 0x56BD (DG2)
[17:43:23] [PASSED] 0x5693 (DG2)
[17:43:23] [PASSED] 0x5694 (DG2)
[17:43:23] [PASSED] 0x5695 (DG2)
[17:43:23] [PASSED] 0x56A3 (DG2)
[17:43:23] [PASSED] 0x56A4 (DG2)
[17:43:23] [PASSED] 0x56B2 (DG2)
[17:43:23] [PASSED] 0x56B3 (DG2)
[17:43:23] [PASSED] 0x5696 (DG2)
[17:43:23] [PASSED] 0x5697 (DG2)
[17:43:23] [PASSED] 0xB69 (PVC)
[17:43:23] [PASSED] 0xB6E (PVC)
[17:43:23] [PASSED] 0xBD4 (PVC)
[17:43:23] [PASSED] 0xBD5 (PVC)
[17:43:23] [PASSED] 0xBD6 (PVC)
[17:43:23] [PASSED] 0xBD7 (PVC)
[17:43:23] [PASSED] 0xBD8 (PVC)
[17:43:23] [PASSED] 0xBD9 (PVC)
[17:43:23] [PASSED] 0xBDA (PVC)
[17:43:23] [PASSED] 0xBDB (PVC)
[17:43:23] [PASSED] 0xBE0 (PVC)
[17:43:23] [PASSED] 0xBE1 (PVC)
[17:43:23] [PASSED] 0xBE5 (PVC)
[17:43:23] [PASSED] 0x7D40 (METEORLAKE)
[17:43:23] [PASSED] 0x7D45 (METEORLAKE)
[17:43:23] [PASSED] 0x7D55 (METEORLAKE)
[17:43:23] [PASSED] 0x7D60 (METEORLAKE)
[17:43:23] [PASSED] 0x7DD5 (METEORLAKE)
[17:43:23] [PASSED] 0x6420 (LUNARLAKE)
[17:43:23] [PASSED] 0x64A0 (LUNARLAKE)
[17:43:23] [PASSED] 0x64B0 (LUNARLAKE)
[17:43:23] [PASSED] 0xE202 (BATTLEMAGE)
[17:43:23] [PASSED] 0xE209 (BATTLEMAGE)
[17:43:23] [PASSED] 0xE20B (BATTLEMAGE)
[17:43:23] [PASSED] 0xE20C (BATTLEMAGE)
[17:43:23] [PASSED] 0xE20D (BATTLEMAGE)
[17:43:23] [PASSED] 0xE210 (BATTLEMAGE)
[17:43:23] [PASSED] 0xE211 (BATTLEMAGE)
[17:43:23] [PASSED] 0xE212 (BATTLEMAGE)
[17:43:23] [PASSED] 0xE216 (BATTLEMAGE)
[17:43:23] [PASSED] 0xE220 (BATTLEMAGE)
[17:43:23] [PASSED] 0xE221 (BATTLEMAGE)
[17:43:23] [PASSED] 0xE222 (BATTLEMAGE)
[17:43:23] [PASSED] 0xE223 (BATTLEMAGE)
[17:43:23] [PASSED] 0xB080 (PANTHERLAKE)
[17:43:23] [PASSED] 0xB081 (PANTHERLAKE)
[17:43:23] [PASSED] 0xB082 (PANTHERLAKE)
[17:43:23] [PASSED] 0xB083 (PANTHERLAKE)
[17:43:23] [PASSED] 0xB084 (PANTHERLAKE)
[17:43:23] [PASSED] 0xB085 (PANTHERLAKE)
[17:43:23] [PASSED] 0xB086 (PANTHERLAKE)
[17:43:23] [PASSED] 0xB087 (PANTHERLAKE)
[17:43:23] [PASSED] 0xB08F (PANTHERLAKE)
[17:43:23] [PASSED] 0xB090 (PANTHERLAKE)
[17:43:23] [PASSED] 0xB0A0 (PANTHERLAKE)
[17:43:23] [PASSED] 0xB0B0 (PANTHERLAKE)
[17:43:23] [PASSED] 0xFD80 (PANTHERLAKE)
[17:43:23] [PASSED] 0xFD81 (PANTHERLAKE)
[17:43:23] [PASSED] 0xD740 (NOVALAKE_S)
[17:43:23] [PASSED] 0xD741 (NOVALAKE_S)
[17:43:23] [PASSED] 0xD742 (NOVALAKE_S)
[17:43:23] [PASSED] 0xD743 (NOVALAKE_S)
[17:43:23] [PASSED] 0xD745 (NOVALAKE_S)
[17:43:23] [PASSED] 0xD74A (NOVALAKE_S)
[17:43:23] [PASSED] 0xD74B (NOVALAKE_S)
[17:43:23] [PASSED] 0x674C (CRESCENTISLAND)
[17:43:23] [PASSED] 0x674D (CRESCENTISLAND)
[17:43:23] [PASSED] 0x674E (CRESCENTISLAND)
[17:43:23] [PASSED] 0x674F (CRESCENTISLAND)
[17:43:23] [PASSED] 0x6750 (CRESCENTISLAND)
[17:43:23] [PASSED] 0xD750 (NOVALAKE_P)
[17:43:23] [PASSED] 0xD751 (NOVALAKE_P)
[17:43:23] [PASSED] 0xD752 (NOVALAKE_P)
[17:43:23] [PASSED] 0xD753 (NOVALAKE_P)
[17:43:23] [PASSED] 0xD754 (NOVALAKE_P)
[17:43:23] [PASSED] 0xD755 (NOVALAKE_P)
[17:43:23] [PASSED] 0xD756 (NOVALAKE_P)
[17:43:23] [PASSED] 0xD757 (NOVALAKE_P)
[17:43:23] [PASSED] 0xD75F (NOVALAKE_P)
[17:43:23] =============== [PASSED] check_platform_desc ===============
[17:43:23] ===================== [PASSED] xe_pci ======================
[17:43:23] ============= xe_rtp_tables_test (5 subtests) ==============
[17:43:23] ================== xe_rtp_table_gt_test ===================
[17:43:23] [PASSED] gt_was/14011060649
[17:43:23] [PASSED] gt_was/14011059788
[17:43:23] [PASSED] gt_was/14015795083
[17:43:23] [PASSED] gt_was/16021867713
[17:43:23] [PASSED] gt_was/14019449301
[17:43:23] [PASSED] gt_was/16028005424
[17:43:23] [PASSED] gt_was/14026578760
[17:43:23] [PASSED] gt_was/1409420604
[17:43:23] [PASSED] gt_was/1408615072
[17:43:23] [PASSED] gt_was/22010523718
[17:43:23] [PASSED] gt_was/14011006942
[17:43:23] [PASSED] gt_was/14014830051
[17:43:23] [PASSED] gt_was/18018781329
[17:43:23] [PASSED] gt_was/1509235366
[17:43:23] [PASSED] gt_was/18018781329
[17:43:23] [PASSED] gt_was/16016694945
[17:43:23] [PASSED] gt_was/14018575942
[17:43:23] [PASSED] gt_was/22016670082
[17:43:23] [PASSED] gt_was/22016670082
[17:43:23] [PASSED] gt_was/14017421178
[17:43:23] [PASSED] gt_was/16025250150
[17:43:23] [PASSED] gt_was/14021871409
[17:43:23] [PASSED] gt_was/16021865536
[17:43:23] [PASSED] gt_was/14021486841
[17:43:23] [PASSED] gt_was/14025160223
[17:43:23] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[17:43:23] [PASSED] gt_was/14025635424
[17:43:23] [PASSED] gt_was/16028005424
[17:43:23] ============== [PASSED] xe_rtp_table_gt_test ===============
[17:43:23] ================== xe_rtp_table_gt_test ===================
[17:43:23] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[17:43:23] [PASSED] gt_tunings/Tuning: 32B Access Enable
[17:43:23] [PASSED] gt_tunings/Tuning: L3 cache
[17:43:23] [PASSED] gt_tunings/Tuning: L3 cache - media
[17:43:23] [PASSED] gt_tunings/Tuning: Compression Overfetch
[17:43:23] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[17:43:23] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[17:43:23] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[17:43:23] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[17:43:23] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[17:43:23] [PASSED] gt_tunings/Tuning: Stateless compression control
[17:43:23] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[17:43:23] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[17:43:23] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[17:43:23] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[17:43:23] ============== [PASSED] xe_rtp_table_gt_test ===============
[17:43:23] ================== xe_rtp_table_oob_test ==================
[17:43:23] [PASSED] oob_was/1607983814
[17:43:23] [PASSED] oob_was/16010904313
[17:43:23] [PASSED] oob_was/18022495364
[17:43:23] [PASSED] oob_was/22012773006
[17:43:23] [PASSED] oob_was/14014475959
[17:43:23] [PASSED] oob_was/22011391025
[17:43:23] [PASSED] oob_was/22012727170
[17:43:23] [PASSED] oob_was/22012727685
[17:43:23] [PASSED] oob_was/22016596838
[17:43:23] [PASSED] oob_was/18020744125
[17:43:23] [PASSED] oob_was/1409600907
[17:43:23] [PASSED] oob_was/22014953428
[17:43:23] [PASSED] oob_was/16017236439
[17:43:23] [PASSED] oob_was/14019821291
[17:43:23] [PASSED] oob_was/14015076503
[17:43:23] [PASSED] oob_was/14018913170
[17:43:23] [PASSED] oob_was/14018094691
[17:43:23] [PASSED] oob_was/18024947630
[17:43:23] [PASSED] oob_was/16022287689
[17:43:23] [PASSED] oob_was/13011645652
[17:43:23] [PASSED] oob_was/14022293748
[17:43:23] [PASSED] oob_was/22019794406
[17:43:23] [PASSED] oob_was/22019338487
[17:43:23] [PASSED] oob_was/16023588340
[17:43:23] [PASSED] oob_was/14019789679
[17:43:23] [PASSED] oob_was/14022866841
[17:43:23] [PASSED] oob_was/16021333562
[17:43:23] [PASSED] oob_was/14016712196
[17:43:23] [PASSED] oob_was/14015568240
[17:43:23] [PASSED] oob_was/18013179988
[17:43:23] [PASSED] oob_was/1508761755
[17:43:23] [PASSED] oob_was/16023105232
[17:43:23] [PASSED] oob_was/16026508708
[17:43:23] [PASSED] oob_was/14020001231
[17:43:23] [PASSED] oob_was/16023683509
[17:43:23] [PASSED] oob_was/14025515070
[17:43:23] [PASSED] oob_was/15015404425_disable
[17:43:23] [PASSED] oob_was/16026007364
[17:43:23] [PASSED] oob_was/14020316580
[17:43:23] [PASSED] oob_was/14025883347
[17:43:23] [PASSED] oob_was/16029380221
[17:43:23] [PASSED] oob_was/22022079272
[17:43:23] [PASSED] oob_was/16029897822
[17:43:23] [PASSED] oob_was/14027054324
[17:43:23] ============== [PASSED] xe_rtp_table_oob_test ==============
[17:43:23] ================ xe_rtp_table_dev_oob_test ================
[17:43:23] [PASSED] device_oob_was/22010954014
[17:43:23] [PASSED] device_oob_was/15015404425
[17:43:23] [PASSED] device_oob_was/22019338487_display
[17:43:23] [PASSED] device_oob_was/14022085890
[17:43:23] [PASSED] device_oob_was/14026539277
[17:43:23] [PASSED] device_oob_was/14026633728
[17:43:23] [PASSED] device_oob_was/14026746987
[17:43:23] [PASSED] device_oob_was/14026779378
[17:43:23] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[17:43:23] ========== xe_rtp_table_missing_upper_bound_test ==========
[17:43:23] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[17:43:23] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[17:43:23] [PASSED] register_whitelist/1806527549
[17:43:23] [PASSED] register_whitelist/allow_read_ctx_timestamp
[17:43:23] [PASSED] register_whitelist/allow_read_queue_timestamp
[17:43:23] [PASSED] register_whitelist/16014440446
[17:43:23] [PASSED] register_whitelist/16017236439
[17:43:23] [PASSED] register_whitelist/16020183090
[17:43:23] [PASSED] register_whitelist/14024997852
[17:43:23] [PASSED] register_whitelist/14024997852
[17:43:23] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[17:43:23] =============== [PASSED] xe_rtp_tables_test ================
[17:43:23] =================== xe_rtp (3 subtests) ====================
[17:43:23] =================== xe_rtp_rules_tests ====================
[17:43:23] [PASSED] no
[17:43:23] [PASSED] yes
[17:43:23] [PASSED] no-and-no
[17:43:23] [PASSED] no-and-yes
[17:43:23] [PASSED] yes-and-no
[17:43:23] [PASSED] yes-and-yes
[17:43:23] [PASSED] no-or-no
[17:43:23] [PASSED] no-or-yes
[17:43:23] [PASSED] yes-or-no
[17:43:23] [PASSED] yes-or-yes
[17:43:23] [PASSED] no-yes-or-yes-no
[17:43:23] [PASSED] no-yes-or-yes-yes
[17:43:23] [PASSED] yes-yes-or-no-yes
[17:43:23] [PASSED] yes-yes-or-yes-yes
[17:43:23] [PASSED] no-no-or-yes-or-no
[17:43:23] [PASSED] or
[17:43:23] [PASSED] or-yes
[17:43:23] [PASSED] or-no
[17:43:23] [PASSED] yes-or
[17:43:23] [PASSED] no-or
[17:43:23] [PASSED] no-or-or-yes
[17:43:23] [PASSED] yes-or-or-no
[17:43:23] [PASSED] no-or-or-no
[17:43:23] [PASSED] missing-context-engine-class
[17:43:23] [PASSED] missing-context-engine-class-or-yes
[17:43:23] [PASSED] missing-context-engine-class-or-or-yes
[17:43:23] =============== [PASSED] xe_rtp_rules_tests ================
[17:43:23] =============== xe_rtp_process_to_sr_tests ================
[17:43:23] [PASSED] coalesce-same-reg
[17:43:23] [PASSED] coalesce-same-reg-literal-and-func
[17:43:23] [PASSED] no-match-no-add
[17:43:23] [PASSED] two-regs-two-entries
[17:43:23] [PASSED] clr-one-set-other
[17:43:23] [PASSED] set-field
[17:43:23] [PASSED] conflict-duplicate
[17:43:23] [PASSED] conflict-not-disjoint
[17:43:23] [PASSED] conflict-not-disjoint-literal-and-func
[17:43:23] [PASSED] conflict-reg-type
[17:43:23] [PASSED] bad-mcr-reg-forced-to-regular
[17:43:23] [PASSED] bad-regular-reg-forced-to-mcr
[17:43:23] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[17:43:23] ================== xe_rtp_process_tests ===================
[17:43:23] [PASSED] active1
[17:43:23] [PASSED] active2
[17:43:23] [PASSED] active-inactive
[17:43:23] [PASSED] inactive-active
[17:43:23] [PASSED] inactive-active-inactive
[17:43:23] [PASSED] inactive-inactive-inactive
[17:43:23] ============== [PASSED] xe_rtp_process_tests ===============
[17:43:23] ===================== [PASSED] xe_rtp ======================
[17:43:23] ==================== xe_wa (1 subtest) =====================
[17:43:23] ======================== xe_wa_gt =========================
[17:43:23] [PASSED] TIGERLAKE B0
[17:43:23] [PASSED] DG1 A0
[17:43:23] [PASSED] DG1 B0
[17:43:23] [PASSED] ALDERLAKE_S A0
[17:43:23] [PASSED] ALDERLAKE_S B0
[17:43:23] [PASSED] ALDERLAKE_S C0
[17:43:23] [PASSED] ALDERLAKE_S D0
[17:43:23] [PASSED] ALDERLAKE_P A0
[17:43:23] [PASSED] ALDERLAKE_P B0
[17:43:23] [PASSED] ALDERLAKE_P C0
[17:43:23] [PASSED] ALDERLAKE_S RPLS D0
[17:43:23] [PASSED] ALDERLAKE_P RPLU E0
[17:43:23] [PASSED] DG2 G10 C0
[17:43:23] [PASSED] DG2 G11 B1
[17:43:23] [PASSED] DG2 G12 A1
[17:43:23] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[17:43:23] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[17:43:23] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[17:43:23] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[17:43:23] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[17:43:23] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[17:43:23] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[17:43:23] ==================== [PASSED] xe_wa_gt =====================
[17:43:23] ====================== [PASSED] xe_wa ======================
[17:43:23] ============================================================
[17:43:23] Testing complete. Ran 793 tests: passed: 765, skipped: 28
[17:43:23] Elapsed time: 37.331s total, 4.454s configuring, 32.160s building, 0.692s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[17:43:23] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[17:43:25] 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
[17:43:50] Starting KUnit Kernel (1/1)...
[17:43:50] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[17:43:50] ============= refcount_interrupt (4 subtests) ==============
[17:43:50] [PASSED] test_single_irq_change
[17:43:50] [PASSED] test_nested_irq_change
[17:43:50] [PASSED] test_multiple_irq_change
[17:43:50] [PASSED] test_irq_save
[17:43:50] =============== [PASSED] refcount_interrupt ================
[17:43:50] ============ drm_test_pick_cmdline (2 subtests) ============
[17:43:50] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[17:43:50] =============== drm_test_pick_cmdline_named ===============
[17:43:50] [PASSED] NTSC
[17:43:50] [PASSED] NTSC-J
[17:43:50] [PASSED] PAL
[17:43:50] [PASSED] PAL-M
[17:43:50] =========== [PASSED] drm_test_pick_cmdline_named ===========
[17:43:50] ============== [PASSED] drm_test_pick_cmdline ==============
[17:43:50] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[17:43:50] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[17:43:50] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[17:43:50] =========== drm_validate_clone_mode (2 subtests) ===========
[17:43:50] ============== drm_test_check_in_clone_mode ===============
[17:43:50] [PASSED] in_clone_mode
[17:43:50] [PASSED] not_in_clone_mode
[17:43:50] ========== [PASSED] drm_test_check_in_clone_mode ===========
[17:43:50] =============== drm_test_check_valid_clones ===============
[17:43:50] [PASSED] not_in_clone_mode
[17:43:50] [PASSED] valid_clone
[17:43:50] [PASSED] invalid_clone
[17:43:50] =========== [PASSED] drm_test_check_valid_clones ===========
[17:43:50] ============= [PASSED] drm_validate_clone_mode =============
[17:43:50] ============= drm_validate_modeset (1 subtest) =============
[17:43:50] [PASSED] drm_test_check_connector_changed_modeset
[17:43:50] ============== [PASSED] drm_validate_modeset ===============
[17:43:50] ====== drm_test_bridge_get_current_state (1 subtest) =======
[17:43:50] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[17:43:50] ======== [PASSED] drm_test_bridge_get_current_state ========
[17:43:50] ====== drm_test_bridge_helper_reset_crtc (3 subtests) ======
[17:43:50] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[17:43:50] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[17:43:50] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[17:43:50] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[17:43:50] ============== drm_bridge_alloc (2 subtests) ===============
[17:43:50] [PASSED] drm_test_drm_bridge_alloc_basic
[17:43:50] [PASSED] drm_test_drm_bridge_alloc_get_put
[17:43:50] ================ [PASSED] drm_bridge_alloc =================
[17:43:50] ============= drm_bridge_bus_fmt (5 subtests) ==============
[17:43:50] [PASSED] drm_test_bridge_rgb_yuv_rgb
[17:43:50] [PASSED] drm_test_bridge_must_convert_to_yuv444
[17:43:50] [PASSED] drm_test_bridge_hdmi_auto_rgb
[17:43:50] [PASSED] drm_test_bridge_auto_first
[17:43:50] [PASSED] drm_test_bridge_rgb_yuv_no_path
[17:43:50] =============== [PASSED] drm_bridge_bus_fmt ================
[17:43:50] ============= drm_cmdline_parser (40 subtests) =============
[17:43:50] [PASSED] drm_test_cmdline_force_d_only
[17:43:50] [PASSED] drm_test_cmdline_force_D_only_dvi
[17:43:50] [PASSED] drm_test_cmdline_force_D_only_hdmi
[17:43:50] [PASSED] drm_test_cmdline_force_D_only_not_digital
[17:43:50] [PASSED] drm_test_cmdline_force_e_only
[17:43:50] [PASSED] drm_test_cmdline_res
[17:43:50] [PASSED] drm_test_cmdline_res_vesa
[17:43:50] [PASSED] drm_test_cmdline_res_vesa_rblank
[17:43:50] [PASSED] drm_test_cmdline_res_rblank
[17:43:50] [PASSED] drm_test_cmdline_res_bpp
[17:43:50] [PASSED] drm_test_cmdline_res_refresh
[17:43:50] [PASSED] drm_test_cmdline_res_bpp_refresh
[17:43:50] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[17:43:50] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[17:43:50] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[17:43:50] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[17:43:50] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[17:43:50] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[17:43:50] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[17:43:50] [PASSED] drm_test_cmdline_res_margins_force_on
[17:43:50] [PASSED] drm_test_cmdline_res_vesa_margins
[17:43:50] [PASSED] drm_test_cmdline_name
[17:43:50] [PASSED] drm_test_cmdline_name_bpp
[17:43:50] [PASSED] drm_test_cmdline_name_option
[17:43:50] [PASSED] drm_test_cmdline_name_bpp_option
[17:43:50] [PASSED] drm_test_cmdline_rotate_0
[17:43:50] [PASSED] drm_test_cmdline_rotate_90
[17:43:50] [PASSED] drm_test_cmdline_rotate_180
[17:43:50] [PASSED] drm_test_cmdline_rotate_270
[17:43:50] [PASSED] drm_test_cmdline_hmirror
[17:43:50] [PASSED] drm_test_cmdline_vmirror
[17:43:50] [PASSED] drm_test_cmdline_margin_options
[17:43:50] [PASSED] drm_test_cmdline_multiple_options
[17:43:50] [PASSED] drm_test_cmdline_bpp_extra_and_option
[17:43:50] [PASSED] drm_test_cmdline_extra_and_option
[17:43:50] [PASSED] drm_test_cmdline_freestanding_options
[17:43:50] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[17:43:50] [PASSED] drm_test_cmdline_panel_orientation
[17:43:50] ================ drm_test_cmdline_invalid =================
[17:43:50] [PASSED] margin_only
[17:43:50] [PASSED] interlace_only
[17:43:50] [PASSED] res_missing_x
[17:43:50] [PASSED] res_missing_y
[17:43:50] [PASSED] res_bad_y
[17:43:50] [PASSED] res_missing_y_bpp
[17:43:50] [PASSED] res_bad_bpp
[17:43:50] [PASSED] res_bad_refresh
[17:43:50] [PASSED] res_bpp_refresh_force_on_off
[17:43:50] [PASSED] res_invalid_mode
[17:43:50] [PASSED] res_bpp_wrong_place_mode
[17:43:50] [PASSED] name_bpp_refresh
[17:43:50] [PASSED] name_refresh
[17:43:50] [PASSED] name_refresh_wrong_mode
[17:43:50] [PASSED] name_refresh_invalid_mode
[17:43:50] [PASSED] rotate_multiple
[17:43:50] [PASSED] rotate_invalid_val
[17:43:50] [PASSED] rotate_truncated
[17:43:50] [PASSED] invalid_option
[17:43:50] [PASSED] invalid_tv_option
[17:43:50] [PASSED] truncated_tv_option
[17:43:50] ============ [PASSED] drm_test_cmdline_invalid =============
[17:43:50] =============== drm_test_cmdline_tv_options ===============
[17:43:50] [PASSED] NTSC
[17:43:50] [PASSED] NTSC_443
[17:43:50] [PASSED] NTSC_J
[17:43:50] [PASSED] PAL
[17:43:50] [PASSED] PAL_M
[17:43:50] [PASSED] PAL_N
[17:43:50] [PASSED] SECAM
[17:43:50] [PASSED] MONO_525
[17:43:50] [PASSED] MONO_625
[17:43:50] =========== [PASSED] drm_test_cmdline_tv_options ===========
[17:43:50] =============== [PASSED] drm_cmdline_parser ================
[17:43:50] ========== drmm_connector_hdmi_init (20 subtests) ==========
[17:43:50] [PASSED] drm_test_connector_hdmi_init_valid
[17:43:50] [PASSED] drm_test_connector_hdmi_init_bpc_8
[17:43:50] [PASSED] drm_test_connector_hdmi_init_bpc_10
[17:43:50] [PASSED] drm_test_connector_hdmi_init_bpc_12
[17:43:50] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[17:43:50] [PASSED] drm_test_connector_hdmi_init_bpc_null
[17:43:50] [PASSED] drm_test_connector_hdmi_init_formats_empty
[17:43:50] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[17:43:50] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[17:43:50] [PASSED] supported_formats=0x9 yuv420_allowed=1
[17:43:50] [PASSED] supported_formats=0x9 yuv420_allowed=0
[17:43:50] [PASSED] supported_formats=0x5 yuv420_allowed=1
[17:43:50] [PASSED] supported_formats=0x5 yuv420_allowed=0
[17:43:50] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[17:43:50] [PASSED] drm_test_connector_hdmi_init_null_ddc
[17:43:50] [PASSED] drm_test_connector_hdmi_init_null_product
[17:43:50] [PASSED] drm_test_connector_hdmi_init_null_vendor
[17:43:50] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[17:43:50] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[17:43:50] [PASSED] drm_test_connector_hdmi_init_product_valid
[17:43:50] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[17:43:50] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[17:43:50] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[17:43:50] ========= drm_test_connector_hdmi_init_type_valid =========
[17:43:50] [PASSED] HDMI-A
[17:43:50] [PASSED] HDMI-B
[17:43:50] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[17:43:50] ======== drm_test_connector_hdmi_init_type_invalid ========
[17:43:50] [PASSED] Unknown
[17:43:50] [PASSED] VGA
[17:43:50] [PASSED] DVI-I
[17:43:50] [PASSED] DVI-D
[17:43:50] [PASSED] DVI-A
[17:43:50] [PASSED] Composite
[17:43:50] [PASSED] SVIDEO
[17:43:50] [PASSED] LVDS
[17:43:50] [PASSED] Component
[17:43:50] [PASSED] DIN
[17:43:50] [PASSED] DP
[17:43:50] [PASSED] TV
[17:43:50] [PASSED] eDP
[17:43:50] [PASSED] Virtual
[17:43:50] [PASSED] DSI
[17:43:50] [PASSED] DPI
[17:43:50] [PASSED] Writeback
[17:43:50] [PASSED] SPI
[17:43:50] [PASSED] USB
[17:43:50] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[17:43:50] ============ [PASSED] drmm_connector_hdmi_init =============
[17:43:50] ============= drmm_connector_init (3 subtests) =============
[17:43:50] [PASSED] drm_test_drmm_connector_init
[17:43:50] [PASSED] drm_test_drmm_connector_init_null_ddc
[17:43:50] ========= drm_test_drmm_connector_init_type_valid =========
[17:43:50] [PASSED] Unknown
[17:43:50] [PASSED] VGA
[17:43:50] [PASSED] DVI-I
[17:43:50] [PASSED] DVI-D
[17:43:50] [PASSED] DVI-A
[17:43:50] [PASSED] Composite
[17:43:50] [PASSED] SVIDEO
[17:43:50] [PASSED] LVDS
[17:43:50] [PASSED] Component
[17:43:50] [PASSED] DIN
[17:43:50] [PASSED] DP
[17:43:50] [PASSED] HDMI-A
[17:43:50] [PASSED] HDMI-B
[17:43:50] [PASSED] TV
[17:43:50] [PASSED] eDP
[17:43:50] [PASSED] Virtual
[17:43:50] [PASSED] DSI
[17:43:50] [PASSED] DPI
[17:43:50] [PASSED] Writeback
[17:43:50] [PASSED] SPI
[17:43:50] [PASSED] USB
[17:43:50] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[17:43:50] =============== [PASSED] drmm_connector_init ===============
[17:43:50] ========= drm_connector_dynamic_init (6 subtests) ==========
[17:43:50] [PASSED] drm_test_drm_connector_dynamic_init
[17:43:50] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[17:43:50] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[17:43:50] [PASSED] drm_test_drm_connector_dynamic_init_properties
[17:43:50] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[17:43:50] [PASSED] Unknown
[17:43:50] [PASSED] VGA
[17:43:50] [PASSED] DVI-I
[17:43:50] [PASSED] DVI-D
[17:43:50] [PASSED] DVI-A
[17:43:50] [PASSED] Composite
[17:43:50] [PASSED] SVIDEO
[17:43:50] [PASSED] LVDS
[17:43:50] [PASSED] Component
[17:43:50] [PASSED] DIN
[17:43:50] [PASSED] DP
[17:43:50] [PASSED] HDMI-A
[17:43:50] [PASSED] HDMI-B
[17:43:50] [PASSED] TV
[17:43:50] [PASSED] eDP
[17:43:50] [PASSED] Virtual
[17:43:50] [PASSED] DSI
[17:43:50] [PASSED] DPI
[17:43:50] [PASSED] Writeback
[17:43:50] [PASSED] SPI
[17:43:50] [PASSED] USB
[17:43:50] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[17:43:50] ======== drm_test_drm_connector_dynamic_init_name =========
[17:43:50] [PASSED] Unknown
[17:43:50] [PASSED] VGA
[17:43:50] [PASSED] DVI-I
[17:43:50] [PASSED] DVI-D
[17:43:50] [PASSED] DVI-A
[17:43:50] [PASSED] Composite
[17:43:50] [PASSED] SVIDEO
[17:43:50] [PASSED] LVDS
[17:43:50] [PASSED] Component
[17:43:50] [PASSED] DIN
[17:43:50] [PASSED] DP
[17:43:50] [PASSED] HDMI-A
[17:43:50] [PASSED] HDMI-B
[17:43:50] [PASSED] TV
[17:43:50] [PASSED] eDP
[17:43:50] [PASSED] Virtual
[17:43:50] [PASSED] DSI
[17:43:50] [PASSED] DPI
[17:43:50] [PASSED] Writeback
[17:43:50] [PASSED] SPI
[17:43:50] [PASSED] USB
[17:43:50] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[17:43:50] =========== [PASSED] drm_connector_dynamic_init ============
[17:43:50] ==== drm_connector_dynamic_register_early (4 subtests) =====
[17:43:50] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[17:43:50] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[17:43:50] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[17:43:50] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[17:43:50] ====== [PASSED] drm_connector_dynamic_register_early =======
[17:43:50] ======= drm_connector_dynamic_register (7 subtests) ========
[17:43:50] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[17:43:50] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[17:43:50] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[17:43:50] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[17:43:50] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[17:43:50] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[17:43:50] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[17:43:50] ========= [PASSED] drm_connector_dynamic_register ==========
[17:43:50] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[17:43:50] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[17:43:50] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[17:43:50] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[17:43:50] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[17:43:50] ========== drm_test_get_tv_mode_from_name_valid ===========
[17:43:50] [PASSED] NTSC
[17:43:50] [PASSED] NTSC-443
[17:43:50] [PASSED] NTSC-J
[17:43:50] [PASSED] PAL
[17:43:50] [PASSED] PAL-M
[17:43:50] [PASSED] PAL-N
[17:43:50] [PASSED] SECAM
[17:43:50] [PASSED] Mono
[17:43:50] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[17:43:50] [PASSED] drm_test_get_tv_mode_from_name_truncated
[17:43:50] ============ [PASSED] drm_get_tv_mode_from_name ============
[17:43:50] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[17:43:50] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[17:43:50] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[17:43:50] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[17:43:50] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[17:43:50] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[17:43:50] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[17:43:50] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[17:43:50] [PASSED] VIC 96
[17:43:50] [PASSED] VIC 97
[17:43:50] [PASSED] VIC 101
[17:43:50] [PASSED] VIC 102
[17:43:50] [PASSED] VIC 106
[17:43:50] [PASSED] VIC 107
[17:43:50] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[17:43:50] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[17:43:50] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[17:43:50] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[17:43:50] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[17:43:50] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[17:43:50] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[17:43:50] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[17:43:50] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[17:43:50] [PASSED] Automatic
[17:43:50] [PASSED] Full
[17:43:50] [PASSED] Limited 16:235
[17:43:50] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[17:43:50] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[17:43:50] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[17:43:50] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[17:43:50] === drm_test_drm_hdmi_connector_get_output_format_name ====
[17:43:50] [PASSED] RGB
[17:43:50] [PASSED] YUV 4:2:0
[17:43:50] [PASSED] YUV 4:2:2
[17:43:50] [PASSED] YUV 4:4:4
[17:43:50] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[17:43:50] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[17:43:50] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[17:43:50] ============= drm_damage_helper (21 subtests) ==============
[17:43:50] [PASSED] drm_test_damage_iter_no_damage
[17:43:50] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[17:43:50] [PASSED] drm_test_damage_iter_no_damage_src_moved
[17:43:50] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[17:43:50] [PASSED] drm_test_damage_iter_no_damage_not_visible
[17:43:50] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[17:43:50] [PASSED] drm_test_damage_iter_no_damage_no_fb
[17:43:50] [PASSED] drm_test_damage_iter_simple_damage
[17:43:50] [PASSED] drm_test_damage_iter_single_damage
[17:43:50] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[17:43:50] [PASSED] drm_test_damage_iter_single_damage_outside_src
[17:43:50] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[17:43:50] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[17:43:50] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[17:43:50] [PASSED] drm_test_damage_iter_single_damage_src_moved
[17:43:50] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[17:43:50] [PASSED] drm_test_damage_iter_damage
[17:43:50] [PASSED] drm_test_damage_iter_damage_one_intersect
[17:43:50] [PASSED] drm_test_damage_iter_damage_one_outside
[17:43:50] [PASSED] drm_test_damage_iter_damage_src_moved
[17:43:50] [PASSED] drm_test_damage_iter_damage_not_visible
[17:43:50] ================ [PASSED] drm_damage_helper ================
[17:43:50] ============== drm_dp_mst_helper (3 subtests) ==============
[17:43:50] ============== drm_test_dp_mst_calc_pbn_mode ==============
[17:43:50] [PASSED] Clock 154000 BPP 30 DSC disabled
[17:43:50] [PASSED] Clock 234000 BPP 30 DSC disabled
[17:43:50] [PASSED] Clock 297000 BPP 24 DSC disabled
[17:43:50] [PASSED] Clock 332880 BPP 24 DSC enabled
[17:43:50] [PASSED] Clock 324540 BPP 24 DSC enabled
[17:43:50] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[17:43:50] ============== drm_test_dp_mst_calc_pbn_div ===============
[17:43:50] [PASSED] Link rate 2000000 lane count 4
[17:43:50] [PASSED] Link rate 2000000 lane count 2
[17:43:50] [PASSED] Link rate 2000000 lane count 1
[17:43:50] [PASSED] Link rate 1350000 lane count 4
[17:43:50] [PASSED] Link rate 1350000 lane count 2
[17:43:50] [PASSED] Link rate 1350000 lane count 1
[17:43:50] [PASSED] Link rate 1000000 lane count 4
[17:43:50] [PASSED] Link rate 1000000 lane count 2
[17:43:50] [PASSED] Link rate 1000000 lane count 1
[17:43:50] [PASSED] Link rate 810000 lane count 4
[17:43:50] [PASSED] Link rate 810000 lane count 2
[17:43:50] [PASSED] Link rate 810000 lane count 1
[17:43:50] [PASSED] Link rate 540000 lane count 4
[17:43:50] [PASSED] Link rate 540000 lane count 2
[17:43:50] [PASSED] Link rate 540000 lane count 1
[17:43:50] [PASSED] Link rate 270000 lane count 4
[17:43:50] [PASSED] Link rate 270000 lane count 2
[17:43:50] [PASSED] Link rate 270000 lane count 1
[17:43:50] [PASSED] Link rate 162000 lane count 4
[17:43:50] [PASSED] Link rate 162000 lane count 2
[17:43:50] [PASSED] Link rate 162000 lane count 1
[17:43:50] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[17:43:50] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[17:43:50] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[17:43:50] [PASSED] DP_POWER_UP_PHY with port number
[17:43:50] [PASSED] DP_POWER_DOWN_PHY with port number
[17:43:50] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[17:43:50] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[17:43:50] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[17:43:50] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[17:43:50] [PASSED] DP_QUERY_PAYLOAD with port number
[17:43:50] [PASSED] DP_QUERY_PAYLOAD with VCPI
[17:43:50] [PASSED] DP_REMOTE_DPCD_READ with port number
[17:43:50] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[17:43:50] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[17:43:50] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[17:43:50] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[17:43:50] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[17:43:50] [PASSED] DP_REMOTE_I2C_READ with port number
[17:43:50] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[17:43:50] [PASSED] DP_REMOTE_I2C_READ with transactions array
[17:43:50] [PASSED] DP_REMOTE_I2C_WRITE with port number
[17:43:50] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[17:43:50] [PASSED] DP_REMOTE_I2C_WRITE with data array
[17:43:50] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[17:43:50] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[17:43:50] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[17:43:50] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[17:43:50] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[17:43:50] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[17:43:50] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[17:43:50] ================ [PASSED] drm_dp_mst_helper ================
[17:43:50] ================== drm_exec (7 subtests) ===================
[17:43:50] [PASSED] sanitycheck
[17:43:50] [PASSED] test_lock
[17:43:50] [PASSED] test_lock_unlock
[17:43:50] [PASSED] test_duplicates
[17:43:50] [PASSED] test_prepare
[17:43:50] [PASSED] test_prepare_array
[17:43:50] [PASSED] test_multiple_loops
[17:43:50] ==================== [PASSED] drm_exec =====================
[17:43:50] =========== drm_format_helper_test (17 subtests) ===========
[17:43:50] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[17:43:50] [PASSED] single_pixel_source_buffer
[17:43:50] [PASSED] single_pixel_clip_rectangle
[17:43:50] [PASSED] well_known_colors
[17:43:50] [PASSED] destination_pitch
[17:43:50] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[17:43:50] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[17:43:50] [PASSED] single_pixel_source_buffer
[17:43:50] [PASSED] single_pixel_clip_rectangle
[17:43:50] [PASSED] well_known_colors
[17:43:50] [PASSED] destination_pitch
[17:43:50] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[17:43:50] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[17:43:50] [PASSED] single_pixel_source_buffer
[17:43:50] [PASSED] single_pixel_clip_rectangle
[17:43:50] [PASSED] well_known_colors
[17:43:50] [PASSED] destination_pitch
[17:43:50] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[17:43:50] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[17:43:50] [PASSED] single_pixel_source_buffer
[17:43:50] [PASSED] single_pixel_clip_rectangle
[17:43:50] [PASSED] well_known_colors
[17:43:50] [PASSED] destination_pitch
[17:43:50] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[17:43:50] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[17:43:50] [PASSED] single_pixel_source_buffer
[17:43:50] [PASSED] single_pixel_clip_rectangle
[17:43:50] [PASSED] well_known_colors
[17:43:50] [PASSED] destination_pitch
[17:43:50] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[17:43:50] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[17:43:50] [PASSED] single_pixel_source_buffer
[17:43:50] [PASSED] single_pixel_clip_rectangle
[17:43:50] [PASSED] well_known_colors
[17:43:50] [PASSED] destination_pitch
[17:43:50] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[17:43:50] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[17:43:50] [PASSED] single_pixel_source_buffer
[17:43:50] [PASSED] single_pixel_clip_rectangle
[17:43:50] [PASSED] well_known_colors
[17:43:50] [PASSED] destination_pitch
[17:43:50] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[17:43:50] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[17:43:50] [PASSED] single_pixel_source_buffer
[17:43:50] [PASSED] single_pixel_clip_rectangle
[17:43:50] [PASSED] well_known_colors
[17:43:50] [PASSED] destination_pitch
[17:43:50] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[17:43:50] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[17:43:50] [PASSED] single_pixel_source_buffer
[17:43:50] [PASSED] single_pixel_clip_rectangle
[17:43:50] [PASSED] well_known_colors
[17:43:50] [PASSED] destination_pitch
[17:43:50] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[17:43:50] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[17:43:50] [PASSED] single_pixel_source_buffer
[17:43:50] [PASSED] single_pixel_clip_rectangle
[17:43:50] [PASSED] well_known_colors
[17:43:50] [PASSED] destination_pitch
[17:43:50] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[17:43:50] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[17:43:50] [PASSED] single_pixel_source_buffer
[17:43:50] [PASSED] single_pixel_clip_rectangle
[17:43:50] [PASSED] well_known_colors
[17:43:50] [PASSED] destination_pitch
[17:43:50] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[17:43:50] ============== drm_test_fb_xrgb8888_to_mono ===============
[17:43:50] [PASSED] single_pixel_source_buffer
[17:43:50] [PASSED] single_pixel_clip_rectangle
[17:43:50] [PASSED] well_known_colors
[17:43:50] [PASSED] destination_pitch
[17:43:50] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[17:43:50] ==================== drm_test_fb_swab =====================
[17:43:50] [PASSED] single_pixel_source_buffer
[17:43:50] [PASSED] single_pixel_clip_rectangle
[17:43:50] [PASSED] well_known_colors
[17:43:50] [PASSED] destination_pitch
[17:43:50] ================ [PASSED] drm_test_fb_swab =================
[17:43:50] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[17:43:50] [PASSED] single_pixel_source_buffer
[17:43:50] [PASSED] single_pixel_clip_rectangle
[17:43:50] [PASSED] well_known_colors
[17:43:50] [PASSED] destination_pitch
[17:43:50] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[17:43:50] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[17:43:50] [PASSED] single_pixel_source_buffer
[17:43:50] [PASSED] single_pixel_clip_rectangle
[17:43:50] [PASSED] well_known_colors
[17:43:50] [PASSED] destination_pitch
[17:43:50] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[17:43:50] ================= drm_test_fb_clip_offset =================
[17:43:50] [PASSED] pass through
[17:43:50] [PASSED] horizontal offset
[17:43:50] [PASSED] vertical offset
[17:43:50] [PASSED] horizontal and vertical offset
[17:43:50] [PASSED] horizontal offset (custom pitch)
[17:43:50] [PASSED] vertical offset (custom pitch)
[17:43:50] [PASSED] horizontal and vertical offset (custom pitch)
[17:43:50] ============= [PASSED] drm_test_fb_clip_offset =============
[17:43:50] =================== drm_test_fb_memcpy ====================
[17:43:50] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[17:43:50] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[17:43:50] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[17:43:50] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[17:43:50] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[17:43:50] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[17:43:50] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[17:43:50] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[17:43:50] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[17:43:50] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[17:43:50] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[17:43:50] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[17:43:50] =============== [PASSED] drm_test_fb_memcpy ================
[17:43:50] ============= [PASSED] drm_format_helper_test ==============
[17:43:50] ================= drm_format (18 subtests) =================
[17:43:50] [PASSED] drm_test_format_block_width_invalid
[17:43:50] [PASSED] drm_test_format_block_width_one_plane
[17:43:50] [PASSED] drm_test_format_block_width_two_plane
[17:43:50] [PASSED] drm_test_format_block_width_three_plane
[17:43:50] [PASSED] drm_test_format_block_width_tiled
[17:43:50] [PASSED] drm_test_format_block_height_invalid
[17:43:50] [PASSED] drm_test_format_block_height_one_plane
[17:43:50] [PASSED] drm_test_format_block_height_two_plane
[17:43:50] [PASSED] drm_test_format_block_height_three_plane
[17:43:50] [PASSED] drm_test_format_block_height_tiled
[17:43:50] [PASSED] drm_test_format_min_pitch_invalid
[17:43:50] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[17:43:50] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[17:43:50] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[17:43:50] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[17:43:50] [PASSED] drm_test_format_min_pitch_two_plane
[17:43:50] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[17:43:50] [PASSED] drm_test_format_min_pitch_tiled
[17:43:50] =================== [PASSED] drm_format ====================
[17:43:50] ============== drm_framebuffer (10 subtests) ===============
[17:43:50] ========== drm_test_framebuffer_check_src_coords ==========
[17:43:50] [PASSED] Success: source fits into fb
[17:43:50] [PASSED] Fail: overflowing fb with x-axis coordinate
[17:43:50] [PASSED] Fail: overflowing fb with y-axis coordinate
[17:43:50] [PASSED] Fail: overflowing fb with source width
[17:43:50] [PASSED] Fail: overflowing fb with source height
[17:43:50] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[17:43:50] [PASSED] drm_test_framebuffer_cleanup
[17:43:50] =============== drm_test_framebuffer_create ===============
[17:43:50] [PASSED] ABGR8888 normal sizes
[17:43:50] [PASSED] ABGR8888 max sizes
[17:43:50] [PASSED] ABGR8888 pitch greater than min required
[17:43:50] [PASSED] ABGR8888 pitch less than min required
[17:43:50] [PASSED] ABGR8888 Invalid width
[17:43:50] [PASSED] ABGR8888 Invalid buffer handle
[17:43:50] [PASSED] No pixel format
[17:43:50] [PASSED] ABGR8888 Width 0
[17:43:50] [PASSED] ABGR8888 Height 0
[17:43:50] [PASSED] ABGR8888 Out of bound height * pitch combination
[17:43:50] [PASSED] ABGR8888 Large buffer offset
[17:43:50] [PASSED] ABGR8888 Buffer offset for inexistent plane
[17:43:50] [PASSED] ABGR8888 Invalid flag
[17:43:50] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[17:43:50] [PASSED] ABGR8888 Valid buffer modifier
[17:43:50] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[17:43:50] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[17:43:50] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[17:43:50] [PASSED] NV12 Normal sizes
[17:43:50] [PASSED] NV12 Max sizes
[17:43:50] [PASSED] NV12 Invalid pitch
[17:43:50] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[17:43:50] [PASSED] NV12 different modifier per-plane
[17:43:50] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[17:43:50] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[17:43:50] [PASSED] NV12 Modifier for inexistent plane
[17:43:50] [PASSED] NV12 Handle for inexistent plane
[17:43:50] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[17:43:50] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[17:43:50] [PASSED] YVU420 Normal sizes
[17:43:50] [PASSED] YVU420 Max sizes
[17:43:50] [PASSED] YVU420 Invalid pitch
[17:43:50] [PASSED] YVU420 Different pitches
[17:43:50] [PASSED] YVU420 Different buffer offsets/pitches
[17:43:50] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[17:43:50] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[17:43:50] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[17:43:50] [PASSED] YVU420 Valid modifier
[17:43:50] [PASSED] YVU420 Different modifiers per plane
[17:43:50] [PASSED] YVU420 Modifier for inexistent plane
[17:43:50] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[17:43:50] [PASSED] X0L2 Normal sizes
[17:43:50] [PASSED] X0L2 Max sizes
[17:43:50] [PASSED] X0L2 Invalid pitch
[17:43:50] [PASSED] X0L2 Pitch greater than minimum required
[17:43:50] [PASSED] X0L2 Handle for inexistent plane
[17:43:50] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[17:43:50] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[17:43:50] [PASSED] X0L2 Valid modifier
[17:43:50] [PASSED] X0L2 Modifier for inexistent plane
[17:43:50] =========== [PASSED] drm_test_framebuffer_create ===========
[17:43:50] [PASSED] drm_test_framebuffer_free
[17:43:50] [PASSED] drm_test_framebuffer_init
[17:43:50] [PASSED] drm_test_framebuffer_init_bad_format
[17:43:50] [PASSED] drm_test_framebuffer_init_dev_mismatch
[17:43:50] [PASSED] drm_test_framebuffer_lookup
[17:43:50] [PASSED] drm_test_framebuffer_lookup_inexistent
[17:43:50] [PASSED] drm_test_framebuffer_modifiers_not_supported
[17:43:50] ================= [PASSED] drm_framebuffer =================
[17:43:50] ================ drm_gem_shmem (8 subtests) ================
[17:43:50] [PASSED] drm_gem_shmem_test_obj_create
[17:43:50] [PASSED] drm_gem_shmem_test_obj_create_private
[17:43:50] [PASSED] drm_gem_shmem_test_pin_pages
[17:43:50] [PASSED] drm_gem_shmem_test_vmap
[17:43:50] [PASSED] drm_gem_shmem_test_get_sg_table
[17:43:50] [PASSED] drm_gem_shmem_test_get_pages_sgt
[17:43:50] [PASSED] drm_gem_shmem_test_madvise
[17:43:50] [PASSED] drm_gem_shmem_test_purge
[17:43:50] ================== [PASSED] drm_gem_shmem ==================
[17:43:50] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[17:43:50] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[17:43:50] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[17:43:50] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[17:43:50] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[17:43:50] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[17:43:50] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[17:43:50] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[17:43:50] [PASSED] Automatic
[17:43:50] [PASSED] Full
[17:43:50] [PASSED] Limited 16:235
[17:43:50] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[17:43:50] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[17:43:50] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[17:43:50] [PASSED] drm_test_check_disable_connector
[17:43:50] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[17:43:50] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[17:43:50] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[17:43:50] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[17:43:50] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[17:43:50] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[17:43:50] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[17:43:50] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[17:43:50] [PASSED] drm_test_check_output_bpc_dvi
[17:43:50] [PASSED] drm_test_check_output_bpc_format_vic_1
[17:43:50] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[17:43:50] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[17:43:50] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[17:43:50] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[17:43:50] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[17:43:50] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[17:43:50] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[17:43:50] ============ drm_test_check_hdmi_color_format =============
[17:43:50] [PASSED] AUTO -> RGB
[17:43:50] [PASSED] YCBCR422 -> YUV422
[17:43:50] [PASSED] YCBCR420 -> YUV420
[17:43:50] [PASSED] YCBCR444 -> YUV444
[17:43:50] [PASSED] RGB -> RGB
[17:43:50] ======== [PASSED] drm_test_check_hdmi_color_format =========
[17:43:50] ======== drm_test_check_hdmi_color_format_420_only ========
[17:43:50] [PASSED] RGB should fail
[17:43:50] [PASSED] YUV444 should fail
[17:43:50] [PASSED] YUV422 should fail
[17:43:50] [PASSED] YUV420 should work
[17:43:50] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[17:43:50] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[17:43:50] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[17:43:50] [PASSED] drm_test_check_broadcast_rgb_value
[17:43:50] [PASSED] drm_test_check_bpc_8_value
[17:43:50] [PASSED] drm_test_check_bpc_10_value
[17:43:50] [PASSED] drm_test_check_bpc_12_value
[17:43:50] [PASSED] drm_test_check_format_value
[17:43:50] [PASSED] drm_test_check_tmds_char_value
[17:43:50] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[17:43:50] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[17:43:50] [PASSED] drm_test_check_mode_valid
[17:43:50] [PASSED] drm_test_check_mode_valid_reject
[17:43:50] [PASSED] drm_test_check_mode_valid_reject_rate
[17:43:50] [PASSED] drm_test_check_mode_valid_reject_max_clock
[17:43:50] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[17:43:50] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[17:43:50] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[17:43:50] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[17:43:50] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[17:43:50] [PASSED] drm_test_check_infoframes
[17:43:50] [PASSED] drm_test_check_reject_avi_infoframe
[17:43:50] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[17:43:50] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[17:43:50] [PASSED] drm_test_check_reject_audio_infoframe
[17:43:50] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[17:43:50] ================= drm_managed (2 subtests) =================
[17:43:50] [PASSED] drm_test_managed_release_action
[17:43:50] [PASSED] drm_test_managed_run_action
[17:43:50] =================== [PASSED] drm_managed ===================
[17:43:50] =================== drm_mm (6 subtests) ====================
[17:43:50] [PASSED] drm_test_mm_init
[17:43:50] [PASSED] drm_test_mm_debug
[17:43:50] [PASSED] drm_test_mm_align32
[17:43:50] [PASSED] drm_test_mm_align64
[17:43:50] [PASSED] drm_test_mm_lowest
[17:43:50] [PASSED] drm_test_mm_highest
[17:43:50] ===================== [PASSED] drm_mm ======================
[17:43:50] ============= drm_modes_analog_tv (5 subtests) =============
[17:43:50] [PASSED] drm_test_modes_analog_tv_mono_576i
[17:43:50] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[17:43:50] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[17:43:50] [PASSED] drm_test_modes_analog_tv_pal_576i
[17:43:50] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[17:43:50] =============== [PASSED] drm_modes_analog_tv ===============
[17:43:50] ============== drm_plane_helper (2 subtests) ===============
[17:43:50] =============== drm_test_check_plane_state ================
[17:43:50] [PASSED] clipping_simple
[17:43:50] [PASSED] clipping_rotate_reflect
[17:43:50] [PASSED] positioning_simple
[17:43:50] [PASSED] upscaling
[17:43:50] [PASSED] downscaling
[17:43:50] [PASSED] rounding1
[17:43:50] [PASSED] rounding2
[17:43:50] [PASSED] rounding3
[17:43:50] [PASSED] rounding4
[17:43:50] =========== [PASSED] drm_test_check_plane_state ============
[17:43:50] =========== drm_test_check_invalid_plane_state ============
[17:43:50] [PASSED] positioning_invalid
[17:43:50] [PASSED] upscaling_invalid
[17:43:50] [PASSED] downscaling_invalid
[17:43:50] ======= [PASSED] drm_test_check_invalid_plane_state ========
[17:43:50] ================ [PASSED] drm_plane_helper =================
[17:43:50] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[17:43:50] ====== drm_test_connector_helper_tv_get_modes_check =======
[17:43:50] [PASSED] None
[17:43:50] [PASSED] PAL
[17:43:50] [PASSED] NTSC
[17:43:50] [PASSED] Both, NTSC Default
[17:43:50] [PASSED] Both, PAL Default
[17:43:50] [PASSED] Both, NTSC Default, with PAL on command-line
[17:43:50] [PASSED] Both, PAL Default, with NTSC on command-line
[17:43:50] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[17:43:50] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[17:43:50] ================== drm_rect (9 subtests) ===================
[17:43:50] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[17:43:50] [PASSED] drm_test_rect_clip_scaled_not_clipped
[17:43:50] [PASSED] drm_test_rect_clip_scaled_clipped
[17:43:50] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[17:43:50] ================= drm_test_rect_intersect =================
[17:43:50] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[17:43:50] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[17:43:50] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[17:43:50] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[17:43:50] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[17:43:50] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[17:43:50] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[17:43:50] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[17:43:50] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[17:43:50] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[17:43:50] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[17:43:50] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[17:43:50] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[17:43:50] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[17:43:50] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[17:43:50] ============= [PASSED] drm_test_rect_intersect =============
[17:43:50] ================ drm_test_rect_calc_hscale ================
[17:43:50] [PASSED] normal use
[17:43:50] [PASSED] out of max range
[17:43:50] [PASSED] out of min range
[17:43:50] [PASSED] zero dst
[17:43:50] [PASSED] negative src
[17:43:50] [PASSED] negative dst
[17:43:50] ============ [PASSED] drm_test_rect_calc_hscale ============
[17:43:50] ================ drm_test_rect_calc_vscale ================
[17:43:50] [PASSED] normal use
[17:43:50] [PASSED] out of max range
[17:43:50] [PASSED] out of min range
[17:43:50] [PASSED] zero dst
[17:43:50] [PASSED] negative src
[17:43:50] [PASSED] negative dst
[17:43:50] ============ [PASSED] drm_test_rect_calc_vscale ============
[17:43:50] ================== drm_test_rect_rotate ===================
[17:43:50] [PASSED] reflect-x
[17:43:50] [PASSED] reflect-y
[17:43:50] [PASSED] rotate-0
[17:43:50] [PASSED] rotate-90
[17:43:50] [PASSED] rotate-180
[17:43:50] [PASSED] rotate-270
[17:43:50] ============== [PASSED] drm_test_rect_rotate ===============
[17:43:50] ================ drm_test_rect_rotate_inv =================
[17:43:50] [PASSED] reflect-x
[17:43:50] [PASSED] reflect-y
[17:43:50] [PASSED] rotate-0
[17:43:50] [PASSED] rotate-90
[17:43:50] [PASSED] rotate-180
[17:43:50] [PASSED] rotate-270
[17:43:50] ============ [PASSED] drm_test_rect_rotate_inv =============
[17:43:50] ==================== [PASSED] drm_rect =====================
[17:43:50] ============ drm_sysfb_modeset_test (1 subtest) ============
[17:43:50] ============ drm_test_sysfb_build_fourcc_list =============
[17:43:50] [PASSED] no native formats
[17:43:50] [PASSED] XRGB8888 as native format
[17:43:50] [PASSED] remove duplicates
[17:43:50] [PASSED] convert alpha formats
[17:43:50] [PASSED] random formats
[17:43:50] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[17:43:50] ============= [PASSED] drm_sysfb_modeset_test ==============
[17:43:50] ================== drm_fixp (2 subtests) ===================
[17:43:50] [PASSED] drm_test_int2fixp
[17:43:50] [PASSED] drm_test_sm2fixp
[17:43:50] ==================== [PASSED] drm_fixp =====================
[17:43:50] ============================================================
[17:43:50] Testing complete. Ran 641 tests: passed: 641
[17:43:50] Elapsed time: 26.775s total, 1.869s configuring, 24.738s building, 0.148s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[17:43:50] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[17:43:52] 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
[17:44:02] Starting KUnit Kernel (1/1)...
[17:44:02] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[17:44:02] ============= refcount_interrupt (4 subtests) ==============
[17:44:02] [PASSED] test_single_irq_change
[17:44:02] [PASSED] test_nested_irq_change
[17:44:02] [PASSED] test_multiple_irq_change
[17:44:02] [PASSED] test_irq_save
[17:44:02] =============== [PASSED] refcount_interrupt ================
[17:44:02] ================= ttm_device (5 subtests) ==================
[17:44:02] [PASSED] ttm_device_init_basic
[17:44:02] [PASSED] ttm_device_init_multiple
[17:44:02] [PASSED] ttm_device_fini_basic
[17:44:02] [PASSED] ttm_device_init_no_vma_man
[17:44:02] ================== ttm_device_init_pools ==================
[17:44:02] [PASSED] No DMA allocations, no DMA32 required
[17:44:02] [PASSED] DMA allocations, DMA32 required
[17:44:02] [PASSED] No DMA allocations, DMA32 required
[17:44:02] [PASSED] DMA allocations, no DMA32 required
[17:44:02] ============== [PASSED] ttm_device_init_pools ==============
[17:44:02] =================== [PASSED] ttm_device ====================
[17:44:02] ================== ttm_pool (8 subtests) ===================
[17:44:02] ================== ttm_pool_alloc_basic ===================
[17:44:02] [PASSED] One page
[17:44:02] [PASSED] More than one page
[17:44:02] [PASSED] Above the allocation limit
[17:44:02] [PASSED] One page, with coherent DMA mappings enabled
[17:44:02] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[17:44:02] ============== [PASSED] ttm_pool_alloc_basic ===============
[17:44:02] ============== ttm_pool_alloc_basic_dma_addr ==============
[17:44:02] [PASSED] One page
[17:44:02] [PASSED] More than one page
[17:44:02] [PASSED] Above the allocation limit
[17:44:02] [PASSED] One page, with coherent DMA mappings enabled
[17:44:02] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[17:44:02] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[17:44:02] [PASSED] ttm_pool_alloc_order_caching_match
[17:44:02] [PASSED] ttm_pool_alloc_caching_mismatch
[17:44:02] [PASSED] ttm_pool_alloc_order_mismatch
[17:44:02] [PASSED] ttm_pool_free_dma_alloc
[17:44:02] [PASSED] ttm_pool_free_no_dma_alloc
[17:44:02] [PASSED] ttm_pool_fini_basic
[17:44:02] ==================== [PASSED] ttm_pool =====================
[17:44:02] ================ ttm_resource (8 subtests) =================
[17:44:02] ================= ttm_resource_init_basic =================
[17:44:02] [PASSED] Init resource in TTM_PL_SYSTEM
[17:44:02] [PASSED] Init resource in TTM_PL_VRAM
[17:44:02] [PASSED] Init resource in a private placement
[17:44:02] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[17:44:02] ============= [PASSED] ttm_resource_init_basic =============
[17:44:02] [PASSED] ttm_resource_init_pinned
[17:44:02] [PASSED] ttm_resource_fini_basic
[17:44:02] [PASSED] ttm_resource_manager_init_basic
[17:44:02] [PASSED] ttm_resource_manager_usage_basic
[17:44:02] [PASSED] ttm_resource_manager_set_used_basic
[17:44:02] [PASSED] ttm_sys_man_alloc_basic
[17:44:02] [PASSED] ttm_sys_man_free_basic
[17:44:02] ================== [PASSED] ttm_resource ===================
[17:44:02] =================== ttm_tt (15 subtests) ===================
[17:44:02] ==================== ttm_tt_init_basic ====================
[17:44:02] [PASSED] Page-aligned size
[17:44:02] [PASSED] Extra pages requested
[17:44:02] ================ [PASSED] ttm_tt_init_basic ================
[17:44:02] [PASSED] ttm_tt_init_misaligned
[17:44:02] [PASSED] ttm_tt_fini_basic
[17:44:02] [PASSED] ttm_tt_fini_sg
[17:44:02] [PASSED] ttm_tt_fini_shmem
[17:44:02] [PASSED] ttm_tt_create_basic
[17:44:02] [PASSED] ttm_tt_create_invalid_bo_type
[17:44:02] [PASSED] ttm_tt_create_ttm_exists
[17:44:02] [PASSED] ttm_tt_create_failed
[17:44:02] [PASSED] ttm_tt_destroy_basic
[17:44:02] [PASSED] ttm_tt_populate_null_ttm
[17:44:02] [PASSED] ttm_tt_populate_populated_ttm
[17:44:02] [PASSED] ttm_tt_unpopulate_basic
[17:44:02] [PASSED] ttm_tt_unpopulate_empty_ttm
[17:44:02] [PASSED] ttm_tt_swapin_basic
[17:44:02] ===================== [PASSED] ttm_tt ======================
[17:44:02] =================== ttm_bo (14 subtests) ===================
[17:44:02] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[17:44:02] [PASSED] Cannot be interrupted and sleeps
[17:44:02] [PASSED] Cannot be interrupted, locks straight away
[17:44:02] [PASSED] Can be interrupted, sleeps
[17:44:02] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[17:44:02] [PASSED] ttm_bo_reserve_locked_no_sleep
[17:44:02] [PASSED] ttm_bo_reserve_no_wait_ticket
[17:44:02] [PASSED] ttm_bo_reserve_double_resv
[17:44:02] [PASSED] ttm_bo_reserve_interrupted
[17:44:02] [PASSED] ttm_bo_reserve_deadlock
[17:44:02] [PASSED] ttm_bo_unreserve_basic
[17:44:02] [PASSED] ttm_bo_unreserve_pinned
[17:44:02] [PASSED] ttm_bo_unreserve_bulk
[17:44:02] [PASSED] ttm_bo_fini_basic
[17:44:02] [PASSED] ttm_bo_fini_shared_resv
[17:44:02] [PASSED] ttm_bo_pin_basic
[17:44:02] [PASSED] ttm_bo_pin_unpin_resource
[17:44:02] [PASSED] ttm_bo_multiple_pin_one_unpin
[17:44:02] ===================== [PASSED] ttm_bo ======================
[17:44:02] ============== ttm_bo_validate (22 subtests) ===============
[17:44:02] ============== ttm_bo_init_reserved_sys_man ===============
[17:44:02] [PASSED] Buffer object for userspace
[17:44:02] [PASSED] Kernel buffer object
[17:44:02] [PASSED] Shared buffer object
[17:44:02] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[17:44:02] ============== ttm_bo_init_reserved_mock_man ==============
[17:44:02] [PASSED] Buffer object for userspace
[17:44:02] [PASSED] Kernel buffer object
[17:44:02] [PASSED] Shared buffer object
[17:44:02] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[17:44:02] [PASSED] ttm_bo_init_reserved_resv
[17:44:02] ================== ttm_bo_validate_basic ==================
[17:44:02] [PASSED] Buffer object for userspace
[17:44:02] [PASSED] Kernel buffer object
[17:44:02] [PASSED] Shared buffer object
[17:44:02] ============== [PASSED] ttm_bo_validate_basic ==============
[17:44:02] [PASSED] ttm_bo_validate_invalid_placement
[17:44:02] ============= ttm_bo_validate_same_placement ==============
[17:44:02] [PASSED] System manager
[17:44:02] [PASSED] VRAM manager
[17:44:02] ========= [PASSED] ttm_bo_validate_same_placement ==========
[17:44:02] [PASSED] ttm_bo_validate_failed_alloc
[17:44:02] [PASSED] ttm_bo_validate_pinned
[17:44:02] [PASSED] ttm_bo_validate_busy_placement
[17:44:02] ================ ttm_bo_validate_multihop =================
[17:44:02] [PASSED] Buffer object for userspace
[17:44:02] [PASSED] Kernel buffer object
[17:44:02] [PASSED] Shared buffer object
[17:44:02] ============ [PASSED] ttm_bo_validate_multihop =============
[17:44:02] ========== ttm_bo_validate_no_placement_signaled ==========
[17:44:02] [PASSED] Buffer object in system domain, no page vector
[17:44:02] [PASSED] Buffer object in system domain with an existing page vector
[17:44:02] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[17:44:02] ======== ttm_bo_validate_no_placement_not_signaled ========
[17:44:02] [PASSED] Buffer object for userspace
[17:44:02] [PASSED] Kernel buffer object
[17:44:02] [PASSED] Shared buffer object
[17:44:02] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[17:44:02] [PASSED] ttm_bo_validate_move_fence_signaled
[17:44:02] ========= ttm_bo_validate_move_fence_not_signaled =========
[17:44:02] [PASSED] Waits for GPU
[17:44:02] [PASSED] Tries to lock straight away
[17:44:02] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[17:44:02] [PASSED] ttm_bo_validate_swapout
[17:44:02] [PASSED] ttm_bo_validate_happy_evict
[17:44:02] [PASSED] ttm_bo_validate_all_pinned_evict
[17:44:02] [PASSED] ttm_bo_validate_allowed_only_evict
[17:44:02] [PASSED] ttm_bo_validate_deleted_evict
[17:44:02] [PASSED] ttm_bo_validate_busy_domain_evict
[17:44:02] [PASSED] ttm_bo_validate_evict_gutting
[17:44:02] [PASSED] ttm_bo_validate_recrusive_evict
[17:44:02] ================= [PASSED] ttm_bo_validate =================
[17:44:02] ============================================================
[17:44:02] Testing complete. Ran 106 tests: passed: 106
[17:44:02] Elapsed time: 11.832s total, 1.826s configuring, 9.792s building, 0.185s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/dma-buf/.kunitconfig
[17:44:02] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[17:44:04] 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
[17:44:13] Starting KUnit Kernel (1/1)...
[17:44:13] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[17:44:13] ============= refcount_interrupt (4 subtests) ==============
[17:44:13] [PASSED] test_single_irq_change
[17:44:13] [PASSED] test_nested_irq_change
[17:44:13] [PASSED] test_multiple_irq_change
[17:44:13] [PASSED] test_irq_save
[17:44:13] =============== [PASSED] refcount_interrupt ================
[17:44:13] =============== dma-buf-fence (12 subtests) ================
[17:44:13] [PASSED] test_sanitycheck
[17:44:13] [PASSED] test_signaling
[17:44:13] [PASSED] test_add_callback
[17:44:13] [PASSED] test_late_add_callback
[17:44:13] [PASSED] test_rm_callback
[17:44:13] [PASSED] test_late_rm_callback
[17:44:13] [PASSED] test_status
[17:44:13] [PASSED] test_error
[17:44:13] [PASSED] test_wait
[17:44:13] [PASSED] test_wait_timeout
[17:44:13] [PASSED] test_stub
[17:44:13] [SKIPPED] test_race_signal_callback (requires at least 2 CPUs)
[17:44:13] ================== [PASSED] dma-buf-fence ==================
[17:44:13] ============ dma-buf-fence-chain (11 subtests) =============
[17:44:13] [PASSED] test_sanitycheck
[17:44:13] [PASSED] test_find_seqno
[17:44:13] [PASSED] test_find_signaled
[17:44:13] [PASSED] test_find_out_of_order
[17:44:18] [PASSED] test_find_gap
[17:44:18] [PASSED] test_find_race
[17:44:18] [PASSED] test_signal_forward
[17:44:18] [PASSED] test_signal_backward
[17:44:18] [PASSED] test_wait_forward
[17:44:18] [PASSED] test_wait_backward
[17:44:18] [PASSED] test_wait_random
[17:44:18] =============== [PASSED] dma-buf-fence-chain ===============
[17:44:18] ============ dma-buf-fence-unwrap (10 subtests) ============
[17:44:18] [PASSED] test_sanitycheck
[17:44:18] [PASSED] test_unwrap_array
[17:44:18] [PASSED] test_unwrap_chain
[17:44:18] [PASSED] test_unwrap_chain_array
[17:44:18] [PASSED] test_unwrap_merge
[17:44:18] [PASSED] test_unwrap_merge_duplicate
[17:44:18] [PASSED] test_unwrap_merge_seqno
[17:44:18] [PASSED] test_unwrap_merge_order
[17:44:18] [PASSED] test_unwrap_merge_complex
[17:44:18] [PASSED] test_unwrap_merge_complex_seqno
[17:44:18] ============== [PASSED] dma-buf-fence-unwrap ===============
[17:44:18] ================ dma-buf-resv (5 subtests) =================
[17:44:18] [PASSED] test_sanitycheck
[17:44:18] ===================== test_signaling ======================
[17:44:18] [PASSED] kernel
[17:44:18] [PASSED] write
[17:44:18] [PASSED] read
[17:44:18] [PASSED] bookkeep
[17:44:18] ================= [PASSED] test_signaling ==================
[17:44:18] ====================== test_for_each ======================
[17:44:18] [PASSED] kernel
[17:44:18] [PASSED] write
[17:44:18] [PASSED] read
[17:44:18] [PASSED] bookkeep
[17:44:18] ================== [PASSED] test_for_each ==================
[17:44:18] ================= test_for_each_unlocked ==================
[17:44:18] [PASSED] kernel
[17:44:18] [PASSED] write
[17:44:18] [PASSED] read
[17:44:18] [PASSED] bookkeep
[17:44:18] ============= [PASSED] test_for_each_unlocked ==============
[17:44:18] ===================== test_get_fences =====================
[17:44:18] [PASSED] kernel
[17:44:18] [PASSED] write
[17:44:18] [PASSED] read
[17:44:18] [PASSED] bookkeep
[17:44:18] ================= [PASSED] test_get_fences =================
[17:44:18] ================== [PASSED] dma-buf-resv ===================
[17:44:18] ============================================================
[17:44:18] Testing complete. Ran 54 tests: passed: 53, skipped: 1
[17:44:18] Elapsed time: 15.852s total, 1.802s configuring, 8.728s building, 5.270s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 47+ messages in thread* ✓ Xe.CI.BAT: success for Add memory page offlining support (rev23)
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (19 preceding siblings ...)
2026-08-31 17:44 ` ✓ CI.KUnit: success for Add memory page offlining support (rev23) Patchwork
@ 2026-08-31 18:32 ` Patchwork
2026-08-31 22:22 ` ✗ Xe.CI.FULL: failure " Patchwork
21 siblings, 0 replies; 47+ messages in thread
From: Patchwork @ 2026-08-31 18:32 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 862 bytes --]
== Series Details ==
Series: Add memory page offlining support (rev23)
URL : https://patchwork.freedesktop.org/series/161473/
State : success
== Summary ==
CI Bug Log - changes from xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f_BAT -> xe-pw-161473v23_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (13 -> 12)
------------------------------
Missing (1): bat-bmg-2
Changes
-------
No changes found
Build changes
-------------
* Linux: xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f -> xe-pw-161473v23
IGT_9078: 9078
xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f: 43b9a5e9d30783bb6f4d7dacdd1739184666940f
xe-pw-161473v23: 161473v23
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/index.html
[-- Attachment #2: Type: text/html, Size: 1411 bytes --]
^ permalink raw reply [flat|nested] 47+ messages in thread* ✗ Xe.CI.FULL: failure for Add memory page offlining support (rev23)
2026-08-31 6:49 [PATCH V19 00/15] Add memory page offlining support Tejas Upadhyay
` (20 preceding siblings ...)
2026-08-31 18:32 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-08-31 22:22 ` Patchwork
21 siblings, 0 replies; 47+ messages in thread
From: Patchwork @ 2026-08-31 22:22 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 36393 bytes --]
== Series Details ==
Series: Add memory page offlining support (rev23)
URL : https://patchwork.freedesktop.org/series/161473/
State : failure
== Summary ==
CI Bug Log - changes from xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f_FULL -> xe-pw-161473v23_FULL
====================================================
Summary
-------
**WARNING**
Minor unknown changes coming with xe-pw-161473v23_FULL need to be verified
manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-161473v23_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-161473v23_FULL:
### IGT changes ###
#### Warnings ####
* igt@kms_content_protection@lic-type-1:
- shard-bmg: [SKIP][1] ([Intel XE#7642]) -> [FAIL][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-8/igt@kms_content_protection@lic-type-1.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-5/igt@kms_content_protection@lic-type-1.html
Known issues
------------
Here are the changes found in xe-pw-161473v23_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_async_flips@alternate-sync-async-flip-atomic:
- shard-bmg: [PASS][3] -> [FAIL][4] ([Intel XE#3718] / [Intel XE#6078])
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-3/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-8/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
* igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-dp-2:
- shard-bmg: [PASS][5] -> [FAIL][6] ([Intel XE#6078])
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-3/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-dp-2.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-8/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-dp-2.html
* igt@kms_big_fb@4-tiled-8bpp-rotate-270:
- shard-lnl: NOTRUN -> [SKIP][7] ([Intel XE#1407]) +1 other test skip
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_big_fb@4-tiled-8bpp-rotate-270.html
* igt@kms_big_fb@y-tiled-32bpp-rotate-0:
- shard-bmg: NOTRUN -> [SKIP][8] ([Intel XE#1124]) +2 other tests skip
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_big_fb@y-tiled-32bpp-rotate-0.html
* igt@kms_big_fb@y-tiled-addfb:
- shard-lnl: NOTRUN -> [SKIP][9] ([Intel XE#1467] / [Intel XE#7367])
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_big_fb@y-tiled-addfb.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip:
- shard-lnl: NOTRUN -> [SKIP][10] ([Intel XE#1124]) +1 other test skip
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip.html
* igt@kms_bw@connected-linear-tiling-4-displays-target-3840x2160p:
- shard-bmg: NOTRUN -> [SKIP][11] ([Intel XE#7679])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_bw@connected-linear-tiling-4-displays-target-3840x2160p.html
* igt@kms_ccs@bad-pixel-format-4-tiled-dg2-rc-ccs-cc:
- shard-lnl: NOTRUN -> [SKIP][12] ([Intel XE#2887]) +3 other tests skip
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_ccs@bad-pixel-format-4-tiled-dg2-rc-ccs-cc.html
* igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-a-edp-1:
- shard-lnl: NOTRUN -> [SKIP][13] ([Intel XE#2669] / [Intel XE#3433] / [Intel XE#7389]) +3 other tests skip
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_ccs@crc-primary-suspend-4-tiled-bmg-ccs@pipe-a-edp-1.html
* igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs:
- shard-bmg: NOTRUN -> [SKIP][14] ([Intel XE#2887]) +4 other tests skip
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_ccs@missing-ccs-buffer-y-tiled-ccs.html
* igt@kms_chamelium_color@ctm-blue-to-red:
- shard-lnl: NOTRUN -> [SKIP][15] ([Intel XE#306] / [Intel XE#7358])
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_chamelium_color@ctm-blue-to-red.html
* igt@kms_chamelium_color@ctm-red-to-blue:
- shard-bmg: NOTRUN -> [SKIP][16] ([Intel XE#2325] / [Intel XE#7358])
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_chamelium_color@ctm-red-to-blue.html
* igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k:
- shard-lnl: NOTRUN -> [SKIP][17] ([Intel XE#373]) +1 other test skip
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_chamelium_edid@hdmi-edid-stress-resolution-non-4k.html
* igt@kms_chamelium_hpd@dp-hpd-storm-disable:
- shard-bmg: NOTRUN -> [SKIP][18] ([Intel XE#2252])
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_chamelium_hpd@dp-hpd-storm-disable.html
* igt@kms_content_protection@dp-mst-type-1-suspend-resume:
- shard-bmg: NOTRUN -> [SKIP][19] ([Intel XE#6974])
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_content_protection@dp-mst-type-1-suspend-resume.html
* igt@kms_content_protection@mei-interface:
- shard-lnl: NOTRUN -> [SKIP][20] ([Intel XE#1468] / [Intel XE#7396])
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_content_protection@mei-interface.html
* igt@kms_cursor_crc@cursor-onscreen-128x42:
- shard-lnl: NOTRUN -> [SKIP][21] ([Intel XE#1424]) +1 other test skip
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_cursor_crc@cursor-onscreen-128x42.html
* igt@kms_cursor_legacy@cursorb-vs-flipb-atomic:
- shard-lnl: NOTRUN -> [SKIP][22] ([Intel XE#309] / [Intel XE#7343])
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic.html
* igt@kms_dp_link_training@non-uhbr-mst:
- shard-bmg: NOTRUN -> [SKIP][23] ([Intel XE#4354] / [Intel XE#5882])
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_dp_link_training@non-uhbr-mst.html
* igt@kms_dsc@dsc-fractional-bpp:
- shard-bmg: NOTRUN -> [SKIP][24] ([Intel XE#8265])
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_dsc@dsc-fractional-bpp.html
* igt@kms_dsc@dsc-with-bpc:
- shard-lnl: NOTRUN -> [SKIP][25] ([Intel XE#8265]) +1 other test skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_dsc@dsc-with-bpc.html
* igt@kms_flip@2x-dpms-vs-vblank-race-interruptible:
- shard-lnl: NOTRUN -> [SKIP][26] ([Intel XE#1421]) +2 other tests skip
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_flip@2x-dpms-vs-vblank-race-interruptible.html
* igt@kms_flip@flip-vs-expired-vblank@b-edp1:
- shard-lnl: [PASS][27] -> [FAIL][28] ([Intel XE#301]) +1 other test fail
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-1/igt@kms_flip@flip-vs-expired-vblank@b-edp1.html
* igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling:
- shard-bmg: NOTRUN -> [SKIP][29] ([Intel XE#7178] / [Intel XE#7351])
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-downscaling:
- shard-lnl: NOTRUN -> [SKIP][30] ([Intel XE#1397] / [Intel XE#1745] / [Intel XE#7385])
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-downscaling@pipe-a-default-mode:
- shard-lnl: NOTRUN -> [SKIP][31] ([Intel XE#1397] / [Intel XE#7385])
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_flip_scaled_crc@flip-64bpp-4tile-to-16bpp-4tile-downscaling@pipe-a-default-mode.html
* igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling:
- shard-lnl: NOTRUN -> [SKIP][32] ([Intel XE#7178] / [Intel XE#7351])
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_flip_scaled_crc@flip-64bpp-yftile-to-16bpp-yftile-upscaling.html
* igt@kms_flip_scaled_crc@flip-nv12-linear-to-nv12-linear-reflect-x:
- shard-bmg: NOTRUN -> [SKIP][33] ([Intel XE#7179])
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_flip_scaled_crc@flip-nv12-linear-to-nv12-linear-reflect-x.html
* igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw:
- shard-bmg: NOTRUN -> [SKIP][34] ([Intel XE#2311]) +13 other tests skip
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw.html
* igt@kms_frontbuffer_tracking@drrs-modesetfrombusy:
- shard-lnl: NOTRUN -> [SKIP][35] ([Intel XE#6312] / [Intel XE#651]) +2 other tests skip
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_frontbuffer_tracking@drrs-modesetfrombusy.html
* igt@kms_frontbuffer_tracking@drrshdr-abgr161616f-draw-render:
- shard-lnl: NOTRUN -> [SKIP][36] ([Intel XE#7061]) +1 other test skip
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_frontbuffer_tracking@drrshdr-abgr161616f-draw-render.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-msflip-blt:
- shard-bmg: NOTRUN -> [SKIP][37] ([Intel XE#4141]) +3 other tests skip
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-msflip-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-mmap-wc:
- shard-lnl: NOTRUN -> [SKIP][38] ([Intel XE#656] / [Intel XE#7905]) +7 other tests skip
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_frontbuffer_tracking@fbcdrrs-2p-scndscrn-spr-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcdrrshdr-1p-primscrn-pri-shrfb-draw-mmap-wc:
- shard-lnl: NOTRUN -> [SKIP][39] ([Intel XE#6312]) +3 other tests skip
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_frontbuffer_tracking@fbcdrrshdr-1p-primscrn-pri-shrfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-scndscrn-cur-indfb-draw-render:
- shard-lnl: NOTRUN -> [SKIP][40] ([Intel XE#7905]) +10 other tests skip
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-scndscrn-cur-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@fbchdr-argb161616f-draw-mmap-wc:
- shard-bmg: NOTRUN -> [SKIP][41] ([Intel XE#7061])
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_frontbuffer_tracking@fbchdr-argb161616f-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcpsr-argb161616f-draw-mmap-wc:
- shard-lnl: NOTRUN -> [SKIP][42] ([Intel XE#7061] / [Intel XE#7356])
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_frontbuffer_tracking@fbcpsr-argb161616f-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcpsrhdr-stridechange:
- shard-lnl: NOTRUN -> [SKIP][43] ([Intel XE#7865]) +6 other tests skip
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_frontbuffer_tracking@fbcpsrhdr-stridechange.html
* igt@kms_frontbuffer_tracking@fbcpsrhdr-tiling-y:
- shard-bmg: NOTRUN -> [SKIP][44] ([Intel XE#7399])
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_frontbuffer_tracking@fbcpsrhdr-tiling-y.html
* igt@kms_frontbuffer_tracking@psrhdr-1p-pri-indfb-multidraw:
- shard-bmg: NOTRUN -> [SKIP][45] ([Intel XE#2313]) +12 other tests skip
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_frontbuffer_tracking@psrhdr-1p-pri-indfb-multidraw.html
* igt@kms_mst@mst-suspend-read-crc:
- shard-lnl: NOTRUN -> [SKIP][46] ([Intel XE#8348])
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_mst@mst-suspend-read-crc.html
* igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier:
- shard-bmg: NOTRUN -> [SKIP][47] ([Intel XE#7283]) +1 other test skip
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-modifier.html
* igt@kms_plane@pixel-format-4-tiled-lnl-ccs-modifier@pipe-a-plane-5:
- shard-lnl: NOTRUN -> [SKIP][48] ([Intel XE#8303]) +1 other test skip
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_plane@pixel-format-4-tiled-lnl-ccs-modifier@pipe-a-plane-5.html
* igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-a:
- shard-lnl: NOTRUN -> [SKIP][49] ([Intel XE#2763] / [Intel XE#6886]) +5 other tests skip
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_plane_scaling@planes-upscale-20x20-downscale-factor-0-5@pipe-a.html
* igt@kms_pm_backlight@bad-brightness:
- shard-bmg: NOTRUN -> [SKIP][50] ([Intel XE#7376] / [Intel XE#7760] / [Intel XE#870])
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_pm_backlight@bad-brightness.html
* igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-sf:
- shard-lnl: NOTRUN -> [SKIP][51] ([Intel XE#2893] / [Intel XE#7304])
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_psr2_sf@fbc-pr-overlay-plane-move-continuous-sf.html
* igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-sf:
- shard-bmg: NOTRUN -> [SKIP][52] ([Intel XE#1489])
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_psr2_sf@fbc-psr2-overlay-plane-move-continuous-exceed-sf.html
* igt@kms_psr@fbc-pr-no-drrs:
- shard-lnl: NOTRUN -> [SKIP][53] ([Intel XE#1406]) +1 other test skip
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_psr@fbc-pr-no-drrs.html
* igt@kms_psr@pr-basic:
- shard-bmg: NOTRUN -> [SKIP][54] ([Intel XE#2234] / [Intel XE#2850]) +1 other test skip
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_psr@pr-basic.html
* igt@kms_rotation_crc@primary-rotation-90:
- shard-lnl: NOTRUN -> [SKIP][55] ([Intel XE#3414] / [Intel XE#3904] / [Intel XE#7342])
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_rotation_crc@primary-rotation-90.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
- shard-bmg: NOTRUN -> [SKIP][56] ([Intel XE#2330] / [Intel XE#5813])
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html
* igt@xe_ccs@vm-bind-decompress:
- shard-lnl: NOTRUN -> [SKIP][57] ([Intel XE#7644])
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@xe_ccs@vm-bind-decompress.html
* igt@xe_create@multigpu-create-massive-size:
- shard-bmg: NOTRUN -> [SKIP][58] ([Intel XE#2504] / [Intel XE#7319] / [Intel XE#7350])
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@xe_create@multigpu-create-massive-size.html
* igt@xe_evict@evict-mixed-many-threads-large:
- shard-lnl: NOTRUN -> [SKIP][59] ([Intel XE#6540] / [Intel XE#688]) +2 other tests skip
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@xe_evict@evict-mixed-many-threads-large.html
* igt@xe_exec_balancer@twice-cm-virtual-userptr-invalidate-race:
- shard-lnl: NOTRUN -> [SKIP][60] ([Intel XE#7482]) +4 other tests skip
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@xe_exec_balancer@twice-cm-virtual-userptr-invalidate-race.html
* igt@xe_exec_basic@multigpu-once-userptr-invalidate:
- shard-lnl: NOTRUN -> [SKIP][61] ([Intel XE#1392]) +2 other tests skip
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@xe_exec_basic@multigpu-once-userptr-invalidate.html
* igt@xe_exec_basic@multigpu-once-userptr-rebind:
- shard-bmg: NOTRUN -> [SKIP][62] ([Intel XE#2322] / [Intel XE#7372]) +1 other test skip
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@xe_exec_basic@multigpu-once-userptr-rebind.html
* igt@xe_exec_fault_mode@many-execqueues-multi-queue-userptr-invalidate-imm:
- shard-bmg: NOTRUN -> [SKIP][63] ([Intel XE#8374]) +1 other test skip
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@xe_exec_fault_mode@many-execqueues-multi-queue-userptr-invalidate-imm.html
* igt@xe_exec_fault_mode@once-multi-queue-userptr-rebind:
- shard-lnl: NOTRUN -> [SKIP][64] ([Intel XE#8374]) +3 other tests skip
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@xe_exec_fault_mode@once-multi-queue-userptr-rebind.html
* igt@xe_exec_multi_queue@many-execs-preempt-mode-userptr:
- shard-lnl: NOTRUN -> [SKIP][65] ([Intel XE#8364]) +6 other tests skip
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@xe_exec_multi_queue@many-execs-preempt-mode-userptr.html
* igt@xe_exec_multi_queue@two-queues-preempt-mode-priority-smem:
- shard-bmg: NOTRUN -> [SKIP][66] ([Intel XE#8364]) +6 other tests skip
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@xe_exec_multi_queue@two-queues-preempt-mode-priority-smem.html
* igt@xe_exec_reset@multi-queue-long-spin-reuse-many-queue-switch:
- shard-bmg: NOTRUN -> [SKIP][67] ([Intel XE#8369])
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@xe_exec_reset@multi-queue-long-spin-reuse-many-queue-switch.html
* igt@xe_exec_system_allocator@many-new-bo-map-nomemset:
- shard-bmg: [PASS][68] -> [SKIP][69] ([Intel XE#8589]) +6 other tests skip
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-8/igt@xe_exec_system_allocator@many-new-bo-map-nomemset.html
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-5/igt@xe_exec_system_allocator@many-new-bo-map-nomemset.html
* igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr:
- shard-bmg: NOTRUN -> [SKIP][70] ([Intel XE#8378]) +2 other tests skip
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr.html
* igt@xe_exec_threads@threads-multi-queue-cm-rebind:
- shard-lnl: NOTRUN -> [SKIP][71] ([Intel XE#8378]) +2 other tests skip
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@xe_exec_threads@threads-multi-queue-cm-rebind.html
* igt@xe_madvise@atomic-device:
- shard-lnl: NOTRUN -> [SKIP][72] ([Intel XE#7980])
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@xe_madvise@atomic-device.html
* igt@xe_multigpu_svm@mgpu-latency-prefetch:
- shard-lnl: NOTRUN -> [SKIP][73] ([Intel XE#6964])
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@xe_multigpu_svm@mgpu-latency-prefetch.html
* igt@xe_page_reclaim@binds-null-vma:
- shard-lnl: NOTRUN -> [SKIP][74] ([Intel XE#7793])
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@xe_page_reclaim@binds-null-vma.html
* igt@xe_page_reclaim@boundary-split:
- shard-bmg: NOTRUN -> [SKIP][75] ([Intel XE#7793])
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@xe_page_reclaim@boundary-split.html
* igt@xe_pat@pat-sw-hw-reset-compare:
- shard-lnl: NOTRUN -> [FAIL][76] ([Intel XE#7695])
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@xe_pat@pat-sw-hw-reset-compare.html
* igt@xe_pm_residency@aspm_link_residency:
- shard-lnl: NOTRUN -> [SKIP][77] ([Intel XE#7271])
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@xe_pm_residency@aspm_link_residency.html
* igt@xe_query@multigpu-query-invalid-extension:
- shard-lnl: NOTRUN -> [SKIP][78] ([Intel XE#944])
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@xe_query@multigpu-query-invalid-extension.html
* igt@xe_sriov_scheduling@default-enabled-fair-scheduling:
- shard-lnl: NOTRUN -> [SKIP][79] ([Intel XE#8339])
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@xe_sriov_scheduling@default-enabled-fair-scheduling.html
* igt@xe_sriov_vfio@region-info:
- shard-lnl: NOTRUN -> [SKIP][80] ([Intel XE#7724])
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@xe_sriov_vfio@region-info.html
* igt@xe_wedged@wedged-at-any-timeout:
- shard-bmg: NOTRUN -> [DMESG-WARN][81] ([Intel XE#8963])
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@xe_wedged@wedged-at-any-timeout.html
#### Possible fixes ####
* igt@kms_atomic_transition@plane-all-modeset-transition-fencing:
- shard-bmg: [FAIL][82] ([Intel XE#8098]) -> [PASS][83] +1 other test pass
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-10/igt@kms_atomic_transition@plane-all-modeset-transition-fencing.html
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-5/igt@kms_atomic_transition@plane-all-modeset-transition-fencing.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible:
- shard-lnl: [FAIL][84] ([Intel XE#301]) -> [PASS][85] +1 other test pass
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-lnl-3/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-8/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
* igt@kms_flip@plain-flip-fb-recreate-interruptible:
- shard-lnl: [FAIL][86] ([Intel XE#3098] / [Intel XE#3149]) -> [PASS][87] +1 other test pass
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-lnl-6/igt@kms_flip@plain-flip-fb-recreate-interruptible.html
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-lnl-6/igt@kms_flip@plain-flip-fb-recreate-interruptible.html
* igt@xe_evict@evict-beng-mixed-many-threads-small:
- shard-bmg: [INCOMPLETE][88] ([Intel XE#6321] / [Intel XE#8355]) -> [PASS][89]
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-10/igt@xe_evict@evict-beng-mixed-many-threads-small.html
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-3/igt@xe_evict@evict-beng-mixed-many-threads-small.html
* igt@xe_fault_injection@inject-fault-probe-function-xe_wa_gt_init:
- shard-bmg: [ABORT][90] ([Intel XE#8007]) -> [PASS][91]
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-10/igt@xe_fault_injection@inject-fault-probe-function-xe_wa_gt_init.html
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-2/igt@xe_fault_injection@inject-fault-probe-function-xe_wa_gt_init.html
#### Warnings ####
* igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-pri-shrfb-draw-render:
- shard-bmg: [SKIP][92] ([Intel XE#2311]) -> [SKIP][93] ([Intel XE#8589]) +2 other tests skip
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-8/igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-pri-shrfb-draw-render.html
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-5/igt@kms_frontbuffer_tracking@drrshdr-1p-primscrn-pri-shrfb-draw-render.html
* igt@kms_hdr@brightness-with-hdr:
- shard-bmg: [SKIP][94] ([Intel XE#3544]) -> [SKIP][95] ([Intel XE#3374] / [Intel XE#3544])
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-3/igt@kms_hdr@brightness-with-hdr.html
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-8/igt@kms_hdr@brightness-with-hdr.html
* igt@kms_psr@fbc-psr-basic:
- shard-bmg: [SKIP][96] ([Intel XE#2234] / [Intel XE#2850]) -> [SKIP][97] ([Intel XE#8589])
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-8/igt@kms_psr@fbc-psr-basic.html
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-5/igt@kms_psr@fbc-psr-basic.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-bmg: [SKIP][98] ([Intel XE#2426] / [Intel XE#5848]) -> [FAIL][99] ([Intel XE#1729] / [Intel XE#7424])
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-8/igt@kms_tiled_display@basic-test-pattern.html
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-5/igt@kms_tiled_display@basic-test-pattern.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-bmg: [SKIP][100] ([Intel XE#2426] / [Intel XE#5848]) -> [SKIP][101] ([Intel XE#2509] / [Intel XE#7437])
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-2/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-4/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
* igt@xe_exec_multi_queue@two-queues-close-fd-smem:
- shard-bmg: [SKIP][102] ([Intel XE#8364]) -> [SKIP][103] ([Intel XE#8589])
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-8/igt@xe_exec_multi_queue@two-queues-close-fd-smem.html
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-5/igt@xe_exec_multi_queue@two-queues-close-fd-smem.html
* igt@xe_pm@d3cold-mocs:
- shard-bmg: [SKIP][104] ([Intel XE#2284] / [Intel XE#7370]) -> [SKIP][105] ([Intel XE#8589])
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f/shard-bmg-8/igt@xe_pm@d3cold-mocs.html
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/shard-bmg-5/igt@xe_pm@d3cold-mocs.html
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1397]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1397
[Intel XE#1406]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1406
[Intel XE#1407]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1407
[Intel XE#1421]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1421
[Intel XE#1424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1424
[Intel XE#1467]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1467
[Intel XE#1468]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1468
[Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
[Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
[Intel XE#1745]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1745
[Intel XE#2234]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2234
[Intel XE#2252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2252
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[Intel XE#2311]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2311
[Intel XE#2313]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2313
[Intel XE#2322]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2322
[Intel XE#2325]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2325
[Intel XE#2330]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2330
[Intel XE#2426]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2426
[Intel XE#2504]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2504
[Intel XE#2509]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2509
[Intel XE#2669]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2669
[Intel XE#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
[Intel XE#2850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2850
[Intel XE#2887]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2887
[Intel XE#2893]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2893
[Intel XE#301]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/301
[Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
[Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#3098]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3098
[Intel XE#3149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3149
[Intel XE#3374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3374
[Intel XE#3414]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3414
[Intel XE#3433]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3433
[Intel XE#3544]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3544
[Intel XE#3718]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3718
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#3904]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3904
[Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
[Intel XE#4354]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4354
[Intel XE#5813]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5813
[Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
[Intel XE#5882]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5882
[Intel XE#6078]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6078
[Intel XE#6312]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6312
[Intel XE#6321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6321
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#6540]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6540
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#6886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6886
[Intel XE#6964]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6964
[Intel XE#6974]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6974
[Intel XE#7061]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7061
[Intel XE#7178]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7178
[Intel XE#7179]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7179
[Intel XE#7271]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7271
[Intel XE#7283]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7283
[Intel XE#7304]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7304
[Intel XE#7319]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7319
[Intel XE#7342]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7342
[Intel XE#7343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7343
[Intel XE#7350]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7350
[Intel XE#7351]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7351
[Intel XE#7356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7356
[Intel XE#7358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7358
[Intel XE#7367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7367
[Intel XE#7370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7370
[Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
[Intel XE#7376]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7376
[Intel XE#7385]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7385
[Intel XE#7389]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7389
[Intel XE#7396]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7396
[Intel XE#7399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7399
[Intel XE#7424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7424
[Intel XE#7437]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7437
[Intel XE#7482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7482
[Intel XE#7642]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7642
[Intel XE#7644]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7644
[Intel XE#7679]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7679
[Intel XE#7695]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7695
[Intel XE#7724]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7724
[Intel XE#7760]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7760
[Intel XE#7793]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7793
[Intel XE#7865]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7865
[Intel XE#7905]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7905
[Intel XE#7980]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7980
[Intel XE#8007]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8007
[Intel XE#8098]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8098
[Intel XE#8265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8265
[Intel XE#8303]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8303
[Intel XE#8339]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8339
[Intel XE#8348]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8348
[Intel XE#8355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8355
[Intel XE#8364]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8364
[Intel XE#8369]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8369
[Intel XE#8374]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8374
[Intel XE#8378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8378
[Intel XE#8589]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8589
[Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
[Intel XE#8963]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8963
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
Build changes
-------------
* Linux: xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f -> xe-pw-161473v23
IGT_9078: 9078
xe-5665-43b9a5e9d30783bb6f4d7dacdd1739184666940f: 43b9a5e9d30783bb6f4d7dacdd1739184666940f
xe-pw-161473v23: 161473v23
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v23/index.html
[-- Attachment #2: Type: text/html, Size: 40786 bytes --]
^ permalink raw reply [flat|nested] 47+ messages in thread