* [PATCH V12 00/11] Add memory page offlining support
@ 2026-07-14 13:48 Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 01/11] drm/xe: Link VRAM object with gpu buddy Tejas Upadhyay
` (13 more replies)
0 siblings, 14 replies; 17+ messages in thread
From: Tejas Upadhyay @ 2026-07-14 13:48 UTC (permalink / raw)
To: intel-xe; +Cc: Tejas Upadhyay
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.
This series adds memory page offlining support with following:
1. Link VRAM object with gpu buddy
2. Link and track ttm BO's with physical addresses
3. Link LRC BO and its execution Queue
4. Extend BO purge to handle vram pages as well
5. Handle the generated physical address error by reserving addresses 4K page
6. Adds supporting debugfs to automate injection of physcal address error
7. Add buddy block allocation dump for debuggin buddy related issues
8. Add configfs for vram bad page reservation policy
9. Sysfs entry to provide statistics of bad gpu vram pages for user info
10. Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN
11. Add soft/hard offline mode for VRAM page retirement
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)
Debugfs shows test of different scenarios,
echo 0 > /sys/kernel/debug/dri/bdf/invalid_addr_vram0
where 0 is below address types to be tested,
enum mempage_offline_mode {
MEMPAGE_OFFLINE_UNALLOCATED = 0,
MEMPAGE_OFFLINE_USER_ALLOCATED = 1,
MEMPAGE_OFFLINE_KERNEL_USER_GGTT_ALLOCATED = 2,
MEMPAGE_OFFLINE_KERNEL_USER_PPGTT_ALLOCATED = 3,
MEMPAGE_OFFLINE_KERNEL_CRITICAL_ALLOCATED = 4,
MEMPAGE_OFFLINE_RESERVED = 5,
};
IGT tests for testing this feature standalone core memory side:
https://patchwork.freedesktop.org/patch/714751/
Tejas Upadhyay (11):
drm/xe: Link VRAM object with gpu buddy
drm/gpu: Add gpu_buddy_allocated_addr_to_block helper
drm/xe: Link LRC BO and its execution Queue
drm/xe: Extend BO purge to handle vram pages as well
drm/xe: Handle physical memory address error
drm/xe/cri: Add debugfs to inject faulty vram address
gpu/buddy: Add routine to dump allocated buddy blocks
drm/xe/configfs: Add vram bad page reservation policy
drm/xe/cri: Add sysfs interface for bad gpu vram pages
drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN
drm/xe: Add soft/hard offline mode for VRAM page retirement
drivers/gpu/buddy.c | 99 +++++
drivers/gpu/drm/xe/xe_bo.c | 16 +-
drivers/gpu/drm/xe/xe_bo.h | 5 +-
drivers/gpu/drm/xe/xe_bo_types.h | 3 +
drivers/gpu/drm/xe/xe_configfs.c | 64 ++-
drivers/gpu/drm/xe/xe_configfs.h | 2 +
drivers/gpu/drm/xe/xe_debugfs.c | 169 ++++++++
drivers/gpu/drm/xe/xe_device_sysfs.c | 7 +
drivers/gpu/drm/xe/xe_dma_buf.c | 3 +
drivers/gpu/drm/xe/xe_exec_queue.c | 13 +-
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 | 30 +-
drivers/gpu/drm/xe/xe_lrc.c | 1 +
drivers/gpu/drm/xe/xe_pt.c | 3 +-
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 474 +++++++++++++++++++--
drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 2 +
drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 44 ++
include/linux/gpu_buddy.h | 3 +
include/uapi/drm/xe_drm.h | 12 +-
20 files changed, 916 insertions(+), 45 deletions(-)
--
2.52.0
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH V12 01/11] drm/xe: Link VRAM object with gpu buddy
2026-07-14 13:48 [PATCH V12 00/11] Add memory page offlining support Tejas Upadhyay
@ 2026-07-14 13:49 ` Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 02/11] drm/gpu: Add gpu_buddy_allocated_addr_to_block helper Tejas Upadhyay
` (12 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: Tejas Upadhyay @ 2026-07-14 13:49 UTC (permalink / raw)
To: intel-xe; +Cc: Tejas Upadhyay, Matthew Brost
Setup to link TTM buffer object inside gpu buddy. This functionality
is critical for supporting the memory page offline feature on CRI,
where identified faulty pages must be traced back to their
originating buffer for safe removal.
V2(MattB): Clear block->private in xe_ttm_vram_mgr_del as well
Reviewed-by: 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 b518f7dec680..5ab5dfdb183c 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -54,6 +54,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;
@@ -138,6 +139,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) &&
@@ -176,8 +179,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] 17+ messages in thread
* [PATCH V12 02/11] drm/gpu: Add gpu_buddy_allocated_addr_to_block helper
2026-07-14 13:48 [PATCH V12 00/11] Add memory page offlining support Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 01/11] drm/xe: Link VRAM object with gpu buddy Tejas Upadhyay
@ 2026-07-14 13:49 ` Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 03/11] drm/xe: Link LRC BO and its execution Queue Tejas Upadhyay
` (11 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: Tejas Upadhyay @ 2026-07-14 13:49 UTC (permalink / raw)
To: intel-xe
Cc: Tejas Upadhyay, Arunpravin Paneer Selvam, dri-devel,
Arunpravin Paneer Selvam
Add helper with primary purpose is to efficiently trace a specific
physical memory address back to its corresponding TTM buffer object.
v3:
- use mm->chunk_size minimum allocation granularity (Arun)
v2:
- %s/gpu_buddy_addr_to_block/gpu_buddy_allocated_addr_to_block(MattA)
- remove clear->avail and split nodes check(MattA)
- Adapt lockdep(MattB)
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
Cc: Arunpravin Paneer Selvam <arunpravin.paneerselvam@amd.com>
Cc: dri-devel@lists.freedesktop.org
Reviewed-by: Arunpravin Paneer Selvam <Arunpravin.PaneerSelvam@amd.com>
---
drivers/gpu/buddy.c | 53 +++++++++++++++++++++++++++++++++++++++
include/linux/gpu_buddy.h | 2 ++
2 files changed, 55 insertions(+)
diff --git a/drivers/gpu/buddy.c b/drivers/gpu/buddy.c
index eb1457376307..315f860f4346 100644
--- a/drivers/gpu/buddy.c
+++ b/drivers/gpu/buddy.c
@@ -594,6 +594,59 @@ void gpu_buddy_free_block(struct gpu_buddy *mm,
}
EXPORT_SYMBOL(gpu_buddy_free_block);
+/**
+ * gpu_buddy_allocated_addr_to_block - given relative address find the allocated block
+ *
+ * @mm: GPU buddy manager
+ * @addr: Relative address
+ *
+ * Returns:
+ * gpu_buddy_block on success, NULL or error code on failure
+ */
+struct gpu_buddy_block *gpu_buddy_allocated_addr_to_block(struct gpu_buddy *mm, u64 addr)
+{
+ struct gpu_buddy_block *block;
+ LIST_HEAD(dfs);
+ u64 end;
+ int i;
+
+ gpu_buddy_driver_lock_held(mm);
+
+ end = addr + mm->chunk_size - 1;
+ for (i = 0; i < mm->n_roots; ++i)
+ list_add_tail(&mm->roots[i]->tmp_link, &dfs);
+
+ do {
+ u64 block_start;
+ u64 block_end;
+
+ block = list_first_entry_or_null(&dfs,
+ struct gpu_buddy_block,
+ tmp_link);
+ if (!block)
+ break;
+
+ list_del(&block->tmp_link);
+
+ block_start = gpu_buddy_block_offset(block);
+ block_end = block_start + gpu_buddy_block_size(mm, block) - 1;
+
+ if (!overlaps(addr, end, block_start, block_end))
+ continue;
+
+ if (gpu_buddy_block_is_allocated(block))
+ return block;
+ else if (gpu_buddy_block_is_free(block))
+ return NULL;
+
+ list_add(&block->right->tmp_link, &dfs);
+ list_add(&block->left->tmp_link, &dfs);
+ } while (1);
+
+ return ERR_PTR(-ENXIO);
+}
+EXPORT_SYMBOL(gpu_buddy_allocated_addr_to_block);
+
static void __gpu_buddy_free_list(struct gpu_buddy *mm,
struct list_head *objects,
bool mark_clear,
diff --git a/include/linux/gpu_buddy.h b/include/linux/gpu_buddy.h
index 71941a039648..e7e22fa05ee2 100644
--- a/include/linux/gpu_buddy.h
+++ b/include/linux/gpu_buddy.h
@@ -272,6 +272,8 @@ void gpu_buddy_reset_clear(struct gpu_buddy *mm, bool is_clear);
void gpu_buddy_free_block(struct gpu_buddy *mm, struct gpu_buddy_block *block);
+struct gpu_buddy_block *gpu_buddy_allocated_addr_to_block(struct gpu_buddy *mm, u64 addr);
+
void gpu_buddy_free_list(struct gpu_buddy *mm,
struct list_head *objects,
unsigned int flags);
--
2.52.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V12 03/11] drm/xe: Link LRC BO and its execution Queue
2026-07-14 13:48 [PATCH V12 00/11] Add memory page offlining support Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 01/11] drm/xe: Link VRAM object with gpu buddy Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 02/11] drm/gpu: Add gpu_buddy_allocated_addr_to_block helper Tejas Upadhyay
@ 2026-07-14 13:49 ` Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 04/11] drm/xe: Extend BO purge to handle vram pages as well Tejas Upadhyay
` (10 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: Tejas Upadhyay @ 2026-07-14 13:49 UTC (permalink / raw)
To: intel-xe; +Cc: Tejas Upadhyay
To establish a link between an LRC BO (Logical Ring Context
Buffer Object) and its corresponding execution Queue in the
drm/xe driver, you need to store a back-pointer to the queue
within the BO's private data structure. This allows the
driver to identify and take corrective action on the specific
queue if the LRC BO encounters an error (e.g., memory
corruption or eviction issues).
V3(Sashiko):
- Placeholder of 8 byte for non-lrc bo is acceptable
- Assign bo-q is safe just user READ_ONCE/WRITE_ONCE
V2(MattB):
- Handle multiqueue
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 | 5 +++++
drivers/gpu/drm/xe/xe_lrc.c | 1 +
3 files changed, 9 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 f4b297a19218..89fd5135c899 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -390,6 +390,11 @@ 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.
+ */
+ 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 3e7c995085d0..ee77106b06bc 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] 17+ messages in thread
* [PATCH V12 04/11] drm/xe: Extend BO purge to handle vram pages as well
2026-07-14 13:48 [PATCH V12 00/11] Add memory page offlining support Tejas Upadhyay
` (2 preceding siblings ...)
2026-07-14 13:49 ` [PATCH V12 03/11] drm/xe: Link LRC BO and its execution Queue Tejas Upadhyay
@ 2026-07-14 13:49 ` Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 05/11] drm/xe: Handle physical memory address error Tejas Upadhyay
` (9 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: Tejas Upadhyay @ 2026-07-14 13:49 UTC (permalink / raw)
To: intel-xe; +Cc: Tejas Upadhyay, Arvind Yadav
Recent driver update introduce support for purgeable buffer
objects (BOs), extending the API to include VRAM pages to
better manage memory pressure and enable memory offlining.
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
Reviewed-by: Arvind Yadav <arvind.yadav@intel.com>
---
drivers/gpu/drm/xe/xe_bo.c | 5 +----
drivers/gpu/drm/xe/xe_bo.h | 1 +
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index ddbaf4242c79..cc7ab4b58684 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -909,7 +909,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 = {};
@@ -917,9 +917,6 @@ static int xe_ttm_bo_purge(struct ttm_buffer_object *ttm_bo, struct ttm_operatio
xe_bo_assert_held(bo);
- if (!ttm_bo->ttm)
- return 0;
-
if (!xe_bo_madv_is_dontneed(bo))
return 0;
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index 7ae1d9ac0574..9bd4221be8d8 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -585,6 +585,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] 17+ messages in thread
* [PATCH V12 05/11] drm/xe: Handle physical memory address error
2026-07-14 13:48 [PATCH V12 00/11] Add memory page offlining support Tejas Upadhyay
` (3 preceding siblings ...)
2026-07-14 13:49 ` [PATCH V12 04/11] drm/xe: Extend BO purge to handle vram pages as well Tejas Upadhyay
@ 2026-07-14 13:49 ` Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 06/11] drm/xe/cri: Add debugfs to inject faulty vram address Tejas Upadhyay
` (8 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: Tejas Upadhyay @ 2026-07-14 13:49 UTC (permalink / raw)
To: intel-xe; +Cc: Tejas Upadhyay
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.
Buddy Block Reservation:
When a memory address is reported as faulty, the driver instructs
the DRM Buddy allocator to reserve a block of the specific page
size (typically 4KB). This marks the memory as "dirty/used"
indefinitely.
Two-Stage Tracking:
Offlined Pages:
Pages that have been successfully isolated and removed from the
available memory pool.
Queued Pages:
Addresses that have been flagged as faulty but are currently in
use by a process. These are tracked until the associated buffer
object (BO) is released or migrated, at which point they move
to the "offlined" state.
v9(Sashiko):
- Move xe_exec_queue_put() outside bo lock to avoid sleeping under
spinlock
- Check PURGED state before xe_bo_set_purgeable_state to avoid
assertion if shrinker raced during unlocked window
- Add best-effort comment for flags check without resv lock
- Move xe_bo_put() (pbo_to_put) outside scoped_guard to avoid
recursive deadlock
- Remove xe_ttm_vram_free_bad_pages from critical path
(avoid UAF if another thread frees nentry while fault handler
holds reference)
- Add comment documenting purge-to-reserve race window (self-corrects
on next HW fault)
- In else branch, add nentry to queued_pages before buddy_alloc to
prevent leak on allocation failure
- handle with Eexist for race case
v8(MattA):
- introduce helper for vram_buddy_alloc and free to avoid code dup
- Add WARN_ON for -ENXIO
v7:
- keep vm ref during vm kill and fix some typos
- FW communication code is moved in RAS, keep comment for same
V6:
- 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
V5:
- Categorise and handle BOs accordingly
- Fix crash found with new debugfs tests
V4:
- Set block->private NULL post bo purge
- Filter out gsm address early on
- Rebase
V3:
-rename api, remove tile dependency and add status of reservation
V2:
- Fix mm->avail counter issue
- Remove unused code and handle clean up in case of error
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_bo.c | 11 +-
drivers/gpu/drm/xe/xe_bo.h | 4 +-
drivers/gpu/drm/xe/xe_dma_buf.c | 3 +
drivers/gpu/drm/xe/xe_exec_queue.c | 8 +-
drivers/gpu/drm/xe/xe_pt.c | 3 +-
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 374 +++++++++++++++++++--
drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 1 +
drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 28 ++
8 files changed, 396 insertions(+), 36 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index cc7ab4b58684..a9622f1ad6c2 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -158,7 +158,16 @@ 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
+ * @bo: The BO
+ *
+ * Check if BO is user created BO. This requires the
+ * reservation lock for the BO to be held.
+ *
+ * Returns: boolean
+ */
+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 9bd4221be8d8..0dfc7ee0540a 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -362,7 +362,8 @@ static inline void xe_bo_unpin_map_no_vm(struct xe_bo *bo)
{
if (likely(bo)) {
xe_bo_lock(bo, false);
- xe_bo_unpin(bo);
+ if (!xe_bo_is_purged(bo))
+ xe_bo_unpin(bo);
xe_bo_unlock(bo);
xe_bo_put(bo);
@@ -586,6 +587,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
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 89fd5135c899..a314a1e80c81 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue.c
+++ b/drivers/gpu/drm/xe/xe_exec_queue.c
@@ -1557,8 +1557,12 @@ void xe_exec_queue_update_run_ticks(struct xe_exec_queue *q)
* errors.
*/
lrc = q->lrc[0];
- new_ts = xe_lrc_update_timestamp(lrc, &old_ts);
- q->xef->run_ticks[q->class] += (new_ts - old_ts) * q->width;
+ xe_bo_lock(lrc->bo, false);
+ if (!xe_bo_is_purged(lrc->bo)) {
+ new_ts = xe_lrc_update_timestamp(lrc, &old_ts);
+ q->xef->run_ticks[q->class] += (new_ts - old_ts) * q->width;
+ }
+ xe_bo_unlock(lrc->bo);
drm_dev_exit(idx);
}
diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
index e466f714bf86..0a1fc28b2463 100644
--- a/drivers/gpu/drm/xe/xe_pt.c
+++ b/drivers/gpu/drm/xe/xe_pt.c
@@ -212,7 +212,8 @@ void xe_pt_destroy(struct xe_pt *pt, u32 flags, struct llist_head *deferred)
return;
XE_WARN_ON(!list_empty(&pt->bo->ttm.base.gpuva.list));
- xe_bo_unpin(pt->bo);
+ if (!xe_bo_is_purged(pt->bo))
+ xe_bo_unpin(pt->bo);
xe_bo_put_deferred(pt->bo, deferred);
if (pt->level > 0 && pt->num_live) {
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 5ab5dfdb183c..61c5d4ef8a07 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -13,7 +13,10 @@
#include "xe_bo.h"
#include "xe_device.h"
+#include "xe_exec_queue.h"
+#include "xe_lrc.h"
#include "xe_res_cursor.h"
+#include "xe_ttm_stolen_mgr.h"
#include "xe_ttm_vram_mgr.h"
#include "xe_vram_types.h"
@@ -46,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,
@@ -54,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;
@@ -115,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) &&
@@ -172,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);
@@ -280,6 +303,24 @@ static const struct ttm_resource_manager_func xe_ttm_vram_mgr_func = {
.debug = xe_ttm_vram_mgr_debug
};
+static void xe_ttm_vram_free_bad_pages(struct drm_device *dev, struct xe_ttm_vram_mgr *mgr)
+{
+ struct xe_ttm_vram_offline_resource *pos, *n;
+
+ list_for_each_entry_safe(pos, n, &mgr->offlined_pages, offlined_link) {
+ xe_ttm_vram_buddy_free(mgr, &pos->blocks, pos->used_visible_size);
+ list_del(&pos->offlined_link);
+ --mgr->n_offlined_pages;
+ kfree(pos);
+ }
+ list_for_each_entry_safe(pos, n, &mgr->queued_pages, queued_link) {
+ xe_ttm_vram_buddy_free(mgr, &pos->blocks, 0);
+ list_del(&pos->queued_link);
+ --mgr->n_queued_pages;
+ kfree(pos);
+ }
+}
+
static void xe_ttm_vram_mgr_fini(struct drm_device *dev, void *arg)
{
struct xe_device *xe = to_xe_device(dev);
@@ -291,6 +332,10 @@ static void xe_ttm_vram_mgr_fini(struct drm_device *dev, void *arg)
if (ttm_resource_manager_evict_all(&xe->ttm, man))
return;
+ mutex_lock(&mgr->lock);
+ xe_ttm_vram_free_bad_pages(dev, mgr);
+ mutex_unlock(&mgr->lock);
+
WARN_ON_ONCE(mgr->visible_avail != mgr->visible_size);
gpu_buddy_fini(&mgr->mm);
@@ -318,6 +363,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;
@@ -474,3 +521,268 @@ 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_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);
+ /* Ban exec queue if BO is lrc */
+ if (bo->q && xe_exec_queue_get_unless_zero(bo->q)) {
+ /* ban queue */
+ xe_exec_queue_kill(bo->q);
+ q_to_put = bo->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_put(q_to_put);
+
+ return ret;
+}
+
+static bool xe_ttm_vram_page_already_processed(struct xe_ttm_vram_mgr *mgr,
+ unsigned long 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, unsigned long addr,
+ struct xe_ttm_vram_mgr *vram_mgr, struct gpu_buddy *mm)
+{
+ struct xe_ttm_vram_offline_resource *nentry;
+ struct ttm_buffer_object *tbo = NULL;
+ struct xe_bo *pbo_to_put = NULL;
+ struct gpu_buddy_block *block;
+ enum reserve_status {
+ pending = 0,
+ fail
+ };
+ 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 = 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%lx is critical kernel bo, requesting SBR\n",
+ __func__, addr);
+ break;
+ }
+ nentry->id = ++vram_mgr->n_queued_pages;
+ list_add(&nentry->queued_link, &vram_mgr->queued_pages);
+ }
+ }
+
+ /* Deferred put outside lock to avoid recursive deadlock */
+ if (pbo_to_put) {
+ xe_bo_put(pbo_to_put);
+ /* Hint System controller driver for reset with -EIO */
+ return -EIO;
+ }
+
+ if (block) {
+ struct xe_ttm_vram_offline_resource *pos, *n;
+ struct xe_bo *pbo = ttm_to_xe_bo(tbo);
+
+ /*
+ * Purge BO containing address - reference held from above.
+ * Note: brief window between purge (freeing blocks) and re-reserve
+ * below. If another allocation claims the block, buddy_alloc fails
+ * and the next HW fault at this address will retry.
+ */
+ ret = xe_ttm_vram_purge_page(xe, pbo);
+ xe_bo_put(pbo);
+ if (ret) {
+ nentry->status = fail;
+ return ret;
+ }
+
+ /* Reserve page at address addr*/
+ scoped_guard(mutex, &vram_mgr->lock) {
+ ret = xe_ttm_vram_buddy_alloc(vram_mgr, addr, addr + size,
+ size, size, &nentry->blocks,
+ GPU_BUDDY_RANGE_ALLOCATION,
+ NULL, &nentry->used_visible_size);
+ if (ret) {
+ drm_warn(&xe->drm, "Could not reserve page at addr:0x%lx, ret:%d\n",
+ addr, ret);
+ nentry->status = fail;
+ return ret;
+ }
+
+ list_for_each_entry_safe(pos, n, &vram_mgr->queued_pages, queued_link) {
+ if (pos->id == nentry->id) {
+ --vram_mgr->n_queued_pages;
+ list_del(&pos->queued_link);
+ break;
+ }
+ }
+ list_add(&nentry->offlined_link, &vram_mgr->offlined_pages);
+ /* RAS will send command to FW for offlining page based on ret value */
+ ++vram_mgr->n_offlined_pages;
+ return ret;
+ }
+ } else {
+ scoped_guard(mutex, &vram_mgr->lock) {
+ nentry->id = ++vram_mgr->n_queued_pages;
+ list_add(&nentry->queued_link, &vram_mgr->queued_pages);
+ ret = xe_ttm_vram_buddy_alloc(vram_mgr, addr, addr + size,
+ size, size, &nentry->blocks,
+ GPU_BUDDY_RANGE_ALLOCATION,
+ NULL, &nentry->used_visible_size);
+ if (ret) {
+ drm_warn(&xe->drm, "Could not reserve page at addr:0x%lx, ret:%d\n",
+ addr, ret);
+ nentry->status = fail;
+ return ret;
+ }
+
+ --vram_mgr->n_queued_pages;
+ list_del(&nentry->queued_link);
+ ++vram_mgr->n_offlined_pages;
+ list_add(&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,
+ resource_size_t addr)
+{
+ unsigned long stolen_base = xe_ttm_stolen_gpu_offset(xe);
+ struct xe_vram_region *vr;
+ struct xe_tile *tile;
+ int id;
+
+ /* Addr from stolen memory? */
+ if (addr + SZ_4K >= stolen_base)
+ return NULL;
+
+ for_each_tile(tile, xe, id) {
+ vr = tile->mem.vram;
+ if ((addr <= vr->dpa_base + vr->actual_physical_size) &&
+ (addr + SZ_4K >= vr->dpa_base))
+ return vr;
+ }
+ return NULL;
+}
+
+/**
+ * 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; no further action.
+ * * %-ENOMEM - allocation failure; next action is reset.
+ * * %-ENXIO - address not found in buddy; next action is reset.
+ * * %-EEXIST - address already processed; no further action.
+ * * % Any other negative error - next action is reset.
+ */
+int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, unsigned long addr)
+{
+ struct xe_ttm_vram_mgr *vram_mgr;
+ struct xe_vram_region *vr;
+ struct gpu_buddy *mm;
+
+ vr = xe_ttm_vram_addr_to_region(xe, addr);
+ if (!vr) {
+ drm_err(&xe->drm, "%s:%d addr:%lx 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, 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..8ef06d9d44f7 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, unsigned long addr);
static inline struct xe_ttm_vram_mgr_resource *
to_xe_ttm_vram_mgr_resource(struct ttm_resource *res)
{
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
index 9106da056b49..3ad7966798eb 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
@@ -19,6 +19,14 @@ struct xe_ttm_vram_mgr {
struct ttm_resource_manager manager;
/** @mm: DRM buddy allocator which manages the VRAM */
struct gpu_buddy mm;
+ /** @offlined_pages: List of offlined pages */
+ struct list_head offlined_pages;
+ /** @n_offlined_pages: Number of offlined pages */
+ u16 n_offlined_pages;
+ /** @queued_pages: List of queued pages */
+ struct list_head queued_pages;
+ /** @n_queued_pages: Number of queued pages */
+ u16 n_queued_pages;
/** @visible_size: Proped size of the CPU visible portion */
u64 visible_size;
/** @visible_avail: CPU visible portion still unallocated */
@@ -45,4 +53,24 @@ struct xe_ttm_vram_mgr_resource {
unsigned long flags;
};
+/**
+ * struct xe_ttm_vram_offline_resource - Xe TTM VRAM offline resource
+ */
+struct xe_ttm_vram_offline_resource {
+ /** @offlined_link: Link to offlined pages */
+ struct list_head offlined_link;
+ /** @queued_link: Link to queued pages */
+ struct list_head queued_link;
+ /** @blocks: list of DRM buddy blocks */
+ struct list_head blocks;
+ /** @used_visible_size: How many CPU visible bytes this resource is using */
+ u64 used_visible_size;
+ /** @id: The id of an offline resource */
+ u16 id;
+ /** @addr: Address of faulty memory location reported by HW */
+ unsigned long addr;
+ /** @status: reservation status of resource */
+ bool status;
+};
+
#endif
--
2.52.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V12 06/11] drm/xe/cri: Add debugfs to inject faulty vram address
2026-07-14 13:48 [PATCH V12 00/11] Add memory page offlining support Tejas Upadhyay
` (4 preceding siblings ...)
2026-07-14 13:49 ` [PATCH V12 05/11] drm/xe: Handle physical memory address error Tejas Upadhyay
@ 2026-07-14 13:49 ` Tejas Upadhyay
2026-07-14 15:31 ` Rodrigo Vivi
2026-07-14 13:49 ` [PATCH V12 07/11] gpu/buddy: Add routine to dump allocated buddy blocks Tejas Upadhyay
` (7 subsequent siblings)
13 siblings, 1 reply; 17+ messages in thread
From: Tejas Upadhyay @ 2026-07-14 13:49 UTC (permalink / raw)
To: intel-xe; +Cc: Tejas Upadhyay
Add debugfs which can help testing feature with manual error injection.
Adding a debugfs interface to the drm/xe driver allows manual injection
of faulty VRAM addresses, facilitating the testing of the CRI memory
page offline feature before it is fully functional. The implementation
involves creating a debugfs entry, likely under
/sys/kernel/debug/dri/bdf/invalid_addr_vram0,
to accept specific faulty addresses for validation.
For example,
echo 0 > /sys/kernel/debug/dri/bdf/invalid_addr_vram0
where 0 is below address types to be tested,
enum mempage_offline_mode {
MEMPAGE_OFFLINE_UNALLOCATED = 0,
MEMPAGE_OFFLINE_USER_ALLOCATED = 1,
MEMPAGE_OFFLINE_KERNEL_USER_GGTT_ALLOCATED = 2,
MEMPAGE_OFFLINE_KERNEL_USER_PPGTT_ALLOCATED = 3,
MEMPAGE_OFFLINE_KERNEL_CRITICAL_ALLOCATED = 4,
MEMPAGE_OFFLINE_RESERVED = 5
};
v6(Sashiko):
- Fix off-by-one in address loop boundary (<= vs <)
- Use relative offset for buddy lookup, convert to DPA for
handle_addr_fault
- Fix continue inside scoped_guard targeting wrong loop; use break
instead
- Use READ_ONCE for bo->q access without resv lock
- Wrap case MEMPAGE_OFFLINE_RESERVED in braces for variable
declaration
- Add NULL check for xe_ttm_stolen_gpu_offset
v5:
- Remove redundant code
v4:
- Use scope_guard around lock, adapt bo->q and enhance warn messages
- %s/gpu_buddy_addr_to_block/gpu_buddy_allocated_addr_to_block
v3:
- Add more specific noncritical bo tests
v2:
- Add mode based automated test vs manual address feed
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_debugfs.c | 169 +++++++++++++++++++++
drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 2 +
2 files changed, 171 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
index 8c391c7b017a..6a21511d3521 100644
--- a/drivers/gpu/drm/xe/xe_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_debugfs.c
@@ -14,6 +14,7 @@
#include "regs/xe_pmt.h"
#include "xe_bo.h"
#include "xe_device.h"
+#include "xe_exec_queue_types.h"
#include "xe_force_wake.h"
#include "xe_gt.h"
#include "xe_gt_debugfs.h"
@@ -21,6 +22,7 @@
#include "xe_guc_ads.h"
#include "xe_hw_engine.h"
#include "xe_mmio.h"
+#include "xe_migrate.h"
#include "xe_pcode.h"
#include "xe_pm.h"
#include "xe_psmi.h"
@@ -30,6 +32,8 @@
#include "xe_sriov_vf.h"
#include "xe_step.h"
#include "xe_tile_debugfs.h"
+#include "xe_ttm_stolen_mgr.h"
+#include "xe_ttm_vram_mgr.h"
#include "xe_vsec.h"
#include "xe_wa.h"
@@ -41,6 +45,14 @@
DECLARE_FAULT_ATTR(gt_reset_failure);
DECLARE_FAULT_ATTR(inject_csc_hw_error);
+enum mempage_offline_mode {
+ MEMPAGE_OFFLINE_UNALLOCATED = 0,
+ MEMPAGE_OFFLINE_USER_ALLOCATED = 1,
+ MEMPAGE_OFFLINE_KERNEL_USER_GGTT_ALLOCATED = 2,
+ MEMPAGE_OFFLINE_KERNEL_USER_PPGTT_ALLOCATED = 3,
+ MEMPAGE_OFFLINE_KERNEL_CRITICAL_ALLOCATED = 4,
+ MEMPAGE_OFFLINE_RESERVED = 5,
+};
static void read_residency_counter(struct xe_device *xe, struct xe_mmio *mmio,
u32 offset, const char *name, struct drm_printer *p)
@@ -564,6 +576,152 @@ static const struct file_operations disable_late_binding_fops = {
.write = disable_late_binding_set,
};
+static ssize_t addr_fault_reporting_show(struct file *f, char __user *ubuf,
+ size_t size, loff_t *pos)
+{
+ struct xe_device *xe = file_inode(f)->i_private;
+ char buf[32];
+ int len;
+
+ len = scnprintf(buf, sizeof(buf), "%lld\n", xe->mem.vram->ttm.offline_mode);
+
+ return simple_read_from_buffer(ubuf, size, pos, buf, len);
+}
+
+static int mempage_exec_offline(struct xe_device *xe, u64 mode)
+{
+ struct xe_tile *tile = xe_device_get_root_tile(xe);
+ struct xe_vram_region *vr = tile->mem.vram;
+ struct ttm_buffer_object *tbo = NULL;
+ struct xe_ttm_vram_mgr *vram_mgr;
+ struct gpu_buddy_block *block;
+ bool do_offline = false;
+ struct gpu_buddy *mm;
+ struct xe_bo *bo;
+ u64 addr = 0x0;
+ int ret = 0;
+
+ vram_mgr = &vr->ttm;
+ mm = &vram_mgr->mm;
+ while (addr < vr->actual_physical_size) {
+ do_offline = false;
+ scoped_guard(mutex, &vram_mgr->lock) {
+ block = gpu_buddy_allocated_addr_to_block(mm, addr);
+ if (!block && mode == MEMPAGE_OFFLINE_UNALLOCATED)
+ do_offline = true;
+ if (block && PTR_ERR(block) != -ENXIO) {
+ if (!block->private)
+ break;
+ tbo = block->private;
+ bo = ttm_to_xe_bo(tbo);
+ if (bo->ttm.type == ttm_bo_type_device &&
+ bo->flags & XE_BO_FLAG_USER &&
+ bo->flags & XE_BO_FLAG_VRAM_MASK &&
+ mode == MEMPAGE_OFFLINE_USER_ALLOCATED) {
+ do_offline = true;
+ } else if (READ_ONCE(bo->q) &&
+ mode == MEMPAGE_OFFLINE_KERNEL_USER_GGTT_ALLOCATED) {
+ /* lrc */
+ struct xe_vm *migrate_vm;
+
+ migrate_vm = xe_migrate_get_vm(tile->migrate);
+ if (migrate_vm != READ_ONCE(bo->q)->vm)
+ do_offline = true;
+ xe_vm_put(migrate_vm);
+ } else if (bo->ttm.type == ttm_bo_type_kernel &&
+ bo->flags & XE_BO_FLAG_FORCE_USER_VRAM &&
+ bo->flags & XE_BO_FLAG_PAGETABLE &&
+ mode == MEMPAGE_OFFLINE_KERNEL_USER_PPGTT_ALLOCATED) {
+ /* ppgtt */
+ do_offline = true;
+ } else if (bo->ttm.type == ttm_bo_type_kernel &&
+ !(bo->flags & XE_BO_FLAG_FORCE_USER_VRAM) &&
+ mode == MEMPAGE_OFFLINE_KERNEL_CRITICAL_ALLOCATED) {
+ do_offline = true;
+ }
+ }
+ }
+ if (do_offline) {
+ /* Report fault — convert relative to DPA */
+ ret = xe_ttm_vram_handle_addr_fault(xe, addr + vr->dpa_base);
+ if (ret) {
+ if ((ret == -EIO) &&
+ mode == MEMPAGE_OFFLINE_KERNEL_USER_GGTT_ALLOCATED) {
+ addr += SZ_4K;
+ continue;
+ }
+ break;
+ }
+ /* Verify page is now reserved */
+ scoped_guard(mutex, &vram_mgr->lock) {
+ block = gpu_buddy_allocated_addr_to_block(mm, addr);
+ if (!block || PTR_ERR(block) == -ENXIO || block->private)
+ ret = -EBUSY;
+ }
+ break;
+ }
+ addr += SZ_4K;
+ }
+ if (!do_offline)
+ drm_warn(&xe->drm, "no such object, ret:%d\n", ret);
+
+ return ret;
+}
+
+static ssize_t addr_fault_reporting_set(struct file *f, const char __user *ubuf,
+ size_t size, loff_t *pos)
+{
+ struct xe_device *xe = file_inode(f)->i_private;
+ int ret = 0;
+ u64 mode;
+
+ ret = kstrtou64_from_user(ubuf, size, 0, &mode);
+ if (ret)
+ return ret;
+
+ switch (mode) {
+ case MEMPAGE_OFFLINE_UNALLOCATED:
+ case MEMPAGE_OFFLINE_USER_ALLOCATED:
+ case MEMPAGE_OFFLINE_KERNEL_USER_GGTT_ALLOCATED:
+ case MEMPAGE_OFFLINE_KERNEL_USER_PPGTT_ALLOCATED:
+ case MEMPAGE_OFFLINE_KERNEL_CRITICAL_ALLOCATED:
+ ret = mempage_exec_offline(xe, mode);
+ break;
+ case MEMPAGE_OFFLINE_RESERVED: {
+ u64 stolen_base;
+
+ stolen_base = xe_ttm_stolen_gpu_offset(xe);
+ if (!stolen_base) {
+ ret = -ENODEV;
+ break;
+ }
+ ret = xe_ttm_vram_handle_addr_fault(xe, stolen_base);
+ break;
+ }
+ default:
+ ret = -EINVAL;
+ break;
+ }
+
+ xe->mem.vram->ttm.offline_mode = mode;
+ if (!ret || (ret == -EIO &&
+ (mode == MEMPAGE_OFFLINE_KERNEL_CRITICAL_ALLOCATED ||
+ mode == MEMPAGE_OFFLINE_RESERVED))) {
+ drm_info(&xe->drm, "offline mode %llu passed ret:%d\n", mode, ret);
+ } else {
+ drm_warn(&xe->drm, "offline mode %llu failed, ret:%d\n", mode, ret);
+ return ret;
+ }
+
+ return size;
+}
+
+static const struct file_operations addr_fault_reporting_fops = {
+ .owner = THIS_MODULE,
+ .read = addr_fault_reporting_show,
+ .write = addr_fault_reporting_set,
+};
+
void xe_debugfs_register(struct xe_device *xe)
{
struct ttm_device *bdev = &xe->ttm;
@@ -632,6 +790,17 @@ void xe_debugfs_register(struct xe_device *xe)
if (man)
ttm_resource_manager_create_debugfs(man, root, "stolen_mm");
+ if (xe->info.platform == XE_CRESCENTISLAND) {
+ man = ttm_manager_type(bdev, XE_PL_VRAM0);
+ if (man) {
+ char name[20];
+
+ snprintf(name, sizeof(name), "invalid_addr_vram%d", 0);
+ debugfs_create_file(name, 0600, root, xe,
+ &addr_fault_reporting_fops);
+ }
+ }
+
for_each_tile(tile, xe, tile_id)
xe_tile_debugfs_register(tile);
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 3ad7966798eb..07ed88b47e04 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;
+ /** @offline_mode: debugfs hook for setting page offline mode */
+ u64 offline_mode;
};
/**
--
2.52.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V12 07/11] gpu/buddy: Add routine to dump allocated buddy blocks
2026-07-14 13:48 [PATCH V12 00/11] Add memory page offlining support Tejas Upadhyay
` (5 preceding siblings ...)
2026-07-14 13:49 ` [PATCH V12 06/11] drm/xe/cri: Add debugfs to inject faulty vram address Tejas Upadhyay
@ 2026-07-14 13:49 ` Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 08/11] drm/xe/configfs: Add vram bad page reservation policy Tejas Upadhyay
` (6 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: Tejas Upadhyay @ 2026-07-14 13:49 UTC (permalink / raw)
To: intel-xe; +Cc: Tejas Upadhyay
To implement the ability to see allocated blocks under a specific VRAM
instance in the drm driver, new api is introduced. While existing structs
often show the free block list, this addition provides a comprehensive view
of all currently resident VRAM allocations.
Dump will look like,
[ +0.000003] 0x00000002f8000000-0x00000002f8800000: 8388608
[ +0.000005] 0x00000002f8800000-0x00000002f8840000: 262144
[ +0.000004] 0x00000002f8840000-0x00000002f8860000: 131072
[ +0.000004] 0x00000002f8860000-0x00000002f8870000: 65536
[ +0.000005] 0x00000002f9000000-0x00000002f9800000: 8388608
[ +0.000004] 0x00000002f9800000-0x00000002f9880000: 524288
[ +0.000005] 0x00000002f9880000-0x00000002f9884000: 16384
[ +0.000004] 0x00000002f9900000-0x00000002f9980000: 524288
[ +0.000005] 0x00000002f9980000-0x00000002f9988000: 32768
[ +0.000004] 0x00000002f9988000-0x00000002f998c000: 16384
v3(Sashiko):
- Add cond_resched() every 1024 blocks to yield CPU on large VRAM dumps
v2(MattB):
- Add lockdep assert
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/buddy.c | 46 +++++++++++++++++++++++++++++++++++++++
include/linux/gpu_buddy.h | 1 +
2 files changed, 47 insertions(+)
diff --git a/drivers/gpu/buddy.c b/drivers/gpu/buddy.c
index 315f860f4346..ffacd2069758 100644
--- a/drivers/gpu/buddy.c
+++ b/drivers/gpu/buddy.c
@@ -10,6 +10,7 @@
#include <linux/sizes.h>
#include <linux/gpu_buddy.h>
+#include <drm/drm_print.h>
/**
* gpu_buddy_assert - assert a condition in the buddy allocator
@@ -1294,6 +1295,51 @@ int gpu_buddy_block_trim(struct gpu_buddy *mm,
}
EXPORT_SYMBOL(gpu_buddy_block_trim);
+/**
+ * gpu_buddy_dump_allocated_blocks - print all allocated blocks in drm buddy
+ *
+ * @mm: DRM buddy manager to look into
+ *
+ * Looks into buddy manager for each block and their status and if allocated
+ * print allocated block range and size
+ *
+ * Returns:
+ * void
+ */
+void gpu_buddy_dump_allocated_blocks(struct gpu_buddy *mm)
+{
+ struct gpu_buddy_block *block;
+ LIST_HEAD(dfs);
+ int i, count = 0;
+
+ gpu_buddy_driver_lock_held(mm);
+
+ for (i = 0; i < mm->n_roots; ++i)
+ list_add_tail(&mm->roots[i]->tmp_link, &dfs);
+
+ do {
+ block = list_first_entry_or_null(&dfs,
+ struct gpu_buddy_block,
+ tmp_link);
+ if (!block)
+ break;
+
+ list_del(&block->tmp_link);
+
+ if (gpu_buddy_block_is_allocated(block)) {
+ gpu_buddy_block_print(mm, block);
+ if (!(++count % 1024))
+ cond_resched(); /* yield periodically */
+ }
+
+ if (gpu_buddy_block_is_split(block)) {
+ list_add(&block->right->tmp_link, &dfs);
+ list_add(&block->left->tmp_link, &dfs);
+ }
+ } while (1);
+}
+EXPORT_SYMBOL(gpu_buddy_dump_allocated_blocks);
+
static struct gpu_buddy_block *
__gpu_buddy_alloc_blocks(struct gpu_buddy *mm,
u64 start, u64 end,
diff --git a/include/linux/gpu_buddy.h b/include/linux/gpu_buddy.h
index e7e22fa05ee2..aaebdceb1c44 100644
--- a/include/linux/gpu_buddy.h
+++ b/include/linux/gpu_buddy.h
@@ -267,6 +267,7 @@ int gpu_buddy_block_trim(struct gpu_buddy *mm,
u64 *start,
u64 new_size,
struct list_head *blocks);
+void gpu_buddy_dump_allocated_blocks(struct gpu_buddy *mm);
void gpu_buddy_reset_clear(struct gpu_buddy *mm, bool is_clear);
--
2.52.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V12 08/11] drm/xe/configfs: Add vram bad page reservation policy
2026-07-14 13:48 [PATCH V12 00/11] Add memory page offlining support Tejas Upadhyay
` (6 preceding siblings ...)
2026-07-14 13:49 ` [PATCH V12 07/11] gpu/buddy: Add routine to dump allocated buddy blocks Tejas Upadhyay
@ 2026-07-14 13:49 ` Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 09/11] drm/xe/cri: Add sysfs interface for bad gpu vram pages Tejas Upadhyay
` (5 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: Tejas Upadhyay @ 2026-07-14 13:49 UTC (permalink / raw)
To: intel-xe; +Cc: Tejas Upadhyay
The interface enables setting the policy for how bad pages are
handled in VRAM. This is crucial for maintaining system
stability in scenarios where VRAM degradation occurs.
By default policy will be "reserve", which can be changed to
"logging" only.
v3:
- All FW communication moved under RAS
v2:
- Add CRI check and rebase
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_configfs.c | 64 +++++++++++++++++++++++++++-
drivers/gpu/drm/xe/xe_configfs.h | 2 +
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 10 +++++
3 files changed, 75 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/xe/xe_configfs.c b/drivers/gpu/drm/xe/xe_configfs.c
index 052cce962161..c4f386d4bf09 100644
--- a/drivers/gpu/drm/xe/xe_configfs.c
+++ b/drivers/gpu/drm/xe/xe_configfs.c
@@ -61,7 +61,8 @@
* ├── survivability_mode
* ├── gt_types_allowed
* ├── engines_allowed
- * └── enable_psmi
+ * ├── enable_psmi
+ * └── bad_page_reservation
*
* After configuring the attributes as per next section, the device can be
* probed with::
@@ -159,6 +160,16 @@
*
* This attribute can only be set before binding to the device.
*
+ * Bad pages reservation:
+ * ---------------------
+ *
+ * Disable vram bad pages reservation, instead just report it in dmesg.
+ * Example to disable it::
+ *
+ * # echo 0 > /sys/kernel/config/xe/0000:03:00.0/bad_page_reservation
+ *
+ * This attribute can only be set before binding to the device.
+ *
* Context restore BB
* ------------------
*
@@ -275,6 +286,7 @@ struct xe_config_group_device {
bool survivability_mode;
bool enable_psmi;
bool enable_multi_queue;
+ bool bad_page_reservation;
struct {
unsigned int max_vfs;
bool admin_only_pf;
@@ -295,6 +307,7 @@ static const struct xe_config_device device_defaults = {
.survivability_mode = false,
.enable_psmi = false,
.enable_multi_queue = true,
+ .bad_page_reservation = true,
.sriov = {
.max_vfs = XE_DEFAULT_MAX_VFS,
.admin_only_pf = XE_DEFAULT_ADMIN_ONLY_PF,
@@ -616,6 +629,32 @@ static ssize_t enable_multi_queue_store(struct config_item *item, const char *pa
return len;
}
+static ssize_t bad_page_reservation_show(struct config_item *item, char *page)
+{
+ struct xe_config_device *dev = to_xe_config_device(item);
+
+ return sprintf(page, "%d\n", dev->bad_page_reservation);
+}
+
+static ssize_t bad_page_reservation_store(struct config_item *item, const char *page, size_t len)
+{
+ struct xe_config_group_device *dev = to_xe_config_group_device(item);
+ bool val;
+ int ret;
+
+ ret = kstrtobool(page, &val);
+ if (ret)
+ return ret;
+
+ guard(mutex)(&dev->lock);
+ if (is_bound(dev))
+ return -EBUSY;
+
+ dev->config.bad_page_reservation = val;
+
+ return len;
+}
+
static bool wa_bb_read_advance(bool dereference, char **p,
const char *append, size_t len,
size_t *max_size)
@@ -855,6 +894,7 @@ CONFIGFS_ATTR(, ctx_restore_mid_bb);
CONFIGFS_ATTR(, ctx_restore_post_bb);
CONFIGFS_ATTR(, enable_multi_queue);
CONFIGFS_ATTR(, enable_psmi);
+CONFIGFS_ATTR(, bad_page_reservation);
CONFIGFS_ATTR(, engines_allowed);
CONFIGFS_ATTR(, gt_types_allowed);
CONFIGFS_ATTR(, survivability_mode);
@@ -864,6 +904,7 @@ static struct configfs_attribute *xe_config_device_attrs[] = {
&attr_ctx_restore_post_bb,
&attr_enable_multi_queue,
&attr_enable_psmi,
+ &attr_bad_page_reservation,
&attr_engines_allowed,
&attr_gt_types_allowed,
&attr_survivability_mode,
@@ -1142,6 +1183,7 @@ static void dump_custom_dev_config(struct pci_dev *pdev,
PRI_CUSTOM_ATTR("%llx", engines_allowed);
PRI_CUSTOM_ATTR("%d", enable_multi_queue);
PRI_CUSTOM_ATTR("%d", enable_psmi);
+ PRI_CUSTOM_ATTR("%d", bad_page_reservation);
PRI_CUSTOM_ATTR("%d", survivability_mode);
PRI_CUSTOM_ATTR("%u", sriov.admin_only_pf);
@@ -1290,6 +1332,26 @@ bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev)
return ret;
}
+/**
+ * xe_configfs_get_bad_page_reservation - get configfs bad_page_reservation setting
+ * @pdev: pci device
+ *
+ * Return: bad_page_reservation setting in configfs
+ */
+bool xe_configfs_get_bad_page_reservation(struct pci_dev *pdev)
+{
+ struct xe_config_group_device *dev = find_xe_config_group_device(pdev);
+ bool ret;
+
+ if (!dev)
+ return device_defaults.bad_page_reservation;
+
+ ret = dev->config.bad_page_reservation;
+ config_group_put(&dev->group);
+
+ return ret;
+}
+
/**
* xe_configfs_get_ctx_restore_mid_bb - get configfs ctx_restore_mid_bb setting
* @pdev: pci device
diff --git a/drivers/gpu/drm/xe/xe_configfs.h b/drivers/gpu/drm/xe/xe_configfs.h
index 4fbbeafba473..7405cc5f3207 100644
--- a/drivers/gpu/drm/xe/xe_configfs.h
+++ b/drivers/gpu/drm/xe/xe_configfs.h
@@ -24,6 +24,7 @@ bool xe_configfs_media_gt_allowed(struct pci_dev *pdev);
u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev);
bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev);
bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev);
+bool xe_configfs_get_bad_page_reservation(struct pci_dev *pdev);
u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
enum xe_engine_class class,
const u32 **cs);
@@ -44,6 +45,7 @@ static inline bool xe_configfs_media_gt_allowed(struct pci_dev *pdev) { return t
static inline u64 xe_configfs_get_engines_allowed(struct pci_dev *pdev) { return U64_MAX; }
static inline bool xe_configfs_get_psmi_enabled(struct pci_dev *pdev) { return false; }
static inline bool xe_configfs_get_enable_multi_queue(struct pci_dev *pdev) { return true; }
+static inline bool xe_configfs_get_bad_page_reservation(struct pci_dev *pdev) { return true; }
static inline u32 xe_configfs_get_ctx_restore_mid_bb(struct pci_dev *pdev,
enum xe_engine_class class,
const u32 **cs) { return 0; }
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 61c5d4ef8a07..8506c1e0594d 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -12,6 +12,7 @@
#include <drm/ttm/ttm_range_manager.h>
#include "xe_bo.h"
+#include "xe_configfs.h"
#include "xe_device.h"
#include "xe_exec_queue.h"
#include "xe_lrc.h"
@@ -771,6 +772,7 @@ int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, unsigned long addr)
struct xe_ttm_vram_mgr *vram_mgr;
struct xe_vram_region *vr;
struct gpu_buddy *mm;
+ bool policy;
vr = xe_ttm_vram_addr_to_region(xe, addr);
if (!vr) {
@@ -782,6 +784,14 @@ int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, unsigned long addr)
vram_mgr = &vr->ttm;
mm = &vram_mgr->mm;
+ policy = xe_configfs_get_bad_page_reservation(to_pci_dev(xe->drm.dev));
+ if (!policy) {
+ drm_err(&xe->drm, "0x%lx is reported as corrupted address by HW\n",
+ addr);
+ /* Let RAS report to FW to drop addr from SRAM queue */
+ return -EOPNOTSUPP;
+ }
+
/* Reserve page at address */
return xe_ttm_vram_reserve_page_at_addr(xe, addr, vram_mgr, mm);
}
--
2.52.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH V12 09/11] drm/xe/cri: Add sysfs interface for bad gpu vram pages
2026-07-14 13:48 [PATCH V12 00/11] Add memory page offlining support Tejas Upadhyay
` (7 preceding siblings ...)
2026-07-14 13:49 ` [PATCH V12 08/11] drm/xe/configfs: Add vram bad page reservation policy Tejas Upadhyay
@ 2026-07-14 13:49 ` Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 10/11] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN Tejas Upadhyay
` (4 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: Tejas Upadhyay @ 2026-07-14 13:49 UTC (permalink / raw)
To: intel-xe; +Cc: Tejas Upadhyay
Starting CRI, Include a sysfs interface designed to expose information
about bad VRAM pages—those identified as having hardware faults
(e.g., ECC errors). This interface allows userspace tools and
administrators to monitor the health of the GPU's local memory and
track the status of page retirement.To get details on bad gpu vram
pages can be found under /sys/bus/pci/devices/bdf/vram_bad_pages.
Where The format is, pfn : gpu page size : flags
flags:
R: reserved, this gpu page is reserved.
P: pending for reserve, this gpu page is marked as bad, will be reserved
in next window of page_reserve.
F: unable to reserve. this gpu page can't be reserved
due to some reasons.
For example if you read using cat /sys/bus/pci/devices/bdf/vram_bad_pages,
max_pages : 10000
0x00000000 : 0x00001000 : R
0x00001234 : 0x00001000 : P
v3:
- Move FW communication in RAS code
v2:
- Add max_pages info as per updated design doc
- Rebase
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_device_sysfs.c | 7 ++
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 79 ++++++++++++++++++++++
drivers/gpu/drm/xe/xe_ttm_vram_mgr.h | 1 +
drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 2 +
4 files changed, 89 insertions(+)
diff --git a/drivers/gpu/drm/xe/xe_device_sysfs.c b/drivers/gpu/drm/xe/xe_device_sysfs.c
index a73e0e957cb0..47c5be4180fe 100644
--- a/drivers/gpu/drm/xe/xe_device_sysfs.c
+++ b/drivers/gpu/drm/xe/xe_device_sysfs.c
@@ -8,12 +8,14 @@
#include <linux/pci.h>
#include <linux/sysfs.h>
+#include "xe_configfs.h"
#include "xe_device.h"
#include "xe_device_sysfs.h"
#include "xe_mmio.h"
#include "xe_pcode_api.h"
#include "xe_pcode.h"
#include "xe_pm.h"
+#include "xe_ttm_vram_mgr.h"
/**
* DOC: Xe device sysfs
@@ -267,6 +269,7 @@ static const struct attribute_group auto_link_downgrade_attr_group = {
int xe_device_sysfs_init(struct xe_device *xe)
{
struct device *dev = xe->drm.dev;
+ bool policy;
int ret;
if (xe->d3cold.capable) {
@@ -285,5 +288,9 @@ int xe_device_sysfs_init(struct xe_device *xe)
return ret;
}
+ policy = xe_configfs_get_bad_page_reservation(to_pci_dev(dev));
+ if (xe->info.platform == XE_CRESCENTISLAND && policy)
+ xe_ttm_vram_sysfs_init(xe);
+
return 0;
}
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 8506c1e0594d..b81cfa43e821 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -796,3 +796,82 @@ int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, unsigned long addr)
return xe_ttm_vram_reserve_page_at_addr(xe, addr, vram_mgr, mm);
}
EXPORT_SYMBOL(xe_ttm_vram_handle_addr_fault);
+
+static void xe_ttm_vram_dump_bad_pages_info(char *buf, struct xe_ttm_vram_mgr *mgr)
+{
+ const unsigned int element_size = sizeof("0xabcdabcd : 0x12345678 : R\n") - 1;
+ const unsigned int maxpage_size = sizeof("max_pages: 10000\n") - 1;
+ struct xe_ttm_vram_offline_resource *pos, *n;
+ struct gpu_buddy_block *block;
+ ssize_t s = 0;
+
+ mutex_lock(&mgr->lock);
+ s += scnprintf(&buf[s], maxpage_size + 1, "max_pages: %d\n", mgr->max_pages);
+ list_for_each_entry_safe(pos, n, &mgr->offlined_pages, offlined_link) {
+ block = list_first_entry(&pos->blocks,
+ struct gpu_buddy_block,
+ link);
+ s += scnprintf(&buf[s], element_size + 1,
+ "0x%08llx : 0x%08llx : %1s\n",
+ gpu_buddy_block_offset(block) >> PAGE_SHIFT,
+ gpu_buddy_block_size(&mgr->mm, block),
+ "R");
+ }
+ list_for_each_entry_safe(pos, n, &mgr->queued_pages, queued_link) {
+ block = list_first_entry(&pos->blocks,
+ struct gpu_buddy_block,
+ link);
+ s += scnprintf(&buf[s], element_size + 1,
+ "0x%08llx : 0x%08llx : %1s\n",
+ gpu_buddy_block_offset(block) >> PAGE_SHIFT,
+ gpu_buddy_block_size(&mgr->mm, block),
+ pos->status ? "P" : "F");
+ }
+ mutex_unlock(&mgr->lock);
+}
+
+static ssize_t vram_bad_pages_show(struct device *dev, struct device_attribute *attr, char *buf)
+{
+ struct pci_dev *pdev = to_pci_dev(dev);
+ struct xe_device *xe = pdev_to_xe_device(pdev);
+ struct ttm_resource_manager *man;
+ struct xe_ttm_vram_mgr *mgr;
+
+ man = ttm_manager_type(&xe->ttm, XE_PL_VRAM0);
+ if (man) {
+ mgr = to_xe_ttm_vram_mgr(man);
+ xe_ttm_vram_dump_bad_pages_info(buf, mgr);
+ }
+
+ return sysfs_emit(buf, "%s\n", buf);
+}
+static DEVICE_ATTR_RO(vram_bad_pages);
+
+static void xe_ttm_vram_sysfs_fini(void *arg)
+{
+ struct xe_device *xe = arg;
+
+ device_remove_file(xe->drm.dev, &dev_attr_vram_bad_pages);
+}
+
+/**
+ * xe_ttm_vram_sysfs_init - Initialize vram sysfs component
+ * @tile: Xe Tile object
+ *
+ * It needs to be initialized after the main tile component is ready
+ *
+ * Returns: 0 on success, negative error code on error.
+ */
+int xe_ttm_vram_sysfs_init(struct xe_device *xe)
+{
+ int err;
+
+ err = device_create_file(xe->drm.dev, &dev_attr_vram_bad_pages);
+ if (err) {
+ dev_err(xe->drm.dev, "Failed to create vram_bad_pages sysfs file: %d\n", err);
+ return 0;
+ }
+
+ return devm_add_action_or_reset(xe->drm.dev, xe_ttm_vram_sysfs_fini, xe);
+}
+EXPORT_SYMBOL(xe_ttm_vram_sysfs_init);
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
index 8ef06d9d44f7..c33e1a8d9217 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.h
@@ -32,6 +32,7 @@ void xe_ttm_vram_get_used(struct ttm_resource_manager *man,
u64 *used, u64 *used_visible);
int xe_ttm_vram_handle_addr_fault(struct xe_device *xe, unsigned long addr);
+int xe_ttm_vram_sysfs_init(struct xe_device *xe);
static inline struct xe_ttm_vram_mgr_resource *
to_xe_ttm_vram_mgr_resource(struct ttm_resource *res)
{
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
index 07ed88b47e04..b23796066a1a 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
@@ -39,6 +39,8 @@ struct xe_ttm_vram_mgr {
u32 mem_type;
/** @offline_mode: debugfs hook for setting page offline mode */
u64 offline_mode;
+ /** @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] 17+ messages in thread
* [PATCH V12 10/11] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN
2026-07-14 13:48 [PATCH V12 00/11] Add memory page offlining support Tejas Upadhyay
` (8 preceding siblings ...)
2026-07-14 13:49 ` [PATCH V12 09/11] drm/xe/cri: Add sysfs interface for bad gpu vram pages Tejas Upadhyay
@ 2026-07-14 13:49 ` Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 11/11] drm/xe: Add soft/hard offline mode for VRAM page retirement Tejas Upadhyay
` (3 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: Tejas Upadhyay @ 2026-07-14 13:49 UTC (permalink / raw)
To: intel-xe; +Cc: Tejas Upadhyay
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.
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
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 | 30 ++++++++++++++++++++----
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 6 +++++
include/uapi/drm/xe_drm.h | 12 +++++++++-
5 files changed, 49 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 53b6c0bf4849..326c8aa4014c 100644
--- a/drivers/gpu/drm/xe/xe_exec_queue_types.h
+++ b/drivers/gpu/drm/xe/xe_exec_queue_types.h
@@ -149,6 +149,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;
@@ -343,8 +346,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 cc33ae80e8cf..534e7c4e0099 100644
--- a/drivers/gpu/drm/xe/xe_execlist.c
+++ b/drivers/gpu/drm/xe/xe_execlist.c
@@ -452,10 +452,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 c70c77141a74..45eaa7c1ac24 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>
@@ -1573,6 +1574,12 @@ guc_exec_queue_timedout_job(struct drm_sched_job *drm_job)
if (!exec_queue_killed(q))
wedged = guc_submit_hint_wedged(exec_queue_to_guc(q));
+ /*
+ * Only tag as GPU hang if this is the original timeout, not a
+ * consequence of a prior kill (e.g., page-offline).
+ */
+ if (!exec_queue_killed(q))
+ atomic_or(DRM_XE_EXEC_QUEUE_BAN_REASON_GPU_HANG, &q->ban_reason);
set_exec_queue_banned(q);
/* Kick job / queue off hardware */
@@ -1656,6 +1663,7 @@ 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);
+ atomic_set(&q->ban_reason, 0);
xe_gt_reset_async(q->gt);
goto rearm;
}
@@ -2495,13 +2503,25 @@ static void guc_exec_queue_multi_queue_drop_suspend(struct xe_exec_queue *q)
}
}
-static bool guc_exec_queue_reset_status(struct xe_exec_queue *q)
+static u64 guc_exec_queue_reset_status(struct xe_exec_queue *q)
{
- if (xe_exec_queue_is_multi_queue_secondary(q) &&
- guc_exec_queue_reset_status(xe_exec_queue_multi_queue_primary(q)))
- return true;
+ if (xe_exec_queue_is_multi_queue_secondary(q)) {
+ u64 status = guc_exec_queue_reset_status(xe_exec_queue_multi_queue_primary(q));
- return exec_queue_reset(q) || exec_queue_killed_or_banned_or_wedged(q);
+ if (status)
+ return status;
+ }
+
+ if (exec_queue_reset(q) || exec_queue_killed_or_banned_or_wedged(q)) {
+ u64 reason = atomic_read(&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 b81cfa43e821..3c190db2e613 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -7,6 +7,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>
@@ -538,7 +539,11 @@ static int xe_ttm_vram_purge_page(struct xe_device *xe, struct xe_bo *bo)
xe_bo_unlock(bo);
/* Ban VM if BO is PPGTT */
if (vm && (flags & XE_BO_FLAG_PAGETABLE)) {
+ struct xe_exec_queue *eq;
+
down_write(&vm->lock);
+ list_for_each_entry(eq, &vm->preempt.exec_queues, lr.link)
+ atomic_or(DRM_XE_EXEC_QUEUE_BAN_REASON_PAGE_OFFLINE, &eq->ban_reason);
xe_vm_kill(vm, true);
up_write(&vm->lock);
}
@@ -549,6 +554,7 @@ static int xe_ttm_vram_purge_page(struct xe_device *xe, struct xe_bo *bo)
/* Ban exec queue if BO is lrc */
if (bo->q && xe_exec_queue_get_unless_zero(bo->q)) {
/* ban queue */
+ atomic_or(DRM_XE_EXEC_QUEUE_BAN_REASON_PAGE_OFFLINE, &bo->q->ban_reason);
xe_exec_queue_kill(bo->q);
q_to_put = bo->q;
}
diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
index 509202a7b13e..1600e8f0885a 100644
--- a/include/uapi/drm/xe_drm.h
+++ b/include/uapi/drm/xe_drm.h
@@ -1503,7 +1503,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] 17+ messages in thread
* [PATCH V12 11/11] drm/xe: Add soft/hard offline mode for VRAM page retirement
2026-07-14 13:48 [PATCH V12 00/11] Add memory page offlining support Tejas Upadhyay
` (9 preceding siblings ...)
2026-07-14 13:49 ` [PATCH V12 10/11] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN Tejas Upadhyay
@ 2026-07-14 13:49 ` Tejas Upadhyay
2026-07-14 14:16 ` ✓ CI.KUnit: success for Add memory page offlining support (rev13) Patchwork
` (2 subsequent siblings)
13 siblings, 0 replies; 17+ messages in thread
From: Tejas Upadhyay @ 2026-07-14 13:49 UTC (permalink / raw)
To: intel-xe; +Cc: Tejas Upadhyay
Introduce a mode-based approach for VRAM page offlining to distinguish
between soft (temporary) and hard (permanent) page retirement:
- Add enum xe_page_offline_mode with XE_PAGE_OFFLINE_SOFT and
XE_PAGE_OFFLINE_HARD states.
- Add 'mode' field to struct xe_ttm_vram_offline_resource.
On first fault at an address:
- Reserve the block, add to offlined_pages with mode = SOFT.
- Page stays out of the allocator pool but is not permanently retired.
On second fault at the same address:
- xe_ttm_vram_page_already_processed() finds the entry and promotes
mode from SOFT to HARD.
- Returns -EEXIST to the caller, which signals FW to permanently
retire the page.
This avoids unnecessary permanent retirement on transient single-bit
errors while ensuring persistent faults get hard-offlined.
v2(Sashiko):
- Add soft-to-hard mode promotion for queued_pages
Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
---
drivers/gpu/drm/xe/xe_ttm_vram_mgr.c | 15 +++++++++++++--
drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 12 ++++++++++++
2 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
index 3c190db2e613..868e6e8f8599 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr.c
@@ -587,13 +587,23 @@ static bool xe_ttm_vram_page_already_processed(struct xe_ttm_vram_mgr *mgr,
lockdep_assert_held(&mgr->lock);
list_for_each_entry(pos, &mgr->offlined_pages, offlined_link) {
- if (pos->addr == addr)
+ if (pos->addr == addr) {
+ /*
+ * Second fault at same addr: promote soft to hard.
+ * Caller returns -EEXIST to FW for permanent retirement.
+ */
+ if (pos->mode == XE_PAGE_OFFLINE_SOFT)
+ pos->mode = XE_PAGE_OFFLINE_HARD;
return true;
+ }
}
list_for_each_entry(pos, &mgr->queued_pages, queued_link) {
- if (pos->addr == addr)
+ if (pos->addr == addr) {
+ if (pos->mode == XE_PAGE_OFFLINE_SOFT)
+ pos->mode = XE_PAGE_OFFLINE_HARD;
return true;
+ }
}
return false;
@@ -626,6 +636,7 @@ static int xe_ttm_vram_reserve_page_at_addr(struct xe_device *xe, unsigned long
INIT_LIST_HEAD(&nentry->blocks);
nentry->status = pending;
nentry->addr = addr;
+ nentry->mode = XE_PAGE_OFFLINE_SOFT;
if (block) {
struct xe_bo *pbo;
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 b23796066a1a..f73dfd1ad82b 100644
--- a/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
+++ b/drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h
@@ -57,6 +57,16 @@ struct xe_ttm_vram_mgr_resource {
unsigned long flags;
};
+/**
+ * enum xe_page_offline_mode - Mode of page offline
+ * @XE_PAGE_OFFLINE_SOFT: Page is soft-offlined (scrubbed, can be restored)
+ * @XE_PAGE_OFFLINE_HARD: Page is hard-offlined (permanently retired)
+ */
+enum xe_page_offline_mode {
+ XE_PAGE_OFFLINE_SOFT = 0,
+ XE_PAGE_OFFLINE_HARD,
+};
+
/**
* struct xe_ttm_vram_offline_resource - Xe TTM VRAM offline resource
*/
@@ -75,6 +85,8 @@ struct xe_ttm_vram_offline_resource {
unsigned long addr;
/** @status: reservation status of resource */
bool status;
+ /** @mode: offline mode (soft or hard) */
+ enum xe_page_offline_mode mode;
};
#endif
--
2.52.0
^ permalink raw reply related [flat|nested] 17+ messages in thread
* ✓ CI.KUnit: success for Add memory page offlining support (rev13)
2026-07-14 13:48 [PATCH V12 00/11] Add memory page offlining support Tejas Upadhyay
` (10 preceding siblings ...)
2026-07-14 13:49 ` [PATCH V12 11/11] drm/xe: Add soft/hard offline mode for VRAM page retirement Tejas Upadhyay
@ 2026-07-14 14:16 ` Patchwork
2026-07-14 14:53 ` ✓ Xe.CI.BAT: " Patchwork
2026-07-14 20:13 ` ✗ Xe.CI.FULL: failure " Patchwork
13 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2026-07-14 14:16 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
== Series Details ==
Series: Add memory page offlining support (rev13)
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
[14:15:28] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[14:15:33] 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
[14:16:05] Starting KUnit Kernel (1/1)...
[14:16:05] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[14:16:05] ================== guc_buf (11 subtests) ===================
[14:16:05] [PASSED] test_smallest
[14:16:05] [PASSED] test_largest
[14:16:05] [PASSED] test_granular
[14:16:05] [PASSED] test_unique
[14:16:05] [PASSED] test_overlap
[14:16:05] [PASSED] test_reusable
[14:16:05] [PASSED] test_too_big
[14:16:05] [PASSED] test_flush
[14:16:05] [PASSED] test_lookup
[14:16:05] [PASSED] test_data
[14:16:05] [PASSED] test_class
[14:16:05] ===================== [PASSED] guc_buf =====================
[14:16:05] =================== guc_dbm (7 subtests) ===================
[14:16:05] [PASSED] test_empty
[14:16:05] [PASSED] test_default
[14:16:05] ======================== test_size ========================
[14:16:05] [PASSED] 4
[14:16:05] [PASSED] 8
[14:16:05] [PASSED] 32
[14:16:05] [PASSED] 256
[14:16:05] ==================== [PASSED] test_size ====================
[14:16:05] ======================= test_reuse ========================
[14:16:05] [PASSED] 4
[14:16:05] [PASSED] 8
[14:16:05] [PASSED] 32
[14:16:05] [PASSED] 256
[14:16:05] =================== [PASSED] test_reuse ====================
[14:16:05] =================== test_range_overlap ====================
[14:16:05] [PASSED] 4
[14:16:05] [PASSED] 8
[14:16:05] [PASSED] 32
[14:16:05] [PASSED] 256
[14:16:05] =============== [PASSED] test_range_overlap ================
[14:16:05] =================== test_range_compact ====================
[14:16:05] [PASSED] 4
[14:16:05] [PASSED] 8
[14:16:05] [PASSED] 32
[14:16:05] [PASSED] 256
[14:16:05] =============== [PASSED] test_range_compact ================
[14:16:05] ==================== test_range_spare =====================
[14:16:05] [PASSED] 4
[14:16:05] [PASSED] 8
[14:16:05] [PASSED] 32
[14:16:05] [PASSED] 256
[14:16:05] ================ [PASSED] test_range_spare =================
[14:16:05] ===================== [PASSED] guc_dbm =====================
[14:16:05] =================== guc_idm (6 subtests) ===================
[14:16:05] [PASSED] bad_init
[14:16:05] [PASSED] no_init
[14:16:05] [PASSED] init_fini
[14:16:05] [PASSED] check_used
[14:16:05] [PASSED] check_quota
[14:16:05] [PASSED] check_all
[14:16:05] ===================== [PASSED] guc_idm =====================
[14:16:05] =============== guc_klv_helpers (9 subtests) ===============
[14:16:05] [PASSED] test_count
[14:16:05] [PASSED] test_encode_u32
[14:16:05] [PASSED] test_encode_u64
[14:16:05] [PASSED] test_encode_string
[14:16:05] [PASSED] test_encode_object_raw
[14:16:05] [PASSED] test_encode_object_klv
[14:16:05] [PASSED] test_encode_object_nested
[14:16:05] [PASSED] test_encode_object_basic
[14:16:05] [PASSED] test_print
[14:16:05] ================= [PASSED] guc_klv_helpers =================
[14:16:05] ================== no_relay (3 subtests) ===================
[14:16:05] [PASSED] xe_drops_guc2pf_if_not_ready
[14:16:05] [PASSED] xe_drops_guc2vf_if_not_ready
[14:16:05] [PASSED] xe_rejects_send_if_not_ready
[14:16:05] ==================== [PASSED] no_relay =====================
[14:16:05] ================== pf_relay (14 subtests) ==================
[14:16:05] [PASSED] pf_rejects_guc2pf_too_short
[14:16:05] [PASSED] pf_rejects_guc2pf_too_long
[14:16:05] [PASSED] pf_rejects_guc2pf_no_payload
[14:16:05] [PASSED] pf_fails_no_payload
[14:16:05] [PASSED] pf_fails_bad_origin
[14:16:05] [PASSED] pf_fails_bad_type
[14:16:05] [PASSED] pf_txn_reports_error
[14:16:05] [PASSED] pf_txn_sends_pf2guc
[14:16:05] [PASSED] pf_sends_pf2guc
[14:16:05] [SKIPPED] pf_loopback_nop (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[14:16:05] [SKIPPED] pf_loopback_echo (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[14:16:05] [SKIPPED] pf_loopback_fail (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[14:16:05] [SKIPPED] pf_loopback_busy (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[14:16:05] [SKIPPED] pf_loopback_retry (requires CONFIG_DRM_XE_DEBUG_SRIOV)
[14:16:05] ==================== [PASSED] pf_relay =====================
[14:16:05] ================== vf_relay (3 subtests) ===================
[14:16:05] [PASSED] vf_rejects_guc2vf_too_short
[14:16:05] [PASSED] vf_rejects_guc2vf_too_long
[14:16:05] [PASSED] vf_rejects_guc2vf_no_payload
[14:16:05] ==================== [PASSED] vf_relay =====================
[14:16:05] ================ pf_gt_config (9 subtests) =================
[14:16:05] [PASSED] fair_contexts_1vf
[14:16:05] [PASSED] fair_doorbells_1vf
[14:16:05] [PASSED] fair_ggtt_1vf
[14:16:05] ====================== fair_vram_1vf ======================
[14:16:05] [PASSED] 3.50 GiB
[14:16:05] [PASSED] 11.5 GiB
[14:16:05] [PASSED] 15.5 GiB
[14:16:05] [PASSED] 31.5 GiB
[14:16:05] [PASSED] 63.5 GiB
[14:16:05] [PASSED] 1.91 GiB
[14:16:05] ================== [PASSED] fair_vram_1vf ==================
[14:16:05] ================ fair_vram_1vf_admin_only =================
[14:16:05] [PASSED] 3.50 GiB
[14:16:05] [PASSED] 11.5 GiB
[14:16:05] [PASSED] 15.5 GiB
[14:16:05] [PASSED] 31.5 GiB
[14:16:05] [PASSED] 63.5 GiB
[14:16:05] [PASSED] 1.91 GiB
[14:16:05] ============ [PASSED] fair_vram_1vf_admin_only =============
[14:16:05] ====================== fair_contexts ======================
[14:16:05] [PASSED] 1 VF
[14:16:05] [PASSED] 2 VFs
[14:16:05] [PASSED] 3 VFs
[14:16:05] [PASSED] 4 VFs
[14:16:05] [PASSED] 5 VFs
[14:16:05] [PASSED] 6 VFs
[14:16:05] [PASSED] 7 VFs
[14:16:05] [PASSED] 8 VFs
[14:16:05] [PASSED] 9 VFs
[14:16:05] [PASSED] 10 VFs
[14:16:05] [PASSED] 11 VFs
[14:16:05] [PASSED] 12 VFs
[14:16:05] [PASSED] 13 VFs
[14:16:05] [PASSED] 14 VFs
[14:16:05] [PASSED] 15 VFs
[14:16:05] [PASSED] 16 VFs
[14:16:05] [PASSED] 17 VFs
[14:16:05] [PASSED] 18 VFs
[14:16:05] [PASSED] 19 VFs
[14:16:05] [PASSED] 20 VFs
[14:16:05] [PASSED] 21 VFs
[14:16:05] [PASSED] 22 VFs
[14:16:05] [PASSED] 23 VFs
[14:16:05] [PASSED] 24 VFs
[14:16:05] [PASSED] 25 VFs
[14:16:05] [PASSED] 26 VFs
[14:16:05] [PASSED] 27 VFs
[14:16:05] [PASSED] 28 VFs
[14:16:05] [PASSED] 29 VFs
[14:16:05] [PASSED] 30 VFs
[14:16:05] [PASSED] 31 VFs
[14:16:05] [PASSED] 32 VFs
[14:16:05] [PASSED] 33 VFs
[14:16:05] [PASSED] 34 VFs
[14:16:05] [PASSED] 35 VFs
[14:16:05] [PASSED] 36 VFs
[14:16:05] [PASSED] 37 VFs
[14:16:05] [PASSED] 38 VFs
[14:16:05] [PASSED] 39 VFs
[14:16:05] [PASSED] 40 VFs
[14:16:05] [PASSED] 41 VFs
[14:16:05] [PASSED] 42 VFs
[14:16:05] [PASSED] 43 VFs
[14:16:05] [PASSED] 44 VFs
[14:16:05] [PASSED] 45 VFs
[14:16:05] [PASSED] 46 VFs
[14:16:05] [PASSED] 47 VFs
[14:16:05] [PASSED] 48 VFs
[14:16:05] [PASSED] 49 VFs
[14:16:05] [PASSED] 50 VFs
[14:16:05] [PASSED] 51 VFs
[14:16:05] [PASSED] 52 VFs
[14:16:05] [PASSED] 53 VFs
[14:16:05] [PASSED] 54 VFs
[14:16:05] [PASSED] 55 VFs
[14:16:05] [PASSED] 56 VFs
[14:16:05] [PASSED] 57 VFs
[14:16:05] [PASSED] 58 VFs
[14:16:05] [PASSED] 59 VFs
[14:16:05] [PASSED] 60 VFs
[14:16:05] [PASSED] 61 VFs
[14:16:05] [PASSED] 62 VFs
[14:16:05] [PASSED] 63 VFs
[14:16:05] ================== [PASSED] fair_contexts ==================
[14:16:05] ===================== fair_doorbells ======================
[14:16:05] [PASSED] 1 VF
[14:16:05] [PASSED] 2 VFs
[14:16:05] [PASSED] 3 VFs
[14:16:05] [PASSED] 4 VFs
[14:16:05] [PASSED] 5 VFs
[14:16:05] [PASSED] 6 VFs
[14:16:05] [PASSED] 7 VFs
[14:16:05] [PASSED] 8 VFs
[14:16:05] [PASSED] 9 VFs
[14:16:05] [PASSED] 10 VFs
[14:16:05] [PASSED] 11 VFs
[14:16:05] [PASSED] 12 VFs
[14:16:05] [PASSED] 13 VFs
[14:16:05] [PASSED] 14 VFs
[14:16:05] [PASSED] 15 VFs
[14:16:05] [PASSED] 16 VFs
[14:16:05] [PASSED] 17 VFs
[14:16:05] [PASSED] 18 VFs
[14:16:05] [PASSED] 19 VFs
[14:16:05] [PASSED] 20 VFs
[14:16:05] [PASSED] 21 VFs
[14:16:05] [PASSED] 22 VFs
[14:16:05] [PASSED] 23 VFs
[14:16:05] [PASSED] 24 VFs
[14:16:05] [PASSED] 25 VFs
[14:16:05] [PASSED] 26 VFs
[14:16:05] [PASSED] 27 VFs
[14:16:05] [PASSED] 28 VFs
[14:16:05] [PASSED] 29 VFs
[14:16:05] [PASSED] 30 VFs
[14:16:05] [PASSED] 31 VFs
[14:16:05] [PASSED] 32 VFs
[14:16:05] [PASSED] 33 VFs
[14:16:05] [PASSED] 34 VFs
[14:16:05] [PASSED] 35 VFs
[14:16:05] [PASSED] 36 VFs
[14:16:05] [PASSED] 37 VFs
[14:16:05] [PASSED] 38 VFs
[14:16:05] [PASSED] 39 VFs
[14:16:05] [PASSED] 40 VFs
[14:16:05] [PASSED] 41 VFs
[14:16:05] [PASSED] 42 VFs
[14:16:05] [PASSED] 43 VFs
[14:16:05] [PASSED] 44 VFs
[14:16:05] [PASSED] 45 VFs
[14:16:05] [PASSED] 46 VFs
[14:16:05] [PASSED] 47 VFs
[14:16:05] [PASSED] 48 VFs
[14:16:05] [PASSED] 49 VFs
[14:16:05] [PASSED] 50 VFs
[14:16:05] [PASSED] 51 VFs
[14:16:05] [PASSED] 52 VFs
[14:16:05] [PASSED] 53 VFs
[14:16:05] [PASSED] 54 VFs
[14:16:05] [PASSED] 55 VFs
[14:16:05] [PASSED] 56 VFs
[14:16:05] [PASSED] 57 VFs
[14:16:05] [PASSED] 58 VFs
[14:16:05] [PASSED] 59 VFs
[14:16:05] [PASSED] 60 VFs
[14:16:05] [PASSED] 61 VFs
[14:16:05] [PASSED] 62 VFs
[14:16:05] [PASSED] 63 VFs
[14:16:05] ================= [PASSED] fair_doorbells ==================
[14:16:05] ======================== fair_ggtt ========================
[14:16:05] [PASSED] 1 VF
[14:16:05] [PASSED] 2 VFs
[14:16:05] [PASSED] 3 VFs
[14:16:05] [PASSED] 4 VFs
[14:16:05] [PASSED] 5 VFs
[14:16:05] [PASSED] 6 VFs
[14:16:05] [PASSED] 7 VFs
[14:16:05] [PASSED] 8 VFs
[14:16:05] [PASSED] 9 VFs
[14:16:05] [PASSED] 10 VFs
[14:16:05] [PASSED] 11 VFs
[14:16:05] [PASSED] 12 VFs
[14:16:05] [PASSED] 13 VFs
[14:16:05] [PASSED] 14 VFs
[14:16:05] [PASSED] 15 VFs
[14:16:05] [PASSED] 16 VFs
[14:16:05] [PASSED] 17 VFs
[14:16:05] [PASSED] 18 VFs
[14:16:05] [PASSED] 19 VFs
[14:16:05] [PASSED] 20 VFs
[14:16:05] [PASSED] 21 VFs
[14:16:05] [PASSED] 22 VFs
[14:16:05] [PASSED] 23 VFs
[14:16:05] [PASSED] 24 VFs
[14:16:05] [PASSED] 25 VFs
[14:16:05] [PASSED] 26 VFs
[14:16:05] [PASSED] 27 VFs
[14:16:05] [PASSED] 28 VFs
[14:16:05] [PASSED] 29 VFs
[14:16:05] [PASSED] 30 VFs
[14:16:05] [PASSED] 31 VFs
[14:16:05] [PASSED] 32 VFs
[14:16:05] [PASSED] 33 VFs
[14:16:05] [PASSED] 34 VFs
[14:16:05] [PASSED] 35 VFs
[14:16:05] [PASSED] 36 VFs
[14:16:05] [PASSED] 37 VFs
[14:16:05] [PASSED] 38 VFs
[14:16:05] [PASSED] 39 VFs
[14:16:05] [PASSED] 40 VFs
[14:16:05] [PASSED] 41 VFs
[14:16:05] [PASSED] 42 VFs
[14:16:05] [PASSED] 43 VFs
[14:16:05] [PASSED] 44 VFs
[14:16:05] [PASSED] 45 VFs
[14:16:05] [PASSED] 46 VFs
[14:16:05] [PASSED] 47 VFs
[14:16:05] [PASSED] 48 VFs
[14:16:05] [PASSED] 49 VFs
[14:16:05] [PASSED] 50 VFs
[14:16:05] [PASSED] 51 VFs
[14:16:05] [PASSED] 52 VFs
[14:16:05] [PASSED] 53 VFs
[14:16:05] [PASSED] 54 VFs
[14:16:05] [PASSED] 55 VFs
[14:16:05] [PASSED] 56 VFs
[14:16:05] [PASSED] 57 VFs
[14:16:05] [PASSED] 58 VFs
[14:16:05] [PASSED] 59 VFs
[14:16:05] [PASSED] 60 VFs
[14:16:05] [PASSED] 61 VFs
[14:16:05] [PASSED] 62 VFs
[14:16:05] [PASSED] 63 VFs
[14:16:05] ==================== [PASSED] fair_ggtt ====================
[14:16:05] ======================== fair_vram ========================
[14:16:05] [PASSED] 1 VF
[14:16:05] [PASSED] 2 VFs
[14:16:05] [PASSED] 3 VFs
[14:16:05] [PASSED] 4 VFs
[14:16:05] [PASSED] 5 VFs
[14:16:05] [PASSED] 6 VFs
[14:16:05] [PASSED] 7 VFs
[14:16:05] [PASSED] 8 VFs
[14:16:05] [PASSED] 9 VFs
[14:16:05] [PASSED] 10 VFs
[14:16:05] [PASSED] 11 VFs
[14:16:05] [PASSED] 12 VFs
[14:16:05] [PASSED] 13 VFs
[14:16:05] [PASSED] 14 VFs
[14:16:05] [PASSED] 15 VFs
[14:16:05] [PASSED] 16 VFs
[14:16:05] [PASSED] 17 VFs
[14:16:05] [PASSED] 18 VFs
[14:16:05] [PASSED] 19 VFs
[14:16:05] [PASSED] 20 VFs
[14:16:05] [PASSED] 21 VFs
[14:16:05] [PASSED] 22 VFs
[14:16:05] [PASSED] 23 VFs
[14:16:05] [PASSED] 24 VFs
[14:16:05] [PASSED] 25 VFs
[14:16:05] [PASSED] 26 VFs
[14:16:05] [PASSED] 27 VFs
[14:16:05] [PASSED] 28 VFs
[14:16:05] [PASSED] 29 VFs
[14:16:05] [PASSED] 30 VFs
[14:16:05] [PASSED] 31 VFs
[14:16:05] [PASSED] 32 VFs
[14:16:05] [PASSED] 33 VFs
[14:16:05] [PASSED] 34 VFs
[14:16:05] [PASSED] 35 VFs
[14:16:05] [PASSED] 36 VFs
[14:16:05] [PASSED] 37 VFs
[14:16:05] [PASSED] 38 VFs
[14:16:05] [PASSED] 39 VFs
[14:16:05] [PASSED] 40 VFs
[14:16:05] [PASSED] 41 VFs
[14:16:05] [PASSED] 42 VFs
[14:16:05] [PASSED] 43 VFs
[14:16:05] [PASSED] 44 VFs
[14:16:05] [PASSED] 45 VFs
[14:16:05] [PASSED] 46 VFs
[14:16:05] [PASSED] 47 VFs
[14:16:05] [PASSED] 48 VFs
[14:16:05] [PASSED] 49 VFs
[14:16:05] [PASSED] 50 VFs
[14:16:05] [PASSED] 51 VFs
[14:16:05] [PASSED] 52 VFs
[14:16:05] [PASSED] 53 VFs
[14:16:05] [PASSED] 54 VFs
[14:16:05] [PASSED] 55 VFs
[14:16:05] [PASSED] 56 VFs
[14:16:05] [PASSED] 57 VFs
[14:16:05] [PASSED] 58 VFs
[14:16:05] [PASSED] 59 VFs
[14:16:05] [PASSED] 60 VFs
[14:16:05] [PASSED] 61 VFs
[14:16:05] [PASSED] 62 VFs
[14:16:05] [PASSED] 63 VFs
[14:16:05] ==================== [PASSED] fair_vram ====================
[14:16:05] ================== [PASSED] pf_gt_config ===================
[14:16:05] ===================== lmtt (1 subtest) =====================
[14:16:05] ======================== test_ops =========================
[14:16:05] [PASSED] 2-level
[14:16:05] [PASSED] multi-level
[14:16:05] ==================== [PASSED] test_ops =====================
[14:16:05] ====================== [PASSED] lmtt =======================
[14:16:05] ================= sriov_packet (1 subtest) =================
[14:16:05] [PASSED] test_descriptor_init
[14:16:05] ================== [PASSED] sriov_packet ===================
[14:16:05] ================= pf_service (11 subtests) =================
[14:16:05] [PASSED] pf_negotiate_any
[14:16:05] [PASSED] pf_negotiate_base_match
[14:16:05] [PASSED] pf_negotiate_base_newer
[14:16:05] [PASSED] pf_negotiate_base_next
[14:16:05] [SKIPPED] pf_negotiate_base_older (no older minor)
[14:16:05] [PASSED] pf_negotiate_base_prev
[14:16:05] [PASSED] pf_negotiate_latest_match
[14:16:05] [PASSED] pf_negotiate_latest_newer
[14:16:05] [PASSED] pf_negotiate_latest_next
[14:16:05] [SKIPPED] pf_negotiate_latest_older (no older minor)
[14:16:05] [SKIPPED] pf_negotiate_latest_prev (no prev major)
[14:16:05] =================== [PASSED] pf_service ====================
[14:16:05] ================= xe_guc_g2g (2 subtests) ==================
[14:16:05] ============== xe_live_guc_g2g_kunit_default ==============
[14:16:05] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[14:16:05] ============== xe_live_guc_g2g_kunit_allmem ===============
[14:16:05] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[14:16:05] =================== [SKIPPED] xe_guc_g2g ===================
[14:16:05] =================== xe_mocs (2 subtests) ===================
[14:16:05] ================ xe_live_mocs_kernel_kunit ================
[14:16:05] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[14:16:05] ================ xe_live_mocs_reset_kunit =================
[14:16:05] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[14:16:05] ==================== [SKIPPED] xe_mocs =====================
[14:16:05] ================= xe_migrate (2 subtests) ==================
[14:16:05] ================= xe_migrate_sanity_kunit =================
[14:16:05] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[14:16:05] ================== xe_validate_ccs_kunit ==================
[14:16:05] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[14:16:05] =================== [SKIPPED] xe_migrate ===================
[14:16:05] ================== xe_dma_buf (1 subtest) ==================
[14:16:05] ==================== xe_dma_buf_kunit =====================
[14:16:05] ================ [SKIPPED] xe_dma_buf_kunit ================
[14:16:05] =================== [SKIPPED] xe_dma_buf ===================
[14:16:05] ================= xe_bo_shrink (1 subtest) =================
[14:16:05] =================== xe_bo_shrink_kunit ====================
[14:16:05] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[14:16:05] ================== [SKIPPED] xe_bo_shrink ==================
[14:16:05] ==================== xe_bo (2 subtests) ====================
[14:16:05] ================== xe_ccs_migrate_kunit ===================
[14:16:05] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[14:16:05] ==================== xe_bo_evict_kunit ====================
[14:16:05] =============== [SKIPPED] xe_bo_evict_kunit ================
[14:16:05] ===================== [SKIPPED] xe_bo ======================
[14:16:05] ==================== args (13 subtests) ====================
[14:16:05] [PASSED] count_args_test
[14:16:05] [PASSED] call_args_example
[14:16:05] [PASSED] call_args_test
[14:16:05] [PASSED] drop_first_arg_example
[14:16:05] [PASSED] drop_first_arg_test
[14:16:05] [PASSED] first_arg_example
[14:16:05] [PASSED] first_arg_test
[14:16:05] [PASSED] last_arg_example
[14:16:05] [PASSED] last_arg_test
[14:16:05] [PASSED] pick_arg_example
[14:16:05] [PASSED] if_args_example
[14:16:05] [PASSED] if_args_test
[14:16:05] [PASSED] sep_comma_example
[14:16:05] ====================== [PASSED] args =======================
[14:16:05] =================== xe_pci (3 subtests) ====================
[14:16:05] ==================== check_graphics_ip ====================
[14:16:05] [PASSED] 12.00 Xe_LP
[14:16:05] [PASSED] 12.10 Xe_LP+
[14:16:05] [PASSED] 12.55 Xe_HPG
[14:16:05] [PASSED] 12.60 Xe_HPC
[14:16:05] [PASSED] 12.70 Xe_LPG
[14:16:05] [PASSED] 12.71 Xe_LPG
[14:16:05] [PASSED] 12.74 Xe_LPG+
[14:16:05] [PASSED] 20.01 Xe2_HPG
[14:16:05] [PASSED] 20.02 Xe2_HPG
[14:16:05] [PASSED] 20.04 Xe2_LPG
[14:16:05] [PASSED] 30.00 Xe3_LPG
[14:16:05] [PASSED] 30.01 Xe3_LPG
[14:16:05] [PASSED] 30.03 Xe3_LPG
[14:16:05] [PASSED] 30.04 Xe3_LPG
[14:16:05] [PASSED] 30.05 Xe3_LPG
[14:16:05] [PASSED] 35.10 Xe3p_LPG
[14:16:05] [PASSED] 35.11 Xe3p_XPC
[14:16:05] ================ [PASSED] check_graphics_ip ================
[14:16:05] ===================== check_media_ip ======================
[14:16:05] [PASSED] 12.00 Xe_M
[14:16:05] [PASSED] 12.55 Xe_HPM
[14:16:05] [PASSED] 13.00 Xe_LPM+
[14:16:05] [PASSED] 13.01 Xe2_HPM
[14:16:05] [PASSED] 20.00 Xe2_LPM
[14:16:05] [PASSED] 30.00 Xe3_LPM
[14:16:05] [PASSED] 30.02 Xe3_LPM
[14:16:05] [PASSED] 35.00 Xe3p_LPM
[14:16:05] [PASSED] 35.03 Xe3p_HPM
[14:16:05] ================= [PASSED] check_media_ip ==================
[14:16:05] =================== check_platform_desc ===================
[14:16:05] [PASSED] 0x9A60 (TIGERLAKE)
[14:16:05] [PASSED] 0x9A68 (TIGERLAKE)
[14:16:05] [PASSED] 0x9A70 (TIGERLAKE)
[14:16:05] [PASSED] 0x9A40 (TIGERLAKE)
[14:16:05] [PASSED] 0x9A49 (TIGERLAKE)
[14:16:05] [PASSED] 0x9A59 (TIGERLAKE)
[14:16:05] [PASSED] 0x9A78 (TIGERLAKE)
[14:16:05] [PASSED] 0x9AC0 (TIGERLAKE)
[14:16:05] [PASSED] 0x9AC9 (TIGERLAKE)
[14:16:05] [PASSED] 0x9AD9 (TIGERLAKE)
[14:16:05] [PASSED] 0x9AF8 (TIGERLAKE)
[14:16:05] [PASSED] 0x4C80 (ROCKETLAKE)
[14:16:05] [PASSED] 0x4C8A (ROCKETLAKE)
[14:16:05] [PASSED] 0x4C8B (ROCKETLAKE)
[14:16:05] [PASSED] 0x4C8C (ROCKETLAKE)
[14:16:05] [PASSED] 0x4C90 (ROCKETLAKE)
[14:16:05] [PASSED] 0x4C9A (ROCKETLAKE)
[14:16:05] [PASSED] 0x4680 (ALDERLAKE_S)
[14:16:05] [PASSED] 0x4682 (ALDERLAKE_S)
[14:16:05] [PASSED] 0x4688 (ALDERLAKE_S)
[14:16:05] [PASSED] 0x468A (ALDERLAKE_S)
[14:16:05] [PASSED] 0x468B (ALDERLAKE_S)
[14:16:05] [PASSED] 0x4690 (ALDERLAKE_S)
[14:16:05] [PASSED] 0x4692 (ALDERLAKE_S)
[14:16:05] [PASSED] 0x4693 (ALDERLAKE_S)
[14:16:05] [PASSED] 0x46A0 (ALDERLAKE_P)
[14:16:05] [PASSED] 0x46A1 (ALDERLAKE_P)
[14:16:05] [PASSED] 0x46A2 (ALDERLAKE_P)
[14:16:05] [PASSED] 0x46A3 (ALDERLAKE_P)
[14:16:05] [PASSED] 0x46A6 (ALDERLAKE_P)
[14:16:05] [PASSED] 0x46A8 (ALDERLAKE_P)
[14:16:05] [PASSED] 0x46AA (ALDERLAKE_P)
[14:16:05] [PASSED] 0x462A (ALDERLAKE_P)
[14:16:05] [PASSED] 0x4626 (ALDERLAKE_P)
[14:16:05] [PASSED] 0x4628 (ALDERLAKE_P)
[14:16:05] [PASSED] 0x46B0 (ALDERLAKE_P)
[14:16:05] [PASSED] 0x46B1 (ALDERLAKE_P)
[14:16:05] [PASSED] 0x46B2 (ALDERLAKE_P)
[14:16:05] [PASSED] 0x46B3 (ALDERLAKE_P)
[14:16:05] [PASSED] 0x46C0 (ALDERLAKE_P)
[14:16:05] [PASSED] 0x46C1 (ALDERLAKE_P)
[14:16:05] [PASSED] 0x46C2 (ALDERLAKE_P)
[14:16:05] [PASSED] 0x46C3 (ALDERLAKE_P)
[14:16:05] [PASSED] 0x46D0 (ALDERLAKE_N)
[14:16:05] [PASSED] 0x46D1 (ALDERLAKE_N)
[14:16:05] [PASSED] 0x46D2 (ALDERLAKE_N)
[14:16:05] [PASSED] 0x46D3 (ALDERLAKE_N)
[14:16:05] [PASSED] 0x46D4 (ALDERLAKE_N)
[14:16:05] [PASSED] 0xA721 (ALDERLAKE_P)
[14:16:05] [PASSED] 0xA7A1 (ALDERLAKE_P)
[14:16:05] [PASSED] 0xA7A9 (ALDERLAKE_P)
[14:16:05] [PASSED] 0xA7AC (ALDERLAKE_P)
[14:16:05] [PASSED] 0xA7AD (ALDERLAKE_P)
[14:16:05] [PASSED] 0xA720 (ALDERLAKE_P)
[14:16:05] [PASSED] 0xA7A0 (ALDERLAKE_P)
[14:16:05] [PASSED] 0xA7A8 (ALDERLAKE_P)
[14:16:05] [PASSED] 0xA7AA (ALDERLAKE_P)
[14:16:05] [PASSED] 0xA7AB (ALDERLAKE_P)
[14:16:05] [PASSED] 0xA780 (ALDERLAKE_S)
[14:16:05] [PASSED] 0xA781 (ALDERLAKE_S)
[14:16:05] [PASSED] 0xA782 (ALDERLAKE_S)
[14:16:05] [PASSED] 0xA783 (ALDERLAKE_S)
[14:16:05] [PASSED] 0xA788 (ALDERLAKE_S)
[14:16:05] [PASSED] 0xA789 (ALDERLAKE_S)
[14:16:05] [PASSED] 0xA78A (ALDERLAKE_S)
[14:16:05] [PASSED] 0xA78B (ALDERLAKE_S)
[14:16:05] [PASSED] 0x4905 (DG1)
[14:16:05] [PASSED] 0x4906 (DG1)
[14:16:05] [PASSED] 0x4907 (DG1)
[14:16:05] [PASSED] 0x4908 (DG1)
[14:16:05] [PASSED] 0x4909 (DG1)
[14:16:05] [PASSED] 0x56C0 (DG2)
[14:16:05] [PASSED] 0x56C2 (DG2)
[14:16:05] [PASSED] 0x56C1 (DG2)
[14:16:05] [PASSED] 0x7D51 (METEORLAKE)
[14:16:05] [PASSED] 0x7DD1 (METEORLAKE)
[14:16:05] [PASSED] 0x7D41 (METEORLAKE)
[14:16:05] [PASSED] 0x7D67 (METEORLAKE)
[14:16:05] [PASSED] 0xB640 (METEORLAKE)
[14:16:05] [PASSED] 0x56A0 (DG2)
[14:16:05] [PASSED] 0x56A1 (DG2)
[14:16:05] [PASSED] 0x56A2 (DG2)
[14:16:05] [PASSED] 0x56BE (DG2)
[14:16:05] [PASSED] 0x56BF (DG2)
[14:16:05] [PASSED] 0x5690 (DG2)
[14:16:05] [PASSED] 0x5691 (DG2)
[14:16:05] [PASSED] 0x5692 (DG2)
[14:16:05] [PASSED] 0x56A5 (DG2)
[14:16:05] [PASSED] 0x56A6 (DG2)
[14:16:05] [PASSED] 0x56B0 (DG2)
[14:16:05] [PASSED] 0x56B1 (DG2)
[14:16:05] [PASSED] 0x56BA (DG2)
[14:16:05] [PASSED] 0x56BB (DG2)
[14:16:05] [PASSED] 0x56BC (DG2)
[14:16:05] [PASSED] 0x56BD (DG2)
[14:16:05] [PASSED] 0x5693 (DG2)
[14:16:05] [PASSED] 0x5694 (DG2)
[14:16:05] [PASSED] 0x5695 (DG2)
[14:16:05] [PASSED] 0x56A3 (DG2)
[14:16:05] [PASSED] 0x56A4 (DG2)
[14:16:05] [PASSED] 0x56B2 (DG2)
[14:16:05] [PASSED] 0x56B3 (DG2)
[14:16:05] [PASSED] 0x5696 (DG2)
[14:16:05] [PASSED] 0x5697 (DG2)
[14:16:05] [PASSED] 0xB69 (PVC)
[14:16:05] [PASSED] 0xB6E (PVC)
[14:16:05] [PASSED] 0xBD4 (PVC)
[14:16:05] [PASSED] 0xBD5 (PVC)
[14:16:05] [PASSED] 0xBD6 (PVC)
[14:16:05] [PASSED] 0xBD7 (PVC)
[14:16:05] [PASSED] 0xBD8 (PVC)
[14:16:05] [PASSED] 0xBD9 (PVC)
[14:16:05] [PASSED] 0xBDA (PVC)
[14:16:05] [PASSED] 0xBDB (PVC)
[14:16:05] [PASSED] 0xBE0 (PVC)
[14:16:05] [PASSED] 0xBE1 (PVC)
[14:16:05] [PASSED] 0xBE5 (PVC)
[14:16:05] [PASSED] 0x7D40 (METEORLAKE)
[14:16:05] [PASSED] 0x7D45 (METEORLAKE)
[14:16:05] [PASSED] 0x7D55 (METEORLAKE)
[14:16:05] [PASSED] 0x7D60 (METEORLAKE)
[14:16:05] [PASSED] 0x7DD5 (METEORLAKE)
[14:16:05] [PASSED] 0x6420 (LUNARLAKE)
[14:16:05] [PASSED] 0x64A0 (LUNARLAKE)
[14:16:05] [PASSED] 0x64B0 (LUNARLAKE)
[14:16:05] [PASSED] 0xE202 (BATTLEMAGE)
[14:16:05] [PASSED] 0xE209 (BATTLEMAGE)
[14:16:05] [PASSED] 0xE20B (BATTLEMAGE)
[14:16:05] [PASSED] 0xE20C (BATTLEMAGE)
[14:16:05] [PASSED] 0xE20D (BATTLEMAGE)
[14:16:05] [PASSED] 0xE210 (BATTLEMAGE)
[14:16:05] [PASSED] 0xE211 (BATTLEMAGE)
[14:16:05] [PASSED] 0xE212 (BATTLEMAGE)
[14:16:05] [PASSED] 0xE216 (BATTLEMAGE)
[14:16:05] [PASSED] 0xE220 (BATTLEMAGE)
[14:16:05] [PASSED] 0xE221 (BATTLEMAGE)
[14:16:05] [PASSED] 0xE222 (BATTLEMAGE)
[14:16:05] [PASSED] 0xE223 (BATTLEMAGE)
[14:16:05] [PASSED] 0xB080 (PANTHERLAKE)
[14:16:05] [PASSED] 0xB081 (PANTHERLAKE)
[14:16:05] [PASSED] 0xB082 (PANTHERLAKE)
[14:16:05] [PASSED] 0xB083 (PANTHERLAKE)
[14:16:05] [PASSED] 0xB084 (PANTHERLAKE)
[14:16:05] [PASSED] 0xB085 (PANTHERLAKE)
[14:16:05] [PASSED] 0xB086 (PANTHERLAKE)
[14:16:05] [PASSED] 0xB087 (PANTHERLAKE)
[14:16:05] [PASSED] 0xB08F (PANTHERLAKE)
[14:16:05] [PASSED] 0xB090 (PANTHERLAKE)
[14:16:05] [PASSED] 0xB0A0 (PANTHERLAKE)
[14:16:05] [PASSED] 0xB0B0 (PANTHERLAKE)
[14:16:05] [PASSED] 0xFD80 (PANTHERLAKE)
[14:16:05] [PASSED] 0xFD81 (PANTHERLAKE)
[14:16:05] [PASSED] 0xD740 (NOVALAKE_S)
[14:16:05] [PASSED] 0xD741 (NOVALAKE_S)
[14:16:05] [PASSED] 0xD742 (NOVALAKE_S)
[14:16:05] [PASSED] 0xD743 (NOVALAKE_S)
[14:16:05] [PASSED] 0xD745 (NOVALAKE_S)
[14:16:05] [PASSED] 0xD74A (NOVALAKE_S)
[14:16:05] [PASSED] 0xD74B (NOVALAKE_S)
[14:16:05] [PASSED] 0x674C (CRESCENTISLAND)
[14:16:05] [PASSED] 0x674D (CRESCENTISLAND)
[14:16:05] [PASSED] 0x674E (CRESCENTISLAND)
[14:16:05] [PASSED] 0x674F (CRESCENTISLAND)
[14:16:05] [PASSED] 0x6750 (CRESCENTISLAND)
[14:16:05] [PASSED] 0xD750 (NOVALAKE_P)
[14:16:05] [PASSED] 0xD751 (NOVALAKE_P)
[14:16:05] [PASSED] 0xD752 (NOVALAKE_P)
[14:16:05] [PASSED] 0xD753 (NOVALAKE_P)
[14:16:05] [PASSED] 0xD754 (NOVALAKE_P)
[14:16:05] [PASSED] 0xD755 (NOVALAKE_P)
[14:16:05] [PASSED] 0xD756 (NOVALAKE_P)
[14:16:05] [PASSED] 0xD757 (NOVALAKE_P)
[14:16:05] [PASSED] 0xD75F (NOVALAKE_P)
[14:16:05] =============== [PASSED] check_platform_desc ===============
[14:16:05] ===================== [PASSED] xe_pci ======================
[14:16:05] ============= xe_rtp_tables_test (5 subtests) ==============
[14:16:05] ================== xe_rtp_table_gt_test ===================
[14:16:05] [PASSED] gt_was/14011060649
[14:16:05] [PASSED] gt_was/14011059788
[14:16:05] [PASSED] gt_was/14015795083
[14:16:05] [PASSED] gt_was/16021867713
[14:16:05] [PASSED] gt_was/14019449301
[14:16:05] [PASSED] gt_was/16028005424
[14:16:05] [PASSED] gt_was/14026578760
[14:16:05] [PASSED] gt_was/1409420604
[14:16:05] [PASSED] gt_was/1408615072
[14:16:05] [PASSED] gt_was/22010523718
[14:16:05] [PASSED] gt_was/14011006942
[14:16:05] [PASSED] gt_was/14014830051
[14:16:05] [PASSED] gt_was/18018781329
[14:16:05] [PASSED] gt_was/1509235366
[14:16:05] [PASSED] gt_was/18018781329
[14:16:05] [PASSED] gt_was/16016694945
[14:16:05] [PASSED] gt_was/14018575942
[14:16:05] [PASSED] gt_was/22016670082
[14:16:05] [PASSED] gt_was/22016670082
[14:16:05] [PASSED] gt_was/14017421178
[14:16:05] [PASSED] gt_was/16025250150
[14:16:05] [PASSED] gt_was/14021871409
[14:16:05] [PASSED] gt_was/16021865536
[14:16:05] [PASSED] gt_was/14021486841
[14:16:05] [PASSED] gt_was/14025160223
[14:16:05] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[14:16:05] [PASSED] gt_was/14025635424
[14:16:05] [PASSED] gt_was/16028005424
[14:16:05] ============== [PASSED] xe_rtp_table_gt_test ===============
[14:16:05] ================== xe_rtp_table_gt_test ===================
[14:16:05] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[14:16:05] [PASSED] gt_tunings/Tuning: 32B Access Enable
[14:16:05] [PASSED] gt_tunings/Tuning: L3 cache
[14:16:05] [PASSED] gt_tunings/Tuning: L3 cache - media
[14:16:05] [PASSED] gt_tunings/Tuning: Compression Overfetch
[14:16:05] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[14:16:05] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[14:16:05] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[14:16:05] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[14:16:05] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[14:16:05] [PASSED] gt_tunings/Tuning: Stateless compression control
[14:16:05] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[14:16:05] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[14:16:05] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[14:16:05] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[14:16:05] ============== [PASSED] xe_rtp_table_gt_test ===============
[14:16:05] ================== xe_rtp_table_oob_test ==================
[14:16:05] [PASSED] oob_was/1607983814
[14:16:05] [PASSED] oob_was/16010904313
[14:16:05] [PASSED] oob_was/18022495364
[14:16:05] [PASSED] oob_was/22012773006
[14:16:05] [PASSED] oob_was/14014475959
[14:16:05] [PASSED] oob_was/22011391025
[14:16:05] [PASSED] oob_was/22012727170
[14:16:05] [PASSED] oob_was/22012727685
[14:16:05] [PASSED] oob_was/22016596838
[14:16:05] [PASSED] oob_was/18020744125
[14:16:05] [PASSED] oob_was/1409600907
[14:16:05] [PASSED] oob_was/22014953428
[14:16:05] [PASSED] oob_was/16017236439
[14:16:05] [PASSED] oob_was/14019821291
[14:16:05] [PASSED] oob_was/14015076503
[14:16:05] [PASSED] oob_was/14018913170
[14:16:05] [PASSED] oob_was/14018094691
[14:16:05] [PASSED] oob_was/18024947630
[14:16:05] [PASSED] oob_was/16022287689
[14:16:05] [PASSED] oob_was/13011645652
[14:16:05] [PASSED] oob_was/14022293748
[14:16:05] [PASSED] oob_was/22019794406
[14:16:05] [PASSED] oob_was/22019338487
[14:16:05] [PASSED] oob_was/16023588340
[14:16:05] [PASSED] oob_was/14019789679
[14:16:05] [PASSED] oob_was/14022866841
[14:16:05] [PASSED] oob_was/16021333562
[14:16:05] [PASSED] oob_was/14016712196
[14:16:05] [PASSED] oob_was/14015568240
[14:16:05] [PASSED] oob_was/18013179988
[14:16:05] [PASSED] oob_was/1508761755
[14:16:05] [PASSED] oob_was/16023105232
[14:16:05] [PASSED] oob_was/16026508708
[14:16:05] [PASSED] oob_was/14020001231
[14:16:05] [PASSED] oob_was/16023683509
[14:16:05] [PASSED] oob_was/14025515070
[14:16:05] [PASSED] oob_was/15015404425_disable
[14:16:05] [PASSED] oob_was/16026007364
[14:16:05] [PASSED] oob_was/14020316580
[14:16:05] [PASSED] oob_was/14025883347
[14:16:05] [PASSED] oob_was/16029380221
[14:16:05] [PASSED] oob_was/22022079272
[14:16:05] [PASSED] oob_was/16029897822
[14:16:05] ============== [PASSED] xe_rtp_table_oob_test ==============
[14:16:05] ================ xe_rtp_table_dev_oob_test ================
[14:16:05] [PASSED] device_oob_was/22010954014
[14:16:05] [PASSED] device_oob_was/15015404425
[14:16:05] [PASSED] device_oob_was/22019338487_display
[14:16:05] [PASSED] device_oob_was/14022085890
[14:16:05] [PASSED] device_oob_was/14026539277
[14:16:05] [PASSED] device_oob_was/14026633728
[14:16:05] [PASSED] device_oob_was/14026746987
[14:16:05] [PASSED] device_oob_was/14026779378
[14:16:05] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[14:16:05] ========== xe_rtp_table_missing_upper_bound_test ==========
[14:16:05] [PASSED] register_whitelist/WaAllowPMDepthAndInvocationCountAccessFromUMD, 1408556865
[14:16:05] [PASSED] register_whitelist/1508744258, 14012131227, 1808121037
[14:16:05] [PASSED] register_whitelist/1806527549
[14:16:05] [PASSED] register_whitelist/allow_read_ctx_timestamp
[14:16:05] [PASSED] register_whitelist/allow_read_queue_timestamp
[14:16:05] [PASSED] register_whitelist/16014440446
[14:16:05] [PASSED] register_whitelist/16017236439
[14:16:05] [PASSED] register_whitelist/16020183090
[14:16:05] [PASSED] register_whitelist/14024997852
[14:16:05] [PASSED] register_whitelist/14024997852
[14:16:05] ====== [PASSED] xe_rtp_table_missing_upper_bound_test ======
[14:16:05] =============== [PASSED] xe_rtp_tables_test ================
[14:16:05] =================== xe_rtp (3 subtests) ====================
[14:16:05] =================== xe_rtp_rules_tests ====================
[14:16:05] [PASSED] no
[14:16:05] [PASSED] yes
[14:16:05] [PASSED] no-and-no
[14:16:05] [PASSED] no-and-yes
[14:16:05] [PASSED] yes-and-no
[14:16:05] [PASSED] yes-and-yes
[14:16:05] [PASSED] no-or-no
[14:16:05] [PASSED] no-or-yes
[14:16:05] [PASSED] yes-or-no
[14:16:05] [PASSED] yes-or-yes
[14:16:05] [PASSED] no-yes-or-yes-no
[14:16:05] [PASSED] no-yes-or-yes-yes
[14:16:05] [PASSED] yes-yes-or-no-yes
[14:16:05] [PASSED] yes-yes-or-yes-yes
[14:16:05] [PASSED] no-no-or-yes-or-no
[14:16:05] [PASSED] or
[14:16:05] [PASSED] or-yes
[14:16:05] [PASSED] or-no
[14:16:05] [PASSED] yes-or
[14:16:05] [PASSED] no-or
[14:16:05] [PASSED] no-or-or-yes
[14:16:05] [PASSED] yes-or-or-no
[14:16:05] [PASSED] no-or-or-no
[14:16:05] [PASSED] missing-context-engine-class
[14:16:05] [PASSED] missing-context-engine-class-or-yes
[14:16:05] [PASSED] missing-context-engine-class-or-or-yes
[14:16:05] =============== [PASSED] xe_rtp_rules_tests ================
[14:16:05] =============== xe_rtp_process_to_sr_tests ================
[14:16:05] [PASSED] coalesce-same-reg
[14:16:05] [PASSED] coalesce-same-reg-literal-and-func
[14:16:05] [PASSED] no-match-no-add
[14:16:05] [PASSED] two-regs-two-entries
[14:16:05] [PASSED] clr-one-set-other
[14:16:05] [PASSED] set-field
[14:16:05] [PASSED] conflict-duplicate
[14:16:05] [PASSED] conflict-not-disjoint
[14:16:05] [PASSED] conflict-not-disjoint-literal-and-func
[14:16:05] [PASSED] conflict-reg-type
[14:16:05] [PASSED] bad-mcr-reg-forced-to-regular
[14:16:05] [PASSED] bad-regular-reg-forced-to-mcr
[14:16:05] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[14:16:05] ================== xe_rtp_process_tests ===================
[14:16:05] [PASSED] active1
[14:16:05] [PASSED] active2
[14:16:05] [PASSED] active-inactive
[14:16:05] [PASSED] inactive-active
[14:16:05] [PASSED] inactive-active-inactive
[14:16:05] [PASSED] inactive-inactive-inactive
[14:16:05] ============== [PASSED] xe_rtp_process_tests ===============
[14:16:05] ===================== [PASSED] xe_rtp ======================
[14:16:05] ==================== xe_wa (1 subtest) =====================
[14:16:05] ======================== xe_wa_gt =========================
[14:16:05] [PASSED] TIGERLAKE B0
[14:16:05] [PASSED] DG1 A0
[14:16:05] [PASSED] DG1 B0
[14:16:05] [PASSED] ALDERLAKE_S A0
[14:16:05] [PASSED] ALDERLAKE_S B0
[14:16:05] [PASSED] ALDERLAKE_S C0
[14:16:05] [PASSED] ALDERLAKE_S D0
[14:16:05] [PASSED] ALDERLAKE_P A0
[14:16:05] [PASSED] ALDERLAKE_P B0
[14:16:05] [PASSED] ALDERLAKE_P C0
[14:16:05] [PASSED] ALDERLAKE_S RPLS D0
[14:16:05] [PASSED] ALDERLAKE_P RPLU E0
[14:16:05] [PASSED] DG2 G10 C0
[14:16:05] [PASSED] DG2 G11 B1
[14:16:05] [PASSED] DG2 G12 A1
[14:16:05] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[14:16:05] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[14:16:05] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[14:16:05] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[14:16:05] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[14:16:05] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[14:16:05] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[14:16:05] ==================== [PASSED] xe_wa_gt =====================
[14:16:05] ====================== [PASSED] xe_wa ======================
[14:16:05] ============================================================
[14:16:05] Testing complete. Ran 741 tests: passed: 723, skipped: 18
[14:16:05] Elapsed time: 37.069s total, 4.419s configuring, 31.982s building, 0.647s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[14:16:05] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[14:16:07] 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
[14:16:32] Starting KUnit Kernel (1/1)...
[14:16:32] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[14:16:32] ============ drm_test_pick_cmdline (2 subtests) ============
[14:16:32] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[14:16:32] =============== drm_test_pick_cmdline_named ===============
[14:16:32] [PASSED] NTSC
[14:16:32] [PASSED] NTSC-J
[14:16:32] [PASSED] PAL
[14:16:32] [PASSED] PAL-M
[14:16:32] =========== [PASSED] drm_test_pick_cmdline_named ===========
[14:16:32] ============== [PASSED] drm_test_pick_cmdline ==============
[14:16:32] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[14:16:32] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[14:16:32] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[14:16:32] =========== drm_validate_clone_mode (2 subtests) ===========
[14:16:32] ============== drm_test_check_in_clone_mode ===============
[14:16:32] [PASSED] in_clone_mode
[14:16:32] [PASSED] not_in_clone_mode
[14:16:32] ========== [PASSED] drm_test_check_in_clone_mode ===========
[14:16:32] =============== drm_test_check_valid_clones ===============
[14:16:32] [PASSED] not_in_clone_mode
[14:16:32] [PASSED] valid_clone
[14:16:32] [PASSED] invalid_clone
[14:16:32] =========== [PASSED] drm_test_check_valid_clones ===========
[14:16:32] ============= [PASSED] drm_validate_clone_mode =============
[14:16:32] ============= drm_validate_modeset (1 subtest) =============
[14:16:32] [PASSED] drm_test_check_connector_changed_modeset
[14:16:32] ============== [PASSED] drm_validate_modeset ===============
[14:16:32] ====== drm_test_bridge_get_current_state (2 subtests) ======
[14:16:32] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[14:16:32] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[14:16:32] ======== [PASSED] drm_test_bridge_get_current_state ========
[14:16:32] ====== drm_test_bridge_helper_reset_crtc (4 subtests) ======
[14:16:32] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[14:16:32] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[14:16:32] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[14:16:32] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[14:16:32] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[14:16:32] ============== drm_bridge_alloc (2 subtests) ===============
[14:16:32] [PASSED] drm_test_drm_bridge_alloc_basic
[14:16:32] [PASSED] drm_test_drm_bridge_alloc_get_put
[14:16:32] ================ [PASSED] drm_bridge_alloc =================
[14:16:32] ============= drm_bridge_bus_fmt (5 subtests) ==============
[14:16:32] [PASSED] drm_test_bridge_rgb_yuv_rgb
[14:16:32] [PASSED] drm_test_bridge_must_convert_to_yuv444
[14:16:32] [PASSED] drm_test_bridge_hdmi_auto_rgb
[14:16:32] [PASSED] drm_test_bridge_auto_first
[14:16:32] [PASSED] drm_test_bridge_rgb_yuv_no_path
[14:16:32] =============== [PASSED] drm_bridge_bus_fmt ================
[14:16:32] ============= drm_cmdline_parser (40 subtests) =============
[14:16:32] [PASSED] drm_test_cmdline_force_d_only
[14:16:32] [PASSED] drm_test_cmdline_force_D_only_dvi
[14:16:32] [PASSED] drm_test_cmdline_force_D_only_hdmi
[14:16:32] [PASSED] drm_test_cmdline_force_D_only_not_digital
[14:16:32] [PASSED] drm_test_cmdline_force_e_only
[14:16:32] [PASSED] drm_test_cmdline_res
[14:16:32] [PASSED] drm_test_cmdline_res_vesa
[14:16:32] [PASSED] drm_test_cmdline_res_vesa_rblank
[14:16:32] [PASSED] drm_test_cmdline_res_rblank
[14:16:32] [PASSED] drm_test_cmdline_res_bpp
[14:16:32] [PASSED] drm_test_cmdline_res_refresh
[14:16:32] [PASSED] drm_test_cmdline_res_bpp_refresh
[14:16:32] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[14:16:32] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[14:16:32] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[14:16:32] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[14:16:32] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[14:16:32] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[14:16:32] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[14:16:32] [PASSED] drm_test_cmdline_res_margins_force_on
[14:16:32] [PASSED] drm_test_cmdline_res_vesa_margins
[14:16:32] [PASSED] drm_test_cmdline_name
[14:16:32] [PASSED] drm_test_cmdline_name_bpp
[14:16:32] [PASSED] drm_test_cmdline_name_option
[14:16:32] [PASSED] drm_test_cmdline_name_bpp_option
[14:16:32] [PASSED] drm_test_cmdline_rotate_0
[14:16:32] [PASSED] drm_test_cmdline_rotate_90
[14:16:32] [PASSED] drm_test_cmdline_rotate_180
[14:16:32] [PASSED] drm_test_cmdline_rotate_270
[14:16:32] [PASSED] drm_test_cmdline_hmirror
[14:16:32] [PASSED] drm_test_cmdline_vmirror
[14:16:32] [PASSED] drm_test_cmdline_margin_options
[14:16:32] [PASSED] drm_test_cmdline_multiple_options
[14:16:32] [PASSED] drm_test_cmdline_bpp_extra_and_option
[14:16:32] [PASSED] drm_test_cmdline_extra_and_option
[14:16:32] [PASSED] drm_test_cmdline_freestanding_options
[14:16:32] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[14:16:32] [PASSED] drm_test_cmdline_panel_orientation
[14:16:32] ================ drm_test_cmdline_invalid =================
[14:16:32] [PASSED] margin_only
[14:16:32] [PASSED] interlace_only
[14:16:32] [PASSED] res_missing_x
[14:16:32] [PASSED] res_missing_y
[14:16:32] [PASSED] res_bad_y
[14:16:32] [PASSED] res_missing_y_bpp
[14:16:32] [PASSED] res_bad_bpp
[14:16:32] [PASSED] res_bad_refresh
[14:16:32] [PASSED] res_bpp_refresh_force_on_off
[14:16:32] [PASSED] res_invalid_mode
[14:16:32] [PASSED] res_bpp_wrong_place_mode
[14:16:32] [PASSED] name_bpp_refresh
[14:16:32] [PASSED] name_refresh
[14:16:32] [PASSED] name_refresh_wrong_mode
[14:16:32] [PASSED] name_refresh_invalid_mode
[14:16:32] [PASSED] rotate_multiple
[14:16:32] [PASSED] rotate_invalid_val
[14:16:32] [PASSED] rotate_truncated
[14:16:32] [PASSED] invalid_option
[14:16:32] [PASSED] invalid_tv_option
[14:16:32] [PASSED] truncated_tv_option
[14:16:32] ============ [PASSED] drm_test_cmdline_invalid =============
[14:16:32] =============== drm_test_cmdline_tv_options ===============
[14:16:32] [PASSED] NTSC
[14:16:32] [PASSED] NTSC_443
[14:16:32] [PASSED] NTSC_J
[14:16:32] [PASSED] PAL
[14:16:32] [PASSED] PAL_M
[14:16:32] [PASSED] PAL_N
[14:16:32] [PASSED] SECAM
[14:16:32] [PASSED] MONO_525
[14:16:32] [PASSED] MONO_625
[14:16:32] =========== [PASSED] drm_test_cmdline_tv_options ===========
[14:16:32] =============== [PASSED] drm_cmdline_parser ================
[14:16:32] ========== drmm_connector_hdmi_init (20 subtests) ==========
[14:16:32] [PASSED] drm_test_connector_hdmi_init_valid
[14:16:32] [PASSED] drm_test_connector_hdmi_init_bpc_8
[14:16:32] [PASSED] drm_test_connector_hdmi_init_bpc_10
[14:16:32] [PASSED] drm_test_connector_hdmi_init_bpc_12
[14:16:32] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[14:16:32] [PASSED] drm_test_connector_hdmi_init_bpc_null
[14:16:32] [PASSED] drm_test_connector_hdmi_init_formats_empty
[14:16:32] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[14:16:32] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[14:16:32] [PASSED] supported_formats=0x9 yuv420_allowed=1
[14:16:32] [PASSED] supported_formats=0x9 yuv420_allowed=0
[14:16:32] [PASSED] supported_formats=0x5 yuv420_allowed=1
[14:16:32] [PASSED] supported_formats=0x5 yuv420_allowed=0
[14:16:32] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[14:16:32] [PASSED] drm_test_connector_hdmi_init_null_ddc
[14:16:32] [PASSED] drm_test_connector_hdmi_init_null_product
[14:16:32] [PASSED] drm_test_connector_hdmi_init_null_vendor
[14:16:32] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[14:16:32] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[14:16:32] [PASSED] drm_test_connector_hdmi_init_product_valid
[14:16:32] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[14:16:32] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[14:16:32] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[14:16:32] ========= drm_test_connector_hdmi_init_type_valid =========
[14:16:32] [PASSED] HDMI-A
[14:16:32] [PASSED] HDMI-B
[14:16:32] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[14:16:32] ======== drm_test_connector_hdmi_init_type_invalid ========
[14:16:32] [PASSED] Unknown
[14:16:32] [PASSED] VGA
[14:16:32] [PASSED] DVI-I
[14:16:32] [PASSED] DVI-D
[14:16:32] [PASSED] DVI-A
[14:16:32] [PASSED] Composite
[14:16:32] [PASSED] SVIDEO
[14:16:32] [PASSED] LVDS
[14:16:32] [PASSED] Component
[14:16:32] [PASSED] DIN
[14:16:32] [PASSED] DP
[14:16:32] [PASSED] TV
[14:16:32] [PASSED] eDP
[14:16:32] [PASSED] Virtual
[14:16:32] [PASSED] DSI
[14:16:32] [PASSED] DPI
[14:16:32] [PASSED] Writeback
[14:16:32] [PASSED] SPI
[14:16:32] [PASSED] USB
[14:16:32] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[14:16:32] ============ [PASSED] drmm_connector_hdmi_init =============
[14:16:32] ============= drmm_connector_init (3 subtests) =============
[14:16:32] [PASSED] drm_test_drmm_connector_init
[14:16:32] [PASSED] drm_test_drmm_connector_init_null_ddc
[14:16:32] ========= drm_test_drmm_connector_init_type_valid =========
[14:16:32] [PASSED] Unknown
[14:16:32] [PASSED] VGA
[14:16:32] [PASSED] DVI-I
[14:16:32] [PASSED] DVI-D
[14:16:32] [PASSED] DVI-A
[14:16:32] [PASSED] Composite
[14:16:32] [PASSED] SVIDEO
[14:16:32] [PASSED] LVDS
[14:16:32] [PASSED] Component
[14:16:32] [PASSED] DIN
[14:16:32] [PASSED] DP
[14:16:32] [PASSED] HDMI-A
[14:16:32] [PASSED] HDMI-B
[14:16:32] [PASSED] TV
[14:16:32] [PASSED] eDP
[14:16:32] [PASSED] Virtual
[14:16:32] [PASSED] DSI
[14:16:32] [PASSED] DPI
[14:16:32] [PASSED] Writeback
[14:16:32] [PASSED] SPI
[14:16:32] [PASSED] USB
[14:16:32] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[14:16:32] =============== [PASSED] drmm_connector_init ===============
[14:16:32] ========= drm_connector_dynamic_init (6 subtests) ==========
[14:16:32] [PASSED] drm_test_drm_connector_dynamic_init
[14:16:32] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[14:16:32] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[14:16:32] [PASSED] drm_test_drm_connector_dynamic_init_properties
[14:16:32] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[14:16:32] [PASSED] Unknown
[14:16:32] [PASSED] VGA
[14:16:32] [PASSED] DVI-I
[14:16:32] [PASSED] DVI-D
[14:16:32] [PASSED] DVI-A
[14:16:32] [PASSED] Composite
[14:16:32] [PASSED] SVIDEO
[14:16:32] [PASSED] LVDS
[14:16:32] [PASSED] Component
[14:16:32] [PASSED] DIN
[14:16:32] [PASSED] DP
[14:16:32] [PASSED] HDMI-A
[14:16:32] [PASSED] HDMI-B
[14:16:32] [PASSED] TV
[14:16:32] [PASSED] eDP
[14:16:32] [PASSED] Virtual
[14:16:32] [PASSED] DSI
[14:16:32] [PASSED] DPI
[14:16:32] [PASSED] Writeback
[14:16:32] [PASSED] SPI
[14:16:32] [PASSED] USB
[14:16:32] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[14:16:32] ======== drm_test_drm_connector_dynamic_init_name =========
[14:16:32] [PASSED] Unknown
[14:16:32] [PASSED] VGA
[14:16:32] [PASSED] DVI-I
[14:16:32] [PASSED] DVI-D
[14:16:32] [PASSED] DVI-A
[14:16:32] [PASSED] Composite
[14:16:32] [PASSED] SVIDEO
[14:16:32] [PASSED] LVDS
[14:16:32] [PASSED] Component
[14:16:32] [PASSED] DIN
[14:16:32] [PASSED] DP
[14:16:32] [PASSED] HDMI-A
[14:16:32] [PASSED] HDMI-B
[14:16:32] [PASSED] TV
[14:16:32] [PASSED] eDP
[14:16:32] [PASSED] Virtual
[14:16:32] [PASSED] DSI
[14:16:32] [PASSED] DPI
[14:16:32] [PASSED] Writeback
[14:16:32] [PASSED] SPI
[14:16:32] [PASSED] USB
[14:16:32] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[14:16:32] =========== [PASSED] drm_connector_dynamic_init ============
[14:16:32] ==== drm_connector_dynamic_register_early (4 subtests) =====
[14:16:32] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[14:16:32] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[14:16:32] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[14:16:32] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[14:16:32] ====== [PASSED] drm_connector_dynamic_register_early =======
[14:16:32] ======= drm_connector_dynamic_register (7 subtests) ========
[14:16:32] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[14:16:32] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[14:16:32] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[14:16:32] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[14:16:32] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[14:16:32] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[14:16:32] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[14:16:32] ========= [PASSED] drm_connector_dynamic_register ==========
[14:16:32] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[14:16:32] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[14:16:32] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[14:16:32] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[14:16:32] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[14:16:32] ========== drm_test_get_tv_mode_from_name_valid ===========
[14:16:32] [PASSED] NTSC
[14:16:32] [PASSED] NTSC-443
[14:16:32] [PASSED] NTSC-J
[14:16:32] [PASSED] PAL
[14:16:32] [PASSED] PAL-M
[14:16:32] [PASSED] PAL-N
[14:16:32] [PASSED] SECAM
[14:16:32] [PASSED] Mono
[14:16:32] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[14:16:32] [PASSED] drm_test_get_tv_mode_from_name_truncated
[14:16:32] ============ [PASSED] drm_get_tv_mode_from_name ============
[14:16:32] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[14:16:32] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[14:16:32] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[14:16:32] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[14:16:32] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[14:16:32] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[14:16:32] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[14:16:32] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[14:16:32] [PASSED] VIC 96
[14:16:32] [PASSED] VIC 97
[14:16:32] [PASSED] VIC 101
[14:16:32] [PASSED] VIC 102
[14:16:32] [PASSED] VIC 106
[14:16:32] [PASSED] VIC 107
[14:16:32] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[14:16:32] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[14:16:32] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[14:16:32] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[14:16:32] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[14:16:32] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[14:16:32] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[14:16:32] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[14:16:32] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[14:16:32] [PASSED] Automatic
[14:16:32] [PASSED] Full
[14:16:32] [PASSED] Limited 16:235
[14:16:32] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[14:16:32] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[14:16:32] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[14:16:32] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[14:16:32] === drm_test_drm_hdmi_connector_get_output_format_name ====
[14:16:32] [PASSED] RGB
[14:16:32] [PASSED] YUV 4:2:0
[14:16:32] [PASSED] YUV 4:2:2
[14:16:32] [PASSED] YUV 4:4:4
[14:16:32] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[14:16:32] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[14:16:32] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[14:16:32] ============= drm_damage_helper (21 subtests) ==============
[14:16:32] [PASSED] drm_test_damage_iter_no_damage
[14:16:32] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[14:16:32] [PASSED] drm_test_damage_iter_no_damage_src_moved
[14:16:32] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[14:16:32] [PASSED] drm_test_damage_iter_no_damage_not_visible
[14:16:32] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[14:16:32] [PASSED] drm_test_damage_iter_no_damage_no_fb
[14:16:32] [PASSED] drm_test_damage_iter_simple_damage
[14:16:32] [PASSED] drm_test_damage_iter_single_damage
[14:16:32] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[14:16:32] [PASSED] drm_test_damage_iter_single_damage_outside_src
[14:16:32] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[14:16:32] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[14:16:32] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[14:16:32] [PASSED] drm_test_damage_iter_single_damage_src_moved
[14:16:32] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[14:16:32] [PASSED] drm_test_damage_iter_damage
[14:16:32] [PASSED] drm_test_damage_iter_damage_one_intersect
[14:16:32] [PASSED] drm_test_damage_iter_damage_one_outside
[14:16:32] [PASSED] drm_test_damage_iter_damage_src_moved
[14:16:32] [PASSED] drm_test_damage_iter_damage_not_visible
[14:16:32] ================ [PASSED] drm_damage_helper ================
[14:16:32] ============== drm_dp_mst_helper (3 subtests) ==============
[14:16:32] ============== drm_test_dp_mst_calc_pbn_mode ==============
[14:16:32] [PASSED] Clock 154000 BPP 30 DSC disabled
[14:16:32] [PASSED] Clock 234000 BPP 30 DSC disabled
[14:16:32] [PASSED] Clock 297000 BPP 24 DSC disabled
[14:16:32] [PASSED] Clock 332880 BPP 24 DSC enabled
[14:16:32] [PASSED] Clock 324540 BPP 24 DSC enabled
[14:16:32] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[14:16:32] ============== drm_test_dp_mst_calc_pbn_div ===============
[14:16:32] [PASSED] Link rate 2000000 lane count 4
[14:16:32] [PASSED] Link rate 2000000 lane count 2
[14:16:32] [PASSED] Link rate 2000000 lane count 1
[14:16:32] [PASSED] Link rate 1350000 lane count 4
[14:16:32] [PASSED] Link rate 1350000 lane count 2
[14:16:32] [PASSED] Link rate 1350000 lane count 1
[14:16:32] [PASSED] Link rate 1000000 lane count 4
[14:16:32] [PASSED] Link rate 1000000 lane count 2
[14:16:32] [PASSED] Link rate 1000000 lane count 1
[14:16:32] [PASSED] Link rate 810000 lane count 4
[14:16:32] [PASSED] Link rate 810000 lane count 2
[14:16:32] [PASSED] Link rate 810000 lane count 1
[14:16:32] [PASSED] Link rate 540000 lane count 4
[14:16:32] [PASSED] Link rate 540000 lane count 2
[14:16:32] [PASSED] Link rate 540000 lane count 1
[14:16:32] [PASSED] Link rate 270000 lane count 4
[14:16:32] [PASSED] Link rate 270000 lane count 2
[14:16:32] [PASSED] Link rate 270000 lane count 1
[14:16:32] [PASSED] Link rate 162000 lane count 4
[14:16:32] [PASSED] Link rate 162000 lane count 2
[14:16:32] [PASSED] Link rate 162000 lane count 1
[14:16:32] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[14:16:32] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[14:16:32] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[14:16:32] [PASSED] DP_POWER_UP_PHY with port number
[14:16:32] [PASSED] DP_POWER_DOWN_PHY with port number
[14:16:32] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[14:16:32] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[14:16:32] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[14:16:32] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[14:16:32] [PASSED] DP_QUERY_PAYLOAD with port number
[14:16:32] [PASSED] DP_QUERY_PAYLOAD with VCPI
[14:16:32] [PASSED] DP_REMOTE_DPCD_READ with port number
[14:16:32] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[14:16:32] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[14:16:32] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[14:16:32] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[14:16:32] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[14:16:32] [PASSED] DP_REMOTE_I2C_READ with port number
[14:16:32] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[14:16:32] [PASSED] DP_REMOTE_I2C_READ with transactions array
[14:16:32] [PASSED] DP_REMOTE_I2C_WRITE with port number
[14:16:32] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[14:16:32] [PASSED] DP_REMOTE_I2C_WRITE with data array
[14:16:32] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[14:16:32] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[14:16:32] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[14:16:32] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[14:16:32] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[14:16:32] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[14:16:32] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[14:16:32] ================ [PASSED] drm_dp_mst_helper ================
[14:16:32] ================== drm_exec (7 subtests) ===================
[14:16:32] [PASSED] sanitycheck
[14:16:32] [PASSED] test_lock
[14:16:32] [PASSED] test_lock_unlock
[14:16:32] [PASSED] test_duplicates
[14:16:32] [PASSED] test_prepare
[14:16:32] [PASSED] test_prepare_array
[14:16:32] [PASSED] test_multiple_loops
[14:16:32] ==================== [PASSED] drm_exec =====================
[14:16:32] =========== drm_format_helper_test (17 subtests) ===========
[14:16:32] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[14:16:32] [PASSED] single_pixel_source_buffer
[14:16:32] [PASSED] single_pixel_clip_rectangle
[14:16:32] [PASSED] well_known_colors
[14:16:32] [PASSED] destination_pitch
[14:16:32] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[14:16:32] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[14:16:32] [PASSED] single_pixel_source_buffer
[14:16:32] [PASSED] single_pixel_clip_rectangle
[14:16:32] [PASSED] well_known_colors
[14:16:32] [PASSED] destination_pitch
[14:16:32] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[14:16:32] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[14:16:32] [PASSED] single_pixel_source_buffer
[14:16:32] [PASSED] single_pixel_clip_rectangle
[14:16:32] [PASSED] well_known_colors
[14:16:32] [PASSED] destination_pitch
[14:16:32] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[14:16:32] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[14:16:32] [PASSED] single_pixel_source_buffer
[14:16:32] [PASSED] single_pixel_clip_rectangle
[14:16:32] [PASSED] well_known_colors
[14:16:32] [PASSED] destination_pitch
[14:16:32] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[14:16:32] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[14:16:32] [PASSED] single_pixel_source_buffer
[14:16:32] [PASSED] single_pixel_clip_rectangle
[14:16:32] [PASSED] well_known_colors
[14:16:32] [PASSED] destination_pitch
[14:16:32] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[14:16:32] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[14:16:32] [PASSED] single_pixel_source_buffer
[14:16:32] [PASSED] single_pixel_clip_rectangle
[14:16:32] [PASSED] well_known_colors
[14:16:32] [PASSED] destination_pitch
[14:16:32] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[14:16:32] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[14:16:32] [PASSED] single_pixel_source_buffer
[14:16:32] [PASSED] single_pixel_clip_rectangle
[14:16:32] [PASSED] well_known_colors
[14:16:32] [PASSED] destination_pitch
[14:16:32] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[14:16:32] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[14:16:32] [PASSED] single_pixel_source_buffer
[14:16:32] [PASSED] single_pixel_clip_rectangle
[14:16:32] [PASSED] well_known_colors
[14:16:32] [PASSED] destination_pitch
[14:16:32] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[14:16:32] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[14:16:32] [PASSED] single_pixel_source_buffer
[14:16:32] [PASSED] single_pixel_clip_rectangle
[14:16:32] [PASSED] well_known_colors
[14:16:32] [PASSED] destination_pitch
[14:16:32] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[14:16:32] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[14:16:32] [PASSED] single_pixel_source_buffer
[14:16:32] [PASSED] single_pixel_clip_rectangle
[14:16:32] [PASSED] well_known_colors
[14:16:32] [PASSED] destination_pitch
[14:16:32] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[14:16:32] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[14:16:32] [PASSED] single_pixel_source_buffer
[14:16:32] [PASSED] single_pixel_clip_rectangle
[14:16:32] [PASSED] well_known_colors
[14:16:32] [PASSED] destination_pitch
[14:16:32] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[14:16:32] ============== drm_test_fb_xrgb8888_to_mono ===============
[14:16:32] [PASSED] single_pixel_source_buffer
[14:16:32] [PASSED] single_pixel_clip_rectangle
[14:16:32] [PASSED] well_known_colors
[14:16:32] [PASSED] destination_pitch
[14:16:32] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[14:16:32] ==================== drm_test_fb_swab =====================
[14:16:32] [PASSED] single_pixel_source_buffer
[14:16:32] [PASSED] single_pixel_clip_rectangle
[14:16:32] [PASSED] well_known_colors
[14:16:32] [PASSED] destination_pitch
[14:16:32] ================ [PASSED] drm_test_fb_swab =================
[14:16:32] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[14:16:32] [PASSED] single_pixel_source_buffer
[14:16:32] [PASSED] single_pixel_clip_rectangle
[14:16:32] [PASSED] well_known_colors
[14:16:32] [PASSED] destination_pitch
[14:16:32] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[14:16:32] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[14:16:32] [PASSED] single_pixel_source_buffer
[14:16:32] [PASSED] single_pixel_clip_rectangle
[14:16:32] [PASSED] well_known_colors
[14:16:32] [PASSED] destination_pitch
[14:16:32] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[14:16:32] ================= drm_test_fb_clip_offset =================
[14:16:32] [PASSED] pass through
[14:16:32] [PASSED] horizontal offset
[14:16:32] [PASSED] vertical offset
[14:16:32] [PASSED] horizontal and vertical offset
[14:16:32] [PASSED] horizontal offset (custom pitch)
[14:16:32] [PASSED] vertical offset (custom pitch)
[14:16:32] [PASSED] horizontal and vertical offset (custom pitch)
[14:16:32] ============= [PASSED] drm_test_fb_clip_offset =============
[14:16:32] =================== drm_test_fb_memcpy ====================
[14:16:32] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[14:16:32] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[14:16:32] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[14:16:32] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[14:16:32] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[14:16:32] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[14:16:32] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[14:16:32] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[14:16:32] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[14:16:32] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[14:16:32] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[14:16:32] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[14:16:32] =============== [PASSED] drm_test_fb_memcpy ================
[14:16:32] ============= [PASSED] drm_format_helper_test ==============
[14:16:32] ================= drm_format (18 subtests) =================
[14:16:32] [PASSED] drm_test_format_block_width_invalid
[14:16:32] [PASSED] drm_test_format_block_width_one_plane
[14:16:32] [PASSED] drm_test_format_block_width_two_plane
[14:16:32] [PASSED] drm_test_format_block_width_three_plane
[14:16:32] [PASSED] drm_test_format_block_width_tiled
[14:16:32] [PASSED] drm_test_format_block_height_invalid
[14:16:32] [PASSED] drm_test_format_block_height_one_plane
[14:16:32] [PASSED] drm_test_format_block_height_two_plane
[14:16:32] [PASSED] drm_test_format_block_height_three_plane
[14:16:32] [PASSED] drm_test_format_block_height_tiled
[14:16:32] [PASSED] drm_test_format_min_pitch_invalid
[14:16:32] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[14:16:32] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[14:16:32] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[14:16:32] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[14:16:32] [PASSED] drm_test_format_min_pitch_two_plane
[14:16:32] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[14:16:32] [PASSED] drm_test_format_min_pitch_tiled
[14:16:32] =================== [PASSED] drm_format ====================
[14:16:32] ============== drm_framebuffer (10 subtests) ===============
[14:16:32] ========== drm_test_framebuffer_check_src_coords ==========
[14:16:32] [PASSED] Success: source fits into fb
[14:16:32] [PASSED] Fail: overflowing fb with x-axis coordinate
[14:16:32] [PASSED] Fail: overflowing fb with y-axis coordinate
[14:16:32] [PASSED] Fail: overflowing fb with source width
[14:16:32] [PASSED] Fail: overflowing fb with source height
[14:16:32] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[14:16:32] [PASSED] drm_test_framebuffer_cleanup
[14:16:32] =============== drm_test_framebuffer_create ===============
[14:16:32] [PASSED] ABGR8888 normal sizes
[14:16:32] [PASSED] ABGR8888 max sizes
[14:16:32] [PASSED] ABGR8888 pitch greater than min required
[14:16:32] [PASSED] ABGR8888 pitch less than min required
[14:16:32] [PASSED] ABGR8888 Invalid width
[14:16:32] [PASSED] ABGR8888 Invalid buffer handle
[14:16:32] [PASSED] No pixel format
[14:16:32] [PASSED] ABGR8888 Width 0
[14:16:32] [PASSED] ABGR8888 Height 0
[14:16:32] [PASSED] ABGR8888 Out of bound height * pitch combination
[14:16:32] [PASSED] ABGR8888 Large buffer offset
[14:16:32] [PASSED] ABGR8888 Buffer offset for inexistent plane
[14:16:32] [PASSED] ABGR8888 Invalid flag
[14:16:32] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[14:16:32] [PASSED] ABGR8888 Valid buffer modifier
[14:16:32] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[14:16:32] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[14:16:32] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[14:16:32] [PASSED] NV12 Normal sizes
[14:16:32] [PASSED] NV12 Max sizes
[14:16:32] [PASSED] NV12 Invalid pitch
[14:16:32] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[14:16:32] [PASSED] NV12 different modifier per-plane
[14:16:32] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[14:16:32] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[14:16:32] [PASSED] NV12 Modifier for inexistent plane
[14:16:32] [PASSED] NV12 Handle for inexistent plane
[14:16:32] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[14:16:32] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[14:16:32] [PASSED] YVU420 Normal sizes
[14:16:32] [PASSED] YVU420 Max sizes
[14:16:32] [PASSED] YVU420 Invalid pitch
[14:16:32] [PASSED] YVU420 Different pitches
[14:16:32] [PASSED] YVU420 Different buffer offsets/pitches
[14:16:32] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[14:16:32] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[14:16:32] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[14:16:32] [PASSED] YVU420 Valid modifier
[14:16:32] [PASSED] YVU420 Different modifiers per plane
[14:16:32] [PASSED] YVU420 Modifier for inexistent plane
[14:16:32] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[14:16:32] [PASSED] X0L2 Normal sizes
[14:16:32] [PASSED] X0L2 Max sizes
[14:16:32] [PASSED] X0L2 Invalid pitch
[14:16:32] [PASSED] X0L2 Pitch greater than minimum required
[14:16:32] [PASSED] X0L2 Handle for inexistent plane
[14:16:32] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[14:16:32] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[14:16:32] [PASSED] X0L2 Valid modifier
[14:16:32] [PASSED] X0L2 Modifier for inexistent plane
[14:16:32] =========== [PASSED] drm_test_framebuffer_create ===========
[14:16:32] [PASSED] drm_test_framebuffer_free
[14:16:32] [PASSED] drm_test_framebuffer_init
[14:16:32] [PASSED] drm_test_framebuffer_init_bad_format
[14:16:32] [PASSED] drm_test_framebuffer_init_dev_mismatch
[14:16:32] [PASSED] drm_test_framebuffer_lookup
[14:16:32] [PASSED] drm_test_framebuffer_lookup_inexistent
[14:16:32] [PASSED] drm_test_framebuffer_modifiers_not_supported
[14:16:32] ================= [PASSED] drm_framebuffer =================
[14:16:32] ================ drm_gem_shmem (8 subtests) ================
[14:16:32] [PASSED] drm_gem_shmem_test_obj_create
[14:16:32] [PASSED] drm_gem_shmem_test_obj_create_private
[14:16:32] [PASSED] drm_gem_shmem_test_pin_pages
[14:16:32] [PASSED] drm_gem_shmem_test_vmap
[14:16:32] [PASSED] drm_gem_shmem_test_get_sg_table
[14:16:32] [PASSED] drm_gem_shmem_test_get_pages_sgt
[14:16:32] [PASSED] drm_gem_shmem_test_madvise
[14:16:32] [PASSED] drm_gem_shmem_test_purge
[14:16:32] ================== [PASSED] drm_gem_shmem ==================
[14:16:32] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[14:16:32] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[14:16:32] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[14:16:32] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[14:16:32] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[14:16:32] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[14:16:32] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[14:16:32] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[14:16:32] [PASSED] Automatic
[14:16:32] [PASSED] Full
[14:16:32] [PASSED] Limited 16:235
[14:16:32] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[14:16:32] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[14:16:32] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[14:16:32] [PASSED] drm_test_check_disable_connector
[14:16:32] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[14:16:32] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[14:16:32] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[14:16:32] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[14:16:32] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[14:16:32] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[14:16:32] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[14:16:32] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[14:16:32] [PASSED] drm_test_check_output_bpc_dvi
[14:16:32] [PASSED] drm_test_check_output_bpc_format_vic_1
[14:16:32] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[14:16:32] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[14:16:32] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[14:16:32] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[14:16:32] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[14:16:32] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[14:16:32] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[14:16:32] ============ drm_test_check_hdmi_color_format =============
[14:16:32] [PASSED] AUTO -> RGB
[14:16:32] [PASSED] YCBCR422 -> YUV422
[14:16:32] [PASSED] YCBCR420 -> YUV420
[14:16:32] [PASSED] YCBCR444 -> YUV444
[14:16:32] [PASSED] RGB -> RGB
[14:16:32] ======== [PASSED] drm_test_check_hdmi_color_format =========
[14:16:32] ======== drm_test_check_hdmi_color_format_420_only ========
[14:16:32] [PASSED] RGB should fail
[14:16:32] [PASSED] YUV444 should fail
[14:16:32] [PASSED] YUV422 should fail
[14:16:32] [PASSED] YUV420 should work
[14:16:32] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[14:16:32] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[14:16:32] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[14:16:32] [PASSED] drm_test_check_broadcast_rgb_value
[14:16:32] [PASSED] drm_test_check_bpc_8_value
[14:16:32] [PASSED] drm_test_check_bpc_10_value
[14:16:32] [PASSED] drm_test_check_bpc_12_value
[14:16:32] [PASSED] drm_test_check_format_value
[14:16:32] [PASSED] drm_test_check_tmds_char_value
[14:16:32] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[14:16:32] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[14:16:32] [PASSED] drm_test_check_mode_valid
[14:16:32] [PASSED] drm_test_check_mode_valid_reject
[14:16:32] [PASSED] drm_test_check_mode_valid_reject_rate
[14:16:32] [PASSED] drm_test_check_mode_valid_reject_max_clock
[14:16:32] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[14:16:32] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[14:16:32] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[14:16:32] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[14:16:32] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[14:16:32] [PASSED] drm_test_check_infoframes
[14:16:32] [PASSED] drm_test_check_reject_avi_infoframe
[14:16:32] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[14:16:32] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[14:16:32] [PASSED] drm_test_check_reject_audio_infoframe
[14:16:32] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[14:16:32] ================= drm_managed (2 subtests) =================
[14:16:32] [PASSED] drm_test_managed_release_action
[14:16:32] [PASSED] drm_test_managed_run_action
[14:16:32] =================== [PASSED] drm_managed ===================
[14:16:32] =================== drm_mm (6 subtests) ====================
[14:16:32] [PASSED] drm_test_mm_init
[14:16:32] [PASSED] drm_test_mm_debug
[14:16:32] [PASSED] drm_test_mm_align32
[14:16:32] [PASSED] drm_test_mm_align64
[14:16:32] [PASSED] drm_test_mm_lowest
[14:16:32] [PASSED] drm_test_mm_highest
[14:16:32] ===================== [PASSED] drm_mm ======================
[14:16:32] ============= drm_modes_analog_tv (5 subtests) =============
[14:16:32] [PASSED] drm_test_modes_analog_tv_mono_576i
[14:16:32] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[14:16:32] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[14:16:32] [PASSED] drm_test_modes_analog_tv_pal_576i
[14:16:32] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[14:16:32] =============== [PASSED] drm_modes_analog_tv ===============
[14:16:32] ============== drm_plane_helper (2 subtests) ===============
[14:16:32] =============== drm_test_check_plane_state ================
[14:16:32] [PASSED] clipping_simple
[14:16:32] [PASSED] clipping_rotate_reflect
[14:16:32] [PASSED] positioning_simple
[14:16:32] [PASSED] upscaling
[14:16:32] [PASSED] downscaling
[14:16:32] [PASSED] rounding1
[14:16:32] [PASSED] rounding2
[14:16:32] [PASSED] rounding3
[14:16:32] [PASSED] rounding4
[14:16:32] =========== [PASSED] drm_test_check_plane_state ============
[14:16:32] =========== drm_test_check_invalid_plane_state ============
[14:16:32] [PASSED] positioning_invalid
[14:16:32] [PASSED] upscaling_invalid
[14:16:32] [PASSED] downscaling_invalid
[14:16:32] ======= [PASSED] drm_test_check_invalid_plane_state ========
[14:16:32] ================ [PASSED] drm_plane_helper =================
[14:16:32] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[14:16:32] ====== drm_test_connector_helper_tv_get_modes_check =======
[14:16:32] [PASSED] None
[14:16:32] [PASSED] PAL
[14:16:32] [PASSED] NTSC
[14:16:32] [PASSED] Both, NTSC Default
[14:16:32] [PASSED] Both, PAL Default
[14:16:32] [PASSED] Both, NTSC Default, with PAL on command-line
[14:16:32] [PASSED] Both, PAL Default, with NTSC on command-line
[14:16:32] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[14:16:32] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[14:16:32] ================== drm_rect (9 subtests) ===================
[14:16:32] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[14:16:32] [PASSED] drm_test_rect_clip_scaled_not_clipped
[14:16:32] [PASSED] drm_test_rect_clip_scaled_clipped
[14:16:32] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[14:16:32] ================= drm_test_rect_intersect =================
[14:16:32] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[14:16:32] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[14:16:32] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[14:16:32] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[14:16:32] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[14:16:32] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[14:16:32] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[14:16:32] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[14:16:32] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[14:16:32] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[14:16:32] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[14:16:32] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[14:16:32] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[14:16:32] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[14:16:32] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[14:16:32] ============= [PASSED] drm_test_rect_intersect =============
[14:16:32] ================ drm_test_rect_calc_hscale ================
[14:16:32] [PASSED] normal use
[14:16:32] [PASSED] out of max range
[14:16:32] [PASSED] out of min range
[14:16:32] [PASSED] zero dst
[14:16:32] [PASSED] negative src
[14:16:32] [PASSED] negative dst
[14:16:32] ============ [PASSED] drm_test_rect_calc_hscale ============
[14:16:32] ================ drm_test_rect_calc_vscale ================
[14:16:32] [PASSED] normal use
[14:16:32] [PASSED] out of max range
[14:16:32] [PASSED] out of min range
[14:16:32] [PASSED] zero dst
[14:16:32] [PASSED] negative src
[14:16:32] [PASSED] negative dst
[14:16:32] ============ [PASSED] drm_test_rect_calc_vscale ============
[14:16:32] ================== drm_test_rect_rotate ===================
[14:16:32] [PASSED] reflect-x
[14:16:32] [PASSED] reflect-y
[14:16:32] [PASSED] rotate-0
[14:16:32] [PASSED] rotate-90
[14:16:32] [PASSED] rotate-180
[14:16:32] [PASSED] rotate-270
[14:16:32] ============== [PASSED] drm_test_rect_rotate ===============
[14:16:32] ================ drm_test_rect_rotate_inv =================
[14:16:32] [PASSED] reflect-x
[14:16:32] [PASSED] reflect-y
[14:16:32] [PASSED] rotate-0
[14:16:32] [PASSED] rotate-90
[14:16:32] [PASSED] rotate-180
[14:16:32] [PASSED] rotate-270
[14:16:32] ============ [PASSED] drm_test_rect_rotate_inv =============
[14:16:32] ==================== [PASSED] drm_rect =====================
[14:16:32] ============ drm_sysfb_modeset_test (1 subtest) ============
[14:16:32] ============ drm_test_sysfb_build_fourcc_list =============
[14:16:32] [PASSED] no native formats
[14:16:32] [PASSED] XRGB8888 as native format
[14:16:32] [PASSED] remove duplicates
[14:16:32] [PASSED] convert alpha formats
[14:16:32] [PASSED] random formats
[14:16:32] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[14:16:32] ============= [PASSED] drm_sysfb_modeset_test ==============
[14:16:32] ================== drm_fixp (2 subtests) ===================
[14:16:32] [PASSED] drm_test_int2fixp
[14:16:32] [PASSED] drm_test_sm2fixp
[14:16:32] ==================== [PASSED] drm_fixp =====================
[14:16:32] ============================================================
[14:16:32] Testing complete. Ran 639 tests: passed: 639
[14:16:32] Elapsed time: 26.411s total, 1.739s configuring, 24.502s building, 0.149s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[14:16:32] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[14:16:34] 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
[14:16:44] Starting KUnit Kernel (1/1)...
[14:16:44] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[14:16:44] ================= ttm_device (5 subtests) ==================
[14:16:44] [PASSED] ttm_device_init_basic
[14:16:44] [PASSED] ttm_device_init_multiple
[14:16:44] [PASSED] ttm_device_fini_basic
[14:16:44] [PASSED] ttm_device_init_no_vma_man
[14:16:44] ================== ttm_device_init_pools ==================
[14:16:44] [PASSED] No DMA allocations, no DMA32 required
[14:16:44] [PASSED] DMA allocations, DMA32 required
[14:16:44] [PASSED] No DMA allocations, DMA32 required
[14:16:44] [PASSED] DMA allocations, no DMA32 required
[14:16:44] ============== [PASSED] ttm_device_init_pools ==============
[14:16:44] =================== [PASSED] ttm_device ====================
[14:16:44] ================== ttm_pool (8 subtests) ===================
[14:16:44] ================== ttm_pool_alloc_basic ===================
[14:16:44] [PASSED] One page
[14:16:44] [PASSED] More than one page
[14:16:44] [PASSED] Above the allocation limit
[14:16:44] [PASSED] One page, with coherent DMA mappings enabled
[14:16:44] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[14:16:44] ============== [PASSED] ttm_pool_alloc_basic ===============
[14:16:44] ============== ttm_pool_alloc_basic_dma_addr ==============
[14:16:44] [PASSED] One page
[14:16:44] [PASSED] More than one page
[14:16:44] [PASSED] Above the allocation limit
[14:16:44] [PASSED] One page, with coherent DMA mappings enabled
[14:16:44] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[14:16:44] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[14:16:44] [PASSED] ttm_pool_alloc_order_caching_match
[14:16:44] [PASSED] ttm_pool_alloc_caching_mismatch
[14:16:44] [PASSED] ttm_pool_alloc_order_mismatch
[14:16:44] [PASSED] ttm_pool_free_dma_alloc
[14:16:44] [PASSED] ttm_pool_free_no_dma_alloc
[14:16:44] [PASSED] ttm_pool_fini_basic
[14:16:44] ==================== [PASSED] ttm_pool =====================
[14:16:44] ================ ttm_resource (8 subtests) =================
[14:16:44] ================= ttm_resource_init_basic =================
[14:16:44] [PASSED] Init resource in TTM_PL_SYSTEM
[14:16:44] [PASSED] Init resource in TTM_PL_VRAM
[14:16:44] [PASSED] Init resource in a private placement
[14:16:44] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[14:16:44] ============= [PASSED] ttm_resource_init_basic =============
[14:16:44] [PASSED] ttm_resource_init_pinned
[14:16:44] [PASSED] ttm_resource_fini_basic
[14:16:44] [PASSED] ttm_resource_manager_init_basic
[14:16:44] [PASSED] ttm_resource_manager_usage_basic
[14:16:44] [PASSED] ttm_resource_manager_set_used_basic
[14:16:44] [PASSED] ttm_sys_man_alloc_basic
[14:16:44] [PASSED] ttm_sys_man_free_basic
[14:16:44] ================== [PASSED] ttm_resource ===================
[14:16:44] =================== ttm_tt (15 subtests) ===================
[14:16:44] ==================== ttm_tt_init_basic ====================
[14:16:44] [PASSED] Page-aligned size
[14:16:44] [PASSED] Extra pages requested
[14:16:44] ================ [PASSED] ttm_tt_init_basic ================
[14:16:44] [PASSED] ttm_tt_init_misaligned
[14:16:44] [PASSED] ttm_tt_fini_basic
[14:16:44] [PASSED] ttm_tt_fini_sg
[14:16:44] [PASSED] ttm_tt_fini_shmem
[14:16:44] [PASSED] ttm_tt_create_basic
[14:16:44] [PASSED] ttm_tt_create_invalid_bo_type
[14:16:44] [PASSED] ttm_tt_create_ttm_exists
[14:16:44] [PASSED] ttm_tt_create_failed
[14:16:44] [PASSED] ttm_tt_destroy_basic
[14:16:44] [PASSED] ttm_tt_populate_null_ttm
[14:16:44] [PASSED] ttm_tt_populate_populated_ttm
[14:16:44] [PASSED] ttm_tt_unpopulate_basic
[14:16:44] [PASSED] ttm_tt_unpopulate_empty_ttm
[14:16:44] [PASSED] ttm_tt_swapin_basic
[14:16:44] ===================== [PASSED] ttm_tt ======================
[14:16:44] =================== ttm_bo (14 subtests) ===================
[14:16:44] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[14:16:44] [PASSED] Cannot be interrupted and sleeps
[14:16:44] [PASSED] Cannot be interrupted, locks straight away
[14:16:44] [PASSED] Can be interrupted, sleeps
[14:16:44] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[14:16:44] [PASSED] ttm_bo_reserve_locked_no_sleep
[14:16:44] [PASSED] ttm_bo_reserve_no_wait_ticket
[14:16:44] [PASSED] ttm_bo_reserve_double_resv
[14:16:44] [PASSED] ttm_bo_reserve_interrupted
[14:16:44] [PASSED] ttm_bo_reserve_deadlock
[14:16:44] [PASSED] ttm_bo_unreserve_basic
[14:16:44] [PASSED] ttm_bo_unreserve_pinned
[14:16:44] [PASSED] ttm_bo_unreserve_bulk
[14:16:44] [PASSED] ttm_bo_fini_basic
[14:16:44] [PASSED] ttm_bo_fini_shared_resv
[14:16:44] [PASSED] ttm_bo_pin_basic
[14:16:44] [PASSED] ttm_bo_pin_unpin_resource
[14:16:44] [PASSED] ttm_bo_multiple_pin_one_unpin
[14:16:44] ===================== [PASSED] ttm_bo ======================
[14:16:44] ============== ttm_bo_validate (22 subtests) ===============
[14:16:44] ============== ttm_bo_init_reserved_sys_man ===============
[14:16:44] [PASSED] Buffer object for userspace
[14:16:44] [PASSED] Kernel buffer object
[14:16:44] [PASSED] Shared buffer object
[14:16:44] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[14:16:44] ============== ttm_bo_init_reserved_mock_man ==============
[14:16:44] [PASSED] Buffer object for userspace
[14:16:44] [PASSED] Kernel buffer object
[14:16:44] [PASSED] Shared buffer object
[14:16:44] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[14:16:44] [PASSED] ttm_bo_init_reserved_resv
[14:16:44] ================== ttm_bo_validate_basic ==================
[14:16:44] [PASSED] Buffer object for userspace
[14:16:44] [PASSED] Kernel buffer object
[14:16:44] [PASSED] Shared buffer object
[14:16:44] ============== [PASSED] ttm_bo_validate_basic ==============
[14:16:44] [PASSED] ttm_bo_validate_invalid_placement
[14:16:44] ============= ttm_bo_validate_same_placement ==============
[14:16:44] [PASSED] System manager
[14:16:44] [PASSED] VRAM manager
[14:16:44] ========= [PASSED] ttm_bo_validate_same_placement ==========
[14:16:44] [PASSED] ttm_bo_validate_failed_alloc
[14:16:44] [PASSED] ttm_bo_validate_pinned
[14:16:44] [PASSED] ttm_bo_validate_busy_placement
[14:16:44] ================ ttm_bo_validate_multihop =================
[14:16:44] [PASSED] Buffer object for userspace
[14:16:44] [PASSED] Kernel buffer object
[14:16:44] [PASSED] Shared buffer object
[14:16:44] ============ [PASSED] ttm_bo_validate_multihop =============
[14:16:44] ========== ttm_bo_validate_no_placement_signaled ==========
[14:16:44] [PASSED] Buffer object in system domain, no page vector
[14:16:44] [PASSED] Buffer object in system domain with an existing page vector
[14:16:44] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[14:16:44] ======== ttm_bo_validate_no_placement_not_signaled ========
[14:16:44] [PASSED] Buffer object for userspace
[14:16:44] [PASSED] Kernel buffer object
[14:16:44] [PASSED] Shared buffer object
[14:16:44] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[14:16:44] [PASSED] ttm_bo_validate_move_fence_signaled
[14:16:44] ========= ttm_bo_validate_move_fence_not_signaled =========
[14:16:44] [PASSED] Waits for GPU
[14:16:44] [PASSED] Tries to lock straight away
[14:16:44] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[14:16:44] [PASSED] ttm_bo_validate_swapout
[14:16:44] [PASSED] ttm_bo_validate_happy_evict
[14:16:44] [PASSED] ttm_bo_validate_all_pinned_evict
[14:16:44] [PASSED] ttm_bo_validate_allowed_only_evict
[14:16:44] [PASSED] ttm_bo_validate_deleted_evict
[14:16:44] [PASSED] ttm_bo_validate_busy_domain_evict
[14:16:44] [PASSED] ttm_bo_validate_evict_gutting
[14:16:44] [PASSED] ttm_bo_validate_recrusive_evict
[14:16:44] ================= [PASSED] ttm_bo_validate =================
[14:16:44] ============================================================
[14:16:44] Testing complete. Ran 102 tests: passed: 102
[14:16:44] Elapsed time: 11.894s total, 1.778s configuring, 9.851s building, 0.229s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 17+ messages in thread
* ✓ Xe.CI.BAT: success for Add memory page offlining support (rev13)
2026-07-14 13:48 [PATCH V12 00/11] Add memory page offlining support Tejas Upadhyay
` (11 preceding siblings ...)
2026-07-14 14:16 ` ✓ CI.KUnit: success for Add memory page offlining support (rev13) Patchwork
@ 2026-07-14 14:53 ` Patchwork
2026-07-14 20:13 ` ✗ Xe.CI.FULL: failure " Patchwork
13 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2026-07-14 14:53 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 960 bytes --]
== Series Details ==
Series: Add memory page offlining support (rev13)
URL : https://patchwork.freedesktop.org/series/161473/
State : success
== Summary ==
CI Bug Log - changes from xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366_BAT -> xe-pw-161473v13_BAT
====================================================
Summary
-------
**SUCCESS**
No regressions found.
Participating hosts (13 -> 13)
------------------------------
No changes in participating hosts
Changes
-------
No changes found
Build changes
-------------
* Linux: xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366 -> xe-pw-161473v13
IGT_9006: 6380a8af26359dd222e22679442272ded836c463 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366: d3709d2bd13debee032d55c0dd71f145e11ec366
xe-pw-161473v13: 161473v13
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/index.html
[-- Attachment #2: Type: text/html, Size: 1509 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH V12 06/11] drm/xe/cri: Add debugfs to inject faulty vram address
2026-07-14 13:49 ` [PATCH V12 06/11] drm/xe/cri: Add debugfs to inject faulty vram address Tejas Upadhyay
@ 2026-07-14 15:31 ` Rodrigo Vivi
2026-07-14 15:40 ` Upadhyay, Tejas
0 siblings, 1 reply; 17+ messages in thread
From: Rodrigo Vivi @ 2026-07-14 15:31 UTC (permalink / raw)
To: Tejas Upadhyay; +Cc: intel-xe
On Tue, Jul 14, 2026 at 07:19:05PM +0530, Tejas Upadhyay wrote:
> Add debugfs which can help testing feature with manual error injection.
> Adding a debugfs interface to the drm/xe driver allows manual injection
> of faulty VRAM addresses, facilitating the testing of the CRI memory
> page offline feature before it is fully functional. The implementation
> involves creating a debugfs entry, likely under
> /sys/kernel/debug/dri/bdf/invalid_addr_vram0,
> to accept specific faulty addresses for validation.
>
> For example,
> echo 0 > /sys/kernel/debug/dri/bdf/invalid_addr_vram0
Why are we creating a new standalone debugfs instead of using
standard fault-inject?
> where 0 is below address types to be tested,
> enum mempage_offline_mode {
> MEMPAGE_OFFLINE_UNALLOCATED = 0,
> MEMPAGE_OFFLINE_USER_ALLOCATED = 1,
> MEMPAGE_OFFLINE_KERNEL_USER_GGTT_ALLOCATED = 2,
> MEMPAGE_OFFLINE_KERNEL_USER_PPGTT_ALLOCATED = 3,
> MEMPAGE_OFFLINE_KERNEL_CRITICAL_ALLOCATED = 4,
> MEMPAGE_OFFLINE_RESERVED = 5
> };
>
> v6(Sashiko):
> - Fix off-by-one in address loop boundary (<= vs <)
> - Use relative offset for buddy lookup, convert to DPA for
> handle_addr_fault
> - Fix continue inside scoped_guard targeting wrong loop; use break
> instead
> - Use READ_ONCE for bo->q access without resv lock
> - Wrap case MEMPAGE_OFFLINE_RESERVED in braces for variable
> declaration
> - Add NULL check for xe_ttm_stolen_gpu_offset
> v5:
> - Remove redundant code
> v4:
> - Use scope_guard around lock, adapt bo->q and enhance warn messages
> - %s/gpu_buddy_addr_to_block/gpu_buddy_allocated_addr_to_block
> v3:
> - Add more specific noncritical bo tests
> v2:
> - Add mode based automated test vs manual address feed
>
> Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
> ---
> drivers/gpu/drm/xe/xe_debugfs.c | 169 +++++++++++++++++++++
> drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 2 +
> 2 files changed, 171 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
> index 8c391c7b017a..6a21511d3521 100644
> --- a/drivers/gpu/drm/xe/xe_debugfs.c
> +++ b/drivers/gpu/drm/xe/xe_debugfs.c
> @@ -14,6 +14,7 @@
> #include "regs/xe_pmt.h"
> #include "xe_bo.h"
> #include "xe_device.h"
> +#include "xe_exec_queue_types.h"
> #include "xe_force_wake.h"
> #include "xe_gt.h"
> #include "xe_gt_debugfs.h"
> @@ -21,6 +22,7 @@
> #include "xe_guc_ads.h"
> #include "xe_hw_engine.h"
> #include "xe_mmio.h"
> +#include "xe_migrate.h"
> #include "xe_pcode.h"
> #include "xe_pm.h"
> #include "xe_psmi.h"
> @@ -30,6 +32,8 @@
> #include "xe_sriov_vf.h"
> #include "xe_step.h"
> #include "xe_tile_debugfs.h"
> +#include "xe_ttm_stolen_mgr.h"
> +#include "xe_ttm_vram_mgr.h"
> #include "xe_vsec.h"
> #include "xe_wa.h"
>
> @@ -41,6 +45,14 @@
>
> DECLARE_FAULT_ATTR(gt_reset_failure);
> DECLARE_FAULT_ATTR(inject_csc_hw_error);
> +enum mempage_offline_mode {
> + MEMPAGE_OFFLINE_UNALLOCATED = 0,
> + MEMPAGE_OFFLINE_USER_ALLOCATED = 1,
> + MEMPAGE_OFFLINE_KERNEL_USER_GGTT_ALLOCATED = 2,
> + MEMPAGE_OFFLINE_KERNEL_USER_PPGTT_ALLOCATED = 3,
> + MEMPAGE_OFFLINE_KERNEL_CRITICAL_ALLOCATED = 4,
> + MEMPAGE_OFFLINE_RESERVED = 5,
> +};
>
> static void read_residency_counter(struct xe_device *xe, struct xe_mmio *mmio,
> u32 offset, const char *name, struct drm_printer *p)
> @@ -564,6 +576,152 @@ static const struct file_operations disable_late_binding_fops = {
> .write = disable_late_binding_set,
> };
>
> +static ssize_t addr_fault_reporting_show(struct file *f, char __user *ubuf,
> + size_t size, loff_t *pos)
> +{
> + struct xe_device *xe = file_inode(f)->i_private;
> + char buf[32];
> + int len;
> +
> + len = scnprintf(buf, sizeof(buf), "%lld\n", xe->mem.vram->ttm.offline_mode);
> +
> + return simple_read_from_buffer(ubuf, size, pos, buf, len);
> +}
> +
> +static int mempage_exec_offline(struct xe_device *xe, u64 mode)
> +{
> + struct xe_tile *tile = xe_device_get_root_tile(xe);
> + struct xe_vram_region *vr = tile->mem.vram;
> + struct ttm_buffer_object *tbo = NULL;
> + struct xe_ttm_vram_mgr *vram_mgr;
> + struct gpu_buddy_block *block;
> + bool do_offline = false;
> + struct gpu_buddy *mm;
> + struct xe_bo *bo;
> + u64 addr = 0x0;
> + int ret = 0;
> +
> + vram_mgr = &vr->ttm;
> + mm = &vram_mgr->mm;
> + while (addr < vr->actual_physical_size) {
> + do_offline = false;
> + scoped_guard(mutex, &vram_mgr->lock) {
> + block = gpu_buddy_allocated_addr_to_block(mm, addr);
> + if (!block && mode == MEMPAGE_OFFLINE_UNALLOCATED)
> + do_offline = true;
> + if (block && PTR_ERR(block) != -ENXIO) {
> + if (!block->private)
> + break;
> + tbo = block->private;
> + bo = ttm_to_xe_bo(tbo);
> + if (bo->ttm.type == ttm_bo_type_device &&
> + bo->flags & XE_BO_FLAG_USER &&
> + bo->flags & XE_BO_FLAG_VRAM_MASK &&
> + mode == MEMPAGE_OFFLINE_USER_ALLOCATED) {
> + do_offline = true;
> + } else if (READ_ONCE(bo->q) &&
> + mode == MEMPAGE_OFFLINE_KERNEL_USER_GGTT_ALLOCATED) {
> + /* lrc */
> + struct xe_vm *migrate_vm;
> +
> + migrate_vm = xe_migrate_get_vm(tile->migrate);
> + if (migrate_vm != READ_ONCE(bo->q)->vm)
> + do_offline = true;
> + xe_vm_put(migrate_vm);
> + } else if (bo->ttm.type == ttm_bo_type_kernel &&
> + bo->flags & XE_BO_FLAG_FORCE_USER_VRAM &&
> + bo->flags & XE_BO_FLAG_PAGETABLE &&
> + mode == MEMPAGE_OFFLINE_KERNEL_USER_PPGTT_ALLOCATED) {
> + /* ppgtt */
> + do_offline = true;
> + } else if (bo->ttm.type == ttm_bo_type_kernel &&
> + !(bo->flags & XE_BO_FLAG_FORCE_USER_VRAM) &&
> + mode == MEMPAGE_OFFLINE_KERNEL_CRITICAL_ALLOCATED) {
> + do_offline = true;
> + }
> + }
> + }
> + if (do_offline) {
> + /* Report fault — convert relative to DPA */
> + ret = xe_ttm_vram_handle_addr_fault(xe, addr + vr->dpa_base);
> + if (ret) {
> + if ((ret == -EIO) &&
> + mode == MEMPAGE_OFFLINE_KERNEL_USER_GGTT_ALLOCATED) {
> + addr += SZ_4K;
> + continue;
> + }
> + break;
> + }
> + /* Verify page is now reserved */
> + scoped_guard(mutex, &vram_mgr->lock) {
> + block = gpu_buddy_allocated_addr_to_block(mm, addr);
> + if (!block || PTR_ERR(block) == -ENXIO || block->private)
> + ret = -EBUSY;
> + }
> + break;
> + }
> + addr += SZ_4K;
> + }
> + if (!do_offline)
> + drm_warn(&xe->drm, "no such object, ret:%d\n", ret);
> +
> + return ret;
> +}
> +
> +static ssize_t addr_fault_reporting_set(struct file *f, const char __user *ubuf,
> + size_t size, loff_t *pos)
> +{
> + struct xe_device *xe = file_inode(f)->i_private;
> + int ret = 0;
> + u64 mode;
> +
> + ret = kstrtou64_from_user(ubuf, size, 0, &mode);
> + if (ret)
> + return ret;
> +
> + switch (mode) {
> + case MEMPAGE_OFFLINE_UNALLOCATED:
> + case MEMPAGE_OFFLINE_USER_ALLOCATED:
> + case MEMPAGE_OFFLINE_KERNEL_USER_GGTT_ALLOCATED:
> + case MEMPAGE_OFFLINE_KERNEL_USER_PPGTT_ALLOCATED:
> + case MEMPAGE_OFFLINE_KERNEL_CRITICAL_ALLOCATED:
> + ret = mempage_exec_offline(xe, mode);
> + break;
> + case MEMPAGE_OFFLINE_RESERVED: {
> + u64 stolen_base;
> +
> + stolen_base = xe_ttm_stolen_gpu_offset(xe);
> + if (!stolen_base) {
> + ret = -ENODEV;
> + break;
> + }
> + ret = xe_ttm_vram_handle_addr_fault(xe, stolen_base);
> + break;
> + }
> + default:
> + ret = -EINVAL;
> + break;
> + }
> +
> + xe->mem.vram->ttm.offline_mode = mode;
> + if (!ret || (ret == -EIO &&
> + (mode == MEMPAGE_OFFLINE_KERNEL_CRITICAL_ALLOCATED ||
> + mode == MEMPAGE_OFFLINE_RESERVED))) {
> + drm_info(&xe->drm, "offline mode %llu passed ret:%d\n", mode, ret);
> + } else {
> + drm_warn(&xe->drm, "offline mode %llu failed, ret:%d\n", mode, ret);
> + return ret;
> + }
> +
> + return size;
> +}
> +
> +static const struct file_operations addr_fault_reporting_fops = {
> + .owner = THIS_MODULE,
> + .read = addr_fault_reporting_show,
> + .write = addr_fault_reporting_set,
> +};
> +
> void xe_debugfs_register(struct xe_device *xe)
> {
> struct ttm_device *bdev = &xe->ttm;
> @@ -632,6 +790,17 @@ void xe_debugfs_register(struct xe_device *xe)
> if (man)
> ttm_resource_manager_create_debugfs(man, root, "stolen_mm");
>
> + if (xe->info.platform == XE_CRESCENTISLAND) {
> + man = ttm_manager_type(bdev, XE_PL_VRAM0);
> + if (man) {
> + char name[20];
> +
> + snprintf(name, sizeof(name), "invalid_addr_vram%d", 0);
> + debugfs_create_file(name, 0600, root, xe,
> + &addr_fault_reporting_fops);
> + }
> + }
> +
> for_each_tile(tile, xe, tile_id)
> xe_tile_debugfs_register(tile);
>
> 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 3ad7966798eb..07ed88b47e04 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;
> + /** @offline_mode: debugfs hook for setting page offline mode */
> + u64 offline_mode;
> };
>
> /**
> --
> 2.52.0
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* RE: [PATCH V12 06/11] drm/xe/cri: Add debugfs to inject faulty vram address
2026-07-14 15:31 ` Rodrigo Vivi
@ 2026-07-14 15:40 ` Upadhyay, Tejas
0 siblings, 0 replies; 17+ messages in thread
From: Upadhyay, Tejas @ 2026-07-14 15:40 UTC (permalink / raw)
To: Vivi, Rodrigo; +Cc: intel-xe@lists.freedesktop.org
> -----Original Message-----
> From: Vivi, Rodrigo <rodrigo.vivi@intel.com>
> Sent: 14 July 2026 21:02
> To: Upadhyay, Tejas <tejas.upadhyay@intel.com>
> Cc: intel-xe@lists.freedesktop.org
> Subject: Re: [PATCH V12 06/11] drm/xe/cri: Add debugfs to inject faulty vram
> address
>
> On Tue, Jul 14, 2026 at 07:19:05PM +0530, Tejas Upadhyay wrote:
> > Add debugfs which can help testing feature with manual error injection.
> > Adding a debugfs interface to the drm/xe driver allows manual
> > injection of faulty VRAM addresses, facilitating the testing of the
> > CRI memory page offline feature before it is fully functional. The
> > implementation involves creating a debugfs entry, likely under
> > /sys/kernel/debug/dri/bdf/invalid_addr_vram0,
> > to accept specific faulty addresses for validation.
> >
> > For example,
> > echo 0 > /sys/kernel/debug/dri/bdf/invalid_addr_vram0
>
> Why are we creating a new standalone debugfs instead of using standard
> fault-inject?
Right, this is just continuation of series to solve sashiko review comments. I will write a patch to inject fault and hook this debugfs call to that as per plan. Sorry for confusion here.
Tejas
>
> > where 0 is below address types to be tested, enum mempage_offline_mode
> > {
> > MEMPAGE_OFFLINE_UNALLOCATED = 0,
> > MEMPAGE_OFFLINE_USER_ALLOCATED = 1,
> > MEMPAGE_OFFLINE_KERNEL_USER_GGTT_ALLOCATED = 2,
> > MEMPAGE_OFFLINE_KERNEL_USER_PPGTT_ALLOCATED = 3,
> > MEMPAGE_OFFLINE_KERNEL_CRITICAL_ALLOCATED = 4,
> > MEMPAGE_OFFLINE_RESERVED = 5
> > };
> >
> > v6(Sashiko):
> > - Fix off-by-one in address loop boundary (<= vs <)
> > - Use relative offset for buddy lookup, convert to DPA for
> > handle_addr_fault
> > - Fix continue inside scoped_guard targeting wrong loop; use break
> > instead
> > - Use READ_ONCE for bo->q access without resv lock
> > - Wrap case MEMPAGE_OFFLINE_RESERVED in braces for variable
> > declaration
> > - Add NULL check for xe_ttm_stolen_gpu_offset
> > v5:
> > - Remove redundant code
> > v4:
> > - Use scope_guard around lock, adapt bo->q and enhance warn messages
> > - %s/gpu_buddy_addr_to_block/gpu_buddy_allocated_addr_to_block
> > v3:
> > - Add more specific noncritical bo tests
> > v2:
> > - Add mode based automated test vs manual address feed
> >
> > Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
> > ---
> > drivers/gpu/drm/xe/xe_debugfs.c | 169 +++++++++++++++++++++
> > drivers/gpu/drm/xe/xe_ttm_vram_mgr_types.h | 2 +
> > 2 files changed, 171 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/xe/xe_debugfs.c
> > b/drivers/gpu/drm/xe/xe_debugfs.c index 8c391c7b017a..6a21511d3521
> > 100644
> > --- a/drivers/gpu/drm/xe/xe_debugfs.c
> > +++ b/drivers/gpu/drm/xe/xe_debugfs.c
> > @@ -14,6 +14,7 @@
> > #include "regs/xe_pmt.h"
> > #include "xe_bo.h"
> > #include "xe_device.h"
> > +#include "xe_exec_queue_types.h"
> > #include "xe_force_wake.h"
> > #include "xe_gt.h"
> > #include "xe_gt_debugfs.h"
> > @@ -21,6 +22,7 @@
> > #include "xe_guc_ads.h"
> > #include "xe_hw_engine.h"
> > #include "xe_mmio.h"
> > +#include "xe_migrate.h"
> > #include "xe_pcode.h"
> > #include "xe_pm.h"
> > #include "xe_psmi.h"
> > @@ -30,6 +32,8 @@
> > #include "xe_sriov_vf.h"
> > #include "xe_step.h"
> > #include "xe_tile_debugfs.h"
> > +#include "xe_ttm_stolen_mgr.h"
> > +#include "xe_ttm_vram_mgr.h"
> > #include "xe_vsec.h"
> > #include "xe_wa.h"
> >
> > @@ -41,6 +45,14 @@
> >
> > DECLARE_FAULT_ATTR(gt_reset_failure);
> > DECLARE_FAULT_ATTR(inject_csc_hw_error);
> > +enum mempage_offline_mode {
> > + MEMPAGE_OFFLINE_UNALLOCATED = 0,
> > + MEMPAGE_OFFLINE_USER_ALLOCATED = 1,
> > + MEMPAGE_OFFLINE_KERNEL_USER_GGTT_ALLOCATED = 2,
> > + MEMPAGE_OFFLINE_KERNEL_USER_PPGTT_ALLOCATED = 3,
> > + MEMPAGE_OFFLINE_KERNEL_CRITICAL_ALLOCATED = 4,
> > + MEMPAGE_OFFLINE_RESERVED = 5,
> > +};
> >
> > static void read_residency_counter(struct xe_device *xe, struct xe_mmio
> *mmio,
> > u32 offset, const char *name, struct
> drm_printer *p) @@ -564,6
> > +576,152 @@ static const struct file_operations disable_late_binding_fops =
> {
> > .write = disable_late_binding_set,
> > };
> >
> > +static ssize_t addr_fault_reporting_show(struct file *f, char __user *ubuf,
> > + size_t size, loff_t *pos)
> > +{
> > + struct xe_device *xe = file_inode(f)->i_private;
> > + char buf[32];
> > + int len;
> > +
> > + len = scnprintf(buf, sizeof(buf), "%lld\n",
> > +xe->mem.vram->ttm.offline_mode);
> > +
> > + return simple_read_from_buffer(ubuf, size, pos, buf, len); }
> > +
> > +static int mempage_exec_offline(struct xe_device *xe, u64 mode) {
> > + struct xe_tile *tile = xe_device_get_root_tile(xe);
> > + struct xe_vram_region *vr = tile->mem.vram;
> > + struct ttm_buffer_object *tbo = NULL;
> > + struct xe_ttm_vram_mgr *vram_mgr;
> > + struct gpu_buddy_block *block;
> > + bool do_offline = false;
> > + struct gpu_buddy *mm;
> > + struct xe_bo *bo;
> > + u64 addr = 0x0;
> > + int ret = 0;
> > +
> > + vram_mgr = &vr->ttm;
> > + mm = &vram_mgr->mm;
> > + while (addr < vr->actual_physical_size) {
> > + do_offline = false;
> > + scoped_guard(mutex, &vram_mgr->lock) {
> > + block = gpu_buddy_allocated_addr_to_block(mm,
> addr);
> > + if (!block && mode ==
> MEMPAGE_OFFLINE_UNALLOCATED)
> > + do_offline = true;
> > + if (block && PTR_ERR(block) != -ENXIO) {
> > + if (!block->private)
> > + break;
> > + tbo = block->private;
> > + bo = ttm_to_xe_bo(tbo);
> > + if (bo->ttm.type == ttm_bo_type_device &&
> > + bo->flags & XE_BO_FLAG_USER &&
> > + bo->flags & XE_BO_FLAG_VRAM_MASK &&
> > + mode ==
> MEMPAGE_OFFLINE_USER_ALLOCATED) {
> > + do_offline = true;
> > + } else if (READ_ONCE(bo->q) &&
> > + mode ==
> MEMPAGE_OFFLINE_KERNEL_USER_GGTT_ALLOCATED) {
> > + /* lrc */
> > + struct xe_vm *migrate_vm;
> > +
> > + migrate_vm =
> xe_migrate_get_vm(tile->migrate);
> > + if (migrate_vm != READ_ONCE(bo-
> >q)->vm)
> > + do_offline = true;
> > + xe_vm_put(migrate_vm);
> > + } else if (bo->ttm.type == ttm_bo_type_kernel
> &&
> > + bo->flags &
> XE_BO_FLAG_FORCE_USER_VRAM &&
> > + bo->flags &
> XE_BO_FLAG_PAGETABLE &&
> > + mode ==
> MEMPAGE_OFFLINE_KERNEL_USER_PPGTT_ALLOCATED) {
> > + /* ppgtt */
> > + do_offline = true;
> > + } else if (bo->ttm.type == ttm_bo_type_kernel
> &&
> > + !(bo->flags &
> XE_BO_FLAG_FORCE_USER_VRAM) &&
> > + mode ==
> MEMPAGE_OFFLINE_KERNEL_CRITICAL_ALLOCATED) {
> > + do_offline = true;
> > + }
> > + }
> > + }
> > + if (do_offline) {
> > + /* Report fault — convert relative to DPA */
> > + ret = xe_ttm_vram_handle_addr_fault(xe, addr + vr-
> >dpa_base);
> > + if (ret) {
> > + if ((ret == -EIO) &&
> > + mode ==
> MEMPAGE_OFFLINE_KERNEL_USER_GGTT_ALLOCATED) {
> > + addr += SZ_4K;
> > + continue;
> > + }
> > + break;
> > + }
> > + /* Verify page is now reserved */
> > + scoped_guard(mutex, &vram_mgr->lock) {
> > + block =
> gpu_buddy_allocated_addr_to_block(mm, addr);
> > + if (!block || PTR_ERR(block) == -ENXIO ||
> block->private)
> > + ret = -EBUSY;
> > + }
> > + break;
> > + }
> > + addr += SZ_4K;
> > + }
> > + if (!do_offline)
> > + drm_warn(&xe->drm, "no such object, ret:%d\n", ret);
> > +
> > + return ret;
> > +}
> > +
> > +static ssize_t addr_fault_reporting_set(struct file *f, const char __user
> *ubuf,
> > + size_t size, loff_t *pos)
> > +{
> > + struct xe_device *xe = file_inode(f)->i_private;
> > + int ret = 0;
> > + u64 mode;
> > +
> > + ret = kstrtou64_from_user(ubuf, size, 0, &mode);
> > + if (ret)
> > + return ret;
> > +
> > + switch (mode) {
> > + case MEMPAGE_OFFLINE_UNALLOCATED:
> > + case MEMPAGE_OFFLINE_USER_ALLOCATED:
> > + case MEMPAGE_OFFLINE_KERNEL_USER_GGTT_ALLOCATED:
> > + case MEMPAGE_OFFLINE_KERNEL_USER_PPGTT_ALLOCATED:
> > + case MEMPAGE_OFFLINE_KERNEL_CRITICAL_ALLOCATED:
> > + ret = mempage_exec_offline(xe, mode);
> > + break;
> > + case MEMPAGE_OFFLINE_RESERVED: {
> > + u64 stolen_base;
> > +
> > + stolen_base = xe_ttm_stolen_gpu_offset(xe);
> > + if (!stolen_base) {
> > + ret = -ENODEV;
> > + break;
> > + }
> > + ret = xe_ttm_vram_handle_addr_fault(xe, stolen_base);
> > + break;
> > + }
> > + default:
> > + ret = -EINVAL;
> > + break;
> > + }
> > +
> > + xe->mem.vram->ttm.offline_mode = mode;
> > + if (!ret || (ret == -EIO &&
> > + (mode ==
> MEMPAGE_OFFLINE_KERNEL_CRITICAL_ALLOCATED ||
> > + mode == MEMPAGE_OFFLINE_RESERVED))) {
> > + drm_info(&xe->drm, "offline mode %llu passed ret:%d\n",
> mode, ret);
> > + } else {
> > + drm_warn(&xe->drm, "offline mode %llu failed, ret:%d\n",
> mode, ret);
> > + return ret;
> > + }
> > +
> > + return size;
> > +}
> > +
> > +static const struct file_operations addr_fault_reporting_fops = {
> > + .owner = THIS_MODULE,
> > + .read = addr_fault_reporting_show,
> > + .write = addr_fault_reporting_set,
> > +};
> > +
> > void xe_debugfs_register(struct xe_device *xe) {
> > struct ttm_device *bdev = &xe->ttm;
> > @@ -632,6 +790,17 @@ void xe_debugfs_register(struct xe_device *xe)
> > if (man)
> > ttm_resource_manager_create_debugfs(man, root,
> "stolen_mm");
> >
> > + if (xe->info.platform == XE_CRESCENTISLAND) {
> > + man = ttm_manager_type(bdev, XE_PL_VRAM0);
> > + if (man) {
> > + char name[20];
> > +
> > + snprintf(name, sizeof(name), "invalid_addr_vram%d",
> 0);
> > + debugfs_create_file(name, 0600, root, xe,
> > + &addr_fault_reporting_fops);
> > + }
> > + }
> > +
> > for_each_tile(tile, xe, tile_id)
> > xe_tile_debugfs_register(tile);
> >
> > 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 3ad7966798eb..07ed88b47e04 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;
> > + /** @offline_mode: debugfs hook for setting page offline mode */
> > + u64 offline_mode;
> > };
> >
> > /**
> > --
> > 2.52.0
> >
^ permalink raw reply [flat|nested] 17+ messages in thread
* ✗ Xe.CI.FULL: failure for Add memory page offlining support (rev13)
2026-07-14 13:48 [PATCH V12 00/11] Add memory page offlining support Tejas Upadhyay
` (12 preceding siblings ...)
2026-07-14 14:53 ` ✓ Xe.CI.BAT: " Patchwork
@ 2026-07-14 20:13 ` Patchwork
13 siblings, 0 replies; 17+ messages in thread
From: Patchwork @ 2026-07-14 20:13 UTC (permalink / raw)
To: Upadhyay, Tejas; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 38368 bytes --]
== Series Details ==
Series: Add memory page offlining support (rev13)
URL : https://patchwork.freedesktop.org/series/161473/
State : failure
== Summary ==
CI Bug Log - changes from xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366_FULL -> xe-pw-161473v13_FULL
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-161473v13_FULL absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-161473v13_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-161473v13_FULL:
### IGT changes ###
#### Possible regressions ####
* igt@kms_async_flips@async-flip-suspend-resume:
- shard-lnl: [PASS][1] -> [INCOMPLETE][2] +1 other test incomplete
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-8/igt@kms_async_flips@async-flip-suspend-resume.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-2/igt@kms_async_flips@async-flip-suspend-resume.html
Known issues
------------
Here are the changes found in xe-pw-161473v13_FULL that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_big_fb@4-tiled-16bpp-rotate-90:
- shard-lnl: NOTRUN -> [SKIP][3] ([Intel XE#1407])
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_big_fb@4-tiled-16bpp-rotate-90.html
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip:
- shard-bmg: NOTRUN -> [SKIP][4] ([Intel XE#1124]) +2 other tests skip
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-async-flip.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
- shard-lnl: NOTRUN -> [SKIP][5] ([Intel XE#1124]) +2 other tests skip
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
* igt@kms_bw@connected-linear-tiling-3-displays-target-2160x1440p:
- shard-bmg: NOTRUN -> [SKIP][6] ([Intel XE#7679])
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_bw@connected-linear-tiling-3-displays-target-2160x1440p.html
* igt@kms_ccs@bad-pixel-format-y-tiled-gen12-rc-ccs-cc:
- shard-bmg: NOTRUN -> [SKIP][7] ([Intel XE#2887]) +3 other tests skip
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_ccs@bad-pixel-format-y-tiled-gen12-rc-ccs-cc.html
* igt@kms_ccs@crc-primary-basic-y-tiled-gen12-rc-ccs:
- shard-lnl: NOTRUN -> [SKIP][8] ([Intel XE#2887])
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_ccs@crc-primary-basic-y-tiled-gen12-rc-ccs.html
* igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs:
- shard-bmg: NOTRUN -> [SKIP][9] ([Intel XE#3432])
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_ccs@crc-primary-suspend-yf-tiled-ccs.html
* igt@kms_chamelium_audio@dp-audio:
- shard-lnl: NOTRUN -> [SKIP][10] ([Intel XE#373])
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_chamelium_audio@dp-audio.html
* igt@kms_chamelium_color@ctm-red-to-blue:
- shard-bmg: NOTRUN -> [SKIP][11] ([Intel XE#2325] / [Intel XE#7358])
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_chamelium_color@ctm-red-to-blue.html
* igt@kms_chamelium_frames@hdmi-crc-multiple:
- shard-bmg: NOTRUN -> [SKIP][12] ([Intel XE#2252])
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_chamelium_frames@hdmi-crc-multiple.html
* igt@kms_content_protection@dp-mst-lic-type-1:
- shard-bmg: NOTRUN -> [SKIP][13] ([Intel XE#2390] / [Intel XE#6974])
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-7/igt@kms_content_protection@dp-mst-lic-type-1.html
* igt@kms_cursor_crc@cursor-offscreen-256x85:
- shard-bmg: NOTRUN -> [SKIP][14] ([Intel XE#2320])
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_cursor_crc@cursor-offscreen-256x85.html
* igt@kms_cursor_crc@cursor-offscreen-32x32:
- shard-lnl: NOTRUN -> [SKIP][15] ([Intel XE#1424])
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_cursor_crc@cursor-offscreen-32x32.html
* igt@kms_cursor_crc@cursor-random-512x170:
- shard-bmg: NOTRUN -> [SKIP][16] ([Intel XE#2321] / [Intel XE#7355]) +1 other test skip
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_cursor_crc@cursor-random-512x170.html
* igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy:
- shard-lnl: NOTRUN -> [SKIP][17] ([Intel XE#309] / [Intel XE#7343]) +1 other test skip
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-legacy.html
* igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions:
- shard-bmg: [PASS][18] -> [FAIL][19] ([Intel XE#7809])
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-bmg-3/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-6/igt@kms_cursor_legacy@flip-vs-cursor-atomic-transitions.html
* igt@kms_dsc@dsc-fractional-bpp:
- shard-lnl: NOTRUN -> [SKIP][20] ([Intel XE#8265])
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_dsc@dsc-fractional-bpp.html
* igt@kms_dsc@dsc-with-output-formats-bigjoiner:
- shard-bmg: NOTRUN -> [SKIP][21] ([Intel XE#8265]) +1 other test skip
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_dsc@dsc-with-output-formats-bigjoiner.html
* igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-different-formats:
- shard-lnl: NOTRUN -> [SKIP][22] ([Intel XE#4422] / [Intel XE#7442])
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_fbc_dirty_rect@fbc-dirty-rectangle-different-formats.html
* igt@kms_flip@2x-modeset-vs-vblank-race:
- shard-lnl: NOTRUN -> [SKIP][23] ([Intel XE#1421])
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_flip@2x-modeset-vs-vblank-race.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1:
- shard-lnl: [PASS][24] -> [FAIL][25] ([Intel XE#301])
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-7/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-5/igt@kms_flip@flip-vs-expired-vblank-interruptible@b-edp1.html
* igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw:
- shard-bmg: NOTRUN -> [SKIP][26] ([Intel XE#2311]) +16 other tests skip
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_frontbuffer_tracking@drrs-2p-pri-indfb-multidraw.html
* igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][27] ([Intel XE#656] / [Intel XE#7905]) +8 other tests skip
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_frontbuffer_tracking@drrs-2p-scndscrn-pri-shrfb-draw-blt.html
* igt@kms_frontbuffer_tracking@drrs-argb161616f-draw-mmap-wc:
- shard-lnl: NOTRUN -> [SKIP][28] ([Intel XE#7061] / [Intel XE#7356])
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_frontbuffer_tracking@drrs-argb161616f-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-fullscreen:
- shard-bmg: NOTRUN -> [SKIP][29] ([Intel XE#4141]) +3 other tests skip
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-fullscreen.html
* igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][30] ([Intel XE#6312] / [Intel XE#651])
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_frontbuffer_tracking@fbcdrrs-1p-primscrn-spr-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y:
- shard-lnl: NOTRUN -> [SKIP][31] ([Intel XE#1469] / [Intel XE#7399]) +1 other test skip
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y.html
* igt@kms_frontbuffer_tracking@fbcdrrshdr-1p-primscrn-cur-indfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][32] ([Intel XE#6312])
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_frontbuffer_tracking@fbcdrrshdr-1p-primscrn-cur-indfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-scndscrn-cur-indfb-draw-mmap-wc:
- shard-bmg: NOTRUN -> [ABORT][33] ([Intel XE#8007])
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-1/igt@kms_frontbuffer_tracking@fbcdrrshdr-2p-scndscrn-cur-indfb-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbchdr-2p-primscrn-pri-shrfb-draw-blt:
- shard-lnl: NOTRUN -> [SKIP][34] ([Intel XE#7905]) +8 other tests skip
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_frontbuffer_tracking@fbchdr-2p-primscrn-pri-shrfb-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcpsr-argb161616f-draw-render:
- shard-bmg: NOTRUN -> [SKIP][35] ([Intel XE#7061] / [Intel XE#7356])
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_frontbuffer_tracking@fbcpsr-argb161616f-draw-render.html
* igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-blt:
- shard-bmg: NOTRUN -> [SKIP][36] ([Intel XE#2313]) +12 other tests skip
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_frontbuffer_tracking@fbcpsr-rgb101010-draw-blt.html
* igt@kms_frontbuffer_tracking@fbcpsrhdr-indfb-scaledprimary:
- shard-lnl: NOTRUN -> [SKIP][37] ([Intel XE#7865]) +4 other tests skip
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_frontbuffer_tracking@fbcpsrhdr-indfb-scaledprimary.html
* igt@kms_frontbuffer_tracking@psrhdr-argb161616f-draw-render:
- shard-bmg: NOTRUN -> [SKIP][38] ([Intel XE#7061]) +2 other tests skip
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_frontbuffer_tracking@psrhdr-argb161616f-draw-render.html
* igt@kms_pipe_stress@stress-xrgb8888-yftiled:
- shard-lnl: NOTRUN -> [SKIP][39] ([Intel XE#6912] / [Intel XE#7375])
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_pipe_stress@stress-xrgb8888-yftiled.html
* igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier:
- shard-bmg: NOTRUN -> [SKIP][40] ([Intel XE#7283])
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_plane@pixel-format-4-tiled-dg2-rc-ccs-cc-modifier.html
* igt@kms_plane@pixel-format-x-tiled-modifier@pipe-b-plane-5:
- shard-lnl: NOTRUN -> [SKIP][41] ([Intel XE#8303]) +1 other test skip
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_plane@pixel-format-x-tiled-modifier@pipe-b-plane-5.html
* igt@kms_plane@pixel-format-yf-tiled-modifier-source-clamping:
- shard-lnl: NOTRUN -> [SKIP][42] ([Intel XE#7283])
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_plane@pixel-format-yf-tiled-modifier-source-clamping.html
* igt@kms_plane_scaling@planes-downscale-factor-0-5-upscale-factor-0-25:
- shard-lnl: NOTRUN -> [SKIP][43] ([Intel XE#2763] / [Intel XE#6886]) +3 other tests skip
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_plane_scaling@planes-downscale-factor-0-5-upscale-factor-0-25.html
* igt@kms_pm_backlight@bad-brightness:
- shard-bmg: NOTRUN -> [SKIP][44] ([Intel XE#7376] / [Intel XE#7760] / [Intel XE#870])
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_pm_backlight@bad-brightness.html
* igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area:
- shard-lnl: NOTRUN -> [SKIP][45] ([Intel XE#2893] / [Intel XE#7304]) +1 other test skip
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_psr2_sf@fbc-pr-plane-move-sf-dmg-area.html
* igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-sf:
- shard-bmg: NOTRUN -> [SKIP][46] ([Intel XE#1489]) +1 other test skip
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_psr2_sf@psr2-overlay-plane-move-continuous-sf.html
* igt@kms_psr@fbc-psr2-sprite-plane-onoff:
- shard-lnl: NOTRUN -> [SKIP][47] ([Intel XE#1406] / [Intel XE#7345])
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_psr@fbc-psr2-sprite-plane-onoff.html
* igt@kms_psr@fbc-psr2-sprite-plane-onoff@edp-1:
- shard-lnl: NOTRUN -> [SKIP][48] ([Intel XE#1406] / [Intel XE#4609])
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@kms_psr@fbc-psr2-sprite-plane-onoff@edp-1.html
* igt@kms_psr@psr2-suspend:
- shard-bmg: NOTRUN -> [SKIP][49] ([Intel XE#2234] / [Intel XE#2850]) +2 other tests skip
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_psr@psr2-suspend.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-bmg: NOTRUN -> [SKIP][50] ([Intel XE#2426] / [Intel XE#5848])
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
* igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all:
- shard-lnl: NOTRUN -> [SKIP][51] ([Intel XE#1091] / [Intel XE#2849])
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@sriov_basic@enable-vfs-bind-unbind-each-numvfs-all.html
* igt@xe_compute@eu-busy-10s:
- shard-lnl: NOTRUN -> [SKIP][52] ([Intel XE#6592] / [Intel XE#6645] / [Intel XE#7391])
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@xe_compute@eu-busy-10s.html
* igt@xe_create@multigpu-create-massive-size:
- shard-bmg: NOTRUN -> [SKIP][53] ([Intel XE#2504] / [Intel XE#7319] / [Intel XE#7350])
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@xe_create@multigpu-create-massive-size.html
* igt@xe_evict_ccs@evict-overcommit-parallel-instantfree-reopen:
- shard-lnl: NOTRUN -> [SKIP][54] ([Intel XE#6540] / [Intel XE#688]) +1 other test skip
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@xe_evict_ccs@evict-overcommit-parallel-instantfree-reopen.html
* igt@xe_exec_balancer@no-exec-parallel-rebind:
- shard-lnl: NOTRUN -> [SKIP][55] ([Intel XE#7482]) +2 other tests skip
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@xe_exec_balancer@no-exec-parallel-rebind.html
* igt@xe_exec_basic@multigpu-many-execqueues-many-vm-null-defer-mmap:
- shard-lnl: NOTRUN -> [SKIP][56] ([Intel XE#1392])
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@xe_exec_basic@multigpu-many-execqueues-many-vm-null-defer-mmap.html
* igt@xe_exec_basic@multigpu-no-exec-bindexecqueue:
- shard-bmg: NOTRUN -> [SKIP][57] ([Intel XE#2322] / [Intel XE#7372]) +1 other test skip
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@xe_exec_basic@multigpu-no-exec-bindexecqueue.html
* igt@xe_exec_fault_mode@many-multi-queue-rebind-prefetch:
- shard-lnl: NOTRUN -> [SKIP][58] ([Intel XE#8374])
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@xe_exec_fault_mode@many-multi-queue-rebind-prefetch.html
* igt@xe_exec_fault_mode@once-multi-queue-userptr-invalidate-imm:
- shard-bmg: NOTRUN -> [SKIP][59] ([Intel XE#8374]) +1 other test skip
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@xe_exec_fault_mode@once-multi-queue-userptr-invalidate-imm.html
* igt@xe_exec_multi_queue@max-queues-preempt-mode-userptr:
- shard-lnl: NOTRUN -> [SKIP][60] ([Intel XE#8364]) +2 other tests skip
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@xe_exec_multi_queue@max-queues-preempt-mode-userptr.html
* igt@xe_exec_multi_queue@two-queues-basic-smem:
- shard-bmg: NOTRUN -> [SKIP][61] ([Intel XE#8364]) +5 other tests skip
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@xe_exec_multi_queue@two-queues-basic-smem.html
* igt@xe_exec_reset@long-spin-many-preempt-gt1-threads:
- shard-bmg: [PASS][62] -> [FAIL][63] ([Intel XE#7956])
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-bmg-2/igt@xe_exec_reset@long-spin-many-preempt-gt1-threads.html
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-1/igt@xe_exec_reset@long-spin-many-preempt-gt1-threads.html
* igt@xe_exec_threads@threads-multi-queue-cm-fd-basic:
- shard-lnl: NOTRUN -> [SKIP][64] ([Intel XE#8378]) +2 other tests skip
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@xe_exec_threads@threads-multi-queue-cm-fd-basic.html
* igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr-rebind:
- shard-bmg: NOTRUN -> [SKIP][65] ([Intel XE#8378]) +1 other test skip
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@xe_exec_threads@threads-multi-queue-cm-fd-userptr-rebind.html
* igt@xe_gpgpu_fill@offset-4x4:
- shard-bmg: NOTRUN -> [SKIP][66] ([Intel XE#7954])
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@xe_gpgpu_fill@offset-4x4.html
* igt@xe_module_load@load:
- shard-lnl: ([PASS][67], [PASS][68], [PASS][69], [PASS][70], [PASS][71], [PASS][72], [PASS][73], [PASS][74], [PASS][75], [PASS][76], [PASS][77], [PASS][78], [PASS][79], [PASS][80], [PASS][81], [PASS][82], [PASS][83], [PASS][84], [PASS][85], [PASS][86], [PASS][87], [PASS][88], [PASS][89], [PASS][90], [PASS][91]) -> ([PASS][92], [PASS][93], [PASS][94], [PASS][95], [PASS][96], [PASS][97], [PASS][98], [PASS][99], [PASS][100], [PASS][101], [PASS][102], [PASS][103], [PASS][104], [PASS][105], [PASS][106], [PASS][107], [PASS][108], [PASS][109], [PASS][110], [PASS][111], [PASS][112], [PASS][113], [PASS][114], [PASS][115], [SKIP][116], [PASS][117]) ([Intel XE#378] / [Intel XE#7405])
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-3/igt@xe_module_load@load.html
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-6/igt@xe_module_load@load.html
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-6/igt@xe_module_load@load.html
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-7/igt@xe_module_load@load.html
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-7/igt@xe_module_load@load.html
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-1/igt@xe_module_load@load.html
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-1/igt@xe_module_load@load.html
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-1/igt@xe_module_load@load.html
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-2/igt@xe_module_load@load.html
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-3/igt@xe_module_load@load.html
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-5/igt@xe_module_load@load.html
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-3/igt@xe_module_load@load.html
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-7/igt@xe_module_load@load.html
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-4/igt@xe_module_load@load.html
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-8/igt@xe_module_load@load.html
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-8/igt@xe_module_load@load.html
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-8/igt@xe_module_load@load.html
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-4/igt@xe_module_load@load.html
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-4/igt@xe_module_load@load.html
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-5/igt@xe_module_load@load.html
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-5/igt@xe_module_load@load.html
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-2/igt@xe_module_load@load.html
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-2/igt@xe_module_load@load.html
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-4/igt@xe_module_load@load.html
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-6/igt@xe_module_load@load.html
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@xe_module_load@load.html
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-5/igt@xe_module_load@load.html
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-6/igt@xe_module_load@load.html
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@xe_module_load@load.html
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-8/igt@xe_module_load@load.html
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-1/igt@xe_module_load@load.html
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-1/igt@xe_module_load@load.html
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-1/igt@xe_module_load@load.html
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-8/igt@xe_module_load@load.html
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-8/igt@xe_module_load@load.html
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-4/igt@xe_module_load@load.html
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-4/igt@xe_module_load@load.html
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-4/igt@xe_module_load@load.html
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-3/igt@xe_module_load@load.html
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-3/igt@xe_module_load@load.html
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-3/igt@xe_module_load@load.html
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-2/igt@xe_module_load@load.html
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-2/igt@xe_module_load@load.html
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-2/igt@xe_module_load@load.html
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@xe_module_load@load.html
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-5/igt@xe_module_load@load.html
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-5/igt@xe_module_load@load.html
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-6/igt@xe_module_load@load.html
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-6/igt@xe_module_load@load.html
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@xe_module_load@load.html
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-6/igt@xe_module_load@load.html
* igt@xe_multigpu_svm@mgpu-latency-prefetch:
- shard-lnl: NOTRUN -> [SKIP][118] ([Intel XE#6964])
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@xe_multigpu_svm@mgpu-latency-prefetch.html
* igt@xe_pm@d3cold-basic:
- shard-bmg: NOTRUN -> [SKIP][119] ([Intel XE#2284] / [Intel XE#7370])
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@xe_pm@d3cold-basic.html
* igt@xe_prefetch_fault@prefetch-fault-svm:
- shard-bmg: NOTRUN -> [SKIP][120] ([Intel XE#7599])
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@xe_prefetch_fault@prefetch-fault-svm.html
* igt@xe_query@multigpu-query-invalid-query:
- shard-bmg: NOTRUN -> [SKIP][121] ([Intel XE#944])
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@xe_query@multigpu-query-invalid-query.html
* igt@xe_query@multigpu-query-uc-fw-version-guc:
- shard-lnl: NOTRUN -> [SKIP][122] ([Intel XE#944])
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@xe_query@multigpu-query-uc-fw-version-guc.html
* igt@xe_sriov_flr@flr-vfs-parallel:
- shard-lnl: NOTRUN -> [SKIP][123] ([Intel XE#4273])
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@xe_sriov_flr@flr-vfs-parallel.html
#### Possible fixes ####
* igt@core_hotunplug@hotunbind-rebind:
- shard-bmg: [ABORT][124] ([Intel XE#8007]) -> [PASS][125] +1 other test pass
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-bmg-10/igt@core_hotunplug@hotunbind-rebind.html
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-8/igt@core_hotunplug@hotunbind-rebind.html
* igt@kms_async_flips@alternate-sync-async-flip-atomic:
- shard-lnl: [FAIL][126] ([Intel XE#3718] / [Intel XE#7265]) -> [PASS][127]
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-3/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-6/igt@kms_async_flips@alternate-sync-async-flip-atomic.html
* igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-edp-1:
- shard-lnl: [FAIL][128] ([Intel XE#7265]) -> [PASS][129]
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-3/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-edp-1.html
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-6/igt@kms_async_flips@alternate-sync-async-flip-atomic@pipe-b-edp-1.html
* igt@xe_evict@evict-mixed-many-threads-small:
- shard-bmg: [INCOMPLETE][130] ([Intel XE#6321] / [Intel XE#8355]) -> [PASS][131]
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-bmg-9/igt@xe_evict@evict-mixed-many-threads-small.html
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-3/igt@xe_evict@evict-mixed-many-threads-small.html
* igt@xe_exec_reset@long-spin-reuse-many-preempt-media:
- shard-bmg: [FAIL][132] ([Intel XE#7850]) -> [PASS][133]
[132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-bmg-10/igt@xe_exec_reset@long-spin-reuse-many-preempt-media.html
[133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-5/igt@xe_exec_reset@long-spin-reuse-many-preempt-media.html
* igt@xe_wedged@basic-wedged:
- shard-lnl: [ABORT][134] ([Intel XE#3119]) -> [PASS][135]
[134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-2/igt@xe_wedged@basic-wedged.html
[135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-7/igt@xe_wedged@basic-wedged.html
#### Warnings ####
* igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions:
- shard-lnl: [SKIP][136] ([Intel XE#309] / [Intel XE#7343]) -> [SKIP][137] ([Intel XE#309] / [Intel XE#7343] / [Intel XE#7935])
[136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-lnl-6/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html
[137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-lnl-8/igt@kms_cursor_legacy@cursorb-vs-flipb-atomic-transitions.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-bmg: [SKIP][138] ([Intel XE#2426] / [Intel XE#5848]) -> [FAIL][139] ([Intel XE#1729] / [Intel XE#7424])
[138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366/shard-bmg-9/igt@kms_tiled_display@basic-test-pattern.html
[139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/shard-bmg-5/igt@kms_tiled_display@basic-test-pattern.html
[Intel XE#1091]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1091
[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#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#1469]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1469
[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#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#2320]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2320
[Intel XE#2321]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2321
[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#2390]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2390
[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#2763]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2763
[Intel XE#2849]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2849
[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#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#3119]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3119
[Intel XE#3432]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/3432
[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#378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/378
[Intel XE#4141]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4141
[Intel XE#4273]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4273
[Intel XE#4422]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4422
[Intel XE#4609]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/4609
[Intel XE#5848]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/5848
[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#6592]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6592
[Intel XE#6645]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6645
[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#6912]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/6912
[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#7265]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7265
[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#7343]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7343
[Intel XE#7345]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7345
[Intel XE#7350]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7350
[Intel XE#7355]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7355
[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#7370]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7370
[Intel XE#7372]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7372
[Intel XE#7375]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7375
[Intel XE#7376]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7376
[Intel XE#7391]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7391
[Intel XE#7399]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7399
[Intel XE#7405]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7405
[Intel XE#7424]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7424
[Intel XE#7442]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7442
[Intel XE#7482]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7482
[Intel XE#7599]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7599
[Intel XE#7679]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7679
[Intel XE#7760]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7760
[Intel XE#7809]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7809
[Intel XE#7850]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7850
[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#7954]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7954
[Intel XE#7956]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/7956
[Intel XE#8007]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/8007
[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#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#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
Build changes
-------------
* Linux: xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366 -> xe-pw-161473v13
IGT_9006: 6380a8af26359dd222e22679442272ded836c463 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git
xe-5398-d3709d2bd13debee032d55c0dd71f145e11ec366: d3709d2bd13debee032d55c0dd71f145e11ec366
xe-pw-161473v13: 161473v13
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-161473v13/index.html
[-- Attachment #2: Type: text/html, Size: 42457 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2026-07-14 20:13 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-14 13:48 [PATCH V12 00/11] Add memory page offlining support Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 01/11] drm/xe: Link VRAM object with gpu buddy Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 02/11] drm/gpu: Add gpu_buddy_allocated_addr_to_block helper Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 03/11] drm/xe: Link LRC BO and its execution Queue Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 04/11] drm/xe: Extend BO purge to handle vram pages as well Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 05/11] drm/xe: Handle physical memory address error Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 06/11] drm/xe/cri: Add debugfs to inject faulty vram address Tejas Upadhyay
2026-07-14 15:31 ` Rodrigo Vivi
2026-07-14 15:40 ` Upadhyay, Tejas
2026-07-14 13:49 ` [PATCH V12 07/11] gpu/buddy: Add routine to dump allocated buddy blocks Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 08/11] drm/xe/configfs: Add vram bad page reservation policy Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 09/11] drm/xe/cri: Add sysfs interface for bad gpu vram pages Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 10/11] drm/xe/uapi: Expose ban reason in EXEC_QUEUE_GET_PROPERTY_BAN Tejas Upadhyay
2026-07-14 13:49 ` [PATCH V12 11/11] drm/xe: Add soft/hard offline mode for VRAM page retirement Tejas Upadhyay
2026-07-14 14:16 ` ✓ CI.KUnit: success for Add memory page offlining support (rev13) Patchwork
2026-07-14 14:53 ` ✓ Xe.CI.BAT: " Patchwork
2026-07-14 20:13 ` ✗ Xe.CI.FULL: failure " Patchwork
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox